ZGlmZiAtLWdpdCBhL0JVSUxESU5HLnR4dCBiL0JVSUxESU5HLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41MGUyZmI3Ci0tLSAvZGV2L251bGwKKysrIGIvQlVJTERJTkcudHh0CkBAIC0wLDAgKzEsNjAwIEBACisqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisqKiAgICAgQnVpbGRpbmcgb24gVW5peCBQbGF0Zm9ybXMgKGluY2x1ZGluZyBDeWd3aW4pCisqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisKKworPT09PT09PT09PT09PT09PT09CitCdWlsZCBSZXF1aXJlbWVudHMKKz09PT09PT09PT09PT09PT09PQorCistLSBhdXRvY29uZiAyLjU2IG9yIGxhdGVyCistLSBhdXRvbWFrZSAxLjcgb3IgbGF0ZXIKKy0tIGxpYnRvb2wgMS40IG9yIGxhdGVyCisKKy0tIE5BU00KKyAgICogMC45OCBvciBsYXRlciBpcyByZXF1aXJlZCBmb3IgYSAzMi1iaXQgYnVpbGQKKyAgICogTkFTTSAyLjA1IG9yIGxhdGVyIGlzIHJlcXVpcmVkIGZvciBhIDY0LWJpdCBidWlsZAorICAgKiBOQVNNIDIuMDcgb3IgbGF0ZXIgaXMgcmVxdWlyZWQgZm9yIGEgNjQtYml0IGJ1aWxkIG9uIE9TIFguICBUaGlzIGNhbiBiZQorICAgICBvYnRhaW5lZCBmcm9tIE1hY1BvcnRzIChodHRwOi8vd3d3Lm1hY3BvcnRzLm9yZy8pLgorCisgICBUaGUgTkFTTSAyLjA1IFJQTXMgZG8gbm90IHdvcmsgb24gb2xkZXIgTGludXggc3lzdGVtcywgc3VjaCBhcyBSZWQgSGF0CisgICBFbnRlcnByaXNlIExpbnV4IDQuICBPbiBzdWNoIHN5c3RlbXMsIHlvdSBjYW4gZWFzaWx5IGJ1aWxkIGFuZCBpbnN0YWxsIE5BU00KKyAgIDIuMDUgZnJvbSB0aGUgc291cmNlIFJQTSBieSBleGVjdXRpbmcgdGhlIGZvbGxvd2luZyBhcyByb290OgorCisgICAgIEFSQ0g9YHVuYW1lIC1tYAorICAgICB3Z2V0IGh0dHA6Ly93d3cubmFzbS51cy9wdWIvbmFzbS9yZWxlYXNlYnVpbGRzLzIuMDUuMDEvbmFzbS0yLjA1LjAxLTEuc3JjLnJwbQorICAgICBycG1idWlsZCAtLXJlYnVpbGQgbmFzbS0yLjA1LjAxLTEuc3JjLnJwbQorICAgICBycG0gLVV2aCAvdXNyL3NyYy9yZWRoYXQvUlBNUy8kQVJDSC9uYXNtLTIuMDUuMDEtMS4kQVJDSC5ycG0KKworICAgTk9URTogTkFTTSBidWlsZCB3aWxsIGZhaWwgaWYgdGV4aW5mbyBpcyBub3QgaW5zdGFsbGVkLgorCistLSBHQ0MgdjQuMSBvciBsYXRlciByZWNvbW1lbmRlZCBmb3IgYmVzdCBwZXJmb3JtYW5jZQorCisKKz09PT09PT09PT09PT09PT09PQorT3V0LW9mLVRyZWUgQnVpbGRzCis9PT09PT09PT09PT09PT09PT0KKworQmluYXJ5IG9iamVjdHMsIGxpYnJhcmllcywgYW5kIGV4ZWN1dGFibGVzIGFyZSBnZW5lcmF0ZWQgaW4gdGhlIHNhbWUgZGlyZWN0b3J5Citmcm9tIHdoaWNoIGNvbmZpZ3VyZSB3YXMgZXhlY3V0ZWQgKHRoZSAiYmluYXJ5IGRpcmVjdG9yeSIpLCBhbmQgdGhpcyBkaXJlY3RvcnkKK25lZWQgbm90IG5lY2Vzc2FyaWx5IGJlIHRoZSBzYW1lIGFzIHRoZSBsaWJqcGVnLXR1cmJvIHNvdXJjZSBkaXJlY3RvcnkuICBZb3UKK2NhbiBjcmVhdGUgbXVsdGlwbGUgaW5kZXBlbmRlbnQgYmluYXJ5IGRpcmVjdG9yaWVzLCBpbiB3aGljaCBkaWZmZXJlbnQgdmVyc2lvbnMKK29mIGxpYmpwZWctdHVyYm8gY2FuIGJlIGJ1aWx0IGZyb20gdGhlIHNhbWUgc291cmNlIHRyZWUgdXNpbmcgZGlmZmVyZW50Citjb21waWxlcnMgb3Igc2V0dGluZ3MuICBJbiB0aGUgc2VjdGlvbnMgYmVsb3csIHtidWlsZF9kaXJlY3Rvcnl9IHJlZmVycyB0byB0aGUKK2JpbmFyeSBkaXJlY3RvcnksIHdoZXJlYXMge3NvdXJjZV9kaXJlY3Rvcnl9IHJlZmVycyB0byB0aGUgbGlianBlZy10dXJibyBzb3VyY2UKK2RpcmVjdG9yeS4gIEZvciBpbi10cmVlIGJ1aWxkcywgdGhlc2UgZGlyZWN0b3JpZXMgYXJlIHRoZSBzYW1lLgorCisKKz09PT09PT09PT09PT09PT09PT09PT0KK0J1aWxkaW5nIGxpYmpwZWctdHVyYm8KKz09PT09PT09PT09PT09PT09PT09PT0KKworVGhlIGZvbGxvd2luZyBwcm9jZWR1cmUgd2lsbCBidWlsZCBsaWJqcGVnLXR1cmJvIG9uIExpbnV4LCBGcmVlQlNELCAzMi1iaXQKK09TIFgsIEN5Z3dpbiwgYW5kIFNvbGFyaXMveDg2IHN5c3RlbXMgKG9uIFNvbGFyaXMsIHRoaXMgZ2VuZXJhdGVzIGEgMzItYml0CitsaWJyYXJ5LiAgU2VlIGJlbG93IGZvciA2NC1iaXQgYnVpbGQgaW5zdHJ1Y3Rpb25zLikKKworICBjZCB7c291cmNlX2RpcmVjdG9yeX0KKyAgYXV0b3JlY29uZiAtZml2CisgIGNkIHtidWlsZF9kaXJlY3Rvcnl9CisgIHNoIHtzb3VyY2VfZGlyZWN0b3J5fS9jb25maWd1cmUgW2FkZGl0aW9uYWwgY29uZmlndXJlIGZsYWdzXQorICBtYWtlCisKK05PVEU6IFJ1bm5pbmcgYXV0b3JlY29uZiBpbiB0aGUgc291cmNlIGRpcmVjdG9yeSBpcyBvbmx5IG5lY2Vzc2FyeSBpZiBidWlsZGluZworbGlianBlZy10dXJibyBmcm9tIHRoZSBTVk4gcmVwb3NpdG9yeS4KKworVGhpcyB3aWxsIGdlbmVyYXRlIHRoZSBmb2xsb3dpbmcgZmlsZXMgdW5kZXIgLmxpYnMvCisKKyAgbGlianBlZy5hCisgICAgICBTdGF0aWMgbGluayBsaWJyYXJ5IGZvciBsaWJqcGVnLXR1cmJvCisKKyAgbGlianBlZy5zby57dmVyc2lvbn0gKExpbnV4LCBTb2xhcmlzKQorICBsaWJqcGVnLnt2ZXJzaW9ufS5keWxpYiAoT1MgWCkKKyAgY3lnanBlZy17dmVyc2lvbn0uZGxsIChDeWd3aW4pCisgICAgICBTaGFyZWQgbGlicmFyeSBmb3IgbGlianBlZy10dXJibworCisgIGxpYmpwZWcuc28gKExpbnV4LCBTb2xhcmlzKQorICBsaWJqcGVnLmR5bGliIChPUyBYKQorICBsaWJqcGVnLmRsbC5hIChDeWd3aW4pCisgICAgICBEZXZlbG9wbWVudCBzdHViIGZvciBsaWJqcGVnLXR1cmJvIHNoYXJlZCBsaWJyYXJ5CisKKyAgbGlidHVyYm9qcGVnLmEKKyAgICAgIFN0YXRpYyBsaW5rIGxpYnJhcnkgZm9yIFR1cmJvSlBFRy9PU1MKKworICBsaWJ0dXJib2pwZWcuc28gKExpbnV4LCBTb2xhcmlzKQorICBsaWJ0dXJib2pwZWcuZHlsaWIgKE9TIFgpCisgICAgICBTaGFyZWQgbGlicmFyeSBhbmQgZGV2ZWxvcG1lbnQgc3R1YiBmb3IgVHVyYm9KUEVHL09TUworCisgIGN5Z3R1cmJvanBlZy5kbGwgKEN5Z3dpbikKKyAgICAgIFNoYXJlZCBsaWJyYXJ5IGZvciBUdXJib0pQRUcvT1NTCisKKyAgbGlidHVyYm9qcGVnLmRsbC5hIChDeWd3aW4pCisgICAgICBEZXZlbG9wbWVudCBzdHViIGZvciBUdXJib0pQRUcvT1NTIHNoYXJlZCBsaWJyYXJ5CisKK3t2ZXJzaW9ufSBpcyA2Mi4wLjAsIDcuMC4wLCBvciA4LjAuMiwgZGVwZW5kaW5nIG9uIHdoZXRoZXIgbGlianBlZyB2NmIKKyhkZWZhdWx0KSwgdjcsIG9yIHY4IGVtdWxhdGlvbiBpcyBlbmFibGVkLiAgSWYgdXNpbmcgQ3lnd2luLCB7dmVyc2lvbn0gaXMKKzYyLCA3LCBvciA4LgorCisKK2xpYmpwZWcgdjcgb3IgdjggRW11bGF0aW9uCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitBZGQgLS13aXRoLWpwZWc3IHRvIHRoZSBjb25maWd1cmUgY29tbWFuZCBsaW5lIHRvIGJ1aWxkIGEgdmVyc2lvbiBvZgorbGlianBlZy10dXJibyB0aGF0IGlzIGNvbXBhdGlibGUgd2l0aCBsaWJqcGVnIHY3LiAgQWRkIC0td2l0aC1qcGVnOCB0byB0aGUKK2NvbmZpZ3VyZSBjb21tYW5kIHRvIGJ1aWxkIGEgdmVyc2lvbiBvZiBsaWJqcGVnLXR1cmJvIHRoYXQgaXMgY29tcGF0aWJsZSB3aXRoCitsaWJqcGVnIHY4LiAgU2VlIFJFQURNRS10dXJiby50eHQgZm9yIG1vcmUgaW5mb3JtYXRpb24gb24gbGlianBlZyB2NyBhbmQgdjgKK2VtdWxhdGlvbi4KKworCitBcml0aG1ldGljIENvZGluZyBTdXBwb3J0CistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK1NpbmNlIHRoZSBwYXRlbnQgb24gYXJpdGhtZXRpYyBjb2RpbmcgaGFzIGV4cGlyZWQsIHRoaXMgZnVuY3Rpb25hbGl0eSBoYXMgYmVlbgoraW5jbHVkZWQgaW4gdGhpcyByZWxlYXNlIG9mIGxpYmpwZWctdHVyYm8uICBsaWJqcGVnLXR1cmJvJ3MgaW1wbGVtZW50YXRpb24gaXMKK2Jhc2VkIG9uIHRoZSBpbXBsZW1lbnRhdGlvbiBpbiBsaWJqcGVnIHY4LCBidXQgaXQgd29ya3Mgd2hlbiBlbXVsYXRpbmcgbGlianBlZwordjcgb3IgdjZiIGFzIHdlbGwuICBUaGUgZGVmYXVsdCBpcyB0byBlbmFibGUgYm90aCBhcml0aG1ldGljIGVuY29kaW5nIGFuZAorZGVjb2RpbmcsIGJ1dCB0aG9zZSB3aG8gaGF2ZSBwaGlsb3NvcGhpY2FsIG9iamVjdGlvbnMgdG8gYXJpdGhtZXRpYyBjb2RpbmcgY2FuCithZGQgLS13aXRob3V0LWFyaXRoLWVuYyBvciAtLXdpdGhvdXQtYXJpdGgtZGVjIHRvIHRoZSBjb25maWd1cmUgY29tbWFuZCBsaW5lIHRvCitkaXNhYmxlIGVuY29kaW5nIG9yIGRlY29kaW5nIChyZXNwZWN0aXZlbHkuKQorCisKKz09PT09PT09PT09PT09PT09PT09PT09PQorSW5zdGFsbGluZyBsaWJqcGVnLXR1cmJvCis9PT09PT09PT09PT09PT09PT09PT09PT0KKworSWYgeW91IGludGVuZCB0byBpbnN0YWxsIHRoZXNlIGxpYnJhcmllcyBhbmQgdGhlIGFzc29jaWF0ZWQgaGVhZGVyIGZpbGVzLCB0aGVuCityZXBsYWNlICdtYWtlJyBpbiB0aGUgaW5zdHJ1Y3Rpb25zIGFib3ZlIHdpdGgKKworICBtYWtlIGluc3RhbGwgcHJlZml4PXtiYXNlIGRpcn0gbGliZGlyPXtsaWJyYXJ5IGRpcmVjdG9yeX0KKworRm9yIGV4YW1wbGUsCisKKyAgbWFrZSBpbnN0YWxsIHByZWZpeD0vdXNyL2xvY2FsIGxpYmRpcj0vdXNyL2xvY2FsL2xpYjY0CisKK3dpbGwgaW5zdGFsbCB0aGUgaGVhZGVyIGZpbGVzIGluIC91c3IvbG9jYWwvaW5jbHVkZSBhbmQgdGhlIGxpYnJhcnkgZmlsZXMgaW4KKy91c3IvbG9jYWwvbGliNjQuICBJZiAncHJlZml4JyBhbmQgJ2xpYmRpcicgYXJlIG5vdCBzcGVjaWZpZWQsIHRoZW4gdGhlIGRlZmF1bHQKK2lzIHRvIGluc3RhbGwgdGhlIGhlYWRlciBmaWxlcyBpbiAvb3B0L2xpYmpwZWctdHVyYm8vaW5jbHVkZSBhbmQgdGhlIGxpYnJhcnkKK2ZpbGVzIGluIC9vcHQvbGlianBlZy10dXJiby9saWIuCisKK05PVEU6IFlvdSBjYW4gc3BlY2lmeSBhIHByZWZpeCBvZiAvdXNyIGFuZCBhIGxpYmRpciBvZiwgZm9yIGluc3RhbmNlLAorL3Vzci9saWI2NCB0byBvdmVyd3JpdGUgdGhlIHN5c3RlbSdzIHZlcnNpb24gb2YgbGlianBlZy4gIElmIHlvdSBkbyB0aGlzLAoraG93ZXZlciwgdGhlbiBiZSBzdXJlIHRvIEJBQ0sgVVAgWU9VUiBTWVNURU0nUyBJTlNUQUxMQVRJT04gT0YgTElCSlBFRyBiZWZvcmUKK292ZXJ3cml0aW5nIGl0LiAgSXQgaXMgcmVjb21tZW5kZWQgdGhhdCB5b3UgaW5zdGVhZCBpbnN0YWxsIGxpYmpwZWctdHVyYm8gaW50bworYSBub24tc3lzdGVtIGRpcmVjdG9yeSBhbmQgbWFuaXB1bGF0ZSB0aGUgTERfTElCUkFSWV9QQVRIIG9yIGNyZWF0ZSBzeW0gbGlua3MKK3RvIGZvcmNlIGFwcGxpY2F0aW9ucyB0byB1c2UgbGlianBlZy10dXJibyBpbnN0ZWFkIG9mIGxpYmpwZWcuICBTZWUKK1JFQURNRS10dXJiby50eHQgZm9yIG1vcmUgaW5mb3JtYXRpb24uCisKKworPT09PT09PT09PT09PQorQnVpbGQgUmVjaXBlcworPT09PT09PT09PT09PQorCisKKzMyLWJpdCBMaWJyYXJ5IEJ1aWxkIG9uIDY0LWJpdCBMaW51eAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK0FkZAorCisgIC0taG9zdCBpNjg2LXBjLWxpbnV4LWdudSBDRkxBR1M9Jy1PMyAtbTMyJyBMREZMQUdTPS1tMzIKKwordG8gdGhlIGNvbmZpZ3VyZSBjb21tYW5kIGxpbmUuCisKKworNjQtYml0IExpYnJhcnkgQnVpbGQgb24gNjQtYml0IE9TIFgKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK0FkZAorCisgIC0taG9zdCB4ODZfNjQtYXBwbGUtZGFyd2luIE5BU009L29wdC9sb2NhbC9iaW4vbmFzbQorCit0byB0aGUgY29uZmlndXJlIGNvbW1hbmQgbGluZS4gIE5BU00gMi4wNyBvciBsYXRlciBmcm9tIE1hY1BvcnRzIG11c3QgYmUKK2luc3RhbGxlZC4KKworCiszMi1iaXQgTGlicmFyeSBCdWlsZCBvbiA2NC1iaXQgT1MgWAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworQWRkCisKKyAgQ0ZMQUdTPSctTzMgLW0zMicgTERGTEFHUz0tbTMyCisKK3RvIHRoZSBjb25maWd1cmUgY29tbWFuZCBsaW5lLgorCisKKzY0LWJpdCBCYWNrd2FyZC1Db21wYXRpYmxlIExpYnJhcnkgQnVpbGQgb24gNjQtYml0IE9TIFgKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworQWRkCisKKyAgLS1ob3N0IHg4Nl82NC1hcHBsZS1kYXJ3aW4gTkFTTT0vb3B0L2xvY2FsL2Jpbi9uYXNtIFwKKyAgQ0ZMQUdTPSctaXN5c3Jvb3QgL0RldmVsb3Blci9TREtzL01hY09TWDEwLjR1LnNkayBcCisgICAgLW1tYWNvc3gtdmVyc2lvbi1taW49MTAuNCAtTzMnIFwKKyAgICBMREZMQUdTPSctaXN5c3Jvb3QgL0RldmVsb3Blci9TREtzL01hY09TWDEwLjR1LnNkayBcCisgICAgLW1tYWNvc3gtdmVyc2lvbi1taW49MTAuNCcKKwordG8gdGhlIGNvbmZpZ3VyZSBjb21tYW5kIGxpbmUuICBUaGUgT1MgWCAxMC40IFNESywgYW5kIE5BU00gMi4wNyBvciBsYXRlciBmcm9tCitNYWNQb3J0cywgbXVzdCBiZSBpbnN0YWxsZWQuCisKKworMzItYml0IEJhY2t3YXJkLUNvbXBhdGlibGUgTGlicmFyeSBCdWlsZCBvbiBPUyBYCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworQWRkCisKKyAgQ0ZMQUdTPSctaXN5c3Jvb3QgL0RldmVsb3Blci9TREtzL01hY09TWDEwLjR1LnNkayBcCisgICAgLW1tYWNvc3gtdmVyc2lvbi1taW49MTAuNCAtTzMgLW0zMicgXAorICAgIExERkxBR1M9Jy1pc3lzcm9vdCAvRGV2ZWxvcGVyL1NES3MvTWFjT1NYMTAuNHUuc2RrIFwKKyAgICAtbW1hY29zeC12ZXJzaW9uLW1pbj0xMC40IC1tMzInCisKK3RvIHRoZSBjb25maWd1cmUgY29tbWFuZCBsaW5lLiAgVGhlIE9TIFggMTAuNCBTREsgbXVzdCBiZSBpbnN0YWxsZWQuCisKKworNjQtYml0IExpYnJhcnkgQnVpbGQgb24gNjQtYml0IFNvbGFyaXMKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK0FkZAorCisgIC0taG9zdCB4ODZfNjQtcGMtc29sYXJpcyBDRkxBR1M9Jy1PMyAtbTY0JyBMREZMQUdTPS1tNjQKKwordG8gdGhlIGNvbmZpZ3VyZSBjb21tYW5kIGxpbmUuCisKKworMzItYml0IExpYnJhcnkgQnVpbGQgb24gNjQtYml0IEZyZWVCU0QKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK0FkZAorCisgIC0taG9zdCBpMzg2LXVua25vd24tZnJlZWJzZCBDQz0nZ2NjIC1CIC91c3IvbGliMzInIENGTEFHUz0nLU8zIC1tMzInIFwKKyAgICBMREZMQUdTPSctQi91c3IvbGliMzInCisKK3RvIHRoZSBjb25maWd1cmUgY29tbWFuZCBsaW5lLiAgTkFTTSAyLjA3IG9yIGxhdGVyIGZyb20gRnJlZUJTRCBwb3J0cyBtdXN0IGJlCitpbnN0YWxsZWQuCisKKworU3VuIFN0dWRpbworLS0tLS0tLS0tLQorCitBZGQKKworICBDQz1jYworCit0byB0aGUgY29uZmlndXJlIGNvbW1hbmQgbGluZS4gIGxpYmpwZWctdHVyYm8gd2lsbCBhdXRvbWF0aWNhbGx5IGJlIGJ1aWx0IHdpdGgKK3RoZSBtYXhpbXVtIG9wdGltaXphdGlvbiBsZXZlbCAoLXhPNSkgdW5sZXNzIHlvdSBvdmVycmlkZSBDRkxBR1MuCisKK1RvIGJ1aWxkIGEgNjQtYml0IHZlcnNpb24gb2YgbGlianBlZy10dXJibyB1c2luZyBTdW4gU3R1ZGlvLCBhZGQKKworICAtLWhvc3QgeDg2XzY0LXBjLXNvbGFyaXMgQ0M9Y2MgQ0ZMQUdTPScteE81IC1tNjQnIExERkxBR1M9LW02NAorCit0byB0aGUgY29uZmlndXJlIGNvbW1hbmQgbGluZS4KKworCitNaW5HVyBCdWlsZCBvbiBDeWd3aW4KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitVc2UgQ01ha2UgKHNlZSByZWNpcGVzIGJlbG93KQorCisKKworKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorKiogICAgIEJ1aWxkaW5nIG9uIFdpbmRvd3MgKFZpc3VhbCBDKysgb3IgTWluR1cpCisqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisKKworPT09PT09PT09PT09PT09PT09CitCdWlsZCBSZXF1aXJlbWVudHMKKz09PT09PT09PT09PT09PT09PQorCistLSBDTWFrZSAoaHR0cDovL3d3dy5jbWFrZS5vcmcpIHYyLjYgb3IgbGF0ZXIKKworLS0gTWljcm9zb2Z0IFZpc3VhbCBDKysgMjAwNSBvciBsYXRlcgorCisgICBJZiB5b3UgZG9uJ3QgYWxyZWFkeSBoYXZlIFZpc3VhbCBDKyssIHRoZW4gdGhlIGVhc2llc3Qgd2F5IHRvIGdldCBpdCBpcyBieQorICAgaW5zdGFsbGluZyB0aGUgV2luZG93cyBTREs6CisKKyAgIGh0dHA6Ly9tc2RuLm1pY3Jvc29mdC5jb20vZW4tdXMvd2luZG93cy9iYjk4MDkyNC5hc3B4CisKKyAgIFRoZSBXaW5kb3dzIFNESyBpbmNsdWRlcyBib3RoIDMyLWJpdCBhbmQgNjQtYml0IFZpc3VhbCBDKysgY29tcGlsZXJzIGFuZAorICAgZXZlcnl0aGluZyBuZWNlc3NhcnkgdG8gYnVpbGQgbGlianBlZy10dXJiby4KKworICAgKiBGb3IgMzItYml0IGJ1aWxkcywgeW91IGNhbiBhbHNvIHVzZSBNaWNyb3NvZnQgVmlzdWFsIEMrKyBFeHByZXNzCisgICAgIEVkaXRpb24uICBWaXN1YWwgQysrIEV4cHJlc3MgRWRpdGlvbiBpcyBhIGZyZWUgZG93bmxvYWQuCisgICAqIElmIHlvdSBpbnRlbmQgdG8gYnVpbGQgbGlianBlZy10dXJibyBmcm9tIHRoZSBjb21tYW5kIGxpbmUsIHRoZW4gYWRkIHRoZQorICAgICBhcHByb3ByaWF0ZSBjb21waWxlciBhbmQgU0RLIGRpcmVjdG9yaWVzIHRvIHRoZSBJTkNMVURFLCBMSUIsIGFuZCBQQVRICisgICAgIGVudmlyb25tZW50IHZhcmlhYmxlcy4gIFRoaXMgaXMgZ2VuZXJhbGx5IGFjY29tcGxpc2hlZCBieSBleGVjdXRpbmcKKyAgICAgdmN2YXJzMzIuYmF0IG9yIHZjdmFyczY0LmJhdCBhbmQgU2V0RW52LmNtZC4gIHZjdmFyczMyLmJhdCBhbmQKKyAgICAgdmN2YXJzNjQuYmF0IGFyZSBwYXJ0IG9mIFZpc3VhbCBDKysgYW5kIGFyZSBsb2NhdGVkIGluIHRoZSBzYW1lIGRpcmVjdG9yeQorICAgICBhcyB0aGUgY29tcGlsZXIuICBTZXRFbnYuY21kIGlzIHBhcnQgb2YgdGhlIFdpbmRvd3MgU0RLLiAgWW91IGNhbiBwYXNzCisgICAgIG9wdGlvbmFsIGFyZ3VtZW50cyB0byBTZXRFbnYuY21kIHRvIHNwZWNpZnkgYSAzMi1iaXQgb3IgNjQtYml0IGJ1aWxkCisgICAgIGVudmlyb25tZW50LgorCisuLi4gT1IgLi4uCisKKy0tIE1pbkdXCisKKyAgIEdDQyB2NC4xIG9yIGxhdGVyIHJlY29tbWVuZGVkIGZvciBiZXN0IHBlcmZvcm1hbmNlCisKKy0tIE5BU00gKGh0dHA6Ly93d3cubmFzbS51cy8pIDAuOTggb3IgbGF0ZXIgKE5BU00gMi4wNSBvciBsYXRlciBpcyByZXF1aXJlZCBmb3IKKyAgIGEgNjQtYml0IGJ1aWxkKQorCisKKz09PT09PT09PT09PT09PT09PQorT3V0LW9mLVRyZWUgQnVpbGRzCis9PT09PT09PT09PT09PT09PT0KKworQmluYXJ5IG9iamVjdHMsIGxpYnJhcmllcywgYW5kIGV4ZWN1dGFibGVzIGFyZSBnZW5lcmF0ZWQgaW4gdGhlIHNhbWUgZGlyZWN0b3J5Citmcm9tIHdoaWNoIGNtYWtlIHdhcyBleGVjdXRlZCAodGhlICJiaW5hcnkgZGlyZWN0b3J5IiksIGFuZCB0aGlzIGRpcmVjdG9yeSBuZWVkCitub3QgbmVjZXNzYXJpbHkgYmUgdGhlIHNhbWUgYXMgdGhlIGxpYmpwZWctdHVyYm8gc291cmNlIGRpcmVjdG9yeS4gIFlvdSBjYW4KK2NyZWF0ZSBtdWx0aXBsZSBpbmRlcGVuZGVudCBiaW5hcnkgZGlyZWN0b3JpZXMsIGluIHdoaWNoIGRpZmZlcmVudCB2ZXJzaW9ucyBvZgorbGlianBlZy10dXJibyBjYW4gYmUgYnVpbHQgZnJvbSB0aGUgc2FtZSBzb3VyY2UgdHJlZSB1c2luZyBkaWZmZXJlbnQgY29tcGlsZXJzCitvciBzZXR0aW5ncy4gIEluIHRoZSBzZWN0aW9ucyBiZWxvdywge2J1aWxkX2RpcmVjdG9yeX0gcmVmZXJzIHRvIHRoZSBiaW5hcnkKK2RpcmVjdG9yeSwgd2hlcmVhcyB7c291cmNlX2RpcmVjdG9yeX0gcmVmZXJzIHRvIHRoZSBsaWJqcGVnLXR1cmJvIHNvdXJjZQorZGlyZWN0b3J5LiAgRm9yIGluLXRyZWUgYnVpbGRzLCB0aGVzZSBkaXJlY3RvcmllcyBhcmUgdGhlIHNhbWUuCisKKworPT09PT09PT09PT09PT09PT09PT09PQorQnVpbGRpbmcgbGlianBlZy10dXJibworPT09PT09PT09PT09PT09PT09PT09PQorCisKK1Zpc3VhbCBDKysgKENvbW1hbmQgTGluZSkKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworICBjZCB7YnVpbGRfZGlyZWN0b3J5fQorICBjbWFrZSAtRyAiTk1ha2UgTWFrZWZpbGVzIiAtRENNQUtFX0JVSUxEX1RZUEU9UmVsZWFzZSB7c291cmNlX2RpcmVjdG9yeX0KKyAgbm1ha2UKKworVGhpcyB3aWxsIGJ1aWxkIGVpdGhlciBhIDMyLWJpdCBvciBhIDY0LWJpdCB2ZXJzaW9uIG9mIGxpYmpwZWctdHVyYm8sIGRlcGVuZGluZworb24gd2hpY2ggdmVyc2lvbiBvZiBjbC5leGUgaXMgaW4gdGhlIFBBVEguCisKK1RoZSBmb2xsb3dpbmcgZmlsZXMgd2lsbCBiZSBnZW5lcmF0ZWQgdW5kZXIge2J1aWxkX2RpcmVjdG9yeX06CisKKyAganBlZy1zdGF0aWMubGliCisgICAgICBTdGF0aWMgbGluayBsaWJyYXJ5IGZvciBsaWJqcGVnLXR1cmJvCisgIHNoYXJlZGxpYi9qcGVne3ZlcnNpb259LmRsbAorICAgICAgRExMIGZvciBsaWJqcGVnLXR1cmJvCisgIHNoYXJlZGxpYi9qcGVnLmxpYgorICAgICAgSW1wb3J0IGxpYnJhcnkgZm9yIGxpYmpwZWctdHVyYm8gRExMCisgIHR1cmJvanBlZy1zdGF0aWMubGliCisgICAgICBTdGF0aWMgbGluayBsaWJyYXJ5IGZvciBUdXJib0pQRUcvT1NTCisgIHR1cmJvanBlZy5kbGwKKyAgICAgIERMTCBmb3IgVHVyYm9KUEVHL09TUworICB0dXJib2pwZWcubGliCisgICAgICBJbXBvcnQgbGlicmFyeSBmb3IgVHVyYm9KUEVHL09TUyBETEwKKwore3ZlcnNpb259IGlzIDYyLCA3LCBvciA4LCBkZXBlbmRpbmcgb24gd2hldGhlciBsaWJqcGVnIHY2YiAoZGVmYXVsdCksIHY3LCBvcgordjggZW11bGF0aW9uIGlzIGVuYWJsZWQuCisKKworVmlzdWFsIEMrKyAoSURFKQorLS0tLS0tLS0tLS0tLS0tLQorCitDaG9vc2UgdGhlIGFwcHJvcHJpYXRlIENNYWtlIGdlbmVyYXRvciBvcHRpb24gZm9yIHlvdXIgdmVyc2lvbiBvZiBWaXN1YWwgU3R1ZGlvCisocnVuICJjbWFrZSIgd2l0aCBubyBhcmd1bWVudHMgZm9yIGEgbGlzdCBvZiBhdmFpbGFibGUgZ2VuZXJhdG9ycy4pICBGb3IKK2luc3RhbmNlOgorCisgIGNkIHtidWlsZF9kaXJlY3Rvcnl9CisgIGNtYWtlIC1HICJWaXN1YWwgU3R1ZGlvIDkgMjAwOCIge3NvdXJjZV9kaXJlY3Rvcnl9CisKK1lvdSBjYW4gdGhlbiBvcGVuIEFMTF9CVUlMRC52Y3Byb2ogaW4gVmlzdWFsIFN0dWRpbyBhbmQgYnVpbGQgb25lIG9mIHRoZQorY29uZmlndXJhdGlvbnMgaW4gdGhhdCBwcm9qZWN0ICgiRGVidWciLCAiUmVsZWFzZSIsIGV0Yy4pIHRvIGdlbmVyYXRlIGEgZnVsbAorYnVpbGQgb2YgbGlianBlZy10dXJiby4KKworVGhpcyB3aWxsIGdlbmVyYXRlIHRoZSBmb2xsb3dpbmcgZmlsZXMgdW5kZXIge2J1aWxkX2RpcmVjdG9yeX06CisKKyAge2NvbmZpZ3VyYXRpb259L2pwZWctc3RhdGljLmxpYgorICAgICAgU3RhdGljIGxpbmsgbGlicmFyeSBmb3IgbGlianBlZy10dXJibworICBzaGFyZWRsaWIve2NvbmZpZ3VyYXRpb259L2pwZWd7dmVyc2lvbn0uZGxsCisgICAgICBETEwgZm9yIGxpYmpwZWctdHVyYm8KKyAgc2hhcmVkbGliL3tjb25maWd1cmF0aW9ufS9qcGVnLmxpYgorICAgICAgSW1wb3J0IGxpYnJhcnkgZm9yIGxpYmpwZWctdHVyYm8gRExMCisgIHtjb25maWd1cmF0aW9ufS90dXJib2pwZWctc3RhdGljLmxpYgorICAgICAgU3RhdGljIGxpbmsgbGlicmFyeSBmb3IgVHVyYm9KUEVHL09TUworICB7Y29uZmlndXJhdGlvbn0vdHVyYm9qcGVnLmRsbAorICAgICAgRExMIGZvciBUdXJib0pQRUcvT1NTCisgIHtjb25maWd1cmF0aW9ufS90dXJib2pwZWcubGliCisgICAgICBJbXBvcnQgbGlicmFyeSBmb3IgVHVyYm9KUEVHL09TUyBETEwKKwore2NvbmZpZ3VyYXRpb259IGlzIERlYnVnLCBSZWxlYXNlLCBSZWxXaXRoRGViSW5mbywgb3IgTWluU2l6ZVJlbCwgZGVwZW5kaW5nIG9uCit0aGUgY29uZmlndXJhdGlvbiB5b3UgYnVpbHQgaW4gdGhlIElERSwgYW5kIHt2ZXJzaW9ufSBpcyA2MiwgNywgb3IgOCwKK2RlcGVuZGluZyBvbiB3aGV0aGVyIGxpYmpwZWcgdjZiIChkZWZhdWx0KSwgdjcsIG9yIHY4IGVtdWxhdGlvbiBpcyBlbmFibGVkLgorCisKK01pbkdXCistLS0tLQorCisgIGNkIHtidWlsZF9kaXJlY3Rvcnl9CisgIGNtYWtlIC1HICJNU1lTIE1ha2VmaWxlcyIge3NvdXJjZV9kaXJlY3Rvcnl9CisgIG1ha2UKKworVGhpcyB3aWxsIGdlbmVyYXRlIHRoZSBmb2xsb3dpbmcgZmlsZXMgdW5kZXIge2J1aWxkX2RpcmVjdG9yeX0KKworICBsaWJqcGVnLmEKKyAgICAgIFN0YXRpYyBsaW5rIGxpYnJhcnkgZm9yIGxpYmpwZWctdHVyYm8KKyAgc2hhcmVkbGliL2xpYmpwZWcte3ZlcnNpb259LmRsbAorICAgICAgRExMIGZvciBsaWJqcGVnLXR1cmJvCisgIHNoYXJlZGxpYi9saWJqcGVnLmRsbC5hCisgICAgICBJbXBvcnQgbGlicmFyeSBmb3IgbGlianBlZy10dXJibyBETEwKKyAgbGlidHVyYm9qcGVnLmEKKyAgICAgIFN0YXRpYyBsaW5rIGxpYnJhcnkgZm9yIFR1cmJvSlBFRy9PU1MKKyAgbGlidHVyYm9qcGVnLmRsbAorICAgICAgRExMIGZvciBUdXJib0pQRUcvT1NTCisgIGxpYnR1cmJvanBlZy5kbGwuYQorICAgICAgSW1wb3J0IGxpYnJhcnkgZm9yIFR1cmJvSlBFRy9PU1MgRExMCisKK3t2ZXJzaW9ufSBpcyA2MiwgNywgb3IgOCwgZGVwZW5kaW5nIG9uIHdoZXRoZXIgbGlianBlZyB2NmIgKGRlZmF1bHQpLCB2Nywgb3IKK3Y4IGVtdWxhdGlvbiBpcyBlbmFibGVkLgorCisKK0RlYnVnIEJ1aWxkCistLS0tLS0tLS0tLQorCitBZGQgIi1EQ01BS0VfQlVJTERfVFlQRT1EZWJ1ZyIgdG8gdGhlIGNtYWtlIGNvbW1hbmQgbGluZS4gIE9yLCBpZiBidWlsZGluZyB3aXRoCitOTWFrZSwgcmVtb3ZlICItRENNQUtFX0JVSUxEX1RZUEU9UmVsZWFzZSIgKERlYnVnIGJ1aWxkcyBhcmUgdGhlIGRlZmF1bHQgd2l0aAorTk1ha2UuKQorCisKK2xpYmpwZWcgdjcgb3IgdjggRW11bGF0aW9uCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitBZGQgIi1EV0lUSF9KUEVHNz0xIiB0byB0aGUgY21ha2UgY29tbWFuZCBsaW5lIHRvIGJ1aWxkIGEgdmVyc2lvbiBvZgorbGlianBlZy10dXJibyB0aGF0IGlzIGNvbXBhdGlibGUgd2l0aCBsaWJqcGVnIHY3LiAgQWRkICItRFdJVEhfSlBFRzg9MSIgdG8gdGhlCitjbWFrZSBjb21tYW5kIHRvIGJ1aWxkIGEgdmVyc2lvbiBvZiBsaWJqcGVnLXR1cmJvIHRoYXQgaXMgY29tcGF0aWJsZSB3aXRoCitsaWJqcGVnIHY4LiAgU2VlIFJFQURNRS10dXJiby50eHQgZm9yIG1vcmUgaW5mb3JtYXRpb24gb24gbGlianBlZyB2NyBhbmQgdjgKK2VtdWxhdGlvbi4KKworCitBcml0aG1ldGljIENvZGluZyBTdXBwb3J0CistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK1NpbmNlIHRoZSBwYXRlbnQgb24gYXJpdGhtZXRpYyBjb2RpbmcgaGFzIGV4cGlyZWQsIHRoaXMgZnVuY3Rpb25hbGl0eSBoYXMgYmVlbgoraW5jbHVkZWQgaW4gdGhpcyByZWxlYXNlIG9mIGxpYmpwZWctdHVyYm8uICBsaWJqcGVnLXR1cmJvJ3MgaW1wbGVtZW50YXRpb24gaXMKK2Jhc2VkIG9uIHRoZSBpbXBsZW1lbnRhdGlvbiBpbiBsaWJqcGVnIHY4LCBidXQgaXQgd29ya3Mgd2hlbiBlbXVsYXRpbmcgbGlianBlZwordjcgb3IgdjZiIGFzIHdlbGwuICBUaGUgZGVmYXVsdCBpcyB0byBlbmFibGUgYm90aCBhcml0aG1ldGljIGVuY29kaW5nIGFuZAorZGVjb2RpbmcsIGJ1dCB0aG9zZSB3aG8gaGF2ZSBwaGlsb3NvcGhpY2FsIG9iamVjdGlvbnMgdG8gYXJpdGhtZXRpYyBjb2RpbmcgY2FuCithZGQgIi1EV0lUSF9BUklUSF9FTkM9MCIgb3IgIi1EV0lUSF9BUklUSF9ERUM9MCIgdG8gdGhlIGNtYWtlIGNvbW1hbmQgbGluZSB0bworZGlzYWJsZSBlbmNvZGluZyBvciBkZWNvZGluZyAocmVzcGVjdGl2ZWx5LikKKworCis9PT09PT09PT09PT09PT09PT09PT09PT0KK0luc3RhbGxpbmcgbGlianBlZy10dXJibworPT09PT09PT09PT09PT09PT09PT09PT09CisKK1lvdSBjYW4gdXNlIHRoZSBidWlsZCBzeXN0ZW0gdG8gaW5zdGFsbCBsaWJqcGVnLXR1cmJvIGludG8gYSBkaXJlY3Rvcnkgb2YgeW91cgorY2hvb3NpbmcgKGFzIG9wcG9zZWQgdG8gY3JlYXRpbmcgYW4gaW5zdGFsbGVyLikgIFRvIGRvIHRoaXMsIGFkZDoKKworICAtRENNQUtFX0lOU1RBTExfUFJFRklYPXtpbnN0YWxsX2RpcmVjdG9yeX0KKwordG8gdGhlIGNtYWtlIGNvbW1hbmQgbGluZS4KKworRm9yIGV4YW1wbGUsCisKKyAgY21ha2UgLUcgIk5NYWtlIE1ha2VmaWxlcyIgLURDTUFLRV9CVUlMRF9UWVBFPVJlbGVhc2UgXAorICAgIC1EQ01BS0VfSU5TVEFMTF9QUkVGSVg9YzpcbGlianBlZy10dXJibyB7c291cmNlX2RpcmVjdG9yeX0KKyAgbm1ha2UgaW5zdGFsbAorCit3aWxsIGluc3RhbGwgdGhlIGhlYWRlciBmaWxlcyBpbiBjOlxsaWJqcGVnLXR1cmJvXGluY2x1ZGUsIHRoZSBsaWJyYXJ5IGZpbGVzCitpbiBjOlxsaWJqcGVnLXR1cmJvXGxpYiwgdGhlIERMTCdzIGluIGM6XGxpYmpwZWctdHVyYm9cYmluLCBhbmQgdGhlCitkb2N1bWVudGF0aW9uIGluIGM6XGxpYmpwZWctdHVyYm9cZG9jLgorCisKKz09PT09PT09PT09PT0KK0J1aWxkIFJlY2lwZXMKKz09PT09PT09PT09PT0KKworCis2NC1iaXQgTWluR1cgQnVpbGQgb24gQ3lnd2luCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKyAgY2Qge2J1aWxkX2RpcmVjdG9yeX0KKyAgQ0M9L3Vzci9iaW4veDg2XzY0LXc2NC1taW5ndzMyLWdjYyBcCisgICAgY21ha2UgLUcgIlVuaXggTWFrZWZpbGVzIiAtRENNQUtFX1NZU1RFTV9OQU1FPVdpbmRvd3MgXAorICAgIC1EQ01BS0VfQVI9L3Vzci9iaW4veDg2XzY0LXc2NC1taW5ndzMyLWFyIFwKKyAgICAtRENNQUtFX1JBTkxJQj0vdXNyL2Jpbi94ODZfNjQtdzY0LW1pbmd3MzItcmFubGliIHtzb3VyY2VfZGlyZWN0b3J5fQorICBtYWtlCisKK1RoaXMgcHJvZHVjZXMgYSA2NC1iaXQgYnVpbGQgb2YgbGlianBlZy10dXJibyB0aGF0IGRvZXMgbm90IGRlcGVuZCBvbgorY3lnd2luMS5kbGwgb3Igb3RoZXIgQ3lnd2luIERMTCdzLiAgVGhlIG1pbmd3NjQteDg2XzY0LWdjYy1jb3JlIGFuZAorbWluZ3c2NC14ODZfNjQtZ2NjLWcrKyBwYWNrYWdlcyAoYW5kIHRoZWlyIGRlcGVuZGVuY2llcykgbXVzdCBiZSBpbnN0YWxsZWQuCisKKworMzItYml0IE1pbkdXIEJ1aWxkIG9uIEN5Z3dpbgorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCisgIGNkIHtidWlsZF9kaXJlY3Rvcnl9CisgIENDPS91c3IvYmluL2k2ODYtdzY0LW1pbmd3MzItZ2NjIFwKKyAgICBjbWFrZSAtRyAiVW5peCBNYWtlZmlsZXMiIC1EQ01BS0VfU1lTVEVNX05BTUU9V2luZG93cyBcCisgICAgLUREQ01BS0VfQVI9L3Vzci9iaW4vaTY4Ni13NjQtbWluZ3czMi1hciBcCisgICAgLURDTUFLRV9SQU5MSUI9L3Vzci9iaW4vaTY4Ni13NjQtbWluZ3czMi1yYW5saWIge3NvdXJjZV9kaXJlY3Rvcnl9CisgIG1ha2UKKworVGhpcyBwcm9kdWNlcyBhIDMyLWJpdCBidWlsZCBvZiBsaWJqcGVnLXR1cmJvIHRoYXQgZG9lcyBub3QgZGVwZW5kIG9uCitjeWd3aW4xLmRsbCBvciBvdGhlciBDeWd3aW4gRExMJ3MuICBUaGUgbWluZ3c2NC1pNjg2LWdjYy1jb3JlIGFuZAorbWluZ3c2NC1pNjg2LWdjYy1nKysgcGFja2FnZXMgKGFuZCB0aGVpciBkZXBlbmRlbmNpZXMpIG11c3QgYmUgaW5zdGFsbGVkLgorCisKK01pbkdXLXc2NCBCdWlsZCBvbiBXaW5kb3dzCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitUaGlzIHByb2R1Y2VzIGEgNjQtYml0IGJ1aWxkIG9mIGxpYmpwZWctdHVyYm8gdXNpbmcgdGhlICJuYXRpdmUiIE1pbkdXLXc2NAordG9vbGNoYWluICh3aGljaCBpcyBmYXN0ZXIgdGhhbiB0aGUgQ3lnd2luIHZlcnNpb24pOgorCisgIGNkIHtidWlsZF9kaXJlY3Rvcnl9CisgIENDPXttaW5ndy13NjRfYmluYXJ5X3BhdGh9L3g4Nl82NC13NjQtbWluZ3czMi1nY2MgXAorICAgIGNtYWtlIC1HICJNU1lTIE1ha2VmaWxlcyIgXAorICAgIC1EQ01BS0VfQVI9e21pbmd3LXc2NF9iaW5hcnlfcGF0aH0veDg2XzY0LXc2NC1taW5ndzMyLWFyIFwKKyAgICAtRENNQUtFX1JBTkxJQj17bWluZ3ctdzY0X2JpbmFyeV9wYXRofS94ODZfNjQtdzY0LW1pbmd3MzItcmFubGliIFwKKyAgICB7c291cmNlX2RpcmVjdG9yeX0KKyAgbWFrZQorCisKK01pbkdXIEJ1aWxkIG9uIExpbnV4CistLS0tLS0tLS0tLS0tLS0tLS0tLQorCisgIGNkIHtidWlsZF9kaXJlY3Rvcnl9CisgIENDPXttaW5nd19iaW5hcnlfcGF0aH0vaTM4Ni1taW5ndzMyLWdjYyBcCisgICAgY21ha2UgLUcgIlVuaXggTWFrZWZpbGVzIiAtRENNQUtFX1NZU1RFTV9OQU1FPVdpbmRvd3MgXAorICAgIC1EQ01BS0VfQVI9e21pbmd3X2JpbmFyeV9wYXRofS9pMzg2LW1pbmd3MzItYXIgXAorICAgIC1EQ01BS0VfUkFOTElCPXttaW5nd19iaW5hcnlfcGF0aH0vaTM4Ni1taW5ndzMyLXJhbmxpYiBcCisgICAge3NvdXJjZV9kaXJlY3Rvcnl9CisgIG1ha2UKKworCisqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisqKiAgICAgQ3JlYXRpbmcgUmVsZWFzZSBQYWNrYWdlcworKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorCitUaGUgZm9sbG93aW5nIGNvbW1hbmRzIGNhbiBiZSB1c2VkIHRvIGNyZWF0ZSB2YXJpb3VzIHR5cGVzIG9mIHJlbGVhc2UgcGFja2FnZXM6CisKKworVW5peAorLS0tLQorCittYWtlIHJwbQorCisgIENyZWF0ZSBSZWQgSGF0LXN0eWxlIGJpbmFyeSBSUE0gcGFja2FnZS4gIFJlcXVpcmVzIFJQTSB2NCBvciBsYXRlci4KKworbWFrZSBzcnBtCisKKyAgVGhpcyBydW5zICdtYWtlIGRpc3QnIHRvIGNyZWF0ZSBhIHByaXN0aW5lIHNvdXJjZSB0YXJiYWxsLCB0aGVuIGNyZWF0ZXMgYQorICBSZWQgSGF0LXN0eWxlIHNvdXJjZSBSUE0gcGFja2FnZSBmcm9tIHRoZSB0YXJiYWxsLiAgUmVxdWlyZXMgUlBNIHY0IG9yIGxhdGVyLgorCittYWtlIGRlYgorCisgIENyZWF0ZSBEZWJpYW4tc3R5bGUgYmluYXJ5IHBhY2thZ2UuICBSZXF1aXJlcyBkcGtnLgorCittYWtlIGRtZworCisgIENyZWF0ZSBNYWNpbnRvc2ggcGFja2FnZS9kaXNrIGltYWdlLiAgVGhpcyByZXF1aXJlcyB0aGUgUGFja2FnZU1ha2VyCisgIGFwcGxpY2F0aW9uLCB3aGljaCBtdXN0IGJlIGluc3RhbGxlZCBpbiAvRGV2ZWxvcGVyL0FwcGxpY2F0aW9ucy9VdGlsaXRpZXMuCisKK21ha2UgdWRtZyBbQlVJTERESVIzMj17MzItYml0IGJ1aWxkIGRpcmVjdG9yeX1dCisKKyAgT24gNjQtYml0IE9TIFggc3lzdGVtcywgdGhpcyBjcmVhdGVzIGEgdmVyc2lvbiBvZiB0aGUgTWFjaW50b3NoIHBhY2thZ2UgYW5kCisgIGRpc2sgaW1hZ2Ugd2hpY2ggY29udGFpbnMgdW5pdmVyc2FsIGkzODYveDg2LTY0IGJpbmFyaWVzLiAgWW91IHNob3VsZCBmaXJzdAorICBjb25maWd1cmUgYSAzMi1iaXQgb3V0LW9mLXRyZWUgYnVpbGQgb2YgbGlianBlZy10dXJibywgdGhlbiBjb25maWd1cmUgYQorICA2NC1iaXQgb3V0LW9mLXRyZWUgYnVpbGQsIHRoZW4gcnVuICdtYWtlIHVkbWcnIGZyb20gdGhlIDY0LWJpdCBidWlsZAorICBkaXJlY3RvcnkuICBUaGUgYnVpbGQgc3lzdGVtIHdpbGwgbG9vayBmb3IgdGhlIDMyLWJpdCBidWlsZCB1bmRlcgorICB7c291cmNlX2RpcmVjdG9yeX0vb3N4eDg2IGJ5IGRlZmF1bHQsIGJ1dCB5b3UgY2FuIG92ZXJyaWRlIHRoaXMgYnkgc2V0dGluZworICB0aGUgQlVJTERESVIzMiB2YXJpYWJsZSBvbiB0aGUgbWFrZSBjb21tYW5kIGxpbmUgYXMgc2hvd24gYWJvdmUuCisKK21ha2Ugc3VucGtnCisKKyAgQnVpbGQgYSBTb2xhcmlzIHBhY2thZ2UuICBUaGlzIHJlcXVpcmVzIHBrZ21rLCBwa2d0cmFucywgYW5kIGJ6aXAyLgorCittYWtlIGNzdW5wa2cgW0JVSUxERElSMzI9ezMyLWJpdCBidWlsZCBkaXJlY3Rvcnl9XQorCisgIE9uIDY0LWJpdCBTb2xhcmlzIHN5c3RlbXMsIHRoaXMgY3JlYXRlcyBhIGNvbWJpbmVkIHBhY2thZ2Ugd2hpY2ggY29udGFpbnMKKyAgYm90aCAzMi1iaXQgYW5kIDY0LWJpdCBsaWJyYXJpZXMuICBZb3Ugc2hvdWxkIGZpcnN0IGNvbmZpZ3VyZSBhIDMyLWJpdAorICBvdXQtb2YtdHJlZSBidWlsZCBvZiBsaWJqcGVnLXR1cmJvLCB0aGVuIGNvbmZpZ3VyZSBhIDY0LWJpdCBvdXQtb2YtdHJlZQorICBidWlsZCwgdGhlbiBydW4gJ21ha2UgY3N1bnBrZycgZnJvbSB0aGUgNjQtYml0IGJ1aWxkIGRpcmVjdG9yeS4gIFRoZSBidWlsZAorICBzeXN0ZW0gd2lsbCBsb29rIGZvciB0aGUgMzItYml0IGJ1aWxkIHVuZGVyIHtzb3VyY2VfZGlyZWN0b3J5fS9zb2x4ODYgYnkKKyAgZGVmYXVsdCwgYnV0IHlvdSBjYW4gb3ZlcnJpZGUgdGhpcyBieSBzZXR0aW5nIHRoZSBCVUlMRERJUjMyIHZhcmlhYmxlIG9uIHRoZQorICBtYWtlIGNvbW1hbmQgbGluZSBhcyBzaG93biBhYm92ZS4KKworbWFrZSBjeWd3aW5wa2cKKworICBCdWlsZCBhIEN5Z3dpbiBiaW5hcnkgcGFja2FnZS4KKworCitXaW5kb3dzCistLS0tLS0tCisKK0lmIHVzaW5nIE5NYWtlOgorCisgIGNkIHtidWlsZF9kaXJlY3Rvcnl9CisgIG5tYWtlIGluc3RhbGxlcgorCitJZiB1c2luZyBNaW5HVzoKKworICBjZCB7YnVpbGRfZGlyZWN0b3J5fQorICBtYWtlIGluc3RhbGxlcgorCitJZiB1c2luZyB0aGUgVmlzdWFsIFN0dWRpbyBJREUsIGJ1aWxkIHRoZSAiaW5zdGFsbGVyIiBwcm9qZWN0LgorCitUaGUgaW5zdGFsbGVyIHBhY2thZ2UgKGxpYmpwZWctdHVyYm9bLWdjY11bNjRdLmV4ZSkgd2lsbCBiZSBsb2NhdGVkIHVuZGVyCit7YnVpbGRfZGlyZWN0b3J5fS4gIElmIGJ1aWxkaW5nIHVzaW5nIHRoZSBWaXN1YWwgU3R1ZGlvIElERSwgdGhlbiB0aGUgaW5zdGFsbGVyCitwYWNrYWdlIHdpbGwgYmUgbG9jYXRlZCBpbiBhIHN1YmRpcmVjdG9yeSB3aXRoIHRoZSBzYW1lIG5hbWUgYXMgdGhlCitjb25maWd1cmF0aW9uIHlvdSBidWlsdCAoc3VjaCBhcyB7YnVpbGRfZGlyZWN0b3J5fVxEZWJ1Z1wgb3IKK3tidWlsZF9kaXJlY3Rvcnl9XFJlbGVhc2VcKS4KKworQnVpbGRpbmcgYSBXaW5kb3dzIGluc3RhbGxlciByZXF1aXJlcyB0aGUgTnVsbHNvZnQgSW5zdGFsbCBTeXN0ZW0KKyhodHRwOi8vbnNpcy5zb3VyY2Vmb3JnZS5uZXQvLikgIG1ha2Vuc2lzLmV4ZSBzaG91bGQgYmUgaW4geW91ciBQQVRILgpkaWZmIC0tZ2l0IGEvQ01ha2VMaXN0cy50eHQgYi9DTWFrZUxpc3RzLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43NGQ5YjU1Ci0tLSAvZGV2L251bGwKKysrIGIvQ01ha2VMaXN0cy50eHQKQEAgLTAsMCArMSwzNDkgQEAKKyMKKyMgU2V0dXAKKyMKKworY21ha2VfbWluaW11bV9yZXF1aXJlZChWRVJTSU9OIDIuNikKKworcHJvamVjdChsaWJqcGVnLXR1cmJvIEMpCitzZXQoVkVSU0lPTiAxLjEuMSkKKworaWYoTUlOR1cgT1IgQ1lHV0lOKQorICBleGVjdXRlX3Byb2Nlc3MoQ09NTUFORCAiZGF0ZSIgIislWSVtJWQiIE9VVFBVVF9WQVJJQUJMRSBCVUlMRCkKKyAgc3RyaW5nKFJFR0VYIFJFUExBQ0UgIlxuIiAiIiBCVUlMRCAke0JVSUxEfSkKK2Vsc2VpZihXSU4zMikKKyAgZXhlY3V0ZV9wcm9jZXNzKENPTU1BTkQgIiR7Q01BS0VfU09VUkNFX0RJUn0vY21ha2VzY3JpcHRzL2dldGRhdGUuYmF0IgorICAgIE9VVFBVVF9WQVJJQUJMRSBCVUlMRCkKKyAgc3RyaW5nKFJFR0VYIFJFUExBQ0UgIlxuIiAiIiBCVUlMRCAke0JVSUxEfSkKK2Vsc2UoKQorICBtZXNzYWdlKEZBVEFMX0VSUk9SICJQbGF0Zm9ybSBub3Qgc3VwcG9ydGVkIGJ5IHRoaXMgYnVpbGQgc3lzdGVtLiAgVXNlIGF1dG90b29scyBpbnN0ZWFkLiIpCitlbmRpZigpCisKK2lmKE5PVCBDTUFLRV9CVUlMRF9UWVBFKQorICBzZXQoQ01BS0VfQlVJTERfVFlQRSBSZWxlYXNlKQorZW5kaWYoKQorCittZXNzYWdlKFNUQVRVUyAiQ01BS0VfQlVJTERfVFlQRSA9ICR7Q01BS0VfQlVJTERfVFlQRX0iKQorCisjIFRoaXMgb25seSB3b3JrcyBpZiBidWlsZGluZyBmcm9tIHRoZSBjb21tYW5kIGxpbmUuICBUaGVyZSBpcyBjdXJyZW50bHkgbm8gd2F5CisjIHRvIHNldCBhIHZhcmlhYmxlJ3MgdmFsdWUgYmFzZWQgb24gdGhlIGJ1aWxkIHR5cGUgd2hlbiB1c2luZyB0aGUgTVNWQyBJREUuCitpZihDTUFLRV9CVUlMRF9UWVBFIFNUUkVRVUFMICJEZWJ1ZyIpCisgIHNldChCVUlMRCAiJHtCVUlMRH1kIikKK2VuZGlmKCkKKworbWVzc2FnZShTVEFUVVMgIlZFUlNJT04gPSAke1ZFUlNJT059LCBCVUlMRCA9ICR7QlVJTER9IikKKworaWYoTk9UIERFRklORUQgV0lUSF9TSU1EKQorICBzZXQoV0lUSF9TSU1EIDEpCitlbmRpZigpCisKK2lmKE5PVCBERUZJTkVEIFdJVEhfQVJJVEhfRU5DKQorICBzZXQoV0lUSF9BUklUSF9FTkMgMSkKK2VuZGlmKCkKKworaWYoTk9UIERFRklORUQgV0lUSF9BUklUSF9ERUMpCisgIHNldChXSVRIX0FSSVRIX0RFQyAxKQorZW5kaWYoKQorCitpZihXSVRIX0FSSVRIX0VOQykKKyAgc2V0KENfQVJJVEhfQ09ESU5HX1NVUFBPUlRFRCAxKQorICBtZXNzYWdlKFNUQVRVUyAiQXJpdGhtZXRpYyBlbmNvZGluZyBzdXBwb3J0IGVuYWJsZWQiKQorZWxzZSgpCisgIG1lc3NhZ2UoU1RBVFVTICJBcml0aG1ldGljIGVuY29kaW5nIHN1cHBvcnQgZGlzYWJsZWQiKQorZW5kaWYoKQorCitpZihXSVRIX0FSSVRIX0RFQykKKyAgc2V0KERfQVJJVEhfQ09ESU5HX1NVUFBPUlRFRCAxKQorICBtZXNzYWdlKFNUQVRVUyAiQXJpdGhtZXRpYyBkZWNvZGluZyBzdXBwb3J0IGVuYWJsZWQiKQorZWxzZSgpCisgIG1lc3NhZ2UoU1RBVFVTICJBcml0aG1ldGljIGRlY29kaW5nIHN1cHBvcnQgZGlzYWJsZWQiKQorZW5kaWYoKQorCitzZXQoSlBFR19MSUJfVkVSU0lPTiA2MikKK3NldChETExfVkVSU0lPTiAke0pQRUdfTElCX1ZFUlNJT059KQorc2V0KEZVTExWRVJTSU9OICR7RExMX1ZFUlNJT059LjAuMCkKK2lmKFdJVEhfSlBFRzgpCisgIHNldChKUEVHX0xJQl9WRVJTSU9OIDgwKQorICBzZXQoRExMX1ZFUlNJT04gOCkKKyAgc2V0KEZVTExWRVJTSU9OICR7RExMX1ZFUlNJT059LjAuMikKKyAgbWVzc2FnZShTVEFUVVMgIkVtdWxhdGluZyBsaWJqcGVnIHY4IEFQSS9BQkkiKQorZWxzZWlmKFdJVEhfSlBFRzcpCisgIHNldChKUEVHX0xJQl9WRVJTSU9OIDcwKQorICBzZXQoRExMX1ZFUlNJT04gNykKKyAgc2V0KEZVTExWRVJTSU9OICR7RExMX1ZFUlNJT059LjAuMCkKKyAgbWVzc2FnZShTVEFUVVMgIkVtdWxhdGluZyBsaWJqcGVnIHY3IEFQSS9BQkkiKQorZW5kaWYoV0lUSF9KUEVHOCkKKworaWYoTVNWQykKKyAgIyBVc2UgdGhlIHN0YXRpYyBDIGxpYnJhcnkgZm9yIGFsbCBidWlsZCB0eXBlcworICBmb3JlYWNoKHZhciBDTUFLRV9DX0ZMQUdTIENNQUtFX0NfRkxBR1NfREVCVUcgQ01BS0VfQ19GTEFHU19SRUxFQVNFCisgICAgQ01BS0VfQ19GTEFHU19NSU5TSVpFUkVMIENNQUtFX0NfRkxBR1NfUkVMV0lUSERFQklORk8pCisgICAgaWYoJHt2YXJ9IE1BVENIRVMgIi9NRCIpCisgICAgICBzdHJpbmcoUkVHRVggUkVQTEFDRSAiL01EIiAiL01UIiAke3Zhcn0gIiR7JHt2YXJ9fSIpCisgICAgZW5kaWYoKQorICBlbmRmb3JlYWNoKCkKKworICBhZGRfZGVmaW5pdGlvbnMoLVczIC13ZDQ5OTYpCitlbmRpZigpCisKKyMgRGV0ZWN0IHdoZXRoZXIgY29tcGlsZXIgaXMgNjQtYml0CitpZihNU1ZDIEFORCBDTUFLRV9DTF82NCkKKyAgc2V0KFNJTURfWDg2XzY0IDEpCisgIHNldCg2NEJJVCAxKQorZWxzZWlmKENNQUtFX1NJWkVPRl9WT0lEX1AgTUFUQ0hFUyA4KQorICBzZXQoU0lNRF9YODZfNjQgMSkKKyAgc2V0KDY0QklUIDEpCitlbmRpZigpCisKK2lmKDY0QklUKQorICBtZXNzYWdlKFNUQVRVUyAiNjQtYml0IGJ1aWxkIikKK2Vsc2UoKQorICBtZXNzYWdlKFNUQVRVUyAiMzItYml0IGJ1aWxkIikKK2VuZGlmKCkKKworY29uZmlndXJlX2ZpbGUod2luL2pjb25maWcuaC5pbiBqY29uZmlnLmgpCitjb25maWd1cmVfZmlsZSh3aW4vY29uZmlnLmguaW4gY29uZmlnLmgpCisKK2luY2x1ZGVfZGlyZWN0b3JpZXMoJHtDTUFLRV9DVVJSRU5UX0JJTkFSWV9ESVJ9ICR7Q01BS0VfU09VUkNFX0RJUn0pCisKKworIworIyBUYXJnZXRzCisjCisKK3NldChKUEVHX1NPVVJDRVMgamNhcGltaW4uYyBqY2FwaXN0ZC5jIGpjY29lZmN0LmMgamNjb2xvci5jIGpjZGN0bWdyLmMgamNodWZmLmMKKyAgamNpbml0LmMgamNtYWluY3QuYyBqY21hcmtlci5jIGpjbWFzdGVyLmMgamNvbWFwaS5jIGpjcGFyYW0uYyBqY3BodWZmLmMKKyAgamNwcmVwY3QuYyBqY3NhbXBsZS5jIGpjdHJhbnMuYyBqZGFwaW1pbi5jIGpkYXBpc3RkLmMgamRhdGFkc3QuYyBqZGF0YXNyYy5jCisgIGpkY29lZmN0LmMgamRjb2xvci5jIGpkZGN0bWdyLmMgamRodWZmLmMgamRpbnB1dC5jIGpkbWFpbmN0LmMgamRtYXJrZXIuYworICBqZG1hc3Rlci5jIGpkbWVyZ2UuYyBqZHBodWZmLmMgamRwb3N0Y3QuYyBqZHNhbXBsZS5jIGpkdHJhbnMuYyBqZXJyb3IuYworICBqZmRjdGZsdC5jIGpmZGN0ZnN0LmMgamZkY3RpbnQuYyBqaWRjdGZsdC5jIGppZGN0ZnN0LmMgamlkY3RpbnQuYyBqaWRjdHJlZC5jCisgIGpxdWFudDEuYyBqcXVhbnQyLmMganV0aWxzLmMgam1lbW1nci5jIGptZW1ub2JzLmMpCisKK2lmKFdJVEhfQVJJVEhfRU5DIE9SIFdJVEhfQVJJVEhfREVDKQorICBzZXQoSlBFR19TT1VSQ0VTICR7SlBFR19TT1VSQ0VTfSBqYXJpY29tLmMpCitlbmRpZigpCisKK2lmKFdJVEhfQVJJVEhfRU5DKQorICBzZXQoSlBFR19TT1VSQ0VTICR7SlBFR19TT1VSQ0VTfSBqY2FyaXRoLmMpCitlbmRpZigpCisKK2lmKFdJVEhfQVJJVEhfREVDKQorICBzZXQoSlBFR19TT1VSQ0VTICR7SlBFR19TT1VSQ0VTfSBqZGFyaXRoLmMpCitlbmRpZigpCisKK2lmKFdJVEhfU0lNRCkKKyAgYWRkX2RlZmluaXRpb25zKC1EV0lUSF9TSU1EKQorICBhZGRfc3ViZGlyZWN0b3J5KHNpbWQpCisgIGlmKFNJTURfWDg2XzY0KQorICAgIHNldChKUEVHX1NPVVJDRVMgJHtKUEVHX1NPVVJDRVN9IHNpbWQvanNpbWRfeDg2XzY0LmMpCisgIGVsc2UoKQorICAgIHNldChKUEVHX1NPVVJDRVMgJHtKUEVHX1NPVVJDRVN9IHNpbWQvanNpbWRfaTM4Ni5jKQorICBlbmRpZigpCisgICMgVGhpcyB0ZWxscyBDTWFrZSB0aGF0IHRoZSAic291cmNlIiBmaWxlcyBoYXZlbid0IGJlZW4gZ2VuZXJhdGVkIHlldAorICBzZXRfc291cmNlX2ZpbGVzX3Byb3BlcnRpZXMoJHtTSU1EX09CSlN9IFBST1BFUlRJRVMgR0VORVJBVEVEIDEpCitlbHNlKCkKKyAgc2V0KEpQRUdfU09VUkNFUyAke0pQRUdfU09VUkNFU30ganNpbWRfbm9uZS5jKQorICBtZXNzYWdlKFNUQVRVUyAiTm90IHVzaW5nIFNJTUQgYWNjZWxlcmF0aW9uIikKK2VuZGlmKCkKKworYWRkX3N1YmRpcmVjdG9yeShzaGFyZWRsaWIpCisKK2FkZF9saWJyYXJ5KGpwZWctc3RhdGljIFNUQVRJQyAke0pQRUdfU09VUkNFU30gJHtTSU1EX09CSlN9KQoraWYoTk9UIE1TVkMpCisgIHNldF90YXJnZXRfcHJvcGVydGllcyhqcGVnLXN0YXRpYyBQUk9QRVJUSUVTIE9VVFBVVF9OQU1FIGpwZWcpCitlbmRpZigpCitpZihXSVRIX1NJTUQpCisgIGFkZF9kZXBlbmRlbmNpZXMoanBlZy1zdGF0aWMgc2ltZCkKK2VuZGlmKCkKKworYWRkX2xpYnJhcnkodHVyYm9qcGVnIFNIQVJFRCB0dXJib2pwZWdsLmMpCitzZXRfdGFyZ2V0X3Byb3BlcnRpZXModHVyYm9qcGVnIFBST1BFUlRJRVMgREVGSU5FX1NZTUJPTCBETExERUZJTkUpCit0YXJnZXRfbGlua19saWJyYXJpZXModHVyYm9qcGVnIGpwZWctc3RhdGljKQorc2V0X3RhcmdldF9wcm9wZXJ0aWVzKHR1cmJvanBlZyBQUk9QRVJUSUVTIExJTktfSU5URVJGQUNFX0xJQlJBUklFUyAiIikKKworYWRkX2xpYnJhcnkodHVyYm9qcGVnLXN0YXRpYyBTVEFUSUMgJHtKUEVHX1NPVVJDRVN9ICR7U0lNRF9PQkpTfQorICB0dXJib2pwZWdsLmMpCitpZihOT1QgTVNWQykKKyAgc2V0X3RhcmdldF9wcm9wZXJ0aWVzKHR1cmJvanBlZy1zdGF0aWMgUFJPUEVSVElFUyBPVVRQVVRfTkFNRSB0dXJib2pwZWcpCitlbmRpZigpCitpZihXSVRIX1NJTUQpCisgIGFkZF9kZXBlbmRlbmNpZXModHVyYm9qcGVnLXN0YXRpYyBzaW1kKQorZW5kaWYoKQorCithZGRfZXhlY3V0YWJsZShqcGVndXQganBlZ3V0LmMpCit0YXJnZXRfbGlua19saWJyYXJpZXMoanBlZ3V0IHR1cmJvanBlZykKKworYWRkX2V4ZWN1dGFibGUoanBlZ3V0LXN0YXRpYyBqcGVndXQuYykKK3RhcmdldF9saW5rX2xpYnJhcmllcyhqcGVndXQtc3RhdGljIHR1cmJvanBlZy1zdGF0aWMpCisKK2FkZF9leGVjdXRhYmxlKGpwZ3Rlc3QganBndGVzdC5jIGJtcC5jKQordGFyZ2V0X2xpbmtfbGlicmFyaWVzKGpwZ3Rlc3QgdHVyYm9qcGVnKQorCithZGRfZXhlY3V0YWJsZShqcGd0ZXN0LXN0YXRpYyBqcGd0ZXN0LmMgYm1wLmMpCit0YXJnZXRfbGlua19saWJyYXJpZXMoanBndGVzdC1zdGF0aWMgdHVyYm9qcGVnLXN0YXRpYykKKworYWRkX2V4ZWN1dGFibGUoY2pwZWctc3RhdGljIGNqcGVnLmMgY2RqcGVnLmMgcmRibXAuYyByZGdpZi5jIHJkcHBtLmMgcmRzd2l0Y2guYworICByZHRhcmdhLmMpCitzZXRfcHJvcGVydHkoVEFSR0VUIGNqcGVnLXN0YXRpYyBQUk9QRVJUWSBDT01QSUxFX0ZMQUdTCisgICItREJNUF9TVVBQT1JURUQgLURHSUZfU1VQUE9SVEVEIC1EUFBNX1NVUFBPUlRFRCAtRFRBUkdBX1NVUFBPUlRFRCIpCit0YXJnZXRfbGlua19saWJyYXJpZXMoY2pwZWctc3RhdGljIGpwZWctc3RhdGljKQorCithZGRfZXhlY3V0YWJsZShkanBlZy1zdGF0aWMgZGpwZWcuYyBjZGpwZWcuYyByZGNvbG1hcC5jIHJkc3dpdGNoLmMgd3JibXAuYyB3cmdpZi5jCisgIHdycHBtLmMgd3J0YXJnYS5jKQorc2V0X3Byb3BlcnR5KFRBUkdFVCBkanBlZy1zdGF0aWMgUFJPUEVSVFkgQ09NUElMRV9GTEFHUworICAiLURCTVBfU1VQUE9SVEVEIC1ER0lGX1NVUFBPUlRFRCAtRFBQTV9TVVBQT1JURUQgLURUQVJHQV9TVVBQT1JURUQiKQordGFyZ2V0X2xpbmtfbGlicmFyaWVzKGRqcGVnLXN0YXRpYyBqcGVnLXN0YXRpYykKKworYWRkX2V4ZWN1dGFibGUoanBlZ3RyYW4tc3RhdGljIGpwZWd0cmFuLmMgY2RqcGVnLmMgcmRzd2l0Y2guYyB0cmFuc3VwcC5jKQordGFyZ2V0X2xpbmtfbGlicmFyaWVzKGpwZWd0cmFuLXN0YXRpYyBqcGVnLXN0YXRpYykKKworYWRkX2V4ZWN1dGFibGUocmRqcGdjb20gcmRqcGdjb20uYykKKworYWRkX2V4ZWN1dGFibGUod3JqcGdjb20gcmRqcGdjb20uYykKKworCisjCisjIFRlc3RzCisjCisKK2VuYWJsZV90ZXN0aW5nKCkKK2FkZF90ZXN0KGpwZWd1dCBqcGVndXQpCithZGRfdGVzdChqcGVndXQteXV2IGpwZWd1dCAteXV2KQorYWRkX3Rlc3QoY2pwZWctaW50IHNoYXJlZGxpYi9janBlZyAtZGN0IGludCAtb3V0ZmlsZSB0ZXN0b3V0aW50LmpwZyAke0NNQUtFX1NPVVJDRV9ESVJ9L3Rlc3RvcmlnLnBwbSkKK2FkZF90ZXN0KGNqcGVnLWludC1jbXAgJHtDTUFLRV9DT01NQU5EfSAtRSBjb21wYXJlX2ZpbGVzICR7Q01BS0VfU09VUkNFX0RJUn0vdGVzdGltZ2ludC5qcGcgdGVzdG91dGludC5qcGcpCithZGRfdGVzdChjanBlZy1mYXN0IHNoYXJlZGxpYi9janBlZyAtZGN0IGZhc3QgLW9wdCAtb3V0ZmlsZSB0ZXN0b3V0ZnN0LmpwZyAke0NNQUtFX1NPVVJDRV9ESVJ9L3Rlc3RvcmlnLnBwbSkKK2FkZF90ZXN0KGNqcGVnLWZhc3QtY21wICR7Q01BS0VfQ09NTUFORH0gLUUgY29tcGFyZV9maWxlcyAke0NNQUtFX1NPVVJDRV9ESVJ9L3Rlc3RpbWdmc3QuanBnIHRlc3RvdXRmc3QuanBnKQorYWRkX3Rlc3QoY2pwZWctZmFzdC0xMDAgc2hhcmVkbGliL2NqcGVnIC1kY3QgZmFzdCAtcXVhbGl0eSAxMDAgLW9wdCAtb3V0ZmlsZSB0ZXN0b3V0ZnN0MTAwLmpwZyAke0NNQUtFX1NPVVJDRV9ESVJ9L3Rlc3RvcmlnLnBwbSkKK2FkZF90ZXN0KGNqcGVnLWZhc3QtMTAwLWNtcCAke0NNQUtFX0NPTU1BTkR9IC1FIGNvbXBhcmVfZmlsZXMgJHtDTUFLRV9TT1VSQ0VfRElSfS90ZXN0aW1nZnN0MTAwLmpwZyB0ZXN0b3V0ZnN0MTAwLmpwZykKK2FkZF90ZXN0KGNqcGVnLWZsb2F0IHNoYXJlZGxpYi9janBlZyAtZGN0IGZsb2F0IC1vdXRmaWxlIHRlc3RvdXRmbHQuanBnICR7Q01BS0VfU09VUkNFX0RJUn0vdGVzdG9yaWcucHBtKQoraWYoV0lUSF9TSU1EKQorYWRkX3Rlc3QoY2pwZWctZmxvYXQtY21wICR7Q01BS0VfQ09NTUFORH0gLUUgY29tcGFyZV9maWxlcyAke0NNQUtFX1NPVVJDRV9ESVJ9L3Rlc3RpbWdmbHQuanBnIHRlc3RvdXRmbHQuanBnKQorZWxzZSgpCithZGRfdGVzdChjanBlZy1mbG9hdC1jbXAgJHtDTUFLRV9DT01NQU5EfSAtRSBjb21wYXJlX2ZpbGVzICR7Q01BS0VfU09VUkNFX0RJUn0vdGVzdGltZ2ZsdC1ub3NpbWQuanBnIHRlc3RvdXRmbHQuanBnKQorZW5kaWYoKQorYWRkX3Rlc3QoZGpwZWctaW50IHNoYXJlZGxpYi9kanBlZyAtZGN0IGludCAtZmFzdCAtcHBtIC1vdXRmaWxlIHRlc3RvdXRpbnQucHBtICR7Q01BS0VfU09VUkNFX0RJUn0vdGVzdG9yaWcuanBnKQorYWRkX3Rlc3QoZGpwZWctaW50LWNtcCAke0NNQUtFX0NPTU1BTkR9IC1FIGNvbXBhcmVfZmlsZXMgJHtDTUFLRV9TT1VSQ0VfRElSfS90ZXN0aW1naW50LnBwbSB0ZXN0b3V0aW50LnBwbSkKK2FkZF90ZXN0KGRqcGVnLWZhc3Qgc2hhcmVkbGliL2RqcGVnIC1kY3QgZmFzdCAtcHBtIC1vdXRmaWxlIHRlc3RvdXRmc3QucHBtICR7Q01BS0VfU09VUkNFX0RJUn0vdGVzdG9yaWcuanBnKQorYWRkX3Rlc3QoZGpwZWctZmFzdC1jbXAgJHtDTUFLRV9DT01NQU5EfSAtRSBjb21wYXJlX2ZpbGVzICR7Q01BS0VfU09VUkNFX0RJUn0vdGVzdGltZ2ZzdC5wcG0gdGVzdG91dGZzdC5wcG0pCithZGRfdGVzdChkanBlZy1mbG9hdCBzaGFyZWRsaWIvZGpwZWcgLWRjdCBmbG9hdCAtcHBtIC1vdXRmaWxlIHRlc3RvdXRmbHQucHBtICR7Q01BS0VfU09VUkNFX0RJUn0vdGVzdG9yaWcuanBnKQoraWYoV0lUSF9TSU1EKQorYWRkX3Rlc3QoZGpwZWctZmxvYXQtY21wICR7Q01BS0VfQ09NTUFORH0gLUUgY29tcGFyZV9maWxlcyAke0NNQUtFX1NPVVJDRV9ESVJ9L3Rlc3RpbWdmbHQucHBtIHRlc3RvdXRmbHQucHBtKQorZWxzZSgpCithZGRfdGVzdChkanBlZy1mbG9hdC1jbXAgJHtDTUFLRV9DT01NQU5EfSAtRSBjb21wYXJlX2ZpbGVzICR7Q01BS0VfU09VUkNFX0RJUn0vdGVzdG9yaWcucHBtIHRlc3RvdXRmbHQucHBtKQorZW5kaWYoKQorYWRkX3Rlc3QoZGpwZWctMjU2IHNoYXJlZGxpYi9kanBlZyAtZGN0IGludCAtYm1wIC1jb2xvcnMgMjU2IC1vdXRmaWxlIHRlc3RvdXQuYm1wICAke0NNQUtFX1NPVVJDRV9ESVJ9L3Rlc3RvcmlnLmpwZykKK2FkZF90ZXN0KGRqcGVnLTI1Ni1jbXAgJHtDTUFLRV9DT01NQU5EfSAtRSBjb21wYXJlX2ZpbGVzICR7Q01BS0VfU09VUkNFX0RJUn0vdGVzdGltZy5ibXAgdGVzdG91dC5ibXApCithZGRfdGVzdChjanBlZy1wcm9nIHNoYXJlZGxpYi9janBlZyAtZGN0IGludCAtcHJvZ3Jlc3NpdmUgLW91dGZpbGUgdGVzdG91dHAuanBnICR7Q01BS0VfU09VUkNFX0RJUn0vdGVzdG9yaWcucHBtKQorYWRkX3Rlc3QoY2pwZWctcHJvZy1jbXAgJHtDTUFLRV9DT01NQU5EfSAtRSBjb21wYXJlX2ZpbGVzICR7Q01BS0VfU09VUkNFX0RJUn0vdGVzdGltZ3AuanBnIHRlc3RvdXRwLmpwZykKK2FkZF90ZXN0KGpwZWd0cmFuLXByb2cgc2hhcmVkbGliL2pwZWd0cmFuIC1vdXRmaWxlIHRlc3RvdXR0LmpwZyB0ZXN0b3V0cC5qcGcpCithZGRfdGVzdChqcGVndHJhbi1wcm9nLWNtcCAke0NNQUtFX0NPTU1BTkR9IC1FIGNvbXBhcmVfZmlsZXMgJHtDTUFLRV9TT1VSQ0VfRElSfS90ZXN0aW1naW50LmpwZyB0ZXN0b3V0dC5qcGcpCitpZihXSVRIX0FSSVRIX0VOQykKK2FkZF90ZXN0KGNqcGVnLWFyaSBzaGFyZWRsaWIvY2pwZWcgLWRjdCBpbnQgLWFyaXRobWV0aWMgLW91dGZpbGUgdGVzdG91dGFyaS5qcGcgJHtDTUFLRV9TT1VSQ0VfRElSfS90ZXN0b3JpZy5wcG0pCithZGRfdGVzdChjanBlZy1hcmktY21wICR7Q01BS0VfQ09NTUFORH0gLUUgY29tcGFyZV9maWxlcyAke0NNQUtFX1NPVVJDRV9ESVJ9L3Rlc3RpbWdhcmkuanBnIHRlc3RvdXRhcmkuanBnKQorYWRkX3Rlc3QoanBlZ3RyYW4tdG9hcmkgc2hhcmVkbGliL2pwZWd0cmFuIC1hcml0aG1ldGljIC1vdXRmaWxlIHRlc3RvdXRhLmpwZyAke0NNQUtFX1NPVVJDRV9ESVJ9L3Rlc3RpbWdpbnQuanBnKQorYWRkX3Rlc3QoanBlZ3RyYW4tdG9hcmktY21wICR7Q01BS0VfQ09NTUFORH0gLUUgY29tcGFyZV9maWxlcyAke0NNQUtFX1NPVVJDRV9ESVJ9L3Rlc3RpbWdhcmkuanBnIHRlc3RvdXRhLmpwZykKK2VuZGlmKCkKK2lmKFdJVEhfQVJJVEhfREVDKQorYWRkX3Rlc3QoZGpwZWctYXJpIHNoYXJlZGxpYi9kanBlZyAtZGN0IGludCAtZmFzdCAtcHBtIC1vdXRmaWxlIHRlc3RvdXRhcmkucHBtICR7Q01BS0VfU09VUkNFX0RJUn0vdGVzdGltZ2FyaS5qcGcpCithZGRfdGVzdChkanBlZy1hcmktY21wICR7Q01BS0VfQ09NTUFORH0gLUUgY29tcGFyZV9maWxlcyAke0NNQUtFX1NPVVJDRV9ESVJ9L3Rlc3RpbWdhcmkucHBtIHRlc3RvdXRhcmkucHBtKQorYWRkX3Rlc3QoanBlZ3RyYW4tZnJvbWFyaQlzaGFyZWRsaWIvanBlZ3RyYW4gLW91dGZpbGUgdGVzdG91dGEuanBnICR7Q01BS0VfU09VUkNFX0RJUn0vdGVzdGltZ2FyaS5qcGcpCithZGRfdGVzdChqcGVndHJhbi1mcm9tYXJpLWNtcCAke0NNQUtFX0NPTU1BTkR9IC1FIGNvbXBhcmVfZmlsZXMgJHtDTUFLRV9TT1VSQ0VfRElSfS90ZXN0aW1naW50LmpwZyB0ZXN0b3V0YS5qcGcpCitlbmRpZigpCithZGRfdGVzdChqcGVndHJhbi1jcm9wIHNoYXJlZGxpYi9qcGVndHJhbiAtY3JvcCAxMjB4OTArMjArNTAgLXRyYW5zcG9zZSAtcGVyZmVjdCAtb3V0ZmlsZSB0ZXN0b3V0Y3JvcC5qcGcgJHtDTUFLRV9TT1VSQ0VfRElSfS90ZXN0b3JpZy5qcGcpCithZGRfdGVzdChqcGVndHJhbi1jcm9wLWNtcCAke0NNQUtFX0NPTU1BTkR9IC1FIGNvbXBhcmVfZmlsZXMgJHtDTUFLRV9TT1VSQ0VfRElSfS90ZXN0aW1nY3JvcC5qcGcgdGVzdG91dGNyb3AuanBnKQorCithZGRfdGVzdChqcGVndXQtc3RhdGljIGpwZWd1dC1zdGF0aWMpCithZGRfdGVzdChqcGVndXQtc3RhdGljLXl1diBqcGVndXQtc3RhdGljIC15dXYpCithZGRfdGVzdChjanBlZy1zdGF0aWMtaW50IGNqcGVnLXN0YXRpYyAtZGN0IGludCAtb3V0ZmlsZSB0ZXN0b3V0aW50LmpwZyAke0NNQUtFX1NPVVJDRV9ESVJ9L3Rlc3RvcmlnLnBwbSkKK2FkZF90ZXN0KGNqcGVnLXN0YXRpYy1pbnQtY21wICR7Q01BS0VfQ09NTUFORH0gLUUgY29tcGFyZV9maWxlcyAke0NNQUtFX1NPVVJDRV9ESVJ9L3Rlc3RpbWdpbnQuanBnIHRlc3RvdXRpbnQuanBnKQorYWRkX3Rlc3QoY2pwZWctc3RhdGljLWZhc3QgY2pwZWctc3RhdGljIC1kY3QgZmFzdCAtb3B0IC1vdXRmaWxlIHRlc3RvdXRmc3QuanBnICR7Q01BS0VfU09VUkNFX0RJUn0vdGVzdG9yaWcucHBtKQorYWRkX3Rlc3QoY2pwZWctc3RhdGljLWZhc3QtY21wICR7Q01BS0VfQ09NTUFORH0gLUUgY29tcGFyZV9maWxlcyAke0NNQUtFX1NPVVJDRV9ESVJ9L3Rlc3RpbWdmc3QuanBnIHRlc3RvdXRmc3QuanBnKQorYWRkX3Rlc3QoY2pwZWctc3RhdGljLWZhc3QtMTAwIGNqcGVnLXN0YXRpYyAtZGN0IGZhc3QgLXF1YWxpdHkgMTAwIC1vcHQgLW91dGZpbGUgdGVzdG91dGZzdDEwMC5qcGcgJHtDTUFLRV9TT1VSQ0VfRElSfS90ZXN0b3JpZy5wcG0pCithZGRfdGVzdChjanBlZy1zdGF0aWMtZmFzdC0xMDAtY21wICR7Q01BS0VfQ09NTUFORH0gLUUgY29tcGFyZV9maWxlcyAke0NNQUtFX1NPVVJDRV9ESVJ9L3Rlc3RpbWdmc3QxMDAuanBnIHRlc3RvdXRmc3QxMDAuanBnKQorYWRkX3Rlc3QoY2pwZWctc3RhdGljLWZsb2F0IGNqcGVnLXN0YXRpYyAtZGN0IGZsb2F0IC1vdXRmaWxlIHRlc3RvdXRmbHQuanBnICR7Q01BS0VfU09VUkNFX0RJUn0vdGVzdG9yaWcucHBtKQoraWYoV0lUSF9TSU1EKQorYWRkX3Rlc3QoY2pwZWctc3RhdGljLWZsb2F0LWNtcCAke0NNQUtFX0NPTU1BTkR9IC1FIGNvbXBhcmVfZmlsZXMgJHtDTUFLRV9TT1VSQ0VfRElSfS90ZXN0aW1nZmx0LmpwZyB0ZXN0b3V0Zmx0LmpwZykKK2Vsc2UoKQorYWRkX3Rlc3QoY2pwZWctc3RhdGljLWZsb2F0LWNtcCAke0NNQUtFX0NPTU1BTkR9IC1FIGNvbXBhcmVfZmlsZXMgJHtDTUFLRV9TT1VSQ0VfRElSfS90ZXN0aW1nZmx0LW5vc2ltZC5qcGcgdGVzdG91dGZsdC5qcGcpCitlbmRpZigpCithZGRfdGVzdChkanBlZy1zdGF0aWMtaW50IGRqcGVnLXN0YXRpYyAtZGN0IGludCAtZmFzdCAtcHBtIC1vdXRmaWxlIHRlc3RvdXRpbnQucHBtICR7Q01BS0VfU09VUkNFX0RJUn0vdGVzdG9yaWcuanBnKQorYWRkX3Rlc3QoZGpwZWctc3RhdGljLWludC1jbXAgJHtDTUFLRV9DT01NQU5EfSAtRSBjb21wYXJlX2ZpbGVzICR7Q01BS0VfU09VUkNFX0RJUn0vdGVzdGltZ2ludC5wcG0gdGVzdG91dGludC5wcG0pCithZGRfdGVzdChkanBlZy1zdGF0aWMtZmFzdCBkanBlZy1zdGF0aWMgLWRjdCBmYXN0IC1wcG0gLW91dGZpbGUgdGVzdG91dGZzdC5wcG0gJHtDTUFLRV9TT1VSQ0VfRElSfS90ZXN0b3JpZy5qcGcpCithZGRfdGVzdChkanBlZy1zdGF0aWMtZmFzdC1jbXAgJHtDTUFLRV9DT01NQU5EfSAtRSBjb21wYXJlX2ZpbGVzICR7Q01BS0VfU09VUkNFX0RJUn0vdGVzdGltZ2ZzdC5wcG0gdGVzdG91dGZzdC5wcG0pCithZGRfdGVzdChkanBlZy1zdGF0aWMtZmxvYXQgZGpwZWctc3RhdGljIC1kY3QgZmxvYXQgLXBwbSAtb3V0ZmlsZSB0ZXN0b3V0Zmx0LnBwbSAke0NNQUtFX1NPVVJDRV9ESVJ9L3Rlc3RvcmlnLmpwZykKK2lmKFdJVEhfU0lNRCkKK2FkZF90ZXN0KGRqcGVnLXN0YXRpYy1mbG9hdC1jbXAgJHtDTUFLRV9DT01NQU5EfSAtRSBjb21wYXJlX2ZpbGVzICR7Q01BS0VfU09VUkNFX0RJUn0vdGVzdGltZ2ZsdC5wcG0gdGVzdG91dGZsdC5wcG0pCitlbHNlKCkKK2FkZF90ZXN0KGRqcGVnLXN0YXRpYy1mbG9hdC1jbXAgJHtDTUFLRV9DT01NQU5EfSAtRSBjb21wYXJlX2ZpbGVzICR7Q01BS0VfU09VUkNFX0RJUn0vdGVzdG9yaWcucHBtIHRlc3RvdXRmbHQucHBtKQorZW5kaWYoKQorYWRkX3Rlc3QoZGpwZWctc3RhdGljLTI1NiBkanBlZy1zdGF0aWMgLWRjdCBpbnQgLWJtcCAtY29sb3JzIDI1NiAtb3V0ZmlsZSB0ZXN0b3V0LmJtcCAgJHtDTUFLRV9TT1VSQ0VfRElSfS90ZXN0b3JpZy5qcGcpCithZGRfdGVzdChkanBlZy1zdGF0aWMtMjU2LWNtcCAke0NNQUtFX0NPTU1BTkR9IC1FIGNvbXBhcmVfZmlsZXMgJHtDTUFLRV9TT1VSQ0VfRElSfS90ZXN0aW1nLmJtcCB0ZXN0b3V0LmJtcCkKK2FkZF90ZXN0KGNqcGVnLXN0YXRpYy1wcm9nIGNqcGVnLXN0YXRpYyAtZGN0IGludCAtcHJvZ3Jlc3NpdmUgLW91dGZpbGUgdGVzdG91dHAuanBnICR7Q01BS0VfU09VUkNFX0RJUn0vdGVzdG9yaWcucHBtKQorYWRkX3Rlc3QoY2pwZWctc3RhdGljLXByb2ctY21wICR7Q01BS0VfQ09NTUFORH0gLUUgY29tcGFyZV9maWxlcyAke0NNQUtFX1NPVVJDRV9ESVJ9L3Rlc3RpbWdwLmpwZyB0ZXN0b3V0cC5qcGcpCithZGRfdGVzdChqcGVndHJhbi1zdGF0aWMtcHJvZyBqcGVndHJhbi1zdGF0aWMgLW91dGZpbGUgdGVzdG91dHQuanBnIHRlc3RvdXRwLmpwZykKK2FkZF90ZXN0KGpwZWd0cmFuLXN0YXRpYy1wcm9nLWNtcCAke0NNQUtFX0NPTU1BTkR9IC1FIGNvbXBhcmVfZmlsZXMgJHtDTUFLRV9TT1VSQ0VfRElSfS90ZXN0aW1naW50LmpwZyB0ZXN0b3V0dC5qcGcpCitpZihXSVRIX0FSSVRIX0VOQykKK2FkZF90ZXN0KGNqcGVnLXN0YXRpYy1hcmkgY2pwZWctc3RhdGljIC1kY3QgaW50IC1hcml0aG1ldGljIC1vdXRmaWxlIHRlc3RvdXRhcmkuanBnICR7Q01BS0VfU09VUkNFX0RJUn0vdGVzdG9yaWcucHBtKQorYWRkX3Rlc3QoY2pwZWctc3RhdGljLWFyaS1jbXAgJHtDTUFLRV9DT01NQU5EfSAtRSBjb21wYXJlX2ZpbGVzICR7Q01BS0VfU09VUkNFX0RJUn0vdGVzdGltZ2FyaS5qcGcgdGVzdG91dGFyaS5qcGcpCithZGRfdGVzdChqcGVndHJhbi1zdGF0aWMtdG9hcmkganBlZ3RyYW4tc3RhdGljIC1hcml0aG1ldGljIC1vdXRmaWxlIHRlc3RvdXRhLmpwZyAke0NNQUtFX1NPVVJDRV9ESVJ9L3Rlc3RpbWdpbnQuanBnKQorYWRkX3Rlc3QoanBlZ3RyYW4tc3RhdGljLXRvYXJpLWNtcCAke0NNQUtFX0NPTU1BTkR9IC1FIGNvbXBhcmVfZmlsZXMgJHtDTUFLRV9TT1VSQ0VfRElSfS90ZXN0aW1nYXJpLmpwZyB0ZXN0b3V0YS5qcGcpCitlbmRpZigpCitpZihXSVRIX0FSSVRIX0RFQykKK2FkZF90ZXN0KGRqcGVnLXN0YXRpYy1hcmkgZGpwZWctc3RhdGljIC1kY3QgaW50IC1mYXN0IC1wcG0gLW91dGZpbGUgdGVzdG91dGFyaS5wcG0gJHtDTUFLRV9TT1VSQ0VfRElSfS90ZXN0aW1nYXJpLmpwZykKK2FkZF90ZXN0KGRqcGVnLXN0YXRpYy1hcmktY21wICR7Q01BS0VfQ09NTUFORH0gLUUgY29tcGFyZV9maWxlcyAke0NNQUtFX1NPVVJDRV9ESVJ9L3Rlc3RpbWdhcmkucHBtIHRlc3RvdXRhcmkucHBtKQorYWRkX3Rlc3QoanBlZ3RyYW4tc3RhdGljLWZyb21hcmkJanBlZ3RyYW4tc3RhdGljIC1vdXRmaWxlIHRlc3RvdXRhLmpwZyAke0NNQUtFX1NPVVJDRV9ESVJ9L3Rlc3RpbWdhcmkuanBnKQorYWRkX3Rlc3QoanBlZ3RyYW4tc3RhdGljLWZyb21hcmktY21wICR7Q01BS0VfQ09NTUFORH0gLUUgY29tcGFyZV9maWxlcyAke0NNQUtFX1NPVVJDRV9ESVJ9L3Rlc3RpbWdpbnQuanBnIHRlc3RvdXRhLmpwZykKK2VuZGlmKCkKK2FkZF90ZXN0KGpwZWd0cmFuLXN0YXRpYy1jcm9wIGpwZWd0cmFuLXN0YXRpYyAtY3JvcCAxMjB4OTArMjArNTAgLXRyYW5zcG9zZSAtcGVyZmVjdCAtb3V0ZmlsZSB0ZXN0b3V0Y3JvcC5qcGcgJHtDTUFLRV9TT1VSQ0VfRElSfS90ZXN0b3JpZy5qcGcpCithZGRfdGVzdChqcGVndHJhbi1zdGF0aWMtY3JvcC1jbXAgJHtDTUFLRV9DT01NQU5EfSAtRSBjb21wYXJlX2ZpbGVzICR7Q01BS0VfU09VUkNFX0RJUn0vdGVzdGltZ2Nyb3AuanBnIHRlc3RvdXRjcm9wLmpwZykKKworCisjCisjIEluc3RhbGxlcgorIworCitpZihNU1ZDKQorICBzZXQoSU5TVF9QTEFURk9STSAiVmlzdWFsIEMrKyIpCisgIHNldChJTlNUX05BTUUgJHtDTUFLRV9QUk9KRUNUX05BTUV9LSR7VkVSU0lPTn0tdmMpCisgIHNldChJTlNUX0RJUiAke0NNQUtFX1BST0pFQ1RfTkFNRX0pCitlbHNlaWYoTUlOR1cpCisgIHNldChJTlNUX1BMQVRGT1JNIEdDQykKKyAgc2V0KElOU1RfTkFNRSAke0NNQUtFX1BST0pFQ1RfTkFNRX0tJHtWRVJTSU9OfS1nY2MpCisgIHNldChJTlNUX0RJUiAke0NNQUtFX1BST0pFQ1RfTkFNRX0tZ2NjKQorICBzZXQoSU5TVF9ERUZTIC1ER0NDKQorZW5kaWYoKQorCitpZig2NEJJVCkKKyAgc2V0KElOU1RfUExBVEZPUk0gIiR7SU5TVF9QTEFURk9STX0gNjQtYml0IikKKyAgc2V0KElOU1RfTkFNRSAke0lOU1RfTkFNRX02NCkKKyAgc2V0KElOU1RfRElSICR7SU5TVF9ESVJ9NjQpCisgIHNldChJTlNUX0RFRlMgJHtJTlNUX0RFRlN9IC1EV0lONjQpCitlbmRpZigpCisKK2lmKE1TVkNfSURFKQorICBzZXQoSU5TVF9ERUZTICR7SU5TVF9ERUZTfSAiLURCVUlMRERJUj0kKE91dERpcilcXCIpCitlbHNlKCkKKyAgc2V0KElOU1RfREVGUyAke0lOU1RfREVGU30gIi1EQlVJTERESVI9IikKK2VuZGlmKCkKKworY29uZmlndXJlX2ZpbGUocmVsZWFzZS9saWJqcGVnLXR1cmJvLm5zaS5pbiBsaWJqcGVnLXR1cmJvLm5zaSBAT05MWSkKKworYWRkX2N1c3RvbV90YXJnZXQoaW5zdGFsbGVyCisgIG1ha2Vuc2lzIC1ub2NkICR7SU5TVF9ERUZTfSBsaWJqcGVnLXR1cmJvLm5zaQorICBERVBFTkRTIGpwZWcganBlZy1zdGF0aWMgdHVyYm9qcGVnIHR1cmJvanBlZy1zdGF0aWMgcmRqcGdjb20gd3JqcGdjb20KKyAgICBjanBlZyBkanBlZyBqcGVndHJhbiBqcGd0ZXN0CisgIFNPVVJDRVMgbGlianBlZy10dXJiby5uc2kpCisKK2luc3RhbGwoVEFSR0VUUyBqcGVnLXN0YXRpYyB0dXJib2pwZWcgdHVyYm9qcGVnLXN0YXRpYyByZGpwZ2NvbSB3cmpwZ2NvbSBqcGd0ZXN0CisgIEFSQ0hJVkUgREVTVElOQVRJT04gbGliCisgIExJQlJBUlkgREVTVElOQVRJT04gbGliCisgIFJVTlRJTUUgREVTVElOQVRJT04gYmluCispCisKK2luc3RhbGwoRklMRVMgJHtDTUFLRV9TT1VSQ0VfRElSfS9MR1BMLnR4dCAke0NNQUtFX1NPVVJDRV9ESVJ9L0xJQ0VOU0UudHh0CisgICR7Q01BS0VfU09VUkNFX0RJUn0vUkVBRE1FICR7Q01BS0VfU09VUkNFX0RJUn0vUkVBRE1FLXR1cmJvLnR4dAorICAke0NNQUtFX1NPVVJDRV9ESVJ9L2xpYmpwZWcudHh0ICR7Q01BS0VfU09VUkNFX0RJUn0vdXNhZ2UudHh0CisgIERFU1RJTkFUSU9OIGRvYykKKworaW5zdGFsbChGSUxFUyAke0NNQUtFX0JJTkFSWV9ESVJ9L2pjb25maWcuaCAke0NNQUtFX1NPVVJDRV9ESVJ9L2plcnJvci5oCisgICR7Q01BS0VfU09VUkNFX0RJUn0vam1vcmVjZmcuaCAke0NNQUtFX1NPVVJDRV9ESVJ9L2pwZWdsaWIuaAorICAke0NNQUtFX1NPVVJDRV9ESVJ9L3R1cmJvanBlZy5oIERFU1RJTkFUSU9OIGluY2x1ZGUpCmRpZmYgLS1naXQgYS9DaGFuZ2VMb2cudHh0IGIvQ2hhbmdlTG9nLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42ZDZiZGI1Ci0tLSAvZGV2L251bGwKKysrIGIvQ2hhbmdlTG9nLnR4dApAQCAtMCwwICsxLDE1MyBAQAorMS4xLjEKKz09PT09CisKK1sxXSBGaXhlZCBhIDEtcGl4ZWwgZXJyb3IgaW4gcm93IDAsIGNvbHVtbiAyMSBvZiB0aGUgbHVtaW5hbmNlIHBsYW5lIGdlbmVyYXRlZAorYnkgdGpFbmNvZGVZVVYoKS4KKworWzJdIEZpeGVkIHRoZSBhY2NlbGVyYXRlZCBIdWZmbWFuIGRlY29kZXIgc28gdGhhdCBpdCBtaW1pY3MgdGhlIGJlaGF2aW9yIG9mCit0aGUgdW5hY2NlbGVyYXRlZCBkZWNvZGVyIGFuZCB0aHJvd3MgYSB3YXJuaW5nIGlmIGFuIHVuZXhwZWN0ZWQgbWFya2VyIGlzIGZvdW5kCitpbiB0aGUgbWlkZGxlIG9mIHRoZSBKUEVHIGRhdGEgc3RyZWFtLgorCitbM10gT2xkZXIgdmVyc2lvbnMgb2YgTWluR1c2NCBwcmVmaXhlZCBzeW1ib2wgbmFtZXMgd2l0aCB1bmRlcnNjb3JlcyBieQorZGVmYXVsdCwgd2hpY2ggZGlmZmVyZWQgZnJvbSB0aGUgYmVoYXZpb3Igb2YgNjQtYml0IFZpc3VhbCBDKysuICBNaW5HVzY0IDEuMAoraGFzIGFkb3B0ZWQgdGhlIGJlaGF2aW9yIG9mIDY0LWJpdCBWaXN1YWwgQysrIGFzIHRoZSBkZWZhdWx0LCBzbyB0byBhY2NvbW1vZGF0ZQordGhpcywgdGhlIGxpYmpwZWctdHVyYm8gU0lNRCBmdW5jdGlvbiBuYW1lcyBhcmUgbm8gbG9uZ2VyIHByZWZpeGVkIHdpdGggYW4KK3VuZGVyc2NvcmUgd2hlbiBidWlsZGluZyB3aXRoIE1pbkdXNjQuICBUaGlzIG1lYW5zIHRoYXQsIHdoZW4gYnVpbGRpbmcKK2xpYmpwZWctdHVyYm8gd2l0aCBvbGRlciB2ZXJzaW9ucyBvZiBNaW5HVzY0LCB5b3Ugd2lsbCBub3cgaGF2ZSB0byBhZGQKKy1mbm8tbGVhZGluZy11bmRlcnNjb3JlIHRvIHRoZSBDRkxBR1MuCisKK1s0XSBGaXhlZCBhIHJlZ3Jlc3Npb24gYnVnIGluIHRoZSBOU0lTIHNjcmlwdCB0aGF0IGNhdXNlZCB0aGUgV2luZG93cyBpbnN0YWxsZXIKK2J1aWxkIHRvIGZhaWwgd2hlbiB1c2luZyB0aGUgVmlzdWFsIFN0dWRpbyBJREUuCisKK1s1XSBGaXhlZCBhIGJ1ZyBpbiBqcGVnX3JlYWRfY29lZmZpY2llbnRzKCkgd2hlcmVieSBpdCB3b3VsZCBub3QgaW5pdGlhbGl6ZQorY2luZm8tPmltYWdlX3dpZHRoIGFuZCBjaW5mby0+aW1hZ2VfaGVpZ2h0IGlmIGxpYmpwZWcgdjggZW11bGF0aW9uIHdhcyBlbmFibGVkLgorVGhpcyBzcGVjaWZpY2FsbHkgY2F1c2VkIHRoZSBqcGVnb3B0aW0gcHJvZ3JhbSB0byBmYWlsIGlmIGl0IHdhcyBsaW5rZWQgYWdhaW5zdAorYSB2ZXJzaW9uIG9mIGxpYmpwZWctdHVyYm8gdGhhdCB3YXMgYnVpbHQgd2l0aCBsaWJqcGVnIHY4IGVtdWxhdGlvbi4KKworCisxLjEuMAorPT09PT0KKworWzFdIFRoZSBhbGdvcml0aG0gdXNlZCBieSB0aGUgU0lNRCBxdWFudGl6YXRpb24gZnVuY3Rpb24gY2Fubm90IHByb2R1Y2UgY29ycmVjdAorcmVzdWx0cyB3aGVuIHRoZSBKUEVHIHF1YWxpdHkgaXMgPj0gOTggYW5kIHRoZSBmYXN0IGludGVnZXIgZm9yd2FyZCBEQ1QgaXMKK3VzZWQuICBUaHVzLCB0aGUgbm9uLVNJTUQgcXVhbnRpemF0aW9uIGZ1bmN0aW9uIGlzIG5vdyB1c2VkIGZvciB0aG9zZSBjYXNlcywKK2FuZCBsaWJqcGVnLXR1cmJvIHNob3VsZCBub3cgcHJvZHVjZSBpZGVudGljYWwgb3V0cHV0IHRvIGxpYmpwZWcgdjZiIGluIGFsbAorY2FzZXMuCisKK1syXSBEZXNwaXRlIHRoZSBhYm92ZSwgdGhlIGZhc3QgaW50ZWdlciBmb3J3YXJkIERDVCBzdGlsbCBkZWdyYWRlcyBzb21ld2hhdCBmb3IKK0pQRUcgcXVhbGl0aWVzIGdyZWF0ZXIgdGhhbiA5NSwgc28gVHVyYm9KUEVHL09TUyB3aWxsIG5vdyBhdXRvbWF0aWNhbGx5IHVzZSB0aGUKK3Nsb3cgaW50ZWdlciBmb3J3YXJkIERDVCB3aGVuIGdlbmVyYXRpbmcgSlBFRyBpbWFnZXMgb2YgcXVhbGl0eSA5NiBvciBncmVhdGVyLgorVGhpcyByZWR1Y2VzIGNvbXByZXNzaW9uIHBlcmZvcm1hbmNlIGJ5IGFzIG11Y2ggYXMgMTUlIGZvciB0aGVzZSBoaWdoLXF1YWxpdHkKK2ltYWdlcyBidXQgaXMgbmVjZXNzYXJ5IHRvIGVuc3VyZSB0aGF0IHRoZSBpbWFnZXMgYXJlIHBlcmNlcHR1YWxseSBsb3NzbGVzcy4KK0l0IGFsc28gZW5zdXJlcyB0aGF0IHRoZSBsaWJyYXJ5IGNhbiBhdm9pZCB0aGUgcGVyZm9ybWFuY2UgcGl0ZmFsbCBjcmVhdGVkIGJ5CitbMV0uCisKK1szXSBQb3J0ZWQganBndGVzdC5jeHggdG8gcHVyZSBDIHRvIGF2b2lkIHRoZSBuZWVkIGZvciBhIEMrKyBjb21waWxlci4KKworWzRdIEZpeGVkIHZpc3VhbCBhcnRpZmFjdHMgaW4gZ3JheXNjYWxlIEpQRUcgY29tcHJlc3Npb24gY2F1c2VkIGJ5IGEgdHlwbyBpbgordGhlIFJHQi10by1jaHJvbWluYW5jZSBsb29rdXAgdGFibGVzLgorCitbNV0gVGhlIFdpbmRvd3MgZGlzdHJpYnV0aW9uIHBhY2thZ2VzIG5vdyBpbmNsdWRlIHRoZSBsaWJqcGVnIHJ1bi10aW1lIHByb2dyYW1zCisoY2pwZWcsIGV0Yy4pCisKK1s2XSBBbGwgcGFja2FnZXMgbm93IGluY2x1ZGUganBndGVzdC4KKworWzddIFRoZSBUdXJib0pQRUcgZHluYW1pYyBsaWJyYXJ5IG5vdyB1c2VzIHZlcnNpb25lZCBzeW1ib2xzLgorCitbOF0gQWRkZWQgdHdvIG5ldyBUdXJib0pQRUcgQVBJIGZ1bmN0aW9ucywgdGpFbmNvZGVZVVYoKSBhbmQKK3RqRGVjb21wcmVzc1RvWVVWKCksIHRvIHJlcGxhY2UgdGhlIHNvbWV3aGF0IGhhY2tpc2ggVEpfWVVWIGZsYWcuCisKKworMS4wLjkwICgxLjEgYmV0YTEpCis9PT09PT09PT09PT09PT09PT0KKworWzFdIEFkZGVkIGVtdWxhdGlvbiBvZiB0aGUgbGlianBlZyB2NyBhbmQgdjggQVBJcyBhbmQgQUJJcy4gIFNlZQorUkVBRE1FLXR1cmJvLnR4dCBmb3IgbW9yZSBkZXRhaWxzLiAgVGhpcyBmZWF0dXJlIHdhcyBzcG9uc29yZWQgYnkgQ2FtVHJhY2UgU0FTLgorCitbMl0gQ3JlYXRlZCBhIG5ldyBDTWFrZS1iYXNlZCBidWlsZCBzeXN0ZW0gZm9yIHRoZSBWaXN1YWwgQysrIGFuZCBNaW5HVyBidWlsZHMuCisKK1szXSBUdXJib0pQRUcvT1NTIGNhbiBub3cgY29tcHJlc3MgZnJvbS9kZWNvbXByZXNzIHRvIGdyYXlzY2FsZSBiaXRtYXBzLgorCitbNF0ganBndGVzdCBjYW4gbm93IGJlIHVzZWQgdG8gdGVzdCBkZWNvbXByZXNzaW9uIHBlcmZvcm1hbmNlIHdpdGggZXhpc3RpbmcKK0pQRUcgaW1hZ2VzLgorCitbNV0gSWYgdGhlIGRlZmF1bHQgaW5zdGFsbCBwcmVmaXggKC9vcHQvbGlianBlZy10dXJibykgaXMgdXNlZCwgdGhlbgorJ21ha2UgaW5zdGFsbCcgbm93IGNyZWF0ZXMgL29wdC9saWJqcGVnLXR1cmJvL2xpYjMyIGFuZAorL29wdC9saWJqcGVnLXR1cmJvL2xpYjY0IHN5bSBsaW5rcyB0byBkdXBsaWNhdGUgdGhlIGJlaGF2aW9yIG9mIHRoZSBiaW5hcnkKK3BhY2thZ2VzLgorCitbNl0gQWxsIHN5bWJvbHMgaW4gdGhlIGxpYmpwZWctdHVyYm8gZHluYW1pYyBsaWJyYXJ5IGFyZSBub3cgdmVyc2lvbmVkLCBldmVuCit3aGVuIHRoZSBsaWJyYXJ5IGlzIGJ1aWx0IHdpdGggbGlianBlZyB2NmIgZW11bGF0aW9uLgorCitbN10gQWRkZWQgYXJpdGhtZXRpYyBlbmNvZGluZyBhbmQgZGVjb2Rpbmcgc3VwcG9ydCAoY2FuIGJlIGRpc2FibGVkIHdpdGgKK2NvbmZpZ3VyZSBvciBDTWFrZSBvcHRpb25zKQorCitbOF0gQWRkZWQgYSBUSl9ZVVYgZmxhZyB0byBUdXJib0pQRUcvT1NTIHdoaWNoIGNhdXNlcyBib3RoIHRoZSBjb21wcmVzc29yIGFuZAorZGVjb21wcmVzc29yIHRvIG91dHB1dCBwbGFuYXIgWVVWIGltYWdlcy4KKworWzldIEFkZGVkIGFuIGV4dGVuZGVkIHZlcnNpb24gb2YgdGpEZWNvbXByZXNzSGVhZGVyKCkgdG8gVHVyYm9KUEVHL09TUyB3aGljaAorYWxsb3dzIHRoZSBjYWxsZXIgdG8gZGV0ZXJtaW5lIHRoZSB0eXBlIG9mIHN1YnNhbXBsaW5nIHVzZWQgaW4gYSBKUEVHIGltYWdlLgorCitbMTBdIEFkZGVkIGZ1cnRoZXIgcHJvdGVjdGlvbnMgYWdhaW5zdCBpbnZhbGlkIEh1ZmZtYW4gY29kZXMuCisKKworMS4wLjEKKz09PT09CisKK1sxXSBUaGUgSHVmZm1hbiBkZWNvZGVyIHdpbGwgbm93IGhhbmRsZSBlcnJvbmVvdXMgSHVmZm1hbiBjb2RlcyAoZm9yIGluc3RhbmNlLAorZnJvbSBhIGNvcnJ1cHQgSlBFRyBpbWFnZS4pICBQcmV2aW91c2x5LCB0aGVzZSB3b3VsZCBjYXVzZSBsaWJqcGVnLXR1cmJvIHRvCitjcmFzaCB1bmRlciBjZXJ0YWluIGNpcmN1bXN0YW5jZXMuCisKK1syXSBGaXhlZCB0eXBvIGluIFNJTUQgZGlzcGF0Y2ggcm91dGluZXMgd2hpY2ggd2FzIGNhdXNpbmcgNDoyOjIgdXBzYW1wbGluZyB0bworYmUgdXNlZCBpbnN0ZWFkIG9mIDQ6MjowIHdoZW4gZGVjb21wcmVzc2luZyBKUEVHIGltYWdlcyB1c2luZyBTU0UyIGNvZGUuCisKK1szXSBjb25maWd1cmUgc2NyaXB0IHdpbGwgbm93IGF1dG9tYXRpY2FsbHkgZGV0ZXJtaW5lIHdoZXRoZXIgdGhlCitJTkNPTVBMRVRFX1RZUEVTX0JST0tFTiBtYWNybyBzaG91bGQgYmUgZGVmaW5lZC4KKworCisxLjAuMAorPT09PT0KKworWzFdIDI5ODM3MDA6IEZ1cnRoZXIgRnJlZUJTRCBidWlsZCB0d2Vha3MgKG5vIGxvbmdlciBuZWNlc3NhcnkgdG8gc3BlY2lmeQorLS1ob3N0IHdoZW4gY29uZmlndXJpbmcgb24gYSA2NC1iaXQgc3lzdGVtKQorCitbMl0gQ3JlYXRlZCBzeW0uIGxpbmtzIGluIHRoZSBVbml4L0xpbnV4IHBhY2thZ2VzIHNvIHRoYXQgdGhlIFR1cmJvSlBFRworaW5jbHVkZSBmaWxlIGNhbiBhbHdheXMgYmUgZm91bmQgaW4gL29wdC9saWJqcGVnLXR1cmJvL2luY2x1ZGUsIHRoZSAzMi1iaXQKK3N0YXRpYyBsaWJyYXJpZXMgY2FuIGFsd2F5cyBiZSBmb3VuZCBpbiAvb3B0L2xpYmpwZWctdHVyYm8vbGliMzIsIGFuZCB0aGUKKzY0LWJpdCBzdGF0aWMgbGlicmFyaWVzIGNhbiBhbHdheXMgYmUgZm91bmQgaW4gL29wdC9saWJqcGVnLXR1cmJvL2xpYjY0LgorCitbM10gVGhlIFVuaXgvTGludXggZGlzdHJpYnV0aW9uIHBhY2thZ2VzIG5vdyBpbmNsdWRlIHRoZSBsaWJqcGVnIHJ1bi10aW1lCitwcm9ncmFtcyAoY2pwZWcsIGV0Yy4pIGFuZCBtYW4gcGFnZXMuCisKK1s0XSBDcmVhdGVkIGEgMzItYml0IHN1cHBsZW1lbnRhcnkgcGFja2FnZSBmb3IgYW1kNjQgRGViaWFuIHN5c3RlbXMgd2hpY2gKK2NvbnRhaW5zIGp1c3QgdGhlIDMyLWJpdCBsaWJqcGVnLXR1cmJvIGxpYnJhcmllcy4KKworWzVdIE1vdmVkIHRoZSBsaWJyYXJpZXMgZnJvbSAqL2xpYjMyIHRvICovbGliIGluIHRoZSBpMzg2IERlYmlhbiBwYWNrYWdlLgorCitbNl0gSW5jbHVkZSBkaXN0cmlidXRpb24gcGFja2FnZSBmb3IgQ3lnd2luCisKK1s3XSBObyBsb25nZXIgbmVjZXNzYXJ5IHRvIHNwZWNpZnkgLS13aXRob3V0LXNpbWQgb24gbm9uLXg4NiBhcmNoaXRlY3R1cmVzLCBhbmQKK3VuaXQgdGVzdHMgbm93IHdvcmsgb24gdGhvc2UgYXJjaGl0ZWN0dXJlcy4KKworCiswLjAuOTMKKz09PT09PQorCitbMV0gMjk4MjY1OSwgRml4ZWQgeDg2LTY0IGJ1aWxkIG9uIEZyZWVCU0Qgc3lzdGVtcworCitbMl0gMjk4ODE4ODogQWRkZWQgc3VwcG9ydCBmb3IgV2luZG93cyA2NC1iaXQgc3lzdGVtcworCisKKzAuMC45MQorPT09PT09CisKK1sxXSBBZGRlZCBkb2N1bWVudGF0aW9uIHRvIC5kZWIgcGFja2FnZXMKKworWzJdIDI5NjgzMTM6IEZpeGVkIGRhdGEgY29ycnVwdGlvbiBpc3N1ZXMgd2hlbiBkZWNvbXByZXNzaW5nIGxhcmdlIEpQRUcgaW1hZ2VzCithbmQvb3IgdXNpbmcgYnVmZmVyZWQgSS9PIHdpdGggdGhlIGxpYmpwZWctdHVyYm8gZGVjb21wcmVzc29yCisKKworMC4wLjkwCis9PT09PT0KKworSW5pdGlhbCByZWxlYXNlCmRpZmYgLS1naXQgYS9MR1BMLnR4dCBiL0xHUEwudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmIxZTNmNWEKLS0tIC9kZXYvbnVsbAorKysgYi9MR1BMLnR4dApAQCAtMCwwICsxLDUwNCBAQAorCQkgIEdOVSBMRVNTRVIgR0VORVJBTCBQVUJMSUMgTElDRU5TRQorCQkgICAgICAgVmVyc2lvbiAyLjEsIEZlYnJ1YXJ5IDE5OTkKKworIENvcHlyaWdodCAoQykgMTk5MSwgMTk5OSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKyAgICAgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgIDAyMTExLTEzMDcgIFVTQQorIEV2ZXJ5b25lIGlzIHBlcm1pdHRlZCB0byBjb3B5IGFuZCBkaXN0cmlidXRlIHZlcmJhdGltIGNvcGllcworIG9mIHRoaXMgbGljZW5zZSBkb2N1bWVudCwgYnV0IGNoYW5naW5nIGl0IGlzIG5vdCBhbGxvd2VkLgorCitbVGhpcyBpcyB0aGUgZmlyc3QgcmVsZWFzZWQgdmVyc2lvbiBvZiB0aGUgTGVzc2VyIEdQTC4gIEl0IGFsc28gY291bnRzCisgYXMgdGhlIHN1Y2Nlc3NvciBvZiB0aGUgR05VIExpYnJhcnkgUHVibGljIExpY2Vuc2UsIHZlcnNpb24gMiwgaGVuY2UKKyB0aGUgdmVyc2lvbiBudW1iZXIgMi4xLl0KKworCQkJICAgIFByZWFtYmxlCisKKyAgVGhlIGxpY2Vuc2VzIGZvciBtb3N0IHNvZnR3YXJlIGFyZSBkZXNpZ25lZCB0byB0YWtlIGF3YXkgeW91cgorZnJlZWRvbSB0byBzaGFyZSBhbmQgY2hhbmdlIGl0LiAgQnkgY29udHJhc3QsIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMKK0xpY2Vuc2VzIGFyZSBpbnRlbmRlZCB0byBndWFyYW50ZWUgeW91ciBmcmVlZG9tIHRvIHNoYXJlIGFuZCBjaGFuZ2UKK2ZyZWUgc29mdHdhcmUtLXRvIG1ha2Ugc3VyZSB0aGUgc29mdHdhcmUgaXMgZnJlZSBmb3IgYWxsIGl0cyB1c2Vycy4KKworICBUaGlzIGxpY2Vuc2UsIHRoZSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSwgYXBwbGllcyB0byBzb21lCitzcGVjaWFsbHkgZGVzaWduYXRlZCBzb2Z0d2FyZSBwYWNrYWdlcy0tdHlwaWNhbGx5IGxpYnJhcmllcy0tb2YgdGhlCitGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24gYW5kIG90aGVyIGF1dGhvcnMgd2hvIGRlY2lkZSB0byB1c2UgaXQuICBZb3UKK2NhbiB1c2UgaXQgdG9vLCBidXQgd2Ugc3VnZ2VzdCB5b3UgZmlyc3QgdGhpbmsgY2FyZWZ1bGx5IGFib3V0IHdoZXRoZXIKK3RoaXMgbGljZW5zZSBvciB0aGUgb3JkaW5hcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBpcyB0aGUgYmV0dGVyCitzdHJhdGVneSB0byB1c2UgaW4gYW55IHBhcnRpY3VsYXIgY2FzZSwgYmFzZWQgb24gdGhlIGV4cGxhbmF0aW9ucyBiZWxvdy4KKworICBXaGVuIHdlIHNwZWFrIG9mIGZyZWUgc29mdHdhcmUsIHdlIGFyZSByZWZlcnJpbmcgdG8gZnJlZWRvbSBvZiB1c2UsCitub3QgcHJpY2UuICBPdXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZXMgYXJlIGRlc2lnbmVkIHRvIG1ha2Ugc3VyZSB0aGF0Cit5b3UgaGF2ZSB0aGUgZnJlZWRvbSB0byBkaXN0cmlidXRlIGNvcGllcyBvZiBmcmVlIHNvZnR3YXJlIChhbmQgY2hhcmdlCitmb3IgdGhpcyBzZXJ2aWNlIGlmIHlvdSB3aXNoKTsgdGhhdCB5b3UgcmVjZWl2ZSBzb3VyY2UgY29kZSBvciBjYW4gZ2V0CitpdCBpZiB5b3Ugd2FudCBpdDsgdGhhdCB5b3UgY2FuIGNoYW5nZSB0aGUgc29mdHdhcmUgYW5kIHVzZSBwaWVjZXMgb2YKK2l0IGluIG5ldyBmcmVlIHByb2dyYW1zOyBhbmQgdGhhdCB5b3UgYXJlIGluZm9ybWVkIHRoYXQgeW91IGNhbiBkbwordGhlc2UgdGhpbmdzLgorCisgIFRvIHByb3RlY3QgeW91ciByaWdodHMsIHdlIG5lZWQgdG8gbWFrZSByZXN0cmljdGlvbnMgdGhhdCBmb3JiaWQKK2Rpc3RyaWJ1dG9ycyB0byBkZW55IHlvdSB0aGVzZSByaWdodHMgb3IgdG8gYXNrIHlvdSB0byBzdXJyZW5kZXIgdGhlc2UKK3JpZ2h0cy4gIFRoZXNlIHJlc3RyaWN0aW9ucyB0cmFuc2xhdGUgdG8gY2VydGFpbiByZXNwb25zaWJpbGl0aWVzIGZvcgoreW91IGlmIHlvdSBkaXN0cmlidXRlIGNvcGllcyBvZiB0aGUgbGlicmFyeSBvciBpZiB5b3UgbW9kaWZ5IGl0LgorCisgIEZvciBleGFtcGxlLCBpZiB5b3UgZGlzdHJpYnV0ZSBjb3BpZXMgb2YgdGhlIGxpYnJhcnksIHdoZXRoZXIgZ3JhdGlzCitvciBmb3IgYSBmZWUsIHlvdSBtdXN0IGdpdmUgdGhlIHJlY2lwaWVudHMgYWxsIHRoZSByaWdodHMgdGhhdCB3ZSBnYXZlCit5b3UuICBZb3UgbXVzdCBtYWtlIHN1cmUgdGhhdCB0aGV5LCB0b28sIHJlY2VpdmUgb3IgY2FuIGdldCB0aGUgc291cmNlCitjb2RlLiAgSWYgeW91IGxpbmsgb3RoZXIgY29kZSB3aXRoIHRoZSBsaWJyYXJ5LCB5b3UgbXVzdCBwcm92aWRlCitjb21wbGV0ZSBvYmplY3QgZmlsZXMgdG8gdGhlIHJlY2lwaWVudHMsIHNvIHRoYXQgdGhleSBjYW4gcmVsaW5rIHRoZW0KK3dpdGggdGhlIGxpYnJhcnkgYWZ0ZXIgbWFraW5nIGNoYW5nZXMgdG8gdGhlIGxpYnJhcnkgYW5kIHJlY29tcGlsaW5nCitpdC4gIEFuZCB5b3UgbXVzdCBzaG93IHRoZW0gdGhlc2UgdGVybXMgc28gdGhleSBrbm93IHRoZWlyIHJpZ2h0cy4KKworICBXZSBwcm90ZWN0IHlvdXIgcmlnaHRzIHdpdGggYSB0d28tc3RlcCBtZXRob2Q6ICgxKSB3ZSBjb3B5cmlnaHQgdGhlCitsaWJyYXJ5LCBhbmQgKDIpIHdlIG9mZmVyIHlvdSB0aGlzIGxpY2Vuc2UsIHdoaWNoIGdpdmVzIHlvdSBsZWdhbAorcGVybWlzc2lvbiB0byBjb3B5LCBkaXN0cmlidXRlIGFuZC9vciBtb2RpZnkgdGhlIGxpYnJhcnkuCisKKyAgVG8gcHJvdGVjdCBlYWNoIGRpc3RyaWJ1dG9yLCB3ZSB3YW50IHRvIG1ha2UgaXQgdmVyeSBjbGVhciB0aGF0Cit0aGVyZSBpcyBubyB3YXJyYW50eSBmb3IgdGhlIGZyZWUgbGlicmFyeS4gIEFsc28sIGlmIHRoZSBsaWJyYXJ5IGlzCittb2RpZmllZCBieSBzb21lb25lIGVsc2UgYW5kIHBhc3NlZCBvbiwgdGhlIHJlY2lwaWVudHMgc2hvdWxkIGtub3cKK3RoYXQgd2hhdCB0aGV5IGhhdmUgaXMgbm90IHRoZSBvcmlnaW5hbCB2ZXJzaW9uLCBzbyB0aGF0IHRoZSBvcmlnaW5hbAorYXV0aG9yJ3MgcmVwdXRhdGlvbiB3aWxsIG5vdCBiZSBhZmZlY3RlZCBieSBwcm9ibGVtcyB0aGF0IG1pZ2h0IGJlCitpbnRyb2R1Y2VkIGJ5IG90aGVycy4KKwwKKyAgRmluYWxseSwgc29mdHdhcmUgcGF0ZW50cyBwb3NlIGEgY29uc3RhbnQgdGhyZWF0IHRvIHRoZSBleGlzdGVuY2Ugb2YKK2FueSBmcmVlIHByb2dyYW0uICBXZSB3aXNoIHRvIG1ha2Ugc3VyZSB0aGF0IGEgY29tcGFueSBjYW5ub3QKK2VmZmVjdGl2ZWx5IHJlc3RyaWN0IHRoZSB1c2VycyBvZiBhIGZyZWUgcHJvZ3JhbSBieSBvYnRhaW5pbmcgYQorcmVzdHJpY3RpdmUgbGljZW5zZSBmcm9tIGEgcGF0ZW50IGhvbGRlci4gIFRoZXJlZm9yZSwgd2UgaW5zaXN0IHRoYXQKK2FueSBwYXRlbnQgbGljZW5zZSBvYnRhaW5lZCBmb3IgYSB2ZXJzaW9uIG9mIHRoZSBsaWJyYXJ5IG11c3QgYmUKK2NvbnNpc3RlbnQgd2l0aCB0aGUgZnVsbCBmcmVlZG9tIG9mIHVzZSBzcGVjaWZpZWQgaW4gdGhpcyBsaWNlbnNlLgorCisgIE1vc3QgR05VIHNvZnR3YXJlLCBpbmNsdWRpbmcgc29tZSBsaWJyYXJpZXMsIGlzIGNvdmVyZWQgYnkgdGhlCitvcmRpbmFyeSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZS4gIFRoaXMgbGljZW5zZSwgdGhlIEdOVSBMZXNzZXIKK0dlbmVyYWwgUHVibGljIExpY2Vuc2UsIGFwcGxpZXMgdG8gY2VydGFpbiBkZXNpZ25hdGVkIGxpYnJhcmllcywgYW5kCitpcyBxdWl0ZSBkaWZmZXJlbnQgZnJvbSB0aGUgb3JkaW5hcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZS4gIFdlIHVzZQordGhpcyBsaWNlbnNlIGZvciBjZXJ0YWluIGxpYnJhcmllcyBpbiBvcmRlciB0byBwZXJtaXQgbGlua2luZyB0aG9zZQorbGlicmFyaWVzIGludG8gbm9uLWZyZWUgcHJvZ3JhbXMuCisKKyAgV2hlbiBhIHByb2dyYW0gaXMgbGlua2VkIHdpdGggYSBsaWJyYXJ5LCB3aGV0aGVyIHN0YXRpY2FsbHkgb3IgdXNpbmcKK2Egc2hhcmVkIGxpYnJhcnksIHRoZSBjb21iaW5hdGlvbiBvZiB0aGUgdHdvIGlzIGxlZ2FsbHkgc3BlYWtpbmcgYQorY29tYmluZWQgd29yaywgYSBkZXJpdmF0aXZlIG9mIHRoZSBvcmlnaW5hbCBsaWJyYXJ5LiAgVGhlIG9yZGluYXJ5CitHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHRoZXJlZm9yZSBwZXJtaXRzIHN1Y2ggbGlua2luZyBvbmx5IGlmIHRoZQorZW50aXJlIGNvbWJpbmF0aW9uIGZpdHMgaXRzIGNyaXRlcmlhIG9mIGZyZWVkb20uICBUaGUgTGVzc2VyIEdlbmVyYWwKK1B1YmxpYyBMaWNlbnNlIHBlcm1pdHMgbW9yZSBsYXggY3JpdGVyaWEgZm9yIGxpbmtpbmcgb3RoZXIgY29kZSB3aXRoCit0aGUgbGlicmFyeS4KKworICBXZSBjYWxsIHRoaXMgbGljZW5zZSB0aGUgIkxlc3NlciIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBiZWNhdXNlIGl0Citkb2VzIExlc3MgdG8gcHJvdGVjdCB0aGUgdXNlcidzIGZyZWVkb20gdGhhbiB0aGUgb3JkaW5hcnkgR2VuZXJhbAorUHVibGljIExpY2Vuc2UuICBJdCBhbHNvIHByb3ZpZGVzIG90aGVyIGZyZWUgc29mdHdhcmUgZGV2ZWxvcGVycyBMZXNzCitvZiBhbiBhZHZhbnRhZ2Ugb3ZlciBjb21wZXRpbmcgbm9uLWZyZWUgcHJvZ3JhbXMuICBUaGVzZSBkaXNhZHZhbnRhZ2VzCithcmUgdGhlIHJlYXNvbiB3ZSB1c2UgdGhlIG9yZGluYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1hbnkKK2xpYnJhcmllcy4gIEhvd2V2ZXIsIHRoZSBMZXNzZXIgbGljZW5zZSBwcm92aWRlcyBhZHZhbnRhZ2VzIGluIGNlcnRhaW4KK3NwZWNpYWwgY2lyY3Vtc3RhbmNlcy4KKworICBGb3IgZXhhbXBsZSwgb24gcmFyZSBvY2Nhc2lvbnMsIHRoZXJlIG1heSBiZSBhIHNwZWNpYWwgbmVlZCB0bworZW5jb3VyYWdlIHRoZSB3aWRlc3QgcG9zc2libGUgdXNlIG9mIGEgY2VydGFpbiBsaWJyYXJ5LCBzbyB0aGF0IGl0IGJlY29tZXMKK2EgZGUtZmFjdG8gc3RhbmRhcmQuICBUbyBhY2hpZXZlIHRoaXMsIG5vbi1mcmVlIHByb2dyYW1zIG11c3QgYmUKK2FsbG93ZWQgdG8gdXNlIHRoZSBsaWJyYXJ5LiAgQSBtb3JlIGZyZXF1ZW50IGNhc2UgaXMgdGhhdCBhIGZyZWUKK2xpYnJhcnkgZG9lcyB0aGUgc2FtZSBqb2IgYXMgd2lkZWx5IHVzZWQgbm9uLWZyZWUgbGlicmFyaWVzLiAgSW4gdGhpcworY2FzZSwgdGhlcmUgaXMgbGl0dGxlIHRvIGdhaW4gYnkgbGltaXRpbmcgdGhlIGZyZWUgbGlicmFyeSB0byBmcmVlCitzb2Z0d2FyZSBvbmx5LCBzbyB3ZSB1c2UgdGhlIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLgorCisgIEluIG90aGVyIGNhc2VzLCBwZXJtaXNzaW9uIHRvIHVzZSBhIHBhcnRpY3VsYXIgbGlicmFyeSBpbiBub24tZnJlZQorcHJvZ3JhbXMgZW5hYmxlcyBhIGdyZWF0ZXIgbnVtYmVyIG9mIHBlb3BsZSB0byB1c2UgYSBsYXJnZSBib2R5IG9mCitmcmVlIHNvZnR3YXJlLiAgRm9yIGV4YW1wbGUsIHBlcm1pc3Npb24gdG8gdXNlIHRoZSBHTlUgQyBMaWJyYXJ5IGluCitub24tZnJlZSBwcm9ncmFtcyBlbmFibGVzIG1hbnkgbW9yZSBwZW9wbGUgdG8gdXNlIHRoZSB3aG9sZSBHTlUKK29wZXJhdGluZyBzeXN0ZW0sIGFzIHdlbGwgYXMgaXRzIHZhcmlhbnQsIHRoZSBHTlUvTGludXggb3BlcmF0aW5nCitzeXN0ZW0uCisKKyAgQWx0aG91Z2ggdGhlIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGlzIExlc3MgcHJvdGVjdGl2ZSBvZiB0aGUKK3VzZXJzJyBmcmVlZG9tLCBpdCBkb2VzIGVuc3VyZSB0aGF0IHRoZSB1c2VyIG9mIGEgcHJvZ3JhbSB0aGF0IGlzCitsaW5rZWQgd2l0aCB0aGUgTGlicmFyeSBoYXMgdGhlIGZyZWVkb20gYW5kIHRoZSB3aGVyZXdpdGhhbCB0byBydW4KK3RoYXQgcHJvZ3JhbSB1c2luZyBhIG1vZGlmaWVkIHZlcnNpb24gb2YgdGhlIExpYnJhcnkuCisKKyAgVGhlIHByZWNpc2UgdGVybXMgYW5kIGNvbmRpdGlvbnMgZm9yIGNvcHlpbmcsIGRpc3RyaWJ1dGlvbiBhbmQKK21vZGlmaWNhdGlvbiBmb2xsb3cuICBQYXkgY2xvc2UgYXR0ZW50aW9uIHRvIHRoZSBkaWZmZXJlbmNlIGJldHdlZW4gYQorIndvcmsgYmFzZWQgb24gdGhlIGxpYnJhcnkiIGFuZCBhICJ3b3JrIHRoYXQgdXNlcyB0aGUgbGlicmFyeSIuICBUaGUKK2Zvcm1lciBjb250YWlucyBjb2RlIGRlcml2ZWQgZnJvbSB0aGUgbGlicmFyeSwgd2hlcmVhcyB0aGUgbGF0dGVyIG11c3QKK2JlIGNvbWJpbmVkIHdpdGggdGhlIGxpYnJhcnkgaW4gb3JkZXIgdG8gcnVuLgorDAorCQkgIEdOVSBMRVNTRVIgR0VORVJBTCBQVUJMSUMgTElDRU5TRQorICAgVEVSTVMgQU5EIENPTkRJVElPTlMgRk9SIENPUFlJTkcsIERJU1RSSUJVVElPTiBBTkQgTU9ESUZJQ0FUSU9OCisKKyAgMC4gVGhpcyBMaWNlbnNlIEFncmVlbWVudCBhcHBsaWVzIHRvIGFueSBzb2Z0d2FyZSBsaWJyYXJ5IG9yIG90aGVyCitwcm9ncmFtIHdoaWNoIGNvbnRhaW5zIGEgbm90aWNlIHBsYWNlZCBieSB0aGUgY29weXJpZ2h0IGhvbGRlciBvcgorb3RoZXIgYXV0aG9yaXplZCBwYXJ0eSBzYXlpbmcgaXQgbWF5IGJlIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSB0ZXJtcyBvZgordGhpcyBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSAoYWxzbyBjYWxsZWQgInRoaXMgTGljZW5zZSIpLgorRWFjaCBsaWNlbnNlZSBpcyBhZGRyZXNzZWQgYXMgInlvdSIuCisKKyAgQSAibGlicmFyeSIgbWVhbnMgYSBjb2xsZWN0aW9uIG9mIHNvZnR3YXJlIGZ1bmN0aW9ucyBhbmQvb3IgZGF0YQorcHJlcGFyZWQgc28gYXMgdG8gYmUgY29udmVuaWVudGx5IGxpbmtlZCB3aXRoIGFwcGxpY2F0aW9uIHByb2dyYW1zCisod2hpY2ggdXNlIHNvbWUgb2YgdGhvc2UgZnVuY3Rpb25zIGFuZCBkYXRhKSB0byBmb3JtIGV4ZWN1dGFibGVzLgorCisgIFRoZSAiTGlicmFyeSIsIGJlbG93LCByZWZlcnMgdG8gYW55IHN1Y2ggc29mdHdhcmUgbGlicmFyeSBvciB3b3JrCit3aGljaCBoYXMgYmVlbiBkaXN0cmlidXRlZCB1bmRlciB0aGVzZSB0ZXJtcy4gIEEgIndvcmsgYmFzZWQgb24gdGhlCitMaWJyYXJ5IiBtZWFucyBlaXRoZXIgdGhlIExpYnJhcnkgb3IgYW55IGRlcml2YXRpdmUgd29yayB1bmRlcgorY29weXJpZ2h0IGxhdzogdGhhdCBpcyB0byBzYXksIGEgd29yayBjb250YWluaW5nIHRoZSBMaWJyYXJ5IG9yIGEKK3BvcnRpb24gb2YgaXQsIGVpdGhlciB2ZXJiYXRpbSBvciB3aXRoIG1vZGlmaWNhdGlvbnMgYW5kL29yIHRyYW5zbGF0ZWQKK3N0cmFpZ2h0Zm9yd2FyZGx5IGludG8gYW5vdGhlciBsYW5ndWFnZS4gIChIZXJlaW5hZnRlciwgdHJhbnNsYXRpb24gaXMKK2luY2x1ZGVkIHdpdGhvdXQgbGltaXRhdGlvbiBpbiB0aGUgdGVybSAibW9kaWZpY2F0aW9uIi4pCisKKyAgIlNvdXJjZSBjb2RlIiBmb3IgYSB3b3JrIG1lYW5zIHRoZSBwcmVmZXJyZWQgZm9ybSBvZiB0aGUgd29yayBmb3IKK21ha2luZyBtb2RpZmljYXRpb25zIHRvIGl0LiAgRm9yIGEgbGlicmFyeSwgY29tcGxldGUgc291cmNlIGNvZGUgbWVhbnMKK2FsbCB0aGUgc291cmNlIGNvZGUgZm9yIGFsbCBtb2R1bGVzIGl0IGNvbnRhaW5zLCBwbHVzIGFueSBhc3NvY2lhdGVkCitpbnRlcmZhY2UgZGVmaW5pdGlvbiBmaWxlcywgcGx1cyB0aGUgc2NyaXB0cyB1c2VkIHRvIGNvbnRyb2wgY29tcGlsYXRpb24KK2FuZCBpbnN0YWxsYXRpb24gb2YgdGhlIGxpYnJhcnkuCisKKyAgQWN0aXZpdGllcyBvdGhlciB0aGFuIGNvcHlpbmcsIGRpc3RyaWJ1dGlvbiBhbmQgbW9kaWZpY2F0aW9uIGFyZSBub3QKK2NvdmVyZWQgYnkgdGhpcyBMaWNlbnNlOyB0aGV5IGFyZSBvdXRzaWRlIGl0cyBzY29wZS4gIFRoZSBhY3Qgb2YKK3J1bm5pbmcgYSBwcm9ncmFtIHVzaW5nIHRoZSBMaWJyYXJ5IGlzIG5vdCByZXN0cmljdGVkLCBhbmQgb3V0cHV0IGZyb20KK3N1Y2ggYSBwcm9ncmFtIGlzIGNvdmVyZWQgb25seSBpZiBpdHMgY29udGVudHMgY29uc3RpdHV0ZSBhIHdvcmsgYmFzZWQKK29uIHRoZSBMaWJyYXJ5IChpbmRlcGVuZGVudCBvZiB0aGUgdXNlIG9mIHRoZSBMaWJyYXJ5IGluIGEgdG9vbCBmb3IKK3dyaXRpbmcgaXQpLiAgV2hldGhlciB0aGF0IGlzIHRydWUgZGVwZW5kcyBvbiB3aGF0IHRoZSBMaWJyYXJ5IGRvZXMKK2FuZCB3aGF0IHRoZSBwcm9ncmFtIHRoYXQgdXNlcyB0aGUgTGlicmFyeSBkb2VzLgorICAKKyAgMS4gWW91IG1heSBjb3B5IGFuZCBkaXN0cmlidXRlIHZlcmJhdGltIGNvcGllcyBvZiB0aGUgTGlicmFyeSdzCitjb21wbGV0ZSBzb3VyY2UgY29kZSBhcyB5b3UgcmVjZWl2ZSBpdCwgaW4gYW55IG1lZGl1bSwgcHJvdmlkZWQgdGhhdAoreW91IGNvbnNwaWN1b3VzbHkgYW5kIGFwcHJvcHJpYXRlbHkgcHVibGlzaCBvbiBlYWNoIGNvcHkgYW4KK2FwcHJvcHJpYXRlIGNvcHlyaWdodCBub3RpY2UgYW5kIGRpc2NsYWltZXIgb2Ygd2FycmFudHk7IGtlZXAgaW50YWN0CithbGwgdGhlIG5vdGljZXMgdGhhdCByZWZlciB0byB0aGlzIExpY2Vuc2UgYW5kIHRvIHRoZSBhYnNlbmNlIG9mIGFueQord2FycmFudHk7IGFuZCBkaXN0cmlidXRlIGEgY29weSBvZiB0aGlzIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGUKK0xpYnJhcnkuCisKKyAgWW91IG1heSBjaGFyZ2UgYSBmZWUgZm9yIHRoZSBwaHlzaWNhbCBhY3Qgb2YgdHJhbnNmZXJyaW5nIGEgY29weSwKK2FuZCB5b3UgbWF5IGF0IHlvdXIgb3B0aW9uIG9mZmVyIHdhcnJhbnR5IHByb3RlY3Rpb24gaW4gZXhjaGFuZ2UgZm9yIGEKK2ZlZS4KKwwKKyAgMi4gWW91IG1heSBtb2RpZnkgeW91ciBjb3B5IG9yIGNvcGllcyBvZiB0aGUgTGlicmFyeSBvciBhbnkgcG9ydGlvbgorb2YgaXQsIHRodXMgZm9ybWluZyBhIHdvcmsgYmFzZWQgb24gdGhlIExpYnJhcnksIGFuZCBjb3B5IGFuZAorZGlzdHJpYnV0ZSBzdWNoIG1vZGlmaWNhdGlvbnMgb3Igd29yayB1bmRlciB0aGUgdGVybXMgb2YgU2VjdGlvbiAxCithYm92ZSwgcHJvdmlkZWQgdGhhdCB5b3UgYWxzbyBtZWV0IGFsbCBvZiB0aGVzZSBjb25kaXRpb25zOgorCisgICAgYSkgVGhlIG1vZGlmaWVkIHdvcmsgbXVzdCBpdHNlbGYgYmUgYSBzb2Z0d2FyZSBsaWJyYXJ5LgorCisgICAgYikgWW91IG11c3QgY2F1c2UgdGhlIGZpbGVzIG1vZGlmaWVkIHRvIGNhcnJ5IHByb21pbmVudCBub3RpY2VzCisgICAgc3RhdGluZyB0aGF0IHlvdSBjaGFuZ2VkIHRoZSBmaWxlcyBhbmQgdGhlIGRhdGUgb2YgYW55IGNoYW5nZS4KKworICAgIGMpIFlvdSBtdXN0IGNhdXNlIHRoZSB3aG9sZSBvZiB0aGUgd29yayB0byBiZSBsaWNlbnNlZCBhdCBubworICAgIGNoYXJnZSB0byBhbGwgdGhpcmQgcGFydGllcyB1bmRlciB0aGUgdGVybXMgb2YgdGhpcyBMaWNlbnNlLgorCisgICAgZCkgSWYgYSBmYWNpbGl0eSBpbiB0aGUgbW9kaWZpZWQgTGlicmFyeSByZWZlcnMgdG8gYSBmdW5jdGlvbiBvciBhCisgICAgdGFibGUgb2YgZGF0YSB0byBiZSBzdXBwbGllZCBieSBhbiBhcHBsaWNhdGlvbiBwcm9ncmFtIHRoYXQgdXNlcworICAgIHRoZSBmYWNpbGl0eSwgb3RoZXIgdGhhbiBhcyBhbiBhcmd1bWVudCBwYXNzZWQgd2hlbiB0aGUgZmFjaWxpdHkKKyAgICBpcyBpbnZva2VkLCB0aGVuIHlvdSBtdXN0IG1ha2UgYSBnb29kIGZhaXRoIGVmZm9ydCB0byBlbnN1cmUgdGhhdCwKKyAgICBpbiB0aGUgZXZlbnQgYW4gYXBwbGljYXRpb24gZG9lcyBub3Qgc3VwcGx5IHN1Y2ggZnVuY3Rpb24gb3IKKyAgICB0YWJsZSwgdGhlIGZhY2lsaXR5IHN0aWxsIG9wZXJhdGVzLCBhbmQgcGVyZm9ybXMgd2hhdGV2ZXIgcGFydCBvZgorICAgIGl0cyBwdXJwb3NlIHJlbWFpbnMgbWVhbmluZ2Z1bC4KKworICAgIChGb3IgZXhhbXBsZSwgYSBmdW5jdGlvbiBpbiBhIGxpYnJhcnkgdG8gY29tcHV0ZSBzcXVhcmUgcm9vdHMgaGFzCisgICAgYSBwdXJwb3NlIHRoYXQgaXMgZW50aXJlbHkgd2VsbC1kZWZpbmVkIGluZGVwZW5kZW50IG9mIHRoZQorICAgIGFwcGxpY2F0aW9uLiAgVGhlcmVmb3JlLCBTdWJzZWN0aW9uIDJkIHJlcXVpcmVzIHRoYXQgYW55CisgICAgYXBwbGljYXRpb24tc3VwcGxpZWQgZnVuY3Rpb24gb3IgdGFibGUgdXNlZCBieSB0aGlzIGZ1bmN0aW9uIG11c3QKKyAgICBiZSBvcHRpb25hbDogaWYgdGhlIGFwcGxpY2F0aW9uIGRvZXMgbm90IHN1cHBseSBpdCwgdGhlIHNxdWFyZQorICAgIHJvb3QgZnVuY3Rpb24gbXVzdCBzdGlsbCBjb21wdXRlIHNxdWFyZSByb290cy4pCisKK1RoZXNlIHJlcXVpcmVtZW50cyBhcHBseSB0byB0aGUgbW9kaWZpZWQgd29yayBhcyBhIHdob2xlLiAgSWYKK2lkZW50aWZpYWJsZSBzZWN0aW9ucyBvZiB0aGF0IHdvcmsgYXJlIG5vdCBkZXJpdmVkIGZyb20gdGhlIExpYnJhcnksCithbmQgY2FuIGJlIHJlYXNvbmFibHkgY29uc2lkZXJlZCBpbmRlcGVuZGVudCBhbmQgc2VwYXJhdGUgd29ya3MgaW4KK3RoZW1zZWx2ZXMsIHRoZW4gdGhpcyBMaWNlbnNlLCBhbmQgaXRzIHRlcm1zLCBkbyBub3QgYXBwbHkgdG8gdGhvc2UKK3NlY3Rpb25zIHdoZW4geW91IGRpc3RyaWJ1dGUgdGhlbSBhcyBzZXBhcmF0ZSB3b3Jrcy4gIEJ1dCB3aGVuIHlvdQorZGlzdHJpYnV0ZSB0aGUgc2FtZSBzZWN0aW9ucyBhcyBwYXJ0IG9mIGEgd2hvbGUgd2hpY2ggaXMgYSB3b3JrIGJhc2VkCitvbiB0aGUgTGlicmFyeSwgdGhlIGRpc3RyaWJ1dGlvbiBvZiB0aGUgd2hvbGUgbXVzdCBiZSBvbiB0aGUgdGVybXMgb2YKK3RoaXMgTGljZW5zZSwgd2hvc2UgcGVybWlzc2lvbnMgZm9yIG90aGVyIGxpY2Vuc2VlcyBleHRlbmQgdG8gdGhlCitlbnRpcmUgd2hvbGUsIGFuZCB0aHVzIHRvIGVhY2ggYW5kIGV2ZXJ5IHBhcnQgcmVnYXJkbGVzcyBvZiB3aG8gd3JvdGUKK2l0LgorCitUaHVzLCBpdCBpcyBub3QgdGhlIGludGVudCBvZiB0aGlzIHNlY3Rpb24gdG8gY2xhaW0gcmlnaHRzIG9yIGNvbnRlc3QKK3lvdXIgcmlnaHRzIHRvIHdvcmsgd3JpdHRlbiBlbnRpcmVseSBieSB5b3U7IHJhdGhlciwgdGhlIGludGVudCBpcyB0bworZXhlcmNpc2UgdGhlIHJpZ2h0IHRvIGNvbnRyb2wgdGhlIGRpc3RyaWJ1dGlvbiBvZiBkZXJpdmF0aXZlIG9yCitjb2xsZWN0aXZlIHdvcmtzIGJhc2VkIG9uIHRoZSBMaWJyYXJ5LgorCitJbiBhZGRpdGlvbiwgbWVyZSBhZ2dyZWdhdGlvbiBvZiBhbm90aGVyIHdvcmsgbm90IGJhc2VkIG9uIHRoZSBMaWJyYXJ5Cit3aXRoIHRoZSBMaWJyYXJ5IChvciB3aXRoIGEgd29yayBiYXNlZCBvbiB0aGUgTGlicmFyeSkgb24gYSB2b2x1bWUgb2YKK2Egc3RvcmFnZSBvciBkaXN0cmlidXRpb24gbWVkaXVtIGRvZXMgbm90IGJyaW5nIHRoZSBvdGhlciB3b3JrIHVuZGVyCit0aGUgc2NvcGUgb2YgdGhpcyBMaWNlbnNlLgorCisgIDMuIFlvdSBtYXkgb3B0IHRvIGFwcGx5IHRoZSB0ZXJtcyBvZiB0aGUgb3JkaW5hcnkgR05VIEdlbmVyYWwgUHVibGljCitMaWNlbnNlIGluc3RlYWQgb2YgdGhpcyBMaWNlbnNlIHRvIGEgZ2l2ZW4gY29weSBvZiB0aGUgTGlicmFyeS4gIFRvIGRvCit0aGlzLCB5b3UgbXVzdCBhbHRlciBhbGwgdGhlIG5vdGljZXMgdGhhdCByZWZlciB0byB0aGlzIExpY2Vuc2UsIHNvCit0aGF0IHRoZXkgcmVmZXIgdG8gdGhlIG9yZGluYXJ5IEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLCB2ZXJzaW9uIDIsCitpbnN0ZWFkIG9mIHRvIHRoaXMgTGljZW5zZS4gIChJZiBhIG5ld2VyIHZlcnNpb24gdGhhbiB2ZXJzaW9uIDIgb2YgdGhlCitvcmRpbmFyeSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBoYXMgYXBwZWFyZWQsIHRoZW4geW91IGNhbiBzcGVjaWZ5Cit0aGF0IHZlcnNpb24gaW5zdGVhZCBpZiB5b3Ugd2lzaC4pICBEbyBub3QgbWFrZSBhbnkgb3RoZXIgY2hhbmdlIGluCit0aGVzZSBub3RpY2VzLgorDAorICBPbmNlIHRoaXMgY2hhbmdlIGlzIG1hZGUgaW4gYSBnaXZlbiBjb3B5LCBpdCBpcyBpcnJldmVyc2libGUgZm9yCit0aGF0IGNvcHksIHNvIHRoZSBvcmRpbmFyeSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcHBsaWVzIHRvIGFsbAorc3Vic2VxdWVudCBjb3BpZXMgYW5kIGRlcml2YXRpdmUgd29ya3MgbWFkZSBmcm9tIHRoYXQgY29weS4KKworICBUaGlzIG9wdGlvbiBpcyB1c2VmdWwgd2hlbiB5b3Ugd2lzaCB0byBjb3B5IHBhcnQgb2YgdGhlIGNvZGUgb2YKK3RoZSBMaWJyYXJ5IGludG8gYSBwcm9ncmFtIHRoYXQgaXMgbm90IGEgbGlicmFyeS4KKworICA0LiBZb3UgbWF5IGNvcHkgYW5kIGRpc3RyaWJ1dGUgdGhlIExpYnJhcnkgKG9yIGEgcG9ydGlvbiBvcgorZGVyaXZhdGl2ZSBvZiBpdCwgdW5kZXIgU2VjdGlvbiAyKSBpbiBvYmplY3QgY29kZSBvciBleGVjdXRhYmxlIGZvcm0KK3VuZGVyIHRoZSB0ZXJtcyBvZiBTZWN0aW9ucyAxIGFuZCAyIGFib3ZlIHByb3ZpZGVkIHRoYXQgeW91IGFjY29tcGFueQoraXQgd2l0aCB0aGUgY29tcGxldGUgY29ycmVzcG9uZGluZyBtYWNoaW5lLXJlYWRhYmxlIHNvdXJjZSBjb2RlLCB3aGljaAorbXVzdCBiZSBkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMgb2YgU2VjdGlvbnMgMSBhbmQgMiBhYm92ZSBvbiBhCittZWRpdW0gY3VzdG9tYXJpbHkgdXNlZCBmb3Igc29mdHdhcmUgaW50ZXJjaGFuZ2UuCisKKyAgSWYgZGlzdHJpYnV0aW9uIG9mIG9iamVjdCBjb2RlIGlzIG1hZGUgYnkgb2ZmZXJpbmcgYWNjZXNzIHRvIGNvcHkKK2Zyb20gYSBkZXNpZ25hdGVkIHBsYWNlLCB0aGVuIG9mZmVyaW5nIGVxdWl2YWxlbnQgYWNjZXNzIHRvIGNvcHkgdGhlCitzb3VyY2UgY29kZSBmcm9tIHRoZSBzYW1lIHBsYWNlIHNhdGlzZmllcyB0aGUgcmVxdWlyZW1lbnQgdG8KK2Rpc3RyaWJ1dGUgdGhlIHNvdXJjZSBjb2RlLCBldmVuIHRob3VnaCB0aGlyZCBwYXJ0aWVzIGFyZSBub3QKK2NvbXBlbGxlZCB0byBjb3B5IHRoZSBzb3VyY2UgYWxvbmcgd2l0aCB0aGUgb2JqZWN0IGNvZGUuCisKKyAgNS4gQSBwcm9ncmFtIHRoYXQgY29udGFpbnMgbm8gZGVyaXZhdGl2ZSBvZiBhbnkgcG9ydGlvbiBvZiB0aGUKK0xpYnJhcnksIGJ1dCBpcyBkZXNpZ25lZCB0byB3b3JrIHdpdGggdGhlIExpYnJhcnkgYnkgYmVpbmcgY29tcGlsZWQgb3IKK2xpbmtlZCB3aXRoIGl0LCBpcyBjYWxsZWQgYSAid29yayB0aGF0IHVzZXMgdGhlIExpYnJhcnkiLiAgU3VjaCBhCit3b3JrLCBpbiBpc29sYXRpb24sIGlzIG5vdCBhIGRlcml2YXRpdmUgd29yayBvZiB0aGUgTGlicmFyeSwgYW5kCit0aGVyZWZvcmUgZmFsbHMgb3V0c2lkZSB0aGUgc2NvcGUgb2YgdGhpcyBMaWNlbnNlLgorCisgIEhvd2V2ZXIsIGxpbmtpbmcgYSAid29yayB0aGF0IHVzZXMgdGhlIExpYnJhcnkiIHdpdGggdGhlIExpYnJhcnkKK2NyZWF0ZXMgYW4gZXhlY3V0YWJsZSB0aGF0IGlzIGEgZGVyaXZhdGl2ZSBvZiB0aGUgTGlicmFyeSAoYmVjYXVzZSBpdAorY29udGFpbnMgcG9ydGlvbnMgb2YgdGhlIExpYnJhcnkpLCByYXRoZXIgdGhhbiBhICJ3b3JrIHRoYXQgdXNlcyB0aGUKK2xpYnJhcnkiLiAgVGhlIGV4ZWN1dGFibGUgaXMgdGhlcmVmb3JlIGNvdmVyZWQgYnkgdGhpcyBMaWNlbnNlLgorU2VjdGlvbiA2IHN0YXRlcyB0ZXJtcyBmb3IgZGlzdHJpYnV0aW9uIG9mIHN1Y2ggZXhlY3V0YWJsZXMuCisKKyAgV2hlbiBhICJ3b3JrIHRoYXQgdXNlcyB0aGUgTGlicmFyeSIgdXNlcyBtYXRlcmlhbCBmcm9tIGEgaGVhZGVyIGZpbGUKK3RoYXQgaXMgcGFydCBvZiB0aGUgTGlicmFyeSwgdGhlIG9iamVjdCBjb2RlIGZvciB0aGUgd29yayBtYXkgYmUgYQorZGVyaXZhdGl2ZSB3b3JrIG9mIHRoZSBMaWJyYXJ5IGV2ZW4gdGhvdWdoIHRoZSBzb3VyY2UgY29kZSBpcyBub3QuCitXaGV0aGVyIHRoaXMgaXMgdHJ1ZSBpcyBlc3BlY2lhbGx5IHNpZ25pZmljYW50IGlmIHRoZSB3b3JrIGNhbiBiZQorbGlua2VkIHdpdGhvdXQgdGhlIExpYnJhcnksIG9yIGlmIHRoZSB3b3JrIGlzIGl0c2VsZiBhIGxpYnJhcnkuICBUaGUKK3RocmVzaG9sZCBmb3IgdGhpcyB0byBiZSB0cnVlIGlzIG5vdCBwcmVjaXNlbHkgZGVmaW5lZCBieSBsYXcuCisKKyAgSWYgc3VjaCBhbiBvYmplY3QgZmlsZSB1c2VzIG9ubHkgbnVtZXJpY2FsIHBhcmFtZXRlcnMsIGRhdGEKK3N0cnVjdHVyZSBsYXlvdXRzIGFuZCBhY2Nlc3NvcnMsIGFuZCBzbWFsbCBtYWNyb3MgYW5kIHNtYWxsIGlubGluZQorZnVuY3Rpb25zICh0ZW4gbGluZXMgb3IgbGVzcyBpbiBsZW5ndGgpLCB0aGVuIHRoZSB1c2Ugb2YgdGhlIG9iamVjdAorZmlsZSBpcyB1bnJlc3RyaWN0ZWQsIHJlZ2FyZGxlc3Mgb2Ygd2hldGhlciBpdCBpcyBsZWdhbGx5IGEgZGVyaXZhdGl2ZQord29yay4gIChFeGVjdXRhYmxlcyBjb250YWluaW5nIHRoaXMgb2JqZWN0IGNvZGUgcGx1cyBwb3J0aW9ucyBvZiB0aGUKK0xpYnJhcnkgd2lsbCBzdGlsbCBmYWxsIHVuZGVyIFNlY3Rpb24gNi4pCisKKyAgT3RoZXJ3aXNlLCBpZiB0aGUgd29yayBpcyBhIGRlcml2YXRpdmUgb2YgdGhlIExpYnJhcnksIHlvdSBtYXkKK2Rpc3RyaWJ1dGUgdGhlIG9iamVjdCBjb2RlIGZvciB0aGUgd29yayB1bmRlciB0aGUgdGVybXMgb2YgU2VjdGlvbiA2LgorQW55IGV4ZWN1dGFibGVzIGNvbnRhaW5pbmcgdGhhdCB3b3JrIGFsc28gZmFsbCB1bmRlciBTZWN0aW9uIDYsCit3aGV0aGVyIG9yIG5vdCB0aGV5IGFyZSBsaW5rZWQgZGlyZWN0bHkgd2l0aCB0aGUgTGlicmFyeSBpdHNlbGYuCisMCisgIDYuIEFzIGFuIGV4Y2VwdGlvbiB0byB0aGUgU2VjdGlvbnMgYWJvdmUsIHlvdSBtYXkgYWxzbyBjb21iaW5lIG9yCitsaW5rIGEgIndvcmsgdGhhdCB1c2VzIHRoZSBMaWJyYXJ5IiB3aXRoIHRoZSBMaWJyYXJ5IHRvIHByb2R1Y2UgYQord29yayBjb250YWluaW5nIHBvcnRpb25zIG9mIHRoZSBMaWJyYXJ5LCBhbmQgZGlzdHJpYnV0ZSB0aGF0IHdvcmsKK3VuZGVyIHRlcm1zIG9mIHlvdXIgY2hvaWNlLCBwcm92aWRlZCB0aGF0IHRoZSB0ZXJtcyBwZXJtaXQKK21vZGlmaWNhdGlvbiBvZiB0aGUgd29yayBmb3IgdGhlIGN1c3RvbWVyJ3Mgb3duIHVzZSBhbmQgcmV2ZXJzZQorZW5naW5lZXJpbmcgZm9yIGRlYnVnZ2luZyBzdWNoIG1vZGlmaWNhdGlvbnMuCisKKyAgWW91IG11c3QgZ2l2ZSBwcm9taW5lbnQgbm90aWNlIHdpdGggZWFjaCBjb3B5IG9mIHRoZSB3b3JrIHRoYXQgdGhlCitMaWJyYXJ5IGlzIHVzZWQgaW4gaXQgYW5kIHRoYXQgdGhlIExpYnJhcnkgYW5kIGl0cyB1c2UgYXJlIGNvdmVyZWQgYnkKK3RoaXMgTGljZW5zZS4gIFlvdSBtdXN0IHN1cHBseSBhIGNvcHkgb2YgdGhpcyBMaWNlbnNlLiAgSWYgdGhlIHdvcmsKK2R1cmluZyBleGVjdXRpb24gZGlzcGxheXMgY29weXJpZ2h0IG5vdGljZXMsIHlvdSBtdXN0IGluY2x1ZGUgdGhlCitjb3B5cmlnaHQgbm90aWNlIGZvciB0aGUgTGlicmFyeSBhbW9uZyB0aGVtLCBhcyB3ZWxsIGFzIGEgcmVmZXJlbmNlCitkaXJlY3RpbmcgdGhlIHVzZXIgdG8gdGhlIGNvcHkgb2YgdGhpcyBMaWNlbnNlLiAgQWxzbywgeW91IG11c3QgZG8gb25lCitvZiB0aGVzZSB0aGluZ3M6CisKKyAgICBhKSBBY2NvbXBhbnkgdGhlIHdvcmsgd2l0aCB0aGUgY29tcGxldGUgY29ycmVzcG9uZGluZworICAgIG1hY2hpbmUtcmVhZGFibGUgc291cmNlIGNvZGUgZm9yIHRoZSBMaWJyYXJ5IGluY2x1ZGluZyB3aGF0ZXZlcgorICAgIGNoYW5nZXMgd2VyZSB1c2VkIGluIHRoZSB3b3JrICh3aGljaCBtdXN0IGJlIGRpc3RyaWJ1dGVkIHVuZGVyCisgICAgU2VjdGlvbnMgMSBhbmQgMiBhYm92ZSk7IGFuZCwgaWYgdGhlIHdvcmsgaXMgYW4gZXhlY3V0YWJsZSBsaW5rZWQKKyAgICB3aXRoIHRoZSBMaWJyYXJ5LCB3aXRoIHRoZSBjb21wbGV0ZSBtYWNoaW5lLXJlYWRhYmxlICJ3b3JrIHRoYXQKKyAgICB1c2VzIHRoZSBMaWJyYXJ5IiwgYXMgb2JqZWN0IGNvZGUgYW5kL29yIHNvdXJjZSBjb2RlLCBzbyB0aGF0IHRoZQorICAgIHVzZXIgY2FuIG1vZGlmeSB0aGUgTGlicmFyeSBhbmQgdGhlbiByZWxpbmsgdG8gcHJvZHVjZSBhIG1vZGlmaWVkCisgICAgZXhlY3V0YWJsZSBjb250YWluaW5nIHRoZSBtb2RpZmllZCBMaWJyYXJ5LiAgKEl0IGlzIHVuZGVyc3Rvb2QKKyAgICB0aGF0IHRoZSB1c2VyIHdobyBjaGFuZ2VzIHRoZSBjb250ZW50cyBvZiBkZWZpbml0aW9ucyBmaWxlcyBpbiB0aGUKKyAgICBMaWJyYXJ5IHdpbGwgbm90IG5lY2Vzc2FyaWx5IGJlIGFibGUgdG8gcmVjb21waWxlIHRoZSBhcHBsaWNhdGlvbgorICAgIHRvIHVzZSB0aGUgbW9kaWZpZWQgZGVmaW5pdGlvbnMuKQorCisgICAgYikgVXNlIGEgc3VpdGFibGUgc2hhcmVkIGxpYnJhcnkgbWVjaGFuaXNtIGZvciBsaW5raW5nIHdpdGggdGhlCisgICAgTGlicmFyeS4gIEEgc3VpdGFibGUgbWVjaGFuaXNtIGlzIG9uZSB0aGF0ICgxKSB1c2VzIGF0IHJ1biB0aW1lIGEKKyAgICBjb3B5IG9mIHRoZSBsaWJyYXJ5IGFscmVhZHkgcHJlc2VudCBvbiB0aGUgdXNlcidzIGNvbXB1dGVyIHN5c3RlbSwKKyAgICByYXRoZXIgdGhhbiBjb3B5aW5nIGxpYnJhcnkgZnVuY3Rpb25zIGludG8gdGhlIGV4ZWN1dGFibGUsIGFuZCAoMikKKyAgICB3aWxsIG9wZXJhdGUgcHJvcGVybHkgd2l0aCBhIG1vZGlmaWVkIHZlcnNpb24gb2YgdGhlIGxpYnJhcnksIGlmCisgICAgdGhlIHVzZXIgaW5zdGFsbHMgb25lLCBhcyBsb25nIGFzIHRoZSBtb2RpZmllZCB2ZXJzaW9uIGlzCisgICAgaW50ZXJmYWNlLWNvbXBhdGlibGUgd2l0aCB0aGUgdmVyc2lvbiB0aGF0IHRoZSB3b3JrIHdhcyBtYWRlIHdpdGguCisKKyAgICBjKSBBY2NvbXBhbnkgdGhlIHdvcmsgd2l0aCBhIHdyaXR0ZW4gb2ZmZXIsIHZhbGlkIGZvciBhdAorICAgIGxlYXN0IHRocmVlIHllYXJzLCB0byBnaXZlIHRoZSBzYW1lIHVzZXIgdGhlIG1hdGVyaWFscworICAgIHNwZWNpZmllZCBpbiBTdWJzZWN0aW9uIDZhLCBhYm92ZSwgZm9yIGEgY2hhcmdlIG5vIG1vcmUKKyAgICB0aGFuIHRoZSBjb3N0IG9mIHBlcmZvcm1pbmcgdGhpcyBkaXN0cmlidXRpb24uCisKKyAgICBkKSBJZiBkaXN0cmlidXRpb24gb2YgdGhlIHdvcmsgaXMgbWFkZSBieSBvZmZlcmluZyBhY2Nlc3MgdG8gY29weQorICAgIGZyb20gYSBkZXNpZ25hdGVkIHBsYWNlLCBvZmZlciBlcXVpdmFsZW50IGFjY2VzcyB0byBjb3B5IHRoZSBhYm92ZQorICAgIHNwZWNpZmllZCBtYXRlcmlhbHMgZnJvbSB0aGUgc2FtZSBwbGFjZS4KKworICAgIGUpIFZlcmlmeSB0aGF0IHRoZSB1c2VyIGhhcyBhbHJlYWR5IHJlY2VpdmVkIGEgY29weSBvZiB0aGVzZQorICAgIG1hdGVyaWFscyBvciB0aGF0IHlvdSBoYXZlIGFscmVhZHkgc2VudCB0aGlzIHVzZXIgYSBjb3B5LgorCisgIEZvciBhbiBleGVjdXRhYmxlLCB0aGUgcmVxdWlyZWQgZm9ybSBvZiB0aGUgIndvcmsgdGhhdCB1c2VzIHRoZQorTGlicmFyeSIgbXVzdCBpbmNsdWRlIGFueSBkYXRhIGFuZCB1dGlsaXR5IHByb2dyYW1zIG5lZWRlZCBmb3IKK3JlcHJvZHVjaW5nIHRoZSBleGVjdXRhYmxlIGZyb20gaXQuICBIb3dldmVyLCBhcyBhIHNwZWNpYWwgZXhjZXB0aW9uLAordGhlIG1hdGVyaWFscyB0byBiZSBkaXN0cmlidXRlZCBuZWVkIG5vdCBpbmNsdWRlIGFueXRoaW5nIHRoYXQgaXMKK25vcm1hbGx5IGRpc3RyaWJ1dGVkIChpbiBlaXRoZXIgc291cmNlIG9yIGJpbmFyeSBmb3JtKSB3aXRoIHRoZSBtYWpvcgorY29tcG9uZW50cyAoY29tcGlsZXIsIGtlcm5lbCwgYW5kIHNvIG9uKSBvZiB0aGUgb3BlcmF0aW5nIHN5c3RlbSBvbgord2hpY2ggdGhlIGV4ZWN1dGFibGUgcnVucywgdW5sZXNzIHRoYXQgY29tcG9uZW50IGl0c2VsZiBhY2NvbXBhbmllcwordGhlIGV4ZWN1dGFibGUuCisKKyAgSXQgbWF5IGhhcHBlbiB0aGF0IHRoaXMgcmVxdWlyZW1lbnQgY29udHJhZGljdHMgdGhlIGxpY2Vuc2UKK3Jlc3RyaWN0aW9ucyBvZiBvdGhlciBwcm9wcmlldGFyeSBsaWJyYXJpZXMgdGhhdCBkbyBub3Qgbm9ybWFsbHkKK2FjY29tcGFueSB0aGUgb3BlcmF0aW5nIHN5c3RlbS4gIFN1Y2ggYSBjb250cmFkaWN0aW9uIG1lYW5zIHlvdSBjYW5ub3QKK3VzZSBib3RoIHRoZW0gYW5kIHRoZSBMaWJyYXJ5IHRvZ2V0aGVyIGluIGFuIGV4ZWN1dGFibGUgdGhhdCB5b3UKK2Rpc3RyaWJ1dGUuCisMCisgIDcuIFlvdSBtYXkgcGxhY2UgbGlicmFyeSBmYWNpbGl0aWVzIHRoYXQgYXJlIGEgd29yayBiYXNlZCBvbiB0aGUKK0xpYnJhcnkgc2lkZS1ieS1zaWRlIGluIGEgc2luZ2xlIGxpYnJhcnkgdG9nZXRoZXIgd2l0aCBvdGhlciBsaWJyYXJ5CitmYWNpbGl0aWVzIG5vdCBjb3ZlcmVkIGJ5IHRoaXMgTGljZW5zZSwgYW5kIGRpc3RyaWJ1dGUgc3VjaCBhIGNvbWJpbmVkCitsaWJyYXJ5LCBwcm92aWRlZCB0aGF0IHRoZSBzZXBhcmF0ZSBkaXN0cmlidXRpb24gb2YgdGhlIHdvcmsgYmFzZWQgb24KK3RoZSBMaWJyYXJ5IGFuZCBvZiB0aGUgb3RoZXIgbGlicmFyeSBmYWNpbGl0aWVzIGlzIG90aGVyd2lzZQorcGVybWl0dGVkLCBhbmQgcHJvdmlkZWQgdGhhdCB5b3UgZG8gdGhlc2UgdHdvIHRoaW5nczoKKworICAgIGEpIEFjY29tcGFueSB0aGUgY29tYmluZWQgbGlicmFyeSB3aXRoIGEgY29weSBvZiB0aGUgc2FtZSB3b3JrCisgICAgYmFzZWQgb24gdGhlIExpYnJhcnksIHVuY29tYmluZWQgd2l0aCBhbnkgb3RoZXIgbGlicmFyeQorICAgIGZhY2lsaXRpZXMuICBUaGlzIG11c3QgYmUgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZQorICAgIFNlY3Rpb25zIGFib3ZlLgorCisgICAgYikgR2l2ZSBwcm9taW5lbnQgbm90aWNlIHdpdGggdGhlIGNvbWJpbmVkIGxpYnJhcnkgb2YgdGhlIGZhY3QKKyAgICB0aGF0IHBhcnQgb2YgaXQgaXMgYSB3b3JrIGJhc2VkIG9uIHRoZSBMaWJyYXJ5LCBhbmQgZXhwbGFpbmluZworICAgIHdoZXJlIHRvIGZpbmQgdGhlIGFjY29tcGFueWluZyB1bmNvbWJpbmVkIGZvcm0gb2YgdGhlIHNhbWUgd29yay4KKworICA4LiBZb3UgbWF5IG5vdCBjb3B5LCBtb2RpZnksIHN1YmxpY2Vuc2UsIGxpbmsgd2l0aCwgb3IgZGlzdHJpYnV0ZQordGhlIExpYnJhcnkgZXhjZXB0IGFzIGV4cHJlc3NseSBwcm92aWRlZCB1bmRlciB0aGlzIExpY2Vuc2UuICBBbnkKK2F0dGVtcHQgb3RoZXJ3aXNlIHRvIGNvcHksIG1vZGlmeSwgc3VibGljZW5zZSwgbGluayB3aXRoLCBvcgorZGlzdHJpYnV0ZSB0aGUgTGlicmFyeSBpcyB2b2lkLCBhbmQgd2lsbCBhdXRvbWF0aWNhbGx5IHRlcm1pbmF0ZSB5b3VyCityaWdodHMgdW5kZXIgdGhpcyBMaWNlbnNlLiAgSG93ZXZlciwgcGFydGllcyB3aG8gaGF2ZSByZWNlaXZlZCBjb3BpZXMsCitvciByaWdodHMsIGZyb20geW91IHVuZGVyIHRoaXMgTGljZW5zZSB3aWxsIG5vdCBoYXZlIHRoZWlyIGxpY2Vuc2VzCit0ZXJtaW5hdGVkIHNvIGxvbmcgYXMgc3VjaCBwYXJ0aWVzIHJlbWFpbiBpbiBmdWxsIGNvbXBsaWFuY2UuCisKKyAgOS4gWW91IGFyZSBub3QgcmVxdWlyZWQgdG8gYWNjZXB0IHRoaXMgTGljZW5zZSwgc2luY2UgeW91IGhhdmUgbm90CitzaWduZWQgaXQuICBIb3dldmVyLCBub3RoaW5nIGVsc2UgZ3JhbnRzIHlvdSBwZXJtaXNzaW9uIHRvIG1vZGlmeSBvcgorZGlzdHJpYnV0ZSB0aGUgTGlicmFyeSBvciBpdHMgZGVyaXZhdGl2ZSB3b3Jrcy4gIFRoZXNlIGFjdGlvbnMgYXJlCitwcm9oaWJpdGVkIGJ5IGxhdyBpZiB5b3UgZG8gbm90IGFjY2VwdCB0aGlzIExpY2Vuc2UuICBUaGVyZWZvcmUsIGJ5Cittb2RpZnlpbmcgb3IgZGlzdHJpYnV0aW5nIHRoZSBMaWJyYXJ5IChvciBhbnkgd29yayBiYXNlZCBvbiB0aGUKK0xpYnJhcnkpLCB5b3UgaW5kaWNhdGUgeW91ciBhY2NlcHRhbmNlIG9mIHRoaXMgTGljZW5zZSB0byBkbyBzbywgYW5kCithbGwgaXRzIHRlcm1zIGFuZCBjb25kaXRpb25zIGZvciBjb3B5aW5nLCBkaXN0cmlidXRpbmcgb3IgbW9kaWZ5aW5nCit0aGUgTGlicmFyeSBvciB3b3JrcyBiYXNlZCBvbiBpdC4KKworICAxMC4gRWFjaCB0aW1lIHlvdSByZWRpc3RyaWJ1dGUgdGhlIExpYnJhcnkgKG9yIGFueSB3b3JrIGJhc2VkIG9uIHRoZQorTGlicmFyeSksIHRoZSByZWNpcGllbnQgYXV0b21hdGljYWxseSByZWNlaXZlcyBhIGxpY2Vuc2UgZnJvbSB0aGUKK29yaWdpbmFsIGxpY2Vuc29yIHRvIGNvcHksIGRpc3RyaWJ1dGUsIGxpbmsgd2l0aCBvciBtb2RpZnkgdGhlIExpYnJhcnkKK3N1YmplY3QgdG8gdGhlc2UgdGVybXMgYW5kIGNvbmRpdGlvbnMuICBZb3UgbWF5IG5vdCBpbXBvc2UgYW55IGZ1cnRoZXIKK3Jlc3RyaWN0aW9ucyBvbiB0aGUgcmVjaXBpZW50cycgZXhlcmNpc2Ugb2YgdGhlIHJpZ2h0cyBncmFudGVkIGhlcmVpbi4KK1lvdSBhcmUgbm90IHJlc3BvbnNpYmxlIGZvciBlbmZvcmNpbmcgY29tcGxpYW5jZSBieSB0aGlyZCBwYXJ0aWVzIHdpdGgKK3RoaXMgTGljZW5zZS4KKwwKKyAgMTEuIElmLCBhcyBhIGNvbnNlcXVlbmNlIG9mIGEgY291cnQganVkZ21lbnQgb3IgYWxsZWdhdGlvbiBvZiBwYXRlbnQKK2luZnJpbmdlbWVudCBvciBmb3IgYW55IG90aGVyIHJlYXNvbiAobm90IGxpbWl0ZWQgdG8gcGF0ZW50IGlzc3VlcyksCitjb25kaXRpb25zIGFyZSBpbXBvc2VkIG9uIHlvdSAod2hldGhlciBieSBjb3VydCBvcmRlciwgYWdyZWVtZW50IG9yCitvdGhlcndpc2UpIHRoYXQgY29udHJhZGljdCB0aGUgY29uZGl0aW9ucyBvZiB0aGlzIExpY2Vuc2UsIHRoZXkgZG8gbm90CitleGN1c2UgeW91IGZyb20gdGhlIGNvbmRpdGlvbnMgb2YgdGhpcyBMaWNlbnNlLiAgSWYgeW91IGNhbm5vdAorZGlzdHJpYnV0ZSBzbyBhcyB0byBzYXRpc2Z5IHNpbXVsdGFuZW91c2x5IHlvdXIgb2JsaWdhdGlvbnMgdW5kZXIgdGhpcworTGljZW5zZSBhbmQgYW55IG90aGVyIHBlcnRpbmVudCBvYmxpZ2F0aW9ucywgdGhlbiBhcyBhIGNvbnNlcXVlbmNlIHlvdQorbWF5IG5vdCBkaXN0cmlidXRlIHRoZSBMaWJyYXJ5IGF0IGFsbC4gIEZvciBleGFtcGxlLCBpZiBhIHBhdGVudAorbGljZW5zZSB3b3VsZCBub3QgcGVybWl0IHJveWFsdHktZnJlZSByZWRpc3RyaWJ1dGlvbiBvZiB0aGUgTGlicmFyeSBieQorYWxsIHRob3NlIHdobyByZWNlaXZlIGNvcGllcyBkaXJlY3RseSBvciBpbmRpcmVjdGx5IHRocm91Z2ggeW91LCB0aGVuCit0aGUgb25seSB3YXkgeW91IGNvdWxkIHNhdGlzZnkgYm90aCBpdCBhbmQgdGhpcyBMaWNlbnNlIHdvdWxkIGJlIHRvCityZWZyYWluIGVudGlyZWx5IGZyb20gZGlzdHJpYnV0aW9uIG9mIHRoZSBMaWJyYXJ5LgorCitJZiBhbnkgcG9ydGlvbiBvZiB0aGlzIHNlY3Rpb24gaXMgaGVsZCBpbnZhbGlkIG9yIHVuZW5mb3JjZWFibGUgdW5kZXIgYW55CitwYXJ0aWN1bGFyIGNpcmN1bXN0YW5jZSwgdGhlIGJhbGFuY2Ugb2YgdGhlIHNlY3Rpb24gaXMgaW50ZW5kZWQgdG8gYXBwbHksCithbmQgdGhlIHNlY3Rpb24gYXMgYSB3aG9sZSBpcyBpbnRlbmRlZCB0byBhcHBseSBpbiBvdGhlciBjaXJjdW1zdGFuY2VzLgorCitJdCBpcyBub3QgdGhlIHB1cnBvc2Ugb2YgdGhpcyBzZWN0aW9uIHRvIGluZHVjZSB5b3UgdG8gaW5mcmluZ2UgYW55CitwYXRlbnRzIG9yIG90aGVyIHByb3BlcnR5IHJpZ2h0IGNsYWltcyBvciB0byBjb250ZXN0IHZhbGlkaXR5IG9mIGFueQorc3VjaCBjbGFpbXM7IHRoaXMgc2VjdGlvbiBoYXMgdGhlIHNvbGUgcHVycG9zZSBvZiBwcm90ZWN0aW5nIHRoZQoraW50ZWdyaXR5IG9mIHRoZSBmcmVlIHNvZnR3YXJlIGRpc3RyaWJ1dGlvbiBzeXN0ZW0gd2hpY2ggaXMKK2ltcGxlbWVudGVkIGJ5IHB1YmxpYyBsaWNlbnNlIHByYWN0aWNlcy4gIE1hbnkgcGVvcGxlIGhhdmUgbWFkZQorZ2VuZXJvdXMgY29udHJpYnV0aW9ucyB0byB0aGUgd2lkZSByYW5nZSBvZiBzb2Z0d2FyZSBkaXN0cmlidXRlZAordGhyb3VnaCB0aGF0IHN5c3RlbSBpbiByZWxpYW5jZSBvbiBjb25zaXN0ZW50IGFwcGxpY2F0aW9uIG9mIHRoYXQKK3N5c3RlbTsgaXQgaXMgdXAgdG8gdGhlIGF1dGhvci9kb25vciB0byBkZWNpZGUgaWYgaGUgb3Igc2hlIGlzIHdpbGxpbmcKK3RvIGRpc3RyaWJ1dGUgc29mdHdhcmUgdGhyb3VnaCBhbnkgb3RoZXIgc3lzdGVtIGFuZCBhIGxpY2Vuc2VlIGNhbm5vdAoraW1wb3NlIHRoYXQgY2hvaWNlLgorCitUaGlzIHNlY3Rpb24gaXMgaW50ZW5kZWQgdG8gbWFrZSB0aG9yb3VnaGx5IGNsZWFyIHdoYXQgaXMgYmVsaWV2ZWQgdG8KK2JlIGEgY29uc2VxdWVuY2Ugb2YgdGhlIHJlc3Qgb2YgdGhpcyBMaWNlbnNlLgorCisgIDEyLiBJZiB0aGUgZGlzdHJpYnV0aW9uIGFuZC9vciB1c2Ugb2YgdGhlIExpYnJhcnkgaXMgcmVzdHJpY3RlZCBpbgorY2VydGFpbiBjb3VudHJpZXMgZWl0aGVyIGJ5IHBhdGVudHMgb3IgYnkgY29weXJpZ2h0ZWQgaW50ZXJmYWNlcywgdGhlCitvcmlnaW5hbCBjb3B5cmlnaHQgaG9sZGVyIHdobyBwbGFjZXMgdGhlIExpYnJhcnkgdW5kZXIgdGhpcyBMaWNlbnNlIG1heSBhZGQKK2FuIGV4cGxpY2l0IGdlb2dyYXBoaWNhbCBkaXN0cmlidXRpb24gbGltaXRhdGlvbiBleGNsdWRpbmcgdGhvc2UgY291bnRyaWVzLAorc28gdGhhdCBkaXN0cmlidXRpb24gaXMgcGVybWl0dGVkIG9ubHkgaW4gb3IgYW1vbmcgY291bnRyaWVzIG5vdCB0aHVzCitleGNsdWRlZC4gIEluIHN1Y2ggY2FzZSwgdGhpcyBMaWNlbnNlIGluY29ycG9yYXRlcyB0aGUgbGltaXRhdGlvbiBhcyBpZgord3JpdHRlbiBpbiB0aGUgYm9keSBvZiB0aGlzIExpY2Vuc2UuCisKKyAgMTMuIFRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24gbWF5IHB1Ymxpc2ggcmV2aXNlZCBhbmQvb3IgbmV3Cit2ZXJzaW9ucyBvZiB0aGUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZnJvbSB0aW1lIHRvIHRpbWUuCitTdWNoIG5ldyB2ZXJzaW9ucyB3aWxsIGJlIHNpbWlsYXIgaW4gc3Bpcml0IHRvIHRoZSBwcmVzZW50IHZlcnNpb24sCitidXQgbWF5IGRpZmZlciBpbiBkZXRhaWwgdG8gYWRkcmVzcyBuZXcgcHJvYmxlbXMgb3IgY29uY2VybnMuCisKK0VhY2ggdmVyc2lvbiBpcyBnaXZlbiBhIGRpc3Rpbmd1aXNoaW5nIHZlcnNpb24gbnVtYmVyLiAgSWYgdGhlIExpYnJhcnkKK3NwZWNpZmllcyBhIHZlcnNpb24gbnVtYmVyIG9mIHRoaXMgTGljZW5zZSB3aGljaCBhcHBsaWVzIHRvIGl0IGFuZAorImFueSBsYXRlciB2ZXJzaW9uIiwgeW91IGhhdmUgdGhlIG9wdGlvbiBvZiBmb2xsb3dpbmcgdGhlIHRlcm1zIGFuZAorY29uZGl0aW9ucyBlaXRoZXIgb2YgdGhhdCB2ZXJzaW9uIG9yIG9mIGFueSBsYXRlciB2ZXJzaW9uIHB1Ymxpc2hlZCBieQordGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4gIElmIHRoZSBMaWJyYXJ5IGRvZXMgbm90IHNwZWNpZnkgYQorbGljZW5zZSB2ZXJzaW9uIG51bWJlciwgeW91IG1heSBjaG9vc2UgYW55IHZlcnNpb24gZXZlciBwdWJsaXNoZWQgYnkKK3RoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisMCisgIDE0LiBJZiB5b3Ugd2lzaCB0byBpbmNvcnBvcmF0ZSBwYXJ0cyBvZiB0aGUgTGlicmFyeSBpbnRvIG90aGVyIGZyZWUKK3Byb2dyYW1zIHdob3NlIGRpc3RyaWJ1dGlvbiBjb25kaXRpb25zIGFyZSBpbmNvbXBhdGlibGUgd2l0aCB0aGVzZSwKK3dyaXRlIHRvIHRoZSBhdXRob3IgdG8gYXNrIGZvciBwZXJtaXNzaW9uLiAgRm9yIHNvZnR3YXJlIHdoaWNoIGlzCitjb3B5cmlnaHRlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCB3cml0ZSB0byB0aGUgRnJlZQorU29mdHdhcmUgRm91bmRhdGlvbjsgd2Ugc29tZXRpbWVzIG1ha2UgZXhjZXB0aW9ucyBmb3IgdGhpcy4gIE91cgorZGVjaXNpb24gd2lsbCBiZSBndWlkZWQgYnkgdGhlIHR3byBnb2FscyBvZiBwcmVzZXJ2aW5nIHRoZSBmcmVlIHN0YXR1cworb2YgYWxsIGRlcml2YXRpdmVzIG9mIG91ciBmcmVlIHNvZnR3YXJlIGFuZCBvZiBwcm9tb3RpbmcgdGhlIHNoYXJpbmcKK2FuZCByZXVzZSBvZiBzb2Z0d2FyZSBnZW5lcmFsbHkuCisKKwkJCSAgICBOTyBXQVJSQU5UWQorCisgIDE1LiBCRUNBVVNFIFRIRSBMSUJSQVJZIElTIExJQ0VOU0VEIEZSRUUgT0YgQ0hBUkdFLCBUSEVSRSBJUyBOTworV0FSUkFOVFkgRk9SIFRIRSBMSUJSQVJZLCBUTyBUSEUgRVhURU5UIFBFUk1JVFRFRCBCWSBBUFBMSUNBQkxFIExBVy4KK0VYQ0VQVCBXSEVOIE9USEVSV0lTRSBTVEFURUQgSU4gV1JJVElORyBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EL09SCitPVEhFUiBQQVJUSUVTIFBST1ZJREUgVEhFIExJQlJBUlkgIkFTIElTIiBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWQorS0lORCwgRUlUSEVSIEVYUFJFU1NFRCBPUiBJTVBMSUVELCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCitJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKK1BVUlBPU0UuICBUSEUgRU5USVJFIFJJU0sgQVMgVE8gVEhFIFFVQUxJVFkgQU5EIFBFUkZPUk1BTkNFIE9GIFRIRQorTElCUkFSWSBJUyBXSVRIIFlPVS4gIFNIT1VMRCBUSEUgTElCUkFSWSBQUk9WRSBERUZFQ1RJVkUsIFlPVSBBU1NVTUUKK1RIRSBDT1NUIE9GIEFMTCBORUNFU1NBUlkgU0VSVklDSU5HLCBSRVBBSVIgT1IgQ09SUkVDVElPTi4KKworICAxNi4gSU4gTk8gRVZFTlQgVU5MRVNTIFJFUVVJUkVEIEJZIEFQUExJQ0FCTEUgTEFXIE9SIEFHUkVFRCBUTyBJTgorV1JJVElORyBXSUxMIEFOWSBDT1BZUklHSFQgSE9MREVSLCBPUiBBTlkgT1RIRVIgUEFSVFkgV0hPIE1BWSBNT0RJRlkKK0FORC9PUiBSRURJU1RSSUJVVEUgVEhFIExJQlJBUlkgQVMgUEVSTUlUVEVEIEFCT1ZFLCBCRSBMSUFCTEUgVE8gWU9VCitGT1IgREFNQUdFUywgSU5DTFVESU5HIEFOWSBHRU5FUkFMLCBTUEVDSUFMLCBJTkNJREVOVEFMIE9SCitDT05TRVFVRU5USUFMIERBTUFHRVMgQVJJU0lORyBPVVQgT0YgVEhFIFVTRSBPUiBJTkFCSUxJVFkgVE8gVVNFIFRIRQorTElCUkFSWSAoSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBMT1NTIE9GIERBVEEgT1IgREFUQSBCRUlORworUkVOREVSRUQgSU5BQ0NVUkFURSBPUiBMT1NTRVMgU1VTVEFJTkVEIEJZIFlPVSBPUiBUSElSRCBQQVJUSUVTIE9SIEEKK0ZBSUxVUkUgT0YgVEhFIExJQlJBUlkgVE8gT1BFUkFURSBXSVRIIEFOWSBPVEhFUiBTT0ZUV0FSRSksIEVWRU4gSUYKK1NVQ0ggSE9MREVSIE9SIE9USEVSIFBBUlRZIEhBUyBCRUVOIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0gKK0RBTUFHRVMuCisKKwkJICAgICBFTkQgT0YgVEVSTVMgQU5EIENPTkRJVElPTlMKKwwKKyAgICAgICAgICAgSG93IHRvIEFwcGx5IFRoZXNlIFRlcm1zIHRvIFlvdXIgTmV3IExpYnJhcmllcworCisgIElmIHlvdSBkZXZlbG9wIGEgbmV3IGxpYnJhcnksIGFuZCB5b3Ugd2FudCBpdCB0byBiZSBvZiB0aGUgZ3JlYXRlc3QKK3Bvc3NpYmxlIHVzZSB0byB0aGUgcHVibGljLCB3ZSByZWNvbW1lbmQgbWFraW5nIGl0IGZyZWUgc29mdHdhcmUgdGhhdAorZXZlcnlvbmUgY2FuIHJlZGlzdHJpYnV0ZSBhbmQgY2hhbmdlLiAgWW91IGNhbiBkbyBzbyBieSBwZXJtaXR0aW5nCityZWRpc3RyaWJ1dGlvbiB1bmRlciB0aGVzZSB0ZXJtcyAob3IsIGFsdGVybmF0aXZlbHksIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUKK29yZGluYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UpLgorCisgIFRvIGFwcGx5IHRoZXNlIHRlcm1zLCBhdHRhY2ggdGhlIGZvbGxvd2luZyBub3RpY2VzIHRvIHRoZSBsaWJyYXJ5LiAgSXQgaXMKK3NhZmVzdCB0byBhdHRhY2ggdGhlbSB0byB0aGUgc3RhcnQgb2YgZWFjaCBzb3VyY2UgZmlsZSB0byBtb3N0IGVmZmVjdGl2ZWx5Citjb252ZXkgdGhlIGV4Y2x1c2lvbiBvZiB3YXJyYW50eTsgYW5kIGVhY2ggZmlsZSBzaG91bGQgaGF2ZSBhdCBsZWFzdCB0aGUKKyJjb3B5cmlnaHQiIGxpbmUgYW5kIGEgcG9pbnRlciB0byB3aGVyZSB0aGUgZnVsbCBub3RpY2UgaXMgZm91bmQuCisKKyAgICA8b25lIGxpbmUgdG8gZ2l2ZSB0aGUgbGlicmFyeSdzIG5hbWUgYW5kIGEgYnJpZWYgaWRlYSBvZiB3aGF0IGl0IGRvZXMuPgorICAgIENvcHlyaWdodCAoQykgPHllYXI+ICA8bmFtZSBvZiBhdXRob3I+CisKKyAgICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgICAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYworICAgIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICAgIHZlcnNpb24gMi4xIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorCisgICAgVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAgICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICAgIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKKyAgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCisgICAgTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICAgIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sIE1BICAwMjExMS0xMzA3ICBVU0EKKworQWxzbyBhZGQgaW5mb3JtYXRpb24gb24gaG93IHRvIGNvbnRhY3QgeW91IGJ5IGVsZWN0cm9uaWMgYW5kIHBhcGVyIG1haWwuCisKK1lvdSBzaG91bGQgYWxzbyBnZXQgeW91ciBlbXBsb3llciAoaWYgeW91IHdvcmsgYXMgYSBwcm9ncmFtbWVyKSBvciB5b3VyCitzY2hvb2wsIGlmIGFueSwgdG8gc2lnbiBhICJjb3B5cmlnaHQgZGlzY2xhaW1lciIgZm9yIHRoZSBsaWJyYXJ5LCBpZgorbmVjZXNzYXJ5LiAgSGVyZSBpcyBhIHNhbXBsZTsgYWx0ZXIgdGhlIG5hbWVzOgorCisgIFlveW9keW5lLCBJbmMuLCBoZXJlYnkgZGlzY2xhaW1zIGFsbCBjb3B5cmlnaHQgaW50ZXJlc3QgaW4gdGhlCisgIGxpYnJhcnkgYEZyb2InIChhIGxpYnJhcnkgZm9yIHR3ZWFraW5nIGtub2JzKSB3cml0dGVuIGJ5IEphbWVzIFJhbmRvbSBIYWNrZXIuCisKKyAgPHNpZ25hdHVyZSBvZiBUeSBDb29uPiwgMSBBcHJpbCAxOTkwCisgIFR5IENvb24sIFByZXNpZGVudCBvZiBWaWNlCisKK1RoYXQncyBhbGwgdGhlcmUgaXMgdG8gaXQhCisKKwpkaWZmIC0tZ2l0IGEvTElDRU5TRS50eHQgYi9MSUNFTlNFLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mYTgwM2IxCi0tLSAvZGV2L251bGwKKysrIGIvTElDRU5TRS50eHQKQEAgLTAsMCArMSw1MyBAQAorICAgICAgICAgICAgICAgIHd4V2luZG93cyBMaWJyYXJ5IExpY2VuY2UsIFZlcnNpb24gMy4xCisgICAgICAgICAgICAgICAgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKworICBDb3B5cmlnaHQgKEMpIDE5OTgtMjAwNSBKdWxpYW4gU21hcnQsIFJvYmVydCBSb2VibGluZyBldCBhbAorCisgIEV2ZXJ5b25lIGlzIHBlcm1pdHRlZCB0byBjb3B5IGFuZCBkaXN0cmlidXRlIHZlcmJhdGltIGNvcGllcworICBvZiB0aGlzIGxpY2VuY2UgZG9jdW1lbnQsIGJ1dCBjaGFuZ2luZyBpdCBpcyBub3QgYWxsb3dlZC4KKworICAgICAgICAgICAgICAgICAgICAgICBXWFdJTkRPV1MgTElCUkFSWSBMSUNFTkNFCisgICAgIFRFUk1TIEFORCBDT05ESVRJT05TIEZPUiBDT1BZSU5HLCBESVNUUklCVVRJT04gQU5EIE1PRElGSUNBVElPTgorICAKKyAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQKKyAgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbmNlIGFzIHB1Ymxpc2hlZCBieQorICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbmNlLCBvciAoYXQKKyAgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICAKKyAgVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dAorICBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VIExpYnJhcnkKKyAgR2VuZXJhbCBQdWJsaWMgTGljZW5jZSBmb3IgbW9yZSBkZXRhaWxzLgorCisgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2VuY2UKKyAgYWxvbmcgd2l0aCB0aGlzIHNvZnR3YXJlLCB1c3VhbGx5IGluIGEgZmlsZSBuYW1lZCBDT1BZSU5HLkxJQi4gIElmIG5vdCwKKyAgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsCisgIEJvc3RvbiwgTUEgMDIxMTEtMTMwNyBVU0EuCisKKyAgRVhDRVBUSU9OIE5PVElDRQorCisgIDEuIEFzIGEgc3BlY2lhbCBleGNlcHRpb24sIHRoZSBjb3B5cmlnaHQgaG9sZGVycyBvZiB0aGlzIGxpYnJhcnkgZ2l2ZQorICBwZXJtaXNzaW9uIGZvciBhZGRpdGlvbmFsIHVzZXMgb2YgdGhlIHRleHQgY29udGFpbmVkIGluIHRoaXMgcmVsZWFzZSBvZgorICB0aGUgbGlicmFyeSBhcyBsaWNlbmNlZCB1bmRlciB0aGUgd3hXaW5kb3dzIExpYnJhcnkgTGljZW5jZSwgYXBwbHlpbmcKKyAgZWl0aGVyIHZlcnNpb24gMy4xIG9mIHRoZSBMaWNlbmNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uIG9mCisgIHRoZSBMaWNlbmNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgY29weXJpZ2h0IGhvbGRlcnMgb2YgdmVyc2lvbgorICAzLjEgb2YgdGhlIExpY2VuY2UgZG9jdW1lbnQuCisKKyAgMi4gVGhlIGV4Y2VwdGlvbiBpcyB0aGF0IHlvdSBtYXkgdXNlLCBjb3B5LCBsaW5rLCBtb2RpZnkgYW5kIGRpc3RyaWJ1dGUKKyAgdW5kZXIgeW91ciBvd24gdGVybXMsIGJpbmFyeSBvYmplY3QgY29kZSB2ZXJzaW9ucyBvZiB3b3JrcyBiYXNlZAorICBvbiB0aGUgTGlicmFyeS4KKworICAzLiBJZiB5b3UgY29weSBjb2RlIGZyb20gZmlsZXMgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUKKyAgR2VuZXJhbCBQdWJsaWMgTGljZW5jZSBvciB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5jZSBpbnRvIGEKKyAgY29weSBvZiB0aGlzIGxpYnJhcnksIGFzIHRoaXMgbGljZW5jZSBwZXJtaXRzLCB0aGUgZXhjZXB0aW9uIGRvZXMgbm90CisgIGFwcGx5IHRvIHRoZSBjb2RlIHRoYXQgeW91IGFkZCBpbiB0aGlzIHdheS4gIFRvIGF2b2lkIG1pc2xlYWRpbmcgYW55b25lIGFzCisgIHRvIHRoZSBzdGF0dXMgb2Ygc3VjaCBtb2RpZmllZCBmaWxlcywgeW91IG11c3QgZGVsZXRlIHRoaXMgZXhjZXB0aW9uCisgIG5vdGljZSBmcm9tIHN1Y2ggY29kZSBhbmQvb3IgYWRqdXN0IHRoZSBsaWNlbnNpbmcgY29uZGl0aW9ucyBub3RpY2UKKyAgYWNjb3JkaW5nbHkuCisKKyAgNC4gSWYgeW91IHdyaXRlIG1vZGlmaWNhdGlvbnMgb2YgeW91ciBvd24gZm9yIHRoaXMgbGlicmFyeSwgaXQgaXMgeW91cgorICBjaG9pY2Ugd2hldGhlciB0byBwZXJtaXQgdGhpcyBleGNlcHRpb24gdG8gYXBwbHkgdG8geW91ciBtb2RpZmljYXRpb25zLiAKKyAgSWYgeW91IGRvIG5vdCB3aXNoIHRoYXQsIHlvdSBtdXN0IGRlbGV0ZSB0aGUgZXhjZXB0aW9uIG5vdGljZSBmcm9tIHN1Y2gKKyAgY29kZSBhbmQvb3IgYWRqdXN0IHRoZSBsaWNlbnNpbmcgY29uZGl0aW9ucyBub3RpY2UgYWNjb3JkaW5nbHkuCisKKwpkaWZmIC0tZ2l0IGEvTWFrZWZpbGUuYW0gYi9NYWtlZmlsZS5hbQppbmRleCA0MmNmZjU3Li4wMDVmMDQwIDEwMDY0NAotLS0gYS9NYWtlZmlsZS5hbQorKysgYi9NYWtlZmlsZS5hbQpAQCAtMSwxMzQgKzEsMjYzIEBACi0jIyBQcm9jZXNzIHRoaXMgZmlsZSB3aXRoIGF1dG9tYWtlIHRvIHByb2R1Y2UgTWFrZWZpbGUuaW4KLSMKLSMgIEF1dG9tYWtlIE1ha2VmaWxlIGZvciB0aGUgSlBFRyBsaWJyYXJ5Ci0jCi0jICBUaGlzIGZpbGUgaXMgd3JpdHRlbiBieSBCb2IgRnJpZXNlbmhhaG4sIEd1aWRvIFZvbGxiZWRpbmcKLSMKK2xpYl9MVExJQlJBUklFUyA9IGxpYmpwZWcubGEgbGlidHVyYm9qcGVnLmxhCitsaWJqcGVnX2xhX0xERkxBR1MgPSAtdmVyc2lvbi1pbmZvICR7U09fTUFKT1JfVkVSU0lPTn06JHtTT19NSU5PUl9WRVJTSU9OfSAtbm8tdW5kZWZpbmVkCitsaWJ0dXJib2pwZWdfbGFfTERGTEFHUyA9IC1hdm9pZC12ZXJzaW9uIC1uby11bmRlZmluZWQKK2luY2x1ZGVfSEVBREVSUyA9IGplcnJvci5oIGptb3JlY2ZnLmgganBlZ2xpYi5oIHR1cmJvanBlZy5oCitub2Rpc3RfaW5jbHVkZV9IRUFERVJTID0gamNvbmZpZy5oCiAKLSMgU291cmNlcyB0byBidWlsZCBsaWJyYXJ5Ci1MSUJTT1VSQ0VTID0gamFyaWNvbS5jIGpjYXBpbWluLmMgamNhcGlzdGQuYyBqY2FyaXRoLmMgamNjb2VmY3QuYyBqY2NvbG9yLmMgXAotICAgICAgICBqY2RjdG1nci5jIGpjaHVmZi5jIGpjaW5pdC5jIGpjbWFpbmN0LmMgamNtYXJrZXIuYyBqY21hc3Rlci5jIFwKLSAgICAgICAgamNvbWFwaS5jIGpjcGFyYW0uYyBqY3ByZXBjdC5jIGpjc2FtcGxlLmMgamN0cmFucy5jIGpkYXBpbWluLmMgXAotICAgICAgICBqZGFwaXN0ZC5jIGpkYXJpdGguYyBqZGF0YWRzdC5jIGpkYXRhc3JjLmMgamRjb2VmY3QuYyBqZGNvbG9yLmMgXAotICAgICAgICBqZGRjdG1nci5jIGpkaHVmZi5jIGpkaW5wdXQuYyBqZG1haW5jdC5jIGpkbWFya2VyLmMgamRtYXN0ZXIuYyBcCi0gICAgICAgIGpkbWVyZ2UuYyBqZHBvc3RjdC5jIGpkc2FtcGxlLmMgamR0cmFucy5jIGplcnJvci5jIGpmZGN0Zmx0LmMgXAotICAgICAgICBqZmRjdGZzdC5jIGpmZGN0aW50LmMgamlkY3RmbHQuYyBqaWRjdGZzdC5jIGppZGN0aW50LmMganF1YW50MS5jIFwKLSAgICAgICAganF1YW50Mi5jIGp1dGlscy5jIGptZW1tZ3IuYyBATUVNT1JZTUdSQC5jCitIRFJTID0gamNodWZmLmggamRjdC5oIGpkaHVmZi5oIGplcnJvci5oIGppbmNsdWRlLmggam1lbXN5cy5oIGptb3JlY2ZnLmggXAorCWpwZWdpbnQuaCBqcGVnbGliLmgganZlcnNpb24uaCBqc2ltZC5oIGpzaW1kZGN0LmgganBlZ2NvbXAuaAogCi0jIFN5c3RlbSBkZXBlbmRlbnQgc291cmNlcwotU1lTREVQU09VUkNFUyA9IGptZW1hbnNpLmMgam1lbW5hbWUuYyBqbWVtbm9icy5jIGptZW1kb3MuYyBqbWVtbWFjLmMKK2xpYmpwZWdfbGFfU09VUkNFUyA9ICQoSERSUykgamNhcGltaW4uYyBqY2FwaXN0ZC5jIGpjY29lZmN0LmMgamNjb2xvci5jIFwKKwlqY2RjdG1nci5jIGpjaHVmZi5jIGpjaW5pdC5jIGpjbWFpbmN0LmMgamNtYXJrZXIuYyBqY21hc3Rlci5jIFwKKwlqY29tYXBpLmMgamNwYXJhbS5jIGpjcGh1ZmYuYyBqY3ByZXBjdC5jIGpjc2FtcGxlLmMgamN0cmFucy5jIFwKKwlqZGFwaW1pbi5jIGpkYXBpc3RkLmMgamRhdGFkc3QuYyBqZGF0YXNyYy5jIGpkY29lZmN0LmMgamRjb2xvci5jIFwKKwlqZGRjdG1nci5jIGpkaHVmZi5jIGpkaW5wdXQuYyBqZG1haW5jdC5jIGpkbWFya2VyLmMgamRtYXN0ZXIuYyBcCisJamRtZXJnZS5jIGpkcGh1ZmYuYyBqZHBvc3RjdC5jIGpkc2FtcGxlLmMgamR0cmFucy5jIGplcnJvci5jIFwKKwlqZmRjdGZsdC5jIGpmZGN0ZnN0LmMgamZkY3RpbnQuYyBqaWRjdGZsdC5jIGppZGN0ZnN0LmMgamlkY3RpbnQuYyBcCisJamlkY3RyZWQuYyBqcXVhbnQxLmMganF1YW50Mi5jIGp1dGlscy5jIGptZW1tZ3IuYyBqbWVtbm9icy5jCiAKLSMgSGVhZGVycyB3aGljaCBhcmUgaW5zdGFsbGVkIHRvIHN1cHBvcnQgdGhlIGxpYnJhcnkKLUlOU1RJTkNMVURFUyAgPSBqZXJyb3IuaCBqbW9yZWNmZy5oIGpwZWdsaWIuaAoraWYgV0lUSF9BUklUSAogCi0jIEhlYWRlcnMgd2hpY2ggYXJlIG5vdCBpbnN0YWxsZWQKLU9USEVSSU5DTFVERVMgPSBjZGVycm9yLmggY2RqcGVnLmggamRjdC5oIGppbmNsdWRlLmggam1lbXN5cy5oIGpwZWdpbnQuaCBcCi0gICAgICAgIGp2ZXJzaW9uLmggdHJhbnN1cHAuaAorbGlianBlZ19sYV9TT1VSQ0VTICs9IGphcmljb20uYwogCi0jIE1hbnVhbCBwYWdlcyAoQXV0b21ha2UgdXNlcyAnTUFOUycgZm9yIGl0c2VsZikKLURJU1RNQU5TPSBjanBlZy4xIGRqcGVnLjEganBlZ3RyYW4uMSByZGpwZ2NvbS4xIHdyanBnY29tLjEKLQotIyBPdGhlciBkb2N1bWVudGF0aW9uIGZpbGVzCi1ET0NTPSBSRUFETUUgaW5zdGFsbC50eHQgdXNhZ2UudHh0IHdpemFyZC50eHQgZXhhbXBsZS5jIGxpYmpwZWcudHh0IFwKLSAgICAgICAgc3RydWN0dXJlLnR4dCBjb2RlcnVsZXMudHh0IGZpbGVsaXN0LnR4dCBjaGFuZ2UubG9nCi0KLSMgTWFrZWZpbGVzIGZvciB2YXJpb3VzIHN5c3RlbXMKLU1LRklMRVM9IGNvbmZpZ3VyZSBNYWtlZmlsZS5pbiBtYWtlZmlsZS5hbnNpIG1ha2VmaWxlLnVuaXggbWFrZWZpbGUuYmNjIFwKLSAgICAgICAgbWFrZWZpbGUubWM2IG1ha2VmaWxlLmRqIG1ha2VmaWxlLndhdCBtYWtlZmlsZS52YyBtYWtlamRzdy52YzYgXAotICAgICAgICBtYWtlYWRzdy52YzYgbWFrZWpkZXAudmM2IG1ha2VqZHNwLnZjNiBtYWtlam1hay52YzYgbWFrZWNkZXAudmM2IFwKLSAgICAgICAgbWFrZWNkc3AudmM2IG1ha2VjbWFrLnZjNiBtYWtlZGRlcC52YzYgbWFrZWRkc3AudmM2IG1ha2VkbWFrLnZjNiBcCi0gICAgICAgIG1ha2V0ZGVwLnZjNiBtYWtldGRzcC52YzYgbWFrZXRtYWsudmM2IG1ha2VyZGVwLnZjNiBtYWtlcmRzcC52YzYgXAotICAgICAgICBtYWtlcm1hay52YzYgbWFrZXdkZXAudmM2IG1ha2V3ZHNwLnZjNiBtYWtld21hay52YzYgbWFrZWpzbG4udjEwIFwKLSAgICAgICAgbWFrZWFzbG4udjEwIG1ha2VqdmN4LnYxMCBtYWtlamZpbC52MTAgbWFrZWN2Y3gudjEwIG1ha2VjZmlsLnYxMCBcCi0gICAgICAgIG1ha2VkdmN4LnYxMCBtYWtlZGZpbC52MTAgbWFrZXR2Y3gudjEwIG1ha2V0ZmlsLnYxMCBtYWtlcnZjeC52MTAgXAotICAgICAgICBtYWtlcmZpbC52MTAgbWFrZXd2Y3gudjEwIG1ha2V3ZmlsLnYxMCBtYWtlcHJvai5tYWMgbWFrY2pwZWcuc3QgXAotICAgICAgICBtYWtkanBlZy5zdCBtYWtsanBlZy5zdCBtYWt0anBlZy5zdCBtYWtlZmlsZS5tYW54IG1ha2VmaWxlLnNhcyBcCi0gICAgICAgIG1ha2VmaWxlLm1tcyBtYWtlZmlsZS52bXMgbWFrdm1zLm9wdAotCi0jIENvbmZpZ3VyYXRpb24gZmlsZXMKLUNPTkZJR0ZJTEVTPSBqY29uZmlnLmNmZyBqY29uZmlnLmJjYyBqY29uZmlnLm1jNiBqY29uZmlnLmRqIGpjb25maWcud2F0IFwKLSAgICAgICAgamNvbmZpZy52YyBqY29uZmlnLm1hYyBqY29uZmlnLnN0IGpjb25maWcubWFueCBqY29uZmlnLnNhcyBcCi0gICAgICAgIGpjb25maWcudm1zCi0KLSMgU3VwcG9ydCBzY3JpcHRzIGZvciBjb25maWd1cmUKLUNPTkZJR1VSRUZJTEVTPSBjb25maWcuZ3Vlc3MgY29uZmlnLnN1YiBpbnN0YWxsLXNoIGx0bWFpbi5zaCBkZXBjb21wIG1pc3NpbmcKLQotIyBNaXNjZWxsYW5lb3VzIHN1cHBvcnQgZmlsZXMKLU9USEVSRklMRVM9IGpjb25maWcudHh0IGNrY29uZmlnLmMgYW5zaTJrbnIuYyBhbnNpMmtuci4xIGptZW1kb3NhLmFzbSBcCi0gICAgICAgIGxpYmpwZWcubWFwCi0KLSMgVGVzdCBzdXBwb3J0IGZpbGVzCi1URVNURklMRVM9IHRlc3RvcmlnLmpwZyB0ZXN0aW1nLnBwbSB0ZXN0aW1nLmJtcCB0ZXN0aW1nLmpwZyB0ZXN0cHJvZy5qcGcgXAotICAgICAgICB0ZXN0aW1ncC5qcGcKLQotIyBsaWJ0b29sIGxpYnJhcmllcyB0byBidWlsZAotbGliX0xUTElCUkFSSUVTID0gbGlianBlZy5sYQotCi0jIExpYnJhcnkgc291cmNlcyBmb3IgbGlianBlZy5sYQotbGlianBlZ19sYV9TT1VSQ0VTID0gJChMSUJTT1VSQ0VTKQotCi0jIExERkxBR1MgZm9yIGxpYmpwZWcubGEKLWxpYmpwZWdfbGFfTERGTEFHUyA9IC1uby11bmRlZmluZWQgXAotICAgICAgICAtdmVyc2lvbi1pbmZvICQoSlBFR19MSUJfVkVSU0lPTikKLQotaWYgSEFWRV9MRF9WRVJTSU9OX1NDUklQVAotICBsaWJqcGVnX2xhX0xERkxBR1MgKz0gLVdsLC0tdmVyc2lvbi1zY3JpcHQ9JChzcmNkaXIpL2xpYmpwZWcubWFwCiBlbmRpZgogCi0jIEV4ZWN1dGFibGVzIHRvIGJ1aWxkCi1iaW5fUFJPR1JBTVMgPSBjanBlZyBkanBlZyBqcGVndHJhbiByZGpwZ2NvbSB3cmpwZ2NvbQoraWYgV0lUSF9BUklUSF9FTkMKIAotIyBFeGVjdXRhYmxlIHNvdXJjZXMgJiBsaWJzCi1janBlZ19TT1VSQ0VTICAgID0gY2pwZWcuYyByZHBwbS5jIHJkZ2lmLmMgcmR0YXJnYS5jIHJkcmxlLmMgcmRibXAuYyBcCi0gICAgICAgIHJkc3dpdGNoLmMgY2RqcGVnLmMKLWNqcGVnX0xEQUREICAgICAgPSBsaWJqcGVnLmxhCi1kanBlZ19TT1VSQ0VTICAgID0gZGpwZWcuYyB3cnBwbS5jIHdyZ2lmLmMgd3J0YXJnYS5jIHdycmxlLmMgd3JibXAuYyBcCi0gICAgICAgIHJkY29sbWFwLmMgY2RqcGVnLmMKLWRqcGVnX0xEQUREICAgICAgPSBsaWJqcGVnLmxhCi1qcGVndHJhbl9TT1VSQ0VTID0ganBlZ3RyYW4uYyByZHN3aXRjaC5jIGNkanBlZy5jIHRyYW5zdXBwLmMKLWpwZWd0cmFuX0xEQUREICAgPSBsaWJqcGVnLmxhCitsaWJqcGVnX2xhX1NPVVJDRVMgKz0gamNhcml0aC5jCisKK2VuZGlmCisKK2lmIFdJVEhfQVJJVEhfREVDCisKK2xpYmpwZWdfbGFfU09VUkNFUyArPSBqZGFyaXRoLmMKKworZW5kaWYKKworbGlidHVyYm9qcGVnX2xhX1NPVVJDRVMgPSAkKGxpYmpwZWdfbGFfU09VUkNFUykgdHVyYm9qcGVnbC5jIHR1cmJvanBlZy5oIFwKKwl0dXJib2pwZWctbWFwZmlsZQorCitpZiBWRVJTSU9OX1NDUklQVAorCitsaWJ0dXJib2pwZWdfbGFfTERGTEFHUyArPSAkKFZFUlNJT05fU0NSSVBUX0ZMQUcpJChzcmNkaXIpL3R1cmJvanBlZy1tYXBmaWxlCitsaWJqcGVnX2xhX0xERkxBR1MgKz0gJChWRVJTSU9OX1NDUklQVF9GTEFHKWxpYmpwZWcubWFwCisKK2VuZGlmCisKK2lmIFdJVEhfU0lNRAorCitTVUJESVJTID0gc2ltZAorbGlianBlZ19sYV9MSUJBREQgPSBzaW1kL2xpYnNpbWQubGEKK2xpYnR1cmJvanBlZ19sYV9MSUJBREQgPSBzaW1kL2xpYnNpbWQubGEKKworZWxzZQorCitsaWJqcGVnX2xhX1NPVVJDRVMgKz0ganNpbWRfbm9uZS5jCisKK2VuZGlmCisKK1RTVEhEUlMgPSBycnV0aWwuaCBycnRpbWVyLmgKKworYmluX1BST0dSQU1TID0gY2pwZWcgZGpwZWcganBlZ3RyYW4gcmRqcGdjb20gd3JqcGdjb20ganBndGVzdAorbm9pbnN0X1BST0dSQU1TID0ganBlZ3V0CisKK2pwZ3Rlc3RfU09VUkNFUyA9ICQoVFNUSERSUykganBndGVzdC5jIGJtcC5oIGJtcC5jCisKK2pwZ3Rlc3RfTERBREQgPSBsaWJ0dXJib2pwZWcubGEgLWxtCisKK2pwZWd1dF9TT1VSQ0VTID0gJChUU1RIRFJTKSBqcGVndXQuYyBibXAuaCBibXAuYworCitqcGVndXRfTERBREQgPSBsaWJ0dXJib2pwZWcubGEKKworY2pwZWdfU09VUkNFUyA9IGNkanBlZy5oIGNkZXJyb3IuaCBjZGpwZWcuYyBjanBlZy5jIHJkYm1wLmMgcmRnaWYuYyBcCisJcmRwcG0uYyByZHN3aXRjaC5jIHJkdGFyZ2EuYyAKKworY2pwZWdfTERBREQgPSBsaWJqcGVnLmxhCisKK2NqcGVnX0NGTEFHUyA9IC1EQk1QX1NVUFBPUlRFRCAtREdJRl9TVVBQT1JURUQgLURQUE1fU1VQUE9SVEVEIFwKKwktRFRBUkdBX1NVUFBPUlRFRAorCitkanBlZ19TT1VSQ0VTID0gY2RqcGVnLmggY2RlcnJvci5oIGNkanBlZy5jIGRqcGVnLmMgcmRjb2xtYXAuYyByZHN3aXRjaC5jIFwKKwl3cmJtcC5jIHdyZ2lmLmMgd3JwcG0uYyB3cnRhcmdhLmMKKworZGpwZWdfTERBREQgPSBsaWJqcGVnLmxhCisKK2RqcGVnX0NGTEFHUyA9IC1EQk1QX1NVUFBPUlRFRCAtREdJRl9TVVBQT1JURUQgLURQUE1fU1VQUE9SVEVEIFwKKwktRFRBUkdBX1NVUFBPUlRFRAorCitqcGVndHJhbl9TT1VSQ0VTID0ganBlZ3RyYW4uYyByZHN3aXRjaC5jIGNkanBlZy5jIHRyYW5zdXBwLmMgdHJhbnN1cHAuaAorCitqcGVndHJhbl9MREFERCA9IGxpYmpwZWcubGEKKwogcmRqcGdjb21fU09VUkNFUyA9IHJkanBnY29tLmMKKworcmRqcGdjb21fTERBREQgPSBsaWJqcGVnLmxhCisKIHdyanBnY29tX1NPVVJDRVMgPSB3cmpwZ2NvbS5jCiAKLSMgTWFudWFsIHBhZ2VzIHRvIGluc3RhbGwKLW1hbl9NQU5TID0gJChESVNUTUFOUykKK3dyanBnY29tX0xEQUREID0gbGlianBlZy5sYQogCi0jIEhlYWRlcnMgdG8gaW5zdGFsbAotaW5jbHVkZV9IRUFERVJTID0gJChJTlNUSU5DTFVERVMpCiAKLSMgT3RoZXIgZGlzdHJpYnV0ZWQgaGVhZGVycwotbm9pbnN0X0hFQURFUlMgPSAkKE9USEVSSU5DTFVERVMpCitkaXN0X21hbjFfTUFOUyA9IGNqcGVnLjEgZGpwZWcuMSBqcGVndHJhbi4xIHJkanBnY29tLjEgd3JqcGdjb20uMQogCi0jIE90aGVyIGRpc3RyaWJ1dGVkIGZpbGVzCi1FWFRSQV9ESVNUID0gICQoRE9DUykgJChESVNUTUFOUykgJChNS0ZJTEVTKSAkKENPTkZJR0ZJTEVTKSAkKFNZU0RFUFNPVVJDRVMpIFwKLSAgICAgICAgJChPVEhFUkZJTEVTKSAkKFRFU1RGSUxFUykKK0RPQ1M9IFJFQURNRSBpbnN0YWxsLnR4dCB1c2FnZS50eHQgd2l6YXJkLnR4dCBleGFtcGxlLmMgbGlianBlZy50eHQgXAorCXN0cnVjdHVyZS50eHQgY29kZXJ1bGVzLnR4dCBmaWxlbGlzdC50eHQgamNvbmZpZy50eHQgY2hhbmdlLmxvZyBcCisJUkVBRE1FLXR1cmJvLnR4dCByZHJsZS5jIHdycmxlLmMgTElDRU5TRS50eHQgTEdQTC50eHQgQlVJTERJTkcudHh0IFwKKwlDaGFuZ2VMb2cudHh0CiAKLSMgRmlsZXMgdG8gYmUgY2xlYW5lZAotQ0xFQU5GSUxFUyA9IHRlc3RvdXQucHBtIHRlc3RvdXQuYm1wIHRlc3RvdXQuanBnIHRlc3RvdXRwLnBwbSB0ZXN0b3V0cC5qcGcgXAotICAgICAgICB0ZXN0b3V0dC5qcGcKK1RFU1RGSUxFUz0gdGVzdG9yaWcuanBnIHRlc3RvcmlnLnBwbSB0ZXN0aW1nLmJtcCB0ZXN0aW1nZmx0LmpwZyBcCisJdGVzdGltZ2ZzdC5qcGcgdGVzdGltZ2ludC5qcGcgdGVzdGltZ3AuanBnIHRlc3RpbWdmbHQucHBtIHRlc3RpbWdmc3QucHBtIFwKKwl0ZXN0aW1naW50LnBwbSB0ZXN0aW1nZmx0LW5vc2ltZC5qcGcgdGVzdGltZ2Nyb3AuanBnIHRlc3RpbWdhcmkuanBnIFwKKwl0ZXN0aW1nYXJpLnBwbSB0ZXN0aW1nZnN0MTAwLmpwZwogCi0jIEluc3RhbGwgamNvbmZpZy5oCi1pbnN0YWxsLWRhdGEtbG9jYWw6Ci0JJChta2luc3RhbGxkaXJzKSAkKERFU1RESVIpJChpbmNsdWRlZGlyKQotCSQoSU5TVEFMTF9IRUFERVIpIGpjb25maWcuaCAkKERFU1RESVIpJChpbmNsdWRlZGlyKS9qY29uZmlnLmgKK0VYVFJBX0RJU1QgPSB3aW4gcmVsZWFzZSAkKERPQ1MpICQoVEVTVEZJTEVTKSBDTWFrZUxpc3RzLnR4dCBcCisJc2hhcmVkbGliL0NNYWtlTGlzdHMudHh0IGNtYWtlc2NyaXB0cyBsaWJqcGVnLm1hcC5pbgogCi0jIFVuaW5zdGFsbCBqY29uZmlnLmgKLXVuaW5zdGFsbC1sb2NhbDoKLQlybSAtZiAkKERFU1RESVIpJChpbmNsdWRlZGlyKS9qY29uZmlnLmgKK2Rpc3QtaG9vazoKKwlybSAtcmYgYGZpbmQgJChkaXN0ZGlyKSAtbmFtZSAuc3ZuYAogCi0jIFJ1biB0ZXN0cwotdGVzdDogY2hlY2stbG9jYWwKLWNoZWNrLWxvY2FsOgotCXJtIC1mIHRlc3RvdXQqCi0JLi9kanBlZyAtZGN0IGludCAtcHBtIC1vdXRmaWxlIHRlc3RvdXQucHBtICAkKHNyY2RpcikvdGVzdG9yaWcuanBnCisKK3Rlc3Q6IHRlc3RjbGVhbiBhbGwKKwkuL2pwZWd1dAorCS4vanBlZ3V0IC15dXYKKwkuL2NqcGVnIC1kY3QgaW50IC1vdXRmaWxlIHRlc3RvdXRpbnQuanBnICQoc3JjZGlyKS90ZXN0b3JpZy5wcG0KKwljbXAgJChzcmNkaXIpL3Rlc3RpbWdpbnQuanBnIHRlc3RvdXRpbnQuanBnCisJLi9janBlZyAtZGN0IGZhc3QgLW9wdCAtb3V0ZmlsZSB0ZXN0b3V0ZnN0LmpwZyAkKHNyY2RpcikvdGVzdG9yaWcucHBtCisJY21wICQoc3JjZGlyKS90ZXN0aW1nZnN0LmpwZyB0ZXN0b3V0ZnN0LmpwZworCS4vY2pwZWcgLWRjdCBmYXN0IC1xdWFsaXR5IDEwMCAtb3B0IC1vdXRmaWxlIHRlc3RvdXRmc3QxMDAuanBnICQoc3JjZGlyKS90ZXN0b3JpZy5wcG0KKwljbXAgJChzcmNkaXIpL3Rlc3RpbWdmc3QxMDAuanBnIHRlc3RvdXRmc3QxMDAuanBnCisJLi9janBlZyAtZGN0IGZsb2F0IC1vdXRmaWxlIHRlc3RvdXRmbHQuanBnICQoc3JjZGlyKS90ZXN0b3JpZy5wcG0KK2lmIFdJVEhfU0lNRAorCWNtcCAkKHNyY2RpcikvdGVzdGltZ2ZsdC5qcGcgdGVzdG91dGZsdC5qcGcKK2Vsc2UKKwljbXAgJChzcmNkaXIpL3Rlc3RpbWdmbHQtbm9zaW1kLmpwZyB0ZXN0b3V0Zmx0LmpwZworZW5kaWYKKwkuL2RqcGVnIC1kY3QgaW50IC1mYXN0IC1wcG0gLW91dGZpbGUgdGVzdG91dGludC5wcG0gJChzcmNkaXIpL3Rlc3RvcmlnLmpwZworCWNtcCAkKHNyY2RpcikvdGVzdGltZ2ludC5wcG0gdGVzdG91dGludC5wcG0KKwkuL2RqcGVnIC1kY3QgZmFzdCAtcHBtIC1vdXRmaWxlIHRlc3RvdXRmc3QucHBtICQoc3JjZGlyKS90ZXN0b3JpZy5qcGcKKwljbXAgJChzcmNkaXIpL3Rlc3RpbWdmc3QucHBtIHRlc3RvdXRmc3QucHBtCisJLi9kanBlZyAtZGN0IGZsb2F0IC1wcG0gLW91dGZpbGUgdGVzdG91dGZsdC5wcG0gJChzcmNkaXIpL3Rlc3RvcmlnLmpwZworaWYgV0lUSF9TSU1ECisJY21wICQoc3JjZGlyKS90ZXN0aW1nZmx0LnBwbSB0ZXN0b3V0Zmx0LnBwbQorZWxzZQorCWNtcCAkKHNyY2RpcikvdGVzdG9yaWcucHBtIHRlc3RvdXRmbHQucHBtCitlbmRpZgogCS4vZGpwZWcgLWRjdCBpbnQgLWJtcCAtY29sb3JzIDI1NiAtb3V0ZmlsZSB0ZXN0b3V0LmJtcCAgJChzcmNkaXIpL3Rlc3RvcmlnLmpwZwotCS4vY2pwZWcgLWRjdCBpbnQgLW91dGZpbGUgdGVzdG91dC5qcGcgICQoc3JjZGlyKS90ZXN0aW1nLnBwbQotCS4vZGpwZWcgLWRjdCBpbnQgLXBwbSAtb3V0ZmlsZSB0ZXN0b3V0cC5wcG0gJChzcmNkaXIpL3Rlc3Rwcm9nLmpwZwotCS4vY2pwZWcgLWRjdCBpbnQgLXByb2dyZXNzaXZlIC1vcHQgLW91dGZpbGUgdGVzdG91dHAuanBnICQoc3JjZGlyKS90ZXN0aW1nLnBwbQotCS4vanBlZ3RyYW4gLW91dGZpbGUgdGVzdG91dHQuanBnICQoc3JjZGlyKS90ZXN0cHJvZy5qcGcKLQljbXAgJChzcmNkaXIpL3Rlc3RpbWcucHBtIHRlc3RvdXQucHBtCiAJY21wICQoc3JjZGlyKS90ZXN0aW1nLmJtcCB0ZXN0b3V0LmJtcAotCWNtcCAkKHNyY2RpcikvdGVzdGltZy5qcGcgdGVzdG91dC5qcGcKLQljbXAgJChzcmNkaXIpL3Rlc3RpbWcucHBtIHRlc3RvdXRwLnBwbQoraWYgV0lUSF9BUklUSF9FTkMKKwkuL2NqcGVnIC1kY3QgaW50IC1hcml0aG1ldGljIC1vdXRmaWxlIHRlc3RvdXRhcmkuanBnICQoc3JjZGlyKS90ZXN0b3JpZy5wcG0KKwljbXAgJChzcmNkaXIpL3Rlc3RpbWdhcmkuanBnIHRlc3RvdXRhcmkuanBnCisJLi9qcGVndHJhbiAtYXJpdGhtZXRpYyAtb3V0ZmlsZSB0ZXN0b3V0YS5qcGcgJChzcmNkaXIpL3Rlc3RpbWdpbnQuanBnCisJY21wICQoc3JjZGlyKS90ZXN0aW1nYXJpLmpwZyB0ZXN0b3V0YS5qcGcKK2VuZGlmCitpZiBXSVRIX0FSSVRIX0RFQworCS4vZGpwZWcgLWRjdCBpbnQgLWZhc3QgLXBwbSAtb3V0ZmlsZSB0ZXN0b3V0YXJpLnBwbSAkKHNyY2RpcikvdGVzdGltZ2FyaS5qcGcKKwljbXAgJChzcmNkaXIpL3Rlc3RpbWdhcmkucHBtIHRlc3RvdXRhcmkucHBtCisJLi9qcGVndHJhbiAtb3V0ZmlsZSB0ZXN0b3V0YS5qcGcgJChzcmNkaXIpL3Rlc3RpbWdhcmkuanBnCisJY21wICQoc3JjZGlyKS90ZXN0aW1naW50LmpwZyB0ZXN0b3V0YS5qcGcKK2VuZGlmCisJLi9janBlZyAtZGN0IGludCAtcHJvZ3Jlc3NpdmUgLW91dGZpbGUgdGVzdG91dHAuanBnICQoc3JjZGlyKS90ZXN0b3JpZy5wcG0KIAljbXAgJChzcmNkaXIpL3Rlc3RpbWdwLmpwZyB0ZXN0b3V0cC5qcGcKLQljbXAgJChzcmNkaXIpL3Rlc3RvcmlnLmpwZyB0ZXN0b3V0dC5qcGcKKwkuL2pwZWd0cmFuIC1vdXRmaWxlIHRlc3RvdXR0LmpwZyB0ZXN0b3V0cC5qcGcKKwljbXAgJChzcmNkaXIpL3Rlc3RpbWdpbnQuanBnIHRlc3RvdXR0LmpwZworCS4vanBlZ3RyYW4gLWNyb3AgMTIweDkwKzIwKzUwIC10cmFuc3Bvc2UgLXBlcmZlY3QgLW91dGZpbGUgdGVzdG91dGNyb3AuanBnICQoc3JjZGlyKS90ZXN0b3JpZy5qcGcKKwljbXAgJChzcmNkaXIpL3Rlc3RpbWdjcm9wLmpwZyB0ZXN0b3V0Y3JvcC5qcGcKKworCit0ZXN0Y2xlYW46CisJcm0gLWYgdGVzdG91dCoKKwlybSAtZiAqX0dSQVlRWzAtOV0qLmJtcAorCXJtIC1mICpfR1JBWVFbMC05XSoucHBtCisJcm0gLWYgKl9HUkFZUVswLTldKi5qcGcKKwlybSAtZiAqX0dSQVkueXV2CisJcm0gLWYgKl80MjBRWzAtOV0qLmJtcAorCXJtIC1mICpfNDIwUVswLTldKi5wcG0KKwlybSAtZiAqXzQyMFFbMC05XSouanBnCisJcm0gLWYgKl80MjAueXV2CisJcm0gLWYgKl80MjJRWzAtOV0qLmJtcAorCXJtIC1mICpfNDIyUVswLTldKi5wcG0KKwlybSAtZiAqXzQyMlFbMC05XSouanBnCisJcm0gLWYgKl80MjIueXV2CisJcm0gLWYgKl80NDRRWzAtOV0qLmJtcAorCXJtIC1mICpfNDQ0UVswLTldKi5wcG0KKwlybSAtZiAqXzQ0NFFbMC05XSouanBnCisJcm0gLWYgKl80NDQueXV2CisKK2lmIFg4Nl82NAorCitpbnN0YWxsLWV4ZWMtaG9vazoKKwlfX1BSRUZJWD1gZWNobyAke3ByZWZpeH0gfCBzZWQgLWUgJ3NAXC8qJCRAQCdgOyAgXAorCWlmIFsgIiQkX19QUkVGSVgiID0gIi9vcHQvbGlianBlZy10dXJibyIgXTsgdGhlbiAgXAorCQljZCAkKERFU1RESVIpLyR7cHJlZml4fTsgIFwKKwkJaWYgWyAtZCBsaWIgLWEgISAtZCBsaWI2NCAtYSAhIC1oIGxpYjY0IF07IHRoZW4gIFwKKwkJCSQoTE5fUykgbGliIGxpYjY0OyAgXAorCQlmaSAgXAorCWZpCisKK2Vsc2UKKworaW5zdGFsbC1leGVjLWhvb2s6CisJX19QUkVGSVg9YGVjaG8gJHtwcmVmaXh9IHwgc2VkIC1lICdzQFwvKiQkQEAnYDsgIFwKKwlpZiBbICIkJF9fUFJFRklYIiA9ICIvb3B0L2xpYmpwZWctdHVyYm8iIF07IHRoZW4gIFwKKwkJY2QgJChERVNURElSKS8ke3ByZWZpeH07ICBcCisJCWlmIFsgLWQgbGliIC1hICEgLWQgbGliMzIgLWEgISAtaCBsaWIzMiBdOyB0aGVuICBcCisJCQkkKExOX1MpIGxpYiBsaWIzMjsgIFwKKwkJZmkgIFwKKwlmaQorCitlbmRpZgorCitycG06IGFsbAorCVRNUERJUj1gbWt0ZW1wIC1kIC90bXAvJHtQQUNLQUdFX05BTUV9LWJ1aWxkLlhYWFhYWGA7IFwKKwlta2RpciAtcCAkJFRNUERJUi9SUE1TOyBcCisJbG4gLWZzIGBwd2RgICQkVE1QRElSL0JVSUxEOyBcCisJcm0gLWYgJHtQQUNLQUdFX05BTUV9LSR7VkVSU0lPTn0uJHtSUE1BUkNIfS5ycG07IFwKKwlycG1idWlsZCAtYmIgLS1kZWZpbmUgIl9ibGRkaXIgJCRUTVBESVIvYnVpbGRyb290IiAgXAorCQktLWRlZmluZSAiX3RvcGRpciAkJFRNUERJUiIgLS1kZWZpbmUgIl9zcmNkaXIgJHtzcmNkaXJ9IiBcCisJCS0tdGFyZ2V0ICR7UlBNQVJDSH0gcGtnc2NyaXB0cy9saWJqcGVnLXR1cmJvLnNwZWM7IFwKKwljcCAkJFRNUERJUi9SUE1TLyR7UlBNQVJDSH0vJHtQQUNLQUdFX05BTUV9LSR7VkVSU0lPTn0tJHtCVUlMRH0uJHtSUE1BUkNIfS5ycG0gXAorCQkke1BBQ0tBR0VfTkFNRX0tJHtWRVJTSU9OfS4ke1JQTUFSQ0h9LnJwbTsgXAorCXJtIC1yZiAkJFRNUERJUgorCitzcnBtOiBkaXN0LWd6aXAKKwlUTVBESVI9YG1rdGVtcCAtZCAvdG1wLyR7UEFDS0FHRV9OQU1FfS1idWlsZC5YWFhYWFhgOyBcCisJbWtkaXIgLXAgJCRUTVBESVIvUlBNUzsgXAorCW1rZGlyIC1wICQkVE1QRElSL1NSUE1TOyBcCisJbWtkaXIgLXAgJCRUTVBESVIvQlVJTEQ7IFwKKwlta2RpciAtcCAkJFRNUERJUi9TT1VSQ0VTOyBcCisJbWtkaXIgLXAgJCRUTVBESVIvU1BFQ1M7IFwKKwlybSAtZiAke1BBQ0tBR0VfTkFNRX0tJHtWRVJTSU9OfS5zcmMucnBtOyBcCisJY3AgJHtQQUNLQUdFX05BTUV9LSR7VkVSU0lPTn0udGFyLmd6ICQkVE1QRElSL1NPVVJDRVM7IFwKKwljYXQgcGtnc2NyaXB0cy9saWJqcGVnLXR1cmJvLnNwZWMgfCBzZWQgcy8le19ibGRkaXJ9LyV7X3RtcHBhdGh9L2cgXAorCQl8IHNlZCBzQCV7X3NyY2Rpcn0vQEBnIHwgc2VkIHMvIy0tXD4vL2cgXAorCQk+ICQkVE1QRElSL1NQRUNTL2xpYmpwZWctdHVyYm8uc3BlYzsgXAorCXJwbWJ1aWxkIC1icyAtLWRlZmluZSAiX3RvcGRpciAkJFRNUERJUiIgJCRUTVBESVIvU1BFQ1MvbGlianBlZy10dXJiby5zcGVjOyBcCisJY3AgJCRUTVBESVIvU1JQTVMvJHtQQUNLQUdFX05BTUV9LSR7VkVSU0lPTn0tJHtCVUlMRH0uc3JjLnJwbSBcCisJCSR7UEFDS0FHRV9OQU1FfS0ke1ZFUlNJT059LnNyYy5ycG07IFwKKwlybSAtcmYgJCRUTVBESVIKKworZGViOiBhbGwKKwlzaCBwa2dzY3JpcHRzL21ha2VkcGtnCisKK2lmIFg4Nl82NAorCit1ZG1nOiBhbGwKKwlzaCBwa2dzY3JpcHRzL21ha2VtYWNwa2cgdW5pdmVyc2FsICR7QlVJTERESVIzMn0KKworZW5kaWYKKworZG1nOiBhbGwKKwlzaCBwa2dzY3JpcHRzL21ha2VtYWNwa2cKKworaWYgWDg2XzY0CisKK2NzdW5wa2c6IGFsbAorCXNoIHBrZ3NjcmlwdHMvbWFrZXN1bnBrZyBjb21iaW5lZCAke0JVSUxERElSMzJ9CisKK2VuZGlmCisKK3N1bnBrZzogYWxsCisJc2ggcGtnc2NyaXB0cy9tYWtlc3VucGtnCisKK2N5Z3dpbnBrZzogYWxsCisJc2ggcGtnc2NyaXB0cy9tYWtlY3lnd2lucGtnCmRpZmYgLS1naXQgYS9NYWtlZmlsZS5pbiBiL01ha2VmaWxlLmluCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5MjAzMzU5Li4wMDAwMDAwCi0tLSBhL01ha2VmaWxlLmluCisrKyAvZGV2L251bGwKQEAgLTEsMTA5MiArMCwwIEBACi0jIE1ha2VmaWxlLmluIGdlbmVyYXRlZCBieSBhdXRvbWFrZSAxLjExLjEgZnJvbSBNYWtlZmlsZS5hbS4KLSMgQGNvbmZpZ3VyZV9pbnB1dEAKLQotIyBDb3B5cmlnaHQgKEMpIDE5OTQsIDE5OTUsIDE5OTYsIDE5OTcsIDE5OTgsIDE5OTksIDIwMDAsIDIwMDEsIDIwMDIsCi0jIDIwMDMsIDIwMDQsIDIwMDUsIDIwMDYsIDIwMDcsIDIwMDgsIDIwMDkgIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwKLSMgSW5jLgotIyBUaGlzIE1ha2VmaWxlLmluIGlzIGZyZWUgc29mdHdhcmU7IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24KLSMgZ2l2ZXMgdW5saW1pdGVkIHBlcm1pc3Npb24gdG8gY29weSBhbmQvb3IgZGlzdHJpYnV0ZSBpdCwKLSMgd2l0aCBvciB3aXRob3V0IG1vZGlmaWNhdGlvbnMsIGFzIGxvbmcgYXMgdGhpcyBub3RpY2UgaXMgcHJlc2VydmVkLgotCi0jIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotIyBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFksIHRvIHRoZSBleHRlbnQgcGVybWl0dGVkIGJ5IGxhdzsgd2l0aG91dAotIyBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBCi0jIFBBUlRJQ1VMQVIgUFVSUE9TRS4KLQotQFNFVF9NQUtFQAotCi0jCi0jICBBdXRvbWFrZSBNYWtlZmlsZSBmb3IgdGhlIEpQRUcgbGlicmFyeQotIwotIyAgVGhpcyBmaWxlIGlzIHdyaXR0ZW4gYnkgQm9iIEZyaWVzZW5oYWhuLCBHdWlkbyBWb2xsYmVkaW5nCi0jCi0KLQotCi1WUEFUSCA9IEBzcmNkaXJACi1wa2dkYXRhZGlyID0gJChkYXRhZGlyKS9AUEFDS0FHRUAKLXBrZ2luY2x1ZGVkaXIgPSAkKGluY2x1ZGVkaXIpL0BQQUNLQUdFQAotcGtnbGliZGlyID0gJChsaWJkaXIpL0BQQUNLQUdFQAotcGtnbGliZXhlY2RpciA9ICQobGliZXhlY2RpcikvQFBBQ0tBR0VACi1hbV9fY2QgPSBDRFBBVEg9IiQke1pTSF9WRVJTSU9OKy59JChQQVRIX1NFUEFSQVRPUikiICYmIGNkCi1pbnN0YWxsX3NoX0RBVEEgPSAkKGluc3RhbGxfc2gpIC1jIC1tIDY0NAotaW5zdGFsbF9zaF9QUk9HUkFNID0gJChpbnN0YWxsX3NoKSAtYwotaW5zdGFsbF9zaF9TQ1JJUFQgPSAkKGluc3RhbGxfc2gpIC1jCi1JTlNUQUxMX0hFQURFUiA9ICQoSU5TVEFMTF9EQVRBKQotdHJhbnNmb3JtID0gJChwcm9ncmFtX3RyYW5zZm9ybV9uYW1lKQotTk9STUFMX0lOU1RBTEwgPSA6Ci1QUkVfSU5TVEFMTCA9IDoKLVBPU1RfSU5TVEFMTCA9IDoKLU5PUk1BTF9VTklOU1RBTEwgPSA6Ci1QUkVfVU5JTlNUQUxMID0gOgotUE9TVF9VTklOU1RBTEwgPSA6Ci1idWlsZF90cmlwbGV0ID0gQGJ1aWxkQAotaG9zdF90cmlwbGV0ID0gQGhvc3RACi10YXJnZXRfdHJpcGxldCA9IEB0YXJnZXRACi1BTlNJMktOUiA9IEBBTlNJMktOUkAKLUBIQVZFX0xEX1ZFUlNJT05fU0NSSVBUX1RSVUVAYW1fX2FwcGVuZF8xID0gLVdsLC0tdmVyc2lvbi1zY3JpcHQ9JChzcmNkaXIpL2xpYmpwZWcubWFwCi1iaW5fUFJPR1JBTVMgPSBjanBlZyQoRVhFRVhUKSBkanBlZyQoRVhFRVhUKSBqcGVndHJhbiQoRVhFRVhUKSBcCi0JcmRqcGdjb20kKEVYRUVYVCkgd3JqcGdjb20kKEVYRUVYVCkKLXN1YmRpciA9IC4KLURJU1RfQ09NTU9OID0gUkVBRE1FICQoc3JjZGlyKS9NYWtlZmlsZS5pbiAkKHNyY2RpcikvTWFrZWZpbGUuYW0gXAotCSQodG9wX3NyY2RpcikvY29uZmlndXJlICQoYW1fX2NvbmZpZ3VyZV9kZXBzKSBcCi0JJChzcmNkaXIpL2pjb25maWcuY2ZnIGFuc2kya25yLmMgYW5zaTJrbnIuMSBkZXBjb21wIFwKLQkkKGluY2x1ZGVfSEVBREVSUykgJChub2luc3RfSEVBREVSUykKLUFDTE9DQUxfTTQgPSAkKHRvcF9zcmNkaXIpL2FjbG9jYWwubTQKLWFtX19hY2xvY2FsX200X2RlcHMgPSAkKHRvcF9zcmNkaXIpL2NvbmZpZ3VyZS5hYwotYW1fX2NvbmZpZ3VyZV9kZXBzID0gJChhbV9fYWNsb2NhbF9tNF9kZXBzKSAkKENPTkZJR1VSRV9ERVBFTkRFTkNJRVMpIFwKLQkkKEFDTE9DQUxfTTQpCi1hbV9fQ09ORklHX0RJU1RDTEVBTl9GSUxFUyA9IGNvbmZpZy5zdGF0dXMgY29uZmlnLmNhY2hlIGNvbmZpZy5sb2cgXAotIGNvbmZpZ3VyZS5saW5lbm8gY29uZmlnLnN0YXR1cy5saW5lbm8KLW1raW5zdGFsbGRpcnMgPSAkKGluc3RhbGxfc2gpIC1kCi1DT05GSUdfSEVBREVSID0gamNvbmZpZy5oCi1DT05GSUdfQ0xFQU5fRklMRVMgPQotQ09ORklHX0NMRUFOX1ZQQVRIX0ZJTEVTID0KLWFtX192cGF0aF9hZGpfc2V0dXAgPSBzcmNkaXJzdHJpcD1gZWNobyAiJChzcmNkaXIpIiB8IHNlZCAnc3wufC58ZydgOwotYW1fX3ZwYXRoX2FkaiA9IGNhc2UgJCRwIGluIFwKLSAgICAkKHNyY2RpcikvKikgZj1gZWNobyAiJCRwIiB8IHNlZCAic3xeJCRzcmNkaXJzdHJpcC98fCJgOzsgXAotICAgICopIGY9JCRwOzsgXAotICBlc2FjOwotYW1fX3N0cmlwX2RpciA9IGY9YGVjaG8gJCRwIHwgc2VkIC1lICdzfF4uKi98fCdgOwotYW1fX2luc3RhbGxfbWF4ID0gNDAKLWFtX19ub2Jhc2Vfc3RyaXBfc2V0dXAgPSBcCi0gIHNyY2RpcnN0cmlwPWBlY2hvICIkKHNyY2RpcikiIHwgc2VkICdzL1tdLlteJCRcXCp8XS9cXFxcJi9nJ2AKLWFtX19ub2Jhc2Vfc3RyaXAgPSBcCi0gIGZvciBwIGluICQkbGlzdDsgZG8gZWNobyAiJCRwIjsgZG9uZSB8IHNlZCAtZSAic3wkJHNyY2RpcnN0cmlwL3x8IgotYW1fX25vYmFzZV9saXN0ID0gJChhbV9fbm9iYXNlX3N0cmlwX3NldHVwKTsgXAotICBmb3IgcCBpbiAkJGxpc3Q7IGRvIGVjaG8gIiQkcCAkJHAiOyBkb25lIHwgXAotICBzZWQgInN8ICQkc3JjZGlyc3RyaXAvfCB8OyInIC8gLipcLy8hcy8gLiovIC4vOyBzLFwoIC4qXCkvW14vXSokJCxcMSwnIHwgXAotICAkKEFXSykgJ0JFR0lOIHsgZmlsZXNbIi4iXSA9ICIiIH0geyBmaWxlc1skJDJdID0gZmlsZXNbJCQyXSAiICIgJCQxOyBcCi0gICAgaWYgKCsrblskJDJdID09ICQoYW1fX2luc3RhbGxfbWF4KSkgXAotICAgICAgeyBwcmludCAkJDIsIGZpbGVzWyQkMl07IG5bJCQyXSA9IDA7IGZpbGVzWyQkMl0gPSAiIiB9IH0gXAotICAgIEVORCB7IGZvciAoZGlyIGluIGZpbGVzKSBwcmludCBkaXIsIGZpbGVzW2Rpcl0gfScKLWFtX19iYXNlX2xpc3QgPSBcCi0gIHNlZCAnJCQhTjskJCFOOyQkIU47JCQhTjskJCFOOyQkIU47JCQhTjtzL1xuLyAvZycgfCBcCi0gIHNlZCAnJCQhTjskJCFOOyQkIU47JCQhTjtzL1xuLyAvZycKLWFtX19pbnN0YWxsZGlycyA9ICIkKERFU1RESVIpJChsaWJkaXIpIiAiJChERVNURElSKSQoYmluZGlyKSIgXAotCSIkKERFU1RESVIpJChtYW4xZGlyKSIgIiQoREVTVERJUikkKGluY2x1ZGVkaXIpIgotTFRMSUJSQVJJRVMgPSAkKGxpYl9MVExJQlJBUklFUykKLWxpYmpwZWdfbGFfTElCQUREID0KLWFtX19vYmplY3RzXzEgPSBqYXJpY29tJFUubG8gamNhcGltaW4kVS5sbyBqY2FwaXN0ZCRVLmxvIGpjYXJpdGgkVS5sbyBcCi0JamNjb2VmY3QkVS5sbyBqY2NvbG9yJFUubG8gamNkY3RtZ3IkVS5sbyBqY2h1ZmYkVS5sbyBcCi0JamNpbml0JFUubG8gamNtYWluY3QkVS5sbyBqY21hcmtlciRVLmxvIGpjbWFzdGVyJFUubG8gXAotCWpjb21hcGkkVS5sbyBqY3BhcmFtJFUubG8gamNwcmVwY3QkVS5sbyBqY3NhbXBsZSRVLmxvIFwKLQlqY3RyYW5zJFUubG8gamRhcGltaW4kVS5sbyBqZGFwaXN0ZCRVLmxvIGpkYXJpdGgkVS5sbyBcCi0JamRhdGFkc3QkVS5sbyBqZGF0YXNyYyRVLmxvIGpkY29lZmN0JFUubG8gamRjb2xvciRVLmxvIFwKLQlqZGRjdG1nciRVLmxvIGpkaHVmZiRVLmxvIGpkaW5wdXQkVS5sbyBqZG1haW5jdCRVLmxvIFwKLQlqZG1hcmtlciRVLmxvIGpkbWFzdGVyJFUubG8gamRtZXJnZSRVLmxvIGpkcG9zdGN0JFUubG8gXAotCWpkc2FtcGxlJFUubG8gamR0cmFucyRVLmxvIGplcnJvciRVLmxvIGpmZGN0Zmx0JFUubG8gXAotCWpmZGN0ZnN0JFUubG8gamZkY3RpbnQkVS5sbyBqaWRjdGZsdCRVLmxvIGppZGN0ZnN0JFUubG8gXAotCWppZGN0aW50JFUubG8ganF1YW50MSRVLmxvIGpxdWFudDIkVS5sbyBqdXRpbHMkVS5sbyBcCi0Jam1lbW1nciRVLmxvIEBNRU1PUllNR1JAJFUubG8KLWFtX2xpYmpwZWdfbGFfT0JKRUNUUyA9ICQoYW1fX29iamVjdHNfMSkKLWxpYmpwZWdfbGFfT0JKRUNUUyA9ICQoYW1fbGlianBlZ19sYV9PQkpFQ1RTKQotQU1fVl9sdCA9ICQoYW1fX3ZfbHRfJChWKSkKLWFtX192X2x0XyA9ICQoYW1fX3ZfbHRfJChBTV9ERUZBVUxUX1ZFUkJPU0lUWSkpCi1hbV9fdl9sdF8wID0gLS1zaWxlbnQKLWxpYmpwZWdfbGFfTElOSyA9ICQoTElCVE9PTCkgJChBTV9WX2x0KSAtLXRhZz1DQyAkKEFNX0xJQlRPT0xGTEFHUykgXAotCSQoTElCVE9PTEZMQUdTKSAtLW1vZGU9bGluayAkKENDTEQpICQoQU1fQ0ZMQUdTKSAkKENGTEFHUykgXAotCSQobGlianBlZ19sYV9MREZMQUdTKSAkKExERkxBR1MpIC1vICRACi1QUk9HUkFNUyA9ICQoYmluX1BST0dSQU1TKQotYW1fY2pwZWdfT0JKRUNUUyA9IGNqcGVnJFUuJChPQkpFWFQpIHJkcHBtJFUuJChPQkpFWFQpIFwKLQlyZGdpZiRVLiQoT0JKRVhUKSByZHRhcmdhJFUuJChPQkpFWFQpIHJkcmxlJFUuJChPQkpFWFQpIFwKLQlyZGJtcCRVLiQoT0JKRVhUKSByZHN3aXRjaCRVLiQoT0JKRVhUKSBjZGpwZWckVS4kKE9CSkVYVCkKLWNqcGVnX09CSkVDVFMgPSAkKGFtX2NqcGVnX09CSkVDVFMpCi1janBlZ19ERVBFTkRFTkNJRVMgPSBsaWJqcGVnLmxhCi1hbV9kanBlZ19PQkpFQ1RTID0gZGpwZWckVS4kKE9CSkVYVCkgd3JwcG0kVS4kKE9CSkVYVCkgXAotCXdyZ2lmJFUuJChPQkpFWFQpIHdydGFyZ2EkVS4kKE9CSkVYVCkgd3JybGUkVS4kKE9CSkVYVCkgXAotCXdyYm1wJFUuJChPQkpFWFQpIHJkY29sbWFwJFUuJChPQkpFWFQpIGNkanBlZyRVLiQoT0JKRVhUKQotZGpwZWdfT0JKRUNUUyA9ICQoYW1fZGpwZWdfT0JKRUNUUykKLWRqcGVnX0RFUEVOREVOQ0lFUyA9IGxpYmpwZWcubGEKLWFtX2pwZWd0cmFuX09CSkVDVFMgPSBqcGVndHJhbiRVLiQoT0JKRVhUKSByZHN3aXRjaCRVLiQoT0JKRVhUKSBcCi0JY2RqcGVnJFUuJChPQkpFWFQpIHRyYW5zdXBwJFUuJChPQkpFWFQpCi1qcGVndHJhbl9PQkpFQ1RTID0gJChhbV9qcGVndHJhbl9PQkpFQ1RTKQotanBlZ3RyYW5fREVQRU5ERU5DSUVTID0gbGlianBlZy5sYQotYW1fcmRqcGdjb21fT0JKRUNUUyA9IHJkanBnY29tJFUuJChPQkpFWFQpCi1yZGpwZ2NvbV9PQkpFQ1RTID0gJChhbV9yZGpwZ2NvbV9PQkpFQ1RTKQotcmRqcGdjb21fTERBREQgPSAkKExEQUREKQotYW1fd3JqcGdjb21fT0JKRUNUUyA9IHdyanBnY29tJFUuJChPQkpFWFQpCi13cmpwZ2NvbV9PQkpFQ1RTID0gJChhbV93cmpwZ2NvbV9PQkpFQ1RTKQotd3JqcGdjb21fTERBREQgPSAkKExEQUREKQotREVGQVVMVF9JTkNMVURFUyA9IC1JLkBhbV9faXNyY0AKLWRlcGNvbXAgPSAkKFNIRUxMKSAkKHRvcF9zcmNkaXIpL2RlcGNvbXAKLWFtX19kZXBmaWxlc19tYXliZSA9IGRlcGZpbGVzCi1hbV9fbXYgPSBtdiAtZgotQ09NUElMRSA9ICQoQ0MpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKEFNX0NQUEZMQUdTKSBcCi0JJChDUFBGTEFHUykgJChBTV9DRkxBR1MpICQoQ0ZMQUdTKQotTFRDT01QSUxFID0gJChMSUJUT09MKSAkKEFNX1ZfbHQpIC0tdGFnPUNDICQoQU1fTElCVE9PTEZMQUdTKSBcCi0JJChMSUJUT09MRkxBR1MpIC0tbW9kZT1jb21waWxlICQoQ0MpICQoREVGUykgXAotCSQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChBTV9DUFBGTEFHUykgJChDUFBGTEFHUykgXAotCSQoQU1fQ0ZMQUdTKSAkKENGTEFHUykKLUFNX1ZfQ0MgPSAkKGFtX192X0NDXyQoVikpCi1hbV9fdl9DQ18gPSAkKGFtX192X0NDXyQoQU1fREVGQVVMVF9WRVJCT1NJVFkpKQotYW1fX3ZfQ0NfMCA9IEBlY2hvICIgIENDICAgICIgJEA7Ci1BTV9WX2F0ID0gJChhbV9fdl9hdF8kKFYpKQotYW1fX3ZfYXRfID0gJChhbV9fdl9hdF8kKEFNX0RFRkFVTFRfVkVSQk9TSVRZKSkKLWFtX192X2F0XzAgPSBACi1DQ0xEID0gJChDQykKLUxJTksgPSAkKExJQlRPT0wpICQoQU1fVl9sdCkgLS10YWc9Q0MgJChBTV9MSUJUT09MRkxBR1MpIFwKLQkkKExJQlRPT0xGTEFHUykgLS1tb2RlPWxpbmsgJChDQ0xEKSAkKEFNX0NGTEFHUykgJChDRkxBR1MpIFwKLQkkKEFNX0xERkxBR1MpICQoTERGTEFHUykgLW8gJEAKLUFNX1ZfQ0NMRCA9ICQoYW1fX3ZfQ0NMRF8kKFYpKQotYW1fX3ZfQ0NMRF8gPSAkKGFtX192X0NDTERfJChBTV9ERUZBVUxUX1ZFUkJPU0lUWSkpCi1hbV9fdl9DQ0xEXzAgPSBAZWNobyAiICBDQ0xEICAiICRAOwotQU1fVl9HRU4gPSAkKGFtX192X0dFTl8kKFYpKQotYW1fX3ZfR0VOXyA9ICQoYW1fX3ZfR0VOXyQoQU1fREVGQVVMVF9WRVJCT1NJVFkpKQotYW1fX3ZfR0VOXzAgPSBAZWNobyAiICBHRU4gICAiICRAOwotU09VUkNFUyA9ICQobGlianBlZ19sYV9TT1VSQ0VTKSAkKGNqcGVnX1NPVVJDRVMpICQoZGpwZWdfU09VUkNFUykgXAotCSQoanBlZ3RyYW5fU09VUkNFUykgJChyZGpwZ2NvbV9TT1VSQ0VTKSAkKHdyanBnY29tX1NPVVJDRVMpCi1tYW4xZGlyID0gJChtYW5kaXIpL21hbjEKLU5ST0ZGID0gbnJvZmYKLU1BTlMgPSAkKG1hbl9NQU5TKQotSEVBREVSUyA9ICQoaW5jbHVkZV9IRUFERVJTKSAkKG5vaW5zdF9IRUFERVJTKQotRVRBR1MgPSBldGFncwotQ1RBR1MgPSBjdGFncwotQUNMT0NBTCA9IEBBQ0xPQ0FMQAotQU1UQVIgPSBAQU1UQVJACi1BTV9ERUZBVUxUX1ZFUkJPU0lUWSA9IEBBTV9ERUZBVUxUX1ZFUkJPU0lUWUAKLUFSID0gQEFSQAotQVMgPSBAQVNACi1BVVRPQ09ORiA9IEBBVVRPQ09ORkAKLUFVVE9IRUFERVIgPSBAQVVUT0hFQURFUkAKLUFVVE9NQUtFID0gQEFVVE9NQUtFQAotQVdLID0gQEFXS0AKLUNDID0gQENDQAotQ0NERVBNT0RFID0gQENDREVQTU9ERUAKLUNGTEFHUyA9IEBDRkxBR1NACi1DUFAgPSBAQ1BQQAotQ1BQRkxBR1MgPSBAQ1BQRkxBR1NACi1DWUdQQVRIX1cgPSBAQ1lHUEFUSF9XQAotREVGUyA9IEBERUZTQAotREVQRElSID0gQERFUERJUkAKLURMTFRPT0wgPSBARExMVE9PTEAKLURTWU1VVElMID0gQERTWU1VVElMQAotRFVNUEJJTiA9IEBEVU1QQklOQAotRUNIT19DID0gQEVDSE9fQ0AKLUVDSE9fTiA9IEBFQ0hPX05ACi1FQ0hPX1QgPSBARUNIT19UQAotRUdSRVAgPSBARUdSRVBACi1FWEVFWFQgPSBARVhFRVhUQAotRkdSRVAgPSBARkdSRVBACi1HUkVQID0gQEdSRVBACi1JTlNUQUxMID0gQElOU1RBTExACi1JTlNUQUxMX0RBVEEgPSBASU5TVEFMTF9EQVRBQAotSU5TVEFMTF9QUk9HUkFNID0gQElOU1RBTExfUFJPR1JBTUAKLUlOU1RBTExfU0NSSVBUID0gQElOU1RBTExfU0NSSVBUQAotSU5TVEFMTF9TVFJJUF9QUk9HUkFNID0gQElOU1RBTExfU1RSSVBfUFJPR1JBTUAKLUpQRUdfTElCX1ZFUlNJT04gPSBASlBFR19MSUJfVkVSU0lPTkAKLUxEID0gQExEQAotTERGTEFHUyA9IEBMREZMQUdTQAotTElCT0JKUyA9IEBMSUJPQkpTQAotTElCUyA9IEBMSUJTQAotTElCVE9PTCA9IEBMSUJUT09MQAotTElQTyA9IEBMSVBPQAotTE5fUyA9IEBMTl9TQAotTFRMSUJPQkpTID0gQExUTElCT0JKU0AKLU1BSU5UID0gQE1BSU5UQAotTUFLRUlORk8gPSBATUFLRUlORk9ACi1NQU5JRkVTVF9UT09MID0gQE1BTklGRVNUX1RPT0xACi1NRU1PUllNR1IgPSBATUVNT1JZTUdSQAotTUtESVJfUCA9IEBNS0RJUl9QQAotTk0gPSBATk1ACi1OTUVESVQgPSBATk1FRElUQAotT0JKRFVNUCA9IEBPQkpEVU1QQAotT0JKRVhUID0gQE9CSkVYVEAKLU9UT09MID0gQE9UT09MQAotT1RPT0w2NCA9IEBPVE9PTDY0QAotUEFDS0FHRSA9IEBQQUNLQUdFQAotUEFDS0FHRV9CVUdSRVBPUlQgPSBAUEFDS0FHRV9CVUdSRVBPUlRACi1QQUNLQUdFX05BTUUgPSBAUEFDS0FHRV9OQU1FQAotUEFDS0FHRV9TVFJJTkcgPSBAUEFDS0FHRV9TVFJJTkdACi1QQUNLQUdFX1RBUk5BTUUgPSBAUEFDS0FHRV9UQVJOQU1FQAotUEFDS0FHRV9VUkwgPSBAUEFDS0FHRV9VUkxACi1QQUNLQUdFX1ZFUlNJT04gPSBAUEFDS0FHRV9WRVJTSU9OQAotUEFUSF9TRVBBUkFUT1IgPSBAUEFUSF9TRVBBUkFUT1JACi1SQU5MSUIgPSBAUkFOTElCQAotU0VEID0gQFNFREAKLVNFVF9NQUtFID0gQFNFVF9NQUtFQAotU0hFTEwgPSBAU0hFTExACi1TVFJJUCA9IEBTVFJJUEAKLVUgPSBAVUAKLVZFUlNJT04gPSBAVkVSU0lPTkAKLWFic19idWlsZGRpciA9IEBhYnNfYnVpbGRkaXJACi1hYnNfc3JjZGlyID0gQGFic19zcmNkaXJACi1hYnNfdG9wX2J1aWxkZGlyID0gQGFic190b3BfYnVpbGRkaXJACi1hYnNfdG9wX3NyY2RpciA9IEBhYnNfdG9wX3NyY2RpckAKLWFjX2N0X0FSID0gQGFjX2N0X0FSQAotYWNfY3RfQ0MgPSBAYWNfY3RfQ0NACi1hY19jdF9EVU1QQklOID0gQGFjX2N0X0RVTVBCSU5ACi1hbV9faW5jbHVkZSA9IEBhbV9faW5jbHVkZUAKLWFtX19sZWFkaW5nX2RvdCA9IEBhbV9fbGVhZGluZ19kb3RACi1hbV9fcXVvdGUgPSBAYW1fX3F1b3RlQAotYW1fX3RhciA9IEBhbV9fdGFyQAotYW1fX3VudGFyID0gQGFtX191bnRhckAKLWJpbmRpciA9IEBiaW5kaXJACi1idWlsZCA9IEBidWlsZEAKLWJ1aWxkX2FsaWFzID0gQGJ1aWxkX2FsaWFzQAotYnVpbGRfY3B1ID0gQGJ1aWxkX2NwdUAKLWJ1aWxkX29zID0gQGJ1aWxkX29zQAotYnVpbGRfdmVuZG9yID0gQGJ1aWxkX3ZlbmRvckAKLWJ1aWxkZGlyID0gQGJ1aWxkZGlyQAotZGF0YWRpciA9IEBkYXRhZGlyQAotZGF0YXJvb3RkaXIgPSBAZGF0YXJvb3RkaXJACi1kb2NkaXIgPSBAZG9jZGlyQAotZHZpZGlyID0gQGR2aWRpckAKLWV4ZWNfcHJlZml4ID0gQGV4ZWNfcHJlZml4QAotaG9zdCA9IEBob3N0QAotaG9zdF9hbGlhcyA9IEBob3N0X2FsaWFzQAotaG9zdF9jcHUgPSBAaG9zdF9jcHVACi1ob3N0X29zID0gQGhvc3Rfb3NACi1ob3N0X3ZlbmRvciA9IEBob3N0X3ZlbmRvckAKLWh0bWxkaXIgPSBAaHRtbGRpckAKLWluY2x1ZGVkaXIgPSBAaW5jbHVkZWRpckAKLWluZm9kaXIgPSBAaW5mb2RpckAKLWluc3RhbGxfc2ggPSBAaW5zdGFsbF9zaEAKLWxpYmRpciA9IEBsaWJkaXJACi1saWJleGVjZGlyID0gQGxpYmV4ZWNkaXJACi1sb2NhbGVkaXIgPSBAbG9jYWxlZGlyQAotbG9jYWxzdGF0ZWRpciA9IEBsb2NhbHN0YXRlZGlyQAotbWFuZGlyID0gQG1hbmRpckAKLW1rZGlyX3AgPSBAbWtkaXJfcEAKLW9sZGluY2x1ZGVkaXIgPSBAb2xkaW5jbHVkZWRpckAKLXBkZmRpciA9IEBwZGZkaXJACi1wcmVmaXggPSBAcHJlZml4QAotcHJvZ3JhbV90cmFuc2Zvcm1fbmFtZSA9IEBwcm9ncmFtX3RyYW5zZm9ybV9uYW1lQAotcHNkaXIgPSBAcHNkaXJACi1zYmluZGlyID0gQHNiaW5kaXJACi1zaGFyZWRzdGF0ZWRpciA9IEBzaGFyZWRzdGF0ZWRpckAKLXNyY2RpciA9IEBzcmNkaXJACi1zeXNjb25mZGlyID0gQHN5c2NvbmZkaXJACi10YXJnZXQgPSBAdGFyZ2V0QAotdGFyZ2V0X2FsaWFzID0gQHRhcmdldF9hbGlhc0AKLXRhcmdldF9jcHUgPSBAdGFyZ2V0X2NwdUAKLXRhcmdldF9vcyA9IEB0YXJnZXRfb3NACi10YXJnZXRfdmVuZG9yID0gQHRhcmdldF92ZW5kb3JACi10b3BfYnVpbGRfcHJlZml4ID0gQHRvcF9idWlsZF9wcmVmaXhACi10b3BfYnVpbGRkaXIgPSBAdG9wX2J1aWxkZGlyQAotdG9wX3NyY2RpciA9IEB0b3Bfc3JjZGlyQAotCi0jIFNvdXJjZXMgdG8gYnVpbGQgbGlicmFyeQotTElCU09VUkNFUyA9IGphcmljb20uYyBqY2FwaW1pbi5jIGpjYXBpc3RkLmMgamNhcml0aC5jIGpjY29lZmN0LmMgamNjb2xvci5jIFwKLSAgICAgICAgamNkY3RtZ3IuYyBqY2h1ZmYuYyBqY2luaXQuYyBqY21haW5jdC5jIGpjbWFya2VyLmMgamNtYXN0ZXIuYyBcCi0gICAgICAgIGpjb21hcGkuYyBqY3BhcmFtLmMgamNwcmVwY3QuYyBqY3NhbXBsZS5jIGpjdHJhbnMuYyBqZGFwaW1pbi5jIFwKLSAgICAgICAgamRhcGlzdGQuYyBqZGFyaXRoLmMgamRhdGFkc3QuYyBqZGF0YXNyYy5jIGpkY29lZmN0LmMgamRjb2xvci5jIFwKLSAgICAgICAgamRkY3RtZ3IuYyBqZGh1ZmYuYyBqZGlucHV0LmMgamRtYWluY3QuYyBqZG1hcmtlci5jIGpkbWFzdGVyLmMgXAotICAgICAgICBqZG1lcmdlLmMgamRwb3N0Y3QuYyBqZHNhbXBsZS5jIGpkdHJhbnMuYyBqZXJyb3IuYyBqZmRjdGZsdC5jIFwKLSAgICAgICAgamZkY3Rmc3QuYyBqZmRjdGludC5jIGppZGN0Zmx0LmMgamlkY3Rmc3QuYyBqaWRjdGludC5jIGpxdWFudDEuYyBcCi0gICAgICAgIGpxdWFudDIuYyBqdXRpbHMuYyBqbWVtbWdyLmMgQE1FTU9SWU1HUkAuYwotCi0KLSMgU3lzdGVtIGRlcGVuZGVudCBzb3VyY2VzCi1TWVNERVBTT1VSQ0VTID0gam1lbWFuc2kuYyBqbWVtbmFtZS5jIGptZW1ub2JzLmMgam1lbWRvcy5jIGptZW1tYWMuYwotCi0jIEhlYWRlcnMgd2hpY2ggYXJlIGluc3RhbGxlZCB0byBzdXBwb3J0IHRoZSBsaWJyYXJ5Ci1JTlNUSU5DTFVERVMgPSBqZXJyb3IuaCBqbW9yZWNmZy5oIGpwZWdsaWIuaAotCi0jIEhlYWRlcnMgd2hpY2ggYXJlIG5vdCBpbnN0YWxsZWQKLU9USEVSSU5DTFVERVMgPSBjZGVycm9yLmggY2RqcGVnLmggamRjdC5oIGppbmNsdWRlLmggam1lbXN5cy5oIGpwZWdpbnQuaCBcCi0gICAgICAgIGp2ZXJzaW9uLmggdHJhbnN1cHAuaAotCi0KLSMgTWFudWFsIHBhZ2VzIChBdXRvbWFrZSB1c2VzICdNQU5TJyBmb3IgaXRzZWxmKQotRElTVE1BTlMgPSBjanBlZy4xIGRqcGVnLjEganBlZ3RyYW4uMSByZGpwZ2NvbS4xIHdyanBnY29tLjEKLQotIyBPdGhlciBkb2N1bWVudGF0aW9uIGZpbGVzCi1ET0NTID0gUkVBRE1FIGluc3RhbGwudHh0IHVzYWdlLnR4dCB3aXphcmQudHh0IGV4YW1wbGUuYyBsaWJqcGVnLnR4dCBcCi0gICAgICAgIHN0cnVjdHVyZS50eHQgY29kZXJ1bGVzLnR4dCBmaWxlbGlzdC50eHQgY2hhbmdlLmxvZwotCi0KLSMgTWFrZWZpbGVzIGZvciB2YXJpb3VzIHN5c3RlbXMKLU1LRklMRVMgPSBjb25maWd1cmUgTWFrZWZpbGUuaW4gbWFrZWZpbGUuYW5zaSBtYWtlZmlsZS51bml4IG1ha2VmaWxlLmJjYyBcCi0gICAgICAgIG1ha2VmaWxlLm1jNiBtYWtlZmlsZS5kaiBtYWtlZmlsZS53YXQgbWFrZWZpbGUudmMgbWFrZWpkc3cudmM2IFwKLSAgICAgICAgbWFrZWFkc3cudmM2IG1ha2VqZGVwLnZjNiBtYWtlamRzcC52YzYgbWFrZWptYWsudmM2IG1ha2VjZGVwLnZjNiBcCi0gICAgICAgIG1ha2VjZHNwLnZjNiBtYWtlY21hay52YzYgbWFrZWRkZXAudmM2IG1ha2VkZHNwLnZjNiBtYWtlZG1hay52YzYgXAotICAgICAgICBtYWtldGRlcC52YzYgbWFrZXRkc3AudmM2IG1ha2V0bWFrLnZjNiBtYWtlcmRlcC52YzYgbWFrZXJkc3AudmM2IFwKLSAgICAgICAgbWFrZXJtYWsudmM2IG1ha2V3ZGVwLnZjNiBtYWtld2RzcC52YzYgbWFrZXdtYWsudmM2IG1ha2Vqc2xuLnYxMCBcCi0gICAgICAgIG1ha2Vhc2xuLnYxMCBtYWtlanZjeC52MTAgbWFrZWpmaWwudjEwIG1ha2VjdmN4LnYxMCBtYWtlY2ZpbC52MTAgXAotICAgICAgICBtYWtlZHZjeC52MTAgbWFrZWRmaWwudjEwIG1ha2V0dmN4LnYxMCBtYWtldGZpbC52MTAgbWFrZXJ2Y3gudjEwIFwKLSAgICAgICAgbWFrZXJmaWwudjEwIG1ha2V3dmN4LnYxMCBtYWtld2ZpbC52MTAgbWFrZXByb2oubWFjIG1ha2NqcGVnLnN0IFwKLSAgICAgICAgbWFrZGpwZWcuc3QgbWFrbGpwZWcuc3QgbWFrdGpwZWcuc3QgbWFrZWZpbGUubWFueCBtYWtlZmlsZS5zYXMgXAotICAgICAgICBtYWtlZmlsZS5tbXMgbWFrZWZpbGUudm1zIG1ha3Ztcy5vcHQKLQotCi0jIENvbmZpZ3VyYXRpb24gZmlsZXMKLUNPTkZJR0ZJTEVTID0gamNvbmZpZy5jZmcgamNvbmZpZy5iY2MgamNvbmZpZy5tYzYgamNvbmZpZy5kaiBqY29uZmlnLndhdCBcCi0gICAgICAgIGpjb25maWcudmMgamNvbmZpZy5tYWMgamNvbmZpZy5zdCBqY29uZmlnLm1hbnggamNvbmZpZy5zYXMgXAotICAgICAgICBqY29uZmlnLnZtcwotCi0KLSMgU3VwcG9ydCBzY3JpcHRzIGZvciBjb25maWd1cmUKLUNPTkZJR1VSRUZJTEVTID0gY29uZmlnLmd1ZXNzIGNvbmZpZy5zdWIgaW5zdGFsbC1zaCBsdG1haW4uc2ggZGVwY29tcCBtaXNzaW5nCi0KLSMgTWlzY2VsbGFuZW91cyBzdXBwb3J0IGZpbGVzCi1PVEhFUkZJTEVTID0gamNvbmZpZy50eHQgY2tjb25maWcuYyBhbnNpMmtuci5jIGFuc2kya25yLjEgam1lbWRvc2EuYXNtIFwKLSAgICAgICAgbGlianBlZy5tYXAKLQotCi0jIFRlc3Qgc3VwcG9ydCBmaWxlcwotVEVTVEZJTEVTID0gdGVzdG9yaWcuanBnIHRlc3RpbWcucHBtIHRlc3RpbWcuYm1wIHRlc3RpbWcuanBnIHRlc3Rwcm9nLmpwZyBcCi0gICAgICAgIHRlc3RpbWdwLmpwZwotCi0KLSMgbGlidG9vbCBsaWJyYXJpZXMgdG8gYnVpbGQKLWxpYl9MVExJQlJBUklFUyA9IGxpYmpwZWcubGEKLQotIyBMaWJyYXJ5IHNvdXJjZXMgZm9yIGxpYmpwZWcubGEKLWxpYmpwZWdfbGFfU09VUkNFUyA9ICQoTElCU09VUkNFUykKLQotIyBMREZMQUdTIGZvciBsaWJqcGVnLmxhCi1saWJqcGVnX2xhX0xERkxBR1MgPSAtbm8tdW5kZWZpbmVkIC12ZXJzaW9uLWluZm8gJChKUEVHX0xJQl9WRVJTSU9OKSBcCi0JJChhbV9fYXBwZW5kXzEpCi0KLSMgRXhlY3V0YWJsZSBzb3VyY2VzICYgbGlicwotY2pwZWdfU09VUkNFUyA9IGNqcGVnLmMgcmRwcG0uYyByZGdpZi5jIHJkdGFyZ2EuYyByZHJsZS5jIHJkYm1wLmMgXAotICAgICAgICByZHN3aXRjaC5jIGNkanBlZy5jCi0KLWNqcGVnX0xEQUREID0gbGlianBlZy5sYQotZGpwZWdfU09VUkNFUyA9IGRqcGVnLmMgd3JwcG0uYyB3cmdpZi5jIHdydGFyZ2EuYyB3cnJsZS5jIHdyYm1wLmMgXAotICAgICAgICByZGNvbG1hcC5jIGNkanBlZy5jCi0KLWRqcGVnX0xEQUREID0gbGlianBlZy5sYQotanBlZ3RyYW5fU09VUkNFUyA9IGpwZWd0cmFuLmMgcmRzd2l0Y2guYyBjZGpwZWcuYyB0cmFuc3VwcC5jCi1qcGVndHJhbl9MREFERCA9IGxpYmpwZWcubGEKLXJkanBnY29tX1NPVVJDRVMgPSByZGpwZ2NvbS5jCi13cmpwZ2NvbV9TT1VSQ0VTID0gd3JqcGdjb20uYwotCi0jIE1hbnVhbCBwYWdlcyB0byBpbnN0YWxsCi1tYW5fTUFOUyA9ICQoRElTVE1BTlMpCi0KLSMgSGVhZGVycyB0byBpbnN0YWxsCi1pbmNsdWRlX0hFQURFUlMgPSAkKElOU1RJTkNMVURFUykKLQotIyBPdGhlciBkaXN0cmlidXRlZCBoZWFkZXJzCi1ub2luc3RfSEVBREVSUyA9ICQoT1RIRVJJTkNMVURFUykKLQotIyBPdGhlciBkaXN0cmlidXRlZCBmaWxlcwotRVhUUkFfRElTVCA9ICQoRE9DUykgJChESVNUTUFOUykgJChNS0ZJTEVTKSAkKENPTkZJR0ZJTEVTKSAkKFNZU0RFUFNPVVJDRVMpIFwKLSAgICAgICAgJChPVEhFUkZJTEVTKSAkKFRFU1RGSUxFUykKLQotCi0jIEZpbGVzIHRvIGJlIGNsZWFuZWQKLUNMRUFORklMRVMgPSB0ZXN0b3V0LnBwbSB0ZXN0b3V0LmJtcCB0ZXN0b3V0LmpwZyB0ZXN0b3V0cC5wcG0gdGVzdG91dHAuanBnIFwKLSAgICAgICAgdGVzdG91dHQuanBnCi0KLWFsbDogamNvbmZpZy5oCi0JJChNQUtFKSAkKEFNX01BS0VGTEFHUykgYWxsLWFtCi0KLS5TVUZGSVhFUzoKLS5TVUZGSVhFUzogLmMgLmxvIC5vIC5vYmoKLWFtLS1yZWZyZXNoOgotCUA6Ci0kKHNyY2RpcikvTWFrZWZpbGUuaW46IEBNQUlOVEFJTkVSX01PREVfVFJVRUAgJChzcmNkaXIpL01ha2VmaWxlLmFtICAkKGFtX19jb25maWd1cmVfZGVwcykKLQlAZm9yIGRlcCBpbiAkPzsgZG8gXAotCSAgY2FzZSAnJChhbV9fY29uZmlndXJlX2RlcHMpJyBpbiBcCi0JICAgICokJGRlcCopIFwKLQkgICAgICBlY2hvICcgY2QgJChzcmNkaXIpICYmICQoQVVUT01BS0UpIC0tZm9yZWlnbic7IFwKLQkgICAgICAkKGFtX19jZCkgJChzcmNkaXIpICYmICQoQVVUT01BS0UpIC0tZm9yZWlnbiBcCi0JCSYmIGV4aXQgMDsgXAotCSAgICAgIGV4aXQgMTs7IFwKLQkgIGVzYWM7IFwKLQlkb25lOyBcCi0JZWNobyAnIGNkICQodG9wX3NyY2RpcikgJiYgJChBVVRPTUFLRSkgLS1mb3JlaWduIE1ha2VmaWxlJzsgXAotCSQoYW1fX2NkKSAkKHRvcF9zcmNkaXIpICYmIFwKLQkgICQoQVVUT01BS0UpIC0tZm9yZWlnbiBNYWtlZmlsZQotLlBSRUNJT1VTOiBNYWtlZmlsZQotTWFrZWZpbGU6ICQoc3JjZGlyKS9NYWtlZmlsZS5pbiAkKHRvcF9idWlsZGRpcikvY29uZmlnLnN0YXR1cwotCUBjYXNlICckPycgaW4gXAotCSAgKmNvbmZpZy5zdGF0dXMqKSBcCi0JICAgIGVjaG8gJyAkKFNIRUxMKSAuL2NvbmZpZy5zdGF0dXMnOyBcCi0JICAgICQoU0hFTEwpIC4vY29uZmlnLnN0YXR1czs7IFwKLQkgICopIFwKLQkgICAgZWNobyAnIGNkICQodG9wX2J1aWxkZGlyKSAmJiAkKFNIRUxMKSAuL2NvbmZpZy5zdGF0dXMgJEAgJChhbV9fZGVwZmlsZXNfbWF5YmUpJzsgXAotCSAgICBjZCAkKHRvcF9idWlsZGRpcikgJiYgJChTSEVMTCkgLi9jb25maWcuc3RhdHVzICRAICQoYW1fX2RlcGZpbGVzX21heWJlKTs7IFwKLQllc2FjOwotCi0kKHRvcF9idWlsZGRpcikvY29uZmlnLnN0YXR1czogJCh0b3Bfc3JjZGlyKS9jb25maWd1cmUgJChDT05GSUdfU1RBVFVTX0RFUEVOREVOQ0lFUykKLQkkKFNIRUxMKSAuL2NvbmZpZy5zdGF0dXMgLS1yZWNoZWNrCi0KLSQodG9wX3NyY2RpcikvY29uZmlndXJlOiBATUFJTlRBSU5FUl9NT0RFX1RSVUVAICQoYW1fX2NvbmZpZ3VyZV9kZXBzKQotCSQoYW1fX2NkKSAkKHNyY2RpcikgJiYgJChBVVRPQ09ORikKLSQoQUNMT0NBTF9NNCk6IEBNQUlOVEFJTkVSX01PREVfVFJVRUAgJChhbV9fYWNsb2NhbF9tNF9kZXBzKQotCSQoYW1fX2NkKSAkKHNyY2RpcikgJiYgJChBQ0xPQ0FMKSAkKEFDTE9DQUxfQU1GTEFHUykKLSQoYW1fX2FjbG9jYWxfbTRfZGVwcyk6Ci0KLWpjb25maWcuaDogc3RhbXAtaDEKLQlAaWYgdGVzdCAhIC1mICRAOyB0aGVuIFwKLQkgIHJtIC1mIHN0YW1wLWgxOyBcCi0JICAkKE1BS0UpICQoQU1fTUFLRUZMQUdTKSBzdGFtcC1oMTsgXAotCWVsc2UgOjsgZmkKLQotc3RhbXAtaDE6ICQoc3JjZGlyKS9qY29uZmlnLmNmZyAkKHRvcF9idWlsZGRpcikvY29uZmlnLnN0YXR1cwotCUBybSAtZiBzdGFtcC1oMQotCWNkICQodG9wX2J1aWxkZGlyKSAmJiAkKFNIRUxMKSAuL2NvbmZpZy5zdGF0dXMgamNvbmZpZy5oCi0kKHNyY2RpcikvamNvbmZpZy5jZmc6IEBNQUlOVEFJTkVSX01PREVfVFJVRUAgJChhbV9fY29uZmlndXJlX2RlcHMpIAotCSgkKGFtX19jZCkgJCh0b3Bfc3JjZGlyKSAmJiAkKEFVVE9IRUFERVIpKQotCXJtIC1mIHN0YW1wLWgxCi0JdG91Y2ggJEAKLQotZGlzdGNsZWFuLWhkcjoKLQktcm0gLWYgamNvbmZpZy5oIHN0YW1wLWgxCi1pbnN0YWxsLWxpYkxUTElCUkFSSUVTOiAkKGxpYl9MVExJQlJBUklFUykKLQlAJChOT1JNQUxfSU5TVEFMTCkKLQl0ZXN0IC16ICIkKGxpYmRpcikiIHx8ICQoTUtESVJfUCkgIiQoREVTVERJUikkKGxpYmRpcikiCi0JQGxpc3Q9JyQobGliX0xUTElCUkFSSUVTKSc7IHRlc3QgLW4gIiQobGliZGlyKSIgfHwgbGlzdD07IFwKLQlsaXN0Mj07IGZvciBwIGluICQkbGlzdDsgZG8gXAotCSAgaWYgdGVzdCAtZiAkJHA7IHRoZW4gXAotCSAgICBsaXN0Mj0iJCRsaXN0MiAkJHAiOyBcCi0JICBlbHNlIDo7IGZpOyBcCi0JZG9uZTsgXAotCXRlc3QgLXogIiQkbGlzdDIiIHx8IHsgXAotCSAgZWNobyAiICQoTElCVE9PTCkgJChBTV9MSUJUT09MRkxBR1MpICQoTElCVE9PTEZMQUdTKSAtLW1vZGU9aW5zdGFsbCAkKElOU1RBTEwpICQoSU5TVEFMTF9TVFJJUF9GTEFHKSAkJGxpc3QyICckKERFU1RESVIpJChsaWJkaXIpJyI7IFwKLQkgICQoTElCVE9PTCkgJChBTV9MSUJUT09MRkxBR1MpICQoTElCVE9PTEZMQUdTKSAtLW1vZGU9aW5zdGFsbCAkKElOU1RBTEwpICQoSU5TVEFMTF9TVFJJUF9GTEFHKSAkJGxpc3QyICIkKERFU1RESVIpJChsaWJkaXIpIjsgXAotCX0KLQotdW5pbnN0YWxsLWxpYkxUTElCUkFSSUVTOgotCUAkKE5PUk1BTF9VTklOU1RBTEwpCi0JQGxpc3Q9JyQobGliX0xUTElCUkFSSUVTKSc7IHRlc3QgLW4gIiQobGliZGlyKSIgfHwgbGlzdD07IFwKLQlmb3IgcCBpbiAkJGxpc3Q7IGRvIFwKLQkgICQoYW1fX3N0cmlwX2RpcikgXAotCSAgZWNobyAiICQoTElCVE9PTCkgJChBTV9MSUJUT09MRkxBR1MpICQoTElCVE9PTEZMQUdTKSAtLW1vZGU9dW5pbnN0YWxsIHJtIC1mICckKERFU1RESVIpJChsaWJkaXIpLyQkZiciOyBcCi0JICAkKExJQlRPT0wpICQoQU1fTElCVE9PTEZMQUdTKSAkKExJQlRPT0xGTEFHUykgLS1tb2RlPXVuaW5zdGFsbCBybSAtZiAiJChERVNURElSKSQobGliZGlyKS8kJGYiOyBcCi0JZG9uZQotCi1jbGVhbi1saWJMVExJQlJBUklFUzoKLQktdGVzdCAteiAiJChsaWJfTFRMSUJSQVJJRVMpIiB8fCBybSAtZiAkKGxpYl9MVExJQlJBUklFUykKLQlAbGlzdD0nJChsaWJfTFRMSUJSQVJJRVMpJzsgZm9yIHAgaW4gJCRsaXN0OyBkbyBcCi0JICBkaXI9ImBlY2hvICQkcCB8IHNlZCAtZSAnc3wvW14vXSokJHx8J2AiOyBcCi0JICB0ZXN0ICIkJGRpciIgIT0gIiQkcCIgfHwgZGlyPS47IFwKLQkgIGVjaG8gInJtIC1mIFwiJCR7ZGlyfS9zb19sb2NhdGlvbnNcIiI7IFwKLQkgIHJtIC1mICIkJHtkaXJ9L3NvX2xvY2F0aW9ucyI7IFwKLQlkb25lCi1saWJqcGVnLmxhOiAkKGxpYmpwZWdfbGFfT0JKRUNUUykgJChsaWJqcGVnX2xhX0RFUEVOREVOQ0lFUykgCi0JJChBTV9WX0NDTEQpJChsaWJqcGVnX2xhX0xJTkspIC1ycGF0aCAkKGxpYmRpcikgJChsaWJqcGVnX2xhX09CSkVDVFMpICQobGlianBlZ19sYV9MSUJBREQpICQoTElCUykKLWluc3RhbGwtYmluUFJPR1JBTVM6ICQoYmluX1BST0dSQU1TKQotCUAkKE5PUk1BTF9JTlNUQUxMKQotCXRlc3QgLXogIiQoYmluZGlyKSIgfHwgJChNS0RJUl9QKSAiJChERVNURElSKSQoYmluZGlyKSIKLQlAbGlzdD0nJChiaW5fUFJPR1JBTVMpJzsgdGVzdCAtbiAiJChiaW5kaXIpIiB8fCBsaXN0PTsgXAotCWZvciBwIGluICQkbGlzdDsgZG8gZWNobyAiJCRwICQkcCI7IGRvbmUgfCBcCi0Jc2VkICdzLyQoRVhFRVhUKSQkLy8nIHwgXAotCXdoaWxlIHJlYWQgcCBwMTsgZG8gaWYgdGVzdCAtZiAkJHAgfHwgdGVzdCAtZiAkJHAxOyBcCi0JICB0aGVuIGVjaG8gIiQkcCI7IGVjaG8gIiQkcCI7IGVsc2UgOjsgZmk7IFwKLQlkb25lIHwgXAotCXNlZCAtZSAncDtzLC4qLywsO247aCcgLWUgJ3N8Lip8LnwnIFwKLQkgICAgLWUgJ3A7eDtzLC4qLywsO3MvJChFWEVFWFQpJCQvLzskKHRyYW5zZm9ybSk7cy8kJC8kKEVYRUVYVCkvJyB8IFwKLQlzZWQgJ047TjtOO3MsXG4sICxnJyB8IFwKLQkkKEFXSykgJ0JFR0lOIHsgZmlsZXNbIi4iXSA9ICIiOyBkaXJzWyIuIl0gPSAxIH0gXAotCSAgeyBkPSQkMzsgaWYgKGRpcnNbZF0gIT0gMSkgeyBwcmludCAiZCIsIGQ7IGRpcnNbZF0gPSAxIH0gXAotCSAgICBpZiAoJCQyID09ICQkNCkgZmlsZXNbZF0gPSBmaWxlc1tkXSAiICIgJCQxOyBcCi0JICAgIGVsc2UgeyBwcmludCAiZiIsICQkMyAiLyIgJCQ0LCAkJDE7IH0gfSBcCi0JICBFTkQgeyBmb3IgKGQgaW4gZmlsZXMpIHByaW50ICJmIiwgZCwgZmlsZXNbZF0gfScgfCBcCi0Jd2hpbGUgcmVhZCB0eXBlIGRpciBmaWxlczsgZG8gXAotCSAgICBpZiB0ZXN0ICIkJGRpciIgPSAuOyB0aGVuIGRpcj07IGVsc2UgZGlyPS8kJGRpcjsgZmk7IFwKLQkgICAgdGVzdCAteiAiJCRmaWxlcyIgfHwgeyBcCi0JICAgIGVjaG8gIiAkKElOU1RBTExfUFJPR1JBTV9FTlYpICQoTElCVE9PTCkgJChBTV9MSUJUT09MRkxBR1MpICQoTElCVE9PTEZMQUdTKSAtLW1vZGU9aW5zdGFsbCAkKElOU1RBTExfUFJPR1JBTSkgJCRmaWxlcyAnJChERVNURElSKSQoYmluZGlyKSQkZGlyJyI7IFwKLQkgICAgJChJTlNUQUxMX1BST0dSQU1fRU5WKSAkKExJQlRPT0wpICQoQU1fTElCVE9PTEZMQUdTKSAkKExJQlRPT0xGTEFHUykgLS1tb2RlPWluc3RhbGwgJChJTlNUQUxMX1BST0dSQU0pICQkZmlsZXMgIiQoREVTVERJUikkKGJpbmRpcikkJGRpciIgfHwgZXhpdCAkJD87IFwKLQkgICAgfSBcCi0JOyBkb25lCi0KLXVuaW5zdGFsbC1iaW5QUk9HUkFNUzoKLQlAJChOT1JNQUxfVU5JTlNUQUxMKQotCUBsaXN0PSckKGJpbl9QUk9HUkFNUyknOyB0ZXN0IC1uICIkKGJpbmRpcikiIHx8IGxpc3Q9OyBcCi0JZmlsZXM9YGZvciBwIGluICQkbGlzdDsgZG8gZWNobyAiJCRwIjsgZG9uZSB8IFwKLQkgIHNlZCAtZSAnaDtzLF4uKi8sLDtzLyQoRVhFRVhUKSQkLy87JCh0cmFuc2Zvcm0pJyBcCi0JICAgICAgLWUgJ3MvJCQvJChFWEVFWFQpLycgYDsgXAotCXRlc3QgLW4gIiQkbGlzdCIgfHwgZXhpdCAwOyBcCi0JZWNobyAiICggY2QgJyQoREVTVERJUikkKGJpbmRpciknICYmIHJtIC1mIiAkJGZpbGVzICIpIjsgXAotCWNkICIkKERFU1RESVIpJChiaW5kaXIpIiAmJiBybSAtZiAkJGZpbGVzCi0KLWNsZWFuLWJpblBST0dSQU1TOgotCUBsaXN0PSckKGJpbl9QUk9HUkFNUyknOyB0ZXN0IC1uICIkJGxpc3QiIHx8IGV4aXQgMDsgXAotCWVjaG8gIiBybSAtZiIgJCRsaXN0OyBcCi0Jcm0gLWYgJCRsaXN0IHx8IGV4aXQgJCQ/OyBcCi0JdGVzdCAtbiAiJChFWEVFWFQpIiB8fCBleGl0IDA7IFwKLQlsaXN0PWBmb3IgcCBpbiAkJGxpc3Q7IGRvIGVjaG8gIiQkcCI7IGRvbmUgfCBzZWQgJ3MvJChFWEVFWFQpJCQvLydgOyBcCi0JZWNobyAiIHJtIC1mIiAkJGxpc3Q7IFwKLQlybSAtZiAkJGxpc3QKLWNqcGVnJChFWEVFWFQpOiAkKGNqcGVnX09CSkVDVFMpICQoY2pwZWdfREVQRU5ERU5DSUVTKSAKLQlAcm0gLWYgY2pwZWckKEVYRUVYVCkKLQkkKEFNX1ZfQ0NMRCkkKExJTkspICQoY2pwZWdfT0JKRUNUUykgJChjanBlZ19MREFERCkgJChMSUJTKQotZGpwZWckKEVYRUVYVCk6ICQoZGpwZWdfT0JKRUNUUykgJChkanBlZ19ERVBFTkRFTkNJRVMpIAotCUBybSAtZiBkanBlZyQoRVhFRVhUKQotCSQoQU1fVl9DQ0xEKSQoTElOSykgJChkanBlZ19PQkpFQ1RTKSAkKGRqcGVnX0xEQUREKSAkKExJQlMpCi1qcGVndHJhbiQoRVhFRVhUKTogJChqcGVndHJhbl9PQkpFQ1RTKSAkKGpwZWd0cmFuX0RFUEVOREVOQ0lFUykgCi0JQHJtIC1mIGpwZWd0cmFuJChFWEVFWFQpCi0JJChBTV9WX0NDTEQpJChMSU5LKSAkKGpwZWd0cmFuX09CSkVDVFMpICQoanBlZ3RyYW5fTERBREQpICQoTElCUykKLXJkanBnY29tJChFWEVFWFQpOiAkKHJkanBnY29tX09CSkVDVFMpICQocmRqcGdjb21fREVQRU5ERU5DSUVTKSAKLQlAcm0gLWYgcmRqcGdjb20kKEVYRUVYVCkKLQkkKEFNX1ZfQ0NMRCkkKExJTkspICQocmRqcGdjb21fT0JKRUNUUykgJChyZGpwZ2NvbV9MREFERCkgJChMSUJTKQotd3JqcGdjb20kKEVYRUVYVCk6ICQod3JqcGdjb21fT0JKRUNUUykgJCh3cmpwZ2NvbV9ERVBFTkRFTkNJRVMpIAotCUBybSAtZiB3cmpwZ2NvbSQoRVhFRVhUKQotCSQoQU1fVl9DQ0xEKSQoTElOSykgJCh3cmpwZ2NvbV9PQkpFQ1RTKSAkKHdyanBnY29tX0xEQUREKSAkKExJQlMpCi0KLW1vc3RseWNsZWFuLWNvbXBpbGU6Ci0JLXJtIC1mICouJChPQkpFWFQpCi0KLWRpc3RjbGVhbi1jb21waWxlOgotCS1ybSAtZiAqLnRhYi5jCi0uL2Fuc2kya25yOiBhbnNpMmtuci4kKE9CSkVYVCkKLQkkKExJTkspIGFuc2kya25yLiQoT0JKRVhUKSAkKExJQlMpCi1hbnNpMmtuci4kKE9CSkVYVCk6ICQoQ09ORklHX0hFQURFUikKLQotY2xlYW4ta3JleHRyYToKLQktcm0gLWYgYW5zaTJrbnIKLQotbW9zdGx5Y2xlYW4ta3I6Ci0JLXRlc3QgIiRVIiA9ICIiIHx8IHJtIC1mICpfLmMKLQotQEFNREVQX1RSVUVAQGFtX19pbmNsdWRlQCBAYW1fX3F1b3RlQC4vJChERVBESVIpL0BNRU1PUllNR1JAJFUuUGxvQGFtX19xdW90ZUAKLUBBTURFUF9UUlVFQEBhbV9faW5jbHVkZUAgQGFtX19xdW90ZUAuLyQoREVQRElSKS9jZGpwZWckVS5Qb0BhbV9fcXVvdGVACi1AQU1ERVBfVFJVRUBAYW1fX2luY2x1ZGVAIEBhbV9fcXVvdGVALi8kKERFUERJUikvY2pwZWckVS5Qb0BhbV9fcXVvdGVACi1AQU1ERVBfVFJVRUBAYW1fX2luY2x1ZGVAIEBhbV9fcXVvdGVALi8kKERFUERJUikvZGpwZWckVS5Qb0BhbV9fcXVvdGVACi1AQU1ERVBfVFJVRUBAYW1fX2luY2x1ZGVAIEBhbV9fcXVvdGVALi8kKERFUERJUikvamFyaWNvbSRVLlBsb0BhbV9fcXVvdGVACi1AQU1ERVBfVFJVRUBAYW1fX2luY2x1ZGVAIEBhbV9fcXVvdGVALi8kKERFUERJUikvamNhcGltaW4kVS5QbG9AYW1fX3F1b3RlQAotQEFNREVQX1RSVUVAQGFtX19pbmNsdWRlQCBAYW1fX3F1b3RlQC4vJChERVBESVIpL2pjYXBpc3RkJFUuUGxvQGFtX19xdW90ZUAKLUBBTURFUF9UUlVFQEBhbV9faW5jbHVkZUAgQGFtX19xdW90ZUAuLyQoREVQRElSKS9qY2FyaXRoJFUuUGxvQGFtX19xdW90ZUAKLUBBTURFUF9UUlVFQEBhbV9faW5jbHVkZUAgQGFtX19xdW90ZUAuLyQoREVQRElSKS9qY2NvZWZjdCRVLlBsb0BhbV9fcXVvdGVACi1AQU1ERVBfVFJVRUBAYW1fX2luY2x1ZGVAIEBhbV9fcXVvdGVALi8kKERFUERJUikvamNjb2xvciRVLlBsb0BhbV9fcXVvdGVACi1AQU1ERVBfVFJVRUBAYW1fX2luY2x1ZGVAIEBhbV9fcXVvdGVALi8kKERFUERJUikvamNkY3RtZ3IkVS5QbG9AYW1fX3F1b3RlQAotQEFNREVQX1RSVUVAQGFtX19pbmNsdWRlQCBAYW1fX3F1b3RlQC4vJChERVBESVIpL2pjaHVmZiRVLlBsb0BhbV9fcXVvdGVACi1AQU1ERVBfVFJVRUBAYW1fX2luY2x1ZGVAIEBhbV9fcXVvdGVALi8kKERFUERJUikvamNpbml0JFUuUGxvQGFtX19xdW90ZUAKLUBBTURFUF9UUlVFQEBhbV9faW5jbHVkZUAgQGFtX19xdW90ZUAuLyQoREVQRElSKS9qY21haW5jdCRVLlBsb0BhbV9fcXVvdGVACi1AQU1ERVBfVFJVRUBAYW1fX2luY2x1ZGVAIEBhbV9fcXVvdGVALi8kKERFUERJUikvamNtYXJrZXIkVS5QbG9AYW1fX3F1b3RlQAotQEFNREVQX1RSVUVAQGFtX19pbmNsdWRlQCBAYW1fX3F1b3RlQC4vJChERVBESVIpL2pjbWFzdGVyJFUuUGxvQGFtX19xdW90ZUAKLUBBTURFUF9UUlVFQEBhbV9faW5jbHVkZUAgQGFtX19xdW90ZUAuLyQoREVQRElSKS9qY29tYXBpJFUuUGxvQGFtX19xdW90ZUAKLUBBTURFUF9UUlVFQEBhbV9faW5jbHVkZUAgQGFtX19xdW90ZUAuLyQoREVQRElSKS9qY3BhcmFtJFUuUGxvQGFtX19xdW90ZUAKLUBBTURFUF9UUlVFQEBhbV9faW5jbHVkZUAgQGFtX19xdW90ZUAuLyQoREVQRElSKS9qY3ByZXBjdCRVLlBsb0BhbV9fcXVvdGVACi1AQU1ERVBfVFJVRUBAYW1fX2luY2x1ZGVAIEBhbV9fcXVvdGVALi8kKERFUERJUikvamNzYW1wbGUkVS5QbG9AYW1fX3F1b3RlQAotQEFNREVQX1RSVUVAQGFtX19pbmNsdWRlQCBAYW1fX3F1b3RlQC4vJChERVBESVIpL2pjdHJhbnMkVS5QbG9AYW1fX3F1b3RlQAotQEFNREVQX1RSVUVAQGFtX19pbmNsdWRlQCBAYW1fX3F1b3RlQC4vJChERVBESVIpL2pkYXBpbWluJFUuUGxvQGFtX19xdW90ZUAKLUBBTURFUF9UUlVFQEBhbV9faW5jbHVkZUAgQGFtX19xdW90ZUAuLyQoREVQRElSKS9qZGFwaXN0ZCRVLlBsb0BhbV9fcXVvdGVACi1AQU1ERVBfVFJVRUBAYW1fX2luY2x1ZGVAIEBhbV9fcXVvdGVALi8kKERFUERJUikvamRhcml0aCRVLlBsb0BhbV9fcXVvdGVACi1AQU1ERVBfVFJVRUBAYW1fX2luY2x1ZGVAIEBhbV9fcXVvdGVALi8kKERFUERJUikvamRhdGFkc3QkVS5QbG9AYW1fX3F1b3RlQAotQEFNREVQX1RSVUVAQGFtX19pbmNsdWRlQCBAYW1fX3F1b3RlQC4vJChERVBESVIpL2pkYXRhc3JjJFUuUGxvQGFtX19xdW90ZUAKLUBBTURFUF9UUlVFQEBhbV9faW5jbHVkZUAgQGFtX19xdW90ZUAuLyQoREVQRElSKS9qZGNvZWZjdCRVLlBsb0BhbV9fcXVvdGVACi1AQU1ERVBfVFJVRUBAYW1fX2luY2x1ZGVAIEBhbV9fcXVvdGVALi8kKERFUERJUikvamRjb2xvciRVLlBsb0BhbV9fcXVvdGVACi1AQU1ERVBfVFJVRUBAYW1fX2luY2x1ZGVAIEBhbV9fcXVvdGVALi8kKERFUERJUikvamRkY3RtZ3IkVS5QbG9AYW1fX3F1b3RlQAotQEFNREVQX1RSVUVAQGFtX19pbmNsdWRlQCBAYW1fX3F1b3RlQC4vJChERVBESVIpL2pkaHVmZiRVLlBsb0BhbV9fcXVvdGVACi1AQU1ERVBfVFJVRUBAYW1fX2luY2x1ZGVAIEBhbV9fcXVvdGVALi8kKERFUERJUikvamRpbnB1dCRVLlBsb0BhbV9fcXVvdGVACi1AQU1ERVBfVFJVRUBAYW1fX2luY2x1ZGVAIEBhbV9fcXVvdGVALi8kKERFUERJUikvamRtYWluY3QkVS5QbG9AYW1fX3F1b3RlQAotQEFNREVQX1RSVUVAQGFtX19pbmNsdWRlQCBAYW1fX3F1b3RlQC4vJChERVBESVIpL2pkbWFya2VyJFUuUGxvQGFtX19xdW90ZUAKLUBBTURFUF9UUlVFQEBhbV9faW5jbHVkZUAgQGFtX19xdW90ZUAuLyQoREVQRElSKS9qZG1hc3RlciRVLlBsb0BhbV9fcXVvdGVACi1AQU1ERVBfVFJVRUBAYW1fX2luY2x1ZGVAIEBhbV9fcXVvdGVALi8kKERFUERJUikvamRtZXJnZSRVLlBsb0BhbV9fcXVvdGVACi1AQU1ERVBfVFJVRUBAYW1fX2luY2x1ZGVAIEBhbV9fcXVvdGVALi8kKERFUERJUikvamRwb3N0Y3QkVS5QbG9AYW1fX3F1b3RlQAotQEFNREVQX1RSVUVAQGFtX19pbmNsdWRlQCBAYW1fX3F1b3RlQC4vJChERVBESVIpL2pkc2FtcGxlJFUuUGxvQGFtX19xdW90ZUAKLUBBTURFUF9UUlVFQEBhbV9faW5jbHVkZUAgQGFtX19xdW90ZUAuLyQoREVQRElSKS9qZHRyYW5zJFUuUGxvQGFtX19xdW90ZUAKLUBBTURFUF9UUlVFQEBhbV9faW5jbHVkZUAgQGFtX19xdW90ZUAuLyQoREVQRElSKS9qZXJyb3IkVS5QbG9AYW1fX3F1b3RlQAotQEFNREVQX1RSVUVAQGFtX19pbmNsdWRlQCBAYW1fX3F1b3RlQC4vJChERVBESVIpL2pmZGN0Zmx0JFUuUGxvQGFtX19xdW90ZUAKLUBBTURFUF9UUlVFQEBhbV9faW5jbHVkZUAgQGFtX19xdW90ZUAuLyQoREVQRElSKS9qZmRjdGZzdCRVLlBsb0BhbV9fcXVvdGVACi1AQU1ERVBfVFJVRUBAYW1fX2luY2x1ZGVAIEBhbV9fcXVvdGVALi8kKERFUERJUikvamZkY3RpbnQkVS5QbG9AYW1fX3F1b3RlQAotQEFNREVQX1RSVUVAQGFtX19pbmNsdWRlQCBAYW1fX3F1b3RlQC4vJChERVBESVIpL2ppZGN0Zmx0JFUuUGxvQGFtX19xdW90ZUAKLUBBTURFUF9UUlVFQEBhbV9faW5jbHVkZUAgQGFtX19xdW90ZUAuLyQoREVQRElSKS9qaWRjdGZzdCRVLlBsb0BhbV9fcXVvdGVACi1AQU1ERVBfVFJVRUBAYW1fX2luY2x1ZGVAIEBhbV9fcXVvdGVALi8kKERFUERJUikvamlkY3RpbnQkVS5QbG9AYW1fX3F1b3RlQAotQEFNREVQX1RSVUVAQGFtX19pbmNsdWRlQCBAYW1fX3F1b3RlQC4vJChERVBESVIpL2ptZW1tZ3IkVS5QbG9AYW1fX3F1b3RlQAotQEFNREVQX1RSVUVAQGFtX19pbmNsdWRlQCBAYW1fX3F1b3RlQC4vJChERVBESVIpL2pwZWd0cmFuJFUuUG9AYW1fX3F1b3RlQAotQEFNREVQX1RSVUVAQGFtX19pbmNsdWRlQCBAYW1fX3F1b3RlQC4vJChERVBESVIpL2pxdWFudDEkVS5QbG9AYW1fX3F1b3RlQAotQEFNREVQX1RSVUVAQGFtX19pbmNsdWRlQCBAYW1fX3F1b3RlQC4vJChERVBESVIpL2pxdWFudDIkVS5QbG9AYW1fX3F1b3RlQAotQEFNREVQX1RSVUVAQGFtX19pbmNsdWRlQCBAYW1fX3F1b3RlQC4vJChERVBESVIpL2p1dGlscyRVLlBsb0BhbV9fcXVvdGVACi1AQU1ERVBfVFJVRUBAYW1fX2luY2x1ZGVAIEBhbV9fcXVvdGVALi8kKERFUERJUikvcmRibXAkVS5Qb0BhbV9fcXVvdGVACi1AQU1ERVBfVFJVRUBAYW1fX2luY2x1ZGVAIEBhbV9fcXVvdGVALi8kKERFUERJUikvcmRjb2xtYXAkVS5Qb0BhbV9fcXVvdGVACi1AQU1ERVBfVFJVRUBAYW1fX2luY2x1ZGVAIEBhbV9fcXVvdGVALi8kKERFUERJUikvcmRnaWYkVS5Qb0BhbV9fcXVvdGVACi1AQU1ERVBfVFJVRUBAYW1fX2luY2x1ZGVAIEBhbV9fcXVvdGVALi8kKERFUERJUikvcmRqcGdjb20kVS5Qb0BhbV9fcXVvdGVACi1AQU1ERVBfVFJVRUBAYW1fX2luY2x1ZGVAIEBhbV9fcXVvdGVALi8kKERFUERJUikvcmRwcG0kVS5Qb0BhbV9fcXVvdGVACi1AQU1ERVBfVFJVRUBAYW1fX2luY2x1ZGVAIEBhbV9fcXVvdGVALi8kKERFUERJUikvcmRybGUkVS5Qb0BhbV9fcXVvdGVACi1AQU1ERVBfVFJVRUBAYW1fX2luY2x1ZGVAIEBhbV9fcXVvdGVALi8kKERFUERJUikvcmRzd2l0Y2gkVS5Qb0BhbV9fcXVvdGVACi1AQU1ERVBfVFJVRUBAYW1fX2luY2x1ZGVAIEBhbV9fcXVvdGVALi8kKERFUERJUikvcmR0YXJnYSRVLlBvQGFtX19xdW90ZUAKLUBBTURFUF9UUlVFQEBhbV9faW5jbHVkZUAgQGFtX19xdW90ZUAuLyQoREVQRElSKS90cmFuc3VwcCRVLlBvQGFtX19xdW90ZUAKLUBBTURFUF9UUlVFQEBhbV9faW5jbHVkZUAgQGFtX19xdW90ZUAuLyQoREVQRElSKS93cmJtcCRVLlBvQGFtX19xdW90ZUAKLUBBTURFUF9UUlVFQEBhbV9faW5jbHVkZUAgQGFtX19xdW90ZUAuLyQoREVQRElSKS93cmdpZiRVLlBvQGFtX19xdW90ZUAKLUBBTURFUF9UUlVFQEBhbV9faW5jbHVkZUAgQGFtX19xdW90ZUAuLyQoREVQRElSKS93cmpwZ2NvbSRVLlBvQGFtX19xdW90ZUAKLUBBTURFUF9UUlVFQEBhbV9faW5jbHVkZUAgQGFtX19xdW90ZUAuLyQoREVQRElSKS93cnBwbSRVLlBvQGFtX19xdW90ZUAKLUBBTURFUF9UUlVFQEBhbV9faW5jbHVkZUAgQGFtX19xdW90ZUAuLyQoREVQRElSKS93cnJsZSRVLlBvQGFtX19xdW90ZUAKLUBBTURFUF9UUlVFQEBhbV9faW5jbHVkZUAgQGFtX19xdW90ZUAuLyQoREVQRElSKS93cnRhcmdhJFUuUG9AYW1fX3F1b3RlQAotCi0uYy5vOgotQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChBTV9WX0NDKSQoQ09NUElMRSkgLU1UICRAIC1NRCAtTVAgLU1GICQoREVQRElSKS8kKi5UcG8gLWMgLW8gJEAgJDwKLUBhbV9fZmFzdGRlcENDX1RSVUVACSQoQU1fVl9hdCkkKGFtX19tdikgJChERVBESVIpLyQqLlRwbyAkKERFUERJUikvJCouUG8KLUBhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKEFNX1ZfQ0MpIEBBTV9CQUNLU0xBU0hACi1AQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJc291cmNlPSckPCcgb2JqZWN0PSckQCcgbGlidG9vbD1ubyBAQU1ERVBCQUNLU0xBU0hACi1AQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJREVQRElSPSQoREVQRElSKSAkKENDREVQTU9ERSkgJChkZXBjb21wKSBAQU1ERVBCQUNLU0xBU0hACi1AYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChDT01QSUxFKSAtYyAkPAotCi0uYy5vYmo6Ci1AYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKEFNX1ZfQ0MpJChDT01QSUxFKSAtTVQgJEAgLU1EIC1NUCAtTUYgJChERVBESVIpLyQqLlRwbyAtYyAtbyAkQCBgJChDWUdQQVRIX1cpICckPCdgCi1AYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKEFNX1ZfYXQpJChhbV9fbXYpICQoREVQRElSKS8kKi5UcG8gJChERVBESVIpLyQqLlBvCi1AYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChBTV9WX0NDKSBAQU1fQkFDS1NMQVNIQAotQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACXNvdXJjZT0nJDwnIG9iamVjdD0nJEAnIGxpYnRvb2w9bm8gQEFNREVQQkFDS1NMQVNIQAotQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACURFUERJUj0kKERFUERJUikgJChDQ0RFUE1PREUpICQoZGVwY29tcCkgQEFNREVQQkFDS1NMQVNIQAotQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoQ09NUElMRSkgLWMgYCQoQ1lHUEFUSF9XKSAnJDwnYAotCi0uYy5sbzoKLUBhbV9fZmFzdGRlcENDX1RSVUVACSQoQU1fVl9DQykkKExUQ09NUElMRSkgLU1UICRAIC1NRCAtTVAgLU1GICQoREVQRElSKS8kKi5UcG8gLWMgLW8gJEAgJDwKLUBhbV9fZmFzdGRlcENDX1RSVUVACSQoQU1fVl9hdCkkKGFtX19tdikgJChERVBESVIpLyQqLlRwbyAkKERFUERJUikvJCouUGxvCi1AYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChBTV9WX0NDKSBAQU1fQkFDS1NMQVNIQAotQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACXNvdXJjZT0nJDwnIG9iamVjdD0nJEAnIGxpYnRvb2w9eWVzIEBBTURFUEJBQ0tTTEFTSEAKLUBBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAlERVBESVI9JChERVBESVIpICQoQ0NERVBNT0RFKSAkKGRlcGNvbXApIEBBTURFUEJBQ0tTTEFTSEAKLUBhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKExUQ09NUElMRSkgLWMgLW8gJEAgJDwKLUBNRU1PUllNR1JAXy5jOiBATUVNT1JZTUdSQC5jICQoQU5TSTJLTlIpCi0JJChDUFApICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKEFNX0NQUEZMQUdTKSAkKENQUEZMQUdTKSBgaWYgdGVzdCAtZiAkKHNyY2RpcikvQE1FTU9SWU1HUkAuYzsgdGhlbiBlY2hvICQoc3JjZGlyKS9ATUVNT1JZTUdSQC5jOyBlbHNlIGVjaG8gQE1FTU9SWU1HUkAuYzsgZmlgIHwgc2VkICdzL14jIFwoWzAtOV1cKS8jbGluZSBcMS8nIHwgJChBTlNJMktOUikgPiAkQCB8fCBybSAtZiAkQAotY2RqcGVnXy5jOiBjZGpwZWcuYyAkKEFOU0kyS05SKQotCSQoQ1BQKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChBTV9DUFBGTEFHUykgJChDUFBGTEFHUykgYGlmIHRlc3QgLWYgJChzcmNkaXIpL2NkanBlZy5jOyB0aGVuIGVjaG8gJChzcmNkaXIpL2NkanBlZy5jOyBlbHNlIGVjaG8gY2RqcGVnLmM7IGZpYCB8IHNlZCAncy9eIyBcKFswLTldXCkvI2xpbmUgXDEvJyB8ICQoQU5TSTJLTlIpID4gJEAgfHwgcm0gLWYgJEAKLWNqcGVnXy5jOiBjanBlZy5jICQoQU5TSTJLTlIpCi0JJChDUFApICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKEFNX0NQUEZMQUdTKSAkKENQUEZMQUdTKSBgaWYgdGVzdCAtZiAkKHNyY2RpcikvY2pwZWcuYzsgdGhlbiBlY2hvICQoc3JjZGlyKS9janBlZy5jOyBlbHNlIGVjaG8gY2pwZWcuYzsgZmlgIHwgc2VkICdzL14jIFwoWzAtOV1cKS8jbGluZSBcMS8nIHwgJChBTlNJMktOUikgPiAkQCB8fCBybSAtZiAkQAotZGpwZWdfLmM6IGRqcGVnLmMgJChBTlNJMktOUikKLQkkKENQUCkgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQoQU1fQ1BQRkxBR1MpICQoQ1BQRkxBR1MpIGBpZiB0ZXN0IC1mICQoc3JjZGlyKS9kanBlZy5jOyB0aGVuIGVjaG8gJChzcmNkaXIpL2RqcGVnLmM7IGVsc2UgZWNobyBkanBlZy5jOyBmaWAgfCBzZWQgJ3MvXiMgXChbMC05XVwpLyNsaW5lIFwxLycgfCAkKEFOU0kyS05SKSA+ICRAIHx8IHJtIC1mICRACi1qYXJpY29tXy5jOiBqYXJpY29tLmMgJChBTlNJMktOUikKLQkkKENQUCkgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQoQU1fQ1BQRkxBR1MpICQoQ1BQRkxBR1MpIGBpZiB0ZXN0IC1mICQoc3JjZGlyKS9qYXJpY29tLmM7IHRoZW4gZWNobyAkKHNyY2RpcikvamFyaWNvbS5jOyBlbHNlIGVjaG8gamFyaWNvbS5jOyBmaWAgfCBzZWQgJ3MvXiMgXChbMC05XVwpLyNsaW5lIFwxLycgfCAkKEFOU0kyS05SKSA+ICRAIHx8IHJtIC1mICRACi1qY2FwaW1pbl8uYzogamNhcGltaW4uYyAkKEFOU0kyS05SKQotCSQoQ1BQKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChBTV9DUFBGTEFHUykgJChDUFBGTEFHUykgYGlmIHRlc3QgLWYgJChzcmNkaXIpL2pjYXBpbWluLmM7IHRoZW4gZWNobyAkKHNyY2RpcikvamNhcGltaW4uYzsgZWxzZSBlY2hvIGpjYXBpbWluLmM7IGZpYCB8IHNlZCAncy9eIyBcKFswLTldXCkvI2xpbmUgXDEvJyB8ICQoQU5TSTJLTlIpID4gJEAgfHwgcm0gLWYgJEAKLWpjYXBpc3RkXy5jOiBqY2FwaXN0ZC5jICQoQU5TSTJLTlIpCi0JJChDUFApICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKEFNX0NQUEZMQUdTKSAkKENQUEZMQUdTKSBgaWYgdGVzdCAtZiAkKHNyY2RpcikvamNhcGlzdGQuYzsgdGhlbiBlY2hvICQoc3JjZGlyKS9qY2FwaXN0ZC5jOyBlbHNlIGVjaG8gamNhcGlzdGQuYzsgZmlgIHwgc2VkICdzL14jIFwoWzAtOV1cKS8jbGluZSBcMS8nIHwgJChBTlNJMktOUikgPiAkQCB8fCBybSAtZiAkQAotamNhcml0aF8uYzogamNhcml0aC5jICQoQU5TSTJLTlIpCi0JJChDUFApICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKEFNX0NQUEZMQUdTKSAkKENQUEZMQUdTKSBgaWYgdGVzdCAtZiAkKHNyY2RpcikvamNhcml0aC5jOyB0aGVuIGVjaG8gJChzcmNkaXIpL2pjYXJpdGguYzsgZWxzZSBlY2hvIGpjYXJpdGguYzsgZmlgIHwgc2VkICdzL14jIFwoWzAtOV1cKS8jbGluZSBcMS8nIHwgJChBTlNJMktOUikgPiAkQCB8fCBybSAtZiAkQAotamNjb2VmY3RfLmM6IGpjY29lZmN0LmMgJChBTlNJMktOUikKLQkkKENQUCkgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQoQU1fQ1BQRkxBR1MpICQoQ1BQRkxBR1MpIGBpZiB0ZXN0IC1mICQoc3JjZGlyKS9qY2NvZWZjdC5jOyB0aGVuIGVjaG8gJChzcmNkaXIpL2pjY29lZmN0LmM7IGVsc2UgZWNobyBqY2NvZWZjdC5jOyBmaWAgfCBzZWQgJ3MvXiMgXChbMC05XVwpLyNsaW5lIFwxLycgfCAkKEFOU0kyS05SKSA+ICRAIHx8IHJtIC1mICRACi1qY2NvbG9yXy5jOiBqY2NvbG9yLmMgJChBTlNJMktOUikKLQkkKENQUCkgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQoQU1fQ1BQRkxBR1MpICQoQ1BQRkxBR1MpIGBpZiB0ZXN0IC1mICQoc3JjZGlyKS9qY2NvbG9yLmM7IHRoZW4gZWNobyAkKHNyY2RpcikvamNjb2xvci5jOyBlbHNlIGVjaG8gamNjb2xvci5jOyBmaWAgfCBzZWQgJ3MvXiMgXChbMC05XVwpLyNsaW5lIFwxLycgfCAkKEFOU0kyS05SKSA+ICRAIHx8IHJtIC1mICRACi1qY2RjdG1ncl8uYzogamNkY3RtZ3IuYyAkKEFOU0kyS05SKQotCSQoQ1BQKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChBTV9DUFBGTEFHUykgJChDUFBGTEFHUykgYGlmIHRlc3QgLWYgJChzcmNkaXIpL2pjZGN0bWdyLmM7IHRoZW4gZWNobyAkKHNyY2RpcikvamNkY3RtZ3IuYzsgZWxzZSBlY2hvIGpjZGN0bWdyLmM7IGZpYCB8IHNlZCAncy9eIyBcKFswLTldXCkvI2xpbmUgXDEvJyB8ICQoQU5TSTJLTlIpID4gJEAgfHwgcm0gLWYgJEAKLWpjaHVmZl8uYzogamNodWZmLmMgJChBTlNJMktOUikKLQkkKENQUCkgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQoQU1fQ1BQRkxBR1MpICQoQ1BQRkxBR1MpIGBpZiB0ZXN0IC1mICQoc3JjZGlyKS9qY2h1ZmYuYzsgdGhlbiBlY2hvICQoc3JjZGlyKS9qY2h1ZmYuYzsgZWxzZSBlY2hvIGpjaHVmZi5jOyBmaWAgfCBzZWQgJ3MvXiMgXChbMC05XVwpLyNsaW5lIFwxLycgfCAkKEFOU0kyS05SKSA+ICRAIHx8IHJtIC1mICRACi1qY2luaXRfLmM6IGpjaW5pdC5jICQoQU5TSTJLTlIpCi0JJChDUFApICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKEFNX0NQUEZMQUdTKSAkKENQUEZMQUdTKSBgaWYgdGVzdCAtZiAkKHNyY2RpcikvamNpbml0LmM7IHRoZW4gZWNobyAkKHNyY2RpcikvamNpbml0LmM7IGVsc2UgZWNobyBqY2luaXQuYzsgZmlgIHwgc2VkICdzL14jIFwoWzAtOV1cKS8jbGluZSBcMS8nIHwgJChBTlNJMktOUikgPiAkQCB8fCBybSAtZiAkQAotamNtYWluY3RfLmM6IGpjbWFpbmN0LmMgJChBTlNJMktOUikKLQkkKENQUCkgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQoQU1fQ1BQRkxBR1MpICQoQ1BQRkxBR1MpIGBpZiB0ZXN0IC1mICQoc3JjZGlyKS9qY21haW5jdC5jOyB0aGVuIGVjaG8gJChzcmNkaXIpL2pjbWFpbmN0LmM7IGVsc2UgZWNobyBqY21haW5jdC5jOyBmaWAgfCBzZWQgJ3MvXiMgXChbMC05XVwpLyNsaW5lIFwxLycgfCAkKEFOU0kyS05SKSA+ICRAIHx8IHJtIC1mICRACi1qY21hcmtlcl8uYzogamNtYXJrZXIuYyAkKEFOU0kyS05SKQotCSQoQ1BQKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChBTV9DUFBGTEFHUykgJChDUFBGTEFHUykgYGlmIHRlc3QgLWYgJChzcmNkaXIpL2pjbWFya2VyLmM7IHRoZW4gZWNobyAkKHNyY2RpcikvamNtYXJrZXIuYzsgZWxzZSBlY2hvIGpjbWFya2VyLmM7IGZpYCB8IHNlZCAncy9eIyBcKFswLTldXCkvI2xpbmUgXDEvJyB8ICQoQU5TSTJLTlIpID4gJEAgfHwgcm0gLWYgJEAKLWpjbWFzdGVyXy5jOiBqY21hc3Rlci5jICQoQU5TSTJLTlIpCi0JJChDUFApICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKEFNX0NQUEZMQUdTKSAkKENQUEZMQUdTKSBgaWYgdGVzdCAtZiAkKHNyY2RpcikvamNtYXN0ZXIuYzsgdGhlbiBlY2hvICQoc3JjZGlyKS9qY21hc3Rlci5jOyBlbHNlIGVjaG8gamNtYXN0ZXIuYzsgZmlgIHwgc2VkICdzL14jIFwoWzAtOV1cKS8jbGluZSBcMS8nIHwgJChBTlNJMktOUikgPiAkQCB8fCBybSAtZiAkQAotamNvbWFwaV8uYzogamNvbWFwaS5jICQoQU5TSTJLTlIpCi0JJChDUFApICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKEFNX0NQUEZMQUdTKSAkKENQUEZMQUdTKSBgaWYgdGVzdCAtZiAkKHNyY2RpcikvamNvbWFwaS5jOyB0aGVuIGVjaG8gJChzcmNkaXIpL2pjb21hcGkuYzsgZWxzZSBlY2hvIGpjb21hcGkuYzsgZmlgIHwgc2VkICdzL14jIFwoWzAtOV1cKS8jbGluZSBcMS8nIHwgJChBTlNJMktOUikgPiAkQCB8fCBybSAtZiAkQAotamNwYXJhbV8uYzogamNwYXJhbS5jICQoQU5TSTJLTlIpCi0JJChDUFApICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKEFNX0NQUEZMQUdTKSAkKENQUEZMQUdTKSBgaWYgdGVzdCAtZiAkKHNyY2RpcikvamNwYXJhbS5jOyB0aGVuIGVjaG8gJChzcmNkaXIpL2pjcGFyYW0uYzsgZWxzZSBlY2hvIGpjcGFyYW0uYzsgZmlgIHwgc2VkICdzL14jIFwoWzAtOV1cKS8jbGluZSBcMS8nIHwgJChBTlNJMktOUikgPiAkQCB8fCBybSAtZiAkQAotamNwcmVwY3RfLmM6IGpjcHJlcGN0LmMgJChBTlNJMktOUikKLQkkKENQUCkgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQoQU1fQ1BQRkxBR1MpICQoQ1BQRkxBR1MpIGBpZiB0ZXN0IC1mICQoc3JjZGlyKS9qY3ByZXBjdC5jOyB0aGVuIGVjaG8gJChzcmNkaXIpL2pjcHJlcGN0LmM7IGVsc2UgZWNobyBqY3ByZXBjdC5jOyBmaWAgfCBzZWQgJ3MvXiMgXChbMC05XVwpLyNsaW5lIFwxLycgfCAkKEFOU0kyS05SKSA+ICRAIHx8IHJtIC1mICRACi1qY3NhbXBsZV8uYzogamNzYW1wbGUuYyAkKEFOU0kyS05SKQotCSQoQ1BQKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChBTV9DUFBGTEFHUykgJChDUFBGTEFHUykgYGlmIHRlc3QgLWYgJChzcmNkaXIpL2pjc2FtcGxlLmM7IHRoZW4gZWNobyAkKHNyY2RpcikvamNzYW1wbGUuYzsgZWxzZSBlY2hvIGpjc2FtcGxlLmM7IGZpYCB8IHNlZCAncy9eIyBcKFswLTldXCkvI2xpbmUgXDEvJyB8ICQoQU5TSTJLTlIpID4gJEAgfHwgcm0gLWYgJEAKLWpjdHJhbnNfLmM6IGpjdHJhbnMuYyAkKEFOU0kyS05SKQotCSQoQ1BQKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChBTV9DUFBGTEFHUykgJChDUFBGTEFHUykgYGlmIHRlc3QgLWYgJChzcmNkaXIpL2pjdHJhbnMuYzsgdGhlbiBlY2hvICQoc3JjZGlyKS9qY3RyYW5zLmM7IGVsc2UgZWNobyBqY3RyYW5zLmM7IGZpYCB8IHNlZCAncy9eIyBcKFswLTldXCkvI2xpbmUgXDEvJyB8ICQoQU5TSTJLTlIpID4gJEAgfHwgcm0gLWYgJEAKLWpkYXBpbWluXy5jOiBqZGFwaW1pbi5jICQoQU5TSTJLTlIpCi0JJChDUFApICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKEFNX0NQUEZMQUdTKSAkKENQUEZMQUdTKSBgaWYgdGVzdCAtZiAkKHNyY2RpcikvamRhcGltaW4uYzsgdGhlbiBlY2hvICQoc3JjZGlyKS9qZGFwaW1pbi5jOyBlbHNlIGVjaG8gamRhcGltaW4uYzsgZmlgIHwgc2VkICdzL14jIFwoWzAtOV1cKS8jbGluZSBcMS8nIHwgJChBTlNJMktOUikgPiAkQCB8fCBybSAtZiAkQAotamRhcGlzdGRfLmM6IGpkYXBpc3RkLmMgJChBTlNJMktOUikKLQkkKENQUCkgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQoQU1fQ1BQRkxBR1MpICQoQ1BQRkxBR1MpIGBpZiB0ZXN0IC1mICQoc3JjZGlyKS9qZGFwaXN0ZC5jOyB0aGVuIGVjaG8gJChzcmNkaXIpL2pkYXBpc3RkLmM7IGVsc2UgZWNobyBqZGFwaXN0ZC5jOyBmaWAgfCBzZWQgJ3MvXiMgXChbMC05XVwpLyNsaW5lIFwxLycgfCAkKEFOU0kyS05SKSA+ICRAIHx8IHJtIC1mICRACi1qZGFyaXRoXy5jOiBqZGFyaXRoLmMgJChBTlNJMktOUikKLQkkKENQUCkgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQoQU1fQ1BQRkxBR1MpICQoQ1BQRkxBR1MpIGBpZiB0ZXN0IC1mICQoc3JjZGlyKS9qZGFyaXRoLmM7IHRoZW4gZWNobyAkKHNyY2RpcikvamRhcml0aC5jOyBlbHNlIGVjaG8gamRhcml0aC5jOyBmaWAgfCBzZWQgJ3MvXiMgXChbMC05XVwpLyNsaW5lIFwxLycgfCAkKEFOU0kyS05SKSA+ICRAIHx8IHJtIC1mICRACi1qZGF0YWRzdF8uYzogamRhdGFkc3QuYyAkKEFOU0kyS05SKQotCSQoQ1BQKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChBTV9DUFBGTEFHUykgJChDUFBGTEFHUykgYGlmIHRlc3QgLWYgJChzcmNkaXIpL2pkYXRhZHN0LmM7IHRoZW4gZWNobyAkKHNyY2RpcikvamRhdGFkc3QuYzsgZWxzZSBlY2hvIGpkYXRhZHN0LmM7IGZpYCB8IHNlZCAncy9eIyBcKFswLTldXCkvI2xpbmUgXDEvJyB8ICQoQU5TSTJLTlIpID4gJEAgfHwgcm0gLWYgJEAKLWpkYXRhc3JjXy5jOiBqZGF0YXNyYy5jICQoQU5TSTJLTlIpCi0JJChDUFApICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKEFNX0NQUEZMQUdTKSAkKENQUEZMQUdTKSBgaWYgdGVzdCAtZiAkKHNyY2RpcikvamRhdGFzcmMuYzsgdGhlbiBlY2hvICQoc3JjZGlyKS9qZGF0YXNyYy5jOyBlbHNlIGVjaG8gamRhdGFzcmMuYzsgZmlgIHwgc2VkICdzL14jIFwoWzAtOV1cKS8jbGluZSBcMS8nIHwgJChBTlNJMktOUikgPiAkQCB8fCBybSAtZiAkQAotamRjb2VmY3RfLmM6IGpkY29lZmN0LmMgJChBTlNJMktOUikKLQkkKENQUCkgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQoQU1fQ1BQRkxBR1MpICQoQ1BQRkxBR1MpIGBpZiB0ZXN0IC1mICQoc3JjZGlyKS9qZGNvZWZjdC5jOyB0aGVuIGVjaG8gJChzcmNkaXIpL2pkY29lZmN0LmM7IGVsc2UgZWNobyBqZGNvZWZjdC5jOyBmaWAgfCBzZWQgJ3MvXiMgXChbMC05XVwpLyNsaW5lIFwxLycgfCAkKEFOU0kyS05SKSA+ICRAIHx8IHJtIC1mICRACi1qZGNvbG9yXy5jOiBqZGNvbG9yLmMgJChBTlNJMktOUikKLQkkKENQUCkgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQoQU1fQ1BQRkxBR1MpICQoQ1BQRkxBR1MpIGBpZiB0ZXN0IC1mICQoc3JjZGlyKS9qZGNvbG9yLmM7IHRoZW4gZWNobyAkKHNyY2RpcikvamRjb2xvci5jOyBlbHNlIGVjaG8gamRjb2xvci5jOyBmaWAgfCBzZWQgJ3MvXiMgXChbMC05XVwpLyNsaW5lIFwxLycgfCAkKEFOU0kyS05SKSA+ICRAIHx8IHJtIC1mICRACi1qZGRjdG1ncl8uYzogamRkY3RtZ3IuYyAkKEFOU0kyS05SKQotCSQoQ1BQKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChBTV9DUFBGTEFHUykgJChDUFBGTEFHUykgYGlmIHRlc3QgLWYgJChzcmNkaXIpL2pkZGN0bWdyLmM7IHRoZW4gZWNobyAkKHNyY2RpcikvamRkY3RtZ3IuYzsgZWxzZSBlY2hvIGpkZGN0bWdyLmM7IGZpYCB8IHNlZCAncy9eIyBcKFswLTldXCkvI2xpbmUgXDEvJyB8ICQoQU5TSTJLTlIpID4gJEAgfHwgcm0gLWYgJEAKLWpkaHVmZl8uYzogamRodWZmLmMgJChBTlNJMktOUikKLQkkKENQUCkgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQoQU1fQ1BQRkxBR1MpICQoQ1BQRkxBR1MpIGBpZiB0ZXN0IC1mICQoc3JjZGlyKS9qZGh1ZmYuYzsgdGhlbiBlY2hvICQoc3JjZGlyKS9qZGh1ZmYuYzsgZWxzZSBlY2hvIGpkaHVmZi5jOyBmaWAgfCBzZWQgJ3MvXiMgXChbMC05XVwpLyNsaW5lIFwxLycgfCAkKEFOU0kyS05SKSA+ICRAIHx8IHJtIC1mICRACi1qZGlucHV0Xy5jOiBqZGlucHV0LmMgJChBTlNJMktOUikKLQkkKENQUCkgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQoQU1fQ1BQRkxBR1MpICQoQ1BQRkxBR1MpIGBpZiB0ZXN0IC1mICQoc3JjZGlyKS9qZGlucHV0LmM7IHRoZW4gZWNobyAkKHNyY2RpcikvamRpbnB1dC5jOyBlbHNlIGVjaG8gamRpbnB1dC5jOyBmaWAgfCBzZWQgJ3MvXiMgXChbMC05XVwpLyNsaW5lIFwxLycgfCAkKEFOU0kyS05SKSA+ICRAIHx8IHJtIC1mICRACi1qZG1haW5jdF8uYzogamRtYWluY3QuYyAkKEFOU0kyS05SKQotCSQoQ1BQKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChBTV9DUFBGTEFHUykgJChDUFBGTEFHUykgYGlmIHRlc3QgLWYgJChzcmNkaXIpL2pkbWFpbmN0LmM7IHRoZW4gZWNobyAkKHNyY2RpcikvamRtYWluY3QuYzsgZWxzZSBlY2hvIGpkbWFpbmN0LmM7IGZpYCB8IHNlZCAncy9eIyBcKFswLTldXCkvI2xpbmUgXDEvJyB8ICQoQU5TSTJLTlIpID4gJEAgfHwgcm0gLWYgJEAKLWpkbWFya2VyXy5jOiBqZG1hcmtlci5jICQoQU5TSTJLTlIpCi0JJChDUFApICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKEFNX0NQUEZMQUdTKSAkKENQUEZMQUdTKSBgaWYgdGVzdCAtZiAkKHNyY2RpcikvamRtYXJrZXIuYzsgdGhlbiBlY2hvICQoc3JjZGlyKS9qZG1hcmtlci5jOyBlbHNlIGVjaG8gamRtYXJrZXIuYzsgZmlgIHwgc2VkICdzL14jIFwoWzAtOV1cKS8jbGluZSBcMS8nIHwgJChBTlNJMktOUikgPiAkQCB8fCBybSAtZiAkQAotamRtYXN0ZXJfLmM6IGpkbWFzdGVyLmMgJChBTlNJMktOUikKLQkkKENQUCkgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQoQU1fQ1BQRkxBR1MpICQoQ1BQRkxBR1MpIGBpZiB0ZXN0IC1mICQoc3JjZGlyKS9qZG1hc3Rlci5jOyB0aGVuIGVjaG8gJChzcmNkaXIpL2pkbWFzdGVyLmM7IGVsc2UgZWNobyBqZG1hc3Rlci5jOyBmaWAgfCBzZWQgJ3MvXiMgXChbMC05XVwpLyNsaW5lIFwxLycgfCAkKEFOU0kyS05SKSA+ICRAIHx8IHJtIC1mICRACi1qZG1lcmdlXy5jOiBqZG1lcmdlLmMgJChBTlNJMktOUikKLQkkKENQUCkgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQoQU1fQ1BQRkxBR1MpICQoQ1BQRkxBR1MpIGBpZiB0ZXN0IC1mICQoc3JjZGlyKS9qZG1lcmdlLmM7IHRoZW4gZWNobyAkKHNyY2RpcikvamRtZXJnZS5jOyBlbHNlIGVjaG8gamRtZXJnZS5jOyBmaWAgfCBzZWQgJ3MvXiMgXChbMC05XVwpLyNsaW5lIFwxLycgfCAkKEFOU0kyS05SKSA+ICRAIHx8IHJtIC1mICRACi1qZHBvc3RjdF8uYzogamRwb3N0Y3QuYyAkKEFOU0kyS05SKQotCSQoQ1BQKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChBTV9DUFBGTEFHUykgJChDUFBGTEFHUykgYGlmIHRlc3QgLWYgJChzcmNkaXIpL2pkcG9zdGN0LmM7IHRoZW4gZWNobyAkKHNyY2RpcikvamRwb3N0Y3QuYzsgZWxzZSBlY2hvIGpkcG9zdGN0LmM7IGZpYCB8IHNlZCAncy9eIyBcKFswLTldXCkvI2xpbmUgXDEvJyB8ICQoQU5TSTJLTlIpID4gJEAgfHwgcm0gLWYgJEAKLWpkc2FtcGxlXy5jOiBqZHNhbXBsZS5jICQoQU5TSTJLTlIpCi0JJChDUFApICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKEFNX0NQUEZMQUdTKSAkKENQUEZMQUdTKSBgaWYgdGVzdCAtZiAkKHNyY2RpcikvamRzYW1wbGUuYzsgdGhlbiBlY2hvICQoc3JjZGlyKS9qZHNhbXBsZS5jOyBlbHNlIGVjaG8gamRzYW1wbGUuYzsgZmlgIHwgc2VkICdzL14jIFwoWzAtOV1cKS8jbGluZSBcMS8nIHwgJChBTlNJMktOUikgPiAkQCB8fCBybSAtZiAkQAotamR0cmFuc18uYzogamR0cmFucy5jICQoQU5TSTJLTlIpCi0JJChDUFApICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKEFNX0NQUEZMQUdTKSAkKENQUEZMQUdTKSBgaWYgdGVzdCAtZiAkKHNyY2RpcikvamR0cmFucy5jOyB0aGVuIGVjaG8gJChzcmNkaXIpL2pkdHJhbnMuYzsgZWxzZSBlY2hvIGpkdHJhbnMuYzsgZmlgIHwgc2VkICdzL14jIFwoWzAtOV1cKS8jbGluZSBcMS8nIHwgJChBTlNJMktOUikgPiAkQCB8fCBybSAtZiAkQAotamVycm9yXy5jOiBqZXJyb3IuYyAkKEFOU0kyS05SKQotCSQoQ1BQKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChBTV9DUFBGTEFHUykgJChDUFBGTEFHUykgYGlmIHRlc3QgLWYgJChzcmNkaXIpL2plcnJvci5jOyB0aGVuIGVjaG8gJChzcmNkaXIpL2plcnJvci5jOyBlbHNlIGVjaG8gamVycm9yLmM7IGZpYCB8IHNlZCAncy9eIyBcKFswLTldXCkvI2xpbmUgXDEvJyB8ICQoQU5TSTJLTlIpID4gJEAgfHwgcm0gLWYgJEAKLWpmZGN0Zmx0Xy5jOiBqZmRjdGZsdC5jICQoQU5TSTJLTlIpCi0JJChDUFApICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKEFNX0NQUEZMQUdTKSAkKENQUEZMQUdTKSBgaWYgdGVzdCAtZiAkKHNyY2RpcikvamZkY3RmbHQuYzsgdGhlbiBlY2hvICQoc3JjZGlyKS9qZmRjdGZsdC5jOyBlbHNlIGVjaG8gamZkY3RmbHQuYzsgZmlgIHwgc2VkICdzL14jIFwoWzAtOV1cKS8jbGluZSBcMS8nIHwgJChBTlNJMktOUikgPiAkQCB8fCBybSAtZiAkQAotamZkY3Rmc3RfLmM6IGpmZGN0ZnN0LmMgJChBTlNJMktOUikKLQkkKENQUCkgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQoQU1fQ1BQRkxBR1MpICQoQ1BQRkxBR1MpIGBpZiB0ZXN0IC1mICQoc3JjZGlyKS9qZmRjdGZzdC5jOyB0aGVuIGVjaG8gJChzcmNkaXIpL2pmZGN0ZnN0LmM7IGVsc2UgZWNobyBqZmRjdGZzdC5jOyBmaWAgfCBzZWQgJ3MvXiMgXChbMC05XVwpLyNsaW5lIFwxLycgfCAkKEFOU0kyS05SKSA+ICRAIHx8IHJtIC1mICRACi1qZmRjdGludF8uYzogamZkY3RpbnQuYyAkKEFOU0kyS05SKQotCSQoQ1BQKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChBTV9DUFBGTEFHUykgJChDUFBGTEFHUykgYGlmIHRlc3QgLWYgJChzcmNkaXIpL2pmZGN0aW50LmM7IHRoZW4gZWNobyAkKHNyY2RpcikvamZkY3RpbnQuYzsgZWxzZSBlY2hvIGpmZGN0aW50LmM7IGZpYCB8IHNlZCAncy9eIyBcKFswLTldXCkvI2xpbmUgXDEvJyB8ICQoQU5TSTJLTlIpID4gJEAgfHwgcm0gLWYgJEAKLWppZGN0Zmx0Xy5jOiBqaWRjdGZsdC5jICQoQU5TSTJLTlIpCi0JJChDUFApICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKEFNX0NQUEZMQUdTKSAkKENQUEZMQUdTKSBgaWYgdGVzdCAtZiAkKHNyY2RpcikvamlkY3RmbHQuYzsgdGhlbiBlY2hvICQoc3JjZGlyKS9qaWRjdGZsdC5jOyBlbHNlIGVjaG8gamlkY3RmbHQuYzsgZmlgIHwgc2VkICdzL14jIFwoWzAtOV1cKS8jbGluZSBcMS8nIHwgJChBTlNJMktOUikgPiAkQCB8fCBybSAtZiAkQAotamlkY3Rmc3RfLmM6IGppZGN0ZnN0LmMgJChBTlNJMktOUikKLQkkKENQUCkgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQoQU1fQ1BQRkxBR1MpICQoQ1BQRkxBR1MpIGBpZiB0ZXN0IC1mICQoc3JjZGlyKS9qaWRjdGZzdC5jOyB0aGVuIGVjaG8gJChzcmNkaXIpL2ppZGN0ZnN0LmM7IGVsc2UgZWNobyBqaWRjdGZzdC5jOyBmaWAgfCBzZWQgJ3MvXiMgXChbMC05XVwpLyNsaW5lIFwxLycgfCAkKEFOU0kyS05SKSA+ICRAIHx8IHJtIC1mICRACi1qaWRjdGludF8uYzogamlkY3RpbnQuYyAkKEFOU0kyS05SKQotCSQoQ1BQKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChBTV9DUFBGTEFHUykgJChDUFBGTEFHUykgYGlmIHRlc3QgLWYgJChzcmNkaXIpL2ppZGN0aW50LmM7IHRoZW4gZWNobyAkKHNyY2RpcikvamlkY3RpbnQuYzsgZWxzZSBlY2hvIGppZGN0aW50LmM7IGZpYCB8IHNlZCAncy9eIyBcKFswLTldXCkvI2xpbmUgXDEvJyB8ICQoQU5TSTJLTlIpID4gJEAgfHwgcm0gLWYgJEAKLWptZW1tZ3JfLmM6IGptZW1tZ3IuYyAkKEFOU0kyS05SKQotCSQoQ1BQKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChBTV9DUFBGTEFHUykgJChDUFBGTEFHUykgYGlmIHRlc3QgLWYgJChzcmNkaXIpL2ptZW1tZ3IuYzsgdGhlbiBlY2hvICQoc3JjZGlyKS9qbWVtbWdyLmM7IGVsc2UgZWNobyBqbWVtbWdyLmM7IGZpYCB8IHNlZCAncy9eIyBcKFswLTldXCkvI2xpbmUgXDEvJyB8ICQoQU5TSTJLTlIpID4gJEAgfHwgcm0gLWYgJEAKLWpwZWd0cmFuXy5jOiBqcGVndHJhbi5jICQoQU5TSTJLTlIpCi0JJChDUFApICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKEFNX0NQUEZMQUdTKSAkKENQUEZMQUdTKSBgaWYgdGVzdCAtZiAkKHNyY2RpcikvanBlZ3RyYW4uYzsgdGhlbiBlY2hvICQoc3JjZGlyKS9qcGVndHJhbi5jOyBlbHNlIGVjaG8ganBlZ3RyYW4uYzsgZmlgIHwgc2VkICdzL14jIFwoWzAtOV1cKS8jbGluZSBcMS8nIHwgJChBTlNJMktOUikgPiAkQCB8fCBybSAtZiAkQAotanF1YW50MV8uYzoganF1YW50MS5jICQoQU5TSTJLTlIpCi0JJChDUFApICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKEFNX0NQUEZMQUdTKSAkKENQUEZMQUdTKSBgaWYgdGVzdCAtZiAkKHNyY2RpcikvanF1YW50MS5jOyB0aGVuIGVjaG8gJChzcmNkaXIpL2pxdWFudDEuYzsgZWxzZSBlY2hvIGpxdWFudDEuYzsgZmlgIHwgc2VkICdzL14jIFwoWzAtOV1cKS8jbGluZSBcMS8nIHwgJChBTlNJMktOUikgPiAkQCB8fCBybSAtZiAkQAotanF1YW50Ml8uYzoganF1YW50Mi5jICQoQU5TSTJLTlIpCi0JJChDUFApICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKEFNX0NQUEZMQUdTKSAkKENQUEZMQUdTKSBgaWYgdGVzdCAtZiAkKHNyY2RpcikvanF1YW50Mi5jOyB0aGVuIGVjaG8gJChzcmNkaXIpL2pxdWFudDIuYzsgZWxzZSBlY2hvIGpxdWFudDIuYzsgZmlgIHwgc2VkICdzL14jIFwoWzAtOV1cKS8jbGluZSBcMS8nIHwgJChBTlNJMktOUikgPiAkQCB8fCBybSAtZiAkQAotanV0aWxzXy5jOiBqdXRpbHMuYyAkKEFOU0kyS05SKQotCSQoQ1BQKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChBTV9DUFBGTEFHUykgJChDUFBGTEFHUykgYGlmIHRlc3QgLWYgJChzcmNkaXIpL2p1dGlscy5jOyB0aGVuIGVjaG8gJChzcmNkaXIpL2p1dGlscy5jOyBlbHNlIGVjaG8ganV0aWxzLmM7IGZpYCB8IHNlZCAncy9eIyBcKFswLTldXCkvI2xpbmUgXDEvJyB8ICQoQU5TSTJLTlIpID4gJEAgfHwgcm0gLWYgJEAKLXJkYm1wXy5jOiByZGJtcC5jICQoQU5TSTJLTlIpCi0JJChDUFApICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKEFNX0NQUEZMQUdTKSAkKENQUEZMQUdTKSBgaWYgdGVzdCAtZiAkKHNyY2RpcikvcmRibXAuYzsgdGhlbiBlY2hvICQoc3JjZGlyKS9yZGJtcC5jOyBlbHNlIGVjaG8gcmRibXAuYzsgZmlgIHwgc2VkICdzL14jIFwoWzAtOV1cKS8jbGluZSBcMS8nIHwgJChBTlNJMktOUikgPiAkQCB8fCBybSAtZiAkQAotcmRjb2xtYXBfLmM6IHJkY29sbWFwLmMgJChBTlNJMktOUikKLQkkKENQUCkgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQoQU1fQ1BQRkxBR1MpICQoQ1BQRkxBR1MpIGBpZiB0ZXN0IC1mICQoc3JjZGlyKS9yZGNvbG1hcC5jOyB0aGVuIGVjaG8gJChzcmNkaXIpL3JkY29sbWFwLmM7IGVsc2UgZWNobyByZGNvbG1hcC5jOyBmaWAgfCBzZWQgJ3MvXiMgXChbMC05XVwpLyNsaW5lIFwxLycgfCAkKEFOU0kyS05SKSA+ICRAIHx8IHJtIC1mICRACi1yZGdpZl8uYzogcmRnaWYuYyAkKEFOU0kyS05SKQotCSQoQ1BQKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChBTV9DUFBGTEFHUykgJChDUFBGTEFHUykgYGlmIHRlc3QgLWYgJChzcmNkaXIpL3JkZ2lmLmM7IHRoZW4gZWNobyAkKHNyY2RpcikvcmRnaWYuYzsgZWxzZSBlY2hvIHJkZ2lmLmM7IGZpYCB8IHNlZCAncy9eIyBcKFswLTldXCkvI2xpbmUgXDEvJyB8ICQoQU5TSTJLTlIpID4gJEAgfHwgcm0gLWYgJEAKLXJkanBnY29tXy5jOiByZGpwZ2NvbS5jICQoQU5TSTJLTlIpCi0JJChDUFApICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKEFNX0NQUEZMQUdTKSAkKENQUEZMQUdTKSBgaWYgdGVzdCAtZiAkKHNyY2RpcikvcmRqcGdjb20uYzsgdGhlbiBlY2hvICQoc3JjZGlyKS9yZGpwZ2NvbS5jOyBlbHNlIGVjaG8gcmRqcGdjb20uYzsgZmlgIHwgc2VkICdzL14jIFwoWzAtOV1cKS8jbGluZSBcMS8nIHwgJChBTlNJMktOUikgPiAkQCB8fCBybSAtZiAkQAotcmRwcG1fLmM6IHJkcHBtLmMgJChBTlNJMktOUikKLQkkKENQUCkgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQoQU1fQ1BQRkxBR1MpICQoQ1BQRkxBR1MpIGBpZiB0ZXN0IC1mICQoc3JjZGlyKS9yZHBwbS5jOyB0aGVuIGVjaG8gJChzcmNkaXIpL3JkcHBtLmM7IGVsc2UgZWNobyByZHBwbS5jOyBmaWAgfCBzZWQgJ3MvXiMgXChbMC05XVwpLyNsaW5lIFwxLycgfCAkKEFOU0kyS05SKSA+ICRAIHx8IHJtIC1mICRACi1yZHJsZV8uYzogcmRybGUuYyAkKEFOU0kyS05SKQotCSQoQ1BQKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChBTV9DUFBGTEFHUykgJChDUFBGTEFHUykgYGlmIHRlc3QgLWYgJChzcmNkaXIpL3JkcmxlLmM7IHRoZW4gZWNobyAkKHNyY2RpcikvcmRybGUuYzsgZWxzZSBlY2hvIHJkcmxlLmM7IGZpYCB8IHNlZCAncy9eIyBcKFswLTldXCkvI2xpbmUgXDEvJyB8ICQoQU5TSTJLTlIpID4gJEAgfHwgcm0gLWYgJEAKLXJkc3dpdGNoXy5jOiByZHN3aXRjaC5jICQoQU5TSTJLTlIpCi0JJChDUFApICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKEFNX0NQUEZMQUdTKSAkKENQUEZMQUdTKSBgaWYgdGVzdCAtZiAkKHNyY2RpcikvcmRzd2l0Y2guYzsgdGhlbiBlY2hvICQoc3JjZGlyKS9yZHN3aXRjaC5jOyBlbHNlIGVjaG8gcmRzd2l0Y2guYzsgZmlgIHwgc2VkICdzL14jIFwoWzAtOV1cKS8jbGluZSBcMS8nIHwgJChBTlNJMktOUikgPiAkQCB8fCBybSAtZiAkQAotcmR0YXJnYV8uYzogcmR0YXJnYS5jICQoQU5TSTJLTlIpCi0JJChDUFApICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKEFNX0NQUEZMQUdTKSAkKENQUEZMQUdTKSBgaWYgdGVzdCAtZiAkKHNyY2RpcikvcmR0YXJnYS5jOyB0aGVuIGVjaG8gJChzcmNkaXIpL3JkdGFyZ2EuYzsgZWxzZSBlY2hvIHJkdGFyZ2EuYzsgZmlgIHwgc2VkICdzL14jIFwoWzAtOV1cKS8jbGluZSBcMS8nIHwgJChBTlNJMktOUikgPiAkQCB8fCBybSAtZiAkQAotdHJhbnN1cHBfLmM6IHRyYW5zdXBwLmMgJChBTlNJMktOUikKLQkkKENQUCkgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQoQU1fQ1BQRkxBR1MpICQoQ1BQRkxBR1MpIGBpZiB0ZXN0IC1mICQoc3JjZGlyKS90cmFuc3VwcC5jOyB0aGVuIGVjaG8gJChzcmNkaXIpL3RyYW5zdXBwLmM7IGVsc2UgZWNobyB0cmFuc3VwcC5jOyBmaWAgfCBzZWQgJ3MvXiMgXChbMC05XVwpLyNsaW5lIFwxLycgfCAkKEFOU0kyS05SKSA+ICRAIHx8IHJtIC1mICRACi13cmJtcF8uYzogd3JibXAuYyAkKEFOU0kyS05SKQotCSQoQ1BQKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChBTV9DUFBGTEFHUykgJChDUFBGTEFHUykgYGlmIHRlc3QgLWYgJChzcmNkaXIpL3dyYm1wLmM7IHRoZW4gZWNobyAkKHNyY2Rpcikvd3JibXAuYzsgZWxzZSBlY2hvIHdyYm1wLmM7IGZpYCB8IHNlZCAncy9eIyBcKFswLTldXCkvI2xpbmUgXDEvJyB8ICQoQU5TSTJLTlIpID4gJEAgfHwgcm0gLWYgJEAKLXdyZ2lmXy5jOiB3cmdpZi5jICQoQU5TSTJLTlIpCi0JJChDUFApICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKEFNX0NQUEZMQUdTKSAkKENQUEZMQUdTKSBgaWYgdGVzdCAtZiAkKHNyY2Rpcikvd3JnaWYuYzsgdGhlbiBlY2hvICQoc3JjZGlyKS93cmdpZi5jOyBlbHNlIGVjaG8gd3JnaWYuYzsgZmlgIHwgc2VkICdzL14jIFwoWzAtOV1cKS8jbGluZSBcMS8nIHwgJChBTlNJMktOUikgPiAkQCB8fCBybSAtZiAkQAotd3JqcGdjb21fLmM6IHdyanBnY29tLmMgJChBTlNJMktOUikKLQkkKENQUCkgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQoQU1fQ1BQRkxBR1MpICQoQ1BQRkxBR1MpIGBpZiB0ZXN0IC1mICQoc3JjZGlyKS93cmpwZ2NvbS5jOyB0aGVuIGVjaG8gJChzcmNkaXIpL3dyanBnY29tLmM7IGVsc2UgZWNobyB3cmpwZ2NvbS5jOyBmaWAgfCBzZWQgJ3MvXiMgXChbMC05XVwpLyNsaW5lIFwxLycgfCAkKEFOU0kyS05SKSA+ICRAIHx8IHJtIC1mICRACi13cnBwbV8uYzogd3JwcG0uYyAkKEFOU0kyS05SKQotCSQoQ1BQKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChBTV9DUFBGTEFHUykgJChDUFBGTEFHUykgYGlmIHRlc3QgLWYgJChzcmNkaXIpL3dycHBtLmM7IHRoZW4gZWNobyAkKHNyY2Rpcikvd3JwcG0uYzsgZWxzZSBlY2hvIHdycHBtLmM7IGZpYCB8IHNlZCAncy9eIyBcKFswLTldXCkvI2xpbmUgXDEvJyB8ICQoQU5TSTJLTlIpID4gJEAgfHwgcm0gLWYgJEAKLXdycmxlXy5jOiB3cnJsZS5jICQoQU5TSTJLTlIpCi0JJChDUFApICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKEFNX0NQUEZMQUdTKSAkKENQUEZMQUdTKSBgaWYgdGVzdCAtZiAkKHNyY2Rpcikvd3JybGUuYzsgdGhlbiBlY2hvICQoc3JjZGlyKS93cnJsZS5jOyBlbHNlIGVjaG8gd3JybGUuYzsgZmlgIHwgc2VkICdzL14jIFwoWzAtOV1cKS8jbGluZSBcMS8nIHwgJChBTlNJMktOUikgPiAkQCB8fCBybSAtZiAkQAotd3J0YXJnYV8uYzogd3J0YXJnYS5jICQoQU5TSTJLTlIpCi0JJChDUFApICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKEFNX0NQUEZMQUdTKSAkKENQUEZMQUdTKSBgaWYgdGVzdCAtZiAkKHNyY2Rpcikvd3J0YXJnYS5jOyB0aGVuIGVjaG8gJChzcmNkaXIpL3dydGFyZ2EuYzsgZWxzZSBlY2hvIHdydGFyZ2EuYzsgZmlgIHwgc2VkICdzL14jIFwoWzAtOV1cKS8jbGluZSBcMS8nIHwgJChBTlNJMktOUikgPiAkQCB8fCBybSAtZiAkQAotQE1FTU9SWU1HUkBfLiQoT0JKRVhUKSBATUVNT1JZTUdSQF8ubG8gY2RqcGVnXy4kKE9CSkVYVCkgY2RqcGVnXy5sbyBcCi1janBlZ18uJChPQkpFWFQpIGNqcGVnXy5sbyBkanBlZ18uJChPQkpFWFQpIGRqcGVnXy5sbyBcCi1qYXJpY29tXy4kKE9CSkVYVCkgamFyaWNvbV8ubG8gamNhcGltaW5fLiQoT0JKRVhUKSBqY2FwaW1pbl8ubG8gXAotamNhcGlzdGRfLiQoT0JKRVhUKSBqY2FwaXN0ZF8ubG8gamNhcml0aF8uJChPQkpFWFQpIGpjYXJpdGhfLmxvIFwKLWpjY29lZmN0Xy4kKE9CSkVYVCkgamNjb2VmY3RfLmxvIGpjY29sb3JfLiQoT0JKRVhUKSBqY2NvbG9yXy5sbyBcCi1qY2RjdG1ncl8uJChPQkpFWFQpIGpjZGN0bWdyXy5sbyBqY2h1ZmZfLiQoT0JKRVhUKSBqY2h1ZmZfLmxvIFwKLWpjaW5pdF8uJChPQkpFWFQpIGpjaW5pdF8ubG8gamNtYWluY3RfLiQoT0JKRVhUKSBqY21haW5jdF8ubG8gXAotamNtYXJrZXJfLiQoT0JKRVhUKSBqY21hcmtlcl8ubG8gamNtYXN0ZXJfLiQoT0JKRVhUKSBqY21hc3Rlcl8ubG8gXAotamNvbWFwaV8uJChPQkpFWFQpIGpjb21hcGlfLmxvIGpjcGFyYW1fLiQoT0JKRVhUKSBqY3BhcmFtXy5sbyBcCi1qY3ByZXBjdF8uJChPQkpFWFQpIGpjcHJlcGN0Xy5sbyBqY3NhbXBsZV8uJChPQkpFWFQpIGpjc2FtcGxlXy5sbyBcCi1qY3RyYW5zXy4kKE9CSkVYVCkgamN0cmFuc18ubG8gamRhcGltaW5fLiQoT0JKRVhUKSBqZGFwaW1pbl8ubG8gXAotamRhcGlzdGRfLiQoT0JKRVhUKSBqZGFwaXN0ZF8ubG8gamRhcml0aF8uJChPQkpFWFQpIGpkYXJpdGhfLmxvIFwKLWpkYXRhZHN0Xy4kKE9CSkVYVCkgamRhdGFkc3RfLmxvIGpkYXRhc3JjXy4kKE9CSkVYVCkgamRhdGFzcmNfLmxvIFwKLWpkY29lZmN0Xy4kKE9CSkVYVCkgamRjb2VmY3RfLmxvIGpkY29sb3JfLiQoT0JKRVhUKSBqZGNvbG9yXy5sbyBcCi1qZGRjdG1ncl8uJChPQkpFWFQpIGpkZGN0bWdyXy5sbyBqZGh1ZmZfLiQoT0JKRVhUKSBqZGh1ZmZfLmxvIFwKLWpkaW5wdXRfLiQoT0JKRVhUKSBqZGlucHV0Xy5sbyBqZG1haW5jdF8uJChPQkpFWFQpIGpkbWFpbmN0Xy5sbyBcCi1qZG1hcmtlcl8uJChPQkpFWFQpIGpkbWFya2VyXy5sbyBqZG1hc3Rlcl8uJChPQkpFWFQpIGpkbWFzdGVyXy5sbyBcCi1qZG1lcmdlXy4kKE9CSkVYVCkgamRtZXJnZV8ubG8gamRwb3N0Y3RfLiQoT0JKRVhUKSBqZHBvc3RjdF8ubG8gXAotamRzYW1wbGVfLiQoT0JKRVhUKSBqZHNhbXBsZV8ubG8gamR0cmFuc18uJChPQkpFWFQpIGpkdHJhbnNfLmxvIFwKLWplcnJvcl8uJChPQkpFWFQpIGplcnJvcl8ubG8gamZkY3RmbHRfLiQoT0JKRVhUKSBqZmRjdGZsdF8ubG8gXAotamZkY3Rmc3RfLiQoT0JKRVhUKSBqZmRjdGZzdF8ubG8gamZkY3RpbnRfLiQoT0JKRVhUKSBqZmRjdGludF8ubG8gXAotamlkY3RmbHRfLiQoT0JKRVhUKSBqaWRjdGZsdF8ubG8gamlkY3Rmc3RfLiQoT0JKRVhUKSBqaWRjdGZzdF8ubG8gXAotamlkY3RpbnRfLiQoT0JKRVhUKSBqaWRjdGludF8ubG8gam1lbW1ncl8uJChPQkpFWFQpIGptZW1tZ3JfLmxvIFwKLWpwZWd0cmFuXy4kKE9CSkVYVCkganBlZ3RyYW5fLmxvIGpxdWFudDFfLiQoT0JKRVhUKSBqcXVhbnQxXy5sbyBcCi1qcXVhbnQyXy4kKE9CSkVYVCkganF1YW50Ml8ubG8ganV0aWxzXy4kKE9CSkVYVCkganV0aWxzXy5sbyBcCi1yZGJtcF8uJChPQkpFWFQpIHJkYm1wXy5sbyByZGNvbG1hcF8uJChPQkpFWFQpIHJkY29sbWFwXy5sbyBcCi1yZGdpZl8uJChPQkpFWFQpIHJkZ2lmXy5sbyByZGpwZ2NvbV8uJChPQkpFWFQpIHJkanBnY29tXy5sbyBcCi1yZHBwbV8uJChPQkpFWFQpIHJkcHBtXy5sbyByZHJsZV8uJChPQkpFWFQpIHJkcmxlXy5sbyBcCi1yZHN3aXRjaF8uJChPQkpFWFQpIHJkc3dpdGNoXy5sbyByZHRhcmdhXy4kKE9CSkVYVCkgcmR0YXJnYV8ubG8gXAotdHJhbnN1cHBfLiQoT0JKRVhUKSB0cmFuc3VwcF8ubG8gd3JibXBfLiQoT0JKRVhUKSB3cmJtcF8ubG8gXAotd3JnaWZfLiQoT0JKRVhUKSB3cmdpZl8ubG8gd3JqcGdjb21fLiQoT0JKRVhUKSB3cmpwZ2NvbV8ubG8gXAotd3JwcG1fLiQoT0JKRVhUKSB3cnBwbV8ubG8gd3JybGVfLiQoT0JKRVhUKSB3cnJsZV8ubG8gXAotd3J0YXJnYV8uJChPQkpFWFQpIHdydGFyZ2FfLmxvIDogJChBTlNJMktOUikKLQotbW9zdGx5Y2xlYW4tbGlidG9vbDoKLQktcm0gLWYgKi5sbwotCi1jbGVhbi1saWJ0b29sOgotCS1ybSAtcmYgLmxpYnMgX2xpYnMKLQotZGlzdGNsZWFuLWxpYnRvb2w6Ci0JLXJtIC1mIGxpYnRvb2wgY29uZmlnLmx0Ci1pbnN0YWxsLW1hbjE6ICQobWFuX01BTlMpCi0JQCQoTk9STUFMX0lOU1RBTEwpCi0JdGVzdCAteiAiJChtYW4xZGlyKSIgfHwgJChNS0RJUl9QKSAiJChERVNURElSKSQobWFuMWRpcikiCi0JQGxpc3Q9Jyc7IHRlc3QgLW4gIiQobWFuMWRpcikiIHx8IGV4aXQgMDsgXAotCXsgZm9yIGkgaW4gJCRsaXN0OyBkbyBlY2hvICIkJGkiOyBkb25lOyBcCi0JbDI9JyQobWFuX01BTlMpJzsgZm9yIGkgaW4gJCRsMjsgZG8gZWNobyAiJCRpIjsgZG9uZSB8IFwKLQkgIHNlZCAtbiAnL1wuMVthLXpdKiQkL3AnOyBcCi0JfSB8IHdoaWxlIHJlYWQgcDsgZG8gXAotCSAgaWYgdGVzdCAtZiAkJHA7IHRoZW4gZD07IGVsc2UgZD0iJChzcmNkaXIpLyI7IGZpOyBcCi0JICBlY2hvICIkJGQkJHAiOyBlY2hvICIkJHAiOyBcCi0JZG9uZSB8IFwKLQlzZWQgLWUgJ247cywuKi8sLDtwO2g7cywuKlwuLCw7cyxeW14xXVswLTlhLXpdKiQkLDEsO3gnIFwKLQkgICAgICAtZSAncyxcLlswLTlhLXpdKiQkLCw7JCh0cmFuc2Zvcm0pO0c7cyxcbiwuLCcgfCBcCi0Jc2VkICdOO047cyxcbiwgLGcnIHwgeyBcCi0JbGlzdD07IHdoaWxlIHJlYWQgZmlsZSBiYXNlIGluc3Q7IGRvIFwKLQkgIGlmIHRlc3QgIiQkYmFzZSIgPSAiJCRpbnN0IjsgdGhlbiBsaXN0PSIkJGxpc3QgJCRmaWxlIjsgZWxzZSBcCi0JICAgIGVjaG8gIiAkKElOU1RBTExfREFUQSkgJyQkZmlsZScgJyQoREVTVERJUikkKG1hbjFkaXIpLyQkaW5zdCciOyBcCi0JICAgICQoSU5TVEFMTF9EQVRBKSAiJCRmaWxlIiAiJChERVNURElSKSQobWFuMWRpcikvJCRpbnN0IiB8fCBleGl0ICQkPzsgXAotCSAgZmk7IFwKLQlkb25lOyBcCi0JZm9yIGkgaW4gJCRsaXN0OyBkbyBlY2hvICIkJGkiOyBkb25lIHwgJChhbV9fYmFzZV9saXN0KSB8IFwKLQl3aGlsZSByZWFkIGZpbGVzOyBkbyBcCi0JICB0ZXN0IC16ICIkJGZpbGVzIiB8fCB7IFwKLQkgICAgZWNobyAiICQoSU5TVEFMTF9EQVRBKSAkJGZpbGVzICckKERFU1RESVIpJChtYW4xZGlyKSciOyBcCi0JICAgICQoSU5TVEFMTF9EQVRBKSAkJGZpbGVzICIkKERFU1RESVIpJChtYW4xZGlyKSIgfHwgZXhpdCAkJD87IH07IFwKLQlkb25lOyB9Ci0KLXVuaW5zdGFsbC1tYW4xOgotCUAkKE5PUk1BTF9VTklOU1RBTEwpCi0JQGxpc3Q9Jyc7IHRlc3QgLW4gIiQobWFuMWRpcikiIHx8IGV4aXQgMDsgXAotCWZpbGVzPWB7IGZvciBpIGluICQkbGlzdDsgZG8gZWNobyAiJCRpIjsgZG9uZTsgXAotCWwyPSckKG1hbl9NQU5TKSc7IGZvciBpIGluICQkbDI7IGRvIGVjaG8gIiQkaSI7IGRvbmUgfCBcCi0JICBzZWQgLW4gJy9cLjFbYS16XSokJC9wJzsgXAotCX0gfCBzZWQgLWUgJ3MsLiovLCw7aDtzLC4qXC4sLDtzLF5bXjFdWzAtOWEtel0qJCQsMSw7eCcgXAotCSAgICAgIC1lICdzLFwuWzAtOWEtel0qJCQsLDskKHRyYW5zZm9ybSk7RztzLFxuLC4sJ2A7IFwKLQl0ZXN0IC16ICIkJGZpbGVzIiB8fCB7IFwKLQkgIGVjaG8gIiAoIGNkICckKERFU1RESVIpJChtYW4xZGlyKScgJiYgcm0gLWYiICQkZmlsZXMgIikiOyBcCi0JICBjZCAiJChERVNURElSKSQobWFuMWRpcikiICYmIHJtIC1mICQkZmlsZXM7IH0KLWluc3RhbGwtaW5jbHVkZUhFQURFUlM6ICQoaW5jbHVkZV9IRUFERVJTKQotCUAkKE5PUk1BTF9JTlNUQUxMKQotCXRlc3QgLXogIiQoaW5jbHVkZWRpcikiIHx8ICQoTUtESVJfUCkgIiQoREVTVERJUikkKGluY2x1ZGVkaXIpIgotCUBsaXN0PSckKGluY2x1ZGVfSEVBREVSUyknOyB0ZXN0IC1uICIkKGluY2x1ZGVkaXIpIiB8fCBsaXN0PTsgXAotCWZvciBwIGluICQkbGlzdDsgZG8gXAotCSAgaWYgdGVzdCAtZiAiJCRwIjsgdGhlbiBkPTsgZWxzZSBkPSIkKHNyY2RpcikvIjsgZmk7IFwKLQkgIGVjaG8gIiQkZCQkcCI7IFwKLQlkb25lIHwgJChhbV9fYmFzZV9saXN0KSB8IFwKLQl3aGlsZSByZWFkIGZpbGVzOyBkbyBcCi0JICBlY2hvICIgJChJTlNUQUxMX0hFQURFUikgJCRmaWxlcyAnJChERVNURElSKSQoaW5jbHVkZWRpciknIjsgXAotCSAgJChJTlNUQUxMX0hFQURFUikgJCRmaWxlcyAiJChERVNURElSKSQoaW5jbHVkZWRpcikiIHx8IGV4aXQgJCQ/OyBcCi0JZG9uZQotCi11bmluc3RhbGwtaW5jbHVkZUhFQURFUlM6Ci0JQCQoTk9STUFMX1VOSU5TVEFMTCkKLQlAbGlzdD0nJChpbmNsdWRlX0hFQURFUlMpJzsgdGVzdCAtbiAiJChpbmNsdWRlZGlyKSIgfHwgbGlzdD07IFwKLQlmaWxlcz1gZm9yIHAgaW4gJCRsaXN0OyBkbyBlY2hvICQkcDsgZG9uZSB8IHNlZCAtZSAnc3xeLiovfHwnYDsgXAotCXRlc3QgLW4gIiQkZmlsZXMiIHx8IGV4aXQgMDsgXAotCWVjaG8gIiAoIGNkICckKERFU1RESVIpJChpbmNsdWRlZGlyKScgJiYgcm0gLWYiICQkZmlsZXMgIikiOyBcCi0JY2QgIiQoREVTVERJUikkKGluY2x1ZGVkaXIpIiAmJiBybSAtZiAkJGZpbGVzCi0KLUlEOiAkKEhFQURFUlMpICQoU09VUkNFUykgJChMSVNQKSAkKFRBR1NfRklMRVMpCi0JbGlzdD0nJChTT1VSQ0VTKSAkKEhFQURFUlMpICQoTElTUCkgJChUQUdTX0ZJTEVTKSc7IFwKLQl1bmlxdWU9YGZvciBpIGluICQkbGlzdDsgZG8gXAotCSAgICBpZiB0ZXN0IC1mICIkJGkiOyB0aGVuIGVjaG8gJCRpOyBlbHNlIGVjaG8gJChzcmNkaXIpLyQkaTsgZmk7IFwKLQkgIGRvbmUgfCBcCi0JICAkKEFXSykgJ3sgZmlsZXNbJCQwXSA9IDE7IG5vbmVtcHR5ID0gMTsgfSBcCi0JICAgICAgRU5EIHsgaWYgKG5vbmVtcHR5KSB7IGZvciAoaSBpbiBmaWxlcykgcHJpbnQgaTsgfTsgfSdgOyBcCi0JbWtpZCAtZklEICQkdW5pcXVlCi10YWdzOiBUQUdTCi0KLVRBR1M6ICAkKEhFQURFUlMpICQoU09VUkNFUykgamNvbmZpZy5jZmcgJChUQUdTX0RFUEVOREVOQ0lFUykgXAotCQkkKFRBR1NfRklMRVMpICQoTElTUCkKLQlzZXQgeDsgXAotCWhlcmU9YHB3ZGA7IFwKLQlsaXN0PSckKFNPVVJDRVMpICQoSEVBREVSUykgamNvbmZpZy5jZmcgJChMSVNQKSAkKFRBR1NfRklMRVMpJzsgXAotCXVuaXF1ZT1gZm9yIGkgaW4gJCRsaXN0OyBkbyBcCi0JICAgIGlmIHRlc3QgLWYgIiQkaSI7IHRoZW4gZWNobyAkJGk7IGVsc2UgZWNobyAkKHNyY2RpcikvJCRpOyBmaTsgXAotCSAgZG9uZSB8IFwKLQkgICQoQVdLKSAneyBmaWxlc1skJDBdID0gMTsgbm9uZW1wdHkgPSAxOyB9IFwKLQkgICAgICBFTkQgeyBpZiAobm9uZW1wdHkpIHsgZm9yIChpIGluIGZpbGVzKSBwcmludCBpOyB9OyB9J2A7IFwKLQlzaGlmdDsgXAotCWlmIHRlc3QgLXogIiQoRVRBR1NfQVJHUykkJCokJHVuaXF1ZSI7IHRoZW4gOjsgZWxzZSBcCi0JICB0ZXN0IC1uICIkJHVuaXF1ZSIgfHwgdW5pcXVlPSQkZW1wdHlfZml4OyBcCi0JICBpZiB0ZXN0ICQkIyAtZ3QgMDsgdGhlbiBcCi0JICAgICQoRVRBR1MpICQoRVRBR1NGTEFHUykgJChBTV9FVEFHU0ZMQUdTKSAkKEVUQUdTX0FSR1MpIFwKLQkgICAgICAiJCRAIiAkJHVuaXF1ZTsgXAotCSAgZWxzZSBcCi0JICAgICQoRVRBR1MpICQoRVRBR1NGTEFHUykgJChBTV9FVEFHU0ZMQUdTKSAkKEVUQUdTX0FSR1MpIFwKLQkgICAgICAkJHVuaXF1ZTsgXAotCSAgZmk7IFwKLQlmaQotY3RhZ3M6IENUQUdTCi1DVEFHUzogICQoSEVBREVSUykgJChTT1VSQ0VTKSBqY29uZmlnLmNmZyAkKFRBR1NfREVQRU5ERU5DSUVTKSBcCi0JCSQoVEFHU19GSUxFUykgJChMSVNQKQotCWxpc3Q9JyQoU09VUkNFUykgJChIRUFERVJTKSBqY29uZmlnLmNmZyAkKExJU1ApICQoVEFHU19GSUxFUyknOyBcCi0JdW5pcXVlPWBmb3IgaSBpbiAkJGxpc3Q7IGRvIFwKLQkgICAgaWYgdGVzdCAtZiAiJCRpIjsgdGhlbiBlY2hvICQkaTsgZWxzZSBlY2hvICQoc3JjZGlyKS8kJGk7IGZpOyBcCi0JICBkb25lIHwgXAotCSAgJChBV0spICd7IGZpbGVzWyQkMF0gPSAxOyBub25lbXB0eSA9IDE7IH0gXAotCSAgICAgIEVORCB7IGlmIChub25lbXB0eSkgeyBmb3IgKGkgaW4gZmlsZXMpIHByaW50IGk7IH07IH0nYDsgXAotCXRlc3QgLXogIiQoQ1RBR1NfQVJHUykkJHVuaXF1ZSIgXAotCSAgfHwgJChDVEFHUykgJChDVEFHU0ZMQUdTKSAkKEFNX0NUQUdTRkxBR1MpICQoQ1RBR1NfQVJHUykgXAotCSAgICAgJCR1bmlxdWUKLQotR1RBR1M6Ci0JaGVyZT1gJChhbV9fY2QpICQodG9wX2J1aWxkZGlyKSAmJiBwd2RgIFwKLQkgICYmICQoYW1fX2NkKSAkKHRvcF9zcmNkaXIpIFwKLQkgICYmIGd0YWdzIC1pICQoR1RBR1NfQVJHUykgIiQkaGVyZSIKLQotZGlzdGNsZWFuLXRhZ3M6Ci0JLXJtIC1mIFRBR1MgSUQgR1RBR1MgR1JUQUdTIEdTWU1TIEdQQVRIIHRhZ3MKLWNoZWNrLWFtOiBhbGwtYW0KLQkkKE1BS0UpICQoQU1fTUFLRUZMQUdTKSBjaGVjay1sb2NhbAotY2hlY2s6IGNoZWNrLWFtCi1hbGwtYW06IE1ha2VmaWxlICQoQU5TSTJLTlIpICQoTFRMSUJSQVJJRVMpICQoUFJPR1JBTVMpICQoTUFOUykgXAotCQkkKEhFQURFUlMpIGpjb25maWcuaAotaW5zdGFsbC1iaW5QUk9HUkFNUzogaW5zdGFsbC1saWJMVExJQlJBUklFUwotCi1pbnN0YWxsZGlyczoKLQlmb3IgZGlyIGluICIkKERFU1RESVIpJChsaWJkaXIpIiAiJChERVNURElSKSQoYmluZGlyKSIgIiQoREVTVERJUikkKG1hbjFkaXIpIiAiJChERVNURElSKSQoaW5jbHVkZWRpcikiOyBkbyBcCi0JICB0ZXN0IC16ICIkJGRpciIgfHwgJChNS0RJUl9QKSAiJCRkaXIiOyBcCi0JZG9uZQotaW5zdGFsbDogaW5zdGFsbC1hbQotaW5zdGFsbC1leGVjOiBpbnN0YWxsLWV4ZWMtYW0KLWluc3RhbGwtZGF0YTogaW5zdGFsbC1kYXRhLWFtCi11bmluc3RhbGw6IHVuaW5zdGFsbC1hbQotCi1pbnN0YWxsLWFtOiBhbGwtYW0KLQlAJChNQUtFKSAkKEFNX01BS0VGTEFHUykgaW5zdGFsbC1leGVjLWFtIGluc3RhbGwtZGF0YS1hbQotCi1pbnN0YWxsY2hlY2s6IGluc3RhbGxjaGVjay1hbQotaW5zdGFsbC1zdHJpcDoKLQkkKE1BS0UpICQoQU1fTUFLRUZMQUdTKSBJTlNUQUxMX1BST0dSQU09IiQoSU5TVEFMTF9TVFJJUF9QUk9HUkFNKSIgXAotCSAgaW5zdGFsbF9zaF9QUk9HUkFNPSIkKElOU1RBTExfU1RSSVBfUFJPR1JBTSkiIElOU1RBTExfU1RSSVBfRkxBRz0tcyBcCi0JICBgdGVzdCAteiAnJChTVFJJUCknIHx8IFwKLQkgICAgZWNobyAiSU5TVEFMTF9QUk9HUkFNX0VOVj1TVFJJUFBST0c9JyQoU1RSSVApJyJgIGluc3RhbGwKLW1vc3RseWNsZWFuLWdlbmVyaWM6Ci0KLWNsZWFuLWdlbmVyaWM6Ci0JLXRlc3QgLXogIiQoQ0xFQU5GSUxFUykiIHx8IHJtIC1mICQoQ0xFQU5GSUxFUykKLQotZGlzdGNsZWFuLWdlbmVyaWM6Ci0JLXRlc3QgLXogIiQoQ09ORklHX0NMRUFOX0ZJTEVTKSIgfHwgcm0gLWYgJChDT05GSUdfQ0xFQU5fRklMRVMpCi0JLXRlc3QgLiA9ICIkKHNyY2RpcikiIHx8IHRlc3QgLXogIiQoQ09ORklHX0NMRUFOX1ZQQVRIX0ZJTEVTKSIgfHwgcm0gLWYgJChDT05GSUdfQ0xFQU5fVlBBVEhfRklMRVMpCi0KLW1haW50YWluZXItY2xlYW4tZ2VuZXJpYzoKLQlAZWNobyAiVGhpcyBjb21tYW5kIGlzIGludGVuZGVkIGZvciBtYWludGFpbmVycyB0byB1c2UiCi0JQGVjaG8gIml0IGRlbGV0ZXMgZmlsZXMgdGhhdCBtYXkgcmVxdWlyZSBzcGVjaWFsIHRvb2xzIHRvIHJlYnVpbGQuIgotY2xlYW46IGNsZWFuLWFtCi0KLWNsZWFuLWFtOiBjbGVhbi1iaW5QUk9HUkFNUyBjbGVhbi1nZW5lcmljIGNsZWFuLWtyZXh0cmEgXAotCWNsZWFuLWxpYkxUTElCUkFSSUVTIGNsZWFuLWxpYnRvb2wgbW9zdGx5Y2xlYW4tYW0KLQotZGlzdGNsZWFuOiBkaXN0Y2xlYW4tYW0KLQktcm0gLWYgJChhbV9fQ09ORklHX0RJU1RDTEVBTl9GSUxFUykKLQktcm0gLXJmIC4vJChERVBESVIpCi0JLXJtIC1mIE1ha2VmaWxlCi1kaXN0Y2xlYW4tYW06IGNsZWFuLWFtIGRpc3RjbGVhbi1jb21waWxlIGRpc3RjbGVhbi1nZW5lcmljIFwKLQlkaXN0Y2xlYW4taGRyIGRpc3RjbGVhbi1saWJ0b29sIGRpc3RjbGVhbi10YWdzCi0KLWR2aTogZHZpLWFtCi0KLWR2aS1hbToKLQotaHRtbDogaHRtbC1hbQotCi1odG1sLWFtOgotCi1pbmZvOiBpbmZvLWFtCi0KLWluZm8tYW06Ci0KLWluc3RhbGwtZGF0YS1hbTogaW5zdGFsbC1kYXRhLWxvY2FsIGluc3RhbGwtaW5jbHVkZUhFQURFUlMgaW5zdGFsbC1tYW4KLQotaW5zdGFsbC1kdmk6IGluc3RhbGwtZHZpLWFtCi0KLWluc3RhbGwtZHZpLWFtOgotCi1pbnN0YWxsLWV4ZWMtYW06IGluc3RhbGwtYmluUFJPR1JBTVMgaW5zdGFsbC1saWJMVExJQlJBUklFUwotCi1pbnN0YWxsLWh0bWw6IGluc3RhbGwtaHRtbC1hbQotCi1pbnN0YWxsLWh0bWwtYW06Ci0KLWluc3RhbGwtaW5mbzogaW5zdGFsbC1pbmZvLWFtCi0KLWluc3RhbGwtaW5mby1hbToKLQotaW5zdGFsbC1tYW46IGluc3RhbGwtbWFuMQotCi1pbnN0YWxsLXBkZjogaW5zdGFsbC1wZGYtYW0KLQotaW5zdGFsbC1wZGYtYW06Ci0KLWluc3RhbGwtcHM6IGluc3RhbGwtcHMtYW0KLQotaW5zdGFsbC1wcy1hbToKLQotaW5zdGFsbGNoZWNrLWFtOgotCi1tYWludGFpbmVyLWNsZWFuOiBtYWludGFpbmVyLWNsZWFuLWFtCi0JLXJtIC1mICQoYW1fX0NPTkZJR19ESVNUQ0xFQU5fRklMRVMpCi0JLXJtIC1yZiAkKHRvcF9zcmNkaXIpL2F1dG9tNHRlLmNhY2hlCi0JLXJtIC1yZiAuLyQoREVQRElSKQotCS1ybSAtZiBNYWtlZmlsZQotbWFpbnRhaW5lci1jbGVhbi1hbTogZGlzdGNsZWFuLWFtIG1haW50YWluZXItY2xlYW4tZ2VuZXJpYwotCi1tb3N0bHljbGVhbjogbW9zdGx5Y2xlYW4tYW0KLQotbW9zdGx5Y2xlYW4tYW06IG1vc3RseWNsZWFuLWNvbXBpbGUgbW9zdGx5Y2xlYW4tZ2VuZXJpYyBtb3N0bHljbGVhbi1rciBcCi0JbW9zdGx5Y2xlYW4tbGlidG9vbAotCi1wZGY6IHBkZi1hbQotCi1wZGYtYW06Ci0KLXBzOiBwcy1hbQotCi1wcy1hbToKLQotdW5pbnN0YWxsLWFtOiB1bmluc3RhbGwtYmluUFJPR1JBTVMgdW5pbnN0YWxsLWluY2x1ZGVIRUFERVJTIFwKLQl1bmluc3RhbGwtbGliTFRMSUJSQVJJRVMgdW5pbnN0YWxsLWxvY2FsIHVuaW5zdGFsbC1tYW4KLQotdW5pbnN0YWxsLW1hbjogdW5pbnN0YWxsLW1hbjEKLQotLk1BS0U6IGFsbCBjaGVjay1hbSBpbnN0YWxsLWFtIGluc3RhbGwtc3RyaXAKLQotLlBIT05ZOiBDVEFHUyBHVEFHUyBhbGwgYWxsLWFtIGFtLS1yZWZyZXNoIGNoZWNrIGNoZWNrLWFtIGNoZWNrLWxvY2FsIFwKLQljbGVhbiBjbGVhbi1iaW5QUk9HUkFNUyBjbGVhbi1nZW5lcmljIGNsZWFuLWtyZXh0cmEgXAotCWNsZWFuLWxpYkxUTElCUkFSSUVTIGNsZWFuLWxpYnRvb2wgY3RhZ3MgZGlzdGNsZWFuIFwKLQlkaXN0Y2xlYW4tY29tcGlsZSBkaXN0Y2xlYW4tZ2VuZXJpYyBkaXN0Y2xlYW4taGRyIFwKLQlkaXN0Y2xlYW4tbGlidG9vbCBkaXN0Y2xlYW4tdGFncyBkdmkgZHZpLWFtIGh0bWwgaHRtbC1hbSBpbmZvIFwKLQlpbmZvLWFtIGluc3RhbGwgaW5zdGFsbC1hbSBpbnN0YWxsLWJpblBST0dSQU1TIGluc3RhbGwtZGF0YSBcCi0JaW5zdGFsbC1kYXRhLWFtIGluc3RhbGwtZGF0YS1sb2NhbCBpbnN0YWxsLWR2aSBpbnN0YWxsLWR2aS1hbSBcCi0JaW5zdGFsbC1leGVjIGluc3RhbGwtZXhlYy1hbSBpbnN0YWxsLWh0bWwgaW5zdGFsbC1odG1sLWFtIFwKLQlpbnN0YWxsLWluY2x1ZGVIRUFERVJTIGluc3RhbGwtaW5mbyBpbnN0YWxsLWluZm8tYW0gXAotCWluc3RhbGwtbGliTFRMSUJSQVJJRVMgaW5zdGFsbC1tYW4gaW5zdGFsbC1tYW4xIGluc3RhbGwtcGRmIFwKLQlpbnN0YWxsLXBkZi1hbSBpbnN0YWxsLXBzIGluc3RhbGwtcHMtYW0gaW5zdGFsbC1zdHJpcCBcCi0JaW5zdGFsbGNoZWNrIGluc3RhbGxjaGVjay1hbSBpbnN0YWxsZGlycyBtYWludGFpbmVyLWNsZWFuIFwKLQltYWludGFpbmVyLWNsZWFuLWdlbmVyaWMgbW9zdGx5Y2xlYW4gbW9zdGx5Y2xlYW4tY29tcGlsZSBcCi0JbW9zdGx5Y2xlYW4tZ2VuZXJpYyBtb3N0bHljbGVhbi1rciBtb3N0bHljbGVhbi1saWJ0b29sIHBkZiBcCi0JcGRmLWFtIHBzIHBzLWFtIHRhZ3MgdW5pbnN0YWxsIHVuaW5zdGFsbC1hbSBcCi0JdW5pbnN0YWxsLWJpblBST0dSQU1TIHVuaW5zdGFsbC1pbmNsdWRlSEVBREVSUyBcCi0JdW5pbnN0YWxsLWxpYkxUTElCUkFSSUVTIHVuaW5zdGFsbC1sb2NhbCB1bmluc3RhbGwtbWFuIFwKLQl1bmluc3RhbGwtbWFuMQotCi0KLSMgSW5zdGFsbCBqY29uZmlnLmgKLWluc3RhbGwtZGF0YS1sb2NhbDoKLQkkKG1raW5zdGFsbGRpcnMpICQoREVTVERJUikkKGluY2x1ZGVkaXIpCi0JJChJTlNUQUxMX0hFQURFUikgamNvbmZpZy5oICQoREVTVERJUikkKGluY2x1ZGVkaXIpL2pjb25maWcuaAotCi0jIFVuaW5zdGFsbCBqY29uZmlnLmgKLXVuaW5zdGFsbC1sb2NhbDoKLQlybSAtZiAkKERFU1RESVIpJChpbmNsdWRlZGlyKS9qY29uZmlnLmgKLQotIyBSdW4gdGVzdHMKLXRlc3Q6IGNoZWNrLWxvY2FsCi1jaGVjay1sb2NhbDoKLQlybSAtZiB0ZXN0b3V0KgotCS4vZGpwZWcgLWRjdCBpbnQgLXBwbSAtb3V0ZmlsZSB0ZXN0b3V0LnBwbSAgJChzcmNkaXIpL3Rlc3RvcmlnLmpwZwotCS4vZGpwZWcgLWRjdCBpbnQgLWJtcCAtY29sb3JzIDI1NiAtb3V0ZmlsZSB0ZXN0b3V0LmJtcCAgJChzcmNkaXIpL3Rlc3RvcmlnLmpwZwotCS4vY2pwZWcgLWRjdCBpbnQgLW91dGZpbGUgdGVzdG91dC5qcGcgICQoc3JjZGlyKS90ZXN0aW1nLnBwbQotCS4vZGpwZWcgLWRjdCBpbnQgLXBwbSAtb3V0ZmlsZSB0ZXN0b3V0cC5wcG0gJChzcmNkaXIpL3Rlc3Rwcm9nLmpwZwotCS4vY2pwZWcgLWRjdCBpbnQgLXByb2dyZXNzaXZlIC1vcHQgLW91dGZpbGUgdGVzdG91dHAuanBnICQoc3JjZGlyKS90ZXN0aW1nLnBwbQotCS4vanBlZ3RyYW4gLW91dGZpbGUgdGVzdG91dHQuanBnICQoc3JjZGlyKS90ZXN0cHJvZy5qcGcKLQljbXAgJChzcmNkaXIpL3Rlc3RpbWcucHBtIHRlc3RvdXQucHBtCi0JY21wICQoc3JjZGlyKS90ZXN0aW1nLmJtcCB0ZXN0b3V0LmJtcAotCWNtcCAkKHNyY2RpcikvdGVzdGltZy5qcGcgdGVzdG91dC5qcGcKLQljbXAgJChzcmNkaXIpL3Rlc3RpbWcucHBtIHRlc3RvdXRwLnBwbQotCWNtcCAkKHNyY2RpcikvdGVzdGltZ3AuanBnIHRlc3RvdXRwLmpwZwotCWNtcCAkKHNyY2RpcikvdGVzdG9yaWcuanBnIHRlc3RvdXR0LmpwZwotCi0jIFRlbGwgdmVyc2lvbnMgWzMuNTksMy42Mykgb2YgR05VIG1ha2UgdG8gbm90IGV4cG9ydCBhbGwgdmFyaWFibGVzLgotIyBPdGhlcndpc2UgYSBzeXN0ZW0gbGltaXQgKGZvciBTeXNWIGF0IGxlYXN0KSBtYXkgYmUgZXhjZWVkZWQuCi0uTk9FWFBPUlQ6CmRpZmYgLS1naXQgYS9SRUFETUUgYi9SRUFETUUKaW5kZXggNDUxMjY1ZC4uMmVhZDA5ZSAxMDA2NDQKLS0tIGEvUkVBRE1FCisrKyBiL1JFQURNRQpAQCAtMSwxMiArMSwxNSBAQAorbGlianBlZy10dXJibyBub3RlOiAgVGhpcyBmaWxlIGlzIG1vc3RseSB0YWtlbiBmcm9tIHRoZSBsaWJqcGVnIHY4YiBSRUFETUUKK2ZpbGUsIGFuZCBpdCBpcyBpbmNsdWRlZCBvbmx5IGZvciByZWZlcmVuY2UuICBTb21lIHBhcnRzIG9mIGl0IG1heSBub3QgYXBwbHkgdG8KK2xpYmpwZWctdHVyYm8uICBQbGVhc2Ugc2VlIFJFQURNRS10dXJiby50eHQgZm9yIGluZm9ybWF0aW9uIHNwZWNpZmljIHRvIHRoZQordHVyYm8gdmVyc2lvbi4KKworCiBUaGUgSW5kZXBlbmRlbnQgSlBFRyBHcm91cCdzIEpQRUcgc29mdHdhcmUKID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQogCi1SRUFETUUgZm9yIHJlbGVhc2UgOGMgb2YgMTYtSmFuLTIwMTEKLT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotCi1UaGlzIGRpc3RyaWJ1dGlvbiBjb250YWlucyB0aGUgZWlnaHRoIHB1YmxpYyByZWxlYXNlIG9mIHRoZSBJbmRlcGVuZGVudCBKUEVHCi1Hcm91cCdzIGZyZWUgSlBFRyBzb2Z0d2FyZS4gIFlvdSBhcmUgd2VsY29tZSB0byByZWRpc3RyaWJ1dGUgdGhpcyBzb2Z0d2FyZSBhbmQKLXRvIHVzZSBpdCBmb3IgYW55IHB1cnBvc2UsIHN1YmplY3QgdG8gdGhlIGNvbmRpdGlvbnMgdW5kZXIgTEVHQUwgSVNTVUVTLCBiZWxvdy4KK1RoaXMgZGlzdHJpYnV0aW9uIGNvbnRhaW5zIGEgcmVsZWFzZSBvZiB0aGUgSW5kZXBlbmRlbnQgSlBFRyBHcm91cCdzIGZyZWUgSlBFRworc29mdHdhcmUuICBZb3UgYXJlIHdlbGNvbWUgdG8gcmVkaXN0cmlidXRlIHRoaXMgc29mdHdhcmUgYW5kIHRvIHVzZSBpdCBmb3IgYW55CitwdXJwb3NlLCBzdWJqZWN0IHRvIHRoZSBjb25kaXRpb25zIHVuZGVyIExFR0FMIElTU1VFUywgYmVsb3cuCiAKIFRoaXMgc29mdHdhcmUgaXMgdGhlIHdvcmsgb2YgVG9tIExhbmUsIEd1aWRvIFZvbGxiZWRpbmcsIFBoaWxpcCBHbGFkc3RvbmUsCiBCaWxsIEFsbG9tYmVydCwgSmltIEJvdWNoZXIsIExlZSBDcm9ja2VyLCBCb2IgRnJpZXNlbmhhaG4sIEJlbiBKYWNrc29uLApAQCAtMjUsNyArMjgsNiBAQAogTEVHQUwgSVNTVUVTICAgICAgICBDb3B5cmlnaHQsIGxhY2sgb2Ygd2FycmFudHksIHRlcm1zIG9mIGRpc3RyaWJ1dGlvbi4KIFJFRkVSRU5DRVMgICAgICAgICAgV2hlcmUgdG8gbGVhcm4gbW9yZSBhYm91dCBKUEVHLgogQVJDSElWRSBMT0NBVElPTlMgICBXaGVyZSB0byBmaW5kIG5ld2VyIHZlcnNpb25zIG9mIHRoaXMgc29mdHdhcmUuCi1BQ0tOT1dMRURHTUVOVFMgICAgIFNwZWNpYWwgdGhhbmtzLgogRklMRSBGT1JNQVQgV0FSUyAgICBTb2Z0d2FyZSAqbm90KiB0byBnZXQuCiBUTyBETyAgICAgICAgICAgICAgIFBsYW5zIGZvciBmdXR1cmUgSUpHIHJlbGVhc2VzLgogCkBAIC01OSw3ICs2MSwxOSBAQAogCiBUaGlzIHBhY2thZ2UgY29udGFpbnMgQyBzb2Z0d2FyZSB0byBpbXBsZW1lbnQgSlBFRyBpbWFnZSBlbmNvZGluZywgZGVjb2RpbmcsCiBhbmQgdHJhbnNjb2RpbmcuICBKUEVHIChwcm9ub3VuY2VkICJqYXktcGVnIikgaXMgYSBzdGFuZGFyZGl6ZWQgY29tcHJlc3Npb24KLW1ldGhvZCBmb3IgZnVsbC1jb2xvciBhbmQgZ3JheS1zY2FsZSBpbWFnZXMuCittZXRob2QgZm9yIGZ1bGwtY29sb3IgYW5kIGdyYXktc2NhbGUgaW1hZ2VzLiAgSlBFRydzIHN0cm9uZyBzdWl0IGlzIGNvbXByZXNzaW5nCitwaG90b2dyYXBoaWMgaW1hZ2VzIG9yIG90aGVyIHR5cGVzIG9mIGltYWdlcyB3aGljaCBoYXZlIHNtb290aCBjb2xvciBhbmQKK2JyaWdodG5lc3MgdHJhbnNpdGlvbnMgYmV0d2VlbiBuZWlnaGJvcmluZyBwaXhlbHMuICBJbWFnZXMgd2l0aCBzaGFycCBsaW5lcyBvcgorb3RoZXIgYWJydXB0IGZlYXR1cmVzIG1heSBub3QgY29tcHJlc3Mgd2VsbCB3aXRoIEpQRUcsIGFuZCBhIGhpZ2hlciBKUEVHCitxdWFsaXR5IG1heSBoYXZlIHRvIGJlIHVzZWQgdG8gYXZvaWQgdmlzaWJsZSBjb21wcmVzc2lvbiBhcnRpZmFjdHMgd2l0aCBzdWNoCitpbWFnZXMuCisKK0pQRUcgaXMgbG9zc3ksIG1lYW5pbmcgdGhhdCB0aGUgb3V0cHV0IHBpeGVscyBhcmUgbm90IG5lY2Vzc2FyaWx5IGlkZW50aWNhbCB0bwordGhlIGlucHV0IHBpeGVscy4gIEhvd2V2ZXIsIG9uIHBob3RvZ3JhcGhpYyBjb250ZW50IGFuZCBvdGhlciAic21vb3RoIiBpbWFnZXMsCit2ZXJ5IGdvb2QgY29tcHJlc3Npb24gcmF0aW9zIGNhbiBiZSBvYnRhaW5lZCB3aXRoIG5vIHZpc2libGUgY29tcHJlc3Npb24KK2FydGlmYWN0cywgYW5kIGV4dHJlbWVseSBoaWdoIGNvbXByZXNzaW9uIHJhdGlvcyBhcmUgcG9zc2libGUgaWYgeW91IGFyZQord2lsbGluZyB0byBzYWNyaWZpY2UgaW1hZ2UgcXVhbGl0eSAoYnkgcmVkdWNpbmcgdGhlICJxdWFsaXR5IiBzZXR0aW5nIGluIHRoZQorY29tcHJlc3Nvci4pCiAKIFRoaXMgc29mdHdhcmUgaW1wbGVtZW50cyBKUEVHIGJhc2VsaW5lLCBleHRlbmRlZC1zZXF1ZW50aWFsLCBhbmQgcHJvZ3Jlc3NpdmUKIGNvbXByZXNzaW9uIHByb2Nlc3Nlcy4gIFByb3Zpc2lvbiBpcyBtYWRlIGZvciBzdXBwb3J0aW5nIGFsbCB2YXJpYW50cyBvZiB0aGVzZQpAQCAtMTE0LDcgKzEyOCw3IEBACiBmaXRuZXNzIGZvciBhIHBhcnRpY3VsYXIgcHVycG9zZS4gIFRoaXMgc29mdHdhcmUgaXMgcHJvdmlkZWQgIkFTIElTIiwgYW5kIHlvdSwKIGl0cyB1c2VyLCBhc3N1bWUgdGhlIGVudGlyZSByaXNrIGFzIHRvIGl0cyBxdWFsaXR5IGFuZCBhY2N1cmFjeS4KIAotVGhpcyBzb2Z0d2FyZSBpcyBjb3B5cmlnaHQgKEMpIDE5OTEtMjAxMSwgVGhvbWFzIEcuIExhbmUsIEd1aWRvIFZvbGxiZWRpbmcuCitUaGlzIHNvZnR3YXJlIGlzIGNvcHlyaWdodCAoQykgMTk5MS0yMDEwLCBUaG9tYXMgRy4gTGFuZSwgR3VpZG8gVm9sbGJlZGluZy4KIEFsbCBSaWdodHMgUmVzZXJ2ZWQgZXhjZXB0IGFzIHNwZWNpZmllZCBiZWxvdy4KIAogUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCB0byB1c2UsIGNvcHksIG1vZGlmeSwgYW5kIGRpc3RyaWJ1dGUgdGhpcwpAQCAtMjA1LDE0ICsyMTksNiBAQAogTWl0Y2hlbGwsIHB1Ymxpc2hlZCBieSBWYW4gTm9zdHJhbmQgUmVpbmhvbGQsIDE5OTMsIElTQk4gMC00NDItMDEyNzItMS4KIFByaWNlIFVTJDU5Ljk1LCA2MzggcHAuICBUaGUgYm9vayBpbmNsdWRlcyB0aGUgY29tcGxldGUgdGV4dCBvZiB0aGUgSVNPIEpQRUcKIHN0YW5kYXJkcyAoRElTIDEwOTE4LTEgYW5kIGRyYWZ0IERJUyAxMDkxOC0yKS4KLUFsdGhvdWdoIHRoaXMgaXMgYnkgZmFyIHRoZSBtb3N0IGRldGFpbGVkIGFuZCBjb21wcmVoZW5zaXZlIGV4cG9zaXRpb24gb2YKLUpQRUcgcHVibGljbHkgYXZhaWxhYmxlLCB3ZSBwb2ludCBvdXQgdGhhdCBpdCBpcyBzdGlsbCBtaXNzaW5nIGFuIGV4cGxhbmF0aW9uCi1vZiB0aGUgbW9zdCBlc3NlbnRpYWwgcHJvcGVydGllcyBhbmQgYWxnb3JpdGhtcyBvZiB0aGUgdW5kZXJseWluZyBEQ1QKLXRlY2hub2xvZ3kuCi1JZiB5b3UgdGhpbmsgdGhhdCB5b3Uga25vdyBhYm91dCBEQ1QtYmFzZWQgSlBFRyBhZnRlciByZWFkaW5nIHRoaXMgYm9vaywKLXRoZW4geW91IGFyZSBpbiBkZWx1c2lvbi4gIFRoZSByZWFsIGZ1bmRhbWVudGFscyBhbmQgY29ycmVzcG9uZGluZyBwb3RlbnRpYWwKLW9mIERDVC1iYXNlZCBKUEVHIGFyZSBub3QgcHVibGljbHkga25vd24gc28gZmFyLCBhbmQgdGhhdCBpcyB0aGUgcmVhc29uIGZvcgotYWxsIHRoZSBtaXN0YWtlbiBkZXZlbG9wbWVudHMgdGFraW5nIHBsYWNlIGluIHRoZSBpbWFnZSBjb2RpbmcgZG9tYWluLgogCiBUaGUgb3JpZ2luYWwgSlBFRyBzdGFuZGFyZCBpcyBkaXZpZGVkIGludG8gdHdvIHBhcnRzLCBQYXJ0IDEgYmVpbmcgdGhlIGFjdHVhbAogc3BlY2lmaWNhdGlvbiwgd2hpbGUgUGFydCAyIGNvdmVycyBjb21wbGlhbmNlIHRlc3RpbmcgbWV0aG9kcy4gIFBhcnQgMSBpcwpAQCAtMjIxLDEwICsyMjcsNiBAQAogMTA5MTgtMSwgSVRVLVQgVC44MS4gIFBhcnQgMiBpcyB0aXRsZWQgIkRpZ2l0YWwgQ29tcHJlc3Npb24gYW5kIENvZGluZyBvZgogQ29udGludW91cy10b25lIFN0aWxsIEltYWdlcywgUGFydCAyOiBDb21wbGlhbmNlIHRlc3RpbmciIGFuZCBoYXMgZG9jdW1lbnQKIG51bWJlcnMgSVNPL0lFQyBJUyAxMDkxOC0yLCBJVFUtVCBULjgzLgotSUpHIEpQRUcgOCBpbnRyb2R1Y2VzIGFuIGltcGxlbWVudGF0aW9uIG9mIHRoZSBKUEVHIFNtYXJ0U2NhbGUgZXh0ZW5zaW9uCi13aGljaCBpcyBzcGVjaWZpZWQgaW4gYSBjb250cmlidXRlZCBkb2N1bWVudCBhdCBJVFUgYW5kIElTTyB3aXRoIHRpdGxlICJJVFUtVAotSlBFRy1QbHVzIFByb3Bvc2FsIGZvciBFeHRlbmRpbmcgSVRVLVQgVC44MSBmb3IgQWR2YW5jZWQgSW1hZ2UgQ29kaW5nIiwgQXByaWwKLTIwMDYsIEdlbmV2YSwgU3dpdHplcmxhbmQuICBUaGUgbGF0ZXN0IHZlcnNpb24gb2YgdGhlIGRvY3VtZW50IGlzIFJldmlzaW9uIDMuCiAKIFRoZSBKUEVHIHN0YW5kYXJkIGRvZXMgbm90IHNwZWNpZnkgYWxsIGRldGFpbHMgb2YgYW4gaW50ZXJjaGFuZ2VhYmxlIGZpbGUKIGZvcm1hdC4gIEZvciB0aGUgb21pdHRlZCBkZXRhaWxzIHdlIGZvbGxvdyB0aGUgIkpGSUYiIGNvbnZlbnRpb25zLCByZXZpc2lvbgpAQCAtMjU0LDggKzI1Niw4IEBACiBUaGUgIm9mZmljaWFsIiBhcmNoaXZlIHNpdGUgZm9yIHRoaXMgc29mdHdhcmUgaXMgd3d3LmlqZy5vcmcuCiBUaGUgbW9zdCByZWNlbnQgcmVsZWFzZWQgdmVyc2lvbiBjYW4gYWx3YXlzIGJlIGZvdW5kIHRoZXJlIGluCiBkaXJlY3RvcnkgImZpbGVzIi4gIFRoaXMgcGFydGljdWxhciB2ZXJzaW9uIHdpbGwgYmUgYXJjaGl2ZWQgYXMKLWh0dHA6Ly93d3cuaWpnLm9yZy9maWxlcy9qcGVnc3JjLnY4Yy50YXIuZ3osIGFuZCBpbiBXaW5kb3dzLWNvbXBhdGlibGUKLSJ6aXAiIGFyY2hpdmUgZm9ybWF0IGFzIGh0dHA6Ly93d3cuaWpnLm9yZy9maWxlcy9qcGVnc3I4Yy56aXAuCitodHRwOi8vd3d3LmlqZy5vcmcvZmlsZXMvanBlZ3NyYy52OGIudGFyLmd6LCBhbmQgaW4gV2luZG93cy1jb21wYXRpYmxlCisiemlwIiBhcmNoaXZlIGZvcm1hdCBhcyBodHRwOi8vd3d3LmlqZy5vcmcvZmlsZXMvanBlZ3NyOGIuemlwLgogCiBUaGUgSlBFRyBGQVEgKEZyZXF1ZW50bHkgQXNrZWQgUXVlc3Rpb25zKSBhcnRpY2xlIGlzIGEgc291cmNlIG9mIHNvbWUKIGdlbmVyYWwgaW5mb3JtYXRpb24gYWJvdXQgSlBFRy4KQEAgLTI2OCw0NyArMjcwLDEyIEBACiAJc2VuZCB1c2VuZXQvbmV3cy5hbnN3ZXJzL2pwZWctZmFxL3BhcnQyCiAKIAotQUNLTk9XTEVER01FTlRTCi09PT09PT09PT09PT09PT0KLQotVGhhbmsgdG8gSnVlcmdlbiBCcnVkZXIgZm9yIHByb3ZpZGluZyBtZSB3aXRoIGEgY29weSBvZiB0aGUgY29tbW9uIERDVAotYWxnb3JpdGhtIGFydGljbGUsIG9ubHkgdG8gZmluZCBvdXQgdGhhdCBJIGhhZCBjb21lIHRvIHRoZSBzYW1lIHJlc3VsdAotaW4gYSBtb3JlIGRpcmVjdCBhbmQgY29tcHJlaGVuc2libGUgd2F5IHdpdGggYSBtb3JlIGdlbmVyYXRpdmUgYXBwcm9hY2guCi0KLVRoYW5rIHRvIElzdHZhbiBTZWJlc3R5ZW4gYW5kIEpvYW4gTC4gTWl0Y2hlbGwgZm9yIGludml0aW5nIG1lIHRvIHRoZQotSVRVIEpQRUcgKFN0dWR5IEdyb3VwIDE2KSBtZWV0aW5nIGluIEdlbmV2YSwgU3dpdHplcmxhbmQuCi0KLVRoYW5rIHRvIFRob21hcyBXaWVnYW5kIGFuZCBHYXJ5IFN1bGxpdmFuIGZvciBpbnZpdGluZyBtZSB0byB0aGUKLUpvaW50IFZpZGVvIFRlYW0gKE1QRUcgJiBJVFUpIG1lZXRpbmcgaW4gR2VuZXZhLCBTd2l0emVybGFuZC4KLQotVGhhbmsgdG8gSm9obiBLb3JlandhIGFuZCBNYXNzaW1vIEJhbGxlcmluaSBmb3IgaW52aXRpbmcgbWUgdG8KLWZydWl0ZnVsIGNvbnN1bHRhdGlvbnMgaW4gQm9zdG9uLCBNQSBhbmQgTWlsYW4sIEl0YWx5LgotCi1UaGFuayB0byBIZW5kcmlrIEVsc3RuZXIsIFJvbGFuZCBGYXNzYXVlciwgU2ltb25lIFp1Y2ssIEd1ZW50aGVyCi1NYWllci1HZXJiZXIsIFdhbHRlciBTdG9lYmVyLCBGcmVkIFNjaG1pdHosIGFuZCBOb3JiZXJ0IEJyYXVuYWdlbAotZm9yIGNvcnJlc3BvbmRpbmcgYnVzaW5lc3MgZGV2ZWxvcG1lbnQuCi0KLVRoYW5rIHRvIE5pY28gWnNjaGFjaCBhbmQgRGlyayBTdGVsbGluZyBvZiB0aGUgdGVjaG5pY2FsIHN1cHBvcnQgdGVhbQotYXQgdGhlIERpZ2l0YWwgSW1hZ2VzIGNvbXBhbnkgaW4gSGFsbGUgZm9yIHByb3ZpZGluZyBtZSB3aXRoIGV4dHJhCi1lcXVpcG1lbnQgZm9yIGNvbmZpZ3VyYXRpb24gdGVzdHMuCi0KLVRoYW5rIHRvIFJpY2hhcmQgRi4gTHlvbiAodGhlbiBvZiBGb3Zlb24gSW5jLikgZm9yIGZydWl0ZnVsCi1jb21tdW5pY2F0aW9uIGFib3V0IEpQRUcgY29uZmlndXJhdGlvbiBpbiBTaWdtYSBQaG90byBQcm8gc29mdHdhcmUuCi0KLVRoYW5rIHRvIEFuZHJldyBGaW5rZW5zdGFkdCBmb3IgaG9zdGluZyB0aGUgaWpnLm9yZyBzaXRlLgotCi1MYXN0IGJ1dCBub3QgbGVhc3Qgc3BlY2lhbCB0aGFuayB0byBUaG9tYXMgRy4gTGFuZSBmb3IgdGhlIG9yaWdpbmFsCi1kZXNpZ24gYW5kIGRldmVsb3BtZW50IG9mIHRoaXMgc2luZ3VsYXIgc29mdHdhcmUgcGFja2FnZS4KLQotCiBGSUxFIEZPUk1BVCBXQVJTCiA9PT09PT09PT09PT09PT09CiAKIFRoZSBJU08gSlBFRyBzdGFuZGFyZHMgY29tbWl0dGVlIGFjdHVhbGx5IHByb21vdGVzIGRpZmZlcmVudCBmb3JtYXRzIGxpa2UKICJKUEVHIDIwMDAiIG9yICJKUEVHIFhSIiB3aGljaCBhcmUgaW5jb21wYXRpYmxlIHdpdGggb3JpZ2luYWwgRENULWJhc2VkCi1KUEVHIGFuZCB3aGljaCBhcmUgYmFzZWQgb24gZmF1bHR5IHRlY2hub2xvZ2llcy4gIElKRyB0aGVyZWZvcmUgZG9lcyBub3QKLWFuZCB3aWxsIG5vdCBzdXBwb3J0IHN1Y2ggbW9tZW50YXJ5IG1pc3Rha2VzIChzZWUgUkVGRVJFTkNFUykuCi1XZSBoYXZlIGxpdHRsZSBvciBubyBzeW1wYXRoeSBmb3IgdGhlIHByb21vdGlvbiBvZiB0aGVzZSBmb3JtYXRzLiAgSW5kZWVkLAorSlBFRy4gIElKRyB0aGVyZWZvcmUgZG9lcyBub3Qgc3VwcG9ydCB0aGVzZSBmb3JtYXRzIChzZWUgUkVGRVJFTkNFUykuICBJbmRlZWQsCiBvbmUgb2YgdGhlIG9yaWdpbmFsIHJlYXNvbnMgZm9yIGRldmVsb3BpbmcgdGhpcyBmcmVlIHNvZnR3YXJlIHdhcyB0byBoZWxwCiBmb3JjZSBjb252ZXJnZW5jZSBvbiBjb21tb24sIGludGVyb3BlcmFibGUgZm9ybWF0IHN0YW5kYXJkcyBmb3IgSlBFRyBmaWxlcy4KIERvbid0IHVzZSBhbiBpbmNvbXBhdGlibGUgZmlsZSBmb3JtYXQhCkBAIC0zMTksOCArMjg2LDQgQEAKIFRPIERPCiA9PT09PQogCi1WZXJzaW9uIDggaXMgdGhlIGZpcnN0IHJlbGVhc2Ugb2YgYSBuZXcgZ2VuZXJhdGlvbiBKUEVHIHN0YW5kYXJkCi10byBvdmVyY29tZSB0aGUgbGltaXRhdGlvbnMgb2YgdGhlIG9yaWdpbmFsIEpQRUcgc3BlY2lmaWNhdGlvbi4KLU1vcmUgZmVhdHVyZXMgYXJlIGJlaW5nIHByZXBhcmVkIGZvciBjb21pbmcgcmVsZWFzZXMuLi4KLQogUGxlYXNlIHNlbmQgYnVnIHJlcG9ydHMsIG9mZmVycyBvZiBoZWxwLCBldGMuIHRvIGpwZWctaW5mb0B1Yy5hZy4KZGlmZiAtLWdpdCBhL1JFQURNRS10dXJiby50eHQgYi9SRUFETUUtdHVyYm8udHh0Cm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLmZlYzM0ZTAKLS0tIC9kZXYvbnVsbAorKysgYi9SRUFETUUtdHVyYm8udHh0CkBAIC0wLDAgKzEsMzA0IEBACisqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisqKiAgICAgQmFja2dyb3VuZAorKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorCitsaWJqcGVnLXR1cmJvIGlzIGEgZGVyaXZhdGl2ZSBvZiBsaWJqcGVnIHdoaWNoIHVzZXMgU0lNRCBpbnN0cnVjdGlvbnMgKE1NWCwKK1NTRTIsIGV0Yy4pIHRvIGFjY2VsZXJhdGUgYmFzZWxpbmUgSlBFRyBjb21wcmVzc2lvbiBhbmQgZGVjb21wcmVzc2lvbiBvbiB4ODYKK2FuZCB4ODYtNjQgc3lzdGVtcy4gIE9uIHN1Y2ggc3lzdGVtcywgbGlianBlZy10dXJibyBpcyBnZW5lcmFsbHkgMi00eCBhcyBmYXN0CithcyB0aGUgdW5tb2RpZmllZCB2ZXJzaW9uIG9mIGxpYmpwZWcsIGFsbCBlbHNlIGJlaW5nIGVxdWFsLgorCitsaWJqcGVnLXR1cmJvIHdhcyBvcmlnaW5hbGx5IGJhc2VkIG9uIGxpYmpwZWcvU0lNRCBieSBNaXlhc2FrYSBNYXNhcnUsIGJ1dAordGhlIFRpZ2VyVk5DIGFuZCBWaXJ0dWFsR0wgcHJvamVjdHMgbWFkZSBudW1lcm91cyBlbmhhbmNlbWVudHMgdG8gdGhlIGNvZGVjIGluCisyMDA5LCBpbmNsdWRpbmcgaW1wcm92ZWQgc3VwcG9ydCBmb3IgTWFjIE9TIFgsIDY0LWJpdCBzdXBwb3J0LCBzdXBwb3J0IGZvcgorMzItYml0IGFuZCBiaWcgZW5kaWFuIHBpeGVsIGZvcm1hdHMgKFJHQlgsIFhCR1IsIGV0Yy4pLCBhY2NlbGVyYXRlZCBIdWZmbWFuCitlbmNvZGluZy9kZWNvZGluZywgYW5kIHZhcmlvdXMgYnVnIGZpeGVzLiAgVGhlIGdvYWwgd2FzIHRvIHByb2R1Y2UgYSBmdWxseSBvcGVuCitzb3VyY2UgY29kZWMgdGhhdCBjb3VsZCByZXBsYWNlIHRoZSBwYXJ0aWFsbHkgY2xvc2VkIHNvdXJjZSBUdXJib0pQRUcvSVBQIGNvZGVjCit1c2VkIGJ5IFZpcnR1YWxHTCBhbmQgVHVyYm9WTkMuICBsaWJqcGVnLXR1cmJvIGdlbmVyYWxseSBwZXJmb3JtcyBpbiB0aGUgcmFuZ2UKK29mIDgwLTEyMCUgb2YgVHVyYm9KUEVHL0lQUC4gIEl0IGlzIGZhc3RlciBpbiBzb21lIGFyZWFzIGJ1dCBzbG93ZXIgaW4gb3RoZXJzLgorCitJbiBlYXJseSAyMDEwLCBsaWJqcGVnLXR1cmJvIHNwdW4gb2ZmIGludG8gaXRzIG93biBpbmRlcGVuZGVudCBwcm9qZWN0LCB3aXRoCit0aGUgZ29hbCBvZiBtYWtpbmcgaGlnaC1zcGVlZCBKUEVHIGNvbXByZXNzaW9uL2RlY29tcHJlc3Npb24gdGVjaG5vbG9neQorYXZhaWxhYmxlIHRvIGEgYnJvYWRlciByYW5nZSBvZiB1c2VycyBhbmQgZGV2ZWxvcGVycy4gIFRoZSBsaWJqcGVnLXR1cmJvIHNoYXJlZAorbGlicmFyaWVzIGNhbiBiZSB1c2VkIGFzIGRyb3AtaW4gcmVwbGFjZW1lbnRzIGZvciBsaWJqcGVnIG9uIG1vc3Qgc3lzdGVtcy4KKworCisqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisqKiAgICAgTGljZW5zZQorKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorCitUaGUgVHVyYm9KUEVHL09TUyB3cmFwcGVyLCBhcyB3ZWxsIGFzIHNvbWUgb2YgdGhlIG9wdGltaXphdGlvbnMgdG8gdGhlIEh1ZmZtYW4KK2VuY29kZXIgKGpjaHVmZi5jKSBhbmQgZGVjb2RlciAoamRodWZmLmMpLCB3ZXJlIGJvcnJvd2VkIGZyb20gVmlydHVhbEdMLCBhbmQKK3RodXMgYW55IGRpc3RyaWJ1dGlvbiBvZiBsaWJqcGVnLXR1cmJvIHdoaWNoIGluY2x1ZGVzIHRob3NlIGZpbGVzIG11c3QsIGFzIGEKK3dob2xlLCBiZSBzdWJqZWN0IHRvIHRoZSB0ZXJtcyBvZiB0aGUgd3hXaW5kb3dzIExpYnJhcnkgTGljZW5jZSwgVmVyc2lvbiAzLjEuCitBIGNvcHkgb2YgdGhpcyBsaWNlbnNlIGNhbiBiZSBmb3VuZCBpbiB0aGlzIGRpcmVjdG9yeSB1bmRlciBMSUNFTlNFLnR4dC4gIFRoZQord3hXaW5kb3dzIExpYnJhcnkgTGljZW5zZSBpcyBiYXNlZCBvbiB0aGUgTEdQTCBidXQgaW5jbHVkZXMgcHJvdmlzaW9ucyB3aGljaAorYWxsb3cgdGhlIExpYnJhcnkgdG8gYmUgc3RhdGljYWxseSBsaW5rZWQgaW50byBwcm9wcmlldGFyeSBsaWJyYXJpZXMgYW5kCithcHBsaWNhdGlvbnMgd2l0aG91dCByZXF1aXJpbmcgdGhlIHJlc3VsdGluZyBiaW5hcmllcyB0byBiZSBkaXN0cmlidXRlZCB1bmRlcgordGhlIHRlcm1zIG9mIHRoZSBMR1BMLgorCitUaGUgcmVzdCBvZiB0aGUgc291cmNlIGNvZGUsIGFwYXJ0IGZyb20gVHVyYm9KUEVHL09TUyBhbmQgdGhlIEh1ZmZtYW4gY29kZWMKK29wdGltaXphdGlvbnMsIGZhbGxzIHVuZGVyIGEgbGVzcyByZXN0cmljdGl2ZSwgQlNELXN0eWxlIGxpY2Vuc2UgKHNlZSBSRUFETUUuKQorWW91IGNhbiBjaG9vc2UgdG8gZGlzdHJpYnV0ZSBsaWJqcGVnLXR1cmJvLCBhcyBhIHdob2xlLCB1bmRlciB0aGlzIEJTRC1zdHlsZQorbGljZW5zZSBieSBzaW1wbHkgcmVtb3ZpbmcgVHVyYm9KUEVHL09TUyBhbmQgcmVwbGFjaW5nIHRoZSBvcHRpbWl6ZWQgamNodWZmLmMKK2FuZCBqZGh1ZmYuYyB3aXRoIHRoZWlyIHVub3B0aW1pemVkIGNvdW50ZXJwYXJ0cyBmcm9tIHRoZSBsaWJqcGVnIHY2YiBzb3VyY2UuCisKKworKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorKiogICAgIFVzaW5nIGxpYmpwZWctdHVyYm8KKyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KK1JlcGxhY2luZyBsaWJqcGVnIGF0IFJ1biBUaW1lCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorCitJZiBhIFVuaXggYXBwbGljYXRpb24gaXMgZHluYW1pY2FsbHkgbGlua2VkIHdpdGggbGlianBlZywgdGhlbiB5b3UgY2FuIHJlcGxhY2UKK2xpYmpwZWcgd2l0aCBsaWJqcGVnLXR1cmJvIGF0IHJ1biB0aW1lIGJ5IG1hbmlwdWxhdGluZyBMRF9MSUJSQVJZX1BBVEguCitGb3IgaW5zdGFuY2U6CisKKyAgW1VzaW5nIGxpYmpwZWddCisgID4gdGltZSBjanBlZyA8dmdsXzU2NzRfMDA5OC5wcG0gPnZnbF81Njc0XzAwOTguanBnCisgIHJlYWwgIDBtMC4zOTJzCisgIHVzZXIgIDBtMC4wNzRzCisgIHN5cyAgIDBtMC4wMjBzCisKKyAgW1VzaW5nIGxpYmpwZWctdHVyYm9dCisgID4gZXhwb3J0IExEX0xJQlJBUllfUEFUSD0vb3B0L2xpYmpwZWctdHVyYm8ve2xpYn06JExEX0xJQlJBUllfUEFUSAorICA+IHRpbWUgY2pwZWcgPHZnbF81Njc0XzAwOTgucHBtID52Z2xfNTY3NF8wMDk4LmpwZworICByZWFsICAwbTAuMTA5cworICB1c2VyICAwbTAuMDI5cworICBzeXMgICAwbTAuMDEwcworCitOT1RFOiB7bGlifSBjYW4gYmUgbGliLCBsaWIzMiwgbGliNjQsIG9yIGxpYi82NCwgZGVwZW5kaW5nIG9uIHRoZSBPL1MgYW5kCithcmNoaXRlY3R1cmUuCisKK1N5c3RlbSBhZG1pbmlzdHJhdG9ycyBjYW4gYWxzbyByZXBsYWNlIHRoZSBsaWJqcGVnIHN5bSBsaW5rcyBpbiAvdXNyL3tsaWJ9IHdpdGgKK2xpbmtzIHRvIHRoZSBsaWJqcGVnIGR5bmFtaWMgbGlicmFyeSBsb2NhdGVkIGluIC9vcHQvbGlianBlZy10dXJiby97bGlifS4gIFRoaXMKK3dpbGwgZWZmZWN0aXZlbHkgYWNjZWxlcmF0ZSBldmVyeSBkeW5hbWljYWxseSBsaW5rZWQgbGlianBlZyBhcHBsaWNhdGlvbiBvbiB0aGUKK3N5c3RlbS4KKworVGhlIGxpYmpwZWctdHVyYm8gU0RLIGZvciBWaXN1YWwgQysrIGluc3RhbGxzIHRoZSBsaWJqcGVnLXR1cmJvIERMTAorKGpwZWc2Mi5kbGwsIGpwZWc3LmRsbCwgb3IganBlZzguZGxsLCBkZXBlbmRpbmcgb24gd2hldGhlciBsaWJqcGVnIHY2YiwgdjcsIG9yCit2OCBlbXVsYXRpb24gaXMgZW5hYmxlZCkgaW50byBjOlxsaWJqcGVnLXR1cmJvWzY0XVxiaW4sIGFuZCB0aGUgUEFUSAorZW52aXJvbm1lbnQgdmFyaWFibGUgY2FuIGJlIG1vZGlmaWVkIHN1Y2ggdGhhdCB0aGlzIGRpcmVjdG9yeSBpcyBzZWFyY2hlZAorYmVmb3JlIGFueSBvdGhlcnMgdGhhdCBtaWdodCBjb250YWluIGEgbGlianBlZyBETEwuICBIb3dldmVyLCBpZiBhIGxpYmpwZWcKK0RMTCBleGlzdHMgaW4gYW4gYXBwbGljYXRpb24ncyBpbnN0YWxsIGRpcmVjdG9yeSwgdGhlbiBXaW5kb3dzIHdpbGwgbG9hZCB0aGlzCitETEwgZmlyc3Qgd2hlbmV2ZXIgdGhlIGFwcGxpY2F0aW9uIGlzIGxhdW5jaGVkLiAgVGh1cywgaWYgYW4gYXBwbGljYXRpb24gc2hpcHMKK3dpdGgganBlZzYyLmRsbCwganBlZzcuZGxsLCBvciBqcGVnOC5kbGwsIHRoZW4gYmFjayB1cCB0aGUgYXBwbGljYXRpb24ncwordmVyc2lvbiBvZiB0aGlzIERMTCBhbmQgY29weSBjOlxsaWJqcGVnLXR1cmJvWzY0XVxiaW5canBlZyouZGxsIGludG8gdGhlCithcHBsaWNhdGlvbidzIGluc3RhbGwgZGlyZWN0b3J5IHRvIGFjY2VsZXJhdGUgaXQuCisKK1RoZSB2ZXJzaW9uIG9mIHRoZSBsaWJqcGVnLXR1cmJvIERMTCBkaXN0cmlidXRlZCBpbiB0aGUgbGlianBlZy10dXJibyBTREsgZm9yCitWaXN1YWwgQysrIHJlcXVpcmVzIHRoZSBWaXN1YWwgQysrIDIwMDggQyBydW4gdGltZSBETEwgKG1zdmNyOTAuZGxsKS4KK21zdmNyOTAuZGxsIHNoaXBzIHdpdGggbW9yZSByZWNlbnQgdmVyc2lvbnMgb2YgV2luZG93cywgYnV0IHVzZXJzIG9mIG9sZGVyCitXaW5kb3dzIHJlbGVhc2VzIGNhbiBvYnRhaW4gaXQgZnJvbSB0aGUgVmlzdWFsIEMrKyAyMDA4IFJlZGlzdHJpYnV0YWJsZQorUGFja2FnZSwgd2hpY2ggaXMgYXZhaWxhYmxlIGFzIGEgZnJlZSBkb3dubG9hZCBmcm9tIE1pY3Jvc29mdCdzIHdlYiBzaXRlLgorCitOT1RFOiAgRmVhdHVyZXMgb2YgbGlianBlZyB3aGljaCByZXF1aXJlIHBhc3NpbmcgYSBDIHJ1biB0aW1lIHN0cnVjdHVyZSwgc3VjaAorYXMgYSBmaWxlIGhhbmRsZSwgZnJvbSBhbiBhcHBsaWNhdGlvbiB0byBsaWJqcGVnIHdpbGwgcHJvYmFibHkgbm90IHdvcmsgd2l0aAordGhlIHZlcnNpb24gb2YgdGhlIGxpYmpwZWctdHVyYm8gRExMIGRpc3RyaWJ1dGVkIGluIHRoZSBsaWJqcGVnLXR1cmJvIFNESyBmb3IKK1Zpc3VhbCBDKyssIHVubGVzcyB0aGUgYXBwbGljYXRpb24gaXMgYWxzbyBidWlsdCB0byB1c2UgdGhlIFZpc3VhbCBDKysgMjAwOCBDCitydW4gdGltZSBETEwuICBJbiBwYXJ0aWN1bGFyLCB0aGlzIGFmZmVjdHMganBlZ19zdGRpb19kZXN0KCkgYW5kCitqcGVnX3N0ZGlvX3NyYygpLgorCitNYWMgYXBwbGljYXRpb25zIHR5cGljYWxseSBlbWJlZCB0aGVpciBvd24gY29waWVzIG9mIHRoZSBsaWJqcGVnIGR5bGliIGluc2lkZQordGhlIChoaWRkZW4pIGFwcGxpY2F0aW9uIGJ1bmRsZSwgc28gaXQgaXMgbm90IHBvc3NpYmxlIHRvIGdsb2JhbGx5IHJlcGxhY2UKK2xpYmpwZWcgb24gT1MgWCBzeXN0ZW1zLiAgSWYgYW4gYXBwbGljYXRpb24gdXNlcyBhIHNoYXJlZCBsaWJyYXJ5IHZlcnNpb24gb2YKK2xpYmpwZWcsIHRoZW4gaXQgbWF5IGJlIHBvc3NpYmxlIHRvIHJlcGxhY2UgdGhlIGFwcGxpY2F0aW9uJ3MgdmVyc2lvbiBvZiBpdC4KK1RoaXMgd291bGQgZ2VuZXJhbGx5IGludm9sdmUgY29weWluZyBsaWJqcGVnLiouZHlsaWIgZnJvbSBsaWJqcGVnLXR1cmJvIGludG8KK3RoZSBhcHByb3ByaWF0ZSBwbGFjZSBpbiB0aGUgYXBwbGljYXRpb24gYnVuZGxlIGFuZCB1c2luZyBpbnN0YWxsX25hbWVfdG9vbCB0bworcmVwb2ludCB0aGUgZHlsaWIgdG8gdGhlIG5ldyBkaXJlY3RvcnkuICBUaGlzIHJlcXVpcmVzIGFuIGFkdmFuY2VkIGtub3dsZWRnZSBvZgorT1MgWCBhbmQgd291bGQgbm90IHN1cnZpdmUgYW4gdXBncmFkZSBvciBhIHJlLWluc3RhbGwgb2YgdGhlIGFwcGxpY2F0aW9uLgorVGh1cywgaXQgaXMgbm90IHJlY29tbWVuZGVkIGZvciBtb3N0IHVzZXJzLgorCis9PT09PT09PT09PT09PT09PT09PT09PQorUmVwbGFjaW5nIFR1cmJvSlBFRy9JUFAKKz09PT09PT09PT09PT09PT09PT09PT09CisKK2xpYmpwZWctdHVyYm8gaXMgYSBkcm9wLWluIHJlcGxhY2VtZW50IGZvciB0aGUgVHVyYm9KUEVHL0lQUCBTREsgdXNlZCBieQorVmlydHVhbEdMIDIuMS54IGFuZCBUdXJib1ZOQyAwLjYgKGFuZCBwcmlvci4pICBsaWJqcGVnLXR1cmJvIGNvbnRhaW5zIGEgd3JhcHBlcgorbGlicmFyeSAoVHVyYm9KUEVHL09TUykgdGhhdCBlbXVsYXRlcyB0aGUgVHVyYm9KUEVHIEFQSSB1c2luZyBsaWJqcGVnLXR1cmJvCitpbnN0ZWFkIG9mIHRoZSBjbG9zZWQgc291cmNlIEludGVsIFBlcmZvcm1hbmNlIFByaW1pdGl2ZXMuICBZb3UgY2FuIHJlcGxhY2UgdGhlCitUdXJib0pQRUcvSVBQIHBhY2thZ2Ugb24gTGludXggc3lzdGVtcyB3aXRoIHRoZSBsaWJqcGVnLXR1cmJvIHBhY2thZ2UgaW4gb3JkZXIKK3RvIG1ha2UgZXhpc3RpbmcgcmVsZWFzZXMgb2YgVmlydHVhbEdMIDIuMS54IGFuZCBUdXJib1ZOQyAwLnggdXNlIHRoZSBuZXcgY29kZWMKK2F0IHJ1biB0aW1lLiAgTm90ZSB0aGF0IHRoZSA2NC1iaXQgbGlianBlZy10dXJibyBwYWNrYWdlcyBjb250YWluIG9ubHkgNjQtYml0CitiaW5hcmllcywgd2hlcmVhcyB0aGUgVHVyYm9KUEVHL0lQUCA2NC1iaXQgcGFja2FnZXMgY29udGFpbmVkIGJvdGggNjQtYml0IGFuZAorMzItYml0IGJpbmFyaWVzLiAgVGh1cywgdG8gcmVwbGFjZSBhIFR1cmJvSlBFRy9JUFAgNjQtYml0IHBhY2thZ2UsIGluc3RhbGwKK2JvdGggdGhlIDY0LWJpdCBhbmQgMzItYml0IHZlcnNpb25zIG9mIGxpYmpwZWctdHVyYm8uCisKK1lvdSBjYW4gYWxzbyBidWlsZCB0aGUgVmlydHVhbEdMIDIuMS54IGFuZCBUdXJib1ZOQyAwLjYgc291cmNlIGNvZGUgd2l0aAordGhlIGxpYmpwZWctdHVyYm8gU0RLIGluc3RlYWQgb2YgVHVyYm9KUEVHL0lQUC4gIEl0IHNob3VsZCB3b3JrIGlkZW50aWNhbGx5LgorbGlianBlZy10dXJibyBhbHNvIGluY2x1ZGVzIHN0YXRpYyBsaWJyYXJ5IHZlcnNpb25zIG9mIFR1cmJvSlBFRy9PU1MsIHdoaWNoCithcmUgdXNlZCB0byBidWlsZCBUdXJib1ZOQyAxLjAgYW5kIGxhdGVyLgorCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CitVc2luZyBsaWJqcGVnLXR1cmJvIGluIFlvdXIgT3duIFByb2dyYW1zCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisKK0ZvciB0aGUgbW9zdCBwYXJ0LCBsaWJqcGVnLXR1cmJvIHNob3VsZCB3b3JrIGlkZW50aWNhbGx5IHRvIGxpYmpwZWcsIHNvIGluCittb3N0IGNhc2VzLCBhbiBhcHBsaWNhdGlvbiBjYW4gYmUgYnVpbHQgYWdhaW5zdCBsaWJqcGVnIGFuZCB0aGVuIHJ1biBhZ2FpbnN0CitsaWJqcGVnLXR1cmJvLiAgT24gVW5peCBzeXN0ZW1zIChpbmNsdWRpbmcgQ3lnd2luKSwgeW91IGNhbiBidWlsZCBhZ2FpbnN0CitsaWJqcGVnLXR1cmJvIGluc3RlYWQgb2YgbGlianBlZyBieSBzZXR0aW5nCisKKyAgQ1BBVEg9L29wdC9saWJqcGVnLXR1cmJvL2luY2x1ZGUKKyAgYW5kCisgIExJQlJBUllfUEFUSD0vb3B0L2xpYmpwZWctdHVyYm8ve2xpYn0KKworKHtsaWJ9ID0gbGliMzIgb3IgbGliNjQsIGRlcGVuZGluZyBvbiB3aGV0aGVyIHlvdSBhcmUgYnVpbGRpbmcgYSAzMi1iaXQgb3IgYQorNjQtYml0IGFwcGxpY2F0aW9uLikKKworSWYgdXNpbmcgTWluR1csIHRoZW4gc2V0CisKKyAgQ1BBVEg9L2MvbGlianBlZy10dXJiby1nY2NbNjRdL2luY2x1ZGUKKyAgYW5kCisgIExJQlJBUllfUEFUSD0vYy9saWJqcGVnLXR1cmJvLWdjY1s2NF0vbGliCisKK0J1aWxkaW5nIGFnYWluc3QgbGlianBlZy10dXJibyBpcyB1c2VmdWwsIGZvciBpbnN0YW5jZSwgaWYgeW91IHdhbnQgdG8gYnVpbGQgYW4KK2FwcGxpY2F0aW9uIHRoYXQgbGV2ZXJhZ2VzIHRoZSBsaWJqcGVnLXR1cmJvIGNvbG9yc3BhY2UgZXh0ZW5zaW9ucyAoc2VlIGJlbG93LikKK09uIExpbnV4IGFuZCBTb2xhcmlzIHN5c3RlbXMsIHlvdSB3b3VsZCBzdGlsbCBuZWVkIHRvIG1hbmlwdWxhdGUKK0xEX0xJQlJBUllfUEFUSCBvciBjcmVhdGUgYXBwcm9wcmlhdGUgc3ltIGxpbmtzIHRvIHVzZSBsaWJqcGVnLXR1cmJvIGF0IHJ1bgordGltZS4gIE9uIHN1Y2ggc3lzdGVtcywgeW91IGNhbiBwYXNzIC1SIC9vcHQvbGlianBlZy10dXJiby97bGlifSB0byB0aGUgbGlua2VyCit0byBmb3JjZSB0aGUgdXNlIG9mIGxpYmpwZWctdHVyYm8gYXQgcnVuIHRpbWUgcmF0aGVyIHRoYW4gbGlianBlZyAoYWxzbyB1c2VmdWwKK2lmIHlvdSB3YW50IHRvIGxldmVyYWdlIHRoZSBjb2xvcnNwYWNlIGV4dGVuc2lvbnMpLCBvciB5b3UgY2FuIGxpbmsgYWdhaW5zdCB0aGUKK2xpYmpwZWctdHVyYm8gc3RhdGljIGxpYnJhcnkuCisKK1RvIGZvcmNlIGEgTGludXgsIFNvbGFyaXMsIG9yIE1pbkdXIGFwcGxpY2F0aW9uIHRvIGxpbmsgYWdhaW5zdCB0aGUgc3RhdGljCit2ZXJzaW9uIG9mIGxpYmpwZWctdHVyYm8sIHlvdSBjYW4gdXNlIHRoZSBmb2xsb3dpbmcgbGlua2VyIG9wdGlvbnM6CisKKyAgLVdsLC1Cc3RhdGljIC1sanBlZyAtV2wsLUJkeW5hbWljCisKK09uIE9TIFgsIHNpbXBseSBhZGQgL29wdC9saWJqcGVnLXR1cmJvL2xpYi9saWJqcGVnLmEgdG8gdGhlIGxpbmtlciBjb21tYW5kCitsaW5lICh0aGlzIGFsc28gd29ya3Mgb24gTGludXggYW5kIFNvbGFyaXMuKQorCitUbyBidWlsZCBWaXN1YWwgQysrIGFwcGxpY2F0aW9ucyB1c2luZyBsaWJqcGVnLXR1cmJvLCBhZGQKK2M6XGxpYmpwZWctdHVyYm9bNjRdXGluY2x1ZGUgdG8gdGhlIHN5c3RlbSBvciB1c2VyIElOQ0xVREUgZW52aXJvbm1lbnQKK3ZhcmlhYmxlIGFuZCBjOlxsaWJqcGVnLXR1cmJvWzY0XVxsaWIgdG8gdGhlIHN5c3RlbSBvciB1c2VyIExJQiBlbnZpcm9ubWVudAordmFyaWFibGUsIGFuZCB0aGVuIGxpbmsgYWdhaW5zdCBlaXRoZXIganBlZy5saWIgKHRvIHVzZSB0aGUgRExMIHZlcnNpb24gb2YKK2xpYmpwZWctdHVyYm8pIG9yIGpwZWctc3RhdGljLmxpYiAodG8gdXNlIHRoZSBzdGF0aWMgdmVyc2lvbiBvZiBsaWJqcGVnLXR1cmJvLikKKworPT09PT09PT09PT09PT09PT09PT09CitDb2xvcnNwYWNlIEV4dGVuc2lvbnMKKz09PT09PT09PT09PT09PT09PT09PQorCitsaWJqcGVnLXR1cmJvIGluY2x1ZGVzIGV4dGVuc2lvbnMgd2hpY2ggYWxsb3cgSlBFRyBpbWFnZXMgdG8gYmUgY29tcHJlc3NlZAorZGlyZWN0bHkgZnJvbSAoYW5kIGRlY29tcHJlc3NlZCBkaXJlY3RseSB0bykgYnVmZmVycyB3aGljaCB1c2UgQkdSLCBCR1JYLAorUkdCWCwgWEJHUiwgYW5kIFhSR0IgcGl4ZWwgb3JkZXJpbmcuICBUaGlzIGlzIGltcGxlbWVudGVkIHdpdGggc2l4IG5ldworY29sb3JzcGFjZSBjb25zdGFudHM6CisKKyAgSkNTX0VYVF9SR0IgICAvKiByZWQvZ3JlZW4vYmx1ZSAqLworICBKQ1NfRVhUX1JHQlggIC8qIHJlZC9ncmVlbi9ibHVlL3ggKi8KKyAgSkNTX0VYVF9CR1IgICAvKiBibHVlL2dyZWVuL3JlZCAqLworICBKQ1NfRVhUX0JHUlggIC8qIGJsdWUvZ3JlZW4vcmVkL3ggKi8KKyAgSkNTX0VYVF9YQkdSICAvKiB4L2JsdWUvZ3JlZW4vcmVkICovCisgIEpDU19FWFRfWFJHQiAgLyogeC9yZWQvZ3JlZW4vYmx1ZSAqLworCitTZXR0aW5nIGNpbmZvLmluX2NvbG9yX3NwYWNlIChjb21wcmVzc2lvbikgb3IgY2luZm8ub3V0X2NvbG9yX3NwYWNlCisoZGVjb21wcmVzc2lvbikgdG8gb25lIG9mIHRoZXNlIHZhbHVlcyB3aWxsIGNhdXNlIGxpYmpwZWctdHVyYm8gdG8gcmVhZCB0aGUKK3JlZCwgZ3JlZW4sIGFuZCBibHVlIHZhbHVlcyBmcm9tIChvciB3cml0ZSB0aGVtIHRvKSB0aGUgYXBwcm9wcmlhdGUgcG9zaXRpb24gaW4KK3RoZSBwaXhlbCB3aGVuIFlVViBjb252ZXJzaW9uIGlzIHBlcmZvcm1lZC4KKworWW91ciBhcHBsaWNhdGlvbiBjYW4gY2hlY2sgZm9yIHRoZSBleGlzdGVuY2Ugb2YgdGhlc2UgZXh0ZW5zaW9ucyBhdCBjb21waWxlCit0aW1lIHdpdGg6CisKKyAgI2lmZGVmIEpDU19FWFRFTlNJT05TCisKK0F0IHJ1biB0aW1lLCBhdHRlbXB0aW5nIHRvIHVzZSB0aGVzZSBleHRlbnNpb25zIHdpdGggYSB2ZXJzaW9uIG9mIGxpYmpwZWcKK3RoYXQgZG9lc24ndCBzdXBwb3J0IHRoZW0gd2lsbCByZXN1bHQgaW4gYSAiQm9ndXMgaW5wdXQgY29sb3JzcGFjZSIgZXJyb3IuCisKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorbGlianBlZyB2NyBhbmQgdjggQVBJL0FCSSBzdXBwb3J0Cis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKworbGlianBlZyB2NyBhbmQgdjggYWRkZWQgbmV3IGZlYXR1cmVzIHRvIHRoZSBBUEkvQUJJLCBhbmQsIHVuZm9ydHVuYXRlbHksIHRoZQorY29tcHJlc3Npb24gYW5kIGRlY29tcHJlc3Npb24gc3RydWN0dXJlcyB3ZXJlIGV4dGVuZGVkIGluIGEgYmFja3dhcmQtCitpbmNvbXBhdGlibGUgbWFubmVyIHRvIGFjY29tbW9kYXRlIHRoZXNlIGZlYXR1cmVzLiAgVGh1cywgcHJvZ3JhbXMgd2hpY2ggYXJlCitidWlsdCB0byB1c2UgbGlianBlZyB2NyBvciB2OCBkaWQgbm90IHdvcmsgd2l0aCBsaWJqcGVnLXR1cmJvLCBzaW5jZSBpdCBpcworYmFzZWQgb24gdGhlIGxpYmpwZWcgdjZiIGNvZGUgYmFzZS4gIEFsdGhvdWdoIGxpYmpwZWcgdjcgYW5kIHY4IGFyZSBzdGlsbCBub3QKK2FzIHdpZGVseSB1c2VkIGFzIHY2YiwgZW5vdWdoIHByb2dyYW1zIChpbmNsdWRpbmcgYSBmZXcgTGludXggZGlzdHJvcykgaGF2ZQorbWFkZSB0aGUgc3dpdGNoIHRoYXQgaXQgd2FzIGRlc2lyYWJsZSB0byBwcm92aWRlIHN1cHBvcnQgZm9yIHRoZSBsaWJqcGVnIHY3L3Y4CitBUEkvQUJJIGluIGxpYmpwZWctdHVyYm8uCisKK1NvbWUgb2YgdGhlIGxpYmpwZWcgdjcgYW5kIHY4IGZlYXR1cmVzIC0tIERDVCBzY2FsaW5nLCB0byBuYW1lIG9uZSAtLSBpbnZvbHZlCitkZWVwIG1vZGlmaWNhdGlvbnMgdG8gdGhlIGNvZGUgd2hpY2ggY2Fubm90IGJlIGFjY29tbW9kYXRlZCBieSBsaWJqcGVnLXR1cmJvCit3aXRob3V0IGVpdGhlciBicmVha2luZyBjb21wYXRpYmlsaXR5IHdpdGggbGlianBlZyB2NmIgb3IgcHJvZHVjaW5nIGFuCit1bnN1cHBvcnRhYmxlIG1lc3MuICBJbiBvcmRlciB0byBmdWxseSBzdXBwb3J0IGxpYmpwZWcgdjggd2l0aCBhbGwgb2YgaXRzCitmZWF0dXJlcywgd2Ugd291bGQgaGF2ZSB0byBlc3NlbnRpYWxseSBwb3J0IHRoZSBTSU1EIGV4dGVuc2lvbnMgdG8gdGhlIGxpYmpwZWcKK3Y4IGNvZGUgYmFzZSBhbmQgbWFpbnRhaW4gdHdvIHNlcGFyYXRlIGNvZGUgdHJlZXMuICBXZSBhcmUgaGVzaXRhbnQgdG8gZG8gdGhpcwordW50aWwvdW5sZXNzIHRoZSBuZXdlciBsaWJqcGVnIGNvZGUgYmFzZXMgZ2FybmVyIG1vcmUgY29tbXVuaXR5IHN1cHBvcnQgYW5kCitpbnZvbHZlbWVudCBhbmQgdW50aWwvdW5sZXNzIHdlIGhhdmUgc29tZSBub3Rpb24gb2Ygd2hldGhlciBmdXR1cmUgbGlianBlZworcmVsZWFzZXMgd2lsbCBhbHNvIGJlIGJhY2t3YXJkLWluY29tcGF0aWJsZS4KKworQnkgcGFzc2luZyBhbiBhcmd1bWVudCBvZiAtLXdpdGgtanBlZzcgb3IgLS13aXRoLWpwZWc4IHRvIGNvbmZpZ3VyZSwgb3IgYW4KK2FyZ3VtZW50IG9mIC1EV0lUSF9KUEVHNz0xIG9yIC1EV0lUSF9KUEVHOD0xIHRvIGNtYWtlLCB5b3UgY2FuIGJ1aWxkIGEgdmVyc2lvbgorb2YgbGlianBlZy10dXJibyB3aGljaCBlbXVsYXRlcyB0aGUgbGlianBlZyB2NyBvciB2OCBBUEkvQUJJLCBzbyB0aGF0IHByb2dyYW1zCit3aGljaCBhcmUgYnVpbHQgYWdhaW5zdCBsaWJqcGVnIHY3IG9yIHY4IGNhbiBiZSBydW4gd2l0aCBsaWJqcGVnLXR1cmJvLiAgVGhlCitmb2xsb3dpbmcgc2VjdGlvbiBkZXNjcmliZXMgd2hpY2ggbGlianBlZyB2NysgZmVhdHVyZXMgYXJlIHN1cHBvcnRlZCBhbmQgd2hpY2gKK2FyZW4ndC4KKworbGlianBlZyB2NyBhbmQgdjggRmVhdHVyZXM6CistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworRnVsbHkgc3VwcG9ydGVkOgorCistLSBjanBlZzogU2VwYXJhdGUgcXVhbGl0eSBzZXR0aW5ncyBmb3IgbHVtaW5hbmNlIGFuZCBjaHJvbWluYW5jZQorICAgTm90ZSB0aGF0IHRoZSBsaWJwamVnIHY3KyBBUEkgd2FzIGV4dGVuZGVkIHRvIGFjY29tbW9kYXRlIHRoaXMgZmVhdHVyZSBvbmx5CisgICBmb3IgY29udmVuaWVuY2UgcHVycG9zZXMuICBJdCBoYXMgYWx3YXlzIGJlZW4gcG9zc2libGUgdG8gaW1wbGVtZW50IHRoaXMKKyAgIGZlYXR1cmUgd2l0aCBsaWJqcGVnIHY2YiAoc2VlIHJkc3dpdGNoLmMgZm9yIGFuIGV4YW1wbGUuKQorCistLSBjanBlZzogMzItYml0IEJNUCBzdXBwb3J0CisKKy0tIGpwZWd0cmFuOiBsb3NzbGVzcyBjcm9wcGluZworCistLSBqcGVndHJhbjogLXBlcmZlY3Qgb3B0aW9uCisKKy0tIHJkanBnY29tOiAtcmF3IG9wdGlvbgorCistLSByZGpwZ2NvbTogbG9jYWxlIGF3YXJlbmVzcworCisKK0Z1bGx5IHN1cHBvcnRlZCB3aGVuIHVzaW5nIGxpYmpwZWcgdjcvdjggZW11bGF0aW9uOgorCistLSBsaWJqcGVnOiBJbi1tZW1vcnkgc291cmNlIGFuZCBkZXN0aW5hdGlvbiBtYW5hZ2VycworCisKK05vdCBzdXBwb3J0ZWQ6CisKKy0tIGxpYmpwZWc6IERDVCBzY2FsaW5nIGluIGNvbXByZXNzb3IKKyAgIGNpbmZvLnNjYWxlX251bSBhbmQgY2luZm8uc2NhbGVfZGVub20gYXJlIHNpbGVudGx5IGlnbm9yZWQuCisKKy0tIGxpYmpwZWc6IElEQ1Qgc2NhbGluZyBleHRlbnNpb25zIGluIGRlY29tcHJlc3NvcgorICAgbGlianBlZy10dXJibyBzdGlsbCBzdXBwb3J0cyBJRENUIHNjYWxpbmcgd2l0aCBzY2FsaW5nIGZhY3RvcnMgb2YgMS8yLCAxLzQsCisgICBhbmQgMS84IChzYW1lIGFzIGxpYmpwZWcgdjZiLikKKworLS0gbGlianBlZzogRmFuY3kgZG93bnNhbXBsaW5nIGluIGNvbXByZXNzb3IKKyAgIGNpbmZvLmRvX2ZhbmN5X2Rvd25zYW1wbGluZyBpcyBzaWxlbnRseSBpZ25vcmVkLgorCistLSBqcGVndHJhbjogU2NhbGluZworICAgU2VlbXMgdG8gZGVwZW5kIG9uIHRoZSBEQ1Qgc2NhbGluZyBmZWF0dXJlLCB3aGljaCBpc24ndCBzdXBwb3J0ZWQuCisKKworKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorKiogICAgIFBlcmZvcm1hbmNlIHBpdGZhbGxzCisqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisKKz09PT09PT09PT09PT09PQorUmVzdGFydCBNYXJrZXJzCis9PT09PT09PT09PT09PT0KKworVGhlIG9wdGltaXplZCBIdWZmbWFuIGRlY29kZXIgaW4gbGlianBlZy10dXJibyBkb2VzIG5vdCBoYW5kbGUgcmVzdGFydCBtYXJrZXJzCitpbiBhIHdheSB0aGF0IG1ha2VzIGxpYmpwZWcgaGFwcHksIHNvIGl0IGlzIG5lY2Vzc2FyeSB0byB1c2UgdGhlIHNsb3cgSHVmZm1hbgorZGVjb2RlciB3aGVuIGRlY29tcHJlc3NpbmcgYSBKUEVHIGltYWdlIHRoYXQgaGFzIHJlc3RhcnQgbWFya2Vycy4gIFRoaXMgY2FuCitjYXVzZSB0aGUgZGVjb21wcmVzc2lvbiBwZXJmb3JtYW5jZSB0byBkcm9wIGJ5IGFzIG11Y2ggYXMgMjAlLCBidXQgdGhlCitwZXJmb3JtYW5jZSB3aWxsIHN0aWxsIGJlIG11Y2ggbXVjaCBncmVhdGVyIHRoYW4gdGhhdCBvZiBsaWJqcGVnIHY2Yi4gIE1hbnkKK2NvbnN1bWVyIHBhY2thZ2VzLCBzdWNoIGFzIFBob3RvU2hvcCwgdXNlIHJlc3RhcnQgbWFya2VycyB3aGVuIGdlbmVyYXRpbmcgSlBFRworaW1hZ2VzLCBzbyBpbWFnZXMgZ2VuZXJhdGVkIGJ5IHRob3NlIHByb2dyYW1zIHdpbGwgZXhwZXJpZW5jZSB0aGlzIGlzc3VlLgorCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorRmFzdCBJbnRlZ2VyIEZvcndhcmQgRENUIGF0IEhpZ2ggUXVhbGl0eSBMZXZlbHMKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisKK1RoZSBhbGdvcml0aG0gdXNlZCBieSB0aGUgU0lNRC1hY2NlbGVyYXRlZCBxdWFudGl6YXRpb24gZnVuY3Rpb24gY2Fubm90IHByb2R1Y2UKK2NvcnJlY3QgcmVzdWx0cyB3aGVuZXZlciB0aGUgZmFzdCBpbnRlZ2VyIGZvcndhcmQgRENUIGlzIHVzZWQgYWxvbmcgd2l0aCBhIEpQRUcKK3F1YWxpdHkgb2YgOTgtMTAwLiAgVGh1cywgbGlianBlZy10dXJibyBtdXN0IHVzZSB0aGUgbm9uLVNJTUQgcXVhbnRpemF0aW9uCitmdW5jdGlvbiBpbiB0aG9zZSBjYXNlcy4gIFRoaXMgY2F1c2VzIHBlcmZvcm1hbmNlIHRvIGRyb3AgYnkgYXMgbXVjaCBhcyA0MCUuCitJdCBpcyB0aGVyZWZvcmUgc3Ryb25nbHkgYWR2aXNlZCB0aGF0IHlvdSB1c2UgdGhlIHNsb3cgaW50ZWdlciBmb3J3YXJkIERDVAord2hlbmV2ZXIgZW5jb2RpbmcgaW1hZ2VzIHdpdGggYSBKUEVHIHF1YWxpdHkgb2YgOTggb3IgaGlnaGVyLgpkaWZmIC0tZ2l0IGEvYWNpbmNsdWRlLm00IGIvYWNpbmNsdWRlLm00Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmNjMTBhMjEKLS0tIC9kZXYvbnVsbAorKysgYi9hY2luY2x1ZGUubTQKQEAgLTAsMCArMSwxMzYgQEAKKyMgQUNfUFJPR19OQVNNCisjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisjIENoZWNrIHRoYXQgTkFTTSBleGlzdHMgYW5kIGRldGVybWluZSBmbGFncworQUNfREVGVU4oW0FDX1BST0dfTkFTTV0sWworCitBQ19DSEVDS19QUk9HUyhOQVNNLCBbbmFzbSBuYXNtd10pCit0ZXN0IC16ICIkTkFTTSIgJiYgQUNfTVNHX0VSUk9SKFtubyBuYXNtIChOZXR3aWRlIEFzc2VtYmxlcikgZm91bmRdKQorCitBQ19NU0dfQ0hFQ0tJTkcoW2ZvciBvYmplY3QgZmlsZSBmb3JtYXQgb2YgaG9zdCBzeXN0ZW1dKQorY2FzZSAiJGhvc3Rfb3MiIGluCisgIGN5Z3dpbiogfCBtaW5ndyogfCBwdzMyKiB8IGludGVyaXgqKQorICAgIGNhc2UgIiRob3N0X2NwdSIgaW4KKyAgICAgIHg4Nl82NCkKKyAgICAgICAgb2JqZm10PSdXaW42NC1DT0ZGJworICAgICAgICA7OworICAgICAgKikKKyAgICAgICAgb2JqZm10PSdXaW4zMi1DT0ZGJworICAgICAgICA7OworICAgIGVzYWMKKyAgOzsKKyAgbXNkb3NkamdwcCogfCBnbzMyKikKKyAgICBvYmpmbXQ9J0NPRkYnCisgIDs7CisgIG9zMi1lbXgqKQkJCSMgbm90IHRlc3RlZAorICAgIG9iamZtdD0nTVNPTUYnCQkjIG9iagorICA7OworICBsaW51eCpjb2ZmKiB8IGxpbnV4Km9sZGxkKikKKyAgICBvYmpmbXQ9J0NPRkYnCQkjID8/PworICA7OworICBsaW51eCphb3V0KikKKyAgICBvYmpmbXQ9J2Eub3V0JworICA7OworICBsaW51eCopCisgICAgY2FzZSAiJGhvc3RfY3B1IiBpbgorICAgICAgeDg2XzY0KQorICAgICAgICBvYmpmbXQ9J0VMRjY0JworICAgICAgICA7OworICAgICAgKikKKyAgICAgICAgb2JqZm10PSdFTEYnCisgICAgICAgIDs7CisgICAgZXNhYworICA7OworICBmcmVlYnNkKiB8IG5ldGJzZCogfCBvcGVuYnNkKikKKyAgICBpZiBlY2hvIF9fRUxGX18gfCAkQ0MgLUUgLSB8IGdyZXAgX19FTEZfXyA+IC9kZXYvbnVsbDsgdGhlbgorICAgICAgb2JqZm10PSdCU0QtYS5vdXQnCisgICAgZWxzZQorICAgICAgY2FzZSAiJGhvc3RfY3B1IiBpbgorICAgICAgICB4ODZfNjQgfCBhbWQ2NCkKKyAgICAgICAgICBvYmpmbXQ9J0VMRjY0JworICAgICAgICAgIDs7CisgICAgICAgICopCisgICAgICAgICAgb2JqZm10PSdFTEYnCisgICAgICAgICAgOzsKKyAgICAgIGVzYWMKKyAgICBmaQorICA7OworICBzb2xhcmlzKiB8IHN1bm9zKiB8IHN5c3YqIHwgc2NvKikKKyAgICBjYXNlICIkaG9zdF9jcHUiIGluCisgICAgICB4ODZfNjQpCisgICAgICAgIG9iamZtdD0nRUxGNjQnCisgICAgICAgIDs7CisgICAgICAqKQorICAgICAgICBvYmpmbXQ9J0VMRicKKyAgICAgICAgOzsKKyAgICBlc2FjCisgIDs7CisgIGRhcndpbiogfCByaGFwc29keSogfCBuZXh0c3RlcCogfCBvcGVuc3RlcCogfCBtYWNvcyopCisgICAgY2FzZSAiJGhvc3RfY3B1IiBpbgorICAgICAgeDg2XzY0KQorICAgICAgICBvYmpmbXQ9J01hY2gtTzY0JworICAgICAgICA7OworICAgICAgKikKKyAgICAgICAgb2JqZm10PSdNYWNoLU8nCisgICAgICAgIDs7CisgICAgZXNhYworICA7OworICAqKQorICAgIG9iamZtdD0nRUxGID8nCisgIDs7Citlc2FjCisKK0FDX01TR19SRVNVTFQoWyRvYmpmbXRdKQoraWYgdGVzdCAiJG9iamZtdCIgPSAnRUxGID8nOyB0aGVuCisgIG9iamZtdD0nRUxGJworICBBQ19NU0dfV0FSTihbdW5leHBlY3RlZCBob3N0IHN5c3RlbS4gYXNzdW1lZCB0aGF0IHRoZSBmb3JtYXQgaXMgJG9iamZtdC5dKQorZmkKKworQUNfTVNHX0NIRUNLSU5HKFtmb3Igb2JqZWN0IGZpbGUgZm9ybWF0IHNwZWNpZmllciAoTkFGTEFHUykgXSkKK2Nhc2UgIiRvYmpmbXQiIGluCisgIE1TT01GKSAgICAgIE5BRkxBR1M9Jy1mb2JqIC1ET0JKMzInOzsKKyAgV2luMzItQ09GRikgTkFGTEFHUz0nLWZ3aW4zMiAtRFdJTjMyJzs7CisgIFdpbjY0LUNPRkYpIE5BRkxBR1M9Jy1md2luNjQgLURXSU42NCAtRF9feDg2XzY0X18nOzsKKyAgQ09GRikgICAgICAgTkFGTEFHUz0nLWZjb2ZmIC1EQ09GRic7OworICBhLm91dCkgICAgICBOQUZMQUdTPSctZmFvdXQgLURBT1VUJzs7CisgIEJTRC1hLm91dCkgIE5BRkxBR1M9Jy1mYW91dGIgLURBT1VUJzs7CisgIEVMRikgICAgICAgIE5BRkxBR1M9Jy1mZWxmIC1ERUxGJzs7CisgIEVMRjY0KSAgICAgIE5BRkxBR1M9Jy1mZWxmNjQgLURFTEYgLURfX3g4Nl82NF9fJzs7CisgIFJERikgICAgICAgIE5BRkxBR1M9Jy1mcmRmIC1EUkRGJzs7CisgIE1hY2gtTykgICAgIE5BRkxBR1M9Jy1mbWFjaG8gLURNQUNITyc7OworICBNYWNoLU82NCkgICBOQUZMQUdTPSctZm1hY2hvNjQgLURNQUNITyAtRF9feDg2XzY0X18nOzsKK2VzYWMKK0FDX01TR19SRVNVTFQoWyROQUZMQUdTXSkKK0FDX1NVQlNUKFtOQUZMQUdTXSkKKworQUNfTVNHX0NIRUNLSU5HKFt3aGV0aGVyIHRoZSBhc3NlbWJsZXIgKCROQVNNICROQUZMQUdTKSB3b3Jrc10pCitjYXQgPiBjb25mdGVzdC5hc20gPDxFT0YKK1slbGluZSBfX29saW5lX18gImNvbmZpZ3VyZSIKKyAgICAgICAgc2VjdGlvbiAudGV4dAorICAgICAgICBnbG9iYWwgIF9tYWluLG1haW4KK19tYWluOgorbWFpbjogICB4b3IgICAgIGVheCxlYXgKKyAgICAgICAgcmV0CitdRU9GCit0cnlfbmFzbT0nJE5BU00gJE5BRkxBR1MgLW8gY29uZnRlc3QubyBjb25mdGVzdC5hc20nCitpZiBBQ19UUllfRVZBTCh0cnlfbmFzbSkgJiYgdGVzdCAtcyBjb25mdGVzdC5vOyB0aGVuCisgIEFDX01TR19SRVNVTFQoeWVzKQorZWxzZQorICBlY2hvICJjb25maWd1cmU6IGZhaWxlZCBwcm9ncmFtIHdhczoiID4mQUNfRkRfQ0MKKyAgY2F0IGNvbmZ0ZXN0LmFzbSA+JkFDX0ZEX0NDCisgIHJtIC1yZiBjb25mdGVzdCoKKyAgQUNfTVNHX1JFU1VMVChubykKKyAgQUNfTVNHX0VSUk9SKFtpbnN0YWxsYXRpb24gb3IgY29uZmlndXJhdGlvbiBwcm9ibGVtOiBhc3NlbWJsZXIgY2Fubm90IGNyZWF0ZSBvYmplY3QgZmlsZXMuXSkKK2ZpCisKK0FDX01TR19DSEVDS0lORyhbd2hldGhlciB0aGUgbGlua2VyIGFjY2VwdHMgYXNzZW1ibGVyIG91dHB1dF0pCit0cnlfbmFzbT0nJHtDQy1jY30gLW8gY29uZnRlc3Qke2FjX2V4ZWV4dH0gJExERkxBR1MgY29uZnRlc3QubyAkTElCUyAxPiZBQ19GRF9DQycKK2lmIEFDX1RSWV9FVkFMKHRyeV9uYXNtKSAmJiB0ZXN0IC1zIGNvbmZ0ZXN0JHthY19leGVleHR9OyB0aGVuCisgIHJtIC1yZiBjb25mdGVzdCoKKyAgQUNfTVNHX1JFU1VMVCh5ZXMpCitlbHNlCisgIHJtIC1yZiBjb25mdGVzdCoKKyAgQUNfTVNHX1JFU1VMVChubykKKyAgQUNfTVNHX0VSUk9SKFtjb25maWd1cmF0aW9uIHByb2JsZW06IG1heWJlIG9iamVjdCBmaWxlIGZvcm1hdCBtaXNtYXRjaC5dKQorZmkKKworXSkKZGlmZiAtLWdpdCBhL2FjbG9jYWwubTQgYi9hY2xvY2FsLm00CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkZTMxYjdmLi4wMDAwMDAwCi0tLSBhL2FjbG9jYWwubTQKKysrIC9kZXYvbnVsbApAQCAtMSw5NDcxICswLDAgQEAKLSMgZ2VuZXJhdGVkIGF1dG9tYXRpY2FsbHkgYnkgYWNsb2NhbCAxLjExLjEgLSotIEF1dG9jb25mIC0qLQotCi0jIENvcHlyaWdodCAoQykgMTk5NiwgMTk5NywgMTk5OCwgMTk5OSwgMjAwMCwgMjAwMSwgMjAwMiwgMjAwMywgMjAwNCwKLSMgMjAwNSwgMjAwNiwgMjAwNywgMjAwOCwgMjAwOSAgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCi0jIFRoaXMgZmlsZSBpcyBmcmVlIHNvZnR3YXJlOyB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uCi0jIGdpdmVzIHVubGltaXRlZCBwZXJtaXNzaW9uIHRvIGNvcHkgYW5kL29yIGRpc3RyaWJ1dGUgaXQsCi0jIHdpdGggb3Igd2l0aG91dCBtb2RpZmljYXRpb25zLCBhcyBsb25nIGFzIHRoaXMgbm90aWNlIGlzIHByZXNlcnZlZC4KLQotIyBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSMgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZLCB0byB0aGUgZXh0ZW50IHBlcm1pdHRlZCBieSBsYXc7IHdpdGhvdXQKLSMgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQQotIyBQQVJUSUNVTEFSIFBVUlBPU0UuCi0KLW00X2lmbmRlZihbQUNfQVVUT0NPTkZfVkVSU0lPTl0sCi0gIFttNF9jb3B5KFttNF9QQUNLQUdFX1ZFUlNJT05dLCBbQUNfQVVUT0NPTkZfVkVSU0lPTl0pXSlkbmwKLW00X2lmKG00X2RlZm4oW0FDX0FVVE9DT05GX1ZFUlNJT05dKSwgWzIuNjhdLCwKLVttNF93YXJuaW5nKFt0aGlzIGZpbGUgd2FzIGdlbmVyYXRlZCBmb3IgYXV0b2NvbmYgMi42OC4KLVlvdSBoYXZlIGFub3RoZXIgdmVyc2lvbiBvZiBhdXRvY29uZi4gIEl0IG1heSB3b3JrLCBidXQgaXMgbm90IGd1YXJhbnRlZWQgdG8uCi1JZiB5b3UgaGF2ZSBwcm9ibGVtcywgeW91IG1heSBuZWVkIHRvIHJlZ2VuZXJhdGUgdGhlIGJ1aWxkIHN5c3RlbSBlbnRpcmVseS4KLVRvIGRvIHNvLCB1c2UgdGhlIHByb2NlZHVyZSBkb2N1bWVudGVkIGJ5IHRoZSBwYWNrYWdlLCB0eXBpY2FsbHkgYGF1dG9yZWNvbmYnLl0pXSkKLQotIyBsaWJ0b29sLm00IC0gQ29uZmlndXJlIGxpYnRvb2wgZm9yIHRoZSBob3N0IHN5c3RlbS4gLSotQXV0b2NvbmYtKi0KLSMKLSMgICBDb3B5cmlnaHQgKEMpIDE5OTYsIDE5OTcsIDE5OTgsIDE5OTksIDIwMDAsIDIwMDEsIDIwMDMsIDIwMDQsIDIwMDUsCi0jICAgICAgICAgICAgICAgICAyMDA2LCAyMDA3LCAyMDA4LCAyMDA5LCAyMDEwIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwKLSMgICAgICAgICAgICAgICAgIEluYy4KLSMgICBXcml0dGVuIGJ5IEdvcmRvbiBNYXR6aWdrZWl0LCAxOTk2Ci0jCi0jIFRoaXMgZmlsZSBpcyBmcmVlIHNvZnR3YXJlOyB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIGdpdmVzCi0jIHVubGltaXRlZCBwZXJtaXNzaW9uIHRvIGNvcHkgYW5kL29yIGRpc3RyaWJ1dGUgaXQsIHdpdGggb3Igd2l0aG91dAotIyBtb2RpZmljYXRpb25zLCBhcyBsb25nIGFzIHRoaXMgbm90aWNlIGlzIHByZXNlcnZlZC4KLQotbTRfZGVmaW5lKFtfTFRfQ09QWUlOR10sIFtkbmwKLSMgICBDb3B5cmlnaHQgKEMpIDE5OTYsIDE5OTcsIDE5OTgsIDE5OTksIDIwMDAsIDIwMDEsIDIwMDMsIDIwMDQsIDIwMDUsCi0jICAgICAgICAgICAgICAgICAyMDA2LCAyMDA3LCAyMDA4LCAyMDA5LCAyMDEwIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwKLSMgICAgICAgICAgICAgICAgIEluYy4KLSMgICBXcml0dGVuIGJ5IEdvcmRvbiBNYXR6aWdrZWl0LCAxOTk2Ci0jCi0jICAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgR05VIExpYnRvb2wuCi0jCi0jIEdOVSBMaWJ0b29sIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgotIyBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcwotIyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZgotIyB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSMKLSMgQXMgYSBzcGVjaWFsIGV4Y2VwdGlvbiB0byB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UsCi0jIGlmIHlvdSBkaXN0cmlidXRlIHRoaXMgZmlsZSBhcyBwYXJ0IG9mIGEgcHJvZ3JhbSBvciBsaWJyYXJ5IHRoYXQKLSMgaXMgYnVpbHQgdXNpbmcgR05VIExpYnRvb2wsIHlvdSBtYXkgaW5jbHVkZSB0aGlzIGZpbGUgdW5kZXIgdGhlCi0jIHNhbWUgZGlzdHJpYnV0aW9uIHRlcm1zIHRoYXQgeW91IHVzZSBmb3IgdGhlIHJlc3Qgb2YgdGhhdCBwcm9ncmFtLgotIwotIyBHTlUgTGlidG9vbCBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotIyBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotIyBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCi0jIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0jCi0jIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCi0jIGFsb25nIHdpdGggR05VIExpYnRvb2w7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLiAgSWYgbm90LCBhIGNvcHkKLSMgY2FuIGJlIGRvd25sb2FkZWQgZnJvbSBodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvZ3BsLmh0bWwsIG9yCi0jIG9idGFpbmVkIGJ5IHdyaXRpbmcgdG8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwKLSMgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCi1dKQotCi0jIHNlcmlhbCA1NyBMVF9JTklUCi0KLQotIyBMVF9QUkVSRVEoVkVSU0lPTikKLSMgLS0tLS0tLS0tLS0tLS0tLS0tCi0jIENvbXBsYWluIGFuZCBleGl0IGlmIHRoaXMgbGlidG9vbCB2ZXJzaW9uIGlzIGxlc3MgdGhhdCBWRVJTSU9OLgotbTRfZGVmdW4oW0xUX1BSRVJFUV0sCi1bbTRfaWYobTRfdmVyc2lvbl9jb21wYXJlKG00X2RlZm4oW0xUX1BBQ0tBR0VfVkVSU0lPTl0pLCBbJDFdKSwgLTEsCi0gICAgICAgW200X2RlZmF1bHQoWyQzXSwKLQkJICAgW200X2ZhdGFsKFtMaWJ0b29sIHZlcnNpb24gJDEgb3IgaGlnaGVyIGlzIHJlcXVpcmVkXSwKLQkJICAgICAgICAgICAgIDYzKV0pXSwKLSAgICAgICBbJDJdKV0pCi0KLQotIyBfTFRfQ0hFQ0tfQlVJTERESVIKLSMgLS0tLS0tLS0tLS0tLS0tLS0tCi0jIENvbXBsYWluIGlmIHRoZSBhYnNvbHV0ZSBidWlsZCBkaXJlY3RvcnkgbmFtZSBjb250YWlucyB1bnVzdWFsIGNoYXJhY3RlcnMKLW00X2RlZnVuKFtfTFRfQ0hFQ0tfQlVJTERESVJdLAotW2Nhc2UgYHB3ZGAgaW4KLSAgKlwgKiB8ICpcCSopCi0gICAgQUNfTVNHX1dBUk4oW0xpYnRvb2wgZG9lcyBub3QgY29wZSB3ZWxsIHdpdGggd2hpdGVzcGFjZSBpbiBgcHdkYF0pIDs7Ci1lc2FjCi1dKQotCi0KLSMgTFRfSU5JVChbT1BUSU9OU10pCi0jIC0tLS0tLS0tLS0tLS0tLS0tLQotQUNfREVGVU4oW0xUX0lOSVRdLAotW0FDX1BSRVJFUShbMi41OF0pZG5sIFdlIHVzZSBBQ19JTkNMVURFU19ERUZBVUxUCi1BQ19SRVFVSVJFKFtBQ19DT05GSUdfQVVYX0RJUl9ERUZBVUxUXSlkbmwKLUFDX0JFRk9SRShbJDBdLCBbTFRfTEFOR10pZG5sCi1BQ19CRUZPUkUoWyQwXSwgW0xUX09VVFBVVF0pZG5sCi1BQ19CRUZPUkUoWyQwXSwgW0xURExfSU5JVF0pZG5sCi1tNF9yZXF1aXJlKFtfTFRfQ0hFQ0tfQlVJTERESVJdKWRubAotCi1kbmwgQXV0b2NvbmYgZG9lc24ndCBjYXRjaCB1bmV4cGFuZGVkIExUXyBtYWNyb3MgYnkgZGVmYXVsdDoKLW00X3BhdHRlcm5fZm9yYmlkKFteXz9MVF9bQS1aX10rJF0pZG5sCi1tNF9wYXR0ZXJuX2FsbG93KFteKF9MVF9FT0Z8TFRfRExHTE9CQUx8TFRfRExMQVpZX09SX05PV3xMVF9NVUxUSV9NT0RVTEUpJF0pZG5sCi1kbmwgYWNsb2NhbCBkb2Vzbid0IHB1bGwgbHRvcHRpb25zLm00LCBsdHN1Z2FyLm00LCBvciBsdHZlcnNpb24ubTQKLWRubCB1bmxlc3Mgd2UgcmVxdWlyZSBhbiBBQ19ERUZVTmVkIG1hY3JvOgotQUNfUkVRVUlSRShbTFRPUFRJT05TX1ZFUlNJT05dKWRubAotQUNfUkVRVUlSRShbTFRTVUdBUl9WRVJTSU9OXSlkbmwKLUFDX1JFUVVJUkUoW0xUVkVSU0lPTl9WRVJTSU9OXSlkbmwKLUFDX1JFUVVJUkUoW0xUT0JTT0xFVEVfVkVSU0lPTl0pZG5sCi1tNF9yZXF1aXJlKFtfTFRfUFJPR19MVE1BSU5dKWRubAotCi1fTFRfU0hFTExfSU5JVChbU0hFTEw9JHtDT05GSUdfU0hFTEwtL2Jpbi9zaH1dKQotCi1kbmwgUGFyc2UgT1BUSU9OUwotX0xUX1NFVF9PUFRJT05TKFskMF0sIFskMV0pCi0KLSMgVGhpcyBjYW4gYmUgdXNlZCB0byByZWJ1aWxkIGxpYnRvb2wgd2hlbiBuZWVkZWQKLUxJQlRPT0xfREVQUz0iJGx0bWFpbiIKLQotIyBBbHdheXMgdXNlIG91ciBvd24gbGlidG9vbC4KLUxJQlRPT0w9JyQoU0hFTEwpICQodG9wX2J1aWxkZGlyKS9saWJ0b29sJwotQUNfU1VCU1QoTElCVE9PTClkbmwKLQotX0xUX1NFVFVQCi0KLSMgT25seSBleHBhbmQgb25jZToKLW00X2RlZmluZShbTFRfSU5JVF0pCi1dKSMgTFRfSU5JVAotCi0jIE9sZCBuYW1lczoKLUFVX0FMSUFTKFtBQ19QUk9HX0xJQlRPT0xdLCBbTFRfSU5JVF0pCi1BVV9BTElBUyhbQU1fUFJPR19MSUJUT09MXSwgW0xUX0lOSVRdKQotZG5sIGFjbG9jYWwtMS40IGJhY2t3YXJkcyBjb21wYXRpYmlsaXR5OgotZG5sIEFDX0RFRlVOKFtBQ19QUk9HX0xJQlRPT0xdLCBbXSkKLWRubCBBQ19ERUZVTihbQU1fUFJPR19MSUJUT09MXSwgW10pCi0KLQotIyBfTFRfQ0NfQkFTRU5BTUUoQ0MpCi0jIC0tLS0tLS0tLS0tLS0tLS0tLS0KLSMgQ2FsY3VsYXRlIGNjX2Jhc2VuYW1lLiAgU2tpcCBrbm93biBjb21waWxlciB3cmFwcGVycyBhbmQgY3Jvc3MtcHJlZml4LgotbTRfZGVmdW4oW19MVF9DQ19CQVNFTkFNRV0sCi1bZm9yIGNjX3RlbXAgaW4gJDEiIjsgZG8KLSAgY2FzZSAkY2NfdGVtcCBpbgotICAgIGNvbXBpbGUgfCAqW1tcXC9dXWNvbXBpbGUgfCBjY2FjaGUgfCAqW1tcXC9dXWNjYWNoZSApIDs7Ci0gICAgZGlzdGNjIHwgKltbXFwvXV1kaXN0Y2MgfCBwdXJpZnkgfCAqW1tcXC9dXXB1cmlmeSApIDs7Ci0gICAgXC0qKSA7OwotICAgICopIGJyZWFrOzsKLSAgZXNhYwotZG9uZQotY2NfYmFzZW5hbWU9YCRFQ0hPICIkY2NfdGVtcCIgfCAkU0VEICJzJS4qLyUlOyBzJV4kaG9zdF9hbGlhcy0lJSJgCi1dKQotCi0KLSMgX0xUX0ZJTEVVVElMU19ERUZBVUxUUwotIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0jIEl0IGlzIG9rYXkgdG8gdXNlIHRoZXNlIGZpbGUgY29tbWFuZHMgYW5kIGFzc3VtZSB0aGV5IGhhdmUgYmVlbiBzZXQKLSMgc2Vuc2libHkgYWZ0ZXIgYG00X3JlcXVpcmUoW19MVF9GSUxFVVRJTFNfREVGQVVMVFNdKScuCi1tNF9kZWZ1bihbX0xUX0ZJTEVVVElMU19ERUZBVUxUU10sCi1bOiAke0NQPSJjcCAtZiJ9Ci06ICR7TVY9Im12IC1mIn0KLTogJHtSTT0icm0gLWYifQotXSkjIF9MVF9GSUxFVVRJTFNfREVGQVVMVFMKLQotCi0jIF9MVF9TRVRVUAotIyAtLS0tLS0tLS0KLW00X2RlZnVuKFtfTFRfU0VUVVBdLAotW0FDX1JFUVVJUkUoW0FDX0NBTk9OSUNBTF9IT1NUXSlkbmwKLUFDX1JFUVVJUkUoW0FDX0NBTk9OSUNBTF9CVUlMRF0pZG5sCi1BQ19SRVFVSVJFKFtfTFRfUFJFUEFSRV9TRURfUVVPVEVfVkFSU10pZG5sCi1BQ19SRVFVSVJFKFtfTFRfUFJPR19FQ0hPX0JBQ0tTTEFTSF0pZG5sCi0KLV9MVF9ERUNMKFtdLCBbaG9zdF9hbGlhc10sIFswXSwgW1RoZSBob3N0IHN5c3RlbV0pZG5sCi1fTFRfREVDTChbXSwgW2hvc3RdLCBbMF0pZG5sCi1fTFRfREVDTChbXSwgW2hvc3Rfb3NdLCBbMF0pZG5sCi1kbmwKLV9MVF9ERUNMKFtdLCBbYnVpbGRfYWxpYXNdLCBbMF0sIFtUaGUgYnVpbGQgc3lzdGVtXSlkbmwKLV9MVF9ERUNMKFtdLCBbYnVpbGRdLCBbMF0pZG5sCi1fTFRfREVDTChbXSwgW2J1aWxkX29zXSwgWzBdKWRubAotZG5sCi1BQ19SRVFVSVJFKFtBQ19QUk9HX0NDXSlkbmwKLUFDX1JFUVVJUkUoW0xUX1BBVEhfTERdKWRubAotQUNfUkVRVUlSRShbTFRfUEFUSF9OTV0pZG5sCi1kbmwKLUFDX1JFUVVJUkUoW0FDX1BST0dfTE5fU10pZG5sCi10ZXN0IC16ICIkTE5fUyIgJiYgTE5fUz0ibG4gLXMiCi1fTFRfREVDTChbXSwgW0xOX1NdLCBbMV0sIFtXaGV0aGVyIHdlIG5lZWQgc29mdCBvciBoYXJkIGxpbmtzXSlkbmwKLWRubAotQUNfUkVRVUlSRShbTFRfQ01EX01BWF9MRU5dKWRubAotX0xUX0RFQ0woW29iamV4dF0sIFthY19vYmpleHRdLCBbMF0sIFtPYmplY3QgZmlsZSBzdWZmaXggKG5vcm1hbGx5ICJvIildKWRubAotX0xUX0RFQ0woW10sIFtleGVleHRdLCBbMF0sIFtFeGVjdXRhYmxlIGZpbGUgc3VmZml4IChub3JtYWxseSAiIildKWRubAotZG5sCi1tNF9yZXF1aXJlKFtfTFRfRklMRVVUSUxTX0RFRkFVTFRTXSlkbmwKLW00X3JlcXVpcmUoW19MVF9DSEVDS19TSEVMTF9GRUFUVVJFU10pZG5sCi1tNF9yZXF1aXJlKFtfTFRfUEFUSF9DT05WRVJTSU9OX0ZVTkNUSU9OU10pZG5sCi1tNF9yZXF1aXJlKFtfTFRfQ01EX1JFTE9BRF0pZG5sCi1tNF9yZXF1aXJlKFtfTFRfQ0hFQ0tfTUFHSUNfTUVUSE9EXSlkbmwKLW00X3JlcXVpcmUoW19MVF9DSEVDS19TSEFSRURMSUJfRlJPTV9MSU5LTElCXSlkbmwKLW00X3JlcXVpcmUoW19MVF9DTURfT0xEX0FSQ0hJVkVdKWRubAotbTRfcmVxdWlyZShbX0xUX0NNRF9HTE9CQUxfU1lNQk9MU10pZG5sCi1tNF9yZXF1aXJlKFtfTFRfV0lUSF9TWVNST09UXSlkbmwKLQotX0xUX0NPTkZJR19MSUJUT09MX0lOSVQoWwotIyBTZWUgaWYgd2UgYXJlIHJ1bm5pbmcgb24genNoLCBhbmQgc2V0IHRoZSBvcHRpb25zIHdoaWNoIGFsbG93IG91cgotIyBjb21tYW5kcyB0aHJvdWdoIHdpdGhvdXQgcmVtb3ZhbCBvZiBcIGVzY2FwZXMgSU5JVC4KLWlmIHRlc3QgLW4gIlwke1pTSF9WRVJTSU9OK3NldH0iIDsgdGhlbgotICAgc2V0b3B0IE5PX0dMT0JfU1VCU1QKLWZpCi1dKQotaWYgdGVzdCAtbiAiJHtaU0hfVkVSU0lPTitzZXR9IiA7IHRoZW4KLSAgIHNldG9wdCBOT19HTE9CX1NVQlNUCi1maQotCi1fTFRfQ0hFQ0tfT0JKRElSCi0KLW00X3JlcXVpcmUoW19MVF9UQUdfQ09NUElMRVJdKWRubAotCi1jYXNlICRob3N0X29zIGluCi1haXgzKikKLSAgIyBBSVggc29tZXRpbWVzIGhhcyBwcm9ibGVtcyB3aXRoIHRoZSBHQ0MgY29sbGVjdDIgcHJvZ3JhbS4gIEZvciBzb21lCi0gICMgcmVhc29uLCBpZiB3ZSBzZXQgdGhlIENPTExFQ1RfTkFNRVMgZW52aXJvbm1lbnQgdmFyaWFibGUsIHRoZSBwcm9ibGVtcwotICAjIHZhbmlzaCBpbiBhIHB1ZmYgb2Ygc21va2UuCi0gIGlmIHRlc3QgIlgke0NPTExFQ1RfTkFNRVMrc2V0fSIgIT0gWHNldDsgdGhlbgotICAgIENPTExFQ1RfTkFNRVM9Ci0gICAgZXhwb3J0IENPTExFQ1RfTkFNRVMKLSAgZmkKLSAgOzsKLWVzYWMKLQotIyBHbG9iYWwgdmFyaWFibGVzOgotb2ZpbGU9bGlidG9vbAotY2FuX2J1aWxkX3NoYXJlZD15ZXMKLQotIyBBbGwga25vd24gbGlua2VycyByZXF1aXJlIGEgYC5hJyBhcmNoaXZlIGZvciBzdGF0aWMgbGlua2luZyAoZXhjZXB0IE1TVkMsCi0jIHdoaWNoIG5lZWRzICcubGliJykuCi1saWJleHQ9YQotCi13aXRoX2dudV9sZD0iJGx0X2N2X3Byb2dfZ251X2xkIgotCi1vbGRfQ0M9IiRDQyIKLW9sZF9DRkxBR1M9IiRDRkxBR1MiCi0KLSMgU2V0IHNhbmUgZGVmYXVsdHMgZm9yIHZhcmlvdXMgdmFyaWFibGVzCi10ZXN0IC16ICIkQ0MiICYmIENDPWNjCi10ZXN0IC16ICIkTFRDQyIgJiYgTFRDQz0kQ0MKLXRlc3QgLXogIiRMVENGTEFHUyIgJiYgTFRDRkxBR1M9JENGTEFHUwotdGVzdCAteiAiJExEIiAmJiBMRD1sZAotdGVzdCAteiAiJGFjX29iamV4dCIgJiYgYWNfb2JqZXh0PW8KLQotX0xUX0NDX0JBU0VOQU1FKFskY29tcGlsZXJdKQotCi0jIE9ubHkgcGVyZm9ybSB0aGUgY2hlY2sgZm9yIGZpbGUsIGlmIHRoZSBjaGVjayBtZXRob2QgcmVxdWlyZXMgaXQKLXRlc3QgLXogIiRNQUdJQ19DTUQiICYmIE1BR0lDX0NNRD1maWxlCi1jYXNlICRkZXBsaWJzX2NoZWNrX21ldGhvZCBpbgotZmlsZV9tYWdpYyopCi0gIGlmIHRlc3QgIiRmaWxlX21hZ2ljX2NtZCIgPSAnJE1BR0lDX0NNRCc7IHRoZW4KLSAgICBfTFRfUEFUSF9NQUdJQwotICBmaQotICA7OwotZXNhYwotCi0jIFVzZSBDIGZvciB0aGUgZGVmYXVsdCBjb25maWd1cmF0aW9uIGluIHRoZSBsaWJ0b29sIHNjcmlwdAotTFRfU1VQUE9SVEVEX1RBRyhbQ0NdKQotX0xUX0xBTkdfQ19DT05GSUcKLV9MVF9MQU5HX0RFRkFVTFRfQ09ORklHCi1fTFRfQ09ORklHX0NPTU1BTkRTCi1dKSMgX0xUX1NFVFVQCi0KLQotIyBfTFRfUFJFUEFSRV9TRURfUVVPVEVfVkFSUwotIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotIyBEZWZpbmUgYSBmZXcgc2VkIHN1YnN0aXR1dGlvbiB0aGF0IGhlbHAgdXMgZG8gcm9idXN0IHF1b3RpbmcuCi1tNF9kZWZ1bihbX0xUX1BSRVBBUkVfU0VEX1FVT1RFX1ZBUlNdLAotWyMgQmFja3NsYXNoaWZ5IG1ldGFjaGFyYWN0ZXJzIHRoYXQgYXJlIHN0aWxsIGFjdGl2ZSB3aXRoaW4KLSMgZG91YmxlLXF1b3RlZCBzdHJpbmdzLgotc2VkX3F1b3RlX3N1YnN0PSdzL1woW1siYCRcXF1dXCkvXFxcMS9nJwotCi0jIFNhbWUgYXMgYWJvdmUsIGJ1dCBkbyBub3QgcXVvdGUgdmFyaWFibGUgcmVmZXJlbmNlcy4KLWRvdWJsZV9xdW90ZV9zdWJzdD0ncy9cKFtbImBcXF1dXCkvXFxcMS9nJwotCi0jIFNlZCBzdWJzdGl0dXRpb24gdG8gZGVsYXkgZXhwYW5zaW9uIG9mIGFuIGVzY2FwZWQgc2hlbGwgdmFyaWFibGUgaW4gYQotIyBkb3VibGVfcXVvdGVfc3Vic3QnZWQgc3RyaW5nLgotZGVsYXlfdmFyaWFibGVfc3Vic3Q9J3MvXFxcXFxcXFxcXFwkL1xcXFxcXCQvZycKLQotIyBTZWQgc3Vic3RpdHV0aW9uIHRvIGRlbGF5IGV4cGFuc2lvbiBvZiBhbiBlc2NhcGVkIHNpbmdsZSBxdW90ZS4KLWRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdD0ncy8nXCcnLydcJ1xcXFxcXFwnXCcnL2cnCi0KLSMgU2VkIHN1YnN0aXR1dGlvbiB0byBhdm9pZCBhY2NpZGVudGFsIGdsb2JiaW5nIGluIGV2YWxlZCBleHByZXNzaW9ucwotbm9fZ2xvYl9zdWJzdD0ncy9cKi9cXFwqL2cnCi1dKQotCi0jIF9MVF9QUk9HX0xUTUFJTgotIyAtLS0tLS0tLS0tLS0tLS0KLSMgTm90ZSB0aGF0IHRoaXMgY29kZSBpcyBjYWxsZWQgYm90aCBmcm9tIGBjb25maWd1cmUnLCBhbmQgYGNvbmZpZy5zdGF0dXMnCi0jIG5vdyB0aGF0IHdlIHVzZSBBQ19DT05GSUdfQ09NTUFORFMgdG8gZ2VuZXJhdGUgbGlidG9vbC4gIE5vdGFibHksCi0jIGBjb25maWcuc3RhdHVzJyBoYXMgbm8gdmFsdWUgZm9yIGFjX2F1eF9kaXIgdW5sZXNzIHdlIGFyZSB1c2luZyBBdXRvbWFrZSwKLSMgc28gd2UgcGFzcyBhIGNvcHkgYWxvbmcgdG8gbWFrZSBzdXJlIGl0IGhhcyBhIHNlbnNpYmxlIHZhbHVlIGFueXdheS4KLW00X2RlZnVuKFtfTFRfUFJPR19MVE1BSU5dLAotW200X2lmZGVmKFtBQ19SRVFVSVJFX0FVWF9GSUxFXSwgW0FDX1JFUVVJUkVfQVVYX0ZJTEUoW2x0bWFpbi5zaF0pXSlkbmwKLV9MVF9DT05GSUdfTElCVE9PTF9JTklUKFthY19hdXhfZGlyPSckYWNfYXV4X2RpciddKQotbHRtYWluPSIkYWNfYXV4X2Rpci9sdG1haW4uc2giCi1dKSMgX0xUX1BST0dfTFRNQUlOCi0KLQotCi0jIFNvIHRoYXQgd2UgY2FuIHJlY3JlYXRlIGEgZnVsbCBsaWJ0b29sIHNjcmlwdCBpbmNsdWRpbmcgYWRkaXRpb25hbAotIyB0YWdzLCB3ZSBhY2N1bXVsYXRlIHRoZSBjaHVua3Mgb2YgY29kZSB0byBzZW5kIHRvIEFDX0NPTkZJR19DT01NQU5EUwotIyBpbiBtYWNyb3MgYW5kIHRoZW4gbWFrZSBhIHNpbmdsZSBjYWxsIGF0IHRoZSBlbmQgdXNpbmcgdGhlIGBsaWJ0b29sJwotIyBsYWJlbC4KLQotCi0jIF9MVF9DT05GSUdfTElCVE9PTF9JTklUKFtJTklULUNPTU1BTkRTXSkKLSMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotIyBSZWdpc3RlciBJTklULUNPTU1BTkRTIHRvIGJlIHBhc3NlZCB0byBBQ19DT05GSUdfQ09NTUFORFMgbGF0ZXIuCi1tNF9kZWZpbmUoW19MVF9DT05GSUdfTElCVE9PTF9JTklUXSwKLVttNF9pZnZhbChbJDFdLAotICAgICAgICAgIFttNF9hcHBlbmQoW19MVF9PVVRQVVRfTElCVE9PTF9JTklUXSwKLSAgICAgICAgICAgICAgICAgICAgIFskMQotXSldKV0pCi0KLSMgSW5pdGlhbGl6ZS4KLW00X2RlZmluZShbX0xUX09VVFBVVF9MSUJUT09MX0lOSVRdKQotCi0KLSMgX0xUX0NPTkZJR19MSUJUT09MKFtDT01NQU5EU10pCi0jIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotIyBSZWdpc3RlciBDT01NQU5EUyB0byBiZSBwYXNzZWQgdG8gQUNfQ09ORklHX0NPTU1BTkRTIGxhdGVyLgotbTRfZGVmaW5lKFtfTFRfQ09ORklHX0xJQlRPT0xdLAotW200X2lmdmFsKFskMV0sCi0gICAgICAgICAgW200X2FwcGVuZChbX0xUX09VVFBVVF9MSUJUT09MX0NPTU1BTkRTXSwKLSAgICAgICAgICAgICAgICAgICAgIFskMQotXSldKV0pCi0KLSMgSW5pdGlhbGl6ZS4KLW00X2RlZmluZShbX0xUX09VVFBVVF9MSUJUT09MX0NPTU1BTkRTXSkKLQotCi0jIF9MVF9DT05GSUdfU0FWRV9DT01NQU5EUyhbQ09NTUFORFNdLCBbSU5JVF9DT01NQU5EU10pCi0jIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi1tNF9kZWZ1bihbX0xUX0NPTkZJR19TQVZFX0NPTU1BTkRTXSwKLVtfTFRfQ09ORklHX0xJQlRPT0woWyQxXSkKLV9MVF9DT05GSUdfTElCVE9PTF9JTklUKFskMl0pCi1dKQotCi0KLSMgX0xUX0ZPUk1BVF9DT01NRU5UKFtDT01NRU5UXSkKLSMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSMgQWRkIGxlYWRpbmcgY29tbWVudCBtYXJrcyB0byB0aGUgc3RhcnQgb2YgZWFjaCBsaW5lLCBhbmQgYSB0cmFpbGluZwotIyBmdWxsLXN0b3AgdG8gdGhlIHdob2xlIGNvbW1lbnQgaWYgb25lIGlzIG5vdCBwcmVzZW50IGFscmVhZHkuCi1tNF9kZWZpbmUoW19MVF9GT1JNQVRfQ09NTUVOVF0sCi1bbTRfaWZ2YWwoWyQxXSwgWwotbTRfYnBhdHN1YnN0KFttNF9icGF0c3Vic3QoWyQxXSwgW14gKl0sIFsjIF0pXSwKLSAgICAgICAgICAgICAgW1snYCRcXV0sIFtcXFwmXSldbTRfYm1hdGNoKFskMV0sIFtbIT8uXSRdLCBbXSwgWy5dKQotKV0pCi0KLQotCi0KLQotIyBfTFRfREVDTChbQ09ORklHTkFNRV0sIFZBUk5BTUUsIFZBTFVFLCBbREVTQ1JJUFRJT05dLCBbSVMtVEFHR0VEP10pCi0jIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSMgQ09ORklHTkFNRSBpcyB0aGUgbmFtZSBnaXZlbiB0byB0aGUgdmFsdWUgaW4gdGhlIGxpYnRvb2wgc2NyaXB0LgotIyBWQVJOQU1FIGlzIHRoZSAoYmFzZSkgbmFtZSB1c2VkIGluIHRoZSBjb25maWd1cmUgc2NyaXB0LgotIyBWQUxVRSBtYXkgYmUgMCwgMSBvciAyIGZvciBhIGNvbXB1dGVkIHF1b3RlIGVzY2FwZWQgdmFsdWUgYmFzZWQgb24KLSMgVkFSTkFNRS4gIEFueSBvdGhlciB2YWx1ZSB3aWxsIGJlIHVzZWQgZGlyZWN0bHkuCi1tNF9kZWZpbmUoW19MVF9ERUNMXSwKLVtsdF9pZl9hcHBlbmRfdW5pcShbbHRfZGVjbF92YXJuYW1lc10sIFskMl0sIFssIF0sCi0gICAgW2x0X2RpY3RfYWRkX3N1YmtleShbbHRfZGVjbF9kaWN0XSwgWyQyXSwgW2xpYnRvb2xfbmFtZV0sCi0JW200X2lmdmFsKFskMV0sIFskMV0sIFskMl0pXSkKLSAgICBsdF9kaWN0X2FkZF9zdWJrZXkoW2x0X2RlY2xfZGljdF0sIFskMl0sIFt2YWx1ZV0sIFskM10pCi0gICAgbTRfaWZ2YWwoWyQ0XSwKLQlbbHRfZGljdF9hZGRfc3Via2V5KFtsdF9kZWNsX2RpY3RdLCBbJDJdLCBbZGVzY3JpcHRpb25dLCBbJDRdKV0pCi0gICAgbHRfZGljdF9hZGRfc3Via2V5KFtsdF9kZWNsX2RpY3RdLCBbJDJdLAotCVt0YWdnZWQ/XSwgW200X2lmdmFsKFskNV0sIFt5ZXNdLCBbbm9dKV0pXSkKLV0pCi0KLQotIyBfTFRfVEFHREVDTChbQ09ORklHTkFNRV0sIFZBUk5BTUUsIFZBTFVFLCBbREVTQ1JJUFRJT05dKQotIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotbTRfZGVmaW5lKFtfTFRfVEFHREVDTF0sIFtfTFRfREVDTChbJDFdLCBbJDJdLCBbJDNdLCBbJDRdLCBbeWVzXSldKQotCi0KLSMgbHRfZGVjbF90YWdfdmFybmFtZXMoW1NFUEFSQVRPUl0sIFtWQVJOQU1FMS4uLl0pCi0jIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotbTRfZGVmaW5lKFtsdF9kZWNsX3RhZ192YXJuYW1lc10sCi1bX2x0X2RlY2xfZmlsdGVyKFt0YWdnZWQ/XSwgW3llc10sICRAKV0pCi0KLQotIyBfbHRfZGVjbF9maWx0ZXIoU1VCS0VZLCBWQUxVRSwgW1NFUEFSQVRPUl0sIFtWQVJOQU1FMS4uXSkKLSMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi1tNF9kZWZpbmUoW19sdF9kZWNsX2ZpbHRlcl0sCi1bbTRfY2FzZShbJCNdLAotICBbMF0sIFttNF9mYXRhbChbJDA6IHRvbyBmZXcgYXJndW1lbnRzOiAkI10pXSwKLSAgWzFdLCBbbTRfZmF0YWwoWyQwOiB0b28gZmV3IGFyZ3VtZW50czogJCM6ICQxXSldLAotICBbMl0sIFtsdF9kaWN0X2ZpbHRlcihbbHRfZGVjbF9kaWN0XSwgWyQxXSwgWyQyXSwgW10sIGx0X2RlY2xfdmFybmFtZXMpXSwKLSAgWzNdLCBbbHRfZGljdF9maWx0ZXIoW2x0X2RlY2xfZGljdF0sIFskMV0sIFskMl0sIFskM10sIGx0X2RlY2xfdmFybmFtZXMpXSwKLSAgW2x0X2RpY3RfZmlsdGVyKFtsdF9kZWNsX2RpY3RdLCAkQCldKVtdZG5sCi1dKQotCi0KLSMgbHRfZGVjbF9xdW90ZV92YXJuYW1lcyhbU0VQQVJBVE9SXSwgW1ZBUk5BTUUxLi4uXSkKLSMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLW00X2RlZmluZShbbHRfZGVjbF9xdW90ZV92YXJuYW1lc10sCi1bX2x0X2RlY2xfZmlsdGVyKFt2YWx1ZV0sIFsxXSwgJEApXSkKLQotCi0jIGx0X2RlY2xfZHF1b3RlX3Zhcm5hbWVzKFtTRVBBUkFUT1JdLCBbVkFSTkFNRTEuLi5dKQotIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLW00X2RlZmluZShbbHRfZGVjbF9kcXVvdGVfdmFybmFtZXNdLAotW19sdF9kZWNsX2ZpbHRlcihbdmFsdWVdLCBbMl0sICRAKV0pCi0KLQotIyBsdF9kZWNsX3Zhcm5hbWVzX3RhZ2dlZChbU0VQQVJBVE9SXSwgW1ZBUk5BTUUxLi4uXSkKLSMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi1tNF9kZWZpbmUoW2x0X2RlY2xfdmFybmFtZXNfdGFnZ2VkXSwKLVttNF9hc3NlcnQoWyQjIDw9IDJdKWRubAotXyQwKG00X3F1b3RlKG00X2RlZmF1bHQoWyQxXSwgW1ssIF1dKSksCi0gICAgbTRfaWZ2YWwoWyQyXSwgW1skMl1dLCBbbTRfZHF1b3RlKGx0X2RlY2xfdGFnX3Zhcm5hbWVzKV0pLAotICAgIG00X3NwbGl0KG00X25vcm1hbGl6ZShtNF9xdW90ZShfTFRfVEFHUykpLCBbIF0pKV0pCi1tNF9kZWZpbmUoW19sdF9kZWNsX3Zhcm5hbWVzX3RhZ2dlZF0sCi1bbTRfaWZ2YWwoWyQzXSwgW2x0X2NvbWJpbmUoWyQxXSwgWyQyXSwgW19dLCAkMyldKV0pCi0KLQotIyBsdF9kZWNsX2FsbF92YXJuYW1lcyhbU0VQQVJBVE9SXSwgW1ZBUk5BTUUxLi4uXSkKLSMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi1tNF9kZWZpbmUoW2x0X2RlY2xfYWxsX3Zhcm5hbWVzXSwKLVtfJDAobTRfcXVvdGUobTRfZGVmYXVsdChbJDFdLCBbWywgXV0pKSwKLSAgICAgbTRfaWYoWyQyXSwgW10sCi0JICAgbTRfcXVvdGUobHRfZGVjbF92YXJuYW1lcyksCi0JbTRfcXVvdGUobTRfc2hpZnQoJEApKSkpW11kbmwKLV0pCi1tNF9kZWZpbmUoW19sdF9kZWNsX2FsbF92YXJuYW1lc10sCi1bbHRfam9pbigkQCwgbHRfZGVjbF92YXJuYW1lc190YWdnZWQoWyQxXSwKLQkJCWx0X2RlY2xfdGFnX3Zhcm5hbWVzKFtbLCBdXSwgbTRfc2hpZnQoJEApKSkpZG5sCi1dKQotCi0KLSMgX0xUX0NPTkZJR19TVEFUVVNfREVDTEFSRShbVkFSTkFNRV0pCi0jIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotIyBRdW90ZSBhIHZhcmlhYmxlIHZhbHVlLCBhbmQgZm9yd2FyZCBpdCB0byBgY29uZmlnLnN0YXR1cycgc28gdGhhdCBpdHMKLSMgZGVjbGFyYXRpb24gdGhlcmUgd2lsbCBoYXZlIHRoZSBzYW1lIHZhbHVlIGFzIGluIGBjb25maWd1cmUnLiAgVkFSTkFNRQotIyBtdXN0IGhhdmUgYSBzaW5nbGUgcXVvdGUgZGVsaW1pdGVkIHZhbHVlIGZvciB0aGlzIHRvIHdvcmsuCi1tNF9kZWZpbmUoW19MVF9DT05GSUdfU1RBVFVTX0RFQ0xBUkVdLAotWyQxPSdgJEVDSE8gIiRdWyQxIiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCddKQotCi0KLSMgX0xUX0NPTkZJR19TVEFUVVNfREVDTEFSQVRJT05TCi0jIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotIyBXZSBkZWxpbWl0IGxpYnRvb2wgY29uZmlnIHZhcmlhYmxlcyB3aXRoIHNpbmdsZSBxdW90ZXMsIHNvIHdoZW4KLSMgd2Ugd3JpdGUgdGhlbSB0byBjb25maWcuc3RhdHVzLCB3ZSBoYXZlIHRvIGJlIHN1cmUgdG8gcXVvdGUgYWxsCi0jIGVtYmVkZGVkIHNpbmdsZSBxdW90ZXMgcHJvcGVybHkuICBJbiBjb25maWd1cmUsIHRoaXMgbWFjcm8gZXhwYW5kcwotIyBlYWNoIHZhcmlhYmxlIGRlY2xhcmVkIHdpdGggX0xUX0RFQ0wgKGFuZCBfTFRfVEFHREVDTCkgaW50bzoKLSMKLSMgICAgPHZhcj49J2AkRUNITyAiJDx2YXI+IiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKLW00X2RlZnVuKFtfTFRfQ09ORklHX1NUQVRVU19ERUNMQVJBVElPTlNdLAotW200X2ZvcmVhY2goW19sdF92YXJdLCBtNF9xdW90ZShsdF9kZWNsX2FsbF92YXJuYW1lcyksCi0gICAgW200X24oW19MVF9DT05GSUdfU1RBVFVTX0RFQ0xBUkUoX2x0X3ZhcildKV0pXSkKLQotCi0jIF9MVF9MSUJUT09MX1RBR1MKLSMgLS0tLS0tLS0tLS0tLS0tLQotIyBPdXRwdXQgY29tbWVudCBhbmQgbGlzdCBvZiB0YWdzIHN1cHBvcnRlZCBieSB0aGUgc2NyaXB0Ci1tNF9kZWZ1bihbX0xUX0xJQlRPT0xfVEFHU10sCi1bX0xUX0ZPUk1BVF9DT01NRU5UKFtUaGUgbmFtZXMgb2YgdGhlIHRhZ2dlZCBjb25maWd1cmF0aW9ucyBzdXBwb3J0ZWQgYnkgdGhpcyBzY3JpcHRdKWRubAotYXZhaWxhYmxlX3RhZ3M9Il9MVF9UQUdTImRubAotXSkKLQotCi0jIF9MVF9MSUJUT09MX0RFQ0xBUkUoVkFSTkFNRSwgW1RBR10pCi0jIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0jIEV4dHJhY3QgdGhlIGRpY3Rpb25hcnkgdmFsdWVzIGZvciBWQVJOQU1FIChvcHRpb25hbGx5IHdpdGggVEFHKSBhbmQKLSMgZXhwYW5kIHRvIGEgY29tbWVudGVkIHNoZWxsIHZhcmlhYmxlIHNldHRpbmc6Ci0jCi0jICAgICMgU29tZSBjb21tZW50IGFib3V0IHdoYXQgVkFSIGlzIGZvci4KLSMgICAgdmlzaWJsZV9uYW1lPSRsdF9pbnRlcm5hbF9uYW1lCi1tNF9kZWZpbmUoW19MVF9MSUJUT09MX0RFQ0xBUkVdLAotW19MVF9GT1JNQVRfQ09NTUVOVChtNF9xdW90ZShsdF9kaWN0X2ZldGNoKFtsdF9kZWNsX2RpY3RdLCBbJDFdLAotCQkJCQkgICBbZGVzY3JpcHRpb25dKSkpW11kbmwKLW00X3B1c2hkZWYoW19saWJ0b29sX25hbWVdLAotICAgIG00X3F1b3RlKGx0X2RpY3RfZmV0Y2goW2x0X2RlY2xfZGljdF0sIFskMV0sIFtsaWJ0b29sX25hbWVdKSkpW11kbmwKLW00X2Nhc2UobTRfcXVvdGUobHRfZGljdF9mZXRjaChbbHRfZGVjbF9kaWN0XSwgWyQxXSwgW3ZhbHVlXSkpLAotICAgIFswXSwgW19saWJ0b29sX25hbWU9WyRdJDFdLAotICAgIFsxXSwgW19saWJ0b29sX25hbWU9JGx0X1tdJDFdLAotICAgIFsyXSwgW19saWJ0b29sX25hbWU9JGx0X1tdJDFdLAotICAgIFtfbGlidG9vbF9uYW1lPWx0X2RpY3RfZmV0Y2goW2x0X2RlY2xfZGljdF0sIFskMV0sIFt2YWx1ZV0pXSlbXWRubAotbTRfaWZ2YWwoWyQyXSwgW18kMl0pW11tNF9wb3BkZWYoW19saWJ0b29sX25hbWVdKVtdZG5sCi1dKQotCi0KLSMgX0xUX0xJQlRPT0xfQ09ORklHX1ZBUlMKLSMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSMgUHJvZHVjZSBjb21tZW50ZWQgZGVjbGFyYXRpb25zIG9mIG5vbi10YWdnZWQgbGlidG9vbCBjb25maWcgdmFyaWFibGVzCi0jIHN1aXRhYmxlIGZvciBpbnNlcnRpb24gaW4gdGhlIExJQlRPT0wgQ09ORklHIHNlY3Rpb24gb2YgdGhlIGBsaWJ0b29sJwotIyBzY3JpcHQuICBUYWdnZWQgbGlidG9vbCBjb25maWcgdmFyaWFibGVzIChldmVuIGZvciB0aGUgTElCVE9PTCBDT05GSUcKLSMgc2VjdGlvbikgYXJlIHByb2R1Y2VkIGJ5IF9MVF9MSUJUT09MX1RBR19WQVJTLgotbTRfZGVmdW4oW19MVF9MSUJUT09MX0NPTkZJR19WQVJTXSwKLVttNF9mb3JlYWNoKFtfbHRfdmFyXSwKLSAgICBtNF9xdW90ZShfbHRfZGVjbF9maWx0ZXIoW3RhZ2dlZD9dLCBbbm9dLCBbXSwgbHRfZGVjbF92YXJuYW1lcykpLAotICAgIFttNF9uKFtfTFRfTElCVE9PTF9ERUNMQVJFKF9sdF92YXIpXSldKV0pCi0KLQotIyBfTFRfTElCVE9PTF9UQUdfVkFSUyhUQUcpCi0jIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLW00X2RlZmluZShbX0xUX0xJQlRPT0xfVEFHX1ZBUlNdLAotW200X2ZvcmVhY2goW19sdF92YXJdLCBtNF9xdW90ZShsdF9kZWNsX3RhZ192YXJuYW1lcyksCi0gICAgW200X24oW19MVF9MSUJUT09MX0RFQ0xBUkUoX2x0X3ZhciwgWyQxXSldKV0pXSkKLQotCi0jIF9MVF9UQUdWQVIoVkFSTkFNRSwgW1RBR05BTUVdKQotIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLW00X2RlZmluZShbX0xUX1RBR1ZBUl0sIFttNF9pZnZhbChbJDJdLCBbJDFfJDJdLCBbJDFdKV0pCi0KLQotIyBfTFRfQ09ORklHX0NPTU1BTkRTCi0jIC0tLS0tLS0tLS0tLS0tLS0tLS0KLSMgU2VuZCBhY2N1bXVsYXRlZCBvdXRwdXQgdG8gJENPTkZJR19TVEFUVVMuICBUaGFua3MgdG8gdGhlIGxpc3RzIG9mCi0jIHZhcmlhYmxlcyBmb3Igc2luZ2xlIGFuZCBkb3VibGUgcXVvdGUgZXNjYXBpbmcgd2Ugc2F2ZWQgZnJvbSBjYWxscwotIyB0byBfTFRfREVDTCwgd2UgY2FuIHB1dCBxdW90ZSBlc2NhcGVkIHZhcmlhYmxlcyBkZWNsYXJhdGlvbnMKLSMgaW50byBgY29uZmlnLnN0YXR1cycsIGFuZCB0aGVuIHRoZSBzaGVsbCBjb2RlIHRvIHF1b3RlIGVzY2FwZSB0aGVtIGluCi0jIGZvciBsb29wcyBpbiBgY29uZmlnLnN0YXR1cycuICBGaW5hbGx5LCBhbnkgYWRkaXRpb25hbCBjb2RlIGFjY3VtdWxhdGVkCi0jIGZyb20gY2FsbHMgdG8gX0xUX0NPTkZJR19MSUJUT09MX0lOSVQgaXMgZXhwYW5kZWQuCi1tNF9kZWZ1bihbX0xUX0NPTkZJR19DT01NQU5EU10sCi1bQUNfUFJPVklERV9JRkVMU0UoW0xUX09VVFBVVF0sCi0JZG5sIElmIHRoZSBsaWJ0b29sIGdlbmVyYXRpb24gY29kZSBoYXMgYmVlbiBwbGFjZWQgaW4gJENPTkZJR19MVCwKLQlkbmwgaW5zdGVhZCBvZiBkdXBsaWNhdGluZyBpdCBhbGwgb3ZlciBhZ2FpbiBpbnRvIGNvbmZpZy5zdGF0dXMsCi0JZG5sIHRoZW4gd2Ugd2lsbCBoYXZlIGNvbmZpZy5zdGF0dXMgcnVuICRDT05GSUdfTFQgbGF0ZXIsIHNvIGl0Ci0JZG5sIG5lZWRzIHRvIGtub3cgd2hhdCBuYW1lIGlzIHN0b3JlZCB0aGVyZToKLSAgICAgICAgW0FDX0NPTkZJR19DT01NQU5EUyhbbGlidG9vbF0sCi0gICAgICAgICAgICBbJFNIRUxMICRDT05GSUdfTFQgfHwgQVNfRVhJVCgxKV0sIFtDT05GSUdfTFQ9JyRDT05GSUdfTFQnXSldLAotICAgIGRubCBJZiB0aGUgbGlidG9vbCBnZW5lcmF0aW9uIGNvZGUgaXMgZGVzdGluZWQgZm9yIGNvbmZpZy5zdGF0dXMsCi0gICAgZG5sIGV4cGFuZCB0aGUgYWNjdW11bGF0ZWQgY29tbWFuZHMgYW5kIGluaXQgY29kZSBub3c6Ci0gICAgW0FDX0NPTkZJR19DT01NQU5EUyhbbGlidG9vbF0sCi0gICAgICAgIFtfTFRfT1VUUFVUX0xJQlRPT0xfQ09NTUFORFNdLCBbX0xUX09VVFBVVF9MSUJUT09MX0NPTU1BTkRTX0lOSVRdKV0pCi1dKSNfTFRfQ09ORklHX0NPTU1BTkRTCi0KLQotIyBJbml0aWFsaXplLgotbTRfZGVmaW5lKFtfTFRfT1VUUFVUX0xJQlRPT0xfQ09NTUFORFNfSU5JVF0sCi1bCi0KLSMgVGhlIEhQLVVYIGtzaCBhbmQgUE9TSVggc2hlbGwgcHJpbnQgdGhlIHRhcmdldCBkaXJlY3RvcnkgdG8gc3Rkb3V0Ci0jIGlmIENEUEFUSCBpcyBzZXQuCi0odW5zZXQgQ0RQQVRIKSA+L2Rldi9udWxsIDI+JjEgJiYgdW5zZXQgQ0RQQVRICi0KLXNlZF9xdW90ZV9zdWJzdD0nJHNlZF9xdW90ZV9zdWJzdCcKLWRvdWJsZV9xdW90ZV9zdWJzdD0nJGRvdWJsZV9xdW90ZV9zdWJzdCcKLWRlbGF5X3ZhcmlhYmxlX3N1YnN0PSckZGVsYXlfdmFyaWFibGVfc3Vic3QnCi1fTFRfQ09ORklHX1NUQVRVU19ERUNMQVJBVElPTlMKLUxUQ0M9JyRMVENDJwotTFRDRkxBR1M9JyRMVENGTEFHUycKLWNvbXBpbGVyPSckY29tcGlsZXJfREVGQVVMVCcKLQotIyBBIGZ1bmN0aW9uIHRoYXQgaXMgdXNlZCB3aGVuIHRoZXJlIGlzIG5vIHByaW50IGJ1aWx0aW4gb3IgcHJpbnRmLgotZnVuY19mYWxsYmFja19lY2hvICgpCi17Ci0gIGV2YWwgJ2NhdCA8PF9MVEVDSE9fRU9GCi1cJFtdMQotX0xURUNIT19FT0YnCi19Ci0KLSMgUXVvdGUgZXZhbGVkIHN0cmluZ3MuCi1mb3IgdmFyIGluIGx0X2RlY2xfYWxsX3Zhcm5hbWVzKFtbIFwKLV1dLCBsdF9kZWNsX3F1b3RlX3Zhcm5hbWVzKTsgZG8KLSAgICBjYXNlIFxgZXZhbCBcXFxcXCRFQ0hPIFxcXFwiIlxcXFxcJFwkdmFyIlxcXFwiXGAgaW4KLSAgICAqW1tcXFxcXFxcYFxcIlxcXCRdXSopCi0gICAgICBldmFsICJsdF9cJHZhcj1cXFxcXFwiXFxcYFxcXCRFQ0hPIFxcIlxcXCRcJHZhclxcIiB8IFxcXCRTRUQgXFwiXFxcJHNlZF9xdW90ZV9zdWJzdFxcIlxcXGBcXFxcXFwiIgotICAgICAgOzsKLSAgICAqKQotICAgICAgZXZhbCAibHRfXCR2YXI9XFxcXFxcIlxcXCRcJHZhclxcXFxcXCIiCi0gICAgICA7OwotICAgIGVzYWMKLWRvbmUKLQotIyBEb3VibGUtcXVvdGUgZG91YmxlLWV2YWxlZCBzdHJpbmdzLgotZm9yIHZhciBpbiBsdF9kZWNsX2FsbF92YXJuYW1lcyhbWyBcCi1dXSwgbHRfZGVjbF9kcXVvdGVfdmFybmFtZXMpOyBkbwotICAgIGNhc2UgXGBldmFsIFxcXFxcJEVDSE8gXFxcXCIiXFxcXFwkXCR2YXIiXFxcXCJcYCBpbgotICAgICpbW1xcXFxcXFxgXFwiXFxcJF1dKikKLSAgICAgIGV2YWwgImx0X1wkdmFyPVxcXFxcXCJcXFxgXFxcJEVDSE8gXFwiXFxcJFwkdmFyXFwiIHwgXFxcJFNFRCAtZSBcXCJcXFwkZG91YmxlX3F1b3RlX3N1YnN0XFwiIC1lIFxcIlxcXCRzZWRfcXVvdGVfc3Vic3RcXCIgLWUgXFwiXFxcJGRlbGF5X3ZhcmlhYmxlX3N1YnN0XFwiXFxcYFxcXFxcXCIiCi0gICAgICA7OwotICAgICopCi0gICAgICBldmFsICJsdF9cJHZhcj1cXFxcXFwiXFxcJFwkdmFyXFxcXFxcIiIKLSAgICAgIDs7Ci0gICAgZXNhYwotZG9uZQotCi1fTFRfT1VUUFVUX0xJQlRPT0xfSU5JVAotXSkKLQotIyBfTFRfR0VORVJBVEVEX0ZJTEVfSU5JVChGSUxFLCBbQ09NTUVOVF0pCi0jIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotIyBHZW5lcmF0ZSBhIGNoaWxkIHNjcmlwdCBGSUxFIHdpdGggYWxsIGluaXRpYWxpemF0aW9uIG5lY2Vzc2FyeSB0bwotIyByZXVzZSB0aGUgZW52aXJvbm1lbnQgbGVhcm5lZCBieSB0aGUgcGFyZW50IHNjcmlwdCwgYW5kIG1ha2UgdGhlCi0jIGZpbGUgZXhlY3V0YWJsZS4gIElmIENPTU1FTlQgaXMgc3VwcGxpZWQsIGl0IGlzIGluc2VydGVkIGFmdGVyIHRoZQotIyBgIyEnIHNlcXVlbmNlIGJ1dCBiZWZvcmUgaW5pdGlhbGl6YXRpb24gdGV4dCBiZWdpbnMuICBBZnRlciB0aGlzCi0jIG1hY3JvLCBhZGRpdGlvbmFsIHRleHQgY2FuIGJlIGFwcGVuZGVkIHRvIEZJTEUgdG8gZm9ybSB0aGUgYm9keSBvZgotIyB0aGUgY2hpbGQgc2NyaXB0LiAgVGhlIG1hY3JvIGVuZHMgd2l0aCBub24temVybyBzdGF0dXMgaWYgdGhlCi0jIGZpbGUgY291bGQgbm90IGJlIGZ1bGx5IHdyaXR0ZW4gKHN1Y2ggYXMgaWYgdGhlIGRpc2sgaXMgZnVsbCkuCi1tNF9pZmRlZihbQVNfSU5JVF9HRU5FUkFURURdLAotW200X2RlZnVuKFtfTFRfR0VORVJBVEVEX0ZJTEVfSU5JVF0sW0FTX0lOSVRfR0VORVJBVEVEKCRAKV0pXSwKLVttNF9kZWZ1bihbX0xUX0dFTkVSQVRFRF9GSUxFX0lOSVRdLAotW200X3JlcXVpcmUoW0FTX1BSRVBBUkVdKV1kbmwKLVttNF9wdXNoZGVmKFtBU19NRVNTQUdFX0xPR19GRF0pXWRubAotW2x0X3dyaXRlX2ZhaWw9MAotY2F0ID4kMSA8PF9BU0VPRiB8fCBsdF93cml0ZV9mYWlsPTEKLSMhICRTSEVMTAotIyBHZW5lcmF0ZWQgYnkgJGFzX21lLgotJDIKLVNIRUxMPVwke0NPTkZJR19TSEVMTC0kU0hFTEx9Ci1leHBvcnQgU0hFTEwKLV9BU0VPRgotY2F0ID4+JDEgPDxcX0FTRU9GIHx8IGx0X3dyaXRlX2ZhaWw9MQotQVNfU0hFTExfU0FOSVRJWkUKLV9BU19QUkVQQVJFCi1leGVjIEFTX01FU1NBR0VfRkQ+JjEKLV9BU0VPRgotdGVzdCAkbHRfd3JpdGVfZmFpbCA9IDAgJiYgY2htb2QgK3ggJDFbXWRubAotbTRfcG9wZGVmKFtBU19NRVNTQUdFX0xPR19GRF0pXSldKSMgX0xUX0dFTkVSQVRFRF9GSUxFX0lOSVQKLQotIyBMVF9PVVRQVVQKLSMgLS0tLS0tLS0tCi0jIFRoaXMgbWFjcm8gYWxsb3dzIGVhcmx5IGdlbmVyYXRpb24gb2YgdGhlIGxpYnRvb2wgc2NyaXB0IChiZWZvcmUKLSMgQUNfT1VUUFVUIGlzIGNhbGxlZCksIGluY2FzZSBpdCBpcyB1c2VkIGluIGNvbmZpZ3VyZSBmb3IgY29tcGlsYXRpb24KLSMgdGVzdHMuCi1BQ19ERUZVTihbTFRfT1VUUFVUXSwKLVs6ICR7Q09ORklHX0xUPS4vY29uZmlnLmx0fQotQUNfTVNHX05PVElDRShbY3JlYXRpbmcgJENPTkZJR19MVF0pCi1fTFRfR0VORVJBVEVEX0ZJTEVfSU5JVChbIiRDT05GSUdfTFQiXSwKLVsjIFJ1biB0aGlzIGZpbGUgdG8gcmVjcmVhdGUgYSBsaWJ0b29sIHN0dWIgd2l0aCB0aGUgY3VycmVudCBjb25maWd1cmF0aW9uLl0pCi0KLWNhdCA+PiIkQ09ORklHX0xUIiA8PFxfTFRFT0YKLWx0X2NsX3NpbGVudD1mYWxzZQotZXhlYyBBU19NRVNTQUdFX0xPR19GRD4+Y29uZmlnLmxvZwotewotICBlY2hvCi0gIEFTX0JPWChbUnVubmluZyAkYXNfbWUuXSkKLX0gPiZBU19NRVNTQUdFX0xPR19GRAotCi1sdF9jbF9oZWxwPSJcCi1cYCRhc19tZScgY3JlYXRlcyBhIGxvY2FsIGxpYnRvb2wgc3R1YiBmcm9tIHRoZSBjdXJyZW50IGNvbmZpZ3VyYXRpb24sCi1mb3IgdXNlIGluIGZ1cnRoZXIgY29uZmlndXJlIHRpbWUgdGVzdHMgYmVmb3JlIHRoZSByZWFsIGxpYnRvb2wgaXMKLWdlbmVyYXRlZC4KLQotVXNhZ2U6ICRbMF0gW1tPUFRJT05TXV0KLQotICAtaCwgLS1oZWxwICAgICAgcHJpbnQgdGhpcyBoZWxwLCB0aGVuIGV4aXQKLSAgLVYsIC0tdmVyc2lvbiAgIHByaW50IHZlcnNpb24gbnVtYmVyLCB0aGVuIGV4aXQKLSAgLXEsIC0tcXVpZXQgICAgIGRvIG5vdCBwcmludCBwcm9ncmVzcyBtZXNzYWdlcwotICAtZCwgLS1kZWJ1ZyAgICAgZG9uJ3QgcmVtb3ZlIHRlbXBvcmFyeSBmaWxlcwotCi1SZXBvcnQgYnVncyB0byA8YnVnLWxpYnRvb2xAZ251Lm9yZz4uIgotCi1sdF9jbF92ZXJzaW9uPSJcCi1tNF9pZnNldChbQUNfUEFDS0FHRV9OQU1FXSwgW0FDX1BBQ0tBR0VfTkFNRSBdKWNvbmZpZy5sdFtdZG5sCi1tNF9pZnNldChbQUNfUEFDS0FHRV9WRVJTSU9OXSwgWyBBQ19QQUNLQUdFX1ZFUlNJT05dKQotY29uZmlndXJlZCBieSAkWzBdLCBnZW5lcmF0ZWQgYnkgbTRfUEFDS0FHRV9TVFJJTkcuCi0KLUNvcHlyaWdodCAoQykgMjAxMCBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KLVRoaXMgY29uZmlnLmx0IHNjcmlwdCBpcyBmcmVlIHNvZnR3YXJlOyB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uCi1naXZlcyB1bmxpbWl0ZWQgcGVybWlzaW9uIHRvIGNvcHksIGRpc3RyaWJ1dGUgYW5kIG1vZGlmeSBpdC4iCi0KLXdoaWxlIHRlc3QgJFsjXSAhPSAwCi1kbwotICBjYXNlICRbMV0gaW4KLSAgICAtLXZlcnNpb24gfCAtLXYqIHwgLVYgKQotICAgICAgZWNobyAiJGx0X2NsX3ZlcnNpb24iOyBleGl0IDAgOzsKLSAgICAtLWhlbHAgfCAtLWgqIHwgLWggKQotICAgICAgZWNobyAiJGx0X2NsX2hlbHAiOyBleGl0IDAgOzsKLSAgICAtLWRlYnVnIHwgLS1kKiB8IC1kICkKLSAgICAgIGRlYnVnPTogOzsKLSAgICAtLXF1aWV0IHwgLS1xKiB8IC0tc2lsZW50IHwgLS1zKiB8IC1xICkKLSAgICAgIGx0X2NsX3NpbGVudD06IDs7Ci0KLSAgICAtKikgQUNfTVNHX0VSUk9SKFt1bnJlY29nbml6ZWQgb3B0aW9uOiAkWzFdCi1UcnkgXGAkWzBdIC0taGVscCcgZm9yIG1vcmUgaW5mb3JtYXRpb24uXSkgOzsKLQotICAgICopIEFDX01TR19FUlJPUihbdW5yZWNvZ25pemVkIGFyZ3VtZW50OiAkWzFdCi1UcnkgXGAkWzBdIC0taGVscCcgZm9yIG1vcmUgaW5mb3JtYXRpb24uXSkgOzsKLSAgZXNhYwotICBzaGlmdAotZG9uZQotCi1pZiAkbHRfY2xfc2lsZW50OyB0aGVuCi0gIGV4ZWMgQVNfTUVTU0FHRV9GRD4vZGV2L251bGwKLWZpCi1fTFRFT0YKLQotY2F0ID4+IiRDT05GSUdfTFQiIDw8X0xURU9GCi1fTFRfT1VUUFVUX0xJQlRPT0xfQ09NTUFORFNfSU5JVAotX0xURU9GCi0KLWNhdCA+PiIkQ09ORklHX0xUIiA8PFxfTFRFT0YKLUFDX01TR19OT1RJQ0UoW2NyZWF0aW5nICRvZmlsZV0pCi1fTFRfT1VUUFVUX0xJQlRPT0xfQ09NTUFORFMKLUFTX0VYSVQoMCkKLV9MVEVPRgotY2htb2QgK3ggIiRDT05GSUdfTFQiCi0KLSMgY29uZmlndXJlIGlzIHdyaXRpbmcgdG8gY29uZmlnLmxvZywgYnV0IGNvbmZpZy5sdCBkb2VzIGl0cyBvd24gcmVkaXJlY3Rpb24sCi0jIGFwcGVuZGluZyB0byBjb25maWcubG9nLCB3aGljaCBmYWlscyBvbiBET1MsIGFzIGNvbmZpZy5sb2cgaXMgc3RpbGwga2VwdAotIyBvcGVuIGJ5IGNvbmZpZ3VyZS4gIEhlcmUgd2UgZXhlYyB0aGUgRkQgdG8gL2Rldi9udWxsLCBlZmZlY3RpdmVseSBjbG9zaW5nCi0jIGNvbmZpZy5sb2csIHNvIGl0IGNhbiBiZSBwcm9wZXJseSAocmUpb3BlbmVkIGFuZCBhcHBlbmRlZCB0byBieSBjb25maWcubHQuCi1sdF9jbF9zdWNjZXNzPToKLXRlc3QgIiRzaWxlbnQiID0geWVzICYmCi0gIGx0X2NvbmZpZ19sdF9hcmdzPSIkbHRfY29uZmlnX2x0X2FyZ3MgLS1xdWlldCIKLWV4ZWMgQVNfTUVTU0FHRV9MT0dfRkQ+L2Rldi9udWxsCi0kU0hFTEwgIiRDT05GSUdfTFQiICRsdF9jb25maWdfbHRfYXJncyB8fCBsdF9jbF9zdWNjZXNzPWZhbHNlCi1leGVjIEFTX01FU1NBR0VfTE9HX0ZEPj5jb25maWcubG9nCi0kbHRfY2xfc3VjY2VzcyB8fCBBU19FWElUKDEpCi1dKSMgTFRfT1VUUFVUCi0KLQotIyBfTFRfQ09ORklHKFRBRykKLSMgLS0tLS0tLS0tLS0tLS0tCi0jIElmIFRBRyBpcyB0aGUgYnVpbHQtaW4gdGFnLCBjcmVhdGUgYW4gaW5pdGlhbCBsaWJ0b29sIHNjcmlwdCB3aXRoIGEKLSMgZGVmYXVsdCBjb25maWd1cmF0aW9uIGZyb20gdGhlIHVudGFnZ2VkIGNvbmZpZyB2YXJzLiAgT3RoZXJ3aXNlIGFkZCBjb2RlCi0jIHRvIGNvbmZpZy5zdGF0dXMgZm9yIGFwcGVuZGluZyB0aGUgY29uZmlndXJhdGlvbiBuYW1lZCBieSBUQUcgZnJvbSB0aGUKLSMgbWF0Y2hpbmcgdGFnZ2VkIGNvbmZpZyB2YXJzLgotbTRfZGVmdW4oW19MVF9DT05GSUddLAotW200X3JlcXVpcmUoW19MVF9GSUxFVVRJTFNfREVGQVVMVFNdKWRubAotX0xUX0NPTkZJR19TQVZFX0NPTU1BTkRTKFsKLSAgbTRfZGVmaW5lKFtfTFRfVEFHXSwgbTRfaWYoWyQxXSwgW10sIFtDXSwgWyQxXSkpZG5sCi0gIG00X2lmKF9MVF9UQUcsIFtDXSwgWwotICAgICMgU2VlIGlmIHdlIGFyZSBydW5uaW5nIG9uIHpzaCwgYW5kIHNldCB0aGUgb3B0aW9ucyB3aGljaCBhbGxvdyBvdXIKLSAgICAjIGNvbW1hbmRzIHRocm91Z2ggd2l0aG91dCByZW1vdmFsIG9mIFwgZXNjYXBlcy4KLSAgICBpZiB0ZXN0IC1uICIke1pTSF9WRVJTSU9OK3NldH0iIDsgdGhlbgotICAgICAgc2V0b3B0IE5PX0dMT0JfU1VCU1QKLSAgICBmaQotCi0gICAgY2ZnZmlsZT0iJHtvZmlsZX1UIgotICAgIHRyYXAgIiRSTSBcIiRjZmdmaWxlXCI7IGV4aXQgMSIgMSAyIDE1Ci0gICAgJFJNICIkY2ZnZmlsZSIKLQotICAgIGNhdCA8PF9MVF9FT0YgPj4gIiRjZmdmaWxlIgotIyEgJFNIRUxMCi0KLSMgYCRFQ0hPICIkb2ZpbGUiIHwgc2VkICdzJV4uKi8lJSdgIC0gUHJvdmlkZSBnZW5lcmFsaXplZCBsaWJyYXJ5LWJ1aWxkaW5nIHN1cHBvcnQgc2VydmljZXMuCi0jIEdlbmVyYXRlZCBhdXRvbWF0aWNhbGx5IGJ5ICRhc19tZSAoJFBBQ0tBR0UkVElNRVNUQU1QKSAkVkVSU0lPTgotIyBMaWJ0b29sIHdhcyBjb25maWd1cmVkIG9uIGhvc3QgYChob3N0bmFtZSB8fCB1bmFtZSAtbikgMj4vZGV2L251bGwgfCBzZWQgMXFgOgotIyBOT1RFOiBDaGFuZ2VzIG1hZGUgdG8gdGhpcyBmaWxlIHdpbGwgYmUgbG9zdDogbG9vayBhdCBsdG1haW4uc2guCi0jCi1fTFRfQ09QWUlORwotX0xUX0xJQlRPT0xfVEFHUwotCi0jICMjIyBCRUdJTiBMSUJUT09MIENPTkZJRwotX0xUX0xJQlRPT0xfQ09ORklHX1ZBUlMKLV9MVF9MSUJUT09MX1RBR19WQVJTCi0jICMjIyBFTkQgTElCVE9PTCBDT05GSUcKLQotX0xUX0VPRgotCi0gIGNhc2UgJGhvc3Rfb3MgaW4KLSAgYWl4MyopCi0gICAgY2F0IDw8XF9MVF9FT0YgPj4gIiRjZmdmaWxlIgotIyBBSVggc29tZXRpbWVzIGhhcyBwcm9ibGVtcyB3aXRoIHRoZSBHQ0MgY29sbGVjdDIgcHJvZ3JhbS4gIEZvciBzb21lCi0jIHJlYXNvbiwgaWYgd2Ugc2V0IHRoZSBDT0xMRUNUX05BTUVTIGVudmlyb25tZW50IHZhcmlhYmxlLCB0aGUgcHJvYmxlbXMKLSMgdmFuaXNoIGluIGEgcHVmZiBvZiBzbW9rZS4KLWlmIHRlc3QgIlgke0NPTExFQ1RfTkFNRVMrc2V0fSIgIT0gWHNldDsgdGhlbgotICBDT0xMRUNUX05BTUVTPQotICBleHBvcnQgQ09MTEVDVF9OQU1FUwotZmkKLV9MVF9FT0YKLSAgICA7OwotICBlc2FjCi0KLSAgX0xUX1BST0dfTFRNQUlOCi0KLSAgIyBXZSB1c2Ugc2VkIGluc3RlYWQgb2YgY2F0IGJlY2F1c2UgYmFzaCBvbiBESkdQUCBnZXRzIGNvbmZ1c2VkIGlmCi0gICMgaWYgZmluZHMgbWl4ZWQgQ1IvTEYgYW5kIExGLW9ubHkgbGluZXMuICBTaW5jZSBzZWQgb3BlcmF0ZXMgaW4KLSAgIyB0ZXh0IG1vZGUsIGl0IHByb3Blcmx5IGNvbnZlcnRzIGxpbmVzIHRvIENSL0xGLiAgVGhpcyBiYXNoIHByb2JsZW0KLSAgIyBpcyByZXBvcnRlZGx5IGZpeGVkLCBidXQgd2h5IG5vdCBydW4gb24gb2xkIHZlcnNpb25zIHRvbz8KLSAgc2VkICckcScgIiRsdG1haW4iID4+ICIkY2ZnZmlsZSIgXAotICAgICB8fCAocm0gLWYgIiRjZmdmaWxlIjsgZXhpdCAxKQotCi0gIF9MVF9QUk9HX1JFUExBQ0VfU0hFTExGTlMKLQotICAgbXYgLWYgIiRjZmdmaWxlIiAiJG9maWxlIiB8fAotICAgIChybSAtZiAiJG9maWxlIiAmJiBjcCAiJGNmZ2ZpbGUiICIkb2ZpbGUiICYmIHJtIC1mICIkY2ZnZmlsZSIpCi0gIGNobW9kICt4ICIkb2ZpbGUiCi1dLAotW2NhdCA8PF9MVF9FT0YgPj4gIiRvZmlsZSIKLQotZG5sIFVuZm9ydHVuYXRlbHkgd2UgaGF2ZSB0byB1c2UgJDEgaGVyZSwgc2luY2UgX0xUX1RBRyBpcyBub3QgZXhwYW5kZWQKLWRubCBpbiBhIGNvbW1lbnQgKGllIGFmdGVyIGEgIykuCi0jICMjIyBCRUdJTiBMSUJUT09MIFRBRyBDT05GSUc6ICQxCi1fTFRfTElCVE9PTF9UQUdfVkFSUyhfTFRfVEFHKQotIyAjIyMgRU5EIExJQlRPT0wgVEFHIENPTkZJRzogJDEKLV9MVF9FT0YKLV0pZG5sIC9tNF9pZgotXSwKLVttNF9pZihbJDFdLCBbXSwgWwotICAgIFBBQ0tBR0U9JyRQQUNLQUdFJwotICAgIFZFUlNJT049JyRWRVJTSU9OJwotICAgIFRJTUVTVEFNUD0nJFRJTUVTVEFNUCcKLSAgICBSTT0nJFJNJwotICAgIG9maWxlPSckb2ZpbGUnXSwgW10pCi1dKWRubCAvX0xUX0NPTkZJR19TQVZFX0NPTU1BTkRTCi1dKSMgX0xUX0NPTkZJRwotCi0KLSMgTFRfU1VQUE9SVEVEX1RBRyhUQUcpCi0jIC0tLS0tLS0tLS0tLS0tLS0tLS0tLQotIyBUcmFjZSB0aGlzIG1hY3JvIHRvIGRpc2NvdmVyIHdoYXQgdGFncyBhcmUgc3VwcG9ydGVkIGJ5IHRoZSBsaWJ0b29sCi0jIC0tdGFnIG9wdGlvbiwgdXNpbmc6Ci0jICAgIGF1dG9jb25mIC0tdHJhY2UgJ0xUX1NVUFBPUlRFRF9UQUc6JDEnCi1BQ19ERUZVTihbTFRfU1VQUE9SVEVEX1RBR10sIFtdKQotCi0KLSMgQyBzdXBwb3J0IGlzIGJ1aWx0LWluIGZvciBub3cKLW00X2RlZmluZShbX0xUX0xBTkdfQ19lbmFibGVkXSwgW10pCi1tNF9kZWZpbmUoW19MVF9UQUdTXSwgW10pCi0KLQotIyBMVF9MQU5HKExBTkcpCi0jIC0tLS0tLS0tLS0tLS0KLSMgRW5hYmxlIGxpYnRvb2wgc3VwcG9ydCBmb3IgdGhlIGdpdmVuIGxhbmd1YWdlIGlmIG5vdCBhbHJlYWR5IGVuYWJsZWQuCi1BQ19ERUZVTihbTFRfTEFOR10sCi1bQUNfQkVGT1JFKFskMF0sIFtMVF9PVVRQVVRdKWRubAotbTRfY2FzZShbJDFdLAotICBbQ10sCQkJW19MVF9MQU5HKEMpXSwKLSAgW0MrK10sCQlbX0xUX0xBTkcoQ1hYKV0sCi0gIFtKYXZhXSwJCVtfTFRfTEFORyhHQ0opXSwKLSAgW0ZvcnRyYW4gNzddLAkJW19MVF9MQU5HKEY3NyldLAotICBbRm9ydHJhbl0sCQlbX0xUX0xBTkcoRkMpXSwKLSAgW1dpbmRvd3MgUmVzb3VyY2VdLAlbX0xUX0xBTkcoUkMpXSwKLSAgW200X2lmZGVmKFtfTFRfTEFOR19dJDFbX0NPTkZJR10sCi0gICAgW19MVF9MQU5HKCQxKV0sCi0gICAgW200X2ZhdGFsKFskMDogdW5zdXBwb3J0ZWQgbGFuZ3VhZ2U6ICIkMSJdKV0pXSlkbmwKLV0pIyBMVF9MQU5HCi0KLQotIyBfTFRfTEFORyhMQU5HTkFNRSkKLSMgLS0tLS0tLS0tLS0tLS0tLS0tCi1tNF9kZWZ1bihbX0xUX0xBTkddLAotW200X2lmZGVmKFtfTFRfTEFOR19dJDFbX2VuYWJsZWRdLCBbXSwKLSAgW0xUX1NVUFBPUlRFRF9UQUcoWyQxXSlkbmwKLSAgbTRfYXBwZW5kKFtfTFRfVEFHU10sIFskMSBdKWRubAotICBtNF9kZWZpbmUoW19MVF9MQU5HX10kMVtfZW5hYmxlZF0sIFtdKWRubAotICBfTFRfTEFOR18kMV9DT05GSUcoJDEpXSlkbmwKLV0pIyBfTFRfTEFORwotCi0KLSMgX0xUX0xBTkdfREVGQVVMVF9DT05GSUcKLSMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLW00X2RlZnVuKFtfTFRfTEFOR19ERUZBVUxUX0NPTkZJR10sCi1bQUNfUFJPVklERV9JRkVMU0UoW0FDX1BST0dfQ1hYXSwKLSAgW0xUX0xBTkcoQ1hYKV0sCi0gIFttNF9kZWZpbmUoW0FDX1BST0dfQ1hYXSwgZGVmbihbQUNfUFJPR19DWFhdKVtMVF9MQU5HKENYWCldKV0pCi0KLUFDX1BST1ZJREVfSUZFTFNFKFtBQ19QUk9HX0Y3N10sCi0gIFtMVF9MQU5HKEY3NyldLAotICBbbTRfZGVmaW5lKFtBQ19QUk9HX0Y3N10sIGRlZm4oW0FDX1BST0dfRjc3XSlbTFRfTEFORyhGNzcpXSldKQotCi1BQ19QUk9WSURFX0lGRUxTRShbQUNfUFJPR19GQ10sCi0gIFtMVF9MQU5HKEZDKV0sCi0gIFttNF9kZWZpbmUoW0FDX1BST0dfRkNdLCBkZWZuKFtBQ19QUk9HX0ZDXSlbTFRfTEFORyhGQyldKV0pCi0KLWRubCBUaGUgY2FsbCB0byBbQV1bTV9QUk9HX0dDSl0gaXMgcXVvdGVkIGxpa2UgdGhhdCB0byBzdG9wIGFjbG9jYWwKLWRubCBwdWxsaW5nIHRoaW5ncyBpbiBuZWVkbGVzc2x5LgotQUNfUFJPVklERV9JRkVMU0UoW0FDX1BST0dfR0NKXSwKLSAgW0xUX0xBTkcoR0NKKV0sCi0gIFtBQ19QUk9WSURFX0lGRUxTRShbQV1bTV9QUk9HX0dDSl0sCi0gICAgW0xUX0xBTkcoR0NKKV0sCi0gICAgW0FDX1BST1ZJREVfSUZFTFNFKFtMVF9QUk9HX0dDSl0sCi0gICAgICBbTFRfTEFORyhHQ0opXSwKLSAgICAgIFttNF9pZmRlZihbQUNfUFJPR19HQ0pdLAotCVttNF9kZWZpbmUoW0FDX1BST0dfR0NKXSwgZGVmbihbQUNfUFJPR19HQ0pdKVtMVF9MQU5HKEdDSildKV0pCi0gICAgICAgbTRfaWZkZWYoW0FdW01fUFJPR19HQ0pdLAotCVttNF9kZWZpbmUoW0FdW01fUFJPR19HQ0pdLCBkZWZuKFtBXVtNX1BST0dfR0NKXSlbTFRfTEFORyhHQ0opXSldKQotICAgICAgIG00X2lmZGVmKFtMVF9QUk9HX0dDSl0sCi0JW200X2RlZmluZShbTFRfUFJPR19HQ0pdLCBkZWZuKFtMVF9QUk9HX0dDSl0pW0xUX0xBTkcoR0NKKV0pXSldKV0pXSkKLQotQUNfUFJPVklERV9JRkVMU0UoW0xUX1BST0dfUkNdLAotICBbTFRfTEFORyhSQyldLAotICBbbTRfZGVmaW5lKFtMVF9QUk9HX1JDXSwgZGVmbihbTFRfUFJPR19SQ10pW0xUX0xBTkcoUkMpXSldKQotXSkjIF9MVF9MQU5HX0RFRkFVTFRfQ09ORklHCi0KLSMgT2Jzb2xldGUgbWFjcm9zOgotQVVfREVGVU4oW0FDX0xJQlRPT0xfQ1hYXSwgW0xUX0xBTkcoQysrKV0pCi1BVV9ERUZVTihbQUNfTElCVE9PTF9GNzddLCBbTFRfTEFORyhGb3J0cmFuIDc3KV0pCi1BVV9ERUZVTihbQUNfTElCVE9PTF9GQ10sIFtMVF9MQU5HKEZvcnRyYW4pXSkKLUFVX0RFRlVOKFtBQ19MSUJUT09MX0dDSl0sIFtMVF9MQU5HKEphdmEpXSkKLUFVX0RFRlVOKFtBQ19MSUJUT09MX1JDXSwgW0xUX0xBTkcoV2luZG93cyBSZXNvdXJjZSldKQotZG5sIGFjbG9jYWwtMS40IGJhY2t3YXJkcyBjb21wYXRpYmlsaXR5OgotZG5sIEFDX0RFRlVOKFtBQ19MSUJUT09MX0NYWF0sIFtdKQotZG5sIEFDX0RFRlVOKFtBQ19MSUJUT09MX0Y3N10sIFtdKQotZG5sIEFDX0RFRlVOKFtBQ19MSUJUT09MX0ZDXSwgW10pCi1kbmwgQUNfREVGVU4oW0FDX0xJQlRPT0xfR0NKXSwgW10pCi1kbmwgQUNfREVGVU4oW0FDX0xJQlRPT0xfUkNdLCBbXSkKLQotCi0jIF9MVF9UQUdfQ09NUElMRVIKLSMgLS0tLS0tLS0tLS0tLS0tLQotbTRfZGVmdW4oW19MVF9UQUdfQ09NUElMRVJdLAotW0FDX1JFUVVJUkUoW0FDX1BST0dfQ0NdKWRubAotCi1fTFRfREVDTChbTFRDQ10sIFtDQ10sIFsxXSwgW0EgQyBjb21waWxlcl0pZG5sCi1fTFRfREVDTChbTFRDRkxBR1NdLCBbQ0ZMQUdTXSwgWzFdLCBbTFRDQyBjb21waWxlciBmbGFnc10pZG5sCi1fTFRfVEFHREVDTChbQ0NdLCBbY29tcGlsZXJdLCBbMV0sIFtBIGxhbmd1YWdlIHNwZWNpZmljIGNvbXBpbGVyXSlkbmwKLV9MVF9UQUdERUNMKFt3aXRoX2djY10sIFtHQ0NdLCBbMF0sIFtJcyB0aGUgY29tcGlsZXIgdGhlIEdOVSBjb21waWxlcj9dKWRubAotCi0jIElmIG5vIEMgY29tcGlsZXIgd2FzIHNwZWNpZmllZCwgdXNlIENDLgotTFRDQz0ke0xUQ0MtIiRDQyJ9Ci0KLSMgSWYgbm8gQyBjb21waWxlciBmbGFncyB3ZXJlIHNwZWNpZmllZCwgdXNlIENGTEFHUy4KLUxUQ0ZMQUdTPSR7TFRDRkxBR1MtIiRDRkxBR1MifQotCi0jIEFsbG93IENDIHRvIGJlIGEgcHJvZ3JhbSBuYW1lIHdpdGggYXJndW1lbnRzLgotY29tcGlsZXI9JENDCi1dKSMgX0xUX1RBR19DT01QSUxFUgotCi0KLSMgX0xUX0NPTVBJTEVSX0JPSUxFUlBMQVRFCi0jIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotIyBDaGVjayBmb3IgY29tcGlsZXIgYm9pbGVycGxhdGUgb3V0cHV0IG9yIHdhcm5pbmdzIHdpdGgKLSMgdGhlIHNpbXBsZSBjb21waWxlciB0ZXN0IGNvZGUuCi1tNF9kZWZ1bihbX0xUX0NPTVBJTEVSX0JPSUxFUlBMQVRFXSwKLVttNF9yZXF1aXJlKFtfTFRfREVDTF9TRURdKWRubAotYWNfb3V0ZmlsZT1jb25mdGVzdC4kYWNfb2JqZXh0Ci1lY2hvICIkbHRfc2ltcGxlX2NvbXBpbGVfdGVzdF9jb2RlIiA+Y29uZnRlc3QuJGFjX2V4dAotZXZhbCAiJGFjX2NvbXBpbGUiIDI+JjEgPi9kZXYvbnVsbCB8ICRTRUQgJy9eJC9kOyAvXiAqKy9kJyA+Y29uZnRlc3QuZXJyCi1fbHRfY29tcGlsZXJfYm9pbGVycGxhdGU9YGNhdCBjb25mdGVzdC5lcnJgCi0kUk0gY29uZnRlc3QqCi1dKSMgX0xUX0NPTVBJTEVSX0JPSUxFUlBMQVRFCi0KLQotIyBfTFRfTElOS0VSX0JPSUxFUlBMQVRFCi0jIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSMgQ2hlY2sgZm9yIGxpbmtlciBib2lsZXJwbGF0ZSBvdXRwdXQgb3Igd2FybmluZ3Mgd2l0aAotIyB0aGUgc2ltcGxlIGxpbmsgdGVzdCBjb2RlLgotbTRfZGVmdW4oW19MVF9MSU5LRVJfQk9JTEVSUExBVEVdLAotW200X3JlcXVpcmUoW19MVF9ERUNMX1NFRF0pZG5sCi1hY19vdXRmaWxlPWNvbmZ0ZXN0LiRhY19vYmpleHQKLWVjaG8gIiRsdF9zaW1wbGVfbGlua190ZXN0X2NvZGUiID5jb25mdGVzdC4kYWNfZXh0Ci1ldmFsICIkYWNfbGluayIgMj4mMSA+L2Rldi9udWxsIHwgJFNFRCAnL14kL2Q7IC9eICorL2QnID5jb25mdGVzdC5lcnIKLV9sdF9saW5rZXJfYm9pbGVycGxhdGU9YGNhdCBjb25mdGVzdC5lcnJgCi0kUk0gLXIgY29uZnRlc3QqCi1dKSMgX0xUX0xJTktFUl9CT0lMRVJQTEFURQotCi0jIF9MVF9SRVFVSVJFRF9EQVJXSU5fQ0hFQ0tTCi0jIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLW00X2RlZnVuX29uY2UoW19MVF9SRVFVSVJFRF9EQVJXSU5fQ0hFQ0tTXSxbCi0gIGNhc2UgJGhvc3Rfb3MgaW4KLSAgICByaGFwc29keSogfCBkYXJ3aW4qKQotICAgIEFDX0NIRUNLX1RPT0woW0RTWU1VVElMXSwgW2RzeW11dGlsXSwgWzpdKQotICAgIEFDX0NIRUNLX1RPT0woW05NRURJVF0sIFtubWVkaXRdLCBbOl0pCi0gICAgQUNfQ0hFQ0tfVE9PTChbTElQT10sIFtsaXBvXSwgWzpdKQotICAgIEFDX0NIRUNLX1RPT0woW09UT09MXSwgW290b29sXSwgWzpdKQotICAgIEFDX0NIRUNLX1RPT0woW09UT09MNjRdLCBbb3Rvb2w2NF0sIFs6XSkKLSAgICBfTFRfREVDTChbXSwgW0RTWU1VVElMXSwgWzFdLAotICAgICAgW1Rvb2wgdG8gbWFuaXB1bGF0ZSBhcmNoaXZlZCBEV0FSRiBkZWJ1ZyBzeW1ib2wgZmlsZXMgb24gTWFjIE9TIFhdKQotICAgIF9MVF9ERUNMKFtdLCBbTk1FRElUXSwgWzFdLAotICAgICAgW1Rvb2wgdG8gY2hhbmdlIGdsb2JhbCB0byBsb2NhbCBzeW1ib2xzIG9uIE1hYyBPUyBYXSkKLSAgICBfTFRfREVDTChbXSwgW0xJUE9dLCBbMV0sCi0gICAgICBbVG9vbCB0byBtYW5pcHVsYXRlIGZhdCBvYmplY3RzIGFuZCBhcmNoaXZlcyBvbiBNYWMgT1MgWF0pCi0gICAgX0xUX0RFQ0woW10sIFtPVE9PTF0sIFsxXSwKLSAgICAgIFtsZGQvcmVhZGVsZiBsaWtlIHRvb2wgZm9yIE1hY2gtTyBiaW5hcmllcyBvbiBNYWMgT1MgWF0pCi0gICAgX0xUX0RFQ0woW10sIFtPVE9PTDY0XSwgWzFdLAotICAgICAgW2xkZC9yZWFkZWxmIGxpa2UgdG9vbCBmb3IgNjQgYml0IE1hY2gtTyBiaW5hcmllcyBvbiBNYWMgT1MgWCAxMC40XSkKLQotICAgIEFDX0NBQ0hFX0NIRUNLKFtmb3IgLXNpbmdsZV9tb2R1bGUgbGlua2VyIGZsYWddLFtsdF9jdl9hcHBsZV9jY19zaW5nbGVfbW9kXSwKLSAgICAgIFtsdF9jdl9hcHBsZV9jY19zaW5nbGVfbW9kPW5vCi0gICAgICBpZiB0ZXN0IC16ICIke0xUX01VTFRJX01PRFVMRX0iOyB0aGVuCi0JIyBCeSBkZWZhdWx0IHdlIHdpbGwgYWRkIHRoZSAtc2luZ2xlX21vZHVsZSBmbGFnLiBZb3UgY2FuIG92ZXJyaWRlCi0JIyBieSBlaXRoZXIgc2V0dGluZyB0aGUgZW52aXJvbm1lbnQgdmFyaWFibGUgTFRfTVVMVElfTU9EVUxFCi0JIyBub24tZW1wdHkgYXQgY29uZmlndXJlIHRpbWUsIG9yIGJ5IGFkZGluZyAtbXVsdGlfbW9kdWxlIHRvIHRoZQotCSMgbGluayBmbGFncy4KLQlybSAtcmYgbGliY29uZnRlc3QuZHlsaWIqCi0JZWNobyAiaW50IGZvbyh2b2lkKXtyZXR1cm4gMTt9IiA+IGNvbmZ0ZXN0LmMKLQllY2hvICIkTFRDQyAkTFRDRkxBR1MgJExERkxBR1MgLW8gbGliY29uZnRlc3QuZHlsaWIgXAotLWR5bmFtaWNsaWIgLVdsLC1zaW5nbGVfbW9kdWxlIGNvbmZ0ZXN0LmMiID4mQVNfTUVTU0FHRV9MT0dfRkQKLQkkTFRDQyAkTFRDRkxBR1MgJExERkxBR1MgLW8gbGliY29uZnRlc3QuZHlsaWIgXAotCSAgLWR5bmFtaWNsaWIgLVdsLC1zaW5nbGVfbW9kdWxlIGNvbmZ0ZXN0LmMgMj5jb25mdGVzdC5lcnIKLSAgICAgICAgX2x0X3Jlc3VsdD0kPwotCWlmIHRlc3QgLWYgbGliY29uZnRlc3QuZHlsaWIgJiYgdGVzdCAhIC1zIGNvbmZ0ZXN0LmVyciAmJiB0ZXN0ICRfbHRfcmVzdWx0ID0gMDsgdGhlbgotCSAgbHRfY3ZfYXBwbGVfY2Nfc2luZ2xlX21vZD15ZXMKLQllbHNlCi0JICBjYXQgY29uZnRlc3QuZXJyID4mQVNfTUVTU0FHRV9MT0dfRkQKLQlmaQotCXJtIC1yZiBsaWJjb25mdGVzdC5keWxpYioKLQlybSAtZiBjb25mdGVzdC4qCi0gICAgICBmaV0pCi0gICAgQUNfQ0FDSEVfQ0hFQ0soW2ZvciAtZXhwb3J0ZWRfc3ltYm9sc19saXN0IGxpbmtlciBmbGFnXSwKLSAgICAgIFtsdF9jdl9sZF9leHBvcnRlZF9zeW1ib2xzX2xpc3RdLAotICAgICAgW2x0X2N2X2xkX2V4cG9ydGVkX3N5bWJvbHNfbGlzdD1ubwotICAgICAgc2F2ZV9MREZMQUdTPSRMREZMQUdTCi0gICAgICBlY2hvICJfbWFpbiIgPiBjb25mdGVzdC5zeW0KLSAgICAgIExERkxBR1M9IiRMREZMQUdTIC1XbCwtZXhwb3J0ZWRfc3ltYm9sc19saXN0LGNvbmZ0ZXN0LnN5bSIKLSAgICAgIEFDX0xJTktfSUZFTFNFKFtBQ19MQU5HX1BST0dSQU0oW10sW10pXSwKLQlbbHRfY3ZfbGRfZXhwb3J0ZWRfc3ltYm9sc19saXN0PXllc10sCi0JW2x0X2N2X2xkX2V4cG9ydGVkX3N5bWJvbHNfbGlzdD1ub10pCi0JTERGTEFHUz0iJHNhdmVfTERGTEFHUyIKLSAgICBdKQotICAgIEFDX0NBQ0hFX0NIRUNLKFtmb3IgLWZvcmNlX2xvYWQgbGlua2VyIGZsYWddLFtsdF9jdl9sZF9mb3JjZV9sb2FkXSwKLSAgICAgIFtsdF9jdl9sZF9mb3JjZV9sb2FkPW5vCi0gICAgICBjYXQgPiBjb25mdGVzdC5jIDw8IF9MVF9FT0YKLWludCBmb3JjZWRfbG9hZGVkKCkgeyByZXR1cm4gMjt9Ci1fTFRfRU9GCi0gICAgICBlY2hvICIkTFRDQyAkTFRDRkxBR1MgLWMgLW8gY29uZnRlc3QubyBjb25mdGVzdC5jIiA+JkFTX01FU1NBR0VfTE9HX0ZECi0gICAgICAkTFRDQyAkTFRDRkxBR1MgLWMgLW8gY29uZnRlc3QubyBjb25mdGVzdC5jIDI+JkFTX01FU1NBR0VfTE9HX0ZECi0gICAgICBlY2hvICIkQVIgY3J1IGxpYmNvbmZ0ZXN0LmEgY29uZnRlc3QubyIgPiZBU19NRVNTQUdFX0xPR19GRAotICAgICAgJEFSIGNydSBsaWJjb25mdGVzdC5hIGNvbmZ0ZXN0Lm8gMj4mQVNfTUVTU0FHRV9MT0dfRkQKLSAgICAgIGVjaG8gIiRSQU5MSUIgbGliY29uZnRlc3QuYSIgPiZBU19NRVNTQUdFX0xPR19GRAotICAgICAgJFJBTkxJQiBsaWJjb25mdGVzdC5hIDI+JkFTX01FU1NBR0VfTE9HX0ZECi0gICAgICBjYXQgPiBjb25mdGVzdC5jIDw8IF9MVF9FT0YKLWludCBtYWluKCkgeyByZXR1cm4gMDt9Ci1fTFRfRU9GCi0gICAgICBlY2hvICIkTFRDQyAkTFRDRkxBR1MgJExERkxBR1MgLW8gY29uZnRlc3QgY29uZnRlc3QuYyAtV2wsLWZvcmNlX2xvYWQsLi9saWJjb25mdGVzdC5hIiA+JkFTX01FU1NBR0VfTE9HX0ZECi0gICAgICAkTFRDQyAkTFRDRkxBR1MgJExERkxBR1MgLW8gY29uZnRlc3QgY29uZnRlc3QuYyAtV2wsLWZvcmNlX2xvYWQsLi9saWJjb25mdGVzdC5hIDI+Y29uZnRlc3QuZXJyCi0gICAgICBfbHRfcmVzdWx0PSQ/Ci0gICAgICBpZiB0ZXN0IC1mIGNvbmZ0ZXN0ICYmIHRlc3QgISAtcyBjb25mdGVzdC5lcnIgJiYgdGVzdCAkX2x0X3Jlc3VsdCA9IDAgJiYgJEdSRVAgZm9yY2VkX2xvYWQgY29uZnRlc3QgMj4mMSA+L2Rldi9udWxsOyB0aGVuCi0JbHRfY3ZfbGRfZm9yY2VfbG9hZD15ZXMKLSAgICAgIGVsc2UKLQljYXQgY29uZnRlc3QuZXJyID4mQVNfTUVTU0FHRV9MT0dfRkQKLSAgICAgIGZpCi0gICAgICAgIHJtIC1mIGNvbmZ0ZXN0LmVyciBsaWJjb25mdGVzdC5hIGNvbmZ0ZXN0IGNvbmZ0ZXN0LmMKLSAgICAgICAgcm0gLXJmIGNvbmZ0ZXN0LmRTWU0KLSAgICBdKQotICAgIGNhc2UgJGhvc3Rfb3MgaW4KLSAgICByaGFwc29keSogfCBkYXJ3aW4xLltbMDEyXV0pCi0gICAgICBfbHRfZGFyX2FsbG93X3VuZGVmaW5lZD0nJHt3bH0tdW5kZWZpbmVkICR7d2x9c3VwcHJlc3MnIDs7Ci0gICAgZGFyd2luMS4qKQotICAgICAgX2x0X2Rhcl9hbGxvd191bmRlZmluZWQ9JyR7d2x9LWZsYXRfbmFtZXNwYWNlICR7d2x9LXVuZGVmaW5lZCAke3dsfXN1cHByZXNzJyA7OwotICAgIGRhcndpbiopICMgZGFyd2luIDUueCBvbgotICAgICAgIyBpZiBydW5uaW5nIG9uIDEwLjUgb3IgbGF0ZXIsIHRoZSBkZXBsb3ltZW50IHRhcmdldCBkZWZhdWx0cwotICAgICAgIyB0byB0aGUgT1MgdmVyc2lvbiwgaWYgb24geDg2LCBhbmQgMTAuNCwgdGhlIGRlcGxveW1lbnQKLSAgICAgICMgdGFyZ2V0IGRlZmF1bHRzIHRvIDEwLjQuIERvbid0IHlvdSBsb3ZlIGl0PwotICAgICAgY2FzZSAke01BQ09TWF9ERVBMT1lNRU5UX1RBUkdFVC0xMC4wfSwkaG9zdCBpbgotCTEwLjAsKjg2Ki1kYXJ3aW44KnwxMC4wLCotZGFyd2luW1s5MV1dKikKLQkgIF9sdF9kYXJfYWxsb3dfdW5kZWZpbmVkPScke3dsfS11bmRlZmluZWQgJHt3bH1keW5hbWljX2xvb2t1cCcgOzsKLQkxMC5bWzAxMl1dKikKLQkgIF9sdF9kYXJfYWxsb3dfdW5kZWZpbmVkPScke3dsfS1mbGF0X25hbWVzcGFjZSAke3dsfS11bmRlZmluZWQgJHt3bH1zdXBwcmVzcycgOzsKLQkxMC4qKQotCSAgX2x0X2Rhcl9hbGxvd191bmRlZmluZWQ9JyR7d2x9LXVuZGVmaW5lZCAke3dsfWR5bmFtaWNfbG9va3VwJyA7OwotICAgICAgZXNhYwotICAgIDs7Ci0gIGVzYWMKLSAgICBpZiB0ZXN0ICIkbHRfY3ZfYXBwbGVfY2Nfc2luZ2xlX21vZCIgPSAieWVzIjsgdGhlbgotICAgICAgX2x0X2Rhcl9zaW5nbGVfbW9kPSckc2luZ2xlX21vZHVsZScKLSAgICBmaQotICAgIGlmIHRlc3QgIiRsdF9jdl9sZF9leHBvcnRlZF9zeW1ib2xzX2xpc3QiID0gInllcyI7IHRoZW4KLSAgICAgIF9sdF9kYXJfZXhwb3J0X3N5bXM9JyAke3dsfS1leHBvcnRlZF9zeW1ib2xzX2xpc3QsJG91dHB1dF9vYmpkaXIvJHtsaWJuYW1lfS1zeW1ib2xzLmV4cHN5bScKLSAgICBlbHNlCi0gICAgICBfbHRfZGFyX2V4cG9ydF9zeW1zPSd+JE5NRURJVCAtcyAkb3V0cHV0X29iamRpci8ke2xpYm5hbWV9LXN5bWJvbHMuZXhwc3ltICR7bGlifScKLSAgICBmaQotICAgIGlmIHRlc3QgIiREU1lNVVRJTCIgIT0gIjoiICYmIHRlc3QgIiRsdF9jdl9sZF9mb3JjZV9sb2FkIiA9ICJubyI7IHRoZW4KLSAgICAgIF9sdF9kc3ltdXRpbD0nfiREU1lNVVRJTCAkbGliIHx8IDonCi0gICAgZWxzZQotICAgICAgX2x0X2RzeW11dGlsPQotICAgIGZpCi0gICAgOzsKLSAgZXNhYwotXSkKLQotCi0jIF9MVF9EQVJXSU5fTElOS0VSX0ZFQVRVUkVTCi0jIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0jIENoZWNrcyBmb3IgbGlua2VyIGFuZCBjb21waWxlciBmZWF0dXJlcyBvbiBkYXJ3aW4KLW00X2RlZnVuKFtfTFRfREFSV0lOX0xJTktFUl9GRUFUVVJFU10sCi1bCi0gIG00X3JlcXVpcmUoW19MVF9SRVFVSVJFRF9EQVJXSU5fQ0hFQ0tTXSkKLSAgX0xUX1RBR1ZBUihhcmNoaXZlX2NtZHNfbmVlZF9sYywgJDEpPW5vCi0gIF9MVF9UQUdWQVIoaGFyZGNvZGVfZGlyZWN0LCAkMSk9bm8KLSAgX0xUX1RBR1ZBUihoYXJkY29kZV9hdXRvbWF0aWMsICQxKT15ZXMKLSAgX0xUX1RBR1ZBUihoYXJkY29kZV9zaGxpYnBhdGhfdmFyLCAkMSk9dW5zdXBwb3J0ZWQKLSAgaWYgdGVzdCAiJGx0X2N2X2xkX2ZvcmNlX2xvYWQiID0gInllcyI7IHRoZW4KLSAgICBfTFRfVEFHVkFSKHdob2xlX2FyY2hpdmVfZmxhZ19zcGVjLCAkMSk9J2Bmb3IgY29udiBpbiAkY29udmVuaWVuY2VcIlwiOyBkbyB0ZXN0ICAtbiBcIiRjb252XCIgJiYgbmV3X2NvbnZlbmllbmNlPVwiJG5ld19jb252ZW5pZW5jZSAke3dsfS1mb3JjZV9sb2FkLCRjb252XCI7IGRvbmU7IGZ1bmNfZWNob19hbGwgXCIkbmV3X2NvbnZlbmllbmNlXCJgJwotICBlbHNlCi0gICAgX0xUX1RBR1ZBUih3aG9sZV9hcmNoaXZlX2ZsYWdfc3BlYywgJDEpPScnCi0gIGZpCi0gIF9MVF9UQUdWQVIobGlua19hbGxfZGVwbGlicywgJDEpPXllcwotICBfTFRfVEFHVkFSKGFsbG93X3VuZGVmaW5lZF9mbGFnLCAkMSk9IiRfbHRfZGFyX2FsbG93X3VuZGVmaW5lZCIKLSAgY2FzZSAkY2NfYmFzZW5hbWUgaW4KLSAgICAgaWZvcnQqKSBfbHRfZGFyX2Nhbl9zaGFyZWQ9eWVzIDs7Ci0gICAgICopIF9sdF9kYXJfY2FuX3NoYXJlZD0kR0NDIDs7Ci0gIGVzYWMKLSAgaWYgdGVzdCAiJF9sdF9kYXJfY2FuX3NoYXJlZCIgPSAieWVzIjsgdGhlbgotICAgIG91dHB1dF92ZXJib3NlX2xpbmtfY21kPWZ1bmNfZWNob19hbGwKLSAgICBfTFRfVEFHVkFSKGFyY2hpdmVfY21kcywgJDEpPSJcJENDIC1keW5hbWljbGliIFwkYWxsb3dfdW5kZWZpbmVkX2ZsYWcgLW8gXCRsaWIgXCRsaWJvYmpzIFwkZGVwbGlicyBcJGNvbXBpbGVyX2ZsYWdzIC1pbnN0YWxsX25hbWUgXCRycGF0aC9cJHNvbmFtZSBcJHZlcnN0cmluZyAkX2x0X2Rhcl9zaW5nbGVfbW9kJHtfbHRfZHN5bXV0aWx9IgotICAgIF9MVF9UQUdWQVIobW9kdWxlX2NtZHMsICQxKT0iXCRDQyBcJGFsbG93X3VuZGVmaW5lZF9mbGFnIC1vIFwkbGliIC1idW5kbGUgXCRsaWJvYmpzIFwkZGVwbGlicyBcJGNvbXBpbGVyX2ZsYWdzJHtfbHRfZHN5bXV0aWx9IgotICAgIF9MVF9UQUdWQVIoYXJjaGl2ZV9leHBzeW1fY21kcywgJDEpPSJzZWQgJ3MsXixfLCcgPCBcJGV4cG9ydF9zeW1ib2xzID4gXCRvdXRwdXRfb2JqZGlyL1wke2xpYm5hbWV9LXN5bWJvbHMuZXhwc3ltflwkQ0MgLWR5bmFtaWNsaWIgXCRhbGxvd191bmRlZmluZWRfZmxhZyAtbyBcJGxpYiBcJGxpYm9ianMgXCRkZXBsaWJzIFwkY29tcGlsZXJfZmxhZ3MgLWluc3RhbGxfbmFtZSBcJHJwYXRoL1wkc29uYW1lIFwkdmVyc3RyaW5nICR7X2x0X2Rhcl9zaW5nbGVfbW9kfSR7X2x0X2Rhcl9leHBvcnRfc3ltc30ke19sdF9kc3ltdXRpbH0iCi0gICAgX0xUX1RBR1ZBUihtb2R1bGVfZXhwc3ltX2NtZHMsICQxKT0ic2VkIC1lICdzLF4sXywnIDwgXCRleHBvcnRfc3ltYm9scyA+IFwkb3V0cHV0X29iamRpci9cJHtsaWJuYW1lfS1zeW1ib2xzLmV4cHN5bX5cJENDIFwkYWxsb3dfdW5kZWZpbmVkX2ZsYWcgLW8gXCRsaWIgLWJ1bmRsZSBcJGxpYm9ianMgXCRkZXBsaWJzIFwkY29tcGlsZXJfZmxhZ3Mke19sdF9kYXJfZXhwb3J0X3N5bXN9JHtfbHRfZHN5bXV0aWx9IgotICAgIG00X2lmKFskMV0sIFtDWFhdLAotWyAgIGlmIHRlc3QgIiRsdF9jdl9hcHBsZV9jY19zaW5nbGVfbW9kIiAhPSAieWVzIjsgdGhlbgotICAgICAgX0xUX1RBR1ZBUihhcmNoaXZlX2NtZHMsICQxKT0iXCRDQyAtciAta2VlcF9wcml2YXRlX2V4dGVybnMgLW5vc3RkbGliIC1vIFwke2xpYn0tbWFzdGVyLm8gXCRsaWJvYmpzflwkQ0MgLWR5bmFtaWNsaWIgXCRhbGxvd191bmRlZmluZWRfZmxhZyAtbyBcJGxpYiBcJHtsaWJ9LW1hc3Rlci5vIFwkZGVwbGlicyBcJGNvbXBpbGVyX2ZsYWdzIC1pbnN0YWxsX25hbWUgXCRycGF0aC9cJHNvbmFtZSBcJHZlcnN0cmluZyR7X2x0X2RzeW11dGlsfSIKLSAgICAgIF9MVF9UQUdWQVIoYXJjaGl2ZV9leHBzeW1fY21kcywgJDEpPSJzZWQgJ3MsXixfLCcgPCBcJGV4cG9ydF9zeW1ib2xzID4gXCRvdXRwdXRfb2JqZGlyL1wke2xpYm5hbWV9LXN5bWJvbHMuZXhwc3ltflwkQ0MgLXIgLWtlZXBfcHJpdmF0ZV9leHRlcm5zIC1ub3N0ZGxpYiAtbyBcJHtsaWJ9LW1hc3Rlci5vIFwkbGlib2Jqc35cJENDIC1keW5hbWljbGliIFwkYWxsb3dfdW5kZWZpbmVkX2ZsYWcgLW8gXCRsaWIgXCR7bGlifS1tYXN0ZXIubyBcJGRlcGxpYnMgXCRjb21waWxlcl9mbGFncyAtaW5zdGFsbF9uYW1lIFwkcnBhdGgvXCRzb25hbWUgXCR2ZXJzdHJpbmcke19sdF9kYXJfZXhwb3J0X3N5bXN9JHtfbHRfZHN5bXV0aWx9IgotICAgIGZpCi1dLFtdKQotICBlbHNlCi0gIF9MVF9UQUdWQVIobGRfc2hsaWJzLCAkMSk9bm8KLSAgZmkKLV0pCi0KLSMgX0xUX1NZU19NT0RVTEVfUEFUSF9BSVgoW1RBR05BTUVdKQotIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0jIExpbmtzIGEgbWluaW1hbCBwcm9ncmFtIGFuZCBjaGVja3MgdGhlIGV4ZWN1dGFibGUKLSMgZm9yIHRoZSBzeXN0ZW0gZGVmYXVsdCBoYXJkY29kZWQgbGlicmFyeSBwYXRoLiBJbiBtb3N0IGNhc2VzLAotIyB0aGlzIGlzIC91c3IvbGliOi9saWIsIGJ1dCB3aGVuIHRoZSBNUEkgY29tcGlsZXJzIGFyZSB1c2VkCi0jIHRoZSBsb2NhdGlvbiBvZiB0aGUgY29tbXVuaWNhdGlvbiBhbmQgTVBJIGxpYnMgYXJlIGluY2x1ZGVkIHRvby4KLSMgSWYgd2UgZG9uJ3QgZmluZCBhbnl0aGluZywgdXNlIHRoZSBkZWZhdWx0IGxpYnJhcnkgcGF0aCBhY2NvcmRpbmcKLSMgdG8gdGhlIGFpeCBsZCBtYW51YWwuCi0jIFN0b3JlIHRoZSByZXN1bHRzIGZyb20gdGhlIGRpZmZlcmVudCBjb21waWxlcnMgZm9yIGVhY2ggVEFHTkFNRS4KLSMgQWxsb3cgdG8gb3ZlcnJpZGUgdGhlbSBmb3IgYWxsIHRhZ3MgdGhyb3VnaCBsdF9jdl9haXhfbGlicGF0aC4KLW00X2RlZnVuKFtfTFRfU1lTX01PRFVMRV9QQVRIX0FJWF0sCi1bbTRfcmVxdWlyZShbX0xUX0RFQ0xfU0VEXSlkbmwKLWlmIHRlc3QgIiR7bHRfY3ZfYWl4X2xpYnBhdGgrc2V0fSIgPSBzZXQ7IHRoZW4KLSAgYWl4X2xpYnBhdGg9JGx0X2N2X2FpeF9saWJwYXRoCi1lbHNlCi0gIEFDX0NBQ0hFX1ZBTChbX0xUX1RBR1ZBUihbbHRfY3ZfYWl4X2xpYnBhdGhfXSwgWyQxXSldLAotICBbQUNfTElOS19JRkVMU0UoW0FDX0xBTkdfUFJPR1JBTV0sWwotICBsdF9haXhfbGlicGF0aF9zZWQ9J1sKLSAgICAgIC9JbXBvcnQgRmlsZSBTdHJpbmdzLywvXiQvIHsKLQkgIC9eMC8gewotCSAgICAgIHMvXjAgICpcKFteIF0qXCkgKiQvXDEvCi0JICAgICAgcAotCSAgfQotICAgICAgfV0nCi0gIF9MVF9UQUdWQVIoW2x0X2N2X2FpeF9saWJwYXRoX10sIFskMV0pPWBkdW1wIC1IIGNvbmZ0ZXN0JGFjX2V4ZWV4dCAyPi9kZXYvbnVsbCB8ICRTRUQgLW4gLWUgIiRsdF9haXhfbGlicGF0aF9zZWQiYAotICAjIENoZWNrIGZvciBhIDY0LWJpdCBvYmplY3QgaWYgd2UgZGlkbid0IGZpbmQgYW55dGhpbmcuCi0gIGlmIHRlc3QgLXogIiRfTFRfVEFHVkFSKFtsdF9jdl9haXhfbGlicGF0aF9dLCBbJDFdKSI7IHRoZW4KLSAgICBfTFRfVEFHVkFSKFtsdF9jdl9haXhfbGlicGF0aF9dLCBbJDFdKT1gZHVtcCAtSFg2NCBjb25mdGVzdCRhY19leGVleHQgMj4vZGV2L251bGwgfCAkU0VEIC1uIC1lICIkbHRfYWl4X2xpYnBhdGhfc2VkImAKLSAgZmldLFtdKQotICBpZiB0ZXN0IC16ICIkX0xUX1RBR1ZBUihbbHRfY3ZfYWl4X2xpYnBhdGhfXSwgWyQxXSkiOyB0aGVuCi0gICAgX0xUX1RBR1ZBUihbbHRfY3ZfYWl4X2xpYnBhdGhfXSwgWyQxXSk9Ii91c3IvbGliOi9saWIiCi0gIGZpCi0gIF0pCi0gIGFpeF9saWJwYXRoPSRfTFRfVEFHVkFSKFtsdF9jdl9haXhfbGlicGF0aF9dLCBbJDFdKQotZmkKLV0pIyBfTFRfU1lTX01PRFVMRV9QQVRIX0FJWAotCi0KLSMgX0xUX1NIRUxMX0lOSVQoQVJHKQotIyAtLS0tLS0tLS0tLS0tLS0tLS0tCi1tNF9kZWZpbmUoW19MVF9TSEVMTF9JTklUXSwKLVttNF9kaXZlcnRfdGV4dChbTTRTSC1JTklUXSwgWyQxCi1dKV0pIyBfTFRfU0hFTExfSU5JVAotCi0KLQotIyBfTFRfUFJPR19FQ0hPX0JBQ0tTTEFTSAotIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotIyBGaW5kIGhvdyB3ZSBjYW4gZmFrZSBhbiBlY2hvIGNvbW1hbmQgdGhhdCBkb2VzIG5vdCBpbnRlcnByZXQgYmFja3NsYXNoLgotIyBJbiBwYXJ0aWN1bGFyLCB3aXRoIEF1dG9jb25mIDIuNjAgb3IgbGF0ZXIgd2UgYWRkIHNvbWUgY29kZSB0byB0aGUgc3RhcnQKLSMgb2YgdGhlIGdlbmVyYXRlZCBjb25maWd1cmUgc2NyaXB0IHdoaWNoIHdpbGwgZmluZCBhIHNoZWxsIHdpdGggYSBidWlsdGluCi0jIHByaW50ZiAod2hpY2ggd2UgY2FuIHVzZSBhcyBhbiBlY2hvIGNvbW1hbmQpLgotbTRfZGVmdW4oW19MVF9QUk9HX0VDSE9fQkFDS1NMQVNIXSwKLVtFQ0hPPSdcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcJwotRUNITz0kRUNITyRFQ0hPJEVDSE8kRUNITyRFQ0hPCi1FQ0hPPSRFQ0hPJEVDSE8kRUNITyRFQ0hPJEVDSE8kRUNITwotCi1BQ19NU0dfQ0hFQ0tJTkcoW2hvdyB0byBwcmludCBzdHJpbmdzXSkKLSMgVGVzdCBwcmludCBmaXJzdCwgYmVjYXVzZSBpdCB3aWxsIGJlIGEgYnVpbHRpbiBpZiBwcmVzZW50LgotaWYgdGVzdCAiWGAoIHByaW50IC1yIC0tIC1uICkgMj4vZGV2L251bGxgIiA9IFgtbiAmJiBcCi0gICB0ZXN0ICJYYHByaW50IC1yIC0tICRFQ0hPIDI+L2Rldi9udWxsYCIgPSAiWCRFQ0hPIjsgdGhlbgotICBFQ0hPPSdwcmludCAtciAtLScKLWVsaWYgdGVzdCAiWGBwcmludGYgJXMgJEVDSE8gMj4vZGV2L251bGxgIiA9ICJYJEVDSE8iOyB0aGVuCi0gIEVDSE89J3ByaW50ZiAlc1xuJwotZWxzZQotICAjIFVzZSB0aGlzIGZ1bmN0aW9uIGFzIGEgZmFsbGJhY2sgdGhhdCBhbHdheXMgd29ya3MuCi0gIGZ1bmNfZmFsbGJhY2tfZWNobyAoKQotICB7Ci0gICAgZXZhbCAnY2F0IDw8X0xURUNIT19FT0YKLSRbXTEKLV9MVEVDSE9fRU9GJwotICB9Ci0gIEVDSE89J2Z1bmNfZmFsbGJhY2tfZWNobycKLWZpCi0KLSMgZnVuY19lY2hvX2FsbCBhcmcuLi4KLSMgSW52b2tlICRFQ0hPIHdpdGggYWxsIGFyZ3MsIHNwYWNlLXNlcGFyYXRlZC4KLWZ1bmNfZWNob19hbGwgKCkKLXsKLSAgICAkRUNITyAiJCoiIAotfQotCi1jYXNlICIkRUNITyIgaW4KLSAgcHJpbnRmKikgQUNfTVNHX1JFU1VMVChbcHJpbnRmXSkgOzsKLSAgcHJpbnQqKSBBQ19NU0dfUkVTVUxUKFtwcmludCAtcl0pIDs7Ci0gICopIEFDX01TR19SRVNVTFQoW2NhdF0pIDs7Ci1lc2FjCi0KLW00X2lmZGVmKFtfQVNfREVURUNUX1NVR0dFU1RFRF0sCi1bX0FTX0RFVEVDVF9TVUdHRVNURUQoWwotICB0ZXN0IC1uICIke1pTSF9WRVJTSU9OK3NldH0ke0JBU0hfVkVSU0lPTitzZXR9IiB8fCAoCi0gICAgRUNITz0nXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXCcKLSAgICBFQ0hPPSRFQ0hPJEVDSE8kRUNITyRFQ0hPJEVDSE8KLSAgICBFQ0hPPSRFQ0hPJEVDSE8kRUNITyRFQ0hPJEVDSE8kRUNITwotICAgIFBBVEg9L2VtcHR5IEZQQVRIPS9lbXB0eTsgZXhwb3J0IFBBVEggRlBBVEgKLSAgICB0ZXN0ICJYYHByaW50ZiAlcyAkRUNIT2AiID0gIlgkRUNITyIgXAotICAgICAgfHwgdGVzdCAiWGBwcmludCAtciAtLSAkRUNIT2AiID0gIlgkRUNITyIgKV0pXSkKLQotX0xUX0RFQ0woW10sIFtTSEVMTF0sIFsxXSwgW1NoZWxsIHRvIHVzZSB3aGVuIGludm9raW5nIHNoZWxsIHNjcmlwdHNdKQotX0xUX0RFQ0woW10sIFtFQ0hPXSwgWzFdLCBbQW4gZWNobyBwcm9ncmFtIHRoYXQgcHJvdGVjdHMgYmFja3NsYXNoZXNdKQotXSkjIF9MVF9QUk9HX0VDSE9fQkFDS1NMQVNICi0KLQotIyBfTFRfV0lUSF9TWVNST09UCi0jIC0tLS0tLS0tLS0tLS0tLS0KLUFDX0RFRlVOKFtfTFRfV0lUSF9TWVNST09UXSwKLVtBQ19NU0dfQ0hFQ0tJTkcoW2ZvciBzeXNyb290XSkKLUFDX0FSR19XSVRIKFtzeXNyb290XSwKLVsgIC0td2l0aC1zeXNyb290Wz1ESVJdIFNlYXJjaCBmb3IgZGVwZW5kZW50IGxpYnJhcmllcyB3aXRoaW4gRElSCi0gICAgICAgICAgICAgICAgICAgICAgICAob3IgdGhlIGNvbXBpbGVyJ3Mgc3lzcm9vdCBpZiBub3Qgc3BlY2lmaWVkKS5dLAotW10sIFt3aXRoX3N5c3Jvb3Q9bm9dKQotCi1kbmwgbHRfc3lzcm9vdCB3aWxsIGFsd2F5cyBiZSBwYXNzZWQgdW5xdW90ZWQuICBXZSBxdW90ZSBpdCBoZXJlCi1kbmwgaW4gY2FzZSB0aGUgdXNlciBwYXNzZWQgYSBkaXJlY3RvcnkgbmFtZS4KLWx0X3N5c3Jvb3Q9Ci1jYXNlICR7d2l0aF9zeXNyb290fSBpbiAjKAotIHllcykKLSAgIGlmIHRlc3QgIiRHQ0MiID0geWVzOyB0aGVuCi0gICAgIGx0X3N5c3Jvb3Q9YCRDQyAtLXByaW50LXN5c3Jvb3QgMj4vZGV2L251bGxgCi0gICBmaQotICAgOzsgIygKLSAvKikKLSAgIGx0X3N5c3Jvb3Q9YGVjaG8gIiR3aXRoX3N5c3Jvb3QiIHwgc2VkIC1lICIkc2VkX3F1b3RlX3N1YnN0ImAKLSAgIDs7ICMoCi0gbm98JycpCi0gICA7OyAjKAotICopCi0gICBBQ19NU0dfUkVTVUxUKFske3dpdGhfc3lzcm9vdH1dKQotICAgQUNfTVNHX0VSUk9SKFtUaGUgc3lzcm9vdCBtdXN0IGJlIGFuIGFic29sdXRlIHBhdGguXSkKLSAgIDs7Ci1lc2FjCi0KLSBBQ19NU0dfUkVTVUxUKFske2x0X3N5c3Jvb3Q6LW5vfV0pCi1fTFRfREVDTChbXSwgW2x0X3N5c3Jvb3RdLCBbMF0sIFtUaGUgcm9vdCB3aGVyZSB0byBzZWFyY2ggZm9yIF1kbmwKLVtkZXBlbmRlbnQgbGlicmFyaWVzLCBhbmQgaW4gd2hpY2ggb3VyIGxpYnJhcmllcyBzaG91bGQgYmUgaW5zdGFsbGVkLl0pXSkKLQotIyBfTFRfRU5BQkxFX0xPQ0sKLSMgLS0tLS0tLS0tLS0tLS0tCi1tNF9kZWZ1bihbX0xUX0VOQUJMRV9MT0NLXSwKLVtBQ19BUkdfRU5BQkxFKFtsaWJ0b29sLWxvY2tdLAotICBbQVNfSEVMUF9TVFJJTkcoWy0tZGlzYWJsZS1saWJ0b29sLWxvY2tdLAotICAgIFthdm9pZCBsb2NraW5nIChtaWdodCBicmVhayBwYXJhbGxlbCBidWlsZHMpXSldKQotdGVzdCAieCRlbmFibGVfbGlidG9vbF9sb2NrIiAhPSB4bm8gJiYgZW5hYmxlX2xpYnRvb2xfbG9jaz15ZXMKLQotIyBTb21lIGZsYWdzIG5lZWQgdG8gYmUgcHJvcGFnYXRlZCB0byB0aGUgY29tcGlsZXIgb3IgbGlua2VyIGZvciBnb29kCi0jIGxpYnRvb2wgc3VwcG9ydC4KLWNhc2UgJGhvc3QgaW4KLWlhNjQtKi1ocHV4KikKLSAgIyBGaW5kIG91dCB3aGljaCBBQkkgd2UgYXJlIHVzaW5nLgotICBlY2hvICdpbnQgaTsnID4gY29uZnRlc3QuJGFjX2V4dAotICBpZiBBQ19UUllfRVZBTChhY19jb21waWxlKTsgdGhlbgotICAgIGNhc2UgYC91c3IvYmluL2ZpbGUgY29uZnRlc3QuJGFjX29iamV4dGAgaW4KLSAgICAgICpFTEYtMzIqKQotCUhQVVhfSUE2NF9NT0RFPSIzMiIKLQk7OwotICAgICAgKkVMRi02NCopCi0JSFBVWF9JQTY0X01PREU9IjY0IgotCTs7Ci0gICAgZXNhYwotICBmaQotICBybSAtcmYgY29uZnRlc3QqCi0gIDs7Ci0qLSotaXJpeDYqKQotICAjIEZpbmQgb3V0IHdoaWNoIEFCSSB3ZSBhcmUgdXNpbmcuCi0gIGVjaG8gJ1sjXWxpbmUgJyRMSU5FTk8nICJjb25maWd1cmUiJyA+IGNvbmZ0ZXN0LiRhY19leHQKLSAgaWYgQUNfVFJZX0VWQUwoYWNfY29tcGlsZSk7IHRoZW4KLSAgICBpZiB0ZXN0ICIkbHRfY3ZfcHJvZ19nbnVfbGQiID0geWVzOyB0aGVuCi0gICAgICBjYXNlIGAvdXNyL2Jpbi9maWxlIGNvbmZ0ZXN0LiRhY19vYmpleHRgIGluCi0JKjMyLWJpdCopCi0JICBMRD0iJHtMRC1sZH0gLW1lbGYzMmJzbWlwIgotCSAgOzsKLQkqTjMyKikKLQkgIExEPSIke0xELWxkfSAtbWVsZjMyYm1pcG4zMiIKLQkgIDs7Ci0JKjY0LWJpdCopCi0JICBMRD0iJHtMRC1sZH0gLW1lbGY2NGJtaXAiCi0JOzsKLSAgICAgIGVzYWMKLSAgICBlbHNlCi0gICAgICBjYXNlIGAvdXNyL2Jpbi9maWxlIGNvbmZ0ZXN0LiRhY19vYmpleHRgIGluCi0JKjMyLWJpdCopCi0JICBMRD0iJHtMRC1sZH0gLTMyIgotCSAgOzsKLQkqTjMyKikKLQkgIExEPSIke0xELWxkfSAtbjMyIgotCSAgOzsKLQkqNjQtYml0KikKLQkgIExEPSIke0xELWxkfSAtNjQiCi0JICA7OwotICAgICAgZXNhYwotICAgIGZpCi0gIGZpCi0gIHJtIC1yZiBjb25mdGVzdCoKLSAgOzsKLQoteDg2XzY0LSprZnJlZWJzZCotZ251fHg4Nl82NC0qbGludXgqfHBwYyotKmxpbnV4Knxwb3dlcnBjKi0qbGludXgqfCBcCi1zMzkwKi0qbGludXgqfHMzOTAqLSp0cGYqfHNwYXJjKi0qbGludXgqKQotICAjIEZpbmQgb3V0IHdoaWNoIEFCSSB3ZSBhcmUgdXNpbmcuCi0gIGVjaG8gJ2ludCBpOycgPiBjb25mdGVzdC4kYWNfZXh0Ci0gIGlmIEFDX1RSWV9FVkFMKGFjX2NvbXBpbGUpOyB0aGVuCi0gICAgY2FzZSBgL3Vzci9iaW4vZmlsZSBjb25mdGVzdC5vYCBpbgotICAgICAgKjMyLWJpdCopCi0JY2FzZSAkaG9zdCBpbgotCSAgeDg2XzY0LSprZnJlZWJzZCotZ251KQotCSAgICBMRD0iJHtMRC1sZH0gLW0gZWxmX2kzODZfZmJzZCIKLQkgICAgOzsKLQkgIHg4Nl82NC0qbGludXgqKQotCSAgICBMRD0iJHtMRC1sZH0gLW0gZWxmX2kzODYiCi0JICAgIDs7Ci0JICBwcGM2NC0qbGludXgqfHBvd2VycGM2NC0qbGludXgqKQotCSAgICBMRD0iJHtMRC1sZH0gLW0gZWxmMzJwcGNsaW51eCIKLQkgICAgOzsKLQkgIHMzOTB4LSpsaW51eCopCi0JICAgIExEPSIke0xELWxkfSAtbSBlbGZfczM5MCIKLQkgICAgOzsKLQkgIHNwYXJjNjQtKmxpbnV4KikKLQkgICAgTEQ9IiR7TEQtbGR9IC1tIGVsZjMyX3NwYXJjIgotCSAgICA7OwotCWVzYWMKLQk7OwotICAgICAgKjY0LWJpdCopCi0JY2FzZSAkaG9zdCBpbgotCSAgeDg2XzY0LSprZnJlZWJzZCotZ251KQotCSAgICBMRD0iJHtMRC1sZH0gLW0gZWxmX3g4Nl82NF9mYnNkIgotCSAgICA7OwotCSAgeDg2XzY0LSpsaW51eCopCi0JICAgIExEPSIke0xELWxkfSAtbSBlbGZfeDg2XzY0IgotCSAgICA7OwotCSAgcHBjKi0qbGludXgqfHBvd2VycGMqLSpsaW51eCopCi0JICAgIExEPSIke0xELWxkfSAtbSBlbGY2NHBwYyIKLQkgICAgOzsKLQkgIHMzOTAqLSpsaW51eCp8czM5MCotKnRwZiopCi0JICAgIExEPSIke0xELWxkfSAtbSBlbGY2NF9zMzkwIgotCSAgICA7OwotCSAgc3BhcmMqLSpsaW51eCopCi0JICAgIExEPSIke0xELWxkfSAtbSBlbGY2NF9zcGFyYyIKLQkgICAgOzsKLQllc2FjCi0JOzsKLSAgICBlc2FjCi0gIGZpCi0gIHJtIC1yZiBjb25mdGVzdCoKLSAgOzsKLQotKi0qLXNjbzMuMnY1KikKLSAgIyBPbiBTQ08gT3BlblNlcnZlciA1LCB3ZSBuZWVkIC1iZWxmIHRvIGdldCBmdWxsLWZlYXR1cmVkIGJpbmFyaWVzLgotICBTQVZFX0NGTEFHUz0iJENGTEFHUyIKLSAgQ0ZMQUdTPSIkQ0ZMQUdTIC1iZWxmIgotICBBQ19DQUNIRV9DSEVDSyhbd2hldGhlciB0aGUgQyBjb21waWxlciBuZWVkcyAtYmVsZl0sIGx0X2N2X2NjX25lZWRzX2JlbGYsCi0gICAgW0FDX0xBTkdfUFVTSChDKQotICAgICBBQ19MSU5LX0lGRUxTRShbQUNfTEFOR19QUk9HUkFNKFtbXV0sW1tdXSldLFtsdF9jdl9jY19uZWVkc19iZWxmPXllc10sW2x0X2N2X2NjX25lZWRzX2JlbGY9bm9dKQotICAgICBBQ19MQU5HX1BPUF0pCi0gIGlmIHRlc3QgeCIkbHRfY3ZfY2NfbmVlZHNfYmVsZiIgIT0geCJ5ZXMiOyB0aGVuCi0gICAgIyB0aGlzIGlzIHByb2JhYmx5IGdjYyAyLjguMCwgZWdjcyAxLjAgb3IgbmV3ZXI7IG5vIG5lZWQgZm9yIC1iZWxmCi0gICAgQ0ZMQUdTPSIkU0FWRV9DRkxBR1MiCi0gIGZpCi0gIDs7Ci1zcGFyYyotKnNvbGFyaXMqKQotICAjIEZpbmQgb3V0IHdoaWNoIEFCSSB3ZSBhcmUgdXNpbmcuCi0gIGVjaG8gJ2ludCBpOycgPiBjb25mdGVzdC4kYWNfZXh0Ci0gIGlmIEFDX1RSWV9FVkFMKGFjX2NvbXBpbGUpOyB0aGVuCi0gICAgY2FzZSBgL3Vzci9iaW4vZmlsZSBjb25mdGVzdC5vYCBpbgotICAgICo2NC1iaXQqKQotICAgICAgY2FzZSAkbHRfY3ZfcHJvZ19nbnVfbGQgaW4KLSAgICAgIHllcyopIExEPSIke0xELWxkfSAtbSBlbGY2NF9zcGFyYyIgOzsKLSAgICAgICopCi0JaWYgJHtMRC1sZH0gLTY0IC1yIC1vIGNvbmZ0ZXN0Mi5vIGNvbmZ0ZXN0Lm8gPi9kZXYvbnVsbCAyPiYxOyB0aGVuCi0JICBMRD0iJHtMRC1sZH0gLTY0IgotCWZpCi0JOzsKLSAgICAgIGVzYWMKLSAgICAgIDs7Ci0gICAgZXNhYwotICBmaQotICBybSAtcmYgY29uZnRlc3QqCi0gIDs7Ci1lc2FjCi0KLW5lZWRfbG9ja3M9IiRlbmFibGVfbGlidG9vbF9sb2NrIgotXSkjIF9MVF9FTkFCTEVfTE9DSwotCi0KLSMgX0xUX1BST0dfQVIKLSMgLS0tLS0tLS0tLS0KLW00X2RlZnVuKFtfTFRfUFJPR19BUl0sCi1bQUNfQ0hFQ0tfVE9PTFMoQVIsIFthcl0sIGZhbHNlKQotOiAke0FSPWFyfQotOiAke0FSX0ZMQUdTPWNydX0KLV9MVF9ERUNMKFtdLCBbQVJdLCBbMV0sIFtUaGUgYXJjaGl2ZXJdKQotX0xUX0RFQ0woW10sIFtBUl9GTEFHU10sIFsxXSwgW0ZsYWdzIHRvIGNyZWF0ZSBhbiBhcmNoaXZlXSkKLQotQUNfQ0FDSEVfQ0hFQ0soW2ZvciBhcmNoaXZlciBARklMRSBzdXBwb3J0XSwgW2x0X2N2X2FyX2F0X2ZpbGVdLAotICBbbHRfY3ZfYXJfYXRfZmlsZT1ubwotICAgQUNfQ09NUElMRV9JRkVMU0UoW0FDX0xBTkdfUFJPR1JBTV0sCi0gICAgIFtlY2hvIGNvbmZ0ZXN0LiRhY19vYmpleHQgPiBjb25mdGVzdC5sc3QKLSAgICAgIGx0X2FyX3RyeT0nJEFSICRBUl9GTEFHUyBsaWJjb25mdGVzdC5hIEBjb25mdGVzdC5sc3QgPiZBU19NRVNTQUdFX0xPR19GRCcKLSAgICAgIEFDX1RSWV9FVkFMKFtsdF9hcl90cnldKQotICAgICAgaWYgdGVzdCAiJGFjX3N0YXR1cyIgLWVxIDA7IHRoZW4KLQkjIEVuc3VyZSB0aGUgYXJjaGl2ZXIgZmFpbHMgdXBvbiBib2d1cyBmaWxlIG5hbWVzLgotCXJtIC1mIGNvbmZ0ZXN0LiRhY19vYmpleHQgbGliY29uZnRlc3QuYQotCUFDX1RSWV9FVkFMKFtsdF9hcl90cnldKQotCWlmIHRlc3QgIiRhY19zdGF0dXMiIC1uZSAwOyB0aGVuCi0gICAgICAgICAgbHRfY3ZfYXJfYXRfZmlsZT1ACi0gICAgICAgIGZpCi0gICAgICBmaQotICAgICAgcm0gLWYgY29uZnRlc3QuKiBsaWJjb25mdGVzdC5hCi0gICAgIF0pCi0gIF0pCi0KLWlmIHRlc3QgIngkbHRfY3ZfYXJfYXRfZmlsZSIgPSB4bm87IHRoZW4KLSAgYXJjaGl2ZXJfbGlzdF9zcGVjPQotZWxzZQotICBhcmNoaXZlcl9saXN0X3NwZWM9JGx0X2N2X2FyX2F0X2ZpbGUKLWZpCi1fTFRfREVDTChbXSwgW2FyY2hpdmVyX2xpc3Rfc3BlY10sIFsxXSwKLSAgW0hvdyB0byBmZWVkIGEgZmlsZSBsaXN0aW5nIHRvIHRoZSBhcmNoaXZlcl0pCi1dKSMgX0xUX1BST0dfQVIKLQotCi0jIF9MVF9DTURfT0xEX0FSQ0hJVkUKLSMgLS0tLS0tLS0tLS0tLS0tLS0tLQotbTRfZGVmdW4oW19MVF9DTURfT0xEX0FSQ0hJVkVdLAotW19MVF9QUk9HX0FSCi0KLUFDX0NIRUNLX1RPT0woU1RSSVAsIHN0cmlwLCA6KQotdGVzdCAteiAiJFNUUklQIiAmJiBTVFJJUD06Ci1fTFRfREVDTChbXSwgW1NUUklQXSwgWzFdLCBbQSBzeW1ib2wgc3RyaXBwaW5nIHByb2dyYW1dKQotCi1BQ19DSEVDS19UT09MKFJBTkxJQiwgcmFubGliLCA6KQotdGVzdCAteiAiJFJBTkxJQiIgJiYgUkFOTElCPToKLV9MVF9ERUNMKFtdLCBbUkFOTElCXSwgWzFdLAotICAgIFtDb21tYW5kcyB1c2VkIHRvIGluc3RhbGwgYW4gb2xkLXN0eWxlIGFyY2hpdmVdKQotCi0jIERldGVybWluZSBjb21tYW5kcyB0byBjcmVhdGUgb2xkLXN0eWxlIHN0YXRpYyBhcmNoaXZlcy4KLW9sZF9hcmNoaXZlX2NtZHM9JyRBUiAkQVJfRkxBR1MgJG9sZGxpYiRvbGRvYmpzJwotb2xkX3Bvc3RpbnN0YWxsX2NtZHM9J2NobW9kIDY0NCAkb2xkbGliJwotb2xkX3Bvc3R1bmluc3RhbGxfY21kcz0KLQotaWYgdGVzdCAtbiAiJFJBTkxJQiI7IHRoZW4KLSAgY2FzZSAkaG9zdF9vcyBpbgotICBvcGVuYnNkKikKLSAgICBvbGRfcG9zdGluc3RhbGxfY21kcz0iJG9sZF9wb3N0aW5zdGFsbF9jbWRzflwkUkFOTElCIC10IFwkb2xkbGliIgotICAgIDs7Ci0gICopCi0gICAgb2xkX3Bvc3RpbnN0YWxsX2NtZHM9IiRvbGRfcG9zdGluc3RhbGxfY21kc35cJFJBTkxJQiBcJG9sZGxpYiIKLSAgICA7OwotICBlc2FjCi0gIG9sZF9hcmNoaXZlX2NtZHM9IiRvbGRfYXJjaGl2ZV9jbWRzflwkUkFOTElCIFwkb2xkbGliIgotZmkKLQotY2FzZSAkaG9zdF9vcyBpbgotICBkYXJ3aW4qKQotICAgIGxvY2tfb2xkX2FyY2hpdmVfZXh0cmFjdGlvbj15ZXMgOzsKLSAgKikKLSAgICBsb2NrX29sZF9hcmNoaXZlX2V4dHJhY3Rpb249bm8gOzsKLWVzYWMKLV9MVF9ERUNMKFtdLCBbb2xkX3Bvc3RpbnN0YWxsX2NtZHNdLCBbMl0pCi1fTFRfREVDTChbXSwgW29sZF9wb3N0dW5pbnN0YWxsX2NtZHNdLCBbMl0pCi1fTFRfVEFHREVDTChbXSwgW29sZF9hcmNoaXZlX2NtZHNdLCBbMl0sCi0gICAgW0NvbW1hbmRzIHVzZWQgdG8gYnVpbGQgYW4gb2xkLXN0eWxlIGFyY2hpdmVdKQotX0xUX0RFQ0woW10sIFtsb2NrX29sZF9hcmNoaXZlX2V4dHJhY3Rpb25dLCBbMF0sCi0gICAgW1doZXRoZXIgdG8gdXNlIGEgbG9jayBmb3Igb2xkIGFyY2hpdmUgZXh0cmFjdGlvbl0pCi1dKSMgX0xUX0NNRF9PTERfQVJDSElWRQotCi0KLSMgX0xUX0NPTVBJTEVSX09QVElPTihNRVNTQUdFLCBWQVJJQUJMRS1OQU1FLCBGTEFHUywKLSMJCVtPVVRQVVQtRklMRV0sIFtBQ1RJT04tU1VDQ0VTU10sIFtBQ1RJT04tRkFJTFVSRV0pCi0jIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSMgQ2hlY2sgd2hldGhlciB0aGUgZ2l2ZW4gY29tcGlsZXIgb3B0aW9uIHdvcmtzCi1BQ19ERUZVTihbX0xUX0NPTVBJTEVSX09QVElPTl0sCi1bbTRfcmVxdWlyZShbX0xUX0ZJTEVVVElMU19ERUZBVUxUU10pZG5sCi1tNF9yZXF1aXJlKFtfTFRfREVDTF9TRURdKWRubAotQUNfQ0FDSEVfQ0hFQ0soWyQxXSwgWyQyXSwKLSAgWyQyPW5vCi0gICBtNF9pZihbJDRdLCAsIFthY19vdXRmaWxlPWNvbmZ0ZXN0LiRhY19vYmpleHRdLCBbYWNfb3V0ZmlsZT0kNF0pCi0gICBlY2hvICIkbHRfc2ltcGxlX2NvbXBpbGVfdGVzdF9jb2RlIiA+IGNvbmZ0ZXN0LiRhY19leHQKLSAgIGx0X2NvbXBpbGVyX2ZsYWc9IiQzIgotICAgIyBJbnNlcnQgdGhlIG9wdGlvbiBlaXRoZXIgKDEpIGFmdGVyIHRoZSBsYXN0ICpGTEFHUyB2YXJpYWJsZSwgb3IKLSAgICMgKDIpIGJlZm9yZSBhIHdvcmQgY29udGFpbmluZyAiY29uZnRlc3QuIiwgb3IgKDMpIGF0IHRoZSBlbmQuCi0gICAjIE5vdGUgdGhhdCAkYWNfY29tcGlsZSBpdHNlbGYgZG9lcyBub3QgY29udGFpbiBiYWNrc2xhc2hlcyBhbmQgYmVnaW5zCi0gICAjIHdpdGggYSBkb2xsYXIgc2lnbiAobm90IGEgaHlwaGVuKSwgc28gdGhlIGVjaG8gc2hvdWxkIHdvcmsgY29ycmVjdGx5LgotICAgIyBUaGUgb3B0aW9uIGlzIHJlZmVyZW5jZWQgdmlhIGEgdmFyaWFibGUgdG8gYXZvaWQgY29uZnVzaW5nIHNlZC4KLSAgIGx0X2NvbXBpbGU9YGVjaG8gIiRhY19jb21waWxlIiB8ICRTRUQgXAotICAgLWUgJ3M6LipGTEFHU31cezAsMVx9IDomJGx0X2NvbXBpbGVyX2ZsYWcgOjsgdCcgXAotICAgLWUgJ3M6IFtbXiBdXSpjb25mdGVzdFwuOiAkbHRfY29tcGlsZXJfZmxhZyY6OyB0JyBcCi0gICAtZSAnczokOiAkbHRfY29tcGlsZXJfZmxhZzonYAotICAgKGV2YWwgZWNobyAiXCJcJGFzX21lOiRMSU5FTk86ICRsdF9jb21waWxlXCIiID4mQVNfTUVTU0FHRV9MT0dfRkQpCi0gICAoZXZhbCAiJGx0X2NvbXBpbGUiIDI+Y29uZnRlc3QuZXJyKQotICAgYWNfc3RhdHVzPSQ/Ci0gICBjYXQgY29uZnRlc3QuZXJyID4mQVNfTUVTU0FHRV9MT0dfRkQKLSAgIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JkFTX01FU1NBR0VfTE9HX0ZECi0gICBpZiAoZXhpdCAkYWNfc3RhdHVzKSAmJiB0ZXN0IC1zICIkYWNfb3V0ZmlsZSI7IHRoZW4KLSAgICAgIyBUaGUgY29tcGlsZXIgY2FuIG9ubHkgd2FybiBhbmQgaWdub3JlIHRoZSBvcHRpb24gaWYgbm90IHJlY29nbml6ZWQKLSAgICAgIyBTbyBzYXkgbm8gaWYgdGhlcmUgYXJlIHdhcm5pbmdzIG90aGVyIHRoYW4gdGhlIHVzdWFsIG91dHB1dC4KLSAgICAgJEVDSE8gIiRfbHRfY29tcGlsZXJfYm9pbGVycGxhdGUiIHwgJFNFRCAnL14kL2QnID5jb25mdGVzdC5leHAKLSAgICAgJFNFRCAnL14kL2Q7IC9eICorL2QnIGNvbmZ0ZXN0LmVyciA+Y29uZnRlc3QuZXIyCi0gICAgIGlmIHRlc3QgISAtcyBjb25mdGVzdC5lcjIgfHwgZGlmZiBjb25mdGVzdC5leHAgY29uZnRlc3QuZXIyID4vZGV2L251bGw7IHRoZW4KLSAgICAgICAkMj15ZXMKLSAgICAgZmkKLSAgIGZpCi0gICAkUk0gY29uZnRlc3QqCi1dKQotCi1pZiB0ZXN0IHgiWyRdJDIiID0geHllczsgdGhlbgotICAgIG00X2lmKFskNV0sICwgOiwgWyQ1XSkKLWVsc2UKLSAgICBtNF9pZihbJDZdLCAsIDosIFskNl0pCi1maQotXSkjIF9MVF9DT01QSUxFUl9PUFRJT04KLQotIyBPbGQgbmFtZToKLUFVX0FMSUFTKFtBQ19MSUJUT09MX0NPTVBJTEVSX09QVElPTl0sIFtfTFRfQ09NUElMRVJfT1BUSU9OXSkKLWRubCBhY2xvY2FsLTEuNCBiYWNrd2FyZHMgY29tcGF0aWJpbGl0eToKLWRubCBBQ19ERUZVTihbQUNfTElCVE9PTF9DT01QSUxFUl9PUFRJT05dLCBbXSkKLQotCi0jIF9MVF9MSU5LRVJfT1BUSU9OKE1FU1NBR0UsIFZBUklBQkxFLU5BTUUsIEZMQUdTLAotIyAgICAgICAgICAgICAgICAgIFtBQ1RJT04tU1VDQ0VTU10sIFtBQ1RJT04tRkFJTFVSRV0pCi0jIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSMgQ2hlY2sgd2hldGhlciB0aGUgZ2l2ZW4gbGlua2VyIG9wdGlvbiB3b3JrcwotQUNfREVGVU4oW19MVF9MSU5LRVJfT1BUSU9OXSwKLVttNF9yZXF1aXJlKFtfTFRfRklMRVVUSUxTX0RFRkFVTFRTXSlkbmwKLW00X3JlcXVpcmUoW19MVF9ERUNMX1NFRF0pZG5sCi1BQ19DQUNIRV9DSEVDSyhbJDFdLCBbJDJdLAotICBbJDI9bm8KLSAgIHNhdmVfTERGTEFHUz0iJExERkxBR1MiCi0gICBMREZMQUdTPSIkTERGTEFHUyAkMyIKLSAgIGVjaG8gIiRsdF9zaW1wbGVfbGlua190ZXN0X2NvZGUiID4gY29uZnRlc3QuJGFjX2V4dAotICAgaWYgKGV2YWwgJGFjX2xpbmsgMj5jb25mdGVzdC5lcnIpICYmIHRlc3QgLXMgY29uZnRlc3QkYWNfZXhlZXh0OyB0aGVuCi0gICAgICMgVGhlIGxpbmtlciBjYW4gb25seSB3YXJuIGFuZCBpZ25vcmUgdGhlIG9wdGlvbiBpZiBub3QgcmVjb2duaXplZAotICAgICAjIFNvIHNheSBubyBpZiB0aGVyZSBhcmUgd2FybmluZ3MKLSAgICAgaWYgdGVzdCAtcyBjb25mdGVzdC5lcnI7IHRoZW4KLSAgICAgICAjIEFwcGVuZCBhbnkgZXJyb3JzIHRvIHRoZSBjb25maWcubG9nLgotICAgICAgIGNhdCBjb25mdGVzdC5lcnIgMT4mQVNfTUVTU0FHRV9MT0dfRkQKLSAgICAgICAkRUNITyAiJF9sdF9saW5rZXJfYm9pbGVycGxhdGUiIHwgJFNFRCAnL14kL2QnID4gY29uZnRlc3QuZXhwCi0gICAgICAgJFNFRCAnL14kL2Q7IC9eICorL2QnIGNvbmZ0ZXN0LmVyciA+Y29uZnRlc3QuZXIyCi0gICAgICAgaWYgZGlmZiBjb25mdGVzdC5leHAgY29uZnRlc3QuZXIyID4vZGV2L251bGw7IHRoZW4KLSAgICAgICAgICQyPXllcwotICAgICAgIGZpCi0gICAgIGVsc2UKLSAgICAgICAkMj15ZXMKLSAgICAgZmkKLSAgIGZpCi0gICAkUk0gLXIgY29uZnRlc3QqCi0gICBMREZMQUdTPSIkc2F2ZV9MREZMQUdTIgotXSkKLQotaWYgdGVzdCB4IlskXSQyIiA9IHh5ZXM7IHRoZW4KLSAgICBtNF9pZihbJDRdLCAsIDosIFskNF0pCi1lbHNlCi0gICAgbTRfaWYoWyQ1XSwgLCA6LCBbJDVdKQotZmkKLV0pIyBfTFRfTElOS0VSX09QVElPTgotCi0jIE9sZCBuYW1lOgotQVVfQUxJQVMoW0FDX0xJQlRPT0xfTElOS0VSX09QVElPTl0sIFtfTFRfTElOS0VSX09QVElPTl0pCi1kbmwgYWNsb2NhbC0xLjQgYmFja3dhcmRzIGNvbXBhdGliaWxpdHk6Ci1kbmwgQUNfREVGVU4oW0FDX0xJQlRPT0xfTElOS0VSX09QVElPTl0sIFtdKQotCi0KLSMgTFRfQ01EX01BWF9MRU4KLSMtLS0tLS0tLS0tLS0tLS0KLUFDX0RFRlVOKFtMVF9DTURfTUFYX0xFTl0sCi1bQUNfUkVRVUlSRShbQUNfQ0FOT05JQ0FMX0hPU1RdKWRubAotIyBmaW5kIHRoZSBtYXhpbXVtIGxlbmd0aCBvZiBjb21tYW5kIGxpbmUgYXJndW1lbnRzCi1BQ19NU0dfQ0hFQ0tJTkcoW3RoZSBtYXhpbXVtIGxlbmd0aCBvZiBjb21tYW5kIGxpbmUgYXJndW1lbnRzXSkKLUFDX0NBQ0hFX1ZBTChbbHRfY3Zfc3lzX21heF9jbWRfbGVuXSwgW2RubAotICBpPTAKLSAgdGVzdHN0cmluZz0iQUJDRCIKLQotICBjYXNlICRidWlsZF9vcyBpbgotICBtc2Rvc2RqZ3BwKikKLSAgICAjIE9uIERKR1BQLCB0aGlzIHRlc3QgY2FuIGJsb3cgdXAgcHJldHR5IGJhZGx5IGR1ZSB0byBwcm9ibGVtcyBpbiBsaWJjCi0gICAgIyAoYW55IHNpbmdsZSBhcmd1bWVudCBleGNlZWRpbmcgMjAwMCBieXRlcyBjYXVzZXMgYSBidWZmZXIgb3ZlcnJ1bgotICAgICMgZHVyaW5nIGdsb2IgZXhwYW5zaW9uKS4gIEV2ZW4gaWYgaXQgd2VyZSBmaXhlZCwgdGhlIHJlc3VsdCBvZiB0aGlzCi0gICAgIyBjaGVjayB3b3VsZCBiZSBsYXJnZXIgdGhhbiBpdCBzaG91bGQgYmUuCi0gICAgbHRfY3Zfc3lzX21heF9jbWRfbGVuPTEyMjg4OyAgICAjIDEySyBpcyBhYm91dCByaWdodAotICAgIDs7Ci0KLSAgZ251KikKLSAgICAjIFVuZGVyIEdOVSBIdXJkLCB0aGlzIHRlc3QgaXMgbm90IHJlcXVpcmVkIGJlY2F1c2UgdGhlcmUgaXMKLSAgICAjIG5vIGxpbWl0IHRvIHRoZSBsZW5ndGggb2YgY29tbWFuZCBsaW5lIGFyZ3VtZW50cy4KLSAgICAjIExpYnRvb2wgd2lsbCBpbnRlcnByZXQgLTEgYXMgbm8gbGltaXQgd2hhdHNvZXZlcgotICAgIGx0X2N2X3N5c19tYXhfY21kX2xlbj0tMTsKLSAgICA7OwotCi0gIGN5Z3dpbiogfCBtaW5ndyogfCBjZWdjYyopCi0gICAgIyBPbiBXaW45eC9NRSwgdGhpcyB0ZXN0IGJsb3dzIHVwIC0tIGl0IHN1Y2NlZWRzLCBidXQgdGFrZXMKLSAgICAjIGFib3V0IDUgbWludXRlcyBhcyB0aGUgdGVzdHN0cmluZyBncm93cyBleHBvbmVudGlhbGx5LgotICAgICMgV29yc2UsIHNpbmNlIDl4L01FIGFyZSBub3QgcHJlLWVtcHRpdmVseSBtdWx0aXRhc2tpbmcsCi0gICAgIyB5b3UgZW5kIHVwIHdpdGggYSAiZnJvemVuIiBjb21wdXRlciwgZXZlbiB0aG91Z2ggd2l0aCBwYXRpZW5jZQotICAgICMgdGhlIHRlc3QgZXZlbnR1YWxseSBzdWNjZWVkcyAod2l0aCBhIG1heCBsaW5lIGxlbmd0aCBvZiAyNTZrKS4KLSAgICAjIEluc3RlYWQsIGxldCdzIGp1c3QgcHVudDogdXNlIHRoZSBtaW5pbXVtIGxpbmVsZW5ndGggcmVwb3J0ZWQgYnkKLSAgICAjIGFsbCBvZiB0aGUgc3VwcG9ydGVkIHBsYXRmb3JtczogODE5MiAob24gTlQvMksvWFApLgotICAgIGx0X2N2X3N5c19tYXhfY21kX2xlbj04MTkyOwotICAgIDs7Ci0KLSAgbWludCopCi0gICAgIyBPbiBNaU5UIHRoaXMgY2FuIHRha2UgYSBsb25nIHRpbWUgYW5kIHJ1biBvdXQgb2YgbWVtb3J5LgotICAgIGx0X2N2X3N5c19tYXhfY21kX2xlbj04MTkyOwotICAgIDs7Ci0KLSAgYW1pZ2FvcyopCi0gICAgIyBPbiBBbWlnYU9TIHdpdGggcGRrc2gsIHRoaXMgdGVzdCB0YWtlcyBob3VycywgbGl0ZXJhbGx5LgotICAgICMgU28gd2UganVzdCBwdW50IGFuZCB1c2UgYSBtaW5pbXVtIGxpbmUgbGVuZ3RoIG9mIDgxOTIuCi0gICAgbHRfY3Zfc3lzX21heF9jbWRfbGVuPTgxOTI7Ci0gICAgOzsKLQotICBuZXRic2QqIHwgZnJlZWJzZCogfCBvcGVuYnNkKiB8IGRhcndpbiogfCBkcmFnb25mbHkqKQotICAgICMgVGhpcyBoYXMgYmVlbiBhcm91bmQgc2luY2UgMzg2QlNELCBhdCBsZWFzdC4gIExpa2VseSBmdXJ0aGVyLgotICAgIGlmIHRlc3QgLXggL3NiaW4vc3lzY3RsOyB0aGVuCi0gICAgICBsdF9jdl9zeXNfbWF4X2NtZF9sZW49YC9zYmluL3N5c2N0bCAtbiBrZXJuLmFyZ21heGAKLSAgICBlbGlmIHRlc3QgLXggL3Vzci9zYmluL3N5c2N0bDsgdGhlbgotICAgICAgbHRfY3Zfc3lzX21heF9jbWRfbGVuPWAvdXNyL3NiaW4vc3lzY3RsIC1uIGtlcm4uYXJnbWF4YAotICAgIGVsc2UKLSAgICAgIGx0X2N2X3N5c19tYXhfY21kX2xlbj02NTUzNgkjIHVzYWJsZSBkZWZhdWx0IGZvciBhbGwgQlNEcwotICAgIGZpCi0gICAgIyBBbmQgYWRkIGEgc2FmZXR5IHpvbmUKLSAgICBsdF9jdl9zeXNfbWF4X2NtZF9sZW49YGV4cHIgJGx0X2N2X3N5c19tYXhfY21kX2xlbiBcLyA0YAotICAgIGx0X2N2X3N5c19tYXhfY21kX2xlbj1gZXhwciAkbHRfY3Zfc3lzX21heF9jbWRfbGVuIFwqIDNgCi0gICAgOzsKLQotICBpbnRlcml4KikKLSAgICAjIFdlIGtub3cgdGhlIHZhbHVlIDI2MjE0NCBhbmQgaGFyZGNvZGUgaXQgd2l0aCBhIHNhZmV0eSB6b25lIChsaWtlIEJTRCkKLSAgICBsdF9jdl9zeXNfbWF4X2NtZF9sZW49MTk2NjA4Ci0gICAgOzsKLQotICBvc2YqKQotICAgICMgRHIuIEhhbnMgRWtrZWhhcmQgUGxlc3NlciByZXBvcnRzIHNlZWluZyBhIGtlcm5lbCBwYW5pYyBydW5uaW5nIGNvbmZpZ3VyZQotICAgICMgZHVlIHRvIHRoaXMgdGVzdCB3aGVuIGV4ZWNfZGlzYWJsZV9hcmdfbGltaXQgaXMgMSBvbiBUcnU2NC4gSXQgaXMgbm90Ci0gICAgIyBuaWNlIHRvIGNhdXNlIGtlcm5lbCBwYW5pY3Mgc28gbGV0cyBhdm9pZCB0aGUgbG9vcCBiZWxvdy4KLSAgICAjIEZpcnN0IHNldCBhIHJlYXNvbmFibGUgZGVmYXVsdC4KLSAgICBsdF9jdl9zeXNfbWF4X2NtZF9sZW49MTYzODQKLSAgICAjCi0gICAgaWYgdGVzdCAteCAvc2Jpbi9zeXNjb25maWc7IHRoZW4KLSAgICAgIGNhc2UgYC9zYmluL3N5c2NvbmZpZyAtcSBwcm9jIGV4ZWNfZGlzYWJsZV9hcmdfbGltaXRgIGluCi0gICAgICAgICoxKikgbHRfY3Zfc3lzX21heF9jbWRfbGVuPS0xIDs7Ci0gICAgICBlc2FjCi0gICAgZmkKLSAgICA7OwotICBzY28zLjJ2NSopCi0gICAgbHRfY3Zfc3lzX21heF9jbWRfbGVuPTEwMjQwMAotICAgIDs7Ci0gIHN5c3Y1KiB8IHNjbzV2NiogfCBzeXN2NC4ydXcyKikKLSAgICBrYXJnbWF4PWBncmVwIEFSR19NQVggL2V0Yy9jb25mL2NmLmQvc3R1bmUgMj4vZGV2L251bGxgCi0gICAgaWYgdGVzdCAtbiAiJGthcmdtYXgiOyB0aGVuCi0gICAgICBsdF9jdl9zeXNfbWF4X2NtZF9sZW49YGVjaG8gJGthcmdtYXggfCBzZWQgJ3MvLipbWwkgXV0vLydgCi0gICAgZWxzZQotICAgICAgbHRfY3Zfc3lzX21heF9jbWRfbGVuPTMyNzY4Ci0gICAgZmkKLSAgICA7OwotICAqKQotICAgIGx0X2N2X3N5c19tYXhfY21kX2xlbj1gKGdldGNvbmYgQVJHX01BWCkgMj4gL2Rldi9udWxsYAotICAgIGlmIHRlc3QgLW4gIiRsdF9jdl9zeXNfbWF4X2NtZF9sZW4iOyB0aGVuCi0gICAgICBsdF9jdl9zeXNfbWF4X2NtZF9sZW49YGV4cHIgJGx0X2N2X3N5c19tYXhfY21kX2xlbiBcLyA0YAotICAgICAgbHRfY3Zfc3lzX21heF9jbWRfbGVuPWBleHByICRsdF9jdl9zeXNfbWF4X2NtZF9sZW4gXCogM2AKLSAgICBlbHNlCi0gICAgICAjIE1ha2UgdGVzdHN0cmluZyBhIGxpdHRsZSBiaWdnZXIgYmVmb3JlIHdlIGRvIGFueXRoaW5nIHdpdGggaXQuCi0gICAgICAjIGEgMUsgc3RyaW5nIHNob3VsZCBiZSBhIHJlYXNvbmFibGUgc3RhcnQuCi0gICAgICBmb3IgaSBpbiAxIDIgMyA0IDUgNiA3IDggOyBkbwotICAgICAgICB0ZXN0c3RyaW5nPSR0ZXN0c3RyaW5nJHRlc3RzdHJpbmcKLSAgICAgIGRvbmUKLSAgICAgIFNIRUxMPSR7U0hFTEwtJHtDT05GSUdfU0hFTEwtL2Jpbi9zaH19Ci0gICAgICAjIElmIHRlc3QgaXMgbm90IGEgc2hlbGwgYnVpbHQtaW4sIHdlJ2xsIHByb2JhYmx5IGVuZCB1cCBjb21wdXRpbmcgYQotICAgICAgIyBtYXhpbXVtIGxlbmd0aCB0aGF0IGlzIG9ubHkgaGFsZiBvZiB0aGUgYWN0dWFsIG1heGltdW0gbGVuZ3RoLCBidXQKLSAgICAgICMgd2UgY2FuJ3QgdGVsbC4KLSAgICAgIHdoaWxlIHsgdGVzdCAiWCJgZnVuY19mYWxsYmFja19lY2hvICIkdGVzdHN0cmluZyR0ZXN0c3RyaW5nIiAyPi9kZXYvbnVsbGAgXAotCSAgICAgICAgID0gIlgkdGVzdHN0cmluZyR0ZXN0c3RyaW5nIjsgfSA+L2Rldi9udWxsIDI+JjEgJiYKLQkgICAgICB0ZXN0ICRpICE9IDE3ICMgMS8yIE1CIHNob3VsZCBiZSBlbm91Z2gKLSAgICAgIGRvCi0gICAgICAgIGk9YGV4cHIgJGkgKyAxYAotICAgICAgICB0ZXN0c3RyaW5nPSR0ZXN0c3RyaW5nJHRlc3RzdHJpbmcKLSAgICAgIGRvbmUKLSAgICAgICMgT25seSBjaGVjayB0aGUgc3RyaW5nIGxlbmd0aCBvdXRzaWRlIHRoZSBsb29wLgotICAgICAgbHRfY3Zfc3lzX21heF9jbWRfbGVuPWBleHByICJYJHRlc3RzdHJpbmciIDogIi4qIiAyPiYxYAotICAgICAgdGVzdHN0cmluZz0KLSAgICAgICMgQWRkIGEgc2lnbmlmaWNhbnQgc2FmZXR5IGZhY3RvciBiZWNhdXNlIEMrKyBjb21waWxlcnMgY2FuIHRhY2sgb24KLSAgICAgICMgbWFzc2l2ZSBhbW91bnRzIG9mIGFkZGl0aW9uYWwgYXJndW1lbnRzIGJlZm9yZSBwYXNzaW5nIHRoZW0gdG8gdGhlCi0gICAgICAjIGxpbmtlci4gIEl0IGFwcGVhcnMgYXMgdGhvdWdoIDEvMiBpcyBhIHVzYWJsZSB2YWx1ZS4KLSAgICAgIGx0X2N2X3N5c19tYXhfY21kX2xlbj1gZXhwciAkbHRfY3Zfc3lzX21heF9jbWRfbGVuIFwvIDJgCi0gICAgZmkKLSAgICA7OwotICBlc2FjCi1dKQotaWYgdGVzdCAtbiAkbHRfY3Zfc3lzX21heF9jbWRfbGVuIDsgdGhlbgotICBBQ19NU0dfUkVTVUxUKCRsdF9jdl9zeXNfbWF4X2NtZF9sZW4pCi1lbHNlCi0gIEFDX01TR19SRVNVTFQobm9uZSkKLWZpCi1tYXhfY21kX2xlbj0kbHRfY3Zfc3lzX21heF9jbWRfbGVuCi1fTFRfREVDTChbXSwgW21heF9jbWRfbGVuXSwgWzBdLAotICAgIFtXaGF0IGlzIHRoZSBtYXhpbXVtIGxlbmd0aCBvZiBhIGNvbW1hbmQ/XSkKLV0pIyBMVF9DTURfTUFYX0xFTgotCi0jIE9sZCBuYW1lOgotQVVfQUxJQVMoW0FDX0xJQlRPT0xfU1lTX01BWF9DTURfTEVOXSwgW0xUX0NNRF9NQVhfTEVOXSkKLWRubCBhY2xvY2FsLTEuNCBiYWNrd2FyZHMgY29tcGF0aWJpbGl0eToKLWRubCBBQ19ERUZVTihbQUNfTElCVE9PTF9TWVNfTUFYX0NNRF9MRU5dLCBbXSkKLQotCi0jIF9MVF9IRUFERVJfRExGQ04KLSMgLS0tLS0tLS0tLS0tLS0tLQotbTRfZGVmdW4oW19MVF9IRUFERVJfRExGQ05dLAotW0FDX0NIRUNLX0hFQURFUlMoW2RsZmNuLmhdLCBbXSwgW10sIFtBQ19JTkNMVURFU19ERUZBVUxUXSlkbmwKLV0pIyBfTFRfSEVBREVSX0RMRkNOCi0KLQotIyBfTFRfVFJZX0RMT1BFTl9TRUxGIChBQ1RJT04tSUYtVFJVRSwgQUNUSU9OLUlGLVRSVUUtVy1VU0NPUkUsCi0jICAgICAgICAgICAgICAgICAgICAgIEFDVElPTi1JRi1GQUxTRSwgQUNUSU9OLUlGLUNST1NTLUNPTVBJTElORykKLSMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotbTRfZGVmdW4oW19MVF9UUllfRExPUEVOX1NFTEZdLAotW200X3JlcXVpcmUoW19MVF9IRUFERVJfRExGQ05dKWRubAotaWYgdGVzdCAiJGNyb3NzX2NvbXBpbGluZyIgPSB5ZXM7IHRoZW4gOgotICBbJDRdCi1lbHNlCi0gIGx0X2RsdW5rbm93bj0wOyBsdF9kbG5vX3VzY29yZT0xOyBsdF9kbG5lZWRfdXNjb3JlPTIKLSAgbHRfc3RhdHVzPSRsdF9kbHVua25vd24KLSAgY2F0ID4gY29uZnRlc3QuJGFjX2V4dCA8PF9MVF9FT0YKLVsjbGluZSAkTElORU5PICJjb25maWd1cmUiCi0jaW5jbHVkZSAiY29uZmRlZnMuaCIKLQotI2lmIEhBVkVfRExGQ05fSAotI2luY2x1ZGUgPGRsZmNuLmg+Ci0jZW5kaWYKLQotI2luY2x1ZGUgPHN0ZGlvLmg+Ci0KLSNpZmRlZiBSVExEX0dMT0JBTAotIyAgZGVmaW5lIExUX0RMR0xPQkFMCQlSVExEX0dMT0JBTAotI2Vsc2UKLSMgIGlmZGVmIERMX0dMT0JBTAotIyAgICBkZWZpbmUgTFRfRExHTE9CQUwJCURMX0dMT0JBTAotIyAgZWxzZQotIyAgICBkZWZpbmUgTFRfRExHTE9CQUwJCTAKLSMgIGVuZGlmCi0jZW5kaWYKLQotLyogV2UgbWF5IGhhdmUgdG8gZGVmaW5lIExUX0RMTEFaWV9PUl9OT1cgaW4gdGhlIGNvbW1hbmQgbGluZSBpZiB3ZQotICAgZmluZCBvdXQgaXQgZG9lcyBub3Qgd29yayBpbiBzb21lIHBsYXRmb3JtLiAqLwotI2lmbmRlZiBMVF9ETExBWllfT1JfTk9XCi0jICBpZmRlZiBSVExEX0xBWlkKLSMgICAgZGVmaW5lIExUX0RMTEFaWV9PUl9OT1cJCVJUTERfTEFaWQotIyAgZWxzZQotIyAgICBpZmRlZiBETF9MQVpZCi0jICAgICAgZGVmaW5lIExUX0RMTEFaWV9PUl9OT1cJCURMX0xBWlkKLSMgICAgZWxzZQotIyAgICAgIGlmZGVmIFJUTERfTk9XCi0jICAgICAgICBkZWZpbmUgTFRfRExMQVpZX09SX05PVwlSVExEX05PVwotIyAgICAgIGVsc2UKLSMgICAgICAgIGlmZGVmIERMX05PVwotIyAgICAgICAgICBkZWZpbmUgTFRfRExMQVpZX09SX05PVwlETF9OT1cKLSMgICAgICAgIGVsc2UKLSMgICAgICAgICAgZGVmaW5lIExUX0RMTEFaWV9PUl9OT1cJMAotIyAgICAgICAgZW5kaWYKLSMgICAgICBlbmRpZgotIyAgICBlbmRpZgotIyAgZW5kaWYKLSNlbmRpZgotCi0vKiBXaGVuIC1mdmlzYmlsaXR5PWhpZGRlbiBpcyB1c2VkLCBhc3N1bWUgdGhlIGNvZGUgaGFzIGJlZW4gYW5ub3RhdGVkCi0gICBjb3JyZXNwb25kaW5nbHkgZm9yIHRoZSBzeW1ib2xzIG5lZWRlZC4gICovCi0jaWYgZGVmaW5lZChfX0dOVUNfXykgJiYgKCgoX19HTlVDX18gPT0gMykgJiYgKF9fR05VQ19NSU5PUl9fID49IDMpKSB8fCAoX19HTlVDX18gPiAzKSkKLWludCBmbm9yZCAoKSBfX2F0dHJpYnV0ZV9fKCh2aXNpYmlsaXR5KCJkZWZhdWx0IikpKTsKLSNlbmRpZgotCi1pbnQgZm5vcmQgKCkgeyByZXR1cm4gNDI7IH0KLWludCBtYWluICgpCi17Ci0gIHZvaWQgKnNlbGYgPSBkbG9wZW4gKDAsIExUX0RMR0xPQkFMfExUX0RMTEFaWV9PUl9OT1cpOwotICBpbnQgc3RhdHVzID0gJGx0X2RsdW5rbm93bjsKLQotICBpZiAoc2VsZikKLSAgICB7Ci0gICAgICBpZiAoZGxzeW0gKHNlbGYsImZub3JkIikpICAgICAgIHN0YXR1cyA9ICRsdF9kbG5vX3VzY29yZTsKLSAgICAgIGVsc2UKLSAgICAgICAgewotCSAgaWYgKGRsc3ltKCBzZWxmLCJfZm5vcmQiKSkgIHN0YXR1cyA9ICRsdF9kbG5lZWRfdXNjb3JlOwotICAgICAgICAgIGVsc2UgcHV0cyAoZGxlcnJvciAoKSk7Ci0JfQotICAgICAgLyogZGxjbG9zZSAoc2VsZik7ICovCi0gICAgfQotICBlbHNlCi0gICAgcHV0cyAoZGxlcnJvciAoKSk7Ci0KLSAgcmV0dXJuIHN0YXR1czsKLX1dCi1fTFRfRU9GCi0gIGlmIEFDX1RSWV9FVkFMKGFjX2xpbmspICYmIHRlc3QgLXMgY29uZnRlc3Qke2FjX2V4ZWV4dH0gMj4vZGV2L251bGw7IHRoZW4KLSAgICAoLi9jb25mdGVzdDsgZXhpdDsgKSA+JkFTX01FU1NBR0VfTE9HX0ZEIDI+L2Rldi9udWxsCi0gICAgbHRfc3RhdHVzPSQ/Ci0gICAgY2FzZSB4JGx0X3N0YXR1cyBpbgotICAgICAgeCRsdF9kbG5vX3VzY29yZSkgJDEgOzsKLSAgICAgIHgkbHRfZGxuZWVkX3VzY29yZSkgJDIgOzsKLSAgICAgIHgkbHRfZGx1bmtub3dufHgqKSAkMyA7OwotICAgIGVzYWMKLSAgZWxzZSA6Ci0gICAgIyBjb21waWxhdGlvbiBmYWlsZWQKLSAgICAkMwotICBmaQotZmkKLXJtIC1mciBjb25mdGVzdCoKLV0pIyBfTFRfVFJZX0RMT1BFTl9TRUxGCi0KLQotIyBMVF9TWVNfRExPUEVOX1NFTEYKLSMgLS0tLS0tLS0tLS0tLS0tLS0tCi1BQ19ERUZVTihbTFRfU1lTX0RMT1BFTl9TRUxGXSwKLVttNF9yZXF1aXJlKFtfTFRfSEVBREVSX0RMRkNOXSlkbmwKLWlmIHRlc3QgIngkZW5hYmxlX2Rsb3BlbiIgIT0geHllczsgdGhlbgotICBlbmFibGVfZGxvcGVuPXVua25vd24KLSAgZW5hYmxlX2Rsb3Blbl9zZWxmPXVua25vd24KLSAgZW5hYmxlX2Rsb3Blbl9zZWxmX3N0YXRpYz11bmtub3duCi1lbHNlCi0gIGx0X2N2X2Rsb3Blbj1ubwotICBsdF9jdl9kbG9wZW5fbGlicz0KLQotICBjYXNlICRob3N0X29zIGluCi0gIGJlb3MqKQotICAgIGx0X2N2X2Rsb3Blbj0ibG9hZF9hZGRfb24iCi0gICAgbHRfY3ZfZGxvcGVuX2xpYnM9Ci0gICAgbHRfY3ZfZGxvcGVuX3NlbGY9eWVzCi0gICAgOzsKLQotICBtaW5ndyogfCBwdzMyKiB8IGNlZ2NjKikKLSAgICBsdF9jdl9kbG9wZW49IkxvYWRMaWJyYXJ5IgotICAgIGx0X2N2X2Rsb3Blbl9saWJzPQotICAgIDs7Ci0KLSAgY3lnd2luKikKLSAgICBsdF9jdl9kbG9wZW49ImRsb3BlbiIKLSAgICBsdF9jdl9kbG9wZW5fbGlicz0KLSAgICA7OwotCi0gIGRhcndpbiopCi0gICMgaWYgbGliZGwgaXMgaW5zdGFsbGVkIHdlIG5lZWQgdG8gbGluayBhZ2FpbnN0IGl0Ci0gICAgQUNfQ0hFQ0tfTElCKFtkbF0sIFtkbG9wZW5dLAotCQlbbHRfY3ZfZGxvcGVuPSJkbG9wZW4iIGx0X2N2X2Rsb3Blbl9saWJzPSItbGRsIl0sWwotICAgIGx0X2N2X2Rsb3Blbj0iZHlsZCIKLSAgICBsdF9jdl9kbG9wZW5fbGlicz0KLSAgICBsdF9jdl9kbG9wZW5fc2VsZj15ZXMKLSAgICBdKQotICAgIDs7Ci0KLSAgKikKLSAgICBBQ19DSEVDS19GVU5DKFtzaGxfbG9hZF0sCi0JICBbbHRfY3ZfZGxvcGVuPSJzaGxfbG9hZCJdLAotICAgICAgW0FDX0NIRUNLX0xJQihbZGxkXSwgW3NobF9sb2FkXSwKLQkgICAgW2x0X2N2X2Rsb3Blbj0ic2hsX2xvYWQiIGx0X2N2X2Rsb3Blbl9saWJzPSItbGRsZCJdLAotCVtBQ19DSEVDS19GVU5DKFtkbG9wZW5dLAotCSAgICAgIFtsdF9jdl9kbG9wZW49ImRsb3BlbiJdLAotCSAgW0FDX0NIRUNLX0xJQihbZGxdLCBbZGxvcGVuXSwKLQkJW2x0X2N2X2Rsb3Blbj0iZGxvcGVuIiBsdF9jdl9kbG9wZW5fbGlicz0iLWxkbCJdLAotCSAgICBbQUNfQ0hFQ0tfTElCKFtzdmxkXSwgW2Rsb3Blbl0sCi0JCSAgW2x0X2N2X2Rsb3Blbj0iZGxvcGVuIiBsdF9jdl9kbG9wZW5fbGlicz0iLWxzdmxkIl0sCi0JICAgICAgW0FDX0NIRUNLX0xJQihbZGxkXSwgW2RsZF9saW5rXSwKLQkJICAgIFtsdF9jdl9kbG9wZW49ImRsZF9saW5rIiBsdF9jdl9kbG9wZW5fbGlicz0iLWxkbGQiXSkKLQkgICAgICBdKQotCSAgICBdKQotCSAgXSkKLQldKQotICAgICAgXSkKLSAgICA7OwotICBlc2FjCi0KLSAgaWYgdGVzdCAieCRsdF9jdl9kbG9wZW4iICE9IHhubzsgdGhlbgotICAgIGVuYWJsZV9kbG9wZW49eWVzCi0gIGVsc2UKLSAgICBlbmFibGVfZGxvcGVuPW5vCi0gIGZpCi0KLSAgY2FzZSAkbHRfY3ZfZGxvcGVuIGluCi0gIGRsb3BlbikKLSAgICBzYXZlX0NQUEZMQUdTPSIkQ1BQRkxBR1MiCi0gICAgdGVzdCAieCRhY19jdl9oZWFkZXJfZGxmY25faCIgPSB4eWVzICYmIENQUEZMQUdTPSIkQ1BQRkxBR1MgLURIQVZFX0RMRkNOX0giCi0KLSAgICBzYXZlX0xERkxBR1M9IiRMREZMQUdTIgotICAgIHdsPSRsdF9wcm9nX2NvbXBpbGVyX3dsIGV2YWwgTERGTEFHUz1cIlwkTERGTEFHUyAkZXhwb3J0X2R5bmFtaWNfZmxhZ19zcGVjXCIKLQotICAgIHNhdmVfTElCUz0iJExJQlMiCi0gICAgTElCUz0iJGx0X2N2X2Rsb3Blbl9saWJzICRMSUJTIgotCi0gICAgQUNfQ0FDSEVfQ0hFQ0soW3doZXRoZXIgYSBwcm9ncmFtIGNhbiBkbG9wZW4gaXRzZWxmXSwKLQkgIGx0X2N2X2Rsb3Blbl9zZWxmLCBbZG5sCi0JICBfTFRfVFJZX0RMT1BFTl9TRUxGKAotCSAgICBsdF9jdl9kbG9wZW5fc2VsZj15ZXMsIGx0X2N2X2Rsb3Blbl9zZWxmPXllcywKLQkgICAgbHRfY3ZfZGxvcGVuX3NlbGY9bm8sIGx0X2N2X2Rsb3Blbl9zZWxmPWNyb3NzKQotICAgIF0pCi0KLSAgICBpZiB0ZXN0ICJ4JGx0X2N2X2Rsb3Blbl9zZWxmIiA9IHh5ZXM7IHRoZW4KLSAgICAgIHdsPSRsdF9wcm9nX2NvbXBpbGVyX3dsIGV2YWwgTERGTEFHUz1cIlwkTERGTEFHUyAkbHRfcHJvZ19jb21waWxlcl9zdGF0aWNcIgotICAgICAgQUNfQ0FDSEVfQ0hFQ0soW3doZXRoZXIgYSBzdGF0aWNhbGx5IGxpbmtlZCBwcm9ncmFtIGNhbiBkbG9wZW4gaXRzZWxmXSwKLQkgIGx0X2N2X2Rsb3Blbl9zZWxmX3N0YXRpYywgW2RubAotCSAgX0xUX1RSWV9ETE9QRU5fU0VMRigKLQkgICAgbHRfY3ZfZGxvcGVuX3NlbGZfc3RhdGljPXllcywgbHRfY3ZfZGxvcGVuX3NlbGZfc3RhdGljPXllcywKLQkgICAgbHRfY3ZfZGxvcGVuX3NlbGZfc3RhdGljPW5vLCAgbHRfY3ZfZGxvcGVuX3NlbGZfc3RhdGljPWNyb3NzKQotICAgICAgXSkKLSAgICBmaQotCi0gICAgQ1BQRkxBR1M9IiRzYXZlX0NQUEZMQUdTIgotICAgIExERkxBR1M9IiRzYXZlX0xERkxBR1MiCi0gICAgTElCUz0iJHNhdmVfTElCUyIKLSAgICA7OwotICBlc2FjCi0KLSAgY2FzZSAkbHRfY3ZfZGxvcGVuX3NlbGYgaW4KLSAgeWVzfG5vKSBlbmFibGVfZGxvcGVuX3NlbGY9JGx0X2N2X2Rsb3Blbl9zZWxmIDs7Ci0gICopIGVuYWJsZV9kbG9wZW5fc2VsZj11bmtub3duIDs7Ci0gIGVzYWMKLQotICBjYXNlICRsdF9jdl9kbG9wZW5fc2VsZl9zdGF0aWMgaW4KLSAgeWVzfG5vKSBlbmFibGVfZGxvcGVuX3NlbGZfc3RhdGljPSRsdF9jdl9kbG9wZW5fc2VsZl9zdGF0aWMgOzsKLSAgKikgZW5hYmxlX2Rsb3Blbl9zZWxmX3N0YXRpYz11bmtub3duIDs7Ci0gIGVzYWMKLWZpCi1fTFRfREVDTChbZGxvcGVuX3N1cHBvcnRdLCBbZW5hYmxlX2Rsb3Blbl0sIFswXSwKLQkgW1doZXRoZXIgZGxvcGVuIGlzIHN1cHBvcnRlZF0pCi1fTFRfREVDTChbZGxvcGVuX3NlbGZdLCBbZW5hYmxlX2Rsb3Blbl9zZWxmXSwgWzBdLAotCSBbV2hldGhlciBkbG9wZW4gb2YgcHJvZ3JhbXMgaXMgc3VwcG9ydGVkXSkKLV9MVF9ERUNMKFtkbG9wZW5fc2VsZl9zdGF0aWNdLCBbZW5hYmxlX2Rsb3Blbl9zZWxmX3N0YXRpY10sIFswXSwKLQkgW1doZXRoZXIgZGxvcGVuIG9mIHN0YXRpY2FsbHkgbGlua2VkIHByb2dyYW1zIGlzIHN1cHBvcnRlZF0pCi1dKSMgTFRfU1lTX0RMT1BFTl9TRUxGCi0KLSMgT2xkIG5hbWU6Ci1BVV9BTElBUyhbQUNfTElCVE9PTF9ETE9QRU5fU0VMRl0sIFtMVF9TWVNfRExPUEVOX1NFTEZdKQotZG5sIGFjbG9jYWwtMS40IGJhY2t3YXJkcyBjb21wYXRpYmlsaXR5OgotZG5sIEFDX0RFRlVOKFtBQ19MSUJUT09MX0RMT1BFTl9TRUxGXSwgW10pCi0KLQotIyBfTFRfQ09NUElMRVJfQ19PKFtUQUdOQU1FXSkKLSMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0jIENoZWNrIHRvIHNlZSBpZiBvcHRpb25zIC1jIGFuZCAtbyBhcmUgc2ltdWx0YW5lb3VzbHkgc3VwcG9ydGVkIGJ5IGNvbXBpbGVyLgotIyBUaGlzIG1hY3JvIGRvZXMgbm90IGhhcmQgY29kZSB0aGUgY29tcGlsZXIgbGlrZSBBQ19QUk9HX0NDX0NfTy4KLW00X2RlZnVuKFtfTFRfQ09NUElMRVJfQ19PXSwKLVttNF9yZXF1aXJlKFtfTFRfREVDTF9TRURdKWRubAotbTRfcmVxdWlyZShbX0xUX0ZJTEVVVElMU19ERUZBVUxUU10pZG5sCi1tNF9yZXF1aXJlKFtfTFRfVEFHX0NPTVBJTEVSXSlkbmwKLUFDX0NBQ0hFX0NIRUNLKFtpZiAkY29tcGlsZXIgc3VwcG9ydHMgLWMgLW8gZmlsZS4kYWNfb2JqZXh0XSwKLSAgW19MVF9UQUdWQVIobHRfY3ZfcHJvZ19jb21waWxlcl9jX28sICQxKV0sCi0gIFtfTFRfVEFHVkFSKGx0X2N2X3Byb2dfY29tcGlsZXJfY19vLCAkMSk9bm8KLSAgICRSTSAtciBjb25mdGVzdCAyPi9kZXYvbnVsbAotICAgbWtkaXIgY29uZnRlc3QKLSAgIGNkIGNvbmZ0ZXN0Ci0gICBta2RpciBvdXQKLSAgIGVjaG8gIiRsdF9zaW1wbGVfY29tcGlsZV90ZXN0X2NvZGUiID4gY29uZnRlc3QuJGFjX2V4dAotCi0gICBsdF9jb21waWxlcl9mbGFnPSItbyBvdXQvY29uZnRlc3QyLiRhY19vYmpleHQiCi0gICAjIEluc2VydCB0aGUgb3B0aW9uIGVpdGhlciAoMSkgYWZ0ZXIgdGhlIGxhc3QgKkZMQUdTIHZhcmlhYmxlLCBvcgotICAgIyAoMikgYmVmb3JlIGEgd29yZCBjb250YWluaW5nICJjb25mdGVzdC4iLCBvciAoMykgYXQgdGhlIGVuZC4KLSAgICMgTm90ZSB0aGF0ICRhY19jb21waWxlIGl0c2VsZiBkb2VzIG5vdCBjb250YWluIGJhY2tzbGFzaGVzIGFuZCBiZWdpbnMKLSAgICMgd2l0aCBhIGRvbGxhciBzaWduIChub3QgYSBoeXBoZW4pLCBzbyB0aGUgZWNobyBzaG91bGQgd29yayBjb3JyZWN0bHkuCi0gICBsdF9jb21waWxlPWBlY2hvICIkYWNfY29tcGlsZSIgfCAkU0VEIFwKLSAgIC1lICdzOi4qRkxBR1N9XHswLDFcfSA6JiRsdF9jb21waWxlcl9mbGFnIDo7IHQnIFwKLSAgIC1lICdzOiBbW14gXV0qY29uZnRlc3RcLjogJGx0X2NvbXBpbGVyX2ZsYWcmOjsgdCcgXAotICAgLWUgJ3M6JDogJGx0X2NvbXBpbGVyX2ZsYWc6J2AKLSAgIChldmFsIGVjaG8gIlwiXCRhc19tZTokTElORU5POiAkbHRfY29tcGlsZVwiIiA+JkFTX01FU1NBR0VfTE9HX0ZEKQotICAgKGV2YWwgIiRsdF9jb21waWxlIiAyPm91dC9jb25mdGVzdC5lcnIpCi0gICBhY19zdGF0dXM9JD8KLSAgIGNhdCBvdXQvY29uZnRlc3QuZXJyID4mQVNfTUVTU0FHRV9MT0dfRkQKLSAgIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JkFTX01FU1NBR0VfTE9HX0ZECi0gICBpZiAoZXhpdCAkYWNfc3RhdHVzKSAmJiB0ZXN0IC1zIG91dC9jb25mdGVzdDIuJGFjX29iamV4dAotICAgdGhlbgotICAgICAjIFRoZSBjb21waWxlciBjYW4gb25seSB3YXJuIGFuZCBpZ25vcmUgdGhlIG9wdGlvbiBpZiBub3QgcmVjb2duaXplZAotICAgICAjIFNvIHNheSBubyBpZiB0aGVyZSBhcmUgd2FybmluZ3MKLSAgICAgJEVDSE8gIiRfbHRfY29tcGlsZXJfYm9pbGVycGxhdGUiIHwgJFNFRCAnL14kL2QnID4gb3V0L2NvbmZ0ZXN0LmV4cAotICAgICAkU0VEICcvXiQvZDsgL14gKisvZCcgb3V0L2NvbmZ0ZXN0LmVyciA+b3V0L2NvbmZ0ZXN0LmVyMgotICAgICBpZiB0ZXN0ICEgLXMgb3V0L2NvbmZ0ZXN0LmVyMiB8fCBkaWZmIG91dC9jb25mdGVzdC5leHAgb3V0L2NvbmZ0ZXN0LmVyMiA+L2Rldi9udWxsOyB0aGVuCi0gICAgICAgX0xUX1RBR1ZBUihsdF9jdl9wcm9nX2NvbXBpbGVyX2NfbywgJDEpPXllcwotICAgICBmaQotICAgZmkKLSAgIGNobW9kIHUrdyAuIDI+JkFTX01FU1NBR0VfTE9HX0ZECi0gICAkUk0gY29uZnRlc3QqCi0gICAjIFNHSSBDKysgY29tcGlsZXIgd2lsbCBjcmVhdGUgZGlyZWN0b3J5IG91dC9paV9maWxlcy8gZm9yCi0gICAjIHRlbXBsYXRlIGluc3RhbnRpYXRpb24KLSAgIHRlc3QgLWQgb3V0L2lpX2ZpbGVzICYmICRSTSBvdXQvaWlfZmlsZXMvKiAmJiBybWRpciBvdXQvaWlfZmlsZXMKLSAgICRSTSBvdXQvKiAmJiBybWRpciBvdXQKLSAgIGNkIC4uCi0gICAkUk0gLXIgY29uZnRlc3QKLSAgICRSTSBjb25mdGVzdCoKLV0pCi1fTFRfVEFHREVDTChbY29tcGlsZXJfY19vXSwgW2x0X2N2X3Byb2dfY29tcGlsZXJfY19vXSwgWzFdLAotCVtEb2VzIGNvbXBpbGVyIHNpbXVsdGFuZW91c2x5IHN1cHBvcnQgLWMgYW5kIC1vIG9wdGlvbnM/XSkKLV0pIyBfTFRfQ09NUElMRVJfQ19PCi0KLQotIyBfTFRfQ09NUElMRVJfRklMRV9MT0NLUyhbVEFHTkFNRV0pCi0jIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSMgQ2hlY2sgdG8gc2VlIGlmIHdlIGNhbiBkbyBoYXJkIGxpbmtzIHRvIGxvY2sgc29tZSBmaWxlcyBpZiBuZWVkZWQKLW00X2RlZnVuKFtfTFRfQ09NUElMRVJfRklMRV9MT0NLU10sCi1bbTRfcmVxdWlyZShbX0xUX0VOQUJMRV9MT0NLXSlkbmwKLW00X3JlcXVpcmUoW19MVF9GSUxFVVRJTFNfREVGQVVMVFNdKWRubAotX0xUX0NPTVBJTEVSX0NfTyhbJDFdKQotCi1oYXJkX2xpbmtzPSJub3R0ZXN0ZWQiCi1pZiB0ZXN0ICIkX0xUX1RBR1ZBUihsdF9jdl9wcm9nX2NvbXBpbGVyX2NfbywgJDEpIiA9IG5vICYmIHRlc3QgIiRuZWVkX2xvY2tzIiAhPSBubzsgdGhlbgotICAjIGRvIG5vdCBvdmVyd3JpdGUgdGhlIHZhbHVlIG9mIG5lZWRfbG9ja3MgcHJvdmlkZWQgYnkgdGhlIHVzZXIKLSAgQUNfTVNHX0NIRUNLSU5HKFtpZiB3ZSBjYW4gbG9jayB3aXRoIGhhcmQgbGlua3NdKQotICBoYXJkX2xpbmtzPXllcwotICAkUk0gY29uZnRlc3QqCi0gIGxuIGNvbmZ0ZXN0LmEgY29uZnRlc3QuYiAyPi9kZXYvbnVsbCAmJiBoYXJkX2xpbmtzPW5vCi0gIHRvdWNoIGNvbmZ0ZXN0LmEKLSAgbG4gY29uZnRlc3QuYSBjb25mdGVzdC5iIDI+JjUgfHwgaGFyZF9saW5rcz1ubwotICBsbiBjb25mdGVzdC5hIGNvbmZ0ZXN0LmIgMj4vZGV2L251bGwgJiYgaGFyZF9saW5rcz1ubwotICBBQ19NU0dfUkVTVUxUKFskaGFyZF9saW5rc10pCi0gIGlmIHRlc3QgIiRoYXJkX2xpbmtzIiA9IG5vOyB0aGVuCi0gICAgQUNfTVNHX1dBUk4oW2AkQ0MnIGRvZXMgbm90IHN1cHBvcnQgYC1jIC1vJywgc28gYG1ha2UgLWonIG1heSBiZSB1bnNhZmVdKQotICAgIG5lZWRfbG9ja3M9d2FybgotICBmaQotZWxzZQotICBuZWVkX2xvY2tzPW5vCi1maQotX0xUX0RFQ0woW10sIFtuZWVkX2xvY2tzXSwgWzFdLCBbTXVzdCB3ZSBsb2NrIGZpbGVzIHdoZW4gZG9pbmcgY29tcGlsYXRpb24/XSkKLV0pIyBfTFRfQ09NUElMRVJfRklMRV9MT0NLUwotCi0KLSMgX0xUX0NIRUNLX09CSkRJUgotIyAtLS0tLS0tLS0tLS0tLS0tCi1tNF9kZWZ1bihbX0xUX0NIRUNLX09CSkRJUl0sCi1bQUNfQ0FDSEVfQ0hFQ0soW2ZvciBvYmpkaXJdLCBbbHRfY3Zfb2JqZGlyXSwKLVtybSAtZiAubGlicyAyPi9kZXYvbnVsbAotbWtkaXIgLmxpYnMgMj4vZGV2L251bGwKLWlmIHRlc3QgLWQgLmxpYnM7IHRoZW4KLSAgbHRfY3Zfb2JqZGlyPS5saWJzCi1lbHNlCi0gICMgTVMtRE9TIGRvZXMgbm90IGFsbG93IGZpbGVuYW1lcyB0aGF0IGJlZ2luIHdpdGggYSBkb3QuCi0gIGx0X2N2X29iamRpcj1fbGlicwotZmkKLXJtZGlyIC5saWJzIDI+L2Rldi9udWxsXSkKLW9iamRpcj0kbHRfY3Zfb2JqZGlyCi1fTFRfREVDTChbXSwgW29iamRpcl0sIFswXSwKLSAgICAgICAgIFtUaGUgbmFtZSBvZiB0aGUgZGlyZWN0b3J5IHRoYXQgY29udGFpbnMgdGVtcG9yYXJ5IGxpYnRvb2wgZmlsZXNdKWRubAotbTRfcGF0dGVybl9hbGxvdyhbTFRfT0JKRElSXSlkbmwKLUFDX0RFRklORV9VTlFVT1RFRChMVF9PQkpESVIsICIkbHRfY3Zfb2JqZGlyLyIsCi0gIFtEZWZpbmUgdG8gdGhlIHN1Yi1kaXJlY3RvcnkgaW4gd2hpY2ggbGlidG9vbCBzdG9yZXMgdW5pbnN0YWxsZWQgbGlicmFyaWVzLl0pCi1dKSMgX0xUX0NIRUNLX09CSkRJUgotCi0KLSMgX0xUX0xJTktFUl9IQVJEQ09ERV9MSUJQQVRIKFtUQUdOQU1FXSkKLSMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSMgQ2hlY2sgaGFyZGNvZGluZyBhdHRyaWJ1dGVzLgotbTRfZGVmdW4oW19MVF9MSU5LRVJfSEFSRENPREVfTElCUEFUSF0sCi1bQUNfTVNHX0NIRUNLSU5HKFtob3cgdG8gaGFyZGNvZGUgbGlicmFyeSBwYXRocyBpbnRvIHByb2dyYW1zXSkKLV9MVF9UQUdWQVIoaGFyZGNvZGVfYWN0aW9uLCAkMSk9Ci1pZiB0ZXN0IC1uICIkX0xUX1RBR1ZBUihoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjLCAkMSkiIHx8Ci0gICB0ZXN0IC1uICIkX0xUX1RBR1ZBUihydW5wYXRoX3ZhciwgJDEpIiB8fAotICAgdGVzdCAiWCRfTFRfVEFHVkFSKGhhcmRjb2RlX2F1dG9tYXRpYywgJDEpIiA9ICJYeWVzIiA7IHRoZW4KLQotICAjIFdlIGNhbiBoYXJkY29kZSBub24tZXhpc3RlbnQgZGlyZWN0b3JpZXMuCi0gIGlmIHRlc3QgIiRfTFRfVEFHVkFSKGhhcmRjb2RlX2RpcmVjdCwgJDEpIiAhPSBubyAmJgotICAgICAjIElmIHRoZSBvbmx5IG1lY2hhbmlzbSB0byBhdm9pZCBoYXJkY29kaW5nIGlzIHNobGlicGF0aF92YXIsIHdlCi0gICAgICMgaGF2ZSB0byByZWxpbmssIG90aGVyd2lzZSB3ZSBtaWdodCBsaW5rIHdpdGggYW4gaW5zdGFsbGVkIGxpYnJhcnkKLSAgICAgIyB3aGVuIHdlIHNob3VsZCBiZSBsaW5raW5nIHdpdGggYSB5ZXQtdG8tYmUtaW5zdGFsbGVkIG9uZQotICAgICAjIyB0ZXN0ICIkX0xUX1RBR1ZBUihoYXJkY29kZV9zaGxpYnBhdGhfdmFyLCAkMSkiICE9IG5vICYmCi0gICAgIHRlc3QgIiRfTFRfVEFHVkFSKGhhcmRjb2RlX21pbnVzX0wsICQxKSIgIT0gbm87IHRoZW4KLSAgICAjIExpbmtpbmcgYWx3YXlzIGhhcmRjb2RlcyB0aGUgdGVtcG9yYXJ5IGxpYnJhcnkgZGlyZWN0b3J5LgotICAgIF9MVF9UQUdWQVIoaGFyZGNvZGVfYWN0aW9uLCAkMSk9cmVsaW5rCi0gIGVsc2UKLSAgICAjIFdlIGNhbiBsaW5rIHdpdGhvdXQgaGFyZGNvZGluZywgYW5kIHdlIGNhbiBoYXJkY29kZSBub25leGlzdGluZyBkaXJzLgotICAgIF9MVF9UQUdWQVIoaGFyZGNvZGVfYWN0aW9uLCAkMSk9aW1tZWRpYXRlCi0gIGZpCi1lbHNlCi0gICMgV2UgY2Fubm90IGhhcmRjb2RlIGFueXRoaW5nLCBvciBlbHNlIHdlIGNhbiBvbmx5IGhhcmRjb2RlIGV4aXN0aW5nCi0gICMgZGlyZWN0b3JpZXMuCi0gIF9MVF9UQUdWQVIoaGFyZGNvZGVfYWN0aW9uLCAkMSk9dW5zdXBwb3J0ZWQKLWZpCi1BQ19NU0dfUkVTVUxUKFskX0xUX1RBR1ZBUihoYXJkY29kZV9hY3Rpb24sICQxKV0pCi0KLWlmIHRlc3QgIiRfTFRfVEFHVkFSKGhhcmRjb2RlX2FjdGlvbiwgJDEpIiA9IHJlbGluayB8fAotICAgdGVzdCAiJF9MVF9UQUdWQVIoaW5oZXJpdF9ycGF0aCwgJDEpIiA9IHllczsgdGhlbgotICAjIEZhc3QgaW5zdGFsbGF0aW9uIGlzIG5vdCBzdXBwb3J0ZWQKLSAgZW5hYmxlX2Zhc3RfaW5zdGFsbD1ubwotZWxpZiB0ZXN0ICIkc2hsaWJwYXRoX292ZXJyaWRlc19ydW5wYXRoIiA9IHllcyB8fAotICAgICB0ZXN0ICIkZW5hYmxlX3NoYXJlZCIgPSBubzsgdGhlbgotICAjIEZhc3QgaW5zdGFsbGF0aW9uIGlzIG5vdCBuZWNlc3NhcnkKLSAgZW5hYmxlX2Zhc3RfaW5zdGFsbD1uZWVkbGVzcwotZmkKLV9MVF9UQUdERUNMKFtdLCBbaGFyZGNvZGVfYWN0aW9uXSwgWzBdLAotICAgIFtIb3cgdG8gaGFyZGNvZGUgYSBzaGFyZWQgbGlicmFyeSBwYXRoIGludG8gYW4gZXhlY3V0YWJsZV0pCi1dKSMgX0xUX0xJTktFUl9IQVJEQ09ERV9MSUJQQVRICi0KLQotIyBfTFRfQ01EX1NUUklQTElCCi0jIC0tLS0tLS0tLS0tLS0tLS0KLW00X2RlZnVuKFtfTFRfQ01EX1NUUklQTElCXSwKLVttNF9yZXF1aXJlKFtfTFRfREVDTF9FR1JFUF0pCi1zdHJpcGxpYj0KLW9sZF9zdHJpcGxpYj0KLUFDX01TR19DSEVDS0lORyhbd2hldGhlciBzdHJpcHBpbmcgbGlicmFyaWVzIGlzIHBvc3NpYmxlXSkKLWlmIHRlc3QgLW4gIiRTVFJJUCIgJiYgJFNUUklQIC1WIDI+JjEgfCAkR1JFUCAiR05VIHN0cmlwIiA+L2Rldi9udWxsOyB0aGVuCi0gIHRlc3QgLXogIiRvbGRfc3RyaXBsaWIiICYmIG9sZF9zdHJpcGxpYj0iJFNUUklQIC0tc3RyaXAtZGVidWciCi0gIHRlc3QgLXogIiRzdHJpcGxpYiIgJiYgc3RyaXBsaWI9IiRTVFJJUCAtLXN0cmlwLXVubmVlZGVkIgotICBBQ19NU0dfUkVTVUxUKFt5ZXNdKQotZWxzZQotIyBGSVhNRSAtIGluc2VydCBzb21lIHJlYWwgdGVzdHMsIGhvc3Rfb3MgaXNuJ3QgcmVhbGx5IGdvb2QgZW5vdWdoCi0gIGNhc2UgJGhvc3Rfb3MgaW4KLSAgZGFyd2luKikKLSAgICBpZiB0ZXN0IC1uICIkU1RSSVAiIDsgdGhlbgotICAgICAgc3RyaXBsaWI9IiRTVFJJUCAteCIKLSAgICAgIG9sZF9zdHJpcGxpYj0iJFNUUklQIC1TIgotICAgICAgQUNfTVNHX1JFU1VMVChbeWVzXSkKLSAgICBlbHNlCi0gICAgICBBQ19NU0dfUkVTVUxUKFtub10pCi0gICAgZmkKLSAgICA7OwotICAqKQotICAgIEFDX01TR19SRVNVTFQoW25vXSkKLSAgICA7OwotICBlc2FjCi1maQotX0xUX0RFQ0woW10sIFtvbGRfc3RyaXBsaWJdLCBbMV0sIFtDb21tYW5kcyB0byBzdHJpcCBsaWJyYXJpZXNdKQotX0xUX0RFQ0woW10sIFtzdHJpcGxpYl0sIFsxXSkKLV0pIyBfTFRfQ01EX1NUUklQTElCCi0KLQotIyBfTFRfU1lTX0RZTkFNSUNfTElOS0VSKFtUQUddKQotIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotIyBQT1JUTUUgRmlsbCBpbiB5b3VyIGxkLnNvIGNoYXJhY3RlcmlzdGljcwotbTRfZGVmdW4oW19MVF9TWVNfRFlOQU1JQ19MSU5LRVJdLAotW0FDX1JFUVVJUkUoW0FDX0NBTk9OSUNBTF9IT1NUXSlkbmwKLW00X3JlcXVpcmUoW19MVF9ERUNMX0VHUkVQXSlkbmwKLW00X3JlcXVpcmUoW19MVF9GSUxFVVRJTFNfREVGQVVMVFNdKWRubAotbTRfcmVxdWlyZShbX0xUX0RFQ0xfT0JKRFVNUF0pZG5sCi1tNF9yZXF1aXJlKFtfTFRfREVDTF9TRURdKWRubAotbTRfcmVxdWlyZShbX0xUX0NIRUNLX1NIRUxMX0ZFQVRVUkVTXSlkbmwKLUFDX01TR19DSEVDS0lORyhbZHluYW1pYyBsaW5rZXIgY2hhcmFjdGVyaXN0aWNzXSkKLW00X2lmKFskMV0sCi0JW10sIFsKLWlmIHRlc3QgIiRHQ0MiID0geWVzOyB0aGVuCi0gIGNhc2UgJGhvc3Rfb3MgaW4KLSAgICBkYXJ3aW4qKSBsdF9hd2tfYXJnPSIvXmxpYnJhcmllczovLC9MUi8iIDs7Ci0gICAgKikgbHRfYXdrX2FyZz0iL15saWJyYXJpZXM6LyIgOzsKLSAgZXNhYwotICBjYXNlICRob3N0X29zIGluCi0gICAgbWluZ3cqIHwgY2VnY2MqKSBsdF9zZWRfc3RyaXBfZXE9InMsPVwoW1tBLVphLXpdXTpcKSxcMSxnIiA7OwotICAgICopIGx0X3NlZF9zdHJpcF9lcT0icyw9LywvLGciIDs7Ci0gIGVzYWMKLSAgbHRfc2VhcmNoX3BhdGhfc3BlYz1gJENDIC1wcmludC1zZWFyY2gtZGlycyB8IGF3ayAkbHRfYXdrX2FyZyB8ICRTRUQgLWUgInMvXmxpYnJhcmllczovLyIgLWUgJGx0X3NlZF9zdHJpcF9lcWAKLSAgY2FzZSAkbHRfc2VhcmNoX3BhdGhfc3BlYyBpbgotICAqXDsqKQotICAgICMgaWYgdGhlIHBhdGggY29udGFpbnMgIjsiIHRoZW4gd2UgYXNzdW1lIGl0IHRvIGJlIHRoZSBzZXBhcmF0b3IKLSAgICAjIG90aGVyd2lzZSBkZWZhdWx0IHRvIHRoZSBzdGFuZGFyZCBwYXRoIHNlcGFyYXRvciAoaS5lLiAiOiIpIC0gaXQgaXMKLSAgICAjIGFzc3VtZWQgdGhhdCBubyBwYXJ0IG9mIGEgbm9ybWFsIHBhdGhuYW1lIGNvbnRhaW5zICI7IiBidXQgdGhhdCBzaG91bGQKLSAgICAjIG9rYXkgaW4gdGhlIHJlYWwgd29ybGQgd2hlcmUgIjsiIGluIGRpcnBhdGhzIGlzIGl0c2VsZiBwcm9ibGVtYXRpYy4KLSAgICBsdF9zZWFyY2hfcGF0aF9zcGVjPWAkRUNITyAiJGx0X3NlYXJjaF9wYXRoX3NwZWMiIHwgJFNFRCAncy87LyAvZydgCi0gICAgOzsKLSAgKikKLSAgICBsdF9zZWFyY2hfcGF0aF9zcGVjPWAkRUNITyAiJGx0X3NlYXJjaF9wYXRoX3NwZWMiIHwgJFNFRCAicy8kUEFUSF9TRVBBUkFUT1IvIC9nImAKLSAgICA7OwotICBlc2FjCi0gICMgT2ssIG5vdyB3ZSBoYXZlIHRoZSBwYXRoLCBzZXBhcmF0ZWQgYnkgc3BhY2VzLCB3ZSBjYW4gc3RlcCB0aHJvdWdoIGl0Ci0gICMgYW5kIGFkZCBtdWx0aWxpYiBkaXIgaWYgbmVjZXNzYXJ5LgotICBsdF90bXBfbHRfc2VhcmNoX3BhdGhfc3BlYz0KLSAgbHRfbXVsdGlfb3NfZGlyPWAkQ0MgJENQUEZMQUdTICRDRkxBR1MgJExERkxBR1MgLXByaW50LW11bHRpLW9zLWRpcmVjdG9yeSAyPi9kZXYvbnVsbGAKLSAgZm9yIGx0X3N5c19wYXRoIGluICRsdF9zZWFyY2hfcGF0aF9zcGVjOyBkbwotICAgIGlmIHRlc3QgLWQgIiRsdF9zeXNfcGF0aC8kbHRfbXVsdGlfb3NfZGlyIjsgdGhlbgotICAgICAgbHRfdG1wX2x0X3NlYXJjaF9wYXRoX3NwZWM9IiRsdF90bXBfbHRfc2VhcmNoX3BhdGhfc3BlYyAkbHRfc3lzX3BhdGgvJGx0X211bHRpX29zX2RpciIKLSAgICBlbHNlCi0gICAgICB0ZXN0IC1kICIkbHRfc3lzX3BhdGgiICYmIFwKLQlsdF90bXBfbHRfc2VhcmNoX3BhdGhfc3BlYz0iJGx0X3RtcF9sdF9zZWFyY2hfcGF0aF9zcGVjICRsdF9zeXNfcGF0aCIKLSAgICBmaQotICBkb25lCi0gIGx0X3NlYXJjaF9wYXRoX3NwZWM9YCRFQ0hPICIkbHRfdG1wX2x0X3NlYXJjaF9wYXRoX3NwZWMiIHwgYXdrICcKLUJFR0lOIHtSUz0iICI7IEZTPSIvfFxuIjt9IHsKLSAgbHRfZm9vPSIiOwotICBsdF9jb3VudD0wOwotICBmb3IgKGx0X2kgPSBORjsgbHRfaSA+IDA7IGx0X2ktLSkgewotICAgIGlmICgkbHRfaSAhPSAiIiAmJiAkbHRfaSAhPSAiLiIpIHsKLSAgICAgIGlmICgkbHRfaSA9PSAiLi4iKSB7Ci0gICAgICAgIGx0X2NvdW50Kys7Ci0gICAgICB9IGVsc2UgewotICAgICAgICBpZiAobHRfY291bnQgPT0gMCkgewotICAgICAgICAgIGx0X2Zvbz0iLyIgJGx0X2kgbHRfZm9vOwotICAgICAgICB9IGVsc2UgewotICAgICAgICAgIGx0X2NvdW50LS07Ci0gICAgICAgIH0KLSAgICAgIH0KLSAgICB9Ci0gIH0KLSAgaWYgKGx0X2ZvbyAhPSAiIikgeyBsdF9mcmVxW1tsdF9mb29dXSsrOyB9Ci0gIGlmIChsdF9mcmVxW1tsdF9mb29dXSA9PSAxKSB7IHByaW50IGx0X2ZvbzsgfQotfSdgCi0gICMgQVdLIHByb2dyYW0gYWJvdmUgZXJyb25lb3VzbHkgcHJlcGVuZHMgJy8nIHRvIEM6L2Rvcy9wYXRocwotICAjIGZvciB0aGVzZSBob3N0cy4KLSAgY2FzZSAkaG9zdF9vcyBpbgotICAgIG1pbmd3KiB8IGNlZ2NjKikgbHRfc2VhcmNoX3BhdGhfc3BlYz1gJEVDSE8gIiRsdF9zZWFyY2hfcGF0aF9zcGVjIiB8XAotICAgICAgJFNFRCAncywvXChbW0EtWmEtel1dOlwpLFwxLGcnYCA7OwotICBlc2FjCi0gIHN5c19saWJfc2VhcmNoX3BhdGhfc3BlYz1gJEVDSE8gIiRsdF9zZWFyY2hfcGF0aF9zcGVjIiB8ICRsdF9OTDJTUGAKLWVsc2UKLSAgc3lzX2xpYl9zZWFyY2hfcGF0aF9zcGVjPSIvbGliIC91c3IvbGliIC91c3IvbG9jYWwvbGliIgotZmldKQotbGlicmFyeV9uYW1lc19zcGVjPQotbGlibmFtZV9zcGVjPSdsaWIkbmFtZScKLXNvbmFtZV9zcGVjPQotc2hyZXh0X2NtZHM9Ii5zbyIKLXBvc3RpbnN0YWxsX2NtZHM9Ci1wb3N0dW5pbnN0YWxsX2NtZHM9Ci1maW5pc2hfY21kcz0KLWZpbmlzaF9ldmFsPQotc2hsaWJwYXRoX3Zhcj0KLXNobGlicGF0aF9vdmVycmlkZXNfcnVucGF0aD11bmtub3duCi12ZXJzaW9uX3R5cGU9bm9uZQotZHluYW1pY19saW5rZXI9IiRob3N0X29zIGxkLnNvIgotc3lzX2xpYl9kbHNlYXJjaF9wYXRoX3NwZWM9Ii9saWIgL3Vzci9saWIiCi1uZWVkX2xpYl9wcmVmaXg9dW5rbm93bgotaGFyZGNvZGVfaW50b19saWJzPW5vCi0KLSMgd2hlbiB5b3Ugc2V0IG5lZWRfdmVyc2lvbiB0byBubywgbWFrZSBzdXJlIGl0IGRvZXMgbm90IGNhdXNlIC1zZXRfdmVyc2lvbgotIyBmbGFncyB0byBiZSBsZWZ0IHdpdGhvdXQgYXJndW1lbnRzCi1uZWVkX3ZlcnNpb249dW5rbm93bgotCi1jYXNlICRob3N0X29zIGluCi1haXgzKikKLSAgdmVyc2lvbl90eXBlPWxpbnV4Ci0gIGxpYnJhcnlfbmFtZXNfc3BlYz0nJHtsaWJuYW1lfSR7cmVsZWFzZX0ke3NoYXJlZF9leHR9JHZlcnN1ZmZpeCAkbGlibmFtZS5hJwotICBzaGxpYnBhdGhfdmFyPUxJQlBBVEgKLQotICAjIEFJWCAzIGhhcyBubyB2ZXJzaW9uaW5nIHN1cHBvcnQsIHNvIHdlIGFwcGVuZCBhIG1ham9yIHZlcnNpb24gdG8gdGhlIG5hbWUuCi0gIHNvbmFtZV9zcGVjPScke2xpYm5hbWV9JHtyZWxlYXNlfSR7c2hhcmVkX2V4dH0kbWFqb3InCi0gIDs7Ci0KLWFpeFtbNC05XV0qKQotICB2ZXJzaW9uX3R5cGU9bGludXgKLSAgbmVlZF9saWJfcHJlZml4PW5vCi0gIG5lZWRfdmVyc2lvbj1ubwotICBoYXJkY29kZV9pbnRvX2xpYnM9eWVzCi0gIGlmIHRlc3QgIiRob3N0X2NwdSIgPSBpYTY0OyB0aGVuCi0gICAgIyBBSVggNSBzdXBwb3J0cyBJQTY0Ci0gICAgbGlicmFyeV9uYW1lc19zcGVjPScke2xpYm5hbWV9JHtyZWxlYXNlfSR7c2hhcmVkX2V4dH0kbWFqb3IgJHtsaWJuYW1lfSR7cmVsZWFzZX0ke3NoYXJlZF9leHR9JHZlcnN1ZmZpeCAkbGlibmFtZSR7c2hhcmVkX2V4dH0nCi0gICAgc2hsaWJwYXRoX3Zhcj1MRF9MSUJSQVJZX1BBVEgKLSAgZWxzZQotICAgICMgV2l0aCBHQ0MgdXAgdG8gMi45NS54LCBjb2xsZWN0MiB3b3VsZCBjcmVhdGUgYW4gaW1wb3J0IGZpbGUKLSAgICAjIGZvciBkZXBlbmRlbmNlIGxpYnJhcmllcy4gIFRoZSBpbXBvcnQgZmlsZSB3b3VsZCBzdGFydCB3aXRoCi0gICAgIyB0aGUgbGluZSBgIyEgLicuICBUaGlzIHdvdWxkIGNhdXNlIHRoZSBnZW5lcmF0ZWQgbGlicmFyeSB0bwotICAgICMgZGVwZW5kIG9uIGAuJywgYWx3YXlzIGFuIGludmFsaWQgbGlicmFyeS4gIFRoaXMgd2FzIGZpeGVkIGluCi0gICAgIyBkZXZlbG9wbWVudCBzbmFwc2hvdHMgb2YgR0NDIHByaW9yIHRvIDMuMC4KLSAgICBjYXNlICRob3N0X29zIGluCi0gICAgICBhaXg0IHwgYWl4NC5bWzAxXV0gfCBhaXg0LltbMDFdXS4qKQotICAgICAgaWYgeyBlY2hvICcjaWYgX19HTlVDX18gPiAyIHx8IChfX0dOVUNfXyA9PSAyICYmIF9fR05VQ19NSU5PUl9fID49IDk3KScKLQkgICBlY2hvICcgeWVzICcKLQkgICBlY2hvICcjZW5kaWYnOyB9IHwgJHtDQ30gLUUgLSB8ICRHUkVQIHllcyA+IC9kZXYvbnVsbDsgdGhlbgotCToKLSAgICAgIGVsc2UKLQljYW5fYnVpbGRfc2hhcmVkPW5vCi0gICAgICBmaQotICAgICAgOzsKLSAgICBlc2FjCi0gICAgIyBBSVggKG9uIFBvd2VyKikgaGFzIG5vIHZlcnNpb25pbmcgc3VwcG9ydCwgc28gY3VycmVudGx5IHdlIGNhbiBub3QgaGFyZGNvZGUgY29ycmVjdAotICAgICMgc29uYW1lIGludG8gZXhlY3V0YWJsZS4gUHJvYmFibHkgd2UgY2FuIGFkZCB2ZXJzaW9uaW5nIHN1cHBvcnQgdG8KLSAgICAjIGNvbGxlY3QyLCBzbyBhZGRpdGlvbmFsIGxpbmtzIGNhbiBiZSB1c2VmdWwgaW4gZnV0dXJlLgotICAgIGlmIHRlc3QgIiRhaXhfdXNlX3J1bnRpbWVsaW5raW5nIiA9IHllczsgdGhlbgotICAgICAgIyBJZiB1c2luZyBydW4gdGltZSBsaW5raW5nIChvbiBBSVggNC4yIG9yIGxhdGVyKSB1c2UgbGliPG5hbWU+LnNvCi0gICAgICAjIGluc3RlYWQgb2YgbGliPG5hbWU+LmEgdG8gbGV0IHBlb3BsZSBrbm93IHRoYXQgdGhlc2UgYXJlIG5vdAotICAgICAgIyB0eXBpY2FsIEFJWCBzaGFyZWQgbGlicmFyaWVzLgotICAgICAgbGlicmFyeV9uYW1lc19zcGVjPScke2xpYm5hbWV9JHtyZWxlYXNlfSR7c2hhcmVkX2V4dH0kdmVyc3VmZml4ICR7bGlibmFtZX0ke3JlbGVhc2V9JHtzaGFyZWRfZXh0fSRtYWpvciAkbGlibmFtZSR7c2hhcmVkX2V4dH0nCi0gICAgZWxzZQotICAgICAgIyBXZSBwcmVzZXJ2ZSAuYSBhcyBleHRlbnNpb24gZm9yIHNoYXJlZCBsaWJyYXJpZXMgdGhyb3VnaCBBSVg0LjIKLSAgICAgICMgYW5kIGxhdGVyIHdoZW4gd2UgYXJlIG5vdCBkb2luZyBydW4gdGltZSBsaW5raW5nLgotICAgICAgbGlicmFyeV9uYW1lc19zcGVjPScke2xpYm5hbWV9JHtyZWxlYXNlfS5hICRsaWJuYW1lLmEnCi0gICAgICBzb25hbWVfc3BlYz0nJHtsaWJuYW1lfSR7cmVsZWFzZX0ke3NoYXJlZF9leHR9JG1ham9yJwotICAgIGZpCi0gICAgc2hsaWJwYXRoX3Zhcj1MSUJQQVRICi0gIGZpCi0gIDs7Ci0KLWFtaWdhb3MqKQotICBjYXNlICRob3N0X2NwdSBpbgotICBwb3dlcnBjKQotICAgICMgU2luY2UgSnVseSAyMDA3IEFtaWdhT1M0IG9mZmljaWFsbHkgc3VwcG9ydHMgLnNvIGxpYnJhcmllcy4KLSAgICAjIFdoZW4gY29tcGlsaW5nIHRoZSBleGVjdXRhYmxlLCBhZGQgLXVzZS1keW5sZCAtTHNvYmpzOiB0byB0aGUgY29tcGlsZWxpbmUuCi0gICAgbGlicmFyeV9uYW1lc19zcGVjPScke2xpYm5hbWV9JHtyZWxlYXNlfSR7c2hhcmVkX2V4dH0kdmVyc3VmZml4ICR7bGlibmFtZX0ke3JlbGVhc2V9JHtzaGFyZWRfZXh0fSRtYWpvciAkbGlibmFtZSR7c2hhcmVkX2V4dH0nCi0gICAgOzsKLSAgbTY4aykKLSAgICBsaWJyYXJ5X25hbWVzX3NwZWM9JyRsaWJuYW1lLml4bGlicmFyeSAkbGlibmFtZS5hJwotICAgICMgQ3JlYXRlICR7bGlibmFtZX1faXhsaWJyYXJ5LmEgZW50cmllcyBpbiAvc3lzL2xpYnMuCi0gICAgZmluaXNoX2V2YWw9J2ZvciBsaWIgaW4gYGxzICRsaWJkaXIvKi5peGxpYnJhcnkgMj4vZGV2L251bGxgOyBkbyBsaWJuYW1lPWBmdW5jX2VjaG9fYWxsICIkbGliIiB8ICRTRUQgJ1wnJ3MlXi4qL1woW1teL11dKlwpXC5peGxpYnJhcnkkJVwxJSdcJydgOyB0ZXN0ICRSTSAvc3lzL2xpYnMvJHtsaWJuYW1lfV9peGxpYnJhcnkuYTsgJHNob3cgImNkIC9zeXMvbGlicyAmJiAkTE5fUyAkbGliICR7bGlibmFtZX1faXhsaWJyYXJ5LmEiOyBjZCAvc3lzL2xpYnMgJiYgJExOX1MgJGxpYiAke2xpYm5hbWV9X2l4bGlicmFyeS5hIHx8IGV4aXQgMTsgZG9uZScKLSAgICA7OwotICBlc2FjCi0gIDs7Ci0KLWJlb3MqKQotICBsaWJyYXJ5X25hbWVzX3NwZWM9JyR7bGlibmFtZX0ke3NoYXJlZF9leHR9JwotICBkeW5hbWljX2xpbmtlcj0iJGhvc3Rfb3MgbGQuc28iCi0gIHNobGlicGF0aF92YXI9TElCUkFSWV9QQVRICi0gIDs7Ci0KLWJzZGlbWzQ1XV0qKQotICB2ZXJzaW9uX3R5cGU9bGludXgKLSAgbmVlZF92ZXJzaW9uPW5vCi0gIGxpYnJhcnlfbmFtZXNfc3BlYz0nJHtsaWJuYW1lfSR7cmVsZWFzZX0ke3NoYXJlZF9leHR9JHZlcnN1ZmZpeCAke2xpYm5hbWV9JHtyZWxlYXNlfSR7c2hhcmVkX2V4dH0kbWFqb3IgJGxpYm5hbWUke3NoYXJlZF9leHR9JwotICBzb25hbWVfc3BlYz0nJHtsaWJuYW1lfSR7cmVsZWFzZX0ke3NoYXJlZF9leHR9JG1ham9yJwotICBmaW5pc2hfY21kcz0nUEFUSD0iXCRQQVRIOi9zYmluIiBsZGNvbmZpZyAkbGliZGlyJwotICBzaGxpYnBhdGhfdmFyPUxEX0xJQlJBUllfUEFUSAotICBzeXNfbGliX3NlYXJjaF9wYXRoX3NwZWM9Ii9zaGxpYiAvdXNyL2xpYiAvdXNyL1gxMS9saWIgL3Vzci9jb250cmliL2xpYiAvbGliIC91c3IvbG9jYWwvbGliIgotICBzeXNfbGliX2Rsc2VhcmNoX3BhdGhfc3BlYz0iL3NobGliIC91c3IvbGliIC91c3IvbG9jYWwvbGliIgotICAjIHRoZSBkZWZhdWx0IGxkLnNvLmNvbmYgYWxzbyBjb250YWlucyAvdXNyL2NvbnRyaWIvbGliIGFuZAotICAjIC91c3IvWDExUjYvbGliICgvdXNyL1gxMSBpcyBhIGxpbmsgdG8gL3Vzci9YMTFSNiksIGJ1dCBsZXQgdXMgYWxsb3cKLSAgIyBsaWJ0b29sIHRvIGhhcmQtY29kZSB0aGVzZSBpbnRvIHByb2dyYW1zCi0gIDs7Ci0KLWN5Z3dpbiogfCBtaW5ndyogfCBwdzMyKiB8IGNlZ2NjKikKLSAgdmVyc2lvbl90eXBlPXdpbmRvd3MKLSAgc2hyZXh0X2NtZHM9Ii5kbGwiCi0gIG5lZWRfdmVyc2lvbj1ubwotICBuZWVkX2xpYl9wcmVmaXg9bm8KLQotICBjYXNlICRHQ0MsJGNjX2Jhc2VuYW1lIGluCi0gIHllcywqKQotICAgICMgZ2NjCi0gICAgbGlicmFyeV9uYW1lc19zcGVjPSckbGlibmFtZS5kbGwuYScKLSAgICAjIERMTCBpcyBpbnN0YWxsZWQgdG8gJChsaWJkaXIpLy4uL2JpbiBieSBwb3N0aW5zdGFsbF9jbWRzCi0gICAgcG9zdGluc3RhbGxfY21kcz0nYmFzZV9maWxlPWBiYXNlbmFtZSBcJHtmaWxlfWB+Ci0gICAgICBkbHBhdGg9YCRTSEVMTCAyPiYxIC1jICdcJycuICRkaXIvJ1wnJ1wke2Jhc2VfZmlsZX0nXCcnaTsgZWNobyBcJGRsbmFtZSdcJydgfgotICAgICAgZGxkaXI9JGRlc3RkaXIvYGRpcm5hbWUgXCRkbHBhdGhgfgotICAgICAgdGVzdCAtZCBcJGRsZGlyIHx8IG1rZGlyIC1wIFwkZGxkaXJ+Ci0gICAgICAkaW5zdGFsbF9wcm9nICRkaXIvJGRsbmFtZSBcJGRsZGlyLyRkbG5hbWV+Ci0gICAgICBjaG1vZCBhK3ggXCRkbGRpci8kZGxuYW1lfgotICAgICAgaWYgdGVzdCAtbiAnXCcnJHN0cmlwbWUnXCcnICYmIHRlc3QgLW4gJ1wnJyRzdHJpcGxpYidcJyc7IHRoZW4KLSAgICAgICAgZXZhbCAnXCcnJHN0cmlwbGliIFwkZGxkaXIvJGRsbmFtZSdcJycgfHwgZXhpdCBcJD87Ci0gICAgICBmaScKLSAgICBwb3N0dW5pbnN0YWxsX2NtZHM9J2RsZGxsPWAkU0hFTEwgMj4mMSAtYyAnXCcnLiAkZmlsZTsgZWNobyBcJGRsbmFtZSdcJydgfgotICAgICAgZGxwYXRoPSRkaXIvXCRkbGRsbH4KLSAgICAgICAkUk0gXCRkbHBhdGgnCi0gICAgc2hsaWJwYXRoX292ZXJyaWRlc19ydW5wYXRoPXllcwotCi0gICAgY2FzZSAkaG9zdF9vcyBpbgotICAgIGN5Z3dpbiopCi0gICAgICAjIEN5Z3dpbiBETExzIHVzZSAnY3lnJyBwcmVmaXggcmF0aGVyIHRoYW4gJ2xpYicKLSAgICAgIHNvbmFtZV9zcGVjPSdgZWNobyAke2xpYm5hbWV9IHwgc2VkIC1lICdzL15saWIvY3lnLydgYGVjaG8gJHtyZWxlYXNlfSB8ICRTRUQgLWUgJ3MvW1suXV0vLS9nJ2Ake3ZlcnN1ZmZpeH0ke3NoYXJlZF9leHR9JwotbTRfaWYoWyQxXSwgW10sWwotICAgICAgc3lzX2xpYl9zZWFyY2hfcGF0aF9zcGVjPSIkc3lzX2xpYl9zZWFyY2hfcGF0aF9zcGVjIC91c3IvbGliL3czMmFwaSJdKQotICAgICAgOzsKLSAgICBtaW5ndyogfCBjZWdjYyopCi0gICAgICAjIE1pbkdXIERMTHMgdXNlIHRyYWRpdGlvbmFsICdsaWInIHByZWZpeAotICAgICAgc29uYW1lX3NwZWM9JyR7bGlibmFtZX1gZWNobyAke3JlbGVhc2V9IHwgJFNFRCAtZSAncy9bWy5dXS8tL2cnYCR7dmVyc3VmZml4fSR7c2hhcmVkX2V4dH0nCi0gICAgICA7OwotICAgIHB3MzIqKQotICAgICAgIyBwdzMyIERMTHMgdXNlICdwdycgcHJlZml4IHJhdGhlciB0aGFuICdsaWInCi0gICAgICBsaWJyYXJ5X25hbWVzX3NwZWM9J2BlY2hvICR7bGlibmFtZX0gfCBzZWQgLWUgJ3MvXmxpYi9wdy8nYGBlY2hvICR7cmVsZWFzZX0gfCAkU0VEIC1lICdzL1tbLl1dLy0vZydgJHt2ZXJzdWZmaXh9JHtzaGFyZWRfZXh0fScKLSAgICAgIDs7Ci0gICAgZXNhYwotICAgIGR5bmFtaWNfbGlua2VyPSdXaW4zMiBsZC5leGUnCi0gICAgOzsKLQotICAqLGNsKikKLSAgICAjIE5hdGl2ZSBNU1ZDCi0gICAgbGlibmFtZV9zcGVjPSckbmFtZScKLSAgICBzb25hbWVfc3BlYz0nJHtsaWJuYW1lfWBlY2hvICR7cmVsZWFzZX0gfCAkU0VEIC1lICdzL1tbLl1dLy0vZydgJHt2ZXJzdWZmaXh9JHtzaGFyZWRfZXh0fScKLSAgICBsaWJyYXJ5X25hbWVzX3NwZWM9JyR7bGlibmFtZX0uZGxsLmxpYicKLQotICAgIGNhc2UgJGJ1aWxkX29zIGluCi0gICAgbWluZ3cqKQotICAgICAgc3lzX2xpYl9zZWFyY2hfcGF0aF9zcGVjPQotICAgICAgbHRfc2F2ZV9pZnM9JElGUwotICAgICAgSUZTPSc7JwotICAgICAgZm9yIGx0X3BhdGggaW4gJExJQgotICAgICAgZG8KLSAgICAgICAgSUZTPSRsdF9zYXZlX2lmcwotICAgICAgICAjIExldCBET1MgdmFyaWFibGUgZXhwYW5zaW9uIHByaW50IHRoZSBzaG9ydCA4LjMgc3R5bGUgZmlsZSBuYW1lLgotICAgICAgICBsdF9wYXRoPWBjZCAiJGx0X3BhdGgiIDI+L2Rldi9udWxsICYmIGNtZCAvL0MgImZvciAlaSBpbiAoIi4iKSBkbyBAZWNobyAlfnNpImAKLSAgICAgICAgc3lzX2xpYl9zZWFyY2hfcGF0aF9zcGVjPSIkc3lzX2xpYl9zZWFyY2hfcGF0aF9zcGVjICRsdF9wYXRoIgotICAgICAgZG9uZQotICAgICAgSUZTPSRsdF9zYXZlX2lmcwotICAgICAgIyBDb252ZXJ0IHRvIE1TWVMgc3R5bGUuCi0gICAgICBzeXNfbGliX3NlYXJjaF9wYXRoX3NwZWM9YCRFQ0hPICIkc3lzX2xpYl9zZWFyY2hfcGF0aF9zcGVjIiB8IHNlZCAtZSAnc3xcXFxcfC98ZycgLWUgJ3N8IFxcKFtbYS16QS1aXV1cXCk6fCAvXFwxfGcnIC1lICdzfF4gfHwnYAotICAgICAgOzsKLSAgICBjeWd3aW4qKQotICAgICAgIyBDb252ZXJ0IHRvIHVuaXggZm9ybSwgdGhlbiB0byBkb3MgZm9ybSwgdGhlbiBiYWNrIHRvIHVuaXggZm9ybQotICAgICAgIyBidXQgdGhpcyB0aW1lIGRvcyBzdHlsZSAobm8gc3BhY2VzISkgc28gdGhhdCB0aGUgdW5peCBmb3JtIGxvb2tzCi0gICAgICAjIGxpa2UgL2N5Z2RyaXZlL2MvUFJPR1JBfjE6L2N5Z2RyLi4uCi0gICAgICBzeXNfbGliX3NlYXJjaF9wYXRoX3NwZWM9YGN5Z3BhdGggLS1wYXRoIC0tdW5peCAiJExJQiJgCi0gICAgICBzeXNfbGliX3NlYXJjaF9wYXRoX3NwZWM9YGN5Z3BhdGggLS1wYXRoIC0tZG9zICIkc3lzX2xpYl9zZWFyY2hfcGF0aF9zcGVjIiAyPi9kZXYvbnVsbGAKLSAgICAgIHN5c19saWJfc2VhcmNoX3BhdGhfc3BlYz1gY3lncGF0aCAtLXBhdGggLS11bml4ICIkc3lzX2xpYl9zZWFyY2hfcGF0aF9zcGVjIiB8ICRTRUQgLWUgInMvJFBBVEhfU0VQQVJBVE9SLyAvZyJgCi0gICAgICA7OwotICAgICopCi0gICAgICBzeXNfbGliX3NlYXJjaF9wYXRoX3NwZWM9IiRMSUIiCi0gICAgICBpZiAkRUNITyAiJHN5c19saWJfc2VhcmNoX3BhdGhfc3BlYyIgfCBbJEdSRVAgJztbYy16Qy1aXTovJyA+L2Rldi9udWxsXTsgdGhlbgotICAgICAgICAjIEl0IGlzIG1vc3QgcHJvYmFibHkgYSBXaW5kb3dzIGZvcm1hdCBQQVRILgotICAgICAgICBzeXNfbGliX3NlYXJjaF9wYXRoX3NwZWM9YCRFQ0hPICIkc3lzX2xpYl9zZWFyY2hfcGF0aF9zcGVjIiB8ICRTRUQgLWUgJ3MvOy8gL2cnYAotICAgICAgZWxzZQotICAgICAgICBzeXNfbGliX3NlYXJjaF9wYXRoX3NwZWM9YCRFQ0hPICIkc3lzX2xpYl9zZWFyY2hfcGF0aF9zcGVjIiB8ICRTRUQgLWUgInMvJFBBVEhfU0VQQVJBVE9SLyAvZyJgCi0gICAgICBmaQotICAgICAgIyBGSVhNRTogZmluZCB0aGUgc2hvcnQgbmFtZSBvciB0aGUgcGF0aCBjb21wb25lbnRzLCBhcyBzcGFjZXMgYXJlCi0gICAgICAjIGNvbW1vbi4gKGUuZy4gIlByb2dyYW0gRmlsZXMiIC0+ICJQUk9HUkF+MSIpCi0gICAgICA7OwotICAgIGVzYWMKLQotICAgICMgRExMIGlzIGluc3RhbGxlZCB0byAkKGxpYmRpcikvLi4vYmluIGJ5IHBvc3RpbnN0YWxsX2NtZHMKLSAgICBwb3N0aW5zdGFsbF9jbWRzPSdiYXNlX2ZpbGU9YGJhc2VuYW1lIFwke2ZpbGV9YH4KLSAgICAgIGRscGF0aD1gJFNIRUxMIDI+JjEgLWMgJ1wnJy4gJGRpci8nXCcnXCR7YmFzZV9maWxlfSdcJydpOyBlY2hvIFwkZGxuYW1lJ1wnJ2B+Ci0gICAgICBkbGRpcj0kZGVzdGRpci9gZGlybmFtZSBcJGRscGF0aGB+Ci0gICAgICB0ZXN0IC1kIFwkZGxkaXIgfHwgbWtkaXIgLXAgXCRkbGRpcn4KLSAgICAgICRpbnN0YWxsX3Byb2cgJGRpci8kZGxuYW1lIFwkZGxkaXIvJGRsbmFtZScKLSAgICBwb3N0dW5pbnN0YWxsX2NtZHM9J2RsZGxsPWAkU0hFTEwgMj4mMSAtYyAnXCcnLiAkZmlsZTsgZWNobyBcJGRsbmFtZSdcJydgfgotICAgICAgZGxwYXRoPSRkaXIvXCRkbGRsbH4KLSAgICAgICAkUk0gXCRkbHBhdGgnCi0gICAgc2hsaWJwYXRoX292ZXJyaWRlc19ydW5wYXRoPXllcwotICAgIGR5bmFtaWNfbGlua2VyPSdXaW4zMiBsaW5rLmV4ZScKLSAgICA7OwotCi0gICopCi0gICAgIyBBc3N1bWUgTVNWQyB3cmFwcGVyCi0gICAgbGlicmFyeV9uYW1lc19zcGVjPScke2xpYm5hbWV9YGVjaG8gJHtyZWxlYXNlfSB8ICRTRUQgLWUgJ3MvW1suXV0vLS9nJ2Ake3ZlcnN1ZmZpeH0ke3NoYXJlZF9leHR9ICRsaWJuYW1lLmxpYicKLSAgICBkeW5hbWljX2xpbmtlcj0nV2luMzIgbGQuZXhlJwotICAgIDs7Ci0gIGVzYWMKLSAgIyBGSVhNRTogZmlyc3Qgd2Ugc2hvdWxkIHNlYXJjaCAuIGFuZCB0aGUgZGlyZWN0b3J5IHRoZSBleGVjdXRhYmxlIGlzIGluCi0gIHNobGlicGF0aF92YXI9UEFUSAotICA7OwotCi1kYXJ3aW4qIHwgcmhhcHNvZHkqKQotICBkeW5hbWljX2xpbmtlcj0iJGhvc3Rfb3MgZHlsZCIKLSAgdmVyc2lvbl90eXBlPWRhcndpbgotICBuZWVkX2xpYl9wcmVmaXg9bm8KLSAgbmVlZF92ZXJzaW9uPW5vCi0gIGxpYnJhcnlfbmFtZXNfc3BlYz0nJHtsaWJuYW1lfSR7cmVsZWFzZX0ke21ham9yfSRzaGFyZWRfZXh0ICR7bGlibmFtZX0kc2hhcmVkX2V4dCcKLSAgc29uYW1lX3NwZWM9JyR7bGlibmFtZX0ke3JlbGVhc2V9JHttYWpvcn0kc2hhcmVkX2V4dCcKLSAgc2hsaWJwYXRoX292ZXJyaWRlc19ydW5wYXRoPXllcwotICBzaGxpYnBhdGhfdmFyPURZTERfTElCUkFSWV9QQVRICi0gIHNocmV4dF9jbWRzPSdgdGVzdCAuJG1vZHVsZSA9IC55ZXMgJiYgZWNobyAuc28gfHwgZWNobyAuZHlsaWJgJwotbTRfaWYoWyQxXSwgW10sWwotICBzeXNfbGliX3NlYXJjaF9wYXRoX3NwZWM9IiRzeXNfbGliX3NlYXJjaF9wYXRoX3NwZWMgL3Vzci9sb2NhbC9saWIiXSkKLSAgc3lzX2xpYl9kbHNlYXJjaF9wYXRoX3NwZWM9Jy91c3IvbG9jYWwvbGliIC9saWIgL3Vzci9saWInCi0gIDs7Ci0KLWRndXgqKQotICB2ZXJzaW9uX3R5cGU9bGludXgKLSAgbmVlZF9saWJfcHJlZml4PW5vCi0gIG5lZWRfdmVyc2lvbj1ubwotICBsaWJyYXJ5X25hbWVzX3NwZWM9JyR7bGlibmFtZX0ke3JlbGVhc2V9JHtzaGFyZWRfZXh0fSR2ZXJzdWZmaXggJHtsaWJuYW1lfSR7cmVsZWFzZX0ke3NoYXJlZF9leHR9JG1ham9yICRsaWJuYW1lJHNoYXJlZF9leHQnCi0gIHNvbmFtZV9zcGVjPScke2xpYm5hbWV9JHtyZWxlYXNlfSR7c2hhcmVkX2V4dH0kbWFqb3InCi0gIHNobGlicGF0aF92YXI9TERfTElCUkFSWV9QQVRICi0gIDs7Ci0KLWZyZWVic2QxKikKLSAgZHluYW1pY19saW5rZXI9bm8KLSAgOzsKLQotZnJlZWJzZCogfCBkcmFnb25mbHkqKQotICAjIERyYWdvbkZseSBkb2VzIG5vdCBoYXZlIGFvdXQuICBXaGVuL2lmIHRoZXkgaW1wbGVtZW50IGEgbmV3Ci0gICMgdmVyc2lvbmluZyBtZWNoYW5pc20sIGFkanVzdCB0aGlzLgotICBpZiB0ZXN0IC14IC91c3IvYmluL29iamZvcm1hdDsgdGhlbgotICAgIG9iamZvcm1hdD1gL3Vzci9iaW4vb2JqZm9ybWF0YAotICBlbHNlCi0gICAgY2FzZSAkaG9zdF9vcyBpbgotICAgIGZyZWVic2RbWzEyM11dKikgb2JqZm9ybWF0PWFvdXQgOzsKLSAgICAqKSBvYmpmb3JtYXQ9ZWxmIDs7Ci0gICAgZXNhYwotICBmaQotICB2ZXJzaW9uX3R5cGU9ZnJlZWJzZC0kb2JqZm9ybWF0Ci0gIGNhc2UgJHZlcnNpb25fdHlwZSBpbgotICAgIGZyZWVic2QtZWxmKikKLSAgICAgIGxpYnJhcnlfbmFtZXNfc3BlYz0nJHtsaWJuYW1lfSR7cmVsZWFzZX0ke3NoYXJlZF9leHR9JHZlcnN1ZmZpeCAke2xpYm5hbWV9JHtyZWxlYXNlfSR7c2hhcmVkX2V4dH0gJGxpYm5hbWUke3NoYXJlZF9leHR9JwotICAgICAgbmVlZF92ZXJzaW9uPW5vCi0gICAgICBuZWVkX2xpYl9wcmVmaXg9bm8KLSAgICAgIDs7Ci0gICAgZnJlZWJzZC0qKQotICAgICAgbGlicmFyeV9uYW1lc19zcGVjPScke2xpYm5hbWV9JHtyZWxlYXNlfSR7c2hhcmVkX2V4dH0kdmVyc3VmZml4ICRsaWJuYW1lJHtzaGFyZWRfZXh0fSR2ZXJzdWZmaXgnCi0gICAgICBuZWVkX3ZlcnNpb249eWVzCi0gICAgICA7OwotICBlc2FjCi0gIHNobGlicGF0aF92YXI9TERfTElCUkFSWV9QQVRICi0gIGNhc2UgJGhvc3Rfb3MgaW4KLSAgZnJlZWJzZDIqKQotICAgIHNobGlicGF0aF9vdmVycmlkZXNfcnVucGF0aD15ZXMKLSAgICA7OwotICBmcmVlYnNkMy5bWzAxXV0qIHwgZnJlZWJzZGVsZjMuW1swMV1dKikKLSAgICBzaGxpYnBhdGhfb3ZlcnJpZGVzX3J1bnBhdGg9eWVzCi0gICAgaGFyZGNvZGVfaW50b19saWJzPXllcwotICAgIDs7Ci0gIGZyZWVic2QzLltbMi05XV0qIHwgZnJlZWJzZGVsZjMuW1syLTldXSogfCBcCi0gIGZyZWVic2Q0LltbMC01XV0gfCBmcmVlYnNkZWxmNC5bWzAtNV1dIHwgZnJlZWJzZDQuMS4xIHwgZnJlZWJzZGVsZjQuMS4xKQotICAgIHNobGlicGF0aF9vdmVycmlkZXNfcnVucGF0aD1ubwotICAgIGhhcmRjb2RlX2ludG9fbGlicz15ZXMKLSAgICA7OwotICAqKSAjIGZyb20gNC42IG9uLCBhbmQgRHJhZ29uRmx5Ci0gICAgc2hsaWJwYXRoX292ZXJyaWRlc19ydW5wYXRoPXllcwotICAgIGhhcmRjb2RlX2ludG9fbGlicz15ZXMKLSAgICA7OwotICBlc2FjCi0gIDs7Ci0KLWdudSopCi0gIHZlcnNpb25fdHlwZT1saW51eAotICBuZWVkX2xpYl9wcmVmaXg9bm8KLSAgbmVlZF92ZXJzaW9uPW5vCi0gIGxpYnJhcnlfbmFtZXNfc3BlYz0nJHtsaWJuYW1lfSR7cmVsZWFzZX0ke3NoYXJlZF9leHR9JHZlcnN1ZmZpeCAke2xpYm5hbWV9JHtyZWxlYXNlfSR7c2hhcmVkX2V4dH0ke21ham9yfSAke2xpYm5hbWV9JHtzaGFyZWRfZXh0fScKLSAgc29uYW1lX3NwZWM9JyR7bGlibmFtZX0ke3JlbGVhc2V9JHtzaGFyZWRfZXh0fSRtYWpvcicKLSAgc2hsaWJwYXRoX3Zhcj1MRF9MSUJSQVJZX1BBVEgKLSAgaGFyZGNvZGVfaW50b19saWJzPXllcwotICA7OwotCi1oYWlrdSopCi0gIHZlcnNpb25fdHlwZT1saW51eAotICBuZWVkX2xpYl9wcmVmaXg9bm8KLSAgbmVlZF92ZXJzaW9uPW5vCi0gIGR5bmFtaWNfbGlua2VyPSIkaG9zdF9vcyBydW50aW1lX2xvYWRlciIKLSAgbGlicmFyeV9uYW1lc19zcGVjPScke2xpYm5hbWV9JHtyZWxlYXNlfSR7c2hhcmVkX2V4dH0kdmVyc3VmZml4ICR7bGlibmFtZX0ke3JlbGVhc2V9JHtzaGFyZWRfZXh0fSR7bWFqb3J9ICR7bGlibmFtZX0ke3NoYXJlZF9leHR9JwotICBzb25hbWVfc3BlYz0nJHtsaWJuYW1lfSR7cmVsZWFzZX0ke3NoYXJlZF9leHR9JG1ham9yJwotICBzaGxpYnBhdGhfdmFyPUxJQlJBUllfUEFUSAotICBzaGxpYnBhdGhfb3ZlcnJpZGVzX3J1bnBhdGg9eWVzCi0gIHN5c19saWJfZGxzZWFyY2hfcGF0aF9zcGVjPScvYm9vdC9ob21lL2NvbmZpZy9saWIgL2Jvb3QvY29tbW9uL2xpYiAvYm9vdC9zeXN0ZW0vbGliJwotICBoYXJkY29kZV9pbnRvX2xpYnM9eWVzCi0gIDs7Ci0KLWhwdXg5KiB8IGhwdXgxMCogfCBocHV4MTEqKQotICAjIEdpdmUgYSBzb25hbWUgY29ycmVzcG9uZGluZyB0byB0aGUgbWFqb3IgdmVyc2lvbiBzbyB0aGF0IGRsZC5zbCByZWZ1c2VzIHRvCi0gICMgbGluayBhZ2FpbnN0IG90aGVyIHZlcnNpb25zLgotICB2ZXJzaW9uX3R5cGU9c3Vub3MKLSAgbmVlZF9saWJfcHJlZml4PW5vCi0gIG5lZWRfdmVyc2lvbj1ubwotICBjYXNlICRob3N0X2NwdSBpbgotICBpYTY0KikKLSAgICBzaHJleHRfY21kcz0nLnNvJwotICAgIGhhcmRjb2RlX2ludG9fbGlicz15ZXMKLSAgICBkeW5hbWljX2xpbmtlcj0iJGhvc3Rfb3MgZGxkLnNvIgotICAgIHNobGlicGF0aF92YXI9TERfTElCUkFSWV9QQVRICi0gICAgc2hsaWJwYXRoX292ZXJyaWRlc19ydW5wYXRoPXllcyAjIFVubGVzcyArbm9lbnZ2YXIgaXMgc3BlY2lmaWVkLgotICAgIGxpYnJhcnlfbmFtZXNfc3BlYz0nJHtsaWJuYW1lfSR7cmVsZWFzZX0ke3NoYXJlZF9leHR9JHZlcnN1ZmZpeCAke2xpYm5hbWV9JHtyZWxlYXNlfSR7c2hhcmVkX2V4dH0kbWFqb3IgJGxpYm5hbWUke3NoYXJlZF9leHR9JwotICAgIHNvbmFtZV9zcGVjPScke2xpYm5hbWV9JHtyZWxlYXNlfSR7c2hhcmVkX2V4dH0kbWFqb3InCi0gICAgaWYgdGVzdCAiWCRIUFVYX0lBNjRfTU9ERSIgPSBYMzI7IHRoZW4KLSAgICAgIHN5c19saWJfc2VhcmNoX3BhdGhfc3BlYz0iL3Vzci9saWIvaHB1eDMyIC91c3IvbG9jYWwvbGliL2hwdXgzMiAvdXNyL2xvY2FsL2xpYiIKLSAgICBlbHNlCi0gICAgICBzeXNfbGliX3NlYXJjaF9wYXRoX3NwZWM9Ii91c3IvbGliL2hwdXg2NCAvdXNyL2xvY2FsL2xpYi9ocHV4NjQiCi0gICAgZmkKLSAgICBzeXNfbGliX2Rsc2VhcmNoX3BhdGhfc3BlYz0kc3lzX2xpYl9zZWFyY2hfcGF0aF9zcGVjCi0gICAgOzsKLSAgaHBwYSo2NCopCi0gICAgc2hyZXh0X2NtZHM9Jy5zbCcKLSAgICBoYXJkY29kZV9pbnRvX2xpYnM9eWVzCi0gICAgZHluYW1pY19saW5rZXI9IiRob3N0X29zIGRsZC5zbCIKLSAgICBzaGxpYnBhdGhfdmFyPUxEX0xJQlJBUllfUEFUSCAjIEhvdyBzaG91bGQgd2UgaGFuZGxlIFNITElCX1BBVEgKLSAgICBzaGxpYnBhdGhfb3ZlcnJpZGVzX3J1bnBhdGg9eWVzICMgVW5sZXNzICtub2VudnZhciBpcyBzcGVjaWZpZWQuCi0gICAgbGlicmFyeV9uYW1lc19zcGVjPScke2xpYm5hbWV9JHtyZWxlYXNlfSR7c2hhcmVkX2V4dH0kdmVyc3VmZml4ICR7bGlibmFtZX0ke3JlbGVhc2V9JHtzaGFyZWRfZXh0fSRtYWpvciAkbGlibmFtZSR7c2hhcmVkX2V4dH0nCi0gICAgc29uYW1lX3NwZWM9JyR7bGlibmFtZX0ke3JlbGVhc2V9JHtzaGFyZWRfZXh0fSRtYWpvcicKLSAgICBzeXNfbGliX3NlYXJjaF9wYXRoX3NwZWM9Ii91c3IvbGliL3BhMjBfNjQgL3Vzci9jY3MvbGliL3BhMjBfNjQiCi0gICAgc3lzX2xpYl9kbHNlYXJjaF9wYXRoX3NwZWM9JHN5c19saWJfc2VhcmNoX3BhdGhfc3BlYwotICAgIDs7Ci0gICopCi0gICAgc2hyZXh0X2NtZHM9Jy5zbCcKLSAgICBkeW5hbWljX2xpbmtlcj0iJGhvc3Rfb3MgZGxkLnNsIgotICAgIHNobGlicGF0aF92YXI9U0hMSUJfUEFUSAotICAgIHNobGlicGF0aF9vdmVycmlkZXNfcnVucGF0aD1ubyAjICtzIGlzIHJlcXVpcmVkIHRvIGVuYWJsZSBTSExJQl9QQVRICi0gICAgbGlicmFyeV9uYW1lc19zcGVjPScke2xpYm5hbWV9JHtyZWxlYXNlfSR7c2hhcmVkX2V4dH0kdmVyc3VmZml4ICR7bGlibmFtZX0ke3JlbGVhc2V9JHtzaGFyZWRfZXh0fSRtYWpvciAkbGlibmFtZSR7c2hhcmVkX2V4dH0nCi0gICAgc29uYW1lX3NwZWM9JyR7bGlibmFtZX0ke3JlbGVhc2V9JHtzaGFyZWRfZXh0fSRtYWpvcicKLSAgICA7OwotICBlc2FjCi0gICMgSFAtVVggcnVucyAqcmVhbGx5KiBzbG93bHkgdW5sZXNzIHNoYXJlZCBsaWJyYXJpZXMgYXJlIG1vZGUgNTU1LCAuLi4KLSAgcG9zdGluc3RhbGxfY21kcz0nY2htb2QgNTU1ICRsaWInCi0gICMgb3IgZmFpbHMgb3V0cmlnaHQsIHNvIG92ZXJyaWRlIGF0b21pY2FsbHk6Ci0gIGluc3RhbGxfb3ZlcnJpZGVfbW9kZT01NTUKLSAgOzsKLQotaW50ZXJpeFtbMy05XV0qKQotICB2ZXJzaW9uX3R5cGU9bGludXgKLSAgbmVlZF9saWJfcHJlZml4PW5vCi0gIG5lZWRfdmVyc2lvbj1ubwotICBsaWJyYXJ5X25hbWVzX3NwZWM9JyR7bGlibmFtZX0ke3JlbGVhc2V9JHtzaGFyZWRfZXh0fSR2ZXJzdWZmaXggJHtsaWJuYW1lfSR7cmVsZWFzZX0ke3NoYXJlZF9leHR9JG1ham9yICR7bGlibmFtZX0ke3NoYXJlZF9leHR9JwotICBzb25hbWVfc3BlYz0nJHtsaWJuYW1lfSR7cmVsZWFzZX0ke3NoYXJlZF9leHR9JG1ham9yJwotICBkeW5hbWljX2xpbmtlcj0nSW50ZXJpeCAzLnggbGQuc28uMSAoUEUsIGxpa2UgRUxGKScKLSAgc2hsaWJwYXRoX3Zhcj1MRF9MSUJSQVJZX1BBVEgKLSAgc2hsaWJwYXRoX292ZXJyaWRlc19ydW5wYXRoPW5vCi0gIGhhcmRjb2RlX2ludG9fbGlicz15ZXMKLSAgOzsKLQotaXJpeDUqIHwgaXJpeDYqIHwgbm9uc3RvcHV4KikKLSAgY2FzZSAkaG9zdF9vcyBpbgotICAgIG5vbnN0b3B1eCopIHZlcnNpb25fdHlwZT1ub25zdG9wdXggOzsKLSAgICAqKQotCWlmIHRlc3QgIiRsdF9jdl9wcm9nX2dudV9sZCIgPSB5ZXM7IHRoZW4KLQkJdmVyc2lvbl90eXBlPWxpbnV4Ci0JZWxzZQotCQl2ZXJzaW9uX3R5cGU9aXJpeAotCWZpIDs7Ci0gIGVzYWMKLSAgbmVlZF9saWJfcHJlZml4PW5vCi0gIG5lZWRfdmVyc2lvbj1ubwotICBzb25hbWVfc3BlYz0nJHtsaWJuYW1lfSR7cmVsZWFzZX0ke3NoYXJlZF9leHR9JG1ham9yJwotICBsaWJyYXJ5X25hbWVzX3NwZWM9JyR7bGlibmFtZX0ke3JlbGVhc2V9JHtzaGFyZWRfZXh0fSR2ZXJzdWZmaXggJHtsaWJuYW1lfSR7cmVsZWFzZX0ke3NoYXJlZF9leHR9JG1ham9yICR7bGlibmFtZX0ke3JlbGVhc2V9JHtzaGFyZWRfZXh0fSAkbGlibmFtZSR7c2hhcmVkX2V4dH0nCi0gIGNhc2UgJGhvc3Rfb3MgaW4KLSAgaXJpeDUqIHwgbm9uc3RvcHV4KikKLSAgICBsaWJzdWZmPSBzaGxpYnN1ZmY9Ci0gICAgOzsKLSAgKikKLSAgICBjYXNlICRMRCBpbiAjIGxpYnRvb2wubTQgd2lsbCBhZGQgb25lIG9mIHRoZXNlIHN3aXRjaGVzIHRvIExECi0gICAgKi0zMnwqIi0zMiAifCotbWVsZjMyYnNtaXB8KiItbWVsZjMyYnNtaXAgIikKLSAgICAgIGxpYnN1ZmY9IHNobGlic3VmZj0gbGlibWFnaWM9MzItYml0OzsKLSAgICAqLW4zMnwqIi1uMzIgInwqLW1lbGYzMmJtaXBuMzJ8KiItbWVsZjMyYm1pcG4zMiAiKQotICAgICAgbGlic3VmZj0zMiBzaGxpYnN1ZmY9TjMyIGxpYm1hZ2ljPU4zMjs7Ci0gICAgKi02NHwqIi02NCAifCotbWVsZjY0Ym1pcHwqIi1tZWxmNjRibWlwICIpCi0gICAgICBsaWJzdWZmPTY0IHNobGlic3VmZj02NCBsaWJtYWdpYz02NC1iaXQ7OwotICAgICopIGxpYnN1ZmY9IHNobGlic3VmZj0gbGlibWFnaWM9bmV2ZXItbWF0Y2g7OwotICAgIGVzYWMKLSAgICA7OwotICBlc2FjCi0gIHNobGlicGF0aF92YXI9TERfTElCUkFSWSR7c2hsaWJzdWZmfV9QQVRICi0gIHNobGlicGF0aF9vdmVycmlkZXNfcnVucGF0aD1ubwotICBzeXNfbGliX3NlYXJjaF9wYXRoX3NwZWM9Ii91c3IvbGliJHtsaWJzdWZmfSAvbGliJHtsaWJzdWZmfSAvdXNyL2xvY2FsL2xpYiR7bGlic3VmZn0iCi0gIHN5c19saWJfZGxzZWFyY2hfcGF0aF9zcGVjPSIvdXNyL2xpYiR7bGlic3VmZn0gL2xpYiR7bGlic3VmZn0iCi0gIGhhcmRjb2RlX2ludG9fbGlicz15ZXMKLSAgOzsKLQotIyBObyBzaGFyZWQgbGliIHN1cHBvcnQgZm9yIExpbnV4IG9sZGxkLCBhb3V0LCBvciBjb2ZmLgotbGludXgqb2xkbGQqIHwgbGludXgqYW91dCogfCBsaW51eCpjb2ZmKikKLSAgZHluYW1pY19saW5rZXI9bm8KLSAgOzsKLQotIyBUaGlzIG11c3QgYmUgTGludXggRUxGLgotbGludXgqIHwgaypic2QqLWdudSB8IGtvcGVuc29sYXJpcyotZ251KQotICB2ZXJzaW9uX3R5cGU9bGludXgKLSAgbmVlZF9saWJfcHJlZml4PW5vCi0gIG5lZWRfdmVyc2lvbj1ubwotICBsaWJyYXJ5X25hbWVzX3NwZWM9JyR7bGlibmFtZX0ke3JlbGVhc2V9JHtzaGFyZWRfZXh0fSR2ZXJzdWZmaXggJHtsaWJuYW1lfSR7cmVsZWFzZX0ke3NoYXJlZF9leHR9JG1ham9yICRsaWJuYW1lJHtzaGFyZWRfZXh0fScKLSAgc29uYW1lX3NwZWM9JyR7bGlibmFtZX0ke3JlbGVhc2V9JHtzaGFyZWRfZXh0fSRtYWpvcicKLSAgZmluaXNoX2NtZHM9J1BBVEg9IlwkUEFUSDovc2JpbiIgbGRjb25maWcgLW4gJGxpYmRpcicKLSAgc2hsaWJwYXRoX3Zhcj1MRF9MSUJSQVJZX1BBVEgKLSAgc2hsaWJwYXRoX292ZXJyaWRlc19ydW5wYXRoPW5vCi0KLSAgIyBTb21lIGJpbnV0aWxzIGxkIGFyZSBwYXRjaGVkIHRvIHNldCBEVF9SVU5QQVRICi0gIEFDX0NBQ0hFX1ZBTChbbHRfY3Zfc2hsaWJwYXRoX292ZXJyaWRlc19ydW5wYXRoXSwKLSAgICBbbHRfY3Zfc2hsaWJwYXRoX292ZXJyaWRlc19ydW5wYXRoPW5vCi0gICAgc2F2ZV9MREZMQUdTPSRMREZMQUdTCi0gICAgc2F2ZV9saWJkaXI9JGxpYmRpcgotICAgIGV2YWwgImxpYmRpcj0vZm9vOyB3bD1cIiRfTFRfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfd2wsICQxKVwiOyBcCi0JIExERkxBR1M9XCJcJExERkxBR1MgJF9MVF9UQUdWQVIoaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYywgJDEpXCIiCi0gICAgQUNfTElOS19JRkVMU0UoW0FDX0xBTkdfUFJPR1JBTShbXSxbXSldLAotICAgICAgW0FTX0lGKFsgKCRPQkpEVU1QIC1wIGNvbmZ0ZXN0JGFjX2V4ZWV4dCkgMj4vZGV2L251bGwgfCBncmVwICJSVU5QQVRILiokbGliZGlyIiA+L2Rldi9udWxsXSwKLQkgW2x0X2N2X3NobGlicGF0aF9vdmVycmlkZXNfcnVucGF0aD15ZXNdKV0pCi0gICAgTERGTEFHUz0kc2F2ZV9MREZMQUdTCi0gICAgbGliZGlyPSRzYXZlX2xpYmRpcgotICAgIF0pCi0gIHNobGlicGF0aF9vdmVycmlkZXNfcnVucGF0aD0kbHRfY3Zfc2hsaWJwYXRoX292ZXJyaWRlc19ydW5wYXRoCi0KLSAgIyBUaGlzIGltcGxpZXMgbm8gZmFzdF9pbnN0YWxsLCB3aGljaCBpcyB1bmFjY2VwdGFibGUuCi0gICMgU29tZSByZXdvcmsgd2lsbCBiZSBuZWVkZWQgdG8gYWxsb3cgZm9yIGZhc3RfaW5zdGFsbAotICAjIGJlZm9yZSB0aGlzIGNhbiBiZSBlbmFibGVkLgotICBoYXJkY29kZV9pbnRvX2xpYnM9eWVzCi0KLSAgIyBBcHBlbmQgbGQuc28uY29uZiBjb250ZW50cyB0byB0aGUgc2VhcmNoIHBhdGgKLSAgaWYgdGVzdCAtZiAvZXRjL2xkLnNvLmNvbmY7IHRoZW4KLSAgICBsdF9sZF9leHRyYT1gYXdrICcvXmluY2x1ZGUgLyB7IHN5c3RlbShzcHJpbnRmKCJjZCAvZXRjOyBjYXQgJXMgMj4vZGV2L251bGwiLCBcWyRdMikpOyBza2lwID0gMTsgfSB7IGlmICghc2tpcCkgcHJpbnQgXFskXTA7IHNraXAgPSAwOyB9JyA8IC9ldGMvbGQuc28uY29uZiB8ICRTRUQgLWUgJ3MvIy4qLy87L15bCSBdKmh3Y2FwWwkgXS9kO3MvWzosCV0vIC9nO3MvPVtePV0qJC8vO3MvPVtePSBdKiAvIC9nO3MvIi8vZzsvXiQvZCcgfCB0ciAnXG4nICcgJ2AKLSAgICBzeXNfbGliX2Rsc2VhcmNoX3BhdGhfc3BlYz0iL2xpYiAvdXNyL2xpYiAkbHRfbGRfZXh0cmEiCi0gIGZpCi0KLSAgIyBXZSB1c2VkIHRvIHRlc3QgZm9yIC9saWIvbGQuc28uMSBhbmQgZGlzYWJsZSBzaGFyZWQgbGlicmFyaWVzIG9uCi0gICMgcG93ZXJwYywgYmVjYXVzZSBNa0xpbnV4IG9ubHkgc3VwcG9ydGVkIHNoYXJlZCBsaWJyYXJpZXMgd2l0aCB0aGUKLSAgIyBHTlUgZHluYW1pYyBsaW5rZXIuICBTaW5jZSB0aGlzIHdhcyBicm9rZW4gd2l0aCBjcm9zcyBjb21waWxlcnMsCi0gICMgbW9zdCBwb3dlcnBjLWxpbnV4IGJveGVzIHN1cHBvcnQgZHluYW1pYyBsaW5raW5nIHRoZXNlIGRheXMgYW5kCi0gICMgcGVvcGxlIGNhbiBhbHdheXMgLS1kaXNhYmxlLXNoYXJlZCwgdGhlIHRlc3Qgd2FzIHJlbW92ZWQsIGFuZCB3ZQotICAjIGFzc3VtZSB0aGUgR05VL0xpbnV4IGR5bmFtaWMgbGlua2VyIGlzIGluIHVzZS4KLSAgZHluYW1pY19saW5rZXI9J0dOVS9MaW51eCBsZC5zbycKLSAgOzsKLQotbmV0YnNkKikKLSAgdmVyc2lvbl90eXBlPXN1bm9zCi0gIG5lZWRfbGliX3ByZWZpeD1ubwotICBuZWVkX3ZlcnNpb249bm8KLSAgaWYgZWNobyBfX0VMRl9fIHwgJENDIC1FIC0gfCAkR1JFUCBfX0VMRl9fID4vZGV2L251bGw7IHRoZW4KLSAgICBsaWJyYXJ5X25hbWVzX3NwZWM9JyR7bGlibmFtZX0ke3JlbGVhc2V9JHtzaGFyZWRfZXh0fSR2ZXJzdWZmaXggJHtsaWJuYW1lfSR7c2hhcmVkX2V4dH0kdmVyc3VmZml4JwotICAgIGZpbmlzaF9jbWRzPSdQQVRIPSJcJFBBVEg6L3NiaW4iIGxkY29uZmlnIC1tICRsaWJkaXInCi0gICAgZHluYW1pY19saW5rZXI9J05ldEJTRCAoYS5vdXQpIGxkLnNvJwotICBlbHNlCi0gICAgbGlicmFyeV9uYW1lc19zcGVjPScke2xpYm5hbWV9JHtyZWxlYXNlfSR7c2hhcmVkX2V4dH0kdmVyc3VmZml4ICR7bGlibmFtZX0ke3JlbGVhc2V9JHtzaGFyZWRfZXh0fSRtYWpvciAke2xpYm5hbWV9JHtzaGFyZWRfZXh0fScKLSAgICBzb25hbWVfc3BlYz0nJHtsaWJuYW1lfSR7cmVsZWFzZX0ke3NoYXJlZF9leHR9JG1ham9yJwotICAgIGR5bmFtaWNfbGlua2VyPSdOZXRCU0QgbGQuZWxmX3NvJwotICBmaQotICBzaGxpYnBhdGhfdmFyPUxEX0xJQlJBUllfUEFUSAotICBzaGxpYnBhdGhfb3ZlcnJpZGVzX3J1bnBhdGg9eWVzCi0gIGhhcmRjb2RlX2ludG9fbGlicz15ZXMKLSAgOzsKLQotbmV3c29zNikKLSAgdmVyc2lvbl90eXBlPWxpbnV4Ci0gIGxpYnJhcnlfbmFtZXNfc3BlYz0nJHtsaWJuYW1lfSR7cmVsZWFzZX0ke3NoYXJlZF9leHR9JHZlcnN1ZmZpeCAke2xpYm5hbWV9JHtyZWxlYXNlfSR7c2hhcmVkX2V4dH0kbWFqb3IgJGxpYm5hbWUke3NoYXJlZF9leHR9JwotICBzaGxpYnBhdGhfdmFyPUxEX0xJQlJBUllfUEFUSAotICBzaGxpYnBhdGhfb3ZlcnJpZGVzX3J1bnBhdGg9eWVzCi0gIDs7Ci0KLSpudG8qIHwgKnFueCopCi0gIHZlcnNpb25fdHlwZT1xbngKLSAgbmVlZF9saWJfcHJlZml4PW5vCi0gIG5lZWRfdmVyc2lvbj1ubwotICBsaWJyYXJ5X25hbWVzX3NwZWM9JyR7bGlibmFtZX0ke3JlbGVhc2V9JHtzaGFyZWRfZXh0fSR2ZXJzdWZmaXggJHtsaWJuYW1lfSR7cmVsZWFzZX0ke3NoYXJlZF9leHR9JG1ham9yICRsaWJuYW1lJHtzaGFyZWRfZXh0fScKLSAgc29uYW1lX3NwZWM9JyR7bGlibmFtZX0ke3JlbGVhc2V9JHtzaGFyZWRfZXh0fSRtYWpvcicKLSAgc2hsaWJwYXRoX3Zhcj1MRF9MSUJSQVJZX1BBVEgKLSAgc2hsaWJwYXRoX292ZXJyaWRlc19ydW5wYXRoPW5vCi0gIGhhcmRjb2RlX2ludG9fbGlicz15ZXMKLSAgZHluYW1pY19saW5rZXI9J2xkcW54LnNvJwotICA7OwotCi1vcGVuYnNkKikKLSAgdmVyc2lvbl90eXBlPXN1bm9zCi0gIHN5c19saWJfZGxzZWFyY2hfcGF0aF9zcGVjPSIvdXNyL2xpYiIKLSAgbmVlZF9saWJfcHJlZml4PW5vCi0gICMgU29tZSBvbGRlciB2ZXJzaW9ucyBvZiBPcGVuQlNEICgzLjMgYXQgbGVhc3QpICpkbyogbmVlZCB2ZXJzaW9uZWQgbGlicy4KLSAgY2FzZSAkaG9zdF9vcyBpbgotICAgIG9wZW5ic2QzLjMgfCBvcGVuYnNkMy4zLiopCW5lZWRfdmVyc2lvbj15ZXMgOzsKLSAgICAqKQkJCQluZWVkX3ZlcnNpb249bm8gIDs7Ci0gIGVzYWMKLSAgbGlicmFyeV9uYW1lc19zcGVjPScke2xpYm5hbWV9JHtyZWxlYXNlfSR7c2hhcmVkX2V4dH0kdmVyc3VmZml4ICR7bGlibmFtZX0ke3NoYXJlZF9leHR9JHZlcnN1ZmZpeCcKLSAgZmluaXNoX2NtZHM9J1BBVEg9IlwkUEFUSDovc2JpbiIgbGRjb25maWcgLW0gJGxpYmRpcicKLSAgc2hsaWJwYXRoX3Zhcj1MRF9MSUJSQVJZX1BBVEgKLSAgaWYgdGVzdCAteiAiYGVjaG8gX19FTEZfXyB8ICRDQyAtRSAtIHwgJEdSRVAgX19FTEZfX2AiIHx8IHRlc3QgIiRob3N0X29zLSRob3N0X2NwdSIgPSAib3BlbmJzZDIuOC1wb3dlcnBjIjsgdGhlbgotICAgIGNhc2UgJGhvc3Rfb3MgaW4KLSAgICAgIG9wZW5ic2QyLltbODldXSB8IG9wZW5ic2QyLltbODldXS4qKQotCXNobGlicGF0aF9vdmVycmlkZXNfcnVucGF0aD1ubwotCTs7Ci0gICAgICAqKQotCXNobGlicGF0aF9vdmVycmlkZXNfcnVucGF0aD15ZXMKLQk7OwotICAgICAgZXNhYwotICBlbHNlCi0gICAgc2hsaWJwYXRoX292ZXJyaWRlc19ydW5wYXRoPXllcwotICBmaQotICA7OwotCi1vczIqKQotICBsaWJuYW1lX3NwZWM9JyRuYW1lJwotICBzaHJleHRfY21kcz0iLmRsbCIKLSAgbmVlZF9saWJfcHJlZml4PW5vCi0gIGxpYnJhcnlfbmFtZXNfc3BlYz0nJGxpYm5hbWUke3NoYXJlZF9leHR9ICRsaWJuYW1lLmEnCi0gIGR5bmFtaWNfbGlua2VyPSdPUy8yIGxkLmV4ZScKLSAgc2hsaWJwYXRoX3Zhcj1MSUJQQVRICi0gIDs7Ci0KLW9zZjMqIHwgb3NmNCogfCBvc2Y1KikKLSAgdmVyc2lvbl90eXBlPW9zZgotICBuZWVkX2xpYl9wcmVmaXg9bm8KLSAgbmVlZF92ZXJzaW9uPW5vCi0gIHNvbmFtZV9zcGVjPScke2xpYm5hbWV9JHtyZWxlYXNlfSR7c2hhcmVkX2V4dH0kbWFqb3InCi0gIGxpYnJhcnlfbmFtZXNfc3BlYz0nJHtsaWJuYW1lfSR7cmVsZWFzZX0ke3NoYXJlZF9leHR9JHZlcnN1ZmZpeCAke2xpYm5hbWV9JHtyZWxlYXNlfSR7c2hhcmVkX2V4dH0kbWFqb3IgJGxpYm5hbWUke3NoYXJlZF9leHR9JwotICBzaGxpYnBhdGhfdmFyPUxEX0xJQlJBUllfUEFUSAotICBzeXNfbGliX3NlYXJjaF9wYXRoX3NwZWM9Ii91c3Ivc2hsaWIgL3Vzci9jY3MvbGliIC91c3IvbGliL2NtcGxycy9jYyAvdXNyL2xpYiAvdXNyL2xvY2FsL2xpYiAvdmFyL3NobGliIgotICBzeXNfbGliX2Rsc2VhcmNoX3BhdGhfc3BlYz0iJHN5c19saWJfc2VhcmNoX3BhdGhfc3BlYyIKLSAgOzsKLQotcmRvcyopCi0gIGR5bmFtaWNfbGlua2VyPW5vCi0gIDs7Ci0KLXNvbGFyaXMqKQotICB2ZXJzaW9uX3R5cGU9bGludXgKLSAgbmVlZF9saWJfcHJlZml4PW5vCi0gIG5lZWRfdmVyc2lvbj1ubwotICBsaWJyYXJ5X25hbWVzX3NwZWM9JyR7bGlibmFtZX0ke3JlbGVhc2V9JHtzaGFyZWRfZXh0fSR2ZXJzdWZmaXggJHtsaWJuYW1lfSR7cmVsZWFzZX0ke3NoYXJlZF9leHR9JG1ham9yICRsaWJuYW1lJHtzaGFyZWRfZXh0fScKLSAgc29uYW1lX3NwZWM9JyR7bGlibmFtZX0ke3JlbGVhc2V9JHtzaGFyZWRfZXh0fSRtYWpvcicKLSAgc2hsaWJwYXRoX3Zhcj1MRF9MSUJSQVJZX1BBVEgKLSAgc2hsaWJwYXRoX292ZXJyaWRlc19ydW5wYXRoPXllcwotICBoYXJkY29kZV9pbnRvX2xpYnM9eWVzCi0gICMgbGRkIGNvbXBsYWlucyB1bmxlc3MgbGlicmFyaWVzIGFyZSBleGVjdXRhYmxlCi0gIHBvc3RpbnN0YWxsX2NtZHM9J2NobW9kICt4ICRsaWInCi0gIDs7Ci0KLXN1bm9zNCopCi0gIHZlcnNpb25fdHlwZT1zdW5vcwotICBsaWJyYXJ5X25hbWVzX3NwZWM9JyR7bGlibmFtZX0ke3JlbGVhc2V9JHtzaGFyZWRfZXh0fSR2ZXJzdWZmaXggJHtsaWJuYW1lfSR7c2hhcmVkX2V4dH0kdmVyc3VmZml4JwotICBmaW5pc2hfY21kcz0nUEFUSD0iXCRQQVRIOi91c3IvZXRjIiBsZGNvbmZpZyAkbGliZGlyJwotICBzaGxpYnBhdGhfdmFyPUxEX0xJQlJBUllfUEFUSAotICBzaGxpYnBhdGhfb3ZlcnJpZGVzX3J1bnBhdGg9eWVzCi0gIGlmIHRlc3QgIiR3aXRoX2dudV9sZCIgPSB5ZXM7IHRoZW4KLSAgICBuZWVkX2xpYl9wcmVmaXg9bm8KLSAgZmkKLSAgbmVlZF92ZXJzaW9uPXllcwotICA7OwotCi1zeXN2NCB8IHN5c3Y0LjMqKQotICB2ZXJzaW9uX3R5cGU9bGludXgKLSAgbGlicmFyeV9uYW1lc19zcGVjPScke2xpYm5hbWV9JHtyZWxlYXNlfSR7c2hhcmVkX2V4dH0kdmVyc3VmZml4ICR7bGlibmFtZX0ke3JlbGVhc2V9JHtzaGFyZWRfZXh0fSRtYWpvciAkbGlibmFtZSR7c2hhcmVkX2V4dH0nCi0gIHNvbmFtZV9zcGVjPScke2xpYm5hbWV9JHtyZWxlYXNlfSR7c2hhcmVkX2V4dH0kbWFqb3InCi0gIHNobGlicGF0aF92YXI9TERfTElCUkFSWV9QQVRICi0gIGNhc2UgJGhvc3RfdmVuZG9yIGluCi0gICAgc25pKQotICAgICAgc2hsaWJwYXRoX292ZXJyaWRlc19ydW5wYXRoPW5vCi0gICAgICBuZWVkX2xpYl9wcmVmaXg9bm8KLSAgICAgIHJ1bnBhdGhfdmFyPUxEX1JVTl9QQVRICi0gICAgICA7OwotICAgIHNpZW1lbnMpCi0gICAgICBuZWVkX2xpYl9wcmVmaXg9bm8KLSAgICAgIDs7Ci0gICAgbW90b3JvbGEpCi0gICAgICBuZWVkX2xpYl9wcmVmaXg9bm8KLSAgICAgIG5lZWRfdmVyc2lvbj1ubwotICAgICAgc2hsaWJwYXRoX292ZXJyaWRlc19ydW5wYXRoPW5vCi0gICAgICBzeXNfbGliX3NlYXJjaF9wYXRoX3NwZWM9Jy9saWIgL3Vzci9saWIgL3Vzci9jY3MvbGliJwotICAgICAgOzsKLSAgZXNhYwotICA7OwotCi1zeXN2NCpNUCopCi0gIGlmIHRlc3QgLWQgL3Vzci9uZWMgO3RoZW4KLSAgICB2ZXJzaW9uX3R5cGU9bGludXgKLSAgICBsaWJyYXJ5X25hbWVzX3NwZWM9JyRsaWJuYW1lJHtzaGFyZWRfZXh0fS4kdmVyc3VmZml4ICRsaWJuYW1lJHtzaGFyZWRfZXh0fS4kbWFqb3IgJGxpYm5hbWUke3NoYXJlZF9leHR9JwotICAgIHNvbmFtZV9zcGVjPSckbGlibmFtZSR7c2hhcmVkX2V4dH0uJG1ham9yJwotICAgIHNobGlicGF0aF92YXI9TERfTElCUkFSWV9QQVRICi0gIGZpCi0gIDs7Ci0KLXN5c3Y1KiB8IHNjbzMuMnY1KiB8IHNjbzV2NiogfCB1bml4d2FyZSogfCBPcGVuVU5JWCogfCBzeXN2NCp1dzIqKQotICB2ZXJzaW9uX3R5cGU9ZnJlZWJzZC1lbGYKLSAgbmVlZF9saWJfcHJlZml4PW5vCi0gIG5lZWRfdmVyc2lvbj1ubwotICBsaWJyYXJ5X25hbWVzX3NwZWM9JyR7bGlibmFtZX0ke3JlbGVhc2V9JHtzaGFyZWRfZXh0fSR2ZXJzdWZmaXggJHtsaWJuYW1lfSR7cmVsZWFzZX0ke3NoYXJlZF9leHR9ICRsaWJuYW1lJHtzaGFyZWRfZXh0fScKLSAgc29uYW1lX3NwZWM9JyR7bGlibmFtZX0ke3JlbGVhc2V9JHtzaGFyZWRfZXh0fSRtYWpvcicKLSAgc2hsaWJwYXRoX3Zhcj1MRF9MSUJSQVJZX1BBVEgKLSAgc2hsaWJwYXRoX292ZXJyaWRlc19ydW5wYXRoPXllcwotICBoYXJkY29kZV9pbnRvX2xpYnM9eWVzCi0gIGlmIHRlc3QgIiR3aXRoX2dudV9sZCIgPSB5ZXM7IHRoZW4KLSAgICBzeXNfbGliX3NlYXJjaF9wYXRoX3NwZWM9Jy91c3IvbG9jYWwvbGliIC91c3IvZ251L2xpYiAvdXNyL2Njcy9saWIgL3Vzci9saWIgL2xpYicKLSAgZWxzZQotICAgIHN5c19saWJfc2VhcmNoX3BhdGhfc3BlYz0nL3Vzci9jY3MvbGliIC91c3IvbGliJwotICAgIGNhc2UgJGhvc3Rfb3MgaW4KLSAgICAgIHNjbzMuMnY1KikKLSAgICAgICAgc3lzX2xpYl9zZWFyY2hfcGF0aF9zcGVjPSIkc3lzX2xpYl9zZWFyY2hfcGF0aF9zcGVjIC9saWIiCi0JOzsKLSAgICBlc2FjCi0gIGZpCi0gIHN5c19saWJfZGxzZWFyY2hfcGF0aF9zcGVjPScvdXNyL2xpYicKLSAgOzsKLQotdHBmKikKLSAgIyBUUEYgaXMgYSBjcm9zcy10YXJnZXQgb25seS4gIFByZWZlcnJlZCBjcm9zcy1ob3N0ID0gR05VL0xpbnV4LgotICB2ZXJzaW9uX3R5cGU9bGludXgKLSAgbmVlZF9saWJfcHJlZml4PW5vCi0gIG5lZWRfdmVyc2lvbj1ubwotICBsaWJyYXJ5X25hbWVzX3NwZWM9JyR7bGlibmFtZX0ke3JlbGVhc2V9JHtzaGFyZWRfZXh0fSR2ZXJzdWZmaXggJHtsaWJuYW1lfSR7cmVsZWFzZX0ke3NoYXJlZF9leHR9JG1ham9yICRsaWJuYW1lJHtzaGFyZWRfZXh0fScKLSAgc2hsaWJwYXRoX3Zhcj1MRF9MSUJSQVJZX1BBVEgKLSAgc2hsaWJwYXRoX292ZXJyaWRlc19ydW5wYXRoPW5vCi0gIGhhcmRjb2RlX2ludG9fbGlicz15ZXMKLSAgOzsKLQotdXRzNCopCi0gIHZlcnNpb25fdHlwZT1saW51eAotICBsaWJyYXJ5X25hbWVzX3NwZWM9JyR7bGlibmFtZX0ke3JlbGVhc2V9JHtzaGFyZWRfZXh0fSR2ZXJzdWZmaXggJHtsaWJuYW1lfSR7cmVsZWFzZX0ke3NoYXJlZF9leHR9JG1ham9yICRsaWJuYW1lJHtzaGFyZWRfZXh0fScKLSAgc29uYW1lX3NwZWM9JyR7bGlibmFtZX0ke3JlbGVhc2V9JHtzaGFyZWRfZXh0fSRtYWpvcicKLSAgc2hsaWJwYXRoX3Zhcj1MRF9MSUJSQVJZX1BBVEgKLSAgOzsKLQotKikKLSAgZHluYW1pY19saW5rZXI9bm8KLSAgOzsKLWVzYWMKLUFDX01TR19SRVNVTFQoWyRkeW5hbWljX2xpbmtlcl0pCi10ZXN0ICIkZHluYW1pY19saW5rZXIiID0gbm8gJiYgY2FuX2J1aWxkX3NoYXJlZD1ubwotCi12YXJpYWJsZXNfc2F2ZWRfZm9yX3JlbGluaz0iUEFUSCAkc2hsaWJwYXRoX3ZhciAkcnVucGF0aF92YXIiCi1pZiB0ZXN0ICIkR0NDIiA9IHllczsgdGhlbgotICB2YXJpYWJsZXNfc2F2ZWRfZm9yX3JlbGluaz0iJHZhcmlhYmxlc19zYXZlZF9mb3JfcmVsaW5rIEdDQ19FWEVDX1BSRUZJWCBDT01QSUxFUl9QQVRIIExJQlJBUllfUEFUSCIKLWZpCi0KLWlmIHRlc3QgIiR7bHRfY3Zfc3lzX2xpYl9zZWFyY2hfcGF0aF9zcGVjK3NldH0iID0gc2V0OyB0aGVuCi0gIHN5c19saWJfc2VhcmNoX3BhdGhfc3BlYz0iJGx0X2N2X3N5c19saWJfc2VhcmNoX3BhdGhfc3BlYyIKLWZpCi1pZiB0ZXN0ICIke2x0X2N2X3N5c19saWJfZGxzZWFyY2hfcGF0aF9zcGVjK3NldH0iID0gc2V0OyB0aGVuCi0gIHN5c19saWJfZGxzZWFyY2hfcGF0aF9zcGVjPSIkbHRfY3Zfc3lzX2xpYl9kbHNlYXJjaF9wYXRoX3NwZWMiCi1maQotCi1fTFRfREVDTChbXSwgW3ZhcmlhYmxlc19zYXZlZF9mb3JfcmVsaW5rXSwgWzFdLAotICAgIFtWYXJpYWJsZXMgd2hvc2UgdmFsdWVzIHNob3VsZCBiZSBzYXZlZCBpbiBsaWJ0b29sIHdyYXBwZXIgc2NyaXB0cyBhbmQKLSAgICByZXN0b3JlZCBhdCBsaW5rIHRpbWVdKQotX0xUX0RFQ0woW10sIFtuZWVkX2xpYl9wcmVmaXhdLCBbMF0sCi0gICAgW0RvIHdlIG5lZWQgdGhlICJsaWIiIHByZWZpeCBmb3IgbW9kdWxlcz9dKQotX0xUX0RFQ0woW10sIFtuZWVkX3ZlcnNpb25dLCBbMF0sIFtEbyB3ZSBuZWVkIGEgdmVyc2lvbiBmb3IgbGlicmFyaWVzP10pCi1fTFRfREVDTChbXSwgW3ZlcnNpb25fdHlwZV0sIFswXSwgW0xpYnJhcnkgdmVyc2lvbmluZyB0eXBlXSkKLV9MVF9ERUNMKFtdLCBbcnVucGF0aF92YXJdLCBbMF0sICBbU2hhcmVkIGxpYnJhcnkgcnVudGltZSBwYXRoIHZhcmlhYmxlXSkKLV9MVF9ERUNMKFtdLCBbc2hsaWJwYXRoX3Zhcl0sIFswXSxbU2hhcmVkIGxpYnJhcnkgcGF0aCB2YXJpYWJsZV0pCi1fTFRfREVDTChbXSwgW3NobGlicGF0aF9vdmVycmlkZXNfcnVucGF0aF0sIFswXSwKLSAgICBbSXMgc2hsaWJwYXRoIHNlYXJjaGVkIGJlZm9yZSB0aGUgaGFyZC1jb2RlZCBsaWJyYXJ5IHNlYXJjaCBwYXRoP10pCi1fTFRfREVDTChbXSwgW2xpYm5hbWVfc3BlY10sIFsxXSwgW0Zvcm1hdCBvZiBsaWJyYXJ5IG5hbWUgcHJlZml4XSkKLV9MVF9ERUNMKFtdLCBbbGlicmFyeV9uYW1lc19zcGVjXSwgWzFdLAotICAgIFtbTGlzdCBvZiBhcmNoaXZlIG5hbWVzLiAgRmlyc3QgbmFtZSBpcyB0aGUgcmVhbCBvbmUsIHRoZSByZXN0IGFyZSBsaW5rcy4KLSAgICBUaGUgbGFzdCBuYW1lIGlzIHRoZSBvbmUgdGhhdCB0aGUgbGlua2VyIGZpbmRzIHdpdGggLWxOQU1FXV0pCi1fTFRfREVDTChbXSwgW3NvbmFtZV9zcGVjXSwgWzFdLAotICAgIFtbVGhlIGNvZGVkIG5hbWUgb2YgdGhlIGxpYnJhcnksIGlmIGRpZmZlcmVudCBmcm9tIHRoZSByZWFsIG5hbWVdXSkKLV9MVF9ERUNMKFtdLCBbaW5zdGFsbF9vdmVycmlkZV9tb2RlXSwgWzFdLAotICAgIFtQZXJtaXNzaW9uIG1vZGUgb3ZlcnJpZGUgZm9yIGluc3RhbGxhdGlvbiBvZiBzaGFyZWQgbGlicmFyaWVzXSkKLV9MVF9ERUNMKFtdLCBbcG9zdGluc3RhbGxfY21kc10sIFsyXSwKLSAgICBbQ29tbWFuZCB0byB1c2UgYWZ0ZXIgaW5zdGFsbGF0aW9uIG9mIGEgc2hhcmVkIGFyY2hpdmVdKQotX0xUX0RFQ0woW10sIFtwb3N0dW5pbnN0YWxsX2NtZHNdLCBbMl0sCi0gICAgW0NvbW1hbmQgdG8gdXNlIGFmdGVyIHVuaW5zdGFsbGF0aW9uIG9mIGEgc2hhcmVkIGFyY2hpdmVdKQotX0xUX0RFQ0woW10sIFtmaW5pc2hfY21kc10sIFsyXSwKLSAgICBbQ29tbWFuZHMgdXNlZCB0byBmaW5pc2ggYSBsaWJ0b29sIGxpYnJhcnkgaW5zdGFsbGF0aW9uIGluIGEgZGlyZWN0b3J5XSkKLV9MVF9ERUNMKFtdLCBbZmluaXNoX2V2YWxdLCBbMV0sCi0gICAgW1tBcyAiZmluaXNoX2NtZHMiLCBleGNlcHQgYSBzaW5nbGUgc2NyaXB0IGZyYWdtZW50IHRvIGJlIGV2YWxlZCBidXQKLSAgICBub3Qgc2hvd25dXSkKLV9MVF9ERUNMKFtdLCBbaGFyZGNvZGVfaW50b19saWJzXSwgWzBdLAotICAgIFtXaGV0aGVyIHdlIHNob3VsZCBoYXJkY29kZSBsaWJyYXJ5IHBhdGhzIGludG8gbGlicmFyaWVzXSkKLV9MVF9ERUNMKFtdLCBbc3lzX2xpYl9zZWFyY2hfcGF0aF9zcGVjXSwgWzJdLAotICAgIFtDb21waWxlLXRpbWUgc3lzdGVtIHNlYXJjaCBwYXRoIGZvciBsaWJyYXJpZXNdKQotX0xUX0RFQ0woW10sIFtzeXNfbGliX2Rsc2VhcmNoX3BhdGhfc3BlY10sIFsyXSwKLSAgICBbUnVuLXRpbWUgc3lzdGVtIHNlYXJjaCBwYXRoIGZvciBsaWJyYXJpZXNdKQotXSkjIF9MVF9TWVNfRFlOQU1JQ19MSU5LRVIKLQotCi0jIF9MVF9QQVRIX1RPT0xfUFJFRklYKFRPT0wpCi0jIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0jIGZpbmQgYSBmaWxlIHByb2dyYW0gd2hpY2ggY2FuIHJlY29nbml6ZSBzaGFyZWQgbGlicmFyeQotQUNfREVGVU4oW19MVF9QQVRIX1RPT0xfUFJFRklYXSwKLVttNF9yZXF1aXJlKFtfTFRfREVDTF9FR1JFUF0pZG5sCi1BQ19NU0dfQ0hFQ0tJTkcoW2ZvciAkMV0pCi1BQ19DQUNIRV9WQUwobHRfY3ZfcGF0aF9NQUdJQ19DTUQsCi1bY2FzZSAkTUFHSUNfQ01EIGluCi1bW1xcLypdIHwgID86W1xcL10qXSkKLSAgbHRfY3ZfcGF0aF9NQUdJQ19DTUQ9IiRNQUdJQ19DTUQiICMgTGV0IHRoZSB1c2VyIG92ZXJyaWRlIHRoZSB0ZXN0IHdpdGggYSBwYXRoLgotICA7OwotKikKLSAgbHRfc2F2ZV9NQUdJQ19DTUQ9IiRNQUdJQ19DTUQiCi0gIGx0X3NhdmVfaWZzPSIkSUZTIjsgSUZTPSRQQVRIX1NFUEFSQVRPUgotZG5sICRhY19kdW1teSBmb3JjZXMgc3BsaXR0aW5nIG9uIGNvbnN0YW50IHVzZXItc3VwcGxpZWQgcGF0aHMuCi1kbmwgUE9TSVguMiB3b3JkIHNwbGl0dGluZyBpcyBkb25lIG9ubHkgb24gdGhlIG91dHB1dCBvZiB3b3JkIGV4cGFuc2lvbnMsCi1kbmwgbm90IGV2ZXJ5IHdvcmQuICBUaGlzIGNsb3NlcyBhIGxvbmdzdGFuZGluZyBzaCBzZWN1cml0eSBob2xlLgotICBhY19kdW1teT0ibTRfaWYoWyQyXSwgLCAkUEFUSCwgWyQyXSkiCi0gIGZvciBhY19kaXIgaW4gJGFjX2R1bW15OyBkbwotICAgIElGUz0iJGx0X3NhdmVfaWZzIgotICAgIHRlc3QgLXogIiRhY19kaXIiICYmIGFjX2Rpcj0uCi0gICAgaWYgdGVzdCAtZiAkYWNfZGlyLyQxOyB0aGVuCi0gICAgICBsdF9jdl9wYXRoX01BR0lDX0NNRD0iJGFjX2Rpci8kMSIKLSAgICAgIGlmIHRlc3QgLW4gIiRmaWxlX21hZ2ljX3Rlc3RfZmlsZSI7IHRoZW4KLQljYXNlICRkZXBsaWJzX2NoZWNrX21ldGhvZCBpbgotCSJmaWxlX21hZ2ljICIqKQotCSAgZmlsZV9tYWdpY19yZWdleD1gZXhwciAiJGRlcGxpYnNfY2hlY2tfbWV0aG9kIiA6ICJmaWxlX21hZ2ljIFwoLipcKSJgCi0JICBNQUdJQ19DTUQ9IiRsdF9jdl9wYXRoX01BR0lDX0NNRCIKLQkgIGlmIGV2YWwgJGZpbGVfbWFnaWNfY21kIFwkZmlsZV9tYWdpY190ZXN0X2ZpbGUgMj4gL2Rldi9udWxsIHwKLQkgICAgJEVHUkVQICIkZmlsZV9tYWdpY19yZWdleCIgPiAvZGV2L251bGw7IHRoZW4KLQkgICAgOgotCSAgZWxzZQotCSAgICBjYXQgPDxfTFRfRU9GIDE+JjIKLQotKioqIFdhcm5pbmc6IHRoZSBjb21tYW5kIGxpYnRvb2wgdXNlcyB0byBkZXRlY3Qgc2hhcmVkIGxpYnJhcmllcywKLSoqKiAkZmlsZV9tYWdpY19jbWQsIHByb2R1Y2VzIG91dHB1dCB0aGF0IGxpYnRvb2wgY2Fubm90IHJlY29nbml6ZS4KLSoqKiBUaGUgcmVzdWx0IGlzIHRoYXQgbGlidG9vbCBtYXkgZmFpbCB0byByZWNvZ25pemUgc2hhcmVkIGxpYnJhcmllcwotKioqIGFzIHN1Y2guICBUaGlzIHdpbGwgYWZmZWN0IHRoZSBjcmVhdGlvbiBvZiBsaWJ0b29sIGxpYnJhcmllcyB0aGF0Ci0qKiogZGVwZW5kIG9uIHNoYXJlZCBsaWJyYXJpZXMsIGJ1dCBwcm9ncmFtcyBsaW5rZWQgd2l0aCBzdWNoIGxpYnRvb2wKLSoqKiBsaWJyYXJpZXMgd2lsbCB3b3JrIHJlZ2FyZGxlc3Mgb2YgdGhpcyBwcm9ibGVtLiAgTmV2ZXJ0aGVsZXNzLCB5b3UKLSoqKiBtYXkgd2FudCB0byByZXBvcnQgdGhlIHByb2JsZW0gdG8geW91ciBzeXN0ZW0gbWFuYWdlciBhbmQvb3IgdG8KLSoqKiBidWctbGlidG9vbEBnbnUub3JnCi0KLV9MVF9FT0YKLQkgIGZpIDs7Ci0JZXNhYwotICAgICAgZmkKLSAgICAgIGJyZWFrCi0gICAgZmkKLSAgZG9uZQotICBJRlM9IiRsdF9zYXZlX2lmcyIKLSAgTUFHSUNfQ01EPSIkbHRfc2F2ZV9NQUdJQ19DTUQiCi0gIDs7Ci1lc2FjXSkKLU1BR0lDX0NNRD0iJGx0X2N2X3BhdGhfTUFHSUNfQ01EIgotaWYgdGVzdCAtbiAiJE1BR0lDX0NNRCI7IHRoZW4KLSAgQUNfTVNHX1JFU1VMVCgkTUFHSUNfQ01EKQotZWxzZQotICBBQ19NU0dfUkVTVUxUKG5vKQotZmkKLV9MVF9ERUNMKFtdLCBbTUFHSUNfQ01EXSwgWzBdLAotCSBbVXNlZCB0byBleGFtaW5lIGxpYnJhcmllcyB3aGVuIGZpbGVfbWFnaWNfY21kIGJlZ2lucyB3aXRoICJmaWxlIl0pZG5sCi1dKSMgX0xUX1BBVEhfVE9PTF9QUkVGSVgKLQotIyBPbGQgbmFtZToKLUFVX0FMSUFTKFtBQ19QQVRIX1RPT0xfUFJFRklYXSwgW19MVF9QQVRIX1RPT0xfUFJFRklYXSkKLWRubCBhY2xvY2FsLTEuNCBiYWNrd2FyZHMgY29tcGF0aWJpbGl0eToKLWRubCBBQ19ERUZVTihbQUNfUEFUSF9UT09MX1BSRUZJWF0sIFtdKQotCi0KLSMgX0xUX1BBVEhfTUFHSUMKLSMgLS0tLS0tLS0tLS0tLS0KLSMgZmluZCBhIGZpbGUgcHJvZ3JhbSB3aGljaCBjYW4gcmVjb2duaXplIGEgc2hhcmVkIGxpYnJhcnkKLW00X2RlZnVuKFtfTFRfUEFUSF9NQUdJQ10sCi1bX0xUX1BBVEhfVE9PTF9QUkVGSVgoJHthY190b29sX3ByZWZpeH1maWxlLCAvdXNyL2JpbiRQQVRIX1NFUEFSQVRPUiRQQVRIKQotaWYgdGVzdCAteiAiJGx0X2N2X3BhdGhfTUFHSUNfQ01EIjsgdGhlbgotICBpZiB0ZXN0IC1uICIkYWNfdG9vbF9wcmVmaXgiOyB0aGVuCi0gICAgX0xUX1BBVEhfVE9PTF9QUkVGSVgoZmlsZSwgL3Vzci9iaW4kUEFUSF9TRVBBUkFUT1IkUEFUSCkKLSAgZWxzZQotICAgIE1BR0lDX0NNRD06Ci0gIGZpCi1maQotXSkjIF9MVF9QQVRIX01BR0lDCi0KLQotIyBMVF9QQVRIX0xECi0jIC0tLS0tLS0tLS0KLSMgZmluZCB0aGUgcGF0aG5hbWUgdG8gdGhlIEdOVSBvciBub24tR05VIGxpbmtlcgotQUNfREVGVU4oW0xUX1BBVEhfTERdLAotW0FDX1JFUVVJUkUoW0FDX1BST0dfQ0NdKWRubAotQUNfUkVRVUlSRShbQUNfQ0FOT05JQ0FMX0hPU1RdKWRubAotQUNfUkVRVUlSRShbQUNfQ0FOT05JQ0FMX0JVSUxEXSlkbmwKLW00X3JlcXVpcmUoW19MVF9ERUNMX1NFRF0pZG5sCi1tNF9yZXF1aXJlKFtfTFRfREVDTF9FR1JFUF0pZG5sCi1tNF9yZXF1aXJlKFtfTFRfUFJPR19FQ0hPX0JBQ0tTTEFTSF0pZG5sCi0KLUFDX0FSR19XSVRIKFtnbnUtbGRdLAotICAgIFtBU19IRUxQX1NUUklORyhbLS13aXRoLWdudS1sZF0sCi0JW2Fzc3VtZSB0aGUgQyBjb21waWxlciB1c2VzIEdOVSBsZCBAPDpAZGVmYXVsdD1ub0A6PkBdKV0sCi0gICAgW3Rlc3QgIiR3aXRodmFsIiA9IG5vIHx8IHdpdGhfZ251X2xkPXllc10sCi0gICAgW3dpdGhfZ251X2xkPW5vXSlkbmwKLQotYWNfcHJvZz1sZAotaWYgdGVzdCAiJEdDQyIgPSB5ZXM7IHRoZW4KLSAgIyBDaGVjayBpZiBnY2MgLXByaW50LXByb2ctbmFtZT1sZCBnaXZlcyBhIHBhdGguCi0gIEFDX01TR19DSEVDS0lORyhbZm9yIGxkIHVzZWQgYnkgJENDXSkKLSAgY2FzZSAkaG9zdCBpbgotICAqLSotbWluZ3cqKQotICAgICMgZ2NjIGxlYXZlcyBhIHRyYWlsaW5nIGNhcnJpYWdlIHJldHVybiB3aGljaCB1cHNldHMgbWluZ3cKLSAgICBhY19wcm9nPWAoJENDIC1wcmludC1wcm9nLW5hbWU9bGQpIDI+JjUgfCB0ciAtZCAnXDAxNSdgIDs7Ci0gICopCi0gICAgYWNfcHJvZz1gKCRDQyAtcHJpbnQtcHJvZy1uYW1lPWxkKSAyPiY1YCA7OwotICBlc2FjCi0gIGNhc2UgJGFjX3Byb2cgaW4KLSAgICAjIEFjY2VwdCBhYnNvbHV0ZSBwYXRocy4KLSAgICBbW1xcL11dKiB8ID86W1tcXC9dXSopCi0gICAgICByZV9kaXJlbHQ9Jy9bW14vXV1bW14vXV0qL1wuXC4vJwotICAgICAgIyBDYW5vbmljYWxpemUgdGhlIHBhdGhuYW1lIG9mIGxkCi0gICAgICBhY19wcm9nPWAkRUNITyAiJGFjX3Byb2cifCAkU0VEICdzJVxcXFwlLyVnJ2AKLSAgICAgIHdoaWxlICRFQ0hPICIkYWNfcHJvZyIgfCAkR1JFUCAiJHJlX2RpcmVsdCIgPiAvZGV2L251bGwgMj4mMTsgZG8KLQlhY19wcm9nPWAkRUNITyAkYWNfcHJvZ3wgJFNFRCAicyUkcmVfZGlyZWx0JS8lImAKLSAgICAgIGRvbmUKLSAgICAgIHRlc3QgLXogIiRMRCIgJiYgTEQ9IiRhY19wcm9nIgotICAgICAgOzsKLSAgIiIpCi0gICAgIyBJZiBpdCBmYWlscywgdGhlbiBwcmV0ZW5kIHdlIGFyZW4ndCB1c2luZyBHQ0MuCi0gICAgYWNfcHJvZz1sZAotICAgIDs7Ci0gICopCi0gICAgIyBJZiBpdCBpcyByZWxhdGl2ZSwgdGhlbiBzZWFyY2ggZm9yIHRoZSBmaXJzdCBsZCBpbiBQQVRILgotICAgIHdpdGhfZ251X2xkPXVua25vd24KLSAgICA7OwotICBlc2FjCi1lbGlmIHRlc3QgIiR3aXRoX2dudV9sZCIgPSB5ZXM7IHRoZW4KLSAgQUNfTVNHX0NIRUNLSU5HKFtmb3IgR05VIGxkXSkKLWVsc2UKLSAgQUNfTVNHX0NIRUNLSU5HKFtmb3Igbm9uLUdOVSBsZF0pCi1maQotQUNfQ0FDSEVfVkFMKGx0X2N2X3BhdGhfTEQsCi1baWYgdGVzdCAteiAiJExEIjsgdGhlbgotICBsdF9zYXZlX2lmcz0iJElGUyI7IElGUz0kUEFUSF9TRVBBUkFUT1IKLSAgZm9yIGFjX2RpciBpbiAkUEFUSDsgZG8KLSAgICBJRlM9IiRsdF9zYXZlX2lmcyIKLSAgICB0ZXN0IC16ICIkYWNfZGlyIiAmJiBhY19kaXI9LgotICAgIGlmIHRlc3QgLWYgIiRhY19kaXIvJGFjX3Byb2ciIHx8IHRlc3QgLWYgIiRhY19kaXIvJGFjX3Byb2ckYWNfZXhlZXh0IjsgdGhlbgotICAgICAgbHRfY3ZfcGF0aF9MRD0iJGFjX2Rpci8kYWNfcHJvZyIKLSAgICAgICMgQ2hlY2sgdG8gc2VlIGlmIHRoZSBwcm9ncmFtIGlzIEdOVSBsZC4gIEknZCByYXRoZXIgdXNlIC0tdmVyc2lvbiwKLSAgICAgICMgYnV0IGFwcGFyZW50bHkgc29tZSB2YXJpYW50cyBvZiBHTlUgbGQgb25seSBhY2NlcHQgLXYuCi0gICAgICAjIEJyZWFrIG9ubHkgaWYgaXQgd2FzIHRoZSBHTlUvbm9uLUdOVSBsZCB0aGF0IHdlIHByZWZlci4KLSAgICAgIGNhc2UgYCIkbHRfY3ZfcGF0aF9MRCIgLXYgMj4mMSA8L2Rldi9udWxsYCBpbgotICAgICAgKkdOVSogfCAqJ3dpdGggQkZEJyopCi0JdGVzdCAiJHdpdGhfZ251X2xkIiAhPSBubyAmJiBicmVhawotCTs7Ci0gICAgICAqKQotCXRlc3QgIiR3aXRoX2dudV9sZCIgIT0geWVzICYmIGJyZWFrCi0JOzsKLSAgICAgIGVzYWMKLSAgICBmaQotICBkb25lCi0gIElGUz0iJGx0X3NhdmVfaWZzIgotZWxzZQotICBsdF9jdl9wYXRoX0xEPSIkTEQiICMgTGV0IHRoZSB1c2VyIG92ZXJyaWRlIHRoZSB0ZXN0IHdpdGggYSBwYXRoLgotZmldKQotTEQ9IiRsdF9jdl9wYXRoX0xEIgotaWYgdGVzdCAtbiAiJExEIjsgdGhlbgotICBBQ19NU0dfUkVTVUxUKCRMRCkKLWVsc2UKLSAgQUNfTVNHX1JFU1VMVChubykKLWZpCi10ZXN0IC16ICIkTEQiICYmIEFDX01TR19FUlJPUihbbm8gYWNjZXB0YWJsZSBsZCBmb3VuZCBpbiBcJFBBVEhdKQotX0xUX1BBVEhfTERfR05VCi1BQ19TVUJTVChbTERdKQotCi1fTFRfVEFHREVDTChbXSwgW0xEXSwgWzFdLCBbVGhlIGxpbmtlciB1c2VkIHRvIGJ1aWxkIGxpYnJhcmllc10pCi1dKSMgTFRfUEFUSF9MRAotCi0jIE9sZCBuYW1lczoKLUFVX0FMSUFTKFtBTV9QUk9HX0xEXSwgW0xUX1BBVEhfTERdKQotQVVfQUxJQVMoW0FDX1BST0dfTERdLCBbTFRfUEFUSF9MRF0pCi1kbmwgYWNsb2NhbC0xLjQgYmFja3dhcmRzIGNvbXBhdGliaWxpdHk6Ci1kbmwgQUNfREVGVU4oW0FNX1BST0dfTERdLCBbXSkKLWRubCBBQ19ERUZVTihbQUNfUFJPR19MRF0sIFtdKQotCi0KLSMgX0xUX1BBVEhfTERfR05VCi0jLSAtLS0tLS0tLS0tLS0tLQotbTRfZGVmdW4oW19MVF9QQVRIX0xEX0dOVV0sCi1bQUNfQ0FDSEVfQ0hFQ0soW2lmIHRoZSBsaW5rZXIgKCRMRCkgaXMgR05VIGxkXSwgbHRfY3ZfcHJvZ19nbnVfbGQsCi1bIyBJJ2QgcmF0aGVyIHVzZSAtLXZlcnNpb24gaGVyZSwgYnV0IGFwcGFyZW50bHkgc29tZSBHTlUgbGRzIG9ubHkgYWNjZXB0IC12LgotY2FzZSBgJExEIC12IDI+JjEgPC9kZXYvbnVsbGAgaW4KLSpHTlUqIHwgKid3aXRoIEJGRCcqKQotICBsdF9jdl9wcm9nX2dudV9sZD15ZXMKLSAgOzsKLSopCi0gIGx0X2N2X3Byb2dfZ251X2xkPW5vCi0gIDs7Ci1lc2FjXSkKLXdpdGhfZ251X2xkPSRsdF9jdl9wcm9nX2dudV9sZAotXSkjIF9MVF9QQVRIX0xEX0dOVQotCi0KLSMgX0xUX0NNRF9SRUxPQUQKLSMgLS0tLS0tLS0tLS0tLS0KLSMgZmluZCByZWxvYWQgZmxhZyBmb3IgbGlua2VyCi0jICAgLS0gUE9SVE1FIFNvbWUgbGlua2VycyBtYXkgbmVlZCBhIGRpZmZlcmVudCByZWxvYWQgZmxhZy4KLW00X2RlZnVuKFtfTFRfQ01EX1JFTE9BRF0sCi1bQUNfQ0FDSEVfQ0hFQ0soW2ZvciAkTEQgb3B0aW9uIHRvIHJlbG9hZCBvYmplY3QgZmlsZXNdLAotICBsdF9jdl9sZF9yZWxvYWRfZmxhZywKLSAgW2x0X2N2X2xkX3JlbG9hZF9mbGFnPSctciddKQotcmVsb2FkX2ZsYWc9JGx0X2N2X2xkX3JlbG9hZF9mbGFnCi1jYXNlICRyZWxvYWRfZmxhZyBpbgotIiIgfCAiICIqKSA7OwotKikgcmVsb2FkX2ZsYWc9IiAkcmVsb2FkX2ZsYWciIDs7Ci1lc2FjCi1yZWxvYWRfY21kcz0nJExEJHJlbG9hZF9mbGFnIC1vICRvdXRwdXQkcmVsb2FkX29ianMnCi1jYXNlICRob3N0X29zIGluCi0gIGN5Z3dpbiogfCBtaW5ndyogfCBwdzMyKiB8IGNlZ2NjKikKLSAgICBpZiB0ZXN0ICIkR0NDIiAhPSB5ZXM7IHRoZW4KLSAgICAgIHJlbG9hZF9jbWRzPWZhbHNlCi0gICAgZmkKLSAgICA7OwotICBkYXJ3aW4qKQotICAgIGlmIHRlc3QgIiRHQ0MiID0geWVzOyB0aGVuCi0gICAgICByZWxvYWRfY21kcz0nJExUQ0MgJExUQ0ZMQUdTIC1ub3N0ZGxpYiAke3dsfS1yIC1vICRvdXRwdXQkcmVsb2FkX29ianMnCi0gICAgZWxzZQotICAgICAgcmVsb2FkX2NtZHM9JyRMRCRyZWxvYWRfZmxhZyAtbyAkb3V0cHV0JHJlbG9hZF9vYmpzJwotICAgIGZpCi0gICAgOzsKLWVzYWMKLV9MVF9UQUdERUNMKFtdLCBbcmVsb2FkX2ZsYWddLCBbMV0sIFtIb3cgdG8gY3JlYXRlIHJlbG9hZGFibGUgb2JqZWN0IGZpbGVzXSlkbmwKLV9MVF9UQUdERUNMKFtdLCBbcmVsb2FkX2NtZHNdLCBbMl0pZG5sCi1dKSMgX0xUX0NNRF9SRUxPQUQKLQotCi0jIF9MVF9DSEVDS19NQUdJQ19NRVRIT0QKLSMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotIyBob3cgdG8gY2hlY2sgZm9yIGxpYnJhcnkgZGVwZW5kZW5jaWVzCi0jICAtLSBQT1JUTUUgZmlsbCBpbiB3aXRoIHRoZSBkeW5hbWljIGxpYnJhcnkgY2hhcmFjdGVyaXN0aWNzCi1tNF9kZWZ1bihbX0xUX0NIRUNLX01BR0lDX01FVEhPRF0sCi1bbTRfcmVxdWlyZShbX0xUX0RFQ0xfRUdSRVBdKQotbTRfcmVxdWlyZShbX0xUX0RFQ0xfT0JKRFVNUF0pCi1BQ19DQUNIRV9DSEVDSyhbaG93IHRvIHJlY29nbml6ZSBkZXBlbmRlbnQgbGlicmFyaWVzXSwKLWx0X2N2X2RlcGxpYnNfY2hlY2tfbWV0aG9kLAotW2x0X2N2X2ZpbGVfbWFnaWNfY21kPSckTUFHSUNfQ01EJwotbHRfY3ZfZmlsZV9tYWdpY190ZXN0X2ZpbGU9Ci1sdF9jdl9kZXBsaWJzX2NoZWNrX21ldGhvZD0ndW5rbm93bicKLSMgTmVlZCB0byBzZXQgdGhlIHByZWNlZGluZyB2YXJpYWJsZSBvbiBhbGwgcGxhdGZvcm1zIHRoYXQgc3VwcG9ydAotIyBpbnRlcmxpYnJhcnkgZGVwZW5kZW5jaWVzLgotIyAnbm9uZScgLS0gZGVwZW5kZW5jaWVzIG5vdCBzdXBwb3J0ZWQuCi0jIGB1bmtub3duJyAtLSBzYW1lIGFzIG5vbmUsIGJ1dCBkb2N1bWVudHMgdGhhdCB3ZSByZWFsbHkgZG9uJ3Qga25vdy4KLSMgJ3Bhc3NfYWxsJyAtLSBhbGwgZGVwZW5kZW5jaWVzIHBhc3NlZCB3aXRoIG5vIGNoZWNrcy4KLSMgJ3Rlc3RfY29tcGlsZScgLS0gY2hlY2sgYnkgbWFraW5nIHRlc3QgcHJvZ3JhbS4KLSMgJ2ZpbGVfbWFnaWMgW1tyZWdleF1dJyAtLSBjaGVjayBieSBsb29raW5nIGZvciBmaWxlcyBpbiBsaWJyYXJ5IHBhdGgKLSMgd2hpY2ggcmVzcG9uZHMgdG8gdGhlICRmaWxlX21hZ2ljX2NtZCB3aXRoIGEgZ2l2ZW4gZXh0ZW5kZWQgcmVnZXguCi0jIElmIHlvdSBoYXZlIGBmaWxlJyBvciBlcXVpdmFsZW50IG9uIHlvdXIgc3lzdGVtIGFuZCB5b3UncmUgbm90IHN1cmUKLSMgd2hldGhlciBgcGFzc19hbGwnIHdpbGwgKmFsd2F5cyogd29yaywgeW91IHByb2JhYmx5IHdhbnQgdGhpcyBvbmUuCi0KLWNhc2UgJGhvc3Rfb3MgaW4KLWFpeFtbNC05XV0qKQotICBsdF9jdl9kZXBsaWJzX2NoZWNrX21ldGhvZD1wYXNzX2FsbAotICA7OwotCi1iZW9zKikKLSAgbHRfY3ZfZGVwbGlic19jaGVja19tZXRob2Q9cGFzc19hbGwKLSAgOzsKLQotYnNkaVtbNDVdXSopCi0gIGx0X2N2X2RlcGxpYnNfY2hlY2tfbWV0aG9kPSdmaWxlX21hZ2ljIEVMRiBbWzAtOV1dW1swLTldXSotYml0IFtbTUxdXVNCIChzaGFyZWQgb2JqZWN0fGR5bmFtaWMgbGliKScKLSAgbHRfY3ZfZmlsZV9tYWdpY19jbWQ9Jy91c3IvYmluL2ZpbGUgLUwnCi0gIGx0X2N2X2ZpbGVfbWFnaWNfdGVzdF9maWxlPS9zaGxpYi9saWJjLnNvCi0gIDs7Ci0KLWN5Z3dpbiopCi0gICMgZnVuY193aW4zMl9saWJpZCBpcyBhIHNoZWxsIGZ1bmN0aW9uIGRlZmluZWQgaW4gbHRtYWluLnNoCi0gIGx0X2N2X2RlcGxpYnNfY2hlY2tfbWV0aG9kPSdmaWxlX21hZ2ljIF54ODYgYXJjaGl2ZSBpbXBvcnR8Xng4NiBETEwnCi0gIGx0X2N2X2ZpbGVfbWFnaWNfY21kPSdmdW5jX3dpbjMyX2xpYmlkJwotICA7OwotCi1taW5ndyogfCBwdzMyKikKLSAgIyBCYXNlIE1TWVMvTWluR1cgZG8gbm90IHByb3ZpZGUgdGhlICdmaWxlJyBjb21tYW5kIG5lZWRlZCBieQotICAjIGZ1bmNfd2luMzJfbGliaWQgc2hlbGwgZnVuY3Rpb24sIHNvIHVzZSBhIHdlYWtlciB0ZXN0IGJhc2VkIG9uICdvYmpkdW1wJywKLSAgIyB1bmxlc3Mgd2UgZmluZCAnZmlsZScsIGZvciBleGFtcGxlIGJlY2F1c2Ugd2UgYXJlIGNyb3NzLWNvbXBpbGluZy4KLSAgIyBmdW5jX3dpbjMyX2xpYmlkIGFzc3VtZXMgQlNEIG5tLCBzbyBkaXNhbGxvdyBpdCBpZiB1c2luZyBNUyBkdW1wYmluLgotICBpZiAoIHRlc3QgIiRsdF9jdl9ubV9pbnRlcmZhY2UiID0gIkJTRCBubSIgJiYgZmlsZSAvICkgPi9kZXYvbnVsbCAyPiYxOyB0aGVuCi0gICAgbHRfY3ZfZGVwbGlic19jaGVja19tZXRob2Q9J2ZpbGVfbWFnaWMgXng4NiBhcmNoaXZlIGltcG9ydHxeeDg2IERMTCcKLSAgICBsdF9jdl9maWxlX21hZ2ljX2NtZD0nZnVuY193aW4zMl9saWJpZCcKLSAgZWxzZQotICAgICMgS2VlcCB0aGlzIHBhdHRlcm4gaW4gc3luYyB3aXRoIHRoZSBvbmUgaW4gZnVuY193aW4zMl9saWJpZC4KLSAgICBsdF9jdl9kZXBsaWJzX2NoZWNrX21ldGhvZD0nZmlsZV9tYWdpYyBmaWxlIGZvcm1hdCAocGVpKi1pMzg2KC4qYXJjaGl0ZWN0dXJlOiBpMzg2KT98cGUtYXJtLXdpbmNlfHBlLXg4Ni02NCknCi0gICAgbHRfY3ZfZmlsZV9tYWdpY19jbWQ9JyRPQkpEVU1QIC1mJwotICBmaQotICA7OwotCi1jZWdjYyopCi0gICMgdXNlIHRoZSB3ZWFrZXIgdGVzdCBiYXNlZCBvbiAnb2JqZHVtcCcuIFNlZSBtaW5ndyouCi0gIGx0X2N2X2RlcGxpYnNfY2hlY2tfbWV0aG9kPSdmaWxlX21hZ2ljIGZpbGUgZm9ybWF0IHBlLWFybS0uKmxpdHRsZSguKmFyY2hpdGVjdHVyZTogYXJtKT8nCi0gIGx0X2N2X2ZpbGVfbWFnaWNfY21kPSckT0JKRFVNUCAtZicKLSAgOzsKLQotZGFyd2luKiB8IHJoYXBzb2R5KikKLSAgbHRfY3ZfZGVwbGlic19jaGVja19tZXRob2Q9cGFzc19hbGwKLSAgOzsKLQotZnJlZWJzZCogfCBkcmFnb25mbHkqKQotICBpZiBlY2hvIF9fRUxGX18gfCAkQ0MgLUUgLSB8ICRHUkVQIF9fRUxGX18gPiAvZGV2L251bGw7IHRoZW4KLSAgICBjYXNlICRob3N0X2NwdSBpbgotICAgIGkqODYgKQotICAgICAgIyBOb3Qgc3VyZSB3aGV0aGVyIHRoZSBwcmVzZW5jZSBvZiBPcGVuQlNEIGhlcmUgd2FzIGEgbWlzdGFrZS4KLSAgICAgICMgTGV0J3MgYWNjZXB0IGJvdGggb2YgdGhlbSB1bnRpbCB0aGlzIGlzIGNsZWFyZWQgdXAuCi0gICAgICBsdF9jdl9kZXBsaWJzX2NoZWNrX21ldGhvZD0nZmlsZV9tYWdpYyAoRnJlZUJTRHxPcGVuQlNEfERyYWdvbkZseSkvaVtbMy05XV04NiAoY29tcGFjdCApP2RlbWFuZCBwYWdlZCBzaGFyZWQgbGlicmFyeScKLSAgICAgIGx0X2N2X2ZpbGVfbWFnaWNfY21kPS91c3IvYmluL2ZpbGUKLSAgICAgIGx0X2N2X2ZpbGVfbWFnaWNfdGVzdF9maWxlPWBlY2hvIC91c3IvbGliL2xpYmMuc28uKmAKLSAgICAgIDs7Ci0gICAgZXNhYwotICBlbHNlCi0gICAgbHRfY3ZfZGVwbGlic19jaGVja19tZXRob2Q9cGFzc19hbGwKLSAgZmkKLSAgOzsKLQotZ251KikKLSAgbHRfY3ZfZGVwbGlic19jaGVja19tZXRob2Q9cGFzc19hbGwKLSAgOzsKLQotaGFpa3UqKQotICBsdF9jdl9kZXBsaWJzX2NoZWNrX21ldGhvZD1wYXNzX2FsbAotICA7OwotCi1ocHV4MTAuMjAqIHwgaHB1eDExKikKLSAgbHRfY3ZfZmlsZV9tYWdpY19jbWQ9L3Vzci9iaW4vZmlsZQotICBjYXNlICRob3N0X2NwdSBpbgotICBpYTY0KikKLSAgICBsdF9jdl9kZXBsaWJzX2NoZWNrX21ldGhvZD0nZmlsZV9tYWdpYyAoc1tbMC05XV1bWzAtOV1dW1swLTldXXxFTEYtW1swLTldXVtbMC05XV0pIHNoYXJlZCBvYmplY3QgZmlsZSAtIElBNjQnCi0gICAgbHRfY3ZfZmlsZV9tYWdpY190ZXN0X2ZpbGU9L3Vzci9saWIvaHB1eDMyL2xpYmMuc28KLSAgICA7OwotICBocHBhKjY0KikKLSAgICBbbHRfY3ZfZGVwbGlic19jaGVja19tZXRob2Q9J2ZpbGVfbWFnaWMgKHNbMC05XVswLTldWzAtOV18RUxGWyAtXVswLTldWzAtOV0pKC1iaXQpPyggW0xNXVNCKT8gc2hhcmVkIG9iamVjdCggZmlsZSk/WywgLV0qIFBBLVJJU0MgWzAtOV1cLlswLTldJ10KLSAgICBsdF9jdl9maWxlX21hZ2ljX3Rlc3RfZmlsZT0vdXNyL2xpYi9wYTIwXzY0L2xpYmMuc2wKLSAgICA7OwotICAqKQotICAgIGx0X2N2X2RlcGxpYnNfY2hlY2tfbWV0aG9kPSdmaWxlX21hZ2ljIChzW1swLTldXVtbMC05XV1bWzAtOV1dfFBBLVJJU0NbWzAtOV1dXC5bWzAtOV1dKSBzaGFyZWQgbGlicmFyeScKLSAgICBsdF9jdl9maWxlX21hZ2ljX3Rlc3RfZmlsZT0vdXNyL2xpYi9saWJjLnNsCi0gICAgOzsKLSAgZXNhYwotICA7OwotCi1pbnRlcml4W1szLTldXSopCi0gICMgUElDIGNvZGUgaXMgYnJva2VuIG9uIEludGVyaXggMy54LCB0aGF0J3Mgd2h5IHxcLmEgbm90IHxfcGljXC5hIGhlcmUKLSAgbHRfY3ZfZGVwbGlic19jaGVja19tZXRob2Q9J21hdGNoX3BhdHRlcm4gL2xpYltbXi9dXSsoXC5zb3xcLmEpJCcKLSAgOzsKLQotaXJpeDUqIHwgaXJpeDYqIHwgbm9uc3RvcHV4KikKLSAgY2FzZSAkTEQgaW4KLSAgKi0zMnwqIi0zMiAiKSBsaWJtYWdpYz0zMi1iaXQ7OwotICAqLW4zMnwqIi1uMzIgIikgbGlibWFnaWM9TjMyOzsKLSAgKi02NHwqIi02NCAiKSBsaWJtYWdpYz02NC1iaXQ7OwotICAqKSBsaWJtYWdpYz1uZXZlci1tYXRjaDs7Ci0gIGVzYWMKLSAgbHRfY3ZfZGVwbGlic19jaGVja19tZXRob2Q9cGFzc19hbGwKLSAgOzsKLQotIyBUaGlzIG11c3QgYmUgTGludXggRUxGLgotbGludXgqIHwgaypic2QqLWdudSB8IGtvcGVuc29sYXJpcyotZ251KQotICBsdF9jdl9kZXBsaWJzX2NoZWNrX21ldGhvZD1wYXNzX2FsbAotICA7OwotCi1uZXRic2QqKQotICBpZiBlY2hvIF9fRUxGX18gfCAkQ0MgLUUgLSB8ICRHUkVQIF9fRUxGX18gPiAvZGV2L251bGw7IHRoZW4KLSAgICBsdF9jdl9kZXBsaWJzX2NoZWNrX21ldGhvZD0nbWF0Y2hfcGF0dGVybiAvbGliW1teL11dKyhcLnNvXC5bWzAtOV1dK1wuW1swLTldXSt8X3BpY1wuYSkkJwotICBlbHNlCi0gICAgbHRfY3ZfZGVwbGlic19jaGVja19tZXRob2Q9J21hdGNoX3BhdHRlcm4gL2xpYltbXi9dXSsoXC5zb3xfcGljXC5hKSQnCi0gIGZpCi0gIDs7Ci0KLW5ld29zNiopCi0gIGx0X2N2X2RlcGxpYnNfY2hlY2tfbWV0aG9kPSdmaWxlX21hZ2ljIEVMRiBbWzAtOV1dW1swLTldXSotYml0IFtbTUxdXVNCIChleGVjdXRhYmxlfGR5bmFtaWMgbGliKScKLSAgbHRfY3ZfZmlsZV9tYWdpY19jbWQ9L3Vzci9iaW4vZmlsZQotICBsdF9jdl9maWxlX21hZ2ljX3Rlc3RfZmlsZT0vdXNyL2xpYi9saWJubHMuc28KLSAgOzsKLQotKm50byogfCAqcW54KikKLSAgbHRfY3ZfZGVwbGlic19jaGVja19tZXRob2Q9cGFzc19hbGwKLSAgOzsKLQotb3BlbmJzZCopCi0gIGlmIHRlc3QgLXogImBlY2hvIF9fRUxGX18gfCAkQ0MgLUUgLSB8ICRHUkVQIF9fRUxGX19gIiB8fCB0ZXN0ICIkaG9zdF9vcy0kaG9zdF9jcHUiID0gIm9wZW5ic2QyLjgtcG93ZXJwYyI7IHRoZW4KLSAgICBsdF9jdl9kZXBsaWJzX2NoZWNrX21ldGhvZD0nbWF0Y2hfcGF0dGVybiAvbGliW1teL11dKyhcLnNvXC5bWzAtOV1dK1wuW1swLTldXSt8XC5zb3xfcGljXC5hKSQnCi0gIGVsc2UKLSAgICBsdF9jdl9kZXBsaWJzX2NoZWNrX21ldGhvZD0nbWF0Y2hfcGF0dGVybiAvbGliW1teL11dKyhcLnNvXC5bWzAtOV1dK1wuW1swLTldXSt8X3BpY1wuYSkkJwotICBmaQotICA7OwotCi1vc2YzKiB8IG9zZjQqIHwgb3NmNSopCi0gIGx0X2N2X2RlcGxpYnNfY2hlY2tfbWV0aG9kPXBhc3NfYWxsCi0gIDs7Ci0KLXJkb3MqKQotICBsdF9jdl9kZXBsaWJzX2NoZWNrX21ldGhvZD1wYXNzX2FsbAotICA7OwotCi1zb2xhcmlzKikKLSAgbHRfY3ZfZGVwbGlic19jaGVja19tZXRob2Q9cGFzc19hbGwKLSAgOzsKLQotc3lzdjUqIHwgc2NvMy4ydjUqIHwgc2NvNXY2KiB8IHVuaXh3YXJlKiB8IE9wZW5VTklYKiB8IHN5c3Y0KnV3MiopCi0gIGx0X2N2X2RlcGxpYnNfY2hlY2tfbWV0aG9kPXBhc3NfYWxsCi0gIDs7Ci0KLXN5c3Y0IHwgc3lzdjQuMyopCi0gIGNhc2UgJGhvc3RfdmVuZG9yIGluCi0gIG1vdG9yb2xhKQotICAgIGx0X2N2X2RlcGxpYnNfY2hlY2tfbWV0aG9kPSdmaWxlX21hZ2ljIEVMRiBbWzAtOV1dW1swLTldXSotYml0IFtbTUxdXVNCIChzaGFyZWQgb2JqZWN0fGR5bmFtaWMgbGliKSBNW1swLTldXVtbMC05XV0qIFZlcnNpb24gW1swLTldXScKLSAgICBsdF9jdl9maWxlX21hZ2ljX3Rlc3RfZmlsZT1gZWNobyAvdXNyL2xpYi9saWJjLnNvKmAKLSAgICA7OwotICBuY3IpCi0gICAgbHRfY3ZfZGVwbGlic19jaGVja19tZXRob2Q9cGFzc19hbGwKLSAgICA7OwotICBzZXF1ZW50KQotICAgIGx0X2N2X2ZpbGVfbWFnaWNfY21kPScvYmluL2ZpbGUnCi0gICAgbHRfY3ZfZGVwbGlic19jaGVja19tZXRob2Q9J2ZpbGVfbWFnaWMgRUxGIFtbMC05XV1bWzAtOV1dKi1iaXQgW1tMTV1dU0IgKHNoYXJlZCBvYmplY3R8ZHluYW1pYyBsaWIgKScKLSAgICA7OwotICBzbmkpCi0gICAgbHRfY3ZfZmlsZV9tYWdpY19jbWQ9Jy9iaW4vZmlsZScKLSAgICBsdF9jdl9kZXBsaWJzX2NoZWNrX21ldGhvZD0iZmlsZV9tYWdpYyBFTEYgW1swLTldXVtbMC05XV0qLWJpdCBbW0xNXV1TQiBkeW5hbWljIGxpYiIKLSAgICBsdF9jdl9maWxlX21hZ2ljX3Rlc3RfZmlsZT0vbGliL2xpYmMuc28KLSAgICA7OwotICBzaWVtZW5zKQotICAgIGx0X2N2X2RlcGxpYnNfY2hlY2tfbWV0aG9kPXBhc3NfYWxsCi0gICAgOzsKLSAgcGMpCi0gICAgbHRfY3ZfZGVwbGlic19jaGVja19tZXRob2Q9cGFzc19hbGwKLSAgICA7OwotICBlc2FjCi0gIDs7Ci0KLXRwZiopCi0gIGx0X2N2X2RlcGxpYnNfY2hlY2tfbWV0aG9kPXBhc3NfYWxsCi0gIDs7Ci1lc2FjCi1dKQotCi1maWxlX21hZ2ljX2dsb2I9Ci13YW50X25vY2FzZWdsb2I9bm8KLWlmIHRlc3QgIiRidWlsZCIgPSAiJGhvc3QiOyB0aGVuCi0gIGNhc2UgJGhvc3Rfb3MgaW4KLSAgbWluZ3cqIHwgcHczMiopCi0gICAgaWYgKCBzaG9wdCB8IGdyZXAgbm9jYXNlZ2xvYiApID4vZGV2L251bGwgMj4mMTsgdGhlbgotICAgICAgd2FudF9ub2Nhc2VnbG9iPXllcwotICAgIGVsc2UKLSAgICAgIGZpbGVfbWFnaWNfZ2xvYj1gZWNobyBhQWJCY0NkRGVFZkZnR2hIaUlqSmtLbExtTW5Ob09wUHFRclJzU3RUdVV2VndXeFh5WXpaIHwgJFNFRCAtZSAicy9cKC4uXCkvc1wvW1tcMV1dXC9bW1wxXV1cL2c7L2ciYAotICAgIGZpCi0gICAgOzsKLSAgZXNhYwotZmkKLQotZmlsZV9tYWdpY19jbWQ9JGx0X2N2X2ZpbGVfbWFnaWNfY21kCi1kZXBsaWJzX2NoZWNrX21ldGhvZD0kbHRfY3ZfZGVwbGlic19jaGVja19tZXRob2QKLXRlc3QgLXogIiRkZXBsaWJzX2NoZWNrX21ldGhvZCIgJiYgZGVwbGlic19jaGVja19tZXRob2Q9dW5rbm93bgotCi1fTFRfREVDTChbXSwgW2RlcGxpYnNfY2hlY2tfbWV0aG9kXSwgWzFdLAotICAgIFtNZXRob2QgdG8gY2hlY2sgd2hldGhlciBkZXBlbmRlbnQgbGlicmFyaWVzIGFyZSBzaGFyZWQgb2JqZWN0c10pCi1fTFRfREVDTChbXSwgW2ZpbGVfbWFnaWNfY21kXSwgWzFdLAotICAgIFtDb21tYW5kIHRvIHVzZSB3aGVuIGRlcGxpYnNfY2hlY2tfbWV0aG9kID0gImZpbGVfbWFnaWMiXSkKLV9MVF9ERUNMKFtdLCBbZmlsZV9tYWdpY19nbG9iXSwgWzFdLAotICAgIFtIb3cgdG8gZmluZCBwb3RlbnRpYWwgZmlsZXMgd2hlbiBkZXBsaWJzX2NoZWNrX21ldGhvZCA9ICJmaWxlX21hZ2ljIl0pCi1fTFRfREVDTChbXSwgW3dhbnRfbm9jYXNlZ2xvYl0sIFsxXSwKLSAgICBbRmluZCBwb3RlbnRpYWwgZmlsZXMgdXNpbmcgbm9jYXNlZ2xvYiB3aGVuIGRlcGxpYnNfY2hlY2tfbWV0aG9kID0gImZpbGVfbWFnaWMiXSkKLV0pIyBfTFRfQ0hFQ0tfTUFHSUNfTUVUSE9ECi0KLQotIyBMVF9QQVRIX05NCi0jIC0tLS0tLS0tLS0KLSMgZmluZCB0aGUgcGF0aG5hbWUgdG8gYSBCU0QtIG9yIE1TLWNvbXBhdGlibGUgbmFtZSBsaXN0ZXIKLUFDX0RFRlVOKFtMVF9QQVRIX05NXSwKLVtBQ19SRVFVSVJFKFtBQ19QUk9HX0NDXSlkbmwKLUFDX0NBQ0hFX0NIRUNLKFtmb3IgQlNELSBvciBNUy1jb21wYXRpYmxlIG5hbWUgbGlzdGVyIChubSldLCBsdF9jdl9wYXRoX05NLAotW2lmIHRlc3QgLW4gIiROTSI7IHRoZW4KLSAgIyBMZXQgdGhlIHVzZXIgb3ZlcnJpZGUgdGhlIHRlc3QuCi0gIGx0X2N2X3BhdGhfTk09IiROTSIKLWVsc2UKLSAgbHRfbm1fdG9fY2hlY2s9IiR7YWNfdG9vbF9wcmVmaXh9bm0iCi0gIGlmIHRlc3QgLW4gIiRhY190b29sX3ByZWZpeCIgJiYgdGVzdCAiJGJ1aWxkIiA9ICIkaG9zdCI7IHRoZW4KLSAgICBsdF9ubV90b19jaGVjaz0iJGx0X25tX3RvX2NoZWNrIG5tIgotICBmaQotICBmb3IgbHRfdG1wX25tIGluICRsdF9ubV90b19jaGVjazsgZG8KLSAgICBsdF9zYXZlX2lmcz0iJElGUyI7IElGUz0kUEFUSF9TRVBBUkFUT1IKLSAgICBmb3IgYWNfZGlyIGluICRQQVRIIC91c3IvY2NzL2Jpbi9lbGYgL3Vzci9jY3MvYmluIC91c3IvdWNiIC9iaW47IGRvCi0gICAgICBJRlM9IiRsdF9zYXZlX2lmcyIKLSAgICAgIHRlc3QgLXogIiRhY19kaXIiICYmIGFjX2Rpcj0uCi0gICAgICB0bXBfbm09IiRhY19kaXIvJGx0X3RtcF9ubSIKLSAgICAgIGlmIHRlc3QgLWYgIiR0bXBfbm0iIHx8IHRlc3QgLWYgIiR0bXBfbm0kYWNfZXhlZXh0IiA7IHRoZW4KLQkjIENoZWNrIHRvIHNlZSBpZiB0aGUgbm0gYWNjZXB0cyBhIEJTRC1jb21wYXQgZmxhZy4KLQkjIEFkZGluZyB0aGUgYHNlZCAxcScgcHJldmVudHMgZmFsc2UgcG9zaXRpdmVzIG9uIEhQLVVYLCB3aGljaCBzYXlzOgotCSMgICBubTogdW5rbm93biBvcHRpb24gIkIiIGlnbm9yZWQKLQkjIFRydTY0J3Mgbm0gY29tcGxhaW5zIHRoYXQgL2Rldi9udWxsIGlzIGFuIGludmFsaWQgb2JqZWN0IGZpbGUKLQljYXNlIGAiJHRtcF9ubSIgLUIgL2Rldi9udWxsIDI+JjEgfCBzZWQgJzFxJ2AgaW4KLQkqL2Rldi9udWxsKiB8IConSW52YWxpZCBmaWxlIG9yIG9iamVjdCB0eXBlJyopCi0JICBsdF9jdl9wYXRoX05NPSIkdG1wX25tIC1CIgotCSAgYnJlYWsKLQkgIDs7Ci0JKikKLQkgIGNhc2UgYCIkdG1wX25tIiAtcCAvZGV2L251bGwgMj4mMSB8IHNlZCAnMXEnYCBpbgotCSAgKi9kZXYvbnVsbCopCi0JICAgIGx0X2N2X3BhdGhfTk09IiR0bXBfbm0gLXAiCi0JICAgIGJyZWFrCi0JICAgIDs7Ci0JICAqKQotCSAgICBsdF9jdl9wYXRoX05NPSR7bHRfY3ZfcGF0aF9OTT0iJHRtcF9ubSJ9ICMga2VlcCB0aGUgZmlyc3QgbWF0Y2gsIGJ1dAotCSAgICBjb250aW51ZSAjIHNvIHRoYXQgd2UgY2FuIHRyeSB0byBmaW5kIG9uZSB0aGF0IHN1cHBvcnRzIEJTRCBmbGFncwotCSAgICA7OwotCSAgZXNhYwotCSAgOzsKLQllc2FjCi0gICAgICBmaQotICAgIGRvbmUKLSAgICBJRlM9IiRsdF9zYXZlX2lmcyIKLSAgZG9uZQotICA6ICR7bHRfY3ZfcGF0aF9OTT1ub30KLWZpXSkKLWlmIHRlc3QgIiRsdF9jdl9wYXRoX05NIiAhPSAibm8iOyB0aGVuCi0gIE5NPSIkbHRfY3ZfcGF0aF9OTSIKLWVsc2UKLSAgIyBEaWRuJ3QgZmluZCBhbnkgQlNEIGNvbXBhdGlibGUgbmFtZSBsaXN0ZXIsIGxvb2sgZm9yIGR1bXBiaW4uCi0gIGlmIHRlc3QgLW4gIiREVU1QQklOIjsgdGhlbiA6Ci0gICAgIyBMZXQgdGhlIHVzZXIgb3ZlcnJpZGUgdGhlIHRlc3QuCi0gIGVsc2UKLSAgICBBQ19DSEVDS19UT09MUyhEVU1QQklOLCBbZHVtcGJpbiAibGluayAtZHVtcCJdLCA6KQotICAgIGNhc2UgYCREVU1QQklOIC1zeW1ib2xzIC9kZXYvbnVsbCAyPiYxIHwgc2VkICcxcSdgIGluCi0gICAgKkNPRkYqKQotICAgICAgRFVNUEJJTj0iJERVTVBCSU4gLXN5bWJvbHMiCi0gICAgICA7OwotICAgICopCi0gICAgICBEVU1QQklOPToKLSAgICAgIDs7Ci0gICAgZXNhYwotICBmaQotICBBQ19TVUJTVChbRFVNUEJJTl0pCi0gIGlmIHRlc3QgIiREVU1QQklOIiAhPSAiOiI7IHRoZW4KLSAgICBOTT0iJERVTVBCSU4iCi0gIGZpCi1maQotdGVzdCAteiAiJE5NIiAmJiBOTT1ubQotQUNfU1VCU1QoW05NXSkKLV9MVF9ERUNMKFtdLCBbTk1dLCBbMV0sIFtBIEJTRC0gb3IgTVMtY29tcGF0aWJsZSBuYW1lIGxpc3Rlcl0pZG5sCi0KLUFDX0NBQ0hFX0NIRUNLKFt0aGUgbmFtZSBsaXN0ZXIgKCROTSkgaW50ZXJmYWNlXSwgW2x0X2N2X25tX2ludGVyZmFjZV0sCi0gIFtsdF9jdl9ubV9pbnRlcmZhY2U9IkJTRCBubSIKLSAgZWNobyAiaW50IHNvbWVfdmFyaWFibGUgPSAwOyIgPiBjb25mdGVzdC4kYWNfZXh0Ci0gIChldmFsIGVjaG8gIlwiXCRhc19tZTokTElORU5POiAkYWNfY29tcGlsZVwiIiA+JkFTX01FU1NBR0VfTE9HX0ZEKQotICAoZXZhbCAiJGFjX2NvbXBpbGUiIDI+Y29uZnRlc3QuZXJyKQotICBjYXQgY29uZnRlc3QuZXJyID4mQVNfTUVTU0FHRV9MT0dfRkQKLSAgKGV2YWwgZWNobyAiXCJcJGFzX21lOiRMSU5FTk86ICROTSBcXFwiY29uZnRlc3QuJGFjX29iamV4dFxcXCJcIiIgPiZBU19NRVNTQUdFX0xPR19GRCkKLSAgKGV2YWwgIiROTSBcImNvbmZ0ZXN0LiRhY19vYmpleHRcIiIgMj5jb25mdGVzdC5lcnIgPiBjb25mdGVzdC5vdXQpCi0gIGNhdCBjb25mdGVzdC5lcnIgPiZBU19NRVNTQUdFX0xPR19GRAotICAoZXZhbCBlY2hvICJcIlwkYXNfbWU6JExJTkVOTzogb3V0cHV0XCIiID4mQVNfTUVTU0FHRV9MT0dfRkQpCi0gIGNhdCBjb25mdGVzdC5vdXQgPiZBU19NRVNTQUdFX0xPR19GRAotICBpZiAkR1JFUCAnRXh0ZXJuYWwuKnNvbWVfdmFyaWFibGUnIGNvbmZ0ZXN0Lm91dCA+IC9kZXYvbnVsbDsgdGhlbgotICAgIGx0X2N2X25tX2ludGVyZmFjZT0iTVMgZHVtcGJpbiIKLSAgZmkKLSAgcm0gLWYgY29uZnRlc3QqXSkKLV0pIyBMVF9QQVRIX05NCi0KLSMgT2xkIG5hbWVzOgotQVVfQUxJQVMoW0FNX1BST0dfTk1dLCBbTFRfUEFUSF9OTV0pCi1BVV9BTElBUyhbQUNfUFJPR19OTV0sIFtMVF9QQVRIX05NXSkKLWRubCBhY2xvY2FsLTEuNCBiYWNrd2FyZHMgY29tcGF0aWJpbGl0eToKLWRubCBBQ19ERUZVTihbQU1fUFJPR19OTV0sIFtdKQotZG5sIEFDX0RFRlVOKFtBQ19QUk9HX05NXSwgW10pCi0KLSMgX0xUX0NIRUNLX1NIQVJFRExJQl9GUk9NX0xJTktMSUIKLSMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSMgaG93IHRvIGRldGVybWluZSB0aGUgbmFtZSBvZiB0aGUgc2hhcmVkIGxpYnJhcnkKLSMgYXNzb2NpYXRlZCB3aXRoIGEgc3BlY2lmaWMgbGluayBsaWJyYXJ5LgotIyAgLS0gUE9SVE1FIGZpbGwgaW4gd2l0aCB0aGUgZHluYW1pYyBsaWJyYXJ5IGNoYXJhY3RlcmlzdGljcwotbTRfZGVmdW4oW19MVF9DSEVDS19TSEFSRURMSUJfRlJPTV9MSU5LTElCXSwKLVttNF9yZXF1aXJlKFtfTFRfREVDTF9FR1JFUF0pCi1tNF9yZXF1aXJlKFtfTFRfREVDTF9PQkpEVU1QXSkKLW00X3JlcXVpcmUoW19MVF9ERUNMX0RMTFRPT0xdKQotQUNfQ0FDSEVfQ0hFQ0soW2hvdyB0byBhc3NvY2lhdGUgcnVudGltZSBhbmQgbGluayBsaWJyYXJpZXNdLAotbHRfY3Zfc2hhcmVkbGliX2Zyb21fbGlua2xpYl9jbWQsCi1bbHRfY3Zfc2hhcmVkbGliX2Zyb21fbGlua2xpYl9jbWQ9J3Vua25vd24nCi0KLWNhc2UgJGhvc3Rfb3MgaW4KLWN5Z3dpbiogfCBtaW5ndyogfCBwdzMyKiB8IGNlZ2NjKikKLSAgIyB0d28gZGlmZmVyZW50IHNoZWxsIGZ1bmN0aW9ucyBkZWZpbmVkIGluIGx0bWFpbi5zaAotICAjIGRlY2lkZSB3aGljaCB0byB1c2UgYmFzZWQgb24gY2FwYWJpbGl0aWVzIG9mICRETExUT09MCi0gIGNhc2UgYCRETExUT09MIC0taGVscCAyPiYxYCBpbgotICAqLS1pZGVudGlmeS1zdHJpY3QqKQotICAgIGx0X2N2X3NoYXJlZGxpYl9mcm9tX2xpbmtsaWJfY21kPWZ1bmNfY3lnbWluZ19kbGxfZm9yX2ltcGxpYgotICAgIDs7Ci0gICopCi0gICAgbHRfY3Zfc2hhcmVkbGliX2Zyb21fbGlua2xpYl9jbWQ9ZnVuY19jeWdtaW5nX2RsbF9mb3JfaW1wbGliX2ZhbGxiYWNrCi0gICAgOzsKLSAgZXNhYwotICA7OwotKikKLSAgIyBmYWxsYmFjazogYXNzdW1lIGxpbmtsaWIgSVMgc2hhcmVkbGliCi0gIGx0X2N2X3NoYXJlZGxpYl9mcm9tX2xpbmtsaWJfY21kPSIkRUNITyIKLSAgOzsKLWVzYWMKLV0pCi1zaGFyZWRsaWJfZnJvbV9saW5rbGliX2NtZD0kbHRfY3Zfc2hhcmVkbGliX2Zyb21fbGlua2xpYl9jbWQKLXRlc3QgLXogIiRzaGFyZWRsaWJfZnJvbV9saW5rbGliX2NtZCIgJiYgc2hhcmVkbGliX2Zyb21fbGlua2xpYl9jbWQ9JEVDSE8KLQotX0xUX0RFQ0woW10sIFtzaGFyZWRsaWJfZnJvbV9saW5rbGliX2NtZF0sIFsxXSwKLSAgICBbQ29tbWFuZCB0byBhc3NvY2lhdGUgc2hhcmVkIGFuZCBsaW5rIGxpYnJhcmllc10pCi1dKSMgX0xUX0NIRUNLX1NIQVJFRExJQl9GUk9NX0xJTktMSUIKLQotCi0jIF9MVF9QQVRIX01BTklGRVNUX1RPT0wKLSMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotIyBsb2NhdGUgdGhlIG1hbmlmZXN0IHRvb2wKLW00X2RlZnVuKFtfTFRfUEFUSF9NQU5JRkVTVF9UT09MXSwKLVtBQ19DSEVDS19UT09MKE1BTklGRVNUX1RPT0wsIG10LCA6KQotdGVzdCAteiAiJE1BTklGRVNUX1RPT0wiICYmIE1BTklGRVNUX1RPT0w9bXQKLUFDX0NBQ0hFX0NIRUNLKFtpZiAkTUFOSUZFU1RfVE9PTCBpcyBhIG1hbmlmZXN0IHRvb2xdLCBbbHRfY3ZfcGF0aF9tYWluZmVzdF90b29sXSwKLSAgW2x0X2N2X3BhdGhfbWFpbmZlc3RfdG9vbD1ubwotICBlY2hvICIkYXNfbWU6JExJTkVOTzogJE1BTklGRVNUX1RPT0wgJy0/JyIgPiZBU19NRVNTQUdFX0xPR19GRAotICAkTUFOSUZFU1RfVE9PTCAnLT8nIDI+Y29uZnRlc3QuZXJyID4gY29uZnRlc3Qub3V0Ci0gIGNhdCBjb25mdGVzdC5lcnIgPiZBU19NRVNTQUdFX0xPR19GRAotICBpZiAkR1JFUCAnTWFuaWZlc3QgVG9vbCcgY29uZnRlc3Qub3V0ID4gL2Rldi9udWxsOyB0aGVuCi0gICAgbHRfY3ZfcGF0aF9tYWluZmVzdF90b29sPXllcwotICBmaQotICBybSAtZiBjb25mdGVzdCpdKQotaWYgdGVzdCAieCRsdF9jdl9wYXRoX21haW5mZXN0X3Rvb2wiICE9IHh5ZXM7IHRoZW4KLSAgTUFOSUZFU1RfVE9PTD06Ci1maQotX0xUX0RFQ0woW10sIFtNQU5JRkVTVF9UT09MXSwgWzFdLCBbTWFuaWZlc3QgdG9vbF0pZG5sCi1dKSMgX0xUX1BBVEhfTUFOSUZFU1RfVE9PTAotCi0KLSMgTFRfTElCX00KLSMgLS0tLS0tLS0KLSMgY2hlY2sgZm9yIG1hdGggbGlicmFyeQotQUNfREVGVU4oW0xUX0xJQl9NXSwKLVtBQ19SRVFVSVJFKFtBQ19DQU5PTklDQUxfSE9TVF0pZG5sCi1MSUJNPQotY2FzZSAkaG9zdCBpbgotKi0qLWJlb3MqIHwgKi0qLWNlZ2NjKiB8ICotKi1jeWd3aW4qIHwgKi0qLWhhaWt1KiB8ICotKi1wdzMyKiB8ICotKi1kYXJ3aW4qKQotICAjIFRoZXNlIHN5c3RlbSBkb24ndCBoYXZlIGxpYm0sIG9yIGRvbid0IG5lZWQgaXQKLSAgOzsKLSotbmNyLXN5c3Y0LjMqKQotICBBQ19DSEVDS19MSUIobXcsIF9td3ZhbGlkY2hlY2tsLCBMSUJNPSItbG13IikKLSAgQUNfQ0hFQ0tfTElCKG0sIGNvcywgTElCTT0iJExJQk0gLWxtIikKLSAgOzsKLSopCi0gIEFDX0NIRUNLX0xJQihtLCBjb3MsIExJQk09Ii1sbSIpCi0gIDs7Ci1lc2FjCi1BQ19TVUJTVChbTElCTV0pCi1dKSMgTFRfTElCX00KLQotIyBPbGQgbmFtZToKLUFVX0FMSUFTKFtBQ19DSEVDS19MSUJNXSwgW0xUX0xJQl9NXSkKLWRubCBhY2xvY2FsLTEuNCBiYWNrd2FyZHMgY29tcGF0aWJpbGl0eToKLWRubCBBQ19ERUZVTihbQUNfQ0hFQ0tfTElCTV0sIFtdKQotCi0KLSMgX0xUX0NPTVBJTEVSX05PX1JUVEkoW1RBR05BTUVdKQotIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi1tNF9kZWZ1bihbX0xUX0NPTVBJTEVSX05PX1JUVEldLAotW200X3JlcXVpcmUoW19MVF9UQUdfQ09NUElMRVJdKWRubAotCi1fTFRfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfbm9fYnVpbHRpbl9mbGFnLCAkMSk9Ci0KLWlmIHRlc3QgIiRHQ0MiID0geWVzOyB0aGVuCi0gIGNhc2UgJGNjX2Jhc2VuYW1lIGluCi0gIG52Y2MqKQotICAgIF9MVF9UQUdWQVIobHRfcHJvZ19jb21waWxlcl9ub19idWlsdGluX2ZsYWcsICQxKT0nIC1YY29tcGlsZXIgLWZuby1idWlsdGluJyA7OwotICAqKQotICAgIF9MVF9UQUdWQVIobHRfcHJvZ19jb21waWxlcl9ub19idWlsdGluX2ZsYWcsICQxKT0nIC1mbm8tYnVpbHRpbicgOzsKLSAgZXNhYwotCi0gIF9MVF9DT01QSUxFUl9PUFRJT04oW2lmICRjb21waWxlciBzdXBwb3J0cyAtZm5vLXJ0dGkgLWZuby1leGNlcHRpb25zXSwKLSAgICBsdF9jdl9wcm9nX2NvbXBpbGVyX3J0dGlfZXhjZXB0aW9ucywKLSAgICBbLWZuby1ydHRpIC1mbm8tZXhjZXB0aW9uc10sIFtdLAotICAgIFtfTFRfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfbm9fYnVpbHRpbl9mbGFnLCAkMSk9IiRfTFRfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfbm9fYnVpbHRpbl9mbGFnLCAkMSkgLWZuby1ydHRpIC1mbm8tZXhjZXB0aW9ucyJdKQotZmkKLV9MVF9UQUdERUNMKFtub19idWlsdGluX2ZsYWddLCBbbHRfcHJvZ19jb21waWxlcl9ub19idWlsdGluX2ZsYWddLCBbMV0sCi0JW0NvbXBpbGVyIGZsYWcgdG8gdHVybiBvZmYgYnVpbHRpbiBmdW5jdGlvbnNdKQotXSkjIF9MVF9DT01QSUxFUl9OT19SVFRJCi0KLQotIyBfTFRfQ01EX0dMT0JBTF9TWU1CT0xTCi0jIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLW00X2RlZnVuKFtfTFRfQ01EX0dMT0JBTF9TWU1CT0xTXSwKLVtBQ19SRVFVSVJFKFtBQ19DQU5PTklDQUxfSE9TVF0pZG5sCi1BQ19SRVFVSVJFKFtBQ19QUk9HX0NDXSlkbmwKLUFDX1JFUVVJUkUoW0FDX1BST0dfQVdLXSlkbmwKLUFDX1JFUVVJUkUoW0xUX1BBVEhfTk1dKWRubAotQUNfUkVRVUlSRShbTFRfUEFUSF9MRF0pZG5sCi1tNF9yZXF1aXJlKFtfTFRfREVDTF9TRURdKWRubAotbTRfcmVxdWlyZShbX0xUX0RFQ0xfRUdSRVBdKWRubAotbTRfcmVxdWlyZShbX0xUX1RBR19DT01QSUxFUl0pZG5sCi0KLSMgQ2hlY2sgZm9yIGNvbW1hbmQgdG8gZ3JhYiB0aGUgcmF3IHN5bWJvbCBuYW1lIGZvbGxvd2VkIGJ5IEMgc3ltYm9sIGZyb20gbm0uCi1BQ19NU0dfQ0hFQ0tJTkcoW2NvbW1hbmQgdG8gcGFyc2UgJE5NIG91dHB1dCBmcm9tICRjb21waWxlciBvYmplY3RdKQotQUNfQ0FDSEVfVkFMKFtsdF9jdl9zeXNfZ2xvYmFsX3N5bWJvbF9waXBlXSwKLVsKLSMgVGhlc2UgYXJlIHNhbmUgZGVmYXVsdHMgdGhhdCB3b3JrIG9uIGF0IGxlYXN0IGEgZmV3IG9sZCBzeXN0ZW1zLgotIyBbVGhleSBjb21lIGZyb20gVWx0cml4LiAgV2hhdCBjb3VsZCBiZSBvbGRlciB0aGFuIFVsdHJpeD8hISA7KV0KLQotIyBDaGFyYWN0ZXIgY2xhc3MgZGVzY3JpYmluZyBOTSBnbG9iYWwgc3ltYm9sIGNvZGVzLgotc3ltY29kZT0nW1tCQ0RFR1JTVF1dJwotCi0jIFJlZ2V4cCB0byBtYXRjaCBzeW1ib2xzIHRoYXQgY2FuIGJlIGFjY2Vzc2VkIGRpcmVjdGx5IGZyb20gQy4KLXN5bXBhdD0nXChbW19BLVphLXpdXVtbX0EtWmEtejAtOV1dKlwpJwotCi0jIERlZmluZSBzeXN0ZW0tc3BlY2lmaWMgdmFyaWFibGVzLgotY2FzZSAkaG9zdF9vcyBpbgotYWl4KikKLSAgc3ltY29kZT0nW1tCQ0RUXV0nCi0gIDs7Ci1jeWd3aW4qIHwgbWluZ3cqIHwgcHczMiogfCBjZWdjYyopCi0gIHN5bWNvZGU9J1tbQUJDREdJU1RXXV0nCi0gIDs7Ci1ocHV4KikKLSAgaWYgdGVzdCAiJGhvc3RfY3B1IiA9IGlhNjQ7IHRoZW4KLSAgICBzeW1jb2RlPSdbW0FCQ0RFR1JTVF1dJwotICBmaQotICA7OwotaXJpeCogfCBub25zdG9wdXgqKQotICBzeW1jb2RlPSdbW0JDREVHUlNUXV0nCi0gIDs7Ci1vc2YqKQotICBzeW1jb2RlPSdbW0JDREVHUVJTVF1dJwotICA7Owotc29sYXJpcyopCi0gIHN5bWNvZGU9J1tbQkRSVF1dJwotICA7Owotc2NvMy4ydjUqKQotICBzeW1jb2RlPSdbW0RUXV0nCi0gIDs7Ci1zeXN2NC4ydXcyKikKLSAgc3ltY29kZT0nW1tEVF1dJwotICA7Owotc3lzdjUqIHwgc2NvNXY2KiB8IHVuaXh3YXJlKiB8IE9wZW5VTklYKikKLSAgc3ltY29kZT0nW1tBQkRUXV0nCi0gIDs7Ci1zeXN2NCkKLSAgc3ltY29kZT0nW1tERk5TVFVdXScKLSAgOzsKLWVzYWMKLQotIyBJZiB3ZSdyZSB1c2luZyBHTlUgbm0sIHRoZW4gdXNlIGl0cyBzdGFuZGFyZCBzeW1ib2wgY29kZXMuCi1jYXNlIGAkTk0gLVYgMj4mMWAgaW4KLSpHTlUqIHwgKid3aXRoIEJGRCcqKQotICBzeW1jb2RlPSdbW0FCQ0RHSVJTVFddXScgOzsKLWVzYWMKLQotIyBUcmFuc2Zvcm0gYW4gZXh0cmFjdGVkIHN5bWJvbCBsaW5lIGludG8gYSBwcm9wZXIgQyBkZWNsYXJhdGlvbi4KLSMgU29tZSBzeXN0ZW1zIChlc3AuIG9uIGlhNjQpIGxpbmsgZGF0YSBhbmQgY29kZSBzeW1ib2xzIGRpZmZlcmVudGx5LAotIyBzbyB1c2UgdGhpcyBnZW5lcmFsIGFwcHJvYWNoLgotbHRfY3Zfc3lzX2dsb2JhbF9zeW1ib2xfdG9fY2RlY2w9InNlZCAtbiAtZSAncy9eVCAuKiBcKC4qXCkkL2V4dGVybiBpbnQgXDEoKTsvcCcgLWUgJ3MvXiRzeW1jb2RlKiAuKiBcKC4qXCkkL2V4dGVybiBjaGFyIFwxOy9wJyIKLQotIyBUcmFuc2Zvcm0gYW4gZXh0cmFjdGVkIHN5bWJvbCBsaW5lIGludG8gc3ltYm9sIG5hbWUgYW5kIHN5bWJvbCBhZGRyZXNzCi1sdF9jdl9zeXNfZ2xvYmFsX3N5bWJvbF90b19jX25hbWVfYWRkcmVzcz0ic2VkIC1uIC1lICdzL146IFwoW1teIF1dKlwpW1sgXV0qJC8gIHtcXFwiXDFcXFwiLCAodm9pZCAqKSAwfSwvcCcgLWUgJ3MvXiRzeW1jb2RlKiBcKFtbXiBdXSpcKSBcKFtbXiBdXSpcKSQvICB7XCJcMlwiLCAodm9pZCAqKSBcJlwyfSwvcCciCi1sdF9jdl9zeXNfZ2xvYmFsX3N5bWJvbF90b19jX25hbWVfYWRkcmVzc19saWJfcHJlZml4PSJzZWQgLW4gLWUgJ3MvXjogXChbW14gXV0qXClbWyBdXSokLyAge1xcXCJcMVxcXCIsICh2b2lkICopIDB9LC9wJyAtZSAncy9eJHN5bWNvZGUqIFwoW1teIF1dKlwpIFwobGliW1teIF1dKlwpJC8gIHtcIlwyXCIsICh2b2lkICopIFwmXDJ9LC9wJyAtZSAncy9eJHN5bWNvZGUqIFwoW1teIF1dKlwpIFwoW1teIF1dKlwpJC8gIHtcImxpYlwyXCIsICh2b2lkICopIFwmXDJ9LC9wJyIKLQotIyBIYW5kbGUgQ1JMRiBpbiBtaW5ndyB0b29sIGNoYWluCi1vcHRfY3I9Ci1jYXNlICRidWlsZF9vcyBpbgotbWluZ3cqKQotICBvcHRfY3I9YCRFQ0hPICd4XHswLDFcfScgfCB0ciB4ICdcMDE1J2AgIyBvcHRpb24gY3IgaW4gcmVnZXhwCi0gIDs7Ci1lc2FjCi0KLSMgVHJ5IHdpdGhvdXQgYSBwcmVmaXggdW5kZXJzY29yZSwgdGhlbiB3aXRoIGl0LgotZm9yIGFjX3N5bXByZnggaW4gIiIgIl8iOyBkbwotCi0gICMgVHJhbnNmb3JtIHN5bWNvZGUsIHN5bXBhdCwgYW5kIHN5bXByZnggaW50byBhIHJhdyBzeW1ib2wgYW5kIGEgQyBzeW1ib2wuCi0gIHN5bXhmcm09IlxcMSAkYWNfc3ltcHJmeFxcMiBcXDIiCi0KLSAgIyBXcml0ZSB0aGUgcmF3IGFuZCBDIGlkZW50aWZpZXJzLgotICBpZiB0ZXN0ICIkbHRfY3Zfbm1faW50ZXJmYWNlIiA9ICJNUyBkdW1wYmluIjsgdGhlbgotICAgICMgRmFrZSBpdCBmb3IgZHVtcGJpbiBhbmQgc2F5IFQgZm9yIGFueSBub24tc3RhdGljIGZ1bmN0aW9uCi0gICAgIyBhbmQgRCBmb3IgYW55IGdsb2JhbCB2YXJpYWJsZS4KLSAgICAjIEFsc28gZmluZCBDKysgYW5kIF9fZmFzdGNhbGwgc3ltYm9scyBmcm9tIE1TVkMrKywKLSAgICAjIHdoaWNoIHN0YXJ0IHdpdGggQCBvciA/LgotICAgIGx0X2N2X3N5c19nbG9iYWxfc3ltYm9sX3BpcGU9IiRBV0sgWyciXAotIiAgICAge2xhc3Rfc2VjdGlvbj1zZWN0aW9uOyBzZWN0aW9uPVwkIDN9OyJcCi0iICAgICAvU2VjdGlvbiBsZW5ndGggLiojcmVsb2NzLioocGljayBhbnkpL3toaWRlW2xhc3Rfc2VjdGlvbl09MX07IlwKLSIgICAgIFwkIDAhfi9FeHRlcm5hbCAqXHwve25leHR9OyJcCi0iICAgICAvIDArIFVOREVGIC97bmV4dH07IC8gVU5ERUYgXChbXnxdXCkqKCkve25leHR9OyJcCi0iICAgICB7aWYoaGlkZVtzZWN0aW9uXSkgbmV4dH07IlwKLSIgICAgIHtmPTB9OyBcJCAwfi9cKFwpLipcfC97Zj0xfTsge3ByaW50ZiBmID8gXCJUIFwiIDogXCJEIFwifTsiXAotIiAgICAge3NwbGl0KFwkIDAsIGEsIC9cfHxcci8pOyBzcGxpdChhWzJdLCBzKX07IlwKLSIgICAgIHNbMV1+L15bQD9dL3twcmludCBzWzFdLCBzWzFdOyBuZXh0fTsiXAotIiAgICAgc1sxXX5wcmZ4IHtzcGxpdChzWzFdLHQsXCJAXCIpOyBwcmludCB0WzFdLCBzdWJzdHIodFsxXSxsZW5ndGgocHJmeCkpfSJcCi0iICAgICAnIHByZng9XiRhY19zeW1wcmZ4XSIKLSAgZWxzZQotICAgIGx0X2N2X3N5c19nbG9iYWxfc3ltYm9sX3BpcGU9InNlZCAtbiAtZSAncy9eLipbWwkgXV1cKCRzeW1jb2RlJHN5bWNvZGUqXClbWwkgXV1bWwkgXV0qJGFjX3N5bXByZngkc3ltcGF0JG9wdF9jciQvJHN5bXhmcm0vcCciCi0gIGZpCi0gIGx0X2N2X3N5c19nbG9iYWxfc3ltYm9sX3BpcGU9IiRsdF9jdl9zeXNfZ2xvYmFsX3N5bWJvbF9waXBlIHwgc2VkICcvIF9fZ251X2x0by9kJyIKLQotICAjIENoZWNrIHRvIHNlZSB0aGF0IHRoZSBwaXBlIHdvcmtzIGNvcnJlY3RseS4KLSAgcGlwZV93b3Jrcz1ubwotCi0gIHJtIC1mIGNvbmZ0ZXN0KgotICBjYXQgPiBjb25mdGVzdC4kYWNfZXh0IDw8X0xUX0VPRgotI2lmZGVmIF9fY3BsdXNwbHVzCi1leHRlcm4gIkMiIHsKLSNlbmRpZgotY2hhciBubV90ZXN0X3ZhcjsKLXZvaWQgbm1fdGVzdF9mdW5jKHZvaWQpOwotdm9pZCBubV90ZXN0X2Z1bmModm9pZCl7fQotI2lmZGVmIF9fY3BsdXNwbHVzCi19Ci0jZW5kaWYKLWludCBtYWluKCl7bm1fdGVzdF92YXI9J2EnO25tX3Rlc3RfZnVuYygpO3JldHVybigwKTt9Ci1fTFRfRU9GCi0KLSAgaWYgQUNfVFJZX0VWQUwoYWNfY29tcGlsZSk7IHRoZW4KLSAgICAjIE5vdyB0cnkgdG8gZ3JhYiB0aGUgc3ltYm9scy4KLSAgICBubGlzdD1jb25mdGVzdC5ubQotICAgIGlmIEFDX1RSWV9FVkFMKE5NIGNvbmZ0ZXN0LiRhY19vYmpleHQgXHwgIiRsdF9jdl9zeXNfZ2xvYmFsX3N5bWJvbF9waXBlIiBcPiAkbmxpc3QpICYmIHRlc3QgLXMgIiRubGlzdCI7IHRoZW4KLSAgICAgICMgVHJ5IHNvcnRpbmcgYW5kIHVuaXF1aWZ5aW5nIHRoZSBvdXRwdXQuCi0gICAgICBpZiBzb3J0ICIkbmxpc3QiIHwgdW5pcSA+ICIkbmxpc3QiVDsgdGhlbgotCW12IC1mICIkbmxpc3QiVCAiJG5saXN0IgotICAgICAgZWxzZQotCXJtIC1mICIkbmxpc3QiVAotICAgICAgZmkKLQotICAgICAgIyBNYWtlIHN1cmUgdGhhdCB3ZSBzbmFnZ2VkIGFsbCB0aGUgc3ltYm9scyB3ZSBuZWVkLgotICAgICAgaWYgJEdSRVAgJyBubV90ZXN0X3ZhciQnICIkbmxpc3QiID4vZGV2L251bGw7IHRoZW4KLQlpZiAkR1JFUCAnIG5tX3Rlc3RfZnVuYyQnICIkbmxpc3QiID4vZGV2L251bGw7IHRoZW4KLQkgIGNhdCA8PF9MVF9FT0YgPiBjb25mdGVzdC4kYWNfZXh0Ci0vKiBLZWVwIHRoaXMgY29kZSBpbiBzeW5jIGJldHdlZW4gbGlidG9vbC5tNCwgbHRtYWluLCBsdF9zeXN0ZW0uaCwgYW5kIHRlc3RzLiAgKi8KLSNpZiBkZWZpbmVkKF9XSU4zMikgfHwgZGVmaW5lZChfX0NZR1dJTl9fKSB8fCBkZWZpbmVkKF9XSU4zMl9XQ0UpCi0vKiBEQVRBIGltcG9ydHMgZnJvbSBETExzIG9uIFdJTjMyIGNvbid0IGJlIGNvbnN0LCBiZWNhdXNlIHJ1bnRpbWUKLSAgIHJlbG9jYXRpb25zIGFyZSBwZXJmb3JtZWQgLS0gc2VlIGxkJ3MgZG9jdW1lbnRhdGlvbiBvbiBwc2V1ZG8tcmVsb2NzLiAgKi8KLSMgZGVmaW5lIExUQCZ0QF9ETFNZTV9DT05TVAotI2VsaWYgZGVmaW5lZChfX29zZl9fKQotLyogVGhpcyBzeXN0ZW0gZG9lcyBub3QgY29wZSB3ZWxsIHdpdGggcmVsb2NhdGlvbnMgaW4gY29uc3QgZGF0YS4gICovCi0jIGRlZmluZSBMVEAmdEBfRExTWU1fQ09OU1QKLSNlbHNlCi0jIGRlZmluZSBMVEAmdEBfRExTWU1fQ09OU1QgY29uc3QKLSNlbmRpZgotCi0jaWZkZWYgX19jcGx1c3BsdXMKLWV4dGVybiAiQyIgewotI2VuZGlmCi0KLV9MVF9FT0YKLQkgICMgTm93IGdlbmVyYXRlIHRoZSBzeW1ib2wgZmlsZS4KLQkgIGV2YWwgIiRsdF9jdl9zeXNfZ2xvYmFsX3N5bWJvbF90b19jZGVjbCInIDwgIiRubGlzdCIgfCAkR1JFUCAtdiBtYWluID4+IGNvbmZ0ZXN0LiRhY19leHQnCi0KLQkgIGNhdCA8PF9MVF9FT0YgPj4gY29uZnRlc3QuJGFjX2V4dAotCi0vKiBUaGUgbWFwcGluZyBiZXR3ZWVuIHN5bWJvbCBuYW1lcyBhbmQgc3ltYm9scy4gICovCi1MVEAmdEBfRExTWU1fQ09OU1Qgc3RydWN0IHsKLSAgY29uc3QgY2hhciAqbmFtZTsKLSAgdm9pZCAgICAgICAqYWRkcmVzczsKLX0KLWx0X19QUk9HUkFNX19MVFhfcHJlbG9hZGVkX3N5bWJvbHNbW11dID0KLXsKLSAgeyAiQFBST0dSQU1AIiwgKHZvaWQgKikgMCB9LAotX0xUX0VPRgotCSAgJFNFRCAicy9eJHN5bWNvZGUkc3ltY29kZSogXCguKlwpIFwoLipcKSQvICB7XCJcMlwiLCAodm9pZCAqKSBcJlwyfSwvIiA8ICIkbmxpc3QiIHwgJEdSRVAgLXYgbWFpbiA+PiBjb25mdGVzdC4kYWNfZXh0Ci0JICBjYXQgPDxcX0xUX0VPRiA+PiBjb25mdGVzdC4kYWNfZXh0Ci0gIHswLCAodm9pZCAqKSAwfQotfTsKLQotLyogVGhpcyB3b3JrcyBhcm91bmQgYSBwcm9ibGVtIGluIEZyZWVCU0QgbGlua2VyICovCi0jaWZkZWYgRlJFRUJTRF9XT1JLQVJPVU5ECi1zdGF0aWMgY29uc3Qgdm9pZCAqbHRfcHJlbG9hZGVkX3NldHVwKCkgewotICByZXR1cm4gbHRfX1BST0dSQU1fX0xUWF9wcmVsb2FkZWRfc3ltYm9sczsKLX0KLSNlbmRpZgotCi0jaWZkZWYgX19jcGx1c3BsdXMKLX0KLSNlbmRpZgotX0xUX0VPRgotCSAgIyBOb3cgdHJ5IGxpbmtpbmcgdGhlIHR3byBmaWxlcy4KLQkgIG12IGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRzdG0uJGFjX29iamV4dAotCSAgbHRfZ2xvYnN5bV9zYXZlX0xJQlM9JExJQlMKLQkgIGx0X2dsb2JzeW1fc2F2ZV9DRkxBR1M9JENGTEFHUwotCSAgTElCUz0iY29uZnRzdG0uJGFjX29iamV4dCIKLQkgIENGTEFHUz0iJENGTEFHUyRfTFRfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfbm9fYnVpbHRpbl9mbGFnLCAkMSkiCi0JICBpZiBBQ19UUllfRVZBTChhY19saW5rKSAmJiB0ZXN0IC1zIGNvbmZ0ZXN0JHthY19leGVleHR9OyB0aGVuCi0JICAgIHBpcGVfd29ya3M9eWVzCi0JICBmaQotCSAgTElCUz0kbHRfZ2xvYnN5bV9zYXZlX0xJQlMKLQkgIENGTEFHUz0kbHRfZ2xvYnN5bV9zYXZlX0NGTEFHUwotCWVsc2UKLQkgIGVjaG8gImNhbm5vdCBmaW5kIG5tX3Rlc3RfZnVuYyBpbiAkbmxpc3QiID4mQVNfTUVTU0FHRV9MT0dfRkQKLQlmaQotICAgICAgZWxzZQotCWVjaG8gImNhbm5vdCBmaW5kIG5tX3Rlc3RfdmFyIGluICRubGlzdCIgPiZBU19NRVNTQUdFX0xPR19GRAotICAgICAgZmkKLSAgICBlbHNlCi0gICAgICBlY2hvICJjYW5ub3QgcnVuICRsdF9jdl9zeXNfZ2xvYmFsX3N5bWJvbF9waXBlIiA+JkFTX01FU1NBR0VfTE9HX0ZECi0gICAgZmkKLSAgZWxzZQotICAgIGVjaG8gIiRwcm9nbmFtZTogZmFpbGVkIHByb2dyYW0gd2FzOiIgPiZBU19NRVNTQUdFX0xPR19GRAotICAgIGNhdCBjb25mdGVzdC4kYWNfZXh0ID4mNQotICBmaQotICBybSAtcmYgY29uZnRlc3QqIGNvbmZ0c3QqCi0KLSAgIyBEbyBub3QgdXNlIHRoZSBnbG9iYWxfc3ltYm9sX3BpcGUgdW5sZXNzIGl0IHdvcmtzLgotICBpZiB0ZXN0ICIkcGlwZV93b3JrcyIgPSB5ZXM7IHRoZW4KLSAgICBicmVhawotICBlbHNlCi0gICAgbHRfY3Zfc3lzX2dsb2JhbF9zeW1ib2xfcGlwZT0KLSAgZmkKLWRvbmUKLV0pCi1pZiB0ZXN0IC16ICIkbHRfY3Zfc3lzX2dsb2JhbF9zeW1ib2xfcGlwZSI7IHRoZW4KLSAgbHRfY3Zfc3lzX2dsb2JhbF9zeW1ib2xfdG9fY2RlY2w9Ci1maQotaWYgdGVzdCAteiAiJGx0X2N2X3N5c19nbG9iYWxfc3ltYm9sX3BpcGUkbHRfY3Zfc3lzX2dsb2JhbF9zeW1ib2xfdG9fY2RlY2wiOyB0aGVuCi0gIEFDX01TR19SRVNVTFQoZmFpbGVkKQotZWxzZQotICBBQ19NU0dfUkVTVUxUKG9rKQotZmkKLQotIyBSZXNwb25zZSBmaWxlIHN1cHBvcnQuCi1pZiB0ZXN0ICIkbHRfY3Zfbm1faW50ZXJmYWNlIiA9ICJNUyBkdW1wYmluIjsgdGhlbgotICBubV9maWxlX2xpc3Rfc3BlYz0nQCcKLWVsaWYgJE5NIC0taGVscCAyPi9kZXYvbnVsbCB8IGdyZXAgJ1tbQF1dRklMRScgPi9kZXYvbnVsbDsgdGhlbgotICBubV9maWxlX2xpc3Rfc3BlYz0nQCcKLWZpCi0KLV9MVF9ERUNMKFtnbG9iYWxfc3ltYm9sX3BpcGVdLCBbbHRfY3Zfc3lzX2dsb2JhbF9zeW1ib2xfcGlwZV0sIFsxXSwKLSAgICBbVGFrZSB0aGUgb3V0cHV0IG9mIG5tIGFuZCBwcm9kdWNlIGEgbGlzdGluZyBvZiByYXcgc3ltYm9scyBhbmQgQyBuYW1lc10pCi1fTFRfREVDTChbZ2xvYmFsX3N5bWJvbF90b19jZGVjbF0sIFtsdF9jdl9zeXNfZ2xvYmFsX3N5bWJvbF90b19jZGVjbF0sIFsxXSwKLSAgICBbVHJhbnNmb3JtIHRoZSBvdXRwdXQgb2Ygbm0gaW4gYSBwcm9wZXIgQyBkZWNsYXJhdGlvbl0pCi1fTFRfREVDTChbZ2xvYmFsX3N5bWJvbF90b19jX25hbWVfYWRkcmVzc10sCi0gICAgW2x0X2N2X3N5c19nbG9iYWxfc3ltYm9sX3RvX2NfbmFtZV9hZGRyZXNzXSwgWzFdLAotICAgIFtUcmFuc2Zvcm0gdGhlIG91dHB1dCBvZiBubSBpbiBhIEMgbmFtZSBhZGRyZXNzIHBhaXJdKQotX0xUX0RFQ0woW2dsb2JhbF9zeW1ib2xfdG9fY19uYW1lX2FkZHJlc3NfbGliX3ByZWZpeF0sCi0gICAgW2x0X2N2X3N5c19nbG9iYWxfc3ltYm9sX3RvX2NfbmFtZV9hZGRyZXNzX2xpYl9wcmVmaXhdLCBbMV0sCi0gICAgW1RyYW5zZm9ybSB0aGUgb3V0cHV0IG9mIG5tIGluIGEgQyBuYW1lIGFkZHJlc3MgcGFpciB3aGVuIGxpYiBwcmVmaXggaXMgbmVlZGVkXSkKLV9MVF9ERUNMKFtdLCBbbm1fZmlsZV9saXN0X3NwZWNdLCBbMV0sCi0gICAgW1NwZWNpZnkgZmlsZW5hbWUgY29udGFpbmluZyBpbnB1dCBmaWxlcyBmb3IgJE5NXSkKLV0pICMgX0xUX0NNRF9HTE9CQUxfU1lNQk9MUwotCi0KLSMgX0xUX0NPTVBJTEVSX1BJQyhbVEFHTkFNRV0pCi0jIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotbTRfZGVmdW4oW19MVF9DT01QSUxFUl9QSUNdLAotW200X3JlcXVpcmUoW19MVF9UQUdfQ09NUElMRVJdKWRubAotX0xUX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX3dsLCAkMSk9Ci1fTFRfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfcGljLCAkMSk9Ci1fTFRfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfc3RhdGljLCAkMSk9Ci0KLW00X2lmKFskMV0sIFtDWFhdLCBbCi0gICMgQysrIHNwZWNpZmljIGNhc2VzIGZvciBwaWMsIHN0YXRpYywgd2wsIGV0Yy4KLSAgaWYgdGVzdCAiJEdYWCIgPSB5ZXM7IHRoZW4KLSAgICBfTFRfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfd2wsICQxKT0nLVdsLCcKLSAgICBfTFRfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfc3RhdGljLCAkMSk9Jy1zdGF0aWMnCi0KLSAgICBjYXNlICRob3N0X29zIGluCi0gICAgYWl4KikKLSAgICAgICMgQWxsIEFJWCBjb2RlIGlzIFBJQy4KLSAgICAgIGlmIHRlc3QgIiRob3N0X2NwdSIgPSBpYTY0OyB0aGVuCi0JIyBBSVggNSBub3cgc3VwcG9ydHMgSUE2NCBwcm9jZXNzb3IKLQlfTFRfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfc3RhdGljLCAkMSk9Jy1Cc3RhdGljJwotICAgICAgZmkKLSAgICAgIDs7Ci0KLSAgICBhbWlnYW9zKikKLSAgICAgIGNhc2UgJGhvc3RfY3B1IGluCi0gICAgICBwb3dlcnBjKQotICAgICAgICAgICAgIyBzZWUgY29tbWVudCBhYm91dCBBbWlnYU9TNCAuc28gc3VwcG9ydAotICAgICAgICAgICAgX0xUX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX3BpYywgJDEpPSctZlBJQycKLSAgICAgICAgOzsKLSAgICAgIG02OGspCi0gICAgICAgICAgICAjIEZJWE1FOiB3ZSBuZWVkIGF0IGxlYXN0IDY4MDIwIGNvZGUgdG8gYnVpbGQgc2hhcmVkIGxpYnJhcmllcywgYnV0Ci0gICAgICAgICAgICAjIGFkZGluZyB0aGUgYC1tNjgwMjAnIGZsYWcgdG8gR0NDIHByZXZlbnRzIGJ1aWxkaW5nIGFueXRoaW5nIGJldHRlciwKLSAgICAgICAgICAgICMgbGlrZSBgLW02ODA0MCcuCi0gICAgICAgICAgICBfTFRfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfcGljLCAkMSk9Jy1tNjgwMjAgLXJlc2lkZW50MzIgLW1hbHdheXMtcmVzdG9yZS1hNCcKLSAgICAgICAgOzsKLSAgICAgIGVzYWMKLSAgICAgIDs7Ci0KLSAgICBiZW9zKiB8IGlyaXg1KiB8IGlyaXg2KiB8IG5vbnN0b3B1eCogfCBvc2YzKiB8IG9zZjQqIHwgb3NmNSopCi0gICAgICAjIFBJQyBpcyB0aGUgZGVmYXVsdCBmb3IgdGhlc2UgT1Nlcy4KLSAgICAgIDs7Ci0gICAgbWluZ3cqIHwgY3lnd2luKiB8IG9zMiogfCBwdzMyKiB8IGNlZ2NjKikKLSAgICAgICMgVGhpcyBoYWNrIGlzIHNvIHRoYXQgdGhlIHNvdXJjZSBmaWxlIGNhbiB0ZWxsIHdoZXRoZXIgaXQgaXMgYmVpbmcKLSAgICAgICMgYnVpbHQgZm9yIGluY2x1c2lvbiBpbiBhIGRsbCAoYW5kIHNob3VsZCBleHBvcnQgc3ltYm9scyBmb3IgZXhhbXBsZSkuCi0gICAgICAjIEFsdGhvdWdoIHRoZSBjeWd3aW4gZ2NjIGlnbm9yZXMgLWZQSUMsIHN0aWxsIG5lZWQgdGhpcyBmb3Igb2xkLXN0eWxlCi0gICAgICAjICgtLWRpc2FibGUtYXV0by1pbXBvcnQpIGxpYnJhcmllcwotICAgICAgbTRfaWYoWyQxXSwgW0dDSl0sIFtdLAotCVtfTFRfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfcGljLCAkMSk9Jy1ERExMX0VYUE9SVCddKQotICAgICAgOzsKLSAgICBkYXJ3aW4qIHwgcmhhcHNvZHkqKQotICAgICAgIyBQSUMgaXMgdGhlIGRlZmF1bHQgb24gdGhpcyBwbGF0Zm9ybQotICAgICAgIyBDb21tb24gc3ltYm9scyBub3QgYWxsb3dlZCBpbiBNSF9EWUxJQiBmaWxlcwotICAgICAgX0xUX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX3BpYywgJDEpPSctZm5vLWNvbW1vbicKLSAgICAgIDs7Ci0gICAgKmRqZ3BwKikKLSAgICAgICMgREpHUFAgZG9lcyBub3Qgc3VwcG9ydCBzaGFyZWQgbGlicmFyaWVzIGF0IGFsbAotICAgICAgX0xUX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX3BpYywgJDEpPQotICAgICAgOzsKLSAgICBoYWlrdSopCi0gICAgICAjIFBJQyBpcyB0aGUgZGVmYXVsdCBmb3IgSGFpa3UuCi0gICAgICAjIFRoZSAiLXN0YXRpYyIgZmxhZyBleGlzdHMsIGJ1dCBpcyBicm9rZW4uCi0gICAgICBfTFRfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfc3RhdGljLCAkMSk9Ci0gICAgICA7OwotICAgIGludGVyaXhbWzMtOV1dKikKLSAgICAgICMgSW50ZXJpeCAzLnggZ2NjIC1mcGljLy1mUElDIG9wdGlvbnMgZ2VuZXJhdGUgYnJva2VuIGNvZGUuCi0gICAgICAjIEluc3RlYWQsIHdlIHJlbG9jYXRlIHNoYXJlZCBsaWJyYXJpZXMgYXQgcnVudGltZS4KLSAgICAgIDs7Ci0gICAgc3lzdjQqTVAqKQotICAgICAgaWYgdGVzdCAtZCAvdXNyL25lYzsgdGhlbgotCV9MVF9UQUdWQVIobHRfcHJvZ19jb21waWxlcl9waWMsICQxKT0tS2NvbmZvcm1fcGljCi0gICAgICBmaQotICAgICAgOzsKLSAgICBocHV4KikKLSAgICAgICMgUElDIGlzIHRoZSBkZWZhdWx0IGZvciA2NC1iaXQgUEEgSFAtVVgsIGJ1dCBub3QgZm9yIDMyLWJpdAotICAgICAgIyBQQSBIUC1VWC4gIE9uIElBNjQgSFAtVVgsIFBJQyBpcyB0aGUgZGVmYXVsdCBidXQgdGhlIHBpYyBmbGFnCi0gICAgICAjIHNldHMgdGhlIGRlZmF1bHQgVExTIG1vZGVsIGFuZCBhZmZlY3RzIGlubGluaW5nLgotICAgICAgY2FzZSAkaG9zdF9jcHUgaW4KLSAgICAgIGhwcGEqNjQqKQotCTs7Ci0gICAgICAqKQotCV9MVF9UQUdWQVIobHRfcHJvZ19jb21waWxlcl9waWMsICQxKT0nLWZQSUMnCi0JOzsKLSAgICAgIGVzYWMKLSAgICAgIDs7Ci0gICAgKnFueCogfCAqbnRvKikKLSAgICAgICMgUU5YIHVzZXMgR05VIEMrKywgYnV0IG5lZWQgdG8gZGVmaW5lIC1zaGFyZWQgb3B0aW9uIHRvbywgb3RoZXJ3aXNlCi0gICAgICAjIGl0IHdpbGwgY29yZWR1bXAuCi0gICAgICBfTFRfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfcGljLCAkMSk9Jy1mUElDIC1zaGFyZWQnCi0gICAgICA7OwotICAgICopCi0gICAgICBfTFRfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfcGljLCAkMSk9Jy1mUElDJwotICAgICAgOzsKLSAgICBlc2FjCi0gIGVsc2UKLSAgICBjYXNlICRob3N0X29zIGluCi0gICAgICBhaXhbWzQtOV1dKikKLQkjIEFsbCBBSVggY29kZSBpcyBQSUMuCi0JaWYgdGVzdCAiJGhvc3RfY3B1IiA9IGlhNjQ7IHRoZW4KLQkgICMgQUlYIDUgbm93IHN1cHBvcnRzIElBNjQgcHJvY2Vzc29yCi0JICBfTFRfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfc3RhdGljLCAkMSk9Jy1Cc3RhdGljJwotCWVsc2UKLQkgIF9MVF9UQUdWQVIobHRfcHJvZ19jb21waWxlcl9zdGF0aWMsICQxKT0nLWJuc28gLWJJOi9saWIvc3lzY2FsbHMuZXhwJwotCWZpCi0JOzsKLSAgICAgIGNob3J1cyopCi0JY2FzZSAkY2NfYmFzZW5hbWUgaW4KLQljeGNoNjgqKQotCSAgIyBHcmVlbiBIaWxscyBDKysgQ29tcGlsZXIKLQkgICMgX0xUX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX3N0YXRpYywgJDEpPSItLW5vX2F1dG9faW5zdGFudGlhdGlvbiAtdSBfX21haW4gLXUgX19wcmVtYWluIC11IF9hYm9ydCAtciAkQ09PTF9ESVIvbGliL2xpYk9yYi5hICRNVk1FX0RJUi9saWIvQ0MvbGliQy5hICRNVk1FX0RJUi9saWIvY2xhc3NpeC9saWJjeC5zLmEiCi0JICA7OwotCWVzYWMKLQk7OwotICAgICAgbWluZ3cqIHwgY3lnd2luKiB8IG9zMiogfCBwdzMyKiB8IGNlZ2NjKikKLQkjIFRoaXMgaGFjayBpcyBzbyB0aGF0IHRoZSBzb3VyY2UgZmlsZSBjYW4gdGVsbCB3aGV0aGVyIGl0IGlzIGJlaW5nCi0JIyBidWlsdCBmb3IgaW5jbHVzaW9uIGluIGEgZGxsIChhbmQgc2hvdWxkIGV4cG9ydCBzeW1ib2xzIGZvciBleGFtcGxlKS4KLQltNF9pZihbJDFdLCBbR0NKXSwgW10sCi0JICBbX0xUX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX3BpYywgJDEpPSctRERMTF9FWFBPUlQnXSkKLQk7OwotICAgICAgZGd1eCopCi0JY2FzZSAkY2NfYmFzZW5hbWUgaW4KLQkgIGVjKysqKQotCSAgICBfTFRfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfcGljLCAkMSk9Jy1LUElDJwotCSAgICA7OwotCSAgZ2hjeCopCi0JICAgICMgR3JlZW4gSGlsbHMgQysrIENvbXBpbGVyCi0JICAgIF9MVF9UQUdWQVIobHRfcHJvZ19jb21waWxlcl9waWMsICQxKT0nLXBpYycKLQkgICAgOzsKLQkgICopCi0JICAgIDs7Ci0JZXNhYwotCTs7Ci0gICAgICBmcmVlYnNkKiB8IGRyYWdvbmZseSopCi0JIyBGcmVlQlNEIHVzZXMgR05VIEMrKwotCTs7Ci0gICAgICBocHV4OSogfCBocHV4MTAqIHwgaHB1eDExKikKLQljYXNlICRjY19iYXNlbmFtZSBpbgotCSAgQ0MqKQotCSAgICBfTFRfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfd2wsICQxKT0nLVdsLCcKLQkgICAgX0xUX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX3N0YXRpYywgJDEpPScke3dsfS1hICR7d2x9YXJjaGl2ZScKLQkgICAgaWYgdGVzdCAiJGhvc3RfY3B1IiAhPSBpYTY0OyB0aGVuCi0JICAgICAgX0xUX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX3BpYywgJDEpPScrWicKLQkgICAgZmkKLQkgICAgOzsKLQkgIGFDQyopCi0JICAgIF9MVF9UQUdWQVIobHRfcHJvZ19jb21waWxlcl93bCwgJDEpPSctV2wsJwotCSAgICBfTFRfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfc3RhdGljLCAkMSk9JyR7d2x9LWEgJHt3bH1hcmNoaXZlJwotCSAgICBjYXNlICRob3N0X2NwdSBpbgotCSAgICBocHBhKjY0KnxpYTY0KikKLQkgICAgICAjICtaIHRoZSBkZWZhdWx0Ci0JICAgICAgOzsKLQkgICAgKikKLQkgICAgICBfTFRfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfcGljLCAkMSk9JytaJwotCSAgICAgIDs7Ci0JICAgIGVzYWMKLQkgICAgOzsKLQkgICopCi0JICAgIDs7Ci0JZXNhYwotCTs7Ci0gICAgICBpbnRlcml4KikKLQkjIFRoaXMgaXMgYzg5LCB3aGljaCBpcyBNUyBWaXN1YWwgQysrIChubyBzaGFyZWQgbGlicykKLQkjIEFueW9uZSB3YW50cyB0byBkbyBhIHBvcnQ/Ci0JOzsKLSAgICAgIGlyaXg1KiB8IGlyaXg2KiB8IG5vbnN0b3B1eCopCi0JY2FzZSAkY2NfYmFzZW5hbWUgaW4KLQkgIENDKikKLQkgICAgX0xUX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX3dsLCAkMSk9Jy1XbCwnCi0JICAgIF9MVF9UQUdWQVIobHRfcHJvZ19jb21waWxlcl9zdGF0aWMsICQxKT0nLW5vbl9zaGFyZWQnCi0JICAgICMgQ0MgcGljIGZsYWcgLUtQSUMgaXMgdGhlIGRlZmF1bHQuCi0JICAgIDs7Ci0JICAqKQotCSAgICA7OwotCWVzYWMKLQk7OwotICAgICAgbGludXgqIHwgaypic2QqLWdudSB8IGtvcGVuc29sYXJpcyotZ251KQotCWNhc2UgJGNjX2Jhc2VuYW1lIGluCi0JICBLQ0MqKQotCSAgICAjIEtBSSBDKysgQ29tcGlsZXIKLQkgICAgX0xUX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX3dsLCAkMSk9Jy0tYmFja2VuZCAtV2wsJwotCSAgICBfTFRfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfcGljLCAkMSk9Jy1mUElDJwotCSAgICA7OwotCSAgZWNwYyogKQotCSAgICAjIG9sZCBJbnRlbCBDKysgZm9yIHg4Nl82NCB3aGljaCBzdGlsbCBzdXBwb3J0ZWQgLUtQSUMuCi0JICAgIF9MVF9UQUdWQVIobHRfcHJvZ19jb21waWxlcl93bCwgJDEpPSctV2wsJwotCSAgICBfTFRfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfcGljLCAkMSk9Jy1LUElDJwotCSAgICBfTFRfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfc3RhdGljLCAkMSk9Jy1zdGF0aWMnCi0JICAgIDs7Ci0JICBpY3BjKiApCi0JICAgICMgSW50ZWwgQysrLCB1c2VkIHRvIGJlIGluY29tcGF0aWJsZSB3aXRoIEdDQy4KLQkgICAgIyBJQ0MgMTAgZG9lc24ndCBhY2NlcHQgLUtQSUMgYW55IG1vcmUuCi0JICAgIF9MVF9UQUdWQVIobHRfcHJvZ19jb21waWxlcl93bCwgJDEpPSctV2wsJwotCSAgICBfTFRfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfcGljLCAkMSk9Jy1mUElDJwotCSAgICBfTFRfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfc3RhdGljLCAkMSk9Jy1zdGF0aWMnCi0JICAgIDs7Ci0JICBwZ0NDKiB8IHBnY3BwKikKLQkgICAgIyBQb3J0bGFuZCBHcm91cCBDKysgY29tcGlsZXIKLQkgICAgX0xUX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX3dsLCAkMSk9Jy1XbCwnCi0JICAgIF9MVF9UQUdWQVIobHRfcHJvZ19jb21waWxlcl9waWMsICQxKT0nLWZwaWMnCi0JICAgIF9MVF9UQUdWQVIobHRfcHJvZ19jb21waWxlcl9zdGF0aWMsICQxKT0nLUJzdGF0aWMnCi0JICAgIDs7Ci0JICBjeHgqKQotCSAgICAjIENvbXBhcSBDKysKLQkgICAgIyBNYWtlIHN1cmUgdGhlIFBJQyBmbGFnIGlzIGVtcHR5LiAgSXQgYXBwZWFycyB0aGF0IGFsbCBBbHBoYQotCSAgICAjIExpbnV4IGFuZCBDb21wYXEgVHJ1NjQgVW5peCBvYmplY3RzIGFyZSBQSUMuCi0JICAgIF9MVF9UQUdWQVIobHRfcHJvZ19jb21waWxlcl9waWMsICQxKT0KLQkgICAgX0xUX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX3N0YXRpYywgJDEpPSctbm9uX3NoYXJlZCcKLQkgICAgOzsKLQkgIHhsYyogfCB4bEMqIHwgYmd4bFtbY0NdXSogfCBtcGl4bFtbY0NdXSopCi0JICAgICMgSUJNIFhMIDguMCwgOS4wIG9uIFBQQyBhbmQgQmx1ZUdlbmUKLQkgICAgX0xUX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX3dsLCAkMSk9Jy1XbCwnCi0JICAgIF9MVF9UQUdWQVIobHRfcHJvZ19jb21waWxlcl9waWMsICQxKT0nLXFwaWMnCi0JICAgIF9MVF9UQUdWQVIobHRfcHJvZ19jb21waWxlcl9zdGF0aWMsICQxKT0nLXFzdGF0aWNsaW5rJwotCSAgICA7OwotCSAgKikKLQkgICAgY2FzZSBgJENDIC1WIDI+JjEgfCBzZWQgNXFgIGluCi0JICAgICpTdW5cIEMqKQotCSAgICAgICMgU3VuIEMrKyA1LjkKLQkgICAgICBfTFRfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfcGljLCAkMSk9Jy1LUElDJwotCSAgICAgIF9MVF9UQUdWQVIobHRfcHJvZ19jb21waWxlcl9zdGF0aWMsICQxKT0nLUJzdGF0aWMnCi0JICAgICAgX0xUX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX3dsLCAkMSk9Jy1Rb3B0aW9uIGxkICcKLQkgICAgICA7OwotCSAgICBlc2FjCi0JICAgIDs7Ci0JZXNhYwotCTs7Ci0gICAgICBseW54b3MqKQotCTs7Ci0gICAgICBtODhrKikKLQk7OwotICAgICAgbXZzKikKLQljYXNlICRjY19iYXNlbmFtZSBpbgotCSAgY3h4KikKLQkgICAgX0xUX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX3BpYywgJDEpPSctVyBjLGV4cG9ydGFsbCcKLQkgICAgOzsKLQkgICopCi0JICAgIDs7Ci0JZXNhYwotCTs7Ci0gICAgICBuZXRic2QqKQotCTs7Ci0gICAgICAqcW54KiB8ICpudG8qKQotICAgICAgICAjIFFOWCB1c2VzIEdOVSBDKyssIGJ1dCBuZWVkIHRvIGRlZmluZSAtc2hhcmVkIG9wdGlvbiB0b28sIG90aGVyd2lzZQotICAgICAgICAjIGl0IHdpbGwgY29yZWR1bXAuCi0gICAgICAgIF9MVF9UQUdWQVIobHRfcHJvZ19jb21waWxlcl9waWMsICQxKT0nLWZQSUMgLXNoYXJlZCcKLSAgICAgICAgOzsKLSAgICAgIG9zZjMqIHwgb3NmNCogfCBvc2Y1KikKLQljYXNlICRjY19iYXNlbmFtZSBpbgotCSAgS0NDKikKLQkgICAgX0xUX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX3dsLCAkMSk9Jy0tYmFja2VuZCAtV2wsJwotCSAgICA7OwotCSAgUkNDKikKLQkgICAgIyBSYXRpb25hbCBDKysgMi40LjEKLQkgICAgX0xUX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX3BpYywgJDEpPSctcGljJwotCSAgICA7OwotCSAgY3h4KikKLQkgICAgIyBEaWdpdGFsL0NvbXBhcSBDKysKLQkgICAgX0xUX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX3dsLCAkMSk9Jy1XbCwnCi0JICAgICMgTWFrZSBzdXJlIHRoZSBQSUMgZmxhZyBpcyBlbXB0eS4gIEl0IGFwcGVhcnMgdGhhdCBhbGwgQWxwaGEKLQkgICAgIyBMaW51eCBhbmQgQ29tcGFxIFRydTY0IFVuaXggb2JqZWN0cyBhcmUgUElDLgotCSAgICBfTFRfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfcGljLCAkMSk9Ci0JICAgIF9MVF9UQUdWQVIobHRfcHJvZ19jb21waWxlcl9zdGF0aWMsICQxKT0nLW5vbl9zaGFyZWQnCi0JICAgIDs7Ci0JICAqKQotCSAgICA7OwotCWVzYWMKLQk7OwotICAgICAgcHNvcyopCi0JOzsKLSAgICAgIHNvbGFyaXMqKQotCWNhc2UgJGNjX2Jhc2VuYW1lIGluCi0JICBDQyogfCBzdW5DQyopCi0JICAgICMgU3VuIEMrKyA0LjIsIDUueCBhbmQgQ2VudGVybGluZSBDKysKLQkgICAgX0xUX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX3BpYywgJDEpPSctS1BJQycKLQkgICAgX0xUX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX3N0YXRpYywgJDEpPSctQnN0YXRpYycKLQkgICAgX0xUX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX3dsLCAkMSk9Jy1Rb3B0aW9uIGxkICcKLQkgICAgOzsKLQkgIGdjeCopCi0JICAgICMgR3JlZW4gSGlsbHMgQysrIENvbXBpbGVyCi0JICAgIF9MVF9UQUdWQVIobHRfcHJvZ19jb21waWxlcl9waWMsICQxKT0nLVBJQycKLQkgICAgOzsKLQkgICopCi0JICAgIDs7Ci0JZXNhYwotCTs7Ci0gICAgICBzdW5vczQqKQotCWNhc2UgJGNjX2Jhc2VuYW1lIGluCi0JICBDQyopCi0JICAgICMgU3VuIEMrKyA0LngKLQkgICAgX0xUX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX3BpYywgJDEpPSctcGljJwotCSAgICBfTFRfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfc3RhdGljLCAkMSk9Jy1Cc3RhdGljJwotCSAgICA7OwotCSAgbGNjKikKLQkgICAgIyBMdWNpZAotCSAgICBfTFRfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfcGljLCAkMSk9Jy1waWMnCi0JICAgIDs7Ci0JICAqKQotCSAgICA7OwotCWVzYWMKLQk7OwotICAgICAgc3lzdjUqIHwgdW5peHdhcmUqIHwgc2NvMy4ydjUqIHwgc2NvNXY2KiB8IE9wZW5VTklYKikKLQljYXNlICRjY19iYXNlbmFtZSBpbgotCSAgQ0MqKQotCSAgICBfTFRfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfd2wsICQxKT0nLVdsLCcKLQkgICAgX0xUX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX3BpYywgJDEpPSctS1BJQycKLQkgICAgX0xUX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX3N0YXRpYywgJDEpPSctQnN0YXRpYycKLQkgICAgOzsKLQllc2FjCi0JOzsKLSAgICAgIHRhbmRlbSopCi0JY2FzZSAkY2NfYmFzZW5hbWUgaW4KLQkgIE5DQyopCi0JICAgICMgTm9uU3RvcC1VWCBOQ0MgMy4yMAotCSAgICBfTFRfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfcGljLCAkMSk9Jy1LUElDJwotCSAgICA7OwotCSAgKikKLQkgICAgOzsKLQllc2FjCi0JOzsKLSAgICAgIHZ4d29ya3MqKQotCTs7Ci0gICAgICAqKQotCV9MVF9UQUdWQVIobHRfcHJvZ19jb21waWxlcl9jYW5fYnVpbGRfc2hhcmVkLCAkMSk9bm8KLQk7OwotICAgIGVzYWMKLSAgZmkKLV0sCi1bCi0gIGlmIHRlc3QgIiRHQ0MiID0geWVzOyB0aGVuCi0gICAgX0xUX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX3dsLCAkMSk9Jy1XbCwnCi0gICAgX0xUX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX3N0YXRpYywgJDEpPSctc3RhdGljJwotCi0gICAgY2FzZSAkaG9zdF9vcyBpbgotICAgICAgYWl4KikKLSAgICAgICMgQWxsIEFJWCBjb2RlIGlzIFBJQy4KLSAgICAgIGlmIHRlc3QgIiRob3N0X2NwdSIgPSBpYTY0OyB0aGVuCi0JIyBBSVggNSBub3cgc3VwcG9ydHMgSUE2NCBwcm9jZXNzb3IKLQlfTFRfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfc3RhdGljLCAkMSk9Jy1Cc3RhdGljJwotICAgICAgZmkKLSAgICAgIDs7Ci0KLSAgICBhbWlnYW9zKikKLSAgICAgIGNhc2UgJGhvc3RfY3B1IGluCi0gICAgICBwb3dlcnBjKQotICAgICAgICAgICAgIyBzZWUgY29tbWVudCBhYm91dCBBbWlnYU9TNCAuc28gc3VwcG9ydAotICAgICAgICAgICAgX0xUX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX3BpYywgJDEpPSctZlBJQycKLSAgICAgICAgOzsKLSAgICAgIG02OGspCi0gICAgICAgICAgICAjIEZJWE1FOiB3ZSBuZWVkIGF0IGxlYXN0IDY4MDIwIGNvZGUgdG8gYnVpbGQgc2hhcmVkIGxpYnJhcmllcywgYnV0Ci0gICAgICAgICAgICAjIGFkZGluZyB0aGUgYC1tNjgwMjAnIGZsYWcgdG8gR0NDIHByZXZlbnRzIGJ1aWxkaW5nIGFueXRoaW5nIGJldHRlciwKLSAgICAgICAgICAgICMgbGlrZSBgLW02ODA0MCcuCi0gICAgICAgICAgICBfTFRfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfcGljLCAkMSk9Jy1tNjgwMjAgLXJlc2lkZW50MzIgLW1hbHdheXMtcmVzdG9yZS1hNCcKLSAgICAgICAgOzsKLSAgICAgIGVzYWMKLSAgICAgIDs7Ci0KLSAgICBiZW9zKiB8IGlyaXg1KiB8IGlyaXg2KiB8IG5vbnN0b3B1eCogfCBvc2YzKiB8IG9zZjQqIHwgb3NmNSopCi0gICAgICAjIFBJQyBpcyB0aGUgZGVmYXVsdCBmb3IgdGhlc2UgT1Nlcy4KLSAgICAgIDs7Ci0KLSAgICBtaW5ndyogfCBjeWd3aW4qIHwgcHczMiogfCBvczIqIHwgY2VnY2MqKQotICAgICAgIyBUaGlzIGhhY2sgaXMgc28gdGhhdCB0aGUgc291cmNlIGZpbGUgY2FuIHRlbGwgd2hldGhlciBpdCBpcyBiZWluZwotICAgICAgIyBidWlsdCBmb3IgaW5jbHVzaW9uIGluIGEgZGxsIChhbmQgc2hvdWxkIGV4cG9ydCBzeW1ib2xzIGZvciBleGFtcGxlKS4KLSAgICAgICMgQWx0aG91Z2ggdGhlIGN5Z3dpbiBnY2MgaWdub3JlcyAtZlBJQywgc3RpbGwgbmVlZCB0aGlzIGZvciBvbGQtc3R5bGUKLSAgICAgICMgKC0tZGlzYWJsZS1hdXRvLWltcG9ydCkgbGlicmFyaWVzCi0gICAgICBtNF9pZihbJDFdLCBbR0NKXSwgW10sCi0JW19MVF9UQUdWQVIobHRfcHJvZ19jb21waWxlcl9waWMsICQxKT0nLURETExfRVhQT1JUJ10pCi0gICAgICA7OwotCi0gICAgZGFyd2luKiB8IHJoYXBzb2R5KikKLSAgICAgICMgUElDIGlzIHRoZSBkZWZhdWx0IG9uIHRoaXMgcGxhdGZvcm0KLSAgICAgICMgQ29tbW9uIHN5bWJvbHMgbm90IGFsbG93ZWQgaW4gTUhfRFlMSUIgZmlsZXMKLSAgICAgIF9MVF9UQUdWQVIobHRfcHJvZ19jb21waWxlcl9waWMsICQxKT0nLWZuby1jb21tb24nCi0gICAgICA7OwotCi0gICAgaGFpa3UqKQotICAgICAgIyBQSUMgaXMgdGhlIGRlZmF1bHQgZm9yIEhhaWt1LgotICAgICAgIyBUaGUgIi1zdGF0aWMiIGZsYWcgZXhpc3RzLCBidXQgaXMgYnJva2VuLgotICAgICAgX0xUX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX3N0YXRpYywgJDEpPQotICAgICAgOzsKLQotICAgIGhwdXgqKQotICAgICAgIyBQSUMgaXMgdGhlIGRlZmF1bHQgZm9yIDY0LWJpdCBQQSBIUC1VWCwgYnV0IG5vdCBmb3IgMzItYml0Ci0gICAgICAjIFBBIEhQLVVYLiAgT24gSUE2NCBIUC1VWCwgUElDIGlzIHRoZSBkZWZhdWx0IGJ1dCB0aGUgcGljIGZsYWcKLSAgICAgICMgc2V0cyB0aGUgZGVmYXVsdCBUTFMgbW9kZWwgYW5kIGFmZmVjdHMgaW5saW5pbmcuCi0gICAgICBjYXNlICRob3N0X2NwdSBpbgotICAgICAgaHBwYSo2NCopCi0JIyArWiB0aGUgZGVmYXVsdAotCTs7Ci0gICAgICAqKQotCV9MVF9UQUdWQVIobHRfcHJvZ19jb21waWxlcl9waWMsICQxKT0nLWZQSUMnCi0JOzsKLSAgICAgIGVzYWMKLSAgICAgIDs7Ci0KLSAgICBpbnRlcml4W1szLTldXSopCi0gICAgICAjIEludGVyaXggMy54IGdjYyAtZnBpYy8tZlBJQyBvcHRpb25zIGdlbmVyYXRlIGJyb2tlbiBjb2RlLgotICAgICAgIyBJbnN0ZWFkLCB3ZSByZWxvY2F0ZSBzaGFyZWQgbGlicmFyaWVzIGF0IHJ1bnRpbWUuCi0gICAgICA7OwotCi0gICAgbXNkb3NkamdwcCopCi0gICAgICAjIEp1c3QgYmVjYXVzZSB3ZSB1c2UgR0NDIGRvZXNuJ3QgbWVhbiB3ZSBzdWRkZW5seSBnZXQgc2hhcmVkIGxpYnJhcmllcwotICAgICAgIyBvbiBzeXN0ZW1zIHRoYXQgZG9uJ3Qgc3VwcG9ydCB0aGVtLgotICAgICAgX0xUX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX2Nhbl9idWlsZF9zaGFyZWQsICQxKT1ubwotICAgICAgZW5hYmxlX3NoYXJlZD1ubwotICAgICAgOzsKLQotICAgICpudG8qIHwgKnFueCopCi0gICAgICAjIFFOWCB1c2VzIEdOVSBDKyssIGJ1dCBuZWVkIHRvIGRlZmluZSAtc2hhcmVkIG9wdGlvbiB0b28sIG90aGVyd2lzZQotICAgICAgIyBpdCB3aWxsIGNvcmVkdW1wLgotICAgICAgX0xUX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX3BpYywgJDEpPSctZlBJQyAtc2hhcmVkJwotICAgICAgOzsKLQotICAgIHN5c3Y0Kk1QKikKLSAgICAgIGlmIHRlc3QgLWQgL3Vzci9uZWM7IHRoZW4KLQlfTFRfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfcGljLCAkMSk9LUtjb25mb3JtX3BpYwotICAgICAgZmkKLSAgICAgIDs7Ci0KLSAgICAqKQotICAgICAgX0xUX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX3BpYywgJDEpPSctZlBJQycKLSAgICAgIDs7Ci0gICAgZXNhYwotCi0gICAgY2FzZSAkY2NfYmFzZW5hbWUgaW4KLSAgICBudmNjKikgIyBDdWRhIENvbXBpbGVyIERyaXZlciAyLjIKLSAgICAgIF9MVF9UQUdWQVIobHRfcHJvZ19jb21waWxlcl93bCwgJDEpPSctWGxpbmtlciAnCi0gICAgICBfTFRfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfcGljLCAkMSk9Jy1YY29tcGlsZXIgLWZQSUMnCi0gICAgICA7OwotICAgIGVzYWMKLSAgZWxzZQotICAgICMgUE9SVE1FIENoZWNrIGZvciBmbGFnIHRvIHBhc3MgbGlua2VyIGZsYWdzIHRocm91Z2ggdGhlIHN5c3RlbSBjb21waWxlci4KLSAgICBjYXNlICRob3N0X29zIGluCi0gICAgYWl4KikKLSAgICAgIF9MVF9UQUdWQVIobHRfcHJvZ19jb21waWxlcl93bCwgJDEpPSctV2wsJwotICAgICAgaWYgdGVzdCAiJGhvc3RfY3B1IiA9IGlhNjQ7IHRoZW4KLQkjIEFJWCA1IG5vdyBzdXBwb3J0cyBJQTY0IHByb2Nlc3NvcgotCV9MVF9UQUdWQVIobHRfcHJvZ19jb21waWxlcl9zdGF0aWMsICQxKT0nLUJzdGF0aWMnCi0gICAgICBlbHNlCi0JX0xUX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX3N0YXRpYywgJDEpPSctYm5zbyAtYkk6L2xpYi9zeXNjYWxscy5leHAnCi0gICAgICBmaQotICAgICAgOzsKLQotICAgIG1pbmd3KiB8IGN5Z3dpbiogfCBwdzMyKiB8IG9zMiogfCBjZWdjYyopCi0gICAgICAjIFRoaXMgaGFjayBpcyBzbyB0aGF0IHRoZSBzb3VyY2UgZmlsZSBjYW4gdGVsbCB3aGV0aGVyIGl0IGlzIGJlaW5nCi0gICAgICAjIGJ1aWx0IGZvciBpbmNsdXNpb24gaW4gYSBkbGwgKGFuZCBzaG91bGQgZXhwb3J0IHN5bWJvbHMgZm9yIGV4YW1wbGUpLgotICAgICAgbTRfaWYoWyQxXSwgW0dDSl0sIFtdLAotCVtfTFRfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfcGljLCAkMSk9Jy1ERExMX0VYUE9SVCddKQotICAgICAgOzsKLQotICAgIGhwdXg5KiB8IGhwdXgxMCogfCBocHV4MTEqKQotICAgICAgX0xUX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX3dsLCAkMSk9Jy1XbCwnCi0gICAgICAjIFBJQyBpcyB0aGUgZGVmYXVsdCBmb3IgSUE2NCBIUC1VWCBhbmQgNjQtYml0IEhQLVVYLCBidXQKLSAgICAgICMgbm90IGZvciBQQSBIUC1VWC4KLSAgICAgIGNhc2UgJGhvc3RfY3B1IGluCi0gICAgICBocHBhKjY0KnxpYTY0KikKLQkjICtaIHRoZSBkZWZhdWx0Ci0JOzsKLSAgICAgICopCi0JX0xUX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX3BpYywgJDEpPScrWicKLQk7OwotICAgICAgZXNhYwotICAgICAgIyBJcyB0aGVyZSBhIGJldHRlciBsdF9wcm9nX2NvbXBpbGVyX3N0YXRpYyB0aGF0IHdvcmtzIHdpdGggdGhlIGJ1bmRsZWQgQ0M/Ci0gICAgICBfTFRfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfc3RhdGljLCAkMSk9JyR7d2x9LWEgJHt3bH1hcmNoaXZlJwotICAgICAgOzsKLQotICAgIGlyaXg1KiB8IGlyaXg2KiB8IG5vbnN0b3B1eCopCi0gICAgICBfTFRfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfd2wsICQxKT0nLVdsLCcKLSAgICAgICMgUElDICh3aXRoIC1LUElDKSBpcyB0aGUgZGVmYXVsdC4KLSAgICAgIF9MVF9UQUdWQVIobHRfcHJvZ19jb21waWxlcl9zdGF0aWMsICQxKT0nLW5vbl9zaGFyZWQnCi0gICAgICA7OwotCi0gICAgbGludXgqIHwgaypic2QqLWdudSB8IGtvcGVuc29sYXJpcyotZ251KQotICAgICAgY2FzZSAkY2NfYmFzZW5hbWUgaW4KLSAgICAgICMgb2xkIEludGVsIGZvciB4ODZfNjQgd2hpY2ggc3RpbGwgc3VwcG9ydGVkIC1LUElDLgotICAgICAgZWNjKikKLQlfTFRfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfd2wsICQxKT0nLVdsLCcKLQlfTFRfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfcGljLCAkMSk9Jy1LUElDJwotCV9MVF9UQUdWQVIobHRfcHJvZ19jb21waWxlcl9zdGF0aWMsICQxKT0nLXN0YXRpYycKLSAgICAgICAgOzsKLSAgICAgICMgaWNjIHVzZWQgdG8gYmUgaW5jb21wYXRpYmxlIHdpdGggR0NDLgotICAgICAgIyBJQ0MgMTAgZG9lc24ndCBhY2NlcHQgLUtQSUMgYW55IG1vcmUuCi0gICAgICBpY2MqIHwgaWZvcnQqKQotCV9MVF9UQUdWQVIobHRfcHJvZ19jb21waWxlcl93bCwgJDEpPSctV2wsJwotCV9MVF9UQUdWQVIobHRfcHJvZ19jb21waWxlcl9waWMsICQxKT0nLWZQSUMnCi0JX0xUX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX3N0YXRpYywgJDEpPSctc3RhdGljJwotICAgICAgICA7OwotICAgICAgIyBMYWhleSBGb3J0cmFuIDguMS4KLSAgICAgIGxmOTUqKQotCV9MVF9UQUdWQVIobHRfcHJvZ19jb21waWxlcl93bCwgJDEpPSctV2wsJwotCV9MVF9UQUdWQVIobHRfcHJvZ19jb21waWxlcl9waWMsICQxKT0nLS1zaGFyZWQnCi0JX0xUX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX3N0YXRpYywgJDEpPSctLXN0YXRpYycKLQk7OwotICAgICAgbmFnZm9yKikKLQkjIE5BRyBGb3J0cmFuIGNvbXBpbGVyCi0JX0xUX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX3dsLCAkMSk9Jy1XbCwtV2wsLCcKLQlfTFRfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfcGljLCAkMSk9Jy1QSUMnCi0JX0xUX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX3N0YXRpYywgJDEpPSctQnN0YXRpYycKLQk7OwotICAgICAgcGdjYyogfCBwZ2Y3NyogfCBwZ2Y5MCogfCBwZ2Y5NSogfCBwZ2ZvcnRyYW4qKQotICAgICAgICAjIFBvcnRsYW5kIEdyb3VwIGNvbXBpbGVycyAoKm5vdCogdGhlIFBlbnRpdW0gZ2NjIGNvbXBpbGVyLAotCSMgd2hpY2ggbG9va3MgdG8gYmUgYSBkZWFkIHByb2plY3QpCi0JX0xUX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX3dsLCAkMSk9Jy1XbCwnCi0JX0xUX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX3BpYywgJDEpPSctZnBpYycKLQlfTFRfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfc3RhdGljLCAkMSk9Jy1Cc3RhdGljJwotICAgICAgICA7OwotICAgICAgY2NjKikKLSAgICAgICAgX0xUX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX3dsLCAkMSk9Jy1XbCwnCi0gICAgICAgICMgQWxsIEFscGhhIGNvZGUgaXMgUElDLgotICAgICAgICBfTFRfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfc3RhdGljLCAkMSk9Jy1ub25fc2hhcmVkJwotICAgICAgICA7OwotICAgICAgeGwqIHwgYmd4bCogfCBiZ2YqIHwgbXBpeGwqKQotCSMgSUJNIFhMIEMgOC4wL0ZvcnRyYW4gMTAuMSwgMTEuMSBvbiBQUEMgYW5kIEJsdWVHZW5lCi0JX0xUX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX3dsLCAkMSk9Jy1XbCwnCi0JX0xUX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX3BpYywgJDEpPSctcXBpYycKLQlfTFRfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfc3RhdGljLCAkMSk9Jy1xc3RhdGljbGluaycKLQk7OwotICAgICAgKikKLQljYXNlIGAkQ0MgLVYgMj4mMSB8IHNlZCA1cWAgaW4KLQkqU3VuXCBGKiB8ICpTdW4qRm9ydHJhbiopCi0JICAjIFN1biBGb3J0cmFuIDguMyBwYXNzZXMgYWxsIHVucmVjb2duaXplZCBmbGFncyB0byB0aGUgbGlua2VyCi0JICBfTFRfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfcGljLCAkMSk9Jy1LUElDJwotCSAgX0xUX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX3N0YXRpYywgJDEpPSctQnN0YXRpYycKLQkgIF9MVF9UQUdWQVIobHRfcHJvZ19jb21waWxlcl93bCwgJDEpPScnCi0JICA7OwotCSpTdW5cIEMqKQotCSAgIyBTdW4gQyA1LjkKLQkgIF9MVF9UQUdWQVIobHRfcHJvZ19jb21waWxlcl9waWMsICQxKT0nLUtQSUMnCi0JICBfTFRfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfc3RhdGljLCAkMSk9Jy1Cc3RhdGljJwotCSAgX0xUX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX3dsLCAkMSk9Jy1XbCwnCi0JICA7OwotCWVzYWMKLQk7OwotICAgICAgZXNhYwotICAgICAgOzsKLQotICAgIG5ld3NvczYpCi0gICAgICBfTFRfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfcGljLCAkMSk9Jy1LUElDJwotICAgICAgX0xUX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX3N0YXRpYywgJDEpPSctQnN0YXRpYycKLSAgICAgIDs7Ci0KLSAgICAqbnRvKiB8ICpxbngqKQotICAgICAgIyBRTlggdXNlcyBHTlUgQysrLCBidXQgbmVlZCB0byBkZWZpbmUgLXNoYXJlZCBvcHRpb24gdG9vLCBvdGhlcndpc2UKLSAgICAgICMgaXQgd2lsbCBjb3JlZHVtcC4KLSAgICAgIF9MVF9UQUdWQVIobHRfcHJvZ19jb21waWxlcl9waWMsICQxKT0nLWZQSUMgLXNoYXJlZCcKLSAgICAgIDs7Ci0KLSAgICBvc2YzKiB8IG9zZjQqIHwgb3NmNSopCi0gICAgICBfTFRfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfd2wsICQxKT0nLVdsLCcKLSAgICAgICMgQWxsIE9TRi8xIGNvZGUgaXMgUElDLgotICAgICAgX0xUX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX3N0YXRpYywgJDEpPSctbm9uX3NoYXJlZCcKLSAgICAgIDs7Ci0KLSAgICByZG9zKikKLSAgICAgIF9MVF9UQUdWQVIobHRfcHJvZ19jb21waWxlcl9zdGF0aWMsICQxKT0nLW5vbl9zaGFyZWQnCi0gICAgICA7OwotCi0gICAgc29sYXJpcyopCi0gICAgICBfTFRfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfcGljLCAkMSk9Jy1LUElDJwotICAgICAgX0xUX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX3N0YXRpYywgJDEpPSctQnN0YXRpYycKLSAgICAgIGNhc2UgJGNjX2Jhc2VuYW1lIGluCi0gICAgICBmNzcqIHwgZjkwKiB8IGY5NSogfCBzdW5mNzcqIHwgc3VuZjkwKiB8IHN1bmY5NSopCi0JX0xUX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX3dsLCAkMSk9Jy1Rb3B0aW9uIGxkICc7OwotICAgICAgKikKLQlfTFRfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfd2wsICQxKT0nLVdsLCc7OwotICAgICAgZXNhYwotICAgICAgOzsKLQotICAgIHN1bm9zNCopCi0gICAgICBfTFRfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfd2wsICQxKT0nLVFvcHRpb24gbGQgJwotICAgICAgX0xUX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX3BpYywgJDEpPSctUElDJwotICAgICAgX0xUX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX3N0YXRpYywgJDEpPSctQnN0YXRpYycKLSAgICAgIDs7Ci0KLSAgICBzeXN2NCB8IHN5c3Y0LjJ1dzIqIHwgc3lzdjQuMyopCi0gICAgICBfTFRfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfd2wsICQxKT0nLVdsLCcKLSAgICAgIF9MVF9UQUdWQVIobHRfcHJvZ19jb21waWxlcl9waWMsICQxKT0nLUtQSUMnCi0gICAgICBfTFRfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfc3RhdGljLCAkMSk9Jy1Cc3RhdGljJwotICAgICAgOzsKLQotICAgIHN5c3Y0Kk1QKikKLSAgICAgIGlmIHRlc3QgLWQgL3Vzci9uZWMgO3RoZW4KLQlfTFRfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfcGljLCAkMSk9Jy1LY29uZm9ybV9waWMnCi0JX0xUX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX3N0YXRpYywgJDEpPSctQnN0YXRpYycKLSAgICAgIGZpCi0gICAgICA7OwotCi0gICAgc3lzdjUqIHwgdW5peHdhcmUqIHwgc2NvMy4ydjUqIHwgc2NvNXY2KiB8IE9wZW5VTklYKikKLSAgICAgIF9MVF9UQUdWQVIobHRfcHJvZ19jb21waWxlcl93bCwgJDEpPSctV2wsJwotICAgICAgX0xUX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX3BpYywgJDEpPSctS1BJQycKLSAgICAgIF9MVF9UQUdWQVIobHRfcHJvZ19jb21waWxlcl9zdGF0aWMsICQxKT0nLUJzdGF0aWMnCi0gICAgICA7OwotCi0gICAgdW5pY29zKikKLSAgICAgIF9MVF9UQUdWQVIobHRfcHJvZ19jb21waWxlcl93bCwgJDEpPSctV2wsJwotICAgICAgX0xUX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX2Nhbl9idWlsZF9zaGFyZWQsICQxKT1ubwotICAgICAgOzsKLQotICAgIHV0czQqKQotICAgICAgX0xUX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX3BpYywgJDEpPSctcGljJwotICAgICAgX0xUX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX3N0YXRpYywgJDEpPSctQnN0YXRpYycKLSAgICAgIDs7Ci0KLSAgICAqKQotICAgICAgX0xUX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX2Nhbl9idWlsZF9zaGFyZWQsICQxKT1ubwotICAgICAgOzsKLSAgICBlc2FjCi0gIGZpCi1dKQotY2FzZSAkaG9zdF9vcyBpbgotICAjIEZvciBwbGF0Zm9ybXMgd2hpY2ggZG8gbm90IHN1cHBvcnQgUElDLCAtRFBJQyBpcyBtZWFuaW5nbGVzczoKLSAgKmRqZ3BwKikKLSAgICBfTFRfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfcGljLCAkMSk9Ci0gICAgOzsKLSAgKikKLSAgICBfTFRfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfcGljLCAkMSk9IiRfTFRfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfcGljLCAkMSlAJnRAbTRfaWYoWyQxXSxbXSxbIC1EUElDXSxbbTRfaWYoWyQxXSxbQ1hYXSxbIC1EUElDXSxbXSldKSIKLSAgICA7OwotZXNhYwotCi1BQ19DQUNIRV9DSEVDSyhbZm9yICRjb21waWxlciBvcHRpb24gdG8gcHJvZHVjZSBQSUNdLAotICBbX0xUX1RBR1ZBUihsdF9jdl9wcm9nX2NvbXBpbGVyX3BpYywgJDEpXSwKLSAgW19MVF9UQUdWQVIobHRfY3ZfcHJvZ19jb21waWxlcl9waWMsICQxKT0kX0xUX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX3BpYywgJDEpXSkKLV9MVF9UQUdWQVIobHRfcHJvZ19jb21waWxlcl9waWMsICQxKT0kX0xUX1RBR1ZBUihsdF9jdl9wcm9nX2NvbXBpbGVyX3BpYywgJDEpCi0KLSMKLSMgQ2hlY2sgdG8gbWFrZSBzdXJlIHRoZSBQSUMgZmxhZyBhY3R1YWxseSB3b3Jrcy4KLSMKLWlmIHRlc3QgLW4gIiRfTFRfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfcGljLCAkMSkiOyB0aGVuCi0gIF9MVF9DT01QSUxFUl9PUFRJT04oW2lmICRjb21waWxlciBQSUMgZmxhZyAkX0xUX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX3BpYywgJDEpIHdvcmtzXSwKLSAgICBbX0xUX1RBR1ZBUihsdF9jdl9wcm9nX2NvbXBpbGVyX3BpY193b3JrcywgJDEpXSwKLSAgICBbJF9MVF9UQUdWQVIobHRfcHJvZ19jb21waWxlcl9waWMsICQxKUAmdEBtNF9pZihbJDFdLFtdLFsgLURQSUNdLFttNF9pZihbJDFdLFtDWFhdLFsgLURQSUNdLFtdKV0pXSwgW10sCi0gICAgW2Nhc2UgJF9MVF9UQUdWQVIobHRfcHJvZ19jb21waWxlcl9waWMsICQxKSBpbgotICAgICAiIiB8ICIgIiopIDs7Ci0gICAgICopIF9MVF9UQUdWQVIobHRfcHJvZ19jb21waWxlcl9waWMsICQxKT0iICRfTFRfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfcGljLCAkMSkiIDs7Ci0gICAgIGVzYWNdLAotICAgIFtfTFRfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfcGljLCAkMSk9Ci0gICAgIF9MVF9UQUdWQVIobHRfcHJvZ19jb21waWxlcl9jYW5fYnVpbGRfc2hhcmVkLCAkMSk9bm9dKQotZmkKLV9MVF9UQUdERUNMKFtwaWNfZmxhZ10sIFtsdF9wcm9nX2NvbXBpbGVyX3BpY10sIFsxXSwKLQlbQWRkaXRpb25hbCBjb21waWxlciBmbGFncyBmb3IgYnVpbGRpbmcgbGlicmFyeSBvYmplY3RzXSkKLQotX0xUX1RBR0RFQ0woW3dsXSwgW2x0X3Byb2dfY29tcGlsZXJfd2xdLCBbMV0sCi0JW0hvdyB0byBwYXNzIGEgbGlua2VyIGZsYWcgdGhyb3VnaCB0aGUgY29tcGlsZXJdKQotIwotIyBDaGVjayB0byBtYWtlIHN1cmUgdGhlIHN0YXRpYyBmbGFnIGFjdHVhbGx5IHdvcmtzLgotIwotd2w9JF9MVF9UQUdWQVIobHRfcHJvZ19jb21waWxlcl93bCwgJDEpIGV2YWwgbHRfdG1wX3N0YXRpY19mbGFnPVwiJF9MVF9UQUdWQVIobHRfcHJvZ19jb21waWxlcl9zdGF0aWMsICQxKVwiCi1fTFRfTElOS0VSX09QVElPTihbaWYgJGNvbXBpbGVyIHN0YXRpYyBmbGFnICRsdF90bXBfc3RhdGljX2ZsYWcgd29ya3NdLAotICBfTFRfVEFHVkFSKGx0X2N2X3Byb2dfY29tcGlsZXJfc3RhdGljX3dvcmtzLCAkMSksCi0gICRsdF90bXBfc3RhdGljX2ZsYWcsCi0gIFtdLAotICBbX0xUX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX3N0YXRpYywgJDEpPV0pCi1fTFRfVEFHREVDTChbbGlua19zdGF0aWNfZmxhZ10sIFtsdF9wcm9nX2NvbXBpbGVyX3N0YXRpY10sIFsxXSwKLQlbQ29tcGlsZXIgZmxhZyB0byBwcmV2ZW50IGR5bmFtaWMgbGlua2luZ10pCi1dKSMgX0xUX0NPTVBJTEVSX1BJQwotCi0KLSMgX0xUX0xJTktFUl9TSExJQlMoW1RBR05BTUVdKQotIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0jIFNlZSBpZiB0aGUgbGlua2VyIHN1cHBvcnRzIGJ1aWxkaW5nIHNoYXJlZCBsaWJyYXJpZXMuCi1tNF9kZWZ1bihbX0xUX0xJTktFUl9TSExJQlNdLAotW0FDX1JFUVVJUkUoW0xUX1BBVEhfTERdKWRubAotQUNfUkVRVUlSRShbTFRfUEFUSF9OTV0pZG5sCi1tNF9yZXF1aXJlKFtfTFRfUEFUSF9NQU5JRkVTVF9UT09MXSlkbmwKLW00X3JlcXVpcmUoW19MVF9GSUxFVVRJTFNfREVGQVVMVFNdKWRubAotbTRfcmVxdWlyZShbX0xUX0RFQ0xfRUdSRVBdKWRubAotbTRfcmVxdWlyZShbX0xUX0RFQ0xfU0VEXSlkbmwKLW00X3JlcXVpcmUoW19MVF9DTURfR0xPQkFMX1NZTUJPTFNdKWRubAotbTRfcmVxdWlyZShbX0xUX1RBR19DT01QSUxFUl0pZG5sCi1BQ19NU0dfQ0hFQ0tJTkcoW3doZXRoZXIgdGhlICRjb21waWxlciBsaW5rZXIgKCRMRCkgc3VwcG9ydHMgc2hhcmVkIGxpYnJhcmllc10pCi1tNF9pZihbJDFdLCBbQ1hYXSwgWwotICBfTFRfVEFHVkFSKGV4cG9ydF9zeW1ib2xzX2NtZHMsICQxKT0nJE5NICRsaWJvYmpzICRjb252ZW5pZW5jZSB8ICRnbG9iYWxfc3ltYm9sX3BpcGUgfCAkU0VEICdcJydzLy4qIC8vJ1wnJyB8IHNvcnQgfCB1bmlxID4gJGV4cG9ydF9zeW1ib2xzJwotICBfTFRfVEFHVkFSKGV4Y2x1ZGVfZXhwc3ltcywgJDEpPVsnX0dMT0JBTF9PRkZTRVRfVEFCTEVffF9HTE9CQUxfX0ZbSURdXy4qJ10KLSAgY2FzZSAkaG9zdF9vcyBpbgotICBhaXhbWzQtOV1dKikKLSAgICAjIElmIHdlJ3JlIHVzaW5nIEdOVSBubSwgdGhlbiB3ZSBkb24ndCB3YW50IHRoZSAiLUMiIG9wdGlvbi4KLSAgICAjIC1DIG1lYW5zIGRlbWFuZ2xlIHRvIEFJWCBubSwgYnV0IG1lYW5zIGRvbid0IGRlbWFuZ2xlIHdpdGggR05VIG5tCi0gICAgIyBBbHNvLCBBSVggbm0gdHJlYXRzIHdlYWsgZGVmaW5lZCBzeW1ib2xzIGxpa2Ugb3RoZXIgZ2xvYmFsIGRlZmluZWQKLSAgICAjIHN5bWJvbHMsIHdoZXJlYXMgR05VIG5tIG1hcmtzIHRoZW0gYXMgIlciLgotICAgIGlmICROTSAtViAyPiYxIHwgJEdSRVAgJ0dOVScgPiAvZGV2L251bGw7IHRoZW4KLSAgICAgIF9MVF9UQUdWQVIoZXhwb3J0X3N5bWJvbHNfY21kcywgJDEpPSckTk0gLUJwZyAkbGlib2JqcyAkY29udmVuaWVuY2UgfCBhd2sgJ1wnJ3sgaWYgKCgoXCQgMiA9PSAiVCIpIHx8IChcJCAyID09ICJEIikgfHwgKFwkIDIgPT0gIkIiKSB8fCAoXCQgMiA9PSAiVyIpKSAmJiAoW3N1YnN0cl0oXCQgMywxLDEpICE9ICIuIikpIHsgcHJpbnQgXCQgMyB9IH0nXCcnIHwgc29ydCAtdSA+ICRleHBvcnRfc3ltYm9scycKLSAgICBlbHNlCi0gICAgICBfTFRfVEFHVkFSKGV4cG9ydF9zeW1ib2xzX2NtZHMsICQxKT0nJE5NIC1CQ3BnICRsaWJvYmpzICRjb252ZW5pZW5jZSB8IGF3ayAnXCcneyBpZiAoKChcJCAyID09ICJUIikgfHwgKFwkIDIgPT0gIkQiKSB8fCAoXCQgMiA9PSAiQiIpKSAmJiAoW3N1YnN0cl0oXCQgMywxLDEpICE9ICIuIikpIHsgcHJpbnQgXCQgMyB9IH0nXCcnIHwgc29ydCAtdSA+ICRleHBvcnRfc3ltYm9scycKLSAgICBmaQotICAgIDs7Ci0gIHB3MzIqKQotICAgIF9MVF9UQUdWQVIoZXhwb3J0X3N5bWJvbHNfY21kcywgJDEpPSIkbHRkbGxfY21kcyIKLSAgICA7OwotICBjeWd3aW4qIHwgbWluZ3cqIHwgY2VnY2MqKQotICAgIGNhc2UgJGNjX2Jhc2VuYW1lIGluCi0gICAgY2wqKSA7OwotICAgICopCi0gICAgICBfTFRfVEFHVkFSKGV4cG9ydF9zeW1ib2xzX2NtZHMsICQxKT0nJE5NICRsaWJvYmpzICRjb252ZW5pZW5jZSB8ICRnbG9iYWxfc3ltYm9sX3BpcGUgfCAkU0VEIC1lICdcJycvXltbQkNER1JTXV1bWyBdXS9zLy4qW1sgXV1cKFtbXiBdXSpcKS9cMSBEQVRBLztzL14uKltbIF1dX19ubV9fXChbW14gXV0qXClbWyBdXVtbXiBdXSovXDEgREFUQS87L15JW1sgXV0vZDsvXltbQUlUV11dW1sgXV0vcy8uKiAvLydcJycgfCBzb3J0IHwgdW5pcSA+ICRleHBvcnRfc3ltYm9scycKLSAgICAgIF9MVF9UQUdWQVIoZXhjbHVkZV9leHBzeW1zLCAkMSk9WydbX10rR0xPQkFMX09GRlNFVF9UQUJMRV98W19dK0dMT0JBTF9fW0ZJRF1fLip8W19dK2hlYWRfW0EtWmEtejAtOV9dK19kbGx8W0EtWmEtejAtOV9dK19kbGxfaW5hbWUnXQotICAgICAgOzsKLSAgICBlc2FjCi0gICAgOzsKLSAgKikKLSAgICBfTFRfVEFHVkFSKGV4cG9ydF9zeW1ib2xzX2NtZHMsICQxKT0nJE5NICRsaWJvYmpzICRjb252ZW5pZW5jZSB8ICRnbG9iYWxfc3ltYm9sX3BpcGUgfCAkU0VEICdcJydzLy4qIC8vJ1wnJyB8IHNvcnQgfCB1bmlxID4gJGV4cG9ydF9zeW1ib2xzJwotICAgIDs7Ci0gIGVzYWMKLV0sIFsKLSAgcnVucGF0aF92YXI9Ci0gIF9MVF9UQUdWQVIoYWxsb3dfdW5kZWZpbmVkX2ZsYWcsICQxKT0KLSAgX0xUX1RBR1ZBUihhbHdheXNfZXhwb3J0X3N5bWJvbHMsICQxKT1ubwotICBfTFRfVEFHVkFSKGFyY2hpdmVfY21kcywgJDEpPQotICBfTFRfVEFHVkFSKGFyY2hpdmVfZXhwc3ltX2NtZHMsICQxKT0KLSAgX0xUX1RBR1ZBUihjb21waWxlcl9uZWVkc19vYmplY3QsICQxKT1ubwotICBfTFRfVEFHVkFSKGVuYWJsZV9zaGFyZWRfd2l0aF9zdGF0aWNfcnVudGltZXMsICQxKT1ubwotICBfTFRfVEFHVkFSKGV4cG9ydF9keW5hbWljX2ZsYWdfc3BlYywgJDEpPQotICBfTFRfVEFHVkFSKGV4cG9ydF9zeW1ib2xzX2NtZHMsICQxKT0nJE5NICRsaWJvYmpzICRjb252ZW5pZW5jZSB8ICRnbG9iYWxfc3ltYm9sX3BpcGUgfCAkU0VEICdcJydzLy4qIC8vJ1wnJyB8IHNvcnQgfCB1bmlxID4gJGV4cG9ydF9zeW1ib2xzJwotICBfTFRfVEFHVkFSKGhhcmRjb2RlX2F1dG9tYXRpYywgJDEpPW5vCi0gIF9MVF9UQUdWQVIoaGFyZGNvZGVfZGlyZWN0LCAkMSk9bm8KLSAgX0xUX1RBR1ZBUihoYXJkY29kZV9kaXJlY3RfYWJzb2x1dGUsICQxKT1ubwotICBfTFRfVEFHVkFSKGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWMsICQxKT0KLSAgX0xUX1RBR1ZBUihoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjX2xkLCAkMSk9Ci0gIF9MVF9UQUdWQVIoaGFyZGNvZGVfbGliZGlyX3NlcGFyYXRvciwgJDEpPQotICBfTFRfVEFHVkFSKGhhcmRjb2RlX21pbnVzX0wsICQxKT1ubwotICBfTFRfVEFHVkFSKGhhcmRjb2RlX3NobGlicGF0aF92YXIsICQxKT11bnN1cHBvcnRlZAotICBfTFRfVEFHVkFSKGluaGVyaXRfcnBhdGgsICQxKT1ubwotICBfTFRfVEFHVkFSKGxpbmtfYWxsX2RlcGxpYnMsICQxKT11bmtub3duCi0gIF9MVF9UQUdWQVIobW9kdWxlX2NtZHMsICQxKT0KLSAgX0xUX1RBR1ZBUihtb2R1bGVfZXhwc3ltX2NtZHMsICQxKT0KLSAgX0xUX1RBR1ZBUihvbGRfYXJjaGl2ZV9mcm9tX25ld19jbWRzLCAkMSk9Ci0gIF9MVF9UQUdWQVIob2xkX2FyY2hpdmVfZnJvbV9leHBzeW1zX2NtZHMsICQxKT0KLSAgX0xUX1RBR1ZBUih0aHJlYWRfc2FmZV9mbGFnX3NwZWMsICQxKT0KLSAgX0xUX1RBR1ZBUih3aG9sZV9hcmNoaXZlX2ZsYWdfc3BlYywgJDEpPQotICAjIGluY2x1ZGVfZXhwc3ltcyBzaG91bGQgYmUgYSBsaXN0IG9mIHNwYWNlLXNlcGFyYXRlZCBzeW1ib2xzIHRvIGJlICphbHdheXMqCi0gICMgaW5jbHVkZWQgaW4gdGhlIHN5bWJvbCBsaXN0Ci0gIF9MVF9UQUdWQVIoaW5jbHVkZV9leHBzeW1zLCAkMSk9Ci0gICMgZXhjbHVkZV9leHBzeW1zIGNhbiBiZSBhbiBleHRlbmRlZCByZWdleHAgb2Ygc3ltYm9scyB0byBleGNsdWRlCi0gICMgaXQgd2lsbCBiZSB3cmFwcGVkIGJ5IGAgKCcgYW5kIGApJCcsIHNvIG9uZSBtdXN0IG5vdCBtYXRjaCBiZWdpbm5pbmcgb3IKLSAgIyBlbmQgb2YgbGluZS4gIEV4YW1wbGU6IGBhfGJjfC4qZC4qJyB3aWxsIGV4Y2x1ZGUgdGhlIHN5bWJvbHMgYGEnIGFuZCBgYmMnLAotICAjIGFzIHdlbGwgYXMgYW55IHN5bWJvbCB0aGF0IGNvbnRhaW5zIGBkJy4KLSAgX0xUX1RBR1ZBUihleGNsdWRlX2V4cHN5bXMsICQxKT1bJ19HTE9CQUxfT0ZGU0VUX1RBQkxFX3xfR0xPQkFMX19GW0lEXV8uKiddCi0gICMgQWx0aG91Z2ggX0dMT0JBTF9PRkZTRVRfVEFCTEVfIGlzIGEgdmFsaWQgc3ltYm9sIEMgbmFtZSwgbW9zdCBhLm91dAotICAjIHBsYXRmb3JtcyAoYWIpdXNlIGl0IGluIFBJQyBjb2RlLCBidXQgdGhlaXIgbGlua2VycyBnZXQgY29uZnVzZWQgaWYKLSAgIyB0aGUgc3ltYm9sIGlzIGV4cGxpY2l0bHkgcmVmZXJlbmNlZC4gIFNpbmNlIHBvcnRhYmxlIGNvZGUgY2Fubm90Ci0gICMgcmVseSBvbiB0aGlzIHN5bWJvbCBuYW1lLCBpdCdzIHByb2JhYmx5IGZpbmUgdG8gbmV2ZXIgaW5jbHVkZSBpdCBpbgotICAjIHByZWxvYWRlZCBzeW1ib2wgdGFibGVzLgotICAjIEV4Y2x1ZGUgc2hhcmVkIGxpYnJhcnkgaW5pdGlhbGl6YXRpb24vZmluYWxpemF0aW9uIHN5bWJvbHMuCi1kbmwgTm90ZSBhbHNvIGFkanVzdCBleGNsdWRlX2V4cHN5bXMgZm9yIEMrKyBhYm92ZS4KLSAgZXh0cmFjdF9leHBzeW1zX2NtZHM9Ci0KLSAgY2FzZSAkaG9zdF9vcyBpbgotICBjeWd3aW4qIHwgbWluZ3cqIHwgcHczMiogfCBjZWdjYyopCi0gICAgIyBGSVhNRTogdGhlIE1TVkMrKyBwb3J0IGhhc24ndCBiZWVuIHRlc3RlZCBpbiBhIGxvb29vbmcgdGltZQotICAgICMgV2hlbiBub3QgdXNpbmcgZ2NjLCB3ZSBjdXJyZW50bHkgYXNzdW1lIHRoYXQgd2UgYXJlIHVzaW5nCi0gICAgIyBNaWNyb3NvZnQgVmlzdWFsIEMrKy4KLSAgICBpZiB0ZXN0ICIkR0NDIiAhPSB5ZXM7IHRoZW4KLSAgICAgIHdpdGhfZ251X2xkPW5vCi0gICAgZmkKLSAgICA7OwotICBpbnRlcml4KikKLSAgICAjIHdlIGp1c3QgaG9wZS9hc3N1bWUgdGhpcyBpcyBnY2MgYW5kIG5vdCBjODkgKD0gTVNWQysrKQotICAgIHdpdGhfZ251X2xkPXllcwotICAgIDs7Ci0gIG9wZW5ic2QqKQotICAgIHdpdGhfZ251X2xkPW5vCi0gICAgOzsKLSAgZXNhYwotCi0gIF9MVF9UQUdWQVIobGRfc2hsaWJzLCAkMSk9eWVzCi0KLSAgIyBPbiBzb21lIHRhcmdldHMsIEdOVSBsZCBpcyBjb21wYXRpYmxlIGVub3VnaCB3aXRoIHRoZSBuYXRpdmUgbGlua2VyCi0gICMgdGhhdCB3ZSdyZSBiZXR0ZXIgb2ZmIHVzaW5nIHRoZSBuYXRpdmUgaW50ZXJmYWNlIGZvciBib3RoLgotICBsdF91c2VfZ251X2xkX2ludGVyZmFjZT1ubwotICBpZiB0ZXN0ICIkd2l0aF9nbnVfbGQiID0geWVzOyB0aGVuCi0gICAgY2FzZSAkaG9zdF9vcyBpbgotICAgICAgYWl4KikKLQkjIFRoZSBBSVggcG9ydCBvZiBHTlUgbGQgaGFzIGFsd2F5cyBhc3BpcmVkIHRvIGNvbXBhdGliaWxpdHkKLQkjIHdpdGggdGhlIG5hdGl2ZSBsaW5rZXIuICBIb3dldmVyLCBhcyB0aGUgd2FybmluZyBpbiB0aGUgR05VIGxkCi0JIyBibG9jayBzYXlzLCB2ZXJzaW9ucyBiZWZvcmUgMi4xOS41KiBjb3VsZG4ndCByZWFsbHkgY3JlYXRlIHdvcmtpbmcKLQkjIHNoYXJlZCBsaWJyYXJpZXMsIHJlZ2FyZGxlc3Mgb2YgdGhlIGludGVyZmFjZSB1c2VkLgotCWNhc2UgYCRMRCAtdiAyPiYxYCBpbgotCSAgKlwgXChHTlVcIEJpbnV0aWxzXClcIDIuMTkuNSopIDs7Ci0JICAqXCBcKEdOVVwgQmludXRpbHNcKVwgMi5bWzItOV1dKikgOzsKLQkgICpcIFwoR05VXCBCaW51dGlsc1wpXCBbWzMtOV1dKikgOzsKLQkgICopCi0JICAgIGx0X3VzZV9nbnVfbGRfaW50ZXJmYWNlPXllcwotCSAgICA7OwotCWVzYWMKLQk7OwotICAgICAgKikKLQlsdF91c2VfZ251X2xkX2ludGVyZmFjZT15ZXMKLQk7OwotICAgIGVzYWMKLSAgZmkKLQotICBpZiB0ZXN0ICIkbHRfdXNlX2dudV9sZF9pbnRlcmZhY2UiID0geWVzOyB0aGVuCi0gICAgIyBJZiBhcmNoaXZlX2NtZHMgcnVucyBMRCwgbm90IENDLCB3bGFyYyBzaG91bGQgYmUgZW1wdHkKLSAgICB3bGFyYz0nJHt3bH0nCi0KLSAgICAjIFNldCBzb21lIGRlZmF1bHRzIGZvciBHTlUgbGQgd2l0aCBzaGFyZWQgbGlicmFyeSBzdXBwb3J0LiBUaGVzZQotICAgICMgYXJlIHJlc2V0IGxhdGVyIGlmIHNoYXJlZCBsaWJyYXJpZXMgYXJlIG5vdCBzdXBwb3J0ZWQuIFB1dHRpbmcgdGhlbQotICAgICMgaGVyZSBhbGxvd3MgdGhlbSB0byBiZSBvdmVycmlkZGVuIGlmIG5lY2Vzc2FyeS4KLSAgICBydW5wYXRoX3Zhcj1MRF9SVU5fUEFUSAotICAgIF9MVF9UQUdWQVIoaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYywgJDEpPScke3dsfS1ycGF0aCAke3dsfSRsaWJkaXInCi0gICAgX0xUX1RBR1ZBUihleHBvcnRfZHluYW1pY19mbGFnX3NwZWMsICQxKT0nJHt3bH0tLWV4cG9ydC1keW5hbWljJwotICAgICMgYW5jaWVudCBHTlUgbGQgZGlkbid0IHN1cHBvcnQgLS13aG9sZS1hcmNoaXZlIGV0LiBhbC4KLSAgICBpZiAkTEQgLS1oZWxwIDI+JjEgfCAkR1JFUCAnbm8td2hvbGUtYXJjaGl2ZScgPiAvZGV2L251bGw7IHRoZW4KLSAgICAgIF9MVF9UQUdWQVIod2hvbGVfYXJjaGl2ZV9mbGFnX3NwZWMsICQxKT0iJHdsYXJjIictLXdob2xlLWFyY2hpdmUkY29udmVuaWVuY2UgJyIkd2xhcmMiJy0tbm8td2hvbGUtYXJjaGl2ZScKLSAgICBlbHNlCi0gICAgICBfTFRfVEFHVkFSKHdob2xlX2FyY2hpdmVfZmxhZ19zcGVjLCAkMSk9Ci0gICAgZmkKLSAgICBzdXBwb3J0c19hbm9uX3ZlcnNpb25pbmc9bm8KLSAgICBjYXNlIGAkTEQgLXYgMj4mMWAgaW4KLSAgICAgICpHTlVcIGdvbGQqKSBzdXBwb3J0c19hbm9uX3ZlcnNpb25pbmc9eWVzIDs7Ci0gICAgICAqXCBbWzAxXV0uKiB8ICpcIDIuW1swLTldXS4qIHwgKlwgMi4xMC4qKSA7OyAjIGNhdGNoIHZlcnNpb25zIDwgMi4xMQotICAgICAgKlwgMi4xMS45My4wLjJcICopIHN1cHBvcnRzX2Fub25fdmVyc2lvbmluZz15ZXMgOzsgIyBSSDcuMyAuLi4KLSAgICAgICpcIDIuMTEuOTIuMC4xMlwgKikgc3VwcG9ydHNfYW5vbl92ZXJzaW9uaW5nPXllcyA7OyAjIE1hbmRyYWtlIDguMiAuLi4KLSAgICAgICpcIDIuMTEuKikgOzsgIyBvdGhlciAyLjExIHZlcnNpb25zCi0gICAgICAqKSBzdXBwb3J0c19hbm9uX3ZlcnNpb25pbmc9eWVzIDs7Ci0gICAgZXNhYwotCi0gICAgIyBTZWUgaWYgR05VIGxkIHN1cHBvcnRzIHNoYXJlZCBsaWJyYXJpZXMuCi0gICAgY2FzZSAkaG9zdF9vcyBpbgotICAgIGFpeFtbMy05XV0qKQotICAgICAgIyBPbiBBSVgvUFBDLCB0aGUgR05VIGxpbmtlciBpcyB2ZXJ5IGJyb2tlbgotICAgICAgaWYgdGVzdCAiJGhvc3RfY3B1IiAhPSBpYTY0OyB0aGVuCi0JX0xUX1RBR1ZBUihsZF9zaGxpYnMsICQxKT1ubwotCWNhdCA8PF9MVF9FT0YgMT4mMgotCi0qKiogV2FybmluZzogdGhlIEdOVSBsaW5rZXIsIGF0IGxlYXN0IHVwIHRvIHJlbGVhc2UgMi4xOSwgaXMgcmVwb3J0ZWQKLSoqKiB0byBiZSB1bmFibGUgdG8gcmVsaWFibHkgY3JlYXRlIHNoYXJlZCBsaWJyYXJpZXMgb24gQUlYLgotKioqIFRoZXJlZm9yZSwgbGlidG9vbCBpcyBkaXNhYmxpbmcgc2hhcmVkIGxpYnJhcmllcyBzdXBwb3J0LiAgSWYgeW91Ci0qKiogcmVhbGx5IGNhcmUgZm9yIHNoYXJlZCBsaWJyYXJpZXMsIHlvdSBtYXkgd2FudCB0byBpbnN0YWxsIGJpbnV0aWxzCi0qKiogMi4yMCBvciBhYm92ZSwgb3IgbW9kaWZ5IHlvdXIgUEFUSCBzbyB0aGF0IGEgbm9uLUdOVSBsaW5rZXIgaXMgZm91bmQuCi0qKiogWW91IHdpbGwgdGhlbiBuZWVkIHRvIHJlc3RhcnQgdGhlIGNvbmZpZ3VyYXRpb24gcHJvY2Vzcy4KLQotX0xUX0VPRgotICAgICAgZmkKLSAgICAgIDs7Ci0KLSAgICBhbWlnYW9zKikKLSAgICAgIGNhc2UgJGhvc3RfY3B1IGluCi0gICAgICBwb3dlcnBjKQotICAgICAgICAgICAgIyBzZWUgY29tbWVudCBhYm91dCBBbWlnYU9TNCAuc28gc3VwcG9ydAotICAgICAgICAgICAgX0xUX1RBR1ZBUihhcmNoaXZlX2NtZHMsICQxKT0nJENDIC1zaGFyZWQgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzICR7d2x9LXNvbmFtZSAkd2wkc29uYW1lIC1vICRsaWInCi0gICAgICAgICAgICBfTFRfVEFHVkFSKGFyY2hpdmVfZXhwc3ltX2NtZHMsICQxKT0nJwotICAgICAgICA7OwotICAgICAgbTY4aykKLSAgICAgICAgICAgIF9MVF9UQUdWQVIoYXJjaGl2ZV9jbWRzLCAkMSk9JyRSTSAkb3V0cHV0X29iamRpci9hMml4bGlicmFyeS5kYXRhfiRFQ0hPICIjZGVmaW5lIE5BTUUgJGxpYm5hbWUiID4gJG91dHB1dF9vYmpkaXIvYTJpeGxpYnJhcnkuZGF0YX4kRUNITyAiI2RlZmluZSBMSUJSQVJZX0lEIDEiID4+ICRvdXRwdXRfb2JqZGlyL2EyaXhsaWJyYXJ5LmRhdGF+JEVDSE8gIiNkZWZpbmUgVkVSU0lPTiAkbWFqb3IiID4+ICRvdXRwdXRfb2JqZGlyL2EyaXhsaWJyYXJ5LmRhdGF+JEVDSE8gIiNkZWZpbmUgUkVWSVNJT04gJHJldmlzaW9uIiA+PiAkb3V0cHV0X29iamRpci9hMml4bGlicmFyeS5kYXRhfiRBUiAkQVJfRkxBR1MgJGxpYiAkbGlib2Jqc34kUkFOTElCICRsaWJ+KGNkICRvdXRwdXRfb2JqZGlyICYmIGEyaXhsaWJyYXJ5IC0zMiknCi0gICAgICAgICAgICBfTFRfVEFHVkFSKGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWMsICQxKT0nLUwkbGliZGlyJwotICAgICAgICAgICAgX0xUX1RBR1ZBUihoYXJkY29kZV9taW51c19MLCAkMSk9eWVzCi0gICAgICAgIDs7Ci0gICAgICBlc2FjCi0gICAgICA7OwotCi0gICAgYmVvcyopCi0gICAgICBpZiAkTEQgLS1oZWxwIDI+JjEgfCAkR1JFUCAnOiBzdXBwb3J0ZWQgdGFyZ2V0czouKiBlbGYnID4gL2Rldi9udWxsOyB0aGVuCi0JX0xUX1RBR1ZBUihhbGxvd191bmRlZmluZWRfZmxhZywgJDEpPXVuc3VwcG9ydGVkCi0JIyBKb3NlcGggQmVja2VuYmFjaCA8anJiM0BiZXN0LmNvbT4gc2F5cyBzb21lIHJlbGVhc2VzIG9mIGdjYwotCSMgc3VwcG9ydCAtLXVuZGVmaW5lZC4gIFRoaXMgZGVzZXJ2ZXMgc29tZSBpbnZlc3RpZ2F0aW9uLiAgRklYTUUKLQlfTFRfVEFHVkFSKGFyY2hpdmVfY21kcywgJDEpPSckQ0MgLW5vc3RhcnQgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzICR7d2x9LXNvbmFtZSAkd2wkc29uYW1lIC1vICRsaWInCi0gICAgICBlbHNlCi0JX0xUX1RBR1ZBUihsZF9zaGxpYnMsICQxKT1ubwotICAgICAgZmkKLSAgICAgIDs7Ci0KLSAgICBjeWd3aW4qIHwgbWluZ3cqIHwgcHczMiogfCBjZWdjYyopCi0gICAgICAjIF9MVF9UQUdWQVIoaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYywgJDEpIGlzIGFjdHVhbGx5IG1lYW5pbmdsZXNzLAotICAgICAgIyBhcyB0aGVyZSBpcyBubyBzZWFyY2ggcGF0aCBmb3IgRExMcy4KLSAgICAgIF9MVF9UQUdWQVIoaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYywgJDEpPSctTCRsaWJkaXInCi0gICAgICBfTFRfVEFHVkFSKGV4cG9ydF9keW5hbWljX2ZsYWdfc3BlYywgJDEpPScke3dsfS0tZXhwb3J0LWFsbC1zeW1ib2xzJwotICAgICAgX0xUX1RBR1ZBUihhbGxvd191bmRlZmluZWRfZmxhZywgJDEpPXVuc3VwcG9ydGVkCi0gICAgICBfTFRfVEFHVkFSKGFsd2F5c19leHBvcnRfc3ltYm9scywgJDEpPW5vCi0gICAgICBfTFRfVEFHVkFSKGVuYWJsZV9zaGFyZWRfd2l0aF9zdGF0aWNfcnVudGltZXMsICQxKT15ZXMKLSAgICAgIF9MVF9UQUdWQVIoZXhwb3J0X3N5bWJvbHNfY21kcywgJDEpPSckTk0gJGxpYm9ianMgJGNvbnZlbmllbmNlIHwgJGdsb2JhbF9zeW1ib2xfcGlwZSB8ICRTRUQgLWUgJ1wnJy9eW1tCQ0RHUlNdXVtbIF1dL3MvLipbWyBdXVwoW1teIF1dKlwpL1wxIERBVEEvO3MvXi4qW1sgXV1fX25tX19cKFtbXiBdXSpcKVtbIF1dW1teIF1dKi9cMSBEQVRBLzsvXklbWyBdXS9kOy9eW1tBSVRXXV1bWyBdXS9zLy4qIC8vJ1wnJyB8IHNvcnQgfCB1bmlxID4gJGV4cG9ydF9zeW1ib2xzJwotICAgICAgX0xUX1RBR1ZBUihleGNsdWRlX2V4cHN5bXMsICQxKT1bJ1tfXStHTE9CQUxfT0ZGU0VUX1RBQkxFX3xbX10rR0xPQkFMX19bRklEXV8uKnxbX10raGVhZF9bQS1aYS16MC05X10rX2RsbHxbQS1aYS16MC05X10rX2RsbF9pbmFtZSddCi0KLSAgICAgIGlmICRMRCAtLWhlbHAgMj4mMSB8ICRHUkVQICdhdXRvLWltcG9ydCcgPiAvZGV2L251bGw7IHRoZW4KLSAgICAgICAgX0xUX1RBR1ZBUihhcmNoaXZlX2NtZHMsICQxKT0nJENDIC1zaGFyZWQgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzIC1vICRvdXRwdXRfb2JqZGlyLyRzb25hbWUgJHt3bH0tLWVuYWJsZS1hdXRvLWltYWdlLWJhc2UgLVhsaW5rZXIgLS1vdXQtaW1wbGliIC1YbGlua2VyICRsaWInCi0JIyBJZiB0aGUgZXhwb3J0LXN5bWJvbHMgZmlsZSBhbHJlYWR5IGlzIGEgLmRlZiBmaWxlICgxc3QgbGluZQotCSMgaXMgRVhQT1JUUyksIHVzZSBpdCBhcyBpczsgb3RoZXJ3aXNlLCBwcmVwZW5kLi4uCi0JX0xUX1RBR1ZBUihhcmNoaXZlX2V4cHN5bV9jbWRzLCAkMSk9J2lmIHRlc3QgInhgJFNFRCAxcSAkZXhwb3J0X3N5bWJvbHNgIiA9IHhFWFBPUlRTOyB0aGVuCi0JICBjcCAkZXhwb3J0X3N5bWJvbHMgJG91dHB1dF9vYmpkaXIvJHNvbmFtZS5kZWY7Ci0JZWxzZQotCSAgZWNobyBFWFBPUlRTID4gJG91dHB1dF9vYmpkaXIvJHNvbmFtZS5kZWY7Ci0JICBjYXQgJGV4cG9ydF9zeW1ib2xzID4+ICRvdXRwdXRfb2JqZGlyLyRzb25hbWUuZGVmOwotCWZpfgotCSRDQyAtc2hhcmVkICRvdXRwdXRfb2JqZGlyLyRzb25hbWUuZGVmICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncyAtbyAkb3V0cHV0X29iamRpci8kc29uYW1lICR7d2x9LS1lbmFibGUtYXV0by1pbWFnZS1iYXNlIC1YbGlua2VyIC0tb3V0LWltcGxpYiAtWGxpbmtlciAkbGliJwotICAgICAgZWxzZQotCV9MVF9UQUdWQVIobGRfc2hsaWJzLCAkMSk9bm8KLSAgICAgIGZpCi0gICAgICA7OwotCi0gICAgaGFpa3UqKQotICAgICAgX0xUX1RBR1ZBUihhcmNoaXZlX2NtZHMsICQxKT0nJENDIC1zaGFyZWQgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzICR7d2x9LXNvbmFtZSAkd2wkc29uYW1lIC1vICRsaWInCi0gICAgICBfTFRfVEFHVkFSKGxpbmtfYWxsX2RlcGxpYnMsICQxKT15ZXMKLSAgICAgIDs7Ci0KLSAgICBpbnRlcml4W1szLTldXSopCi0gICAgICBfTFRfVEFHVkFSKGhhcmRjb2RlX2RpcmVjdCwgJDEpPW5vCi0gICAgICBfTFRfVEFHVkFSKGhhcmRjb2RlX3NobGlicGF0aF92YXIsICQxKT1ubwotICAgICAgX0xUX1RBR1ZBUihoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjLCAkMSk9JyR7d2x9LXJwYXRoLCRsaWJkaXInCi0gICAgICBfTFRfVEFHVkFSKGV4cG9ydF9keW5hbWljX2ZsYWdfc3BlYywgJDEpPScke3dsfS1FJwotICAgICAgIyBIYWNrOiBPbiBJbnRlcml4IDMueCwgd2UgY2Fubm90IGNvbXBpbGUgUElDIGJlY2F1c2Ugb2YgYSBicm9rZW4gZ2NjLgotICAgICAgIyBJbnN0ZWFkLCBzaGFyZWQgbGlicmFyaWVzIGFyZSBsb2FkZWQgYXQgYW4gaW1hZ2UgYmFzZSAoMHgxMDAwMDAwMCBieQotICAgICAgIyBkZWZhdWx0KSBhbmQgcmVsb2NhdGVkIGlmIHRoZXkgY29uZmxpY3QsIHdoaWNoIGlzIGEgc2xvdyB2ZXJ5IG1lbW9yeQotICAgICAgIyBjb25zdW1pbmcgYW5kIGZyYWdtZW50aW5nIHByb2Nlc3MuICBUbyBhdm9pZCB0aGlzLCB3ZSBwaWNrIGEgcmFuZG9tLAotICAgICAgIyAyNTYgS2lCLWFsaWduZWQgaW1hZ2UgYmFzZSBiZXR3ZWVuIDB4NTAwMDAwMDAgYW5kIDB4NkZGQzAwMDAgYXQgbGluawotICAgICAgIyB0aW1lLiAgTW92aW5nIHVwIGZyb20gMHgxMDAwMDAwMCBhbHNvIGFsbG93cyBtb3JlIHNicmsoMikgc3BhY2UuCi0gICAgICBfTFRfVEFHVkFSKGFyY2hpdmVfY21kcywgJDEpPSckQ0MgLXNoYXJlZCAkcGljX2ZsYWcgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzICR7d2x9LWgsJHNvbmFtZSAke3dsfS0taW1hZ2UtYmFzZSxgZXhwciAke1JBTkRPTS0kJH0gJSA0MDk2IC8gMiBcKiAyNjIxNDQgKyAxMzQyMTc3MjgwYCAtbyAkbGliJwotICAgICAgX0xUX1RBR1ZBUihhcmNoaXZlX2V4cHN5bV9jbWRzLCAkMSk9J3NlZCAicyxeLF8sIiAkZXhwb3J0X3N5bWJvbHMgPiRvdXRwdXRfb2JqZGlyLyRzb25hbWUuZXhwc3ltfiRDQyAtc2hhcmVkICRwaWNfZmxhZyAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MgJHt3bH0taCwkc29uYW1lICR7d2x9LS1yZXRhaW4tc3ltYm9scy1maWxlLCRvdXRwdXRfb2JqZGlyLyRzb25hbWUuZXhwc3ltICR7d2x9LS1pbWFnZS1iYXNlLGBleHByICR7UkFORE9NLSQkfSAlIDQwOTYgLyAyIFwqIDI2MjE0NCArIDEzNDIxNzcyODBgIC1vICRsaWInCi0gICAgICA7OwotCi0gICAgZ251KiB8IGxpbnV4KiB8IHRwZiogfCBrKmJzZCotZ251IHwga29wZW5zb2xhcmlzKi1nbnUpCi0gICAgICB0bXBfZGlldD1ubwotICAgICAgaWYgdGVzdCAiJGhvc3Rfb3MiID0gbGludXgtZGlldGxpYmM7IHRoZW4KLQljYXNlICRjY19iYXNlbmFtZSBpbgotCSAgZGlldFwgKikgdG1wX2RpZXQ9eWVzOzsJIyBsaW51eC1kaWV0bGliYyB3aXRoIHN0YXRpYyBsaW5raW5nICghZGlldC1keW4pCi0JZXNhYwotICAgICAgZmkKLSAgICAgIGlmICRMRCAtLWhlbHAgMj4mMSB8ICRFR1JFUCAnOiBzdXBwb3J0ZWQgdGFyZ2V0czouKiBlbGYnID4gL2Rldi9udWxsIFwKLQkgJiYgdGVzdCAiJHRtcF9kaWV0IiA9IG5vCi0gICAgICB0aGVuCi0JdG1wX2FkZGZsYWc9JyAkcGljX2ZsYWcnCi0JdG1wX3NoYXJlZGZsYWc9Jy1zaGFyZWQnCi0JY2FzZSAkY2NfYmFzZW5hbWUsJGhvc3RfY3B1IGluCi0gICAgICAgIHBnY2MqKQkJCQkjIFBvcnRsYW5kIEdyb3VwIEMgY29tcGlsZXIKLQkgIF9MVF9UQUdWQVIod2hvbGVfYXJjaGl2ZV9mbGFnX3NwZWMsICQxKT0nJHt3bH0tLXdob2xlLWFyY2hpdmVgZm9yIGNvbnYgaW4gJGNvbnZlbmllbmNlXCJcIjsgZG8gdGVzdCAgLW4gXCIkY29udlwiICYmIG5ld19jb252ZW5pZW5jZT1cIiRuZXdfY29udmVuaWVuY2UsJGNvbnZcIjsgZG9uZTsgZnVuY19lY2hvX2FsbCBcIiRuZXdfY29udmVuaWVuY2VcImAgJHt3bH0tLW5vLXdob2xlLWFyY2hpdmUnCi0JICB0bXBfYWRkZmxhZz0nICRwaWNfZmxhZycKLQkgIDs7Ci0JcGdmNzcqIHwgcGdmOTAqIHwgcGdmOTUqIHwgcGdmb3J0cmFuKikKLQkJCQkJIyBQb3J0bGFuZCBHcm91cCBmNzcgYW5kIGY5MCBjb21waWxlcnMKLQkgIF9MVF9UQUdWQVIod2hvbGVfYXJjaGl2ZV9mbGFnX3NwZWMsICQxKT0nJHt3bH0tLXdob2xlLWFyY2hpdmVgZm9yIGNvbnYgaW4gJGNvbnZlbmllbmNlXCJcIjsgZG8gdGVzdCAgLW4gXCIkY29udlwiICYmIG5ld19jb252ZW5pZW5jZT1cIiRuZXdfY29udmVuaWVuY2UsJGNvbnZcIjsgZG9uZTsgZnVuY19lY2hvX2FsbCBcIiRuZXdfY29udmVuaWVuY2VcImAgJHt3bH0tLW5vLXdob2xlLWFyY2hpdmUnCi0JICB0bXBfYWRkZmxhZz0nICRwaWNfZmxhZyAtTW5vbWFpbicgOzsKLQllY2MqLGlhNjQqIHwgaWNjKixpYTY0KikJIyBJbnRlbCBDIGNvbXBpbGVyIG9uIGlhNjQKLQkgIHRtcF9hZGRmbGFnPScgLWlfZHluYW1pYycgOzsKLQllZmMqLGlhNjQqIHwgaWZvcnQqLGlhNjQqKQkjIEludGVsIEZvcnRyYW4gY29tcGlsZXIgb24gaWE2NAotCSAgdG1wX2FkZGZsYWc9JyAtaV9keW5hbWljIC1ub2Zvcl9tYWluJyA7OwotCWlmYyogfCBpZm9ydCopCQkJIyBJbnRlbCBGb3J0cmFuIGNvbXBpbGVyCi0JICB0bXBfYWRkZmxhZz0nIC1ub2Zvcl9tYWluJyA7OwotCWxmOTUqKQkJCQkjIExhaGV5IEZvcnRyYW4gOC4xCi0JICBfTFRfVEFHVkFSKHdob2xlX2FyY2hpdmVfZmxhZ19zcGVjLCAkMSk9Ci0JICB0bXBfc2hhcmVkZmxhZz0nLS1zaGFyZWQnIDs7Ci0JeGxbW2NDXV0qIHwgYmd4bFtbY0NdXSogfCBtcGl4bFtbY0NdXSopICMgSUJNIFhMIEMgOC4wIG9uIFBQQyAoZGVhbCB3aXRoIHhsZiBiZWxvdykKLQkgIHRtcF9zaGFyZWRmbGFnPSctcW1rc2hyb2JqJwotCSAgdG1wX2FkZGZsYWc9IDs7Ci0JbnZjYyopCSMgQ3VkYSBDb21waWxlciBEcml2ZXIgMi4yCi0JICBfTFRfVEFHVkFSKHdob2xlX2FyY2hpdmVfZmxhZ19zcGVjLCAkMSk9JyR7d2x9LS13aG9sZS1hcmNoaXZlYGZvciBjb252IGluICRjb252ZW5pZW5jZVwiXCI7IGRvIHRlc3QgIC1uIFwiJGNvbnZcIiAmJiBuZXdfY29udmVuaWVuY2U9XCIkbmV3X2NvbnZlbmllbmNlLCRjb252XCI7IGRvbmU7IGZ1bmNfZWNob19hbGwgXCIkbmV3X2NvbnZlbmllbmNlXCJgICR7d2x9LS1uby13aG9sZS1hcmNoaXZlJwotCSAgX0xUX1RBR1ZBUihjb21waWxlcl9uZWVkc19vYmplY3QsICQxKT15ZXMKLQkgIDs7Ci0JZXNhYwotCWNhc2UgYCRDQyAtViAyPiYxIHwgc2VkIDVxYCBpbgotCSpTdW5cIEMqKQkJCSMgU3VuIEMgNS45Ci0JICBfTFRfVEFHVkFSKHdob2xlX2FyY2hpdmVfZmxhZ19zcGVjLCAkMSk9JyR7d2x9LS13aG9sZS1hcmNoaXZlYG5ld19jb252ZW5pZW5jZT07IGZvciBjb252IGluICRjb252ZW5pZW5jZVwiXCI7IGRvIHRlc3QgLXogXCIkY29udlwiIHx8IG5ld19jb252ZW5pZW5jZT1cIiRuZXdfY29udmVuaWVuY2UsJGNvbnZcIjsgZG9uZTsgZnVuY19lY2hvX2FsbCBcIiRuZXdfY29udmVuaWVuY2VcImAgJHt3bH0tLW5vLXdob2xlLWFyY2hpdmUnCi0JICBfTFRfVEFHVkFSKGNvbXBpbGVyX25lZWRzX29iamVjdCwgJDEpPXllcwotCSAgdG1wX3NoYXJlZGZsYWc9Jy1HJyA7OwotCSpTdW5cIEYqKQkJCSMgU3VuIEZvcnRyYW4gOC4zCi0JICB0bXBfc2hhcmVkZmxhZz0nLUcnIDs7Ci0JZXNhYwotCV9MVF9UQUdWQVIoYXJjaGl2ZV9jbWRzLCAkMSk9JyRDQyAnIiR0bXBfc2hhcmVkZmxhZyIiJHRtcF9hZGRmbGFnIicgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzICR7d2x9LXNvbmFtZSAkd2wkc29uYW1lIC1vICRsaWInCi0KLSAgICAgICAgaWYgdGVzdCAieCRzdXBwb3J0c19hbm9uX3ZlcnNpb25pbmciID0geHllczsgdGhlbgotICAgICAgICAgIF9MVF9UQUdWQVIoYXJjaGl2ZV9leHBzeW1fY21kcywgJDEpPSdlY2hvICJ7IGdsb2JhbDoiID4gJG91dHB1dF9vYmpkaXIvJGxpYm5hbWUudmVyfgotCSAgICBjYXQgJGV4cG9ydF9zeW1ib2xzIHwgc2VkIC1lICJzL1woLipcKS9cMTsvIiA+PiAkb3V0cHV0X29iamRpci8kbGlibmFtZS52ZXJ+Ci0JICAgIGVjaG8gImxvY2FsOiAqOyB9OyIgPj4gJG91dHB1dF9vYmpkaXIvJGxpYm5hbWUudmVyfgotCSAgICAkQ0MgJyIkdG1wX3NoYXJlZGZsYWciIiR0bXBfYWRkZmxhZyInICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncyAke3dsfS1zb25hbWUgJHdsJHNvbmFtZSAke3dsfS12ZXJzaW9uLXNjcmlwdCAke3dsfSRvdXRwdXRfb2JqZGlyLyRsaWJuYW1lLnZlciAtbyAkbGliJwotICAgICAgICBmaQotCi0JY2FzZSAkY2NfYmFzZW5hbWUgaW4KLQl4bGYqIHwgYmdmKiB8IGJneGxmKiB8IG1waXhsZiopCi0JICAjIElCTSBYTCBGb3J0cmFuIDEwLjEgb24gUFBDIGNhbm5vdCBjcmVhdGUgc2hhcmVkIGxpYnMgaXRzZWxmCi0JICBfTFRfVEFHVkFSKHdob2xlX2FyY2hpdmVfZmxhZ19zcGVjLCAkMSk9Jy0td2hvbGUtYXJjaGl2ZSRjb252ZW5pZW5jZSAtLW5vLXdob2xlLWFyY2hpdmUnCi0JICBfTFRfVEFHVkFSKGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWMsICQxKT0KLQkgIF9MVF9UQUdWQVIoaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlY19sZCwgJDEpPSctcnBhdGggJGxpYmRpcicKLQkgIF9MVF9UQUdWQVIoYXJjaGl2ZV9jbWRzLCAkMSk9JyRMRCAtc2hhcmVkICRsaWJvYmpzICRkZXBsaWJzICRsaW5rZXJfZmxhZ3MgLXNvbmFtZSAkc29uYW1lIC1vICRsaWInCi0JICBpZiB0ZXN0ICJ4JHN1cHBvcnRzX2Fub25fdmVyc2lvbmluZyIgPSB4eWVzOyB0aGVuCi0JICAgIF9MVF9UQUdWQVIoYXJjaGl2ZV9leHBzeW1fY21kcywgJDEpPSdlY2hvICJ7IGdsb2JhbDoiID4gJG91dHB1dF9vYmpkaXIvJGxpYm5hbWUudmVyfgotCSAgICAgIGNhdCAkZXhwb3J0X3N5bWJvbHMgfCBzZWQgLWUgInMvXCguKlwpL1wxOy8iID4+ICRvdXRwdXRfb2JqZGlyLyRsaWJuYW1lLnZlcn4KLQkgICAgICBlY2hvICJsb2NhbDogKjsgfTsiID4+ICRvdXRwdXRfb2JqZGlyLyRsaWJuYW1lLnZlcn4KLQkgICAgICAkTEQgLXNoYXJlZCAkbGlib2JqcyAkZGVwbGlicyAkbGlua2VyX2ZsYWdzIC1zb25hbWUgJHNvbmFtZSAtdmVyc2lvbi1zY3JpcHQgJG91dHB1dF9vYmpkaXIvJGxpYm5hbWUudmVyIC1vICRsaWInCi0JICBmaQotCSAgOzsKLQllc2FjCi0gICAgICBlbHNlCi0gICAgICAgIF9MVF9UQUdWQVIobGRfc2hsaWJzLCAkMSk9bm8KLSAgICAgIGZpCi0gICAgICA7OwotCi0gICAgbmV0YnNkKikKLSAgICAgIGlmIGVjaG8gX19FTEZfXyB8ICRDQyAtRSAtIHwgJEdSRVAgX19FTEZfXyA+L2Rldi9udWxsOyB0aGVuCi0JX0xUX1RBR1ZBUihhcmNoaXZlX2NtZHMsICQxKT0nJExEIC1Cc2hhcmVhYmxlICRsaWJvYmpzICRkZXBsaWJzICRsaW5rZXJfZmxhZ3MgLW8gJGxpYicKLQl3bGFyYz0KLSAgICAgIGVsc2UKLQlfTFRfVEFHVkFSKGFyY2hpdmVfY21kcywgJDEpPSckQ0MgLXNoYXJlZCAkcGljX2ZsYWcgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzICR7d2x9LXNvbmFtZSAkd2wkc29uYW1lIC1vICRsaWInCi0JX0xUX1RBR1ZBUihhcmNoaXZlX2V4cHN5bV9jbWRzLCAkMSk9JyRDQyAtc2hhcmVkICRwaWNfZmxhZyAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MgJHt3bH0tc29uYW1lICR3bCRzb25hbWUgJHt3bH0tcmV0YWluLXN5bWJvbHMtZmlsZSAkd2wkZXhwb3J0X3N5bWJvbHMgLW8gJGxpYicKLSAgICAgIGZpCi0gICAgICA7OwotCi0gICAgc29sYXJpcyopCi0gICAgICBpZiAkTEQgLXYgMj4mMSB8ICRHUkVQICdCRkQgMlwuOCcgPiAvZGV2L251bGw7IHRoZW4KLQlfTFRfVEFHVkFSKGxkX3NobGlicywgJDEpPW5vCi0JY2F0IDw8X0xUX0VPRiAxPiYyCi0KLSoqKiBXYXJuaW5nOiBUaGUgcmVsZWFzZXMgMi44Liogb2YgdGhlIEdOVSBsaW5rZXIgY2Fubm90IHJlbGlhYmx5Ci0qKiogY3JlYXRlIHNoYXJlZCBsaWJyYXJpZXMgb24gU29sYXJpcyBzeXN0ZW1zLiAgVGhlcmVmb3JlLCBsaWJ0b29sCi0qKiogaXMgZGlzYWJsaW5nIHNoYXJlZCBsaWJyYXJpZXMgc3VwcG9ydC4gIFdlIHVyZ2UgeW91IHRvIHVwZ3JhZGUgR05VCi0qKiogYmludXRpbHMgdG8gcmVsZWFzZSAyLjkuMSBvciBuZXdlci4gIEFub3RoZXIgb3B0aW9uIGlzIHRvIG1vZGlmeQotKioqIHlvdXIgUEFUSCBvciBjb21waWxlciBjb25maWd1cmF0aW9uIHNvIHRoYXQgdGhlIG5hdGl2ZSBsaW5rZXIgaXMKLSoqKiB1c2VkLCBhbmQgdGhlbiByZXN0YXJ0LgotCi1fTFRfRU9GCi0gICAgICBlbGlmICRMRCAtLWhlbHAgMj4mMSB8ICRHUkVQICc6IHN1cHBvcnRlZCB0YXJnZXRzOi4qIGVsZicgPiAvZGV2L251bGw7IHRoZW4KLQlfTFRfVEFHVkFSKGFyY2hpdmVfY21kcywgJDEpPSckQ0MgLXNoYXJlZCAkcGljX2ZsYWcgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzICR7d2x9LXNvbmFtZSAkd2wkc29uYW1lIC1vICRsaWInCi0JX0xUX1RBR1ZBUihhcmNoaXZlX2V4cHN5bV9jbWRzLCAkMSk9JyRDQyAtc2hhcmVkICRwaWNfZmxhZyAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MgJHt3bH0tc29uYW1lICR3bCRzb25hbWUgJHt3bH0tcmV0YWluLXN5bWJvbHMtZmlsZSAkd2wkZXhwb3J0X3N5bWJvbHMgLW8gJGxpYicKLSAgICAgIGVsc2UKLQlfTFRfVEFHVkFSKGxkX3NobGlicywgJDEpPW5vCi0gICAgICBmaQotICAgICAgOzsKLQotICAgIHN5c3Y1KiB8IHNjbzMuMnY1KiB8IHNjbzV2NiogfCB1bml4d2FyZSogfCBPcGVuVU5JWCopCi0gICAgICBjYXNlIGAkTEQgLXYgMj4mMWAgaW4KLSAgICAgICAgKlwgW1swMV1dLiogfCAqXCAyLltbMC05XV0uKiB8ICpcIDIuMVtbMC01XV0uKikKLQlfTFRfVEFHVkFSKGxkX3NobGlicywgJDEpPW5vCi0JY2F0IDw8X0xUX0VPRiAxPiYyCi0KLSoqKiBXYXJuaW5nOiBSZWxlYXNlcyBvZiB0aGUgR05VIGxpbmtlciBwcmlvciB0byAyLjE2LjkxLjAuMyBjYW4gbm90Ci0qKiogcmVsaWFibHkgY3JlYXRlIHNoYXJlZCBsaWJyYXJpZXMgb24gU0NPIHN5c3RlbXMuICBUaGVyZWZvcmUsIGxpYnRvb2wKLSoqKiBpcyBkaXNhYmxpbmcgc2hhcmVkIGxpYnJhcmllcyBzdXBwb3J0LiAgV2UgdXJnZSB5b3UgdG8gdXBncmFkZSBHTlUKLSoqKiBiaW51dGlscyB0byByZWxlYXNlIDIuMTYuOTEuMC4zIG9yIG5ld2VyLiAgQW5vdGhlciBvcHRpb24gaXMgdG8gbW9kaWZ5Ci0qKiogeW91ciBQQVRIIG9yIGNvbXBpbGVyIGNvbmZpZ3VyYXRpb24gc28gdGhhdCB0aGUgbmF0aXZlIGxpbmtlciBpcwotKioqIHVzZWQsIGFuZCB0aGVuIHJlc3RhcnQuCi0KLV9MVF9FT0YKLQk7OwotCSopCi0JICAjIEZvciBzZWN1cml0eSByZWFzb25zLCBpdCBpcyBoaWdobHkgcmVjb21tZW5kZWQgdGhhdCB5b3UgYWx3YXlzCi0JICAjIHVzZSBhYnNvbHV0ZSBwYXRocyBmb3IgbmFtaW5nIHNoYXJlZCBsaWJyYXJpZXMsIGFuZCBleGNsdWRlIHRoZQotCSAgIyBEVF9SVU5QQVRIIHRhZyBmcm9tIGV4ZWN1dGFibGVzIGFuZCBsaWJyYXJpZXMuICBCdXQgZG9pbmcgc28KLQkgICMgcmVxdWlyZXMgdGhhdCB5b3UgY29tcGlsZSBldmVyeXRoaW5nIHR3aWNlLCB3aGljaCBpcyBhIHBhaW4uCi0JICBpZiAkTEQgLS1oZWxwIDI+JjEgfCAkR1JFUCAnOiBzdXBwb3J0ZWQgdGFyZ2V0czouKiBlbGYnID4gL2Rldi9udWxsOyB0aGVuCi0JICAgIF9MVF9UQUdWQVIoaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYywgJDEpPScke3dsfS1ycGF0aCAke3dsfSRsaWJkaXInCi0JICAgIF9MVF9UQUdWQVIoYXJjaGl2ZV9jbWRzLCAkMSk9JyRDQyAtc2hhcmVkICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncyAke3dsfS1zb25hbWUgJHdsJHNvbmFtZSAtbyAkbGliJwotCSAgICBfTFRfVEFHVkFSKGFyY2hpdmVfZXhwc3ltX2NtZHMsICQxKT0nJENDIC1zaGFyZWQgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzICR7d2x9LXNvbmFtZSAkd2wkc29uYW1lICR7d2x9LXJldGFpbi1zeW1ib2xzLWZpbGUgJHdsJGV4cG9ydF9zeW1ib2xzIC1vICRsaWInCi0JICBlbHNlCi0JICAgIF9MVF9UQUdWQVIobGRfc2hsaWJzLCAkMSk9bm8KLQkgIGZpCi0JOzsKLSAgICAgIGVzYWMKLSAgICAgIDs7Ci0KLSAgICBzdW5vczQqKQotICAgICAgX0xUX1RBR1ZBUihhcmNoaXZlX2NtZHMsICQxKT0nJExEIC1hc3NlcnQgcHVyZS10ZXh0IC1Cc2hhcmVhYmxlIC1vICRsaWIgJGxpYm9ianMgJGRlcGxpYnMgJGxpbmtlcl9mbGFncycKLSAgICAgIHdsYXJjPQotICAgICAgX0xUX1RBR1ZBUihoYXJkY29kZV9kaXJlY3QsICQxKT15ZXMKLSAgICAgIF9MVF9UQUdWQVIoaGFyZGNvZGVfc2hsaWJwYXRoX3ZhciwgJDEpPW5vCi0gICAgICA7OwotCi0gICAgKikKLSAgICAgIGlmICRMRCAtLWhlbHAgMj4mMSB8ICRHUkVQICc6IHN1cHBvcnRlZCB0YXJnZXRzOi4qIGVsZicgPiAvZGV2L251bGw7IHRoZW4KLQlfTFRfVEFHVkFSKGFyY2hpdmVfY21kcywgJDEpPSckQ0MgLXNoYXJlZCAkcGljX2ZsYWcgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzICR7d2x9LXNvbmFtZSAkd2wkc29uYW1lIC1vICRsaWInCi0JX0xUX1RBR1ZBUihhcmNoaXZlX2V4cHN5bV9jbWRzLCAkMSk9JyRDQyAtc2hhcmVkICRwaWNfZmxhZyAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MgJHt3bH0tc29uYW1lICR3bCRzb25hbWUgJHt3bH0tcmV0YWluLXN5bWJvbHMtZmlsZSAkd2wkZXhwb3J0X3N5bWJvbHMgLW8gJGxpYicKLSAgICAgIGVsc2UKLQlfTFRfVEFHVkFSKGxkX3NobGlicywgJDEpPW5vCi0gICAgICBmaQotICAgICAgOzsKLSAgICBlc2FjCi0KLSAgICBpZiB0ZXN0ICIkX0xUX1RBR1ZBUihsZF9zaGxpYnMsICQxKSIgPSBubzsgdGhlbgotICAgICAgcnVucGF0aF92YXI9Ci0gICAgICBfTFRfVEFHVkFSKGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWMsICQxKT0KLSAgICAgIF9MVF9UQUdWQVIoZXhwb3J0X2R5bmFtaWNfZmxhZ19zcGVjLCAkMSk9Ci0gICAgICBfTFRfVEFHVkFSKHdob2xlX2FyY2hpdmVfZmxhZ19zcGVjLCAkMSk9Ci0gICAgZmkKLSAgZWxzZQotICAgICMgUE9SVE1FIGZpbGwgaW4gYSBkZXNjcmlwdGlvbiBvZiB5b3VyIHN5c3RlbSdzIGxpbmtlciAobm90IEdOVSBsZCkKLSAgICBjYXNlICRob3N0X29zIGluCi0gICAgYWl4MyopCi0gICAgICBfTFRfVEFHVkFSKGFsbG93X3VuZGVmaW5lZF9mbGFnLCAkMSk9dW5zdXBwb3J0ZWQKLSAgICAgIF9MVF9UQUdWQVIoYWx3YXlzX2V4cG9ydF9zeW1ib2xzLCAkMSk9eWVzCi0gICAgICBfTFRfVEFHVkFSKGFyY2hpdmVfZXhwc3ltX2NtZHMsICQxKT0nJExEIC1vICRvdXRwdXRfb2JqZGlyLyRzb25hbWUgJGxpYm9ianMgJGRlcGxpYnMgJGxpbmtlcl9mbGFncyAtYkU6JGV4cG9ydF9zeW1ib2xzIC1UNTEyIC1INTEyIC1iTTpTUkV+JEFSICRBUl9GTEFHUyAkbGliICRvdXRwdXRfb2JqZGlyLyRzb25hbWUnCi0gICAgICAjIE5vdGU6IHRoaXMgbGlua2VyIGhhcmRjb2RlcyB0aGUgZGlyZWN0b3JpZXMgaW4gTElCUEFUSCBpZiB0aGVyZQotICAgICAgIyBhcmUgbm8gZGlyZWN0b3JpZXMgc3BlY2lmaWVkIGJ5IC1MLgotICAgICAgX0xUX1RBR1ZBUihoYXJkY29kZV9taW51c19MLCAkMSk9eWVzCi0gICAgICBpZiB0ZXN0ICIkR0NDIiA9IHllcyAmJiB0ZXN0IC16ICIkbHRfcHJvZ19jb21waWxlcl9zdGF0aWMiOyB0aGVuCi0JIyBOZWl0aGVyIGRpcmVjdCBoYXJkY29kaW5nIG5vciBzdGF0aWMgbGlua2luZyBpcyBzdXBwb3J0ZWQgd2l0aCBhCi0JIyBicm9rZW4gY29sbGVjdDIuCi0JX0xUX1RBR1ZBUihoYXJkY29kZV9kaXJlY3QsICQxKT11bnN1cHBvcnRlZAotICAgICAgZmkKLSAgICAgIDs7Ci0KLSAgICBhaXhbWzQtOV1dKikKLSAgICAgIGlmIHRlc3QgIiRob3N0X2NwdSIgPSBpYTY0OyB0aGVuCi0JIyBPbiBJQTY0LCB0aGUgbGlua2VyIGRvZXMgcnVuIHRpbWUgbGlua2luZyBieSBkZWZhdWx0LCBzbyB3ZSBkb24ndAotCSMgaGF2ZSB0byBkbyBhbnl0aGluZyBzcGVjaWFsLgotCWFpeF91c2VfcnVudGltZWxpbmtpbmc9bm8KLQlleHBfc3ltX2ZsYWc9Jy1CZXhwb3J0JwotCW5vX2VudHJ5X2ZsYWc9IiIKLSAgICAgIGVsc2UKLQkjIElmIHdlJ3JlIHVzaW5nIEdOVSBubSwgdGhlbiB3ZSBkb24ndCB3YW50IHRoZSAiLUMiIG9wdGlvbi4KLQkjIC1DIG1lYW5zIGRlbWFuZ2xlIHRvIEFJWCBubSwgYnV0IG1lYW5zIGRvbid0IGRlbWFuZ2xlIHdpdGggR05VIG5tCi0JIyBBbHNvLCBBSVggbm0gdHJlYXRzIHdlYWsgZGVmaW5lZCBzeW1ib2xzIGxpa2Ugb3RoZXIgZ2xvYmFsCi0JIyBkZWZpbmVkIHN5bWJvbHMsIHdoZXJlYXMgR05VIG5tIG1hcmtzIHRoZW0gYXMgIlciLgotCWlmICROTSAtViAyPiYxIHwgJEdSRVAgJ0dOVScgPiAvZGV2L251bGw7IHRoZW4KLQkgIF9MVF9UQUdWQVIoZXhwb3J0X3N5bWJvbHNfY21kcywgJDEpPSckTk0gLUJwZyAkbGlib2JqcyAkY29udmVuaWVuY2UgfCBhd2sgJ1wnJ3sgaWYgKCgoXCQgMiA9PSAiVCIpIHx8IChcJCAyID09ICJEIikgfHwgKFwkIDIgPT0gIkIiKSB8fCAoXCQgMiA9PSAiVyIpKSAmJiAoW3N1YnN0cl0oXCQgMywxLDEpICE9ICIuIikpIHsgcHJpbnQgXCQgMyB9IH0nXCcnIHwgc29ydCAtdSA+ICRleHBvcnRfc3ltYm9scycKLQllbHNlCi0JICBfTFRfVEFHVkFSKGV4cG9ydF9zeW1ib2xzX2NtZHMsICQxKT0nJE5NIC1CQ3BnICRsaWJvYmpzICRjb252ZW5pZW5jZSB8IGF3ayAnXCcneyBpZiAoKChcJCAyID09ICJUIikgfHwgKFwkIDIgPT0gIkQiKSB8fCAoXCQgMiA9PSAiQiIpKSAmJiAoW3N1YnN0cl0oXCQgMywxLDEpICE9ICIuIikpIHsgcHJpbnQgXCQgMyB9IH0nXCcnIHwgc29ydCAtdSA+ICRleHBvcnRfc3ltYm9scycKLQlmaQotCWFpeF91c2VfcnVudGltZWxpbmtpbmc9bm8KLQotCSMgVGVzdCBpZiB3ZSBhcmUgdHJ5aW5nIHRvIHVzZSBydW4gdGltZSBsaW5raW5nIG9yIG5vcm1hbAotCSMgQUlYIHN0eWxlIGxpbmtpbmcuIElmIC1icnRsIGlzIHNvbWV3aGVyZSBpbiBMREZMQUdTLCB3ZQotCSMgbmVlZCB0byBkbyBydW50aW1lIGxpbmtpbmcuCi0JY2FzZSAkaG9zdF9vcyBpbiBhaXg0LltbMjNdXXxhaXg0LltbMjNdXS4qfGFpeFtbNS05XV0qKQotCSAgZm9yIGxkX2ZsYWcgaW4gJExERkxBR1M7IGRvCi0JICBpZiAodGVzdCAkbGRfZmxhZyA9ICItYnJ0bCIgfHwgdGVzdCAkbGRfZmxhZyA9ICItV2wsLWJydGwiKTsgdGhlbgotCSAgICBhaXhfdXNlX3J1bnRpbWVsaW5raW5nPXllcwotCSAgICBicmVhawotCSAgZmkKLQkgIGRvbmUKLQkgIDs7Ci0JZXNhYwotCi0JZXhwX3N5bV9mbGFnPSctYmV4cG9ydCcKLQlub19lbnRyeV9mbGFnPSctYm5vZW50cnknCi0gICAgICBmaQotCi0gICAgICAjIFdoZW4gbGFyZ2UgZXhlY3V0YWJsZXMgb3Igc2hhcmVkIG9iamVjdHMgYXJlIGJ1aWx0LCBBSVggbGQgY2FuCi0gICAgICAjIGhhdmUgcHJvYmxlbXMgY3JlYXRpbmcgdGhlIHRhYmxlIG9mIGNvbnRlbnRzLiAgSWYgbGlua2luZyBhIGxpYnJhcnkKLSAgICAgICMgb3IgcHJvZ3JhbSByZXN1bHRzIGluICJlcnJvciBUT0Mgb3ZlcmZsb3ciIGFkZCAtbW1pbmltYWwtdG9jIHRvCi0gICAgICAjIENYWEZMQUdTL0NGTEFHUyBmb3IgZysrL2djYy4gIEluIHRoZSBjYXNlcyB3aGVyZSB0aGF0IGlzIG5vdAotICAgICAgIyBlbm91Z2ggdG8gZml4IHRoZSBwcm9ibGVtLCBhZGQgLVdsLC1iYmlndG9jIHRvIExERkxBR1MuCi0KLSAgICAgIF9MVF9UQUdWQVIoYXJjaGl2ZV9jbWRzLCAkMSk9JycKLSAgICAgIF9MVF9UQUdWQVIoaGFyZGNvZGVfZGlyZWN0LCAkMSk9eWVzCi0gICAgICBfTFRfVEFHVkFSKGhhcmRjb2RlX2RpcmVjdF9hYnNvbHV0ZSwgJDEpPXllcwotICAgICAgX0xUX1RBR1ZBUihoYXJkY29kZV9saWJkaXJfc2VwYXJhdG9yLCAkMSk9JzonCi0gICAgICBfTFRfVEFHVkFSKGxpbmtfYWxsX2RlcGxpYnMsICQxKT15ZXMKLSAgICAgIF9MVF9UQUdWQVIoZmlsZV9saXN0X3NwZWMsICQxKT0nJHt3bH0tZiwnCi0KLSAgICAgIGlmIHRlc3QgIiRHQ0MiID0geWVzOyB0aGVuCi0JY2FzZSAkaG9zdF9vcyBpbiBhaXg0LltbMDEyXV18YWl4NC5bWzAxMl1dLiopCi0JIyBXZSBvbmx5IHdhbnQgdG8gZG8gdGhpcyBvbiBBSVggNC4yIGFuZCBsb3dlciwgdGhlIGNoZWNrCi0JIyBiZWxvdyBmb3IgYnJva2VuIGNvbGxlY3QyIGRvZXNuJ3Qgd29yayB1bmRlciA0LjMrCi0JICBjb2xsZWN0Mm5hbWU9YCR7Q0N9IC1wcmludC1wcm9nLW5hbWU9Y29sbGVjdDJgCi0JICBpZiB0ZXN0IC1mICIkY29sbGVjdDJuYW1lIiAmJgotCSAgIHN0cmluZ3MgIiRjb2xsZWN0Mm5hbWUiIHwgJEdSRVAgcmVzb2x2ZV9saWJfbmFtZSA+L2Rldi9udWxsCi0JICB0aGVuCi0JICAjIFdlIGhhdmUgcmV3b3JrZWQgY29sbGVjdDIKLQkgIDoKLQkgIGVsc2UKLQkgICMgV2UgaGF2ZSBvbGQgY29sbGVjdDIKLQkgIF9MVF9UQUdWQVIoaGFyZGNvZGVfZGlyZWN0LCAkMSk9dW5zdXBwb3J0ZWQKLQkgICMgSXQgZmFpbHMgdG8gZmluZCB1bmluc3RhbGxlZCBsaWJyYXJpZXMgd2hlbiB0aGUgdW5pbnN0YWxsZWQKLQkgICMgcGF0aCBpcyBub3QgbGlzdGVkIGluIHRoZSBsaWJwYXRoLiAgU2V0dGluZyBoYXJkY29kZV9taW51c19MCi0JICAjIHRvIHVuc3VwcG9ydGVkIGZvcmNlcyByZWxpbmtpbmcKLQkgIF9MVF9UQUdWQVIoaGFyZGNvZGVfbWludXNfTCwgJDEpPXllcwotCSAgX0xUX1RBR1ZBUihoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjLCAkMSk9Jy1MJGxpYmRpcicKLQkgIF9MVF9UQUdWQVIoaGFyZGNvZGVfbGliZGlyX3NlcGFyYXRvciwgJDEpPQotCSAgZmkKLQkgIDs7Ci0JZXNhYwotCXNoYXJlZF9mbGFnPSctc2hhcmVkJwotCWlmIHRlc3QgIiRhaXhfdXNlX3J1bnRpbWVsaW5raW5nIiA9IHllczsgdGhlbgotCSAgc2hhcmVkX2ZsYWc9IiRzaGFyZWRfZmxhZyAiJyR7d2x9LUcnCi0JZmkKLSAgICAgIGVsc2UKLQkjIG5vdCB1c2luZyBnY2MKLQlpZiB0ZXN0ICIkaG9zdF9jcHUiID0gaWE2NDsgdGhlbgotCSMgVmlzdWFsQWdlIEMrKywgVmVyc2lvbiA1LjUgZm9yIEFJWCA1TCBmb3IgSUEtNjQsIEJldGEgMyBSZWxlYXNlCi0JIyBjaG9rZXMgb24gLVdsLC1HLiBUaGUgZm9sbG93aW5nIGxpbmUgaXMgY29ycmVjdDoKLQkgIHNoYXJlZF9mbGFnPSctRycKLQllbHNlCi0JICBpZiB0ZXN0ICIkYWl4X3VzZV9ydW50aW1lbGlua2luZyIgPSB5ZXM7IHRoZW4KLQkgICAgc2hhcmVkX2ZsYWc9JyR7d2x9LUcnCi0JICBlbHNlCi0JICAgIHNoYXJlZF9mbGFnPScke3dsfS1iTTpTUkUnCi0JICBmaQotCWZpCi0gICAgICBmaQotCi0gICAgICBfTFRfVEFHVkFSKGV4cG9ydF9keW5hbWljX2ZsYWdfc3BlYywgJDEpPScke3dsfS1iZXhwYWxsJwotICAgICAgIyBJdCBzZWVtcyB0aGF0IC1iZXhwYWxsIGRvZXMgbm90IGV4cG9ydCBzeW1ib2xzIGJlZ2lubmluZyB3aXRoCi0gICAgICAjIHVuZGVyc2NvcmUgKF8pLCBzbyBpdCBpcyBiZXR0ZXIgdG8gZ2VuZXJhdGUgYSBsaXN0IG9mIHN5bWJvbHMgdG8gZXhwb3J0LgotICAgICAgX0xUX1RBR1ZBUihhbHdheXNfZXhwb3J0X3N5bWJvbHMsICQxKT15ZXMKLSAgICAgIGlmIHRlc3QgIiRhaXhfdXNlX3J1bnRpbWVsaW5raW5nIiA9IHllczsgdGhlbgotCSMgV2FybmluZyAtIHdpdGhvdXQgdXNpbmcgdGhlIG90aGVyIHJ1bnRpbWUgbG9hZGluZyBmbGFncyAoLWJydGwpLAotCSMgLWJlcm9rIHdpbGwgbGluayB3aXRob3V0IGVycm9yLCBidXQgbWF5IHByb2R1Y2UgYSBicm9rZW4gbGlicmFyeS4KLQlfTFRfVEFHVkFSKGFsbG93X3VuZGVmaW5lZF9mbGFnLCAkMSk9Jy1iZXJvaycKLSAgICAgICAgIyBEZXRlcm1pbmUgdGhlIGRlZmF1bHQgbGlicGF0aCBmcm9tIHRoZSB2YWx1ZSBlbmNvZGVkIGluIGFuCi0gICAgICAgICMgZW1wdHkgZXhlY3V0YWJsZS4KLSAgICAgICAgX0xUX1NZU19NT0RVTEVfUEFUSF9BSVgoWyQxXSkKLSAgICAgICAgX0xUX1RBR1ZBUihoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjLCAkMSk9JyR7d2x9LWJsaWJwYXRoOiRsaWJkaXI6JyIkYWl4X2xpYnBhdGgiCi0gICAgICAgIF9MVF9UQUdWQVIoYXJjaGl2ZV9leHBzeW1fY21kcywgJDEpPSckQ0MgLW8gJG91dHB1dF9vYmpkaXIvJHNvbmFtZSAkbGlib2JqcyAkZGVwbGlicyAnIlwke3dsfSRub19lbnRyeV9mbGFnIicgJGNvbXBpbGVyX2ZsYWdzIGBpZiB0ZXN0ICJ4JHthbGxvd191bmRlZmluZWRfZmxhZ30iICE9ICJ4IjsgdGhlbiBmdW5jX2VjaG9fYWxsICIke3dsfSR7YWxsb3dfdW5kZWZpbmVkX2ZsYWd9IjsgZWxzZSA6OyBmaWAgJyJcJHt3bH0kZXhwX3N5bV9mbGFnOlwkZXhwb3J0X3N5bWJvbHMgJHNoYXJlZF9mbGFnIgotICAgICAgZWxzZQotCWlmIHRlc3QgIiRob3N0X2NwdSIgPSBpYTY0OyB0aGVuCi0JICBfTFRfVEFHVkFSKGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWMsICQxKT0nJHt3bH0tUiAkbGliZGlyOi91c3IvbGliOi9saWInCi0JICBfTFRfVEFHVkFSKGFsbG93X3VuZGVmaW5lZF9mbGFnLCAkMSk9Ii16IG5vZGVmcyIKLQkgIF9MVF9UQUdWQVIoYXJjaGl2ZV9leHBzeW1fY21kcywgJDEpPSJcJENDICRzaGFyZWRfZmxhZyInIC1vICRvdXRwdXRfb2JqZGlyLyRzb25hbWUgJGxpYm9ianMgJGRlcGxpYnMgJyJcJHt3bH0kbm9fZW50cnlfZmxhZyInICRjb21waWxlcl9mbGFncyAke3dsfSR7YWxsb3dfdW5kZWZpbmVkX2ZsYWd9ICciXCR7d2x9JGV4cF9zeW1fZmxhZzpcJGV4cG9ydF9zeW1ib2xzIgotCWVsc2UKLQkgIyBEZXRlcm1pbmUgdGhlIGRlZmF1bHQgbGlicGF0aCBmcm9tIHRoZSB2YWx1ZSBlbmNvZGVkIGluIGFuCi0JICMgZW1wdHkgZXhlY3V0YWJsZS4KLQkgX0xUX1NZU19NT0RVTEVfUEFUSF9BSVgoWyQxXSkKLQkgX0xUX1RBR1ZBUihoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjLCAkMSk9JyR7d2x9LWJsaWJwYXRoOiRsaWJkaXI6JyIkYWl4X2xpYnBhdGgiCi0JICAjIFdhcm5pbmcgLSB3aXRob3V0IHVzaW5nIHRoZSBvdGhlciBydW4gdGltZSBsb2FkaW5nIGZsYWdzLAotCSAgIyAtYmVyb2sgd2lsbCBsaW5rIHdpdGhvdXQgZXJyb3IsIGJ1dCBtYXkgcHJvZHVjZSBhIGJyb2tlbiBsaWJyYXJ5LgotCSAgX0xUX1RBR1ZBUihub191bmRlZmluZWRfZmxhZywgJDEpPScgJHt3bH0tYmVybm90b2snCi0JICBfTFRfVEFHVkFSKGFsbG93X3VuZGVmaW5lZF9mbGFnLCAkMSk9JyAke3dsfS1iZXJvaycKLQkgIGlmIHRlc3QgIiR3aXRoX2dudV9sZCIgPSB5ZXM7IHRoZW4KLQkgICAgIyBXZSBvbmx5IHVzZSB0aGlzIGNvZGUgZm9yIEdOVSBsZHMgdGhhdCBzdXBwb3J0IC0td2hvbGUtYXJjaGl2ZS4KLQkgICAgX0xUX1RBR1ZBUih3aG9sZV9hcmNoaXZlX2ZsYWdfc3BlYywgJDEpPScke3dsfS0td2hvbGUtYXJjaGl2ZSRjb252ZW5pZW5jZSAke3dsfS0tbm8td2hvbGUtYXJjaGl2ZScKLQkgIGVsc2UKLQkgICAgIyBFeHBvcnRlZCBzeW1ib2xzIGNhbiBiZSBwdWxsZWQgaW50byBzaGFyZWQgb2JqZWN0cyBmcm9tIGFyY2hpdmVzCi0JICAgIF9MVF9UQUdWQVIod2hvbGVfYXJjaGl2ZV9mbGFnX3NwZWMsICQxKT0nJGNvbnZlbmllbmNlJwotCSAgZmkKLQkgIF9MVF9UQUdWQVIoYXJjaGl2ZV9jbWRzX25lZWRfbGMsICQxKT15ZXMKLQkgICMgVGhpcyBpcyBzaW1pbGFyIHRvIGhvdyBBSVggdHJhZGl0aW9uYWxseSBidWlsZHMgaXRzIHNoYXJlZCBsaWJyYXJpZXMuCi0JICBfTFRfVEFHVkFSKGFyY2hpdmVfZXhwc3ltX2NtZHMsICQxKT0iXCRDQyAkc2hhcmVkX2ZsYWciJyAtbyAkb3V0cHV0X29iamRpci8kc29uYW1lICRsaWJvYmpzICRkZXBsaWJzICR7d2x9LWJub2VudHJ5ICRjb21waWxlcl9mbGFncyAke3dsfS1iRTokZXhwb3J0X3N5bWJvbHMke2FsbG93X3VuZGVmaW5lZF9mbGFnfX4kQVIgJEFSX0ZMQUdTICRvdXRwdXRfb2JqZGlyLyRsaWJuYW1lJHJlbGVhc2UuYSAkb3V0cHV0X29iamRpci8kc29uYW1lJwotCWZpCi0gICAgICBmaQotICAgICAgOzsKLQotICAgIGFtaWdhb3MqKQotICAgICAgY2FzZSAkaG9zdF9jcHUgaW4KLSAgICAgIHBvd2VycGMpCi0gICAgICAgICAgICAjIHNlZSBjb21tZW50IGFib3V0IEFtaWdhT1M0IC5zbyBzdXBwb3J0Ci0gICAgICAgICAgICBfTFRfVEFHVkFSKGFyY2hpdmVfY21kcywgJDEpPSckQ0MgLXNoYXJlZCAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MgJHt3bH0tc29uYW1lICR3bCRzb25hbWUgLW8gJGxpYicKLSAgICAgICAgICAgIF9MVF9UQUdWQVIoYXJjaGl2ZV9leHBzeW1fY21kcywgJDEpPScnCi0gICAgICAgIDs7Ci0gICAgICBtNjhrKQotICAgICAgICAgICAgX0xUX1RBR1ZBUihhcmNoaXZlX2NtZHMsICQxKT0nJFJNICRvdXRwdXRfb2JqZGlyL2EyaXhsaWJyYXJ5LmRhdGF+JEVDSE8gIiNkZWZpbmUgTkFNRSAkbGlibmFtZSIgPiAkb3V0cHV0X29iamRpci9hMml4bGlicmFyeS5kYXRhfiRFQ0hPICIjZGVmaW5lIExJQlJBUllfSUQgMSIgPj4gJG91dHB1dF9vYmpkaXIvYTJpeGxpYnJhcnkuZGF0YX4kRUNITyAiI2RlZmluZSBWRVJTSU9OICRtYWpvciIgPj4gJG91dHB1dF9vYmpkaXIvYTJpeGxpYnJhcnkuZGF0YX4kRUNITyAiI2RlZmluZSBSRVZJU0lPTiAkcmV2aXNpb24iID4+ICRvdXRwdXRfb2JqZGlyL2EyaXhsaWJyYXJ5LmRhdGF+JEFSICRBUl9GTEFHUyAkbGliICRsaWJvYmpzfiRSQU5MSUIgJGxpYn4oY2QgJG91dHB1dF9vYmpkaXIgJiYgYTJpeGxpYnJhcnkgLTMyKScKLSAgICAgICAgICAgIF9MVF9UQUdWQVIoaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYywgJDEpPSctTCRsaWJkaXInCi0gICAgICAgICAgICBfTFRfVEFHVkFSKGhhcmRjb2RlX21pbnVzX0wsICQxKT15ZXMKLSAgICAgICAgOzsKLSAgICAgIGVzYWMKLSAgICAgIDs7Ci0KLSAgICBic2RpW1s0NV1dKikKLSAgICAgIF9MVF9UQUdWQVIoZXhwb3J0X2R5bmFtaWNfZmxhZ19zcGVjLCAkMSk9LXJkeW5hbWljCi0gICAgICA7OwotCi0gICAgY3lnd2luKiB8IG1pbmd3KiB8IHB3MzIqIHwgY2VnY2MqKQotICAgICAgIyBXaGVuIG5vdCB1c2luZyBnY2MsIHdlIGN1cnJlbnRseSBhc3N1bWUgdGhhdCB3ZSBhcmUgdXNpbmcKLSAgICAgICMgTWljcm9zb2Z0IFZpc3VhbCBDKysuCi0gICAgICAjIGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWMgaXMgYWN0dWFsbHkgbWVhbmluZ2xlc3MsIGFzIHRoZXJlIGlzCi0gICAgICAjIG5vIHNlYXJjaCBwYXRoIGZvciBETExzLgotICAgICAgY2FzZSAkY2NfYmFzZW5hbWUgaW4KLSAgICAgIGNsKikKLQkjIE5hdGl2ZSBNU1ZDCi0JX0xUX1RBR1ZBUihoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjLCAkMSk9JyAnCi0JX0xUX1RBR1ZBUihhbGxvd191bmRlZmluZWRfZmxhZywgJDEpPXVuc3VwcG9ydGVkCi0JX0xUX1RBR1ZBUihhbHdheXNfZXhwb3J0X3N5bWJvbHMsICQxKT15ZXMKLQlfTFRfVEFHVkFSKGZpbGVfbGlzdF9zcGVjLCAkMSk9J0AnCi0JIyBUZWxsIGx0bWFpbiB0byBtYWtlIC5saWIgZmlsZXMsIG5vdCAuYSBmaWxlcy4KLQlsaWJleHQ9bGliCi0JIyBUZWxsIGx0bWFpbiB0byBtYWtlIC5kbGwgZmlsZXMsIG5vdCAuc28gZmlsZXMuCi0Jc2hyZXh0X2NtZHM9Ii5kbGwiCi0JIyBGSVhNRTogU2V0dGluZyBsaW5rbmFtZXMgaGVyZSBpcyBhIGJhZCBoYWNrLgotCV9MVF9UQUdWQVIoYXJjaGl2ZV9jbWRzLCAkMSk9JyRDQyAtbyAkb3V0cHV0X29iamRpci8kc29uYW1lICRsaWJvYmpzICRjb21waWxlcl9mbGFncyAkZGVwbGlicyAtV2wsLWRsbH5saW5rbmFtZXM9JwotCV9MVF9UQUdWQVIoYXJjaGl2ZV9leHBzeW1fY21kcywgJDEpPSdpZiB0ZXN0ICJ4YCRTRUQgMXEgJGV4cG9ydF9zeW1ib2xzYCIgPSB4RVhQT1JUUzsgdGhlbgotCSAgICBzZWQgLW4gLWUgJ3MvXFxcXFxcXCguKlxcXFxcXFwpLy1saW5rXFxcIC1FWFBPUlQ6XFxcXFxcXDEvJyAtZSAnMVxcXCFwJyA8ICRleHBvcnRfc3ltYm9scyA+ICRvdXRwdXRfb2JqZGlyLyRzb25hbWUuZXhwOwotCSAgZWxzZQotCSAgICBzZWQgLWUgJ3MvXFxcXFxcXCguKlxcXFxcXFwpLy1saW5rXFxcIC1FWFBPUlQ6XFxcXFxcXDEvJyA8ICRleHBvcnRfc3ltYm9scyA+ICRvdXRwdXRfb2JqZGlyLyRzb25hbWUuZXhwOwotCSAgZml+Ci0JICAkQ0MgLW8gJHRvb2xfb3V0cHV0X29iamRpciRzb25hbWUgJGxpYm9ianMgJGNvbXBpbGVyX2ZsYWdzICRkZXBsaWJzICJAJHRvb2xfb3V0cHV0X29iamRpciRzb25hbWUuZXhwIiAtV2wsLURMTCwtSU1QTElCOiIkdG9vbF9vdXRwdXRfb2JqZGlyJGxpYm5hbWUuZGxsLmxpYiJ+Ci0JICBsaW5rbmFtZXM9JwotCSMgVGhlIGxpbmtlciB3aWxsIG5vdCBhdXRvbWF0aWNhbGx5IGJ1aWxkIGEgc3RhdGljIGxpYiBpZiB3ZSBidWlsZCBhIERMTC4KLQkjIF9MVF9UQUdWQVIob2xkX2FyY2hpdmVfZnJvbV9uZXdfY21kcywgJDEpPSd0cnVlJwotCV9MVF9UQUdWQVIoZW5hYmxlX3NoYXJlZF93aXRoX3N0YXRpY19ydW50aW1lcywgJDEpPXllcwotCV9MVF9UQUdWQVIoZXhwb3J0X3N5bWJvbHNfY21kcywgJDEpPSckTk0gJGxpYm9ianMgJGNvbnZlbmllbmNlIHwgJGdsb2JhbF9zeW1ib2xfcGlwZSB8ICRTRUQgLWUgJ1wnJy9eW1tCQ0RHUlNdXVtbIF1dL3MvLipbWyBdXVwoW1teIF1dKlwpL1wxLERBVEEvJ1wnJyB8ICRTRUQgLWUgJ1wnJy9eW1tBSVRXXV1bWyBdXS9zLy4qW1sgXV0vLydcJycgfCBzb3J0IHwgdW5pcSA+ICRleHBvcnRfc3ltYm9scycKLQkjIERvbid0IHVzZSByYW5saWIKLQlfTFRfVEFHVkFSKG9sZF9wb3N0aW5zdGFsbF9jbWRzLCAkMSk9J2NobW9kIDY0NCAkb2xkbGliJwotCV9MVF9UQUdWQVIocG9zdGxpbmtfY21kcywgJDEpPSdsdF9vdXRwdXRmaWxlPSJAT1VUUFVUQCJ+Ci0JICBsdF90b29sX291dHB1dGZpbGU9IkBUT09MX09VVFBVVEAifgotCSAgY2FzZSAkbHRfb3V0cHV0ZmlsZSBpbgotCSAgICAqLmV4ZXwqLkVYRSkgOzsKLQkgICAgKikKLQkgICAgICBsdF9vdXRwdXRmaWxlPSIkbHRfb3V0cHV0ZmlsZS5leGUiCi0JICAgICAgbHRfdG9vbF9vdXRwdXRmaWxlPSIkbHRfdG9vbF9vdXRwdXRmaWxlLmV4ZSIKLQkgICAgICA7OwotCSAgZXNhY34KLQkgIGlmIHRlc3QgIiRNQU5JRkVTVF9UT09MIiAhPSAiOiIgJiYgdGVzdCAtZiAiJGx0X291dHB1dGZpbGUubWFuaWZlc3QiOyB0aGVuCi0JICAgICRNQU5JRkVTVF9UT09MIC1tYW5pZmVzdCAiJGx0X3Rvb2xfb3V0cHV0ZmlsZS5tYW5pZmVzdCIgLW91dHB1dHJlc291cmNlOiIkbHRfdG9vbF9vdXRwdXRmaWxlIiB8fCBleGl0IDE7Ci0JICAgICRSTSAiJGx0X291dHB1dGZpbGUubWFuaWZlc3QiOwotCSAgZmknCi0JOzsKLSAgICAgICopCi0JIyBBc3N1bWUgTVNWQyB3cmFwcGVyCi0JX0xUX1RBR1ZBUihoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjLCAkMSk9JyAnCi0JX0xUX1RBR1ZBUihhbGxvd191bmRlZmluZWRfZmxhZywgJDEpPXVuc3VwcG9ydGVkCi0JIyBUZWxsIGx0bWFpbiB0byBtYWtlIC5saWIgZmlsZXMsIG5vdCAuYSBmaWxlcy4KLQlsaWJleHQ9bGliCi0JIyBUZWxsIGx0bWFpbiB0byBtYWtlIC5kbGwgZmlsZXMsIG5vdCAuc28gZmlsZXMuCi0Jc2hyZXh0X2NtZHM9Ii5kbGwiCi0JIyBGSVhNRTogU2V0dGluZyBsaW5rbmFtZXMgaGVyZSBpcyBhIGJhZCBoYWNrLgotCV9MVF9UQUdWQVIoYXJjaGl2ZV9jbWRzLCAkMSk9JyRDQyAtbyAkbGliICRsaWJvYmpzICRjb21waWxlcl9mbGFncyBgZnVuY19lY2hvX2FsbCAiJGRlcGxpYnMiIHwgJFNFRCAnXCcncy8gLWxjJC8vJ1wnJ2AgLWxpbmsgLWRsbH5saW5rbmFtZXM9JwotCSMgVGhlIGxpbmtlciB3aWxsIGF1dG9tYXRpY2FsbHkgYnVpbGQgYSAubGliIGZpbGUgaWYgd2UgYnVpbGQgYSBETEwuCi0JX0xUX1RBR1ZBUihvbGRfYXJjaGl2ZV9mcm9tX25ld19jbWRzLCAkMSk9J3RydWUnCi0JIyBGSVhNRTogU2hvdWxkIGxldCB0aGUgdXNlciBzcGVjaWZ5IHRoZSBsaWIgcHJvZ3JhbS4KLQlfTFRfVEFHVkFSKG9sZF9hcmNoaXZlX2NtZHMsICQxKT0nbGliIC1PVVQ6JG9sZGxpYiRvbGRvYmpzJG9sZF9kZXBsaWJzJwotCV9MVF9UQUdWQVIoZW5hYmxlX3NoYXJlZF93aXRoX3N0YXRpY19ydW50aW1lcywgJDEpPXllcwotCTs7Ci0gICAgICBlc2FjCi0gICAgICA7OwotCi0gICAgZGFyd2luKiB8IHJoYXBzb2R5KikKLSAgICAgIF9MVF9EQVJXSU5fTElOS0VSX0ZFQVRVUkVTKCQxKQotICAgICAgOzsKLQotICAgIGRndXgqKQotICAgICAgX0xUX1RBR1ZBUihhcmNoaXZlX2NtZHMsICQxKT0nJExEIC1HIC1oICRzb25hbWUgLW8gJGxpYiAkbGlib2JqcyAkZGVwbGlicyAkbGlua2VyX2ZsYWdzJwotICAgICAgX0xUX1RBR1ZBUihoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjLCAkMSk9Jy1MJGxpYmRpcicKLSAgICAgIF9MVF9UQUdWQVIoaGFyZGNvZGVfc2hsaWJwYXRoX3ZhciwgJDEpPW5vCi0gICAgICA7OwotCi0gICAgZnJlZWJzZDEqKQotICAgICAgX0xUX1RBR1ZBUihsZF9zaGxpYnMsICQxKT1ubwotICAgICAgOzsKLQotICAgICMgRnJlZUJTRCAyLjIuWzAxMl0gYWxsb3dzIHVzIHRvIGluY2x1ZGUgYysrcnQwLm8gdG8gZ2V0IEMrKyBjb25zdHJ1Y3RvcgotICAgICMgc3VwcG9ydC4gIEZ1dHVyZSB2ZXJzaW9ucyBkbyB0aGlzIGF1dG9tYXRpY2FsbHksIGJ1dCBhbiBleHBsaWNpdCBjKytydDAubwotICAgICMgZG9lcyBub3QgYnJlYWsgYW55dGhpbmcsIGFuZCBoZWxwcyBzaWduaWZpY2FudGx5IChhdCB0aGUgY29zdCBvZiBhIGxpdHRsZQotICAgICMgZXh0cmEgc3BhY2UpLgotICAgIGZyZWVic2QyLjIqKQotICAgICAgX0xUX1RBR1ZBUihhcmNoaXZlX2NtZHMsICQxKT0nJExEIC1Cc2hhcmVhYmxlIC1vICRsaWIgJGxpYm9ianMgJGRlcGxpYnMgJGxpbmtlcl9mbGFncyAvdXNyL2xpYi9jKytydDAubycKLSAgICAgIF9MVF9UQUdWQVIoaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYywgJDEpPSctUiRsaWJkaXInCi0gICAgICBfTFRfVEFHVkFSKGhhcmRjb2RlX2RpcmVjdCwgJDEpPXllcwotICAgICAgX0xUX1RBR1ZBUihoYXJkY29kZV9zaGxpYnBhdGhfdmFyLCAkMSk9bm8KLSAgICAgIDs7Ci0KLSAgICAjIFVuZm9ydHVuYXRlbHksIG9sZGVyIHZlcnNpb25zIG9mIEZyZWVCU0QgMiBkbyBub3QgaGF2ZSB0aGlzIGZlYXR1cmUuCi0gICAgZnJlZWJzZDIqKQotICAgICAgX0xUX1RBR1ZBUihhcmNoaXZlX2NtZHMsICQxKT0nJExEIC1Cc2hhcmVhYmxlIC1vICRsaWIgJGxpYm9ianMgJGRlcGxpYnMgJGxpbmtlcl9mbGFncycKLSAgICAgIF9MVF9UQUdWQVIoaGFyZGNvZGVfZGlyZWN0LCAkMSk9eWVzCi0gICAgICBfTFRfVEFHVkFSKGhhcmRjb2RlX21pbnVzX0wsICQxKT15ZXMKLSAgICAgIF9MVF9UQUdWQVIoaGFyZGNvZGVfc2hsaWJwYXRoX3ZhciwgJDEpPW5vCi0gICAgICA7OwotCi0gICAgIyBGcmVlQlNEIDMgYW5kIGdyZWF0ZXIgdXNlcyBnY2MgLXNoYXJlZCB0byBkbyBzaGFyZWQgbGlicmFyaWVzLgotICAgIGZyZWVic2QqIHwgZHJhZ29uZmx5KikKLSAgICAgIF9MVF9UQUdWQVIoYXJjaGl2ZV9jbWRzLCAkMSk9JyRDQyAtc2hhcmVkICRwaWNfZmxhZyAtbyAkbGliICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncycKLSAgICAgIF9MVF9UQUdWQVIoaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYywgJDEpPSctUiRsaWJkaXInCi0gICAgICBfTFRfVEFHVkFSKGhhcmRjb2RlX2RpcmVjdCwgJDEpPXllcwotICAgICAgX0xUX1RBR1ZBUihoYXJkY29kZV9zaGxpYnBhdGhfdmFyLCAkMSk9bm8KLSAgICAgIDs7Ci0KLSAgICBocHV4OSopCi0gICAgICBpZiB0ZXN0ICIkR0NDIiA9IHllczsgdGhlbgotCV9MVF9UQUdWQVIoYXJjaGl2ZV9jbWRzLCAkMSk9JyRSTSAkb3V0cHV0X29iamRpci8kc29uYW1lfiRDQyAtc2hhcmVkICRwaWNfZmxhZyAke3dsfStiICR7d2x9JGluc3RhbGxfbGliZGlyIC1vICRvdXRwdXRfb2JqZGlyLyRzb25hbWUgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzfnRlc3QgJG91dHB1dF9vYmpkaXIvJHNvbmFtZSA9ICRsaWIgfHwgbXYgJG91dHB1dF9vYmpkaXIvJHNvbmFtZSAkbGliJwotICAgICAgZWxzZQotCV9MVF9UQUdWQVIoYXJjaGl2ZV9jbWRzLCAkMSk9JyRSTSAkb3V0cHV0X29iamRpci8kc29uYW1lfiRMRCAtYiArYiAkaW5zdGFsbF9saWJkaXIgLW8gJG91dHB1dF9vYmpkaXIvJHNvbmFtZSAkbGlib2JqcyAkZGVwbGlicyAkbGlua2VyX2ZsYWdzfnRlc3QgJG91dHB1dF9vYmpkaXIvJHNvbmFtZSA9ICRsaWIgfHwgbXYgJG91dHB1dF9vYmpkaXIvJHNvbmFtZSAkbGliJwotICAgICAgZmkKLSAgICAgIF9MVF9UQUdWQVIoaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYywgJDEpPScke3dsfStiICR7d2x9JGxpYmRpcicKLSAgICAgIF9MVF9UQUdWQVIoaGFyZGNvZGVfbGliZGlyX3NlcGFyYXRvciwgJDEpPToKLSAgICAgIF9MVF9UQUdWQVIoaGFyZGNvZGVfZGlyZWN0LCAkMSk9eWVzCi0KLSAgICAgICMgaGFyZGNvZGVfbWludXNfTDogTm90IHJlYWxseSBpbiB0aGUgc2VhcmNoIFBBVEgsCi0gICAgICAjIGJ1dCBhcyB0aGUgZGVmYXVsdCBsb2NhdGlvbiBvZiB0aGUgbGlicmFyeS4KLSAgICAgIF9MVF9UQUdWQVIoaGFyZGNvZGVfbWludXNfTCwgJDEpPXllcwotICAgICAgX0xUX1RBR1ZBUihleHBvcnRfZHluYW1pY19mbGFnX3NwZWMsICQxKT0nJHt3bH0tRScKLSAgICAgIDs7Ci0KLSAgICBocHV4MTAqKQotICAgICAgaWYgdGVzdCAiJEdDQyIgPSB5ZXMgJiYgdGVzdCAiJHdpdGhfZ251X2xkIiA9IG5vOyB0aGVuCi0JX0xUX1RBR1ZBUihhcmNoaXZlX2NtZHMsICQxKT0nJENDIC1zaGFyZWQgJHBpY19mbGFnICR7d2x9K2ggJHt3bH0kc29uYW1lICR7d2x9K2IgJHt3bH0kaW5zdGFsbF9saWJkaXIgLW8gJGxpYiAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MnCi0gICAgICBlbHNlCi0JX0xUX1RBR1ZBUihhcmNoaXZlX2NtZHMsICQxKT0nJExEIC1iICtoICRzb25hbWUgK2IgJGluc3RhbGxfbGliZGlyIC1vICRsaWIgJGxpYm9ianMgJGRlcGxpYnMgJGxpbmtlcl9mbGFncycKLSAgICAgIGZpCi0gICAgICBpZiB0ZXN0ICIkd2l0aF9nbnVfbGQiID0gbm87IHRoZW4KLQlfTFRfVEFHVkFSKGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWMsICQxKT0nJHt3bH0rYiAke3dsfSRsaWJkaXInCi0JX0xUX1RBR1ZBUihoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjX2xkLCAkMSk9JytiICRsaWJkaXInCi0JX0xUX1RBR1ZBUihoYXJkY29kZV9saWJkaXJfc2VwYXJhdG9yLCAkMSk9OgotCV9MVF9UQUdWQVIoaGFyZGNvZGVfZGlyZWN0LCAkMSk9eWVzCi0JX0xUX1RBR1ZBUihoYXJkY29kZV9kaXJlY3RfYWJzb2x1dGUsICQxKT15ZXMKLQlfTFRfVEFHVkFSKGV4cG9ydF9keW5hbWljX2ZsYWdfc3BlYywgJDEpPScke3dsfS1FJwotCSMgaGFyZGNvZGVfbWludXNfTDogTm90IHJlYWxseSBpbiB0aGUgc2VhcmNoIFBBVEgsCi0JIyBidXQgYXMgdGhlIGRlZmF1bHQgbG9jYXRpb24gb2YgdGhlIGxpYnJhcnkuCi0JX0xUX1RBR1ZBUihoYXJkY29kZV9taW51c19MLCAkMSk9eWVzCi0gICAgICBmaQotICAgICAgOzsKLQotICAgIGhwdXgxMSopCi0gICAgICBpZiB0ZXN0ICIkR0NDIiA9IHllcyAmJiB0ZXN0ICIkd2l0aF9nbnVfbGQiID0gbm87IHRoZW4KLQljYXNlICRob3N0X2NwdSBpbgotCWhwcGEqNjQqKQotCSAgX0xUX1RBR1ZBUihhcmNoaXZlX2NtZHMsICQxKT0nJENDIC1zaGFyZWQgJHt3bH0raCAke3dsfSRzb25hbWUgLW8gJGxpYiAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MnCi0JICA7OwotCWlhNjQqKQotCSAgX0xUX1RBR1ZBUihhcmNoaXZlX2NtZHMsICQxKT0nJENDIC1zaGFyZWQgJHBpY19mbGFnICR7d2x9K2ggJHt3bH0kc29uYW1lICR7d2x9K25vZGVmYXVsdHJwYXRoIC1vICRsaWIgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzJwotCSAgOzsKLQkqKQotCSAgX0xUX1RBR1ZBUihhcmNoaXZlX2NtZHMsICQxKT0nJENDIC1zaGFyZWQgJHBpY19mbGFnICR7d2x9K2ggJHt3bH0kc29uYW1lICR7d2x9K2IgJHt3bH0kaW5zdGFsbF9saWJkaXIgLW8gJGxpYiAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MnCi0JICA7OwotCWVzYWMKLSAgICAgIGVsc2UKLQljYXNlICRob3N0X2NwdSBpbgotCWhwcGEqNjQqKQotCSAgX0xUX1RBR1ZBUihhcmNoaXZlX2NtZHMsICQxKT0nJENDIC1iICR7d2x9K2ggJHt3bH0kc29uYW1lIC1vICRsaWIgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzJwotCSAgOzsKLQlpYTY0KikKLQkgIF9MVF9UQUdWQVIoYXJjaGl2ZV9jbWRzLCAkMSk9JyRDQyAtYiAke3dsfStoICR7d2x9JHNvbmFtZSAke3dsfStub2RlZmF1bHRycGF0aCAtbyAkbGliICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncycKLQkgIDs7Ci0JKikKLQltNF9pZigkMSwgW10sIFsKLQkgICMgT2xkZXIgdmVyc2lvbnMgb2YgdGhlIDExLjAwIGNvbXBpbGVyIGRvIG5vdCB1bmRlcnN0YW5kIC1iIHlldAotCSAgIyAoSFA5MjQ1My0wMSBBLjExLjAxLjIwIGRvZXNuJ3QsIEhQOTI0NTMtMDEgQi4xMS5YLjM1MTc1LTM1MTc2LkdQIGRvZXMpCi0JICBfTFRfTElOS0VSX09QVElPTihbaWYgJENDIHVuZGVyc3RhbmRzIC1iXSwKLQkgICAgX0xUX1RBR1ZBUihsdF9jdl9wcm9nX2NvbXBpbGVyX19iLCAkMSksIFstYl0sCi0JICAgIFtfTFRfVEFHVkFSKGFyY2hpdmVfY21kcywgJDEpPSckQ0MgLWIgJHt3bH0raCAke3dsfSRzb25hbWUgJHt3bH0rYiAke3dsfSRpbnN0YWxsX2xpYmRpciAtbyAkbGliICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncyddLAotCSAgICBbX0xUX1RBR1ZBUihhcmNoaXZlX2NtZHMsICQxKT0nJExEIC1iICtoICRzb25hbWUgK2IgJGluc3RhbGxfbGliZGlyIC1vICRsaWIgJGxpYm9ianMgJGRlcGxpYnMgJGxpbmtlcl9mbGFncyddKV0sCi0JICBbX0xUX1RBR1ZBUihhcmNoaXZlX2NtZHMsICQxKT0nJENDIC1iICR7d2x9K2ggJHt3bH0kc29uYW1lICR7d2x9K2IgJHt3bH0kaW5zdGFsbF9saWJkaXIgLW8gJGxpYiAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MnXSkKLQkgIDs7Ci0JZXNhYwotICAgICAgZmkKLSAgICAgIGlmIHRlc3QgIiR3aXRoX2dudV9sZCIgPSBubzsgdGhlbgotCV9MVF9UQUdWQVIoaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYywgJDEpPScke3dsfStiICR7d2x9JGxpYmRpcicKLQlfTFRfVEFHVkFSKGhhcmRjb2RlX2xpYmRpcl9zZXBhcmF0b3IsICQxKT06Ci0KLQljYXNlICRob3N0X2NwdSBpbgotCWhwcGEqNjQqfGlhNjQqKQotCSAgX0xUX1RBR1ZBUihoYXJkY29kZV9kaXJlY3QsICQxKT1ubwotCSAgX0xUX1RBR1ZBUihoYXJkY29kZV9zaGxpYnBhdGhfdmFyLCAkMSk9bm8KLQkgIDs7Ci0JKikKLQkgIF9MVF9UQUdWQVIoaGFyZGNvZGVfZGlyZWN0LCAkMSk9eWVzCi0JICBfTFRfVEFHVkFSKGhhcmRjb2RlX2RpcmVjdF9hYnNvbHV0ZSwgJDEpPXllcwotCSAgX0xUX1RBR1ZBUihleHBvcnRfZHluYW1pY19mbGFnX3NwZWMsICQxKT0nJHt3bH0tRScKLQotCSAgIyBoYXJkY29kZV9taW51c19MOiBOb3QgcmVhbGx5IGluIHRoZSBzZWFyY2ggUEFUSCwKLQkgICMgYnV0IGFzIHRoZSBkZWZhdWx0IGxvY2F0aW9uIG9mIHRoZSBsaWJyYXJ5LgotCSAgX0xUX1RBR1ZBUihoYXJkY29kZV9taW51c19MLCAkMSk9eWVzCi0JICA7OwotCWVzYWMKLSAgICAgIGZpCi0gICAgICA7OwotCi0gICAgaXJpeDUqIHwgaXJpeDYqIHwgbm9uc3RvcHV4KikKLSAgICAgIGlmIHRlc3QgIiRHQ0MiID0geWVzOyB0aGVuCi0JX0xUX1RBR1ZBUihhcmNoaXZlX2NtZHMsICQxKT0nJENDIC1zaGFyZWQgJHBpY19mbGFnICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncyAke3dsfS1zb25hbWUgJHt3bH0kc29uYW1lIGB0ZXN0IC1uICIkdmVyc3RyaW5nIiAmJiBmdW5jX2VjaG9fYWxsICIke3dsfS1zZXRfdmVyc2lvbiAke3dsfSR2ZXJzdHJpbmciYCAke3dsfS11cGRhdGVfcmVnaXN0cnkgJHt3bH0ke291dHB1dF9vYmpkaXJ9L3NvX2xvY2F0aW9ucyAtbyAkbGliJwotCSMgVHJ5IHRvIHVzZSB0aGUgLWV4cG9ydGVkX3N5bWJvbCBsZCBvcHRpb24sIGlmIGl0IGRvZXMgbm90Ci0JIyB3b3JrLCBhc3N1bWUgdGhhdCAtZXhwb3J0c19maWxlIGRvZXMgbm90IHdvcmsgZWl0aGVyIGFuZAotCSMgaW1wbGljaXRseSBleHBvcnQgYWxsIHN5bWJvbHMuCi0JIyBUaGlzIHNob3VsZCBiZSB0aGUgc2FtZSBmb3IgYWxsIGxhbmd1YWdlcywgc28gbm8gcGVyLXRhZyBjYWNoZSB2YXJpYWJsZS4KLQlBQ19DQUNIRV9DSEVDSyhbd2hldGhlciB0aGUgJGhvc3Rfb3MgbGlua2VyIGFjY2VwdHMgLWV4cG9ydGVkX3N5bWJvbF0sCi0JICBbbHRfY3ZfaXJpeF9leHBvcnRlZF9zeW1ib2xdLAotCSAgW3NhdmVfTERGTEFHUz0iJExERkxBR1MiCi0JICAgTERGTEFHUz0iJExERkxBR1MgLXNoYXJlZCAke3dsfS1leHBvcnRlZF9zeW1ib2wgJHt3bH1mb28gJHt3bH0tdXBkYXRlX3JlZ2lzdHJ5ICR7d2x9L2Rldi9udWxsIgotCSAgIEFDX0xJTktfSUZFTFNFKAotCSAgICAgW0FDX0xBTkdfU09VUkNFKAotCSAgICAgICAgW0FDX0xBTkdfQ0FTRShbQ10sIFtbaW50IGZvbyAodm9pZCkgeyByZXR1cm4gMDsgfV1dLAotCQkJICAgICAgW0MrK10sIFtbaW50IGZvbyAodm9pZCkgeyByZXR1cm4gMDsgfV1dLAotCQkJICAgICAgW0ZvcnRyYW4gNzddLCBbWwotICAgICAgc3Vicm91dGluZSBmb28KLSAgICAgIGVuZF1dLAotCQkJICAgICAgW0ZvcnRyYW5dLCBbWwotICAgICAgc3Vicm91dGluZSBmb28KLSAgICAgIGVuZF1dKV0pXSwKLQkgICAgICBbbHRfY3ZfaXJpeF9leHBvcnRlZF9zeW1ib2w9eWVzXSwKLQkgICAgICBbbHRfY3ZfaXJpeF9leHBvcnRlZF9zeW1ib2w9bm9dKQotICAgICAgICAgICBMREZMQUdTPSIkc2F2ZV9MREZMQUdTIl0pCi0JaWYgdGVzdCAiJGx0X2N2X2lyaXhfZXhwb3J0ZWRfc3ltYm9sIiA9IHllczsgdGhlbgotICAgICAgICAgIF9MVF9UQUdWQVIoYXJjaGl2ZV9leHBzeW1fY21kcywgJDEpPSckQ0MgLXNoYXJlZCAkcGljX2ZsYWcgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzICR7d2x9LXNvbmFtZSAke3dsfSRzb25hbWUgYHRlc3QgLW4gIiR2ZXJzdHJpbmciICYmIGZ1bmNfZWNob19hbGwgIiR7d2x9LXNldF92ZXJzaW9uICR7d2x9JHZlcnN0cmluZyJgICR7d2x9LXVwZGF0ZV9yZWdpc3RyeSAke3dsfSR7b3V0cHV0X29iamRpcn0vc29fbG9jYXRpb25zICR7d2x9LWV4cG9ydHNfZmlsZSAke3dsfSRleHBvcnRfc3ltYm9scyAtbyAkbGliJwotCWZpCi0gICAgICBlbHNlCi0JX0xUX1RBR1ZBUihhcmNoaXZlX2NtZHMsICQxKT0nJENDIC1zaGFyZWQgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzIC1zb25hbWUgJHNvbmFtZSBgdGVzdCAtbiAiJHZlcnN0cmluZyIgJiYgZnVuY19lY2hvX2FsbCAiLXNldF92ZXJzaW9uICR2ZXJzdHJpbmciYCAtdXBkYXRlX3JlZ2lzdHJ5ICR7b3V0cHV0X29iamRpcn0vc29fbG9jYXRpb25zIC1vICRsaWInCi0JX0xUX1RBR1ZBUihhcmNoaXZlX2V4cHN5bV9jbWRzLCAkMSk9JyRDQyAtc2hhcmVkICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncyAtc29uYW1lICRzb25hbWUgYHRlc3QgLW4gIiR2ZXJzdHJpbmciICYmIGZ1bmNfZWNob19hbGwgIi1zZXRfdmVyc2lvbiAkdmVyc3RyaW5nImAgLXVwZGF0ZV9yZWdpc3RyeSAke291dHB1dF9vYmpkaXJ9L3NvX2xvY2F0aW9ucyAtZXhwb3J0c19maWxlICRleHBvcnRfc3ltYm9scyAtbyAkbGliJwotICAgICAgZmkKLSAgICAgIF9MVF9UQUdWQVIoYXJjaGl2ZV9jbWRzX25lZWRfbGMsICQxKT0nbm8nCi0gICAgICBfTFRfVEFHVkFSKGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWMsICQxKT0nJHt3bH0tcnBhdGggJHt3bH0kbGliZGlyJwotICAgICAgX0xUX1RBR1ZBUihoYXJkY29kZV9saWJkaXJfc2VwYXJhdG9yLCAkMSk9OgotICAgICAgX0xUX1RBR1ZBUihpbmhlcml0X3JwYXRoLCAkMSk9eWVzCi0gICAgICBfTFRfVEFHVkFSKGxpbmtfYWxsX2RlcGxpYnMsICQxKT15ZXMKLSAgICAgIDs7Ci0KLSAgICBuZXRic2QqKQotICAgICAgaWYgZWNobyBfX0VMRl9fIHwgJENDIC1FIC0gfCAkR1JFUCBfX0VMRl9fID4vZGV2L251bGw7IHRoZW4KLQlfTFRfVEFHVkFSKGFyY2hpdmVfY21kcywgJDEpPSckTEQgLUJzaGFyZWFibGUgLW8gJGxpYiAkbGlib2JqcyAkZGVwbGlicyAkbGlua2VyX2ZsYWdzJyAgIyBhLm91dAotICAgICAgZWxzZQotCV9MVF9UQUdWQVIoYXJjaGl2ZV9jbWRzLCAkMSk9JyRMRCAtc2hhcmVkIC1vICRsaWIgJGxpYm9ianMgJGRlcGxpYnMgJGxpbmtlcl9mbGFncycgICAgICAjIEVMRgotICAgICAgZmkKLSAgICAgIF9MVF9UQUdWQVIoaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYywgJDEpPSctUiRsaWJkaXInCi0gICAgICBfTFRfVEFHVkFSKGhhcmRjb2RlX2RpcmVjdCwgJDEpPXllcwotICAgICAgX0xUX1RBR1ZBUihoYXJkY29kZV9zaGxpYnBhdGhfdmFyLCAkMSk9bm8KLSAgICAgIDs7Ci0KLSAgICBuZXdzb3M2KQotICAgICAgX0xUX1RBR1ZBUihhcmNoaXZlX2NtZHMsICQxKT0nJExEIC1HIC1oICRzb25hbWUgLW8gJGxpYiAkbGlib2JqcyAkZGVwbGlicyAkbGlua2VyX2ZsYWdzJwotICAgICAgX0xUX1RBR1ZBUihoYXJkY29kZV9kaXJlY3QsICQxKT15ZXMKLSAgICAgIF9MVF9UQUdWQVIoaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYywgJDEpPScke3dsfS1ycGF0aCAke3dsfSRsaWJkaXInCi0gICAgICBfTFRfVEFHVkFSKGhhcmRjb2RlX2xpYmRpcl9zZXBhcmF0b3IsICQxKT06Ci0gICAgICBfTFRfVEFHVkFSKGhhcmRjb2RlX3NobGlicGF0aF92YXIsICQxKT1ubwotICAgICAgOzsKLQotICAgICpudG8qIHwgKnFueCopCi0gICAgICA7OwotCi0gICAgb3BlbmJzZCopCi0gICAgICBpZiB0ZXN0IC1mIC91c3IvbGliZXhlYy9sZC5zbzsgdGhlbgotCV9MVF9UQUdWQVIoaGFyZGNvZGVfZGlyZWN0LCAkMSk9eWVzCi0JX0xUX1RBR1ZBUihoYXJkY29kZV9zaGxpYnBhdGhfdmFyLCAkMSk9bm8KLQlfTFRfVEFHVkFSKGhhcmRjb2RlX2RpcmVjdF9hYnNvbHV0ZSwgJDEpPXllcwotCWlmIHRlc3QgLXogImBlY2hvIF9fRUxGX18gfCAkQ0MgLUUgLSB8ICRHUkVQIF9fRUxGX19gIiB8fCB0ZXN0ICIkaG9zdF9vcy0kaG9zdF9jcHUiID0gIm9wZW5ic2QyLjgtcG93ZXJwYyI7IHRoZW4KLQkgIF9MVF9UQUdWQVIoYXJjaGl2ZV9jbWRzLCAkMSk9JyRDQyAtc2hhcmVkICRwaWNfZmxhZyAtbyAkbGliICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncycKLQkgIF9MVF9UQUdWQVIoYXJjaGl2ZV9leHBzeW1fY21kcywgJDEpPSckQ0MgLXNoYXJlZCAkcGljX2ZsYWcgLW8gJGxpYiAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MgJHt3bH0tcmV0YWluLXN5bWJvbHMtZmlsZSwkZXhwb3J0X3N5bWJvbHMnCi0JICBfTFRfVEFHVkFSKGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWMsICQxKT0nJHt3bH0tcnBhdGgsJGxpYmRpcicKLQkgIF9MVF9UQUdWQVIoZXhwb3J0X2R5bmFtaWNfZmxhZ19zcGVjLCAkMSk9JyR7d2x9LUUnCi0JZWxzZQotCSAgY2FzZSAkaG9zdF9vcyBpbgotCSAgIG9wZW5ic2RbWzAxXV0uKiB8IG9wZW5ic2QyLltbMC03XV0gfCBvcGVuYnNkMi5bWzAtN11dLiopCi0JICAgICBfTFRfVEFHVkFSKGFyY2hpdmVfY21kcywgJDEpPSckTEQgLUJzaGFyZWFibGUgLW8gJGxpYiAkbGlib2JqcyAkZGVwbGlicyAkbGlua2VyX2ZsYWdzJwotCSAgICAgX0xUX1RBR1ZBUihoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjLCAkMSk9Jy1SJGxpYmRpcicKLQkgICAgIDs7Ci0JICAgKikKLQkgICAgIF9MVF9UQUdWQVIoYXJjaGl2ZV9jbWRzLCAkMSk9JyRDQyAtc2hhcmVkICRwaWNfZmxhZyAtbyAkbGliICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncycKLQkgICAgIF9MVF9UQUdWQVIoaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYywgJDEpPScke3dsfS1ycGF0aCwkbGliZGlyJwotCSAgICAgOzsKLQkgIGVzYWMKLQlmaQotICAgICAgZWxzZQotCV9MVF9UQUdWQVIobGRfc2hsaWJzLCAkMSk9bm8KLSAgICAgIGZpCi0gICAgICA7OwotCi0gICAgb3MyKikKLSAgICAgIF9MVF9UQUdWQVIoaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYywgJDEpPSctTCRsaWJkaXInCi0gICAgICBfTFRfVEFHVkFSKGhhcmRjb2RlX21pbnVzX0wsICQxKT15ZXMKLSAgICAgIF9MVF9UQUdWQVIoYWxsb3dfdW5kZWZpbmVkX2ZsYWcsICQxKT11bnN1cHBvcnRlZAotICAgICAgX0xUX1RBR1ZBUihhcmNoaXZlX2NtZHMsICQxKT0nJEVDSE8gIkxJQlJBUlkgJGxpYm5hbWUgSU5JVElOU1RBTkNFIiA+ICRvdXRwdXRfb2JqZGlyLyRsaWJuYW1lLmRlZn4kRUNITyAiREVTQ1JJUFRJT04gXCIkbGlibmFtZVwiIiA+PiAkb3V0cHV0X29iamRpci8kbGlibmFtZS5kZWZ+ZWNobyBEQVRBID4+ICRvdXRwdXRfb2JqZGlyLyRsaWJuYW1lLmRlZn5lY2hvICIgU0lOR0xFIE5PTlNIQVJFRCIgPj4gJG91dHB1dF9vYmpkaXIvJGxpYm5hbWUuZGVmfmVjaG8gRVhQT1JUUyA+PiAkb3V0cHV0X29iamRpci8kbGlibmFtZS5kZWZ+ZW14ZXhwICRsaWJvYmpzID4+ICRvdXRwdXRfb2JqZGlyLyRsaWJuYW1lLmRlZn4kQ0MgLVpkbGwgLVpjcnRkbGwgLW8gJGxpYiAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MgJG91dHB1dF9vYmpkaXIvJGxpYm5hbWUuZGVmJwotICAgICAgX0xUX1RBR1ZBUihvbGRfYXJjaGl2ZV9mcm9tX25ld19jbWRzLCAkMSk9J2VteGltcCAtbyAkb3V0cHV0X29iamRpci8kbGlibmFtZS5hICRvdXRwdXRfb2JqZGlyLyRsaWJuYW1lLmRlZicKLSAgICAgIDs7Ci0KLSAgICBvc2YzKikKLSAgICAgIGlmIHRlc3QgIiRHQ0MiID0geWVzOyB0aGVuCi0JX0xUX1RBR1ZBUihhbGxvd191bmRlZmluZWRfZmxhZywgJDEpPScgJHt3bH0tZXhwZWN0X3VucmVzb2x2ZWQgJHt3bH1cKicKLQlfTFRfVEFHVkFSKGFyY2hpdmVfY21kcywgJDEpPSckQ0MgLXNoYXJlZCR7YWxsb3dfdW5kZWZpbmVkX2ZsYWd9ICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncyAke3dsfS1zb25hbWUgJHt3bH0kc29uYW1lIGB0ZXN0IC1uICIkdmVyc3RyaW5nIiAmJiBmdW5jX2VjaG9fYWxsICIke3dsfS1zZXRfdmVyc2lvbiAke3dsfSR2ZXJzdHJpbmciYCAke3dsfS11cGRhdGVfcmVnaXN0cnkgJHt3bH0ke291dHB1dF9vYmpkaXJ9L3NvX2xvY2F0aW9ucyAtbyAkbGliJwotICAgICAgZWxzZQotCV9MVF9UQUdWQVIoYWxsb3dfdW5kZWZpbmVkX2ZsYWcsICQxKT0nIC1leHBlY3RfdW5yZXNvbHZlZCBcKicKLQlfTFRfVEFHVkFSKGFyY2hpdmVfY21kcywgJDEpPSckQ0MgLXNoYXJlZCR7YWxsb3dfdW5kZWZpbmVkX2ZsYWd9ICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncyAtc29uYW1lICRzb25hbWUgYHRlc3QgLW4gIiR2ZXJzdHJpbmciICYmIGZ1bmNfZWNob19hbGwgIi1zZXRfdmVyc2lvbiAkdmVyc3RyaW5nImAgLXVwZGF0ZV9yZWdpc3RyeSAke291dHB1dF9vYmpkaXJ9L3NvX2xvY2F0aW9ucyAtbyAkbGliJwotICAgICAgZmkKLSAgICAgIF9MVF9UQUdWQVIoYXJjaGl2ZV9jbWRzX25lZWRfbGMsICQxKT0nbm8nCi0gICAgICBfTFRfVEFHVkFSKGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWMsICQxKT0nJHt3bH0tcnBhdGggJHt3bH0kbGliZGlyJwotICAgICAgX0xUX1RBR1ZBUihoYXJkY29kZV9saWJkaXJfc2VwYXJhdG9yLCAkMSk9OgotICAgICAgOzsKLQotICAgIG9zZjQqIHwgb3NmNSopCSMgYXMgb3NmMyogd2l0aCB0aGUgYWRkaXRpb24gb2YgLW1zeW0gZmxhZwotICAgICAgaWYgdGVzdCAiJEdDQyIgPSB5ZXM7IHRoZW4KLQlfTFRfVEFHVkFSKGFsbG93X3VuZGVmaW5lZF9mbGFnLCAkMSk9JyAke3dsfS1leHBlY3RfdW5yZXNvbHZlZCAke3dsfVwqJwotCV9MVF9UQUdWQVIoYXJjaGl2ZV9jbWRzLCAkMSk9JyRDQyAtc2hhcmVkJHthbGxvd191bmRlZmluZWRfZmxhZ30gJHBpY19mbGFnICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncyAke3dsfS1tc3ltICR7d2x9LXNvbmFtZSAke3dsfSRzb25hbWUgYHRlc3QgLW4gIiR2ZXJzdHJpbmciICYmIGZ1bmNfZWNob19hbGwgIiR7d2x9LXNldF92ZXJzaW9uICR7d2x9JHZlcnN0cmluZyJgICR7d2x9LXVwZGF0ZV9yZWdpc3RyeSAke3dsfSR7b3V0cHV0X29iamRpcn0vc29fbG9jYXRpb25zIC1vICRsaWInCi0JX0xUX1RBR1ZBUihoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjLCAkMSk9JyR7d2x9LXJwYXRoICR7d2x9JGxpYmRpcicKLSAgICAgIGVsc2UKLQlfTFRfVEFHVkFSKGFsbG93X3VuZGVmaW5lZF9mbGFnLCAkMSk9JyAtZXhwZWN0X3VucmVzb2x2ZWQgXConCi0JX0xUX1RBR1ZBUihhcmNoaXZlX2NtZHMsICQxKT0nJENDIC1zaGFyZWQke2FsbG93X3VuZGVmaW5lZF9mbGFnfSAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MgLW1zeW0gLXNvbmFtZSAkc29uYW1lIGB0ZXN0IC1uICIkdmVyc3RyaW5nIiAmJiBmdW5jX2VjaG9fYWxsICItc2V0X3ZlcnNpb24gJHZlcnN0cmluZyJgIC11cGRhdGVfcmVnaXN0cnkgJHtvdXRwdXRfb2JqZGlyfS9zb19sb2NhdGlvbnMgLW8gJGxpYicKLQlfTFRfVEFHVkFSKGFyY2hpdmVfZXhwc3ltX2NtZHMsICQxKT0nZm9yIGkgaW4gYGNhdCAkZXhwb3J0X3N5bWJvbHNgOyBkbyBwcmludGYgIiVzICVzXFxuIiAtZXhwb3J0ZWRfc3ltYm9sICJcJGkiID4+ICRsaWIuZXhwOyBkb25lOyBwcmludGYgIiVzXFxuIiAiLWhpZGRlbiI+PiAkbGliLmV4cH4KLQkkQ0MgLXNoYXJlZCR7YWxsb3dfdW5kZWZpbmVkX2ZsYWd9ICR7d2x9LWlucHV0ICR7d2x9JGxpYi5leHAgJGNvbXBpbGVyX2ZsYWdzICRsaWJvYmpzICRkZXBsaWJzIC1zb25hbWUgJHNvbmFtZSBgdGVzdCAtbiAiJHZlcnN0cmluZyIgJiYgJEVDSE8gIi1zZXRfdmVyc2lvbiAkdmVyc3RyaW5nImAgLXVwZGF0ZV9yZWdpc3RyeSAke291dHB1dF9vYmpkaXJ9L3NvX2xvY2F0aW9ucyAtbyAkbGlifiRSTSAkbGliLmV4cCcKLQotCSMgQm90aCBjIGFuZCBjeHggY29tcGlsZXIgc3VwcG9ydCAtcnBhdGggZGlyZWN0bHkKLQlfTFRfVEFHVkFSKGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWMsICQxKT0nLXJwYXRoICRsaWJkaXInCi0gICAgICBmaQotICAgICAgX0xUX1RBR1ZBUihhcmNoaXZlX2NtZHNfbmVlZF9sYywgJDEpPSdubycKLSAgICAgIF9MVF9UQUdWQVIoaGFyZGNvZGVfbGliZGlyX3NlcGFyYXRvciwgJDEpPToKLSAgICAgIDs7Ci0KLSAgICBzb2xhcmlzKikKLSAgICAgIF9MVF9UQUdWQVIobm9fdW5kZWZpbmVkX2ZsYWcsICQxKT0nIC16IGRlZnMnCi0gICAgICBpZiB0ZXN0ICIkR0NDIiA9IHllczsgdGhlbgotCXdsYXJjPScke3dsfScKLQlfTFRfVEFHVkFSKGFyY2hpdmVfY21kcywgJDEpPSckQ0MgLXNoYXJlZCAkcGljX2ZsYWcgJHt3bH0teiAke3dsfXRleHQgJHt3bH0taCAke3dsfSRzb25hbWUgLW8gJGxpYiAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MnCi0JX0xUX1RBR1ZBUihhcmNoaXZlX2V4cHN5bV9jbWRzLCAkMSk9J2VjaG8gInsgZ2xvYmFsOiIgPiAkbGliLmV4cH5jYXQgJGV4cG9ydF9zeW1ib2xzIHwgJFNFRCAtZSAicy9cKC4qXCkvXDE7LyIgPj4gJGxpYi5leHB+ZWNobyAibG9jYWw6ICo7IH07IiA+PiAkbGliLmV4cH4KLQkgICRDQyAtc2hhcmVkICRwaWNfZmxhZyAke3dsfS16ICR7d2x9dGV4dCAke3dsfS1NICR7d2x9JGxpYi5leHAgJHt3bH0taCAke3dsfSRzb25hbWUgLW8gJGxpYiAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3N+JFJNICRsaWIuZXhwJwotICAgICAgZWxzZQotCWNhc2UgYCRDQyAtViAyPiYxYCBpbgotCSoiQ29tcGlsZXJzIDUuMCIqKQotCSAgd2xhcmM9JycKLQkgIF9MVF9UQUdWQVIoYXJjaGl2ZV9jbWRzLCAkMSk9JyRMRCAtRyR7YWxsb3dfdW5kZWZpbmVkX2ZsYWd9IC1oICRzb25hbWUgLW8gJGxpYiAkbGlib2JqcyAkZGVwbGlicyAkbGlua2VyX2ZsYWdzJwotCSAgX0xUX1RBR1ZBUihhcmNoaXZlX2V4cHN5bV9jbWRzLCAkMSk9J2VjaG8gInsgZ2xvYmFsOiIgPiAkbGliLmV4cH5jYXQgJGV4cG9ydF9zeW1ib2xzIHwgJFNFRCAtZSAicy9cKC4qXCkvXDE7LyIgPj4gJGxpYi5leHB+ZWNobyAibG9jYWw6ICo7IH07IiA+PiAkbGliLmV4cH4KLQkgICRMRCAtRyR7YWxsb3dfdW5kZWZpbmVkX2ZsYWd9IC1NICRsaWIuZXhwIC1oICRzb25hbWUgLW8gJGxpYiAkbGlib2JqcyAkZGVwbGlicyAkbGlua2VyX2ZsYWdzfiRSTSAkbGliLmV4cCcKLQkgIDs7Ci0JKikKLQkgIHdsYXJjPScke3dsfScKLQkgIF9MVF9UQUdWQVIoYXJjaGl2ZV9jbWRzLCAkMSk9JyRDQyAtRyR7YWxsb3dfdW5kZWZpbmVkX2ZsYWd9IC1oICRzb25hbWUgLW8gJGxpYiAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MnCi0JICBfTFRfVEFHVkFSKGFyY2hpdmVfZXhwc3ltX2NtZHMsICQxKT0nZWNobyAieyBnbG9iYWw6IiA+ICRsaWIuZXhwfmNhdCAkZXhwb3J0X3N5bWJvbHMgfCAkU0VEIC1lICJzL1woLipcKS9cMTsvIiA+PiAkbGliLmV4cH5lY2hvICJsb2NhbDogKjsgfTsiID4+ICRsaWIuZXhwfgotCSAgJENDIC1HJHthbGxvd191bmRlZmluZWRfZmxhZ30gLU0gJGxpYi5leHAgLWggJHNvbmFtZSAtbyAkbGliICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFnc34kUk0gJGxpYi5leHAnCi0JICA7OwotCWVzYWMKLSAgICAgIGZpCi0gICAgICBfTFRfVEFHVkFSKGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWMsICQxKT0nLVIkbGliZGlyJwotICAgICAgX0xUX1RBR1ZBUihoYXJkY29kZV9zaGxpYnBhdGhfdmFyLCAkMSk9bm8KLSAgICAgIGNhc2UgJGhvc3Rfb3MgaW4KLSAgICAgIHNvbGFyaXMyLltbMC01XV0gfCBzb2xhcmlzMi5bWzAtNV1dLiopIDs7Ci0gICAgICAqKQotCSMgVGhlIGNvbXBpbGVyIGRyaXZlciB3aWxsIGNvbWJpbmUgYW5kIHJlb3JkZXIgbGlua2VyIG9wdGlvbnMsCi0JIyBidXQgdW5kZXJzdGFuZHMgYC16IGxpbmtlcl9mbGFnJy4gIEdDQyBkaXNjYXJkcyBpdCB3aXRob3V0IGAkd2wnLAotCSMgYnV0IGlzIGNhcmVmdWwgZW5vdWdoIG5vdCB0byByZW9yZGVyLgotCSMgU3VwcG9ydGVkIHNpbmNlIFNvbGFyaXMgMi42IChtYXliZSAyLjUuMT8pCi0JaWYgdGVzdCAiJEdDQyIgPSB5ZXM7IHRoZW4KLQkgIF9MVF9UQUdWQVIod2hvbGVfYXJjaGl2ZV9mbGFnX3NwZWMsICQxKT0nJHt3bH0teiAke3dsfWFsbGV4dHJhY3QkY29udmVuaWVuY2UgJHt3bH0teiAke3dsfWRlZmF1bHRleHRyYWN0JwotCWVsc2UKLQkgIF9MVF9UQUdWQVIod2hvbGVfYXJjaGl2ZV9mbGFnX3NwZWMsICQxKT0nLXogYWxsZXh0cmFjdCRjb252ZW5pZW5jZSAteiBkZWZhdWx0ZXh0cmFjdCcKLQlmaQotCTs7Ci0gICAgICBlc2FjCi0gICAgICBfTFRfVEFHVkFSKGxpbmtfYWxsX2RlcGxpYnMsICQxKT15ZXMKLSAgICAgIDs7Ci0KLSAgICBzdW5vczQqKQotICAgICAgaWYgdGVzdCAieCRob3N0X3ZlbmRvciIgPSB4c2VxdWVudDsgdGhlbgotCSMgVXNlICRDQyB0byBsaW5rIHVuZGVyIHNlcXVlbnQsIGJlY2F1c2UgaXQgdGhyb3dzIGluIHNvbWUgZXh0cmEgLm8KLQkjIGZpbGVzIHRoYXQgbWFrZSAuaW5pdCBhbmQgLmZpbmkgc2VjdGlvbnMgd29yay4KLQlfTFRfVEFHVkFSKGFyY2hpdmVfY21kcywgJDEpPSckQ0MgLUcgJHt3bH0taCAkc29uYW1lIC1vICRsaWIgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzJwotICAgICAgZWxzZQotCV9MVF9UQUdWQVIoYXJjaGl2ZV9jbWRzLCAkMSk9JyRMRCAtYXNzZXJ0IHB1cmUtdGV4dCAtQnN0YXRpYyAtbyAkbGliICRsaWJvYmpzICRkZXBsaWJzICRsaW5rZXJfZmxhZ3MnCi0gICAgICBmaQotICAgICAgX0xUX1RBR1ZBUihoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjLCAkMSk9Jy1MJGxpYmRpcicKLSAgICAgIF9MVF9UQUdWQVIoaGFyZGNvZGVfZGlyZWN0LCAkMSk9eWVzCi0gICAgICBfTFRfVEFHVkFSKGhhcmRjb2RlX21pbnVzX0wsICQxKT15ZXMKLSAgICAgIF9MVF9UQUdWQVIoaGFyZGNvZGVfc2hsaWJwYXRoX3ZhciwgJDEpPW5vCi0gICAgICA7OwotCi0gICAgc3lzdjQpCi0gICAgICBjYXNlICRob3N0X3ZlbmRvciBpbgotCXNuaSkKLQkgIF9MVF9UQUdWQVIoYXJjaGl2ZV9jbWRzLCAkMSk9JyRMRCAtRyAtaCAkc29uYW1lIC1vICRsaWIgJGxpYm9ianMgJGRlcGxpYnMgJGxpbmtlcl9mbGFncycKLQkgIF9MVF9UQUdWQVIoaGFyZGNvZGVfZGlyZWN0LCAkMSk9eWVzICMgaXMgdGhpcyByZWFsbHkgdHJ1ZT8/PwotCTs7Ci0Jc2llbWVucykKLQkgICMjIExEIGlzIGxkIGl0IG1ha2VzIGEgUExBTUxJQgotCSAgIyMgQ0MganVzdCBtYWtlcyBhIEdyb3NzTW9kdWxlLgotCSAgX0xUX1RBR1ZBUihhcmNoaXZlX2NtZHMsICQxKT0nJExEIC1HIC1vICRsaWIgJGxpYm9ianMgJGRlcGxpYnMgJGxpbmtlcl9mbGFncycKLQkgIF9MVF9UQUdWQVIocmVsb2FkX2NtZHMsICQxKT0nJENDIC1yIC1vICRvdXRwdXQkcmVsb2FkX29ianMnCi0JICBfTFRfVEFHVkFSKGhhcmRjb2RlX2RpcmVjdCwgJDEpPW5vCi0gICAgICAgIDs7Ci0JbW90b3JvbGEpCi0JICBfTFRfVEFHVkFSKGFyY2hpdmVfY21kcywgJDEpPSckTEQgLUcgLWggJHNvbmFtZSAtbyAkbGliICRsaWJvYmpzICRkZXBsaWJzICRsaW5rZXJfZmxhZ3MnCi0JICBfTFRfVEFHVkFSKGhhcmRjb2RlX2RpcmVjdCwgJDEpPW5vICNNb3Rvcm9sYSBtYW51YWwgc2F5cyB5ZXMsIGJ1dCBteSB0ZXN0cyBzYXkgdGhleSBsaWUKLQk7OwotICAgICAgZXNhYwotICAgICAgcnVucGF0aF92YXI9J0xEX1JVTl9QQVRIJwotICAgICAgX0xUX1RBR1ZBUihoYXJkY29kZV9zaGxpYnBhdGhfdmFyLCAkMSk9bm8KLSAgICAgIDs7Ci0KLSAgICBzeXN2NC4zKikKLSAgICAgIF9MVF9UQUdWQVIoYXJjaGl2ZV9jbWRzLCAkMSk9JyRMRCAtRyAtaCAkc29uYW1lIC1vICRsaWIgJGxpYm9ianMgJGRlcGxpYnMgJGxpbmtlcl9mbGFncycKLSAgICAgIF9MVF9UQUdWQVIoaGFyZGNvZGVfc2hsaWJwYXRoX3ZhciwgJDEpPW5vCi0gICAgICBfTFRfVEFHVkFSKGV4cG9ydF9keW5hbWljX2ZsYWdfc3BlYywgJDEpPSctQmV4cG9ydCcKLSAgICAgIDs7Ci0KLSAgICBzeXN2NCpNUCopCi0gICAgICBpZiB0ZXN0IC1kIC91c3IvbmVjOyB0aGVuCi0JX0xUX1RBR1ZBUihhcmNoaXZlX2NtZHMsICQxKT0nJExEIC1HIC1oICRzb25hbWUgLW8gJGxpYiAkbGlib2JqcyAkZGVwbGlicyAkbGlua2VyX2ZsYWdzJwotCV9MVF9UQUdWQVIoaGFyZGNvZGVfc2hsaWJwYXRoX3ZhciwgJDEpPW5vCi0JcnVucGF0aF92YXI9TERfUlVOX1BBVEgKLQloYXJkY29kZV9ydW5wYXRoX3Zhcj15ZXMKLQlfTFRfVEFHVkFSKGxkX3NobGlicywgJDEpPXllcwotICAgICAgZmkKLSAgICAgIDs7Ci0KLSAgICBzeXN2NCp1dzIqIHwgc3lzdjVPcGVuVU5JWCogfCBzeXN2NVVuaXhXYXJlNy5bWzAxXV0uW1sxMF1dKiB8IHVuaXh3YXJlNyogfCBzY28zLjJ2NS4wLltbMDI0XV0qKQotICAgICAgX0xUX1RBR1ZBUihub191bmRlZmluZWRfZmxhZywgJDEpPScke3dsfS16LHRleHQnCi0gICAgICBfTFRfVEFHVkFSKGFyY2hpdmVfY21kc19uZWVkX2xjLCAkMSk9bm8KLSAgICAgIF9MVF9UQUdWQVIoaGFyZGNvZGVfc2hsaWJwYXRoX3ZhciwgJDEpPW5vCi0gICAgICBydW5wYXRoX3Zhcj0nTERfUlVOX1BBVEgnCi0KLSAgICAgIGlmIHRlc3QgIiRHQ0MiID0geWVzOyB0aGVuCi0JX0xUX1RBR1ZBUihhcmNoaXZlX2NtZHMsICQxKT0nJENDIC1zaGFyZWQgJHt3bH0taCwkc29uYW1lIC1vICRsaWIgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzJwotCV9MVF9UQUdWQVIoYXJjaGl2ZV9leHBzeW1fY21kcywgJDEpPSckQ0MgLXNoYXJlZCAke3dsfS1CZXhwb3J0OiRleHBvcnRfc3ltYm9scyAke3dsfS1oLCRzb25hbWUgLW8gJGxpYiAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MnCi0gICAgICBlbHNlCi0JX0xUX1RBR1ZBUihhcmNoaXZlX2NtZHMsICQxKT0nJENDIC1HICR7d2x9LWgsJHNvbmFtZSAtbyAkbGliICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncycKLQlfTFRfVEFHVkFSKGFyY2hpdmVfZXhwc3ltX2NtZHMsICQxKT0nJENDIC1HICR7d2x9LUJleHBvcnQ6JGV4cG9ydF9zeW1ib2xzICR7d2x9LWgsJHNvbmFtZSAtbyAkbGliICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncycKLSAgICAgIGZpCi0gICAgICA7OwotCi0gICAgc3lzdjUqIHwgc2NvMy4ydjUqIHwgc2NvNXY2KikKLSAgICAgICMgTm90ZTogV2UgY2FuIE5PVCB1c2UgLXogZGVmcyBhcyB3ZSBtaWdodCBkZXNpcmUsIGJlY2F1c2Ugd2UgZG8gbm90Ci0gICAgICAjIGxpbmsgd2l0aCAtbGMsIGFuZCB0aGF0IHdvdWxkIGNhdXNlIGFueSBzeW1ib2xzIHVzZWQgZnJvbSBsaWJjIHRvCi0gICAgICAjIGFsd2F5cyBiZSB1bnJlc29sdmVkLCB3aGljaCBtZWFucyBqdXN0IGFib3V0IG5vIGxpYnJhcnkgd291bGQKLSAgICAgICMgZXZlciBsaW5rIGNvcnJlY3RseS4gIElmIHdlJ3JlIG5vdCB1c2luZyBHTlUgbGQgd2UgdXNlIC16IHRleHQKLSAgICAgICMgdGhvdWdoLCB3aGljaCBkb2VzIGNhdGNoIHNvbWUgYmFkIHN5bWJvbHMgYnV0IGlzbid0IGFzIGhlYXZ5LWhhbmRlZAotICAgICAgIyBhcyAteiBkZWZzLgotICAgICAgX0xUX1RBR1ZBUihub191bmRlZmluZWRfZmxhZywgJDEpPScke3dsfS16LHRleHQnCi0gICAgICBfTFRfVEFHVkFSKGFsbG93X3VuZGVmaW5lZF9mbGFnLCAkMSk9JyR7d2x9LXosbm9kZWZzJwotICAgICAgX0xUX1RBR1ZBUihhcmNoaXZlX2NtZHNfbmVlZF9sYywgJDEpPW5vCi0gICAgICBfTFRfVEFHVkFSKGhhcmRjb2RlX3NobGlicGF0aF92YXIsICQxKT1ubwotICAgICAgX0xUX1RBR1ZBUihoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjLCAkMSk9JyR7d2x9LVIsJGxpYmRpcicKLSAgICAgIF9MVF9UQUdWQVIoaGFyZGNvZGVfbGliZGlyX3NlcGFyYXRvciwgJDEpPSc6JwotICAgICAgX0xUX1RBR1ZBUihsaW5rX2FsbF9kZXBsaWJzLCAkMSk9eWVzCi0gICAgICBfTFRfVEFHVkFSKGV4cG9ydF9keW5hbWljX2ZsYWdfc3BlYywgJDEpPScke3dsfS1CZXhwb3J0JwotICAgICAgcnVucGF0aF92YXI9J0xEX1JVTl9QQVRIJwotCi0gICAgICBpZiB0ZXN0ICIkR0NDIiA9IHllczsgdGhlbgotCV9MVF9UQUdWQVIoYXJjaGl2ZV9jbWRzLCAkMSk9JyRDQyAtc2hhcmVkICR7d2x9LWgsJHNvbmFtZSAtbyAkbGliICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncycKLQlfTFRfVEFHVkFSKGFyY2hpdmVfZXhwc3ltX2NtZHMsICQxKT0nJENDIC1zaGFyZWQgJHt3bH0tQmV4cG9ydDokZXhwb3J0X3N5bWJvbHMgJHt3bH0taCwkc29uYW1lIC1vICRsaWIgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzJwotICAgICAgZWxzZQotCV9MVF9UQUdWQVIoYXJjaGl2ZV9jbWRzLCAkMSk9JyRDQyAtRyAke3dsfS1oLCRzb25hbWUgLW8gJGxpYiAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MnCi0JX0xUX1RBR1ZBUihhcmNoaXZlX2V4cHN5bV9jbWRzLCAkMSk9JyRDQyAtRyAke3dsfS1CZXhwb3J0OiRleHBvcnRfc3ltYm9scyAke3dsfS1oLCRzb25hbWUgLW8gJGxpYiAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MnCi0gICAgICBmaQotICAgICAgOzsKLQotICAgIHV0czQqKQotICAgICAgX0xUX1RBR1ZBUihhcmNoaXZlX2NtZHMsICQxKT0nJExEIC1HIC1oICRzb25hbWUgLW8gJGxpYiAkbGlib2JqcyAkZGVwbGlicyAkbGlua2VyX2ZsYWdzJwotICAgICAgX0xUX1RBR1ZBUihoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjLCAkMSk9Jy1MJGxpYmRpcicKLSAgICAgIF9MVF9UQUdWQVIoaGFyZGNvZGVfc2hsaWJwYXRoX3ZhciwgJDEpPW5vCi0gICAgICA7OwotCi0gICAgKikKLSAgICAgIF9MVF9UQUdWQVIobGRfc2hsaWJzLCAkMSk9bm8KLSAgICAgIDs7Ci0gICAgZXNhYwotCi0gICAgaWYgdGVzdCB4JGhvc3RfdmVuZG9yID0geHNuaTsgdGhlbgotICAgICAgY2FzZSAkaG9zdCBpbgotICAgICAgc3lzdjQgfCBzeXN2NC4ydXcyKiB8IHN5c3Y0LjMqIHwgc3lzdjUqKQotCV9MVF9UQUdWQVIoZXhwb3J0X2R5bmFtaWNfZmxhZ19zcGVjLCAkMSk9JyR7d2x9LUJsYXJnZWR5bnN5bScKLQk7OwotICAgICAgZXNhYwotICAgIGZpCi0gIGZpCi1dKQotQUNfTVNHX1JFU1VMVChbJF9MVF9UQUdWQVIobGRfc2hsaWJzLCAkMSldKQotdGVzdCAiJF9MVF9UQUdWQVIobGRfc2hsaWJzLCAkMSkiID0gbm8gJiYgY2FuX2J1aWxkX3NoYXJlZD1ubwotCi1fTFRfVEFHVkFSKHdpdGhfZ251X2xkLCAkMSk9JHdpdGhfZ251X2xkCi0KLV9MVF9ERUNMKFtdLCBbbGliZXh0XSwgWzBdLCBbT2xkIGFyY2hpdmUgc3VmZml4IChub3JtYWxseSAiYSIpXSlkbmwKLV9MVF9ERUNMKFtdLCBbc2hyZXh0X2NtZHNdLCBbMV0sIFtTaGFyZWQgbGlicmFyeSBzdWZmaXggKG5vcm1hbGx5ICIuc28iKV0pZG5sCi1fTFRfREVDTChbXSwgW2V4dHJhY3RfZXhwc3ltc19jbWRzXSwgWzJdLAotICAgIFtUaGUgY29tbWFuZHMgdG8gZXh0cmFjdCB0aGUgZXhwb3J0ZWQgc3ltYm9sIGxpc3QgZnJvbSBhIHNoYXJlZCBhcmNoaXZlXSkKLQotIwotIyBEbyB3ZSBuZWVkIHRvIGV4cGxpY2l0bHkgbGluayBsaWJjPwotIwotY2FzZSAieCRfTFRfVEFHVkFSKGFyY2hpdmVfY21kc19uZWVkX2xjLCAkMSkiIGluCi14fHh5ZXMpCi0gICMgQXNzdW1lIC1sYyBzaG91bGQgYmUgYWRkZWQKLSAgX0xUX1RBR1ZBUihhcmNoaXZlX2NtZHNfbmVlZF9sYywgJDEpPXllcwotCi0gIGlmIHRlc3QgIiRlbmFibGVfc2hhcmVkIiA9IHllcyAmJiB0ZXN0ICIkR0NDIiA9IHllczsgdGhlbgotICAgIGNhc2UgJF9MVF9UQUdWQVIoYXJjaGl2ZV9jbWRzLCAkMSkgaW4KLSAgICAqJ34nKikKLSAgICAgICMgRklYTUU6IHdlIG1heSBoYXZlIHRvIGRlYWwgd2l0aCBtdWx0aS1jb21tYW5kIHNlcXVlbmNlcy4KLSAgICAgIDs7Ci0gICAgJyRDQyAnKikKLSAgICAgICMgVGVzdCB3aGV0aGVyIHRoZSBjb21waWxlciBpbXBsaWNpdGx5IGxpbmtzIHdpdGggLWxjIHNpbmNlIG9uIHNvbWUKLSAgICAgICMgc3lzdGVtcywgLWxnY2MgaGFzIHRvIGNvbWUgYmVmb3JlIC1sYy4gSWYgZ2NjIGFscmVhZHkgcGFzc2VzIC1sYwotICAgICAgIyB0byBsZCwgZG9uJ3QgYWRkIC1sYyBiZWZvcmUgLWxnY2MuCi0gICAgICBBQ19DQUNIRV9DSEVDSyhbd2hldGhlciAtbGMgc2hvdWxkIGJlIGV4cGxpY2l0bHkgbGlua2VkIGluXSwKLQlbbHRfY3ZfXV9MVF9UQUdWQVIoYXJjaGl2ZV9jbWRzX25lZWRfbGMsICQxKSwKLQlbJFJNIGNvbmZ0ZXN0KgotCWVjaG8gIiRsdF9zaW1wbGVfY29tcGlsZV90ZXN0X2NvZGUiID4gY29uZnRlc3QuJGFjX2V4dAotCi0JaWYgQUNfVFJZX0VWQUwoYWNfY29tcGlsZSkgMj5jb25mdGVzdC5lcnI7IHRoZW4KLQkgIHNvbmFtZT1jb25mdGVzdAotCSAgbGliPWNvbmZ0ZXN0Ci0JICBsaWJvYmpzPWNvbmZ0ZXN0LiRhY19vYmpleHQKLQkgIGRlcGxpYnM9Ci0JICB3bD0kX0xUX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX3dsLCAkMSkKLQkgIHBpY19mbGFnPSRfTFRfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfcGljLCAkMSkKLQkgIGNvbXBpbGVyX2ZsYWdzPS12Ci0JICBsaW5rZXJfZmxhZ3M9LXYKLQkgIHZlcnN0cmluZz0KLQkgIG91dHB1dF9vYmpkaXI9LgotCSAgbGlibmFtZT1jb25mdGVzdAotCSAgbHRfc2F2ZV9hbGxvd191bmRlZmluZWRfZmxhZz0kX0xUX1RBR1ZBUihhbGxvd191bmRlZmluZWRfZmxhZywgJDEpCi0JICBfTFRfVEFHVkFSKGFsbG93X3VuZGVmaW5lZF9mbGFnLCAkMSk9Ci0JICBpZiBBQ19UUllfRVZBTChfTFRfVEFHVkFSKGFyY2hpdmVfY21kcywgJDEpIDJcPlwmMSBcfCAkR1JFUCBcIiAtbGMgXCIgXD4vZGV2L251bGwgMlw+XCYxKQotCSAgdGhlbgotCSAgICBsdF9jdl9bXV9MVF9UQUdWQVIoYXJjaGl2ZV9jbWRzX25lZWRfbGMsICQxKT1ubwotCSAgZWxzZQotCSAgICBsdF9jdl9bXV9MVF9UQUdWQVIoYXJjaGl2ZV9jbWRzX25lZWRfbGMsICQxKT15ZXMKLQkgIGZpCi0JICBfTFRfVEFHVkFSKGFsbG93X3VuZGVmaW5lZF9mbGFnLCAkMSk9JGx0X3NhdmVfYWxsb3dfdW5kZWZpbmVkX2ZsYWcKLQllbHNlCi0JICBjYXQgY29uZnRlc3QuZXJyIDE+JjUKLQlmaQotCSRSTSBjb25mdGVzdCoKLQldKQotICAgICAgX0xUX1RBR1ZBUihhcmNoaXZlX2NtZHNfbmVlZF9sYywgJDEpPSRsdF9jdl9bXV9MVF9UQUdWQVIoYXJjaGl2ZV9jbWRzX25lZWRfbGMsICQxKQotICAgICAgOzsKLSAgICBlc2FjCi0gIGZpCi0gIDs7Ci1lc2FjCi0KLV9MVF9UQUdERUNMKFtidWlsZF9saWJ0b29sX25lZWRfbGNdLCBbYXJjaGl2ZV9jbWRzX25lZWRfbGNdLCBbMF0sCi0gICAgW1doZXRoZXIgb3Igbm90IHRvIGFkZCAtbGMgZm9yIGJ1aWxkaW5nIHNoYXJlZCBsaWJyYXJpZXNdKQotX0xUX1RBR0RFQ0woW2FsbG93X2xpYnRvb2xfbGlic193aXRoX3N0YXRpY19ydW50aW1lc10sCi0gICAgW2VuYWJsZV9zaGFyZWRfd2l0aF9zdGF0aWNfcnVudGltZXNdLCBbMF0sCi0gICAgW1doZXRoZXIgb3Igbm90IHRvIGRpc2FsbG93IHNoYXJlZCBsaWJzIHdoZW4gcnVudGltZSBsaWJzIGFyZSBzdGF0aWNdKQotX0xUX1RBR0RFQ0woW10sIFtleHBvcnRfZHluYW1pY19mbGFnX3NwZWNdLCBbMV0sCi0gICAgW0NvbXBpbGVyIGZsYWcgdG8gYWxsb3cgcmVmbGV4aXZlIGRsb3BlbnNdKQotX0xUX1RBR0RFQ0woW10sIFt3aG9sZV9hcmNoaXZlX2ZsYWdfc3BlY10sIFsxXSwKLSAgICBbQ29tcGlsZXIgZmxhZyB0byBnZW5lcmF0ZSBzaGFyZWQgb2JqZWN0cyBkaXJlY3RseSBmcm9tIGFyY2hpdmVzXSkKLV9MVF9UQUdERUNMKFtdLCBbY29tcGlsZXJfbmVlZHNfb2JqZWN0XSwgWzFdLAotICAgIFtXaGV0aGVyIHRoZSBjb21waWxlciBjb3BlcyB3aXRoIHBhc3Npbmcgbm8gb2JqZWN0cyBkaXJlY3RseV0pCi1fTFRfVEFHREVDTChbXSwgW29sZF9hcmNoaXZlX2Zyb21fbmV3X2NtZHNdLCBbMl0sCi0gICAgW0NyZWF0ZSBhbiBvbGQtc3R5bGUgYXJjaGl2ZSBmcm9tIGEgc2hhcmVkIGFyY2hpdmVdKQotX0xUX1RBR0RFQ0woW10sIFtvbGRfYXJjaGl2ZV9mcm9tX2V4cHN5bXNfY21kc10sIFsyXSwKLSAgICBbQ3JlYXRlIGEgdGVtcG9yYXJ5IG9sZC1zdHlsZSBhcmNoaXZlIHRvIGxpbmsgaW5zdGVhZCBvZiBhIHNoYXJlZCBhcmNoaXZlXSkKLV9MVF9UQUdERUNMKFtdLCBbYXJjaGl2ZV9jbWRzXSwgWzJdLCBbQ29tbWFuZHMgdXNlZCB0byBidWlsZCBhIHNoYXJlZCBhcmNoaXZlXSkKLV9MVF9UQUdERUNMKFtdLCBbYXJjaGl2ZV9leHBzeW1fY21kc10sIFsyXSkKLV9MVF9UQUdERUNMKFtdLCBbbW9kdWxlX2NtZHNdLCBbMl0sCi0gICAgW0NvbW1hbmRzIHVzZWQgdG8gYnVpbGQgYSBsb2FkYWJsZSBtb2R1bGUgaWYgZGlmZmVyZW50IGZyb20gYnVpbGRpbmcKLSAgICBhIHNoYXJlZCBhcmNoaXZlLl0pCi1fTFRfVEFHREVDTChbXSwgW21vZHVsZV9leHBzeW1fY21kc10sIFsyXSkKLV9MVF9UQUdERUNMKFtdLCBbd2l0aF9nbnVfbGRdLCBbMV0sCi0gICAgW1doZXRoZXIgd2UgYXJlIGJ1aWxkaW5nIHdpdGggR05VIGxkIG9yIG5vdF0pCi1fTFRfVEFHREVDTChbXSwgW2FsbG93X3VuZGVmaW5lZF9mbGFnXSwgWzFdLAotICAgIFtGbGFnIHRoYXQgYWxsb3dzIHNoYXJlZCBsaWJyYXJpZXMgd2l0aCB1bmRlZmluZWQgc3ltYm9scyB0byBiZSBidWlsdF0pCi1fTFRfVEFHREVDTChbXSwgW25vX3VuZGVmaW5lZF9mbGFnXSwgWzFdLAotICAgIFtGbGFnIHRoYXQgZW5mb3JjZXMgbm8gdW5kZWZpbmVkIHN5bWJvbHNdKQotX0xUX1RBR0RFQ0woW10sIFtoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjXSwgWzFdLAotICAgIFtGbGFnIHRvIGhhcmRjb2RlICRsaWJkaXIgaW50byBhIGJpbmFyeSBkdXJpbmcgbGlua2luZy4KLSAgICBUaGlzIG11c3Qgd29yayBldmVuIGlmICRsaWJkaXIgZG9lcyBub3QgZXhpc3RdKQotX0xUX1RBR0RFQ0woW10sIFtoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjX2xkXSwgWzFdLAotICAgIFtbSWYgbGQgaXMgdXNlZCB3aGVuIGxpbmtpbmcsIGZsYWcgdG8gaGFyZGNvZGUgJGxpYmRpciBpbnRvIGEgYmluYXJ5Ci0gICAgZHVyaW5nIGxpbmtpbmcuICBUaGlzIG11c3Qgd29yayBldmVuIGlmICRsaWJkaXIgZG9lcyBub3QgZXhpc3RdXSkKLV9MVF9UQUdERUNMKFtdLCBbaGFyZGNvZGVfbGliZGlyX3NlcGFyYXRvcl0sIFsxXSwKLSAgICBbV2hldGhlciB3ZSBuZWVkIGEgc2luZ2xlICItcnBhdGgiIGZsYWcgd2l0aCBhIHNlcGFyYXRlZCBhcmd1bWVudF0pCi1fTFRfVEFHREVDTChbXSwgW2hhcmRjb2RlX2RpcmVjdF0sIFswXSwKLSAgICBbU2V0IHRvICJ5ZXMiIGlmIHVzaW5nIERJUi9saWJOQU1FJHtzaGFyZWRfZXh0fSBkdXJpbmcgbGlua2luZyBoYXJkY29kZXMKLSAgICBESVIgaW50byB0aGUgcmVzdWx0aW5nIGJpbmFyeV0pCi1fTFRfVEFHREVDTChbXSwgW2hhcmRjb2RlX2RpcmVjdF9hYnNvbHV0ZV0sIFswXSwKLSAgICBbU2V0IHRvICJ5ZXMiIGlmIHVzaW5nIERJUi9saWJOQU1FJHtzaGFyZWRfZXh0fSBkdXJpbmcgbGlua2luZyBoYXJkY29kZXMKLSAgICBESVIgaW50byB0aGUgcmVzdWx0aW5nIGJpbmFyeSBhbmQgdGhlIHJlc3VsdGluZyBsaWJyYXJ5IGRlcGVuZGVuY3kgaXMKLSAgICAiYWJzb2x1dGUiLCBpLmUgaW1wb3NzaWJsZSB0byBjaGFuZ2UgYnkgc2V0dGluZyAke3NobGlicGF0aF92YXJ9IGlmIHRoZQotICAgIGxpYnJhcnkgaXMgcmVsb2NhdGVkXSkKLV9MVF9UQUdERUNMKFtdLCBbaGFyZGNvZGVfbWludXNfTF0sIFswXSwKLSAgICBbU2V0IHRvICJ5ZXMiIGlmIHVzaW5nIHRoZSAtTERJUiBmbGFnIGR1cmluZyBsaW5raW5nIGhhcmRjb2RlcyBESVIKLSAgICBpbnRvIHRoZSByZXN1bHRpbmcgYmluYXJ5XSkKLV9MVF9UQUdERUNMKFtdLCBbaGFyZGNvZGVfc2hsaWJwYXRoX3Zhcl0sIFswXSwKLSAgICBbU2V0IHRvICJ5ZXMiIGlmIHVzaW5nIFNITElCUEFUSF9WQVI9RElSIGR1cmluZyBsaW5raW5nIGhhcmRjb2RlcyBESVIKLSAgICBpbnRvIHRoZSByZXN1bHRpbmcgYmluYXJ5XSkKLV9MVF9UQUdERUNMKFtdLCBbaGFyZGNvZGVfYXV0b21hdGljXSwgWzBdLAotICAgIFtTZXQgdG8gInllcyIgaWYgYnVpbGRpbmcgYSBzaGFyZWQgbGlicmFyeSBhdXRvbWF0aWNhbGx5IGhhcmRjb2RlcyBESVIKLSAgICBpbnRvIHRoZSBsaWJyYXJ5IGFuZCBhbGwgc3Vic2VxdWVudCBsaWJyYXJpZXMgYW5kIGV4ZWN1dGFibGVzIGxpbmtlZAotICAgIGFnYWluc3QgaXRdKQotX0xUX1RBR0RFQ0woW10sIFtpbmhlcml0X3JwYXRoXSwgWzBdLAotICAgIFtTZXQgdG8geWVzIGlmIGxpbmtlciBhZGRzIHJ1bnRpbWUgcGF0aHMgb2YgZGVwZW5kZW50IGxpYnJhcmllcwotICAgIHRvIHJ1bnRpbWUgcGF0aCBsaXN0XSkKLV9MVF9UQUdERUNMKFtdLCBbbGlua19hbGxfZGVwbGlic10sIFswXSwKLSAgICBbV2hldGhlciBsaWJ0b29sIG11c3QgbGluayBhIHByb2dyYW0gYWdhaW5zdCBhbGwgaXRzIGRlcGVuZGVuY3kgbGlicmFyaWVzXSkKLV9MVF9UQUdERUNMKFtdLCBbYWx3YXlzX2V4cG9ydF9zeW1ib2xzXSwgWzBdLAotICAgIFtTZXQgdG8gInllcyIgaWYgZXhwb3J0ZWQgc3ltYm9scyBhcmUgcmVxdWlyZWRdKQotX0xUX1RBR0RFQ0woW10sIFtleHBvcnRfc3ltYm9sc19jbWRzXSwgWzJdLAotICAgIFtUaGUgY29tbWFuZHMgdG8gbGlzdCBleHBvcnRlZCBzeW1ib2xzXSkKLV9MVF9UQUdERUNMKFtdLCBbZXhjbHVkZV9leHBzeW1zXSwgWzFdLAotICAgIFtTeW1ib2xzIHRoYXQgc2hvdWxkIG5vdCBiZSBsaXN0ZWQgaW4gdGhlIHByZWxvYWRlZCBzeW1ib2xzXSkKLV9MVF9UQUdERUNMKFtdLCBbaW5jbHVkZV9leHBzeW1zXSwgWzFdLAotICAgIFtTeW1ib2xzIHRoYXQgbXVzdCBhbHdheXMgYmUgZXhwb3J0ZWRdKQotX0xUX1RBR0RFQ0woW10sIFtwcmVsaW5rX2NtZHNdLCBbMl0sCi0gICAgW0NvbW1hbmRzIG5lY2Vzc2FyeSBmb3IgbGlua2luZyBwcm9ncmFtcyAoYWdhaW5zdCBsaWJyYXJpZXMpIHdpdGggdGVtcGxhdGVzXSkKLV9MVF9UQUdERUNMKFtdLCBbcG9zdGxpbmtfY21kc10sIFsyXSwKLSAgICBbQ29tbWFuZHMgbmVjZXNzYXJ5IGZvciBmaW5pc2hpbmcgbGlua2luZyBwcm9ncmFtc10pCi1fTFRfVEFHREVDTChbXSwgW2ZpbGVfbGlzdF9zcGVjXSwgWzFdLAotICAgIFtTcGVjaWZ5IGZpbGVuYW1lIGNvbnRhaW5pbmcgaW5wdXQgZmlsZXNdKQotZG5sIEZJWE1FOiBOb3QgeWV0IGltcGxlbWVudGVkCi1kbmwgX0xUX1RBR0RFQ0woW10sIFt0aHJlYWRfc2FmZV9mbGFnX3NwZWNdLCBbMV0sCi1kbmwgICAgW0NvbXBpbGVyIGZsYWcgdG8gZ2VuZXJhdGUgdGhyZWFkIHNhZmUgb2JqZWN0c10pCi1dKSMgX0xUX0xJTktFUl9TSExJQlMKLQotCi0jIF9MVF9MQU5HX0NfQ09ORklHKFtUQUddKQotIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSMgRW5zdXJlIHRoYXQgdGhlIGNvbmZpZ3VyYXRpb24gdmFyaWFibGVzIGZvciBhIEMgY29tcGlsZXIgYXJlIHN1aXRhYmx5Ci0jIGRlZmluZWQuICBUaGVzZSB2YXJpYWJsZXMgYXJlIHN1YnNlcXVlbnRseSB1c2VkIGJ5IF9MVF9DT05GSUcgdG8gd3JpdGUKLSMgdGhlIGNvbXBpbGVyIGNvbmZpZ3VyYXRpb24gdG8gYGxpYnRvb2wnLgotbTRfZGVmdW4oW19MVF9MQU5HX0NfQ09ORklHXSwKLVttNF9yZXF1aXJlKFtfTFRfREVDTF9FR1JFUF0pZG5sCi1sdF9zYXZlX0NDPSIkQ0MiCi1BQ19MQU5HX1BVU0goQykKLQotIyBTb3VyY2UgZmlsZSBleHRlbnNpb24gZm9yIEMgdGVzdCBzb3VyY2VzLgotYWNfZXh0PWMKLQotIyBPYmplY3QgZmlsZSBleHRlbnNpb24gZm9yIGNvbXBpbGVkIEMgdGVzdCBzb3VyY2VzLgotb2JqZXh0PW8KLV9MVF9UQUdWQVIob2JqZXh0LCAkMSk9JG9iamV4dAotCi0jIENvZGUgdG8gYmUgdXNlZCBpbiBzaW1wbGUgY29tcGlsZSB0ZXN0cwotbHRfc2ltcGxlX2NvbXBpbGVfdGVzdF9jb2RlPSJpbnQgc29tZV92YXJpYWJsZSA9IDA7IgotCi0jIENvZGUgdG8gYmUgdXNlZCBpbiBzaW1wbGUgbGluayB0ZXN0cwotbHRfc2ltcGxlX2xpbmtfdGVzdF9jb2RlPSdpbnQgbWFpbigpe3JldHVybigwKTt9JwotCi1fTFRfVEFHX0NPTVBJTEVSCi0jIFNhdmUgdGhlIGRlZmF1bHQgY29tcGlsZXIsIHNpbmNlIGl0IGdldHMgb3ZlcndyaXR0ZW4gd2hlbiB0aGUgb3RoZXIKLSMgdGFncyBhcmUgYmVpbmcgdGVzdGVkLCBhbmQgX0xUX1RBR1ZBUihjb21waWxlciwgW10pIGlzIGEgTk9QLgotY29tcGlsZXJfREVGQVVMVD0kQ0MKLQotIyBzYXZlIHdhcm5pbmdzL2JvaWxlcnBsYXRlIG9mIHNpbXBsZSB0ZXN0IGNvZGUKLV9MVF9DT01QSUxFUl9CT0lMRVJQTEFURQotX0xUX0xJTktFUl9CT0lMRVJQTEFURQotCi1pZiB0ZXN0IC1uICIkY29tcGlsZXIiOyB0aGVuCi0gIF9MVF9DT01QSUxFUl9OT19SVFRJKCQxKQotICBfTFRfQ09NUElMRVJfUElDKCQxKQotICBfTFRfQ09NUElMRVJfQ19PKCQxKQotICBfTFRfQ09NUElMRVJfRklMRV9MT0NLUygkMSkKLSAgX0xUX0xJTktFUl9TSExJQlMoJDEpCi0gIF9MVF9TWVNfRFlOQU1JQ19MSU5LRVIoJDEpCi0gIF9MVF9MSU5LRVJfSEFSRENPREVfTElCUEFUSCgkMSkKLSAgTFRfU1lTX0RMT1BFTl9TRUxGCi0gIF9MVF9DTURfU1RSSVBMSUIKLQotICAjIFJlcG9ydCB3aGljaCBsaWJyYXJ5IHR5cGVzIHdpbGwgYWN0dWFsbHkgYmUgYnVpbHQKLSAgQUNfTVNHX0NIRUNLSU5HKFtpZiBsaWJ0b29sIHN1cHBvcnRzIHNoYXJlZCBsaWJyYXJpZXNdKQotICBBQ19NU0dfUkVTVUxUKFskY2FuX2J1aWxkX3NoYXJlZF0pCi0KLSAgQUNfTVNHX0NIRUNLSU5HKFt3aGV0aGVyIHRvIGJ1aWxkIHNoYXJlZCBsaWJyYXJpZXNdKQotICB0ZXN0ICIkY2FuX2J1aWxkX3NoYXJlZCIgPSAibm8iICYmIGVuYWJsZV9zaGFyZWQ9bm8KLQotICAjIE9uIEFJWCwgc2hhcmVkIGxpYnJhcmllcyBhbmQgc3RhdGljIGxpYnJhcmllcyB1c2UgdGhlIHNhbWUgbmFtZXNwYWNlLCBhbmQKLSAgIyBhcmUgYWxsIGJ1aWx0IGZyb20gUElDLgotICBjYXNlICRob3N0X29zIGluCi0gIGFpeDMqKQotICAgIHRlc3QgIiRlbmFibGVfc2hhcmVkIiA9IHllcyAmJiBlbmFibGVfc3RhdGljPW5vCi0gICAgaWYgdGVzdCAtbiAiJFJBTkxJQiI7IHRoZW4KLSAgICAgIGFyY2hpdmVfY21kcz0iJGFyY2hpdmVfY21kc35cJFJBTkxJQiBcJGxpYiIKLSAgICAgIHBvc3RpbnN0YWxsX2NtZHM9JyRSQU5MSUIgJGxpYicKLSAgICBmaQotICAgIDs7Ci0KLSAgYWl4W1s0LTldXSopCi0gICAgaWYgdGVzdCAiJGhvc3RfY3B1IiAhPSBpYTY0ICYmIHRlc3QgIiRhaXhfdXNlX3J1bnRpbWVsaW5raW5nIiA9IG5vIDsgdGhlbgotICAgICAgdGVzdCAiJGVuYWJsZV9zaGFyZWQiID0geWVzICYmIGVuYWJsZV9zdGF0aWM9bm8KLSAgICBmaQotICAgIDs7Ci0gIGVzYWMKLSAgQUNfTVNHX1JFU1VMVChbJGVuYWJsZV9zaGFyZWRdKQotCi0gIEFDX01TR19DSEVDS0lORyhbd2hldGhlciB0byBidWlsZCBzdGF0aWMgbGlicmFyaWVzXSkKLSAgIyBNYWtlIHN1cmUgZWl0aGVyIGVuYWJsZV9zaGFyZWQgb3IgZW5hYmxlX3N0YXRpYyBpcyB5ZXMuCi0gIHRlc3QgIiRlbmFibGVfc2hhcmVkIiA9IHllcyB8fCBlbmFibGVfc3RhdGljPXllcwotICBBQ19NU0dfUkVTVUxUKFskZW5hYmxlX3N0YXRpY10pCi0KLSAgX0xUX0NPTkZJRygkMSkKLWZpCi1BQ19MQU5HX1BPUAotQ0M9IiRsdF9zYXZlX0NDIgotXSkjIF9MVF9MQU5HX0NfQ09ORklHCi0KLQotIyBfTFRfTEFOR19DWFhfQ09ORklHKFtUQUddKQotIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotIyBFbnN1cmUgdGhhdCB0aGUgY29uZmlndXJhdGlvbiB2YXJpYWJsZXMgZm9yIGEgQysrIGNvbXBpbGVyIGFyZSBzdWl0YWJseQotIyBkZWZpbmVkLiAgVGhlc2UgdmFyaWFibGVzIGFyZSBzdWJzZXF1ZW50bHkgdXNlZCBieSBfTFRfQ09ORklHIHRvIHdyaXRlCi0jIHRoZSBjb21waWxlciBjb25maWd1cmF0aW9uIHRvIGBsaWJ0b29sJy4KLW00X2RlZnVuKFtfTFRfTEFOR19DWFhfQ09ORklHXSwKLVttNF9yZXF1aXJlKFtfTFRfRklMRVVUSUxTX0RFRkFVTFRTXSlkbmwKLW00X3JlcXVpcmUoW19MVF9ERUNMX0VHUkVQXSlkbmwKLW00X3JlcXVpcmUoW19MVF9QQVRIX01BTklGRVNUX1RPT0xdKWRubAotaWYgdGVzdCAtbiAiJENYWCIgJiYgKCB0ZXN0ICJYJENYWCIgIT0gIlhubyIgJiYKLSAgICAoICh0ZXN0ICJYJENYWCIgPSAiWGcrKyIgJiYgYGcrKyAtdiA+L2Rldi9udWxsIDI+JjFgICkgfHwKLSAgICAodGVzdCAiWCRDWFgiICE9ICJYZysrIikpKSA7IHRoZW4KLSAgQUNfUFJPR19DWFhDUFAKLWVsc2UKLSAgX2x0X2NhdWdodF9DWFhfZXJyb3I9eWVzCi1maQotCi1BQ19MQU5HX1BVU0goQysrKQotX0xUX1RBR1ZBUihhcmNoaXZlX2NtZHNfbmVlZF9sYywgJDEpPW5vCi1fTFRfVEFHVkFSKGFsbG93X3VuZGVmaW5lZF9mbGFnLCAkMSk9Ci1fTFRfVEFHVkFSKGFsd2F5c19leHBvcnRfc3ltYm9scywgJDEpPW5vCi1fTFRfVEFHVkFSKGFyY2hpdmVfZXhwc3ltX2NtZHMsICQxKT0KLV9MVF9UQUdWQVIoY29tcGlsZXJfbmVlZHNfb2JqZWN0LCAkMSk9bm8KLV9MVF9UQUdWQVIoZXhwb3J0X2R5bmFtaWNfZmxhZ19zcGVjLCAkMSk9Ci1fTFRfVEFHVkFSKGhhcmRjb2RlX2RpcmVjdCwgJDEpPW5vCi1fTFRfVEFHVkFSKGhhcmRjb2RlX2RpcmVjdF9hYnNvbHV0ZSwgJDEpPW5vCi1fTFRfVEFHVkFSKGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWMsICQxKT0KLV9MVF9UQUdWQVIoaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlY19sZCwgJDEpPQotX0xUX1RBR1ZBUihoYXJkY29kZV9saWJkaXJfc2VwYXJhdG9yLCAkMSk9Ci1fTFRfVEFHVkFSKGhhcmRjb2RlX21pbnVzX0wsICQxKT1ubwotX0xUX1RBR1ZBUihoYXJkY29kZV9zaGxpYnBhdGhfdmFyLCAkMSk9dW5zdXBwb3J0ZWQKLV9MVF9UQUdWQVIoaGFyZGNvZGVfYXV0b21hdGljLCAkMSk9bm8KLV9MVF9UQUdWQVIoaW5oZXJpdF9ycGF0aCwgJDEpPW5vCi1fTFRfVEFHVkFSKG1vZHVsZV9jbWRzLCAkMSk9Ci1fTFRfVEFHVkFSKG1vZHVsZV9leHBzeW1fY21kcywgJDEpPQotX0xUX1RBR1ZBUihsaW5rX2FsbF9kZXBsaWJzLCAkMSk9dW5rbm93bgotX0xUX1RBR1ZBUihvbGRfYXJjaGl2ZV9jbWRzLCAkMSk9JG9sZF9hcmNoaXZlX2NtZHMKLV9MVF9UQUdWQVIocmVsb2FkX2ZsYWcsICQxKT0kcmVsb2FkX2ZsYWcKLV9MVF9UQUdWQVIocmVsb2FkX2NtZHMsICQxKT0kcmVsb2FkX2NtZHMKLV9MVF9UQUdWQVIobm9fdW5kZWZpbmVkX2ZsYWcsICQxKT0KLV9MVF9UQUdWQVIod2hvbGVfYXJjaGl2ZV9mbGFnX3NwZWMsICQxKT0KLV9MVF9UQUdWQVIoZW5hYmxlX3NoYXJlZF93aXRoX3N0YXRpY19ydW50aW1lcywgJDEpPW5vCi0KLSMgU291cmNlIGZpbGUgZXh0ZW5zaW9uIGZvciBDKysgdGVzdCBzb3VyY2VzLgotYWNfZXh0PWNwcAotCi0jIE9iamVjdCBmaWxlIGV4dGVuc2lvbiBmb3IgY29tcGlsZWQgQysrIHRlc3Qgc291cmNlcy4KLW9iamV4dD1vCi1fTFRfVEFHVkFSKG9iamV4dCwgJDEpPSRvYmpleHQKLQotIyBObyBzZW5zZSBpbiBydW5uaW5nIGFsbCB0aGVzZSB0ZXN0cyBpZiB3ZSBhbHJlYWR5IGRldGVybWluZWQgdGhhdAotIyB0aGUgQ1hYIGNvbXBpbGVyIGlzbid0IHdvcmtpbmcuICBTb21lIHZhcmlhYmxlcyAobGlrZSBlbmFibGVfc2hhcmVkKQotIyBhcmUgY3VycmVudGx5IGFzc3VtZWQgdG8gYXBwbHkgdG8gYWxsIGNvbXBpbGVycyBvbiB0aGlzIHBsYXRmb3JtLAotIyBhbmQgd2lsbCBiZSBjb3JydXB0ZWQgYnkgc2V0dGluZyB0aGVtIGJhc2VkIG9uIGEgbm9uLXdvcmtpbmcgY29tcGlsZXIuCi1pZiB0ZXN0ICIkX2x0X2NhdWdodF9DWFhfZXJyb3IiICE9IHllczsgdGhlbgotICAjIENvZGUgdG8gYmUgdXNlZCBpbiBzaW1wbGUgY29tcGlsZSB0ZXN0cwotICBsdF9zaW1wbGVfY29tcGlsZV90ZXN0X2NvZGU9ImludCBzb21lX3ZhcmlhYmxlID0gMDsiCi0KLSAgIyBDb2RlIHRvIGJlIHVzZWQgaW4gc2ltcGxlIGxpbmsgdGVzdHMKLSAgbHRfc2ltcGxlX2xpbmtfdGVzdF9jb2RlPSdpbnQgbWFpbihpbnQsIGNoYXIgKltbXV0pIHsgcmV0dXJuKDApOyB9JwotCi0gICMgbHRtYWluIG9ubHkgdXNlcyAkQ0MgZm9yIHRhZ2dlZCBjb25maWd1cmF0aW9ucyBzbyBtYWtlIHN1cmUgJENDIGlzIHNldC4KLSAgX0xUX1RBR19DT01QSUxFUgotCi0gICMgc2F2ZSB3YXJuaW5ncy9ib2lsZXJwbGF0ZSBvZiBzaW1wbGUgdGVzdCBjb2RlCi0gIF9MVF9DT01QSUxFUl9CT0lMRVJQTEFURQotICBfTFRfTElOS0VSX0JPSUxFUlBMQVRFCi0KLSAgIyBBbGxvdyBDQyB0byBiZSBhIHByb2dyYW0gbmFtZSB3aXRoIGFyZ3VtZW50cy4KLSAgbHRfc2F2ZV9DQz0kQ0MKLSAgbHRfc2F2ZV9DRkxBR1M9JENGTEFHUwotICBsdF9zYXZlX0xEPSRMRAotICBsdF9zYXZlX0dDQz0kR0NDCi0gIEdDQz0kR1hYCi0gIGx0X3NhdmVfd2l0aF9nbnVfbGQ9JHdpdGhfZ251X2xkCi0gIGx0X3NhdmVfcGF0aF9MRD0kbHRfY3ZfcGF0aF9MRAotICBpZiB0ZXN0IC1uICIke2x0X2N2X3Byb2dfZ251X2xkY3h4K3NldH0iOyB0aGVuCi0gICAgbHRfY3ZfcHJvZ19nbnVfbGQ9JGx0X2N2X3Byb2dfZ251X2xkY3h4Ci0gIGVsc2UKLSAgICAkYXNfdW5zZXQgbHRfY3ZfcHJvZ19nbnVfbGQKLSAgZmkKLSAgaWYgdGVzdCAtbiAiJHtsdF9jdl9wYXRoX0xEQ1hYK3NldH0iOyB0aGVuCi0gICAgbHRfY3ZfcGF0aF9MRD0kbHRfY3ZfcGF0aF9MRENYWAotICBlbHNlCi0gICAgJGFzX3Vuc2V0IGx0X2N2X3BhdGhfTEQKLSAgZmkKLSAgdGVzdCAteiAiJHtMRENYWCtzZXR9IiB8fCBMRD0kTERDWFgKLSAgQ0M9JHtDWFgtImMrKyJ9Ci0gIENGTEFHUz0kQ1hYRkxBR1MKLSAgY29tcGlsZXI9JENDCi0gIF9MVF9UQUdWQVIoY29tcGlsZXIsICQxKT0kQ0MKLSAgX0xUX0NDX0JBU0VOQU1FKFskY29tcGlsZXJdKQotCi0gIGlmIHRlc3QgLW4gIiRjb21waWxlciI7IHRoZW4KLSAgICAjIFdlIGRvbid0IHdhbnQgLWZuby1leGNlcHRpb24gd2hlbiBjb21waWxpbmcgQysrIGNvZGUsIHNvIHNldCB0aGUKLSAgICAjIG5vX2J1aWx0aW5fZmxhZyBzZXBhcmF0ZWx5Ci0gICAgaWYgdGVzdCAiJEdYWCIgPSB5ZXM7IHRoZW4KLSAgICAgIF9MVF9UQUdWQVIobHRfcHJvZ19jb21waWxlcl9ub19idWlsdGluX2ZsYWcsICQxKT0nIC1mbm8tYnVpbHRpbicKLSAgICBlbHNlCi0gICAgICBfTFRfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfbm9fYnVpbHRpbl9mbGFnLCAkMSk9Ci0gICAgZmkKLQotICAgIGlmIHRlc3QgIiRHWFgiID0geWVzOyB0aGVuCi0gICAgICAjIFNldCB1cCBkZWZhdWx0IEdOVSBDKysgY29uZmlndXJhdGlvbgotCi0gICAgICBMVF9QQVRIX0xECi0KLSAgICAgICMgQ2hlY2sgaWYgR05VIEMrKyB1c2VzIEdOVSBsZCBhcyB0aGUgdW5kZXJseWluZyBsaW5rZXIsIHNpbmNlIHRoZQotICAgICAgIyBhcmNoaXZpbmcgY29tbWFuZHMgYmVsb3cgYXNzdW1lIHRoYXQgR05VIGxkIGlzIGJlaW5nIHVzZWQuCi0gICAgICBpZiB0ZXN0ICIkd2l0aF9nbnVfbGQiID0geWVzOyB0aGVuCi0gICAgICAgIF9MVF9UQUdWQVIoYXJjaGl2ZV9jbWRzLCAkMSk9JyRDQyAkcGljX2ZsYWcgLXNoYXJlZCAtbm9zdGRsaWIgJHByZWRlcF9vYmplY3RzICRsaWJvYmpzICRkZXBsaWJzICRwb3N0ZGVwX29iamVjdHMgJGNvbXBpbGVyX2ZsYWdzICR7d2x9LXNvbmFtZSAkd2wkc29uYW1lIC1vICRsaWInCi0gICAgICAgIF9MVF9UQUdWQVIoYXJjaGl2ZV9leHBzeW1fY21kcywgJDEpPSckQ0MgJHBpY19mbGFnIC1zaGFyZWQgLW5vc3RkbGliICRwcmVkZXBfb2JqZWN0cyAkbGlib2JqcyAkZGVwbGlicyAkcG9zdGRlcF9vYmplY3RzICRjb21waWxlcl9mbGFncyAke3dsfS1zb25hbWUgJHdsJHNvbmFtZSAke3dsfS1yZXRhaW4tc3ltYm9scy1maWxlICR3bCRleHBvcnRfc3ltYm9scyAtbyAkbGliJwotCi0gICAgICAgIF9MVF9UQUdWQVIoaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYywgJDEpPScke3dsfS1ycGF0aCAke3dsfSRsaWJkaXInCi0gICAgICAgIF9MVF9UQUdWQVIoZXhwb3J0X2R5bmFtaWNfZmxhZ19zcGVjLCAkMSk9JyR7d2x9LS1leHBvcnQtZHluYW1pYycKLQotICAgICAgICAjIElmIGFyY2hpdmVfY21kcyBydW5zIExELCBub3QgQ0MsIHdsYXJjIHNob3VsZCBiZSBlbXB0eQotICAgICAgICAjIFhYWCBJIHRoaW5rIHdsYXJjIGNhbiBiZSBlbGltaW5hdGVkIGluIGx0Y2YtY3h4LCBidXQgSSBuZWVkIHRvCi0gICAgICAgICMgICAgIGludmVzdGlnYXRlIGl0IGEgbGl0dGxlIGJpdCBtb3JlLiAoTU0pCi0gICAgICAgIHdsYXJjPScke3dsfScKLQotICAgICAgICAjIGFuY2llbnQgR05VIGxkIGRpZG4ndCBzdXBwb3J0IC0td2hvbGUtYXJjaGl2ZSBldC4gYWwuCi0gICAgICAgIGlmIGV2YWwgImAkQ0MgLXByaW50LXByb2ctbmFtZT1sZGAgLS1oZWxwIDI+JjEiIHwKLQkgICRHUkVQICduby13aG9sZS1hcmNoaXZlJyA+IC9kZXYvbnVsbDsgdGhlbgotICAgICAgICAgIF9MVF9UQUdWQVIod2hvbGVfYXJjaGl2ZV9mbGFnX3NwZWMsICQxKT0iJHdsYXJjIictLXdob2xlLWFyY2hpdmUkY29udmVuaWVuY2UgJyIkd2xhcmMiJy0tbm8td2hvbGUtYXJjaGl2ZScKLSAgICAgICAgZWxzZQotICAgICAgICAgIF9MVF9UQUdWQVIod2hvbGVfYXJjaGl2ZV9mbGFnX3NwZWMsICQxKT0KLSAgICAgICAgZmkKLSAgICAgIGVsc2UKLSAgICAgICAgd2l0aF9nbnVfbGQ9bm8KLSAgICAgICAgd2xhcmM9Ci0KLSAgICAgICAgIyBBIGdlbmVyaWMgYW5kIHZlcnkgc2ltcGxlIGRlZmF1bHQgc2hhcmVkIGxpYnJhcnkgY3JlYXRpb24KLSAgICAgICAgIyBjb21tYW5kIGZvciBHTlUgQysrIGZvciB0aGUgY2FzZSB3aGVyZSBpdCB1c2VzIHRoZSBuYXRpdmUKLSAgICAgICAgIyBsaW5rZXIsIGluc3RlYWQgb2YgR05VIGxkLiAgSWYgcG9zc2libGUsIHRoaXMgc2V0dGluZyBzaG91bGQKLSAgICAgICAgIyBvdmVycmlkZGVuIHRvIHRha2UgYWR2YW50YWdlIG9mIHRoZSBuYXRpdmUgbGlua2VyIGZlYXR1cmVzIG9uCi0gICAgICAgICMgdGhlIHBsYXRmb3JtIGl0IGlzIGJlaW5nIHVzZWQgb24uCi0gICAgICAgIF9MVF9UQUdWQVIoYXJjaGl2ZV9jbWRzLCAkMSk9JyRDQyAtc2hhcmVkIC1ub3N0ZGxpYiAkcHJlZGVwX29iamVjdHMgJGxpYm9ianMgJGRlcGxpYnMgJHBvc3RkZXBfb2JqZWN0cyAkY29tcGlsZXJfZmxhZ3MgLW8gJGxpYicKLSAgICAgIGZpCi0KLSAgICAgICMgQ29tbWFuZHMgdG8gbWFrZSBjb21waWxlciBwcm9kdWNlIHZlcmJvc2Ugb3V0cHV0IHRoYXQgbGlzdHMKLSAgICAgICMgd2hhdCAiaGlkZGVuIiBsaWJyYXJpZXMsIG9iamVjdCBmaWxlcyBhbmQgZmxhZ3MgYXJlIHVzZWQgd2hlbgotICAgICAgIyBsaW5raW5nIGEgc2hhcmVkIGxpYnJhcnkuCi0gICAgICBvdXRwdXRfdmVyYm9zZV9saW5rX2NtZD0nJENDIC1zaGFyZWQgJENGTEFHUyAtdiBjb25mdGVzdC4kb2JqZXh0IDI+JjEgfCAkR1JFUCAtdiAiXkNvbmZpZ3VyZWQgd2l0aDoiIHwgJEdSRVAgIlwtTCInCi0KLSAgICBlbHNlCi0gICAgICBHWFg9bm8KLSAgICAgIHdpdGhfZ251X2xkPW5vCi0gICAgICB3bGFyYz0KLSAgICBmaQotCi0gICAgIyBQT1JUTUU6IGZpbGwgaW4gYSBkZXNjcmlwdGlvbiBvZiB5b3VyIHN5c3RlbSdzIEMrKyBsaW5rIGNoYXJhY3RlcmlzdGljcwotICAgIEFDX01TR19DSEVDS0lORyhbd2hldGhlciB0aGUgJGNvbXBpbGVyIGxpbmtlciAoJExEKSBzdXBwb3J0cyBzaGFyZWQgbGlicmFyaWVzXSkKLSAgICBfTFRfVEFHVkFSKGxkX3NobGlicywgJDEpPXllcwotICAgIGNhc2UgJGhvc3Rfb3MgaW4KLSAgICAgIGFpeDMqKQotICAgICAgICAjIEZJWE1FOiBpbnNlcnQgcHJvcGVyIEMrKyBsaWJyYXJ5IHN1cHBvcnQKLSAgICAgICAgX0xUX1RBR1ZBUihsZF9zaGxpYnMsICQxKT1ubwotICAgICAgICA7OwotICAgICAgYWl4W1s0LTldXSopCi0gICAgICAgIGlmIHRlc3QgIiRob3N0X2NwdSIgPSBpYTY0OyB0aGVuCi0gICAgICAgICAgIyBPbiBJQTY0LCB0aGUgbGlua2VyIGRvZXMgcnVuIHRpbWUgbGlua2luZyBieSBkZWZhdWx0LCBzbyB3ZSBkb24ndAotICAgICAgICAgICMgaGF2ZSB0byBkbyBhbnl0aGluZyBzcGVjaWFsLgotICAgICAgICAgIGFpeF91c2VfcnVudGltZWxpbmtpbmc9bm8KLSAgICAgICAgICBleHBfc3ltX2ZsYWc9Jy1CZXhwb3J0JwotICAgICAgICAgIG5vX2VudHJ5X2ZsYWc9IiIKLSAgICAgICAgZWxzZQotICAgICAgICAgIGFpeF91c2VfcnVudGltZWxpbmtpbmc9bm8KLQotICAgICAgICAgICMgVGVzdCBpZiB3ZSBhcmUgdHJ5aW5nIHRvIHVzZSBydW4gdGltZSBsaW5raW5nIG9yIG5vcm1hbAotICAgICAgICAgICMgQUlYIHN0eWxlIGxpbmtpbmcuIElmIC1icnRsIGlzIHNvbWV3aGVyZSBpbiBMREZMQUdTLCB3ZQotICAgICAgICAgICMgbmVlZCB0byBkbyBydW50aW1lIGxpbmtpbmcuCi0gICAgICAgICAgY2FzZSAkaG9zdF9vcyBpbiBhaXg0LltbMjNdXXxhaXg0LltbMjNdXS4qfGFpeFtbNS05XV0qKQotCSAgICBmb3IgbGRfZmxhZyBpbiAkTERGTEFHUzsgZG8KLQkgICAgICBjYXNlICRsZF9mbGFnIGluCi0JICAgICAgKi1icnRsKikKLQkgICAgICAgIGFpeF91c2VfcnVudGltZWxpbmtpbmc9eWVzCi0JICAgICAgICBicmVhawotCSAgICAgICAgOzsKLQkgICAgICBlc2FjCi0JICAgIGRvbmUKLQkgICAgOzsKLSAgICAgICAgICBlc2FjCi0KLSAgICAgICAgICBleHBfc3ltX2ZsYWc9Jy1iZXhwb3J0JwotICAgICAgICAgIG5vX2VudHJ5X2ZsYWc9Jy1ibm9lbnRyeScKLSAgICAgICAgZmkKLQotICAgICAgICAjIFdoZW4gbGFyZ2UgZXhlY3V0YWJsZXMgb3Igc2hhcmVkIG9iamVjdHMgYXJlIGJ1aWx0LCBBSVggbGQgY2FuCi0gICAgICAgICMgaGF2ZSBwcm9ibGVtcyBjcmVhdGluZyB0aGUgdGFibGUgb2YgY29udGVudHMuICBJZiBsaW5raW5nIGEgbGlicmFyeQotICAgICAgICAjIG9yIHByb2dyYW0gcmVzdWx0cyBpbiAiZXJyb3IgVE9DIG92ZXJmbG93IiBhZGQgLW1taW5pbWFsLXRvYyB0bwotICAgICAgICAjIENYWEZMQUdTL0NGTEFHUyBmb3IgZysrL2djYy4gIEluIHRoZSBjYXNlcyB3aGVyZSB0aGF0IGlzIG5vdAotICAgICAgICAjIGVub3VnaCB0byBmaXggdGhlIHByb2JsZW0sIGFkZCAtV2wsLWJiaWd0b2MgdG8gTERGTEFHUy4KLQotICAgICAgICBfTFRfVEFHVkFSKGFyY2hpdmVfY21kcywgJDEpPScnCi0gICAgICAgIF9MVF9UQUdWQVIoaGFyZGNvZGVfZGlyZWN0LCAkMSk9eWVzCi0gICAgICAgIF9MVF9UQUdWQVIoaGFyZGNvZGVfZGlyZWN0X2Fic29sdXRlLCAkMSk9eWVzCi0gICAgICAgIF9MVF9UQUdWQVIoaGFyZGNvZGVfbGliZGlyX3NlcGFyYXRvciwgJDEpPSc6JwotICAgICAgICBfTFRfVEFHVkFSKGxpbmtfYWxsX2RlcGxpYnMsICQxKT15ZXMKLSAgICAgICAgX0xUX1RBR1ZBUihmaWxlX2xpc3Rfc3BlYywgJDEpPScke3dsfS1mLCcKLQotICAgICAgICBpZiB0ZXN0ICIkR1hYIiA9IHllczsgdGhlbgotICAgICAgICAgIGNhc2UgJGhvc3Rfb3MgaW4gYWl4NC5bWzAxMl1dfGFpeDQuW1swMTJdXS4qKQotICAgICAgICAgICMgV2Ugb25seSB3YW50IHRvIGRvIHRoaXMgb24gQUlYIDQuMiBhbmQgbG93ZXIsIHRoZSBjaGVjawotICAgICAgICAgICMgYmVsb3cgZm9yIGJyb2tlbiBjb2xsZWN0MiBkb2Vzbid0IHdvcmsgdW5kZXIgNC4zKwotCSAgY29sbGVjdDJuYW1lPWAke0NDfSAtcHJpbnQtcHJvZy1uYW1lPWNvbGxlY3QyYAotCSAgaWYgdGVzdCAtZiAiJGNvbGxlY3QybmFtZSIgJiYKLQkgICAgIHN0cmluZ3MgIiRjb2xsZWN0Mm5hbWUiIHwgJEdSRVAgcmVzb2x2ZV9saWJfbmFtZSA+L2Rldi9udWxsCi0JICB0aGVuCi0JICAgICMgV2UgaGF2ZSByZXdvcmtlZCBjb2xsZWN0MgotCSAgICA6Ci0JICBlbHNlCi0JICAgICMgV2UgaGF2ZSBvbGQgY29sbGVjdDIKLQkgICAgX0xUX1RBR1ZBUihoYXJkY29kZV9kaXJlY3QsICQxKT11bnN1cHBvcnRlZAotCSAgICAjIEl0IGZhaWxzIHRvIGZpbmQgdW5pbnN0YWxsZWQgbGlicmFyaWVzIHdoZW4gdGhlIHVuaW5zdGFsbGVkCi0JICAgICMgcGF0aCBpcyBub3QgbGlzdGVkIGluIHRoZSBsaWJwYXRoLiAgU2V0dGluZyBoYXJkY29kZV9taW51c19MCi0JICAgICMgdG8gdW5zdXBwb3J0ZWQgZm9yY2VzIHJlbGlua2luZwotCSAgICBfTFRfVEFHVkFSKGhhcmRjb2RlX21pbnVzX0wsICQxKT15ZXMKLQkgICAgX0xUX1RBR1ZBUihoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjLCAkMSk9Jy1MJGxpYmRpcicKLQkgICAgX0xUX1RBR1ZBUihoYXJkY29kZV9saWJkaXJfc2VwYXJhdG9yLCAkMSk9Ci0JICBmaQotICAgICAgICAgIGVzYWMKLSAgICAgICAgICBzaGFyZWRfZmxhZz0nLXNoYXJlZCcKLQkgIGlmIHRlc3QgIiRhaXhfdXNlX3J1bnRpbWVsaW5raW5nIiA9IHllczsgdGhlbgotCSAgICBzaGFyZWRfZmxhZz0iJHNoYXJlZF9mbGFnICInJHt3bH0tRycKLQkgIGZpCi0gICAgICAgIGVsc2UKLSAgICAgICAgICAjIG5vdCB1c2luZyBnY2MKLSAgICAgICAgICBpZiB0ZXN0ICIkaG9zdF9jcHUiID0gaWE2NDsgdGhlbgotCSAgIyBWaXN1YWxBZ2UgQysrLCBWZXJzaW9uIDUuNSBmb3IgQUlYIDVMIGZvciBJQS02NCwgQmV0YSAzIFJlbGVhc2UKLQkgICMgY2hva2VzIG9uIC1XbCwtRy4gVGhlIGZvbGxvd2luZyBsaW5lIGlzIGNvcnJlY3Q6Ci0JICBzaGFyZWRfZmxhZz0nLUcnCi0gICAgICAgICAgZWxzZQotCSAgICBpZiB0ZXN0ICIkYWl4X3VzZV9ydW50aW1lbGlua2luZyIgPSB5ZXM7IHRoZW4KLQkgICAgICBzaGFyZWRfZmxhZz0nJHt3bH0tRycKLQkgICAgZWxzZQotCSAgICAgIHNoYXJlZF9mbGFnPScke3dsfS1iTTpTUkUnCi0JICAgIGZpCi0gICAgICAgICAgZmkKLSAgICAgICAgZmkKLQotICAgICAgICBfTFRfVEFHVkFSKGV4cG9ydF9keW5hbWljX2ZsYWdfc3BlYywgJDEpPScke3dsfS1iZXhwYWxsJwotICAgICAgICAjIEl0IHNlZW1zIHRoYXQgLWJleHBhbGwgZG9lcyBub3QgZXhwb3J0IHN5bWJvbHMgYmVnaW5uaW5nIHdpdGgKLSAgICAgICAgIyB1bmRlcnNjb3JlIChfKSwgc28gaXQgaXMgYmV0dGVyIHRvIGdlbmVyYXRlIGEgbGlzdCBvZiBzeW1ib2xzIHRvCi0JIyBleHBvcnQuCi0gICAgICAgIF9MVF9UQUdWQVIoYWx3YXlzX2V4cG9ydF9zeW1ib2xzLCAkMSk9eWVzCi0gICAgICAgIGlmIHRlc3QgIiRhaXhfdXNlX3J1bnRpbWVsaW5raW5nIiA9IHllczsgdGhlbgotICAgICAgICAgICMgV2FybmluZyAtIHdpdGhvdXQgdXNpbmcgdGhlIG90aGVyIHJ1bnRpbWUgbG9hZGluZyBmbGFncyAoLWJydGwpLAotICAgICAgICAgICMgLWJlcm9rIHdpbGwgbGluayB3aXRob3V0IGVycm9yLCBidXQgbWF5IHByb2R1Y2UgYSBicm9rZW4gbGlicmFyeS4KLSAgICAgICAgICBfTFRfVEFHVkFSKGFsbG93X3VuZGVmaW5lZF9mbGFnLCAkMSk9Jy1iZXJvaycKLSAgICAgICAgICAjIERldGVybWluZSB0aGUgZGVmYXVsdCBsaWJwYXRoIGZyb20gdGhlIHZhbHVlIGVuY29kZWQgaW4gYW4gZW1wdHkKLSAgICAgICAgICAjIGV4ZWN1dGFibGUuCi0gICAgICAgICAgX0xUX1NZU19NT0RVTEVfUEFUSF9BSVgoWyQxXSkKLSAgICAgICAgICBfTFRfVEFHVkFSKGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWMsICQxKT0nJHt3bH0tYmxpYnBhdGg6JGxpYmRpcjonIiRhaXhfbGlicGF0aCIKLQotICAgICAgICAgIF9MVF9UQUdWQVIoYXJjaGl2ZV9leHBzeW1fY21kcywgJDEpPSckQ0MgLW8gJG91dHB1dF9vYmpkaXIvJHNvbmFtZSAkbGlib2JqcyAkZGVwbGlicyAnIlwke3dsfSRub19lbnRyeV9mbGFnIicgJGNvbXBpbGVyX2ZsYWdzIGBpZiB0ZXN0ICJ4JHthbGxvd191bmRlZmluZWRfZmxhZ30iICE9ICJ4IjsgdGhlbiBmdW5jX2VjaG9fYWxsICIke3dsfSR7YWxsb3dfdW5kZWZpbmVkX2ZsYWd9IjsgZWxzZSA6OyBmaWAgJyJcJHt3bH0kZXhwX3N5bV9mbGFnOlwkZXhwb3J0X3N5bWJvbHMgJHNoYXJlZF9mbGFnIgotICAgICAgICBlbHNlCi0gICAgICAgICAgaWYgdGVzdCAiJGhvc3RfY3B1IiA9IGlhNjQ7IHRoZW4KLQkgICAgX0xUX1RBR1ZBUihoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjLCAkMSk9JyR7d2x9LVIgJGxpYmRpcjovdXNyL2xpYjovbGliJwotCSAgICBfTFRfVEFHVkFSKGFsbG93X3VuZGVmaW5lZF9mbGFnLCAkMSk9Ii16IG5vZGVmcyIKLQkgICAgX0xUX1RBR1ZBUihhcmNoaXZlX2V4cHN5bV9jbWRzLCAkMSk9IlwkQ0MgJHNoYXJlZF9mbGFnIicgLW8gJG91dHB1dF9vYmpkaXIvJHNvbmFtZSAkbGlib2JqcyAkZGVwbGlicyAnIlwke3dsfSRub19lbnRyeV9mbGFnIicgJGNvbXBpbGVyX2ZsYWdzICR7d2x9JHthbGxvd191bmRlZmluZWRfZmxhZ30gJyJcJHt3bH0kZXhwX3N5bV9mbGFnOlwkZXhwb3J0X3N5bWJvbHMiCi0gICAgICAgICAgZWxzZQotCSAgICAjIERldGVybWluZSB0aGUgZGVmYXVsdCBsaWJwYXRoIGZyb20gdGhlIHZhbHVlIGVuY29kZWQgaW4gYW4KLQkgICAgIyBlbXB0eSBleGVjdXRhYmxlLgotCSAgICBfTFRfU1lTX01PRFVMRV9QQVRIX0FJWChbJDFdKQotCSAgICBfTFRfVEFHVkFSKGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWMsICQxKT0nJHt3bH0tYmxpYnBhdGg6JGxpYmRpcjonIiRhaXhfbGlicGF0aCIKLQkgICAgIyBXYXJuaW5nIC0gd2l0aG91dCB1c2luZyB0aGUgb3RoZXIgcnVuIHRpbWUgbG9hZGluZyBmbGFncywKLQkgICAgIyAtYmVyb2sgd2lsbCBsaW5rIHdpdGhvdXQgZXJyb3IsIGJ1dCBtYXkgcHJvZHVjZSBhIGJyb2tlbiBsaWJyYXJ5LgotCSAgICBfTFRfVEFHVkFSKG5vX3VuZGVmaW5lZF9mbGFnLCAkMSk9JyAke3dsfS1iZXJub3RvaycKLQkgICAgX0xUX1RBR1ZBUihhbGxvd191bmRlZmluZWRfZmxhZywgJDEpPScgJHt3bH0tYmVyb2snCi0JICAgIGlmIHRlc3QgIiR3aXRoX2dudV9sZCIgPSB5ZXM7IHRoZW4KLQkgICAgICAjIFdlIG9ubHkgdXNlIHRoaXMgY29kZSBmb3IgR05VIGxkcyB0aGF0IHN1cHBvcnQgLS13aG9sZS1hcmNoaXZlLgotCSAgICAgIF9MVF9UQUdWQVIod2hvbGVfYXJjaGl2ZV9mbGFnX3NwZWMsICQxKT0nJHt3bH0tLXdob2xlLWFyY2hpdmUkY29udmVuaWVuY2UgJHt3bH0tLW5vLXdob2xlLWFyY2hpdmUnCi0JICAgIGVsc2UKLQkgICAgICAjIEV4cG9ydGVkIHN5bWJvbHMgY2FuIGJlIHB1bGxlZCBpbnRvIHNoYXJlZCBvYmplY3RzIGZyb20gYXJjaGl2ZXMKLQkgICAgICBfTFRfVEFHVkFSKHdob2xlX2FyY2hpdmVfZmxhZ19zcGVjLCAkMSk9JyRjb252ZW5pZW5jZScKLQkgICAgZmkKLQkgICAgX0xUX1RBR1ZBUihhcmNoaXZlX2NtZHNfbmVlZF9sYywgJDEpPXllcwotCSAgICAjIFRoaXMgaXMgc2ltaWxhciB0byBob3cgQUlYIHRyYWRpdGlvbmFsbHkgYnVpbGRzIGl0cyBzaGFyZWQKLQkgICAgIyBsaWJyYXJpZXMuCi0JICAgIF9MVF9UQUdWQVIoYXJjaGl2ZV9leHBzeW1fY21kcywgJDEpPSJcJENDICRzaGFyZWRfZmxhZyInIC1vICRvdXRwdXRfb2JqZGlyLyRzb25hbWUgJGxpYm9ianMgJGRlcGxpYnMgJHt3bH0tYm5vZW50cnkgJGNvbXBpbGVyX2ZsYWdzICR7d2x9LWJFOiRleHBvcnRfc3ltYm9scyR7YWxsb3dfdW5kZWZpbmVkX2ZsYWd9fiRBUiAkQVJfRkxBR1MgJG91dHB1dF9vYmpkaXIvJGxpYm5hbWUkcmVsZWFzZS5hICRvdXRwdXRfb2JqZGlyLyRzb25hbWUnCi0gICAgICAgICAgZmkKLSAgICAgICAgZmkKLSAgICAgICAgOzsKLQotICAgICAgYmVvcyopCi0JaWYgJExEIC0taGVscCAyPiYxIHwgJEdSRVAgJzogc3VwcG9ydGVkIHRhcmdldHM6LiogZWxmJyA+IC9kZXYvbnVsbDsgdGhlbgotCSAgX0xUX1RBR1ZBUihhbGxvd191bmRlZmluZWRfZmxhZywgJDEpPXVuc3VwcG9ydGVkCi0JICAjIEpvc2VwaCBCZWNrZW5iYWNoIDxqcmIzQGJlc3QuY29tPiBzYXlzIHNvbWUgcmVsZWFzZXMgb2YgZ2NjCi0JICAjIHN1cHBvcnQgLS11bmRlZmluZWQuICBUaGlzIGRlc2VydmVzIHNvbWUgaW52ZXN0aWdhdGlvbi4gIEZJWE1FCi0JICBfTFRfVEFHVkFSKGFyY2hpdmVfY21kcywgJDEpPSckQ0MgLW5vc3RhcnQgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzICR7d2x9LXNvbmFtZSAkd2wkc29uYW1lIC1vICRsaWInCi0JZWxzZQotCSAgX0xUX1RBR1ZBUihsZF9zaGxpYnMsICQxKT1ubwotCWZpCi0JOzsKLQotICAgICAgY2hvcnVzKikKLSAgICAgICAgY2FzZSAkY2NfYmFzZW5hbWUgaW4KLSAgICAgICAgICAqKQotCSAgIyBGSVhNRTogaW5zZXJ0IHByb3BlciBDKysgbGlicmFyeSBzdXBwb3J0Ci0JICBfTFRfVEFHVkFSKGxkX3NobGlicywgJDEpPW5vCi0JICA7OwotICAgICAgICBlc2FjCi0gICAgICAgIDs7Ci0KLSAgICAgIGN5Z3dpbiogfCBtaW5ndyogfCBwdzMyKiB8IGNlZ2NjKikKLQljYXNlICRHWFgsJGNjX2Jhc2VuYW1lIGluCi0JLGNsKiB8IG5vLGNsKikKLQkgICMgTmF0aXZlIE1TVkMKLQkgICMgaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYyBpcyBhY3R1YWxseSBtZWFuaW5nbGVzcywgYXMgdGhlcmUgaXMKLQkgICMgbm8gc2VhcmNoIHBhdGggZm9yIERMTHMuCi0JICBfTFRfVEFHVkFSKGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWMsICQxKT0nICcKLQkgIF9MVF9UQUdWQVIoYWxsb3dfdW5kZWZpbmVkX2ZsYWcsICQxKT11bnN1cHBvcnRlZAotCSAgX0xUX1RBR1ZBUihhbHdheXNfZXhwb3J0X3N5bWJvbHMsICQxKT15ZXMKLQkgIF9MVF9UQUdWQVIoZmlsZV9saXN0X3NwZWMsICQxKT0nQCcKLQkgICMgVGVsbCBsdG1haW4gdG8gbWFrZSAubGliIGZpbGVzLCBub3QgLmEgZmlsZXMuCi0JICBsaWJleHQ9bGliCi0JICAjIFRlbGwgbHRtYWluIHRvIG1ha2UgLmRsbCBmaWxlcywgbm90IC5zbyBmaWxlcy4KLQkgIHNocmV4dF9jbWRzPSIuZGxsIgotCSAgIyBGSVhNRTogU2V0dGluZyBsaW5rbmFtZXMgaGVyZSBpcyBhIGJhZCBoYWNrLgotCSAgX0xUX1RBR1ZBUihhcmNoaXZlX2NtZHMsICQxKT0nJENDIC1vICRvdXRwdXRfb2JqZGlyLyRzb25hbWUgJGxpYm9ianMgJGNvbXBpbGVyX2ZsYWdzICRkZXBsaWJzIC1XbCwtZGxsfmxpbmtuYW1lcz0nCi0JICBfTFRfVEFHVkFSKGFyY2hpdmVfZXhwc3ltX2NtZHMsICQxKT0naWYgdGVzdCAieGAkU0VEIDFxICRleHBvcnRfc3ltYm9sc2AiID0geEVYUE9SVFM7IHRoZW4KLQkgICAgICAkU0VEIC1uIC1lICdzL1xcXFxcXFwoLipcXFxcXFxcKS8tbGlua1xcXCAtRVhQT1JUOlxcXFxcXFwxLycgLWUgJzFcXFwhcCcgPCAkZXhwb3J0X3N5bWJvbHMgPiAkb3V0cHV0X29iamRpci8kc29uYW1lLmV4cDsKLQkgICAgZWxzZQotCSAgICAgICRTRUQgLWUgJ3MvXFxcXFxcXCguKlxcXFxcXFwpLy1saW5rXFxcIC1FWFBPUlQ6XFxcXFxcXDEvJyA8ICRleHBvcnRfc3ltYm9scyA+ICRvdXRwdXRfb2JqZGlyLyRzb25hbWUuZXhwOwotCSAgICBmaX4KLQkgICAgJENDIC1vICR0b29sX291dHB1dF9vYmpkaXIkc29uYW1lICRsaWJvYmpzICRjb21waWxlcl9mbGFncyAkZGVwbGlicyAiQCR0b29sX291dHB1dF9vYmpkaXIkc29uYW1lLmV4cCIgLVdsLC1ETEwsLUlNUExJQjoiJHRvb2xfb3V0cHV0X29iamRpciRsaWJuYW1lLmRsbC5saWIifgotCSAgICBsaW5rbmFtZXM9JwotCSAgIyBUaGUgbGlua2VyIHdpbGwgbm90IGF1dG9tYXRpY2FsbHkgYnVpbGQgYSBzdGF0aWMgbGliIGlmIHdlIGJ1aWxkIGEgRExMLgotCSAgIyBfTFRfVEFHVkFSKG9sZF9hcmNoaXZlX2Zyb21fbmV3X2NtZHMsICQxKT0ndHJ1ZScKLQkgIF9MVF9UQUdWQVIoZW5hYmxlX3NoYXJlZF93aXRoX3N0YXRpY19ydW50aW1lcywgJDEpPXllcwotCSAgIyBEb24ndCB1c2UgcmFubGliCi0JICBfTFRfVEFHVkFSKG9sZF9wb3N0aW5zdGFsbF9jbWRzLCAkMSk9J2NobW9kIDY0NCAkb2xkbGliJwotCSAgX0xUX1RBR1ZBUihwb3N0bGlua19jbWRzLCAkMSk9J2x0X291dHB1dGZpbGU9IkBPVVRQVVRAIn4KLQkgICAgbHRfdG9vbF9vdXRwdXRmaWxlPSJAVE9PTF9PVVRQVVRAIn4KLQkgICAgY2FzZSAkbHRfb3V0cHV0ZmlsZSBpbgotCSAgICAgICouZXhlfCouRVhFKSA7OwotCSAgICAgICopCi0JCWx0X291dHB1dGZpbGU9IiRsdF9vdXRwdXRmaWxlLmV4ZSIKLQkJbHRfdG9vbF9vdXRwdXRmaWxlPSIkbHRfdG9vbF9vdXRwdXRmaWxlLmV4ZSIKLQkJOzsKLQkgICAgZXNhY34KLQkgICAgZnVuY190b190b29sX2ZpbGUgIiRsdF9vdXRwdXRmaWxlIn4KLQkgICAgaWYgdGVzdCAiJE1BTklGRVNUX1RPT0wiICE9ICI6IiAmJiB0ZXN0IC1mICIkbHRfb3V0cHV0ZmlsZS5tYW5pZmVzdCI7IHRoZW4KLQkgICAgICAkTUFOSUZFU1RfVE9PTCAtbWFuaWZlc3QgIiRsdF90b29sX291dHB1dGZpbGUubWFuaWZlc3QiIC1vdXRwdXRyZXNvdXJjZToiJGx0X3Rvb2xfb3V0cHV0ZmlsZSIgfHwgZXhpdCAxOwotCSAgICAgICRSTSAiJGx0X291dHB1dGZpbGUubWFuaWZlc3QiOwotCSAgICBmaScKLQkgIDs7Ci0JKikKLQkgICMgZysrCi0JICAjIF9MVF9UQUdWQVIoaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYywgJDEpIGlzIGFjdHVhbGx5IG1lYW5pbmdsZXNzLAotCSAgIyBhcyB0aGVyZSBpcyBubyBzZWFyY2ggcGF0aCBmb3IgRExMcy4KLQkgIF9MVF9UQUdWQVIoaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYywgJDEpPSctTCRsaWJkaXInCi0JICBfTFRfVEFHVkFSKGV4cG9ydF9keW5hbWljX2ZsYWdfc3BlYywgJDEpPScke3dsfS0tZXhwb3J0LWFsbC1zeW1ib2xzJwotCSAgX0xUX1RBR1ZBUihhbGxvd191bmRlZmluZWRfZmxhZywgJDEpPXVuc3VwcG9ydGVkCi0JICBfTFRfVEFHVkFSKGFsd2F5c19leHBvcnRfc3ltYm9scywgJDEpPW5vCi0JICBfTFRfVEFHVkFSKGVuYWJsZV9zaGFyZWRfd2l0aF9zdGF0aWNfcnVudGltZXMsICQxKT15ZXMKLQotCSAgaWYgJExEIC0taGVscCAyPiYxIHwgJEdSRVAgJ2F1dG8taW1wb3J0JyA+IC9kZXYvbnVsbDsgdGhlbgotCSAgICBfTFRfVEFHVkFSKGFyY2hpdmVfY21kcywgJDEpPSckQ0MgLXNoYXJlZCAtbm9zdGRsaWIgJHByZWRlcF9vYmplY3RzICRsaWJvYmpzICRkZXBsaWJzICRwb3N0ZGVwX29iamVjdHMgJGNvbXBpbGVyX2ZsYWdzIC1vICRvdXRwdXRfb2JqZGlyLyRzb25hbWUgJHt3bH0tLWVuYWJsZS1hdXRvLWltYWdlLWJhc2UgLVhsaW5rZXIgLS1vdXQtaW1wbGliIC1YbGlua2VyICRsaWInCi0JICAgICMgSWYgdGhlIGV4cG9ydC1zeW1ib2xzIGZpbGUgYWxyZWFkeSBpcyBhIC5kZWYgZmlsZSAoMXN0IGxpbmUKLQkgICAgIyBpcyBFWFBPUlRTKSwgdXNlIGl0IGFzIGlzOyBvdGhlcndpc2UsIHByZXBlbmQuLi4KLQkgICAgX0xUX1RBR1ZBUihhcmNoaXZlX2V4cHN5bV9jbWRzLCAkMSk9J2lmIHRlc3QgInhgJFNFRCAxcSAkZXhwb3J0X3N5bWJvbHNgIiA9IHhFWFBPUlRTOyB0aGVuCi0JICAgICAgY3AgJGV4cG9ydF9zeW1ib2xzICRvdXRwdXRfb2JqZGlyLyRzb25hbWUuZGVmOwotCSAgICBlbHNlCi0JICAgICAgZWNobyBFWFBPUlRTID4gJG91dHB1dF9vYmpkaXIvJHNvbmFtZS5kZWY7Ci0JICAgICAgY2F0ICRleHBvcnRfc3ltYm9scyA+PiAkb3V0cHV0X29iamRpci8kc29uYW1lLmRlZjsKLQkgICAgZml+Ci0JICAgICRDQyAtc2hhcmVkIC1ub3N0ZGxpYiAkb3V0cHV0X29iamRpci8kc29uYW1lLmRlZiAkcHJlZGVwX29iamVjdHMgJGxpYm9ianMgJGRlcGxpYnMgJHBvc3RkZXBfb2JqZWN0cyAkY29tcGlsZXJfZmxhZ3MgLW8gJG91dHB1dF9vYmpkaXIvJHNvbmFtZSAke3dsfS0tZW5hYmxlLWF1dG8taW1hZ2UtYmFzZSAtWGxpbmtlciAtLW91dC1pbXBsaWIgLVhsaW5rZXIgJGxpYicKLQkgIGVsc2UKLQkgICAgX0xUX1RBR1ZBUihsZF9zaGxpYnMsICQxKT1ubwotCSAgZmkKLQkgIDs7Ci0JZXNhYwotCTs7Ci0gICAgICBkYXJ3aW4qIHwgcmhhcHNvZHkqKQotICAgICAgICBfTFRfREFSV0lOX0xJTktFUl9GRUFUVVJFUygkMSkKLQk7OwotCi0gICAgICBkZ3V4KikKLSAgICAgICAgY2FzZSAkY2NfYmFzZW5hbWUgaW4KLSAgICAgICAgICBlYysrKikKLQkgICAgIyBGSVhNRTogaW5zZXJ0IHByb3BlciBDKysgbGlicmFyeSBzdXBwb3J0Ci0JICAgIF9MVF9UQUdWQVIobGRfc2hsaWJzLCAkMSk9bm8KLQkgICAgOzsKLSAgICAgICAgICBnaGN4KikKLQkgICAgIyBHcmVlbiBIaWxscyBDKysgQ29tcGlsZXIKLQkgICAgIyBGSVhNRTogaW5zZXJ0IHByb3BlciBDKysgbGlicmFyeSBzdXBwb3J0Ci0JICAgIF9MVF9UQUdWQVIobGRfc2hsaWJzLCAkMSk9bm8KLQkgICAgOzsKLSAgICAgICAgICAqKQotCSAgICAjIEZJWE1FOiBpbnNlcnQgcHJvcGVyIEMrKyBsaWJyYXJ5IHN1cHBvcnQKLQkgICAgX0xUX1RBR1ZBUihsZF9zaGxpYnMsICQxKT1ubwotCSAgICA7OwotICAgICAgICBlc2FjCi0gICAgICAgIDs7Ci0KLSAgICAgIGZyZWVic2RbWzEyXV0qKQotICAgICAgICAjIEMrKyBzaGFyZWQgbGlicmFyaWVzIHJlcG9ydGVkIHRvIGJlIGZhaXJseSBicm9rZW4gYmVmb3JlCi0JIyBzd2l0Y2ggdG8gRUxGCi0gICAgICAgIF9MVF9UQUdWQVIobGRfc2hsaWJzLCAkMSk9bm8KLSAgICAgICAgOzsKLQotICAgICAgZnJlZWJzZC1lbGYqKQotICAgICAgICBfTFRfVEFHVkFSKGFyY2hpdmVfY21kc19uZWVkX2xjLCAkMSk9bm8KLSAgICAgICAgOzsKLQotICAgICAgZnJlZWJzZCogfCBkcmFnb25mbHkqKQotICAgICAgICAjIEZyZWVCU0QgMyBhbmQgbGF0ZXIgdXNlIEdOVSBDKysgYW5kIEdOVSBsZCB3aXRoIHN0YW5kYXJkIEVMRgotICAgICAgICAjIGNvbnZlbnRpb25zCi0gICAgICAgIF9MVF9UQUdWQVIobGRfc2hsaWJzLCAkMSk9eWVzCi0gICAgICAgIDs7Ci0KLSAgICAgIGdudSopCi0gICAgICAgIDs7Ci0KLSAgICAgIGhhaWt1KikKLSAgICAgICAgX0xUX1RBR1ZBUihhcmNoaXZlX2NtZHMsICQxKT0nJENDIC1zaGFyZWQgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzICR7d2x9LXNvbmFtZSAkd2wkc29uYW1lIC1vICRsaWInCi0gICAgICAgIF9MVF9UQUdWQVIobGlua19hbGxfZGVwbGlicywgJDEpPXllcwotICAgICAgICA7OwotCi0gICAgICBocHV4OSopCi0gICAgICAgIF9MVF9UQUdWQVIoaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYywgJDEpPScke3dsfStiICR7d2x9JGxpYmRpcicKLSAgICAgICAgX0xUX1RBR1ZBUihoYXJkY29kZV9saWJkaXJfc2VwYXJhdG9yLCAkMSk9OgotICAgICAgICBfTFRfVEFHVkFSKGV4cG9ydF9keW5hbWljX2ZsYWdfc3BlYywgJDEpPScke3dsfS1FJwotICAgICAgICBfTFRfVEFHVkFSKGhhcmRjb2RlX2RpcmVjdCwgJDEpPXllcwotICAgICAgICBfTFRfVEFHVkFSKGhhcmRjb2RlX21pbnVzX0wsICQxKT15ZXMgIyBOb3QgaW4gdGhlIHNlYXJjaCBQQVRILAotCQkJCSAgICAgICAgICAgICAjIGJ1dCBhcyB0aGUgZGVmYXVsdAotCQkJCSAgICAgICAgICAgICAjIGxvY2F0aW9uIG9mIHRoZSBsaWJyYXJ5LgotCi0gICAgICAgIGNhc2UgJGNjX2Jhc2VuYW1lIGluCi0gICAgICAgICAgQ0MqKQotICAgICAgICAgICAgIyBGSVhNRTogaW5zZXJ0IHByb3BlciBDKysgbGlicmFyeSBzdXBwb3J0Ci0gICAgICAgICAgICBfTFRfVEFHVkFSKGxkX3NobGlicywgJDEpPW5vCi0gICAgICAgICAgICA7OwotICAgICAgICAgIGFDQyopCi0gICAgICAgICAgICBfTFRfVEFHVkFSKGFyY2hpdmVfY21kcywgJDEpPSckUk0gJG91dHB1dF9vYmpkaXIvJHNvbmFtZX4kQ0MgLWIgJHt3bH0rYiAke3dsfSRpbnN0YWxsX2xpYmRpciAtbyAkb3V0cHV0X29iamRpci8kc29uYW1lICRwcmVkZXBfb2JqZWN0cyAkbGlib2JqcyAkZGVwbGlicyAkcG9zdGRlcF9vYmplY3RzICRjb21waWxlcl9mbGFnc350ZXN0ICRvdXRwdXRfb2JqZGlyLyRzb25hbWUgPSAkbGliIHx8IG12ICRvdXRwdXRfb2JqZGlyLyRzb25hbWUgJGxpYicKLSAgICAgICAgICAgICMgQ29tbWFuZHMgdG8gbWFrZSBjb21waWxlciBwcm9kdWNlIHZlcmJvc2Ugb3V0cHV0IHRoYXQgbGlzdHMKLSAgICAgICAgICAgICMgd2hhdCAiaGlkZGVuIiBsaWJyYXJpZXMsIG9iamVjdCBmaWxlcyBhbmQgZmxhZ3MgYXJlIHVzZWQgd2hlbgotICAgICAgICAgICAgIyBsaW5raW5nIGEgc2hhcmVkIGxpYnJhcnkuCi0gICAgICAgICAgICAjCi0gICAgICAgICAgICAjIFRoZXJlIGRvZXNuJ3QgYXBwZWFyIHRvIGJlIGEgd2F5IHRvIHByZXZlbnQgdGhpcyBjb21waWxlciBmcm9tCi0gICAgICAgICAgICAjIGV4cGxpY2l0bHkgbGlua2luZyBzeXN0ZW0gb2JqZWN0IGZpbGVzIHNvIHdlIG5lZWQgdG8gc3RyaXAgdGhlbQotICAgICAgICAgICAgIyBmcm9tIHRoZSBvdXRwdXQgc28gdGhhdCB0aGV5IGRvbid0IGdldCBpbmNsdWRlZCBpbiB0aGUgbGlicmFyeQotICAgICAgICAgICAgIyBkZXBlbmRlbmNpZXMuCi0gICAgICAgICAgICBvdXRwdXRfdmVyYm9zZV9saW5rX2NtZD0ndGVtcGxpc3Q9YCgkQ0MgLWIgJENGTEFHUyAtdiBjb25mdGVzdC4kb2JqZXh0IDI+JjEpIHwgJEVHUkVQICJcLUwiYDsgbGlzdD0iIjsgZm9yIHogaW4gJHRlbXBsaXN0OyBkbyBjYXNlICR6IGluIGNvbmZ0ZXN0LiRvYmpleHQpIGxpc3Q9IiRsaXN0ICR6Ijs7ICouJG9iamV4dCk7OyAqKSBsaXN0PSIkbGlzdCAkeiI7O2VzYWM7IGRvbmU7IGZ1bmNfZWNob19hbGwgIiRsaXN0IicKLSAgICAgICAgICAgIDs7Ci0gICAgICAgICAgKikKLSAgICAgICAgICAgIGlmIHRlc3QgIiRHWFgiID0geWVzOyB0aGVuCi0gICAgICAgICAgICAgIF9MVF9UQUdWQVIoYXJjaGl2ZV9jbWRzLCAkMSk9JyRSTSAkb3V0cHV0X29iamRpci8kc29uYW1lfiRDQyAtc2hhcmVkIC1ub3N0ZGxpYiAkcGljX2ZsYWcgJHt3bH0rYiAke3dsfSRpbnN0YWxsX2xpYmRpciAtbyAkb3V0cHV0X29iamRpci8kc29uYW1lICRwcmVkZXBfb2JqZWN0cyAkbGlib2JqcyAkZGVwbGlicyAkcG9zdGRlcF9vYmplY3RzICRjb21waWxlcl9mbGFnc350ZXN0ICRvdXRwdXRfb2JqZGlyLyRzb25hbWUgPSAkbGliIHx8IG12ICRvdXRwdXRfb2JqZGlyLyRzb25hbWUgJGxpYicKLSAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgIyBGSVhNRTogaW5zZXJ0IHByb3BlciBDKysgbGlicmFyeSBzdXBwb3J0Ci0gICAgICAgICAgICAgIF9MVF9UQUdWQVIobGRfc2hsaWJzLCAkMSk9bm8KLSAgICAgICAgICAgIGZpCi0gICAgICAgICAgICA7OwotICAgICAgICBlc2FjCi0gICAgICAgIDs7Ci0KLSAgICAgIGhwdXgxMCp8aHB1eDExKikKLSAgICAgICAgaWYgdGVzdCAkd2l0aF9nbnVfbGQgPSBubzsgdGhlbgotCSAgX0xUX1RBR1ZBUihoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjLCAkMSk9JyR7d2x9K2IgJHt3bH0kbGliZGlyJwotCSAgX0xUX1RBR1ZBUihoYXJkY29kZV9saWJkaXJfc2VwYXJhdG9yLCAkMSk9OgotCi0gICAgICAgICAgY2FzZSAkaG9zdF9jcHUgaW4KLSAgICAgICAgICAgIGhwcGEqNjQqfGlhNjQqKQotICAgICAgICAgICAgICA7OwotICAgICAgICAgICAgKikKLQkgICAgICBfTFRfVEFHVkFSKGV4cG9ydF9keW5hbWljX2ZsYWdfc3BlYywgJDEpPScke3dsfS1FJwotICAgICAgICAgICAgICA7OwotICAgICAgICAgIGVzYWMKLSAgICAgICAgZmkKLSAgICAgICAgY2FzZSAkaG9zdF9jcHUgaW4KLSAgICAgICAgICBocHBhKjY0KnxpYTY0KikKLSAgICAgICAgICAgIF9MVF9UQUdWQVIoaGFyZGNvZGVfZGlyZWN0LCAkMSk9bm8KLSAgICAgICAgICAgIF9MVF9UQUdWQVIoaGFyZGNvZGVfc2hsaWJwYXRoX3ZhciwgJDEpPW5vCi0gICAgICAgICAgICA7OwotICAgICAgICAgICopCi0gICAgICAgICAgICBfTFRfVEFHVkFSKGhhcmRjb2RlX2RpcmVjdCwgJDEpPXllcwotICAgICAgICAgICAgX0xUX1RBR1ZBUihoYXJkY29kZV9kaXJlY3RfYWJzb2x1dGUsICQxKT15ZXMKLSAgICAgICAgICAgIF9MVF9UQUdWQVIoaGFyZGNvZGVfbWludXNfTCwgJDEpPXllcyAjIE5vdCBpbiB0aGUgc2VhcmNoIFBBVEgsCi0JCQkJCSAgICAgICAgICMgYnV0IGFzIHRoZSBkZWZhdWx0Ci0JCQkJCSAgICAgICAgICMgbG9jYXRpb24gb2YgdGhlIGxpYnJhcnkuCi0gICAgICAgICAgICA7OwotICAgICAgICBlc2FjCi0KLSAgICAgICAgY2FzZSAkY2NfYmFzZW5hbWUgaW4KLSAgICAgICAgICBDQyopCi0JICAgICMgRklYTUU6IGluc2VydCBwcm9wZXIgQysrIGxpYnJhcnkgc3VwcG9ydAotCSAgICBfTFRfVEFHVkFSKGxkX3NobGlicywgJDEpPW5vCi0JICAgIDs7Ci0gICAgICAgICAgYUNDKikKLQkgICAgY2FzZSAkaG9zdF9jcHUgaW4KLQkgICAgICBocHBhKjY0KikKLQkgICAgICAgIF9MVF9UQUdWQVIoYXJjaGl2ZV9jbWRzLCAkMSk9JyRDQyAtYiAke3dsfStoICR7d2x9JHNvbmFtZSAtbyAkbGliICRwcmVkZXBfb2JqZWN0cyAkbGlib2JqcyAkZGVwbGlicyAkcG9zdGRlcF9vYmplY3RzICRjb21waWxlcl9mbGFncycKLQkgICAgICAgIDs7Ci0JICAgICAgaWE2NCopCi0JICAgICAgICBfTFRfVEFHVkFSKGFyY2hpdmVfY21kcywgJDEpPSckQ0MgLWIgJHt3bH0raCAke3dsfSRzb25hbWUgJHt3bH0rbm9kZWZhdWx0cnBhdGggLW8gJGxpYiAkcHJlZGVwX29iamVjdHMgJGxpYm9ianMgJGRlcGxpYnMgJHBvc3RkZXBfb2JqZWN0cyAkY29tcGlsZXJfZmxhZ3MnCi0JICAgICAgICA7OwotCSAgICAgICopCi0JICAgICAgICBfTFRfVEFHVkFSKGFyY2hpdmVfY21kcywgJDEpPSckQ0MgLWIgJHt3bH0raCAke3dsfSRzb25hbWUgJHt3bH0rYiAke3dsfSRpbnN0YWxsX2xpYmRpciAtbyAkbGliICRwcmVkZXBfb2JqZWN0cyAkbGlib2JqcyAkZGVwbGlicyAkcG9zdGRlcF9vYmplY3RzICRjb21waWxlcl9mbGFncycKLQkgICAgICAgIDs7Ci0JICAgIGVzYWMKLQkgICAgIyBDb21tYW5kcyB0byBtYWtlIGNvbXBpbGVyIHByb2R1Y2UgdmVyYm9zZSBvdXRwdXQgdGhhdCBsaXN0cwotCSAgICAjIHdoYXQgImhpZGRlbiIgbGlicmFyaWVzLCBvYmplY3QgZmlsZXMgYW5kIGZsYWdzIGFyZSB1c2VkIHdoZW4KLQkgICAgIyBsaW5raW5nIGEgc2hhcmVkIGxpYnJhcnkuCi0JICAgICMKLQkgICAgIyBUaGVyZSBkb2Vzbid0IGFwcGVhciB0byBiZSBhIHdheSB0byBwcmV2ZW50IHRoaXMgY29tcGlsZXIgZnJvbQotCSAgICAjIGV4cGxpY2l0bHkgbGlua2luZyBzeXN0ZW0gb2JqZWN0IGZpbGVzIHNvIHdlIG5lZWQgdG8gc3RyaXAgdGhlbQotCSAgICAjIGZyb20gdGhlIG91dHB1dCBzbyB0aGF0IHRoZXkgZG9uJ3QgZ2V0IGluY2x1ZGVkIGluIHRoZSBsaWJyYXJ5Ci0JICAgICMgZGVwZW5kZW5jaWVzLgotCSAgICBvdXRwdXRfdmVyYm9zZV9saW5rX2NtZD0ndGVtcGxpc3Q9YCgkQ0MgLWIgJENGTEFHUyAtdiBjb25mdGVzdC4kb2JqZXh0IDI+JjEpIHwgJEdSRVAgIlwtTCJgOyBsaXN0PSIiOyBmb3IgeiBpbiAkdGVtcGxpc3Q7IGRvIGNhc2UgJHogaW4gY29uZnRlc3QuJG9iamV4dCkgbGlzdD0iJGxpc3QgJHoiOzsgKi4kb2JqZXh0KTs7ICopIGxpc3Q9IiRsaXN0ICR6Ijs7ZXNhYzsgZG9uZTsgZnVuY19lY2hvX2FsbCAiJGxpc3QiJwotCSAgICA7OwotICAgICAgICAgICopCi0JICAgIGlmIHRlc3QgIiRHWFgiID0geWVzOyB0aGVuCi0JICAgICAgaWYgdGVzdCAkd2l0aF9nbnVfbGQgPSBubzsgdGhlbgotCSAgICAgICAgY2FzZSAkaG9zdF9jcHUgaW4KLQkgICAgICAgICAgaHBwYSo2NCopCi0JICAgICAgICAgICAgX0xUX1RBR1ZBUihhcmNoaXZlX2NtZHMsICQxKT0nJENDIC1zaGFyZWQgLW5vc3RkbGliIC1mUElDICR7d2x9K2ggJHt3bH0kc29uYW1lIC1vICRsaWIgJHByZWRlcF9vYmplY3RzICRsaWJvYmpzICRkZXBsaWJzICRwb3N0ZGVwX29iamVjdHMgJGNvbXBpbGVyX2ZsYWdzJwotCSAgICAgICAgICAgIDs7Ci0JICAgICAgICAgIGlhNjQqKQotCSAgICAgICAgICAgIF9MVF9UQUdWQVIoYXJjaGl2ZV9jbWRzLCAkMSk9JyRDQyAtc2hhcmVkIC1ub3N0ZGxpYiAkcGljX2ZsYWcgJHt3bH0raCAke3dsfSRzb25hbWUgJHt3bH0rbm9kZWZhdWx0cnBhdGggLW8gJGxpYiAkcHJlZGVwX29iamVjdHMgJGxpYm9ianMgJGRlcGxpYnMgJHBvc3RkZXBfb2JqZWN0cyAkY29tcGlsZXJfZmxhZ3MnCi0JICAgICAgICAgICAgOzsKLQkgICAgICAgICAgKikKLQkgICAgICAgICAgICBfTFRfVEFHVkFSKGFyY2hpdmVfY21kcywgJDEpPSckQ0MgLXNoYXJlZCAtbm9zdGRsaWIgJHBpY19mbGFnICR7d2x9K2ggJHt3bH0kc29uYW1lICR7d2x9K2IgJHt3bH0kaW5zdGFsbF9saWJkaXIgLW8gJGxpYiAkcHJlZGVwX29iamVjdHMgJGxpYm9ianMgJGRlcGxpYnMgJHBvc3RkZXBfb2JqZWN0cyAkY29tcGlsZXJfZmxhZ3MnCi0JICAgICAgICAgICAgOzsKLQkgICAgICAgIGVzYWMKLQkgICAgICBmaQotCSAgICBlbHNlCi0JICAgICAgIyBGSVhNRTogaW5zZXJ0IHByb3BlciBDKysgbGlicmFyeSBzdXBwb3J0Ci0JICAgICAgX0xUX1RBR1ZBUihsZF9zaGxpYnMsICQxKT1ubwotCSAgICBmaQotCSAgICA7OwotICAgICAgICBlc2FjCi0gICAgICAgIDs7Ci0KLSAgICAgIGludGVyaXhbWzMtOV1dKikKLQlfTFRfVEFHVkFSKGhhcmRjb2RlX2RpcmVjdCwgJDEpPW5vCi0JX0xUX1RBR1ZBUihoYXJkY29kZV9zaGxpYnBhdGhfdmFyLCAkMSk9bm8KLQlfTFRfVEFHVkFSKGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWMsICQxKT0nJHt3bH0tcnBhdGgsJGxpYmRpcicKLQlfTFRfVEFHVkFSKGV4cG9ydF9keW5hbWljX2ZsYWdfc3BlYywgJDEpPScke3dsfS1FJwotCSMgSGFjazogT24gSW50ZXJpeCAzLngsIHdlIGNhbm5vdCBjb21waWxlIFBJQyBiZWNhdXNlIG9mIGEgYnJva2VuIGdjYy4KLQkjIEluc3RlYWQsIHNoYXJlZCBsaWJyYXJpZXMgYXJlIGxvYWRlZCBhdCBhbiBpbWFnZSBiYXNlICgweDEwMDAwMDAwIGJ5Ci0JIyBkZWZhdWx0KSBhbmQgcmVsb2NhdGVkIGlmIHRoZXkgY29uZmxpY3QsIHdoaWNoIGlzIGEgc2xvdyB2ZXJ5IG1lbW9yeQotCSMgY29uc3VtaW5nIGFuZCBmcmFnbWVudGluZyBwcm9jZXNzLiAgVG8gYXZvaWQgdGhpcywgd2UgcGljayBhIHJhbmRvbSwKLQkjIDI1NiBLaUItYWxpZ25lZCBpbWFnZSBiYXNlIGJldHdlZW4gMHg1MDAwMDAwMCBhbmQgMHg2RkZDMDAwMCBhdCBsaW5rCi0JIyB0aW1lLiAgTW92aW5nIHVwIGZyb20gMHgxMDAwMDAwMCBhbHNvIGFsbG93cyBtb3JlIHNicmsoMikgc3BhY2UuCi0JX0xUX1RBR1ZBUihhcmNoaXZlX2NtZHMsICQxKT0nJENDIC1zaGFyZWQgJHBpY19mbGFnICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncyAke3dsfS1oLCRzb25hbWUgJHt3bH0tLWltYWdlLWJhc2UsYGV4cHIgJHtSQU5ET00tJCR9ICUgNDA5NiAvIDIgXCogMjYyMTQ0ICsgMTM0MjE3NzI4MGAgLW8gJGxpYicKLQlfTFRfVEFHVkFSKGFyY2hpdmVfZXhwc3ltX2NtZHMsICQxKT0nc2VkICJzLF4sXywiICRleHBvcnRfc3ltYm9scyA+JG91dHB1dF9vYmpkaXIvJHNvbmFtZS5leHBzeW1+JENDIC1zaGFyZWQgJHBpY19mbGFnICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncyAke3dsfS1oLCRzb25hbWUgJHt3bH0tLXJldGFpbi1zeW1ib2xzLWZpbGUsJG91dHB1dF9vYmpkaXIvJHNvbmFtZS5leHBzeW0gJHt3bH0tLWltYWdlLWJhc2UsYGV4cHIgJHtSQU5ET00tJCR9ICUgNDA5NiAvIDIgXCogMjYyMTQ0ICsgMTM0MjE3NzI4MGAgLW8gJGxpYicKLQk7OwotICAgICAgaXJpeDUqIHwgaXJpeDYqKQotICAgICAgICBjYXNlICRjY19iYXNlbmFtZSBpbgotICAgICAgICAgIENDKikKLQkgICAgIyBTR0kgQysrCi0JICAgIF9MVF9UQUdWQVIoYXJjaGl2ZV9jbWRzLCAkMSk9JyRDQyAtc2hhcmVkIC1hbGwgLW11bHRpZ290ICRwcmVkZXBfb2JqZWN0cyAkbGlib2JqcyAkZGVwbGlicyAkcG9zdGRlcF9vYmplY3RzICRjb21waWxlcl9mbGFncyAtc29uYW1lICRzb25hbWUgYHRlc3QgLW4gIiR2ZXJzdHJpbmciICYmIGZ1bmNfZWNob19hbGwgIi1zZXRfdmVyc2lvbiAkdmVyc3RyaW5nImAgLXVwZGF0ZV9yZWdpc3RyeSAke291dHB1dF9vYmpkaXJ9L3NvX2xvY2F0aW9ucyAtbyAkbGliJwotCi0JICAgICMgQXJjaGl2ZXMgY29udGFpbmluZyBDKysgb2JqZWN0IGZpbGVzIG11c3QgYmUgY3JlYXRlZCB1c2luZwotCSAgICAjICJDQyAtYXIiLCB3aGVyZSAiQ0MiIGlzIHRoZSBJUklYIEMrKyBjb21waWxlci4gIFRoaXMgaXMKLQkgICAgIyBuZWNlc3NhcnkgdG8gbWFrZSBzdXJlIGluc3RhbnRpYXRlZCB0ZW1wbGF0ZXMgYXJlIGluY2x1ZGVkCi0JICAgICMgaW4gdGhlIGFyY2hpdmUuCi0JICAgIF9MVF9UQUdWQVIob2xkX2FyY2hpdmVfY21kcywgJDEpPSckQ0MgLWFyIC1XUiwtdSAtbyAkb2xkbGliICRvbGRvYmpzJwotCSAgICA7OwotICAgICAgICAgICopCi0JICAgIGlmIHRlc3QgIiRHWFgiID0geWVzOyB0aGVuCi0JICAgICAgaWYgdGVzdCAiJHdpdGhfZ251X2xkIiA9IG5vOyB0aGVuCi0JICAgICAgICBfTFRfVEFHVkFSKGFyY2hpdmVfY21kcywgJDEpPSckQ0MgLXNoYXJlZCAkcGljX2ZsYWcgLW5vc3RkbGliICRwcmVkZXBfb2JqZWN0cyAkbGlib2JqcyAkZGVwbGlicyAkcG9zdGRlcF9vYmplY3RzICRjb21waWxlcl9mbGFncyAke3dsfS1zb25hbWUgJHt3bH0kc29uYW1lIGB0ZXN0IC1uICIkdmVyc3RyaW5nIiAmJiBmdW5jX2VjaG9fYWxsICIke3dsfS1zZXRfdmVyc2lvbiAke3dsfSR2ZXJzdHJpbmciYCAke3dsfS11cGRhdGVfcmVnaXN0cnkgJHt3bH0ke291dHB1dF9vYmpkaXJ9L3NvX2xvY2F0aW9ucyAtbyAkbGliJwotCSAgICAgIGVsc2UKLQkgICAgICAgIF9MVF9UQUdWQVIoYXJjaGl2ZV9jbWRzLCAkMSk9JyRDQyAtc2hhcmVkICRwaWNfZmxhZyAtbm9zdGRsaWIgJHByZWRlcF9vYmplY3RzICRsaWJvYmpzICRkZXBsaWJzICRwb3N0ZGVwX29iamVjdHMgJGNvbXBpbGVyX2ZsYWdzICR7d2x9LXNvbmFtZSAke3dsfSRzb25hbWUgYHRlc3QgLW4gIiR2ZXJzdHJpbmciICYmIGZ1bmNfZWNob19hbGwgIiR7d2x9LXNldF92ZXJzaW9uICR7d2x9JHZlcnN0cmluZyJgIC1vICRsaWInCi0JICAgICAgZmkKLQkgICAgZmkKLQkgICAgX0xUX1RBR1ZBUihsaW5rX2FsbF9kZXBsaWJzLCAkMSk9eWVzCi0JICAgIDs7Ci0gICAgICAgIGVzYWMKLSAgICAgICAgX0xUX1RBR1ZBUihoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjLCAkMSk9JyR7d2x9LXJwYXRoICR7d2x9JGxpYmRpcicKLSAgICAgICAgX0xUX1RBR1ZBUihoYXJkY29kZV9saWJkaXJfc2VwYXJhdG9yLCAkMSk9OgotICAgICAgICBfTFRfVEFHVkFSKGluaGVyaXRfcnBhdGgsICQxKT15ZXMKLSAgICAgICAgOzsKLQotICAgICAgbGludXgqIHwgaypic2QqLWdudSB8IGtvcGVuc29sYXJpcyotZ251KQotICAgICAgICBjYXNlICRjY19iYXNlbmFtZSBpbgotICAgICAgICAgIEtDQyopCi0JICAgICMgS3VjayBhbmQgQXNzb2NpYXRlcywgSW5jLiAoS0FJKSBDKysgQ29tcGlsZXIKLQotCSAgICAjIEtDQyB3aWxsIG9ubHkgY3JlYXRlIGEgc2hhcmVkIGxpYnJhcnkgaWYgdGhlIG91dHB1dCBmaWxlCi0JICAgICMgZW5kcyB3aXRoICIuc28iIChvciAiLnNsIiBmb3IgSFAtVVgpLCBzbyByZW5hbWUgdGhlIGxpYnJhcnkKLQkgICAgIyB0byBpdHMgcHJvcGVyIG5hbWUgKHdpdGggdmVyc2lvbikgYWZ0ZXIgbGlua2luZy4KLQkgICAgX0xUX1RBR1ZBUihhcmNoaXZlX2NtZHMsICQxKT0ndGVtcGV4dD1gZWNobyAkc2hhcmVkX2V4dCB8ICRTRUQgLWUgJ1wnJ3MvXChbW14oKTAtOUEtWmEtent9XV1cKS9cXFxcXDEvZydcJydgOyB0ZW1wbGliPWBlY2hvICRsaWIgfCAkU0VEIC1lICJzL1wke3RlbXBleHR9XC4uKi8uc28vImA7ICRDQyAkcHJlZGVwX29iamVjdHMgJGxpYm9ianMgJGRlcGxpYnMgJHBvc3RkZXBfb2JqZWN0cyAkY29tcGlsZXJfZmxhZ3MgLS1zb25hbWUgJHNvbmFtZSAtbyBcJHRlbXBsaWI7IG12IFwkdGVtcGxpYiAkbGliJwotCSAgICBfTFRfVEFHVkFSKGFyY2hpdmVfZXhwc3ltX2NtZHMsICQxKT0ndGVtcGV4dD1gZWNobyAkc2hhcmVkX2V4dCB8ICRTRUQgLWUgJ1wnJ3MvXChbW14oKTAtOUEtWmEtent9XV1cKS9cXFxcXDEvZydcJydgOyB0ZW1wbGliPWBlY2hvICRsaWIgfCAkU0VEIC1lICJzL1wke3RlbXBleHR9XC4uKi8uc28vImA7ICRDQyAkcHJlZGVwX29iamVjdHMgJGxpYm9ianMgJGRlcGxpYnMgJHBvc3RkZXBfb2JqZWN0cyAkY29tcGlsZXJfZmxhZ3MgLS1zb25hbWUgJHNvbmFtZSAtbyBcJHRlbXBsaWIgJHt3bH0tcmV0YWluLXN5bWJvbHMtZmlsZSwkZXhwb3J0X3N5bWJvbHM7IG12IFwkdGVtcGxpYiAkbGliJwotCSAgICAjIENvbW1hbmRzIHRvIG1ha2UgY29tcGlsZXIgcHJvZHVjZSB2ZXJib3NlIG91dHB1dCB0aGF0IGxpc3RzCi0JICAgICMgd2hhdCAiaGlkZGVuIiBsaWJyYXJpZXMsIG9iamVjdCBmaWxlcyBhbmQgZmxhZ3MgYXJlIHVzZWQgd2hlbgotCSAgICAjIGxpbmtpbmcgYSBzaGFyZWQgbGlicmFyeS4KLQkgICAgIwotCSAgICAjIFRoZXJlIGRvZXNuJ3QgYXBwZWFyIHRvIGJlIGEgd2F5IHRvIHByZXZlbnQgdGhpcyBjb21waWxlciBmcm9tCi0JICAgICMgZXhwbGljaXRseSBsaW5raW5nIHN5c3RlbSBvYmplY3QgZmlsZXMgc28gd2UgbmVlZCB0byBzdHJpcCB0aGVtCi0JICAgICMgZnJvbSB0aGUgb3V0cHV0IHNvIHRoYXQgdGhleSBkb24ndCBnZXQgaW5jbHVkZWQgaW4gdGhlIGxpYnJhcnkKLQkgICAgIyBkZXBlbmRlbmNpZXMuCi0JICAgIG91dHB1dF92ZXJib3NlX2xpbmtfY21kPSd0ZW1wbGlzdD1gJENDICRDRkxBR1MgLXYgY29uZnRlc3QuJG9iamV4dCAtbyBsaWJjb25mdGVzdCRzaGFyZWRfZXh0IDI+JjEgfCAkR1JFUCAibGQiYDsgcm0gLWYgbGliY29uZnRlc3Qkc2hhcmVkX2V4dDsgbGlzdD0iIjsgZm9yIHogaW4gJHRlbXBsaXN0OyBkbyBjYXNlICR6IGluIGNvbmZ0ZXN0LiRvYmpleHQpIGxpc3Q9IiRsaXN0ICR6Ijs7ICouJG9iamV4dCk7OyAqKSBsaXN0PSIkbGlzdCAkeiI7O2VzYWM7IGRvbmU7IGZ1bmNfZWNob19hbGwgIiRsaXN0IicKLQotCSAgICBfTFRfVEFHVkFSKGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWMsICQxKT0nJHt3bH0tcnBhdGgsJGxpYmRpcicKLQkgICAgX0xUX1RBR1ZBUihleHBvcnRfZHluYW1pY19mbGFnX3NwZWMsICQxKT0nJHt3bH0tLWV4cG9ydC1keW5hbWljJwotCi0JICAgICMgQXJjaGl2ZXMgY29udGFpbmluZyBDKysgb2JqZWN0IGZpbGVzIG11c3QgYmUgY3JlYXRlZCB1c2luZwotCSAgICAjICJDQyAtQnN0YXRpYyIsIHdoZXJlICJDQyIgaXMgdGhlIEtBSSBDKysgY29tcGlsZXIuCi0JICAgIF9MVF9UQUdWQVIob2xkX2FyY2hpdmVfY21kcywgJDEpPSckQ0MgLUJzdGF0aWMgLW8gJG9sZGxpYiAkb2xkb2JqcycKLQkgICAgOzsKLQkgIGljcGMqIHwgZWNwYyogKQotCSAgICAjIEludGVsIEMrKwotCSAgICB3aXRoX2dudV9sZD15ZXMKLQkgICAgIyB2ZXJzaW9uIDguMCBhbmQgYWJvdmUgb2YgaWNwYyBjaG9rZSBvbiBtdWx0aXBseSBkZWZpbmVkIHN5bWJvbHMKLQkgICAgIyBpZiB3ZSBhZGQgJHByZWRlcF9vYmplY3RzIGFuZCAkcG9zdGRlcF9vYmplY3RzLCBob3dldmVyIDcuMSBhbmQKLQkgICAgIyBlYXJsaWVyIGRvIG5vdCBhZGQgdGhlIG9iamVjdHMgdGhlbXNlbHZlcy4KLQkgICAgY2FzZSBgJENDIC1WIDI+JjFgIGluCi0JICAgICAgKiJWZXJzaW9uIDcuIiopCi0JICAgICAgICBfTFRfVEFHVkFSKGFyY2hpdmVfY21kcywgJDEpPSckQ0MgLXNoYXJlZCAkcHJlZGVwX29iamVjdHMgJGxpYm9ianMgJGRlcGxpYnMgJHBvc3RkZXBfb2JqZWN0cyAkY29tcGlsZXJfZmxhZ3MgJHt3bH0tc29uYW1lICR3bCRzb25hbWUgLW8gJGxpYicKLQkJX0xUX1RBR1ZBUihhcmNoaXZlX2V4cHN5bV9jbWRzLCAkMSk9JyRDQyAtc2hhcmVkICRwcmVkZXBfb2JqZWN0cyAkbGlib2JqcyAkZGVwbGlicyAkcG9zdGRlcF9vYmplY3RzICRjb21waWxlcl9mbGFncyAke3dsfS1zb25hbWUgJHdsJHNvbmFtZSAke3dsfS1yZXRhaW4tc3ltYm9scy1maWxlICR3bCRleHBvcnRfc3ltYm9scyAtbyAkbGliJwotCQk7OwotCSAgICAgICopICAjIFZlcnNpb24gOC4wIG9yIG5ld2VyCi0JICAgICAgICB0bXBfaWR5bj0KLQkgICAgICAgIGNhc2UgJGhvc3RfY3B1IGluCi0JCSAgaWE2NCopIHRtcF9pZHluPScgLWlfZHluYW1pYyc7OwotCQllc2FjCi0JICAgICAgICBfTFRfVEFHVkFSKGFyY2hpdmVfY21kcywgJDEpPSckQ0MgLXNoYXJlZCciJHRtcF9pZHluIicgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzICR7d2x9LXNvbmFtZSAkd2wkc29uYW1lIC1vICRsaWInCi0JCV9MVF9UQUdWQVIoYXJjaGl2ZV9leHBzeW1fY21kcywgJDEpPSckQ0MgLXNoYXJlZCciJHRtcF9pZHluIicgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzICR7d2x9LXNvbmFtZSAkd2wkc29uYW1lICR7d2x9LXJldGFpbi1zeW1ib2xzLWZpbGUgJHdsJGV4cG9ydF9zeW1ib2xzIC1vICRsaWInCi0JCTs7Ci0JICAgIGVzYWMKLQkgICAgX0xUX1RBR1ZBUihhcmNoaXZlX2NtZHNfbmVlZF9sYywgJDEpPW5vCi0JICAgIF9MVF9UQUdWQVIoaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYywgJDEpPScke3dsfS1ycGF0aCwkbGliZGlyJwotCSAgICBfTFRfVEFHVkFSKGV4cG9ydF9keW5hbWljX2ZsYWdfc3BlYywgJDEpPScke3dsfS0tZXhwb3J0LWR5bmFtaWMnCi0JICAgIF9MVF9UQUdWQVIod2hvbGVfYXJjaGl2ZV9mbGFnX3NwZWMsICQxKT0nJHt3bH0tLXdob2xlLWFyY2hpdmUkY29udmVuaWVuY2UgJHt3bH0tLW5vLXdob2xlLWFyY2hpdmUnCi0JICAgIDs7Ci0gICAgICAgICAgcGdDQyogfCBwZ2NwcCopCi0gICAgICAgICAgICAjIFBvcnRsYW5kIEdyb3VwIEMrKyBjb21waWxlcgotCSAgICBjYXNlIGAkQ0MgLVZgIGluCi0JICAgICpwZ0NDXCBbWzEtNV1dLiogfCAqcGdjcHBcIFtbMS01XV0uKikKLQkgICAgICBfTFRfVEFHVkFSKHByZWxpbmtfY21kcywgJDEpPSd0cGxkaXI9VGVtcGxhdGUuZGlyfgotCQlybSAtcmYgJHRwbGRpcn4KLQkJJENDIC0tcHJlbGlua19vYmplY3RzIC0taW5zdGFudGlhdGlvbl9kaXIgJHRwbGRpciAkb2JqcyAkbGlib2JqcyAkY29tcGlsZV9kZXBsaWJzfgotCQljb21waWxlX2NvbW1hbmQ9IiRjb21waWxlX2NvbW1hbmQgYGZpbmQgJHRwbGRpciAtbmFtZSBcKi5vIHwgc29ydCB8ICROTDJTUGAiJwotCSAgICAgIF9MVF9UQUdWQVIob2xkX2FyY2hpdmVfY21kcywgJDEpPSd0cGxkaXI9VGVtcGxhdGUuZGlyfgotCQlybSAtcmYgJHRwbGRpcn4KLQkJJENDIC0tcHJlbGlua19vYmplY3RzIC0taW5zdGFudGlhdGlvbl9kaXIgJHRwbGRpciAkb2xkb2JqcyRvbGRfZGVwbGlic34KLQkJJEFSICRBUl9GTEFHUyAkb2xkbGliJG9sZG9ianMkb2xkX2RlcGxpYnMgYGZpbmQgJHRwbGRpciAtbmFtZSBcKi5vIHwgc29ydCB8ICROTDJTUGB+Ci0JCSRSQU5MSUIgJG9sZGxpYicKLQkgICAgICBfTFRfVEFHVkFSKGFyY2hpdmVfY21kcywgJDEpPSd0cGxkaXI9VGVtcGxhdGUuZGlyfgotCQlybSAtcmYgJHRwbGRpcn4KLQkJJENDIC0tcHJlbGlua19vYmplY3RzIC0taW5zdGFudGlhdGlvbl9kaXIgJHRwbGRpciAkcHJlZGVwX29iamVjdHMgJGxpYm9ianMgJGRlcGxpYnMgJGNvbnZlbmllbmNlICRwb3N0ZGVwX29iamVjdHN+Ci0JCSRDQyAtc2hhcmVkICRwaWNfZmxhZyAkcHJlZGVwX29iamVjdHMgJGxpYm9ianMgJGRlcGxpYnMgYGZpbmQgJHRwbGRpciAtbmFtZSBcKi5vIHwgc29ydCB8ICROTDJTUGAgJHBvc3RkZXBfb2JqZWN0cyAkY29tcGlsZXJfZmxhZ3MgJHt3bH0tc29uYW1lICR7d2x9JHNvbmFtZSAtbyAkbGliJwotCSAgICAgIF9MVF9UQUdWQVIoYXJjaGl2ZV9leHBzeW1fY21kcywgJDEpPSd0cGxkaXI9VGVtcGxhdGUuZGlyfgotCQlybSAtcmYgJHRwbGRpcn4KLQkJJENDIC0tcHJlbGlua19vYmplY3RzIC0taW5zdGFudGlhdGlvbl9kaXIgJHRwbGRpciAkcHJlZGVwX29iamVjdHMgJGxpYm9ianMgJGRlcGxpYnMgJGNvbnZlbmllbmNlICRwb3N0ZGVwX29iamVjdHN+Ci0JCSRDQyAtc2hhcmVkICRwaWNfZmxhZyAkcHJlZGVwX29iamVjdHMgJGxpYm9ianMgJGRlcGxpYnMgYGZpbmQgJHRwbGRpciAtbmFtZSBcKi5vIHwgc29ydCB8ICROTDJTUGAgJHBvc3RkZXBfb2JqZWN0cyAkY29tcGlsZXJfZmxhZ3MgJHt3bH0tc29uYW1lICR7d2x9JHNvbmFtZSAke3dsfS1yZXRhaW4tc3ltYm9scy1maWxlICR7d2x9JGV4cG9ydF9zeW1ib2xzIC1vICRsaWInCi0JICAgICAgOzsKLQkgICAgKikgIyBWZXJzaW9uIDYgYW5kIGFib3ZlIHVzZSB3ZWFrIHN5bWJvbHMKLQkgICAgICBfTFRfVEFHVkFSKGFyY2hpdmVfY21kcywgJDEpPSckQ0MgLXNoYXJlZCAkcGljX2ZsYWcgJHByZWRlcF9vYmplY3RzICRsaWJvYmpzICRkZXBsaWJzICRwb3N0ZGVwX29iamVjdHMgJGNvbXBpbGVyX2ZsYWdzICR7d2x9LXNvbmFtZSAke3dsfSRzb25hbWUgLW8gJGxpYicKLQkgICAgICBfTFRfVEFHVkFSKGFyY2hpdmVfZXhwc3ltX2NtZHMsICQxKT0nJENDIC1zaGFyZWQgJHBpY19mbGFnICRwcmVkZXBfb2JqZWN0cyAkbGlib2JqcyAkZGVwbGlicyAkcG9zdGRlcF9vYmplY3RzICRjb21waWxlcl9mbGFncyAke3dsfS1zb25hbWUgJHt3bH0kc29uYW1lICR7d2x9LXJldGFpbi1zeW1ib2xzLWZpbGUgJHt3bH0kZXhwb3J0X3N5bWJvbHMgLW8gJGxpYicKLQkgICAgICA7OwotCSAgICBlc2FjCi0KLQkgICAgX0xUX1RBR1ZBUihoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjLCAkMSk9JyR7d2x9LS1ycGF0aCAke3dsfSRsaWJkaXInCi0JICAgIF9MVF9UQUdWQVIoZXhwb3J0X2R5bmFtaWNfZmxhZ19zcGVjLCAkMSk9JyR7d2x9LS1leHBvcnQtZHluYW1pYycKLQkgICAgX0xUX1RBR1ZBUih3aG9sZV9hcmNoaXZlX2ZsYWdfc3BlYywgJDEpPScke3dsfS0td2hvbGUtYXJjaGl2ZWBmb3IgY29udiBpbiAkY29udmVuaWVuY2VcIlwiOyBkbyB0ZXN0ICAtbiBcIiRjb252XCIgJiYgbmV3X2NvbnZlbmllbmNlPVwiJG5ld19jb252ZW5pZW5jZSwkY29udlwiOyBkb25lOyBmdW5jX2VjaG9fYWxsIFwiJG5ld19jb252ZW5pZW5jZVwiYCAke3dsfS0tbm8td2hvbGUtYXJjaGl2ZScKLSAgICAgICAgICAgIDs7Ci0JICBjeHgqKQotCSAgICAjIENvbXBhcSBDKysKLQkgICAgX0xUX1RBR1ZBUihhcmNoaXZlX2NtZHMsICQxKT0nJENDIC1zaGFyZWQgJHByZWRlcF9vYmplY3RzICRsaWJvYmpzICRkZXBsaWJzICRwb3N0ZGVwX29iamVjdHMgJGNvbXBpbGVyX2ZsYWdzICR7d2x9LXNvbmFtZSAkd2wkc29uYW1lIC1vICRsaWInCi0JICAgIF9MVF9UQUdWQVIoYXJjaGl2ZV9leHBzeW1fY21kcywgJDEpPSckQ0MgLXNoYXJlZCAkcHJlZGVwX29iamVjdHMgJGxpYm9ianMgJGRlcGxpYnMgJHBvc3RkZXBfb2JqZWN0cyAkY29tcGlsZXJfZmxhZ3MgJHt3bH0tc29uYW1lICR3bCRzb25hbWUgIC1vICRsaWIgJHt3bH0tcmV0YWluLXN5bWJvbHMtZmlsZSAkd2wkZXhwb3J0X3N5bWJvbHMnCi0KLQkgICAgcnVucGF0aF92YXI9TERfUlVOX1BBVEgKLQkgICAgX0xUX1RBR1ZBUihoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjLCAkMSk9Jy1ycGF0aCAkbGliZGlyJwotCSAgICBfTFRfVEFHVkFSKGhhcmRjb2RlX2xpYmRpcl9zZXBhcmF0b3IsICQxKT06Ci0KLQkgICAgIyBDb21tYW5kcyB0byBtYWtlIGNvbXBpbGVyIHByb2R1Y2UgdmVyYm9zZSBvdXRwdXQgdGhhdCBsaXN0cwotCSAgICAjIHdoYXQgImhpZGRlbiIgbGlicmFyaWVzLCBvYmplY3QgZmlsZXMgYW5kIGZsYWdzIGFyZSB1c2VkIHdoZW4KLQkgICAgIyBsaW5raW5nIGEgc2hhcmVkIGxpYnJhcnkuCi0JICAgICMKLQkgICAgIyBUaGVyZSBkb2Vzbid0IGFwcGVhciB0byBiZSBhIHdheSB0byBwcmV2ZW50IHRoaXMgY29tcGlsZXIgZnJvbQotCSAgICAjIGV4cGxpY2l0bHkgbGlua2luZyBzeXN0ZW0gb2JqZWN0IGZpbGVzIHNvIHdlIG5lZWQgdG8gc3RyaXAgdGhlbQotCSAgICAjIGZyb20gdGhlIG91dHB1dCBzbyB0aGF0IHRoZXkgZG9uJ3QgZ2V0IGluY2x1ZGVkIGluIHRoZSBsaWJyYXJ5Ci0JICAgICMgZGVwZW5kZW5jaWVzLgotCSAgICBvdXRwdXRfdmVyYm9zZV9saW5rX2NtZD0ndGVtcGxpc3Q9YCRDQyAtc2hhcmVkICRDRkxBR1MgLXYgY29uZnRlc3QuJG9iamV4dCAyPiYxIHwgJEdSRVAgImxkImA7IHRlbXBsaXN0PWBmdW5jX2VjaG9fYWxsICIkdGVtcGxpc3QiIHwgJFNFRCAicy9cKF4uKmxkLipcKVwoIC4qbGQgLiokXCkvXDEvImA7IGxpc3Q9IiI7IGZvciB6IGluICR0ZW1wbGlzdDsgZG8gY2FzZSAkeiBpbiBjb25mdGVzdC4kb2JqZXh0KSBsaXN0PSIkbGlzdCAkeiI7OyAqLiRvYmpleHQpOzsgKikgbGlzdD0iJGxpc3QgJHoiOztlc2FjOyBkb25lOyBmdW5jX2VjaG9fYWxsICJYJGxpc3QiIHwgJFhzZWQnCi0JICAgIDs7Ci0JICB4bCogfCBtcGl4bCogfCBiZ3hsKikKLQkgICAgIyBJQk0gWEwgOC4wIG9uIFBQQywgd2l0aCBHTlUgbGQKLQkgICAgX0xUX1RBR1ZBUihoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjLCAkMSk9JyR7d2x9LXJwYXRoICR7d2x9JGxpYmRpcicKLQkgICAgX0xUX1RBR1ZBUihleHBvcnRfZHluYW1pY19mbGFnX3NwZWMsICQxKT0nJHt3bH0tLWV4cG9ydC1keW5hbWljJwotCSAgICBfTFRfVEFHVkFSKGFyY2hpdmVfY21kcywgJDEpPSckQ0MgLXFta3Nocm9iaiAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MgJHt3bH0tc29uYW1lICR3bCRzb25hbWUgLW8gJGxpYicKLQkgICAgaWYgdGVzdCAieCRzdXBwb3J0c19hbm9uX3ZlcnNpb25pbmciID0geHllczsgdGhlbgotCSAgICAgIF9MVF9UQUdWQVIoYXJjaGl2ZV9leHBzeW1fY21kcywgJDEpPSdlY2hvICJ7IGdsb2JhbDoiID4gJG91dHB1dF9vYmpkaXIvJGxpYm5hbWUudmVyfgotCQljYXQgJGV4cG9ydF9zeW1ib2xzIHwgc2VkIC1lICJzL1woLipcKS9cMTsvIiA+PiAkb3V0cHV0X29iamRpci8kbGlibmFtZS52ZXJ+Ci0JCWVjaG8gImxvY2FsOiAqOyB9OyIgPj4gJG91dHB1dF9vYmpkaXIvJGxpYm5hbWUudmVyfgotCQkkQ0MgLXFta3Nocm9iaiAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MgJHt3bH0tc29uYW1lICR3bCRzb25hbWUgJHt3bH0tdmVyc2lvbi1zY3JpcHQgJHt3bH0kb3V0cHV0X29iamRpci8kbGlibmFtZS52ZXIgLW8gJGxpYicKLQkgICAgZmkKLQkgICAgOzsKLQkgICopCi0JICAgIGNhc2UgYCRDQyAtViAyPiYxIHwgc2VkIDVxYCBpbgotCSAgICAqU3VuXCBDKikKLQkgICAgICAjIFN1biBDKysgNS45Ci0JICAgICAgX0xUX1RBR1ZBUihub191bmRlZmluZWRfZmxhZywgJDEpPScgLXpkZWZzJwotCSAgICAgIF9MVF9UQUdWQVIoYXJjaGl2ZV9jbWRzLCAkMSk9JyRDQyAtRyR7YWxsb3dfdW5kZWZpbmVkX2ZsYWd9IC1oJHNvbmFtZSAtbyAkbGliICRwcmVkZXBfb2JqZWN0cyAkbGlib2JqcyAkZGVwbGlicyAkcG9zdGRlcF9vYmplY3RzICRjb21waWxlcl9mbGFncycKLQkgICAgICBfTFRfVEFHVkFSKGFyY2hpdmVfZXhwc3ltX2NtZHMsICQxKT0nJENDIC1HJHthbGxvd191bmRlZmluZWRfZmxhZ30gLWgkc29uYW1lIC1vICRsaWIgJHByZWRlcF9vYmplY3RzICRsaWJvYmpzICRkZXBsaWJzICRwb3N0ZGVwX29iamVjdHMgJGNvbXBpbGVyX2ZsYWdzICR7d2x9LXJldGFpbi1zeW1ib2xzLWZpbGUgJHt3bH0kZXhwb3J0X3N5bWJvbHMnCi0JICAgICAgX0xUX1RBR1ZBUihoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjLCAkMSk9Jy1SJGxpYmRpcicKLQkgICAgICBfTFRfVEFHVkFSKHdob2xlX2FyY2hpdmVfZmxhZ19zcGVjLCAkMSk9JyR7d2x9LS13aG9sZS1hcmNoaXZlYG5ld19jb252ZW5pZW5jZT07IGZvciBjb252IGluICRjb252ZW5pZW5jZVwiXCI7IGRvIHRlc3QgLXogXCIkY29udlwiIHx8IG5ld19jb252ZW5pZW5jZT1cIiRuZXdfY29udmVuaWVuY2UsJGNvbnZcIjsgZG9uZTsgZnVuY19lY2hvX2FsbCBcIiRuZXdfY29udmVuaWVuY2VcImAgJHt3bH0tLW5vLXdob2xlLWFyY2hpdmUnCi0JICAgICAgX0xUX1RBR1ZBUihjb21waWxlcl9uZWVkc19vYmplY3QsICQxKT15ZXMKLQotCSAgICAgICMgTm90IHN1cmUgd2hldGhlciBzb21ldGhpbmcgYmFzZWQgb24KLQkgICAgICAjICRDQyAkQ0ZMQUdTIC12IGNvbmZ0ZXN0LiRvYmpleHQgLW8gbGliY29uZnRlc3Qkc2hhcmVkX2V4dCAyPiYxCi0JICAgICAgIyB3b3VsZCBiZSBiZXR0ZXIuCi0JICAgICAgb3V0cHV0X3ZlcmJvc2VfbGlua19jbWQ9J2Z1bmNfZWNob19hbGwnCi0KLQkgICAgICAjIEFyY2hpdmVzIGNvbnRhaW5pbmcgQysrIG9iamVjdCBmaWxlcyBtdXN0IGJlIGNyZWF0ZWQgdXNpbmcKLQkgICAgICAjICJDQyAteGFyIiwgd2hlcmUgIkNDIiBpcyB0aGUgU3VuIEMrKyBjb21waWxlci4gIFRoaXMgaXMKLQkgICAgICAjIG5lY2Vzc2FyeSB0byBtYWtlIHN1cmUgaW5zdGFudGlhdGVkIHRlbXBsYXRlcyBhcmUgaW5jbHVkZWQKLQkgICAgICAjIGluIHRoZSBhcmNoaXZlLgotCSAgICAgIF9MVF9UQUdWQVIob2xkX2FyY2hpdmVfY21kcywgJDEpPSckQ0MgLXhhciAtbyAkb2xkbGliICRvbGRvYmpzJwotCSAgICAgIDs7Ci0JICAgIGVzYWMKLQkgICAgOzsKLQllc2FjCi0JOzsKLQotICAgICAgbHlueG9zKikKLSAgICAgICAgIyBGSVhNRTogaW5zZXJ0IHByb3BlciBDKysgbGlicmFyeSBzdXBwb3J0Ci0JX0xUX1RBR1ZBUihsZF9zaGxpYnMsICQxKT1ubwotCTs7Ci0KLSAgICAgIG04OGsqKQotICAgICAgICAjIEZJWE1FOiBpbnNlcnQgcHJvcGVyIEMrKyBsaWJyYXJ5IHN1cHBvcnQKLSAgICAgICAgX0xUX1RBR1ZBUihsZF9zaGxpYnMsICQxKT1ubwotCTs7Ci0KLSAgICAgIG12cyopCi0gICAgICAgIGNhc2UgJGNjX2Jhc2VuYW1lIGluCi0gICAgICAgICAgY3h4KikKLQkgICAgIyBGSVhNRTogaW5zZXJ0IHByb3BlciBDKysgbGlicmFyeSBzdXBwb3J0Ci0JICAgIF9MVF9UQUdWQVIobGRfc2hsaWJzLCAkMSk9bm8KLQkgICAgOzsKLQkgICopCi0JICAgICMgRklYTUU6IGluc2VydCBwcm9wZXIgQysrIGxpYnJhcnkgc3VwcG9ydAotCSAgICBfTFRfVEFHVkFSKGxkX3NobGlicywgJDEpPW5vCi0JICAgIDs7Ci0JZXNhYwotCTs7Ci0KLSAgICAgIG5ldGJzZCopCi0gICAgICAgIGlmIGVjaG8gX19FTEZfXyB8ICRDQyAtRSAtIHwgJEdSRVAgX19FTEZfXyA+L2Rldi9udWxsOyB0aGVuCi0JICBfTFRfVEFHVkFSKGFyY2hpdmVfY21kcywgJDEpPSckTEQgLUJzaGFyZWFibGUgIC1vICRsaWIgJHByZWRlcF9vYmplY3RzICRsaWJvYmpzICRkZXBsaWJzICRwb3N0ZGVwX29iamVjdHMgJGxpbmtlcl9mbGFncycKLQkgIHdsYXJjPQotCSAgX0xUX1RBR1ZBUihoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjLCAkMSk9Jy1SJGxpYmRpcicKLQkgIF9MVF9UQUdWQVIoaGFyZGNvZGVfZGlyZWN0LCAkMSk9eWVzCi0JICBfTFRfVEFHVkFSKGhhcmRjb2RlX3NobGlicGF0aF92YXIsICQxKT1ubwotCWZpCi0JIyBXb3JrYXJvdW5kIHNvbWUgYnJva2VuIHByZS0xLjUgdG9vbGNoYWlucwotCW91dHB1dF92ZXJib3NlX2xpbmtfY21kPSckQ0MgLXNoYXJlZCAkQ0ZMQUdTIC12IGNvbmZ0ZXN0LiRvYmpleHQgMj4mMSB8ICRHUkVQIGNvbmZ0ZXN0LiRvYmpleHQgfCAkU0VEIC1lICJzOi1sZ2NjIC1sYyAtbGdjYzo6IicKLQk7OwotCi0gICAgICAqbnRvKiB8ICpxbngqKQotICAgICAgICBfTFRfVEFHVkFSKGxkX3NobGlicywgJDEpPXllcwotCTs7Ci0KLSAgICAgIG9wZW5ic2QyKikKLSAgICAgICAgIyBDKysgc2hhcmVkIGxpYnJhcmllcyBhcmUgZmFpcmx5IGJyb2tlbgotCV9MVF9UQUdWQVIobGRfc2hsaWJzLCAkMSk9bm8KLQk7OwotCi0gICAgICBvcGVuYnNkKikKLQlpZiB0ZXN0IC1mIC91c3IvbGliZXhlYy9sZC5zbzsgdGhlbgotCSAgX0xUX1RBR1ZBUihoYXJkY29kZV9kaXJlY3QsICQxKT15ZXMKLQkgIF9MVF9UQUdWQVIoaGFyZGNvZGVfc2hsaWJwYXRoX3ZhciwgJDEpPW5vCi0JICBfTFRfVEFHVkFSKGhhcmRjb2RlX2RpcmVjdF9hYnNvbHV0ZSwgJDEpPXllcwotCSAgX0xUX1RBR1ZBUihhcmNoaXZlX2NtZHMsICQxKT0nJENDIC1zaGFyZWQgJHBpY19mbGFnICRwcmVkZXBfb2JqZWN0cyAkbGlib2JqcyAkZGVwbGlicyAkcG9zdGRlcF9vYmplY3RzICRjb21waWxlcl9mbGFncyAtbyAkbGliJwotCSAgX0xUX1RBR1ZBUihoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjLCAkMSk9JyR7d2x9LXJwYXRoLCRsaWJkaXInCi0JICBpZiB0ZXN0IC16ICJgZWNobyBfX0VMRl9fIHwgJENDIC1FIC0gfCBncmVwIF9fRUxGX19gIiB8fCB0ZXN0ICIkaG9zdF9vcy0kaG9zdF9jcHUiID0gIm9wZW5ic2QyLjgtcG93ZXJwYyI7IHRoZW4KLQkgICAgX0xUX1RBR1ZBUihhcmNoaXZlX2V4cHN5bV9jbWRzLCAkMSk9JyRDQyAtc2hhcmVkICRwaWNfZmxhZyAkcHJlZGVwX29iamVjdHMgJGxpYm9ianMgJGRlcGxpYnMgJHBvc3RkZXBfb2JqZWN0cyAkY29tcGlsZXJfZmxhZ3MgJHt3bH0tcmV0YWluLXN5bWJvbHMtZmlsZSwkZXhwb3J0X3N5bWJvbHMgLW8gJGxpYicKLQkgICAgX0xUX1RBR1ZBUihleHBvcnRfZHluYW1pY19mbGFnX3NwZWMsICQxKT0nJHt3bH0tRScKLQkgICAgX0xUX1RBR1ZBUih3aG9sZV9hcmNoaXZlX2ZsYWdfc3BlYywgJDEpPSIkd2xhcmMiJy0td2hvbGUtYXJjaGl2ZSRjb252ZW5pZW5jZSAnIiR3bGFyYyInLS1uby13aG9sZS1hcmNoaXZlJwotCSAgZmkKLQkgIG91dHB1dF92ZXJib3NlX2xpbmtfY21kPWZ1bmNfZWNob19hbGwKLQllbHNlCi0JICBfTFRfVEFHVkFSKGxkX3NobGlicywgJDEpPW5vCi0JZmkKLQk7OwotCi0gICAgICBvc2YzKiB8IG9zZjQqIHwgb3NmNSopCi0gICAgICAgIGNhc2UgJGNjX2Jhc2VuYW1lIGluCi0gICAgICAgICAgS0NDKikKLQkgICAgIyBLdWNrIGFuZCBBc3NvY2lhdGVzLCBJbmMuIChLQUkpIEMrKyBDb21waWxlcgotCi0JICAgICMgS0NDIHdpbGwgb25seSBjcmVhdGUgYSBzaGFyZWQgbGlicmFyeSBpZiB0aGUgb3V0cHV0IGZpbGUKLQkgICAgIyBlbmRzIHdpdGggIi5zbyIgKG9yICIuc2wiIGZvciBIUC1VWCksIHNvIHJlbmFtZSB0aGUgbGlicmFyeQotCSAgICAjIHRvIGl0cyBwcm9wZXIgbmFtZSAod2l0aCB2ZXJzaW9uKSBhZnRlciBsaW5raW5nLgotCSAgICBfTFRfVEFHVkFSKGFyY2hpdmVfY21kcywgJDEpPSd0ZW1wZXh0PWBlY2hvICRzaGFyZWRfZXh0IHwgJFNFRCAtZSAnXCcncy9cKFtbXigpMC05QS1aYS16e31dXVwpL1xcXFxcMS9nJ1wnJ2A7IHRlbXBsaWI9YGVjaG8gIiRsaWIiIHwgJFNFRCAtZSAicy9cJHt0ZW1wZXh0fVwuLiovLnNvLyJgOyAkQ0MgJHByZWRlcF9vYmplY3RzICRsaWJvYmpzICRkZXBsaWJzICRwb3N0ZGVwX29iamVjdHMgJGNvbXBpbGVyX2ZsYWdzIC0tc29uYW1lICRzb25hbWUgLW8gXCR0ZW1wbGliOyBtdiBcJHRlbXBsaWIgJGxpYicKLQotCSAgICBfTFRfVEFHVkFSKGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWMsICQxKT0nJHt3bH0tcnBhdGgsJGxpYmRpcicKLQkgICAgX0xUX1RBR1ZBUihoYXJkY29kZV9saWJkaXJfc2VwYXJhdG9yLCAkMSk9OgotCi0JICAgICMgQXJjaGl2ZXMgY29udGFpbmluZyBDKysgb2JqZWN0IGZpbGVzIG11c3QgYmUgY3JlYXRlZCB1c2luZwotCSAgICAjIHRoZSBLQUkgQysrIGNvbXBpbGVyLgotCSAgICBjYXNlICRob3N0IGluCi0JICAgICAgb3NmMyopIF9MVF9UQUdWQVIob2xkX2FyY2hpdmVfY21kcywgJDEpPSckQ0MgLUJzdGF0aWMgLW8gJG9sZGxpYiAkb2xkb2JqcycgOzsKLQkgICAgICAqKSBfTFRfVEFHVkFSKG9sZF9hcmNoaXZlX2NtZHMsICQxKT0nJENDIC1vICRvbGRsaWIgJG9sZG9ianMnIDs7Ci0JICAgIGVzYWMKLQkgICAgOzsKLSAgICAgICAgICBSQ0MqKQotCSAgICAjIFJhdGlvbmFsIEMrKyAyLjQuMQotCSAgICAjIEZJWE1FOiBpbnNlcnQgcHJvcGVyIEMrKyBsaWJyYXJ5IHN1cHBvcnQKLQkgICAgX0xUX1RBR1ZBUihsZF9zaGxpYnMsICQxKT1ubwotCSAgICA7OwotICAgICAgICAgIGN4eCopCi0JICAgIGNhc2UgJGhvc3QgaW4KLQkgICAgICBvc2YzKikKLQkgICAgICAgIF9MVF9UQUdWQVIoYWxsb3dfdW5kZWZpbmVkX2ZsYWcsICQxKT0nICR7d2x9LWV4cGVjdF91bnJlc29sdmVkICR7d2x9XConCi0JICAgICAgICBfTFRfVEFHVkFSKGFyY2hpdmVfY21kcywgJDEpPSckQ0MgLXNoYXJlZCR7YWxsb3dfdW5kZWZpbmVkX2ZsYWd9ICRwcmVkZXBfb2JqZWN0cyAkbGlib2JqcyAkZGVwbGlicyAkcG9zdGRlcF9vYmplY3RzICRjb21waWxlcl9mbGFncyAke3dsfS1zb25hbWUgJHNvbmFtZSBgdGVzdCAtbiAiJHZlcnN0cmluZyIgJiYgZnVuY19lY2hvX2FsbCAiJHt3bH0tc2V0X3ZlcnNpb24gJHZlcnN0cmluZyJgIC11cGRhdGVfcmVnaXN0cnkgJHtvdXRwdXRfb2JqZGlyfS9zb19sb2NhdGlvbnMgLW8gJGxpYicKLQkgICAgICAgIF9MVF9UQUdWQVIoaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYywgJDEpPScke3dsfS1ycGF0aCAke3dsfSRsaWJkaXInCi0JCTs7Ci0JICAgICAgKikKLQkgICAgICAgIF9MVF9UQUdWQVIoYWxsb3dfdW5kZWZpbmVkX2ZsYWcsICQxKT0nIC1leHBlY3RfdW5yZXNvbHZlZCBcKicKLQkgICAgICAgIF9MVF9UQUdWQVIoYXJjaGl2ZV9jbWRzLCAkMSk9JyRDQyAtc2hhcmVkJHthbGxvd191bmRlZmluZWRfZmxhZ30gJHByZWRlcF9vYmplY3RzICRsaWJvYmpzICRkZXBsaWJzICRwb3N0ZGVwX29iamVjdHMgJGNvbXBpbGVyX2ZsYWdzIC1tc3ltIC1zb25hbWUgJHNvbmFtZSBgdGVzdCAtbiAiJHZlcnN0cmluZyIgJiYgZnVuY19lY2hvX2FsbCAiLXNldF92ZXJzaW9uICR2ZXJzdHJpbmciYCAtdXBkYXRlX3JlZ2lzdHJ5ICR7b3V0cHV0X29iamRpcn0vc29fbG9jYXRpb25zIC1vICRsaWInCi0JICAgICAgICBfTFRfVEFHVkFSKGFyY2hpdmVfZXhwc3ltX2NtZHMsICQxKT0nZm9yIGkgaW4gYGNhdCAkZXhwb3J0X3N5bWJvbHNgOyBkbyBwcmludGYgIiVzICVzXFxuIiAtZXhwb3J0ZWRfc3ltYm9sICJcJGkiID4+ICRsaWIuZXhwOyBkb25lfgotCSAgICAgICAgICBlY2hvICItaGlkZGVuIj4+ICRsaWIuZXhwfgotCSAgICAgICAgICAkQ0MgLXNoYXJlZCRhbGxvd191bmRlZmluZWRfZmxhZyAkcHJlZGVwX29iamVjdHMgJGxpYm9ianMgJGRlcGxpYnMgJHBvc3RkZXBfb2JqZWN0cyAkY29tcGlsZXJfZmxhZ3MgLW1zeW0gLXNvbmFtZSAkc29uYW1lICR7d2x9LWlucHV0ICR7d2x9JGxpYi5leHAgIGB0ZXN0IC1uICIkdmVyc3RyaW5nIiAmJiAkRUNITyAiLXNldF92ZXJzaW9uICR2ZXJzdHJpbmciYCAtdXBkYXRlX3JlZ2lzdHJ5ICR7b3V0cHV0X29iamRpcn0vc29fbG9jYXRpb25zIC1vICRsaWJ+Ci0JICAgICAgICAgICRSTSAkbGliLmV4cCcKLQkgICAgICAgIF9MVF9UQUdWQVIoaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYywgJDEpPSctcnBhdGggJGxpYmRpcicKLQkJOzsKLQkgICAgZXNhYwotCi0JICAgIF9MVF9UQUdWQVIoaGFyZGNvZGVfbGliZGlyX3NlcGFyYXRvciwgJDEpPToKLQotCSAgICAjIENvbW1hbmRzIHRvIG1ha2UgY29tcGlsZXIgcHJvZHVjZSB2ZXJib3NlIG91dHB1dCB0aGF0IGxpc3RzCi0JICAgICMgd2hhdCAiaGlkZGVuIiBsaWJyYXJpZXMsIG9iamVjdCBmaWxlcyBhbmQgZmxhZ3MgYXJlIHVzZWQgd2hlbgotCSAgICAjIGxpbmtpbmcgYSBzaGFyZWQgbGlicmFyeS4KLQkgICAgIwotCSAgICAjIFRoZXJlIGRvZXNuJ3QgYXBwZWFyIHRvIGJlIGEgd2F5IHRvIHByZXZlbnQgdGhpcyBjb21waWxlciBmcm9tCi0JICAgICMgZXhwbGljaXRseSBsaW5raW5nIHN5c3RlbSBvYmplY3QgZmlsZXMgc28gd2UgbmVlZCB0byBzdHJpcCB0aGVtCi0JICAgICMgZnJvbSB0aGUgb3V0cHV0IHNvIHRoYXQgdGhleSBkb24ndCBnZXQgaW5jbHVkZWQgaW4gdGhlIGxpYnJhcnkKLQkgICAgIyBkZXBlbmRlbmNpZXMuCi0JICAgIG91dHB1dF92ZXJib3NlX2xpbmtfY21kPSd0ZW1wbGlzdD1gJENDIC1zaGFyZWQgJENGTEFHUyAtdiBjb25mdGVzdC4kb2JqZXh0IDI+JjEgfCAkR1JFUCAibGQiIHwgJEdSRVAgLXYgImxkOiJgOyB0ZW1wbGlzdD1gZnVuY19lY2hvX2FsbCAiJHRlbXBsaXN0IiB8ICRTRUQgInMvXCheLipsZC4qXClcKCAuKmxkLiokXCkvXDEvImA7IGxpc3Q9IiI7IGZvciB6IGluICR0ZW1wbGlzdDsgZG8gY2FzZSAkeiBpbiBjb25mdGVzdC4kb2JqZXh0KSBsaXN0PSIkbGlzdCAkeiI7OyAqLiRvYmpleHQpOzsgKikgbGlzdD0iJGxpc3QgJHoiOztlc2FjOyBkb25lOyBmdW5jX2VjaG9fYWxsICIkbGlzdCInCi0JICAgIDs7Ci0JICAqKQotCSAgICBpZiB0ZXN0ICIkR1hYIiA9IHllcyAmJiB0ZXN0ICIkd2l0aF9nbnVfbGQiID0gbm87IHRoZW4KLQkgICAgICBfTFRfVEFHVkFSKGFsbG93X3VuZGVmaW5lZF9mbGFnLCAkMSk9JyAke3dsfS1leHBlY3RfdW5yZXNvbHZlZCAke3dsfVwqJwotCSAgICAgIGNhc2UgJGhvc3QgaW4KLQkgICAgICAgIG9zZjMqKQotCSAgICAgICAgICBfTFRfVEFHVkFSKGFyY2hpdmVfY21kcywgJDEpPSckQ0MgLXNoYXJlZCAtbm9zdGRsaWIgJHthbGxvd191bmRlZmluZWRfZmxhZ30gJHByZWRlcF9vYmplY3RzICRsaWJvYmpzICRkZXBsaWJzICRwb3N0ZGVwX29iamVjdHMgJGNvbXBpbGVyX2ZsYWdzICR7d2x9LXNvbmFtZSAke3dsfSRzb25hbWUgYHRlc3QgLW4gIiR2ZXJzdHJpbmciICYmIGZ1bmNfZWNob19hbGwgIiR7d2x9LXNldF92ZXJzaW9uICR7d2x9JHZlcnN0cmluZyJgICR7d2x9LXVwZGF0ZV9yZWdpc3RyeSAke3dsfSR7b3V0cHV0X29iamRpcn0vc29fbG9jYXRpb25zIC1vICRsaWInCi0JCSAgOzsKLQkgICAgICAgICopCi0JICAgICAgICAgIF9MVF9UQUdWQVIoYXJjaGl2ZV9jbWRzLCAkMSk9JyRDQyAtc2hhcmVkICRwaWNfZmxhZyAtbm9zdGRsaWIgJHthbGxvd191bmRlZmluZWRfZmxhZ30gJHByZWRlcF9vYmplY3RzICRsaWJvYmpzICRkZXBsaWJzICRwb3N0ZGVwX29iamVjdHMgJGNvbXBpbGVyX2ZsYWdzICR7d2x9LW1zeW0gJHt3bH0tc29uYW1lICR7d2x9JHNvbmFtZSBgdGVzdCAtbiAiJHZlcnN0cmluZyIgJiYgZnVuY19lY2hvX2FsbCAiJHt3bH0tc2V0X3ZlcnNpb24gJHt3bH0kdmVyc3RyaW5nImAgJHt3bH0tdXBkYXRlX3JlZ2lzdHJ5ICR7d2x9JHtvdXRwdXRfb2JqZGlyfS9zb19sb2NhdGlvbnMgLW8gJGxpYicKLQkJICA7OwotCSAgICAgIGVzYWMKLQotCSAgICAgIF9MVF9UQUdWQVIoaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYywgJDEpPScke3dsfS1ycGF0aCAke3dsfSRsaWJkaXInCi0JICAgICAgX0xUX1RBR1ZBUihoYXJkY29kZV9saWJkaXJfc2VwYXJhdG9yLCAkMSk9OgotCi0JICAgICAgIyBDb21tYW5kcyB0byBtYWtlIGNvbXBpbGVyIHByb2R1Y2UgdmVyYm9zZSBvdXRwdXQgdGhhdCBsaXN0cwotCSAgICAgICMgd2hhdCAiaGlkZGVuIiBsaWJyYXJpZXMsIG9iamVjdCBmaWxlcyBhbmQgZmxhZ3MgYXJlIHVzZWQgd2hlbgotCSAgICAgICMgbGlua2luZyBhIHNoYXJlZCBsaWJyYXJ5LgotCSAgICAgIG91dHB1dF92ZXJib3NlX2xpbmtfY21kPSckQ0MgLXNoYXJlZCAkQ0ZMQUdTIC12IGNvbmZ0ZXN0LiRvYmpleHQgMj4mMSB8ICRHUkVQIC12ICJeQ29uZmlndXJlZCB3aXRoOiIgfCAkR1JFUCAiXC1MIicKLQotCSAgICBlbHNlCi0JICAgICAgIyBGSVhNRTogaW5zZXJ0IHByb3BlciBDKysgbGlicmFyeSBzdXBwb3J0Ci0JICAgICAgX0xUX1RBR1ZBUihsZF9zaGxpYnMsICQxKT1ubwotCSAgICBmaQotCSAgICA7OwotICAgICAgICBlc2FjCi0gICAgICAgIDs7Ci0KLSAgICAgIHBzb3MqKQotICAgICAgICAjIEZJWE1FOiBpbnNlcnQgcHJvcGVyIEMrKyBsaWJyYXJ5IHN1cHBvcnQKLSAgICAgICAgX0xUX1RBR1ZBUihsZF9zaGxpYnMsICQxKT1ubwotICAgICAgICA7OwotCi0gICAgICBzdW5vczQqKQotICAgICAgICBjYXNlICRjY19iYXNlbmFtZSBpbgotICAgICAgICAgIENDKikKLQkgICAgIyBTdW4gQysrIDQueAotCSAgICAjIEZJWE1FOiBpbnNlcnQgcHJvcGVyIEMrKyBsaWJyYXJ5IHN1cHBvcnQKLQkgICAgX0xUX1RBR1ZBUihsZF9zaGxpYnMsICQxKT1ubwotCSAgICA7OwotICAgICAgICAgIGxjYyopCi0JICAgICMgTHVjaWQKLQkgICAgIyBGSVhNRTogaW5zZXJ0IHByb3BlciBDKysgbGlicmFyeSBzdXBwb3J0Ci0JICAgIF9MVF9UQUdWQVIobGRfc2hsaWJzLCAkMSk9bm8KLQkgICAgOzsKLSAgICAgICAgICAqKQotCSAgICAjIEZJWE1FOiBpbnNlcnQgcHJvcGVyIEMrKyBsaWJyYXJ5IHN1cHBvcnQKLQkgICAgX0xUX1RBR1ZBUihsZF9zaGxpYnMsICQxKT1ubwotCSAgICA7OwotICAgICAgICBlc2FjCi0gICAgICAgIDs7Ci0KLSAgICAgIHNvbGFyaXMqKQotICAgICAgICBjYXNlICRjY19iYXNlbmFtZSBpbgotICAgICAgICAgIENDKiB8IHN1bkNDKikKLQkgICAgIyBTdW4gQysrIDQuMiwgNS54IGFuZCBDZW50ZXJsaW5lIEMrKwotICAgICAgICAgICAgX0xUX1RBR1ZBUihhcmNoaXZlX2NtZHNfbmVlZF9sYywkMSk9eWVzCi0JICAgIF9MVF9UQUdWQVIobm9fdW5kZWZpbmVkX2ZsYWcsICQxKT0nIC16ZGVmcycKLQkgICAgX0xUX1RBR1ZBUihhcmNoaXZlX2NtZHMsICQxKT0nJENDIC1HJHthbGxvd191bmRlZmluZWRfZmxhZ30gIC1oJHNvbmFtZSAtbyAkbGliICRwcmVkZXBfb2JqZWN0cyAkbGlib2JqcyAkZGVwbGlicyAkcG9zdGRlcF9vYmplY3RzICRjb21waWxlcl9mbGFncycKLQkgICAgX0xUX1RBR1ZBUihhcmNoaXZlX2V4cHN5bV9jbWRzLCAkMSk9J2VjaG8gInsgZ2xvYmFsOiIgPiAkbGliLmV4cH5jYXQgJGV4cG9ydF9zeW1ib2xzIHwgJFNFRCAtZSAicy9cKC4qXCkvXDE7LyIgPj4gJGxpYi5leHB+ZWNobyAibG9jYWw6ICo7IH07IiA+PiAkbGliLmV4cH4KLQkgICAgICAkQ0MgLUcke2FsbG93X3VuZGVmaW5lZF9mbGFnfSAke3dsfS1NICR7d2x9JGxpYi5leHAgLWgkc29uYW1lIC1vICRsaWIgJHByZWRlcF9vYmplY3RzICRsaWJvYmpzICRkZXBsaWJzICRwb3N0ZGVwX29iamVjdHMgJGNvbXBpbGVyX2ZsYWdzfiRSTSAkbGliLmV4cCcKLQotCSAgICBfTFRfVEFHVkFSKGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWMsICQxKT0nLVIkbGliZGlyJwotCSAgICBfTFRfVEFHVkFSKGhhcmRjb2RlX3NobGlicGF0aF92YXIsICQxKT1ubwotCSAgICBjYXNlICRob3N0X29zIGluCi0JICAgICAgc29sYXJpczIuW1swLTVdXSB8IHNvbGFyaXMyLltbMC01XV0uKikgOzsKLQkgICAgICAqKQotCQkjIFRoZSBjb21waWxlciBkcml2ZXIgd2lsbCBjb21iaW5lIGFuZCByZW9yZGVyIGxpbmtlciBvcHRpb25zLAotCQkjIGJ1dCB1bmRlcnN0YW5kcyBgLXogbGlua2VyX2ZsYWcnLgotCSAgICAgICAgIyBTdXBwb3J0ZWQgc2luY2UgU29sYXJpcyAyLjYgKG1heWJlIDIuNS4xPykKLQkJX0xUX1RBR1ZBUih3aG9sZV9hcmNoaXZlX2ZsYWdfc3BlYywgJDEpPScteiBhbGxleHRyYWN0JGNvbnZlbmllbmNlIC16IGRlZmF1bHRleHRyYWN0JwotCSAgICAgICAgOzsKLQkgICAgZXNhYwotCSAgICBfTFRfVEFHVkFSKGxpbmtfYWxsX2RlcGxpYnMsICQxKT15ZXMKLQotCSAgICBvdXRwdXRfdmVyYm9zZV9saW5rX2NtZD0nZnVuY19lY2hvX2FsbCcKLQotCSAgICAjIEFyY2hpdmVzIGNvbnRhaW5pbmcgQysrIG9iamVjdCBmaWxlcyBtdXN0IGJlIGNyZWF0ZWQgdXNpbmcKLQkgICAgIyAiQ0MgLXhhciIsIHdoZXJlICJDQyIgaXMgdGhlIFN1biBDKysgY29tcGlsZXIuICBUaGlzIGlzCi0JICAgICMgbmVjZXNzYXJ5IHRvIG1ha2Ugc3VyZSBpbnN0YW50aWF0ZWQgdGVtcGxhdGVzIGFyZSBpbmNsdWRlZAotCSAgICAjIGluIHRoZSBhcmNoaXZlLgotCSAgICBfTFRfVEFHVkFSKG9sZF9hcmNoaXZlX2NtZHMsICQxKT0nJENDIC14YXIgLW8gJG9sZGxpYiAkb2xkb2JqcycKLQkgICAgOzsKLSAgICAgICAgICBnY3gqKQotCSAgICAjIEdyZWVuIEhpbGxzIEMrKyBDb21waWxlcgotCSAgICBfTFRfVEFHVkFSKGFyY2hpdmVfY21kcywgJDEpPSckQ0MgLXNoYXJlZCAkcHJlZGVwX29iamVjdHMgJGxpYm9ianMgJGRlcGxpYnMgJHBvc3RkZXBfb2JqZWN0cyAkY29tcGlsZXJfZmxhZ3MgJHt3bH0taCAkd2wkc29uYW1lIC1vICRsaWInCi0KLQkgICAgIyBUaGUgQysrIGNvbXBpbGVyIG11c3QgYmUgdXNlZCB0byBjcmVhdGUgdGhlIGFyY2hpdmUuCi0JICAgIF9MVF9UQUdWQVIob2xkX2FyY2hpdmVfY21kcywgJDEpPSckQ0MgJExERkxBR1MgLWFyY2hpdmUgLW8gJG9sZGxpYiAkb2xkb2JqcycKLQkgICAgOzsKLSAgICAgICAgICAqKQotCSAgICAjIEdOVSBDKysgY29tcGlsZXIgd2l0aCBTb2xhcmlzIGxpbmtlcgotCSAgICBpZiB0ZXN0ICIkR1hYIiA9IHllcyAmJiB0ZXN0ICIkd2l0aF9nbnVfbGQiID0gbm87IHRoZW4KLQkgICAgICBfTFRfVEFHVkFSKG5vX3VuZGVmaW5lZF9mbGFnLCAkMSk9JyAke3dsfS16ICR7d2x9ZGVmcycKLQkgICAgICBpZiAkQ0MgLS12ZXJzaW9uIHwgJEdSRVAgLXYgJ14yXC43JyA+IC9kZXYvbnVsbDsgdGhlbgotCSAgICAgICAgX0xUX1RBR1ZBUihhcmNoaXZlX2NtZHMsICQxKT0nJENDIC1zaGFyZWQgJHBpY19mbGFnIC1ub3N0ZGxpYiAkTERGTEFHUyAkcHJlZGVwX29iamVjdHMgJGxpYm9ianMgJGRlcGxpYnMgJHBvc3RkZXBfb2JqZWN0cyAkY29tcGlsZXJfZmxhZ3MgJHt3bH0taCAkd2wkc29uYW1lIC1vICRsaWInCi0JICAgICAgICBfTFRfVEFHVkFSKGFyY2hpdmVfZXhwc3ltX2NtZHMsICQxKT0nZWNobyAieyBnbG9iYWw6IiA+ICRsaWIuZXhwfmNhdCAkZXhwb3J0X3N5bWJvbHMgfCAkU0VEIC1lICJzL1woLipcKS9cMTsvIiA+PiAkbGliLmV4cH5lY2hvICJsb2NhbDogKjsgfTsiID4+ICRsaWIuZXhwfgotCQkgICRDQyAtc2hhcmVkICRwaWNfZmxhZyAtbm9zdGRsaWIgJHt3bH0tTSAkd2wkbGliLmV4cCAtbyAkbGliICRwcmVkZXBfb2JqZWN0cyAkbGlib2JqcyAkZGVwbGlicyAkcG9zdGRlcF9vYmplY3RzICRjb21waWxlcl9mbGFnc34kUk0gJGxpYi5leHAnCi0KLQkgICAgICAgICMgQ29tbWFuZHMgdG8gbWFrZSBjb21waWxlciBwcm9kdWNlIHZlcmJvc2Ugb3V0cHV0IHRoYXQgbGlzdHMKLQkgICAgICAgICMgd2hhdCAiaGlkZGVuIiBsaWJyYXJpZXMsIG9iamVjdCBmaWxlcyBhbmQgZmxhZ3MgYXJlIHVzZWQgd2hlbgotCSAgICAgICAgIyBsaW5raW5nIGEgc2hhcmVkIGxpYnJhcnkuCi0JICAgICAgICBvdXRwdXRfdmVyYm9zZV9saW5rX2NtZD0nJENDIC1zaGFyZWQgJENGTEFHUyAtdiBjb25mdGVzdC4kb2JqZXh0IDI+JjEgfCAkR1JFUCAtdiAiXkNvbmZpZ3VyZWQgd2l0aDoiIHwgJEdSRVAgIlwtTCInCi0JICAgICAgZWxzZQotCSAgICAgICAgIyBnKysgMi43IGFwcGVhcnMgdG8gcmVxdWlyZSBgLUcnIE5PVCBgLXNoYXJlZCcgb24gdGhpcwotCSAgICAgICAgIyBwbGF0Zm9ybS4KLQkgICAgICAgIF9MVF9UQUdWQVIoYXJjaGl2ZV9jbWRzLCAkMSk9JyRDQyAtRyAtbm9zdGRsaWIgJExERkxBR1MgJHByZWRlcF9vYmplY3RzICRsaWJvYmpzICRkZXBsaWJzICRwb3N0ZGVwX29iamVjdHMgJGNvbXBpbGVyX2ZsYWdzICR7d2x9LWggJHdsJHNvbmFtZSAtbyAkbGliJwotCSAgICAgICAgX0xUX1RBR1ZBUihhcmNoaXZlX2V4cHN5bV9jbWRzLCAkMSk9J2VjaG8gInsgZ2xvYmFsOiIgPiAkbGliLmV4cH5jYXQgJGV4cG9ydF9zeW1ib2xzIHwgJFNFRCAtZSAicy9cKC4qXCkvXDE7LyIgPj4gJGxpYi5leHB+ZWNobyAibG9jYWw6ICo7IH07IiA+PiAkbGliLmV4cH4KLQkJICAkQ0MgLUcgLW5vc3RkbGliICR7d2x9LU0gJHdsJGxpYi5leHAgLW8gJGxpYiAkcHJlZGVwX29iamVjdHMgJGxpYm9ianMgJGRlcGxpYnMgJHBvc3RkZXBfb2JqZWN0cyAkY29tcGlsZXJfZmxhZ3N+JFJNICRsaWIuZXhwJwotCi0JICAgICAgICAjIENvbW1hbmRzIHRvIG1ha2UgY29tcGlsZXIgcHJvZHVjZSB2ZXJib3NlIG91dHB1dCB0aGF0IGxpc3RzCi0JICAgICAgICAjIHdoYXQgImhpZGRlbiIgbGlicmFyaWVzLCBvYmplY3QgZmlsZXMgYW5kIGZsYWdzIGFyZSB1c2VkIHdoZW4KLQkgICAgICAgICMgbGlua2luZyBhIHNoYXJlZCBsaWJyYXJ5LgotCSAgICAgICAgb3V0cHV0X3ZlcmJvc2VfbGlua19jbWQ9JyRDQyAtRyAkQ0ZMQUdTIC12IGNvbmZ0ZXN0LiRvYmpleHQgMj4mMSB8ICRHUkVQIC12ICJeQ29uZmlndXJlZCB3aXRoOiIgfCAkR1JFUCAiXC1MIicKLQkgICAgICBmaQotCi0JICAgICAgX0xUX1RBR1ZBUihoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjLCAkMSk9JyR7d2x9LVIgJHdsJGxpYmRpcicKLQkgICAgICBjYXNlICRob3N0X29zIGluCi0JCXNvbGFyaXMyLltbMC01XV0gfCBzb2xhcmlzMi5bWzAtNV1dLiopIDs7Ci0JCSopCi0JCSAgX0xUX1RBR1ZBUih3aG9sZV9hcmNoaXZlX2ZsYWdfc3BlYywgJDEpPScke3dsfS16ICR7d2x9YWxsZXh0cmFjdCRjb252ZW5pZW5jZSAke3dsfS16ICR7d2x9ZGVmYXVsdGV4dHJhY3QnCi0JCSAgOzsKLQkgICAgICBlc2FjCi0JICAgIGZpCi0JICAgIDs7Ci0gICAgICAgIGVzYWMKLSAgICAgICAgOzsKLQotICAgIHN5c3Y0KnV3MiogfCBzeXN2NU9wZW5VTklYKiB8IHN5c3Y1VW5peFdhcmU3LltbMDFdXS5bWzEwXV0qIHwgdW5peHdhcmU3KiB8IHNjbzMuMnY1LjAuW1swMjRdXSopCi0gICAgICBfTFRfVEFHVkFSKG5vX3VuZGVmaW5lZF9mbGFnLCAkMSk9JyR7d2x9LXosdGV4dCcKLSAgICAgIF9MVF9UQUdWQVIoYXJjaGl2ZV9jbWRzX25lZWRfbGMsICQxKT1ubwotICAgICAgX0xUX1RBR1ZBUihoYXJkY29kZV9zaGxpYnBhdGhfdmFyLCAkMSk9bm8KLSAgICAgIHJ1bnBhdGhfdmFyPSdMRF9SVU5fUEFUSCcKLQotICAgICAgY2FzZSAkY2NfYmFzZW5hbWUgaW4KLSAgICAgICAgQ0MqKQotCSAgX0xUX1RBR1ZBUihhcmNoaXZlX2NtZHMsICQxKT0nJENDIC1HICR7d2x9LWgsJHNvbmFtZSAtbyAkbGliICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncycKLQkgIF9MVF9UQUdWQVIoYXJjaGl2ZV9leHBzeW1fY21kcywgJDEpPSckQ0MgLUcgJHt3bH0tQmV4cG9ydDokZXhwb3J0X3N5bWJvbHMgJHt3bH0taCwkc29uYW1lIC1vICRsaWIgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzJwotCSAgOzsKLQkqKQotCSAgX0xUX1RBR1ZBUihhcmNoaXZlX2NtZHMsICQxKT0nJENDIC1zaGFyZWQgJHt3bH0taCwkc29uYW1lIC1vICRsaWIgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzJwotCSAgX0xUX1RBR1ZBUihhcmNoaXZlX2V4cHN5bV9jbWRzLCAkMSk9JyRDQyAtc2hhcmVkICR7d2x9LUJleHBvcnQ6JGV4cG9ydF9zeW1ib2xzICR7d2x9LWgsJHNvbmFtZSAtbyAkbGliICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncycKLQkgIDs7Ci0gICAgICBlc2FjCi0gICAgICA7OwotCi0gICAgICBzeXN2NSogfCBzY28zLjJ2NSogfCBzY281djYqKQotCSMgTm90ZTogV2UgY2FuIE5PVCB1c2UgLXogZGVmcyBhcyB3ZSBtaWdodCBkZXNpcmUsIGJlY2F1c2Ugd2UgZG8gbm90Ci0JIyBsaW5rIHdpdGggLWxjLCBhbmQgdGhhdCB3b3VsZCBjYXVzZSBhbnkgc3ltYm9scyB1c2VkIGZyb20gbGliYyB0bwotCSMgYWx3YXlzIGJlIHVucmVzb2x2ZWQsIHdoaWNoIG1lYW5zIGp1c3QgYWJvdXQgbm8gbGlicmFyeSB3b3VsZAotCSMgZXZlciBsaW5rIGNvcnJlY3RseS4gIElmIHdlJ3JlIG5vdCB1c2luZyBHTlUgbGQgd2UgdXNlIC16IHRleHQKLQkjIHRob3VnaCwgd2hpY2ggZG9lcyBjYXRjaCBzb21lIGJhZCBzeW1ib2xzIGJ1dCBpc24ndCBhcyBoZWF2eS1oYW5kZWQKLQkjIGFzIC16IGRlZnMuCi0JX0xUX1RBR1ZBUihub191bmRlZmluZWRfZmxhZywgJDEpPScke3dsfS16LHRleHQnCi0JX0xUX1RBR1ZBUihhbGxvd191bmRlZmluZWRfZmxhZywgJDEpPScke3dsfS16LG5vZGVmcycKLQlfTFRfVEFHVkFSKGFyY2hpdmVfY21kc19uZWVkX2xjLCAkMSk9bm8KLQlfTFRfVEFHVkFSKGhhcmRjb2RlX3NobGlicGF0aF92YXIsICQxKT1ubwotCV9MVF9UQUdWQVIoaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYywgJDEpPScke3dsfS1SLCRsaWJkaXInCi0JX0xUX1RBR1ZBUihoYXJkY29kZV9saWJkaXJfc2VwYXJhdG9yLCAkMSk9JzonCi0JX0xUX1RBR1ZBUihsaW5rX2FsbF9kZXBsaWJzLCAkMSk9eWVzCi0JX0xUX1RBR1ZBUihleHBvcnRfZHluYW1pY19mbGFnX3NwZWMsICQxKT0nJHt3bH0tQmV4cG9ydCcKLQlydW5wYXRoX3Zhcj0nTERfUlVOX1BBVEgnCi0KLQljYXNlICRjY19iYXNlbmFtZSBpbgotICAgICAgICAgIENDKikKLQkgICAgX0xUX1RBR1ZBUihhcmNoaXZlX2NtZHMsICQxKT0nJENDIC1HICR7d2x9LWgsJHNvbmFtZSAtbyAkbGliICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncycKLQkgICAgX0xUX1RBR1ZBUihhcmNoaXZlX2V4cHN5bV9jbWRzLCAkMSk9JyRDQyAtRyAke3dsfS1CZXhwb3J0OiRleHBvcnRfc3ltYm9scyAke3dsfS1oLCRzb25hbWUgLW8gJGxpYiAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MnCi0JICAgIF9MVF9UQUdWQVIob2xkX2FyY2hpdmVfY21kcywgJDEpPSckQ0MgLVRwcmVsaW5rX29iamVjdHMgJG9sZG9ianN+Ci0JICAgICAgJyIkX0xUX1RBR1ZBUihvbGRfYXJjaGl2ZV9jbWRzLCAkMSkiCi0JICAgIF9MVF9UQUdWQVIocmVsb2FkX2NtZHMsICQxKT0nJENDIC1UcHJlbGlua19vYmplY3RzICRyZWxvYWRfb2Jqc34KLQkgICAgICAnIiRfTFRfVEFHVkFSKHJlbG9hZF9jbWRzLCAkMSkiCi0JICAgIDs7Ci0JICAqKQotCSAgICBfTFRfVEFHVkFSKGFyY2hpdmVfY21kcywgJDEpPSckQ0MgLXNoYXJlZCAke3dsfS1oLCRzb25hbWUgLW8gJGxpYiAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MnCi0JICAgIF9MVF9UQUdWQVIoYXJjaGl2ZV9leHBzeW1fY21kcywgJDEpPSckQ0MgLXNoYXJlZCAke3dsfS1CZXhwb3J0OiRleHBvcnRfc3ltYm9scyAke3dsfS1oLCRzb25hbWUgLW8gJGxpYiAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MnCi0JICAgIDs7Ci0JZXNhYwotICAgICAgOzsKLQotICAgICAgdGFuZGVtKikKLSAgICAgICAgY2FzZSAkY2NfYmFzZW5hbWUgaW4KLSAgICAgICAgICBOQ0MqKQotCSAgICAjIE5vblN0b3AtVVggTkNDIDMuMjAKLQkgICAgIyBGSVhNRTogaW5zZXJ0IHByb3BlciBDKysgbGlicmFyeSBzdXBwb3J0Ci0JICAgIF9MVF9UQUdWQVIobGRfc2hsaWJzLCAkMSk9bm8KLQkgICAgOzsKLSAgICAgICAgICAqKQotCSAgICAjIEZJWE1FOiBpbnNlcnQgcHJvcGVyIEMrKyBsaWJyYXJ5IHN1cHBvcnQKLQkgICAgX0xUX1RBR1ZBUihsZF9zaGxpYnMsICQxKT1ubwotCSAgICA7OwotICAgICAgICBlc2FjCi0gICAgICAgIDs7Ci0KLSAgICAgIHZ4d29ya3MqKQotICAgICAgICAjIEZJWE1FOiBpbnNlcnQgcHJvcGVyIEMrKyBsaWJyYXJ5IHN1cHBvcnQKLSAgICAgICAgX0xUX1RBR1ZBUihsZF9zaGxpYnMsICQxKT1ubwotICAgICAgICA7OwotCi0gICAgICAqKQotICAgICAgICAjIEZJWE1FOiBpbnNlcnQgcHJvcGVyIEMrKyBsaWJyYXJ5IHN1cHBvcnQKLSAgICAgICAgX0xUX1RBR1ZBUihsZF9zaGxpYnMsICQxKT1ubwotICAgICAgICA7OwotICAgIGVzYWMKLQotICAgIEFDX01TR19SRVNVTFQoWyRfTFRfVEFHVkFSKGxkX3NobGlicywgJDEpXSkKLSAgICB0ZXN0ICIkX0xUX1RBR1ZBUihsZF9zaGxpYnMsICQxKSIgPSBubyAmJiBjYW5fYnVpbGRfc2hhcmVkPW5vCi0KLSAgICBfTFRfVEFHVkFSKEdDQywgJDEpPSIkR1hYIgotICAgIF9MVF9UQUdWQVIoTEQsICQxKT0iJExEIgotCi0gICAgIyMgQ0FWRUFUIEVNUFRPUjoKLSAgICAjIyBUaGVyZSBpcyBubyBlbmNhcHN1bGF0aW9uIHdpdGhpbiB0aGUgZm9sbG93aW5nIG1hY3JvcywgZG8gbm90IGNoYW5nZQotICAgICMjIHRoZSBydW5uaW5nIG9yZGVyIG9yIG90aGVyd2lzZSBtb3ZlIHRoZW0gYXJvdW5kIHVubGVzcyB5b3Uga25vdyBleGFjdGx5Ci0gICAgIyMgd2hhdCB5b3UgYXJlIGRvaW5nLi4uCi0gICAgX0xUX1NZU19ISURERU5fTElCREVQUygkMSkKLSAgICBfTFRfQ09NUElMRVJfUElDKCQxKQotICAgIF9MVF9DT01QSUxFUl9DX08oJDEpCi0gICAgX0xUX0NPTVBJTEVSX0ZJTEVfTE9DS1MoJDEpCi0gICAgX0xUX0xJTktFUl9TSExJQlMoJDEpCi0gICAgX0xUX1NZU19EWU5BTUlDX0xJTktFUigkMSkKLSAgICBfTFRfTElOS0VSX0hBUkRDT0RFX0xJQlBBVEgoJDEpCi0KLSAgICBfTFRfQ09ORklHKCQxKQotICBmaSAjIHRlc3QgLW4gIiRjb21waWxlciIKLQotICBDQz0kbHRfc2F2ZV9DQwotICBDRkxBR1M9JGx0X3NhdmVfQ0ZMQUdTCi0gIExEQ1hYPSRMRAotICBMRD0kbHRfc2F2ZV9MRAotICBHQ0M9JGx0X3NhdmVfR0NDCi0gIHdpdGhfZ251X2xkPSRsdF9zYXZlX3dpdGhfZ251X2xkCi0gIGx0X2N2X3BhdGhfTERDWFg9JGx0X2N2X3BhdGhfTEQKLSAgbHRfY3ZfcGF0aF9MRD0kbHRfc2F2ZV9wYXRoX0xECi0gIGx0X2N2X3Byb2dfZ251X2xkY3h4PSRsdF9jdl9wcm9nX2dudV9sZAotICBsdF9jdl9wcm9nX2dudV9sZD0kbHRfc2F2ZV93aXRoX2dudV9sZAotZmkgIyB0ZXN0ICIkX2x0X2NhdWdodF9DWFhfZXJyb3IiICE9IHllcwotCi1BQ19MQU5HX1BPUAotXSkjIF9MVF9MQU5HX0NYWF9DT05GSUcKLQotCi0jIF9MVF9GVU5DX1NUUklQTkFNRV9DTkYKLSMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotIyBmdW5jX3N0cmlwbmFtZV9jbmYgcHJlZml4IHN1ZmZpeCBuYW1lCi0jIHN0cmlwIFBSRUZJWCBhbmQgU1VGRklYIG9mZiBvZiBOQU1FLgotIyBQUkVGSVggYW5kIFNVRkZJWCBtdXN0IG5vdCBjb250YWluIGdsb2JiaW5nIG9yIHJlZ2V4IHNwZWNpYWwKLSMgY2hhcmFjdGVycywgaGFzaGVzLCBwZXJjZW50IHNpZ25zLCBidXQgU1VGRklYIG1heSBjb250YWluIGEgbGVhZGluZwotIyBkb3QgKGluIHdoaWNoIGNhc2UgdGhhdCBtYXRjaGVzIG9ubHkgYSBkb3QpLgotIwotIyBUaGlzIGZ1bmN0aW9uIGlzIGlkZW50aWNhbCB0byB0aGUgKG5vbi1YU0kpIHZlcnNpb24gb2YgZnVuY19zdHJpcG5hbWUsCi0jIGV4Y2VwdCB0aGlzIG9uZSBjYW4gYmUgdXNlZCBieSBtNCBjb2RlIHRoYXQgbWF5IGJlIGV4ZWN1dGVkIGJ5IGNvbmZpZ3VyZSwKLSMgcmF0aGVyIHRoYW4gdGhlIGxpYnRvb2wgc2NyaXB0LgotbTRfZGVmdW4oW19MVF9GVU5DX1NUUklQTkFNRV9DTkZdLFtkbmwKLUFDX1JFUVVJUkUoW19MVF9ERUNMX1NFRF0pCi1BQ19SRVFVSVJFKFtfTFRfUFJPR19FQ0hPX0JBQ0tTTEFTSF0pCi1mdW5jX3N0cmlwbmFtZV9jbmYgKCkKLXsKLSAgY2FzZSAkezJ9IGluCi0gIC4qKSBmdW5jX3N0cmlwbmFtZV9yZXN1bHQ9YCRFQ0hPICIkezN9IiB8ICRTRUQgInMlXiR7MX0lJTsgcyVcXFxcJHsyfVwkJSUiYDs7Ci0gICopICBmdW5jX3N0cmlwbmFtZV9yZXN1bHQ9YCRFQ0hPICIkezN9IiB8ICRTRUQgInMlXiR7MX0lJTsgcyUkezJ9XCQlJSJgOzsKLSAgZXNhYwotfSAjIGZ1bmNfc3RyaXBuYW1lX2NuZgotXSkjIF9MVF9GVU5DX1NUUklQTkFNRV9DTkYKLQotIyBfTFRfU1lTX0hJRERFTl9MSUJERVBTKFtUQUdOQU1FXSkKLSMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0jIEZpZ3VyZSBvdXQgImhpZGRlbiIgbGlicmFyeSBkZXBlbmRlbmNpZXMgZnJvbSB2ZXJib3NlCi0jIGNvbXBpbGVyIG91dHB1dCB3aGVuIGxpbmtpbmcgYSBzaGFyZWQgbGlicmFyeS4KLSMgUGFyc2UgdGhlIGNvbXBpbGVyIG91dHB1dCBhbmQgZXh0cmFjdCB0aGUgbmVjZXNzYXJ5Ci0jIG9iamVjdHMsIGxpYnJhcmllcyBhbmQgbGlicmFyeSBmbGFncy4KLW00X2RlZnVuKFtfTFRfU1lTX0hJRERFTl9MSUJERVBTXSwKLVttNF9yZXF1aXJlKFtfTFRfRklMRVVUSUxTX0RFRkFVTFRTXSlkbmwKLUFDX1JFUVVJUkUoW19MVF9GVU5DX1NUUklQTkFNRV9DTkZdKWRubAotIyBEZXBlbmRlbmNpZXMgdG8gcGxhY2UgYmVmb3JlIGFuZCBhZnRlciB0aGUgb2JqZWN0IGJlaW5nIGxpbmtlZDoKLV9MVF9UQUdWQVIocHJlZGVwX29iamVjdHMsICQxKT0KLV9MVF9UQUdWQVIocG9zdGRlcF9vYmplY3RzLCAkMSk9Ci1fTFRfVEFHVkFSKHByZWRlcHMsICQxKT0KLV9MVF9UQUdWQVIocG9zdGRlcHMsICQxKT0KLV9MVF9UQUdWQVIoY29tcGlsZXJfbGliX3NlYXJjaF9wYXRoLCAkMSk9Ci0KLWRubCB3ZSBjYW4ndCB1c2UgdGhlIGx0X3NpbXBsZV9jb21waWxlX3Rlc3RfY29kZSBoZXJlLAotZG5sIGJlY2F1c2UgaXQgY29udGFpbnMgY29kZSBpbnRlbmRlZCBmb3IgYW4gZXhlY3V0YWJsZSwKLWRubCBub3QgYSBsaWJyYXJ5LiAgSXQncyBwb3NzaWJsZSB3ZSBzaG91bGQgbGV0IGVhY2gKLWRubCB0YWcgZGVmaW5lIGEgbmV3IGx0Xz8/Pz9fbGlua190ZXN0X2NvZGUgdmFyaWFibGUsCi1kbmwgYnV0IGl0J3Mgb25seSB1c2VkIGhlcmUuLi4KLW00X2lmKFskMV0sIFtdLCBbY2F0ID4gY29uZnRlc3QuJGFjX2V4dCA8PF9MVF9FT0YKLWludCBhOwotdm9pZCBmb28gKHZvaWQpIHsgYSA9IDA7IH0KLV9MVF9FT0YKLV0sIFskMV0sIFtDWFhdLCBbY2F0ID4gY29uZnRlc3QuJGFjX2V4dCA8PF9MVF9FT0YKLWNsYXNzIEZvbwotewotcHVibGljOgotICBGb28gKHZvaWQpIHsgYSA9IDA7IH0KLXByaXZhdGU6Ci0gIGludCBhOwotfTsKLV9MVF9FT0YKLV0sIFskMV0sIFtGNzddLCBbY2F0ID4gY29uZnRlc3QuJGFjX2V4dCA8PF9MVF9FT0YKLSAgICAgIHN1YnJvdXRpbmUgZm9vCi0gICAgICBpbXBsaWNpdCBub25lCi0gICAgICBpbnRlZ2VyKjQgYQotICAgICAgYT0wCi0gICAgICByZXR1cm4KLSAgICAgIGVuZAotX0xUX0VPRgotXSwgWyQxXSwgW0ZDXSwgW2NhdCA+IGNvbmZ0ZXN0LiRhY19leHQgPDxfTFRfRU9GCi0gICAgICBzdWJyb3V0aW5lIGZvbwotICAgICAgaW1wbGljaXQgbm9uZQotICAgICAgaW50ZWdlciBhCi0gICAgICBhPTAKLSAgICAgIHJldHVybgotICAgICAgZW5kCi1fTFRfRU9GCi1dLCBbJDFdLCBbR0NKXSwgW2NhdCA+IGNvbmZ0ZXN0LiRhY19leHQgPDxfTFRfRU9GCi1wdWJsaWMgY2xhc3MgZm9vIHsKLSAgcHJpdmF0ZSBpbnQgYTsKLSAgcHVibGljIHZvaWQgYmFyICh2b2lkKSB7Ci0gICAgYSA9IDA7Ci0gIH0KLX07Ci1fTFRfRU9GCi1dKQotCi1fbHRfbGliZGVwc19zYXZlX0NGTEFHUz0kQ0ZMQUdTCi1jYXNlICIkQ0MgJENGTEFHUyAiIGluICMoCi0qXCAtZmx0bypcICopIENGTEFHUz0iJENGTEFHUyAtZm5vLWx0byIgOzsKLSpcIC1md2hvcHIqXCAqKSBDRkxBR1M9IiRDRkxBR1MgLWZuby13aG9wciIgOzsKLWVzYWMKLQotZG5sIFBhcnNlIHRoZSBjb21waWxlciBvdXRwdXQgYW5kIGV4dHJhY3QgdGhlIG5lY2Vzc2FyeQotZG5sIG9iamVjdHMsIGxpYnJhcmllcyBhbmQgbGlicmFyeSBmbGFncy4KLWlmIEFDX1RSWV9FVkFMKGFjX2NvbXBpbGUpOyB0aGVuCi0gICMgUGFyc2UgdGhlIGNvbXBpbGVyIG91dHB1dCBhbmQgZXh0cmFjdCB0aGUgbmVjZXNzYXJ5Ci0gICMgb2JqZWN0cywgbGlicmFyaWVzIGFuZCBsaWJyYXJ5IGZsYWdzLgotCi0gICMgU2VudGluZWwgdXNlZCB0byBrZWVwIHRyYWNrIG9mIHdoZXRoZXIgb3Igbm90IHdlIGFyZSBiZWZvcmUKLSAgIyB0aGUgY29uZnRlc3Qgb2JqZWN0IGZpbGUuCi0gIHByZV90ZXN0X29iamVjdF9kZXBzX2RvbmU9bm8KLQotICBmb3IgcCBpbiBgZXZhbCAiJG91dHB1dF92ZXJib3NlX2xpbmtfY21kImA7IGRvCi0gICAgY2FzZSAke3ByZXZ9JHtwfSBpbgotCi0gICAgLUwqIHwgLVIqIHwgLWwqKQotICAgICAgICMgU29tZSBjb21waWxlcnMgcGxhY2Ugc3BhY2UgYmV0d2VlbiAiLXtMLFJ9IiBhbmQgdGhlIHBhdGguCi0gICAgICAgIyBSZW1vdmUgdGhlIHNwYWNlLgotICAgICAgIGlmIHRlc3QgJHAgPSAiLUwiIHx8Ci0gICAgICAgICAgdGVzdCAkcCA9ICItUiI7IHRoZW4KLQkgcHJldj0kcAotCSBjb250aW51ZQotICAgICAgIGZpCi0KLSAgICAgICAjIEV4cGFuZCB0aGUgc3lzcm9vdCB0byBlYXNlIGV4dHJhY3RpbmcgdGhlIGRpcmVjdG9yaWVzIGxhdGVyLgotICAgICAgIGlmIHRlc3QgLXogIiRwcmV2IjsgdGhlbgotICAgICAgICAgY2FzZSAkcCBpbgotICAgICAgICAgLUwqKSBmdW5jX3N0cmlwbmFtZV9jbmYgJy1MJyAnJyAiJHAiOyBwcmV2PS1MOyBwPSRmdW5jX3N0cmlwbmFtZV9yZXN1bHQgOzsKLSAgICAgICAgIC1SKikgZnVuY19zdHJpcG5hbWVfY25mICctUicgJycgIiRwIjsgcHJldj0tUjsgcD0kZnVuY19zdHJpcG5hbWVfcmVzdWx0IDs7Ci0gICAgICAgICAtbCopIGZ1bmNfc3RyaXBuYW1lX2NuZiAnLWwnICcnICIkcCI7IHByZXY9LWw7IHA9JGZ1bmNfc3RyaXBuYW1lX3Jlc3VsdCA7OwotICAgICAgICAgZXNhYwotICAgICAgIGZpCi0gICAgICAgY2FzZSAkcCBpbgotICAgICAgID0qKSBmdW5jX3N0cmlwbmFtZV9jbmYgJz0nICcnICIkcCI7IHA9JGx0X3N5c3Jvb3QkZnVuY19zdHJpcG5hbWVfcmVzdWx0IDs7Ci0gICAgICAgZXNhYwotICAgICAgIGlmIHRlc3QgIiRwcmVfdGVzdF9vYmplY3RfZGVwc19kb25lIiA9IG5vOyB0aGVuCi0JIGNhc2UgJHtwcmV2fSBpbgotCSAtTCB8IC1SKQotCSAgICMgSW50ZXJuYWwgY29tcGlsZXIgbGlicmFyeSBwYXRocyBzaG91bGQgY29tZSBhZnRlciB0aG9zZQotCSAgICMgcHJvdmlkZWQgdGhlIHVzZXIuICBUaGUgcG9zdGRlcHMgYWxyZWFkeSBjb21lIGFmdGVyIHRoZQotCSAgICMgdXNlciBzdXBwbGllZCBsaWJzIHNvIHRoZXJlIGlzIG5vIG5lZWQgdG8gcHJvY2VzcyB0aGVtLgotCSAgIGlmIHRlc3QgLXogIiRfTFRfVEFHVkFSKGNvbXBpbGVyX2xpYl9zZWFyY2hfcGF0aCwgJDEpIjsgdGhlbgotCSAgICAgX0xUX1RBR1ZBUihjb21waWxlcl9saWJfc2VhcmNoX3BhdGgsICQxKT0iJHtwcmV2fSR7cH0iCi0JICAgZWxzZQotCSAgICAgX0xUX1RBR1ZBUihjb21waWxlcl9saWJfc2VhcmNoX3BhdGgsICQxKT0iJHtfTFRfVEFHVkFSKGNvbXBpbGVyX2xpYl9zZWFyY2hfcGF0aCwgJDEpfSAke3ByZXZ9JHtwfSIKLQkgICBmaQotCSAgIDs7Ci0JICMgVGhlICItbCIgY2FzZSB3b3VsZCBuZXZlciBjb21lIGJlZm9yZSB0aGUgb2JqZWN0IGJlaW5nCi0JICMgbGlua2VkLCBzbyBkb24ndCBib3RoZXIgaGFuZGxpbmcgdGhpcyBjYXNlLgotCSBlc2FjCi0gICAgICAgZWxzZQotCSBpZiB0ZXN0IC16ICIkX0xUX1RBR1ZBUihwb3N0ZGVwcywgJDEpIjsgdGhlbgotCSAgIF9MVF9UQUdWQVIocG9zdGRlcHMsICQxKT0iJHtwcmV2fSR7cH0iCi0JIGVsc2UKLQkgICBfTFRfVEFHVkFSKHBvc3RkZXBzLCAkMSk9IiR7X0xUX1RBR1ZBUihwb3N0ZGVwcywgJDEpfSAke3ByZXZ9JHtwfSIKLQkgZmkKLSAgICAgICBmaQotICAgICAgIHByZXY9Ci0gICAgICAgOzsKLQotICAgICoubHRvLiRvYmpleHQpIDs7ICMgSWdub3JlIEdDQyBMVE8gb2JqZWN0cwotICAgICouJG9iamV4dCkKLSAgICAgICAjIFRoaXMgYXNzdW1lcyB0aGF0IHRoZSB0ZXN0IG9iamVjdCBmaWxlIG9ubHkgc2hvd3MgdXAKLSAgICAgICAjIG9uY2UgaW4gdGhlIGNvbXBpbGVyIG91dHB1dC4KLSAgICAgICBpZiB0ZXN0ICIkcCIgPSAiY29uZnRlc3QuJG9iamV4dCI7IHRoZW4KLQkgcHJlX3Rlc3Rfb2JqZWN0X2RlcHNfZG9uZT15ZXMKLQkgY29udGludWUKLSAgICAgICBmaQotCi0gICAgICAgaWYgdGVzdCAiJHByZV90ZXN0X29iamVjdF9kZXBzX2RvbmUiID0gbm87IHRoZW4KLQkgaWYgdGVzdCAteiAiJF9MVF9UQUdWQVIocHJlZGVwX29iamVjdHMsICQxKSI7IHRoZW4KLQkgICBfTFRfVEFHVkFSKHByZWRlcF9vYmplY3RzLCAkMSk9IiRwIgotCSBlbHNlCi0JICAgX0xUX1RBR1ZBUihwcmVkZXBfb2JqZWN0cywgJDEpPSIkX0xUX1RBR1ZBUihwcmVkZXBfb2JqZWN0cywgJDEpICRwIgotCSBmaQotICAgICAgIGVsc2UKLQkgaWYgdGVzdCAteiAiJF9MVF9UQUdWQVIocG9zdGRlcF9vYmplY3RzLCAkMSkiOyB0aGVuCi0JICAgX0xUX1RBR1ZBUihwb3N0ZGVwX29iamVjdHMsICQxKT0iJHAiCi0JIGVsc2UKLQkgICBfTFRfVEFHVkFSKHBvc3RkZXBfb2JqZWN0cywgJDEpPSIkX0xUX1RBR1ZBUihwb3N0ZGVwX29iamVjdHMsICQxKSAkcCIKLQkgZmkKLSAgICAgICBmaQotICAgICAgIDs7Ci0KLSAgICAqKSA7OyAjIElnbm9yZSB0aGUgcmVzdC4KLQotICAgIGVzYWMKLSAgZG9uZQotCi0gICMgQ2xlYW4gdXAuCi0gIHJtIC1mIGEub3V0IGEuZXhlCi1lbHNlCi0gIGVjaG8gImxpYnRvb2wubTQ6IGVycm9yOiBwcm9ibGVtIGNvbXBpbGluZyAkMSB0ZXN0IHByb2dyYW0iCi1maQotCi0kUk0gLWYgY29uZmVzdC4kb2JqZXh0Ci1DRkxBR1M9JF9sdF9saWJkZXBzX3NhdmVfQ0ZMQUdTCi0KLSMgUE9SVE1FOiBvdmVycmlkZSBhYm92ZSB0ZXN0IG9uIHN5c3RlbXMgd2hlcmUgaXQgaXMgYnJva2VuCi1tNF9pZihbJDFdLCBbQ1hYXSwKLVtjYXNlICRob3N0X29zIGluCi1pbnRlcml4W1szLTldXSopCi0gICMgSW50ZXJpeCAzLjUgaW5zdGFsbHMgY29tcGxldGVseSBob3NlZCAubGEgZmlsZXMgZm9yIEMrKywgc28gcmF0aGVyIHRoYW4KLSAgIyBoYWNrIGFsbCBhcm91bmQgaXQsIGxldCdzIGp1c3QgdHJ1c3QgImcrKyIgdG8gRFRSVC4KLSAgX0xUX1RBR1ZBUihwcmVkZXBfb2JqZWN0cywkMSk9Ci0gIF9MVF9UQUdWQVIocG9zdGRlcF9vYmplY3RzLCQxKT0KLSAgX0xUX1RBR1ZBUihwb3N0ZGVwcywkMSk9Ci0gIDs7Ci0KLWxpbnV4KikKLSAgY2FzZSBgJENDIC1WIDI+JjEgfCBzZWQgNXFgIGluCi0gICpTdW5cIEMqKQotICAgICMgU3VuIEMrKyA1LjkKLQotICAgICMgVGhlIG1vcmUgc3RhbmRhcmRzLWNvbmZvcm1pbmcgc3RscG9ydDQgbGlicmFyeSBpcwotICAgICMgaW5jb21wYXRpYmxlIHdpdGggdGhlIENzdGQgbGlicmFyeS4gQXZvaWQgc3BlY2lmeWluZwotICAgICMgaXQgaWYgaXQncyBpbiBDWFhGTEFHUy4gSWdub3JlIGxpYkNydW4gYXMKLSAgICAjIC1saWJyYXJ5PXN0bHBvcnQ0IGRlcGVuZHMgb24gaXQuCi0gICAgY2FzZSAiICRDWFggJENYWEZMQUdTICIgaW4KLSAgICAqIiAtbGlicmFyeT1zdGxwb3J0NCAiKikKLSAgICAgIHNvbGFyaXNfdXNlX3N0bHBvcnQ0PXllcwotICAgICAgOzsKLSAgICBlc2FjCi0KLSAgICBpZiB0ZXN0ICIkc29sYXJpc191c2Vfc3RscG9ydDQiICE9IHllczsgdGhlbgotICAgICAgX0xUX1RBR1ZBUihwb3N0ZGVwcywkMSk9Jy1saWJyYXJ5PUNzdGQgLWxpYnJhcnk9Q3J1bicKLSAgICBmaQotICAgIDs7Ci0gIGVzYWMKLSAgOzsKLQotc29sYXJpcyopCi0gIGNhc2UgJGNjX2Jhc2VuYW1lIGluCi0gIENDKiB8IHN1bkNDKikKLSAgICAjIFRoZSBtb3JlIHN0YW5kYXJkcy1jb25mb3JtaW5nIHN0bHBvcnQ0IGxpYnJhcnkgaXMKLSAgICAjIGluY29tcGF0aWJsZSB3aXRoIHRoZSBDc3RkIGxpYnJhcnkuIEF2b2lkIHNwZWNpZnlpbmcKLSAgICAjIGl0IGlmIGl0J3MgaW4gQ1hYRkxBR1MuIElnbm9yZSBsaWJDcnVuIGFzCi0gICAgIyAtbGlicmFyeT1zdGxwb3J0NCBkZXBlbmRzIG9uIGl0LgotICAgIGNhc2UgIiAkQ1hYICRDWFhGTEFHUyAiIGluCi0gICAgKiIgLWxpYnJhcnk9c3RscG9ydDQgIiopCi0gICAgICBzb2xhcmlzX3VzZV9zdGxwb3J0ND15ZXMKLSAgICAgIDs7Ci0gICAgZXNhYwotCi0gICAgIyBBZGRpbmcgdGhpcyByZXF1aXJlcyBhIGtub3duLWdvb2Qgc2V0dXAgb2Ygc2hhcmVkIGxpYnJhcmllcyBmb3IKLSAgICAjIFN1biBjb21waWxlciB2ZXJzaW9ucyBiZWZvcmUgNS42LCBlbHNlIFBJQyBvYmplY3RzIGZyb20gYW4gb2xkCi0gICAgIyBhcmNoaXZlIHdpbGwgYmUgbGlua2VkIGludG8gdGhlIG91dHB1dCwgbGVhZGluZyB0byBzdWJ0bGUgYnVncy4KLSAgICBpZiB0ZXN0ICIkc29sYXJpc191c2Vfc3RscG9ydDQiICE9IHllczsgdGhlbgotICAgICAgX0xUX1RBR1ZBUihwb3N0ZGVwcywkMSk9Jy1saWJyYXJ5PUNzdGQgLWxpYnJhcnk9Q3J1bicKLSAgICBmaQotICAgIDs7Ci0gIGVzYWMKLSAgOzsKLWVzYWMKLV0pCi0KLWNhc2UgIiAkX0xUX1RBR1ZBUihwb3N0ZGVwcywgJDEpICIgaW4KLSoiIC1sYyAiKikgX0xUX1RBR1ZBUihhcmNoaXZlX2NtZHNfbmVlZF9sYywgJDEpPW5vIDs7Ci1lc2FjCi0gX0xUX1RBR1ZBUihjb21waWxlcl9saWJfc2VhcmNoX2RpcnMsICQxKT0KLWlmIHRlc3QgLW4gIiR7X0xUX1RBR1ZBUihjb21waWxlcl9saWJfc2VhcmNoX3BhdGgsICQxKX0iOyB0aGVuCi0gX0xUX1RBR1ZBUihjb21waWxlcl9saWJfc2VhcmNoX2RpcnMsICQxKT1gZWNobyAiICR7X0xUX1RBR1ZBUihjb21waWxlcl9saWJfc2VhcmNoX3BhdGgsICQxKX0iIHwgJHtTRUR9IC1lICdzISAtTCEgIWcnIC1lICdzIV4gISEnYAotZmkKLV9MVF9UQUdERUNMKFtdLCBbY29tcGlsZXJfbGliX3NlYXJjaF9kaXJzXSwgWzFdLAotICAgIFtUaGUgZGlyZWN0b3JpZXMgc2VhcmNoZWQgYnkgdGhpcyBjb21waWxlciB3aGVuIGNyZWF0aW5nIGEgc2hhcmVkIGxpYnJhcnldKQotX0xUX1RBR0RFQ0woW10sIFtwcmVkZXBfb2JqZWN0c10sIFsxXSwKLSAgICBbRGVwZW5kZW5jaWVzIHRvIHBsYWNlIGJlZm9yZSBhbmQgYWZ0ZXIgdGhlIG9iamVjdHMgYmVpbmcgbGlua2VkIHRvCi0gICAgY3JlYXRlIGEgc2hhcmVkIGxpYnJhcnldKQotX0xUX1RBR0RFQ0woW10sIFtwb3N0ZGVwX29iamVjdHNdLCBbMV0pCi1fTFRfVEFHREVDTChbXSwgW3ByZWRlcHNdLCBbMV0pCi1fTFRfVEFHREVDTChbXSwgW3Bvc3RkZXBzXSwgWzFdKQotX0xUX1RBR0RFQ0woW10sIFtjb21waWxlcl9saWJfc2VhcmNoX3BhdGhdLCBbMV0sCi0gICAgW1RoZSBsaWJyYXJ5IHNlYXJjaCBwYXRoIHVzZWQgaW50ZXJuYWxseSBieSB0aGUgY29tcGlsZXIgd2hlbiBsaW5raW5nCi0gICAgYSBzaGFyZWQgbGlicmFyeV0pCi1dKSMgX0xUX1NZU19ISURERU5fTElCREVQUwotCi0KLSMgX0xUX0xBTkdfRjc3X0NPTkZJRyhbVEFHXSkKLSMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSMgRW5zdXJlIHRoYXQgdGhlIGNvbmZpZ3VyYXRpb24gdmFyaWFibGVzIGZvciBhIEZvcnRyYW4gNzcgY29tcGlsZXIgYXJlCi0jIHN1aXRhYmx5IGRlZmluZWQuICBUaGVzZSB2YXJpYWJsZXMgYXJlIHN1YnNlcXVlbnRseSB1c2VkIGJ5IF9MVF9DT05GSUcKLSMgdG8gd3JpdGUgdGhlIGNvbXBpbGVyIGNvbmZpZ3VyYXRpb24gdG8gYGxpYnRvb2wnLgotbTRfZGVmdW4oW19MVF9MQU5HX0Y3N19DT05GSUddLAotW0FDX0xBTkdfUFVTSChGb3J0cmFuIDc3KQotaWYgdGVzdCAteiAiJEY3NyIgfHwgdGVzdCAiWCRGNzciID0gIlhubyI7IHRoZW4KLSAgX2x0X2Rpc2FibGVfRjc3PXllcwotZmkKLQotX0xUX1RBR1ZBUihhcmNoaXZlX2NtZHNfbmVlZF9sYywgJDEpPW5vCi1fTFRfVEFHVkFSKGFsbG93X3VuZGVmaW5lZF9mbGFnLCAkMSk9Ci1fTFRfVEFHVkFSKGFsd2F5c19leHBvcnRfc3ltYm9scywgJDEpPW5vCi1fTFRfVEFHVkFSKGFyY2hpdmVfZXhwc3ltX2NtZHMsICQxKT0KLV9MVF9UQUdWQVIoZXhwb3J0X2R5bmFtaWNfZmxhZ19zcGVjLCAkMSk9Ci1fTFRfVEFHVkFSKGhhcmRjb2RlX2RpcmVjdCwgJDEpPW5vCi1fTFRfVEFHVkFSKGhhcmRjb2RlX2RpcmVjdF9hYnNvbHV0ZSwgJDEpPW5vCi1fTFRfVEFHVkFSKGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWMsICQxKT0KLV9MVF9UQUdWQVIoaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlY19sZCwgJDEpPQotX0xUX1RBR1ZBUihoYXJkY29kZV9saWJkaXJfc2VwYXJhdG9yLCAkMSk9Ci1fTFRfVEFHVkFSKGhhcmRjb2RlX21pbnVzX0wsICQxKT1ubwotX0xUX1RBR1ZBUihoYXJkY29kZV9hdXRvbWF0aWMsICQxKT1ubwotX0xUX1RBR1ZBUihpbmhlcml0X3JwYXRoLCAkMSk9bm8KLV9MVF9UQUdWQVIobW9kdWxlX2NtZHMsICQxKT0KLV9MVF9UQUdWQVIobW9kdWxlX2V4cHN5bV9jbWRzLCAkMSk9Ci1fTFRfVEFHVkFSKGxpbmtfYWxsX2RlcGxpYnMsICQxKT11bmtub3duCi1fTFRfVEFHVkFSKG9sZF9hcmNoaXZlX2NtZHMsICQxKT0kb2xkX2FyY2hpdmVfY21kcwotX0xUX1RBR1ZBUihyZWxvYWRfZmxhZywgJDEpPSRyZWxvYWRfZmxhZwotX0xUX1RBR1ZBUihyZWxvYWRfY21kcywgJDEpPSRyZWxvYWRfY21kcwotX0xUX1RBR1ZBUihub191bmRlZmluZWRfZmxhZywgJDEpPQotX0xUX1RBR1ZBUih3aG9sZV9hcmNoaXZlX2ZsYWdfc3BlYywgJDEpPQotX0xUX1RBR1ZBUihlbmFibGVfc2hhcmVkX3dpdGhfc3RhdGljX3J1bnRpbWVzLCAkMSk9bm8KLQotIyBTb3VyY2UgZmlsZSBleHRlbnNpb24gZm9yIGY3NyB0ZXN0IHNvdXJjZXMuCi1hY19leHQ9ZgotCi0jIE9iamVjdCBmaWxlIGV4dGVuc2lvbiBmb3IgY29tcGlsZWQgZjc3IHRlc3Qgc291cmNlcy4KLW9iamV4dD1vCi1fTFRfVEFHVkFSKG9iamV4dCwgJDEpPSRvYmpleHQKLQotIyBObyBzZW5zZSBpbiBydW5uaW5nIGFsbCB0aGVzZSB0ZXN0cyBpZiB3ZSBhbHJlYWR5IGRldGVybWluZWQgdGhhdAotIyB0aGUgRjc3IGNvbXBpbGVyIGlzbid0IHdvcmtpbmcuICBTb21lIHZhcmlhYmxlcyAobGlrZSBlbmFibGVfc2hhcmVkKQotIyBhcmUgY3VycmVudGx5IGFzc3VtZWQgdG8gYXBwbHkgdG8gYWxsIGNvbXBpbGVycyBvbiB0aGlzIHBsYXRmb3JtLAotIyBhbmQgd2lsbCBiZSBjb3JydXB0ZWQgYnkgc2V0dGluZyB0aGVtIGJhc2VkIG9uIGEgbm9uLXdvcmtpbmcgY29tcGlsZXIuCi1pZiB0ZXN0ICIkX2x0X2Rpc2FibGVfRjc3IiAhPSB5ZXM7IHRoZW4KLSAgIyBDb2RlIHRvIGJlIHVzZWQgaW4gc2ltcGxlIGNvbXBpbGUgdGVzdHMKLSAgbHRfc2ltcGxlX2NvbXBpbGVfdGVzdF9jb2RlPSJcCi0gICAgICBzdWJyb3V0aW5lIHQKLSAgICAgIHJldHVybgotICAgICAgZW5kCi0iCi0KLSAgIyBDb2RlIHRvIGJlIHVzZWQgaW4gc2ltcGxlIGxpbmsgdGVzdHMKLSAgbHRfc2ltcGxlX2xpbmtfdGVzdF9jb2RlPSJcCi0gICAgICBwcm9ncmFtIHQKLSAgICAgIGVuZAotIgotCi0gICMgbHRtYWluIG9ubHkgdXNlcyAkQ0MgZm9yIHRhZ2dlZCBjb25maWd1cmF0aW9ucyBzbyBtYWtlIHN1cmUgJENDIGlzIHNldC4KLSAgX0xUX1RBR19DT01QSUxFUgotCi0gICMgc2F2ZSB3YXJuaW5ncy9ib2lsZXJwbGF0ZSBvZiBzaW1wbGUgdGVzdCBjb2RlCi0gIF9MVF9DT01QSUxFUl9CT0lMRVJQTEFURQotICBfTFRfTElOS0VSX0JPSUxFUlBMQVRFCi0KLSAgIyBBbGxvdyBDQyB0byBiZSBhIHByb2dyYW0gbmFtZSB3aXRoIGFyZ3VtZW50cy4KLSAgbHRfc2F2ZV9DQz0iJENDIgotICBsdF9zYXZlX0dDQz0kR0NDCi0gIGx0X3NhdmVfQ0ZMQUdTPSRDRkxBR1MKLSAgQ0M9JHtGNzctImY3NyJ9Ci0gIENGTEFHUz0kRkZMQUdTCi0gIGNvbXBpbGVyPSRDQwotICBfTFRfVEFHVkFSKGNvbXBpbGVyLCAkMSk9JENDCi0gIF9MVF9DQ19CQVNFTkFNRShbJGNvbXBpbGVyXSkKLSAgR0NDPSRHNzcKLSAgaWYgdGVzdCAtbiAiJGNvbXBpbGVyIjsgdGhlbgotICAgIEFDX01TR19DSEVDS0lORyhbaWYgbGlidG9vbCBzdXBwb3J0cyBzaGFyZWQgbGlicmFyaWVzXSkKLSAgICBBQ19NU0dfUkVTVUxUKFskY2FuX2J1aWxkX3NoYXJlZF0pCi0KLSAgICBBQ19NU0dfQ0hFQ0tJTkcoW3doZXRoZXIgdG8gYnVpbGQgc2hhcmVkIGxpYnJhcmllc10pCi0gICAgdGVzdCAiJGNhbl9idWlsZF9zaGFyZWQiID0gIm5vIiAmJiBlbmFibGVfc2hhcmVkPW5vCi0KLSAgICAjIE9uIEFJWCwgc2hhcmVkIGxpYnJhcmllcyBhbmQgc3RhdGljIGxpYnJhcmllcyB1c2UgdGhlIHNhbWUgbmFtZXNwYWNlLCBhbmQKLSAgICAjIGFyZSBhbGwgYnVpbHQgZnJvbSBQSUMuCi0gICAgY2FzZSAkaG9zdF9vcyBpbgotICAgICAgYWl4MyopCi0gICAgICAgIHRlc3QgIiRlbmFibGVfc2hhcmVkIiA9IHllcyAmJiBlbmFibGVfc3RhdGljPW5vCi0gICAgICAgIGlmIHRlc3QgLW4gIiRSQU5MSUIiOyB0aGVuCi0gICAgICAgICAgYXJjaGl2ZV9jbWRzPSIkYXJjaGl2ZV9jbWRzflwkUkFOTElCIFwkbGliIgotICAgICAgICAgIHBvc3RpbnN0YWxsX2NtZHM9JyRSQU5MSUIgJGxpYicKLSAgICAgICAgZmkKLSAgICAgICAgOzsKLSAgICAgIGFpeFtbNC05XV0qKQotCWlmIHRlc3QgIiRob3N0X2NwdSIgIT0gaWE2NCAmJiB0ZXN0ICIkYWl4X3VzZV9ydW50aW1lbGlua2luZyIgPSBubyA7IHRoZW4KLQkgIHRlc3QgIiRlbmFibGVfc2hhcmVkIiA9IHllcyAmJiBlbmFibGVfc3RhdGljPW5vCi0JZmkKLSAgICAgICAgOzsKLSAgICBlc2FjCi0gICAgQUNfTVNHX1JFU1VMVChbJGVuYWJsZV9zaGFyZWRdKQotCi0gICAgQUNfTVNHX0NIRUNLSU5HKFt3aGV0aGVyIHRvIGJ1aWxkIHN0YXRpYyBsaWJyYXJpZXNdKQotICAgICMgTWFrZSBzdXJlIGVpdGhlciBlbmFibGVfc2hhcmVkIG9yIGVuYWJsZV9zdGF0aWMgaXMgeWVzLgotICAgIHRlc3QgIiRlbmFibGVfc2hhcmVkIiA9IHllcyB8fCBlbmFibGVfc3RhdGljPXllcwotICAgIEFDX01TR19SRVNVTFQoWyRlbmFibGVfc3RhdGljXSkKLQotICAgIF9MVF9UQUdWQVIoR0NDLCAkMSk9IiRHNzciCi0gICAgX0xUX1RBR1ZBUihMRCwgJDEpPSIkTEQiCi0KLSAgICAjIyBDQVZFQVQgRU1QVE9SOgotICAgICMjIFRoZXJlIGlzIG5vIGVuY2Fwc3VsYXRpb24gd2l0aGluIHRoZSBmb2xsb3dpbmcgbWFjcm9zLCBkbyBub3QgY2hhbmdlCi0gICAgIyMgdGhlIHJ1bm5pbmcgb3JkZXIgb3Igb3RoZXJ3aXNlIG1vdmUgdGhlbSBhcm91bmQgdW5sZXNzIHlvdSBrbm93IGV4YWN0bHkKLSAgICAjIyB3aGF0IHlvdSBhcmUgZG9pbmcuLi4KLSAgICBfTFRfQ09NUElMRVJfUElDKCQxKQotICAgIF9MVF9DT01QSUxFUl9DX08oJDEpCi0gICAgX0xUX0NPTVBJTEVSX0ZJTEVfTE9DS1MoJDEpCi0gICAgX0xUX0xJTktFUl9TSExJQlMoJDEpCi0gICAgX0xUX1NZU19EWU5BTUlDX0xJTktFUigkMSkKLSAgICBfTFRfTElOS0VSX0hBUkRDT0RFX0xJQlBBVEgoJDEpCi0KLSAgICBfTFRfQ09ORklHKCQxKQotICBmaSAjIHRlc3QgLW4gIiRjb21waWxlciIKLQotICBHQ0M9JGx0X3NhdmVfR0NDCi0gIENDPSIkbHRfc2F2ZV9DQyIKLSAgQ0ZMQUdTPSIkbHRfc2F2ZV9DRkxBR1MiCi1maSAjIHRlc3QgIiRfbHRfZGlzYWJsZV9GNzciICE9IHllcwotCi1BQ19MQU5HX1BPUAotXSkjIF9MVF9MQU5HX0Y3N19DT05GSUcKLQotCi0jIF9MVF9MQU5HX0ZDX0NPTkZJRyhbVEFHXSkKLSMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotIyBFbnN1cmUgdGhhdCB0aGUgY29uZmlndXJhdGlvbiB2YXJpYWJsZXMgZm9yIGEgRm9ydHJhbiBjb21waWxlciBhcmUKLSMgc3VpdGFibHkgZGVmaW5lZC4gIFRoZXNlIHZhcmlhYmxlcyBhcmUgc3Vic2VxdWVudGx5IHVzZWQgYnkgX0xUX0NPTkZJRwotIyB0byB3cml0ZSB0aGUgY29tcGlsZXIgY29uZmlndXJhdGlvbiB0byBgbGlidG9vbCcuCi1tNF9kZWZ1bihbX0xUX0xBTkdfRkNfQ09ORklHXSwKLVtBQ19MQU5HX1BVU0goRm9ydHJhbikKLQotaWYgdGVzdCAteiAiJEZDIiB8fCB0ZXN0ICJYJEZDIiA9ICJYbm8iOyB0aGVuCi0gIF9sdF9kaXNhYmxlX0ZDPXllcwotZmkKLQotX0xUX1RBR1ZBUihhcmNoaXZlX2NtZHNfbmVlZF9sYywgJDEpPW5vCi1fTFRfVEFHVkFSKGFsbG93X3VuZGVmaW5lZF9mbGFnLCAkMSk9Ci1fTFRfVEFHVkFSKGFsd2F5c19leHBvcnRfc3ltYm9scywgJDEpPW5vCi1fTFRfVEFHVkFSKGFyY2hpdmVfZXhwc3ltX2NtZHMsICQxKT0KLV9MVF9UQUdWQVIoZXhwb3J0X2R5bmFtaWNfZmxhZ19zcGVjLCAkMSk9Ci1fTFRfVEFHVkFSKGhhcmRjb2RlX2RpcmVjdCwgJDEpPW5vCi1fTFRfVEFHVkFSKGhhcmRjb2RlX2RpcmVjdF9hYnNvbHV0ZSwgJDEpPW5vCi1fTFRfVEFHVkFSKGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWMsICQxKT0KLV9MVF9UQUdWQVIoaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlY19sZCwgJDEpPQotX0xUX1RBR1ZBUihoYXJkY29kZV9saWJkaXJfc2VwYXJhdG9yLCAkMSk9Ci1fTFRfVEFHVkFSKGhhcmRjb2RlX21pbnVzX0wsICQxKT1ubwotX0xUX1RBR1ZBUihoYXJkY29kZV9hdXRvbWF0aWMsICQxKT1ubwotX0xUX1RBR1ZBUihpbmhlcml0X3JwYXRoLCAkMSk9bm8KLV9MVF9UQUdWQVIobW9kdWxlX2NtZHMsICQxKT0KLV9MVF9UQUdWQVIobW9kdWxlX2V4cHN5bV9jbWRzLCAkMSk9Ci1fTFRfVEFHVkFSKGxpbmtfYWxsX2RlcGxpYnMsICQxKT11bmtub3duCi1fTFRfVEFHVkFSKG9sZF9hcmNoaXZlX2NtZHMsICQxKT0kb2xkX2FyY2hpdmVfY21kcwotX0xUX1RBR1ZBUihyZWxvYWRfZmxhZywgJDEpPSRyZWxvYWRfZmxhZwotX0xUX1RBR1ZBUihyZWxvYWRfY21kcywgJDEpPSRyZWxvYWRfY21kcwotX0xUX1RBR1ZBUihub191bmRlZmluZWRfZmxhZywgJDEpPQotX0xUX1RBR1ZBUih3aG9sZV9hcmNoaXZlX2ZsYWdfc3BlYywgJDEpPQotX0xUX1RBR1ZBUihlbmFibGVfc2hhcmVkX3dpdGhfc3RhdGljX3J1bnRpbWVzLCAkMSk9bm8KLQotIyBTb3VyY2UgZmlsZSBleHRlbnNpb24gZm9yIGZjIHRlc3Qgc291cmNlcy4KLWFjX2V4dD0ke2FjX2ZjX3NyY2V4dC1mfQotCi0jIE9iamVjdCBmaWxlIGV4dGVuc2lvbiBmb3IgY29tcGlsZWQgZmMgdGVzdCBzb3VyY2VzLgotb2JqZXh0PW8KLV9MVF9UQUdWQVIob2JqZXh0LCAkMSk9JG9iamV4dAotCi0jIE5vIHNlbnNlIGluIHJ1bm5pbmcgYWxsIHRoZXNlIHRlc3RzIGlmIHdlIGFscmVhZHkgZGV0ZXJtaW5lZCB0aGF0Ci0jIHRoZSBGQyBjb21waWxlciBpc24ndCB3b3JraW5nLiAgU29tZSB2YXJpYWJsZXMgKGxpa2UgZW5hYmxlX3NoYXJlZCkKLSMgYXJlIGN1cnJlbnRseSBhc3N1bWVkIHRvIGFwcGx5IHRvIGFsbCBjb21waWxlcnMgb24gdGhpcyBwbGF0Zm9ybSwKLSMgYW5kIHdpbGwgYmUgY29ycnVwdGVkIGJ5IHNldHRpbmcgdGhlbSBiYXNlZCBvbiBhIG5vbi13b3JraW5nIGNvbXBpbGVyLgotaWYgdGVzdCAiJF9sdF9kaXNhYmxlX0ZDIiAhPSB5ZXM7IHRoZW4KLSAgIyBDb2RlIHRvIGJlIHVzZWQgaW4gc2ltcGxlIGNvbXBpbGUgdGVzdHMKLSAgbHRfc2ltcGxlX2NvbXBpbGVfdGVzdF9jb2RlPSJcCi0gICAgICBzdWJyb3V0aW5lIHQKLSAgICAgIHJldHVybgotICAgICAgZW5kCi0iCi0KLSAgIyBDb2RlIHRvIGJlIHVzZWQgaW4gc2ltcGxlIGxpbmsgdGVzdHMKLSAgbHRfc2ltcGxlX2xpbmtfdGVzdF9jb2RlPSJcCi0gICAgICBwcm9ncmFtIHQKLSAgICAgIGVuZAotIgotCi0gICMgbHRtYWluIG9ubHkgdXNlcyAkQ0MgZm9yIHRhZ2dlZCBjb25maWd1cmF0aW9ucyBzbyBtYWtlIHN1cmUgJENDIGlzIHNldC4KLSAgX0xUX1RBR19DT01QSUxFUgotCi0gICMgc2F2ZSB3YXJuaW5ncy9ib2lsZXJwbGF0ZSBvZiBzaW1wbGUgdGVzdCBjb2RlCi0gIF9MVF9DT01QSUxFUl9CT0lMRVJQTEFURQotICBfTFRfTElOS0VSX0JPSUxFUlBMQVRFCi0KLSAgIyBBbGxvdyBDQyB0byBiZSBhIHByb2dyYW0gbmFtZSB3aXRoIGFyZ3VtZW50cy4KLSAgbHRfc2F2ZV9DQz0iJENDIgotICBsdF9zYXZlX0dDQz0kR0NDCi0gIGx0X3NhdmVfQ0ZMQUdTPSRDRkxBR1MKLSAgQ0M9JHtGQy0iZjk1In0KLSAgQ0ZMQUdTPSRGQ0ZMQUdTCi0gIGNvbXBpbGVyPSRDQwotICBHQ0M9JGFjX2N2X2ZjX2NvbXBpbGVyX2dudQotCi0gIF9MVF9UQUdWQVIoY29tcGlsZXIsICQxKT0kQ0MKLSAgX0xUX0NDX0JBU0VOQU1FKFskY29tcGlsZXJdKQotCi0gIGlmIHRlc3QgLW4gIiRjb21waWxlciI7IHRoZW4KLSAgICBBQ19NU0dfQ0hFQ0tJTkcoW2lmIGxpYnRvb2wgc3VwcG9ydHMgc2hhcmVkIGxpYnJhcmllc10pCi0gICAgQUNfTVNHX1JFU1VMVChbJGNhbl9idWlsZF9zaGFyZWRdKQotCi0gICAgQUNfTVNHX0NIRUNLSU5HKFt3aGV0aGVyIHRvIGJ1aWxkIHNoYXJlZCBsaWJyYXJpZXNdKQotICAgIHRlc3QgIiRjYW5fYnVpbGRfc2hhcmVkIiA9ICJubyIgJiYgZW5hYmxlX3NoYXJlZD1ubwotCi0gICAgIyBPbiBBSVgsIHNoYXJlZCBsaWJyYXJpZXMgYW5kIHN0YXRpYyBsaWJyYXJpZXMgdXNlIHRoZSBzYW1lIG5hbWVzcGFjZSwgYW5kCi0gICAgIyBhcmUgYWxsIGJ1aWx0IGZyb20gUElDLgotICAgIGNhc2UgJGhvc3Rfb3MgaW4KLSAgICAgIGFpeDMqKQotICAgICAgICB0ZXN0ICIkZW5hYmxlX3NoYXJlZCIgPSB5ZXMgJiYgZW5hYmxlX3N0YXRpYz1ubwotICAgICAgICBpZiB0ZXN0IC1uICIkUkFOTElCIjsgdGhlbgotICAgICAgICAgIGFyY2hpdmVfY21kcz0iJGFyY2hpdmVfY21kc35cJFJBTkxJQiBcJGxpYiIKLSAgICAgICAgICBwb3N0aW5zdGFsbF9jbWRzPSckUkFOTElCICRsaWInCi0gICAgICAgIGZpCi0gICAgICAgIDs7Ci0gICAgICBhaXhbWzQtOV1dKikKLQlpZiB0ZXN0ICIkaG9zdF9jcHUiICE9IGlhNjQgJiYgdGVzdCAiJGFpeF91c2VfcnVudGltZWxpbmtpbmciID0gbm8gOyB0aGVuCi0JICB0ZXN0ICIkZW5hYmxlX3NoYXJlZCIgPSB5ZXMgJiYgZW5hYmxlX3N0YXRpYz1ubwotCWZpCi0gICAgICAgIDs7Ci0gICAgZXNhYwotICAgIEFDX01TR19SRVNVTFQoWyRlbmFibGVfc2hhcmVkXSkKLQotICAgIEFDX01TR19DSEVDS0lORyhbd2hldGhlciB0byBidWlsZCBzdGF0aWMgbGlicmFyaWVzXSkKLSAgICAjIE1ha2Ugc3VyZSBlaXRoZXIgZW5hYmxlX3NoYXJlZCBvciBlbmFibGVfc3RhdGljIGlzIHllcy4KLSAgICB0ZXN0ICIkZW5hYmxlX3NoYXJlZCIgPSB5ZXMgfHwgZW5hYmxlX3N0YXRpYz15ZXMKLSAgICBBQ19NU0dfUkVTVUxUKFskZW5hYmxlX3N0YXRpY10pCi0KLSAgICBfTFRfVEFHVkFSKEdDQywgJDEpPSIkYWNfY3ZfZmNfY29tcGlsZXJfZ251IgotICAgIF9MVF9UQUdWQVIoTEQsICQxKT0iJExEIgotCi0gICAgIyMgQ0FWRUFUIEVNUFRPUjoKLSAgICAjIyBUaGVyZSBpcyBubyBlbmNhcHN1bGF0aW9uIHdpdGhpbiB0aGUgZm9sbG93aW5nIG1hY3JvcywgZG8gbm90IGNoYW5nZQotICAgICMjIHRoZSBydW5uaW5nIG9yZGVyIG9yIG90aGVyd2lzZSBtb3ZlIHRoZW0gYXJvdW5kIHVubGVzcyB5b3Uga25vdyBleGFjdGx5Ci0gICAgIyMgd2hhdCB5b3UgYXJlIGRvaW5nLi4uCi0gICAgX0xUX1NZU19ISURERU5fTElCREVQUygkMSkKLSAgICBfTFRfQ09NUElMRVJfUElDKCQxKQotICAgIF9MVF9DT01QSUxFUl9DX08oJDEpCi0gICAgX0xUX0NPTVBJTEVSX0ZJTEVfTE9DS1MoJDEpCi0gICAgX0xUX0xJTktFUl9TSExJQlMoJDEpCi0gICAgX0xUX1NZU19EWU5BTUlDX0xJTktFUigkMSkKLSAgICBfTFRfTElOS0VSX0hBUkRDT0RFX0xJQlBBVEgoJDEpCi0KLSAgICBfTFRfQ09ORklHKCQxKQotICBmaSAjIHRlc3QgLW4gIiRjb21waWxlciIKLQotICBHQ0M9JGx0X3NhdmVfR0NDCi0gIENDPSRsdF9zYXZlX0NDCi0gIENGTEFHUz0kbHRfc2F2ZV9DRkxBR1MKLWZpICMgdGVzdCAiJF9sdF9kaXNhYmxlX0ZDIiAhPSB5ZXMKLQotQUNfTEFOR19QT1AKLV0pIyBfTFRfTEFOR19GQ19DT05GSUcKLQotCi0jIF9MVF9MQU5HX0dDSl9DT05GSUcoW1RBR10pCi0jIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0jIEVuc3VyZSB0aGF0IHRoZSBjb25maWd1cmF0aW9uIHZhcmlhYmxlcyBmb3IgdGhlIEdOVSBKYXZhIENvbXBpbGVyIGNvbXBpbGVyCi0jIGFyZSBzdWl0YWJseSBkZWZpbmVkLiAgVGhlc2UgdmFyaWFibGVzIGFyZSBzdWJzZXF1ZW50bHkgdXNlZCBieSBfTFRfQ09ORklHCi0jIHRvIHdyaXRlIHRoZSBjb21waWxlciBjb25maWd1cmF0aW9uIHRvIGBsaWJ0b29sJy4KLW00X2RlZnVuKFtfTFRfTEFOR19HQ0pfQ09ORklHXSwKLVtBQ19SRVFVSVJFKFtMVF9QUk9HX0dDSl0pZG5sCi1BQ19MQU5HX1NBVkUKLQotIyBTb3VyY2UgZmlsZSBleHRlbnNpb24gZm9yIEphdmEgdGVzdCBzb3VyY2VzLgotYWNfZXh0PWphdmEKLQotIyBPYmplY3QgZmlsZSBleHRlbnNpb24gZm9yIGNvbXBpbGVkIEphdmEgdGVzdCBzb3VyY2VzLgotb2JqZXh0PW8KLV9MVF9UQUdWQVIob2JqZXh0LCAkMSk9JG9iamV4dAotCi0jIENvZGUgdG8gYmUgdXNlZCBpbiBzaW1wbGUgY29tcGlsZSB0ZXN0cwotbHRfc2ltcGxlX2NvbXBpbGVfdGVzdF9jb2RlPSJjbGFzcyBmb28ge30iCi0KLSMgQ29kZSB0byBiZSB1c2VkIGluIHNpbXBsZSBsaW5rIHRlc3RzCi1sdF9zaW1wbGVfbGlua190ZXN0X2NvZGU9J3B1YmxpYyBjbGFzcyBjb25mdGVzdCB7IHB1YmxpYyBzdGF0aWMgdm9pZCBtYWluKFN0cmluZ1tbXV0gYXJndikge307IH0nCi0KLSMgbHRtYWluIG9ubHkgdXNlcyAkQ0MgZm9yIHRhZ2dlZCBjb25maWd1cmF0aW9ucyBzbyBtYWtlIHN1cmUgJENDIGlzIHNldC4KLV9MVF9UQUdfQ09NUElMRVIKLQotIyBzYXZlIHdhcm5pbmdzL2JvaWxlcnBsYXRlIG9mIHNpbXBsZSB0ZXN0IGNvZGUKLV9MVF9DT01QSUxFUl9CT0lMRVJQTEFURQotX0xUX0xJTktFUl9CT0lMRVJQTEFURQotCi0jIEFsbG93IENDIHRvIGJlIGEgcHJvZ3JhbSBuYW1lIHdpdGggYXJndW1lbnRzLgotbHRfc2F2ZV9DQz0kQ0MKLWx0X3NhdmVfQ0ZMQUdTPSRDRkxBR1MKLWx0X3NhdmVfR0NDPSRHQ0MKLUdDQz15ZXMKLUNDPSR7R0NKLSJnY2oifQotQ0ZMQUdTPSRHQ0pGTEFHUwotY29tcGlsZXI9JENDCi1fTFRfVEFHVkFSKGNvbXBpbGVyLCAkMSk9JENDCi1fTFRfVEFHVkFSKExELCAkMSk9IiRMRCIKLV9MVF9DQ19CQVNFTkFNRShbJGNvbXBpbGVyXSkKLQotIyBHQ0ogZGlkIG5vdCBleGlzdCBhdCB0aGUgdGltZSBHQ0MgZGlkbid0IGltcGxpY2l0bHkgbGluayBsaWJjIGluLgotX0xUX1RBR1ZBUihhcmNoaXZlX2NtZHNfbmVlZF9sYywgJDEpPW5vCi0KLV9MVF9UQUdWQVIob2xkX2FyY2hpdmVfY21kcywgJDEpPSRvbGRfYXJjaGl2ZV9jbWRzCi1fTFRfVEFHVkFSKHJlbG9hZF9mbGFnLCAkMSk9JHJlbG9hZF9mbGFnCi1fTFRfVEFHVkFSKHJlbG9hZF9jbWRzLCAkMSk9JHJlbG9hZF9jbWRzCi0KLWlmIHRlc3QgLW4gIiRjb21waWxlciI7IHRoZW4KLSAgX0xUX0NPTVBJTEVSX05PX1JUVEkoJDEpCi0gIF9MVF9DT01QSUxFUl9QSUMoJDEpCi0gIF9MVF9DT01QSUxFUl9DX08oJDEpCi0gIF9MVF9DT01QSUxFUl9GSUxFX0xPQ0tTKCQxKQotICBfTFRfTElOS0VSX1NITElCUygkMSkKLSAgX0xUX0xJTktFUl9IQVJEQ09ERV9MSUJQQVRIKCQxKQotCi0gIF9MVF9DT05GSUcoJDEpCi1maQotCi1BQ19MQU5HX1JFU1RPUkUKLQotR0NDPSRsdF9zYXZlX0dDQwotQ0M9JGx0X3NhdmVfQ0MKLUNGTEFHUz0kbHRfc2F2ZV9DRkxBR1MKLV0pIyBfTFRfTEFOR19HQ0pfQ09ORklHCi0KLQotIyBfTFRfTEFOR19SQ19DT05GSUcoW1RBR10pCi0jIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSMgRW5zdXJlIHRoYXQgdGhlIGNvbmZpZ3VyYXRpb24gdmFyaWFibGVzIGZvciB0aGUgV2luZG93cyByZXNvdXJjZSBjb21waWxlcgotIyBhcmUgc3VpdGFibHkgZGVmaW5lZC4gIFRoZXNlIHZhcmlhYmxlcyBhcmUgc3Vic2VxdWVudGx5IHVzZWQgYnkgX0xUX0NPTkZJRwotIyB0byB3cml0ZSB0aGUgY29tcGlsZXIgY29uZmlndXJhdGlvbiB0byBgbGlidG9vbCcuCi1tNF9kZWZ1bihbX0xUX0xBTkdfUkNfQ09ORklHXSwKLVtBQ19SRVFVSVJFKFtMVF9QUk9HX1JDXSlkbmwKLUFDX0xBTkdfU0FWRQotCi0jIFNvdXJjZSBmaWxlIGV4dGVuc2lvbiBmb3IgUkMgdGVzdCBzb3VyY2VzLgotYWNfZXh0PXJjCi0KLSMgT2JqZWN0IGZpbGUgZXh0ZW5zaW9uIGZvciBjb21waWxlZCBSQyB0ZXN0IHNvdXJjZXMuCi1vYmpleHQ9bwotX0xUX1RBR1ZBUihvYmpleHQsICQxKT0kb2JqZXh0Ci0KLSMgQ29kZSB0byBiZSB1c2VkIGluIHNpbXBsZSBjb21waWxlIHRlc3RzCi1sdF9zaW1wbGVfY29tcGlsZV90ZXN0X2NvZGU9J3NhbXBsZSBNRU5VIHsgTUVOVUlURU0gIiZTb3VwIiwgMTAwLCBDSEVDS0VEIH0nCi0KLSMgQ29kZSB0byBiZSB1c2VkIGluIHNpbXBsZSBsaW5rIHRlc3RzCi1sdF9zaW1wbGVfbGlua190ZXN0X2NvZGU9IiRsdF9zaW1wbGVfY29tcGlsZV90ZXN0X2NvZGUiCi0KLSMgbHRtYWluIG9ubHkgdXNlcyAkQ0MgZm9yIHRhZ2dlZCBjb25maWd1cmF0aW9ucyBzbyBtYWtlIHN1cmUgJENDIGlzIHNldC4KLV9MVF9UQUdfQ09NUElMRVIKLQotIyBzYXZlIHdhcm5pbmdzL2JvaWxlcnBsYXRlIG9mIHNpbXBsZSB0ZXN0IGNvZGUKLV9MVF9DT01QSUxFUl9CT0lMRVJQTEFURQotX0xUX0xJTktFUl9CT0lMRVJQTEFURQotCi0jIEFsbG93IENDIHRvIGJlIGEgcHJvZ3JhbSBuYW1lIHdpdGggYXJndW1lbnRzLgotbHRfc2F2ZV9DQz0iJENDIgotbHRfc2F2ZV9DRkxBR1M9JENGTEFHUwotbHRfc2F2ZV9HQ0M9JEdDQwotR0NDPQotQ0M9JHtSQy0id2luZHJlcyJ9Ci1DRkxBR1M9Ci1jb21waWxlcj0kQ0MKLV9MVF9UQUdWQVIoY29tcGlsZXIsICQxKT0kQ0MKLV9MVF9DQ19CQVNFTkFNRShbJGNvbXBpbGVyXSkKLV9MVF9UQUdWQVIobHRfY3ZfcHJvZ19jb21waWxlcl9jX28sICQxKT15ZXMKLQotaWYgdGVzdCAtbiAiJGNvbXBpbGVyIjsgdGhlbgotICA6Ci0gIF9MVF9DT05GSUcoJDEpCi1maQotCi1HQ0M9JGx0X3NhdmVfR0NDCi1BQ19MQU5HX1JFU1RPUkUKLUNDPSRsdF9zYXZlX0NDCi1DRkxBR1M9JGx0X3NhdmVfQ0ZMQUdTCi1dKSMgX0xUX0xBTkdfUkNfQ09ORklHCi0KLQotIyBMVF9QUk9HX0dDSgotIyAtLS0tLS0tLS0tLQotQUNfREVGVU4oW0xUX1BST0dfR0NKXSwKLVttNF9pZmRlZihbQUNfUFJPR19HQ0pdLCBbQUNfUFJPR19HQ0pdLAotICBbbTRfaWZkZWYoW0FdW01fUFJPR19HQ0pdLCBbQV1bTV9QUk9HX0dDSl0sCi0gICAgW0FDX0NIRUNLX1RPT0woR0NKLCBnY2osKQotICAgICAgdGVzdCAieCR7R0NKRkxBR1Mrc2V0fSIgPSB4c2V0IHx8IEdDSkZMQUdTPSItZyAtTzIiCi0gICAgICBBQ19TVUJTVChHQ0pGTEFHUyldKV0pW11kbmwKLV0pCi0KLSMgT2xkIG5hbWU6Ci1BVV9BTElBUyhbTFRfQUNfUFJPR19HQ0pdLCBbTFRfUFJPR19HQ0pdKQotZG5sIGFjbG9jYWwtMS40IGJhY2t3YXJkcyBjb21wYXRpYmlsaXR5OgotZG5sIEFDX0RFRlVOKFtMVF9BQ19QUk9HX0dDSl0sIFtdKQotCi0KLSMgTFRfUFJPR19SQwotIyAtLS0tLS0tLS0tCi1BQ19ERUZVTihbTFRfUFJPR19SQ10sCi1bQUNfQ0hFQ0tfVE9PTChSQywgd2luZHJlcywpCi1dKQotCi0jIE9sZCBuYW1lOgotQVVfQUxJQVMoW0xUX0FDX1BST0dfUkNdLCBbTFRfUFJPR19SQ10pCi1kbmwgYWNsb2NhbC0xLjQgYmFja3dhcmRzIGNvbXBhdGliaWxpdHk6Ci1kbmwgQUNfREVGVU4oW0xUX0FDX1BST0dfUkNdLCBbXSkKLQotCi0jIF9MVF9ERUNMX0VHUkVQCi0jIC0tLS0tLS0tLS0tLS0tCi0jIElmIHdlIGRvbid0IGhhdmUgYSBuZXcgZW5vdWdoIEF1dG9jb25mIHRvIGNob29zZSB0aGUgYmVzdCBncmVwCi0jIGF2YWlsYWJsZSwgY2hvb3NlIHRoZSBvbmUgZmlyc3QgaW4gdGhlIHVzZXIncyBQQVRILgotbTRfZGVmdW4oW19MVF9ERUNMX0VHUkVQXSwKLVtBQ19SRVFVSVJFKFtBQ19QUk9HX0VHUkVQXSlkbmwKLUFDX1JFUVVJUkUoW0FDX1BST0dfRkdSRVBdKWRubAotdGVzdCAteiAiJEdSRVAiICYmIEdSRVA9Z3JlcAotX0xUX0RFQ0woW10sIFtHUkVQXSwgWzFdLCBbQSBncmVwIHByb2dyYW0gdGhhdCBoYW5kbGVzIGxvbmcgbGluZXNdKQotX0xUX0RFQ0woW10sIFtFR1JFUF0sIFsxXSwgW0FuIEVSRSBtYXRjaGVyXSkKLV9MVF9ERUNMKFtdLCBbRkdSRVBdLCBbMV0sIFtBIGxpdGVyYWwgc3RyaW5nIG1hdGNoZXJdKQotZG5sIE5vbi1ibGVlZGluZy1lZGdlIGF1dG9jb25mIGRvZXNuJ3Qgc3Vic3QgR1JFUCwgc28gZG8gaXQgaGVyZSB0b28KLUFDX1NVQlNUKFtHUkVQXSkKLV0pCi0KLQotIyBfTFRfREVDTF9PQkpEVU1QCi0jIC0tLS0tLS0tLS0tLS0tCi0jIElmIHdlIGRvbid0IGhhdmUgYSBuZXcgZW5vdWdoIEF1dG9jb25mIHRvIGNob29zZSB0aGUgYmVzdCBvYmpkdW1wCi0jIGF2YWlsYWJsZSwgY2hvb3NlIHRoZSBvbmUgZmlyc3QgaW4gdGhlIHVzZXIncyBQQVRILgotbTRfZGVmdW4oW19MVF9ERUNMX09CSkRVTVBdLAotW0FDX0NIRUNLX1RPT0woT0JKRFVNUCwgb2JqZHVtcCwgZmFsc2UpCi10ZXN0IC16ICIkT0JKRFVNUCIgJiYgT0JKRFVNUD1vYmpkdW1wCi1fTFRfREVDTChbXSwgW09CSkRVTVBdLCBbMV0sIFtBbiBvYmplY3Qgc3ltYm9sIGR1bXBlcl0pCi1BQ19TVUJTVChbT0JKRFVNUF0pCi1dKQotCi0jIF9MVF9ERUNMX0RMTFRPT0wKLSMgLS0tLS0tLS0tLS0tLS0tLQotIyBFbnN1cmUgRExMVE9PTCB2YXJpYWJsZSBpcyBzZXQuCi1tNF9kZWZ1bihbX0xUX0RFQ0xfRExMVE9PTF0sCi1bQUNfQ0hFQ0tfVE9PTChETExUT09MLCBkbGx0b29sLCBmYWxzZSkKLXRlc3QgLXogIiRETExUT09MIiAmJiBETExUT09MPWRsbHRvb2wKLV9MVF9ERUNMKFtdLCBbRExMVE9PTF0sIFsxXSwgW0RMTCBjcmVhdGlvbiBwcm9ncmFtXSkKLUFDX1NVQlNUKFtETExUT09MXSkKLV0pCi0KLSMgX0xUX0RFQ0xfU0VECi0jIC0tLS0tLS0tLS0tLQotIyBDaGVjayBmb3IgYSBmdWxseS1mdW5jdGlvbmFsIHNlZCBwcm9ncmFtLCB0aGF0IHRydW5jYXRlcwotIyBhcyBmZXcgY2hhcmFjdGVycyBhcyBwb3NzaWJsZS4gIFByZWZlciBHTlUgc2VkIGlmIGZvdW5kLgotbTRfZGVmdW4oW19MVF9ERUNMX1NFRF0sCi1bQUNfUFJPR19TRUQKLXRlc3QgLXogIiRTRUQiICYmIFNFRD1zZWQKLVhzZWQ9IiRTRUQgLWUgMXMvXlgvLyIKLV9MVF9ERUNMKFtdLCBbU0VEXSwgWzFdLCBbQSBzZWQgcHJvZ3JhbSB0aGF0IGRvZXMgbm90IHRydW5jYXRlIG91dHB1dF0pCi1fTFRfREVDTChbXSwgW1hzZWRdLCBbIlwkU0VEIC1lIDFzL15YLy8iXSwKLSAgICBbU2VkIHRoYXQgaGVscHMgdXMgYXZvaWQgYWNjaWRlbnRhbGx5IHRyaWdnZXJpbmcgZWNobygxKSBvcHRpb25zIGxpa2UgLW5dKQotXSkjIF9MVF9ERUNMX1NFRAotCi1tNF9pZm5kZWYoW0FDX1BST0dfU0VEXSwgWwotIyBOT1RFOiBUaGlzIG1hY3JvIGhhcyBiZWVuIHN1Ym1pdHRlZCBmb3IgaW5jbHVzaW9uIGludG8gICAjCi0jICBHTlUgQXV0b2NvbmYgYXMgQUNfUFJPR19TRUQuICBXaGVuIGl0IGlzIGF2YWlsYWJsZSBpbiAgICMKLSMgIGEgcmVsZWFzZWQgdmVyc2lvbiBvZiBBdXRvY29uZiB3ZSBzaG91bGQgcmVtb3ZlIHRoaXMgICAgIwotIyAgbWFjcm8gYW5kIHVzZSBpdCBpbnN0ZWFkLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjCi0KLW00X2RlZnVuKFtBQ19QUk9HX1NFRF0sCi1bQUNfTVNHX0NIRUNLSU5HKFtmb3IgYSBzZWQgdGhhdCBkb2VzIG5vdCB0cnVuY2F0ZSBvdXRwdXRdKQotQUNfQ0FDSEVfVkFMKGx0X2N2X3BhdGhfU0VELAotWyMgTG9vcCB0aHJvdWdoIHRoZSB1c2VyJ3MgcGF0aCBhbmQgdGVzdCBmb3Igc2VkIGFuZCBnc2VkLgotIyBUaGVuIHVzZSB0aGF0IGxpc3Qgb2Ygc2VkJ3MgYXMgb25lcyB0byB0ZXN0IGZvciB0cnVuY2F0aW9uLgotYXNfc2F2ZV9JRlM9JElGUzsgSUZTPSRQQVRIX1NFUEFSQVRPUgotZm9yIGFzX2RpciBpbiAkUEFUSAotZG8KLSAgSUZTPSRhc19zYXZlX0lGUwotICB0ZXN0IC16ICIkYXNfZGlyIiAmJiBhc19kaXI9LgotICBmb3IgbHRfYWNfcHJvZyBpbiBzZWQgZ3NlZDsgZG8KLSAgICBmb3IgYWNfZXhlY19leHQgaW4gJycgJGFjX2V4ZWN1dGFibGVfZXh0ZW5zaW9uczsgZG8KLSAgICAgIGlmICRhc19leGVjdXRhYmxlX3AgIiRhc19kaXIvJGx0X2FjX3Byb2ckYWNfZXhlY19leHQiOyB0aGVuCi0gICAgICAgIGx0X2FjX3NlZF9saXN0PSIkbHRfYWNfc2VkX2xpc3QgJGFzX2Rpci8kbHRfYWNfcHJvZyRhY19leGVjX2V4dCIKLSAgICAgIGZpCi0gICAgZG9uZQotICBkb25lCi1kb25lCi1JRlM9JGFzX3NhdmVfSUZTCi1sdF9hY19tYXg9MAotbHRfYWNfY291bnQ9MAotIyBBZGQgL3Vzci94cGc0L2Jpbi9zZWQgYXMgaXQgaXMgdHlwaWNhbGx5IGZvdW5kIG9uIFNvbGFyaXMKLSMgYWxvbmcgd2l0aCAvYmluL3NlZCB0aGF0IHRydW5jYXRlcyBvdXRwdXQuCi1mb3IgbHRfYWNfc2VkIGluICRsdF9hY19zZWRfbGlzdCAvdXNyL3hwZzQvYmluL3NlZDsgZG8KLSAgdGVzdCAhIC1mICRsdF9hY19zZWQgJiYgY29udGludWUKLSAgY2F0IC9kZXYvbnVsbCA+IGNvbmZ0ZXN0LmluCi0gIGx0X2FjX2NvdW50PTAKLSAgZWNobyAkRUNIT19OICIwMTIzNDU2Nzg5JEVDSE9fQyIgPmNvbmZ0ZXN0LmluCi0gICMgQ2hlY2sgZm9yIEdOVSBzZWQgYW5kIHNlbGVjdCBpdCBpZiBpdCBpcyBmb3VuZC4KLSAgaWYgIiRsdF9hY19zZWQiIC0tdmVyc2lvbiAyPiYxIDwgL2Rldi9udWxsIHwgZ3JlcCAnR05VJyA+IC9kZXYvbnVsbDsgdGhlbgotICAgIGx0X2N2X3BhdGhfU0VEPSRsdF9hY19zZWQKLSAgICBicmVhawotICBmaQotICB3aGlsZSB0cnVlOyBkbwotICAgIGNhdCBjb25mdGVzdC5pbiBjb25mdGVzdC5pbiA+Y29uZnRlc3QudG1wCi0gICAgbXYgY29uZnRlc3QudG1wIGNvbmZ0ZXN0LmluCi0gICAgY3AgY29uZnRlc3QuaW4gY29uZnRlc3QubmwKLSAgICBlY2hvID4+Y29uZnRlc3QubmwKLSAgICAkbHRfYWNfc2VkIC1lICdzL2EkLy8nIDwgY29uZnRlc3QubmwgPmNvbmZ0ZXN0Lm91dCB8fCBicmVhawotICAgIGNtcCAtcyBjb25mdGVzdC5vdXQgY29uZnRlc3QubmwgfHwgYnJlYWsKLSAgICAjIDEwMDAwIGNoYXJzIGFzIGlucHV0IHNlZW1zIG1vcmUgdGhhbiBlbm91Z2gKLSAgICB0ZXN0ICRsdF9hY19jb3VudCAtZ3QgMTAgJiYgYnJlYWsKLSAgICBsdF9hY19jb3VudD1gZXhwciAkbHRfYWNfY291bnQgKyAxYAotICAgIGlmIHRlc3QgJGx0X2FjX2NvdW50IC1ndCAkbHRfYWNfbWF4OyB0aGVuCi0gICAgICBsdF9hY19tYXg9JGx0X2FjX2NvdW50Ci0gICAgICBsdF9jdl9wYXRoX1NFRD0kbHRfYWNfc2VkCi0gICAgZmkKLSAgZG9uZQotZG9uZQotXSkKLVNFRD0kbHRfY3ZfcGF0aF9TRUQKLUFDX1NVQlNUKFtTRURdKQotQUNfTVNHX1JFU1VMVChbJFNFRF0pCi1dKSNBQ19QUk9HX1NFRAotXSkjbTRfaWZuZGVmCi0KLSMgT2xkIG5hbWU6Ci1BVV9BTElBUyhbTFRfQUNfUFJPR19TRURdLCBbQUNfUFJPR19TRURdKQotZG5sIGFjbG9jYWwtMS40IGJhY2t3YXJkcyBjb21wYXRpYmlsaXR5OgotZG5sIEFDX0RFRlVOKFtMVF9BQ19QUk9HX1NFRF0sIFtdKQotCi0KLSMgX0xUX0NIRUNLX1NIRUxMX0ZFQVRVUkVTCi0jIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotIyBGaW5kIG91dCB3aGV0aGVyIHRoZSBzaGVsbCBpcyBCb3VybmUgb3IgWFNJIGNvbXBhdGlibGUsCi0jIG9yIGhhcyBzb21lIG90aGVyIHVzZWZ1bCBmZWF0dXJlcy4KLW00X2RlZnVuKFtfTFRfQ0hFQ0tfU0hFTExfRkVBVFVSRVNdLAotW0FDX01TR19DSEVDS0lORyhbd2hldGhlciB0aGUgc2hlbGwgdW5kZXJzdGFuZHMgc29tZSBYU0kgY29uc3RydWN0c10pCi0jIFRyeSBzb21lIFhTSSBmZWF0dXJlcwoteHNpX3NoZWxsPW5vCi0oIF9sdF9kdW1teT0iYS9iL2MiCi0gIHRlc3QgIiR7X2x0X2R1bW15IyMqL30sJHtfbHRfZHVtbXklLyp9LCR7X2x0X2R1bW15Iz8/fSIke19sdF9kdW1teSUiJF9sdF9kdW1teSJ9LCBcCi0gICAgICA9IGMsYS9iLGIvYywgXAotICAgICYmIGV2YWwgJ3Rlc3QgJCgoIDEgKyAxICkpIC1lcSAyIFwKLSAgICAmJiB0ZXN0ICIkeyNfbHRfZHVtbXl9IiAtZXEgNScgKSA+L2Rldi9udWxsIDI+JjEgXAotICAmJiB4c2lfc2hlbGw9eWVzCi1BQ19NU0dfUkVTVUxUKFskeHNpX3NoZWxsXSkKLV9MVF9DT05GSUdfTElCVE9PTF9JTklUKFt4c2lfc2hlbGw9JyR4c2lfc2hlbGwnXSkKLQotQUNfTVNHX0NIRUNLSU5HKFt3aGV0aGVyIHRoZSBzaGVsbCB1bmRlcnN0YW5kcyAiKz0iXSkKLWx0X3NoZWxsX2FwcGVuZD1ubwotKCBmb289YmFyOyBzZXQgZm9vIGJhejsgZXZhbCAiJFsxXSs9XCRbMl0iICYmIHRlc3QgIiRmb28iID0gYmFyYmF6ICkgXAotICAgID4vZGV2L251bGwgMj4mMSBcCi0gICYmIGx0X3NoZWxsX2FwcGVuZD15ZXMKLUFDX01TR19SRVNVTFQoWyRsdF9zaGVsbF9hcHBlbmRdKQotX0xUX0NPTkZJR19MSUJUT09MX0lOSVQoW2x0X3NoZWxsX2FwcGVuZD0nJGx0X3NoZWxsX2FwcGVuZCddKQotCi1pZiAoIChNQUlMPTYwOyB1bnNldCBNQUlMKSB8fCBleGl0KSA+L2Rldi9udWxsIDI+JjE7IHRoZW4KLSAgbHRfdW5zZXQ9dW5zZXQKLWVsc2UKLSAgbHRfdW5zZXQ9ZmFsc2UKLWZpCi1fTFRfREVDTChbXSwgW2x0X3Vuc2V0XSwgWzBdLCBbd2hldGhlciB0aGUgc2hlbGwgdW5kZXJzdGFuZHMgInVuc2V0Il0pZG5sCi0KLSMgdGVzdCBFQkNESUMgb3IgQVNDSUkKLWNhc2UgYGVjaG8gWHx0ciBYICdcMTAxJ2AgaW4KLSBBKSAjIEFTQ0lJIGJhc2VkIHN5c3RlbQotICAgICMgXG4gaXMgbm90IGludGVycHJldGVkIGNvcnJlY3RseSBieSBTb2xhcmlzIDggL3Vzci91Y2IvdHIKLSAgbHRfU1AyTkw9J3RyIFwwNDAgXDAxMicKLSAgbHRfTkwyU1A9J3RyIFwwMTVcMDEyIFwwNDBcMDQwJwotICA7OwotICopICMgRUJDRElDIGJhc2VkIHN5c3RlbQotICBsdF9TUDJOTD0ndHIgXDEwMCBcbicKLSAgbHRfTkwyU1A9J3RyIFxyXG4gXDEwMFwxMDAnCi0gIDs7Ci1lc2FjCi1fTFRfREVDTChbU1AyTkxdLCBbbHRfU1AyTkxdLCBbMV0sIFt0dXJuIHNwYWNlcyBpbnRvIG5ld2xpbmVzXSlkbmwKLV9MVF9ERUNMKFtOTDJTUF0sIFtsdF9OTDJTUF0sIFsxXSwgW3R1cm4gbmV3bGluZXMgaW50byBzcGFjZXNdKWRubAotXSkjIF9MVF9DSEVDS19TSEVMTF9GRUFUVVJFUwotCi0KLSMgX0xUX1BST0dfRlVOQ1RJT05fUkVQTEFDRSAoRlVOQ05BTUUsIFJFUExBQ0VNRU5ULUJPRFkpCi0jIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotIyBJbiBgJGNmZ2ZpbGUnLCBsb29rIGZvciBmdW5jdGlvbiBGVU5DTkFNRSBkZWxpbWl0ZWQgYnkgYF5GVU5DTkFNRSAoKSQnIGFuZAotIyAnXn0gRlVOQ05BTUUgJywgYW5kIHJlcGxhY2UgaXRzIGJvZHkgd2l0aCBSRVBMQUNFTUVOVC1CT0RZLgotbTRfZGVmdW4oW19MVF9QUk9HX0ZVTkNUSU9OX1JFUExBQ0VdLAotW2RubCB7Ci1zZWQgLWUgJy9eJDEgKCkkLywvXn0gIyAkMSAvY1wKLSQxICgpXAote1wKLW00X2JwYXRzdWJzdHMoWyQyXSwgWyRdLCBbXFxdLCBbXlwoWwkgXVwpXSwgW1xcXDFdKQotfSAjIEV4dGVuZGVkLXNoZWxsICQxIGltcGxlbWVudGF0aW9uJyAiJGNmZ2ZpbGUiID4gJGNmZ2ZpbGUudG1wIFwKLSAgJiYgbXYgLWYgIiRjZmdmaWxlLnRtcCIgIiRjZmdmaWxlIiBcCi0gICAgfHwgKHJtIC1mICIkY2ZnZmlsZSIgJiYgY3AgIiRjZmdmaWxlLnRtcCIgIiRjZmdmaWxlIiAmJiBybSAtZiAiJGNmZ2ZpbGUudG1wIikKLXRlc3QgMCAtZXEgJD8gfHwgX2x0X2Z1bmN0aW9uX3JlcGxhY2VfZmFpbD06Ci1dKQotCi0KLSMgX0xUX1BST0dfUkVQTEFDRV9TSEVMTEZOUwotIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0jIFJlcGxhY2UgZXhpc3RpbmcgcG9ydGFibGUgaW1wbGVtZW50YXRpb25zIG9mIHNldmVyYWwgc2hlbGwgZnVuY3Rpb25zIHdpdGgKLSMgZXF1aXZhbGVudCBleHRlbmRlZCBzaGVsbCBpbXBsZW1lbnRhdGlvbnMgd2hlcmUgdGhvc2UgZmVhdHVyZXMgYXJlIGF2YWlsYWJsZS4uCi1tNF9kZWZ1bihbX0xUX1BST0dfUkVQTEFDRV9TSEVMTEZOU10sCi1baWYgdGVzdCB4IiR4c2lfc2hlbGwiID0geHllczsgdGhlbgotICBfTFRfUFJPR19GVU5DVElPTl9SRVBMQUNFKFtmdW5jX2Rpcm5hbWVdLCBbZG5sCi0gICAgY2FzZSAkezF9IGluCi0gICAgICAqLyopIGZ1bmNfZGlybmFtZV9yZXN1bHQ9IiR7MSUvKn0kezJ9IiA7OwotICAgICAgKiAgKSBmdW5jX2Rpcm5hbWVfcmVzdWx0PSIkezN9IiA7OwotICAgIGVzYWNdKQotCi0gIF9MVF9QUk9HX0ZVTkNUSU9OX1JFUExBQ0UoW2Z1bmNfYmFzZW5hbWVdLCBbZG5sCi0gICAgZnVuY19iYXNlbmFtZV9yZXN1bHQ9IiR7MSMjKi99Il0pCi0KLSAgX0xUX1BST0dfRlVOQ1RJT05fUkVQTEFDRShbZnVuY19kaXJuYW1lX2FuZF9iYXNlbmFtZV0sIFtkbmwKLSAgICBjYXNlICR7MX0gaW4KLSAgICAgICovKikgZnVuY19kaXJuYW1lX3Jlc3VsdD0iJHsxJS8qfSR7Mn0iIDs7Ci0gICAgICAqICApIGZ1bmNfZGlybmFtZV9yZXN1bHQ9IiR7M30iIDs7Ci0gICAgZXNhYwotICAgIGZ1bmNfYmFzZW5hbWVfcmVzdWx0PSIkezEjIyovfSJdKQotCi0gIF9MVF9QUk9HX0ZVTkNUSU9OX1JFUExBQ0UoW2Z1bmNfc3RyaXBuYW1lXSwgW2RubAotICAgICMgcGRrc2ggNS4yLjE0IGRvZXMgbm90IGRvICR7WCUkWX0gY29ycmVjdGx5IGlmIGJvdGggWCBhbmQgWSBhcmUKLSAgICAjIHBvc2l0aW9uYWwgcGFyYW1ldGVycywgc28gYXNzaWduIG9uZSB0byBvcmRpbmFyeSBwYXJhbWV0ZXIgZmlyc3QuCi0gICAgZnVuY19zdHJpcG5hbWVfcmVzdWx0PSR7M30KLSAgICBmdW5jX3N0cmlwbmFtZV9yZXN1bHQ9JHtmdW5jX3N0cmlwbmFtZV9yZXN1bHQjIiR7MX0ifQotICAgIGZ1bmNfc3RyaXBuYW1lX3Jlc3VsdD0ke2Z1bmNfc3RyaXBuYW1lX3Jlc3VsdCUiJHsyfSJ9XSkKLQotICBfTFRfUFJPR19GVU5DVElPTl9SRVBMQUNFKFtmdW5jX3NwbGl0X2xvbmdfb3B0XSwgW2RubAotICAgIGZ1bmNfc3BsaXRfbG9uZ19vcHRfbmFtZT0kezElJT0qfQotICAgIGZ1bmNfc3BsaXRfbG9uZ19vcHRfYXJnPSR7MSMqPX1dKQotCi0gIF9MVF9QUk9HX0ZVTkNUSU9OX1JFUExBQ0UoW2Z1bmNfc3BsaXRfc2hvcnRfb3B0XSwgW2RubAotICAgIGZ1bmNfc3BsaXRfc2hvcnRfb3B0X2FyZz0kezEjPz99Ci0gICAgZnVuY19zcGxpdF9zaG9ydF9vcHRfbmFtZT0kezElIiRmdW5jX3NwbGl0X3Nob3J0X29wdF9hcmcifV0pCi0KLSAgX0xUX1BST0dfRlVOQ1RJT05fUkVQTEFDRShbZnVuY19sbzJvXSwgW2RubAotICAgIGNhc2UgJHsxfSBpbgotICAgICAgKi5sbykgZnVuY19sbzJvX3Jlc3VsdD0kezElLmxvfS4ke29iamV4dH0gOzsKLSAgICAgICopICAgIGZ1bmNfbG8yb19yZXN1bHQ9JHsxfSA7OwotICAgIGVzYWNdKQotCi0gIF9MVF9QUk9HX0ZVTkNUSU9OX1JFUExBQ0UoW2Z1bmNfeGZvcm1dLCBbICAgIGZ1bmNfeGZvcm1fcmVzdWx0PSR7MSUuKn0ubG9dKQotCi0gIF9MVF9QUk9HX0ZVTkNUSU9OX1JFUExBQ0UoW2Z1bmNfYXJpdGhdLCBbICAgIGZ1bmNfYXJpdGhfcmVzdWx0PSQoKCAkWypdICkpXSkKLQotICBfTFRfUFJPR19GVU5DVElPTl9SRVBMQUNFKFtmdW5jX2xlbl0sIFsgICAgZnVuY19sZW5fcmVzdWx0PSR7IzF9XSkKLWZpCi0KLWlmIHRlc3QgeCIkbHRfc2hlbGxfYXBwZW5kIiA9IHh5ZXM7IHRoZW4KLSAgX0xUX1BST0dfRlVOQ1RJT05fUkVQTEFDRShbZnVuY19hcHBlbmRdLCBbICAgIGV2YWwgIiR7MX0rPVxcJHsyfSJdKQotCi0gIF9MVF9QUk9HX0ZVTkNUSU9OX1JFUExBQ0UoW2Z1bmNfYXBwZW5kX3F1b3RlZF0sIFtkbmwKLSAgICBmdW5jX3F1b3RlX2Zvcl9ldmFsICIkezJ9IgotZG5sIG00IGV4cGFuc2lvbiB0dXJucyBcXFxcIGludG8gXFwsIGFuZCB0aGVuIHRoZSBzaGVsbCBldmFsIHR1cm5zIHRoYXQgaW50byBcCi0gICAgZXZhbCAiJHsxfSs9XFxcXCBcXCRmdW5jX3F1b3RlX2Zvcl9ldmFsX3Jlc3VsdCJdKQotCi0gICMgU2F2ZSBhIGBmdW5jX2FwcGVuZCcgZnVuY3Rpb24gY2FsbCB3aGVyZSBwb3NzaWJsZSBieSBkaXJlY3QgdXNlIG9mICcrPScKLSAgc2VkIC1lICdzJWZ1bmNfYXBwZW5kIFwoW1thLXpBLVpfXV1cezEsXH1cKSAiJVwxKz0iJWcnICRjZmdmaWxlID4gJGNmZ2ZpbGUudG1wIFwKLSAgICAmJiBtdiAtZiAiJGNmZ2ZpbGUudG1wIiAiJGNmZ2ZpbGUiIFwKLSAgICAgIHx8IChybSAtZiAiJGNmZ2ZpbGUiICYmIGNwICIkY2ZnZmlsZS50bXAiICIkY2ZnZmlsZSIgJiYgcm0gLWYgIiRjZmdmaWxlLnRtcCIpCi0gIHRlc3QgMCAtZXEgJD8gfHwgX2x0X2Z1bmN0aW9uX3JlcGxhY2VfZmFpbD06Ci1lbHNlCi0gICMgU2F2ZSBhIGBmdW5jX2FwcGVuZCcgZnVuY3Rpb24gY2FsbCBldmVuIHdoZW4gJys9JyBpcyBub3QgYXZhaWxhYmxlCi0gIHNlZCAtZSAncyVmdW5jX2FwcGVuZCBcKFtbYS16QS1aX11dXHsxLFx9XCkgIiVcMT0iJFwxJWcnICRjZmdmaWxlID4gJGNmZ2ZpbGUudG1wIFwKLSAgICAmJiBtdiAtZiAiJGNmZ2ZpbGUudG1wIiAiJGNmZ2ZpbGUiIFwKLSAgICAgIHx8IChybSAtZiAiJGNmZ2ZpbGUiICYmIGNwICIkY2ZnZmlsZS50bXAiICIkY2ZnZmlsZSIgJiYgcm0gLWYgIiRjZmdmaWxlLnRtcCIpCi0gIHRlc3QgMCAtZXEgJD8gfHwgX2x0X2Z1bmN0aW9uX3JlcGxhY2VfZmFpbD06Ci1maQotCi1pZiB0ZXN0IHgiJF9sdF9mdW5jdGlvbl9yZXBsYWNlX2ZhaWwiID0geCI6IjsgdGhlbgotICBBQ19NU0dfV0FSTihbVW5hYmxlIHRvIHN1YnN0aXR1dGUgZXh0ZW5kZWQgc2hlbGwgZnVuY3Rpb25zIGluICRvZmlsZV0pCi1maQotXSkKLQotIyBfTFRfUEFUSF9DT05WRVJTSU9OX0ZVTkNUSU9OUwotIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotIyBEZXRlcm1pbmUgd2hpY2ggZmlsZSBuYW1lIGNvbnZlcnNpb24gZnVuY3Rpb25zIHNob3VsZCBiZSB1c2VkIGJ5Ci0jIGZ1bmNfdG9faG9zdF9maWxlIChhbmQsIGltcGxpY2l0bHksIGJ5IGZ1bmNfdG9faG9zdF9wYXRoKS4gIFRoZXNlIGFyZSBuZWVkZWQKLSMgZm9yIGNlcnRhaW4gY3Jvc3MtY29tcGlsZSBjb25maWd1cmF0aW9ucyBhbmQgbmF0aXZlIG1pbmd3LgotbTRfZGVmdW4oW19MVF9QQVRIX0NPTlZFUlNJT05fRlVOQ1RJT05TXSwKLVtBQ19SRVFVSVJFKFtBQ19DQU5PTklDQUxfSE9TVF0pZG5sCi1BQ19SRVFVSVJFKFtBQ19DQU5PTklDQUxfQlVJTERdKWRubAotQUNfTVNHX0NIRUNLSU5HKFtob3cgdG8gY29udmVydCAkYnVpbGQgZmlsZSBuYW1lcyB0byAkaG9zdCBmb3JtYXRdKQotQUNfQ0FDSEVfVkFMKGx0X2N2X3RvX2hvc3RfZmlsZV9jbWQsCi1bY2FzZSAkaG9zdCBpbgotICAqLSotbWluZ3cqICkKLSAgICBjYXNlICRidWlsZCBpbgotICAgICAgKi0qLW1pbmd3KiApICMgYWN0dWFsbHkgbXN5cwotICAgICAgICBsdF9jdl90b19ob3N0X2ZpbGVfY21kPWZ1bmNfY29udmVydF9maWxlX21zeXNfdG9fdzMyCi0gICAgICAgIDs7Ci0gICAgICAqLSotY3lnd2luKiApCi0gICAgICAgIGx0X2N2X3RvX2hvc3RfZmlsZV9jbWQ9ZnVuY19jb252ZXJ0X2ZpbGVfY3lnd2luX3RvX3czMgotICAgICAgICA7OwotICAgICAgKiApICMgb3RoZXJ3aXNlLCBhc3N1bWUgKm5peAotICAgICAgICBsdF9jdl90b19ob3N0X2ZpbGVfY21kPWZ1bmNfY29udmVydF9maWxlX25peF90b193MzIKLSAgICAgICAgOzsKLSAgICBlc2FjCi0gICAgOzsKLSAgKi0qLWN5Z3dpbiogKQotICAgIGNhc2UgJGJ1aWxkIGluCi0gICAgICAqLSotbWluZ3cqICkgIyBhY3R1YWxseSBtc3lzCi0gICAgICAgIGx0X2N2X3RvX2hvc3RfZmlsZV9jbWQ9ZnVuY19jb252ZXJ0X2ZpbGVfbXN5c190b19jeWd3aW4KLSAgICAgICAgOzsKLSAgICAgICotKi1jeWd3aW4qICkKLSAgICAgICAgbHRfY3ZfdG9faG9zdF9maWxlX2NtZD1mdW5jX2NvbnZlcnRfZmlsZV9ub29wCi0gICAgICAgIDs7Ci0gICAgICAqICkgIyBvdGhlcndpc2UsIGFzc3VtZSAqbml4Ci0gICAgICAgIGx0X2N2X3RvX2hvc3RfZmlsZV9jbWQ9ZnVuY19jb252ZXJ0X2ZpbGVfbml4X3RvX2N5Z3dpbgotICAgICAgICA7OwotICAgIGVzYWMKLSAgICA7OwotICAqICkgIyB1bmhhbmRsZWQgaG9zdHMgKGFuZCAibm9ybWFsIiBuYXRpdmUgYnVpbGRzKQotICAgIGx0X2N2X3RvX2hvc3RfZmlsZV9jbWQ9ZnVuY19jb252ZXJ0X2ZpbGVfbm9vcAotICAgIDs7Ci1lc2FjCi1dKQotdG9faG9zdF9maWxlX2NtZD0kbHRfY3ZfdG9faG9zdF9maWxlX2NtZAotQUNfTVNHX1JFU1VMVChbJGx0X2N2X3RvX2hvc3RfZmlsZV9jbWRdKQotX0xUX0RFQ0woW3RvX2hvc3RfZmlsZV9jbWRdLCBbbHRfY3ZfdG9faG9zdF9maWxlX2NtZF0sCi0gICAgICAgICBbMF0sIFtjb252ZXJ0ICRidWlsZCBmaWxlIG5hbWVzIHRvICRob3N0IGZvcm1hdF0pZG5sCi0KLUFDX01TR19DSEVDS0lORyhbaG93IHRvIGNvbnZlcnQgJGJ1aWxkIGZpbGUgbmFtZXMgdG8gdG9vbGNoYWluIGZvcm1hdF0pCi1BQ19DQUNIRV9WQUwobHRfY3ZfdG9fdG9vbF9maWxlX2NtZCwKLVsjYXNzdW1lIG9yZGluYXJ5IGNyb3NzIHRvb2xzLCBvciBuYXRpdmUgYnVpbGQuCi1sdF9jdl90b190b29sX2ZpbGVfY21kPWZ1bmNfY29udmVydF9maWxlX25vb3AKLWNhc2UgJGhvc3QgaW4KLSAgKi0qLW1pbmd3KiApCi0gICAgY2FzZSAkYnVpbGQgaW4KLSAgICAgICotKi1taW5ndyogKSAjIGFjdHVhbGx5IG1zeXMKLSAgICAgICAgbHRfY3ZfdG9fdG9vbF9maWxlX2NtZD1mdW5jX2NvbnZlcnRfZmlsZV9tc3lzX3RvX3czMgotICAgICAgICA7OwotICAgIGVzYWMKLSAgICA7OwotZXNhYwotXSkKLXRvX3Rvb2xfZmlsZV9jbWQ9JGx0X2N2X3RvX3Rvb2xfZmlsZV9jbWQKLUFDX01TR19SRVNVTFQoWyRsdF9jdl90b190b29sX2ZpbGVfY21kXSkKLV9MVF9ERUNMKFt0b190b29sX2ZpbGVfY21kXSwgW2x0X2N2X3RvX3Rvb2xfZmlsZV9jbWRdLAotICAgICAgICAgWzBdLCBbY29udmVydCAkYnVpbGQgZmlsZXMgdG8gdG9vbGNoYWluIGZvcm1hdF0pZG5sCi1dKSMgX0xUX1BBVEhfQ09OVkVSU0lPTl9GVU5DVElPTlMKLQotIyBIZWxwZXIgZnVuY3Rpb25zIGZvciBvcHRpb24gaGFuZGxpbmcuICAgICAgICAgICAgICAgICAgICAtKi0gQXV0b2NvbmYgLSotCi0jCi0jICAgQ29weXJpZ2h0IChDKSAyMDA0LCAyMDA1LCAyMDA3LCAyMDA4LCAyMDA5IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwKLSMgICBJbmMuCi0jICAgV3JpdHRlbiBieSBHYXJ5IFYuIFZhdWdoYW4sIDIwMDQKLSMKLSMgVGhpcyBmaWxlIGlzIGZyZWUgc29mdHdhcmU7IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24gZ2l2ZXMKLSMgdW5saW1pdGVkIHBlcm1pc3Npb24gdG8gY29weSBhbmQvb3IgZGlzdHJpYnV0ZSBpdCwgd2l0aCBvciB3aXRob3V0Ci0jIG1vZGlmaWNhdGlvbnMsIGFzIGxvbmcgYXMgdGhpcyBub3RpY2UgaXMgcHJlc2VydmVkLgotCi0jIHNlcmlhbCA3IGx0b3B0aW9ucy5tNAotCi0jIFRoaXMgaXMgdG8gaGVscCBhY2xvY2FsIGZpbmQgdGhlc2UgbWFjcm9zLCBhcyBpdCBjYW4ndCBzZWUgbTRfZGVmaW5lLgotQUNfREVGVU4oW0xUT1BUSU9OU19WRVJTSU9OXSwgW200X2lmKFsxXSldKQotCi0KLSMgX0xUX01BTkdMRV9PUFRJT04oTUFDUk8tTkFNRSwgT1BUSU9OLU5BTUUpCi0jIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotbTRfZGVmaW5lKFtfTFRfTUFOR0xFX09QVElPTl0sCi1bW19MVF9PUFRJT05fXW00X2JwYXRzdWJzdCgkMV9fJDIsIFtbXmEtekEtWjAtOV9dXSwgW19dKV0pCi0KLQotIyBfTFRfU0VUX09QVElPTihNQUNSTy1OQU1FLCBPUFRJT04tTkFNRSkKLSMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0jIFNldCBvcHRpb24gT1BUSU9OLU5BTUUgZm9yIG1hY3JvIE1BQ1JPLU5BTUUsIGFuZCBpZiB0aGVyZSBpcyBhCi0jIG1hdGNoaW5nIGhhbmRsZXIgZGVmaW5lZCwgZGlzcGF0Y2ggdG8gaXQuICBPdGhlciBPUFRJT04tTkFNRXMgYXJlCi0jIHNhdmVkIGFzIGEgZmxhZy4KLW00X2RlZmluZShbX0xUX1NFVF9PUFRJT05dLAotW200X2RlZmluZShfTFRfTUFOR0xFX09QVElPTihbJDFdLCBbJDJdKSlkbmwKLW00X2lmZGVmKF9MVF9NQU5HTEVfREVGVU4oWyQxXSwgWyQyXSksCi0gICAgICAgIF9MVF9NQU5HTEVfREVGVU4oWyQxXSwgWyQyXSksCi0gICAgW200X3dhcm5pbmcoW1Vua25vd24gJDEgb3B0aW9uIGAkMiddKV0pW11kbmwKLV0pCi0KLQotIyBfTFRfSUZfT1BUSU9OKE1BQ1JPLU5BTUUsIE9QVElPTi1OQU1FLCBJRi1TRVQsIFtJRi1OT1QtU0VUXSkKLSMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0jIEV4ZWN1dGUgSUYtU0VUIGlmIE9QVElPTiBpcyBzZXQsIElGLU5PVC1TRVQgb3RoZXJ3aXNlLgotbTRfZGVmaW5lKFtfTFRfSUZfT1BUSU9OXSwKLVttNF9pZmRlZihfTFRfTUFOR0xFX09QVElPTihbJDFdLCBbJDJdKSwgWyQzXSwgWyQ0XSldKQotCi0KLSMgX0xUX1VOTEVTU19PUFRJT05TKE1BQ1JPLU5BTUUsIE9QVElPTi1MSVNULCBJRi1OT1QtU0VUKQotIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0jIEV4ZWN1dGUgSUYtTk9ULVNFVCB1bmxlc3MgYWxsIG9wdGlvbnMgaW4gT1BUSU9OLUxJU1QgZm9yIE1BQ1JPLU5BTUUKLSMgYXJlIHNldC4KLW00X2RlZmluZShbX0xUX1VOTEVTU19PUFRJT05TXSwKLVttNF9mb3JlYWNoKFtfTFRfT3B0aW9uXSwgbTRfc3BsaXQobTRfbm9ybWFsaXplKFskMl0pKSwKLQkgICAgW200X2lmZGVmKF9MVF9NQU5HTEVfT1BUSU9OKFskMV0sIF9MVF9PcHRpb24pLAotCQkgICAgICBbbTRfZGVmaW5lKFskMF9mb3VuZF0pXSldKVtdZG5sCi1tNF9pZmRlZihbJDBfZm91bmRdLCBbbTRfdW5kZWZpbmUoWyQwX2ZvdW5kXSldLCBbJDMKLV0pW11kbmwKLV0pCi0KLQotIyBfTFRfU0VUX09QVElPTlMoTUFDUk8tTkFNRSwgT1BUSU9OLUxJU1QpCi0jIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSMgT1BUSU9OLUxJU1QgaXMgYSBzcGFjZS1zZXBhcmF0ZWQgbGlzdCBvZiBMaWJ0b29sIG9wdGlvbnMgYXNzb2NpYXRlZAotIyB3aXRoIE1BQ1JPLU5BTUUuICBJZiBhbnkgT1BUSU9OIGhhcyBhIG1hdGNoaW5nIGhhbmRsZXIgZGVjbGFyZWQgd2l0aAotIyBMVF9PUFRJT05fREVGSU5FLCBkaXNwYXRjaCB0byB0aGF0IG1hY3JvOyBvdGhlcndpc2UgY29tcGxhaW4gYWJvdXQKLSMgdGhlIHVua25vd24gb3B0aW9uIGFuZCBleGl0LgotbTRfZGVmdW4oW19MVF9TRVRfT1BUSU9OU10sCi1bIyBTZXQgb3B0aW9ucwotbTRfZm9yZWFjaChbX0xUX09wdGlvbl0sIG00X3NwbGl0KG00X25vcm1hbGl6ZShbJDJdKSksCi0gICAgW19MVF9TRVRfT1BUSU9OKFskMV0sIF9MVF9PcHRpb24pXSkKLQotbTRfaWYoWyQxXSxbTFRfSU5JVF0sWwotICBkbmwKLSAgZG5sIFNpbXBseSBzZXQgc29tZSBkZWZhdWx0IHZhbHVlcyAoaS5lIG9mZikgaWYgYm9vbGVhbiBvcHRpb25zIHdlcmUgbm90Ci0gIGRubCBzcGVjaWZpZWQ6Ci0gIF9MVF9VTkxFU1NfT1BUSU9OUyhbTFRfSU5JVF0sIFtkbG9wZW5dLCBbZW5hYmxlX2Rsb3Blbj1ubwotICBdKQotICBfTFRfVU5MRVNTX09QVElPTlMoW0xUX0lOSVRdLCBbd2luMzItZGxsXSwgW2VuYWJsZV93aW4zMl9kbGw9bm8KLSAgXSkKLSAgZG5sCi0gIGRubCBJZiBubyByZWZlcmVuY2Ugd2FzIG1hZGUgdG8gdmFyaW91cyBwYWlycyBvZiBvcHBvc2luZyBvcHRpb25zLCB0aGVuCi0gIGRubCB3ZSBydW4gdGhlIGRlZmF1bHQgbW9kZSBoYW5kbGVyIGZvciB0aGUgcGFpci4gIEZvciBleGFtcGxlLCBpZiBuZWl0aGVyCi0gIGRubCBgc2hhcmVkJyBub3IgYGRpc2FibGUtc2hhcmVkJyB3YXMgcGFzc2VkLCB3ZSBlbmFibGUgYnVpbGRpbmcgb2Ygc2hhcmVkCi0gIGRubCBhcmNoaXZlcyBieSBkZWZhdWx0OgotICBfTFRfVU5MRVNTX09QVElPTlMoW0xUX0lOSVRdLCBbc2hhcmVkIGRpc2FibGUtc2hhcmVkXSwgW19MVF9FTkFCTEVfU0hBUkVEXSkKLSAgX0xUX1VOTEVTU19PUFRJT05TKFtMVF9JTklUXSwgW3N0YXRpYyBkaXNhYmxlLXN0YXRpY10sIFtfTFRfRU5BQkxFX1NUQVRJQ10pCi0gIF9MVF9VTkxFU1NfT1BUSU9OUyhbTFRfSU5JVF0sIFtwaWMtb25seSBuby1waWNdLCBbX0xUX1dJVEhfUElDXSkKLSAgX0xUX1VOTEVTU19PUFRJT05TKFtMVF9JTklUXSwgW2Zhc3QtaW5zdGFsbCBkaXNhYmxlLWZhc3QtaW5zdGFsbF0sCi0gIAkJICAgW19MVF9FTkFCTEVfRkFTVF9JTlNUQUxMXSkKLSAgXSkKLV0pIyBfTFRfU0VUX09QVElPTlMKLQotCi0KLSMgX0xUX01BTkdMRV9ERUZVTihNQUNSTy1OQU1FLCBPUFRJT04tTkFNRSkKLSMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLW00X2RlZmluZShbX0xUX01BTkdMRV9ERUZVTl0sCi1bW19MVF9PUFRJT05fREVGVU5fXW00X2JwYXRzdWJzdChtNF90b3VwcGVyKFskMV9fJDJdKSwgW1teQS1aMC05X11dLCBbX10pXSkKLQotCi0jIExUX09QVElPTl9ERUZJTkUoTUFDUk8tTkFNRSwgT1BUSU9OLU5BTUUsIENPREUpCi0jIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi1tNF9kZWZpbmUoW0xUX09QVElPTl9ERUZJTkVdLAotW200X2RlZmluZShfTFRfTUFOR0xFX0RFRlVOKFskMV0sIFskMl0pLCBbJDNdKVtdZG5sCi1dKSMgTFRfT1BUSU9OX0RFRklORQotCi0KLSMgZGxvcGVuCi0jIC0tLS0tLQotTFRfT1BUSU9OX0RFRklORShbTFRfSU5JVF0sIFtkbG9wZW5dLCBbZW5hYmxlX2Rsb3Blbj15ZXMKLV0pCi0KLUFVX0RFRlVOKFtBQ19MSUJUT09MX0RMT1BFTl0sCi1bX0xUX1NFVF9PUFRJT04oW0xUX0lOSVRdLCBbZGxvcGVuXSkKLUFDX0RJQUdOT1NFKFtvYnNvbGV0ZV0sCi1bJDA6IFJlbW92ZSB0aGlzIHdhcm5pbmcgYW5kIHRoZSBjYWxsIHRvIF9MVF9TRVRfT1BUSU9OIHdoZW4geW91Ci1wdXQgdGhlIGBkbG9wZW4nIG9wdGlvbiBpbnRvIExUX0lOSVQncyBmaXJzdCBwYXJhbWV0ZXIuXSkKLV0pCi0KLWRubCBhY2xvY2FsLTEuNCBiYWNrd2FyZHMgY29tcGF0aWJpbGl0eToKLWRubCBBQ19ERUZVTihbQUNfTElCVE9PTF9ETE9QRU5dLCBbXSkKLQotCi0jIHdpbjMyLWRsbAotIyAtLS0tLS0tLS0KLSMgRGVjbGFyZSBwYWNrYWdlIHN1cHBvcnQgZm9yIGJ1aWxkaW5nIHdpbjMyIGRsbCdzLgotTFRfT1BUSU9OX0RFRklORShbTFRfSU5JVF0sIFt3aW4zMi1kbGxdLAotW2VuYWJsZV93aW4zMl9kbGw9eWVzCi0KLWNhc2UgJGhvc3QgaW4KLSotKi1jeWd3aW4qIHwgKi0qLW1pbmd3KiB8ICotKi1wdzMyKiB8ICotKi1jZWdjYyopCi0gIEFDX0NIRUNLX1RPT0woQVMsIGFzLCBmYWxzZSkKLSAgQUNfQ0hFQ0tfVE9PTChETExUT09MLCBkbGx0b29sLCBmYWxzZSkKLSAgQUNfQ0hFQ0tfVE9PTChPQkpEVU1QLCBvYmpkdW1wLCBmYWxzZSkKLSAgOzsKLWVzYWMKLQotdGVzdCAteiAiJEFTIiAmJiBBUz1hcwotX0xUX0RFQ0woW10sIFtBU10sICAgICAgWzFdLCBbQXNzZW1ibGVyIHByb2dyYW1dKWRubAotCi10ZXN0IC16ICIkRExMVE9PTCIgJiYgRExMVE9PTD1kbGx0b29sCi1fTFRfREVDTChbXSwgW0RMTFRPT0xdLCBbMV0sIFtETEwgY3JlYXRpb24gcHJvZ3JhbV0pZG5sCi0KLXRlc3QgLXogIiRPQkpEVU1QIiAmJiBPQkpEVU1QPW9iamR1bXAKLV9MVF9ERUNMKFtdLCBbT0JKRFVNUF0sIFsxXSwgW09iamVjdCBkdW1wZXIgcHJvZ3JhbV0pZG5sCi1dKSMgd2luMzItZGxsCi0KLUFVX0RFRlVOKFtBQ19MSUJUT09MX1dJTjMyX0RMTF0sCi1bQUNfUkVRVUlSRShbQUNfQ0FOT05JQ0FMX0hPU1RdKWRubAotX0xUX1NFVF9PUFRJT04oW0xUX0lOSVRdLCBbd2luMzItZGxsXSkKLUFDX0RJQUdOT1NFKFtvYnNvbGV0ZV0sCi1bJDA6IFJlbW92ZSB0aGlzIHdhcm5pbmcgYW5kIHRoZSBjYWxsIHRvIF9MVF9TRVRfT1BUSU9OIHdoZW4geW91Ci1wdXQgdGhlIGB3aW4zMi1kbGwnIG9wdGlvbiBpbnRvIExUX0lOSVQncyBmaXJzdCBwYXJhbWV0ZXIuXSkKLV0pCi0KLWRubCBhY2xvY2FsLTEuNCBiYWNrd2FyZHMgY29tcGF0aWJpbGl0eToKLWRubCBBQ19ERUZVTihbQUNfTElCVE9PTF9XSU4zMl9ETExdLCBbXSkKLQotCi0jIF9MVF9FTkFCTEVfU0hBUkVEKFtERUZBVUxUXSkKLSMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotIyBpbXBsZW1lbnQgdGhlIC0tZW5hYmxlLXNoYXJlZCBmbGFnLCBhbmQgc3VwcG9ydHMgdGhlIGBzaGFyZWQnIGFuZAotIyBgZGlzYWJsZS1zaGFyZWQnIExUX0lOSVQgb3B0aW9ucy4KLSMgREVGQVVMVCBpcyBlaXRoZXIgYHllcycgb3IgYG5vJy4gIElmIG9taXR0ZWQsIGl0IGRlZmF1bHRzIHRvIGB5ZXMnLgotbTRfZGVmaW5lKFtfTFRfRU5BQkxFX1NIQVJFRF0sCi1bbTRfZGVmaW5lKFtfTFRfRU5BQkxFX1NIQVJFRF9ERUZBVUxUXSwgW200X2lmKCQxLCBubywgbm8sIHllcyldKWRubAotQUNfQVJHX0VOQUJMRShbc2hhcmVkXSwKLSAgICBbQVNfSEVMUF9TVFJJTkcoWy0tZW5hYmxlLXNoYXJlZEA8OkA9UEtHU0A6PkBdLAotCVtidWlsZCBzaGFyZWQgbGlicmFyaWVzIEA8OkBkZWZhdWx0PV1fTFRfRU5BQkxFX1NIQVJFRF9ERUZBVUxUW0A6PkBdKV0sCi0gICAgW3A9JHtQQUNLQUdFLWRlZmF1bHR9Ci0gICAgY2FzZSAkZW5hYmxldmFsIGluCi0gICAgeWVzKSBlbmFibGVfc2hhcmVkPXllcyA7OwotICAgIG5vKSBlbmFibGVfc2hhcmVkPW5vIDs7Ci0gICAgKikKLSAgICAgIGVuYWJsZV9zaGFyZWQ9bm8KLSAgICAgICMgTG9vayBhdCB0aGUgYXJndW1lbnQgd2UgZ290LiAgV2UgdXNlIGFsbCB0aGUgY29tbW9uIGxpc3Qgc2VwYXJhdG9ycy4KLSAgICAgIGx0X3NhdmVfaWZzPSIkSUZTIjsgSUZTPSIke0lGU30kUEFUSF9TRVBBUkFUT1IsIgotICAgICAgZm9yIHBrZyBpbiAkZW5hYmxldmFsOyBkbwotCUlGUz0iJGx0X3NhdmVfaWZzIgotCWlmIHRlc3QgIlgkcGtnIiA9ICJYJHAiOyB0aGVuCi0JICBlbmFibGVfc2hhcmVkPXllcwotCWZpCi0gICAgICBkb25lCi0gICAgICBJRlM9IiRsdF9zYXZlX2lmcyIKLSAgICAgIDs7Ci0gICAgZXNhY10sCi0gICAgW2VuYWJsZV9zaGFyZWQ9XV9MVF9FTkFCTEVfU0hBUkVEX0RFRkFVTFQpCi0KLSAgICBfTFRfREVDTChbYnVpbGRfbGlidG9vbF9saWJzXSwgW2VuYWJsZV9zaGFyZWRdLCBbMF0sCi0JW1doZXRoZXIgb3Igbm90IHRvIGJ1aWxkIHNoYXJlZCBsaWJyYXJpZXNdKQotXSkjIF9MVF9FTkFCTEVfU0hBUkVECi0KLUxUX09QVElPTl9ERUZJTkUoW0xUX0lOSVRdLCBbc2hhcmVkXSwgW19MVF9FTkFCTEVfU0hBUkVEKFt5ZXNdKV0pCi1MVF9PUFRJT05fREVGSU5FKFtMVF9JTklUXSwgW2Rpc2FibGUtc2hhcmVkXSwgW19MVF9FTkFCTEVfU0hBUkVEKFtub10pXSkKLQotIyBPbGQgbmFtZXM6Ci1BQ19ERUZVTihbQUNfRU5BQkxFX1NIQVJFRF0sCi1bX0xUX1NFVF9PUFRJT04oW0xUX0lOSVRdLCBtNF9pZihbJDFdLCBbbm9dLCBbZGlzYWJsZS1dKVtzaGFyZWRdKQotXSkKLQotQUNfREVGVU4oW0FDX0RJU0FCTEVfU0hBUkVEXSwKLVtfTFRfU0VUX09QVElPTihbTFRfSU5JVF0sIFtkaXNhYmxlLXNoYXJlZF0pCi1dKQotCi1BVV9ERUZVTihbQU1fRU5BQkxFX1NIQVJFRF0sIFtBQ19FTkFCTEVfU0hBUkVEKCRAKV0pCi1BVV9ERUZVTihbQU1fRElTQUJMRV9TSEFSRURdLCBbQUNfRElTQUJMRV9TSEFSRUQoJEApXSkKLQotZG5sIGFjbG9jYWwtMS40IGJhY2t3YXJkcyBjb21wYXRpYmlsaXR5OgotZG5sIEFDX0RFRlVOKFtBTV9FTkFCTEVfU0hBUkVEXSwgW10pCi1kbmwgQUNfREVGVU4oW0FNX0RJU0FCTEVfU0hBUkVEXSwgW10pCi0KLQotCi0jIF9MVF9FTkFCTEVfU1RBVElDKFtERUZBVUxUXSkKLSMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotIyBpbXBsZW1lbnQgdGhlIC0tZW5hYmxlLXN0YXRpYyBmbGFnLCBhbmQgc3VwcG9ydCB0aGUgYHN0YXRpYycgYW5kCi0jIGBkaXNhYmxlLXN0YXRpYycgTFRfSU5JVCBvcHRpb25zLgotIyBERUZBVUxUIGlzIGVpdGhlciBgeWVzJyBvciBgbm8nLiAgSWYgb21pdHRlZCwgaXQgZGVmYXVsdHMgdG8gYHllcycuCi1tNF9kZWZpbmUoW19MVF9FTkFCTEVfU1RBVElDXSwKLVttNF9kZWZpbmUoW19MVF9FTkFCTEVfU1RBVElDX0RFRkFVTFRdLCBbbTRfaWYoJDEsIG5vLCBubywgeWVzKV0pZG5sCi1BQ19BUkdfRU5BQkxFKFtzdGF0aWNdLAotICAgIFtBU19IRUxQX1NUUklORyhbLS1lbmFibGUtc3RhdGljQDw6QD1QS0dTQDo+QF0sCi0JW2J1aWxkIHN0YXRpYyBsaWJyYXJpZXMgQDw6QGRlZmF1bHQ9XV9MVF9FTkFCTEVfU1RBVElDX0RFRkFVTFRbQDo+QF0pXSwKLSAgICBbcD0ke1BBQ0tBR0UtZGVmYXVsdH0KLSAgICBjYXNlICRlbmFibGV2YWwgaW4KLSAgICB5ZXMpIGVuYWJsZV9zdGF0aWM9eWVzIDs7Ci0gICAgbm8pIGVuYWJsZV9zdGF0aWM9bm8gOzsKLSAgICAqKQotICAgICBlbmFibGVfc3RhdGljPW5vCi0gICAgICAjIExvb2sgYXQgdGhlIGFyZ3VtZW50IHdlIGdvdC4gIFdlIHVzZSBhbGwgdGhlIGNvbW1vbiBsaXN0IHNlcGFyYXRvcnMuCi0gICAgICBsdF9zYXZlX2lmcz0iJElGUyI7IElGUz0iJHtJRlN9JFBBVEhfU0VQQVJBVE9SLCIKLSAgICAgIGZvciBwa2cgaW4gJGVuYWJsZXZhbDsgZG8KLQlJRlM9IiRsdF9zYXZlX2lmcyIKLQlpZiB0ZXN0ICJYJHBrZyIgPSAiWCRwIjsgdGhlbgotCSAgZW5hYmxlX3N0YXRpYz15ZXMKLQlmaQotICAgICAgZG9uZQotICAgICAgSUZTPSIkbHRfc2F2ZV9pZnMiCi0gICAgICA7OwotICAgIGVzYWNdLAotICAgIFtlbmFibGVfc3RhdGljPV1fTFRfRU5BQkxFX1NUQVRJQ19ERUZBVUxUKQotCi0gICAgX0xUX0RFQ0woW2J1aWxkX29sZF9saWJzXSwgW2VuYWJsZV9zdGF0aWNdLCBbMF0sCi0JW1doZXRoZXIgb3Igbm90IHRvIGJ1aWxkIHN0YXRpYyBsaWJyYXJpZXNdKQotXSkjIF9MVF9FTkFCTEVfU1RBVElDCi0KLUxUX09QVElPTl9ERUZJTkUoW0xUX0lOSVRdLCBbc3RhdGljXSwgW19MVF9FTkFCTEVfU1RBVElDKFt5ZXNdKV0pCi1MVF9PUFRJT05fREVGSU5FKFtMVF9JTklUXSwgW2Rpc2FibGUtc3RhdGljXSwgW19MVF9FTkFCTEVfU1RBVElDKFtub10pXSkKLQotIyBPbGQgbmFtZXM6Ci1BQ19ERUZVTihbQUNfRU5BQkxFX1NUQVRJQ10sCi1bX0xUX1NFVF9PUFRJT04oW0xUX0lOSVRdLCBtNF9pZihbJDFdLCBbbm9dLCBbZGlzYWJsZS1dKVtzdGF0aWNdKQotXSkKLQotQUNfREVGVU4oW0FDX0RJU0FCTEVfU1RBVElDXSwKLVtfTFRfU0VUX09QVElPTihbTFRfSU5JVF0sIFtkaXNhYmxlLXN0YXRpY10pCi1dKQotCi1BVV9ERUZVTihbQU1fRU5BQkxFX1NUQVRJQ10sIFtBQ19FTkFCTEVfU1RBVElDKCRAKV0pCi1BVV9ERUZVTihbQU1fRElTQUJMRV9TVEFUSUNdLCBbQUNfRElTQUJMRV9TVEFUSUMoJEApXSkKLQotZG5sIGFjbG9jYWwtMS40IGJhY2t3YXJkcyBjb21wYXRpYmlsaXR5OgotZG5sIEFDX0RFRlVOKFtBTV9FTkFCTEVfU1RBVElDXSwgW10pCi1kbmwgQUNfREVGVU4oW0FNX0RJU0FCTEVfU1RBVElDXSwgW10pCi0KLQotCi0jIF9MVF9FTkFCTEVfRkFTVF9JTlNUQUxMKFtERUZBVUxUXSkKLSMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotIyBpbXBsZW1lbnQgdGhlIC0tZW5hYmxlLWZhc3QtaW5zdGFsbCBmbGFnLCBhbmQgc3VwcG9ydCB0aGUgYGZhc3QtaW5zdGFsbCcKLSMgYW5kIGBkaXNhYmxlLWZhc3QtaW5zdGFsbCcgTFRfSU5JVCBvcHRpb25zLgotIyBERUZBVUxUIGlzIGVpdGhlciBgeWVzJyBvciBgbm8nLiAgSWYgb21pdHRlZCwgaXQgZGVmYXVsdHMgdG8gYHllcycuCi1tNF9kZWZpbmUoW19MVF9FTkFCTEVfRkFTVF9JTlNUQUxMXSwKLVttNF9kZWZpbmUoW19MVF9FTkFCTEVfRkFTVF9JTlNUQUxMX0RFRkFVTFRdLCBbbTRfaWYoJDEsIG5vLCBubywgeWVzKV0pZG5sCi1BQ19BUkdfRU5BQkxFKFtmYXN0LWluc3RhbGxdLAotICAgIFtBU19IRUxQX1NUUklORyhbLS1lbmFibGUtZmFzdC1pbnN0YWxsQDw6QD1QS0dTQDo+QF0sCi0gICAgW29wdGltaXplIGZvciBmYXN0IGluc3RhbGxhdGlvbiBAPDpAZGVmYXVsdD1dX0xUX0VOQUJMRV9GQVNUX0lOU1RBTExfREVGQVVMVFtAOj5AXSldLAotICAgIFtwPSR7UEFDS0FHRS1kZWZhdWx0fQotICAgIGNhc2UgJGVuYWJsZXZhbCBpbgotICAgIHllcykgZW5hYmxlX2Zhc3RfaW5zdGFsbD15ZXMgOzsKLSAgICBubykgZW5hYmxlX2Zhc3RfaW5zdGFsbD1ubyA7OwotICAgICopCi0gICAgICBlbmFibGVfZmFzdF9pbnN0YWxsPW5vCi0gICAgICAjIExvb2sgYXQgdGhlIGFyZ3VtZW50IHdlIGdvdC4gIFdlIHVzZSBhbGwgdGhlIGNvbW1vbiBsaXN0IHNlcGFyYXRvcnMuCi0gICAgICBsdF9zYXZlX2lmcz0iJElGUyI7IElGUz0iJHtJRlN9JFBBVEhfU0VQQVJBVE9SLCIKLSAgICAgIGZvciBwa2cgaW4gJGVuYWJsZXZhbDsgZG8KLQlJRlM9IiRsdF9zYXZlX2lmcyIKLQlpZiB0ZXN0ICJYJHBrZyIgPSAiWCRwIjsgdGhlbgotCSAgZW5hYmxlX2Zhc3RfaW5zdGFsbD15ZXMKLQlmaQotICAgICAgZG9uZQotICAgICAgSUZTPSIkbHRfc2F2ZV9pZnMiCi0gICAgICA7OwotICAgIGVzYWNdLAotICAgIFtlbmFibGVfZmFzdF9pbnN0YWxsPV1fTFRfRU5BQkxFX0ZBU1RfSU5TVEFMTF9ERUZBVUxUKQotCi1fTFRfREVDTChbZmFzdF9pbnN0YWxsXSwgW2VuYWJsZV9mYXN0X2luc3RhbGxdLCBbMF0sCi0JIFtXaGV0aGVyIG9yIG5vdCB0byBvcHRpbWl6ZSBmb3IgZmFzdCBpbnN0YWxsYXRpb25dKWRubAotXSkjIF9MVF9FTkFCTEVfRkFTVF9JTlNUQUxMCi0KLUxUX09QVElPTl9ERUZJTkUoW0xUX0lOSVRdLCBbZmFzdC1pbnN0YWxsXSwgW19MVF9FTkFCTEVfRkFTVF9JTlNUQUxMKFt5ZXNdKV0pCi1MVF9PUFRJT05fREVGSU5FKFtMVF9JTklUXSwgW2Rpc2FibGUtZmFzdC1pbnN0YWxsXSwgW19MVF9FTkFCTEVfRkFTVF9JTlNUQUxMKFtub10pXSkKLQotIyBPbGQgbmFtZXM6Ci1BVV9ERUZVTihbQUNfRU5BQkxFX0ZBU1RfSU5TVEFMTF0sCi1bX0xUX1NFVF9PUFRJT04oW0xUX0lOSVRdLCBtNF9pZihbJDFdLCBbbm9dLCBbZGlzYWJsZS1dKVtmYXN0LWluc3RhbGxdKQotQUNfRElBR05PU0UoW29ic29sZXRlXSwKLVskMDogUmVtb3ZlIHRoaXMgd2FybmluZyBhbmQgdGhlIGNhbGwgdG8gX0xUX1NFVF9PUFRJT04gd2hlbiB5b3UgcHV0Ci10aGUgYGZhc3QtaW5zdGFsbCcgb3B0aW9uIGludG8gTFRfSU5JVCdzIGZpcnN0IHBhcmFtZXRlci5dKQotXSkKLQotQVVfREVGVU4oW0FDX0RJU0FCTEVfRkFTVF9JTlNUQUxMXSwKLVtfTFRfU0VUX09QVElPTihbTFRfSU5JVF0sIFtkaXNhYmxlLWZhc3QtaW5zdGFsbF0pCi1BQ19ESUFHTk9TRShbb2Jzb2xldGVdLAotWyQwOiBSZW1vdmUgdGhpcyB3YXJuaW5nIGFuZCB0aGUgY2FsbCB0byBfTFRfU0VUX09QVElPTiB3aGVuIHlvdSBwdXQKLXRoZSBgZGlzYWJsZS1mYXN0LWluc3RhbGwnIG9wdGlvbiBpbnRvIExUX0lOSVQncyBmaXJzdCBwYXJhbWV0ZXIuXSkKLV0pCi0KLWRubCBhY2xvY2FsLTEuNCBiYWNrd2FyZHMgY29tcGF0aWJpbGl0eToKLWRubCBBQ19ERUZVTihbQUNfRU5BQkxFX0ZBU1RfSU5TVEFMTF0sIFtdKQotZG5sIEFDX0RFRlVOKFtBTV9ESVNBQkxFX0ZBU1RfSU5TVEFMTF0sIFtdKQotCi0KLSMgX0xUX1dJVEhfUElDKFtNT0RFXSkKLSMgLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSMgaW1wbGVtZW50IHRoZSAtLXdpdGgtcGljIGZsYWcsIGFuZCBzdXBwb3J0IHRoZSBgcGljLW9ubHknIGFuZCBgbm8tcGljJwotIyBMVF9JTklUIG9wdGlvbnMuCi0jIE1PREUgaXMgZWl0aGVyIGB5ZXMnIG9yIGBubycuICBJZiBvbWl0dGVkLCBpdCBkZWZhdWx0cyB0byBgYm90aCcuCi1tNF9kZWZpbmUoW19MVF9XSVRIX1BJQ10sCi1bQUNfQVJHX1dJVEgoW3BpY10sCi0gICAgW0FTX0hFTFBfU1RSSU5HKFstLXdpdGgtcGljXSwKLQlbdHJ5IHRvIHVzZSBvbmx5IFBJQy9ub24tUElDIG9iamVjdHMgQDw6QGRlZmF1bHQ9dXNlIGJvdGhAOj5AXSldLAotICAgIFtwaWNfbW9kZT0iJHdpdGh2YWwiXSwKLSAgICBbcGljX21vZGU9ZGVmYXVsdF0pCi0KLXRlc3QgLXogIiRwaWNfbW9kZSIgJiYgcGljX21vZGU9bTRfZGVmYXVsdChbJDFdLCBbZGVmYXVsdF0pCi0KLV9MVF9ERUNMKFtdLCBbcGljX21vZGVdLCBbMF0sIFtXaGF0IHR5cGUgb2Ygb2JqZWN0cyB0byBidWlsZF0pZG5sCi1dKSMgX0xUX1dJVEhfUElDCi0KLUxUX09QVElPTl9ERUZJTkUoW0xUX0lOSVRdLCBbcGljLW9ubHldLCBbX0xUX1dJVEhfUElDKFt5ZXNdKV0pCi1MVF9PUFRJT05fREVGSU5FKFtMVF9JTklUXSwgW25vLXBpY10sIFtfTFRfV0lUSF9QSUMoW25vXSldKQotCi0jIE9sZCBuYW1lOgotQVVfREVGVU4oW0FDX0xJQlRPT0xfUElDTU9ERV0sCi1bX0xUX1NFVF9PUFRJT04oW0xUX0lOSVRdLCBbcGljLW9ubHldKQotQUNfRElBR05PU0UoW29ic29sZXRlXSwKLVskMDogUmVtb3ZlIHRoaXMgd2FybmluZyBhbmQgdGhlIGNhbGwgdG8gX0xUX1NFVF9PUFRJT04gd2hlbiB5b3UKLXB1dCB0aGUgYHBpYy1vbmx5JyBvcHRpb24gaW50byBMVF9JTklUJ3MgZmlyc3QgcGFyYW1ldGVyLl0pCi1dKQotCi1kbmwgYWNsb2NhbC0xLjQgYmFja3dhcmRzIGNvbXBhdGliaWxpdHk6Ci1kbmwgQUNfREVGVU4oW0FDX0xJQlRPT0xfUElDTU9ERV0sIFtdKQotCi0KLW00X2RlZmluZShbX0xURExfTU9ERV0sIFtdKQotTFRfT1BUSU9OX0RFRklORShbTFRETF9JTklUXSwgW25vbnJlY3Vyc2l2ZV0sCi0JCSBbbTRfZGVmaW5lKFtfTFRETF9NT0RFXSwgW25vbnJlY3Vyc2l2ZV0pXSkKLUxUX09QVElPTl9ERUZJTkUoW0xURExfSU5JVF0sIFtyZWN1cnNpdmVdLAotCQkgW200X2RlZmluZShbX0xURExfTU9ERV0sIFtyZWN1cnNpdmVdKV0pCi1MVF9PUFRJT05fREVGSU5FKFtMVERMX0lOSVRdLCBbc3VicHJvamVjdF0sCi0JCSBbbTRfZGVmaW5lKFtfTFRETF9NT0RFXSwgW3N1YnByb2plY3RdKV0pCi0KLW00X2RlZmluZShbX0xURExfVFlQRV0sIFtdKQotTFRfT1BUSU9OX0RFRklORShbTFRETF9JTklUXSwgW2luc3RhbGxhYmxlXSwKLQkJIFttNF9kZWZpbmUoW19MVERMX1RZUEVdLCBbaW5zdGFsbGFibGVdKV0pCi1MVF9PUFRJT05fREVGSU5FKFtMVERMX0lOSVRdLCBbY29udmVuaWVuY2VdLAotCQkgW200X2RlZmluZShbX0xURExfVFlQRV0sIFtjb252ZW5pZW5jZV0pXSkKLQotIyBsdHN1Z2FyLm00IC0tIGxpYnRvb2wgbTQgYmFzZSBsYXllci4gICAgICAgICAgICAgICAgICAgICAgICAgLSotQXV0b2NvbmYtKi0KLSMKLSMgQ29weXJpZ2h0IChDKSAyMDA0LCAyMDA1LCAyMDA3LCAyMDA4IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgotIyBXcml0dGVuIGJ5IEdhcnkgVi4gVmF1Z2hhbiwgMjAwNAotIwotIyBUaGlzIGZpbGUgaXMgZnJlZSBzb2Z0d2FyZTsgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiBnaXZlcwotIyB1bmxpbWl0ZWQgcGVybWlzc2lvbiB0byBjb3B5IGFuZC9vciBkaXN0cmlidXRlIGl0LCB3aXRoIG9yIHdpdGhvdXQKLSMgbW9kaWZpY2F0aW9ucywgYXMgbG9uZyBhcyB0aGlzIG5vdGljZSBpcyBwcmVzZXJ2ZWQuCi0KLSMgc2VyaWFsIDYgbHRzdWdhci5tNAotCi0jIFRoaXMgaXMgdG8gaGVscCBhY2xvY2FsIGZpbmQgdGhlc2UgbWFjcm9zLCBhcyBpdCBjYW4ndCBzZWUgbTRfZGVmaW5lLgotQUNfREVGVU4oW0xUU1VHQVJfVkVSU0lPTl0sIFttNF9pZihbMC4xXSldKQotCi0KLSMgbHRfam9pbihTRVAsIEFSRzEsIFtBUkcyLi4uXSkKLSMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSMgUHJvZHVjZSBBUkcxU0VQQVJHMi4uLlNFUEFSR24sIG9taXR0aW5nIFtdIGFyZ3VtZW50cyBhbmQgdGhlaXIKLSMgYXNzb2NpYXRlZCBzZXBhcmF0b3IuCi0jIE5lZWRlZCB1bnRpbCB3ZSBjYW4gcmVseSBvbiBtNF9qb2luIGZyb20gQXV0b2NvbmYgMi42Miwgc2luY2UgYWxsIGVhcmxpZXIKLSMgdmVyc2lvbnMgaW4gbTRzdWdhciBoYWQgYnVncy4KLW00X2RlZmluZShbbHRfam9pbl0sCi1bbTRfaWYoWyQjXSwgWzFdLCBbXSwKLSAgICAgICBbJCNdLCBbMl0sIFtbJDJdXSwKLSAgICAgICBbbTRfaWYoWyQyXSwgW10sIFtdLCBbWyQyXV9dKSQwKFskMV0sIG00X3NoaWZ0KG00X3NoaWZ0KCRAKSkpXSldKQotbTRfZGVmaW5lKFtfbHRfam9pbl0sCi1bbTRfaWYoWyQjJDJdLCBbMl0sIFtdLAotICAgICAgIFttNF9pZihbJDJdLCBbXSwgW10sIFtbJDEkMl1dKSQwKFskMV0sIG00X3NoaWZ0KG00X3NoaWZ0KCRAKSkpXSldKQotCi0KLSMgbHRfY2FyKExJU1QpCi0jIGx0X2NkcihMSVNUKQotIyAtLS0tLS0tLS0tLS0KLSMgTWFuaXB1bGF0ZSBtNCBsaXN0cy4KLSMgVGhlc2UgbWFjcm9zIGFyZSBuZWNlc3NhcnkgYXMgbG9uZyBhcyB3aWxsIHN0aWxsIG5lZWQgdG8gc3VwcG9ydAotIyBBdXRvY29uZi0yLjU5IHdoaWNoIHF1b3RlcyBkaWZmZXJlbnRseS4KLW00X2RlZmluZShbbHRfY2FyXSwgW1skMV1dKQotbTRfZGVmaW5lKFtsdF9jZHJdLAotW200X2lmKFskI10sIDAsIFttNF9mYXRhbChbJDA6IGNhbm5vdCBiZSBjYWxsZWQgd2l0aG91dCBhcmd1bWVudHNdKV0sCi0gICAgICAgWyQjXSwgMSwgW10sCi0gICAgICAgW200X2RxdW90ZShtNF9zaGlmdCgkQCkpXSldKQotbTRfZGVmaW5lKFtsdF91bnF1b3RlXSwgJDEpCi0KLQotIyBsdF9hcHBlbmQoTUFDUk8tTkFNRSwgU1RSSU5HLCBbU0VQQVJBVE9SXSkKLSMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0jIFJlZGVmaW5lIE1BQ1JPLU5BTUUgdG8gaG9sZCBpdHMgZm9ybWVyIGNvbnRlbnQgcGx1cyBgU0VQQVJBVE9SJ2BTVFJJTkcnLgotIyBOb3RlIHRoYXQgbmVpdGhlciBTRVBBUkFUT1Igbm9yIFNUUklORyBhcmUgZXhwYW5kZWQ7IHRoZXkgYXJlIGFwcGVuZGVkCi0jIHRvIE1BQ1JPLU5BTUUgYXMgaXMgKGxlYXZpbmcgdGhlIGV4cGFuc2lvbiBmb3Igd2hlbiBNQUNSTy1OQU1FIGlzIGludm9rZWQpLgotIyBObyBTRVBBUkFUT1IgaXMgb3V0cHV0IGlmIE1BQ1JPLU5BTUUgd2FzIHByZXZpb3VzbHkgdW5kZWZpbmVkIChkaWZmZXJlbnQKLSMgdGhhbiBkZWZpbmVkIGFuZCBlbXB0eSkuCi0jCi0jIFRoaXMgbWFjcm8gaXMgbmVlZGVkIHVudGlsIHdlIGNhbiByZWx5IG9uIEF1dG9jb25mIDIuNjIsIHNpbmNlIGVhcmxpZXIKLSMgdmVyc2lvbnMgb2YgbTRzdWdhciBtaXN0YWtlbmx5IGV4cGFuZGVkIFNFUEFSQVRPUiBidXQgbm90IFNUUklORy4KLW00X2RlZmluZShbbHRfYXBwZW5kXSwKLVttNF9kZWZpbmUoWyQxXSwKLQkgICBtNF9pZmRlZihbJDFdLCBbbTRfZGVmbihbJDFdKVskM11dKVskMl0pXSkKLQotCi0KLSMgbHRfY29tYmluZShTRVAsIFBSRUZJWC1MSVNULCBJTkZJWCwgU1VGRklYMSwgW1NVRkZJWDIuLi5dKQotIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0jIFByb2R1Y2UgYSBTRVAgZGVsaW1pdGVkIGxpc3Qgb2YgYWxsIHBhaXJlZCBjb21iaW5hdGlvbnMgb2YgZWxlbWVudHMgb2YKLSMgUFJFRklYLUxJU1Qgd2l0aCBTVUZGSVgxIHRocm91Z2ggU1VGRklYbi4gIEVhY2ggZWxlbWVudCBvZiB0aGUgbGlzdAotIyBoYXMgdGhlIGZvcm0gUFJFRklYbUlORklYU1VGRklYbi4KLSMgTmVlZGVkIHVudGlsIHdlIGNhbiByZWx5IG9uIG00X2NvbWJpbmUgYWRkZWQgaW4gQXV0b2NvbmYgMi42Mi4KLW00X2RlZmluZShbbHRfY29tYmluZV0sCi1bbTRfaWYobTRfZXZhbChbJCMgPiAzXSksIFsxXSwKLSAgICAgICBbbTRfcHVzaGRlZihbX0x0X3NlcF0sIFttNF9kZWZpbmUoW19MdF9zZXBdLCBtNF9kZWZuKFtsdF9jYXJdKSldKV1dZG5sCi1bW200X2ZvcmVhY2goW19MdF9wcmVmaXhdLCBbJDJdLAotCSAgICAgW200X2ZvcmVhY2goW19MdF9zdWZmaXhdLAotCQldbTRfZHF1b3RlKG00X2RxdW90ZShtNF9zaGlmdChtNF9zaGlmdChtNF9zaGlmdCgkQCkpKSkpWywKLQlbX0x0X3NlcChbJDFdKVtdbTRfZGVmbihbX0x0X3ByZWZpeF0pWyQzXW00X2RlZm4oW19MdF9zdWZmaXhdKV0pXSldKV0pCi0KLQotIyBsdF9pZl9hcHBlbmRfdW5pcShNQUNSTy1OQU1FLCBWQVJOQU1FLCBbU0VQQVJBVE9SXSwgW1VOSVFdLCBbTk9ULVVOSVFdKQotIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotIyBJZmYgTUFDUk8tTkFNRSBkb2VzIG5vdCB5ZXQgY29udGFpbiBWQVJOQU1FLCB0aGVuIGFwcGVuZCBpdCAoZGVsaW1pdGVkCi0jIGJ5IFNFUEFSQVRPUiBpZiBzdXBwbGllZCkgYW5kIGV4cGFuZCBVTklRLCBlbHNlIE5PVC1VTklRLgotbTRfZGVmaW5lKFtsdF9pZl9hcHBlbmRfdW5pcV0sCi1bbTRfaWZkZWYoWyQxXSwKLQkgIFttNF9pZihtNF9pbmRleChbJDNdbTRfZGVmbihbJDFdKVskM10sIFskMyQyJDNdKSwgWy0xXSwKLQkJIFtsdF9hcHBlbmQoWyQxXSwgWyQyXSwgWyQzXSkkNF0sCi0JCSBbJDVdKV0sCi0JICBbbHRfYXBwZW5kKFskMV0sIFskMl0sIFskM10pJDRdKV0pCi0KLQotIyBsdF9kaWN0X2FkZChESUNULCBLRVksIFZBTFVFKQotIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotbTRfZGVmaW5lKFtsdF9kaWN0X2FkZF0sCi1bbTRfZGVmaW5lKFskMSgkMildLCBbJDNdKV0pCi0KLQotIyBsdF9kaWN0X2FkZF9zdWJrZXkoRElDVCwgS0VZLCBTVUJLRVksIFZBTFVFKQotIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotbTRfZGVmaW5lKFtsdF9kaWN0X2FkZF9zdWJrZXldLAotW200X2RlZmluZShbJDEoJDI6JDMpXSwgWyQ0XSldKQotCi0KLSMgbHRfZGljdF9mZXRjaChESUNULCBLRVksIFtTVUJLRVldKQotIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi1tNF9kZWZpbmUoW2x0X2RpY3RfZmV0Y2hdLAotW200X2lmdmFsKFskM10sCi0JbTRfaWZkZWYoWyQxKCQyOiQzKV0sIFttNF9kZWZuKFskMSgkMjokMyldKV0pLAotICAgIG00X2lmZGVmKFskMSgkMildLCBbbTRfZGVmbihbJDEoJDIpXSldKSldKQotCi0KLSMgbHRfaWZfZGljdF9mZXRjaChESUNULCBLRVksIFtTVUJLRVldLCBWQUxVRSwgSUYtVFJVRSwgW0lGLUZBTFNFXSkKLSMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLW00X2RlZmluZShbbHRfaWZfZGljdF9mZXRjaF0sCi1bbTRfaWYobHRfZGljdF9mZXRjaChbJDFdLCBbJDJdLCBbJDNdKSwgWyQ0XSwKLQlbJDVdLAotICAgIFskNl0pXSkKLQotCi0jIGx0X2RpY3RfZmlsdGVyKERJQ1QsIFtTVUJLRVldLCBWQUxVRSwgW1NFUEFSQVRPUl0sIEtFWSwgWy4uLl0pCi0jIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi1tNF9kZWZpbmUoW2x0X2RpY3RfZmlsdGVyXSwKLVttNF9pZihbJDVdLCBbXSwgW10sCi0gIFtsdF9qb2luKG00X3F1b3RlKG00X2RlZmF1bHQoWyQ0XSwgW1ssIF1dKSksCi0gICAgICAgICAgIGx0X3VucXVvdGUobTRfc3BsaXQobTRfbm9ybWFsaXplKG00X2ZvcmVhY2goX0x0X2tleSwgbHRfY2FyKFttNF9zaGlmdG4oNCwgJEApXSksCi0JCSAgICAgIFtsdF9pZl9kaWN0X2ZldGNoKFskMV0sIF9MdF9rZXksIFskMl0sIFskM10sIFtfTHRfa2V5IF0pXSkpKSkpXSlbXWRubAotXSkKLQotIyBsdHZlcnNpb24ubTQgLS0gdmVyc2lvbiBudW1iZXJzCQkJLSotIEF1dG9jb25mIC0qLQotIwotIyAgIENvcHlyaWdodCAoQykgMjAwNCBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KLSMgICBXcml0dGVuIGJ5IFNjb3R0IEphbWVzIFJlbW5hbnQsIDIwMDQKLSMKLSMgVGhpcyBmaWxlIGlzIGZyZWUgc29mdHdhcmU7IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24gZ2l2ZXMKLSMgdW5saW1pdGVkIHBlcm1pc3Npb24gdG8gY29weSBhbmQvb3IgZGlzdHJpYnV0ZSBpdCwgd2l0aCBvciB3aXRob3V0Ci0jIG1vZGlmaWNhdGlvbnMsIGFzIGxvbmcgYXMgdGhpcyBub3RpY2UgaXMgcHJlc2VydmVkLgotCi0jIEBjb25maWd1cmVfaW5wdXRACi0KLSMgc2VyaWFsIDMyOTMgbHR2ZXJzaW9uLm00Ci0jIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIEdOVSBMaWJ0b29sCi0KLW00X2RlZmluZShbTFRfUEFDS0FHRV9WRVJTSU9OXSwgWzIuNF0pCi1tNF9kZWZpbmUoW0xUX1BBQ0tBR0VfUkVWSVNJT05dLCBbMS4zMjkzXSkKLQotQUNfREVGVU4oW0xUVkVSU0lPTl9WRVJTSU9OXSwKLVttYWNyb192ZXJzaW9uPScyLjQnCi1tYWNyb19yZXZpc2lvbj0nMS4zMjkzJwotX0xUX0RFQ0woLCBtYWNyb192ZXJzaW9uLCAwLCBbV2hpY2ggcmVsZWFzZSBvZiBsaWJ0b29sLm00IHdhcyB1c2VkP10pCi1fTFRfREVDTCgsIG1hY3JvX3JldmlzaW9uLCAwKQotXSkKLQotIyBsdH5vYnNvbGV0ZS5tNCAtLSBhY2xvY2FsIHNhdGlzZnlpbmcgb2Jzb2xldGUgZGVmaW5pdGlvbnMuICAgIC0qLUF1dG9jb25mLSotCi0jCi0jICAgQ29weXJpZ2h0IChDKSAyMDA0LCAyMDA1LCAyMDA3LCAyMDA5IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgotIyAgIFdyaXR0ZW4gYnkgU2NvdHQgSmFtZXMgUmVtbmFudCwgMjAwNC4KLSMKLSMgVGhpcyBmaWxlIGlzIGZyZWUgc29mdHdhcmU7IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24gZ2l2ZXMKLSMgdW5saW1pdGVkIHBlcm1pc3Npb24gdG8gY29weSBhbmQvb3IgZGlzdHJpYnV0ZSBpdCwgd2l0aCBvciB3aXRob3V0Ci0jIG1vZGlmaWNhdGlvbnMsIGFzIGxvbmcgYXMgdGhpcyBub3RpY2UgaXMgcHJlc2VydmVkLgotCi0jIHNlcmlhbCA1IGx0fm9ic29sZXRlLm00Ci0KLSMgVGhlc2UgZXhpc3QgZW50aXJlbHkgdG8gZm9vbCBhY2xvY2FsIHdoZW4gYm9vdHN0cmFwcGluZyBsaWJ0b29sLgotIwotIyBJbiB0aGUgcGFzdCBsaWJ0b29sLm00IGhhcyBwcm92aWRlZCBtYWNyb3MgdmlhIEFDX0RFRlVOIChvciBBVV9ERUZVTikKLSMgd2hpY2ggaGF2ZSBsYXRlciBiZWVuIGNoYW5nZWQgdG8gbTRfZGVmaW5lIGFzIHRoZXkgYXJlbid0IHBhcnQgb2YgdGhlCi0jIGV4cG9ydGVkIEFQSSwgb3IgbW92ZWQgdG8gQXV0b2NvbmYgb3IgQXV0b21ha2Ugd2hlcmUgdGhleSBiZWxvbmcuCi0jCi0jIFRoZSB0cm91YmxlIGlzLCBhY2xvY2FsIGlzIGEgYml0IHRoaWNrLiAgSXQnbGwgc2VlIHRoZSBvbGQgQUNfREVGVU4KLSMgaW4gL3Vzci9zaGFyZS9hY2xvY2FsL2xpYnRvb2wubTQgYW5kIHJlbWVtYmVyIGl0LCB0aGVuIHdoZW4gaXQgc2VlcyB1cwotIyB1c2luZyBhIG1hY3JvIHdpdGggdGhlIHNhbWUgbmFtZSBpbiBvdXIgbG9jYWwgbTQvbGlidG9vbC5tNCBpdCdsbAotIyBwdWxsIHRoZSBvbGQgbGlidG9vbC5tNCBpbiAoaXQgZG9lc24ndCBzZWUgb3VyIHNoaW55IG5ldyBtNF9kZWZpbmUKLSMgYW5kIGRvZXNuJ3Qga25vdyBhYm91dCBBdXRvY29uZiBtYWNyb3MgYXQgYWxsLikKLSMKLSMgU28gd2UgcHJvdmlkZSB0aGlzIGZpbGUsIHdoaWNoIGhhcyBhIHNpbGx5IGZpbGVuYW1lIHNvIGl0J3MgYWx3YXlzCi0jIGluY2x1ZGVkIGFmdGVyIGV2ZXJ5dGhpbmcgZWxzZS4gIFRoaXMgcHJvdmlkZXMgYWNsb2NhbCB3aXRoIHRoZQotIyBBQ19ERUZVTnMgaXQgd2FudHMsIGJ1dCB3aGVuIG00IHByb2Nlc3NlcyBpdCwgaXQgZG9lc24ndCBkbyBhbnl0aGluZwotIyBiZWNhdXNlIHRob3NlIG1hY3JvcyBhbHJlYWR5IGV4aXN0LCBvciB3aWxsIGJlIG92ZXJ3cml0dGVuIGxhdGVyLgotIyBXZSB1c2UgQUNfREVGVU4gb3ZlciBBVV9ERUZVTiBmb3IgY29tcGF0aWJpbGl0eSB3aXRoIGFjbG9jYWwtMS42LiAKLSMKLSMgQW55dGltZSB3ZSB3aXRoZHJhdyBhbiBBQ19ERUZVTiBvciBBVV9ERUZVTiwgcmVtZW1iZXIgdG8gYWRkIGl0IGhlcmUuCi0jIFllcywgdGhhdCBtZWFucyBldmVyeSBuYW1lIG9uY2UgdGFrZW4gd2lsbCBuZWVkIHRvIHJlbWFpbiBoZXJlIHVudGlsCi0jIHdlIGdpdmUgdXAgY29tcGF0aWJpbGl0eSB3aXRoIHZlcnNpb25zIGJlZm9yZSAxLjcsIGF0IHdoaWNoIHBvaW50Ci0jIHdlIG5lZWQgdG8ga2VlcCBvbmx5IHRob3NlIG5hbWVzIHdoaWNoIHdlIHN0aWxsIHJlZmVyIHRvLgotCi0jIFRoaXMgaXMgdG8gaGVscCBhY2xvY2FsIGZpbmQgdGhlc2UgbWFjcm9zLCBhcyBpdCBjYW4ndCBzZWUgbTRfZGVmaW5lLgotQUNfREVGVU4oW0xUT0JTT0xFVEVfVkVSU0lPTl0sIFttNF9pZihbMV0pXSkKLQotbTRfaWZuZGVmKFtBQ19MSUJUT09MX0xJTktFUl9PUFRJT05dLAlbQUNfREVGVU4oW0FDX0xJQlRPT0xfTElOS0VSX09QVElPTl0pXSkKLW00X2lmbmRlZihbQUNfUFJPR19FR1JFUF0sCQlbQUNfREVGVU4oW0FDX1BST0dfRUdSRVBdKV0pCi1tNF9pZm5kZWYoW19MVF9BQ19QUk9HX0VDSE9fQkFDS1NMQVNIXSwJW0FDX0RFRlVOKFtfTFRfQUNfUFJPR19FQ0hPX0JBQ0tTTEFTSF0pXSkKLW00X2lmbmRlZihbX0xUX0FDX1NIRUxMX0lOSVRdLAkJW0FDX0RFRlVOKFtfTFRfQUNfU0hFTExfSU5JVF0pXSkKLW00X2lmbmRlZihbX0xUX0FDX1NZU19MSUJQQVRIX0FJWF0sCVtBQ19ERUZVTihbX0xUX0FDX1NZU19MSUJQQVRIX0FJWF0pXSkKLW00X2lmbmRlZihbX0xUX1BST0dfTFRNQUlOXSwJCVtBQ19ERUZVTihbX0xUX1BST0dfTFRNQUlOXSldKQotbTRfaWZuZGVmKFtfTFRfQUNfVEFHVkFSXSwJCVtBQ19ERUZVTihbX0xUX0FDX1RBR1ZBUl0pXSkKLW00X2lmbmRlZihbQUNfTFRETF9FTkFCTEVfSU5TVEFMTF0sCVtBQ19ERUZVTihbQUNfTFRETF9FTkFCTEVfSU5TVEFMTF0pXSkKLW00X2lmbmRlZihbQUNfTFRETF9QUkVPUEVOXSwJCVtBQ19ERUZVTihbQUNfTFRETF9QUkVPUEVOXSldKQotbTRfaWZuZGVmKFtfTFRfQUNfU1lTX0NPTVBJTEVSXSwJW0FDX0RFRlVOKFtfTFRfQUNfU1lTX0NPTVBJTEVSXSldKQotbTRfaWZuZGVmKFtfTFRfQUNfTE9DS10sCQlbQUNfREVGVU4oW19MVF9BQ19MT0NLXSldKQotbTRfaWZuZGVmKFtBQ19MSUJUT09MX1NZU19PTERfQVJDSElWRV0sCVtBQ19ERUZVTihbQUNfTElCVE9PTF9TWVNfT0xEX0FSQ0hJVkVdKV0pCi1tNF9pZm5kZWYoW19MVF9BQ19UUllfRExPUEVOX1NFTEZdLAlbQUNfREVGVU4oW19MVF9BQ19UUllfRExPUEVOX1NFTEZdKV0pCi1tNF9pZm5kZWYoW0FDX0xJQlRPT0xfUFJPR19DQ19DX09dLAlbQUNfREVGVU4oW0FDX0xJQlRPT0xfUFJPR19DQ19DX09dKV0pCi1tNF9pZm5kZWYoW0FDX0xJQlRPT0xfU1lTX0hBUkRfTElOS19MT0NLU10sIFtBQ19ERUZVTihbQUNfTElCVE9PTF9TWVNfSEFSRF9MSU5LX0xPQ0tTXSldKQotbTRfaWZuZGVmKFtBQ19MSUJUT09MX09CSkRJUl0sCQlbQUNfREVGVU4oW0FDX0xJQlRPT0xfT0JKRElSXSldKQotbTRfaWZuZGVmKFtBQ19MVERMX09CSkRJUl0sCQlbQUNfREVGVU4oW0FDX0xURExfT0JKRElSXSldKQotbTRfaWZuZGVmKFtBQ19MSUJUT09MX1BST0dfTERfSEFSRENPREVfTElCUEFUSF0sIFtBQ19ERUZVTihbQUNfTElCVE9PTF9QUk9HX0xEX0hBUkRDT0RFX0xJQlBBVEhdKV0pCi1tNF9pZm5kZWYoW0FDX0xJQlRPT0xfU1lTX0xJQl9TVFJJUF0sCVtBQ19ERUZVTihbQUNfTElCVE9PTF9TWVNfTElCX1NUUklQXSldKQotbTRfaWZuZGVmKFtBQ19QQVRIX01BR0lDXSwJCVtBQ19ERUZVTihbQUNfUEFUSF9NQUdJQ10pXSkKLW00X2lmbmRlZihbQUNfUFJPR19MRF9HTlVdLAkJW0FDX0RFRlVOKFtBQ19QUk9HX0xEX0dOVV0pXSkKLW00X2lmbmRlZihbQUNfUFJPR19MRF9SRUxPQURfRkxBR10sCVtBQ19ERUZVTihbQUNfUFJPR19MRF9SRUxPQURfRkxBR10pXSkKLW00X2lmbmRlZihbQUNfREVQTElCU19DSEVDS19NRVRIT0RdLAlbQUNfREVGVU4oW0FDX0RFUExJQlNfQ0hFQ0tfTUVUSE9EXSldKQotbTRfaWZuZGVmKFtBQ19MSUJUT09MX1BST0dfQ09NUElMRVJfTk9fUlRUSV0sIFtBQ19ERUZVTihbQUNfTElCVE9PTF9QUk9HX0NPTVBJTEVSX05PX1JUVEldKV0pCi1tNF9pZm5kZWYoW0FDX0xJQlRPT0xfU1lTX0dMT0JBTF9TWU1CT0xfUElQRV0sIFtBQ19ERUZVTihbQUNfTElCVE9PTF9TWVNfR0xPQkFMX1NZTUJPTF9QSVBFXSldKQotbTRfaWZuZGVmKFtBQ19MSUJUT09MX1BST0dfQ09NUElMRVJfUElDXSwgW0FDX0RFRlVOKFtBQ19MSUJUT09MX1BST0dfQ09NUElMRVJfUElDXSldKQotbTRfaWZuZGVmKFtBQ19MSUJUT09MX1BST0dfTERfU0hMSUJTXSwJW0FDX0RFRlVOKFtBQ19MSUJUT09MX1BST0dfTERfU0hMSUJTXSldKQotbTRfaWZuZGVmKFtBQ19MSUJUT09MX1BPU1RERVBfUFJFREVQXSwJW0FDX0RFRlVOKFtBQ19MSUJUT09MX1BPU1RERVBfUFJFREVQXSldKQotbTRfaWZuZGVmKFtMVF9BQ19QUk9HX0VHUkVQXSwJCVtBQ19ERUZVTihbTFRfQUNfUFJPR19FR1JFUF0pXSkKLW00X2lmbmRlZihbTFRfQUNfUFJPR19TRURdLAkJW0FDX0RFRlVOKFtMVF9BQ19QUk9HX1NFRF0pXSkKLW00X2lmbmRlZihbX0xUX0NDX0JBU0VOQU1FXSwJCVtBQ19ERUZVTihbX0xUX0NDX0JBU0VOQU1FXSldKQotbTRfaWZuZGVmKFtfTFRfQ09NUElMRVJfQk9JTEVSUExBVEVdLAlbQUNfREVGVU4oW19MVF9DT01QSUxFUl9CT0lMRVJQTEFURV0pXSkKLW00X2lmbmRlZihbX0xUX0xJTktFUl9CT0lMRVJQTEFURV0sCVtBQ19ERUZVTihbX0xUX0xJTktFUl9CT0lMRVJQTEFURV0pXSkKLW00X2lmbmRlZihbX0FDX1BST0dfTElCVE9PTF0sCQlbQUNfREVGVU4oW19BQ19QUk9HX0xJQlRPT0xdKV0pCi1tNF9pZm5kZWYoW0FDX0xJQlRPT0xfU0VUVVBdLAkJW0FDX0RFRlVOKFtBQ19MSUJUT09MX1NFVFVQXSldKQotbTRfaWZuZGVmKFtfTFRfQUNfQ0hFQ0tfRExGQ05dLAkJW0FDX0RFRlVOKFtfTFRfQUNfQ0hFQ0tfRExGQ05dKV0pCi1tNF9pZm5kZWYoW0FDX0xJQlRPT0xfU1lTX0RZTkFNSUNfTElOS0VSXSwJW0FDX0RFRlVOKFtBQ19MSUJUT09MX1NZU19EWU5BTUlDX0xJTktFUl0pXSkKLW00X2lmbmRlZihbX0xUX0FDX1RBR0NPTkZJR10sCQlbQUNfREVGVU4oW19MVF9BQ19UQUdDT05GSUddKV0pCi1tNF9pZm5kZWYoW0FDX0RJU0FCTEVfRkFTVF9JTlNUQUxMXSwJW0FDX0RFRlVOKFtBQ19ESVNBQkxFX0ZBU1RfSU5TVEFMTF0pXSkKLW00X2lmbmRlZihbX0xUX0FDX0xBTkdfQ1hYXSwJCVtBQ19ERUZVTihbX0xUX0FDX0xBTkdfQ1hYXSldKQotbTRfaWZuZGVmKFtfTFRfQUNfTEFOR19GNzddLAkJW0FDX0RFRlVOKFtfTFRfQUNfTEFOR19GNzddKV0pCi1tNF9pZm5kZWYoW19MVF9BQ19MQU5HX0dDSl0sCQlbQUNfREVGVU4oW19MVF9BQ19MQU5HX0dDSl0pXSkKLW00X2lmbmRlZihbQUNfTElCVE9PTF9MQU5HX0NfQ09ORklHXSwJW0FDX0RFRlVOKFtBQ19MSUJUT09MX0xBTkdfQ19DT05GSUddKV0pCi1tNF9pZm5kZWYoW19MVF9BQ19MQU5HX0NfQ09ORklHXSwJW0FDX0RFRlVOKFtfTFRfQUNfTEFOR19DX0NPTkZJR10pXSkKLW00X2lmbmRlZihbQUNfTElCVE9PTF9MQU5HX0NYWF9DT05GSUddLAlbQUNfREVGVU4oW0FDX0xJQlRPT0xfTEFOR19DWFhfQ09ORklHXSldKQotbTRfaWZuZGVmKFtfTFRfQUNfTEFOR19DWFhfQ09ORklHXSwJW0FDX0RFRlVOKFtfTFRfQUNfTEFOR19DWFhfQ09ORklHXSldKQotbTRfaWZuZGVmKFtBQ19MSUJUT09MX0xBTkdfRjc3X0NPTkZJR10sCVtBQ19ERUZVTihbQUNfTElCVE9PTF9MQU5HX0Y3N19DT05GSUddKV0pCi1tNF9pZm5kZWYoW19MVF9BQ19MQU5HX0Y3N19DT05GSUddLAlbQUNfREVGVU4oW19MVF9BQ19MQU5HX0Y3N19DT05GSUddKV0pCi1tNF9pZm5kZWYoW0FDX0xJQlRPT0xfTEFOR19HQ0pfQ09ORklHXSwJW0FDX0RFRlVOKFtBQ19MSUJUT09MX0xBTkdfR0NKX0NPTkZJR10pXSkKLW00X2lmbmRlZihbX0xUX0FDX0xBTkdfR0NKX0NPTkZJR10sCVtBQ19ERUZVTihbX0xUX0FDX0xBTkdfR0NKX0NPTkZJR10pXSkKLW00X2lmbmRlZihbQUNfTElCVE9PTF9MQU5HX1JDX0NPTkZJR10sCVtBQ19ERUZVTihbQUNfTElCVE9PTF9MQU5HX1JDX0NPTkZJR10pXSkKLW00X2lmbmRlZihbX0xUX0FDX0xBTkdfUkNfQ09ORklHXSwJW0FDX0RFRlVOKFtfTFRfQUNfTEFOR19SQ19DT05GSUddKV0pCi1tNF9pZm5kZWYoW0FDX0xJQlRPT0xfQ09ORklHXSwJCVtBQ19ERUZVTihbQUNfTElCVE9PTF9DT05GSUddKV0pCi1tNF9pZm5kZWYoW19MVF9BQ19GSUxFX0xURExMX0NdLAlbQUNfREVGVU4oW19MVF9BQ19GSUxFX0xURExMX0NdKV0pCi1tNF9pZm5kZWYoW19MVF9SRVFVSVJFRF9EQVJXSU5fQ0hFQ0tTXSwJW0FDX0RFRlVOKFtfTFRfUkVRVUlSRURfREFSV0lOX0NIRUNLU10pXSkKLW00X2lmbmRlZihbX0xUX0FDX1BST0dfQ1hYQ1BQXSwJCVtBQ19ERUZVTihbX0xUX0FDX1BST0dfQ1hYQ1BQXSldKQotbTRfaWZuZGVmKFtfTFRfUFJFUEFSRV9TRURfUVVPVEVfVkFSU10sCVtBQ19ERUZVTihbX0xUX1BSRVBBUkVfU0VEX1FVT1RFX1ZBUlNdKV0pCi1tNF9pZm5kZWYoW19MVF9QUk9HX0VDSE9fQkFDS1NMQVNIXSwJW0FDX0RFRlVOKFtfTFRfUFJPR19FQ0hPX0JBQ0tTTEFTSF0pXSkKLW00X2lmbmRlZihbX0xUX1BST0dfRjc3XSwJCVtBQ19ERUZVTihbX0xUX1BST0dfRjc3XSldKQotbTRfaWZuZGVmKFtfTFRfUFJPR19GQ10sCQlbQUNfREVGVU4oW19MVF9QUk9HX0ZDXSldKQotbTRfaWZuZGVmKFtfTFRfUFJPR19DWFhdLAkJW0FDX0RFRlVOKFtfTFRfUFJPR19DWFhdKV0pCi0KLSMgQ29weXJpZ2h0IChDKSAyMDAyLCAyMDAzLCAyMDA1LCAyMDA2LCAyMDA3LCAyMDA4ICBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KLSMKLSMgVGhpcyBmaWxlIGlzIGZyZWUgc29mdHdhcmU7IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24KLSMgZ2l2ZXMgdW5saW1pdGVkIHBlcm1pc3Npb24gdG8gY29weSBhbmQvb3IgZGlzdHJpYnV0ZSBpdCwKLSMgd2l0aCBvciB3aXRob3V0IG1vZGlmaWNhdGlvbnMsIGFzIGxvbmcgYXMgdGhpcyBub3RpY2UgaXMgcHJlc2VydmVkLgotCi0jIEFNX0FVVE9NQUtFX1ZFUlNJT04oVkVSU0lPTikKLSMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotIyBBdXRvbWFrZSBYLlkgdHJhY2VzIHRoaXMgbWFjcm8gdG8gZW5zdXJlIGFjbG9jYWwubTQgaGFzIGJlZW4KLSMgZ2VuZXJhdGVkIGZyb20gdGhlIG00IGZpbGVzIGFjY29tcGFueWluZyBBdXRvbWFrZSBYLlkuCi0jIChUaGlzIHByaXZhdGUgbWFjcm8gc2hvdWxkIG5vdCBiZSBjYWxsZWQgb3V0c2lkZSB0aGlzIGZpbGUuKQotQUNfREVGVU4oW0FNX0FVVE9NQUtFX1ZFUlNJT05dLAotW2FtX19hcGlfdmVyc2lvbj0nMS4xMScKLWRubCBTb21lIHVzZXJzIGZpbmQgQU1fQVVUT01BS0VfVkVSU0lPTiBhbmQgbWlzdGFrZSBpdCBmb3IgYSB3YXkgdG8KLWRubCByZXF1aXJlIHNvbWUgbWluaW11bSB2ZXJzaW9uLiAgUG9pbnQgdGhlbSB0byB0aGUgcmlnaHQgbWFjcm8uCi1tNF9pZihbJDFdLCBbMS4xMS4xXSwgW10sCi0gICAgICBbQUNfRkFUQUwoW0RvIG5vdCBjYWxsICQwLCB1c2UgQU1fSU5JVF9BVVRPTUFLRShbJDFdKS5dKV0pZG5sCi1dKQotCi0jIF9BTV9BVVRPQ09ORl9WRVJTSU9OKFZFUlNJT04pCi0jIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0jIGFjbG9jYWwgdHJhY2VzIHRoaXMgbWFjcm8gdG8gZmluZCB0aGUgQXV0b2NvbmYgdmVyc2lvbi4KLSMgVGhpcyBpcyBhIHByaXZhdGUgbWFjcm8gdG9vLiAgVXNpbmcgbTRfZGVmaW5lIHNpbXBsaWZpZXMKLSMgdGhlIGxvZ2ljIGluIGFjbG9jYWwsIHdoaWNoIGNhbiBzaW1wbHkgaWdub3JlIHRoaXMgZGVmaW5pdGlvbi4KLW00X2RlZmluZShbX0FNX0FVVE9DT05GX1ZFUlNJT05dLCBbXSkKLQotIyBBTV9TRVRfQ1VSUkVOVF9BVVRPTUFLRV9WRVJTSU9OCi0jIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSMgQ2FsbCBBTV9BVVRPTUFLRV9WRVJTSU9OIGFuZCBBTV9BVVRPTUFLRV9WRVJTSU9OIHNvIHRoZXkgY2FuIGJlIHRyYWNlZC4KLSMgVGhpcyBmdW5jdGlvbiBpcyBBQ19SRVFVSVJFZCBieSBBTV9JTklUX0FVVE9NQUtFLgotQUNfREVGVU4oW0FNX1NFVF9DVVJSRU5UX0FVVE9NQUtFX1ZFUlNJT05dLAotW0FNX0FVVE9NQUtFX1ZFUlNJT04oWzEuMTEuMV0pZG5sCi1tNF9pZm5kZWYoW0FDX0FVVE9DT05GX1ZFUlNJT05dLAotICBbbTRfY29weShbbTRfUEFDS0FHRV9WRVJTSU9OXSwgW0FDX0FVVE9DT05GX1ZFUlNJT05dKV0pZG5sCi1fQU1fQVVUT0NPTkZfVkVSU0lPTihtNF9kZWZuKFtBQ19BVVRPQ09ORl9WRVJTSU9OXSkpXSkKLQotIyBBTV9BVVhfRElSX0VYUEFORCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLSotIEF1dG9jb25mIC0qLQotCi0jIENvcHlyaWdodCAoQykgMjAwMSwgMjAwMywgMjAwNSAgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCi0jCi0jIFRoaXMgZmlsZSBpcyBmcmVlIHNvZnR3YXJlOyB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uCi0jIGdpdmVzIHVubGltaXRlZCBwZXJtaXNzaW9uIHRvIGNvcHkgYW5kL29yIGRpc3RyaWJ1dGUgaXQsCi0jIHdpdGggb3Igd2l0aG91dCBtb2RpZmljYXRpb25zLCBhcyBsb25nIGFzIHRoaXMgbm90aWNlIGlzIHByZXNlcnZlZC4KLQotIyBGb3IgcHJvamVjdHMgdXNpbmcgQUNfQ09ORklHX0FVWF9ESVIoW2Zvb10pLCBBdXRvY29uZiBzZXRzCi0jICRhY19hdXhfZGlyIHRvIGAkc3JjZGlyL2ZvbycuICBJbiBvdGhlciBwcm9qZWN0cywgaXQgaXMgc2V0IHRvCi0jIGAkc3JjZGlyJywgYCRzcmNkaXIvLi4nLCBvciBgJHNyY2Rpci8uLi8uLicuCi0jCi0jIE9mIGNvdXJzZSwgQXV0b21ha2UgbXVzdCBob25vciB0aGlzIHZhcmlhYmxlIHdoZW5ldmVyIGl0IGNhbGxzIGEKLSMgdG9vbCBmcm9tIHRoZSBhdXhpbGlhcnkgZGlyZWN0b3J5LiAgVGhlIHByb2JsZW0gaXMgdGhhdCAkc3JjZGlyIChhbmQKLSMgdGhlcmVmb3JlICRhY19hdXhfZGlyIGFzIHdlbGwpIGNhbiBiZSBlaXRoZXIgYWJzb2x1dGUgb3IgcmVsYXRpdmUsCi0jIGRlcGVuZGluZyBvbiBob3cgY29uZmlndXJlIGlzIHJ1bi4gIFRoaXMgaXMgcHJldHR5IGFubm95aW5nLCBzaW5jZQotIyBpdCBtYWtlcyAkYWNfYXV4X2RpciBxdWl0ZSB1bnVzYWJsZSBpbiBzdWJkaXJlY3RvcmllczogaW4gdGhlIHRvcAotIyBzb3VyY2UgZGlyZWN0b3J5LCBhbnkgZm9ybSB3aWxsIHdvcmsgZmluZSwgYnV0IGluIHN1YmRpcmVjdG9yaWVzIGEKLSMgcmVsYXRpdmUgcGF0aCBuZWVkcyB0byBiZSBhZGp1c3RlZCBmaXJzdC4KLSMKLSMgJGFjX2F1eF9kaXIvbWlzc2luZwotIyAgICBmYWlscyB3aGVuIGNhbGxlZCBmcm9tIGEgc3ViZGlyZWN0b3J5IGlmICRhY19hdXhfZGlyIGlzIHJlbGF0aXZlCi0jICR0b3Bfc3JjZGlyLyRhY19hdXhfZGlyL21pc3NpbmcKLSMgICAgZmFpbHMgaWYgJGFjX2F1eF9kaXIgaXMgYWJzb2x1dGUsCi0jICAgIGZhaWxzIHdoZW4gY2FsbGVkIGZyb20gYSBzdWJkaXJlY3RvcnkgaW4gYSBWUEFUSCBidWlsZCB3aXRoCi0jICAgICAgICAgIGEgcmVsYXRpdmUgJGFjX2F1eF9kaXIKLSMKLSMgVGhlIHJlYXNvbiBvZiB0aGUgbGF0dGVyIGZhaWx1cmUgaXMgdGhhdCAkdG9wX3NyY2RpciBhbmQgJGFjX2F1eF9kaXIKLSMgYXJlIGJvdGggcHJlZml4ZWQgYnkgJHNyY2Rpci4gIEluIGFuIGluLXNvdXJjZSBidWlsZCB0aGlzIGlzIHVzdWFsbHkKLSMgaGFybWxlc3MgYmVjYXVzZSAkc3JjZGlyIGlzIGAuJywgYnV0IHRoaW5ncyB3aWxsIGJyb2tlIHdoZW4geW91Ci0jIHN0YXJ0IGEgVlBBVEggYnVpbGQgb3IgdXNlIGFuIGFic29sdXRlICRzcmNkaXIuCi0jCi0jIFNvIHdlIGNvdWxkIHVzZSBzb21ldGhpbmcgc2ltaWxhciB0byAkdG9wX3NyY2Rpci8kYWNfYXV4X2Rpci9taXNzaW5nLAotIyBpZmYgd2Ugc3RyaXAgdGhlIGxlYWRpbmcgJHNyY2RpciBmcm9tICRhY19hdXhfZGlyLiAgVGhhdCB3b3VsZCBiZToKLSMgICBhbV9hdXhfZGlyPSdcJCh0b3Bfc3JjZGlyKS8nYGV4cHIgIiRhY19hdXhfZGlyIiA6ICIkc3JjZGlyLy8qXCguKlwpImAKLSMgYW5kIHRoZW4gd2Ugd291bGQgZGVmaW5lICRNSVNTSU5HIGFzCi0jICAgTUlTU0lORz0iXCR7U0hFTEx9ICRhbV9hdXhfZGlyL21pc3NpbmciCi0jIFRoaXMgd2lsbCB3b3JrIGFzIGxvbmcgYXMgTUlTU0lORyBpcyBub3QgY2FsbGVkIGZyb20gY29uZmlndXJlLCBiZWNhdXNlCi0jIHVuZm9ydHVuYXRlbHkgJCh0b3Bfc3JjZGlyKSBoYXMgbm8gbWVhbmluZyBpbiBjb25maWd1cmUuCi0jIEhvd2V2ZXIgdGhlcmUgYXJlIG90aGVyIHZhcmlhYmxlcywgbGlrZSBDQywgd2hpY2ggYXJlIG9mdGVuIHVzZWQgaW4KLSMgY29uZmlndXJlLCBhbmQgY291bGQgdGhlcmVmb3JlIG5vdCB1c2UgdGhpcyAiZml4ZWQiICRhY19hdXhfZGlyLgotIwotIyBBbm90aGVyIHNvbHV0aW9uLCB1c2VkIGhlcmUsIGlzIHRvIGFsd2F5cyBleHBhbmQgJGFjX2F1eF9kaXIgdG8gYW4KLSMgYWJzb2x1dGUgUEFUSC4gIFRoZSBkcmF3YmFjayBpcyB0aGF0IHVzaW5nIGFic29sdXRlIHBhdGhzIHByZXZlbnQgYQotIyBjb25maWd1cmVkIHRyZWUgdG8gYmUgbW92ZWQgd2l0aG91dCByZWNvbmZpZ3VyYXRpb24uCi0KLUFDX0RFRlVOKFtBTV9BVVhfRElSX0VYUEFORF0sCi1bZG5sIFJlbHkgb24gYXV0b2NvbmYgdG8gc2V0IHVwIENEUEFUSCBwcm9wZXJseS4KLUFDX1BSRVJFUShbMi41MF0pZG5sCi0jIGV4cGFuZCAkYWNfYXV4X2RpciB0byBhbiBhYnNvbHV0ZSBwYXRoCi1hbV9hdXhfZGlyPWBjZCAkYWNfYXV4X2RpciAmJiBwd2RgCi1dKQotCi0jIEFNX0NPTkRJVElPTkFMICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtKi0gQXV0b2NvbmYgLSotCi0KLSMgQ29weXJpZ2h0IChDKSAxOTk3LCAyMDAwLCAyMDAxLCAyMDAzLCAyMDA0LCAyMDA1LCAyMDA2LCAyMDA4Ci0jIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgotIwotIyBUaGlzIGZpbGUgaXMgZnJlZSBzb2Z0d2FyZTsgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbgotIyBnaXZlcyB1bmxpbWl0ZWQgcGVybWlzc2lvbiB0byBjb3B5IGFuZC9vciBkaXN0cmlidXRlIGl0LAotIyB3aXRoIG9yIHdpdGhvdXQgbW9kaWZpY2F0aW9ucywgYXMgbG9uZyBhcyB0aGlzIG5vdGljZSBpcyBwcmVzZXJ2ZWQuCi0KLSMgc2VyaWFsIDkKLQotIyBBTV9DT05ESVRJT05BTChOQU1FLCBTSEVMTC1DT05ESVRJT04pCi0jIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSMgRGVmaW5lIGEgY29uZGl0aW9uYWwuCi1BQ19ERUZVTihbQU1fQ09ORElUSU9OQUxdLAotW0FDX1BSRVJFUSgyLjUyKWRubAotIGlmZWxzZShbJDFdLCBbVFJVRV0sICBbQUNfRkFUQUwoWyQwOiBpbnZhbGlkIGNvbmRpdGlvbjogJDFdKV0sCi0JWyQxXSwgW0ZBTFNFXSwgW0FDX0ZBVEFMKFskMDogaW52YWxpZCBjb25kaXRpb246ICQxXSldKWRubAotQUNfU1VCU1QoWyQxX1RSVUVdKWRubAotQUNfU1VCU1QoWyQxX0ZBTFNFXSlkbmwKLV9BTV9TVUJTVF9OT1RNQUtFKFskMV9UUlVFXSlkbmwKLV9BTV9TVUJTVF9OT1RNQUtFKFskMV9GQUxTRV0pZG5sCi1tNF9kZWZpbmUoW19BTV9DT05EX1ZBTFVFXyQxXSwgWyQyXSlkbmwKLWlmICQyOyB0aGVuCi0gICQxX1RSVUU9Ci0gICQxX0ZBTFNFPScjJwotZWxzZQotICAkMV9UUlVFPScjJwotICAkMV9GQUxTRT0KLWZpCi1BQ19DT05GSUdfQ09NTUFORFNfUFJFKAotW2lmIHRlc3QgLXogIiR7JDFfVFJVRX0iICYmIHRlc3QgLXogIiR7JDFfRkFMU0V9IjsgdGhlbgotICBBQ19NU0dfRVJST1IoW1tjb25kaXRpb25hbCAiJDEiIHdhcyBuZXZlciBkZWZpbmVkLgotVXN1YWxseSB0aGlzIG1lYW5zIHRoZSBtYWNybyB3YXMgb25seSBpbnZva2VkIGNvbmRpdGlvbmFsbHkuXV0pCi1maV0pXSkKLQotIyBDb3B5cmlnaHQgKEMpIDE5OTksIDIwMDAsIDIwMDEsIDIwMDIsIDIwMDMsIDIwMDQsIDIwMDUsIDIwMDYsIDIwMDkKLSMgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCi0jCi0jIFRoaXMgZmlsZSBpcyBmcmVlIHNvZnR3YXJlOyB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uCi0jIGdpdmVzIHVubGltaXRlZCBwZXJtaXNzaW9uIHRvIGNvcHkgYW5kL29yIGRpc3RyaWJ1dGUgaXQsCi0jIHdpdGggb3Igd2l0aG91dCBtb2RpZmljYXRpb25zLCBhcyBsb25nIGFzIHRoaXMgbm90aWNlIGlzIHByZXNlcnZlZC4KLQotIyBzZXJpYWwgMTAKLQotIyBUaGVyZSBhcmUgYSBmZXcgZGlydHkgaGFja3MgYmVsb3cgdG8gYXZvaWQgbGV0dGluZyBgQUNfUFJPR19DQycgYmUKLSMgd3JpdHRlbiBpbiBjbGVhciwgaW4gd2hpY2ggY2FzZSBhdXRvbWFrZSwgd2hlbiByZWFkaW5nIGFjbG9jYWwubTQsCi0jIHdpbGwgdGhpbmsgaXQgc2VlcyBhICp1c2UqLCBhbmQgdGhlcmVmb3JlIHdpbGwgdHJpZ2dlciBhbGwgaXQncwotIyBDIHN1cHBvcnQgbWFjaGluZXJ5LiAgQWxzbyBub3RlIHRoYXQgaXQgbWVhbnMgdGhhdCBhdXRvc2Nhbiwgc2VlaW5nCi0jIENDIGV0Yy4gaW4gdGhlIE1ha2VmaWxlLCB3aWxsIGFzayBmb3IgYW4gQUNfUFJPR19DQyB1c2UuLi4KLQotCi0jIF9BTV9ERVBFTkRFTkNJRVMoTkFNRSkKLSMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotIyBTZWUgaG93IHRoZSBjb21waWxlciBpbXBsZW1lbnRzIGRlcGVuZGVuY3kgY2hlY2tpbmcuCi0jIE5BTUUgaXMgIkNDIiwgIkNYWCIsICJHQ0oiLCBvciAiT0JKQyIuCi0jIFdlIHRyeSBhIGZldyB0ZWNobmlxdWVzIGFuZCB1c2UgdGhhdCB0byBzZXQgYSBzaW5nbGUgY2FjaGUgdmFyaWFibGUuCi0jCi0jIFdlIGRvbid0IEFDX1JFUVVJUkUgdGhlIGNvcnJlc3BvbmRpbmcgQUNfUFJPR19DQyBzaW5jZSB0aGUgbGF0dGVyIHdhcwotIyBtb2RpZmllZCB0byBpbnZva2UgX0FNX0RFUEVOREVOQ0lFUyhDQyk7IHdlIHdvdWxkIGhhdmUgYSBjaXJjdWxhcgotIyBkZXBlbmRlbmN5LCBhbmQgZ2l2ZW4gdGhhdCB0aGUgdXNlciBpcyBub3QgZXhwZWN0ZWQgdG8gcnVuIHRoaXMgbWFjcm8sCi0jIGp1c3QgcmVseSBvbiBBQ19QUk9HX0NDLgotQUNfREVGVU4oW19BTV9ERVBFTkRFTkNJRVNdLAotW0FDX1JFUVVJUkUoW0FNX1NFVF9ERVBESVJdKWRubAotQUNfUkVRVUlSRShbQU1fT1VUUFVUX0RFUEVOREVOQ1lfQ09NTUFORFNdKWRubAotQUNfUkVRVUlSRShbQU1fTUFLRV9JTkNMVURFXSlkbmwKLUFDX1JFUVVJUkUoW0FNX0RFUF9UUkFDS10pZG5sCi0KLWlmZWxzZShbJDFdLCBDQywgICBbZGVwY2M9IiRDQyIgICBhbV9jb21waWxlcl9saXN0PV0sCi0gICAgICAgWyQxXSwgQ1hYLCAgW2RlcGNjPSIkQ1hYIiAgYW1fY29tcGlsZXJfbGlzdD1dLAotICAgICAgIFskMV0sIE9CSkMsIFtkZXBjYz0iJE9CSkMiIGFtX2NvbXBpbGVyX2xpc3Q9J2djYzMgZ2NjJ10sCi0gICAgICAgWyQxXSwgVVBDLCAgW2RlcGNjPSIkVVBDIiAgYW1fY29tcGlsZXJfbGlzdD1dLAotICAgICAgIFskMV0sIEdDSiwgIFtkZXBjYz0iJEdDSiIgIGFtX2NvbXBpbGVyX2xpc3Q9J2djYzMgZ2NjJ10sCi0gICAgICAgICAgICAgICAgICAgW2RlcGNjPSIkJDEiICAgYW1fY29tcGlsZXJfbGlzdD1dKQotCi1BQ19DQUNIRV9DSEVDSyhbZGVwZW5kZW5jeSBzdHlsZSBvZiAkZGVwY2NdLAotICAgICAgICAgICAgICAgW2FtX2N2XyQxX2RlcGVuZGVuY2llc19jb21waWxlcl90eXBlXSwKLVtpZiB0ZXN0IC16ICIkQU1ERVBfVFJVRSIgJiYgdGVzdCAtZiAiJGFtX2RlcGNvbXAiOyB0aGVuCi0gICMgV2UgbWFrZSBhIHN1YmRpciBhbmQgZG8gdGhlIHRlc3RzIHRoZXJlLiAgT3RoZXJ3aXNlIHdlIGNhbiBlbmQgdXAKLSAgIyBtYWtpbmcgYm9ndXMgZmlsZXMgdGhhdCB3ZSBkb24ndCBrbm93IGFib3V0IGFuZCBuZXZlciByZW1vdmUuICBGb3IKLSAgIyBpbnN0YW5jZSBpdCB3YXMgcmVwb3J0ZWQgdGhhdCBvbiBIUC1VWCB0aGUgZ2NjIHRlc3Qgd2lsbCBlbmQgdXAKLSAgIyBtYWtpbmcgYSBkdW1teSBmaWxlIG5hbWVkIGBEJyAtLSBiZWNhdXNlIGAtTUQnIG1lYW5zIGBwdXQgdGhlIG91dHB1dAotICAjIGluIEQnLgotICBta2RpciBjb25mdGVzdC5kaXIKLSAgIyBDb3B5IGRlcGNvbXAgdG8gc3ViZGlyIGJlY2F1c2Ugb3RoZXJ3aXNlIHdlIHdvbid0IGZpbmQgaXQgaWYgd2UncmUKLSAgIyB1c2luZyBhIHJlbGF0aXZlIGRpcmVjdG9yeS4KLSAgY3AgIiRhbV9kZXBjb21wIiBjb25mdGVzdC5kaXIKLSAgY2QgY29uZnRlc3QuZGlyCi0gICMgV2Ugd2lsbCBidWlsZCBvYmplY3RzIGFuZCBkZXBlbmRlbmNpZXMgaW4gYSBzdWJkaXJlY3RvcnkgYmVjYXVzZQotICAjIGl0IGhlbHBzIHRvIGRldGVjdCBpbmFwcGxpY2FibGUgZGVwZW5kZW5jeSBtb2Rlcy4gIEZvciBpbnN0YW5jZQotICAjIGJvdGggVHJ1NjQncyBjYyBhbmQgSUNDIHN1cHBvcnQgLU1EIHRvIG91dHB1dCBkZXBlbmRlbmNpZXMgYXMgYQotICAjIHNpZGUgZWZmZWN0IG9mIGNvbXBpbGF0aW9uLCBidXQgSUNDIHdpbGwgcHV0IHRoZSBkZXBlbmRlbmNpZXMgaW4KLSAgIyB0aGUgY3VycmVudCBkaXJlY3Rvcnkgd2hpbGUgVHJ1NjQgd2lsbCBwdXQgdGhlbSBpbiB0aGUgb2JqZWN0Ci0gICMgZGlyZWN0b3J5LgotICBta2RpciBzdWIKLQotICBhbV9jdl8kMV9kZXBlbmRlbmNpZXNfY29tcGlsZXJfdHlwZT1ub25lCi0gIGlmIHRlc3QgIiRhbV9jb21waWxlcl9saXN0IiA9ICIiOyB0aGVuCi0gICAgIGFtX2NvbXBpbGVyX2xpc3Q9YHNlZCAtbiBbJ3MvXiMqXChbYS16QS1aMC05XSpcKSkkL1wxL3AnXSA8IC4vZGVwY29tcGAKLSAgZmkKLSAgYW1fX3VuaXZlcnNhbD1mYWxzZQotICBtNF9jYXNlKFskMV0sIFtDQ10sCi0gICAgW2Nhc2UgIiAkZGVwY2MgIiBpbiAjKAotICAgICAqXCAtYXJjaFwgKlwgLWFyY2hcICopIGFtX191bml2ZXJzYWw9dHJ1ZSA7OwotICAgICBlc2FjXSwKLSAgICBbQ1hYXSwKLSAgICBbY2FzZSAiICRkZXBjYyAiIGluICMoCi0gICAgICpcIC1hcmNoXCAqXCAtYXJjaFwgKikgYW1fX3VuaXZlcnNhbD10cnVlIDs7Ci0gICAgIGVzYWNdKQotCi0gIGZvciBkZXBtb2RlIGluICRhbV9jb21waWxlcl9saXN0OyBkbwotICAgICMgU2V0dXAgYSBzb3VyY2Ugd2l0aCBtYW55IGRlcGVuZGVuY2llcywgYmVjYXVzZSBzb21lIGNvbXBpbGVycwotICAgICMgbGlrZSB0byB3cmFwIGxhcmdlIGRlcGVuZGVuY3kgbGlzdHMgb24gY29sdW1uIDgwICh3aXRoIFwpLCBhbmQKLSAgICAjIHdlIHNob3VsZCBub3QgY2hvb3NlIGEgZGVwY29tcCBtb2RlIHdoaWNoIGlzIGNvbmZ1c2VkIGJ5IHRoaXMuCi0gICAgIwotICAgICMgV2UgbmVlZCB0byByZWNyZWF0ZSB0aGVzZSBmaWxlcyBmb3IgZWFjaCB0ZXN0LCBhcyB0aGUgY29tcGlsZXIgbWF5Ci0gICAgIyBvdmVyd3JpdGUgc29tZSBvZiB0aGVtIHdoZW4gdGVzdGluZyB3aXRoIG9ic2N1cmUgY29tbWFuZCBsaW5lcy4KLSAgICAjIFRoaXMgaGFwcGVucyBhdCBsZWFzdCB3aXRoIHRoZSBBSVggQyBjb21waWxlci4KLSAgICA6ID4gc3ViL2NvbmZ0ZXN0LmMKLSAgICBmb3IgaSBpbiAxIDIgMyA0IDUgNjsgZG8KLSAgICAgIGVjaG8gJyNpbmNsdWRlICJjb25mdHN0JyRpJy5oIicgPj4gc3ViL2NvbmZ0ZXN0LmMKLSAgICAgICMgVXNpbmcgYDogPiBzdWIvY29uZnRzdCRpLmgnIGNyZWF0ZXMgb25seSBzdWIvY29uZnRzdDEuaCB3aXRoCi0gICAgICAjIFNvbGFyaXMgOCdzIHsvdXNyLH0vYmluL3NoLgotICAgICAgdG91Y2ggc3ViL2NvbmZ0c3QkaS5oCi0gICAgZG9uZQotICAgIGVjaG8gIiR7YW1fX2luY2x1ZGV9ICR7YW1fX3F1b3RlfXN1Yi9jb25mdGVzdC5QbyR7YW1fX3F1b3RlfSIgPiBjb25mbWYKLQotICAgICMgV2UgY2hlY2sgd2l0aCBgLWMnIGFuZCBgLW8nIGZvciB0aGUgc2FrZSBvZiB0aGUgImRhc2htc3Rkb3V0IgotICAgICMgbW9kZS4gIEl0IHR1cm5zIG91dCB0aGF0IHRoZSBTdW5Qcm8gQysrIGNvbXBpbGVyIGRvZXMgbm90IHByb3Blcmx5Ci0gICAgIyBoYW5kbGUgYC1NIC1vJywgYW5kIHdlIG5lZWQgdG8gZGV0ZWN0IHRoaXMuICBBbHNvLCBzb21lIEludGVsCi0gICAgIyB2ZXJzaW9ucyBoYWQgdHJvdWJsZSB3aXRoIG91dHB1dCBpbiBzdWJkaXJzCi0gICAgYW1fX29iaj1zdWIvY29uZnRlc3QuJHtPQkpFWFQtb30KLSAgICBhbV9fbWludXNfb2JqPSItbyAkYW1fX29iaiIKLSAgICBjYXNlICRkZXBtb2RlIGluCi0gICAgZ2NjKQotICAgICAgIyBUaGlzIGRlcG1vZGUgY2F1c2VzIGEgY29tcGlsZXIgcmFjZSBpbiB1bml2ZXJzYWwgbW9kZS4KLSAgICAgIHRlc3QgIiRhbV9fdW5pdmVyc2FsIiA9IGZhbHNlIHx8IGNvbnRpbnVlCi0gICAgICA7OwotICAgIG5vc2lkZWVmZmVjdCkKLSAgICAgICMgYWZ0ZXIgdGhpcyB0YWcsIG1lY2hhbmlzbXMgYXJlIG5vdCBieSBzaWRlLWVmZmVjdCwgc28gdGhleSdsbAotICAgICAgIyBvbmx5IGJlIHVzZWQgd2hlbiBleHBsaWNpdGx5IHJlcXVlc3RlZAotICAgICAgaWYgdGVzdCAieCRlbmFibGVfZGVwZW5kZW5jeV90cmFja2luZyIgPSB4eWVzOyB0aGVuCi0JY29udGludWUKLSAgICAgIGVsc2UKLQlicmVhawotICAgICAgZmkKLSAgICAgIDs7Ci0gICAgbXN2aXN1YWxjcHAgfCBtc3ZjbXN5cykKLSAgICAgICMgVGhpcyBjb21waWxlciB3b24ndCBncm9rIGAtYyAtbycsIGJ1dCBhbHNvLCB0aGUgbWludXNvIHRlc3QgaGFzCi0gICAgICAjIG5vdCBydW4geWV0LiAgVGhlc2UgZGVwbW9kZXMgYXJlIGxhdGUgZW5vdWdoIGluIHRoZSBnYW1lLCBhbmQKLSAgICAgICMgc28gd2VhayB0aGF0IHRoZWlyIGZ1bmN0aW9uaW5nIHNob3VsZCBub3QgYmUgaW1wYWN0ZWQuCi0gICAgICBhbV9fb2JqPWNvbmZ0ZXN0LiR7T0JKRVhULW99Ci0gICAgICBhbV9fbWludXNfb2JqPQotICAgICAgOzsKLSAgICBub25lKSBicmVhayA7OwotICAgIGVzYWMKLSAgICBpZiBkZXBtb2RlPSRkZXBtb2RlIFwKLSAgICAgICBzb3VyY2U9c3ViL2NvbmZ0ZXN0LmMgb2JqZWN0PSRhbV9fb2JqIFwKLSAgICAgICBkZXBmaWxlPXN1Yi9jb25mdGVzdC5QbyB0bXBkZXBmaWxlPXN1Yi9jb25mdGVzdC5UUG8gXAotICAgICAgICRTSEVMTCAuL2RlcGNvbXAgJGRlcGNjIC1jICRhbV9fbWludXNfb2JqIHN1Yi9jb25mdGVzdC5jIFwKLSAgICAgICAgID4vZGV2L251bGwgMj5jb25mdGVzdC5lcnIgJiYKLSAgICAgICBncmVwIHN1Yi9jb25mdHN0MS5oIHN1Yi9jb25mdGVzdC5QbyA+IC9kZXYvbnVsbCAyPiYxICYmCi0gICAgICAgZ3JlcCBzdWIvY29uZnRzdDYuaCBzdWIvY29uZnRlc3QuUG8gPiAvZGV2L251bGwgMj4mMSAmJgotICAgICAgIGdyZXAgJGFtX19vYmogc3ViL2NvbmZ0ZXN0LlBvID4gL2Rldi9udWxsIDI+JjEgJiYKLSAgICAgICAke01BS0UtbWFrZX0gLXMgLWYgY29uZm1mID4gL2Rldi9udWxsIDI+JjE7IHRoZW4KLSAgICAgICMgaWNjIGRvZXNuJ3QgY2hva2Ugb24gdW5rbm93biBvcHRpb25zLCBpdCB3aWxsIGp1c3QgaXNzdWUgd2FybmluZ3MKLSAgICAgICMgb3IgcmVtYXJrcyAoZXZlbiB3aXRoIC1XZXJyb3IpLiAgU28gd2UgZ3JlcCBzdGRlcnIgZm9yIGFueSBtZXNzYWdlCi0gICAgICAjIHRoYXQgc2F5cyBhbiBvcHRpb24gd2FzIGlnbm9yZWQgb3Igbm90IHN1cHBvcnRlZC4KLSAgICAgICMgV2hlbiBnaXZlbiAtTVAsIGljYyA3LjAgYW5kIDcuMSBjb21wbGFpbiB0aHVzbHk6Ci0gICAgICAjICAgaWNjOiBDb21tYW5kIGxpbmUgd2FybmluZzogaWdub3Jpbmcgb3B0aW9uICctTSc7IG5vIGFyZ3VtZW50IHJlcXVpcmVkCi0gICAgICAjIFRoZSBkaWFnbm9zaXMgY2hhbmdlZCBpbiBpY2MgOC4wOgotICAgICAgIyAgIGljYzogQ29tbWFuZCBsaW5lIHJlbWFyazogb3B0aW9uICctTVAnIG5vdCBzdXBwb3J0ZWQKLSAgICAgIGlmIChncmVwICdpZ25vcmluZyBvcHRpb24nIGNvbmZ0ZXN0LmVyciB8fAotICAgICAgICAgIGdyZXAgJ25vdCBzdXBwb3J0ZWQnIGNvbmZ0ZXN0LmVycikgPi9kZXYvbnVsbCAyPiYxOyB0aGVuIDo7IGVsc2UKLSAgICAgICAgYW1fY3ZfJDFfZGVwZW5kZW5jaWVzX2NvbXBpbGVyX3R5cGU9JGRlcG1vZGUKLSAgICAgICAgYnJlYWsKLSAgICAgIGZpCi0gICAgZmkKLSAgZG9uZQotCi0gIGNkIC4uCi0gIHJtIC1yZiBjb25mdGVzdC5kaXIKLWVsc2UKLSAgYW1fY3ZfJDFfZGVwZW5kZW5jaWVzX2NvbXBpbGVyX3R5cGU9bm9uZQotZmkKLV0pCi1BQ19TVUJTVChbJDFERVBNT0RFXSwgW2RlcG1vZGU9JGFtX2N2XyQxX2RlcGVuZGVuY2llc19jb21waWxlcl90eXBlXSkKLUFNX0NPTkRJVElPTkFMKFthbV9fZmFzdGRlcCQxXSwgWwotICB0ZXN0ICJ4JGVuYWJsZV9kZXBlbmRlbmN5X3RyYWNraW5nIiAhPSB4bm8gXAotICAmJiB0ZXN0ICIkYW1fY3ZfJDFfZGVwZW5kZW5jaWVzX2NvbXBpbGVyX3R5cGUiID0gZ2NjM10pCi1dKQotCi0KLSMgQU1fU0VUX0RFUERJUgotIyAtLS0tLS0tLS0tLS0tCi0jIENob29zZSBhIGRpcmVjdG9yeSBuYW1lIGZvciBkZXBlbmRlbmN5IGZpbGVzLgotIyBUaGlzIG1hY3JvIGlzIEFDX1JFUVVJUkVkIGluIF9BTV9ERVBFTkRFTkNJRVMKLUFDX0RFRlVOKFtBTV9TRVRfREVQRElSXSwKLVtBQ19SRVFVSVJFKFtBTV9TRVRfTEVBRElOR19ET1RdKWRubAotQUNfU1VCU1QoW0RFUERJUl0sIFsiJHthbV9fbGVhZGluZ19kb3R9ZGVwcyJdKWRubAotXSkKLQotCi0jIEFNX0RFUF9UUkFDSwotIyAtLS0tLS0tLS0tLS0KLUFDX0RFRlVOKFtBTV9ERVBfVFJBQ0tdLAotW0FDX0FSR19FTkFCTEUoZGVwZW5kZW5jeS10cmFja2luZywKLVsgIC0tZGlzYWJsZS1kZXBlbmRlbmN5LXRyYWNraW5nICBzcGVlZHMgdXAgb25lLXRpbWUgYnVpbGQKLSAgLS1lbmFibGUtZGVwZW5kZW5jeS10cmFja2luZyAgIGRvIG5vdCByZWplY3Qgc2xvdyBkZXBlbmRlbmN5IGV4dHJhY3RvcnNdKQotaWYgdGVzdCAieCRlbmFibGVfZGVwZW5kZW5jeV90cmFja2luZyIgIT0geG5vOyB0aGVuCi0gIGFtX2RlcGNvbXA9IiRhY19hdXhfZGlyL2RlcGNvbXAiCi0gIEFNREVQQkFDS1NMQVNIPSdcJwotZmkKLUFNX0NPTkRJVElPTkFMKFtBTURFUF0sIFt0ZXN0ICJ4JGVuYWJsZV9kZXBlbmRlbmN5X3RyYWNraW5nIiAhPSB4bm9dKQotQUNfU1VCU1QoW0FNREVQQkFDS1NMQVNIXSlkbmwKLV9BTV9TVUJTVF9OT1RNQUtFKFtBTURFUEJBQ0tTTEFTSF0pZG5sCi1dKQotCi0jIEdlbmVyYXRlIGNvZGUgdG8gc2V0IHVwIGRlcGVuZGVuY3kgdHJhY2tpbmcuICAgICAgICAgICAgICAtKi0gQXV0b2NvbmYgLSotCi0KLSMgQ29weXJpZ2h0IChDKSAxOTk5LCAyMDAwLCAyMDAxLCAyMDAyLCAyMDAzLCAyMDA0LCAyMDA1LCAyMDA4Ci0jIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgotIwotIyBUaGlzIGZpbGUgaXMgZnJlZSBzb2Z0d2FyZTsgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbgotIyBnaXZlcyB1bmxpbWl0ZWQgcGVybWlzc2lvbiB0byBjb3B5IGFuZC9vciBkaXN0cmlidXRlIGl0LAotIyB3aXRoIG9yIHdpdGhvdXQgbW9kaWZpY2F0aW9ucywgYXMgbG9uZyBhcyB0aGlzIG5vdGljZSBpcyBwcmVzZXJ2ZWQuCi0KLSNzZXJpYWwgNQotCi0jIF9BTV9PVVRQVVRfREVQRU5ERU5DWV9DT01NQU5EUwotIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLUFDX0RFRlVOKFtfQU1fT1VUUFVUX0RFUEVOREVOQ1lfQ09NTUFORFNdLAotW3sKLSAgIyBBdXRvY29uZiAyLjYyIHF1b3RlcyAtLWZpbGUgYXJndW1lbnRzIGZvciBldmFsLCBidXQgbm90IHdoZW4gZmlsZXMKLSAgIyBhcmUgbGlzdGVkIHdpdGhvdXQgLS1maWxlLiAgTGV0J3MgcGxheSBzYWZlIGFuZCBvbmx5IGVuYWJsZSB0aGUgZXZhbAotICAjIGlmIHdlIGRldGVjdCB0aGUgcXVvdGluZy4KLSAgY2FzZSAkQ09ORklHX0ZJTEVTIGluCi0gICpcJyopIGV2YWwgc2V0IHggIiRDT05GSUdfRklMRVMiIDs7Ci0gICopICAgc2V0IHggJENPTkZJR19GSUxFUyA7OwotICBlc2FjCi0gIHNoaWZ0Ci0gIGZvciBtZgotICBkbwotICAgICMgU3RyaXAgTUYgc28gd2UgZW5kIHVwIHdpdGggdGhlIG5hbWUgb2YgdGhlIGZpbGUuCi0gICAgbWY9YGVjaG8gIiRtZiIgfCBzZWQgLWUgJ3MvOi4qJC8vJ2AKLSAgICAjIENoZWNrIHdoZXRoZXIgdGhpcyBpcyBhbiBBdXRvbWFrZSBnZW5lcmF0ZWQgTWFrZWZpbGUgb3Igbm90LgotICAgICMgV2UgdXNlZCB0byBtYXRjaCBvbmx5IHRoZSBmaWxlcyBuYW1lZCBgTWFrZWZpbGUuaW4nLCBidXQKLSAgICAjIHNvbWUgcGVvcGxlIHJlbmFtZSB0aGVtOyBzbyBpbnN0ZWFkIHdlIGxvb2sgYXQgdGhlIGZpbGUgY29udGVudC4KLSAgICAjIEdyZXAnaW5nIHRoZSBmaXJzdCBsaW5lIGlzIG5vdCBlbm91Z2g6IHNvbWUgcGVvcGxlIHBvc3QtcHJvY2VzcwotICAgICMgZWFjaCBNYWtlZmlsZS5pbiBhbmQgYWRkIGEgbmV3IGxpbmUgb24gdG9wIG9mIGVhY2ggZmlsZSB0byBzYXkgc28uCi0gICAgIyBHcmVwJ2luZyB0aGUgd2hvbGUgZmlsZSBpcyBub3QgZ29vZCBlaXRoZXI6IEFJWCBncmVwIGhhcyBhIGxpbmUKLSAgICAjIGxpbWl0IG9mIDIwNDgsIGJ1dCBhbGwgc2VkJ3Mgd2Uga25vdyBoYXZlIHVuZGVyc3RhbmQgYXQgbGVhc3QgNDAwMC4KLSAgICBpZiBzZWQgLW4gJ3MsXiMuKmdlbmVyYXRlZCBieSBhdXRvbWFrZS4qLFgscCcgIiRtZiIgfCBncmVwIFggPi9kZXYvbnVsbCAyPiYxOyB0aGVuCi0gICAgICBkaXJwYXJ0PWBBU19ESVJOQU1FKCIkbWYiKWAKLSAgICBlbHNlCi0gICAgICBjb250aW51ZQotICAgIGZpCi0gICAgIyBFeHRyYWN0IHRoZSBkZWZpbml0aW9uIG9mIERFUERJUiwgYW1fX2luY2x1ZGUsIGFuZCBhbV9fcXVvdGUKLSAgICAjIGZyb20gdGhlIE1ha2VmaWxlIHdpdGhvdXQgcnVubmluZyBgbWFrZScuCi0gICAgREVQRElSPWBzZWQgLW4gJ3MvXkRFUERJUiA9IC8vcCcgPCAiJG1mImAKLSAgICB0ZXN0IC16ICIkREVQRElSIiAmJiBjb250aW51ZQotICAgIGFtX19pbmNsdWRlPWBzZWQgLW4gJ3MvXmFtX19pbmNsdWRlID0gLy9wJyA8ICIkbWYiYAotICAgIHRlc3QgLXogImFtX19pbmNsdWRlIiAmJiBjb250aW51ZQotICAgIGFtX19xdW90ZT1gc2VkIC1uICdzL15hbV9fcXVvdGUgPSAvL3AnIDwgIiRtZiJgCi0gICAgIyBXaGVuIHVzaW5nIGFuc2kya25yLCBVIG1heSBiZSBlbXB0eSBvciBhbiB1bmRlcnNjb3JlOyBleHBhbmQgaXQKLSAgICBVPWBzZWQgLW4gJ3MvXlUgPSAvL3AnIDwgIiRtZiJgCi0gICAgIyBGaW5kIGFsbCBkZXBlbmRlbmN5IG91dHB1dCBmaWxlcywgdGhleSBhcmUgaW5jbHVkZWQgZmlsZXMgd2l0aAotICAgICMgJChERVBESVIpIGluIHRoZWlyIG5hbWVzLiAgV2UgaW52b2tlIHNlZCB0d2ljZSBiZWNhdXNlIGl0IGlzIHRoZQotICAgICMgc2ltcGxlc3QgYXBwcm9hY2ggdG8gY2hhbmdpbmcgJChERVBESVIpIHRvIGl0cyBhY3R1YWwgdmFsdWUgaW4gdGhlCi0gICAgIyBleHBhbnNpb24uCi0gICAgZm9yIGZpbGUgaW4gYHNlZCAtbiAiCi0gICAgICBzL14kYW1fX2luY2x1ZGUgJGFtX19xdW90ZVwoLiooREVQRElSKS4qXCkkYW1fX3F1b3RlIickL1wxL3AnIDwiJG1mIiB8IFwKLQkgc2VkIC1lICdzL1wkKERFUERJUikvJyIkREVQRElSIicvZycgLWUgJ3MvXCRVLyciJFUiJy9nJ2A7IGRvCi0gICAgICAjIE1ha2Ugc3VyZSB0aGUgZGlyZWN0b3J5IGV4aXN0cy4KLSAgICAgIHRlc3QgLWYgIiRkaXJwYXJ0LyRmaWxlIiAmJiBjb250aW51ZQotICAgICAgZmRpcj1gQVNfRElSTkFNRShbIiRmaWxlIl0pYAotICAgICAgQVNfTUtESVJfUChbJGRpcnBhcnQvJGZkaXJdKQotICAgICAgIyBlY2hvICJjcmVhdGluZyAkZGlycGFydC8kZmlsZSIKLSAgICAgIGVjaG8gJyMgZHVtbXknID4gIiRkaXJwYXJ0LyRmaWxlIgotICAgIGRvbmUKLSAgZG9uZQotfQotXSkjIF9BTV9PVVRQVVRfREVQRU5ERU5DWV9DT01NQU5EUwotCi0KLSMgQU1fT1VUUFVUX0RFUEVOREVOQ1lfQ09NTUFORFMKLSMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSMgVGhpcyBtYWNybyBzaG91bGQgb25seSBiZSBpbnZva2VkIG9uY2UgLS0gdXNlIHZpYSBBQ19SRVFVSVJFLgotIwotIyBUaGlzIGNvZGUgaXMgb25seSByZXF1aXJlZCB3aGVuIGF1dG9tYXRpYyBkZXBlbmRlbmN5IHRyYWNraW5nCi0jIGlzIGVuYWJsZWQuICBGSVhNRS4gIFRoaXMgY3JlYXRlcyBlYWNoIGAuUCcgZmlsZSB0aGF0IHdlIHdpbGwKLSMgbmVlZCBpbiBvcmRlciB0byBib290c3RyYXAgdGhlIGRlcGVuZGVuY3kgaGFuZGxpbmcgY29kZS4KLUFDX0RFRlVOKFtBTV9PVVRQVVRfREVQRU5ERU5DWV9DT01NQU5EU10sCi1bQUNfQ09ORklHX0NPTU1BTkRTKFtkZXBmaWxlc10sCi0gICAgIFt0ZXN0IHgiJEFNREVQX1RSVUUiICE9IHgiIiB8fCBfQU1fT1VUUFVUX0RFUEVOREVOQ1lfQ09NTUFORFNdLAotICAgICBbQU1ERVBfVFJVRT0iJEFNREVQX1RSVUUiIGFjX2F1eF9kaXI9IiRhY19hdXhfZGlyIl0pCi1dKQotCi0jIERvIGFsbCB0aGUgd29yayBmb3IgQXV0b21ha2UuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtKi0gQXV0b2NvbmYgLSotCi0KLSMgQ29weXJpZ2h0IChDKSAxOTk2LCAxOTk3LCAxOTk4LCAxOTk5LCAyMDAwLCAyMDAxLCAyMDAyLCAyMDAzLCAyMDA0LAotIyAyMDA1LCAyMDA2LCAyMDA4LCAyMDA5IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgotIwotIyBUaGlzIGZpbGUgaXMgZnJlZSBzb2Z0d2FyZTsgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbgotIyBnaXZlcyB1bmxpbWl0ZWQgcGVybWlzc2lvbiB0byBjb3B5IGFuZC9vciBkaXN0cmlidXRlIGl0LAotIyB3aXRoIG9yIHdpdGhvdXQgbW9kaWZpY2F0aW9ucywgYXMgbG9uZyBhcyB0aGlzIG5vdGljZSBpcyBwcmVzZXJ2ZWQuCi0KLSMgc2VyaWFsIDE2Ci0KLSMgVGhpcyBtYWNybyBhY3R1YWxseSBkb2VzIHRvbyBtdWNoLiAgU29tZSBjaGVja3MgYXJlIG9ubHkgbmVlZGVkIGlmCi0jIHlvdXIgcGFja2FnZSBkb2VzIGNlcnRhaW4gdGhpbmdzLiAgQnV0IHRoaXMgaXNuJ3QgcmVhbGx5IGEgYmlnIGRlYWwuCi0KLSMgQU1fSU5JVF9BVVRPTUFLRShQQUNLQUdFLCBWRVJTSU9OLCBbTk8tREVGSU5FXSkKLSMgQU1fSU5JVF9BVVRPTUFLRShbT1BUSU9OU10pCi0jIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0jIFRoZSBjYWxsIHdpdGggUEFDS0FHRSBhbmQgVkVSU0lPTiBhcmd1bWVudHMgaXMgdGhlIG9sZCBzdHlsZQotIyBjYWxsIChwcmUgYXV0b2NvbmYtMi41MCksIHdoaWNoIGlzIGJlaW5nIHBoYXNlZCBvdXQuICBQQUNLQUdFCi0jIGFuZCBWRVJTSU9OIHNob3VsZCBub3cgYmUgcGFzc2VkIHRvIEFDX0lOSVQgYW5kIHJlbW92ZWQgZnJvbQotIyB0aGUgY2FsbCB0byBBTV9JTklUX0FVVE9NQUtFLgotIyBXZSBzdXBwb3J0IGJvdGggY2FsbCBzdHlsZXMgZm9yIHRoZSB0cmFuc2l0aW9uLiAgQWZ0ZXIKLSMgdGhlIG5leHQgQXV0b21ha2UgcmVsZWFzZSwgQXV0b2NvbmYgY2FuIG1ha2UgdGhlIEFDX0lOSVQKLSMgYXJndW1lbnRzIG1hbmRhdG9yeSwgYW5kIHRoZW4gd2UgY2FuIGRlcGVuZCBvbiBhIG5ldyBBdXRvY29uZgotIyByZWxlYXNlIGFuZCBkcm9wIHRoZSBvbGQgY2FsbCBzdXBwb3J0LgotQUNfREVGVU4oW0FNX0lOSVRfQVVUT01BS0VdLAotW0FDX1BSRVJFUShbMi42Ml0pZG5sCi1kbmwgQXV0b2NvbmYgd2FudHMgdG8gZGlzYWxsb3cgQU1fIG5hbWVzLiAgV2UgZXhwbGljaXRseSBhbGxvdwotZG5sIHRoZSBvbmVzIHdlIGNhcmUgYWJvdXQuCi1tNF9wYXR0ZXJuX2FsbG93KFteQU1fW0EtWl0rRkxBR1MkXSlkbmwKLUFDX1JFUVVJUkUoW0FNX1NFVF9DVVJSRU5UX0FVVE9NQUtFX1ZFUlNJT05dKWRubAotQUNfUkVRVUlSRShbQUNfUFJPR19JTlNUQUxMXSlkbmwKLWlmIHRlc3QgImBjZCAkc3JjZGlyICYmIHB3ZGAiICE9ICJgcHdkYCI7IHRoZW4KLSAgIyBVc2UgLUkkKHNyY2Rpcikgb25seSB3aGVuICQoc3JjZGlyKSAhPSAuLCBzbyB0aGF0IG1ha2UncyBvdXRwdXQKLSAgIyBpcyBub3QgcG9sbHV0ZWQgd2l0aCByZXBlYXRlZCAiLUkuIgotICBBQ19TVUJTVChbYW1fX2lzcmNdLCBbJyAtSSQoc3JjZGlyKSddKV9BTV9TVUJTVF9OT1RNQUtFKFthbV9faXNyY10pZG5sCi0gICMgdGVzdCB0byBzZWUgaWYgc3JjZGlyIGFscmVhZHkgY29uZmlndXJlZAotICBpZiB0ZXN0IC1mICRzcmNkaXIvY29uZmlnLnN0YXR1czsgdGhlbgotICAgIEFDX01TR19FUlJPUihbc291cmNlIGRpcmVjdG9yeSBhbHJlYWR5IGNvbmZpZ3VyZWQ7IHJ1biAibWFrZSBkaXN0Y2xlYW4iIHRoZXJlIGZpcnN0XSkKLSAgZmkKLWZpCi0KLSMgdGVzdCB3aGV0aGVyIHdlIGhhdmUgY3lncGF0aAotaWYgdGVzdCAteiAiJENZR1BBVEhfVyI7IHRoZW4KLSAgaWYgKGN5Z3BhdGggLS12ZXJzaW9uKSA+L2Rldi9udWxsIDI+L2Rldi9udWxsOyB0aGVuCi0gICAgQ1lHUEFUSF9XPSdjeWdwYXRoIC13JwotICBlbHNlCi0gICAgQ1lHUEFUSF9XPWVjaG8KLSAgZmkKLWZpCi1BQ19TVUJTVChbQ1lHUEFUSF9XXSkKLQotIyBEZWZpbmUgdGhlIGlkZW50aXR5IG9mIHRoZSBwYWNrYWdlLgotZG5sIERpc3Rpbmd1aXNoIGJldHdlZW4gb2xkLXN0eWxlIGFuZCBuZXctc3R5bGUgY2FsbHMuCi1tNF9pZnZhbChbJDJdLAotW200X2lmdmFsKFskM10sIFtfQU1fU0VUX09QVElPTihbbm8tZGVmaW5lXSldKWRubAotIEFDX1NVQlNUKFtQQUNLQUdFXSwgWyQxXSlkbmwKLSBBQ19TVUJTVChbVkVSU0lPTl0sIFskMl0pXSwKLVtfQU1fU0VUX09QVElPTlMoWyQxXSlkbmwKLWRubCBEaWFnbm9zZSBvbGQtc3R5bGUgQUNfSU5JVCB3aXRoIG5ldy1zdHlsZSBBTV9BVVRPTUFLRV9JTklULgotbTRfaWYobTRfaWZkZWYoW0FDX1BBQ0tBR0VfTkFNRV0sIDEpbTRfaWZkZWYoW0FDX1BBQ0tBR0VfVkVSU0lPTl0sIDEpLCAxMSwsCi0gIFttNF9mYXRhbChbQUNfSU5JVCBzaG91bGQgYmUgY2FsbGVkIHdpdGggcGFja2FnZSBhbmQgdmVyc2lvbiBhcmd1bWVudHNdKV0pZG5sCi0gQUNfU1VCU1QoW1BBQ0tBR0VdLCBbJ0FDX1BBQ0tBR0VfVEFSTkFNRSddKWRubAotIEFDX1NVQlNUKFtWRVJTSU9OXSwgWydBQ19QQUNLQUdFX1ZFUlNJT04nXSldKWRubAotCi1fQU1fSUZfT1BUSU9OKFtuby1kZWZpbmVdLCwKLVtBQ19ERUZJTkVfVU5RVU9URUQoUEFDS0FHRSwgIiRQQUNLQUdFIiwgW05hbWUgb2YgcGFja2FnZV0pCi0gQUNfREVGSU5FX1VOUVVPVEVEKFZFUlNJT04sICIkVkVSU0lPTiIsIFtWZXJzaW9uIG51bWJlciBvZiBwYWNrYWdlXSldKWRubAotCi0jIFNvbWUgdG9vbHMgQXV0b21ha2UgbmVlZHMuCi1BQ19SRVFVSVJFKFtBTV9TQU5JVFlfQ0hFQ0tdKWRubAotQUNfUkVRVUlSRShbQUNfQVJHX1BST0dSQU1dKWRubAotQU1fTUlTU0lOR19QUk9HKEFDTE9DQUwsIGFjbG9jYWwtJHthbV9fYXBpX3ZlcnNpb259KQotQU1fTUlTU0lOR19QUk9HKEFVVE9DT05GLCBhdXRvY29uZikKLUFNX01JU1NJTkdfUFJPRyhBVVRPTUFLRSwgYXV0b21ha2UtJHthbV9fYXBpX3ZlcnNpb259KQotQU1fTUlTU0lOR19QUk9HKEFVVE9IRUFERVIsIGF1dG9oZWFkZXIpCi1BTV9NSVNTSU5HX1BST0coTUFLRUlORk8sIG1ha2VpbmZvKQotQUNfUkVRVUlSRShbQU1fUFJPR19JTlNUQUxMX1NIXSlkbmwKLUFDX1JFUVVJUkUoW0FNX1BST0dfSU5TVEFMTF9TVFJJUF0pZG5sCi1BQ19SRVFVSVJFKFtBTV9QUk9HX01LRElSX1BdKWRubAotIyBXZSBuZWVkIGF3ayBmb3IgdGhlICJjaGVjayIgdGFyZ2V0LiAgVGhlIHN5c3RlbSAiYXdrIiBpcyBiYWQgb24KLSMgc29tZSBwbGF0Zm9ybXMuCi1BQ19SRVFVSVJFKFtBQ19QUk9HX0FXS10pZG5sCi1BQ19SRVFVSVJFKFtBQ19QUk9HX01BS0VfU0VUXSlkbmwKLUFDX1JFUVVJUkUoW0FNX1NFVF9MRUFESU5HX0RPVF0pZG5sCi1fQU1fSUZfT1BUSU9OKFt0YXItdXN0YXJdLCBbX0FNX1BST0dfVEFSKFt1c3Rhcl0pXSwKLQkgICAgICBbX0FNX0lGX09QVElPTihbdGFyLXBheF0sIFtfQU1fUFJPR19UQVIoW3BheF0pXSwKLQkJCSAgICAgW19BTV9QUk9HX1RBUihbdjddKV0pXSkKLV9BTV9JRl9PUFRJT04oW25vLWRlcGVuZGVuY2llc10sLAotW0FDX1BST1ZJREVfSUZFTFNFKFtBQ19QUk9HX0NDXSwKLQkJICBbX0FNX0RFUEVOREVOQ0lFUyhDQyldLAotCQkgIFtkZWZpbmUoW0FDX1BST0dfQ0NdLAotCQkJICBkZWZuKFtBQ19QUk9HX0NDXSlbX0FNX0RFUEVOREVOQ0lFUyhDQyldKV0pZG5sCi1BQ19QUk9WSURFX0lGRUxTRShbQUNfUFJPR19DWFhdLAotCQkgIFtfQU1fREVQRU5ERU5DSUVTKENYWCldLAotCQkgIFtkZWZpbmUoW0FDX1BST0dfQ1hYXSwKLQkJCSAgZGVmbihbQUNfUFJPR19DWFhdKVtfQU1fREVQRU5ERU5DSUVTKENYWCldKV0pZG5sCi1BQ19QUk9WSURFX0lGRUxTRShbQUNfUFJPR19PQkpDXSwKLQkJICBbX0FNX0RFUEVOREVOQ0lFUyhPQkpDKV0sCi0JCSAgW2RlZmluZShbQUNfUFJPR19PQkpDXSwKLQkJCSAgZGVmbihbQUNfUFJPR19PQkpDXSlbX0FNX0RFUEVOREVOQ0lFUyhPQkpDKV0pXSlkbmwKLV0pCi1fQU1fSUZfT1BUSU9OKFtzaWxlbnQtcnVsZXNdLCBbQUNfUkVRVUlSRShbQU1fU0lMRU5UX1JVTEVTXSldKWRubAotZG5sIFRoZSBgcGFyYWxsZWwtdGVzdHMnIGRyaXZlciBtYXkgbmVlZCB0byBrbm93IGFib3V0IEVYRUVYVCwgc28gYWRkIHRoZQotZG5sIGBhbV9fRVhFRVhUJyBjb25kaXRpb25hbCBpZiBfQU1fQ09NUElMRVJfRVhFRVhUIHdhcyBzZWVuLiAgVGhpcyBtYWNybwotZG5sIGlzIGhvb2tlZCBvbnRvIF9BQ19DT01QSUxFUl9FWEVFWFQgZWFybHksIHNlZSBiZWxvdy4KLUFDX0NPTkZJR19DT01NQU5EU19QUkUoZG5sCi1bbTRfcHJvdmlkZV9pZihbX0FNX0NPTVBJTEVSX0VYRUVYVF0sCi0gIFtBTV9DT05ESVRJT05BTChbYW1fX0VYRUVYVF0sIFt0ZXN0IC1uICIkRVhFRVhUIl0pXSldKWRubAotXSkKLQotZG5sIEhvb2sgaW50byBgX0FDX0NPTVBJTEVSX0VYRUVYVCcgZWFybHkgdG8gbGVhcm4gaXRzIGV4cGFuc2lvbi4gIERvIG5vdAotZG5sIGFkZCB0aGUgY29uZGl0aW9uYWwgcmlnaHQgaGVyZSwgYXMgX0FDX0NPTVBJTEVSX0VYRUVYVCBtYXkgYmUgZnVydGhlcgotZG5sIG1hbmdsZWQgYnkgQXV0b2NvbmYgYW5kIHJ1biBpbiBhIHNoZWxsIGNvbmRpdGlvbmFsIHN0YXRlbWVudC4KLW00X2RlZmluZShbX0FDX0NPTVBJTEVSX0VYRUVYVF0sCi1tNF9kZWZuKFtfQUNfQ09NUElMRVJfRVhFRVhUXSlbbTRfcHJvdmlkZShbX0FNX0NPTVBJTEVSX0VYRUVYVF0pXSkKLQotCi0jIFdoZW4gY29uZmlnLnN0YXR1cyBnZW5lcmF0ZXMgYSBoZWFkZXIsIHdlIG11c3QgdXBkYXRlIHRoZSBzdGFtcC1oIGZpbGUuCi0jIFRoaXMgZmlsZSByZXNpZGVzIGluIHRoZSBzYW1lIGRpcmVjdG9yeSBhcyB0aGUgY29uZmlnIGhlYWRlcgotIyB0aGF0IGlzIGdlbmVyYXRlZC4gIFRoZSBzdGFtcCBmaWxlcyBhcmUgbnVtYmVyZWQgdG8gaGF2ZSBkaWZmZXJlbnQgbmFtZXMuCi0KLSMgQXV0b2NvbmYgY2FsbHMgX0FDX0FNX0NPTkZJR19IRUFERVJfSE9PSyAod2hlbiBkZWZpbmVkKSBpbiB0aGUKLSMgbG9vcCB3aGVyZSBjb25maWcuc3RhdHVzIGNyZWF0ZXMgdGhlIGhlYWRlcnMsIHNvIHdlIGNhbiBnZW5lcmF0ZQotIyBvdXIgc3RhbXAgZmlsZXMgdGhlcmUuCi1BQ19ERUZVTihbX0FDX0FNX0NPTkZJR19IRUFERVJfSE9PS10sCi1bIyBDb21wdXRlICQxJ3MgaW5kZXggaW4gJGNvbmZpZ19oZWFkZXJzLgotX2FtX2FyZz0kMQotX2FtX3N0YW1wX2NvdW50PTEKLWZvciBfYW1faGVhZGVyIGluICRjb25maWdfaGVhZGVycyA6OyBkbwotICBjYXNlICRfYW1faGVhZGVyIGluCi0gICAgJF9hbV9hcmcgfCAkX2FtX2FyZzoqICkKLSAgICAgIGJyZWFrIDs7Ci0gICAgKiApCi0gICAgICBfYW1fc3RhbXBfY291bnQ9YGV4cHIgJF9hbV9zdGFtcF9jb3VudCArIDFgIDs7Ci0gIGVzYWMKLWRvbmUKLWVjaG8gInRpbWVzdGFtcCBmb3IgJF9hbV9hcmciID5gQVNfRElSTkFNRShbIiRfYW1fYXJnIl0pYC9zdGFtcC1oW10kX2FtX3N0YW1wX2NvdW50XSkKLQotIyBDb3B5cmlnaHQgKEMpIDIwMDEsIDIwMDMsIDIwMDUsIDIwMDggIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgotIwotIyBUaGlzIGZpbGUgaXMgZnJlZSBzb2Z0d2FyZTsgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbgotIyBnaXZlcyB1bmxpbWl0ZWQgcGVybWlzc2lvbiB0byBjb3B5IGFuZC9vciBkaXN0cmlidXRlIGl0LAotIyB3aXRoIG9yIHdpdGhvdXQgbW9kaWZpY2F0aW9ucywgYXMgbG9uZyBhcyB0aGlzIG5vdGljZSBpcyBwcmVzZXJ2ZWQuCi0KLSMgQU1fUFJPR19JTlNUQUxMX1NICi0jIC0tLS0tLS0tLS0tLS0tLS0tLQotIyBEZWZpbmUgJGluc3RhbGxfc2guCi1BQ19ERUZVTihbQU1fUFJPR19JTlNUQUxMX1NIXSwKLVtBQ19SRVFVSVJFKFtBTV9BVVhfRElSX0VYUEFORF0pZG5sCi1pZiB0ZXN0IHgiJHtpbnN0YWxsX3NofSIgIT0geHNldDsgdGhlbgotICBjYXNlICRhbV9hdXhfZGlyIGluCi0gICpcICogfCAqXAkqKQotICAgIGluc3RhbGxfc2g9Ilwke1NIRUxMfSAnJGFtX2F1eF9kaXIvaW5zdGFsbC1zaCciIDs7Ci0gICopCi0gICAgaW5zdGFsbF9zaD0iXCR7U0hFTEx9ICRhbV9hdXhfZGlyL2luc3RhbGwtc2giCi0gIGVzYWMKLWZpCi1BQ19TVUJTVChpbnN0YWxsX3NoKV0pCi0KLSMgQ29weXJpZ2h0IChDKSAyMDAzLCAyMDA1ICBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KLSMKLSMgVGhpcyBmaWxlIGlzIGZyZWUgc29mdHdhcmU7IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24KLSMgZ2l2ZXMgdW5saW1pdGVkIHBlcm1pc3Npb24gdG8gY29weSBhbmQvb3IgZGlzdHJpYnV0ZSBpdCwKLSMgd2l0aCBvciB3aXRob3V0IG1vZGlmaWNhdGlvbnMsIGFzIGxvbmcgYXMgdGhpcyBub3RpY2UgaXMgcHJlc2VydmVkLgotCi0jIHNlcmlhbCAyCi0KLSMgQ2hlY2sgd2hldGhlciB0aGUgdW5kZXJseWluZyBmaWxlLXN5c3RlbSBzdXBwb3J0cyBmaWxlbmFtZXMKLSMgd2l0aCBhIGxlYWRpbmcgZG90LiAgRm9yIGluc3RhbmNlIE1TLURPUyBkb2Vzbid0LgotQUNfREVGVU4oW0FNX1NFVF9MRUFESU5HX0RPVF0sCi1bcm0gLXJmIC50c3QgMj4vZGV2L251bGwKLW1rZGlyIC50c3QgMj4vZGV2L251bGwKLWlmIHRlc3QgLWQgLnRzdDsgdGhlbgotICBhbV9fbGVhZGluZ19kb3Q9LgotZWxzZQotICBhbV9fbGVhZGluZ19kb3Q9XwotZmkKLXJtZGlyIC50c3QgMj4vZGV2L251bGwKLUFDX1NVQlNUKFthbV9fbGVhZGluZ19kb3RdKV0pCi0KLSMgQWRkIC0tZW5hYmxlLW1haW50YWluZXItbW9kZSBvcHRpb24gdG8gY29uZmlndXJlLiAgICAgICAgIC0qLSBBdXRvY29uZiAtKi0KLSMgRnJvbSBKaW0gTWV5ZXJpbmcKLQotIyBDb3B5cmlnaHQgKEMpIDE5OTYsIDE5OTgsIDIwMDAsIDIwMDEsIDIwMDIsIDIwMDMsIDIwMDQsIDIwMDUsIDIwMDgKLSMgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCi0jCi0jIFRoaXMgZmlsZSBpcyBmcmVlIHNvZnR3YXJlOyB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uCi0jIGdpdmVzIHVubGltaXRlZCBwZXJtaXNzaW9uIHRvIGNvcHkgYW5kL29yIGRpc3RyaWJ1dGUgaXQsCi0jIHdpdGggb3Igd2l0aG91dCBtb2RpZmljYXRpb25zLCBhcyBsb25nIGFzIHRoaXMgbm90aWNlIGlzIHByZXNlcnZlZC4KLQotIyBzZXJpYWwgNQotCi0jIEFNX01BSU5UQUlORVJfTU9ERShbREVGQVVMVC1NT0RFXSkKLSMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotIyBDb250cm9sIG1haW50YWluZXItc3BlY2lmaWMgcG9ydGlvbnMgb2YgTWFrZWZpbGVzLgotIyBEZWZhdWx0IGlzIHRvIGRpc2FibGUgdGhlbSwgdW5sZXNzIGBlbmFibGUnIGlzIHBhc3NlZCBsaXRlcmFsbHkuCi0jIEZvciBzeW1tZXRyeSwgYGRpc2FibGUnIG1heSBiZSBwYXNzZWQgYXMgd2VsbC4gIEFueXdheSwgdGhlIHVzZXIKLSMgY2FuIG92ZXJyaWRlIHRoZSBkZWZhdWx0IHdpdGggdGhlIC0tZW5hYmxlLy0tZGlzYWJsZSBzd2l0Y2guCi1BQ19ERUZVTihbQU1fTUFJTlRBSU5FUl9NT0RFXSwKLVttNF9jYXNlKG00X2RlZmF1bHQoWyQxXSwgW2Rpc2FibGVdKSwKLSAgICAgICBbZW5hYmxlXSwgW200X2RlZmluZShbYW1fbWFpbnRhaW5lcl9vdGhlcl0sIFtkaXNhYmxlXSldLAotICAgICAgIFtkaXNhYmxlXSwgW200X2RlZmluZShbYW1fbWFpbnRhaW5lcl9vdGhlcl0sIFtlbmFibGVdKV0sCi0gICAgICAgW200X2RlZmluZShbYW1fbWFpbnRhaW5lcl9vdGhlcl0sIFtlbmFibGVdKQotICAgICAgICBtNF93YXJuKFtzeW50YXhdLCBbdW5leHBlY3RlZCBhcmd1bWVudCB0byBBTUAmdEBfTUFJTlRBSU5FUl9NT0RFOiAkMV0pXSkKLUFDX01TR19DSEVDS0lORyhbd2hldGhlciB0byBhbV9tYWludGFpbmVyX290aGVyIG1haW50YWluZXItc3BlY2lmaWMgcG9ydGlvbnMgb2YgTWFrZWZpbGVzXSkKLSAgZG5sIG1haW50YWluZXItbW9kZSdzIGRlZmF1bHQgaXMgJ2Rpc2FibGUnIHVubGVzcyAnZW5hYmxlJyBpcyBwYXNzZWQKLSAgQUNfQVJHX0VOQUJMRShbbWFpbnRhaW5lci1tb2RlXSwKLVsgIC0tXVthbV9tYWludGFpbmVyX290aGVyXVstbWFpbnRhaW5lci1tb2RlICBhbV9tYWludGFpbmVyX290aGVyIG1ha2UgcnVsZXMgYW5kIGRlcGVuZGVuY2llcyBub3QgdXNlZnVsCi0JCQkgIChhbmQgc29tZXRpbWVzIGNvbmZ1c2luZykgdG8gdGhlIGNhc3VhbCBpbnN0YWxsZXJdLAotICAgICAgW1VTRV9NQUlOVEFJTkVSX01PREU9JGVuYWJsZXZhbF0sCi0gICAgICBbVVNFX01BSU5UQUlORVJfTU9ERT1dbTRfaWYoYW1fbWFpbnRhaW5lcl9vdGhlciwgW2VuYWJsZV0sIFtub10sIFt5ZXNdKSkKLSAgQUNfTVNHX1JFU1VMVChbJFVTRV9NQUlOVEFJTkVSX01PREVdKQotICBBTV9DT05ESVRJT05BTChbTUFJTlRBSU5FUl9NT0RFXSwgW3Rlc3QgJFVTRV9NQUlOVEFJTkVSX01PREUgPSB5ZXNdKQotICBNQUlOVD0kTUFJTlRBSU5FUl9NT0RFX1RSVUUKLSAgQUNfU1VCU1QoW01BSU5UXSlkbmwKLV0KLSkKLQotQVVfREVGVU4oW2ptX01BSU5UQUlORVJfTU9ERV0sIFtBTV9NQUlOVEFJTkVSX01PREVdKQotCi0jIENoZWNrIHRvIHNlZSBob3cgJ21ha2UnIHRyZWF0cyBpbmNsdWRlcy4JICAgICAgICAgICAgLSotIEF1dG9jb25mIC0qLQotCi0jIENvcHlyaWdodCAoQykgMjAwMSwgMjAwMiwgMjAwMywgMjAwNSwgMjAwOSAgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCi0jCi0jIFRoaXMgZmlsZSBpcyBmcmVlIHNvZnR3YXJlOyB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uCi0jIGdpdmVzIHVubGltaXRlZCBwZXJtaXNzaW9uIHRvIGNvcHkgYW5kL29yIGRpc3RyaWJ1dGUgaXQsCi0jIHdpdGggb3Igd2l0aG91dCBtb2RpZmljYXRpb25zLCBhcyBsb25nIGFzIHRoaXMgbm90aWNlIGlzIHByZXNlcnZlZC4KLQotIyBzZXJpYWwgNAotCi0jIEFNX01BS0VfSU5DTFVERSgpCi0jIC0tLS0tLS0tLS0tLS0tLS0tCi0jIENoZWNrIHRvIHNlZSBob3cgbWFrZSB0cmVhdHMgaW5jbHVkZXMuCi1BQ19ERUZVTihbQU1fTUFLRV9JTkNMVURFXSwKLVthbV9tYWtlPSR7TUFLRS1tYWtlfQotY2F0ID4gY29uZmluYyA8PCAnRU5EJwotYW1fX2RvaXQ6Ci0JQGVjaG8gdGhpcyBpcyB0aGUgYW1fX2RvaXQgdGFyZ2V0Ci0uUEhPTlk6IGFtX19kb2l0Ci1FTkQKLSMgSWYgd2UgZG9uJ3QgZmluZCBhbiBpbmNsdWRlIGRpcmVjdGl2ZSwganVzdCBjb21tZW50IG91dCB0aGUgY29kZS4KLUFDX01TR19DSEVDS0lORyhbZm9yIHN0eWxlIG9mIGluY2x1ZGUgdXNlZCBieSAkYW1fbWFrZV0pCi1hbV9faW5jbHVkZT0iIyIKLWFtX19xdW90ZT0KLV9hbV9yZXN1bHQ9bm9uZQotIyBGaXJzdCB0cnkgR05VIG1ha2Ugc3R5bGUgaW5jbHVkZS4KLWVjaG8gImluY2x1ZGUgY29uZmluYyIgPiBjb25mbWYKLSMgSWdub3JlIGFsbCBraW5kcyBvZiBhZGRpdGlvbmFsIG91dHB1dCBmcm9tIGBtYWtlJy4KLWNhc2UgYCRhbV9tYWtlIC1zIC1mIGNvbmZtZiAyPiAvZGV2L251bGxgIGluICMoCi0qdGhlXCBhbV9fZG9pdFwgdGFyZ2V0KikKLSAgYW1fX2luY2x1ZGU9aW5jbHVkZQotICBhbV9fcXVvdGU9Ci0gIF9hbV9yZXN1bHQ9R05VCi0gIDs7Ci1lc2FjCi0jIE5vdyB0cnkgQlNEIG1ha2Ugc3R5bGUgaW5jbHVkZS4KLWlmIHRlc3QgIiRhbV9faW5jbHVkZSIgPSAiIyI7IHRoZW4KLSAgIGVjaG8gJy5pbmNsdWRlICJjb25maW5jIicgPiBjb25mbWYKLSAgIGNhc2UgYCRhbV9tYWtlIC1zIC1mIGNvbmZtZiAyPiAvZGV2L251bGxgIGluICMoCi0gICAqdGhlXCBhbV9fZG9pdFwgdGFyZ2V0KikKLSAgICAgYW1fX2luY2x1ZGU9LmluY2x1ZGUKLSAgICAgYW1fX3F1b3RlPSJcIiIKLSAgICAgX2FtX3Jlc3VsdD1CU0QKLSAgICAgOzsKLSAgIGVzYWMKLWZpCi1BQ19TVUJTVChbYW1fX2luY2x1ZGVdKQotQUNfU1VCU1QoW2FtX19xdW90ZV0pCi1BQ19NU0dfUkVTVUxUKFskX2FtX3Jlc3VsdF0pCi1ybSAtZiBjb25maW5jIGNvbmZtZgotXSkKLQotIyBGYWtlIHRoZSBleGlzdGVuY2Ugb2YgcHJvZ3JhbXMgdGhhdCBHTlUgbWFpbnRhaW5lcnMgdXNlLiAgLSotIEF1dG9jb25mIC0qLQotCi0jIENvcHlyaWdodCAoQykgMTk5NywgMTk5OSwgMjAwMCwgMjAwMSwgMjAwMywgMjAwNCwgMjAwNSwgMjAwOAotIyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KLSMKLSMgVGhpcyBmaWxlIGlzIGZyZWUgc29mdHdhcmU7IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24KLSMgZ2l2ZXMgdW5saW1pdGVkIHBlcm1pc3Npb24gdG8gY29weSBhbmQvb3IgZGlzdHJpYnV0ZSBpdCwKLSMgd2l0aCBvciB3aXRob3V0IG1vZGlmaWNhdGlvbnMsIGFzIGxvbmcgYXMgdGhpcyBub3RpY2UgaXMgcHJlc2VydmVkLgotCi0jIHNlcmlhbCA2Ci0KLSMgQU1fTUlTU0lOR19QUk9HKE5BTUUsIFBST0dSQU0pCi0jIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotQUNfREVGVU4oW0FNX01JU1NJTkdfUFJPR10sCi1bQUNfUkVRVUlSRShbQU1fTUlTU0lOR19IQVNfUlVOXSkKLSQxPSR7JDEtIiR7YW1fbWlzc2luZ19ydW59JDIifQotQUNfU1VCU1QoJDEpXSkKLQotCi0jIEFNX01JU1NJTkdfSEFTX1JVTgotIyAtLS0tLS0tLS0tLS0tLS0tLS0KLSMgRGVmaW5lIE1JU1NJTkcgaWYgbm90IGRlZmluZWQgc28gZmFyIGFuZCB0ZXN0IGlmIGl0IHN1cHBvcnRzIC0tcnVuLgotIyBJZiBpdCBkb2VzLCBzZXQgYW1fbWlzc2luZ19ydW4gdG8gdXNlIGl0LCBvdGhlcndpc2UsIHRvIG5vdGhpbmcuCi1BQ19ERUZVTihbQU1fTUlTU0lOR19IQVNfUlVOXSwKLVtBQ19SRVFVSVJFKFtBTV9BVVhfRElSX0VYUEFORF0pZG5sCi1BQ19SRVFVSVJFX0FVWF9GSUxFKFttaXNzaW5nXSlkbmwKLWlmIHRlc3QgeCIke01JU1NJTkcrc2V0fSIgIT0geHNldDsgdGhlbgotICBjYXNlICRhbV9hdXhfZGlyIGluCi0gICpcICogfCAqXAkqKQotICAgIE1JU1NJTkc9Ilwke1NIRUxMfSBcIiRhbV9hdXhfZGlyL21pc3NpbmdcIiIgOzsKLSAgKikKLSAgICBNSVNTSU5HPSJcJHtTSEVMTH0gJGFtX2F1eF9kaXIvbWlzc2luZyIgOzsKLSAgZXNhYwotZmkKLSMgVXNlIGV2YWwgdG8gZXhwYW5kICRTSEVMTAotaWYgZXZhbCAiJE1JU1NJTkcgLS1ydW4gdHJ1ZSI7IHRoZW4KLSAgYW1fbWlzc2luZ19ydW49IiRNSVNTSU5HIC0tcnVuICIKLWVsc2UKLSAgYW1fbWlzc2luZ19ydW49Ci0gIEFDX01TR19XQVJOKFtgbWlzc2luZycgc2NyaXB0IGlzIHRvbyBvbGQgb3IgbWlzc2luZ10pCi1maQotXSkKLQotIyBDb3B5cmlnaHQgKEMpIDIwMDMsIDIwMDQsIDIwMDUsIDIwMDYgIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgotIwotIyBUaGlzIGZpbGUgaXMgZnJlZSBzb2Z0d2FyZTsgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbgotIyBnaXZlcyB1bmxpbWl0ZWQgcGVybWlzc2lvbiB0byBjb3B5IGFuZC9vciBkaXN0cmlidXRlIGl0LAotIyB3aXRoIG9yIHdpdGhvdXQgbW9kaWZpY2F0aW9ucywgYXMgbG9uZyBhcyB0aGlzIG5vdGljZSBpcyBwcmVzZXJ2ZWQuCi0KLSMgQU1fUFJPR19NS0RJUl9QCi0jIC0tLS0tLS0tLS0tLS0tLQotIyBDaGVjayBmb3IgYG1rZGlyIC1wJy4KLUFDX0RFRlVOKFtBTV9QUk9HX01LRElSX1BdLAotW0FDX1BSRVJFUShbMi42MF0pZG5sCi1BQ19SRVFVSVJFKFtBQ19QUk9HX01LRElSX1BdKWRubAotZG5sIEF1dG9tYWtlIDEuOCB0byAxLjkuNiB1c2VkIHRvIGRlZmluZSBta2Rpcl9wLiAgV2Ugbm93IHVzZSBNS0RJUl9QLAotZG5sIHdoaWxlIGtlZXBpbmcgYSBkZWZpbml0aW9uIG9mIG1rZGlyX3AgZm9yIGJhY2t3YXJkIGNvbXBhdGliaWxpdHkuCi1kbmwgQE1LRElSX1BAIGlzIG1hZ2ljOiBBQ19PVVRQVVQgYWRqdXN0cyBpdHMgdmFsdWUgZm9yIGVhY2ggTWFrZWZpbGUuCi1kbmwgSG93ZXZlciB3ZSBjYW5ub3QgZGVmaW5lIG1rZGlyX3AgYXMgJChNS0RJUl9QKSBmb3IgdGhlIHNha2Ugb2YKLWRubCBNYWtlZmlsZS5pbnMgdGhhdCBkbyBub3QgZGVmaW5lIE1LRElSX1AsIHNvIHdlIGRvIG91ciBvd24KLWRubCBhZGp1c3RtZW50IHVzaW5nIHRvcF9idWlsZGRpciAod2hpY2ggaXMgZGVmaW5lZCBtb3JlIG9mdGVuIHRoYW4KLWRubCBNS0RJUl9QKS4KLUFDX1NVQlNUKFtta2Rpcl9wXSwgWyIkTUtESVJfUCJdKWRubAotY2FzZSAkbWtkaXJfcCBpbgotICBbW1xcLyRdXSogfCA/OltbXFwvXV0qKSA7OwotICAqLyopIG1rZGlyX3A9IlwkKHRvcF9idWlsZGRpcikvJG1rZGlyX3AiIDs7Ci1lc2FjCi1dKQotCi0jIEhlbHBlciBmdW5jdGlvbnMgZm9yIG9wdGlvbiBoYW5kbGluZy4gICAgICAgICAgICAgICAgICAgICAtKi0gQXV0b2NvbmYgLSotCi0KLSMgQ29weXJpZ2h0IChDKSAyMDAxLCAyMDAyLCAyMDAzLCAyMDA1LCAyMDA4ICBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KLSMKLSMgVGhpcyBmaWxlIGlzIGZyZWUgc29mdHdhcmU7IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24KLSMgZ2l2ZXMgdW5saW1pdGVkIHBlcm1pc3Npb24gdG8gY29weSBhbmQvb3IgZGlzdHJpYnV0ZSBpdCwKLSMgd2l0aCBvciB3aXRob3V0IG1vZGlmaWNhdGlvbnMsIGFzIGxvbmcgYXMgdGhpcyBub3RpY2UgaXMgcHJlc2VydmVkLgotCi0jIHNlcmlhbCA0Ci0KLSMgX0FNX01BTkdMRV9PUFRJT04oTkFNRSkKLSMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLUFDX0RFRlVOKFtfQU1fTUFOR0xFX09QVElPTl0sCi1bW19BTV9PUFRJT05fXW00X2JwYXRzdWJzdCgkMSwgW1teYS16QS1aMC05X11dLCBbX10pXSkKLQotIyBfQU1fU0VUX09QVElPTihOQU1FKQotIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSMgU2V0IG9wdGlvbiBOQU1FLiAgUHJlc2VudGx5IHRoYXQgb25seSBtZWFucyBkZWZpbmluZyBhIGZsYWcgZm9yIHRoaXMgb3B0aW9uLgotQUNfREVGVU4oW19BTV9TRVRfT1BUSU9OXSwKLVttNF9kZWZpbmUoX0FNX01BTkdMRV9PUFRJT04oWyQxXSksIDEpXSkKLQotIyBfQU1fU0VUX09QVElPTlMoT1BUSU9OUykKLSMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotIyBPUFRJT05TIGlzIGEgc3BhY2Utc2VwYXJhdGVkIGxpc3Qgb2YgQXV0b21ha2Ugb3B0aW9ucy4KLUFDX0RFRlVOKFtfQU1fU0VUX09QVElPTlNdLAotW200X2ZvcmVhY2hfdyhbX0FNX09wdGlvbl0sIFskMV0sIFtfQU1fU0VUX09QVElPTihfQU1fT3B0aW9uKV0pXSkKLQotIyBfQU1fSUZfT1BUSU9OKE9QVElPTiwgSUYtU0VULCBbSUYtTk9ULVNFVF0pCi0jIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSMgRXhlY3V0ZSBJRi1TRVQgaWYgT1BUSU9OIGlzIHNldCwgSUYtTk9ULVNFVCBvdGhlcndpc2UuCi1BQ19ERUZVTihbX0FNX0lGX09QVElPTl0sCi1bbTRfaWZzZXQoX0FNX01BTkdMRV9PUFRJT04oWyQxXSksIFskMl0sIFskM10pXSkKLQotIyBDb3B5cmlnaHQgKEMpIDE5OTYsIDE5OTcsIDE5OTgsIDIwMDAsIDIwMDEsIDIwMDIsIDIwMDMsIDIwMDUsIDIwMDYKLSMgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCi0jCi0jIFRoaXMgZmlsZSBpcyBmcmVlIHNvZnR3YXJlOyB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uCi0jIGdpdmVzIHVubGltaXRlZCBwZXJtaXNzaW9uIHRvIGNvcHkgYW5kL29yIGRpc3RyaWJ1dGUgaXQsCi0jIHdpdGggb3Igd2l0aG91dCBtb2RpZmljYXRpb25zLCBhcyBsb25nIGFzIHRoaXMgbm90aWNlIGlzIHByZXNlcnZlZC4KLQotIyBzZXJpYWwgNQotCi1BQ19ERUZVTihbQU1fQ19QUk9UT1RZUEVTXSwKLVtBQ19SRVFVSVJFKFtBQ19DX1BST1RPVFlQRVNdKQotaWYgdGVzdCAiJGFjX2N2X3Byb2dfY2Nfc3RkYyIgIT0gbm87IHRoZW4KLSAgVT0gQU5TSTJLTlI9Ci1lbHNlCi0gIFU9XyBBTlNJMktOUj0uL2Fuc2kya25yCi1maQotIyBFbnN1cmUgc29tZSBjaGVja3MgbmVlZGVkIGJ5IGFuc2kya25yIGl0c2VsZi4KLUFDX1JFUVVJUkUoW0FDX0hFQURFUl9TVERDXSkKLUFDX0NIRUNLX0hFQURFUlMoW3N0cmluZy5oXSkKLUFDX1NVQlNUKFtVXSlkbmwKLUFDX1NVQlNUKFtBTlNJMktOUl0pZG5sCi1fQU1fU1VCU1RfTk9UTUFLRShbQU5TSTJLTlJdKWRubAotXSkKLQotQVVfREVGVU4oW2ZwX0NfUFJPVE9UWVBFU10sIFtBTV9DX1BST1RPVFlQRVNdKQotCi0jIENoZWNrIHRvIG1ha2Ugc3VyZSB0aGF0IHRoZSBidWlsZCBlbnZpcm9ubWVudCBpcyBzYW5lLiAgICAtKi0gQXV0b2NvbmYgLSotCi0KLSMgQ29weXJpZ2h0IChDKSAxOTk2LCAxOTk3LCAyMDAwLCAyMDAxLCAyMDAzLCAyMDA1LCAyMDA4Ci0jIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgotIwotIyBUaGlzIGZpbGUgaXMgZnJlZSBzb2Z0d2FyZTsgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbgotIyBnaXZlcyB1bmxpbWl0ZWQgcGVybWlzc2lvbiB0byBjb3B5IGFuZC9vciBkaXN0cmlidXRlIGl0LAotIyB3aXRoIG9yIHdpdGhvdXQgbW9kaWZpY2F0aW9ucywgYXMgbG9uZyBhcyB0aGlzIG5vdGljZSBpcyBwcmVzZXJ2ZWQuCi0KLSMgc2VyaWFsIDUKLQotIyBBTV9TQU5JVFlfQ0hFQ0sKLSMgLS0tLS0tLS0tLS0tLS0tCi1BQ19ERUZVTihbQU1fU0FOSVRZX0NIRUNLXSwKLVtBQ19NU0dfQ0hFQ0tJTkcoW3doZXRoZXIgYnVpbGQgZW52aXJvbm1lbnQgaXMgc2FuZV0pCi0jIEp1c3QgaW4gY2FzZQotc2xlZXAgMQotZWNobyB0aW1lc3RhbXAgPiBjb25mdGVzdC5maWxlCi0jIFJlamVjdCB1bnNhZmUgY2hhcmFjdGVycyBpbiAkc3JjZGlyIG9yIHRoZSBhYnNvbHV0ZSB3b3JraW5nIGRpcmVjdG9yeQotIyBuYW1lLiAgQWNjZXB0IHNwYWNlIGFuZCB0YWIgb25seSBpbiB0aGUgbGF0dGVyLgotYW1fbGY9JwotJwotY2FzZSBgcHdkYCBpbgotICAqW1tcXFwiXCNcJFwmXCdcYCRhbV9sZl1dKikKLSAgICBBQ19NU0dfRVJST1IoW3Vuc2FmZSBhYnNvbHV0ZSB3b3JraW5nIGRpcmVjdG9yeSBuYW1lXSk7OwotZXNhYwotY2FzZSAkc3JjZGlyIGluCi0gICpbW1xcXCJcI1wkXCZcJ1xgJGFtX2xmXCBcCV1dKikKLSAgICBBQ19NU0dfRVJST1IoW3Vuc2FmZSBzcmNkaXIgdmFsdWU6IGAkc3JjZGlyJ10pOzsKLWVzYWMKLQotIyBEbyBgc2V0JyBpbiBhIHN1YnNoZWxsIHNvIHdlIGRvbid0IGNsb2JiZXIgdGhlIGN1cnJlbnQgc2hlbGwncwotIyBhcmd1bWVudHMuICBNdXN0IHRyeSAtTCBmaXJzdCBpbiBjYXNlIGNvbmZpZ3VyZSBpcyBhY3R1YWxseSBhCi0jIHN5bWxpbms7IHNvbWUgc3lzdGVtcyBwbGF5IHdlaXJkIGdhbWVzIHdpdGggdGhlIG1vZCB0aW1lIG9mIHN5bWxpbmtzCi0jIChlZyBGcmVlQlNEIHJldHVybnMgdGhlIG1vZCB0aW1lIG9mIHRoZSBzeW1saW5rJ3MgY29udGFpbmluZwotIyBkaXJlY3RvcnkpLgotaWYgKAotICAgc2V0IFggYGxzIC1MdCAiJHNyY2Rpci9jb25maWd1cmUiIGNvbmZ0ZXN0LmZpbGUgMj4gL2Rldi9udWxsYAotICAgaWYgdGVzdCAiJFsqXSIgPSAiWCI7IHRoZW4KLSAgICAgICMgLUwgZGlkbid0IHdvcmsuCi0gICAgICBzZXQgWCBgbHMgLXQgIiRzcmNkaXIvY29uZmlndXJlIiBjb25mdGVzdC5maWxlYAotICAgZmkKLSAgIHJtIC1mIGNvbmZ0ZXN0LmZpbGUKLSAgIGlmIHRlc3QgIiRbKl0iICE9ICJYICRzcmNkaXIvY29uZmlndXJlIGNvbmZ0ZXN0LmZpbGUiIFwKLSAgICAgICYmIHRlc3QgIiRbKl0iICE9ICJYIGNvbmZ0ZXN0LmZpbGUgJHNyY2Rpci9jb25maWd1cmUiOyB0aGVuCi0KLSAgICAgICMgSWYgbmVpdGhlciBtYXRjaGVkLCB0aGVuIHdlIGhhdmUgYSBicm9rZW4gbHMuICBUaGlzIGNhbiBoYXBwZW4KLSAgICAgICMgaWYsIGZvciBpbnN0YW5jZSwgQ09ORklHX1NIRUxMIGlzIGJhc2ggYW5kIGl0IGluaGVyaXRzIGEKLSAgICAgICMgYnJva2VuIGxzIGFsaWFzIGZyb20gdGhlIGVudmlyb25tZW50LiAgVGhpcyBoYXMgYWN0dWFsbHkKLSAgICAgICMgaGFwcGVuZWQuICBTdWNoIGEgc3lzdGVtIGNvdWxkIG5vdCBiZSBjb25zaWRlcmVkICJzYW5lIi4KLSAgICAgIEFDX01TR19FUlJPUihbbHMgLXQgYXBwZWFycyB0byBmYWlsLiAgTWFrZSBzdXJlIHRoZXJlIGlzIG5vdCBhIGJyb2tlbgotYWxpYXMgaW4geW91ciBlbnZpcm9ubWVudF0pCi0gICBmaQotCi0gICB0ZXN0ICIkWzJdIiA9IGNvbmZ0ZXN0LmZpbGUKLSAgICkKLXRoZW4KLSAgICMgT2suCi0gICA6Ci1lbHNlCi0gICBBQ19NU0dfRVJST1IoW25ld2x5IGNyZWF0ZWQgZmlsZSBpcyBvbGRlciB0aGFuIGRpc3RyaWJ1dGVkIGZpbGVzIQotQ2hlY2sgeW91ciBzeXN0ZW0gY2xvY2tdKQotZmkKLUFDX01TR19SRVNVTFQoeWVzKV0pCi0KLSMgQ29weXJpZ2h0IChDKSAyMDA5ICBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KLSMKLSMgVGhpcyBmaWxlIGlzIGZyZWUgc29mdHdhcmU7IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24KLSMgZ2l2ZXMgdW5saW1pdGVkIHBlcm1pc3Npb24gdG8gY29weSBhbmQvb3IgZGlzdHJpYnV0ZSBpdCwKLSMgd2l0aCBvciB3aXRob3V0IG1vZGlmaWNhdGlvbnMsIGFzIGxvbmcgYXMgdGhpcyBub3RpY2UgaXMgcHJlc2VydmVkLgotCi0jIHNlcmlhbCAxCi0KLSMgQU1fU0lMRU5UX1JVTEVTKFtERUZBVUxUXSkKLSMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSMgRW5hYmxlIGxlc3MgdmVyYm9zZSBidWlsZCBydWxlczsgd2l0aCB0aGUgZGVmYXVsdCBzZXQgdG8gREVGQVVMVAotIyAoYHllcycgYmVpbmcgbGVzcyB2ZXJib3NlLCBgbm8nIG9yIGVtcHR5IGJlaW5nIHZlcmJvc2UpLgotQUNfREVGVU4oW0FNX1NJTEVOVF9SVUxFU10sCi1bQUNfQVJHX0VOQUJMRShbc2lsZW50LXJ1bGVzXSwKLVsgIC0tZW5hYmxlLXNpbGVudC1ydWxlcyAgICAgICAgICBsZXNzIHZlcmJvc2UgYnVpbGQgb3V0cHV0ICh1bmRvOiBgbWFrZSBWPTEnKQotICAtLWRpc2FibGUtc2lsZW50LXJ1bGVzICAgICAgICAgdmVyYm9zZSBidWlsZCBvdXRwdXQgKHVuZG86IGBtYWtlIFY9MCcpXSkKLWNhc2UgJGVuYWJsZV9zaWxlbnRfcnVsZXMgaW4KLXllcykgQU1fREVGQVVMVF9WRVJCT1NJVFk9MDs7Ci1ubykgIEFNX0RFRkFVTFRfVkVSQk9TSVRZPTE7OwotKikgICBBTV9ERUZBVUxUX1ZFUkJPU0lUWT1tNF9pZihbJDFdLCBbeWVzXSwgWzBdLCBbMV0pOzsKLWVzYWMKLUFDX1NVQlNUKFtBTV9ERUZBVUxUX1ZFUkJPU0lUWV0pZG5sCi1BTV9CQUNLU0xBU0g9J1wnCi1BQ19TVUJTVChbQU1fQkFDS1NMQVNIXSlkbmwKLV9BTV9TVUJTVF9OT1RNQUtFKFtBTV9CQUNLU0xBU0hdKWRubAotXSkKLQotIyBDb3B5cmlnaHQgKEMpIDIwMDEsIDIwMDMsIDIwMDUgIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgotIwotIyBUaGlzIGZpbGUgaXMgZnJlZSBzb2Z0d2FyZTsgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbgotIyBnaXZlcyB1bmxpbWl0ZWQgcGVybWlzc2lvbiB0byBjb3B5IGFuZC9vciBkaXN0cmlidXRlIGl0LAotIyB3aXRoIG9yIHdpdGhvdXQgbW9kaWZpY2F0aW9ucywgYXMgbG9uZyBhcyB0aGlzIG5vdGljZSBpcyBwcmVzZXJ2ZWQuCi0KLSMgQU1fUFJPR19JTlNUQUxMX1NUUklQCi0jIC0tLS0tLS0tLS0tLS0tLS0tLS0tLQotIyBPbmUgaXNzdWUgd2l0aCB2ZW5kb3IgYGluc3RhbGwnIChldmVuIEdOVSkgaXMgdGhhdCB5b3UgY2FuJ3QKLSMgc3BlY2lmeSB0aGUgcHJvZ3JhbSB1c2VkIHRvIHN0cmlwIGJpbmFyaWVzLiAgVGhpcyBpcyBlc3BlY2lhbGx5Ci0jIGFubm95aW5nIGluIGNyb3NzLWNvbXBpbGluZyBlbnZpcm9ubWVudHMsIHdoZXJlIHRoZSBidWlsZCdzIHN0cmlwCi0jIGlzIHVubGlrZWx5IHRvIGhhbmRsZSB0aGUgaG9zdCdzIGJpbmFyaWVzLgotIyBGb3J0dW5hdGVseSBpbnN0YWxsLXNoIHdpbGwgaG9ub3IgYSBTVFJJUFBST0cgdmFyaWFibGUsIHNvIHdlCi0jIGFsd2F5cyB1c2UgaW5zdGFsbC1zaCBpbiBgbWFrZSBpbnN0YWxsLXN0cmlwJywgYW5kIGluaXRpYWxpemUKLSMgU1RSSVBQUk9HIHdpdGggdGhlIHZhbHVlIG9mIHRoZSBTVFJJUCB2YXJpYWJsZSAoc2V0IGJ5IHRoZSB1c2VyKS4KLUFDX0RFRlVOKFtBTV9QUk9HX0lOU1RBTExfU1RSSVBdLAotW0FDX1JFUVVJUkUoW0FNX1BST0dfSU5TVEFMTF9TSF0pZG5sCi0jIEluc3RhbGxlZCBiaW5hcmllcyBhcmUgdXN1YWxseSBzdHJpcHBlZCB1c2luZyBgc3RyaXAnIHdoZW4gdGhlIHVzZXIKLSMgcnVuIGBtYWtlIGluc3RhbGwtc3RyaXAnLiAgSG93ZXZlciBgc3RyaXAnIG1pZ2h0IG5vdCBiZSB0aGUgcmlnaHQKLSMgdG9vbCB0byB1c2UgaW4gY3Jvc3MtY29tcGlsYXRpb24gZW52aXJvbm1lbnRzLCB0aGVyZWZvcmUgQXV0b21ha2UKLSMgd2lsbCBob25vciB0aGUgYFNUUklQJyBlbnZpcm9ubWVudCB2YXJpYWJsZSB0byBvdmVycnVsZSB0aGlzIHByb2dyYW0uCi1kbmwgRG9uJ3QgdGVzdCBmb3IgJGNyb3NzX2NvbXBpbGluZyA9IHllcywgYmVjYXVzZSBpdCBtaWdodCBiZSBgbWF5YmUnLgotaWYgdGVzdCAiJGNyb3NzX2NvbXBpbGluZyIgIT0gbm87IHRoZW4KLSAgQUNfQ0hFQ0tfVE9PTChbU1RSSVBdLCBbc3RyaXBdLCA6KQotZmkKLUlOU1RBTExfU1RSSVBfUFJPR1JBTT0iXCQoaW5zdGFsbF9zaCkgLWMgLXMiCi1BQ19TVUJTVChbSU5TVEFMTF9TVFJJUF9QUk9HUkFNXSldKQotCi0jIENvcHlyaWdodCAoQykgMjAwNiwgMjAwOCAgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCi0jCi0jIFRoaXMgZmlsZSBpcyBmcmVlIHNvZnR3YXJlOyB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uCi0jIGdpdmVzIHVubGltaXRlZCBwZXJtaXNzaW9uIHRvIGNvcHkgYW5kL29yIGRpc3RyaWJ1dGUgaXQsCi0jIHdpdGggb3Igd2l0aG91dCBtb2RpZmljYXRpb25zLCBhcyBsb25nIGFzIHRoaXMgbm90aWNlIGlzIHByZXNlcnZlZC4KLQotIyBzZXJpYWwgMgotCi0jIF9BTV9TVUJTVF9OT1RNQUtFKFZBUklBQkxFKQotIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSMgUHJldmVudCBBdXRvbWFrZSBmcm9tIG91dHB1dHRpbmcgVkFSSUFCTEUgPSBAVkFSSUFCTEVAIGluIE1ha2VmaWxlLmluLgotIyBUaGlzIG1hY3JvIGlzIHRyYWNlZCBieSBBdXRvbWFrZS4KLUFDX0RFRlVOKFtfQU1fU1VCU1RfTk9UTUFLRV0pCi0KLSMgQU1fU1VCU1RfTk9UTUFLRShWQVJJQUJMRSkKLSMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0jIFB1YmxpYyBzaXN0ZXIgb2YgX0FNX1NVQlNUX05PVE1BS0UuCi1BQ19ERUZVTihbQU1fU1VCU1RfTk9UTUFLRV0sIFtfQU1fU1VCU1RfTk9UTUFLRSgkQCldKQotCi0jIENoZWNrIGhvdyB0byBjcmVhdGUgYSB0YXJiYWxsLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAtKi0gQXV0b2NvbmYgLSotCi0KLSMgQ29weXJpZ2h0IChDKSAyMDA0LCAyMDA1ICBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KLSMKLSMgVGhpcyBmaWxlIGlzIGZyZWUgc29mdHdhcmU7IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24KLSMgZ2l2ZXMgdW5saW1pdGVkIHBlcm1pc3Npb24gdG8gY29weSBhbmQvb3IgZGlzdHJpYnV0ZSBpdCwKLSMgd2l0aCBvciB3aXRob3V0IG1vZGlmaWNhdGlvbnMsIGFzIGxvbmcgYXMgdGhpcyBub3RpY2UgaXMgcHJlc2VydmVkLgotCi0jIHNlcmlhbCAyCi0KLSMgX0FNX1BST0dfVEFSKEZPUk1BVCkKLSMgLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSMgQ2hlY2sgaG93IHRvIGNyZWF0ZSBhIHRhcmJhbGwgaW4gZm9ybWF0IEZPUk1BVC4KLSMgRk9STUFUIHNob3VsZCBiZSBvbmUgb2YgYHY3JywgYHVzdGFyJywgb3IgYHBheCcuCi0jCi0jIFN1YnN0aXR1dGUgYSB2YXJpYWJsZSAkKGFtX190YXIpIHRoYXQgaXMgYSBjb21tYW5kCi0jIHdyaXRpbmcgdG8gc3Rkb3V0IGEgRk9STUFULXRhcmJhbGwgY29udGFpbmluZyB0aGUgZGlyZWN0b3J5Ci0jICR0YXJkaXIuCi0jICAgICB0YXJkaXI9ZGlyZWN0b3J5ICYmICQoYW1fX3RhcikgPiByZXN1bHQudGFyCi0jCi0jIFN1YnN0aXR1dGUgYSB2YXJpYWJsZSAkKGFtX191bnRhcikgdGhhdCBleHRyYWN0IHN1Y2gKLSMgYSB0YXJiYWxsIHJlYWQgZnJvbSBzdGRpbi4KLSMgICAgICQoYW1fX3VudGFyKSA8IHJlc3VsdC50YXIKLUFDX0RFRlVOKFtfQU1fUFJPR19UQVJdLAotWyMgQWx3YXlzIGRlZmluZSBBTVRBUiBmb3IgYmFja3dhcmQgY29tcGF0aWJpbGl0eS4KLUFNX01JU1NJTkdfUFJPRyhbQU1UQVJdLCBbdGFyXSkKLW00X2lmKFskMV0sIFt2N10sCi0gICAgIFthbV9fdGFyPScke0FNVEFSfSBjaG9mIC0gIiQkdGFyZGlyIic7IGFtX191bnRhcj0nJHtBTVRBUn0geGYgLSddLAotICAgICBbbTRfY2FzZShbJDFdLCBbdXN0YXJdLCwgW3BheF0sLAotICAgICAgICAgICAgICBbbTRfZmF0YWwoW1Vua25vd24gdGFyIGZvcm1hdF0pXSkKLUFDX01TR19DSEVDS0lORyhbaG93IHRvIGNyZWF0ZSBhICQxIHRhciBhcmNoaXZlXSkKLSMgTG9vcCBvdmVyIGFsbCBrbm93biBtZXRob2RzIHRvIGNyZWF0ZSBhIHRhciBhcmNoaXZlIHVudGlsIG9uZSB3b3Jrcy4KLV9hbV90b29scz0nZ251dGFyIG00X2lmKFskMV0sIFt1c3Rhcl0sIFtwbGFpbnRhcl0pIHBheCBjcGlvIG5vbmUnCi1fYW1fdG9vbHM9JHthbV9jdl9wcm9nX3Rhcl8kMS0kX2FtX3Rvb2xzfQotIyBEbyBub3QgZm9sZCB0aGUgYWJvdmUgdHdvIGxpbmUgaW50byBvbmUsIGJlY2F1c2UgVHJ1NjQgc2ggYW5kCi0jIFNvbGFyaXMgc2ggd2lsbCBub3QgZ3JvayBzcGFjZXMgaW4gdGhlIHJocyBvZiBgLScuCi1mb3IgX2FtX3Rvb2wgaW4gJF9hbV90b29scwotZG8KLSAgY2FzZSAkX2FtX3Rvb2wgaW4KLSAgZ251dGFyKQotICAgIGZvciBfYW1fdGFyIGluIHRhciBnbnV0YXIgZ3RhcjsKLSAgICBkbwotICAgICAgQU1fUlVOX0xPRyhbJF9hbV90YXIgLS12ZXJzaW9uXSkgJiYgYnJlYWsKLSAgICBkb25lCi0gICAgYW1fX3Rhcj0iJF9hbV90YXIgLS1mb3JtYXQ9bTRfaWYoWyQxXSwgW3BheF0sIFtwb3NpeF0sIFskMV0pIC1jaGYgLSAiJyIkJHRhcmRpciInCi0gICAgYW1fX3Rhcl89IiRfYW1fdGFyIC0tZm9ybWF0PW00X2lmKFskMV0sIFtwYXhdLCBbcG9zaXhdLCBbJDFdKSAtY2hmIC0gIiciJHRhcmRpciInCi0gICAgYW1fX3VudGFyPSIkX2FtX3RhciAteGYgLSIKLSAgICA7OwotICBwbGFpbnRhcikKLSAgICAjIE11c3Qgc2tpcCBHTlUgdGFyOiBpZiBpdCBkb2VzIG5vdCBzdXBwb3J0IC0tZm9ybWF0PSBpdCBkb2Vzbid0IGNyZWF0ZQotICAgICMgdXN0YXIgdGFyYmFsbCBlaXRoZXIuCi0gICAgKHRhciAtLXZlcnNpb24pID4vZGV2L251bGwgMj4mMSAmJiBjb250aW51ZQotICAgIGFtX190YXI9J3RhciBjaGYgLSAiJCR0YXJkaXIiJwotICAgIGFtX190YXJfPSd0YXIgY2hmIC0gIiR0YXJkaXIiJwotICAgIGFtX191bnRhcj0ndGFyIHhmIC0nCi0gICAgOzsKLSAgcGF4KQotICAgIGFtX190YXI9J3BheCAtTCAteCAkMSAtdyAiJCR0YXJkaXIiJwotICAgIGFtX190YXJfPSdwYXggLUwgLXggJDEgLXcgIiR0YXJkaXIiJwotICAgIGFtX191bnRhcj0ncGF4IC1yJwotICAgIDs7Ci0gIGNwaW8pCi0gICAgYW1fX3Rhcj0nZmluZCAiJCR0YXJkaXIiIC1wcmludCB8IGNwaW8gLW8gLUggJDEgLUwnCi0gICAgYW1fX3Rhcl89J2ZpbmQgIiR0YXJkaXIiIC1wcmludCB8IGNwaW8gLW8gLUggJDEgLUwnCi0gICAgYW1fX3VudGFyPSdjcGlvIC1pIC1IICQxIC1kJwotICAgIDs7Ci0gIG5vbmUpCi0gICAgYW1fX3Rhcj1mYWxzZQotICAgIGFtX190YXJfPWZhbHNlCi0gICAgYW1fX3VudGFyPWZhbHNlCi0gICAgOzsKLSAgZXNhYwotCi0gICMgSWYgdGhlIHZhbHVlIHdhcyBjYWNoZWQsIHN0b3Agbm93LiAgV2UganVzdCB3YW50ZWQgdG8gaGF2ZSBhbV9fdGFyCi0gICMgYW5kIGFtX191bnRhciBzZXQuCi0gIHRlc3QgLW4gIiR7YW1fY3ZfcHJvZ190YXJfJDF9IiAmJiBicmVhawotCi0gICMgdGFyL3VudGFyIGEgZHVtbXkgZGlyZWN0b3J5LCBhbmQgc3RvcCBpZiB0aGUgY29tbWFuZCB3b3JrcwotICBybSAtcmYgY29uZnRlc3QuZGlyCi0gIG1rZGlyIGNvbmZ0ZXN0LmRpcgotICBlY2hvIEdyZXBNZSA+IGNvbmZ0ZXN0LmRpci9maWxlCi0gIEFNX1JVTl9MT0coW3RhcmRpcj1jb25mdGVzdC5kaXIgJiYgZXZhbCAkYW1fX3Rhcl8gPmNvbmZ0ZXN0LnRhcl0pCi0gIHJtIC1yZiBjb25mdGVzdC5kaXIKLSAgaWYgdGVzdCAtcyBjb25mdGVzdC50YXI7IHRoZW4KLSAgICBBTV9SVU5fTE9HKFskYW1fX3VudGFyIDxjb25mdGVzdC50YXJdKQotICAgIGdyZXAgR3JlcE1lIGNvbmZ0ZXN0LmRpci9maWxlID4vZGV2L251bGwgMj4mMSAmJiBicmVhawotICBmaQotZG9uZQotcm0gLXJmIGNvbmZ0ZXN0LmRpcgotCi1BQ19DQUNIRV9WQUwoW2FtX2N2X3Byb2dfdGFyXyQxXSwgW2FtX2N2X3Byb2dfdGFyXyQxPSRfYW1fdG9vbF0pCi1BQ19NU0dfUkVTVUxUKFskYW1fY3ZfcHJvZ190YXJfJDFdKV0pCi1BQ19TVUJTVChbYW1fX3Rhcl0pCi1BQ19TVUJTVChbYW1fX3VudGFyXSkKLV0pICMgX0FNX1BST0dfVEFSCi0KZGlmZiAtLWdpdCBhL2Fuc2kya25yLjEgYi9hbnNpMmtuci4xCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBmOWVlNWE2Li4wMDAwMDAwCi0tLSBhL2Fuc2kya25yLjEKKysrIC9kZXYvbnVsbApAQCAtMSwzNiArMCwwIEBACi0uVEggQU5TSTJLTlIgMSAiMTkgSmFuIDE5OTYiCi0uU0ggTkFNRQotYW5zaTJrbnIgXC0gY29udmVydCBBTlNJIEMgdG8gS2VybmlnaGFuICYgUml0Y2hpZSBDCi0uU0ggU1lOT1BTSVMKLS5JIGFuc2kya25yCi1bLS12YXJhcmdzXSBpbnB1dF9maWxlIFtvdXRwdXRfZmlsZV0KLS5TSCBERVNDUklQVElPTgotSWYgbm8gb3V0cHV0X2ZpbGUgaXMgc3VwcGxpZWQsIG91dHB1dCBnb2VzIHRvIHN0ZG91dC4KLS5icgotVGhlcmUgYXJlIG5vIGVycm9yIG1lc3NhZ2VzLgotLnNwCi0uSSBhbnNpMmtucgotcmVjb2duaXplcyBmdW5jdGlvbiBkZWZpbml0aW9ucyBieSBzZWVpbmcgYSBub24ta2V5d29yZCBpZGVudGlmaWVyIGF0IHRoZSBsZWZ0Ci1tYXJnaW4sIGZvbGxvd2VkIGJ5IGEgbGVmdCBwYXJlbnRoZXNpcywgd2l0aCBhIHJpZ2h0IHBhcmVudGhlc2lzIGFzIHRoZSBsYXN0Ci1jaGFyYWN0ZXIgb24gdGhlIGxpbmUsIGFuZCB3aXRoIGEgbGVmdCBicmFjZSBhcyB0aGUgZmlyc3QgdG9rZW4gb24gdGhlCi1mb2xsb3dpbmcgbGluZSAoaWdub3JpbmcgcG9zc2libGUgaW50ZXJ2ZW5pbmcgY29tbWVudHMpLiAgSXQgd2lsbCByZWNvZ25pemUgYQotbXVsdGktbGluZSBoZWFkZXIgcHJvdmlkZWQgdGhhdCBubyBpbnRlcnZlbmluZyBsaW5lIGVuZHMgd2l0aCBhIGxlZnQgb3IgcmlnaHQKLWJyYWNlIG9yIGEgc2VtaWNvbG9uLiAgVGhlc2UgYWxnb3JpdGhtcyBpZ25vcmUgd2hpdGVzcGFjZSBhbmQgY29tbWVudHMsIGV4Y2VwdAotdGhhdCB0aGUgZnVuY3Rpb24gbmFtZSBtdXN0IGJlIHRoZSBmaXJzdCB0aGluZyBvbiB0aGUgbGluZS4KLS5zcAotVGhlIGZvbGxvd2luZyBjb25zdHJ1Y3RzIHdpbGwgY29uZnVzZSBpdDoKLS5icgotICAgICAtIEFueSBvdGhlciBjb25zdHJ1Y3QgdGhhdCBzdGFydHMgYXQgdGhlIGxlZnQgbWFyZ2luIGFuZCBmb2xsb3dzIHRoZQotYWJvdmUgc3ludGF4IChzdWNoIGFzIGEgbWFjcm8gb3IgZnVuY3Rpb24gY2FsbCkuCi0uYnIKLSAgICAgLSBTb21lIG1hY3JvcyB0aGF0IHRpbmtlciB3aXRoIHRoZSBzeW50YXggb2YgdGhlIGZ1bmN0aW9uIGhlYWRlci4KLS5zcAotVGhlIC0tdmFyYXJncyBzd2l0Y2ggaXMgb2Jzb2xldGUsIGFuZCBpcyByZWNvZ25pemVkIG9ubHkgZm9yCi1iYWNrd2FyZHMgY29tcGF0aWJpbGl0eS4gIFRoZSBwcmVzZW50IHZlcnNpb24gb2YKLS5JIGFuc2kya25yCi13aWxsIGFsd2F5cyBhdHRlbXB0IHRvIGNvbnZlcnQgYSAuLi4gYXJndW1lbnQgdG8gdmFfYWxpc3QgYW5kIHZhX2RjbC4KLS5TSCBBVVRIT1IKLUwuIFBldGVyIERldXRzY2ggPGdob3N0QGFsYWRkaW4uY29tPiB3cm90ZSB0aGUgb3JpZ2luYWwgYW5zaTJrbnIgYW5kCi1jb250aW51ZXMgdG8gbWFpbnRhaW4gdGhlIGN1cnJlbnQgdmVyc2lvbjsgbW9zdCBvZiB0aGUgY29kZSBpbiB0aGUgY3VycmVudAotdmVyc2lvbiBpcyBoaXMgd29yay4gIGFuc2kya25yIGFsc28gaW5jbHVkZXMgY29udHJpYnV0aW9ucyBieSBGcmFuY29pcwotUGluYXJkIDxwaW5hcmRAaXJvLnVtb250cmVhbC5jYT4gYW5kIEppbSBBdmVyYSA8amltYUBuZXRjb20uY29tPi4KZGlmZiAtLWdpdCBhL2Fuc2kya25yLmMgYi9hbnNpMmtuci5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlODRjMjEwLi4wMDAwMDAwCi0tLSBhL2Fuc2kya25yLmMKKysrIC9kZXYvbnVsbApAQCAtMSw3MzkgKzAsMCBAQAotLyogQ29weXJpZ2h0IChDKSAxOTg5LCAyMDAwIEFsYWRkaW4gRW50ZXJwcmlzZXMuICBBbGwgcmlnaHRzIHJlc2VydmVkLiAqLwotCi0vKiRJZDogYW5zaTJrbnIuYyx2IDEuMTQgMjAwMy8wOS8wNiAwNTozNjo1NiBlZ2dlcnQgRXhwICQqLwotLyogQ29udmVydCBBTlNJIEMgZnVuY3Rpb24gZGVmaW5pdGlvbnMgdG8gSyZSICgidHJhZGl0aW9uYWwgQyIpIHN5bnRheCAqLwotCi0vKgotYW5zaTJrbnIgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0IFdJVEhPVVQgQU5ZCi1XQVJSQU5UWS4gIE5vIGF1dGhvciBvciBkaXN0cmlidXRvciBhY2NlcHRzIHJlc3BvbnNpYmlsaXR5IHRvIGFueW9uZSBmb3IgdGhlCi1jb25zZXF1ZW5jZXMgb2YgdXNpbmcgaXQgb3IgZm9yIHdoZXRoZXIgaXQgc2VydmVzIGFueSBwYXJ0aWN1bGFyIHB1cnBvc2Ugb3IKLXdvcmtzIGF0IGFsbCwgdW5sZXNzIGhlIHNheXMgc28gaW4gd3JpdGluZy4gIFJlZmVyIHRvIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMKLUxpY2Vuc2UgKHRoZSAiR1BMIikgZm9yIGZ1bGwgZGV0YWlscy4KLQotRXZlcnlvbmUgaXMgZ3JhbnRlZCBwZXJtaXNzaW9uIHRvIGNvcHksIG1vZGlmeSBhbmQgcmVkaXN0cmlidXRlIGFuc2kya25yLAotYnV0IG9ubHkgdW5kZXIgdGhlIGNvbmRpdGlvbnMgZGVzY3JpYmVkIGluIHRoZSBHUEwuICBBIGNvcHkgb2YgdGhpcyBsaWNlbnNlCi1pcyBzdXBwb3NlZCB0byBoYXZlIGJlZW4gZ2l2ZW4gdG8geW91IGFsb25nIHdpdGggYW5zaTJrbnIgc28geW91IGNhbiBrbm93Ci15b3VyIHJpZ2h0cyBhbmQgcmVzcG9uc2liaWxpdGllcy4gIEl0IHNob3VsZCBiZSBpbiBhIGZpbGUgbmFtZWQgQ09QWUxFRlQsCi1vciwgaWYgdGhlcmUgaXMgbm8gZmlsZSBuYW1lZCBDT1BZTEVGVCwgYSBmaWxlIG5hbWVkIENPUFlJTkcuICBBbW9uZyBvdGhlcgotdGhpbmdzLCB0aGUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBub3RpY2UgbXVzdCBiZSBwcmVzZXJ2ZWQgb24gYWxsCi1jb3BpZXMuCi0KLVdlIGV4cGxpY2l0bHkgc3RhdGUgaGVyZSB3aGF0IHdlIGJlbGlldmUgaXMgYWxyZWFkeSBpbXBsaWVkIGJ5IHRoZSBHUEw6IGlmCi10aGUgYW5zaTJrbnIgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBhcyBhIHNlcGFyYXRlIHNldCBvZiBzb3VyY2VzIGFuZCBhCi1zZXBhcmF0ZSBleGVjdXRhYmxlIGZpbGUgd2hpY2ggYXJlIGFnZ3JlZ2F0ZWQgb24gYSBzdG9yYWdlIG1lZGl1bSB0b2dldGhlcgotd2l0aCBhbm90aGVyIHByb2dyYW0sIHRoaXMgaW4gaXRzZWxmIGRvZXMgbm90IGJyaW5nIHRoZSBvdGhlciBwcm9ncmFtIHVuZGVyCi10aGUgR1BMLCBub3IgZG9lcyB0aGUgbWVyZSBmYWN0IHRoYXQgc3VjaCBhIHByb2dyYW0gb3IgdGhlIHByb2NlZHVyZXMgZm9yCi1jb25zdHJ1Y3RpbmcgaXQgaW52b2tlIHRoZSBhbnNpMmtuciBleGVjdXRhYmxlIGJyaW5nIGFueSBvdGhlciBwYXJ0IG9mIHRoZQotcHJvZ3JhbSB1bmRlciB0aGUgR1BMLgotKi8KLQotLyoKLSAqIFVzYWdlOgotCWFuc2kya25yIFstLWZpbGVuYW1lIEZJTEVOQU1FXSBbSU5QVVRfRklMRSBbT1VUUFVUX0ZJTEVdXQotICogLS1maWxlbmFtZSBwcm92aWRlcyB0aGUgZmlsZSBuYW1lIGZvciB0aGUgI2xpbmUgZGlyZWN0aXZlIGluIHRoZSBvdXRwdXQsCi0gKiBvdmVycmlkaW5nIGlucHV0X2ZpbGUgKGlmIHByZXNlbnQpLgotICogSWYgbm8gaW5wdXRfZmlsZSBpcyBzdXBwbGllZCwgaW5wdXQgaXMgcmVhZCBmcm9tIHN0ZGluLgotICogSWYgbm8gb3V0cHV0X2ZpbGUgaXMgc3VwcGxpZWQsIG91dHB1dCBnb2VzIHRvIHN0ZG91dC4KLSAqIFRoZXJlIGFyZSBubyBlcnJvciBtZXNzYWdlcy4KLSAqCi0gKiBhbnNpMmtuciByZWNvZ25pemVzIGZ1bmN0aW9uIGRlZmluaXRpb25zIGJ5IHNlZWluZyBhIG5vbi1rZXl3b3JkCi0gKiBpZGVudGlmaWVyIGF0IHRoZSBsZWZ0IG1hcmdpbiwgZm9sbG93ZWQgYnkgYSBsZWZ0IHBhcmVudGhlc2lzLCB3aXRoIGEKLSAqIHJpZ2h0IHBhcmVudGhlc2lzIGFzIHRoZSBsYXN0IGNoYXJhY3RlciBvbiB0aGUgbGluZSwgYW5kIHdpdGggYSBsZWZ0Ci0gKiBicmFjZSBhcyB0aGUgZmlyc3QgdG9rZW4gb24gdGhlIGZvbGxvd2luZyBsaW5lIChpZ25vcmluZyBwb3NzaWJsZQotICogaW50ZXJ2ZW5pbmcgY29tbWVudHMgYW5kL29yIHByZXByb2Nlc3NvciBkaXJlY3RpdmVzKSwgZXhjZXB0IHRoYXQgYSBsaW5lCi0gKiBjb25zaXN0aW5nIG9mIG9ubHkKLSAqCWlkZW50aWZpZXIxKGlkZW50aWZpZXIyKQotICogd2lsbCBub3QgYmUgY29uc2lkZXJlZCBhIGZ1bmN0aW9uIGRlZmluaXRpb24gdW5sZXNzIGlkZW50aWZpZXIyIGlzCi0gKiB0aGUgd29yZCAidm9pZCIsIGFuZCBhIGxpbmUgY29uc2lzdGluZyBvZgotICoJaWRlbnRpZmllcjEoaWRlbnRpZmllcjIsIDw8YXJiaXRyYXJ5Pj4pCi0gKiB3aWxsIG5vdCBiZSBjb25zaWRlcmVkIGEgZnVuY3Rpb24gZGVmaW5pdGlvbi4KLSAqIGFuc2kya25yIHdpbGwgcmVjb2duaXplIGEgbXVsdGktbGluZSBoZWFkZXIgcHJvdmlkZWQgdGhhdCBubyBpbnRlcnZlbmluZwotICogbGluZSBlbmRzIHdpdGggYSBsZWZ0IG9yIHJpZ2h0IGJyYWNlIG9yIGEgc2VtaWNvbG9uLiAgVGhlc2UgYWxnb3JpdGhtcwotICogaWdub3JlIHdoaXRlc3BhY2UsIGNvbW1lbnRzLCBhbmQgcHJlcHJvY2Vzc29yIGRpcmVjdGl2ZXMsIGV4Y2VwdCB0aGF0Ci0gKiB0aGUgZnVuY3Rpb24gbmFtZSBtdXN0IGJlIHRoZSBmaXJzdCB0aGluZyBvbiB0aGUgbGluZS4gIFRoZSBmb2xsb3dpbmcKLSAqIGNvbnN0cnVjdHMgd2lsbCBjb25mdXNlIGl0OgotICoJLSBBbnkgb3RoZXIgY29uc3RydWN0IHRoYXQgc3RhcnRzIGF0IHRoZSBsZWZ0IG1hcmdpbiBhbmQKLSAqCSAgICBmb2xsb3dzIHRoZSBhYm92ZSBzeW50YXggKHN1Y2ggYXMgYSBtYWNybyBvciBmdW5jdGlvbiBjYWxsKS4KLSAqCS0gU29tZSBtYWNyb3MgdGhhdCB0aW5rZXIgd2l0aCB0aGUgc3ludGF4IG9mIGZ1bmN0aW9uIGhlYWRlcnMuCi0gKi8KLQotLyoKLSAqIFRoZSBvcmlnaW5hbCBhbmQgcHJpbmNpcGFsIGF1dGhvciBvZiBhbnNpMmtuciBpcyBMLiBQZXRlciBEZXV0c2NoCi0gKiA8Z2hvc3RAYWxhZGRpbi5jb20+LiAgT3RoZXIgYXV0aG9ycyBhcmUgbm90ZWQgaW4gdGhlIGNoYW5nZSBoaXN0b3J5Ci0gKiB0aGF0IGZvbGxvd3MgKGluIHJldmVyc2UgY2hyb25vbG9naWNhbCBvcmRlcik6Ci0KLQlscGQgMjAwMC0wNC0xMiBiYWNrcyBvdXQgRWdnZXJ0J3MgY2hhbmdlcyBiZWNhdXNlIG9mIGJ1Z3M6Ci0JLSBjb25jYXRsaXRzIGRpZG4ndCBkZWNsYXJlIHRoZSB0eXBlIG9mIGl0cyBidWZlbmQgYXJndW1lbnQ7Ci0JLSBjb25jYXRsaXRzIGRpZG4ndCByZWNvZ25pemUgd2hlbiBpdCB3YXMgaW5zaWRlIGEgY29tbWVudDsKLQktIHNjYW5zdHJpbmcgY291bGQgc2NhbiBiYWNrd2FyZCBwYXN0IHRoZSBiZWdpbm5pbmcgb2YgdGhlIHN0cmluZzsgd2hlbgotCS0gdGhlIGNoZWNrIGZvciBcICsgbmV3bGluZSBpbiBzY2Fuc3RyaW5nIHdhcyB1bm5lY2Vzc2FyeS4KLQotCTIwMDAtMDMtMDUgIFBhdWwgRWdnZXJ0ICA8ZWdnZXJ0QHR3aW5zdW4uY29tPgotCi0JQWRkIHN1cHBvcnQgZm9yIGNvbmNhdGVuYXRlZCBzdHJpbmcgbGl0ZXJhbHMuCi0JKiBhbnNpMmtuci5jIChjb25jYXRsaXRzKTogTmV3IGRlY2wuCi0JKG1haW4pOiBJbnZva2UgY29uY2F0bGl0cyB0byBjb25jYXRlbmF0ZSBzdHJpbmcgbGl0ZXJhbHMuCi0JKHNjYW5zdHJpbmcpOiBIYW5kbGUgYmFja3NsYXNoLW5ld2xpbmUgY29ycmVjdGx5LiAgV29yayB3aXRoCi0JY2hhcmFjdGVyIGNvbnN0YW50cy4gIEZpeCBidWcgd2hlbiBzY2FubmluZyBiYWNrd2FyZHMgdGhyb3VnaAotCWJhY2tzbGFzaC1xdW90ZS4gIENoZWNrIGZvciB1bnRlcm1pbmF0ZWQgc3RyaW5ncy4KLQkoY29udmVydDEpOiBQYXJzZSBjaGFyYWN0ZXIgY29uc3RhbnRzLCB0b28uCi0JKGFwcGVuZGxpbmUsIGNvbmNhdGxpdHMpOiBOZXcgZnVuY3Rpb25zLgotCSogYW5zaTJrbnIuMTogRG9jdW1lbnQgdGhpcy4KLQotCWxwZCAxOTk5LTA4LTE3IGFkZGVkIGNvZGUgdG8gYWxsb3cgcHJlcHJvY2Vzc29yIGRpcmVjdGl2ZXMKLQkJd2hlcmV2ZXIgY29tbWVudHMgYXJlIGFsbG93ZWQKLQlscGQgMTk5OS0wNC0xMiBhZGRlZCBtaW5vciBmaXhlcyBmcm9tIFBhdmVsIFJvc2tpbgotCQk8cGF2ZWxfcm9za2luQGdlb2NpdGllcy5jb20+IGZvciBjbGVhbiBjb21waWxhdGlvbiB3aXRoCi0JCWdjYyAtVyAtV2FsbAotCWxwZCAxOTk5LTAzLTIyIGFkZGVkIGhhY2sgdG8gcmVjb2duaXplIGxpbmVzIGNvbnNpc3Rpbmcgb2YKLQkJaWRlbnRpZmllcjEoaWRlbnRpZmllcjIsIHh4eCkgYXMgKm5vdCogYmVpbmcgcHJvY2VkdXJlcwotCWxwZCAxOTk5LTAyLTAzIG1hZGUgaW5kZW50YXRpb24gb2YgcHJlcHJvY2Vzc29yIGNvbW1hbmRzIGNvbnNpc3RlbnQKLQlscGQgMTk5OS0wMS0yOCBmaXhlZCB0d28gYnVnczogYSAnLycgaW4gYW4gYXJndW1lbnQgbGlzdCBjYXVzZWQgYW4KLQkJZW5kbGVzcyBsb29wOyBxdW90ZWQgc3RyaW5ncyB3aXRoaW4gYW4gYXJndW1lbnQgbGlzdAotCQljb25mdXNlZCB0aGUgcGFyc2VyCi0JbHBkIDE5OTktMDEtMjQgYWRkZWQgYSBjaGVjayBmb3Igd3JpdGUgZXJyb3JzIG9uIHRoZSBvdXRwdXQsCi0JCXN1Z2dlc3RlZCBieSBKaW0gTWV5ZXJpbmcgPG1leWVyaW5nQGFzY2VuZC5jb20+Ci0JbHBkIDE5OTgtMTEtMDkgYWRkZWQgZnVydGhlciBoYWNrIHRvIHJlY29nbml6ZSBpZGVudGlmaWVyKHZvaWQpCi0JCWFzIGJlaW5nIGEgcHJvY2VkdXJlCi0JbHBkIDE5OTgtMTAtMjMgYWRkZWQgaGFjayB0byByZWNvZ25pemUgbGluZXMgY29uc2lzdGluZyBvZgotCQlpZGVudGlmaWVyMShpZGVudGlmaWVyMikgYXMgKm5vdCogYmVpbmcgcHJvY2VkdXJlcwotCWxwZCAxOTk3LTEyLTA4IG1hZGUgaW5wdXRfZmlsZSBvcHRpb25hbDsgb25seSBjbG9zZXMgaW5wdXQgYW5kL29yCi0JCW91dHB1dCBmaWxlIGlmIG5vdCBzdGRpbiBvciBzdGRvdXQgcmVzcGVjdGl2ZWx5OyBwcmludHMKLQkJdXNhZ2UgbWVzc2FnZSBvbiBzdGRlcnIgcmF0aGVyIHRoYW4gc3Rkb3V0OyBhZGRzCi0JCS0tZmlsZW5hbWUgc3dpdGNoIChjaGFuZ2VzIHN1Z2dlc3RlZCBieQotCQk8Y2VkZXJAbHlzYXRvci5saXUuc2U+KQotCWxwZCAxOTk2LTAxLTIxIGFkZGVkIGNvZGUgdG8gY29wZSB3aXRoIG5vdCBIQVZFX0NPTkZJR19IIGFuZCB3aXRoCi0JCWNvbXBpbGVycyB0aGF0IGRvbid0IHVuZGVyc3RhbmQgdm9pZCwgYXMgc3VnZ2VzdGVkIGJ5Ci0JCVRvbSBMYW5lCi0JbHBkIDE5OTYtMDEtMTUgY2hhbmdlZCB0byByZXF1aXJlIHRoYXQgdGhlIGZpcnN0IG5vbi1jb21tZW50IHRva2VuCi0JCW9uIHRoZSBsaW5lIGZvbGxvd2luZyBhIGZ1bmN0aW9uIGhlYWRlciBiZSBhIGxlZnQgYnJhY2UsCi0JCXRvIHJlZHVjZSBzZW5zaXRpdml0eSB0byBtYWNyb3MsIGFzIHN1Z2dlc3RlZCBieSBUb20gTGFuZQotCQk8dGdsQHNzcy5wZ2gucGEudXM+Ci0JbHBkIDE5OTUtMDYtMjIgcmVtb3ZlZCAjaWZuZGVmcyB3aG9zZSBzb2xlIHB1cnBvc2Ugd2FzIHRvIGRlZmluZQotCQl1bmRlZmluZWQgcHJlcHJvY2Vzc29yIHN5bWJvbHMgYXMgMDsgY2hhbmdlZCBhbGwgI2lmZGVmcwotCQlmb3IgY29uZmlndXJhdGlvbiBzeW1ib2xzIHRvICNpZnMKLQlscGQgMTk5NS0wNC0wNSBjaGFuZ2VkIGNvcHlyaWdodCBub3RpY2UgdG8gbWFrZSBpdCBjbGVhciB0aGF0Ci0JCWluY2x1ZGluZyBhbnNpMmtuciBpbiBhIHByb2dyYW0gZG9lcyBub3QgYnJpbmcgdGhlIGVudGlyZQotCQlwcm9ncmFtIHVuZGVyIHRoZSBHUEwKLQlscGQgMTk5NC0xMi0xOCBhZGRlZCBjb25kaXRpb25hbHMgZm9yIHN5c3RlbXMgd2hlcmUgY3R5cGUgbWFjcm9zCi0JCWRvbid0IGhhbmRsZSA4LWJpdCBjaGFyYWN0ZXJzIHByb3Blcmx5LCBzdWdnZXN0ZWQgYnkKLQkJRnJhbmNvaXMgUGluYXJkIDxwaW5hcmRAaXJvLnVtb250cmVhbC5jYT47Ci0JCXJlbW92ZWQgLS12YXJhcmdzIHN3aXRjaCAodGhpcyBpcyBub3cgdGhlIGRlZmF1bHQpCi0JbHBkIDE5OTQtMTAtMTAgcmVtb3ZlZCBDT05GSUdfQlJPS0VUUyBjb25kaXRpb25hbAotCWxwZCAxOTk0LTA3LTE2IGFkZGVkIHNvbWUgY29uZGl0aW9uYWxzIHRvIGhlbHAgR05VIGBjb25maWd1cmUnLAotCQlzdWdnZXN0ZWQgYnkgRnJhbmNvaXMgUGluYXJkIDxwaW5hcmRAaXJvLnVtb250cmVhbC5jYT47Ci0JCXByb3Blcmx5IGVyYXNlIHByb3RvdHlwZSBhcmdzIGluIGZ1bmN0aW9uIHBhcmFtZXRlcnMsCi0JCWNvbnRyaWJ1dGVkIGJ5IEppbSBBdmVyYSA8amltYUBuZXRjb20uY29tPjsKLQkJY29ycmVjdCBlcnJvciBpbiB3cml0ZWJsYW5rcyAoaXQgc2hvdWxkbid0IGVyYXNlIEVPTHMpCi0JbHBkIDE5ODkteHgteHggb3JpZ2luYWwgdmVyc2lvbgotICovCi0KLS8qIE1vc3Qgb2YgdGhlIGNvbmRpdGlvbmFscyBoZXJlIGFyZSB0byBtYWtlIGFuc2kya25yIHdvcmsgd2l0aCAqLwotLyogb3Igd2l0aG91dCB0aGUgR05VIGNvbmZpZ3VyZSBtYWNoaW5lcnkuICovCi0KLSNpZiBIQVZFX0NPTkZJR19ICi0jIGluY2x1ZGUgPGNvbmZpZy5oPgotI2VuZGlmCi0KLSNpbmNsdWRlIDxzdGRpby5oPgotI2luY2x1ZGUgPGN0eXBlLmg+Ci0KLSNpZiBIQVZFX0NPTkZJR19ICi0KLS8qCi0gICBGb3IgcHJvcGVybHkgYXV0b2NvbmZpZ3VyaW5nIGFuc2kya25yLCB1c2UgQUNfQ09ORklHX0hFQURFUihjb25maWcuaCkuCi0gICBUaGlzIHdpbGwgZGVmaW5lIEhBVkVfQ09ORklHX0ggYW5kIHNvLCBhY3RpdmF0ZSB0aGUgZm9sbG93aW5nIGxpbmVzLgotICovCi0KLSMgaWYgU1REQ19IRUFERVJTIHx8IEhBVkVfU1RSSU5HX0gKLSMgIGluY2x1ZGUgPHN0cmluZy5oPgotIyBlbHNlCi0jICBpbmNsdWRlIDxzdHJpbmdzLmg+Ci0jIGVuZGlmCi0KLSNlbHNlIC8qIG5vdCBIQVZFX0NPTkZJR19IICovCi0KLS8qIE90aGVyd2lzZSBkbyBpdCB0aGUgaGFyZCB3YXkgKi8KLQotIyBpZmRlZiBCU0QKLSMgIGluY2x1ZGUgPHN0cmluZ3MuaD4KLSMgZWxzZQotIyAgaWZkZWYgVk1TCi0gICAgZXh0ZXJuIGludCBzdHJsZW4oKSwgc3RybmNtcCgpOwotIyAgZWxzZQotIyAgIGluY2x1ZGUgPHN0cmluZy5oPgotIyAgZW5kaWYKLSMgZW5kaWYKLQotI2VuZGlmIC8qIG5vdCBIQVZFX0NPTkZJR19IICovCi0KLSNpZiBTVERDX0hFQURFUlMKLSMgaW5jbHVkZSA8c3RkbGliLmg+Ci0jZWxzZQotLyoKLSAgIG1hbGxvYyBhbmQgZnJlZSBzaG91bGQgYmUgZGVjbGFyZWQgaW4gc3RkbGliLmgsCi0gICBidXQgaWYgeW91J3ZlIGdvdCBhIEsmUiBjb21waWxlciwgdGhleSBwcm9iYWJseSBhcmVuJ3QuCi0gKi8KLSMgaWZkZWYgTVNET1MKLSMgIGluY2x1ZGUgPG1hbGxvYy5oPgotIyBlbHNlCi0jICBpZmRlZiBWTVMKLSAgICAgZXh0ZXJuIGNoYXIgKm1hbGxvYygpOwotICAgICBleHRlcm4gdm9pZCBmcmVlKCk7Ci0jICBlbHNlCi0gICAgIGV4dGVybiBjaGFyICptYWxsb2MoKTsKLSAgICAgZXh0ZXJuIGludCBmcmVlKCk7Ci0jICBlbmRpZgotIyBlbmRpZgotCi0jZW5kaWYKLQotLyogRGVmaW5lIE5VTEwgKGZvciAqdmVyeSogb2xkIGNvbXBpbGVycykuICovCi0jaWZuZGVmIE5VTEwKLSMgZGVmaW5lIE5VTEwgKDApCi0jZW5kaWYKLQotLyoKLSAqIFRoZSBjdHlwZSBtYWNyb3MgZG9uJ3QgYWx3YXlzIGhhbmRsZSA4LWJpdCBjaGFyYWN0ZXJzIGNvcnJlY3RseS4KLSAqIENvbXBlbnNhdGUgZm9yIHRoaXMgaGVyZS4KLSAqLwotI2lmZGVmIGlzYXNjaWkKLSMgdW5kZWYgSEFWRV9JU0FTQ0lJCQkvKiBqdXN0IGluIGNhc2UgKi8KLSMgZGVmaW5lIEhBVkVfSVNBU0NJSSAxCi0jZWxzZQotI2VuZGlmCi0jaWYgU1REQ19IRUFERVJTIHx8ICFIQVZFX0lTQVNDSUkKLSMgZGVmaW5lIGlzX2FzY2lpKGMpIDEKLSNlbHNlCi0jIGRlZmluZSBpc19hc2NpaShjKSBpc2FzY2lpKGMpCi0jZW5kaWYKLQotI2RlZmluZSBpc19zcGFjZShjKSAoaXNfYXNjaWkoYykgJiYgaXNzcGFjZShjKSkKLSNkZWZpbmUgaXNfYWxwaGEoYykgKGlzX2FzY2lpKGMpICYmIGlzYWxwaGEoYykpCi0jZGVmaW5lIGlzX2FsbnVtKGMpIChpc19hc2NpaShjKSAmJiBpc2FsbnVtKGMpKQotCi0vKiBTY2FubmluZyBtYWNyb3MgKi8KLSNkZWZpbmUgaXNpZGNoYXIoY2gpIChpc19hbG51bShjaCkgfHwgKGNoKSA9PSAnXycpCi0jZGVmaW5lIGlzaWRmaXJzdGNoYXIoY2gpIChpc19hbHBoYShjaCkgfHwgKGNoKSA9PSAnXycpCi0KLS8qIEZvcndhcmQgcmVmZXJlbmNlcyAqLwotY2hhciAqcHBkaXJmb3J3YXJkKCk7Ci1jaGFyICpwcGRpcmJhY2t3YXJkKCk7Ci1jaGFyICpza2lwc3BhY2UoKTsKLWNoYXIgKnNjYW5zdHJpbmcoKTsKLWludCB3cml0ZWJsYW5rcygpOwotaW50IHRlc3QxKCk7Ci1pbnQgY29udmVydDEoKTsKLQotLyogVGhlIG1haW4gcHJvZ3JhbSAqLwotaW50Ci1tYWluKGFyZ2MsIGFyZ3YpCi0gICAgaW50IGFyZ2M7Ci0gICAgY2hhciAqYXJndltdOwotewlGSUxFICppbiA9IHN0ZGluOwotCUZJTEUgKm91dCA9IHN0ZG91dDsKLQljaGFyICpmaWxlbmFtZSA9IDA7Ci0JY2hhciAqcHJvZ3JhbV9uYW1lID0gYXJndlswXTsKLQljaGFyICpvdXRwdXRfbmFtZSA9IDA7Ci0jZGVmaW5lIGJ1ZnNpemUgNTAwMAkJCS8qIGFyYml0cmFyeSBzaXplICovCi0JY2hhciAqYnVmOwotCWNoYXIgKmxpbmU7Ci0JY2hhciAqbW9yZTsKLQljaGFyICp1c2FnZSA9Ci0JICAiVXNhZ2U6IGFuc2kya25yIFstLWZpbGVuYW1lIEZJTEVOQU1FXSBbSU5QVVRfRklMRSBbT1VUUFVUX0ZJTEVdXVxuIjsKLQkvKgotCSAqIEluIHByZXZpb3VzIHZlcnNpb25zLCBhbnNpMmtuciByZWNvZ25pemVkIGEgLS12YXJhcmdzIHN3aXRjaC4KLQkgKiBJZiB0aGlzIHN3aXRjaCB3YXMgc3VwcGxpZWQsIGFuc2kya25yIHdvdWxkIGF0dGVtcHQgdG8gY29udmVydAotCSAqIGEgLi4uIGFyZ3VtZW50IHRvIHZhX2FsaXN0IGFuZCB2YV9kY2w7IGlmIHRoaXMgc3dpdGNoIHdhcyBub3QKLQkgKiBzdXBwbGllZCwgYW5zaTJrbnIgd291bGQgc2ltcGx5IGRyb3AgYW55IHN1Y2ggYXJndW1lbnRzLgotCSAqIE5vdywgYW5zaTJrbnIgYWx3YXlzIGRvZXMgdGhpcyBjb252ZXJzaW9uLCBhbmQgd2Ugb25seQotCSAqIGNoZWNrIGZvciB0aGlzIHN3aXRjaCBmb3IgYmFja3dhcmQgY29tcGF0aWJpbGl0eS4KLQkgKi8KLQlpbnQgY29udmVydF92YXJhcmdzID0gMTsKLQlpbnQgb3V0cHV0X2Vycm9yOwotCi0Jd2hpbGUgKCBhcmdjID4gMSAmJiBhcmd2WzFdWzBdID09ICctJyApIHsKLQkgIGlmICggIXN0cmNtcChhcmd2WzFdLCAiLS12YXJhcmdzIikgKSB7Ci0JICAgIGNvbnZlcnRfdmFyYXJncyA9IDE7Ci0JICAgIGFyZ2MtLTsKLQkgICAgYXJndisrOwotCSAgICBjb250aW51ZTsKLQkgIH0KLQkgIGlmICggIXN0cmNtcChhcmd2WzFdLCAiLS1maWxlbmFtZSIpICYmIGFyZ2MgPiAyICkgewotCSAgICBmaWxlbmFtZSA9IGFyZ3ZbMl07Ci0JICAgIGFyZ2MgLT0gMjsKLQkgICAgYXJndiArPSAyOwotCSAgICBjb250aW51ZTsKLQkgIH0KLQkgIGZwcmludGYoc3RkZXJyLCAiJXM6IFVucmVjb2duaXplZCBzd2l0Y2g6ICVzXG4iLCBwcm9ncmFtX25hbWUsCi0JCSAgYXJndlsxXSk7Ci0JICBmcHJpbnRmKHN0ZGVyciwgdXNhZ2UpOwotCSAgZXhpdCgxKTsKLQl9Ci0Jc3dpdGNoICggYXJnYyApCi0JICAgewotCWRlZmF1bHQ6Ci0JCWZwcmludGYoc3RkZXJyLCB1c2FnZSk7Ci0JCWV4aXQoMCk7Ci0JY2FzZSAzOgotCQlvdXRwdXRfbmFtZSA9IGFyZ3ZbMl07Ci0JCW91dCA9IGZvcGVuKG91dHB1dF9uYW1lLCAidyIpOwotCQlpZiAoIG91dCA9PSBOVUxMICkgewotCQkgIGZwcmludGYoc3RkZXJyLCAiJXM6IENhbm5vdCBvcGVuIG91dHB1dCBmaWxlICVzXG4iLAotCQkJICBwcm9ncmFtX25hbWUsIG91dHB1dF9uYW1lKTsKLQkJICBleGl0KDEpOwotCQl9Ci0JCS8qIGZhbGxzIHRocm91Z2ggKi8KLQljYXNlIDI6Ci0JCWluID0gZm9wZW4oYXJndlsxXSwgInIiKTsKLQkJaWYgKCBpbiA9PSBOVUxMICkgewotCQkgIGZwcmludGYoc3RkZXJyLCAiJXM6IENhbm5vdCBvcGVuIGlucHV0IGZpbGUgJXNcbiIsCi0JCQkgIHByb2dyYW1fbmFtZSwgYXJndlsxXSk7Ci0JCSAgZXhpdCgxKTsKLQkJfQotCQlpZiAoIGZpbGVuYW1lID09IDAgKQotCQkgIGZpbGVuYW1lID0gYXJndlsxXTsKLQkJLyogZmFsbHMgdGhyb3VnaCAqLwotCWNhc2UgMToKLQkJYnJlYWs7Ci0JICAgfQotCWlmICggZmlsZW5hbWUgKQotCSAgZnByaW50ZihvdXQsICIjbGluZSAxIFwiJXNcIlxuIiwgZmlsZW5hbWUpOwotCWJ1ZiA9IG1hbGxvYyhidWZzaXplKTsKLQlpZiAoIGJ1ZiA9PSBOVUxMICkKLQkgICB7Ci0JCWZwcmludGYoc3RkZXJyLCAiVW5hYmxlIHRvIGFsbG9jYXRlIHJlYWQgYnVmZmVyIVxuIik7Ci0JCWV4aXQoMSk7Ci0JICAgfQotCWxpbmUgPSBidWY7Ci0Jd2hpbGUgKCBmZ2V0cyhsaW5lLCAodW5zaWduZWQpKGJ1ZiArIGJ1ZnNpemUgLSBsaW5lKSwgaW4pICE9IE5VTEwgKQotCSAgIHsKLXRlc3Q6CQlsaW5lICs9IHN0cmxlbihsaW5lKTsKLQkJc3dpdGNoICggdGVzdDEoYnVmKSApCi0JCSAgIHsKLQkJY2FzZSAyOgkJCS8qIGEgZnVuY3Rpb24gaGVhZGVyICovCi0JCQljb252ZXJ0MShidWYsIG91dCwgMSwgY29udmVydF92YXJhcmdzKTsKLQkJCWJyZWFrOwotCQljYXNlIDE6CQkJLyogYSBmdW5jdGlvbiAqLwotCQkJLyogQ2hlY2sgZm9yIGEgeyBhdCB0aGUgc3RhcnQgb2YgdGhlIG5leHQgbGluZS4gKi8KLQkJCW1vcmUgPSArK2xpbmU7Ci1mOgkJCWlmICggbGluZSA+PSBidWYgKyAoYnVmc2l6ZSAtIDEpICkgLyogb3ZlcmZsb3cgY2hlY2sgKi8KLQkJCSAgZ290byB3bDsKLQkJCWlmICggZmdldHMobGluZSwgKHVuc2lnbmVkKShidWYgKyBidWZzaXplIC0gbGluZSksIGluKSA9PSBOVUxMICkKLQkJCSAgZ290byB3bDsKLQkJCXN3aXRjaCAoICpza2lwc3BhY2UocHBkaXJmb3J3YXJkKG1vcmUpLCAxKSApCi0JCQkgIHsKLQkJCSAgY2FzZSAneyc6Ci0JCQkgICAgLyogRGVmaW5pdGVseSBhIGZ1bmN0aW9uIGhlYWRlci4gKi8KLQkJCSAgICBjb252ZXJ0MShidWYsIG91dCwgMCwgY29udmVydF92YXJhcmdzKTsKLQkJCSAgICBmcHV0cyhtb3JlLCBvdXQpOwotCQkJICAgIGJyZWFrOwotCQkJICBjYXNlIDA6Ci0JCQkgICAgLyogVGhlIG5leHQgbGluZSB3YXMgYmxhbmsgb3IgYSBjb21tZW50OiAqLwotCQkJICAgIC8qIGtlZXAgc2Nhbm5pbmcgZm9yIGEgbm9uLWNvbW1lbnQuICovCi0JCQkgICAgbGluZSArPSBzdHJsZW4obGluZSk7Ci0JCQkgICAgZ290byBmOwotCQkJICBkZWZhdWx0OgotCQkJICAgIC8qIGJ1ZiBpc24ndCBhIGZ1bmN0aW9uIGhlYWRlciwgYnV0ICovCi0JCQkgICAgLyogbW9yZSBtaWdodCBiZS4gKi8KLQkJCSAgICBmcHV0cyhidWYsIG91dCk7Ci0JCQkgICAgc3RyY3B5KGJ1ZiwgbW9yZSk7Ci0JCQkgICAgbGluZSA9IGJ1ZjsKLQkJCSAgICBnb3RvIHRlc3Q7Ci0JCQkgIH0KLQkJCWJyZWFrOwotCQljYXNlIC0xOgkJLyogbWF5YmUgdGhlIHN0YXJ0IG9mIGEgZnVuY3Rpb24gKi8KLQkJCWlmICggbGluZSAhPSBidWYgKyAoYnVmc2l6ZSAtIDEpICkgLyogb3ZlcmZsb3cgY2hlY2sgKi8KLQkJCSAgY29udGludWU7Ci0JCQkvKiBmYWxscyB0aHJvdWdoICovCi0JCWRlZmF1bHQ6CQkvKiBub3QgYSBmdW5jdGlvbiAqLwotd2w6CQkJZnB1dHMoYnVmLCBvdXQpOwotCQkJYnJlYWs7Ci0JCSAgIH0KLQkJbGluZSA9IGJ1ZjsKLQkgICB9Ci0JaWYgKCBsaW5lICE9IGJ1ZiApCi0JICBmcHV0cyhidWYsIG91dCk7Ci0JZnJlZShidWYpOwotCWlmICggb3V0cHV0X25hbWUgKSB7Ci0JICBvdXRwdXRfZXJyb3IgPSBmZXJyb3Iob3V0KTsKLQkgIG91dHB1dF9lcnJvciB8PSBmY2xvc2Uob3V0KTsKLQl9IGVsc2UgewkJLyogb3V0ID09IHN0ZG91dCAqLwotCSAgZmZsdXNoKG91dCk7Ci0JICBvdXRwdXRfZXJyb3IgPSBmZXJyb3Iob3V0KTsKLQl9Ci0JaWYgKCBvdXRwdXRfZXJyb3IgKSB7Ci0JICBmcHJpbnRmKHN0ZGVyciwgIiVzOiBlcnJvciB3cml0aW5nIHRvICVzXG4iLCBwcm9ncmFtX25hbWUsCi0JCSAgKG91dHB1dF9uYW1lID8gb3V0cHV0X25hbWUgOiAic3Rkb3V0IikpOwotCSAgZXhpdCgxKTsKLQl9Ci0JaWYgKCBpbiAhPSBzdGRpbiApCi0JICBmY2xvc2UoaW4pOwotCXJldHVybiAwOwotfQotCi0vKgotICogU2tpcCBmb3J3YXJkIG9yIGJhY2t3YXJkIG92ZXIgb25lIG9yIG1vcmUgcHJlcHJvY2Vzc29yIGRpcmVjdGl2ZXMuCi0gKi8KLWNoYXIgKgotcHBkaXJmb3J3YXJkKHApCi0gICAgY2hhciAqcDsKLXsKLSAgICBmb3IgKDsgKnAgPT0gJyMnOyArK3ApIHsKLQlmb3IgKDsgKnAgIT0gJ1xyJyAmJiAqcCAhPSAnXG4nOyArK3ApCi0JICAgIGlmICgqcCA9PSAwKQotCQlyZXR1cm4gcDsKLQlpZiAoKnAgPT0gJ1xyJyAmJiBwWzFdID09ICdcbicpCi0JICAgICsrcDsKLSAgICB9Ci0gICAgcmV0dXJuIHA7Ci19Ci1jaGFyICoKLXBwZGlyYmFja3dhcmQocCwgbGltaXQpCi0gICAgY2hhciAqcDsKLSAgICBjaGFyICpsaW1pdDsKLXsKLSAgICBjaGFyICpucCA9IHA7Ci0KLSAgICBmb3IgKDs7IHAgPSAtLW5wKSB7Ci0JaWYgKCpucCA9PSAnXG4nICYmIG5wWy0xXSA9PSAnXHInKQotCSAgICAtLW5wOwotCWZvciAoOyBucCA+IGxpbWl0ICYmIG5wWy0xXSAhPSAnXHInICYmIG5wWy0xXSAhPSAnXG4nOyAtLW5wKQotCSAgICBpZiAobnBbLTFdID09IDApCi0JCXJldHVybiBucDsKLQlpZiAoKm5wICE9ICcjJykKLQkgICAgcmV0dXJuIHA7Ci0gICAgfQotfQotCi0vKgotICogU2tpcCBvdmVyIHdoaXRlc3BhY2UsIGNvbW1lbnRzLCBhbmQgcHJlcHJvY2Vzc29yIGRpcmVjdGl2ZXMsCi0gKiBpbiBlaXRoZXIgZGlyZWN0aW9uLgotICovCi1jaGFyICoKLXNraXBzcGFjZShwLCBkaXIpCi0gICAgY2hhciAqcDsKLSAgICBpbnQgZGlyOwkJCS8qIDEgZm9yIGZvcndhcmQsIC0xIGZvciBiYWNrd2FyZCAqLwotewotICAgIGZvciAoIDsgOyApIHsKLQl3aGlsZSAoIGlzX3NwYWNlKCpwKSApCi0JICAgIHAgKz0gZGlyOwotCWlmICggISgqcCA9PSAnLycgJiYgcFtkaXJdID09ICcqJykgKQotCSAgICBicmVhazsKLQlwICs9IGRpcjsgIHAgKz0gZGlyOwotCXdoaWxlICggISgqcCA9PSAnKicgJiYgcFtkaXJdID09ICcvJykgKSB7Ci0JICAgIGlmICggKnAgPT0gMCApCi0JCXJldHVybiBwOwkvKiBtdWx0aS1saW5lIGNvbW1lbnQ/PyAqLwotCSAgICBwICs9IGRpcjsKLQl9Ci0JcCArPSBkaXI7ICBwICs9IGRpcjsKLSAgICB9Ci0gICAgcmV0dXJuIHA7Ci19Ci0KLS8qIFNjYW4gb3ZlciBhIHF1b3RlZCBzdHJpbmcsIGluIGVpdGhlciBkaXJlY3Rpb24uICovCi1jaGFyICoKLXNjYW5zdHJpbmcocCwgZGlyKQotICAgIGNoYXIgKnA7Ci0gICAgaW50IGRpcjsKLXsKLSAgICBmb3IgKHAgKz0gZGlyOyA7IHAgKz0gZGlyKQotCWlmICgqcCA9PSAnIicgJiYgcFstZGlyXSAhPSAnXFwnKQotCSAgICByZXR1cm4gcCArIGRpcjsKLX0KLQotLyoKLSAqIFdyaXRlIGJsYW5rcyBvdmVyIHBhcnQgb2YgYSBzdHJpbmcuCi0gKiBEb24ndCBvdmVyd3JpdGUgZW5kLW9mLWxpbmUgY2hhcmFjdGVycy4KLSAqLwotaW50Ci13cml0ZWJsYW5rcyhzdGFydCwgZW5kKQotICAgIGNoYXIgKnN0YXJ0OwotICAgIGNoYXIgKmVuZDsKLXsJY2hhciAqcDsKLQlmb3IgKCBwID0gc3RhcnQ7IHAgPCBlbmQ7IHArKyApCi0JICBpZiAoICpwICE9ICdccicgJiYgKnAgIT0gJ1xuJyApCi0JICAgICpwID0gJyAnOwotCXJldHVybiAwOwotfQotCi0vKgotICogVGVzdCB3aGV0aGVyIHRoZSBzdHJpbmcgaW4gYnVmIGlzIGEgZnVuY3Rpb24gZGVmaW5pdGlvbi4KLSAqIFRoZSBzdHJpbmcgbWF5IGNvbnRhaW4gYW5kL29yIGVuZCB3aXRoIGEgbmV3bGluZS4KLSAqIFJldHVybiBhcyBmb2xsb3dzOgotICoJMCAtIGRlZmluaXRlbHkgbm90IGEgZnVuY3Rpb24gZGVmaW5pdGlvbjsKLSAqCTEgLSBkZWZpbml0ZWx5IGEgZnVuY3Rpb24gZGVmaW5pdGlvbjsKLSAqCTIgLSBkZWZpbml0ZWx5IGEgZnVuY3Rpb24gcHJvdG90eXBlIChOT1QgVVNFRCk7Ci0gKgktMSAtIG1heSBiZSB0aGUgYmVnaW5uaW5nIG9mIGEgZnVuY3Rpb24gZGVmaW5pdGlvbiwKLSAqCQlhcHBlbmQgYW5vdGhlciBsaW5lIGFuZCBsb29rIGFnYWluLgotICogVGhlIHJlYXNvbiB3ZSBkb24ndCBhdHRlbXB0IHRvIGNvbnZlcnQgZnVuY3Rpb24gcHJvdG90eXBlcyBpcyB0aGF0Ci0gKiBHaG9zdHNjcmlwdCdzIGRlY2xhcmF0aW9uLWdlbmVyYXRpbmcgbWFjcm9zIGxvb2sgdG9vIG11Y2ggbGlrZQotICogcHJvdG90eXBlcywgYW5kIGNvbmZ1c2UgdGhlIGFsZ29yaXRobXMuCi0gKi8KLWludAotdGVzdDEoYnVmKQotICAgIGNoYXIgKmJ1ZjsKLXsJY2hhciAqcCA9IGJ1ZjsKLQljaGFyICpiZW5kOwotCWNoYXIgKmVuZGZuOwotCWludCBjb250aW47Ci0KLQlpZiAoICFpc2lkZmlyc3RjaGFyKCpwKSApCi0JICByZXR1cm4gMDsJCS8qIG5vIG5hbWUgYXQgbGVmdCBtYXJnaW4gKi8KLQliZW5kID0gc2tpcHNwYWNlKHBwZGlyYmFja3dhcmQoYnVmICsgc3RybGVuKGJ1ZikgLSAxLCBidWYpLCAtMSk7Ci0Jc3dpdGNoICggKmJlbmQgKQotCSAgIHsKLQkgICBjYXNlICc7JzogY29udGluID0gMCAvKjIqLzsgYnJlYWs7Ci0JICAgY2FzZSAnKSc6IGNvbnRpbiA9IDE7IGJyZWFrOwotCSAgIGNhc2UgJ3snOiByZXR1cm4gMDsJCS8qIG5vdCBhIGZ1bmN0aW9uICovCi0JICAgY2FzZSAnfSc6IHJldHVybiAwOwkJLyogbm90IGEgZnVuY3Rpb24gKi8KLQkgICBkZWZhdWx0OiBjb250aW4gPSAtMTsKLQkgICB9Ci0Jd2hpbGUgKCBpc2lkY2hhcigqcCkgKQotCSAgcCsrOwotCWVuZGZuID0gcDsKLQlwID0gc2tpcHNwYWNlKHAsIDEpOwotCWlmICggKnArKyAhPSAnKCcgKQotCSAgcmV0dXJuIDA7CQkvKiBub3QgYSBmdW5jdGlvbiAqLwotCXAgPSBza2lwc3BhY2UocCwgMSk7Ci0JaWYgKCAqcCA9PSAnKScgKQotCSAgcmV0dXJuIDA7CQkvKiBubyBwYXJhbWV0ZXJzICovCi0JLyogQ2hlY2sgdGhhdCB0aGUgYXBwYXJlbnQgZnVuY3Rpb24gbmFtZSBpc24ndCBhIGtleXdvcmQuICovCi0JLyogV2Ugb25seSBuZWVkIHRvIGNoZWNrIGZvciBrZXl3b3JkcyB0aGF0IGNvdWxkIGJlIGZvbGxvd2VkICovCi0JLyogYnkgYSBsZWZ0IHBhcmVudGhlc2lzICh3aGljaCwgdW5mb3J0dW5hdGVseSwgaXMgbW9zdCBvZiB0aGVtKS4gKi8KLQkgICB7CXN0YXRpYyBjaGFyICp3b3Jkc1tdID0KLQkJICAgewkiYXNtIiwgImF1dG8iLCAiY2FzZSIsICJjaGFyIiwgImNvbnN0IiwgImRvdWJsZSIsCi0JCQkiZXh0ZXJuIiwgImZsb2F0IiwgImZvciIsICJpZiIsICJpbnQiLCAibG9uZyIsCi0JCQkicmVnaXN0ZXIiLCAicmV0dXJuIiwgInNob3J0IiwgInNpZ25lZCIsICJzaXplb2YiLAotCQkJInN0YXRpYyIsICJzd2l0Y2giLCAidHlwZWRlZiIsICJ1bnNpZ25lZCIsCi0JCQkidm9pZCIsICJ2b2xhdGlsZSIsICJ3aGlsZSIsIDAKLQkJICAgfTsKLQkJY2hhciAqKmtleSA9IHdvcmRzOwotCQljaGFyICprcDsKLQkJdW5zaWduZWQgbGVuID0gZW5kZm4gLSBidWY7Ci0KLQkJd2hpbGUgKCAoa3AgPSAqa2V5KSAhPSAwICkKLQkJICAgewlpZiAoIHN0cmxlbihrcCkgPT0gbGVuICYmICFzdHJuY21wKGtwLCBidWYsIGxlbikgKQotCQkJICByZXR1cm4gMDsJLyogbmFtZSBpcyBhIGtleXdvcmQgKi8KLQkJCWtleSsrOwotCQkgICB9Ci0JICAgfQotCSAgIHsKLQkgICAgICAgY2hhciAqaWQgPSBwOwotCSAgICAgICBpbnQgbGVuOwotCSAgICAgICAvKgotCQkqIENoZWNrIGZvciBpZGVudGlmaWVyMShpZGVudGlmaWVyMikgYW5kIG5vdAotCQkqIGlkZW50aWZpZXIxKHZvaWQpLCBvciBpZGVudGlmaWVyMShpZGVudGlmaWVyMiwgeHh4eCkuCi0JCSovCi0KLQkgICAgICAgd2hpbGUgKCBpc2lkY2hhcigqcCkgKQotCQkgICBwKys7Ci0JICAgICAgIGxlbiA9IHAgLSBpZDsKLQkgICAgICAgcCA9IHNraXBzcGFjZShwLCAxKTsKLQkgICAgICAgaWYgKCpwID09ICcsJyB8fAotCQkgICAoKnAgPT0gJyknICYmIChsZW4gIT0gNCB8fCBzdHJuY21wKGlkLCAidm9pZCIsIDQpKSkKLQkJICAgKQotCQkgICByZXR1cm4gMDsJLyogbm90IGEgZnVuY3Rpb24gKi8KLQkgICB9Ci0JLyoKLQkgKiBJZiB0aGUgbGFzdCBzaWduaWZpY2FudCBjaGFyYWN0ZXIgd2FzIGEgKSwgd2UgbmVlZCB0byBjb3VudAotCSAqIHBhcmVudGhlc2VzLCBiZWNhdXNlIGl0IG1pZ2h0IGJlIHBhcnQgb2YgYSBmb3JtYWwgcGFyYW1ldGVyCi0JICogdGhhdCBpcyBhIHByb2NlZHVyZS4KLQkgKi8KLQlpZiAoY29udGluID4gMCkgewotCSAgICBpbnQgbGV2ZWwgPSAwOwotCi0JICAgIGZvciAocCA9IHNraXBzcGFjZShidWYsIDEpOyAqcDsgcCA9IHNraXBzcGFjZShwICsgMSwgMSkpCi0JCWxldmVsICs9ICgqcCA9PSAnKCcgPyAxIDogKnAgPT0gJyknID8gLTEgOiAwKTsKLQkgICAgaWYgKGxldmVsID4gMCkKLQkJY29udGluID0gLTE7Ci0JfQotCXJldHVybiBjb250aW47Ci19Ci0KLS8qIENvbnZlcnQgYSByZWNvZ25pemVkIGZ1bmN0aW9uIGRlZmluaXRpb24gb3IgaGVhZGVyIHRvIEsmUiBzeW50YXguICovCi1pbnQKLWNvbnZlcnQxKGJ1Ziwgb3V0LCBoZWFkZXIsIGNvbnZlcnRfdmFyYXJncykKLSAgICBjaGFyICpidWY7Ci0gICAgRklMRSAqb3V0OwotICAgIGludCBoZWFkZXI7CQkJLyogQm9vbGVhbiAqLwotICAgIGludCBjb252ZXJ0X3ZhcmFyZ3M7CS8qIEJvb2xlYW4gKi8KLXsJY2hhciAqZW5kZm47Ci0JY2hhciAqcDsKLQkvKgotCSAqIFRoZSBicmVha3MgdGFibGUgY29udGFpbnMgcG9pbnRlcnMgdG8gdGhlIGJlZ2lubmluZyBhbmQgZW5kCi0JICogb2YgZWFjaCBhcmd1bWVudC4KLQkgKi8KLQljaGFyICoqYnJlYWtzOwotCXVuc2lnbmVkIG51bV9icmVha3MgPSAyOwkvKiBmb3IgdGVzdGluZyAqLwotCWNoYXIgKipidG9wOwotCWNoYXIgKipicDsKLQljaGFyICoqYXA7Ci0JY2hhciAqdmFyYXJnID0gMDsKLQotCS8qIFByZS1BTlNJIGltcGxlbWVudGF0aW9ucyBkb24ndCBhZ3JlZSBvbiB3aGV0aGVyIHN0cmNociAqLwotCS8qIGlzIGNhbGxlZCBzdHJjaHIgb3IgaW5kZXgsIHNvIHdlIG9wZW4tY29kZSBpdCBoZXJlLiAqLwotCWZvciAoIGVuZGZuID0gYnVmOyAqKGVuZGZuKyspICE9ICcoJzsgKQotCSAgOwotdG9wOglwID0gZW5kZm47Ci0JYnJlYWtzID0gKGNoYXIgKiopbWFsbG9jKHNpemVvZihjaGFyICopICogbnVtX2JyZWFrcyAqIDIpOwotCWlmICggYnJlYWtzID09IE5VTEwgKQotCSAgIHsJLyogQ291bGRuJ3QgYWxsb2NhdGUgYnJlYWsgdGFibGUsIGdpdmUgdXAgKi8KLQkJZnByaW50ZihzdGRlcnIsICJVbmFibGUgdG8gYWxsb2NhdGUgYnJlYWsgdGFibGUhXG4iKTsKLQkJZnB1dHMoYnVmLCBvdXQpOwotCQlyZXR1cm4gLTE7Ci0JICAgfQotCWJ0b3AgPSBicmVha3MgKyBudW1fYnJlYWtzICogMiAtIDI7Ci0JYnAgPSBicmVha3M7Ci0JLyogUGFyc2UgdGhlIGFyZ3VtZW50IGxpc3QgKi8KLQlkbwotCSAgIHsJaW50IGxldmVsID0gMDsKLQkJY2hhciAqbHAgPSBOVUxMOwotCQljaGFyICpycCA9IE5VTEw7Ci0JCWNoYXIgKmVuZCA9IE5VTEw7Ci0KLQkJaWYgKCBicCA+PSBidG9wICkKLQkJICAgewkvKiBGaWxsZWQgdXAgYnJlYWsgdGFibGUuICovCi0JCQkvKiBBbGxvY2F0ZSBhIGJpZ2dlciBvbmUgYW5kIHN0YXJ0IG92ZXIuICovCi0JCQlmcmVlKChjaGFyICopYnJlYWtzKTsKLQkJCW51bV9icmVha3MgPDw9IDE7Ci0JCQlnb3RvIHRvcDsKLQkJICAgfQotCQkqYnArKyA9IHA7Ci0JCS8qIEZpbmQgdGhlIGVuZCBvZiB0aGUgYXJndW1lbnQgKi8KLQkJZm9yICggOyBlbmQgPT0gTlVMTDsgcCsrICkKLQkJICAgewlzd2l0Y2goKnApCi0JCQkgICB7Ci0JCQkgICBjYXNlICcsJzoKLQkJCQlpZiAoICFsZXZlbCApIGVuZCA9IHA7Ci0JCQkJYnJlYWs7Ci0JCQkgICBjYXNlICcoJzoKLQkJCQlpZiAoICFsZXZlbCApIGxwID0gcDsKLQkJCQlsZXZlbCsrOwotCQkJCWJyZWFrOwotCQkJICAgY2FzZSAnKSc6Ci0JCQkJaWYgKCAtLWxldmVsIDwgMCApIGVuZCA9IHA7Ci0JCQkJZWxzZSBycCA9IHA7Ci0JCQkJYnJlYWs7Ci0JCQkgICBjYXNlICcvJzoKLQkJCQlpZiAocFsxXSA9PSAnKicpCi0JCQkJICAgIHAgPSBza2lwc3BhY2UocCwgMSkgLSAxOwotCQkJCWJyZWFrOwotCQkJICAgY2FzZSAnIic6Ci0JCQkgICAgICAgcCA9IHNjYW5zdHJpbmcocCwgMSkgLSAxOwotCQkJICAgICAgIGJyZWFrOwotCQkJICAgZGVmYXVsdDoKLQkJCQk7Ci0JCQkgICB9Ci0JCSAgIH0KLQkJLyogRXJhc2UgYW55IGVtYmVkZGVkIHByb3RvdHlwZSBwYXJhbWV0ZXJzLiAqLwotCQlpZiAoIGxwICYmIHJwICkKLQkJICB3cml0ZWJsYW5rcyhscCArIDEsIHJwKTsKLQkJcC0tOwkJCS8qIGJhY2sgdXAgb3ZlciB0ZXJtaW5hdG9yICovCi0JCS8qIEZpbmQgdGhlIG5hbWUgYmVpbmcgZGVjbGFyZWQuICovCi0JCS8qIFRoaXMgaXMgY29tcGxpY2F0ZWQgYmVjYXVzZSBvZiBwcm9jZWR1cmUgYW5kICovCi0JCS8qIGFycmF5IG1vZGlmaWVycy4gKi8KLQkJZm9yICggOyA7ICkKLQkJICAgewlwID0gc2tpcHNwYWNlKHAgLSAxLCAtMSk7Ci0JCQlzd2l0Y2ggKCAqcCApCi0JCQkgICB7Ci0JCQkgICBjYXNlICddJzoJLyogc2tpcCBhcnJheSBkaW1lbnNpb24ocykgKi8KLQkJCSAgIGNhc2UgJyknOgkvKiBza2lwIHByb2NlZHVyZSBhcmdzIE9SIG5hbWUgKi8KLQkJCSAgIHsJaW50IGxldmVsID0gMTsKLQkJCQl3aGlsZSAoIGxldmVsICkKLQkJCQkgc3dpdGNoICggKi0tcCApCi0JCQkJICAgewotCQkJCSAgIGNhc2UgJ10nOiBjYXNlICcpJzoKLQkJCQkgICAgICAgbGV2ZWwrKzsKLQkJCQkgICAgICAgYnJlYWs7Ci0JCQkJICAgY2FzZSAnWyc6IGNhc2UgJygnOgotCQkJCSAgICAgICBsZXZlbC0tOwotCQkJCSAgICAgICBicmVhazsKLQkJCQkgICBjYXNlICcvJzoKLQkJCQkgICAgICAgaWYgKHAgPiBidWYgJiYgcFstMV0gPT0gJyonKQotCQkJCQkgICBwID0gc2tpcHNwYWNlKHAsIC0xKSArIDE7Ci0JCQkJICAgICAgIGJyZWFrOwotCQkJCSAgIGNhc2UgJyInOgotCQkJCSAgICAgICBwID0gc2NhbnN0cmluZyhwLCAtMSkgKyAxOwotCQkJCSAgICAgICBicmVhazsKLQkJCQkgICBkZWZhdWx0OiA7Ci0JCQkJICAgfQotCQkJICAgfQotCQkJCWlmICggKnAgPT0gJygnICYmICpza2lwc3BhY2UocCArIDEsIDEpID09ICcqJyApCi0JCQkJICAgewkvKiBXZSBmb3VuZCB0aGUgbmFtZSBiZWluZyBkZWNsYXJlZCAqLwotCQkJCQl3aGlsZSAoICFpc2lkZmlyc3RjaGFyKCpwKSApCi0JCQkJCSAgcCA9IHNraXBzcGFjZShwLCAxKSArIDE7Ci0JCQkJCWdvdG8gZm91bmQ7Ci0JCQkJICAgfQotCQkJCWJyZWFrOwotCQkJICAgZGVmYXVsdDoKLQkJCQlnb3RvIGZvdW5kOwotCQkJICAgfQotCQkgICB9Ci1mb3VuZDoJCWlmICggKnAgPT0gJy4nICYmIHBbLTFdID09ICcuJyAmJiBwWy0yXSA9PSAnLicgKQotCQkgIHsJaWYgKCBjb252ZXJ0X3ZhcmFyZ3MgKQotCQkJICB7CSpicCsrID0gInZhX2FsaXN0IjsKLQkJCQl2YXJhcmcgPSBwLTI7Ci0JCQkgIH0KLQkJCWVsc2UKLQkJCSAgewlwKys7Ci0JCQkJaWYgKCBicCA9PSBicmVha3MgKyAxICkJLyogc29sZSBhcmd1bWVudCAqLwotCQkJCSAgd3JpdGVibGFua3MoYnJlYWtzWzBdLCBwKTsKLQkJCQllbHNlCi0JCQkJICB3cml0ZWJsYW5rcyhicFstMV0gLSAxLCBwKTsKLQkJCQlicC0tOwotCQkJICB9Ci0JCSAgIH0KLQkJZWxzZQotCQkgICB7CXdoaWxlICggaXNpZGNoYXIoKnApICkgcC0tOwotCQkJKmJwKysgPSBwKzE7Ci0JCSAgIH0KLQkJcCA9IGVuZDsKLQkgICB9Ci0Jd2hpbGUgKCAqcCsrID09ICcsJyApOwotCSpicCA9IHA7Ci0JLyogTWFrZSBhIHNwZWNpYWwgY2hlY2sgZm9yICd2b2lkJyBhcmdsaXN0ICovCi0JaWYgKCBicCA9PSBicmVha3MrMiApCi0JICAgewlwID0gc2tpcHNwYWNlKGJyZWFrc1swXSwgMSk7Ci0JCWlmICggIXN0cm5jbXAocCwgInZvaWQiLCA0KSApCi0JCSAgIHsJcCA9IHNraXBzcGFjZShwKzQsIDEpOwotCQkJaWYgKCBwID09IGJyZWFrc1syXSAtIDEgKQotCQkJICAgewlicCA9IGJyZWFrczsJLyogeXVwLCBwcmV0ZW5kIGFyZ2xpc3QgaXMgZW1wdHkgKi8KLQkJCQl3cml0ZWJsYW5rcyhicmVha3NbMF0sIHAgKyAxKTsKLQkJCSAgIH0KLQkJICAgfQotCSAgIH0KLQkvKiBQdXQgb3V0IHRoZSBmdW5jdGlvbiBuYW1lIGFuZCBsZWZ0IHBhcmVudGhlc2lzLiAqLwotCXAgPSBidWY7Ci0Jd2hpbGUgKCBwICE9IGVuZGZuICkgcHV0YygqcCwgb3V0KSwgcCsrOwotCS8qIFB1dCBvdXQgdGhlIGRlY2xhcmF0aW9uLiAqLwotCWlmICggaGVhZGVyICkKLQkgIHsJZnB1dHMoIik7Iiwgb3V0KTsKLQkJZm9yICggcCA9IGJyZWFrc1swXTsgKnA7IHArKyApCi0JCSAgaWYgKCAqcCA9PSAnXHInIHx8ICpwID09ICdcbicgKQotCQkgICAgcHV0YygqcCwgb3V0KTsKLQkgIH0KLQllbHNlCi0JICB7CWZvciAoIGFwID0gYnJlYWtzKzE7IGFwIDwgYnA7IGFwICs9IDIgKQotCQkgIHsJcCA9ICphcDsKLQkJCXdoaWxlICggaXNpZGNoYXIoKnApICkKLQkJCSAgcHV0YygqcCwgb3V0KSwgcCsrOwotCQkJaWYgKCBhcCA8IGJwIC0gMSApCi0JCQkgIGZwdXRzKCIsICIsIG91dCk7Ci0JCSAgfQotCQlmcHV0cygiKSAgIiwgb3V0KTsKLQkJLyogUHV0IG91dCB0aGUgYXJndW1lbnQgZGVjbGFyYXRpb25zICovCi0JCWZvciAoIGFwID0gYnJlYWtzKzI7IGFwIDw9IGJwOyBhcCArPSAyICkKLQkJICAoKmFwKVstMV0gPSAnOyc7Ci0JCWlmICggdmFyYXJnICE9IDAgKQotCQkgIHsJKnZhcmFyZyA9IDA7Ci0JCQlmcHV0cyhicmVha3NbMF0sIG91dCk7CQkvKiBhbnkgcHJpb3IgYXJncyAqLwotCQkJZnB1dHMoInZhX2RjbCIsIG91dCk7CQkvKiB0aGUgZmluYWwgYXJnICovCi0JCQlmcHV0cyhicFswXSwgb3V0KTsKLQkJICB9Ci0JCWVsc2UKLQkJICBmcHV0cyhicmVha3NbMF0sIG91dCk7Ci0JICB9Ci0JZnJlZSgoY2hhciAqKWJyZWFrcyk7Ci0JcmV0dXJuIDA7Ci19CmRpZmYgLS1naXQgYS9ibXAuYyBiL2JtcC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjNjY2M4NzcKLS0tIC9kZXYvbnVsbAorKysgYi9ibXAuYwpAQCAtMCwwICsxLDM3MCBAQAorLyogQ29weXJpZ2h0IChDKTIwMDQgTGFuZG1hcmsgR3JhcGhpY3MgQ29ycG9yYXRpb24KKyAqIENvcHlyaWdodCAoQykyMDA1IFN1biBNaWNyb3N5c3RlbXMsIEluYy4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZSBhbmQgbWF5IGJlIHJlZGlzdHJpYnV0ZWQgYW5kL29yIG1vZGlmaWVkIHVuZGVyCisgKiB0aGUgdGVybXMgb2YgdGhlIHd4V2luZG93cyBMaWJyYXJ5IExpY2Vuc2UsIFZlcnNpb24gMy4xIG9yIChhdCB5b3VyIG9wdGlvbikKKyAqIGFueSBsYXRlciB2ZXJzaW9uLiAgVGhlIGZ1bGwgbGljZW5zZSBpcyBpbiB0aGUgTElDRU5TRS50eHQgZmlsZSBpbmNsdWRlZAorICogd2l0aCB0aGlzIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgKiB3eFdpbmRvd3MgTGlicmFyeSBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisqLworCisjaW5jbHVkZSA8ZmNudGwuaD4KKyNpbmNsdWRlIDxzeXMvdHlwZXMuaD4KKyNpbmNsdWRlIDxzeXMvc3RhdC5oPgorI2luY2x1ZGUgPGVycm5vLmg+CisjaW5jbHVkZSA8c3RkbGliLmg+CisjaW5jbHVkZSA8c3RkaW8uaD4KKyNpbmNsdWRlIDxzdHJpbmcuaD4KKyNpZmRlZiBfV0lOMzIKKyAjaW5jbHVkZSA8aW8uaD4KKyNlbHNlCisgI2luY2x1ZGUgPHVuaXN0ZC5oPgorI2VuZGlmCisjaW5jbHVkZSAiLi9ycnV0aWwuaCIKKyNpbmNsdWRlICIuL2JtcC5oIgorCisjaWZuZGVmIEJJX0JJVEZJRUxEUworI2RlZmluZSBCSV9CSVRGSUVMRFMgM0wKKyNlbmRpZgorI2lmbmRlZiBCSV9SR0IKKyNkZWZpbmUgQklfUkdCIDBMCisjZW5kaWYKKworI2RlZmluZSBCTVBIRFJTSVpFIDU0Cit0eXBlZGVmIHN0cnVjdCBfYm1waGRyCit7CisJdW5zaWduZWQgc2hvcnQgYmZUeXBlOworCXVuc2lnbmVkIGludCBiZlNpemU7CisJdW5zaWduZWQgc2hvcnQgYmZSZXNlcnZlZDEsIGJmUmVzZXJ2ZWQyOworCXVuc2lnbmVkIGludCBiZk9mZkJpdHM7CisKKwl1bnNpZ25lZCBpbnQgYmlTaXplOworCWludCBiaVdpZHRoLCBiaUhlaWdodDsKKwl1bnNpZ25lZCBzaG9ydCBiaVBsYW5lcywgYmlCaXRDb3VudDsKKwl1bnNpZ25lZCBpbnQgYmlDb21wcmVzc2lvbiwgYmlTaXplSW1hZ2U7CisJaW50IGJpWFBlbHNQZXJNZXRlciwgYmlZUGVsc1Blck1ldGVyOworCXVuc2lnbmVkIGludCBiaUNsclVzZWQsIGJpQ2xySW1wb3J0YW50OworfSBibXBoZHI7CisKK3N0YXRpYyBjb25zdCBjaGFyICpfX2JtcGVycj0iTm8gZXJyb3IiOworCitzdGF0aWMgY29uc3QgaW50IHBzW0JNUFBJWEVMRk9STUFUU109ezMsIDQsIDMsIDQsIDQsIDR9Oworc3RhdGljIGNvbnN0IGludCByb2Zmc2V0W0JNUFBJWEVMRk9STUFUU109ezAsIDAsIDIsIDIsIDMsIDF9Oworc3RhdGljIGNvbnN0IGludCBnb2Zmc2V0W0JNUFBJWEVMRk9STUFUU109ezEsIDEsIDEsIDEsIDIsIDJ9Oworc3RhdGljIGNvbnN0IGludCBib2Zmc2V0W0JNUFBJWEVMRk9STUFUU109ezIsIDIsIDAsIDAsIDEsIDN9OworCisjZGVmaW5lIF90aHJvdyhtKSB7X19ibXBlcnI9bTsgIHJldGNvZGU9LTE7ICBnb3RvIGZpbmFsbHk7fQorI2RlZmluZSBfdW5peChmKSB7aWYoKGYpPT0tMSkgX3Rocm93KHN0cmVycm9yKGVycm5vKSk7fQorI2RlZmluZSBfY2F0Y2goZikge2lmKChmKT09LTEpIHtyZXRjb2RlPS0xOyAgZ290byBmaW5hbGx5O319CisKKyNkZWZpbmUgcmVhZG1lKGZkLCBhZGRyLCBzaXplKSBcCisJaWYoKGJ5dGVzcmVhZD1yZWFkKGZkLCBhZGRyLCAoc2l6ZSkpKT09LTEpIF90aHJvdyhzdHJlcnJvcihlcnJubykpOyBcCisJaWYoYnl0ZXNyZWFkIT0oc2l6ZSkpIF90aHJvdygiUmVhZCBlcnJvciIpOworCit2b2lkIHBpeGVsY29udmVydCh1bnNpZ25lZCBjaGFyICpzcmNidWYsIGVudW0gQk1QUElYRUxGT1JNQVQgc3JjZm9ybWF0LAorCWludCBzcmNwaXRjaCwgdW5zaWduZWQgY2hhciAqZHN0YnVmLCBlbnVtIEJNUFBJWEVMRk9STUFUIGRzdGZvcm1hdCwgaW50IGRzdHBpdGNoLAorCWludCB3LCBpbnQgaCwgaW50IGZsaXApCit7CisJdW5zaWduZWQgY2hhciAqc3JjcHRyLCAqc3JjcHRyMCwgKmRzdHB0ciwgKmRzdHB0cjA7CisJaW50IGksIGo7CisKKwlzcmNwdHI9ZmxpcD8gJnNyY2J1ZltzcmNwaXRjaCooaC0xKV06c3JjYnVmOworCWZvcihqPTAsIGRzdHB0cj1kc3RidWY7IGo8aDsgaisrLAorCQlzcmNwdHIrPWZsaXA/IC1zcmNwaXRjaDpzcmNwaXRjaCwgZHN0cHRyKz1kc3RwaXRjaCkKKwl7CisJCWZvcihpPTAsIHNyY3B0cjA9c3JjcHRyLCBkc3RwdHIwPWRzdHB0cjsgaTx3OyBpKyssCisJCQlzcmNwdHIwKz1wc1tzcmNmb3JtYXRdLCBkc3RwdHIwKz1wc1tkc3Rmb3JtYXRdKQorCQl7CisJCQlkc3RwdHIwW3JvZmZzZXRbZHN0Zm9ybWF0XV09c3JjcHRyMFtyb2Zmc2V0W3NyY2Zvcm1hdF1dOworCQkJZHN0cHRyMFtnb2Zmc2V0W2RzdGZvcm1hdF1dPXNyY3B0cjBbZ29mZnNldFtzcmNmb3JtYXRdXTsKKwkJCWRzdHB0cjBbYm9mZnNldFtkc3Rmb3JtYXRdXT1zcmNwdHIwW2JvZmZzZXRbc3JjZm9ybWF0XV07CisJCX0KKwl9Cit9CisKK2ludCBsb2FkcHBtKGludCAqZmQsIHVuc2lnbmVkIGNoYXIgKipidWYsIGludCAqdywgaW50ICpoLAorCWVudW0gQk1QUElYRUxGT1JNQVQgZiwgaW50IGFsaWduLCBpbnQgZHN0Ym90dG9tdXAsIGludCBhc2NpaSkKK3sKKwlGSUxFICpmcz1OVUxMOyAgaW50IHJldGNvZGU9MCwgc2NhbGVmYWN0b3IsIGRzdHBpdGNoOworCXVuc2lnbmVkIGNoYXIgKnRlbXBidWY9TlVMTDsgIGNoYXIgdGVtcHNbMjU1XSwgdGVtcHMyWzI1NV07CisJaW50IG51bXJlYWQ9MCwgdG90YWxyZWFkPTAsIHBpeGVsWzNdLCBpLCBqOworCisJaWYoKGZzPWZkb3BlbigqZmQsICJyIikpPT1OVUxMKSBfdGhyb3coc3RyZXJyb3IoZXJybm8pKTsKKworCWRvCisJeworCQlpZighZmdldHModGVtcHMsIDI1NSwgZnMpKSBfdGhyb3coIlJlYWQgZXJyb3IiKTsKKwkJaWYoc3RybGVuKHRlbXBzKT09MCB8fCB0ZW1wc1swXT09J1xuJykgY29udGludWU7CisJCWlmKHNzY2FuZih0ZW1wcywgIiVzIiwgdGVtcHMyKT09MSAmJiB0ZW1wczJbMV09PScjJykgY29udGludWU7CisJCXN3aXRjaCh0b3RhbHJlYWQpCisJCXsKKwkJCWNhc2UgMDoKKwkJCQlpZigobnVtcmVhZD1zc2NhbmYodGVtcHMsICIlZCAlZCAlZCIsIHcsIGgsICZzY2FsZWZhY3RvcikpPT1FT0YpCisJCQkJCV90aHJvdygiUmVhZCBlcnJvciIpOworCQkJCWJyZWFrOworCQkJY2FzZSAxOgorCQkJCWlmKChudW1yZWFkPXNzY2FuZih0ZW1wcywgIiVkICVkIiwgaCwgJnNjYWxlZmFjdG9yKSk9PUVPRikKKwkJCQkJX3Rocm93KCJSZWFkIGVycm9yIik7CisJCQkJYnJlYWs7CisJCQljYXNlIDI6CisJCQkJaWYoKG51bXJlYWQ9c3NjYW5mKHRlbXBzLCAiJWQiLCAmc2NhbGVmYWN0b3IpKT09RU9GKQorCQkJCQlfdGhyb3coIlJlYWQgZXJyb3IiKTsKKwkJCQlicmVhazsKKwkJfQorCQl0b3RhbHJlYWQrPW51bXJlYWQ7CisJfSB3aGlsZSh0b3RhbHJlYWQ8Myk7CisJaWYoKCp3KTwxIHx8ICgqaCk8MSB8fCBzY2FsZWZhY3RvcjwxKSBfdGhyb3coIkNvcnJ1cHQgUFBNIGhlYWRlciIpOworCisJZHN0cGl0Y2g9KCgoKncpKnBzW2ZdKSsoYWxpZ24tMSkpJih+KGFsaWduLTEpKTsKKwlpZigoKmJ1Zj0odW5zaWduZWQgY2hhciAqKW1hbGxvYyhkc3RwaXRjaCooKmgpKSk9PU5VTEwpCisJCV90aHJvdygiTWVtb3J5IGFsbG9jYXRpb24gZXJyb3IiKTsKKwlpZihhc2NpaSkKKwl7CisJCWZvcihqPTA7IGo8Kmg7IGorKykKKwkJeworCQkJZm9yKGk9MDsgaTwqdzsgaSsrKQorCQkJeworCQkJCWlmKGZzY2FuZihmcywgIiVkJWQlZCIsICZwaXhlbFswXSwgJnBpeGVsWzFdLCAmcGl4ZWxbMl0pIT0zKQorCQkJCQlfdGhyb3coIlJlYWQgZXJyb3IiKTsKKwkJCQkoKmJ1Zilbaipkc3RwaXRjaCtpKnBzW2ZdK3JvZmZzZXRbZl1dPSh1bnNpZ25lZCBjaGFyKShwaXhlbFswXSoyNTUvc2NhbGVmYWN0b3IpOworCQkJCSgqYnVmKVtqKmRzdHBpdGNoK2kqcHNbZl0rZ29mZnNldFtmXV09KHVuc2lnbmVkIGNoYXIpKHBpeGVsWzFdKjI1NS9zY2FsZWZhY3Rvcik7CisJCQkJKCpidWYpW2oqZHN0cGl0Y2graSpwc1tmXStib2Zmc2V0W2ZdXT0odW5zaWduZWQgY2hhcikocGl4ZWxbMl0qMjU1L3NjYWxlZmFjdG9yKTsKKwkJCX0KKwkJfQorCX0KKwllbHNlCisJeworCQlpZihzY2FsZWZhY3RvciE9MjU1KQorCQkJX3Rocm93KCJCaW5hcnkgUFBNcyBtdXN0IGhhdmUgOC1iaXQgY29tcG9uZW50cyIpOworCQlpZigodGVtcGJ1Zj0odW5zaWduZWQgY2hhciAqKW1hbGxvYygoKncpKigqaCkqMykpPT1OVUxMKQorCQkJX3Rocm93KCJNZW1vcnkgYWxsb2NhdGlvbiBlcnJvciIpOworCQlpZihmcmVhZCh0ZW1wYnVmLCAoKncpKigqaCkqMywgMSwgZnMpIT0xKSBfdGhyb3coIlJlYWQgZXJyb3IiKTsKKwkJcGl4ZWxjb252ZXJ0KHRlbXBidWYsIEJNUF9SR0IsICgqdykqMywgKmJ1ZiwgZiwgZHN0cGl0Y2gsICp3LCAqaCwgZHN0Ym90dG9tdXApOworCX0KKworCWZpbmFsbHk6CisJaWYoZnMpIHtmY2xvc2UoZnMpOyAgKmZkPS0xO30KKwlpZih0ZW1wYnVmKSBmcmVlKHRlbXBidWYpOworCXJldHVybiByZXRjb2RlOworfQorCisKK2ludCBsb2FkYm1wKGNoYXIgKmZpbGVuYW1lLCB1bnNpZ25lZCBjaGFyICoqYnVmLCBpbnQgKncsIGludCAqaCwgCisJZW51bSBCTVBQSVhFTEZPUk1BVCBmLCBpbnQgYWxpZ24sIGludCBkc3Rib3R0b211cCkKK3sKKwlpbnQgZmQ9LTEsIGJ5dGVzcmVhZCwgc3JjcGl0Y2gsIHNyY2JvdHRvbXVwPTEsIHNyY3BzLCBkc3RwaXRjaCwKKwkJcmV0Y29kZT0wOworCXVuc2lnbmVkIGNoYXIgKnRlbXBidWY9TlVMTDsKKwlibXBoZHIgYmg7ICBpbnQgZmxhZ3M9T19SRE9OTFk7CisKKwlkc3Rib3R0b211cD1kc3Rib3R0b211cD8gMTowOworCSNpZmRlZiBfV0lOMzIKKwlmbGFnc3w9T19CSU5BUlk7CisJI2VuZGlmCisJaWYoIWZpbGVuYW1lIHx8ICFidWYgfHwgIXcgfHwgIWggfHwgZjwwIHx8IGY+Qk1QUElYRUxGT1JNQVRTLTEgfHwgYWxpZ248MSkKKwkJX3Rocm93KCJpbnZhbGlkIGFyZ3VtZW50IHRvIGxvYWRibXAoKSIpOworCWlmKChhbGlnbiYoYWxpZ24tMSkpIT0wKQorCQlfdGhyb3coIkFsaWdubWVudCBtdXN0IGJlIGEgcG93ZXIgb2YgMiIpOworCV91bml4KGZkPW9wZW4oZmlsZW5hbWUsIGZsYWdzKSk7CisKKwlyZWFkbWUoZmQsICZiaC5iZlR5cGUsIHNpemVvZih1bnNpZ25lZCBzaG9ydCkpOworCWlmKCFsaXR0bGVlbmRpYW4oKSkJYmguYmZUeXBlPWJ5dGVzd2FwMTYoYmguYmZUeXBlKTsKKworCWlmKGJoLmJmVHlwZT09MHgzNjUwKQorCXsKKwkJX2NhdGNoKGxvYWRwcG0oJmZkLCBidWYsIHcsIGgsIGYsIGFsaWduLCBkc3Rib3R0b211cCwgMCkpOworCQlnb3RvIGZpbmFsbHk7CisJfQorCWlmKGJoLmJmVHlwZT09MHgzMzUwKQorCXsKKwkJX2NhdGNoKGxvYWRwcG0oJmZkLCBidWYsIHcsIGgsIGYsIGFsaWduLCBkc3Rib3R0b211cCwgMSkpOworCQlnb3RvIGZpbmFsbHk7CisJfQorCisJcmVhZG1lKGZkLCAmYmguYmZTaXplLCBzaXplb2YodW5zaWduZWQgaW50KSk7CisJcmVhZG1lKGZkLCAmYmguYmZSZXNlcnZlZDEsIHNpemVvZih1bnNpZ25lZCBzaG9ydCkpOworCXJlYWRtZShmZCwgJmJoLmJmUmVzZXJ2ZWQyLCBzaXplb2YodW5zaWduZWQgc2hvcnQpKTsKKwlyZWFkbWUoZmQsICZiaC5iZk9mZkJpdHMsIHNpemVvZih1bnNpZ25lZCBpbnQpKTsKKwlyZWFkbWUoZmQsICZiaC5iaVNpemUsIHNpemVvZih1bnNpZ25lZCBpbnQpKTsKKwlyZWFkbWUoZmQsICZiaC5iaVdpZHRoLCBzaXplb2YoaW50KSk7CisJcmVhZG1lKGZkLCAmYmguYmlIZWlnaHQsIHNpemVvZihpbnQpKTsKKwlyZWFkbWUoZmQsICZiaC5iaVBsYW5lcywgc2l6ZW9mKHVuc2lnbmVkIHNob3J0KSk7CisJcmVhZG1lKGZkLCAmYmguYmlCaXRDb3VudCwgc2l6ZW9mKHVuc2lnbmVkIHNob3J0KSk7CisJcmVhZG1lKGZkLCAmYmguYmlDb21wcmVzc2lvbiwgc2l6ZW9mKHVuc2lnbmVkIGludCkpOworCXJlYWRtZShmZCwgJmJoLmJpU2l6ZUltYWdlLCBzaXplb2YodW5zaWduZWQgaW50KSk7CisJcmVhZG1lKGZkLCAmYmguYmlYUGVsc1Blck1ldGVyLCBzaXplb2YoaW50KSk7CisJcmVhZG1lKGZkLCAmYmguYmlZUGVsc1Blck1ldGVyLCBzaXplb2YoaW50KSk7CisJcmVhZG1lKGZkLCAmYmguYmlDbHJVc2VkLCBzaXplb2YodW5zaWduZWQgaW50KSk7CisJcmVhZG1lKGZkLCAmYmguYmlDbHJJbXBvcnRhbnQsIHNpemVvZih1bnNpZ25lZCBpbnQpKTsKKworCWlmKCFsaXR0bGVlbmRpYW4oKSkKKwl7CisJCWJoLmJmU2l6ZT1ieXRlc3dhcChiaC5iZlNpemUpOworCQliaC5iZk9mZkJpdHM9Ynl0ZXN3YXAoYmguYmZPZmZCaXRzKTsKKwkJYmguYmlTaXplPWJ5dGVzd2FwKGJoLmJpU2l6ZSk7CisJCWJoLmJpV2lkdGg9Ynl0ZXN3YXAoYmguYmlXaWR0aCk7CisJCWJoLmJpSGVpZ2h0PWJ5dGVzd2FwKGJoLmJpSGVpZ2h0KTsKKwkJYmguYmlQbGFuZXM9Ynl0ZXN3YXAxNihiaC5iaVBsYW5lcyk7CisJCWJoLmJpQml0Q291bnQ9Ynl0ZXN3YXAxNihiaC5iaUJpdENvdW50KTsKKwkJYmguYmlDb21wcmVzc2lvbj1ieXRlc3dhcChiaC5iaUNvbXByZXNzaW9uKTsKKwkJYmguYmlTaXplSW1hZ2U9Ynl0ZXN3YXAoYmguYmlTaXplSW1hZ2UpOworCQliaC5iaVhQZWxzUGVyTWV0ZXI9Ynl0ZXN3YXAoYmguYmlYUGVsc1Blck1ldGVyKTsKKwkJYmguYmlZUGVsc1Blck1ldGVyPWJ5dGVzd2FwKGJoLmJpWVBlbHNQZXJNZXRlcik7CisJCWJoLmJpQ2xyVXNlZD1ieXRlc3dhcChiaC5iaUNsclVzZWQpOworCQliaC5iaUNsckltcG9ydGFudD1ieXRlc3dhcChiaC5iaUNsckltcG9ydGFudCk7CisJfQorCisJaWYoYmguYmZUeXBlIT0weDRkNDIgfHwgYmguYmZPZmZCaXRzPEJNUEhEUlNJWkUKKwl8fCBiaC5iaVdpZHRoPDEgfHwgYmguYmlIZWlnaHQ9PTApCisJCV90aHJvdygiQ29ycnVwdCBiaXRtYXAgaGVhZGVyIik7CisJaWYoKGJoLmJpQml0Q291bnQhPTI0ICYmIGJoLmJpQml0Q291bnQhPTMyKSB8fCBiaC5iaUNvbXByZXNzaW9uIT1CSV9SR0IpCisJCV90aHJvdygiT25seSB1bmNvbXBlc3NlZCBSR0IgYml0bWFwcyBhcmUgc3VwcG9ydGVkIik7CisKKwkqdz1iaC5iaVdpZHRoOyAgKmg9YmguYmlIZWlnaHQ7ICBzcmNwcz1iaC5iaUJpdENvdW50Lzg7CisJaWYoKmg8MCkgeypoPS0oKmgpOyAgc3JjYm90dG9tdXA9MDt9CisJc3JjcGl0Y2g9KCgoKncpKnNyY3BzKSszKSYofjMpOworCWRzdHBpdGNoPSgoKCp3KSpwc1tmXSkrKGFsaWduLTEpKSYofihhbGlnbi0xKSk7CisKKwlpZihzcmNwaXRjaCooKmgpK2JoLmJmT2ZmQml0cyE9YmguYmZTaXplKSBfdGhyb3coIkNvcnJ1cHQgYml0bWFwIGhlYWRlciIpOworCWlmKCh0ZW1wYnVmPSh1bnNpZ25lZCBjaGFyICopbWFsbG9jKHNyY3BpdGNoKigqaCkpKT09TlVMTAorCXx8ICgqYnVmPSh1bnNpZ25lZCBjaGFyICopbWFsbG9jKGRzdHBpdGNoKigqaCkpKT09TlVMTCkKKwkJX3Rocm93KCJNZW1vcnkgYWxsb2NhdGlvbiBlcnJvciIpOworCWlmKGxzZWVrKGZkLCAobG9uZyliaC5iZk9mZkJpdHMsIFNFRUtfU0VUKSE9KGxvbmcpYmguYmZPZmZCaXRzKQorCQlfdGhyb3coc3RyZXJyb3IoZXJybm8pKTsKKwlfdW5peChieXRlc3JlYWQ9cmVhZChmZCwgdGVtcGJ1Ziwgc3JjcGl0Y2gqKCpoKSkpOworCWlmKGJ5dGVzcmVhZCE9c3JjcGl0Y2gqKCpoKSkgX3Rocm93KCJSZWFkIGVycm9yIik7CisKKwlwaXhlbGNvbnZlcnQodGVtcGJ1ZiwgQk1QX0JHUiwgc3JjcGl0Y2gsICpidWYsIGYsIGRzdHBpdGNoLCAqdywgKmgsIAorCQlzcmNib3R0b211cCE9ZHN0Ym90dG9tdXApOworCisJZmluYWxseToKKwlpZih0ZW1wYnVmKSBmcmVlKHRlbXBidWYpOworCWlmKGZkIT0tMSkgY2xvc2UoZmQpOworCXJldHVybiByZXRjb2RlOworfQorCisjZGVmaW5lIHdyaXRlbWUoZmQsIGFkZHIsIHNpemUpIFwKKwlpZigoYnl0ZXN3cml0dGVuPXdyaXRlKGZkLCBhZGRyLCAoc2l6ZSkpKT09LTEpIF90aHJvdyhzdHJlcnJvcihlcnJubykpOyBcCisJaWYoYnl0ZXN3cml0dGVuIT0oc2l6ZSkpIF90aHJvdygiV3JpdGUgZXJyb3IiKTsKKworaW50IHNhdmVwcG0oY2hhciAqZmlsZW5hbWUsIHVuc2lnbmVkIGNoYXIgKmJ1ZiwgaW50IHcsIGludCBoLAorCWVudW0gQk1QUElYRUxGT1JNQVQgZiwgaW50IHNyY3BpdGNoLCBpbnQgc3JjYm90dG9tdXApCit7CisJRklMRSAqZnM9TlVMTDsgIGludCByZXRjb2RlPTA7CisJdW5zaWduZWQgY2hhciAqdGVtcGJ1Zj1OVUxMOworCisJaWYoKGZzPWZvcGVuKGZpbGVuYW1lLCAid2IiKSk9PU5VTEwpIF90aHJvdyhzdHJlcnJvcihlcnJubykpOworCWlmKGZwcmludGYoZnMsICJQNlxuIik8MSkgX3Rocm93KCJXcml0ZSBlcnJvciIpOworCWlmKGZwcmludGYoZnMsICIlZCAlZFxuIiwgdywgaCk8MSkgX3Rocm93KCJXcml0ZSBlcnJvciIpOworCWlmKGZwcmludGYoZnMsICIyNTVcbiIpPDEpIF90aHJvdygiV3JpdGUgZXJyb3IiKTsKKworCWlmKCh0ZW1wYnVmPSh1bnNpZ25lZCBjaGFyICopbWFsbG9jKHcqaCozKSk9PU5VTEwpCisJCV90aHJvdygiTWVtb3J5IGFsbG9jYXRpb24gZXJyb3IiKTsKKworCXBpeGVsY29udmVydChidWYsIGYsIHNyY3BpdGNoLCB0ZW1wYnVmLCBCTVBfUkdCLCB3KjMsIHcsIGgsIAorCQlzcmNib3R0b211cCk7CisKKwlpZigoZndyaXRlKHRlbXBidWYsIHcqaCozLCAxLCBmcykpIT0xKSBfdGhyb3coIldyaXRlIGVycm9yIik7CisKKwlmaW5hbGx5OgorCWlmKHRlbXBidWYpIGZyZWUodGVtcGJ1Zik7CisJaWYoZnMpIGZjbG9zZShmcyk7CisJcmV0dXJuIHJldGNvZGU7Cit9CisKK2ludCBzYXZlYm1wKGNoYXIgKmZpbGVuYW1lLCB1bnNpZ25lZCBjaGFyICpidWYsIGludCB3LCBpbnQgaCwKKwllbnVtIEJNUFBJWEVMRk9STUFUIGYsIGludCBzcmNwaXRjaCwgaW50IHNyY2JvdHRvbXVwKQoreworCWludCBmZD0tMSwgYnl0ZXN3cml0dGVuLCBkc3RwaXRjaCwgcmV0Y29kZT0wOworCWludCBmbGFncz1PX1JEV1J8T19DUkVBVHxPX1RSVU5DOworCXVuc2lnbmVkIGNoYXIgKnRlbXBidWY9TlVMTDsgIGNoYXIgKnRlbXA7CisJYm1waGRyIGJoOyAgaW50IG1vZGU7CisKKwkjaWZkZWYgX1dJTjMyCisJZmxhZ3N8PU9fQklOQVJZOyAgbW9kZT1fU19JUkVBRHxfU19JV1JJVEU7CisJI2Vsc2UKKwltb2RlPVNfSVJVU1J8U19JV1VTUnxTX0lSR1JQfFNfSVdHUlB8U19JUk9USHxTX0lXT1RIOworCSNlbmRpZgorCWlmKCFmaWxlbmFtZSB8fCAhYnVmIHx8IHc8MSB8fCBoPDEgfHwgZjwwIHx8IGY+Qk1QUElYRUxGT1JNQVRTLTEgfHwgc3JjcGl0Y2g8MCkKKwkJX3Rocm93KCJiYWQgYXJndW1lbnQgdG8gc2F2ZWJtcCgpIik7CisKKwlpZihzcmNwaXRjaD09MCkgc3JjcGl0Y2g9dypwc1tmXTsKKworCWlmKCh0ZW1wPXN0cnJjaHIoZmlsZW5hbWUsICcuJykpIT1OVUxMKQorCXsKKwkJaWYoIXN0cmljbXAodGVtcCwgIi5wcG0iKSkKKwkJCXJldHVybiBzYXZlcHBtKGZpbGVuYW1lLCBidWYsIHcsIGgsIGYsIHNyY3BpdGNoLCBzcmNib3R0b211cCk7CisJfQorCisJX3VuaXgoZmQ9b3BlbihmaWxlbmFtZSwgZmxhZ3MsIG1vZGUpKTsKKwlkc3RwaXRjaD0oKHcqMykrMykmKH4zKTsKKworCWJoLmJmVHlwZT0weDRkNDI7CisJYmguYmZTaXplPUJNUEhEUlNJWkUrZHN0cGl0Y2gqaDsKKwliaC5iZlJlc2VydmVkMT0wOyAgYmguYmZSZXNlcnZlZDI9MDsKKwliaC5iZk9mZkJpdHM9Qk1QSERSU0laRTsKKwliaC5iaVNpemU9NDA7CisJYmguYmlXaWR0aD13OyAgYmguYmlIZWlnaHQ9aDsKKwliaC5iaVBsYW5lcz0wOyAgYmguYmlCaXRDb3VudD0yNDsKKwliaC5iaUNvbXByZXNzaW9uPUJJX1JHQjsgIGJoLmJpU2l6ZUltYWdlPTA7CisJYmguYmlYUGVsc1Blck1ldGVyPTA7ICBiaC5iaVlQZWxzUGVyTWV0ZXI9MDsKKwliaC5iaUNsclVzZWQ9MDsgIGJoLmJpQ2xySW1wb3J0YW50PTA7CisKKwlpZighbGl0dGxlZW5kaWFuKCkpCisJeworCQliaC5iZlR5cGU9Ynl0ZXN3YXAxNihiaC5iZlR5cGUpOworCQliaC5iZlNpemU9Ynl0ZXN3YXAoYmguYmZTaXplKTsKKwkJYmguYmZPZmZCaXRzPWJ5dGVzd2FwKGJoLmJmT2ZmQml0cyk7CisJCWJoLmJpU2l6ZT1ieXRlc3dhcChiaC5iaVNpemUpOworCQliaC5iaVdpZHRoPWJ5dGVzd2FwKGJoLmJpV2lkdGgpOworCQliaC5iaUhlaWdodD1ieXRlc3dhcChiaC5iaUhlaWdodCk7CisJCWJoLmJpUGxhbmVzPWJ5dGVzd2FwMTYoYmguYmlQbGFuZXMpOworCQliaC5iaUJpdENvdW50PWJ5dGVzd2FwMTYoYmguYmlCaXRDb3VudCk7CisJCWJoLmJpQ29tcHJlc3Npb249Ynl0ZXN3YXAoYmguYmlDb21wcmVzc2lvbik7CisJCWJoLmJpU2l6ZUltYWdlPWJ5dGVzd2FwKGJoLmJpU2l6ZUltYWdlKTsKKwkJYmguYmlYUGVsc1Blck1ldGVyPWJ5dGVzd2FwKGJoLmJpWFBlbHNQZXJNZXRlcik7CisJCWJoLmJpWVBlbHNQZXJNZXRlcj1ieXRlc3dhcChiaC5iaVlQZWxzUGVyTWV0ZXIpOworCQliaC5iaUNsclVzZWQ9Ynl0ZXN3YXAoYmguYmlDbHJVc2VkKTsKKwkJYmguYmlDbHJJbXBvcnRhbnQ9Ynl0ZXN3YXAoYmguYmlDbHJJbXBvcnRhbnQpOworCX0KKworCXdyaXRlbWUoZmQsICZiaC5iZlR5cGUsIHNpemVvZih1bnNpZ25lZCBzaG9ydCkpOworCXdyaXRlbWUoZmQsICZiaC5iZlNpemUsIHNpemVvZih1bnNpZ25lZCBpbnQpKTsKKwl3cml0ZW1lKGZkLCAmYmguYmZSZXNlcnZlZDEsIHNpemVvZih1bnNpZ25lZCBzaG9ydCkpOworCXdyaXRlbWUoZmQsICZiaC5iZlJlc2VydmVkMiwgc2l6ZW9mKHVuc2lnbmVkIHNob3J0KSk7CisJd3JpdGVtZShmZCwgJmJoLmJmT2ZmQml0cywgc2l6ZW9mKHVuc2lnbmVkIGludCkpOworCXdyaXRlbWUoZmQsICZiaC5iaVNpemUsIHNpemVvZih1bnNpZ25lZCBpbnQpKTsKKwl3cml0ZW1lKGZkLCAmYmguYmlXaWR0aCwgc2l6ZW9mKGludCkpOworCXdyaXRlbWUoZmQsICZiaC5iaUhlaWdodCwgc2l6ZW9mKGludCkpOworCXdyaXRlbWUoZmQsICZiaC5iaVBsYW5lcywgc2l6ZW9mKHVuc2lnbmVkIHNob3J0KSk7CisJd3JpdGVtZShmZCwgJmJoLmJpQml0Q291bnQsIHNpemVvZih1bnNpZ25lZCBzaG9ydCkpOworCXdyaXRlbWUoZmQsICZiaC5iaUNvbXByZXNzaW9uLCBzaXplb2YodW5zaWduZWQgaW50KSk7CisJd3JpdGVtZShmZCwgJmJoLmJpU2l6ZUltYWdlLCBzaXplb2YodW5zaWduZWQgaW50KSk7CisJd3JpdGVtZShmZCwgJmJoLmJpWFBlbHNQZXJNZXRlciwgc2l6ZW9mKGludCkpOworCXdyaXRlbWUoZmQsICZiaC5iaVlQZWxzUGVyTWV0ZXIsIHNpemVvZihpbnQpKTsKKwl3cml0ZW1lKGZkLCAmYmguYmlDbHJVc2VkLCBzaXplb2YodW5zaWduZWQgaW50KSk7CisJd3JpdGVtZShmZCwgJmJoLmJpQ2xySW1wb3J0YW50LCBzaXplb2YodW5zaWduZWQgaW50KSk7CisKKwlpZigodGVtcGJ1Zj0odW5zaWduZWQgY2hhciAqKW1hbGxvYyhkc3RwaXRjaCpoKSk9PU5VTEwpCisJCV90aHJvdygiTWVtb3J5IGFsbG9jYXRpb24gZXJyb3IiKTsKKworCXBpeGVsY29udmVydChidWYsIGYsIHNyY3BpdGNoLCB0ZW1wYnVmLCBCTVBfQkdSLCBkc3RwaXRjaCwgdywgaCwgCisJCSFzcmNib3R0b211cCk7CisKKwlpZigoYnl0ZXN3cml0dGVuPXdyaXRlKGZkLCB0ZW1wYnVmLCBkc3RwaXRjaCpoKSkhPWRzdHBpdGNoKmgpCisJCV90aHJvdyhzdHJlcnJvcihlcnJubykpOworCisJZmluYWxseToKKwlpZih0ZW1wYnVmKSBmcmVlKHRlbXBidWYpOworCWlmKGZkIT0tMSkgY2xvc2UoZmQpOworCXJldHVybiByZXRjb2RlOworfQorCitjb25zdCBjaGFyICpibXBnZXRlcnIodm9pZCkKK3sKKwlyZXR1cm4gX19ibXBlcnI7Cit9CmRpZmYgLS1naXQgYS9ibXAuaCBiL2JtcC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjA1NWIxZWUKLS0tIC9kZXYvbnVsbAorKysgYi9ibXAuaApAQCAtMCwwICsxLDQ5IEBACisvKiBDb3B5cmlnaHQgKEMpMjAwNCBMYW5kbWFyayBHcmFwaGljcyBDb3Jwb3JhdGlvbgorICogQ29weXJpZ2h0IChDKTIwMDUgU3VuIE1pY3Jvc3lzdGVtcywgSW5jLgorICogQ29weXJpZ2h0IChDKTIwMTEgRC4gUi4gQ29tbWFuZGVyCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmUgYW5kIG1heSBiZSByZWRpc3RyaWJ1dGVkIGFuZC9vciBtb2RpZmllZCB1bmRlcgorICogdGhlIHRlcm1zIG9mIHRoZSB3eFdpbmRvd3MgTGlicmFyeSBMaWNlbnNlLCBWZXJzaW9uIDMuMSBvciAoYXQgeW91ciBvcHRpb24pCisgKiBhbnkgbGF0ZXIgdmVyc2lvbi4gIFRoZSBmdWxsIGxpY2Vuc2UgaXMgaW4gdGhlIExJQ0VOU0UudHh0IGZpbGUgaW5jbHVkZWQKKyAqIHdpdGggdGhpcyBkaXN0cmlidXRpb24uCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogd3hXaW5kb3dzIExpYnJhcnkgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorKi8KKworLy8gVGhpcyBwcm92aWRlcyBydWRpbWVudGFyeSBmYWNpbGl0aWVzIGZvciBsb2FkaW5nIGFuZCBzYXZpbmcgdHJ1ZSBjb2xvcgorLy8gQk1QIGFuZCBQUE0gZmlsZXMKKworI2lmbmRlZiBfX0JNUF9IX18KKyNkZWZpbmUgX19CTVBfSF9fCisKKyNkZWZpbmUgQk1QUElYRUxGT1JNQVRTIDYKK2VudW0gQk1QUElYRUxGT1JNQVQge0JNUF9SR0I9MCwgQk1QX1JHQlgsIEJNUF9CR1IsIEJNUF9CR1JYLCBCTVBfWEJHUiwgQk1QX1hSR0J9OworCisjaWZkZWYgX19jcGx1c3BsdXMKK2V4dGVybiAiQyIgeworI2VuZGlmCisKKy8vIFRoaXMgd2lsbCBsb2FkIGEgV2luZG93cyBiaXRtYXAgZnJvbSBhIGZpbGUgYW5kIHJldHVybiBhIGJ1ZmZlciB3aXRoIHRoZQorLy8gc3BlY2lmaWVkIHBpeGVsIGZvcm1hdCwgc2NhbmxpbmUgYWxpZ25tZW50LCBhbmQgb3JpZW50YXRpb24uICBUaGUgd2lkdGggYW5kCisvLyBoZWlnaHQgYXJlIHJldHVybmVkIGluIHcgYW5kIGguCisKK2ludCBsb2FkYm1wKGNoYXIgKmZpbGVuYW1lLCB1bnNpZ25lZCBjaGFyICoqYnVmLCBpbnQgKncsIGludCAqaCwKKwllbnVtIEJNUFBJWEVMRk9STUFUIGYsIGludCBhbGlnbiwgaW50IGRzdGJvdHRvbXVwKTsKKworLy8gVGhpcyB3aWxsIHNhdmUgYSBidWZmZXIgd2l0aCB0aGUgc3BlY2lmaWVkIHBpeGVsIGZvcm1hdCwgcGl0Y2gsIG9yaWVudGF0aW9uLAorLy8gd2lkdGgsIGFuZCBoZWlnaHQgYXMgYSAyNC1iaXQgV2luZG93cyBiaXRtYXAgb3IgUFBNICh0aGUgZmlsZW5hbWUgZGV0ZXJtaW5lcworLy8gd2hpY2ggZm9ybWF0IHRvIHVzZSkKKworaW50IHNhdmVibXAoY2hhciAqZmlsZW5hbWUsIHVuc2lnbmVkIGNoYXIgKmJ1ZiwgaW50IHcsIGludCBoLAorCWVudW0gQk1QUElYRUxGT1JNQVQgZiwgaW50IHNyY3BpdGNoLCBpbnQgc3JjYm90dG9tdXApOworCitjb25zdCBjaGFyICpibXBnZXRlcnIodm9pZCk7CisKKyNpZmRlZiBfX2NwbHVzcGx1cworfQorI2VuZGlmCisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvY2hhbmdlLmxvZyBiL2NoYW5nZS5sb2cKaW5kZXggOTQ4NjViMy4uNzA0ZDhiMiAxMDA2NDQKLS0tIGEvY2hhbmdlLmxvZworKysgYi9jaGFuZ2UubG9nCkBAIC0xLDI5ICsxLDEyIEBACiBDSEFOR0UgTE9HIGZvciBJbmRlcGVuZGVudCBKUEVHIEdyb3VwJ3MgSlBFRyBzb2Z0d2FyZQogCiAKLVZlcnNpb24gOGMgIDE2LUphbi0yMDExCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotCi1BZGQgb3B0aW9uIHRvIGNvbXByZXNzaW9uIGxpYnJhcnkgYW5kIGNqcGVnICgtYmxvY2sgTikgdG8gdXNlCi1kaWZmZXJlbnQgRENUIGJsb2NrIHNpemUuCi1BbGwgTiBmcm9tIDEgdG8gMTYgYXJlIHBvc3NpYmxlLiAgRGVmYXVsdCBpcyA4IChiYXNlbGluZSBmb3JtYXQpLgotTGFyZ2VyIHZhbHVlcyBwcm9kdWNlIGhpZ2hlciBjb21wcmVzc2lvbiwKLXNtYWxsZXIgdmFsdWVzIHByb2R1Y2UgaGlnaGVyIHF1YWxpdHkuCi1TbWFydFNjYWxlIGNhcGFibGUgZGVjb2RlciAoaW50cm9kdWNlZCB3aXRoIElKRyBKUEVHIDgpIHJlcXVpcmVkLgotCi0KIFZlcnNpb24gOGIgIDE2LU1heS0yMDEwCiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCiBSZXBhaXIgcHJvYmxlbSBpbiBuZXcgbWVtb3J5IHNvdXJjZSBtYW5hZ2VyIHdpdGggY29ycnVwdCBKUEVHIGRhdGEuCiBUaGFuayB0byBUZWQgQ2FtcGJlbGwgYW5kIFNhbXVlbCBDaHVuIGZvciB0aGUgcmVwb3J0LgogCi1SZXBhaXIgcHJvYmxlbSBpbiBNYWtlZmlsZS5hbSB0ZXN0IHRhcmdldC4KLVRoYW5rIHRvIGFub255bW91cyB1c2VyIGZvciB0aGUgcmVwb3J0LgotCi1TdXBwb3J0IE1pbkdXIGluc3RhbGxhdGlvbiB3aXRoIGF1dG9tYXRpYyBjb25maWd1cmUuCi1UaGFuayB0byBWb2xrZXIgR3JhYnNjaCBmb3IgdGhlIHN1Z2dlc3Rpb24uCi0KIAogVmVyc2lvbiA4YSAgMjgtRmViLTIwMTAKIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCkBAIC0zMywyMiArMTYsMTAgQEAKIFN1cHBvcnQgMzItYml0IEJNUHMgKFJHQiBpbWFnZSB3aXRoIEFscGhhIGNoYW5uZWwpIGZvciByZWFkIGluIGNqcGVnLgogVGhhbmsgdG8gQnJldHQgQmxhY2toYW0gZm9yIHRoZSBzdWdnZXN0aW9uLgogCi1JbXByb3ZlIGFjY3VyYWN5IGluIGZsb2F0aW5nIHBvaW50IElEQ1QgY2FsY3VsYXRpb24uCi1UaGFuayB0byBSb2JlcnQgSG9va2UgZm9yIHRoZSBoaW50LgotCiAKIFZlcnNpb24gOCAgMTAtSmFuLTIwMTAKIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIAotanBlZ3RyYW4gbm93IHN1cHBvcnRzIHRoZSBzYW1lIC1zY2FsZSBvcHRpb24gYXMgZGpwZWcgZm9yICJsb3NzbGVzcyIgcmVzaXplLgotQW4gaW1wbGVtZW50YXRpb24gb2YgdGhlIEpQRUcgU21hcnRTY2FsZSBleHRlbnNpb24gaXMgcmVxdWlyZWQgZm9yIHRoaXMKLWZlYXR1cmUuICBBIChkcmFmdCkgc3BlY2lmaWNhdGlvbiBvZiB0aGUgSlBFRyBTbWFydFNjYWxlIGV4dGVuc2lvbiBpcwotYXZhaWxhYmxlIGFzIGEgY29udHJpYnV0ZWQgZG9jdW1lbnQgYXQgSVRVIGFuZCBJU08uICBSZXZpc2lvbiAyIG9yIGxhdGVyCi1vZiB0aGUgZG9jdW1lbnQgaXMgcmVxdWlyZWQgKGxhdGVzdCBkb2N1bWVudCB2ZXJzaW9uIGlzIFJldmlzaW9uIDMpLgotVGhlIFNtYXJ0U2NhbGUgZXh0ZW5zaW9uIHdpbGwgZW5hYmxlIG1vcmUgZmVhdHVyZXMgYmVzaWRlIGxvc3NsZXNzIHJlc2l6ZQotaW4gZnV0dXJlIGltcGxlbWVudGF0aW9ucywgYXMgZGVzY3JpYmVkIGluIHRoZSBkb2N1bWVudCAobmV3IGNvbXByZXNzaW9uCi1vcHRpb25zKS4KLQogQWRkIHNhbml0eSBjaGVjayBpbiBCTVAgcmVhZGVyIG1vZHVsZSB0byBhdm9pZCBjanBlZyBjcmFzaCBmb3IgZW1wdHkgaW5wdXQKIGltYWdlICh0aGFuayB0byBJc2FldiBJbGRhciBvZiBJU1AgUkFTLCBNb3Njb3csIFJVIGZvciByZXBvcnRpbmcgdGhpcyBlcnJvcikuCiAKQEAgLTYwLDMzICszMSwxNCBAQAogVmVyc2lvbiA3ICAyNy1KdW4tMjAwOQogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCi1OZXcgc2NhbGVkIERDVHMgaW1wbGVtZW50ZWQuCi1kanBlZyBub3cgc3VwcG9ydHMgc2NhbGluZ3MgTi84IHdpdGggYWxsIE4gZnJvbSAxIHRvIDE2LgotY2pwZWcgbm93IHN1cHBvcnRzIHNjYWxpbmdzIDgvTiB3aXRoIGFsbCBOIGZyb20gMSB0byAxNi4KLVNjYWxlZCBEQ1RzIHdpdGggc2l6ZSBsYXJnZXIgdGhhbiA4IGFyZSBub3cgYWxzbyB1c2VkIGZvciByZXNvbHZpbmcgdGhlCi1jb21tb24gMngyIGNocm9tYSBzdWJzYW1wbGluZyBjYXNlIHdpdGhvdXQgYWRkaXRpb25hbCBzcGF0aWFsIHJlc2FtcGxpbmcuCi1TZXBhcmF0ZSBzcGF0aWFsIHJlc2FtcGxpbmcgZm9yIHRob3NlIGtpbmQgb2YgZmlsZXMgaXMgbm93IG9ubHkgbmVjZXNzYXJ5Ci1mb3IgTj44IHNjYWxpbmcgY2FzZXMuCi1GdXJ0aGVybW9yZSwgc2VwYXJhdGUgc2NhbGVkIERDVCBmdW5jdGlvbnMgYXJlIHByb3ZpZGVkIGZvciBkaXJlY3QgcmVzb2x2aW5nCi1vZiB0aGUgY29tbW9uIGFzeW1tZXRyaWMgc3Vic2FtcGxpbmcgY2FzZXMgKDJ4MSBhbmQgMXgyKSB3aXRob3V0IGFkZGl0aW9uYWwKLXNwYXRpYWwgcmVzYW1wbGluZy4KLQogY2pwZWcgLXF1YWxpdHkgb3B0aW9uIGhhcyBiZWVuIGV4dGVuZGVkIGZvciBzdXBwb3J0IG9mIHNlcGFyYXRlIHF1YWxpdHkKIHNldHRpbmdzIGZvciBsdW1pbmFuY2UgYW5kIGNocm9taW5hbmNlIChvciBpbiBnZW5lcmFsLCBmb3IgZXZlcnkgcHJvdmlkZWQKIHF1YW50aXphdGlvbiB0YWJsZSBzbG90KS4KIE5ldyBBUEkgZnVuY3Rpb24ganBlZ19kZWZhdWx0X3F0YWJsZXMoKSBhbmQgcV9zY2FsZV9mYWN0b3IgYXJyYXkgaW4gbGlicmFyeS4KIAotQWRkZWQgLW5vc21vb3RoIG9wdGlvbiB0byBjanBlZywgY29tcGxlbWVudGFyeSB0byBkanBlZy4KLU5ldyB2YXJpYWJsZSAiZG9fZmFuY3lfZG93bnNhbXBsaW5nIiBpbiBsaWJyYXJ5LCBjb21wbGVtZW50IHRvIGZhbmN5Ci11cHNhbXBsaW5nLiAgRmFuY3kgdXBzYW1wbGluZyBub3cgdXNlcyBkaXJlY3QgRENUIHNjYWxpbmcgd2l0aCBzaXplcwotbGFyZ2VyIHRoYW4gOC4gIFRoZSBvbGQgbWV0aG9kIGlzIG5vdCByZXZlcnNpYmxlIGFuZCBoYXMgYmVlbiByZW1vdmVkLgotCiBTdXBwb3J0IGFyaXRobWV0aWMgZW50cm9weSBlbmNvZGluZyBhbmQgZGVjb2RpbmcuCiBBZGRlZCBmaWxlcyBqYXJpY29tLmMsIGpjYXJpdGguYywgamRhcml0aC5jLgogCi1TdHJhaWdodGVuIHRoZSBmaWxlIHN0cnVjdHVyZToKLVJlbW92ZWQgZmlsZXMgamlkY3RyZWQuYywgamNwaHVmZi5jLCBqY2h1ZmYuaCwgamRwaHVmZi5jLCBqZGh1ZmYuaC4KLQoganBlZ3RyYW4gaGFzIGEgbmV3ICJsb3NzbGVzcyIgY3JvcHBpbmcgZmVhdHVyZS4KIAogSW1wbGVtZW50IC1wZXJmZWN0IG9wdGlvbiBpbiBqcGVndHJhbiwgbmV3IEFQSSBmdW5jdGlvbgpkaWZmIC0tZ2l0IGEvY2pwZWcuMSBiL2NqcGVnLjEKaW5kZXggZDUwYmY4MC4uZTRkOTVlZSAxMDA2NDQKLS0tIGEvY2pwZWcuMQorKysgYi9janBlZy4xCkBAIC0xLDQgKzEsNCBAQAotLlRIIENKUEVHIDEgIjE0IE5vdmVtYmVyIDIwMTAiCisuVEggQ0pQRUcgMSAiMTEgT2N0b2JlciAyMDEwIgogLlNIIE5BTUUKIGNqcGVnIFwtIGNvbXByZXNzIGFuIGltYWdlIGZpbGUgdG8gYSBKUEVHIGZpbGUKIC5TSCBTWU5PUFNJUwpAQCAtNjIsMTMgKzYyLDYgQEAKIC5CIFwtcHJvZ3Jlc3NpdmUKIENyZWF0ZSBwcm9ncmVzc2l2ZSBKUEVHIGZpbGUgKHNlZSBiZWxvdykuCiAuVFAKLS5CSSBcLXNjYWxlICIgTS9OIgotU2NhbGUgdGhlIG91dHB1dCBpbWFnZSBieSBhIGZhY3RvciBNL04uICBDdXJyZW50bHkgc3VwcG9ydGVkIHNjYWxlIGZhY3RvcnMgYXJlCi1NL04gd2l0aCBhbGwgTiBmcm9tIDEgdG8gMTYsIHdoZXJlIE0gaXMgdGhlIGRlc3RpbmF0aW9uIERDVCBzaXplLCB3aGljaCBpcyA4Ci1ieSBkZWZhdWx0IChzZWUKLS5CSSBcLWJsb2NrICIgTiIKLXN3aXRjaCBiZWxvdykuCi0uVFAKIC5CIFwtdGFyZ2EKIElucHV0IGZpbGUgaXMgVGFyZ2EgZm9ybWF0LiAgVGFyZ2EgZmlsZXMgdGhhdCBjb250YWluIGFuICJpZGVudGlmaWNhdGlvbiIKIGZpZWxkIHdpbGwgbm90IGJlIGF1dG9tYXRpY2FsbHkgcmVjb2duaXplZCBieQpAQCAtMTE1LDMzICsxMDgsMzUgQEAKIC5CIFwtYmFzZWxpbmUKIGlmIHlvdSBuZWVkIHRvIGVuc3VyZSBjb21wYXRpYmlsaXR5IGF0IGxvdyBxdWFsaXR5IHZhbHVlcy4pCiAuUFAKLVRoZQotLkIgXC1xdWFsaXR5Ci1vcHRpb24gaGFzIGJlZW4gZXh0ZW5kZWQgaW4gSUpHIHZlcnNpb24gNyBmb3Igc3VwcG9ydCBvZiBzZXBhcmF0ZSBxdWFsaXR5Ci1zZXR0aW5ncyBmb3IgbHVtaW5hbmNlIGFuZCBjaHJvbWluYW5jZSAob3IgaW4gZ2VuZXJhbCwgZm9yIGV2ZXJ5IHByb3ZpZGVkCi1xdWFudGl6YXRpb24gdGFibGUgc2xvdCkuICBUaGlzIGZlYXR1cmUgaXMgdXNlZnVsIGZvciBoaWdoLXF1YWxpdHkKLWFwcGxpY2F0aW9ucyB3aGljaCBjYW5ub3QgYWNjZXB0IHRoZSBkYW1hZ2Ugb2YgY29sb3IgZGF0YSBieSBjb2Fyc2UKLXN1YnNhbXBsaW5nIHNldHRpbmdzLiAgWW91IGNhbiBub3cgZWFzaWx5IHJlZHVjZSB0aGUgY29sb3IgZGF0YSBhbW91bnQgbW9yZQotc21vb3RobHkgd2l0aCBmaW5lciBjb250cm9sIHdpdGhvdXQgc2VwYXJhdGUgc3Vic2FtcGxpbmcuICBUaGUgcmVzdWx0aW5nIGZpbGUKLWlzIGZ1bGx5IGNvbXBsaWFudCB3aXRoIHN0YW5kYXJkIEpQRUcgZGVjb2RlcnMuCi1Ob3RlIHRoYXQgdGhlCi0uQiBcLXF1YWxpdHkKLXJhdGluZ3MgcmVmZXIgdG8gdGhlIHF1YW50aXphdGlvbiB0YWJsZSBzbG90cywgYW5kIHRoYXQgdGhlIGxhc3QgdmFsdWUgaXMKLXJlcGxpY2F0ZWQgaWYgdGhlcmUgYXJlIG1vcmUgcS10YWJsZSBzbG90cyB0aGFuIHBhcmFtZXRlcnMuICBUaGUgZGVmYXVsdAotcS10YWJsZSBzbG90cyBhcmUgMCBmb3IgbHVtaW5hbmNlIGFuZCAxIGZvciBjaHJvbWluYW5jZSB3aXRoIGRlZmF1bHQgdGFibGVzIGFzCi1naXZlbiBpbiB0aGUgSlBFRyBzdGFuZGFyZC4gIFRoaXMgaXMgY29tcGF0aWJsZSB3aXRoIHRoZSBvbGQgYmVoYXZpb3VyIGluIGNhc2UKLXRoYXQgb25seSBvbmUgcGFyYW1ldGVyIGlzIGdpdmVuLCB3aGljaCBpcyB0aGVuIHVzZWQgZm9yIGJvdGggbHVtaW5hbmNlIGFuZAotY2hyb21pbmFuY2UgKHNsb3RzIDAgYW5kIDEpLiAgTW9yZSBvciBjdXN0b20gcXVhbnRpemF0aW9uIHRhYmxlcyBjYW4gYmUgc2V0Ci13aXRoCi0uQiBcLXF0YWJsZXMKLWFuZCBhc3NpZ25lZCB0byBjb21wb25lbnRzIHdpdGgKLS5CIFwtcXNsb3RzCi1wYXJhbWV0ZXIgKHNlZSB0aGUgIndpemFyZCIgc3dpdGNoZXMgYmVsb3cpLgotLkIgQ2F1dGlvbjoKLVlvdSBtdXN0IGV4cGxpY2l0bHkgYWRkCi0uQkkgXC1zYW1wbGUgIiAxeDEiCi1mb3IgZWZmaWNpZW50IHNlcGFyYXRlIGNvbG9yCi1xdWFsaXR5IHNlbGVjdGlvbiwgc2luY2UgdGhlIGRlZmF1bHQgdmFsdWUgdXNlZCBieSBsaWJyYXJ5IGlzIDJ4MiEKK1RoZSBcZkItcXVhbGl0eVxmUiBvcHRpb24gaGFzIGJlZW4gZXh0ZW5kZWQgaW4gdGhpcyB2ZXJzaW9uIG9mIFxmQmNqcGVnXGZSIHRvCitzdXBwb3J0IHNlcGFyYXRlIHF1YWxpdHkgc2V0dGluZ3MgZm9yIGx1bWluYW5jZSBhbmQgY2hyb21pbmFuY2UgKG9yLCBpbgorZ2VuZXJhbCwgc2VwYXJhdGUgc2V0dGluZ3MgZm9yIGV2ZXJ5IHF1YW50aXphdGlvbiB0YWJsZSBzbG90LikgIFRoZSBwcmluY2lwbGUKK2lzIHRoZSBzYW1lIGFzIGNocm9taW5hbmNlIHN1YnNhbXBsaW5nOiAgc2luY2UgdGhlIGh1bWFuIGV5ZSBpcyBtb3JlIHNlbnNpdGl2ZQordG8gc3BhdGlhbCBjaGFuZ2VzIGluIGJyaWdodG5lc3MgdGhhbiBzcGF0aWFsIGNoYW5nZXMgaW4gY29sb3IsIHRoZSBjaHJvbWluYW5jZQorY29tcG9uZW50cyBjYW4gYmUgcXVhbnRpemVkIG1vcmUgdGhhbiB0aGUgbHVtaW5hbmNlIGNvbXBvbmVudHMgd2l0aG91dAoraW5jdXJyaW5nIGFueSB2aXNpYmxlIGltYWdlIHF1YWxpdHkgbG9zcy4gIEhvd2V2ZXIsIHVubGlrZSBzdWJzYW1wbGluZywgdGhpcworZmVhdHVyZSByZWR1Y2VzIGRhdGEgaW4gdGhlIGZyZXF1ZW5jeSBkb21haW4gaW5zdGVhZCBvZiB0aGUgc3BhdGlhbCBkb21haW4sCit3aGljaCBhbGxvd3MgZm9yIG1vcmUgZmluZS1ncmFpbmVkIGNvbnRyb2wuICBUaGlzIG9wdGlvbiBpcyB1c2VmdWwgaW4KK3F1YWxpdHktc2Vuc2l0aXZlIGFwcGxpY2F0aW9ucywgZm9yIHdoaWNoIHRoZSBhcnRpZmFjdHMgZ2VuZXJhdGVkIGJ5CitzdWJzYW1wbGluZyBtYXkgYmUgdW5hY2NlcHRhYmxlLgorLlBQCitUaGUgXGZCLXF1YWxpdHlcZlIgb3B0aW9uIGFjY2VwdHMgYSBjb21tYS1zZXBhcmF0ZWQgbGlzdCBvZiBwYXJhbWV0ZXJzLCB3aGljaAorcmVzcGVjdGl2ZWx5IHJlZmVyIHRvIHRoZSBxdWFsaXR5IGxldmVscyB3aGljaCBzaG91bGQgYmUgYXNzaWduZWQgdG8gdGhlCitxdWFudGl6YXRpb24gdGFibGUgc2xvdHMuICBJZiB0aGVyZSBhcmUgbW9yZSBxLXRhYmxlIHNsb3RzIHRoYW4gcGFyYW1ldGVycywKK3RoZW4gdGhlIGxhc3QgcGFyYW1ldGVyIGlzIHJlcGxpY2F0ZWQuICBUaHVzLCBpZiBvbmx5IG9uZSBxdWFsaXR5IHBhcmFtZXRlciBpcworZ2l2ZW4sIHRoaXMgaXMgdXNlZCBmb3IgYm90aCBsdW1pbmFuY2UgYW5kIGNocm9taW5hbmNlIChzbG90cyAwIGFuZCAxLAorcmVzcGVjdGl2ZWx5KSwgcHJlc2VydmluZyB0aGUgbGVnYWN5IGJlaGF2aW9yIG9mIGNqcGVnIHY2YiBhbmQgcHJpb3IuCitNb3JlIChvciBjdXN0b21pemVkKSBxdWFudGl6YXRpb24gdGFibGVzIGNhbiBiZSBzZXQgd2l0aCB0aGUgXGZCLXF0YWJsZXNcZlIKK29wdGlvbiBhbmQgYXNzaWduZWQgdG8gY29tcG9uZW50cyB3aXRoIHRoZSBcZkItcXNsb3RzXGZSIG9wdGlvbiAoc2VlIHRoZQorIndpemFyZCIgc3dpdGNoZXMgYmVsb3cuKQorLlBQCitKUEVHIGZpbGVzIGdlbmVyYXRlZCB3aXRoIHNlcGFyYXRlIGx1bWluYW5jZSBhbmQgY2hyb21pbmFuY2UgcXVhbGl0eSBhcmUgZnVsbHkKK2NvbXBsaWFudCB3aXRoIHN0YW5kYXJkIEpQRUcgZGVjb2RlcnMuCisuUFAKKy5CUiBDQVVUSU9OOgorRm9yIHRoaXMgc2V0dGluZyB0byBiZSB1c2VmdWwsIGJlIHN1cmUgdG8gcGFzcyBhbiBhcmd1bWVudCBvZiBcZkItc2FtcGxlIDF4MVxmUgordG8gXGZCY2pwZWdcZlIgdG8gZGlzYWJsZSBjaHJvbWluYW5jZSBzdWJzYW1wbGluZy4gIE90aGVyd2lzZSwgdGhlIGRlZmF1bHQKK3N1YnNhbXBsaW5nIGxldmVsICgyeDIsIEFLQSAiNDoyOjAiKSB3aWxsIGJlIHVzZWQuCiAuUFAKIFRoZQogLkIgXC1wcm9ncmVzc2l2ZQpAQCAtMTU1LDE3ICsxNTAsNiBAQAogLlBQCiBTd2l0Y2hlcyBmb3IgYWR2YW5jZWQgdXNlcnM6CiAuVFAKLS5CSSBcLWJsb2NrICIgTiIKLVNldCBEQ1QgYmxvY2sgc2l6ZS4gIEFsbCBOIGZyb20gMSB0byAxNiBhcmUgcG9zc2libGUuCi1EZWZhdWx0IGlzIDggKGJhc2VsaW5lIGZvcm1hdCkuCi1MYXJnZXIgdmFsdWVzIHByb2R1Y2UgaGlnaGVyIGNvbXByZXNzaW9uLAotc21hbGxlciB2YWx1ZXMgcHJvZHVjZSBoaWdoZXIgcXVhbGl0eQotKGV4YWN0IERDVCBzdGFnZSBwb3NzaWJsZSB3aXRoIDEgb3IgMjsgd2l0aCB0aGUgZGVmYXVsdCBxdWFsaXR5IG9mIDc1IGFuZAotZGVmYXVsdCBMdW1pbmFuY2UgcXRhYmxlIHRoZSBEQ1QrUXVhbnRpemF0aW9uIHN0YWdlIGlzIGxvc3NsZXNzIGZvciBOPTEpLgotQ0FVVElPTjogQW4gaW1wbGVtZW50YXRpb24gb2YgdGhlIEpQRUcgU21hcnRTY2FsZSBleHRlbnNpb24gaXMgcmVxdWlyZWQgZm9yCi10aGlzIGZlYXR1cmUuICBTbWFydFNjYWxlIGVuYWJsZWQgSlBFRyBpcyBub3QgeWV0IHdpZGVseSBpbXBsZW1lbnRlZCwgc28KLW1hbnkgZGVjb2RlcnMgd2lsbCBiZSB1bmFibGUgdG8gdmlldyBhIFNtYXJ0U2NhbGUgZXh0ZW5kZWQgSlBFRyBmaWxlIGF0IGFsbC4KLS5UUAogLkIgXC1kY3QgaW50CiBVc2UgaW50ZWdlciBEQ1QgbWV0aG9kIChkZWZhdWx0KS4KIC5UUApAQCAtMTgwLDkgKzE2NCw2IEBACiBtYWNoaW5lcywgd2hpbGUgdGhlIGludGVnZXIgbWV0aG9kcyBzaG91bGQgZ2l2ZSB0aGUgc2FtZSByZXN1bHRzIGV2ZXJ5d2hlcmUuCiBUaGUgZmFzdCBpbnRlZ2VyIG1ldGhvZCBpcyBtdWNoIGxlc3MgYWNjdXJhdGUgdGhhbiB0aGUgb3RoZXIgdHdvLgogLlRQCi0uQiBcLW5vc21vb3RoCi1Eb24ndCB1c2UgaGlnaC1xdWFsaXR5IGRvd25zYW1wbGluZy4KLS5UUAogLkJJIFwtcmVzdGFydCAiIE4iCiBFbWl0IGEgSlBFRyByZXN0YXJ0IG1hcmtlciBldmVyeSBOIE1DVSByb3dzLCBvciBldmVyeSBOIE1DVSBibG9ja3MgaWYgIkIiIGlzCiBhdHRhY2hlZCB0byB0aGUgbnVtYmVyLgpAQCAtMzI4LDggKzMwOSwxMCBAQAogLlNIIEFVVEhPUgogSW5kZXBlbmRlbnQgSlBFRyBHcm91cAogLlNIIEJVR1MKLUdJRiBpbnB1dCBmaWxlcyBhcmUgbm8gbG9uZ2VyIHN1cHBvcnRlZCwgdG8gYXZvaWQgdGhlIFVuaXN5cyBMWlcgcGF0ZW50LgotKENvbnZlcnNpb24gb2YgR0lGIGZpbGVzIHRvIEpQRUcgaXMgdXN1YWxseSBhIGJhZCBpZGVhIGFueXdheS4pCitTdXBwb3J0IGZvciBHSUYgaW5wdXQgZmlsZXMgd2FzIHJlbW92ZWQgaW4gY2pwZWcgdjZiIGR1ZSB0byBjb25jZXJucyBvdmVyCit0aGUgVW5pc3lzIExaVyBwYXRlbnQuICBBbHRob3VnaCB0aGlzIHBhdGVudCBleHBpcmVkIGluIDIwMDYsIGNqcGVnIHN0aWxsCitsYWNrcyBHSUYgc3VwcG9ydCwgZm9yIHRoZXNlIGhpc3RvcmljYWwgcmVhc29ucy4gIChDb252ZXJzaW9uIG9mIEdJRiBmaWxlcyB0bworSlBFRyBpcyB1c3VhbGx5IGEgYmFkIGlkZWEgYW55d2F5LikKIC5QUAogTm90IGFsbCB2YXJpYW50cyBvZiBCTVAgYW5kIFRhcmdhIGZpbGUgZm9ybWF0cyBhcmUgc3VwcG9ydGVkLgogLlBQCmRpZmYgLS1naXQgYS9janBlZy5jIGIvY2pwZWcuYwppbmRleCA0MGQyNTIxLi4zZGFhMjU5IDEwMDY0NAotLS0gYS9janBlZy5jCisrKyBiL2NqcGVnLmMKQEAgLTIsNyArMiw4IEBACiAgKiBjanBlZy5jCiAgKgogICogQ29weXJpZ2h0IChDKSAxOTkxLTE5OTgsIFRob21hcyBHLiBMYW5lLgotICogTW9kaWZpZWQgMjAwMy0yMDEwIGJ5IEd1aWRvIFZvbGxiZWRpbmcuCisgKiBNb2RpZmllZCAyMDAzLTIwMDggYnkgR3VpZG8gVm9sbGJlZGluZy4KKyAqIENvcHlyaWdodCAoQykgMjAxMCwgRC4gUi4gQ29tbWFuZGVyLgogICogVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEluZGVwZW5kZW50IEpQRUcgR3JvdXAncyBzb2Z0d2FyZS4KICAqIEZvciBjb25kaXRpb25zIG9mIGRpc3RyaWJ1dGlvbiBhbmQgdXNlLCBzZWUgdGhlIGFjY29tcGFueWluZyBSRUFETUUgZmlsZS4KICAqCkBAIC0yNiw2ICsyNyw3IEBACiAKICNpbmNsdWRlICJjZGpwZWcuaCIJCS8qIENvbW1vbiBkZWNscyBmb3IgY2pwZWcvZGpwZWcgYXBwbGljYXRpb25zICovCiAjaW5jbHVkZSAianZlcnNpb24uaCIJCS8qIGZvciB2ZXJzaW9uIG1lc3NhZ2UgKi8KKyNpbmNsdWRlICJjb25maWcuaCIKIAogI2lmZGVmIFVTRV9DQ09NTUFORAkJLyogY29tbWFuZC1saW5lIHJlYWRlciBmb3IgTWFjaW50b3NoICovCiAjaWZkZWYgX19NV0VSS1NfXwpAQCAtMTU4LDE2ICsxNjAsMTAgQEAKICNpZmRlZiBDX1BST0dSRVNTSVZFX1NVUFBPUlRFRAogICBmcHJpbnRmKHN0ZGVyciwgIiAgLXByb2dyZXNzaXZlICAgQ3JlYXRlIHByb2dyZXNzaXZlIEpQRUcgZmlsZVxuIik7CiAjZW5kaWYKLSNpZmRlZiBEQ1RfU0NBTElOR19TVVBQT1JURUQKLSAgZnByaW50ZihzdGRlcnIsICIgIC1zY2FsZSBNL04gICAgIFNjYWxlIGltYWdlIGJ5IGZyYWN0aW9uIE0vTiwgZWcsIDEvMlxuIik7Ci0jZW5kaWYKICNpZmRlZiBUQVJHQV9TVVBQT1JURUQKICAgZnByaW50ZihzdGRlcnIsICIgIC10YXJnYSAgICAgICAgIElucHV0IGZpbGUgaXMgVGFyZ2EgZm9ybWF0ICh1c3VhbGx5IG5vdCBuZWVkZWQpXG4iKTsKICNlbmRpZgogICBmcHJpbnRmKHN0ZGVyciwgIlN3aXRjaGVzIGZvciBhZHZhbmNlZCB1c2VyczpcbiIpOwotI2lmZGVmIERDVF9TQ0FMSU5HX1NVUFBPUlRFRAotICBmcHJpbnRmKHN0ZGVyciwgIiAgLWJsb2NrIE4gICAgICAgRENUIGJsb2NrIHNpemUgKDEuLjE2OyBkZWZhdWx0IGlzIDgpXG4iKTsKLSNlbmRpZgogI2lmZGVmIERDVF9JU0xPV19TVVBQT1JURUQKICAgZnByaW50ZihzdGRlcnIsICIgIC1kY3QgaW50ICAgICAgIFVzZSBpbnRlZ2VyIERDVCBtZXRob2Qlc1xuIiwKIAkgIChKRENUX0RFRkFVTFQgPT0gSkRDVF9JU0xPVyA/ICIgKGRlZmF1bHQpIiA6ICIiKSk7CkBAIC0xODAsNyArMTc2LDYgQEAKICAgZnByaW50ZihzdGRlcnIsICIgIC1kY3QgZmxvYXQgICAgIFVzZSBmbG9hdGluZy1wb2ludCBEQ1QgbWV0aG9kJXNcbiIsCiAJICAoSkRDVF9ERUZBVUxUID09IEpEQ1RfRkxPQVQgPyAiIChkZWZhdWx0KSIgOiAiIikpOwogI2VuZGlmCi0gIGZwcmludGYoc3RkZXJyLCAiICAtbm9zbW9vdGggICAgICBEb24ndCB1c2UgaGlnaC1xdWFsaXR5IGRvd25zYW1wbGluZ1xuIik7CiAgIGZwcmludGYoc3RkZXJyLCAiICAtcmVzdGFydCBOICAgICBTZXQgcmVzdGFydCBpbnRlcnZhbCBpbiByb3dzLCBvciBpbiBibG9ja3Mgd2l0aCBCXG4iKTsKICNpZmRlZiBJTlBVVF9TTU9PVEhJTkdfU1VQUE9SVEVECiAgIGZwcmludGYoc3RkZXJyLCAiICAtc21vb3RoIE4gICAgICBTbW9vdGggZGl0aGVyZWQgaW5wdXQgKE49MS4uMTAwIGlzIHN0cmVuZ3RoKVxuIik7CkBAIC0yNTcsMzAgKzI1MiwxMCBAQAogICAgICAgZXhpdChFWElUX0ZBSUxVUkUpOwogI2VuZGlmCiAKLSAgICB9IGVsc2UgaWYgKGtleW1hdGNoKGFyZywgImJhc2VsaW5lIiwgMikpIHsKKyAgICB9IGVsc2UgaWYgKGtleW1hdGNoKGFyZywgImJhc2VsaW5lIiwgMSkpIHsKICAgICAgIC8qIEZvcmNlIGJhc2VsaW5lLWNvbXBhdGlibGUgb3V0cHV0ICg4LWJpdCBxdWFudGl6ZXIgdmFsdWVzKS4gKi8KICAgICAgIGZvcmNlX2Jhc2VsaW5lID0gVFJVRTsKIAotICAgIH0gZWxzZSBpZiAoa2V5bWF0Y2goYXJnLCAiYmxvY2siLCAyKSkgewotICAgICAgLyogU2V0IERDVCBibG9jayBzaXplLiAqLwotI2lmIGRlZmluZWQoRENUX1NDQUxJTkdfU1VQUE9SVEVEKSAmJiBkZWZpbmVkKEpQRUdfTElCX1ZFUlNJT05fTUFKT1IpICYmIFwKLSAgICAoSlBFR19MSUJfVkVSU0lPTl9NQUpPUiA+IDggfHwgKEpQRUdfTElCX1ZFUlNJT05fTUFKT1IgPT0gOCAmJiBcCi0gICAgIGRlZmluZWQoSlBFR19MSUJfVkVSU0lPTl9NSU5PUikgJiYgSlBFR19MSUJfVkVSU0lPTl9NSU5PUiA+PSAzKSkKLSAgICAgIGludCB2YWw7Ci0KLSAgICAgIGlmICgrK2FyZ24gPj0gYXJnYykJLyogYWR2YW5jZSB0byBuZXh0IGFyZ3VtZW50ICovCi0JdXNhZ2UoKTsKLSAgICAgIGlmIChzc2NhbmYoYXJndlthcmduXSwgIiVkIiwgJnZhbCkgIT0gMSkKLQl1c2FnZSgpOwotICAgICAgaWYgKHZhbCA8IDEgfHwgdmFsID4gMTYpCi0JdXNhZ2UoKTsKLSAgICAgIGNpbmZvLT5ibG9ja19zaXplID0gdmFsOwotI2Vsc2UKLSAgICAgIGZwcmludGYoc3RkZXJyLCAiJXM6IHNvcnJ5LCBibG9jayBzaXplIHNldHRpbmcgbm90IHN1cHBvcnRlZFxuIiwKLQkgICAgICBwcm9nbmFtZSk7Ci0gICAgICBleGl0KEVYSVRfRkFJTFVSRSk7Ci0jZW5kaWYKLQogICAgIH0gZWxzZSBpZiAoa2V5bWF0Y2goYXJnLCAiZGN0IiwgMikpIHsKICAgICAgIC8qIFNlbGVjdCBEQ1QgYWxnb3JpdGhtLiAqLwogICAgICAgaWYgKCsrYXJnbiA+PSBhcmdjKQkvKiBhZHZhbmNlIHRvIG5leHQgYXJndW1lbnQgKi8KQEAgLTMwMCw3ICsyNzUsMTAgQEAKICAgICAgIHN0YXRpYyBib29sZWFuIHByaW50ZWRfdmVyc2lvbiA9IEZBTFNFOwogCiAgICAgICBpZiAoISBwcmludGVkX3ZlcnNpb24pIHsKLQlmcHJpbnRmKHN0ZGVyciwgIkluZGVwZW5kZW50IEpQRUcgR3JvdXAncyBDSlBFRywgdmVyc2lvbiAlc1xuJXNcbiIsCisJZnByaW50ZihzdGRlcnIsICIlcyB2ZXJzaW9uICVzIChidWlsZCAlcylcbiIsCisJCVBBQ0tBR0VfTkFNRSwgVkVSU0lPTiwgQlVJTEQpOworCWZwcmludGYoc3RkZXJyLCAiJXNcblxuIiwgTEpUQ09QWVJJR0hUKTsKKwlmcHJpbnRmKHN0ZGVyciwgIkJhc2VkIG9uIEluZGVwZW5kZW50IEpQRUcgR3JvdXAncyBsaWJqcGVnLCB2ZXJzaW9uICVzXG4lc1xuXG4iLAogCQlKVkVSU0lPTiwgSkNPUFlSSUdIVCk7CiAJcHJpbnRlZF92ZXJzaW9uID0gVFJVRTsKICAgICAgIH0KQEAgLTMyMywxMCArMzAxLDYgQEAKIAlsdmFsICo9IDEwMDBMOwogICAgICAgY2luZm8tPm1lbS0+bWF4X21lbW9yeV90b191c2UgPSBsdmFsICogMTAwMEw7CiAKLSAgICB9IGVsc2UgaWYgKGtleW1hdGNoKGFyZywgIm5vc21vb3RoIiwgMykpIHsKLSAgICAgIC8qIFN1cHByZXNzIGZhbmN5IGRvd25zYW1wbGluZyAqLwotICAgICAgY2luZm8tPmRvX2ZhbmN5X2Rvd25zYW1wbGluZyA9IEZBTFNFOwotCiAgICAgfSBlbHNlIGlmIChrZXltYXRjaChhcmcsICJvcHRpbWl6ZSIsIDEpIHx8IGtleW1hdGNoKGFyZywgIm9wdGltaXNlIiwgMSkpIHsKICAgICAgIC8qIEVuYWJsZSBlbnRyb3B5IHBhcm0gb3B0aW1pemF0aW9uLiAqLwogI2lmZGVmIEVOVFJPUFlfT1BUX1NVUFBPUlRFRApAQCAtNDA2LDE0ICszODAsNiBAQAogICAgICAgICogZGVmYXVsdCBzYW1wbGluZyBmYWN0b3JzLgogICAgICAgICovCiAKLSAgICB9IGVsc2UgaWYgKGtleW1hdGNoKGFyZywgInNjYWxlIiwgNCkpIHsKLSAgICAgIC8qIFNjYWxlIHRoZSBpbWFnZSBieSBhIGZyYWN0aW9uIE0vTi4gKi8KLSAgICAgIGlmICgrK2FyZ24gPj0gYXJnYykJLyogYWR2YW5jZSB0byBuZXh0IGFyZ3VtZW50ICovCi0JdXNhZ2UoKTsKLSAgICAgIGlmIChzc2NhbmYoYXJndlthcmduXSwgIiVkLyVkIiwKLQkJICZjaW5mby0+c2NhbGVfbnVtLCAmY2luZm8tPnNjYWxlX2Rlbm9tKSAhPSAyKQotCXVzYWdlKCk7Ci0KICAgICB9IGVsc2UgaWYgKGtleW1hdGNoKGFyZywgInNjYW5zIiwgNCkpIHsKICAgICAgIC8qIFNldCBzY2FuIHNjcmlwdC4gKi8KICNpZmRlZiBDX01VTFRJU0NBTl9GSUxFU19TVVBQT1JURUQKZGlmZiAtLWdpdCBhL2NrY29uZmlnLmMgYi9ja2NvbmZpZy5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlNjU4NjIzLi4wMDAwMDAwCi0tLSBhL2NrY29uZmlnLmMKKysrIC9kZXYvbnVsbApAQCAtMSw0MDIgKzAsMCBAQAotLyoKLSAqIGNrY29uZmlnLmMKLSAqCi0gKiBDb3B5cmlnaHQgKEMpIDE5OTEtMTk5NCwgVGhvbWFzIEcuIExhbmUuCi0gKiBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgSW5kZXBlbmRlbnQgSlBFRyBHcm91cCdzIHNvZnR3YXJlLgotICogRm9yIGNvbmRpdGlvbnMgb2YgZGlzdHJpYnV0aW9uIGFuZCB1c2UsIHNlZSB0aGUgYWNjb21wYW55aW5nIFJFQURNRSBmaWxlLgotICovCi0KLS8qCi0gKiBUaGlzIHByb2dyYW0gaXMgaW50ZW5kZWQgdG8gaGVscCB5b3UgZGV0ZXJtaW5lIGhvdyB0byBjb25maWd1cmUgdGhlIEpQRUcKLSAqIHNvZnR3YXJlIGZvciBpbnN0YWxsYXRpb24gb24gYSBwYXJ0aWN1bGFyIHN5c3RlbS4gIFRoZSBpZGVhIGlzIHRvIHRyeSB0bwotICogY29tcGlsZSBhbmQgZXhlY3V0ZSB0aGlzIHByb2dyYW0uICBJZiB5b3VyIGNvbXBpbGVyIGZhaWxzIHRvIGNvbXBpbGUgdGhlCi0gKiBwcm9ncmFtLCBtYWtlIGNoYW5nZXMgYXMgaW5kaWNhdGVkIGluIHRoZSBjb21tZW50cyBiZWxvdy4gIE9uY2UgeW91IGNhbgotICogY29tcGlsZSB0aGUgcHJvZ3JhbSwgcnVuIGl0LCBhbmQgaXQgd2lsbCBwcm9kdWNlIGEgImpjb25maWcuaCIgZmlsZSBmb3IKLSAqIHlvdXIgc3lzdGVtLgotICoKLSAqIEFzIGEgZ2VuZXJhbCBydWxlLCBlYWNoIHRpbWUgeW91IHRyeSB0byBjb21waWxlIHRoaXMgcHJvZ3JhbSwKLSAqIHBheSBhdHRlbnRpb24gb25seSB0byB0aGUgKmZpcnN0KiBlcnJvciBtZXNzYWdlIHlvdSBnZXQgZnJvbSB0aGUgY29tcGlsZXIuCi0gKiBNYW55IEMgY29tcGlsZXJzIHdpbGwgaXNzdWUgbG90cyBvZiBzcHVyaW91cyBlcnJvciBtZXNzYWdlcyBvbmNlIHRoZXkKLSAqIGhhdmUgZ290dGVuIGNvbmZ1c2VkLiAgR28gdG8gdGhlIGxpbmUgaW5kaWNhdGVkIGluIHRoZSBmaXJzdCBlcnJvciBtZXNzYWdlLAotICogYW5kIHJlYWQgdGhlIGNvbW1lbnRzIHByZWNlZGluZyB0aGF0IGxpbmUgdG8gc2VlIHdoYXQgdG8gY2hhbmdlLgotICoKLSAqIEFsbW9zdCBhbGwgb2YgdGhlIGVkaXRzIHlvdSBtYXkgbmVlZCB0byBtYWtlIHRvIHRoaXMgcHJvZ3JhbSBjb25zaXN0IG9mCi0gKiBjaGFuZ2luZyBhIGxpbmUgdGhhdCByZWFkcyAiI2RlZmluZSBTT01FX1NZTUJPTCIgdG8gIiN1bmRlZiBTT01FX1NZTUJPTCIsCi0gKiBvciB2aWNlIHZlcnNhLiAgVGhpcyBpcyBjYWxsZWQgZGVmaW5pbmcgb3IgdW5kZWZpbmluZyB0aGF0IHN5bWJvbC4KLSAqLwotCi0KLS8qIEZpcnN0IHdlIG11c3Qgc2VlIGlmIHlvdXIgc3lzdGVtIGhhcyB0aGUgaW5jbHVkZSBmaWxlcyB3ZSBuZWVkLgotICogV2Ugc3RhcnQgb3V0IHdpdGggdGhlIGFzc3VtcHRpb24gdGhhdCB5b3VyIHN5c3RlbSBoYXMgYWxsIHRoZSBBTlNJLXN0YW5kYXJkCi0gKiBpbmNsdWRlIGZpbGVzLiAgSWYgeW91IGdldCBhbnkgZXJyb3IgdHJ5aW5nIHRvIGluY2x1ZGUgb25lIG9mIHRoZXNlIGZpbGVzLAotICogdW5kZWZpbmUgdGhlIGNvcnJlc3BvbmRpbmcgSEFWRV94eHggc3ltYm9sLgotICovCi0KLSNkZWZpbmUgSEFWRV9TVERERUZfSAkJLyogcmVwbGFjZSAnZGVmaW5lJyBieSAndW5kZWYnIGlmIGVycm9yIGhlcmUgKi8KLSNpZmRlZiBIQVZFX1NURERFRl9ICQkvKiBuZXh0IGxpbmUgd2lsbCBiZSBza2lwcGVkIGlmIHlvdSB1bmRlZi4uLiAqLwotI2luY2x1ZGUgPHN0ZGRlZi5oPgotI2VuZGlmCi0KLSNkZWZpbmUgSEFWRV9TVERMSUJfSAkJLyogc2FtZSB0aGluZyBmb3Igc3RkbGliLmggKi8KLSNpZmRlZiBIQVZFX1NURExJQl9ICi0jaW5jbHVkZSA8c3RkbGliLmg+Ci0jZW5kaWYKLQotI2luY2x1ZGUgPHN0ZGlvLmg+CQkvKiBJZiB5b3UgYWluJ3QgZ290IHRoaXMsIHlvdSBhaW4ndCBnb3QgQy4gKi8KLQotLyogV2UgaGF2ZSB0byBzZWUgaWYgeW91ciBzdHJpbmcgZnVuY3Rpb25zIGFyZSBkZWZpbmVkIGJ5Ci0gKiBzdHJpbmdzLmggKG9sZCBCU0QgY29udmVudGlvbikgb3Igc3RyaW5nLmggKGV2ZXJ5Ym9keSBlbHNlKS4KLSAqIFdlIHRyeSB0aGUgbm9uLUJTRCBjb252ZW50aW9uIGZpcnN0OyBkZWZpbmUgTkVFRF9CU0RfU1RSSU5HUwotICogaWYgdGhlIGNvbXBpbGVyIHNheXMgaXQgY2FuJ3QgZmluZCBzdHJpbmcuaC4KLSAqLwotCi0jdW5kZWYgTkVFRF9CU0RfU1RSSU5HUwotCi0jaWZkZWYgTkVFRF9CU0RfU1RSSU5HUwotI2luY2x1ZGUgPHN0cmluZ3MuaD4KLSNlbHNlCi0jaW5jbHVkZSA8c3RyaW5nLmg+Ci0jZW5kaWYKLQotLyogT24gc29tZSBzeXN0ZW1zIChlc3BlY2lhbGx5IG9sZGVyIFVuaXggbWFjaGluZXMpLCB0eXBlIHNpemVfdCBpcwotICogZGVmaW5lZCBvbmx5IGluIHRoZSBpbmNsdWRlIGZpbGUgPHN5cy90eXBlcy5oPi4gIElmIHlvdSBnZXQgYSBmYWlsdXJlCi0gKiBvbiB0aGUgc2l6ZV90IHRlc3QgYmVsb3csIHRyeSBkZWZpbmluZyBORUVEX1NZU19UWVBFU19ILgotICovCi0KLSN1bmRlZiBORUVEX1NZU19UWVBFU19ICQkvKiBzdGFydCBieSBhc3N1bWluZyB3ZSBkb24ndCBuZWVkIGl0ICovCi0jaWZkZWYgTkVFRF9TWVNfVFlQRVNfSAotI2luY2x1ZGUgPHN5cy90eXBlcy5oPgotI2VuZGlmCi0KLQotLyogVXN1YWxseSB0eXBlIHNpemVfdCBpcyBkZWZpbmVkIGluIG9uZSBvZiB0aGUgaW5jbHVkZSBmaWxlcyB3ZSd2ZSBpbmNsdWRlZAotICogYWJvdmUuICBJZiBub3QsIHlvdSdsbCBnZXQgYW4gZXJyb3Igb24gdGhlICJ0eXBlZGVmIHNpemVfdCBteV9zaXplX3Q7IiBsaW5lLgotICogSW4gdGhhdCBjYXNlLCBmaXJzdCB0cnkgZGVmaW5pbmcgTkVFRF9TWVNfVFlQRVNfSCBqdXN0IGFib3ZlLgotICogSWYgdGhhdCBkb2Vzbid0IHdvcmssIHlvdSdsbCBoYXZlIHRvIHNlYXJjaCB0aHJvdWdoIHlvdXIgc3lzdGVtIGxpYnJhcnkKLSAqIHRvIGZpZ3VyZSBvdXQgd2hpY2ggaW5jbHVkZSBmaWxlIGRlZmluZXMgInNpemVfdCIuICBMb29rIGZvciBhIGxpbmUgdGhhdAotICogc2F5cyAidHlwZWRlZiBzb21ldGhpbmctb3Itb3RoZXIgc2l6ZV90OyIuICBUaGVuLCBjaGFuZ2UgdGhlIGxpbmUgYmVsb3cKLSAqIHRoYXQgc2F5cyAiI2luY2x1ZGUgPHNvbWVpbmNsdWRlZmlsZS5oPiIgdG8gaW5zdGVhZCBpbmNsdWRlIHRoZSBmaWxlCi0gKiB5b3UgZm91bmQgc2l6ZV90IGluLCBhbmQgZGVmaW5lIE5FRURfU1BFQ0lBTF9JTkNMVURFLiAgSWYgeW91IGNhbid0IGZpbmQKLSAqIHR5cGUgc2l6ZV90IGFueXdoZXJlLCB0cnkgcmVwbGFjaW5nICIjaW5jbHVkZSA8c29tZWluY2x1ZGVmaWxlLmg+IiB3aXRoCi0gKiAidHlwZWRlZiB1bnNpZ25lZCBpbnQgc2l6ZV90OyIuCi0gKi8KLQotI3VuZGVmIE5FRURfU1BFQ0lBTF9JTkNMVURFCS8qIGFzc3VtZSB3ZSBET04nVCBuZWVkIGl0LCBmb3Igc3RhcnRlcnMgKi8KLQotI2lmZGVmIE5FRURfU1BFQ0lBTF9JTkNMVURFCi0jaW5jbHVkZSA8c29tZWluY2x1ZGVmaWxlLmg+Ci0jZW5kaWYKLQotdHlwZWRlZiBzaXplX3QgbXlfc2l6ZV90OwkvKiBUaGUgcGF5b2ZmOiBkbyB3ZSBoYXZlIHNpemVfdCBub3c/ICovCi0KLQotLyogVGhlIG5leHQgcXVlc3Rpb24gaXMgd2hldGhlciB5b3VyIGNvbXBpbGVyIHN1cHBvcnRzIEFOU0ktc3R5bGUgZnVuY3Rpb24KLSAqIHByb3RvdHlwZXMuICBZb3UgbmVlZCB0byBrbm93IHRoaXMgaW4gb3JkZXIgdG8gY2hvb3NlIGJldHdlZW4gdXNpbmcKLSAqIG1ha2VmaWxlLmFuc2kgYW5kIHVzaW5nIG1ha2VmaWxlLnVuaXguCi0gKiBUaGUgI2RlZmluZSBsaW5lIGJlbG93IGlzIHNldCB0byBhc3N1bWUgeW91IGhhdmUgQU5TSSBmdW5jdGlvbiBwcm90b3R5cGVzLgotICogSWYgeW91IGdldCBhbiBlcnJvciBpbiB0aGlzIGdyb3VwIG9mIGxpbmVzLCB1bmRlZmluZSBIQVZFX1BST1RPVFlQRVMuCi0gKi8KLQotI2RlZmluZSBIQVZFX1BST1RPVFlQRVMKLQotI2lmZGVmIEhBVkVfUFJPVE9UWVBFUwotaW50IHRlc3RmdW5jdGlvbiAoaW50IGFyZzEsIGludCAqIGFyZzIpOyAvKiBjaGVjayBwcm90b3R5cGVzICovCi0KLXN0cnVjdCBtZXRob2RzX3N0cnVjdCB7CQkvKiBjaGVjayBtZXRob2QtcG9pbnRlciBkZWNsYXJhdGlvbnMgKi8KLSAgaW50ICgqZXJyb3JfZXhpdCkgKGNoYXIgKm1zZ3RleHQpOwotICBpbnQgKCp0cmFjZV9tZXNzYWdlKSAoY2hhciAqbXNndGV4dCk7Ci0gIGludCAoKmFub3RoZXJfbWV0aG9kKSAodm9pZCk7Ci19OwotCi1pbnQgdGVzdGZ1bmN0aW9uIChpbnQgYXJnMSwgaW50ICogYXJnMikgLyogY2hlY2sgZGVmaW5pdGlvbnMgKi8KLXsKLSAgcmV0dXJuIGFyZzJbYXJnMV07Ci19Ci0KLWludCB0ZXN0MmZ1bmN0aW9uICh2b2lkKQkvKiBjaGVjayB2b2lkIGFyZyBsaXN0ICovCi17Ci0gIHJldHVybiAwOwotfQotI2VuZGlmCi0KLQotLyogTm93IHdlIHdhbnQgdG8gZmluZCBvdXQgaWYgeW91ciBjb21waWxlciBrbm93cyB3aGF0ICJ1bnNpZ25lZCBjaGFyIiBtZWFucy4KLSAqIElmIHlvdSBnZXQgYW4gZXJyb3Igb24gdGhlICJ1bnNpZ25lZCBjaGFyIHVuX2NoYXI7IiBsaW5lLAotICogdGhlbiB1bmRlZmluZSBIQVZFX1VOU0lHTkVEX0NIQVIuCi0gKi8KLQotI2RlZmluZSBIQVZFX1VOU0lHTkVEX0NIQVIKLQotI2lmZGVmIEhBVkVfVU5TSUdORURfQ0hBUgotdW5zaWduZWQgY2hhciB1bl9jaGFyOwotI2VuZGlmCi0KLQotLyogTm93IHdlIHdhbnQgdG8gZmluZCBvdXQgaWYgeW91ciBjb21waWxlciBrbm93cyB3aGF0ICJ1bnNpZ25lZCBzaG9ydCIgbWVhbnMuCi0gKiBJZiB5b3UgZ2V0IGFuIGVycm9yIG9uIHRoZSAidW5zaWduZWQgc2hvcnQgdW5fc2hvcnQ7IiBsaW5lLAotICogdGhlbiB1bmRlZmluZSBIQVZFX1VOU0lHTkVEX1NIT1JULgotICovCi0KLSNkZWZpbmUgSEFWRV9VTlNJR05FRF9TSE9SVAotCi0jaWZkZWYgSEFWRV9VTlNJR05FRF9TSE9SVAotdW5zaWduZWQgc2hvcnQgdW5fc2hvcnQ7Ci0jZW5kaWYKLQotCi0vKiBOb3cgd2Ugd2FudCB0byBmaW5kIG91dCBpZiB5b3VyIGNvbXBpbGVyIHVuZGVyc3RhbmRzIHR5cGUgInZvaWQiLgotICogSWYgeW91IGdldCBhbiBlcnJvciBhbnl3aGVyZSBpbiBoZXJlLCB1bmRlZmluZSBIQVZFX1ZPSUQuCi0gKi8KLQotI2RlZmluZSBIQVZFX1ZPSUQKLQotI2lmZGVmIEhBVkVfVk9JRAotLyogQ2F1dGlvbjogYSBDKysgY29tcGlsZXIgd2lsbCBpbnNpc3Qgb24gY29tcGxldGUgcHJvdG90eXBlcyAqLwotdHlwZWRlZiB2b2lkICogdm9pZF9wdHI7CS8qIGNoZWNrIHZvaWQgKiAqLwotI2lmZGVmIEhBVkVfUFJPVE9UWVBFUwkJLyogY2hlY2sgcHRyIHRvIGZ1bmN0aW9uIHJldHVybmluZyB2b2lkICovCi10eXBlZGVmIHZvaWQgKCp2b2lkX2Z1bmMpIChpbnQgYSwgaW50IGIpOwotI2Vsc2UKLXR5cGVkZWYgdm9pZCAoKnZvaWRfZnVuYykgKCk7Ci0jZW5kaWYKLQotI2lmZGVmIEhBVkVfUFJPVE9UWVBFUwkJLyogY2hlY2sgdm9pZCBmdW5jdGlvbiByZXN1bHQgKi8KLXZvaWQgdGVzdDNmdW5jdGlvbiAodm9pZF9wdHIgYXJnMSwgdm9pZF9mdW5jIGFyZzIpCi0jZWxzZQotdm9pZCB0ZXN0M2Z1bmN0aW9uIChhcmcxLCBhcmcyKQotICAgICB2b2lkX3B0ciBhcmcxOwotICAgICB2b2lkX2Z1bmMgYXJnMjsKLSNlbmRpZgotewotICBjaGFyICogbG9jcHRyID0gKGNoYXIgKikgYXJnMTsgLyogY2hlY2sgY2FzdGluZyB0byBhbmQgZnJvbSB2b2lkICogKi8KLSAgYXJnMSA9ICh2b2lkICopIGxvY3B0cjsKLSAgKCphcmcyKSAoMSwgMik7CQkvKiBjaGVjayBjYWxsIG9mIGZjbiByZXR1cm5pbmcgdm9pZCAqLwotfQotI2VuZGlmCi0KLQotLyogTm93IHdlIHdhbnQgdG8gZmluZCBvdXQgaWYgeW91ciBjb21waWxlciBrbm93cyB3aGF0ICJjb25zdCIgbWVhbnMuCi0gKiBJZiB5b3UgZ2V0IGFuIGVycm9yIGhlcmUsIHVuZGVmaW5lIEhBVkVfQ09OU1QuCi0gKi8KLQotI2RlZmluZSBIQVZFX0NPTlNUCi0KLSNpZmRlZiBIQVZFX0NPTlNUCi1zdGF0aWMgY29uc3QgaW50IGNhcnJheVszXSA9IHsxLCAyLCAzfTsKLQotI2lmZGVmIEhBVkVfUFJPVE9UWVBFUwotaW50IHRlc3Q0ZnVuY3Rpb24gKGNvbnN0IGludCBhcmcxKQotI2Vsc2UKLWludCB0ZXN0NGZ1bmN0aW9uIChhcmcxKQotICAgICBjb25zdCBpbnQgYXJnMTsKLSNlbmRpZgotewotICByZXR1cm4gY2FycmF5W2FyZzFdOwotfQotI2VuZGlmCi0KLQotLyogSWYgeW91IGdldCBhbiBlcnJvciBvciB3YXJuaW5nIGFib3V0IHRoaXMgc3RydWN0dXJlIGRlZmluaXRpb24sCi0gKiBkZWZpbmUgSU5DT01QTEVURV9UWVBFU19CUk9LRU4uCi0gKi8KLQotI3VuZGVmIElOQ09NUExFVEVfVFlQRVNfQlJPS0VOCi0KLSNpZm5kZWYgSU5DT01QTEVURV9UWVBFU19CUk9LRU4KLXR5cGVkZWYgc3RydWN0IHVuZGVmaW5lZF9zdHJ1Y3R1cmUgKiB1bmRlZl9zdHJ1Y3RfcHRyOwotI2VuZGlmCi0KLQotLyogSWYgeW91IGdldCBhbiBlcnJvciBhYm91dCBkdXBsaWNhdGUgbmFtZXMsCi0gKiBkZWZpbmUgTkVFRF9TSE9SVF9FWFRFUk5BTF9OQU1FUy4KLSAqLwotCi0jdW5kZWYgTkVFRF9TSE9SVF9FWFRFUk5BTF9OQU1FUwotCi0jaWZuZGVmIE5FRURfU0hPUlRfRVhURVJOQUxfTkFNRVMKLQotaW50IHBvc3NpYmx5X2R1cGxpY2F0ZV9mdW5jdGlvbiAoKQotewotICByZXR1cm4gMDsKLX0KLQotaW50IHBvc3NpYmx5X2R1cGxpX2Z1bmN0aW9uICgpCi17Ci0gIHJldHVybiAxOwotfQotCi0jZW5kaWYKLQotCi0KLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqICBPSywgdGhhdCdzIGl0LiAgWW91IHNob3VsZCBub3QgaGF2ZSB0byBjaGFuZ2UgYW55dGhpbmcgYmV5b25kIHRoaXMKLSAqICBwb2ludCBpbiBvcmRlciB0byBjb21waWxlIGFuZCBleGVjdXRlIHRoaXMgcHJvZ3JhbS4gIChZb3UgbWlnaHQgZ2V0Ci0gKiAgc29tZSB3YXJuaW5ncywgYnV0IHlvdSBjYW4gaWdub3JlIHRoZW0uKQotICogIFdoZW4geW91IHJ1biB0aGUgcHJvZ3JhbSwgaXQgd2lsbCBtYWtlIGEgY291cGxlIG1vcmUgdGVzdHMgdGhhdCBpdAotICogIGNhbiBkbyBhdXRvbWF0aWNhbGx5LCBhbmQgdGhlbiBpdCB3aWxsIGNyZWF0ZSBqY29uZmlnLmggYW5kIHByaW50IG91dAotICogIGFueSBhZGRpdGlvbmFsIHN1Z2dlc3Rpb25zIGl0IGhhcy4KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqLwotCi0KLSNpZmRlZiBIQVZFX1BST1RPVFlQRVMKLWludCBpc19jaGFyX3NpZ25lZCAoaW50IGFyZykKLSNlbHNlCi1pbnQgaXNfY2hhcl9zaWduZWQgKGFyZykKLSAgICAgaW50IGFyZzsKLSNlbmRpZgotewotICBpZiAoYXJnID09IDE4OSkgewkJLyogZXhwZWN0ZWQgcmVzdWx0IGZvciB1bnNpZ25lZCBjaGFyICovCi0gICAgcmV0dXJuIDA7CQkJLyogdHlwZSBjaGFyIGlzIHVuc2lnbmVkICovCi0gIH0KLSAgZWxzZSBpZiAoYXJnICE9IC02NykgewkvKiBleHBlY3RlZCByZXN1bHQgZm9yIHNpZ25lZCBjaGFyICovCi0gICAgcHJpbnRmKCJIbW0sIGl0IHNlZW1zICdjaGFyJyBpcyBub3QgZWlnaHQgYml0cyB3aWRlIG9uIHlvdXIgbWFjaGluZS5cbiIpOwotICAgIHByaW50ZigiSSBmZWFyIHRoZSBKUEVHIHNvZnR3YXJlIHdpbGwgbm90IHdvcmsgYXQgYWxsLlxuXG4iKTsKLSAgfQotICByZXR1cm4gMTsJCQkvKiBhc3N1bWUgY2hhciBpcyBzaWduZWQgb3RoZXJ3aXNlICovCi19Ci0KLQotI2lmZGVmIEhBVkVfUFJPVE9UWVBFUwotaW50IGlzX3NoaWZ0aW5nX3NpZ25lZCAobG9uZyBhcmcpCi0jZWxzZQotaW50IGlzX3NoaWZ0aW5nX3NpZ25lZCAoYXJnKQotICAgICBsb25nIGFyZzsKLSNlbmRpZgotLyogU2VlIHdoZXRoZXIgcmlnaHQtc2hpZnQgb24gYSBsb25nIGlzIHNpZ25lZCBvciBub3QuICovCi17Ci0gIGxvbmcgcmVzID0gYXJnID4+IDQ7Ci0KLSAgaWYgKHJlcyA9PSAtMHg3RjdFODBDTCkgewkvKiBleHBlY3RlZCByZXN1bHQgZm9yIHNpZ25lZCBzaGlmdCAqLwotICAgIHJldHVybiAxOwkJCS8qIHJpZ2h0IHNoaWZ0IGlzIHNpZ25lZCAqLwotICB9Ci0gIC8qIHNlZSBpZiB1bnNpZ25lZC1zaGlmdCBoYWNrIHdpbGwgZml4IGl0LiAqLwotICAvKiB3ZSBjYW4ndCBqdXN0IHRlc3QgZXhhY3QgdmFsdWUgc2luY2UgaXQgZGVwZW5kcyBvbiB3aWR0aCBvZiBsb25nLi4uICovCi0gIHJlcyB8PSAofjBMKSA8PCAoMzItNCk7Ci0gIGlmIChyZXMgPT0gLTB4N0Y3RTgwQ0wpIHsJLyogZXhwZWN0ZWQgcmVzdWx0IG5vdz8gKi8KLSAgICByZXR1cm4gMDsJCQkvKiByaWdodCBzaGlmdCBpcyB1bnNpZ25lZCAqLwotICB9Ci0gIHByaW50ZigiUmlnaHQgc2hpZnQgaXNuJ3QgYWN0aW5nIGFzIEkgZXhwZWN0IGl0IHRvLlxuIik7Ci0gIHByaW50ZigiSSBmZWFyIHRoZSBKUEVHIHNvZnR3YXJlIHdpbGwgbm90IHdvcmsgYXQgYWxsLlxuXG4iKTsKLSAgcmV0dXJuIDA7CQkJLyogdHJ5IGl0IHdpdGggdW5zaWduZWQgYW55d2F5ICovCi19Ci0KLQotI2lmZGVmIEhBVkVfUFJPVE9UWVBFUwotaW50IG1haW4gKGludCBhcmdjLCBjaGFyICoqIGFyZ3YpCi0jZWxzZQotaW50IG1haW4gKGFyZ2MsIGFyZ3YpCi0gICAgIGludCBhcmdjOwotICAgICBjaGFyICoqIGFyZ3Y7Ci0jZW5kaWYKLXsKLSAgY2hhciBzaWduZWRfY2hhcl9jaGVjayA9IChjaGFyKSAoLTY3KTsKLSAgRklMRSAqb3V0ZmlsZTsKLQotICAvKiBBdHRlbXB0IHRvIHdyaXRlIGpjb25maWcuaCAqLwotICBpZiAoKG91dGZpbGUgPSBmb3BlbigiamNvbmZpZy5oIiwgInciKSkgPT0gTlVMTCkgewotICAgIHByaW50ZigiRmFpbGVkIHRvIHdyaXRlIGpjb25maWcuaFxuIik7Ci0gICAgcmV0dXJuIDE7Ci0gIH0KLQotICAvKiBXcml0ZSBvdXQgYWxsIHRoZSBpbmZvICovCi0gIGZwcmludGYob3V0ZmlsZSwgIi8qIGpjb25maWcuaCAtLS0gZ2VuZXJhdGVkIGJ5IGNrY29uZmlnLmMgKi9cbiIpOwotICBmcHJpbnRmKG91dGZpbGUsICIvKiBzZWUgamNvbmZpZy50eHQgZm9yIGV4cGxhbmF0aW9ucyAqL1xuXG4iKTsKLSNpZmRlZiBIQVZFX1BST1RPVFlQRVMKLSAgZnByaW50ZihvdXRmaWxlLCAiI2RlZmluZSBIQVZFX1BST1RPVFlQRVNcbiIpOwotI2Vsc2UKLSAgZnByaW50ZihvdXRmaWxlLCAiI3VuZGVmIEhBVkVfUFJPVE9UWVBFU1xuIik7Ci0jZW5kaWYKLSNpZmRlZiBIQVZFX1VOU0lHTkVEX0NIQVIKLSAgZnByaW50ZihvdXRmaWxlLCAiI2RlZmluZSBIQVZFX1VOU0lHTkVEX0NIQVJcbiIpOwotI2Vsc2UKLSAgZnByaW50ZihvdXRmaWxlLCAiI3VuZGVmIEhBVkVfVU5TSUdORURfQ0hBUlxuIik7Ci0jZW5kaWYKLSNpZmRlZiBIQVZFX1VOU0lHTkVEX1NIT1JUCi0gIGZwcmludGYob3V0ZmlsZSwgIiNkZWZpbmUgSEFWRV9VTlNJR05FRF9TSE9SVFxuIik7Ci0jZWxzZQotICBmcHJpbnRmKG91dGZpbGUsICIjdW5kZWYgSEFWRV9VTlNJR05FRF9TSE9SVFxuIik7Ci0jZW5kaWYKLSNpZmRlZiBIQVZFX1ZPSUQKLSAgZnByaW50ZihvdXRmaWxlLCAiLyogI2RlZmluZSB2b2lkIGNoYXIgKi9cbiIpOwotI2Vsc2UKLSAgZnByaW50ZihvdXRmaWxlLCAiI2RlZmluZSB2b2lkIGNoYXJcbiIpOwotI2VuZGlmCi0jaWZkZWYgSEFWRV9DT05TVAotICBmcHJpbnRmKG91dGZpbGUsICIvKiAjZGVmaW5lIGNvbnN0ICovXG4iKTsKLSNlbHNlCi0gIGZwcmludGYob3V0ZmlsZSwgIiNkZWZpbmUgY29uc3RcbiIpOwotI2VuZGlmCi0gIGlmIChpc19jaGFyX3NpZ25lZCgoaW50KSBzaWduZWRfY2hhcl9jaGVjaykpCi0gICAgZnByaW50ZihvdXRmaWxlLCAiI3VuZGVmIENIQVJfSVNfVU5TSUdORURcbiIpOwotICBlbHNlCi0gICAgZnByaW50ZihvdXRmaWxlLCAiI2RlZmluZSBDSEFSX0lTX1VOU0lHTkVEXG4iKTsKLSNpZmRlZiBIQVZFX1NURERFRl9ICi0gIGZwcmludGYob3V0ZmlsZSwgIiNkZWZpbmUgSEFWRV9TVERERUZfSFxuIik7Ci0jZWxzZQotICBmcHJpbnRmKG91dGZpbGUsICIjdW5kZWYgSEFWRV9TVERERUZfSFxuIik7Ci0jZW5kaWYKLSNpZmRlZiBIQVZFX1NURExJQl9ICi0gIGZwcmludGYob3V0ZmlsZSwgIiNkZWZpbmUgSEFWRV9TVERMSUJfSFxuIik7Ci0jZWxzZQotICBmcHJpbnRmKG91dGZpbGUsICIjdW5kZWYgSEFWRV9TVERMSUJfSFxuIik7Ci0jZW5kaWYKLSNpZmRlZiBORUVEX0JTRF9TVFJJTkdTCi0gIGZwcmludGYob3V0ZmlsZSwgIiNkZWZpbmUgTkVFRF9CU0RfU1RSSU5HU1xuIik7Ci0jZWxzZQotICBmcHJpbnRmKG91dGZpbGUsICIjdW5kZWYgTkVFRF9CU0RfU1RSSU5HU1xuIik7Ci0jZW5kaWYKLSNpZmRlZiBORUVEX1NZU19UWVBFU19ICi0gIGZwcmludGYob3V0ZmlsZSwgIiNkZWZpbmUgTkVFRF9TWVNfVFlQRVNfSFxuIik7Ci0jZWxzZQotICBmcHJpbnRmKG91dGZpbGUsICIjdW5kZWYgTkVFRF9TWVNfVFlQRVNfSFxuIik7Ci0jZW5kaWYKLSAgZnByaW50ZihvdXRmaWxlLCAiI3VuZGVmIE5FRURfRkFSX1BPSU5URVJTXG4iKTsKLSNpZmRlZiBORUVEX1NIT1JUX0VYVEVSTkFMX05BTUVTCi0gIGZwcmludGYob3V0ZmlsZSwgIiNkZWZpbmUgTkVFRF9TSE9SVF9FWFRFUk5BTF9OQU1FU1xuIik7Ci0jZWxzZQotICBmcHJpbnRmKG91dGZpbGUsICIjdW5kZWYgTkVFRF9TSE9SVF9FWFRFUk5BTF9OQU1FU1xuIik7Ci0jZW5kaWYKLSNpZmRlZiBJTkNPTVBMRVRFX1RZUEVTX0JST0tFTgotICBmcHJpbnRmKG91dGZpbGUsICIjZGVmaW5lIElOQ09NUExFVEVfVFlQRVNfQlJPS0VOXG4iKTsKLSNlbHNlCi0gIGZwcmludGYob3V0ZmlsZSwgIiN1bmRlZiBJTkNPTVBMRVRFX1RZUEVTX0JST0tFTlxuIik7Ci0jZW5kaWYKLSAgZnByaW50ZihvdXRmaWxlLCAiXG4jaWZkZWYgSlBFR19JTlRFUk5BTFNcblxuIik7Ci0gIGlmIChpc19zaGlmdGluZ19zaWduZWQoLTB4N0Y3RTgwQjFMKSkKLSAgICBmcHJpbnRmKG91dGZpbGUsICIjdW5kZWYgUklHSFRfU0hJRlRfSVNfVU5TSUdORURcbiIpOwotICBlbHNlCi0gICAgZnByaW50ZihvdXRmaWxlLCAiI2RlZmluZSBSSUdIVF9TSElGVF9JU19VTlNJR05FRFxuIik7Ci0gIGZwcmludGYob3V0ZmlsZSwgIlxuI2VuZGlmIC8qIEpQRUdfSU5URVJOQUxTICovXG4iKTsKLSAgZnByaW50ZihvdXRmaWxlLCAiXG4jaWZkZWYgSlBFR19DSlBFR19ESlBFR1xuXG4iKTsKLSAgZnByaW50ZihvdXRmaWxlLCAiI2RlZmluZSBCTVBfU1VQUE9SVEVECQkvKiBCTVAgaW1hZ2UgZmlsZSBmb3JtYXQgKi9cbiIpOwotICBmcHJpbnRmKG91dGZpbGUsICIjZGVmaW5lIEdJRl9TVVBQT1JURUQJCS8qIEdJRiBpbWFnZSBmaWxlIGZvcm1hdCAqL1xuIik7Ci0gIGZwcmludGYob3V0ZmlsZSwgIiNkZWZpbmUgUFBNX1NVUFBPUlRFRAkJLyogUEJNUExVUyBQUE0vUEdNIGltYWdlIGZpbGUgZm9ybWF0ICovXG4iKTsKLSAgZnByaW50ZihvdXRmaWxlLCAiI3VuZGVmIFJMRV9TVVBQT1JURUQJCS8qIFV0YWggUkxFIGltYWdlIGZpbGUgZm9ybWF0ICovXG4iKTsKLSAgZnByaW50ZihvdXRmaWxlLCAiI2RlZmluZSBUQVJHQV9TVVBQT1JURUQJCS8qIFRhcmdhIGltYWdlIGZpbGUgZm9ybWF0ICovXG5cbiIpOwotICBmcHJpbnRmKG91dGZpbGUsICIjdW5kZWYgVFdPX0ZJTEVfQ09NTUFORExJTkUJLyogWW91IG1heSBuZWVkIHRoaXMgb24gbm9uLVVuaXggc3lzdGVtcyAqL1xuIik7Ci0gIGZwcmludGYob3V0ZmlsZSwgIiN1bmRlZiBORUVEX1NJR05BTF9DQVRDSEVSCS8qIERlZmluZSB0aGlzIGlmIHlvdSB1c2Ugam1lbW5hbWUuYyAqL1xuIik7Ci0gIGZwcmludGYob3V0ZmlsZSwgIiN1bmRlZiBET05UX1VTRV9CX01PREVcbiIpOwotICBmcHJpbnRmKG91dGZpbGUsICIvKiAjZGVmaW5lIFBST0dSRVNTX1JFUE9SVCAqLwkvKiBvcHRpb25hbCAqL1xuIik7Ci0gIGZwcmludGYob3V0ZmlsZSwgIlxuI2VuZGlmIC8qIEpQRUdfQ0pQRUdfREpQRUcgKi9cbiIpOwotCi0gIC8qIENsb3NlIHRoZSBqY29uZmlnLmggZmlsZSAqLwotICBmY2xvc2Uob3V0ZmlsZSk7Ci0KLSAgLyogVXNlciByZXBvcnQgKi8KLSAgcHJpbnRmKCJDb25maWd1cmF0aW9uIGNoZWNrIGZvciBJbmRlcGVuZGVudCBKUEVHIEdyb3VwJ3Mgc29mdHdhcmUgZG9uZS5cbiIpOwotICBwcmludGYoIlxuSSBoYXZlIHdyaXR0ZW4gdGhlIGpjb25maWcuaCBmaWxlIGZvciB5b3UuXG5cbiIpOwotI2lmZGVmIEhBVkVfUFJPVE9UWVBFUwotICBwcmludGYoIllvdSBzaG91bGQgdXNlIG1ha2VmaWxlLmFuc2kgYXMgdGhlIHN0YXJ0aW5nIHBvaW50IGZvciB5b3VyIE1ha2VmaWxlLlxuIik7Ci0jZWxzZQotICBwcmludGYoIllvdSBzaG91bGQgdXNlIG1ha2VmaWxlLnVuaXggYXMgdGhlIHN0YXJ0aW5nIHBvaW50IGZvciB5b3VyIE1ha2VmaWxlLlxuIik7Ci0jZW5kaWYKLQotI2lmZGVmIE5FRURfU1BFQ0lBTF9JTkNMVURFCi0gIHByaW50ZigiXG5Zb3UnbGwgbmVlZCB0byBjaGFuZ2UgamNvbmZpZy5oIHRvIGluY2x1ZGUgdGhlIHN5c3RlbSBpbmNsdWRlIGZpbGVcbiIpOwotICBwcmludGYoInRoYXQgeW91IGZvdW5kIHR5cGUgc2l6ZV90IGluLCBvciBhZGQgYSBkaXJlY3QgZGVmaW5pdGlvbiBvZiB0eXBlXG4iKTsKLSAgcHJpbnRmKCJzaXplX3QgaWYgdGhhdCdzIHdoYXQgeW91IHVzZWQuICBKdXN0IGFkZCBpdCB0byB0aGUgZW5kLlxuIik7Ci0jZW5kaWYKLQotICByZXR1cm4gMDsKLX0KZGlmZiAtLWdpdCBhL2NtYWtlc2NyaXB0cy9nZXRkYXRlLmJhdCBiL2NtYWtlc2NyaXB0cy9nZXRkYXRlLmJhdApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iNDI1MWJiCi0tLSAvZGV2L251bGwKKysrIGIvY21ha2VzY3JpcHRzL2dldGRhdGUuYmF0CkBAIC0wLDAgKzEsMyBAQAorQGVjaG8gb2ZmCitmb3IgL2YgInRva2Vucz0xLTQgZW9sPS8gREVMSU1TPS8gIiAlJWkgaW4gKCdkYXRlIC90JykgZG8gc2V0IEJVSUxEPSUlbCUlaiUlaworZWNobyAlQlVJTEQlCmRpZmYgLS1naXQgYS9jb25maWcuZ3Vlc3MgYi9jb25maWcuZ3Vlc3MKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IGRjODRjNjguLjAwMDAwMDAKLS0tIGEvY29uZmlnLmd1ZXNzCisrKyAvZGV2L251bGwKQEAgLTEsMTUwMSArMCwwIEBACi0jISAvYmluL3NoCi0jIEF0dGVtcHQgdG8gZ3Vlc3MgYSBjYW5vbmljYWwgc3lzdGVtIG5hbWUuCi0jICAgQ29weXJpZ2h0IChDKSAxOTkyLCAxOTkzLCAxOTk0LCAxOTk1LCAxOTk2LCAxOTk3LCAxOTk4LCAxOTk5LAotIyAgIDIwMDAsIDIwMDEsIDIwMDIsIDIwMDMsIDIwMDQsIDIwMDUsIDIwMDYsIDIwMDcsIDIwMDgsIDIwMDkKLSMgICBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KLQotdGltZXN0YW1wPScyMDA5LTExLTIwJwotCi0jIFRoaXMgZmlsZSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0Ci0jIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5Ci0jIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCi0jIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0jCi0jIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQKLSMgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotIyBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQotIyBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0jCi0jIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCi0jIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCi0jIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCAtIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BCi0jIDAyMTEwLTEzMDEsIFVTQS4KLSMKLSMgQXMgYSBzcGVjaWFsIGV4Y2VwdGlvbiB0byB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UsIGlmIHlvdQotIyBkaXN0cmlidXRlIHRoaXMgZmlsZSBhcyBwYXJ0IG9mIGEgcHJvZ3JhbSB0aGF0IGNvbnRhaW5zIGEKLSMgY29uZmlndXJhdGlvbiBzY3JpcHQgZ2VuZXJhdGVkIGJ5IEF1dG9jb25mLCB5b3UgbWF5IGluY2x1ZGUgaXQgdW5kZXIKLSMgdGhlIHNhbWUgZGlzdHJpYnV0aW9uIHRlcm1zIHRoYXQgeW91IHVzZSBmb3IgdGhlIHJlc3Qgb2YgdGhhdCBwcm9ncmFtLgotCi0KLSMgT3JpZ2luYWxseSB3cml0dGVuIGJ5IFBlciBCb3RobmVyLiAgUGxlYXNlIHNlbmQgcGF0Y2hlcyAoY29udGV4dAotIyBkaWZmIGZvcm1hdCkgdG8gPGNvbmZpZy1wYXRjaGVzQGdudS5vcmc+IGFuZCBpbmNsdWRlIGEgQ2hhbmdlTG9nCi0jIGVudHJ5LgotIwotIyBUaGlzIHNjcmlwdCBhdHRlbXB0cyB0byBndWVzcyBhIGNhbm9uaWNhbCBzeXN0ZW0gbmFtZSBzaW1pbGFyIHRvCi0jIGNvbmZpZy5zdWIuICBJZiBpdCBzdWNjZWVkcywgaXQgcHJpbnRzIHRoZSBzeXN0ZW0gbmFtZSBvbiBzdGRvdXQsIGFuZAotIyBleGl0cyB3aXRoIDAuICBPdGhlcndpc2UsIGl0IGV4aXRzIHdpdGggMS4KLSMKLSMgWW91IGNhbiBnZXQgdGhlIGxhdGVzdCB2ZXJzaW9uIG9mIHRoaXMgc2NyaXB0IGZyb206Ci0jIGh0dHA6Ly9naXQuc2F2YW5uYWguZ251Lm9yZy9naXR3ZWIvP3A9Y29uZmlnLmdpdDthPWJsb2JfcGxhaW47Zj1jb25maWcuZ3Vlc3M7aGI9SEVBRAotCi1tZT1gZWNobyAiJDAiIHwgc2VkIC1lICdzLC4qLywsJ2AKLQotdXNhZ2U9IlwKLVVzYWdlOiAkMCBbT1BUSU9OXQotCi1PdXRwdXQgdGhlIGNvbmZpZ3VyYXRpb24gbmFtZSBvZiB0aGUgc3lzdGVtIFxgJG1lJyBpcyBydW4gb24uCi0KLU9wZXJhdGlvbiBtb2RlczoKLSAgLWgsIC0taGVscCAgICAgICAgIHByaW50IHRoaXMgaGVscCwgdGhlbiBleGl0Ci0gIC10LCAtLXRpbWUtc3RhbXAgICBwcmludCBkYXRlIG9mIGxhc3QgbW9kaWZpY2F0aW9uLCB0aGVuIGV4aXQKLSAgLXYsIC0tdmVyc2lvbiAgICAgIHByaW50IHZlcnNpb24gbnVtYmVyLCB0aGVuIGV4aXQKLQotUmVwb3J0IGJ1Z3MgYW5kIHBhdGNoZXMgdG8gPGNvbmZpZy1wYXRjaGVzQGdudS5vcmc+LiIKLQotdmVyc2lvbj0iXAotR05VIGNvbmZpZy5ndWVzcyAoJHRpbWVzdGFtcCkKLQotT3JpZ2luYWxseSB3cml0dGVuIGJ5IFBlciBCb3RobmVyLgotQ29weXJpZ2h0IChDKSAxOTkyLCAxOTkzLCAxOTk0LCAxOTk1LCAxOTk2LCAxOTk3LCAxOTk4LCAxOTk5LCAyMDAwLCAyMDAxLAotMjAwMiwgMjAwMywgMjAwNCwgMjAwNSwgMjAwNiwgMjAwNywgMjAwOCBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KLQotVGhpcyBpcyBmcmVlIHNvZnR3YXJlOyBzZWUgdGhlIHNvdXJjZSBmb3IgY29weWluZyBjb25kaXRpb25zLiAgVGhlcmUgaXMgTk8KLXdhcnJhbnR5OyBub3QgZXZlbiBmb3IgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiIKLQotaGVscD0iCi1UcnkgXGAkbWUgLS1oZWxwJyBmb3IgbW9yZSBpbmZvcm1hdGlvbi4iCi0KLSMgUGFyc2UgY29tbWFuZCBsaW5lCi13aGlsZSB0ZXN0ICQjIC1ndCAwIDsgZG8KLSAgY2FzZSAkMSBpbgotICAgIC0tdGltZS1zdGFtcCB8IC0tdGltZSogfCAtdCApCi0gICAgICAgZWNobyAiJHRpbWVzdGFtcCIgOyBleGl0IDs7Ci0gICAgLS12ZXJzaW9uIHwgLXYgKQotICAgICAgIGVjaG8gIiR2ZXJzaW9uIiA7IGV4aXQgOzsKLSAgICAtLWhlbHAgfCAtLWgqIHwgLWggKQotICAgICAgIGVjaG8gIiR1c2FnZSI7IGV4aXQgOzsKLSAgICAtLSApICAgICAjIFN0b3Agb3B0aW9uIHByb2Nlc3NpbmcKLSAgICAgICBzaGlmdDsgYnJlYWsgOzsKLSAgICAtICkJIyBVc2Ugc3RkaW4gYXMgaW5wdXQuCi0gICAgICAgYnJlYWsgOzsKLSAgICAtKiApCi0gICAgICAgZWNobyAiJG1lOiBpbnZhbGlkIG9wdGlvbiAkMSRoZWxwIiA+JjIKLSAgICAgICBleGl0IDEgOzsKLSAgICAqICkKLSAgICAgICBicmVhayA7OwotICBlc2FjCi1kb25lCi0KLWlmIHRlc3QgJCMgIT0gMDsgdGhlbgotICBlY2hvICIkbWU6IHRvbyBtYW55IGFyZ3VtZW50cyRoZWxwIiA+JjIKLSAgZXhpdCAxCi1maQotCi10cmFwICdleGl0IDEnIDEgMiAxNQotCi0jIENDX0ZPUl9CVUlMRCAtLSBjb21waWxlciB1c2VkIGJ5IHRoaXMgc2NyaXB0LiBOb3RlIHRoYXQgdGhlIHVzZSBvZiBhCi0jIGNvbXBpbGVyIHRvIGFpZCBpbiBzeXN0ZW0gZGV0ZWN0aW9uIGlzIGRpc2NvdXJhZ2VkIGFzIGl0IHJlcXVpcmVzCi0jIHRlbXBvcmFyeSBmaWxlcyB0byBiZSBjcmVhdGVkIGFuZCwgYXMgeW91IGNhbiBzZWUgYmVsb3csIGl0IGlzIGEKLSMgaGVhZGFjaGUgdG8gZGVhbCB3aXRoIGluIGEgcG9ydGFibGUgZmFzaGlvbi4KLQotIyBIaXN0b3JpY2FsbHksIGBDQ19GT1JfQlVJTEQnIHVzZWQgdG8gYmUgbmFtZWQgYEhPU1RfQ0MnLiBXZSBzdGlsbAotIyB1c2UgYEhPU1RfQ0MnIGlmIGRlZmluZWQsIGJ1dCBpdCBpcyBkZXByZWNhdGVkLgotCi0jIFBvcnRhYmxlIHRtcCBkaXJlY3RvcnkgY3JlYXRpb24gaW5zcGlyZWQgYnkgdGhlIEF1dG9jb25mIHRlYW0uCi0KLXNldF9jY19mb3JfYnVpbGQ9JwotdHJhcCAiZXhpdGNvZGU9XCQ/OyAocm0gLWYgXCR0bXBmaWxlcyAyPi9kZXYvbnVsbDsgcm1kaXIgXCR0bXAgMj4vZGV2L251bGwpICYmIGV4aXQgXCRleGl0Y29kZSIgMCA7Ci10cmFwICJybSAtZiBcJHRtcGZpbGVzIDI+L2Rldi9udWxsOyBybWRpciBcJHRtcCAyPi9kZXYvbnVsbDsgZXhpdCAxIiAxIDIgMTMgMTUgOwotOiAke1RNUERJUj0vdG1wfSA7Ci0geyB0bXA9YCh1bWFzayAwNzcgJiYgbWt0ZW1wIC1kICIkVE1QRElSL2NnWFhYWFhYIikgMj4vZGV2L251bGxgICYmIHRlc3QgLW4gIiR0bXAiICYmIHRlc3QgLWQgIiR0bXAiIDsgfSB8fAotIHsgdGVzdCAtbiAiJFJBTkRPTSIgJiYgdG1wPSRUTVBESVIvY2ckJC0kUkFORE9NICYmICh1bWFzayAwNzcgJiYgbWtkaXIgJHRtcCkgOyB9IHx8Ci0geyB0bXA9JFRNUERJUi9jZy0kJCAmJiAodW1hc2sgMDc3ICYmIG1rZGlyICR0bXApICYmIGVjaG8gIldhcm5pbmc6IGNyZWF0aW5nIGluc2VjdXJlIHRlbXAgZGlyZWN0b3J5IiA+JjIgOyB9IHx8Ci0geyBlY2hvICIkbWU6IGNhbm5vdCBjcmVhdGUgYSB0ZW1wb3JhcnkgZGlyZWN0b3J5IGluICRUTVBESVIiID4mMiA7IGV4aXQgMSA7IH0gOwotZHVtbXk9JHRtcC9kdW1teSA7Ci10bXBmaWxlcz0iJGR1bW15LmMgJGR1bW15Lm8gJGR1bW15LnJlbCAkZHVtbXkiIDsKLWNhc2UgJENDX0ZPUl9CVUlMRCwkSE9TVF9DQywkQ0MgaW4KLSAsLCkgICAgZWNobyAiaW50IHg7IiA+ICRkdW1teS5jIDsKLQlmb3IgYyBpbiBjYyBnY2MgYzg5IGM5OSA7IGRvCi0JICBpZiAoJGMgLWMgLW8gJGR1bW15Lm8gJGR1bW15LmMpID4vZGV2L251bGwgMj4mMSA7IHRoZW4KLQkgICAgIENDX0ZPUl9CVUlMRD0iJGMiOyBicmVhayA7Ci0JICBmaSA7Ci0JZG9uZSA7Ci0JaWYgdGVzdCB4IiRDQ19GT1JfQlVJTEQiID0geCA7IHRoZW4KLQkgIENDX0ZPUl9CVUlMRD1ub19jb21waWxlcl9mb3VuZCA7Ci0JZmkKLQk7OwotICwsKikgICBDQ19GT1JfQlVJTEQ9JENDIDs7Ci0gLCosKikgIENDX0ZPUl9CVUlMRD0kSE9TVF9DQyA7OwotZXNhYyA7IHNldF9jY19mb3JfYnVpbGQ9IDsnCi0KLSMgVGhpcyBpcyBuZWVkZWQgdG8gZmluZCB1bmFtZSBvbiBhIFB5cmFtaWQgT1N4IHdoZW4gcnVuIGluIHRoZSBCU0QgdW5pdmVyc2UuCi0jIChnaGF6aUBub2MucnV0Z2Vycy5lZHUgMTk5NC0wOC0yNCkKLWlmICh0ZXN0IC1mIC8uYXR0YmluL3VuYW1lKSA+L2Rldi9udWxsIDI+JjEgOyB0aGVuCi0JUEFUSD0kUEFUSDovLmF0dGJpbiA7IGV4cG9ydCBQQVRICi1maQotCi1VTkFNRV9NQUNISU5FPWAodW5hbWUgLW0pIDI+L2Rldi9udWxsYCB8fCBVTkFNRV9NQUNISU5FPXVua25vd24KLVVOQU1FX1JFTEVBU0U9YCh1bmFtZSAtcikgMj4vZGV2L251bGxgIHx8IFVOQU1FX1JFTEVBU0U9dW5rbm93bgotVU5BTUVfU1lTVEVNPWAodW5hbWUgLXMpIDI+L2Rldi9udWxsYCAgfHwgVU5BTUVfU1lTVEVNPXVua25vd24KLVVOQU1FX1ZFUlNJT049YCh1bmFtZSAtdikgMj4vZGV2L251bGxgIHx8IFVOQU1FX1ZFUlNJT049dW5rbm93bgotCi0jIE5vdGU6IG9yZGVyIGlzIHNpZ25pZmljYW50IC0gdGhlIGNhc2UgYnJhbmNoZXMgYXJlIG5vdCBleGNsdXNpdmUuCi0KLWNhc2UgIiR7VU5BTUVfTUFDSElORX06JHtVTkFNRV9TWVNURU19OiR7VU5BTUVfUkVMRUFTRX06JHtVTkFNRV9WRVJTSU9OfSIgaW4KLSAgICAqOk5ldEJTRDoqOiopCi0JIyBOZXRCU0QgKG5ic2QpIHRhcmdldHMgc2hvdWxkICh3aGVyZSBhcHBsaWNhYmxlKSBtYXRjaCBvbmUgb3IKLQkjIG1vcmUgb2YgdGhlIHR1cHBsZXM6ICotKi1uZXRic2RlbGYqLCAqLSotbmV0YnNkYW91dCosCi0JIyAqLSotbmV0YnNkZWNvZmYqIGFuZCAqLSotbmV0YnNkKi4gIEZvciB0YXJnZXRzIHRoYXQgcmVjZW50bHkKLQkjIHN3aXRjaGVkIHRvIEVMRiwgKi0qLW5ldGJzZCogd291bGQgc2VsZWN0IHRoZSBvbGQKLQkjIG9iamVjdCBmaWxlIGZvcm1hdC4gIFRoaXMgcHJvdmlkZXMgYm90aCBmb3J3YXJkCi0JIyBjb21wYXRpYmlsaXR5IGFuZCBhIGNvbnNpc3RlbnQgbWVjaGFuaXNtIGZvciBzZWxlY3RpbmcgdGhlCi0JIyBvYmplY3QgZmlsZSBmb3JtYXQuCi0JIwotCSMgTm90ZTogTmV0QlNEIGRvZXNuJ3QgcGFydGljdWxhcmx5IGNhcmUgYWJvdXQgdGhlIHZlbmRvcgotCSMgcG9ydGlvbiBvZiB0aGUgbmFtZS4gIFdlIGFsd2F5cyBzZXQgaXQgdG8gInVua25vd24iLgotCXN5c2N0bD0ic3lzY3RsIC1uIGh3Lm1hY2hpbmVfYXJjaCIKLQlVTkFNRV9NQUNISU5FX0FSQ0g9YCgvc2Jpbi8kc3lzY3RsIDI+L2Rldi9udWxsIHx8IFwKLQkgICAgL3Vzci9zYmluLyRzeXNjdGwgMj4vZGV2L251bGwgfHwgZWNobyB1bmtub3duKWAKLQljYXNlICIke1VOQU1FX01BQ0hJTkVfQVJDSH0iIGluCi0JICAgIGFybWViKSBtYWNoaW5lPWFybWViLXVua25vd24gOzsKLQkgICAgYXJtKikgbWFjaGluZT1hcm0tdW5rbm93biA7OwotCSAgICBzaDNlbCkgbWFjaGluZT1zaGwtdW5rbm93biA7OwotCSAgICBzaDNlYikgbWFjaGluZT1zaC11bmtub3duIDs7Ci0JICAgIHNoNWVsKSBtYWNoaW5lPXNoNWxlLXVua25vd24gOzsKLQkgICAgKikgbWFjaGluZT0ke1VOQU1FX01BQ0hJTkVfQVJDSH0tdW5rbm93biA7OwotCWVzYWMKLQkjIFRoZSBPcGVyYXRpbmcgU3lzdGVtIGluY2x1ZGluZyBvYmplY3QgZm9ybWF0LCBpZiBpdCBoYXMgc3dpdGNoZWQKLQkjIHRvIEVMRiByZWNlbnRseSwgb3Igd2lsbCBpbiB0aGUgZnV0dXJlLgotCWNhc2UgIiR7VU5BTUVfTUFDSElORV9BUkNIfSIgaW4KLQkgICAgYXJtKnxpMzg2fG02OGt8bnMzMmt8c2gzKnxzcGFyY3x2YXgpCi0JCWV2YWwgJHNldF9jY19mb3JfYnVpbGQKLQkJaWYgZWNobyBfX0VMRl9fIHwgJENDX0ZPUl9CVUlMRCAtRSAtIDI+L2Rldi9udWxsIFwKLQkJCXwgZ3JlcCAtcSBfX0VMRl9fCi0JCXRoZW4KLQkJICAgICMgT25jZSBhbGwgdXRpbGl0aWVzIGNhbiBiZSBFQ09GRiAobmV0YnNkZWNvZmYpIG9yIGEub3V0IChuZXRic2Rhb3V0KS4KLQkJICAgICMgUmV0dXJuIG5ldGJzZCBmb3IgZWl0aGVyLiAgRklYPwotCQkgICAgb3M9bmV0YnNkCi0JCWVsc2UKLQkJICAgIG9zPW5ldGJzZGVsZgotCQlmaQotCQk7OwotCSAgICAqKQotCSAgICAgICAgb3M9bmV0YnNkCi0JCTs7Ci0JZXNhYwotCSMgVGhlIE9TIHJlbGVhc2UKLQkjIERlYmlhbiBHTlUvTmV0QlNEIG1hY2hpbmVzIGhhdmUgYSBkaWZmZXJlbnQgdXNlcmxhbmQsIGFuZAotCSMgdGh1cywgbmVlZCBhIGRpc3RpbmN0IHRyaXBsZXQuIEhvd2V2ZXIsIHRoZXkgZG8gbm90IG5lZWQKLQkjIGtlcm5lbCB2ZXJzaW9uIGluZm9ybWF0aW9uLCBzbyBpdCBjYW4gYmUgcmVwbGFjZWQgd2l0aCBhCi0JIyBzdWl0YWJsZSB0YWcsIGluIHRoZSBzdHlsZSBvZiBsaW51eC1nbnUuCi0JY2FzZSAiJHtVTkFNRV9WRVJTSU9OfSIgaW4KLQkgICAgRGViaWFuKikKLQkJcmVsZWFzZT0nLWdudScKLQkJOzsKLQkgICAgKikKLQkJcmVsZWFzZT1gZWNobyAke1VOQU1FX1JFTEVBU0V9fHNlZCAtZSAncy9bLV9dLiovXC4vJ2AKLQkJOzsKLQllc2FjCi0JIyBTaW5jZSBDUFVfVFlQRS1NQU5VRkFDVFVSRVItS0VSTkVMLU9QRVJBVElOR19TWVNURU06Ci0JIyBjb250YWlucyByZWR1bmRhbnQgaW5mb3JtYXRpb24sIHRoZSBzaG9ydGVyIGZvcm06Ci0JIyBDUFVfVFlQRS1NQU5VRkFDVFVSRVItT1BFUkFUSU5HX1NZU1RFTSBpcyB1c2VkLgotCWVjaG8gIiR7bWFjaGluZX0tJHtvc30ke3JlbGVhc2V9IgotCWV4aXQgOzsKLSAgICAqOk9wZW5CU0Q6KjoqKQotCVVOQU1FX01BQ0hJTkVfQVJDSD1gYXJjaCB8IHNlZCAncy9PcGVuQlNELi8vJ2AKLQllY2hvICR7VU5BTUVfTUFDSElORV9BUkNIfS11bmtub3duLW9wZW5ic2Qke1VOQU1FX1JFTEVBU0V9Ci0JZXhpdCA7OwotICAgICo6ZWtrb0JTRDoqOiopCi0JZWNobyAke1VOQU1FX01BQ0hJTkV9LXVua25vd24tZWtrb2JzZCR7VU5BTUVfUkVMRUFTRX0KLQlleGl0IDs7Ci0gICAgKjpTb2xpZEJTRDoqOiopCi0JZWNobyAke1VOQU1FX01BQ0hJTkV9LXVua25vd24tc29saWRic2Qke1VOQU1FX1JFTEVBU0V9Ci0JZXhpdCA7OwotICAgIG1hY3BwYzpNaXJCU0Q6KjoqKQotCWVjaG8gcG93ZXJwYy11bmtub3duLW1pcmJzZCR7VU5BTUVfUkVMRUFTRX0KLQlleGl0IDs7Ci0gICAgKjpNaXJCU0Q6KjoqKQotCWVjaG8gJHtVTkFNRV9NQUNISU5FfS11bmtub3duLW1pcmJzZCR7VU5BTUVfUkVMRUFTRX0KLQlleGl0IDs7Ci0gICAgYWxwaGE6T1NGMToqOiopCi0JY2FzZSAkVU5BTUVfUkVMRUFTRSBpbgotCSo0LjApCi0JCVVOQU1FX1JFTEVBU0U9YC91c3Ivc2Jpbi9zaXplciAtdiB8IGF3ayAne3ByaW50ICQzfSdgCi0JCTs7Ci0JKjUuKikKLQkgICAgICAgIFVOQU1FX1JFTEVBU0U9YC91c3Ivc2Jpbi9zaXplciAtdiB8IGF3ayAne3ByaW50ICQ0fSdgCi0JCTs7Ci0JZXNhYwotCSMgQWNjb3JkaW5nIHRvIENvbXBhcSwgL3Vzci9zYmluL3BzcmluZm8gaGFzIGJlZW4gYXZhaWxhYmxlIG9uCi0JIyBPU0YvMSBhbmQgVHJ1NjQgc3lzdGVtcyBwcm9kdWNlZCBzaW5jZSAxOTk1LiAgSSBob3BlIHRoYXQKLQkjIGNvdmVycyBtb3N0IHN5c3RlbXMgcnVubmluZyB0b2RheS4gIFRoaXMgY29kZSBwaXBlcyB0aGUgQ1BVCi0JIyB0eXBlcyB0aHJvdWdoIGhlYWQgLW4gMSwgc28gd2Ugb25seSBkZXRlY3QgdGhlIHR5cGUgb2YgQ1BVIDAuCi0JQUxQSEFfQ1BVX1RZUEU9YC91c3Ivc2Jpbi9wc3JpbmZvIC12IHwgc2VkIC1uIC1lICdzL14gIFRoZSBhbHBoYSBcKC4qXCkgcHJvY2Vzc29yLiokL1wxL3AnIHwgaGVhZCAtbiAxYAotCWNhc2UgIiRBTFBIQV9DUFVfVFlQRSIgaW4KLQkgICAgIkVWNCAoMjEwNjQpIikKLQkJVU5BTUVfTUFDSElORT0iYWxwaGEiIDs7Ci0JICAgICJFVjQuNSAoMjEwNjQpIikKLQkJVU5BTUVfTUFDSElORT0iYWxwaGEiIDs7Ci0JICAgICJMQ0E0ICgyMTA2Ni8yMTA2OCkiKQotCQlVTkFNRV9NQUNISU5FPSJhbHBoYSIgOzsKLQkgICAgIkVWNSAoMjExNjQpIikKLQkJVU5BTUVfTUFDSElORT0iYWxwaGFldjUiIDs7Ci0JICAgICJFVjUuNiAoMjExNjRBKSIpCi0JCVVOQU1FX01BQ0hJTkU9ImFscGhhZXY1NiIgOzsKLQkgICAgIkVWNS42ICgyMTE2NFBDKSIpCi0JCVVOQU1FX01BQ0hJTkU9ImFscGhhcGNhNTYiIDs7Ci0JICAgICJFVjUuNyAoMjExNjRQQykiKQotCQlVTkFNRV9NQUNISU5FPSJhbHBoYXBjYTU3IiA7OwotCSAgICAiRVY2ICgyMTI2NCkiKQotCQlVTkFNRV9NQUNISU5FPSJhbHBoYWV2NiIgOzsKLQkgICAgIkVWNi43ICgyMTI2NEEpIikKLQkJVU5BTUVfTUFDSElORT0iYWxwaGFldjY3IiA7OwotCSAgICAiRVY2LjhDQiAoMjEyNjRDKSIpCi0JCVVOQU1FX01BQ0hJTkU9ImFscGhhZXY2OCIgOzsKLQkgICAgIkVWNi44QUwgKDIxMjY0QikiKQotCQlVTkFNRV9NQUNISU5FPSJhbHBoYWV2NjgiIDs7Ci0JICAgICJFVjYuOENYICgyMTI2NEQpIikKLQkJVU5BTUVfTUFDSElORT0iYWxwaGFldjY4IiA7OwotCSAgICAiRVY2LjlBICgyMTI2NC9FVjY5QSkiKQotCQlVTkFNRV9NQUNISU5FPSJhbHBoYWV2NjkiIDs7Ci0JICAgICJFVjcgKDIxMzY0KSIpCi0JCVVOQU1FX01BQ0hJTkU9ImFscGhhZXY3IiA7OwotCSAgICAiRVY3LjkgKDIxMzY0QSkiKQotCQlVTkFNRV9NQUNISU5FPSJhbHBoYWV2NzkiIDs7Ci0JZXNhYwotCSMgQSBQbi5uIHZlcnNpb24gaXMgYSBwYXRjaGVkIHZlcnNpb24uCi0JIyBBIFZuLm4gdmVyc2lvbiBpcyBhIHJlbGVhc2VkIHZlcnNpb24uCi0JIyBBIFRuLm4gdmVyc2lvbiBpcyBhIHJlbGVhc2VkIGZpZWxkIHRlc3QgdmVyc2lvbi4KLQkjIEEgWG4ubiB2ZXJzaW9uIGlzIGFuIHVucmVsZWFzZWQgZXhwZXJpbWVudGFsIGJhc2VsZXZlbC4KLQkjIDEuMiB1c2VzICIxLjIiIGZvciB1bmFtZSAtci4KLQllY2hvICR7VU5BTUVfTUFDSElORX0tZGVjLW9zZmBlY2hvICR7VU5BTUVfUkVMRUFTRX0gfCBzZWQgLWUgJ3MvXltQVlRYXS8vJyB8IHRyICdBQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWicgJ2FiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6J2AKLQlleGl0IDs7Ci0gICAgQWxwaGFcICo6V2luZG93c19OVCo6KikKLQkjIEhvdyBkbyB3ZSBrbm93IGl0J3MgSW50ZXJpeCByYXRoZXIgdGhhbiB0aGUgZ2VuZXJpYyBQT1NJWCBzdWJzeXN0ZW0/Ci0JIyBTaG91bGQgd2UgY2hhbmdlIFVOQU1FX01BQ0hJTkUgYmFzZWQgb24gdGhlIG91dHB1dCBvZiB1bmFtZSBpbnN0ZWFkCi0JIyBvZiB0aGUgc3BlY2lmaWMgQWxwaGEgbW9kZWw/Ci0JZWNobyBhbHBoYS1wYy1pbnRlcml4Ci0JZXhpdCA7OwotICAgIDIxMDY0OldpbmRvd3NfTlQ6NTA6MykKLQllY2hvIGFscGhhLWRlYy13aW5udDMuNQotCWV4aXQgOzsKLSAgICBBbWlnYSo6VU5JWF9TeXN0ZW1fVjo0LjA6KikKLQllY2hvIG02OGstdW5rbm93bi1zeXN2NAotCWV4aXQgOzsKLSAgICAqOltBYV1taWdhW09vXVtTc106KjoqKQotCWVjaG8gJHtVTkFNRV9NQUNISU5FfS11bmtub3duLWFtaWdhb3MKLQlleGl0IDs7Ci0gICAgKjpbTW1db3JwaFtPb11bU3NdOio6KikKLQllY2hvICR7VU5BTUVfTUFDSElORX0tdW5rbm93bi1tb3JwaG9zCi0JZXhpdCA7OwotICAgICo6T1MvMzkwOio6KikKLQllY2hvIGkzNzAtaWJtLW9wZW5lZGl0aW9uCi0JZXhpdCA7OwotICAgICo6ei9WTToqOiopCi0JZWNobyBzMzkwLWlibS16dm1vZQotCWV4aXQgOzsKLSAgICAqOk9TNDAwOio6KikKLSAgICAgICAgZWNobyBwb3dlcnBjLWlibS1vczQwMAotCWV4aXQgOzsKLSAgICBhcm06UklTQyo6MS5bMDEyXSo6Knxhcm06cmlzY2l4OjEuWzAxMl0qOiopCi0JZWNobyBhcm0tYWNvcm4tcmlzY2l4JHtVTkFNRV9SRUxFQVNFfQotCWV4aXQgOzsKLSAgICBhcm06cmlzY29zOio6Knxhcm06UklTQ09TOio6KikKLQllY2hvIGFybS11bmtub3duLXJpc2NvcwotCWV4aXQgOzsKLSAgICBTUjI/MDE6SEktVVgvTVBQOio6KiB8IFNSODAwMDpISS1VWC9NUFA6KjoqKQotCWVjaG8gaHBwYTEuMS1oaXRhY2hpLWhpdXhtcHAKLQlleGl0IDs7Ci0gICAgUHlyYW1pZCo6T1N4KjoqOiogfCBNSVMqOk9TeCo6KjoqIHwgTUlTKjpTTVBfREMtT1N4KjoqOiopCi0JIyBha2VlQHdwZGlzMDMud3BhZmIuYWYubWlsIChFYXJsZSBGLiBBa2UpIGNvbnRyaWJ1dGVkIE1JUyBhbmQgTklMRS4KLQlpZiB0ZXN0ICJgKC9iaW4vdW5pdmVyc2UpIDI+L2Rldi9udWxsYCIgPSBhdHQgOyB0aGVuCi0JCWVjaG8gcHlyYW1pZC1weXJhbWlkLXN5c3YzCi0JZWxzZQotCQllY2hvIHB5cmFtaWQtcHlyYW1pZC1ic2QKLQlmaQotCWV4aXQgOzsKLSAgICBOSUxFKjoqOio6ZGNvc3gpCi0JZWNobyBweXJhbWlkLXB5cmFtaWQtc3ZyNAotCWV4aXQgOzsKLSAgICBEUlM/NjAwMDp1bml4OjQuMDo2KikKLQllY2hvIHNwYXJjLWljbC1ueDYKLQlleGl0IDs7Ci0gICAgRFJTPzYwMDA6VU5JWF9TVjo0LjIqOjcqIHwgRFJTPzYwMDA6aXNpczo0LjIqOjcqKQotCWNhc2UgYC91c3IvYmluL3VuYW1lIC1wYCBpbgotCSAgICBzcGFyYykgZWNobyBzcGFyYy1pY2wtbng3OyBleGl0IDs7Ci0JZXNhYyA7OwotICAgIHMzOTB4OlN1bk9TOio6KikKLQllY2hvICR7VU5BTUVfTUFDSElORX0taWJtLXNvbGFyaXMyYGVjaG8gJHtVTkFNRV9SRUxFQVNFfXxzZWQgLWUgJ3MvW14uXSovLydgCi0JZXhpdCA7OwotICAgIHN1bjRIOlN1bk9TOjUuKjoqKQotCWVjaG8gc3BhcmMtaGFsLXNvbGFyaXMyYGVjaG8gJHtVTkFNRV9SRUxFQVNFfXxzZWQgLWUgJ3MvW14uXSovLydgCi0JZXhpdCA7OwotICAgIHN1bjQqOlN1bk9TOjUuKjoqIHwgdGFkcG9sZSo6U3VuT1M6NS4qOiopCi0JZWNobyBzcGFyYy1zdW4tc29sYXJpczJgZWNobyAke1VOQU1FX1JFTEVBU0V9fHNlZCAtZSAncy9bXi5dKi8vJ2AKLQlleGl0IDs7Ci0gICAgaTg2cGM6QXVyb3JhVVg6NS4qOiogfCBpODZ4ZW46QXVyb3JhVVg6NS4qOiopCi0JZWNobyBpMzg2LXBjLWF1cm9yYXV4JHtVTkFNRV9SRUxFQVNFfQotCWV4aXQgOzsKLSAgICBpODZwYzpTdW5PUzo1Lio6KiB8IGk4NnhlbjpTdW5PUzo1Lio6KikKLQlldmFsICRzZXRfY2NfZm9yX2J1aWxkCi0JU1VOX0FSQ0g9ImkzODYiCi0JIyBJZiB0aGVyZSBpcyBhIGNvbXBpbGVyLCBzZWUgaWYgaXQgaXMgY29uZmlndXJlZCBmb3IgNjQtYml0IG9iamVjdHMuCi0JIyBOb3RlIHRoYXQgdGhlIFN1biBjYyBkb2VzIG5vdCB0dXJuIF9fTFA2NF9fIGludG8gMSBsaWtlIGdjYyBkb2VzLgotCSMgVGhpcyB0ZXN0IHdvcmtzIGZvciBib3RoIGNvbXBpbGVycy4KLQlpZiBbICIkQ0NfRk9SX0JVSUxEIiAhPSAnbm9fY29tcGlsZXJfZm91bmQnIF07IHRoZW4KLQkgICAgaWYgKGVjaG8gJyNpZmRlZiBfX2FtZDY0JzsgZWNobyBJU182NEJJVF9BUkNIOyBlY2hvICcjZW5kaWYnKSB8IFwKLQkJKENDT1BUUz0gJENDX0ZPUl9CVUlMRCAtRSAtIDI+L2Rldi9udWxsKSB8IFwKLQkJZ3JlcCBJU182NEJJVF9BUkNIID4vZGV2L251bGwKLQkgICAgdGhlbgotCQlTVU5fQVJDSD0ieDg2XzY0IgotCSAgICBmaQotCWZpCi0JZWNobyAke1NVTl9BUkNIfS1wYy1zb2xhcmlzMmBlY2hvICR7VU5BTUVfUkVMRUFTRX18c2VkIC1lICdzL1teLl0qLy8nYAotCWV4aXQgOzsKLSAgICBzdW40KjpTdW5PUzo2KjoqKQotCSMgQWNjb3JkaW5nIHRvIGNvbmZpZy5zdWIsIHRoaXMgaXMgdGhlIHByb3BlciB3YXkgdG8gY2Fub25pY2FsaXplCi0JIyBTdW5PUzYuICBIYXJkIHRvIGd1ZXNzIGV4YWN0bHkgd2hhdCBTdW5PUzYgd2lsbCBiZSBsaWtlLCBidXQKLQkjIGl0J3MgbGlrZWx5IHRvIGJlIG1vcmUgbGlrZSBTb2xhcmlzIHRoYW4gU3VuT1M0LgotCWVjaG8gc3BhcmMtc3VuLXNvbGFyaXMzYGVjaG8gJHtVTkFNRV9SRUxFQVNFfXxzZWQgLWUgJ3MvW14uXSovLydgCi0JZXhpdCA7OwotICAgIHN1bjQqOlN1bk9TOio6KikKLQljYXNlICJgL3Vzci9iaW4vYXJjaCAta2AiIGluCi0JICAgIFNlcmllcyp8UzQqKQotCQlVTkFNRV9SRUxFQVNFPWB1bmFtZSAtdmAKLQkJOzsKLQllc2FjCi0JIyBKYXBhbmVzZSBMYW5ndWFnZSB2ZXJzaW9ucyBoYXZlIGEgdmVyc2lvbiBudW1iZXIgbGlrZSBgNC4xLjMtSkwnLgotCWVjaG8gc3BhcmMtc3VuLXN1bm9zYGVjaG8gJHtVTkFNRV9SRUxFQVNFfXxzZWQgLWUgJ3MvLS9fLydgCi0JZXhpdCA7OwotICAgIHN1bjMqOlN1bk9TOio6KikKLQllY2hvIG02OGstc3VuLXN1bm9zJHtVTkFNRV9SRUxFQVNFfQotCWV4aXQgOzsKLSAgICBzdW4qOio6NC4yQlNEOiopCi0JVU5BTUVfUkVMRUFTRT1gKHNlZCAxcSAvZXRjL21vdGQgfCBhd2sgJ3twcmludCBzdWJzdHIoJDUsMSwzKX0nKSAyPi9kZXYvbnVsbGAKLQl0ZXN0ICJ4JHtVTkFNRV9SRUxFQVNFfSIgPSAieCIgJiYgVU5BTUVfUkVMRUFTRT0zCi0JY2FzZSAiYC9iaW4vYXJjaGAiIGluCi0JICAgIHN1bjMpCi0JCWVjaG8gbTY4ay1zdW4tc3Vub3Mke1VOQU1FX1JFTEVBU0V9Ci0JCTs7Ci0JICAgIHN1bjQpCi0JCWVjaG8gc3BhcmMtc3VuLXN1bm9zJHtVTkFNRV9SRUxFQVNFfQotCQk7OwotCWVzYWMKLQlleGl0IDs7Ci0gICAgYXVzaHA6U3VuT1M6KjoqKQotCWVjaG8gc3BhcmMtYXVzcGV4LXN1bm9zJHtVTkFNRV9SRUxFQVNFfQotCWV4aXQgOzsKLSAgICAjIFRoZSBzaXR1YXRpb24gZm9yIE1pTlQgaXMgYSBsaXR0bGUgY29uZnVzaW5nLiAgVGhlIG1hY2hpbmUgbmFtZQotICAgICMgY2FuIGJlIHZpcnR1YWxseSBldmVyeXRoaW5nIChldmVyeXRoaW5nIHdoaWNoIGlzIG5vdAotICAgICMgImF0YXJpc3QiIG9yICJhdGFyaXN0ZSIgYXQgbGVhc3Qgc2hvdWxkIGhhdmUgYSBwcm9jZXNzb3IKLSAgICAjID4gbTY4MDAwKS4gIFRoZSBzeXN0ZW0gbmFtZSByYW5nZXMgZnJvbSAiTWlOVCIgb3ZlciAiRnJlZU1pTlQiCi0gICAgIyB0byB0aGUgbG93ZXJjYXNlIHZlcnNpb24gIm1pbnQiIChvciAiZnJlZW1pbnQiKS4gIEZpbmFsbHkKLSAgICAjIHRoZSBzeXN0ZW0gbmFtZSAiVE9TIiBkZW5vdGVzIGEgc3lzdGVtIHdoaWNoIGlzIGFjdHVhbGx5IG5vdAotICAgICMgTWlOVC4gIEJ1dCBNaU5UIGlzIGRvd253YXJkIGNvbXBhdGlibGUgdG8gVE9TLCBzbyB0aGlzIHNob3VsZAotICAgICMgYmUgbm8gcHJvYmxlbS4KLSAgICBhdGFyaXN0W2VdOipNaU5UOio6KiB8IGF0YXJpc3RbZV06Km1pbnQ6KjoqIHwgYXRhcmlzdFtlXToqVE9TOio6KikKLSAgICAgICAgZWNobyBtNjhrLWF0YXJpLW1pbnQke1VOQU1FX1JFTEVBU0V9Ci0JZXhpdCA7OwotICAgIGF0YXJpKjoqTWlOVDoqOiogfCBhdGFyaSo6Km1pbnQ6KjoqIHwgYXRhcmlzdFtlXToqVE9TOio6KikKLQllY2hvIG02OGstYXRhcmktbWludCR7VU5BTUVfUkVMRUFTRX0KLSAgICAgICAgZXhpdCA7OwotICAgICpmYWxjb24qOipNaU5UOio6KiB8ICpmYWxjb24qOiptaW50Oio6KiB8ICpmYWxjb24qOipUT1M6KjoqKQotICAgICAgICBlY2hvIG02OGstYXRhcmktbWludCR7VU5BTUVfUkVMRUFTRX0KLQlleGl0IDs7Ci0gICAgbWlsYW4qOipNaU5UOio6KiB8IG1pbGFuKjoqbWludDoqOiogfCAqbWlsYW4qOipUT1M6KjoqKQotICAgICAgICBlY2hvIG02OGstbWlsYW4tbWludCR7VU5BTUVfUkVMRUFTRX0KLSAgICAgICAgZXhpdCA7OwotICAgIGhhZGVzKjoqTWlOVDoqOiogfCBoYWRlcyo6Km1pbnQ6KjoqIHwgKmhhZGVzKjoqVE9TOio6KikKLSAgICAgICAgZWNobyBtNjhrLWhhZGVzLW1pbnQke1VOQU1FX1JFTEVBU0V9Ci0gICAgICAgIGV4aXQgOzsKLSAgICAqOipNaU5UOio6KiB8ICo6Km1pbnQ6KjoqIHwgKjoqVE9TOio6KikKLSAgICAgICAgZWNobyBtNjhrLXVua25vd24tbWludCR7VU5BTUVfUkVMRUFTRX0KLSAgICAgICAgZXhpdCA7OwotICAgIG02OGs6bWFjaHRlbjoqOiopCi0JZWNobyBtNjhrLWFwcGxlLW1hY2h0ZW4ke1VOQU1FX1JFTEVBU0V9Ci0JZXhpdCA7OwotICAgIHBvd2VycGM6bWFjaHRlbjoqOiopCi0JZWNobyBwb3dlcnBjLWFwcGxlLW1hY2h0ZW4ke1VOQU1FX1JFTEVBU0V9Ci0JZXhpdCA7OwotICAgIFJJU0MqOk1hY2g6KjoqKQotCWVjaG8gbWlwcy1kZWMtbWFjaF9ic2Q0LjMKLQlleGl0IDs7Ci0gICAgUklTQyo6VUxUUklYOio6KikKLQllY2hvIG1pcHMtZGVjLXVsdHJpeCR7VU5BTUVfUkVMRUFTRX0KLQlleGl0IDs7Ci0gICAgVkFYKjpVTFRSSVgqOio6KikKLQllY2hvIHZheC1kZWMtdWx0cml4JHtVTkFNRV9SRUxFQVNFfQotCWV4aXQgOzsKLSAgICAyMDIwOkNMSVg6KjoqIHwgMjQzMDpDTElYOio6KikKLQllY2hvIGNsaXBwZXItaW50ZXJncmFwaC1jbGl4JHtVTkFNRV9SRUxFQVNFfQotCWV4aXQgOzsKLSAgICBtaXBzOio6KjpVTUlQUyB8IG1pcHM6KjoqOlJJU0NvcykKLQlldmFsICRzZXRfY2NfZm9yX2J1aWxkCi0Jc2VkICdzL14JLy8nIDw8IEVPRiA+JGR1bW15LmMKLSNpZmRlZiBfX2NwbHVzcGx1cwotI2luY2x1ZGUgPHN0ZGlvLmg+ICAvKiBmb3IgcHJpbnRmKCkgcHJvdG90eXBlICovCi0JaW50IG1haW4gKGludCBhcmdjLCBjaGFyICphcmd2W10pIHsKLSNlbHNlCi0JaW50IG1haW4gKGFyZ2MsIGFyZ3YpIGludCBhcmdjOyBjaGFyICphcmd2W107IHsKLSNlbmRpZgotCSNpZiBkZWZpbmVkIChob3N0X21pcHMpICYmIGRlZmluZWQgKE1JUFNFQikKLQkjaWYgZGVmaW5lZCAoU1lTVFlQRV9TWVNWKQotCSAgcHJpbnRmICgibWlwcy1taXBzLXJpc2NvcyVzc3lzdlxuIiwgYXJndlsxXSk7IGV4aXQgKDApOwotCSNlbmRpZgotCSNpZiBkZWZpbmVkIChTWVNUWVBFX1NWUjQpCi0JICBwcmludGYgKCJtaXBzLW1pcHMtcmlzY29zJXNzdnI0XG4iLCBhcmd2WzFdKTsgZXhpdCAoMCk7Ci0JI2VuZGlmCi0JI2lmIGRlZmluZWQgKFNZU1RZUEVfQlNENDMpIHx8IGRlZmluZWQoU1lTVFlQRV9CU0QpCi0JICBwcmludGYgKCJtaXBzLW1pcHMtcmlzY29zJXNic2RcbiIsIGFyZ3ZbMV0pOyBleGl0ICgwKTsKLQkjZW5kaWYKLQkjZW5kaWYKLQkgIGV4aXQgKC0xKTsKLQl9Ci1FT0YKLQkkQ0NfRk9SX0JVSUxEIC1vICRkdW1teSAkZHVtbXkuYyAmJgotCSAgZHVtbXlhcmc9YGVjaG8gIiR7VU5BTUVfUkVMRUFTRX0iIHwgc2VkIC1uICdzL1woWzAtOV0qXCkuKi9cMS9wJ2AgJiYKLQkgIFNZU1RFTV9OQU1FPWAkZHVtbXkgJGR1bW15YXJnYCAmJgotCSAgICB7IGVjaG8gIiRTWVNURU1fTkFNRSI7IGV4aXQ7IH0KLQllY2hvIG1pcHMtbWlwcy1yaXNjb3Mke1VOQU1FX1JFTEVBU0V9Ci0JZXhpdCA7OwotICAgIE1vdG9yb2xhOlBvd2VyTUFYX09TOio6KikKLQllY2hvIHBvd2VycGMtbW90b3JvbGEtcG93ZXJtYXgKLQlleGl0IDs7Ci0gICAgTW90b3JvbGE6Kjo0LjM6UEw4LSopCi0JZWNobyBwb3dlcnBjLWhhcnJpcy1wb3dlcm1heAotCWV4aXQgOzsKLSAgICBOaWdodF9IYXdrOio6KjpQb3dlck1BWF9PUyB8IFN5bmVyZ3k6UG93ZXJNQVhfT1M6KjoqKQotCWVjaG8gcG93ZXJwYy1oYXJyaXMtcG93ZXJtYXgKLQlleGl0IDs7Ci0gICAgTmlnaHRfSGF3azpQb3dlcl9VTklYOio6KikKLQllY2hvIHBvd2VycGMtaGFycmlzLXBvd2VydW5peAotCWV4aXQgOzsKLSAgICBtODhrOkNYL1VYOjcqOiopCi0JZWNobyBtODhrLWhhcnJpcy1jeHV4NwotCWV4aXQgOzsKLSAgICBtODhrOio6NCo6UjQqKQotCWVjaG8gbTg4ay1tb3Rvcm9sYS1zeXN2NAotCWV4aXQgOzsKLSAgICBtODhrOio6Myo6UjMqKQotCWVjaG8gbTg4ay1tb3Rvcm9sYS1zeXN2MwotCWV4aXQgOzsKLSAgICBBVmlpT046ZGd1eDoqOiopCi0gICAgICAgICMgREcvVVggcmV0dXJucyBBVmlpT04gZm9yIGFsbCBhcmNoaXRlY3R1cmVzCi0gICAgICAgIFVOQU1FX1BST0NFU1NPUj1gL3Vzci9iaW4vdW5hbWUgLXBgCi0JaWYgWyAkVU5BTUVfUFJPQ0VTU09SID0gbWM4ODEwMCBdIHx8IFsgJFVOQU1FX1BST0NFU1NPUiA9IG1jODgxMTAgXQotCXRoZW4KLQkgICAgaWYgWyAke1RBUkdFVF9CSU5BUllfSU5URVJGQUNFfXggPSBtODhrZGd1eGVsZnggXSB8fCBcCi0JICAgICAgIFsgJHtUQVJHRVRfQklOQVJZX0lOVEVSRkFDRX14ID0geCBdCi0JICAgIHRoZW4KLQkJZWNobyBtODhrLWRnLWRndXgke1VOQU1FX1JFTEVBU0V9Ci0JICAgIGVsc2UKLQkJZWNobyBtODhrLWRnLWRndXhiY3Mke1VOQU1FX1JFTEVBU0V9Ci0JICAgIGZpCi0JZWxzZQotCSAgICBlY2hvIGk1ODYtZGctZGd1eCR7VU5BTUVfUkVMRUFTRX0KLQlmaQotIAlleGl0IDs7Ci0gICAgTTg4KjpEb2xwaGluT1M6KjoqKQkjIERvbHBoaW5PUyAoU1ZSMykKLQllY2hvIG04OGstZG9scGhpbi1zeXN2MwotCWV4aXQgOzsKLSAgICBNODgqOio6UjMqOiopCi0JIyBEZWx0YSA4OGsgc3lzdGVtIHJ1bm5pbmcgU1ZSMwotCWVjaG8gbTg4ay1tb3Rvcm9sYS1zeXN2MwotCWV4aXQgOzsKLSAgICBYRDg4KjoqOio6KikgIyBUZWt0cm9uaXggWEQ4OCBzeXN0ZW0gcnVubmluZyBVVGVrViAoU1ZSMykKLQllY2hvIG04OGstdGVrdHJvbml4LXN5c3YzCi0JZXhpdCA7OwotICAgIFRlazQzWzAtOV1bMC05XTpVVGVrOio6KikgIyBUZWt0cm9uaXggNDMwMCBzeXN0ZW0gcnVubmluZyBVVGVrIChCU0QpCi0JZWNobyBtNjhrLXRla3Ryb25peC1ic2QKLQlleGl0IDs7Ci0gICAgKjpJUklYKjoqOiopCi0JZWNobyBtaXBzLXNnaS1pcml4YGVjaG8gJHtVTkFNRV9SRUxFQVNFfXxzZWQgLWUgJ3MvLS9fL2cnYAotCWV4aXQgOzsKLSAgICA/Pz8/Pz8/PzpBSVg/OlsxMl0uMToyKSAgICMgQUlYIDIuMi4xIG9yIEFJWCAyLjEuMSBpcyBSVC9QQyBBSVguCi0JZWNobyByb21wLWlibS1haXggICAgICMgdW5hbWUgLW0gZ2l2ZXMgYW4gOCBoZXgtY29kZSBDUFUgaWQKLQlleGl0IDs7ICAgICAgICAgICAgICAgIyBOb3RlIHRoYXQ6IGVjaG8gIidgdW5hbWUgLXNgJyIgZ2l2ZXMgJ0FJWCAnCi0gICAgaSo4NjpBSVg6KjoqKQotCWVjaG8gaTM4Ni1pYm0tYWl4Ci0JZXhpdCA7OwotICAgIGlhNjQ6QUlYOio6KikKLQlpZiBbIC14IC91c3IvYmluL29zbGV2ZWwgXSA7IHRoZW4KLQkJSUJNX1JFVj1gL3Vzci9iaW4vb3NsZXZlbGAKLQllbHNlCi0JCUlCTV9SRVY9JHtVTkFNRV9WRVJTSU9OfS4ke1VOQU1FX1JFTEVBU0V9Ci0JZmkKLQllY2hvICR7VU5BTUVfTUFDSElORX0taWJtLWFpeCR7SUJNX1JFVn0KLQlleGl0IDs7Ci0gICAgKjpBSVg6MjozKQotCWlmIGdyZXAgYm9zMzI1IC91c3IvaW5jbHVkZS9zdGRpby5oID4vZGV2L251bGwgMj4mMTsgdGhlbgotCQlldmFsICRzZXRfY2NfZm9yX2J1aWxkCi0JCXNlZCAncy9eCQkvLycgPDwgRU9GID4kZHVtbXkuYwotCQkjaW5jbHVkZSA8c3lzL3N5c3RlbWNmZy5oPgotCi0JCW1haW4oKQotCQkJewotCQkJaWYgKCFfX3Bvd2VyX3BjKCkpCi0JCQkJZXhpdCgxKTsKLQkJCXB1dHMoInBvd2VycGMtaWJtLWFpeDMuMi41Iik7Ci0JCQlleGl0KDApOwotCQkJfQotRU9GCi0JCWlmICRDQ19GT1JfQlVJTEQgLW8gJGR1bW15ICRkdW1teS5jICYmIFNZU1RFTV9OQU1FPWAkZHVtbXlgCi0JCXRoZW4KLQkJCWVjaG8gIiRTWVNURU1fTkFNRSIKLQkJZWxzZQotCQkJZWNobyByczYwMDAtaWJtLWFpeDMuMi41Ci0JCWZpCi0JZWxpZiBncmVwIGJvczMyNCAvdXNyL2luY2x1ZGUvc3RkaW8uaCA+L2Rldi9udWxsIDI+JjE7IHRoZW4KLQkJZWNobyByczYwMDAtaWJtLWFpeDMuMi40Ci0JZWxzZQotCQllY2hvIHJzNjAwMC1pYm0tYWl4My4yCi0JZmkKLQlleGl0IDs7Ci0gICAgKjpBSVg6KjpbNDU2XSkKLQlJQk1fQ1BVX0lEPWAvdXNyL3NiaW4vbHNkZXYgLUMgLWMgcHJvY2Vzc29yIC1TIGF2YWlsYWJsZSB8IHNlZCAxcSB8IGF3ayAneyBwcmludCAkMSB9J2AKLQlpZiAvdXNyL3NiaW4vbHNhdHRyIC1FbCAke0lCTV9DUFVfSUR9IHwgZ3JlcCAnIFBPV0VSJyA+L2Rldi9udWxsIDI+JjE7IHRoZW4KLQkJSUJNX0FSQ0g9cnM2MDAwCi0JZWxzZQotCQlJQk1fQVJDSD1wb3dlcnBjCi0JZmkKLQlpZiBbIC14IC91c3IvYmluL29zbGV2ZWwgXSA7IHRoZW4KLQkJSUJNX1JFVj1gL3Vzci9iaW4vb3NsZXZlbGAKLQllbHNlCi0JCUlCTV9SRVY9JHtVTkFNRV9WRVJTSU9OfS4ke1VOQU1FX1JFTEVBU0V9Ci0JZmkKLQllY2hvICR7SUJNX0FSQ0h9LWlibS1haXgke0lCTV9SRVZ9Ci0JZXhpdCA7OwotICAgICo6QUlYOio6KikKLQllY2hvIHJzNjAwMC1pYm0tYWl4Ci0JZXhpdCA7OwotICAgIGlibXJ0OjQuNEJTRDoqfHJvbXAtaWJtOkJTRDoqKQotCWVjaG8gcm9tcC1pYm0tYnNkNC40Ci0JZXhpdCA7OwotICAgIGlibXJ0OipCU0Q6Knxyb21wLWlibTpCU0Q6KikgICAgICAgICAgICAjIGNvdmVycyBSVC9QQyBCU0QgYW5kCi0JZWNobyByb21wLWlibS1ic2Qke1VOQU1FX1JFTEVBU0V9ICAgIyA0LjMgd2l0aCB1bmFtZSBhZGRlZCB0bwotCWV4aXQgOzsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMgcmVwb3J0OiByb21wLWlibSBCU0QgNC4zCi0gICAgKjpCT1NYOio6KikKLQllY2hvIHJzNjAwMC1idWxsLWJvc3gKLQlleGl0IDs7Ci0gICAgRFBYLzI/MDA6Qi5PLlMuOio6KikKLQllY2hvIG02OGstYnVsbC1zeXN2MwotCWV4aXQgOzsKLSAgICA5MDAwL1szNF0/Pzo0LjNic2Q6MS4qOiopCi0JZWNobyBtNjhrLWhwLWJzZAotCWV4aXQgOzsKLSAgICBocDMwMDo0LjRCU0Q6KjoqIHwgOTAwMC9bMzRdPz86NC4zYnNkOjIuKjoqKQotCWVjaG8gbTY4ay1ocC1ic2Q0LjQKLQlleGl0IDs7Ci0gICAgOTAwMC9bMzQ2NzhdPz86SFAtVVg6KjoqKQotCUhQVVhfUkVWPWBlY2hvICR7VU5BTUVfUkVMRUFTRX18c2VkIC1lICdzL1teLl0qLlswQl0qLy8nYAotCWNhc2UgIiR7VU5BTUVfTUFDSElORX0iIGluCi0JICAgIDkwMDAvMzE/ICkgICAgICAgICAgICBIUF9BUkNIPW02ODAwMCA7OwotCSAgICA5MDAwL1szNF0/PyApICAgICAgICAgSFBfQVJDSD1tNjhrIDs7Ci0JICAgIDkwMDAvWzY3OF1bMC05XVswLTldKQotCQlpZiBbIC14IC91c3IvYmluL2dldGNvbmYgXTsgdGhlbgotCQkgICAgc2NfY3B1X3ZlcnNpb249YC91c3IvYmluL2dldGNvbmYgU0NfQ1BVX1ZFUlNJT04gMj4vZGV2L251bGxgCi0gICAgICAgICAgICAgICAgICAgIHNjX2tlcm5lbF9iaXRzPWAvdXNyL2Jpbi9nZXRjb25mIFNDX0tFUk5FTF9CSVRTIDI+L2Rldi9udWxsYAotICAgICAgICAgICAgICAgICAgICBjYXNlICIke3NjX2NwdV92ZXJzaW9ufSIgaW4KLSAgICAgICAgICAgICAgICAgICAgICA1MjMpIEhQX0FSQ0g9ImhwcGExLjAiIDs7ICMgQ1BVX1BBX1JJU0MxXzAKLSAgICAgICAgICAgICAgICAgICAgICA1MjgpIEhQX0FSQ0g9ImhwcGExLjEiIDs7ICMgQ1BVX1BBX1JJU0MxXzEKLSAgICAgICAgICAgICAgICAgICAgICA1MzIpICAgICAgICAgICAgICAgICAgICAgICMgQ1BVX1BBX1JJU0MyXzAKLSAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgIiR7c2Nfa2VybmVsX2JpdHN9IiBpbgotICAgICAgICAgICAgICAgICAgICAgICAgICAzMikgSFBfQVJDSD0iaHBwYTIuMG4iIDs7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgIDY0KSBIUF9BUkNIPSJocHBhMi4wdyIgOzsKLQkJCSAgJycpIEhQX0FSQ0g9ImhwcGEyLjAiIDs7ICAgIyBIUC1VWCAxMC4yMAotICAgICAgICAgICAgICAgICAgICAgICAgZXNhYyA7OwotICAgICAgICAgICAgICAgICAgICBlc2FjCi0JCWZpCi0JCWlmIFsgIiR7SFBfQVJDSH0iID0gIiIgXTsgdGhlbgotCQkgICAgZXZhbCAkc2V0X2NjX2Zvcl9idWlsZAotCQkgICAgc2VkICdzL14gICAgICAgICAgICAgIC8vJyA8PCBFT0YgPiRkdW1teS5jCi0KLSAgICAgICAgICAgICAgI2RlZmluZSBfSFBVWF9TT1VSQ0UKLSAgICAgICAgICAgICAgI2luY2x1ZGUgPHN0ZGxpYi5oPgotICAgICAgICAgICAgICAjaW5jbHVkZSA8dW5pc3RkLmg+Ci0KLSAgICAgICAgICAgICAgaW50IG1haW4gKCkKLSAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAjaWYgZGVmaW5lZChfU0NfS0VSTkVMX0JJVFMpCi0gICAgICAgICAgICAgICAgICBsb25nIGJpdHMgPSBzeXNjb25mKF9TQ19LRVJORUxfQklUUyk7Ci0gICAgICAgICAgICAgICNlbmRpZgotICAgICAgICAgICAgICAgICAgbG9uZyBjcHUgID0gc3lzY29uZiAoX1NDX0NQVV9WRVJTSU9OKTsKLQotICAgICAgICAgICAgICAgICAgc3dpdGNoIChjcHUpCi0gICAgICAgICAgICAgIAl7Ci0gICAgICAgICAgICAgIAljYXNlIENQVV9QQV9SSVNDMV8wOiBwdXRzICgiaHBwYTEuMCIpOyBicmVhazsKLSAgICAgICAgICAgICAgCWNhc2UgQ1BVX1BBX1JJU0MxXzE6IHB1dHMgKCJocHBhMS4xIik7IGJyZWFrOwotICAgICAgICAgICAgICAJY2FzZSBDUFVfUEFfUklTQzJfMDoKLSAgICAgICAgICAgICAgI2lmIGRlZmluZWQoX1NDX0tFUk5FTF9CSVRTKQotICAgICAgICAgICAgICAJICAgIHN3aXRjaCAoYml0cykKLSAgICAgICAgICAgICAgCQl7Ci0gICAgICAgICAgICAgIAkJY2FzZSA2NDogcHV0cyAoImhwcGEyLjB3Iik7IGJyZWFrOwotICAgICAgICAgICAgICAJCWNhc2UgMzI6IHB1dHMgKCJocHBhMi4wbiIpOyBicmVhazsKLSAgICAgICAgICAgICAgCQlkZWZhdWx0OiBwdXRzICgiaHBwYTIuMCIpOyBicmVhazsKLSAgICAgICAgICAgICAgCQl9IGJyZWFrOwotICAgICAgICAgICAgICAjZWxzZSAgLyogIWRlZmluZWQoX1NDX0tFUk5FTF9CSVRTKSAqLwotICAgICAgICAgICAgICAJICAgIHB1dHMgKCJocHBhMi4wIik7IGJyZWFrOwotICAgICAgICAgICAgICAjZW5kaWYKLSAgICAgICAgICAgICAgCWRlZmF1bHQ6IHB1dHMgKCJocHBhMS4wIik7IGJyZWFrOwotICAgICAgICAgICAgICAJfQotICAgICAgICAgICAgICAgICAgZXhpdCAoMCk7Ci0gICAgICAgICAgICAgIH0KLUVPRgotCQkgICAgKENDT1BUUz0gJENDX0ZPUl9CVUlMRCAtbyAkZHVtbXkgJGR1bW15LmMgMj4vZGV2L251bGwpICYmIEhQX0FSQ0g9YCRkdW1teWAKLQkJICAgIHRlc3QgLXogIiRIUF9BUkNIIiAmJiBIUF9BUkNIPWhwcGEKLQkJZmkgOzsKLQllc2FjCi0JaWYgWyAke0hQX0FSQ0h9ID0gImhwcGEyLjB3IiBdCi0JdGhlbgotCSAgICBldmFsICRzZXRfY2NfZm9yX2J1aWxkCi0KLQkgICAgIyBocHBhMi4wdy1ocC1ocHV4KiBoYXMgYSA2NC1iaXQga2VybmVsIGFuZCBhIGNvbXBpbGVyIGdlbmVyYXRpbmcKLQkgICAgIyAzMi1iaXQgY29kZS4gIGhwcGE2NC1ocC1ocHV4KiBoYXMgdGhlIHNhbWUga2VybmVsIGFuZCBhIGNvbXBpbGVyCi0JICAgICMgZ2VuZXJhdGluZyA2NC1iaXQgY29kZS4gIEdOVSBhbmQgSFAgdXNlIGRpZmZlcmVudCBub21lbmNsYXR1cmU6Ci0JICAgICMKLQkgICAgIyAkIENDX0ZPUl9CVUlMRD1jYyAuL2NvbmZpZy5ndWVzcwotCSAgICAjID0+IGhwcGEyLjB3LWhwLWhwdXgxMS4yMwotCSAgICAjICQgQ0NfRk9SX0JVSUxEPSJjYyArREEyLjB3IiAuL2NvbmZpZy5ndWVzcwotCSAgICAjID0+IGhwcGE2NC1ocC1ocHV4MTEuMjMKLQotCSAgICBpZiBlY2hvIF9fTFA2NF9fIHwgKENDT1BUUz0gJENDX0ZPUl9CVUlMRCAtRSAtIDI+L2Rldi9udWxsKSB8Ci0JCWdyZXAgLXEgX19MUDY0X18KLQkgICAgdGhlbgotCQlIUF9BUkNIPSJocHBhMi4wdyIKLQkgICAgZWxzZQotCQlIUF9BUkNIPSJocHBhNjQiCi0JICAgIGZpCi0JZmkKLQllY2hvICR7SFBfQVJDSH0taHAtaHB1eCR7SFBVWF9SRVZ9Ci0JZXhpdCA7OwotICAgIGlhNjQ6SFAtVVg6KjoqKQotCUhQVVhfUkVWPWBlY2hvICR7VU5BTUVfUkVMRUFTRX18c2VkIC1lICdzL1teLl0qLlswQl0qLy8nYAotCWVjaG8gaWE2NC1ocC1ocHV4JHtIUFVYX1JFVn0KLQlleGl0IDs7Ci0gICAgMzA1MCo6SEktVVg6KjoqKQotCWV2YWwgJHNldF9jY19mb3JfYnVpbGQKLQlzZWQgJ3MvXgkvLycgPDwgRU9GID4kZHVtbXkuYwotCSNpbmNsdWRlIDx1bmlzdGQuaD4KLQlpbnQKLQltYWluICgpCi0JewotCSAgbG9uZyBjcHUgPSBzeXNjb25mIChfU0NfQ1BVX1ZFUlNJT04pOwotCSAgLyogVGhlIG9yZGVyIG1hdHRlcnMsIGJlY2F1c2UgQ1BVX0lTX0hQX01DNjhLIGVycm9uZW91c2x5IHJldHVybnMKLQkgICAgIHRydWUgZm9yIENQVV9QQV9SSVNDMV8wLiAgQ1BVX0lTX1BBX1JJU0MgcmV0dXJucyBjb3JyZWN0Ci0JICAgICByZXN1bHRzLCBob3dldmVyLiAgKi8KLQkgIGlmIChDUFVfSVNfUEFfUklTQyAoY3B1KSkKLQkgICAgewotCSAgICAgIHN3aXRjaCAoY3B1KQotCQl7Ci0JCSAgY2FzZSBDUFVfUEFfUklTQzFfMDogcHV0cyAoImhwcGExLjAtaGl0YWNoaS1oaXV4d2UyIik7IGJyZWFrOwotCQkgIGNhc2UgQ1BVX1BBX1JJU0MxXzE6IHB1dHMgKCJocHBhMS4xLWhpdGFjaGktaGl1eHdlMiIpOyBicmVhazsKLQkJICBjYXNlIENQVV9QQV9SSVNDMl8wOiBwdXRzICgiaHBwYTIuMC1oaXRhY2hpLWhpdXh3ZTIiKTsgYnJlYWs7Ci0JCSAgZGVmYXVsdDogcHV0cyAoImhwcGEtaGl0YWNoaS1oaXV4d2UyIik7IGJyZWFrOwotCQl9Ci0JICAgIH0KLQkgIGVsc2UgaWYgKENQVV9JU19IUF9NQzY4SyAoY3B1KSkKLQkgICAgcHV0cyAoIm02OGstaGl0YWNoaS1oaXV4d2UyIik7Ci0JICBlbHNlIHB1dHMgKCJ1bmtub3duLWhpdGFjaGktaGl1eHdlMiIpOwotCSAgZXhpdCAoMCk7Ci0JfQotRU9GCi0JJENDX0ZPUl9CVUlMRCAtbyAkZHVtbXkgJGR1bW15LmMgJiYgU1lTVEVNX05BTUU9YCRkdW1teWAgJiYKLQkJeyBlY2hvICIkU1lTVEVNX05BTUUiOyBleGl0OyB9Ci0JZWNobyB1bmtub3duLWhpdGFjaGktaGl1eHdlMgotCWV4aXQgOzsKLSAgICA5MDAwLzc/Pzo0LjNic2Q6KjoqIHwgOTAwMC84P1s3OV06NC4zYnNkOio6KiApCi0JZWNobyBocHBhMS4xLWhwLWJzZAotCWV4aXQgOzsKLSAgICA5MDAwLzg/Pzo0LjNic2Q6KjoqKQotCWVjaG8gaHBwYTEuMC1ocC1ic2QKLQlleGl0IDs7Ci0gICAgKjk/Pyo6TVBFL2lYOio6KiB8ICozMDAwKjpNUEUvaVg6KjoqKQotCWVjaG8gaHBwYTEuMC1ocC1tcGVpeAotCWV4aXQgOzsKLSAgICBocDc/PzpPU0YxOio6KiB8IGhwOD9bNzldOk9TRjE6KjoqICkKLQllY2hvIGhwcGExLjEtaHAtb3NmCi0JZXhpdCA7OwotICAgIGhwOD8/Ok9TRjE6KjoqKQotCWVjaG8gaHBwYTEuMC1ocC1vc2YKLQlleGl0IDs7Ci0gICAgaSo4NjpPU0YxOio6KikKLQlpZiBbIC14IC91c3Ivc2Jpbi9zeXN2ZXJzaW9uIF0gOyB0aGVuCi0JICAgIGVjaG8gJHtVTkFNRV9NQUNISU5FfS11bmtub3duLW9zZjFtawotCWVsc2UKLQkgICAgZWNobyAke1VOQU1FX01BQ0hJTkV9LXVua25vd24tb3NmMQotCWZpCi0JZXhpdCA7OwotICAgIHBhcmlzYyo6TGl0ZXMqOio6KikKLQllY2hvIGhwcGExLjEtaHAtbGl0ZXMKLQlleGl0IDs7Ci0gICAgQzEqOkNvbnZleE9TOio6KiB8IGNvbnZleDpDb252ZXhPUzpDMSo6KikKLQllY2hvIGMxLWNvbnZleC1ic2QKLSAgICAgICAgZXhpdCA7OwotICAgIEMyKjpDb252ZXhPUzoqOiogfCBjb252ZXg6Q29udmV4T1M6QzIqOiopCi0JaWYgZ2V0c3lzaW5mbyAtZiBzY2FsYXJfYWNjCi0JdGhlbiBlY2hvIGMzMi1jb252ZXgtYnNkCi0JZWxzZSBlY2hvIGMyLWNvbnZleC1ic2QKLQlmaQotICAgICAgICBleGl0IDs7Ci0gICAgQzM0KjpDb252ZXhPUzoqOiogfCBjb252ZXg6Q29udmV4T1M6QzM0KjoqKQotCWVjaG8gYzM0LWNvbnZleC1ic2QKLSAgICAgICAgZXhpdCA7OwotICAgIEMzOCo6Q29udmV4T1M6KjoqIHwgY29udmV4OkNvbnZleE9TOkMzOCo6KikKLQllY2hvIGMzOC1jb252ZXgtYnNkCi0gICAgICAgIGV4aXQgOzsKLSAgICBDNCo6Q29udmV4T1M6KjoqIHwgY29udmV4OkNvbnZleE9TOkM0KjoqKQotCWVjaG8gYzQtY29udmV4LWJzZAotICAgICAgICBleGl0IDs7Ci0gICAgQ1JBWSpZLU1QOio6KjoqKQotCWVjaG8geW1wLWNyYXktdW5pY29zJHtVTkFNRV9SRUxFQVNFfSB8IHNlZCAtZSAncy9cLlteLl0qJC8uWC8nCi0JZXhpdCA7OwotICAgIENSQVkqW0EtWl05MDoqOio6KikKLQllY2hvICR7VU5BTUVfTUFDSElORX0tY3JheS11bmljb3Mke1VOQU1FX1JFTEVBU0V9IFwKLQl8IHNlZCAtZSAncy9DUkFZLipcKFtBLVpdOTBcKS9cMS8nIFwKLQkgICAgICAtZSB5L0FCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaL2FiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6LyBcCi0JICAgICAgLWUgJ3MvXC5bXi5dKiQvLlgvJwotCWV4aXQgOzsKLSAgICBDUkFZKlRTOio6KjoqKQotCWVjaG8gdDkwLWNyYXktdW5pY29zJHtVTkFNRV9SRUxFQVNFfSB8IHNlZCAtZSAncy9cLlteLl0qJC8uWC8nCi0JZXhpdCA7OwotICAgIENSQVkqVDNFOio6KjoqKQotCWVjaG8gYWxwaGFldjUtY3JheS11bmljb3NtayR7VU5BTUVfUkVMRUFTRX0gfCBzZWQgLWUgJ3MvXC5bXi5dKiQvLlgvJwotCWV4aXQgOzsKLSAgICBDUkFZKlNWMToqOio6KikKLQllY2hvIHN2MS1jcmF5LXVuaWNvcyR7VU5BTUVfUkVMRUFTRX0gfCBzZWQgLWUgJ3MvXC5bXi5dKiQvLlgvJwotCWV4aXQgOzsKLSAgICAqOlVOSUNPUy9tcDoqOiopCi0JZWNobyBjcmF5bnYtY3JheS11bmljb3NtcCR7VU5BTUVfUkVMRUFTRX0gfCBzZWQgLWUgJ3MvXC5bXi5dKiQvLlgvJwotCWV4aXQgOzsKLSAgICBGMzBbMDFdOlVOSVhfU3lzdGVtX1Y6KjoqIHwgRjcwMDpVTklYX1N5c3RlbV9WOio6KikKLQlGVUpJVFNVX1BST0M9YHVuYW1lIC1tIHwgdHIgJ0FCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaJyAnYWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXonYAotICAgICAgICBGVUpJVFNVX1NZUz1gdW5hbWUgLXAgfCB0ciAnQUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVonICdhYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5eicgfCBzZWQgLWUgJ3MvXC8vLydgCi0gICAgICAgIEZVSklUU1VfUkVMPWBlY2hvICR7VU5BTUVfUkVMRUFTRX0gfCBzZWQgLWUgJ3MvIC9fLydgCi0gICAgICAgIGVjaG8gIiR7RlVKSVRTVV9QUk9DfS1mdWppdHN1LSR7RlVKSVRTVV9TWVN9JHtGVUpJVFNVX1JFTH0iCi0gICAgICAgIGV4aXQgOzsKLSAgICA1MDAwOlVOSVhfU3lzdGVtX1Y6NC4qOiopCi0gICAgICAgIEZVSklUU1VfU1lTPWB1bmFtZSAtcCB8IHRyICdBQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWicgJ2FiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6JyB8IHNlZCAtZSAncy9cLy8vJ2AKLSAgICAgICAgRlVKSVRTVV9SRUw9YGVjaG8gJHtVTkFNRV9SRUxFQVNFfSB8IHRyICdBQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWicgJ2FiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6JyB8IHNlZCAtZSAncy8gL18vJ2AKLSAgICAgICAgZWNobyAic3BhcmMtZnVqaXRzdS0ke0ZVSklUU1VfU1lTfSR7RlVKSVRTVV9SRUx9IgotCWV4aXQgOzsKLSAgICBpKjg2OkJTRC8zODY6KjoqIHwgaSo4NjpCU0QvT1M6KjoqIHwgKjpBc2NlbmRcIEVtYmVkZGVkL09TOio6KikKLQllY2hvICR7VU5BTUVfTUFDSElORX0tcGMtYnNkaSR7VU5BTUVfUkVMRUFTRX0KLQlleGl0IDs7Ci0gICAgc3BhcmMqOkJTRC9PUzoqOiopCi0JZWNobyBzcGFyYy11bmtub3duLWJzZGkke1VOQU1FX1JFTEVBU0V9Ci0JZXhpdCA7OwotICAgICo6QlNEL09TOio6KikKLQllY2hvICR7VU5BTUVfTUFDSElORX0tdW5rbm93bi1ic2RpJHtVTkFNRV9SRUxFQVNFfQotCWV4aXQgOzsKLSAgICAqOkZyZWVCU0Q6KjoqKQotCWNhc2UgJHtVTkFNRV9NQUNISU5FfSBpbgotCSAgICBwYzk4KQotCQllY2hvIGkzODYtdW5rbm93bi1mcmVlYnNkYGVjaG8gJHtVTkFNRV9SRUxFQVNFfXxzZWQgLWUgJ3MvWy0oXS4qLy8nYCA7OwotCSAgICBhbWQ2NCkKLQkJZWNobyB4ODZfNjQtdW5rbm93bi1mcmVlYnNkYGVjaG8gJHtVTkFNRV9SRUxFQVNFfXxzZWQgLWUgJ3MvWy0oXS4qLy8nYCA7OwotCSAgICAqKQotCQllY2hvICR7VU5BTUVfTUFDSElORX0tdW5rbm93bi1mcmVlYnNkYGVjaG8gJHtVTkFNRV9SRUxFQVNFfXxzZWQgLWUgJ3MvWy0oXS4qLy8nYCA7OwotCWVzYWMKLQlleGl0IDs7Ci0gICAgaSo6Q1lHV0lOKjoqKQotCWVjaG8gJHtVTkFNRV9NQUNISU5FfS1wYy1jeWd3aW4KLQlleGl0IDs7Ci0gICAgKjpNSU5HVyo6KikKLQllY2hvICR7VU5BTUVfTUFDSElORX0tcGMtbWluZ3czMgotCWV4aXQgOzsKLSAgICBpKjp3aW5kb3dzMzIqOiopCi0gICAgCSMgdW5hbWUgLW0gaW5jbHVkZXMgIi1wYyIgb24gdGhpcyBzeXN0ZW0uCi0gICAgCWVjaG8gJHtVTkFNRV9NQUNISU5FfS1taW5ndzMyCi0JZXhpdCA7OwotICAgIGkqOlBXKjoqKQotCWVjaG8gJHtVTkFNRV9NQUNISU5FfS1wYy1wdzMyCi0JZXhpdCA7OwotICAgICo6SW50ZXJpeCo6KikKLSAgICAJY2FzZSAke1VOQU1FX01BQ0hJTkV9IGluCi0JICAgIHg4NikKLQkJZWNobyBpNTg2LXBjLWludGVyaXgke1VOQU1FX1JFTEVBU0V9Ci0JCWV4aXQgOzsKLQkgICAgYXV0aGVudGljYW1kIHwgZ2VudWluZWludGVsIHwgRU02NFQpCi0JCWVjaG8geDg2XzY0LXVua25vd24taW50ZXJpeCR7VU5BTUVfUkVMRUFTRX0KLQkJZXhpdCA7OwotCSAgICBJQTY0KQotCQllY2hvIGlhNjQtdW5rbm93bi1pbnRlcml4JHtVTkFNRV9SRUxFQVNFfQotCQlleGl0IDs7Ci0JZXNhYyA7OwotICAgIFszNDVdODY6V2luZG93c185NToqIHwgWzM0NV04NjpXaW5kb3dzXzk4OiogfCBbMzQ1XTg2OldpbmRvd3NfTlQ6KikKLQllY2hvIGkke1VOQU1FX01BQ0hJTkV9LXBjLW1rcwotCWV4aXQgOzsKLSAgICA4NjY0OldpbmRvd3NfTlQ6KikKLQllY2hvIHg4Nl82NC1wYy1ta3MKLQlleGl0IDs7Ci0gICAgaSo6V2luZG93c19OVCo6KiB8IFBlbnRpdW0qOldpbmRvd3NfTlQqOiopCi0JIyBIb3cgZG8gd2Uga25vdyBpdCdzIEludGVyaXggcmF0aGVyIHRoYW4gdGhlIGdlbmVyaWMgUE9TSVggc3Vic3lzdGVtPwotCSMgSXQgYWxzbyBjb25mbGljdHMgd2l0aCBwcmUtMi4wIHZlcnNpb25zIG9mIEFUJlQgVVdJTi4gU2hvdWxkIHdlCi0JIyBVTkFNRV9NQUNISU5FIGJhc2VkIG9uIHRoZSBvdXRwdXQgb2YgdW5hbWUgaW5zdGVhZCBvZiBpMzg2PwotCWVjaG8gaTU4Ni1wYy1pbnRlcml4Ci0JZXhpdCA7OwotICAgIGkqOlVXSU4qOiopCi0JZWNobyAke1VOQU1FX01BQ0hJTkV9LXBjLXV3aW4KLQlleGl0IDs7Ci0gICAgYW1kNjQ6Q1lHV0lOKjoqOiogfCB4ODZfNjQ6Q1lHV0lOKjoqOiopCi0JZWNobyB4ODZfNjQtdW5rbm93bi1jeWd3aW4KLQlleGl0IDs7Ci0gICAgcCo6Q1lHV0lOKjoqKQotCWVjaG8gcG93ZXJwY2xlLXVua25vd24tY3lnd2luCi0JZXhpdCA7OwotICAgIHByZXAqOlN1bk9TOjUuKjoqKQotCWVjaG8gcG93ZXJwY2xlLXVua25vd24tc29sYXJpczJgZWNobyAke1VOQU1FX1JFTEVBU0V9fHNlZCAtZSAncy9bXi5dKi8vJ2AKLQlleGl0IDs7Ci0gICAgKjpHTlU6KjoqKQotCSMgdGhlIEdOVSBzeXN0ZW0KLQllY2hvIGBlY2hvICR7VU5BTUVfTUFDSElORX18c2VkIC1lICdzLFstL10uKiQsLCdgLXVua25vd24tZ251YGVjaG8gJHtVTkFNRV9SRUxFQVNFfXxzZWQgLWUgJ3MsLy4qJCwsJ2AKLQlleGl0IDs7Ci0gICAgKjpHTlUvKjoqOiopCi0JIyBvdGhlciBzeXN0ZW1zIHdpdGggR05VIGxpYmMgYW5kIHVzZXJsYW5kCi0JZWNobyAke1VOQU1FX01BQ0hJTkV9LXVua25vd24tYGVjaG8gJHtVTkFNRV9TWVNURU19IHwgc2VkICdzLF5bXi9dKi8sLCcgfCB0ciAnW0EtWl0nICdbYS16XSdgYGVjaG8gJHtVTkFNRV9SRUxFQVNFfXxzZWQgLWUgJ3MvWy0oXS4qLy8nYC1nbnUKLQlleGl0IDs7Ci0gICAgaSo4NjpNaW5peDoqOiopCi0JZWNobyAke1VOQU1FX01BQ0hJTkV9LXBjLW1pbml4Ci0JZXhpdCA7OwotICAgIGFscGhhOkxpbnV4Oio6KikKLQljYXNlIGBzZWQgLW4gJy9eY3B1IG1vZGVsL3MvXi4qOiBcKC4qXCkvXDEvcCcgPCAvcHJvYy9jcHVpbmZvYCBpbgotCSAgRVY1KSAgIFVOQU1FX01BQ0hJTkU9YWxwaGFldjUgOzsKLQkgIEVWNTYpICBVTkFNRV9NQUNISU5FPWFscGhhZXY1NiA7OwotCSAgUENBNTYpIFVOQU1FX01BQ0hJTkU9YWxwaGFwY2E1NiA7OwotCSAgUENBNTcpIFVOQU1FX01BQ0hJTkU9YWxwaGFwY2E1NiA7OwotCSAgRVY2KSAgIFVOQU1FX01BQ0hJTkU9YWxwaGFldjYgOzsKLQkgIEVWNjcpICBVTkFNRV9NQUNISU5FPWFscGhhZXY2NyA7OwotCSAgRVY2OCopIFVOQU1FX01BQ0hJTkU9YWxwaGFldjY4IDs7Ci0gICAgICAgIGVzYWMKLQlvYmpkdW1wIC0tcHJpdmF0ZS1oZWFkZXJzIC9iaW4vc2ggfCBncmVwIC1xIGxkLnNvLjEKLQlpZiB0ZXN0ICIkPyIgPSAwIDsgdGhlbiBMSUJDPSJsaWJjMSIgOyBlbHNlIExJQkM9IiIgOyBmaQotCWVjaG8gJHtVTkFNRV9NQUNISU5FfS11bmtub3duLWxpbnV4LWdudSR7TElCQ30KLQlleGl0IDs7Ci0gICAgYXJtKjpMaW51eDoqOiopCi0JZXZhbCAkc2V0X2NjX2Zvcl9idWlsZAotCWlmIGVjaG8gX19BUk1fRUFCSV9fIHwgJENDX0ZPUl9CVUlMRCAtRSAtIDI+L2Rldi9udWxsIFwKLQkgICAgfCBncmVwIC1xIF9fQVJNX0VBQklfXwotCXRoZW4KLQkgICAgZWNobyAke1VOQU1FX01BQ0hJTkV9LXVua25vd24tbGludXgtZ251Ci0JZWxzZQotCSAgICBlY2hvICR7VU5BTUVfTUFDSElORX0tdW5rbm93bi1saW51eC1nbnVlYWJpCi0JZmkKLQlleGl0IDs7Ci0gICAgYXZyMzIqOkxpbnV4Oio6KikKLQllY2hvICR7VU5BTUVfTUFDSElORX0tdW5rbm93bi1saW51eC1nbnUKLQlleGl0IDs7Ci0gICAgY3JpczpMaW51eDoqOiopCi0JZWNobyBjcmlzLWF4aXMtbGludXgtZ251Ci0JZXhpdCA7OwotICAgIGNyaXN2MzI6TGludXg6KjoqKQotCWVjaG8gY3Jpc3YzMi1heGlzLWxpbnV4LWdudQotCWV4aXQgOzsKLSAgICBmcnY6TGludXg6KjoqKQotICAgIAllY2hvIGZydi11bmtub3duLWxpbnV4LWdudQotCWV4aXQgOzsKLSAgICBpKjg2OkxpbnV4Oio6KikKLQlMSUJDPWdudQotCWV2YWwgJHNldF9jY19mb3JfYnVpbGQKLQlzZWQgJ3MvXgkvLycgPDwgRU9GID4kZHVtbXkuYwotCSNpZmRlZiBfX2RpZXRsaWJjX18KLQlMSUJDPWRpZXRsaWJjCi0JI2VuZGlmCi1FT0YKLQlldmFsIGAkQ0NfRk9SX0JVSUxEIC1FICRkdW1teS5jIDI+L2Rldi9udWxsIHwgZ3JlcCAnXkxJQkMnYAotCWVjaG8gIiR7VU5BTUVfTUFDSElORX0tcGMtbGludXgtJHtMSUJDfSIKLQlleGl0IDs7Ci0gICAgaWE2NDpMaW51eDoqOiopCi0JZWNobyAke1VOQU1FX01BQ0hJTkV9LXVua25vd24tbGludXgtZ251Ci0JZXhpdCA7OwotICAgIG0zMnIqOkxpbnV4Oio6KikKLQllY2hvICR7VU5BTUVfTUFDSElORX0tdW5rbm93bi1saW51eC1nbnUKLQlleGl0IDs7Ci0gICAgbTY4KjpMaW51eDoqOiopCi0JZWNobyAke1VOQU1FX01BQ0hJTkV9LXVua25vd24tbGludXgtZ251Ci0JZXhpdCA7OwotICAgIG1pcHM6TGludXg6KjoqIHwgbWlwczY0OkxpbnV4Oio6KikKLQlldmFsICRzZXRfY2NfZm9yX2J1aWxkCi0Jc2VkICdzL14JLy8nIDw8IEVPRiA+JGR1bW15LmMKLQkjdW5kZWYgQ1BVCi0JI3VuZGVmICR7VU5BTUVfTUFDSElORX0KLQkjdW5kZWYgJHtVTkFNRV9NQUNISU5FfWVsCi0JI2lmIGRlZmluZWQoX19NSVBTRUxfXykgfHwgZGVmaW5lZChfX01JUFNFTCkgfHwgZGVmaW5lZChfTUlQU0VMKSB8fCBkZWZpbmVkKE1JUFNFTCkKLQlDUFU9JHtVTkFNRV9NQUNISU5FfWVsCi0JI2Vsc2UKLQkjaWYgZGVmaW5lZChfX01JUFNFQl9fKSB8fCBkZWZpbmVkKF9fTUlQU0VCKSB8fCBkZWZpbmVkKF9NSVBTRUIpIHx8IGRlZmluZWQoTUlQU0VCKQotCUNQVT0ke1VOQU1FX01BQ0hJTkV9Ci0JI2Vsc2UKLQlDUFU9Ci0JI2VuZGlmCi0JI2VuZGlmCi1FT0YKLQlldmFsIGAkQ0NfRk9SX0JVSUxEIC1FICRkdW1teS5jIDI+L2Rldi9udWxsIHwgZ3JlcCAnXkNQVSdgCi0JdGVzdCB4IiR7Q1BVfSIgIT0geCAmJiB7IGVjaG8gIiR7Q1BVfS11bmtub3duLWxpbnV4LWdudSI7IGV4aXQ7IH0KLQk7OwotICAgIG9yMzI6TGludXg6KjoqKQotCWVjaG8gb3IzMi11bmtub3duLWxpbnV4LWdudQotCWV4aXQgOzsKLSAgICBwYWRyZTpMaW51eDoqOiopCi0JZWNobyBzcGFyYy11bmtub3duLWxpbnV4LWdudQotCWV4aXQgOzsKLSAgICBwYXJpc2M2NDpMaW51eDoqOiogfCBocHBhNjQ6TGludXg6KjoqKQotCWVjaG8gaHBwYTY0LXVua25vd24tbGludXgtZ251Ci0JZXhpdCA7OwotICAgIHBhcmlzYzpMaW51eDoqOiogfCBocHBhOkxpbnV4Oio6KikKLQkjIExvb2sgZm9yIENQVSBsZXZlbAotCWNhc2UgYGdyZXAgJ15jcHVbXmEtel0qOicgL3Byb2MvY3B1aW5mbyAyPi9kZXYvbnVsbCB8IGN1dCAtZCcgJyAtZjJgIGluCi0JICBQQTcqKSBlY2hvIGhwcGExLjEtdW5rbm93bi1saW51eC1nbnUgOzsKLQkgIFBBOCopIGVjaG8gaHBwYTIuMC11bmtub3duLWxpbnV4LWdudSA7OwotCSAgKikgICAgZWNobyBocHBhLXVua25vd24tbGludXgtZ251IDs7Ci0JZXNhYwotCWV4aXQgOzsKLSAgICBwcGM2NDpMaW51eDoqOiopCi0JZWNobyBwb3dlcnBjNjQtdW5rbm93bi1saW51eC1nbnUKLQlleGl0IDs7Ci0gICAgcHBjOkxpbnV4Oio6KikKLQllY2hvIHBvd2VycGMtdW5rbm93bi1saW51eC1nbnUKLQlleGl0IDs7Ci0gICAgczM5MDpMaW51eDoqOiogfCBzMzkweDpMaW51eDoqOiopCi0JZWNobyAke1VOQU1FX01BQ0hJTkV9LWlibS1saW51eAotCWV4aXQgOzsKLSAgICBzaDY0KjpMaW51eDoqOiopCi0gICAgCWVjaG8gJHtVTkFNRV9NQUNISU5FfS11bmtub3duLWxpbnV4LWdudQotCWV4aXQgOzsKLSAgICBzaCo6TGludXg6KjoqKQotCWVjaG8gJHtVTkFNRV9NQUNISU5FfS11bmtub3duLWxpbnV4LWdudQotCWV4aXQgOzsKLSAgICBzcGFyYzpMaW51eDoqOiogfCBzcGFyYzY0OkxpbnV4Oio6KikKLQllY2hvICR7VU5BTUVfTUFDSElORX0tdW5rbm93bi1saW51eC1nbnUKLQlleGl0IDs7Ci0gICAgdmF4OkxpbnV4Oio6KikKLQllY2hvICR7VU5BTUVfTUFDSElORX0tZGVjLWxpbnV4LWdudQotCWV4aXQgOzsKLSAgICB4ODZfNjQ6TGludXg6KjoqKQotCWVjaG8geDg2XzY0LXVua25vd24tbGludXgtZ251Ci0JZXhpdCA7OwotICAgIHh0ZW5zYSo6TGludXg6KjoqKQotICAgIAllY2hvICR7VU5BTUVfTUFDSElORX0tdW5rbm93bi1saW51eC1nbnUKLQlleGl0IDs7Ci0gICAgaSo4NjpEWU5JWC9wdHg6NCo6KikKLQkjIHB0eCA0LjAgZG9lcyB1bmFtZSAtcyBjb3JyZWN0bHksIHdpdGggRFlOSVgvcHR4IGluIHRoZXJlLgotCSMgZWFybGllciB2ZXJzaW9ucyBhcmUgbWVzc2VkIHVwIGFuZCBwdXQgdGhlIG5vZGVuYW1lIGluIGJvdGgKLQkjIHN5c25hbWUgYW5kIG5vZGVuYW1lLgotCWVjaG8gaTM4Ni1zZXF1ZW50LXN5c3Y0Ci0JZXhpdCA7OwotICAgIGkqODY6VU5JWF9TVjo0LjJNUDoyLiopCi0gICAgICAgICMgVW5peHdhcmUgaXMgYW4gb2Zmc2hvb3Qgb2YgU1ZSNCwgYnV0IGl0IGhhcyBpdHMgb3duIHZlcnNpb24KLSAgICAgICAgIyBudW1iZXIgc2VyaWVzIHN0YXJ0aW5nIHdpdGggMi4uLgotICAgICAgICAjIEkgYW0gbm90IHBvc2l0aXZlIHRoYXQgb3RoZXIgU1ZSNCBzeXN0ZW1zIHdvbid0IG1hdGNoIHRoaXMsCi0JIyBJIGp1c3QgaGF2ZSB0byBob3BlLiAgLS0gcm1zLgotICAgICAgICAjIFVzZSBzeXN2NC4ydXcuLi4gc28gdGhhdCBzeXN2NCogbWF0Y2hlcyBpdC4KLQllY2hvICR7VU5BTUVfTUFDSElORX0tcGMtc3lzdjQuMnV3JHtVTkFNRV9WRVJTSU9OfQotCWV4aXQgOzsKLSAgICBpKjg2Ok9TLzI6KjoqKQotCSMgSWYgd2Ugd2VyZSBhYmxlIHRvIGZpbmQgYHVuYW1lJywgdGhlbiBFTVggVW5peCBjb21wYXRpYmlsaXR5Ci0JIyBpcyBwcm9iYWJseSBpbnN0YWxsZWQuCi0JZWNobyAke1VOQU1FX01BQ0hJTkV9LXBjLW9zMi1lbXgKLQlleGl0IDs7Ci0gICAgaSo4NjpYVFMtMzAwOio6U1RPUCkKLQllY2hvICR7VU5BTUVfTUFDSElORX0tdW5rbm93bi1zdG9wCi0JZXhpdCA7OwotICAgIGkqODY6YXRoZW9zOio6KikKLQllY2hvICR7VU5BTUVfTUFDSElORX0tdW5rbm93bi1hdGhlb3MKLQlleGl0IDs7Ci0gICAgaSo4NjpzeWxsYWJsZToqOiopCi0JZWNobyAke1VOQU1FX01BQ0hJTkV9LXBjLXN5bGxhYmxlCi0JZXhpdCA7OwotICAgIGkqODY6THlueE9TOjIuKjoqIHwgaSo4NjpMeW54T1M6My5bMDFdKjoqIHwgaSo4NjpMeW54T1M6NC5bMDJdKjoqKQotCWVjaG8gaTM4Ni11bmtub3duLWx5bnhvcyR7VU5BTUVfUkVMRUFTRX0KLQlleGl0IDs7Ci0gICAgaSo4NjoqRE9TOio6KikKLQllY2hvICR7VU5BTUVfTUFDSElORX0tcGMtbXNkb3NkamdwcAotCWV4aXQgOzsKLSAgICBpKjg2Oio6NC4qOiogfCBpKjg2OlNZU1RFTV9WOjQuKjoqKQotCVVOQU1FX1JFTD1gZWNobyAke1VOQU1FX1JFTEVBU0V9IHwgc2VkICdzL1wvTVAkLy8nYAotCWlmIGdyZXAgTm92ZWxsIC91c3IvaW5jbHVkZS9saW5rLmggPi9kZXYvbnVsbCAyPi9kZXYvbnVsbDsgdGhlbgotCQllY2hvICR7VU5BTUVfTUFDSElORX0tdW5pdmVsLXN5c3Yke1VOQU1FX1JFTH0KLQllbHNlCi0JCWVjaG8gJHtVTkFNRV9NQUNISU5FfS1wYy1zeXN2JHtVTkFNRV9SRUx9Ci0JZmkKLQlleGl0IDs7Ci0gICAgaSo4NjoqOjU6WzY3OF0qKQotICAgIAkjIFVuaXhXYXJlIDcueCwgT3BlblVOSVggYW5kIE9wZW5TZXJ2ZXIgNi4KLQljYXNlIGAvYmluL3VuYW1lIC1YIHwgZ3JlcCAiXk1hY2hpbmUiYCBpbgotCSAgICAqNDg2KikJICAgICBVTkFNRV9NQUNISU5FPWk0ODYgOzsKLQkgICAgKlBlbnRpdW0pCSAgICAgVU5BTUVfTUFDSElORT1pNTg2IDs7Ci0JICAgICpQZW50KnwqQ2VsZXJvbikgVU5BTUVfTUFDSElORT1pNjg2IDs7Ci0JZXNhYwotCWVjaG8gJHtVTkFNRV9NQUNISU5FfS11bmtub3duLXN5c3Yke1VOQU1FX1JFTEVBU0V9JHtVTkFNRV9TWVNURU19JHtVTkFNRV9WRVJTSU9OfQotCWV4aXQgOzsKLSAgICBpKjg2Oio6My4yOiopCi0JaWYgdGVzdCAtZiAvdXNyL29wdGlvbnMvY2IubmFtZTsgdGhlbgotCQlVTkFNRV9SRUw9YHNlZCAtbiAncy8uKlZlcnNpb24gLy9wJyA8L3Vzci9vcHRpb25zL2NiLm5hbWVgCi0JCWVjaG8gJHtVTkFNRV9NQUNISU5FfS1wYy1pc2MkVU5BTUVfUkVMCi0JZWxpZiAvYmluL3VuYW1lIC1YIDI+L2Rldi9udWxsID4vZGV2L251bGwgOyB0aGVuCi0JCVVOQU1FX1JFTD1gKC9iaW4vdW5hbWUgLVh8Z3JlcCBSZWxlYXNlfHNlZCAtZSAncy8uKj0gLy8nKWAKLQkJKC9iaW4vdW5hbWUgLVh8Z3JlcCBpODA0ODYgPi9kZXYvbnVsbCkgJiYgVU5BTUVfTUFDSElORT1pNDg2Ci0JCSgvYmluL3VuYW1lIC1YfGdyZXAgJ15NYWNoaW5lLipQZW50aXVtJyA+L2Rldi9udWxsKSBcCi0JCQkmJiBVTkFNRV9NQUNISU5FPWk1ODYKLQkJKC9iaW4vdW5hbWUgLVh8Z3JlcCAnXk1hY2hpbmUuKlBlbnQgKklJJyA+L2Rldi9udWxsKSBcCi0JCQkmJiBVTkFNRV9NQUNISU5FPWk2ODYKLQkJKC9iaW4vdW5hbWUgLVh8Z3JlcCAnXk1hY2hpbmUuKlBlbnRpdW0gUHJvJyA+L2Rldi9udWxsKSBcCi0JCQkmJiBVTkFNRV9NQUNISU5FPWk2ODYKLQkJZWNobyAke1VOQU1FX01BQ0hJTkV9LXBjLXNjbyRVTkFNRV9SRUwKLQllbHNlCi0JCWVjaG8gJHtVTkFNRV9NQUNISU5FfS1wYy1zeXN2MzIKLQlmaQotCWV4aXQgOzsKLSAgICBwYzoqOio6KikKLQkjIExlZnQgaGVyZSBmb3IgY29tcGF0aWJpbGl0eToKLSAgICAgICAgIyB1bmFtZSAtbSBwcmludHMgZm9yIERKR1BQIGFsd2F5cyAncGMnLCBidXQgaXQgcHJpbnRzIG5vdGhpbmcgYWJvdXQKLSAgICAgICAgIyB0aGUgcHJvY2Vzc29yLCBzbyB3ZSBwbGF5IHNhZmUgYnkgYXNzdW1pbmcgaTU4Ni4KLQkjIE5vdGU6IHdoYXRldmVyIHRoaXMgaXMsIGl0IE1VU1QgYmUgdGhlIHNhbWUgYXMgd2hhdCBjb25maWcuc3ViCi0JIyBwcmludHMgZm9yIHRoZSAiZGpncHAiIGhvc3QsIG9yIGVsc2UgR0RCIGNvbmZpZ3VyeSB3aWxsIGRlY2lkZSB0aGF0Ci0JIyB0aGlzIGlzIGEgY3Jvc3MtYnVpbGQuCi0JZWNobyBpNTg2LXBjLW1zZG9zZGpncHAKLSAgICAgICAgZXhpdCA7OwotICAgIEludGVsOk1hY2g6Myo6KikKLQllY2hvIGkzODYtcGMtbWFjaDMKLQlleGl0IDs7Ci0gICAgcGFyYWdvbjoqOio6KikKLQllY2hvIGk4NjAtaW50ZWwtb3NmMQotCWV4aXQgOzsKLSAgICBpODYwOio6NC4qOiopICMgaTg2MC1TVlI0Ci0JaWYgZ3JlcCBTdGFyZGVudCAvdXNyL2luY2x1ZGUvc3lzL3VhZG1pbi5oID4vZGV2L251bGwgMj4mMSA7IHRoZW4KLQkgIGVjaG8gaTg2MC1zdGFyZGVudC1zeXN2JHtVTkFNRV9SRUxFQVNFfSAjIFN0YXJkZW50IFZpc3RyYSBpODYwLVNWUjQKLQllbHNlICMgQWRkIG90aGVyIGk4NjAtU1ZSNCB2ZW5kb3JzIGJlbG93IGFzIHRoZXkgYXJlIGRpc2NvdmVyZWQuCi0JICBlY2hvIGk4NjAtdW5rbm93bi1zeXN2JHtVTkFNRV9SRUxFQVNFfSAgIyBVbmtub3duIGk4NjAtU1ZSNAotCWZpCi0JZXhpdCA7OwotICAgIG1pbmkqOkNUSVg6U1lTKjU6KikKLQkjICJtaW5pZnJhbWUiCi0JZWNobyBtNjgwMTAtY29udmVyZ2VudC1zeXN2Ci0JZXhpdCA7OwotICAgIG1jNjhrOlVOSVg6U1lTVEVNNTozLjUxbSkKLQllY2hvIG02OGstY29udmVyZ2VudC1zeXN2Ci0JZXhpdCA7OwotICAgIE02ODA/MDpELU5JWDo1LjM6KikKLQllY2hvIG02OGstZGlhYi1kbml4Ci0JZXhpdCA7OwotICAgIE02OCo6KjpSM1ZbNTY3OF0qOiopCi0JdGVzdCAtciAvc3lzVjY4ICYmIHsgZWNobyAnbTY4ay1tb3Rvcm9sYS1zeXN2JzsgZXhpdDsgfSA7OwotICAgIDNbMzQ1XT8/Oio6NC4wOjMuMCB8IDNbMzRdPz9BOio6NC4wOjMuMCB8IDNbMzRdPz8sKjoqOjQuMDozLjAgfCAzWzM0XT8/Lyo6Kjo0LjA6My4wIHwgNDQwMDoqOjQuMDozLjAgfCA0ODUwOio6NC4wOjMuMCB8IFNLQTQwOio6NC4wOjMuMCB8IFNEUzI6Kjo0LjA6My4wIHwgU0hHMjoqOjQuMDozLjAgfCBTNzUwMSo6Kjo0LjA6My4wKQotCU9TX1JFTD0nJwotCXRlc3QgLXIgL2V0Yy8ucmVsaWQgXAotCSYmIE9TX1JFTD0uYHNlZCAtbiAncy9bXiBdKiBbXiBdKiBcKFswLTldWzAtOV1cKS4qL1wxL3AnIDwgL2V0Yy8ucmVsaWRgCi0JL2Jpbi91bmFtZSAtcCAyPi9kZXYvbnVsbCB8IGdyZXAgODYgPi9kZXYvbnVsbCBcCi0JICAmJiB7IGVjaG8gaTQ4Ni1uY3Itc3lzdjQuMyR7T1NfUkVMfTsgZXhpdDsgfQotCS9iaW4vdW5hbWUgLXAgMj4vZGV2L251bGwgfCAvYmluL2dyZXAgZW50aXVtID4vZGV2L251bGwgXAotCSAgJiYgeyBlY2hvIGk1ODYtbmNyLXN5c3Y0LjMke09TX1JFTH07IGV4aXQ7IH0gOzsKLSAgICAzWzM0XT8/Oio6NC4wOiogfCAzWzM0XT8/LCo6Kjo0LjA6KikKLSAgICAgICAgL2Jpbi91bmFtZSAtcCAyPi9kZXYvbnVsbCB8IGdyZXAgODYgPi9kZXYvbnVsbCBcCi0gICAgICAgICAgJiYgeyBlY2hvIGk0ODYtbmNyLXN5c3Y0OyBleGl0OyB9IDs7Ci0gICAgTkNSKjoqOjQuMjoqIHwgTVBSQVMqOio6NC4yOiopCi0JT1NfUkVMPScuMycKLQl0ZXN0IC1yIC9ldGMvLnJlbGlkIFwKLQkgICAgJiYgT1NfUkVMPS5gc2VkIC1uICdzL1teIF0qIFteIF0qIFwoWzAtOV1bMC05XVwpLiovXDEvcCcgPCAvZXRjLy5yZWxpZGAKLQkvYmluL3VuYW1lIC1wIDI+L2Rldi9udWxsIHwgZ3JlcCA4NiA+L2Rldi9udWxsIFwKLQkgICAgJiYgeyBlY2hvIGk0ODYtbmNyLXN5c3Y0LjMke09TX1JFTH07IGV4aXQ7IH0KLQkvYmluL3VuYW1lIC1wIDI+L2Rldi9udWxsIHwgL2Jpbi9ncmVwIGVudGl1bSA+L2Rldi9udWxsIFwKLQkgICAgJiYgeyBlY2hvIGk1ODYtbmNyLXN5c3Y0LjMke09TX1JFTH07IGV4aXQ7IH0KLQkvYmluL3VuYW1lIC1wIDI+L2Rldi9udWxsIHwgL2Jpbi9ncmVwIHB0ZXJvbiA+L2Rldi9udWxsIFwKLQkgICAgJiYgeyBlY2hvIGk1ODYtbmNyLXN5c3Y0LjMke09TX1JFTH07IGV4aXQ7IH0gOzsKLSAgICBtNjgqOkx5bnhPUzoyLio6KiB8IG02OCo6THlueE9TOjMuMCo6KikKLQllY2hvIG02OGstdW5rbm93bi1seW54b3Mke1VOQU1FX1JFTEVBU0V9Ci0JZXhpdCA7OwotICAgIG1jNjgwMzA6VU5JWF9TeXN0ZW1fVjo0Lio6KikKLQllY2hvIG02OGstYXRhcmktc3lzdjQKLQlleGl0IDs7Ci0gICAgVFNVTkFNSTpMeW54T1M6Mi4qOiopCi0JZWNobyBzcGFyYy11bmtub3duLWx5bnhvcyR7VU5BTUVfUkVMRUFTRX0KLQlleGl0IDs7Ci0gICAgcnM2MDAwOkx5bnhPUzoyLio6KikKLQllY2hvIHJzNjAwMC11bmtub3duLWx5bnhvcyR7VU5BTUVfUkVMRUFTRX0KLQlleGl0IDs7Ci0gICAgUG93ZXJQQzpMeW54T1M6Mi4qOiogfCBQb3dlclBDOkx5bnhPUzozLlswMV0qOiogfCBQb3dlclBDOkx5bnhPUzo0LlswMl0qOiopCi0JZWNobyBwb3dlcnBjLXVua25vd24tbHlueG9zJHtVTkFNRV9SRUxFQVNFfQotCWV4aXQgOzsKLSAgICBTTVtCRV1TOlVOSVhfU1Y6KjoqKQotCWVjaG8gbWlwcy1kZGUtc3lzdiR7VU5BTUVfUkVMRUFTRX0KLQlleGl0IDs7Ci0gICAgUk0qOlJlbGlhbnRVTklYLSo6KjoqKQotCWVjaG8gbWlwcy1zbmktc3lzdjQKLQlleGl0IDs7Ci0gICAgUk0qOlNJTklYLSo6KjoqKQotCWVjaG8gbWlwcy1zbmktc3lzdjQKLQlleGl0IDs7Ci0gICAgKjpTSU5JWC0qOio6KikKLQlpZiB1bmFtZSAtcCAyPi9kZXYvbnVsbCA+L2Rldi9udWxsIDsgdGhlbgotCQlVTkFNRV9NQUNISU5FPWAodW5hbWUgLXApIDI+L2Rldi9udWxsYAotCQllY2hvICR7VU5BTUVfTUFDSElORX0tc25pLXN5c3Y0Ci0JZWxzZQotCQllY2hvIG5zMzJrLXNuaS1zeXN2Ci0JZmkKLQlleGl0IDs7Ci0gICAgUEVOVElVTToqOjQuMCo6KikgIyBVbmlzeXMgYENsZWFyUGF0aCBITVAgSVggNDAwMCcgU1ZSNC9NUCBlZmZvcnQKLSAgICAgICAgICAgICAgICAgICAgICAjIHNheXMgPFJpY2hhcmQuTS5CYXJ0ZWxAY2NNYWlsLkNlbnN1cy5HT1Y+Ci0gICAgICAgIGVjaG8gaTU4Ni11bmlzeXMtc3lzdjQKLSAgICAgICAgZXhpdCA7OwotICAgICo6VU5JWF9TeXN0ZW1fVjo0KjpGVFgqKQotCSMgRnJvbSBHZXJhbGQgSGV3ZXMgPGhld2VzQG9wZW5tYXJrZXQuY29tPi4KLQkjIEhvdyBhYm91dCBkaWZmZXJlbnRpYXRpbmcgYmV0d2VlbiBzdHJhdHVzIGFyY2hpdGVjdHVyZXM/IC1kam0KLQllY2hvIGhwcGExLjEtc3RyYXR1cy1zeXN2NAotCWV4aXQgOzsKLSAgICAqOio6KjpGVFgqKQotCSMgRnJvbSBzZWFuZkBzd2RjLnN0cmF0dXMuY29tLgotCWVjaG8gaTg2MC1zdHJhdHVzLXN5c3Y0Ci0JZXhpdCA7OwotICAgIGkqODY6Vk9TOio6KikKLQkjIEZyb20gUGF1bC5HcmVlbkBzdHJhdHVzLmNvbS4KLQllY2hvICR7VU5BTUVfTUFDSElORX0tc3RyYXR1cy12b3MKLQlleGl0IDs7Ci0gICAgKjpWT1M6KjoqKQotCSMgRnJvbSBQYXVsLkdyZWVuQHN0cmF0dXMuY29tLgotCWVjaG8gaHBwYTEuMS1zdHJhdHVzLXZvcwotCWV4aXQgOzsKLSAgICBtYzY4KjpBL1VYOio6KikKLQllY2hvIG02OGstYXBwbGUtYXV4JHtVTkFNRV9SRUxFQVNFfQotCWV4aXQgOzsKLSAgICBuZXdzKjpORVdTLU9TOjYqOiopCi0JZWNobyBtaXBzLXNvbnktbmV3c29zNgotCWV4aXQgOzsKLSAgICBSWzM0XTAwMDoqU3lzdGVtX1YqOio6KiB8IFI0MDAwOlVOSVhfU1lTVjoqOiogfCBSKjAwMDpVTklYX1NWOio6KikKLQlpZiBbIC1kIC91c3IvbmVjIF07IHRoZW4KLQkgICAgICAgIGVjaG8gbWlwcy1uZWMtc3lzdiR7VU5BTUVfUkVMRUFTRX0KLQllbHNlCi0JICAgICAgICBlY2hvIG1pcHMtdW5rbm93bi1zeXN2JHtVTkFNRV9SRUxFQVNFfQotCWZpCi0gICAgICAgIGV4aXQgOzsKLSAgICBCZUJveDpCZU9TOio6KikJIyBCZU9TIHJ1bm5pbmcgb24gaGFyZHdhcmUgbWFkZSBieSBCZSwgUFBDIG9ubHkuCi0JZWNobyBwb3dlcnBjLWJlLWJlb3MKLQlleGl0IDs7Ci0gICAgQmVNYWM6QmVPUzoqOiopCSMgQmVPUyBydW5uaW5nIG9uIE1hYyBvciBNYWMgY2xvbmUsIFBQQyBvbmx5LgotCWVjaG8gcG93ZXJwYy1hcHBsZS1iZW9zCi0JZXhpdCA7OwotICAgIEJlUEM6QmVPUzoqOiopCSMgQmVPUyBydW5uaW5nIG9uIEludGVsIFBDIGNvbXBhdGlibGUuCi0JZWNobyBpNTg2LXBjLWJlb3MKLQlleGl0IDs7Ci0gICAgQmVQQzpIYWlrdToqOiopCSMgSGFpa3UgcnVubmluZyBvbiBJbnRlbCBQQyBjb21wYXRpYmxlLgotCWVjaG8gaTU4Ni1wYy1oYWlrdQotCWV4aXQgOzsKLSAgICBTWC00OlNVUEVSLVVYOio6KikKLQllY2hvIHN4NC1uZWMtc3VwZXJ1eCR7VU5BTUVfUkVMRUFTRX0KLQlleGl0IDs7Ci0gICAgU1gtNTpTVVBFUi1VWDoqOiopCi0JZWNobyBzeDUtbmVjLXN1cGVydXgke1VOQU1FX1JFTEVBU0V9Ci0JZXhpdCA7OwotICAgIFNYLTY6U1VQRVItVVg6KjoqKQotCWVjaG8gc3g2LW5lYy1zdXBlcnV4JHtVTkFNRV9SRUxFQVNFfQotCWV4aXQgOzsKLSAgICBTWC03OlNVUEVSLVVYOio6KikKLQllY2hvIHN4Ny1uZWMtc3VwZXJ1eCR7VU5BTUVfUkVMRUFTRX0KLQlleGl0IDs7Ci0gICAgU1gtODpTVVBFUi1VWDoqOiopCi0JZWNobyBzeDgtbmVjLXN1cGVydXgke1VOQU1FX1JFTEVBU0V9Ci0JZXhpdCA7OwotICAgIFNYLThSOlNVUEVSLVVYOio6KikKLQllY2hvIHN4OHItbmVjLXN1cGVydXgke1VOQU1FX1JFTEVBU0V9Ci0JZXhpdCA7OwotICAgIFBvd2VyKjpSaGFwc29keToqOiopCi0JZWNobyBwb3dlcnBjLWFwcGxlLXJoYXBzb2R5JHtVTkFNRV9SRUxFQVNFfQotCWV4aXQgOzsKLSAgICAqOlJoYXBzb2R5Oio6KikKLQllY2hvICR7VU5BTUVfTUFDSElORX0tYXBwbGUtcmhhcHNvZHkke1VOQU1FX1JFTEVBU0V9Ci0JZXhpdCA7OwotICAgICo6RGFyd2luOio6KikKLQlVTkFNRV9QUk9DRVNTT1I9YHVuYW1lIC1wYCB8fCBVTkFNRV9QUk9DRVNTT1I9dW5rbm93bgotCWNhc2UgJFVOQU1FX1BST0NFU1NPUiBpbgotCSAgICBpMzg2KQotCQlldmFsICRzZXRfY2NfZm9yX2J1aWxkCi0JCWlmIFsgIiRDQ19GT1JfQlVJTEQiICE9ICdub19jb21waWxlcl9mb3VuZCcgXTsgdGhlbgotCQkgIGlmIChlY2hvICcjaWZkZWYgX19MUDY0X18nOyBlY2hvIElTXzY0QklUX0FSQ0g7IGVjaG8gJyNlbmRpZicpIHwgXAotCQkgICAgICAoQ0NPUFRTPSAkQ0NfRk9SX0JVSUxEIC1FIC0gMj4vZGV2L251bGwpIHwgXAotCQkgICAgICBncmVwIElTXzY0QklUX0FSQ0ggPi9kZXYvbnVsbAotCQkgIHRoZW4KLQkJICAgICAgVU5BTUVfUFJPQ0VTU09SPSJ4ODZfNjQiCi0JCSAgZmkKLQkJZmkgOzsKLQkgICAgdW5rbm93bikgVU5BTUVfUFJPQ0VTU09SPXBvd2VycGMgOzsKLQllc2FjCi0JZWNobyAke1VOQU1FX1BST0NFU1NPUn0tYXBwbGUtZGFyd2luJHtVTkFNRV9SRUxFQVNFfQotCWV4aXQgOzsKLSAgICAqOnByb2NudG8qOio6KiB8ICo6UU5YOlswMTIzNDU2Nzg5XSo6KikKLQlVTkFNRV9QUk9DRVNTT1I9YHVuYW1lIC1wYAotCWlmIHRlc3QgIiRVTkFNRV9QUk9DRVNTT1IiID0gIng4NiI7IHRoZW4KLQkJVU5BTUVfUFJPQ0VTU09SPWkzODYKLQkJVU5BTUVfTUFDSElORT1wYwotCWZpCi0JZWNobyAke1VOQU1FX1BST0NFU1NPUn0tJHtVTkFNRV9NQUNISU5FfS1udG8tcW54JHtVTkFNRV9SRUxFQVNFfQotCWV4aXQgOzsKLSAgICAqOlFOWDoqOjQqKQotCWVjaG8gaTM4Ni1wYy1xbngKLQlleGl0IDs7Ci0gICAgTlNFLT86Tk9OU1RPUF9LRVJORUw6KjoqKQotCWVjaG8gbnNlLXRhbmRlbS1uc2ske1VOQU1FX1JFTEVBU0V9Ci0JZXhpdCA7OwotICAgIE5TUi0/Ok5PTlNUT1BfS0VSTkVMOio6KikKLQllY2hvIG5zci10YW5kZW0tbnNrJHtVTkFNRV9SRUxFQVNFfQotCWV4aXQgOzsKLSAgICAqOk5vblN0b3AtVVg6KjoqKQotCWVjaG8gbWlwcy1jb21wYXEtbm9uc3RvcHV4Ci0JZXhpdCA7OwotICAgIEJTMjAwMDpQT1NJWCo6KjoqKQotCWVjaG8gYnMyMDAwLXNpZW1lbnMtc3lzdgotCWV4aXQgOzsKLSAgICBEUy8qOlVOSVhfU3lzdGVtX1Y6KjoqKQotCWVjaG8gJHtVTkFNRV9NQUNISU5FfS0ke1VOQU1FX1NZU1RFTX0tJHtVTkFNRV9SRUxFQVNFfQotCWV4aXQgOzsKLSAgICAqOlBsYW45Oio6KikKLQkjICJ1bmFtZSAtbSIgaXMgbm90IGNvbnNpc3RlbnQsIHNvIHVzZSAkY3B1dHlwZSBpbnN0ZWFkLiAzODYKLQkjIGlzIGNvbnZlcnRlZCB0byBpMzg2IGZvciBjb25zaXN0ZW5jeSB3aXRoIG90aGVyIHg4NgotCSMgb3BlcmF0aW5nIHN5c3RlbXMuCi0JaWYgdGVzdCAiJGNwdXR5cGUiID0gIjM4NiI7IHRoZW4KLQkgICAgVU5BTUVfTUFDSElORT1pMzg2Ci0JZWxzZQotCSAgICBVTkFNRV9NQUNISU5FPSIkY3B1dHlwZSIKLQlmaQotCWVjaG8gJHtVTkFNRV9NQUNISU5FfS11bmtub3duLXBsYW45Ci0JZXhpdCA7OwotICAgICo6VE9QUy0xMDoqOiopCi0JZWNobyBwZHAxMC11bmtub3duLXRvcHMxMAotCWV4aXQgOzsKLSAgICAqOlRFTkVYOio6KikKLQllY2hvIHBkcDEwLXVua25vd24tdGVuZXgKLQlleGl0IDs7Ci0gICAgS1MxMDpUT1BTLTIwOio6KiB8IEtMMTA6VE9QUy0yMDoqOiogfCBUWVBFNDpUT1BTLTIwOio6KikKLQllY2hvIHBkcDEwLWRlYy10b3BzMjAKLQlleGl0IDs7Ci0gICAgWEtMLTE6VE9QUy0yMDoqOiogfCBUWVBFNTpUT1BTLTIwOio6KikKLQllY2hvIHBkcDEwLXhrbC10b3BzMjAKLQlleGl0IDs7Ci0gICAgKjpUT1BTLTIwOio6KikKLQllY2hvIHBkcDEwLXVua25vd24tdG9wczIwCi0JZXhpdCA7OwotICAgICo6SVRTOio6KikKLQllY2hvIHBkcDEwLXVua25vd24taXRzCi0JZXhpdCA7OwotICAgIFNFSToqOio6U0VJVVgpCi0gICAgICAgIGVjaG8gbWlwcy1zZWktc2VpdXgke1VOQU1FX1JFTEVBU0V9Ci0JZXhpdCA7OwotICAgICo6RHJhZ29uRmx5Oio6KikKLQllY2hvICR7VU5BTUVfTUFDSElORX0tdW5rbm93bi1kcmFnb25mbHlgZWNobyAke1VOQU1FX1JFTEVBU0V9fHNlZCAtZSAncy9bLShdLiovLydgCi0JZXhpdCA7OwotICAgICo6KlZNUzoqOiopCi0gICAgCVVOQU1FX01BQ0hJTkU9YCh1bmFtZSAtcCkgMj4vZGV2L251bGxgCi0JY2FzZSAiJHtVTkFNRV9NQUNISU5FfSIgaW4KLQkgICAgQSopIGVjaG8gYWxwaGEtZGVjLXZtcyA7IGV4aXQgOzsKLQkgICAgSSopIGVjaG8gaWE2NC1kZWMtdm1zIDsgZXhpdCA7OwotCSAgICBWKikgZWNobyB2YXgtZGVjLXZtcyA7IGV4aXQgOzsKLQllc2FjIDs7Ci0gICAgKjpYRU5JWDoqOlN5c1YpCi0JZWNobyBpMzg2LXBjLXhlbml4Ci0JZXhpdCA7OwotICAgIGkqODY6c2t5b3M6KjoqKQotCWVjaG8gJHtVTkFNRV9NQUNISU5FfS1wYy1za3lvc2BlY2hvICR7VU5BTUVfUkVMRUFTRX1gIHwgc2VkIC1lICdzLyAuKiQvLycKLQlleGl0IDs7Ci0gICAgaSo4NjpyZG9zOio6KikKLQllY2hvICR7VU5BTUVfTUFDSElORX0tcGMtcmRvcwotCWV4aXQgOzsKLSAgICBpKjg2OkFST1M6KjoqKQotCWVjaG8gJHtVTkFNRV9NQUNISU5FfS1wYy1hcm9zCi0JZXhpdCA7OwotZXNhYwotCi0jZWNobyAnKE5vIHVuYW1lIGNvbW1hbmQgb3IgdW5hbWUgb3V0cHV0IG5vdCByZWNvZ25pemVkLiknIDE+JjIKLSNlY2hvICIke1VOQU1FX01BQ0hJTkV9OiR7VU5BTUVfU1lTVEVNfToke1VOQU1FX1JFTEVBU0V9OiR7VU5BTUVfVkVSU0lPTn0iIDE+JjIKLQotZXZhbCAkc2V0X2NjX2Zvcl9idWlsZAotY2F0ID4kZHVtbXkuYyA8PEVPRgotI2lmZGVmIF9TRVFVRU5UXwotIyBpbmNsdWRlIDxzeXMvdHlwZXMuaD4KLSMgaW5jbHVkZSA8c3lzL3V0c25hbWUuaD4KLSNlbmRpZgotbWFpbiAoKQotewotI2lmIGRlZmluZWQgKHNvbnkpCi0jaWYgZGVmaW5lZCAoTUlQU0VCKQotICAvKiBCRkQgd2FudHMgImJzZCIgaW5zdGVhZCBvZiAibmV3c29zIi4gIFBlcmhhcHMgQkZEIHNob3VsZCBiZSBjaGFuZ2VkLAotICAgICBJIGRvbid0IGtub3cuLi4uICAqLwotICBwcmludGYgKCJtaXBzLXNvbnktYnNkXG4iKTsgZXhpdCAoMCk7Ci0jZWxzZQotI2luY2x1ZGUgPHN5cy9wYXJhbS5oPgotICBwcmludGYgKCJtNjhrLXNvbnktbmV3c29zJXNcbiIsCi0jaWZkZWYgTkVXU09TNAotICAgICAgICAgICI0IgotI2Vsc2UKLQkgICIiCi0jZW5kaWYKLSAgICAgICAgICk7IGV4aXQgKDApOwotI2VuZGlmCi0jZW5kaWYKLQotI2lmIGRlZmluZWQgKF9fYXJtKSAmJiBkZWZpbmVkIChfX2Fjb3JuKSAmJiBkZWZpbmVkIChfX3VuaXgpCi0gIHByaW50ZiAoImFybS1hY29ybi1yaXNjaXhcbiIpOyBleGl0ICgwKTsKLSNlbmRpZgotCi0jaWYgZGVmaW5lZCAoaHAzMDApICYmICFkZWZpbmVkIChocHV4KQotICBwcmludGYgKCJtNjhrLWhwLWJzZFxuIik7IGV4aXQgKDApOwotI2VuZGlmCi0KLSNpZiBkZWZpbmVkIChOZVhUKQotI2lmICFkZWZpbmVkIChfX0FSQ0hJVEVDVFVSRV9fKQotI2RlZmluZSBfX0FSQ0hJVEVDVFVSRV9fICJtNjhrIgotI2VuZGlmCi0gIGludCB2ZXJzaW9uOwotICB2ZXJzaW9uPWAoaG9zdGluZm8gfCBzZWQgLW4gJ3MvLipOZVhUIE1hY2ggXChbMC05XSpcKS4qL1wxL3AnKSAyPi9kZXYvbnVsbGA7Ci0gIGlmICh2ZXJzaW9uIDwgNCkKLSAgICBwcmludGYgKCIlcy1uZXh0LW5leHRzdGVwJWRcbiIsIF9fQVJDSElURUNUVVJFX18sIHZlcnNpb24pOwotICBlbHNlCi0gICAgcHJpbnRmICgiJXMtbmV4dC1vcGVuc3RlcCVkXG4iLCBfX0FSQ0hJVEVDVFVSRV9fLCB2ZXJzaW9uKTsKLSAgZXhpdCAoMCk7Ci0jZW5kaWYKLQotI2lmIGRlZmluZWQgKE1VTFRJTUFYKSB8fCBkZWZpbmVkIChuMTYpCi0jaWYgZGVmaW5lZCAoVU1BWFYpCi0gIHByaW50ZiAoIm5zMzJrLWVuY29yZS1zeXN2XG4iKTsgZXhpdCAoMCk7Ci0jZWxzZQotI2lmIGRlZmluZWQgKENNVSkKLSAgcHJpbnRmICgibnMzMmstZW5jb3JlLW1hY2hcbiIpOyBleGl0ICgwKTsKLSNlbHNlCi0gIHByaW50ZiAoIm5zMzJrLWVuY29yZS1ic2RcbiIpOyBleGl0ICgwKTsKLSNlbmRpZgotI2VuZGlmCi0jZW5kaWYKLQotI2lmIGRlZmluZWQgKF9fMzg2QlNEX18pCi0gIHByaW50ZiAoImkzODYtcGMtYnNkXG4iKTsgZXhpdCAoMCk7Ci0jZW5kaWYKLQotI2lmIGRlZmluZWQgKHNlcXVlbnQpCi0jaWYgZGVmaW5lZCAoaTM4NikKLSAgcHJpbnRmICgiaTM4Ni1zZXF1ZW50LWR5bml4XG4iKTsgZXhpdCAoMCk7Ci0jZW5kaWYKLSNpZiBkZWZpbmVkIChuczMyMDAwKQotICBwcmludGYgKCJuczMyay1zZXF1ZW50LWR5bml4XG4iKTsgZXhpdCAoMCk7Ci0jZW5kaWYKLSNlbmRpZgotCi0jaWYgZGVmaW5lZCAoX1NFUVVFTlRfKQotICAgIHN0cnVjdCB1dHNuYW1lIHVuOwotCi0gICAgdW5hbWUoJnVuKTsKLQotICAgIGlmIChzdHJuY21wKHVuLnZlcnNpb24sICJWMiIsIDIpID09IDApIHsKLQlwcmludGYgKCJpMzg2LXNlcXVlbnQtcHR4MlxuIik7IGV4aXQgKDApOwotICAgIH0KLSAgICBpZiAoc3RybmNtcCh1bi52ZXJzaW9uLCAiVjEiLCAyKSA9PSAwKSB7IC8qIFhYWCBpcyBWMSBjb3JyZWN0PyAqLwotCXByaW50ZiAoImkzODYtc2VxdWVudC1wdHgxXG4iKTsgZXhpdCAoMCk7Ci0gICAgfQotICAgIHByaW50ZiAoImkzODYtc2VxdWVudC1wdHhcbiIpOyBleGl0ICgwKTsKLQotI2VuZGlmCi0KLSNpZiBkZWZpbmVkICh2YXgpCi0jIGlmICFkZWZpbmVkICh1bHRyaXgpCi0jICBpbmNsdWRlIDxzeXMvcGFyYW0uaD4KLSMgIGlmIGRlZmluZWQgKEJTRCkKLSMgICBpZiBCU0QgPT0gNDMKLSAgICAgIHByaW50ZiAoInZheC1kZWMtYnNkNC4zXG4iKTsgZXhpdCAoMCk7Ci0jICAgZWxzZQotIyAgICBpZiBCU0QgPT0gMTk5MDA2Ci0gICAgICBwcmludGYgKCJ2YXgtZGVjLWJzZDQuM3Jlbm9cbiIpOyBleGl0ICgwKTsKLSMgICAgZWxzZQotICAgICAgcHJpbnRmICgidmF4LWRlYy1ic2RcbiIpOyBleGl0ICgwKTsKLSMgICAgZW5kaWYKLSMgICBlbmRpZgotIyAgZWxzZQotICAgIHByaW50ZiAoInZheC1kZWMtYnNkXG4iKTsgZXhpdCAoMCk7Ci0jICBlbmRpZgotIyBlbHNlCi0gICAgcHJpbnRmICgidmF4LWRlYy11bHRyaXhcbiIpOyBleGl0ICgwKTsKLSMgZW5kaWYKLSNlbmRpZgotCi0jaWYgZGVmaW5lZCAoYWxsaWFudCkgJiYgZGVmaW5lZCAoaTg2MCkKLSAgcHJpbnRmICgiaTg2MC1hbGxpYW50LWJzZFxuIik7IGV4aXQgKDApOwotI2VuZGlmCi0KLSAgZXhpdCAoMSk7Ci19Ci1FT0YKLQotJENDX0ZPUl9CVUlMRCAtbyAkZHVtbXkgJGR1bW15LmMgMj4vZGV2L251bGwgJiYgU1lTVEVNX05BTUU9YCRkdW1teWAgJiYKLQl7IGVjaG8gIiRTWVNURU1fTkFNRSI7IGV4aXQ7IH0KLQotIyBBcG9sbG9zIHB1dCB0aGUgc3lzdGVtIHR5cGUgaW4gdGhlIGVudmlyb25tZW50LgotCi10ZXN0IC1kIC91c3IvYXBvbGxvICYmIHsgZWNobyAke0lTUH0tYXBvbGxvLSR7U1lTVFlQRX07IGV4aXQ7IH0KLQotIyBDb252ZXggdmVyc2lvbnMgdGhhdCBwcmVkYXRlIHVuYW1lIGNhbiB1c2UgZ2V0c3lzaW5mbygxKQotCi1pZiBbIC14IC91c3IvY29udmV4L2dldHN5c2luZm8gXQotdGhlbgotICAgIGNhc2UgYGdldHN5c2luZm8gLWYgY3B1X3R5cGVgIGluCi0gICAgYzEqKQotCWVjaG8gYzEtY29udmV4LWJzZAotCWV4aXQgOzsKLSAgICBjMiopCi0JaWYgZ2V0c3lzaW5mbyAtZiBzY2FsYXJfYWNjCi0JdGhlbiBlY2hvIGMzMi1jb252ZXgtYnNkCi0JZWxzZSBlY2hvIGMyLWNvbnZleC1ic2QKLQlmaQotCWV4aXQgOzsKLSAgICBjMzQqKQotCWVjaG8gYzM0LWNvbnZleC1ic2QKLQlleGl0IDs7Ci0gICAgYzM4KikKLQllY2hvIGMzOC1jb252ZXgtYnNkCi0JZXhpdCA7OwotICAgIGM0KikKLQllY2hvIGM0LWNvbnZleC1ic2QKLQlleGl0IDs7Ci0gICAgZXNhYwotZmkKLQotY2F0ID4mMiA8PEVPRgotJDA6IHVuYWJsZSB0byBndWVzcyBzeXN0ZW0gdHlwZQotCi1UaGlzIHNjcmlwdCwgbGFzdCBtb2RpZmllZCAkdGltZXN0YW1wLCBoYXMgZmFpbGVkIHRvIHJlY29nbml6ZQotdGhlIG9wZXJhdGluZyBzeXN0ZW0geW91IGFyZSB1c2luZy4gSXQgaXMgYWR2aXNlZCB0aGF0IHlvdQotZG93bmxvYWQgdGhlIG1vc3QgdXAgdG8gZGF0ZSB2ZXJzaW9uIG9mIHRoZSBjb25maWcgc2NyaXB0cyBmcm9tCi0KLSAgaHR0cDovL2dpdC5zYXZhbm5haC5nbnUub3JnL2dpdHdlYi8/cD1jb25maWcuZ2l0O2E9YmxvYl9wbGFpbjtmPWNvbmZpZy5ndWVzcztoYj1IRUFECi1hbmQKLSAgaHR0cDovL2dpdC5zYXZhbm5haC5nbnUub3JnL2dpdHdlYi8/cD1jb25maWcuZ2l0O2E9YmxvYl9wbGFpbjtmPWNvbmZpZy5zdWI7aGI9SEVBRAotCi1JZiB0aGUgdmVyc2lvbiB5b3UgcnVuICgkMCkgaXMgYWxyZWFkeSB1cCB0byBkYXRlLCBwbGVhc2UKLXNlbmQgdGhlIGZvbGxvd2luZyBkYXRhIGFuZCBhbnkgaW5mb3JtYXRpb24geW91IHRoaW5rIG1pZ2h0IGJlCi1wZXJ0aW5lbnQgdG8gPGNvbmZpZy1wYXRjaGVzQGdudS5vcmc+IGluIG9yZGVyIHRvIHByb3ZpZGUgdGhlIG5lZWRlZAotaW5mb3JtYXRpb24gdG8gaGFuZGxlIHlvdXIgc3lzdGVtLgotCi1jb25maWcuZ3Vlc3MgdGltZXN0YW1wID0gJHRpbWVzdGFtcAotCi11bmFtZSAtbSA9IGAodW5hbWUgLW0pIDI+L2Rldi9udWxsIHx8IGVjaG8gdW5rbm93bmAKLXVuYW1lIC1yID0gYCh1bmFtZSAtcikgMj4vZGV2L251bGwgfHwgZWNobyB1bmtub3duYAotdW5hbWUgLXMgPSBgKHVuYW1lIC1zKSAyPi9kZXYvbnVsbCB8fCBlY2hvIHVua25vd25gCi11bmFtZSAtdiA9IGAodW5hbWUgLXYpIDI+L2Rldi9udWxsIHx8IGVjaG8gdW5rbm93bmAKLQotL3Vzci9iaW4vdW5hbWUgLXAgPSBgKC91c3IvYmluL3VuYW1lIC1wKSAyPi9kZXYvbnVsbGAKLS9iaW4vdW5hbWUgLVggICAgID0gYCgvYmluL3VuYW1lIC1YKSAyPi9kZXYvbnVsbGAKLQotaG9zdGluZm8gICAgICAgICAgICAgICA9IGAoaG9zdGluZm8pIDI+L2Rldi9udWxsYAotL2Jpbi91bml2ZXJzZSAgICAgICAgICA9IGAoL2Jpbi91bml2ZXJzZSkgMj4vZGV2L251bGxgCi0vdXNyL2Jpbi9hcmNoIC1rICAgICAgID0gYCgvdXNyL2Jpbi9hcmNoIC1rKSAyPi9kZXYvbnVsbGAKLS9iaW4vYXJjaCAgICAgICAgICAgICAgPSBgKC9iaW4vYXJjaCkgMj4vZGV2L251bGxgCi0vdXNyL2Jpbi9vc2xldmVsICAgICAgID0gYCgvdXNyL2Jpbi9vc2xldmVsKSAyPi9kZXYvbnVsbGAKLS91c3IvY29udmV4L2dldHN5c2luZm8gPSBgKC91c3IvY29udmV4L2dldHN5c2luZm8pIDI+L2Rldi9udWxsYAotCi1VTkFNRV9NQUNISU5FID0gJHtVTkFNRV9NQUNISU5FfQotVU5BTUVfUkVMRUFTRSA9ICR7VU5BTUVfUkVMRUFTRX0KLVVOQU1FX1NZU1RFTSAgPSAke1VOQU1FX1NZU1RFTX0KLVVOQU1FX1ZFUlNJT04gPSAke1VOQU1FX1ZFUlNJT059Ci1FT0YKLQotZXhpdCAxCi0KLSMgTG9jYWwgdmFyaWFibGVzOgotIyBldmFsOiAoYWRkLWhvb2sgJ3dyaXRlLWZpbGUtaG9va3MgJ3RpbWUtc3RhbXApCi0jIHRpbWUtc3RhbXAtc3RhcnQ6ICJ0aW1lc3RhbXA9JyIKLSMgdGltZS1zdGFtcC1mb3JtYXQ6ICIlOnktJTAybS0lMDJkIgotIyB0aW1lLXN0YW1wLWVuZDogIiciCi0jIEVuZDoKZGlmZiAtLWdpdCBhL2NvbmZpZy5zdWIgYi9jb25maWcuc3ViCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAyYTU1YTUwLi4wMDAwMDAwCi0tLSBhL2NvbmZpZy5zdWIKKysrIC9kZXYvbnVsbApAQCAtMSwxNzA1ICswLDAgQEAKLSMhIC9iaW4vc2gKLSMgQ29uZmlndXJhdGlvbiB2YWxpZGF0aW9uIHN1YnJvdXRpbmUgc2NyaXB0LgotIyAgIENvcHlyaWdodCAoQykgMTk5MiwgMTk5MywgMTk5NCwgMTk5NSwgMTk5NiwgMTk5NywgMTk5OCwgMTk5OSwKLSMgICAyMDAwLCAyMDAxLCAyMDAyLCAyMDAzLCAyMDA0LCAyMDA1LCAyMDA2LCAyMDA3LCAyMDA4LCAyMDA5Ci0jICAgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCi0KLXRpbWVzdGFtcD0nMjAwOS0xMS0yMCcKLQotIyBUaGlzIGZpbGUgaXMgKGluIHByaW5jaXBsZSkgY29tbW9uIHRvIEFMTCBHTlUgc29mdHdhcmUuCi0jIFRoZSBwcmVzZW5jZSBvZiBhIG1hY2hpbmUgaW4gdGhpcyBmaWxlIHN1Z2dlc3RzIHRoYXQgU09NRSBHTlUgc29mdHdhcmUKLSMgY2FuIGhhbmRsZSB0aGF0IG1hY2hpbmUuICBJdCBkb2VzIG5vdCBpbXBseSBBTEwgR05VIHNvZnR3YXJlIGNhbi4KLSMKLSMgVGhpcyBmaWxlIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKLSMgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKLSMgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKLSMgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSMKLSMgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0jIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0jIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKLSMgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSMKLSMgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLSMgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKLSMgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0IC0gRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEKLSMgMDIxMTAtMTMwMSwgVVNBLgotIwotIyBBcyBhIHNwZWNpYWwgZXhjZXB0aW9uIHRvIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSwgaWYgeW91Ci0jIGRpc3RyaWJ1dGUgdGhpcyBmaWxlIGFzIHBhcnQgb2YgYSBwcm9ncmFtIHRoYXQgY29udGFpbnMgYQotIyBjb25maWd1cmF0aW9uIHNjcmlwdCBnZW5lcmF0ZWQgYnkgQXV0b2NvbmYsIHlvdSBtYXkgaW5jbHVkZSBpdCB1bmRlcgotIyB0aGUgc2FtZSBkaXN0cmlidXRpb24gdGVybXMgdGhhdCB5b3UgdXNlIGZvciB0aGUgcmVzdCBvZiB0aGF0IHByb2dyYW0uCi0KLQotIyBQbGVhc2Ugc2VuZCBwYXRjaGVzIHRvIDxjb25maWctcGF0Y2hlc0BnbnUub3JnPi4gIFN1Ym1pdCBhIGNvbnRleHQKLSMgZGlmZiBhbmQgYSBwcm9wZXJseSBmb3JtYXR0ZWQgR05VIENoYW5nZUxvZyBlbnRyeS4KLSMKLSMgQ29uZmlndXJhdGlvbiBzdWJyb3V0aW5lIHRvIHZhbGlkYXRlIGFuZCBjYW5vbmljYWxpemUgYSBjb25maWd1cmF0aW9uIHR5cGUuCi0jIFN1cHBseSB0aGUgc3BlY2lmaWVkIGNvbmZpZ3VyYXRpb24gdHlwZSBhcyBhbiBhcmd1bWVudC4KLSMgSWYgaXQgaXMgaW52YWxpZCwgd2UgcHJpbnQgYW4gZXJyb3IgbWVzc2FnZSBvbiBzdGRlcnIgYW5kIGV4aXQgd2l0aCBjb2RlIDEuCi0jIE90aGVyd2lzZSwgd2UgcHJpbnQgdGhlIGNhbm9uaWNhbCBjb25maWcgdHlwZSBvbiBzdGRvdXQgYW5kIHN1Y2NlZWQuCi0KLSMgWW91IGNhbiBnZXQgdGhlIGxhdGVzdCB2ZXJzaW9uIG9mIHRoaXMgc2NyaXB0IGZyb206Ci0jIGh0dHA6Ly9naXQuc2F2YW5uYWguZ251Lm9yZy9naXR3ZWIvP3A9Y29uZmlnLmdpdDthPWJsb2JfcGxhaW47Zj1jb25maWcuc3ViO2hiPUhFQUQKLQotIyBUaGlzIGZpbGUgaXMgc3VwcG9zZWQgdG8gYmUgdGhlIHNhbWUgZm9yIGFsbCBHTlUgcGFja2FnZXMKLSMgYW5kIHJlY29nbml6ZSBhbGwgdGhlIENQVSB0eXBlcywgc3lzdGVtIHR5cGVzIGFuZCBhbGlhc2VzCi0jIHRoYXQgYXJlIG1lYW5pbmdmdWwgd2l0aCAqYW55KiBHTlUgc29mdHdhcmUuCi0jIEVhY2ggcGFja2FnZSBpcyByZXNwb25zaWJsZSBmb3IgcmVwb3J0aW5nIHdoaWNoIHZhbGlkIGNvbmZpZ3VyYXRpb25zCi0jIGl0IGRvZXMgbm90IHN1cHBvcnQuICBUaGUgdXNlciBzaG91bGQgYmUgYWJsZSB0byBkaXN0aW5ndWlzaAotIyBhIGZhaWx1cmUgdG8gc3VwcG9ydCBhIHZhbGlkIGNvbmZpZ3VyYXRpb24gZnJvbSBhIG1lYW5pbmdsZXNzCi0jIGNvbmZpZ3VyYXRpb24uCi0KLSMgVGhlIGdvYWwgb2YgdGhpcyBmaWxlIGlzIHRvIG1hcCBhbGwgdGhlIHZhcmlvdXMgdmFyaWF0aW9ucyBvZiBhIGdpdmVuCi0jIG1hY2hpbmUgc3BlY2lmaWNhdGlvbiBpbnRvIGEgc2luZ2xlIHNwZWNpZmljYXRpb24gaW4gdGhlIGZvcm06Ci0jCUNQVV9UWVBFLU1BTlVGQUNUVVJFUi1PUEVSQVRJTkdfU1lTVEVNCi0jIG9yIGluIHNvbWUgY2FzZXMsIHRoZSBuZXdlciBmb3VyLXBhcnQgZm9ybToKLSMJQ1BVX1RZUEUtTUFOVUZBQ1RVUkVSLUtFUk5FTC1PUEVSQVRJTkdfU1lTVEVNCi0jIEl0IGlzIHdyb25nIHRvIGVjaG8gYW55IG90aGVyIHR5cGUgb2Ygc3BlY2lmaWNhdGlvbi4KLQotbWU9YGVjaG8gIiQwIiB8IHNlZCAtZSAncywuKi8sLCdgCi0KLXVzYWdlPSJcCi1Vc2FnZTogJDAgW09QVElPTl0gQ1BVLU1GUi1PUFNZUwotICAgICAgICQwIFtPUFRJT05dIEFMSUFTCi0KLUNhbm9uaWNhbGl6ZSBhIGNvbmZpZ3VyYXRpb24gbmFtZS4KLQotT3BlcmF0aW9uIG1vZGVzOgotICAtaCwgLS1oZWxwICAgICAgICAgcHJpbnQgdGhpcyBoZWxwLCB0aGVuIGV4aXQKLSAgLXQsIC0tdGltZS1zdGFtcCAgIHByaW50IGRhdGUgb2YgbGFzdCBtb2RpZmljYXRpb24sIHRoZW4gZXhpdAotICAtdiwgLS12ZXJzaW9uICAgICAgcHJpbnQgdmVyc2lvbiBudW1iZXIsIHRoZW4gZXhpdAotCi1SZXBvcnQgYnVncyBhbmQgcGF0Y2hlcyB0byA8Y29uZmlnLXBhdGNoZXNAZ251Lm9yZz4uIgotCi12ZXJzaW9uPSJcCi1HTlUgY29uZmlnLnN1YiAoJHRpbWVzdGFtcCkKLQotQ29weXJpZ2h0IChDKSAxOTkyLCAxOTkzLCAxOTk0LCAxOTk1LCAxOTk2LCAxOTk3LCAxOTk4LCAxOTk5LCAyMDAwLCAyMDAxLAotMjAwMiwgMjAwMywgMjAwNCwgMjAwNSwgMjAwNiwgMjAwNywgMjAwOCBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KLQotVGhpcyBpcyBmcmVlIHNvZnR3YXJlOyBzZWUgdGhlIHNvdXJjZSBmb3IgY29weWluZyBjb25kaXRpb25zLiAgVGhlcmUgaXMgTk8KLXdhcnJhbnR5OyBub3QgZXZlbiBmb3IgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiIKLQotaGVscD0iCi1UcnkgXGAkbWUgLS1oZWxwJyBmb3IgbW9yZSBpbmZvcm1hdGlvbi4iCi0KLSMgUGFyc2UgY29tbWFuZCBsaW5lCi13aGlsZSB0ZXN0ICQjIC1ndCAwIDsgZG8KLSAgY2FzZSAkMSBpbgotICAgIC0tdGltZS1zdGFtcCB8IC0tdGltZSogfCAtdCApCi0gICAgICAgZWNobyAiJHRpbWVzdGFtcCIgOyBleGl0IDs7Ci0gICAgLS12ZXJzaW9uIHwgLXYgKQotICAgICAgIGVjaG8gIiR2ZXJzaW9uIiA7IGV4aXQgOzsKLSAgICAtLWhlbHAgfCAtLWgqIHwgLWggKQotICAgICAgIGVjaG8gIiR1c2FnZSI7IGV4aXQgOzsKLSAgICAtLSApICAgICAjIFN0b3Agb3B0aW9uIHByb2Nlc3NpbmcKLSAgICAgICBzaGlmdDsgYnJlYWsgOzsKLSAgICAtICkJIyBVc2Ugc3RkaW4gYXMgaW5wdXQuCi0gICAgICAgYnJlYWsgOzsKLSAgICAtKiApCi0gICAgICAgZWNobyAiJG1lOiBpbnZhbGlkIG9wdGlvbiAkMSRoZWxwIgotICAgICAgIGV4aXQgMSA7OwotCi0gICAgKmxvY2FsKikKLSAgICAgICAjIEZpcnN0IHBhc3MgdGhyb3VnaCBhbnkgbG9jYWwgbWFjaGluZSB0eXBlcy4KLSAgICAgICBlY2hvICQxCi0gICAgICAgZXhpdCA7OwotCi0gICAgKiApCi0gICAgICAgYnJlYWsgOzsKLSAgZXNhYwotZG9uZQotCi1jYXNlICQjIGluCi0gMCkgZWNobyAiJG1lOiBtaXNzaW5nIGFyZ3VtZW50JGhlbHAiID4mMgotICAgIGV4aXQgMTs7Ci0gMSkgOzsKLSAqKSBlY2hvICIkbWU6IHRvbyBtYW55IGFyZ3VtZW50cyRoZWxwIiA+JjIKLSAgICBleGl0IDE7OwotZXNhYwotCi0jIFNlcGFyYXRlIHdoYXQgdGhlIHVzZXIgZ2F2ZSBpbnRvIENQVS1DT01QQU5ZIGFuZCBPUyBvciBLRVJORUwtT1MgKGlmIGFueSkuCi0jIEhlcmUgd2UgbXVzdCByZWNvZ25pemUgYWxsIHRoZSB2YWxpZCBLRVJORUwtT1MgY29tYmluYXRpb25zLgotbWF5YmVfb3M9YGVjaG8gJDEgfCBzZWQgJ3MvXlwoLipcKS1cKFteLV0qLVteLV0qXCkkL1wyLydgCi1jYXNlICRtYXliZV9vcyBpbgotICBudG8tcW54KiB8IGxpbnV4LWdudSogfCBsaW51eC1kaWV0bGliYyB8IGxpbnV4LW5ld2xpYiogfCBsaW51eC11Y2xpYmMqIHwgXAotICB1Y2xpbnV4LXVjbGliYyogfCB1Y2xpbnV4LWdudSogfCBrZnJlZWJzZCotZ251KiB8IGtuZXRic2QqLWdudSogfCBuZXRic2QqLWdudSogfCBcCi0gIGtvcGVuc29sYXJpcyotZ251KiB8IFwKLSAgc3Rvcm0tY2hhb3MqIHwgb3MyLWVteCogfCBydG1rLW5vdmEqKQotICAgIG9zPS0kbWF5YmVfb3MKLSAgICBiYXNpY19tYWNoaW5lPWBlY2hvICQxIHwgc2VkICdzL15cKC4qXCktXChbXi1dKi1bXi1dKlwpJC9cMS8nYAotICAgIDs7Ci0gICopCi0gICAgYmFzaWNfbWFjaGluZT1gZWNobyAkMSB8IHNlZCAncy8tW14tXSokLy8nYAotICAgIGlmIFsgJGJhc2ljX21hY2hpbmUgIT0gJDEgXQotICAgIHRoZW4gb3M9YGVjaG8gJDEgfCBzZWQgJ3MvLiotLy0vJ2AKLSAgICBlbHNlIG9zPTsgZmkKLSAgICA7OwotZXNhYwotCi0jIyMgTGV0J3MgcmVjb2duaXplIGNvbW1vbiBtYWNoaW5lcyBhcyBub3QgYmVpbmcgb3BlcmF0aW5nIHN5c3RlbXMgc28KLSMjIyB0aGF0IHRoaW5ncyBsaWtlIGNvbmZpZy5zdWIgZGVjc3RhdGlvbi0zMTAwIHdvcmsuICBXZSBhbHNvCi0jIyMgcmVjb2duaXplIHNvbWUgbWFudWZhY3R1cmVycyBhcyBub3QgYmVpbmcgb3BlcmF0aW5nIHN5c3RlbXMsIHNvIHdlCi0jIyMgY2FuIHByb3ZpZGUgZGVmYXVsdCBvcGVyYXRpbmcgc3lzdGVtcyBiZWxvdy4KLWNhc2UgJG9zIGluCi0JLXN1bipvcyopCi0JCSMgUHJldmVudCBmb2xsb3dpbmcgY2xhdXNlIGZyb20gaGFuZGxpbmcgdGhpcyBpbnZhbGlkIGlucHV0LgotCQk7OwotCS1kZWMqIHwgLW1pcHMqIHwgLXNlcXVlbnQqIHwgLWVuY29yZSogfCAtcGM1MzIqIHwgLXNnaSogfCAtc29ueSogfCBcCi0JLWF0dCogfCAtNzMwMCogfCAtMzMwMCogfCAtZGVsdGEqIHwgLW1vdG9yb2xhKiB8IC1zdW5bMjM0XSogfCBcCi0JLXVuaWNvbSogfCAtaWJtKiB8IC1uZXh0IHwgLWhwIHwgLWlzaSogfCAtYXBvbGxvIHwgLWFsdG9zKiB8IFwKLQktY29udmVyZ2VudCogfCAtbmNyKiB8IC1uZXdzIHwgLTMyKiB8IC0zNjAwKiB8IC0zMTAwKiB8IC1oaXRhY2hpKiB8XAotCS1jWzEyM10qIHwgLWNvbnZleCogfCAtc3VuIHwgLWNyZHMgfCAtb21yb24qIHwgLWRnIHwgLXVsdHJhIHwgLXR0aSogfCBcCi0JLWhhcnJpcyB8IC1kb2xwaGluIHwgLWhpZ2hsZXZlbCB8IC1nb3VsZCB8IC1jYm0gfCAtbnMgfCAtbWFzc2NvbXAgfCBcCi0JLWFwcGxlIHwgLWF4aXMgfCAta251dGggfCAtY3JheSB8IC1taWNyb2JsYXplKQotCQlvcz0KLQkJYmFzaWNfbWFjaGluZT0kMQotCQk7OwotICAgICAgICAtYmx1ZWdlbmUqKQotCSAgICAgICAgb3M9LWNuawotCQk7OwotCS1zaW0gfCAtY2lzY28gfCAtb2tpIHwgLXdlYyB8IC13aW5ib25kKQotCQlvcz0KLQkJYmFzaWNfbWFjaGluZT0kMQotCQk7OwotCS1zY291dCkKLQkJOzsKLQktd3JzKQotCQlvcz0tdnh3b3JrcwotCQliYXNpY19tYWNoaW5lPSQxCi0JCTs7Ci0JLWNob3J1c29zKikKLQkJb3M9LWNob3J1c29zCi0JCWJhc2ljX21hY2hpbmU9JDEKLQkJOzsKLSAJLWNob3J1c3JkYikKLSAJCW9zPS1jaG9ydXNyZGIKLQkJYmFzaWNfbWFjaGluZT0kMQotIAkJOzsKLQktaGl1eCopCi0JCW9zPS1oaXV4d2UyCi0JCTs7Ci0JLXNjbzYpCi0JCW9zPS1zY281djYKLQkJYmFzaWNfbWFjaGluZT1gZWNobyAkMSB8IHNlZCAtZSAncy84Ni0uKi84Ni1wYy8nYAotCQk7OwotCS1zY281KQotCQlvcz0tc2NvMy4ydjUKLQkJYmFzaWNfbWFjaGluZT1gZWNobyAkMSB8IHNlZCAtZSAncy84Ni0uKi84Ni1wYy8nYAotCQk7OwotCS1zY280KQotCQlvcz0tc2NvMy4ydjQKLQkJYmFzaWNfbWFjaGluZT1gZWNobyAkMSB8IHNlZCAtZSAncy84Ni0uKi84Ni1wYy8nYAotCQk7OwotCS1zY28zLjIuWzQtOV0qKQotCQlvcz1gZWNobyAkb3MgfCBzZWQgLWUgJ3Mvc2NvMy4yLi9zY28zLjJ2LydgCi0JCWJhc2ljX21hY2hpbmU9YGVjaG8gJDEgfCBzZWQgLWUgJ3MvODYtLiovODYtcGMvJ2AKLQkJOzsKLQktc2NvMy4ydls0LTldKikKLQkJIyBEb24ndCBmb3JnZXQgdmVyc2lvbiBpZiBpdCBpcyAzLjJ2NCBvciBuZXdlci4KLQkJYmFzaWNfbWFjaGluZT1gZWNobyAkMSB8IHNlZCAtZSAncy84Ni0uKi84Ni1wYy8nYAotCQk7OwotCS1zY281djYqKQotCQkjIERvbid0IGZvcmdldCB2ZXJzaW9uIGlmIGl0IGlzIDMuMnY0IG9yIG5ld2VyLgotCQliYXNpY19tYWNoaW5lPWBlY2hvICQxIHwgc2VkIC1lICdzLzg2LS4qLzg2LXBjLydgCi0JCTs7Ci0JLXNjbyopCi0JCW9zPS1zY28zLjJ2MgotCQliYXNpY19tYWNoaW5lPWBlY2hvICQxIHwgc2VkIC1lICdzLzg2LS4qLzg2LXBjLydgCi0JCTs7Ci0JLXVkayopCi0JCWJhc2ljX21hY2hpbmU9YGVjaG8gJDEgfCBzZWQgLWUgJ3MvODYtLiovODYtcGMvJ2AKLQkJOzsKLQktaXNjKQotCQlvcz0taXNjMi4yCi0JCWJhc2ljX21hY2hpbmU9YGVjaG8gJDEgfCBzZWQgLWUgJ3MvODYtLiovODYtcGMvJ2AKLQkJOzsKLQktY2xpeCopCi0JCWJhc2ljX21hY2hpbmU9Y2xpcHBlci1pbnRlcmdyYXBoCi0JCTs7Ci0JLWlzYyopCi0JCWJhc2ljX21hY2hpbmU9YGVjaG8gJDEgfCBzZWQgLWUgJ3MvODYtLiovODYtcGMvJ2AKLQkJOzsKLQktbHlueCopCi0JCW9zPS1seW54b3MKLQkJOzsKLQktcHR4KikKLQkJYmFzaWNfbWFjaGluZT1gZWNobyAkMSB8IHNlZCAtZSAncy84Ni0uKi84Ni1zZXF1ZW50LydgCi0JCTs7Ci0JLXdpbmRvd3NudCopCi0JCW9zPWBlY2hvICRvcyB8IHNlZCAtZSAncy93aW5kb3dzbnQvd2lubnQvJ2AKLQkJOzsKLQktcHNvcyopCi0JCW9zPS1wc29zCi0JCTs7Ci0JLW1pbnQgfCAtbWludFswLTldKikKLQkJYmFzaWNfbWFjaGluZT1tNjhrLWF0YXJpCi0JCW9zPS1taW50Ci0JCTs7Ci1lc2FjCi0KLSMgRGVjb2RlIGFsaWFzZXMgZm9yIGNlcnRhaW4gQ1BVLUNPTVBBTlkgY29tYmluYXRpb25zLgotY2FzZSAkYmFzaWNfbWFjaGluZSBpbgotCSMgUmVjb2duaXplIHRoZSBiYXNpYyBDUFUgdHlwZXMgd2l0aG91dCBjb21wYW55IG5hbWUuCi0JIyBTb21lIGFyZSBvbWl0dGVkIGhlcmUgYmVjYXVzZSB0aGV5IGhhdmUgc3BlY2lhbCBtZWFuaW5ncyBiZWxvdy4KLQkxNzUwYSB8IDU4MCBcCi0JfCBhMjlrIFwKLQl8IGFscGhhIHwgYWxwaGFldls0LThdIHwgYWxwaGFldjU2IHwgYWxwaGFldjZbNzhdIHwgYWxwaGFwY2E1WzY3XSBcCi0JfCBhbHBoYTY0IHwgYWxwaGE2NGV2WzQtOF0gfCBhbHBoYTY0ZXY1NiB8IGFscGhhNjRldjZbNzhdIHwgYWxwaGE2NHBjYTVbNjddIFwKLQl8IGFtMzNfMi4wIFwKLQl8IGFyYyB8IGFybSB8IGFybVtibF1lIHwgYXJtZVtsYl0gfCBhcm12WzIzNDVdIHwgYXJtdlszNDVdW2xiXSB8IGF2ciB8IGF2cjMyIFwKLQl8IGJmaW4gXAotCXwgYzR4IHwgY2xpcHBlciBcCi0JfCBkMTB2IHwgZDMwdiB8IGRseCB8IGRzcDE2eHggXAotCXwgZmlkbyB8IGZyMzAgfCBmcnYgXAotCXwgaDgzMDAgfCBoODUwMCB8IGhwcGEgfCBocHBhMS5bMDFdIHwgaHBwYTIuMCB8IGhwcGEyLjBbbnddIHwgaHBwYTY0IFwKLQl8IGkzNzAgfCBpODYwIHwgaTk2MCB8IGlhNjQgXAotCXwgaXAyayB8IGlxMjAwMCBcCi0JfCBsbTMyIFwKLQl8IG0zMmMgfCBtMzJyIHwgbTMycmxlIHwgbTY4MDAwIHwgbTY4ayB8IG04OGsgXAotCXwgbWF4cSB8IG1iIHwgbWljcm9ibGF6ZSB8IG1jb3JlIHwgbWVwIHwgbWV0YWcgXAotCXwgbWlwcyB8IG1pcHNiZSB8IG1pcHNlYiB8IG1pcHNlbCB8IG1pcHNsZSBcCi0JfCBtaXBzMTYgXAotCXwgbWlwczY0IHwgbWlwczY0ZWwgXAotCXwgbWlwczY0b2N0ZW9uIHwgbWlwczY0b2N0ZW9uZWwgXAotCXwgbWlwczY0b3Jpb24gfCBtaXBzNjRvcmlvbmVsIFwKLQl8IG1pcHM2NHI1OTAwIHwgbWlwczY0cjU5MDBlbCBcCi0JfCBtaXBzNjR2ciB8IG1pcHM2NHZyZWwgXAotCXwgbWlwczY0dnI0MTAwIHwgbWlwczY0dnI0MTAwZWwgXAotCXwgbWlwczY0dnI0MzAwIHwgbWlwczY0dnI0MzAwZWwgXAotCXwgbWlwczY0dnI1MDAwIHwgbWlwczY0dnI1MDAwZWwgXAotCXwgbWlwczY0dnI1OTAwIHwgbWlwczY0dnI1OTAwZWwgXAotCXwgbWlwc2lzYTMyIHwgbWlwc2lzYTMyZWwgXAotCXwgbWlwc2lzYTMycjIgfCBtaXBzaXNhMzJyMmVsIFwKLQl8IG1pcHNpc2E2NCB8IG1pcHNpc2E2NGVsIFwKLQl8IG1pcHNpc2E2NHIyIHwgbWlwc2lzYTY0cjJlbCBcCi0JfCBtaXBzaXNhNjRzYjEgfCBtaXBzaXNhNjRzYjFlbCBcCi0JfCBtaXBzaXNhNjRzcjcxayB8IG1pcHNpc2E2NHNyNzFrZWwgXAotCXwgbWlwc3R4MzkgfCBtaXBzdHgzOWVsIFwKLQl8IG1uMTAyMDAgfCBtbjEwMzAwIFwKLQl8IG1veGllIFwKLQl8IG10IFwKLQl8IG1zcDQzMCBcCi0JfCBuaW9zIHwgbmlvczIgXAotCXwgbnMxNmsgfCBuczMyayBcCi0JfCBvcjMyIFwKLQl8IHBkcDEwIHwgcGRwMTEgfCBwaiB8IHBqbCBcCi0JfCBwb3dlcnBjIHwgcG93ZXJwYzY0IHwgcG93ZXJwYzY0bGUgfCBwb3dlcnBjbGUgfCBwcGNiZSBcCi0JfCBweXJhbWlkIFwKLQl8IHJ4IFwKLQl8IHNjb3JlIFwKLQl8IHNoIHwgc2hbMTIzNF0gfCBzaFsyNF1hIHwgc2hbMjRdYWViIHwgc2hbMjNdZSB8IHNoWzM0XWViIHwgc2hlYiB8IHNoYmUgfCBzaGxlIHwgc2hbMTIzNF1sZSB8IHNoM2VsZSBcCi0JfCBzaDY0IHwgc2g2NGxlIFwKLQl8IHNwYXJjIHwgc3BhcmM2NCB8IHNwYXJjNjRiIHwgc3BhcmM2NHYgfCBzcGFyYzg2eCB8IHNwYXJjbGV0IHwgc3BhcmNsaXRlIFwKLQl8IHNwYXJjdjggfCBzcGFyY3Y5IHwgc3BhcmN2OWIgfCBzcGFyY3Y5diBcCi0JfCBzcHUgfCBzdHJvbmdhcm0gXAotCXwgdGFob2UgfCB0aHVtYiB8IHRpYzR4IHwgdGljODAgfCB0cm9uIFwKLQl8IHViaWNvbTMyIFwKLQl8IHY4NTAgfCB2ODUwZSBcCi0JfCB3ZTMyayBcCi0JfCB4ODYgfCB4YzE2eCB8IHhzY2FsZSB8IHhzY2FsZWVbYmxdIHwgeHN0b3JteTE2IHwgeHRlbnNhIFwKLQl8IHo4ayB8IHo4MCkKLQkJYmFzaWNfbWFjaGluZT0kYmFzaWNfbWFjaGluZS11bmtub3duCi0JCTs7Ci0JbTY4MTEgfCBtNjhoYzExIHwgbTY4MTIgfCBtNjhoYzEyIHwgcGljb2NoaXApCi0JCSMgTW90b3JvbGEgNjhIQzExLzEyLgotCQliYXNpY19tYWNoaW5lPSRiYXNpY19tYWNoaW5lLXVua25vd24KLQkJb3M9LW5vbmUKLQkJOzsKLQltODgxMTAgfCBtNjgwWzEyMzQ2XTAgfCBtNjgzPzIgfCBtNjgzNjAgfCBtNTIwMCB8IHY3MCB8IHc2NSB8IHo4aykKLQkJOzsKLQltczEpCi0JCWJhc2ljX21hY2hpbmU9bXQtdW5rbm93bgotCQk7OwotCi0JIyBXZSB1c2UgYHBjJyByYXRoZXIgdGhhbiBgdW5rbm93bicKLQkjIGJlY2F1c2UgKDEpIHRoYXQncyB3aGF0IHRoZXkgbm9ybWFsbHkgYXJlLCBhbmQKLQkjICgyKSB0aGUgd29yZCAidW5rbm93biIgdGVuZHMgdG8gY29uZnVzZSBiZWdpbm5pbmcgdXNlcnMuCi0JaSo4NiB8IHg4Nl82NCkKLQkgIGJhc2ljX21hY2hpbmU9JGJhc2ljX21hY2hpbmUtcGMKLQkgIDs7Ci0JIyBPYmplY3QgaWYgbW9yZSB0aGFuIG9uZSBjb21wYW55IG5hbWUgd29yZC4KLQkqLSotKikKLQkJZWNobyBJbnZhbGlkIGNvbmZpZ3VyYXRpb24gXGAkMVwnOiBtYWNoaW5lIFxgJGJhc2ljX21hY2hpbmVcJyBub3QgcmVjb2duaXplZCAxPiYyCi0JCWV4aXQgMQotCQk7OwotCSMgUmVjb2duaXplIHRoZSBiYXNpYyBDUFUgdHlwZXMgd2l0aCBjb21wYW55IG5hbWUuCi0JNTgwLSogXAotCXwgYTI5ay0qIFwKLQl8IGFscGhhLSogfCBhbHBoYWV2WzQtOF0tKiB8IGFscGhhZXY1Ni0qIHwgYWxwaGFldjZbNzhdLSogXAotCXwgYWxwaGE2NC0qIHwgYWxwaGE2NGV2WzQtOF0tKiB8IGFscGhhNjRldjU2LSogfCBhbHBoYTY0ZXY2Wzc4XS0qIFwKLQl8IGFscGhhcGNhNVs2N10tKiB8IGFscGhhNjRwY2E1WzY3XS0qIHwgYXJjLSogXAotCXwgYXJtLSogIHwgYXJtYmUtKiB8IGFybWxlLSogfCBhcm1lYi0qIHwgYXJtdiotKiBcCi0JfCBhdnItKiB8IGF2cjMyLSogXAotCXwgYmZpbi0qIHwgYnMyMDAwLSogXAotCXwgY1sxMjNdKiB8IGMzMC0qIHwgW2NqdF05MC0qIHwgYzR4LSogfCBjNTR4LSogfCBjNTV4LSogfCBjNngtKiBcCi0JfCBjbGlwcGVyLSogfCBjcmF5bnYtKiB8IGN5ZHJhLSogXAotCXwgZDEwdi0qIHwgZDMwdi0qIHwgZGx4LSogXAotCXwgZWx4c2ktKiBcCi0JfCBmMzBbMDFdLSogfCBmNzAwLSogfCBmaWRvLSogfCBmcjMwLSogfCBmcnYtKiB8IGZ4ODAtKiBcCi0JfCBoODMwMC0qIHwgaDg1MDAtKiBcCi0JfCBocHBhLSogfCBocHBhMS5bMDFdLSogfCBocHBhMi4wLSogfCBocHBhMi4wW253XS0qIHwgaHBwYTY0LSogXAotCXwgaSo4Ni0qIHwgaTg2MC0qIHwgaTk2MC0qIHwgaWE2NC0qIFwKLQl8IGlwMmstKiB8IGlxMjAwMC0qIFwKLQl8IGxtMzItKiBcCi0JfCBtMzJjLSogfCBtMzJyLSogfCBtMzJybGUtKiBcCi0JfCBtNjgwMDAtKiB8IG02ODBbMDEyMzQ2XTAtKiB8IG02ODM2MC0qIHwgbTY4Mz8yLSogfCBtNjhrLSogXAotCXwgbTg4MTEwLSogfCBtODhrLSogfCBtYXhxLSogfCBtY29yZS0qIHwgbWV0YWctKiB8IG1pY3JvYmxhemUtKiBcCi0JfCBtaXBzLSogfCBtaXBzYmUtKiB8IG1pcHNlYi0qIHwgbWlwc2VsLSogfCBtaXBzbGUtKiBcCi0JfCBtaXBzMTYtKiBcCi0JfCBtaXBzNjQtKiB8IG1pcHM2NGVsLSogXAotCXwgbWlwczY0b2N0ZW9uLSogfCBtaXBzNjRvY3Rlb25lbC0qIFwKLQl8IG1pcHM2NG9yaW9uLSogfCBtaXBzNjRvcmlvbmVsLSogXAotCXwgbWlwczY0cjU5MDAtKiB8IG1pcHM2NHI1OTAwZWwtKiBcCi0JfCBtaXBzNjR2ci0qIHwgbWlwczY0dnJlbC0qIFwKLQl8IG1pcHM2NHZyNDEwMC0qIHwgbWlwczY0dnI0MTAwZWwtKiBcCi0JfCBtaXBzNjR2cjQzMDAtKiB8IG1pcHM2NHZyNDMwMGVsLSogXAotCXwgbWlwczY0dnI1MDAwLSogfCBtaXBzNjR2cjUwMDBlbC0qIFwKLQl8IG1pcHM2NHZyNTkwMC0qIHwgbWlwczY0dnI1OTAwZWwtKiBcCi0JfCBtaXBzaXNhMzItKiB8IG1pcHNpc2EzMmVsLSogXAotCXwgbWlwc2lzYTMycjItKiB8IG1pcHNpc2EzMnIyZWwtKiBcCi0JfCBtaXBzaXNhNjQtKiB8IG1pcHNpc2E2NGVsLSogXAotCXwgbWlwc2lzYTY0cjItKiB8IG1pcHNpc2E2NHIyZWwtKiBcCi0JfCBtaXBzaXNhNjRzYjEtKiB8IG1pcHNpc2E2NHNiMWVsLSogXAotCXwgbWlwc2lzYTY0c3I3MWstKiB8IG1pcHNpc2E2NHNyNzFrZWwtKiBcCi0JfCBtaXBzdHgzOS0qIHwgbWlwc3R4MzllbC0qIFwKLQl8IG1taXgtKiBcCi0JfCBtdC0qIFwKLQl8IG1zcDQzMC0qIFwKLQl8IG5pb3MtKiB8IG5pb3MyLSogXAotCXwgbm9uZS0qIHwgbnAxLSogfCBuczE2ay0qIHwgbnMzMmstKiBcCi0JfCBvcmlvbi0qIFwKLQl8IHBkcDEwLSogfCBwZHAxMS0qIHwgcGotKiB8IHBqbC0qIHwgcG4tKiB8IHBvd2VyLSogXAotCXwgcG93ZXJwYy0qIHwgcG93ZXJwYzY0LSogfCBwb3dlcnBjNjRsZS0qIHwgcG93ZXJwY2xlLSogfCBwcGNiZS0qIFwKLQl8IHB5cmFtaWQtKiBcCi0JfCByb21wLSogfCByczYwMDAtKiB8IHJ4LSogXAotCXwgc2gtKiB8IHNoWzEyMzRdLSogfCBzaFsyNF1hLSogfCBzaFsyNF1hZWItKiB8IHNoWzIzXWUtKiB8IHNoWzM0XWViLSogfCBzaGViLSogfCBzaGJlLSogXAotCXwgc2hsZS0qIHwgc2hbMTIzNF1sZS0qIHwgc2gzZWxlLSogfCBzaDY0LSogfCBzaDY0bGUtKiBcCi0JfCBzcGFyYy0qIHwgc3BhcmM2NC0qIHwgc3BhcmM2NGItKiB8IHNwYXJjNjR2LSogfCBzcGFyYzg2eC0qIHwgc3BhcmNsZXQtKiBcCi0JfCBzcGFyY2xpdGUtKiBcCi0JfCBzcGFyY3Y4LSogfCBzcGFyY3Y5LSogfCBzcGFyY3Y5Yi0qIHwgc3BhcmN2OXYtKiB8IHN0cm9uZ2FybS0qIHwgc3YxLSogfCBzeD8tKiBcCi0JfCB0YWhvZS0qIHwgdGh1bWItKiBcCi0JfCB0aWMzMC0qIHwgdGljNHgtKiB8IHRpYzU0eC0qIHwgdGljNTV4LSogfCB0aWM2eC0qIHwgdGljODAtKiB8IHRpbGUtKiBcCi0JfCB0cm9uLSogXAotCXwgdWJpY29tMzItKiBcCi0JfCB2ODUwLSogfCB2ODUwZS0qIHwgdmF4LSogXAotCXwgd2UzMmstKiBcCi0JfCB4ODYtKiB8IHg4Nl82NC0qIHwgeGMxNngtKiB8IHhwczEwMC0qIHwgeHNjYWxlLSogfCB4c2NhbGVlW2JsXS0qIFwKLQl8IHhzdG9ybXkxNi0qIHwgeHRlbnNhKi0qIFwKLQl8IHltcC0qIFwKLQl8IHo4ay0qIHwgejgwLSopCi0JCTs7Ci0JIyBSZWNvZ25pemUgdGhlIGJhc2ljIENQVSB0eXBlcyB3aXRob3V0IGNvbXBhbnkgbmFtZSwgd2l0aCBnbG9iIG1hdGNoLgotCXh0ZW5zYSopCi0JCWJhc2ljX21hY2hpbmU9JGJhc2ljX21hY2hpbmUtdW5rbm93bgotCQk7OwotCSMgUmVjb2duaXplIHRoZSB2YXJpb3VzIG1hY2hpbmUgbmFtZXMgYW5kIGFsaWFzZXMgd2hpY2ggc3RhbmQKLQkjIGZvciBhIENQVSB0eXBlIGFuZCBhIGNvbXBhbnkgYW5kIHNvbWV0aW1lcyBldmVuIGFuIE9TLgotCTM4NmJzZCkKLQkJYmFzaWNfbWFjaGluZT1pMzg2LXVua25vd24KLQkJb3M9LWJzZAotCQk7OwotCTNiMSB8IDczMDAgfCA3MzAwLWF0dCB8IGF0dC03MzAwIHwgcGM3MzAwIHwgc2FmYXJpIHwgdW5peHBjKQotCQliYXNpY19tYWNoaW5lPW02ODAwMC1hdHQKLQkJOzsKLQkzYiopCi0JCWJhc2ljX21hY2hpbmU9d2UzMmstYXR0Ci0JCTs7Ci0JYTI5a2hpZikKLQkJYmFzaWNfbWFjaGluZT1hMjlrLWFtZAotCQlvcz0tdWRpCi0JCTs7Ci0gICAgCWFiYWN1cykKLQkJYmFzaWNfbWFjaGluZT1hYmFjdXMtdW5rbm93bgotCQk7OwotCWFkb2JlNjhrKQotCQliYXNpY19tYWNoaW5lPW02ODAxMC1hZG9iZQotCQlvcz0tc2NvdXQKLQkJOzsKLQlhbGxpYW50IHwgZng4MCkKLQkJYmFzaWNfbWFjaGluZT1meDgwLWFsbGlhbnQKLQkJOzsKLQlhbHRvcyB8IGFsdG9zMzA2OCkKLQkJYmFzaWNfbWFjaGluZT1tNjhrLWFsdG9zCi0JCTs7Ci0JYW0yOWspCi0JCWJhc2ljX21hY2hpbmU9YTI5ay1ub25lCi0JCW9zPS1ic2QKLQkJOzsKLQlhbWQ2NCkKLQkJYmFzaWNfbWFjaGluZT14ODZfNjQtcGMKLQkJOzsKLQlhbWQ2NC0qKQotCQliYXNpY19tYWNoaW5lPXg4Nl82NC1gZWNobyAkYmFzaWNfbWFjaGluZSB8IHNlZCAncy9eW14tXSotLy8nYAotCQk7OwotCWFtZGFobCkKLQkJYmFzaWNfbWFjaGluZT01ODAtYW1kYWhsCi0JCW9zPS1zeXN2Ci0JCTs7Ci0JYW1pZ2EgfCBhbWlnYS0qKQotCQliYXNpY19tYWNoaW5lPW02OGstdW5rbm93bgotCQk7OwotCWFtaWdhb3MgfCBhbWlnYWRvcykKLQkJYmFzaWNfbWFjaGluZT1tNjhrLXVua25vd24KLQkJb3M9LWFtaWdhb3MKLQkJOzsKLQlhbWlnYXVuaXggfCBhbWl4KQotCQliYXNpY19tYWNoaW5lPW02OGstdW5rbm93bgotCQlvcz0tc3lzdjQKLQkJOzsKLQlhcG9sbG82OCkKLQkJYmFzaWNfbWFjaGluZT1tNjhrLWFwb2xsbwotCQlvcz0tc3lzdgotCQk7OwotCWFwb2xsbzY4YnNkKQotCQliYXNpY19tYWNoaW5lPW02OGstYXBvbGxvCi0JCW9zPS1ic2QKLQkJOzsKLQlhcm9zKQotCQliYXNpY19tYWNoaW5lPWkzODYtcGMKLQkJb3M9LWFyb3MKLQkJOzsKLQlhdXgpCi0JCWJhc2ljX21hY2hpbmU9bTY4ay1hcHBsZQotCQlvcz0tYXV4Ci0JCTs7Ci0JYmFsYW5jZSkKLQkJYmFzaWNfbWFjaGluZT1uczMyay1zZXF1ZW50Ci0JCW9zPS1keW5peAotCQk7OwotCWJsYWNrZmluKQotCQliYXNpY19tYWNoaW5lPWJmaW4tdW5rbm93bgotCQlvcz0tbGludXgKLQkJOzsKLQlibGFja2Zpbi0qKQotCQliYXNpY19tYWNoaW5lPWJmaW4tYGVjaG8gJGJhc2ljX21hY2hpbmUgfCBzZWQgJ3MvXlteLV0qLS8vJ2AKLQkJb3M9LWxpbnV4Ci0JCTs7Ci0JYmx1ZWdlbmUqKQotCQliYXNpY19tYWNoaW5lPXBvd2VycGMtaWJtCi0JCW9zPS1jbmsKLQkJOzsKLQljOTApCi0JCWJhc2ljX21hY2hpbmU9YzkwLWNyYXkKLQkJb3M9LXVuaWNvcwotCQk7OwotICAgICAgICBjZWdjYykKLQkJYmFzaWNfbWFjaGluZT1hcm0tdW5rbm93bgotCQlvcz0tY2VnY2MKLQkJOzsKLQljb252ZXgtYzEpCi0JCWJhc2ljX21hY2hpbmU9YzEtY29udmV4Ci0JCW9zPS1ic2QKLQkJOzsKLQljb252ZXgtYzIpCi0JCWJhc2ljX21hY2hpbmU9YzItY29udmV4Ci0JCW9zPS1ic2QKLQkJOzsKLQljb252ZXgtYzMyKQotCQliYXNpY19tYWNoaW5lPWMzMi1jb252ZXgKLQkJb3M9LWJzZAotCQk7OwotCWNvbnZleC1jMzQpCi0JCWJhc2ljX21hY2hpbmU9YzM0LWNvbnZleAotCQlvcz0tYnNkCi0JCTs7Ci0JY29udmV4LWMzOCkKLQkJYmFzaWNfbWFjaGluZT1jMzgtY29udmV4Ci0JCW9zPS1ic2QKLQkJOzsKLQljcmF5IHwgajkwKQotCQliYXNpY19tYWNoaW5lPWo5MC1jcmF5Ci0JCW9zPS11bmljb3MKLQkJOzsKLQljcmF5bnYpCi0JCWJhc2ljX21hY2hpbmU9Y3JheW52LWNyYXkKLQkJb3M9LXVuaWNvc21wCi0JCTs7Ci0JY3IxNikKLQkJYmFzaWNfbWFjaGluZT1jcjE2LXVua25vd24KLQkJb3M9LWVsZgotCQk7OwotCWNyZHMgfCB1bm9zKQotCQliYXNpY19tYWNoaW5lPW02OGstY3JkcwotCQk7OwotCWNyaXN2MzIgfCBjcmlzdjMyLSogfCBldHJheGZzKikKLQkJYmFzaWNfbWFjaGluZT1jcmlzdjMyLWF4aXMKLQkJOzsKLQljcmlzIHwgY3Jpcy0qIHwgZXRyYXgqKQotCQliYXNpY19tYWNoaW5lPWNyaXMtYXhpcwotCQk7OwotCWNyeCkKLQkJYmFzaWNfbWFjaGluZT1jcngtdW5rbm93bgotCQlvcz0tZWxmCi0JCTs7Ci0JZGEzMCB8IGRhMzAtKikKLQkJYmFzaWNfbWFjaGluZT1tNjhrLWRhMzAKLQkJOzsKLQlkZWNzdGF0aW9uIHwgZGVjc3RhdGlvbi0zMTAwIHwgcG1heCB8IHBtYXgtKiB8IHBtaW4gfCBkZWMzMTAwIHwgZGVjc3RhdG4pCi0JCWJhc2ljX21hY2hpbmU9bWlwcy1kZWMKLQkJOzsKLQlkZWNzeXN0ZW0xMCogfCBkZWMxMCopCi0JCWJhc2ljX21hY2hpbmU9cGRwMTAtZGVjCi0JCW9zPS10b3BzMTAKLQkJOzsKLQlkZWNzeXN0ZW0yMCogfCBkZWMyMCopCi0JCWJhc2ljX21hY2hpbmU9cGRwMTAtZGVjCi0JCW9zPS10b3BzMjAKLQkJOzsKLQlkZWx0YSB8IDMzMDAgfCBtb3Rvcm9sYS0zMzAwIHwgbW90b3JvbGEtZGVsdGEgXAotCSAgICAgIHwgMzMwMC1tb3Rvcm9sYSB8IGRlbHRhLW1vdG9yb2xhKQotCQliYXNpY19tYWNoaW5lPW02OGstbW90b3JvbGEKLQkJOzsKLQlkZWx0YTg4KQotCQliYXNpY19tYWNoaW5lPW04OGstbW90b3JvbGEKLQkJb3M9LXN5c3YzCi0JCTs7Ci0JZGljb3MpCi0JCWJhc2ljX21hY2hpbmU9aTY4Ni1wYwotCQlvcz0tZGljb3MKLQkJOzsKLQlkamdwcCkKLQkJYmFzaWNfbWFjaGluZT1pNTg2LXBjCi0JCW9zPS1tc2Rvc2RqZ3BwCi0JCTs7Ci0JZHB4MjAgfCBkcHgyMC0qKQotCQliYXNpY19tYWNoaW5lPXJzNjAwMC1idWxsCi0JCW9zPS1ib3N4Ci0JCTs7Ci0JZHB4MiogfCBkcHgyKi1idWxsKQotCQliYXNpY19tYWNoaW5lPW02OGstYnVsbAotCQlvcz0tc3lzdjMKLQkJOzsKLQllYm1vbjI5aykKLQkJYmFzaWNfbWFjaGluZT1hMjlrLWFtZAotCQlvcz0tZWJtb24KLQkJOzsKLQllbHhzaSkKLQkJYmFzaWNfbWFjaGluZT1lbHhzaS1lbHhzaQotCQlvcz0tYnNkCi0JCTs7Ci0JZW5jb3JlIHwgdW1heCB8IG1tYXgpCi0JCWJhc2ljX21hY2hpbmU9bnMzMmstZW5jb3JlCi0JCTs7Ci0JZXMxODAwIHwgT1NFNjhrIHwgb3NlNjhrIHwgb3NlIHwgT1NFKQotCQliYXNpY19tYWNoaW5lPW02OGstZXJpY3Nzb24KLQkJb3M9LW9zZQotCQk7OwotCWZ4MjgwMCkKLQkJYmFzaWNfbWFjaGluZT1pODYwLWFsbGlhbnQKLQkJOzsKLQlnZW5peCkKLQkJYmFzaWNfbWFjaGluZT1uczMyay1ucwotCQk7OwotCWdtaWNybykKLQkJYmFzaWNfbWFjaGluZT10cm9uLWdtaWNybwotCQlvcz0tc3lzdgotCQk7OwotCWdvMzIpCi0JCWJhc2ljX21hY2hpbmU9aTM4Ni1wYwotCQlvcz0tZ28zMgotCQk7OwotCWgzMDUwciogfCBoaXV4KikKLQkJYmFzaWNfbWFjaGluZT1ocHBhMS4xLWhpdGFjaGkKLQkJb3M9LWhpdXh3ZTIKLQkJOzsKLQloODMwMGhtcykKLQkJYmFzaWNfbWFjaGluZT1oODMwMC1oaXRhY2hpCi0JCW9zPS1obXMKLQkJOzsKLQloODMwMHhyYXkpCi0JCWJhc2ljX21hY2hpbmU9aDgzMDAtaGl0YWNoaQotCQlvcz0teHJheQotCQk7OwotCWg4NTAwaG1zKQotCQliYXNpY19tYWNoaW5lPWg4NTAwLWhpdGFjaGkKLQkJb3M9LWhtcwotCQk7OwotCWhhcnJpcykKLQkJYmFzaWNfbWFjaGluZT1tODhrLWhhcnJpcwotCQlvcz0tc3lzdjMKLQkJOzsKLQlocDMwMC0qKQotCQliYXNpY19tYWNoaW5lPW02OGstaHAKLQkJOzsKLQlocDMwMGJzZCkKLQkJYmFzaWNfbWFjaGluZT1tNjhrLWhwCi0JCW9zPS1ic2QKLQkJOzsKLQlocDMwMGhwdXgpCi0JCWJhc2ljX21hY2hpbmU9bTY4ay1ocAotCQlvcz0taHB1eAotCQk7OwotCWhwM2s5WzAtOV1bMC05XSB8IGhwOVswLTldWzAtOV0pCi0JCWJhc2ljX21hY2hpbmU9aHBwYTEuMC1ocAotCQk7OwotCWhwOWsyWzAtOV1bMC05XSB8IGhwOWszMVswLTldKQotCQliYXNpY19tYWNoaW5lPW02ODAwMC1ocAotCQk7OwotCWhwOWszWzItOV1bMC05XSkKLQkJYmFzaWNfbWFjaGluZT1tNjhrLWhwCi0JCTs7Ci0JaHA5azZbMC05XVswLTldIHwgaHA2WzAtOV1bMC05XSkKLQkJYmFzaWNfbWFjaGluZT1ocHBhMS4wLWhwCi0JCTs7Ci0JaHA5azdbMC03OV1bMC05XSB8IGhwN1swLTc5XVswLTldKQotCQliYXNpY19tYWNoaW5lPWhwcGExLjEtaHAKLQkJOzsKLQlocDlrNzhbMC05XSB8IGhwNzhbMC05XSkKLQkJIyBGSVhNRTogcmVhbGx5IGhwcGEyLjAtaHAKLQkJYmFzaWNfbWFjaGluZT1ocHBhMS4xLWhwCi0JCTs7Ci0JaHA5azhbNjddMSB8IGhwOFs2N10xIHwgaHA5azgwWzI0XSB8IGhwODBbMjRdIHwgaHA5azhbNzhdOSB8IGhwOFs3OF05IHwgaHA5azg5MyB8IGhwODkzKQotCQkjIEZJWE1FOiByZWFsbHkgaHBwYTIuMC1ocAotCQliYXNpY19tYWNoaW5lPWhwcGExLjEtaHAKLQkJOzsKLQlocDlrOFswLTldWzEzNjc5XSB8IGhwOFswLTldWzEzNjc5XSkKLQkJYmFzaWNfbWFjaGluZT1ocHBhMS4xLWhwCi0JCTs7Ci0JaHA5azhbMC05XVswLTldIHwgaHA4WzAtOV1bMC05XSkKLQkJYmFzaWNfbWFjaGluZT1ocHBhMS4wLWhwCi0JCTs7Ci0JaHBwYS1uZXh0KQotCQlvcz0tbmV4dHN0ZXAzCi0JCTs7Ci0JaHBwYW9zZikKLQkJYmFzaWNfbWFjaGluZT1ocHBhMS4xLWhwCi0JCW9zPS1vc2YKLQkJOzsKLQlocHBybykKLQkJYmFzaWNfbWFjaGluZT1ocHBhMS4xLWhwCi0JCW9zPS1wcm9lbGYKLQkJOzsKLQlpMzcwLWlibSogfCBpYm0qKQotCQliYXNpY19tYWNoaW5lPWkzNzAtaWJtCi0JCTs7Ci0jIEknbSBub3Qgc3VyZSB3aGF0ICJTeXN2MzIiIG1lYW5zLiAgU2hvdWxkIHRoaXMgYmUgc3lzdjMuMj8KLQlpKjg2djMyKQotCQliYXNpY19tYWNoaW5lPWBlY2hvICQxIHwgc2VkIC1lICdzLzg2LiovODYtcGMvJ2AKLQkJb3M9LXN5c3YzMgotCQk7OwotCWkqODZ2NCopCi0JCWJhc2ljX21hY2hpbmU9YGVjaG8gJDEgfCBzZWQgLWUgJ3MvODYuKi84Ni1wYy8nYAotCQlvcz0tc3lzdjQKLQkJOzsKLQlpKjg2dikKLQkJYmFzaWNfbWFjaGluZT1gZWNobyAkMSB8IHNlZCAtZSAncy84Ni4qLzg2LXBjLydgCi0JCW9zPS1zeXN2Ci0JCTs7Ci0JaSo4NnNvbDIpCi0JCWJhc2ljX21hY2hpbmU9YGVjaG8gJDEgfCBzZWQgLWUgJ3MvODYuKi84Ni1wYy8nYAotCQlvcz0tc29sYXJpczIKLQkJOzsKLQlpMzg2bWFjaCkKLQkJYmFzaWNfbWFjaGluZT1pMzg2LW1hY2gKLQkJb3M9LW1hY2gKLQkJOzsKLQlpMzg2LXZzdGEgfCB2c3RhKQotCQliYXNpY19tYWNoaW5lPWkzODYtdW5rbm93bgotCQlvcz0tdnN0YQotCQk7OwotCWlyaXMgfCBpcmlzNGQpCi0JCWJhc2ljX21hY2hpbmU9bWlwcy1zZ2kKLQkJY2FzZSAkb3MgaW4KLQkJICAgIC1pcml4KikKLQkJCTs7Ci0JCSAgICAqKQotCQkJb3M9LWlyaXg0Ci0JCQk7OwotCQllc2FjCi0JCTs7Ci0JaXNpNjggfCBpc2kpCi0JCWJhc2ljX21hY2hpbmU9bTY4ay1pc2kKLQkJb3M9LXN5c3YKLQkJOzsKLQltNjhrbm9tbXUpCi0JCWJhc2ljX21hY2hpbmU9bTY4ay11bmtub3duCi0JCW9zPS1saW51eAotCQk7OwotCW02OGtub21tdS0qKQotCQliYXNpY19tYWNoaW5lPW02OGstYGVjaG8gJGJhc2ljX21hY2hpbmUgfCBzZWQgJ3MvXlteLV0qLS8vJ2AKLQkJb3M9LWxpbnV4Ci0JCTs7Ci0JbTg4ay1vbXJvbiopCi0JCWJhc2ljX21hY2hpbmU9bTg4ay1vbXJvbgotCQk7OwotCW1hZ251bSB8IG0zMjMwKQotCQliYXNpY19tYWNoaW5lPW1pcHMtbWlwcwotCQlvcz0tc3lzdgotCQk7OwotCW1lcmxpbikKLQkJYmFzaWNfbWFjaGluZT1uczMyay11dGVrCi0JCW9zPS1zeXN2Ci0JCTs7Ci0gICAgICAgIG1pY3JvYmxhemUpCi0JCWJhc2ljX21hY2hpbmU9bWljcm9ibGF6ZS14aWxpbngKLQkJOzsKLQltaW5ndzMyKQotCQliYXNpY19tYWNoaW5lPWkzODYtcGMKLQkJb3M9LW1pbmd3MzIKLQkJOzsKLQltaW5ndzMyY2UpCi0JCWJhc2ljX21hY2hpbmU9YXJtLXVua25vd24KLQkJb3M9LW1pbmd3MzJjZQotCQk7OwotCW1pbmlmcmFtZSkKLQkJYmFzaWNfbWFjaGluZT1tNjgwMDAtY29udmVyZ2VudAotCQk7OwotCSptaW50IHwgLW1pbnRbMC05XSogfCAqTWlOVCB8ICpNaU5UWzAtOV0qKQotCQliYXNpY19tYWNoaW5lPW02OGstYXRhcmkKLQkJb3M9LW1pbnQKLQkJOzsKLQltaXBzMyotKikKLQkJYmFzaWNfbWFjaGluZT1gZWNobyAkYmFzaWNfbWFjaGluZSB8IHNlZCAtZSAncy9taXBzMy9taXBzNjQvJ2AKLQkJOzsKLQltaXBzMyopCi0JCWJhc2ljX21hY2hpbmU9YGVjaG8gJGJhc2ljX21hY2hpbmUgfCBzZWQgLWUgJ3MvbWlwczMvbWlwczY0LydgLXVua25vd24KLQkJOzsKLQltb25pdG9yKQotCQliYXNpY19tYWNoaW5lPW02OGstcm9tNjhrCi0JCW9zPS1jb2ZmCi0JCTs7Ci0JbW9ycGhvcykKLQkJYmFzaWNfbWFjaGluZT1wb3dlcnBjLXVua25vd24KLQkJb3M9LW1vcnBob3MKLQkJOzsKLQltc2RvcykKLQkJYmFzaWNfbWFjaGluZT1pMzg2LXBjCi0JCW9zPS1tc2RvcwotCQk7OwotCW1zMS0qKQotCQliYXNpY19tYWNoaW5lPWBlY2hvICRiYXNpY19tYWNoaW5lIHwgc2VkIC1lICdzL21zMS0vbXQtLydgCi0JCTs7Ci0JbXZzKQotCQliYXNpY19tYWNoaW5lPWkzNzAtaWJtCi0JCW9zPS1tdnMKLQkJOzsKLQluY3IzMDAwKQotCQliYXNpY19tYWNoaW5lPWk0ODYtbmNyCi0JCW9zPS1zeXN2NAotCQk7OwotCW5ldGJzZDM4NikKLQkJYmFzaWNfbWFjaGluZT1pMzg2LXVua25vd24KLQkJb3M9LW5ldGJzZAotCQk7OwotCW5ldHdpbmRlcikKLQkJYmFzaWNfbWFjaGluZT1hcm12NGwtcmViZWwKLQkJb3M9LWxpbnV4Ci0JCTs7Ci0JbmV3cyB8IG5ld3M3MDAgfCBuZXdzODAwIHwgbmV3czkwMCkKLQkJYmFzaWNfbWFjaGluZT1tNjhrLXNvbnkKLQkJb3M9LW5ld3NvcwotCQk7OwotCW5ld3MxMDAwKQotCQliYXNpY19tYWNoaW5lPW02ODAzMC1zb255Ci0JCW9zPS1uZXdzb3MKLQkJOzsKLQluZXdzLTM2MDAgfCByaXNjLW5ld3MpCi0JCWJhc2ljX21hY2hpbmU9bWlwcy1zb255Ci0JCW9zPS1uZXdzb3MKLQkJOzsKLQluZWN2NzApCi0JCWJhc2ljX21hY2hpbmU9djcwLW5lYwotCQlvcz0tc3lzdgotCQk7OwotCW5leHQgfCBtKi1uZXh0ICkKLQkJYmFzaWNfbWFjaGluZT1tNjhrLW5leHQKLQkJY2FzZSAkb3MgaW4KLQkJICAgIC1uZXh0c3RlcCogKQotCQkJOzsKLQkJICAgIC1uczIqKQotCQkgICAgICBvcz0tbmV4dHN0ZXAyCi0JCQk7OwotCQkgICAgKikKLQkJICAgICAgb3M9LW5leHRzdGVwMwotCQkJOzsKLQkJZXNhYwotCQk7OwotCW5oMzAwMCkKLQkJYmFzaWNfbWFjaGluZT1tNjhrLWhhcnJpcwotCQlvcz0tY3h1eAotCQk7OwotCW5oWzQ1XTAwMCkKLQkJYmFzaWNfbWFjaGluZT1tODhrLWhhcnJpcwotCQlvcz0tY3h1eAotCQk7OwotCW5pbmR5OTYwKQotCQliYXNpY19tYWNoaW5lPWk5NjAtaW50ZWwKLQkJb3M9LW5pbmR5Ci0JCTs7Ci0JbW9uOTYwKQotCQliYXNpY19tYWNoaW5lPWk5NjAtaW50ZWwKLQkJb3M9LW1vbjk2MAotCQk7OwotCW5vbnN0b3B1eCkKLQkJYmFzaWNfbWFjaGluZT1taXBzLWNvbXBhcQotCQlvcz0tbm9uc3RvcHV4Ci0JCTs7Ci0JbnAxKQotCQliYXNpY19tYWNoaW5lPW5wMS1nb3VsZAotCQk7OwotCW5zci10YW5kZW0pCi0JCWJhc2ljX21hY2hpbmU9bnNyLXRhbmRlbQotCQk7OwotCW9wNTBuLSogfCBvcDYwYy0qKQotCQliYXNpY19tYWNoaW5lPWhwcGExLjEtb2tpCi0JCW9zPS1wcm9lbGYKLQkJOzsKLQlvcGVucmlzYyB8IG9wZW5yaXNjLSopCi0JCWJhc2ljX21hY2hpbmU9b3IzMi11bmtub3duCi0JCTs7Ci0Jb3M0MDApCi0JCWJhc2ljX21hY2hpbmU9cG93ZXJwYy1pYm0KLQkJb3M9LW9zNDAwCi0JCTs7Ci0JT1NFNjgwMDAgfCBvc2U2ODAwMCkKLQkJYmFzaWNfbWFjaGluZT1tNjgwMDAtZXJpY3Nzb24KLQkJb3M9LW9zZQotCQk7OwotCW9zNjhrKQotCQliYXNpY19tYWNoaW5lPW02OGstbm9uZQotCQlvcz0tb3M2OGsKLQkJOzsKLQlwYS1oaXRhY2hpKQotCQliYXNpY19tYWNoaW5lPWhwcGExLjEtaGl0YWNoaQotCQlvcz0taGl1eHdlMgotCQk7OwotCXBhcmFnb24pCi0JCWJhc2ljX21hY2hpbmU9aTg2MC1pbnRlbAotCQlvcz0tb3NmCi0JCTs7Ci0JcGFyaXNjKQotCQliYXNpY19tYWNoaW5lPWhwcGEtdW5rbm93bgotCQlvcz0tbGludXgKLQkJOzsKLQlwYXJpc2MtKikKLQkJYmFzaWNfbWFjaGluZT1ocHBhLWBlY2hvICRiYXNpY19tYWNoaW5lIHwgc2VkICdzL15bXi1dKi0vLydgCi0JCW9zPS1saW51eAotCQk7OwotCXBiZCkKLQkJYmFzaWNfbWFjaGluZT1zcGFyYy10dGkKLQkJOzsKLQlwYmIpCi0JCWJhc2ljX21hY2hpbmU9bTY4ay10dGkKLQkJOzsKLQlwYzUzMiB8IHBjNTMyLSopCi0JCWJhc2ljX21hY2hpbmU9bnMzMmstcGM1MzIKLQkJOzsKLQlwYzk4KQotCQliYXNpY19tYWNoaW5lPWkzODYtcGMKLQkJOzsKLQlwYzk4LSopCi0JCWJhc2ljX21hY2hpbmU9aTM4Ni1gZWNobyAkYmFzaWNfbWFjaGluZSB8IHNlZCAncy9eW14tXSotLy8nYAotCQk7OwotCXBlbnRpdW0gfCBwNSB8IGs1IHwgazYgfCBuZXhnZW4gfCB2aWFjMykKLQkJYmFzaWNfbWFjaGluZT1pNTg2LXBjCi0JCTs7Ci0JcGVudGl1bXBybyB8IHA2IHwgNng4NiB8IGF0aGxvbiB8IGF0aGxvbl8qKQotCQliYXNpY19tYWNoaW5lPWk2ODYtcGMKLQkJOzsKLQlwZW50aXVtaWkgfCBwZW50aXVtMiB8IHBlbnRpdW1paWkgfCBwZW50aXVtMykKLQkJYmFzaWNfbWFjaGluZT1pNjg2LXBjCi0JCTs7Ci0JcGVudGl1bTQpCi0JCWJhc2ljX21hY2hpbmU9aTc4Ni1wYwotCQk7OwotCXBlbnRpdW0tKiB8IHA1LSogfCBrNS0qIHwgazYtKiB8IG5leGdlbi0qIHwgdmlhYzMtKikKLQkJYmFzaWNfbWFjaGluZT1pNTg2LWBlY2hvICRiYXNpY19tYWNoaW5lIHwgc2VkICdzL15bXi1dKi0vLydgCi0JCTs7Ci0JcGVudGl1bXByby0qIHwgcDYtKiB8IDZ4ODYtKiB8IGF0aGxvbi0qKQotCQliYXNpY19tYWNoaW5lPWk2ODYtYGVjaG8gJGJhc2ljX21hY2hpbmUgfCBzZWQgJ3MvXlteLV0qLS8vJ2AKLQkJOzsKLQlwZW50aXVtaWktKiB8IHBlbnRpdW0yLSogfCBwZW50aXVtaWlpLSogfCBwZW50aXVtMy0qKQotCQliYXNpY19tYWNoaW5lPWk2ODYtYGVjaG8gJGJhc2ljX21hY2hpbmUgfCBzZWQgJ3MvXlteLV0qLS8vJ2AKLQkJOzsKLQlwZW50aXVtNC0qKQotCQliYXNpY19tYWNoaW5lPWk3ODYtYGVjaG8gJGJhc2ljX21hY2hpbmUgfCBzZWQgJ3MvXlteLV0qLS8vJ2AKLQkJOzsKLQlwbikKLQkJYmFzaWNfbWFjaGluZT1wbi1nb3VsZAotCQk7OwotCXBvd2VyKQliYXNpY19tYWNoaW5lPXBvd2VyLWlibQotCQk7OwotCXBwYykJYmFzaWNfbWFjaGluZT1wb3dlcnBjLXVua25vd24KLQkJOzsKLQlwcGMtKikJYmFzaWNfbWFjaGluZT1wb3dlcnBjLWBlY2hvICRiYXNpY19tYWNoaW5lIHwgc2VkICdzL15bXi1dKi0vLydgCi0JCTs7Ci0JcHBjbGUgfCBwb3dlcnBjbGl0dGxlIHwgcHBjLWxlIHwgcG93ZXJwYy1saXR0bGUpCi0JCWJhc2ljX21hY2hpbmU9cG93ZXJwY2xlLXVua25vd24KLQkJOzsKLQlwcGNsZS0qIHwgcG93ZXJwY2xpdHRsZS0qKQotCQliYXNpY19tYWNoaW5lPXBvd2VycGNsZS1gZWNobyAkYmFzaWNfbWFjaGluZSB8IHNlZCAncy9eW14tXSotLy8nYAotCQk7OwotCXBwYzY0KQliYXNpY19tYWNoaW5lPXBvd2VycGM2NC11bmtub3duCi0JCTs7Ci0JcHBjNjQtKikgYmFzaWNfbWFjaGluZT1wb3dlcnBjNjQtYGVjaG8gJGJhc2ljX21hY2hpbmUgfCBzZWQgJ3MvXlteLV0qLS8vJ2AKLQkJOzsKLQlwcGM2NGxlIHwgcG93ZXJwYzY0bGl0dGxlIHwgcHBjNjQtbGUgfCBwb3dlcnBjNjQtbGl0dGxlKQotCQliYXNpY19tYWNoaW5lPXBvd2VycGM2NGxlLXVua25vd24KLQkJOzsKLQlwcGM2NGxlLSogfCBwb3dlcnBjNjRsaXR0bGUtKikKLQkJYmFzaWNfbWFjaGluZT1wb3dlcnBjNjRsZS1gZWNobyAkYmFzaWNfbWFjaGluZSB8IHNlZCAncy9eW14tXSotLy8nYAotCQk7OwotCXBzMikKLQkJYmFzaWNfbWFjaGluZT1pMzg2LWlibQotCQk7OwotCXB3MzIpCi0JCWJhc2ljX21hY2hpbmU9aTU4Ni11bmtub3duCi0JCW9zPS1wdzMyCi0JCTs7Ci0JcmRvcykKLQkJYmFzaWNfbWFjaGluZT1pMzg2LXBjCi0JCW9zPS1yZG9zCi0JCTs7Ci0Jcm9tNjhrKQotCQliYXNpY19tYWNoaW5lPW02OGstcm9tNjhrCi0JCW9zPS1jb2ZmCi0JCTs7Ci0Jcm1bNDZdMDApCi0JCWJhc2ljX21hY2hpbmU9bWlwcy1zaWVtZW5zCi0JCTs7Ci0JcnRwYyB8IHJ0cGMtKikKLQkJYmFzaWNfbWFjaGluZT1yb21wLWlibQotCQk7OwotCXMzOTAgfCBzMzkwLSopCi0JCWJhc2ljX21hY2hpbmU9czM5MC1pYm0KLQkJOzsKLQlzMzkweCB8IHMzOTB4LSopCi0JCWJhc2ljX21hY2hpbmU9czM5MHgtaWJtCi0JCTs7Ci0Jc2EyOTIwMCkKLQkJYmFzaWNfbWFjaGluZT1hMjlrLWFtZAotCQlvcz0tdWRpCi0JCTs7Ci0Jc2IxKQotCQliYXNpY19tYWNoaW5lPW1pcHNpc2E2NHNiMS11bmtub3duCi0JCTs7Ci0Jc2IxZWwpCi0JCWJhc2ljX21hY2hpbmU9bWlwc2lzYTY0c2IxZWwtdW5rbm93bgotCQk7OwotCXNkZSkKLQkJYmFzaWNfbWFjaGluZT1taXBzaXNhMzItc2RlCi0JCW9zPS1lbGYKLQkJOzsKLQlzZWkpCi0JCWJhc2ljX21hY2hpbmU9bWlwcy1zZWkKLQkJb3M9LXNlaXV4Ci0JCTs7Ci0Jc2VxdWVudCkKLQkJYmFzaWNfbWFjaGluZT1pMzg2LXNlcXVlbnQKLQkJOzsKLQlzaCkKLQkJYmFzaWNfbWFjaGluZT1zaC1oaXRhY2hpCi0JCW9zPS1obXMKLQkJOzsKLQlzaDVlbCkKLQkJYmFzaWNfbWFjaGluZT1zaDVsZS11bmtub3duCi0JCTs7Ci0Jc2g2NCkKLQkJYmFzaWNfbWFjaGluZT1zaDY0LXVua25vd24KLQkJOzsKLQlzcGFyY2xpdGUtd3JzIHwgc2ltc28td3JzKQotCQliYXNpY19tYWNoaW5lPXNwYXJjbGl0ZS13cnMKLQkJb3M9LXZ4d29ya3MKLQkJOzsKLQlzcHM3KQotCQliYXNpY19tYWNoaW5lPW02OGstYnVsbAotCQlvcz0tc3lzdjIKLQkJOzsKLQlzcHVyKQotCQliYXNpY19tYWNoaW5lPXNwdXItdW5rbm93bgotCQk7OwotCXN0MjAwMCkKLQkJYmFzaWNfbWFjaGluZT1tNjhrLXRhbmRlbQotCQk7OwotCXN0cmF0dXMpCi0JCWJhc2ljX21hY2hpbmU9aTg2MC1zdHJhdHVzCi0JCW9zPS1zeXN2NAotCQk7OwotCXN1bjIpCi0JCWJhc2ljX21hY2hpbmU9bTY4MDAwLXN1bgotCQk7OwotCXN1bjJvczMpCi0JCWJhc2ljX21hY2hpbmU9bTY4MDAwLXN1bgotCQlvcz0tc3Vub3MzCi0JCTs7Ci0Jc3VuMm9zNCkKLQkJYmFzaWNfbWFjaGluZT1tNjgwMDAtc3VuCi0JCW9zPS1zdW5vczQKLQkJOzsKLQlzdW4zb3MzKQotCQliYXNpY19tYWNoaW5lPW02OGstc3VuCi0JCW9zPS1zdW5vczMKLQkJOzsKLQlzdW4zb3M0KQotCQliYXNpY19tYWNoaW5lPW02OGstc3VuCi0JCW9zPS1zdW5vczQKLQkJOzsKLQlzdW40b3MzKQotCQliYXNpY19tYWNoaW5lPXNwYXJjLXN1bgotCQlvcz0tc3Vub3MzCi0JCTs7Ci0Jc3VuNG9zNCkKLQkJYmFzaWNfbWFjaGluZT1zcGFyYy1zdW4KLQkJb3M9LXN1bm9zNAotCQk7OwotCXN1bjRzb2wyKQotCQliYXNpY19tYWNoaW5lPXNwYXJjLXN1bgotCQlvcz0tc29sYXJpczIKLQkJOzsKLQlzdW4zIHwgc3VuMy0qKQotCQliYXNpY19tYWNoaW5lPW02OGstc3VuCi0JCTs7Ci0Jc3VuNCkKLQkJYmFzaWNfbWFjaGluZT1zcGFyYy1zdW4KLQkJOzsKLQlzdW4zODYgfCBzdW4zODZpIHwgcm9hZHJ1bm5lcikKLQkJYmFzaWNfbWFjaGluZT1pMzg2LXN1bgotCQk7OwotCXN2MSkKLQkJYmFzaWNfbWFjaGluZT1zdjEtY3JheQotCQlvcz0tdW5pY29zCi0JCTs7Ci0Jc3ltbWV0cnkpCi0JCWJhc2ljX21hY2hpbmU9aTM4Ni1zZXF1ZW50Ci0JCW9zPS1keW5peAotCQk7OwotCXQzZSkKLQkJYmFzaWNfbWFjaGluZT1hbHBoYWV2NS1jcmF5Ci0JCW9zPS11bmljb3MKLQkJOzsKLQl0OTApCi0JCWJhc2ljX21hY2hpbmU9dDkwLWNyYXkKLQkJb3M9LXVuaWNvcwotCQk7OwotCXRpYzU0eCB8IGM1NHgqKQotCQliYXNpY19tYWNoaW5lPXRpYzU0eC11bmtub3duCi0JCW9zPS1jb2ZmCi0JCTs7Ci0JdGljNTV4IHwgYzU1eCopCi0JCWJhc2ljX21hY2hpbmU9dGljNTV4LXVua25vd24KLQkJb3M9LWNvZmYKLQkJOzsKLQl0aWM2eCB8IGM2eCopCi0JCWJhc2ljX21hY2hpbmU9dGljNngtdW5rbm93bgotCQlvcz0tY29mZgotCQk7OwotCXRpbGUqKQotCQliYXNpY19tYWNoaW5lPXRpbGUtdW5rbm93bgotCQlvcz0tbGludXgtZ251Ci0JCTs7Ci0JdHgzOSkKLQkJYmFzaWNfbWFjaGluZT1taXBzdHgzOS11bmtub3duCi0JCTs7Ci0JdHgzOWVsKQotCQliYXNpY19tYWNoaW5lPW1pcHN0eDM5ZWwtdW5rbm93bgotCQk7OwotCXRvYWQxKQotCQliYXNpY19tYWNoaW5lPXBkcDEwLXhrbAotCQlvcz0tdG9wczIwCi0JCTs7Ci0JdG93ZXIgfCB0b3dlci0zMikKLQkJYmFzaWNfbWFjaGluZT1tNjhrLW5jcgotCQk7OwotCXRwZikKLQkJYmFzaWNfbWFjaGluZT1zMzkweC1pYm0KLQkJb3M9LXRwZgotCQk7OwotCXVkaTI5aykKLQkJYmFzaWNfbWFjaGluZT1hMjlrLWFtZAotCQlvcz0tdWRpCi0JCTs7Ci0JdWx0cmEzKQotCQliYXNpY19tYWNoaW5lPWEyOWstbnl1Ci0JCW9zPS1zeW0xCi0JCTs7Ci0JdjgxMCB8IG5lY3Y4MTApCi0JCWJhc2ljX21hY2hpbmU9djgxMC1uZWMKLQkJb3M9LW5vbmUKLQkJOzsKLQl2YXh2KQotCQliYXNpY19tYWNoaW5lPXZheC1kZWMKLQkJb3M9LXN5c3YKLQkJOzsKLQl2bXMpCi0JCWJhc2ljX21hY2hpbmU9dmF4LWRlYwotCQlvcz0tdm1zCi0JCTs7Ci0JdnBwKnx2eHx2eC0qKQotCQliYXNpY19tYWNoaW5lPWYzMDEtZnVqaXRzdQotCQk7OwotCXZ4d29ya3M5NjApCi0JCWJhc2ljX21hY2hpbmU9aTk2MC13cnMKLQkJb3M9LXZ4d29ya3MKLQkJOzsKLQl2eHdvcmtzNjgpCi0JCWJhc2ljX21hY2hpbmU9bTY4ay13cnMKLQkJb3M9LXZ4d29ya3MKLQkJOzsKLQl2eHdvcmtzMjlrKQotCQliYXNpY19tYWNoaW5lPWEyOWstd3JzCi0JCW9zPS12eHdvcmtzCi0JCTs7Ci0JdzY1KikKLQkJYmFzaWNfbWFjaGluZT13NjUtd2RjCi0JCW9zPS1ub25lCi0JCTs7Ci0Jdzg5ay0qKQotCQliYXNpY19tYWNoaW5lPWhwcGExLjEtd2luYm9uZAotCQlvcz0tcHJvZWxmCi0JCTs7Ci0JeGJveCkKLQkJYmFzaWNfbWFjaGluZT1pNjg2LXBjCi0JCW9zPS1taW5ndzMyCi0JCTs7Ci0JeHBzIHwgeHBzMTAwKQotCQliYXNpY19tYWNoaW5lPXhwczEwMC1ob25leXdlbGwKLQkJOzsKLQl5bXApCi0JCWJhc2ljX21hY2hpbmU9eW1wLWNyYXkKLQkJb3M9LXVuaWNvcwotCQk7OwotCXo4ay0qLWNvZmYpCi0JCWJhc2ljX21hY2hpbmU9ejhrLXVua25vd24KLQkJb3M9LXNpbQotCQk7OwotCXo4MC0qLWNvZmYpCi0JCWJhc2ljX21hY2hpbmU9ejgwLXVua25vd24KLQkJb3M9LXNpbQotCQk7OwotCW5vbmUpCi0JCWJhc2ljX21hY2hpbmU9bm9uZS1ub25lCi0JCW9zPS1ub25lCi0JCTs7Ci0KLSMgSGVyZSB3ZSBoYW5kbGUgdGhlIGRlZmF1bHQgbWFudWZhY3R1cmVyIG9mIGNlcnRhaW4gQ1BVIHR5cGVzLiAgSXQgaXMgaW4KLSMgc29tZSBjYXNlcyB0aGUgb25seSBtYW51ZmFjdHVyZXIsIGluIG90aGVycywgaXQgaXMgdGhlIG1vc3QgcG9wdWxhci4KLQl3ODlrKQotCQliYXNpY19tYWNoaW5lPWhwcGExLjEtd2luYm9uZAotCQk7OwotCW9wNTBuKQotCQliYXNpY19tYWNoaW5lPWhwcGExLjEtb2tpCi0JCTs7Ci0Jb3A2MGMpCi0JCWJhc2ljX21hY2hpbmU9aHBwYTEuMS1va2kKLQkJOzsKLQlyb21wKQotCQliYXNpY19tYWNoaW5lPXJvbXAtaWJtCi0JCTs7Ci0JbW1peCkKLQkJYmFzaWNfbWFjaGluZT1tbWl4LWtudXRoCi0JCTs7Ci0JcnM2MDAwKQotCQliYXNpY19tYWNoaW5lPXJzNjAwMC1pYm0KLQkJOzsKLQl2YXgpCi0JCWJhc2ljX21hY2hpbmU9dmF4LWRlYwotCQk7OwotCXBkcDEwKQotCQkjIHRoZXJlIGFyZSBtYW55IGNsb25lcywgc28gREVDIGlzIG5vdCBhIHNhZmUgYmV0Ci0JCWJhc2ljX21hY2hpbmU9cGRwMTAtdW5rbm93bgotCQk7OwotCXBkcDExKQotCQliYXNpY19tYWNoaW5lPXBkcDExLWRlYwotCQk7OwotCXdlMzJrKQotCQliYXNpY19tYWNoaW5lPXdlMzJrLWF0dAotCQk7OwotCXNoWzEyMzRdIHwgc2hbMjRdYSB8IHNoWzI0XWFlYiB8IHNoWzM0XWViIHwgc2hbMTIzNF1sZSB8IHNoWzIzXWVsZSkKLQkJYmFzaWNfbWFjaGluZT1zaC11bmtub3duCi0JCTs7Ci0Jc3BhcmMgfCBzcGFyY3Y4IHwgc3BhcmN2OSB8IHNwYXJjdjliIHwgc3BhcmN2OXYpCi0JCWJhc2ljX21hY2hpbmU9c3BhcmMtc3VuCi0JCTs7Ci0JY3lkcmEpCi0JCWJhc2ljX21hY2hpbmU9Y3lkcmEtY3lkcm9tZQotCQk7OwotCW9yaW9uKQotCQliYXNpY19tYWNoaW5lPW9yaW9uLWhpZ2hsZXZlbAotCQk7OwotCW9yaW9uMTA1KQotCQliYXNpY19tYWNoaW5lPWNsaXBwZXItaGlnaGxldmVsCi0JCTs7Ci0JbWFjIHwgbXB3IHwgbWFjLW1wdykKLQkJYmFzaWNfbWFjaGluZT1tNjhrLWFwcGxlCi0JCTs7Ci0JcG1hYyB8IHBtYWMtbXB3KQotCQliYXNpY19tYWNoaW5lPXBvd2VycGMtYXBwbGUKLQkJOzsKLQkqLXVua25vd24pCi0JCSMgTWFrZSBzdXJlIHRvIG1hdGNoIGFuIGFscmVhZHktY2Fub25pY2FsaXplZCBtYWNoaW5lIG5hbWUuCi0JCTs7Ci0JKikKLQkJZWNobyBJbnZhbGlkIGNvbmZpZ3VyYXRpb24gXGAkMVwnOiBtYWNoaW5lIFxgJGJhc2ljX21hY2hpbmVcJyBub3QgcmVjb2duaXplZCAxPiYyCi0JCWV4aXQgMQotCQk7OwotZXNhYwotCi0jIEhlcmUgd2UgY2Fub25pY2FsaXplIGNlcnRhaW4gYWxpYXNlcyBmb3IgbWFudWZhY3R1cmVycy4KLWNhc2UgJGJhc2ljX21hY2hpbmUgaW4KLQkqLWRpZ2l0YWwqKQotCQliYXNpY19tYWNoaW5lPWBlY2hvICRiYXNpY19tYWNoaW5lIHwgc2VkICdzL2RpZ2l0YWwuKi9kZWMvJ2AKLQkJOzsKLQkqLWNvbW1vZG9yZSopCi0JCWJhc2ljX21hY2hpbmU9YGVjaG8gJGJhc2ljX21hY2hpbmUgfCBzZWQgJ3MvY29tbW9kb3JlLiovY2JtLydgCi0JCTs7Ci0JKikKLQkJOzsKLWVzYWMKLQotIyBEZWNvZGUgbWFudWZhY3R1cmVyLXNwZWNpZmljIGFsaWFzZXMgZm9yIGNlcnRhaW4gb3BlcmF0aW5nIHN5c3RlbXMuCi0KLWlmIFsgeCIkb3MiICE9IHgiIiBdCi10aGVuCi1jYXNlICRvcyBpbgotICAgICAgICAjIEZpcnN0IG1hdGNoIHNvbWUgc3lzdGVtIHR5cGUgYWxpYXNlcwotICAgICAgICAjIHRoYXQgbWlnaHQgZ2V0IGNvbmZ1c2VkIHdpdGggdmFsaWQgc3lzdGVtIHR5cGVzLgotCSMgLXNvbGFyaXMqIGlzIGEgYmFzaWMgc3lzdGVtIHR5cGUsIHdpdGggdGhpcyBvbmUgZXhjZXB0aW9uLgotICAgICAgICAtYXVyb3JhdXgpCi0JICAgICAgICBvcz0tYXVyb3JhdXgKLQkJOzsKLQktc29sYXJpczEgfCAtc29sYXJpczEuKikKLQkJb3M9YGVjaG8gJG9zIHwgc2VkIC1lICdzfHNvbGFyaXMxfHN1bm9zNHwnYAotCQk7OwotCS1zb2xhcmlzKQotCQlvcz0tc29sYXJpczIKLQkJOzsKLQktc3ZyNCopCi0JCW9zPS1zeXN2NAotCQk7OwotCS11bml4d2FyZSopCi0JCW9zPS1zeXN2NC4ydXcKLQkJOzsKLQktZ251L2xpbnV4KikKLQkJb3M9YGVjaG8gJG9zIHwgc2VkIC1lICdzfGdudS9saW51eHxsaW51eC1nbnV8J2AKLQkJOzsKLQkjIEZpcnN0IGFjY2VwdCB0aGUgYmFzaWMgc3lzdGVtIHR5cGVzLgotCSMgVGhlIHBvcnRhYmxlIHN5c3RlbXMgY29tZXMgZmlyc3QuCi0JIyBFYWNoIGFsdGVybmF0aXZlIE1VU1QgRU5EIElOIEEgKiwgdG8gbWF0Y2ggYSB2ZXJzaW9uIG51bWJlci4KLQkjIC1zeXN2KiBpcyBub3QgaGVyZSBiZWNhdXNlIGl0IGNvbWVzIGxhdGVyLCBhZnRlciBzeXN2cjQuCi0JLWdudSogfCAtYnNkKiB8IC1tYWNoKiB8IC1taW5peCogfCAtZ2VuaXgqIHwgLXVsdHJpeCogfCAtaXJpeCogXAotCSAgICAgIHwgLSp2bXMqIHwgLXNjbyogfCAtZXNpeCogfCAtaXNjKiB8IC1haXgqIHwgLWNuayogfCAtc3Vub3MgfCAtc3Vub3NbMzRdKlwKLQkgICAgICB8IC1ocHV4KiB8IC11bm9zKiB8IC1vc2YqIHwgLWx1bmEqIHwgLWRndXgqIHwgLWF1cm9yYXV4KiB8IC1zb2xhcmlzKiBcCi0JICAgICAgfCAtc3ltKiB8IC1rb3BlbnNvbGFyaXMqIFwKLQkgICAgICB8IC1hbWlnYW9zKiB8IC1hbWlnYWRvcyogfCAtbXNkb3MqIHwgLW5ld3NvcyogfCAtdW5pY29zKiB8IC1hb2YqIFwKLQkgICAgICB8IC1hb3MqIHwgLWFyb3MqIFwKLQkgICAgICB8IC1uaW5keSogfCAtdnhzaW0qIHwgLXZ4d29ya3MqIHwgLWVibW9uKiB8IC1obXMqIHwgLW12cyogXAotCSAgICAgIHwgLWNsaXgqIHwgLXJpc2NvcyogfCAtdW5pcGx1cyogfCAtaXJpcyogfCAtcnR1KiB8IC14ZW5peCogXAotCSAgICAgIHwgLWhpdXgqIHwgLTM4NmJzZCogfCAta25ldGJzZCogfCAtbWlyYnNkKiB8IC1uZXRic2QqIFwKLQkgICAgICB8IC1vcGVuYnNkKiB8IC1zb2xpZGJzZCogXAotCSAgICAgIHwgLWVra29ic2QqIHwgLWtmcmVlYnNkKiB8IC1mcmVlYnNkKiB8IC1yaXNjaXgqIHwgLWx5bnhvcyogXAotCSAgICAgIHwgLWJvc3gqIHwgLW5leHRzdGVwKiB8IC1jeHV4KiB8IC1hb3V0KiB8IC1lbGYqIHwgLW9hYmkqIFwKLQkgICAgICB8IC1wdHgqIHwgLWNvZmYqIHwgLWVjb2ZmKiB8IC13aW5udCogfCAtZG9tYWluKiB8IC12c3RhKiBcCi0JICAgICAgfCAtdWRpKiB8IC1lYWJpKiB8IC1saXRlcyogfCAtaWVlZSogfCAtZ28zMiogfCAtYXV4KiBcCi0JICAgICAgfCAtY2hvcnVzb3MqIHwgLWNob3J1c3JkYiogfCAtY2VnY2MqIFwKLQkgICAgICB8IC1jeWd3aW4qIHwgLXBlKiB8IC1wc29zKiB8IC1tb3NzKiB8IC1wcm9lbGYqIHwgLXJ0ZW1zKiBcCi0JICAgICAgfCAtbWluZ3czMiogfCAtbGludXgtZ251KiB8IC1saW51eC1uZXdsaWIqIHwgLWxpbnV4LXVjbGliYyogXAotCSAgICAgIHwgLXV4cHYqIHwgLWJlb3MqIHwgLW1wZWl4KiB8IC11ZGsqIFwKLQkgICAgICB8IC1pbnRlcml4KiB8IC11d2luKiB8IC1ta3MqIHwgLXJoYXBzb2R5KiB8IC1kYXJ3aW4qIHwgLW9wZW5lZCogXAotCSAgICAgIHwgLW9wZW5zdGVwKiB8IC1vc2tpdCogfCAtY29uaXgqIHwgLXB3MzIqIHwgLW5vbnN0b3B1eCogXAotCSAgICAgIHwgLXN0b3JtLWNoYW9zKiB8IC10b3BzMTAqIHwgLXRlbmV4KiB8IC10b3BzMjAqIHwgLWl0cyogXAotCSAgICAgIHwgLW9zMiogfCAtdm9zKiB8IC1wYWxtb3MqIHwgLXVjbGludXgqIHwgLW51Y2xldXMqIFwKLQkgICAgICB8IC1tb3JwaG9zKiB8IC1zdXBlcnV4KiB8IC1ydG1rKiB8IC1ydG1rLW5vdmEqIHwgLXdpbmRpc3MqIFwKLQkgICAgICB8IC1wb3dlcm1heCogfCAtZG5peCogfCAtbng2IHwgLW54NyB8IC1zZWkqIHwgLWRyYWdvbmZseSogXAotCSAgICAgIHwgLXNreW9zKiB8IC1oYWlrdSogfCAtcmRvcyogfCAtdG9wcGVycyogfCAtZHJvcHMqIHwgLWVzKikKLQkjIFJlbWVtYmVyLCBlYWNoIGFsdGVybmF0aXZlIE1VU1QgRU5EIElOICosIHRvIG1hdGNoIGEgdmVyc2lvbiBudW1iZXIuCi0JCTs7Ci0JLXFueCopCi0JCWNhc2UgJGJhc2ljX21hY2hpbmUgaW4KLQkJICAgIHg4Ni0qIHwgaSo4Ni0qKQotCQkJOzsKLQkJICAgICopCi0JCQlvcz0tbnRvJG9zCi0JCQk7OwotCQllc2FjCi0JCTs7Ci0JLW50by1xbngqKQotCQk7OwotCS1udG8qKQotCQlvcz1gZWNobyAkb3MgfCBzZWQgLWUgJ3N8bnRvfG50by1xbnh8J2AKLQkJOzsKLQktc2ltIHwgLWVzMTgwMCogfCAtaG1zKiB8IC14cmF5IHwgLW9zNjhrKiB8IC1ub25lKiB8IC12ODhyKiBcCi0JICAgICAgfCAtd2luZG93cyogfCAtb3N4IHwgLWFidWcgfCAtbmV0d2FyZSogfCAtb3M5KiB8IC1iZW9zKiB8IC1oYWlrdSogXAotCSAgICAgIHwgLW1hY29zKiB8IC1tcHcqIHwgLW1hZ2ljKiB8IC1tbWl4d2FyZSogfCAtbW9uOTYwKiB8IC1sbmV3cyopCi0JCTs7Ci0JLW1hYyopCi0JCW9zPWBlY2hvICRvcyB8IHNlZCAtZSAnc3xtYWN8bWFjb3N8J2AKLQkJOzsKLQktbGludXgtZGlldGxpYmMpCi0JCW9zPS1saW51eC1kaWV0bGliYwotCQk7OwotCS1saW51eCopCi0JCW9zPWBlY2hvICRvcyB8IHNlZCAtZSAnc3xsaW51eHxsaW51eC1nbnV8J2AKLQkJOzsKLQktc3Vub3M1KikKLQkJb3M9YGVjaG8gJG9zIHwgc2VkIC1lICdzfHN1bm9zNXxzb2xhcmlzMnwnYAotCQk7OwotCS1zdW5vczYqKQotCQlvcz1gZWNobyAkb3MgfCBzZWQgLWUgJ3N8c3Vub3M2fHNvbGFyaXMzfCdgCi0JCTs7Ci0JLW9wZW5lZCopCi0JCW9zPS1vcGVuZWRpdGlvbgotCQk7OwotICAgICAgICAtb3M0MDAqKQotCQlvcz0tb3M0MDAKLQkJOzsKLQktd2luY2UqKQotCQlvcz0td2luY2UKLQkJOzsKLQktb3Nmcm9zZSopCi0JCW9zPS1vc2Zyb3NlCi0JCTs7Ci0JLW9zZiopCi0JCW9zPS1vc2YKLQkJOzsKLQktdXRlayopCi0JCW9zPS1ic2QKLQkJOzsKLQktZHluaXgqKQotCQlvcz0tYnNkCi0JCTs7Ci0JLWFjaXMqKQotCQlvcz0tYW9zCi0JCTs7Ci0JLWF0aGVvcyopCi0JCW9zPS1hdGhlb3MKLQkJOzsKLQktc3lsbGFibGUqKQotCQlvcz0tc3lsbGFibGUKLQkJOzsKLQktMzg2YnNkKQotCQlvcz0tYnNkCi0JCTs7Ci0JLWN0aXgqIHwgLXV0cyopCi0JCW9zPS1zeXN2Ci0JCTs7Ci0JLW5vdmEqKQotCQlvcz0tcnRtay1ub3ZhCi0JCTs7Ci0JLW5zMiApCi0JCW9zPS1uZXh0c3RlcDIKLQkJOzsKLQktbnNrKikKLQkJb3M9LW5zawotCQk7OwotCSMgUHJlc2VydmUgdGhlIHZlcnNpb24gbnVtYmVyIG9mIHNpbml4NS4KLQktc2luaXg1LiopCi0JCW9zPWBlY2hvICRvcyB8IHNlZCAtZSAnc3xzaW5peHxzeXN2fCdgCi0JCTs7Ci0JLXNpbml4KikKLQkJb3M9LXN5c3Y0Ci0JCTs7Ci0gICAgICAgIC10cGYqKQotCQlvcz0tdHBmCi0JCTs7Ci0JLXRyaXRvbiopCi0JCW9zPS1zeXN2MwotCQk7OwotCS1vc3MqKQotCQlvcz0tc3lzdjMKLQkJOzsKLQktc3ZyNCkKLQkJb3M9LXN5c3Y0Ci0JCTs7Ci0JLXN2cjMpCi0JCW9zPS1zeXN2MwotCQk7OwotCS1zeXN2cjQpCi0JCW9zPS1zeXN2NAotCQk7OwotCSMgVGhpcyBtdXN0IGNvbWUgYWZ0ZXIgLXN5c3ZyNC4KLQktc3lzdiopCi0JCTs7Ci0JLW9zZSopCi0JCW9zPS1vc2UKLQkJOzsKLQktZXMxODAwKikKLQkJb3M9LW9zZQotCQk7OwotCS14ZW5peCkKLQkJb3M9LXhlbml4Ci0JCTs7Ci0JLSptaW50IHwgLW1pbnRbMC05XSogfCAtKk1pTlQgfCAtTWlOVFswLTldKikKLQkJb3M9LW1pbnQKLQkJOzsKLQktYXJvcyopCi0JCW9zPS1hcm9zCi0JCTs7Ci0JLWthb3MqKQotCQlvcz0ta2FvcwotCQk7OwotCS16dm1vZSkKLQkJb3M9LXp2bW9lCi0JCTs7Ci0JLWRpY29zKikKLQkJb3M9LWRpY29zCi0JCTs7Ci0JLW5vbmUpCi0JCTs7Ci0JKikKLQkJIyBHZXQgcmlkIG9mIHRoZSBgLScgYXQgdGhlIGJlZ2lubmluZyBvZiAkb3MuCi0JCW9zPWBlY2hvICRvcyB8IHNlZCAncy9bXi1dKi0vLydgCi0JCWVjaG8gSW52YWxpZCBjb25maWd1cmF0aW9uIFxgJDFcJzogc3lzdGVtIFxgJG9zXCcgbm90IHJlY29nbml6ZWQgMT4mMgotCQlleGl0IDEKLQkJOzsKLWVzYWMKLWVsc2UKLQotIyBIZXJlIHdlIGhhbmRsZSB0aGUgZGVmYXVsdCBvcGVyYXRpbmcgc3lzdGVtcyB0aGF0IGNvbWUgd2l0aCB2YXJpb3VzIG1hY2hpbmVzLgotIyBUaGUgdmFsdWUgc2hvdWxkIGJlIHdoYXQgdGhlIHZlbmRvciBjdXJyZW50bHkgc2hpcHMgb3V0IHRoZSBkb29yIHdpdGggdGhlaXIKLSMgbWFjaGluZSBvciBwdXQgYW5vdGhlciB3YXksIHRoZSBtb3N0IHBvcHVsYXIgb3MgcHJvdmlkZWQgd2l0aCB0aGUgbWFjaGluZS4KLQotIyBOb3RlIHRoYXQgaWYgeW91J3JlIGdvaW5nIHRvIHRyeSB0byBtYXRjaCAiLU1BTlVGQUNUVVJFUiIgaGVyZSAoc2F5LAotIyAiLXN1biIpLCB0aGVuIHlvdSBoYXZlIHRvIHRlbGwgdGhlIGNhc2Ugc3RhdGVtZW50IHVwIHRvd2FyZHMgdGhlIHRvcAotIyB0aGF0IE1BTlVGQUNUVVJFUiBpc24ndCBhbiBvcGVyYXRpbmcgc3lzdGVtLiAgT3RoZXJ3aXNlLCBjb2RlIGFib3ZlCi0jIHdpbGwgc2lnbmFsIGFuIGVycm9yIHNheWluZyB0aGF0IE1BTlVGQUNUVVJFUiBpc24ndCBhbiBvcGVyYXRpbmcKLSMgc3lzdGVtLCBhbmQgd2UnbGwgbmV2ZXIgZ2V0IHRvIHRoaXMgcG9pbnQuCi0KLWNhc2UgJGJhc2ljX21hY2hpbmUgaW4KLSAgICAgICAgc2NvcmUtKikKLQkJb3M9LWVsZgotCQk7OwotICAgICAgICBzcHUtKikKLQkJb3M9LWVsZgotCQk7OwotCSotYWNvcm4pCi0JCW9zPS1yaXNjaXgxLjIKLQkJOzsKLQlhcm0qLXJlYmVsKQotCQlvcz0tbGludXgKLQkJOzsKLQlhcm0qLXNlbWkpCi0JCW9zPS1hb3V0Ci0JCTs7Ci0gICAgICAgIGM0eC0qIHwgdGljNHgtKikKLSAgICAgICAgCW9zPS1jb2ZmCi0JCTs7Ci0JIyBUaGlzIG11c3QgY29tZSBiZWZvcmUgdGhlICotZGVjIGVudHJ5LgotCXBkcDEwLSopCi0JCW9zPS10b3BzMjAKLQkJOzsKLQlwZHAxMS0qKQotCQlvcz0tbm9uZQotCQk7OwotCSotZGVjIHwgdmF4LSopCi0JCW9zPS11bHRyaXg0LjIKLQkJOzsKLQltNjgqLWFwb2xsbykKLQkJb3M9LWRvbWFpbgotCQk7OwotCWkzODYtc3VuKQotCQlvcz0tc3Vub3M0LjAuMgotCQk7OwotCW02ODAwMC1zdW4pCi0JCW9zPS1zdW5vczMKLQkJIyBUaGlzIGFsc28gZXhpc3RzIGluIHRoZSBjb25maWd1cmUgcHJvZ3JhbSwgYnV0IHdhcyBub3QgdGhlCi0JCSMgZGVmYXVsdC4KLQkJIyBvcz0tc3Vub3M0Ci0JCTs7Ci0JbTY4Ki1jaXNjbykKLQkJb3M9LWFvdXQKLQkJOzsKLSAgICAgICAgbWVwLSopCi0JCW9zPS1lbGYKLQkJOzsKLQltaXBzKi1jaXNjbykKLQkJb3M9LWVsZgotCQk7OwotCW1pcHMqLSopCi0JCW9zPS1lbGYKLQkJOzsKLQlvcjMyLSopCi0JCW9zPS1jb2ZmCi0JCTs7Ci0JKi10dGkpCSMgbXVzdCBiZSBiZWZvcmUgc3BhcmMgZW50cnkgb3Igd2UgZ2V0IHRoZSB3cm9uZyBvcy4KLQkJb3M9LXN5c3YzCi0JCTs7Ci0Jc3BhcmMtKiB8ICotc3VuKQotCQlvcz0tc3Vub3M0LjEuMQotCQk7OwotCSotYmUpCi0JCW9zPS1iZW9zCi0JCTs7Ci0JKi1oYWlrdSkKLQkJb3M9LWhhaWt1Ci0JCTs7Ci0JKi1pYm0pCi0JCW9zPS1haXgKLQkJOzsKLSAgICAJKi1rbnV0aCkKLQkJb3M9LW1taXh3YXJlCi0JCTs7Ci0JKi13ZWMpCi0JCW9zPS1wcm9lbGYKLQkJOzsKLQkqLXdpbmJvbmQpCi0JCW9zPS1wcm9lbGYKLQkJOzsKLQkqLW9raSkKLQkJb3M9LXByb2VsZgotCQk7OwotCSotaHApCi0JCW9zPS1ocHV4Ci0JCTs7Ci0JKi1oaXRhY2hpKQotCQlvcz0taGl1eAotCQk7OwotCWk4NjAtKiB8ICotYXR0IHwgKi1uY3IgfCAqLWFsdG9zIHwgKi1tb3Rvcm9sYSB8ICotY29udmVyZ2VudCkKLQkJb3M9LXN5c3YKLQkJOzsKLQkqLWNibSkKLQkJb3M9LWFtaWdhb3MKLQkJOzsKLQkqLWRnKQotCQlvcz0tZGd1eAotCQk7OwotCSotZG9scGhpbikKLQkJb3M9LXN5c3YzCi0JCTs7Ci0JbTY4ay1jY3VyKQotCQlvcz0tcnR1Ci0JCTs7Ci0JbTg4ay1vbXJvbiopCi0JCW9zPS1sdW5hCi0JCTs7Ci0JKi1uZXh0ICkKLQkJb3M9LW5leHRzdGVwCi0JCTs7Ci0JKi1zZXF1ZW50KQotCQlvcz0tcHR4Ci0JCTs7Ci0JKi1jcmRzKQotCQlvcz0tdW5vcwotCQk7OwotCSotbnMpCi0JCW9zPS1nZW5peAotCQk7OwotCWkzNzAtKikKLQkJb3M9LW12cwotCQk7OwotCSotbmV4dCkKLQkJb3M9LW5leHRzdGVwMwotCQk7OwotCSotZ291bGQpCi0JCW9zPS1zeXN2Ci0JCTs7Ci0JKi1oaWdobGV2ZWwpCi0JCW9zPS1ic2QKLQkJOzsKLQkqLWVuY29yZSkKLQkJb3M9LWJzZAotCQk7OwotCSotc2dpKQotCQlvcz0taXJpeAotCQk7OwotCSotc2llbWVucykKLQkJb3M9LXN5c3Y0Ci0JCTs7Ci0JKi1tYXNzY29tcCkKLQkJb3M9LXJ0dQotCQk7OwotCWYzMFswMV0tZnVqaXRzdSB8IGY3MDAtZnVqaXRzdSkKLQkJb3M9LXV4cHYKLQkJOzsKLQkqLXJvbTY4aykKLQkJb3M9LWNvZmYKLQkJOzsKLQkqLSpidWcpCi0JCW9zPS1jb2ZmCi0JCTs7Ci0JKi1hcHBsZSkKLQkJb3M9LW1hY29zCi0JCTs7Ci0JKi1hdGFyaSopCi0JCW9zPS1taW50Ci0JCTs7Ci0JKikKLQkJb3M9LW5vbmUKLQkJOzsKLWVzYWMKLWZpCi0KLSMgSGVyZSB3ZSBoYW5kbGUgdGhlIGNhc2Ugd2hlcmUgd2Uga25vdyB0aGUgb3MsIGFuZCB0aGUgQ1BVIHR5cGUsIGJ1dCBub3QgdGhlCi0jIG1hbnVmYWN0dXJlci4gIFdlIHBpY2sgdGhlIGxvZ2ljYWwgbWFudWZhY3R1cmVyLgotdmVuZG9yPXVua25vd24KLWNhc2UgJGJhc2ljX21hY2hpbmUgaW4KLQkqLXVua25vd24pCi0JCWNhc2UgJG9zIGluCi0JCQktcmlzY2l4KikKLQkJCQl2ZW5kb3I9YWNvcm4KLQkJCQk7OwotCQkJLXN1bm9zKikKLQkJCQl2ZW5kb3I9c3VuCi0JCQkJOzsKLQkJCS1jbmsqfC1haXgqKQotCQkJCXZlbmRvcj1pYm0KLQkJCQk7OwotCQkJLWJlb3MqKQotCQkJCXZlbmRvcj1iZQotCQkJCTs7Ci0JCQktaHB1eCopCi0JCQkJdmVuZG9yPWhwCi0JCQkJOzsKLQkJCS1tcGVpeCopCi0JCQkJdmVuZG9yPWhwCi0JCQkJOzsKLQkJCS1oaXV4KikKLQkJCQl2ZW5kb3I9aGl0YWNoaQotCQkJCTs7Ci0JCQktdW5vcyopCi0JCQkJdmVuZG9yPWNyZHMKLQkJCQk7OwotCQkJLWRndXgqKQotCQkJCXZlbmRvcj1kZwotCQkJCTs7Ci0JCQktbHVuYSopCi0JCQkJdmVuZG9yPW9tcm9uCi0JCQkJOzsKLQkJCS1nZW5peCopCi0JCQkJdmVuZG9yPW5zCi0JCQkJOzsKLQkJCS1tdnMqIHwgLW9wZW5lZCopCi0JCQkJdmVuZG9yPWlibQotCQkJCTs7Ci0JCQktb3M0MDAqKQotCQkJCXZlbmRvcj1pYm0KLQkJCQk7OwotCQkJLXB0eCopCi0JCQkJdmVuZG9yPXNlcXVlbnQKLQkJCQk7OwotCQkJLXRwZiopCi0JCQkJdmVuZG9yPWlibQotCQkJCTs7Ci0JCQktdnhzaW0qIHwgLXZ4d29ya3MqIHwgLXdpbmRpc3MqKQotCQkJCXZlbmRvcj13cnMKLQkJCQk7OwotCQkJLWF1eCopCi0JCQkJdmVuZG9yPWFwcGxlCi0JCQkJOzsKLQkJCS1obXMqKQotCQkJCXZlbmRvcj1oaXRhY2hpCi0JCQkJOzsKLQkJCS1tcHcqIHwgLW1hY29zKikKLQkJCQl2ZW5kb3I9YXBwbGUKLQkJCQk7OwotCQkJLSptaW50IHwgLW1pbnRbMC05XSogfCAtKk1pTlQgfCAtTWlOVFswLTldKikKLQkJCQl2ZW5kb3I9YXRhcmkKLQkJCQk7OwotCQkJLXZvcyopCi0JCQkJdmVuZG9yPXN0cmF0dXMKLQkJCQk7OwotCQllc2FjCi0JCWJhc2ljX21hY2hpbmU9YGVjaG8gJGJhc2ljX21hY2hpbmUgfCBzZWQgInMvdW5rbm93bi8kdmVuZG9yLyJgCi0JCTs7Ci1lc2FjCi0KLWVjaG8gJGJhc2ljX21hY2hpbmUkb3MKLWV4aXQKLQotIyBMb2NhbCB2YXJpYWJsZXM6Ci0jIGV2YWw6IChhZGQtaG9vayAnd3JpdGUtZmlsZS1ob29rcyAndGltZS1zdGFtcCkKLSMgdGltZS1zdGFtcC1zdGFydDogInRpbWVzdGFtcD0nIgotIyB0aW1lLXN0YW1wLWZvcm1hdDogIiU6eS0lMDJtLSUwMmQiCi0jIHRpbWUtc3RhbXAtZW5kOiAiJyIKLSMgRW5kOgpkaWZmIC0tZ2l0IGEvY29uZmlndXJlIGIvY29uZmlndXJlCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDc1NQppbmRleCA5N2IxN2IxLi4wMDAwMDAwCi0tLSBhL2NvbmZpZ3VyZQorKysgL2Rldi9udWxsCkBAIC0xLDE1ODcwICswLDAgQEAKLSMhIC9iaW4vc2gKLSMgR3Vlc3MgdmFsdWVzIGZvciBzeXN0ZW0tZGVwZW5kZW50IHZhcmlhYmxlcyBhbmQgY3JlYXRlIE1ha2VmaWxlcy4KLSMgR2VuZXJhdGVkIGJ5IEdOVSBBdXRvY29uZiAyLjY4IGZvciBsaWJqcGVnIDguMy4wLgotIwotIwotIyBDb3B5cmlnaHQgKEMpIDE5OTIsIDE5OTMsIDE5OTQsIDE5OTUsIDE5OTYsIDE5OTgsIDE5OTksIDIwMDAsIDIwMDEsCi0jIDIwMDIsIDIwMDMsIDIwMDQsIDIwMDUsIDIwMDYsIDIwMDcsIDIwMDgsIDIwMDksIDIwMTAgRnJlZSBTb2Z0d2FyZQotIyBGb3VuZGF0aW9uLCBJbmMuCi0jCi0jCi0jIFRoaXMgY29uZmlndXJlIHNjcmlwdCBpcyBmcmVlIHNvZnR3YXJlOyB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uCi0jIGdpdmVzIHVubGltaXRlZCBwZXJtaXNzaW9uIHRvIGNvcHksIGRpc3RyaWJ1dGUgYW5kIG1vZGlmeSBpdC4KLSMjIC0tLS0tLS0tLS0tLS0tLS0tLS0tICMjCi0jIyBNNHNoIEluaXRpYWxpemF0aW9uLiAjIwotIyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0gIyMKLQotIyBCZSBtb3JlIEJvdXJuZSBjb21wYXRpYmxlCi1EVUFMQ0FTRT0xOyBleHBvcnQgRFVBTENBU0UgIyBmb3IgTUtTIHNoCi1pZiB0ZXN0IC1uICIke1pTSF9WRVJTSU9OK3NldH0iICYmIChlbXVsYXRlIHNoKSA+L2Rldi9udWxsIDI+JjE7IHRoZW4gOgotICBlbXVsYXRlIHNoCi0gIE5VTExDTUQ9OgotICAjIFByZS00LjIgdmVyc2lvbnMgb2YgWnNoIGRvIHdvcmQgc3BsaXR0aW5nIG9uICR7MSsiJEAifSwgd2hpY2gKLSAgIyBpcyBjb250cmFyeSB0byBvdXIgdXNhZ2UuICBEaXNhYmxlIHRoaXMgZmVhdHVyZS4KLSAgYWxpYXMgLWcgJyR7MSsiJEAifSc9JyIkQCInCi0gIHNldG9wdCBOT19HTE9CX1NVQlNUCi1lbHNlCi0gIGNhc2UgYChzZXQgLW8pIDI+L2Rldi9udWxsYCBpbiAjKAotICAqcG9zaXgqKSA6Ci0gICAgc2V0IC1vIHBvc2l4IDs7ICMoCi0gICopIDoKLSAgICAgOzsKLWVzYWMKLWZpCi0KLQotYXNfbmw9JwotJwotZXhwb3J0IGFzX25sCi0jIFByaW50aW5nIGEgbG9uZyBzdHJpbmcgY3Jhc2hlcyBTb2xhcmlzIDcgL3Vzci9iaW4vcHJpbnRmLgotYXNfZWNobz0nXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXCcKLWFzX2VjaG89JGFzX2VjaG8kYXNfZWNobyRhc19lY2hvJGFzX2VjaG8kYXNfZWNobwotYXNfZWNobz0kYXNfZWNobyRhc19lY2hvJGFzX2VjaG8kYXNfZWNobyRhc19lY2hvJGFzX2VjaG8KLSMgUHJlZmVyIGEga3NoIHNoZWxsIGJ1aWx0aW4gb3ZlciBhbiBleHRlcm5hbCBwcmludGYgcHJvZ3JhbSBvbiBTb2xhcmlzLAotIyBidXQgd2l0aG91dCB3YXN0aW5nIGZvcmtzIGZvciBiYXNoIG9yIHpzaC4KLWlmIHRlc3QgLXogIiRCQVNIX1ZFUlNJT04kWlNIX1ZFUlNJT04iIFwKLSAgICAmJiAodGVzdCAiWGBwcmludCAtciAtLSAkYXNfZWNob2AiID0gIlgkYXNfZWNobyIpIDI+L2Rldi9udWxsOyB0aGVuCi0gIGFzX2VjaG89J3ByaW50IC1yIC0tJwotICBhc19lY2hvX249J3ByaW50IC1ybiAtLScKLWVsaWYgKHRlc3QgIlhgcHJpbnRmICVzICRhc19lY2hvYCIgPSAiWCRhc19lY2hvIikgMj4vZGV2L251bGw7IHRoZW4KLSAgYXNfZWNobz0ncHJpbnRmICVzXG4nCi0gIGFzX2VjaG9fbj0ncHJpbnRmICVzJwotZWxzZQotICBpZiB0ZXN0ICJYYCgvdXNyL3VjYi9lY2hvIC1uIC1uICRhc19lY2hvKSAyPi9kZXYvbnVsbGAiID0gIlgtbiAkYXNfZWNobyI7IHRoZW4KLSAgICBhc19lY2hvX2JvZHk9J2V2YWwgL3Vzci91Y2IvZWNobyAtbiAiJDEkYXNfbmwiJwotICAgIGFzX2VjaG9fbj0nL3Vzci91Y2IvZWNobyAtbicKLSAgZWxzZQotICAgIGFzX2VjaG9fYm9keT0nZXZhbCBleHByICJYJDEiIDogIlhcXCguKlxcKSInCi0gICAgYXNfZWNob19uX2JvZHk9J2V2YWwKLSAgICAgIGFyZz0kMTsKLSAgICAgIGNhc2UgJGFyZyBpbiAjKAotICAgICAgKiIkYXNfbmwiKikKLQlleHByICJYJGFyZyIgOiAiWFxcKC4qXFwpJGFzX25sIjsKLQlhcmc9YGV4cHIgIlgkYXJnIiA6ICIuKiRhc19ubFxcKC4qXFwpImA7OwotICAgICAgZXNhYzsKLSAgICAgIGV4cHIgIlgkYXJnIiA6ICJYXFwoLipcXCkiIHwgdHIgLWQgIiRhc19ubCIKLSAgICAnCi0gICAgZXhwb3J0IGFzX2VjaG9fbl9ib2R5Ci0gICAgYXNfZWNob19uPSdzaCAtYyAkYXNfZWNob19uX2JvZHkgYXNfZWNobycKLSAgZmkKLSAgZXhwb3J0IGFzX2VjaG9fYm9keQotICBhc19lY2hvPSdzaCAtYyAkYXNfZWNob19ib2R5IGFzX2VjaG8nCi1maQotCi0jIFRoZSB1c2VyIGlzIGFsd2F5cyByaWdodC4KLWlmIHRlc3QgIiR7UEFUSF9TRVBBUkFUT1Irc2V0fSIgIT0gc2V0OyB0aGVuCi0gIFBBVEhfU0VQQVJBVE9SPToKLSAgKFBBVEg9Jy9iaW47L2Jpbic7IEZQQVRIPSRQQVRIOyBzaCAtYyA6KSA+L2Rldi9udWxsIDI+JjEgJiYgewotICAgIChQQVRIPScvYmluOi9iaW4nOyBGUEFUSD0kUEFUSDsgc2ggLWMgOikgPi9kZXYvbnVsbCAyPiYxIHx8Ci0gICAgICBQQVRIX1NFUEFSQVRPUj0nOycKLSAgfQotZmkKLQotCi0jIElGUwotIyBXZSBuZWVkIHNwYWNlLCB0YWIgYW5kIG5ldyBsaW5lLCBpbiBwcmVjaXNlbHkgdGhhdCBvcmRlci4gIFF1b3RpbmcgaXMKLSMgdGhlcmUgdG8gcHJldmVudCBlZGl0b3JzIGZyb20gY29tcGxhaW5pbmcgYWJvdXQgc3BhY2UtdGFiLgotIyAoSWYgX0FTX1BBVEhfV0FMSyB3ZXJlIGNhbGxlZCB3aXRoIElGUyB1bnNldCwgaXQgd291bGQgZGlzYWJsZSB3b3JkCi0jIHNwbGl0dGluZyBieSBzZXR0aW5nIElGUyB0byBlbXB0eSB2YWx1ZS4pCi1JRlM9IiAiIgkkYXNfbmwiCi0KLSMgRmluZCB3aG8gd2UgYXJlLiAgTG9vayBpbiB0aGUgcGF0aCBpZiB3ZSBjb250YWluIG5vIGRpcmVjdG9yeSBzZXBhcmF0b3IuCi1hc19teXNlbGY9Ci1jYXNlICQwIGluICMoKAotICAqW1xcL10qICkgYXNfbXlzZWxmPSQwIDs7Ci0gICopIGFzX3NhdmVfSUZTPSRJRlM7IElGUz0kUEFUSF9TRVBBUkFUT1IKLWZvciBhc19kaXIgaW4gJFBBVEgKLWRvCi0gIElGUz0kYXNfc2F2ZV9JRlMKLSAgdGVzdCAteiAiJGFzX2RpciIgJiYgYXNfZGlyPS4KLSAgICB0ZXN0IC1yICIkYXNfZGlyLyQwIiAmJiBhc19teXNlbGY9JGFzX2Rpci8kMCAmJiBicmVhawotICBkb25lCi1JRlM9JGFzX3NhdmVfSUZTCi0KLSAgICAgOzsKLWVzYWMKLSMgV2UgZGlkIG5vdCBmaW5kIG91cnNlbHZlcywgbW9zdCBwcm9iYWJseSB3ZSB3ZXJlIHJ1biBhcyBgc2ggQ09NTUFORCcKLSMgaW4gd2hpY2ggY2FzZSB3ZSBhcmUgbm90IHRvIGJlIGZvdW5kIGluIHRoZSBwYXRoLgotaWYgdGVzdCAieCRhc19teXNlbGYiID0geDsgdGhlbgotICBhc19teXNlbGY9JDAKLWZpCi1pZiB0ZXN0ICEgLWYgIiRhc19teXNlbGYiOyB0aGVuCi0gICRhc19lY2hvICIkYXNfbXlzZWxmOiBlcnJvcjogY2Fubm90IGZpbmQgbXlzZWxmOyByZXJ1biB3aXRoIGFuIGFic29sdXRlIGZpbGUgbmFtZSIgPiYyCi0gIGV4aXQgMQotZmkKLQotIyBVbnNldCB2YXJpYWJsZXMgdGhhdCB3ZSBkbyBub3QgbmVlZCBhbmQgd2hpY2ggY2F1c2UgYnVncyAoZS5nLiBpbgotIyBwcmUtMy4wIFVXSU4ga3NoKS4gIEJ1dCBkbyBub3QgY2F1c2UgYnVncyBpbiBiYXNoIDIuMDE7IHRoZSAifHwgZXhpdCAxIgotIyBzdXBwcmVzc2VzIGFueSAiU2VnbWVudGF0aW9uIGZhdWx0IiBtZXNzYWdlIHRoZXJlLiAgJygoJyBjb3VsZAotIyB0cmlnZ2VyIGEgYnVnIGluIHBka3NoIDUuMi4xNC4KLWZvciBhc192YXIgaW4gQkFTSF9FTlYgRU5WIE1BSUwgTUFJTFBBVEgKLWRvIGV2YWwgdGVzdCB4XCR7JGFzX3ZhcitzZXR9ID0geHNldCBcCi0gICYmICggKHVuc2V0ICRhc192YXIpIHx8IGV4aXQgMSkgPi9kZXYvbnVsbCAyPiYxICYmIHVuc2V0ICRhc192YXIgfHwgOgotZG9uZQotUFMxPSckICcKLVBTMj0nPiAnCi1QUzQ9JysgJwotCi0jIE5MUyBudWlzYW5jZXMuCi1MQ19BTEw9QwotZXhwb3J0IExDX0FMTAotTEFOR1VBR0U9QwotZXhwb3J0IExBTkdVQUdFCi0KLSMgQ0RQQVRILgotKHVuc2V0IENEUEFUSCkgPi9kZXYvbnVsbCAyPiYxICYmIHVuc2V0IENEUEFUSAotCi1pZiB0ZXN0ICJ4JENPTkZJR19TSEVMTCIgPSB4OyB0aGVuCi0gIGFzX2JvdXJuZV9jb21wYXRpYmxlPSJpZiB0ZXN0IC1uIFwiXCR7WlNIX1ZFUlNJT04rc2V0fVwiICYmIChlbXVsYXRlIHNoKSA+L2Rldi9udWxsIDI+JjE7IHRoZW4gOgotICBlbXVsYXRlIHNoCi0gIE5VTExDTUQ9OgotICAjIFByZS00LjIgdmVyc2lvbnMgb2YgWnNoIGRvIHdvcmQgc3BsaXR0aW5nIG9uIFwkezErXCJcJEBcIn0sIHdoaWNoCi0gICMgaXMgY29udHJhcnkgdG8gb3VyIHVzYWdlLiAgRGlzYWJsZSB0aGlzIGZlYXR1cmUuCi0gIGFsaWFzIC1nICdcJHsxK1wiXCRAXCJ9Jz0nXCJcJEBcIicKLSAgc2V0b3B0IE5PX0dMT0JfU1VCU1QKLWVsc2UKLSAgY2FzZSBcYChzZXQgLW8pIDI+L2Rldi9udWxsXGAgaW4gIygKLSAgKnBvc2l4KikgOgotICAgIHNldCAtbyBwb3NpeCA7OyAjKAotICAqKSA6Ci0gICAgIDs7Ci1lc2FjCi1maQotIgotICBhc19yZXF1aXJlZD0iYXNfZm5fcmV0dXJuICgpIHsgKGV4aXQgXCQxKTsgfQotYXNfZm5fc3VjY2VzcyAoKSB7IGFzX2ZuX3JldHVybiAwOyB9Ci1hc19mbl9mYWlsdXJlICgpIHsgYXNfZm5fcmV0dXJuIDE7IH0KLWFzX2ZuX3JldF9zdWNjZXNzICgpIHsgcmV0dXJuIDA7IH0KLWFzX2ZuX3JldF9mYWlsdXJlICgpIHsgcmV0dXJuIDE7IH0KLQotZXhpdGNvZGU9MAotYXNfZm5fc3VjY2VzcyB8fCB7IGV4aXRjb2RlPTE7IGVjaG8gYXNfZm5fc3VjY2VzcyBmYWlsZWQuOyB9Ci1hc19mbl9mYWlsdXJlICYmIHsgZXhpdGNvZGU9MTsgZWNobyBhc19mbl9mYWlsdXJlIHN1Y2NlZWRlZC47IH0KLWFzX2ZuX3JldF9zdWNjZXNzIHx8IHsgZXhpdGNvZGU9MTsgZWNobyBhc19mbl9yZXRfc3VjY2VzcyBmYWlsZWQuOyB9Ci1hc19mbl9yZXRfZmFpbHVyZSAmJiB7IGV4aXRjb2RlPTE7IGVjaG8gYXNfZm5fcmV0X2ZhaWx1cmUgc3VjY2VlZGVkLjsgfQotaWYgKCBzZXQgeDsgYXNfZm5fcmV0X3N1Y2Nlc3MgeSAmJiB0ZXN0IHggPSBcIlwkMVwiICk7IHRoZW4gOgotCi1lbHNlCi0gIGV4aXRjb2RlPTE7IGVjaG8gcG9zaXRpb25hbCBwYXJhbWV0ZXJzIHdlcmUgbm90IHNhdmVkLgotZmkKLXRlc3QgeFwkZXhpdGNvZGUgPSB4MCB8fCBleGl0IDEiCi0gIGFzX3N1Z2dlc3RlZD0iICBhc19saW5lbm9fMT0iO2FzX3N1Z2dlc3RlZD0kYXNfc3VnZ2VzdGVkJExJTkVOTzthc19zdWdnZXN0ZWQ9JGFzX3N1Z2dlc3RlZCIgYXNfbGluZW5vXzFhPVwkTElORU5PCi0gIGFzX2xpbmVub18yPSI7YXNfc3VnZ2VzdGVkPSRhc19zdWdnZXN0ZWQkTElORU5PO2FzX3N1Z2dlc3RlZD0kYXNfc3VnZ2VzdGVkIiBhc19saW5lbm9fMmE9XCRMSU5FTk8KLSAgZXZhbCAndGVzdCBcInhcJGFzX2xpbmVub18xJ1wkYXNfcnVuJ1wiICE9IFwieFwkYXNfbGluZW5vXzInXCRhc19ydW4nXCIgJiYKLSAgdGVzdCBcInhcYGV4cHIgXCRhc19saW5lbm9fMSdcJGFzX3J1bicgKyAxXGBcIiA9IFwieFwkYXNfbGluZW5vXzInXCRhc19ydW4nXCInIHx8IGV4aXQgMQotdGVzdCBcJCgoIDEgKyAxICkpID0gMiB8fCBleGl0IDEKLQotICB0ZXN0IC1uIFwiXCR7WlNIX1ZFUlNJT04rc2V0fVwke0JBU0hfVkVSU0lPTitzZXR9XCIgfHwgKAotICAgIEVDSE89J1xcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcJwotICAgIEVDSE89XCRFQ0hPXCRFQ0hPXCRFQ0hPXCRFQ0hPXCRFQ0hPCi0gICAgRUNITz1cJEVDSE9cJEVDSE9cJEVDSE9cJEVDSE9cJEVDSE9cJEVDSE8KLSAgICBQQVRIPS9lbXB0eSBGUEFUSD0vZW1wdHk7IGV4cG9ydCBQQVRIIEZQQVRICi0gICAgdGVzdCBcIlhcYHByaW50ZiAlcyBcJEVDSE9cYFwiID0gXCJYXCRFQ0hPXCIgXFwKLSAgICAgIHx8IHRlc3QgXCJYXGBwcmludCAtciAtLSBcJEVDSE9cYFwiID0gXCJYXCRFQ0hPXCIgKSB8fCBleGl0IDEiCi0gIGlmIChldmFsICIkYXNfcmVxdWlyZWQiKSAyPi9kZXYvbnVsbDsgdGhlbiA6Ci0gIGFzX2hhdmVfcmVxdWlyZWQ9eWVzCi1lbHNlCi0gIGFzX2hhdmVfcmVxdWlyZWQ9bm8KLWZpCi0gIGlmIHRlc3QgeCRhc19oYXZlX3JlcXVpcmVkID0geHllcyAmJiAoZXZhbCAiJGFzX3N1Z2dlc3RlZCIpIDI+L2Rldi9udWxsOyB0aGVuIDoKLQotZWxzZQotICBhc19zYXZlX0lGUz0kSUZTOyBJRlM9JFBBVEhfU0VQQVJBVE9SCi1hc19mb3VuZD1mYWxzZQotZm9yIGFzX2RpciBpbiAvYmluJFBBVEhfU0VQQVJBVE9SL3Vzci9iaW4kUEFUSF9TRVBBUkFUT1IkUEFUSAotZG8KLSAgSUZTPSRhc19zYXZlX0lGUwotICB0ZXN0IC16ICIkYXNfZGlyIiAmJiBhc19kaXI9LgotICBhc19mb3VuZD06Ci0gIGNhc2UgJGFzX2RpciBpbiAjKAotCSAvKikKLQkgICBmb3IgYXNfYmFzZSBpbiBzaCBiYXNoIGtzaCBzaDU7IGRvCi0JICAgICAjIFRyeSBvbmx5IHNoZWxscyB0aGF0IGV4aXN0LCB0byBzYXZlIHNldmVyYWwgZm9ya3MuCi0JICAgICBhc19zaGVsbD0kYXNfZGlyLyRhc19iYXNlCi0JICAgICBpZiB7IHRlc3QgLWYgIiRhc19zaGVsbCIgfHwgdGVzdCAtZiAiJGFzX3NoZWxsLmV4ZSI7IH0gJiYKLQkJICAgIHsgJGFzX2VjaG8gIiRhc19ib3VybmVfY29tcGF0aWJsZSIiJGFzX3JlcXVpcmVkIiB8IGFzX3J1bj1hICIkYXNfc2hlbGwiOyB9IDI+L2Rldi9udWxsOyB0aGVuIDoKLSAgQ09ORklHX1NIRUxMPSRhc19zaGVsbCBhc19oYXZlX3JlcXVpcmVkPXllcwotCQkgICBpZiB7ICRhc19lY2hvICIkYXNfYm91cm5lX2NvbXBhdGlibGUiIiRhc19zdWdnZXN0ZWQiIHwgYXNfcnVuPWEgIiRhc19zaGVsbCI7IH0gMj4vZGV2L251bGw7IHRoZW4gOgotICBicmVhayAyCi1maQotZmkKLQkgICBkb25lOzsKLSAgICAgICBlc2FjCi0gIGFzX2ZvdW5kPWZhbHNlCi1kb25lCi0kYXNfZm91bmQgfHwgeyBpZiB7IHRlc3QgLWYgIiRTSEVMTCIgfHwgdGVzdCAtZiAiJFNIRUxMLmV4ZSI7IH0gJiYKLQkgICAgICB7ICRhc19lY2hvICIkYXNfYm91cm5lX2NvbXBhdGlibGUiIiRhc19yZXF1aXJlZCIgfCBhc19ydW49YSAiJFNIRUxMIjsgfSAyPi9kZXYvbnVsbDsgdGhlbiA6Ci0gIENPTkZJR19TSEVMTD0kU0hFTEwgYXNfaGF2ZV9yZXF1aXJlZD15ZXMKLWZpOyB9Ci1JRlM9JGFzX3NhdmVfSUZTCi0KLQotICAgICAgaWYgdGVzdCAieCRDT05GSUdfU0hFTEwiICE9IHg7IHRoZW4gOgotICAjIFdlIGNhbm5vdCB5ZXQgYXNzdW1lIGEgZGVjZW50IHNoZWxsLCBzbyB3ZSBoYXZlIHRvIHByb3ZpZGUgYQotCSMgbmV1dHJhbGl6YXRpb24gdmFsdWUgZm9yIHNoZWxscyB3aXRob3V0IHVuc2V0OyBhbmQgdGhpcyBhbHNvCi0JIyB3b3JrcyBhcm91bmQgc2hlbGxzIHRoYXQgY2Fubm90IHVuc2V0IG5vbmV4aXN0ZW50IHZhcmlhYmxlcy4KLQkjIFByZXNlcnZlIC12IGFuZCAteCB0byB0aGUgcmVwbGFjZW1lbnQgc2hlbGwuCi0JQkFTSF9FTlY9L2Rldi9udWxsCi0JRU5WPS9kZXYvbnVsbAotCSh1bnNldCBCQVNIX0VOVikgPi9kZXYvbnVsbCAyPiYxICYmIHVuc2V0IEJBU0hfRU5WIEVOVgotCWV4cG9ydCBDT05GSUdfU0hFTEwKLQljYXNlICQtIGluICMgKCgoKAotCSAgKnYqeCogfCAqeCp2KiApIGFzX29wdHM9LXZ4IDs7Ci0JICAqdiogKSBhc19vcHRzPS12IDs7Ci0JICAqeCogKSBhc19vcHRzPS14IDs7Ci0JICAqICkgYXNfb3B0cz0gOzsKLQllc2FjCi0JZXhlYyAiJENPTkZJR19TSEVMTCIgJGFzX29wdHMgIiRhc19teXNlbGYiICR7MSsiJEAifQotZmkKLQotICAgIGlmIHRlc3QgeCRhc19oYXZlX3JlcXVpcmVkID0geG5vOyB0aGVuIDoKLSAgJGFzX2VjaG8gIiQwOiBUaGlzIHNjcmlwdCByZXF1aXJlcyBhIHNoZWxsIG1vcmUgbW9kZXJuIHRoYW4gYWxsIgotICAkYXNfZWNobyAiJDA6IHRoZSBzaGVsbHMgdGhhdCBJIGZvdW5kIG9uIHlvdXIgc3lzdGVtLiIKLSAgaWYgdGVzdCB4JHtaU0hfVkVSU0lPTitzZXR9ID0geHNldCA7IHRoZW4KLSAgICAkYXNfZWNobyAiJDA6IEluIHBhcnRpY3VsYXIsIHpzaCAkWlNIX1ZFUlNJT04gaGFzIGJ1Z3MgYW5kIHNob3VsZCIKLSAgICAkYXNfZWNobyAiJDA6IGJlIHVwZ3JhZGVkIHRvIHpzaCA0LjMuNCBvciBsYXRlci4iCi0gIGVsc2UKLSAgICAkYXNfZWNobyAiJDA6IFBsZWFzZSB0ZWxsIGJ1Zy1hdXRvY29uZkBnbnUub3JnIGFib3V0IHlvdXIgc3lzdGVtLAotJDA6IGluY2x1ZGluZyBhbnkgZXJyb3IgcG9zc2libHkgb3V0cHV0IGJlZm9yZSB0aGlzCi0kMDogbWVzc2FnZS4gVGhlbiBpbnN0YWxsIGEgbW9kZXJuIHNoZWxsLCBvciBtYW51YWxseSBydW4KLSQwOiB0aGUgc2NyaXB0IHVuZGVyIHN1Y2ggYSBzaGVsbCBpZiB5b3UgZG8gaGF2ZSBvbmUuIgotICBmaQotICBleGl0IDEKLWZpCi1maQotZmkKLVNIRUxMPSR7Q09ORklHX1NIRUxMLS9iaW4vc2h9Ci1leHBvcnQgU0hFTEwKLSMgVW5zZXQgbW9yZSB2YXJpYWJsZXMga25vd24gdG8gaW50ZXJmZXJlIHdpdGggYmVoYXZpb3Igb2YgY29tbW9uIHRvb2xzLgotQ0xJQ09MT1JfRk9SQ0U9IEdSRVBfT1BUSU9OUz0KLXVuc2V0IENMSUNPTE9SX0ZPUkNFIEdSRVBfT1BUSU9OUwotCi0jIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0gIyMKLSMjIE00c2ggU2hlbGwgRnVuY3Rpb25zLiAjIwotIyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tICMjCi0jIGFzX2ZuX3Vuc2V0IFZBUgotIyAtLS0tLS0tLS0tLS0tLS0KLSMgUG9ydGFibHkgdW5zZXQgVkFSLgotYXNfZm5fdW5zZXQgKCkKLXsKLSAgeyBldmFsICQxPTsgdW5zZXQgJDE7fQotfQotYXNfdW5zZXQ9YXNfZm5fdW5zZXQKLQotIyBhc19mbl9zZXRfc3RhdHVzIFNUQVRVUwotIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotIyBTZXQgJD8gdG8gU1RBVFVTLCB3aXRob3V0IGZvcmtpbmcuCi1hc19mbl9zZXRfc3RhdHVzICgpCi17Ci0gIHJldHVybiAkMQotfSAjIGFzX2ZuX3NldF9zdGF0dXMKLQotIyBhc19mbl9leGl0IFNUQVRVUwotIyAtLS0tLS0tLS0tLS0tLS0tLQotIyBFeGl0IHRoZSBzaGVsbCB3aXRoIFNUQVRVUywgZXZlbiBpbiBhICJ0cmFwIDAiIG9yICJzZXQgLWUiIGNvbnRleHQuCi1hc19mbl9leGl0ICgpCi17Ci0gIHNldCArZQotICBhc19mbl9zZXRfc3RhdHVzICQxCi0gIGV4aXQgJDEKLX0gIyBhc19mbl9leGl0Ci0KLSMgYXNfZm5fbWtkaXJfcAotIyAtLS0tLS0tLS0tLS0tCi0jIENyZWF0ZSAiJGFzX2RpciIgYXMgYSBkaXJlY3RvcnksIGluY2x1ZGluZyBwYXJlbnRzIGlmIG5lY2Vzc2FyeS4KLWFzX2ZuX21rZGlyX3AgKCkKLXsKLQotICBjYXNlICRhc19kaXIgaW4gIygKLSAgLSopIGFzX2Rpcj0uLyRhc19kaXI7OwotICBlc2FjCi0gIHRlc3QgLWQgIiRhc19kaXIiIHx8IGV2YWwgJGFzX21rZGlyX3AgfHwgewotICAgIGFzX2RpcnM9Ci0gICAgd2hpbGUgOjsgZG8KLSAgICAgIGNhc2UgJGFzX2RpciBpbiAjKAotICAgICAgKlwnKikgYXNfcWRpcj1gJGFzX2VjaG8gIiRhc19kaXIiIHwgc2VkICJzLycvJ1xcXFxcXFxcJycvZyJgOzsgIycoCi0gICAgICAqKSBhc19xZGlyPSRhc19kaXI7OwotICAgICAgZXNhYwotICAgICAgYXNfZGlycz0iJyRhc19xZGlyJyAkYXNfZGlycyIKLSAgICAgIGFzX2Rpcj1gJGFzX2Rpcm5hbWUgLS0gIiRhc19kaXIiIHx8Ci0kYXNfZXhwciBYIiRhc19kaXIiIDogJ1hcKC4qW14vXVwpLy8qW14vXVteL10qLyokJyBcfCBcCi0JIFgiJGFzX2RpciIgOiAnWFwoLy9cKVteL10nIFx8IFwKLQkgWCIkYXNfZGlyIiA6ICdYXCgvL1wpJCcgXHwgXAotCSBYIiRhc19kaXIiIDogJ1hcKC9cKScgXHwgLiAyPi9kZXYvbnVsbCB8fAotJGFzX2VjaG8gWCIkYXNfZGlyIiB8Ci0gICAgc2VkICcvXlhcKC4qW14vXVwpXC9cLypbXi9dW14vXSpcLyokL3sKLQkgICAgcy8vXDEvCi0JICAgIHEKLQkgIH0KLQkgIC9eWFwoXC9cL1wpW14vXS4qL3sKLQkgICAgcy8vXDEvCi0JICAgIHEKLQkgIH0KLQkgIC9eWFwoXC9cL1wpJC97Ci0JICAgIHMvL1wxLwotCSAgICBxCi0JICB9Ci0JICAvXlhcKFwvXCkuKi97Ci0JICAgIHMvL1wxLwotCSAgICBxCi0JICB9Ci0JICBzLy4qLy4vOyBxJ2AKLSAgICAgIHRlc3QgLWQgIiRhc19kaXIiICYmIGJyZWFrCi0gICAgZG9uZQotICAgIHRlc3QgLXogIiRhc19kaXJzIiB8fCBldmFsICJta2RpciAkYXNfZGlycyIKLSAgfSB8fCB0ZXN0IC1kICIkYXNfZGlyIiB8fCBhc19mbl9lcnJvciAkPyAiY2Fubm90IGNyZWF0ZSBkaXJlY3RvcnkgJGFzX2RpciIKLQotCi19ICMgYXNfZm5fbWtkaXJfcAotIyBhc19mbl9hcHBlbmQgVkFSIFZBTFVFCi0jIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSMgQXBwZW5kIHRoZSB0ZXh0IGluIFZBTFVFIHRvIHRoZSBlbmQgb2YgdGhlIGRlZmluaXRpb24gY29udGFpbmVkIGluIFZBUi4gVGFrZQotIyBhZHZhbnRhZ2Ugb2YgYW55IHNoZWxsIG9wdGltaXphdGlvbnMgdGhhdCBhbGxvdyBhbW9ydGl6ZWQgbGluZWFyIGdyb3d0aCBvdmVyCi0jIHJlcGVhdGVkIGFwcGVuZHMsIGluc3RlYWQgb2YgdGhlIHR5cGljYWwgcXVhZHJhdGljIGdyb3d0aCBwcmVzZW50IGluIG5haXZlCi0jIGltcGxlbWVudGF0aW9ucy4KLWlmIChldmFsICJhc192YXI9MTsgYXNfdmFyKz0yOyB0ZXN0IHhcJGFzX3ZhciA9IHgxMiIpIDI+L2Rldi9udWxsOyB0aGVuIDoKLSAgZXZhbCAnYXNfZm5fYXBwZW5kICgpCi0gIHsKLSAgICBldmFsICQxKz1cJDIKLSAgfScKLWVsc2UKLSAgYXNfZm5fYXBwZW5kICgpCi0gIHsKLSAgICBldmFsICQxPVwkJDFcJDIKLSAgfQotZmkgIyBhc19mbl9hcHBlbmQKLQotIyBhc19mbl9hcml0aCBBUkcuLi4KLSMgLS0tLS0tLS0tLS0tLS0tLS0tCi0jIFBlcmZvcm0gYXJpdGhtZXRpYyBldmFsdWF0aW9uIG9uIHRoZSBBUkdzLCBhbmQgc3RvcmUgdGhlIHJlc3VsdCBpbiB0aGUKLSMgZ2xvYmFsICRhc192YWwuIFRha2UgYWR2YW50YWdlIG9mIHNoZWxscyB0aGF0IGNhbiBhdm9pZCBmb3Jrcy4gVGhlIGFyZ3VtZW50cwotIyBtdXN0IGJlIHBvcnRhYmxlIGFjcm9zcyAkKCgpKSBhbmQgZXhwci4KLWlmIChldmFsICJ0ZXN0IFwkKCggMSArIDEgKSkgPSAyIikgMj4vZGV2L251bGw7IHRoZW4gOgotICBldmFsICdhc19mbl9hcml0aCAoKQotICB7Ci0gICAgYXNfdmFsPSQoKCAkKiApKQotICB9JwotZWxzZQotICBhc19mbl9hcml0aCAoKQotICB7Ci0gICAgYXNfdmFsPWBleHByICIkQCIgfHwgdGVzdCAkPyAtZXEgMWAKLSAgfQotZmkgIyBhc19mbl9hcml0aAotCi0KLSMgYXNfZm5fZXJyb3IgU1RBVFVTIEVSUk9SIFtMSU5FTk8gTE9HX0ZEXQotIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0jIE91dHB1dCAiYGJhc2VuYW1lICQwYDogZXJyb3I6IEVSUk9SIiB0byBzdGRlcnIuIElmIExJTkVOTyBhbmQgTE9HX0ZEIGFyZQotIyBwcm92aWRlZCwgYWxzbyBvdXRwdXQgdGhlIGVycm9yIHRvIExPR19GRCwgcmVmZXJlbmNpbmcgTElORU5PLiBUaGVuIGV4aXQgdGhlCi0jIHNjcmlwdCB3aXRoIFNUQVRVUywgdXNpbmcgMSBpZiB0aGF0IHdhcyAwLgotYXNfZm5fZXJyb3IgKCkKLXsKLSAgYXNfc3RhdHVzPSQxOyB0ZXN0ICRhc19zdGF0dXMgLWVxIDAgJiYgYXNfc3RhdHVzPTEKLSAgaWYgdGVzdCAiJDQiOyB0aGVuCi0gICAgYXNfbGluZW5vPSR7YXNfbGluZW5vLSIkMyJ9IGFzX2xpbmVub19zdGFjaz1hc19saW5lbm9fc3RhY2s9JGFzX2xpbmVub19zdGFjawotICAgICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGVycm9yOiAkMiIgPiYkNAotICBmaQotICAkYXNfZWNobyAiJGFzX21lOiBlcnJvcjogJDIiID4mMgotICBhc19mbl9leGl0ICRhc19zdGF0dXMKLX0gIyBhc19mbl9lcnJvcgotCi1pZiBleHByIGEgOiAnXChhXCknID4vZGV2L251bGwgMj4mMSAmJgotICAgdGVzdCAiWGBleHByIDAwMDAxIDogJy4qXCguLi5cKSdgIiA9IFgwMDE7IHRoZW4KLSAgYXNfZXhwcj1leHByCi1lbHNlCi0gIGFzX2V4cHI9ZmFsc2UKLWZpCi0KLWlmIChiYXNlbmFtZSAtLSAvKSA+L2Rldi9udWxsIDI+JjEgJiYgdGVzdCAiWGBiYXNlbmFtZSAtLSAvIDI+JjFgIiA9ICJYLyI7IHRoZW4KLSAgYXNfYmFzZW5hbWU9YmFzZW5hbWUKLWVsc2UKLSAgYXNfYmFzZW5hbWU9ZmFsc2UKLWZpCi0KLWlmIChhc19kaXI9YGRpcm5hbWUgLS0gL2AgJiYgdGVzdCAiWCRhc19kaXIiID0gWC8pID4vZGV2L251bGwgMj4mMTsgdGhlbgotICBhc19kaXJuYW1lPWRpcm5hbWUKLWVsc2UKLSAgYXNfZGlybmFtZT1mYWxzZQotZmkKLQotYXNfbWU9YCRhc19iYXNlbmFtZSAtLSAiJDAiIHx8Ci0kYXNfZXhwciBYLyIkMCIgOiAnLiovXChbXi9dW14vXSpcKS8qJCcgXHwgXAotCSBYIiQwIiA6ICdYXCgvL1wpJCcgXHwgXAotCSBYIiQwIiA6ICdYXCgvXCknIFx8IC4gMj4vZGV2L251bGwgfHwKLSRhc19lY2hvIFgvIiQwIiB8Ci0gICAgc2VkICcvXi4qXC9cKFteL11bXi9dKlwpXC8qJC97Ci0JICAgIHMvL1wxLwotCSAgICBxCi0JICB9Ci0JICAvXlhcL1woXC9cL1wpJC97Ci0JICAgIHMvL1wxLwotCSAgICBxCi0JICB9Ci0JICAvXlhcL1woXC9cKS4qL3sKLQkgICAgcy8vXDEvCi0JICAgIHEKLQkgIH0KLQkgIHMvLiovLi87IHEnYAotCi0jIEF2b2lkIGRlcGVuZGluZyB1cG9uIENoYXJhY3RlciBSYW5nZXMuCi1hc19jcl9sZXR0ZXJzPSdhYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5eicKLWFzX2NyX0xFVFRFUlM9J0FCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaJwotYXNfY3JfTGV0dGVycz0kYXNfY3JfbGV0dGVycyRhc19jcl9MRVRURVJTCi1hc19jcl9kaWdpdHM9JzAxMjM0NTY3ODknCi1hc19jcl9hbG51bT0kYXNfY3JfTGV0dGVycyRhc19jcl9kaWdpdHMKLQotCi0gIGFzX2xpbmVub18xPSRMSU5FTk8gYXNfbGluZW5vXzFhPSRMSU5FTk8KLSAgYXNfbGluZW5vXzI9JExJTkVOTyBhc19saW5lbm9fMmE9JExJTkVOTwotICBldmFsICd0ZXN0ICJ4JGFzX2xpbmVub18xJyRhc19ydW4nIiAhPSAieCRhc19saW5lbm9fMickYXNfcnVuJyIgJiYKLSAgdGVzdCAieGBleHByICRhc19saW5lbm9fMSckYXNfcnVuJyArIDFgIiA9ICJ4JGFzX2xpbmVub18yJyRhc19ydW4nIicgfHwgewotICAjIEJsYW1lIExlZSBFLiBNY01haG9uICgxOTMxLTE5ODkpIGZvciBzZWQncyBzeW50YXguICA6LSkKLSAgc2VkIC1uICcKLSAgICBwCi0gICAgL1skXUxJTkVOTy89Ci0gICcgPCRhc19teXNlbGYgfAotICAgIHNlZCAnCi0gICAgICBzL1skXUxJTkVOTy4qLyYtLwotICAgICAgdCBsaW5lbm8KLSAgICAgIGIKLSAgICAgIDpsaW5lbm8KLSAgICAgIE4KLSAgICAgIDpsb29wCi0gICAgICBzL1skXUxJTkVOT1woW14nJGFzX2NyX2FsbnVtJ19dLipcblwpXCguKlwpL1wyXDFcMi8KLSAgICAgIHQgbG9vcAotICAgICAgcy8tXG4uKi8vCi0gICAgJyA+JGFzX21lLmxpbmVubyAmJgotICBjaG1vZCAreCAiJGFzX21lLmxpbmVubyIgfHwKLSAgICB7ICRhc19lY2hvICIkYXNfbWU6IGVycm9yOiBjYW5ub3QgY3JlYXRlICRhc19tZS5saW5lbm87IHJlcnVuIHdpdGggYSBQT1NJWCBzaGVsbCIgPiYyOyBhc19mbl9leGl0IDE7IH0KLQotICAjIERvbid0IHRyeSB0byBleGVjIGFzIGl0IGNoYW5nZXMgJFswXSwgY2F1c2luZyBhbGwgc29ydCBvZiBwcm9ibGVtcwotICAjICh0aGUgZGlybmFtZSBvZiAkWzBdIGlzIG5vdCB0aGUgcGxhY2Ugd2hlcmUgd2UgbWlnaHQgZmluZCB0aGUKLSAgIyBvcmlnaW5hbCBhbmQgc28gb24uICBBdXRvY29uZiBpcyBlc3BlY2lhbGx5IHNlbnNpdGl2ZSB0byB0aGlzKS4KLSAgLiAiLi8kYXNfbWUubGluZW5vIgotICAjIEV4aXQgc3RhdHVzIGlzIHRoYXQgb2YgdGhlIGxhc3QgY29tbWFuZC4KLSAgZXhpdAotfQotCi1FQ0hPX0M9IEVDSE9fTj0gRUNIT19UPQotY2FzZSBgZWNobyAtbiB4YCBpbiAjKCgoKCgKLS1uKikKLSAgY2FzZSBgZWNobyAneHlcYydgIGluCi0gICpjKikgRUNIT19UPScJJzs7CSMgRUNIT19UIGlzIHNpbmdsZSB0YWIgY2hhcmFjdGVyLgotICB4eSkgIEVDSE9fQz0nXGMnOzsKLSAgKikgICBlY2hvIGBlY2hvIGtzaDg4IGJ1ZyBvbiBBSVggNi4xYCA+IC9kZXYvbnVsbAotICAgICAgIEVDSE9fVD0nCSc7OwotICBlc2FjOzsKLSopCi0gIEVDSE9fTj0nLW4nOzsKLWVzYWMKLQotcm0gLWYgY29uZiQkIGNvbmYkJC5leGUgY29uZiQkLmZpbGUKLWlmIHRlc3QgLWQgY29uZiQkLmRpcjsgdGhlbgotICBybSAtZiBjb25mJCQuZGlyL2NvbmYkJC5maWxlCi1lbHNlCi0gIHJtIC1mIGNvbmYkJC5kaXIKLSAgbWtkaXIgY29uZiQkLmRpciAyPi9kZXYvbnVsbAotZmkKLWlmIChlY2hvID5jb25mJCQuZmlsZSkgMj4vZGV2L251bGw7IHRoZW4KLSAgaWYgbG4gLXMgY29uZiQkLmZpbGUgY29uZiQkIDI+L2Rldi9udWxsOyB0aGVuCi0gICAgYXNfbG5fcz0nbG4gLXMnCi0gICAgIyAuLi4gYnV0IHRoZXJlIGFyZSB0d28gZ290Y2hhczoKLSAgICAjIDEpIE9uIE1TWVMsIGJvdGggYGxuIC1zIGZpbGUgZGlyJyBhbmQgYGxuIGZpbGUgZGlyJyBmYWlsLgotICAgICMgMikgREpHUFAgPCAyLjA0IGhhcyBubyBzeW1saW5rczsgYGxuIC1zJyBjcmVhdGVzIGEgd3JhcHBlciBleGVjdXRhYmxlLgotICAgICMgSW4gYm90aCBjYXNlcywgd2UgaGF2ZSB0byBkZWZhdWx0IHRvIGBjcCAtcCcuCi0gICAgbG4gLXMgY29uZiQkLmZpbGUgY29uZiQkLmRpciAyPi9kZXYvbnVsbCAmJiB0ZXN0ICEgLWYgY29uZiQkLmV4ZSB8fAotICAgICAgYXNfbG5fcz0nY3AgLXAnCi0gIGVsaWYgbG4gY29uZiQkLmZpbGUgY29uZiQkIDI+L2Rldi9udWxsOyB0aGVuCi0gICAgYXNfbG5fcz1sbgotICBlbHNlCi0gICAgYXNfbG5fcz0nY3AgLXAnCi0gIGZpCi1lbHNlCi0gIGFzX2xuX3M9J2NwIC1wJwotZmkKLXJtIC1mIGNvbmYkJCBjb25mJCQuZXhlIGNvbmYkJC5kaXIvY29uZiQkLmZpbGUgY29uZiQkLmZpbGUKLXJtZGlyIGNvbmYkJC5kaXIgMj4vZGV2L251bGwKLQotaWYgbWtkaXIgLXAgLiAyPi9kZXYvbnVsbDsgdGhlbgotICBhc19ta2Rpcl9wPSdta2RpciAtcCAiJGFzX2RpciInCi1lbHNlCi0gIHRlc3QgLWQgLi8tcCAmJiBybWRpciAuLy1wCi0gIGFzX21rZGlyX3A9ZmFsc2UKLWZpCi0KLWlmIHRlc3QgLXggLyA+L2Rldi9udWxsIDI+JjE7IHRoZW4KLSAgYXNfdGVzdF94PSd0ZXN0IC14JwotZWxzZQotICBpZiBscyAtZEwgLyA+L2Rldi9udWxsIDI+JjE7IHRoZW4KLSAgICBhc19sc19MX29wdGlvbj1MCi0gIGVsc2UKLSAgICBhc19sc19MX29wdGlvbj0KLSAgZmkKLSAgYXNfdGVzdF94PScKLSAgICBldmFsIHNoIC1jICdcJycKLSAgICAgIGlmIHRlc3QgLWQgIiQxIjsgdGhlbgotCXRlc3QgLWQgIiQxLy4iOwotICAgICAgZWxzZQotCWNhc2UgJDEgaW4gIygKLQktKilzZXQgIi4vJDEiOzsKLQllc2FjOwotCWNhc2UgYGxzIC1sZCckYXNfbHNfTF9vcHRpb24nICIkMSIgMj4vZGV2L251bGxgIGluICMoKAotCT8/P1tzeF0qKTo7OyopZmFsc2U7O2VzYWM7ZmkKLSAgICAnXCcnIHNoCi0gICcKLWZpCi1hc19leGVjdXRhYmxlX3A9JGFzX3Rlc3RfeAotCi0jIFNlZCBleHByZXNzaW9uIHRvIG1hcCBhIHN0cmluZyBvbnRvIGEgdmFsaWQgQ1BQIG5hbWUuCi1hc190cl9jcHA9ImV2YWwgc2VkICd5JSokYXNfY3JfbGV0dGVycyVQJGFzX2NyX0xFVFRFUlMlO3MlW15fJGFzX2NyX2FsbnVtXSVfJWcnIgotCi0jIFNlZCBleHByZXNzaW9uIHRvIG1hcCBhIHN0cmluZyBvbnRvIGEgdmFsaWQgdmFyaWFibGUgbmFtZS4KLWFzX3RyX3NoPSJldmFsIHNlZCAneSUqKyVwcCU7cyVbXl8kYXNfY3JfYWxudW1dJV8lZyciCi0KLVNIRUxMPSR7Q09ORklHX1NIRUxMLS9iaW4vc2h9Ci0KLQotdGVzdCAtbiAiJERKRElSIiB8fCBleGVjIDc8JjAgPC9kZXYvbnVsbAotZXhlYyA2PiYxCi0KLSMgTmFtZSBvZiB0aGUgaG9zdC4KLSMgaG9zdG5hbWUgb24gc29tZSBzeXN0ZW1zIChTVlIzLjIsIG9sZCBHTlUvTGludXgpIHJldHVybnMgYSBib2d1cyBleGl0IHN0YXR1cywKLSMgc28gdW5hbWUgZ2V0cyBydW4gdG9vLgotYWNfaG9zdG5hbWU9YChob3N0bmFtZSB8fCB1bmFtZSAtbikgMj4vZGV2L251bGwgfCBzZWQgMXFgCi0KLSMKLSMgSW5pdGlhbGl6YXRpb25zLgotIwotYWNfZGVmYXVsdF9wcmVmaXg9L3Vzci9sb2NhbAotYWNfY2xlYW5fZmlsZXM9Ci1hY19jb25maWdfbGlib2JqX2Rpcj0uCi1MSUJPQkpTPQotY3Jvc3NfY29tcGlsaW5nPW5vCi1zdWJkaXJzPQotTUZMQUdTPQotTUFLRUZMQUdTPQotCi0jIElkZW50aXR5IG9mIHRoaXMgcGFja2FnZS4KLVBBQ0tBR0VfTkFNRT0nbGlianBlZycKLVBBQ0tBR0VfVEFSTkFNRT0nbGlianBlZycKLVBBQ0tBR0VfVkVSU0lPTj0nOC4zLjAnCi1QQUNLQUdFX1NUUklORz0nbGlianBlZyA4LjMuMCcKLVBBQ0tBR0VfQlVHUkVQT1JUPScnCi1QQUNLQUdFX1VSTD0nJwotCi0jIEZhY3RvcmluZyBkZWZhdWx0IGhlYWRlcnMgZm9yIG1vc3QgdGVzdHMuCi1hY19pbmNsdWRlc19kZWZhdWx0PSJcCi0jaW5jbHVkZSA8c3RkaW8uaD4KLSNpZmRlZiBIQVZFX1NZU19UWVBFU19ICi0jIGluY2x1ZGUgPHN5cy90eXBlcy5oPgotI2VuZGlmCi0jaWZkZWYgSEFWRV9TWVNfU1RBVF9ICi0jIGluY2x1ZGUgPHN5cy9zdGF0Lmg+Ci0jZW5kaWYKLSNpZmRlZiBTVERDX0hFQURFUlMKLSMgaW5jbHVkZSA8c3RkbGliLmg+Ci0jIGluY2x1ZGUgPHN0ZGRlZi5oPgotI2Vsc2UKLSMgaWZkZWYgSEFWRV9TVERMSUJfSAotIyAgaW5jbHVkZSA8c3RkbGliLmg+Ci0jIGVuZGlmCi0jZW5kaWYKLSNpZmRlZiBIQVZFX1NUUklOR19ICi0jIGlmICFkZWZpbmVkIFNURENfSEVBREVSUyAmJiBkZWZpbmVkIEhBVkVfTUVNT1JZX0gKLSMgIGluY2x1ZGUgPG1lbW9yeS5oPgotIyBlbmRpZgotIyBpbmNsdWRlIDxzdHJpbmcuaD4KLSNlbmRpZgotI2lmZGVmIEhBVkVfU1RSSU5HU19ICi0jIGluY2x1ZGUgPHN0cmluZ3MuaD4KLSNlbmRpZgotI2lmZGVmIEhBVkVfSU5UVFlQRVNfSAotIyBpbmNsdWRlIDxpbnR0eXBlcy5oPgotI2VuZGlmCi0jaWZkZWYgSEFWRV9TVERJTlRfSAotIyBpbmNsdWRlIDxzdGRpbnQuaD4KLSNlbmRpZgotI2lmZGVmIEhBVkVfVU5JU1REX0gKLSMgaW5jbHVkZSA8dW5pc3RkLmg+Ci0jZW5kaWYiCi0KLWFjX3N1YnN0X3ZhcnM9J2FtX19FWEVFWFRfRkFMU0UKLWFtX19FWEVFWFRfVFJVRQotTFRMSUJPQkpTCi1MSUJPQkpTCi1KUEVHX0xJQl9WRVJTSU9OCi1NRU1PUllNR1IKLU9UT09MNjQKLU9UT09MCi1MSVBPCi1OTUVESVQKLURTWU1VVElMCi1NQU5JRkVTVF9UT09MCi1SQU5MSUIKLWFjX2N0X0FSCi1BUgotTk0KLWFjX2N0X0RVTVBCSU4KLURVTVBCSU4KLUxECi1GR1JFUAotU0VECi1MSUJUT09MCi1PQkpEVU1QCi1ETExUT09MCi1BUwotSEFWRV9MRF9WRVJTSU9OX1NDUklQVF9GQUxTRQotSEFWRV9MRF9WRVJTSU9OX1NDUklQVF9UUlVFCi1MTl9TCi1NQUlOVAotTUFJTlRBSU5FUl9NT0RFX0ZBTFNFCi1NQUlOVEFJTkVSX01PREVfVFJVRQotQU5TSTJLTlIKLVUKLUVHUkVQCi1HUkVQCi1DUFAKLWFtX19mYXN0ZGVwQ0NfRkFMU0UKLWFtX19mYXN0ZGVwQ0NfVFJVRQotQ0NERVBNT0RFCi1BTURFUEJBQ0tTTEFTSAotQU1ERVBfRkFMU0UKLUFNREVQX1RSVUUKLWFtX19xdW90ZQotYW1fX2luY2x1ZGUKLURFUERJUgotT0JKRVhUCi1FWEVFWFQKLWFjX2N0X0NDCi1DUFBGTEFHUwotTERGTEFHUwotQ0ZMQUdTCi1DQwotQU1fQkFDS1NMQVNICi1BTV9ERUZBVUxUX1ZFUkJPU0lUWQotYW1fX3VudGFyCi1hbV9fdGFyCi1BTVRBUgotYW1fX2xlYWRpbmdfZG90Ci1TRVRfTUFLRQotQVdLCi1ta2Rpcl9wCi1NS0RJUl9QCi1JTlNUQUxMX1NUUklQX1BST0dSQU0KLVNUUklQCi1pbnN0YWxsX3NoCi1NQUtFSU5GTwotQVVUT0hFQURFUgotQVVUT01BS0UKLUFVVE9DT05GCi1BQ0xPQ0FMCi1WRVJTSU9OCi1QQUNLQUdFCi1DWUdQQVRIX1cKLWFtX19pc3JjCi1JTlNUQUxMX0RBVEEKLUlOU1RBTExfU0NSSVBUCi1JTlNUQUxMX1BST0dSQU0KLXRhcmdldF9vcwotdGFyZ2V0X3ZlbmRvcgotdGFyZ2V0X2NwdQotdGFyZ2V0Ci1ob3N0X29zCi1ob3N0X3ZlbmRvcgotaG9zdF9jcHUKLWhvc3QKLWJ1aWxkX29zCi1idWlsZF92ZW5kb3IKLWJ1aWxkX2NwdQotYnVpbGQKLXRhcmdldF9hbGlhcwotaG9zdF9hbGlhcwotYnVpbGRfYWxpYXMKLUxJQlMKLUVDSE9fVAotRUNIT19OCi1FQ0hPX0MKLURFRlMKLW1hbmRpcgotbG9jYWxlZGlyCi1saWJkaXIKLXBzZGlyCi1wZGZkaXIKLWR2aWRpcgotaHRtbGRpcgotaW5mb2RpcgotZG9jZGlyCi1vbGRpbmNsdWRlZGlyCi1pbmNsdWRlZGlyCi1sb2NhbHN0YXRlZGlyCi1zaGFyZWRzdGF0ZWRpcgotc3lzY29uZmRpcgotZGF0YWRpcgotZGF0YXJvb3RkaXIKLWxpYmV4ZWNkaXIKLXNiaW5kaXIKLWJpbmRpcgotcHJvZ3JhbV90cmFuc2Zvcm1fbmFtZQotcHJlZml4Ci1leGVjX3ByZWZpeAotUEFDS0FHRV9VUkwKLVBBQ0tBR0VfQlVHUkVQT1JUCi1QQUNLQUdFX1NUUklORwotUEFDS0FHRV9WRVJTSU9OCi1QQUNLQUdFX1RBUk5BTUUKLVBBQ0tBR0VfTkFNRQotUEFUSF9TRVBBUkFUT1IKLVNIRUxMJwotYWNfc3Vic3RfZmlsZXM9JycKLWFjX3VzZXJfb3B0cz0nCi1lbmFibGVfb3B0aW9uX2NoZWNraW5nCi1lbmFibGVfc2lsZW50X3J1bGVzCi1lbmFibGVfZGVwZW5kZW5jeV90cmFja2luZwotZW5hYmxlX21haW50YWluZXJfbW9kZQotZW5hYmxlX2xkX3ZlcnNpb25fc2NyaXB0Ci1lbmFibGVfc2hhcmVkCi1lbmFibGVfc3RhdGljCi13aXRoX3BpYwotZW5hYmxlX2Zhc3RfaW5zdGFsbAotd2l0aF9nbnVfbGQKLXdpdGhfc3lzcm9vdAotZW5hYmxlX2xpYnRvb2xfbG9jawotZW5hYmxlX21heG1lbQotJwotICAgICAgYWNfcHJlY2lvdXNfdmFycz0nYnVpbGRfYWxpYXMKLWhvc3RfYWxpYXMKLXRhcmdldF9hbGlhcwotQ0MKLUNGTEFHUwotTERGTEFHUwotTElCUwotQ1BQRkxBR1MKLUNQUAotQ1BQRkxBR1MKLUNDCi1MREZMQUdTCi1MSUJTCi1DUFBGTEFHUwotQ1BQCi1DUFBGTEFHUycKLQotCi0jIEluaXRpYWxpemUgc29tZSB2YXJpYWJsZXMgc2V0IGJ5IG9wdGlvbnMuCi1hY19pbml0X2hlbHA9Ci1hY19pbml0X3ZlcnNpb249ZmFsc2UKLWFjX3VucmVjb2duaXplZF9vcHRzPQotYWNfdW5yZWNvZ25pemVkX3NlcD0KLSMgVGhlIHZhcmlhYmxlcyBoYXZlIHRoZSBzYW1lIG5hbWVzIGFzIHRoZSBvcHRpb25zLCB3aXRoCi0jIGRhc2hlcyBjaGFuZ2VkIHRvIHVuZGVybGluZXMuCi1jYWNoZV9maWxlPS9kZXYvbnVsbAotZXhlY19wcmVmaXg9Tk9ORQotbm9fY3JlYXRlPQotbm9fcmVjdXJzaW9uPQotcHJlZml4PU5PTkUKLXByb2dyYW1fcHJlZml4PU5PTkUKLXByb2dyYW1fc3VmZml4PU5PTkUKLXByb2dyYW1fdHJhbnNmb3JtX25hbWU9cyx4LHgsCi1zaWxlbnQ9Ci1zaXRlPQotc3JjZGlyPQotdmVyYm9zZT0KLXhfaW5jbHVkZXM9Tk9ORQoteF9saWJyYXJpZXM9Tk9ORQotCi0jIEluc3RhbGxhdGlvbiBkaXJlY3Rvcnkgb3B0aW9ucy4KLSMgVGhlc2UgYXJlIGxlZnQgdW5leHBhbmRlZCBzbyB1c2VycyBjYW4gIm1ha2UgaW5zdGFsbCBleGVjX3ByZWZpeD0vZm9vIgotIyBhbmQgYWxsIHRoZSB2YXJpYWJsZXMgdGhhdCBhcmUgc3VwcG9zZWQgdG8gYmUgYmFzZWQgb24gZXhlY19wcmVmaXgKLSMgYnkgZGVmYXVsdCB3aWxsIGFjdHVhbGx5IGNoYW5nZS4KLSMgVXNlIGJyYWNlcyBpbnN0ZWFkIG9mIHBhcmVucyBiZWNhdXNlIHNoLCBwZXJsLCBldGMuIGFsc28gYWNjZXB0IHRoZW0uCi0jIChUaGUgbGlzdCBmb2xsb3dzIHRoZSBzYW1lIG9yZGVyIGFzIHRoZSBHTlUgQ29kaW5nIFN0YW5kYXJkcy4pCi1iaW5kaXI9JyR7ZXhlY19wcmVmaXh9L2JpbicKLXNiaW5kaXI9JyR7ZXhlY19wcmVmaXh9L3NiaW4nCi1saWJleGVjZGlyPScke2V4ZWNfcHJlZml4fS9saWJleGVjJwotZGF0YXJvb3RkaXI9JyR7cHJlZml4fS9zaGFyZScKLWRhdGFkaXI9JyR7ZGF0YXJvb3RkaXJ9Jwotc3lzY29uZmRpcj0nJHtwcmVmaXh9L2V0YycKLXNoYXJlZHN0YXRlZGlyPScke3ByZWZpeH0vY29tJwotbG9jYWxzdGF0ZWRpcj0nJHtwcmVmaXh9L3ZhcicKLWluY2x1ZGVkaXI9JyR7cHJlZml4fS9pbmNsdWRlJwotb2xkaW5jbHVkZWRpcj0nL3Vzci9pbmNsdWRlJwotZG9jZGlyPScke2RhdGFyb290ZGlyfS9kb2MvJHtQQUNLQUdFX1RBUk5BTUV9JwotaW5mb2Rpcj0nJHtkYXRhcm9vdGRpcn0vaW5mbycKLWh0bWxkaXI9JyR7ZG9jZGlyfScKLWR2aWRpcj0nJHtkb2NkaXJ9JwotcGRmZGlyPScke2RvY2Rpcn0nCi1wc2Rpcj0nJHtkb2NkaXJ9JwotbGliZGlyPScke2V4ZWNfcHJlZml4fS9saWInCi1sb2NhbGVkaXI9JyR7ZGF0YXJvb3RkaXJ9L2xvY2FsZScKLW1hbmRpcj0nJHtkYXRhcm9vdGRpcn0vbWFuJwotCi1hY19wcmV2PQotYWNfZGFzaGRhc2g9Ci1mb3IgYWNfb3B0aW9uCi1kbwotICAjIElmIHRoZSBwcmV2aW91cyBvcHRpb24gbmVlZHMgYW4gYXJndW1lbnQsIGFzc2lnbiBpdC4KLSAgaWYgdGVzdCAtbiAiJGFjX3ByZXYiOyB0aGVuCi0gICAgZXZhbCAkYWNfcHJldj1cJGFjX29wdGlvbgotICAgIGFjX3ByZXY9Ci0gICAgY29udGludWUKLSAgZmkKLQotICBjYXNlICRhY19vcHRpb24gaW4KLSAgKj0/KikgYWNfb3B0YXJnPWBleHByICJYJGFjX29wdGlvbiIgOiAnW149XSo9XCguKlwpJ2AgOzsKLSAgKj0pICAgYWNfb3B0YXJnPSA7OwotICAqKSAgICBhY19vcHRhcmc9eWVzIDs7Ci0gIGVzYWMKLQotICAjIEFjY2VwdCB0aGUgaW1wb3J0YW50IEN5Z251cyBjb25maWd1cmUgb3B0aW9ucywgc28gd2UgY2FuIGRpYWdub3NlIHR5cG9zLgotCi0gIGNhc2UgJGFjX2Rhc2hkYXNoJGFjX29wdGlvbiBpbgotICAtLSkKLSAgICBhY19kYXNoZGFzaD15ZXMgOzsKLQotICAtYmluZGlyIHwgLS1iaW5kaXIgfCAtLWJpbmRpIHwgLS1iaW5kIHwgLS1iaW4gfCAtLWJpKQotICAgIGFjX3ByZXY9YmluZGlyIDs7Ci0gIC1iaW5kaXI9KiB8IC0tYmluZGlyPSogfCAtLWJpbmRpPSogfCAtLWJpbmQ9KiB8IC0tYmluPSogfCAtLWJpPSopCi0gICAgYmluZGlyPSRhY19vcHRhcmcgOzsKLQotICAtYnVpbGQgfCAtLWJ1aWxkIHwgLS1idWlsIHwgLS1idWkgfCAtLWJ1KQotICAgIGFjX3ByZXY9YnVpbGRfYWxpYXMgOzsKLSAgLWJ1aWxkPSogfCAtLWJ1aWxkPSogfCAtLWJ1aWw9KiB8IC0tYnVpPSogfCAtLWJ1PSopCi0gICAgYnVpbGRfYWxpYXM9JGFjX29wdGFyZyA7OwotCi0gIC1jYWNoZS1maWxlIHwgLS1jYWNoZS1maWxlIHwgLS1jYWNoZS1maWwgfCAtLWNhY2hlLWZpIFwKLSAgfCAtLWNhY2hlLWYgfCAtLWNhY2hlLSB8IC0tY2FjaGUgfCAtLWNhY2ggfCAtLWNhYyB8IC0tY2EgfCAtLWMpCi0gICAgYWNfcHJldj1jYWNoZV9maWxlIDs7Ci0gIC1jYWNoZS1maWxlPSogfCAtLWNhY2hlLWZpbGU9KiB8IC0tY2FjaGUtZmlsPSogfCAtLWNhY2hlLWZpPSogXAotICB8IC0tY2FjaGUtZj0qIHwgLS1jYWNoZS09KiB8IC0tY2FjaGU9KiB8IC0tY2FjaD0qIHwgLS1jYWM9KiB8IC0tY2E9KiB8IC0tYz0qKQotICAgIGNhY2hlX2ZpbGU9JGFjX29wdGFyZyA7OwotCi0gIC0tY29uZmlnLWNhY2hlIHwgLUMpCi0gICAgY2FjaGVfZmlsZT1jb25maWcuY2FjaGUgOzsKLQotICAtZGF0YWRpciB8IC0tZGF0YWRpciB8IC0tZGF0YWRpIHwgLS1kYXRhZCkKLSAgICBhY19wcmV2PWRhdGFkaXIgOzsKLSAgLWRhdGFkaXI9KiB8IC0tZGF0YWRpcj0qIHwgLS1kYXRhZGk9KiB8IC0tZGF0YWQ9KikKLSAgICBkYXRhZGlyPSRhY19vcHRhcmcgOzsKLQotICAtZGF0YXJvb3RkaXIgfCAtLWRhdGFyb290ZGlyIHwgLS1kYXRhcm9vdGRpIHwgLS1kYXRhcm9vdGQgfCAtLWRhdGFyb290IFwKLSAgfCAtLWRhdGFyb28gfCAtLWRhdGFybyB8IC0tZGF0YXIpCi0gICAgYWNfcHJldj1kYXRhcm9vdGRpciA7OwotICAtZGF0YXJvb3RkaXI9KiB8IC0tZGF0YXJvb3RkaXI9KiB8IC0tZGF0YXJvb3RkaT0qIHwgLS1kYXRhcm9vdGQ9KiBcCi0gIHwgLS1kYXRhcm9vdD0qIHwgLS1kYXRhcm9vPSogfCAtLWRhdGFybz0qIHwgLS1kYXRhcj0qKQotICAgIGRhdGFyb290ZGlyPSRhY19vcHRhcmcgOzsKLQotICAtZGlzYWJsZS0qIHwgLS1kaXNhYmxlLSopCi0gICAgYWNfdXNlcm9wdD1gZXhwciAieCRhY19vcHRpb24iIDogJ3gtKmRpc2FibGUtXCguKlwpJ2AKLSAgICAjIFJlamVjdCBuYW1lcyB0aGF0IGFyZSBub3QgdmFsaWQgc2hlbGwgdmFyaWFibGUgbmFtZXMuCi0gICAgZXhwciAieCRhY191c2Vyb3B0IiA6ICIuKlteLSsuXyRhc19jcl9hbG51bV0iID4vZGV2L251bGwgJiYKLSAgICAgIGFzX2ZuX2Vycm9yICQ/ICJpbnZhbGlkIGZlYXR1cmUgbmFtZTogJGFjX3VzZXJvcHQiCi0gICAgYWNfdXNlcm9wdF9vcmlnPSRhY191c2Vyb3B0Ci0gICAgYWNfdXNlcm9wdD1gJGFzX2VjaG8gIiRhY191c2Vyb3B0IiB8IHNlZCAncy9bLSsuXS9fL2cnYAotICAgIGNhc2UgJGFjX3VzZXJfb3B0cyBpbgotICAgICAgKiIKLSJlbmFibGVfJGFjX3VzZXJvcHQiCi0iKikgOzsKLSAgICAgICopIGFjX3VucmVjb2duaXplZF9vcHRzPSIkYWNfdW5yZWNvZ25pemVkX29wdHMkYWNfdW5yZWNvZ25pemVkX3NlcC0tZGlzYWJsZS0kYWNfdXNlcm9wdF9vcmlnIgotCSBhY191bnJlY29nbml6ZWRfc2VwPScsICc7OwotICAgIGVzYWMKLSAgICBldmFsIGVuYWJsZV8kYWNfdXNlcm9wdD1ubyA7OwotCi0gIC1kb2NkaXIgfCAtLWRvY2RpciB8IC0tZG9jZGkgfCAtLWRvYyB8IC0tZG8pCi0gICAgYWNfcHJldj1kb2NkaXIgOzsKLSAgLWRvY2Rpcj0qIHwgLS1kb2NkaXI9KiB8IC0tZG9jZGk9KiB8IC0tZG9jPSogfCAtLWRvPSopCi0gICAgZG9jZGlyPSRhY19vcHRhcmcgOzsKLQotICAtZHZpZGlyIHwgLS1kdmlkaXIgfCAtLWR2aWRpIHwgLS1kdmlkIHwgLS1kdmkgfCAtLWR2KQotICAgIGFjX3ByZXY9ZHZpZGlyIDs7Ci0gIC1kdmlkaXI9KiB8IC0tZHZpZGlyPSogfCAtLWR2aWRpPSogfCAtLWR2aWQ9KiB8IC0tZHZpPSogfCAtLWR2PSopCi0gICAgZHZpZGlyPSRhY19vcHRhcmcgOzsKLQotICAtZW5hYmxlLSogfCAtLWVuYWJsZS0qKQotICAgIGFjX3VzZXJvcHQ9YGV4cHIgIngkYWNfb3B0aW9uIiA6ICd4LSplbmFibGUtXChbXj1dKlwpJ2AKLSAgICAjIFJlamVjdCBuYW1lcyB0aGF0IGFyZSBub3QgdmFsaWQgc2hlbGwgdmFyaWFibGUgbmFtZXMuCi0gICAgZXhwciAieCRhY191c2Vyb3B0IiA6ICIuKlteLSsuXyRhc19jcl9hbG51bV0iID4vZGV2L251bGwgJiYKLSAgICAgIGFzX2ZuX2Vycm9yICQ/ICJpbnZhbGlkIGZlYXR1cmUgbmFtZTogJGFjX3VzZXJvcHQiCi0gICAgYWNfdXNlcm9wdF9vcmlnPSRhY191c2Vyb3B0Ci0gICAgYWNfdXNlcm9wdD1gJGFzX2VjaG8gIiRhY191c2Vyb3B0IiB8IHNlZCAncy9bLSsuXS9fL2cnYAotICAgIGNhc2UgJGFjX3VzZXJfb3B0cyBpbgotICAgICAgKiIKLSJlbmFibGVfJGFjX3VzZXJvcHQiCi0iKikgOzsKLSAgICAgICopIGFjX3VucmVjb2duaXplZF9vcHRzPSIkYWNfdW5yZWNvZ25pemVkX29wdHMkYWNfdW5yZWNvZ25pemVkX3NlcC0tZW5hYmxlLSRhY191c2Vyb3B0X29yaWciCi0JIGFjX3VucmVjb2duaXplZF9zZXA9JywgJzs7Ci0gICAgZXNhYwotICAgIGV2YWwgZW5hYmxlXyRhY191c2Vyb3B0PVwkYWNfb3B0YXJnIDs7Ci0KLSAgLWV4ZWMtcHJlZml4IHwgLS1leGVjX3ByZWZpeCB8IC0tZXhlYy1wcmVmaXggfCAtLWV4ZWMtcHJlZmkgXAotICB8IC0tZXhlYy1wcmVmIHwgLS1leGVjLXByZSB8IC0tZXhlYy1wciB8IC0tZXhlYy1wIHwgLS1leGVjLSBcCi0gIHwgLS1leGVjIHwgLS1leGUgfCAtLWV4KQotICAgIGFjX3ByZXY9ZXhlY19wcmVmaXggOzsKLSAgLWV4ZWMtcHJlZml4PSogfCAtLWV4ZWNfcHJlZml4PSogfCAtLWV4ZWMtcHJlZml4PSogfCAtLWV4ZWMtcHJlZmk9KiBcCi0gIHwgLS1leGVjLXByZWY9KiB8IC0tZXhlYy1wcmU9KiB8IC0tZXhlYy1wcj0qIHwgLS1leGVjLXA9KiB8IC0tZXhlYy09KiBcCi0gIHwgLS1leGVjPSogfCAtLWV4ZT0qIHwgLS1leD0qKQotICAgIGV4ZWNfcHJlZml4PSRhY19vcHRhcmcgOzsKLQotICAtZ2FzIHwgLS1nYXMgfCAtLWdhIHwgLS1nKQotICAgICMgT2Jzb2xldGU7IHVzZSAtLXdpdGgtZ2FzLgotICAgIHdpdGhfZ2FzPXllcyA7OwotCi0gIC1oZWxwIHwgLS1oZWxwIHwgLS1oZWwgfCAtLWhlIHwgLWgpCi0gICAgYWNfaW5pdF9oZWxwPWxvbmcgOzsKLSAgLWhlbHA9ciogfCAtLWhlbHA9ciogfCAtLWhlbD1yKiB8IC0taGU9ciogfCAtaHIqKQotICAgIGFjX2luaXRfaGVscD1yZWN1cnNpdmUgOzsKLSAgLWhlbHA9cyogfCAtLWhlbHA9cyogfCAtLWhlbD1zKiB8IC0taGU9cyogfCAtaHMqKQotICAgIGFjX2luaXRfaGVscD1zaG9ydCA7OwotCi0gIC1ob3N0IHwgLS1ob3N0IHwgLS1ob3MgfCAtLWhvKQotICAgIGFjX3ByZXY9aG9zdF9hbGlhcyA7OwotICAtaG9zdD0qIHwgLS1ob3N0PSogfCAtLWhvcz0qIHwgLS1obz0qKQotICAgIGhvc3RfYWxpYXM9JGFjX29wdGFyZyA7OwotCi0gIC1odG1sZGlyIHwgLS1odG1sZGlyIHwgLS1odG1sZGkgfCAtLWh0bWxkIHwgLS1odG1sIHwgLS1odG0gfCAtLWh0KQotICAgIGFjX3ByZXY9aHRtbGRpciA7OwotICAtaHRtbGRpcj0qIHwgLS1odG1sZGlyPSogfCAtLWh0bWxkaT0qIHwgLS1odG1sZD0qIHwgLS1odG1sPSogfCAtLWh0bT0qIFwKLSAgfCAtLWh0PSopCi0gICAgaHRtbGRpcj0kYWNfb3B0YXJnIDs7Ci0KLSAgLWluY2x1ZGVkaXIgfCAtLWluY2x1ZGVkaXIgfCAtLWluY2x1ZGVkaSB8IC0taW5jbHVkZWQgfCAtLWluY2x1ZGUgXAotICB8IC0taW5jbHVkIHwgLS1pbmNsdSB8IC0taW5jbCB8IC0taW5jKQotICAgIGFjX3ByZXY9aW5jbHVkZWRpciA7OwotICAtaW5jbHVkZWRpcj0qIHwgLS1pbmNsdWRlZGlyPSogfCAtLWluY2x1ZGVkaT0qIHwgLS1pbmNsdWRlZD0qIHwgLS1pbmNsdWRlPSogXAotICB8IC0taW5jbHVkPSogfCAtLWluY2x1PSogfCAtLWluY2w9KiB8IC0taW5jPSopCi0gICAgaW5jbHVkZWRpcj0kYWNfb3B0YXJnIDs7Ci0KLSAgLWluZm9kaXIgfCAtLWluZm9kaXIgfCAtLWluZm9kaSB8IC0taW5mb2QgfCAtLWluZm8gfCAtLWluZikKLSAgICBhY19wcmV2PWluZm9kaXIgOzsKLSAgLWluZm9kaXI9KiB8IC0taW5mb2Rpcj0qIHwgLS1pbmZvZGk9KiB8IC0taW5mb2Q9KiB8IC0taW5mbz0qIHwgLS1pbmY9KikKLSAgICBpbmZvZGlyPSRhY19vcHRhcmcgOzsKLQotICAtbGliZGlyIHwgLS1saWJkaXIgfCAtLWxpYmRpIHwgLS1saWJkKQotICAgIGFjX3ByZXY9bGliZGlyIDs7Ci0gIC1saWJkaXI9KiB8IC0tbGliZGlyPSogfCAtLWxpYmRpPSogfCAtLWxpYmQ9KikKLSAgICBsaWJkaXI9JGFjX29wdGFyZyA7OwotCi0gIC1saWJleGVjZGlyIHwgLS1saWJleGVjZGlyIHwgLS1saWJleGVjZGkgfCAtLWxpYmV4ZWNkIHwgLS1saWJleGVjIFwKLSAgfCAtLWxpYmV4ZSB8IC0tbGliZXggfCAtLWxpYmUpCi0gICAgYWNfcHJldj1saWJleGVjZGlyIDs7Ci0gIC1saWJleGVjZGlyPSogfCAtLWxpYmV4ZWNkaXI9KiB8IC0tbGliZXhlY2RpPSogfCAtLWxpYmV4ZWNkPSogfCAtLWxpYmV4ZWM9KiBcCi0gIHwgLS1saWJleGU9KiB8IC0tbGliZXg9KiB8IC0tbGliZT0qKQotICAgIGxpYmV4ZWNkaXI9JGFjX29wdGFyZyA7OwotCi0gIC1sb2NhbGVkaXIgfCAtLWxvY2FsZWRpciB8IC0tbG9jYWxlZGkgfCAtLWxvY2FsZWQgfCAtLWxvY2FsZSkKLSAgICBhY19wcmV2PWxvY2FsZWRpciA7OwotICAtbG9jYWxlZGlyPSogfCAtLWxvY2FsZWRpcj0qIHwgLS1sb2NhbGVkaT0qIHwgLS1sb2NhbGVkPSogfCAtLWxvY2FsZT0qKQotICAgIGxvY2FsZWRpcj0kYWNfb3B0YXJnIDs7Ci0KLSAgLWxvY2Fsc3RhdGVkaXIgfCAtLWxvY2Fsc3RhdGVkaXIgfCAtLWxvY2Fsc3RhdGVkaSB8IC0tbG9jYWxzdGF0ZWQgXAotICB8IC0tbG9jYWxzdGF0ZSB8IC0tbG9jYWxzdGF0IHwgLS1sb2NhbHN0YSB8IC0tbG9jYWxzdCB8IC0tbG9jYWxzKQotICAgIGFjX3ByZXY9bG9jYWxzdGF0ZWRpciA7OwotICAtbG9jYWxzdGF0ZWRpcj0qIHwgLS1sb2NhbHN0YXRlZGlyPSogfCAtLWxvY2Fsc3RhdGVkaT0qIHwgLS1sb2NhbHN0YXRlZD0qIFwKLSAgfCAtLWxvY2Fsc3RhdGU9KiB8IC0tbG9jYWxzdGF0PSogfCAtLWxvY2Fsc3RhPSogfCAtLWxvY2Fsc3Q9KiB8IC0tbG9jYWxzPSopCi0gICAgbG9jYWxzdGF0ZWRpcj0kYWNfb3B0YXJnIDs7Ci0KLSAgLW1hbmRpciB8IC0tbWFuZGlyIHwgLS1tYW5kaSB8IC0tbWFuZCB8IC0tbWFuIHwgLS1tYSB8IC0tbSkKLSAgICBhY19wcmV2PW1hbmRpciA7OwotICAtbWFuZGlyPSogfCAtLW1hbmRpcj0qIHwgLS1tYW5kaT0qIHwgLS1tYW5kPSogfCAtLW1hbj0qIHwgLS1tYT0qIHwgLS1tPSopCi0gICAgbWFuZGlyPSRhY19vcHRhcmcgOzsKLQotICAtbmZwIHwgLS1uZnAgfCAtLW5mKQotICAgICMgT2Jzb2xldGU7IHVzZSAtLXdpdGhvdXQtZnAuCi0gICAgd2l0aF9mcD1ubyA7OwotCi0gIC1uby1jcmVhdGUgfCAtLW5vLWNyZWF0ZSB8IC0tbm8tY3JlYXQgfCAtLW5vLWNyZWEgfCAtLW5vLWNyZSBcCi0gIHwgLS1uby1jciB8IC0tbm8tYyB8IC1uKQotICAgIG5vX2NyZWF0ZT15ZXMgOzsKLQotICAtbm8tcmVjdXJzaW9uIHwgLS1uby1yZWN1cnNpb24gfCAtLW5vLXJlY3Vyc2lvIHwgLS1uby1yZWN1cnNpIFwKLSAgfCAtLW5vLXJlY3VycyB8IC0tbm8tcmVjdXIgfCAtLW5vLXJlY3UgfCAtLW5vLXJlYyB8IC0tbm8tcmUgfCAtLW5vLXIpCi0gICAgbm9fcmVjdXJzaW9uPXllcyA7OwotCi0gIC1vbGRpbmNsdWRlZGlyIHwgLS1vbGRpbmNsdWRlZGlyIHwgLS1vbGRpbmNsdWRlZGkgfCAtLW9sZGluY2x1ZGVkIFwKLSAgfCAtLW9sZGluY2x1ZGUgfCAtLW9sZGluY2x1ZCB8IC0tb2xkaW5jbHUgfCAtLW9sZGluY2wgfCAtLW9sZGluYyBcCi0gIHwgLS1vbGRpbiB8IC0tb2xkaSB8IC0tb2xkIHwgLS1vbCB8IC0tbykKLSAgICBhY19wcmV2PW9sZGluY2x1ZGVkaXIgOzsKLSAgLW9sZGluY2x1ZGVkaXI9KiB8IC0tb2xkaW5jbHVkZWRpcj0qIHwgLS1vbGRpbmNsdWRlZGk9KiB8IC0tb2xkaW5jbHVkZWQ9KiBcCi0gIHwgLS1vbGRpbmNsdWRlPSogfCAtLW9sZGluY2x1ZD0qIHwgLS1vbGRpbmNsdT0qIHwgLS1vbGRpbmNsPSogfCAtLW9sZGluYz0qIFwKLSAgfCAtLW9sZGluPSogfCAtLW9sZGk9KiB8IC0tb2xkPSogfCAtLW9sPSogfCAtLW89KikKLSAgICBvbGRpbmNsdWRlZGlyPSRhY19vcHRhcmcgOzsKLQotICAtcHJlZml4IHwgLS1wcmVmaXggfCAtLXByZWZpIHwgLS1wcmVmIHwgLS1wcmUgfCAtLXByIHwgLS1wKQotICAgIGFjX3ByZXY9cHJlZml4IDs7Ci0gIC1wcmVmaXg9KiB8IC0tcHJlZml4PSogfCAtLXByZWZpPSogfCAtLXByZWY9KiB8IC0tcHJlPSogfCAtLXByPSogfCAtLXA9KikKLSAgICBwcmVmaXg9JGFjX29wdGFyZyA7OwotCi0gIC1wcm9ncmFtLXByZWZpeCB8IC0tcHJvZ3JhbS1wcmVmaXggfCAtLXByb2dyYW0tcHJlZmkgfCAtLXByb2dyYW0tcHJlZiBcCi0gIHwgLS1wcm9ncmFtLXByZSB8IC0tcHJvZ3JhbS1wciB8IC0tcHJvZ3JhbS1wKQotICAgIGFjX3ByZXY9cHJvZ3JhbV9wcmVmaXggOzsKLSAgLXByb2dyYW0tcHJlZml4PSogfCAtLXByb2dyYW0tcHJlZml4PSogfCAtLXByb2dyYW0tcHJlZmk9KiBcCi0gIHwgLS1wcm9ncmFtLXByZWY9KiB8IC0tcHJvZ3JhbS1wcmU9KiB8IC0tcHJvZ3JhbS1wcj0qIHwgLS1wcm9ncmFtLXA9KikKLSAgICBwcm9ncmFtX3ByZWZpeD0kYWNfb3B0YXJnIDs7Ci0KLSAgLXByb2dyYW0tc3VmZml4IHwgLS1wcm9ncmFtLXN1ZmZpeCB8IC0tcHJvZ3JhbS1zdWZmaSB8IC0tcHJvZ3JhbS1zdWZmIFwKLSAgfCAtLXByb2dyYW0tc3VmIHwgLS1wcm9ncmFtLXN1IHwgLS1wcm9ncmFtLXMpCi0gICAgYWNfcHJldj1wcm9ncmFtX3N1ZmZpeCA7OwotICAtcHJvZ3JhbS1zdWZmaXg9KiB8IC0tcHJvZ3JhbS1zdWZmaXg9KiB8IC0tcHJvZ3JhbS1zdWZmaT0qIFwKLSAgfCAtLXByb2dyYW0tc3VmZj0qIHwgLS1wcm9ncmFtLXN1Zj0qIHwgLS1wcm9ncmFtLXN1PSogfCAtLXByb2dyYW0tcz0qKQotICAgIHByb2dyYW1fc3VmZml4PSRhY19vcHRhcmcgOzsKLQotICAtcHJvZ3JhbS10cmFuc2Zvcm0tbmFtZSB8IC0tcHJvZ3JhbS10cmFuc2Zvcm0tbmFtZSBcCi0gIHwgLS1wcm9ncmFtLXRyYW5zZm9ybS1uYW0gfCAtLXByb2dyYW0tdHJhbnNmb3JtLW5hIFwKLSAgfCAtLXByb2dyYW0tdHJhbnNmb3JtLW4gfCAtLXByb2dyYW0tdHJhbnNmb3JtLSBcCi0gIHwgLS1wcm9ncmFtLXRyYW5zZm9ybSB8IC0tcHJvZ3JhbS10cmFuc2ZvciBcCi0gIHwgLS1wcm9ncmFtLXRyYW5zZm8gfCAtLXByb2dyYW0tdHJhbnNmIFwKLSAgfCAtLXByb2dyYW0tdHJhbnMgfCAtLXByb2dyYW0tdHJhbiBcCi0gIHwgLS1wcm9nci10cmEgfCAtLXByb2dyYW0tdHIgfCAtLXByb2dyYW0tdCkKLSAgICBhY19wcmV2PXByb2dyYW1fdHJhbnNmb3JtX25hbWUgOzsKLSAgLXByb2dyYW0tdHJhbnNmb3JtLW5hbWU9KiB8IC0tcHJvZ3JhbS10cmFuc2Zvcm0tbmFtZT0qIFwKLSAgfCAtLXByb2dyYW0tdHJhbnNmb3JtLW5hbT0qIHwgLS1wcm9ncmFtLXRyYW5zZm9ybS1uYT0qIFwKLSAgfCAtLXByb2dyYW0tdHJhbnNmb3JtLW49KiB8IC0tcHJvZ3JhbS10cmFuc2Zvcm0tPSogXAotICB8IC0tcHJvZ3JhbS10cmFuc2Zvcm09KiB8IC0tcHJvZ3JhbS10cmFuc2Zvcj0qIFwKLSAgfCAtLXByb2dyYW0tdHJhbnNmbz0qIHwgLS1wcm9ncmFtLXRyYW5zZj0qIFwKLSAgfCAtLXByb2dyYW0tdHJhbnM9KiB8IC0tcHJvZ3JhbS10cmFuPSogXAotICB8IC0tcHJvZ3ItdHJhPSogfCAtLXByb2dyYW0tdHI9KiB8IC0tcHJvZ3JhbS10PSopCi0gICAgcHJvZ3JhbV90cmFuc2Zvcm1fbmFtZT0kYWNfb3B0YXJnIDs7Ci0KLSAgLXBkZmRpciB8IC0tcGRmZGlyIHwgLS1wZGZkaSB8IC0tcGRmZCB8IC0tcGRmIHwgLS1wZCkKLSAgICBhY19wcmV2PXBkZmRpciA7OwotICAtcGRmZGlyPSogfCAtLXBkZmRpcj0qIHwgLS1wZGZkaT0qIHwgLS1wZGZkPSogfCAtLXBkZj0qIHwgLS1wZD0qKQotICAgIHBkZmRpcj0kYWNfb3B0YXJnIDs7Ci0KLSAgLXBzZGlyIHwgLS1wc2RpciB8IC0tcHNkaSB8IC0tcHNkIHwgLS1wcykKLSAgICBhY19wcmV2PXBzZGlyIDs7Ci0gIC1wc2Rpcj0qIHwgLS1wc2Rpcj0qIHwgLS1wc2RpPSogfCAtLXBzZD0qIHwgLS1wcz0qKQotICAgIHBzZGlyPSRhY19vcHRhcmcgOzsKLQotICAtcSB8IC1xdWlldCB8IC0tcXVpZXQgfCAtLXF1aWUgfCAtLXF1aSB8IC0tcXUgfCAtLXEgXAotICB8IC1zaWxlbnQgfCAtLXNpbGVudCB8IC0tc2lsZW4gfCAtLXNpbGUgfCAtLXNpbCkKLSAgICBzaWxlbnQ9eWVzIDs7Ci0KLSAgLXNiaW5kaXIgfCAtLXNiaW5kaXIgfCAtLXNiaW5kaSB8IC0tc2JpbmQgfCAtLXNiaW4gfCAtLXNiaSB8IC0tc2IpCi0gICAgYWNfcHJldj1zYmluZGlyIDs7Ci0gIC1zYmluZGlyPSogfCAtLXNiaW5kaXI9KiB8IC0tc2JpbmRpPSogfCAtLXNiaW5kPSogfCAtLXNiaW49KiBcCi0gIHwgLS1zYmk9KiB8IC0tc2I9KikKLSAgICBzYmluZGlyPSRhY19vcHRhcmcgOzsKLQotICAtc2hhcmVkc3RhdGVkaXIgfCAtLXNoYXJlZHN0YXRlZGlyIHwgLS1zaGFyZWRzdGF0ZWRpIFwKLSAgfCAtLXNoYXJlZHN0YXRlZCB8IC0tc2hhcmVkc3RhdGUgfCAtLXNoYXJlZHN0YXQgfCAtLXNoYXJlZHN0YSBcCi0gIHwgLS1zaGFyZWRzdCB8IC0tc2hhcmVkcyB8IC0tc2hhcmVkIHwgLS1zaGFyZSB8IC0tc2hhciBcCi0gIHwgLS1zaGEgfCAtLXNoKQotICAgIGFjX3ByZXY9c2hhcmVkc3RhdGVkaXIgOzsKLSAgLXNoYXJlZHN0YXRlZGlyPSogfCAtLXNoYXJlZHN0YXRlZGlyPSogfCAtLXNoYXJlZHN0YXRlZGk9KiBcCi0gIHwgLS1zaGFyZWRzdGF0ZWQ9KiB8IC0tc2hhcmVkc3RhdGU9KiB8IC0tc2hhcmVkc3RhdD0qIHwgLS1zaGFyZWRzdGE9KiBcCi0gIHwgLS1zaGFyZWRzdD0qIHwgLS1zaGFyZWRzPSogfCAtLXNoYXJlZD0qIHwgLS1zaGFyZT0qIHwgLS1zaGFyPSogXAotICB8IC0tc2hhPSogfCAtLXNoPSopCi0gICAgc2hhcmVkc3RhdGVkaXI9JGFjX29wdGFyZyA7OwotCi0gIC1zaXRlIHwgLS1zaXRlIHwgLS1zaXQpCi0gICAgYWNfcHJldj1zaXRlIDs7Ci0gIC1zaXRlPSogfCAtLXNpdGU9KiB8IC0tc2l0PSopCi0gICAgc2l0ZT0kYWNfb3B0YXJnIDs7Ci0KLSAgLXNyY2RpciB8IC0tc3JjZGlyIHwgLS1zcmNkaSB8IC0tc3JjZCB8IC0tc3JjIHwgLS1zcikKLSAgICBhY19wcmV2PXNyY2RpciA7OwotICAtc3JjZGlyPSogfCAtLXNyY2Rpcj0qIHwgLS1zcmNkaT0qIHwgLS1zcmNkPSogfCAtLXNyYz0qIHwgLS1zcj0qKQotICAgIHNyY2Rpcj0kYWNfb3B0YXJnIDs7Ci0KLSAgLXN5c2NvbmZkaXIgfCAtLXN5c2NvbmZkaXIgfCAtLXN5c2NvbmZkaSB8IC0tc3lzY29uZmQgfCAtLXN5c2NvbmYgXAotICB8IC0tc3lzY29uIHwgLS1zeXNjbyB8IC0tc3lzYyB8IC0tc3lzIHwgLS1zeSkKLSAgICBhY19wcmV2PXN5c2NvbmZkaXIgOzsKLSAgLXN5c2NvbmZkaXI9KiB8IC0tc3lzY29uZmRpcj0qIHwgLS1zeXNjb25mZGk9KiB8IC0tc3lzY29uZmQ9KiB8IC0tc3lzY29uZj0qIFwKLSAgfCAtLXN5c2Nvbj0qIHwgLS1zeXNjbz0qIHwgLS1zeXNjPSogfCAtLXN5cz0qIHwgLS1zeT0qKQotICAgIHN5c2NvbmZkaXI9JGFjX29wdGFyZyA7OwotCi0gIC10YXJnZXQgfCAtLXRhcmdldCB8IC0tdGFyZ2UgfCAtLXRhcmcgfCAtLXRhciB8IC0tdGEgfCAtLXQpCi0gICAgYWNfcHJldj10YXJnZXRfYWxpYXMgOzsKLSAgLXRhcmdldD0qIHwgLS10YXJnZXQ9KiB8IC0tdGFyZ2U9KiB8IC0tdGFyZz0qIHwgLS10YXI9KiB8IC0tdGE9KiB8IC0tdD0qKQotICAgIHRhcmdldF9hbGlhcz0kYWNfb3B0YXJnIDs7Ci0KLSAgLXYgfCAtdmVyYm9zZSB8IC0tdmVyYm9zZSB8IC0tdmVyYm9zIHwgLS12ZXJibyB8IC0tdmVyYikKLSAgICB2ZXJib3NlPXllcyA7OwotCi0gIC12ZXJzaW9uIHwgLS12ZXJzaW9uIHwgLS12ZXJzaW8gfCAtLXZlcnNpIHwgLS12ZXJzIHwgLVYpCi0gICAgYWNfaW5pdF92ZXJzaW9uPTogOzsKLQotICAtd2l0aC0qIHwgLS13aXRoLSopCi0gICAgYWNfdXNlcm9wdD1gZXhwciAieCRhY19vcHRpb24iIDogJ3gtKndpdGgtXChbXj1dKlwpJ2AKLSAgICAjIFJlamVjdCBuYW1lcyB0aGF0IGFyZSBub3QgdmFsaWQgc2hlbGwgdmFyaWFibGUgbmFtZXMuCi0gICAgZXhwciAieCRhY191c2Vyb3B0IiA6ICIuKlteLSsuXyRhc19jcl9hbG51bV0iID4vZGV2L251bGwgJiYKLSAgICAgIGFzX2ZuX2Vycm9yICQ/ICJpbnZhbGlkIHBhY2thZ2UgbmFtZTogJGFjX3VzZXJvcHQiCi0gICAgYWNfdXNlcm9wdF9vcmlnPSRhY191c2Vyb3B0Ci0gICAgYWNfdXNlcm9wdD1gJGFzX2VjaG8gIiRhY191c2Vyb3B0IiB8IHNlZCAncy9bLSsuXS9fL2cnYAotICAgIGNhc2UgJGFjX3VzZXJfb3B0cyBpbgotICAgICAgKiIKLSJ3aXRoXyRhY191c2Vyb3B0IgotIiopIDs7Ci0gICAgICAqKSBhY191bnJlY29nbml6ZWRfb3B0cz0iJGFjX3VucmVjb2duaXplZF9vcHRzJGFjX3VucmVjb2duaXplZF9zZXAtLXdpdGgtJGFjX3VzZXJvcHRfb3JpZyIKLQkgYWNfdW5yZWNvZ25pemVkX3NlcD0nLCAnOzsKLSAgICBlc2FjCi0gICAgZXZhbCB3aXRoXyRhY191c2Vyb3B0PVwkYWNfb3B0YXJnIDs7Ci0KLSAgLXdpdGhvdXQtKiB8IC0td2l0aG91dC0qKQotICAgIGFjX3VzZXJvcHQ9YGV4cHIgIngkYWNfb3B0aW9uIiA6ICd4LSp3aXRob3V0LVwoLipcKSdgCi0gICAgIyBSZWplY3QgbmFtZXMgdGhhdCBhcmUgbm90IHZhbGlkIHNoZWxsIHZhcmlhYmxlIG5hbWVzLgotICAgIGV4cHIgIngkYWNfdXNlcm9wdCIgOiAiLipbXi0rLl8kYXNfY3JfYWxudW1dIiA+L2Rldi9udWxsICYmCi0gICAgICBhc19mbl9lcnJvciAkPyAiaW52YWxpZCBwYWNrYWdlIG5hbWU6ICRhY191c2Vyb3B0IgotICAgIGFjX3VzZXJvcHRfb3JpZz0kYWNfdXNlcm9wdAotICAgIGFjX3VzZXJvcHQ9YCRhc19lY2hvICIkYWNfdXNlcm9wdCIgfCBzZWQgJ3MvWy0rLl0vXy9nJ2AKLSAgICBjYXNlICRhY191c2VyX29wdHMgaW4KLSAgICAgICoiCi0id2l0aF8kYWNfdXNlcm9wdCIKLSIqKSA7OwotICAgICAgKikgYWNfdW5yZWNvZ25pemVkX29wdHM9IiRhY191bnJlY29nbml6ZWRfb3B0cyRhY191bnJlY29nbml6ZWRfc2VwLS13aXRob3V0LSRhY191c2Vyb3B0X29yaWciCi0JIGFjX3VucmVjb2duaXplZF9zZXA9JywgJzs7Ci0gICAgZXNhYwotICAgIGV2YWwgd2l0aF8kYWNfdXNlcm9wdD1ubyA7OwotCi0gIC0teCkKLSAgICAjIE9ic29sZXRlOyB1c2UgLS13aXRoLXguCi0gICAgd2l0aF94PXllcyA7OwotCi0gIC14LWluY2x1ZGVzIHwgLS14LWluY2x1ZGVzIHwgLS14LWluY2x1ZGUgfCAtLXgtaW5jbHVkIHwgLS14LWluY2x1IFwKLSAgfCAtLXgtaW5jbCB8IC0teC1pbmMgfCAtLXgtaW4gfCAtLXgtaSkKLSAgICBhY19wcmV2PXhfaW5jbHVkZXMgOzsKLSAgLXgtaW5jbHVkZXM9KiB8IC0teC1pbmNsdWRlcz0qIHwgLS14LWluY2x1ZGU9KiB8IC0teC1pbmNsdWQ9KiB8IC0teC1pbmNsdT0qIFwKLSAgfCAtLXgtaW5jbD0qIHwgLS14LWluYz0qIHwgLS14LWluPSogfCAtLXgtaT0qKQotICAgIHhfaW5jbHVkZXM9JGFjX29wdGFyZyA7OwotCi0gIC14LWxpYnJhcmllcyB8IC0teC1saWJyYXJpZXMgfCAtLXgtbGlicmFyaWUgfCAtLXgtbGlicmFyaSBcCi0gIHwgLS14LWxpYnJhciB8IC0teC1saWJyYSB8IC0teC1saWJyIHwgLS14LWxpYiB8IC0teC1saSB8IC0teC1sKQotICAgIGFjX3ByZXY9eF9saWJyYXJpZXMgOzsKLSAgLXgtbGlicmFyaWVzPSogfCAtLXgtbGlicmFyaWVzPSogfCAtLXgtbGlicmFyaWU9KiB8IC0teC1saWJyYXJpPSogXAotICB8IC0teC1saWJyYXI9KiB8IC0teC1saWJyYT0qIHwgLS14LWxpYnI9KiB8IC0teC1saWI9KiB8IC0teC1saT0qIHwgLS14LWw9KikKLSAgICB4X2xpYnJhcmllcz0kYWNfb3B0YXJnIDs7Ci0KLSAgLSopIGFzX2ZuX2Vycm9yICQ/ICJ1bnJlY29nbml6ZWQgb3B0aW9uOiBcYCRhY19vcHRpb24nCi1UcnkgXGAkMCAtLWhlbHAnIGZvciBtb3JlIGluZm9ybWF0aW9uIgotICAgIDs7Ci0KLSAgKj0qKQotICAgIGFjX2VudnZhcj1gZXhwciAieCRhY19vcHRpb24iIDogJ3hcKFtePV0qXCk9J2AKLSAgICAjIFJlamVjdCBuYW1lcyB0aGF0IGFyZSBub3QgdmFsaWQgc2hlbGwgdmFyaWFibGUgbmFtZXMuCi0gICAgY2FzZSAkYWNfZW52dmFyIGluICMoCi0gICAgICAnJyB8IFswLTldKiB8ICpbIV8kYXNfY3JfYWxudW1dKiApCi0gICAgICBhc19mbl9lcnJvciAkPyAiaW52YWxpZCB2YXJpYWJsZSBuYW1lOiBcYCRhY19lbnZ2YXInIiA7OwotICAgIGVzYWMKLSAgICBldmFsICRhY19lbnZ2YXI9XCRhY19vcHRhcmcKLSAgICBleHBvcnQgJGFjX2VudnZhciA7OwotCi0gICopCi0gICAgIyBGSVhNRTogc2hvdWxkIGJlIHJlbW92ZWQgaW4gYXV0b2NvbmYgMy4wLgotICAgICRhc19lY2hvICIkYXNfbWU6IFdBUk5JTkc6IHlvdSBzaG91bGQgdXNlIC0tYnVpbGQsIC0taG9zdCwgLS10YXJnZXQiID4mMgotICAgIGV4cHIgIngkYWNfb3B0aW9uIiA6ICIuKlteLS5fJGFzX2NyX2FsbnVtXSIgPi9kZXYvbnVsbCAmJgotICAgICAgJGFzX2VjaG8gIiRhc19tZTogV0FSTklORzogaW52YWxpZCBob3N0IHR5cGU6ICRhY19vcHRpb24iID4mMgotICAgIDogIiR7YnVpbGRfYWxpYXM9JGFjX29wdGlvbn0gJHtob3N0X2FsaWFzPSRhY19vcHRpb259ICR7dGFyZ2V0X2FsaWFzPSRhY19vcHRpb259IgotICAgIDs7Ci0KLSAgZXNhYwotZG9uZQotCi1pZiB0ZXN0IC1uICIkYWNfcHJldiI7IHRoZW4KLSAgYWNfb3B0aW9uPS0tYGVjaG8gJGFjX3ByZXYgfCBzZWQgJ3MvXy8tL2cnYAotICBhc19mbl9lcnJvciAkPyAibWlzc2luZyBhcmd1bWVudCB0byAkYWNfb3B0aW9uIgotZmkKLQotaWYgdGVzdCAtbiAiJGFjX3VucmVjb2duaXplZF9vcHRzIjsgdGhlbgotICBjYXNlICRlbmFibGVfb3B0aW9uX2NoZWNraW5nIGluCi0gICAgbm8pIDs7Ci0gICAgZmF0YWwpIGFzX2ZuX2Vycm9yICQ/ICJ1bnJlY29nbml6ZWQgb3B0aW9uczogJGFjX3VucmVjb2duaXplZF9vcHRzIiA7OwotICAgICopICAgICAkYXNfZWNobyAiJGFzX21lOiBXQVJOSU5HOiB1bnJlY29nbml6ZWQgb3B0aW9uczogJGFjX3VucmVjb2duaXplZF9vcHRzIiA+JjIgOzsKLSAgZXNhYwotZmkKLQotIyBDaGVjayBhbGwgZGlyZWN0b3J5IGFyZ3VtZW50cyBmb3IgY29uc2lzdGVuY3kuCi1mb3IgYWNfdmFyIGluCWV4ZWNfcHJlZml4IHByZWZpeCBiaW5kaXIgc2JpbmRpciBsaWJleGVjZGlyIGRhdGFyb290ZGlyIFwKLQkJZGF0YWRpciBzeXNjb25mZGlyIHNoYXJlZHN0YXRlZGlyIGxvY2Fsc3RhdGVkaXIgaW5jbHVkZWRpciBcCi0JCW9sZGluY2x1ZGVkaXIgZG9jZGlyIGluZm9kaXIgaHRtbGRpciBkdmlkaXIgcGRmZGlyIHBzZGlyIFwKLQkJbGliZGlyIGxvY2FsZWRpciBtYW5kaXIKLWRvCi0gIGV2YWwgYWNfdmFsPVwkJGFjX3ZhcgotICAjIFJlbW92ZSB0cmFpbGluZyBzbGFzaGVzLgotICBjYXNlICRhY192YWwgaW4KLSAgICAqLyApCi0gICAgICBhY192YWw9YGV4cHIgIlgkYWNfdmFsIiA6ICdYXCguKlteL11cKScgXHwgIlgkYWNfdmFsIiA6ICdYXCguKlwpJ2AKLSAgICAgIGV2YWwgJGFjX3Zhcj1cJGFjX3ZhbDs7Ci0gIGVzYWMKLSAgIyBCZSBzdXJlIHRvIGhhdmUgYWJzb2x1dGUgZGlyZWN0b3J5IG5hbWVzLgotICBjYXNlICRhY192YWwgaW4KLSAgICBbXFwvJF0qIHwgPzpbXFwvXSogKSAgY29udGludWU7OwotICAgIE5PTkUgfCAnJyApIGNhc2UgJGFjX3ZhciBpbiAqcHJlZml4ICkgY29udGludWU7OyBlc2FjOzsKLSAgZXNhYwotICBhc19mbl9lcnJvciAkPyAiZXhwZWN0ZWQgYW4gYWJzb2x1dGUgZGlyZWN0b3J5IG5hbWUgZm9yIC0tJGFjX3ZhcjogJGFjX3ZhbCIKLWRvbmUKLQotIyBUaGVyZSBtaWdodCBiZSBwZW9wbGUgd2hvIGRlcGVuZCBvbiB0aGUgb2xkIGJyb2tlbiBiZWhhdmlvcjogYCRob3N0JwotIyB1c2VkIHRvIGhvbGQgdGhlIGFyZ3VtZW50IG9mIC0taG9zdCBldGMuCi0jIEZJWE1FOiBUbyByZW1vdmUgc29tZSBkYXkuCi1idWlsZD0kYnVpbGRfYWxpYXMKLWhvc3Q9JGhvc3RfYWxpYXMKLXRhcmdldD0kdGFyZ2V0X2FsaWFzCi0KLSMgRklYTUU6IFRvIHJlbW92ZSBzb21lIGRheS4KLWlmIHRlc3QgIngkaG9zdF9hbGlhcyIgIT0geDsgdGhlbgotICBpZiB0ZXN0ICJ4JGJ1aWxkX2FsaWFzIiA9IHg7IHRoZW4KLSAgICBjcm9zc19jb21waWxpbmc9bWF5YmUKLSAgICAkYXNfZWNobyAiJGFzX21lOiBXQVJOSU5HOiBpZiB5b3Ugd2FudGVkIHRvIHNldCB0aGUgLS1idWlsZCB0eXBlLCBkb24ndCB1c2UgLS1ob3N0LgotICAgIElmIGEgY3Jvc3MgY29tcGlsZXIgaXMgZGV0ZWN0ZWQgdGhlbiBjcm9zcyBjb21waWxlIG1vZGUgd2lsbCBiZSB1c2VkIiA+JjIKLSAgZWxpZiB0ZXN0ICJ4JGJ1aWxkX2FsaWFzIiAhPSAieCRob3N0X2FsaWFzIjsgdGhlbgotICAgIGNyb3NzX2NvbXBpbGluZz15ZXMKLSAgZmkKLWZpCi0KLWFjX3Rvb2xfcHJlZml4PQotdGVzdCAtbiAiJGhvc3RfYWxpYXMiICYmIGFjX3Rvb2xfcHJlZml4PSRob3N0X2FsaWFzLQotCi10ZXN0ICIkc2lsZW50IiA9IHllcyAmJiBleGVjIDY+L2Rldi9udWxsCi0KLQotYWNfcHdkPWBwd2RgICYmIHRlc3QgLW4gIiRhY19wd2QiICYmCi1hY19sc19kaT1gbHMgLWRpIC5gICYmCi1hY19wd2RfbHNfZGk9YGNkICIkYWNfcHdkIiAmJiBscyAtZGkgLmAgfHwKLSAgYXNfZm5fZXJyb3IgJD8gIndvcmtpbmcgZGlyZWN0b3J5IGNhbm5vdCBiZSBkZXRlcm1pbmVkIgotdGVzdCAiWCRhY19sc19kaSIgPSAiWCRhY19wd2RfbHNfZGkiIHx8Ci0gIGFzX2ZuX2Vycm9yICQ/ICJwd2QgZG9lcyBub3QgcmVwb3J0IG5hbWUgb2Ygd29ya2luZyBkaXJlY3RvcnkiCi0KLQotIyBGaW5kIHRoZSBzb3VyY2UgZmlsZXMsIGlmIGxvY2F0aW9uIHdhcyBub3Qgc3BlY2lmaWVkLgotaWYgdGVzdCAteiAiJHNyY2RpciI7IHRoZW4KLSAgYWNfc3JjZGlyX2RlZmF1bHRlZD15ZXMKLSAgIyBUcnkgdGhlIGRpcmVjdG9yeSBjb250YWluaW5nIHRoaXMgc2NyaXB0LCB0aGVuIHRoZSBwYXJlbnQgZGlyZWN0b3J5LgotICBhY19jb25mZGlyPWAkYXNfZGlybmFtZSAtLSAiJGFzX215c2VsZiIgfHwKLSRhc19leHByIFgiJGFzX215c2VsZiIgOiAnWFwoLipbXi9dXCkvLypbXi9dW14vXSovKiQnIFx8IFwKLQkgWCIkYXNfbXlzZWxmIiA6ICdYXCgvL1wpW14vXScgXHwgXAotCSBYIiRhc19teXNlbGYiIDogJ1hcKC8vXCkkJyBcfCBcCi0JIFgiJGFzX215c2VsZiIgOiAnWFwoL1wpJyBcfCAuIDI+L2Rldi9udWxsIHx8Ci0kYXNfZWNobyBYIiRhc19teXNlbGYiIHwKLSAgICBzZWQgJy9eWFwoLipbXi9dXClcL1wvKlteL11bXi9dKlwvKiQvewotCSAgICBzLy9cMS8KLQkgICAgcQotCSAgfQotCSAgL15YXChcL1wvXClbXi9dLiovewotCSAgICBzLy9cMS8KLQkgICAgcQotCSAgfQotCSAgL15YXChcL1wvXCkkL3sKLQkgICAgcy8vXDEvCi0JICAgIHEKLQkgIH0KLQkgIC9eWFwoXC9cKS4qL3sKLQkgICAgcy8vXDEvCi0JICAgIHEKLQkgIH0KLQkgIHMvLiovLi87IHEnYAotICBzcmNkaXI9JGFjX2NvbmZkaXIKLSAgaWYgdGVzdCAhIC1yICIkc3JjZGlyLyRhY191bmlxdWVfZmlsZSI7IHRoZW4KLSAgICBzcmNkaXI9Li4KLSAgZmkKLWVsc2UKLSAgYWNfc3JjZGlyX2RlZmF1bHRlZD1ubwotZmkKLWlmIHRlc3QgISAtciAiJHNyY2Rpci8kYWNfdW5pcXVlX2ZpbGUiOyB0aGVuCi0gIHRlc3QgIiRhY19zcmNkaXJfZGVmYXVsdGVkIiA9IHllcyAmJiBzcmNkaXI9IiRhY19jb25mZGlyIG9yIC4uIgotICBhc19mbl9lcnJvciAkPyAiY2Fubm90IGZpbmQgc291cmNlcyAoJGFjX3VuaXF1ZV9maWxlKSBpbiAkc3JjZGlyIgotZmkKLWFjX21zZz0ic291cmNlcyBhcmUgaW4gJHNyY2RpciwgYnV0IFxgY2QgJHNyY2RpcicgZG9lcyBub3Qgd29yayIKLWFjX2Fic19jb25mZGlyPWAoCi0JY2QgIiRzcmNkaXIiICYmIHRlc3QgLXIgIi4vJGFjX3VuaXF1ZV9maWxlIiB8fCBhc19mbl9lcnJvciAkPyAiJGFjX21zZyIKLQlwd2QpYAotIyBXaGVuIGJ1aWxkaW5nIGluIHBsYWNlLCBzZXQgc3JjZGlyPS4KLWlmIHRlc3QgIiRhY19hYnNfY29uZmRpciIgPSAiJGFjX3B3ZCI7IHRoZW4KLSAgc3JjZGlyPS4KLWZpCi0jIFJlbW92ZSB1bm5lY2Vzc2FyeSB0cmFpbGluZyBzbGFzaGVzIGZyb20gc3JjZGlyLgotIyBEb3VibGUgc2xhc2hlcyBpbiBmaWxlIG5hbWVzIGluIG9iamVjdCBmaWxlIGRlYnVnZ2luZyBpbmZvCi0jIG1lc3MgdXAgTS14IGdkYiBpbiBFbWFjcy4KLWNhc2UgJHNyY2RpciBpbgotKi8pIHNyY2Rpcj1gZXhwciAiWCRzcmNkaXIiIDogJ1hcKC4qW14vXVwpJyBcfCAiWCRzcmNkaXIiIDogJ1hcKC4qXCknYDs7Ci1lc2FjCi1mb3IgYWNfdmFyIGluICRhY19wcmVjaW91c192YXJzOyBkbwotICBldmFsIGFjX2Vudl8ke2FjX3Zhcn1fc2V0PVwkeyR7YWNfdmFyfStzZXR9Ci0gIGV2YWwgYWNfZW52XyR7YWNfdmFyfV92YWx1ZT1cJCR7YWNfdmFyfQotICBldmFsIGFjX2N2X2Vudl8ke2FjX3Zhcn1fc2V0PVwkeyR7YWNfdmFyfStzZXR9Ci0gIGV2YWwgYWNfY3ZfZW52XyR7YWNfdmFyfV92YWx1ZT1cJCR7YWNfdmFyfQotZG9uZQotCi0jCi0jIFJlcG9ydCB0aGUgLS1oZWxwIG1lc3NhZ2UuCi0jCi1pZiB0ZXN0ICIkYWNfaW5pdF9oZWxwIiA9ICJsb25nIjsgdGhlbgotICAjIE9taXQgc29tZSBpbnRlcm5hbCBvciBvYnNvbGV0ZSBvcHRpb25zIHRvIG1ha2UgdGhlIGxpc3QgbGVzcyBpbXBvc2luZy4KLSAgIyBUaGlzIG1lc3NhZ2UgaXMgdG9vIGxvbmcgdG8gYmUgYSBzdHJpbmcgaW4gdGhlIEEvVVggMy4xIHNoLgotICBjYXQgPDxfQUNFT0YKLVxgY29uZmlndXJlJyBjb25maWd1cmVzIGxpYmpwZWcgOC4zLjAgdG8gYWRhcHQgdG8gbWFueSBraW5kcyBvZiBzeXN0ZW1zLgotCi1Vc2FnZTogJDAgW09QVElPTl0uLi4gW1ZBUj1WQUxVRV0uLi4KLQotVG8gYXNzaWduIGVudmlyb25tZW50IHZhcmlhYmxlcyAoZS5nLiwgQ0MsIENGTEFHUy4uLiksIHNwZWNpZnkgdGhlbSBhcwotVkFSPVZBTFVFLiAgU2VlIGJlbG93IGZvciBkZXNjcmlwdGlvbnMgb2Ygc29tZSBvZiB0aGUgdXNlZnVsIHZhcmlhYmxlcy4KLQotRGVmYXVsdHMgZm9yIHRoZSBvcHRpb25zIGFyZSBzcGVjaWZpZWQgaW4gYnJhY2tldHMuCi0KLUNvbmZpZ3VyYXRpb246Ci0gIC1oLCAtLWhlbHAgICAgICAgICAgICAgIGRpc3BsYXkgdGhpcyBoZWxwIGFuZCBleGl0Ci0gICAgICAtLWhlbHA9c2hvcnQgICAgICAgIGRpc3BsYXkgb3B0aW9ucyBzcGVjaWZpYyB0byB0aGlzIHBhY2thZ2UKLSAgICAgIC0taGVscD1yZWN1cnNpdmUgICAgZGlzcGxheSB0aGUgc2hvcnQgaGVscCBvZiBhbGwgdGhlIGluY2x1ZGVkIHBhY2thZ2VzCi0gIC1WLCAtLXZlcnNpb24gICAgICAgICAgIGRpc3BsYXkgdmVyc2lvbiBpbmZvcm1hdGlvbiBhbmQgZXhpdAotICAtcSwgLS1xdWlldCwgLS1zaWxlbnQgICBkbyBub3QgcHJpbnQgXGBjaGVja2luZyAuLi4nIG1lc3NhZ2VzCi0gICAgICAtLWNhY2hlLWZpbGU9RklMRSAgIGNhY2hlIHRlc3QgcmVzdWx0cyBpbiBGSUxFIFtkaXNhYmxlZF0KLSAgLUMsIC0tY29uZmlnLWNhY2hlICAgICAgYWxpYXMgZm9yIFxgLS1jYWNoZS1maWxlPWNvbmZpZy5jYWNoZScKLSAgLW4sIC0tbm8tY3JlYXRlICAgICAgICAgZG8gbm90IGNyZWF0ZSBvdXRwdXQgZmlsZXMKLSAgICAgIC0tc3JjZGlyPURJUiAgICAgICAgZmluZCB0aGUgc291cmNlcyBpbiBESVIgW2NvbmZpZ3VyZSBkaXIgb3IgXGAuLiddCi0KLUluc3RhbGxhdGlvbiBkaXJlY3RvcmllczoKLSAgLS1wcmVmaXg9UFJFRklYICAgICAgICAgaW5zdGFsbCBhcmNoaXRlY3R1cmUtaW5kZXBlbmRlbnQgZmlsZXMgaW4gUFJFRklYCi0gICAgICAgICAgICAgICAgICAgICAgICAgIFskYWNfZGVmYXVsdF9wcmVmaXhdCi0gIC0tZXhlYy1wcmVmaXg9RVBSRUZJWCAgIGluc3RhbGwgYXJjaGl0ZWN0dXJlLWRlcGVuZGVudCBmaWxlcyBpbiBFUFJFRklYCi0gICAgICAgICAgICAgICAgICAgICAgICAgIFtQUkVGSVhdCi0KLUJ5IGRlZmF1bHQsIFxgbWFrZSBpbnN0YWxsJyB3aWxsIGluc3RhbGwgYWxsIHRoZSBmaWxlcyBpbgotXGAkYWNfZGVmYXVsdF9wcmVmaXgvYmluJywgXGAkYWNfZGVmYXVsdF9wcmVmaXgvbGliJyBldGMuICBZb3UgY2FuIHNwZWNpZnkKLWFuIGluc3RhbGxhdGlvbiBwcmVmaXggb3RoZXIgdGhhbiBcYCRhY19kZWZhdWx0X3ByZWZpeCcgdXNpbmcgXGAtLXByZWZpeCcsCi1mb3IgaW5zdGFuY2UgXGAtLXByZWZpeD1cJEhPTUUnLgotCi1Gb3IgYmV0dGVyIGNvbnRyb2wsIHVzZSB0aGUgb3B0aW9ucyBiZWxvdy4KLQotRmluZSB0dW5pbmcgb2YgdGhlIGluc3RhbGxhdGlvbiBkaXJlY3RvcmllczoKLSAgLS1iaW5kaXI9RElSICAgICAgICAgICAgdXNlciBleGVjdXRhYmxlcyBbRVBSRUZJWC9iaW5dCi0gIC0tc2JpbmRpcj1ESVIgICAgICAgICAgIHN5c3RlbSBhZG1pbiBleGVjdXRhYmxlcyBbRVBSRUZJWC9zYmluXQotICAtLWxpYmV4ZWNkaXI9RElSICAgICAgICBwcm9ncmFtIGV4ZWN1dGFibGVzIFtFUFJFRklYL2xpYmV4ZWNdCi0gIC0tc3lzY29uZmRpcj1ESVIgICAgICAgIHJlYWQtb25seSBzaW5nbGUtbWFjaGluZSBkYXRhIFtQUkVGSVgvZXRjXQotICAtLXNoYXJlZHN0YXRlZGlyPURJUiAgICBtb2RpZmlhYmxlIGFyY2hpdGVjdHVyZS1pbmRlcGVuZGVudCBkYXRhIFtQUkVGSVgvY29tXQotICAtLWxvY2Fsc3RhdGVkaXI9RElSICAgICBtb2RpZmlhYmxlIHNpbmdsZS1tYWNoaW5lIGRhdGEgW1BSRUZJWC92YXJdCi0gIC0tbGliZGlyPURJUiAgICAgICAgICAgIG9iamVjdCBjb2RlIGxpYnJhcmllcyBbRVBSRUZJWC9saWJdCi0gIC0taW5jbHVkZWRpcj1ESVIgICAgICAgIEMgaGVhZGVyIGZpbGVzIFtQUkVGSVgvaW5jbHVkZV0KLSAgLS1vbGRpbmNsdWRlZGlyPURJUiAgICAgQyBoZWFkZXIgZmlsZXMgZm9yIG5vbi1nY2MgWy91c3IvaW5jbHVkZV0KLSAgLS1kYXRhcm9vdGRpcj1ESVIgICAgICAgcmVhZC1vbmx5IGFyY2guLWluZGVwZW5kZW50IGRhdGEgcm9vdCBbUFJFRklYL3NoYXJlXQotICAtLWRhdGFkaXI9RElSICAgICAgICAgICByZWFkLW9ubHkgYXJjaGl0ZWN0dXJlLWluZGVwZW5kZW50IGRhdGEgW0RBVEFST09URElSXQotICAtLWluZm9kaXI9RElSICAgICAgICAgICBpbmZvIGRvY3VtZW50YXRpb24gW0RBVEFST09URElSL2luZm9dCi0gIC0tbG9jYWxlZGlyPURJUiAgICAgICAgIGxvY2FsZS1kZXBlbmRlbnQgZGF0YSBbREFUQVJPT1RESVIvbG9jYWxlXQotICAtLW1hbmRpcj1ESVIgICAgICAgICAgICBtYW4gZG9jdW1lbnRhdGlvbiBbREFUQVJPT1RESVIvbWFuXQotICAtLWRvY2Rpcj1ESVIgICAgICAgICAgICBkb2N1bWVudGF0aW9uIHJvb3QgW0RBVEFST09URElSL2RvYy9saWJqcGVnXQotICAtLWh0bWxkaXI9RElSICAgICAgICAgICBodG1sIGRvY3VtZW50YXRpb24gW0RPQ0RJUl0KLSAgLS1kdmlkaXI9RElSICAgICAgICAgICAgZHZpIGRvY3VtZW50YXRpb24gW0RPQ0RJUl0KLSAgLS1wZGZkaXI9RElSICAgICAgICAgICAgcGRmIGRvY3VtZW50YXRpb24gW0RPQ0RJUl0KLSAgLS1wc2Rpcj1ESVIgICAgICAgICAgICAgcHMgZG9jdW1lbnRhdGlvbiBbRE9DRElSXQotX0FDRU9GCi0KLSAgY2F0IDw8XF9BQ0VPRgotCi1Qcm9ncmFtIG5hbWVzOgotICAtLXByb2dyYW0tcHJlZml4PVBSRUZJWCAgICAgICAgICAgIHByZXBlbmQgUFJFRklYIHRvIGluc3RhbGxlZCBwcm9ncmFtIG5hbWVzCi0gIC0tcHJvZ3JhbS1zdWZmaXg9U1VGRklYICAgICAgICAgICAgYXBwZW5kIFNVRkZJWCB0byBpbnN0YWxsZWQgcHJvZ3JhbSBuYW1lcwotICAtLXByb2dyYW0tdHJhbnNmb3JtLW5hbWU9UFJPR1JBTSAgIHJ1biBzZWQgUFJPR1JBTSBvbiBpbnN0YWxsZWQgcHJvZ3JhbSBuYW1lcwotCi1TeXN0ZW0gdHlwZXM6Ci0gIC0tYnVpbGQ9QlVJTEQgICAgIGNvbmZpZ3VyZSBmb3IgYnVpbGRpbmcgb24gQlVJTEQgW2d1ZXNzZWRdCi0gIC0taG9zdD1IT1NUICAgICAgIGNyb3NzLWNvbXBpbGUgdG8gYnVpbGQgcHJvZ3JhbXMgdG8gcnVuIG9uIEhPU1QgW0JVSUxEXQotICAtLXRhcmdldD1UQVJHRVQgICBjb25maWd1cmUgZm9yIGJ1aWxkaW5nIGNvbXBpbGVycyBmb3IgVEFSR0VUIFtIT1NUXQotX0FDRU9GCi1maQotCi1pZiB0ZXN0IC1uICIkYWNfaW5pdF9oZWxwIjsgdGhlbgotICBjYXNlICRhY19pbml0X2hlbHAgaW4KLSAgICAgc2hvcnQgfCByZWN1cnNpdmUgKSBlY2hvICJDb25maWd1cmF0aW9uIG9mIGxpYmpwZWcgOC4zLjA6Ijs7Ci0gICBlc2FjCi0gIGNhdCA8PFxfQUNFT0YKLQotT3B0aW9uYWwgRmVhdHVyZXM6Ci0gIC0tZGlzYWJsZS1vcHRpb24tY2hlY2tpbmcgIGlnbm9yZSB1bnJlY29nbml6ZWQgLS1lbmFibGUvLS13aXRoIG9wdGlvbnMKLSAgLS1kaXNhYmxlLUZFQVRVUkUgICAgICAgZG8gbm90IGluY2x1ZGUgRkVBVFVSRSAoc2FtZSBhcyAtLWVuYWJsZS1GRUFUVVJFPW5vKQotICAtLWVuYWJsZS1GRUFUVVJFWz1BUkddICBpbmNsdWRlIEZFQVRVUkUgW0FSRz15ZXNdCi0gIC0tZW5hYmxlLXNpbGVudC1ydWxlcyAgICAgICAgICBsZXNzIHZlcmJvc2UgYnVpbGQgb3V0cHV0ICh1bmRvOiBgbWFrZSBWPTEnKQotICAtLWRpc2FibGUtc2lsZW50LXJ1bGVzICAgICAgICAgdmVyYm9zZSBidWlsZCBvdXRwdXQgKHVuZG86IGBtYWtlIFY9MCcpCi0gIC0tZGlzYWJsZS1kZXBlbmRlbmN5LXRyYWNraW5nICBzcGVlZHMgdXAgb25lLXRpbWUgYnVpbGQKLSAgLS1lbmFibGUtZGVwZW5kZW5jeS10cmFja2luZyAgIGRvIG5vdCByZWplY3Qgc2xvdyBkZXBlbmRlbmN5IGV4dHJhY3RvcnMKLSAgLS1lbmFibGUtbWFpbnRhaW5lci1tb2RlICBlbmFibGUgbWFrZSBydWxlcyBhbmQgZGVwZW5kZW5jaWVzIG5vdCB1c2VmdWwKLQkJCSAgKGFuZCBzb21ldGltZXMgY29uZnVzaW5nKSB0byB0aGUgY2FzdWFsIGluc3RhbGxlcgotICAtLWVuYWJsZS1sZC12ZXJzaW9uLXNjcmlwdAotICAgICAgICAgICAgICAgICAgICAgICAgICBlbmFibGUgbGlua2VyIHZlcnNpb24gc2NyaXB0IChkZWZhdWx0IGlzIGVuYWJsZWQKLSAgICAgICAgICAgICAgICAgICAgICAgICAgd2hlbiBwb3NzaWJsZSkKLSAgLS1lbmFibGUtc2hhcmVkWz1QS0dTXSAgYnVpbGQgc2hhcmVkIGxpYnJhcmllcyBbZGVmYXVsdD15ZXNdCi0gIC0tZW5hYmxlLXN0YXRpY1s9UEtHU10gIGJ1aWxkIHN0YXRpYyBsaWJyYXJpZXMgW2RlZmF1bHQ9eWVzXQotICAtLWVuYWJsZS1mYXN0LWluc3RhbGxbPVBLR1NdCi0gICAgICAgICAgICAgICAgICAgICAgICAgIG9wdGltaXplIGZvciBmYXN0IGluc3RhbGxhdGlvbiBbZGVmYXVsdD15ZXNdCi0gIC0tZGlzYWJsZS1saWJ0b29sLWxvY2sgIGF2b2lkIGxvY2tpbmcgKG1pZ2h0IGJyZWFrIHBhcmFsbGVsIGJ1aWxkcykKLSAgLS1lbmFibGUtbWF4bWVtPU4gICAgIGVuYWJsZSB1c2Ugb2YgdGVtcCBmaWxlcywgc2V0IG1heCBtZW0gdXNhZ2UgdG8gTiBNQgotCi1PcHRpb25hbCBQYWNrYWdlczoKLSAgLS13aXRoLVBBQ0tBR0VbPUFSR10gICAgdXNlIFBBQ0tBR0UgW0FSRz15ZXNdCi0gIC0td2l0aG91dC1QQUNLQUdFICAgICAgIGRvIG5vdCB1c2UgUEFDS0FHRSAoc2FtZSBhcyAtLXdpdGgtUEFDS0FHRT1ubykKLSAgLS13aXRoLXBpYyAgICAgICAgICAgICAgdHJ5IHRvIHVzZSBvbmx5IFBJQy9ub24tUElDIG9iamVjdHMgW2RlZmF1bHQ9dXNlCi0gICAgICAgICAgICAgICAgICAgICAgICAgIGJvdGhdCi0gIC0td2l0aC1nbnUtbGQgICAgICAgICAgIGFzc3VtZSB0aGUgQyBjb21waWxlciB1c2VzIEdOVSBsZCBbZGVmYXVsdD1ub10KLSAgLS13aXRoLXN5c3Jvb3Q9RElSIFNlYXJjaCBmb3IgZGVwZW5kZW50IGxpYnJhcmllcyB3aXRoaW4gRElSCi0gICAgICAgICAgICAgICAgICAgICAgICAob3IgdGhlIGNvbXBpbGVyJ3Mgc3lzcm9vdCBpZiBub3Qgc3BlY2lmaWVkKS4KLQotU29tZSBpbmZsdWVudGlhbCBlbnZpcm9ubWVudCB2YXJpYWJsZXM6Ci0gIENDICAgICAgICAgIEMgY29tcGlsZXIgY29tbWFuZAotICBDRkxBR1MgICAgICBDIGNvbXBpbGVyIGZsYWdzCi0gIExERkxBR1MgICAgIGxpbmtlciBmbGFncywgZS5nLiAtTDxsaWIgZGlyPiBpZiB5b3UgaGF2ZSBsaWJyYXJpZXMgaW4gYQotICAgICAgICAgICAgICBub25zdGFuZGFyZCBkaXJlY3RvcnkgPGxpYiBkaXI+Ci0gIExJQlMgICAgICAgIGxpYnJhcmllcyB0byBwYXNzIHRvIHRoZSBsaW5rZXIsIGUuZy4gLWw8bGlicmFyeT4KLSAgQ1BQRkxBR1MgICAgKE9iamVjdGl2ZSkgQy9DKysgcHJlcHJvY2Vzc29yIGZsYWdzLCBlLmcuIC1JPGluY2x1ZGUgZGlyPiBpZgotICAgICAgICAgICAgICB5b3UgaGF2ZSBoZWFkZXJzIGluIGEgbm9uc3RhbmRhcmQgZGlyZWN0b3J5IDxpbmNsdWRlIGRpcj4KLSAgQ1BQICAgICAgICAgQyBwcmVwcm9jZXNzb3IKLQotVXNlIHRoZXNlIHZhcmlhYmxlcyB0byBvdmVycmlkZSB0aGUgY2hvaWNlcyBtYWRlIGJ5IGBjb25maWd1cmUnIG9yIHRvIGhlbHAKLWl0IHRvIGZpbmQgbGlicmFyaWVzIGFuZCBwcm9ncmFtcyB3aXRoIG5vbnN0YW5kYXJkIG5hbWVzL2xvY2F0aW9ucy4KLQotUmVwb3J0IGJ1Z3MgdG8gdGhlIHBhY2thZ2UgcHJvdmlkZXIuCi1fQUNFT0YKLWFjX3N0YXR1cz0kPwotZmkKLQotaWYgdGVzdCAiJGFjX2luaXRfaGVscCIgPSAicmVjdXJzaXZlIjsgdGhlbgotICAjIElmIHRoZXJlIGFyZSBzdWJkaXJzLCByZXBvcnQgdGhlaXIgc3BlY2lmaWMgLS1oZWxwLgotICBmb3IgYWNfZGlyIGluIDogJGFjX3N1YmRpcnNfYWxsOyBkbyB0ZXN0ICJ4JGFjX2RpciIgPSB4OiAmJiBjb250aW51ZQotICAgIHRlc3QgLWQgIiRhY19kaXIiIHx8Ci0gICAgICB7IGNkICIkc3JjZGlyIiAmJiBhY19wd2Q9YHB3ZGAgJiYgc3JjZGlyPS4gJiYgdGVzdCAtZCAiJGFjX2RpciI7IH0gfHwKLSAgICAgIGNvbnRpbnVlCi0gICAgYWNfYnVpbGRkaXI9LgotCi1jYXNlICIkYWNfZGlyIiBpbgotLikgYWNfZGlyX3N1ZmZpeD0gYWNfdG9wX2J1aWxkZGlyX3N1Yj0uIGFjX3RvcF9idWlsZF9wcmVmaXg9IDs7Ci0qKQotICBhY19kaXJfc3VmZml4PS9gJGFzX2VjaG8gIiRhY19kaXIiIHwgc2VkICdzfF5cLltcXC9dfHwnYAotICAjIEEgIi4uIiBmb3IgZWFjaCBkaXJlY3RvcnkgaW4gJGFjX2Rpcl9zdWZmaXguCi0gIGFjX3RvcF9idWlsZGRpcl9zdWI9YCRhc19lY2hvICIkYWNfZGlyX3N1ZmZpeCIgfCBzZWQgJ3N8L1teXFwvXSp8Ly4ufGc7c3wvfHwnYAotICBjYXNlICRhY190b3BfYnVpbGRkaXJfc3ViIGluCi0gICIiKSBhY190b3BfYnVpbGRkaXJfc3ViPS4gYWNfdG9wX2J1aWxkX3ByZWZpeD0gOzsKLSAgKikgIGFjX3RvcF9idWlsZF9wcmVmaXg9JGFjX3RvcF9idWlsZGRpcl9zdWIvIDs7Ci0gIGVzYWMgOzsKLWVzYWMKLWFjX2Fic190b3BfYnVpbGRkaXI9JGFjX3B3ZAotYWNfYWJzX2J1aWxkZGlyPSRhY19wd2QkYWNfZGlyX3N1ZmZpeAotIyBmb3IgYmFja3dhcmQgY29tcGF0aWJpbGl0eToKLWFjX3RvcF9idWlsZGRpcj0kYWNfdG9wX2J1aWxkX3ByZWZpeAotCi1jYXNlICRzcmNkaXIgaW4KLSAgLikgICMgV2UgYXJlIGJ1aWxkaW5nIGluIHBsYWNlLgotICAgIGFjX3NyY2Rpcj0uCi0gICAgYWNfdG9wX3NyY2Rpcj0kYWNfdG9wX2J1aWxkZGlyX3N1YgotICAgIGFjX2Fic190b3Bfc3JjZGlyPSRhY19wd2QgOzsKLSAgW1xcL10qIHwgPzpbXFwvXSogKSAgIyBBYnNvbHV0ZSBuYW1lLgotICAgIGFjX3NyY2Rpcj0kc3JjZGlyJGFjX2Rpcl9zdWZmaXg7Ci0gICAgYWNfdG9wX3NyY2Rpcj0kc3JjZGlyCi0gICAgYWNfYWJzX3RvcF9zcmNkaXI9JHNyY2RpciA7OwotICAqKSAjIFJlbGF0aXZlIG5hbWUuCi0gICAgYWNfc3JjZGlyPSRhY190b3BfYnVpbGRfcHJlZml4JHNyY2RpciRhY19kaXJfc3VmZml4Ci0gICAgYWNfdG9wX3NyY2Rpcj0kYWNfdG9wX2J1aWxkX3ByZWZpeCRzcmNkaXIKLSAgICBhY19hYnNfdG9wX3NyY2Rpcj0kYWNfcHdkLyRzcmNkaXIgOzsKLWVzYWMKLWFjX2Fic19zcmNkaXI9JGFjX2Fic190b3Bfc3JjZGlyJGFjX2Rpcl9zdWZmaXgKLQotICAgIGNkICIkYWNfZGlyIiB8fCB7IGFjX3N0YXR1cz0kPzsgY29udGludWU7IH0KLSAgICAjIENoZWNrIGZvciBndWVzdGVkIGNvbmZpZ3VyZS4KLSAgICBpZiB0ZXN0IC1mICIkYWNfc3JjZGlyL2NvbmZpZ3VyZS5nbnUiOyB0aGVuCi0gICAgICBlY2hvICYmCi0gICAgICAkU0hFTEwgIiRhY19zcmNkaXIvY29uZmlndXJlLmdudSIgLS1oZWxwPXJlY3Vyc2l2ZQotICAgIGVsaWYgdGVzdCAtZiAiJGFjX3NyY2Rpci9jb25maWd1cmUiOyB0aGVuCi0gICAgICBlY2hvICYmCi0gICAgICAkU0hFTEwgIiRhY19zcmNkaXIvY29uZmlndXJlIiAtLWhlbHA9cmVjdXJzaXZlCi0gICAgZWxzZQotICAgICAgJGFzX2VjaG8gIiRhc19tZTogV0FSTklORzogbm8gY29uZmlndXJhdGlvbiBpbmZvcm1hdGlvbiBpcyBpbiAkYWNfZGlyIiA+JjIKLSAgICBmaSB8fCBhY19zdGF0dXM9JD8KLSAgICBjZCAiJGFjX3B3ZCIgfHwgeyBhY19zdGF0dXM9JD87IGJyZWFrOyB9Ci0gIGRvbmUKLWZpCi0KLXRlc3QgLW4gIiRhY19pbml0X2hlbHAiICYmIGV4aXQgJGFjX3N0YXR1cwotaWYgJGFjX2luaXRfdmVyc2lvbjsgdGhlbgotICBjYXQgPDxcX0FDRU9GCi1saWJqcGVnIGNvbmZpZ3VyZSA4LjMuMAotZ2VuZXJhdGVkIGJ5IEdOVSBBdXRvY29uZiAyLjY4Ci0KLUNvcHlyaWdodCAoQykgMjAxMCBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KLVRoaXMgY29uZmlndXJlIHNjcmlwdCBpcyBmcmVlIHNvZnR3YXJlOyB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uCi1naXZlcyB1bmxpbWl0ZWQgcGVybWlzc2lvbiB0byBjb3B5LCBkaXN0cmlidXRlIGFuZCBtb2RpZnkgaXQuCi1fQUNFT0YKLSAgZXhpdAotZmkKLQotIyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICMjCi0jIyBBdXRvY29uZiBpbml0aWFsaXphdGlvbi4gIyMKLSMjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAjIwotCi0jIGFjX2ZuX2NfdHJ5X2NvbXBpbGUgTElORU5PCi0jIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0jIFRyeSB0byBjb21waWxlIGNvbmZ0ZXN0LiRhY19leHQsIGFuZCByZXR1cm4gd2hldGhlciB0aGlzIHN1Y2NlZWRlZC4KLWFjX2ZuX2NfdHJ5X2NvbXBpbGUgKCkKLXsKLSAgYXNfbGluZW5vPSR7YXNfbGluZW5vLSIkMSJ9IGFzX2xpbmVub19zdGFjaz1hc19saW5lbm9fc3RhY2s9JGFzX2xpbmVub19zdGFjawotICBybSAtZiBjb25mdGVzdC4kYWNfb2JqZXh0Ci0gIGlmIHsgeyBhY190cnk9IiRhY19jb21waWxlIgotY2FzZSAiKCgkYWNfdHJ5IiBpbgotICAqXCIqIHwgKlxgKiB8ICpcXCopIGFjX3RyeV9lY2hvPVwkYWNfdHJ5OzsKLSAgKikgYWNfdHJ5X2VjaG89JGFjX3RyeTs7Ci1lc2FjCi1ldmFsIGFjX3RyeV9lY2hvPSJcIlwkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306ICRhY190cnlfZWNob1wiIgotJGFzX2VjaG8gIiRhY190cnlfZWNobyI7IH0gPiY1Ci0gIChldmFsICIkYWNfY29tcGlsZSIpIDI+Y29uZnRlc3QuZXJyCi0gIGFjX3N0YXR1cz0kPwotICBpZiB0ZXN0IC1zIGNvbmZ0ZXN0LmVycjsgdGhlbgotICAgIGdyZXAgLXYgJ14gKisnIGNvbmZ0ZXN0LmVyciA+Y29uZnRlc3QuZXIxCi0gICAgY2F0IGNvbmZ0ZXN0LmVyMSA+JjUKLSAgICBtdiAtZiBjb25mdGVzdC5lcjEgY29uZnRlc3QuZXJyCi0gIGZpCi0gICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IFwkPyA9ICRhY19zdGF0dXMiID4mNQotICB0ZXN0ICRhY19zdGF0dXMgPSAwOyB9ICYmIHsKLQkgdGVzdCAteiAiJGFjX2Nfd2Vycm9yX2ZsYWciIHx8Ci0JIHRlc3QgISAtcyBjb25mdGVzdC5lcnIKLSAgICAgICB9ICYmIHRlc3QgLXMgY29uZnRlc3QuJGFjX29iamV4dDsgdGhlbiA6Ci0gIGFjX3JldHZhbD0wCi1lbHNlCi0gICRhc19lY2hvICIkYXNfbWU6IGZhaWxlZCBwcm9ncmFtIHdhczoiID4mNQotc2VkICdzL14vfCAvJyBjb25mdGVzdC4kYWNfZXh0ID4mNQotCi0JYWNfcmV0dmFsPTEKLWZpCi0gIGV2YWwgJGFzX2xpbmVub19zdGFjazsgJHthc19saW5lbm9fc3RhY2s6Kzp9IHVuc2V0IGFzX2xpbmVubwotICBhc19mbl9zZXRfc3RhdHVzICRhY19yZXR2YWwKLQotfSAjIGFjX2ZuX2NfdHJ5X2NvbXBpbGUKLQotIyBhY19mbl9jX3RyeV9jcHAgTElORU5PCi0jIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSMgVHJ5IHRvIHByZXByb2Nlc3MgY29uZnRlc3QuJGFjX2V4dCwgYW5kIHJldHVybiB3aGV0aGVyIHRoaXMgc3VjY2VlZGVkLgotYWNfZm5fY190cnlfY3BwICgpCi17Ci0gIGFzX2xpbmVubz0ke2FzX2xpbmVuby0iJDEifSBhc19saW5lbm9fc3RhY2s9YXNfbGluZW5vX3N0YWNrPSRhc19saW5lbm9fc3RhY2sKLSAgaWYgeyB7IGFjX3RyeT0iJGFjX2NwcCBjb25mdGVzdC4kYWNfZXh0IgotY2FzZSAiKCgkYWNfdHJ5IiBpbgotICAqXCIqIHwgKlxgKiB8ICpcXCopIGFjX3RyeV9lY2hvPVwkYWNfdHJ5OzsKLSAgKikgYWNfdHJ5X2VjaG89JGFjX3RyeTs7Ci1lc2FjCi1ldmFsIGFjX3RyeV9lY2hvPSJcIlwkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306ICRhY190cnlfZWNob1wiIgotJGFzX2VjaG8gIiRhY190cnlfZWNobyI7IH0gPiY1Ci0gIChldmFsICIkYWNfY3BwIGNvbmZ0ZXN0LiRhY19leHQiKSAyPmNvbmZ0ZXN0LmVycgotICBhY19zdGF0dXM9JD8KLSAgaWYgdGVzdCAtcyBjb25mdGVzdC5lcnI7IHRoZW4KLSAgICBncmVwIC12ICdeICorJyBjb25mdGVzdC5lcnIgPmNvbmZ0ZXN0LmVyMQotICAgIGNhdCBjb25mdGVzdC5lcjEgPiY1Ci0gICAgbXYgLWYgY29uZnRlc3QuZXIxIGNvbmZ0ZXN0LmVycgotICBmaQotICAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKLSAgdGVzdCAkYWNfc3RhdHVzID0gMDsgfSA+IGNvbmZ0ZXN0LmkgJiYgewotCSB0ZXN0IC16ICIkYWNfY19wcmVwcm9jX3dhcm5fZmxhZyRhY19jX3dlcnJvcl9mbGFnIiB8fAotCSB0ZXN0ICEgLXMgY29uZnRlc3QuZXJyCi0gICAgICAgfTsgdGhlbiA6Ci0gIGFjX3JldHZhbD0wCi1lbHNlCi0gICRhc19lY2hvICIkYXNfbWU6IGZhaWxlZCBwcm9ncmFtIHdhczoiID4mNQotc2VkICdzL14vfCAvJyBjb25mdGVzdC4kYWNfZXh0ID4mNQotCi0gICAgYWNfcmV0dmFsPTEKLWZpCi0gIGV2YWwgJGFzX2xpbmVub19zdGFjazsgJHthc19saW5lbm9fc3RhY2s6Kzp9IHVuc2V0IGFzX2xpbmVubwotICBhc19mbl9zZXRfc3RhdHVzICRhY19yZXR2YWwKLQotfSAjIGFjX2ZuX2NfdHJ5X2NwcAotCi0jIGFjX2ZuX2NfdHJ5X3J1biBMSU5FTk8KLSMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotIyBUcnkgdG8gbGluayBjb25mdGVzdC4kYWNfZXh0LCBhbmQgcmV0dXJuIHdoZXRoZXIgdGhpcyBzdWNjZWVkZWQuIEFzc3VtZXMKLSMgdGhhdCBleGVjdXRhYmxlcyAqY2FuKiBiZSBydW4uCi1hY19mbl9jX3RyeV9ydW4gKCkKLXsKLSAgYXNfbGluZW5vPSR7YXNfbGluZW5vLSIkMSJ9IGFzX2xpbmVub19zdGFjaz1hc19saW5lbm9fc3RhY2s9JGFzX2xpbmVub19zdGFjawotICBpZiB7IHsgYWNfdHJ5PSIkYWNfbGluayIKLWNhc2UgIigoJGFjX3RyeSIgaW4KLSAgKlwiKiB8ICpcYCogfCAqXFwqKSBhY190cnlfZWNobz1cJGFjX3RyeTs7Ci0gICopIGFjX3RyeV9lY2hvPSRhY190cnk7OwotZXNhYwotZXZhbCBhY190cnlfZWNobz0iXCJcJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiAkYWNfdHJ5X2VjaG9cIiIKLSRhc19lY2hvICIkYWNfdHJ5X2VjaG8iOyB9ID4mNQotICAoZXZhbCAiJGFjX2xpbmsiKSAyPiY1Ci0gIGFjX3N0YXR1cz0kPwotICAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKLSAgdGVzdCAkYWNfc3RhdHVzID0gMDsgfSAmJiB7IGFjX3RyeT0nLi9jb25mdGVzdCRhY19leGVleHQnCi0gIHsgeyBjYXNlICIoKCRhY190cnkiIGluCi0gICpcIiogfCAqXGAqIHwgKlxcKikgYWNfdHJ5X2VjaG89XCRhY190cnk7OwotICAqKSBhY190cnlfZWNobz0kYWNfdHJ5OzsKLWVzYWMKLWV2YWwgYWNfdHJ5X2VjaG89IlwiXCRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogJGFjX3RyeV9lY2hvXCIiCi0kYXNfZWNobyAiJGFjX3RyeV9lY2hvIjsgfSA+JjUKLSAgKGV2YWwgIiRhY190cnkiKSAyPiY1Ci0gIGFjX3N0YXR1cz0kPwotICAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKLSAgdGVzdCAkYWNfc3RhdHVzID0gMDsgfTsgfTsgdGhlbiA6Ci0gIGFjX3JldHZhbD0wCi1lbHNlCi0gICRhc19lY2hvICIkYXNfbWU6IHByb2dyYW0gZXhpdGVkIHdpdGggc3RhdHVzICRhY19zdGF0dXMiID4mNQotICAgICAgICRhc19lY2hvICIkYXNfbWU6IGZhaWxlZCBwcm9ncmFtIHdhczoiID4mNQotc2VkICdzL14vfCAvJyBjb25mdGVzdC4kYWNfZXh0ID4mNQotCi0gICAgICAgYWNfcmV0dmFsPSRhY19zdGF0dXMKLWZpCi0gIHJtIC1yZiBjb25mdGVzdC5kU1lNIGNvbmZ0ZXN0X2lwYThfY29uZnRlc3Qub28KLSAgZXZhbCAkYXNfbGluZW5vX3N0YWNrOyAke2FzX2xpbmVub19zdGFjazorOn0gdW5zZXQgYXNfbGluZW5vCi0gIGFzX2ZuX3NldF9zdGF0dXMgJGFjX3JldHZhbAotCi19ICMgYWNfZm5fY190cnlfcnVuCi0KLSMgYWNfZm5fY19jaGVja19oZWFkZXJfbW9uZ3JlbCBMSU5FTk8gSEVBREVSIFZBUiBJTkNMVURFUwotIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0jIFRlc3RzIHdoZXRoZXIgSEVBREVSIGV4aXN0cywgZ2l2aW5nIGEgd2FybmluZyBpZiBpdCBjYW5ub3QgYmUgY29tcGlsZWQgdXNpbmcKLSMgdGhlIGluY2x1ZGUgZmlsZXMgaW4gSU5DTFVERVMgYW5kIHNldHRpbmcgdGhlIGNhY2hlIHZhcmlhYmxlIFZBUgotIyBhY2NvcmRpbmdseS4KLWFjX2ZuX2NfY2hlY2tfaGVhZGVyX21vbmdyZWwgKCkKLXsKLSAgYXNfbGluZW5vPSR7YXNfbGluZW5vLSIkMSJ9IGFzX2xpbmVub19zdGFjaz1hc19saW5lbm9fc3RhY2s9JGFzX2xpbmVub19zdGFjawotICBpZiBldmFsIFwkeyQzKzp9IGZhbHNlOyB0aGVuIDoKLSAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBmb3IgJDIiID4mNQotJGFzX2VjaG9fbiAiY2hlY2tpbmcgZm9yICQyLi4uICIgPiY2OyB9Ci1pZiBldmFsIFwkeyQzKzp9IGZhbHNlOyB0aGVuIDoKLSAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKLWZpCi1ldmFsIGFjX3Jlcz1cJCQzCi0JICAgICAgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkYWNfcmVzIiA+JjUKLSRhc19lY2hvICIkYWNfcmVzIiA+JjY7IH0KLWVsc2UKLSAgIyBJcyB0aGUgaGVhZGVyIGNvbXBpbGFibGU/Ci17ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nICQyIHVzYWJpbGl0eSIgPiY1Ci0kYXNfZWNob19uICJjaGVja2luZyAkMiB1c2FiaWxpdHkuLi4gIiA+JjY7IH0KLWNhdCBjb25mZGVmcy5oIC0gPDxfQUNFT0YgPmNvbmZ0ZXN0LiRhY19leHQKLS8qIGVuZCBjb25mZGVmcy5oLiAgKi8KLSQ0Ci0jaW5jbHVkZSA8JDI+Ci1fQUNFT0YKLWlmIGFjX2ZuX2NfdHJ5X2NvbXBpbGUgIiRMSU5FTk8iOyB0aGVuIDoKLSAgYWNfaGVhZGVyX2NvbXBpbGVyPXllcwotZWxzZQotICBhY19oZWFkZXJfY29tcGlsZXI9bm8KLWZpCi1ybSAtZiBjb3JlIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0LiRhY19leHQKLXsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkYWNfaGVhZGVyX2NvbXBpbGVyIiA+JjUKLSRhc19lY2hvICIkYWNfaGVhZGVyX2NvbXBpbGVyIiA+JjY7IH0KLQotIyBJcyB0aGUgaGVhZGVyIHByZXNlbnQ/Ci17ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nICQyIHByZXNlbmNlIiA+JjUKLSRhc19lY2hvX24gImNoZWNraW5nICQyIHByZXNlbmNlLi4uICIgPiY2OyB9Ci1jYXQgY29uZmRlZnMuaCAtIDw8X0FDRU9GID5jb25mdGVzdC4kYWNfZXh0Ci0vKiBlbmQgY29uZmRlZnMuaC4gICovCi0jaW5jbHVkZSA8JDI+Ci1fQUNFT0YKLWlmIGFjX2ZuX2NfdHJ5X2NwcCAiJExJTkVOTyI7IHRoZW4gOgotICBhY19oZWFkZXJfcHJlcHJvYz15ZXMKLWVsc2UKLSAgYWNfaGVhZGVyX3ByZXByb2M9bm8KLWZpCi1ybSAtZiBjb25mdGVzdC5lcnIgY29uZnRlc3QuaSBjb25mdGVzdC4kYWNfZXh0Ci17ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJGFjX2hlYWRlcl9wcmVwcm9jIiA+JjUKLSRhc19lY2hvICIkYWNfaGVhZGVyX3ByZXByb2MiID4mNjsgfQotCi0jIFNvPyAgV2hhdCBhYm91dCB0aGlzIGhlYWRlcj8KLWNhc2UgJGFjX2hlYWRlcl9jb21waWxlcjokYWNfaGVhZGVyX3ByZXByb2M6JGFjX2NfcHJlcHJvY193YXJuX2ZsYWcgaW4gIygoCi0gIHllczpubzogKQotICAgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogV0FSTklORzogJDI6IGFjY2VwdGVkIGJ5IHRoZSBjb21waWxlciwgcmVqZWN0ZWQgYnkgdGhlIHByZXByb2Nlc3NvciEiID4mNQotJGFzX2VjaG8gIiRhc19tZTogV0FSTklORzogJDI6IGFjY2VwdGVkIGJ5IHRoZSBjb21waWxlciwgcmVqZWN0ZWQgYnkgdGhlIHByZXByb2Nlc3NvciEiID4mMjt9Ci0gICAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBXQVJOSU5HOiAkMjogcHJvY2VlZGluZyB3aXRoIHRoZSBjb21waWxlcidzIHJlc3VsdCIgPiY1Ci0kYXNfZWNobyAiJGFzX21lOiBXQVJOSU5HOiAkMjogcHJvY2VlZGluZyB3aXRoIHRoZSBjb21waWxlcidzIHJlc3VsdCIgPiYyO30KLSAgICA7OwotICBubzp5ZXM6KiApCi0gICAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBXQVJOSU5HOiAkMjogcHJlc2VudCBidXQgY2Fubm90IGJlIGNvbXBpbGVkIiA+JjUKLSRhc19lY2hvICIkYXNfbWU6IFdBUk5JTkc6ICQyOiBwcmVzZW50IGJ1dCBjYW5ub3QgYmUgY29tcGlsZWQiID4mMjt9Ci0gICAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBXQVJOSU5HOiAkMjogICAgIGNoZWNrIGZvciBtaXNzaW5nIHByZXJlcXVpc2l0ZSBoZWFkZXJzPyIgPiY1Ci0kYXNfZWNobyAiJGFzX21lOiBXQVJOSU5HOiAkMjogICAgIGNoZWNrIGZvciBtaXNzaW5nIHByZXJlcXVpc2l0ZSBoZWFkZXJzPyIgPiYyO30KLSAgICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IFdBUk5JTkc6ICQyOiBzZWUgdGhlIEF1dG9jb25mIGRvY3VtZW50YXRpb24iID4mNQotJGFzX2VjaG8gIiRhc19tZTogV0FSTklORzogJDI6IHNlZSB0aGUgQXV0b2NvbmYgZG9jdW1lbnRhdGlvbiIgPiYyO30KLSAgICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IFdBUk5JTkc6ICQyOiAgICAgc2VjdGlvbiBcIlByZXNlbnQgQnV0IENhbm5vdCBCZSBDb21waWxlZFwiIiA+JjUKLSRhc19lY2hvICIkYXNfbWU6IFdBUk5JTkc6ICQyOiAgICAgc2VjdGlvbiBcIlByZXNlbnQgQnV0IENhbm5vdCBCZSBDb21waWxlZFwiIiA+JjI7fQotICAgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogV0FSTklORzogJDI6IHByb2NlZWRpbmcgd2l0aCB0aGUgY29tcGlsZXIncyByZXN1bHQiID4mNQotJGFzX2VjaG8gIiRhc19tZTogV0FSTklORzogJDI6IHByb2NlZWRpbmcgd2l0aCB0aGUgY29tcGlsZXIncyByZXN1bHQiID4mMjt9Ci0gICAgOzsKLWVzYWMKLSAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBmb3IgJDIiID4mNQotJGFzX2VjaG9fbiAiY2hlY2tpbmcgZm9yICQyLi4uICIgPiY2OyB9Ci1pZiBldmFsIFwkeyQzKzp9IGZhbHNlOyB0aGVuIDoKLSAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKLWVsc2UKLSAgZXZhbCAiJDM9XCRhY19oZWFkZXJfY29tcGlsZXIiCi1maQotZXZhbCBhY19yZXM9XCQkMwotCSAgICAgICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJGFjX3JlcyIgPiY1Ci0kYXNfZWNobyAiJGFjX3JlcyIgPiY2OyB9Ci1maQotICBldmFsICRhc19saW5lbm9fc3RhY2s7ICR7YXNfbGluZW5vX3N0YWNrOis6fSB1bnNldCBhc19saW5lbm8KLQotfSAjIGFjX2ZuX2NfY2hlY2tfaGVhZGVyX21vbmdyZWwKLQotIyBhY19mbl9jX2NoZWNrX2hlYWRlcl9jb21waWxlIExJTkVOTyBIRUFERVIgVkFSIElOQ0xVREVTCi0jIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSMgVGVzdHMgd2hldGhlciBIRUFERVIgZXhpc3RzIGFuZCBjYW4gYmUgY29tcGlsZWQgdXNpbmcgdGhlIGluY2x1ZGUgZmlsZXMgaW4KLSMgSU5DTFVERVMsIHNldHRpbmcgdGhlIGNhY2hlIHZhcmlhYmxlIFZBUiBhY2NvcmRpbmdseS4KLWFjX2ZuX2NfY2hlY2tfaGVhZGVyX2NvbXBpbGUgKCkKLXsKLSAgYXNfbGluZW5vPSR7YXNfbGluZW5vLSIkMSJ9IGFzX2xpbmVub19zdGFjaz1hc19saW5lbm9fc3RhY2s9JGFzX2xpbmVub19zdGFjawotICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGZvciAkMiIgPiY1Ci0kYXNfZWNob19uICJjaGVja2luZyBmb3IgJDIuLi4gIiA+JjY7IH0KLWlmIGV2YWwgXCR7JDMrOn0gZmFsc2U7IHRoZW4gOgotICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgotZWxzZQotICBjYXQgY29uZmRlZnMuaCAtIDw8X0FDRU9GID5jb25mdGVzdC4kYWNfZXh0Ci0vKiBlbmQgY29uZmRlZnMuaC4gICovCi0kNAotI2luY2x1ZGUgPCQyPgotX0FDRU9GCi1pZiBhY19mbl9jX3RyeV9jb21waWxlICIkTElORU5PIjsgdGhlbiA6Ci0gIGV2YWwgIiQzPXllcyIKLWVsc2UKLSAgZXZhbCAiJDM9bm8iCi1maQotcm0gLWYgY29yZSBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdC4kYWNfZXh0Ci1maQotZXZhbCBhY19yZXM9XCQkMwotCSAgICAgICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJGFjX3JlcyIgPiY1Ci0kYXNfZWNobyAiJGFjX3JlcyIgPiY2OyB9Ci0gIGV2YWwgJGFzX2xpbmVub19zdGFjazsgJHthc19saW5lbm9fc3RhY2s6Kzp9IHVuc2V0IGFzX2xpbmVubwotCi19ICMgYWNfZm5fY19jaGVja19oZWFkZXJfY29tcGlsZQotCi0jIGFjX2ZuX2NfdHJ5X2xpbmsgTElORU5PCi0jIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0jIFRyeSB0byBsaW5rIGNvbmZ0ZXN0LiRhY19leHQsIGFuZCByZXR1cm4gd2hldGhlciB0aGlzIHN1Y2NlZWRlZC4KLWFjX2ZuX2NfdHJ5X2xpbmsgKCkKLXsKLSAgYXNfbGluZW5vPSR7YXNfbGluZW5vLSIkMSJ9IGFzX2xpbmVub19zdGFjaz1hc19saW5lbm9fc3RhY2s9JGFzX2xpbmVub19zdGFjawotICBybSAtZiBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0JGFjX2V4ZWV4dAotICBpZiB7IHsgYWNfdHJ5PSIkYWNfbGluayIKLWNhc2UgIigoJGFjX3RyeSIgaW4KLSAgKlwiKiB8ICpcYCogfCAqXFwqKSBhY190cnlfZWNobz1cJGFjX3RyeTs7Ci0gICopIGFjX3RyeV9lY2hvPSRhY190cnk7OwotZXNhYwotZXZhbCBhY190cnlfZWNobz0iXCJcJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiAkYWNfdHJ5X2VjaG9cIiIKLSRhc19lY2hvICIkYWNfdHJ5X2VjaG8iOyB9ID4mNQotICAoZXZhbCAiJGFjX2xpbmsiKSAyPmNvbmZ0ZXN0LmVycgotICBhY19zdGF0dXM9JD8KLSAgaWYgdGVzdCAtcyBjb25mdGVzdC5lcnI7IHRoZW4KLSAgICBncmVwIC12ICdeICorJyBjb25mdGVzdC5lcnIgPmNvbmZ0ZXN0LmVyMQotICAgIGNhdCBjb25mdGVzdC5lcjEgPiY1Ci0gICAgbXYgLWYgY29uZnRlc3QuZXIxIGNvbmZ0ZXN0LmVycgotICBmaQotICAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKLSAgdGVzdCAkYWNfc3RhdHVzID0gMDsgfSAmJiB7Ci0JIHRlc3QgLXogIiRhY19jX3dlcnJvcl9mbGFnIiB8fAotCSB0ZXN0ICEgLXMgY29uZnRlc3QuZXJyCi0gICAgICAgfSAmJiB0ZXN0IC1zIGNvbmZ0ZXN0JGFjX2V4ZWV4dCAmJiB7Ci0JIHRlc3QgIiRjcm9zc19jb21waWxpbmciID0geWVzIHx8Ci0JICRhc190ZXN0X3ggY29uZnRlc3QkYWNfZXhlZXh0Ci0gICAgICAgfTsgdGhlbiA6Ci0gIGFjX3JldHZhbD0wCi1lbHNlCi0gICRhc19lY2hvICIkYXNfbWU6IGZhaWxlZCBwcm9ncmFtIHdhczoiID4mNQotc2VkICdzL14vfCAvJyBjb25mdGVzdC4kYWNfZXh0ID4mNQotCi0JYWNfcmV0dmFsPTEKLWZpCi0gICMgRGVsZXRlIHRoZSBJUEEvSVBPIChJbnRlciBQcm9jZWR1cmFsIEFuYWx5c2lzL09wdGltaXphdGlvbikgaW5mb3JtYXRpb24KLSAgIyBjcmVhdGVkIGJ5IHRoZSBQR0kgY29tcGlsZXIgKGNvbmZ0ZXN0X2lwYThfY29uZnRlc3Qub28pLCBhcyBpdCB3b3VsZAotICAjIGludGVyZmVyZSB3aXRoIHRoZSBuZXh0IGxpbmsgY29tbWFuZDsgYWxzbyBkZWxldGUgYSBkaXJlY3RvcnkgdGhhdCBpcwotICAjIGxlZnQgYmVoaW5kIGJ5IEFwcGxlJ3MgY29tcGlsZXIuICBXZSBkbyB0aGlzIGJlZm9yZSBleGVjdXRpbmcgdGhlIGFjdGlvbnMuCi0gIHJtIC1yZiBjb25mdGVzdC5kU1lNIGNvbmZ0ZXN0X2lwYThfY29uZnRlc3Qub28KLSAgZXZhbCAkYXNfbGluZW5vX3N0YWNrOyAke2FzX2xpbmVub19zdGFjazorOn0gdW5zZXQgYXNfbGluZW5vCi0gIGFzX2ZuX3NldF9zdGF0dXMgJGFjX3JldHZhbAotCi19ICMgYWNfZm5fY190cnlfbGluawotCi0jIGFjX2ZuX2NfY2hlY2tfZnVuYyBMSU5FTk8gRlVOQyBWQVIKLSMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotIyBUZXN0cyB3aGV0aGVyIEZVTkMgZXhpc3RzLCBzZXR0aW5nIHRoZSBjYWNoZSB2YXJpYWJsZSBWQVIgYWNjb3JkaW5nbHkKLWFjX2ZuX2NfY2hlY2tfZnVuYyAoKQotewotICBhc19saW5lbm89JHthc19saW5lbm8tIiQxIn0gYXNfbGluZW5vX3N0YWNrPWFzX2xpbmVub19zdGFjaz0kYXNfbGluZW5vX3N0YWNrCi0gIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgZm9yICQyIiA+JjUKLSRhc19lY2hvX24gImNoZWNraW5nIGZvciAkMi4uLiAiID4mNjsgfQotaWYgZXZhbCBcJHskMys6fSBmYWxzZTsgdGhlbiA6Ci0gICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2Ci1lbHNlCi0gIGNhdCBjb25mZGVmcy5oIC0gPDxfQUNFT0YgPmNvbmZ0ZXN0LiRhY19leHQKLS8qIGVuZCBjb25mZGVmcy5oLiAgKi8KLS8qIERlZmluZSAkMiB0byBhbiBpbm5vY3VvdXMgdmFyaWFudCwgaW4gY2FzZSA8bGltaXRzLmg+IGRlY2xhcmVzICQyLgotICAgRm9yIGV4YW1wbGUsIEhQLVVYIDExaSA8bGltaXRzLmg+IGRlY2xhcmVzIGdldHRpbWVvZmRheS4gICovCi0jZGVmaW5lICQyIGlubm9jdW91c18kMgotCi0vKiBTeXN0ZW0gaGVhZGVyIHRvIGRlZmluZSBfX3N0dWIgbWFjcm9zIGFuZCBob3BlZnVsbHkgZmV3IHByb3RvdHlwZXMsCi0gICAgd2hpY2ggY2FuIGNvbmZsaWN0IHdpdGggY2hhciAkMiAoKTsgYmVsb3cuCi0gICAgUHJlZmVyIDxsaW1pdHMuaD4gdG8gPGFzc2VydC5oPiBpZiBfX1NURENfXyBpcyBkZWZpbmVkLCBzaW5jZQotICAgIDxsaW1pdHMuaD4gZXhpc3RzIGV2ZW4gb24gZnJlZXN0YW5kaW5nIGNvbXBpbGVycy4gICovCi0KLSNpZmRlZiBfX1NURENfXwotIyBpbmNsdWRlIDxsaW1pdHMuaD4KLSNlbHNlCi0jIGluY2x1ZGUgPGFzc2VydC5oPgotI2VuZGlmCi0KLSN1bmRlZiAkMgotCi0vKiBPdmVycmlkZSBhbnkgR0NDIGludGVybmFsIHByb3RvdHlwZSB0byBhdm9pZCBhbiBlcnJvci4KLSAgIFVzZSBjaGFyIGJlY2F1c2UgaW50IG1pZ2h0IG1hdGNoIHRoZSByZXR1cm4gdHlwZSBvZiBhIEdDQwotICAgYnVpbHRpbiBhbmQgdGhlbiBpdHMgYXJndW1lbnQgcHJvdG90eXBlIHdvdWxkIHN0aWxsIGFwcGx5LiAgKi8KLSNpZmRlZiBfX2NwbHVzcGx1cwotZXh0ZXJuICJDIgotI2VuZGlmCi1jaGFyICQyICgpOwotLyogVGhlIEdOVSBDIGxpYnJhcnkgZGVmaW5lcyB0aGlzIGZvciBmdW5jdGlvbnMgd2hpY2ggaXQgaW1wbGVtZW50cwotICAgIHRvIGFsd2F5cyBmYWlsIHdpdGggRU5PU1lTLiAgU29tZSBmdW5jdGlvbnMgYXJlIGFjdHVhbGx5IG5hbWVkCi0gICAgc29tZXRoaW5nIHN0YXJ0aW5nIHdpdGggX18gYW5kIHRoZSBub3JtYWwgbmFtZSBpcyBhbiBhbGlhcy4gICovCi0jaWYgZGVmaW5lZCBfX3N0dWJfJDIgfHwgZGVmaW5lZCBfX3N0dWJfX18kMgotY2hva2UgbWUKLSNlbmRpZgotCi1pbnQKLW1haW4gKCkKLXsKLXJldHVybiAkMiAoKTsKLSAgOwotICByZXR1cm4gMDsKLX0KLV9BQ0VPRgotaWYgYWNfZm5fY190cnlfbGluayAiJExJTkVOTyI7IHRoZW4gOgotICBldmFsICIkMz15ZXMiCi1lbHNlCi0gIGV2YWwgIiQzPW5vIgotZmkKLXJtIC1mIGNvcmUgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgXAotICAgIGNvbmZ0ZXN0JGFjX2V4ZWV4dCBjb25mdGVzdC4kYWNfZXh0Ci1maQotZXZhbCBhY19yZXM9XCQkMwotCSAgICAgICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJGFjX3JlcyIgPiY1Ci0kYXNfZWNobyAiJGFjX3JlcyIgPiY2OyB9Ci0gIGV2YWwgJGFzX2xpbmVub19zdGFjazsgJHthc19saW5lbm9fc3RhY2s6Kzp9IHVuc2V0IGFzX2xpbmVubwotCi19ICMgYWNfZm5fY19jaGVja19mdW5jCi1jYXQgPmNvbmZpZy5sb2cgPDxfQUNFT0YKLVRoaXMgZmlsZSBjb250YWlucyBhbnkgbWVzc2FnZXMgcHJvZHVjZWQgYnkgY29tcGlsZXJzIHdoaWxlCi1ydW5uaW5nIGNvbmZpZ3VyZSwgdG8gYWlkIGRlYnVnZ2luZyBpZiBjb25maWd1cmUgbWFrZXMgYSBtaXN0YWtlLgotCi1JdCB3YXMgY3JlYXRlZCBieSBsaWJqcGVnICRhc19tZSA4LjMuMCwgd2hpY2ggd2FzCi1nZW5lcmF0ZWQgYnkgR05VIEF1dG9jb25mIDIuNjguICBJbnZvY2F0aW9uIGNvbW1hbmQgbGluZSB3YXMKLQotICAkICQwICRACi0KLV9BQ0VPRgotZXhlYyA1Pj5jb25maWcubG9nCi17Ci1jYXQgPDxfQVNVTkFNRQotIyMgLS0tLS0tLS0tICMjCi0jIyBQbGF0Zm9ybS4gIyMKLSMjIC0tLS0tLS0tLSAjIwotCi1ob3N0bmFtZSA9IGAoaG9zdG5hbWUgfHwgdW5hbWUgLW4pIDI+L2Rldi9udWxsIHwgc2VkIDFxYAotdW5hbWUgLW0gPSBgKHVuYW1lIC1tKSAyPi9kZXYvbnVsbCB8fCBlY2hvIHVua25vd25gCi11bmFtZSAtciA9IGAodW5hbWUgLXIpIDI+L2Rldi9udWxsIHx8IGVjaG8gdW5rbm93bmAKLXVuYW1lIC1zID0gYCh1bmFtZSAtcykgMj4vZGV2L251bGwgfHwgZWNobyB1bmtub3duYAotdW5hbWUgLXYgPSBgKHVuYW1lIC12KSAyPi9kZXYvbnVsbCB8fCBlY2hvIHVua25vd25gCi0KLS91c3IvYmluL3VuYW1lIC1wID0gYCgvdXNyL2Jpbi91bmFtZSAtcCkgMj4vZGV2L251bGwgfHwgZWNobyB1bmtub3duYAotL2Jpbi91bmFtZSAtWCAgICAgPSBgKC9iaW4vdW5hbWUgLVgpIDI+L2Rldi9udWxsICAgICB8fCBlY2hvIHVua25vd25gCi0KLS9iaW4vYXJjaCAgICAgICAgICAgICAgPSBgKC9iaW4vYXJjaCkgMj4vZGV2L251bGwgICAgICAgICAgICAgIHx8IGVjaG8gdW5rbm93bmAKLS91c3IvYmluL2FyY2ggLWsgICAgICAgPSBgKC91c3IvYmluL2FyY2ggLWspIDI+L2Rldi9udWxsICAgICAgIHx8IGVjaG8gdW5rbm93bmAKLS91c3IvY29udmV4L2dldHN5c2luZm8gPSBgKC91c3IvY29udmV4L2dldHN5c2luZm8pIDI+L2Rldi9udWxsIHx8IGVjaG8gdW5rbm93bmAKLS91c3IvYmluL2hvc3RpbmZvICAgICAgPSBgKC91c3IvYmluL2hvc3RpbmZvKSAyPi9kZXYvbnVsbCAgICAgIHx8IGVjaG8gdW5rbm93bmAKLS9iaW4vbWFjaGluZSAgICAgICAgICAgPSBgKC9iaW4vbWFjaGluZSkgMj4vZGV2L251bGwgICAgICAgICAgIHx8IGVjaG8gdW5rbm93bmAKLS91c3IvYmluL29zbGV2ZWwgICAgICAgPSBgKC91c3IvYmluL29zbGV2ZWwpIDI+L2Rldi9udWxsICAgICAgIHx8IGVjaG8gdW5rbm93bmAKLS9iaW4vdW5pdmVyc2UgICAgICAgICAgPSBgKC9iaW4vdW5pdmVyc2UpIDI+L2Rldi9udWxsICAgICAgICAgIHx8IGVjaG8gdW5rbm93bmAKLQotX0FTVU5BTUUKLQotYXNfc2F2ZV9JRlM9JElGUzsgSUZTPSRQQVRIX1NFUEFSQVRPUgotZm9yIGFzX2RpciBpbiAkUEFUSAotZG8KLSAgSUZTPSRhc19zYXZlX0lGUwotICB0ZXN0IC16ICIkYXNfZGlyIiAmJiBhc19kaXI9LgotICAgICRhc19lY2hvICJQQVRIOiAkYXNfZGlyIgotICBkb25lCi1JRlM9JGFzX3NhdmVfSUZTCi0KLX0gPiY1Ci0KLWNhdCA+JjUgPDxfQUNFT0YKLQotCi0jIyAtLS0tLS0tLS0tLSAjIwotIyMgQ29yZSB0ZXN0cy4gIyMKLSMjIC0tLS0tLS0tLS0tICMjCi0KLV9BQ0VPRgotCi0KLSMgS2VlcCBhIHRyYWNlIG9mIHRoZSBjb21tYW5kIGxpbmUuCi0jIFN0cmlwIG91dCAtLW5vLWNyZWF0ZSBhbmQgLS1uby1yZWN1cnNpb24gc28gdGhleSBkbyBub3QgcGlsZSB1cC4KLSMgU3RyaXAgb3V0IC0tc2lsZW50IGJlY2F1c2Ugd2UgZG9uJ3Qgd2FudCB0byByZWNvcmQgaXQgZm9yIGZ1dHVyZSBydW5zLgotIyBBbHNvIHF1b3RlIGFueSBhcmdzIGNvbnRhaW5pbmcgc2hlbGwgbWV0YS1jaGFyYWN0ZXJzLgotIyBNYWtlIHR3byBwYXNzZXMgdG8gYWxsb3cgZm9yIHByb3BlciBkdXBsaWNhdGUtYXJndW1lbnQgc3VwcHJlc3Npb24uCi1hY19jb25maWd1cmVfYXJncz0KLWFjX2NvbmZpZ3VyZV9hcmdzMD0KLWFjX2NvbmZpZ3VyZV9hcmdzMT0KLWFjX211c3Rfa2VlcF9uZXh0PWZhbHNlCi1mb3IgYWNfcGFzcyBpbiAxIDIKLWRvCi0gIGZvciBhY19hcmcKLSAgZG8KLSAgICBjYXNlICRhY19hcmcgaW4KLSAgICAtbm8tY3JlYXRlIHwgLS1uby1jKiB8IC1uIHwgLW5vLXJlY3Vyc2lvbiB8IC0tbm8tciopIGNvbnRpbnVlIDs7Ci0gICAgLXEgfCAtcXVpZXQgfCAtLXF1aWV0IHwgLS1xdWllIHwgLS1xdWkgfCAtLXF1IHwgLS1xIFwKLSAgICB8IC1zaWxlbnQgfCAtLXNpbGVudCB8IC0tc2lsZW4gfCAtLXNpbGUgfCAtLXNpbCkKLSAgICAgIGNvbnRpbnVlIDs7Ci0gICAgKlwnKikKLSAgICAgIGFjX2FyZz1gJGFzX2VjaG8gIiRhY19hcmciIHwgc2VkICJzLycvJ1xcXFxcXFxcJycvZyJgIDs7Ci0gICAgZXNhYwotICAgIGNhc2UgJGFjX3Bhc3MgaW4KLSAgICAxKSBhc19mbl9hcHBlbmQgYWNfY29uZmlndXJlX2FyZ3MwICIgJyRhY19hcmcnIiA7OwotICAgIDIpCi0gICAgICBhc19mbl9hcHBlbmQgYWNfY29uZmlndXJlX2FyZ3MxICIgJyRhY19hcmcnIgotICAgICAgaWYgdGVzdCAkYWNfbXVzdF9rZWVwX25leHQgPSB0cnVlOyB0aGVuCi0JYWNfbXVzdF9rZWVwX25leHQ9ZmFsc2UgIyBHb3QgdmFsdWUsIGJhY2sgdG8gbm9ybWFsLgotICAgICAgZWxzZQotCWNhc2UgJGFjX2FyZyBpbgotCSAgKj0qIHwgLS1jb25maWctY2FjaGUgfCAtQyB8IC1kaXNhYmxlLSogfCAtLWRpc2FibGUtKiBcCi0JICB8IC1lbmFibGUtKiB8IC0tZW5hYmxlLSogfCAtZ2FzIHwgLS1nKiB8IC1uZnAgfCAtLW5mKiBcCi0JICB8IC1xIHwgLXF1aWV0IHwgLS1xKiB8IC1zaWxlbnQgfCAtLXNpbCogfCAtdiB8IC12ZXJiKiBcCi0JICB8IC13aXRoLSogfCAtLXdpdGgtKiB8IC13aXRob3V0LSogfCAtLXdpdGhvdXQtKiB8IC0teCkKLQkgICAgY2FzZSAiJGFjX2NvbmZpZ3VyZV9hcmdzMCAiIGluCi0JICAgICAgIiRhY19jb25maWd1cmVfYXJnczEiKiIgJyRhY19hcmcnICIqICkgY29udGludWUgOzsKLQkgICAgZXNhYwotCSAgICA7OwotCSAgLSogKSBhY19tdXN0X2tlZXBfbmV4dD10cnVlIDs7Ci0JZXNhYwotICAgICAgZmkKLSAgICAgIGFzX2ZuX2FwcGVuZCBhY19jb25maWd1cmVfYXJncyAiICckYWNfYXJnJyIKLSAgICAgIDs7Ci0gICAgZXNhYwotICBkb25lCi1kb25lCi17IGFjX2NvbmZpZ3VyZV9hcmdzMD07IHVuc2V0IGFjX2NvbmZpZ3VyZV9hcmdzMDt9Ci17IGFjX2NvbmZpZ3VyZV9hcmdzMT07IHVuc2V0IGFjX2NvbmZpZ3VyZV9hcmdzMTt9Ci0KLSMgV2hlbiBpbnRlcnJ1cHRlZCBvciBleGl0J2QsIGNsZWFudXAgdGVtcG9yYXJ5IGZpbGVzLCBhbmQgY29tcGxldGUKLSMgY29uZmlnLmxvZy4gIFdlIHJlbW92ZSBjb21tZW50cyBiZWNhdXNlIGFueXdheSB0aGUgcXVvdGVzIGluIHRoZXJlCi0jIHdvdWxkIGNhdXNlIHByb2JsZW1zIG9yIGxvb2sgdWdseS4KLSMgV0FSTklORzogVXNlICdcJycgdG8gcmVwcmVzZW50IGFuIGFwb3N0cm9waGUgd2l0aGluIHRoZSB0cmFwLgotIyBXQVJOSU5HOiBEbyBub3Qgc3RhcnQgdGhlIHRyYXAgY29kZSB3aXRoIGEgbmV3bGluZSwgZHVlIHRvIGEgRnJlZUJTRCA0LjAgYnVnLgotdHJhcCAnZXhpdF9zdGF0dXM9JD8KLSAgIyBTYXZlIGludG8gY29uZmlnLmxvZyBzb21lIGluZm9ybWF0aW9uIHRoYXQgbWlnaHQgaGVscCBpbiBkZWJ1Z2dpbmcuCi0gIHsKLSAgICBlY2hvCi0KLSAgICAkYXNfZWNobyAiIyMgLS0tLS0tLS0tLS0tLS0tLSAjIwotIyMgQ2FjaGUgdmFyaWFibGVzLiAjIwotIyMgLS0tLS0tLS0tLS0tLS0tLSAjIyIKLSAgICBlY2hvCi0gICAgIyBUaGUgZm9sbG93aW5nIHdheSBvZiB3cml0aW5nIHRoZSBjYWNoZSBtaXNoYW5kbGVzIG5ld2xpbmVzIGluIHZhbHVlcywKLSgKLSAgZm9yIGFjX3ZhciBpbiBgKHNldCkgMj4mMSB8IHNlZCAtbiAnXCcncy9eXChbYS16QS1aX11bYS16QS1aMC05X10qXCk9LiovXDEvcCdcJydgOyBkbwotICAgIGV2YWwgYWNfdmFsPVwkJGFjX3ZhcgotICAgIGNhc2UgJGFjX3ZhbCBpbiAjKAotICAgICoke2FzX25sfSopCi0gICAgICBjYXNlICRhY192YXIgaW4gIygKLSAgICAgICpfY3ZfKikgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBXQVJOSU5HOiBjYWNoZSB2YXJpYWJsZSAkYWNfdmFyIGNvbnRhaW5zIGEgbmV3bGluZSIgPiY1Ci0kYXNfZWNobyAiJGFzX21lOiBXQVJOSU5HOiBjYWNoZSB2YXJpYWJsZSAkYWNfdmFyIGNvbnRhaW5zIGEgbmV3bGluZSIgPiYyO30gOzsKLSAgICAgIGVzYWMKLSAgICAgIGNhc2UgJGFjX3ZhciBpbiAjKAotICAgICAgXyB8IElGUyB8IGFzX25sKSA7OyAjKAotICAgICAgQkFTSF9BUkdWIHwgQkFTSF9TT1VSQ0UpIGV2YWwgJGFjX3Zhcj0gOzsgIygKLSAgICAgICopIHsgZXZhbCAkYWNfdmFyPTsgdW5zZXQgJGFjX3Zhcjt9IDs7Ci0gICAgICBlc2FjIDs7Ci0gICAgZXNhYwotICBkb25lCi0gIChzZXQpIDI+JjEgfAotICAgIGNhc2UgJGFzX25sYChhY19zcGFjZT0nXCcnICdcJyc7IHNldCkgMj4mMWAgaW4gIygKLSAgICAqJHthc19ubH1hY19zcGFjZT1cICopCi0gICAgICBzZWQgLW4gXAotCSJzLydcJycvJ1wnJ1xcXFwnXCcnJ1wnJy9nOwotCSAgcy9eXFwoW18kYXNfY3JfYWxudW1dKl9jdl9bXyRhc19jcl9hbG51bV0qXFwpPVxcKC4qXFwpL1xcMT0nXCcnXFwyJ1wnJy9wIgotICAgICAgOzsgIygKLSAgICAqKQotICAgICAgc2VkIC1uICIvXltfJGFzX2NyX2FsbnVtXSpfY3ZfW18kYXNfY3JfYWxudW1dKj0vcCIKLSAgICAgIDs7Ci0gICAgZXNhYyB8Ci0gICAgc29ydAotKQotICAgIGVjaG8KLQotICAgICRhc19lY2hvICIjIyAtLS0tLS0tLS0tLS0tLS0tLSAjIwotIyMgT3V0cHV0IHZhcmlhYmxlcy4gIyMKLSMjIC0tLS0tLS0tLS0tLS0tLS0tICMjIgotICAgIGVjaG8KLSAgICBmb3IgYWNfdmFyIGluICRhY19zdWJzdF92YXJzCi0gICAgZG8KLSAgICAgIGV2YWwgYWNfdmFsPVwkJGFjX3ZhcgotICAgICAgY2FzZSAkYWNfdmFsIGluCi0gICAgICAqXCdcJycqKSBhY192YWw9YCRhc19lY2hvICIkYWNfdmFsIiB8IHNlZCAicy8nXCcnLydcJydcXFxcXFxcXCdcJycnXCcnL2ciYDs7Ci0gICAgICBlc2FjCi0gICAgICAkYXNfZWNobyAiJGFjX3Zhcj0nXCcnJGFjX3ZhbCdcJyciCi0gICAgZG9uZSB8IHNvcnQKLSAgICBlY2hvCi0KLSAgICBpZiB0ZXN0IC1uICIkYWNfc3Vic3RfZmlsZXMiOyB0aGVuCi0gICAgICAkYXNfZWNobyAiIyMgLS0tLS0tLS0tLS0tLS0tLS0tLSAjIwotIyMgRmlsZSBzdWJzdGl0dXRpb25zLiAjIwotIyMgLS0tLS0tLS0tLS0tLS0tLS0tLSAjIyIKLSAgICAgIGVjaG8KLSAgICAgIGZvciBhY192YXIgaW4gJGFjX3N1YnN0X2ZpbGVzCi0gICAgICBkbwotCWV2YWwgYWNfdmFsPVwkJGFjX3ZhcgotCWNhc2UgJGFjX3ZhbCBpbgotCSpcJ1wnJyopIGFjX3ZhbD1gJGFzX2VjaG8gIiRhY192YWwiIHwgc2VkICJzLydcJycvJ1wnJ1xcXFxcXFxcJ1wnJydcJycvZyJgOzsKLQllc2FjCi0JJGFzX2VjaG8gIiRhY192YXI9J1wnJyRhY192YWwnXCcnIgotICAgICAgZG9uZSB8IHNvcnQKLSAgICAgIGVjaG8KLSAgICBmaQotCi0gICAgaWYgdGVzdCAtcyBjb25mZGVmcy5oOyB0aGVuCi0gICAgICAkYXNfZWNobyAiIyMgLS0tLS0tLS0tLS0gIyMKLSMjIGNvbmZkZWZzLmguICMjCi0jIyAtLS0tLS0tLS0tLSAjIyIKLSAgICAgIGVjaG8KLSAgICAgIGNhdCBjb25mZGVmcy5oCi0gICAgICBlY2hvCi0gICAgZmkKLSAgICB0ZXN0ICIkYWNfc2lnbmFsIiAhPSAwICYmCi0gICAgICAkYXNfZWNobyAiJGFzX21lOiBjYXVnaHQgc2lnbmFsICRhY19zaWduYWwiCi0gICAgJGFzX2VjaG8gIiRhc19tZTogZXhpdCAkZXhpdF9zdGF0dXMiCi0gIH0gPiY1Ci0gIHJtIC1mIGNvcmUgKi5jb3JlIGNvcmUuY29uZnRlc3QuKiAmJgotICAgIHJtIC1mIC1yIGNvbmZ0ZXN0KiBjb25mZGVmcyogY29uZiQkKiAkYWNfY2xlYW5fZmlsZXMgJiYKLSAgICBleGl0ICRleGl0X3N0YXR1cwotJyAwCi1mb3IgYWNfc2lnbmFsIGluIDEgMiAxMyAxNTsgZG8KLSAgdHJhcCAnYWNfc2lnbmFsPSckYWNfc2lnbmFsJzsgYXNfZm5fZXhpdCAxJyAkYWNfc2lnbmFsCi1kb25lCi1hY19zaWduYWw9MAotCi0jIGNvbmZkZWZzLmggYXZvaWRzIE9TIGNvbW1hbmQgbGluZSBsZW5ndGggbGltaXRzIHRoYXQgREVGUyBjYW4gZXhjZWVkLgotcm0gLWYgLXIgY29uZnRlc3QqIGNvbmZkZWZzLmgKLQotJGFzX2VjaG8gIi8qIGNvbmZkZWZzLmggKi8iID4gY29uZmRlZnMuaAotCi0jIFByZWRlZmluZWQgcHJlcHJvY2Vzc29yIHZhcmlhYmxlcy4KLQotY2F0ID4+Y29uZmRlZnMuaCA8PF9BQ0VPRgotI2RlZmluZSBQQUNLQUdFX05BTUUgIiRQQUNLQUdFX05BTUUiCi1fQUNFT0YKLQotY2F0ID4+Y29uZmRlZnMuaCA8PF9BQ0VPRgotI2RlZmluZSBQQUNLQUdFX1RBUk5BTUUgIiRQQUNLQUdFX1RBUk5BTUUiCi1fQUNFT0YKLQotY2F0ID4+Y29uZmRlZnMuaCA8PF9BQ0VPRgotI2RlZmluZSBQQUNLQUdFX1ZFUlNJT04gIiRQQUNLQUdFX1ZFUlNJT04iCi1fQUNFT0YKLQotY2F0ID4+Y29uZmRlZnMuaCA8PF9BQ0VPRgotI2RlZmluZSBQQUNLQUdFX1NUUklORyAiJFBBQ0tBR0VfU1RSSU5HIgotX0FDRU9GCi0KLWNhdCA+PmNvbmZkZWZzLmggPDxfQUNFT0YKLSNkZWZpbmUgUEFDS0FHRV9CVUdSRVBPUlQgIiRQQUNLQUdFX0JVR1JFUE9SVCIKLV9BQ0VPRgotCi1jYXQgPj5jb25mZGVmcy5oIDw8X0FDRU9GCi0jZGVmaW5lIFBBQ0tBR0VfVVJMICIkUEFDS0FHRV9VUkwiCi1fQUNFT0YKLQotCi0jIExldCB0aGUgc2l0ZSBmaWxlIHNlbGVjdCBhbiBhbHRlcm5hdGUgY2FjaGUgZmlsZSBpZiBpdCB3YW50cyB0by4KLSMgUHJlZmVyIGFuIGV4cGxpY2l0bHkgc2VsZWN0ZWQgZmlsZSB0byBhdXRvbWF0aWNhbGx5IHNlbGVjdGVkIG9uZXMuCi1hY19zaXRlX2ZpbGUxPU5PTkUKLWFjX3NpdGVfZmlsZTI9Tk9ORQotaWYgdGVzdCAtbiAiJENPTkZJR19TSVRFIjsgdGhlbgotICAjIFdlIGRvIG5vdCB3YW50IGEgUEFUSCBzZWFyY2ggZm9yIGNvbmZpZy5zaXRlLgotICBjYXNlICRDT05GSUdfU0lURSBpbiAjKCgKLSAgICAtKikgIGFjX3NpdGVfZmlsZTE9Li8kQ09ORklHX1NJVEU7OwotICAgICovKikgYWNfc2l0ZV9maWxlMT0kQ09ORklHX1NJVEU7OwotICAgICopICAgYWNfc2l0ZV9maWxlMT0uLyRDT05GSUdfU0lURTs7Ci0gIGVzYWMKLWVsaWYgdGVzdCAieCRwcmVmaXgiICE9IHhOT05FOyB0aGVuCi0gIGFjX3NpdGVfZmlsZTE9JHByZWZpeC9zaGFyZS9jb25maWcuc2l0ZQotICBhY19zaXRlX2ZpbGUyPSRwcmVmaXgvZXRjL2NvbmZpZy5zaXRlCi1lbHNlCi0gIGFjX3NpdGVfZmlsZTE9JGFjX2RlZmF1bHRfcHJlZml4L3NoYXJlL2NvbmZpZy5zaXRlCi0gIGFjX3NpdGVfZmlsZTI9JGFjX2RlZmF1bHRfcHJlZml4L2V0Yy9jb25maWcuc2l0ZQotZmkKLWZvciBhY19zaXRlX2ZpbGUgaW4gIiRhY19zaXRlX2ZpbGUxIiAiJGFjX3NpdGVfZmlsZTIiCi1kbwotICB0ZXN0ICJ4JGFjX3NpdGVfZmlsZSIgPSB4Tk9ORSAmJiBjb250aW51ZQotICBpZiB0ZXN0IC9kZXYvbnVsbCAhPSAiJGFjX3NpdGVfZmlsZSIgJiYgdGVzdCAtciAiJGFjX3NpdGVfZmlsZSI7IHRoZW4KLSAgICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGxvYWRpbmcgc2l0ZSBzY3JpcHQgJGFjX3NpdGVfZmlsZSIgPiY1Ci0kYXNfZWNobyAiJGFzX21lOiBsb2FkaW5nIHNpdGUgc2NyaXB0ICRhY19zaXRlX2ZpbGUiID4mNjt9Ci0gICAgc2VkICdzL14vfCAvJyAiJGFjX3NpdGVfZmlsZSIgPiY1Ci0gICAgLiAiJGFjX3NpdGVfZmlsZSIgXAotICAgICAgfHwgeyB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGVycm9yOiBpbiBcYCRhY19wd2QnOiIgPiY1Ci0kYXNfZWNobyAiJGFzX21lOiBlcnJvcjogaW4gXGAkYWNfcHdkJzoiID4mMjt9Ci1hc19mbl9lcnJvciAkPyAiZmFpbGVkIHRvIGxvYWQgc2l0ZSBzY3JpcHQgJGFjX3NpdGVfZmlsZQotU2VlIFxgY29uZmlnLmxvZycgZm9yIG1vcmUgZGV0YWlscyIgIiRMSU5FTk8iIDU7IH0KLSAgZmkKLWRvbmUKLQotaWYgdGVzdCAtciAiJGNhY2hlX2ZpbGUiOyB0aGVuCi0gICMgU29tZSB2ZXJzaW9ucyBvZiBiYXNoIHdpbGwgZmFpbCB0byBzb3VyY2UgL2Rldi9udWxsIChzcGVjaWFsIGZpbGVzCi0gICMgYWN0dWFsbHkpLCBzbyB3ZSBhdm9pZCBkb2luZyB0aGF0LiAgREpHUFAgZW11bGF0ZXMgaXQgYXMgYSByZWd1bGFyIGZpbGUuCi0gIGlmIHRlc3QgL2Rldi9udWxsICE9ICIkY2FjaGVfZmlsZSIgJiYgdGVzdCAtZiAiJGNhY2hlX2ZpbGUiOyB0aGVuCi0gICAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBsb2FkaW5nIGNhY2hlICRjYWNoZV9maWxlIiA+JjUKLSRhc19lY2hvICIkYXNfbWU6IGxvYWRpbmcgY2FjaGUgJGNhY2hlX2ZpbGUiID4mNjt9Ci0gICAgY2FzZSAkY2FjaGVfZmlsZSBpbgotICAgICAgW1xcL10qIHwgPzpbXFwvXSogKSAuICIkY2FjaGVfZmlsZSI7OwotICAgICAgKikgICAgICAgICAgICAgICAgICAgICAgLiAiLi8kY2FjaGVfZmlsZSI7OwotICAgIGVzYWMKLSAgZmkKLWVsc2UKLSAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjcmVhdGluZyBjYWNoZSAkY2FjaGVfZmlsZSIgPiY1Ci0kYXNfZWNobyAiJGFzX21lOiBjcmVhdGluZyBjYWNoZSAkY2FjaGVfZmlsZSIgPiY2O30KLSAgPiRjYWNoZV9maWxlCi1maQotCi0jIENoZWNrIHRoYXQgdGhlIHByZWNpb3VzIHZhcmlhYmxlcyBzYXZlZCBpbiB0aGUgY2FjaGUgaGF2ZSBrZXB0IHRoZSBzYW1lCi0jIHZhbHVlLgotYWNfY2FjaGVfY29ycnVwdGVkPWZhbHNlCi1mb3IgYWNfdmFyIGluICRhY19wcmVjaW91c192YXJzOyBkbwotICBldmFsIGFjX29sZF9zZXQ9XCRhY19jdl9lbnZfJHthY192YXJ9X3NldAotICBldmFsIGFjX25ld19zZXQ9XCRhY19lbnZfJHthY192YXJ9X3NldAotICBldmFsIGFjX29sZF92YWw9XCRhY19jdl9lbnZfJHthY192YXJ9X3ZhbHVlCi0gIGV2YWwgYWNfbmV3X3ZhbD1cJGFjX2Vudl8ke2FjX3Zhcn1fdmFsdWUKLSAgY2FzZSAkYWNfb2xkX3NldCwkYWNfbmV3X3NldCBpbgotICAgIHNldCwpCi0gICAgICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGVycm9yOiBcYCRhY192YXInIHdhcyBzZXQgdG8gXGAkYWNfb2xkX3ZhbCcgaW4gdGhlIHByZXZpb3VzIHJ1biIgPiY1Ci0kYXNfZWNobyAiJGFzX21lOiBlcnJvcjogXGAkYWNfdmFyJyB3YXMgc2V0IHRvIFxgJGFjX29sZF92YWwnIGluIHRoZSBwcmV2aW91cyBydW4iID4mMjt9Ci0gICAgICBhY19jYWNoZV9jb3JydXB0ZWQ9OiA7OwotICAgICxzZXQpCi0gICAgICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGVycm9yOiBcYCRhY192YXInIHdhcyBub3Qgc2V0IGluIHRoZSBwcmV2aW91cyBydW4iID4mNQotJGFzX2VjaG8gIiRhc19tZTogZXJyb3I6IFxgJGFjX3Zhcicgd2FzIG5vdCBzZXQgaW4gdGhlIHByZXZpb3VzIHJ1biIgPiYyO30KLSAgICAgIGFjX2NhY2hlX2NvcnJ1cHRlZD06IDs7Ci0gICAgLCk7OwotICAgICopCi0gICAgICBpZiB0ZXN0ICJ4JGFjX29sZF92YWwiICE9ICJ4JGFjX25ld192YWwiOyB0aGVuCi0JIyBkaWZmZXJlbmNlcyBpbiB3aGl0ZXNwYWNlIGRvIG5vdCBsZWFkIHRvIGZhaWx1cmUuCi0JYWNfb2xkX3ZhbF93PWBlY2hvIHggJGFjX29sZF92YWxgCi0JYWNfbmV3X3ZhbF93PWBlY2hvIHggJGFjX25ld192YWxgCi0JaWYgdGVzdCAiJGFjX29sZF92YWxfdyIgIT0gIiRhY19uZXdfdmFsX3ciOyB0aGVuCi0JICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGVycm9yOiBcYCRhY192YXInIGhhcyBjaGFuZ2VkIHNpbmNlIHRoZSBwcmV2aW91cyBydW46IiA+JjUKLSRhc19lY2hvICIkYXNfbWU6IGVycm9yOiBcYCRhY192YXInIGhhcyBjaGFuZ2VkIHNpbmNlIHRoZSBwcmV2aW91cyBydW46IiA+JjI7fQotCSAgYWNfY2FjaGVfY29ycnVwdGVkPToKLQllbHNlCi0JICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHdhcm5pbmc6IGlnbm9yaW5nIHdoaXRlc3BhY2UgY2hhbmdlcyBpbiBcYCRhY192YXInIHNpbmNlIHRoZSBwcmV2aW91cyBydW46IiA+JjUKLSRhc19lY2hvICIkYXNfbWU6IHdhcm5pbmc6IGlnbm9yaW5nIHdoaXRlc3BhY2UgY2hhbmdlcyBpbiBcYCRhY192YXInIHNpbmNlIHRoZSBwcmV2aW91cyBydW46IiA+JjI7fQotCSAgZXZhbCAkYWNfdmFyPVwkYWNfb2xkX3ZhbAotCWZpCi0JeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiAgIGZvcm1lciB2YWx1ZTogIFxgJGFjX29sZF92YWwnIiA+JjUKLSRhc19lY2hvICIkYXNfbWU6ICAgZm9ybWVyIHZhbHVlOiAgXGAkYWNfb2xkX3ZhbCciID4mMjt9Ci0JeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiAgIGN1cnJlbnQgdmFsdWU6IFxgJGFjX25ld192YWwnIiA+JjUKLSRhc19lY2hvICIkYXNfbWU6ICAgY3VycmVudCB2YWx1ZTogXGAkYWNfbmV3X3ZhbCciID4mMjt9Ci0gICAgICBmaTs7Ci0gIGVzYWMKLSAgIyBQYXNzIHByZWNpb3VzIHZhcmlhYmxlcyB0byBjb25maWcuc3RhdHVzLgotICBpZiB0ZXN0ICIkYWNfbmV3X3NldCIgPSBzZXQ7IHRoZW4KLSAgICBjYXNlICRhY19uZXdfdmFsIGluCi0gICAgKlwnKikgYWNfYXJnPSRhY192YXI9YCRhc19lY2hvICIkYWNfbmV3X3ZhbCIgfCBzZWQgInMvJy8nXFxcXFxcXFwnJy9nImAgOzsKLSAgICAqKSBhY19hcmc9JGFjX3Zhcj0kYWNfbmV3X3ZhbCA7OwotICAgIGVzYWMKLSAgICBjYXNlICIgJGFjX2NvbmZpZ3VyZV9hcmdzICIgaW4KLSAgICAgICoiICckYWNfYXJnJyAiKikgOzsgIyBBdm9pZCBkdXBzLiAgVXNlIG9mIHF1b3RlcyBlbnN1cmVzIGFjY3VyYWN5LgotICAgICAgKikgYXNfZm5fYXBwZW5kIGFjX2NvbmZpZ3VyZV9hcmdzICIgJyRhY19hcmcnIiA7OwotICAgIGVzYWMKLSAgZmkKLWRvbmUKLWlmICRhY19jYWNoZV9jb3JydXB0ZWQ7IHRoZW4KLSAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBlcnJvcjogaW4gXGAkYWNfcHdkJzoiID4mNQotJGFzX2VjaG8gIiRhc19tZTogZXJyb3I6IGluIFxgJGFjX3B3ZCc6IiA+JjI7fQotICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGVycm9yOiBjaGFuZ2VzIGluIHRoZSBlbnZpcm9ubWVudCBjYW4gY29tcHJvbWlzZSB0aGUgYnVpbGQiID4mNQotJGFzX2VjaG8gIiRhc19tZTogZXJyb3I6IGNoYW5nZXMgaW4gdGhlIGVudmlyb25tZW50IGNhbiBjb21wcm9taXNlIHRoZSBidWlsZCIgPiYyO30KLSAgYXNfZm5fZXJyb3IgJD8gInJ1biBcYG1ha2UgZGlzdGNsZWFuJyBhbmQvb3IgXGBybSAkY2FjaGVfZmlsZScgYW5kIHN0YXJ0IG92ZXIiICIkTElORU5PIiA1Ci1maQotIyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0gIyMKLSMjIE1haW4gYm9keSBvZiBzY3JpcHQuICMjCi0jIyAtLS0tLS0tLS0tLS0tLS0tLS0tLSAjIwotCi1hY19leHQ9YwotYWNfY3BwPSckQ1BQICRDUFBGTEFHUycKLWFjX2NvbXBpbGU9JyRDQyAtYyAkQ0ZMQUdTICRDUFBGTEFHUyBjb25mdGVzdC4kYWNfZXh0ID4mNScKLWFjX2xpbms9JyRDQyAtbyBjb25mdGVzdCRhY19leGVleHQgJENGTEFHUyAkQ1BQRkxBR1MgJExERkxBR1MgY29uZnRlc3QuJGFjX2V4dCAkTElCUyA+JjUnCi1hY19jb21waWxlcl9nbnU9JGFjX2N2X2NfY29tcGlsZXJfZ251Ci0KLQotCi0jIERpcmVjdG9yeSB3aGVyZSBhdXRvdG9vbHMgaGVscGVyIHNjcmlwdHMgbGl2ZXMuCi1hY19hdXhfZGlyPQotZm9yIGFjX2RpciBpbiAuICIkc3JjZGlyIi8uOyBkbwotICBpZiB0ZXN0IC1mICIkYWNfZGlyL2luc3RhbGwtc2giOyB0aGVuCi0gICAgYWNfYXV4X2Rpcj0kYWNfZGlyCi0gICAgYWNfaW5zdGFsbF9zaD0iJGFjX2F1eF9kaXIvaW5zdGFsbC1zaCAtYyIKLSAgICBicmVhawotICBlbGlmIHRlc3QgLWYgIiRhY19kaXIvaW5zdGFsbC5zaCI7IHRoZW4KLSAgICBhY19hdXhfZGlyPSRhY19kaXIKLSAgICBhY19pbnN0YWxsX3NoPSIkYWNfYXV4X2Rpci9pbnN0YWxsLnNoIC1jIgotICAgIGJyZWFrCi0gIGVsaWYgdGVzdCAtZiAiJGFjX2Rpci9zaHRvb2wiOyB0aGVuCi0gICAgYWNfYXV4X2Rpcj0kYWNfZGlyCi0gICAgYWNfaW5zdGFsbF9zaD0iJGFjX2F1eF9kaXIvc2h0b29sIGluc3RhbGwgLWMiCi0gICAgYnJlYWsKLSAgZmkKLWRvbmUKLWlmIHRlc3QgLXogIiRhY19hdXhfZGlyIjsgdGhlbgotICBhc19mbl9lcnJvciAkPyAiY2Fubm90IGZpbmQgaW5zdGFsbC1zaCwgaW5zdGFsbC5zaCwgb3Igc2h0b29sIGluIC4gXCIkc3JjZGlyXCIvLiIgIiRMSU5FTk8iIDUKLWZpCi0KLSMgVGhlc2UgdGhyZWUgdmFyaWFibGVzIGFyZSB1bmRvY3VtZW50ZWQgYW5kIHVuc3VwcG9ydGVkLAotIyBhbmQgYXJlIGludGVuZGVkIHRvIGJlIHdpdGhkcmF3biBpbiBhIGZ1dHVyZSBBdXRvY29uZiByZWxlYXNlLgotIyBUaGV5IGNhbiBjYXVzZSBzZXJpb3VzIHByb2JsZW1zIGlmIGEgYnVpbGRlcidzIHNvdXJjZSB0cmVlIGlzIGluIGEgZGlyZWN0b3J5Ci0jIHdob3NlIGZ1bGwgbmFtZSBjb250YWlucyB1bnVzdWFsIGNoYXJhY3RlcnMuCi1hY19jb25maWdfZ3Vlc3M9IiRTSEVMTCAkYWNfYXV4X2Rpci9jb25maWcuZ3Vlc3MiICAjIFBsZWFzZSBkb24ndCB1c2UgdGhpcyB2YXIuCi1hY19jb25maWdfc3ViPSIkU0hFTEwgJGFjX2F1eF9kaXIvY29uZmlnLnN1YiIgICMgUGxlYXNlIGRvbid0IHVzZSB0aGlzIHZhci4KLWFjX2NvbmZpZ3VyZT0iJFNIRUxMICRhY19hdXhfZGlyL2NvbmZpZ3VyZSIgICMgUGxlYXNlIGRvbid0IHVzZSB0aGlzIHZhci4KLQotCi0KLSMgR2VuZXJhdGUgY29uZmlndXJhdGlvbiBoZWFkZXJzLgotYWNfY29uZmlnX2hlYWRlcnM9IiRhY19jb25maWdfaGVhZGVycyBqY29uZmlnLmg6amNvbmZpZy5jZmciCi0KLQotIyBIYWNrOiBkaXNhYmxlIGF1dG9oZWFkZXIgc28gdGhhdCBpdCBkb2Vzbid0IG92ZXJ3cml0ZSBvdXIgY2ZnIHRlbXBsYXRlLgotQVVUT0hFQURFUj0iZWNobyBhdXRvaGVhZGVyIGlnbm9yZWQiCi0KLSMgQ2hlY2sgc3lzdGVtIHR5cGUKLSMgTWFrZSBzdXJlIHdlIGNhbiBydW4gY29uZmlnLnN1Yi4KLSRTSEVMTCAiJGFjX2F1eF9kaXIvY29uZmlnLnN1YiIgc3VuNCA+L2Rldi9udWxsIDI+JjEgfHwKLSAgYXNfZm5fZXJyb3IgJD8gImNhbm5vdCBydW4gJFNIRUxMICRhY19hdXhfZGlyL2NvbmZpZy5zdWIiICIkTElORU5PIiA1Ci0KLXsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgYnVpbGQgc3lzdGVtIHR5cGUiID4mNQotJGFzX2VjaG9fbiAiY2hlY2tpbmcgYnVpbGQgc3lzdGVtIHR5cGUuLi4gIiA+JjY7IH0KLWlmICR7YWNfY3ZfYnVpbGQrOn0gZmFsc2U7IHRoZW4gOgotICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgotZWxzZQotICBhY19idWlsZF9hbGlhcz0kYnVpbGRfYWxpYXMKLXRlc3QgIngkYWNfYnVpbGRfYWxpYXMiID0geCAmJgotICBhY19idWlsZF9hbGlhcz1gJFNIRUxMICIkYWNfYXV4X2Rpci9jb25maWcuZ3Vlc3MiYAotdGVzdCAieCRhY19idWlsZF9hbGlhcyIgPSB4ICYmCi0gIGFzX2ZuX2Vycm9yICQ/ICJjYW5ub3QgZ3Vlc3MgYnVpbGQgdHlwZTsgeW91IG11c3Qgc3BlY2lmeSBvbmUiICIkTElORU5PIiA1Ci1hY19jdl9idWlsZD1gJFNIRUxMICIkYWNfYXV4X2Rpci9jb25maWcuc3ViIiAkYWNfYnVpbGRfYWxpYXNgIHx8Ci0gIGFzX2ZuX2Vycm9yICQ/ICIkU0hFTEwgJGFjX2F1eF9kaXIvY29uZmlnLnN1YiAkYWNfYnVpbGRfYWxpYXMgZmFpbGVkIiAiJExJTkVOTyIgNQotCi1maQoteyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRhY19jdl9idWlsZCIgPiY1Ci0kYXNfZWNobyAiJGFjX2N2X2J1aWxkIiA+JjY7IH0KLWNhc2UgJGFjX2N2X2J1aWxkIGluCi0qLSotKikgOzsKLSopIGFzX2ZuX2Vycm9yICQ/ICJpbnZhbGlkIHZhbHVlIG9mIGNhbm9uaWNhbCBidWlsZCIgIiRMSU5FTk8iIDU7OwotZXNhYwotYnVpbGQ9JGFjX2N2X2J1aWxkCi1hY19zYXZlX0lGUz0kSUZTOyBJRlM9Jy0nCi1zZXQgeCAkYWNfY3ZfYnVpbGQKLXNoaWZ0Ci1idWlsZF9jcHU9JDEKLWJ1aWxkX3ZlbmRvcj0kMgotc2hpZnQ7IHNoaWZ0Ci0jIFJlbWVtYmVyLCB0aGUgZmlyc3QgY2hhcmFjdGVyIG9mIElGUyBpcyB1c2VkIHRvIGNyZWF0ZSAkKiwKLSMgZXhjZXB0IHdpdGggb2xkIHNoZWxsczoKLWJ1aWxkX29zPSQqCi1JRlM9JGFjX3NhdmVfSUZTCi1jYXNlICRidWlsZF9vcyBpbiAqXCAqKSBidWlsZF9vcz1gZWNobyAiJGJ1aWxkX29zIiB8IHNlZCAncy8gLy0vZydgOzsgZXNhYwotCi0KLXsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgaG9zdCBzeXN0ZW0gdHlwZSIgPiY1Ci0kYXNfZWNob19uICJjaGVja2luZyBob3N0IHN5c3RlbSB0eXBlLi4uICIgPiY2OyB9Ci1pZiAke2FjX2N2X2hvc3QrOn0gZmFsc2U7IHRoZW4gOgotICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgotZWxzZQotICBpZiB0ZXN0ICJ4JGhvc3RfYWxpYXMiID0geDsgdGhlbgotICBhY19jdl9ob3N0PSRhY19jdl9idWlsZAotZWxzZQotICBhY19jdl9ob3N0PWAkU0hFTEwgIiRhY19hdXhfZGlyL2NvbmZpZy5zdWIiICRob3N0X2FsaWFzYCB8fAotICAgIGFzX2ZuX2Vycm9yICQ/ICIkU0hFTEwgJGFjX2F1eF9kaXIvY29uZmlnLnN1YiAkaG9zdF9hbGlhcyBmYWlsZWQiICIkTElORU5PIiA1Ci1maQotCi1maQoteyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRhY19jdl9ob3N0IiA+JjUKLSRhc19lY2hvICIkYWNfY3ZfaG9zdCIgPiY2OyB9Ci1jYXNlICRhY19jdl9ob3N0IGluCi0qLSotKikgOzsKLSopIGFzX2ZuX2Vycm9yICQ/ICJpbnZhbGlkIHZhbHVlIG9mIGNhbm9uaWNhbCBob3N0IiAiJExJTkVOTyIgNTs7Ci1lc2FjCi1ob3N0PSRhY19jdl9ob3N0Ci1hY19zYXZlX0lGUz0kSUZTOyBJRlM9Jy0nCi1zZXQgeCAkYWNfY3ZfaG9zdAotc2hpZnQKLWhvc3RfY3B1PSQxCi1ob3N0X3ZlbmRvcj0kMgotc2hpZnQ7IHNoaWZ0Ci0jIFJlbWVtYmVyLCB0aGUgZmlyc3QgY2hhcmFjdGVyIG9mIElGUyBpcyB1c2VkIHRvIGNyZWF0ZSAkKiwKLSMgZXhjZXB0IHdpdGggb2xkIHNoZWxsczoKLWhvc3Rfb3M9JCoKLUlGUz0kYWNfc2F2ZV9JRlMKLWNhc2UgJGhvc3Rfb3MgaW4gKlwgKikgaG9zdF9vcz1gZWNobyAiJGhvc3Rfb3MiIHwgc2VkICdzLyAvLS9nJ2A7OyBlc2FjCi0KLQoteyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyB0YXJnZXQgc3lzdGVtIHR5cGUiID4mNQotJGFzX2VjaG9fbiAiY2hlY2tpbmcgdGFyZ2V0IHN5c3RlbSB0eXBlLi4uICIgPiY2OyB9Ci1pZiAke2FjX2N2X3RhcmdldCs6fSBmYWxzZTsgdGhlbiA6Ci0gICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2Ci1lbHNlCi0gIGlmIHRlc3QgIngkdGFyZ2V0X2FsaWFzIiA9IHg7IHRoZW4KLSAgYWNfY3ZfdGFyZ2V0PSRhY19jdl9ob3N0Ci1lbHNlCi0gIGFjX2N2X3RhcmdldD1gJFNIRUxMICIkYWNfYXV4X2Rpci9jb25maWcuc3ViIiAkdGFyZ2V0X2FsaWFzYCB8fAotICAgIGFzX2ZuX2Vycm9yICQ/ICIkU0hFTEwgJGFjX2F1eF9kaXIvY29uZmlnLnN1YiAkdGFyZ2V0X2FsaWFzIGZhaWxlZCIgIiRMSU5FTk8iIDUKLWZpCi0KLWZpCi17ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJGFjX2N2X3RhcmdldCIgPiY1Ci0kYXNfZWNobyAiJGFjX2N2X3RhcmdldCIgPiY2OyB9Ci1jYXNlICRhY19jdl90YXJnZXQgaW4KLSotKi0qKSA7OwotKikgYXNfZm5fZXJyb3IgJD8gImludmFsaWQgdmFsdWUgb2YgY2Fub25pY2FsIHRhcmdldCIgIiRMSU5FTk8iIDU7OwotZXNhYwotdGFyZ2V0PSRhY19jdl90YXJnZXQKLWFjX3NhdmVfSUZTPSRJRlM7IElGUz0nLScKLXNldCB4ICRhY19jdl90YXJnZXQKLXNoaWZ0Ci10YXJnZXRfY3B1PSQxCi10YXJnZXRfdmVuZG9yPSQyCi1zaGlmdDsgc2hpZnQKLSMgUmVtZW1iZXIsIHRoZSBmaXJzdCBjaGFyYWN0ZXIgb2YgSUZTIGlzIHVzZWQgdG8gY3JlYXRlICQqLAotIyBleGNlcHQgd2l0aCBvbGQgc2hlbGxzOgotdGFyZ2V0X29zPSQqCi1JRlM9JGFjX3NhdmVfSUZTCi1jYXNlICR0YXJnZXRfb3MgaW4gKlwgKikgdGFyZ2V0X29zPWBlY2hvICIkdGFyZ2V0X29zIiB8IHNlZCAncy8gLy0vZydgOzsgZXNhYwotCi0KLSMgVGhlIGFsaWFzZXMgc2F2ZSB0aGUgbmFtZXMgdGhlIHVzZXIgc3VwcGxpZWQsIHdoaWxlICRob3N0IGV0Yy4KLSMgd2lsbCBnZXQgY2Fub25pY2FsaXplZC4KLXRlc3QgLW4gIiR0YXJnZXRfYWxpYXMiICYmCi0gIHRlc3QgIiRwcm9ncmFtX3ByZWZpeCRwcm9ncmFtX3N1ZmZpeCRwcm9ncmFtX3RyYW5zZm9ybV9uYW1lIiA9IFwKLSAgICBOT05FTk9ORXMseCx4LCAmJgotICBwcm9ncmFtX3ByZWZpeD0ke3RhcmdldF9hbGlhc30tCi0KLSMgSW5pdGlhbGl6ZSBBdXRvbWFrZQotIyBEb24ndCByZXF1aXJlIGFsbCB0aGUgR05VIG1hbmRhdGVkIGZpbGVzCi1hbV9fYXBpX3ZlcnNpb249JzEuMTEnCi0KLSMgRmluZCBhIGdvb2QgaW5zdGFsbCBwcm9ncmFtLiAgV2UgcHJlZmVyIGEgQyBwcm9ncmFtIChmYXN0ZXIpLAotIyBzbyBvbmUgc2NyaXB0IGlzIGFzIGdvb2QgYXMgYW5vdGhlci4gIEJ1dCBhdm9pZCB0aGUgYnJva2VuIG9yCi0jIGluY29tcGF0aWJsZSB2ZXJzaW9uczoKLSMgU3lzViAvZXRjL2luc3RhbGwsIC91c3Ivc2Jpbi9pbnN0YWxsCi0jIFN1bk9TIC91c3IvZXRjL2luc3RhbGwKLSMgSVJJWCAvc2Jpbi9pbnN0YWxsCi0jIEFJWCAvYmluL2luc3RhbGwKLSMgQW1pZ2FPUyAvQy9pbnN0YWxsLCB3aGljaCBpbnN0YWxscyBib290YmxvY2tzIG9uIGZsb3BweSBkaXNjcwotIyBBSVggNCAvdXNyL2Jpbi9pbnN0YWxsYnNkLCB3aGljaCBkb2Vzbid0IHdvcmsgd2l0aG91dCBhIC1nIGZsYWcKLSMgQUZTIC91c3IvYWZzd3MvYmluL2luc3RhbGwsIHdoaWNoIG1pc2hhbmRsZXMgbm9uZXhpc3RlbnQgYXJncwotIyBTVlI0IC91c3IvdWNiL2luc3RhbGwsIHdoaWNoIHRyaWVzIHRvIHVzZSB0aGUgbm9uZXhpc3RlbnQgZ3JvdXAgInN0YWZmIgotIyBPUy8yJ3Mgc3lzdGVtIGluc3RhbGwsIHdoaWNoIGhhcyBhIGNvbXBsZXRlbHkgZGlmZmVyZW50IHNlbWFudGljCi0jIC4vaW5zdGFsbCwgd2hpY2ggY2FuIGJlIGVycm9uZW91c2x5IGNyZWF0ZWQgYnkgbWFrZSBmcm9tIC4vaW5zdGFsbC5zaC4KLSMgUmVqZWN0IGluc3RhbGwgcHJvZ3JhbXMgdGhhdCBjYW5ub3QgaW5zdGFsbCBtdWx0aXBsZSBmaWxlcy4KLXsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgZm9yIGEgQlNELWNvbXBhdGlibGUgaW5zdGFsbCIgPiY1Ci0kYXNfZWNob19uICJjaGVja2luZyBmb3IgYSBCU0QtY29tcGF0aWJsZSBpbnN0YWxsLi4uICIgPiY2OyB9Ci1pZiB0ZXN0IC16ICIkSU5TVEFMTCI7IHRoZW4KLWlmICR7YWNfY3ZfcGF0aF9pbnN0YWxsKzp9IGZhbHNlOyB0aGVuIDoKLSAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKLWVsc2UKLSAgYXNfc2F2ZV9JRlM9JElGUzsgSUZTPSRQQVRIX1NFUEFSQVRPUgotZm9yIGFzX2RpciBpbiAkUEFUSAotZG8KLSAgSUZTPSRhc19zYXZlX0lGUwotICB0ZXN0IC16ICIkYXNfZGlyIiAmJiBhc19kaXI9LgotICAgICMgQWNjb3VudCBmb3IgcGVvcGxlIHdobyBwdXQgdHJhaWxpbmcgc2xhc2hlcyBpbiBQQVRIIGVsZW1lbnRzLgotY2FzZSAkYXNfZGlyLyBpbiAjKCgKLSAgLi8gfCAuLy8gfCAvW2NDXS8qIHwgXAotICAvZXRjLyogfCAvdXNyL3NiaW4vKiB8IC91c3IvZXRjLyogfCAvc2Jpbi8qIHwgL3Vzci9hZnN3cy9iaW4vKiB8IFwKLSAgPzpbXFwvXW9zMltcXC9daW5zdGFsbFtcXC9dKiB8ID86W1xcL11PUzJbXFwvXUlOU1RBTExbXFwvXSogfCBcCi0gIC91c3IvdWNiLyogKSA7OwotICAqKQotICAgICMgT1NGMSBhbmQgU0NPIE9EVCAzLjAgaGF2ZSB0aGVpciBvd24gbmFtZXMgZm9yIGluc3RhbGwuCi0gICAgIyBEb24ndCB1c2UgaW5zdGFsbGJzZCBmcm9tIE9TRiBzaW5jZSBpdCBpbnN0YWxscyBzdHVmZiBhcyByb290Ci0gICAgIyBieSBkZWZhdWx0LgotICAgIGZvciBhY19wcm9nIGluIGdpbnN0YWxsIHNjb2luc3QgaW5zdGFsbDsgZG8KLSAgICAgIGZvciBhY19leGVjX2V4dCBpbiAnJyAkYWNfZXhlY3V0YWJsZV9leHRlbnNpb25zOyBkbwotCWlmIHsgdGVzdCAtZiAiJGFzX2Rpci8kYWNfcHJvZyRhY19leGVjX2V4dCIgJiYgJGFzX3Rlc3RfeCAiJGFzX2Rpci8kYWNfcHJvZyRhY19leGVjX2V4dCI7IH07IHRoZW4KLQkgIGlmIHRlc3QgJGFjX3Byb2cgPSBpbnN0YWxsICYmCi0JICAgIGdyZXAgZHNwbXNnICIkYXNfZGlyLyRhY19wcm9nJGFjX2V4ZWNfZXh0IiA+L2Rldi9udWxsIDI+JjE7IHRoZW4KLQkgICAgIyBBSVggaW5zdGFsbC4gIEl0IGhhcyBhbiBpbmNvbXBhdGlibGUgY2FsbGluZyBjb252ZW50aW9uLgotCSAgICA6Ci0JICBlbGlmIHRlc3QgJGFjX3Byb2cgPSBpbnN0YWxsICYmCi0JICAgIGdyZXAgcHdwbHVzICIkYXNfZGlyLyRhY19wcm9nJGFjX2V4ZWNfZXh0IiA+L2Rldi9udWxsIDI+JjE7IHRoZW4KLQkgICAgIyBwcm9ncmFtLXNwZWNpZmljIGluc3RhbGwgc2NyaXB0IHVzZWQgYnkgSFAgcHdwbHVzLS1kb24ndCB1c2UuCi0JICAgIDoKLQkgIGVsc2UKLQkgICAgcm0gLXJmIGNvbmZ0ZXN0Lm9uZSBjb25mdGVzdC50d28gY29uZnRlc3QuZGlyCi0JICAgIGVjaG8gb25lID4gY29uZnRlc3Qub25lCi0JICAgIGVjaG8gdHdvID4gY29uZnRlc3QudHdvCi0JICAgIG1rZGlyIGNvbmZ0ZXN0LmRpcgotCSAgICBpZiAiJGFzX2Rpci8kYWNfcHJvZyRhY19leGVjX2V4dCIgLWMgY29uZnRlc3Qub25lIGNvbmZ0ZXN0LnR3byAiYHB3ZGAvY29uZnRlc3QuZGlyIiAmJgotCSAgICAgIHRlc3QgLXMgY29uZnRlc3Qub25lICYmIHRlc3QgLXMgY29uZnRlc3QudHdvICYmCi0JICAgICAgdGVzdCAtcyBjb25mdGVzdC5kaXIvY29uZnRlc3Qub25lICYmCi0JICAgICAgdGVzdCAtcyBjb25mdGVzdC5kaXIvY29uZnRlc3QudHdvCi0JICAgIHRoZW4KLQkgICAgICBhY19jdl9wYXRoX2luc3RhbGw9IiRhc19kaXIvJGFjX3Byb2ckYWNfZXhlY19leHQgLWMiCi0JICAgICAgYnJlYWsgMwotCSAgICBmaQotCSAgZmkKLQlmaQotICAgICAgZG9uZQotICAgIGRvbmUKLSAgICA7OwotZXNhYwotCi0gIGRvbmUKLUlGUz0kYXNfc2F2ZV9JRlMKLQotcm0gLXJmIGNvbmZ0ZXN0Lm9uZSBjb25mdGVzdC50d28gY29uZnRlc3QuZGlyCi0KLWZpCi0gIGlmIHRlc3QgIiR7YWNfY3ZfcGF0aF9pbnN0YWxsK3NldH0iID0gc2V0OyB0aGVuCi0gICAgSU5TVEFMTD0kYWNfY3ZfcGF0aF9pbnN0YWxsCi0gIGVsc2UKLSAgICAjIEFzIGEgbGFzdCByZXNvcnQsIHVzZSB0aGUgc2xvdyBzaGVsbCBzY3JpcHQuICBEb24ndCBjYWNoZSBhCi0gICAgIyB2YWx1ZSBmb3IgSU5TVEFMTCB3aXRoaW4gYSBzb3VyY2UgZGlyZWN0b3J5LCBiZWNhdXNlIHRoYXQgd2lsbAotICAgICMgYnJlYWsgb3RoZXIgcGFja2FnZXMgdXNpbmcgdGhlIGNhY2hlIGlmIHRoYXQgZGlyZWN0b3J5IGlzCi0gICAgIyByZW1vdmVkLCBvciBpZiB0aGUgdmFsdWUgaXMgYSByZWxhdGl2ZSBuYW1lLgotICAgIElOU1RBTEw9JGFjX2luc3RhbGxfc2gKLSAgZmkKLWZpCi17ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJElOU1RBTEwiID4mNQotJGFzX2VjaG8gIiRJTlNUQUxMIiA+JjY7IH0KLQotIyBVc2UgdGVzdCAteiBiZWNhdXNlIFN1bk9TNCBzaCBtaXNoYW5kbGVzIGJyYWNlcyBpbiAke3Zhci12YWx9LgotIyBJdCB0aGlua3MgdGhlIGZpcnN0IGNsb3NlIGJyYWNlIGVuZHMgdGhlIHZhcmlhYmxlIHN1YnN0aXR1dGlvbi4KLXRlc3QgLXogIiRJTlNUQUxMX1BST0dSQU0iICYmIElOU1RBTExfUFJPR1JBTT0nJHtJTlNUQUxMfScKLQotdGVzdCAteiAiJElOU1RBTExfU0NSSVBUIiAmJiBJTlNUQUxMX1NDUklQVD0nJHtJTlNUQUxMfScKLQotdGVzdCAteiAiJElOU1RBTExfREFUQSIgJiYgSU5TVEFMTF9EQVRBPScke0lOU1RBTEx9IC1tIDY0NCcKLQoteyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyB3aGV0aGVyIGJ1aWxkIGVudmlyb25tZW50IGlzIHNhbmUiID4mNQotJGFzX2VjaG9fbiAiY2hlY2tpbmcgd2hldGhlciBidWlsZCBlbnZpcm9ubWVudCBpcyBzYW5lLi4uICIgPiY2OyB9Ci0jIEp1c3QgaW4gY2FzZQotc2xlZXAgMQotZWNobyB0aW1lc3RhbXAgPiBjb25mdGVzdC5maWxlCi0jIFJlamVjdCB1bnNhZmUgY2hhcmFjdGVycyBpbiAkc3JjZGlyIG9yIHRoZSBhYnNvbHV0ZSB3b3JraW5nIGRpcmVjdG9yeQotIyBuYW1lLiAgQWNjZXB0IHNwYWNlIGFuZCB0YWIgb25seSBpbiB0aGUgbGF0dGVyLgotYW1fbGY9JwotJwotY2FzZSBgcHdkYCBpbgotICAqW1xcXCJcI1wkXCZcJ1xgJGFtX2xmXSopCi0gICAgYXNfZm5fZXJyb3IgJD8gInVuc2FmZSBhYnNvbHV0ZSB3b3JraW5nIGRpcmVjdG9yeSBuYW1lIiAiJExJTkVOTyIgNTs7Ci1lc2FjCi1jYXNlICRzcmNkaXIgaW4KLSAgKltcXFwiXCNcJFwmXCdcYCRhbV9sZlwgXAldKikKLSAgICBhc19mbl9lcnJvciAkPyAidW5zYWZlIHNyY2RpciB2YWx1ZTogXGAkc3JjZGlyJyIgIiRMSU5FTk8iIDU7OwotZXNhYwotCi0jIERvIGBzZXQnIGluIGEgc3Vic2hlbGwgc28gd2UgZG9uJ3QgY2xvYmJlciB0aGUgY3VycmVudCBzaGVsbCdzCi0jIGFyZ3VtZW50cy4gIE11c3QgdHJ5IC1MIGZpcnN0IGluIGNhc2UgY29uZmlndXJlIGlzIGFjdHVhbGx5IGEKLSMgc3ltbGluazsgc29tZSBzeXN0ZW1zIHBsYXkgd2VpcmQgZ2FtZXMgd2l0aCB0aGUgbW9kIHRpbWUgb2Ygc3ltbGlua3MKLSMgKGVnIEZyZWVCU0QgcmV0dXJucyB0aGUgbW9kIHRpbWUgb2YgdGhlIHN5bWxpbmsncyBjb250YWluaW5nCi0jIGRpcmVjdG9yeSkuCi1pZiAoCi0gICBzZXQgWCBgbHMgLUx0ICIkc3JjZGlyL2NvbmZpZ3VyZSIgY29uZnRlc3QuZmlsZSAyPiAvZGV2L251bGxgCi0gICBpZiB0ZXN0ICIkKiIgPSAiWCI7IHRoZW4KLSAgICAgICMgLUwgZGlkbid0IHdvcmsuCi0gICAgICBzZXQgWCBgbHMgLXQgIiRzcmNkaXIvY29uZmlndXJlIiBjb25mdGVzdC5maWxlYAotICAgZmkKLSAgIHJtIC1mIGNvbmZ0ZXN0LmZpbGUKLSAgIGlmIHRlc3QgIiQqIiAhPSAiWCAkc3JjZGlyL2NvbmZpZ3VyZSBjb25mdGVzdC5maWxlIiBcCi0gICAgICAmJiB0ZXN0ICIkKiIgIT0gIlggY29uZnRlc3QuZmlsZSAkc3JjZGlyL2NvbmZpZ3VyZSI7IHRoZW4KLQotICAgICAgIyBJZiBuZWl0aGVyIG1hdGNoZWQsIHRoZW4gd2UgaGF2ZSBhIGJyb2tlbiBscy4gIFRoaXMgY2FuIGhhcHBlbgotICAgICAgIyBpZiwgZm9yIGluc3RhbmNlLCBDT05GSUdfU0hFTEwgaXMgYmFzaCBhbmQgaXQgaW5oZXJpdHMgYQotICAgICAgIyBicm9rZW4gbHMgYWxpYXMgZnJvbSB0aGUgZW52aXJvbm1lbnQuICBUaGlzIGhhcyBhY3R1YWxseQotICAgICAgIyBoYXBwZW5lZC4gIFN1Y2ggYSBzeXN0ZW0gY291bGQgbm90IGJlIGNvbnNpZGVyZWQgInNhbmUiLgotICAgICAgYXNfZm5fZXJyb3IgJD8gImxzIC10IGFwcGVhcnMgdG8gZmFpbC4gIE1ha2Ugc3VyZSB0aGVyZSBpcyBub3QgYSBicm9rZW4KLWFsaWFzIGluIHlvdXIgZW52aXJvbm1lbnQiICIkTElORU5PIiA1Ci0gICBmaQotCi0gICB0ZXN0ICIkMiIgPSBjb25mdGVzdC5maWxlCi0gICApCi10aGVuCi0gICAjIE9rLgotICAgOgotZWxzZQotICAgYXNfZm5fZXJyb3IgJD8gIm5ld2x5IGNyZWF0ZWQgZmlsZSBpcyBvbGRlciB0aGFuIGRpc3RyaWJ1dGVkIGZpbGVzIQotQ2hlY2sgeW91ciBzeXN0ZW0gY2xvY2siICIkTElORU5PIiA1Ci1maQoteyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6IHllcyIgPiY1Ci0kYXNfZWNobyAieWVzIiA+JjY7IH0KLXRlc3QgIiRwcm9ncmFtX3ByZWZpeCIgIT0gTk9ORSAmJgotICBwcm9ncmFtX3RyYW5zZm9ybV9uYW1lPSJzJl4mJHByb2dyYW1fcHJlZml4JjskcHJvZ3JhbV90cmFuc2Zvcm1fbmFtZSIKLSMgVXNlIGEgZG91YmxlICQgc28gbWFrZSBpZ25vcmVzIGl0LgotdGVzdCAiJHByb2dyYW1fc3VmZml4IiAhPSBOT05FICYmCi0gIHByb2dyYW1fdHJhbnNmb3JtX25hbWU9InMmXCQmJHByb2dyYW1fc3VmZml4JjskcHJvZ3JhbV90cmFuc2Zvcm1fbmFtZSIKLSMgRG91YmxlIGFueSBcIG9yICQuCi0jIEJ5IGRlZmF1bHQgd2FzIGBzLHgseCcsIHJlbW92ZSBpdCBpZiB1c2VsZXNzLgotYWNfc2NyaXB0PSdzL1tcXCRdLyYmL2c7cy87cyx4LHgsJC8vJwotcHJvZ3JhbV90cmFuc2Zvcm1fbmFtZT1gJGFzX2VjaG8gIiRwcm9ncmFtX3RyYW5zZm9ybV9uYW1lIiB8IHNlZCAiJGFjX3NjcmlwdCJgCi0KLSMgZXhwYW5kICRhY19hdXhfZGlyIHRvIGFuIGFic29sdXRlIHBhdGgKLWFtX2F1eF9kaXI9YGNkICRhY19hdXhfZGlyICYmIHB3ZGAKLQotaWYgdGVzdCB4IiR7TUlTU0lORytzZXR9IiAhPSB4c2V0OyB0aGVuCi0gIGNhc2UgJGFtX2F1eF9kaXIgaW4KLSAgKlwgKiB8ICpcCSopCi0gICAgTUlTU0lORz0iXCR7U0hFTEx9IFwiJGFtX2F1eF9kaXIvbWlzc2luZ1wiIiA7OwotICAqKQotICAgIE1JU1NJTkc9Ilwke1NIRUxMfSAkYW1fYXV4X2Rpci9taXNzaW5nIiA7OwotICBlc2FjCi1maQotIyBVc2UgZXZhbCB0byBleHBhbmQgJFNIRUxMCi1pZiBldmFsICIkTUlTU0lORyAtLXJ1biB0cnVlIjsgdGhlbgotICBhbV9taXNzaW5nX3J1bj0iJE1JU1NJTkcgLS1ydW4gIgotZWxzZQotICBhbV9taXNzaW5nX3J1bj0KLSAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBXQVJOSU5HOiBcYG1pc3NpbmcnIHNjcmlwdCBpcyB0b28gb2xkIG9yIG1pc3NpbmciID4mNQotJGFzX2VjaG8gIiRhc19tZTogV0FSTklORzogXGBtaXNzaW5nJyBzY3JpcHQgaXMgdG9vIG9sZCBvciBtaXNzaW5nIiA+JjI7fQotZmkKLQotaWYgdGVzdCB4IiR7aW5zdGFsbF9zaH0iICE9IHhzZXQ7IHRoZW4KLSAgY2FzZSAkYW1fYXV4X2RpciBpbgotICAqXCAqIHwgKlwJKikKLSAgICBpbnN0YWxsX3NoPSJcJHtTSEVMTH0gJyRhbV9hdXhfZGlyL2luc3RhbGwtc2gnIiA7OwotICAqKQotICAgIGluc3RhbGxfc2g9Ilwke1NIRUxMfSAkYW1fYXV4X2Rpci9pbnN0YWxsLXNoIgotICBlc2FjCi1maQotCi0jIEluc3RhbGxlZCBiaW5hcmllcyBhcmUgdXN1YWxseSBzdHJpcHBlZCB1c2luZyBgc3RyaXAnIHdoZW4gdGhlIHVzZXIKLSMgcnVuIGBtYWtlIGluc3RhbGwtc3RyaXAnLiAgSG93ZXZlciBgc3RyaXAnIG1pZ2h0IG5vdCBiZSB0aGUgcmlnaHQKLSMgdG9vbCB0byB1c2UgaW4gY3Jvc3MtY29tcGlsYXRpb24gZW52aXJvbm1lbnRzLCB0aGVyZWZvcmUgQXV0b21ha2UKLSMgd2lsbCBob25vciB0aGUgYFNUUklQJyBlbnZpcm9ubWVudCB2YXJpYWJsZSB0byBvdmVycnVsZSB0aGlzIHByb2dyYW0uCi1pZiB0ZXN0ICIkY3Jvc3NfY29tcGlsaW5nIiAhPSBubzsgdGhlbgotICBpZiB0ZXN0IC1uICIkYWNfdG9vbF9wcmVmaXgiOyB0aGVuCi0gICMgRXh0cmFjdCB0aGUgZmlyc3Qgd29yZCBvZiAiJHthY190b29sX3ByZWZpeH1zdHJpcCIsIHNvIGl0IGNhbiBiZSBhIHByb2dyYW0gbmFtZSB3aXRoIGFyZ3MuCi1zZXQgZHVtbXkgJHthY190b29sX3ByZWZpeH1zdHJpcDsgYWNfd29yZD0kMgoteyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBmb3IgJGFjX3dvcmQiID4mNQotJGFzX2VjaG9fbiAiY2hlY2tpbmcgZm9yICRhY193b3JkLi4uICIgPiY2OyB9Ci1pZiAke2FjX2N2X3Byb2dfU1RSSVArOn0gZmFsc2U7IHRoZW4gOgotICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgotZWxzZQotICBpZiB0ZXN0IC1uICIkU1RSSVAiOyB0aGVuCi0gIGFjX2N2X3Byb2dfU1RSSVA9IiRTVFJJUCIgIyBMZXQgdGhlIHVzZXIgb3ZlcnJpZGUgdGhlIHRlc3QuCi1lbHNlCi1hc19zYXZlX0lGUz0kSUZTOyBJRlM9JFBBVEhfU0VQQVJBVE9SCi1mb3IgYXNfZGlyIGluICRQQVRICi1kbwotICBJRlM9JGFzX3NhdmVfSUZTCi0gIHRlc3QgLXogIiRhc19kaXIiICYmIGFzX2Rpcj0uCi0gICAgZm9yIGFjX2V4ZWNfZXh0IGluICcnICRhY19leGVjdXRhYmxlX2V4dGVuc2lvbnM7IGRvCi0gIGlmIHsgdGVzdCAtZiAiJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCIgJiYgJGFzX3Rlc3RfeCAiJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCI7IH07IHRoZW4KLSAgICBhY19jdl9wcm9nX1NUUklQPSIke2FjX3Rvb2xfcHJlZml4fXN0cmlwIgotICAgICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGZvdW5kICRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiID4mNQotICAgIGJyZWFrIDIKLSAgZmkKLWRvbmUKLSAgZG9uZQotSUZTPSRhc19zYXZlX0lGUwotCi1maQotZmkKLVNUUklQPSRhY19jdl9wcm9nX1NUUklQCi1pZiB0ZXN0IC1uICIkU1RSSVAiOyB0aGVuCi0gIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkU1RSSVAiID4mNQotJGFzX2VjaG8gIiRTVFJJUCIgPiY2OyB9Ci1lbHNlCi0gIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiBubyIgPiY1Ci0kYXNfZWNobyAibm8iID4mNjsgfQotZmkKLQotCi1maQotaWYgdGVzdCAteiAiJGFjX2N2X3Byb2dfU1RSSVAiOyB0aGVuCi0gIGFjX2N0X1NUUklQPSRTVFJJUAotICAjIEV4dHJhY3QgdGhlIGZpcnN0IHdvcmQgb2YgInN0cmlwIiwgc28gaXQgY2FuIGJlIGEgcHJvZ3JhbSBuYW1lIHdpdGggYXJncy4KLXNldCBkdW1teSBzdHJpcDsgYWNfd29yZD0kMgoteyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBmb3IgJGFjX3dvcmQiID4mNQotJGFzX2VjaG9fbiAiY2hlY2tpbmcgZm9yICRhY193b3JkLi4uICIgPiY2OyB9Ci1pZiAke2FjX2N2X3Byb2dfYWNfY3RfU1RSSVArOn0gZmFsc2U7IHRoZW4gOgotICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgotZWxzZQotICBpZiB0ZXN0IC1uICIkYWNfY3RfU1RSSVAiOyB0aGVuCi0gIGFjX2N2X3Byb2dfYWNfY3RfU1RSSVA9IiRhY19jdF9TVFJJUCIgIyBMZXQgdGhlIHVzZXIgb3ZlcnJpZGUgdGhlIHRlc3QuCi1lbHNlCi1hc19zYXZlX0lGUz0kSUZTOyBJRlM9JFBBVEhfU0VQQVJBVE9SCi1mb3IgYXNfZGlyIGluICRQQVRICi1kbwotICBJRlM9JGFzX3NhdmVfSUZTCi0gIHRlc3QgLXogIiRhc19kaXIiICYmIGFzX2Rpcj0uCi0gICAgZm9yIGFjX2V4ZWNfZXh0IGluICcnICRhY19leGVjdXRhYmxlX2V4dGVuc2lvbnM7IGRvCi0gIGlmIHsgdGVzdCAtZiAiJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCIgJiYgJGFzX3Rlc3RfeCAiJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCI7IH07IHRoZW4KLSAgICBhY19jdl9wcm9nX2FjX2N0X1NUUklQPSJzdHJpcCIKLSAgICAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBmb3VuZCAkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IiA+JjUKLSAgICBicmVhayAyCi0gIGZpCi1kb25lCi0gIGRvbmUKLUlGUz0kYXNfc2F2ZV9JRlMKLQotZmkKLWZpCi1hY19jdF9TVFJJUD0kYWNfY3ZfcHJvZ19hY19jdF9TVFJJUAotaWYgdGVzdCAtbiAiJGFjX2N0X1NUUklQIjsgdGhlbgotICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJGFjX2N0X1NUUklQIiA+JjUKLSRhc19lY2hvICIkYWNfY3RfU1RSSVAiID4mNjsgfQotZWxzZQotICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogbm8iID4mNQotJGFzX2VjaG8gIm5vIiA+JjY7IH0KLWZpCi0KLSAgaWYgdGVzdCAieCRhY19jdF9TVFJJUCIgPSB4OyB0aGVuCi0gICAgU1RSSVA9IjoiCi0gIGVsc2UKLSAgICBjYXNlICRjcm9zc19jb21waWxpbmc6JGFjX3Rvb2xfd2FybmVkIGluCi15ZXM6KQoteyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBXQVJOSU5HOiB1c2luZyBjcm9zcyB0b29scyBub3QgcHJlZml4ZWQgd2l0aCBob3N0IHRyaXBsZXQiID4mNQotJGFzX2VjaG8gIiRhc19tZTogV0FSTklORzogdXNpbmcgY3Jvc3MgdG9vbHMgbm90IHByZWZpeGVkIHdpdGggaG9zdCB0cmlwbGV0IiA+JjI7fQotYWNfdG9vbF93YXJuZWQ9eWVzIDs7Ci1lc2FjCi0gICAgU1RSSVA9JGFjX2N0X1NUUklQCi0gIGZpCi1lbHNlCi0gIFNUUklQPSIkYWNfY3ZfcHJvZ19TVFJJUCIKLWZpCi0KLWZpCi1JTlNUQUxMX1NUUklQX1BST0dSQU09IlwkKGluc3RhbGxfc2gpIC1jIC1zIgotCi17ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGZvciBhIHRocmVhZC1zYWZlIG1rZGlyIC1wIiA+JjUKLSRhc19lY2hvX24gImNoZWNraW5nIGZvciBhIHRocmVhZC1zYWZlIG1rZGlyIC1wLi4uICIgPiY2OyB9Ci1pZiB0ZXN0IC16ICIkTUtESVJfUCI7IHRoZW4KLSAgaWYgJHthY19jdl9wYXRoX21rZGlyKzp9IGZhbHNlOyB0aGVuIDoKLSAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKLWVsc2UKLSAgYXNfc2F2ZV9JRlM9JElGUzsgSUZTPSRQQVRIX1NFUEFSQVRPUgotZm9yIGFzX2RpciBpbiAkUEFUSCRQQVRIX1NFUEFSQVRPUi9vcHQvc2Z3L2JpbgotZG8KLSAgSUZTPSRhc19zYXZlX0lGUwotICB0ZXN0IC16ICIkYXNfZGlyIiAmJiBhc19kaXI9LgotICAgIGZvciBhY19wcm9nIGluIG1rZGlyIGdta2RpcjsgZG8KLQkgZm9yIGFjX2V4ZWNfZXh0IGluICcnICRhY19leGVjdXRhYmxlX2V4dGVuc2lvbnM7IGRvCi0JICAgeyB0ZXN0IC1mICIkYXNfZGlyLyRhY19wcm9nJGFjX2V4ZWNfZXh0IiAmJiAkYXNfdGVzdF94ICIkYXNfZGlyLyRhY19wcm9nJGFjX2V4ZWNfZXh0IjsgfSB8fCBjb250aW51ZQotCSAgIGNhc2UgYCIkYXNfZGlyLyRhY19wcm9nJGFjX2V4ZWNfZXh0IiAtLXZlcnNpb24gMj4mMWAgaW4gIygKLQkgICAgICdta2RpciAoR05VIGNvcmV1dGlscykgJyogfCBcCi0JICAgICAnbWtkaXIgKGNvcmV1dGlscykgJyogfCBcCi0JICAgICAnbWtkaXIgKGZpbGV1dGlscykgJzQuMSopCi0JICAgICAgIGFjX2N2X3BhdGhfbWtkaXI9JGFzX2Rpci8kYWNfcHJvZyRhY19leGVjX2V4dAotCSAgICAgICBicmVhayAzOzsKLQkgICBlc2FjCi0JIGRvbmUKLSAgICAgICBkb25lCi0gIGRvbmUKLUlGUz0kYXNfc2F2ZV9JRlMKLQotZmkKLQotICB0ZXN0IC1kIC4vLS12ZXJzaW9uICYmIHJtZGlyIC4vLS12ZXJzaW9uCi0gIGlmIHRlc3QgIiR7YWNfY3ZfcGF0aF9ta2RpcitzZXR9IiA9IHNldDsgdGhlbgotICAgIE1LRElSX1A9IiRhY19jdl9wYXRoX21rZGlyIC1wIgotICBlbHNlCi0gICAgIyBBcyBhIGxhc3QgcmVzb3J0LCB1c2UgdGhlIHNsb3cgc2hlbGwgc2NyaXB0LiAgRG9uJ3QgY2FjaGUgYQotICAgICMgdmFsdWUgZm9yIE1LRElSX1Agd2l0aGluIGEgc291cmNlIGRpcmVjdG9yeSwgYmVjYXVzZSB0aGF0IHdpbGwKLSAgICAjIGJyZWFrIG90aGVyIHBhY2thZ2VzIHVzaW5nIHRoZSBjYWNoZSBpZiB0aGF0IGRpcmVjdG9yeSBpcwotICAgICMgcmVtb3ZlZCwgb3IgaWYgdGhlIHZhbHVlIGlzIGEgcmVsYXRpdmUgbmFtZS4KLSAgICBNS0RJUl9QPSIkYWNfaW5zdGFsbF9zaCAtZCIKLSAgZmkKLWZpCi17ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJE1LRElSX1AiID4mNQotJGFzX2VjaG8gIiRNS0RJUl9QIiA+JjY7IH0KLQotbWtkaXJfcD0iJE1LRElSX1AiCi1jYXNlICRta2Rpcl9wIGluCi0gIFtcXC8kXSogfCA/OltcXC9dKikgOzsKLSAgKi8qKSBta2Rpcl9wPSJcJCh0b3BfYnVpbGRkaXIpLyRta2Rpcl9wIiA7OwotZXNhYwotCi1mb3IgYWNfcHJvZyBpbiBnYXdrIG1hd2sgbmF3ayBhd2sKLWRvCi0gICMgRXh0cmFjdCB0aGUgZmlyc3Qgd29yZCBvZiAiJGFjX3Byb2ciLCBzbyBpdCBjYW4gYmUgYSBwcm9ncmFtIG5hbWUgd2l0aCBhcmdzLgotc2V0IGR1bW15ICRhY19wcm9nOyBhY193b3JkPSQyCi17ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGZvciAkYWNfd29yZCIgPiY1Ci0kYXNfZWNob19uICJjaGVja2luZyBmb3IgJGFjX3dvcmQuLi4gIiA+JjY7IH0KLWlmICR7YWNfY3ZfcHJvZ19BV0srOn0gZmFsc2U7IHRoZW4gOgotICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgotZWxzZQotICBpZiB0ZXN0IC1uICIkQVdLIjsgdGhlbgotICBhY19jdl9wcm9nX0FXSz0iJEFXSyIgIyBMZXQgdGhlIHVzZXIgb3ZlcnJpZGUgdGhlIHRlc3QuCi1lbHNlCi1hc19zYXZlX0lGUz0kSUZTOyBJRlM9JFBBVEhfU0VQQVJBVE9SCi1mb3IgYXNfZGlyIGluICRQQVRICi1kbwotICBJRlM9JGFzX3NhdmVfSUZTCi0gIHRlc3QgLXogIiRhc19kaXIiICYmIGFzX2Rpcj0uCi0gICAgZm9yIGFjX2V4ZWNfZXh0IGluICcnICRhY19leGVjdXRhYmxlX2V4dGVuc2lvbnM7IGRvCi0gIGlmIHsgdGVzdCAtZiAiJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCIgJiYgJGFzX3Rlc3RfeCAiJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCI7IH07IHRoZW4KLSAgICBhY19jdl9wcm9nX0FXSz0iJGFjX3Byb2ciCi0gICAgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogZm91bmQgJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCIgPiY1Ci0gICAgYnJlYWsgMgotICBmaQotZG9uZQotICBkb25lCi1JRlM9JGFzX3NhdmVfSUZTCi0KLWZpCi1maQotQVdLPSRhY19jdl9wcm9nX0FXSwotaWYgdGVzdCAtbiAiJEFXSyI7IHRoZW4KLSAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRBV0siID4mNQotJGFzX2VjaG8gIiRBV0siID4mNjsgfQotZWxzZQotICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogbm8iID4mNQotJGFzX2VjaG8gIm5vIiA+JjY7IH0KLWZpCi0KLQotICB0ZXN0IC1uICIkQVdLIiAmJiBicmVhawotZG9uZQotCi17ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIHdoZXRoZXIgJHtNQUtFLW1ha2V9IHNldHMgXCQoTUFLRSkiID4mNQotJGFzX2VjaG9fbiAiY2hlY2tpbmcgd2hldGhlciAke01BS0UtbWFrZX0gc2V0cyBcJChNQUtFKS4uLiAiID4mNjsgfQotc2V0IHggJHtNQUtFLW1ha2V9Ci1hY19tYWtlPWAkYXNfZWNobyAiJDIiIHwgc2VkICdzLysvcC9nOyBzL1teYS16QS1aMC05X10vXy9nJ2AKLWlmIGV2YWwgXCR7YWNfY3ZfcHJvZ19tYWtlXyR7YWNfbWFrZX1fc2V0Kzp9IGZhbHNlOyB0aGVuIDoKLSAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKLWVsc2UKLSAgY2F0ID5jb25mdGVzdC5tYWtlIDw8XF9BQ0VPRgotU0hFTEwgPSAvYmluL3NoCi1hbGw6Ci0JQGVjaG8gJ0BAQCUlJT0kKE1BS0UpPUBAQCUlJScKLV9BQ0VPRgotIyBHTlUgbWFrZSBzb21ldGltZXMgcHJpbnRzICJtYWtlWzFdOiBFbnRlcmluZyAuLi4iLCB3aGljaCB3b3VsZCBjb25mdXNlIHVzLgotY2FzZSBgJHtNQUtFLW1ha2V9IC1mIGNvbmZ0ZXN0Lm1ha2UgMj4vZGV2L251bGxgIGluCi0gICpAQEAlJSU9Pyo9QEBAJSUlKikKLSAgICBldmFsIGFjX2N2X3Byb2dfbWFrZV8ke2FjX21ha2V9X3NldD15ZXM7OwotICAqKQotICAgIGV2YWwgYWNfY3ZfcHJvZ19tYWtlXyR7YWNfbWFrZX1fc2V0PW5vOzsKLWVzYWMKLXJtIC1mIGNvbmZ0ZXN0Lm1ha2UKLWZpCi1pZiBldmFsIHRlc3QgXCRhY19jdl9wcm9nX21ha2VfJHthY19tYWtlfV9zZXQgPSB5ZXM7IHRoZW4KLSAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6IHllcyIgPiY1Ci0kYXNfZWNobyAieWVzIiA+JjY7IH0KLSAgU0VUX01BS0U9Ci1lbHNlCi0gIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiBubyIgPiY1Ci0kYXNfZWNobyAibm8iID4mNjsgfQotICBTRVRfTUFLRT0iTUFLRT0ke01BS0UtbWFrZX0iCi1maQotCi1ybSAtcmYgLnRzdCAyPi9kZXYvbnVsbAotbWtkaXIgLnRzdCAyPi9kZXYvbnVsbAotaWYgdGVzdCAtZCAudHN0OyB0aGVuCi0gIGFtX19sZWFkaW5nX2RvdD0uCi1lbHNlCi0gIGFtX19sZWFkaW5nX2RvdD1fCi1maQotcm1kaXIgLnRzdCAyPi9kZXYvbnVsbAotCi1pZiB0ZXN0ICJgY2QgJHNyY2RpciAmJiBwd2RgIiAhPSAiYHB3ZGAiOyB0aGVuCi0gICMgVXNlIC1JJChzcmNkaXIpIG9ubHkgd2hlbiAkKHNyY2RpcikgIT0gLiwgc28gdGhhdCBtYWtlJ3Mgb3V0cHV0Ci0gICMgaXMgbm90IHBvbGx1dGVkIHdpdGggcmVwZWF0ZWQgIi1JLiIKLSAgYW1fX2lzcmM9JyAtSSQoc3JjZGlyKScKLSAgIyB0ZXN0IHRvIHNlZSBpZiBzcmNkaXIgYWxyZWFkeSBjb25maWd1cmVkCi0gIGlmIHRlc3QgLWYgJHNyY2Rpci9jb25maWcuc3RhdHVzOyB0aGVuCi0gICAgYXNfZm5fZXJyb3IgJD8gInNvdXJjZSBkaXJlY3RvcnkgYWxyZWFkeSBjb25maWd1cmVkOyBydW4gXCJtYWtlIGRpc3RjbGVhblwiIHRoZXJlIGZpcnN0IiAiJExJTkVOTyIgNQotICBmaQotZmkKLQotIyB0ZXN0IHdoZXRoZXIgd2UgaGF2ZSBjeWdwYXRoCi1pZiB0ZXN0IC16ICIkQ1lHUEFUSF9XIjsgdGhlbgotICBpZiAoY3lncGF0aCAtLXZlcnNpb24pID4vZGV2L251bGwgMj4vZGV2L251bGw7IHRoZW4KLSAgICBDWUdQQVRIX1c9J2N5Z3BhdGggLXcnCi0gIGVsc2UKLSAgICBDWUdQQVRIX1c9ZWNobwotICBmaQotZmkKLQotCi0jIERlZmluZSB0aGUgaWRlbnRpdHkgb2YgdGhlIHBhY2thZ2UuCi0gUEFDS0FHRT0nbGlianBlZycKLSBWRVJTSU9OPSc4LjMuMCcKLQotCi1jYXQgPj5jb25mZGVmcy5oIDw8X0FDRU9GCi0jZGVmaW5lIFBBQ0tBR0UgIiRQQUNLQUdFIgotX0FDRU9GCi0KLQotY2F0ID4+Y29uZmRlZnMuaCA8PF9BQ0VPRgotI2RlZmluZSBWRVJTSU9OICIkVkVSU0lPTiIKLV9BQ0VPRgotCi0jIFNvbWUgdG9vbHMgQXV0b21ha2UgbmVlZHMuCi0KLUFDTE9DQUw9JHtBQ0xPQ0FMLSIke2FtX21pc3NpbmdfcnVufWFjbG9jYWwtJHthbV9fYXBpX3ZlcnNpb259In0KLQotCi1BVVRPQ09ORj0ke0FVVE9DT05GLSIke2FtX21pc3NpbmdfcnVufWF1dG9jb25mIn0KLQotCi1BVVRPTUFLRT0ke0FVVE9NQUtFLSIke2FtX21pc3NpbmdfcnVufWF1dG9tYWtlLSR7YW1fX2FwaV92ZXJzaW9ufSJ9Ci0KLQotQVVUT0hFQURFUj0ke0FVVE9IRUFERVItIiR7YW1fbWlzc2luZ19ydW59YXV0b2hlYWRlciJ9Ci0KLQotTUFLRUlORk89JHtNQUtFSU5GTy0iJHthbV9taXNzaW5nX3J1bn1tYWtlaW5mbyJ9Ci0KLSMgV2UgbmVlZCBhd2sgZm9yIHRoZSAiY2hlY2siIHRhcmdldC4gIFRoZSBzeXN0ZW0gImF3ayIgaXMgYmFkIG9uCi0jIHNvbWUgcGxhdGZvcm1zLgotIyBBbHdheXMgZGVmaW5lIEFNVEFSIGZvciBiYWNrd2FyZCBjb21wYXRpYmlsaXR5LgotCi1BTVRBUj0ke0FNVEFSLSIke2FtX21pc3NpbmdfcnVufXRhciJ9Ci0KLWFtX190YXI9JyR7QU1UQVJ9IGNob2YgLSAiJCR0YXJkaXIiJzsgYW1fX3VudGFyPScke0FNVEFSfSB4ZiAtJwotCi0KLQotCi0KLQotIyBNYWtlIC0tZW5hYmxlLXNpbGVudC1ydWxlcyB0aGUgZGVmYXVsdC4KLSMgVG8gZ2V0IHZlcmJvc2UgYnVpbGQgb3V0cHV0IHlvdSBtYXkgY29uZmlndXJlCi0jIHdpdGggLS1kaXNhYmxlLXNpbGVudC1ydWxlcyBvciB1c2UgIm1ha2UgVj0xIi4KLSMgQ2hlY2sgd2hldGhlciAtLWVuYWJsZS1zaWxlbnQtcnVsZXMgd2FzIGdpdmVuLgotaWYgdGVzdCAiJHtlbmFibGVfc2lsZW50X3J1bGVzK3NldH0iID0gc2V0OyB0aGVuIDoKLSAgZW5hYmxldmFsPSRlbmFibGVfc2lsZW50X3J1bGVzOwotZmkKLQotY2FzZSAkZW5hYmxlX3NpbGVudF9ydWxlcyBpbgoteWVzKSBBTV9ERUZBVUxUX1ZFUkJPU0lUWT0wOzsKLW5vKSAgQU1fREVGQVVMVF9WRVJCT1NJVFk9MTs7Ci0qKSAgIEFNX0RFRkFVTFRfVkVSQk9TSVRZPTA7OwotZXNhYwotQU1fQkFDS1NMQVNIPSdcJwotCi0KLSMgVGhpcyBpcyByZXF1aXJlZCB3aGVuIHVzaW5nIHRoZSBkZS1BTlNJLWZpY2F0aW9uIGZlYXR1cmUuCi1ERVBESVI9IiR7YW1fX2xlYWRpbmdfZG90fWRlcHMiCi0KLWFjX2NvbmZpZ19jb21tYW5kcz0iJGFjX2NvbmZpZ19jb21tYW5kcyBkZXBmaWxlcyIKLQotCi1hbV9tYWtlPSR7TUFLRS1tYWtlfQotY2F0ID4gY29uZmluYyA8PCAnRU5EJwotYW1fX2RvaXQ6Ci0JQGVjaG8gdGhpcyBpcyB0aGUgYW1fX2RvaXQgdGFyZ2V0Ci0uUEhPTlk6IGFtX19kb2l0Ci1FTkQKLSMgSWYgd2UgZG9uJ3QgZmluZCBhbiBpbmNsdWRlIGRpcmVjdGl2ZSwganVzdCBjb21tZW50IG91dCB0aGUgY29kZS4KLXsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgZm9yIHN0eWxlIG9mIGluY2x1ZGUgdXNlZCBieSAkYW1fbWFrZSIgPiY1Ci0kYXNfZWNob19uICJjaGVja2luZyBmb3Igc3R5bGUgb2YgaW5jbHVkZSB1c2VkIGJ5ICRhbV9tYWtlLi4uICIgPiY2OyB9Ci1hbV9faW5jbHVkZT0iIyIKLWFtX19xdW90ZT0KLV9hbV9yZXN1bHQ9bm9uZQotIyBGaXJzdCB0cnkgR05VIG1ha2Ugc3R5bGUgaW5jbHVkZS4KLWVjaG8gImluY2x1ZGUgY29uZmluYyIgPiBjb25mbWYKLSMgSWdub3JlIGFsbCBraW5kcyBvZiBhZGRpdGlvbmFsIG91dHB1dCBmcm9tIGBtYWtlJy4KLWNhc2UgYCRhbV9tYWtlIC1zIC1mIGNvbmZtZiAyPiAvZGV2L251bGxgIGluICMoCi0qdGhlXCBhbV9fZG9pdFwgdGFyZ2V0KikKLSAgYW1fX2luY2x1ZGU9aW5jbHVkZQotICBhbV9fcXVvdGU9Ci0gIF9hbV9yZXN1bHQ9R05VCi0gIDs7Ci1lc2FjCi0jIE5vdyB0cnkgQlNEIG1ha2Ugc3R5bGUgaW5jbHVkZS4KLWlmIHRlc3QgIiRhbV9faW5jbHVkZSIgPSAiIyI7IHRoZW4KLSAgIGVjaG8gJy5pbmNsdWRlICJjb25maW5jIicgPiBjb25mbWYKLSAgIGNhc2UgYCRhbV9tYWtlIC1zIC1mIGNvbmZtZiAyPiAvZGV2L251bGxgIGluICMoCi0gICAqdGhlXCBhbV9fZG9pdFwgdGFyZ2V0KikKLSAgICAgYW1fX2luY2x1ZGU9LmluY2x1ZGUKLSAgICAgYW1fX3F1b3RlPSJcIiIKLSAgICAgX2FtX3Jlc3VsdD1CU0QKLSAgICAgOzsKLSAgIGVzYWMKLWZpCi0KLQoteyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRfYW1fcmVzdWx0IiA+JjUKLSRhc19lY2hvICIkX2FtX3Jlc3VsdCIgPiY2OyB9Ci1ybSAtZiBjb25maW5jIGNvbmZtZgotCi0jIENoZWNrIHdoZXRoZXIgLS1lbmFibGUtZGVwZW5kZW5jeS10cmFja2luZyB3YXMgZ2l2ZW4uCi1pZiB0ZXN0ICIke2VuYWJsZV9kZXBlbmRlbmN5X3RyYWNraW5nK3NldH0iID0gc2V0OyB0aGVuIDoKLSAgZW5hYmxldmFsPSRlbmFibGVfZGVwZW5kZW5jeV90cmFja2luZzsKLWZpCi0KLWlmIHRlc3QgIngkZW5hYmxlX2RlcGVuZGVuY3lfdHJhY2tpbmciICE9IHhubzsgdGhlbgotICBhbV9kZXBjb21wPSIkYWNfYXV4X2Rpci9kZXBjb21wIgotICBBTURFUEJBQ0tTTEFTSD0nXCcKLWZpCi0gaWYgdGVzdCAieCRlbmFibGVfZGVwZW5kZW5jeV90cmFja2luZyIgIT0geG5vOyB0aGVuCi0gIEFNREVQX1RSVUU9Ci0gIEFNREVQX0ZBTFNFPScjJwotZWxzZQotICBBTURFUF9UUlVFPScjJwotICBBTURFUF9GQUxTRT0KLWZpCi0KLQotYWNfZXh0PWMKLWFjX2NwcD0nJENQUCAkQ1BQRkxBR1MnCi1hY19jb21waWxlPSckQ0MgLWMgJENGTEFHUyAkQ1BQRkxBR1MgY29uZnRlc3QuJGFjX2V4dCA+JjUnCi1hY19saW5rPSckQ0MgLW8gY29uZnRlc3QkYWNfZXhlZXh0ICRDRkxBR1MgJENQUEZMQUdTICRMREZMQUdTIGNvbmZ0ZXN0LiRhY19leHQgJExJQlMgPiY1JwotYWNfY29tcGlsZXJfZ251PSRhY19jdl9jX2NvbXBpbGVyX2dudQotaWYgdGVzdCAtbiAiJGFjX3Rvb2xfcHJlZml4IjsgdGhlbgotICAjIEV4dHJhY3QgdGhlIGZpcnN0IHdvcmQgb2YgIiR7YWNfdG9vbF9wcmVmaXh9Z2NjIiwgc28gaXQgY2FuIGJlIGEgcHJvZ3JhbSBuYW1lIHdpdGggYXJncy4KLXNldCBkdW1teSAke2FjX3Rvb2xfcHJlZml4fWdjYzsgYWNfd29yZD0kMgoteyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBmb3IgJGFjX3dvcmQiID4mNQotJGFzX2VjaG9fbiAiY2hlY2tpbmcgZm9yICRhY193b3JkLi4uICIgPiY2OyB9Ci1pZiAke2FjX2N2X3Byb2dfQ0MrOn0gZmFsc2U7IHRoZW4gOgotICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgotZWxzZQotICBpZiB0ZXN0IC1uICIkQ0MiOyB0aGVuCi0gIGFjX2N2X3Byb2dfQ0M9IiRDQyIgIyBMZXQgdGhlIHVzZXIgb3ZlcnJpZGUgdGhlIHRlc3QuCi1lbHNlCi1hc19zYXZlX0lGUz0kSUZTOyBJRlM9JFBBVEhfU0VQQVJBVE9SCi1mb3IgYXNfZGlyIGluICRQQVRICi1kbwotICBJRlM9JGFzX3NhdmVfSUZTCi0gIHRlc3QgLXogIiRhc19kaXIiICYmIGFzX2Rpcj0uCi0gICAgZm9yIGFjX2V4ZWNfZXh0IGluICcnICRhY19leGVjdXRhYmxlX2V4dGVuc2lvbnM7IGRvCi0gIGlmIHsgdGVzdCAtZiAiJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCIgJiYgJGFzX3Rlc3RfeCAiJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCI7IH07IHRoZW4KLSAgICBhY19jdl9wcm9nX0NDPSIke2FjX3Rvb2xfcHJlZml4fWdjYyIKLSAgICAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBmb3VuZCAkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IiA+JjUKLSAgICBicmVhayAyCi0gIGZpCi1kb25lCi0gIGRvbmUKLUlGUz0kYXNfc2F2ZV9JRlMKLQotZmkKLWZpCi1DQz0kYWNfY3ZfcHJvZ19DQwotaWYgdGVzdCAtbiAiJENDIjsgdGhlbgotICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJENDIiA+JjUKLSRhc19lY2hvICIkQ0MiID4mNjsgfQotZWxzZQotICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogbm8iID4mNQotJGFzX2VjaG8gIm5vIiA+JjY7IH0KLWZpCi0KLQotZmkKLWlmIHRlc3QgLXogIiRhY19jdl9wcm9nX0NDIjsgdGhlbgotICBhY19jdF9DQz0kQ0MKLSAgIyBFeHRyYWN0IHRoZSBmaXJzdCB3b3JkIG9mICJnY2MiLCBzbyBpdCBjYW4gYmUgYSBwcm9ncmFtIG5hbWUgd2l0aCBhcmdzLgotc2V0IGR1bW15IGdjYzsgYWNfd29yZD0kMgoteyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBmb3IgJGFjX3dvcmQiID4mNQotJGFzX2VjaG9fbiAiY2hlY2tpbmcgZm9yICRhY193b3JkLi4uICIgPiY2OyB9Ci1pZiAke2FjX2N2X3Byb2dfYWNfY3RfQ0MrOn0gZmFsc2U7IHRoZW4gOgotICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgotZWxzZQotICBpZiB0ZXN0IC1uICIkYWNfY3RfQ0MiOyB0aGVuCi0gIGFjX2N2X3Byb2dfYWNfY3RfQ0M9IiRhY19jdF9DQyIgIyBMZXQgdGhlIHVzZXIgb3ZlcnJpZGUgdGhlIHRlc3QuCi1lbHNlCi1hc19zYXZlX0lGUz0kSUZTOyBJRlM9JFBBVEhfU0VQQVJBVE9SCi1mb3IgYXNfZGlyIGluICRQQVRICi1kbwotICBJRlM9JGFzX3NhdmVfSUZTCi0gIHRlc3QgLXogIiRhc19kaXIiICYmIGFzX2Rpcj0uCi0gICAgZm9yIGFjX2V4ZWNfZXh0IGluICcnICRhY19leGVjdXRhYmxlX2V4dGVuc2lvbnM7IGRvCi0gIGlmIHsgdGVzdCAtZiAiJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCIgJiYgJGFzX3Rlc3RfeCAiJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCI7IH07IHRoZW4KLSAgICBhY19jdl9wcm9nX2FjX2N0X0NDPSJnY2MiCi0gICAgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogZm91bmQgJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCIgPiY1Ci0gICAgYnJlYWsgMgotICBmaQotZG9uZQotICBkb25lCi1JRlM9JGFzX3NhdmVfSUZTCi0KLWZpCi1maQotYWNfY3RfQ0M9JGFjX2N2X3Byb2dfYWNfY3RfQ0MKLWlmIHRlc3QgLW4gIiRhY19jdF9DQyI7IHRoZW4KLSAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRhY19jdF9DQyIgPiY1Ci0kYXNfZWNobyAiJGFjX2N0X0NDIiA+JjY7IH0KLWVsc2UKLSAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6IG5vIiA+JjUKLSRhc19lY2hvICJubyIgPiY2OyB9Ci1maQotCi0gIGlmIHRlc3QgIngkYWNfY3RfQ0MiID0geDsgdGhlbgotICAgIENDPSIiCi0gIGVsc2UKLSAgICBjYXNlICRjcm9zc19jb21waWxpbmc6JGFjX3Rvb2xfd2FybmVkIGluCi15ZXM6KQoteyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBXQVJOSU5HOiB1c2luZyBjcm9zcyB0b29scyBub3QgcHJlZml4ZWQgd2l0aCBob3N0IHRyaXBsZXQiID4mNQotJGFzX2VjaG8gIiRhc19tZTogV0FSTklORzogdXNpbmcgY3Jvc3MgdG9vbHMgbm90IHByZWZpeGVkIHdpdGggaG9zdCB0cmlwbGV0IiA+JjI7fQotYWNfdG9vbF93YXJuZWQ9eWVzIDs7Ci1lc2FjCi0gICAgQ0M9JGFjX2N0X0NDCi0gIGZpCi1lbHNlCi0gIENDPSIkYWNfY3ZfcHJvZ19DQyIKLWZpCi0KLWlmIHRlc3QgLXogIiRDQyI7IHRoZW4KLSAgICAgICAgICBpZiB0ZXN0IC1uICIkYWNfdG9vbF9wcmVmaXgiOyB0aGVuCi0gICAgIyBFeHRyYWN0IHRoZSBmaXJzdCB3b3JkIG9mICIke2FjX3Rvb2xfcHJlZml4fWNjIiwgc28gaXQgY2FuIGJlIGEgcHJvZ3JhbSBuYW1lIHdpdGggYXJncy4KLXNldCBkdW1teSAke2FjX3Rvb2xfcHJlZml4fWNjOyBhY193b3JkPSQyCi17ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGZvciAkYWNfd29yZCIgPiY1Ci0kYXNfZWNob19uICJjaGVja2luZyBmb3IgJGFjX3dvcmQuLi4gIiA+JjY7IH0KLWlmICR7YWNfY3ZfcHJvZ19DQys6fSBmYWxzZTsgdGhlbiA6Ci0gICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2Ci1lbHNlCi0gIGlmIHRlc3QgLW4gIiRDQyI7IHRoZW4KLSAgYWNfY3ZfcHJvZ19DQz0iJENDIiAjIExldCB0aGUgdXNlciBvdmVycmlkZSB0aGUgdGVzdC4KLWVsc2UKLWFzX3NhdmVfSUZTPSRJRlM7IElGUz0kUEFUSF9TRVBBUkFUT1IKLWZvciBhc19kaXIgaW4gJFBBVEgKLWRvCi0gIElGUz0kYXNfc2F2ZV9JRlMKLSAgdGVzdCAteiAiJGFzX2RpciIgJiYgYXNfZGlyPS4KLSAgICBmb3IgYWNfZXhlY19leHQgaW4gJycgJGFjX2V4ZWN1dGFibGVfZXh0ZW5zaW9uczsgZG8KLSAgaWYgeyB0ZXN0IC1mICIkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IiAmJiAkYXNfdGVzdF94ICIkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IjsgfTsgdGhlbgotICAgIGFjX2N2X3Byb2dfQ0M9IiR7YWNfdG9vbF9wcmVmaXh9Y2MiCi0gICAgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogZm91bmQgJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCIgPiY1Ci0gICAgYnJlYWsgMgotICBmaQotZG9uZQotICBkb25lCi1JRlM9JGFzX3NhdmVfSUZTCi0KLWZpCi1maQotQ0M9JGFjX2N2X3Byb2dfQ0MKLWlmIHRlc3QgLW4gIiRDQyI7IHRoZW4KLSAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRDQyIgPiY1Ci0kYXNfZWNobyAiJENDIiA+JjY7IH0KLWVsc2UKLSAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6IG5vIiA+JjUKLSRhc19lY2hvICJubyIgPiY2OyB9Ci1maQotCi0KLSAgZmkKLWZpCi1pZiB0ZXN0IC16ICIkQ0MiOyB0aGVuCi0gICMgRXh0cmFjdCB0aGUgZmlyc3Qgd29yZCBvZiAiY2MiLCBzbyBpdCBjYW4gYmUgYSBwcm9ncmFtIG5hbWUgd2l0aCBhcmdzLgotc2V0IGR1bW15IGNjOyBhY193b3JkPSQyCi17ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGZvciAkYWNfd29yZCIgPiY1Ci0kYXNfZWNob19uICJjaGVja2luZyBmb3IgJGFjX3dvcmQuLi4gIiA+JjY7IH0KLWlmICR7YWNfY3ZfcHJvZ19DQys6fSBmYWxzZTsgdGhlbiA6Ci0gICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2Ci1lbHNlCi0gIGlmIHRlc3QgLW4gIiRDQyI7IHRoZW4KLSAgYWNfY3ZfcHJvZ19DQz0iJENDIiAjIExldCB0aGUgdXNlciBvdmVycmlkZSB0aGUgdGVzdC4KLWVsc2UKLSAgYWNfcHJvZ19yZWplY3RlZD1ubwotYXNfc2F2ZV9JRlM9JElGUzsgSUZTPSRQQVRIX1NFUEFSQVRPUgotZm9yIGFzX2RpciBpbiAkUEFUSAotZG8KLSAgSUZTPSRhc19zYXZlX0lGUwotICB0ZXN0IC16ICIkYXNfZGlyIiAmJiBhc19kaXI9LgotICAgIGZvciBhY19leGVjX2V4dCBpbiAnJyAkYWNfZXhlY3V0YWJsZV9leHRlbnNpb25zOyBkbwotICBpZiB7IHRlc3QgLWYgIiRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiICYmICRhc190ZXN0X3ggIiRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiOyB9OyB0aGVuCi0gICAgaWYgdGVzdCAiJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCIgPSAiL3Vzci91Y2IvY2MiOyB0aGVuCi0gICAgICAgYWNfcHJvZ19yZWplY3RlZD15ZXMKLSAgICAgICBjb250aW51ZQotICAgICBmaQotICAgIGFjX2N2X3Byb2dfQ0M9ImNjIgotICAgICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGZvdW5kICRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiID4mNQotICAgIGJyZWFrIDIKLSAgZmkKLWRvbmUKLSAgZG9uZQotSUZTPSRhc19zYXZlX0lGUwotCi1pZiB0ZXN0ICRhY19wcm9nX3JlamVjdGVkID0geWVzOyB0aGVuCi0gICMgV2UgZm91bmQgYSBib2dvbiBpbiB0aGUgcGF0aCwgc28gbWFrZSBzdXJlIHdlIG5ldmVyIHVzZSBpdC4KLSAgc2V0IGR1bW15ICRhY19jdl9wcm9nX0NDCi0gIHNoaWZ0Ci0gIGlmIHRlc3QgJCMgIT0gMDsgdGhlbgotICAgICMgV2UgY2hvc2UgYSBkaWZmZXJlbnQgY29tcGlsZXIgZnJvbSB0aGUgYm9ndXMgb25lLgotICAgICMgSG93ZXZlciwgaXQgaGFzIHRoZSBzYW1lIGJhc2VuYW1lLCBzbyB0aGUgYm9nb24gd2lsbCBiZSBjaG9zZW4KLSAgICAjIGZpcnN0IGlmIHdlIHNldCBDQyB0byBqdXN0IHRoZSBiYXNlbmFtZTsgdXNlIHRoZSBmdWxsIGZpbGUgbmFtZS4KLSAgICBzaGlmdAotICAgIGFjX2N2X3Byb2dfQ0M9IiRhc19kaXIvJGFjX3dvcmQkezErJyAnfSRAIgotICBmaQotZmkKLWZpCi1maQotQ0M9JGFjX2N2X3Byb2dfQ0MKLWlmIHRlc3QgLW4gIiRDQyI7IHRoZW4KLSAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRDQyIgPiY1Ci0kYXNfZWNobyAiJENDIiA+JjY7IH0KLWVsc2UKLSAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6IG5vIiA+JjUKLSRhc19lY2hvICJubyIgPiY2OyB9Ci1maQotCi0KLWZpCi1pZiB0ZXN0IC16ICIkQ0MiOyB0aGVuCi0gIGlmIHRlc3QgLW4gIiRhY190b29sX3ByZWZpeCI7IHRoZW4KLSAgZm9yIGFjX3Byb2cgaW4gY2wuZXhlCi0gIGRvCi0gICAgIyBFeHRyYWN0IHRoZSBmaXJzdCB3b3JkIG9mICIkYWNfdG9vbF9wcmVmaXgkYWNfcHJvZyIsIHNvIGl0IGNhbiBiZSBhIHByb2dyYW0gbmFtZSB3aXRoIGFyZ3MuCi1zZXQgZHVtbXkgJGFjX3Rvb2xfcHJlZml4JGFjX3Byb2c7IGFjX3dvcmQ9JDIKLXsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgZm9yICRhY193b3JkIiA+JjUKLSRhc19lY2hvX24gImNoZWNraW5nIGZvciAkYWNfd29yZC4uLiAiID4mNjsgfQotaWYgJHthY19jdl9wcm9nX0NDKzp9IGZhbHNlOyB0aGVuIDoKLSAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKLWVsc2UKLSAgaWYgdGVzdCAtbiAiJENDIjsgdGhlbgotICBhY19jdl9wcm9nX0NDPSIkQ0MiICMgTGV0IHRoZSB1c2VyIG92ZXJyaWRlIHRoZSB0ZXN0LgotZWxzZQotYXNfc2F2ZV9JRlM9JElGUzsgSUZTPSRQQVRIX1NFUEFSQVRPUgotZm9yIGFzX2RpciBpbiAkUEFUSAotZG8KLSAgSUZTPSRhc19zYXZlX0lGUwotICB0ZXN0IC16ICIkYXNfZGlyIiAmJiBhc19kaXI9LgotICAgIGZvciBhY19leGVjX2V4dCBpbiAnJyAkYWNfZXhlY3V0YWJsZV9leHRlbnNpb25zOyBkbwotICBpZiB7IHRlc3QgLWYgIiRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiICYmICRhc190ZXN0X3ggIiRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiOyB9OyB0aGVuCi0gICAgYWNfY3ZfcHJvZ19DQz0iJGFjX3Rvb2xfcHJlZml4JGFjX3Byb2ciCi0gICAgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogZm91bmQgJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCIgPiY1Ci0gICAgYnJlYWsgMgotICBmaQotZG9uZQotICBkb25lCi1JRlM9JGFzX3NhdmVfSUZTCi0KLWZpCi1maQotQ0M9JGFjX2N2X3Byb2dfQ0MKLWlmIHRlc3QgLW4gIiRDQyI7IHRoZW4KLSAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRDQyIgPiY1Ci0kYXNfZWNobyAiJENDIiA+JjY7IH0KLWVsc2UKLSAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6IG5vIiA+JjUKLSRhc19lY2hvICJubyIgPiY2OyB9Ci1maQotCi0KLSAgICB0ZXN0IC1uICIkQ0MiICYmIGJyZWFrCi0gIGRvbmUKLWZpCi1pZiB0ZXN0IC16ICIkQ0MiOyB0aGVuCi0gIGFjX2N0X0NDPSRDQwotICBmb3IgYWNfcHJvZyBpbiBjbC5leGUKLWRvCi0gICMgRXh0cmFjdCB0aGUgZmlyc3Qgd29yZCBvZiAiJGFjX3Byb2ciLCBzbyBpdCBjYW4gYmUgYSBwcm9ncmFtIG5hbWUgd2l0aCBhcmdzLgotc2V0IGR1bW15ICRhY19wcm9nOyBhY193b3JkPSQyCi17ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGZvciAkYWNfd29yZCIgPiY1Ci0kYXNfZWNob19uICJjaGVja2luZyBmb3IgJGFjX3dvcmQuLi4gIiA+JjY7IH0KLWlmICR7YWNfY3ZfcHJvZ19hY19jdF9DQys6fSBmYWxzZTsgdGhlbiA6Ci0gICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2Ci1lbHNlCi0gIGlmIHRlc3QgLW4gIiRhY19jdF9DQyI7IHRoZW4KLSAgYWNfY3ZfcHJvZ19hY19jdF9DQz0iJGFjX2N0X0NDIiAjIExldCB0aGUgdXNlciBvdmVycmlkZSB0aGUgdGVzdC4KLWVsc2UKLWFzX3NhdmVfSUZTPSRJRlM7IElGUz0kUEFUSF9TRVBBUkFUT1IKLWZvciBhc19kaXIgaW4gJFBBVEgKLWRvCi0gIElGUz0kYXNfc2F2ZV9JRlMKLSAgdGVzdCAteiAiJGFzX2RpciIgJiYgYXNfZGlyPS4KLSAgICBmb3IgYWNfZXhlY19leHQgaW4gJycgJGFjX2V4ZWN1dGFibGVfZXh0ZW5zaW9uczsgZG8KLSAgaWYgeyB0ZXN0IC1mICIkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IiAmJiAkYXNfdGVzdF94ICIkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IjsgfTsgdGhlbgotICAgIGFjX2N2X3Byb2dfYWNfY3RfQ0M9IiRhY19wcm9nIgotICAgICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGZvdW5kICRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiID4mNQotICAgIGJyZWFrIDIKLSAgZmkKLWRvbmUKLSAgZG9uZQotSUZTPSRhc19zYXZlX0lGUwotCi1maQotZmkKLWFjX2N0X0NDPSRhY19jdl9wcm9nX2FjX2N0X0NDCi1pZiB0ZXN0IC1uICIkYWNfY3RfQ0MiOyB0aGVuCi0gIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkYWNfY3RfQ0MiID4mNQotJGFzX2VjaG8gIiRhY19jdF9DQyIgPiY2OyB9Ci1lbHNlCi0gIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiBubyIgPiY1Ci0kYXNfZWNobyAibm8iID4mNjsgfQotZmkKLQotCi0gIHRlc3QgLW4gIiRhY19jdF9DQyIgJiYgYnJlYWsKLWRvbmUKLQotICBpZiB0ZXN0ICJ4JGFjX2N0X0NDIiA9IHg7IHRoZW4KLSAgICBDQz0iIgotICBlbHNlCi0gICAgY2FzZSAkY3Jvc3NfY29tcGlsaW5nOiRhY190b29sX3dhcm5lZCBpbgoteWVzOikKLXsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogV0FSTklORzogdXNpbmcgY3Jvc3MgdG9vbHMgbm90IHByZWZpeGVkIHdpdGggaG9zdCB0cmlwbGV0IiA+JjUKLSRhc19lY2hvICIkYXNfbWU6IFdBUk5JTkc6IHVzaW5nIGNyb3NzIHRvb2xzIG5vdCBwcmVmaXhlZCB3aXRoIGhvc3QgdHJpcGxldCIgPiYyO30KLWFjX3Rvb2xfd2FybmVkPXllcyA7OwotZXNhYwotICAgIENDPSRhY19jdF9DQwotICBmaQotZmkKLQotZmkKLQotCi10ZXN0IC16ICIkQ0MiICYmIHsgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBlcnJvcjogaW4gXGAkYWNfcHdkJzoiID4mNQotJGFzX2VjaG8gIiRhc19tZTogZXJyb3I6IGluIFxgJGFjX3B3ZCc6IiA+JjI7fQotYXNfZm5fZXJyb3IgJD8gIm5vIGFjY2VwdGFibGUgQyBjb21waWxlciBmb3VuZCBpbiBcJFBBVEgKLVNlZSBcYGNvbmZpZy5sb2cnIGZvciBtb3JlIGRldGFpbHMiICIkTElORU5PIiA1OyB9Ci0KLSMgUHJvdmlkZSBzb21lIGluZm9ybWF0aW9uIGFib3V0IHRoZSBjb21waWxlci4KLSRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGZvciBDIGNvbXBpbGVyIHZlcnNpb24iID4mNQotc2V0IFggJGFjX2NvbXBpbGUKLWFjX2NvbXBpbGVyPSQyCi1mb3IgYWNfb3B0aW9uIGluIC0tdmVyc2lvbiAtdiAtViAtcXZlcnNpb247IGRvCi0gIHsgeyBhY190cnk9IiRhY19jb21waWxlciAkYWNfb3B0aW9uID4mNSIKLWNhc2UgIigoJGFjX3RyeSIgaW4KLSAgKlwiKiB8ICpcYCogfCAqXFwqKSBhY190cnlfZWNobz1cJGFjX3RyeTs7Ci0gICopIGFjX3RyeV9lY2hvPSRhY190cnk7OwotZXNhYwotZXZhbCBhY190cnlfZWNobz0iXCJcJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiAkYWNfdHJ5X2VjaG9cIiIKLSRhc19lY2hvICIkYWNfdHJ5X2VjaG8iOyB9ID4mNQotICAoZXZhbCAiJGFjX2NvbXBpbGVyICRhY19vcHRpb24gPiY1IikgMj5jb25mdGVzdC5lcnIKLSAgYWNfc3RhdHVzPSQ/Ci0gIGlmIHRlc3QgLXMgY29uZnRlc3QuZXJyOyB0aGVuCi0gICAgc2VkICcxMGFcCi0uLi4gcmVzdCBvZiBzdGRlcnIgb3V0cHV0IGRlbGV0ZWQgLi4uCi0gICAgICAgICAxMHEnIGNvbmZ0ZXN0LmVyciA+Y29uZnRlc3QuZXIxCi0gICAgY2F0IGNvbmZ0ZXN0LmVyMSA+JjUKLSAgZmkKLSAgcm0gLWYgY29uZnRlc3QuZXIxIGNvbmZ0ZXN0LmVycgotICAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKLSAgdGVzdCAkYWNfc3RhdHVzID0gMDsgfQotZG9uZQotCi1jYXQgY29uZmRlZnMuaCAtIDw8X0FDRU9GID5jb25mdGVzdC4kYWNfZXh0Ci0vKiBlbmQgY29uZmRlZnMuaC4gICovCi0KLWludAotbWFpbiAoKQotewotCi0gIDsKLSAgcmV0dXJuIDA7Ci19Ci1fQUNFT0YKLWFjX2NsZWFuX2ZpbGVzX3NhdmU9JGFjX2NsZWFuX2ZpbGVzCi1hY19jbGVhbl9maWxlcz0iJGFjX2NsZWFuX2ZpbGVzIGEub3V0IGEub3V0LmRTWU0gYS5leGUgYi5vdXQiCi0jIFRyeSB0byBjcmVhdGUgYW4gZXhlY3V0YWJsZSB3aXRob3V0IC1vIGZpcnN0LCBkaXNyZWdhcmQgYS5vdXQuCi0jIEl0IHdpbGwgaGVscCB1cyBkaWFnbm9zZSBicm9rZW4gY29tcGlsZXJzLCBhbmQgZmluZGluZyBvdXQgYW4gaW50dWl0aW9uCi0jIG9mIGV4ZWV4dC4KLXsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgd2hldGhlciB0aGUgQyBjb21waWxlciB3b3JrcyIgPiY1Ci0kYXNfZWNob19uICJjaGVja2luZyB3aGV0aGVyIHRoZSBDIGNvbXBpbGVyIHdvcmtzLi4uICIgPiY2OyB9Ci1hY19saW5rX2RlZmF1bHQ9YCRhc19lY2hvICIkYWNfbGluayIgfCBzZWQgJ3MvIC1vICpjb25mdGVzdFteIF0qLy8nYAotCi0jIFRoZSBwb3NzaWJsZSBvdXRwdXQgZmlsZXM6Ci1hY19maWxlcz0iYS5vdXQgY29uZnRlc3QuZXhlIGNvbmZ0ZXN0IGEuZXhlIGFfb3V0LmV4ZSBiLm91dCBjb25mdGVzdC4qIgotCi1hY19ybWZpbGVzPQotZm9yIGFjX2ZpbGUgaW4gJGFjX2ZpbGVzCi1kbwotICBjYXNlICRhY19maWxlIGluCi0gICAgKi4kYWNfZXh0IHwgKi54Y29mZiB8ICoudGRzIHwgKi5kIHwgKi5wZGIgfCAqLnhTWU0gfCAqLmJiIHwgKi5iYmcgfCAqLm1hcCB8ICouaW5mIHwgKi5kU1lNIHwgKi5vIHwgKi5vYmogKSA7OwotICAgICogKSBhY19ybWZpbGVzPSIkYWNfcm1maWxlcyAkYWNfZmlsZSI7OwotICBlc2FjCi1kb25lCi1ybSAtZiAkYWNfcm1maWxlcwotCi1pZiB7IHsgYWNfdHJ5PSIkYWNfbGlua19kZWZhdWx0IgotY2FzZSAiKCgkYWNfdHJ5IiBpbgotICAqXCIqIHwgKlxgKiB8ICpcXCopIGFjX3RyeV9lY2hvPVwkYWNfdHJ5OzsKLSAgKikgYWNfdHJ5X2VjaG89JGFjX3RyeTs7Ci1lc2FjCi1ldmFsIGFjX3RyeV9lY2hvPSJcIlwkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306ICRhY190cnlfZWNob1wiIgotJGFzX2VjaG8gIiRhY190cnlfZWNobyI7IH0gPiY1Ci0gIChldmFsICIkYWNfbGlua19kZWZhdWx0IikgMj4mNQotICBhY19zdGF0dXM9JD8KLSAgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1Ci0gIHRlc3QgJGFjX3N0YXR1cyA9IDA7IH07IHRoZW4gOgotICAjIEF1dG9jb25mLTIuMTMgY291bGQgc2V0IHRoZSBhY19jdl9leGVleHQgdmFyaWFibGUgdG8gYG5vJy4KLSMgU28gaWdub3JlIGEgdmFsdWUgb2YgYG5vJywgb3RoZXJ3aXNlIHRoaXMgd291bGQgbGVhZCB0byBgRVhFRVhUID0gbm8nCi0jIGluIGEgTWFrZWZpbGUuICBXZSBzaG91bGQgbm90IG92ZXJyaWRlIGFjX2N2X2V4ZWV4dCBpZiBpdCB3YXMgY2FjaGVkLAotIyBzbyB0aGF0IHRoZSB1c2VyIGNhbiBzaG9ydC1jaXJjdWl0IHRoaXMgdGVzdCBmb3IgY29tcGlsZXJzIHVua25vd24gdG8KLSMgQXV0b2NvbmYuCi1mb3IgYWNfZmlsZSBpbiAkYWNfZmlsZXMgJycKLWRvCi0gIHRlc3QgLWYgIiRhY19maWxlIiB8fCBjb250aW51ZQotICBjYXNlICRhY19maWxlIGluCi0gICAgKi4kYWNfZXh0IHwgKi54Y29mZiB8ICoudGRzIHwgKi5kIHwgKi5wZGIgfCAqLnhTWU0gfCAqLmJiIHwgKi5iYmcgfCAqLm1hcCB8ICouaW5mIHwgKi5kU1lNIHwgKi5vIHwgKi5vYmogKQotCTs7Ci0gICAgW2FiXS5vdXQgKQotCSMgV2UgZm91bmQgdGhlIGRlZmF1bHQgZXhlY3V0YWJsZSwgYnV0IGV4ZWV4dD0nJyBpcyBtb3N0Ci0JIyBjZXJ0YWlubHkgcmlnaHQuCi0JYnJlYWs7OwotICAgICouKiApCi0JaWYgdGVzdCAiJHthY19jdl9leGVleHQrc2V0fSIgPSBzZXQgJiYgdGVzdCAiJGFjX2N2X2V4ZWV4dCIgIT0gbm87Ci0JdGhlbiA6OyBlbHNlCi0JICAgYWNfY3ZfZXhlZXh0PWBleHByICIkYWNfZmlsZSIgOiAnW14uXSpcKFwuLipcKSdgCi0JZmkKLQkjIFdlIHNldCBhY19jdl9leGVleHQgaGVyZSBiZWNhdXNlIHRoZSBsYXRlciB0ZXN0IGZvciBpdCBpcyBub3QKLQkjIHNhZmU6IGNyb3NzIGNvbXBpbGVycyBtYXkgbm90IGFkZCB0aGUgc3VmZml4IGlmIGdpdmVuIGFuIGAtbycKLQkjIGFyZ3VtZW50LCBzbyB3ZSBtYXkgbmVlZCB0byBrbm93IGl0IGF0IHRoYXQgcG9pbnQgYWxyZWFkeS4KLQkjIEV2ZW4gaWYgdGhpcyBzZWN0aW9uIGxvb2tzIGNydWZ0eTogaXQgaGFzIHRoZSBhZHZhbnRhZ2Ugb2YKLQkjIGFjdHVhbGx5IHdvcmtpbmcuCi0JYnJlYWs7OwotICAgICogKQotCWJyZWFrOzsKLSAgZXNhYwotZG9uZQotdGVzdCAiJGFjX2N2X2V4ZWV4dCIgPSBubyAmJiBhY19jdl9leGVleHQ9Ci0KLWVsc2UKLSAgYWNfZmlsZT0nJwotZmkKLWlmIHRlc3QgLXogIiRhY19maWxlIjsgdGhlbiA6Ci0gIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiBubyIgPiY1Ci0kYXNfZWNobyAibm8iID4mNjsgfQotJGFzX2VjaG8gIiRhc19tZTogZmFpbGVkIHByb2dyYW0gd2FzOiIgPiY1Ci1zZWQgJ3MvXi98IC8nIGNvbmZ0ZXN0LiRhY19leHQgPiY1Ci0KLXsgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBlcnJvcjogaW4gXGAkYWNfcHdkJzoiID4mNQotJGFzX2VjaG8gIiRhc19tZTogZXJyb3I6IGluIFxgJGFjX3B3ZCc6IiA+JjI7fQotYXNfZm5fZXJyb3IgNzcgIkMgY29tcGlsZXIgY2Fubm90IGNyZWF0ZSBleGVjdXRhYmxlcwotU2VlIFxgY29uZmlnLmxvZycgZm9yIG1vcmUgZGV0YWlscyIgIiRMSU5FTk8iIDU7IH0KLWVsc2UKLSAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6IHllcyIgPiY1Ci0kYXNfZWNobyAieWVzIiA+JjY7IH0KLWZpCi17ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGZvciBDIGNvbXBpbGVyIGRlZmF1bHQgb3V0cHV0IGZpbGUgbmFtZSIgPiY1Ci0kYXNfZWNob19uICJjaGVja2luZyBmb3IgQyBjb21waWxlciBkZWZhdWx0IG91dHB1dCBmaWxlIG5hbWUuLi4gIiA+JjY7IH0KLXsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkYWNfZmlsZSIgPiY1Ci0kYXNfZWNobyAiJGFjX2ZpbGUiID4mNjsgfQotYWNfZXhlZXh0PSRhY19jdl9leGVleHQKLQotcm0gLWYgLXIgYS5vdXQgYS5vdXQuZFNZTSBhLmV4ZSBjb25mdGVzdCRhY19jdl9leGVleHQgYi5vdXQKLWFjX2NsZWFuX2ZpbGVzPSRhY19jbGVhbl9maWxlc19zYXZlCi17ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGZvciBzdWZmaXggb2YgZXhlY3V0YWJsZXMiID4mNQotJGFzX2VjaG9fbiAiY2hlY2tpbmcgZm9yIHN1ZmZpeCBvZiBleGVjdXRhYmxlcy4uLiAiID4mNjsgfQotaWYgeyB7IGFjX3RyeT0iJGFjX2xpbmsiCi1jYXNlICIoKCRhY190cnkiIGluCi0gICpcIiogfCAqXGAqIHwgKlxcKikgYWNfdHJ5X2VjaG89XCRhY190cnk7OwotICAqKSBhY190cnlfZWNobz0kYWNfdHJ5OzsKLWVzYWMKLWV2YWwgYWNfdHJ5X2VjaG89IlwiXCRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogJGFjX3RyeV9lY2hvXCIiCi0kYXNfZWNobyAiJGFjX3RyeV9lY2hvIjsgfSA+JjUKLSAgKGV2YWwgIiRhY19saW5rIikgMj4mNQotICBhY19zdGF0dXM9JD8KLSAgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1Ci0gIHRlc3QgJGFjX3N0YXR1cyA9IDA7IH07IHRoZW4gOgotICAjIElmIGJvdGggYGNvbmZ0ZXN0LmV4ZScgYW5kIGBjb25mdGVzdCcgYXJlIGBwcmVzZW50JyAod2VsbCwgb2JzZXJ2YWJsZSkKLSMgY2F0Y2ggYGNvbmZ0ZXN0LmV4ZScuICBGb3IgaW5zdGFuY2Ugd2l0aCBDeWd3aW4sIGBscyBjb25mdGVzdCcgd2lsbAotIyB3b3JrIHByb3Blcmx5IChpLmUuLCByZWZlciB0byBgY29uZnRlc3QuZXhlJyksIHdoaWxlIGl0IHdvbid0IHdpdGgKLSMgYHJtJy4KLWZvciBhY19maWxlIGluIGNvbmZ0ZXN0LmV4ZSBjb25mdGVzdCBjb25mdGVzdC4qOyBkbwotICB0ZXN0IC1mICIkYWNfZmlsZSIgfHwgY29udGludWUKLSAgY2FzZSAkYWNfZmlsZSBpbgotICAgICouJGFjX2V4dCB8ICoueGNvZmYgfCAqLnRkcyB8ICouZCB8ICoucGRiIHwgKi54U1lNIHwgKi5iYiB8ICouYmJnIHwgKi5tYXAgfCAqLmluZiB8ICouZFNZTSB8ICoubyB8ICoub2JqICkgOzsKLSAgICAqLiogKSBhY19jdl9leGVleHQ9YGV4cHIgIiRhY19maWxlIiA6ICdbXi5dKlwoXC4uKlwpJ2AKLQkgIGJyZWFrOzsKLSAgICAqICkgYnJlYWs7OwotICBlc2FjCi1kb25lCi1lbHNlCi0gIHsgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBlcnJvcjogaW4gXGAkYWNfcHdkJzoiID4mNQotJGFzX2VjaG8gIiRhc19tZTogZXJyb3I6IGluIFxgJGFjX3B3ZCc6IiA+JjI7fQotYXNfZm5fZXJyb3IgJD8gImNhbm5vdCBjb21wdXRlIHN1ZmZpeCBvZiBleGVjdXRhYmxlczogY2Fubm90IGNvbXBpbGUgYW5kIGxpbmsKLVNlZSBcYGNvbmZpZy5sb2cnIGZvciBtb3JlIGRldGFpbHMiICIkTElORU5PIiA1OyB9Ci1maQotcm0gLWYgY29uZnRlc3QgY29uZnRlc3QkYWNfY3ZfZXhlZXh0Ci17ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJGFjX2N2X2V4ZWV4dCIgPiY1Ci0kYXNfZWNobyAiJGFjX2N2X2V4ZWV4dCIgPiY2OyB9Ci0KLXJtIC1mIGNvbmZ0ZXN0LiRhY19leHQKLUVYRUVYVD0kYWNfY3ZfZXhlZXh0Ci1hY19leGVleHQ9JEVYRUVYVAotY2F0IGNvbmZkZWZzLmggLSA8PF9BQ0VPRiA+Y29uZnRlc3QuJGFjX2V4dAotLyogZW5kIGNvbmZkZWZzLmguICAqLwotI2luY2x1ZGUgPHN0ZGlvLmg+Ci1pbnQKLW1haW4gKCkKLXsKLUZJTEUgKmYgPSBmb3BlbiAoImNvbmZ0ZXN0Lm91dCIsICJ3Iik7Ci0gcmV0dXJuIGZlcnJvciAoZikgfHwgZmNsb3NlIChmKSAhPSAwOwotCi0gIDsKLSAgcmV0dXJuIDA7Ci19Ci1fQUNFT0YKLWFjX2NsZWFuX2ZpbGVzPSIkYWNfY2xlYW5fZmlsZXMgY29uZnRlc3Qub3V0IgotIyBDaGVjayB0aGF0IHRoZSBjb21waWxlciBwcm9kdWNlcyBleGVjdXRhYmxlcyB3ZSBjYW4gcnVuLiAgSWYgbm90LCBlaXRoZXIKLSMgdGhlIGNvbXBpbGVyIGlzIGJyb2tlbiwgb3Igd2UgY3Jvc3MgY29tcGlsZS4KLXsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgd2hldGhlciB3ZSBhcmUgY3Jvc3MgY29tcGlsaW5nIiA+JjUKLSRhc19lY2hvX24gImNoZWNraW5nIHdoZXRoZXIgd2UgYXJlIGNyb3NzIGNvbXBpbGluZy4uLiAiID4mNjsgfQotaWYgdGVzdCAiJGNyb3NzX2NvbXBpbGluZyIgIT0geWVzOyB0aGVuCi0gIHsgeyBhY190cnk9IiRhY19saW5rIgotY2FzZSAiKCgkYWNfdHJ5IiBpbgotICAqXCIqIHwgKlxgKiB8ICpcXCopIGFjX3RyeV9lY2hvPVwkYWNfdHJ5OzsKLSAgKikgYWNfdHJ5X2VjaG89JGFjX3RyeTs7Ci1lc2FjCi1ldmFsIGFjX3RyeV9lY2hvPSJcIlwkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306ICRhY190cnlfZWNob1wiIgotJGFzX2VjaG8gIiRhY190cnlfZWNobyI7IH0gPiY1Ci0gIChldmFsICIkYWNfbGluayIpIDI+JjUKLSAgYWNfc3RhdHVzPSQ/Ci0gICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IFwkPyA9ICRhY19zdGF0dXMiID4mNQotICB0ZXN0ICRhY19zdGF0dXMgPSAwOyB9Ci0gIGlmIHsgYWNfdHJ5PScuL2NvbmZ0ZXN0JGFjX2N2X2V4ZWV4dCcKLSAgeyB7IGNhc2UgIigoJGFjX3RyeSIgaW4KLSAgKlwiKiB8ICpcYCogfCAqXFwqKSBhY190cnlfZWNobz1cJGFjX3RyeTs7Ci0gICopIGFjX3RyeV9lY2hvPSRhY190cnk7OwotZXNhYwotZXZhbCBhY190cnlfZWNobz0iXCJcJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiAkYWNfdHJ5X2VjaG9cIiIKLSRhc19lY2hvICIkYWNfdHJ5X2VjaG8iOyB9ID4mNQotICAoZXZhbCAiJGFjX3RyeSIpIDI+JjUKLSAgYWNfc3RhdHVzPSQ/Ci0gICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IFwkPyA9ICRhY19zdGF0dXMiID4mNQotICB0ZXN0ICRhY19zdGF0dXMgPSAwOyB9OyB9OyB0aGVuCi0gICAgY3Jvc3NfY29tcGlsaW5nPW5vCi0gIGVsc2UKLSAgICBpZiB0ZXN0ICIkY3Jvc3NfY29tcGlsaW5nIiA9IG1heWJlOyB0aGVuCi0JY3Jvc3NfY29tcGlsaW5nPXllcwotICAgIGVsc2UKLQl7IHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogZXJyb3I6IGluIFxgJGFjX3B3ZCc6IiA+JjUKLSRhc19lY2hvICIkYXNfbWU6IGVycm9yOiBpbiBcYCRhY19wd2QnOiIgPiYyO30KLWFzX2ZuX2Vycm9yICQ/ICJjYW5ub3QgcnVuIEMgY29tcGlsZWQgcHJvZ3JhbXMuCi1JZiB5b3UgbWVhbnQgdG8gY3Jvc3MgY29tcGlsZSwgdXNlIFxgLS1ob3N0Jy4KLVNlZSBcYGNvbmZpZy5sb2cnIGZvciBtb3JlIGRldGFpbHMiICIkTElORU5PIiA1OyB9Ci0gICAgZmkKLSAgZmkKLWZpCi17ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJGNyb3NzX2NvbXBpbGluZyIgPiY1Ci0kYXNfZWNobyAiJGNyb3NzX2NvbXBpbGluZyIgPiY2OyB9Ci0KLXJtIC1mIGNvbmZ0ZXN0LiRhY19leHQgY29uZnRlc3QkYWNfY3ZfZXhlZXh0IGNvbmZ0ZXN0Lm91dAotYWNfY2xlYW5fZmlsZXM9JGFjX2NsZWFuX2ZpbGVzX3NhdmUKLXsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgZm9yIHN1ZmZpeCBvZiBvYmplY3QgZmlsZXMiID4mNQotJGFzX2VjaG9fbiAiY2hlY2tpbmcgZm9yIHN1ZmZpeCBvZiBvYmplY3QgZmlsZXMuLi4gIiA+JjY7IH0KLWlmICR7YWNfY3Zfb2JqZXh0Kzp9IGZhbHNlOyB0aGVuIDoKLSAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKLWVsc2UKLSAgY2F0IGNvbmZkZWZzLmggLSA8PF9BQ0VPRiA+Y29uZnRlc3QuJGFjX2V4dAotLyogZW5kIGNvbmZkZWZzLmguICAqLwotCi1pbnQKLW1haW4gKCkKLXsKLQotICA7Ci0gIHJldHVybiAwOwotfQotX0FDRU9GCi1ybSAtZiBjb25mdGVzdC5vIGNvbmZ0ZXN0Lm9iagotaWYgeyB7IGFjX3RyeT0iJGFjX2NvbXBpbGUiCi1jYXNlICIoKCRhY190cnkiIGluCi0gICpcIiogfCAqXGAqIHwgKlxcKikgYWNfdHJ5X2VjaG89XCRhY190cnk7OwotICAqKSBhY190cnlfZWNobz0kYWNfdHJ5OzsKLWVzYWMKLWV2YWwgYWNfdHJ5X2VjaG89IlwiXCRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogJGFjX3RyeV9lY2hvXCIiCi0kYXNfZWNobyAiJGFjX3RyeV9lY2hvIjsgfSA+JjUKLSAgKGV2YWwgIiRhY19jb21waWxlIikgMj4mNQotICBhY19zdGF0dXM9JD8KLSAgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1Ci0gIHRlc3QgJGFjX3N0YXR1cyA9IDA7IH07IHRoZW4gOgotICBmb3IgYWNfZmlsZSBpbiBjb25mdGVzdC5vIGNvbmZ0ZXN0Lm9iaiBjb25mdGVzdC4qOyBkbwotICB0ZXN0IC1mICIkYWNfZmlsZSIgfHwgY29udGludWU7Ci0gIGNhc2UgJGFjX2ZpbGUgaW4KLSAgICAqLiRhY19leHQgfCAqLnhjb2ZmIHwgKi50ZHMgfCAqLmQgfCAqLnBkYiB8ICoueFNZTSB8ICouYmIgfCAqLmJiZyB8ICoubWFwIHwgKi5pbmYgfCAqLmRTWU0gKSA7OwotICAgICopIGFjX2N2X29iamV4dD1gZXhwciAiJGFjX2ZpbGUiIDogJy4qXC5cKC4qXCknYAotICAgICAgIGJyZWFrOzsKLSAgZXNhYwotZG9uZQotZWxzZQotICAkYXNfZWNobyAiJGFzX21lOiBmYWlsZWQgcHJvZ3JhbSB3YXM6IiA+JjUKLXNlZCAncy9eL3wgLycgY29uZnRlc3QuJGFjX2V4dCA+JjUKLQoteyB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGVycm9yOiBpbiBcYCRhY19wd2QnOiIgPiY1Ci0kYXNfZWNobyAiJGFzX21lOiBlcnJvcjogaW4gXGAkYWNfcHdkJzoiID4mMjt9Ci1hc19mbl9lcnJvciAkPyAiY2Fubm90IGNvbXB1dGUgc3VmZml4IG9mIG9iamVjdCBmaWxlczogY2Fubm90IGNvbXBpbGUKLVNlZSBcYGNvbmZpZy5sb2cnIGZvciBtb3JlIGRldGFpbHMiICIkTElORU5PIiA1OyB9Ci1maQotcm0gLWYgY29uZnRlc3QuJGFjX2N2X29iamV4dCBjb25mdGVzdC4kYWNfZXh0Ci1maQoteyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRhY19jdl9vYmpleHQiID4mNQotJGFzX2VjaG8gIiRhY19jdl9vYmpleHQiID4mNjsgfQotT0JKRVhUPSRhY19jdl9vYmpleHQKLWFjX29iamV4dD0kT0JKRVhUCi17ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIHdoZXRoZXIgd2UgYXJlIHVzaW5nIHRoZSBHTlUgQyBjb21waWxlciIgPiY1Ci0kYXNfZWNob19uICJjaGVja2luZyB3aGV0aGVyIHdlIGFyZSB1c2luZyB0aGUgR05VIEMgY29tcGlsZXIuLi4gIiA+JjY7IH0KLWlmICR7YWNfY3ZfY19jb21waWxlcl9nbnUrOn0gZmFsc2U7IHRoZW4gOgotICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgotZWxzZQotICBjYXQgY29uZmRlZnMuaCAtIDw8X0FDRU9GID5jb25mdGVzdC4kYWNfZXh0Ci0vKiBlbmQgY29uZmRlZnMuaC4gICovCi0KLWludAotbWFpbiAoKQotewotI2lmbmRlZiBfX0dOVUNfXwotICAgICAgIGNob2tlIG1lCi0jZW5kaWYKLQotICA7Ci0gIHJldHVybiAwOwotfQotX0FDRU9GCi1pZiBhY19mbl9jX3RyeV9jb21waWxlICIkTElORU5PIjsgdGhlbiA6Ci0gIGFjX2NvbXBpbGVyX2dudT15ZXMKLWVsc2UKLSAgYWNfY29tcGlsZXJfZ251PW5vCi1maQotcm0gLWYgY29yZSBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdC4kYWNfZXh0Ci1hY19jdl9jX2NvbXBpbGVyX2dudT0kYWNfY29tcGlsZXJfZ251Ci0KLWZpCi17ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJGFjX2N2X2NfY29tcGlsZXJfZ251IiA+JjUKLSRhc19lY2hvICIkYWNfY3ZfY19jb21waWxlcl9nbnUiID4mNjsgfQotaWYgdGVzdCAkYWNfY29tcGlsZXJfZ251ID0geWVzOyB0aGVuCi0gIEdDQz15ZXMKLWVsc2UKLSAgR0NDPQotZmkKLWFjX3Rlc3RfQ0ZMQUdTPSR7Q0ZMQUdTK3NldH0KLWFjX3NhdmVfQ0ZMQUdTPSRDRkxBR1MKLXsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgd2hldGhlciAkQ0MgYWNjZXB0cyAtZyIgPiY1Ci0kYXNfZWNob19uICJjaGVja2luZyB3aGV0aGVyICRDQyBhY2NlcHRzIC1nLi4uICIgPiY2OyB9Ci1pZiAke2FjX2N2X3Byb2dfY2NfZys6fSBmYWxzZTsgdGhlbiA6Ci0gICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2Ci1lbHNlCi0gIGFjX3NhdmVfY193ZXJyb3JfZmxhZz0kYWNfY193ZXJyb3JfZmxhZwotICAgYWNfY193ZXJyb3JfZmxhZz15ZXMKLSAgIGFjX2N2X3Byb2dfY2NfZz1ubwotICAgQ0ZMQUdTPSItZyIKLSAgIGNhdCBjb25mZGVmcy5oIC0gPDxfQUNFT0YgPmNvbmZ0ZXN0LiRhY19leHQKLS8qIGVuZCBjb25mZGVmcy5oLiAgKi8KLQotaW50Ci1tYWluICgpCi17Ci0KLSAgOwotICByZXR1cm4gMDsKLX0KLV9BQ0VPRgotaWYgYWNfZm5fY190cnlfY29tcGlsZSAiJExJTkVOTyI7IHRoZW4gOgotICBhY19jdl9wcm9nX2NjX2c9eWVzCi1lbHNlCi0gIENGTEFHUz0iIgotICAgICAgY2F0IGNvbmZkZWZzLmggLSA8PF9BQ0VPRiA+Y29uZnRlc3QuJGFjX2V4dAotLyogZW5kIGNvbmZkZWZzLmguICAqLwotCi1pbnQKLW1haW4gKCkKLXsKLQotICA7Ci0gIHJldHVybiAwOwotfQotX0FDRU9GCi1pZiBhY19mbl9jX3RyeV9jb21waWxlICIkTElORU5PIjsgdGhlbiA6Ci0KLWVsc2UKLSAgYWNfY193ZXJyb3JfZmxhZz0kYWNfc2F2ZV9jX3dlcnJvcl9mbGFnCi0JIENGTEFHUz0iLWciCi0JIGNhdCBjb25mZGVmcy5oIC0gPDxfQUNFT0YgPmNvbmZ0ZXN0LiRhY19leHQKLS8qIGVuZCBjb25mZGVmcy5oLiAgKi8KLQotaW50Ci1tYWluICgpCi17Ci0KLSAgOwotICByZXR1cm4gMDsKLX0KLV9BQ0VPRgotaWYgYWNfZm5fY190cnlfY29tcGlsZSAiJExJTkVOTyI7IHRoZW4gOgotICBhY19jdl9wcm9nX2NjX2c9eWVzCi1maQotcm0gLWYgY29yZSBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdC4kYWNfZXh0Ci1maQotcm0gLWYgY29yZSBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdC4kYWNfZXh0Ci1maQotcm0gLWYgY29yZSBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdC4kYWNfZXh0Ci0gICBhY19jX3dlcnJvcl9mbGFnPSRhY19zYXZlX2Nfd2Vycm9yX2ZsYWcKLWZpCi17ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJGFjX2N2X3Byb2dfY2NfZyIgPiY1Ci0kYXNfZWNobyAiJGFjX2N2X3Byb2dfY2NfZyIgPiY2OyB9Ci1pZiB0ZXN0ICIkYWNfdGVzdF9DRkxBR1MiID0gc2V0OyB0aGVuCi0gIENGTEFHUz0kYWNfc2F2ZV9DRkxBR1MKLWVsaWYgdGVzdCAkYWNfY3ZfcHJvZ19jY19nID0geWVzOyB0aGVuCi0gIGlmIHRlc3QgIiRHQ0MiID0geWVzOyB0aGVuCi0gICAgQ0ZMQUdTPSItZyAtTzIiCi0gIGVsc2UKLSAgICBDRkxBR1M9Ii1nIgotICBmaQotZWxzZQotICBpZiB0ZXN0ICIkR0NDIiA9IHllczsgdGhlbgotICAgIENGTEFHUz0iLU8yIgotICBlbHNlCi0gICAgQ0ZMQUdTPQotICBmaQotZmkKLXsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgZm9yICRDQyBvcHRpb24gdG8gYWNjZXB0IElTTyBDODkiID4mNQotJGFzX2VjaG9fbiAiY2hlY2tpbmcgZm9yICRDQyBvcHRpb24gdG8gYWNjZXB0IElTTyBDODkuLi4gIiA+JjY7IH0KLWlmICR7YWNfY3ZfcHJvZ19jY19jODkrOn0gZmFsc2U7IHRoZW4gOgotICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgotZWxzZQotICBhY19jdl9wcm9nX2NjX2M4OT1ubwotYWNfc2F2ZV9DQz0kQ0MKLWNhdCBjb25mZGVmcy5oIC0gPDxfQUNFT0YgPmNvbmZ0ZXN0LiRhY19leHQKLS8qIGVuZCBjb25mZGVmcy5oLiAgKi8KLSNpbmNsdWRlIDxzdGRhcmcuaD4KLSNpbmNsdWRlIDxzdGRpby5oPgotI2luY2x1ZGUgPHN5cy90eXBlcy5oPgotI2luY2x1ZGUgPHN5cy9zdGF0Lmg+Ci0vKiBNb3N0IG9mIHRoZSBmb2xsb3dpbmcgdGVzdHMgYXJlIHN0b2xlbiBmcm9tIFJDUyA1LjcncyBzcmMvY29uZi5zaC4gICovCi1zdHJ1Y3QgYnVmIHsgaW50IHg7IH07Ci1GSUxFICogKCpyY3NvcGVuKSAoc3RydWN0IGJ1ZiAqLCBzdHJ1Y3Qgc3RhdCAqLCBpbnQpOwotc3RhdGljIGNoYXIgKmUgKHAsIGkpCi0gICAgIGNoYXIgKipwOwotICAgICBpbnQgaTsKLXsKLSAgcmV0dXJuIHBbaV07Ci19Ci1zdGF0aWMgY2hhciAqZiAoY2hhciAqICgqZykgKGNoYXIgKiosIGludCksIGNoYXIgKipwLCAuLi4pCi17Ci0gIGNoYXIgKnM7Ci0gIHZhX2xpc3QgdjsKLSAgdmFfc3RhcnQgKHYscCk7Ci0gIHMgPSBnIChwLCB2YV9hcmcgKHYsaW50KSk7Ci0gIHZhX2VuZCAodik7Ci0gIHJldHVybiBzOwotfQotCi0vKiBPU0YgNC4wIENvbXBhcSBjYyBpcyBzb21lIHNvcnQgb2YgYWxtb3N0LUFOU0kgYnkgZGVmYXVsdC4gIEl0IGhhcwotICAgZnVuY3Rpb24gcHJvdG90eXBlcyBhbmQgc3R1ZmYsIGJ1dCBub3QgJ1x4SEgnIGhleCBjaGFyYWN0ZXIgY29uc3RhbnRzLgotICAgVGhlc2UgZG9uJ3QgcHJvdm9rZSBhbiBlcnJvciB1bmZvcnR1bmF0ZWx5LCBpbnN0ZWFkIGFyZSBzaWxlbnRseSB0cmVhdGVkCi0gICBhcyAneCcuICBUaGUgZm9sbG93aW5nIGluZHVjZXMgYW4gZXJyb3IsIHVudGlsIC1zdGQgaXMgYWRkZWQgdG8gZ2V0Ci0gICBwcm9wZXIgQU5TSSBtb2RlLiAgQ3VyaW91c2x5ICdceDAwJyE9J3gnIGFsd2F5cyBjb21lcyBvdXQgdHJ1ZSwgZm9yIGFuCi0gICBhcnJheSBzaXplIGF0IGxlYXN0LiAgSXQncyBuZWNlc3NhcnkgdG8gd3JpdGUgJ1x4MDAnPT0wIHRvIGdldCBzb21ldGhpbmcKLSAgIHRoYXQncyB0cnVlIG9ubHkgd2l0aCAtc3RkLiAgKi8KLWludCBvc2Y0X2NjX2FycmF5IFsnXHgwMCcgPT0gMCA/IDEgOiAtMV07Ci0KLS8qIElCTSBDIDYgZm9yIEFJWCBpcyBhbG1vc3QtQU5TSSBieSBkZWZhdWx0LCBidXQgaXQgcmVwbGFjZXMgbWFjcm8gcGFyYW1ldGVycwotICAgaW5zaWRlIHN0cmluZ3MgYW5kIGNoYXJhY3RlciBjb25zdGFudHMuICAqLwotI2RlZmluZSBGT08oeCkgJ3gnCi1pbnQgeGxjNl9jY19hcnJheVtGT08oYSkgPT0gJ3gnID8gMSA6IC0xXTsKLQotaW50IHRlc3QgKGludCBpLCBkb3VibGUgeCk7Ci1zdHJ1Y3QgczEge2ludCAoKmYpIChpbnQgYSk7fTsKLXN0cnVjdCBzMiB7aW50ICgqZikgKGRvdWJsZSBhKTt9OwotaW50IHBhaXJuYW1lcyAoaW50LCBjaGFyICoqLCBGSUxFICooKikoc3RydWN0IGJ1ZiAqLCBzdHJ1Y3Qgc3RhdCAqLCBpbnQpLCBpbnQsIGludCk7Ci1pbnQgYXJnYzsKLWNoYXIgKiphcmd2OwotaW50Ci1tYWluICgpCi17Ci1yZXR1cm4gZiAoZSwgYXJndiwgMCkgIT0gYXJndlswXSAgfHwgIGYgKGUsIGFyZ3YsIDEpICE9IGFyZ3ZbMV07Ci0gIDsKLSAgcmV0dXJuIDA7Ci19Ci1fQUNFT0YKLWZvciBhY19hcmcgaW4gJycgLXFsYW5nbHZsPWV4dGM4OSAtcWxhbmdsdmw9YW5zaSAtc3RkIFwKLQktQWUgIi1BYSAtRF9IUFVYX1NPVVJDRSIgIi1YYyAtRF9fRVhURU5TSU9OU19fIgotZG8KLSAgQ0M9IiRhY19zYXZlX0NDICRhY19hcmciCi0gIGlmIGFjX2ZuX2NfdHJ5X2NvbXBpbGUgIiRMSU5FTk8iOyB0aGVuIDoKLSAgYWNfY3ZfcHJvZ19jY19jODk9JGFjX2FyZwotZmkKLXJtIC1mIGNvcmUgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQKLSAgdGVzdCAieCRhY19jdl9wcm9nX2NjX2M4OSIgIT0gInhubyIgJiYgYnJlYWsKLWRvbmUKLXJtIC1mIGNvbmZ0ZXN0LiRhY19leHQKLUNDPSRhY19zYXZlX0NDCi0KLWZpCi0jIEFDX0NBQ0hFX1ZBTAotY2FzZSAieCRhY19jdl9wcm9nX2NjX2M4OSIgaW4KLSAgeCkKLSAgICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogbm9uZSBuZWVkZWQiID4mNQotJGFzX2VjaG8gIm5vbmUgbmVlZGVkIiA+JjY7IH0gOzsKLSAgeG5vKQotICAgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiB1bnN1cHBvcnRlZCIgPiY1Ci0kYXNfZWNobyAidW5zdXBwb3J0ZWQiID4mNjsgfSA7OwotICAqKQotICAgIENDPSIkQ0MgJGFjX2N2X3Byb2dfY2NfYzg5IgotICAgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkYWNfY3ZfcHJvZ19jY19jODkiID4mNQotJGFzX2VjaG8gIiRhY19jdl9wcm9nX2NjX2M4OSIgPiY2OyB9IDs7Ci1lc2FjCi1pZiB0ZXN0ICJ4JGFjX2N2X3Byb2dfY2NfYzg5IiAhPSB4bm87IHRoZW4gOgotCi1maQotCi1hY19leHQ9YwotYWNfY3BwPSckQ1BQICRDUFBGTEFHUycKLWFjX2NvbXBpbGU9JyRDQyAtYyAkQ0ZMQUdTICRDUFBGTEFHUyBjb25mdGVzdC4kYWNfZXh0ID4mNScKLWFjX2xpbms9JyRDQyAtbyBjb25mdGVzdCRhY19leGVleHQgJENGTEFHUyAkQ1BQRkxBR1MgJExERkxBR1MgY29uZnRlc3QuJGFjX2V4dCAkTElCUyA+JjUnCi1hY19jb21waWxlcl9nbnU9JGFjX2N2X2NfY29tcGlsZXJfZ251Ci0KLWRlcGNjPSIkQ0MiICAgYW1fY29tcGlsZXJfbGlzdD0KLQoteyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBkZXBlbmRlbmN5IHN0eWxlIG9mICRkZXBjYyIgPiY1Ci0kYXNfZWNob19uICJjaGVja2luZyBkZXBlbmRlbmN5IHN0eWxlIG9mICRkZXBjYy4uLiAiID4mNjsgfQotaWYgJHthbV9jdl9DQ19kZXBlbmRlbmNpZXNfY29tcGlsZXJfdHlwZSs6fSBmYWxzZTsgdGhlbiA6Ci0gICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2Ci1lbHNlCi0gIGlmIHRlc3QgLXogIiRBTURFUF9UUlVFIiAmJiB0ZXN0IC1mICIkYW1fZGVwY29tcCI7IHRoZW4KLSAgIyBXZSBtYWtlIGEgc3ViZGlyIGFuZCBkbyB0aGUgdGVzdHMgdGhlcmUuICBPdGhlcndpc2Ugd2UgY2FuIGVuZCB1cAotICAjIG1ha2luZyBib2d1cyBmaWxlcyB0aGF0IHdlIGRvbid0IGtub3cgYWJvdXQgYW5kIG5ldmVyIHJlbW92ZS4gIEZvcgotICAjIGluc3RhbmNlIGl0IHdhcyByZXBvcnRlZCB0aGF0IG9uIEhQLVVYIHRoZSBnY2MgdGVzdCB3aWxsIGVuZCB1cAotICAjIG1ha2luZyBhIGR1bW15IGZpbGUgbmFtZWQgYEQnIC0tIGJlY2F1c2UgYC1NRCcgbWVhbnMgYHB1dCB0aGUgb3V0cHV0Ci0gICMgaW4gRCcuCi0gIG1rZGlyIGNvbmZ0ZXN0LmRpcgotICAjIENvcHkgZGVwY29tcCB0byBzdWJkaXIgYmVjYXVzZSBvdGhlcndpc2Ugd2Ugd29uJ3QgZmluZCBpdCBpZiB3ZSdyZQotICAjIHVzaW5nIGEgcmVsYXRpdmUgZGlyZWN0b3J5LgotICBjcCAiJGFtX2RlcGNvbXAiIGNvbmZ0ZXN0LmRpcgotICBjZCBjb25mdGVzdC5kaXIKLSAgIyBXZSB3aWxsIGJ1aWxkIG9iamVjdHMgYW5kIGRlcGVuZGVuY2llcyBpbiBhIHN1YmRpcmVjdG9yeSBiZWNhdXNlCi0gICMgaXQgaGVscHMgdG8gZGV0ZWN0IGluYXBwbGljYWJsZSBkZXBlbmRlbmN5IG1vZGVzLiAgRm9yIGluc3RhbmNlCi0gICMgYm90aCBUcnU2NCdzIGNjIGFuZCBJQ0Mgc3VwcG9ydCAtTUQgdG8gb3V0cHV0IGRlcGVuZGVuY2llcyBhcyBhCi0gICMgc2lkZSBlZmZlY3Qgb2YgY29tcGlsYXRpb24sIGJ1dCBJQ0Mgd2lsbCBwdXQgdGhlIGRlcGVuZGVuY2llcyBpbgotICAjIHRoZSBjdXJyZW50IGRpcmVjdG9yeSB3aGlsZSBUcnU2NCB3aWxsIHB1dCB0aGVtIGluIHRoZSBvYmplY3QKLSAgIyBkaXJlY3RvcnkuCi0gIG1rZGlyIHN1YgotCi0gIGFtX2N2X0NDX2RlcGVuZGVuY2llc19jb21waWxlcl90eXBlPW5vbmUKLSAgaWYgdGVzdCAiJGFtX2NvbXBpbGVyX2xpc3QiID0gIiI7IHRoZW4KLSAgICAgYW1fY29tcGlsZXJfbGlzdD1gc2VkIC1uICdzL14jKlwoW2EtekEtWjAtOV0qXCkpJC9cMS9wJyA8IC4vZGVwY29tcGAKLSAgZmkKLSAgYW1fX3VuaXZlcnNhbD1mYWxzZQotICBjYXNlICIgJGRlcGNjICIgaW4gIygKLSAgICAgKlwgLWFyY2hcICpcIC1hcmNoXCAqKSBhbV9fdW5pdmVyc2FsPXRydWUgOzsKLSAgICAgZXNhYwotCi0gIGZvciBkZXBtb2RlIGluICRhbV9jb21waWxlcl9saXN0OyBkbwotICAgICMgU2V0dXAgYSBzb3VyY2Ugd2l0aCBtYW55IGRlcGVuZGVuY2llcywgYmVjYXVzZSBzb21lIGNvbXBpbGVycwotICAgICMgbGlrZSB0byB3cmFwIGxhcmdlIGRlcGVuZGVuY3kgbGlzdHMgb24gY29sdW1uIDgwICh3aXRoIFwpLCBhbmQKLSAgICAjIHdlIHNob3VsZCBub3QgY2hvb3NlIGEgZGVwY29tcCBtb2RlIHdoaWNoIGlzIGNvbmZ1c2VkIGJ5IHRoaXMuCi0gICAgIwotICAgICMgV2UgbmVlZCB0byByZWNyZWF0ZSB0aGVzZSBmaWxlcyBmb3IgZWFjaCB0ZXN0LCBhcyB0aGUgY29tcGlsZXIgbWF5Ci0gICAgIyBvdmVyd3JpdGUgc29tZSBvZiB0aGVtIHdoZW4gdGVzdGluZyB3aXRoIG9ic2N1cmUgY29tbWFuZCBsaW5lcy4KLSAgICAjIFRoaXMgaGFwcGVucyBhdCBsZWFzdCB3aXRoIHRoZSBBSVggQyBjb21waWxlci4KLSAgICA6ID4gc3ViL2NvbmZ0ZXN0LmMKLSAgICBmb3IgaSBpbiAxIDIgMyA0IDUgNjsgZG8KLSAgICAgIGVjaG8gJyNpbmNsdWRlICJjb25mdHN0JyRpJy5oIicgPj4gc3ViL2NvbmZ0ZXN0LmMKLSAgICAgICMgVXNpbmcgYDogPiBzdWIvY29uZnRzdCRpLmgnIGNyZWF0ZXMgb25seSBzdWIvY29uZnRzdDEuaCB3aXRoCi0gICAgICAjIFNvbGFyaXMgOCdzIHsvdXNyLH0vYmluL3NoLgotICAgICAgdG91Y2ggc3ViL2NvbmZ0c3QkaS5oCi0gICAgZG9uZQotICAgIGVjaG8gIiR7YW1fX2luY2x1ZGV9ICR7YW1fX3F1b3RlfXN1Yi9jb25mdGVzdC5QbyR7YW1fX3F1b3RlfSIgPiBjb25mbWYKLQotICAgICMgV2UgY2hlY2sgd2l0aCBgLWMnIGFuZCBgLW8nIGZvciB0aGUgc2FrZSBvZiB0aGUgImRhc2htc3Rkb3V0IgotICAgICMgbW9kZS4gIEl0IHR1cm5zIG91dCB0aGF0IHRoZSBTdW5Qcm8gQysrIGNvbXBpbGVyIGRvZXMgbm90IHByb3Blcmx5Ci0gICAgIyBoYW5kbGUgYC1NIC1vJywgYW5kIHdlIG5lZWQgdG8gZGV0ZWN0IHRoaXMuICBBbHNvLCBzb21lIEludGVsCi0gICAgIyB2ZXJzaW9ucyBoYWQgdHJvdWJsZSB3aXRoIG91dHB1dCBpbiBzdWJkaXJzCi0gICAgYW1fX29iaj1zdWIvY29uZnRlc3QuJHtPQkpFWFQtb30KLSAgICBhbV9fbWludXNfb2JqPSItbyAkYW1fX29iaiIKLSAgICBjYXNlICRkZXBtb2RlIGluCi0gICAgZ2NjKQotICAgICAgIyBUaGlzIGRlcG1vZGUgY2F1c2VzIGEgY29tcGlsZXIgcmFjZSBpbiB1bml2ZXJzYWwgbW9kZS4KLSAgICAgIHRlc3QgIiRhbV9fdW5pdmVyc2FsIiA9IGZhbHNlIHx8IGNvbnRpbnVlCi0gICAgICA7OwotICAgIG5vc2lkZWVmZmVjdCkKLSAgICAgICMgYWZ0ZXIgdGhpcyB0YWcsIG1lY2hhbmlzbXMgYXJlIG5vdCBieSBzaWRlLWVmZmVjdCwgc28gdGhleSdsbAotICAgICAgIyBvbmx5IGJlIHVzZWQgd2hlbiBleHBsaWNpdGx5IHJlcXVlc3RlZAotICAgICAgaWYgdGVzdCAieCRlbmFibGVfZGVwZW5kZW5jeV90cmFja2luZyIgPSB4eWVzOyB0aGVuCi0JY29udGludWUKLSAgICAgIGVsc2UKLQlicmVhawotICAgICAgZmkKLSAgICAgIDs7Ci0gICAgbXN2aXN1YWxjcHAgfCBtc3ZjbXN5cykKLSAgICAgICMgVGhpcyBjb21waWxlciB3b24ndCBncm9rIGAtYyAtbycsIGJ1dCBhbHNvLCB0aGUgbWludXNvIHRlc3QgaGFzCi0gICAgICAjIG5vdCBydW4geWV0LiAgVGhlc2UgZGVwbW9kZXMgYXJlIGxhdGUgZW5vdWdoIGluIHRoZSBnYW1lLCBhbmQKLSAgICAgICMgc28gd2VhayB0aGF0IHRoZWlyIGZ1bmN0aW9uaW5nIHNob3VsZCBub3QgYmUgaW1wYWN0ZWQuCi0gICAgICBhbV9fb2JqPWNvbmZ0ZXN0LiR7T0JKRVhULW99Ci0gICAgICBhbV9fbWludXNfb2JqPQotICAgICAgOzsKLSAgICBub25lKSBicmVhayA7OwotICAgIGVzYWMKLSAgICBpZiBkZXBtb2RlPSRkZXBtb2RlIFwKLSAgICAgICBzb3VyY2U9c3ViL2NvbmZ0ZXN0LmMgb2JqZWN0PSRhbV9fb2JqIFwKLSAgICAgICBkZXBmaWxlPXN1Yi9jb25mdGVzdC5QbyB0bXBkZXBmaWxlPXN1Yi9jb25mdGVzdC5UUG8gXAotICAgICAgICRTSEVMTCAuL2RlcGNvbXAgJGRlcGNjIC1jICRhbV9fbWludXNfb2JqIHN1Yi9jb25mdGVzdC5jIFwKLSAgICAgICAgID4vZGV2L251bGwgMj5jb25mdGVzdC5lcnIgJiYKLSAgICAgICBncmVwIHN1Yi9jb25mdHN0MS5oIHN1Yi9jb25mdGVzdC5QbyA+IC9kZXYvbnVsbCAyPiYxICYmCi0gICAgICAgZ3JlcCBzdWIvY29uZnRzdDYuaCBzdWIvY29uZnRlc3QuUG8gPiAvZGV2L251bGwgMj4mMSAmJgotICAgICAgIGdyZXAgJGFtX19vYmogc3ViL2NvbmZ0ZXN0LlBvID4gL2Rldi9udWxsIDI+JjEgJiYKLSAgICAgICAke01BS0UtbWFrZX0gLXMgLWYgY29uZm1mID4gL2Rldi9udWxsIDI+JjE7IHRoZW4KLSAgICAgICMgaWNjIGRvZXNuJ3QgY2hva2Ugb24gdW5rbm93biBvcHRpb25zLCBpdCB3aWxsIGp1c3QgaXNzdWUgd2FybmluZ3MKLSAgICAgICMgb3IgcmVtYXJrcyAoZXZlbiB3aXRoIC1XZXJyb3IpLiAgU28gd2UgZ3JlcCBzdGRlcnIgZm9yIGFueSBtZXNzYWdlCi0gICAgICAjIHRoYXQgc2F5cyBhbiBvcHRpb24gd2FzIGlnbm9yZWQgb3Igbm90IHN1cHBvcnRlZC4KLSAgICAgICMgV2hlbiBnaXZlbiAtTVAsIGljYyA3LjAgYW5kIDcuMSBjb21wbGFpbiB0aHVzbHk6Ci0gICAgICAjICAgaWNjOiBDb21tYW5kIGxpbmUgd2FybmluZzogaWdub3Jpbmcgb3B0aW9uICctTSc7IG5vIGFyZ3VtZW50IHJlcXVpcmVkCi0gICAgICAjIFRoZSBkaWFnbm9zaXMgY2hhbmdlZCBpbiBpY2MgOC4wOgotICAgICAgIyAgIGljYzogQ29tbWFuZCBsaW5lIHJlbWFyazogb3B0aW9uICctTVAnIG5vdCBzdXBwb3J0ZWQKLSAgICAgIGlmIChncmVwICdpZ25vcmluZyBvcHRpb24nIGNvbmZ0ZXN0LmVyciB8fAotICAgICAgICAgIGdyZXAgJ25vdCBzdXBwb3J0ZWQnIGNvbmZ0ZXN0LmVycikgPi9kZXYvbnVsbCAyPiYxOyB0aGVuIDo7IGVsc2UKLSAgICAgICAgYW1fY3ZfQ0NfZGVwZW5kZW5jaWVzX2NvbXBpbGVyX3R5cGU9JGRlcG1vZGUKLSAgICAgICAgYnJlYWsKLSAgICAgIGZpCi0gICAgZmkKLSAgZG9uZQotCi0gIGNkIC4uCi0gIHJtIC1yZiBjb25mdGVzdC5kaXIKLWVsc2UKLSAgYW1fY3ZfQ0NfZGVwZW5kZW5jaWVzX2NvbXBpbGVyX3R5cGU9bm9uZQotZmkKLQotZmkKLXsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkYW1fY3ZfQ0NfZGVwZW5kZW5jaWVzX2NvbXBpbGVyX3R5cGUiID4mNQotJGFzX2VjaG8gIiRhbV9jdl9DQ19kZXBlbmRlbmNpZXNfY29tcGlsZXJfdHlwZSIgPiY2OyB9Ci1DQ0RFUE1PREU9ZGVwbW9kZT0kYW1fY3ZfQ0NfZGVwZW5kZW5jaWVzX2NvbXBpbGVyX3R5cGUKLQotIGlmCi0gIHRlc3QgIngkZW5hYmxlX2RlcGVuZGVuY3lfdHJhY2tpbmciICE9IHhubyBcCi0gICYmIHRlc3QgIiRhbV9jdl9DQ19kZXBlbmRlbmNpZXNfY29tcGlsZXJfdHlwZSIgPSBnY2MzOyB0aGVuCi0gIGFtX19mYXN0ZGVwQ0NfVFJVRT0KLSAgYW1fX2Zhc3RkZXBDQ19GQUxTRT0nIycKLWVsc2UKLSAgYW1fX2Zhc3RkZXBDQ19UUlVFPScjJwotICBhbV9fZmFzdGRlcENDX0ZBTFNFPQotZmkKLQotCi17ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGZvciBmdW5jdGlvbiBwcm90b3R5cGVzIiA+JjUKLSRhc19lY2hvX24gImNoZWNraW5nIGZvciBmdW5jdGlvbiBwcm90b3R5cGVzLi4uICIgPiY2OyB9Ci1pZiB0ZXN0ICIkYWNfY3ZfcHJvZ19jY19jODkiICE9IG5vOyB0aGVuCi0gIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiB5ZXMiID4mNQotJGFzX2VjaG8gInllcyIgPiY2OyB9Ci0KLSRhc19lY2hvICIjZGVmaW5lIFBST1RPVFlQRVMgMSIgPj5jb25mZGVmcy5oCi0KLQotJGFzX2VjaG8gIiNkZWZpbmUgX19QUk9UT1RZUEVTIDEiID4+Y29uZmRlZnMuaAotCi1lbHNlCi0gIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiBubyIgPiY1Ci0kYXNfZWNobyAibm8iID4mNjsgfQotZmkKLQotCi1hY19leHQ9YwotYWNfY3BwPSckQ1BQICRDUFBGTEFHUycKLWFjX2NvbXBpbGU9JyRDQyAtYyAkQ0ZMQUdTICRDUFBGTEFHUyBjb25mdGVzdC4kYWNfZXh0ID4mNScKLWFjX2xpbms9JyRDQyAtbyBjb25mdGVzdCRhY19leGVleHQgJENGTEFHUyAkQ1BQRkxBR1MgJExERkxBR1MgY29uZnRlc3QuJGFjX2V4dCAkTElCUyA+JjUnCi1hY19jb21waWxlcl9nbnU9JGFjX2N2X2NfY29tcGlsZXJfZ251Ci17ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGhvdyB0byBydW4gdGhlIEMgcHJlcHJvY2Vzc29yIiA+JjUKLSRhc19lY2hvX24gImNoZWNraW5nIGhvdyB0byBydW4gdGhlIEMgcHJlcHJvY2Vzc29yLi4uICIgPiY2OyB9Ci0jIE9uIFN1bnMsIHNvbWV0aW1lcyAkQ1BQIG5hbWVzIGEgZGlyZWN0b3J5LgotaWYgdGVzdCAtbiAiJENQUCIgJiYgdGVzdCAtZCAiJENQUCI7IHRoZW4KLSAgQ1BQPQotZmkKLWlmIHRlc3QgLXogIiRDUFAiOyB0aGVuCi0gIGlmICR7YWNfY3ZfcHJvZ19DUFArOn0gZmFsc2U7IHRoZW4gOgotICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgotZWxzZQotICAgICAgIyBEb3VibGUgcXVvdGVzIGJlY2F1c2UgQ1BQIG5lZWRzIHRvIGJlIGV4cGFuZGVkCi0gICAgZm9yIENQUCBpbiAiJENDIC1FIiAiJENDIC1FIC10cmFkaXRpb25hbC1jcHAiICIvbGliL2NwcCIKLSAgICBkbwotICAgICAgYWNfcHJlcHJvY19vaz1mYWxzZQotZm9yIGFjX2NfcHJlcHJvY193YXJuX2ZsYWcgaW4gJycgeWVzCi1kbwotICAjIFVzZSBhIGhlYWRlciBmaWxlIHRoYXQgY29tZXMgd2l0aCBnY2MsIHNvIGNvbmZpZ3VyaW5nIGdsaWJjCi0gICMgd2l0aCBhIGZyZXNoIGNyb3NzLWNvbXBpbGVyIHdvcmtzLgotICAjIFByZWZlciA8bGltaXRzLmg+IHRvIDxhc3NlcnQuaD4gaWYgX19TVERDX18gaXMgZGVmaW5lZCwgc2luY2UKLSAgIyA8bGltaXRzLmg+IGV4aXN0cyBldmVuIG9uIGZyZWVzdGFuZGluZyBjb21waWxlcnMuCi0gICMgT24gdGhlIE5lWFQsIGNjIC1FIHJ1bnMgdGhlIGNvZGUgdGhyb3VnaCB0aGUgY29tcGlsZXIncyBwYXJzZXIsCi0gICMgbm90IGp1c3QgdGhyb3VnaCBjcHAuICJTeW50YXggZXJyb3IiIGlzIGhlcmUgdG8gY2F0Y2ggdGhpcyBjYXNlLgotICBjYXQgY29uZmRlZnMuaCAtIDw8X0FDRU9GID5jb25mdGVzdC4kYWNfZXh0Ci0vKiBlbmQgY29uZmRlZnMuaC4gICovCi0jaWZkZWYgX19TVERDX18KLSMgaW5jbHVkZSA8bGltaXRzLmg+Ci0jZWxzZQotIyBpbmNsdWRlIDxhc3NlcnQuaD4KLSNlbmRpZgotCQkgICAgIFN5bnRheCBlcnJvcgotX0FDRU9GCi1pZiBhY19mbl9jX3RyeV9jcHAgIiRMSU5FTk8iOyB0aGVuIDoKLQotZWxzZQotICAjIEJyb2tlbjogZmFpbHMgb24gdmFsaWQgaW5wdXQuCi1jb250aW51ZQotZmkKLXJtIC1mIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC5pIGNvbmZ0ZXN0LiRhY19leHQKLQotICAjIE9LLCB3b3JrcyBvbiBzYW5lIGNhc2VzLiAgTm93IGNoZWNrIHdoZXRoZXIgbm9uZXhpc3RlbnQgaGVhZGVycwotICAjIGNhbiBiZSBkZXRlY3RlZCBhbmQgaG93LgotICBjYXQgY29uZmRlZnMuaCAtIDw8X0FDRU9GID5jb25mdGVzdC4kYWNfZXh0Ci0vKiBlbmQgY29uZmRlZnMuaC4gICovCi0jaW5jbHVkZSA8YWNfbm9uZXhpc3RlbnQuaD4KLV9BQ0VPRgotaWYgYWNfZm5fY190cnlfY3BwICIkTElORU5PIjsgdGhlbiA6Ci0gICMgQnJva2VuOiBzdWNjZXNzIG9uIGludmFsaWQgaW5wdXQuCi1jb250aW51ZQotZWxzZQotICAjIFBhc3NlcyBib3RoIHRlc3RzLgotYWNfcHJlcHJvY19vaz06Ci1icmVhawotZmkKLXJtIC1mIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC5pIGNvbmZ0ZXN0LiRhY19leHQKLQotZG9uZQotIyBCZWNhdXNlIG9mIGBicmVhaycsIF9BQ19QUkVQUk9DX0lGRUxTRSdzIGNsZWFuaW5nIGNvZGUgd2FzIHNraXBwZWQuCi1ybSAtZiBjb25mdGVzdC5pIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfZXh0Ci1pZiAkYWNfcHJlcHJvY19vazsgdGhlbiA6Ci0gIGJyZWFrCi1maQotCi0gICAgZG9uZQotICAgIGFjX2N2X3Byb2dfQ1BQPSRDUFAKLQotZmkKLSAgQ1BQPSRhY19jdl9wcm9nX0NQUAotZWxzZQotICBhY19jdl9wcm9nX0NQUD0kQ1BQCi1maQoteyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRDUFAiID4mNQotJGFzX2VjaG8gIiRDUFAiID4mNjsgfQotYWNfcHJlcHJvY19vaz1mYWxzZQotZm9yIGFjX2NfcHJlcHJvY193YXJuX2ZsYWcgaW4gJycgeWVzCi1kbwotICAjIFVzZSBhIGhlYWRlciBmaWxlIHRoYXQgY29tZXMgd2l0aCBnY2MsIHNvIGNvbmZpZ3VyaW5nIGdsaWJjCi0gICMgd2l0aCBhIGZyZXNoIGNyb3NzLWNvbXBpbGVyIHdvcmtzLgotICAjIFByZWZlciA8bGltaXRzLmg+IHRvIDxhc3NlcnQuaD4gaWYgX19TVERDX18gaXMgZGVmaW5lZCwgc2luY2UKLSAgIyA8bGltaXRzLmg+IGV4aXN0cyBldmVuIG9uIGZyZWVzdGFuZGluZyBjb21waWxlcnMuCi0gICMgT24gdGhlIE5lWFQsIGNjIC1FIHJ1bnMgdGhlIGNvZGUgdGhyb3VnaCB0aGUgY29tcGlsZXIncyBwYXJzZXIsCi0gICMgbm90IGp1c3QgdGhyb3VnaCBjcHAuICJTeW50YXggZXJyb3IiIGlzIGhlcmUgdG8gY2F0Y2ggdGhpcyBjYXNlLgotICBjYXQgY29uZmRlZnMuaCAtIDw8X0FDRU9GID5jb25mdGVzdC4kYWNfZXh0Ci0vKiBlbmQgY29uZmRlZnMuaC4gICovCi0jaWZkZWYgX19TVERDX18KLSMgaW5jbHVkZSA8bGltaXRzLmg+Ci0jZWxzZQotIyBpbmNsdWRlIDxhc3NlcnQuaD4KLSNlbmRpZgotCQkgICAgIFN5bnRheCBlcnJvcgotX0FDRU9GCi1pZiBhY19mbl9jX3RyeV9jcHAgIiRMSU5FTk8iOyB0aGVuIDoKLQotZWxzZQotICAjIEJyb2tlbjogZmFpbHMgb24gdmFsaWQgaW5wdXQuCi1jb250aW51ZQotZmkKLXJtIC1mIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC5pIGNvbmZ0ZXN0LiRhY19leHQKLQotICAjIE9LLCB3b3JrcyBvbiBzYW5lIGNhc2VzLiAgTm93IGNoZWNrIHdoZXRoZXIgbm9uZXhpc3RlbnQgaGVhZGVycwotICAjIGNhbiBiZSBkZXRlY3RlZCBhbmQgaG93LgotICBjYXQgY29uZmRlZnMuaCAtIDw8X0FDRU9GID5jb25mdGVzdC4kYWNfZXh0Ci0vKiBlbmQgY29uZmRlZnMuaC4gICovCi0jaW5jbHVkZSA8YWNfbm9uZXhpc3RlbnQuaD4KLV9BQ0VPRgotaWYgYWNfZm5fY190cnlfY3BwICIkTElORU5PIjsgdGhlbiA6Ci0gICMgQnJva2VuOiBzdWNjZXNzIG9uIGludmFsaWQgaW5wdXQuCi1jb250aW51ZQotZWxzZQotICAjIFBhc3NlcyBib3RoIHRlc3RzLgotYWNfcHJlcHJvY19vaz06Ci1icmVhawotZmkKLXJtIC1mIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC5pIGNvbmZ0ZXN0LiRhY19leHQKLQotZG9uZQotIyBCZWNhdXNlIG9mIGBicmVhaycsIF9BQ19QUkVQUk9DX0lGRUxTRSdzIGNsZWFuaW5nIGNvZGUgd2FzIHNraXBwZWQuCi1ybSAtZiBjb25mdGVzdC5pIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfZXh0Ci1pZiAkYWNfcHJlcHJvY19vazsgdGhlbiA6Ci0KLWVsc2UKLSAgeyB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGVycm9yOiBpbiBcYCRhY19wd2QnOiIgPiY1Ci0kYXNfZWNobyAiJGFzX21lOiBlcnJvcjogaW4gXGAkYWNfcHdkJzoiID4mMjt9Ci1hc19mbl9lcnJvciAkPyAiQyBwcmVwcm9jZXNzb3IgXCIkQ1BQXCIgZmFpbHMgc2FuaXR5IGNoZWNrCi1TZWUgXGBjb25maWcubG9nJyBmb3IgbW9yZSBkZXRhaWxzIiAiJExJTkVOTyIgNTsgfQotZmkKLQotYWNfZXh0PWMKLWFjX2NwcD0nJENQUCAkQ1BQRkxBR1MnCi1hY19jb21waWxlPSckQ0MgLWMgJENGTEFHUyAkQ1BQRkxBR1MgY29uZnRlc3QuJGFjX2V4dCA+JjUnCi1hY19saW5rPSckQ0MgLW8gY29uZnRlc3QkYWNfZXhlZXh0ICRDRkxBR1MgJENQUEZMQUdTICRMREZMQUdTIGNvbmZ0ZXN0LiRhY19leHQgJExJQlMgPiY1JwotYWNfY29tcGlsZXJfZ251PSRhY19jdl9jX2NvbXBpbGVyX2dudQotCi0KLXsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgZm9yIGdyZXAgdGhhdCBoYW5kbGVzIGxvbmcgbGluZXMgYW5kIC1lIiA+JjUKLSRhc19lY2hvX24gImNoZWNraW5nIGZvciBncmVwIHRoYXQgaGFuZGxlcyBsb25nIGxpbmVzIGFuZCAtZS4uLiAiID4mNjsgfQotaWYgJHthY19jdl9wYXRoX0dSRVArOn0gZmFsc2U7IHRoZW4gOgotICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgotZWxzZQotICBpZiB0ZXN0IC16ICIkR1JFUCI7IHRoZW4KLSAgYWNfcGF0aF9HUkVQX2ZvdW5kPWZhbHNlCi0gICMgTG9vcCB0aHJvdWdoIHRoZSB1c2VyJ3MgcGF0aCBhbmQgdGVzdCBmb3IgZWFjaCBvZiBQUk9HTkFNRS1MSVNUCi0gIGFzX3NhdmVfSUZTPSRJRlM7IElGUz0kUEFUSF9TRVBBUkFUT1IKLWZvciBhc19kaXIgaW4gJFBBVEgkUEFUSF9TRVBBUkFUT1IvdXNyL3hwZzQvYmluCi1kbwotICBJRlM9JGFzX3NhdmVfSUZTCi0gIHRlc3QgLXogIiRhc19kaXIiICYmIGFzX2Rpcj0uCi0gICAgZm9yIGFjX3Byb2cgaW4gZ3JlcCBnZ3JlcDsgZG8KLSAgICBmb3IgYWNfZXhlY19leHQgaW4gJycgJGFjX2V4ZWN1dGFibGVfZXh0ZW5zaW9uczsgZG8KLSAgICAgIGFjX3BhdGhfR1JFUD0iJGFzX2Rpci8kYWNfcHJvZyRhY19leGVjX2V4dCIKLSAgICAgIHsgdGVzdCAtZiAiJGFjX3BhdGhfR1JFUCIgJiYgJGFzX3Rlc3RfeCAiJGFjX3BhdGhfR1JFUCI7IH0gfHwgY29udGludWUKLSMgQ2hlY2sgZm9yIEdOVSBhY19wYXRoX0dSRVAgYW5kIHNlbGVjdCBpdCBpZiBpdCBpcyBmb3VuZC4KLSAgIyBDaGVjayBmb3IgR05VICRhY19wYXRoX0dSRVAKLWNhc2UgYCIkYWNfcGF0aF9HUkVQIiAtLXZlcnNpb24gMj4mMWAgaW4KLSpHTlUqKQotICBhY19jdl9wYXRoX0dSRVA9IiRhY19wYXRoX0dSRVAiIGFjX3BhdGhfR1JFUF9mb3VuZD06OzsKLSopCi0gIGFjX2NvdW50PTAKLSAgJGFzX2VjaG9fbiAwMTIzNDU2Nzg5ID4iY29uZnRlc3QuaW4iCi0gIHdoaWxlIDoKLSAgZG8KLSAgICBjYXQgImNvbmZ0ZXN0LmluIiAiY29uZnRlc3QuaW4iID4iY29uZnRlc3QudG1wIgotICAgIG12ICJjb25mdGVzdC50bXAiICJjb25mdGVzdC5pbiIKLSAgICBjcCAiY29uZnRlc3QuaW4iICJjb25mdGVzdC5ubCIKLSAgICAkYXNfZWNobyAnR1JFUCcgPj4gImNvbmZ0ZXN0Lm5sIgotICAgICIkYWNfcGF0aF9HUkVQIiAtZSAnR1JFUCQnIC1lICctKGNhbm5vdCBtYXRjaCktJyA8ICJjb25mdGVzdC5ubCIgPiJjb25mdGVzdC5vdXQiIDI+L2Rldi9udWxsIHx8IGJyZWFrCi0gICAgZGlmZiAiY29uZnRlc3Qub3V0IiAiY29uZnRlc3QubmwiID4vZGV2L251bGwgMj4mMSB8fCBicmVhawotICAgIGFzX2ZuX2FyaXRoICRhY19jb3VudCArIDEgJiYgYWNfY291bnQ9JGFzX3ZhbAotICAgIGlmIHRlc3QgJGFjX2NvdW50IC1ndCAke2FjX3BhdGhfR1JFUF9tYXgtMH07IHRoZW4KLSAgICAgICMgQmVzdCBvbmUgc28gZmFyLCBzYXZlIGl0IGJ1dCBrZWVwIGxvb2tpbmcgZm9yIGEgYmV0dGVyIG9uZQotICAgICAgYWNfY3ZfcGF0aF9HUkVQPSIkYWNfcGF0aF9HUkVQIgotICAgICAgYWNfcGF0aF9HUkVQX21heD0kYWNfY291bnQKLSAgICBmaQotICAgICMgMTAqKDJeMTApIGNoYXJzIGFzIGlucHV0IHNlZW1zIG1vcmUgdGhhbiBlbm91Z2gKLSAgICB0ZXN0ICRhY19jb3VudCAtZ3QgMTAgJiYgYnJlYWsKLSAgZG9uZQotICBybSAtZiBjb25mdGVzdC5pbiBjb25mdGVzdC50bXAgY29uZnRlc3QubmwgY29uZnRlc3Qub3V0OzsKLWVzYWMKLQotICAgICAgJGFjX3BhdGhfR1JFUF9mb3VuZCAmJiBicmVhayAzCi0gICAgZG9uZQotICBkb25lCi0gIGRvbmUKLUlGUz0kYXNfc2F2ZV9JRlMKLSAgaWYgdGVzdCAteiAiJGFjX2N2X3BhdGhfR1JFUCI7IHRoZW4KLSAgICBhc19mbl9lcnJvciAkPyAibm8gYWNjZXB0YWJsZSBncmVwIGNvdWxkIGJlIGZvdW5kIGluICRQQVRIJFBBVEhfU0VQQVJBVE9SL3Vzci94cGc0L2JpbiIgIiRMSU5FTk8iIDUKLSAgZmkKLWVsc2UKLSAgYWNfY3ZfcGF0aF9HUkVQPSRHUkVQCi1maQotCi1maQoteyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRhY19jdl9wYXRoX0dSRVAiID4mNQotJGFzX2VjaG8gIiRhY19jdl9wYXRoX0dSRVAiID4mNjsgfQotIEdSRVA9IiRhY19jdl9wYXRoX0dSRVAiCi0KLQoteyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBmb3IgZWdyZXAiID4mNQotJGFzX2VjaG9fbiAiY2hlY2tpbmcgZm9yIGVncmVwLi4uICIgPiY2OyB9Ci1pZiAke2FjX2N2X3BhdGhfRUdSRVArOn0gZmFsc2U7IHRoZW4gOgotICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgotZWxzZQotICBpZiBlY2hvIGEgfCAkR1JFUCAtRSAnKGF8YiknID4vZGV2L251bGwgMj4mMQotICAgdGhlbiBhY19jdl9wYXRoX0VHUkVQPSIkR1JFUCAtRSIKLSAgIGVsc2UKLSAgICAgaWYgdGVzdCAteiAiJEVHUkVQIjsgdGhlbgotICBhY19wYXRoX0VHUkVQX2ZvdW5kPWZhbHNlCi0gICMgTG9vcCB0aHJvdWdoIHRoZSB1c2VyJ3MgcGF0aCBhbmQgdGVzdCBmb3IgZWFjaCBvZiBQUk9HTkFNRS1MSVNUCi0gIGFzX3NhdmVfSUZTPSRJRlM7IElGUz0kUEFUSF9TRVBBUkFUT1IKLWZvciBhc19kaXIgaW4gJFBBVEgkUEFUSF9TRVBBUkFUT1IvdXNyL3hwZzQvYmluCi1kbwotICBJRlM9JGFzX3NhdmVfSUZTCi0gIHRlc3QgLXogIiRhc19kaXIiICYmIGFzX2Rpcj0uCi0gICAgZm9yIGFjX3Byb2cgaW4gZWdyZXA7IGRvCi0gICAgZm9yIGFjX2V4ZWNfZXh0IGluICcnICRhY19leGVjdXRhYmxlX2V4dGVuc2lvbnM7IGRvCi0gICAgICBhY19wYXRoX0VHUkVQPSIkYXNfZGlyLyRhY19wcm9nJGFjX2V4ZWNfZXh0IgotICAgICAgeyB0ZXN0IC1mICIkYWNfcGF0aF9FR1JFUCIgJiYgJGFzX3Rlc3RfeCAiJGFjX3BhdGhfRUdSRVAiOyB9IHx8IGNvbnRpbnVlCi0jIENoZWNrIGZvciBHTlUgYWNfcGF0aF9FR1JFUCBhbmQgc2VsZWN0IGl0IGlmIGl0IGlzIGZvdW5kLgotICAjIENoZWNrIGZvciBHTlUgJGFjX3BhdGhfRUdSRVAKLWNhc2UgYCIkYWNfcGF0aF9FR1JFUCIgLS12ZXJzaW9uIDI+JjFgIGluCi0qR05VKikKLSAgYWNfY3ZfcGF0aF9FR1JFUD0iJGFjX3BhdGhfRUdSRVAiIGFjX3BhdGhfRUdSRVBfZm91bmQ9Ojs7Ci0qKQotICBhY19jb3VudD0wCi0gICRhc19lY2hvX24gMDEyMzQ1Njc4OSA+ImNvbmZ0ZXN0LmluIgotICB3aGlsZSA6Ci0gIGRvCi0gICAgY2F0ICJjb25mdGVzdC5pbiIgImNvbmZ0ZXN0LmluIiA+ImNvbmZ0ZXN0LnRtcCIKLSAgICBtdiAiY29uZnRlc3QudG1wIiAiY29uZnRlc3QuaW4iCi0gICAgY3AgImNvbmZ0ZXN0LmluIiAiY29uZnRlc3QubmwiCi0gICAgJGFzX2VjaG8gJ0VHUkVQJyA+PiAiY29uZnRlc3QubmwiCi0gICAgIiRhY19wYXRoX0VHUkVQIiAnRUdSRVAkJyA8ICJjb25mdGVzdC5ubCIgPiJjb25mdGVzdC5vdXQiIDI+L2Rldi9udWxsIHx8IGJyZWFrCi0gICAgZGlmZiAiY29uZnRlc3Qub3V0IiAiY29uZnRlc3QubmwiID4vZGV2L251bGwgMj4mMSB8fCBicmVhawotICAgIGFzX2ZuX2FyaXRoICRhY19jb3VudCArIDEgJiYgYWNfY291bnQ9JGFzX3ZhbAotICAgIGlmIHRlc3QgJGFjX2NvdW50IC1ndCAke2FjX3BhdGhfRUdSRVBfbWF4LTB9OyB0aGVuCi0gICAgICAjIEJlc3Qgb25lIHNvIGZhciwgc2F2ZSBpdCBidXQga2VlcCBsb29raW5nIGZvciBhIGJldHRlciBvbmUKLSAgICAgIGFjX2N2X3BhdGhfRUdSRVA9IiRhY19wYXRoX0VHUkVQIgotICAgICAgYWNfcGF0aF9FR1JFUF9tYXg9JGFjX2NvdW50Ci0gICAgZmkKLSAgICAjIDEwKigyXjEwKSBjaGFycyBhcyBpbnB1dCBzZWVtcyBtb3JlIHRoYW4gZW5vdWdoCi0gICAgdGVzdCAkYWNfY291bnQgLWd0IDEwICYmIGJyZWFrCi0gIGRvbmUKLSAgcm0gLWYgY29uZnRlc3QuaW4gY29uZnRlc3QudG1wIGNvbmZ0ZXN0Lm5sIGNvbmZ0ZXN0Lm91dDs7Ci1lc2FjCi0KLSAgICAgICRhY19wYXRoX0VHUkVQX2ZvdW5kICYmIGJyZWFrIDMKLSAgICBkb25lCi0gIGRvbmUKLSAgZG9uZQotSUZTPSRhc19zYXZlX0lGUwotICBpZiB0ZXN0IC16ICIkYWNfY3ZfcGF0aF9FR1JFUCI7IHRoZW4KLSAgICBhc19mbl9lcnJvciAkPyAibm8gYWNjZXB0YWJsZSBlZ3JlcCBjb3VsZCBiZSBmb3VuZCBpbiAkUEFUSCRQQVRIX1NFUEFSQVRPUi91c3IveHBnNC9iaW4iICIkTElORU5PIiA1Ci0gIGZpCi1lbHNlCi0gIGFjX2N2X3BhdGhfRUdSRVA9JEVHUkVQCi1maQotCi0gICBmaQotZmkKLXsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkYWNfY3ZfcGF0aF9FR1JFUCIgPiY1Ci0kYXNfZWNobyAiJGFjX2N2X3BhdGhfRUdSRVAiID4mNjsgfQotIEVHUkVQPSIkYWNfY3ZfcGF0aF9FR1JFUCIKLQotCi17ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGZvciBBTlNJIEMgaGVhZGVyIGZpbGVzIiA+JjUKLSRhc19lY2hvX24gImNoZWNraW5nIGZvciBBTlNJIEMgaGVhZGVyIGZpbGVzLi4uICIgPiY2OyB9Ci1pZiAke2FjX2N2X2hlYWRlcl9zdGRjKzp9IGZhbHNlOyB0aGVuIDoKLSAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKLWVsc2UKLSAgY2F0IGNvbmZkZWZzLmggLSA8PF9BQ0VPRiA+Y29uZnRlc3QuJGFjX2V4dAotLyogZW5kIGNvbmZkZWZzLmguICAqLwotI2luY2x1ZGUgPHN0ZGxpYi5oPgotI2luY2x1ZGUgPHN0ZGFyZy5oPgotI2luY2x1ZGUgPHN0cmluZy5oPgotI2luY2x1ZGUgPGZsb2F0Lmg+Ci0KLWludAotbWFpbiAoKQotewotCi0gIDsKLSAgcmV0dXJuIDA7Ci19Ci1fQUNFT0YKLWlmIGFjX2ZuX2NfdHJ5X2NvbXBpbGUgIiRMSU5FTk8iOyB0aGVuIDoKLSAgYWNfY3ZfaGVhZGVyX3N0ZGM9eWVzCi1lbHNlCi0gIGFjX2N2X2hlYWRlcl9zdGRjPW5vCi1maQotcm0gLWYgY29yZSBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdC4kYWNfZXh0Ci0KLWlmIHRlc3QgJGFjX2N2X2hlYWRlcl9zdGRjID0geWVzOyB0aGVuCi0gICMgU3VuT1MgNC54IHN0cmluZy5oIGRvZXMgbm90IGRlY2xhcmUgbWVtKiwgY29udHJhcnkgdG8gQU5TSS4KLSAgY2F0IGNvbmZkZWZzLmggLSA8PF9BQ0VPRiA+Y29uZnRlc3QuJGFjX2V4dAotLyogZW5kIGNvbmZkZWZzLmguICAqLwotI2luY2x1ZGUgPHN0cmluZy5oPgotCi1fQUNFT0YKLWlmIChldmFsICIkYWNfY3BwIGNvbmZ0ZXN0LiRhY19leHQiKSAyPiY1IHwKLSAgJEVHUkVQICJtZW1jaHIiID4vZGV2L251bGwgMj4mMTsgdGhlbiA6Ci0KLWVsc2UKLSAgYWNfY3ZfaGVhZGVyX3N0ZGM9bm8KLWZpCi1ybSAtZiBjb25mdGVzdCoKLQotZmkKLQotaWYgdGVzdCAkYWNfY3ZfaGVhZGVyX3N0ZGMgPSB5ZXM7IHRoZW4KLSAgIyBJU0MgMi4wLjIgc3RkbGliLmggZG9lcyBub3QgZGVjbGFyZSBmcmVlLCBjb250cmFyeSB0byBBTlNJLgotICBjYXQgY29uZmRlZnMuaCAtIDw8X0FDRU9GID5jb25mdGVzdC4kYWNfZXh0Ci0vKiBlbmQgY29uZmRlZnMuaC4gICovCi0jaW5jbHVkZSA8c3RkbGliLmg+Ci0KLV9BQ0VPRgotaWYgKGV2YWwgIiRhY19jcHAgY29uZnRlc3QuJGFjX2V4dCIpIDI+JjUgfAotICAkRUdSRVAgImZyZWUiID4vZGV2L251bGwgMj4mMTsgdGhlbiA6Ci0KLWVsc2UKLSAgYWNfY3ZfaGVhZGVyX3N0ZGM9bm8KLWZpCi1ybSAtZiBjb25mdGVzdCoKLQotZmkKLQotaWYgdGVzdCAkYWNfY3ZfaGVhZGVyX3N0ZGMgPSB5ZXM7IHRoZW4KLSAgIyAvYmluL2NjIGluIElyaXgtNC4wLjUgZ2V0cyBub24tQU5TSSBjdHlwZSBtYWNyb3MgdW5sZXNzIHVzaW5nIC1hbnNpLgotICBpZiB0ZXN0ICIkY3Jvc3NfY29tcGlsaW5nIiA9IHllczsgdGhlbiA6Ci0gIDoKLWVsc2UKLSAgY2F0IGNvbmZkZWZzLmggLSA8PF9BQ0VPRiA+Y29uZnRlc3QuJGFjX2V4dAotLyogZW5kIGNvbmZkZWZzLmguICAqLwotI2luY2x1ZGUgPGN0eXBlLmg+Ci0jaW5jbHVkZSA8c3RkbGliLmg+Ci0jaWYgKCgnICcgJiAweDBGRikgPT0gMHgwMjApCi0jIGRlZmluZSBJU0xPV0VSKGMpICgnYScgPD0gKGMpICYmIChjKSA8PSAneicpCi0jIGRlZmluZSBUT1VQUEVSKGMpIChJU0xPV0VSKGMpID8gJ0EnICsgKChjKSAtICdhJykgOiAoYykpCi0jZWxzZQotIyBkZWZpbmUgSVNMT1dFUihjKSBcCi0JCSAgICgoJ2EnIDw9IChjKSAmJiAoYykgPD0gJ2knKSBcCi0JCSAgICAgfHwgKCdqJyA8PSAoYykgJiYgKGMpIDw9ICdyJykgXAotCQkgICAgIHx8ICgncycgPD0gKGMpICYmIChjKSA8PSAneicpKQotIyBkZWZpbmUgVE9VUFBFUihjKSAoSVNMT1dFUihjKSA/ICgoYykgfCAweDQwKSA6IChjKSkKLSNlbmRpZgotCi0jZGVmaW5lIFhPUihlLCBmKSAoKChlKSAmJiAhKGYpKSB8fCAoIShlKSAmJiAoZikpKQotaW50Ci1tYWluICgpCi17Ci0gIGludCBpOwotICBmb3IgKGkgPSAwOyBpIDwgMjU2OyBpKyspCi0gICAgaWYgKFhPUiAoaXNsb3dlciAoaSksIElTTE9XRVIgKGkpKQotCXx8IHRvdXBwZXIgKGkpICE9IFRPVVBQRVIgKGkpKQotICAgICAgcmV0dXJuIDI7Ci0gIHJldHVybiAwOwotfQotX0FDRU9GCi1pZiBhY19mbl9jX3RyeV9ydW4gIiRMSU5FTk8iOyB0aGVuIDoKLQotZWxzZQotICBhY19jdl9oZWFkZXJfc3RkYz1ubwotZmkKLXJtIC1mIGNvcmUgKi5jb3JlIGNvcmUuY29uZnRlc3QuKiBnbW9uLm91dCBiYi5vdXQgY29uZnRlc3QkYWNfZXhlZXh0IFwKLSAgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdC5iZWFtIGNvbmZ0ZXN0LiRhY19leHQKLWZpCi0KLWZpCi1maQoteyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRhY19jdl9oZWFkZXJfc3RkYyIgPiY1Ci0kYXNfZWNobyAiJGFjX2N2X2hlYWRlcl9zdGRjIiA+JjY7IH0KLWlmIHRlc3QgJGFjX2N2X2hlYWRlcl9zdGRjID0geWVzOyB0aGVuCi0KLSRhc19lY2hvICIjZGVmaW5lIFNURENfSEVBREVSUyAxIiA+PmNvbmZkZWZzLmgKLQotZmkKLQotIyBPbiBJUklYIDUuMywgc3lzL3R5cGVzIGFuZCBpbnR0eXBlcy5oIGFyZSBjb25mbGljdGluZy4KLWZvciBhY19oZWFkZXIgaW4gc3lzL3R5cGVzLmggc3lzL3N0YXQuaCBzdGRsaWIuaCBzdHJpbmcuaCBtZW1vcnkuaCBzdHJpbmdzLmggXAotCQkgIGludHR5cGVzLmggc3RkaW50LmggdW5pc3RkLmgKLWRvIDoKLSAgYXNfYWNfSGVhZGVyPWAkYXNfZWNobyAiYWNfY3ZfaGVhZGVyXyRhY19oZWFkZXIiIHwgJGFzX3RyX3NoYAotYWNfZm5fY19jaGVja19oZWFkZXJfY29tcGlsZSAiJExJTkVOTyIgIiRhY19oZWFkZXIiICIkYXNfYWNfSGVhZGVyIiAiJGFjX2luY2x1ZGVzX2RlZmF1bHQKLSIKLWlmIGV2YWwgdGVzdCBcInhcJCIkYXNfYWNfSGVhZGVyIlwiID0geCJ5ZXMiOyB0aGVuIDoKLSAgY2F0ID4+Y29uZmRlZnMuaCA8PF9BQ0VPRgotI2RlZmluZSBgJGFzX2VjaG8gIkhBVkVfJGFjX2hlYWRlciIgfCAkYXNfdHJfY3BwYCAxCi1fQUNFT0YKLQotZmkKLQotZG9uZQotCi0KLQotaWYgdGVzdCAiJGFjX2N2X3Byb2dfY2Nfc3RkYyIgIT0gbm87IHRoZW4KLSAgVT0gQU5TSTJLTlI9Ci1lbHNlCi0gIFU9XyBBTlNJMktOUj0uL2Fuc2kya25yCi1maQotIyBFbnN1cmUgc29tZSBjaGVja3MgbmVlZGVkIGJ5IGFuc2kya25yIGl0c2VsZi4KLQotZm9yIGFjX2hlYWRlciBpbiBzdHJpbmcuaAotZG8gOgotICBhY19mbl9jX2NoZWNrX2hlYWRlcl9tb25ncmVsICIkTElORU5PIiAic3RyaW5nLmgiICJhY19jdl9oZWFkZXJfc3RyaW5nX2giICIkYWNfaW5jbHVkZXNfZGVmYXVsdCIKLWlmIHRlc3QgIngkYWNfY3ZfaGVhZGVyX3N0cmluZ19oIiA9IHh5ZXM7IHRoZW4gOgotICBjYXQgPj5jb25mZGVmcy5oIDw8X0FDRU9GCi0jZGVmaW5lIEhBVkVfU1RSSU5HX0ggMQotX0FDRU9GCi0KLWZpCi0KLWRvbmUKLQotCi0KLSMgQWRkIGNvbmZpZ3VyZSBvcHRpb24gLS1lbmFibGUtbWFpbnRhaW5lci1tb2RlIHdoaWNoIGVuYWJsZXMKLSMgZGVwZW5kZW5jeSBjaGVja2luZyBhbmQgZ2VuZXJhdGlvbiB1c2VmdWwgdG8gcGFja2FnZSBtYWludGFpbmVycy4KLSMgVGhpcyBpcyBtYWRlIGFuIG9wdGlvbiB0byBhdm9pZCBjb25mdXNpbmcgZW5kIHVzZXJzLgotCi17ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIHdoZXRoZXIgdG8gZW5hYmxlIG1haW50YWluZXItc3BlY2lmaWMgcG9ydGlvbnMgb2YgTWFrZWZpbGVzIiA+JjUKLSRhc19lY2hvX24gImNoZWNraW5nIHdoZXRoZXIgdG8gZW5hYmxlIG1haW50YWluZXItc3BlY2lmaWMgcG9ydGlvbnMgb2YgTWFrZWZpbGVzLi4uICIgPiY2OyB9Ci0gICAgIyBDaGVjayB3aGV0aGVyIC0tZW5hYmxlLW1haW50YWluZXItbW9kZSB3YXMgZ2l2ZW4uCi1pZiB0ZXN0ICIke2VuYWJsZV9tYWludGFpbmVyX21vZGUrc2V0fSIgPSBzZXQ7IHRoZW4gOgotICBlbmFibGV2YWw9JGVuYWJsZV9tYWludGFpbmVyX21vZGU7IFVTRV9NQUlOVEFJTkVSX01PREU9JGVuYWJsZXZhbAotZWxzZQotICBVU0VfTUFJTlRBSU5FUl9NT0RFPW5vCi1maQotCi0gIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkVVNFX01BSU5UQUlORVJfTU9ERSIgPiY1Ci0kYXNfZWNobyAiJFVTRV9NQUlOVEFJTkVSX01PREUiID4mNjsgfQotICAgaWYgdGVzdCAkVVNFX01BSU5UQUlORVJfTU9ERSA9IHllczsgdGhlbgotICBNQUlOVEFJTkVSX01PREVfVFJVRT0KLSAgTUFJTlRBSU5FUl9NT0RFX0ZBTFNFPScjJwotZWxzZQotICBNQUlOVEFJTkVSX01PREVfVFJVRT0nIycKLSAgTUFJTlRBSU5FUl9NT0RFX0ZBTFNFPQotZmkKLQotICBNQUlOVD0kTUFJTlRBSU5FUl9NT0RFX1RSVUUKLQotCi0KLSMgQ2hlY2sgZm9yIHByb2dyYW1zCi1hY19leHQ9YwotYWNfY3BwPSckQ1BQICRDUFBGTEFHUycKLWFjX2NvbXBpbGU9JyRDQyAtYyAkQ0ZMQUdTICRDUFBGTEFHUyBjb25mdGVzdC4kYWNfZXh0ID4mNScKLWFjX2xpbms9JyRDQyAtbyBjb25mdGVzdCRhY19leGVleHQgJENGTEFHUyAkQ1BQRkxBR1MgJExERkxBR1MgY29uZnRlc3QuJGFjX2V4dCAkTElCUyA+JjUnCi1hY19jb21waWxlcl9nbnU9JGFjX2N2X2NfY29tcGlsZXJfZ251Ci1pZiB0ZXN0IC1uICIkYWNfdG9vbF9wcmVmaXgiOyB0aGVuCi0gICMgRXh0cmFjdCB0aGUgZmlyc3Qgd29yZCBvZiAiJHthY190b29sX3ByZWZpeH1nY2MiLCBzbyBpdCBjYW4gYmUgYSBwcm9ncmFtIG5hbWUgd2l0aCBhcmdzLgotc2V0IGR1bW15ICR7YWNfdG9vbF9wcmVmaXh9Z2NjOyBhY193b3JkPSQyCi17ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGZvciAkYWNfd29yZCIgPiY1Ci0kYXNfZWNob19uICJjaGVja2luZyBmb3IgJGFjX3dvcmQuLi4gIiA+JjY7IH0KLWlmICR7YWNfY3ZfcHJvZ19DQys6fSBmYWxzZTsgdGhlbiA6Ci0gICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2Ci1lbHNlCi0gIGlmIHRlc3QgLW4gIiRDQyI7IHRoZW4KLSAgYWNfY3ZfcHJvZ19DQz0iJENDIiAjIExldCB0aGUgdXNlciBvdmVycmlkZSB0aGUgdGVzdC4KLWVsc2UKLWFzX3NhdmVfSUZTPSRJRlM7IElGUz0kUEFUSF9TRVBBUkFUT1IKLWZvciBhc19kaXIgaW4gJFBBVEgKLWRvCi0gIElGUz0kYXNfc2F2ZV9JRlMKLSAgdGVzdCAteiAiJGFzX2RpciIgJiYgYXNfZGlyPS4KLSAgICBmb3IgYWNfZXhlY19leHQgaW4gJycgJGFjX2V4ZWN1dGFibGVfZXh0ZW5zaW9uczsgZG8KLSAgaWYgeyB0ZXN0IC1mICIkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IiAmJiAkYXNfdGVzdF94ICIkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IjsgfTsgdGhlbgotICAgIGFjX2N2X3Byb2dfQ0M9IiR7YWNfdG9vbF9wcmVmaXh9Z2NjIgotICAgICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGZvdW5kICRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiID4mNQotICAgIGJyZWFrIDIKLSAgZmkKLWRvbmUKLSAgZG9uZQotSUZTPSRhc19zYXZlX0lGUwotCi1maQotZmkKLUNDPSRhY19jdl9wcm9nX0NDCi1pZiB0ZXN0IC1uICIkQ0MiOyB0aGVuCi0gIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkQ0MiID4mNQotJGFzX2VjaG8gIiRDQyIgPiY2OyB9Ci1lbHNlCi0gIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiBubyIgPiY1Ci0kYXNfZWNobyAibm8iID4mNjsgfQotZmkKLQotCi1maQotaWYgdGVzdCAteiAiJGFjX2N2X3Byb2dfQ0MiOyB0aGVuCi0gIGFjX2N0X0NDPSRDQwotICAjIEV4dHJhY3QgdGhlIGZpcnN0IHdvcmQgb2YgImdjYyIsIHNvIGl0IGNhbiBiZSBhIHByb2dyYW0gbmFtZSB3aXRoIGFyZ3MuCi1zZXQgZHVtbXkgZ2NjOyBhY193b3JkPSQyCi17ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGZvciAkYWNfd29yZCIgPiY1Ci0kYXNfZWNob19uICJjaGVja2luZyBmb3IgJGFjX3dvcmQuLi4gIiA+JjY7IH0KLWlmICR7YWNfY3ZfcHJvZ19hY19jdF9DQys6fSBmYWxzZTsgdGhlbiA6Ci0gICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2Ci1lbHNlCi0gIGlmIHRlc3QgLW4gIiRhY19jdF9DQyI7IHRoZW4KLSAgYWNfY3ZfcHJvZ19hY19jdF9DQz0iJGFjX2N0X0NDIiAjIExldCB0aGUgdXNlciBvdmVycmlkZSB0aGUgdGVzdC4KLWVsc2UKLWFzX3NhdmVfSUZTPSRJRlM7IElGUz0kUEFUSF9TRVBBUkFUT1IKLWZvciBhc19kaXIgaW4gJFBBVEgKLWRvCi0gIElGUz0kYXNfc2F2ZV9JRlMKLSAgdGVzdCAteiAiJGFzX2RpciIgJiYgYXNfZGlyPS4KLSAgICBmb3IgYWNfZXhlY19leHQgaW4gJycgJGFjX2V4ZWN1dGFibGVfZXh0ZW5zaW9uczsgZG8KLSAgaWYgeyB0ZXN0IC1mICIkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IiAmJiAkYXNfdGVzdF94ICIkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IjsgfTsgdGhlbgotICAgIGFjX2N2X3Byb2dfYWNfY3RfQ0M9ImdjYyIKLSAgICAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBmb3VuZCAkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IiA+JjUKLSAgICBicmVhayAyCi0gIGZpCi1kb25lCi0gIGRvbmUKLUlGUz0kYXNfc2F2ZV9JRlMKLQotZmkKLWZpCi1hY19jdF9DQz0kYWNfY3ZfcHJvZ19hY19jdF9DQwotaWYgdGVzdCAtbiAiJGFjX2N0X0NDIjsgdGhlbgotICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJGFjX2N0X0NDIiA+JjUKLSRhc19lY2hvICIkYWNfY3RfQ0MiID4mNjsgfQotZWxzZQotICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogbm8iID4mNQotJGFzX2VjaG8gIm5vIiA+JjY7IH0KLWZpCi0KLSAgaWYgdGVzdCAieCRhY19jdF9DQyIgPSB4OyB0aGVuCi0gICAgQ0M9IiIKLSAgZWxzZQotICAgIGNhc2UgJGNyb3NzX2NvbXBpbGluZzokYWNfdG9vbF93YXJuZWQgaW4KLXllczopCi17ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IFdBUk5JTkc6IHVzaW5nIGNyb3NzIHRvb2xzIG5vdCBwcmVmaXhlZCB3aXRoIGhvc3QgdHJpcGxldCIgPiY1Ci0kYXNfZWNobyAiJGFzX21lOiBXQVJOSU5HOiB1c2luZyBjcm9zcyB0b29scyBub3QgcHJlZml4ZWQgd2l0aCBob3N0IHRyaXBsZXQiID4mMjt9Ci1hY190b29sX3dhcm5lZD15ZXMgOzsKLWVzYWMKLSAgICBDQz0kYWNfY3RfQ0MKLSAgZmkKLWVsc2UKLSAgQ0M9IiRhY19jdl9wcm9nX0NDIgotZmkKLQotaWYgdGVzdCAteiAiJENDIjsgdGhlbgotICAgICAgICAgIGlmIHRlc3QgLW4gIiRhY190b29sX3ByZWZpeCI7IHRoZW4KLSAgICAjIEV4dHJhY3QgdGhlIGZpcnN0IHdvcmQgb2YgIiR7YWNfdG9vbF9wcmVmaXh9Y2MiLCBzbyBpdCBjYW4gYmUgYSBwcm9ncmFtIG5hbWUgd2l0aCBhcmdzLgotc2V0IGR1bW15ICR7YWNfdG9vbF9wcmVmaXh9Y2M7IGFjX3dvcmQ9JDIKLXsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgZm9yICRhY193b3JkIiA+JjUKLSRhc19lY2hvX24gImNoZWNraW5nIGZvciAkYWNfd29yZC4uLiAiID4mNjsgfQotaWYgJHthY19jdl9wcm9nX0NDKzp9IGZhbHNlOyB0aGVuIDoKLSAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKLWVsc2UKLSAgaWYgdGVzdCAtbiAiJENDIjsgdGhlbgotICBhY19jdl9wcm9nX0NDPSIkQ0MiICMgTGV0IHRoZSB1c2VyIG92ZXJyaWRlIHRoZSB0ZXN0LgotZWxzZQotYXNfc2F2ZV9JRlM9JElGUzsgSUZTPSRQQVRIX1NFUEFSQVRPUgotZm9yIGFzX2RpciBpbiAkUEFUSAotZG8KLSAgSUZTPSRhc19zYXZlX0lGUwotICB0ZXN0IC16ICIkYXNfZGlyIiAmJiBhc19kaXI9LgotICAgIGZvciBhY19leGVjX2V4dCBpbiAnJyAkYWNfZXhlY3V0YWJsZV9leHRlbnNpb25zOyBkbwotICBpZiB7IHRlc3QgLWYgIiRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiICYmICRhc190ZXN0X3ggIiRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiOyB9OyB0aGVuCi0gICAgYWNfY3ZfcHJvZ19DQz0iJHthY190b29sX3ByZWZpeH1jYyIKLSAgICAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBmb3VuZCAkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IiA+JjUKLSAgICBicmVhayAyCi0gIGZpCi1kb25lCi0gIGRvbmUKLUlGUz0kYXNfc2F2ZV9JRlMKLQotZmkKLWZpCi1DQz0kYWNfY3ZfcHJvZ19DQwotaWYgdGVzdCAtbiAiJENDIjsgdGhlbgotICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJENDIiA+JjUKLSRhc19lY2hvICIkQ0MiID4mNjsgfQotZWxzZQotICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogbm8iID4mNQotJGFzX2VjaG8gIm5vIiA+JjY7IH0KLWZpCi0KLQotICBmaQotZmkKLWlmIHRlc3QgLXogIiRDQyI7IHRoZW4KLSAgIyBFeHRyYWN0IHRoZSBmaXJzdCB3b3JkIG9mICJjYyIsIHNvIGl0IGNhbiBiZSBhIHByb2dyYW0gbmFtZSB3aXRoIGFyZ3MuCi1zZXQgZHVtbXkgY2M7IGFjX3dvcmQ9JDIKLXsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgZm9yICRhY193b3JkIiA+JjUKLSRhc19lY2hvX24gImNoZWNraW5nIGZvciAkYWNfd29yZC4uLiAiID4mNjsgfQotaWYgJHthY19jdl9wcm9nX0NDKzp9IGZhbHNlOyB0aGVuIDoKLSAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKLWVsc2UKLSAgaWYgdGVzdCAtbiAiJENDIjsgdGhlbgotICBhY19jdl9wcm9nX0NDPSIkQ0MiICMgTGV0IHRoZSB1c2VyIG92ZXJyaWRlIHRoZSB0ZXN0LgotZWxzZQotICBhY19wcm9nX3JlamVjdGVkPW5vCi1hc19zYXZlX0lGUz0kSUZTOyBJRlM9JFBBVEhfU0VQQVJBVE9SCi1mb3IgYXNfZGlyIGluICRQQVRICi1kbwotICBJRlM9JGFzX3NhdmVfSUZTCi0gIHRlc3QgLXogIiRhc19kaXIiICYmIGFzX2Rpcj0uCi0gICAgZm9yIGFjX2V4ZWNfZXh0IGluICcnICRhY19leGVjdXRhYmxlX2V4dGVuc2lvbnM7IGRvCi0gIGlmIHsgdGVzdCAtZiAiJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCIgJiYgJGFzX3Rlc3RfeCAiJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCI7IH07IHRoZW4KLSAgICBpZiB0ZXN0ICIkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IiA9ICIvdXNyL3VjYi9jYyI7IHRoZW4KLSAgICAgICBhY19wcm9nX3JlamVjdGVkPXllcwotICAgICAgIGNvbnRpbnVlCi0gICAgIGZpCi0gICAgYWNfY3ZfcHJvZ19DQz0iY2MiCi0gICAgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogZm91bmQgJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCIgPiY1Ci0gICAgYnJlYWsgMgotICBmaQotZG9uZQotICBkb25lCi1JRlM9JGFzX3NhdmVfSUZTCi0KLWlmIHRlc3QgJGFjX3Byb2dfcmVqZWN0ZWQgPSB5ZXM7IHRoZW4KLSAgIyBXZSBmb3VuZCBhIGJvZ29uIGluIHRoZSBwYXRoLCBzbyBtYWtlIHN1cmUgd2UgbmV2ZXIgdXNlIGl0LgotICBzZXQgZHVtbXkgJGFjX2N2X3Byb2dfQ0MKLSAgc2hpZnQKLSAgaWYgdGVzdCAkIyAhPSAwOyB0aGVuCi0gICAgIyBXZSBjaG9zZSBhIGRpZmZlcmVudCBjb21waWxlciBmcm9tIHRoZSBib2d1cyBvbmUuCi0gICAgIyBIb3dldmVyLCBpdCBoYXMgdGhlIHNhbWUgYmFzZW5hbWUsIHNvIHRoZSBib2dvbiB3aWxsIGJlIGNob3NlbgotICAgICMgZmlyc3QgaWYgd2Ugc2V0IENDIHRvIGp1c3QgdGhlIGJhc2VuYW1lOyB1c2UgdGhlIGZ1bGwgZmlsZSBuYW1lLgotICAgIHNoaWZ0Ci0gICAgYWNfY3ZfcHJvZ19DQz0iJGFzX2Rpci8kYWNfd29yZCR7MSsnICd9JEAiCi0gIGZpCi1maQotZmkKLWZpCi1DQz0kYWNfY3ZfcHJvZ19DQwotaWYgdGVzdCAtbiAiJENDIjsgdGhlbgotICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJENDIiA+JjUKLSRhc19lY2hvICIkQ0MiID4mNjsgfQotZWxzZQotICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogbm8iID4mNQotJGFzX2VjaG8gIm5vIiA+JjY7IH0KLWZpCi0KLQotZmkKLWlmIHRlc3QgLXogIiRDQyI7IHRoZW4KLSAgaWYgdGVzdCAtbiAiJGFjX3Rvb2xfcHJlZml4IjsgdGhlbgotICBmb3IgYWNfcHJvZyBpbiBjbC5leGUKLSAgZG8KLSAgICAjIEV4dHJhY3QgdGhlIGZpcnN0IHdvcmQgb2YgIiRhY190b29sX3ByZWZpeCRhY19wcm9nIiwgc28gaXQgY2FuIGJlIGEgcHJvZ3JhbSBuYW1lIHdpdGggYXJncy4KLXNldCBkdW1teSAkYWNfdG9vbF9wcmVmaXgkYWNfcHJvZzsgYWNfd29yZD0kMgoteyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBmb3IgJGFjX3dvcmQiID4mNQotJGFzX2VjaG9fbiAiY2hlY2tpbmcgZm9yICRhY193b3JkLi4uICIgPiY2OyB9Ci1pZiAke2FjX2N2X3Byb2dfQ0MrOn0gZmFsc2U7IHRoZW4gOgotICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgotZWxzZQotICBpZiB0ZXN0IC1uICIkQ0MiOyB0aGVuCi0gIGFjX2N2X3Byb2dfQ0M9IiRDQyIgIyBMZXQgdGhlIHVzZXIgb3ZlcnJpZGUgdGhlIHRlc3QuCi1lbHNlCi1hc19zYXZlX0lGUz0kSUZTOyBJRlM9JFBBVEhfU0VQQVJBVE9SCi1mb3IgYXNfZGlyIGluICRQQVRICi1kbwotICBJRlM9JGFzX3NhdmVfSUZTCi0gIHRlc3QgLXogIiRhc19kaXIiICYmIGFzX2Rpcj0uCi0gICAgZm9yIGFjX2V4ZWNfZXh0IGluICcnICRhY19leGVjdXRhYmxlX2V4dGVuc2lvbnM7IGRvCi0gIGlmIHsgdGVzdCAtZiAiJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCIgJiYgJGFzX3Rlc3RfeCAiJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCI7IH07IHRoZW4KLSAgICBhY19jdl9wcm9nX0NDPSIkYWNfdG9vbF9wcmVmaXgkYWNfcHJvZyIKLSAgICAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBmb3VuZCAkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IiA+JjUKLSAgICBicmVhayAyCi0gIGZpCi1kb25lCi0gIGRvbmUKLUlGUz0kYXNfc2F2ZV9JRlMKLQotZmkKLWZpCi1DQz0kYWNfY3ZfcHJvZ19DQwotaWYgdGVzdCAtbiAiJENDIjsgdGhlbgotICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJENDIiA+JjUKLSRhc19lY2hvICIkQ0MiID4mNjsgfQotZWxzZQotICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogbm8iID4mNQotJGFzX2VjaG8gIm5vIiA+JjY7IH0KLWZpCi0KLQotICAgIHRlc3QgLW4gIiRDQyIgJiYgYnJlYWsKLSAgZG9uZQotZmkKLWlmIHRlc3QgLXogIiRDQyI7IHRoZW4KLSAgYWNfY3RfQ0M9JENDCi0gIGZvciBhY19wcm9nIGluIGNsLmV4ZQotZG8KLSAgIyBFeHRyYWN0IHRoZSBmaXJzdCB3b3JkIG9mICIkYWNfcHJvZyIsIHNvIGl0IGNhbiBiZSBhIHByb2dyYW0gbmFtZSB3aXRoIGFyZ3MuCi1zZXQgZHVtbXkgJGFjX3Byb2c7IGFjX3dvcmQ9JDIKLXsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgZm9yICRhY193b3JkIiA+JjUKLSRhc19lY2hvX24gImNoZWNraW5nIGZvciAkYWNfd29yZC4uLiAiID4mNjsgfQotaWYgJHthY19jdl9wcm9nX2FjX2N0X0NDKzp9IGZhbHNlOyB0aGVuIDoKLSAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKLWVsc2UKLSAgaWYgdGVzdCAtbiAiJGFjX2N0X0NDIjsgdGhlbgotICBhY19jdl9wcm9nX2FjX2N0X0NDPSIkYWNfY3RfQ0MiICMgTGV0IHRoZSB1c2VyIG92ZXJyaWRlIHRoZSB0ZXN0LgotZWxzZQotYXNfc2F2ZV9JRlM9JElGUzsgSUZTPSRQQVRIX1NFUEFSQVRPUgotZm9yIGFzX2RpciBpbiAkUEFUSAotZG8KLSAgSUZTPSRhc19zYXZlX0lGUwotICB0ZXN0IC16ICIkYXNfZGlyIiAmJiBhc19kaXI9LgotICAgIGZvciBhY19leGVjX2V4dCBpbiAnJyAkYWNfZXhlY3V0YWJsZV9leHRlbnNpb25zOyBkbwotICBpZiB7IHRlc3QgLWYgIiRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiICYmICRhc190ZXN0X3ggIiRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiOyB9OyB0aGVuCi0gICAgYWNfY3ZfcHJvZ19hY19jdF9DQz0iJGFjX3Byb2ciCi0gICAgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogZm91bmQgJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCIgPiY1Ci0gICAgYnJlYWsgMgotICBmaQotZG9uZQotICBkb25lCi1JRlM9JGFzX3NhdmVfSUZTCi0KLWZpCi1maQotYWNfY3RfQ0M9JGFjX2N2X3Byb2dfYWNfY3RfQ0MKLWlmIHRlc3QgLW4gIiRhY19jdF9DQyI7IHRoZW4KLSAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRhY19jdF9DQyIgPiY1Ci0kYXNfZWNobyAiJGFjX2N0X0NDIiA+JjY7IH0KLWVsc2UKLSAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6IG5vIiA+JjUKLSRhc19lY2hvICJubyIgPiY2OyB9Ci1maQotCi0KLSAgdGVzdCAtbiAiJGFjX2N0X0NDIiAmJiBicmVhawotZG9uZQotCi0gIGlmIHRlc3QgIngkYWNfY3RfQ0MiID0geDsgdGhlbgotICAgIENDPSIiCi0gIGVsc2UKLSAgICBjYXNlICRjcm9zc19jb21waWxpbmc6JGFjX3Rvb2xfd2FybmVkIGluCi15ZXM6KQoteyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBXQVJOSU5HOiB1c2luZyBjcm9zcyB0b29scyBub3QgcHJlZml4ZWQgd2l0aCBob3N0IHRyaXBsZXQiID4mNQotJGFzX2VjaG8gIiRhc19tZTogV0FSTklORzogdXNpbmcgY3Jvc3MgdG9vbHMgbm90IHByZWZpeGVkIHdpdGggaG9zdCB0cmlwbGV0IiA+JjI7fQotYWNfdG9vbF93YXJuZWQ9eWVzIDs7Ci1lc2FjCi0gICAgQ0M9JGFjX2N0X0NDCi0gIGZpCi1maQotCi1maQotCi0KLXRlc3QgLXogIiRDQyIgJiYgeyB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGVycm9yOiBpbiBcYCRhY19wd2QnOiIgPiY1Ci0kYXNfZWNobyAiJGFzX21lOiBlcnJvcjogaW4gXGAkYWNfcHdkJzoiID4mMjt9Ci1hc19mbl9lcnJvciAkPyAibm8gYWNjZXB0YWJsZSBDIGNvbXBpbGVyIGZvdW5kIGluIFwkUEFUSAotU2VlIFxgY29uZmlnLmxvZycgZm9yIG1vcmUgZGV0YWlscyIgIiRMSU5FTk8iIDU7IH0KLQotIyBQcm92aWRlIHNvbWUgaW5mb3JtYXRpb24gYWJvdXQgdGhlIGNvbXBpbGVyLgotJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgZm9yIEMgY29tcGlsZXIgdmVyc2lvbiIgPiY1Ci1zZXQgWCAkYWNfY29tcGlsZQotYWNfY29tcGlsZXI9JDIKLWZvciBhY19vcHRpb24gaW4gLS12ZXJzaW9uIC12IC1WIC1xdmVyc2lvbjsgZG8KLSAgeyB7IGFjX3RyeT0iJGFjX2NvbXBpbGVyICRhY19vcHRpb24gPiY1IgotY2FzZSAiKCgkYWNfdHJ5IiBpbgotICAqXCIqIHwgKlxgKiB8ICpcXCopIGFjX3RyeV9lY2hvPVwkYWNfdHJ5OzsKLSAgKikgYWNfdHJ5X2VjaG89JGFjX3RyeTs7Ci1lc2FjCi1ldmFsIGFjX3RyeV9lY2hvPSJcIlwkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306ICRhY190cnlfZWNob1wiIgotJGFzX2VjaG8gIiRhY190cnlfZWNobyI7IH0gPiY1Ci0gIChldmFsICIkYWNfY29tcGlsZXIgJGFjX29wdGlvbiA+JjUiKSAyPmNvbmZ0ZXN0LmVycgotICBhY19zdGF0dXM9JD8KLSAgaWYgdGVzdCAtcyBjb25mdGVzdC5lcnI7IHRoZW4KLSAgICBzZWQgJzEwYVwKLS4uLiByZXN0IG9mIHN0ZGVyciBvdXRwdXQgZGVsZXRlZCAuLi4KLSAgICAgICAgIDEwcScgY29uZnRlc3QuZXJyID5jb25mdGVzdC5lcjEKLSAgICBjYXQgY29uZnRlc3QuZXIxID4mNQotICBmaQotICBybSAtZiBjb25mdGVzdC5lcjEgY29uZnRlc3QuZXJyCi0gICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IFwkPyA9ICRhY19zdGF0dXMiID4mNQotICB0ZXN0ICRhY19zdGF0dXMgPSAwOyB9Ci1kb25lCi0KLXsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgd2hldGhlciB3ZSBhcmUgdXNpbmcgdGhlIEdOVSBDIGNvbXBpbGVyIiA+JjUKLSRhc19lY2hvX24gImNoZWNraW5nIHdoZXRoZXIgd2UgYXJlIHVzaW5nIHRoZSBHTlUgQyBjb21waWxlci4uLiAiID4mNjsgfQotaWYgJHthY19jdl9jX2NvbXBpbGVyX2dudSs6fSBmYWxzZTsgdGhlbiA6Ci0gICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2Ci1lbHNlCi0gIGNhdCBjb25mZGVmcy5oIC0gPDxfQUNFT0YgPmNvbmZ0ZXN0LiRhY19leHQKLS8qIGVuZCBjb25mZGVmcy5oLiAgKi8KLQotaW50Ci1tYWluICgpCi17Ci0jaWZuZGVmIF9fR05VQ19fCi0gICAgICAgY2hva2UgbWUKLSNlbmRpZgotCi0gIDsKLSAgcmV0dXJuIDA7Ci19Ci1fQUNFT0YKLWlmIGFjX2ZuX2NfdHJ5X2NvbXBpbGUgIiRMSU5FTk8iOyB0aGVuIDoKLSAgYWNfY29tcGlsZXJfZ251PXllcwotZWxzZQotICBhY19jb21waWxlcl9nbnU9bm8KLWZpCi1ybSAtZiBjb3JlIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0LiRhY19leHQKLWFjX2N2X2NfY29tcGlsZXJfZ251PSRhY19jb21waWxlcl9nbnUKLQotZmkKLXsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkYWNfY3ZfY19jb21waWxlcl9nbnUiID4mNQotJGFzX2VjaG8gIiRhY19jdl9jX2NvbXBpbGVyX2dudSIgPiY2OyB9Ci1pZiB0ZXN0ICRhY19jb21waWxlcl9nbnUgPSB5ZXM7IHRoZW4KLSAgR0NDPXllcwotZWxzZQotICBHQ0M9Ci1maQotYWNfdGVzdF9DRkxBR1M9JHtDRkxBR1Mrc2V0fQotYWNfc2F2ZV9DRkxBR1M9JENGTEFHUwoteyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyB3aGV0aGVyICRDQyBhY2NlcHRzIC1nIiA+JjUKLSRhc19lY2hvX24gImNoZWNraW5nIHdoZXRoZXIgJENDIGFjY2VwdHMgLWcuLi4gIiA+JjY7IH0KLWlmICR7YWNfY3ZfcHJvZ19jY19nKzp9IGZhbHNlOyB0aGVuIDoKLSAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKLWVsc2UKLSAgYWNfc2F2ZV9jX3dlcnJvcl9mbGFnPSRhY19jX3dlcnJvcl9mbGFnCi0gICBhY19jX3dlcnJvcl9mbGFnPXllcwotICAgYWNfY3ZfcHJvZ19jY19nPW5vCi0gICBDRkxBR1M9Ii1nIgotICAgY2F0IGNvbmZkZWZzLmggLSA8PF9BQ0VPRiA+Y29uZnRlc3QuJGFjX2V4dAotLyogZW5kIGNvbmZkZWZzLmguICAqLwotCi1pbnQKLW1haW4gKCkKLXsKLQotICA7Ci0gIHJldHVybiAwOwotfQotX0FDRU9GCi1pZiBhY19mbl9jX3RyeV9jb21waWxlICIkTElORU5PIjsgdGhlbiA6Ci0gIGFjX2N2X3Byb2dfY2NfZz15ZXMKLWVsc2UKLSAgQ0ZMQUdTPSIiCi0gICAgICBjYXQgY29uZmRlZnMuaCAtIDw8X0FDRU9GID5jb25mdGVzdC4kYWNfZXh0Ci0vKiBlbmQgY29uZmRlZnMuaC4gICovCi0KLWludAotbWFpbiAoKQotewotCi0gIDsKLSAgcmV0dXJuIDA7Ci19Ci1fQUNFT0YKLWlmIGFjX2ZuX2NfdHJ5X2NvbXBpbGUgIiRMSU5FTk8iOyB0aGVuIDoKLQotZWxzZQotICBhY19jX3dlcnJvcl9mbGFnPSRhY19zYXZlX2Nfd2Vycm9yX2ZsYWcKLQkgQ0ZMQUdTPSItZyIKLQkgY2F0IGNvbmZkZWZzLmggLSA8PF9BQ0VPRiA+Y29uZnRlc3QuJGFjX2V4dAotLyogZW5kIGNvbmZkZWZzLmguICAqLwotCi1pbnQKLW1haW4gKCkKLXsKLQotICA7Ci0gIHJldHVybiAwOwotfQotX0FDRU9GCi1pZiBhY19mbl9jX3RyeV9jb21waWxlICIkTElORU5PIjsgdGhlbiA6Ci0gIGFjX2N2X3Byb2dfY2NfZz15ZXMKLWZpCi1ybSAtZiBjb3JlIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0LiRhY19leHQKLWZpCi1ybSAtZiBjb3JlIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0LiRhY19leHQKLWZpCi1ybSAtZiBjb3JlIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0LiRhY19leHQKLSAgIGFjX2Nfd2Vycm9yX2ZsYWc9JGFjX3NhdmVfY193ZXJyb3JfZmxhZwotZmkKLXsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkYWNfY3ZfcHJvZ19jY19nIiA+JjUKLSRhc19lY2hvICIkYWNfY3ZfcHJvZ19jY19nIiA+JjY7IH0KLWlmIHRlc3QgIiRhY190ZXN0X0NGTEFHUyIgPSBzZXQ7IHRoZW4KLSAgQ0ZMQUdTPSRhY19zYXZlX0NGTEFHUwotZWxpZiB0ZXN0ICRhY19jdl9wcm9nX2NjX2cgPSB5ZXM7IHRoZW4KLSAgaWYgdGVzdCAiJEdDQyIgPSB5ZXM7IHRoZW4KLSAgICBDRkxBR1M9Ii1nIC1PMiIKLSAgZWxzZQotICAgIENGTEFHUz0iLWciCi0gIGZpCi1lbHNlCi0gIGlmIHRlc3QgIiRHQ0MiID0geWVzOyB0aGVuCi0gICAgQ0ZMQUdTPSItTzIiCi0gIGVsc2UKLSAgICBDRkxBR1M9Ci0gIGZpCi1maQoteyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBmb3IgJENDIG9wdGlvbiB0byBhY2NlcHQgSVNPIEM4OSIgPiY1Ci0kYXNfZWNob19uICJjaGVja2luZyBmb3IgJENDIG9wdGlvbiB0byBhY2NlcHQgSVNPIEM4OS4uLiAiID4mNjsgfQotaWYgJHthY19jdl9wcm9nX2NjX2M4OSs6fSBmYWxzZTsgdGhlbiA6Ci0gICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2Ci1lbHNlCi0gIGFjX2N2X3Byb2dfY2NfYzg5PW5vCi1hY19zYXZlX0NDPSRDQwotY2F0IGNvbmZkZWZzLmggLSA8PF9BQ0VPRiA+Y29uZnRlc3QuJGFjX2V4dAotLyogZW5kIGNvbmZkZWZzLmguICAqLwotI2luY2x1ZGUgPHN0ZGFyZy5oPgotI2luY2x1ZGUgPHN0ZGlvLmg+Ci0jaW5jbHVkZSA8c3lzL3R5cGVzLmg+Ci0jaW5jbHVkZSA8c3lzL3N0YXQuaD4KLS8qIE1vc3Qgb2YgdGhlIGZvbGxvd2luZyB0ZXN0cyBhcmUgc3RvbGVuIGZyb20gUkNTIDUuNydzIHNyYy9jb25mLnNoLiAgKi8KLXN0cnVjdCBidWYgeyBpbnQgeDsgfTsKLUZJTEUgKiAoKnJjc29wZW4pIChzdHJ1Y3QgYnVmICosIHN0cnVjdCBzdGF0ICosIGludCk7Ci1zdGF0aWMgY2hhciAqZSAocCwgaSkKLSAgICAgY2hhciAqKnA7Ci0gICAgIGludCBpOwotewotICByZXR1cm4gcFtpXTsKLX0KLXN0YXRpYyBjaGFyICpmIChjaGFyICogKCpnKSAoY2hhciAqKiwgaW50KSwgY2hhciAqKnAsIC4uLikKLXsKLSAgY2hhciAqczsKLSAgdmFfbGlzdCB2OwotICB2YV9zdGFydCAodixwKTsKLSAgcyA9IGcgKHAsIHZhX2FyZyAodixpbnQpKTsKLSAgdmFfZW5kICh2KTsKLSAgcmV0dXJuIHM7Ci19Ci0KLS8qIE9TRiA0LjAgQ29tcGFxIGNjIGlzIHNvbWUgc29ydCBvZiBhbG1vc3QtQU5TSSBieSBkZWZhdWx0LiAgSXQgaGFzCi0gICBmdW5jdGlvbiBwcm90b3R5cGVzIGFuZCBzdHVmZiwgYnV0IG5vdCAnXHhISCcgaGV4IGNoYXJhY3RlciBjb25zdGFudHMuCi0gICBUaGVzZSBkb24ndCBwcm92b2tlIGFuIGVycm9yIHVuZm9ydHVuYXRlbHksIGluc3RlYWQgYXJlIHNpbGVudGx5IHRyZWF0ZWQKLSAgIGFzICd4Jy4gIFRoZSBmb2xsb3dpbmcgaW5kdWNlcyBhbiBlcnJvciwgdW50aWwgLXN0ZCBpcyBhZGRlZCB0byBnZXQKLSAgIHByb3BlciBBTlNJIG1vZGUuICBDdXJpb3VzbHkgJ1x4MDAnIT0neCcgYWx3YXlzIGNvbWVzIG91dCB0cnVlLCBmb3IgYW4KLSAgIGFycmF5IHNpemUgYXQgbGVhc3QuICBJdCdzIG5lY2Vzc2FyeSB0byB3cml0ZSAnXHgwMCc9PTAgdG8gZ2V0IHNvbWV0aGluZwotICAgdGhhdCdzIHRydWUgb25seSB3aXRoIC1zdGQuICAqLwotaW50IG9zZjRfY2NfYXJyYXkgWydceDAwJyA9PSAwID8gMSA6IC0xXTsKLQotLyogSUJNIEMgNiBmb3IgQUlYIGlzIGFsbW9zdC1BTlNJIGJ5IGRlZmF1bHQsIGJ1dCBpdCByZXBsYWNlcyBtYWNybyBwYXJhbWV0ZXJzCi0gICBpbnNpZGUgc3RyaW5ncyBhbmQgY2hhcmFjdGVyIGNvbnN0YW50cy4gICovCi0jZGVmaW5lIEZPTyh4KSAneCcKLWludCB4bGM2X2NjX2FycmF5W0ZPTyhhKSA9PSAneCcgPyAxIDogLTFdOwotCi1pbnQgdGVzdCAoaW50IGksIGRvdWJsZSB4KTsKLXN0cnVjdCBzMSB7aW50ICgqZikgKGludCBhKTt9Owotc3RydWN0IHMyIHtpbnQgKCpmKSAoZG91YmxlIGEpO307Ci1pbnQgcGFpcm5hbWVzIChpbnQsIGNoYXIgKiosIEZJTEUgKigqKShzdHJ1Y3QgYnVmICosIHN0cnVjdCBzdGF0ICosIGludCksIGludCwgaW50KTsKLWludCBhcmdjOwotY2hhciAqKmFyZ3Y7Ci1pbnQKLW1haW4gKCkKLXsKLXJldHVybiBmIChlLCBhcmd2LCAwKSAhPSBhcmd2WzBdICB8fCAgZiAoZSwgYXJndiwgMSkgIT0gYXJndlsxXTsKLSAgOwotICByZXR1cm4gMDsKLX0KLV9BQ0VPRgotZm9yIGFjX2FyZyBpbiAnJyAtcWxhbmdsdmw9ZXh0Yzg5IC1xbGFuZ2x2bD1hbnNpIC1zdGQgXAotCS1BZSAiLUFhIC1EX0hQVVhfU09VUkNFIiAiLVhjIC1EX19FWFRFTlNJT05TX18iCi1kbwotICBDQz0iJGFjX3NhdmVfQ0MgJGFjX2FyZyIKLSAgaWYgYWNfZm5fY190cnlfY29tcGlsZSAiJExJTkVOTyI7IHRoZW4gOgotICBhY19jdl9wcm9nX2NjX2M4OT0kYWNfYXJnCi1maQotcm0gLWYgY29yZSBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dAotICB0ZXN0ICJ4JGFjX2N2X3Byb2dfY2NfYzg5IiAhPSAieG5vIiAmJiBicmVhawotZG9uZQotcm0gLWYgY29uZnRlc3QuJGFjX2V4dAotQ0M9JGFjX3NhdmVfQ0MKLQotZmkKLSMgQUNfQ0FDSEVfVkFMCi1jYXNlICJ4JGFjX2N2X3Byb2dfY2NfYzg5IiBpbgotICB4KQotICAgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiBub25lIG5lZWRlZCIgPiY1Ci0kYXNfZWNobyAibm9uZSBuZWVkZWQiID4mNjsgfSA7OwotICB4bm8pCi0gICAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6IHVuc3VwcG9ydGVkIiA+JjUKLSRhc19lY2hvICJ1bnN1cHBvcnRlZCIgPiY2OyB9IDs7Ci0gICopCi0gICAgQ0M9IiRDQyAkYWNfY3ZfcHJvZ19jY19jODkiCi0gICAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRhY19jdl9wcm9nX2NjX2M4OSIgPiY1Ci0kYXNfZWNobyAiJGFjX2N2X3Byb2dfY2NfYzg5IiA+JjY7IH0gOzsKLWVzYWMKLWlmIHRlc3QgIngkYWNfY3ZfcHJvZ19jY19jODkiICE9IHhubzsgdGhlbiA6Ci0KLWZpCi0KLWFjX2V4dD1jCi1hY19jcHA9JyRDUFAgJENQUEZMQUdTJwotYWNfY29tcGlsZT0nJENDIC1jICRDRkxBR1MgJENQUEZMQUdTIGNvbmZ0ZXN0LiRhY19leHQgPiY1JwotYWNfbGluaz0nJENDIC1vIGNvbmZ0ZXN0JGFjX2V4ZWV4dCAkQ0ZMQUdTICRDUFBGTEFHUyAkTERGTEFHUyBjb25mdGVzdC4kYWNfZXh0ICRMSUJTID4mNScKLWFjX2NvbXBpbGVyX2dudT0kYWNfY3ZfY19jb21waWxlcl9nbnUKLQotZGVwY2M9IiRDQyIgICBhbV9jb21waWxlcl9saXN0PQotCi17ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGRlcGVuZGVuY3kgc3R5bGUgb2YgJGRlcGNjIiA+JjUKLSRhc19lY2hvX24gImNoZWNraW5nIGRlcGVuZGVuY3kgc3R5bGUgb2YgJGRlcGNjLi4uICIgPiY2OyB9Ci1pZiAke2FtX2N2X0NDX2RlcGVuZGVuY2llc19jb21waWxlcl90eXBlKzp9IGZhbHNlOyB0aGVuIDoKLSAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKLWVsc2UKLSAgaWYgdGVzdCAteiAiJEFNREVQX1RSVUUiICYmIHRlc3QgLWYgIiRhbV9kZXBjb21wIjsgdGhlbgotICAjIFdlIG1ha2UgYSBzdWJkaXIgYW5kIGRvIHRoZSB0ZXN0cyB0aGVyZS4gIE90aGVyd2lzZSB3ZSBjYW4gZW5kIHVwCi0gICMgbWFraW5nIGJvZ3VzIGZpbGVzIHRoYXQgd2UgZG9uJ3Qga25vdyBhYm91dCBhbmQgbmV2ZXIgcmVtb3ZlLiAgRm9yCi0gICMgaW5zdGFuY2UgaXQgd2FzIHJlcG9ydGVkIHRoYXQgb24gSFAtVVggdGhlIGdjYyB0ZXN0IHdpbGwgZW5kIHVwCi0gICMgbWFraW5nIGEgZHVtbXkgZmlsZSBuYW1lZCBgRCcgLS0gYmVjYXVzZSBgLU1EJyBtZWFucyBgcHV0IHRoZSBvdXRwdXQKLSAgIyBpbiBEJy4KLSAgbWtkaXIgY29uZnRlc3QuZGlyCi0gICMgQ29weSBkZXBjb21wIHRvIHN1YmRpciBiZWNhdXNlIG90aGVyd2lzZSB3ZSB3b24ndCBmaW5kIGl0IGlmIHdlJ3JlCi0gICMgdXNpbmcgYSByZWxhdGl2ZSBkaXJlY3RvcnkuCi0gIGNwICIkYW1fZGVwY29tcCIgY29uZnRlc3QuZGlyCi0gIGNkIGNvbmZ0ZXN0LmRpcgotICAjIFdlIHdpbGwgYnVpbGQgb2JqZWN0cyBhbmQgZGVwZW5kZW5jaWVzIGluIGEgc3ViZGlyZWN0b3J5IGJlY2F1c2UKLSAgIyBpdCBoZWxwcyB0byBkZXRlY3QgaW5hcHBsaWNhYmxlIGRlcGVuZGVuY3kgbW9kZXMuICBGb3IgaW5zdGFuY2UKLSAgIyBib3RoIFRydTY0J3MgY2MgYW5kIElDQyBzdXBwb3J0IC1NRCB0byBvdXRwdXQgZGVwZW5kZW5jaWVzIGFzIGEKLSAgIyBzaWRlIGVmZmVjdCBvZiBjb21waWxhdGlvbiwgYnV0IElDQyB3aWxsIHB1dCB0aGUgZGVwZW5kZW5jaWVzIGluCi0gICMgdGhlIGN1cnJlbnQgZGlyZWN0b3J5IHdoaWxlIFRydTY0IHdpbGwgcHV0IHRoZW0gaW4gdGhlIG9iamVjdAotICAjIGRpcmVjdG9yeS4KLSAgbWtkaXIgc3ViCi0KLSAgYW1fY3ZfQ0NfZGVwZW5kZW5jaWVzX2NvbXBpbGVyX3R5cGU9bm9uZQotICBpZiB0ZXN0ICIkYW1fY29tcGlsZXJfbGlzdCIgPSAiIjsgdGhlbgotICAgICBhbV9jb21waWxlcl9saXN0PWBzZWQgLW4gJ3MvXiMqXChbYS16QS1aMC05XSpcKSkkL1wxL3AnIDwgLi9kZXBjb21wYAotICBmaQotICBhbV9fdW5pdmVyc2FsPWZhbHNlCi0gIGNhc2UgIiAkZGVwY2MgIiBpbiAjKAotICAgICAqXCAtYXJjaFwgKlwgLWFyY2hcICopIGFtX191bml2ZXJzYWw9dHJ1ZSA7OwotICAgICBlc2FjCi0KLSAgZm9yIGRlcG1vZGUgaW4gJGFtX2NvbXBpbGVyX2xpc3Q7IGRvCi0gICAgIyBTZXR1cCBhIHNvdXJjZSB3aXRoIG1hbnkgZGVwZW5kZW5jaWVzLCBiZWNhdXNlIHNvbWUgY29tcGlsZXJzCi0gICAgIyBsaWtlIHRvIHdyYXAgbGFyZ2UgZGVwZW5kZW5jeSBsaXN0cyBvbiBjb2x1bW4gODAgKHdpdGggXCksIGFuZAotICAgICMgd2Ugc2hvdWxkIG5vdCBjaG9vc2UgYSBkZXBjb21wIG1vZGUgd2hpY2ggaXMgY29uZnVzZWQgYnkgdGhpcy4KLSAgICAjCi0gICAgIyBXZSBuZWVkIHRvIHJlY3JlYXRlIHRoZXNlIGZpbGVzIGZvciBlYWNoIHRlc3QsIGFzIHRoZSBjb21waWxlciBtYXkKLSAgICAjIG92ZXJ3cml0ZSBzb21lIG9mIHRoZW0gd2hlbiB0ZXN0aW5nIHdpdGggb2JzY3VyZSBjb21tYW5kIGxpbmVzLgotICAgICMgVGhpcyBoYXBwZW5zIGF0IGxlYXN0IHdpdGggdGhlIEFJWCBDIGNvbXBpbGVyLgotICAgIDogPiBzdWIvY29uZnRlc3QuYwotICAgIGZvciBpIGluIDEgMiAzIDQgNSA2OyBkbwotICAgICAgZWNobyAnI2luY2x1ZGUgImNvbmZ0c3QnJGknLmgiJyA+PiBzdWIvY29uZnRlc3QuYwotICAgICAgIyBVc2luZyBgOiA+IHN1Yi9jb25mdHN0JGkuaCcgY3JlYXRlcyBvbmx5IHN1Yi9jb25mdHN0MS5oIHdpdGgKLSAgICAgICMgU29sYXJpcyA4J3Mgey91c3IsfS9iaW4vc2guCi0gICAgICB0b3VjaCBzdWIvY29uZnRzdCRpLmgKLSAgICBkb25lCi0gICAgZWNobyAiJHthbV9faW5jbHVkZX0gJHthbV9fcXVvdGV9c3ViL2NvbmZ0ZXN0LlBvJHthbV9fcXVvdGV9IiA+IGNvbmZtZgotCi0gICAgIyBXZSBjaGVjayB3aXRoIGAtYycgYW5kIGAtbycgZm9yIHRoZSBzYWtlIG9mIHRoZSAiZGFzaG1zdGRvdXQiCi0gICAgIyBtb2RlLiAgSXQgdHVybnMgb3V0IHRoYXQgdGhlIFN1blBybyBDKysgY29tcGlsZXIgZG9lcyBub3QgcHJvcGVybHkKLSAgICAjIGhhbmRsZSBgLU0gLW8nLCBhbmQgd2UgbmVlZCB0byBkZXRlY3QgdGhpcy4gIEFsc28sIHNvbWUgSW50ZWwKLSAgICAjIHZlcnNpb25zIGhhZCB0cm91YmxlIHdpdGggb3V0cHV0IGluIHN1YmRpcnMKLSAgICBhbV9fb2JqPXN1Yi9jb25mdGVzdC4ke09CSkVYVC1vfQotICAgIGFtX19taW51c19vYmo9Ii1vICRhbV9fb2JqIgotICAgIGNhc2UgJGRlcG1vZGUgaW4KLSAgICBnY2MpCi0gICAgICAjIFRoaXMgZGVwbW9kZSBjYXVzZXMgYSBjb21waWxlciByYWNlIGluIHVuaXZlcnNhbCBtb2RlLgotICAgICAgdGVzdCAiJGFtX191bml2ZXJzYWwiID0gZmFsc2UgfHwgY29udGludWUKLSAgICAgIDs7Ci0gICAgbm9zaWRlZWZmZWN0KQotICAgICAgIyBhZnRlciB0aGlzIHRhZywgbWVjaGFuaXNtcyBhcmUgbm90IGJ5IHNpZGUtZWZmZWN0LCBzbyB0aGV5J2xsCi0gICAgICAjIG9ubHkgYmUgdXNlZCB3aGVuIGV4cGxpY2l0bHkgcmVxdWVzdGVkCi0gICAgICBpZiB0ZXN0ICJ4JGVuYWJsZV9kZXBlbmRlbmN5X3RyYWNraW5nIiA9IHh5ZXM7IHRoZW4KLQljb250aW51ZQotICAgICAgZWxzZQotCWJyZWFrCi0gICAgICBmaQotICAgICAgOzsKLSAgICBtc3Zpc3VhbGNwcCB8IG1zdmNtc3lzKQotICAgICAgIyBUaGlzIGNvbXBpbGVyIHdvbid0IGdyb2sgYC1jIC1vJywgYnV0IGFsc28sIHRoZSBtaW51c28gdGVzdCBoYXMKLSAgICAgICMgbm90IHJ1biB5ZXQuICBUaGVzZSBkZXBtb2RlcyBhcmUgbGF0ZSBlbm91Z2ggaW4gdGhlIGdhbWUsIGFuZAotICAgICAgIyBzbyB3ZWFrIHRoYXQgdGhlaXIgZnVuY3Rpb25pbmcgc2hvdWxkIG5vdCBiZSBpbXBhY3RlZC4KLSAgICAgIGFtX19vYmo9Y29uZnRlc3QuJHtPQkpFWFQtb30KLSAgICAgIGFtX19taW51c19vYmo9Ci0gICAgICA7OwotICAgIG5vbmUpIGJyZWFrIDs7Ci0gICAgZXNhYwotICAgIGlmIGRlcG1vZGU9JGRlcG1vZGUgXAotICAgICAgIHNvdXJjZT1zdWIvY29uZnRlc3QuYyBvYmplY3Q9JGFtX19vYmogXAotICAgICAgIGRlcGZpbGU9c3ViL2NvbmZ0ZXN0LlBvIHRtcGRlcGZpbGU9c3ViL2NvbmZ0ZXN0LlRQbyBcCi0gICAgICAgJFNIRUxMIC4vZGVwY29tcCAkZGVwY2MgLWMgJGFtX19taW51c19vYmogc3ViL2NvbmZ0ZXN0LmMgXAotICAgICAgICAgPi9kZXYvbnVsbCAyPmNvbmZ0ZXN0LmVyciAmJgotICAgICAgIGdyZXAgc3ViL2NvbmZ0c3QxLmggc3ViL2NvbmZ0ZXN0LlBvID4gL2Rldi9udWxsIDI+JjEgJiYKLSAgICAgICBncmVwIHN1Yi9jb25mdHN0Ni5oIHN1Yi9jb25mdGVzdC5QbyA+IC9kZXYvbnVsbCAyPiYxICYmCi0gICAgICAgZ3JlcCAkYW1fX29iaiBzdWIvY29uZnRlc3QuUG8gPiAvZGV2L251bGwgMj4mMSAmJgotICAgICAgICR7TUFLRS1tYWtlfSAtcyAtZiBjb25mbWYgPiAvZGV2L251bGwgMj4mMTsgdGhlbgotICAgICAgIyBpY2MgZG9lc24ndCBjaG9rZSBvbiB1bmtub3duIG9wdGlvbnMsIGl0IHdpbGwganVzdCBpc3N1ZSB3YXJuaW5ncwotICAgICAgIyBvciByZW1hcmtzIChldmVuIHdpdGggLVdlcnJvcikuICBTbyB3ZSBncmVwIHN0ZGVyciBmb3IgYW55IG1lc3NhZ2UKLSAgICAgICMgdGhhdCBzYXlzIGFuIG9wdGlvbiB3YXMgaWdub3JlZCBvciBub3Qgc3VwcG9ydGVkLgotICAgICAgIyBXaGVuIGdpdmVuIC1NUCwgaWNjIDcuMCBhbmQgNy4xIGNvbXBsYWluIHRodXNseToKLSAgICAgICMgICBpY2M6IENvbW1hbmQgbGluZSB3YXJuaW5nOiBpZ25vcmluZyBvcHRpb24gJy1NJzsgbm8gYXJndW1lbnQgcmVxdWlyZWQKLSAgICAgICMgVGhlIGRpYWdub3NpcyBjaGFuZ2VkIGluIGljYyA4LjA6Ci0gICAgICAjICAgaWNjOiBDb21tYW5kIGxpbmUgcmVtYXJrOiBvcHRpb24gJy1NUCcgbm90IHN1cHBvcnRlZAotICAgICAgaWYgKGdyZXAgJ2lnbm9yaW5nIG9wdGlvbicgY29uZnRlc3QuZXJyIHx8Ci0gICAgICAgICAgZ3JlcCAnbm90IHN1cHBvcnRlZCcgY29uZnRlc3QuZXJyKSA+L2Rldi9udWxsIDI+JjE7IHRoZW4gOjsgZWxzZQotICAgICAgICBhbV9jdl9DQ19kZXBlbmRlbmNpZXNfY29tcGlsZXJfdHlwZT0kZGVwbW9kZQotICAgICAgICBicmVhawotICAgICAgZmkKLSAgICBmaQotICBkb25lCi0KLSAgY2QgLi4KLSAgcm0gLXJmIGNvbmZ0ZXN0LmRpcgotZWxzZQotICBhbV9jdl9DQ19kZXBlbmRlbmNpZXNfY29tcGlsZXJfdHlwZT1ub25lCi1maQotCi1maQoteyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRhbV9jdl9DQ19kZXBlbmRlbmNpZXNfY29tcGlsZXJfdHlwZSIgPiY1Ci0kYXNfZWNobyAiJGFtX2N2X0NDX2RlcGVuZGVuY2llc19jb21waWxlcl90eXBlIiA+JjY7IH0KLUNDREVQTU9ERT1kZXBtb2RlPSRhbV9jdl9DQ19kZXBlbmRlbmNpZXNfY29tcGlsZXJfdHlwZQotCi0gaWYKLSAgdGVzdCAieCRlbmFibGVfZGVwZW5kZW5jeV90cmFja2luZyIgIT0geG5vIFwKLSAgJiYgdGVzdCAiJGFtX2N2X0NDX2RlcGVuZGVuY2llc19jb21waWxlcl90eXBlIiA9IGdjYzM7IHRoZW4KLSAgYW1fX2Zhc3RkZXBDQ19UUlVFPQotICBhbV9fZmFzdGRlcENDX0ZBTFNFPScjJwotZWxzZQotICBhbV9fZmFzdGRlcENDX1RSVUU9JyMnCi0gIGFtX19mYXN0ZGVwQ0NfRkFMU0U9Ci1maQotCi0KLSAgIGNhc2UgJGFjX2N2X3Byb2dfY2Nfc3RkYyBpbiAjKAotICBubykgOgotICAgIGFjX2N2X3Byb2dfY2NfYzk5PW5vOyBhY19jdl9wcm9nX2NjX2M4OT1ubyA7OyAjKAotICAqKSA6Ci0gICAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBmb3IgJENDIG9wdGlvbiB0byBhY2NlcHQgSVNPIEM5OSIgPiY1Ci0kYXNfZWNob19uICJjaGVja2luZyBmb3IgJENDIG9wdGlvbiB0byBhY2NlcHQgSVNPIEM5OS4uLiAiID4mNjsgfQotaWYgJHthY19jdl9wcm9nX2NjX2M5OSs6fSBmYWxzZTsgdGhlbiA6Ci0gICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2Ci1lbHNlCi0gIGFjX2N2X3Byb2dfY2NfYzk5PW5vCi1hY19zYXZlX0NDPSRDQwotY2F0IGNvbmZkZWZzLmggLSA8PF9BQ0VPRiA+Y29uZnRlc3QuJGFjX2V4dAotLyogZW5kIGNvbmZkZWZzLmguICAqLwotI2luY2x1ZGUgPHN0ZGFyZy5oPgotI2luY2x1ZGUgPHN0ZGJvb2wuaD4KLSNpbmNsdWRlIDxzdGRsaWIuaD4KLSNpbmNsdWRlIDx3Y2hhci5oPgotI2luY2x1ZGUgPHN0ZGlvLmg+Ci0KLS8vIENoZWNrIHZhcmFyZ3MgbWFjcm9zLiAgVGhlc2UgZXhhbXBsZXMgYXJlIHRha2VuIGZyb20gQzk5IDYuMTAuMy41LgotI2RlZmluZSBkZWJ1ZyguLi4pIGZwcmludGYgKHN0ZGVyciwgX19WQV9BUkdTX18pCi0jZGVmaW5lIHNob3dsaXN0KC4uLikgcHV0cyAoI19fVkFfQVJHU19fKQotI2RlZmluZSByZXBvcnQodGVzdCwuLi4pICgodGVzdCkgPyBwdXRzICgjdGVzdCkgOiBwcmludGYgKF9fVkFfQVJHU19fKSkKLXN0YXRpYyB2b2lkCi10ZXN0X3ZhcmFyZ3NfbWFjcm9zICh2b2lkKQotewotICBpbnQgeCA9IDEyMzQ7Ci0gIGludCB5ID0gNTY3ODsKLSAgZGVidWcgKCJGbGFnIik7Ci0gIGRlYnVnICgiWCA9ICVkXG4iLCB4KTsKLSAgc2hvd2xpc3QgKFRoZSBmaXJzdCwgc2Vjb25kLCBhbmQgdGhpcmQgaXRlbXMuKTsKLSAgcmVwb3J0ICh4PnksICJ4IGlzICVkIGJ1dCB5IGlzICVkIiwgeCwgeSk7Ci19Ci0KLS8vIENoZWNrIGxvbmcgbG9uZyB0eXBlcy4KLSNkZWZpbmUgQklHNjQgMTg0NDY3NDQwNzM3MDk1NTE2MTV1bGwKLSNkZWZpbmUgQklHMzIgNDI5NDk2NzI5NXVsCi0jZGVmaW5lIEJJR19PSyAoQklHNjQgLyBCSUczMiA9PSA0Mjk0OTY3Mjk3dWxsICYmIEJJRzY0ICUgQklHMzIgPT0gMCkKLSNpZiAhQklHX09LCi0gIHlvdXIgcHJlcHJvY2Vzc29yIGlzIGJyb2tlbjsKLSNlbmRpZgotI2lmIEJJR19PSwotI2Vsc2UKLSAgeW91ciBwcmVwcm9jZXNzb3IgaXMgYnJva2VuOwotI2VuZGlmCi1zdGF0aWMgbG9uZyBsb25nIGludCBiaWdudW0gPSAtOTIyMzM3MjAzNjg1NDc3NTgwN0xMOwotc3RhdGljIHVuc2lnbmVkIGxvbmcgbG9uZyBpbnQgdWJpZ251bSA9IEJJRzY0OwotCi1zdHJ1Y3QgaW5jb21wbGV0ZV9hcnJheQotewotICBpbnQgZGF0YXNpemU7Ci0gIGRvdWJsZSBkYXRhW107Ci19OwotCi1zdHJ1Y3QgbmFtZWRfaW5pdCB7Ci0gIGludCBudW1iZXI7Ci0gIGNvbnN0IHdjaGFyX3QgKm5hbWU7Ci0gIGRvdWJsZSBhdmVyYWdlOwotfTsKLQotdHlwZWRlZiBjb25zdCBjaGFyICpjY3A7Ci0KLXN0YXRpYyBpbmxpbmUgaW50Ci10ZXN0X3Jlc3RyaWN0IChjY3AgcmVzdHJpY3QgdGV4dCkKLXsKLSAgLy8gU2VlIGlmIEMrKy1zdHlsZSBjb21tZW50cyB3b3JrLgotICAvLyBJdGVyYXRlIHRocm91Z2ggaXRlbXMgdmlhIHRoZSByZXN0cmljdGVkIHBvaW50ZXIuCi0gIC8vIEFsc28gY2hlY2sgZm9yIGRlY2xhcmF0aW9ucyBpbiBmb3IgbG9vcHMuCi0gIGZvciAodW5zaWduZWQgaW50IGkgPSAwOyAqKHRleHQraSkgIT0gJ1wwJzsgKytpKQotICAgIGNvbnRpbnVlOwotICByZXR1cm4gMDsKLX0KLQotLy8gQ2hlY2sgdmFyYXJncyBhbmQgdmFfY29weS4KLXN0YXRpYyB2b2lkCi10ZXN0X3ZhcmFyZ3MgKGNvbnN0IGNoYXIgKmZvcm1hdCwgLi4uKQotewotICB2YV9saXN0IGFyZ3M7Ci0gIHZhX3N0YXJ0IChhcmdzLCBmb3JtYXQpOwotICB2YV9saXN0IGFyZ3NfY29weTsKLSAgdmFfY29weSAoYXJnc19jb3B5LCBhcmdzKTsKLQotICBjb25zdCBjaGFyICpzdHI7Ci0gIGludCBudW1iZXI7Ci0gIGZsb2F0IGZudW1iZXI7Ci0KLSAgd2hpbGUgKCpmb3JtYXQpCi0gICAgewotICAgICAgc3dpdGNoICgqZm9ybWF0KyspCi0JewotCWNhc2UgJ3MnOiAvLyBzdHJpbmcKLQkgIHN0ciA9IHZhX2FyZyAoYXJnc19jb3B5LCBjb25zdCBjaGFyICopOwotCSAgYnJlYWs7Ci0JY2FzZSAnZCc6IC8vIGludAotCSAgbnVtYmVyID0gdmFfYXJnIChhcmdzX2NvcHksIGludCk7Ci0JICBicmVhazsKLQljYXNlICdmJzogLy8gZmxvYXQKLQkgIGZudW1iZXIgPSB2YV9hcmcgKGFyZ3NfY29weSwgZG91YmxlKTsKLQkgIGJyZWFrOwotCWRlZmF1bHQ6Ci0JICBicmVhazsKLQl9Ci0gICAgfQotICB2YV9lbmQgKGFyZ3NfY29weSk7Ci0gIHZhX2VuZCAoYXJncyk7Ci19Ci0KLWludAotbWFpbiAoKQotewotCi0gIC8vIENoZWNrIGJvb2wuCi0gIF9Cb29sIHN1Y2Nlc3MgPSBmYWxzZTsKLQotICAvLyBDaGVjayByZXN0cmljdC4KLSAgaWYgKHRlc3RfcmVzdHJpY3QgKCJTdHJpbmcgbGl0ZXJhbCIpID09IDApCi0gICAgc3VjY2VzcyA9IHRydWU7Ci0gIGNoYXIgKnJlc3RyaWN0IG5ld3ZhciA9ICJBbm90aGVyIHN0cmluZyI7Ci0KLSAgLy8gQ2hlY2sgdmFyYXJncy4KLSAgdGVzdF92YXJhcmdzICgicywgZCcgZiAuIiwgInN0cmluZyIsIDY1LCAzNC4yMzQpOwotICB0ZXN0X3ZhcmFyZ3NfbWFjcm9zICgpOwotCi0gIC8vIENoZWNrIGZsZXhpYmxlIGFycmF5IG1lbWJlcnMuCi0gIHN0cnVjdCBpbmNvbXBsZXRlX2FycmF5ICppYSA9Ci0gICAgbWFsbG9jIChzaXplb2YgKHN0cnVjdCBpbmNvbXBsZXRlX2FycmF5KSArIChzaXplb2YgKGRvdWJsZSkgKiAxMCkpOwotICBpYS0+ZGF0YXNpemUgPSAxMDsKLSAgZm9yIChpbnQgaSA9IDA7IGkgPCBpYS0+ZGF0YXNpemU7ICsraSkKLSAgICBpYS0+ZGF0YVtpXSA9IGkgKiAxLjIzNDsKLQotICAvLyBDaGVjayBuYW1lZCBpbml0aWFsaXplcnMuCi0gIHN0cnVjdCBuYW1lZF9pbml0IG5pID0gewotICAgIC5udW1iZXIgPSAzNCwKLSAgICAubmFtZSA9IEwiVGVzdCB3aWRlIHN0cmluZyIsCi0gICAgLmF2ZXJhZ2UgPSA1NDMuMzQzNDMsCi0gIH07Ci0KLSAgbmkubnVtYmVyID0gNTg7Ci0KLSAgaW50IGR5bmFtaWNfYXJyYXlbbmkubnVtYmVyXTsKLSAgZHluYW1pY19hcnJheVtuaS5udW1iZXIgLSAxXSA9IDU0MzsKLQotICAvLyB3b3JrIGFyb3VuZCB1bnVzZWQgdmFyaWFibGUgd2FybmluZ3MKLSAgcmV0dXJuICghc3VjY2VzcyB8fCBiaWdudW0gPT0gMExMIHx8IHViaWdudW0gPT0gMHVMTCB8fCBuZXd2YXJbMF0gPT0gJ3gnCi0JICB8fCBkeW5hbWljX2FycmF5W25pLm51bWJlciAtIDFdICE9IDU0Myk7Ci0KLSAgOwotICByZXR1cm4gMDsKLX0KLV9BQ0VPRgotZm9yIGFjX2FyZyBpbiAnJyAtc3RkPWdudTk5IC1zdGQ9Yzk5IC1jOTkgLUFDOTkgLXhjOTk9YWxsIC1xbGFuZ2x2bD1leHRjOTkKLWRvCi0gIENDPSIkYWNfc2F2ZV9DQyAkYWNfYXJnIgotICBpZiBhY19mbl9jX3RyeV9jb21waWxlICIkTElORU5PIjsgdGhlbiA6Ci0gIGFjX2N2X3Byb2dfY2NfYzk5PSRhY19hcmcKLWZpCi1ybSAtZiBjb3JlIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0Ci0gIHRlc3QgIngkYWNfY3ZfcHJvZ19jY19jOTkiICE9ICJ4bm8iICYmIGJyZWFrCi1kb25lCi1ybSAtZiBjb25mdGVzdC4kYWNfZXh0Ci1DQz0kYWNfc2F2ZV9DQwotCi1maQotIyBBQ19DQUNIRV9WQUwKLWNhc2UgIngkYWNfY3ZfcHJvZ19jY19jOTkiIGluCi0gIHgpCi0gICAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6IG5vbmUgbmVlZGVkIiA+JjUKLSRhc19lY2hvICJub25lIG5lZWRlZCIgPiY2OyB9IDs7Ci0gIHhubykKLSAgICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogdW5zdXBwb3J0ZWQiID4mNQotJGFzX2VjaG8gInVuc3VwcG9ydGVkIiA+JjY7IH0gOzsKLSAgKikKLSAgICBDQz0iJENDICRhY19jdl9wcm9nX2NjX2M5OSIKLSAgICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJGFjX2N2X3Byb2dfY2NfYzk5IiA+JjUKLSRhc19lY2hvICIkYWNfY3ZfcHJvZ19jY19jOTkiID4mNjsgfSA7OwotZXNhYwotaWYgdGVzdCAieCRhY19jdl9wcm9nX2NjX2M5OSIgIT0geG5vOyB0aGVuIDoKLSAgYWNfY3ZfcHJvZ19jY19zdGRjPSRhY19jdl9wcm9nX2NjX2M5OQotZWxzZQotICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGZvciAkQ0Mgb3B0aW9uIHRvIGFjY2VwdCBJU08gQzg5IiA+JjUKLSRhc19lY2hvX24gImNoZWNraW5nIGZvciAkQ0Mgb3B0aW9uIHRvIGFjY2VwdCBJU08gQzg5Li4uICIgPiY2OyB9Ci1pZiAke2FjX2N2X3Byb2dfY2NfYzg5Kzp9IGZhbHNlOyB0aGVuIDoKLSAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKLWVsc2UKLSAgYWNfY3ZfcHJvZ19jY19jODk9bm8KLWFjX3NhdmVfQ0M9JENDCi1jYXQgY29uZmRlZnMuaCAtIDw8X0FDRU9GID5jb25mdGVzdC4kYWNfZXh0Ci0vKiBlbmQgY29uZmRlZnMuaC4gICovCi0jaW5jbHVkZSA8c3RkYXJnLmg+Ci0jaW5jbHVkZSA8c3RkaW8uaD4KLSNpbmNsdWRlIDxzeXMvdHlwZXMuaD4KLSNpbmNsdWRlIDxzeXMvc3RhdC5oPgotLyogTW9zdCBvZiB0aGUgZm9sbG93aW5nIHRlc3RzIGFyZSBzdG9sZW4gZnJvbSBSQ1MgNS43J3Mgc3JjL2NvbmYuc2guICAqLwotc3RydWN0IGJ1ZiB7IGludCB4OyB9OwotRklMRSAqICgqcmNzb3BlbikgKHN0cnVjdCBidWYgKiwgc3RydWN0IHN0YXQgKiwgaW50KTsKLXN0YXRpYyBjaGFyICplIChwLCBpKQotICAgICBjaGFyICoqcDsKLSAgICAgaW50IGk7Ci17Ci0gIHJldHVybiBwW2ldOwotfQotc3RhdGljIGNoYXIgKmYgKGNoYXIgKiAoKmcpIChjaGFyICoqLCBpbnQpLCBjaGFyICoqcCwgLi4uKQotewotICBjaGFyICpzOwotICB2YV9saXN0IHY7Ci0gIHZhX3N0YXJ0ICh2LHApOwotICBzID0gZyAocCwgdmFfYXJnICh2LGludCkpOwotICB2YV9lbmQgKHYpOwotICByZXR1cm4gczsKLX0KLQotLyogT1NGIDQuMCBDb21wYXEgY2MgaXMgc29tZSBzb3J0IG9mIGFsbW9zdC1BTlNJIGJ5IGRlZmF1bHQuICBJdCBoYXMKLSAgIGZ1bmN0aW9uIHByb3RvdHlwZXMgYW5kIHN0dWZmLCBidXQgbm90ICdceEhIJyBoZXggY2hhcmFjdGVyIGNvbnN0YW50cy4KLSAgIFRoZXNlIGRvbid0IHByb3Zva2UgYW4gZXJyb3IgdW5mb3J0dW5hdGVseSwgaW5zdGVhZCBhcmUgc2lsZW50bHkgdHJlYXRlZAotICAgYXMgJ3gnLiAgVGhlIGZvbGxvd2luZyBpbmR1Y2VzIGFuIGVycm9yLCB1bnRpbCAtc3RkIGlzIGFkZGVkIHRvIGdldAotICAgcHJvcGVyIEFOU0kgbW9kZS4gIEN1cmlvdXNseSAnXHgwMCchPSd4JyBhbHdheXMgY29tZXMgb3V0IHRydWUsIGZvciBhbgotICAgYXJyYXkgc2l6ZSBhdCBsZWFzdC4gIEl0J3MgbmVjZXNzYXJ5IHRvIHdyaXRlICdceDAwJz09MCB0byBnZXQgc29tZXRoaW5nCi0gICB0aGF0J3MgdHJ1ZSBvbmx5IHdpdGggLXN0ZC4gICovCi1pbnQgb3NmNF9jY19hcnJheSBbJ1x4MDAnID09IDAgPyAxIDogLTFdOwotCi0vKiBJQk0gQyA2IGZvciBBSVggaXMgYWxtb3N0LUFOU0kgYnkgZGVmYXVsdCwgYnV0IGl0IHJlcGxhY2VzIG1hY3JvIHBhcmFtZXRlcnMKLSAgIGluc2lkZSBzdHJpbmdzIGFuZCBjaGFyYWN0ZXIgY29uc3RhbnRzLiAgKi8KLSNkZWZpbmUgRk9PKHgpICd4JwotaW50IHhsYzZfY2NfYXJyYXlbRk9PKGEpID09ICd4JyA/IDEgOiAtMV07Ci0KLWludCB0ZXN0IChpbnQgaSwgZG91YmxlIHgpOwotc3RydWN0IHMxIHtpbnQgKCpmKSAoaW50IGEpO307Ci1zdHJ1Y3QgczIge2ludCAoKmYpIChkb3VibGUgYSk7fTsKLWludCBwYWlybmFtZXMgKGludCwgY2hhciAqKiwgRklMRSAqKCopKHN0cnVjdCBidWYgKiwgc3RydWN0IHN0YXQgKiwgaW50KSwgaW50LCBpbnQpOwotaW50IGFyZ2M7Ci1jaGFyICoqYXJndjsKLWludAotbWFpbiAoKQotewotcmV0dXJuIGYgKGUsIGFyZ3YsIDApICE9IGFyZ3ZbMF0gIHx8ICBmIChlLCBhcmd2LCAxKSAhPSBhcmd2WzFdOwotICA7Ci0gIHJldHVybiAwOwotfQotX0FDRU9GCi1mb3IgYWNfYXJnIGluICcnIC1xbGFuZ2x2bD1leHRjODkgLXFsYW5nbHZsPWFuc2kgLXN0ZCBcCi0JLUFlICItQWEgLURfSFBVWF9TT1VSQ0UiICItWGMgLURfX0VYVEVOU0lPTlNfXyIKLWRvCi0gIENDPSIkYWNfc2F2ZV9DQyAkYWNfYXJnIgotICBpZiBhY19mbl9jX3RyeV9jb21waWxlICIkTElORU5PIjsgdGhlbiA6Ci0gIGFjX2N2X3Byb2dfY2NfYzg5PSRhY19hcmcKLWZpCi1ybSAtZiBjb3JlIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0Ci0gIHRlc3QgIngkYWNfY3ZfcHJvZ19jY19jODkiICE9ICJ4bm8iICYmIGJyZWFrCi1kb25lCi1ybSAtZiBjb25mdGVzdC4kYWNfZXh0Ci1DQz0kYWNfc2F2ZV9DQwotCi1maQotIyBBQ19DQUNIRV9WQUwKLWNhc2UgIngkYWNfY3ZfcHJvZ19jY19jODkiIGluCi0gIHgpCi0gICAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6IG5vbmUgbmVlZGVkIiA+JjUKLSRhc19lY2hvICJub25lIG5lZWRlZCIgPiY2OyB9IDs7Ci0gIHhubykKLSAgICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogdW5zdXBwb3J0ZWQiID4mNQotJGFzX2VjaG8gInVuc3VwcG9ydGVkIiA+JjY7IH0gOzsKLSAgKikKLSAgICBDQz0iJENDICRhY19jdl9wcm9nX2NjX2M4OSIKLSAgICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJGFjX2N2X3Byb2dfY2NfYzg5IiA+JjUKLSRhc19lY2hvICIkYWNfY3ZfcHJvZ19jY19jODkiID4mNjsgfSA7OwotZXNhYwotaWYgdGVzdCAieCRhY19jdl9wcm9nX2NjX2M4OSIgIT0geG5vOyB0aGVuIDoKLSAgYWNfY3ZfcHJvZ19jY19zdGRjPSRhY19jdl9wcm9nX2NjX2M4OQotZWxzZQotICBhY19jdl9wcm9nX2NjX3N0ZGM9bm8KLWZpCi0KLWZpCi0gOzsKLWVzYWMKLSAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBmb3IgJENDIG9wdGlvbiB0byBhY2NlcHQgSVNPIFN0YW5kYXJkIEMiID4mNQotJGFzX2VjaG9fbiAiY2hlY2tpbmcgZm9yICRDQyBvcHRpb24gdG8gYWNjZXB0IElTTyBTdGFuZGFyZCBDLi4uICIgPiY2OyB9Ci0gIGlmICR7YWNfY3ZfcHJvZ19jY19zdGRjKzp9IGZhbHNlOyB0aGVuIDoKLSAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKLWZpCi0KLSAgY2FzZSAkYWNfY3ZfcHJvZ19jY19zdGRjIGluICMoCi0gIG5vKSA6Ci0gICAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6IHVuc3VwcG9ydGVkIiA+JjUKLSRhc19lY2hvICJ1bnN1cHBvcnRlZCIgPiY2OyB9IDs7ICMoCi0gICcnKSA6Ci0gICAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6IG5vbmUgbmVlZGVkIiA+JjUKLSRhc19lY2hvICJub25lIG5lZWRlZCIgPiY2OyB9IDs7ICMoCi0gICopIDoKLSAgICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJGFjX2N2X3Byb2dfY2Nfc3RkYyIgPiY1Ci0kYXNfZWNobyAiJGFjX2N2X3Byb2dfY2Nfc3RkYyIgPiY2OyB9IDs7Ci1lc2FjCi0KLWFjX2V4dD1jCi1hY19jcHA9JyRDUFAgJENQUEZMQUdTJwotYWNfY29tcGlsZT0nJENDIC1jICRDRkxBR1MgJENQUEZMQUdTIGNvbmZ0ZXN0LiRhY19leHQgPiY1JwotYWNfbGluaz0nJENDIC1vIGNvbmZ0ZXN0JGFjX2V4ZWV4dCAkQ0ZMQUdTICRDUFBGTEFHUyAkTERGTEFHUyBjb25mdGVzdC4kYWNfZXh0ICRMSUJTID4mNScKLWFjX2NvbXBpbGVyX2dudT0kYWNfY3ZfY19jb21waWxlcl9nbnUKLXsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgaG93IHRvIHJ1biB0aGUgQyBwcmVwcm9jZXNzb3IiID4mNQotJGFzX2VjaG9fbiAiY2hlY2tpbmcgaG93IHRvIHJ1biB0aGUgQyBwcmVwcm9jZXNzb3IuLi4gIiA+JjY7IH0KLSMgT24gU3Vucywgc29tZXRpbWVzICRDUFAgbmFtZXMgYSBkaXJlY3RvcnkuCi1pZiB0ZXN0IC1uICIkQ1BQIiAmJiB0ZXN0IC1kICIkQ1BQIjsgdGhlbgotICBDUFA9Ci1maQotaWYgdGVzdCAteiAiJENQUCI7IHRoZW4KLSAgaWYgJHthY19jdl9wcm9nX0NQUCs6fSBmYWxzZTsgdGhlbiA6Ci0gICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2Ci1lbHNlCi0gICAgICAjIERvdWJsZSBxdW90ZXMgYmVjYXVzZSBDUFAgbmVlZHMgdG8gYmUgZXhwYW5kZWQKLSAgICBmb3IgQ1BQIGluICIkQ0MgLUUiICIkQ0MgLUUgLXRyYWRpdGlvbmFsLWNwcCIgIi9saWIvY3BwIgotICAgIGRvCi0gICAgICBhY19wcmVwcm9jX29rPWZhbHNlCi1mb3IgYWNfY19wcmVwcm9jX3dhcm5fZmxhZyBpbiAnJyB5ZXMKLWRvCi0gICMgVXNlIGEgaGVhZGVyIGZpbGUgdGhhdCBjb21lcyB3aXRoIGdjYywgc28gY29uZmlndXJpbmcgZ2xpYmMKLSAgIyB3aXRoIGEgZnJlc2ggY3Jvc3MtY29tcGlsZXIgd29ya3MuCi0gICMgUHJlZmVyIDxsaW1pdHMuaD4gdG8gPGFzc2VydC5oPiBpZiBfX1NURENfXyBpcyBkZWZpbmVkLCBzaW5jZQotICAjIDxsaW1pdHMuaD4gZXhpc3RzIGV2ZW4gb24gZnJlZXN0YW5kaW5nIGNvbXBpbGVycy4KLSAgIyBPbiB0aGUgTmVYVCwgY2MgLUUgcnVucyB0aGUgY29kZSB0aHJvdWdoIHRoZSBjb21waWxlcidzIHBhcnNlciwKLSAgIyBub3QganVzdCB0aHJvdWdoIGNwcC4gIlN5bnRheCBlcnJvciIgaXMgaGVyZSB0byBjYXRjaCB0aGlzIGNhc2UuCi0gIGNhdCBjb25mZGVmcy5oIC0gPDxfQUNFT0YgPmNvbmZ0ZXN0LiRhY19leHQKLS8qIGVuZCBjb25mZGVmcy5oLiAgKi8KLSNpZmRlZiBfX1NURENfXwotIyBpbmNsdWRlIDxsaW1pdHMuaD4KLSNlbHNlCi0jIGluY2x1ZGUgPGFzc2VydC5oPgotI2VuZGlmCi0JCSAgICAgU3ludGF4IGVycm9yCi1fQUNFT0YKLWlmIGFjX2ZuX2NfdHJ5X2NwcCAiJExJTkVOTyI7IHRoZW4gOgotCi1lbHNlCi0gICMgQnJva2VuOiBmYWlscyBvbiB2YWxpZCBpbnB1dC4KLWNvbnRpbnVlCi1maQotcm0gLWYgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LmkgY29uZnRlc3QuJGFjX2V4dAotCi0gICMgT0ssIHdvcmtzIG9uIHNhbmUgY2FzZXMuICBOb3cgY2hlY2sgd2hldGhlciBub25leGlzdGVudCBoZWFkZXJzCi0gICMgY2FuIGJlIGRldGVjdGVkIGFuZCBob3cuCi0gIGNhdCBjb25mZGVmcy5oIC0gPDxfQUNFT0YgPmNvbmZ0ZXN0LiRhY19leHQKLS8qIGVuZCBjb25mZGVmcy5oLiAgKi8KLSNpbmNsdWRlIDxhY19ub25leGlzdGVudC5oPgotX0FDRU9GCi1pZiBhY19mbl9jX3RyeV9jcHAgIiRMSU5FTk8iOyB0aGVuIDoKLSAgIyBCcm9rZW46IHN1Y2Nlc3Mgb24gaW52YWxpZCBpbnB1dC4KLWNvbnRpbnVlCi1lbHNlCi0gICMgUGFzc2VzIGJvdGggdGVzdHMuCi1hY19wcmVwcm9jX29rPToKLWJyZWFrCi1maQotcm0gLWYgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LmkgY29uZnRlc3QuJGFjX2V4dAotCi1kb25lCi0jIEJlY2F1c2Ugb2YgYGJyZWFrJywgX0FDX1BSRVBST0NfSUZFTFNFJ3MgY2xlYW5pbmcgY29kZSB3YXMgc2tpcHBlZC4KLXJtIC1mIGNvbmZ0ZXN0LmkgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19leHQKLWlmICRhY19wcmVwcm9jX29rOyB0aGVuIDoKLSAgYnJlYWsKLWZpCi0KLSAgICBkb25lCi0gICAgYWNfY3ZfcHJvZ19DUFA9JENQUAotCi1maQotICBDUFA9JGFjX2N2X3Byb2dfQ1BQCi1lbHNlCi0gIGFjX2N2X3Byb2dfQ1BQPSRDUFAKLWZpCi17ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJENQUCIgPiY1Ci0kYXNfZWNobyAiJENQUCIgPiY2OyB9Ci1hY19wcmVwcm9jX29rPWZhbHNlCi1mb3IgYWNfY19wcmVwcm9jX3dhcm5fZmxhZyBpbiAnJyB5ZXMKLWRvCi0gICMgVXNlIGEgaGVhZGVyIGZpbGUgdGhhdCBjb21lcyB3aXRoIGdjYywgc28gY29uZmlndXJpbmcgZ2xpYmMKLSAgIyB3aXRoIGEgZnJlc2ggY3Jvc3MtY29tcGlsZXIgd29ya3MuCi0gICMgUHJlZmVyIDxsaW1pdHMuaD4gdG8gPGFzc2VydC5oPiBpZiBfX1NURENfXyBpcyBkZWZpbmVkLCBzaW5jZQotICAjIDxsaW1pdHMuaD4gZXhpc3RzIGV2ZW4gb24gZnJlZXN0YW5kaW5nIGNvbXBpbGVycy4KLSAgIyBPbiB0aGUgTmVYVCwgY2MgLUUgcnVucyB0aGUgY29kZSB0aHJvdWdoIHRoZSBjb21waWxlcidzIHBhcnNlciwKLSAgIyBub3QganVzdCB0aHJvdWdoIGNwcC4gIlN5bnRheCBlcnJvciIgaXMgaGVyZSB0byBjYXRjaCB0aGlzIGNhc2UuCi0gIGNhdCBjb25mZGVmcy5oIC0gPDxfQUNFT0YgPmNvbmZ0ZXN0LiRhY19leHQKLS8qIGVuZCBjb25mZGVmcy5oLiAgKi8KLSNpZmRlZiBfX1NURENfXwotIyBpbmNsdWRlIDxsaW1pdHMuaD4KLSNlbHNlCi0jIGluY2x1ZGUgPGFzc2VydC5oPgotI2VuZGlmCi0JCSAgICAgU3ludGF4IGVycm9yCi1fQUNFT0YKLWlmIGFjX2ZuX2NfdHJ5X2NwcCAiJExJTkVOTyI7IHRoZW4gOgotCi1lbHNlCi0gICMgQnJva2VuOiBmYWlscyBvbiB2YWxpZCBpbnB1dC4KLWNvbnRpbnVlCi1maQotcm0gLWYgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LmkgY29uZnRlc3QuJGFjX2V4dAotCi0gICMgT0ssIHdvcmtzIG9uIHNhbmUgY2FzZXMuICBOb3cgY2hlY2sgd2hldGhlciBub25leGlzdGVudCBoZWFkZXJzCi0gICMgY2FuIGJlIGRldGVjdGVkIGFuZCBob3cuCi0gIGNhdCBjb25mZGVmcy5oIC0gPDxfQUNFT0YgPmNvbmZ0ZXN0LiRhY19leHQKLS8qIGVuZCBjb25mZGVmcy5oLiAgKi8KLSNpbmNsdWRlIDxhY19ub25leGlzdGVudC5oPgotX0FDRU9GCi1pZiBhY19mbl9jX3RyeV9jcHAgIiRMSU5FTk8iOyB0aGVuIDoKLSAgIyBCcm9rZW46IHN1Y2Nlc3Mgb24gaW52YWxpZCBpbnB1dC4KLWNvbnRpbnVlCi1lbHNlCi0gICMgUGFzc2VzIGJvdGggdGVzdHMuCi1hY19wcmVwcm9jX29rPToKLWJyZWFrCi1maQotcm0gLWYgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LmkgY29uZnRlc3QuJGFjX2V4dAotCi1kb25lCi0jIEJlY2F1c2Ugb2YgYGJyZWFrJywgX0FDX1BSRVBST0NfSUZFTFNFJ3MgY2xlYW5pbmcgY29kZSB3YXMgc2tpcHBlZC4KLXJtIC1mIGNvbmZ0ZXN0LmkgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19leHQKLWlmICRhY19wcmVwcm9jX29rOyB0aGVuIDoKLQotZWxzZQotICB7IHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogZXJyb3I6IGluIFxgJGFjX3B3ZCc6IiA+JjUKLSRhc19lY2hvICIkYXNfbWU6IGVycm9yOiBpbiBcYCRhY19wd2QnOiIgPiYyO30KLWFzX2ZuX2Vycm9yICQ/ICJDIHByZXByb2Nlc3NvciBcIiRDUFBcIiBmYWlscyBzYW5pdHkgY2hlY2sKLVNlZSBcYGNvbmZpZy5sb2cnIGZvciBtb3JlIGRldGFpbHMiICIkTElORU5PIiA1OyB9Ci1maQotCi1hY19leHQ9YwotYWNfY3BwPSckQ1BQICRDUFBGTEFHUycKLWFjX2NvbXBpbGU9JyRDQyAtYyAkQ0ZMQUdTICRDUFBGTEFHUyBjb25mdGVzdC4kYWNfZXh0ID4mNScKLWFjX2xpbms9JyRDQyAtbyBjb25mdGVzdCRhY19leGVleHQgJENGTEFHUyAkQ1BQRkxBR1MgJExERkxBR1MgY29uZnRlc3QuJGFjX2V4dCAkTElCUyA+JjUnCi1hY19jb21waWxlcl9nbnU9JGFjX2N2X2NfY29tcGlsZXJfZ251Ci0KLQoteyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyB3aGV0aGVyICR7TUFLRS1tYWtlfSBzZXRzIFwkKE1BS0UpIiA+JjUKLSRhc19lY2hvX24gImNoZWNraW5nIHdoZXRoZXIgJHtNQUtFLW1ha2V9IHNldHMgXCQoTUFLRSkuLi4gIiA+JjY7IH0KLXNldCB4ICR7TUFLRS1tYWtlfQotYWNfbWFrZT1gJGFzX2VjaG8gIiQyIiB8IHNlZCAncy8rL3AvZzsgcy9bXmEtekEtWjAtOV9dL18vZydgCi1pZiBldmFsIFwke2FjX2N2X3Byb2dfbWFrZV8ke2FjX21ha2V9X3NldCs6fSBmYWxzZTsgdGhlbiA6Ci0gICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2Ci1lbHNlCi0gIGNhdCA+Y29uZnRlc3QubWFrZSA8PFxfQUNFT0YKLVNIRUxMID0gL2Jpbi9zaAotYWxsOgotCUBlY2hvICdAQEAlJSU9JChNQUtFKT1AQEAlJSUnCi1fQUNFT0YKLSMgR05VIG1ha2Ugc29tZXRpbWVzIHByaW50cyAibWFrZVsxXTogRW50ZXJpbmcgLi4uIiwgd2hpY2ggd291bGQgY29uZnVzZSB1cy4KLWNhc2UgYCR7TUFLRS1tYWtlfSAtZiBjb25mdGVzdC5tYWtlIDI+L2Rldi9udWxsYCBpbgotICAqQEBAJSUlPT8qPUBAQCUlJSopCi0gICAgZXZhbCBhY19jdl9wcm9nX21ha2VfJHthY19tYWtlfV9zZXQ9eWVzOzsKLSAgKikKLSAgICBldmFsIGFjX2N2X3Byb2dfbWFrZV8ke2FjX21ha2V9X3NldD1ubzs7Ci1lc2FjCi1ybSAtZiBjb25mdGVzdC5tYWtlCi1maQotaWYgZXZhbCB0ZXN0IFwkYWNfY3ZfcHJvZ19tYWtlXyR7YWNfbWFrZX1fc2V0ID0geWVzOyB0aGVuCi0gIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiB5ZXMiID4mNQotJGFzX2VjaG8gInllcyIgPiY2OyB9Ci0gIFNFVF9NQUtFPQotZWxzZQotICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogbm8iID4mNQotJGFzX2VjaG8gIm5vIiA+JjY7IH0KLSAgU0VUX01BS0U9Ik1BS0U9JHtNQUtFLW1ha2V9IgotZmkKLQoteyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyB3aGV0aGVyIGxuIC1zIHdvcmtzIiA+JjUKLSRhc19lY2hvX24gImNoZWNraW5nIHdoZXRoZXIgbG4gLXMgd29ya3MuLi4gIiA+JjY7IH0KLUxOX1M9JGFzX2xuX3MKLWlmIHRlc3QgIiRMTl9TIiA9ICJsbiAtcyI7IHRoZW4KLSAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6IHllcyIgPiY1Ci0kYXNfZWNobyAieWVzIiA+JjY7IH0KLWVsc2UKLSAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6IG5vLCB1c2luZyAkTE5fUyIgPiY1Ci0kYXNfZWNobyAibm8sIHVzaW5nICRMTl9TIiA+JjY7IH0KLWZpCi0KLQotIyBDaGVjayBpZiBMRCBzdXBwb3J0cyBsaW5rZXIgc2NyaXB0cywKLSMgYW5kIGRlZmluZSBhdXRvbWFrZSBjb25kaXRpb25hbCBIQVZFX0xEX1ZFUlNJT05fU0NSSVBUIGlmIHNvLgotIyBDaGVjayB3aGV0aGVyIC0tZW5hYmxlLWxkLXZlcnNpb24tc2NyaXB0IHdhcyBnaXZlbi4KLWlmIHRlc3QgIiR7ZW5hYmxlX2xkX3ZlcnNpb25fc2NyaXB0K3NldH0iID0gc2V0OyB0aGVuIDoKLSAgZW5hYmxldmFsPSRlbmFibGVfbGRfdmVyc2lvbl9zY3JpcHQ7IGhhdmVfbGRfdmVyc2lvbl9zY3JpcHQ9JGVuYWJsZXZhbAotZmkKLQotaWYgdGVzdCAteiAiJGhhdmVfbGRfdmVyc2lvbl9zY3JpcHQiOyB0aGVuCi0gIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgaWYgTEQgLVdsLC0tdmVyc2lvbi1zY3JpcHQgd29ya3MiID4mNQotJGFzX2VjaG9fbiAiY2hlY2tpbmcgaWYgTEQgLVdsLC0tdmVyc2lvbi1zY3JpcHQgd29ya3MuLi4gIiA+JjY7IH0KLSAgc2F2ZV9MREZMQUdTPSIkTERGTEFHUyIKLSAgTERGTEFHUz0iJExERkxBR1MgLVdsLC0tdmVyc2lvbi1zY3JpcHQ9Y29uZnRlc3QubWFwIgotICBjYXQgPiBjb25mdGVzdC5tYXAgPDxFT0YKLVZFUlNfMSB7Ci0gICAgICAgIGdsb2JhbDogc3ltOwotfTsKLQotVkVSU18yIHsKLSAgICAgICAgZ2xvYmFsOiBzeW07Ci19IFZFUlNfMTsKLUVPRgotICBjYXQgY29uZmRlZnMuaCAtIDw8X0FDRU9GID5jb25mdGVzdC4kYWNfZXh0Ci0vKiBlbmQgY29uZmRlZnMuaC4gICovCi0KLWludAotbWFpbiAoKQotewotCi0gIDsKLSAgcmV0dXJuIDA7Ci19Ci1fQUNFT0YKLWlmIGFjX2ZuX2NfdHJ5X2xpbmsgIiRMSU5FTk8iOyB0aGVuIDoKLSAgaGF2ZV9sZF92ZXJzaW9uX3NjcmlwdD15ZXMKLWVsc2UKLSAgaGF2ZV9sZF92ZXJzaW9uX3NjcmlwdD1ubwotZmkKLXJtIC1mIGNvcmUgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgXAotICAgIGNvbmZ0ZXN0JGFjX2V4ZWV4dCBjb25mdGVzdC4kYWNfZXh0Ci0gIHJtIC1mIGNvbmZ0ZXN0Lm1hcAotICBMREZMQUdTPSIkc2F2ZV9MREZMQUdTIgotICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJGhhdmVfbGRfdmVyc2lvbl9zY3JpcHQiID4mNQotJGFzX2VjaG8gIiRoYXZlX2xkX3ZlcnNpb25fc2NyaXB0IiA+JjY7IH0KLWZpCi0gaWYgdGVzdCAiJGhhdmVfbGRfdmVyc2lvbl9zY3JpcHQiID0gInllcyI7IHRoZW4KLSAgSEFWRV9MRF9WRVJTSU9OX1NDUklQVF9UUlVFPQotICBIQVZFX0xEX1ZFUlNJT05fU0NSSVBUX0ZBTFNFPScjJwotZWxzZQotICBIQVZFX0xEX1ZFUlNJT05fU0NSSVBUX1RSVUU9JyMnCi0gIEhBVkVfTERfVkVSU0lPTl9TQ1JJUFRfRkFMU0U9Ci1maQotCi0KLSMgU2VlIGlmIGNvbXBpbGVyIHN1cHBvcnRzIHByb3RvdHlwZXMuCi17ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGZvciBmdW5jdGlvbiBwcm90b3R5cGVzIiA+JjUKLSRhc19lY2hvX24gImNoZWNraW5nIGZvciBmdW5jdGlvbiBwcm90b3R5cGVzLi4uICIgPiY2OyB9Ci1pZiAke2lqZ19jdl9oYXZlX3Byb3RvdHlwZXMrOn0gZmFsc2U7IHRoZW4gOgotICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgotZWxzZQotICBjYXQgY29uZmRlZnMuaCAtIDw8X0FDRU9GID5jb25mdGVzdC4kYWNfZXh0Ci0vKiBlbmQgY29uZmRlZnMuaC4gICovCi0KLWludCB0ZXN0ZnVuY3Rpb24gKGludCBhcmcxLCBpbnQgKiBhcmcyKTsgLyogY2hlY2sgcHJvdG90eXBlcyAqLwotc3RydWN0IG1ldGhvZHNfc3RydWN0IHsJCS8qIGNoZWNrIG1ldGhvZC1wb2ludGVyIGRlY2xhcmF0aW9ucyAqLwotICBpbnQgKCplcnJvcl9leGl0KSAoY2hhciAqbXNndGV4dCk7Ci0gIGludCAoKnRyYWNlX21lc3NhZ2UpIChjaGFyICptc2d0ZXh0KTsKLSAgaW50ICgqYW5vdGhlcl9tZXRob2QpICh2b2lkKTsKLX07Ci1pbnQgdGVzdGZ1bmN0aW9uIChpbnQgYXJnMSwgaW50ICogYXJnMikgLyogY2hlY2sgZGVmaW5pdGlvbnMgKi8KLXsgcmV0dXJuIGFyZzJbYXJnMV07IH0KLWludCB0ZXN0MmZ1bmN0aW9uICh2b2lkKQkvKiBjaGVjayB2b2lkIGFyZyBsaXN0ICovCi17IHJldHVybiAwOyB9Ci0KLWludAotbWFpbiAoKQotewotCi0gIDsKLSAgcmV0dXJuIDA7Ci19Ci1fQUNFT0YKLWlmIGFjX2ZuX2NfdHJ5X2NvbXBpbGUgIiRMSU5FTk8iOyB0aGVuIDoKLSAgaWpnX2N2X2hhdmVfcHJvdG90eXBlcz15ZXMKLWVsc2UKLSAgaWpnX2N2X2hhdmVfcHJvdG90eXBlcz1ubwotZmkKLXJtIC1mIGNvcmUgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QuJGFjX2V4dAotZmkKLQoteyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRpamdfY3ZfaGF2ZV9wcm90b3R5cGVzIiA+JjUKLSRhc19lY2hvICIkaWpnX2N2X2hhdmVfcHJvdG90eXBlcyIgPiY2OyB9Ci1pZiB0ZXN0ICRpamdfY3ZfaGF2ZV9wcm90b3R5cGVzID0geWVzOyB0aGVuCi0KLSRhc19lY2hvICIjZGVmaW5lIEhBVkVfUFJPVE9UWVBFUyAxIiA+PmNvbmZkZWZzLmgKLQotZWxzZQotICBlY2hvIFlvdXIgY29tcGlsZXIgZG9lcyBub3Qgc2VlbSB0byBrbm93IGFib3V0IGZ1bmN0aW9uIHByb3RvdHlwZXMuCi0gIGVjaG8gUGVyaGFwcyBpdCBuZWVkcyBhIHNwZWNpYWwgc3dpdGNoIHRvIGVuYWJsZSBBTlNJIEMgbW9kZS4KLSAgZWNobyBJZiBzbywgd2UgcmVjb21tZW5kIHJ1bm5pbmcgY29uZmlndXJlIGxpa2UgdGhpczoKLSAgZWNobyAiICAgLi9jb25maWd1cmUgIENDPSdjYyAtc3dpdGNoJyIKLSAgZWNobyB3aGVyZSAtc3dpdGNoIGlzIHRoZSBwcm9wZXIgc3dpdGNoLgotZmkKLQotIyBDaGVjayBoZWFkZXIgZmlsZXMKLWZvciBhY19oZWFkZXIgaW4gc3RkZGVmLmggc3RkbGliLmggbG9jYWxlLmgKLWRvIDoKLSAgYXNfYWNfSGVhZGVyPWAkYXNfZWNobyAiYWNfY3ZfaGVhZGVyXyRhY19oZWFkZXIiIHwgJGFzX3RyX3NoYAotYWNfZm5fY19jaGVja19oZWFkZXJfbW9uZ3JlbCAiJExJTkVOTyIgIiRhY19oZWFkZXIiICIkYXNfYWNfSGVhZGVyIiAiJGFjX2luY2x1ZGVzX2RlZmF1bHQiCi1pZiBldmFsIHRlc3QgXCJ4XCQiJGFzX2FjX0hlYWRlciJcIiA9IHgieWVzIjsgdGhlbiA6Ci0gIGNhdCA+PmNvbmZkZWZzLmggPDxfQUNFT0YKLSNkZWZpbmUgYCRhc19lY2hvICJIQVZFXyRhY19oZWFkZXIiIHwgJGFzX3RyX2NwcGAgMQotX0FDRU9GCi0KLWZpCi0KLWRvbmUKLQotYWNfZm5fY19jaGVja19oZWFkZXJfbW9uZ3JlbCAiJExJTkVOTyIgInN0cmluZy5oIiAiYWNfY3ZfaGVhZGVyX3N0cmluZ19oIiAiJGFjX2luY2x1ZGVzX2RlZmF1bHQiCi1pZiB0ZXN0ICJ4JGFjX2N2X2hlYWRlcl9zdHJpbmdfaCIgPSB4eWVzOyB0aGVuIDoKLQotZWxzZQotCi0kYXNfZWNobyAiI2RlZmluZSBORUVEX0JTRF9TVFJJTkdTIDEiID4+Y29uZmRlZnMuaAotCi1maQotCi0KLQotIyBTZWUgd2hldGhlciB0eXBlIHNpemVfdCBpcyBkZWZpbmVkIGluIGFueSBBTlNJLXN0YW5kYXJkIHBsYWNlczsKLSMgaWYgbm90LCBwZXJoYXBzIGl0IGlzIGRlZmluZWQgaW4gPHN5cy90eXBlcy5oPi4KLXsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgZm9yIHNpemVfdCIgPiY1Ci0kYXNfZWNob19uICJjaGVja2luZyBmb3Igc2l6ZV90Li4uICIgPiY2OyB9Ci1jYXQgY29uZmRlZnMuaCAtIDw8X0FDRU9GID5jb25mdGVzdC4kYWNfZXh0Ci0vKiBlbmQgY29uZmRlZnMuaC4gICovCi0KLSNpZmRlZiBIQVZFX1NURERFRl9ICi0jaW5jbHVkZSA8c3RkZGVmLmg+Ci0jZW5kaWYKLSNpZmRlZiBIQVZFX1NURExJQl9ICi0jaW5jbHVkZSA8c3RkbGliLmg+Ci0jZW5kaWYKLSNpbmNsdWRlIDxzdGRpby5oPgotI2lmZGVmIE5FRURfQlNEX1NUUklOR1MKLSNpbmNsdWRlIDxzdHJpbmdzLmg+Ci0jZWxzZQotI2luY2x1ZGUgPHN0cmluZy5oPgotI2VuZGlmCi10eXBlZGVmIHNpemVfdCBteV9zaXplX3Q7Ci0KLWludAotbWFpbiAoKQotewotIG15X3NpemVfdCBmb292YXI7Ci0gIDsKLSAgcmV0dXJuIDA7Ci19Ci1fQUNFT0YKLWlmIGFjX2ZuX2NfdHJ5X2NvbXBpbGUgIiRMSU5FTk8iOyB0aGVuIDoKLSAgaWpnX3NpemVfdF9vaz15ZXMKLWVsc2UKLSAgaWpnX3NpemVfdF9vaz0ibm90IEFOU0ksIHBlcmhhcHMgaXQgaXMgaW4gc3lzL3R5cGVzLmgiCi1maQotcm0gLWYgY29yZSBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdC4kYWNfZXh0Ci17ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJGlqZ19zaXplX3Rfb2siID4mNQotJGFzX2VjaG8gIiRpamdfc2l6ZV90X29rIiA+JjY7IH0KLWlmIHRlc3QgIiRpamdfc2l6ZV90X29rIiAhPSB5ZXM7IHRoZW4KLWFjX2ZuX2NfY2hlY2tfaGVhZGVyX21vbmdyZWwgIiRMSU5FTk8iICJzeXMvdHlwZXMuaCIgImFjX2N2X2hlYWRlcl9zeXNfdHlwZXNfaCIgIiRhY19pbmNsdWRlc19kZWZhdWx0IgotaWYgdGVzdCAieCRhY19jdl9oZWFkZXJfc3lzX3R5cGVzX2giID0geHllczsgdGhlbiA6Ci0KLSRhc19lY2hvICIjZGVmaW5lIE5FRURfU1lTX1RZUEVTX0ggMSIgPj5jb25mZGVmcy5oCi0KLWNhdCBjb25mZGVmcy5oIC0gPDxfQUNFT0YgPmNvbmZ0ZXN0LiRhY19leHQKLS8qIGVuZCBjb25mZGVmcy5oLiAgKi8KLSNpbmNsdWRlIDxzeXMvdHlwZXMuaD4KLV9BQ0VPRgotaWYgKGV2YWwgIiRhY19jcHAgY29uZnRlc3QuJGFjX2V4dCIpIDI+JjUgfAotICAkRUdSRVAgInNpemVfdCIgPi9kZXYvbnVsbCAyPiYxOyB0aGVuIDoKLSAgaWpnX3NpemVfdF9vaz0ic2l6ZV90IGlzIGluIHN5cy90eXBlcy5oIgotZWxzZQotICBpamdfc2l6ZV90X29rPW5vCi1maQotcm0gLWYgY29uZnRlc3QqCi0KLWVsc2UKLSAgaWpnX3NpemVfdF9vaz1ubwotZmkKLQotCi17ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJGlqZ19zaXplX3Rfb2siID4mNQotJGFzX2VjaG8gIiRpamdfc2l6ZV90X29rIiA+JjY7IH0KLWlmIHRlc3QgIiRpamdfc2l6ZV90X29rIiA9IG5vOyB0aGVuCi0gIGVjaG8gVHlwZSBzaXplX3QgaXMgbm90IGRlZmluZWQgaW4gYW55IG9mIHRoZSB1c3VhbCBwbGFjZXMuCi0gIGVjaG8gVHJ5IHB1dHRpbmcgJyJ0eXBlZGVmIHVuc2lnbmVkIGludCBzaXplX3Q7IicgaW4gamNvbmZpZy5oLgotZmkKLWZpCi0KLSMgQ2hlY2sgY29tcGlsZXIgY2hhcmFjdGVyaXN0aWNzCi17ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGZvciB0eXBlIHVuc2lnbmVkIGNoYXIiID4mNQotJGFzX2VjaG9fbiAiY2hlY2tpbmcgZm9yIHR5cGUgdW5zaWduZWQgY2hhci4uLiAiID4mNjsgfQotY2F0IGNvbmZkZWZzLmggLSA8PF9BQ0VPRiA+Y29uZnRlc3QuJGFjX2V4dAotLyogZW5kIGNvbmZkZWZzLmguICAqLwotCi1pbnQKLW1haW4gKCkKLXsKLSB1bnNpZ25lZCBjaGFyIHVuX2NoYXI7Ci0gIDsKLSAgcmV0dXJuIDA7Ci19Ci1fQUNFT0YKLWlmIGFjX2ZuX2NfdHJ5X2NvbXBpbGUgIiRMSU5FTk8iOyB0aGVuIDoKLSAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6IHllcyIgPiY1Ci0kYXNfZWNobyAieWVzIiA+JjY7IH0KLQotJGFzX2VjaG8gIiNkZWZpbmUgSEFWRV9VTlNJR05FRF9DSEFSIDEiID4+Y29uZmRlZnMuaAotCi1lbHNlCi0gIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiBubyIgPiY1Ci0kYXNfZWNobyAibm8iID4mNjsgfQotZmkKLXJtIC1mIGNvcmUgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QuJGFjX2V4dAoteyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBmb3IgdHlwZSB1bnNpZ25lZCBzaG9ydCIgPiY1Ci0kYXNfZWNob19uICJjaGVja2luZyBmb3IgdHlwZSB1bnNpZ25lZCBzaG9ydC4uLiAiID4mNjsgfQotY2F0IGNvbmZkZWZzLmggLSA8PF9BQ0VPRiA+Y29uZnRlc3QuJGFjX2V4dAotLyogZW5kIGNvbmZkZWZzLmguICAqLwotCi1pbnQKLW1haW4gKCkKLXsKLSB1bnNpZ25lZCBzaG9ydCB1bl9zaG9ydDsKLSAgOwotICByZXR1cm4gMDsKLX0KLV9BQ0VPRgotaWYgYWNfZm5fY190cnlfY29tcGlsZSAiJExJTkVOTyI7IHRoZW4gOgotICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogeWVzIiA+JjUKLSRhc19lY2hvICJ5ZXMiID4mNjsgfQotCi0kYXNfZWNobyAiI2RlZmluZSBIQVZFX1VOU0lHTkVEX1NIT1JUIDEiID4+Y29uZmRlZnMuaAotCi1lbHNlCi0gIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiBubyIgPiY1Ci0kYXNfZWNobyAibm8iID4mNjsgfQotZmkKLXJtIC1mIGNvcmUgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QuJGFjX2V4dAoteyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBmb3IgdHlwZSB2b2lkIiA+JjUKLSRhc19lY2hvX24gImNoZWNraW5nIGZvciB0eXBlIHZvaWQuLi4gIiA+JjY7IH0KLWNhdCBjb25mZGVmcy5oIC0gPDxfQUNFT0YgPmNvbmZ0ZXN0LiRhY19leHQKLS8qIGVuZCBjb25mZGVmcy5oLiAgKi8KLQotLyogQ2F1dGlvbjogYSBDKysgY29tcGlsZXIgd2lsbCBpbnNpc3Qgb24gdmFsaWQgcHJvdG90eXBlcyAqLwotdHlwZWRlZiB2b2lkICogdm9pZF9wdHI7CS8qIGNoZWNrIHZvaWQgKiAqLwotI2lmZGVmIEhBVkVfUFJPVE9UWVBFUwkJLyogY2hlY2sgcHRyIHRvIGZ1bmN0aW9uIHJldHVybmluZyB2b2lkICovCi10eXBlZGVmIHZvaWQgKCp2b2lkX2Z1bmMpIChpbnQgYSwgaW50IGIpOwotI2Vsc2UKLXR5cGVkZWYgdm9pZCAoKnZvaWRfZnVuYykgKCk7Ci0jZW5kaWYKLQotI2lmZGVmIEhBVkVfUFJPVE9UWVBFUwkJLyogY2hlY2sgdm9pZCBmdW5jdGlvbiByZXN1bHQgKi8KLXZvaWQgdGVzdDNmdW5jdGlvbiAodm9pZF9wdHIgYXJnMSwgdm9pZF9mdW5jIGFyZzIpCi0jZWxzZQotdm9pZCB0ZXN0M2Z1bmN0aW9uIChhcmcxLCBhcmcyKQotICAgICB2b2lkX3B0ciBhcmcxOwotICAgICB2b2lkX2Z1bmMgYXJnMjsKLSNlbmRpZgotewotICBjaGFyICogbG9jcHRyID0gKGNoYXIgKikgYXJnMTsgLyogY2hlY2sgY2FzdGluZyB0byBhbmQgZnJvbSB2b2lkICogKi8KLSAgYXJnMSA9ICh2b2lkICopIGxvY3B0cjsKLSAgKCphcmcyKSAoMSwgMik7CQkvKiBjaGVjayBjYWxsIG9mIGZjbiByZXR1cm5pbmcgdm9pZCAqLwotfQotCi1pbnQKLW1haW4gKCkKLXsKLQotICA7Ci0gIHJldHVybiAwOwotfQotX0FDRU9GCi1pZiBhY19mbl9jX3RyeV9jb21waWxlICIkTElORU5PIjsgdGhlbiA6Ci0gIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiB5ZXMiID4mNQotJGFzX2VjaG8gInllcyIgPiY2OyB9Ci1lbHNlCi0gIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiBubyIgPiY1Ci0kYXNfZWNobyAibm8iID4mNjsgfQotCi0kYXNfZWNobyAiI2RlZmluZSB2b2lkIGNoYXIiID4+Y29uZmRlZnMuaAotCi1maQotcm0gLWYgY29yZSBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdC4kYWNfZXh0Ci17ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGZvciBhbiBBTlNJIEMtY29uZm9ybWluZyBjb25zdCIgPiY1Ci0kYXNfZWNob19uICJjaGVja2luZyBmb3IgYW4gQU5TSSBDLWNvbmZvcm1pbmcgY29uc3QuLi4gIiA+JjY7IH0KLWlmICR7YWNfY3ZfY19jb25zdCs6fSBmYWxzZTsgdGhlbiA6Ci0gICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2Ci1lbHNlCi0gIGNhdCBjb25mZGVmcy5oIC0gPDxfQUNFT0YgPmNvbmZ0ZXN0LiRhY19leHQKLS8qIGVuZCBjb25mZGVmcy5oLiAgKi8KLQotaW50Ci1tYWluICgpCi17Ci0vKiBGSVhNRTogSW5jbHVkZSB0aGUgY29tbWVudHMgc3VnZ2VzdGVkIGJ5IFBhdWwuICovCi0jaWZuZGVmIF9fY3BsdXNwbHVzCi0gIC8qIFVsdHJpeCBtaXBzIGNjIHJlamVjdHMgdGhpcy4gICovCi0gIHR5cGVkZWYgaW50IGNoYXJzZXRbMl07Ci0gIGNvbnN0IGNoYXJzZXQgY3M7Ci0gIC8qIFN1bk9TIDQuMS4xIGNjIHJlamVjdHMgdGhpcy4gICovCi0gIGNoYXIgY29uc3QgKmNvbnN0ICpwY3BjYzsKLSAgY2hhciAqKnBwYzsKLSAgLyogTkVDIFNWUjQuMC4yIG1pcHMgY2MgcmVqZWN0cyB0aGlzLiAgKi8KLSAgc3RydWN0IHBvaW50IHtpbnQgeCwgeTt9OwotICBzdGF0aWMgc3RydWN0IHBvaW50IGNvbnN0IHplcm8gPSB7MCwwfTsKLSAgLyogQUlYIFhMIEMgMS4wMi4wLjAgcmVqZWN0cyB0aGlzLgotICAgICBJdCBkb2VzIG5vdCBsZXQgeW91IHN1YnRyYWN0IG9uZSBjb25zdCBYKiBwb2ludGVyIGZyb20gYW5vdGhlciBpbgotICAgICBhbiBhcm0gb2YgYW4gaWYtZXhwcmVzc2lvbiB3aG9zZSBpZi1wYXJ0IGlzIG5vdCBhIGNvbnN0YW50Ci0gICAgIGV4cHJlc3Npb24gKi8KLSAgY29uc3QgY2hhciAqZyA9ICJzdHJpbmciOwotICBwY3BjYyA9ICZnICsgKGcgPyBnLWcgOiAwKTsKLSAgLyogSFBVWCA3LjAgY2MgcmVqZWN0cyB0aGVzZS4gKi8KLSAgKytwY3BjYzsKLSAgcHBjID0gKGNoYXIqKikgcGNwY2M7Ci0gIHBjcGNjID0gKGNoYXIgY29uc3QgKmNvbnN0ICopIHBwYzsKLSAgeyAvKiBTQ08gMy4ydjQgY2MgcmVqZWN0cyB0aGlzLiAgKi8KLSAgICBjaGFyICp0OwotICAgIGNoYXIgY29uc3QgKnMgPSAwID8gKGNoYXIgKikgMCA6IChjaGFyIGNvbnN0ICopIDA7Ci0KLSAgICAqdCsrID0gMDsKLSAgICBpZiAocykgcmV0dXJuIDA7Ci0gIH0KLSAgeyAvKiBTb21lb25lIHRoaW5rcyB0aGUgU3VuIHN1cHBvc2VkbHktQU5TSSBjb21waWxlciB3aWxsIHJlamVjdCB0aGlzLiAgKi8KLSAgICBpbnQgeFtdID0gezI1LCAxN307Ci0gICAgY29uc3QgaW50ICpmb28gPSAmeFswXTsKLSAgICArK2ZvbzsKLSAgfQotICB7IC8qIFN1biBTQzEuMCBBTlNJIGNvbXBpbGVyIHJlamVjdHMgdGhpcyAtLSBidXQgbm90IHRoZSBhYm92ZS4gKi8KLSAgICB0eXBlZGVmIGNvbnN0IGludCAqaXB0cjsKLSAgICBpcHRyIHAgPSAwOwotICAgICsrcDsKLSAgfQotICB7IC8qIEFJWCBYTCBDIDEuMDIuMC4wIHJlamVjdHMgdGhpcyBzYXlpbmcKLSAgICAgICAiay5jIiwgbGluZSAyLjI3OiAxNTA2LTAyNSAoUykgT3BlcmFuZCBtdXN0IGJlIGEgbW9kaWZpYWJsZSBsdmFsdWUuICovCi0gICAgc3RydWN0IHMgeyBpbnQgajsgY29uc3QgaW50ICphcFszXTsgfTsKLSAgICBzdHJ1Y3QgcyAqYjsgYi0+aiA9IDU7Ci0gIH0KLSAgeyAvKiBVTFRSSVgtMzIgVjMuMSAoUmV2IDkpIHZjYyByZWplY3RzIHRoaXMgKi8KLSAgICBjb25zdCBpbnQgZm9vID0gMTA7Ci0gICAgaWYgKCFmb28pIHJldHVybiAwOwotICB9Ci0gIHJldHVybiAhY3NbMF0gJiYgIXplcm8ueDsKLSNlbmRpZgotCi0gIDsKLSAgcmV0dXJuIDA7Ci19Ci1fQUNFT0YKLWlmIGFjX2ZuX2NfdHJ5X2NvbXBpbGUgIiRMSU5FTk8iOyB0aGVuIDoKLSAgYWNfY3ZfY19jb25zdD15ZXMKLWVsc2UKLSAgYWNfY3ZfY19jb25zdD1ubwotZmkKLXJtIC1mIGNvcmUgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QuJGFjX2V4dAotZmkKLXsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkYWNfY3ZfY19jb25zdCIgPiY1Ci0kYXNfZWNobyAiJGFjX2N2X2NfY29uc3QiID4mNjsgfQotaWYgdGVzdCAkYWNfY3ZfY19jb25zdCA9IG5vOyB0aGVuCi0KLSRhc19lY2hvICIjZGVmaW5lIGNvbnN0IC8qKi8iID4+Y29uZmRlZnMuaAotCi1maQotCi0KLSMgQ2hlY2sgZm9yIG5vbi1icm9rZW4gaW5saW5lIHVuZGVyIHZhcmlvdXMgc3BlbGxpbmdzCi17ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGZvciBpbmxpbmUiID4mNQotJGFzX2VjaG9fbiAiY2hlY2tpbmcgZm9yIGlubGluZS4uLiAiID4mNjsgfQotaWpnX2N2X2lubGluZT0iIgotY2F0IGNvbmZkZWZzLmggLSA8PF9BQ0VPRiA+Y29uZnRlc3QuJGFjX2V4dAotLyogZW5kIGNvbmZkZWZzLmguICAqLwotCi1pbnQKLW1haW4gKCkKLXsKLX0gX19pbmxpbmVfXyBpbnQgZm9vKCkgeyByZXR1cm4gMDsgfQotaW50IGJhcigpIHsgcmV0dXJuIGZvbygpOwotICA7Ci0gIHJldHVybiAwOwotfQotX0FDRU9GCi1pZiBhY19mbl9jX3RyeV9jb21waWxlICIkTElORU5PIjsgdGhlbiA6Ci0gIGlqZ19jdl9pbmxpbmU9Il9faW5saW5lX18iCi1lbHNlCi0gIGNhdCBjb25mZGVmcy5oIC0gPDxfQUNFT0YgPmNvbmZ0ZXN0LiRhY19leHQKLS8qIGVuZCBjb25mZGVmcy5oLiAgKi8KLQotaW50Ci1tYWluICgpCi17Ci19IF9faW5saW5lIGludCBmb28oKSB7IHJldHVybiAwOyB9Ci1pbnQgYmFyKCkgeyByZXR1cm4gZm9vKCk7Ci0gIDsKLSAgcmV0dXJuIDA7Ci19Ci1fQUNFT0YKLWlmIGFjX2ZuX2NfdHJ5X2NvbXBpbGUgIiRMSU5FTk8iOyB0aGVuIDoKLSAgaWpnX2N2X2lubGluZT0iX19pbmxpbmUiCi1lbHNlCi0gIGNhdCBjb25mZGVmcy5oIC0gPDxfQUNFT0YgPmNvbmZ0ZXN0LiRhY19leHQKLS8qIGVuZCBjb25mZGVmcy5oLiAgKi8KLQotaW50Ci1tYWluICgpCi17Ci19IGlubGluZSBpbnQgZm9vKCkgeyByZXR1cm4gMDsgfQotaW50IGJhcigpIHsgcmV0dXJuIGZvbygpOwotICA7Ci0gIHJldHVybiAwOwotfQotX0FDRU9GCi1pZiBhY19mbl9jX3RyeV9jb21waWxlICIkTElORU5PIjsgdGhlbiA6Ci0gIGlqZ19jdl9pbmxpbmU9ImlubGluZSIKLWZpCi1ybSAtZiBjb3JlIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0LiRhY19leHQKLWZpCi1ybSAtZiBjb3JlIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0LiRhY19leHQKLWZpCi1ybSAtZiBjb3JlIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0LiRhY19leHQKLXsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkaWpnX2N2X2lubGluZSIgPiY1Ci0kYXNfZWNobyAiJGlqZ19jdl9pbmxpbmUiID4mNjsgfQotCi1jYXQgPj5jb25mZGVmcy5oIDw8X0FDRU9GCi0jZGVmaW5lIElOTElORSAkaWpnX2N2X2lubGluZQotX0FDRU9GCi0KLQotIyBXZSBjYW5ub3QgY2hlY2sgZm9yIGJvZ3VzIHdhcm5pbmdzLCBidXQgYXQgbGVhc3Qgd2UgY2FuIGNoZWNrIGZvciBlcnJvcnMKLXsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgZm9yIGJyb2tlbiBpbmNvbXBsZXRlIHR5cGVzIiA+JjUKLSRhc19lY2hvX24gImNoZWNraW5nIGZvciBicm9rZW4gaW5jb21wbGV0ZSB0eXBlcy4uLiAiID4mNjsgfQotY2F0IGNvbmZkZWZzLmggLSA8PF9BQ0VPRiA+Y29uZnRlc3QuJGFjX2V4dAotLyogZW5kIGNvbmZkZWZzLmguICAqLwotIHR5cGVkZWYgc3RydWN0IHVuZGVmaW5lZF9zdHJ1Y3R1cmUgKiB1bmRlZl9zdHJ1Y3RfcHRyOwotaW50Ci1tYWluICgpCi17Ci0KLSAgOwotICByZXR1cm4gMDsKLX0KLV9BQ0VPRgotaWYgYWNfZm5fY190cnlfY29tcGlsZSAiJExJTkVOTyI7IHRoZW4gOgotICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogb2siID4mNQotJGFzX2VjaG8gIm9rIiA+JjY7IH0KLWVsc2UKLSAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6IGJyb2tlbiIgPiY1Ci0kYXNfZWNobyAiYnJva2VuIiA+JjY7IH0KLQotJGFzX2VjaG8gIiNkZWZpbmUgSU5DT01QTEVURV9UWVBFU19CUk9LRU4gMSIgPj5jb25mZGVmcy5oCi0KLWZpCi1ybSAtZiBjb3JlIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0LiRhY19leHQKLQotIyBUZXN0IHdoZXRoZXIgZ2xvYmFsIG5hbWVzIGFyZSB1bmlxdWUgdG8gYXQgbGVhc3QgMTUgY2hhcnMKLXsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgZm9yIHNob3J0IGV4dGVybmFsIG5hbWVzIiA+JjUKLSRhc19lY2hvX24gImNoZWNraW5nIGZvciBzaG9ydCBleHRlcm5hbCBuYW1lcy4uLiAiID4mNjsgfQotY2F0IGNvbmZkZWZzLmggLSA8PF9BQ0VPRiA+Y29uZnRlc3QuJGFjX2V4dAotLyogZW5kIGNvbmZkZWZzLmguICAqLwotCi1pbnQgcG9zc2libHlfZHVwbGljYXRlX2Z1bmN0aW9uICgpIHsgcmV0dXJuIDA7IH0KLWludCBwb3NzaWJseV9kdXBsaV9mdW5jdGlvbiAoKSB7IHJldHVybiAxOyB9Ci0KLWludAotbWFpbiAoKQotewotCi0gIDsKLSAgcmV0dXJuIDA7Ci19Ci1fQUNFT0YKLWlmIGFjX2ZuX2NfdHJ5X2xpbmsgIiRMSU5FTk8iOyB0aGVuIDoKLSAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6IG9rIiA+JjUKLSRhc19lY2hvICJvayIgPiY2OyB9Ci1lbHNlCi0gIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiBzaG9ydCIgPiY1Ci0kYXNfZWNobyAic2hvcnQiID4mNjsgfQotCi0kYXNfZWNobyAiI2RlZmluZSBORUVEX1NIT1JUX0VYVEVSTkFMX05BTUVTIDEiID4+Y29uZmRlZnMuaAotCi1maQotcm0gLWYgY29yZSBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBcCi0gICAgY29uZnRlc3QkYWNfZXhlZXh0IGNvbmZ0ZXN0LiRhY19leHQKLQotIyBSdW4tdGltZSBjaGVja3MKLXsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgdG8gc2VlIGlmIGNoYXIgaXMgc2lnbmVkIiA+JjUKLSRhc19lY2hvX24gImNoZWNraW5nIHRvIHNlZSBpZiBjaGFyIGlzIHNpZ25lZC4uLiAiID4mNjsgfQotaWYgdGVzdCAiJGNyb3NzX2NvbXBpbGluZyIgPSB5ZXM7IHRoZW4gOgotICBlY2hvIEFzc3VtaW5nIHRoYXQgY2hhciBpcyBzaWduZWQgb24gdGFyZ2V0IG1hY2hpbmUuCi1lY2hvIElmIGl0IGlzIHVuc2lnbmVkLCB0aGlzIHdpbGwgYmUgYSBsaXR0bGUgYml0IGluZWZmaWNpZW50LgotCi1lbHNlCi0gIGNhdCBjb25mZGVmcy5oIC0gPDxfQUNFT0YgPmNvbmZ0ZXN0LiRhY19leHQKLS8qIGVuZCBjb25mZGVmcy5oLiAgKi8KLQotI2lmZGVmIEhBVkVfUFJPVE9UWVBFUwotaW50IGlzX2NoYXJfc2lnbmVkIChpbnQgYXJnKQotI2Vsc2UKLWludCBpc19jaGFyX3NpZ25lZCAoYXJnKQotICAgICBpbnQgYXJnOwotI2VuZGlmCi17Ci0gIGlmIChhcmcgPT0gMTg5KSB7CQkvKiBleHBlY3RlZCByZXN1bHQgZm9yIHVuc2lnbmVkIGNoYXIgKi8KLSAgICByZXR1cm4gMDsJCQkvKiB0eXBlIGNoYXIgaXMgdW5zaWduZWQgKi8KLSAgfQotICBlbHNlIGlmIChhcmcgIT0gLTY3KSB7CS8qIGV4cGVjdGVkIHJlc3VsdCBmb3Igc2lnbmVkIGNoYXIgKi8KLSAgICBwcmludGYoIkhtbSwgaXQgc2VlbXMgJ2NoYXInIGlzIG5vdCBlaWdodCBiaXRzIHdpZGUgb24geW91ciBtYWNoaW5lLlxuIik7Ci0gICAgcHJpbnRmKCJJIGZlYXIgdGhlIEpQRUcgc29mdHdhcmUgd2lsbCBub3Qgd29yayBhdCBhbGwuXG5cbiIpOwotICB9Ci0gIHJldHVybiAxOwkJCS8qIGFzc3VtZSBjaGFyIGlzIHNpZ25lZCBvdGhlcndpc2UgKi8KLX0KLWNoYXIgc2lnbmVkX2NoYXJfY2hlY2sgPSAoY2hhcikgKC02Nyk7Ci1pbnQgbWFpbigpIHsKLSAgZXhpdChpc19jaGFyX3NpZ25lZCgoaW50KSBzaWduZWRfY2hhcl9jaGVjaykpOwotfQotX0FDRU9GCi1pZiBhY19mbl9jX3RyeV9ydW4gIiRMSU5FTk8iOyB0aGVuIDoKLSAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6IG5vIiA+JjUKLSRhc19lY2hvICJubyIgPiY2OyB9Ci0KLSRhc19lY2hvICIjZGVmaW5lIENIQVJfSVNfVU5TSUdORUQgMSIgPj5jb25mZGVmcy5oCi0KLWVsc2UKLSAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6IHllcyIgPiY1Ci0kYXNfZWNobyAieWVzIiA+JjY7IH0KLWZpCi1ybSAtZiBjb3JlICouY29yZSBjb3JlLmNvbmZ0ZXN0LiogZ21vbi5vdXQgYmIub3V0IGNvbmZ0ZXN0JGFjX2V4ZWV4dCBcCi0gIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QuYmVhbSBjb25mdGVzdC4kYWNfZXh0Ci1maQotCi17ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIHRvIHNlZSBpZiByaWdodCBzaGlmdCBpcyBzaWduZWQiID4mNQotJGFzX2VjaG9fbiAiY2hlY2tpbmcgdG8gc2VlIGlmIHJpZ2h0IHNoaWZ0IGlzIHNpZ25lZC4uLiAiID4mNjsgfQotaWYgdGVzdCAiJGNyb3NzX2NvbXBpbGluZyIgPSB5ZXM7IHRoZW4gOgotICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogQXNzdW1pbmcgdGhhdCByaWdodCBzaGlmdCBpcyBzaWduZWQgb24gdGFyZ2V0IG1hY2hpbmUuIiA+JjUKLSRhc19lY2hvICJBc3N1bWluZyB0aGF0IHJpZ2h0IHNoaWZ0IGlzIHNpZ25lZCBvbiB0YXJnZXQgbWFjaGluZS4iID4mNjsgfQotZWxzZQotICBjYXQgY29uZmRlZnMuaCAtIDw8X0FDRU9GID5jb25mdGVzdC4kYWNfZXh0Ci0vKiBlbmQgY29uZmRlZnMuaC4gICovCi0KLSNpZmRlZiBIQVZFX1BST1RPVFlQRVMKLWludCBpc19zaGlmdGluZ19zaWduZWQgKGxvbmcgYXJnKQotI2Vsc2UKLWludCBpc19zaGlmdGluZ19zaWduZWQgKGFyZykKLSAgICAgbG9uZyBhcmc7Ci0jZW5kaWYKLS8qIFNlZSB3aGV0aGVyIHJpZ2h0LXNoaWZ0IG9uIGEgbG9uZyBpcyBzaWduZWQgb3Igbm90LiAqLwotewotICBsb25nIHJlcyA9IGFyZyA+PiA0OwotCi0gIGlmIChyZXMgPT0gLTB4N0Y3RTgwQ0wpIHsJLyogZXhwZWN0ZWQgcmVzdWx0IGZvciBzaWduZWQgc2hpZnQgKi8KLSAgICByZXR1cm4gMTsJCQkvKiByaWdodCBzaGlmdCBpcyBzaWduZWQgKi8KLSAgfQotICAvKiBzZWUgaWYgdW5zaWduZWQtc2hpZnQgaGFjayB3aWxsIGZpeCBpdC4gKi8KLSAgLyogd2UgY2FuJ3QganVzdCB0ZXN0IGV4YWN0IHZhbHVlIHNpbmNlIGl0IGRlcGVuZHMgb24gd2lkdGggb2YgbG9uZy4uLiAqLwotICByZXMgfD0gKH4wTCkgPDwgKDMyLTQpOwotICBpZiAocmVzID09IC0weDdGN0U4MENMKSB7CS8qIGV4cGVjdGVkIHJlc3VsdCBub3c/ICovCi0gICAgcmV0dXJuIDA7CQkJLyogcmlnaHQgc2hpZnQgaXMgdW5zaWduZWQgKi8KLSAgfQotICBwcmludGYoIlJpZ2h0IHNoaWZ0IGlzbid0IGFjdGluZyBhcyBJIGV4cGVjdCBpdCB0by5cbiIpOwotICBwcmludGYoIkkgZmVhciB0aGUgSlBFRyBzb2Z0d2FyZSB3aWxsIG5vdCB3b3JrIGF0IGFsbC5cblxuIik7Ci0gIHJldHVybiAwOwkJCS8qIHRyeSBpdCB3aXRoIHVuc2lnbmVkIGFueXdheSAqLwotfQotaW50IG1haW4oKSB7Ci0gIGV4aXQoaXNfc2hpZnRpbmdfc2lnbmVkKC0weDdGN0U4MEIxTCkpOwotfQotX0FDRU9GCi1pZiBhY19mbl9jX3RyeV9ydW4gIiRMSU5FTk8iOyB0aGVuIDoKLSAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6IG5vIiA+JjUKLSRhc19lY2hvICJubyIgPiY2OyB9Ci0KLSRhc19lY2hvICIjZGVmaW5lIFJJR0hUX1NISUZUX0lTX1VOU0lHTkVEIDEiID4+Y29uZmRlZnMuaAotCi1lbHNlCi0gIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiB5ZXMiID4mNQotJGFzX2VjaG8gInllcyIgPiY2OyB9Ci1maQotcm0gLWYgY29yZSAqLmNvcmUgY29yZS5jb25mdGVzdC4qIGdtb24ub3V0IGJiLm91dCBjb25mdGVzdCRhY19leGVleHQgXAotICBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0LmJlYW0gY29uZnRlc3QuJGFjX2V4dAotZmkKLQoteyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyB0byBzZWUgaWYgZm9wZW4gYWNjZXB0cyBiIHNwZWMiID4mNQotJGFzX2VjaG9fbiAiY2hlY2tpbmcgdG8gc2VlIGlmIGZvcGVuIGFjY2VwdHMgYiBzcGVjLi4uICIgPiY2OyB9Ci1pZiB0ZXN0ICIkY3Jvc3NfY29tcGlsaW5nIiA9IHllczsgdGhlbiA6Ci0gIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiBBc3N1bWluZyB0aGF0IGl0IGRvZXMuIiA+JjUKLSRhc19lY2hvICJBc3N1bWluZyB0aGF0IGl0IGRvZXMuIiA+JjY7IH0KLWVsc2UKLSAgY2F0IGNvbmZkZWZzLmggLSA8PF9BQ0VPRiA+Y29uZnRlc3QuJGFjX2V4dAotLyogZW5kIGNvbmZkZWZzLmguICAqLwotCi0jaW5jbHVkZSA8c3RkaW8uaD4KLWludCBtYWluKCkgewotICBpZiAoZm9wZW4oImNvbmZ0ZXN0ZGF0YSIsICJ3YiIpICE9IE5VTEwpCi0gICAgZXhpdCgwKTsKLSAgZXhpdCgxKTsKLX0KLV9BQ0VPRgotaWYgYWNfZm5fY190cnlfcnVuICIkTElORU5PIjsgdGhlbiA6Ci0gIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiB5ZXMiID4mNQotJGFzX2VjaG8gInllcyIgPiY2OyB9Ci1lbHNlCi0gIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiBubyIgPiY1Ci0kYXNfZWNobyAibm8iID4mNjsgfQotCi0kYXNfZWNobyAiI2RlZmluZSBET05UX1VTRV9CX01PREUgMSIgPj5jb25mZGVmcy5oCi0KLWZpCi1ybSAtZiBjb3JlICouY29yZSBjb3JlLmNvbmZ0ZXN0LiogZ21vbi5vdXQgYmIub3V0IGNvbmZ0ZXN0JGFjX2V4ZWV4dCBcCi0gIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QuYmVhbSBjb25mdGVzdC4kYWNfZXh0Ci1maQotCi0KLSMgQ29uZmlndXJlIGxpYnRvb2wKLWVuYWJsZV93aW4zMl9kbGw9eWVzCi0KLWNhc2UgJGhvc3QgaW4KLSotKi1jeWd3aW4qIHwgKi0qLW1pbmd3KiB8ICotKi1wdzMyKiB8ICotKi1jZWdjYyopCi0gIGlmIHRlc3QgLW4gIiRhY190b29sX3ByZWZpeCI7IHRoZW4KLSAgIyBFeHRyYWN0IHRoZSBmaXJzdCB3b3JkIG9mICIke2FjX3Rvb2xfcHJlZml4fWFzIiwgc28gaXQgY2FuIGJlIGEgcHJvZ3JhbSBuYW1lIHdpdGggYXJncy4KLXNldCBkdW1teSAke2FjX3Rvb2xfcHJlZml4fWFzOyBhY193b3JkPSQyCi17ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGZvciAkYWNfd29yZCIgPiY1Ci0kYXNfZWNob19uICJjaGVja2luZyBmb3IgJGFjX3dvcmQuLi4gIiA+JjY7IH0KLWlmICR7YWNfY3ZfcHJvZ19BUys6fSBmYWxzZTsgdGhlbiA6Ci0gICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2Ci1lbHNlCi0gIGlmIHRlc3QgLW4gIiRBUyI7IHRoZW4KLSAgYWNfY3ZfcHJvZ19BUz0iJEFTIiAjIExldCB0aGUgdXNlciBvdmVycmlkZSB0aGUgdGVzdC4KLWVsc2UKLWFzX3NhdmVfSUZTPSRJRlM7IElGUz0kUEFUSF9TRVBBUkFUT1IKLWZvciBhc19kaXIgaW4gJFBBVEgKLWRvCi0gIElGUz0kYXNfc2F2ZV9JRlMKLSAgdGVzdCAteiAiJGFzX2RpciIgJiYgYXNfZGlyPS4KLSAgICBmb3IgYWNfZXhlY19leHQgaW4gJycgJGFjX2V4ZWN1dGFibGVfZXh0ZW5zaW9uczsgZG8KLSAgaWYgeyB0ZXN0IC1mICIkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IiAmJiAkYXNfdGVzdF94ICIkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IjsgfTsgdGhlbgotICAgIGFjX2N2X3Byb2dfQVM9IiR7YWNfdG9vbF9wcmVmaXh9YXMiCi0gICAgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogZm91bmQgJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCIgPiY1Ci0gICAgYnJlYWsgMgotICBmaQotZG9uZQotICBkb25lCi1JRlM9JGFzX3NhdmVfSUZTCi0KLWZpCi1maQotQVM9JGFjX2N2X3Byb2dfQVMKLWlmIHRlc3QgLW4gIiRBUyI7IHRoZW4KLSAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRBUyIgPiY1Ci0kYXNfZWNobyAiJEFTIiA+JjY7IH0KLWVsc2UKLSAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6IG5vIiA+JjUKLSRhc19lY2hvICJubyIgPiY2OyB9Ci1maQotCi0KLWZpCi1pZiB0ZXN0IC16ICIkYWNfY3ZfcHJvZ19BUyI7IHRoZW4KLSAgYWNfY3RfQVM9JEFTCi0gICMgRXh0cmFjdCB0aGUgZmlyc3Qgd29yZCBvZiAiYXMiLCBzbyBpdCBjYW4gYmUgYSBwcm9ncmFtIG5hbWUgd2l0aCBhcmdzLgotc2V0IGR1bW15IGFzOyBhY193b3JkPSQyCi17ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGZvciAkYWNfd29yZCIgPiY1Ci0kYXNfZWNob19uICJjaGVja2luZyBmb3IgJGFjX3dvcmQuLi4gIiA+JjY7IH0KLWlmICR7YWNfY3ZfcHJvZ19hY19jdF9BUys6fSBmYWxzZTsgdGhlbiA6Ci0gICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2Ci1lbHNlCi0gIGlmIHRlc3QgLW4gIiRhY19jdF9BUyI7IHRoZW4KLSAgYWNfY3ZfcHJvZ19hY19jdF9BUz0iJGFjX2N0X0FTIiAjIExldCB0aGUgdXNlciBvdmVycmlkZSB0aGUgdGVzdC4KLWVsc2UKLWFzX3NhdmVfSUZTPSRJRlM7IElGUz0kUEFUSF9TRVBBUkFUT1IKLWZvciBhc19kaXIgaW4gJFBBVEgKLWRvCi0gIElGUz0kYXNfc2F2ZV9JRlMKLSAgdGVzdCAteiAiJGFzX2RpciIgJiYgYXNfZGlyPS4KLSAgICBmb3IgYWNfZXhlY19leHQgaW4gJycgJGFjX2V4ZWN1dGFibGVfZXh0ZW5zaW9uczsgZG8KLSAgaWYgeyB0ZXN0IC1mICIkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IiAmJiAkYXNfdGVzdF94ICIkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IjsgfTsgdGhlbgotICAgIGFjX2N2X3Byb2dfYWNfY3RfQVM9ImFzIgotICAgICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGZvdW5kICRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiID4mNQotICAgIGJyZWFrIDIKLSAgZmkKLWRvbmUKLSAgZG9uZQotSUZTPSRhc19zYXZlX0lGUwotCi1maQotZmkKLWFjX2N0X0FTPSRhY19jdl9wcm9nX2FjX2N0X0FTCi1pZiB0ZXN0IC1uICIkYWNfY3RfQVMiOyB0aGVuCi0gIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkYWNfY3RfQVMiID4mNQotJGFzX2VjaG8gIiRhY19jdF9BUyIgPiY2OyB9Ci1lbHNlCi0gIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiBubyIgPiY1Ci0kYXNfZWNobyAibm8iID4mNjsgfQotZmkKLQotICBpZiB0ZXN0ICJ4JGFjX2N0X0FTIiA9IHg7IHRoZW4KLSAgICBBUz0iZmFsc2UiCi0gIGVsc2UKLSAgICBjYXNlICRjcm9zc19jb21waWxpbmc6JGFjX3Rvb2xfd2FybmVkIGluCi15ZXM6KQoteyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBXQVJOSU5HOiB1c2luZyBjcm9zcyB0b29scyBub3QgcHJlZml4ZWQgd2l0aCBob3N0IHRyaXBsZXQiID4mNQotJGFzX2VjaG8gIiRhc19tZTogV0FSTklORzogdXNpbmcgY3Jvc3MgdG9vbHMgbm90IHByZWZpeGVkIHdpdGggaG9zdCB0cmlwbGV0IiA+JjI7fQotYWNfdG9vbF93YXJuZWQ9eWVzIDs7Ci1lc2FjCi0gICAgQVM9JGFjX2N0X0FTCi0gIGZpCi1lbHNlCi0gIEFTPSIkYWNfY3ZfcHJvZ19BUyIKLWZpCi0KLSAgaWYgdGVzdCAtbiAiJGFjX3Rvb2xfcHJlZml4IjsgdGhlbgotICAjIEV4dHJhY3QgdGhlIGZpcnN0IHdvcmQgb2YgIiR7YWNfdG9vbF9wcmVmaXh9ZGxsdG9vbCIsIHNvIGl0IGNhbiBiZSBhIHByb2dyYW0gbmFtZSB3aXRoIGFyZ3MuCi1zZXQgZHVtbXkgJHthY190b29sX3ByZWZpeH1kbGx0b29sOyBhY193b3JkPSQyCi17ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGZvciAkYWNfd29yZCIgPiY1Ci0kYXNfZWNob19uICJjaGVja2luZyBmb3IgJGFjX3dvcmQuLi4gIiA+JjY7IH0KLWlmICR7YWNfY3ZfcHJvZ19ETExUT09MKzp9IGZhbHNlOyB0aGVuIDoKLSAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKLWVsc2UKLSAgaWYgdGVzdCAtbiAiJERMTFRPT0wiOyB0aGVuCi0gIGFjX2N2X3Byb2dfRExMVE9PTD0iJERMTFRPT0wiICMgTGV0IHRoZSB1c2VyIG92ZXJyaWRlIHRoZSB0ZXN0LgotZWxzZQotYXNfc2F2ZV9JRlM9JElGUzsgSUZTPSRQQVRIX1NFUEFSQVRPUgotZm9yIGFzX2RpciBpbiAkUEFUSAotZG8KLSAgSUZTPSRhc19zYXZlX0lGUwotICB0ZXN0IC16ICIkYXNfZGlyIiAmJiBhc19kaXI9LgotICAgIGZvciBhY19leGVjX2V4dCBpbiAnJyAkYWNfZXhlY3V0YWJsZV9leHRlbnNpb25zOyBkbwotICBpZiB7IHRlc3QgLWYgIiRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiICYmICRhc190ZXN0X3ggIiRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiOyB9OyB0aGVuCi0gICAgYWNfY3ZfcHJvZ19ETExUT09MPSIke2FjX3Rvb2xfcHJlZml4fWRsbHRvb2wiCi0gICAgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogZm91bmQgJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCIgPiY1Ci0gICAgYnJlYWsgMgotICBmaQotZG9uZQotICBkb25lCi1JRlM9JGFzX3NhdmVfSUZTCi0KLWZpCi1maQotRExMVE9PTD0kYWNfY3ZfcHJvZ19ETExUT09MCi1pZiB0ZXN0IC1uICIkRExMVE9PTCI7IHRoZW4KLSAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRETExUT09MIiA+JjUKLSRhc19lY2hvICIkRExMVE9PTCIgPiY2OyB9Ci1lbHNlCi0gIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiBubyIgPiY1Ci0kYXNfZWNobyAibm8iID4mNjsgfQotZmkKLQotCi1maQotaWYgdGVzdCAteiAiJGFjX2N2X3Byb2dfRExMVE9PTCI7IHRoZW4KLSAgYWNfY3RfRExMVE9PTD0kRExMVE9PTAotICAjIEV4dHJhY3QgdGhlIGZpcnN0IHdvcmQgb2YgImRsbHRvb2wiLCBzbyBpdCBjYW4gYmUgYSBwcm9ncmFtIG5hbWUgd2l0aCBhcmdzLgotc2V0IGR1bW15IGRsbHRvb2w7IGFjX3dvcmQ9JDIKLXsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgZm9yICRhY193b3JkIiA+JjUKLSRhc19lY2hvX24gImNoZWNraW5nIGZvciAkYWNfd29yZC4uLiAiID4mNjsgfQotaWYgJHthY19jdl9wcm9nX2FjX2N0X0RMTFRPT0wrOn0gZmFsc2U7IHRoZW4gOgotICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgotZWxzZQotICBpZiB0ZXN0IC1uICIkYWNfY3RfRExMVE9PTCI7IHRoZW4KLSAgYWNfY3ZfcHJvZ19hY19jdF9ETExUT09MPSIkYWNfY3RfRExMVE9PTCIgIyBMZXQgdGhlIHVzZXIgb3ZlcnJpZGUgdGhlIHRlc3QuCi1lbHNlCi1hc19zYXZlX0lGUz0kSUZTOyBJRlM9JFBBVEhfU0VQQVJBVE9SCi1mb3IgYXNfZGlyIGluICRQQVRICi1kbwotICBJRlM9JGFzX3NhdmVfSUZTCi0gIHRlc3QgLXogIiRhc19kaXIiICYmIGFzX2Rpcj0uCi0gICAgZm9yIGFjX2V4ZWNfZXh0IGluICcnICRhY19leGVjdXRhYmxlX2V4dGVuc2lvbnM7IGRvCi0gIGlmIHsgdGVzdCAtZiAiJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCIgJiYgJGFzX3Rlc3RfeCAiJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCI7IH07IHRoZW4KLSAgICBhY19jdl9wcm9nX2FjX2N0X0RMTFRPT0w9ImRsbHRvb2wiCi0gICAgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogZm91bmQgJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCIgPiY1Ci0gICAgYnJlYWsgMgotICBmaQotZG9uZQotICBkb25lCi1JRlM9JGFzX3NhdmVfSUZTCi0KLWZpCi1maQotYWNfY3RfRExMVE9PTD0kYWNfY3ZfcHJvZ19hY19jdF9ETExUT09MCi1pZiB0ZXN0IC1uICIkYWNfY3RfRExMVE9PTCI7IHRoZW4KLSAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRhY19jdF9ETExUT09MIiA+JjUKLSRhc19lY2hvICIkYWNfY3RfRExMVE9PTCIgPiY2OyB9Ci1lbHNlCi0gIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiBubyIgPiY1Ci0kYXNfZWNobyAibm8iID4mNjsgfQotZmkKLQotICBpZiB0ZXN0ICJ4JGFjX2N0X0RMTFRPT0wiID0geDsgdGhlbgotICAgIERMTFRPT0w9ImZhbHNlIgotICBlbHNlCi0gICAgY2FzZSAkY3Jvc3NfY29tcGlsaW5nOiRhY190b29sX3dhcm5lZCBpbgoteWVzOikKLXsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogV0FSTklORzogdXNpbmcgY3Jvc3MgdG9vbHMgbm90IHByZWZpeGVkIHdpdGggaG9zdCB0cmlwbGV0IiA+JjUKLSRhc19lY2hvICIkYXNfbWU6IFdBUk5JTkc6IHVzaW5nIGNyb3NzIHRvb2xzIG5vdCBwcmVmaXhlZCB3aXRoIGhvc3QgdHJpcGxldCIgPiYyO30KLWFjX3Rvb2xfd2FybmVkPXllcyA7OwotZXNhYwotICAgIERMTFRPT0w9JGFjX2N0X0RMTFRPT0wKLSAgZmkKLWVsc2UKLSAgRExMVE9PTD0iJGFjX2N2X3Byb2dfRExMVE9PTCIKLWZpCi0KLSAgaWYgdGVzdCAtbiAiJGFjX3Rvb2xfcHJlZml4IjsgdGhlbgotICAjIEV4dHJhY3QgdGhlIGZpcnN0IHdvcmQgb2YgIiR7YWNfdG9vbF9wcmVmaXh9b2JqZHVtcCIsIHNvIGl0IGNhbiBiZSBhIHByb2dyYW0gbmFtZSB3aXRoIGFyZ3MuCi1zZXQgZHVtbXkgJHthY190b29sX3ByZWZpeH1vYmpkdW1wOyBhY193b3JkPSQyCi17ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGZvciAkYWNfd29yZCIgPiY1Ci0kYXNfZWNob19uICJjaGVja2luZyBmb3IgJGFjX3dvcmQuLi4gIiA+JjY7IH0KLWlmICR7YWNfY3ZfcHJvZ19PQkpEVU1QKzp9IGZhbHNlOyB0aGVuIDoKLSAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKLWVsc2UKLSAgaWYgdGVzdCAtbiAiJE9CSkRVTVAiOyB0aGVuCi0gIGFjX2N2X3Byb2dfT0JKRFVNUD0iJE9CSkRVTVAiICMgTGV0IHRoZSB1c2VyIG92ZXJyaWRlIHRoZSB0ZXN0LgotZWxzZQotYXNfc2F2ZV9JRlM9JElGUzsgSUZTPSRQQVRIX1NFUEFSQVRPUgotZm9yIGFzX2RpciBpbiAkUEFUSAotZG8KLSAgSUZTPSRhc19zYXZlX0lGUwotICB0ZXN0IC16ICIkYXNfZGlyIiAmJiBhc19kaXI9LgotICAgIGZvciBhY19leGVjX2V4dCBpbiAnJyAkYWNfZXhlY3V0YWJsZV9leHRlbnNpb25zOyBkbwotICBpZiB7IHRlc3QgLWYgIiRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiICYmICRhc190ZXN0X3ggIiRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiOyB9OyB0aGVuCi0gICAgYWNfY3ZfcHJvZ19PQkpEVU1QPSIke2FjX3Rvb2xfcHJlZml4fW9iamR1bXAiCi0gICAgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogZm91bmQgJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCIgPiY1Ci0gICAgYnJlYWsgMgotICBmaQotZG9uZQotICBkb25lCi1JRlM9JGFzX3NhdmVfSUZTCi0KLWZpCi1maQotT0JKRFVNUD0kYWNfY3ZfcHJvZ19PQkpEVU1QCi1pZiB0ZXN0IC1uICIkT0JKRFVNUCI7IHRoZW4KLSAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRPQkpEVU1QIiA+JjUKLSRhc19lY2hvICIkT0JKRFVNUCIgPiY2OyB9Ci1lbHNlCi0gIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiBubyIgPiY1Ci0kYXNfZWNobyAibm8iID4mNjsgfQotZmkKLQotCi1maQotaWYgdGVzdCAteiAiJGFjX2N2X3Byb2dfT0JKRFVNUCI7IHRoZW4KLSAgYWNfY3RfT0JKRFVNUD0kT0JKRFVNUAotICAjIEV4dHJhY3QgdGhlIGZpcnN0IHdvcmQgb2YgIm9iamR1bXAiLCBzbyBpdCBjYW4gYmUgYSBwcm9ncmFtIG5hbWUgd2l0aCBhcmdzLgotc2V0IGR1bW15IG9iamR1bXA7IGFjX3dvcmQ9JDIKLXsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgZm9yICRhY193b3JkIiA+JjUKLSRhc19lY2hvX24gImNoZWNraW5nIGZvciAkYWNfd29yZC4uLiAiID4mNjsgfQotaWYgJHthY19jdl9wcm9nX2FjX2N0X09CSkRVTVArOn0gZmFsc2U7IHRoZW4gOgotICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgotZWxzZQotICBpZiB0ZXN0IC1uICIkYWNfY3RfT0JKRFVNUCI7IHRoZW4KLSAgYWNfY3ZfcHJvZ19hY19jdF9PQkpEVU1QPSIkYWNfY3RfT0JKRFVNUCIgIyBMZXQgdGhlIHVzZXIgb3ZlcnJpZGUgdGhlIHRlc3QuCi1lbHNlCi1hc19zYXZlX0lGUz0kSUZTOyBJRlM9JFBBVEhfU0VQQVJBVE9SCi1mb3IgYXNfZGlyIGluICRQQVRICi1kbwotICBJRlM9JGFzX3NhdmVfSUZTCi0gIHRlc3QgLXogIiRhc19kaXIiICYmIGFzX2Rpcj0uCi0gICAgZm9yIGFjX2V4ZWNfZXh0IGluICcnICRhY19leGVjdXRhYmxlX2V4dGVuc2lvbnM7IGRvCi0gIGlmIHsgdGVzdCAtZiAiJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCIgJiYgJGFzX3Rlc3RfeCAiJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCI7IH07IHRoZW4KLSAgICBhY19jdl9wcm9nX2FjX2N0X09CSkRVTVA9Im9iamR1bXAiCi0gICAgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogZm91bmQgJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCIgPiY1Ci0gICAgYnJlYWsgMgotICBmaQotZG9uZQotICBkb25lCi1JRlM9JGFzX3NhdmVfSUZTCi0KLWZpCi1maQotYWNfY3RfT0JKRFVNUD0kYWNfY3ZfcHJvZ19hY19jdF9PQkpEVU1QCi1pZiB0ZXN0IC1uICIkYWNfY3RfT0JKRFVNUCI7IHRoZW4KLSAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRhY19jdF9PQkpEVU1QIiA+JjUKLSRhc19lY2hvICIkYWNfY3RfT0JKRFVNUCIgPiY2OyB9Ci1lbHNlCi0gIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiBubyIgPiY1Ci0kYXNfZWNobyAibm8iID4mNjsgfQotZmkKLQotICBpZiB0ZXN0ICJ4JGFjX2N0X09CSkRVTVAiID0geDsgdGhlbgotICAgIE9CSkRVTVA9ImZhbHNlIgotICBlbHNlCi0gICAgY2FzZSAkY3Jvc3NfY29tcGlsaW5nOiRhY190b29sX3dhcm5lZCBpbgoteWVzOikKLXsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogV0FSTklORzogdXNpbmcgY3Jvc3MgdG9vbHMgbm90IHByZWZpeGVkIHdpdGggaG9zdCB0cmlwbGV0IiA+JjUKLSRhc19lY2hvICIkYXNfbWU6IFdBUk5JTkc6IHVzaW5nIGNyb3NzIHRvb2xzIG5vdCBwcmVmaXhlZCB3aXRoIGhvc3QgdHJpcGxldCIgPiYyO30KLWFjX3Rvb2xfd2FybmVkPXllcyA7OwotZXNhYwotICAgIE9CSkRVTVA9JGFjX2N0X09CSkRVTVAKLSAgZmkKLWVsc2UKLSAgT0JKRFVNUD0iJGFjX2N2X3Byb2dfT0JKRFVNUCIKLWZpCi0KLSAgOzsKLWVzYWMKLQotdGVzdCAteiAiJEFTIiAmJiBBUz1hcwotCi0KLQotCi0KLXRlc3QgLXogIiRETExUT09MIiAmJiBETExUT09MPWRsbHRvb2wKLQotCi0KLQotCi10ZXN0IC16ICIkT0JKRFVNUCIgJiYgT0JKRFVNUD1vYmpkdW1wCi0KLQotCi0KLQotCi0KLWNhc2UgYHB3ZGAgaW4KLSAgKlwgKiB8ICpcCSopCi0gICAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBXQVJOSU5HOiBMaWJ0b29sIGRvZXMgbm90IGNvcGUgd2VsbCB3aXRoIHdoaXRlc3BhY2UgaW4gXGBwd2RcYCIgPiY1Ci0kYXNfZWNobyAiJGFzX21lOiBXQVJOSU5HOiBMaWJ0b29sIGRvZXMgbm90IGNvcGUgd2VsbCB3aXRoIHdoaXRlc3BhY2UgaW4gXGBwd2RcYCIgPiYyO30gOzsKLWVzYWMKLQotCi0KLW1hY3JvX3ZlcnNpb249JzIuNCcKLW1hY3JvX3JldmlzaW9uPScxLjMyOTMnCi0KLQotCi0KLQotCi0KLQotCi0KLQotCi0KLWx0bWFpbj0iJGFjX2F1eF9kaXIvbHRtYWluLnNoIgotCi0jIEJhY2tzbGFzaGlmeSBtZXRhY2hhcmFjdGVycyB0aGF0IGFyZSBzdGlsbCBhY3RpdmUgd2l0aGluCi0jIGRvdWJsZS1xdW90ZWQgc3RyaW5ncy4KLXNlZF9xdW90ZV9zdWJzdD0ncy9cKFsiYCRcXF1cKS9cXFwxL2cnCi0KLSMgU2FtZSBhcyBhYm92ZSwgYnV0IGRvIG5vdCBxdW90ZSB2YXJpYWJsZSByZWZlcmVuY2VzLgotZG91YmxlX3F1b3RlX3N1YnN0PSdzL1woWyJgXFxdXCkvXFxcMS9nJwotCi0jIFNlZCBzdWJzdGl0dXRpb24gdG8gZGVsYXkgZXhwYW5zaW9uIG9mIGFuIGVzY2FwZWQgc2hlbGwgdmFyaWFibGUgaW4gYQotIyBkb3VibGVfcXVvdGVfc3Vic3QnZWQgc3RyaW5nLgotZGVsYXlfdmFyaWFibGVfc3Vic3Q9J3MvXFxcXFxcXFxcXFwkL1xcXFxcXCQvZycKLQotIyBTZWQgc3Vic3RpdHV0aW9uIHRvIGRlbGF5IGV4cGFuc2lvbiBvZiBhbiBlc2NhcGVkIHNpbmdsZSBxdW90ZS4KLWRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdD0ncy8nXCcnLydcJ1xcXFxcXFwnXCcnL2cnCi0KLSMgU2VkIHN1YnN0aXR1dGlvbiB0byBhdm9pZCBhY2NpZGVudGFsIGdsb2JiaW5nIGluIGV2YWxlZCBleHByZXNzaW9ucwotbm9fZ2xvYl9zdWJzdD0ncy9cKi9cXFwqL2cnCi0KLUVDSE89J1xcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFwnCi1FQ0hPPSRFQ0hPJEVDSE8kRUNITyRFQ0hPJEVDSE8KLUVDSE89JEVDSE8kRUNITyRFQ0hPJEVDSE8kRUNITyRFQ0hPCi0KLXsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgaG93IHRvIHByaW50IHN0cmluZ3MiID4mNQotJGFzX2VjaG9fbiAiY2hlY2tpbmcgaG93IHRvIHByaW50IHN0cmluZ3MuLi4gIiA+JjY7IH0KLSMgVGVzdCBwcmludCBmaXJzdCwgYmVjYXVzZSBpdCB3aWxsIGJlIGEgYnVpbHRpbiBpZiBwcmVzZW50LgotaWYgdGVzdCAiWGAoIHByaW50IC1yIC0tIC1uICkgMj4vZGV2L251bGxgIiA9IFgtbiAmJiBcCi0gICB0ZXN0ICJYYHByaW50IC1yIC0tICRFQ0hPIDI+L2Rldi9udWxsYCIgPSAiWCRFQ0hPIjsgdGhlbgotICBFQ0hPPSdwcmludCAtciAtLScKLWVsaWYgdGVzdCAiWGBwcmludGYgJXMgJEVDSE8gMj4vZGV2L251bGxgIiA9ICJYJEVDSE8iOyB0aGVuCi0gIEVDSE89J3ByaW50ZiAlc1xuJwotZWxzZQotICAjIFVzZSB0aGlzIGZ1bmN0aW9uIGFzIGEgZmFsbGJhY2sgdGhhdCBhbHdheXMgd29ya3MuCi0gIGZ1bmNfZmFsbGJhY2tfZWNobyAoKQotICB7Ci0gICAgZXZhbCAnY2F0IDw8X0xURUNIT19FT0YKLSQxCi1fTFRFQ0hPX0VPRicKLSAgfQotICBFQ0hPPSdmdW5jX2ZhbGxiYWNrX2VjaG8nCi1maQotCi0jIGZ1bmNfZWNob19hbGwgYXJnLi4uCi0jIEludm9rZSAkRUNITyB3aXRoIGFsbCBhcmdzLCBzcGFjZS1zZXBhcmF0ZWQuCi1mdW5jX2VjaG9fYWxsICgpCi17Ci0gICAgJEVDSE8gIiIKLX0KLQotY2FzZSAiJEVDSE8iIGluCi0gIHByaW50ZiopIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiBwcmludGYiID4mNQotJGFzX2VjaG8gInByaW50ZiIgPiY2OyB9IDs7Ci0gIHByaW50KikgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6IHByaW50IC1yIiA+JjUKLSRhc19lY2hvICJwcmludCAtciIgPiY2OyB9IDs7Ci0gICopIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiBjYXQiID4mNQotJGFzX2VjaG8gImNhdCIgPiY2OyB9IDs7Ci1lc2FjCi0KLQotCi0KLQotCi0KLQotCi0KLQotCi0KLQoteyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBmb3IgYSBzZWQgdGhhdCBkb2VzIG5vdCB0cnVuY2F0ZSBvdXRwdXQiID4mNQotJGFzX2VjaG9fbiAiY2hlY2tpbmcgZm9yIGEgc2VkIHRoYXQgZG9lcyBub3QgdHJ1bmNhdGUgb3V0cHV0Li4uICIgPiY2OyB9Ci1pZiAke2FjX2N2X3BhdGhfU0VEKzp9IGZhbHNlOyB0aGVuIDoKLSAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKLWVsc2UKLSAgICAgICAgICAgIGFjX3NjcmlwdD1zL2FhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhL2JiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYi8KLSAgICAgZm9yIGFjX2kgaW4gMSAyIDMgNCA1IDYgNzsgZG8KLSAgICAgICBhY19zY3JpcHQ9IiRhY19zY3JpcHQkYXNfbmwkYWNfc2NyaXB0IgotICAgICBkb25lCi0gICAgIGVjaG8gIiRhY19zY3JpcHQiIDI+L2Rldi9udWxsIHwgc2VkIDk5cSA+Y29uZnRlc3Quc2VkCi0gICAgIHsgYWNfc2NyaXB0PTsgdW5zZXQgYWNfc2NyaXB0O30KLSAgICAgaWYgdGVzdCAteiAiJFNFRCI7IHRoZW4KLSAgYWNfcGF0aF9TRURfZm91bmQ9ZmFsc2UKLSAgIyBMb29wIHRocm91Z2ggdGhlIHVzZXIncyBwYXRoIGFuZCB0ZXN0IGZvciBlYWNoIG9mIFBST0dOQU1FLUxJU1QKLSAgYXNfc2F2ZV9JRlM9JElGUzsgSUZTPSRQQVRIX1NFUEFSQVRPUgotZm9yIGFzX2RpciBpbiAkUEFUSAotZG8KLSAgSUZTPSRhc19zYXZlX0lGUwotICB0ZXN0IC16ICIkYXNfZGlyIiAmJiBhc19kaXI9LgotICAgIGZvciBhY19wcm9nIGluIHNlZCBnc2VkOyBkbwotICAgIGZvciBhY19leGVjX2V4dCBpbiAnJyAkYWNfZXhlY3V0YWJsZV9leHRlbnNpb25zOyBkbwotICAgICAgYWNfcGF0aF9TRUQ9IiRhc19kaXIvJGFjX3Byb2ckYWNfZXhlY19leHQiCi0gICAgICB7IHRlc3QgLWYgIiRhY19wYXRoX1NFRCIgJiYgJGFzX3Rlc3RfeCAiJGFjX3BhdGhfU0VEIjsgfSB8fCBjb250aW51ZQotIyBDaGVjayBmb3IgR05VIGFjX3BhdGhfU0VEIGFuZCBzZWxlY3QgaXQgaWYgaXQgaXMgZm91bmQuCi0gICMgQ2hlY2sgZm9yIEdOVSAkYWNfcGF0aF9TRUQKLWNhc2UgYCIkYWNfcGF0aF9TRUQiIC0tdmVyc2lvbiAyPiYxYCBpbgotKkdOVSopCi0gIGFjX2N2X3BhdGhfU0VEPSIkYWNfcGF0aF9TRUQiIGFjX3BhdGhfU0VEX2ZvdW5kPTo7OwotKikKLSAgYWNfY291bnQ9MAotICAkYXNfZWNob19uIDAxMjM0NTY3ODkgPiJjb25mdGVzdC5pbiIKLSAgd2hpbGUgOgotICBkbwotICAgIGNhdCAiY29uZnRlc3QuaW4iICJjb25mdGVzdC5pbiIgPiJjb25mdGVzdC50bXAiCi0gICAgbXYgImNvbmZ0ZXN0LnRtcCIgImNvbmZ0ZXN0LmluIgotICAgIGNwICJjb25mdGVzdC5pbiIgImNvbmZ0ZXN0Lm5sIgotICAgICRhc19lY2hvICcnID4+ICJjb25mdGVzdC5ubCIKLSAgICAiJGFjX3BhdGhfU0VEIiAtZiBjb25mdGVzdC5zZWQgPCAiY29uZnRlc3QubmwiID4iY29uZnRlc3Qub3V0IiAyPi9kZXYvbnVsbCB8fCBicmVhawotICAgIGRpZmYgImNvbmZ0ZXN0Lm91dCIgImNvbmZ0ZXN0Lm5sIiA+L2Rldi9udWxsIDI+JjEgfHwgYnJlYWsKLSAgICBhc19mbl9hcml0aCAkYWNfY291bnQgKyAxICYmIGFjX2NvdW50PSRhc192YWwKLSAgICBpZiB0ZXN0ICRhY19jb3VudCAtZ3QgJHthY19wYXRoX1NFRF9tYXgtMH07IHRoZW4KLSAgICAgICMgQmVzdCBvbmUgc28gZmFyLCBzYXZlIGl0IGJ1dCBrZWVwIGxvb2tpbmcgZm9yIGEgYmV0dGVyIG9uZQotICAgICAgYWNfY3ZfcGF0aF9TRUQ9IiRhY19wYXRoX1NFRCIKLSAgICAgIGFjX3BhdGhfU0VEX21heD0kYWNfY291bnQKLSAgICBmaQotICAgICMgMTAqKDJeMTApIGNoYXJzIGFzIGlucHV0IHNlZW1zIG1vcmUgdGhhbiBlbm91Z2gKLSAgICB0ZXN0ICRhY19jb3VudCAtZ3QgMTAgJiYgYnJlYWsKLSAgZG9uZQotICBybSAtZiBjb25mdGVzdC5pbiBjb25mdGVzdC50bXAgY29uZnRlc3QubmwgY29uZnRlc3Qub3V0OzsKLWVzYWMKLQotICAgICAgJGFjX3BhdGhfU0VEX2ZvdW5kICYmIGJyZWFrIDMKLSAgICBkb25lCi0gIGRvbmUKLSAgZG9uZQotSUZTPSRhc19zYXZlX0lGUwotICBpZiB0ZXN0IC16ICIkYWNfY3ZfcGF0aF9TRUQiOyB0aGVuCi0gICAgYXNfZm5fZXJyb3IgJD8gIm5vIGFjY2VwdGFibGUgc2VkIGNvdWxkIGJlIGZvdW5kIGluIFwkUEFUSCIgIiRMSU5FTk8iIDUKLSAgZmkKLWVsc2UKLSAgYWNfY3ZfcGF0aF9TRUQ9JFNFRAotZmkKLQotZmkKLXsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkYWNfY3ZfcGF0aF9TRUQiID4mNQotJGFzX2VjaG8gIiRhY19jdl9wYXRoX1NFRCIgPiY2OyB9Ci0gU0VEPSIkYWNfY3ZfcGF0aF9TRUQiCi0gIHJtIC1mIGNvbmZ0ZXN0LnNlZAotCi10ZXN0IC16ICIkU0VEIiAmJiBTRUQ9c2VkCi1Yc2VkPSIkU0VEIC1lIDFzL15YLy8iCi0KLQotCi0KLQotCi0KLQotCi0KLQoteyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBmb3IgZmdyZXAiID4mNQotJGFzX2VjaG9fbiAiY2hlY2tpbmcgZm9yIGZncmVwLi4uICIgPiY2OyB9Ci1pZiAke2FjX2N2X3BhdGhfRkdSRVArOn0gZmFsc2U7IHRoZW4gOgotICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgotZWxzZQotICBpZiBlY2hvICdhYipjJyB8ICRHUkVQIC1GICdhYipjJyA+L2Rldi9udWxsIDI+JjEKLSAgIHRoZW4gYWNfY3ZfcGF0aF9GR1JFUD0iJEdSRVAgLUYiCi0gICBlbHNlCi0gICAgIGlmIHRlc3QgLXogIiRGR1JFUCI7IHRoZW4KLSAgYWNfcGF0aF9GR1JFUF9mb3VuZD1mYWxzZQotICAjIExvb3AgdGhyb3VnaCB0aGUgdXNlcidzIHBhdGggYW5kIHRlc3QgZm9yIGVhY2ggb2YgUFJPR05BTUUtTElTVAotICBhc19zYXZlX0lGUz0kSUZTOyBJRlM9JFBBVEhfU0VQQVJBVE9SCi1mb3IgYXNfZGlyIGluICRQQVRIJFBBVEhfU0VQQVJBVE9SL3Vzci94cGc0L2JpbgotZG8KLSAgSUZTPSRhc19zYXZlX0lGUwotICB0ZXN0IC16ICIkYXNfZGlyIiAmJiBhc19kaXI9LgotICAgIGZvciBhY19wcm9nIGluIGZncmVwOyBkbwotICAgIGZvciBhY19leGVjX2V4dCBpbiAnJyAkYWNfZXhlY3V0YWJsZV9leHRlbnNpb25zOyBkbwotICAgICAgYWNfcGF0aF9GR1JFUD0iJGFzX2Rpci8kYWNfcHJvZyRhY19leGVjX2V4dCIKLSAgICAgIHsgdGVzdCAtZiAiJGFjX3BhdGhfRkdSRVAiICYmICRhc190ZXN0X3ggIiRhY19wYXRoX0ZHUkVQIjsgfSB8fCBjb250aW51ZQotIyBDaGVjayBmb3IgR05VIGFjX3BhdGhfRkdSRVAgYW5kIHNlbGVjdCBpdCBpZiBpdCBpcyBmb3VuZC4KLSAgIyBDaGVjayBmb3IgR05VICRhY19wYXRoX0ZHUkVQCi1jYXNlIGAiJGFjX3BhdGhfRkdSRVAiIC0tdmVyc2lvbiAyPiYxYCBpbgotKkdOVSopCi0gIGFjX2N2X3BhdGhfRkdSRVA9IiRhY19wYXRoX0ZHUkVQIiBhY19wYXRoX0ZHUkVQX2ZvdW5kPTo7OwotKikKLSAgYWNfY291bnQ9MAotICAkYXNfZWNob19uIDAxMjM0NTY3ODkgPiJjb25mdGVzdC5pbiIKLSAgd2hpbGUgOgotICBkbwotICAgIGNhdCAiY29uZnRlc3QuaW4iICJjb25mdGVzdC5pbiIgPiJjb25mdGVzdC50bXAiCi0gICAgbXYgImNvbmZ0ZXN0LnRtcCIgImNvbmZ0ZXN0LmluIgotICAgIGNwICJjb25mdGVzdC5pbiIgImNvbmZ0ZXN0Lm5sIgotICAgICRhc19lY2hvICdGR1JFUCcgPj4gImNvbmZ0ZXN0Lm5sIgotICAgICIkYWNfcGF0aF9GR1JFUCIgRkdSRVAgPCAiY29uZnRlc3QubmwiID4iY29uZnRlc3Qub3V0IiAyPi9kZXYvbnVsbCB8fCBicmVhawotICAgIGRpZmYgImNvbmZ0ZXN0Lm91dCIgImNvbmZ0ZXN0Lm5sIiA+L2Rldi9udWxsIDI+JjEgfHwgYnJlYWsKLSAgICBhc19mbl9hcml0aCAkYWNfY291bnQgKyAxICYmIGFjX2NvdW50PSRhc192YWwKLSAgICBpZiB0ZXN0ICRhY19jb3VudCAtZ3QgJHthY19wYXRoX0ZHUkVQX21heC0wfTsgdGhlbgotICAgICAgIyBCZXN0IG9uZSBzbyBmYXIsIHNhdmUgaXQgYnV0IGtlZXAgbG9va2luZyBmb3IgYSBiZXR0ZXIgb25lCi0gICAgICBhY19jdl9wYXRoX0ZHUkVQPSIkYWNfcGF0aF9GR1JFUCIKLSAgICAgIGFjX3BhdGhfRkdSRVBfbWF4PSRhY19jb3VudAotICAgIGZpCi0gICAgIyAxMCooMl4xMCkgY2hhcnMgYXMgaW5wdXQgc2VlbXMgbW9yZSB0aGFuIGVub3VnaAotICAgIHRlc3QgJGFjX2NvdW50IC1ndCAxMCAmJiBicmVhawotICBkb25lCi0gIHJtIC1mIGNvbmZ0ZXN0LmluIGNvbmZ0ZXN0LnRtcCBjb25mdGVzdC5ubCBjb25mdGVzdC5vdXQ7OwotZXNhYwotCi0gICAgICAkYWNfcGF0aF9GR1JFUF9mb3VuZCAmJiBicmVhayAzCi0gICAgZG9uZQotICBkb25lCi0gIGRvbmUKLUlGUz0kYXNfc2F2ZV9JRlMKLSAgaWYgdGVzdCAteiAiJGFjX2N2X3BhdGhfRkdSRVAiOyB0aGVuCi0gICAgYXNfZm5fZXJyb3IgJD8gIm5vIGFjY2VwdGFibGUgZmdyZXAgY291bGQgYmUgZm91bmQgaW4gJFBBVEgkUEFUSF9TRVBBUkFUT1IvdXNyL3hwZzQvYmluIiAiJExJTkVOTyIgNQotICBmaQotZWxzZQotICBhY19jdl9wYXRoX0ZHUkVQPSRGR1JFUAotZmkKLQotICAgZmkKLWZpCi17ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJGFjX2N2X3BhdGhfRkdSRVAiID4mNQotJGFzX2VjaG8gIiRhY19jdl9wYXRoX0ZHUkVQIiA+JjY7IH0KLSBGR1JFUD0iJGFjX2N2X3BhdGhfRkdSRVAiCi0KLQotdGVzdCAteiAiJEdSRVAiICYmIEdSRVA9Z3JlcAotCi0KLQotCi0KLQotCi0KLQotCi0KLQotCi0KLQotCi0KLQotCi0jIENoZWNrIHdoZXRoZXIgLS13aXRoLWdudS1sZCB3YXMgZ2l2ZW4uCi1pZiB0ZXN0ICIke3dpdGhfZ251X2xkK3NldH0iID0gc2V0OyB0aGVuIDoKLSAgd2l0aHZhbD0kd2l0aF9nbnVfbGQ7IHRlc3QgIiR3aXRodmFsIiA9IG5vIHx8IHdpdGhfZ251X2xkPXllcwotZWxzZQotICB3aXRoX2dudV9sZD1ubwotZmkKLQotYWNfcHJvZz1sZAotaWYgdGVzdCAiJEdDQyIgPSB5ZXM7IHRoZW4KLSAgIyBDaGVjayBpZiBnY2MgLXByaW50LXByb2ctbmFtZT1sZCBnaXZlcyBhIHBhdGguCi0gIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgZm9yIGxkIHVzZWQgYnkgJENDIiA+JjUKLSRhc19lY2hvX24gImNoZWNraW5nIGZvciBsZCB1c2VkIGJ5ICRDQy4uLiAiID4mNjsgfQotICBjYXNlICRob3N0IGluCi0gICotKi1taW5ndyopCi0gICAgIyBnY2MgbGVhdmVzIGEgdHJhaWxpbmcgY2FycmlhZ2UgcmV0dXJuIHdoaWNoIHVwc2V0cyBtaW5ndwotICAgIGFjX3Byb2c9YCgkQ0MgLXByaW50LXByb2ctbmFtZT1sZCkgMj4mNSB8IHRyIC1kICdcMDE1J2AgOzsKLSAgKikKLSAgICBhY19wcm9nPWAoJENDIC1wcmludC1wcm9nLW5hbWU9bGQpIDI+JjVgIDs7Ci0gIGVzYWMKLSAgY2FzZSAkYWNfcHJvZyBpbgotICAgICMgQWNjZXB0IGFic29sdXRlIHBhdGhzLgotICAgIFtcXC9dKiB8ID86W1xcL10qKQotICAgICAgcmVfZGlyZWx0PScvW14vXVteL10qL1wuXC4vJwotICAgICAgIyBDYW5vbmljYWxpemUgdGhlIHBhdGhuYW1lIG9mIGxkCi0gICAgICBhY19wcm9nPWAkRUNITyAiJGFjX3Byb2cifCAkU0VEICdzJVxcXFwlLyVnJ2AKLSAgICAgIHdoaWxlICRFQ0hPICIkYWNfcHJvZyIgfCAkR1JFUCAiJHJlX2RpcmVsdCIgPiAvZGV2L251bGwgMj4mMTsgZG8KLQlhY19wcm9nPWAkRUNITyAkYWNfcHJvZ3wgJFNFRCAicyUkcmVfZGlyZWx0JS8lImAKLSAgICAgIGRvbmUKLSAgICAgIHRlc3QgLXogIiRMRCIgJiYgTEQ9IiRhY19wcm9nIgotICAgICAgOzsKLSAgIiIpCi0gICAgIyBJZiBpdCBmYWlscywgdGhlbiBwcmV0ZW5kIHdlIGFyZW4ndCB1c2luZyBHQ0MuCi0gICAgYWNfcHJvZz1sZAotICAgIDs7Ci0gICopCi0gICAgIyBJZiBpdCBpcyByZWxhdGl2ZSwgdGhlbiBzZWFyY2ggZm9yIHRoZSBmaXJzdCBsZCBpbiBQQVRILgotICAgIHdpdGhfZ251X2xkPXVua25vd24KLSAgICA7OwotICBlc2FjCi1lbGlmIHRlc3QgIiR3aXRoX2dudV9sZCIgPSB5ZXM7IHRoZW4KLSAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBmb3IgR05VIGxkIiA+JjUKLSRhc19lY2hvX24gImNoZWNraW5nIGZvciBHTlUgbGQuLi4gIiA+JjY7IH0KLWVsc2UKLSAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBmb3Igbm9uLUdOVSBsZCIgPiY1Ci0kYXNfZWNob19uICJjaGVja2luZyBmb3Igbm9uLUdOVSBsZC4uLiAiID4mNjsgfQotZmkKLWlmICR7bHRfY3ZfcGF0aF9MRCs6fSBmYWxzZTsgdGhlbiA6Ci0gICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2Ci1lbHNlCi0gIGlmIHRlc3QgLXogIiRMRCI7IHRoZW4KLSAgbHRfc2F2ZV9pZnM9IiRJRlMiOyBJRlM9JFBBVEhfU0VQQVJBVE9SCi0gIGZvciBhY19kaXIgaW4gJFBBVEg7IGRvCi0gICAgSUZTPSIkbHRfc2F2ZV9pZnMiCi0gICAgdGVzdCAteiAiJGFjX2RpciIgJiYgYWNfZGlyPS4KLSAgICBpZiB0ZXN0IC1mICIkYWNfZGlyLyRhY19wcm9nIiB8fCB0ZXN0IC1mICIkYWNfZGlyLyRhY19wcm9nJGFjX2V4ZWV4dCI7IHRoZW4KLSAgICAgIGx0X2N2X3BhdGhfTEQ9IiRhY19kaXIvJGFjX3Byb2ciCi0gICAgICAjIENoZWNrIHRvIHNlZSBpZiB0aGUgcHJvZ3JhbSBpcyBHTlUgbGQuICBJJ2QgcmF0aGVyIHVzZSAtLXZlcnNpb24sCi0gICAgICAjIGJ1dCBhcHBhcmVudGx5IHNvbWUgdmFyaWFudHMgb2YgR05VIGxkIG9ubHkgYWNjZXB0IC12LgotICAgICAgIyBCcmVhayBvbmx5IGlmIGl0IHdhcyB0aGUgR05VL25vbi1HTlUgbGQgdGhhdCB3ZSBwcmVmZXIuCi0gICAgICBjYXNlIGAiJGx0X2N2X3BhdGhfTEQiIC12IDI+JjEgPC9kZXYvbnVsbGAgaW4KLSAgICAgICpHTlUqIHwgKid3aXRoIEJGRCcqKQotCXRlc3QgIiR3aXRoX2dudV9sZCIgIT0gbm8gJiYgYnJlYWsKLQk7OwotICAgICAgKikKLQl0ZXN0ICIkd2l0aF9nbnVfbGQiICE9IHllcyAmJiBicmVhawotCTs7Ci0gICAgICBlc2FjCi0gICAgZmkKLSAgZG9uZQotICBJRlM9IiRsdF9zYXZlX2lmcyIKLWVsc2UKLSAgbHRfY3ZfcGF0aF9MRD0iJExEIiAjIExldCB0aGUgdXNlciBvdmVycmlkZSB0aGUgdGVzdCB3aXRoIGEgcGF0aC4KLWZpCi1maQotCi1MRD0iJGx0X2N2X3BhdGhfTEQiCi1pZiB0ZXN0IC1uICIkTEQiOyB0aGVuCi0gIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkTEQiID4mNQotJGFzX2VjaG8gIiRMRCIgPiY2OyB9Ci1lbHNlCi0gIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiBubyIgPiY1Ci0kYXNfZWNobyAibm8iID4mNjsgfQotZmkKLXRlc3QgLXogIiRMRCIgJiYgYXNfZm5fZXJyb3IgJD8gIm5vIGFjY2VwdGFibGUgbGQgZm91bmQgaW4gXCRQQVRIIiAiJExJTkVOTyIgNQoteyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBpZiB0aGUgbGlua2VyICgkTEQpIGlzIEdOVSBsZCIgPiY1Ci0kYXNfZWNob19uICJjaGVja2luZyBpZiB0aGUgbGlua2VyICgkTEQpIGlzIEdOVSBsZC4uLiAiID4mNjsgfQotaWYgJHtsdF9jdl9wcm9nX2dudV9sZCs6fSBmYWxzZTsgdGhlbiA6Ci0gICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2Ci1lbHNlCi0gICMgSSdkIHJhdGhlciB1c2UgLS12ZXJzaW9uIGhlcmUsIGJ1dCBhcHBhcmVudGx5IHNvbWUgR05VIGxkcyBvbmx5IGFjY2VwdCAtdi4KLWNhc2UgYCRMRCAtdiAyPiYxIDwvZGV2L251bGxgIGluCi0qR05VKiB8ICond2l0aCBCRkQnKikKLSAgbHRfY3ZfcHJvZ19nbnVfbGQ9eWVzCi0gIDs7Ci0qKQotICBsdF9jdl9wcm9nX2dudV9sZD1ubwotICA7OwotZXNhYwotZmkKLXsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkbHRfY3ZfcHJvZ19nbnVfbGQiID4mNQotJGFzX2VjaG8gIiRsdF9jdl9wcm9nX2dudV9sZCIgPiY2OyB9Ci13aXRoX2dudV9sZD0kbHRfY3ZfcHJvZ19nbnVfbGQKLQotCi0KLQotCi0KLQotCi0KLXsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgZm9yIEJTRC0gb3IgTVMtY29tcGF0aWJsZSBuYW1lIGxpc3RlciAobm0pIiA+JjUKLSRhc19lY2hvX24gImNoZWNraW5nIGZvciBCU0QtIG9yIE1TLWNvbXBhdGlibGUgbmFtZSBsaXN0ZXIgKG5tKS4uLiAiID4mNjsgfQotaWYgJHtsdF9jdl9wYXRoX05NKzp9IGZhbHNlOyB0aGVuIDoKLSAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKLWVsc2UKLSAgaWYgdGVzdCAtbiAiJE5NIjsgdGhlbgotICAjIExldCB0aGUgdXNlciBvdmVycmlkZSB0aGUgdGVzdC4KLSAgbHRfY3ZfcGF0aF9OTT0iJE5NIgotZWxzZQotICBsdF9ubV90b19jaGVjaz0iJHthY190b29sX3ByZWZpeH1ubSIKLSAgaWYgdGVzdCAtbiAiJGFjX3Rvb2xfcHJlZml4IiAmJiB0ZXN0ICIkYnVpbGQiID0gIiRob3N0IjsgdGhlbgotICAgIGx0X25tX3RvX2NoZWNrPSIkbHRfbm1fdG9fY2hlY2sgbm0iCi0gIGZpCi0gIGZvciBsdF90bXBfbm0gaW4gJGx0X25tX3RvX2NoZWNrOyBkbwotICAgIGx0X3NhdmVfaWZzPSIkSUZTIjsgSUZTPSRQQVRIX1NFUEFSQVRPUgotICAgIGZvciBhY19kaXIgaW4gJFBBVEggL3Vzci9jY3MvYmluL2VsZiAvdXNyL2Njcy9iaW4gL3Vzci91Y2IgL2JpbjsgZG8KLSAgICAgIElGUz0iJGx0X3NhdmVfaWZzIgotICAgICAgdGVzdCAteiAiJGFjX2RpciIgJiYgYWNfZGlyPS4KLSAgICAgIHRtcF9ubT0iJGFjX2Rpci8kbHRfdG1wX25tIgotICAgICAgaWYgdGVzdCAtZiAiJHRtcF9ubSIgfHwgdGVzdCAtZiAiJHRtcF9ubSRhY19leGVleHQiIDsgdGhlbgotCSMgQ2hlY2sgdG8gc2VlIGlmIHRoZSBubSBhY2NlcHRzIGEgQlNELWNvbXBhdCBmbGFnLgotCSMgQWRkaW5nIHRoZSBgc2VkIDFxJyBwcmV2ZW50cyBmYWxzZSBwb3NpdGl2ZXMgb24gSFAtVVgsIHdoaWNoIHNheXM6Ci0JIyAgIG5tOiB1bmtub3duIG9wdGlvbiAiQiIgaWdub3JlZAotCSMgVHJ1NjQncyBubSBjb21wbGFpbnMgdGhhdCAvZGV2L251bGwgaXMgYW4gaW52YWxpZCBvYmplY3QgZmlsZQotCWNhc2UgYCIkdG1wX25tIiAtQiAvZGV2L251bGwgMj4mMSB8IHNlZCAnMXEnYCBpbgotCSovZGV2L251bGwqIHwgKidJbnZhbGlkIGZpbGUgb3Igb2JqZWN0IHR5cGUnKikKLQkgIGx0X2N2X3BhdGhfTk09IiR0bXBfbm0gLUIiCi0JICBicmVhawotCSAgOzsKLQkqKQotCSAgY2FzZSBgIiR0bXBfbm0iIC1wIC9kZXYvbnVsbCAyPiYxIHwgc2VkICcxcSdgIGluCi0JICAqL2Rldi9udWxsKikKLQkgICAgbHRfY3ZfcGF0aF9OTT0iJHRtcF9ubSAtcCIKLQkgICAgYnJlYWsKLQkgICAgOzsKLQkgICopCi0JICAgIGx0X2N2X3BhdGhfTk09JHtsdF9jdl9wYXRoX05NPSIkdG1wX25tIn0gIyBrZWVwIHRoZSBmaXJzdCBtYXRjaCwgYnV0Ci0JICAgIGNvbnRpbnVlICMgc28gdGhhdCB3ZSBjYW4gdHJ5IHRvIGZpbmQgb25lIHRoYXQgc3VwcG9ydHMgQlNEIGZsYWdzCi0JICAgIDs7Ci0JICBlc2FjCi0JICA7OwotCWVzYWMKLSAgICAgIGZpCi0gICAgZG9uZQotICAgIElGUz0iJGx0X3NhdmVfaWZzIgotICBkb25lCi0gIDogJHtsdF9jdl9wYXRoX05NPW5vfQotZmkKLWZpCi17ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJGx0X2N2X3BhdGhfTk0iID4mNQotJGFzX2VjaG8gIiRsdF9jdl9wYXRoX05NIiA+JjY7IH0KLWlmIHRlc3QgIiRsdF9jdl9wYXRoX05NIiAhPSAibm8iOyB0aGVuCi0gIE5NPSIkbHRfY3ZfcGF0aF9OTSIKLWVsc2UKLSAgIyBEaWRuJ3QgZmluZCBhbnkgQlNEIGNvbXBhdGlibGUgbmFtZSBsaXN0ZXIsIGxvb2sgZm9yIGR1bXBiaW4uCi0gIGlmIHRlc3QgLW4gIiREVU1QQklOIjsgdGhlbiA6Ci0gICAgIyBMZXQgdGhlIHVzZXIgb3ZlcnJpZGUgdGhlIHRlc3QuCi0gIGVsc2UKLSAgICBpZiB0ZXN0IC1uICIkYWNfdG9vbF9wcmVmaXgiOyB0aGVuCi0gIGZvciBhY19wcm9nIGluIGR1bXBiaW4gImxpbmsgLWR1bXAiCi0gIGRvCi0gICAgIyBFeHRyYWN0IHRoZSBmaXJzdCB3b3JkIG9mICIkYWNfdG9vbF9wcmVmaXgkYWNfcHJvZyIsIHNvIGl0IGNhbiBiZSBhIHByb2dyYW0gbmFtZSB3aXRoIGFyZ3MuCi1zZXQgZHVtbXkgJGFjX3Rvb2xfcHJlZml4JGFjX3Byb2c7IGFjX3dvcmQ9JDIKLXsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgZm9yICRhY193b3JkIiA+JjUKLSRhc19lY2hvX24gImNoZWNraW5nIGZvciAkYWNfd29yZC4uLiAiID4mNjsgfQotaWYgJHthY19jdl9wcm9nX0RVTVBCSU4rOn0gZmFsc2U7IHRoZW4gOgotICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgotZWxzZQotICBpZiB0ZXN0IC1uICIkRFVNUEJJTiI7IHRoZW4KLSAgYWNfY3ZfcHJvZ19EVU1QQklOPSIkRFVNUEJJTiIgIyBMZXQgdGhlIHVzZXIgb3ZlcnJpZGUgdGhlIHRlc3QuCi1lbHNlCi1hc19zYXZlX0lGUz0kSUZTOyBJRlM9JFBBVEhfU0VQQVJBVE9SCi1mb3IgYXNfZGlyIGluICRQQVRICi1kbwotICBJRlM9JGFzX3NhdmVfSUZTCi0gIHRlc3QgLXogIiRhc19kaXIiICYmIGFzX2Rpcj0uCi0gICAgZm9yIGFjX2V4ZWNfZXh0IGluICcnICRhY19leGVjdXRhYmxlX2V4dGVuc2lvbnM7IGRvCi0gIGlmIHsgdGVzdCAtZiAiJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCIgJiYgJGFzX3Rlc3RfeCAiJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCI7IH07IHRoZW4KLSAgICBhY19jdl9wcm9nX0RVTVBCSU49IiRhY190b29sX3ByZWZpeCRhY19wcm9nIgotICAgICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGZvdW5kICRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiID4mNQotICAgIGJyZWFrIDIKLSAgZmkKLWRvbmUKLSAgZG9uZQotSUZTPSRhc19zYXZlX0lGUwotCi1maQotZmkKLURVTVBCSU49JGFjX2N2X3Byb2dfRFVNUEJJTgotaWYgdGVzdCAtbiAiJERVTVBCSU4iOyB0aGVuCi0gIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkRFVNUEJJTiIgPiY1Ci0kYXNfZWNobyAiJERVTVBCSU4iID4mNjsgfQotZWxzZQotICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogbm8iID4mNQotJGFzX2VjaG8gIm5vIiA+JjY7IH0KLWZpCi0KLQotICAgIHRlc3QgLW4gIiREVU1QQklOIiAmJiBicmVhawotICBkb25lCi1maQotaWYgdGVzdCAteiAiJERVTVBCSU4iOyB0aGVuCi0gIGFjX2N0X0RVTVBCSU49JERVTVBCSU4KLSAgZm9yIGFjX3Byb2cgaW4gZHVtcGJpbiAibGluayAtZHVtcCIKLWRvCi0gICMgRXh0cmFjdCB0aGUgZmlyc3Qgd29yZCBvZiAiJGFjX3Byb2ciLCBzbyBpdCBjYW4gYmUgYSBwcm9ncmFtIG5hbWUgd2l0aCBhcmdzLgotc2V0IGR1bW15ICRhY19wcm9nOyBhY193b3JkPSQyCi17ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGZvciAkYWNfd29yZCIgPiY1Ci0kYXNfZWNob19uICJjaGVja2luZyBmb3IgJGFjX3dvcmQuLi4gIiA+JjY7IH0KLWlmICR7YWNfY3ZfcHJvZ19hY19jdF9EVU1QQklOKzp9IGZhbHNlOyB0aGVuIDoKLSAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKLWVsc2UKLSAgaWYgdGVzdCAtbiAiJGFjX2N0X0RVTVBCSU4iOyB0aGVuCi0gIGFjX2N2X3Byb2dfYWNfY3RfRFVNUEJJTj0iJGFjX2N0X0RVTVBCSU4iICMgTGV0IHRoZSB1c2VyIG92ZXJyaWRlIHRoZSB0ZXN0LgotZWxzZQotYXNfc2F2ZV9JRlM9JElGUzsgSUZTPSRQQVRIX1NFUEFSQVRPUgotZm9yIGFzX2RpciBpbiAkUEFUSAotZG8KLSAgSUZTPSRhc19zYXZlX0lGUwotICB0ZXN0IC16ICIkYXNfZGlyIiAmJiBhc19kaXI9LgotICAgIGZvciBhY19leGVjX2V4dCBpbiAnJyAkYWNfZXhlY3V0YWJsZV9leHRlbnNpb25zOyBkbwotICBpZiB7IHRlc3QgLWYgIiRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiICYmICRhc190ZXN0X3ggIiRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiOyB9OyB0aGVuCi0gICAgYWNfY3ZfcHJvZ19hY19jdF9EVU1QQklOPSIkYWNfcHJvZyIKLSAgICAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBmb3VuZCAkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IiA+JjUKLSAgICBicmVhayAyCi0gIGZpCi1kb25lCi0gIGRvbmUKLUlGUz0kYXNfc2F2ZV9JRlMKLQotZmkKLWZpCi1hY19jdF9EVU1QQklOPSRhY19jdl9wcm9nX2FjX2N0X0RVTVBCSU4KLWlmIHRlc3QgLW4gIiRhY19jdF9EVU1QQklOIjsgdGhlbgotICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJGFjX2N0X0RVTVBCSU4iID4mNQotJGFzX2VjaG8gIiRhY19jdF9EVU1QQklOIiA+JjY7IH0KLWVsc2UKLSAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6IG5vIiA+JjUKLSRhc19lY2hvICJubyIgPiY2OyB9Ci1maQotCi0KLSAgdGVzdCAtbiAiJGFjX2N0X0RVTVBCSU4iICYmIGJyZWFrCi1kb25lCi0KLSAgaWYgdGVzdCAieCRhY19jdF9EVU1QQklOIiA9IHg7IHRoZW4KLSAgICBEVU1QQklOPSI6IgotICBlbHNlCi0gICAgY2FzZSAkY3Jvc3NfY29tcGlsaW5nOiRhY190b29sX3dhcm5lZCBpbgoteWVzOikKLXsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogV0FSTklORzogdXNpbmcgY3Jvc3MgdG9vbHMgbm90IHByZWZpeGVkIHdpdGggaG9zdCB0cmlwbGV0IiA+JjUKLSRhc19lY2hvICIkYXNfbWU6IFdBUk5JTkc6IHVzaW5nIGNyb3NzIHRvb2xzIG5vdCBwcmVmaXhlZCB3aXRoIGhvc3QgdHJpcGxldCIgPiYyO30KLWFjX3Rvb2xfd2FybmVkPXllcyA7OwotZXNhYwotICAgIERVTVBCSU49JGFjX2N0X0RVTVBCSU4KLSAgZmkKLWZpCi0KLSAgICBjYXNlIGAkRFVNUEJJTiAtc3ltYm9scyAvZGV2L251bGwgMj4mMSB8IHNlZCAnMXEnYCBpbgotICAgICpDT0ZGKikKLSAgICAgIERVTVBCSU49IiREVU1QQklOIC1zeW1ib2xzIgotICAgICAgOzsKLSAgICAqKQotICAgICAgRFVNUEJJTj06Ci0gICAgICA7OwotICAgIGVzYWMKLSAgZmkKLQotICBpZiB0ZXN0ICIkRFVNUEJJTiIgIT0gIjoiOyB0aGVuCi0gICAgTk09IiREVU1QQklOIgotICBmaQotZmkKLXRlc3QgLXogIiROTSIgJiYgTk09bm0KLQotCi0KLQotCi0KLXsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgdGhlIG5hbWUgbGlzdGVyICgkTk0pIGludGVyZmFjZSIgPiY1Ci0kYXNfZWNob19uICJjaGVja2luZyB0aGUgbmFtZSBsaXN0ZXIgKCROTSkgaW50ZXJmYWNlLi4uICIgPiY2OyB9Ci1pZiAke2x0X2N2X25tX2ludGVyZmFjZSs6fSBmYWxzZTsgdGhlbiA6Ci0gICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2Ci1lbHNlCi0gIGx0X2N2X25tX2ludGVyZmFjZT0iQlNEIG5tIgotICBlY2hvICJpbnQgc29tZV92YXJpYWJsZSA9IDA7IiA+IGNvbmZ0ZXN0LiRhY19leHQKLSAgKGV2YWwgZWNobyAiXCJcJGFzX21lOiRMSU5FTk86ICRhY19jb21waWxlXCIiID4mNSkKLSAgKGV2YWwgIiRhY19jb21waWxlIiAyPmNvbmZ0ZXN0LmVycikKLSAgY2F0IGNvbmZ0ZXN0LmVyciA+JjUKLSAgKGV2YWwgZWNobyAiXCJcJGFzX21lOiRMSU5FTk86ICROTSBcXFwiY29uZnRlc3QuJGFjX29iamV4dFxcXCJcIiIgPiY1KQotICAoZXZhbCAiJE5NIFwiY29uZnRlc3QuJGFjX29iamV4dFwiIiAyPmNvbmZ0ZXN0LmVyciA+IGNvbmZ0ZXN0Lm91dCkKLSAgY2F0IGNvbmZ0ZXN0LmVyciA+JjUKLSAgKGV2YWwgZWNobyAiXCJcJGFzX21lOiRMSU5FTk86IG91dHB1dFwiIiA+JjUpCi0gIGNhdCBjb25mdGVzdC5vdXQgPiY1Ci0gIGlmICRHUkVQICdFeHRlcm5hbC4qc29tZV92YXJpYWJsZScgY29uZnRlc3Qub3V0ID4gL2Rldi9udWxsOyB0aGVuCi0gICAgbHRfY3Zfbm1faW50ZXJmYWNlPSJNUyBkdW1wYmluIgotICBmaQotICBybSAtZiBjb25mdGVzdCoKLWZpCi17ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJGx0X2N2X25tX2ludGVyZmFjZSIgPiY1Ci0kYXNfZWNobyAiJGx0X2N2X25tX2ludGVyZmFjZSIgPiY2OyB9Ci0KLSMgZmluZCB0aGUgbWF4aW11bSBsZW5ndGggb2YgY29tbWFuZCBsaW5lIGFyZ3VtZW50cwoteyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyB0aGUgbWF4aW11bSBsZW5ndGggb2YgY29tbWFuZCBsaW5lIGFyZ3VtZW50cyIgPiY1Ci0kYXNfZWNob19uICJjaGVja2luZyB0aGUgbWF4aW11bSBsZW5ndGggb2YgY29tbWFuZCBsaW5lIGFyZ3VtZW50cy4uLiAiID4mNjsgfQotaWYgJHtsdF9jdl9zeXNfbWF4X2NtZF9sZW4rOn0gZmFsc2U7IHRoZW4gOgotICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgotZWxzZQotICAgIGk9MAotICB0ZXN0c3RyaW5nPSJBQkNEIgotCi0gIGNhc2UgJGJ1aWxkX29zIGluCi0gIG1zZG9zZGpncHAqKQotICAgICMgT24gREpHUFAsIHRoaXMgdGVzdCBjYW4gYmxvdyB1cCBwcmV0dHkgYmFkbHkgZHVlIHRvIHByb2JsZW1zIGluIGxpYmMKLSAgICAjIChhbnkgc2luZ2xlIGFyZ3VtZW50IGV4Y2VlZGluZyAyMDAwIGJ5dGVzIGNhdXNlcyBhIGJ1ZmZlciBvdmVycnVuCi0gICAgIyBkdXJpbmcgZ2xvYiBleHBhbnNpb24pLiAgRXZlbiBpZiBpdCB3ZXJlIGZpeGVkLCB0aGUgcmVzdWx0IG9mIHRoaXMKLSAgICAjIGNoZWNrIHdvdWxkIGJlIGxhcmdlciB0aGFuIGl0IHNob3VsZCBiZS4KLSAgICBsdF9jdl9zeXNfbWF4X2NtZF9sZW49MTIyODg7ICAgICMgMTJLIGlzIGFib3V0IHJpZ2h0Ci0gICAgOzsKLQotICBnbnUqKQotICAgICMgVW5kZXIgR05VIEh1cmQsIHRoaXMgdGVzdCBpcyBub3QgcmVxdWlyZWQgYmVjYXVzZSB0aGVyZSBpcwotICAgICMgbm8gbGltaXQgdG8gdGhlIGxlbmd0aCBvZiBjb21tYW5kIGxpbmUgYXJndW1lbnRzLgotICAgICMgTGlidG9vbCB3aWxsIGludGVycHJldCAtMSBhcyBubyBsaW1pdCB3aGF0c29ldmVyCi0gICAgbHRfY3Zfc3lzX21heF9jbWRfbGVuPS0xOwotICAgIDs7Ci0KLSAgY3lnd2luKiB8IG1pbmd3KiB8IGNlZ2NjKikKLSAgICAjIE9uIFdpbjl4L01FLCB0aGlzIHRlc3QgYmxvd3MgdXAgLS0gaXQgc3VjY2VlZHMsIGJ1dCB0YWtlcwotICAgICMgYWJvdXQgNSBtaW51dGVzIGFzIHRoZSB0ZXN0c3RyaW5nIGdyb3dzIGV4cG9uZW50aWFsbHkuCi0gICAgIyBXb3JzZSwgc2luY2UgOXgvTUUgYXJlIG5vdCBwcmUtZW1wdGl2ZWx5IG11bHRpdGFza2luZywKLSAgICAjIHlvdSBlbmQgdXAgd2l0aCBhICJmcm96ZW4iIGNvbXB1dGVyLCBldmVuIHRob3VnaCB3aXRoIHBhdGllbmNlCi0gICAgIyB0aGUgdGVzdCBldmVudHVhbGx5IHN1Y2NlZWRzICh3aXRoIGEgbWF4IGxpbmUgbGVuZ3RoIG9mIDI1NmspLgotICAgICMgSW5zdGVhZCwgbGV0J3MganVzdCBwdW50OiB1c2UgdGhlIG1pbmltdW0gbGluZWxlbmd0aCByZXBvcnRlZCBieQotICAgICMgYWxsIG9mIHRoZSBzdXBwb3J0ZWQgcGxhdGZvcm1zOiA4MTkyIChvbiBOVC8ySy9YUCkuCi0gICAgbHRfY3Zfc3lzX21heF9jbWRfbGVuPTgxOTI7Ci0gICAgOzsKLQotICBtaW50KikKLSAgICAjIE9uIE1pTlQgdGhpcyBjYW4gdGFrZSBhIGxvbmcgdGltZSBhbmQgcnVuIG91dCBvZiBtZW1vcnkuCi0gICAgbHRfY3Zfc3lzX21heF9jbWRfbGVuPTgxOTI7Ci0gICAgOzsKLQotICBhbWlnYW9zKikKLSAgICAjIE9uIEFtaWdhT1Mgd2l0aCBwZGtzaCwgdGhpcyB0ZXN0IHRha2VzIGhvdXJzLCBsaXRlcmFsbHkuCi0gICAgIyBTbyB3ZSBqdXN0IHB1bnQgYW5kIHVzZSBhIG1pbmltdW0gbGluZSBsZW5ndGggb2YgODE5Mi4KLSAgICBsdF9jdl9zeXNfbWF4X2NtZF9sZW49ODE5MjsKLSAgICA7OwotCi0gIG5ldGJzZCogfCBmcmVlYnNkKiB8IG9wZW5ic2QqIHwgZGFyd2luKiB8IGRyYWdvbmZseSopCi0gICAgIyBUaGlzIGhhcyBiZWVuIGFyb3VuZCBzaW5jZSAzODZCU0QsIGF0IGxlYXN0LiAgTGlrZWx5IGZ1cnRoZXIuCi0gICAgaWYgdGVzdCAteCAvc2Jpbi9zeXNjdGw7IHRoZW4KLSAgICAgIGx0X2N2X3N5c19tYXhfY21kX2xlbj1gL3NiaW4vc3lzY3RsIC1uIGtlcm4uYXJnbWF4YAotICAgIGVsaWYgdGVzdCAteCAvdXNyL3NiaW4vc3lzY3RsOyB0aGVuCi0gICAgICBsdF9jdl9zeXNfbWF4X2NtZF9sZW49YC91c3Ivc2Jpbi9zeXNjdGwgLW4ga2Vybi5hcmdtYXhgCi0gICAgZWxzZQotICAgICAgbHRfY3Zfc3lzX21heF9jbWRfbGVuPTY1NTM2CSMgdXNhYmxlIGRlZmF1bHQgZm9yIGFsbCBCU0RzCi0gICAgZmkKLSAgICAjIEFuZCBhZGQgYSBzYWZldHkgem9uZQotICAgIGx0X2N2X3N5c19tYXhfY21kX2xlbj1gZXhwciAkbHRfY3Zfc3lzX21heF9jbWRfbGVuIFwvIDRgCi0gICAgbHRfY3Zfc3lzX21heF9jbWRfbGVuPWBleHByICRsdF9jdl9zeXNfbWF4X2NtZF9sZW4gXCogM2AKLSAgICA7OwotCi0gIGludGVyaXgqKQotICAgICMgV2Uga25vdyB0aGUgdmFsdWUgMjYyMTQ0IGFuZCBoYXJkY29kZSBpdCB3aXRoIGEgc2FmZXR5IHpvbmUgKGxpa2UgQlNEKQotICAgIGx0X2N2X3N5c19tYXhfY21kX2xlbj0xOTY2MDgKLSAgICA7OwotCi0gIG9zZiopCi0gICAgIyBEci4gSGFucyBFa2tlaGFyZCBQbGVzc2VyIHJlcG9ydHMgc2VlaW5nIGEga2VybmVsIHBhbmljIHJ1bm5pbmcgY29uZmlndXJlCi0gICAgIyBkdWUgdG8gdGhpcyB0ZXN0IHdoZW4gZXhlY19kaXNhYmxlX2FyZ19saW1pdCBpcyAxIG9uIFRydTY0LiBJdCBpcyBub3QKLSAgICAjIG5pY2UgdG8gY2F1c2Uga2VybmVsIHBhbmljcyBzbyBsZXRzIGF2b2lkIHRoZSBsb29wIGJlbG93LgotICAgICMgRmlyc3Qgc2V0IGEgcmVhc29uYWJsZSBkZWZhdWx0LgotICAgIGx0X2N2X3N5c19tYXhfY21kX2xlbj0xNjM4NAotICAgICMKLSAgICBpZiB0ZXN0IC14IC9zYmluL3N5c2NvbmZpZzsgdGhlbgotICAgICAgY2FzZSBgL3NiaW4vc3lzY29uZmlnIC1xIHByb2MgZXhlY19kaXNhYmxlX2FyZ19saW1pdGAgaW4KLSAgICAgICAgKjEqKSBsdF9jdl9zeXNfbWF4X2NtZF9sZW49LTEgOzsKLSAgICAgIGVzYWMKLSAgICBmaQotICAgIDs7Ci0gIHNjbzMuMnY1KikKLSAgICBsdF9jdl9zeXNfbWF4X2NtZF9sZW49MTAyNDAwCi0gICAgOzsKLSAgc3lzdjUqIHwgc2NvNXY2KiB8IHN5c3Y0LjJ1dzIqKQotICAgIGthcmdtYXg9YGdyZXAgQVJHX01BWCAvZXRjL2NvbmYvY2YuZC9zdHVuZSAyPi9kZXYvbnVsbGAKLSAgICBpZiB0ZXN0IC1uICIka2FyZ21heCI7IHRoZW4KLSAgICAgIGx0X2N2X3N5c19tYXhfY21kX2xlbj1gZWNobyAka2FyZ21heCB8IHNlZCAncy8uKlsJIF0vLydgCi0gICAgZWxzZQotICAgICAgbHRfY3Zfc3lzX21heF9jbWRfbGVuPTMyNzY4Ci0gICAgZmkKLSAgICA7OwotICAqKQotICAgIGx0X2N2X3N5c19tYXhfY21kX2xlbj1gKGdldGNvbmYgQVJHX01BWCkgMj4gL2Rldi9udWxsYAotICAgIGlmIHRlc3QgLW4gIiRsdF9jdl9zeXNfbWF4X2NtZF9sZW4iOyB0aGVuCi0gICAgICBsdF9jdl9zeXNfbWF4X2NtZF9sZW49YGV4cHIgJGx0X2N2X3N5c19tYXhfY21kX2xlbiBcLyA0YAotICAgICAgbHRfY3Zfc3lzX21heF9jbWRfbGVuPWBleHByICRsdF9jdl9zeXNfbWF4X2NtZF9sZW4gXCogM2AKLSAgICBlbHNlCi0gICAgICAjIE1ha2UgdGVzdHN0cmluZyBhIGxpdHRsZSBiaWdnZXIgYmVmb3JlIHdlIGRvIGFueXRoaW5nIHdpdGggaXQuCi0gICAgICAjIGEgMUsgc3RyaW5nIHNob3VsZCBiZSBhIHJlYXNvbmFibGUgc3RhcnQuCi0gICAgICBmb3IgaSBpbiAxIDIgMyA0IDUgNiA3IDggOyBkbwotICAgICAgICB0ZXN0c3RyaW5nPSR0ZXN0c3RyaW5nJHRlc3RzdHJpbmcKLSAgICAgIGRvbmUKLSAgICAgIFNIRUxMPSR7U0hFTEwtJHtDT05GSUdfU0hFTEwtL2Jpbi9zaH19Ci0gICAgICAjIElmIHRlc3QgaXMgbm90IGEgc2hlbGwgYnVpbHQtaW4sIHdlJ2xsIHByb2JhYmx5IGVuZCB1cCBjb21wdXRpbmcgYQotICAgICAgIyBtYXhpbXVtIGxlbmd0aCB0aGF0IGlzIG9ubHkgaGFsZiBvZiB0aGUgYWN0dWFsIG1heGltdW0gbGVuZ3RoLCBidXQKLSAgICAgICMgd2UgY2FuJ3QgdGVsbC4KLSAgICAgIHdoaWxlIHsgdGVzdCAiWCJgZnVuY19mYWxsYmFja19lY2hvICIkdGVzdHN0cmluZyR0ZXN0c3RyaW5nIiAyPi9kZXYvbnVsbGAgXAotCSAgICAgICAgID0gIlgkdGVzdHN0cmluZyR0ZXN0c3RyaW5nIjsgfSA+L2Rldi9udWxsIDI+JjEgJiYKLQkgICAgICB0ZXN0ICRpICE9IDE3ICMgMS8yIE1CIHNob3VsZCBiZSBlbm91Z2gKLSAgICAgIGRvCi0gICAgICAgIGk9YGV4cHIgJGkgKyAxYAotICAgICAgICB0ZXN0c3RyaW5nPSR0ZXN0c3RyaW5nJHRlc3RzdHJpbmcKLSAgICAgIGRvbmUKLSAgICAgICMgT25seSBjaGVjayB0aGUgc3RyaW5nIGxlbmd0aCBvdXRzaWRlIHRoZSBsb29wLgotICAgICAgbHRfY3Zfc3lzX21heF9jbWRfbGVuPWBleHByICJYJHRlc3RzdHJpbmciIDogIi4qIiAyPiYxYAotICAgICAgdGVzdHN0cmluZz0KLSAgICAgICMgQWRkIGEgc2lnbmlmaWNhbnQgc2FmZXR5IGZhY3RvciBiZWNhdXNlIEMrKyBjb21waWxlcnMgY2FuIHRhY2sgb24KLSAgICAgICMgbWFzc2l2ZSBhbW91bnRzIG9mIGFkZGl0aW9uYWwgYXJndW1lbnRzIGJlZm9yZSBwYXNzaW5nIHRoZW0gdG8gdGhlCi0gICAgICAjIGxpbmtlci4gIEl0IGFwcGVhcnMgYXMgdGhvdWdoIDEvMiBpcyBhIHVzYWJsZSB2YWx1ZS4KLSAgICAgIGx0X2N2X3N5c19tYXhfY21kX2xlbj1gZXhwciAkbHRfY3Zfc3lzX21heF9jbWRfbGVuIFwvIDJgCi0gICAgZmkKLSAgICA7OwotICBlc2FjCi0KLWZpCi0KLWlmIHRlc3QgLW4gJGx0X2N2X3N5c19tYXhfY21kX2xlbiA7IHRoZW4KLSAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRsdF9jdl9zeXNfbWF4X2NtZF9sZW4iID4mNQotJGFzX2VjaG8gIiRsdF9jdl9zeXNfbWF4X2NtZF9sZW4iID4mNjsgfQotZWxzZQotICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogbm9uZSIgPiY1Ci0kYXNfZWNobyAibm9uZSIgPiY2OyB9Ci1maQotbWF4X2NtZF9sZW49JGx0X2N2X3N5c19tYXhfY21kX2xlbgotCi0KLQotCi0KLQotOiAke0NQPSJjcCAtZiJ9Ci06ICR7TVY9Im12IC1mIn0KLTogJHtSTT0icm0gLWYifQotCi17ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIHdoZXRoZXIgdGhlIHNoZWxsIHVuZGVyc3RhbmRzIHNvbWUgWFNJIGNvbnN0cnVjdHMiID4mNQotJGFzX2VjaG9fbiAiY2hlY2tpbmcgd2hldGhlciB0aGUgc2hlbGwgdW5kZXJzdGFuZHMgc29tZSBYU0kgY29uc3RydWN0cy4uLiAiID4mNjsgfQotIyBUcnkgc29tZSBYU0kgZmVhdHVyZXMKLXhzaV9zaGVsbD1ubwotKCBfbHRfZHVtbXk9ImEvYi9jIgotICB0ZXN0ICIke19sdF9kdW1teSMjKi99LCR7X2x0X2R1bW15JS8qfSwke19sdF9kdW1teSM/P30iJHtfbHRfZHVtbXklIiRfbHRfZHVtbXkifSwgXAotICAgICAgPSBjLGEvYixiL2MsIFwKLSAgICAmJiBldmFsICd0ZXN0ICQoKCAxICsgMSApKSAtZXEgMiBcCi0gICAgJiYgdGVzdCAiJHsjX2x0X2R1bW15fSIgLWVxIDUnICkgPi9kZXYvbnVsbCAyPiYxIFwKLSAgJiYgeHNpX3NoZWxsPXllcwoteyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICR4c2lfc2hlbGwiID4mNQotJGFzX2VjaG8gIiR4c2lfc2hlbGwiID4mNjsgfQotCi0KLXsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgd2hldGhlciB0aGUgc2hlbGwgdW5kZXJzdGFuZHMgXCIrPVwiIiA+JjUKLSRhc19lY2hvX24gImNoZWNraW5nIHdoZXRoZXIgdGhlIHNoZWxsIHVuZGVyc3RhbmRzIFwiKz1cIi4uLiAiID4mNjsgfQotbHRfc2hlbGxfYXBwZW5kPW5vCi0oIGZvbz1iYXI7IHNldCBmb28gYmF6OyBldmFsICIkMSs9XCQyIiAmJiB0ZXN0ICIkZm9vIiA9IGJhcmJheiApIFwKLSAgICA+L2Rldi9udWxsIDI+JjEgXAotICAmJiBsdF9zaGVsbF9hcHBlbmQ9eWVzCi17ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJGx0X3NoZWxsX2FwcGVuZCIgPiY1Ci0kYXNfZWNobyAiJGx0X3NoZWxsX2FwcGVuZCIgPiY2OyB9Ci0KLQotaWYgKCAoTUFJTD02MDsgdW5zZXQgTUFJTCkgfHwgZXhpdCkgPi9kZXYvbnVsbCAyPiYxOyB0aGVuCi0gIGx0X3Vuc2V0PXVuc2V0Ci1lbHNlCi0gIGx0X3Vuc2V0PWZhbHNlCi1maQotCi0KLQotCi0KLSMgdGVzdCBFQkNESUMgb3IgQVNDSUkKLWNhc2UgYGVjaG8gWHx0ciBYICdcMTAxJ2AgaW4KLSBBKSAjIEFTQ0lJIGJhc2VkIHN5c3RlbQotICAgICMgXG4gaXMgbm90IGludGVycHJldGVkIGNvcnJlY3RseSBieSBTb2xhcmlzIDggL3Vzci91Y2IvdHIKLSAgbHRfU1AyTkw9J3RyIFwwNDAgXDAxMicKLSAgbHRfTkwyU1A9J3RyIFwwMTVcMDEyIFwwNDBcMDQwJwotICA7OwotICopICMgRUJDRElDIGJhc2VkIHN5c3RlbQotICBsdF9TUDJOTD0ndHIgXDEwMCBcbicKLSAgbHRfTkwyU1A9J3RyIFxyXG4gXDEwMFwxMDAnCi0gIDs7Ci1lc2FjCi0KLQotCi0KLQotCi0KLQotCi17ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGhvdyB0byBjb252ZXJ0ICRidWlsZCBmaWxlIG5hbWVzIHRvICRob3N0IGZvcm1hdCIgPiY1Ci0kYXNfZWNob19uICJjaGVja2luZyBob3cgdG8gY29udmVydCAkYnVpbGQgZmlsZSBuYW1lcyB0byAkaG9zdCBmb3JtYXQuLi4gIiA+JjY7IH0KLWlmICR7bHRfY3ZfdG9faG9zdF9maWxlX2NtZCs6fSBmYWxzZTsgdGhlbiA6Ci0gICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2Ci1lbHNlCi0gIGNhc2UgJGhvc3QgaW4KLSAgKi0qLW1pbmd3KiApCi0gICAgY2FzZSAkYnVpbGQgaW4KLSAgICAgICotKi1taW5ndyogKSAjIGFjdHVhbGx5IG1zeXMKLSAgICAgICAgbHRfY3ZfdG9faG9zdF9maWxlX2NtZD1mdW5jX2NvbnZlcnRfZmlsZV9tc3lzX3RvX3czMgotICAgICAgICA7OwotICAgICAgKi0qLWN5Z3dpbiogKQotICAgICAgICBsdF9jdl90b19ob3N0X2ZpbGVfY21kPWZ1bmNfY29udmVydF9maWxlX2N5Z3dpbl90b193MzIKLSAgICAgICAgOzsKLSAgICAgICogKSAjIG90aGVyd2lzZSwgYXNzdW1lICpuaXgKLSAgICAgICAgbHRfY3ZfdG9faG9zdF9maWxlX2NtZD1mdW5jX2NvbnZlcnRfZmlsZV9uaXhfdG9fdzMyCi0gICAgICAgIDs7Ci0gICAgZXNhYwotICAgIDs7Ci0gICotKi1jeWd3aW4qICkKLSAgICBjYXNlICRidWlsZCBpbgotICAgICAgKi0qLW1pbmd3KiApICMgYWN0dWFsbHkgbXN5cwotICAgICAgICBsdF9jdl90b19ob3N0X2ZpbGVfY21kPWZ1bmNfY29udmVydF9maWxlX21zeXNfdG9fY3lnd2luCi0gICAgICAgIDs7Ci0gICAgICAqLSotY3lnd2luKiApCi0gICAgICAgIGx0X2N2X3RvX2hvc3RfZmlsZV9jbWQ9ZnVuY19jb252ZXJ0X2ZpbGVfbm9vcAotICAgICAgICA7OwotICAgICAgKiApICMgb3RoZXJ3aXNlLCBhc3N1bWUgKm5peAotICAgICAgICBsdF9jdl90b19ob3N0X2ZpbGVfY21kPWZ1bmNfY29udmVydF9maWxlX25peF90b19jeWd3aW4KLSAgICAgICAgOzsKLSAgICBlc2FjCi0gICAgOzsKLSAgKiApICMgdW5oYW5kbGVkIGhvc3RzIChhbmQgIm5vcm1hbCIgbmF0aXZlIGJ1aWxkcykKLSAgICBsdF9jdl90b19ob3N0X2ZpbGVfY21kPWZ1bmNfY29udmVydF9maWxlX25vb3AKLSAgICA7OwotZXNhYwotCi1maQotCi10b19ob3N0X2ZpbGVfY21kPSRsdF9jdl90b19ob3N0X2ZpbGVfY21kCi17ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJGx0X2N2X3RvX2hvc3RfZmlsZV9jbWQiID4mNQotJGFzX2VjaG8gIiRsdF9jdl90b19ob3N0X2ZpbGVfY21kIiA+JjY7IH0KLQotCi0KLQotCi17ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGhvdyB0byBjb252ZXJ0ICRidWlsZCBmaWxlIG5hbWVzIHRvIHRvb2xjaGFpbiBmb3JtYXQiID4mNQotJGFzX2VjaG9fbiAiY2hlY2tpbmcgaG93IHRvIGNvbnZlcnQgJGJ1aWxkIGZpbGUgbmFtZXMgdG8gdG9vbGNoYWluIGZvcm1hdC4uLiAiID4mNjsgfQotaWYgJHtsdF9jdl90b190b29sX2ZpbGVfY21kKzp9IGZhbHNlOyB0aGVuIDoKLSAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKLWVsc2UKLSAgI2Fzc3VtZSBvcmRpbmFyeSBjcm9zcyB0b29scywgb3IgbmF0aXZlIGJ1aWxkLgotbHRfY3ZfdG9fdG9vbF9maWxlX2NtZD1mdW5jX2NvbnZlcnRfZmlsZV9ub29wCi1jYXNlICRob3N0IGluCi0gICotKi1taW5ndyogKQotICAgIGNhc2UgJGJ1aWxkIGluCi0gICAgICAqLSotbWluZ3cqICkgIyBhY3R1YWxseSBtc3lzCi0gICAgICAgIGx0X2N2X3RvX3Rvb2xfZmlsZV9jbWQ9ZnVuY19jb252ZXJ0X2ZpbGVfbXN5c190b193MzIKLSAgICAgICAgOzsKLSAgICBlc2FjCi0gICAgOzsKLWVzYWMKLQotZmkKLQotdG9fdG9vbF9maWxlX2NtZD0kbHRfY3ZfdG9fdG9vbF9maWxlX2NtZAoteyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRsdF9jdl90b190b29sX2ZpbGVfY21kIiA+JjUKLSRhc19lY2hvICIkbHRfY3ZfdG9fdG9vbF9maWxlX2NtZCIgPiY2OyB9Ci0KLQotCi0KLQoteyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBmb3IgJExEIG9wdGlvbiB0byByZWxvYWQgb2JqZWN0IGZpbGVzIiA+JjUKLSRhc19lY2hvX24gImNoZWNraW5nIGZvciAkTEQgb3B0aW9uIHRvIHJlbG9hZCBvYmplY3QgZmlsZXMuLi4gIiA+JjY7IH0KLWlmICR7bHRfY3ZfbGRfcmVsb2FkX2ZsYWcrOn0gZmFsc2U7IHRoZW4gOgotICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgotZWxzZQotICBsdF9jdl9sZF9yZWxvYWRfZmxhZz0nLXInCi1maQoteyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRsdF9jdl9sZF9yZWxvYWRfZmxhZyIgPiY1Ci0kYXNfZWNobyAiJGx0X2N2X2xkX3JlbG9hZF9mbGFnIiA+JjY7IH0KLXJlbG9hZF9mbGFnPSRsdF9jdl9sZF9yZWxvYWRfZmxhZwotY2FzZSAkcmVsb2FkX2ZsYWcgaW4KLSIiIHwgIiAiKikgOzsKLSopIHJlbG9hZF9mbGFnPSIgJHJlbG9hZF9mbGFnIiA7OwotZXNhYwotcmVsb2FkX2NtZHM9JyRMRCRyZWxvYWRfZmxhZyAtbyAkb3V0cHV0JHJlbG9hZF9vYmpzJwotY2FzZSAkaG9zdF9vcyBpbgotICBjeWd3aW4qIHwgbWluZ3cqIHwgcHczMiogfCBjZWdjYyopCi0gICAgaWYgdGVzdCAiJEdDQyIgIT0geWVzOyB0aGVuCi0gICAgICByZWxvYWRfY21kcz1mYWxzZQotICAgIGZpCi0gICAgOzsKLSAgZGFyd2luKikKLSAgICBpZiB0ZXN0ICIkR0NDIiA9IHllczsgdGhlbgotICAgICAgcmVsb2FkX2NtZHM9JyRMVENDICRMVENGTEFHUyAtbm9zdGRsaWIgJHt3bH0tciAtbyAkb3V0cHV0JHJlbG9hZF9vYmpzJwotICAgIGVsc2UKLSAgICAgIHJlbG9hZF9jbWRzPSckTEQkcmVsb2FkX2ZsYWcgLW8gJG91dHB1dCRyZWxvYWRfb2JqcycKLSAgICBmaQotICAgIDs7Ci1lc2FjCi0KLQotCi0KLQotCi0KLQotCi1pZiB0ZXN0IC1uICIkYWNfdG9vbF9wcmVmaXgiOyB0aGVuCi0gICMgRXh0cmFjdCB0aGUgZmlyc3Qgd29yZCBvZiAiJHthY190b29sX3ByZWZpeH1vYmpkdW1wIiwgc28gaXQgY2FuIGJlIGEgcHJvZ3JhbSBuYW1lIHdpdGggYXJncy4KLXNldCBkdW1teSAke2FjX3Rvb2xfcHJlZml4fW9iamR1bXA7IGFjX3dvcmQ9JDIKLXsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgZm9yICRhY193b3JkIiA+JjUKLSRhc19lY2hvX24gImNoZWNraW5nIGZvciAkYWNfd29yZC4uLiAiID4mNjsgfQotaWYgJHthY19jdl9wcm9nX09CSkRVTVArOn0gZmFsc2U7IHRoZW4gOgotICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgotZWxzZQotICBpZiB0ZXN0IC1uICIkT0JKRFVNUCI7IHRoZW4KLSAgYWNfY3ZfcHJvZ19PQkpEVU1QPSIkT0JKRFVNUCIgIyBMZXQgdGhlIHVzZXIgb3ZlcnJpZGUgdGhlIHRlc3QuCi1lbHNlCi1hc19zYXZlX0lGUz0kSUZTOyBJRlM9JFBBVEhfU0VQQVJBVE9SCi1mb3IgYXNfZGlyIGluICRQQVRICi1kbwotICBJRlM9JGFzX3NhdmVfSUZTCi0gIHRlc3QgLXogIiRhc19kaXIiICYmIGFzX2Rpcj0uCi0gICAgZm9yIGFjX2V4ZWNfZXh0IGluICcnICRhY19leGVjdXRhYmxlX2V4dGVuc2lvbnM7IGRvCi0gIGlmIHsgdGVzdCAtZiAiJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCIgJiYgJGFzX3Rlc3RfeCAiJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCI7IH07IHRoZW4KLSAgICBhY19jdl9wcm9nX09CSkRVTVA9IiR7YWNfdG9vbF9wcmVmaXh9b2JqZHVtcCIKLSAgICAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBmb3VuZCAkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IiA+JjUKLSAgICBicmVhayAyCi0gIGZpCi1kb25lCi0gIGRvbmUKLUlGUz0kYXNfc2F2ZV9JRlMKLQotZmkKLWZpCi1PQkpEVU1QPSRhY19jdl9wcm9nX09CSkRVTVAKLWlmIHRlc3QgLW4gIiRPQkpEVU1QIjsgdGhlbgotICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJE9CSkRVTVAiID4mNQotJGFzX2VjaG8gIiRPQkpEVU1QIiA+JjY7IH0KLWVsc2UKLSAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6IG5vIiA+JjUKLSRhc19lY2hvICJubyIgPiY2OyB9Ci1maQotCi0KLWZpCi1pZiB0ZXN0IC16ICIkYWNfY3ZfcHJvZ19PQkpEVU1QIjsgdGhlbgotICBhY19jdF9PQkpEVU1QPSRPQkpEVU1QCi0gICMgRXh0cmFjdCB0aGUgZmlyc3Qgd29yZCBvZiAib2JqZHVtcCIsIHNvIGl0IGNhbiBiZSBhIHByb2dyYW0gbmFtZSB3aXRoIGFyZ3MuCi1zZXQgZHVtbXkgb2JqZHVtcDsgYWNfd29yZD0kMgoteyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBmb3IgJGFjX3dvcmQiID4mNQotJGFzX2VjaG9fbiAiY2hlY2tpbmcgZm9yICRhY193b3JkLi4uICIgPiY2OyB9Ci1pZiAke2FjX2N2X3Byb2dfYWNfY3RfT0JKRFVNUCs6fSBmYWxzZTsgdGhlbiA6Ci0gICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2Ci1lbHNlCi0gIGlmIHRlc3QgLW4gIiRhY19jdF9PQkpEVU1QIjsgdGhlbgotICBhY19jdl9wcm9nX2FjX2N0X09CSkRVTVA9IiRhY19jdF9PQkpEVU1QIiAjIExldCB0aGUgdXNlciBvdmVycmlkZSB0aGUgdGVzdC4KLWVsc2UKLWFzX3NhdmVfSUZTPSRJRlM7IElGUz0kUEFUSF9TRVBBUkFUT1IKLWZvciBhc19kaXIgaW4gJFBBVEgKLWRvCi0gIElGUz0kYXNfc2F2ZV9JRlMKLSAgdGVzdCAteiAiJGFzX2RpciIgJiYgYXNfZGlyPS4KLSAgICBmb3IgYWNfZXhlY19leHQgaW4gJycgJGFjX2V4ZWN1dGFibGVfZXh0ZW5zaW9uczsgZG8KLSAgaWYgeyB0ZXN0IC1mICIkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IiAmJiAkYXNfdGVzdF94ICIkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IjsgfTsgdGhlbgotICAgIGFjX2N2X3Byb2dfYWNfY3RfT0JKRFVNUD0ib2JqZHVtcCIKLSAgICAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBmb3VuZCAkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IiA+JjUKLSAgICBicmVhayAyCi0gIGZpCi1kb25lCi0gIGRvbmUKLUlGUz0kYXNfc2F2ZV9JRlMKLQotZmkKLWZpCi1hY19jdF9PQkpEVU1QPSRhY19jdl9wcm9nX2FjX2N0X09CSkRVTVAKLWlmIHRlc3QgLW4gIiRhY19jdF9PQkpEVU1QIjsgdGhlbgotICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJGFjX2N0X09CSkRVTVAiID4mNQotJGFzX2VjaG8gIiRhY19jdF9PQkpEVU1QIiA+JjY7IH0KLWVsc2UKLSAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6IG5vIiA+JjUKLSRhc19lY2hvICJubyIgPiY2OyB9Ci1maQotCi0gIGlmIHRlc3QgIngkYWNfY3RfT0JKRFVNUCIgPSB4OyB0aGVuCi0gICAgT0JKRFVNUD0iZmFsc2UiCi0gIGVsc2UKLSAgICBjYXNlICRjcm9zc19jb21waWxpbmc6JGFjX3Rvb2xfd2FybmVkIGluCi15ZXM6KQoteyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBXQVJOSU5HOiB1c2luZyBjcm9zcyB0b29scyBub3QgcHJlZml4ZWQgd2l0aCBob3N0IHRyaXBsZXQiID4mNQotJGFzX2VjaG8gIiRhc19tZTogV0FSTklORzogdXNpbmcgY3Jvc3MgdG9vbHMgbm90IHByZWZpeGVkIHdpdGggaG9zdCB0cmlwbGV0IiA+JjI7fQotYWNfdG9vbF93YXJuZWQ9eWVzIDs7Ci1lc2FjCi0gICAgT0JKRFVNUD0kYWNfY3RfT0JKRFVNUAotICBmaQotZWxzZQotICBPQkpEVU1QPSIkYWNfY3ZfcHJvZ19PQkpEVU1QIgotZmkKLQotdGVzdCAteiAiJE9CSkRVTVAiICYmIE9CSkRVTVA9b2JqZHVtcAotCi0KLQotCi0KLQoteyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBob3cgdG8gcmVjb2duaXplIGRlcGVuZGVudCBsaWJyYXJpZXMiID4mNQotJGFzX2VjaG9fbiAiY2hlY2tpbmcgaG93IHRvIHJlY29nbml6ZSBkZXBlbmRlbnQgbGlicmFyaWVzLi4uICIgPiY2OyB9Ci1pZiAke2x0X2N2X2RlcGxpYnNfY2hlY2tfbWV0aG9kKzp9IGZhbHNlOyB0aGVuIDoKLSAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKLWVsc2UKLSAgbHRfY3ZfZmlsZV9tYWdpY19jbWQ9JyRNQUdJQ19DTUQnCi1sdF9jdl9maWxlX21hZ2ljX3Rlc3RfZmlsZT0KLWx0X2N2X2RlcGxpYnNfY2hlY2tfbWV0aG9kPSd1bmtub3duJwotIyBOZWVkIHRvIHNldCB0aGUgcHJlY2VkaW5nIHZhcmlhYmxlIG9uIGFsbCBwbGF0Zm9ybXMgdGhhdCBzdXBwb3J0Ci0jIGludGVybGlicmFyeSBkZXBlbmRlbmNpZXMuCi0jICdub25lJyAtLSBkZXBlbmRlbmNpZXMgbm90IHN1cHBvcnRlZC4KLSMgYHVua25vd24nIC0tIHNhbWUgYXMgbm9uZSwgYnV0IGRvY3VtZW50cyB0aGF0IHdlIHJlYWxseSBkb24ndCBrbm93LgotIyAncGFzc19hbGwnIC0tIGFsbCBkZXBlbmRlbmNpZXMgcGFzc2VkIHdpdGggbm8gY2hlY2tzLgotIyAndGVzdF9jb21waWxlJyAtLSBjaGVjayBieSBtYWtpbmcgdGVzdCBwcm9ncmFtLgotIyAnZmlsZV9tYWdpYyBbW3JlZ2V4XV0nIC0tIGNoZWNrIGJ5IGxvb2tpbmcgZm9yIGZpbGVzIGluIGxpYnJhcnkgcGF0aAotIyB3aGljaCByZXNwb25kcyB0byB0aGUgJGZpbGVfbWFnaWNfY21kIHdpdGggYSBnaXZlbiBleHRlbmRlZCByZWdleC4KLSMgSWYgeW91IGhhdmUgYGZpbGUnIG9yIGVxdWl2YWxlbnQgb24geW91ciBzeXN0ZW0gYW5kIHlvdSdyZSBub3Qgc3VyZQotIyB3aGV0aGVyIGBwYXNzX2FsbCcgd2lsbCAqYWx3YXlzKiB3b3JrLCB5b3UgcHJvYmFibHkgd2FudCB0aGlzIG9uZS4KLQotY2FzZSAkaG9zdF9vcyBpbgotYWl4WzQtOV0qKQotICBsdF9jdl9kZXBsaWJzX2NoZWNrX21ldGhvZD1wYXNzX2FsbAotICA7OwotCi1iZW9zKikKLSAgbHRfY3ZfZGVwbGlic19jaGVja19tZXRob2Q9cGFzc19hbGwKLSAgOzsKLQotYnNkaVs0NV0qKQotICBsdF9jdl9kZXBsaWJzX2NoZWNrX21ldGhvZD0nZmlsZV9tYWdpYyBFTEYgWzAtOV1bMC05XSotYml0IFtNTF1TQiAoc2hhcmVkIG9iamVjdHxkeW5hbWljIGxpYiknCi0gIGx0X2N2X2ZpbGVfbWFnaWNfY21kPScvdXNyL2Jpbi9maWxlIC1MJwotICBsdF9jdl9maWxlX21hZ2ljX3Rlc3RfZmlsZT0vc2hsaWIvbGliYy5zbwotICA7OwotCi1jeWd3aW4qKQotICAjIGZ1bmNfd2luMzJfbGliaWQgaXMgYSBzaGVsbCBmdW5jdGlvbiBkZWZpbmVkIGluIGx0bWFpbi5zaAotICBsdF9jdl9kZXBsaWJzX2NoZWNrX21ldGhvZD0nZmlsZV9tYWdpYyBeeDg2IGFyY2hpdmUgaW1wb3J0fF54ODYgRExMJwotICBsdF9jdl9maWxlX21hZ2ljX2NtZD0nZnVuY193aW4zMl9saWJpZCcKLSAgOzsKLQotbWluZ3cqIHwgcHczMiopCi0gICMgQmFzZSBNU1lTL01pbkdXIGRvIG5vdCBwcm92aWRlIHRoZSAnZmlsZScgY29tbWFuZCBuZWVkZWQgYnkKLSAgIyBmdW5jX3dpbjMyX2xpYmlkIHNoZWxsIGZ1bmN0aW9uLCBzbyB1c2UgYSB3ZWFrZXIgdGVzdCBiYXNlZCBvbiAnb2JqZHVtcCcsCi0gICMgdW5sZXNzIHdlIGZpbmQgJ2ZpbGUnLCBmb3IgZXhhbXBsZSBiZWNhdXNlIHdlIGFyZSBjcm9zcy1jb21waWxpbmcuCi0gICMgZnVuY193aW4zMl9saWJpZCBhc3N1bWVzIEJTRCBubSwgc28gZGlzYWxsb3cgaXQgaWYgdXNpbmcgTVMgZHVtcGJpbi4KLSAgaWYgKCB0ZXN0ICIkbHRfY3Zfbm1faW50ZXJmYWNlIiA9ICJCU0Qgbm0iICYmIGZpbGUgLyApID4vZGV2L251bGwgMj4mMTsgdGhlbgotICAgIGx0X2N2X2RlcGxpYnNfY2hlY2tfbWV0aG9kPSdmaWxlX21hZ2ljIF54ODYgYXJjaGl2ZSBpbXBvcnR8Xng4NiBETEwnCi0gICAgbHRfY3ZfZmlsZV9tYWdpY19jbWQ9J2Z1bmNfd2luMzJfbGliaWQnCi0gIGVsc2UKLSAgICAjIEtlZXAgdGhpcyBwYXR0ZXJuIGluIHN5bmMgd2l0aCB0aGUgb25lIGluIGZ1bmNfd2luMzJfbGliaWQuCi0gICAgbHRfY3ZfZGVwbGlic19jaGVja19tZXRob2Q9J2ZpbGVfbWFnaWMgZmlsZSBmb3JtYXQgKHBlaSotaTM4NiguKmFyY2hpdGVjdHVyZTogaTM4Nik/fHBlLWFybS13aW5jZXxwZS14ODYtNjQpJwotICAgIGx0X2N2X2ZpbGVfbWFnaWNfY21kPSckT0JKRFVNUCAtZicKLSAgZmkKLSAgOzsKLQotY2VnY2MqKQotICAjIHVzZSB0aGUgd2Vha2VyIHRlc3QgYmFzZWQgb24gJ29iamR1bXAnLiBTZWUgbWluZ3cqLgotICBsdF9jdl9kZXBsaWJzX2NoZWNrX21ldGhvZD0nZmlsZV9tYWdpYyBmaWxlIGZvcm1hdCBwZS1hcm0tLipsaXR0bGUoLiphcmNoaXRlY3R1cmU6IGFybSk/JwotICBsdF9jdl9maWxlX21hZ2ljX2NtZD0nJE9CSkRVTVAgLWYnCi0gIDs7Ci0KLWRhcndpbiogfCByaGFwc29keSopCi0gIGx0X2N2X2RlcGxpYnNfY2hlY2tfbWV0aG9kPXBhc3NfYWxsCi0gIDs7Ci0KLWZyZWVic2QqIHwgZHJhZ29uZmx5KikKLSAgaWYgZWNobyBfX0VMRl9fIHwgJENDIC1FIC0gfCAkR1JFUCBfX0VMRl9fID4gL2Rldi9udWxsOyB0aGVuCi0gICAgY2FzZSAkaG9zdF9jcHUgaW4KLSAgICBpKjg2ICkKLSAgICAgICMgTm90IHN1cmUgd2hldGhlciB0aGUgcHJlc2VuY2Ugb2YgT3BlbkJTRCBoZXJlIHdhcyBhIG1pc3Rha2UuCi0gICAgICAjIExldCdzIGFjY2VwdCBib3RoIG9mIHRoZW0gdW50aWwgdGhpcyBpcyBjbGVhcmVkIHVwLgotICAgICAgbHRfY3ZfZGVwbGlic19jaGVja19tZXRob2Q9J2ZpbGVfbWFnaWMgKEZyZWVCU0R8T3BlbkJTRHxEcmFnb25GbHkpL2lbMy05XTg2IChjb21wYWN0ICk/ZGVtYW5kIHBhZ2VkIHNoYXJlZCBsaWJyYXJ5JwotICAgICAgbHRfY3ZfZmlsZV9tYWdpY19jbWQ9L3Vzci9iaW4vZmlsZQotICAgICAgbHRfY3ZfZmlsZV9tYWdpY190ZXN0X2ZpbGU9YGVjaG8gL3Vzci9saWIvbGliYy5zby4qYAotICAgICAgOzsKLSAgICBlc2FjCi0gIGVsc2UKLSAgICBsdF9jdl9kZXBsaWJzX2NoZWNrX21ldGhvZD1wYXNzX2FsbAotICBmaQotICA7OwotCi1nbnUqKQotICBsdF9jdl9kZXBsaWJzX2NoZWNrX21ldGhvZD1wYXNzX2FsbAotICA7OwotCi1oYWlrdSopCi0gIGx0X2N2X2RlcGxpYnNfY2hlY2tfbWV0aG9kPXBhc3NfYWxsCi0gIDs7Ci0KLWhwdXgxMC4yMCogfCBocHV4MTEqKQotICBsdF9jdl9maWxlX21hZ2ljX2NtZD0vdXNyL2Jpbi9maWxlCi0gIGNhc2UgJGhvc3RfY3B1IGluCi0gIGlhNjQqKQotICAgIGx0X2N2X2RlcGxpYnNfY2hlY2tfbWV0aG9kPSdmaWxlX21hZ2ljIChzWzAtOV1bMC05XVswLTldfEVMRi1bMC05XVswLTldKSBzaGFyZWQgb2JqZWN0IGZpbGUgLSBJQTY0JwotICAgIGx0X2N2X2ZpbGVfbWFnaWNfdGVzdF9maWxlPS91c3IvbGliL2hwdXgzMi9saWJjLnNvCi0gICAgOzsKLSAgaHBwYSo2NCopCi0gICAgbHRfY3ZfZGVwbGlic19jaGVja19tZXRob2Q9J2ZpbGVfbWFnaWMgKHNbMC05XVswLTldWzAtOV18RUxGWyAtXVswLTldWzAtOV0pKC1iaXQpPyggW0xNXVNCKT8gc2hhcmVkIG9iamVjdCggZmlsZSk/WywgLV0qIFBBLVJJU0MgWzAtOV1cLlswLTldJwotICAgIGx0X2N2X2ZpbGVfbWFnaWNfdGVzdF9maWxlPS91c3IvbGliL3BhMjBfNjQvbGliYy5zbAotICAgIDs7Ci0gICopCi0gICAgbHRfY3ZfZGVwbGlic19jaGVja19tZXRob2Q9J2ZpbGVfbWFnaWMgKHNbMC05XVswLTldWzAtOV18UEEtUklTQ1swLTldXC5bMC05XSkgc2hhcmVkIGxpYnJhcnknCi0gICAgbHRfY3ZfZmlsZV9tYWdpY190ZXN0X2ZpbGU9L3Vzci9saWIvbGliYy5zbAotICAgIDs7Ci0gIGVzYWMKLSAgOzsKLQotaW50ZXJpeFszLTldKikKLSAgIyBQSUMgY29kZSBpcyBicm9rZW4gb24gSW50ZXJpeCAzLngsIHRoYXQncyB3aHkgfFwuYSBub3QgfF9waWNcLmEgaGVyZQotICBsdF9jdl9kZXBsaWJzX2NoZWNrX21ldGhvZD0nbWF0Y2hfcGF0dGVybiAvbGliW14vXSsoXC5zb3xcLmEpJCcKLSAgOzsKLQotaXJpeDUqIHwgaXJpeDYqIHwgbm9uc3RvcHV4KikKLSAgY2FzZSAkTEQgaW4KLSAgKi0zMnwqIi0zMiAiKSBsaWJtYWdpYz0zMi1iaXQ7OwotICAqLW4zMnwqIi1uMzIgIikgbGlibWFnaWM9TjMyOzsKLSAgKi02NHwqIi02NCAiKSBsaWJtYWdpYz02NC1iaXQ7OwotICAqKSBsaWJtYWdpYz1uZXZlci1tYXRjaDs7Ci0gIGVzYWMKLSAgbHRfY3ZfZGVwbGlic19jaGVja19tZXRob2Q9cGFzc19hbGwKLSAgOzsKLQotIyBUaGlzIG11c3QgYmUgTGludXggRUxGLgotbGludXgqIHwgaypic2QqLWdudSB8IGtvcGVuc29sYXJpcyotZ251KQotICBsdF9jdl9kZXBsaWJzX2NoZWNrX21ldGhvZD1wYXNzX2FsbAotICA7OwotCi1uZXRic2QqKQotICBpZiBlY2hvIF9fRUxGX18gfCAkQ0MgLUUgLSB8ICRHUkVQIF9fRUxGX18gPiAvZGV2L251bGw7IHRoZW4KLSAgICBsdF9jdl9kZXBsaWJzX2NoZWNrX21ldGhvZD0nbWF0Y2hfcGF0dGVybiAvbGliW14vXSsoXC5zb1wuWzAtOV0rXC5bMC05XSt8X3BpY1wuYSkkJwotICBlbHNlCi0gICAgbHRfY3ZfZGVwbGlic19jaGVja19tZXRob2Q9J21hdGNoX3BhdHRlcm4gL2xpYlteL10rKFwuc298X3BpY1wuYSkkJwotICBmaQotICA7OwotCi1uZXdvczYqKQotICBsdF9jdl9kZXBsaWJzX2NoZWNrX21ldGhvZD0nZmlsZV9tYWdpYyBFTEYgWzAtOV1bMC05XSotYml0IFtNTF1TQiAoZXhlY3V0YWJsZXxkeW5hbWljIGxpYiknCi0gIGx0X2N2X2ZpbGVfbWFnaWNfY21kPS91c3IvYmluL2ZpbGUKLSAgbHRfY3ZfZmlsZV9tYWdpY190ZXN0X2ZpbGU9L3Vzci9saWIvbGlibmxzLnNvCi0gIDs7Ci0KLSpudG8qIHwgKnFueCopCi0gIGx0X2N2X2RlcGxpYnNfY2hlY2tfbWV0aG9kPXBhc3NfYWxsCi0gIDs7Ci0KLW9wZW5ic2QqKQotICBpZiB0ZXN0IC16ICJgZWNobyBfX0VMRl9fIHwgJENDIC1FIC0gfCAkR1JFUCBfX0VMRl9fYCIgfHwgdGVzdCAiJGhvc3Rfb3MtJGhvc3RfY3B1IiA9ICJvcGVuYnNkMi44LXBvd2VycGMiOyB0aGVuCi0gICAgbHRfY3ZfZGVwbGlic19jaGVja19tZXRob2Q9J21hdGNoX3BhdHRlcm4gL2xpYlteL10rKFwuc29cLlswLTldK1wuWzAtOV0rfFwuc298X3BpY1wuYSkkJwotICBlbHNlCi0gICAgbHRfY3ZfZGVwbGlic19jaGVja19tZXRob2Q9J21hdGNoX3BhdHRlcm4gL2xpYlteL10rKFwuc29cLlswLTldK1wuWzAtOV0rfF9waWNcLmEpJCcKLSAgZmkKLSAgOzsKLQotb3NmMyogfCBvc2Y0KiB8IG9zZjUqKQotICBsdF9jdl9kZXBsaWJzX2NoZWNrX21ldGhvZD1wYXNzX2FsbAotICA7OwotCi1yZG9zKikKLSAgbHRfY3ZfZGVwbGlic19jaGVja19tZXRob2Q9cGFzc19hbGwKLSAgOzsKLQotc29sYXJpcyopCi0gIGx0X2N2X2RlcGxpYnNfY2hlY2tfbWV0aG9kPXBhc3NfYWxsCi0gIDs7Ci0KLXN5c3Y1KiB8IHNjbzMuMnY1KiB8IHNjbzV2NiogfCB1bml4d2FyZSogfCBPcGVuVU5JWCogfCBzeXN2NCp1dzIqKQotICBsdF9jdl9kZXBsaWJzX2NoZWNrX21ldGhvZD1wYXNzX2FsbAotICA7OwotCi1zeXN2NCB8IHN5c3Y0LjMqKQotICBjYXNlICRob3N0X3ZlbmRvciBpbgotICBtb3Rvcm9sYSkKLSAgICBsdF9jdl9kZXBsaWJzX2NoZWNrX21ldGhvZD0nZmlsZV9tYWdpYyBFTEYgWzAtOV1bMC05XSotYml0IFtNTF1TQiAoc2hhcmVkIG9iamVjdHxkeW5hbWljIGxpYikgTVswLTldWzAtOV0qIFZlcnNpb24gWzAtOV0nCi0gICAgbHRfY3ZfZmlsZV9tYWdpY190ZXN0X2ZpbGU9YGVjaG8gL3Vzci9saWIvbGliYy5zbypgCi0gICAgOzsKLSAgbmNyKQotICAgIGx0X2N2X2RlcGxpYnNfY2hlY2tfbWV0aG9kPXBhc3NfYWxsCi0gICAgOzsKLSAgc2VxdWVudCkKLSAgICBsdF9jdl9maWxlX21hZ2ljX2NtZD0nL2Jpbi9maWxlJwotICAgIGx0X2N2X2RlcGxpYnNfY2hlY2tfbWV0aG9kPSdmaWxlX21hZ2ljIEVMRiBbMC05XVswLTldKi1iaXQgW0xNXVNCIChzaGFyZWQgb2JqZWN0fGR5bmFtaWMgbGliICknCi0gICAgOzsKLSAgc25pKQotICAgIGx0X2N2X2ZpbGVfbWFnaWNfY21kPScvYmluL2ZpbGUnCi0gICAgbHRfY3ZfZGVwbGlic19jaGVja19tZXRob2Q9ImZpbGVfbWFnaWMgRUxGIFswLTldWzAtOV0qLWJpdCBbTE1dU0IgZHluYW1pYyBsaWIiCi0gICAgbHRfY3ZfZmlsZV9tYWdpY190ZXN0X2ZpbGU9L2xpYi9saWJjLnNvCi0gICAgOzsKLSAgc2llbWVucykKLSAgICBsdF9jdl9kZXBsaWJzX2NoZWNrX21ldGhvZD1wYXNzX2FsbAotICAgIDs7Ci0gIHBjKQotICAgIGx0X2N2X2RlcGxpYnNfY2hlY2tfbWV0aG9kPXBhc3NfYWxsCi0gICAgOzsKLSAgZXNhYwotICA7OwotCi10cGYqKQotICBsdF9jdl9kZXBsaWJzX2NoZWNrX21ldGhvZD1wYXNzX2FsbAotICA7OwotZXNhYwotCi1maQoteyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRsdF9jdl9kZXBsaWJzX2NoZWNrX21ldGhvZCIgPiY1Ci0kYXNfZWNobyAiJGx0X2N2X2RlcGxpYnNfY2hlY2tfbWV0aG9kIiA+JjY7IH0KLQotZmlsZV9tYWdpY19nbG9iPQotd2FudF9ub2Nhc2VnbG9iPW5vCi1pZiB0ZXN0ICIkYnVpbGQiID0gIiRob3N0IjsgdGhlbgotICBjYXNlICRob3N0X29zIGluCi0gIG1pbmd3KiB8IHB3MzIqKQotICAgIGlmICggc2hvcHQgfCBncmVwIG5vY2FzZWdsb2IgKSA+L2Rldi9udWxsIDI+JjE7IHRoZW4KLSAgICAgIHdhbnRfbm9jYXNlZ2xvYj15ZXMKLSAgICBlbHNlCi0gICAgICBmaWxlX21hZ2ljX2dsb2I9YGVjaG8gYUFiQmNDZERlRWZGZ0doSGlJakprS2xMbU1uTm9PcFBxUXJSc1N0VHVVdlZ3V3hYeVl6WiB8ICRTRUQgLWUgInMvXCguLlwpL3NcL1tcMV1cL1tcMV1cL2c7L2ciYAotICAgIGZpCi0gICAgOzsKLSAgZXNhYwotZmkKLQotZmlsZV9tYWdpY19jbWQ9JGx0X2N2X2ZpbGVfbWFnaWNfY21kCi1kZXBsaWJzX2NoZWNrX21ldGhvZD0kbHRfY3ZfZGVwbGlic19jaGVja19tZXRob2QKLXRlc3QgLXogIiRkZXBsaWJzX2NoZWNrX21ldGhvZCIgJiYgZGVwbGlic19jaGVja19tZXRob2Q9dW5rbm93bgotCi0KLQotCi0KLQotCi0KLQotCi0KLQotCi0KLQotCi0KLQotCi0KLQotCi1pZiB0ZXN0IC1uICIkYWNfdG9vbF9wcmVmaXgiOyB0aGVuCi0gICMgRXh0cmFjdCB0aGUgZmlyc3Qgd29yZCBvZiAiJHthY190b29sX3ByZWZpeH1kbGx0b29sIiwgc28gaXQgY2FuIGJlIGEgcHJvZ3JhbSBuYW1lIHdpdGggYXJncy4KLXNldCBkdW1teSAke2FjX3Rvb2xfcHJlZml4fWRsbHRvb2w7IGFjX3dvcmQ9JDIKLXsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgZm9yICRhY193b3JkIiA+JjUKLSRhc19lY2hvX24gImNoZWNraW5nIGZvciAkYWNfd29yZC4uLiAiID4mNjsgfQotaWYgJHthY19jdl9wcm9nX0RMTFRPT0wrOn0gZmFsc2U7IHRoZW4gOgotICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgotZWxzZQotICBpZiB0ZXN0IC1uICIkRExMVE9PTCI7IHRoZW4KLSAgYWNfY3ZfcHJvZ19ETExUT09MPSIkRExMVE9PTCIgIyBMZXQgdGhlIHVzZXIgb3ZlcnJpZGUgdGhlIHRlc3QuCi1lbHNlCi1hc19zYXZlX0lGUz0kSUZTOyBJRlM9JFBBVEhfU0VQQVJBVE9SCi1mb3IgYXNfZGlyIGluICRQQVRICi1kbwotICBJRlM9JGFzX3NhdmVfSUZTCi0gIHRlc3QgLXogIiRhc19kaXIiICYmIGFzX2Rpcj0uCi0gICAgZm9yIGFjX2V4ZWNfZXh0IGluICcnICRhY19leGVjdXRhYmxlX2V4dGVuc2lvbnM7IGRvCi0gIGlmIHsgdGVzdCAtZiAiJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCIgJiYgJGFzX3Rlc3RfeCAiJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCI7IH07IHRoZW4KLSAgICBhY19jdl9wcm9nX0RMTFRPT0w9IiR7YWNfdG9vbF9wcmVmaXh9ZGxsdG9vbCIKLSAgICAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBmb3VuZCAkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IiA+JjUKLSAgICBicmVhayAyCi0gIGZpCi1kb25lCi0gIGRvbmUKLUlGUz0kYXNfc2F2ZV9JRlMKLQotZmkKLWZpCi1ETExUT09MPSRhY19jdl9wcm9nX0RMTFRPT0wKLWlmIHRlc3QgLW4gIiRETExUT09MIjsgdGhlbgotICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJERMTFRPT0wiID4mNQotJGFzX2VjaG8gIiRETExUT09MIiA+JjY7IH0KLWVsc2UKLSAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6IG5vIiA+JjUKLSRhc19lY2hvICJubyIgPiY2OyB9Ci1maQotCi0KLWZpCi1pZiB0ZXN0IC16ICIkYWNfY3ZfcHJvZ19ETExUT09MIjsgdGhlbgotICBhY19jdF9ETExUT09MPSRETExUT09MCi0gICMgRXh0cmFjdCB0aGUgZmlyc3Qgd29yZCBvZiAiZGxsdG9vbCIsIHNvIGl0IGNhbiBiZSBhIHByb2dyYW0gbmFtZSB3aXRoIGFyZ3MuCi1zZXQgZHVtbXkgZGxsdG9vbDsgYWNfd29yZD0kMgoteyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBmb3IgJGFjX3dvcmQiID4mNQotJGFzX2VjaG9fbiAiY2hlY2tpbmcgZm9yICRhY193b3JkLi4uICIgPiY2OyB9Ci1pZiAke2FjX2N2X3Byb2dfYWNfY3RfRExMVE9PTCs6fSBmYWxzZTsgdGhlbiA6Ci0gICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2Ci1lbHNlCi0gIGlmIHRlc3QgLW4gIiRhY19jdF9ETExUT09MIjsgdGhlbgotICBhY19jdl9wcm9nX2FjX2N0X0RMTFRPT0w9IiRhY19jdF9ETExUT09MIiAjIExldCB0aGUgdXNlciBvdmVycmlkZSB0aGUgdGVzdC4KLWVsc2UKLWFzX3NhdmVfSUZTPSRJRlM7IElGUz0kUEFUSF9TRVBBUkFUT1IKLWZvciBhc19kaXIgaW4gJFBBVEgKLWRvCi0gIElGUz0kYXNfc2F2ZV9JRlMKLSAgdGVzdCAteiAiJGFzX2RpciIgJiYgYXNfZGlyPS4KLSAgICBmb3IgYWNfZXhlY19leHQgaW4gJycgJGFjX2V4ZWN1dGFibGVfZXh0ZW5zaW9uczsgZG8KLSAgaWYgeyB0ZXN0IC1mICIkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IiAmJiAkYXNfdGVzdF94ICIkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IjsgfTsgdGhlbgotICAgIGFjX2N2X3Byb2dfYWNfY3RfRExMVE9PTD0iZGxsdG9vbCIKLSAgICAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBmb3VuZCAkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IiA+JjUKLSAgICBicmVhayAyCi0gIGZpCi1kb25lCi0gIGRvbmUKLUlGUz0kYXNfc2F2ZV9JRlMKLQotZmkKLWZpCi1hY19jdF9ETExUT09MPSRhY19jdl9wcm9nX2FjX2N0X0RMTFRPT0wKLWlmIHRlc3QgLW4gIiRhY19jdF9ETExUT09MIjsgdGhlbgotICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJGFjX2N0X0RMTFRPT0wiID4mNQotJGFzX2VjaG8gIiRhY19jdF9ETExUT09MIiA+JjY7IH0KLWVsc2UKLSAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6IG5vIiA+JjUKLSRhc19lY2hvICJubyIgPiY2OyB9Ci1maQotCi0gIGlmIHRlc3QgIngkYWNfY3RfRExMVE9PTCIgPSB4OyB0aGVuCi0gICAgRExMVE9PTD0iZmFsc2UiCi0gIGVsc2UKLSAgICBjYXNlICRjcm9zc19jb21waWxpbmc6JGFjX3Rvb2xfd2FybmVkIGluCi15ZXM6KQoteyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBXQVJOSU5HOiB1c2luZyBjcm9zcyB0b29scyBub3QgcHJlZml4ZWQgd2l0aCBob3N0IHRyaXBsZXQiID4mNQotJGFzX2VjaG8gIiRhc19tZTogV0FSTklORzogdXNpbmcgY3Jvc3MgdG9vbHMgbm90IHByZWZpeGVkIHdpdGggaG9zdCB0cmlwbGV0IiA+JjI7fQotYWNfdG9vbF93YXJuZWQ9eWVzIDs7Ci1lc2FjCi0gICAgRExMVE9PTD0kYWNfY3RfRExMVE9PTAotICBmaQotZWxzZQotICBETExUT09MPSIkYWNfY3ZfcHJvZ19ETExUT09MIgotZmkKLQotdGVzdCAteiAiJERMTFRPT0wiICYmIERMTFRPT0w9ZGxsdG9vbAotCi0KLQotCi0KLQotCi17ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGhvdyB0byBhc3NvY2lhdGUgcnVudGltZSBhbmQgbGluayBsaWJyYXJpZXMiID4mNQotJGFzX2VjaG9fbiAiY2hlY2tpbmcgaG93IHRvIGFzc29jaWF0ZSBydW50aW1lIGFuZCBsaW5rIGxpYnJhcmllcy4uLiAiID4mNjsgfQotaWYgJHtsdF9jdl9zaGFyZWRsaWJfZnJvbV9saW5rbGliX2NtZCs6fSBmYWxzZTsgdGhlbiA6Ci0gICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2Ci1lbHNlCi0gIGx0X2N2X3NoYXJlZGxpYl9mcm9tX2xpbmtsaWJfY21kPSd1bmtub3duJwotCi1jYXNlICRob3N0X29zIGluCi1jeWd3aW4qIHwgbWluZ3cqIHwgcHczMiogfCBjZWdjYyopCi0gICMgdHdvIGRpZmZlcmVudCBzaGVsbCBmdW5jdGlvbnMgZGVmaW5lZCBpbiBsdG1haW4uc2gKLSAgIyBkZWNpZGUgd2hpY2ggdG8gdXNlIGJhc2VkIG9uIGNhcGFiaWxpdGllcyBvZiAkRExMVE9PTAotICBjYXNlIGAkRExMVE9PTCAtLWhlbHAgMj4mMWAgaW4KLSAgKi0taWRlbnRpZnktc3RyaWN0KikKLSAgICBsdF9jdl9zaGFyZWRsaWJfZnJvbV9saW5rbGliX2NtZD1mdW5jX2N5Z21pbmdfZGxsX2Zvcl9pbXBsaWIKLSAgICA7OwotICAqKQotICAgIGx0X2N2X3NoYXJlZGxpYl9mcm9tX2xpbmtsaWJfY21kPWZ1bmNfY3lnbWluZ19kbGxfZm9yX2ltcGxpYl9mYWxsYmFjawotICAgIDs7Ci0gIGVzYWMKLSAgOzsKLSopCi0gICMgZmFsbGJhY2s6IGFzc3VtZSBsaW5rbGliIElTIHNoYXJlZGxpYgotICBsdF9jdl9zaGFyZWRsaWJfZnJvbV9saW5rbGliX2NtZD0iJEVDSE8iCi0gIDs7Ci1lc2FjCi0KLWZpCi17ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJGx0X2N2X3NoYXJlZGxpYl9mcm9tX2xpbmtsaWJfY21kIiA+JjUKLSRhc19lY2hvICIkbHRfY3Zfc2hhcmVkbGliX2Zyb21fbGlua2xpYl9jbWQiID4mNjsgfQotc2hhcmVkbGliX2Zyb21fbGlua2xpYl9jbWQ9JGx0X2N2X3NoYXJlZGxpYl9mcm9tX2xpbmtsaWJfY21kCi10ZXN0IC16ICIkc2hhcmVkbGliX2Zyb21fbGlua2xpYl9jbWQiICYmIHNoYXJlZGxpYl9mcm9tX2xpbmtsaWJfY21kPSRFQ0hPCi0KLQotCi0KLQotCi0KLWlmIHRlc3QgLW4gIiRhY190b29sX3ByZWZpeCI7IHRoZW4KLSAgZm9yIGFjX3Byb2cgaW4gYXIKLSAgZG8KLSAgICAjIEV4dHJhY3QgdGhlIGZpcnN0IHdvcmQgb2YgIiRhY190b29sX3ByZWZpeCRhY19wcm9nIiwgc28gaXQgY2FuIGJlIGEgcHJvZ3JhbSBuYW1lIHdpdGggYXJncy4KLXNldCBkdW1teSAkYWNfdG9vbF9wcmVmaXgkYWNfcHJvZzsgYWNfd29yZD0kMgoteyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBmb3IgJGFjX3dvcmQiID4mNQotJGFzX2VjaG9fbiAiY2hlY2tpbmcgZm9yICRhY193b3JkLi4uICIgPiY2OyB9Ci1pZiAke2FjX2N2X3Byb2dfQVIrOn0gZmFsc2U7IHRoZW4gOgotICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgotZWxzZQotICBpZiB0ZXN0IC1uICIkQVIiOyB0aGVuCi0gIGFjX2N2X3Byb2dfQVI9IiRBUiIgIyBMZXQgdGhlIHVzZXIgb3ZlcnJpZGUgdGhlIHRlc3QuCi1lbHNlCi1hc19zYXZlX0lGUz0kSUZTOyBJRlM9JFBBVEhfU0VQQVJBVE9SCi1mb3IgYXNfZGlyIGluICRQQVRICi1kbwotICBJRlM9JGFzX3NhdmVfSUZTCi0gIHRlc3QgLXogIiRhc19kaXIiICYmIGFzX2Rpcj0uCi0gICAgZm9yIGFjX2V4ZWNfZXh0IGluICcnICRhY19leGVjdXRhYmxlX2V4dGVuc2lvbnM7IGRvCi0gIGlmIHsgdGVzdCAtZiAiJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCIgJiYgJGFzX3Rlc3RfeCAiJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCI7IH07IHRoZW4KLSAgICBhY19jdl9wcm9nX0FSPSIkYWNfdG9vbF9wcmVmaXgkYWNfcHJvZyIKLSAgICAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBmb3VuZCAkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IiA+JjUKLSAgICBicmVhayAyCi0gIGZpCi1kb25lCi0gIGRvbmUKLUlGUz0kYXNfc2F2ZV9JRlMKLQotZmkKLWZpCi1BUj0kYWNfY3ZfcHJvZ19BUgotaWYgdGVzdCAtbiAiJEFSIjsgdGhlbgotICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJEFSIiA+JjUKLSRhc19lY2hvICIkQVIiID4mNjsgfQotZWxzZQotICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogbm8iID4mNQotJGFzX2VjaG8gIm5vIiA+JjY7IH0KLWZpCi0KLQotICAgIHRlc3QgLW4gIiRBUiIgJiYgYnJlYWsKLSAgZG9uZQotZmkKLWlmIHRlc3QgLXogIiRBUiI7IHRoZW4KLSAgYWNfY3RfQVI9JEFSCi0gIGZvciBhY19wcm9nIGluIGFyCi1kbwotICAjIEV4dHJhY3QgdGhlIGZpcnN0IHdvcmQgb2YgIiRhY19wcm9nIiwgc28gaXQgY2FuIGJlIGEgcHJvZ3JhbSBuYW1lIHdpdGggYXJncy4KLXNldCBkdW1teSAkYWNfcHJvZzsgYWNfd29yZD0kMgoteyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBmb3IgJGFjX3dvcmQiID4mNQotJGFzX2VjaG9fbiAiY2hlY2tpbmcgZm9yICRhY193b3JkLi4uICIgPiY2OyB9Ci1pZiAke2FjX2N2X3Byb2dfYWNfY3RfQVIrOn0gZmFsc2U7IHRoZW4gOgotICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgotZWxzZQotICBpZiB0ZXN0IC1uICIkYWNfY3RfQVIiOyB0aGVuCi0gIGFjX2N2X3Byb2dfYWNfY3RfQVI9IiRhY19jdF9BUiIgIyBMZXQgdGhlIHVzZXIgb3ZlcnJpZGUgdGhlIHRlc3QuCi1lbHNlCi1hc19zYXZlX0lGUz0kSUZTOyBJRlM9JFBBVEhfU0VQQVJBVE9SCi1mb3IgYXNfZGlyIGluICRQQVRICi1kbwotICBJRlM9JGFzX3NhdmVfSUZTCi0gIHRlc3QgLXogIiRhc19kaXIiICYmIGFzX2Rpcj0uCi0gICAgZm9yIGFjX2V4ZWNfZXh0IGluICcnICRhY19leGVjdXRhYmxlX2V4dGVuc2lvbnM7IGRvCi0gIGlmIHsgdGVzdCAtZiAiJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCIgJiYgJGFzX3Rlc3RfeCAiJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCI7IH07IHRoZW4KLSAgICBhY19jdl9wcm9nX2FjX2N0X0FSPSIkYWNfcHJvZyIKLSAgICAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBmb3VuZCAkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IiA+JjUKLSAgICBicmVhayAyCi0gIGZpCi1kb25lCi0gIGRvbmUKLUlGUz0kYXNfc2F2ZV9JRlMKLQotZmkKLWZpCi1hY19jdF9BUj0kYWNfY3ZfcHJvZ19hY19jdF9BUgotaWYgdGVzdCAtbiAiJGFjX2N0X0FSIjsgdGhlbgotICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJGFjX2N0X0FSIiA+JjUKLSRhc19lY2hvICIkYWNfY3RfQVIiID4mNjsgfQotZWxzZQotICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogbm8iID4mNQotJGFzX2VjaG8gIm5vIiA+JjY7IH0KLWZpCi0KLQotICB0ZXN0IC1uICIkYWNfY3RfQVIiICYmIGJyZWFrCi1kb25lCi0KLSAgaWYgdGVzdCAieCRhY19jdF9BUiIgPSB4OyB0aGVuCi0gICAgQVI9ImZhbHNlIgotICBlbHNlCi0gICAgY2FzZSAkY3Jvc3NfY29tcGlsaW5nOiRhY190b29sX3dhcm5lZCBpbgoteWVzOikKLXsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogV0FSTklORzogdXNpbmcgY3Jvc3MgdG9vbHMgbm90IHByZWZpeGVkIHdpdGggaG9zdCB0cmlwbGV0IiA+JjUKLSRhc19lY2hvICIkYXNfbWU6IFdBUk5JTkc6IHVzaW5nIGNyb3NzIHRvb2xzIG5vdCBwcmVmaXhlZCB3aXRoIGhvc3QgdHJpcGxldCIgPiYyO30KLWFjX3Rvb2xfd2FybmVkPXllcyA7OwotZXNhYwotICAgIEFSPSRhY19jdF9BUgotICBmaQotZmkKLQotOiAke0FSPWFyfQotOiAke0FSX0ZMQUdTPWNydX0KLQotCi0KLQotCi0KLQotCi0KLQotCi17ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGZvciBhcmNoaXZlciBARklMRSBzdXBwb3J0IiA+JjUKLSRhc19lY2hvX24gImNoZWNraW5nIGZvciBhcmNoaXZlciBARklMRSBzdXBwb3J0Li4uICIgPiY2OyB9Ci1pZiAke2x0X2N2X2FyX2F0X2ZpbGUrOn0gZmFsc2U7IHRoZW4gOgotICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgotZWxzZQotICBsdF9jdl9hcl9hdF9maWxlPW5vCi0gICBjYXQgY29uZmRlZnMuaCAtIDw8X0FDRU9GID5jb25mdGVzdC4kYWNfZXh0Ci0vKiBlbmQgY29uZmRlZnMuaC4gICovCi0KLWludAotbWFpbiAoKQotewotCi0gIDsKLSAgcmV0dXJuIDA7Ci19Ci1fQUNFT0YKLWlmIGFjX2ZuX2NfdHJ5X2NvbXBpbGUgIiRMSU5FTk8iOyB0aGVuIDoKLSAgZWNobyBjb25mdGVzdC4kYWNfb2JqZXh0ID4gY29uZnRlc3QubHN0Ci0gICAgICBsdF9hcl90cnk9JyRBUiAkQVJfRkxBR1MgbGliY29uZnRlc3QuYSBAY29uZnRlc3QubHN0ID4mNScKLSAgICAgIHsgeyBldmFsIGVjaG8gIlwiXCRhc19tZVwiOiR7YXNfbGluZW5vLSRMSU5FTk99OiBcIiRsdF9hcl90cnlcIiI7IH0gPiY1Ci0gIChldmFsICRsdF9hcl90cnkpIDI+JjUKLSAgYWNfc3RhdHVzPSQ/Ci0gICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IFwkPyA9ICRhY19zdGF0dXMiID4mNQotICB0ZXN0ICRhY19zdGF0dXMgPSAwOyB9Ci0gICAgICBpZiB0ZXN0ICIkYWNfc3RhdHVzIiAtZXEgMDsgdGhlbgotCSMgRW5zdXJlIHRoZSBhcmNoaXZlciBmYWlscyB1cG9uIGJvZ3VzIGZpbGUgbmFtZXMuCi0Jcm0gLWYgY29uZnRlc3QuJGFjX29iamV4dCBsaWJjb25mdGVzdC5hCi0JeyB7IGV2YWwgZWNobyAiXCJcJGFzX21lXCI6JHthc19saW5lbm8tJExJTkVOT306IFwiJGx0X2FyX3RyeVwiIjsgfSA+JjUKLSAgKGV2YWwgJGx0X2FyX3RyeSkgMj4mNQotICBhY19zdGF0dXM9JD8KLSAgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1Ci0gIHRlc3QgJGFjX3N0YXR1cyA9IDA7IH0KLQlpZiB0ZXN0ICIkYWNfc3RhdHVzIiAtbmUgMDsgdGhlbgotICAgICAgICAgIGx0X2N2X2FyX2F0X2ZpbGU9QAotICAgICAgICBmaQotICAgICAgZmkKLSAgICAgIHJtIC1mIGNvbmZ0ZXN0LiogbGliY29uZnRlc3QuYQotCi1maQotcm0gLWYgY29yZSBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdC4kYWNfZXh0Ci0KLWZpCi17ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJGx0X2N2X2FyX2F0X2ZpbGUiID4mNQotJGFzX2VjaG8gIiRsdF9jdl9hcl9hdF9maWxlIiA+JjY7IH0KLQotaWYgdGVzdCAieCRsdF9jdl9hcl9hdF9maWxlIiA9IHhubzsgdGhlbgotICBhcmNoaXZlcl9saXN0X3NwZWM9Ci1lbHNlCi0gIGFyY2hpdmVyX2xpc3Rfc3BlYz0kbHRfY3ZfYXJfYXRfZmlsZQotZmkKLQotCi0KLQotCi0KLQotaWYgdGVzdCAtbiAiJGFjX3Rvb2xfcHJlZml4IjsgdGhlbgotICAjIEV4dHJhY3QgdGhlIGZpcnN0IHdvcmQgb2YgIiR7YWNfdG9vbF9wcmVmaXh9c3RyaXAiLCBzbyBpdCBjYW4gYmUgYSBwcm9ncmFtIG5hbWUgd2l0aCBhcmdzLgotc2V0IGR1bW15ICR7YWNfdG9vbF9wcmVmaXh9c3RyaXA7IGFjX3dvcmQ9JDIKLXsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgZm9yICRhY193b3JkIiA+JjUKLSRhc19lY2hvX24gImNoZWNraW5nIGZvciAkYWNfd29yZC4uLiAiID4mNjsgfQotaWYgJHthY19jdl9wcm9nX1NUUklQKzp9IGZhbHNlOyB0aGVuIDoKLSAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKLWVsc2UKLSAgaWYgdGVzdCAtbiAiJFNUUklQIjsgdGhlbgotICBhY19jdl9wcm9nX1NUUklQPSIkU1RSSVAiICMgTGV0IHRoZSB1c2VyIG92ZXJyaWRlIHRoZSB0ZXN0LgotZWxzZQotYXNfc2F2ZV9JRlM9JElGUzsgSUZTPSRQQVRIX1NFUEFSQVRPUgotZm9yIGFzX2RpciBpbiAkUEFUSAotZG8KLSAgSUZTPSRhc19zYXZlX0lGUwotICB0ZXN0IC16ICIkYXNfZGlyIiAmJiBhc19kaXI9LgotICAgIGZvciBhY19leGVjX2V4dCBpbiAnJyAkYWNfZXhlY3V0YWJsZV9leHRlbnNpb25zOyBkbwotICBpZiB7IHRlc3QgLWYgIiRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiICYmICRhc190ZXN0X3ggIiRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiOyB9OyB0aGVuCi0gICAgYWNfY3ZfcHJvZ19TVFJJUD0iJHthY190b29sX3ByZWZpeH1zdHJpcCIKLSAgICAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBmb3VuZCAkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IiA+JjUKLSAgICBicmVhayAyCi0gIGZpCi1kb25lCi0gIGRvbmUKLUlGUz0kYXNfc2F2ZV9JRlMKLQotZmkKLWZpCi1TVFJJUD0kYWNfY3ZfcHJvZ19TVFJJUAotaWYgdGVzdCAtbiAiJFNUUklQIjsgdGhlbgotICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJFNUUklQIiA+JjUKLSRhc19lY2hvICIkU1RSSVAiID4mNjsgfQotZWxzZQotICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogbm8iID4mNQotJGFzX2VjaG8gIm5vIiA+JjY7IH0KLWZpCi0KLQotZmkKLWlmIHRlc3QgLXogIiRhY19jdl9wcm9nX1NUUklQIjsgdGhlbgotICBhY19jdF9TVFJJUD0kU1RSSVAKLSAgIyBFeHRyYWN0IHRoZSBmaXJzdCB3b3JkIG9mICJzdHJpcCIsIHNvIGl0IGNhbiBiZSBhIHByb2dyYW0gbmFtZSB3aXRoIGFyZ3MuCi1zZXQgZHVtbXkgc3RyaXA7IGFjX3dvcmQ9JDIKLXsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgZm9yICRhY193b3JkIiA+JjUKLSRhc19lY2hvX24gImNoZWNraW5nIGZvciAkYWNfd29yZC4uLiAiID4mNjsgfQotaWYgJHthY19jdl9wcm9nX2FjX2N0X1NUUklQKzp9IGZhbHNlOyB0aGVuIDoKLSAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKLWVsc2UKLSAgaWYgdGVzdCAtbiAiJGFjX2N0X1NUUklQIjsgdGhlbgotICBhY19jdl9wcm9nX2FjX2N0X1NUUklQPSIkYWNfY3RfU1RSSVAiICMgTGV0IHRoZSB1c2VyIG92ZXJyaWRlIHRoZSB0ZXN0LgotZWxzZQotYXNfc2F2ZV9JRlM9JElGUzsgSUZTPSRQQVRIX1NFUEFSQVRPUgotZm9yIGFzX2RpciBpbiAkUEFUSAotZG8KLSAgSUZTPSRhc19zYXZlX0lGUwotICB0ZXN0IC16ICIkYXNfZGlyIiAmJiBhc19kaXI9LgotICAgIGZvciBhY19leGVjX2V4dCBpbiAnJyAkYWNfZXhlY3V0YWJsZV9leHRlbnNpb25zOyBkbwotICBpZiB7IHRlc3QgLWYgIiRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiICYmICRhc190ZXN0X3ggIiRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiOyB9OyB0aGVuCi0gICAgYWNfY3ZfcHJvZ19hY19jdF9TVFJJUD0ic3RyaXAiCi0gICAgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogZm91bmQgJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCIgPiY1Ci0gICAgYnJlYWsgMgotICBmaQotZG9uZQotICBkb25lCi1JRlM9JGFzX3NhdmVfSUZTCi0KLWZpCi1maQotYWNfY3RfU1RSSVA9JGFjX2N2X3Byb2dfYWNfY3RfU1RSSVAKLWlmIHRlc3QgLW4gIiRhY19jdF9TVFJJUCI7IHRoZW4KLSAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRhY19jdF9TVFJJUCIgPiY1Ci0kYXNfZWNobyAiJGFjX2N0X1NUUklQIiA+JjY7IH0KLWVsc2UKLSAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6IG5vIiA+JjUKLSRhc19lY2hvICJubyIgPiY2OyB9Ci1maQotCi0gIGlmIHRlc3QgIngkYWNfY3RfU1RSSVAiID0geDsgdGhlbgotICAgIFNUUklQPSI6IgotICBlbHNlCi0gICAgY2FzZSAkY3Jvc3NfY29tcGlsaW5nOiRhY190b29sX3dhcm5lZCBpbgoteWVzOikKLXsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogV0FSTklORzogdXNpbmcgY3Jvc3MgdG9vbHMgbm90IHByZWZpeGVkIHdpdGggaG9zdCB0cmlwbGV0IiA+JjUKLSRhc19lY2hvICIkYXNfbWU6IFdBUk5JTkc6IHVzaW5nIGNyb3NzIHRvb2xzIG5vdCBwcmVmaXhlZCB3aXRoIGhvc3QgdHJpcGxldCIgPiYyO30KLWFjX3Rvb2xfd2FybmVkPXllcyA7OwotZXNhYwotICAgIFNUUklQPSRhY19jdF9TVFJJUAotICBmaQotZWxzZQotICBTVFJJUD0iJGFjX2N2X3Byb2dfU1RSSVAiCi1maQotCi10ZXN0IC16ICIkU1RSSVAiICYmIFNUUklQPToKLQotCi0KLQotCi0KLWlmIHRlc3QgLW4gIiRhY190b29sX3ByZWZpeCI7IHRoZW4KLSAgIyBFeHRyYWN0IHRoZSBmaXJzdCB3b3JkIG9mICIke2FjX3Rvb2xfcHJlZml4fXJhbmxpYiIsIHNvIGl0IGNhbiBiZSBhIHByb2dyYW0gbmFtZSB3aXRoIGFyZ3MuCi1zZXQgZHVtbXkgJHthY190b29sX3ByZWZpeH1yYW5saWI7IGFjX3dvcmQ9JDIKLXsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgZm9yICRhY193b3JkIiA+JjUKLSRhc19lY2hvX24gImNoZWNraW5nIGZvciAkYWNfd29yZC4uLiAiID4mNjsgfQotaWYgJHthY19jdl9wcm9nX1JBTkxJQis6fSBmYWxzZTsgdGhlbiA6Ci0gICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2Ci1lbHNlCi0gIGlmIHRlc3QgLW4gIiRSQU5MSUIiOyB0aGVuCi0gIGFjX2N2X3Byb2dfUkFOTElCPSIkUkFOTElCIiAjIExldCB0aGUgdXNlciBvdmVycmlkZSB0aGUgdGVzdC4KLWVsc2UKLWFzX3NhdmVfSUZTPSRJRlM7IElGUz0kUEFUSF9TRVBBUkFUT1IKLWZvciBhc19kaXIgaW4gJFBBVEgKLWRvCi0gIElGUz0kYXNfc2F2ZV9JRlMKLSAgdGVzdCAteiAiJGFzX2RpciIgJiYgYXNfZGlyPS4KLSAgICBmb3IgYWNfZXhlY19leHQgaW4gJycgJGFjX2V4ZWN1dGFibGVfZXh0ZW5zaW9uczsgZG8KLSAgaWYgeyB0ZXN0IC1mICIkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IiAmJiAkYXNfdGVzdF94ICIkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IjsgfTsgdGhlbgotICAgIGFjX2N2X3Byb2dfUkFOTElCPSIke2FjX3Rvb2xfcHJlZml4fXJhbmxpYiIKLSAgICAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBmb3VuZCAkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IiA+JjUKLSAgICBicmVhayAyCi0gIGZpCi1kb25lCi0gIGRvbmUKLUlGUz0kYXNfc2F2ZV9JRlMKLQotZmkKLWZpCi1SQU5MSUI9JGFjX2N2X3Byb2dfUkFOTElCCi1pZiB0ZXN0IC1uICIkUkFOTElCIjsgdGhlbgotICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJFJBTkxJQiIgPiY1Ci0kYXNfZWNobyAiJFJBTkxJQiIgPiY2OyB9Ci1lbHNlCi0gIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiBubyIgPiY1Ci0kYXNfZWNobyAibm8iID4mNjsgfQotZmkKLQotCi1maQotaWYgdGVzdCAteiAiJGFjX2N2X3Byb2dfUkFOTElCIjsgdGhlbgotICBhY19jdF9SQU5MSUI9JFJBTkxJQgotICAjIEV4dHJhY3QgdGhlIGZpcnN0IHdvcmQgb2YgInJhbmxpYiIsIHNvIGl0IGNhbiBiZSBhIHByb2dyYW0gbmFtZSB3aXRoIGFyZ3MuCi1zZXQgZHVtbXkgcmFubGliOyBhY193b3JkPSQyCi17ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGZvciAkYWNfd29yZCIgPiY1Ci0kYXNfZWNob19uICJjaGVja2luZyBmb3IgJGFjX3dvcmQuLi4gIiA+JjY7IH0KLWlmICR7YWNfY3ZfcHJvZ19hY19jdF9SQU5MSUIrOn0gZmFsc2U7IHRoZW4gOgotICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgotZWxzZQotICBpZiB0ZXN0IC1uICIkYWNfY3RfUkFOTElCIjsgdGhlbgotICBhY19jdl9wcm9nX2FjX2N0X1JBTkxJQj0iJGFjX2N0X1JBTkxJQiIgIyBMZXQgdGhlIHVzZXIgb3ZlcnJpZGUgdGhlIHRlc3QuCi1lbHNlCi1hc19zYXZlX0lGUz0kSUZTOyBJRlM9JFBBVEhfU0VQQVJBVE9SCi1mb3IgYXNfZGlyIGluICRQQVRICi1kbwotICBJRlM9JGFzX3NhdmVfSUZTCi0gIHRlc3QgLXogIiRhc19kaXIiICYmIGFzX2Rpcj0uCi0gICAgZm9yIGFjX2V4ZWNfZXh0IGluICcnICRhY19leGVjdXRhYmxlX2V4dGVuc2lvbnM7IGRvCi0gIGlmIHsgdGVzdCAtZiAiJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCIgJiYgJGFzX3Rlc3RfeCAiJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCI7IH07IHRoZW4KLSAgICBhY19jdl9wcm9nX2FjX2N0X1JBTkxJQj0icmFubGliIgotICAgICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGZvdW5kICRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiID4mNQotICAgIGJyZWFrIDIKLSAgZmkKLWRvbmUKLSAgZG9uZQotSUZTPSRhc19zYXZlX0lGUwotCi1maQotZmkKLWFjX2N0X1JBTkxJQj0kYWNfY3ZfcHJvZ19hY19jdF9SQU5MSUIKLWlmIHRlc3QgLW4gIiRhY19jdF9SQU5MSUIiOyB0aGVuCi0gIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkYWNfY3RfUkFOTElCIiA+JjUKLSRhc19lY2hvICIkYWNfY3RfUkFOTElCIiA+JjY7IH0KLWVsc2UKLSAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6IG5vIiA+JjUKLSRhc19lY2hvICJubyIgPiY2OyB9Ci1maQotCi0gIGlmIHRlc3QgIngkYWNfY3RfUkFOTElCIiA9IHg7IHRoZW4KLSAgICBSQU5MSUI9IjoiCi0gIGVsc2UKLSAgICBjYXNlICRjcm9zc19jb21waWxpbmc6JGFjX3Rvb2xfd2FybmVkIGluCi15ZXM6KQoteyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBXQVJOSU5HOiB1c2luZyBjcm9zcyB0b29scyBub3QgcHJlZml4ZWQgd2l0aCBob3N0IHRyaXBsZXQiID4mNQotJGFzX2VjaG8gIiRhc19tZTogV0FSTklORzogdXNpbmcgY3Jvc3MgdG9vbHMgbm90IHByZWZpeGVkIHdpdGggaG9zdCB0cmlwbGV0IiA+JjI7fQotYWNfdG9vbF93YXJuZWQ9eWVzIDs7Ci1lc2FjCi0gICAgUkFOTElCPSRhY19jdF9SQU5MSUIKLSAgZmkKLWVsc2UKLSAgUkFOTElCPSIkYWNfY3ZfcHJvZ19SQU5MSUIiCi1maQotCi10ZXN0IC16ICIkUkFOTElCIiAmJiBSQU5MSUI9OgotCi0KLQotCi0KLQotIyBEZXRlcm1pbmUgY29tbWFuZHMgdG8gY3JlYXRlIG9sZC1zdHlsZSBzdGF0aWMgYXJjaGl2ZXMuCi1vbGRfYXJjaGl2ZV9jbWRzPSckQVIgJEFSX0ZMQUdTICRvbGRsaWIkb2xkb2JqcycKLW9sZF9wb3N0aW5zdGFsbF9jbWRzPSdjaG1vZCA2NDQgJG9sZGxpYicKLW9sZF9wb3N0dW5pbnN0YWxsX2NtZHM9Ci0KLWlmIHRlc3QgLW4gIiRSQU5MSUIiOyB0aGVuCi0gIGNhc2UgJGhvc3Rfb3MgaW4KLSAgb3BlbmJzZCopCi0gICAgb2xkX3Bvc3RpbnN0YWxsX2NtZHM9IiRvbGRfcG9zdGluc3RhbGxfY21kc35cJFJBTkxJQiAtdCBcJG9sZGxpYiIKLSAgICA7OwotICAqKQotICAgIG9sZF9wb3N0aW5zdGFsbF9jbWRzPSIkb2xkX3Bvc3RpbnN0YWxsX2NtZHN+XCRSQU5MSUIgXCRvbGRsaWIiCi0gICAgOzsKLSAgZXNhYwotICBvbGRfYXJjaGl2ZV9jbWRzPSIkb2xkX2FyY2hpdmVfY21kc35cJFJBTkxJQiBcJG9sZGxpYiIKLWZpCi0KLWNhc2UgJGhvc3Rfb3MgaW4KLSAgZGFyd2luKikKLSAgICBsb2NrX29sZF9hcmNoaXZlX2V4dHJhY3Rpb249eWVzIDs7Ci0gICopCi0gICAgbG9ja19vbGRfYXJjaGl2ZV9leHRyYWN0aW9uPW5vIDs7Ci1lc2FjCi0KLQotCi0KLQotCi0KLQotCi0KLQotCi0KLQotCi0KLQotCi0KLQotCi0KLQotCi0KLQotCi0KLQotCi0KLQotCi0KLQotCi0KLQotCi0jIElmIG5vIEMgY29tcGlsZXIgd2FzIHNwZWNpZmllZCwgdXNlIENDLgotTFRDQz0ke0xUQ0MtIiRDQyJ9Ci0KLSMgSWYgbm8gQyBjb21waWxlciBmbGFncyB3ZXJlIHNwZWNpZmllZCwgdXNlIENGTEFHUy4KLUxUQ0ZMQUdTPSR7TFRDRkxBR1MtIiRDRkxBR1MifQotCi0jIEFsbG93IENDIHRvIGJlIGEgcHJvZ3JhbSBuYW1lIHdpdGggYXJndW1lbnRzLgotY29tcGlsZXI9JENDCi0KLQotIyBDaGVjayBmb3IgY29tbWFuZCB0byBncmFiIHRoZSByYXcgc3ltYm9sIG5hbWUgZm9sbG93ZWQgYnkgQyBzeW1ib2wgZnJvbSBubS4KLXsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgY29tbWFuZCB0byBwYXJzZSAkTk0gb3V0cHV0IGZyb20gJGNvbXBpbGVyIG9iamVjdCIgPiY1Ci0kYXNfZWNob19uICJjaGVja2luZyBjb21tYW5kIHRvIHBhcnNlICROTSBvdXRwdXQgZnJvbSAkY29tcGlsZXIgb2JqZWN0Li4uICIgPiY2OyB9Ci1pZiAke2x0X2N2X3N5c19nbG9iYWxfc3ltYm9sX3BpcGUrOn0gZmFsc2U7IHRoZW4gOgotICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgotZWxzZQotCi0jIFRoZXNlIGFyZSBzYW5lIGRlZmF1bHRzIHRoYXQgd29yayBvbiBhdCBsZWFzdCBhIGZldyBvbGQgc3lzdGVtcy4KLSMgW1RoZXkgY29tZSBmcm9tIFVsdHJpeC4gIFdoYXQgY291bGQgYmUgb2xkZXIgdGhhbiBVbHRyaXg/ISEgOyldCi0KLSMgQ2hhcmFjdGVyIGNsYXNzIGRlc2NyaWJpbmcgTk0gZ2xvYmFsIHN5bWJvbCBjb2Rlcy4KLXN5bWNvZGU9J1tCQ0RFR1JTVF0nCi0KLSMgUmVnZXhwIHRvIG1hdGNoIHN5bWJvbHMgdGhhdCBjYW4gYmUgYWNjZXNzZWQgZGlyZWN0bHkgZnJvbSBDLgotc3ltcGF0PSdcKFtfQS1aYS16XVtfQS1aYS16MC05XSpcKScKLQotIyBEZWZpbmUgc3lzdGVtLXNwZWNpZmljIHZhcmlhYmxlcy4KLWNhc2UgJGhvc3Rfb3MgaW4KLWFpeCopCi0gIHN5bWNvZGU9J1tCQ0RUXScKLSAgOzsKLWN5Z3dpbiogfCBtaW5ndyogfCBwdzMyKiB8IGNlZ2NjKikKLSAgc3ltY29kZT0nW0FCQ0RHSVNUV10nCi0gIDs7Ci1ocHV4KikKLSAgaWYgdGVzdCAiJGhvc3RfY3B1IiA9IGlhNjQ7IHRoZW4KLSAgICBzeW1jb2RlPSdbQUJDREVHUlNUXScKLSAgZmkKLSAgOzsKLWlyaXgqIHwgbm9uc3RvcHV4KikKLSAgc3ltY29kZT0nW0JDREVHUlNUXScKLSAgOzsKLW9zZiopCi0gIHN5bWNvZGU9J1tCQ0RFR1FSU1RdJwotICA7Owotc29sYXJpcyopCi0gIHN5bWNvZGU9J1tCRFJUXScKLSAgOzsKLXNjbzMuMnY1KikKLSAgc3ltY29kZT0nW0RUXScKLSAgOzsKLXN5c3Y0LjJ1dzIqKQotICBzeW1jb2RlPSdbRFRdJwotICA7Owotc3lzdjUqIHwgc2NvNXY2KiB8IHVuaXh3YXJlKiB8IE9wZW5VTklYKikKLSAgc3ltY29kZT0nW0FCRFRdJwotICA7Owotc3lzdjQpCi0gIHN5bWNvZGU9J1tERk5TVFVdJwotICA7OwotZXNhYwotCi0jIElmIHdlJ3JlIHVzaW5nIEdOVSBubSwgdGhlbiB1c2UgaXRzIHN0YW5kYXJkIHN5bWJvbCBjb2Rlcy4KLWNhc2UgYCROTSAtViAyPiYxYCBpbgotKkdOVSogfCAqJ3dpdGggQkZEJyopCi0gIHN5bWNvZGU9J1tBQkNER0lSU1RXXScgOzsKLWVzYWMKLQotIyBUcmFuc2Zvcm0gYW4gZXh0cmFjdGVkIHN5bWJvbCBsaW5lIGludG8gYSBwcm9wZXIgQyBkZWNsYXJhdGlvbi4KLSMgU29tZSBzeXN0ZW1zIChlc3AuIG9uIGlhNjQpIGxpbmsgZGF0YSBhbmQgY29kZSBzeW1ib2xzIGRpZmZlcmVudGx5LAotIyBzbyB1c2UgdGhpcyBnZW5lcmFsIGFwcHJvYWNoLgotbHRfY3Zfc3lzX2dsb2JhbF9zeW1ib2xfdG9fY2RlY2w9InNlZCAtbiAtZSAncy9eVCAuKiBcKC4qXCkkL2V4dGVybiBpbnQgXDEoKTsvcCcgLWUgJ3MvXiRzeW1jb2RlKiAuKiBcKC4qXCkkL2V4dGVybiBjaGFyIFwxOy9wJyIKLQotIyBUcmFuc2Zvcm0gYW4gZXh0cmFjdGVkIHN5bWJvbCBsaW5lIGludG8gc3ltYm9sIG5hbWUgYW5kIHN5bWJvbCBhZGRyZXNzCi1sdF9jdl9zeXNfZ2xvYmFsX3N5bWJvbF90b19jX25hbWVfYWRkcmVzcz0ic2VkIC1uIC1lICdzL146IFwoW14gXSpcKVsgXSokLyAge1xcXCJcMVxcXCIsICh2b2lkICopIDB9LC9wJyAtZSAncy9eJHN5bWNvZGUqIFwoW14gXSpcKSBcKFteIF0qXCkkLyAge1wiXDJcIiwgKHZvaWQgKikgXCZcMn0sL3AnIgotbHRfY3Zfc3lzX2dsb2JhbF9zeW1ib2xfdG9fY19uYW1lX2FkZHJlc3NfbGliX3ByZWZpeD0ic2VkIC1uIC1lICdzL146IFwoW14gXSpcKVsgXSokLyAge1xcXCJcMVxcXCIsICh2b2lkICopIDB9LC9wJyAtZSAncy9eJHN5bWNvZGUqIFwoW14gXSpcKSBcKGxpYlteIF0qXCkkLyAge1wiXDJcIiwgKHZvaWQgKikgXCZcMn0sL3AnIC1lICdzL14kc3ltY29kZSogXChbXiBdKlwpIFwoW14gXSpcKSQvICB7XCJsaWJcMlwiLCAodm9pZCAqKSBcJlwyfSwvcCciCi0KLSMgSGFuZGxlIENSTEYgaW4gbWluZ3cgdG9vbCBjaGFpbgotb3B0X2NyPQotY2FzZSAkYnVpbGRfb3MgaW4KLW1pbmd3KikKLSAgb3B0X2NyPWAkRUNITyAneFx7MCwxXH0nIHwgdHIgeCAnXDAxNSdgICMgb3B0aW9uIGNyIGluIHJlZ2V4cAotICA7OwotZXNhYwotCi0jIFRyeSB3aXRob3V0IGEgcHJlZml4IHVuZGVyc2NvcmUsIHRoZW4gd2l0aCBpdC4KLWZvciBhY19zeW1wcmZ4IGluICIiICJfIjsgZG8KLQotICAjIFRyYW5zZm9ybSBzeW1jb2RlLCBzeW1wYXQsIGFuZCBzeW1wcmZ4IGludG8gYSByYXcgc3ltYm9sIGFuZCBhIEMgc3ltYm9sLgotICBzeW14ZnJtPSJcXDEgJGFjX3N5bXByZnhcXDIgXFwyIgotCi0gICMgV3JpdGUgdGhlIHJhdyBhbmQgQyBpZGVudGlmaWVycy4KLSAgaWYgdGVzdCAiJGx0X2N2X25tX2ludGVyZmFjZSIgPSAiTVMgZHVtcGJpbiI7IHRoZW4KLSAgICAjIEZha2UgaXQgZm9yIGR1bXBiaW4gYW5kIHNheSBUIGZvciBhbnkgbm9uLXN0YXRpYyBmdW5jdGlvbgotICAgICMgYW5kIEQgZm9yIGFueSBnbG9iYWwgdmFyaWFibGUuCi0gICAgIyBBbHNvIGZpbmQgQysrIGFuZCBfX2Zhc3RjYWxsIHN5bWJvbHMgZnJvbSBNU1ZDKyssCi0gICAgIyB3aGljaCBzdGFydCB3aXRoIEAgb3IgPy4KLSAgICBsdF9jdl9zeXNfZ2xvYmFsX3N5bWJvbF9waXBlPSIkQVdLICciXAotIiAgICAge2xhc3Rfc2VjdGlvbj1zZWN0aW9uOyBzZWN0aW9uPVwkIDN9OyJcCi0iICAgICAvU2VjdGlvbiBsZW5ndGggLiojcmVsb2NzLioocGljayBhbnkpL3toaWRlW2xhc3Rfc2VjdGlvbl09MX07IlwKLSIgICAgIFwkIDAhfi9FeHRlcm5hbCAqXHwve25leHR9OyJcCi0iICAgICAvIDArIFVOREVGIC97bmV4dH07IC8gVU5ERUYgXChbXnxdXCkqKCkve25leHR9OyJcCi0iICAgICB7aWYoaGlkZVtzZWN0aW9uXSkgbmV4dH07IlwKLSIgICAgIHtmPTB9OyBcJCAwfi9cKFwpLipcfC97Zj0xfTsge3ByaW50ZiBmID8gXCJUIFwiIDogXCJEIFwifTsiXAotIiAgICAge3NwbGl0KFwkIDAsIGEsIC9cfHxcci8pOyBzcGxpdChhWzJdLCBzKX07IlwKLSIgICAgIHNbMV1+L15bQD9dL3twcmludCBzWzFdLCBzWzFdOyBuZXh0fTsiXAotIiAgICAgc1sxXX5wcmZ4IHtzcGxpdChzWzFdLHQsXCJAXCIpOyBwcmludCB0WzFdLCBzdWJzdHIodFsxXSxsZW5ndGgocHJmeCkpfSJcCi0iICAgICAnIHByZng9XiRhY19zeW1wcmZ4IgotICBlbHNlCi0gICAgbHRfY3Zfc3lzX2dsb2JhbF9zeW1ib2xfcGlwZT0ic2VkIC1uIC1lICdzL14uKlsJIF1cKCRzeW1jb2RlJHN5bWNvZGUqXClbCSBdWwkgXSokYWNfc3ltcHJmeCRzeW1wYXQkb3B0X2NyJC8kc3lteGZybS9wJyIKLSAgZmkKLSAgbHRfY3Zfc3lzX2dsb2JhbF9zeW1ib2xfcGlwZT0iJGx0X2N2X3N5c19nbG9iYWxfc3ltYm9sX3BpcGUgfCBzZWQgJy8gX19nbnVfbHRvL2QnIgotCi0gICMgQ2hlY2sgdG8gc2VlIHRoYXQgdGhlIHBpcGUgd29ya3MgY29ycmVjdGx5LgotICBwaXBlX3dvcmtzPW5vCi0KLSAgcm0gLWYgY29uZnRlc3QqCi0gIGNhdCA+IGNvbmZ0ZXN0LiRhY19leHQgPDxfTFRfRU9GCi0jaWZkZWYgX19jcGx1c3BsdXMKLWV4dGVybiAiQyIgewotI2VuZGlmCi1jaGFyIG5tX3Rlc3RfdmFyOwotdm9pZCBubV90ZXN0X2Z1bmModm9pZCk7Ci12b2lkIG5tX3Rlc3RfZnVuYyh2b2lkKXt9Ci0jaWZkZWYgX19jcGx1c3BsdXMKLX0KLSNlbmRpZgotaW50IG1haW4oKXtubV90ZXN0X3Zhcj0nYSc7bm1fdGVzdF9mdW5jKCk7cmV0dXJuKDApO30KLV9MVF9FT0YKLQotICBpZiB7IHsgZXZhbCBlY2hvICJcIlwkYXNfbWVcIjoke2FzX2xpbmVuby0kTElORU5PfTogXCIkYWNfY29tcGlsZVwiIjsgfSA+JjUKLSAgKGV2YWwgJGFjX2NvbXBpbGUpIDI+JjUKLSAgYWNfc3RhdHVzPSQ/Ci0gICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IFwkPyA9ICRhY19zdGF0dXMiID4mNQotICB0ZXN0ICRhY19zdGF0dXMgPSAwOyB9OyB0aGVuCi0gICAgIyBOb3cgdHJ5IHRvIGdyYWIgdGhlIHN5bWJvbHMuCi0gICAgbmxpc3Q9Y29uZnRlc3Qubm0KLSAgICBpZiB7IHsgZXZhbCBlY2hvICJcIlwkYXNfbWVcIjoke2FzX2xpbmVuby0kTElORU5PfTogXCIkTk0gY29uZnRlc3QuJGFjX29iamV4dCBcfCAiJGx0X2N2X3N5c19nbG9iYWxfc3ltYm9sX3BpcGUiIFw+ICRubGlzdFwiIjsgfSA+JjUKLSAgKGV2YWwgJE5NIGNvbmZ0ZXN0LiRhY19vYmpleHQgXHwgIiRsdF9jdl9zeXNfZ2xvYmFsX3N5bWJvbF9waXBlIiBcPiAkbmxpc3QpIDI+JjUKLSAgYWNfc3RhdHVzPSQ/Ci0gICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IFwkPyA9ICRhY19zdGF0dXMiID4mNQotICB0ZXN0ICRhY19zdGF0dXMgPSAwOyB9ICYmIHRlc3QgLXMgIiRubGlzdCI7IHRoZW4KLSAgICAgICMgVHJ5IHNvcnRpbmcgYW5kIHVuaXF1aWZ5aW5nIHRoZSBvdXRwdXQuCi0gICAgICBpZiBzb3J0ICIkbmxpc3QiIHwgdW5pcSA+ICIkbmxpc3QiVDsgdGhlbgotCW12IC1mICIkbmxpc3QiVCAiJG5saXN0IgotICAgICAgZWxzZQotCXJtIC1mICIkbmxpc3QiVAotICAgICAgZmkKLQotICAgICAgIyBNYWtlIHN1cmUgdGhhdCB3ZSBzbmFnZ2VkIGFsbCB0aGUgc3ltYm9scyB3ZSBuZWVkLgotICAgICAgaWYgJEdSRVAgJyBubV90ZXN0X3ZhciQnICIkbmxpc3QiID4vZGV2L251bGw7IHRoZW4KLQlpZiAkR1JFUCAnIG5tX3Rlc3RfZnVuYyQnICIkbmxpc3QiID4vZGV2L251bGw7IHRoZW4KLQkgIGNhdCA8PF9MVF9FT0YgPiBjb25mdGVzdC4kYWNfZXh0Ci0vKiBLZWVwIHRoaXMgY29kZSBpbiBzeW5jIGJldHdlZW4gbGlidG9vbC5tNCwgbHRtYWluLCBsdF9zeXN0ZW0uaCwgYW5kIHRlc3RzLiAgKi8KLSNpZiBkZWZpbmVkKF9XSU4zMikgfHwgZGVmaW5lZChfX0NZR1dJTl9fKSB8fCBkZWZpbmVkKF9XSU4zMl9XQ0UpCi0vKiBEQVRBIGltcG9ydHMgZnJvbSBETExzIG9uIFdJTjMyIGNvbid0IGJlIGNvbnN0LCBiZWNhdXNlIHJ1bnRpbWUKLSAgIHJlbG9jYXRpb25zIGFyZSBwZXJmb3JtZWQgLS0gc2VlIGxkJ3MgZG9jdW1lbnRhdGlvbiBvbiBwc2V1ZG8tcmVsb2NzLiAgKi8KLSMgZGVmaW5lIExUX0RMU1lNX0NPTlNUCi0jZWxpZiBkZWZpbmVkKF9fb3NmX18pCi0vKiBUaGlzIHN5c3RlbSBkb2VzIG5vdCBjb3BlIHdlbGwgd2l0aCByZWxvY2F0aW9ucyBpbiBjb25zdCBkYXRhLiAgKi8KLSMgZGVmaW5lIExUX0RMU1lNX0NPTlNUCi0jZWxzZQotIyBkZWZpbmUgTFRfRExTWU1fQ09OU1QgY29uc3QKLSNlbmRpZgotCi0jaWZkZWYgX19jcGx1c3BsdXMKLWV4dGVybiAiQyIgewotI2VuZGlmCi0KLV9MVF9FT0YKLQkgICMgTm93IGdlbmVyYXRlIHRoZSBzeW1ib2wgZmlsZS4KLQkgIGV2YWwgIiRsdF9jdl9zeXNfZ2xvYmFsX3N5bWJvbF90b19jZGVjbCInIDwgIiRubGlzdCIgfCAkR1JFUCAtdiBtYWluID4+IGNvbmZ0ZXN0LiRhY19leHQnCi0KLQkgIGNhdCA8PF9MVF9FT0YgPj4gY29uZnRlc3QuJGFjX2V4dAotCi0vKiBUaGUgbWFwcGluZyBiZXR3ZWVuIHN5bWJvbCBuYW1lcyBhbmQgc3ltYm9scy4gICovCi1MVF9ETFNZTV9DT05TVCBzdHJ1Y3QgewotICBjb25zdCBjaGFyICpuYW1lOwotICB2b2lkICAgICAgICphZGRyZXNzOwotfQotbHRfX1BST0dSQU1fX0xUWF9wcmVsb2FkZWRfc3ltYm9sc1tdID0KLXsKLSAgeyAiQFBST0dSQU1AIiwgKHZvaWQgKikgMCB9LAotX0xUX0VPRgotCSAgJFNFRCAicy9eJHN5bWNvZGUkc3ltY29kZSogXCguKlwpIFwoLipcKSQvICB7XCJcMlwiLCAodm9pZCAqKSBcJlwyfSwvIiA8ICIkbmxpc3QiIHwgJEdSRVAgLXYgbWFpbiA+PiBjb25mdGVzdC4kYWNfZXh0Ci0JICBjYXQgPDxcX0xUX0VPRiA+PiBjb25mdGVzdC4kYWNfZXh0Ci0gIHswLCAodm9pZCAqKSAwfQotfTsKLQotLyogVGhpcyB3b3JrcyBhcm91bmQgYSBwcm9ibGVtIGluIEZyZWVCU0QgbGlua2VyICovCi0jaWZkZWYgRlJFRUJTRF9XT1JLQVJPVU5ECi1zdGF0aWMgY29uc3Qgdm9pZCAqbHRfcHJlbG9hZGVkX3NldHVwKCkgewotICByZXR1cm4gbHRfX1BST0dSQU1fX0xUWF9wcmVsb2FkZWRfc3ltYm9sczsKLX0KLSNlbmRpZgotCi0jaWZkZWYgX19jcGx1c3BsdXMKLX0KLSNlbmRpZgotX0xUX0VPRgotCSAgIyBOb3cgdHJ5IGxpbmtpbmcgdGhlIHR3byBmaWxlcy4KLQkgIG12IGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRzdG0uJGFjX29iamV4dAotCSAgbHRfZ2xvYnN5bV9zYXZlX0xJQlM9JExJQlMKLQkgIGx0X2dsb2JzeW1fc2F2ZV9DRkxBR1M9JENGTEFHUwotCSAgTElCUz0iY29uZnRzdG0uJGFjX29iamV4dCIKLQkgIENGTEFHUz0iJENGTEFHUyRsdF9wcm9nX2NvbXBpbGVyX25vX2J1aWx0aW5fZmxhZyIKLQkgIGlmIHsgeyBldmFsIGVjaG8gIlwiXCRhc19tZVwiOiR7YXNfbGluZW5vLSRMSU5FTk99OiBcIiRhY19saW5rXCIiOyB9ID4mNQotICAoZXZhbCAkYWNfbGluaykgMj4mNQotICBhY19zdGF0dXM9JD8KLSAgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1Ci0gIHRlc3QgJGFjX3N0YXR1cyA9IDA7IH0gJiYgdGVzdCAtcyBjb25mdGVzdCR7YWNfZXhlZXh0fTsgdGhlbgotCSAgICBwaXBlX3dvcmtzPXllcwotCSAgZmkKLQkgIExJQlM9JGx0X2dsb2JzeW1fc2F2ZV9MSUJTCi0JICBDRkxBR1M9JGx0X2dsb2JzeW1fc2F2ZV9DRkxBR1MKLQllbHNlCi0JICBlY2hvICJjYW5ub3QgZmluZCBubV90ZXN0X2Z1bmMgaW4gJG5saXN0IiA+JjUKLQlmaQotICAgICAgZWxzZQotCWVjaG8gImNhbm5vdCBmaW5kIG5tX3Rlc3RfdmFyIGluICRubGlzdCIgPiY1Ci0gICAgICBmaQotICAgIGVsc2UKLSAgICAgIGVjaG8gImNhbm5vdCBydW4gJGx0X2N2X3N5c19nbG9iYWxfc3ltYm9sX3BpcGUiID4mNQotICAgIGZpCi0gIGVsc2UKLSAgICBlY2hvICIkcHJvZ25hbWU6IGZhaWxlZCBwcm9ncmFtIHdhczoiID4mNQotICAgIGNhdCBjb25mdGVzdC4kYWNfZXh0ID4mNQotICBmaQotICBybSAtcmYgY29uZnRlc3QqIGNvbmZ0c3QqCi0KLSAgIyBEbyBub3QgdXNlIHRoZSBnbG9iYWxfc3ltYm9sX3BpcGUgdW5sZXNzIGl0IHdvcmtzLgotICBpZiB0ZXN0ICIkcGlwZV93b3JrcyIgPSB5ZXM7IHRoZW4KLSAgICBicmVhawotICBlbHNlCi0gICAgbHRfY3Zfc3lzX2dsb2JhbF9zeW1ib2xfcGlwZT0KLSAgZmkKLWRvbmUKLQotZmkKLQotaWYgdGVzdCAteiAiJGx0X2N2X3N5c19nbG9iYWxfc3ltYm9sX3BpcGUiOyB0aGVuCi0gIGx0X2N2X3N5c19nbG9iYWxfc3ltYm9sX3RvX2NkZWNsPQotZmkKLWlmIHRlc3QgLXogIiRsdF9jdl9zeXNfZ2xvYmFsX3N5bWJvbF9waXBlJGx0X2N2X3N5c19nbG9iYWxfc3ltYm9sX3RvX2NkZWNsIjsgdGhlbgotICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogZmFpbGVkIiA+JjUKLSRhc19lY2hvICJmYWlsZWQiID4mNjsgfQotZWxzZQotICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogb2siID4mNQotJGFzX2VjaG8gIm9rIiA+JjY7IH0KLWZpCi0KLSMgUmVzcG9uc2UgZmlsZSBzdXBwb3J0LgotaWYgdGVzdCAiJGx0X2N2X25tX2ludGVyZmFjZSIgPSAiTVMgZHVtcGJpbiI7IHRoZW4KLSAgbm1fZmlsZV9saXN0X3NwZWM9J0AnCi1lbGlmICROTSAtLWhlbHAgMj4vZGV2L251bGwgfCBncmVwICdbQF1GSUxFJyA+L2Rldi9udWxsOyB0aGVuCi0gIG5tX2ZpbGVfbGlzdF9zcGVjPSdAJwotZmkKLQotCi0KLQotCi0KLQotCi0KLQotCi0KLQotCi0KLQotCi0KLQotCi0KLQotCi0KLQotCi0KLXsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgZm9yIHN5c3Jvb3QiID4mNQotJGFzX2VjaG9fbiAiY2hlY2tpbmcgZm9yIHN5c3Jvb3QuLi4gIiA+JjY7IH0KLQotIyBDaGVjayB3aGV0aGVyIC0td2l0aC1zeXNyb290IHdhcyBnaXZlbi4KLWlmIHRlc3QgIiR7d2l0aF9zeXNyb290K3NldH0iID0gc2V0OyB0aGVuIDoKLSAgd2l0aHZhbD0kd2l0aF9zeXNyb290OwotZWxzZQotICB3aXRoX3N5c3Jvb3Q9bm8KLWZpCi0KLQotbHRfc3lzcm9vdD0KLWNhc2UgJHt3aXRoX3N5c3Jvb3R9IGluICMoCi0geWVzKQotICAgaWYgdGVzdCAiJEdDQyIgPSB5ZXM7IHRoZW4KLSAgICAgbHRfc3lzcm9vdD1gJENDIC0tcHJpbnQtc3lzcm9vdCAyPi9kZXYvbnVsbGAKLSAgIGZpCi0gICA7OyAjKAotIC8qKQotICAgbHRfc3lzcm9vdD1gZWNobyAiJHdpdGhfc3lzcm9vdCIgfCBzZWQgLWUgIiRzZWRfcXVvdGVfc3Vic3QiYAotICAgOzsgIygKLSBub3wnJykKLSAgIDs7ICMoCi0gKikKLSAgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAke3dpdGhfc3lzcm9vdH0iID4mNQotJGFzX2VjaG8gIiR7d2l0aF9zeXNyb290fSIgPiY2OyB9Ci0gICBhc19mbl9lcnJvciAkPyAiVGhlIHN5c3Jvb3QgbXVzdCBiZSBhbiBhYnNvbHV0ZSBwYXRoLiIgIiRMSU5FTk8iIDUKLSAgIDs7Ci1lc2FjCi0KLSB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJHtsdF9zeXNyb290Oi1ub30iID4mNQotJGFzX2VjaG8gIiR7bHRfc3lzcm9vdDotbm99IiA+JjY7IH0KLQotCi0KLQotCi0jIENoZWNrIHdoZXRoZXIgLS1lbmFibGUtbGlidG9vbC1sb2NrIHdhcyBnaXZlbi4KLWlmIHRlc3QgIiR7ZW5hYmxlX2xpYnRvb2xfbG9jaytzZXR9IiA9IHNldDsgdGhlbiA6Ci0gIGVuYWJsZXZhbD0kZW5hYmxlX2xpYnRvb2xfbG9jazsKLWZpCi0KLXRlc3QgIngkZW5hYmxlX2xpYnRvb2xfbG9jayIgIT0geG5vICYmIGVuYWJsZV9saWJ0b29sX2xvY2s9eWVzCi0KLSMgU29tZSBmbGFncyBuZWVkIHRvIGJlIHByb3BhZ2F0ZWQgdG8gdGhlIGNvbXBpbGVyIG9yIGxpbmtlciBmb3IgZ29vZAotIyBsaWJ0b29sIHN1cHBvcnQuCi1jYXNlICRob3N0IGluCi1pYTY0LSotaHB1eCopCi0gICMgRmluZCBvdXQgd2hpY2ggQUJJIHdlIGFyZSB1c2luZy4KLSAgZWNobyAnaW50IGk7JyA+IGNvbmZ0ZXN0LiRhY19leHQKLSAgaWYgeyB7IGV2YWwgZWNobyAiXCJcJGFzX21lXCI6JHthc19saW5lbm8tJExJTkVOT306IFwiJGFjX2NvbXBpbGVcIiI7IH0gPiY1Ci0gIChldmFsICRhY19jb21waWxlKSAyPiY1Ci0gIGFjX3N0YXR1cz0kPwotICAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKLSAgdGVzdCAkYWNfc3RhdHVzID0gMDsgfTsgdGhlbgotICAgIGNhc2UgYC91c3IvYmluL2ZpbGUgY29uZnRlc3QuJGFjX29iamV4dGAgaW4KLSAgICAgICpFTEYtMzIqKQotCUhQVVhfSUE2NF9NT0RFPSIzMiIKLQk7OwotICAgICAgKkVMRi02NCopCi0JSFBVWF9JQTY0X01PREU9IjY0IgotCTs7Ci0gICAgZXNhYwotICBmaQotICBybSAtcmYgY29uZnRlc3QqCi0gIDs7Ci0qLSotaXJpeDYqKQotICAjIEZpbmQgb3V0IHdoaWNoIEFCSSB3ZSBhcmUgdXNpbmcuCi0gIGVjaG8gJyNsaW5lICckTElORU5PJyAiY29uZmlndXJlIicgPiBjb25mdGVzdC4kYWNfZXh0Ci0gIGlmIHsgeyBldmFsIGVjaG8gIlwiXCRhc19tZVwiOiR7YXNfbGluZW5vLSRMSU5FTk99OiBcIiRhY19jb21waWxlXCIiOyB9ID4mNQotICAoZXZhbCAkYWNfY29tcGlsZSkgMj4mNQotICBhY19zdGF0dXM9JD8KLSAgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1Ci0gIHRlc3QgJGFjX3N0YXR1cyA9IDA7IH07IHRoZW4KLSAgICBpZiB0ZXN0ICIkbHRfY3ZfcHJvZ19nbnVfbGQiID0geWVzOyB0aGVuCi0gICAgICBjYXNlIGAvdXNyL2Jpbi9maWxlIGNvbmZ0ZXN0LiRhY19vYmpleHRgIGluCi0JKjMyLWJpdCopCi0JICBMRD0iJHtMRC1sZH0gLW1lbGYzMmJzbWlwIgotCSAgOzsKLQkqTjMyKikKLQkgIExEPSIke0xELWxkfSAtbWVsZjMyYm1pcG4zMiIKLQkgIDs7Ci0JKjY0LWJpdCopCi0JICBMRD0iJHtMRC1sZH0gLW1lbGY2NGJtaXAiCi0JOzsKLSAgICAgIGVzYWMKLSAgICBlbHNlCi0gICAgICBjYXNlIGAvdXNyL2Jpbi9maWxlIGNvbmZ0ZXN0LiRhY19vYmpleHRgIGluCi0JKjMyLWJpdCopCi0JICBMRD0iJHtMRC1sZH0gLTMyIgotCSAgOzsKLQkqTjMyKikKLQkgIExEPSIke0xELWxkfSAtbjMyIgotCSAgOzsKLQkqNjQtYml0KikKLQkgIExEPSIke0xELWxkfSAtNjQiCi0JICA7OwotICAgICAgZXNhYwotICAgIGZpCi0gIGZpCi0gIHJtIC1yZiBjb25mdGVzdCoKLSAgOzsKLQoteDg2XzY0LSprZnJlZWJzZCotZ251fHg4Nl82NC0qbGludXgqfHBwYyotKmxpbnV4Knxwb3dlcnBjKi0qbGludXgqfCBcCi1zMzkwKi0qbGludXgqfHMzOTAqLSp0cGYqfHNwYXJjKi0qbGludXgqKQotICAjIEZpbmQgb3V0IHdoaWNoIEFCSSB3ZSBhcmUgdXNpbmcuCi0gIGVjaG8gJ2ludCBpOycgPiBjb25mdGVzdC4kYWNfZXh0Ci0gIGlmIHsgeyBldmFsIGVjaG8gIlwiXCRhc19tZVwiOiR7YXNfbGluZW5vLSRMSU5FTk99OiBcIiRhY19jb21waWxlXCIiOyB9ID4mNQotICAoZXZhbCAkYWNfY29tcGlsZSkgMj4mNQotICBhY19zdGF0dXM9JD8KLSAgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1Ci0gIHRlc3QgJGFjX3N0YXR1cyA9IDA7IH07IHRoZW4KLSAgICBjYXNlIGAvdXNyL2Jpbi9maWxlIGNvbmZ0ZXN0Lm9gIGluCi0gICAgICAqMzItYml0KikKLQljYXNlICRob3N0IGluCi0JICB4ODZfNjQtKmtmcmVlYnNkKi1nbnUpCi0JICAgIExEPSIke0xELWxkfSAtbSBlbGZfaTM4Nl9mYnNkIgotCSAgICA7OwotCSAgeDg2XzY0LSpsaW51eCopCi0JICAgIExEPSIke0xELWxkfSAtbSBlbGZfaTM4NiIKLQkgICAgOzsKLQkgIHBwYzY0LSpsaW51eCp8cG93ZXJwYzY0LSpsaW51eCopCi0JICAgIExEPSIke0xELWxkfSAtbSBlbGYzMnBwY2xpbnV4IgotCSAgICA7OwotCSAgczM5MHgtKmxpbnV4KikKLQkgICAgTEQ9IiR7TEQtbGR9IC1tIGVsZl9zMzkwIgotCSAgICA7OwotCSAgc3BhcmM2NC0qbGludXgqKQotCSAgICBMRD0iJHtMRC1sZH0gLW0gZWxmMzJfc3BhcmMiCi0JICAgIDs7Ci0JZXNhYwotCTs7Ci0gICAgICAqNjQtYml0KikKLQljYXNlICRob3N0IGluCi0JICB4ODZfNjQtKmtmcmVlYnNkKi1nbnUpCi0JICAgIExEPSIke0xELWxkfSAtbSBlbGZfeDg2XzY0X2Zic2QiCi0JICAgIDs7Ci0JICB4ODZfNjQtKmxpbnV4KikKLQkgICAgTEQ9IiR7TEQtbGR9IC1tIGVsZl94ODZfNjQiCi0JICAgIDs7Ci0JICBwcGMqLSpsaW51eCp8cG93ZXJwYyotKmxpbnV4KikKLQkgICAgTEQ9IiR7TEQtbGR9IC1tIGVsZjY0cHBjIgotCSAgICA7OwotCSAgczM5MCotKmxpbnV4KnxzMzkwKi0qdHBmKikKLQkgICAgTEQ9IiR7TEQtbGR9IC1tIGVsZjY0X3MzOTAiCi0JICAgIDs7Ci0JICBzcGFyYyotKmxpbnV4KikKLQkgICAgTEQ9IiR7TEQtbGR9IC1tIGVsZjY0X3NwYXJjIgotCSAgICA7OwotCWVzYWMKLQk7OwotICAgIGVzYWMKLSAgZmkKLSAgcm0gLXJmIGNvbmZ0ZXN0KgotICA7OwotCi0qLSotc2NvMy4ydjUqKQotICAjIE9uIFNDTyBPcGVuU2VydmVyIDUsIHdlIG5lZWQgLWJlbGYgdG8gZ2V0IGZ1bGwtZmVhdHVyZWQgYmluYXJpZXMuCi0gIFNBVkVfQ0ZMQUdTPSIkQ0ZMQUdTIgotICBDRkxBR1M9IiRDRkxBR1MgLWJlbGYiCi0gIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgd2hldGhlciB0aGUgQyBjb21waWxlciBuZWVkcyAtYmVsZiIgPiY1Ci0kYXNfZWNob19uICJjaGVja2luZyB3aGV0aGVyIHRoZSBDIGNvbXBpbGVyIG5lZWRzIC1iZWxmLi4uICIgPiY2OyB9Ci1pZiAke2x0X2N2X2NjX25lZWRzX2JlbGYrOn0gZmFsc2U7IHRoZW4gOgotICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgotZWxzZQotICBhY19leHQ9YwotYWNfY3BwPSckQ1BQICRDUFBGTEFHUycKLWFjX2NvbXBpbGU9JyRDQyAtYyAkQ0ZMQUdTICRDUFBGTEFHUyBjb25mdGVzdC4kYWNfZXh0ID4mNScKLWFjX2xpbms9JyRDQyAtbyBjb25mdGVzdCRhY19leGVleHQgJENGTEFHUyAkQ1BQRkxBR1MgJExERkxBR1MgY29uZnRlc3QuJGFjX2V4dCAkTElCUyA+JjUnCi1hY19jb21waWxlcl9nbnU9JGFjX2N2X2NfY29tcGlsZXJfZ251Ci0KLSAgICAgY2F0IGNvbmZkZWZzLmggLSA8PF9BQ0VPRiA+Y29uZnRlc3QuJGFjX2V4dAotLyogZW5kIGNvbmZkZWZzLmguICAqLwotCi1pbnQKLW1haW4gKCkKLXsKLQotICA7Ci0gIHJldHVybiAwOwotfQotX0FDRU9GCi1pZiBhY19mbl9jX3RyeV9saW5rICIkTElORU5PIjsgdGhlbiA6Ci0gIGx0X2N2X2NjX25lZWRzX2JlbGY9eWVzCi1lbHNlCi0gIGx0X2N2X2NjX25lZWRzX2JlbGY9bm8KLWZpCi1ybSAtZiBjb3JlIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IFwKLSAgICBjb25mdGVzdCRhY19leGVleHQgY29uZnRlc3QuJGFjX2V4dAotICAgICBhY19leHQ9YwotYWNfY3BwPSckQ1BQICRDUFBGTEFHUycKLWFjX2NvbXBpbGU9JyRDQyAtYyAkQ0ZMQUdTICRDUFBGTEFHUyBjb25mdGVzdC4kYWNfZXh0ID4mNScKLWFjX2xpbms9JyRDQyAtbyBjb25mdGVzdCRhY19leGVleHQgJENGTEFHUyAkQ1BQRkxBR1MgJExERkxBR1MgY29uZnRlc3QuJGFjX2V4dCAkTElCUyA+JjUnCi1hY19jb21waWxlcl9nbnU9JGFjX2N2X2NfY29tcGlsZXJfZ251Ci0KLWZpCi17ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJGx0X2N2X2NjX25lZWRzX2JlbGYiID4mNQotJGFzX2VjaG8gIiRsdF9jdl9jY19uZWVkc19iZWxmIiA+JjY7IH0KLSAgaWYgdGVzdCB4IiRsdF9jdl9jY19uZWVkc19iZWxmIiAhPSB4InllcyI7IHRoZW4KLSAgICAjIHRoaXMgaXMgcHJvYmFibHkgZ2NjIDIuOC4wLCBlZ2NzIDEuMCBvciBuZXdlcjsgbm8gbmVlZCBmb3IgLWJlbGYKLSAgICBDRkxBR1M9IiRTQVZFX0NGTEFHUyIKLSAgZmkKLSAgOzsKLXNwYXJjKi0qc29sYXJpcyopCi0gICMgRmluZCBvdXQgd2hpY2ggQUJJIHdlIGFyZSB1c2luZy4KLSAgZWNobyAnaW50IGk7JyA+IGNvbmZ0ZXN0LiRhY19leHQKLSAgaWYgeyB7IGV2YWwgZWNobyAiXCJcJGFzX21lXCI6JHthc19saW5lbm8tJExJTkVOT306IFwiJGFjX2NvbXBpbGVcIiI7IH0gPiY1Ci0gIChldmFsICRhY19jb21waWxlKSAyPiY1Ci0gIGFjX3N0YXR1cz0kPwotICAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKLSAgdGVzdCAkYWNfc3RhdHVzID0gMDsgfTsgdGhlbgotICAgIGNhc2UgYC91c3IvYmluL2ZpbGUgY29uZnRlc3Qub2AgaW4KLSAgICAqNjQtYml0KikKLSAgICAgIGNhc2UgJGx0X2N2X3Byb2dfZ251X2xkIGluCi0gICAgICB5ZXMqKSBMRD0iJHtMRC1sZH0gLW0gZWxmNjRfc3BhcmMiIDs7Ci0gICAgICAqKQotCWlmICR7TEQtbGR9IC02NCAtciAtbyBjb25mdGVzdDIubyBjb25mdGVzdC5vID4vZGV2L251bGwgMj4mMTsgdGhlbgotCSAgTEQ9IiR7TEQtbGR9IC02NCIKLQlmaQotCTs7Ci0gICAgICBlc2FjCi0gICAgICA7OwotICAgIGVzYWMKLSAgZmkKLSAgcm0gLXJmIGNvbmZ0ZXN0KgotICA7OwotZXNhYwotCi1uZWVkX2xvY2tzPSIkZW5hYmxlX2xpYnRvb2xfbG9jayIKLQotaWYgdGVzdCAtbiAiJGFjX3Rvb2xfcHJlZml4IjsgdGhlbgotICAjIEV4dHJhY3QgdGhlIGZpcnN0IHdvcmQgb2YgIiR7YWNfdG9vbF9wcmVmaXh9bXQiLCBzbyBpdCBjYW4gYmUgYSBwcm9ncmFtIG5hbWUgd2l0aCBhcmdzLgotc2V0IGR1bW15ICR7YWNfdG9vbF9wcmVmaXh9bXQ7IGFjX3dvcmQ9JDIKLXsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgZm9yICRhY193b3JkIiA+JjUKLSRhc19lY2hvX24gImNoZWNraW5nIGZvciAkYWNfd29yZC4uLiAiID4mNjsgfQotaWYgJHthY19jdl9wcm9nX01BTklGRVNUX1RPT0wrOn0gZmFsc2U7IHRoZW4gOgotICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgotZWxzZQotICBpZiB0ZXN0IC1uICIkTUFOSUZFU1RfVE9PTCI7IHRoZW4KLSAgYWNfY3ZfcHJvZ19NQU5JRkVTVF9UT09MPSIkTUFOSUZFU1RfVE9PTCIgIyBMZXQgdGhlIHVzZXIgb3ZlcnJpZGUgdGhlIHRlc3QuCi1lbHNlCi1hc19zYXZlX0lGUz0kSUZTOyBJRlM9JFBBVEhfU0VQQVJBVE9SCi1mb3IgYXNfZGlyIGluICRQQVRICi1kbwotICBJRlM9JGFzX3NhdmVfSUZTCi0gIHRlc3QgLXogIiRhc19kaXIiICYmIGFzX2Rpcj0uCi0gICAgZm9yIGFjX2V4ZWNfZXh0IGluICcnICRhY19leGVjdXRhYmxlX2V4dGVuc2lvbnM7IGRvCi0gIGlmIHsgdGVzdCAtZiAiJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCIgJiYgJGFzX3Rlc3RfeCAiJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCI7IH07IHRoZW4KLSAgICBhY19jdl9wcm9nX01BTklGRVNUX1RPT0w9IiR7YWNfdG9vbF9wcmVmaXh9bXQiCi0gICAgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogZm91bmQgJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCIgPiY1Ci0gICAgYnJlYWsgMgotICBmaQotZG9uZQotICBkb25lCi1JRlM9JGFzX3NhdmVfSUZTCi0KLWZpCi1maQotTUFOSUZFU1RfVE9PTD0kYWNfY3ZfcHJvZ19NQU5JRkVTVF9UT09MCi1pZiB0ZXN0IC1uICIkTUFOSUZFU1RfVE9PTCI7IHRoZW4KLSAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRNQU5JRkVTVF9UT09MIiA+JjUKLSRhc19lY2hvICIkTUFOSUZFU1RfVE9PTCIgPiY2OyB9Ci1lbHNlCi0gIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiBubyIgPiY1Ci0kYXNfZWNobyAibm8iID4mNjsgfQotZmkKLQotCi1maQotaWYgdGVzdCAteiAiJGFjX2N2X3Byb2dfTUFOSUZFU1RfVE9PTCI7IHRoZW4KLSAgYWNfY3RfTUFOSUZFU1RfVE9PTD0kTUFOSUZFU1RfVE9PTAotICAjIEV4dHJhY3QgdGhlIGZpcnN0IHdvcmQgb2YgIm10Iiwgc28gaXQgY2FuIGJlIGEgcHJvZ3JhbSBuYW1lIHdpdGggYXJncy4KLXNldCBkdW1teSBtdDsgYWNfd29yZD0kMgoteyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBmb3IgJGFjX3dvcmQiID4mNQotJGFzX2VjaG9fbiAiY2hlY2tpbmcgZm9yICRhY193b3JkLi4uICIgPiY2OyB9Ci1pZiAke2FjX2N2X3Byb2dfYWNfY3RfTUFOSUZFU1RfVE9PTCs6fSBmYWxzZTsgdGhlbiA6Ci0gICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2Ci1lbHNlCi0gIGlmIHRlc3QgLW4gIiRhY19jdF9NQU5JRkVTVF9UT09MIjsgdGhlbgotICBhY19jdl9wcm9nX2FjX2N0X01BTklGRVNUX1RPT0w9IiRhY19jdF9NQU5JRkVTVF9UT09MIiAjIExldCB0aGUgdXNlciBvdmVycmlkZSB0aGUgdGVzdC4KLWVsc2UKLWFzX3NhdmVfSUZTPSRJRlM7IElGUz0kUEFUSF9TRVBBUkFUT1IKLWZvciBhc19kaXIgaW4gJFBBVEgKLWRvCi0gIElGUz0kYXNfc2F2ZV9JRlMKLSAgdGVzdCAteiAiJGFzX2RpciIgJiYgYXNfZGlyPS4KLSAgICBmb3IgYWNfZXhlY19leHQgaW4gJycgJGFjX2V4ZWN1dGFibGVfZXh0ZW5zaW9uczsgZG8KLSAgaWYgeyB0ZXN0IC1mICIkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IiAmJiAkYXNfdGVzdF94ICIkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IjsgfTsgdGhlbgotICAgIGFjX2N2X3Byb2dfYWNfY3RfTUFOSUZFU1RfVE9PTD0ibXQiCi0gICAgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogZm91bmQgJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCIgPiY1Ci0gICAgYnJlYWsgMgotICBmaQotZG9uZQotICBkb25lCi1JRlM9JGFzX3NhdmVfSUZTCi0KLWZpCi1maQotYWNfY3RfTUFOSUZFU1RfVE9PTD0kYWNfY3ZfcHJvZ19hY19jdF9NQU5JRkVTVF9UT09MCi1pZiB0ZXN0IC1uICIkYWNfY3RfTUFOSUZFU1RfVE9PTCI7IHRoZW4KLSAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRhY19jdF9NQU5JRkVTVF9UT09MIiA+JjUKLSRhc19lY2hvICIkYWNfY3RfTUFOSUZFU1RfVE9PTCIgPiY2OyB9Ci1lbHNlCi0gIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiBubyIgPiY1Ci0kYXNfZWNobyAibm8iID4mNjsgfQotZmkKLQotICBpZiB0ZXN0ICJ4JGFjX2N0X01BTklGRVNUX1RPT0wiID0geDsgdGhlbgotICAgIE1BTklGRVNUX1RPT0w9IjoiCi0gIGVsc2UKLSAgICBjYXNlICRjcm9zc19jb21waWxpbmc6JGFjX3Rvb2xfd2FybmVkIGluCi15ZXM6KQoteyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBXQVJOSU5HOiB1c2luZyBjcm9zcyB0b29scyBub3QgcHJlZml4ZWQgd2l0aCBob3N0IHRyaXBsZXQiID4mNQotJGFzX2VjaG8gIiRhc19tZTogV0FSTklORzogdXNpbmcgY3Jvc3MgdG9vbHMgbm90IHByZWZpeGVkIHdpdGggaG9zdCB0cmlwbGV0IiA+JjI7fQotYWNfdG9vbF93YXJuZWQ9eWVzIDs7Ci1lc2FjCi0gICAgTUFOSUZFU1RfVE9PTD0kYWNfY3RfTUFOSUZFU1RfVE9PTAotICBmaQotZWxzZQotICBNQU5JRkVTVF9UT09MPSIkYWNfY3ZfcHJvZ19NQU5JRkVTVF9UT09MIgotZmkKLQotdGVzdCAteiAiJE1BTklGRVNUX1RPT0wiICYmIE1BTklGRVNUX1RPT0w9bXQKLXsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgaWYgJE1BTklGRVNUX1RPT0wgaXMgYSBtYW5pZmVzdCB0b29sIiA+JjUKLSRhc19lY2hvX24gImNoZWNraW5nIGlmICRNQU5JRkVTVF9UT09MIGlzIGEgbWFuaWZlc3QgdG9vbC4uLiAiID4mNjsgfQotaWYgJHtsdF9jdl9wYXRoX21haW5mZXN0X3Rvb2wrOn0gZmFsc2U7IHRoZW4gOgotICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgotZWxzZQotICBsdF9jdl9wYXRoX21haW5mZXN0X3Rvb2w9bm8KLSAgZWNobyAiJGFzX21lOiRMSU5FTk86ICRNQU5JRkVTVF9UT09MICctPyciID4mNQotICAkTUFOSUZFU1RfVE9PTCAnLT8nIDI+Y29uZnRlc3QuZXJyID4gY29uZnRlc3Qub3V0Ci0gIGNhdCBjb25mdGVzdC5lcnIgPiY1Ci0gIGlmICRHUkVQICdNYW5pZmVzdCBUb29sJyBjb25mdGVzdC5vdXQgPiAvZGV2L251bGw7IHRoZW4KLSAgICBsdF9jdl9wYXRoX21haW5mZXN0X3Rvb2w9eWVzCi0gIGZpCi0gIHJtIC1mIGNvbmZ0ZXN0KgotZmkKLXsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkbHRfY3ZfcGF0aF9tYWluZmVzdF90b29sIiA+JjUKLSRhc19lY2hvICIkbHRfY3ZfcGF0aF9tYWluZmVzdF90b29sIiA+JjY7IH0KLWlmIHRlc3QgIngkbHRfY3ZfcGF0aF9tYWluZmVzdF90b29sIiAhPSB4eWVzOyB0aGVuCi0gIE1BTklGRVNUX1RPT0w9OgotZmkKLQotCi0KLQotCi0KLSAgY2FzZSAkaG9zdF9vcyBpbgotICAgIHJoYXBzb2R5KiB8IGRhcndpbiopCi0gICAgaWYgdGVzdCAtbiAiJGFjX3Rvb2xfcHJlZml4IjsgdGhlbgotICAjIEV4dHJhY3QgdGhlIGZpcnN0IHdvcmQgb2YgIiR7YWNfdG9vbF9wcmVmaXh9ZHN5bXV0aWwiLCBzbyBpdCBjYW4gYmUgYSBwcm9ncmFtIG5hbWUgd2l0aCBhcmdzLgotc2V0IGR1bW15ICR7YWNfdG9vbF9wcmVmaXh9ZHN5bXV0aWw7IGFjX3dvcmQ9JDIKLXsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgZm9yICRhY193b3JkIiA+JjUKLSRhc19lY2hvX24gImNoZWNraW5nIGZvciAkYWNfd29yZC4uLiAiID4mNjsgfQotaWYgJHthY19jdl9wcm9nX0RTWU1VVElMKzp9IGZhbHNlOyB0aGVuIDoKLSAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKLWVsc2UKLSAgaWYgdGVzdCAtbiAiJERTWU1VVElMIjsgdGhlbgotICBhY19jdl9wcm9nX0RTWU1VVElMPSIkRFNZTVVUSUwiICMgTGV0IHRoZSB1c2VyIG92ZXJyaWRlIHRoZSB0ZXN0LgotZWxzZQotYXNfc2F2ZV9JRlM9JElGUzsgSUZTPSRQQVRIX1NFUEFSQVRPUgotZm9yIGFzX2RpciBpbiAkUEFUSAotZG8KLSAgSUZTPSRhc19zYXZlX0lGUwotICB0ZXN0IC16ICIkYXNfZGlyIiAmJiBhc19kaXI9LgotICAgIGZvciBhY19leGVjX2V4dCBpbiAnJyAkYWNfZXhlY3V0YWJsZV9leHRlbnNpb25zOyBkbwotICBpZiB7IHRlc3QgLWYgIiRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiICYmICRhc190ZXN0X3ggIiRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiOyB9OyB0aGVuCi0gICAgYWNfY3ZfcHJvZ19EU1lNVVRJTD0iJHthY190b29sX3ByZWZpeH1kc3ltdXRpbCIKLSAgICAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBmb3VuZCAkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IiA+JjUKLSAgICBicmVhayAyCi0gIGZpCi1kb25lCi0gIGRvbmUKLUlGUz0kYXNfc2F2ZV9JRlMKLQotZmkKLWZpCi1EU1lNVVRJTD0kYWNfY3ZfcHJvZ19EU1lNVVRJTAotaWYgdGVzdCAtbiAiJERTWU1VVElMIjsgdGhlbgotICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJERTWU1VVElMIiA+JjUKLSRhc19lY2hvICIkRFNZTVVUSUwiID4mNjsgfQotZWxzZQotICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogbm8iID4mNQotJGFzX2VjaG8gIm5vIiA+JjY7IH0KLWZpCi0KLQotZmkKLWlmIHRlc3QgLXogIiRhY19jdl9wcm9nX0RTWU1VVElMIjsgdGhlbgotICBhY19jdF9EU1lNVVRJTD0kRFNZTVVUSUwKLSAgIyBFeHRyYWN0IHRoZSBmaXJzdCB3b3JkIG9mICJkc3ltdXRpbCIsIHNvIGl0IGNhbiBiZSBhIHByb2dyYW0gbmFtZSB3aXRoIGFyZ3MuCi1zZXQgZHVtbXkgZHN5bXV0aWw7IGFjX3dvcmQ9JDIKLXsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgZm9yICRhY193b3JkIiA+JjUKLSRhc19lY2hvX24gImNoZWNraW5nIGZvciAkYWNfd29yZC4uLiAiID4mNjsgfQotaWYgJHthY19jdl9wcm9nX2FjX2N0X0RTWU1VVElMKzp9IGZhbHNlOyB0aGVuIDoKLSAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKLWVsc2UKLSAgaWYgdGVzdCAtbiAiJGFjX2N0X0RTWU1VVElMIjsgdGhlbgotICBhY19jdl9wcm9nX2FjX2N0X0RTWU1VVElMPSIkYWNfY3RfRFNZTVVUSUwiICMgTGV0IHRoZSB1c2VyIG92ZXJyaWRlIHRoZSB0ZXN0LgotZWxzZQotYXNfc2F2ZV9JRlM9JElGUzsgSUZTPSRQQVRIX1NFUEFSQVRPUgotZm9yIGFzX2RpciBpbiAkUEFUSAotZG8KLSAgSUZTPSRhc19zYXZlX0lGUwotICB0ZXN0IC16ICIkYXNfZGlyIiAmJiBhc19kaXI9LgotICAgIGZvciBhY19leGVjX2V4dCBpbiAnJyAkYWNfZXhlY3V0YWJsZV9leHRlbnNpb25zOyBkbwotICBpZiB7IHRlc3QgLWYgIiRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiICYmICRhc190ZXN0X3ggIiRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiOyB9OyB0aGVuCi0gICAgYWNfY3ZfcHJvZ19hY19jdF9EU1lNVVRJTD0iZHN5bXV0aWwiCi0gICAgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogZm91bmQgJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCIgPiY1Ci0gICAgYnJlYWsgMgotICBmaQotZG9uZQotICBkb25lCi1JRlM9JGFzX3NhdmVfSUZTCi0KLWZpCi1maQotYWNfY3RfRFNZTVVUSUw9JGFjX2N2X3Byb2dfYWNfY3RfRFNZTVVUSUwKLWlmIHRlc3QgLW4gIiRhY19jdF9EU1lNVVRJTCI7IHRoZW4KLSAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRhY19jdF9EU1lNVVRJTCIgPiY1Ci0kYXNfZWNobyAiJGFjX2N0X0RTWU1VVElMIiA+JjY7IH0KLWVsc2UKLSAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6IG5vIiA+JjUKLSRhc19lY2hvICJubyIgPiY2OyB9Ci1maQotCi0gIGlmIHRlc3QgIngkYWNfY3RfRFNZTVVUSUwiID0geDsgdGhlbgotICAgIERTWU1VVElMPSI6IgotICBlbHNlCi0gICAgY2FzZSAkY3Jvc3NfY29tcGlsaW5nOiRhY190b29sX3dhcm5lZCBpbgoteWVzOikKLXsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogV0FSTklORzogdXNpbmcgY3Jvc3MgdG9vbHMgbm90IHByZWZpeGVkIHdpdGggaG9zdCB0cmlwbGV0IiA+JjUKLSRhc19lY2hvICIkYXNfbWU6IFdBUk5JTkc6IHVzaW5nIGNyb3NzIHRvb2xzIG5vdCBwcmVmaXhlZCB3aXRoIGhvc3QgdHJpcGxldCIgPiYyO30KLWFjX3Rvb2xfd2FybmVkPXllcyA7OwotZXNhYwotICAgIERTWU1VVElMPSRhY19jdF9EU1lNVVRJTAotICBmaQotZWxzZQotICBEU1lNVVRJTD0iJGFjX2N2X3Byb2dfRFNZTVVUSUwiCi1maQotCi0gICAgaWYgdGVzdCAtbiAiJGFjX3Rvb2xfcHJlZml4IjsgdGhlbgotICAjIEV4dHJhY3QgdGhlIGZpcnN0IHdvcmQgb2YgIiR7YWNfdG9vbF9wcmVmaXh9bm1lZGl0Iiwgc28gaXQgY2FuIGJlIGEgcHJvZ3JhbSBuYW1lIHdpdGggYXJncy4KLXNldCBkdW1teSAke2FjX3Rvb2xfcHJlZml4fW5tZWRpdDsgYWNfd29yZD0kMgoteyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBmb3IgJGFjX3dvcmQiID4mNQotJGFzX2VjaG9fbiAiY2hlY2tpbmcgZm9yICRhY193b3JkLi4uICIgPiY2OyB9Ci1pZiAke2FjX2N2X3Byb2dfTk1FRElUKzp9IGZhbHNlOyB0aGVuIDoKLSAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKLWVsc2UKLSAgaWYgdGVzdCAtbiAiJE5NRURJVCI7IHRoZW4KLSAgYWNfY3ZfcHJvZ19OTUVESVQ9IiROTUVESVQiICMgTGV0IHRoZSB1c2VyIG92ZXJyaWRlIHRoZSB0ZXN0LgotZWxzZQotYXNfc2F2ZV9JRlM9JElGUzsgSUZTPSRQQVRIX1NFUEFSQVRPUgotZm9yIGFzX2RpciBpbiAkUEFUSAotZG8KLSAgSUZTPSRhc19zYXZlX0lGUwotICB0ZXN0IC16ICIkYXNfZGlyIiAmJiBhc19kaXI9LgotICAgIGZvciBhY19leGVjX2V4dCBpbiAnJyAkYWNfZXhlY3V0YWJsZV9leHRlbnNpb25zOyBkbwotICBpZiB7IHRlc3QgLWYgIiRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiICYmICRhc190ZXN0X3ggIiRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiOyB9OyB0aGVuCi0gICAgYWNfY3ZfcHJvZ19OTUVESVQ9IiR7YWNfdG9vbF9wcmVmaXh9bm1lZGl0IgotICAgICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGZvdW5kICRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiID4mNQotICAgIGJyZWFrIDIKLSAgZmkKLWRvbmUKLSAgZG9uZQotSUZTPSRhc19zYXZlX0lGUwotCi1maQotZmkKLU5NRURJVD0kYWNfY3ZfcHJvZ19OTUVESVQKLWlmIHRlc3QgLW4gIiROTUVESVQiOyB0aGVuCi0gIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkTk1FRElUIiA+JjUKLSRhc19lY2hvICIkTk1FRElUIiA+JjY7IH0KLWVsc2UKLSAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6IG5vIiA+JjUKLSRhc19lY2hvICJubyIgPiY2OyB9Ci1maQotCi0KLWZpCi1pZiB0ZXN0IC16ICIkYWNfY3ZfcHJvZ19OTUVESVQiOyB0aGVuCi0gIGFjX2N0X05NRURJVD0kTk1FRElUCi0gICMgRXh0cmFjdCB0aGUgZmlyc3Qgd29yZCBvZiAibm1lZGl0Iiwgc28gaXQgY2FuIGJlIGEgcHJvZ3JhbSBuYW1lIHdpdGggYXJncy4KLXNldCBkdW1teSBubWVkaXQ7IGFjX3dvcmQ9JDIKLXsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgZm9yICRhY193b3JkIiA+JjUKLSRhc19lY2hvX24gImNoZWNraW5nIGZvciAkYWNfd29yZC4uLiAiID4mNjsgfQotaWYgJHthY19jdl9wcm9nX2FjX2N0X05NRURJVCs6fSBmYWxzZTsgdGhlbiA6Ci0gICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2Ci1lbHNlCi0gIGlmIHRlc3QgLW4gIiRhY19jdF9OTUVESVQiOyB0aGVuCi0gIGFjX2N2X3Byb2dfYWNfY3RfTk1FRElUPSIkYWNfY3RfTk1FRElUIiAjIExldCB0aGUgdXNlciBvdmVycmlkZSB0aGUgdGVzdC4KLWVsc2UKLWFzX3NhdmVfSUZTPSRJRlM7IElGUz0kUEFUSF9TRVBBUkFUT1IKLWZvciBhc19kaXIgaW4gJFBBVEgKLWRvCi0gIElGUz0kYXNfc2F2ZV9JRlMKLSAgdGVzdCAteiAiJGFzX2RpciIgJiYgYXNfZGlyPS4KLSAgICBmb3IgYWNfZXhlY19leHQgaW4gJycgJGFjX2V4ZWN1dGFibGVfZXh0ZW5zaW9uczsgZG8KLSAgaWYgeyB0ZXN0IC1mICIkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IiAmJiAkYXNfdGVzdF94ICIkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IjsgfTsgdGhlbgotICAgIGFjX2N2X3Byb2dfYWNfY3RfTk1FRElUPSJubWVkaXQiCi0gICAgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogZm91bmQgJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCIgPiY1Ci0gICAgYnJlYWsgMgotICBmaQotZG9uZQotICBkb25lCi1JRlM9JGFzX3NhdmVfSUZTCi0KLWZpCi1maQotYWNfY3RfTk1FRElUPSRhY19jdl9wcm9nX2FjX2N0X05NRURJVAotaWYgdGVzdCAtbiAiJGFjX2N0X05NRURJVCI7IHRoZW4KLSAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRhY19jdF9OTUVESVQiID4mNQotJGFzX2VjaG8gIiRhY19jdF9OTUVESVQiID4mNjsgfQotZWxzZQotICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogbm8iID4mNQotJGFzX2VjaG8gIm5vIiA+JjY7IH0KLWZpCi0KLSAgaWYgdGVzdCAieCRhY19jdF9OTUVESVQiID0geDsgdGhlbgotICAgIE5NRURJVD0iOiIKLSAgZWxzZQotICAgIGNhc2UgJGNyb3NzX2NvbXBpbGluZzokYWNfdG9vbF93YXJuZWQgaW4KLXllczopCi17ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IFdBUk5JTkc6IHVzaW5nIGNyb3NzIHRvb2xzIG5vdCBwcmVmaXhlZCB3aXRoIGhvc3QgdHJpcGxldCIgPiY1Ci0kYXNfZWNobyAiJGFzX21lOiBXQVJOSU5HOiB1c2luZyBjcm9zcyB0b29scyBub3QgcHJlZml4ZWQgd2l0aCBob3N0IHRyaXBsZXQiID4mMjt9Ci1hY190b29sX3dhcm5lZD15ZXMgOzsKLWVzYWMKLSAgICBOTUVESVQ9JGFjX2N0X05NRURJVAotICBmaQotZWxzZQotICBOTUVESVQ9IiRhY19jdl9wcm9nX05NRURJVCIKLWZpCi0KLSAgICBpZiB0ZXN0IC1uICIkYWNfdG9vbF9wcmVmaXgiOyB0aGVuCi0gICMgRXh0cmFjdCB0aGUgZmlyc3Qgd29yZCBvZiAiJHthY190b29sX3ByZWZpeH1saXBvIiwgc28gaXQgY2FuIGJlIGEgcHJvZ3JhbSBuYW1lIHdpdGggYXJncy4KLXNldCBkdW1teSAke2FjX3Rvb2xfcHJlZml4fWxpcG87IGFjX3dvcmQ9JDIKLXsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgZm9yICRhY193b3JkIiA+JjUKLSRhc19lY2hvX24gImNoZWNraW5nIGZvciAkYWNfd29yZC4uLiAiID4mNjsgfQotaWYgJHthY19jdl9wcm9nX0xJUE8rOn0gZmFsc2U7IHRoZW4gOgotICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgotZWxzZQotICBpZiB0ZXN0IC1uICIkTElQTyI7IHRoZW4KLSAgYWNfY3ZfcHJvZ19MSVBPPSIkTElQTyIgIyBMZXQgdGhlIHVzZXIgb3ZlcnJpZGUgdGhlIHRlc3QuCi1lbHNlCi1hc19zYXZlX0lGUz0kSUZTOyBJRlM9JFBBVEhfU0VQQVJBVE9SCi1mb3IgYXNfZGlyIGluICRQQVRICi1kbwotICBJRlM9JGFzX3NhdmVfSUZTCi0gIHRlc3QgLXogIiRhc19kaXIiICYmIGFzX2Rpcj0uCi0gICAgZm9yIGFjX2V4ZWNfZXh0IGluICcnICRhY19leGVjdXRhYmxlX2V4dGVuc2lvbnM7IGRvCi0gIGlmIHsgdGVzdCAtZiAiJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCIgJiYgJGFzX3Rlc3RfeCAiJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCI7IH07IHRoZW4KLSAgICBhY19jdl9wcm9nX0xJUE89IiR7YWNfdG9vbF9wcmVmaXh9bGlwbyIKLSAgICAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBmb3VuZCAkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IiA+JjUKLSAgICBicmVhayAyCi0gIGZpCi1kb25lCi0gIGRvbmUKLUlGUz0kYXNfc2F2ZV9JRlMKLQotZmkKLWZpCi1MSVBPPSRhY19jdl9wcm9nX0xJUE8KLWlmIHRlc3QgLW4gIiRMSVBPIjsgdGhlbgotICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJExJUE8iID4mNQotJGFzX2VjaG8gIiRMSVBPIiA+JjY7IH0KLWVsc2UKLSAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6IG5vIiA+JjUKLSRhc19lY2hvICJubyIgPiY2OyB9Ci1maQotCi0KLWZpCi1pZiB0ZXN0IC16ICIkYWNfY3ZfcHJvZ19MSVBPIjsgdGhlbgotICBhY19jdF9MSVBPPSRMSVBPCi0gICMgRXh0cmFjdCB0aGUgZmlyc3Qgd29yZCBvZiAibGlwbyIsIHNvIGl0IGNhbiBiZSBhIHByb2dyYW0gbmFtZSB3aXRoIGFyZ3MuCi1zZXQgZHVtbXkgbGlwbzsgYWNfd29yZD0kMgoteyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBmb3IgJGFjX3dvcmQiID4mNQotJGFzX2VjaG9fbiAiY2hlY2tpbmcgZm9yICRhY193b3JkLi4uICIgPiY2OyB9Ci1pZiAke2FjX2N2X3Byb2dfYWNfY3RfTElQTys6fSBmYWxzZTsgdGhlbiA6Ci0gICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2Ci1lbHNlCi0gIGlmIHRlc3QgLW4gIiRhY19jdF9MSVBPIjsgdGhlbgotICBhY19jdl9wcm9nX2FjX2N0X0xJUE89IiRhY19jdF9MSVBPIiAjIExldCB0aGUgdXNlciBvdmVycmlkZSB0aGUgdGVzdC4KLWVsc2UKLWFzX3NhdmVfSUZTPSRJRlM7IElGUz0kUEFUSF9TRVBBUkFUT1IKLWZvciBhc19kaXIgaW4gJFBBVEgKLWRvCi0gIElGUz0kYXNfc2F2ZV9JRlMKLSAgdGVzdCAteiAiJGFzX2RpciIgJiYgYXNfZGlyPS4KLSAgICBmb3IgYWNfZXhlY19leHQgaW4gJycgJGFjX2V4ZWN1dGFibGVfZXh0ZW5zaW9uczsgZG8KLSAgaWYgeyB0ZXN0IC1mICIkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IiAmJiAkYXNfdGVzdF94ICIkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IjsgfTsgdGhlbgotICAgIGFjX2N2X3Byb2dfYWNfY3RfTElQTz0ibGlwbyIKLSAgICAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBmb3VuZCAkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IiA+JjUKLSAgICBicmVhayAyCi0gIGZpCi1kb25lCi0gIGRvbmUKLUlGUz0kYXNfc2F2ZV9JRlMKLQotZmkKLWZpCi1hY19jdF9MSVBPPSRhY19jdl9wcm9nX2FjX2N0X0xJUE8KLWlmIHRlc3QgLW4gIiRhY19jdF9MSVBPIjsgdGhlbgotICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJGFjX2N0X0xJUE8iID4mNQotJGFzX2VjaG8gIiRhY19jdF9MSVBPIiA+JjY7IH0KLWVsc2UKLSAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6IG5vIiA+JjUKLSRhc19lY2hvICJubyIgPiY2OyB9Ci1maQotCi0gIGlmIHRlc3QgIngkYWNfY3RfTElQTyIgPSB4OyB0aGVuCi0gICAgTElQTz0iOiIKLSAgZWxzZQotICAgIGNhc2UgJGNyb3NzX2NvbXBpbGluZzokYWNfdG9vbF93YXJuZWQgaW4KLXllczopCi17ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IFdBUk5JTkc6IHVzaW5nIGNyb3NzIHRvb2xzIG5vdCBwcmVmaXhlZCB3aXRoIGhvc3QgdHJpcGxldCIgPiY1Ci0kYXNfZWNobyAiJGFzX21lOiBXQVJOSU5HOiB1c2luZyBjcm9zcyB0b29scyBub3QgcHJlZml4ZWQgd2l0aCBob3N0IHRyaXBsZXQiID4mMjt9Ci1hY190b29sX3dhcm5lZD15ZXMgOzsKLWVzYWMKLSAgICBMSVBPPSRhY19jdF9MSVBPCi0gIGZpCi1lbHNlCi0gIExJUE89IiRhY19jdl9wcm9nX0xJUE8iCi1maQotCi0gICAgaWYgdGVzdCAtbiAiJGFjX3Rvb2xfcHJlZml4IjsgdGhlbgotICAjIEV4dHJhY3QgdGhlIGZpcnN0IHdvcmQgb2YgIiR7YWNfdG9vbF9wcmVmaXh9b3Rvb2wiLCBzbyBpdCBjYW4gYmUgYSBwcm9ncmFtIG5hbWUgd2l0aCBhcmdzLgotc2V0IGR1bW15ICR7YWNfdG9vbF9wcmVmaXh9b3Rvb2w7IGFjX3dvcmQ9JDIKLXsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgZm9yICRhY193b3JkIiA+JjUKLSRhc19lY2hvX24gImNoZWNraW5nIGZvciAkYWNfd29yZC4uLiAiID4mNjsgfQotaWYgJHthY19jdl9wcm9nX09UT09MKzp9IGZhbHNlOyB0aGVuIDoKLSAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKLWVsc2UKLSAgaWYgdGVzdCAtbiAiJE9UT09MIjsgdGhlbgotICBhY19jdl9wcm9nX09UT09MPSIkT1RPT0wiICMgTGV0IHRoZSB1c2VyIG92ZXJyaWRlIHRoZSB0ZXN0LgotZWxzZQotYXNfc2F2ZV9JRlM9JElGUzsgSUZTPSRQQVRIX1NFUEFSQVRPUgotZm9yIGFzX2RpciBpbiAkUEFUSAotZG8KLSAgSUZTPSRhc19zYXZlX0lGUwotICB0ZXN0IC16ICIkYXNfZGlyIiAmJiBhc19kaXI9LgotICAgIGZvciBhY19leGVjX2V4dCBpbiAnJyAkYWNfZXhlY3V0YWJsZV9leHRlbnNpb25zOyBkbwotICBpZiB7IHRlc3QgLWYgIiRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiICYmICRhc190ZXN0X3ggIiRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiOyB9OyB0aGVuCi0gICAgYWNfY3ZfcHJvZ19PVE9PTD0iJHthY190b29sX3ByZWZpeH1vdG9vbCIKLSAgICAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBmb3VuZCAkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IiA+JjUKLSAgICBicmVhayAyCi0gIGZpCi1kb25lCi0gIGRvbmUKLUlGUz0kYXNfc2F2ZV9JRlMKLQotZmkKLWZpCi1PVE9PTD0kYWNfY3ZfcHJvZ19PVE9PTAotaWYgdGVzdCAtbiAiJE9UT09MIjsgdGhlbgotICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJE9UT09MIiA+JjUKLSRhc19lY2hvICIkT1RPT0wiID4mNjsgfQotZWxzZQotICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogbm8iID4mNQotJGFzX2VjaG8gIm5vIiA+JjY7IH0KLWZpCi0KLQotZmkKLWlmIHRlc3QgLXogIiRhY19jdl9wcm9nX09UT09MIjsgdGhlbgotICBhY19jdF9PVE9PTD0kT1RPT0wKLSAgIyBFeHRyYWN0IHRoZSBmaXJzdCB3b3JkIG9mICJvdG9vbCIsIHNvIGl0IGNhbiBiZSBhIHByb2dyYW0gbmFtZSB3aXRoIGFyZ3MuCi1zZXQgZHVtbXkgb3Rvb2w7IGFjX3dvcmQ9JDIKLXsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgZm9yICRhY193b3JkIiA+JjUKLSRhc19lY2hvX24gImNoZWNraW5nIGZvciAkYWNfd29yZC4uLiAiID4mNjsgfQotaWYgJHthY19jdl9wcm9nX2FjX2N0X09UT09MKzp9IGZhbHNlOyB0aGVuIDoKLSAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKLWVsc2UKLSAgaWYgdGVzdCAtbiAiJGFjX2N0X09UT09MIjsgdGhlbgotICBhY19jdl9wcm9nX2FjX2N0X09UT09MPSIkYWNfY3RfT1RPT0wiICMgTGV0IHRoZSB1c2VyIG92ZXJyaWRlIHRoZSB0ZXN0LgotZWxzZQotYXNfc2F2ZV9JRlM9JElGUzsgSUZTPSRQQVRIX1NFUEFSQVRPUgotZm9yIGFzX2RpciBpbiAkUEFUSAotZG8KLSAgSUZTPSRhc19zYXZlX0lGUwotICB0ZXN0IC16ICIkYXNfZGlyIiAmJiBhc19kaXI9LgotICAgIGZvciBhY19leGVjX2V4dCBpbiAnJyAkYWNfZXhlY3V0YWJsZV9leHRlbnNpb25zOyBkbwotICBpZiB7IHRlc3QgLWYgIiRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiICYmICRhc190ZXN0X3ggIiRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiOyB9OyB0aGVuCi0gICAgYWNfY3ZfcHJvZ19hY19jdF9PVE9PTD0ib3Rvb2wiCi0gICAgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogZm91bmQgJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCIgPiY1Ci0gICAgYnJlYWsgMgotICBmaQotZG9uZQotICBkb25lCi1JRlM9JGFzX3NhdmVfSUZTCi0KLWZpCi1maQotYWNfY3RfT1RPT0w9JGFjX2N2X3Byb2dfYWNfY3RfT1RPT0wKLWlmIHRlc3QgLW4gIiRhY19jdF9PVE9PTCI7IHRoZW4KLSAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRhY19jdF9PVE9PTCIgPiY1Ci0kYXNfZWNobyAiJGFjX2N0X09UT09MIiA+JjY7IH0KLWVsc2UKLSAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6IG5vIiA+JjUKLSRhc19lY2hvICJubyIgPiY2OyB9Ci1maQotCi0gIGlmIHRlc3QgIngkYWNfY3RfT1RPT0wiID0geDsgdGhlbgotICAgIE9UT09MPSI6IgotICBlbHNlCi0gICAgY2FzZSAkY3Jvc3NfY29tcGlsaW5nOiRhY190b29sX3dhcm5lZCBpbgoteWVzOikKLXsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogV0FSTklORzogdXNpbmcgY3Jvc3MgdG9vbHMgbm90IHByZWZpeGVkIHdpdGggaG9zdCB0cmlwbGV0IiA+JjUKLSRhc19lY2hvICIkYXNfbWU6IFdBUk5JTkc6IHVzaW5nIGNyb3NzIHRvb2xzIG5vdCBwcmVmaXhlZCB3aXRoIGhvc3QgdHJpcGxldCIgPiYyO30KLWFjX3Rvb2xfd2FybmVkPXllcyA7OwotZXNhYwotICAgIE9UT09MPSRhY19jdF9PVE9PTAotICBmaQotZWxzZQotICBPVE9PTD0iJGFjX2N2X3Byb2dfT1RPT0wiCi1maQotCi0gICAgaWYgdGVzdCAtbiAiJGFjX3Rvb2xfcHJlZml4IjsgdGhlbgotICAjIEV4dHJhY3QgdGhlIGZpcnN0IHdvcmQgb2YgIiR7YWNfdG9vbF9wcmVmaXh9b3Rvb2w2NCIsIHNvIGl0IGNhbiBiZSBhIHByb2dyYW0gbmFtZSB3aXRoIGFyZ3MuCi1zZXQgZHVtbXkgJHthY190b29sX3ByZWZpeH1vdG9vbDY0OyBhY193b3JkPSQyCi17ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGZvciAkYWNfd29yZCIgPiY1Ci0kYXNfZWNob19uICJjaGVja2luZyBmb3IgJGFjX3dvcmQuLi4gIiA+JjY7IH0KLWlmICR7YWNfY3ZfcHJvZ19PVE9PTDY0Kzp9IGZhbHNlOyB0aGVuIDoKLSAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKLWVsc2UKLSAgaWYgdGVzdCAtbiAiJE9UT09MNjQiOyB0aGVuCi0gIGFjX2N2X3Byb2dfT1RPT0w2ND0iJE9UT09MNjQiICMgTGV0IHRoZSB1c2VyIG92ZXJyaWRlIHRoZSB0ZXN0LgotZWxzZQotYXNfc2F2ZV9JRlM9JElGUzsgSUZTPSRQQVRIX1NFUEFSQVRPUgotZm9yIGFzX2RpciBpbiAkUEFUSAotZG8KLSAgSUZTPSRhc19zYXZlX0lGUwotICB0ZXN0IC16ICIkYXNfZGlyIiAmJiBhc19kaXI9LgotICAgIGZvciBhY19leGVjX2V4dCBpbiAnJyAkYWNfZXhlY3V0YWJsZV9leHRlbnNpb25zOyBkbwotICBpZiB7IHRlc3QgLWYgIiRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiICYmICRhc190ZXN0X3ggIiRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiOyB9OyB0aGVuCi0gICAgYWNfY3ZfcHJvZ19PVE9PTDY0PSIke2FjX3Rvb2xfcHJlZml4fW90b29sNjQiCi0gICAgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogZm91bmQgJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCIgPiY1Ci0gICAgYnJlYWsgMgotICBmaQotZG9uZQotICBkb25lCi1JRlM9JGFzX3NhdmVfSUZTCi0KLWZpCi1maQotT1RPT0w2ND0kYWNfY3ZfcHJvZ19PVE9PTDY0Ci1pZiB0ZXN0IC1uICIkT1RPT0w2NCI7IHRoZW4KLSAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRPVE9PTDY0IiA+JjUKLSRhc19lY2hvICIkT1RPT0w2NCIgPiY2OyB9Ci1lbHNlCi0gIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiBubyIgPiY1Ci0kYXNfZWNobyAibm8iID4mNjsgfQotZmkKLQotCi1maQotaWYgdGVzdCAteiAiJGFjX2N2X3Byb2dfT1RPT0w2NCI7IHRoZW4KLSAgYWNfY3RfT1RPT0w2ND0kT1RPT0w2NAotICAjIEV4dHJhY3QgdGhlIGZpcnN0IHdvcmQgb2YgIm90b29sNjQiLCBzbyBpdCBjYW4gYmUgYSBwcm9ncmFtIG5hbWUgd2l0aCBhcmdzLgotc2V0IGR1bW15IG90b29sNjQ7IGFjX3dvcmQ9JDIKLXsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgZm9yICRhY193b3JkIiA+JjUKLSRhc19lY2hvX24gImNoZWNraW5nIGZvciAkYWNfd29yZC4uLiAiID4mNjsgfQotaWYgJHthY19jdl9wcm9nX2FjX2N0X09UT09MNjQrOn0gZmFsc2U7IHRoZW4gOgotICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgotZWxzZQotICBpZiB0ZXN0IC1uICIkYWNfY3RfT1RPT0w2NCI7IHRoZW4KLSAgYWNfY3ZfcHJvZ19hY19jdF9PVE9PTDY0PSIkYWNfY3RfT1RPT0w2NCIgIyBMZXQgdGhlIHVzZXIgb3ZlcnJpZGUgdGhlIHRlc3QuCi1lbHNlCi1hc19zYXZlX0lGUz0kSUZTOyBJRlM9JFBBVEhfU0VQQVJBVE9SCi1mb3IgYXNfZGlyIGluICRQQVRICi1kbwotICBJRlM9JGFzX3NhdmVfSUZTCi0gIHRlc3QgLXogIiRhc19kaXIiICYmIGFzX2Rpcj0uCi0gICAgZm9yIGFjX2V4ZWNfZXh0IGluICcnICRhY19leGVjdXRhYmxlX2V4dGVuc2lvbnM7IGRvCi0gIGlmIHsgdGVzdCAtZiAiJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCIgJiYgJGFzX3Rlc3RfeCAiJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCI7IH07IHRoZW4KLSAgICBhY19jdl9wcm9nX2FjX2N0X09UT09MNjQ9Im90b29sNjQiCi0gICAgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogZm91bmQgJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCIgPiY1Ci0gICAgYnJlYWsgMgotICBmaQotZG9uZQotICBkb25lCi1JRlM9JGFzX3NhdmVfSUZTCi0KLWZpCi1maQotYWNfY3RfT1RPT0w2ND0kYWNfY3ZfcHJvZ19hY19jdF9PVE9PTDY0Ci1pZiB0ZXN0IC1uICIkYWNfY3RfT1RPT0w2NCI7IHRoZW4KLSAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRhY19jdF9PVE9PTDY0IiA+JjUKLSRhc19lY2hvICIkYWNfY3RfT1RPT0w2NCIgPiY2OyB9Ci1lbHNlCi0gIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiBubyIgPiY1Ci0kYXNfZWNobyAibm8iID4mNjsgfQotZmkKLQotICBpZiB0ZXN0ICJ4JGFjX2N0X09UT09MNjQiID0geDsgdGhlbgotICAgIE9UT09MNjQ9IjoiCi0gIGVsc2UKLSAgICBjYXNlICRjcm9zc19jb21waWxpbmc6JGFjX3Rvb2xfd2FybmVkIGluCi15ZXM6KQoteyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBXQVJOSU5HOiB1c2luZyBjcm9zcyB0b29scyBub3QgcHJlZml4ZWQgd2l0aCBob3N0IHRyaXBsZXQiID4mNQotJGFzX2VjaG8gIiRhc19tZTogV0FSTklORzogdXNpbmcgY3Jvc3MgdG9vbHMgbm90IHByZWZpeGVkIHdpdGggaG9zdCB0cmlwbGV0IiA+JjI7fQotYWNfdG9vbF93YXJuZWQ9eWVzIDs7Ci1lc2FjCi0gICAgT1RPT0w2ND0kYWNfY3RfT1RPT0w2NAotICBmaQotZWxzZQotICBPVE9PTDY0PSIkYWNfY3ZfcHJvZ19PVE9PTDY0IgotZmkKLQotCi0KLQotCi0KLQotCi0KLQotCi0KLQotCi0KLQotCi0KLQotCi0KLQotCi0KLQotCi0KLSAgICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGZvciAtc2luZ2xlX21vZHVsZSBsaW5rZXIgZmxhZyIgPiY1Ci0kYXNfZWNob19uICJjaGVja2luZyBmb3IgLXNpbmdsZV9tb2R1bGUgbGlua2VyIGZsYWcuLi4gIiA+JjY7IH0KLWlmICR7bHRfY3ZfYXBwbGVfY2Nfc2luZ2xlX21vZCs6fSBmYWxzZTsgdGhlbiA6Ci0gICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2Ci1lbHNlCi0gIGx0X2N2X2FwcGxlX2NjX3NpbmdsZV9tb2Q9bm8KLSAgICAgIGlmIHRlc3QgLXogIiR7TFRfTVVMVElfTU9EVUxFfSI7IHRoZW4KLQkjIEJ5IGRlZmF1bHQgd2Ugd2lsbCBhZGQgdGhlIC1zaW5nbGVfbW9kdWxlIGZsYWcuIFlvdSBjYW4gb3ZlcnJpZGUKLQkjIGJ5IGVpdGhlciBzZXR0aW5nIHRoZSBlbnZpcm9ubWVudCB2YXJpYWJsZSBMVF9NVUxUSV9NT0RVTEUKLQkjIG5vbi1lbXB0eSBhdCBjb25maWd1cmUgdGltZSwgb3IgYnkgYWRkaW5nIC1tdWx0aV9tb2R1bGUgdG8gdGhlCi0JIyBsaW5rIGZsYWdzLgotCXJtIC1yZiBsaWJjb25mdGVzdC5keWxpYioKLQllY2hvICJpbnQgZm9vKHZvaWQpe3JldHVybiAxO30iID4gY29uZnRlc3QuYwotCWVjaG8gIiRMVENDICRMVENGTEFHUyAkTERGTEFHUyAtbyBsaWJjb25mdGVzdC5keWxpYiBcCi0tZHluYW1pY2xpYiAtV2wsLXNpbmdsZV9tb2R1bGUgY29uZnRlc3QuYyIgPiY1Ci0JJExUQ0MgJExUQ0ZMQUdTICRMREZMQUdTIC1vIGxpYmNvbmZ0ZXN0LmR5bGliIFwKLQkgIC1keW5hbWljbGliIC1XbCwtc2luZ2xlX21vZHVsZSBjb25mdGVzdC5jIDI+Y29uZnRlc3QuZXJyCi0gICAgICAgIF9sdF9yZXN1bHQ9JD8KLQlpZiB0ZXN0IC1mIGxpYmNvbmZ0ZXN0LmR5bGliICYmIHRlc3QgISAtcyBjb25mdGVzdC5lcnIgJiYgdGVzdCAkX2x0X3Jlc3VsdCA9IDA7IHRoZW4KLQkgIGx0X2N2X2FwcGxlX2NjX3NpbmdsZV9tb2Q9eWVzCi0JZWxzZQotCSAgY2F0IGNvbmZ0ZXN0LmVyciA+JjUKLQlmaQotCXJtIC1yZiBsaWJjb25mdGVzdC5keWxpYioKLQlybSAtZiBjb25mdGVzdC4qCi0gICAgICBmaQotZmkKLXsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkbHRfY3ZfYXBwbGVfY2Nfc2luZ2xlX21vZCIgPiY1Ci0kYXNfZWNobyAiJGx0X2N2X2FwcGxlX2NjX3NpbmdsZV9tb2QiID4mNjsgfQotICAgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgZm9yIC1leHBvcnRlZF9zeW1ib2xzX2xpc3QgbGlua2VyIGZsYWciID4mNQotJGFzX2VjaG9fbiAiY2hlY2tpbmcgZm9yIC1leHBvcnRlZF9zeW1ib2xzX2xpc3QgbGlua2VyIGZsYWcuLi4gIiA+JjY7IH0KLWlmICR7bHRfY3ZfbGRfZXhwb3J0ZWRfc3ltYm9sc19saXN0Kzp9IGZhbHNlOyB0aGVuIDoKLSAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKLWVsc2UKLSAgbHRfY3ZfbGRfZXhwb3J0ZWRfc3ltYm9sc19saXN0PW5vCi0gICAgICBzYXZlX0xERkxBR1M9JExERkxBR1MKLSAgICAgIGVjaG8gIl9tYWluIiA+IGNvbmZ0ZXN0LnN5bQotICAgICAgTERGTEFHUz0iJExERkxBR1MgLVdsLC1leHBvcnRlZF9zeW1ib2xzX2xpc3QsY29uZnRlc3Quc3ltIgotICAgICAgY2F0IGNvbmZkZWZzLmggLSA8PF9BQ0VPRiA+Y29uZnRlc3QuJGFjX2V4dAotLyogZW5kIGNvbmZkZWZzLmguICAqLwotCi1pbnQKLW1haW4gKCkKLXsKLQotICA7Ci0gIHJldHVybiAwOwotfQotX0FDRU9GCi1pZiBhY19mbl9jX3RyeV9saW5rICIkTElORU5PIjsgdGhlbiA6Ci0gIGx0X2N2X2xkX2V4cG9ydGVkX3N5bWJvbHNfbGlzdD15ZXMKLWVsc2UKLSAgbHRfY3ZfbGRfZXhwb3J0ZWRfc3ltYm9sc19saXN0PW5vCi1maQotcm0gLWYgY29yZSBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBcCi0gICAgY29uZnRlc3QkYWNfZXhlZXh0IGNvbmZ0ZXN0LiRhY19leHQKLQlMREZMQUdTPSIkc2F2ZV9MREZMQUdTIgotCi1maQoteyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRsdF9jdl9sZF9leHBvcnRlZF9zeW1ib2xzX2xpc3QiID4mNQotJGFzX2VjaG8gIiRsdF9jdl9sZF9leHBvcnRlZF9zeW1ib2xzX2xpc3QiID4mNjsgfQotICAgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgZm9yIC1mb3JjZV9sb2FkIGxpbmtlciBmbGFnIiA+JjUKLSRhc19lY2hvX24gImNoZWNraW5nIGZvciAtZm9yY2VfbG9hZCBsaW5rZXIgZmxhZy4uLiAiID4mNjsgfQotaWYgJHtsdF9jdl9sZF9mb3JjZV9sb2FkKzp9IGZhbHNlOyB0aGVuIDoKLSAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKLWVsc2UKLSAgbHRfY3ZfbGRfZm9yY2VfbG9hZD1ubwotICAgICAgY2F0ID4gY29uZnRlc3QuYyA8PCBfTFRfRU9GCi1pbnQgZm9yY2VkX2xvYWRlZCgpIHsgcmV0dXJuIDI7fQotX0xUX0VPRgotICAgICAgZWNobyAiJExUQ0MgJExUQ0ZMQUdTIC1jIC1vIGNvbmZ0ZXN0Lm8gY29uZnRlc3QuYyIgPiY1Ci0gICAgICAkTFRDQyAkTFRDRkxBR1MgLWMgLW8gY29uZnRlc3QubyBjb25mdGVzdC5jIDI+JjUKLSAgICAgIGVjaG8gIiRBUiBjcnUgbGliY29uZnRlc3QuYSBjb25mdGVzdC5vIiA+JjUKLSAgICAgICRBUiBjcnUgbGliY29uZnRlc3QuYSBjb25mdGVzdC5vIDI+JjUKLSAgICAgIGVjaG8gIiRSQU5MSUIgbGliY29uZnRlc3QuYSIgPiY1Ci0gICAgICAkUkFOTElCIGxpYmNvbmZ0ZXN0LmEgMj4mNQotICAgICAgY2F0ID4gY29uZnRlc3QuYyA8PCBfTFRfRU9GCi1pbnQgbWFpbigpIHsgcmV0dXJuIDA7fQotX0xUX0VPRgotICAgICAgZWNobyAiJExUQ0MgJExUQ0ZMQUdTICRMREZMQUdTIC1vIGNvbmZ0ZXN0IGNvbmZ0ZXN0LmMgLVdsLC1mb3JjZV9sb2FkLC4vbGliY29uZnRlc3QuYSIgPiY1Ci0gICAgICAkTFRDQyAkTFRDRkxBR1MgJExERkxBR1MgLW8gY29uZnRlc3QgY29uZnRlc3QuYyAtV2wsLWZvcmNlX2xvYWQsLi9saWJjb25mdGVzdC5hIDI+Y29uZnRlc3QuZXJyCi0gICAgICBfbHRfcmVzdWx0PSQ/Ci0gICAgICBpZiB0ZXN0IC1mIGNvbmZ0ZXN0ICYmIHRlc3QgISAtcyBjb25mdGVzdC5lcnIgJiYgdGVzdCAkX2x0X3Jlc3VsdCA9IDAgJiYgJEdSRVAgZm9yY2VkX2xvYWQgY29uZnRlc3QgMj4mMSA+L2Rldi9udWxsOyB0aGVuCi0JbHRfY3ZfbGRfZm9yY2VfbG9hZD15ZXMKLSAgICAgIGVsc2UKLQljYXQgY29uZnRlc3QuZXJyID4mNQotICAgICAgZmkKLSAgICAgICAgcm0gLWYgY29uZnRlc3QuZXJyIGxpYmNvbmZ0ZXN0LmEgY29uZnRlc3QgY29uZnRlc3QuYwotICAgICAgICBybSAtcmYgY29uZnRlc3QuZFNZTQotCi1maQoteyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRsdF9jdl9sZF9mb3JjZV9sb2FkIiA+JjUKLSRhc19lY2hvICIkbHRfY3ZfbGRfZm9yY2VfbG9hZCIgPiY2OyB9Ci0gICAgY2FzZSAkaG9zdF9vcyBpbgotICAgIHJoYXBzb2R5KiB8IGRhcndpbjEuWzAxMl0pCi0gICAgICBfbHRfZGFyX2FsbG93X3VuZGVmaW5lZD0nJHt3bH0tdW5kZWZpbmVkICR7d2x9c3VwcHJlc3MnIDs7Ci0gICAgZGFyd2luMS4qKQotICAgICAgX2x0X2Rhcl9hbGxvd191bmRlZmluZWQ9JyR7d2x9LWZsYXRfbmFtZXNwYWNlICR7d2x9LXVuZGVmaW5lZCAke3dsfXN1cHByZXNzJyA7OwotICAgIGRhcndpbiopICMgZGFyd2luIDUueCBvbgotICAgICAgIyBpZiBydW5uaW5nIG9uIDEwLjUgb3IgbGF0ZXIsIHRoZSBkZXBsb3ltZW50IHRhcmdldCBkZWZhdWx0cwotICAgICAgIyB0byB0aGUgT1MgdmVyc2lvbiwgaWYgb24geDg2LCBhbmQgMTAuNCwgdGhlIGRlcGxveW1lbnQKLSAgICAgICMgdGFyZ2V0IGRlZmF1bHRzIHRvIDEwLjQuIERvbid0IHlvdSBsb3ZlIGl0PwotICAgICAgY2FzZSAke01BQ09TWF9ERVBMT1lNRU5UX1RBUkdFVC0xMC4wfSwkaG9zdCBpbgotCTEwLjAsKjg2Ki1kYXJ3aW44KnwxMC4wLCotZGFyd2luWzkxXSopCi0JICBfbHRfZGFyX2FsbG93X3VuZGVmaW5lZD0nJHt3bH0tdW5kZWZpbmVkICR7d2x9ZHluYW1pY19sb29rdXAnIDs7Ci0JMTAuWzAxMl0qKQotCSAgX2x0X2Rhcl9hbGxvd191bmRlZmluZWQ9JyR7d2x9LWZsYXRfbmFtZXNwYWNlICR7d2x9LXVuZGVmaW5lZCAke3dsfXN1cHByZXNzJyA7OwotCTEwLiopCi0JICBfbHRfZGFyX2FsbG93X3VuZGVmaW5lZD0nJHt3bH0tdW5kZWZpbmVkICR7d2x9ZHluYW1pY19sb29rdXAnIDs7Ci0gICAgICBlc2FjCi0gICAgOzsKLSAgZXNhYwotICAgIGlmIHRlc3QgIiRsdF9jdl9hcHBsZV9jY19zaW5nbGVfbW9kIiA9ICJ5ZXMiOyB0aGVuCi0gICAgICBfbHRfZGFyX3NpbmdsZV9tb2Q9JyRzaW5nbGVfbW9kdWxlJwotICAgIGZpCi0gICAgaWYgdGVzdCAiJGx0X2N2X2xkX2V4cG9ydGVkX3N5bWJvbHNfbGlzdCIgPSAieWVzIjsgdGhlbgotICAgICAgX2x0X2Rhcl9leHBvcnRfc3ltcz0nICR7d2x9LWV4cG9ydGVkX3N5bWJvbHNfbGlzdCwkb3V0cHV0X29iamRpci8ke2xpYm5hbWV9LXN5bWJvbHMuZXhwc3ltJwotICAgIGVsc2UKLSAgICAgIF9sdF9kYXJfZXhwb3J0X3N5bXM9J34kTk1FRElUIC1zICRvdXRwdXRfb2JqZGlyLyR7bGlibmFtZX0tc3ltYm9scy5leHBzeW0gJHtsaWJ9JwotICAgIGZpCi0gICAgaWYgdGVzdCAiJERTWU1VVElMIiAhPSAiOiIgJiYgdGVzdCAiJGx0X2N2X2xkX2ZvcmNlX2xvYWQiID0gIm5vIjsgdGhlbgotICAgICAgX2x0X2RzeW11dGlsPSd+JERTWU1VVElMICRsaWIgfHwgOicKLSAgICBlbHNlCi0gICAgICBfbHRfZHN5bXV0aWw9Ci0gICAgZmkKLSAgICA7OwotICBlc2FjCi0KLWZvciBhY19oZWFkZXIgaW4gZGxmY24uaAotZG8gOgotICBhY19mbl9jX2NoZWNrX2hlYWRlcl9jb21waWxlICIkTElORU5PIiAiZGxmY24uaCIgImFjX2N2X2hlYWRlcl9kbGZjbl9oIiAiJGFjX2luY2x1ZGVzX2RlZmF1bHQKLSIKLWlmIHRlc3QgIngkYWNfY3ZfaGVhZGVyX2RsZmNuX2giID0geHllczsgdGhlbiA6Ci0gIGNhdCA+PmNvbmZkZWZzLmggPDxfQUNFT0YKLSNkZWZpbmUgSEFWRV9ETEZDTl9IIDEKLV9BQ0VPRgotCi1maQotCi1kb25lCi0KLQotCi0KLQotIyBTZXQgb3B0aW9ucwotCi0KLQotICAgICAgICBlbmFibGVfZGxvcGVuPW5vCi0KLQotCi0gICAgICAgICAgICAjIENoZWNrIHdoZXRoZXIgLS1lbmFibGUtc2hhcmVkIHdhcyBnaXZlbi4KLWlmIHRlc3QgIiR7ZW5hYmxlX3NoYXJlZCtzZXR9IiA9IHNldDsgdGhlbiA6Ci0gIGVuYWJsZXZhbD0kZW5hYmxlX3NoYXJlZDsgcD0ke1BBQ0tBR0UtZGVmYXVsdH0KLSAgICBjYXNlICRlbmFibGV2YWwgaW4KLSAgICB5ZXMpIGVuYWJsZV9zaGFyZWQ9eWVzIDs7Ci0gICAgbm8pIGVuYWJsZV9zaGFyZWQ9bm8gOzsKLSAgICAqKQotICAgICAgZW5hYmxlX3NoYXJlZD1ubwotICAgICAgIyBMb29rIGF0IHRoZSBhcmd1bWVudCB3ZSBnb3QuICBXZSB1c2UgYWxsIHRoZSBjb21tb24gbGlzdCBzZXBhcmF0b3JzLgotICAgICAgbHRfc2F2ZV9pZnM9IiRJRlMiOyBJRlM9IiR7SUZTfSRQQVRIX1NFUEFSQVRPUiwiCi0gICAgICBmb3IgcGtnIGluICRlbmFibGV2YWw7IGRvCi0JSUZTPSIkbHRfc2F2ZV9pZnMiCi0JaWYgdGVzdCAiWCRwa2ciID0gIlgkcCI7IHRoZW4KLQkgIGVuYWJsZV9zaGFyZWQ9eWVzCi0JZmkKLSAgICAgIGRvbmUKLSAgICAgIElGUz0iJGx0X3NhdmVfaWZzIgotICAgICAgOzsKLSAgICBlc2FjCi1lbHNlCi0gIGVuYWJsZV9zaGFyZWQ9eWVzCi1maQotCi0KLQotCi0KLQotCi0KLQotICAjIENoZWNrIHdoZXRoZXIgLS1lbmFibGUtc3RhdGljIHdhcyBnaXZlbi4KLWlmIHRlc3QgIiR7ZW5hYmxlX3N0YXRpYytzZXR9IiA9IHNldDsgdGhlbiA6Ci0gIGVuYWJsZXZhbD0kZW5hYmxlX3N0YXRpYzsgcD0ke1BBQ0tBR0UtZGVmYXVsdH0KLSAgICBjYXNlICRlbmFibGV2YWwgaW4KLSAgICB5ZXMpIGVuYWJsZV9zdGF0aWM9eWVzIDs7Ci0gICAgbm8pIGVuYWJsZV9zdGF0aWM9bm8gOzsKLSAgICAqKQotICAgICBlbmFibGVfc3RhdGljPW5vCi0gICAgICAjIExvb2sgYXQgdGhlIGFyZ3VtZW50IHdlIGdvdC4gIFdlIHVzZSBhbGwgdGhlIGNvbW1vbiBsaXN0IHNlcGFyYXRvcnMuCi0gICAgICBsdF9zYXZlX2lmcz0iJElGUyI7IElGUz0iJHtJRlN9JFBBVEhfU0VQQVJBVE9SLCIKLSAgICAgIGZvciBwa2cgaW4gJGVuYWJsZXZhbDsgZG8KLQlJRlM9IiRsdF9zYXZlX2lmcyIKLQlpZiB0ZXN0ICJYJHBrZyIgPSAiWCRwIjsgdGhlbgotCSAgZW5hYmxlX3N0YXRpYz15ZXMKLQlmaQotICAgICAgZG9uZQotICAgICAgSUZTPSIkbHRfc2F2ZV9pZnMiCi0gICAgICA7OwotICAgIGVzYWMKLWVsc2UKLSAgZW5hYmxlX3N0YXRpYz15ZXMKLWZpCi0KLQotCi0KLQotCi0KLQotCi0KLSMgQ2hlY2sgd2hldGhlciAtLXdpdGgtcGljIHdhcyBnaXZlbi4KLWlmIHRlc3QgIiR7d2l0aF9waWMrc2V0fSIgPSBzZXQ7IHRoZW4gOgotICB3aXRodmFsPSR3aXRoX3BpYzsgcGljX21vZGU9IiR3aXRodmFsIgotZWxzZQotICBwaWNfbW9kZT1kZWZhdWx0Ci1maQotCi0KLXRlc3QgLXogIiRwaWNfbW9kZSIgJiYgcGljX21vZGU9ZGVmYXVsdAotCi0KLQotCi0KLQotCi0gICMgQ2hlY2sgd2hldGhlciAtLWVuYWJsZS1mYXN0LWluc3RhbGwgd2FzIGdpdmVuLgotaWYgdGVzdCAiJHtlbmFibGVfZmFzdF9pbnN0YWxsK3NldH0iID0gc2V0OyB0aGVuIDoKLSAgZW5hYmxldmFsPSRlbmFibGVfZmFzdF9pbnN0YWxsOyBwPSR7UEFDS0FHRS1kZWZhdWx0fQotICAgIGNhc2UgJGVuYWJsZXZhbCBpbgotICAgIHllcykgZW5hYmxlX2Zhc3RfaW5zdGFsbD15ZXMgOzsKLSAgICBubykgZW5hYmxlX2Zhc3RfaW5zdGFsbD1ubyA7OwotICAgICopCi0gICAgICBlbmFibGVfZmFzdF9pbnN0YWxsPW5vCi0gICAgICAjIExvb2sgYXQgdGhlIGFyZ3VtZW50IHdlIGdvdC4gIFdlIHVzZSBhbGwgdGhlIGNvbW1vbiBsaXN0IHNlcGFyYXRvcnMuCi0gICAgICBsdF9zYXZlX2lmcz0iJElGUyI7IElGUz0iJHtJRlN9JFBBVEhfU0VQQVJBVE9SLCIKLSAgICAgIGZvciBwa2cgaW4gJGVuYWJsZXZhbDsgZG8KLQlJRlM9IiRsdF9zYXZlX2lmcyIKLQlpZiB0ZXN0ICJYJHBrZyIgPSAiWCRwIjsgdGhlbgotCSAgZW5hYmxlX2Zhc3RfaW5zdGFsbD15ZXMKLQlmaQotICAgICAgZG9uZQotICAgICAgSUZTPSIkbHRfc2F2ZV9pZnMiCi0gICAgICA7OwotICAgIGVzYWMKLWVsc2UKLSAgZW5hYmxlX2Zhc3RfaW5zdGFsbD15ZXMKLWZpCi0KLQotCi0KLQotCi0KLQotCi0KLQotIyBUaGlzIGNhbiBiZSB1c2VkIHRvIHJlYnVpbGQgbGlidG9vbCB3aGVuIG5lZWRlZAotTElCVE9PTF9ERVBTPSIkbHRtYWluIgotCi0jIEFsd2F5cyB1c2Ugb3VyIG93biBsaWJ0b29sLgotTElCVE9PTD0nJChTSEVMTCkgJCh0b3BfYnVpbGRkaXIpL2xpYnRvb2wnCi0KLQotCi0KLQotCi0KLQotCi0KLQotCi0KLQotCi0KLQotCi0KLQotCi0KLQotCi0KLQotdGVzdCAteiAiJExOX1MiICYmIExOX1M9ImxuIC1zIgotCi0KLQotCi0KLQotCi0KLQotCi0KLQotCi0KLWlmIHRlc3QgLW4gIiR7WlNIX1ZFUlNJT04rc2V0fSIgOyB0aGVuCi0gICBzZXRvcHQgTk9fR0xPQl9TVUJTVAotZmkKLQoteyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBmb3Igb2JqZGlyIiA+JjUKLSRhc19lY2hvX24gImNoZWNraW5nIGZvciBvYmpkaXIuLi4gIiA+JjY7IH0KLWlmICR7bHRfY3Zfb2JqZGlyKzp9IGZhbHNlOyB0aGVuIDoKLSAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKLWVsc2UKLSAgcm0gLWYgLmxpYnMgMj4vZGV2L251bGwKLW1rZGlyIC5saWJzIDI+L2Rldi9udWxsCi1pZiB0ZXN0IC1kIC5saWJzOyB0aGVuCi0gIGx0X2N2X29iamRpcj0ubGlicwotZWxzZQotICAjIE1TLURPUyBkb2VzIG5vdCBhbGxvdyBmaWxlbmFtZXMgdGhhdCBiZWdpbiB3aXRoIGEgZG90LgotICBsdF9jdl9vYmpkaXI9X2xpYnMKLWZpCi1ybWRpciAubGlicyAyPi9kZXYvbnVsbAotZmkKLXsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkbHRfY3Zfb2JqZGlyIiA+JjUKLSRhc19lY2hvICIkbHRfY3Zfb2JqZGlyIiA+JjY7IH0KLW9iamRpcj0kbHRfY3Zfb2JqZGlyCi0KLQotCi0KLQotY2F0ID4+Y29uZmRlZnMuaCA8PF9BQ0VPRgotI2RlZmluZSBMVF9PQkpESVIgIiRsdF9jdl9vYmpkaXIvIgotX0FDRU9GCi0KLQotCi0KLWNhc2UgJGhvc3Rfb3MgaW4KLWFpeDMqKQotICAjIEFJWCBzb21ldGltZXMgaGFzIHByb2JsZW1zIHdpdGggdGhlIEdDQyBjb2xsZWN0MiBwcm9ncmFtLiAgRm9yIHNvbWUKLSAgIyByZWFzb24sIGlmIHdlIHNldCB0aGUgQ09MTEVDVF9OQU1FUyBlbnZpcm9ubWVudCB2YXJpYWJsZSwgdGhlIHByb2JsZW1zCi0gICMgdmFuaXNoIGluIGEgcHVmZiBvZiBzbW9rZS4KLSAgaWYgdGVzdCAiWCR7Q09MTEVDVF9OQU1FUytzZXR9IiAhPSBYc2V0OyB0aGVuCi0gICAgQ09MTEVDVF9OQU1FUz0KLSAgICBleHBvcnQgQ09MTEVDVF9OQU1FUwotICBmaQotICA7OwotZXNhYwotCi0jIEdsb2JhbCB2YXJpYWJsZXM6Ci1vZmlsZT1saWJ0b29sCi1jYW5fYnVpbGRfc2hhcmVkPXllcwotCi0jIEFsbCBrbm93biBsaW5rZXJzIHJlcXVpcmUgYSBgLmEnIGFyY2hpdmUgZm9yIHN0YXRpYyBsaW5raW5nIChleGNlcHQgTVNWQywKLSMgd2hpY2ggbmVlZHMgJy5saWInKS4KLWxpYmV4dD1hCi0KLXdpdGhfZ251X2xkPSIkbHRfY3ZfcHJvZ19nbnVfbGQiCi0KLW9sZF9DQz0iJENDIgotb2xkX0NGTEFHUz0iJENGTEFHUyIKLQotIyBTZXQgc2FuZSBkZWZhdWx0cyBmb3IgdmFyaW91cyB2YXJpYWJsZXMKLXRlc3QgLXogIiRDQyIgJiYgQ0M9Y2MKLXRlc3QgLXogIiRMVENDIiAmJiBMVENDPSRDQwotdGVzdCAteiAiJExUQ0ZMQUdTIiAmJiBMVENGTEFHUz0kQ0ZMQUdTCi10ZXN0IC16ICIkTEQiICYmIExEPWxkCi10ZXN0IC16ICIkYWNfb2JqZXh0IiAmJiBhY19vYmpleHQ9bwotCi1mb3IgY2NfdGVtcCBpbiAkY29tcGlsZXIiIjsgZG8KLSAgY2FzZSAkY2NfdGVtcCBpbgotICAgIGNvbXBpbGUgfCAqW1xcL11jb21waWxlIHwgY2NhY2hlIHwgKltcXC9dY2NhY2hlICkgOzsKLSAgICBkaXN0Y2MgfCAqW1xcL11kaXN0Y2MgfCBwdXJpZnkgfCAqW1xcL11wdXJpZnkgKSA7OwotICAgIFwtKikgOzsKLSAgICAqKSBicmVhazs7Ci0gIGVzYWMKLWRvbmUKLWNjX2Jhc2VuYW1lPWAkRUNITyAiJGNjX3RlbXAiIHwgJFNFRCAicyUuKi8lJTsgcyVeJGhvc3RfYWxpYXMtJSUiYAotCi0KLSMgT25seSBwZXJmb3JtIHRoZSBjaGVjayBmb3IgZmlsZSwgaWYgdGhlIGNoZWNrIG1ldGhvZCByZXF1aXJlcyBpdAotdGVzdCAteiAiJE1BR0lDX0NNRCIgJiYgTUFHSUNfQ01EPWZpbGUKLWNhc2UgJGRlcGxpYnNfY2hlY2tfbWV0aG9kIGluCi1maWxlX21hZ2ljKikKLSAgaWYgdGVzdCAiJGZpbGVfbWFnaWNfY21kIiA9ICckTUFHSUNfQ01EJzsgdGhlbgotICAgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgZm9yICR7YWNfdG9vbF9wcmVmaXh9ZmlsZSIgPiY1Ci0kYXNfZWNob19uICJjaGVja2luZyBmb3IgJHthY190b29sX3ByZWZpeH1maWxlLi4uICIgPiY2OyB9Ci1pZiAke2x0X2N2X3BhdGhfTUFHSUNfQ01EKzp9IGZhbHNlOyB0aGVuIDoKLSAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKLWVsc2UKLSAgY2FzZSAkTUFHSUNfQ01EIGluCi1bXFwvKl0gfCAgPzpbXFwvXSopCi0gIGx0X2N2X3BhdGhfTUFHSUNfQ01EPSIkTUFHSUNfQ01EIiAjIExldCB0aGUgdXNlciBvdmVycmlkZSB0aGUgdGVzdCB3aXRoIGEgcGF0aC4KLSAgOzsKLSopCi0gIGx0X3NhdmVfTUFHSUNfQ01EPSIkTUFHSUNfQ01EIgotICBsdF9zYXZlX2lmcz0iJElGUyI7IElGUz0kUEFUSF9TRVBBUkFUT1IKLSAgYWNfZHVtbXk9Ii91c3IvYmluJFBBVEhfU0VQQVJBVE9SJFBBVEgiCi0gIGZvciBhY19kaXIgaW4gJGFjX2R1bW15OyBkbwotICAgIElGUz0iJGx0X3NhdmVfaWZzIgotICAgIHRlc3QgLXogIiRhY19kaXIiICYmIGFjX2Rpcj0uCi0gICAgaWYgdGVzdCAtZiAkYWNfZGlyLyR7YWNfdG9vbF9wcmVmaXh9ZmlsZTsgdGhlbgotICAgICAgbHRfY3ZfcGF0aF9NQUdJQ19DTUQ9IiRhY19kaXIvJHthY190b29sX3ByZWZpeH1maWxlIgotICAgICAgaWYgdGVzdCAtbiAiJGZpbGVfbWFnaWNfdGVzdF9maWxlIjsgdGhlbgotCWNhc2UgJGRlcGxpYnNfY2hlY2tfbWV0aG9kIGluCi0JImZpbGVfbWFnaWMgIiopCi0JICBmaWxlX21hZ2ljX3JlZ2V4PWBleHByICIkZGVwbGlic19jaGVja19tZXRob2QiIDogImZpbGVfbWFnaWMgXCguKlwpImAKLQkgIE1BR0lDX0NNRD0iJGx0X2N2X3BhdGhfTUFHSUNfQ01EIgotCSAgaWYgZXZhbCAkZmlsZV9tYWdpY19jbWQgXCRmaWxlX21hZ2ljX3Rlc3RfZmlsZSAyPiAvZGV2L251bGwgfAotCSAgICAkRUdSRVAgIiRmaWxlX21hZ2ljX3JlZ2V4IiA+IC9kZXYvbnVsbDsgdGhlbgotCSAgICA6Ci0JICBlbHNlCi0JICAgIGNhdCA8PF9MVF9FT0YgMT4mMgotCi0qKiogV2FybmluZzogdGhlIGNvbW1hbmQgbGlidG9vbCB1c2VzIHRvIGRldGVjdCBzaGFyZWQgbGlicmFyaWVzLAotKioqICRmaWxlX21hZ2ljX2NtZCwgcHJvZHVjZXMgb3V0cHV0IHRoYXQgbGlidG9vbCBjYW5ub3QgcmVjb2duaXplLgotKioqIFRoZSByZXN1bHQgaXMgdGhhdCBsaWJ0b29sIG1heSBmYWlsIHRvIHJlY29nbml6ZSBzaGFyZWQgbGlicmFyaWVzCi0qKiogYXMgc3VjaC4gIFRoaXMgd2lsbCBhZmZlY3QgdGhlIGNyZWF0aW9uIG9mIGxpYnRvb2wgbGlicmFyaWVzIHRoYXQKLSoqKiBkZXBlbmQgb24gc2hhcmVkIGxpYnJhcmllcywgYnV0IHByb2dyYW1zIGxpbmtlZCB3aXRoIHN1Y2ggbGlidG9vbAotKioqIGxpYnJhcmllcyB3aWxsIHdvcmsgcmVnYXJkbGVzcyBvZiB0aGlzIHByb2JsZW0uICBOZXZlcnRoZWxlc3MsIHlvdQotKioqIG1heSB3YW50IHRvIHJlcG9ydCB0aGUgcHJvYmxlbSB0byB5b3VyIHN5c3RlbSBtYW5hZ2VyIGFuZC9vciB0bwotKioqIGJ1Zy1saWJ0b29sQGdudS5vcmcKLQotX0xUX0VPRgotCSAgZmkgOzsKLQllc2FjCi0gICAgICBmaQotICAgICAgYnJlYWsKLSAgICBmaQotICBkb25lCi0gIElGUz0iJGx0X3NhdmVfaWZzIgotICBNQUdJQ19DTUQ9IiRsdF9zYXZlX01BR0lDX0NNRCIKLSAgOzsKLWVzYWMKLWZpCi0KLU1BR0lDX0NNRD0iJGx0X2N2X3BhdGhfTUFHSUNfQ01EIgotaWYgdGVzdCAtbiAiJE1BR0lDX0NNRCI7IHRoZW4KLSAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRNQUdJQ19DTUQiID4mNQotJGFzX2VjaG8gIiRNQUdJQ19DTUQiID4mNjsgfQotZWxzZQotICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogbm8iID4mNQotJGFzX2VjaG8gIm5vIiA+JjY7IH0KLWZpCi0KLQotCi0KLQotaWYgdGVzdCAteiAiJGx0X2N2X3BhdGhfTUFHSUNfQ01EIjsgdGhlbgotICBpZiB0ZXN0IC1uICIkYWNfdG9vbF9wcmVmaXgiOyB0aGVuCi0gICAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBmb3IgZmlsZSIgPiY1Ci0kYXNfZWNob19uICJjaGVja2luZyBmb3IgZmlsZS4uLiAiID4mNjsgfQotaWYgJHtsdF9jdl9wYXRoX01BR0lDX0NNRCs6fSBmYWxzZTsgdGhlbiA6Ci0gICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2Ci1lbHNlCi0gIGNhc2UgJE1BR0lDX0NNRCBpbgotW1xcLypdIHwgID86W1xcL10qKQotICBsdF9jdl9wYXRoX01BR0lDX0NNRD0iJE1BR0lDX0NNRCIgIyBMZXQgdGhlIHVzZXIgb3ZlcnJpZGUgdGhlIHRlc3Qgd2l0aCBhIHBhdGguCi0gIDs7Ci0qKQotICBsdF9zYXZlX01BR0lDX0NNRD0iJE1BR0lDX0NNRCIKLSAgbHRfc2F2ZV9pZnM9IiRJRlMiOyBJRlM9JFBBVEhfU0VQQVJBVE9SCi0gIGFjX2R1bW15PSIvdXNyL2JpbiRQQVRIX1NFUEFSQVRPUiRQQVRIIgotICBmb3IgYWNfZGlyIGluICRhY19kdW1teTsgZG8KLSAgICBJRlM9IiRsdF9zYXZlX2lmcyIKLSAgICB0ZXN0IC16ICIkYWNfZGlyIiAmJiBhY19kaXI9LgotICAgIGlmIHRlc3QgLWYgJGFjX2Rpci9maWxlOyB0aGVuCi0gICAgICBsdF9jdl9wYXRoX01BR0lDX0NNRD0iJGFjX2Rpci9maWxlIgotICAgICAgaWYgdGVzdCAtbiAiJGZpbGVfbWFnaWNfdGVzdF9maWxlIjsgdGhlbgotCWNhc2UgJGRlcGxpYnNfY2hlY2tfbWV0aG9kIGluCi0JImZpbGVfbWFnaWMgIiopCi0JICBmaWxlX21hZ2ljX3JlZ2V4PWBleHByICIkZGVwbGlic19jaGVja19tZXRob2QiIDogImZpbGVfbWFnaWMgXCguKlwpImAKLQkgIE1BR0lDX0NNRD0iJGx0X2N2X3BhdGhfTUFHSUNfQ01EIgotCSAgaWYgZXZhbCAkZmlsZV9tYWdpY19jbWQgXCRmaWxlX21hZ2ljX3Rlc3RfZmlsZSAyPiAvZGV2L251bGwgfAotCSAgICAkRUdSRVAgIiRmaWxlX21hZ2ljX3JlZ2V4IiA+IC9kZXYvbnVsbDsgdGhlbgotCSAgICA6Ci0JICBlbHNlCi0JICAgIGNhdCA8PF9MVF9FT0YgMT4mMgotCi0qKiogV2FybmluZzogdGhlIGNvbW1hbmQgbGlidG9vbCB1c2VzIHRvIGRldGVjdCBzaGFyZWQgbGlicmFyaWVzLAotKioqICRmaWxlX21hZ2ljX2NtZCwgcHJvZHVjZXMgb3V0cHV0IHRoYXQgbGlidG9vbCBjYW5ub3QgcmVjb2duaXplLgotKioqIFRoZSByZXN1bHQgaXMgdGhhdCBsaWJ0b29sIG1heSBmYWlsIHRvIHJlY29nbml6ZSBzaGFyZWQgbGlicmFyaWVzCi0qKiogYXMgc3VjaC4gIFRoaXMgd2lsbCBhZmZlY3QgdGhlIGNyZWF0aW9uIG9mIGxpYnRvb2wgbGlicmFyaWVzIHRoYXQKLSoqKiBkZXBlbmQgb24gc2hhcmVkIGxpYnJhcmllcywgYnV0IHByb2dyYW1zIGxpbmtlZCB3aXRoIHN1Y2ggbGlidG9vbAotKioqIGxpYnJhcmllcyB3aWxsIHdvcmsgcmVnYXJkbGVzcyBvZiB0aGlzIHByb2JsZW0uICBOZXZlcnRoZWxlc3MsIHlvdQotKioqIG1heSB3YW50IHRvIHJlcG9ydCB0aGUgcHJvYmxlbSB0byB5b3VyIHN5c3RlbSBtYW5hZ2VyIGFuZC9vciB0bwotKioqIGJ1Zy1saWJ0b29sQGdudS5vcmcKLQotX0xUX0VPRgotCSAgZmkgOzsKLQllc2FjCi0gICAgICBmaQotICAgICAgYnJlYWsKLSAgICBmaQotICBkb25lCi0gIElGUz0iJGx0X3NhdmVfaWZzIgotICBNQUdJQ19DTUQ9IiRsdF9zYXZlX01BR0lDX0NNRCIKLSAgOzsKLWVzYWMKLWZpCi0KLU1BR0lDX0NNRD0iJGx0X2N2X3BhdGhfTUFHSUNfQ01EIgotaWYgdGVzdCAtbiAiJE1BR0lDX0NNRCI7IHRoZW4KLSAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRNQUdJQ19DTUQiID4mNQotJGFzX2VjaG8gIiRNQUdJQ19DTUQiID4mNjsgfQotZWxzZQotICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogbm8iID4mNQotJGFzX2VjaG8gIm5vIiA+JjY7IH0KLWZpCi0KLQotICBlbHNlCi0gICAgTUFHSUNfQ01EPToKLSAgZmkKLWZpCi0KLSAgZmkKLSAgOzsKLWVzYWMKLQotIyBVc2UgQyBmb3IgdGhlIGRlZmF1bHQgY29uZmlndXJhdGlvbiBpbiB0aGUgbGlidG9vbCBzY3JpcHQKLQotbHRfc2F2ZV9DQz0iJENDIgotYWNfZXh0PWMKLWFjX2NwcD0nJENQUCAkQ1BQRkxBR1MnCi1hY19jb21waWxlPSckQ0MgLWMgJENGTEFHUyAkQ1BQRkxBR1MgY29uZnRlc3QuJGFjX2V4dCA+JjUnCi1hY19saW5rPSckQ0MgLW8gY29uZnRlc3QkYWNfZXhlZXh0ICRDRkxBR1MgJENQUEZMQUdTICRMREZMQUdTIGNvbmZ0ZXN0LiRhY19leHQgJExJQlMgPiY1JwotYWNfY29tcGlsZXJfZ251PSRhY19jdl9jX2NvbXBpbGVyX2dudQotCi0KLSMgU291cmNlIGZpbGUgZXh0ZW5zaW9uIGZvciBDIHRlc3Qgc291cmNlcy4KLWFjX2V4dD1jCi0KLSMgT2JqZWN0IGZpbGUgZXh0ZW5zaW9uIGZvciBjb21waWxlZCBDIHRlc3Qgc291cmNlcy4KLW9iamV4dD1vCi1vYmpleHQ9JG9iamV4dAotCi0jIENvZGUgdG8gYmUgdXNlZCBpbiBzaW1wbGUgY29tcGlsZSB0ZXN0cwotbHRfc2ltcGxlX2NvbXBpbGVfdGVzdF9jb2RlPSJpbnQgc29tZV92YXJpYWJsZSA9IDA7IgotCi0jIENvZGUgdG8gYmUgdXNlZCBpbiBzaW1wbGUgbGluayB0ZXN0cwotbHRfc2ltcGxlX2xpbmtfdGVzdF9jb2RlPSdpbnQgbWFpbigpe3JldHVybigwKTt9JwotCi0KLQotCi0KLQotCi0jIElmIG5vIEMgY29tcGlsZXIgd2FzIHNwZWNpZmllZCwgdXNlIENDLgotTFRDQz0ke0xUQ0MtIiRDQyJ9Ci0KLSMgSWYgbm8gQyBjb21waWxlciBmbGFncyB3ZXJlIHNwZWNpZmllZCwgdXNlIENGTEFHUy4KLUxUQ0ZMQUdTPSR7TFRDRkxBR1MtIiRDRkxBR1MifQotCi0jIEFsbG93IENDIHRvIGJlIGEgcHJvZ3JhbSBuYW1lIHdpdGggYXJndW1lbnRzLgotY29tcGlsZXI9JENDCi0KLSMgU2F2ZSB0aGUgZGVmYXVsdCBjb21waWxlciwgc2luY2UgaXQgZ2V0cyBvdmVyd3JpdHRlbiB3aGVuIHRoZSBvdGhlcgotIyB0YWdzIGFyZSBiZWluZyB0ZXN0ZWQsIGFuZCBfTFRfVEFHVkFSKGNvbXBpbGVyLCBbXSkgaXMgYSBOT1AuCi1jb21waWxlcl9ERUZBVUxUPSRDQwotCi0jIHNhdmUgd2FybmluZ3MvYm9pbGVycGxhdGUgb2Ygc2ltcGxlIHRlc3QgY29kZQotYWNfb3V0ZmlsZT1jb25mdGVzdC4kYWNfb2JqZXh0Ci1lY2hvICIkbHRfc2ltcGxlX2NvbXBpbGVfdGVzdF9jb2RlIiA+Y29uZnRlc3QuJGFjX2V4dAotZXZhbCAiJGFjX2NvbXBpbGUiIDI+JjEgPi9kZXYvbnVsbCB8ICRTRUQgJy9eJC9kOyAvXiAqKy9kJyA+Y29uZnRlc3QuZXJyCi1fbHRfY29tcGlsZXJfYm9pbGVycGxhdGU9YGNhdCBjb25mdGVzdC5lcnJgCi0kUk0gY29uZnRlc3QqCi0KLWFjX291dGZpbGU9Y29uZnRlc3QuJGFjX29iamV4dAotZWNobyAiJGx0X3NpbXBsZV9saW5rX3Rlc3RfY29kZSIgPmNvbmZ0ZXN0LiRhY19leHQKLWV2YWwgIiRhY19saW5rIiAyPiYxID4vZGV2L251bGwgfCAkU0VEICcvXiQvZDsgL14gKisvZCcgPmNvbmZ0ZXN0LmVycgotX2x0X2xpbmtlcl9ib2lsZXJwbGF0ZT1gY2F0IGNvbmZ0ZXN0LmVycmAKLSRSTSAtciBjb25mdGVzdCoKLQotCi1pZiB0ZXN0IC1uICIkY29tcGlsZXIiOyB0aGVuCi0KLWx0X3Byb2dfY29tcGlsZXJfbm9fYnVpbHRpbl9mbGFnPQotCi1pZiB0ZXN0ICIkR0NDIiA9IHllczsgdGhlbgotICBjYXNlICRjY19iYXNlbmFtZSBpbgotICBudmNjKikKLSAgICBsdF9wcm9nX2NvbXBpbGVyX25vX2J1aWx0aW5fZmxhZz0nIC1YY29tcGlsZXIgLWZuby1idWlsdGluJyA7OwotICAqKQotICAgIGx0X3Byb2dfY29tcGlsZXJfbm9fYnVpbHRpbl9mbGFnPScgLWZuby1idWlsdGluJyA7OwotICBlc2FjCi0KLSAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBpZiAkY29tcGlsZXIgc3VwcG9ydHMgLWZuby1ydHRpIC1mbm8tZXhjZXB0aW9ucyIgPiY1Ci0kYXNfZWNob19uICJjaGVja2luZyBpZiAkY29tcGlsZXIgc3VwcG9ydHMgLWZuby1ydHRpIC1mbm8tZXhjZXB0aW9ucy4uLiAiID4mNjsgfQotaWYgJHtsdF9jdl9wcm9nX2NvbXBpbGVyX3J0dGlfZXhjZXB0aW9ucys6fSBmYWxzZTsgdGhlbiA6Ci0gICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2Ci1lbHNlCi0gIGx0X2N2X3Byb2dfY29tcGlsZXJfcnR0aV9leGNlcHRpb25zPW5vCi0gICBhY19vdXRmaWxlPWNvbmZ0ZXN0LiRhY19vYmpleHQKLSAgIGVjaG8gIiRsdF9zaW1wbGVfY29tcGlsZV90ZXN0X2NvZGUiID4gY29uZnRlc3QuJGFjX2V4dAotICAgbHRfY29tcGlsZXJfZmxhZz0iLWZuby1ydHRpIC1mbm8tZXhjZXB0aW9ucyIKLSAgICMgSW5zZXJ0IHRoZSBvcHRpb24gZWl0aGVyICgxKSBhZnRlciB0aGUgbGFzdCAqRkxBR1MgdmFyaWFibGUsIG9yCi0gICAjICgyKSBiZWZvcmUgYSB3b3JkIGNvbnRhaW5pbmcgImNvbmZ0ZXN0LiIsIG9yICgzKSBhdCB0aGUgZW5kLgotICAgIyBOb3RlIHRoYXQgJGFjX2NvbXBpbGUgaXRzZWxmIGRvZXMgbm90IGNvbnRhaW4gYmFja3NsYXNoZXMgYW5kIGJlZ2lucwotICAgIyB3aXRoIGEgZG9sbGFyIHNpZ24gKG5vdCBhIGh5cGhlbiksIHNvIHRoZSBlY2hvIHNob3VsZCB3b3JrIGNvcnJlY3RseS4KLSAgICMgVGhlIG9wdGlvbiBpcyByZWZlcmVuY2VkIHZpYSBhIHZhcmlhYmxlIHRvIGF2b2lkIGNvbmZ1c2luZyBzZWQuCi0gICBsdF9jb21waWxlPWBlY2hvICIkYWNfY29tcGlsZSIgfCAkU0VEIFwKLSAgIC1lICdzOi4qRkxBR1N9XHswLDFcfSA6JiRsdF9jb21waWxlcl9mbGFnIDo7IHQnIFwKLSAgIC1lICdzOiBbXiBdKmNvbmZ0ZXN0XC46ICRsdF9jb21waWxlcl9mbGFnJjo7IHQnIFwKLSAgIC1lICdzOiQ6ICRsdF9jb21waWxlcl9mbGFnOidgCi0gICAoZXZhbCBlY2hvICJcIlwkYXNfbWU6JExJTkVOTzogJGx0X2NvbXBpbGVcIiIgPiY1KQotICAgKGV2YWwgIiRsdF9jb21waWxlIiAyPmNvbmZ0ZXN0LmVycikKLSAgIGFjX3N0YXR1cz0kPwotICAgY2F0IGNvbmZ0ZXN0LmVyciA+JjUKLSAgIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKLSAgIGlmIChleGl0ICRhY19zdGF0dXMpICYmIHRlc3QgLXMgIiRhY19vdXRmaWxlIjsgdGhlbgotICAgICAjIFRoZSBjb21waWxlciBjYW4gb25seSB3YXJuIGFuZCBpZ25vcmUgdGhlIG9wdGlvbiBpZiBub3QgcmVjb2duaXplZAotICAgICAjIFNvIHNheSBubyBpZiB0aGVyZSBhcmUgd2FybmluZ3Mgb3RoZXIgdGhhbiB0aGUgdXN1YWwgb3V0cHV0LgotICAgICAkRUNITyAiJF9sdF9jb21waWxlcl9ib2lsZXJwbGF0ZSIgfCAkU0VEICcvXiQvZCcgPmNvbmZ0ZXN0LmV4cAotICAgICAkU0VEICcvXiQvZDsgL14gKisvZCcgY29uZnRlc3QuZXJyID5jb25mdGVzdC5lcjIKLSAgICAgaWYgdGVzdCAhIC1zIGNvbmZ0ZXN0LmVyMiB8fCBkaWZmIGNvbmZ0ZXN0LmV4cCBjb25mdGVzdC5lcjIgPi9kZXYvbnVsbDsgdGhlbgotICAgICAgIGx0X2N2X3Byb2dfY29tcGlsZXJfcnR0aV9leGNlcHRpb25zPXllcwotICAgICBmaQotICAgZmkKLSAgICRSTSBjb25mdGVzdCoKLQotZmkKLXsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkbHRfY3ZfcHJvZ19jb21waWxlcl9ydHRpX2V4Y2VwdGlvbnMiID4mNQotJGFzX2VjaG8gIiRsdF9jdl9wcm9nX2NvbXBpbGVyX3J0dGlfZXhjZXB0aW9ucyIgPiY2OyB9Ci0KLWlmIHRlc3QgeCIkbHRfY3ZfcHJvZ19jb21waWxlcl9ydHRpX2V4Y2VwdGlvbnMiID0geHllczsgdGhlbgotICAgIGx0X3Byb2dfY29tcGlsZXJfbm9fYnVpbHRpbl9mbGFnPSIkbHRfcHJvZ19jb21waWxlcl9ub19idWlsdGluX2ZsYWcgLWZuby1ydHRpIC1mbm8tZXhjZXB0aW9ucyIKLWVsc2UKLSAgICA6Ci1maQotCi1maQotCi0KLQotCi0KLQotICBsdF9wcm9nX2NvbXBpbGVyX3dsPQotbHRfcHJvZ19jb21waWxlcl9waWM9Ci1sdF9wcm9nX2NvbXBpbGVyX3N0YXRpYz0KLQotCi0gIGlmIHRlc3QgIiRHQ0MiID0geWVzOyB0aGVuCi0gICAgbHRfcHJvZ19jb21waWxlcl93bD0nLVdsLCcKLSAgICBsdF9wcm9nX2NvbXBpbGVyX3N0YXRpYz0nLXN0YXRpYycKLQotICAgIGNhc2UgJGhvc3Rfb3MgaW4KLSAgICAgIGFpeCopCi0gICAgICAjIEFsbCBBSVggY29kZSBpcyBQSUMuCi0gICAgICBpZiB0ZXN0ICIkaG9zdF9jcHUiID0gaWE2NDsgdGhlbgotCSMgQUlYIDUgbm93IHN1cHBvcnRzIElBNjQgcHJvY2Vzc29yCi0JbHRfcHJvZ19jb21waWxlcl9zdGF0aWM9Jy1Cc3RhdGljJwotICAgICAgZmkKLSAgICAgIDs7Ci0KLSAgICBhbWlnYW9zKikKLSAgICAgIGNhc2UgJGhvc3RfY3B1IGluCi0gICAgICBwb3dlcnBjKQotICAgICAgICAgICAgIyBzZWUgY29tbWVudCBhYm91dCBBbWlnYU9TNCAuc28gc3VwcG9ydAotICAgICAgICAgICAgbHRfcHJvZ19jb21waWxlcl9waWM9Jy1mUElDJwotICAgICAgICA7OwotICAgICAgbTY4aykKLSAgICAgICAgICAgICMgRklYTUU6IHdlIG5lZWQgYXQgbGVhc3QgNjgwMjAgY29kZSB0byBidWlsZCBzaGFyZWQgbGlicmFyaWVzLCBidXQKLSAgICAgICAgICAgICMgYWRkaW5nIHRoZSBgLW02ODAyMCcgZmxhZyB0byBHQ0MgcHJldmVudHMgYnVpbGRpbmcgYW55dGhpbmcgYmV0dGVyLAotICAgICAgICAgICAgIyBsaWtlIGAtbTY4MDQwJy4KLSAgICAgICAgICAgIGx0X3Byb2dfY29tcGlsZXJfcGljPSctbTY4MDIwIC1yZXNpZGVudDMyIC1tYWx3YXlzLXJlc3RvcmUtYTQnCi0gICAgICAgIDs7Ci0gICAgICBlc2FjCi0gICAgICA7OwotCi0gICAgYmVvcyogfCBpcml4NSogfCBpcml4NiogfCBub25zdG9wdXgqIHwgb3NmMyogfCBvc2Y0KiB8IG9zZjUqKQotICAgICAgIyBQSUMgaXMgdGhlIGRlZmF1bHQgZm9yIHRoZXNlIE9TZXMuCi0gICAgICA7OwotCi0gICAgbWluZ3cqIHwgY3lnd2luKiB8IHB3MzIqIHwgb3MyKiB8IGNlZ2NjKikKLSAgICAgICMgVGhpcyBoYWNrIGlzIHNvIHRoYXQgdGhlIHNvdXJjZSBmaWxlIGNhbiB0ZWxsIHdoZXRoZXIgaXQgaXMgYmVpbmcKLSAgICAgICMgYnVpbHQgZm9yIGluY2x1c2lvbiBpbiBhIGRsbCAoYW5kIHNob3VsZCBleHBvcnQgc3ltYm9scyBmb3IgZXhhbXBsZSkuCi0gICAgICAjIEFsdGhvdWdoIHRoZSBjeWd3aW4gZ2NjIGlnbm9yZXMgLWZQSUMsIHN0aWxsIG5lZWQgdGhpcyBmb3Igb2xkLXN0eWxlCi0gICAgICAjICgtLWRpc2FibGUtYXV0by1pbXBvcnQpIGxpYnJhcmllcwotICAgICAgbHRfcHJvZ19jb21waWxlcl9waWM9Jy1ERExMX0VYUE9SVCcKLSAgICAgIDs7Ci0KLSAgICBkYXJ3aW4qIHwgcmhhcHNvZHkqKQotICAgICAgIyBQSUMgaXMgdGhlIGRlZmF1bHQgb24gdGhpcyBwbGF0Zm9ybQotICAgICAgIyBDb21tb24gc3ltYm9scyBub3QgYWxsb3dlZCBpbiBNSF9EWUxJQiBmaWxlcwotICAgICAgbHRfcHJvZ19jb21waWxlcl9waWM9Jy1mbm8tY29tbW9uJwotICAgICAgOzsKLQotICAgIGhhaWt1KikKLSAgICAgICMgUElDIGlzIHRoZSBkZWZhdWx0IGZvciBIYWlrdS4KLSAgICAgICMgVGhlICItc3RhdGljIiBmbGFnIGV4aXN0cywgYnV0IGlzIGJyb2tlbi4KLSAgICAgIGx0X3Byb2dfY29tcGlsZXJfc3RhdGljPQotICAgICAgOzsKLQotICAgIGhwdXgqKQotICAgICAgIyBQSUMgaXMgdGhlIGRlZmF1bHQgZm9yIDY0LWJpdCBQQSBIUC1VWCwgYnV0IG5vdCBmb3IgMzItYml0Ci0gICAgICAjIFBBIEhQLVVYLiAgT24gSUE2NCBIUC1VWCwgUElDIGlzIHRoZSBkZWZhdWx0IGJ1dCB0aGUgcGljIGZsYWcKLSAgICAgICMgc2V0cyB0aGUgZGVmYXVsdCBUTFMgbW9kZWwgYW5kIGFmZmVjdHMgaW5saW5pbmcuCi0gICAgICBjYXNlICRob3N0X2NwdSBpbgotICAgICAgaHBwYSo2NCopCi0JIyArWiB0aGUgZGVmYXVsdAotCTs7Ci0gICAgICAqKQotCWx0X3Byb2dfY29tcGlsZXJfcGljPSctZlBJQycKLQk7OwotICAgICAgZXNhYwotICAgICAgOzsKLQotICAgIGludGVyaXhbMy05XSopCi0gICAgICAjIEludGVyaXggMy54IGdjYyAtZnBpYy8tZlBJQyBvcHRpb25zIGdlbmVyYXRlIGJyb2tlbiBjb2RlLgotICAgICAgIyBJbnN0ZWFkLCB3ZSByZWxvY2F0ZSBzaGFyZWQgbGlicmFyaWVzIGF0IHJ1bnRpbWUuCi0gICAgICA7OwotCi0gICAgbXNkb3NkamdwcCopCi0gICAgICAjIEp1c3QgYmVjYXVzZSB3ZSB1c2UgR0NDIGRvZXNuJ3QgbWVhbiB3ZSBzdWRkZW5seSBnZXQgc2hhcmVkIGxpYnJhcmllcwotICAgICAgIyBvbiBzeXN0ZW1zIHRoYXQgZG9uJ3Qgc3VwcG9ydCB0aGVtLgotICAgICAgbHRfcHJvZ19jb21waWxlcl9jYW5fYnVpbGRfc2hhcmVkPW5vCi0gICAgICBlbmFibGVfc2hhcmVkPW5vCi0gICAgICA7OwotCi0gICAgKm50byogfCAqcW54KikKLSAgICAgICMgUU5YIHVzZXMgR05VIEMrKywgYnV0IG5lZWQgdG8gZGVmaW5lIC1zaGFyZWQgb3B0aW9uIHRvbywgb3RoZXJ3aXNlCi0gICAgICAjIGl0IHdpbGwgY29yZWR1bXAuCi0gICAgICBsdF9wcm9nX2NvbXBpbGVyX3BpYz0nLWZQSUMgLXNoYXJlZCcKLSAgICAgIDs7Ci0KLSAgICBzeXN2NCpNUCopCi0gICAgICBpZiB0ZXN0IC1kIC91c3IvbmVjOyB0aGVuCi0JbHRfcHJvZ19jb21waWxlcl9waWM9LUtjb25mb3JtX3BpYwotICAgICAgZmkKLSAgICAgIDs7Ci0KLSAgICAqKQotICAgICAgbHRfcHJvZ19jb21waWxlcl9waWM9Jy1mUElDJwotICAgICAgOzsKLSAgICBlc2FjCi0KLSAgICBjYXNlICRjY19iYXNlbmFtZSBpbgotICAgIG52Y2MqKSAjIEN1ZGEgQ29tcGlsZXIgRHJpdmVyIDIuMgotICAgICAgbHRfcHJvZ19jb21waWxlcl93bD0nLVhsaW5rZXIgJwotICAgICAgbHRfcHJvZ19jb21waWxlcl9waWM9Jy1YY29tcGlsZXIgLWZQSUMnCi0gICAgICA7OwotICAgIGVzYWMKLSAgZWxzZQotICAgICMgUE9SVE1FIENoZWNrIGZvciBmbGFnIHRvIHBhc3MgbGlua2VyIGZsYWdzIHRocm91Z2ggdGhlIHN5c3RlbSBjb21waWxlci4KLSAgICBjYXNlICRob3N0X29zIGluCi0gICAgYWl4KikKLSAgICAgIGx0X3Byb2dfY29tcGlsZXJfd2w9Jy1XbCwnCi0gICAgICBpZiB0ZXN0ICIkaG9zdF9jcHUiID0gaWE2NDsgdGhlbgotCSMgQUlYIDUgbm93IHN1cHBvcnRzIElBNjQgcHJvY2Vzc29yCi0JbHRfcHJvZ19jb21waWxlcl9zdGF0aWM9Jy1Cc3RhdGljJwotICAgICAgZWxzZQotCWx0X3Byb2dfY29tcGlsZXJfc3RhdGljPSctYm5zbyAtYkk6L2xpYi9zeXNjYWxscy5leHAnCi0gICAgICBmaQotICAgICAgOzsKLQotICAgIG1pbmd3KiB8IGN5Z3dpbiogfCBwdzMyKiB8IG9zMiogfCBjZWdjYyopCi0gICAgICAjIFRoaXMgaGFjayBpcyBzbyB0aGF0IHRoZSBzb3VyY2UgZmlsZSBjYW4gdGVsbCB3aGV0aGVyIGl0IGlzIGJlaW5nCi0gICAgICAjIGJ1aWx0IGZvciBpbmNsdXNpb24gaW4gYSBkbGwgKGFuZCBzaG91bGQgZXhwb3J0IHN5bWJvbHMgZm9yIGV4YW1wbGUpLgotICAgICAgbHRfcHJvZ19jb21waWxlcl9waWM9Jy1ERExMX0VYUE9SVCcKLSAgICAgIDs7Ci0KLSAgICBocHV4OSogfCBocHV4MTAqIHwgaHB1eDExKikKLSAgICAgIGx0X3Byb2dfY29tcGlsZXJfd2w9Jy1XbCwnCi0gICAgICAjIFBJQyBpcyB0aGUgZGVmYXVsdCBmb3IgSUE2NCBIUC1VWCBhbmQgNjQtYml0IEhQLVVYLCBidXQKLSAgICAgICMgbm90IGZvciBQQSBIUC1VWC4KLSAgICAgIGNhc2UgJGhvc3RfY3B1IGluCi0gICAgICBocHBhKjY0KnxpYTY0KikKLQkjICtaIHRoZSBkZWZhdWx0Ci0JOzsKLSAgICAgICopCi0JbHRfcHJvZ19jb21waWxlcl9waWM9JytaJwotCTs7Ci0gICAgICBlc2FjCi0gICAgICAjIElzIHRoZXJlIGEgYmV0dGVyIGx0X3Byb2dfY29tcGlsZXJfc3RhdGljIHRoYXQgd29ya3Mgd2l0aCB0aGUgYnVuZGxlZCBDQz8KLSAgICAgIGx0X3Byb2dfY29tcGlsZXJfc3RhdGljPScke3dsfS1hICR7d2x9YXJjaGl2ZScKLSAgICAgIDs7Ci0KLSAgICBpcml4NSogfCBpcml4NiogfCBub25zdG9wdXgqKQotICAgICAgbHRfcHJvZ19jb21waWxlcl93bD0nLVdsLCcKLSAgICAgICMgUElDICh3aXRoIC1LUElDKSBpcyB0aGUgZGVmYXVsdC4KLSAgICAgIGx0X3Byb2dfY29tcGlsZXJfc3RhdGljPSctbm9uX3NoYXJlZCcKLSAgICAgIDs7Ci0KLSAgICBsaW51eCogfCBrKmJzZCotZ251IHwga29wZW5zb2xhcmlzKi1nbnUpCi0gICAgICBjYXNlICRjY19iYXNlbmFtZSBpbgotICAgICAgIyBvbGQgSW50ZWwgZm9yIHg4Nl82NCB3aGljaCBzdGlsbCBzdXBwb3J0ZWQgLUtQSUMuCi0gICAgICBlY2MqKQotCWx0X3Byb2dfY29tcGlsZXJfd2w9Jy1XbCwnCi0JbHRfcHJvZ19jb21waWxlcl9waWM9Jy1LUElDJwotCWx0X3Byb2dfY29tcGlsZXJfc3RhdGljPSctc3RhdGljJwotICAgICAgICA7OwotICAgICAgIyBpY2MgdXNlZCB0byBiZSBpbmNvbXBhdGlibGUgd2l0aCBHQ0MuCi0gICAgICAjIElDQyAxMCBkb2Vzbid0IGFjY2VwdCAtS1BJQyBhbnkgbW9yZS4KLSAgICAgIGljYyogfCBpZm9ydCopCi0JbHRfcHJvZ19jb21waWxlcl93bD0nLVdsLCcKLQlsdF9wcm9nX2NvbXBpbGVyX3BpYz0nLWZQSUMnCi0JbHRfcHJvZ19jb21waWxlcl9zdGF0aWM9Jy1zdGF0aWMnCi0gICAgICAgIDs7Ci0gICAgICAjIExhaGV5IEZvcnRyYW4gOC4xLgotICAgICAgbGY5NSopCi0JbHRfcHJvZ19jb21waWxlcl93bD0nLVdsLCcKLQlsdF9wcm9nX2NvbXBpbGVyX3BpYz0nLS1zaGFyZWQnCi0JbHRfcHJvZ19jb21waWxlcl9zdGF0aWM9Jy0tc3RhdGljJwotCTs7Ci0gICAgICBuYWdmb3IqKQotCSMgTkFHIEZvcnRyYW4gY29tcGlsZXIKLQlsdF9wcm9nX2NvbXBpbGVyX3dsPSctV2wsLVdsLCwnCi0JbHRfcHJvZ19jb21waWxlcl9waWM9Jy1QSUMnCi0JbHRfcHJvZ19jb21waWxlcl9zdGF0aWM9Jy1Cc3RhdGljJwotCTs7Ci0gICAgICBwZ2NjKiB8IHBnZjc3KiB8IHBnZjkwKiB8IHBnZjk1KiB8IHBnZm9ydHJhbiopCi0gICAgICAgICMgUG9ydGxhbmQgR3JvdXAgY29tcGlsZXJzICgqbm90KiB0aGUgUGVudGl1bSBnY2MgY29tcGlsZXIsCi0JIyB3aGljaCBsb29rcyB0byBiZSBhIGRlYWQgcHJvamVjdCkKLQlsdF9wcm9nX2NvbXBpbGVyX3dsPSctV2wsJwotCWx0X3Byb2dfY29tcGlsZXJfcGljPSctZnBpYycKLQlsdF9wcm9nX2NvbXBpbGVyX3N0YXRpYz0nLUJzdGF0aWMnCi0gICAgICAgIDs7Ci0gICAgICBjY2MqKQotICAgICAgICBsdF9wcm9nX2NvbXBpbGVyX3dsPSctV2wsJwotICAgICAgICAjIEFsbCBBbHBoYSBjb2RlIGlzIFBJQy4KLSAgICAgICAgbHRfcHJvZ19jb21waWxlcl9zdGF0aWM9Jy1ub25fc2hhcmVkJwotICAgICAgICA7OwotICAgICAgeGwqIHwgYmd4bCogfCBiZ2YqIHwgbXBpeGwqKQotCSMgSUJNIFhMIEMgOC4wL0ZvcnRyYW4gMTAuMSwgMTEuMSBvbiBQUEMgYW5kIEJsdWVHZW5lCi0JbHRfcHJvZ19jb21waWxlcl93bD0nLVdsLCcKLQlsdF9wcm9nX2NvbXBpbGVyX3BpYz0nLXFwaWMnCi0JbHRfcHJvZ19jb21waWxlcl9zdGF0aWM9Jy1xc3RhdGljbGluaycKLQk7OwotICAgICAgKikKLQljYXNlIGAkQ0MgLVYgMj4mMSB8IHNlZCA1cWAgaW4KLQkqU3VuXCBGKiB8ICpTdW4qRm9ydHJhbiopCi0JICAjIFN1biBGb3J0cmFuIDguMyBwYXNzZXMgYWxsIHVucmVjb2duaXplZCBmbGFncyB0byB0aGUgbGlua2VyCi0JICBsdF9wcm9nX2NvbXBpbGVyX3BpYz0nLUtQSUMnCi0JICBsdF9wcm9nX2NvbXBpbGVyX3N0YXRpYz0nLUJzdGF0aWMnCi0JICBsdF9wcm9nX2NvbXBpbGVyX3dsPScnCi0JICA7OwotCSpTdW5cIEMqKQotCSAgIyBTdW4gQyA1LjkKLQkgIGx0X3Byb2dfY29tcGlsZXJfcGljPSctS1BJQycKLQkgIGx0X3Byb2dfY29tcGlsZXJfc3RhdGljPSctQnN0YXRpYycKLQkgIGx0X3Byb2dfY29tcGlsZXJfd2w9Jy1XbCwnCi0JICA7OwotCWVzYWMKLQk7OwotICAgICAgZXNhYwotICAgICAgOzsKLQotICAgIG5ld3NvczYpCi0gICAgICBsdF9wcm9nX2NvbXBpbGVyX3BpYz0nLUtQSUMnCi0gICAgICBsdF9wcm9nX2NvbXBpbGVyX3N0YXRpYz0nLUJzdGF0aWMnCi0gICAgICA7OwotCi0gICAgKm50byogfCAqcW54KikKLSAgICAgICMgUU5YIHVzZXMgR05VIEMrKywgYnV0IG5lZWQgdG8gZGVmaW5lIC1zaGFyZWQgb3B0aW9uIHRvbywgb3RoZXJ3aXNlCi0gICAgICAjIGl0IHdpbGwgY29yZWR1bXAuCi0gICAgICBsdF9wcm9nX2NvbXBpbGVyX3BpYz0nLWZQSUMgLXNoYXJlZCcKLSAgICAgIDs7Ci0KLSAgICBvc2YzKiB8IG9zZjQqIHwgb3NmNSopCi0gICAgICBsdF9wcm9nX2NvbXBpbGVyX3dsPSctV2wsJwotICAgICAgIyBBbGwgT1NGLzEgY29kZSBpcyBQSUMuCi0gICAgICBsdF9wcm9nX2NvbXBpbGVyX3N0YXRpYz0nLW5vbl9zaGFyZWQnCi0gICAgICA7OwotCi0gICAgcmRvcyopCi0gICAgICBsdF9wcm9nX2NvbXBpbGVyX3N0YXRpYz0nLW5vbl9zaGFyZWQnCi0gICAgICA7OwotCi0gICAgc29sYXJpcyopCi0gICAgICBsdF9wcm9nX2NvbXBpbGVyX3BpYz0nLUtQSUMnCi0gICAgICBsdF9wcm9nX2NvbXBpbGVyX3N0YXRpYz0nLUJzdGF0aWMnCi0gICAgICBjYXNlICRjY19iYXNlbmFtZSBpbgotICAgICAgZjc3KiB8IGY5MCogfCBmOTUqIHwgc3VuZjc3KiB8IHN1bmY5MCogfCBzdW5mOTUqKQotCWx0X3Byb2dfY29tcGlsZXJfd2w9Jy1Rb3B0aW9uIGxkICc7OwotICAgICAgKikKLQlsdF9wcm9nX2NvbXBpbGVyX3dsPSctV2wsJzs7Ci0gICAgICBlc2FjCi0gICAgICA7OwotCi0gICAgc3Vub3M0KikKLSAgICAgIGx0X3Byb2dfY29tcGlsZXJfd2w9Jy1Rb3B0aW9uIGxkICcKLSAgICAgIGx0X3Byb2dfY29tcGlsZXJfcGljPSctUElDJwotICAgICAgbHRfcHJvZ19jb21waWxlcl9zdGF0aWM9Jy1Cc3RhdGljJwotICAgICAgOzsKLQotICAgIHN5c3Y0IHwgc3lzdjQuMnV3MiogfCBzeXN2NC4zKikKLSAgICAgIGx0X3Byb2dfY29tcGlsZXJfd2w9Jy1XbCwnCi0gICAgICBsdF9wcm9nX2NvbXBpbGVyX3BpYz0nLUtQSUMnCi0gICAgICBsdF9wcm9nX2NvbXBpbGVyX3N0YXRpYz0nLUJzdGF0aWMnCi0gICAgICA7OwotCi0gICAgc3lzdjQqTVAqKQotICAgICAgaWYgdGVzdCAtZCAvdXNyL25lYyA7dGhlbgotCWx0X3Byb2dfY29tcGlsZXJfcGljPSctS2NvbmZvcm1fcGljJwotCWx0X3Byb2dfY29tcGlsZXJfc3RhdGljPSctQnN0YXRpYycKLSAgICAgIGZpCi0gICAgICA7OwotCi0gICAgc3lzdjUqIHwgdW5peHdhcmUqIHwgc2NvMy4ydjUqIHwgc2NvNXY2KiB8IE9wZW5VTklYKikKLSAgICAgIGx0X3Byb2dfY29tcGlsZXJfd2w9Jy1XbCwnCi0gICAgICBsdF9wcm9nX2NvbXBpbGVyX3BpYz0nLUtQSUMnCi0gICAgICBsdF9wcm9nX2NvbXBpbGVyX3N0YXRpYz0nLUJzdGF0aWMnCi0gICAgICA7OwotCi0gICAgdW5pY29zKikKLSAgICAgIGx0X3Byb2dfY29tcGlsZXJfd2w9Jy1XbCwnCi0gICAgICBsdF9wcm9nX2NvbXBpbGVyX2Nhbl9idWlsZF9zaGFyZWQ9bm8KLSAgICAgIDs7Ci0KLSAgICB1dHM0KikKLSAgICAgIGx0X3Byb2dfY29tcGlsZXJfcGljPSctcGljJwotICAgICAgbHRfcHJvZ19jb21waWxlcl9zdGF0aWM9Jy1Cc3RhdGljJwotICAgICAgOzsKLQotICAgICopCi0gICAgICBsdF9wcm9nX2NvbXBpbGVyX2Nhbl9idWlsZF9zaGFyZWQ9bm8KLSAgICAgIDs7Ci0gICAgZXNhYwotICBmaQotCi1jYXNlICRob3N0X29zIGluCi0gICMgRm9yIHBsYXRmb3JtcyB3aGljaCBkbyBub3Qgc3VwcG9ydCBQSUMsIC1EUElDIGlzIG1lYW5pbmdsZXNzOgotICAqZGpncHAqKQotICAgIGx0X3Byb2dfY29tcGlsZXJfcGljPQotICAgIDs7Ci0gICopCi0gICAgbHRfcHJvZ19jb21waWxlcl9waWM9IiRsdF9wcm9nX2NvbXBpbGVyX3BpYyAtRFBJQyIKLSAgICA7OwotZXNhYwotCi17ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGZvciAkY29tcGlsZXIgb3B0aW9uIHRvIHByb2R1Y2UgUElDIiA+JjUKLSRhc19lY2hvX24gImNoZWNraW5nIGZvciAkY29tcGlsZXIgb3B0aW9uIHRvIHByb2R1Y2UgUElDLi4uICIgPiY2OyB9Ci1pZiAke2x0X2N2X3Byb2dfY29tcGlsZXJfcGljKzp9IGZhbHNlOyB0aGVuIDoKLSAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKLWVsc2UKLSAgbHRfY3ZfcHJvZ19jb21waWxlcl9waWM9JGx0X3Byb2dfY29tcGlsZXJfcGljCi1maQoteyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRsdF9jdl9wcm9nX2NvbXBpbGVyX3BpYyIgPiY1Ci0kYXNfZWNobyAiJGx0X2N2X3Byb2dfY29tcGlsZXJfcGljIiA+JjY7IH0KLWx0X3Byb2dfY29tcGlsZXJfcGljPSRsdF9jdl9wcm9nX2NvbXBpbGVyX3BpYwotCi0jCi0jIENoZWNrIHRvIG1ha2Ugc3VyZSB0aGUgUElDIGZsYWcgYWN0dWFsbHkgd29ya3MuCi0jCi1pZiB0ZXN0IC1uICIkbHRfcHJvZ19jb21waWxlcl9waWMiOyB0aGVuCi0gIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgaWYgJGNvbXBpbGVyIFBJQyBmbGFnICRsdF9wcm9nX2NvbXBpbGVyX3BpYyB3b3JrcyIgPiY1Ci0kYXNfZWNob19uICJjaGVja2luZyBpZiAkY29tcGlsZXIgUElDIGZsYWcgJGx0X3Byb2dfY29tcGlsZXJfcGljIHdvcmtzLi4uICIgPiY2OyB9Ci1pZiAke2x0X2N2X3Byb2dfY29tcGlsZXJfcGljX3dvcmtzKzp9IGZhbHNlOyB0aGVuIDoKLSAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKLWVsc2UKLSAgbHRfY3ZfcHJvZ19jb21waWxlcl9waWNfd29ya3M9bm8KLSAgIGFjX291dGZpbGU9Y29uZnRlc3QuJGFjX29iamV4dAotICAgZWNobyAiJGx0X3NpbXBsZV9jb21waWxlX3Rlc3RfY29kZSIgPiBjb25mdGVzdC4kYWNfZXh0Ci0gICBsdF9jb21waWxlcl9mbGFnPSIkbHRfcHJvZ19jb21waWxlcl9waWMgLURQSUMiCi0gICAjIEluc2VydCB0aGUgb3B0aW9uIGVpdGhlciAoMSkgYWZ0ZXIgdGhlIGxhc3QgKkZMQUdTIHZhcmlhYmxlLCBvcgotICAgIyAoMikgYmVmb3JlIGEgd29yZCBjb250YWluaW5nICJjb25mdGVzdC4iLCBvciAoMykgYXQgdGhlIGVuZC4KLSAgICMgTm90ZSB0aGF0ICRhY19jb21waWxlIGl0c2VsZiBkb2VzIG5vdCBjb250YWluIGJhY2tzbGFzaGVzIGFuZCBiZWdpbnMKLSAgICMgd2l0aCBhIGRvbGxhciBzaWduIChub3QgYSBoeXBoZW4pLCBzbyB0aGUgZWNobyBzaG91bGQgd29yayBjb3JyZWN0bHkuCi0gICAjIFRoZSBvcHRpb24gaXMgcmVmZXJlbmNlZCB2aWEgYSB2YXJpYWJsZSB0byBhdm9pZCBjb25mdXNpbmcgc2VkLgotICAgbHRfY29tcGlsZT1gZWNobyAiJGFjX2NvbXBpbGUiIHwgJFNFRCBcCi0gICAtZSAnczouKkZMQUdTfVx7MCwxXH0gOiYkbHRfY29tcGlsZXJfZmxhZyA6OyB0JyBcCi0gICAtZSAnczogW14gXSpjb25mdGVzdFwuOiAkbHRfY29tcGlsZXJfZmxhZyY6OyB0JyBcCi0gICAtZSAnczokOiAkbHRfY29tcGlsZXJfZmxhZzonYAotICAgKGV2YWwgZWNobyAiXCJcJGFzX21lOiRMSU5FTk86ICRsdF9jb21waWxlXCIiID4mNSkKLSAgIChldmFsICIkbHRfY29tcGlsZSIgMj5jb25mdGVzdC5lcnIpCi0gICBhY19zdGF0dXM9JD8KLSAgIGNhdCBjb25mdGVzdC5lcnIgPiY1Ci0gICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1Ci0gICBpZiAoZXhpdCAkYWNfc3RhdHVzKSAmJiB0ZXN0IC1zICIkYWNfb3V0ZmlsZSI7IHRoZW4KLSAgICAgIyBUaGUgY29tcGlsZXIgY2FuIG9ubHkgd2FybiBhbmQgaWdub3JlIHRoZSBvcHRpb24gaWYgbm90IHJlY29nbml6ZWQKLSAgICAgIyBTbyBzYXkgbm8gaWYgdGhlcmUgYXJlIHdhcm5pbmdzIG90aGVyIHRoYW4gdGhlIHVzdWFsIG91dHB1dC4KLSAgICAgJEVDSE8gIiRfbHRfY29tcGlsZXJfYm9pbGVycGxhdGUiIHwgJFNFRCAnL14kL2QnID5jb25mdGVzdC5leHAKLSAgICAgJFNFRCAnL14kL2Q7IC9eICorL2QnIGNvbmZ0ZXN0LmVyciA+Y29uZnRlc3QuZXIyCi0gICAgIGlmIHRlc3QgISAtcyBjb25mdGVzdC5lcjIgfHwgZGlmZiBjb25mdGVzdC5leHAgY29uZnRlc3QuZXIyID4vZGV2L251bGw7IHRoZW4KLSAgICAgICBsdF9jdl9wcm9nX2NvbXBpbGVyX3BpY193b3Jrcz15ZXMKLSAgICAgZmkKLSAgIGZpCi0gICAkUk0gY29uZnRlc3QqCi0KLWZpCi17ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJGx0X2N2X3Byb2dfY29tcGlsZXJfcGljX3dvcmtzIiA+JjUKLSRhc19lY2hvICIkbHRfY3ZfcHJvZ19jb21waWxlcl9waWNfd29ya3MiID4mNjsgfQotCi1pZiB0ZXN0IHgiJGx0X2N2X3Byb2dfY29tcGlsZXJfcGljX3dvcmtzIiA9IHh5ZXM7IHRoZW4KLSAgICBjYXNlICRsdF9wcm9nX2NvbXBpbGVyX3BpYyBpbgotICAgICAiIiB8ICIgIiopIDs7Ci0gICAgICopIGx0X3Byb2dfY29tcGlsZXJfcGljPSIgJGx0X3Byb2dfY29tcGlsZXJfcGljIiA7OwotICAgICBlc2FjCi1lbHNlCi0gICAgbHRfcHJvZ19jb21waWxlcl9waWM9Ci0gICAgIGx0X3Byb2dfY29tcGlsZXJfY2FuX2J1aWxkX3NoYXJlZD1ubwotZmkKLQotZmkKLQotCi0KLQotCi0KLQotCi0KLQotCi0jCi0jIENoZWNrIHRvIG1ha2Ugc3VyZSB0aGUgc3RhdGljIGZsYWcgYWN0dWFsbHkgd29ya3MuCi0jCi13bD0kbHRfcHJvZ19jb21waWxlcl93bCBldmFsIGx0X3RtcF9zdGF0aWNfZmxhZz1cIiRsdF9wcm9nX2NvbXBpbGVyX3N0YXRpY1wiCi17ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGlmICRjb21waWxlciBzdGF0aWMgZmxhZyAkbHRfdG1wX3N0YXRpY19mbGFnIHdvcmtzIiA+JjUKLSRhc19lY2hvX24gImNoZWNraW5nIGlmICRjb21waWxlciBzdGF0aWMgZmxhZyAkbHRfdG1wX3N0YXRpY19mbGFnIHdvcmtzLi4uICIgPiY2OyB9Ci1pZiAke2x0X2N2X3Byb2dfY29tcGlsZXJfc3RhdGljX3dvcmtzKzp9IGZhbHNlOyB0aGVuIDoKLSAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKLWVsc2UKLSAgbHRfY3ZfcHJvZ19jb21waWxlcl9zdGF0aWNfd29ya3M9bm8KLSAgIHNhdmVfTERGTEFHUz0iJExERkxBR1MiCi0gICBMREZMQUdTPSIkTERGTEFHUyAkbHRfdG1wX3N0YXRpY19mbGFnIgotICAgZWNobyAiJGx0X3NpbXBsZV9saW5rX3Rlc3RfY29kZSIgPiBjb25mdGVzdC4kYWNfZXh0Ci0gICBpZiAoZXZhbCAkYWNfbGluayAyPmNvbmZ0ZXN0LmVycikgJiYgdGVzdCAtcyBjb25mdGVzdCRhY19leGVleHQ7IHRoZW4KLSAgICAgIyBUaGUgbGlua2VyIGNhbiBvbmx5IHdhcm4gYW5kIGlnbm9yZSB0aGUgb3B0aW9uIGlmIG5vdCByZWNvZ25pemVkCi0gICAgICMgU28gc2F5IG5vIGlmIHRoZXJlIGFyZSB3YXJuaW5ncwotICAgICBpZiB0ZXN0IC1zIGNvbmZ0ZXN0LmVycjsgdGhlbgotICAgICAgICMgQXBwZW5kIGFueSBlcnJvcnMgdG8gdGhlIGNvbmZpZy5sb2cuCi0gICAgICAgY2F0IGNvbmZ0ZXN0LmVyciAxPiY1Ci0gICAgICAgJEVDSE8gIiRfbHRfbGlua2VyX2JvaWxlcnBsYXRlIiB8ICRTRUQgJy9eJC9kJyA+IGNvbmZ0ZXN0LmV4cAotICAgICAgICRTRUQgJy9eJC9kOyAvXiAqKy9kJyBjb25mdGVzdC5lcnIgPmNvbmZ0ZXN0LmVyMgotICAgICAgIGlmIGRpZmYgY29uZnRlc3QuZXhwIGNvbmZ0ZXN0LmVyMiA+L2Rldi9udWxsOyB0aGVuCi0gICAgICAgICBsdF9jdl9wcm9nX2NvbXBpbGVyX3N0YXRpY193b3Jrcz15ZXMKLSAgICAgICBmaQotICAgICBlbHNlCi0gICAgICAgbHRfY3ZfcHJvZ19jb21waWxlcl9zdGF0aWNfd29ya3M9eWVzCi0gICAgIGZpCi0gICBmaQotICAgJFJNIC1yIGNvbmZ0ZXN0KgotICAgTERGTEFHUz0iJHNhdmVfTERGTEFHUyIKLQotZmkKLXsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkbHRfY3ZfcHJvZ19jb21waWxlcl9zdGF0aWNfd29ya3MiID4mNQotJGFzX2VjaG8gIiRsdF9jdl9wcm9nX2NvbXBpbGVyX3N0YXRpY193b3JrcyIgPiY2OyB9Ci0KLWlmIHRlc3QgeCIkbHRfY3ZfcHJvZ19jb21waWxlcl9zdGF0aWNfd29ya3MiID0geHllczsgdGhlbgotICAgIDoKLWVsc2UKLSAgICBsdF9wcm9nX2NvbXBpbGVyX3N0YXRpYz0KLWZpCi0KLQotCi0KLQotCi0KLSAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBpZiAkY29tcGlsZXIgc3VwcG9ydHMgLWMgLW8gZmlsZS4kYWNfb2JqZXh0IiA+JjUKLSRhc19lY2hvX24gImNoZWNraW5nIGlmICRjb21waWxlciBzdXBwb3J0cyAtYyAtbyBmaWxlLiRhY19vYmpleHQuLi4gIiA+JjY7IH0KLWlmICR7bHRfY3ZfcHJvZ19jb21waWxlcl9jX28rOn0gZmFsc2U7IHRoZW4gOgotICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgotZWxzZQotICBsdF9jdl9wcm9nX2NvbXBpbGVyX2Nfbz1ubwotICAgJFJNIC1yIGNvbmZ0ZXN0IDI+L2Rldi9udWxsCi0gICBta2RpciBjb25mdGVzdAotICAgY2QgY29uZnRlc3QKLSAgIG1rZGlyIG91dAotICAgZWNobyAiJGx0X3NpbXBsZV9jb21waWxlX3Rlc3RfY29kZSIgPiBjb25mdGVzdC4kYWNfZXh0Ci0KLSAgIGx0X2NvbXBpbGVyX2ZsYWc9Ii1vIG91dC9jb25mdGVzdDIuJGFjX29iamV4dCIKLSAgICMgSW5zZXJ0IHRoZSBvcHRpb24gZWl0aGVyICgxKSBhZnRlciB0aGUgbGFzdCAqRkxBR1MgdmFyaWFibGUsIG9yCi0gICAjICgyKSBiZWZvcmUgYSB3b3JkIGNvbnRhaW5pbmcgImNvbmZ0ZXN0LiIsIG9yICgzKSBhdCB0aGUgZW5kLgotICAgIyBOb3RlIHRoYXQgJGFjX2NvbXBpbGUgaXRzZWxmIGRvZXMgbm90IGNvbnRhaW4gYmFja3NsYXNoZXMgYW5kIGJlZ2lucwotICAgIyB3aXRoIGEgZG9sbGFyIHNpZ24gKG5vdCBhIGh5cGhlbiksIHNvIHRoZSBlY2hvIHNob3VsZCB3b3JrIGNvcnJlY3RseS4KLSAgIGx0X2NvbXBpbGU9YGVjaG8gIiRhY19jb21waWxlIiB8ICRTRUQgXAotICAgLWUgJ3M6LipGTEFHU31cezAsMVx9IDomJGx0X2NvbXBpbGVyX2ZsYWcgOjsgdCcgXAotICAgLWUgJ3M6IFteIF0qY29uZnRlc3RcLjogJGx0X2NvbXBpbGVyX2ZsYWcmOjsgdCcgXAotICAgLWUgJ3M6JDogJGx0X2NvbXBpbGVyX2ZsYWc6J2AKLSAgIChldmFsIGVjaG8gIlwiXCRhc19tZTokTElORU5POiAkbHRfY29tcGlsZVwiIiA+JjUpCi0gICAoZXZhbCAiJGx0X2NvbXBpbGUiIDI+b3V0L2NvbmZ0ZXN0LmVycikKLSAgIGFjX3N0YXR1cz0kPwotICAgY2F0IG91dC9jb25mdGVzdC5lcnIgPiY1Ci0gICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1Ci0gICBpZiAoZXhpdCAkYWNfc3RhdHVzKSAmJiB0ZXN0IC1zIG91dC9jb25mdGVzdDIuJGFjX29iamV4dAotICAgdGhlbgotICAgICAjIFRoZSBjb21waWxlciBjYW4gb25seSB3YXJuIGFuZCBpZ25vcmUgdGhlIG9wdGlvbiBpZiBub3QgcmVjb2duaXplZAotICAgICAjIFNvIHNheSBubyBpZiB0aGVyZSBhcmUgd2FybmluZ3MKLSAgICAgJEVDSE8gIiRfbHRfY29tcGlsZXJfYm9pbGVycGxhdGUiIHwgJFNFRCAnL14kL2QnID4gb3V0L2NvbmZ0ZXN0LmV4cAotICAgICAkU0VEICcvXiQvZDsgL14gKisvZCcgb3V0L2NvbmZ0ZXN0LmVyciA+b3V0L2NvbmZ0ZXN0LmVyMgotICAgICBpZiB0ZXN0ICEgLXMgb3V0L2NvbmZ0ZXN0LmVyMiB8fCBkaWZmIG91dC9jb25mdGVzdC5leHAgb3V0L2NvbmZ0ZXN0LmVyMiA+L2Rldi9udWxsOyB0aGVuCi0gICAgICAgbHRfY3ZfcHJvZ19jb21waWxlcl9jX289eWVzCi0gICAgIGZpCi0gICBmaQotICAgY2htb2QgdSt3IC4gMj4mNQotICAgJFJNIGNvbmZ0ZXN0KgotICAgIyBTR0kgQysrIGNvbXBpbGVyIHdpbGwgY3JlYXRlIGRpcmVjdG9yeSBvdXQvaWlfZmlsZXMvIGZvcgotICAgIyB0ZW1wbGF0ZSBpbnN0YW50aWF0aW9uCi0gICB0ZXN0IC1kIG91dC9paV9maWxlcyAmJiAkUk0gb3V0L2lpX2ZpbGVzLyogJiYgcm1kaXIgb3V0L2lpX2ZpbGVzCi0gICAkUk0gb3V0LyogJiYgcm1kaXIgb3V0Ci0gICBjZCAuLgotICAgJFJNIC1yIGNvbmZ0ZXN0Ci0gICAkUk0gY29uZnRlc3QqCi0KLWZpCi17ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJGx0X2N2X3Byb2dfY29tcGlsZXJfY19vIiA+JjUKLSRhc19lY2hvICIkbHRfY3ZfcHJvZ19jb21waWxlcl9jX28iID4mNjsgfQotCi0KLQotCi0KLQotICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGlmICRjb21waWxlciBzdXBwb3J0cyAtYyAtbyBmaWxlLiRhY19vYmpleHQiID4mNQotJGFzX2VjaG9fbiAiY2hlY2tpbmcgaWYgJGNvbXBpbGVyIHN1cHBvcnRzIC1jIC1vIGZpbGUuJGFjX29iamV4dC4uLiAiID4mNjsgfQotaWYgJHtsdF9jdl9wcm9nX2NvbXBpbGVyX2Nfbys6fSBmYWxzZTsgdGhlbiA6Ci0gICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2Ci1lbHNlCi0gIGx0X2N2X3Byb2dfY29tcGlsZXJfY19vPW5vCi0gICAkUk0gLXIgY29uZnRlc3QgMj4vZGV2L251bGwKLSAgIG1rZGlyIGNvbmZ0ZXN0Ci0gICBjZCBjb25mdGVzdAotICAgbWtkaXIgb3V0Ci0gICBlY2hvICIkbHRfc2ltcGxlX2NvbXBpbGVfdGVzdF9jb2RlIiA+IGNvbmZ0ZXN0LiRhY19leHQKLQotICAgbHRfY29tcGlsZXJfZmxhZz0iLW8gb3V0L2NvbmZ0ZXN0Mi4kYWNfb2JqZXh0IgotICAgIyBJbnNlcnQgdGhlIG9wdGlvbiBlaXRoZXIgKDEpIGFmdGVyIHRoZSBsYXN0ICpGTEFHUyB2YXJpYWJsZSwgb3IKLSAgICMgKDIpIGJlZm9yZSBhIHdvcmQgY29udGFpbmluZyAiY29uZnRlc3QuIiwgb3IgKDMpIGF0IHRoZSBlbmQuCi0gICAjIE5vdGUgdGhhdCAkYWNfY29tcGlsZSBpdHNlbGYgZG9lcyBub3QgY29udGFpbiBiYWNrc2xhc2hlcyBhbmQgYmVnaW5zCi0gICAjIHdpdGggYSBkb2xsYXIgc2lnbiAobm90IGEgaHlwaGVuKSwgc28gdGhlIGVjaG8gc2hvdWxkIHdvcmsgY29ycmVjdGx5LgotICAgbHRfY29tcGlsZT1gZWNobyAiJGFjX2NvbXBpbGUiIHwgJFNFRCBcCi0gICAtZSAnczouKkZMQUdTfVx7MCwxXH0gOiYkbHRfY29tcGlsZXJfZmxhZyA6OyB0JyBcCi0gICAtZSAnczogW14gXSpjb25mdGVzdFwuOiAkbHRfY29tcGlsZXJfZmxhZyY6OyB0JyBcCi0gICAtZSAnczokOiAkbHRfY29tcGlsZXJfZmxhZzonYAotICAgKGV2YWwgZWNobyAiXCJcJGFzX21lOiRMSU5FTk86ICRsdF9jb21waWxlXCIiID4mNSkKLSAgIChldmFsICIkbHRfY29tcGlsZSIgMj5vdXQvY29uZnRlc3QuZXJyKQotICAgYWNfc3RhdHVzPSQ/Ci0gICBjYXQgb3V0L2NvbmZ0ZXN0LmVyciA+JjUKLSAgIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKLSAgIGlmIChleGl0ICRhY19zdGF0dXMpICYmIHRlc3QgLXMgb3V0L2NvbmZ0ZXN0Mi4kYWNfb2JqZXh0Ci0gICB0aGVuCi0gICAgICMgVGhlIGNvbXBpbGVyIGNhbiBvbmx5IHdhcm4gYW5kIGlnbm9yZSB0aGUgb3B0aW9uIGlmIG5vdCByZWNvZ25pemVkCi0gICAgICMgU28gc2F5IG5vIGlmIHRoZXJlIGFyZSB3YXJuaW5ncwotICAgICAkRUNITyAiJF9sdF9jb21waWxlcl9ib2lsZXJwbGF0ZSIgfCAkU0VEICcvXiQvZCcgPiBvdXQvY29uZnRlc3QuZXhwCi0gICAgICRTRUQgJy9eJC9kOyAvXiAqKy9kJyBvdXQvY29uZnRlc3QuZXJyID5vdXQvY29uZnRlc3QuZXIyCi0gICAgIGlmIHRlc3QgISAtcyBvdXQvY29uZnRlc3QuZXIyIHx8IGRpZmYgb3V0L2NvbmZ0ZXN0LmV4cCBvdXQvY29uZnRlc3QuZXIyID4vZGV2L251bGw7IHRoZW4KLSAgICAgICBsdF9jdl9wcm9nX2NvbXBpbGVyX2Nfbz15ZXMKLSAgICAgZmkKLSAgIGZpCi0gICBjaG1vZCB1K3cgLiAyPiY1Ci0gICAkUk0gY29uZnRlc3QqCi0gICAjIFNHSSBDKysgY29tcGlsZXIgd2lsbCBjcmVhdGUgZGlyZWN0b3J5IG91dC9paV9maWxlcy8gZm9yCi0gICAjIHRlbXBsYXRlIGluc3RhbnRpYXRpb24KLSAgIHRlc3QgLWQgb3V0L2lpX2ZpbGVzICYmICRSTSBvdXQvaWlfZmlsZXMvKiAmJiBybWRpciBvdXQvaWlfZmlsZXMKLSAgICRSTSBvdXQvKiAmJiBybWRpciBvdXQKLSAgIGNkIC4uCi0gICAkUk0gLXIgY29uZnRlc3QKLSAgICRSTSBjb25mdGVzdCoKLQotZmkKLXsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkbHRfY3ZfcHJvZ19jb21waWxlcl9jX28iID4mNQotJGFzX2VjaG8gIiRsdF9jdl9wcm9nX2NvbXBpbGVyX2NfbyIgPiY2OyB9Ci0KLQotCi0KLWhhcmRfbGlua3M9Im5vdHRlc3RlZCIKLWlmIHRlc3QgIiRsdF9jdl9wcm9nX2NvbXBpbGVyX2NfbyIgPSBubyAmJiB0ZXN0ICIkbmVlZF9sb2NrcyIgIT0gbm87IHRoZW4KLSAgIyBkbyBub3Qgb3ZlcndyaXRlIHRoZSB2YWx1ZSBvZiBuZWVkX2xvY2tzIHByb3ZpZGVkIGJ5IHRoZSB1c2VyCi0gIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgaWYgd2UgY2FuIGxvY2sgd2l0aCBoYXJkIGxpbmtzIiA+JjUKLSRhc19lY2hvX24gImNoZWNraW5nIGlmIHdlIGNhbiBsb2NrIHdpdGggaGFyZCBsaW5rcy4uLiAiID4mNjsgfQotICBoYXJkX2xpbmtzPXllcwotICAkUk0gY29uZnRlc3QqCi0gIGxuIGNvbmZ0ZXN0LmEgY29uZnRlc3QuYiAyPi9kZXYvbnVsbCAmJiBoYXJkX2xpbmtzPW5vCi0gIHRvdWNoIGNvbmZ0ZXN0LmEKLSAgbG4gY29uZnRlc3QuYSBjb25mdGVzdC5iIDI+JjUgfHwgaGFyZF9saW5rcz1ubwotICBsbiBjb25mdGVzdC5hIGNvbmZ0ZXN0LmIgMj4vZGV2L251bGwgJiYgaGFyZF9saW5rcz1ubwotICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJGhhcmRfbGlua3MiID4mNQotJGFzX2VjaG8gIiRoYXJkX2xpbmtzIiA+JjY7IH0KLSAgaWYgdGVzdCAiJGhhcmRfbGlua3MiID0gbm87IHRoZW4KLSAgICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IFdBUk5JTkc6IFxgJENDJyBkb2VzIG5vdCBzdXBwb3J0IFxgLWMgLW8nLCBzbyBcYG1ha2UgLWonIG1heSBiZSB1bnNhZmUiID4mNQotJGFzX2VjaG8gIiRhc19tZTogV0FSTklORzogXGAkQ0MnIGRvZXMgbm90IHN1cHBvcnQgXGAtYyAtbycsIHNvIFxgbWFrZSAtaicgbWF5IGJlIHVuc2FmZSIgPiYyO30KLSAgICBuZWVkX2xvY2tzPXdhcm4KLSAgZmkKLWVsc2UKLSAgbmVlZF9sb2Nrcz1ubwotZmkKLQotCi0KLQotCi0KLSAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyB3aGV0aGVyIHRoZSAkY29tcGlsZXIgbGlua2VyICgkTEQpIHN1cHBvcnRzIHNoYXJlZCBsaWJyYXJpZXMiID4mNQotJGFzX2VjaG9fbiAiY2hlY2tpbmcgd2hldGhlciB0aGUgJGNvbXBpbGVyIGxpbmtlciAoJExEKSBzdXBwb3J0cyBzaGFyZWQgbGlicmFyaWVzLi4uICIgPiY2OyB9Ci0KLSAgcnVucGF0aF92YXI9Ci0gIGFsbG93X3VuZGVmaW5lZF9mbGFnPQotICBhbHdheXNfZXhwb3J0X3N5bWJvbHM9bm8KLSAgYXJjaGl2ZV9jbWRzPQotICBhcmNoaXZlX2V4cHN5bV9jbWRzPQotICBjb21waWxlcl9uZWVkc19vYmplY3Q9bm8KLSAgZW5hYmxlX3NoYXJlZF93aXRoX3N0YXRpY19ydW50aW1lcz1ubwotICBleHBvcnRfZHluYW1pY19mbGFnX3NwZWM9Ci0gIGV4cG9ydF9zeW1ib2xzX2NtZHM9JyROTSAkbGlib2JqcyAkY29udmVuaWVuY2UgfCAkZ2xvYmFsX3N5bWJvbF9waXBlIHwgJFNFRCAnXCcncy8uKiAvLydcJycgfCBzb3J0IHwgdW5pcSA+ICRleHBvcnRfc3ltYm9scycKLSAgaGFyZGNvZGVfYXV0b21hdGljPW5vCi0gIGhhcmRjb2RlX2RpcmVjdD1ubwotICBoYXJkY29kZV9kaXJlY3RfYWJzb2x1dGU9bm8KLSAgaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYz0KLSAgaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlY19sZD0KLSAgaGFyZGNvZGVfbGliZGlyX3NlcGFyYXRvcj0KLSAgaGFyZGNvZGVfbWludXNfTD1ubwotICBoYXJkY29kZV9zaGxpYnBhdGhfdmFyPXVuc3VwcG9ydGVkCi0gIGluaGVyaXRfcnBhdGg9bm8KLSAgbGlua19hbGxfZGVwbGlicz11bmtub3duCi0gIG1vZHVsZV9jbWRzPQotICBtb2R1bGVfZXhwc3ltX2NtZHM9Ci0gIG9sZF9hcmNoaXZlX2Zyb21fbmV3X2NtZHM9Ci0gIG9sZF9hcmNoaXZlX2Zyb21fZXhwc3ltc19jbWRzPQotICB0aHJlYWRfc2FmZV9mbGFnX3NwZWM9Ci0gIHdob2xlX2FyY2hpdmVfZmxhZ19zcGVjPQotICAjIGluY2x1ZGVfZXhwc3ltcyBzaG91bGQgYmUgYSBsaXN0IG9mIHNwYWNlLXNlcGFyYXRlZCBzeW1ib2xzIHRvIGJlICphbHdheXMqCi0gICMgaW5jbHVkZWQgaW4gdGhlIHN5bWJvbCBsaXN0Ci0gIGluY2x1ZGVfZXhwc3ltcz0KLSAgIyBleGNsdWRlX2V4cHN5bXMgY2FuIGJlIGFuIGV4dGVuZGVkIHJlZ2V4cCBvZiBzeW1ib2xzIHRvIGV4Y2x1ZGUKLSAgIyBpdCB3aWxsIGJlIHdyYXBwZWQgYnkgYCAoJyBhbmQgYCkkJywgc28gb25lIG11c3Qgbm90IG1hdGNoIGJlZ2lubmluZyBvcgotICAjIGVuZCBvZiBsaW5lLiAgRXhhbXBsZTogYGF8YmN8LipkLionIHdpbGwgZXhjbHVkZSB0aGUgc3ltYm9scyBgYScgYW5kIGBiYycsCi0gICMgYXMgd2VsbCBhcyBhbnkgc3ltYm9sIHRoYXQgY29udGFpbnMgYGQnLgotICBleGNsdWRlX2V4cHN5bXM9J19HTE9CQUxfT0ZGU0VUX1RBQkxFX3xfR0xPQkFMX19GW0lEXV8uKicKLSAgIyBBbHRob3VnaCBfR0xPQkFMX09GRlNFVF9UQUJMRV8gaXMgYSB2YWxpZCBzeW1ib2wgQyBuYW1lLCBtb3N0IGEub3V0Ci0gICMgcGxhdGZvcm1zIChhYil1c2UgaXQgaW4gUElDIGNvZGUsIGJ1dCB0aGVpciBsaW5rZXJzIGdldCBjb25mdXNlZCBpZgotICAjIHRoZSBzeW1ib2wgaXMgZXhwbGljaXRseSByZWZlcmVuY2VkLiAgU2luY2UgcG9ydGFibGUgY29kZSBjYW5ub3QKLSAgIyByZWx5IG9uIHRoaXMgc3ltYm9sIG5hbWUsIGl0J3MgcHJvYmFibHkgZmluZSB0byBuZXZlciBpbmNsdWRlIGl0IGluCi0gICMgcHJlbG9hZGVkIHN5bWJvbCB0YWJsZXMuCi0gICMgRXhjbHVkZSBzaGFyZWQgbGlicmFyeSBpbml0aWFsaXphdGlvbi9maW5hbGl6YXRpb24gc3ltYm9scy4KLSAgZXh0cmFjdF9leHBzeW1zX2NtZHM9Ci0KLSAgY2FzZSAkaG9zdF9vcyBpbgotICBjeWd3aW4qIHwgbWluZ3cqIHwgcHczMiogfCBjZWdjYyopCi0gICAgIyBGSVhNRTogdGhlIE1TVkMrKyBwb3J0IGhhc24ndCBiZWVuIHRlc3RlZCBpbiBhIGxvb29vbmcgdGltZQotICAgICMgV2hlbiBub3QgdXNpbmcgZ2NjLCB3ZSBjdXJyZW50bHkgYXNzdW1lIHRoYXQgd2UgYXJlIHVzaW5nCi0gICAgIyBNaWNyb3NvZnQgVmlzdWFsIEMrKy4KLSAgICBpZiB0ZXN0ICIkR0NDIiAhPSB5ZXM7IHRoZW4KLSAgICAgIHdpdGhfZ251X2xkPW5vCi0gICAgZmkKLSAgICA7OwotICBpbnRlcml4KikKLSAgICAjIHdlIGp1c3QgaG9wZS9hc3N1bWUgdGhpcyBpcyBnY2MgYW5kIG5vdCBjODkgKD0gTVNWQysrKQotICAgIHdpdGhfZ251X2xkPXllcwotICAgIDs7Ci0gIG9wZW5ic2QqKQotICAgIHdpdGhfZ251X2xkPW5vCi0gICAgOzsKLSAgZXNhYwotCi0gIGxkX3NobGlicz15ZXMKLQotICAjIE9uIHNvbWUgdGFyZ2V0cywgR05VIGxkIGlzIGNvbXBhdGlibGUgZW5vdWdoIHdpdGggdGhlIG5hdGl2ZSBsaW5rZXIKLSAgIyB0aGF0IHdlJ3JlIGJldHRlciBvZmYgdXNpbmcgdGhlIG5hdGl2ZSBpbnRlcmZhY2UgZm9yIGJvdGguCi0gIGx0X3VzZV9nbnVfbGRfaW50ZXJmYWNlPW5vCi0gIGlmIHRlc3QgIiR3aXRoX2dudV9sZCIgPSB5ZXM7IHRoZW4KLSAgICBjYXNlICRob3N0X29zIGluCi0gICAgICBhaXgqKQotCSMgVGhlIEFJWCBwb3J0IG9mIEdOVSBsZCBoYXMgYWx3YXlzIGFzcGlyZWQgdG8gY29tcGF0aWJpbGl0eQotCSMgd2l0aCB0aGUgbmF0aXZlIGxpbmtlci4gIEhvd2V2ZXIsIGFzIHRoZSB3YXJuaW5nIGluIHRoZSBHTlUgbGQKLQkjIGJsb2NrIHNheXMsIHZlcnNpb25zIGJlZm9yZSAyLjE5LjUqIGNvdWxkbid0IHJlYWxseSBjcmVhdGUgd29ya2luZwotCSMgc2hhcmVkIGxpYnJhcmllcywgcmVnYXJkbGVzcyBvZiB0aGUgaW50ZXJmYWNlIHVzZWQuCi0JY2FzZSBgJExEIC12IDI+JjFgIGluCi0JICAqXCBcKEdOVVwgQmludXRpbHNcKVwgMi4xOS41KikgOzsKLQkgICpcIFwoR05VXCBCaW51dGlsc1wpXCAyLlsyLTldKikgOzsKLQkgICpcIFwoR05VXCBCaW51dGlsc1wpXCBbMy05XSopIDs7Ci0JICAqKQotCSAgICBsdF91c2VfZ251X2xkX2ludGVyZmFjZT15ZXMKLQkgICAgOzsKLQllc2FjCi0JOzsKLSAgICAgICopCi0JbHRfdXNlX2dudV9sZF9pbnRlcmZhY2U9eWVzCi0JOzsKLSAgICBlc2FjCi0gIGZpCi0KLSAgaWYgdGVzdCAiJGx0X3VzZV9nbnVfbGRfaW50ZXJmYWNlIiA9IHllczsgdGhlbgotICAgICMgSWYgYXJjaGl2ZV9jbWRzIHJ1bnMgTEQsIG5vdCBDQywgd2xhcmMgc2hvdWxkIGJlIGVtcHR5Ci0gICAgd2xhcmM9JyR7d2x9JwotCi0gICAgIyBTZXQgc29tZSBkZWZhdWx0cyBmb3IgR05VIGxkIHdpdGggc2hhcmVkIGxpYnJhcnkgc3VwcG9ydC4gVGhlc2UKLSAgICAjIGFyZSByZXNldCBsYXRlciBpZiBzaGFyZWQgbGlicmFyaWVzIGFyZSBub3Qgc3VwcG9ydGVkLiBQdXR0aW5nIHRoZW0KLSAgICAjIGhlcmUgYWxsb3dzIHRoZW0gdG8gYmUgb3ZlcnJpZGRlbiBpZiBuZWNlc3NhcnkuCi0gICAgcnVucGF0aF92YXI9TERfUlVOX1BBVEgKLSAgICBoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjPScke3dsfS1ycGF0aCAke3dsfSRsaWJkaXInCi0gICAgZXhwb3J0X2R5bmFtaWNfZmxhZ19zcGVjPScke3dsfS0tZXhwb3J0LWR5bmFtaWMnCi0gICAgIyBhbmNpZW50IEdOVSBsZCBkaWRuJ3Qgc3VwcG9ydCAtLXdob2xlLWFyY2hpdmUgZXQuIGFsLgotICAgIGlmICRMRCAtLWhlbHAgMj4mMSB8ICRHUkVQICduby13aG9sZS1hcmNoaXZlJyA+IC9kZXYvbnVsbDsgdGhlbgotICAgICAgd2hvbGVfYXJjaGl2ZV9mbGFnX3NwZWM9IiR3bGFyYyInLS13aG9sZS1hcmNoaXZlJGNvbnZlbmllbmNlICciJHdsYXJjIictLW5vLXdob2xlLWFyY2hpdmUnCi0gICAgZWxzZQotICAgICAgd2hvbGVfYXJjaGl2ZV9mbGFnX3NwZWM9Ci0gICAgZmkKLSAgICBzdXBwb3J0c19hbm9uX3ZlcnNpb25pbmc9bm8KLSAgICBjYXNlIGAkTEQgLXYgMj4mMWAgaW4KLSAgICAgICpHTlVcIGdvbGQqKSBzdXBwb3J0c19hbm9uX3ZlcnNpb25pbmc9eWVzIDs7Ci0gICAgICAqXCBbMDFdLiogfCAqXCAyLlswLTldLiogfCAqXCAyLjEwLiopIDs7ICMgY2F0Y2ggdmVyc2lvbnMgPCAyLjExCi0gICAgICAqXCAyLjExLjkzLjAuMlwgKikgc3VwcG9ydHNfYW5vbl92ZXJzaW9uaW5nPXllcyA7OyAjIFJINy4zIC4uLgotICAgICAgKlwgMi4xMS45Mi4wLjEyXCAqKSBzdXBwb3J0c19hbm9uX3ZlcnNpb25pbmc9eWVzIDs7ICMgTWFuZHJha2UgOC4yIC4uLgotICAgICAgKlwgMi4xMS4qKSA7OyAjIG90aGVyIDIuMTEgdmVyc2lvbnMKLSAgICAgICopIHN1cHBvcnRzX2Fub25fdmVyc2lvbmluZz15ZXMgOzsKLSAgICBlc2FjCi0KLSAgICAjIFNlZSBpZiBHTlUgbGQgc3VwcG9ydHMgc2hhcmVkIGxpYnJhcmllcy4KLSAgICBjYXNlICRob3N0X29zIGluCi0gICAgYWl4WzMtOV0qKQotICAgICAgIyBPbiBBSVgvUFBDLCB0aGUgR05VIGxpbmtlciBpcyB2ZXJ5IGJyb2tlbgotICAgICAgaWYgdGVzdCAiJGhvc3RfY3B1IiAhPSBpYTY0OyB0aGVuCi0JbGRfc2hsaWJzPW5vCi0JY2F0IDw8X0xUX0VPRiAxPiYyCi0KLSoqKiBXYXJuaW5nOiB0aGUgR05VIGxpbmtlciwgYXQgbGVhc3QgdXAgdG8gcmVsZWFzZSAyLjE5LCBpcyByZXBvcnRlZAotKioqIHRvIGJlIHVuYWJsZSB0byByZWxpYWJseSBjcmVhdGUgc2hhcmVkIGxpYnJhcmllcyBvbiBBSVguCi0qKiogVGhlcmVmb3JlLCBsaWJ0b29sIGlzIGRpc2FibGluZyBzaGFyZWQgbGlicmFyaWVzIHN1cHBvcnQuICBJZiB5b3UKLSoqKiByZWFsbHkgY2FyZSBmb3Igc2hhcmVkIGxpYnJhcmllcywgeW91IG1heSB3YW50IHRvIGluc3RhbGwgYmludXRpbHMKLSoqKiAyLjIwIG9yIGFib3ZlLCBvciBtb2RpZnkgeW91ciBQQVRIIHNvIHRoYXQgYSBub24tR05VIGxpbmtlciBpcyBmb3VuZC4KLSoqKiBZb3Ugd2lsbCB0aGVuIG5lZWQgdG8gcmVzdGFydCB0aGUgY29uZmlndXJhdGlvbiBwcm9jZXNzLgotCi1fTFRfRU9GCi0gICAgICBmaQotICAgICAgOzsKLQotICAgIGFtaWdhb3MqKQotICAgICAgY2FzZSAkaG9zdF9jcHUgaW4KLSAgICAgIHBvd2VycGMpCi0gICAgICAgICAgICAjIHNlZSBjb21tZW50IGFib3V0IEFtaWdhT1M0IC5zbyBzdXBwb3J0Ci0gICAgICAgICAgICBhcmNoaXZlX2NtZHM9JyRDQyAtc2hhcmVkICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncyAke3dsfS1zb25hbWUgJHdsJHNvbmFtZSAtbyAkbGliJwotICAgICAgICAgICAgYXJjaGl2ZV9leHBzeW1fY21kcz0nJwotICAgICAgICA7OwotICAgICAgbTY4aykKLSAgICAgICAgICAgIGFyY2hpdmVfY21kcz0nJFJNICRvdXRwdXRfb2JqZGlyL2EyaXhsaWJyYXJ5LmRhdGF+JEVDSE8gIiNkZWZpbmUgTkFNRSAkbGlibmFtZSIgPiAkb3V0cHV0X29iamRpci9hMml4bGlicmFyeS5kYXRhfiRFQ0hPICIjZGVmaW5lIExJQlJBUllfSUQgMSIgPj4gJG91dHB1dF9vYmpkaXIvYTJpeGxpYnJhcnkuZGF0YX4kRUNITyAiI2RlZmluZSBWRVJTSU9OICRtYWpvciIgPj4gJG91dHB1dF9vYmpkaXIvYTJpeGxpYnJhcnkuZGF0YX4kRUNITyAiI2RlZmluZSBSRVZJU0lPTiAkcmV2aXNpb24iID4+ICRvdXRwdXRfb2JqZGlyL2EyaXhsaWJyYXJ5LmRhdGF+JEFSICRBUl9GTEFHUyAkbGliICRsaWJvYmpzfiRSQU5MSUIgJGxpYn4oY2QgJG91dHB1dF9vYmpkaXIgJiYgYTJpeGxpYnJhcnkgLTMyKScKLSAgICAgICAgICAgIGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWM9Jy1MJGxpYmRpcicKLSAgICAgICAgICAgIGhhcmRjb2RlX21pbnVzX0w9eWVzCi0gICAgICAgIDs7Ci0gICAgICBlc2FjCi0gICAgICA7OwotCi0gICAgYmVvcyopCi0gICAgICBpZiAkTEQgLS1oZWxwIDI+JjEgfCAkR1JFUCAnOiBzdXBwb3J0ZWQgdGFyZ2V0czouKiBlbGYnID4gL2Rldi9udWxsOyB0aGVuCi0JYWxsb3dfdW5kZWZpbmVkX2ZsYWc9dW5zdXBwb3J0ZWQKLQkjIEpvc2VwaCBCZWNrZW5iYWNoIDxqcmIzQGJlc3QuY29tPiBzYXlzIHNvbWUgcmVsZWFzZXMgb2YgZ2NjCi0JIyBzdXBwb3J0IC0tdW5kZWZpbmVkLiAgVGhpcyBkZXNlcnZlcyBzb21lIGludmVzdGlnYXRpb24uICBGSVhNRQotCWFyY2hpdmVfY21kcz0nJENDIC1ub3N0YXJ0ICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncyAke3dsfS1zb25hbWUgJHdsJHNvbmFtZSAtbyAkbGliJwotICAgICAgZWxzZQotCWxkX3NobGlicz1ubwotICAgICAgZmkKLSAgICAgIDs7Ci0KLSAgICBjeWd3aW4qIHwgbWluZ3cqIHwgcHczMiogfCBjZWdjYyopCi0gICAgICAjIF9MVF9UQUdWQVIoaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYywgKSBpcyBhY3R1YWxseSBtZWFuaW5nbGVzcywKLSAgICAgICMgYXMgdGhlcmUgaXMgbm8gc2VhcmNoIHBhdGggZm9yIERMTHMuCi0gICAgICBoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjPSctTCRsaWJkaXInCi0gICAgICBleHBvcnRfZHluYW1pY19mbGFnX3NwZWM9JyR7d2x9LS1leHBvcnQtYWxsLXN5bWJvbHMnCi0gICAgICBhbGxvd191bmRlZmluZWRfZmxhZz11bnN1cHBvcnRlZAotICAgICAgYWx3YXlzX2V4cG9ydF9zeW1ib2xzPW5vCi0gICAgICBlbmFibGVfc2hhcmVkX3dpdGhfc3RhdGljX3J1bnRpbWVzPXllcwotICAgICAgZXhwb3J0X3N5bWJvbHNfY21kcz0nJE5NICRsaWJvYmpzICRjb252ZW5pZW5jZSB8ICRnbG9iYWxfc3ltYm9sX3BpcGUgfCAkU0VEIC1lICdcJycvXltCQ0RHUlNdWyBdL3MvLipbIF1cKFteIF0qXCkvXDEgREFUQS87cy9eLipbIF1fX25tX19cKFteIF0qXClbIF1bXiBdKi9cMSBEQVRBLzsvXklbIF0vZDsvXltBSVRXXVsgXS9zLy4qIC8vJ1wnJyB8IHNvcnQgfCB1bmlxID4gJGV4cG9ydF9zeW1ib2xzJwotICAgICAgZXhjbHVkZV9leHBzeW1zPSdbX10rR0xPQkFMX09GRlNFVF9UQUJMRV98W19dK0dMT0JBTF9fW0ZJRF1fLip8W19dK2hlYWRfW0EtWmEtejAtOV9dK19kbGx8W0EtWmEtejAtOV9dK19kbGxfaW5hbWUnCi0KLSAgICAgIGlmICRMRCAtLWhlbHAgMj4mMSB8ICRHUkVQICdhdXRvLWltcG9ydCcgPiAvZGV2L251bGw7IHRoZW4KLSAgICAgICAgYXJjaGl2ZV9jbWRzPSckQ0MgLXNoYXJlZCAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MgLW8gJG91dHB1dF9vYmpkaXIvJHNvbmFtZSAke3dsfS0tZW5hYmxlLWF1dG8taW1hZ2UtYmFzZSAtWGxpbmtlciAtLW91dC1pbXBsaWIgLVhsaW5rZXIgJGxpYicKLQkjIElmIHRoZSBleHBvcnQtc3ltYm9scyBmaWxlIGFscmVhZHkgaXMgYSAuZGVmIGZpbGUgKDFzdCBsaW5lCi0JIyBpcyBFWFBPUlRTKSwgdXNlIGl0IGFzIGlzOyBvdGhlcndpc2UsIHByZXBlbmQuLi4KLQlhcmNoaXZlX2V4cHN5bV9jbWRzPSdpZiB0ZXN0ICJ4YCRTRUQgMXEgJGV4cG9ydF9zeW1ib2xzYCIgPSB4RVhQT1JUUzsgdGhlbgotCSAgY3AgJGV4cG9ydF9zeW1ib2xzICRvdXRwdXRfb2JqZGlyLyRzb25hbWUuZGVmOwotCWVsc2UKLQkgIGVjaG8gRVhQT1JUUyA+ICRvdXRwdXRfb2JqZGlyLyRzb25hbWUuZGVmOwotCSAgY2F0ICRleHBvcnRfc3ltYm9scyA+PiAkb3V0cHV0X29iamRpci8kc29uYW1lLmRlZjsKLQlmaX4KLQkkQ0MgLXNoYXJlZCAkb3V0cHV0X29iamRpci8kc29uYW1lLmRlZiAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MgLW8gJG91dHB1dF9vYmpkaXIvJHNvbmFtZSAke3dsfS0tZW5hYmxlLWF1dG8taW1hZ2UtYmFzZSAtWGxpbmtlciAtLW91dC1pbXBsaWIgLVhsaW5rZXIgJGxpYicKLSAgICAgIGVsc2UKLQlsZF9zaGxpYnM9bm8KLSAgICAgIGZpCi0gICAgICA7OwotCi0gICAgaGFpa3UqKQotICAgICAgYXJjaGl2ZV9jbWRzPSckQ0MgLXNoYXJlZCAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MgJHt3bH0tc29uYW1lICR3bCRzb25hbWUgLW8gJGxpYicKLSAgICAgIGxpbmtfYWxsX2RlcGxpYnM9eWVzCi0gICAgICA7OwotCi0gICAgaW50ZXJpeFszLTldKikKLSAgICAgIGhhcmRjb2RlX2RpcmVjdD1ubwotICAgICAgaGFyZGNvZGVfc2hsaWJwYXRoX3Zhcj1ubwotICAgICAgaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYz0nJHt3bH0tcnBhdGgsJGxpYmRpcicKLSAgICAgIGV4cG9ydF9keW5hbWljX2ZsYWdfc3BlYz0nJHt3bH0tRScKLSAgICAgICMgSGFjazogT24gSW50ZXJpeCAzLngsIHdlIGNhbm5vdCBjb21waWxlIFBJQyBiZWNhdXNlIG9mIGEgYnJva2VuIGdjYy4KLSAgICAgICMgSW5zdGVhZCwgc2hhcmVkIGxpYnJhcmllcyBhcmUgbG9hZGVkIGF0IGFuIGltYWdlIGJhc2UgKDB4MTAwMDAwMDAgYnkKLSAgICAgICMgZGVmYXVsdCkgYW5kIHJlbG9jYXRlZCBpZiB0aGV5IGNvbmZsaWN0LCB3aGljaCBpcyBhIHNsb3cgdmVyeSBtZW1vcnkKLSAgICAgICMgY29uc3VtaW5nIGFuZCBmcmFnbWVudGluZyBwcm9jZXNzLiAgVG8gYXZvaWQgdGhpcywgd2UgcGljayBhIHJhbmRvbSwKLSAgICAgICMgMjU2IEtpQi1hbGlnbmVkIGltYWdlIGJhc2UgYmV0d2VlbiAweDUwMDAwMDAwIGFuZCAweDZGRkMwMDAwIGF0IGxpbmsKLSAgICAgICMgdGltZS4gIE1vdmluZyB1cCBmcm9tIDB4MTAwMDAwMDAgYWxzbyBhbGxvd3MgbW9yZSBzYnJrKDIpIHNwYWNlLgotICAgICAgYXJjaGl2ZV9jbWRzPSckQ0MgLXNoYXJlZCAkcGljX2ZsYWcgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzICR7d2x9LWgsJHNvbmFtZSAke3dsfS0taW1hZ2UtYmFzZSxgZXhwciAke1JBTkRPTS0kJH0gJSA0MDk2IC8gMiBcKiAyNjIxNDQgKyAxMzQyMTc3MjgwYCAtbyAkbGliJwotICAgICAgYXJjaGl2ZV9leHBzeW1fY21kcz0nc2VkICJzLF4sXywiICRleHBvcnRfc3ltYm9scyA+JG91dHB1dF9vYmpkaXIvJHNvbmFtZS5leHBzeW1+JENDIC1zaGFyZWQgJHBpY19mbGFnICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncyAke3dsfS1oLCRzb25hbWUgJHt3bH0tLXJldGFpbi1zeW1ib2xzLWZpbGUsJG91dHB1dF9vYmpkaXIvJHNvbmFtZS5leHBzeW0gJHt3bH0tLWltYWdlLWJhc2UsYGV4cHIgJHtSQU5ET00tJCR9ICUgNDA5NiAvIDIgXCogMjYyMTQ0ICsgMTM0MjE3NzI4MGAgLW8gJGxpYicKLSAgICAgIDs7Ci0KLSAgICBnbnUqIHwgbGludXgqIHwgdHBmKiB8IGsqYnNkKi1nbnUgfCBrb3BlbnNvbGFyaXMqLWdudSkKLSAgICAgIHRtcF9kaWV0PW5vCi0gICAgICBpZiB0ZXN0ICIkaG9zdF9vcyIgPSBsaW51eC1kaWV0bGliYzsgdGhlbgotCWNhc2UgJGNjX2Jhc2VuYW1lIGluCi0JICBkaWV0XCAqKSB0bXBfZGlldD15ZXM7OwkjIGxpbnV4LWRpZXRsaWJjIHdpdGggc3RhdGljIGxpbmtpbmcgKCFkaWV0LWR5bikKLQllc2FjCi0gICAgICBmaQotICAgICAgaWYgJExEIC0taGVscCAyPiYxIHwgJEVHUkVQICc6IHN1cHBvcnRlZCB0YXJnZXRzOi4qIGVsZicgPiAvZGV2L251bGwgXAotCSAmJiB0ZXN0ICIkdG1wX2RpZXQiID0gbm8KLSAgICAgIHRoZW4KLQl0bXBfYWRkZmxhZz0nICRwaWNfZmxhZycKLQl0bXBfc2hhcmVkZmxhZz0nLXNoYXJlZCcKLQljYXNlICRjY19iYXNlbmFtZSwkaG9zdF9jcHUgaW4KLSAgICAgICAgcGdjYyopCQkJCSMgUG9ydGxhbmQgR3JvdXAgQyBjb21waWxlcgotCSAgd2hvbGVfYXJjaGl2ZV9mbGFnX3NwZWM9JyR7d2x9LS13aG9sZS1hcmNoaXZlYGZvciBjb252IGluICRjb252ZW5pZW5jZVwiXCI7IGRvIHRlc3QgIC1uIFwiJGNvbnZcIiAmJiBuZXdfY29udmVuaWVuY2U9XCIkbmV3X2NvbnZlbmllbmNlLCRjb252XCI7IGRvbmU7IGZ1bmNfZWNob19hbGwgXCIkbmV3X2NvbnZlbmllbmNlXCJgICR7d2x9LS1uby13aG9sZS1hcmNoaXZlJwotCSAgdG1wX2FkZGZsYWc9JyAkcGljX2ZsYWcnCi0JICA7OwotCXBnZjc3KiB8IHBnZjkwKiB8IHBnZjk1KiB8IHBnZm9ydHJhbiopCi0JCQkJCSMgUG9ydGxhbmQgR3JvdXAgZjc3IGFuZCBmOTAgY29tcGlsZXJzCi0JICB3aG9sZV9hcmNoaXZlX2ZsYWdfc3BlYz0nJHt3bH0tLXdob2xlLWFyY2hpdmVgZm9yIGNvbnYgaW4gJGNvbnZlbmllbmNlXCJcIjsgZG8gdGVzdCAgLW4gXCIkY29udlwiICYmIG5ld19jb252ZW5pZW5jZT1cIiRuZXdfY29udmVuaWVuY2UsJGNvbnZcIjsgZG9uZTsgZnVuY19lY2hvX2FsbCBcIiRuZXdfY29udmVuaWVuY2VcImAgJHt3bH0tLW5vLXdob2xlLWFyY2hpdmUnCi0JICB0bXBfYWRkZmxhZz0nICRwaWNfZmxhZyAtTW5vbWFpbicgOzsKLQllY2MqLGlhNjQqIHwgaWNjKixpYTY0KikJIyBJbnRlbCBDIGNvbXBpbGVyIG9uIGlhNjQKLQkgIHRtcF9hZGRmbGFnPScgLWlfZHluYW1pYycgOzsKLQllZmMqLGlhNjQqIHwgaWZvcnQqLGlhNjQqKQkjIEludGVsIEZvcnRyYW4gY29tcGlsZXIgb24gaWE2NAotCSAgdG1wX2FkZGZsYWc9JyAtaV9keW5hbWljIC1ub2Zvcl9tYWluJyA7OwotCWlmYyogfCBpZm9ydCopCQkJIyBJbnRlbCBGb3J0cmFuIGNvbXBpbGVyCi0JICB0bXBfYWRkZmxhZz0nIC1ub2Zvcl9tYWluJyA7OwotCWxmOTUqKQkJCQkjIExhaGV5IEZvcnRyYW4gOC4xCi0JICB3aG9sZV9hcmNoaXZlX2ZsYWdfc3BlYz0KLQkgIHRtcF9zaGFyZWRmbGFnPSctLXNoYXJlZCcgOzsKLQl4bFtjQ10qIHwgYmd4bFtjQ10qIHwgbXBpeGxbY0NdKikgIyBJQk0gWEwgQyA4LjAgb24gUFBDIChkZWFsIHdpdGggeGxmIGJlbG93KQotCSAgdG1wX3NoYXJlZGZsYWc9Jy1xbWtzaHJvYmonCi0JICB0bXBfYWRkZmxhZz0gOzsKLQludmNjKikJIyBDdWRhIENvbXBpbGVyIERyaXZlciAyLjIKLQkgIHdob2xlX2FyY2hpdmVfZmxhZ19zcGVjPScke3dsfS0td2hvbGUtYXJjaGl2ZWBmb3IgY29udiBpbiAkY29udmVuaWVuY2VcIlwiOyBkbyB0ZXN0ICAtbiBcIiRjb252XCIgJiYgbmV3X2NvbnZlbmllbmNlPVwiJG5ld19jb252ZW5pZW5jZSwkY29udlwiOyBkb25lOyBmdW5jX2VjaG9fYWxsIFwiJG5ld19jb252ZW5pZW5jZVwiYCAke3dsfS0tbm8td2hvbGUtYXJjaGl2ZScKLQkgIGNvbXBpbGVyX25lZWRzX29iamVjdD15ZXMKLQkgIDs7Ci0JZXNhYwotCWNhc2UgYCRDQyAtViAyPiYxIHwgc2VkIDVxYCBpbgotCSpTdW5cIEMqKQkJCSMgU3VuIEMgNS45Ci0JICB3aG9sZV9hcmNoaXZlX2ZsYWdfc3BlYz0nJHt3bH0tLXdob2xlLWFyY2hpdmVgbmV3X2NvbnZlbmllbmNlPTsgZm9yIGNvbnYgaW4gJGNvbnZlbmllbmNlXCJcIjsgZG8gdGVzdCAteiBcIiRjb252XCIgfHwgbmV3X2NvbnZlbmllbmNlPVwiJG5ld19jb252ZW5pZW5jZSwkY29udlwiOyBkb25lOyBmdW5jX2VjaG9fYWxsIFwiJG5ld19jb252ZW5pZW5jZVwiYCAke3dsfS0tbm8td2hvbGUtYXJjaGl2ZScKLQkgIGNvbXBpbGVyX25lZWRzX29iamVjdD15ZXMKLQkgIHRtcF9zaGFyZWRmbGFnPSctRycgOzsKLQkqU3VuXCBGKikJCQkjIFN1biBGb3J0cmFuIDguMwotCSAgdG1wX3NoYXJlZGZsYWc9Jy1HJyA7OwotCWVzYWMKLQlhcmNoaXZlX2NtZHM9JyRDQyAnIiR0bXBfc2hhcmVkZmxhZyIiJHRtcF9hZGRmbGFnIicgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzICR7d2x9LXNvbmFtZSAkd2wkc29uYW1lIC1vICRsaWInCi0KLSAgICAgICAgaWYgdGVzdCAieCRzdXBwb3J0c19hbm9uX3ZlcnNpb25pbmciID0geHllczsgdGhlbgotICAgICAgICAgIGFyY2hpdmVfZXhwc3ltX2NtZHM9J2VjaG8gInsgZ2xvYmFsOiIgPiAkb3V0cHV0X29iamRpci8kbGlibmFtZS52ZXJ+Ci0JICAgIGNhdCAkZXhwb3J0X3N5bWJvbHMgfCBzZWQgLWUgInMvXCguKlwpL1wxOy8iID4+ICRvdXRwdXRfb2JqZGlyLyRsaWJuYW1lLnZlcn4KLQkgICAgZWNobyAibG9jYWw6ICo7IH07IiA+PiAkb3V0cHV0X29iamRpci8kbGlibmFtZS52ZXJ+Ci0JICAgICRDQyAnIiR0bXBfc2hhcmVkZmxhZyIiJHRtcF9hZGRmbGFnIicgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzICR7d2x9LXNvbmFtZSAkd2wkc29uYW1lICR7d2x9LXZlcnNpb24tc2NyaXB0ICR7d2x9JG91dHB1dF9vYmpkaXIvJGxpYm5hbWUudmVyIC1vICRsaWInCi0gICAgICAgIGZpCi0KLQljYXNlICRjY19iYXNlbmFtZSBpbgotCXhsZiogfCBiZ2YqIHwgYmd4bGYqIHwgbXBpeGxmKikKLQkgICMgSUJNIFhMIEZvcnRyYW4gMTAuMSBvbiBQUEMgY2Fubm90IGNyZWF0ZSBzaGFyZWQgbGlicyBpdHNlbGYKLQkgIHdob2xlX2FyY2hpdmVfZmxhZ19zcGVjPSctLXdob2xlLWFyY2hpdmUkY29udmVuaWVuY2UgLS1uby13aG9sZS1hcmNoaXZlJwotCSAgaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYz0KLQkgIGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWNfbGQ9Jy1ycGF0aCAkbGliZGlyJwotCSAgYXJjaGl2ZV9jbWRzPSckTEQgLXNoYXJlZCAkbGlib2JqcyAkZGVwbGlicyAkbGlua2VyX2ZsYWdzIC1zb25hbWUgJHNvbmFtZSAtbyAkbGliJwotCSAgaWYgdGVzdCAieCRzdXBwb3J0c19hbm9uX3ZlcnNpb25pbmciID0geHllczsgdGhlbgotCSAgICBhcmNoaXZlX2V4cHN5bV9jbWRzPSdlY2hvICJ7IGdsb2JhbDoiID4gJG91dHB1dF9vYmpkaXIvJGxpYm5hbWUudmVyfgotCSAgICAgIGNhdCAkZXhwb3J0X3N5bWJvbHMgfCBzZWQgLWUgInMvXCguKlwpL1wxOy8iID4+ICRvdXRwdXRfb2JqZGlyLyRsaWJuYW1lLnZlcn4KLQkgICAgICBlY2hvICJsb2NhbDogKjsgfTsiID4+ICRvdXRwdXRfb2JqZGlyLyRsaWJuYW1lLnZlcn4KLQkgICAgICAkTEQgLXNoYXJlZCAkbGlib2JqcyAkZGVwbGlicyAkbGlua2VyX2ZsYWdzIC1zb25hbWUgJHNvbmFtZSAtdmVyc2lvbi1zY3JpcHQgJG91dHB1dF9vYmpkaXIvJGxpYm5hbWUudmVyIC1vICRsaWInCi0JICBmaQotCSAgOzsKLQllc2FjCi0gICAgICBlbHNlCi0gICAgICAgIGxkX3NobGlicz1ubwotICAgICAgZmkKLSAgICAgIDs7Ci0KLSAgICBuZXRic2QqKQotICAgICAgaWYgZWNobyBfX0VMRl9fIHwgJENDIC1FIC0gfCAkR1JFUCBfX0VMRl9fID4vZGV2L251bGw7IHRoZW4KLQlhcmNoaXZlX2NtZHM9JyRMRCAtQnNoYXJlYWJsZSAkbGlib2JqcyAkZGVwbGlicyAkbGlua2VyX2ZsYWdzIC1vICRsaWInCi0Jd2xhcmM9Ci0gICAgICBlbHNlCi0JYXJjaGl2ZV9jbWRzPSckQ0MgLXNoYXJlZCAkcGljX2ZsYWcgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzICR7d2x9LXNvbmFtZSAkd2wkc29uYW1lIC1vICRsaWInCi0JYXJjaGl2ZV9leHBzeW1fY21kcz0nJENDIC1zaGFyZWQgJHBpY19mbGFnICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncyAke3dsfS1zb25hbWUgJHdsJHNvbmFtZSAke3dsfS1yZXRhaW4tc3ltYm9scy1maWxlICR3bCRleHBvcnRfc3ltYm9scyAtbyAkbGliJwotICAgICAgZmkKLSAgICAgIDs7Ci0KLSAgICBzb2xhcmlzKikKLSAgICAgIGlmICRMRCAtdiAyPiYxIHwgJEdSRVAgJ0JGRCAyXC44JyA+IC9kZXYvbnVsbDsgdGhlbgotCWxkX3NobGlicz1ubwotCWNhdCA8PF9MVF9FT0YgMT4mMgotCi0qKiogV2FybmluZzogVGhlIHJlbGVhc2VzIDIuOC4qIG9mIHRoZSBHTlUgbGlua2VyIGNhbm5vdCByZWxpYWJseQotKioqIGNyZWF0ZSBzaGFyZWQgbGlicmFyaWVzIG9uIFNvbGFyaXMgc3lzdGVtcy4gIFRoZXJlZm9yZSwgbGlidG9vbAotKioqIGlzIGRpc2FibGluZyBzaGFyZWQgbGlicmFyaWVzIHN1cHBvcnQuICBXZSB1cmdlIHlvdSB0byB1cGdyYWRlIEdOVQotKioqIGJpbnV0aWxzIHRvIHJlbGVhc2UgMi45LjEgb3IgbmV3ZXIuICBBbm90aGVyIG9wdGlvbiBpcyB0byBtb2RpZnkKLSoqKiB5b3VyIFBBVEggb3IgY29tcGlsZXIgY29uZmlndXJhdGlvbiBzbyB0aGF0IHRoZSBuYXRpdmUgbGlua2VyIGlzCi0qKiogdXNlZCwgYW5kIHRoZW4gcmVzdGFydC4KLQotX0xUX0VPRgotICAgICAgZWxpZiAkTEQgLS1oZWxwIDI+JjEgfCAkR1JFUCAnOiBzdXBwb3J0ZWQgdGFyZ2V0czouKiBlbGYnID4gL2Rldi9udWxsOyB0aGVuCi0JYXJjaGl2ZV9jbWRzPSckQ0MgLXNoYXJlZCAkcGljX2ZsYWcgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzICR7d2x9LXNvbmFtZSAkd2wkc29uYW1lIC1vICRsaWInCi0JYXJjaGl2ZV9leHBzeW1fY21kcz0nJENDIC1zaGFyZWQgJHBpY19mbGFnICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncyAke3dsfS1zb25hbWUgJHdsJHNvbmFtZSAke3dsfS1yZXRhaW4tc3ltYm9scy1maWxlICR3bCRleHBvcnRfc3ltYm9scyAtbyAkbGliJwotICAgICAgZWxzZQotCWxkX3NobGlicz1ubwotICAgICAgZmkKLSAgICAgIDs7Ci0KLSAgICBzeXN2NSogfCBzY28zLjJ2NSogfCBzY281djYqIHwgdW5peHdhcmUqIHwgT3BlblVOSVgqKQotICAgICAgY2FzZSBgJExEIC12IDI+JjFgIGluCi0gICAgICAgICpcIFswMV0uKiB8ICpcIDIuWzAtOV0uKiB8ICpcIDIuMVswLTVdLiopCi0JbGRfc2hsaWJzPW5vCi0JY2F0IDw8X0xUX0VPRiAxPiYyCi0KLSoqKiBXYXJuaW5nOiBSZWxlYXNlcyBvZiB0aGUgR05VIGxpbmtlciBwcmlvciB0byAyLjE2LjkxLjAuMyBjYW4gbm90Ci0qKiogcmVsaWFibHkgY3JlYXRlIHNoYXJlZCBsaWJyYXJpZXMgb24gU0NPIHN5c3RlbXMuICBUaGVyZWZvcmUsIGxpYnRvb2wKLSoqKiBpcyBkaXNhYmxpbmcgc2hhcmVkIGxpYnJhcmllcyBzdXBwb3J0LiAgV2UgdXJnZSB5b3UgdG8gdXBncmFkZSBHTlUKLSoqKiBiaW51dGlscyB0byByZWxlYXNlIDIuMTYuOTEuMC4zIG9yIG5ld2VyLiAgQW5vdGhlciBvcHRpb24gaXMgdG8gbW9kaWZ5Ci0qKiogeW91ciBQQVRIIG9yIGNvbXBpbGVyIGNvbmZpZ3VyYXRpb24gc28gdGhhdCB0aGUgbmF0aXZlIGxpbmtlciBpcwotKioqIHVzZWQsIGFuZCB0aGVuIHJlc3RhcnQuCi0KLV9MVF9FT0YKLQk7OwotCSopCi0JICAjIEZvciBzZWN1cml0eSByZWFzb25zLCBpdCBpcyBoaWdobHkgcmVjb21tZW5kZWQgdGhhdCB5b3UgYWx3YXlzCi0JICAjIHVzZSBhYnNvbHV0ZSBwYXRocyBmb3IgbmFtaW5nIHNoYXJlZCBsaWJyYXJpZXMsIGFuZCBleGNsdWRlIHRoZQotCSAgIyBEVF9SVU5QQVRIIHRhZyBmcm9tIGV4ZWN1dGFibGVzIGFuZCBsaWJyYXJpZXMuICBCdXQgZG9pbmcgc28KLQkgICMgcmVxdWlyZXMgdGhhdCB5b3UgY29tcGlsZSBldmVyeXRoaW5nIHR3aWNlLCB3aGljaCBpcyBhIHBhaW4uCi0JICBpZiAkTEQgLS1oZWxwIDI+JjEgfCAkR1JFUCAnOiBzdXBwb3J0ZWQgdGFyZ2V0czouKiBlbGYnID4gL2Rldi9udWxsOyB0aGVuCi0JICAgIGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWM9JyR7d2x9LXJwYXRoICR7d2x9JGxpYmRpcicKLQkgICAgYXJjaGl2ZV9jbWRzPSckQ0MgLXNoYXJlZCAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MgJHt3bH0tc29uYW1lICR3bCRzb25hbWUgLW8gJGxpYicKLQkgICAgYXJjaGl2ZV9leHBzeW1fY21kcz0nJENDIC1zaGFyZWQgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzICR7d2x9LXNvbmFtZSAkd2wkc29uYW1lICR7d2x9LXJldGFpbi1zeW1ib2xzLWZpbGUgJHdsJGV4cG9ydF9zeW1ib2xzIC1vICRsaWInCi0JICBlbHNlCi0JICAgIGxkX3NobGlicz1ubwotCSAgZmkKLQk7OwotICAgICAgZXNhYwotICAgICAgOzsKLQotICAgIHN1bm9zNCopCi0gICAgICBhcmNoaXZlX2NtZHM9JyRMRCAtYXNzZXJ0IHB1cmUtdGV4dCAtQnNoYXJlYWJsZSAtbyAkbGliICRsaWJvYmpzICRkZXBsaWJzICRsaW5rZXJfZmxhZ3MnCi0gICAgICB3bGFyYz0KLSAgICAgIGhhcmRjb2RlX2RpcmVjdD15ZXMKLSAgICAgIGhhcmRjb2RlX3NobGlicGF0aF92YXI9bm8KLSAgICAgIDs7Ci0KLSAgICAqKQotICAgICAgaWYgJExEIC0taGVscCAyPiYxIHwgJEdSRVAgJzogc3VwcG9ydGVkIHRhcmdldHM6LiogZWxmJyA+IC9kZXYvbnVsbDsgdGhlbgotCWFyY2hpdmVfY21kcz0nJENDIC1zaGFyZWQgJHBpY19mbGFnICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncyAke3dsfS1zb25hbWUgJHdsJHNvbmFtZSAtbyAkbGliJwotCWFyY2hpdmVfZXhwc3ltX2NtZHM9JyRDQyAtc2hhcmVkICRwaWNfZmxhZyAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MgJHt3bH0tc29uYW1lICR3bCRzb25hbWUgJHt3bH0tcmV0YWluLXN5bWJvbHMtZmlsZSAkd2wkZXhwb3J0X3N5bWJvbHMgLW8gJGxpYicKLSAgICAgIGVsc2UKLQlsZF9zaGxpYnM9bm8KLSAgICAgIGZpCi0gICAgICA7OwotICAgIGVzYWMKLQotICAgIGlmIHRlc3QgIiRsZF9zaGxpYnMiID0gbm87IHRoZW4KLSAgICAgIHJ1bnBhdGhfdmFyPQotICAgICAgaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYz0KLSAgICAgIGV4cG9ydF9keW5hbWljX2ZsYWdfc3BlYz0KLSAgICAgIHdob2xlX2FyY2hpdmVfZmxhZ19zcGVjPQotICAgIGZpCi0gIGVsc2UKLSAgICAjIFBPUlRNRSBmaWxsIGluIGEgZGVzY3JpcHRpb24gb2YgeW91ciBzeXN0ZW0ncyBsaW5rZXIgKG5vdCBHTlUgbGQpCi0gICAgY2FzZSAkaG9zdF9vcyBpbgotICAgIGFpeDMqKQotICAgICAgYWxsb3dfdW5kZWZpbmVkX2ZsYWc9dW5zdXBwb3J0ZWQKLSAgICAgIGFsd2F5c19leHBvcnRfc3ltYm9scz15ZXMKLSAgICAgIGFyY2hpdmVfZXhwc3ltX2NtZHM9JyRMRCAtbyAkb3V0cHV0X29iamRpci8kc29uYW1lICRsaWJvYmpzICRkZXBsaWJzICRsaW5rZXJfZmxhZ3MgLWJFOiRleHBvcnRfc3ltYm9scyAtVDUxMiAtSDUxMiAtYk06U1JFfiRBUiAkQVJfRkxBR1MgJGxpYiAkb3V0cHV0X29iamRpci8kc29uYW1lJwotICAgICAgIyBOb3RlOiB0aGlzIGxpbmtlciBoYXJkY29kZXMgdGhlIGRpcmVjdG9yaWVzIGluIExJQlBBVEggaWYgdGhlcmUKLSAgICAgICMgYXJlIG5vIGRpcmVjdG9yaWVzIHNwZWNpZmllZCBieSAtTC4KLSAgICAgIGhhcmRjb2RlX21pbnVzX0w9eWVzCi0gICAgICBpZiB0ZXN0ICIkR0NDIiA9IHllcyAmJiB0ZXN0IC16ICIkbHRfcHJvZ19jb21waWxlcl9zdGF0aWMiOyB0aGVuCi0JIyBOZWl0aGVyIGRpcmVjdCBoYXJkY29kaW5nIG5vciBzdGF0aWMgbGlua2luZyBpcyBzdXBwb3J0ZWQgd2l0aCBhCi0JIyBicm9rZW4gY29sbGVjdDIuCi0JaGFyZGNvZGVfZGlyZWN0PXVuc3VwcG9ydGVkCi0gICAgICBmaQotICAgICAgOzsKLQotICAgIGFpeFs0LTldKikKLSAgICAgIGlmIHRlc3QgIiRob3N0X2NwdSIgPSBpYTY0OyB0aGVuCi0JIyBPbiBJQTY0LCB0aGUgbGlua2VyIGRvZXMgcnVuIHRpbWUgbGlua2luZyBieSBkZWZhdWx0LCBzbyB3ZSBkb24ndAotCSMgaGF2ZSB0byBkbyBhbnl0aGluZyBzcGVjaWFsLgotCWFpeF91c2VfcnVudGltZWxpbmtpbmc9bm8KLQlleHBfc3ltX2ZsYWc9Jy1CZXhwb3J0JwotCW5vX2VudHJ5X2ZsYWc9IiIKLSAgICAgIGVsc2UKLQkjIElmIHdlJ3JlIHVzaW5nIEdOVSBubSwgdGhlbiB3ZSBkb24ndCB3YW50IHRoZSAiLUMiIG9wdGlvbi4KLQkjIC1DIG1lYW5zIGRlbWFuZ2xlIHRvIEFJWCBubSwgYnV0IG1lYW5zIGRvbid0IGRlbWFuZ2xlIHdpdGggR05VIG5tCi0JIyBBbHNvLCBBSVggbm0gdHJlYXRzIHdlYWsgZGVmaW5lZCBzeW1ib2xzIGxpa2Ugb3RoZXIgZ2xvYmFsCi0JIyBkZWZpbmVkIHN5bWJvbHMsIHdoZXJlYXMgR05VIG5tIG1hcmtzIHRoZW0gYXMgIlciLgotCWlmICROTSAtViAyPiYxIHwgJEdSRVAgJ0dOVScgPiAvZGV2L251bGw7IHRoZW4KLQkgIGV4cG9ydF9zeW1ib2xzX2NtZHM9JyROTSAtQnBnICRsaWJvYmpzICRjb252ZW5pZW5jZSB8IGF3ayAnXCcneyBpZiAoKChcJCAyID09ICJUIikgfHwgKFwkIDIgPT0gIkQiKSB8fCAoXCQgMiA9PSAiQiIpIHx8IChcJCAyID09ICJXIikpICYmIChzdWJzdHIoXCQgMywxLDEpICE9ICIuIikpIHsgcHJpbnQgXCQgMyB9IH0nXCcnIHwgc29ydCAtdSA+ICRleHBvcnRfc3ltYm9scycKLQllbHNlCi0JICBleHBvcnRfc3ltYm9sc19jbWRzPSckTk0gLUJDcGcgJGxpYm9ianMgJGNvbnZlbmllbmNlIHwgYXdrICdcJyd7IGlmICgoKFwkIDIgPT0gIlQiKSB8fCAoXCQgMiA9PSAiRCIpIHx8IChcJCAyID09ICJCIikpICYmIChzdWJzdHIoXCQgMywxLDEpICE9ICIuIikpIHsgcHJpbnQgXCQgMyB9IH0nXCcnIHwgc29ydCAtdSA+ICRleHBvcnRfc3ltYm9scycKLQlmaQotCWFpeF91c2VfcnVudGltZWxpbmtpbmc9bm8KLQotCSMgVGVzdCBpZiB3ZSBhcmUgdHJ5aW5nIHRvIHVzZSBydW4gdGltZSBsaW5raW5nIG9yIG5vcm1hbAotCSMgQUlYIHN0eWxlIGxpbmtpbmcuIElmIC1icnRsIGlzIHNvbWV3aGVyZSBpbiBMREZMQUdTLCB3ZQotCSMgbmVlZCB0byBkbyBydW50aW1lIGxpbmtpbmcuCi0JY2FzZSAkaG9zdF9vcyBpbiBhaXg0LlsyM118YWl4NC5bMjNdLip8YWl4WzUtOV0qKQotCSAgZm9yIGxkX2ZsYWcgaW4gJExERkxBR1M7IGRvCi0JICBpZiAodGVzdCAkbGRfZmxhZyA9ICItYnJ0bCIgfHwgdGVzdCAkbGRfZmxhZyA9ICItV2wsLWJydGwiKTsgdGhlbgotCSAgICBhaXhfdXNlX3J1bnRpbWVsaW5raW5nPXllcwotCSAgICBicmVhawotCSAgZmkKLQkgIGRvbmUKLQkgIDs7Ci0JZXNhYwotCi0JZXhwX3N5bV9mbGFnPSctYmV4cG9ydCcKLQlub19lbnRyeV9mbGFnPSctYm5vZW50cnknCi0gICAgICBmaQotCi0gICAgICAjIFdoZW4gbGFyZ2UgZXhlY3V0YWJsZXMgb3Igc2hhcmVkIG9iamVjdHMgYXJlIGJ1aWx0LCBBSVggbGQgY2FuCi0gICAgICAjIGhhdmUgcHJvYmxlbXMgY3JlYXRpbmcgdGhlIHRhYmxlIG9mIGNvbnRlbnRzLiAgSWYgbGlua2luZyBhIGxpYnJhcnkKLSAgICAgICMgb3IgcHJvZ3JhbSByZXN1bHRzIGluICJlcnJvciBUT0Mgb3ZlcmZsb3ciIGFkZCAtbW1pbmltYWwtdG9jIHRvCi0gICAgICAjIENYWEZMQUdTL0NGTEFHUyBmb3IgZysrL2djYy4gIEluIHRoZSBjYXNlcyB3aGVyZSB0aGF0IGlzIG5vdAotICAgICAgIyBlbm91Z2ggdG8gZml4IHRoZSBwcm9ibGVtLCBhZGQgLVdsLC1iYmlndG9jIHRvIExERkxBR1MuCi0KLSAgICAgIGFyY2hpdmVfY21kcz0nJwotICAgICAgaGFyZGNvZGVfZGlyZWN0PXllcwotICAgICAgaGFyZGNvZGVfZGlyZWN0X2Fic29sdXRlPXllcwotICAgICAgaGFyZGNvZGVfbGliZGlyX3NlcGFyYXRvcj0nOicKLSAgICAgIGxpbmtfYWxsX2RlcGxpYnM9eWVzCi0gICAgICBmaWxlX2xpc3Rfc3BlYz0nJHt3bH0tZiwnCi0KLSAgICAgIGlmIHRlc3QgIiRHQ0MiID0geWVzOyB0aGVuCi0JY2FzZSAkaG9zdF9vcyBpbiBhaXg0LlswMTJdfGFpeDQuWzAxMl0uKikKLQkjIFdlIG9ubHkgd2FudCB0byBkbyB0aGlzIG9uIEFJWCA0LjIgYW5kIGxvd2VyLCB0aGUgY2hlY2sKLQkjIGJlbG93IGZvciBicm9rZW4gY29sbGVjdDIgZG9lc24ndCB3b3JrIHVuZGVyIDQuMysKLQkgIGNvbGxlY3QybmFtZT1gJHtDQ30gLXByaW50LXByb2ctbmFtZT1jb2xsZWN0MmAKLQkgIGlmIHRlc3QgLWYgIiRjb2xsZWN0Mm5hbWUiICYmCi0JICAgc3RyaW5ncyAiJGNvbGxlY3QybmFtZSIgfCAkR1JFUCByZXNvbHZlX2xpYl9uYW1lID4vZGV2L251bGwKLQkgIHRoZW4KLQkgICMgV2UgaGF2ZSByZXdvcmtlZCBjb2xsZWN0MgotCSAgOgotCSAgZWxzZQotCSAgIyBXZSBoYXZlIG9sZCBjb2xsZWN0MgotCSAgaGFyZGNvZGVfZGlyZWN0PXVuc3VwcG9ydGVkCi0JICAjIEl0IGZhaWxzIHRvIGZpbmQgdW5pbnN0YWxsZWQgbGlicmFyaWVzIHdoZW4gdGhlIHVuaW5zdGFsbGVkCi0JICAjIHBhdGggaXMgbm90IGxpc3RlZCBpbiB0aGUgbGlicGF0aC4gIFNldHRpbmcgaGFyZGNvZGVfbWludXNfTAotCSAgIyB0byB1bnN1cHBvcnRlZCBmb3JjZXMgcmVsaW5raW5nCi0JICBoYXJkY29kZV9taW51c19MPXllcwotCSAgaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYz0nLUwkbGliZGlyJwotCSAgaGFyZGNvZGVfbGliZGlyX3NlcGFyYXRvcj0KLQkgIGZpCi0JICA7OwotCWVzYWMKLQlzaGFyZWRfZmxhZz0nLXNoYXJlZCcKLQlpZiB0ZXN0ICIkYWl4X3VzZV9ydW50aW1lbGlua2luZyIgPSB5ZXM7IHRoZW4KLQkgIHNoYXJlZF9mbGFnPSIkc2hhcmVkX2ZsYWcgIicke3dsfS1HJwotCWZpCi0gICAgICBlbHNlCi0JIyBub3QgdXNpbmcgZ2NjCi0JaWYgdGVzdCAiJGhvc3RfY3B1IiA9IGlhNjQ7IHRoZW4KLQkjIFZpc3VhbEFnZSBDKyssIFZlcnNpb24gNS41IGZvciBBSVggNUwgZm9yIElBLTY0LCBCZXRhIDMgUmVsZWFzZQotCSMgY2hva2VzIG9uIC1XbCwtRy4gVGhlIGZvbGxvd2luZyBsaW5lIGlzIGNvcnJlY3Q6Ci0JICBzaGFyZWRfZmxhZz0nLUcnCi0JZWxzZQotCSAgaWYgdGVzdCAiJGFpeF91c2VfcnVudGltZWxpbmtpbmciID0geWVzOyB0aGVuCi0JICAgIHNoYXJlZF9mbGFnPScke3dsfS1HJwotCSAgZWxzZQotCSAgICBzaGFyZWRfZmxhZz0nJHt3bH0tYk06U1JFJwotCSAgZmkKLQlmaQotICAgICAgZmkKLQotICAgICAgZXhwb3J0X2R5bmFtaWNfZmxhZ19zcGVjPScke3dsfS1iZXhwYWxsJwotICAgICAgIyBJdCBzZWVtcyB0aGF0IC1iZXhwYWxsIGRvZXMgbm90IGV4cG9ydCBzeW1ib2xzIGJlZ2lubmluZyB3aXRoCi0gICAgICAjIHVuZGVyc2NvcmUgKF8pLCBzbyBpdCBpcyBiZXR0ZXIgdG8gZ2VuZXJhdGUgYSBsaXN0IG9mIHN5bWJvbHMgdG8gZXhwb3J0LgotICAgICAgYWx3YXlzX2V4cG9ydF9zeW1ib2xzPXllcwotICAgICAgaWYgdGVzdCAiJGFpeF91c2VfcnVudGltZWxpbmtpbmciID0geWVzOyB0aGVuCi0JIyBXYXJuaW5nIC0gd2l0aG91dCB1c2luZyB0aGUgb3RoZXIgcnVudGltZSBsb2FkaW5nIGZsYWdzICgtYnJ0bCksCi0JIyAtYmVyb2sgd2lsbCBsaW5rIHdpdGhvdXQgZXJyb3IsIGJ1dCBtYXkgcHJvZHVjZSBhIGJyb2tlbiBsaWJyYXJ5LgotCWFsbG93X3VuZGVmaW5lZF9mbGFnPSctYmVyb2snCi0gICAgICAgICMgRGV0ZXJtaW5lIHRoZSBkZWZhdWx0IGxpYnBhdGggZnJvbSB0aGUgdmFsdWUgZW5jb2RlZCBpbiBhbgotICAgICAgICAjIGVtcHR5IGV4ZWN1dGFibGUuCi0gICAgICAgIGlmIHRlc3QgIiR7bHRfY3ZfYWl4X2xpYnBhdGgrc2V0fSIgPSBzZXQ7IHRoZW4KLSAgYWl4X2xpYnBhdGg9JGx0X2N2X2FpeF9saWJwYXRoCi1lbHNlCi0gIGlmICR7bHRfY3ZfYWl4X2xpYnBhdGhfKzp9IGZhbHNlOyB0aGVuIDoKLSAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKLWVsc2UKLSAgY2F0IGNvbmZkZWZzLmggLSA8PF9BQ0VPRiA+Y29uZnRlc3QuJGFjX2V4dAotLyogZW5kIGNvbmZkZWZzLmguICAqLwotCi1pbnQKLW1haW4gKCkKLXsKLQotICA7Ci0gIHJldHVybiAwOwotfQotX0FDRU9GCi1pZiBhY19mbl9jX3RyeV9saW5rICIkTElORU5PIjsgdGhlbiA6Ci0KLSAgbHRfYWl4X2xpYnBhdGhfc2VkPScKLSAgICAgIC9JbXBvcnQgRmlsZSBTdHJpbmdzLywvXiQvIHsKLQkgIC9eMC8gewotCSAgICAgIHMvXjAgICpcKFteIF0qXCkgKiQvXDEvCi0JICAgICAgcAotCSAgfQotICAgICAgfScKLSAgbHRfY3ZfYWl4X2xpYnBhdGhfPWBkdW1wIC1IIGNvbmZ0ZXN0JGFjX2V4ZWV4dCAyPi9kZXYvbnVsbCB8ICRTRUQgLW4gLWUgIiRsdF9haXhfbGlicGF0aF9zZWQiYAotICAjIENoZWNrIGZvciBhIDY0LWJpdCBvYmplY3QgaWYgd2UgZGlkbid0IGZpbmQgYW55dGhpbmcuCi0gIGlmIHRlc3QgLXogIiRsdF9jdl9haXhfbGlicGF0aF8iOyB0aGVuCi0gICAgbHRfY3ZfYWl4X2xpYnBhdGhfPWBkdW1wIC1IWDY0IGNvbmZ0ZXN0JGFjX2V4ZWV4dCAyPi9kZXYvbnVsbCB8ICRTRUQgLW4gLWUgIiRsdF9haXhfbGlicGF0aF9zZWQiYAotICBmaQotZmkKLXJtIC1mIGNvcmUgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgXAotICAgIGNvbmZ0ZXN0JGFjX2V4ZWV4dCBjb25mdGVzdC4kYWNfZXh0Ci0gIGlmIHRlc3QgLXogIiRsdF9jdl9haXhfbGlicGF0aF8iOyB0aGVuCi0gICAgbHRfY3ZfYWl4X2xpYnBhdGhfPSIvdXNyL2xpYjovbGliIgotICBmaQotCi1maQotCi0gIGFpeF9saWJwYXRoPSRsdF9jdl9haXhfbGlicGF0aF8KLWZpCi0KLSAgICAgICAgaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYz0nJHt3bH0tYmxpYnBhdGg6JGxpYmRpcjonIiRhaXhfbGlicGF0aCIKLSAgICAgICAgYXJjaGl2ZV9leHBzeW1fY21kcz0nJENDIC1vICRvdXRwdXRfb2JqZGlyLyRzb25hbWUgJGxpYm9ianMgJGRlcGxpYnMgJyJcJHt3bH0kbm9fZW50cnlfZmxhZyInICRjb21waWxlcl9mbGFncyBgaWYgdGVzdCAieCR7YWxsb3dfdW5kZWZpbmVkX2ZsYWd9IiAhPSAieCI7IHRoZW4gZnVuY19lY2hvX2FsbCAiJHt3bH0ke2FsbG93X3VuZGVmaW5lZF9mbGFnfSI7IGVsc2UgOjsgZmlgICciXCR7d2x9JGV4cF9zeW1fZmxhZzpcJGV4cG9ydF9zeW1ib2xzICRzaGFyZWRfZmxhZyIKLSAgICAgIGVsc2UKLQlpZiB0ZXN0ICIkaG9zdF9jcHUiID0gaWE2NDsgdGhlbgotCSAgaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYz0nJHt3bH0tUiAkbGliZGlyOi91c3IvbGliOi9saWInCi0JICBhbGxvd191bmRlZmluZWRfZmxhZz0iLXogbm9kZWZzIgotCSAgYXJjaGl2ZV9leHBzeW1fY21kcz0iXCRDQyAkc2hhcmVkX2ZsYWciJyAtbyAkb3V0cHV0X29iamRpci8kc29uYW1lICRsaWJvYmpzICRkZXBsaWJzICciXCR7d2x9JG5vX2VudHJ5X2ZsYWciJyAkY29tcGlsZXJfZmxhZ3MgJHt3bH0ke2FsbG93X3VuZGVmaW5lZF9mbGFnfSAnIlwke3dsfSRleHBfc3ltX2ZsYWc6XCRleHBvcnRfc3ltYm9scyIKLQllbHNlCi0JICMgRGV0ZXJtaW5lIHRoZSBkZWZhdWx0IGxpYnBhdGggZnJvbSB0aGUgdmFsdWUgZW5jb2RlZCBpbiBhbgotCSAjIGVtcHR5IGV4ZWN1dGFibGUuCi0JIGlmIHRlc3QgIiR7bHRfY3ZfYWl4X2xpYnBhdGgrc2V0fSIgPSBzZXQ7IHRoZW4KLSAgYWl4X2xpYnBhdGg9JGx0X2N2X2FpeF9saWJwYXRoCi1lbHNlCi0gIGlmICR7bHRfY3ZfYWl4X2xpYnBhdGhfKzp9IGZhbHNlOyB0aGVuIDoKLSAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKLWVsc2UKLSAgY2F0IGNvbmZkZWZzLmggLSA8PF9BQ0VPRiA+Y29uZnRlc3QuJGFjX2V4dAotLyogZW5kIGNvbmZkZWZzLmguICAqLwotCi1pbnQKLW1haW4gKCkKLXsKLQotICA7Ci0gIHJldHVybiAwOwotfQotX0FDRU9GCi1pZiBhY19mbl9jX3RyeV9saW5rICIkTElORU5PIjsgdGhlbiA6Ci0KLSAgbHRfYWl4X2xpYnBhdGhfc2VkPScKLSAgICAgIC9JbXBvcnQgRmlsZSBTdHJpbmdzLywvXiQvIHsKLQkgIC9eMC8gewotCSAgICAgIHMvXjAgICpcKFteIF0qXCkgKiQvXDEvCi0JICAgICAgcAotCSAgfQotICAgICAgfScKLSAgbHRfY3ZfYWl4X2xpYnBhdGhfPWBkdW1wIC1IIGNvbmZ0ZXN0JGFjX2V4ZWV4dCAyPi9kZXYvbnVsbCB8ICRTRUQgLW4gLWUgIiRsdF9haXhfbGlicGF0aF9zZWQiYAotICAjIENoZWNrIGZvciBhIDY0LWJpdCBvYmplY3QgaWYgd2UgZGlkbid0IGZpbmQgYW55dGhpbmcuCi0gIGlmIHRlc3QgLXogIiRsdF9jdl9haXhfbGlicGF0aF8iOyB0aGVuCi0gICAgbHRfY3ZfYWl4X2xpYnBhdGhfPWBkdW1wIC1IWDY0IGNvbmZ0ZXN0JGFjX2V4ZWV4dCAyPi9kZXYvbnVsbCB8ICRTRUQgLW4gLWUgIiRsdF9haXhfbGlicGF0aF9zZWQiYAotICBmaQotZmkKLXJtIC1mIGNvcmUgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgXAotICAgIGNvbmZ0ZXN0JGFjX2V4ZWV4dCBjb25mdGVzdC4kYWNfZXh0Ci0gIGlmIHRlc3QgLXogIiRsdF9jdl9haXhfbGlicGF0aF8iOyB0aGVuCi0gICAgbHRfY3ZfYWl4X2xpYnBhdGhfPSIvdXNyL2xpYjovbGliIgotICBmaQotCi1maQotCi0gIGFpeF9saWJwYXRoPSRsdF9jdl9haXhfbGlicGF0aF8KLWZpCi0KLQkgaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYz0nJHt3bH0tYmxpYnBhdGg6JGxpYmRpcjonIiRhaXhfbGlicGF0aCIKLQkgICMgV2FybmluZyAtIHdpdGhvdXQgdXNpbmcgdGhlIG90aGVyIHJ1biB0aW1lIGxvYWRpbmcgZmxhZ3MsCi0JICAjIC1iZXJvayB3aWxsIGxpbmsgd2l0aG91dCBlcnJvciwgYnV0IG1heSBwcm9kdWNlIGEgYnJva2VuIGxpYnJhcnkuCi0JICBub191bmRlZmluZWRfZmxhZz0nICR7d2x9LWJlcm5vdG9rJwotCSAgYWxsb3dfdW5kZWZpbmVkX2ZsYWc9JyAke3dsfS1iZXJvaycKLQkgIGlmIHRlc3QgIiR3aXRoX2dudV9sZCIgPSB5ZXM7IHRoZW4KLQkgICAgIyBXZSBvbmx5IHVzZSB0aGlzIGNvZGUgZm9yIEdOVSBsZHMgdGhhdCBzdXBwb3J0IC0td2hvbGUtYXJjaGl2ZS4KLQkgICAgd2hvbGVfYXJjaGl2ZV9mbGFnX3NwZWM9JyR7d2x9LS13aG9sZS1hcmNoaXZlJGNvbnZlbmllbmNlICR7d2x9LS1uby13aG9sZS1hcmNoaXZlJwotCSAgZWxzZQotCSAgICAjIEV4cG9ydGVkIHN5bWJvbHMgY2FuIGJlIHB1bGxlZCBpbnRvIHNoYXJlZCBvYmplY3RzIGZyb20gYXJjaGl2ZXMKLQkgICAgd2hvbGVfYXJjaGl2ZV9mbGFnX3NwZWM9JyRjb252ZW5pZW5jZScKLQkgIGZpCi0JICBhcmNoaXZlX2NtZHNfbmVlZF9sYz15ZXMKLQkgICMgVGhpcyBpcyBzaW1pbGFyIHRvIGhvdyBBSVggdHJhZGl0aW9uYWxseSBidWlsZHMgaXRzIHNoYXJlZCBsaWJyYXJpZXMuCi0JICBhcmNoaXZlX2V4cHN5bV9jbWRzPSJcJENDICRzaGFyZWRfZmxhZyInIC1vICRvdXRwdXRfb2JqZGlyLyRzb25hbWUgJGxpYm9ianMgJGRlcGxpYnMgJHt3bH0tYm5vZW50cnkgJGNvbXBpbGVyX2ZsYWdzICR7d2x9LWJFOiRleHBvcnRfc3ltYm9scyR7YWxsb3dfdW5kZWZpbmVkX2ZsYWd9fiRBUiAkQVJfRkxBR1MgJG91dHB1dF9vYmpkaXIvJGxpYm5hbWUkcmVsZWFzZS5hICRvdXRwdXRfb2JqZGlyLyRzb25hbWUnCi0JZmkKLSAgICAgIGZpCi0gICAgICA7OwotCi0gICAgYW1pZ2FvcyopCi0gICAgICBjYXNlICRob3N0X2NwdSBpbgotICAgICAgcG93ZXJwYykKLSAgICAgICAgICAgICMgc2VlIGNvbW1lbnQgYWJvdXQgQW1pZ2FPUzQgLnNvIHN1cHBvcnQKLSAgICAgICAgICAgIGFyY2hpdmVfY21kcz0nJENDIC1zaGFyZWQgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzICR7d2x9LXNvbmFtZSAkd2wkc29uYW1lIC1vICRsaWInCi0gICAgICAgICAgICBhcmNoaXZlX2V4cHN5bV9jbWRzPScnCi0gICAgICAgIDs7Ci0gICAgICBtNjhrKQotICAgICAgICAgICAgYXJjaGl2ZV9jbWRzPSckUk0gJG91dHB1dF9vYmpkaXIvYTJpeGxpYnJhcnkuZGF0YX4kRUNITyAiI2RlZmluZSBOQU1FICRsaWJuYW1lIiA+ICRvdXRwdXRfb2JqZGlyL2EyaXhsaWJyYXJ5LmRhdGF+JEVDSE8gIiNkZWZpbmUgTElCUkFSWV9JRCAxIiA+PiAkb3V0cHV0X29iamRpci9hMml4bGlicmFyeS5kYXRhfiRFQ0hPICIjZGVmaW5lIFZFUlNJT04gJG1ham9yIiA+PiAkb3V0cHV0X29iamRpci9hMml4bGlicmFyeS5kYXRhfiRFQ0hPICIjZGVmaW5lIFJFVklTSU9OICRyZXZpc2lvbiIgPj4gJG91dHB1dF9vYmpkaXIvYTJpeGxpYnJhcnkuZGF0YX4kQVIgJEFSX0ZMQUdTICRsaWIgJGxpYm9ianN+JFJBTkxJQiAkbGlifihjZCAkb3V0cHV0X29iamRpciAmJiBhMml4bGlicmFyeSAtMzIpJwotICAgICAgICAgICAgaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYz0nLUwkbGliZGlyJwotICAgICAgICAgICAgaGFyZGNvZGVfbWludXNfTD15ZXMKLSAgICAgICAgOzsKLSAgICAgIGVzYWMKLSAgICAgIDs7Ci0KLSAgICBic2RpWzQ1XSopCi0gICAgICBleHBvcnRfZHluYW1pY19mbGFnX3NwZWM9LXJkeW5hbWljCi0gICAgICA7OwotCi0gICAgY3lnd2luKiB8IG1pbmd3KiB8IHB3MzIqIHwgY2VnY2MqKQotICAgICAgIyBXaGVuIG5vdCB1c2luZyBnY2MsIHdlIGN1cnJlbnRseSBhc3N1bWUgdGhhdCB3ZSBhcmUgdXNpbmcKLSAgICAgICMgTWljcm9zb2Z0IFZpc3VhbCBDKysuCi0gICAgICAjIGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWMgaXMgYWN0dWFsbHkgbWVhbmluZ2xlc3MsIGFzIHRoZXJlIGlzCi0gICAgICAjIG5vIHNlYXJjaCBwYXRoIGZvciBETExzLgotICAgICAgY2FzZSAkY2NfYmFzZW5hbWUgaW4KLSAgICAgIGNsKikKLQkjIE5hdGl2ZSBNU1ZDCi0JaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYz0nICcKLQlhbGxvd191bmRlZmluZWRfZmxhZz11bnN1cHBvcnRlZAotCWFsd2F5c19leHBvcnRfc3ltYm9scz15ZXMKLQlmaWxlX2xpc3Rfc3BlYz0nQCcKLQkjIFRlbGwgbHRtYWluIHRvIG1ha2UgLmxpYiBmaWxlcywgbm90IC5hIGZpbGVzLgotCWxpYmV4dD1saWIKLQkjIFRlbGwgbHRtYWluIHRvIG1ha2UgLmRsbCBmaWxlcywgbm90IC5zbyBmaWxlcy4KLQlzaHJleHRfY21kcz0iLmRsbCIKLQkjIEZJWE1FOiBTZXR0aW5nIGxpbmtuYW1lcyBoZXJlIGlzIGEgYmFkIGhhY2suCi0JYXJjaGl2ZV9jbWRzPSckQ0MgLW8gJG91dHB1dF9vYmpkaXIvJHNvbmFtZSAkbGlib2JqcyAkY29tcGlsZXJfZmxhZ3MgJGRlcGxpYnMgLVdsLC1kbGx+bGlua25hbWVzPScKLQlhcmNoaXZlX2V4cHN5bV9jbWRzPSdpZiB0ZXN0ICJ4YCRTRUQgMXEgJGV4cG9ydF9zeW1ib2xzYCIgPSB4RVhQT1JUUzsgdGhlbgotCSAgICBzZWQgLW4gLWUgJ3MvXFxcXFxcXCguKlxcXFxcXFwpLy1saW5rXFxcIC1FWFBPUlQ6XFxcXFxcXDEvJyAtZSAnMVxcXCFwJyA8ICRleHBvcnRfc3ltYm9scyA+ICRvdXRwdXRfb2JqZGlyLyRzb25hbWUuZXhwOwotCSAgZWxzZQotCSAgICBzZWQgLWUgJ3MvXFxcXFxcXCguKlxcXFxcXFwpLy1saW5rXFxcIC1FWFBPUlQ6XFxcXFxcXDEvJyA8ICRleHBvcnRfc3ltYm9scyA+ICRvdXRwdXRfb2JqZGlyLyRzb25hbWUuZXhwOwotCSAgZml+Ci0JICAkQ0MgLW8gJHRvb2xfb3V0cHV0X29iamRpciRzb25hbWUgJGxpYm9ianMgJGNvbXBpbGVyX2ZsYWdzICRkZXBsaWJzICJAJHRvb2xfb3V0cHV0X29iamRpciRzb25hbWUuZXhwIiAtV2wsLURMTCwtSU1QTElCOiIkdG9vbF9vdXRwdXRfb2JqZGlyJGxpYm5hbWUuZGxsLmxpYiJ+Ci0JICBsaW5rbmFtZXM9JwotCSMgVGhlIGxpbmtlciB3aWxsIG5vdCBhdXRvbWF0aWNhbGx5IGJ1aWxkIGEgc3RhdGljIGxpYiBpZiB3ZSBidWlsZCBhIERMTC4KLQkjIF9MVF9UQUdWQVIob2xkX2FyY2hpdmVfZnJvbV9uZXdfY21kcywgKT0ndHJ1ZScKLQllbmFibGVfc2hhcmVkX3dpdGhfc3RhdGljX3J1bnRpbWVzPXllcwotCWV4cG9ydF9zeW1ib2xzX2NtZHM9JyROTSAkbGlib2JqcyAkY29udmVuaWVuY2UgfCAkZ2xvYmFsX3N5bWJvbF9waXBlIHwgJFNFRCAtZSAnXCcnL15bQkNER1JTXVsgXS9zLy4qWyBdXChbXiBdKlwpL1wxLERBVEEvJ1wnJyB8ICRTRUQgLWUgJ1wnJy9eW0FJVFddWyBdL3MvLipbIF0vLydcJycgfCBzb3J0IHwgdW5pcSA+ICRleHBvcnRfc3ltYm9scycKLQkjIERvbid0IHVzZSByYW5saWIKLQlvbGRfcG9zdGluc3RhbGxfY21kcz0nY2htb2QgNjQ0ICRvbGRsaWInCi0JcG9zdGxpbmtfY21kcz0nbHRfb3V0cHV0ZmlsZT0iQE9VVFBVVEAifgotCSAgbHRfdG9vbF9vdXRwdXRmaWxlPSJAVE9PTF9PVVRQVVRAIn4KLQkgIGNhc2UgJGx0X291dHB1dGZpbGUgaW4KLQkgICAgKi5leGV8Ki5FWEUpIDs7Ci0JICAgICopCi0JICAgICAgbHRfb3V0cHV0ZmlsZT0iJGx0X291dHB1dGZpbGUuZXhlIgotCSAgICAgIGx0X3Rvb2xfb3V0cHV0ZmlsZT0iJGx0X3Rvb2xfb3V0cHV0ZmlsZS5leGUiCi0JICAgICAgOzsKLQkgIGVzYWN+Ci0JICBpZiB0ZXN0ICIkTUFOSUZFU1RfVE9PTCIgIT0gIjoiICYmIHRlc3QgLWYgIiRsdF9vdXRwdXRmaWxlLm1hbmlmZXN0IjsgdGhlbgotCSAgICAkTUFOSUZFU1RfVE9PTCAtbWFuaWZlc3QgIiRsdF90b29sX291dHB1dGZpbGUubWFuaWZlc3QiIC1vdXRwdXRyZXNvdXJjZToiJGx0X3Rvb2xfb3V0cHV0ZmlsZSIgfHwgZXhpdCAxOwotCSAgICAkUk0gIiRsdF9vdXRwdXRmaWxlLm1hbmlmZXN0IjsKLQkgIGZpJwotCTs7Ci0gICAgICAqKQotCSMgQXNzdW1lIE1TVkMgd3JhcHBlcgotCWhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWM9JyAnCi0JYWxsb3dfdW5kZWZpbmVkX2ZsYWc9dW5zdXBwb3J0ZWQKLQkjIFRlbGwgbHRtYWluIHRvIG1ha2UgLmxpYiBmaWxlcywgbm90IC5hIGZpbGVzLgotCWxpYmV4dD1saWIKLQkjIFRlbGwgbHRtYWluIHRvIG1ha2UgLmRsbCBmaWxlcywgbm90IC5zbyBmaWxlcy4KLQlzaHJleHRfY21kcz0iLmRsbCIKLQkjIEZJWE1FOiBTZXR0aW5nIGxpbmtuYW1lcyBoZXJlIGlzIGEgYmFkIGhhY2suCi0JYXJjaGl2ZV9jbWRzPSckQ0MgLW8gJGxpYiAkbGlib2JqcyAkY29tcGlsZXJfZmxhZ3MgYGZ1bmNfZWNob19hbGwgIiRkZXBsaWJzIiB8ICRTRUQgJ1wnJ3MvIC1sYyQvLydcJydgIC1saW5rIC1kbGx+bGlua25hbWVzPScKLQkjIFRoZSBsaW5rZXIgd2lsbCBhdXRvbWF0aWNhbGx5IGJ1aWxkIGEgLmxpYiBmaWxlIGlmIHdlIGJ1aWxkIGEgRExMLgotCW9sZF9hcmNoaXZlX2Zyb21fbmV3X2NtZHM9J3RydWUnCi0JIyBGSVhNRTogU2hvdWxkIGxldCB0aGUgdXNlciBzcGVjaWZ5IHRoZSBsaWIgcHJvZ3JhbS4KLQlvbGRfYXJjaGl2ZV9jbWRzPSdsaWIgLU9VVDokb2xkbGliJG9sZG9ianMkb2xkX2RlcGxpYnMnCi0JZW5hYmxlX3NoYXJlZF93aXRoX3N0YXRpY19ydW50aW1lcz15ZXMKLQk7OwotICAgICAgZXNhYwotICAgICAgOzsKLQotICAgIGRhcndpbiogfCByaGFwc29keSopCi0KLQotICBhcmNoaXZlX2NtZHNfbmVlZF9sYz1ubwotICBoYXJkY29kZV9kaXJlY3Q9bm8KLSAgaGFyZGNvZGVfYXV0b21hdGljPXllcwotICBoYXJkY29kZV9zaGxpYnBhdGhfdmFyPXVuc3VwcG9ydGVkCi0gIGlmIHRlc3QgIiRsdF9jdl9sZF9mb3JjZV9sb2FkIiA9ICJ5ZXMiOyB0aGVuCi0gICAgd2hvbGVfYXJjaGl2ZV9mbGFnX3NwZWM9J2Bmb3IgY29udiBpbiAkY29udmVuaWVuY2VcIlwiOyBkbyB0ZXN0ICAtbiBcIiRjb252XCIgJiYgbmV3X2NvbnZlbmllbmNlPVwiJG5ld19jb252ZW5pZW5jZSAke3dsfS1mb3JjZV9sb2FkLCRjb252XCI7IGRvbmU7IGZ1bmNfZWNob19hbGwgXCIkbmV3X2NvbnZlbmllbmNlXCJgJwotICBlbHNlCi0gICAgd2hvbGVfYXJjaGl2ZV9mbGFnX3NwZWM9JycKLSAgZmkKLSAgbGlua19hbGxfZGVwbGlicz15ZXMKLSAgYWxsb3dfdW5kZWZpbmVkX2ZsYWc9IiRfbHRfZGFyX2FsbG93X3VuZGVmaW5lZCIKLSAgY2FzZSAkY2NfYmFzZW5hbWUgaW4KLSAgICAgaWZvcnQqKSBfbHRfZGFyX2Nhbl9zaGFyZWQ9eWVzIDs7Ci0gICAgICopIF9sdF9kYXJfY2FuX3NoYXJlZD0kR0NDIDs7Ci0gIGVzYWMKLSAgaWYgdGVzdCAiJF9sdF9kYXJfY2FuX3NoYXJlZCIgPSAieWVzIjsgdGhlbgotICAgIG91dHB1dF92ZXJib3NlX2xpbmtfY21kPWZ1bmNfZWNob19hbGwKLSAgICBhcmNoaXZlX2NtZHM9IlwkQ0MgLWR5bmFtaWNsaWIgXCRhbGxvd191bmRlZmluZWRfZmxhZyAtbyBcJGxpYiBcJGxpYm9ianMgXCRkZXBsaWJzIFwkY29tcGlsZXJfZmxhZ3MgLWluc3RhbGxfbmFtZSBcJHJwYXRoL1wkc29uYW1lIFwkdmVyc3RyaW5nICRfbHRfZGFyX3NpbmdsZV9tb2Qke19sdF9kc3ltdXRpbH0iCi0gICAgbW9kdWxlX2NtZHM9IlwkQ0MgXCRhbGxvd191bmRlZmluZWRfZmxhZyAtbyBcJGxpYiAtYnVuZGxlIFwkbGlib2JqcyBcJGRlcGxpYnMgXCRjb21waWxlcl9mbGFncyR7X2x0X2RzeW11dGlsfSIKLSAgICBhcmNoaXZlX2V4cHN5bV9jbWRzPSJzZWQgJ3MsXixfLCcgPCBcJGV4cG9ydF9zeW1ib2xzID4gXCRvdXRwdXRfb2JqZGlyL1wke2xpYm5hbWV9LXN5bWJvbHMuZXhwc3ltflwkQ0MgLWR5bmFtaWNsaWIgXCRhbGxvd191bmRlZmluZWRfZmxhZyAtbyBcJGxpYiBcJGxpYm9ianMgXCRkZXBsaWJzIFwkY29tcGlsZXJfZmxhZ3MgLWluc3RhbGxfbmFtZSBcJHJwYXRoL1wkc29uYW1lIFwkdmVyc3RyaW5nICR7X2x0X2Rhcl9zaW5nbGVfbW9kfSR7X2x0X2Rhcl9leHBvcnRfc3ltc30ke19sdF9kc3ltdXRpbH0iCi0gICAgbW9kdWxlX2V4cHN5bV9jbWRzPSJzZWQgLWUgJ3MsXixfLCcgPCBcJGV4cG9ydF9zeW1ib2xzID4gXCRvdXRwdXRfb2JqZGlyL1wke2xpYm5hbWV9LXN5bWJvbHMuZXhwc3ltflwkQ0MgXCRhbGxvd191bmRlZmluZWRfZmxhZyAtbyBcJGxpYiAtYnVuZGxlIFwkbGlib2JqcyBcJGRlcGxpYnMgXCRjb21waWxlcl9mbGFncyR7X2x0X2Rhcl9leHBvcnRfc3ltc30ke19sdF9kc3ltdXRpbH0iCi0KLSAgZWxzZQotICBsZF9zaGxpYnM9bm8KLSAgZmkKLQotICAgICAgOzsKLQotICAgIGRndXgqKQotICAgICAgYXJjaGl2ZV9jbWRzPSckTEQgLUcgLWggJHNvbmFtZSAtbyAkbGliICRsaWJvYmpzICRkZXBsaWJzICRsaW5rZXJfZmxhZ3MnCi0gICAgICBoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjPSctTCRsaWJkaXInCi0gICAgICBoYXJkY29kZV9zaGxpYnBhdGhfdmFyPW5vCi0gICAgICA7OwotCi0gICAgZnJlZWJzZDEqKQotICAgICAgbGRfc2hsaWJzPW5vCi0gICAgICA7OwotCi0gICAgIyBGcmVlQlNEIDIuMi5bMDEyXSBhbGxvd3MgdXMgdG8gaW5jbHVkZSBjKytydDAubyB0byBnZXQgQysrIGNvbnN0cnVjdG9yCi0gICAgIyBzdXBwb3J0LiAgRnV0dXJlIHZlcnNpb25zIGRvIHRoaXMgYXV0b21hdGljYWxseSwgYnV0IGFuIGV4cGxpY2l0IGMrK3J0MC5vCi0gICAgIyBkb2VzIG5vdCBicmVhayBhbnl0aGluZywgYW5kIGhlbHBzIHNpZ25pZmljYW50bHkgKGF0IHRoZSBjb3N0IG9mIGEgbGl0dGxlCi0gICAgIyBleHRyYSBzcGFjZSkuCi0gICAgZnJlZWJzZDIuMiopCi0gICAgICBhcmNoaXZlX2NtZHM9JyRMRCAtQnNoYXJlYWJsZSAtbyAkbGliICRsaWJvYmpzICRkZXBsaWJzICRsaW5rZXJfZmxhZ3MgL3Vzci9saWIvYysrcnQwLm8nCi0gICAgICBoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjPSctUiRsaWJkaXInCi0gICAgICBoYXJkY29kZV9kaXJlY3Q9eWVzCi0gICAgICBoYXJkY29kZV9zaGxpYnBhdGhfdmFyPW5vCi0gICAgICA7OwotCi0gICAgIyBVbmZvcnR1bmF0ZWx5LCBvbGRlciB2ZXJzaW9ucyBvZiBGcmVlQlNEIDIgZG8gbm90IGhhdmUgdGhpcyBmZWF0dXJlLgotICAgIGZyZWVic2QyKikKLSAgICAgIGFyY2hpdmVfY21kcz0nJExEIC1Cc2hhcmVhYmxlIC1vICRsaWIgJGxpYm9ianMgJGRlcGxpYnMgJGxpbmtlcl9mbGFncycKLSAgICAgIGhhcmRjb2RlX2RpcmVjdD15ZXMKLSAgICAgIGhhcmRjb2RlX21pbnVzX0w9eWVzCi0gICAgICBoYXJkY29kZV9zaGxpYnBhdGhfdmFyPW5vCi0gICAgICA7OwotCi0gICAgIyBGcmVlQlNEIDMgYW5kIGdyZWF0ZXIgdXNlcyBnY2MgLXNoYXJlZCB0byBkbyBzaGFyZWQgbGlicmFyaWVzLgotICAgIGZyZWVic2QqIHwgZHJhZ29uZmx5KikKLSAgICAgIGFyY2hpdmVfY21kcz0nJENDIC1zaGFyZWQgJHBpY19mbGFnIC1vICRsaWIgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzJwotICAgICAgaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYz0nLVIkbGliZGlyJwotICAgICAgaGFyZGNvZGVfZGlyZWN0PXllcwotICAgICAgaGFyZGNvZGVfc2hsaWJwYXRoX3Zhcj1ubwotICAgICAgOzsKLQotICAgIGhwdXg5KikKLSAgICAgIGlmIHRlc3QgIiRHQ0MiID0geWVzOyB0aGVuCi0JYXJjaGl2ZV9jbWRzPSckUk0gJG91dHB1dF9vYmpkaXIvJHNvbmFtZX4kQ0MgLXNoYXJlZCAkcGljX2ZsYWcgJHt3bH0rYiAke3dsfSRpbnN0YWxsX2xpYmRpciAtbyAkb3V0cHV0X29iamRpci8kc29uYW1lICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFnc350ZXN0ICRvdXRwdXRfb2JqZGlyLyRzb25hbWUgPSAkbGliIHx8IG12ICRvdXRwdXRfb2JqZGlyLyRzb25hbWUgJGxpYicKLSAgICAgIGVsc2UKLQlhcmNoaXZlX2NtZHM9JyRSTSAkb3V0cHV0X29iamRpci8kc29uYW1lfiRMRCAtYiArYiAkaW5zdGFsbF9saWJkaXIgLW8gJG91dHB1dF9vYmpkaXIvJHNvbmFtZSAkbGlib2JqcyAkZGVwbGlicyAkbGlua2VyX2ZsYWdzfnRlc3QgJG91dHB1dF9vYmpkaXIvJHNvbmFtZSA9ICRsaWIgfHwgbXYgJG91dHB1dF9vYmpkaXIvJHNvbmFtZSAkbGliJwotICAgICAgZmkKLSAgICAgIGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWM9JyR7d2x9K2IgJHt3bH0kbGliZGlyJwotICAgICAgaGFyZGNvZGVfbGliZGlyX3NlcGFyYXRvcj06Ci0gICAgICBoYXJkY29kZV9kaXJlY3Q9eWVzCi0KLSAgICAgICMgaGFyZGNvZGVfbWludXNfTDogTm90IHJlYWxseSBpbiB0aGUgc2VhcmNoIFBBVEgsCi0gICAgICAjIGJ1dCBhcyB0aGUgZGVmYXVsdCBsb2NhdGlvbiBvZiB0aGUgbGlicmFyeS4KLSAgICAgIGhhcmRjb2RlX21pbnVzX0w9eWVzCi0gICAgICBleHBvcnRfZHluYW1pY19mbGFnX3NwZWM9JyR7d2x9LUUnCi0gICAgICA7OwotCi0gICAgaHB1eDEwKikKLSAgICAgIGlmIHRlc3QgIiRHQ0MiID0geWVzICYmIHRlc3QgIiR3aXRoX2dudV9sZCIgPSBubzsgdGhlbgotCWFyY2hpdmVfY21kcz0nJENDIC1zaGFyZWQgJHBpY19mbGFnICR7d2x9K2ggJHt3bH0kc29uYW1lICR7d2x9K2IgJHt3bH0kaW5zdGFsbF9saWJkaXIgLW8gJGxpYiAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MnCi0gICAgICBlbHNlCi0JYXJjaGl2ZV9jbWRzPSckTEQgLWIgK2ggJHNvbmFtZSArYiAkaW5zdGFsbF9saWJkaXIgLW8gJGxpYiAkbGlib2JqcyAkZGVwbGlicyAkbGlua2VyX2ZsYWdzJwotICAgICAgZmkKLSAgICAgIGlmIHRlc3QgIiR3aXRoX2dudV9sZCIgPSBubzsgdGhlbgotCWhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWM9JyR7d2x9K2IgJHt3bH0kbGliZGlyJwotCWhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWNfbGQ9JytiICRsaWJkaXInCi0JaGFyZGNvZGVfbGliZGlyX3NlcGFyYXRvcj06Ci0JaGFyZGNvZGVfZGlyZWN0PXllcwotCWhhcmRjb2RlX2RpcmVjdF9hYnNvbHV0ZT15ZXMKLQlleHBvcnRfZHluYW1pY19mbGFnX3NwZWM9JyR7d2x9LUUnCi0JIyBoYXJkY29kZV9taW51c19MOiBOb3QgcmVhbGx5IGluIHRoZSBzZWFyY2ggUEFUSCwKLQkjIGJ1dCBhcyB0aGUgZGVmYXVsdCBsb2NhdGlvbiBvZiB0aGUgbGlicmFyeS4KLQloYXJkY29kZV9taW51c19MPXllcwotICAgICAgZmkKLSAgICAgIDs7Ci0KLSAgICBocHV4MTEqKQotICAgICAgaWYgdGVzdCAiJEdDQyIgPSB5ZXMgJiYgdGVzdCAiJHdpdGhfZ251X2xkIiA9IG5vOyB0aGVuCi0JY2FzZSAkaG9zdF9jcHUgaW4KLQlocHBhKjY0KikKLQkgIGFyY2hpdmVfY21kcz0nJENDIC1zaGFyZWQgJHt3bH0raCAke3dsfSRzb25hbWUgLW8gJGxpYiAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MnCi0JICA7OwotCWlhNjQqKQotCSAgYXJjaGl2ZV9jbWRzPSckQ0MgLXNoYXJlZCAkcGljX2ZsYWcgJHt3bH0raCAke3dsfSRzb25hbWUgJHt3bH0rbm9kZWZhdWx0cnBhdGggLW8gJGxpYiAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MnCi0JICA7OwotCSopCi0JICBhcmNoaXZlX2NtZHM9JyRDQyAtc2hhcmVkICRwaWNfZmxhZyAke3dsfStoICR7d2x9JHNvbmFtZSAke3dsfStiICR7d2x9JGluc3RhbGxfbGliZGlyIC1vICRsaWIgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzJwotCSAgOzsKLQllc2FjCi0gICAgICBlbHNlCi0JY2FzZSAkaG9zdF9jcHUgaW4KLQlocHBhKjY0KikKLQkgIGFyY2hpdmVfY21kcz0nJENDIC1iICR7d2x9K2ggJHt3bH0kc29uYW1lIC1vICRsaWIgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzJwotCSAgOzsKLQlpYTY0KikKLQkgIGFyY2hpdmVfY21kcz0nJENDIC1iICR7d2x9K2ggJHt3bH0kc29uYW1lICR7d2x9K25vZGVmYXVsdHJwYXRoIC1vICRsaWIgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzJwotCSAgOzsKLQkqKQotCi0JICAjIE9sZGVyIHZlcnNpb25zIG9mIHRoZSAxMS4wMCBjb21waWxlciBkbyBub3QgdW5kZXJzdGFuZCAtYiB5ZXQKLQkgICMgKEhQOTI0NTMtMDEgQS4xMS4wMS4yMCBkb2Vzbid0LCBIUDkyNDUzLTAxIEIuMTEuWC4zNTE3NS0zNTE3Ni5HUCBkb2VzKQotCSAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBpZiAkQ0MgdW5kZXJzdGFuZHMgLWIiID4mNQotJGFzX2VjaG9fbiAiY2hlY2tpbmcgaWYgJENDIHVuZGVyc3RhbmRzIC1iLi4uICIgPiY2OyB9Ci1pZiAke2x0X2N2X3Byb2dfY29tcGlsZXJfX2IrOn0gZmFsc2U7IHRoZW4gOgotICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgotZWxzZQotICBsdF9jdl9wcm9nX2NvbXBpbGVyX19iPW5vCi0gICBzYXZlX0xERkxBR1M9IiRMREZMQUdTIgotICAgTERGTEFHUz0iJExERkxBR1MgLWIiCi0gICBlY2hvICIkbHRfc2ltcGxlX2xpbmtfdGVzdF9jb2RlIiA+IGNvbmZ0ZXN0LiRhY19leHQKLSAgIGlmIChldmFsICRhY19saW5rIDI+Y29uZnRlc3QuZXJyKSAmJiB0ZXN0IC1zIGNvbmZ0ZXN0JGFjX2V4ZWV4dDsgdGhlbgotICAgICAjIFRoZSBsaW5rZXIgY2FuIG9ubHkgd2FybiBhbmQgaWdub3JlIHRoZSBvcHRpb24gaWYgbm90IHJlY29nbml6ZWQKLSAgICAgIyBTbyBzYXkgbm8gaWYgdGhlcmUgYXJlIHdhcm5pbmdzCi0gICAgIGlmIHRlc3QgLXMgY29uZnRlc3QuZXJyOyB0aGVuCi0gICAgICAgIyBBcHBlbmQgYW55IGVycm9ycyB0byB0aGUgY29uZmlnLmxvZy4KLSAgICAgICBjYXQgY29uZnRlc3QuZXJyIDE+JjUKLSAgICAgICAkRUNITyAiJF9sdF9saW5rZXJfYm9pbGVycGxhdGUiIHwgJFNFRCAnL14kL2QnID4gY29uZnRlc3QuZXhwCi0gICAgICAgJFNFRCAnL14kL2Q7IC9eICorL2QnIGNvbmZ0ZXN0LmVyciA+Y29uZnRlc3QuZXIyCi0gICAgICAgaWYgZGlmZiBjb25mdGVzdC5leHAgY29uZnRlc3QuZXIyID4vZGV2L251bGw7IHRoZW4KLSAgICAgICAgIGx0X2N2X3Byb2dfY29tcGlsZXJfX2I9eWVzCi0gICAgICAgZmkKLSAgICAgZWxzZQotICAgICAgIGx0X2N2X3Byb2dfY29tcGlsZXJfX2I9eWVzCi0gICAgIGZpCi0gICBmaQotICAgJFJNIC1yIGNvbmZ0ZXN0KgotICAgTERGTEFHUz0iJHNhdmVfTERGTEFHUyIKLQotZmkKLXsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkbHRfY3ZfcHJvZ19jb21waWxlcl9fYiIgPiY1Ci0kYXNfZWNobyAiJGx0X2N2X3Byb2dfY29tcGlsZXJfX2IiID4mNjsgfQotCi1pZiB0ZXN0IHgiJGx0X2N2X3Byb2dfY29tcGlsZXJfX2IiID0geHllczsgdGhlbgotICAgIGFyY2hpdmVfY21kcz0nJENDIC1iICR7d2x9K2ggJHt3bH0kc29uYW1lICR7d2x9K2IgJHt3bH0kaW5zdGFsbF9saWJkaXIgLW8gJGxpYiAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MnCi1lbHNlCi0gICAgYXJjaGl2ZV9jbWRzPSckTEQgLWIgK2ggJHNvbmFtZSArYiAkaW5zdGFsbF9saWJkaXIgLW8gJGxpYiAkbGlib2JqcyAkZGVwbGlicyAkbGlua2VyX2ZsYWdzJwotZmkKLQotCSAgOzsKLQllc2FjCi0gICAgICBmaQotICAgICAgaWYgdGVzdCAiJHdpdGhfZ251X2xkIiA9IG5vOyB0aGVuCi0JaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYz0nJHt3bH0rYiAke3dsfSRsaWJkaXInCi0JaGFyZGNvZGVfbGliZGlyX3NlcGFyYXRvcj06Ci0KLQljYXNlICRob3N0X2NwdSBpbgotCWhwcGEqNjQqfGlhNjQqKQotCSAgaGFyZGNvZGVfZGlyZWN0PW5vCi0JICBoYXJkY29kZV9zaGxpYnBhdGhfdmFyPW5vCi0JICA7OwotCSopCi0JICBoYXJkY29kZV9kaXJlY3Q9eWVzCi0JICBoYXJkY29kZV9kaXJlY3RfYWJzb2x1dGU9eWVzCi0JICBleHBvcnRfZHluYW1pY19mbGFnX3NwZWM9JyR7d2x9LUUnCi0KLQkgICMgaGFyZGNvZGVfbWludXNfTDogTm90IHJlYWxseSBpbiB0aGUgc2VhcmNoIFBBVEgsCi0JICAjIGJ1dCBhcyB0aGUgZGVmYXVsdCBsb2NhdGlvbiBvZiB0aGUgbGlicmFyeS4KLQkgIGhhcmRjb2RlX21pbnVzX0w9eWVzCi0JICA7OwotCWVzYWMKLSAgICAgIGZpCi0gICAgICA7OwotCi0gICAgaXJpeDUqIHwgaXJpeDYqIHwgbm9uc3RvcHV4KikKLSAgICAgIGlmIHRlc3QgIiRHQ0MiID0geWVzOyB0aGVuCi0JYXJjaGl2ZV9jbWRzPSckQ0MgLXNoYXJlZCAkcGljX2ZsYWcgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzICR7d2x9LXNvbmFtZSAke3dsfSRzb25hbWUgYHRlc3QgLW4gIiR2ZXJzdHJpbmciICYmIGZ1bmNfZWNob19hbGwgIiR7d2x9LXNldF92ZXJzaW9uICR7d2x9JHZlcnN0cmluZyJgICR7d2x9LXVwZGF0ZV9yZWdpc3RyeSAke3dsfSR7b3V0cHV0X29iamRpcn0vc29fbG9jYXRpb25zIC1vICRsaWInCi0JIyBUcnkgdG8gdXNlIHRoZSAtZXhwb3J0ZWRfc3ltYm9sIGxkIG9wdGlvbiwgaWYgaXQgZG9lcyBub3QKLQkjIHdvcmssIGFzc3VtZSB0aGF0IC1leHBvcnRzX2ZpbGUgZG9lcyBub3Qgd29yayBlaXRoZXIgYW5kCi0JIyBpbXBsaWNpdGx5IGV4cG9ydCBhbGwgc3ltYm9scy4KLQkjIFRoaXMgc2hvdWxkIGJlIHRoZSBzYW1lIGZvciBhbGwgbGFuZ3VhZ2VzLCBzbyBubyBwZXItdGFnIGNhY2hlIHZhcmlhYmxlLgotCXsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgd2hldGhlciB0aGUgJGhvc3Rfb3MgbGlua2VyIGFjY2VwdHMgLWV4cG9ydGVkX3N5bWJvbCIgPiY1Ci0kYXNfZWNob19uICJjaGVja2luZyB3aGV0aGVyIHRoZSAkaG9zdF9vcyBsaW5rZXIgYWNjZXB0cyAtZXhwb3J0ZWRfc3ltYm9sLi4uICIgPiY2OyB9Ci1pZiAke2x0X2N2X2lyaXhfZXhwb3J0ZWRfc3ltYm9sKzp9IGZhbHNlOyB0aGVuIDoKLSAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKLWVsc2UKLSAgc2F2ZV9MREZMQUdTPSIkTERGTEFHUyIKLQkgICBMREZMQUdTPSIkTERGTEFHUyAtc2hhcmVkICR7d2x9LWV4cG9ydGVkX3N5bWJvbCAke3dsfWZvbyAke3dsfS11cGRhdGVfcmVnaXN0cnkgJHt3bH0vZGV2L251bGwiCi0JICAgY2F0IGNvbmZkZWZzLmggLSA8PF9BQ0VPRiA+Y29uZnRlc3QuJGFjX2V4dAotLyogZW5kIGNvbmZkZWZzLmguICAqLwotaW50IGZvbyAodm9pZCkgeyByZXR1cm4gMDsgfQotX0FDRU9GCi1pZiBhY19mbl9jX3RyeV9saW5rICIkTElORU5PIjsgdGhlbiA6Ci0gIGx0X2N2X2lyaXhfZXhwb3J0ZWRfc3ltYm9sPXllcwotZWxzZQotICBsdF9jdl9pcml4X2V4cG9ydGVkX3N5bWJvbD1ubwotZmkKLXJtIC1mIGNvcmUgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgXAotICAgIGNvbmZ0ZXN0JGFjX2V4ZWV4dCBjb25mdGVzdC4kYWNfZXh0Ci0gICAgICAgICAgIExERkxBR1M9IiRzYXZlX0xERkxBR1MiCi1maQoteyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRsdF9jdl9pcml4X2V4cG9ydGVkX3N5bWJvbCIgPiY1Ci0kYXNfZWNobyAiJGx0X2N2X2lyaXhfZXhwb3J0ZWRfc3ltYm9sIiA+JjY7IH0KLQlpZiB0ZXN0ICIkbHRfY3ZfaXJpeF9leHBvcnRlZF9zeW1ib2wiID0geWVzOyB0aGVuCi0gICAgICAgICAgYXJjaGl2ZV9leHBzeW1fY21kcz0nJENDIC1zaGFyZWQgJHBpY19mbGFnICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncyAke3dsfS1zb25hbWUgJHt3bH0kc29uYW1lIGB0ZXN0IC1uICIkdmVyc3RyaW5nIiAmJiBmdW5jX2VjaG9fYWxsICIke3dsfS1zZXRfdmVyc2lvbiAke3dsfSR2ZXJzdHJpbmciYCAke3dsfS11cGRhdGVfcmVnaXN0cnkgJHt3bH0ke291dHB1dF9vYmpkaXJ9L3NvX2xvY2F0aW9ucyAke3dsfS1leHBvcnRzX2ZpbGUgJHt3bH0kZXhwb3J0X3N5bWJvbHMgLW8gJGxpYicKLQlmaQotICAgICAgZWxzZQotCWFyY2hpdmVfY21kcz0nJENDIC1zaGFyZWQgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzIC1zb25hbWUgJHNvbmFtZSBgdGVzdCAtbiAiJHZlcnN0cmluZyIgJiYgZnVuY19lY2hvX2FsbCAiLXNldF92ZXJzaW9uICR2ZXJzdHJpbmciYCAtdXBkYXRlX3JlZ2lzdHJ5ICR7b3V0cHV0X29iamRpcn0vc29fbG9jYXRpb25zIC1vICRsaWInCi0JYXJjaGl2ZV9leHBzeW1fY21kcz0nJENDIC1zaGFyZWQgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzIC1zb25hbWUgJHNvbmFtZSBgdGVzdCAtbiAiJHZlcnN0cmluZyIgJiYgZnVuY19lY2hvX2FsbCAiLXNldF92ZXJzaW9uICR2ZXJzdHJpbmciYCAtdXBkYXRlX3JlZ2lzdHJ5ICR7b3V0cHV0X29iamRpcn0vc29fbG9jYXRpb25zIC1leHBvcnRzX2ZpbGUgJGV4cG9ydF9zeW1ib2xzIC1vICRsaWInCi0gICAgICBmaQotICAgICAgYXJjaGl2ZV9jbWRzX25lZWRfbGM9J25vJwotICAgICAgaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYz0nJHt3bH0tcnBhdGggJHt3bH0kbGliZGlyJwotICAgICAgaGFyZGNvZGVfbGliZGlyX3NlcGFyYXRvcj06Ci0gICAgICBpbmhlcml0X3JwYXRoPXllcwotICAgICAgbGlua19hbGxfZGVwbGlicz15ZXMKLSAgICAgIDs7Ci0KLSAgICBuZXRic2QqKQotICAgICAgaWYgZWNobyBfX0VMRl9fIHwgJENDIC1FIC0gfCAkR1JFUCBfX0VMRl9fID4vZGV2L251bGw7IHRoZW4KLQlhcmNoaXZlX2NtZHM9JyRMRCAtQnNoYXJlYWJsZSAtbyAkbGliICRsaWJvYmpzICRkZXBsaWJzICRsaW5rZXJfZmxhZ3MnICAjIGEub3V0Ci0gICAgICBlbHNlCi0JYXJjaGl2ZV9jbWRzPSckTEQgLXNoYXJlZCAtbyAkbGliICRsaWJvYmpzICRkZXBsaWJzICRsaW5rZXJfZmxhZ3MnICAgICAgIyBFTEYKLSAgICAgIGZpCi0gICAgICBoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjPSctUiRsaWJkaXInCi0gICAgICBoYXJkY29kZV9kaXJlY3Q9eWVzCi0gICAgICBoYXJkY29kZV9zaGxpYnBhdGhfdmFyPW5vCi0gICAgICA7OwotCi0gICAgbmV3c29zNikKLSAgICAgIGFyY2hpdmVfY21kcz0nJExEIC1HIC1oICRzb25hbWUgLW8gJGxpYiAkbGlib2JqcyAkZGVwbGlicyAkbGlua2VyX2ZsYWdzJwotICAgICAgaGFyZGNvZGVfZGlyZWN0PXllcwotICAgICAgaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYz0nJHt3bH0tcnBhdGggJHt3bH0kbGliZGlyJwotICAgICAgaGFyZGNvZGVfbGliZGlyX3NlcGFyYXRvcj06Ci0gICAgICBoYXJkY29kZV9zaGxpYnBhdGhfdmFyPW5vCi0gICAgICA7OwotCi0gICAgKm50byogfCAqcW54KikKLSAgICAgIDs7Ci0KLSAgICBvcGVuYnNkKikKLSAgICAgIGlmIHRlc3QgLWYgL3Vzci9saWJleGVjL2xkLnNvOyB0aGVuCi0JaGFyZGNvZGVfZGlyZWN0PXllcwotCWhhcmRjb2RlX3NobGlicGF0aF92YXI9bm8KLQloYXJkY29kZV9kaXJlY3RfYWJzb2x1dGU9eWVzCi0JaWYgdGVzdCAteiAiYGVjaG8gX19FTEZfXyB8ICRDQyAtRSAtIHwgJEdSRVAgX19FTEZfX2AiIHx8IHRlc3QgIiRob3N0X29zLSRob3N0X2NwdSIgPSAib3BlbmJzZDIuOC1wb3dlcnBjIjsgdGhlbgotCSAgYXJjaGl2ZV9jbWRzPSckQ0MgLXNoYXJlZCAkcGljX2ZsYWcgLW8gJGxpYiAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MnCi0JICBhcmNoaXZlX2V4cHN5bV9jbWRzPSckQ0MgLXNoYXJlZCAkcGljX2ZsYWcgLW8gJGxpYiAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MgJHt3bH0tcmV0YWluLXN5bWJvbHMtZmlsZSwkZXhwb3J0X3N5bWJvbHMnCi0JICBoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjPScke3dsfS1ycGF0aCwkbGliZGlyJwotCSAgZXhwb3J0X2R5bmFtaWNfZmxhZ19zcGVjPScke3dsfS1FJwotCWVsc2UKLQkgIGNhc2UgJGhvc3Rfb3MgaW4KLQkgICBvcGVuYnNkWzAxXS4qIHwgb3BlbmJzZDIuWzAtN10gfCBvcGVuYnNkMi5bMC03XS4qKQotCSAgICAgYXJjaGl2ZV9jbWRzPSckTEQgLUJzaGFyZWFibGUgLW8gJGxpYiAkbGlib2JqcyAkZGVwbGlicyAkbGlua2VyX2ZsYWdzJwotCSAgICAgaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYz0nLVIkbGliZGlyJwotCSAgICAgOzsKLQkgICAqKQotCSAgICAgYXJjaGl2ZV9jbWRzPSckQ0MgLXNoYXJlZCAkcGljX2ZsYWcgLW8gJGxpYiAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MnCi0JICAgICBoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjPScke3dsfS1ycGF0aCwkbGliZGlyJwotCSAgICAgOzsKLQkgIGVzYWMKLQlmaQotICAgICAgZWxzZQotCWxkX3NobGlicz1ubwotICAgICAgZmkKLSAgICAgIDs7Ci0KLSAgICBvczIqKQotICAgICAgaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYz0nLUwkbGliZGlyJwotICAgICAgaGFyZGNvZGVfbWludXNfTD15ZXMKLSAgICAgIGFsbG93X3VuZGVmaW5lZF9mbGFnPXVuc3VwcG9ydGVkCi0gICAgICBhcmNoaXZlX2NtZHM9JyRFQ0hPICJMSUJSQVJZICRsaWJuYW1lIElOSVRJTlNUQU5DRSIgPiAkb3V0cHV0X29iamRpci8kbGlibmFtZS5kZWZ+JEVDSE8gIkRFU0NSSVBUSU9OIFwiJGxpYm5hbWVcIiIgPj4gJG91dHB1dF9vYmpkaXIvJGxpYm5hbWUuZGVmfmVjaG8gREFUQSA+PiAkb3V0cHV0X29iamRpci8kbGlibmFtZS5kZWZ+ZWNobyAiIFNJTkdMRSBOT05TSEFSRUQiID4+ICRvdXRwdXRfb2JqZGlyLyRsaWJuYW1lLmRlZn5lY2hvIEVYUE9SVFMgPj4gJG91dHB1dF9vYmpkaXIvJGxpYm5hbWUuZGVmfmVteGV4cCAkbGlib2JqcyA+PiAkb3V0cHV0X29iamRpci8kbGlibmFtZS5kZWZ+JENDIC1aZGxsIC1aY3J0ZGxsIC1vICRsaWIgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzICRvdXRwdXRfb2JqZGlyLyRsaWJuYW1lLmRlZicKLSAgICAgIG9sZF9hcmNoaXZlX2Zyb21fbmV3X2NtZHM9J2VteGltcCAtbyAkb3V0cHV0X29iamRpci8kbGlibmFtZS5hICRvdXRwdXRfb2JqZGlyLyRsaWJuYW1lLmRlZicKLSAgICAgIDs7Ci0KLSAgICBvc2YzKikKLSAgICAgIGlmIHRlc3QgIiRHQ0MiID0geWVzOyB0aGVuCi0JYWxsb3dfdW5kZWZpbmVkX2ZsYWc9JyAke3dsfS1leHBlY3RfdW5yZXNvbHZlZCAke3dsfVwqJwotCWFyY2hpdmVfY21kcz0nJENDIC1zaGFyZWQke2FsbG93X3VuZGVmaW5lZF9mbGFnfSAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MgJHt3bH0tc29uYW1lICR7d2x9JHNvbmFtZSBgdGVzdCAtbiAiJHZlcnN0cmluZyIgJiYgZnVuY19lY2hvX2FsbCAiJHt3bH0tc2V0X3ZlcnNpb24gJHt3bH0kdmVyc3RyaW5nImAgJHt3bH0tdXBkYXRlX3JlZ2lzdHJ5ICR7d2x9JHtvdXRwdXRfb2JqZGlyfS9zb19sb2NhdGlvbnMgLW8gJGxpYicKLSAgICAgIGVsc2UKLQlhbGxvd191bmRlZmluZWRfZmxhZz0nIC1leHBlY3RfdW5yZXNvbHZlZCBcKicKLQlhcmNoaXZlX2NtZHM9JyRDQyAtc2hhcmVkJHthbGxvd191bmRlZmluZWRfZmxhZ30gJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzIC1zb25hbWUgJHNvbmFtZSBgdGVzdCAtbiAiJHZlcnN0cmluZyIgJiYgZnVuY19lY2hvX2FsbCAiLXNldF92ZXJzaW9uICR2ZXJzdHJpbmciYCAtdXBkYXRlX3JlZ2lzdHJ5ICR7b3V0cHV0X29iamRpcn0vc29fbG9jYXRpb25zIC1vICRsaWInCi0gICAgICBmaQotICAgICAgYXJjaGl2ZV9jbWRzX25lZWRfbGM9J25vJwotICAgICAgaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYz0nJHt3bH0tcnBhdGggJHt3bH0kbGliZGlyJwotICAgICAgaGFyZGNvZGVfbGliZGlyX3NlcGFyYXRvcj06Ci0gICAgICA7OwotCi0gICAgb3NmNCogfCBvc2Y1KikJIyBhcyBvc2YzKiB3aXRoIHRoZSBhZGRpdGlvbiBvZiAtbXN5bSBmbGFnCi0gICAgICBpZiB0ZXN0ICIkR0NDIiA9IHllczsgdGhlbgotCWFsbG93X3VuZGVmaW5lZF9mbGFnPScgJHt3bH0tZXhwZWN0X3VucmVzb2x2ZWQgJHt3bH1cKicKLQlhcmNoaXZlX2NtZHM9JyRDQyAtc2hhcmVkJHthbGxvd191bmRlZmluZWRfZmxhZ30gJHBpY19mbGFnICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncyAke3dsfS1tc3ltICR7d2x9LXNvbmFtZSAke3dsfSRzb25hbWUgYHRlc3QgLW4gIiR2ZXJzdHJpbmciICYmIGZ1bmNfZWNob19hbGwgIiR7d2x9LXNldF92ZXJzaW9uICR7d2x9JHZlcnN0cmluZyJgICR7d2x9LXVwZGF0ZV9yZWdpc3RyeSAke3dsfSR7b3V0cHV0X29iamRpcn0vc29fbG9jYXRpb25zIC1vICRsaWInCi0JaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYz0nJHt3bH0tcnBhdGggJHt3bH0kbGliZGlyJwotICAgICAgZWxzZQotCWFsbG93X3VuZGVmaW5lZF9mbGFnPScgLWV4cGVjdF91bnJlc29sdmVkIFwqJwotCWFyY2hpdmVfY21kcz0nJENDIC1zaGFyZWQke2FsbG93X3VuZGVmaW5lZF9mbGFnfSAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MgLW1zeW0gLXNvbmFtZSAkc29uYW1lIGB0ZXN0IC1uICIkdmVyc3RyaW5nIiAmJiBmdW5jX2VjaG9fYWxsICItc2V0X3ZlcnNpb24gJHZlcnN0cmluZyJgIC11cGRhdGVfcmVnaXN0cnkgJHtvdXRwdXRfb2JqZGlyfS9zb19sb2NhdGlvbnMgLW8gJGxpYicKLQlhcmNoaXZlX2V4cHN5bV9jbWRzPSdmb3IgaSBpbiBgY2F0ICRleHBvcnRfc3ltYm9sc2A7IGRvIHByaW50ZiAiJXMgJXNcXG4iIC1leHBvcnRlZF9zeW1ib2wgIlwkaSIgPj4gJGxpYi5leHA7IGRvbmU7IHByaW50ZiAiJXNcXG4iICItaGlkZGVuIj4+ICRsaWIuZXhwfgotCSRDQyAtc2hhcmVkJHthbGxvd191bmRlZmluZWRfZmxhZ30gJHt3bH0taW5wdXQgJHt3bH0kbGliLmV4cCAkY29tcGlsZXJfZmxhZ3MgJGxpYm9ianMgJGRlcGxpYnMgLXNvbmFtZSAkc29uYW1lIGB0ZXN0IC1uICIkdmVyc3RyaW5nIiAmJiAkRUNITyAiLXNldF92ZXJzaW9uICR2ZXJzdHJpbmciYCAtdXBkYXRlX3JlZ2lzdHJ5ICR7b3V0cHV0X29iamRpcn0vc29fbG9jYXRpb25zIC1vICRsaWJ+JFJNICRsaWIuZXhwJwotCi0JIyBCb3RoIGMgYW5kIGN4eCBjb21waWxlciBzdXBwb3J0IC1ycGF0aCBkaXJlY3RseQotCWhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWM9Jy1ycGF0aCAkbGliZGlyJwotICAgICAgZmkKLSAgICAgIGFyY2hpdmVfY21kc19uZWVkX2xjPSdubycKLSAgICAgIGhhcmRjb2RlX2xpYmRpcl9zZXBhcmF0b3I9OgotICAgICAgOzsKLQotICAgIHNvbGFyaXMqKQotICAgICAgbm9fdW5kZWZpbmVkX2ZsYWc9JyAteiBkZWZzJwotICAgICAgaWYgdGVzdCAiJEdDQyIgPSB5ZXM7IHRoZW4KLQl3bGFyYz0nJHt3bH0nCi0JYXJjaGl2ZV9jbWRzPSckQ0MgLXNoYXJlZCAkcGljX2ZsYWcgJHt3bH0teiAke3dsfXRleHQgJHt3bH0taCAke3dsfSRzb25hbWUgLW8gJGxpYiAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MnCi0JYXJjaGl2ZV9leHBzeW1fY21kcz0nZWNobyAieyBnbG9iYWw6IiA+ICRsaWIuZXhwfmNhdCAkZXhwb3J0X3N5bWJvbHMgfCAkU0VEIC1lICJzL1woLipcKS9cMTsvIiA+PiAkbGliLmV4cH5lY2hvICJsb2NhbDogKjsgfTsiID4+ICRsaWIuZXhwfgotCSAgJENDIC1zaGFyZWQgJHBpY19mbGFnICR7d2x9LXogJHt3bH10ZXh0ICR7d2x9LU0gJHt3bH0kbGliLmV4cCAke3dsfS1oICR7d2x9JHNvbmFtZSAtbyAkbGliICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFnc34kUk0gJGxpYi5leHAnCi0gICAgICBlbHNlCi0JY2FzZSBgJENDIC1WIDI+JjFgIGluCi0JKiJDb21waWxlcnMgNS4wIiopCi0JICB3bGFyYz0nJwotCSAgYXJjaGl2ZV9jbWRzPSckTEQgLUcke2FsbG93X3VuZGVmaW5lZF9mbGFnfSAtaCAkc29uYW1lIC1vICRsaWIgJGxpYm9ianMgJGRlcGxpYnMgJGxpbmtlcl9mbGFncycKLQkgIGFyY2hpdmVfZXhwc3ltX2NtZHM9J2VjaG8gInsgZ2xvYmFsOiIgPiAkbGliLmV4cH5jYXQgJGV4cG9ydF9zeW1ib2xzIHwgJFNFRCAtZSAicy9cKC4qXCkvXDE7LyIgPj4gJGxpYi5leHB+ZWNobyAibG9jYWw6ICo7IH07IiA+PiAkbGliLmV4cH4KLQkgICRMRCAtRyR7YWxsb3dfdW5kZWZpbmVkX2ZsYWd9IC1NICRsaWIuZXhwIC1oICRzb25hbWUgLW8gJGxpYiAkbGlib2JqcyAkZGVwbGlicyAkbGlua2VyX2ZsYWdzfiRSTSAkbGliLmV4cCcKLQkgIDs7Ci0JKikKLQkgIHdsYXJjPScke3dsfScKLQkgIGFyY2hpdmVfY21kcz0nJENDIC1HJHthbGxvd191bmRlZmluZWRfZmxhZ30gLWggJHNvbmFtZSAtbyAkbGliICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncycKLQkgIGFyY2hpdmVfZXhwc3ltX2NtZHM9J2VjaG8gInsgZ2xvYmFsOiIgPiAkbGliLmV4cH5jYXQgJGV4cG9ydF9zeW1ib2xzIHwgJFNFRCAtZSAicy9cKC4qXCkvXDE7LyIgPj4gJGxpYi5leHB+ZWNobyAibG9jYWw6ICo7IH07IiA+PiAkbGliLmV4cH4KLQkgICRDQyAtRyR7YWxsb3dfdW5kZWZpbmVkX2ZsYWd9IC1NICRsaWIuZXhwIC1oICRzb25hbWUgLW8gJGxpYiAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3N+JFJNICRsaWIuZXhwJwotCSAgOzsKLQllc2FjCi0gICAgICBmaQotICAgICAgaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYz0nLVIkbGliZGlyJwotICAgICAgaGFyZGNvZGVfc2hsaWJwYXRoX3Zhcj1ubwotICAgICAgY2FzZSAkaG9zdF9vcyBpbgotICAgICAgc29sYXJpczIuWzAtNV0gfCBzb2xhcmlzMi5bMC01XS4qKSA7OwotICAgICAgKikKLQkjIFRoZSBjb21waWxlciBkcml2ZXIgd2lsbCBjb21iaW5lIGFuZCByZW9yZGVyIGxpbmtlciBvcHRpb25zLAotCSMgYnV0IHVuZGVyc3RhbmRzIGAteiBsaW5rZXJfZmxhZycuICBHQ0MgZGlzY2FyZHMgaXQgd2l0aG91dCBgJHdsJywKLQkjIGJ1dCBpcyBjYXJlZnVsIGVub3VnaCBub3QgdG8gcmVvcmRlci4KLQkjIFN1cHBvcnRlZCBzaW5jZSBTb2xhcmlzIDIuNiAobWF5YmUgMi41LjE/KQotCWlmIHRlc3QgIiRHQ0MiID0geWVzOyB0aGVuCi0JICB3aG9sZV9hcmNoaXZlX2ZsYWdfc3BlYz0nJHt3bH0teiAke3dsfWFsbGV4dHJhY3QkY29udmVuaWVuY2UgJHt3bH0teiAke3dsfWRlZmF1bHRleHRyYWN0JwotCWVsc2UKLQkgIHdob2xlX2FyY2hpdmVfZmxhZ19zcGVjPScteiBhbGxleHRyYWN0JGNvbnZlbmllbmNlIC16IGRlZmF1bHRleHRyYWN0JwotCWZpCi0JOzsKLSAgICAgIGVzYWMKLSAgICAgIGxpbmtfYWxsX2RlcGxpYnM9eWVzCi0gICAgICA7OwotCi0gICAgc3Vub3M0KikKLSAgICAgIGlmIHRlc3QgIngkaG9zdF92ZW5kb3IiID0geHNlcXVlbnQ7IHRoZW4KLQkjIFVzZSAkQ0MgdG8gbGluayB1bmRlciBzZXF1ZW50LCBiZWNhdXNlIGl0IHRocm93cyBpbiBzb21lIGV4dHJhIC5vCi0JIyBmaWxlcyB0aGF0IG1ha2UgLmluaXQgYW5kIC5maW5pIHNlY3Rpb25zIHdvcmsuCi0JYXJjaGl2ZV9jbWRzPSckQ0MgLUcgJHt3bH0taCAkc29uYW1lIC1vICRsaWIgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzJwotICAgICAgZWxzZQotCWFyY2hpdmVfY21kcz0nJExEIC1hc3NlcnQgcHVyZS10ZXh0IC1Cc3RhdGljIC1vICRsaWIgJGxpYm9ianMgJGRlcGxpYnMgJGxpbmtlcl9mbGFncycKLSAgICAgIGZpCi0gICAgICBoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjPSctTCRsaWJkaXInCi0gICAgICBoYXJkY29kZV9kaXJlY3Q9eWVzCi0gICAgICBoYXJkY29kZV9taW51c19MPXllcwotICAgICAgaGFyZGNvZGVfc2hsaWJwYXRoX3Zhcj1ubwotICAgICAgOzsKLQotICAgIHN5c3Y0KQotICAgICAgY2FzZSAkaG9zdF92ZW5kb3IgaW4KLQlzbmkpCi0JICBhcmNoaXZlX2NtZHM9JyRMRCAtRyAtaCAkc29uYW1lIC1vICRsaWIgJGxpYm9ianMgJGRlcGxpYnMgJGxpbmtlcl9mbGFncycKLQkgIGhhcmRjb2RlX2RpcmVjdD15ZXMgIyBpcyB0aGlzIHJlYWxseSB0cnVlPz8/Ci0JOzsKLQlzaWVtZW5zKQotCSAgIyMgTEQgaXMgbGQgaXQgbWFrZXMgYSBQTEFNTElCCi0JICAjIyBDQyBqdXN0IG1ha2VzIGEgR3Jvc3NNb2R1bGUuCi0JICBhcmNoaXZlX2NtZHM9JyRMRCAtRyAtbyAkbGliICRsaWJvYmpzICRkZXBsaWJzICRsaW5rZXJfZmxhZ3MnCi0JICByZWxvYWRfY21kcz0nJENDIC1yIC1vICRvdXRwdXQkcmVsb2FkX29ianMnCi0JICBoYXJkY29kZV9kaXJlY3Q9bm8KLSAgICAgICAgOzsKLQltb3Rvcm9sYSkKLQkgIGFyY2hpdmVfY21kcz0nJExEIC1HIC1oICRzb25hbWUgLW8gJGxpYiAkbGlib2JqcyAkZGVwbGlicyAkbGlua2VyX2ZsYWdzJwotCSAgaGFyZGNvZGVfZGlyZWN0PW5vICNNb3Rvcm9sYSBtYW51YWwgc2F5cyB5ZXMsIGJ1dCBteSB0ZXN0cyBzYXkgdGhleSBsaWUKLQk7OwotICAgICAgZXNhYwotICAgICAgcnVucGF0aF92YXI9J0xEX1JVTl9QQVRIJwotICAgICAgaGFyZGNvZGVfc2hsaWJwYXRoX3Zhcj1ubwotICAgICAgOzsKLQotICAgIHN5c3Y0LjMqKQotICAgICAgYXJjaGl2ZV9jbWRzPSckTEQgLUcgLWggJHNvbmFtZSAtbyAkbGliICRsaWJvYmpzICRkZXBsaWJzICRsaW5rZXJfZmxhZ3MnCi0gICAgICBoYXJkY29kZV9zaGxpYnBhdGhfdmFyPW5vCi0gICAgICBleHBvcnRfZHluYW1pY19mbGFnX3NwZWM9Jy1CZXhwb3J0JwotICAgICAgOzsKLQotICAgIHN5c3Y0Kk1QKikKLSAgICAgIGlmIHRlc3QgLWQgL3Vzci9uZWM7IHRoZW4KLQlhcmNoaXZlX2NtZHM9JyRMRCAtRyAtaCAkc29uYW1lIC1vICRsaWIgJGxpYm9ianMgJGRlcGxpYnMgJGxpbmtlcl9mbGFncycKLQloYXJkY29kZV9zaGxpYnBhdGhfdmFyPW5vCi0JcnVucGF0aF92YXI9TERfUlVOX1BBVEgKLQloYXJkY29kZV9ydW5wYXRoX3Zhcj15ZXMKLQlsZF9zaGxpYnM9eWVzCi0gICAgICBmaQotICAgICAgOzsKLQotICAgIHN5c3Y0KnV3MiogfCBzeXN2NU9wZW5VTklYKiB8IHN5c3Y1VW5peFdhcmU3LlswMV0uWzEwXSogfCB1bml4d2FyZTcqIHwgc2NvMy4ydjUuMC5bMDI0XSopCi0gICAgICBub191bmRlZmluZWRfZmxhZz0nJHt3bH0teix0ZXh0JwotICAgICAgYXJjaGl2ZV9jbWRzX25lZWRfbGM9bm8KLSAgICAgIGhhcmRjb2RlX3NobGlicGF0aF92YXI9bm8KLSAgICAgIHJ1bnBhdGhfdmFyPSdMRF9SVU5fUEFUSCcKLQotICAgICAgaWYgdGVzdCAiJEdDQyIgPSB5ZXM7IHRoZW4KLQlhcmNoaXZlX2NtZHM9JyRDQyAtc2hhcmVkICR7d2x9LWgsJHNvbmFtZSAtbyAkbGliICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncycKLQlhcmNoaXZlX2V4cHN5bV9jbWRzPSckQ0MgLXNoYXJlZCAke3dsfS1CZXhwb3J0OiRleHBvcnRfc3ltYm9scyAke3dsfS1oLCRzb25hbWUgLW8gJGxpYiAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MnCi0gICAgICBlbHNlCi0JYXJjaGl2ZV9jbWRzPSckQ0MgLUcgJHt3bH0taCwkc29uYW1lIC1vICRsaWIgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzJwotCWFyY2hpdmVfZXhwc3ltX2NtZHM9JyRDQyAtRyAke3dsfS1CZXhwb3J0OiRleHBvcnRfc3ltYm9scyAke3dsfS1oLCRzb25hbWUgLW8gJGxpYiAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MnCi0gICAgICBmaQotICAgICAgOzsKLQotICAgIHN5c3Y1KiB8IHNjbzMuMnY1KiB8IHNjbzV2NiopCi0gICAgICAjIE5vdGU6IFdlIGNhbiBOT1QgdXNlIC16IGRlZnMgYXMgd2UgbWlnaHQgZGVzaXJlLCBiZWNhdXNlIHdlIGRvIG5vdAotICAgICAgIyBsaW5rIHdpdGggLWxjLCBhbmQgdGhhdCB3b3VsZCBjYXVzZSBhbnkgc3ltYm9scyB1c2VkIGZyb20gbGliYyB0bwotICAgICAgIyBhbHdheXMgYmUgdW5yZXNvbHZlZCwgd2hpY2ggbWVhbnMganVzdCBhYm91dCBubyBsaWJyYXJ5IHdvdWxkCi0gICAgICAjIGV2ZXIgbGluayBjb3JyZWN0bHkuICBJZiB3ZSdyZSBub3QgdXNpbmcgR05VIGxkIHdlIHVzZSAteiB0ZXh0Ci0gICAgICAjIHRob3VnaCwgd2hpY2ggZG9lcyBjYXRjaCBzb21lIGJhZCBzeW1ib2xzIGJ1dCBpc24ndCBhcyBoZWF2eS1oYW5kZWQKLSAgICAgICMgYXMgLXogZGVmcy4KLSAgICAgIG5vX3VuZGVmaW5lZF9mbGFnPScke3dsfS16LHRleHQnCi0gICAgICBhbGxvd191bmRlZmluZWRfZmxhZz0nJHt3bH0teixub2RlZnMnCi0gICAgICBhcmNoaXZlX2NtZHNfbmVlZF9sYz1ubwotICAgICAgaGFyZGNvZGVfc2hsaWJwYXRoX3Zhcj1ubwotICAgICAgaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYz0nJHt3bH0tUiwkbGliZGlyJwotICAgICAgaGFyZGNvZGVfbGliZGlyX3NlcGFyYXRvcj0nOicKLSAgICAgIGxpbmtfYWxsX2RlcGxpYnM9eWVzCi0gICAgICBleHBvcnRfZHluYW1pY19mbGFnX3NwZWM9JyR7d2x9LUJleHBvcnQnCi0gICAgICBydW5wYXRoX3Zhcj0nTERfUlVOX1BBVEgnCi0KLSAgICAgIGlmIHRlc3QgIiRHQ0MiID0geWVzOyB0aGVuCi0JYXJjaGl2ZV9jbWRzPSckQ0MgLXNoYXJlZCAke3dsfS1oLCRzb25hbWUgLW8gJGxpYiAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MnCi0JYXJjaGl2ZV9leHBzeW1fY21kcz0nJENDIC1zaGFyZWQgJHt3bH0tQmV4cG9ydDokZXhwb3J0X3N5bWJvbHMgJHt3bH0taCwkc29uYW1lIC1vICRsaWIgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzJwotICAgICAgZWxzZQotCWFyY2hpdmVfY21kcz0nJENDIC1HICR7d2x9LWgsJHNvbmFtZSAtbyAkbGliICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncycKLQlhcmNoaXZlX2V4cHN5bV9jbWRzPSckQ0MgLUcgJHt3bH0tQmV4cG9ydDokZXhwb3J0X3N5bWJvbHMgJHt3bH0taCwkc29uYW1lIC1vICRsaWIgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzJwotICAgICAgZmkKLSAgICAgIDs7Ci0KLSAgICB1dHM0KikKLSAgICAgIGFyY2hpdmVfY21kcz0nJExEIC1HIC1oICRzb25hbWUgLW8gJGxpYiAkbGlib2JqcyAkZGVwbGlicyAkbGlua2VyX2ZsYWdzJwotICAgICAgaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYz0nLUwkbGliZGlyJwotICAgICAgaGFyZGNvZGVfc2hsaWJwYXRoX3Zhcj1ubwotICAgICAgOzsKLQotICAgICopCi0gICAgICBsZF9zaGxpYnM9bm8KLSAgICAgIDs7Ci0gICAgZXNhYwotCi0gICAgaWYgdGVzdCB4JGhvc3RfdmVuZG9yID0geHNuaTsgdGhlbgotICAgICAgY2FzZSAkaG9zdCBpbgotICAgICAgc3lzdjQgfCBzeXN2NC4ydXcyKiB8IHN5c3Y0LjMqIHwgc3lzdjUqKQotCWV4cG9ydF9keW5hbWljX2ZsYWdfc3BlYz0nJHt3bH0tQmxhcmdlZHluc3ltJwotCTs7Ci0gICAgICBlc2FjCi0gICAgZmkKLSAgZmkKLQoteyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRsZF9zaGxpYnMiID4mNQotJGFzX2VjaG8gIiRsZF9zaGxpYnMiID4mNjsgfQotdGVzdCAiJGxkX3NobGlicyIgPSBubyAmJiBjYW5fYnVpbGRfc2hhcmVkPW5vCi0KLXdpdGhfZ251X2xkPSR3aXRoX2dudV9sZAotCi0KLQotCi0KLQotCi0KLQotCi0KLQotCi0KLQotIwotIyBEbyB3ZSBuZWVkIHRvIGV4cGxpY2l0bHkgbGluayBsaWJjPwotIwotY2FzZSAieCRhcmNoaXZlX2NtZHNfbmVlZF9sYyIgaW4KLXh8eHllcykKLSAgIyBBc3N1bWUgLWxjIHNob3VsZCBiZSBhZGRlZAotICBhcmNoaXZlX2NtZHNfbmVlZF9sYz15ZXMKLQotICBpZiB0ZXN0ICIkZW5hYmxlX3NoYXJlZCIgPSB5ZXMgJiYgdGVzdCAiJEdDQyIgPSB5ZXM7IHRoZW4KLSAgICBjYXNlICRhcmNoaXZlX2NtZHMgaW4KLSAgICAqJ34nKikKLSAgICAgICMgRklYTUU6IHdlIG1heSBoYXZlIHRvIGRlYWwgd2l0aCBtdWx0aS1jb21tYW5kIHNlcXVlbmNlcy4KLSAgICAgIDs7Ci0gICAgJyRDQyAnKikKLSAgICAgICMgVGVzdCB3aGV0aGVyIHRoZSBjb21waWxlciBpbXBsaWNpdGx5IGxpbmtzIHdpdGggLWxjIHNpbmNlIG9uIHNvbWUKLSAgICAgICMgc3lzdGVtcywgLWxnY2MgaGFzIHRvIGNvbWUgYmVmb3JlIC1sYy4gSWYgZ2NjIGFscmVhZHkgcGFzc2VzIC1sYwotICAgICAgIyB0byBsZCwgZG9uJ3QgYWRkIC1sYyBiZWZvcmUgLWxnY2MuCi0gICAgICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIHdoZXRoZXIgLWxjIHNob3VsZCBiZSBleHBsaWNpdGx5IGxpbmtlZCBpbiIgPiY1Ci0kYXNfZWNob19uICJjaGVja2luZyB3aGV0aGVyIC1sYyBzaG91bGQgYmUgZXhwbGljaXRseSBsaW5rZWQgaW4uLi4gIiA+JjY7IH0KLWlmICR7bHRfY3ZfYXJjaGl2ZV9jbWRzX25lZWRfbGMrOn0gZmFsc2U7IHRoZW4gOgotICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgotZWxzZQotICAkUk0gY29uZnRlc3QqCi0JZWNobyAiJGx0X3NpbXBsZV9jb21waWxlX3Rlc3RfY29kZSIgPiBjb25mdGVzdC4kYWNfZXh0Ci0KLQlpZiB7IHsgZXZhbCBlY2hvICJcIlwkYXNfbWVcIjoke2FzX2xpbmVuby0kTElORU5PfTogXCIkYWNfY29tcGlsZVwiIjsgfSA+JjUKLSAgKGV2YWwgJGFjX2NvbXBpbGUpIDI+JjUKLSAgYWNfc3RhdHVzPSQ/Ci0gICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IFwkPyA9ICRhY19zdGF0dXMiID4mNQotICB0ZXN0ICRhY19zdGF0dXMgPSAwOyB9IDI+Y29uZnRlc3QuZXJyOyB0aGVuCi0JICBzb25hbWU9Y29uZnRlc3QKLQkgIGxpYj1jb25mdGVzdAotCSAgbGlib2Jqcz1jb25mdGVzdC4kYWNfb2JqZXh0Ci0JICBkZXBsaWJzPQotCSAgd2w9JGx0X3Byb2dfY29tcGlsZXJfd2wKLQkgIHBpY19mbGFnPSRsdF9wcm9nX2NvbXBpbGVyX3BpYwotCSAgY29tcGlsZXJfZmxhZ3M9LXYKLQkgIGxpbmtlcl9mbGFncz0tdgotCSAgdmVyc3RyaW5nPQotCSAgb3V0cHV0X29iamRpcj0uCi0JICBsaWJuYW1lPWNvbmZ0ZXN0Ci0JICBsdF9zYXZlX2FsbG93X3VuZGVmaW5lZF9mbGFnPSRhbGxvd191bmRlZmluZWRfZmxhZwotCSAgYWxsb3dfdW5kZWZpbmVkX2ZsYWc9Ci0JICBpZiB7IHsgZXZhbCBlY2hvICJcIlwkYXNfbWVcIjoke2FzX2xpbmVuby0kTElORU5PfTogXCIkYXJjaGl2ZV9jbWRzIDJcPlwmMSBcfCAkR1JFUCBcIiAtbGMgXCIgXD4vZGV2L251bGwgMlw+XCYxXCIiOyB9ID4mNQotICAoZXZhbCAkYXJjaGl2ZV9jbWRzIDJcPlwmMSBcfCAkR1JFUCBcIiAtbGMgXCIgXD4vZGV2L251bGwgMlw+XCYxKSAyPiY1Ci0gIGFjX3N0YXR1cz0kPwotICAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKLSAgdGVzdCAkYWNfc3RhdHVzID0gMDsgfQotCSAgdGhlbgotCSAgICBsdF9jdl9hcmNoaXZlX2NtZHNfbmVlZF9sYz1ubwotCSAgZWxzZQotCSAgICBsdF9jdl9hcmNoaXZlX2NtZHNfbmVlZF9sYz15ZXMKLQkgIGZpCi0JICBhbGxvd191bmRlZmluZWRfZmxhZz0kbHRfc2F2ZV9hbGxvd191bmRlZmluZWRfZmxhZwotCWVsc2UKLQkgIGNhdCBjb25mdGVzdC5lcnIgMT4mNQotCWZpCi0JJFJNIGNvbmZ0ZXN0KgotCi1maQoteyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRsdF9jdl9hcmNoaXZlX2NtZHNfbmVlZF9sYyIgPiY1Ci0kYXNfZWNobyAiJGx0X2N2X2FyY2hpdmVfY21kc19uZWVkX2xjIiA+JjY7IH0KLSAgICAgIGFyY2hpdmVfY21kc19uZWVkX2xjPSRsdF9jdl9hcmNoaXZlX2NtZHNfbmVlZF9sYwotICAgICAgOzsKLSAgICBlc2FjCi0gIGZpCi0gIDs7Ci1lc2FjCi0KLQotCi0KLQotCi0KLQotCi0KLQotCi0KLQotCi0KLQotCi0KLQotCi0KLQotCi0KLQotCi0KLQotCi0KLQotCi0KLQotCi0KLQotCi0KLQotCi0KLQotCi0KLQotCi0KLQotCi0KLQotCi0KLQotCi0KLQotCi0KLQotCi0KLQotCi0KLQotCi0KLQotCi0KLQotCi0KLQotCi0KLQotCi0KLQotCi0KLQotCi0KLQotCi0KLQotCi0KLQotCi0KLQotCi0KLQotCi0KLQotCi0KLQotCi0KLQotCi0KLQotCi0KLQotCi0KLQotCi0KLQotCi0KLQotCi0KLQotCi0KLQotCi0KLQotCi0KLQotCi0KLQotCi0KLQotCi0KLQotCi0KLQotCi0KLQotCi0KLQotCi0KLSAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBkeW5hbWljIGxpbmtlciBjaGFyYWN0ZXJpc3RpY3MiID4mNQotJGFzX2VjaG9fbiAiY2hlY2tpbmcgZHluYW1pYyBsaW5rZXIgY2hhcmFjdGVyaXN0aWNzLi4uICIgPiY2OyB9Ci0KLWlmIHRlc3QgIiRHQ0MiID0geWVzOyB0aGVuCi0gIGNhc2UgJGhvc3Rfb3MgaW4KLSAgICBkYXJ3aW4qKSBsdF9hd2tfYXJnPSIvXmxpYnJhcmllczovLC9MUi8iIDs7Ci0gICAgKikgbHRfYXdrX2FyZz0iL15saWJyYXJpZXM6LyIgOzsKLSAgZXNhYwotICBjYXNlICRob3N0X29zIGluCi0gICAgbWluZ3cqIHwgY2VnY2MqKSBsdF9zZWRfc3RyaXBfZXE9InMsPVwoW0EtWmEtel06XCksXDEsZyIgOzsKLSAgICAqKSBsdF9zZWRfc3RyaXBfZXE9InMsPS8sLyxnIiA7OwotICBlc2FjCi0gIGx0X3NlYXJjaF9wYXRoX3NwZWM9YCRDQyAtcHJpbnQtc2VhcmNoLWRpcnMgfCBhd2sgJGx0X2F3a19hcmcgfCAkU0VEIC1lICJzL15saWJyYXJpZXM6Ly8iIC1lICRsdF9zZWRfc3RyaXBfZXFgCi0gIGNhc2UgJGx0X3NlYXJjaF9wYXRoX3NwZWMgaW4KLSAgKlw7KikKLSAgICAjIGlmIHRoZSBwYXRoIGNvbnRhaW5zICI7IiB0aGVuIHdlIGFzc3VtZSBpdCB0byBiZSB0aGUgc2VwYXJhdG9yCi0gICAgIyBvdGhlcndpc2UgZGVmYXVsdCB0byB0aGUgc3RhbmRhcmQgcGF0aCBzZXBhcmF0b3IgKGkuZS4gIjoiKSAtIGl0IGlzCi0gICAgIyBhc3N1bWVkIHRoYXQgbm8gcGFydCBvZiBhIG5vcm1hbCBwYXRobmFtZSBjb250YWlucyAiOyIgYnV0IHRoYXQgc2hvdWxkCi0gICAgIyBva2F5IGluIHRoZSByZWFsIHdvcmxkIHdoZXJlICI7IiBpbiBkaXJwYXRocyBpcyBpdHNlbGYgcHJvYmxlbWF0aWMuCi0gICAgbHRfc2VhcmNoX3BhdGhfc3BlYz1gJEVDSE8gIiRsdF9zZWFyY2hfcGF0aF9zcGVjIiB8ICRTRUQgJ3MvOy8gL2cnYAotICAgIDs7Ci0gICopCi0gICAgbHRfc2VhcmNoX3BhdGhfc3BlYz1gJEVDSE8gIiRsdF9zZWFyY2hfcGF0aF9zcGVjIiB8ICRTRUQgInMvJFBBVEhfU0VQQVJBVE9SLyAvZyJgCi0gICAgOzsKLSAgZXNhYwotICAjIE9rLCBub3cgd2UgaGF2ZSB0aGUgcGF0aCwgc2VwYXJhdGVkIGJ5IHNwYWNlcywgd2UgY2FuIHN0ZXAgdGhyb3VnaCBpdAotICAjIGFuZCBhZGQgbXVsdGlsaWIgZGlyIGlmIG5lY2Vzc2FyeS4KLSAgbHRfdG1wX2x0X3NlYXJjaF9wYXRoX3NwZWM9Ci0gIGx0X211bHRpX29zX2Rpcj1gJENDICRDUFBGTEFHUyAkQ0ZMQUdTICRMREZMQUdTIC1wcmludC1tdWx0aS1vcy1kaXJlY3RvcnkgMj4vZGV2L251bGxgCi0gIGZvciBsdF9zeXNfcGF0aCBpbiAkbHRfc2VhcmNoX3BhdGhfc3BlYzsgZG8KLSAgICBpZiB0ZXN0IC1kICIkbHRfc3lzX3BhdGgvJGx0X211bHRpX29zX2RpciI7IHRoZW4KLSAgICAgIGx0X3RtcF9sdF9zZWFyY2hfcGF0aF9zcGVjPSIkbHRfdG1wX2x0X3NlYXJjaF9wYXRoX3NwZWMgJGx0X3N5c19wYXRoLyRsdF9tdWx0aV9vc19kaXIiCi0gICAgZWxzZQotICAgICAgdGVzdCAtZCAiJGx0X3N5c19wYXRoIiAmJiBcCi0JbHRfdG1wX2x0X3NlYXJjaF9wYXRoX3NwZWM9IiRsdF90bXBfbHRfc2VhcmNoX3BhdGhfc3BlYyAkbHRfc3lzX3BhdGgiCi0gICAgZmkKLSAgZG9uZQotICBsdF9zZWFyY2hfcGF0aF9zcGVjPWAkRUNITyAiJGx0X3RtcF9sdF9zZWFyY2hfcGF0aF9zcGVjIiB8IGF3ayAnCi1CRUdJTiB7UlM9IiAiOyBGUz0iL3xcbiI7fSB7Ci0gIGx0X2Zvbz0iIjsKLSAgbHRfY291bnQ9MDsKLSAgZm9yIChsdF9pID0gTkY7IGx0X2kgPiAwOyBsdF9pLS0pIHsKLSAgICBpZiAoJGx0X2kgIT0gIiIgJiYgJGx0X2kgIT0gIi4iKSB7Ci0gICAgICBpZiAoJGx0X2kgPT0gIi4uIikgewotICAgICAgICBsdF9jb3VudCsrOwotICAgICAgfSBlbHNlIHsKLSAgICAgICAgaWYgKGx0X2NvdW50ID09IDApIHsKLSAgICAgICAgICBsdF9mb289Ii8iICRsdF9pIGx0X2ZvbzsKLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICBsdF9jb3VudC0tOwotICAgICAgICB9Ci0gICAgICB9Ci0gICAgfQotICB9Ci0gIGlmIChsdF9mb28gIT0gIiIpIHsgbHRfZnJlcVtsdF9mb29dKys7IH0KLSAgaWYgKGx0X2ZyZXFbbHRfZm9vXSA9PSAxKSB7IHByaW50IGx0X2ZvbzsgfQotfSdgCi0gICMgQVdLIHByb2dyYW0gYWJvdmUgZXJyb25lb3VzbHkgcHJlcGVuZHMgJy8nIHRvIEM6L2Rvcy9wYXRocwotICAjIGZvciB0aGVzZSBob3N0cy4KLSAgY2FzZSAkaG9zdF9vcyBpbgotICAgIG1pbmd3KiB8IGNlZ2NjKikgbHRfc2VhcmNoX3BhdGhfc3BlYz1gJEVDSE8gIiRsdF9zZWFyY2hfcGF0aF9zcGVjIiB8XAotICAgICAgJFNFRCAncywvXChbQS1aYS16XTpcKSxcMSxnJ2AgOzsKLSAgZXNhYwotICBzeXNfbGliX3NlYXJjaF9wYXRoX3NwZWM9YCRFQ0hPICIkbHRfc2VhcmNoX3BhdGhfc3BlYyIgfCAkbHRfTkwyU1BgCi1lbHNlCi0gIHN5c19saWJfc2VhcmNoX3BhdGhfc3BlYz0iL2xpYiAvdXNyL2xpYiAvdXNyL2xvY2FsL2xpYiIKLWZpCi1saWJyYXJ5X25hbWVzX3NwZWM9Ci1saWJuYW1lX3NwZWM9J2xpYiRuYW1lJwotc29uYW1lX3NwZWM9Ci1zaHJleHRfY21kcz0iLnNvIgotcG9zdGluc3RhbGxfY21kcz0KLXBvc3R1bmluc3RhbGxfY21kcz0KLWZpbmlzaF9jbWRzPQotZmluaXNoX2V2YWw9Ci1zaGxpYnBhdGhfdmFyPQotc2hsaWJwYXRoX292ZXJyaWRlc19ydW5wYXRoPXVua25vd24KLXZlcnNpb25fdHlwZT1ub25lCi1keW5hbWljX2xpbmtlcj0iJGhvc3Rfb3MgbGQuc28iCi1zeXNfbGliX2Rsc2VhcmNoX3BhdGhfc3BlYz0iL2xpYiAvdXNyL2xpYiIKLW5lZWRfbGliX3ByZWZpeD11bmtub3duCi1oYXJkY29kZV9pbnRvX2xpYnM9bm8KLQotIyB3aGVuIHlvdSBzZXQgbmVlZF92ZXJzaW9uIHRvIG5vLCBtYWtlIHN1cmUgaXQgZG9lcyBub3QgY2F1c2UgLXNldF92ZXJzaW9uCi0jIGZsYWdzIHRvIGJlIGxlZnQgd2l0aG91dCBhcmd1bWVudHMKLW5lZWRfdmVyc2lvbj11bmtub3duCi0KLWNhc2UgJGhvc3Rfb3MgaW4KLWFpeDMqKQotICB2ZXJzaW9uX3R5cGU9bGludXgKLSAgbGlicmFyeV9uYW1lc19zcGVjPScke2xpYm5hbWV9JHtyZWxlYXNlfSR7c2hhcmVkX2V4dH0kdmVyc3VmZml4ICRsaWJuYW1lLmEnCi0gIHNobGlicGF0aF92YXI9TElCUEFUSAotCi0gICMgQUlYIDMgaGFzIG5vIHZlcnNpb25pbmcgc3VwcG9ydCwgc28gd2UgYXBwZW5kIGEgbWFqb3IgdmVyc2lvbiB0byB0aGUgbmFtZS4KLSAgc29uYW1lX3NwZWM9JyR7bGlibmFtZX0ke3JlbGVhc2V9JHtzaGFyZWRfZXh0fSRtYWpvcicKLSAgOzsKLQotYWl4WzQtOV0qKQotICB2ZXJzaW9uX3R5cGU9bGludXgKLSAgbmVlZF9saWJfcHJlZml4PW5vCi0gIG5lZWRfdmVyc2lvbj1ubwotICBoYXJkY29kZV9pbnRvX2xpYnM9eWVzCi0gIGlmIHRlc3QgIiRob3N0X2NwdSIgPSBpYTY0OyB0aGVuCi0gICAgIyBBSVggNSBzdXBwb3J0cyBJQTY0Ci0gICAgbGlicmFyeV9uYW1lc19zcGVjPScke2xpYm5hbWV9JHtyZWxlYXNlfSR7c2hhcmVkX2V4dH0kbWFqb3IgJHtsaWJuYW1lfSR7cmVsZWFzZX0ke3NoYXJlZF9leHR9JHZlcnN1ZmZpeCAkbGlibmFtZSR7c2hhcmVkX2V4dH0nCi0gICAgc2hsaWJwYXRoX3Zhcj1MRF9MSUJSQVJZX1BBVEgKLSAgZWxzZQotICAgICMgV2l0aCBHQ0MgdXAgdG8gMi45NS54LCBjb2xsZWN0MiB3b3VsZCBjcmVhdGUgYW4gaW1wb3J0IGZpbGUKLSAgICAjIGZvciBkZXBlbmRlbmNlIGxpYnJhcmllcy4gIFRoZSBpbXBvcnQgZmlsZSB3b3VsZCBzdGFydCB3aXRoCi0gICAgIyB0aGUgbGluZSBgIyEgLicuICBUaGlzIHdvdWxkIGNhdXNlIHRoZSBnZW5lcmF0ZWQgbGlicmFyeSB0bwotICAgICMgZGVwZW5kIG9uIGAuJywgYWx3YXlzIGFuIGludmFsaWQgbGlicmFyeS4gIFRoaXMgd2FzIGZpeGVkIGluCi0gICAgIyBkZXZlbG9wbWVudCBzbmFwc2hvdHMgb2YgR0NDIHByaW9yIHRvIDMuMC4KLSAgICBjYXNlICRob3N0X29zIGluCi0gICAgICBhaXg0IHwgYWl4NC5bMDFdIHwgYWl4NC5bMDFdLiopCi0gICAgICBpZiB7IGVjaG8gJyNpZiBfX0dOVUNfXyA+IDIgfHwgKF9fR05VQ19fID09IDIgJiYgX19HTlVDX01JTk9SX18gPj0gOTcpJwotCSAgIGVjaG8gJyB5ZXMgJwotCSAgIGVjaG8gJyNlbmRpZic7IH0gfCAke0NDfSAtRSAtIHwgJEdSRVAgeWVzID4gL2Rldi9udWxsOyB0aGVuCi0JOgotICAgICAgZWxzZQotCWNhbl9idWlsZF9zaGFyZWQ9bm8KLSAgICAgIGZpCi0gICAgICA7OwotICAgIGVzYWMKLSAgICAjIEFJWCAob24gUG93ZXIqKSBoYXMgbm8gdmVyc2lvbmluZyBzdXBwb3J0LCBzbyBjdXJyZW50bHkgd2UgY2FuIG5vdCBoYXJkY29kZSBjb3JyZWN0Ci0gICAgIyBzb25hbWUgaW50byBleGVjdXRhYmxlLiBQcm9iYWJseSB3ZSBjYW4gYWRkIHZlcnNpb25pbmcgc3VwcG9ydCB0bwotICAgICMgY29sbGVjdDIsIHNvIGFkZGl0aW9uYWwgbGlua3MgY2FuIGJlIHVzZWZ1bCBpbiBmdXR1cmUuCi0gICAgaWYgdGVzdCAiJGFpeF91c2VfcnVudGltZWxpbmtpbmciID0geWVzOyB0aGVuCi0gICAgICAjIElmIHVzaW5nIHJ1biB0aW1lIGxpbmtpbmcgKG9uIEFJWCA0LjIgb3IgbGF0ZXIpIHVzZSBsaWI8bmFtZT4uc28KLSAgICAgICMgaW5zdGVhZCBvZiBsaWI8bmFtZT4uYSB0byBsZXQgcGVvcGxlIGtub3cgdGhhdCB0aGVzZSBhcmUgbm90Ci0gICAgICAjIHR5cGljYWwgQUlYIHNoYXJlZCBsaWJyYXJpZXMuCi0gICAgICBsaWJyYXJ5X25hbWVzX3NwZWM9JyR7bGlibmFtZX0ke3JlbGVhc2V9JHtzaGFyZWRfZXh0fSR2ZXJzdWZmaXggJHtsaWJuYW1lfSR7cmVsZWFzZX0ke3NoYXJlZF9leHR9JG1ham9yICRsaWJuYW1lJHtzaGFyZWRfZXh0fScKLSAgICBlbHNlCi0gICAgICAjIFdlIHByZXNlcnZlIC5hIGFzIGV4dGVuc2lvbiBmb3Igc2hhcmVkIGxpYnJhcmllcyB0aHJvdWdoIEFJWDQuMgotICAgICAgIyBhbmQgbGF0ZXIgd2hlbiB3ZSBhcmUgbm90IGRvaW5nIHJ1biB0aW1lIGxpbmtpbmcuCi0gICAgICBsaWJyYXJ5X25hbWVzX3NwZWM9JyR7bGlibmFtZX0ke3JlbGVhc2V9LmEgJGxpYm5hbWUuYScKLSAgICAgIHNvbmFtZV9zcGVjPScke2xpYm5hbWV9JHtyZWxlYXNlfSR7c2hhcmVkX2V4dH0kbWFqb3InCi0gICAgZmkKLSAgICBzaGxpYnBhdGhfdmFyPUxJQlBBVEgKLSAgZmkKLSAgOzsKLQotYW1pZ2FvcyopCi0gIGNhc2UgJGhvc3RfY3B1IGluCi0gIHBvd2VycGMpCi0gICAgIyBTaW5jZSBKdWx5IDIwMDcgQW1pZ2FPUzQgb2ZmaWNpYWxseSBzdXBwb3J0cyAuc28gbGlicmFyaWVzLgotICAgICMgV2hlbiBjb21waWxpbmcgdGhlIGV4ZWN1dGFibGUsIGFkZCAtdXNlLWR5bmxkIC1Mc29ianM6IHRvIHRoZSBjb21waWxlbGluZS4KLSAgICBsaWJyYXJ5X25hbWVzX3NwZWM9JyR7bGlibmFtZX0ke3JlbGVhc2V9JHtzaGFyZWRfZXh0fSR2ZXJzdWZmaXggJHtsaWJuYW1lfSR7cmVsZWFzZX0ke3NoYXJlZF9leHR9JG1ham9yICRsaWJuYW1lJHtzaGFyZWRfZXh0fScKLSAgICA7OwotICBtNjhrKQotICAgIGxpYnJhcnlfbmFtZXNfc3BlYz0nJGxpYm5hbWUuaXhsaWJyYXJ5ICRsaWJuYW1lLmEnCi0gICAgIyBDcmVhdGUgJHtsaWJuYW1lfV9peGxpYnJhcnkuYSBlbnRyaWVzIGluIC9zeXMvbGlicy4KLSAgICBmaW5pc2hfZXZhbD0nZm9yIGxpYiBpbiBgbHMgJGxpYmRpci8qLml4bGlicmFyeSAyPi9kZXYvbnVsbGA7IGRvIGxpYm5hbWU9YGZ1bmNfZWNob19hbGwgIiRsaWIiIHwgJFNFRCAnXCcncyVeLiovXChbXi9dKlwpXC5peGxpYnJhcnkkJVwxJSdcJydgOyB0ZXN0ICRSTSAvc3lzL2xpYnMvJHtsaWJuYW1lfV9peGxpYnJhcnkuYTsgJHNob3cgImNkIC9zeXMvbGlicyAmJiAkTE5fUyAkbGliICR7bGlibmFtZX1faXhsaWJyYXJ5LmEiOyBjZCAvc3lzL2xpYnMgJiYgJExOX1MgJGxpYiAke2xpYm5hbWV9X2l4bGlicmFyeS5hIHx8IGV4aXQgMTsgZG9uZScKLSAgICA7OwotICBlc2FjCi0gIDs7Ci0KLWJlb3MqKQotICBsaWJyYXJ5X25hbWVzX3NwZWM9JyR7bGlibmFtZX0ke3NoYXJlZF9leHR9JwotICBkeW5hbWljX2xpbmtlcj0iJGhvc3Rfb3MgbGQuc28iCi0gIHNobGlicGF0aF92YXI9TElCUkFSWV9QQVRICi0gIDs7Ci0KLWJzZGlbNDVdKikKLSAgdmVyc2lvbl90eXBlPWxpbnV4Ci0gIG5lZWRfdmVyc2lvbj1ubwotICBsaWJyYXJ5X25hbWVzX3NwZWM9JyR7bGlibmFtZX0ke3JlbGVhc2V9JHtzaGFyZWRfZXh0fSR2ZXJzdWZmaXggJHtsaWJuYW1lfSR7cmVsZWFzZX0ke3NoYXJlZF9leHR9JG1ham9yICRsaWJuYW1lJHtzaGFyZWRfZXh0fScKLSAgc29uYW1lX3NwZWM9JyR7bGlibmFtZX0ke3JlbGVhc2V9JHtzaGFyZWRfZXh0fSRtYWpvcicKLSAgZmluaXNoX2NtZHM9J1BBVEg9IlwkUEFUSDovc2JpbiIgbGRjb25maWcgJGxpYmRpcicKLSAgc2hsaWJwYXRoX3Zhcj1MRF9MSUJSQVJZX1BBVEgKLSAgc3lzX2xpYl9zZWFyY2hfcGF0aF9zcGVjPSIvc2hsaWIgL3Vzci9saWIgL3Vzci9YMTEvbGliIC91c3IvY29udHJpYi9saWIgL2xpYiAvdXNyL2xvY2FsL2xpYiIKLSAgc3lzX2xpYl9kbHNlYXJjaF9wYXRoX3NwZWM9Ii9zaGxpYiAvdXNyL2xpYiAvdXNyL2xvY2FsL2xpYiIKLSAgIyB0aGUgZGVmYXVsdCBsZC5zby5jb25mIGFsc28gY29udGFpbnMgL3Vzci9jb250cmliL2xpYiBhbmQKLSAgIyAvdXNyL1gxMVI2L2xpYiAoL3Vzci9YMTEgaXMgYSBsaW5rIHRvIC91c3IvWDExUjYpLCBidXQgbGV0IHVzIGFsbG93Ci0gICMgbGlidG9vbCB0byBoYXJkLWNvZGUgdGhlc2UgaW50byBwcm9ncmFtcwotICA7OwotCi1jeWd3aW4qIHwgbWluZ3cqIHwgcHczMiogfCBjZWdjYyopCi0gIHZlcnNpb25fdHlwZT13aW5kb3dzCi0gIHNocmV4dF9jbWRzPSIuZGxsIgotICBuZWVkX3ZlcnNpb249bm8KLSAgbmVlZF9saWJfcHJlZml4PW5vCi0KLSAgY2FzZSAkR0NDLCRjY19iYXNlbmFtZSBpbgotICB5ZXMsKikKLSAgICAjIGdjYwotICAgIGxpYnJhcnlfbmFtZXNfc3BlYz0nJGxpYm5hbWUuZGxsLmEnCi0gICAgIyBETEwgaXMgaW5zdGFsbGVkIHRvICQobGliZGlyKS8uLi9iaW4gYnkgcG9zdGluc3RhbGxfY21kcwotICAgIHBvc3RpbnN0YWxsX2NtZHM9J2Jhc2VfZmlsZT1gYmFzZW5hbWUgXCR7ZmlsZX1gfgotICAgICAgZGxwYXRoPWAkU0hFTEwgMj4mMSAtYyAnXCcnLiAkZGlyLydcJydcJHtiYXNlX2ZpbGV9J1wnJ2k7IGVjaG8gXCRkbG5hbWUnXCcnYH4KLSAgICAgIGRsZGlyPSRkZXN0ZGlyL2BkaXJuYW1lIFwkZGxwYXRoYH4KLSAgICAgIHRlc3QgLWQgXCRkbGRpciB8fCBta2RpciAtcCBcJGRsZGlyfgotICAgICAgJGluc3RhbGxfcHJvZyAkZGlyLyRkbG5hbWUgXCRkbGRpci8kZGxuYW1lfgotICAgICAgY2htb2QgYSt4IFwkZGxkaXIvJGRsbmFtZX4KLSAgICAgIGlmIHRlc3QgLW4gJ1wnJyRzdHJpcG1lJ1wnJyAmJiB0ZXN0IC1uICdcJyckc3RyaXBsaWInXCcnOyB0aGVuCi0gICAgICAgIGV2YWwgJ1wnJyRzdHJpcGxpYiBcJGRsZGlyLyRkbG5hbWUnXCcnIHx8IGV4aXQgXCQ/OwotICAgICAgZmknCi0gICAgcG9zdHVuaW5zdGFsbF9jbWRzPSdkbGRsbD1gJFNIRUxMIDI+JjEgLWMgJ1wnJy4gJGZpbGU7IGVjaG8gXCRkbG5hbWUnXCcnYH4KLSAgICAgIGRscGF0aD0kZGlyL1wkZGxkbGx+Ci0gICAgICAgJFJNIFwkZGxwYXRoJwotICAgIHNobGlicGF0aF9vdmVycmlkZXNfcnVucGF0aD15ZXMKLQotICAgIGNhc2UgJGhvc3Rfb3MgaW4KLSAgICBjeWd3aW4qKQotICAgICAgIyBDeWd3aW4gRExMcyB1c2UgJ2N5ZycgcHJlZml4IHJhdGhlciB0aGFuICdsaWInCi0gICAgICBzb25hbWVfc3BlYz0nYGVjaG8gJHtsaWJuYW1lfSB8IHNlZCAtZSAncy9ebGliL2N5Zy8nYGBlY2hvICR7cmVsZWFzZX0gfCAkU0VEIC1lICdzL1suXS8tL2cnYCR7dmVyc3VmZml4fSR7c2hhcmVkX2V4dH0nCi0KLSAgICAgIHN5c19saWJfc2VhcmNoX3BhdGhfc3BlYz0iJHN5c19saWJfc2VhcmNoX3BhdGhfc3BlYyAvdXNyL2xpYi93MzJhcGkiCi0gICAgICA7OwotICAgIG1pbmd3KiB8IGNlZ2NjKikKLSAgICAgICMgTWluR1cgRExMcyB1c2UgdHJhZGl0aW9uYWwgJ2xpYicgcHJlZml4Ci0gICAgICBzb25hbWVfc3BlYz0nJHtsaWJuYW1lfWBlY2hvICR7cmVsZWFzZX0gfCAkU0VEIC1lICdzL1suXS8tL2cnYCR7dmVyc3VmZml4fSR7c2hhcmVkX2V4dH0nCi0gICAgICA7OwotICAgIHB3MzIqKQotICAgICAgIyBwdzMyIERMTHMgdXNlICdwdycgcHJlZml4IHJhdGhlciB0aGFuICdsaWInCi0gICAgICBsaWJyYXJ5X25hbWVzX3NwZWM9J2BlY2hvICR7bGlibmFtZX0gfCBzZWQgLWUgJ3MvXmxpYi9wdy8nYGBlY2hvICR7cmVsZWFzZX0gfCAkU0VEIC1lICdzL1suXS8tL2cnYCR7dmVyc3VmZml4fSR7c2hhcmVkX2V4dH0nCi0gICAgICA7OwotICAgIGVzYWMKLSAgICBkeW5hbWljX2xpbmtlcj0nV2luMzIgbGQuZXhlJwotICAgIDs7Ci0KLSAgKixjbCopCi0gICAgIyBOYXRpdmUgTVNWQwotICAgIGxpYm5hbWVfc3BlYz0nJG5hbWUnCi0gICAgc29uYW1lX3NwZWM9JyR7bGlibmFtZX1gZWNobyAke3JlbGVhc2V9IHwgJFNFRCAtZSAncy9bLl0vLS9nJ2Ake3ZlcnN1ZmZpeH0ke3NoYXJlZF9leHR9JwotICAgIGxpYnJhcnlfbmFtZXNfc3BlYz0nJHtsaWJuYW1lfS5kbGwubGliJwotCi0gICAgY2FzZSAkYnVpbGRfb3MgaW4KLSAgICBtaW5ndyopCi0gICAgICBzeXNfbGliX3NlYXJjaF9wYXRoX3NwZWM9Ci0gICAgICBsdF9zYXZlX2lmcz0kSUZTCi0gICAgICBJRlM9JzsnCi0gICAgICBmb3IgbHRfcGF0aCBpbiAkTElCCi0gICAgICBkbwotICAgICAgICBJRlM9JGx0X3NhdmVfaWZzCi0gICAgICAgICMgTGV0IERPUyB2YXJpYWJsZSBleHBhbnNpb24gcHJpbnQgdGhlIHNob3J0IDguMyBzdHlsZSBmaWxlIG5hbWUuCi0gICAgICAgIGx0X3BhdGg9YGNkICIkbHRfcGF0aCIgMj4vZGV2L251bGwgJiYgY21kIC8vQyAiZm9yICVpIGluICgiLiIpIGRvIEBlY2hvICV+c2kiYAotICAgICAgICBzeXNfbGliX3NlYXJjaF9wYXRoX3NwZWM9IiRzeXNfbGliX3NlYXJjaF9wYXRoX3NwZWMgJGx0X3BhdGgiCi0gICAgICBkb25lCi0gICAgICBJRlM9JGx0X3NhdmVfaWZzCi0gICAgICAjIENvbnZlcnQgdG8gTVNZUyBzdHlsZS4KLSAgICAgIHN5c19saWJfc2VhcmNoX3BhdGhfc3BlYz1gJEVDSE8gIiRzeXNfbGliX3NlYXJjaF9wYXRoX3NwZWMiIHwgc2VkIC1lICdzfFxcXFx8L3xnJyAtZSAnc3wgXFwoW2EtekEtWl1cXCk6fCAvXFwxfGcnIC1lICdzfF4gfHwnYAotICAgICAgOzsKLSAgICBjeWd3aW4qKQotICAgICAgIyBDb252ZXJ0IHRvIHVuaXggZm9ybSwgdGhlbiB0byBkb3MgZm9ybSwgdGhlbiBiYWNrIHRvIHVuaXggZm9ybQotICAgICAgIyBidXQgdGhpcyB0aW1lIGRvcyBzdHlsZSAobm8gc3BhY2VzISkgc28gdGhhdCB0aGUgdW5peCBmb3JtIGxvb2tzCi0gICAgICAjIGxpa2UgL2N5Z2RyaXZlL2MvUFJPR1JBfjE6L2N5Z2RyLi4uCi0gICAgICBzeXNfbGliX3NlYXJjaF9wYXRoX3NwZWM9YGN5Z3BhdGggLS1wYXRoIC0tdW5peCAiJExJQiJgCi0gICAgICBzeXNfbGliX3NlYXJjaF9wYXRoX3NwZWM9YGN5Z3BhdGggLS1wYXRoIC0tZG9zICIkc3lzX2xpYl9zZWFyY2hfcGF0aF9zcGVjIiAyPi9kZXYvbnVsbGAKLSAgICAgIHN5c19saWJfc2VhcmNoX3BhdGhfc3BlYz1gY3lncGF0aCAtLXBhdGggLS11bml4ICIkc3lzX2xpYl9zZWFyY2hfcGF0aF9zcGVjIiB8ICRTRUQgLWUgInMvJFBBVEhfU0VQQVJBVE9SLyAvZyJgCi0gICAgICA7OwotICAgICopCi0gICAgICBzeXNfbGliX3NlYXJjaF9wYXRoX3NwZWM9IiRMSUIiCi0gICAgICBpZiAkRUNITyAiJHN5c19saWJfc2VhcmNoX3BhdGhfc3BlYyIgfCAkR1JFUCAnO1tjLXpDLVpdOi8nID4vZGV2L251bGw7IHRoZW4KLSAgICAgICAgIyBJdCBpcyBtb3N0IHByb2JhYmx5IGEgV2luZG93cyBmb3JtYXQgUEFUSC4KLSAgICAgICAgc3lzX2xpYl9zZWFyY2hfcGF0aF9zcGVjPWAkRUNITyAiJHN5c19saWJfc2VhcmNoX3BhdGhfc3BlYyIgfCAkU0VEIC1lICdzLzsvIC9nJ2AKLSAgICAgIGVsc2UKLSAgICAgICAgc3lzX2xpYl9zZWFyY2hfcGF0aF9zcGVjPWAkRUNITyAiJHN5c19saWJfc2VhcmNoX3BhdGhfc3BlYyIgfCAkU0VEIC1lICJzLyRQQVRIX1NFUEFSQVRPUi8gL2ciYAotICAgICAgZmkKLSAgICAgICMgRklYTUU6IGZpbmQgdGhlIHNob3J0IG5hbWUgb3IgdGhlIHBhdGggY29tcG9uZW50cywgYXMgc3BhY2VzIGFyZQotICAgICAgIyBjb21tb24uIChlLmcuICJQcm9ncmFtIEZpbGVzIiAtPiAiUFJPR1JBfjEiKQotICAgICAgOzsKLSAgICBlc2FjCi0KLSAgICAjIERMTCBpcyBpbnN0YWxsZWQgdG8gJChsaWJkaXIpLy4uL2JpbiBieSBwb3N0aW5zdGFsbF9jbWRzCi0gICAgcG9zdGluc3RhbGxfY21kcz0nYmFzZV9maWxlPWBiYXNlbmFtZSBcJHtmaWxlfWB+Ci0gICAgICBkbHBhdGg9YCRTSEVMTCAyPiYxIC1jICdcJycuICRkaXIvJ1wnJ1wke2Jhc2VfZmlsZX0nXCcnaTsgZWNobyBcJGRsbmFtZSdcJydgfgotICAgICAgZGxkaXI9JGRlc3RkaXIvYGRpcm5hbWUgXCRkbHBhdGhgfgotICAgICAgdGVzdCAtZCBcJGRsZGlyIHx8IG1rZGlyIC1wIFwkZGxkaXJ+Ci0gICAgICAkaW5zdGFsbF9wcm9nICRkaXIvJGRsbmFtZSBcJGRsZGlyLyRkbG5hbWUnCi0gICAgcG9zdHVuaW5zdGFsbF9jbWRzPSdkbGRsbD1gJFNIRUxMIDI+JjEgLWMgJ1wnJy4gJGZpbGU7IGVjaG8gXCRkbG5hbWUnXCcnYH4KLSAgICAgIGRscGF0aD0kZGlyL1wkZGxkbGx+Ci0gICAgICAgJFJNIFwkZGxwYXRoJwotICAgIHNobGlicGF0aF9vdmVycmlkZXNfcnVucGF0aD15ZXMKLSAgICBkeW5hbWljX2xpbmtlcj0nV2luMzIgbGluay5leGUnCi0gICAgOzsKLQotICAqKQotICAgICMgQXNzdW1lIE1TVkMgd3JhcHBlcgotICAgIGxpYnJhcnlfbmFtZXNfc3BlYz0nJHtsaWJuYW1lfWBlY2hvICR7cmVsZWFzZX0gfCAkU0VEIC1lICdzL1suXS8tL2cnYCR7dmVyc3VmZml4fSR7c2hhcmVkX2V4dH0gJGxpYm5hbWUubGliJwotICAgIGR5bmFtaWNfbGlua2VyPSdXaW4zMiBsZC5leGUnCi0gICAgOzsKLSAgZXNhYwotICAjIEZJWE1FOiBmaXJzdCB3ZSBzaG91bGQgc2VhcmNoIC4gYW5kIHRoZSBkaXJlY3RvcnkgdGhlIGV4ZWN1dGFibGUgaXMgaW4KLSAgc2hsaWJwYXRoX3Zhcj1QQVRICi0gIDs7Ci0KLWRhcndpbiogfCByaGFwc29keSopCi0gIGR5bmFtaWNfbGlua2VyPSIkaG9zdF9vcyBkeWxkIgotICB2ZXJzaW9uX3R5cGU9ZGFyd2luCi0gIG5lZWRfbGliX3ByZWZpeD1ubwotICBuZWVkX3ZlcnNpb249bm8KLSAgbGlicmFyeV9uYW1lc19zcGVjPScke2xpYm5hbWV9JHtyZWxlYXNlfSR7bWFqb3J9JHNoYXJlZF9leHQgJHtsaWJuYW1lfSRzaGFyZWRfZXh0JwotICBzb25hbWVfc3BlYz0nJHtsaWJuYW1lfSR7cmVsZWFzZX0ke21ham9yfSRzaGFyZWRfZXh0JwotICBzaGxpYnBhdGhfb3ZlcnJpZGVzX3J1bnBhdGg9eWVzCi0gIHNobGlicGF0aF92YXI9RFlMRF9MSUJSQVJZX1BBVEgKLSAgc2hyZXh0X2NtZHM9J2B0ZXN0IC4kbW9kdWxlID0gLnllcyAmJiBlY2hvIC5zbyB8fCBlY2hvIC5keWxpYmAnCi0KLSAgc3lzX2xpYl9zZWFyY2hfcGF0aF9zcGVjPSIkc3lzX2xpYl9zZWFyY2hfcGF0aF9zcGVjIC91c3IvbG9jYWwvbGliIgotICBzeXNfbGliX2Rsc2VhcmNoX3BhdGhfc3BlYz0nL3Vzci9sb2NhbC9saWIgL2xpYiAvdXNyL2xpYicKLSAgOzsKLQotZGd1eCopCi0gIHZlcnNpb25fdHlwZT1saW51eAotICBuZWVkX2xpYl9wcmVmaXg9bm8KLSAgbmVlZF92ZXJzaW9uPW5vCi0gIGxpYnJhcnlfbmFtZXNfc3BlYz0nJHtsaWJuYW1lfSR7cmVsZWFzZX0ke3NoYXJlZF9leHR9JHZlcnN1ZmZpeCAke2xpYm5hbWV9JHtyZWxlYXNlfSR7c2hhcmVkX2V4dH0kbWFqb3IgJGxpYm5hbWUkc2hhcmVkX2V4dCcKLSAgc29uYW1lX3NwZWM9JyR7bGlibmFtZX0ke3JlbGVhc2V9JHtzaGFyZWRfZXh0fSRtYWpvcicKLSAgc2hsaWJwYXRoX3Zhcj1MRF9MSUJSQVJZX1BBVEgKLSAgOzsKLQotZnJlZWJzZDEqKQotICBkeW5hbWljX2xpbmtlcj1ubwotICA7OwotCi1mcmVlYnNkKiB8IGRyYWdvbmZseSopCi0gICMgRHJhZ29uRmx5IGRvZXMgbm90IGhhdmUgYW91dC4gIFdoZW4vaWYgdGhleSBpbXBsZW1lbnQgYSBuZXcKLSAgIyB2ZXJzaW9uaW5nIG1lY2hhbmlzbSwgYWRqdXN0IHRoaXMuCi0gIGlmIHRlc3QgLXggL3Vzci9iaW4vb2JqZm9ybWF0OyB0aGVuCi0gICAgb2JqZm9ybWF0PWAvdXNyL2Jpbi9vYmpmb3JtYXRgCi0gIGVsc2UKLSAgICBjYXNlICRob3N0X29zIGluCi0gICAgZnJlZWJzZFsxMjNdKikgb2JqZm9ybWF0PWFvdXQgOzsKLSAgICAqKSBvYmpmb3JtYXQ9ZWxmIDs7Ci0gICAgZXNhYwotICBmaQotICB2ZXJzaW9uX3R5cGU9ZnJlZWJzZC0kb2JqZm9ybWF0Ci0gIGNhc2UgJHZlcnNpb25fdHlwZSBpbgotICAgIGZyZWVic2QtZWxmKikKLSAgICAgIGxpYnJhcnlfbmFtZXNfc3BlYz0nJHtsaWJuYW1lfSR7cmVsZWFzZX0ke3NoYXJlZF9leHR9JHZlcnN1ZmZpeCAke2xpYm5hbWV9JHtyZWxlYXNlfSR7c2hhcmVkX2V4dH0gJGxpYm5hbWUke3NoYXJlZF9leHR9JwotICAgICAgbmVlZF92ZXJzaW9uPW5vCi0gICAgICBuZWVkX2xpYl9wcmVmaXg9bm8KLSAgICAgIDs7Ci0gICAgZnJlZWJzZC0qKQotICAgICAgbGlicmFyeV9uYW1lc19zcGVjPScke2xpYm5hbWV9JHtyZWxlYXNlfSR7c2hhcmVkX2V4dH0kdmVyc3VmZml4ICRsaWJuYW1lJHtzaGFyZWRfZXh0fSR2ZXJzdWZmaXgnCi0gICAgICBuZWVkX3ZlcnNpb249eWVzCi0gICAgICA7OwotICBlc2FjCi0gIHNobGlicGF0aF92YXI9TERfTElCUkFSWV9QQVRICi0gIGNhc2UgJGhvc3Rfb3MgaW4KLSAgZnJlZWJzZDIqKQotICAgIHNobGlicGF0aF9vdmVycmlkZXNfcnVucGF0aD15ZXMKLSAgICA7OwotICBmcmVlYnNkMy5bMDFdKiB8IGZyZWVic2RlbGYzLlswMV0qKQotICAgIHNobGlicGF0aF9vdmVycmlkZXNfcnVucGF0aD15ZXMKLSAgICBoYXJkY29kZV9pbnRvX2xpYnM9eWVzCi0gICAgOzsKLSAgZnJlZWJzZDMuWzItOV0qIHwgZnJlZWJzZGVsZjMuWzItOV0qIHwgXAotICBmcmVlYnNkNC5bMC01XSB8IGZyZWVic2RlbGY0LlswLTVdIHwgZnJlZWJzZDQuMS4xIHwgZnJlZWJzZGVsZjQuMS4xKQotICAgIHNobGlicGF0aF9vdmVycmlkZXNfcnVucGF0aD1ubwotICAgIGhhcmRjb2RlX2ludG9fbGlicz15ZXMKLSAgICA7OwotICAqKSAjIGZyb20gNC42IG9uLCBhbmQgRHJhZ29uRmx5Ci0gICAgc2hsaWJwYXRoX292ZXJyaWRlc19ydW5wYXRoPXllcwotICAgIGhhcmRjb2RlX2ludG9fbGlicz15ZXMKLSAgICA7OwotICBlc2FjCi0gIDs7Ci0KLWdudSopCi0gIHZlcnNpb25fdHlwZT1saW51eAotICBuZWVkX2xpYl9wcmVmaXg9bm8KLSAgbmVlZF92ZXJzaW9uPW5vCi0gIGxpYnJhcnlfbmFtZXNfc3BlYz0nJHtsaWJuYW1lfSR7cmVsZWFzZX0ke3NoYXJlZF9leHR9JHZlcnN1ZmZpeCAke2xpYm5hbWV9JHtyZWxlYXNlfSR7c2hhcmVkX2V4dH0ke21ham9yfSAke2xpYm5hbWV9JHtzaGFyZWRfZXh0fScKLSAgc29uYW1lX3NwZWM9JyR7bGlibmFtZX0ke3JlbGVhc2V9JHtzaGFyZWRfZXh0fSRtYWpvcicKLSAgc2hsaWJwYXRoX3Zhcj1MRF9MSUJSQVJZX1BBVEgKLSAgaGFyZGNvZGVfaW50b19saWJzPXllcwotICA7OwotCi1oYWlrdSopCi0gIHZlcnNpb25fdHlwZT1saW51eAotICBuZWVkX2xpYl9wcmVmaXg9bm8KLSAgbmVlZF92ZXJzaW9uPW5vCi0gIGR5bmFtaWNfbGlua2VyPSIkaG9zdF9vcyBydW50aW1lX2xvYWRlciIKLSAgbGlicmFyeV9uYW1lc19zcGVjPScke2xpYm5hbWV9JHtyZWxlYXNlfSR7c2hhcmVkX2V4dH0kdmVyc3VmZml4ICR7bGlibmFtZX0ke3JlbGVhc2V9JHtzaGFyZWRfZXh0fSR7bWFqb3J9ICR7bGlibmFtZX0ke3NoYXJlZF9leHR9JwotICBzb25hbWVfc3BlYz0nJHtsaWJuYW1lfSR7cmVsZWFzZX0ke3NoYXJlZF9leHR9JG1ham9yJwotICBzaGxpYnBhdGhfdmFyPUxJQlJBUllfUEFUSAotICBzaGxpYnBhdGhfb3ZlcnJpZGVzX3J1bnBhdGg9eWVzCi0gIHN5c19saWJfZGxzZWFyY2hfcGF0aF9zcGVjPScvYm9vdC9ob21lL2NvbmZpZy9saWIgL2Jvb3QvY29tbW9uL2xpYiAvYm9vdC9zeXN0ZW0vbGliJwotICBoYXJkY29kZV9pbnRvX2xpYnM9eWVzCi0gIDs7Ci0KLWhwdXg5KiB8IGhwdXgxMCogfCBocHV4MTEqKQotICAjIEdpdmUgYSBzb25hbWUgY29ycmVzcG9uZGluZyB0byB0aGUgbWFqb3IgdmVyc2lvbiBzbyB0aGF0IGRsZC5zbCByZWZ1c2VzIHRvCi0gICMgbGluayBhZ2FpbnN0IG90aGVyIHZlcnNpb25zLgotICB2ZXJzaW9uX3R5cGU9c3Vub3MKLSAgbmVlZF9saWJfcHJlZml4PW5vCi0gIG5lZWRfdmVyc2lvbj1ubwotICBjYXNlICRob3N0X2NwdSBpbgotICBpYTY0KikKLSAgICBzaHJleHRfY21kcz0nLnNvJwotICAgIGhhcmRjb2RlX2ludG9fbGlicz15ZXMKLSAgICBkeW5hbWljX2xpbmtlcj0iJGhvc3Rfb3MgZGxkLnNvIgotICAgIHNobGlicGF0aF92YXI9TERfTElCUkFSWV9QQVRICi0gICAgc2hsaWJwYXRoX292ZXJyaWRlc19ydW5wYXRoPXllcyAjIFVubGVzcyArbm9lbnZ2YXIgaXMgc3BlY2lmaWVkLgotICAgIGxpYnJhcnlfbmFtZXNfc3BlYz0nJHtsaWJuYW1lfSR7cmVsZWFzZX0ke3NoYXJlZF9leHR9JHZlcnN1ZmZpeCAke2xpYm5hbWV9JHtyZWxlYXNlfSR7c2hhcmVkX2V4dH0kbWFqb3IgJGxpYm5hbWUke3NoYXJlZF9leHR9JwotICAgIHNvbmFtZV9zcGVjPScke2xpYm5hbWV9JHtyZWxlYXNlfSR7c2hhcmVkX2V4dH0kbWFqb3InCi0gICAgaWYgdGVzdCAiWCRIUFVYX0lBNjRfTU9ERSIgPSBYMzI7IHRoZW4KLSAgICAgIHN5c19saWJfc2VhcmNoX3BhdGhfc3BlYz0iL3Vzci9saWIvaHB1eDMyIC91c3IvbG9jYWwvbGliL2hwdXgzMiAvdXNyL2xvY2FsL2xpYiIKLSAgICBlbHNlCi0gICAgICBzeXNfbGliX3NlYXJjaF9wYXRoX3NwZWM9Ii91c3IvbGliL2hwdXg2NCAvdXNyL2xvY2FsL2xpYi9ocHV4NjQiCi0gICAgZmkKLSAgICBzeXNfbGliX2Rsc2VhcmNoX3BhdGhfc3BlYz0kc3lzX2xpYl9zZWFyY2hfcGF0aF9zcGVjCi0gICAgOzsKLSAgaHBwYSo2NCopCi0gICAgc2hyZXh0X2NtZHM9Jy5zbCcKLSAgICBoYXJkY29kZV9pbnRvX2xpYnM9eWVzCi0gICAgZHluYW1pY19saW5rZXI9IiRob3N0X29zIGRsZC5zbCIKLSAgICBzaGxpYnBhdGhfdmFyPUxEX0xJQlJBUllfUEFUSCAjIEhvdyBzaG91bGQgd2UgaGFuZGxlIFNITElCX1BBVEgKLSAgICBzaGxpYnBhdGhfb3ZlcnJpZGVzX3J1bnBhdGg9eWVzICMgVW5sZXNzICtub2VudnZhciBpcyBzcGVjaWZpZWQuCi0gICAgbGlicmFyeV9uYW1lc19zcGVjPScke2xpYm5hbWV9JHtyZWxlYXNlfSR7c2hhcmVkX2V4dH0kdmVyc3VmZml4ICR7bGlibmFtZX0ke3JlbGVhc2V9JHtzaGFyZWRfZXh0fSRtYWpvciAkbGlibmFtZSR7c2hhcmVkX2V4dH0nCi0gICAgc29uYW1lX3NwZWM9JyR7bGlibmFtZX0ke3JlbGVhc2V9JHtzaGFyZWRfZXh0fSRtYWpvcicKLSAgICBzeXNfbGliX3NlYXJjaF9wYXRoX3NwZWM9Ii91c3IvbGliL3BhMjBfNjQgL3Vzci9jY3MvbGliL3BhMjBfNjQiCi0gICAgc3lzX2xpYl9kbHNlYXJjaF9wYXRoX3NwZWM9JHN5c19saWJfc2VhcmNoX3BhdGhfc3BlYwotICAgIDs7Ci0gICopCi0gICAgc2hyZXh0X2NtZHM9Jy5zbCcKLSAgICBkeW5hbWljX2xpbmtlcj0iJGhvc3Rfb3MgZGxkLnNsIgotICAgIHNobGlicGF0aF92YXI9U0hMSUJfUEFUSAotICAgIHNobGlicGF0aF9vdmVycmlkZXNfcnVucGF0aD1ubyAjICtzIGlzIHJlcXVpcmVkIHRvIGVuYWJsZSBTSExJQl9QQVRICi0gICAgbGlicmFyeV9uYW1lc19zcGVjPScke2xpYm5hbWV9JHtyZWxlYXNlfSR7c2hhcmVkX2V4dH0kdmVyc3VmZml4ICR7bGlibmFtZX0ke3JlbGVhc2V9JHtzaGFyZWRfZXh0fSRtYWpvciAkbGlibmFtZSR7c2hhcmVkX2V4dH0nCi0gICAgc29uYW1lX3NwZWM9JyR7bGlibmFtZX0ke3JlbGVhc2V9JHtzaGFyZWRfZXh0fSRtYWpvcicKLSAgICA7OwotICBlc2FjCi0gICMgSFAtVVggcnVucyAqcmVhbGx5KiBzbG93bHkgdW5sZXNzIHNoYXJlZCBsaWJyYXJpZXMgYXJlIG1vZGUgNTU1LCAuLi4KLSAgcG9zdGluc3RhbGxfY21kcz0nY2htb2QgNTU1ICRsaWInCi0gICMgb3IgZmFpbHMgb3V0cmlnaHQsIHNvIG92ZXJyaWRlIGF0b21pY2FsbHk6Ci0gIGluc3RhbGxfb3ZlcnJpZGVfbW9kZT01NTUKLSAgOzsKLQotaW50ZXJpeFszLTldKikKLSAgdmVyc2lvbl90eXBlPWxpbnV4Ci0gIG5lZWRfbGliX3ByZWZpeD1ubwotICBuZWVkX3ZlcnNpb249bm8KLSAgbGlicmFyeV9uYW1lc19zcGVjPScke2xpYm5hbWV9JHtyZWxlYXNlfSR7c2hhcmVkX2V4dH0kdmVyc3VmZml4ICR7bGlibmFtZX0ke3JlbGVhc2V9JHtzaGFyZWRfZXh0fSRtYWpvciAke2xpYm5hbWV9JHtzaGFyZWRfZXh0fScKLSAgc29uYW1lX3NwZWM9JyR7bGlibmFtZX0ke3JlbGVhc2V9JHtzaGFyZWRfZXh0fSRtYWpvcicKLSAgZHluYW1pY19saW5rZXI9J0ludGVyaXggMy54IGxkLnNvLjEgKFBFLCBsaWtlIEVMRiknCi0gIHNobGlicGF0aF92YXI9TERfTElCUkFSWV9QQVRICi0gIHNobGlicGF0aF9vdmVycmlkZXNfcnVucGF0aD1ubwotICBoYXJkY29kZV9pbnRvX2xpYnM9eWVzCi0gIDs7Ci0KLWlyaXg1KiB8IGlyaXg2KiB8IG5vbnN0b3B1eCopCi0gIGNhc2UgJGhvc3Rfb3MgaW4KLSAgICBub25zdG9wdXgqKSB2ZXJzaW9uX3R5cGU9bm9uc3RvcHV4IDs7Ci0gICAgKikKLQlpZiB0ZXN0ICIkbHRfY3ZfcHJvZ19nbnVfbGQiID0geWVzOyB0aGVuCi0JCXZlcnNpb25fdHlwZT1saW51eAotCWVsc2UKLQkJdmVyc2lvbl90eXBlPWlyaXgKLQlmaSA7OwotICBlc2FjCi0gIG5lZWRfbGliX3ByZWZpeD1ubwotICBuZWVkX3ZlcnNpb249bm8KLSAgc29uYW1lX3NwZWM9JyR7bGlibmFtZX0ke3JlbGVhc2V9JHtzaGFyZWRfZXh0fSRtYWpvcicKLSAgbGlicmFyeV9uYW1lc19zcGVjPScke2xpYm5hbWV9JHtyZWxlYXNlfSR7c2hhcmVkX2V4dH0kdmVyc3VmZml4ICR7bGlibmFtZX0ke3JlbGVhc2V9JHtzaGFyZWRfZXh0fSRtYWpvciAke2xpYm5hbWV9JHtyZWxlYXNlfSR7c2hhcmVkX2V4dH0gJGxpYm5hbWUke3NoYXJlZF9leHR9JwotICBjYXNlICRob3N0X29zIGluCi0gIGlyaXg1KiB8IG5vbnN0b3B1eCopCi0gICAgbGlic3VmZj0gc2hsaWJzdWZmPQotICAgIDs7Ci0gICopCi0gICAgY2FzZSAkTEQgaW4gIyBsaWJ0b29sLm00IHdpbGwgYWRkIG9uZSBvZiB0aGVzZSBzd2l0Y2hlcyB0byBMRAotICAgICotMzJ8KiItMzIgInwqLW1lbGYzMmJzbWlwfCoiLW1lbGYzMmJzbWlwICIpCi0gICAgICBsaWJzdWZmPSBzaGxpYnN1ZmY9IGxpYm1hZ2ljPTMyLWJpdDs7Ci0gICAgKi1uMzJ8KiItbjMyICJ8Ki1tZWxmMzJibWlwbjMyfCoiLW1lbGYzMmJtaXBuMzIgIikKLSAgICAgIGxpYnN1ZmY9MzIgc2hsaWJzdWZmPU4zMiBsaWJtYWdpYz1OMzI7OwotICAgICotNjR8KiItNjQgInwqLW1lbGY2NGJtaXB8KiItbWVsZjY0Ym1pcCAiKQotICAgICAgbGlic3VmZj02NCBzaGxpYnN1ZmY9NjQgbGlibWFnaWM9NjQtYml0OzsKLSAgICAqKSBsaWJzdWZmPSBzaGxpYnN1ZmY9IGxpYm1hZ2ljPW5ldmVyLW1hdGNoOzsKLSAgICBlc2FjCi0gICAgOzsKLSAgZXNhYwotICBzaGxpYnBhdGhfdmFyPUxEX0xJQlJBUlkke3NobGlic3VmZn1fUEFUSAotICBzaGxpYnBhdGhfb3ZlcnJpZGVzX3J1bnBhdGg9bm8KLSAgc3lzX2xpYl9zZWFyY2hfcGF0aF9zcGVjPSIvdXNyL2xpYiR7bGlic3VmZn0gL2xpYiR7bGlic3VmZn0gL3Vzci9sb2NhbC9saWIke2xpYnN1ZmZ9IgotICBzeXNfbGliX2Rsc2VhcmNoX3BhdGhfc3BlYz0iL3Vzci9saWIke2xpYnN1ZmZ9IC9saWIke2xpYnN1ZmZ9IgotICBoYXJkY29kZV9pbnRvX2xpYnM9eWVzCi0gIDs7Ci0KLSMgTm8gc2hhcmVkIGxpYiBzdXBwb3J0IGZvciBMaW51eCBvbGRsZCwgYW91dCwgb3IgY29mZi4KLWxpbnV4Km9sZGxkKiB8IGxpbnV4KmFvdXQqIHwgbGludXgqY29mZiopCi0gIGR5bmFtaWNfbGlua2VyPW5vCi0gIDs7Ci0KLSMgVGhpcyBtdXN0IGJlIExpbnV4IEVMRi4KLWxpbnV4KiB8IGsqYnNkKi1nbnUgfCBrb3BlbnNvbGFyaXMqLWdudSkKLSAgdmVyc2lvbl90eXBlPWxpbnV4Ci0gIG5lZWRfbGliX3ByZWZpeD1ubwotICBuZWVkX3ZlcnNpb249bm8KLSAgbGlicmFyeV9uYW1lc19zcGVjPScke2xpYm5hbWV9JHtyZWxlYXNlfSR7c2hhcmVkX2V4dH0kdmVyc3VmZml4ICR7bGlibmFtZX0ke3JlbGVhc2V9JHtzaGFyZWRfZXh0fSRtYWpvciAkbGlibmFtZSR7c2hhcmVkX2V4dH0nCi0gIHNvbmFtZV9zcGVjPScke2xpYm5hbWV9JHtyZWxlYXNlfSR7c2hhcmVkX2V4dH0kbWFqb3InCi0gIGZpbmlzaF9jbWRzPSdQQVRIPSJcJFBBVEg6L3NiaW4iIGxkY29uZmlnIC1uICRsaWJkaXInCi0gIHNobGlicGF0aF92YXI9TERfTElCUkFSWV9QQVRICi0gIHNobGlicGF0aF9vdmVycmlkZXNfcnVucGF0aD1ubwotCi0gICMgU29tZSBiaW51dGlscyBsZCBhcmUgcGF0Y2hlZCB0byBzZXQgRFRfUlVOUEFUSAotICBpZiAke2x0X2N2X3NobGlicGF0aF9vdmVycmlkZXNfcnVucGF0aCs6fSBmYWxzZTsgdGhlbiA6Ci0gICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2Ci1lbHNlCi0gIGx0X2N2X3NobGlicGF0aF9vdmVycmlkZXNfcnVucGF0aD1ubwotICAgIHNhdmVfTERGTEFHUz0kTERGTEFHUwotICAgIHNhdmVfbGliZGlyPSRsaWJkaXIKLSAgICBldmFsICJsaWJkaXI9L2Zvbzsgd2w9XCIkbHRfcHJvZ19jb21waWxlcl93bFwiOyBcCi0JIExERkxBR1M9XCJcJExERkxBR1MgJGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWNcIiIKLSAgICBjYXQgY29uZmRlZnMuaCAtIDw8X0FDRU9GID5jb25mdGVzdC4kYWNfZXh0Ci0vKiBlbmQgY29uZmRlZnMuaC4gICovCi0KLWludAotbWFpbiAoKQotewotCi0gIDsKLSAgcmV0dXJuIDA7Ci19Ci1fQUNFT0YKLWlmIGFjX2ZuX2NfdHJ5X2xpbmsgIiRMSU5FTk8iOyB0aGVuIDoKLSAgaWYgICgkT0JKRFVNUCAtcCBjb25mdGVzdCRhY19leGVleHQpIDI+L2Rldi9udWxsIHwgZ3JlcCAiUlVOUEFUSC4qJGxpYmRpciIgPi9kZXYvbnVsbDsgdGhlbiA6Ci0gIGx0X2N2X3NobGlicGF0aF9vdmVycmlkZXNfcnVucGF0aD15ZXMKLWZpCi1maQotcm0gLWYgY29yZSBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBcCi0gICAgY29uZnRlc3QkYWNfZXhlZXh0IGNvbmZ0ZXN0LiRhY19leHQKLSAgICBMREZMQUdTPSRzYXZlX0xERkxBR1MKLSAgICBsaWJkaXI9JHNhdmVfbGliZGlyCi0KLWZpCi0KLSAgc2hsaWJwYXRoX292ZXJyaWRlc19ydW5wYXRoPSRsdF9jdl9zaGxpYnBhdGhfb3ZlcnJpZGVzX3J1bnBhdGgKLQotICAjIFRoaXMgaW1wbGllcyBubyBmYXN0X2luc3RhbGwsIHdoaWNoIGlzIHVuYWNjZXB0YWJsZS4KLSAgIyBTb21lIHJld29yayB3aWxsIGJlIG5lZWRlZCB0byBhbGxvdyBmb3IgZmFzdF9pbnN0YWxsCi0gICMgYmVmb3JlIHRoaXMgY2FuIGJlIGVuYWJsZWQuCi0gIGhhcmRjb2RlX2ludG9fbGlicz15ZXMKLQotICAjIEFwcGVuZCBsZC5zby5jb25mIGNvbnRlbnRzIHRvIHRoZSBzZWFyY2ggcGF0aAotICBpZiB0ZXN0IC1mIC9ldGMvbGQuc28uY29uZjsgdGhlbgotICAgIGx0X2xkX2V4dHJhPWBhd2sgJy9eaW5jbHVkZSAvIHsgc3lzdGVtKHNwcmludGYoImNkIC9ldGM7IGNhdCAlcyAyPi9kZXYvbnVsbCIsIFwkMikpOyBza2lwID0gMTsgfSB7IGlmICghc2tpcCkgcHJpbnQgXCQwOyBza2lwID0gMDsgfScgPCAvZXRjL2xkLnNvLmNvbmYgfCAkU0VEIC1lICdzLyMuKi8vOy9eWwkgXSpod2NhcFsJIF0vZDtzL1s6LAldLyAvZztzLz1bXj1dKiQvLztzLz1bXj0gXSogLyAvZztzLyIvL2c7L14kL2QnIHwgdHIgJ1xuJyAnICdgCi0gICAgc3lzX2xpYl9kbHNlYXJjaF9wYXRoX3NwZWM9Ii9saWIgL3Vzci9saWIgJGx0X2xkX2V4dHJhIgotICBmaQotCi0gICMgV2UgdXNlZCB0byB0ZXN0IGZvciAvbGliL2xkLnNvLjEgYW5kIGRpc2FibGUgc2hhcmVkIGxpYnJhcmllcyBvbgotICAjIHBvd2VycGMsIGJlY2F1c2UgTWtMaW51eCBvbmx5IHN1cHBvcnRlZCBzaGFyZWQgbGlicmFyaWVzIHdpdGggdGhlCi0gICMgR05VIGR5bmFtaWMgbGlua2VyLiAgU2luY2UgdGhpcyB3YXMgYnJva2VuIHdpdGggY3Jvc3MgY29tcGlsZXJzLAotICAjIG1vc3QgcG93ZXJwYy1saW51eCBib3hlcyBzdXBwb3J0IGR5bmFtaWMgbGlua2luZyB0aGVzZSBkYXlzIGFuZAotICAjIHBlb3BsZSBjYW4gYWx3YXlzIC0tZGlzYWJsZS1zaGFyZWQsIHRoZSB0ZXN0IHdhcyByZW1vdmVkLCBhbmQgd2UKLSAgIyBhc3N1bWUgdGhlIEdOVS9MaW51eCBkeW5hbWljIGxpbmtlciBpcyBpbiB1c2UuCi0gIGR5bmFtaWNfbGlua2VyPSdHTlUvTGludXggbGQuc28nCi0gIDs7Ci0KLW5ldGJzZCopCi0gIHZlcnNpb25fdHlwZT1zdW5vcwotICBuZWVkX2xpYl9wcmVmaXg9bm8KLSAgbmVlZF92ZXJzaW9uPW5vCi0gIGlmIGVjaG8gX19FTEZfXyB8ICRDQyAtRSAtIHwgJEdSRVAgX19FTEZfXyA+L2Rldi9udWxsOyB0aGVuCi0gICAgbGlicmFyeV9uYW1lc19zcGVjPScke2xpYm5hbWV9JHtyZWxlYXNlfSR7c2hhcmVkX2V4dH0kdmVyc3VmZml4ICR7bGlibmFtZX0ke3NoYXJlZF9leHR9JHZlcnN1ZmZpeCcKLSAgICBmaW5pc2hfY21kcz0nUEFUSD0iXCRQQVRIOi9zYmluIiBsZGNvbmZpZyAtbSAkbGliZGlyJwotICAgIGR5bmFtaWNfbGlua2VyPSdOZXRCU0QgKGEub3V0KSBsZC5zbycKLSAgZWxzZQotICAgIGxpYnJhcnlfbmFtZXNfc3BlYz0nJHtsaWJuYW1lfSR7cmVsZWFzZX0ke3NoYXJlZF9leHR9JHZlcnN1ZmZpeCAke2xpYm5hbWV9JHtyZWxlYXNlfSR7c2hhcmVkX2V4dH0kbWFqb3IgJHtsaWJuYW1lfSR7c2hhcmVkX2V4dH0nCi0gICAgc29uYW1lX3NwZWM9JyR7bGlibmFtZX0ke3JlbGVhc2V9JHtzaGFyZWRfZXh0fSRtYWpvcicKLSAgICBkeW5hbWljX2xpbmtlcj0nTmV0QlNEIGxkLmVsZl9zbycKLSAgZmkKLSAgc2hsaWJwYXRoX3Zhcj1MRF9MSUJSQVJZX1BBVEgKLSAgc2hsaWJwYXRoX292ZXJyaWRlc19ydW5wYXRoPXllcwotICBoYXJkY29kZV9pbnRvX2xpYnM9eWVzCi0gIDs7Ci0KLW5ld3NvczYpCi0gIHZlcnNpb25fdHlwZT1saW51eAotICBsaWJyYXJ5X25hbWVzX3NwZWM9JyR7bGlibmFtZX0ke3JlbGVhc2V9JHtzaGFyZWRfZXh0fSR2ZXJzdWZmaXggJHtsaWJuYW1lfSR7cmVsZWFzZX0ke3NoYXJlZF9leHR9JG1ham9yICRsaWJuYW1lJHtzaGFyZWRfZXh0fScKLSAgc2hsaWJwYXRoX3Zhcj1MRF9MSUJSQVJZX1BBVEgKLSAgc2hsaWJwYXRoX292ZXJyaWRlc19ydW5wYXRoPXllcwotICA7OwotCi0qbnRvKiB8ICpxbngqKQotICB2ZXJzaW9uX3R5cGU9cW54Ci0gIG5lZWRfbGliX3ByZWZpeD1ubwotICBuZWVkX3ZlcnNpb249bm8KLSAgbGlicmFyeV9uYW1lc19zcGVjPScke2xpYm5hbWV9JHtyZWxlYXNlfSR7c2hhcmVkX2V4dH0kdmVyc3VmZml4ICR7bGlibmFtZX0ke3JlbGVhc2V9JHtzaGFyZWRfZXh0fSRtYWpvciAkbGlibmFtZSR7c2hhcmVkX2V4dH0nCi0gIHNvbmFtZV9zcGVjPScke2xpYm5hbWV9JHtyZWxlYXNlfSR7c2hhcmVkX2V4dH0kbWFqb3InCi0gIHNobGlicGF0aF92YXI9TERfTElCUkFSWV9QQVRICi0gIHNobGlicGF0aF9vdmVycmlkZXNfcnVucGF0aD1ubwotICBoYXJkY29kZV9pbnRvX2xpYnM9eWVzCi0gIGR5bmFtaWNfbGlua2VyPSdsZHFueC5zbycKLSAgOzsKLQotb3BlbmJzZCopCi0gIHZlcnNpb25fdHlwZT1zdW5vcwotICBzeXNfbGliX2Rsc2VhcmNoX3BhdGhfc3BlYz0iL3Vzci9saWIiCi0gIG5lZWRfbGliX3ByZWZpeD1ubwotICAjIFNvbWUgb2xkZXIgdmVyc2lvbnMgb2YgT3BlbkJTRCAoMy4zIGF0IGxlYXN0KSAqZG8qIG5lZWQgdmVyc2lvbmVkIGxpYnMuCi0gIGNhc2UgJGhvc3Rfb3MgaW4KLSAgICBvcGVuYnNkMy4zIHwgb3BlbmJzZDMuMy4qKQluZWVkX3ZlcnNpb249eWVzIDs7Ci0gICAgKikJCQkJbmVlZF92ZXJzaW9uPW5vICA7OwotICBlc2FjCi0gIGxpYnJhcnlfbmFtZXNfc3BlYz0nJHtsaWJuYW1lfSR7cmVsZWFzZX0ke3NoYXJlZF9leHR9JHZlcnN1ZmZpeCAke2xpYm5hbWV9JHtzaGFyZWRfZXh0fSR2ZXJzdWZmaXgnCi0gIGZpbmlzaF9jbWRzPSdQQVRIPSJcJFBBVEg6L3NiaW4iIGxkY29uZmlnIC1tICRsaWJkaXInCi0gIHNobGlicGF0aF92YXI9TERfTElCUkFSWV9QQVRICi0gIGlmIHRlc3QgLXogImBlY2hvIF9fRUxGX18gfCAkQ0MgLUUgLSB8ICRHUkVQIF9fRUxGX19gIiB8fCB0ZXN0ICIkaG9zdF9vcy0kaG9zdF9jcHUiID0gIm9wZW5ic2QyLjgtcG93ZXJwYyI7IHRoZW4KLSAgICBjYXNlICRob3N0X29zIGluCi0gICAgICBvcGVuYnNkMi5bODldIHwgb3BlbmJzZDIuWzg5XS4qKQotCXNobGlicGF0aF9vdmVycmlkZXNfcnVucGF0aD1ubwotCTs7Ci0gICAgICAqKQotCXNobGlicGF0aF9vdmVycmlkZXNfcnVucGF0aD15ZXMKLQk7OwotICAgICAgZXNhYwotICBlbHNlCi0gICAgc2hsaWJwYXRoX292ZXJyaWRlc19ydW5wYXRoPXllcwotICBmaQotICA7OwotCi1vczIqKQotICBsaWJuYW1lX3NwZWM9JyRuYW1lJwotICBzaHJleHRfY21kcz0iLmRsbCIKLSAgbmVlZF9saWJfcHJlZml4PW5vCi0gIGxpYnJhcnlfbmFtZXNfc3BlYz0nJGxpYm5hbWUke3NoYXJlZF9leHR9ICRsaWJuYW1lLmEnCi0gIGR5bmFtaWNfbGlua2VyPSdPUy8yIGxkLmV4ZScKLSAgc2hsaWJwYXRoX3Zhcj1MSUJQQVRICi0gIDs7Ci0KLW9zZjMqIHwgb3NmNCogfCBvc2Y1KikKLSAgdmVyc2lvbl90eXBlPW9zZgotICBuZWVkX2xpYl9wcmVmaXg9bm8KLSAgbmVlZF92ZXJzaW9uPW5vCi0gIHNvbmFtZV9zcGVjPScke2xpYm5hbWV9JHtyZWxlYXNlfSR7c2hhcmVkX2V4dH0kbWFqb3InCi0gIGxpYnJhcnlfbmFtZXNfc3BlYz0nJHtsaWJuYW1lfSR7cmVsZWFzZX0ke3NoYXJlZF9leHR9JHZlcnN1ZmZpeCAke2xpYm5hbWV9JHtyZWxlYXNlfSR7c2hhcmVkX2V4dH0kbWFqb3IgJGxpYm5hbWUke3NoYXJlZF9leHR9JwotICBzaGxpYnBhdGhfdmFyPUxEX0xJQlJBUllfUEFUSAotICBzeXNfbGliX3NlYXJjaF9wYXRoX3NwZWM9Ii91c3Ivc2hsaWIgL3Vzci9jY3MvbGliIC91c3IvbGliL2NtcGxycy9jYyAvdXNyL2xpYiAvdXNyL2xvY2FsL2xpYiAvdmFyL3NobGliIgotICBzeXNfbGliX2Rsc2VhcmNoX3BhdGhfc3BlYz0iJHN5c19saWJfc2VhcmNoX3BhdGhfc3BlYyIKLSAgOzsKLQotcmRvcyopCi0gIGR5bmFtaWNfbGlua2VyPW5vCi0gIDs7Ci0KLXNvbGFyaXMqKQotICB2ZXJzaW9uX3R5cGU9bGludXgKLSAgbmVlZF9saWJfcHJlZml4PW5vCi0gIG5lZWRfdmVyc2lvbj1ubwotICBsaWJyYXJ5X25hbWVzX3NwZWM9JyR7bGlibmFtZX0ke3JlbGVhc2V9JHtzaGFyZWRfZXh0fSR2ZXJzdWZmaXggJHtsaWJuYW1lfSR7cmVsZWFzZX0ke3NoYXJlZF9leHR9JG1ham9yICRsaWJuYW1lJHtzaGFyZWRfZXh0fScKLSAgc29uYW1lX3NwZWM9JyR7bGlibmFtZX0ke3JlbGVhc2V9JHtzaGFyZWRfZXh0fSRtYWpvcicKLSAgc2hsaWJwYXRoX3Zhcj1MRF9MSUJSQVJZX1BBVEgKLSAgc2hsaWJwYXRoX292ZXJyaWRlc19ydW5wYXRoPXllcwotICBoYXJkY29kZV9pbnRvX2xpYnM9eWVzCi0gICMgbGRkIGNvbXBsYWlucyB1bmxlc3MgbGlicmFyaWVzIGFyZSBleGVjdXRhYmxlCi0gIHBvc3RpbnN0YWxsX2NtZHM9J2NobW9kICt4ICRsaWInCi0gIDs7Ci0KLXN1bm9zNCopCi0gIHZlcnNpb25fdHlwZT1zdW5vcwotICBsaWJyYXJ5X25hbWVzX3NwZWM9JyR7bGlibmFtZX0ke3JlbGVhc2V9JHtzaGFyZWRfZXh0fSR2ZXJzdWZmaXggJHtsaWJuYW1lfSR7c2hhcmVkX2V4dH0kdmVyc3VmZml4JwotICBmaW5pc2hfY21kcz0nUEFUSD0iXCRQQVRIOi91c3IvZXRjIiBsZGNvbmZpZyAkbGliZGlyJwotICBzaGxpYnBhdGhfdmFyPUxEX0xJQlJBUllfUEFUSAotICBzaGxpYnBhdGhfb3ZlcnJpZGVzX3J1bnBhdGg9eWVzCi0gIGlmIHRlc3QgIiR3aXRoX2dudV9sZCIgPSB5ZXM7IHRoZW4KLSAgICBuZWVkX2xpYl9wcmVmaXg9bm8KLSAgZmkKLSAgbmVlZF92ZXJzaW9uPXllcwotICA7OwotCi1zeXN2NCB8IHN5c3Y0LjMqKQotICB2ZXJzaW9uX3R5cGU9bGludXgKLSAgbGlicmFyeV9uYW1lc19zcGVjPScke2xpYm5hbWV9JHtyZWxlYXNlfSR7c2hhcmVkX2V4dH0kdmVyc3VmZml4ICR7bGlibmFtZX0ke3JlbGVhc2V9JHtzaGFyZWRfZXh0fSRtYWpvciAkbGlibmFtZSR7c2hhcmVkX2V4dH0nCi0gIHNvbmFtZV9zcGVjPScke2xpYm5hbWV9JHtyZWxlYXNlfSR7c2hhcmVkX2V4dH0kbWFqb3InCi0gIHNobGlicGF0aF92YXI9TERfTElCUkFSWV9QQVRICi0gIGNhc2UgJGhvc3RfdmVuZG9yIGluCi0gICAgc25pKQotICAgICAgc2hsaWJwYXRoX292ZXJyaWRlc19ydW5wYXRoPW5vCi0gICAgICBuZWVkX2xpYl9wcmVmaXg9bm8KLSAgICAgIHJ1bnBhdGhfdmFyPUxEX1JVTl9QQVRICi0gICAgICA7OwotICAgIHNpZW1lbnMpCi0gICAgICBuZWVkX2xpYl9wcmVmaXg9bm8KLSAgICAgIDs7Ci0gICAgbW90b3JvbGEpCi0gICAgICBuZWVkX2xpYl9wcmVmaXg9bm8KLSAgICAgIG5lZWRfdmVyc2lvbj1ubwotICAgICAgc2hsaWJwYXRoX292ZXJyaWRlc19ydW5wYXRoPW5vCi0gICAgICBzeXNfbGliX3NlYXJjaF9wYXRoX3NwZWM9Jy9saWIgL3Vzci9saWIgL3Vzci9jY3MvbGliJwotICAgICAgOzsKLSAgZXNhYwotICA7OwotCi1zeXN2NCpNUCopCi0gIGlmIHRlc3QgLWQgL3Vzci9uZWMgO3RoZW4KLSAgICB2ZXJzaW9uX3R5cGU9bGludXgKLSAgICBsaWJyYXJ5X25hbWVzX3NwZWM9JyRsaWJuYW1lJHtzaGFyZWRfZXh0fS4kdmVyc3VmZml4ICRsaWJuYW1lJHtzaGFyZWRfZXh0fS4kbWFqb3IgJGxpYm5hbWUke3NoYXJlZF9leHR9JwotICAgIHNvbmFtZV9zcGVjPSckbGlibmFtZSR7c2hhcmVkX2V4dH0uJG1ham9yJwotICAgIHNobGlicGF0aF92YXI9TERfTElCUkFSWV9QQVRICi0gIGZpCi0gIDs7Ci0KLXN5c3Y1KiB8IHNjbzMuMnY1KiB8IHNjbzV2NiogfCB1bml4d2FyZSogfCBPcGVuVU5JWCogfCBzeXN2NCp1dzIqKQotICB2ZXJzaW9uX3R5cGU9ZnJlZWJzZC1lbGYKLSAgbmVlZF9saWJfcHJlZml4PW5vCi0gIG5lZWRfdmVyc2lvbj1ubwotICBsaWJyYXJ5X25hbWVzX3NwZWM9JyR7bGlibmFtZX0ke3JlbGVhc2V9JHtzaGFyZWRfZXh0fSR2ZXJzdWZmaXggJHtsaWJuYW1lfSR7cmVsZWFzZX0ke3NoYXJlZF9leHR9ICRsaWJuYW1lJHtzaGFyZWRfZXh0fScKLSAgc29uYW1lX3NwZWM9JyR7bGlibmFtZX0ke3JlbGVhc2V9JHtzaGFyZWRfZXh0fSRtYWpvcicKLSAgc2hsaWJwYXRoX3Zhcj1MRF9MSUJSQVJZX1BBVEgKLSAgc2hsaWJwYXRoX292ZXJyaWRlc19ydW5wYXRoPXllcwotICBoYXJkY29kZV9pbnRvX2xpYnM9eWVzCi0gIGlmIHRlc3QgIiR3aXRoX2dudV9sZCIgPSB5ZXM7IHRoZW4KLSAgICBzeXNfbGliX3NlYXJjaF9wYXRoX3NwZWM9Jy91c3IvbG9jYWwvbGliIC91c3IvZ251L2xpYiAvdXNyL2Njcy9saWIgL3Vzci9saWIgL2xpYicKLSAgZWxzZQotICAgIHN5c19saWJfc2VhcmNoX3BhdGhfc3BlYz0nL3Vzci9jY3MvbGliIC91c3IvbGliJwotICAgIGNhc2UgJGhvc3Rfb3MgaW4KLSAgICAgIHNjbzMuMnY1KikKLSAgICAgICAgc3lzX2xpYl9zZWFyY2hfcGF0aF9zcGVjPSIkc3lzX2xpYl9zZWFyY2hfcGF0aF9zcGVjIC9saWIiCi0JOzsKLSAgICBlc2FjCi0gIGZpCi0gIHN5c19saWJfZGxzZWFyY2hfcGF0aF9zcGVjPScvdXNyL2xpYicKLSAgOzsKLQotdHBmKikKLSAgIyBUUEYgaXMgYSBjcm9zcy10YXJnZXQgb25seS4gIFByZWZlcnJlZCBjcm9zcy1ob3N0ID0gR05VL0xpbnV4LgotICB2ZXJzaW9uX3R5cGU9bGludXgKLSAgbmVlZF9saWJfcHJlZml4PW5vCi0gIG5lZWRfdmVyc2lvbj1ubwotICBsaWJyYXJ5X25hbWVzX3NwZWM9JyR7bGlibmFtZX0ke3JlbGVhc2V9JHtzaGFyZWRfZXh0fSR2ZXJzdWZmaXggJHtsaWJuYW1lfSR7cmVsZWFzZX0ke3NoYXJlZF9leHR9JG1ham9yICRsaWJuYW1lJHtzaGFyZWRfZXh0fScKLSAgc2hsaWJwYXRoX3Zhcj1MRF9MSUJSQVJZX1BBVEgKLSAgc2hsaWJwYXRoX292ZXJyaWRlc19ydW5wYXRoPW5vCi0gIGhhcmRjb2RlX2ludG9fbGlicz15ZXMKLSAgOzsKLQotdXRzNCopCi0gIHZlcnNpb25fdHlwZT1saW51eAotICBsaWJyYXJ5X25hbWVzX3NwZWM9JyR7bGlibmFtZX0ke3JlbGVhc2V9JHtzaGFyZWRfZXh0fSR2ZXJzdWZmaXggJHtsaWJuYW1lfSR7cmVsZWFzZX0ke3NoYXJlZF9leHR9JG1ham9yICRsaWJuYW1lJHtzaGFyZWRfZXh0fScKLSAgc29uYW1lX3NwZWM9JyR7bGlibmFtZX0ke3JlbGVhc2V9JHtzaGFyZWRfZXh0fSRtYWpvcicKLSAgc2hsaWJwYXRoX3Zhcj1MRF9MSUJSQVJZX1BBVEgKLSAgOzsKLQotKikKLSAgZHluYW1pY19saW5rZXI9bm8KLSAgOzsKLWVzYWMKLXsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkZHluYW1pY19saW5rZXIiID4mNQotJGFzX2VjaG8gIiRkeW5hbWljX2xpbmtlciIgPiY2OyB9Ci10ZXN0ICIkZHluYW1pY19saW5rZXIiID0gbm8gJiYgY2FuX2J1aWxkX3NoYXJlZD1ubwotCi12YXJpYWJsZXNfc2F2ZWRfZm9yX3JlbGluaz0iUEFUSCAkc2hsaWJwYXRoX3ZhciAkcnVucGF0aF92YXIiCi1pZiB0ZXN0ICIkR0NDIiA9IHllczsgdGhlbgotICB2YXJpYWJsZXNfc2F2ZWRfZm9yX3JlbGluaz0iJHZhcmlhYmxlc19zYXZlZF9mb3JfcmVsaW5rIEdDQ19FWEVDX1BSRUZJWCBDT01QSUxFUl9QQVRIIExJQlJBUllfUEFUSCIKLWZpCi0KLWlmIHRlc3QgIiR7bHRfY3Zfc3lzX2xpYl9zZWFyY2hfcGF0aF9zcGVjK3NldH0iID0gc2V0OyB0aGVuCi0gIHN5c19saWJfc2VhcmNoX3BhdGhfc3BlYz0iJGx0X2N2X3N5c19saWJfc2VhcmNoX3BhdGhfc3BlYyIKLWZpCi1pZiB0ZXN0ICIke2x0X2N2X3N5c19saWJfZGxzZWFyY2hfcGF0aF9zcGVjK3NldH0iID0gc2V0OyB0aGVuCi0gIHN5c19saWJfZGxzZWFyY2hfcGF0aF9zcGVjPSIkbHRfY3Zfc3lzX2xpYl9kbHNlYXJjaF9wYXRoX3NwZWMiCi1maQotCi0KLQotCi0KLQotCi0KLQotCi0KLQotCi0KLQotCi0KLQotCi0KLQotCi0KLQotCi0KLQotCi0KLQotCi0KLQotCi0KLQotCi0KLQotCi0KLQotCi0KLQotCi0KLQotCi0KLQotCi0KLQotCi0KLQotCi0KLQotCi0KLQotCi0KLQotCi0KLQotCi0KLQotCi0KLQotCi0KLQotCi0KLQotCi0KLQotCi0KLQotCi0KLQotCi0KLSAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBob3cgdG8gaGFyZGNvZGUgbGlicmFyeSBwYXRocyBpbnRvIHByb2dyYW1zIiA+JjUKLSRhc19lY2hvX24gImNoZWNraW5nIGhvdyB0byBoYXJkY29kZSBsaWJyYXJ5IHBhdGhzIGludG8gcHJvZ3JhbXMuLi4gIiA+JjY7IH0KLWhhcmRjb2RlX2FjdGlvbj0KLWlmIHRlc3QgLW4gIiRoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjIiB8fAotICAgdGVzdCAtbiAiJHJ1bnBhdGhfdmFyIiB8fAotICAgdGVzdCAiWCRoYXJkY29kZV9hdXRvbWF0aWMiID0gIlh5ZXMiIDsgdGhlbgotCi0gICMgV2UgY2FuIGhhcmRjb2RlIG5vbi1leGlzdGVudCBkaXJlY3Rvcmllcy4KLSAgaWYgdGVzdCAiJGhhcmRjb2RlX2RpcmVjdCIgIT0gbm8gJiYKLSAgICAgIyBJZiB0aGUgb25seSBtZWNoYW5pc20gdG8gYXZvaWQgaGFyZGNvZGluZyBpcyBzaGxpYnBhdGhfdmFyLCB3ZQotICAgICAjIGhhdmUgdG8gcmVsaW5rLCBvdGhlcndpc2Ugd2UgbWlnaHQgbGluayB3aXRoIGFuIGluc3RhbGxlZCBsaWJyYXJ5Ci0gICAgICMgd2hlbiB3ZSBzaG91bGQgYmUgbGlua2luZyB3aXRoIGEgeWV0LXRvLWJlLWluc3RhbGxlZCBvbmUKLSAgICAgIyMgdGVzdCAiJF9MVF9UQUdWQVIoaGFyZGNvZGVfc2hsaWJwYXRoX3ZhciwgKSIgIT0gbm8gJiYKLSAgICAgdGVzdCAiJGhhcmRjb2RlX21pbnVzX0wiICE9IG5vOyB0aGVuCi0gICAgIyBMaW5raW5nIGFsd2F5cyBoYXJkY29kZXMgdGhlIHRlbXBvcmFyeSBsaWJyYXJ5IGRpcmVjdG9yeS4KLSAgICBoYXJkY29kZV9hY3Rpb249cmVsaW5rCi0gIGVsc2UKLSAgICAjIFdlIGNhbiBsaW5rIHdpdGhvdXQgaGFyZGNvZGluZywgYW5kIHdlIGNhbiBoYXJkY29kZSBub25leGlzdGluZyBkaXJzLgotICAgIGhhcmRjb2RlX2FjdGlvbj1pbW1lZGlhdGUKLSAgZmkKLWVsc2UKLSAgIyBXZSBjYW5ub3QgaGFyZGNvZGUgYW55dGhpbmcsIG9yIGVsc2Ugd2UgY2FuIG9ubHkgaGFyZGNvZGUgZXhpc3RpbmcKLSAgIyBkaXJlY3Rvcmllcy4KLSAgaGFyZGNvZGVfYWN0aW9uPXVuc3VwcG9ydGVkCi1maQoteyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRoYXJkY29kZV9hY3Rpb24iID4mNQotJGFzX2VjaG8gIiRoYXJkY29kZV9hY3Rpb24iID4mNjsgfQotCi1pZiB0ZXN0ICIkaGFyZGNvZGVfYWN0aW9uIiA9IHJlbGluayB8fAotICAgdGVzdCAiJGluaGVyaXRfcnBhdGgiID0geWVzOyB0aGVuCi0gICMgRmFzdCBpbnN0YWxsYXRpb24gaXMgbm90IHN1cHBvcnRlZAotICBlbmFibGVfZmFzdF9pbnN0YWxsPW5vCi1lbGlmIHRlc3QgIiRzaGxpYnBhdGhfb3ZlcnJpZGVzX3J1bnBhdGgiID0geWVzIHx8Ci0gICAgIHRlc3QgIiRlbmFibGVfc2hhcmVkIiA9IG5vOyB0aGVuCi0gICMgRmFzdCBpbnN0YWxsYXRpb24gaXMgbm90IG5lY2Vzc2FyeQotICBlbmFibGVfZmFzdF9pbnN0YWxsPW5lZWRsZXNzCi1maQotCi0KLQotCi0KLQotICBpZiB0ZXN0ICJ4JGVuYWJsZV9kbG9wZW4iICE9IHh5ZXM7IHRoZW4KLSAgZW5hYmxlX2Rsb3Blbj11bmtub3duCi0gIGVuYWJsZV9kbG9wZW5fc2VsZj11bmtub3duCi0gIGVuYWJsZV9kbG9wZW5fc2VsZl9zdGF0aWM9dW5rbm93bgotZWxzZQotICBsdF9jdl9kbG9wZW49bm8KLSAgbHRfY3ZfZGxvcGVuX2xpYnM9Ci0KLSAgY2FzZSAkaG9zdF9vcyBpbgotICBiZW9zKikKLSAgICBsdF9jdl9kbG9wZW49ImxvYWRfYWRkX29uIgotICAgIGx0X2N2X2Rsb3Blbl9saWJzPQotICAgIGx0X2N2X2Rsb3Blbl9zZWxmPXllcwotICAgIDs7Ci0KLSAgbWluZ3cqIHwgcHczMiogfCBjZWdjYyopCi0gICAgbHRfY3ZfZGxvcGVuPSJMb2FkTGlicmFyeSIKLSAgICBsdF9jdl9kbG9wZW5fbGlicz0KLSAgICA7OwotCi0gIGN5Z3dpbiopCi0gICAgbHRfY3ZfZGxvcGVuPSJkbG9wZW4iCi0gICAgbHRfY3ZfZGxvcGVuX2xpYnM9Ci0gICAgOzsKLQotICBkYXJ3aW4qKQotICAjIGlmIGxpYmRsIGlzIGluc3RhbGxlZCB3ZSBuZWVkIHRvIGxpbmsgYWdhaW5zdCBpdAotICAgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgZm9yIGRsb3BlbiBpbiAtbGRsIiA+JjUKLSRhc19lY2hvX24gImNoZWNraW5nIGZvciBkbG9wZW4gaW4gLWxkbC4uLiAiID4mNjsgfQotaWYgJHthY19jdl9saWJfZGxfZGxvcGVuKzp9IGZhbHNlOyB0aGVuIDoKLSAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKLWVsc2UKLSAgYWNfY2hlY2tfbGliX3NhdmVfTElCUz0kTElCUwotTElCUz0iLWxkbCAgJExJQlMiCi1jYXQgY29uZmRlZnMuaCAtIDw8X0FDRU9GID5jb25mdGVzdC4kYWNfZXh0Ci0vKiBlbmQgY29uZmRlZnMuaC4gICovCi0KLS8qIE92ZXJyaWRlIGFueSBHQ0MgaW50ZXJuYWwgcHJvdG90eXBlIHRvIGF2b2lkIGFuIGVycm9yLgotICAgVXNlIGNoYXIgYmVjYXVzZSBpbnQgbWlnaHQgbWF0Y2ggdGhlIHJldHVybiB0eXBlIG9mIGEgR0NDCi0gICBidWlsdGluIGFuZCB0aGVuIGl0cyBhcmd1bWVudCBwcm90b3R5cGUgd291bGQgc3RpbGwgYXBwbHkuICAqLwotI2lmZGVmIF9fY3BsdXNwbHVzCi1leHRlcm4gIkMiCi0jZW5kaWYKLWNoYXIgZGxvcGVuICgpOwotaW50Ci1tYWluICgpCi17Ci1yZXR1cm4gZGxvcGVuICgpOwotICA7Ci0gIHJldHVybiAwOwotfQotX0FDRU9GCi1pZiBhY19mbl9jX3RyeV9saW5rICIkTElORU5PIjsgdGhlbiA6Ci0gIGFjX2N2X2xpYl9kbF9kbG9wZW49eWVzCi1lbHNlCi0gIGFjX2N2X2xpYl9kbF9kbG9wZW49bm8KLWZpCi1ybSAtZiBjb3JlIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IFwKLSAgICBjb25mdGVzdCRhY19leGVleHQgY29uZnRlc3QuJGFjX2V4dAotTElCUz0kYWNfY2hlY2tfbGliX3NhdmVfTElCUwotZmkKLXsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkYWNfY3ZfbGliX2RsX2Rsb3BlbiIgPiY1Ci0kYXNfZWNobyAiJGFjX2N2X2xpYl9kbF9kbG9wZW4iID4mNjsgfQotaWYgdGVzdCAieCRhY19jdl9saWJfZGxfZGxvcGVuIiA9IHh5ZXM7IHRoZW4gOgotICBsdF9jdl9kbG9wZW49ImRsb3BlbiIgbHRfY3ZfZGxvcGVuX2xpYnM9Ii1sZGwiCi1lbHNlCi0KLSAgICBsdF9jdl9kbG9wZW49ImR5bGQiCi0gICAgbHRfY3ZfZGxvcGVuX2xpYnM9Ci0gICAgbHRfY3ZfZGxvcGVuX3NlbGY9eWVzCi0KLWZpCi0KLSAgICA7OwotCi0gICopCi0gICAgYWNfZm5fY19jaGVja19mdW5jICIkTElORU5PIiAic2hsX2xvYWQiICJhY19jdl9mdW5jX3NobF9sb2FkIgotaWYgdGVzdCAieCRhY19jdl9mdW5jX3NobF9sb2FkIiA9IHh5ZXM7IHRoZW4gOgotICBsdF9jdl9kbG9wZW49InNobF9sb2FkIgotZWxzZQotICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGZvciBzaGxfbG9hZCBpbiAtbGRsZCIgPiY1Ci0kYXNfZWNob19uICJjaGVja2luZyBmb3Igc2hsX2xvYWQgaW4gLWxkbGQuLi4gIiA+JjY7IH0KLWlmICR7YWNfY3ZfbGliX2RsZF9zaGxfbG9hZCs6fSBmYWxzZTsgdGhlbiA6Ci0gICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2Ci1lbHNlCi0gIGFjX2NoZWNrX2xpYl9zYXZlX0xJQlM9JExJQlMKLUxJQlM9Ii1sZGxkICAkTElCUyIKLWNhdCBjb25mZGVmcy5oIC0gPDxfQUNFT0YgPmNvbmZ0ZXN0LiRhY19leHQKLS8qIGVuZCBjb25mZGVmcy5oLiAgKi8KLQotLyogT3ZlcnJpZGUgYW55IEdDQyBpbnRlcm5hbCBwcm90b3R5cGUgdG8gYXZvaWQgYW4gZXJyb3IuCi0gICBVc2UgY2hhciBiZWNhdXNlIGludCBtaWdodCBtYXRjaCB0aGUgcmV0dXJuIHR5cGUgb2YgYSBHQ0MKLSAgIGJ1aWx0aW4gYW5kIHRoZW4gaXRzIGFyZ3VtZW50IHByb3RvdHlwZSB3b3VsZCBzdGlsbCBhcHBseS4gICovCi0jaWZkZWYgX19jcGx1c3BsdXMKLWV4dGVybiAiQyIKLSNlbmRpZgotY2hhciBzaGxfbG9hZCAoKTsKLWludAotbWFpbiAoKQotewotcmV0dXJuIHNobF9sb2FkICgpOwotICA7Ci0gIHJldHVybiAwOwotfQotX0FDRU9GCi1pZiBhY19mbl9jX3RyeV9saW5rICIkTElORU5PIjsgdGhlbiA6Ci0gIGFjX2N2X2xpYl9kbGRfc2hsX2xvYWQ9eWVzCi1lbHNlCi0gIGFjX2N2X2xpYl9kbGRfc2hsX2xvYWQ9bm8KLWZpCi1ybSAtZiBjb3JlIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IFwKLSAgICBjb25mdGVzdCRhY19leGVleHQgY29uZnRlc3QuJGFjX2V4dAotTElCUz0kYWNfY2hlY2tfbGliX3NhdmVfTElCUwotZmkKLXsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkYWNfY3ZfbGliX2RsZF9zaGxfbG9hZCIgPiY1Ci0kYXNfZWNobyAiJGFjX2N2X2xpYl9kbGRfc2hsX2xvYWQiID4mNjsgfQotaWYgdGVzdCAieCRhY19jdl9saWJfZGxkX3NobF9sb2FkIiA9IHh5ZXM7IHRoZW4gOgotICBsdF9jdl9kbG9wZW49InNobF9sb2FkIiBsdF9jdl9kbG9wZW5fbGlicz0iLWxkbGQiCi1lbHNlCi0gIGFjX2ZuX2NfY2hlY2tfZnVuYyAiJExJTkVOTyIgImRsb3BlbiIgImFjX2N2X2Z1bmNfZGxvcGVuIgotaWYgdGVzdCAieCRhY19jdl9mdW5jX2Rsb3BlbiIgPSB4eWVzOyB0aGVuIDoKLSAgbHRfY3ZfZGxvcGVuPSJkbG9wZW4iCi1lbHNlCi0gIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgZm9yIGRsb3BlbiBpbiAtbGRsIiA+JjUKLSRhc19lY2hvX24gImNoZWNraW5nIGZvciBkbG9wZW4gaW4gLWxkbC4uLiAiID4mNjsgfQotaWYgJHthY19jdl9saWJfZGxfZGxvcGVuKzp9IGZhbHNlOyB0aGVuIDoKLSAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKLWVsc2UKLSAgYWNfY2hlY2tfbGliX3NhdmVfTElCUz0kTElCUwotTElCUz0iLWxkbCAgJExJQlMiCi1jYXQgY29uZmRlZnMuaCAtIDw8X0FDRU9GID5jb25mdGVzdC4kYWNfZXh0Ci0vKiBlbmQgY29uZmRlZnMuaC4gICovCi0KLS8qIE92ZXJyaWRlIGFueSBHQ0MgaW50ZXJuYWwgcHJvdG90eXBlIHRvIGF2b2lkIGFuIGVycm9yLgotICAgVXNlIGNoYXIgYmVjYXVzZSBpbnQgbWlnaHQgbWF0Y2ggdGhlIHJldHVybiB0eXBlIG9mIGEgR0NDCi0gICBidWlsdGluIGFuZCB0aGVuIGl0cyBhcmd1bWVudCBwcm90b3R5cGUgd291bGQgc3RpbGwgYXBwbHkuICAqLwotI2lmZGVmIF9fY3BsdXNwbHVzCi1leHRlcm4gIkMiCi0jZW5kaWYKLWNoYXIgZGxvcGVuICgpOwotaW50Ci1tYWluICgpCi17Ci1yZXR1cm4gZGxvcGVuICgpOwotICA7Ci0gIHJldHVybiAwOwotfQotX0FDRU9GCi1pZiBhY19mbl9jX3RyeV9saW5rICIkTElORU5PIjsgdGhlbiA6Ci0gIGFjX2N2X2xpYl9kbF9kbG9wZW49eWVzCi1lbHNlCi0gIGFjX2N2X2xpYl9kbF9kbG9wZW49bm8KLWZpCi1ybSAtZiBjb3JlIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IFwKLSAgICBjb25mdGVzdCRhY19leGVleHQgY29uZnRlc3QuJGFjX2V4dAotTElCUz0kYWNfY2hlY2tfbGliX3NhdmVfTElCUwotZmkKLXsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkYWNfY3ZfbGliX2RsX2Rsb3BlbiIgPiY1Ci0kYXNfZWNobyAiJGFjX2N2X2xpYl9kbF9kbG9wZW4iID4mNjsgfQotaWYgdGVzdCAieCRhY19jdl9saWJfZGxfZGxvcGVuIiA9IHh5ZXM7IHRoZW4gOgotICBsdF9jdl9kbG9wZW49ImRsb3BlbiIgbHRfY3ZfZGxvcGVuX2xpYnM9Ii1sZGwiCi1lbHNlCi0gIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgZm9yIGRsb3BlbiBpbiAtbHN2bGQiID4mNQotJGFzX2VjaG9fbiAiY2hlY2tpbmcgZm9yIGRsb3BlbiBpbiAtbHN2bGQuLi4gIiA+JjY7IH0KLWlmICR7YWNfY3ZfbGliX3N2bGRfZGxvcGVuKzp9IGZhbHNlOyB0aGVuIDoKLSAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKLWVsc2UKLSAgYWNfY2hlY2tfbGliX3NhdmVfTElCUz0kTElCUwotTElCUz0iLWxzdmxkICAkTElCUyIKLWNhdCBjb25mZGVmcy5oIC0gPDxfQUNFT0YgPmNvbmZ0ZXN0LiRhY19leHQKLS8qIGVuZCBjb25mZGVmcy5oLiAgKi8KLQotLyogT3ZlcnJpZGUgYW55IEdDQyBpbnRlcm5hbCBwcm90b3R5cGUgdG8gYXZvaWQgYW4gZXJyb3IuCi0gICBVc2UgY2hhciBiZWNhdXNlIGludCBtaWdodCBtYXRjaCB0aGUgcmV0dXJuIHR5cGUgb2YgYSBHQ0MKLSAgIGJ1aWx0aW4gYW5kIHRoZW4gaXRzIGFyZ3VtZW50IHByb3RvdHlwZSB3b3VsZCBzdGlsbCBhcHBseS4gICovCi0jaWZkZWYgX19jcGx1c3BsdXMKLWV4dGVybiAiQyIKLSNlbmRpZgotY2hhciBkbG9wZW4gKCk7Ci1pbnQKLW1haW4gKCkKLXsKLXJldHVybiBkbG9wZW4gKCk7Ci0gIDsKLSAgcmV0dXJuIDA7Ci19Ci1fQUNFT0YKLWlmIGFjX2ZuX2NfdHJ5X2xpbmsgIiRMSU5FTk8iOyB0aGVuIDoKLSAgYWNfY3ZfbGliX3N2bGRfZGxvcGVuPXllcwotZWxzZQotICBhY19jdl9saWJfc3ZsZF9kbG9wZW49bm8KLWZpCi1ybSAtZiBjb3JlIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IFwKLSAgICBjb25mdGVzdCRhY19leGVleHQgY29uZnRlc3QuJGFjX2V4dAotTElCUz0kYWNfY2hlY2tfbGliX3NhdmVfTElCUwotZmkKLXsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkYWNfY3ZfbGliX3N2bGRfZGxvcGVuIiA+JjUKLSRhc19lY2hvICIkYWNfY3ZfbGliX3N2bGRfZGxvcGVuIiA+JjY7IH0KLWlmIHRlc3QgIngkYWNfY3ZfbGliX3N2bGRfZGxvcGVuIiA9IHh5ZXM7IHRoZW4gOgotICBsdF9jdl9kbG9wZW49ImRsb3BlbiIgbHRfY3ZfZGxvcGVuX2xpYnM9Ii1sc3ZsZCIKLWVsc2UKLSAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBmb3IgZGxkX2xpbmsgaW4gLWxkbGQiID4mNQotJGFzX2VjaG9fbiAiY2hlY2tpbmcgZm9yIGRsZF9saW5rIGluIC1sZGxkLi4uICIgPiY2OyB9Ci1pZiAke2FjX2N2X2xpYl9kbGRfZGxkX2xpbmsrOn0gZmFsc2U7IHRoZW4gOgotICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgotZWxzZQotICBhY19jaGVja19saWJfc2F2ZV9MSUJTPSRMSUJTCi1MSUJTPSItbGRsZCAgJExJQlMiCi1jYXQgY29uZmRlZnMuaCAtIDw8X0FDRU9GID5jb25mdGVzdC4kYWNfZXh0Ci0vKiBlbmQgY29uZmRlZnMuaC4gICovCi0KLS8qIE92ZXJyaWRlIGFueSBHQ0MgaW50ZXJuYWwgcHJvdG90eXBlIHRvIGF2b2lkIGFuIGVycm9yLgotICAgVXNlIGNoYXIgYmVjYXVzZSBpbnQgbWlnaHQgbWF0Y2ggdGhlIHJldHVybiB0eXBlIG9mIGEgR0NDCi0gICBidWlsdGluIGFuZCB0aGVuIGl0cyBhcmd1bWVudCBwcm90b3R5cGUgd291bGQgc3RpbGwgYXBwbHkuICAqLwotI2lmZGVmIF9fY3BsdXNwbHVzCi1leHRlcm4gIkMiCi0jZW5kaWYKLWNoYXIgZGxkX2xpbmsgKCk7Ci1pbnQKLW1haW4gKCkKLXsKLXJldHVybiBkbGRfbGluayAoKTsKLSAgOwotICByZXR1cm4gMDsKLX0KLV9BQ0VPRgotaWYgYWNfZm5fY190cnlfbGluayAiJExJTkVOTyI7IHRoZW4gOgotICBhY19jdl9saWJfZGxkX2RsZF9saW5rPXllcwotZWxzZQotICBhY19jdl9saWJfZGxkX2RsZF9saW5rPW5vCi1maQotcm0gLWYgY29yZSBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBcCi0gICAgY29uZnRlc3QkYWNfZXhlZXh0IGNvbmZ0ZXN0LiRhY19leHQKLUxJQlM9JGFjX2NoZWNrX2xpYl9zYXZlX0xJQlMKLWZpCi17ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJGFjX2N2X2xpYl9kbGRfZGxkX2xpbmsiID4mNQotJGFzX2VjaG8gIiRhY19jdl9saWJfZGxkX2RsZF9saW5rIiA+JjY7IH0KLWlmIHRlc3QgIngkYWNfY3ZfbGliX2RsZF9kbGRfbGluayIgPSB4eWVzOyB0aGVuIDoKLSAgbHRfY3ZfZGxvcGVuPSJkbGRfbGluayIgbHRfY3ZfZGxvcGVuX2xpYnM9Ii1sZGxkIgotZmkKLQotCi1maQotCi0KLWZpCi0KLQotZmkKLQotCi1maQotCi0KLWZpCi0KLSAgICA7OwotICBlc2FjCi0KLSAgaWYgdGVzdCAieCRsdF9jdl9kbG9wZW4iICE9IHhubzsgdGhlbgotICAgIGVuYWJsZV9kbG9wZW49eWVzCi0gIGVsc2UKLSAgICBlbmFibGVfZGxvcGVuPW5vCi0gIGZpCi0KLSAgY2FzZSAkbHRfY3ZfZGxvcGVuIGluCi0gIGRsb3BlbikKLSAgICBzYXZlX0NQUEZMQUdTPSIkQ1BQRkxBR1MiCi0gICAgdGVzdCAieCRhY19jdl9oZWFkZXJfZGxmY25faCIgPSB4eWVzICYmIENQUEZMQUdTPSIkQ1BQRkxBR1MgLURIQVZFX0RMRkNOX0giCi0KLSAgICBzYXZlX0xERkxBR1M9IiRMREZMQUdTIgotICAgIHdsPSRsdF9wcm9nX2NvbXBpbGVyX3dsIGV2YWwgTERGTEFHUz1cIlwkTERGTEFHUyAkZXhwb3J0X2R5bmFtaWNfZmxhZ19zcGVjXCIKLQotICAgIHNhdmVfTElCUz0iJExJQlMiCi0gICAgTElCUz0iJGx0X2N2X2Rsb3Blbl9saWJzICRMSUJTIgotCi0gICAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyB3aGV0aGVyIGEgcHJvZ3JhbSBjYW4gZGxvcGVuIGl0c2VsZiIgPiY1Ci0kYXNfZWNob19uICJjaGVja2luZyB3aGV0aGVyIGEgcHJvZ3JhbSBjYW4gZGxvcGVuIGl0c2VsZi4uLiAiID4mNjsgfQotaWYgJHtsdF9jdl9kbG9wZW5fc2VsZis6fSBmYWxzZTsgdGhlbiA6Ci0gICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2Ci1lbHNlCi0gIAkgIGlmIHRlc3QgIiRjcm9zc19jb21waWxpbmciID0geWVzOyB0aGVuIDoKLSAgbHRfY3ZfZGxvcGVuX3NlbGY9Y3Jvc3MKLWVsc2UKLSAgbHRfZGx1bmtub3duPTA7IGx0X2Rsbm9fdXNjb3JlPTE7IGx0X2RsbmVlZF91c2NvcmU9MgotICBsdF9zdGF0dXM9JGx0X2RsdW5rbm93bgotICBjYXQgPiBjb25mdGVzdC4kYWNfZXh0IDw8X0xUX0VPRgotI2xpbmUgJExJTkVOTyAiY29uZmlndXJlIgotI2luY2x1ZGUgImNvbmZkZWZzLmgiCi0KLSNpZiBIQVZFX0RMRkNOX0gKLSNpbmNsdWRlIDxkbGZjbi5oPgotI2VuZGlmCi0KLSNpbmNsdWRlIDxzdGRpby5oPgotCi0jaWZkZWYgUlRMRF9HTE9CQUwKLSMgIGRlZmluZSBMVF9ETEdMT0JBTAkJUlRMRF9HTE9CQUwKLSNlbHNlCi0jICBpZmRlZiBETF9HTE9CQUwKLSMgICAgZGVmaW5lIExUX0RMR0xPQkFMCQlETF9HTE9CQUwKLSMgIGVsc2UKLSMgICAgZGVmaW5lIExUX0RMR0xPQkFMCQkwCi0jICBlbmRpZgotI2VuZGlmCi0KLS8qIFdlIG1heSBoYXZlIHRvIGRlZmluZSBMVF9ETExBWllfT1JfTk9XIGluIHRoZSBjb21tYW5kIGxpbmUgaWYgd2UKLSAgIGZpbmQgb3V0IGl0IGRvZXMgbm90IHdvcmsgaW4gc29tZSBwbGF0Zm9ybS4gKi8KLSNpZm5kZWYgTFRfRExMQVpZX09SX05PVwotIyAgaWZkZWYgUlRMRF9MQVpZCi0jICAgIGRlZmluZSBMVF9ETExBWllfT1JfTk9XCQlSVExEX0xBWlkKLSMgIGVsc2UKLSMgICAgaWZkZWYgRExfTEFaWQotIyAgICAgIGRlZmluZSBMVF9ETExBWllfT1JfTk9XCQlETF9MQVpZCi0jICAgIGVsc2UKLSMgICAgICBpZmRlZiBSVExEX05PVwotIyAgICAgICAgZGVmaW5lIExUX0RMTEFaWV9PUl9OT1cJUlRMRF9OT1cKLSMgICAgICBlbHNlCi0jICAgICAgICBpZmRlZiBETF9OT1cKLSMgICAgICAgICAgZGVmaW5lIExUX0RMTEFaWV9PUl9OT1cJRExfTk9XCi0jICAgICAgICBlbHNlCi0jICAgICAgICAgIGRlZmluZSBMVF9ETExBWllfT1JfTk9XCTAKLSMgICAgICAgIGVuZGlmCi0jICAgICAgZW5kaWYKLSMgICAgZW5kaWYKLSMgIGVuZGlmCi0jZW5kaWYKLQotLyogV2hlbiAtZnZpc2JpbGl0eT1oaWRkZW4gaXMgdXNlZCwgYXNzdW1lIHRoZSBjb2RlIGhhcyBiZWVuIGFubm90YXRlZAotICAgY29ycmVzcG9uZGluZ2x5IGZvciB0aGUgc3ltYm9scyBuZWVkZWQuICAqLwotI2lmIGRlZmluZWQoX19HTlVDX18pICYmICgoKF9fR05VQ19fID09IDMpICYmIChfX0dOVUNfTUlOT1JfXyA+PSAzKSkgfHwgKF9fR05VQ19fID4gMykpCi1pbnQgZm5vcmQgKCkgX19hdHRyaWJ1dGVfXygodmlzaWJpbGl0eSgiZGVmYXVsdCIpKSk7Ci0jZW5kaWYKLQotaW50IGZub3JkICgpIHsgcmV0dXJuIDQyOyB9Ci1pbnQgbWFpbiAoKQotewotICB2b2lkICpzZWxmID0gZGxvcGVuICgwLCBMVF9ETEdMT0JBTHxMVF9ETExBWllfT1JfTk9XKTsKLSAgaW50IHN0YXR1cyA9ICRsdF9kbHVua25vd247Ci0KLSAgaWYgKHNlbGYpCi0gICAgewotICAgICAgaWYgKGRsc3ltIChzZWxmLCJmbm9yZCIpKSAgICAgICBzdGF0dXMgPSAkbHRfZGxub191c2NvcmU7Ci0gICAgICBlbHNlCi0gICAgICAgIHsKLQkgIGlmIChkbHN5bSggc2VsZiwiX2Zub3JkIikpICBzdGF0dXMgPSAkbHRfZGxuZWVkX3VzY29yZTsKLSAgICAgICAgICBlbHNlIHB1dHMgKGRsZXJyb3IgKCkpOwotCX0KLSAgICAgIC8qIGRsY2xvc2UgKHNlbGYpOyAqLwotICAgIH0KLSAgZWxzZQotICAgIHB1dHMgKGRsZXJyb3IgKCkpOwotCi0gIHJldHVybiBzdGF0dXM7Ci19Ci1fTFRfRU9GCi0gIGlmIHsgeyBldmFsIGVjaG8gIlwiXCRhc19tZVwiOiR7YXNfbGluZW5vLSRMSU5FTk99OiBcIiRhY19saW5rXCIiOyB9ID4mNQotICAoZXZhbCAkYWNfbGluaykgMj4mNQotICBhY19zdGF0dXM9JD8KLSAgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1Ci0gIHRlc3QgJGFjX3N0YXR1cyA9IDA7IH0gJiYgdGVzdCAtcyBjb25mdGVzdCR7YWNfZXhlZXh0fSAyPi9kZXYvbnVsbDsgdGhlbgotICAgICguL2NvbmZ0ZXN0OyBleGl0OyApID4mNSAyPi9kZXYvbnVsbAotICAgIGx0X3N0YXR1cz0kPwotICAgIGNhc2UgeCRsdF9zdGF0dXMgaW4KLSAgICAgIHgkbHRfZGxub191c2NvcmUpIGx0X2N2X2Rsb3Blbl9zZWxmPXllcyA7OwotICAgICAgeCRsdF9kbG5lZWRfdXNjb3JlKSBsdF9jdl9kbG9wZW5fc2VsZj15ZXMgOzsKLSAgICAgIHgkbHRfZGx1bmtub3dufHgqKSBsdF9jdl9kbG9wZW5fc2VsZj1ubyA7OwotICAgIGVzYWMKLSAgZWxzZSA6Ci0gICAgIyBjb21waWxhdGlvbiBmYWlsZWQKLSAgICBsdF9jdl9kbG9wZW5fc2VsZj1ubwotICBmaQotZmkKLXJtIC1mciBjb25mdGVzdCoKLQotCi1maQoteyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRsdF9jdl9kbG9wZW5fc2VsZiIgPiY1Ci0kYXNfZWNobyAiJGx0X2N2X2Rsb3Blbl9zZWxmIiA+JjY7IH0KLQotICAgIGlmIHRlc3QgIngkbHRfY3ZfZGxvcGVuX3NlbGYiID0geHllczsgdGhlbgotICAgICAgd2w9JGx0X3Byb2dfY29tcGlsZXJfd2wgZXZhbCBMREZMQUdTPVwiXCRMREZMQUdTICRsdF9wcm9nX2NvbXBpbGVyX3N0YXRpY1wiCi0gICAgICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIHdoZXRoZXIgYSBzdGF0aWNhbGx5IGxpbmtlZCBwcm9ncmFtIGNhbiBkbG9wZW4gaXRzZWxmIiA+JjUKLSRhc19lY2hvX24gImNoZWNraW5nIHdoZXRoZXIgYSBzdGF0aWNhbGx5IGxpbmtlZCBwcm9ncmFtIGNhbiBkbG9wZW4gaXRzZWxmLi4uICIgPiY2OyB9Ci1pZiAke2x0X2N2X2Rsb3Blbl9zZWxmX3N0YXRpYys6fSBmYWxzZTsgdGhlbiA6Ci0gICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2Ci1lbHNlCi0gIAkgIGlmIHRlc3QgIiRjcm9zc19jb21waWxpbmciID0geWVzOyB0aGVuIDoKLSAgbHRfY3ZfZGxvcGVuX3NlbGZfc3RhdGljPWNyb3NzCi1lbHNlCi0gIGx0X2RsdW5rbm93bj0wOyBsdF9kbG5vX3VzY29yZT0xOyBsdF9kbG5lZWRfdXNjb3JlPTIKLSAgbHRfc3RhdHVzPSRsdF9kbHVua25vd24KLSAgY2F0ID4gY29uZnRlc3QuJGFjX2V4dCA8PF9MVF9FT0YKLSNsaW5lICRMSU5FTk8gImNvbmZpZ3VyZSIKLSNpbmNsdWRlICJjb25mZGVmcy5oIgotCi0jaWYgSEFWRV9ETEZDTl9ICi0jaW5jbHVkZSA8ZGxmY24uaD4KLSNlbmRpZgotCi0jaW5jbHVkZSA8c3RkaW8uaD4KLQotI2lmZGVmIFJUTERfR0xPQkFMCi0jICBkZWZpbmUgTFRfRExHTE9CQUwJCVJUTERfR0xPQkFMCi0jZWxzZQotIyAgaWZkZWYgRExfR0xPQkFMCi0jICAgIGRlZmluZSBMVF9ETEdMT0JBTAkJRExfR0xPQkFMCi0jICBlbHNlCi0jICAgIGRlZmluZSBMVF9ETEdMT0JBTAkJMAotIyAgZW5kaWYKLSNlbmRpZgotCi0vKiBXZSBtYXkgaGF2ZSB0byBkZWZpbmUgTFRfRExMQVpZX09SX05PVyBpbiB0aGUgY29tbWFuZCBsaW5lIGlmIHdlCi0gICBmaW5kIG91dCBpdCBkb2VzIG5vdCB3b3JrIGluIHNvbWUgcGxhdGZvcm0uICovCi0jaWZuZGVmIExUX0RMTEFaWV9PUl9OT1cKLSMgIGlmZGVmIFJUTERfTEFaWQotIyAgICBkZWZpbmUgTFRfRExMQVpZX09SX05PVwkJUlRMRF9MQVpZCi0jICBlbHNlCi0jICAgIGlmZGVmIERMX0xBWlkKLSMgICAgICBkZWZpbmUgTFRfRExMQVpZX09SX05PVwkJRExfTEFaWQotIyAgICBlbHNlCi0jICAgICAgaWZkZWYgUlRMRF9OT1cKLSMgICAgICAgIGRlZmluZSBMVF9ETExBWllfT1JfTk9XCVJUTERfTk9XCi0jICAgICAgZWxzZQotIyAgICAgICAgaWZkZWYgRExfTk9XCi0jICAgICAgICAgIGRlZmluZSBMVF9ETExBWllfT1JfTk9XCURMX05PVwotIyAgICAgICAgZWxzZQotIyAgICAgICAgICBkZWZpbmUgTFRfRExMQVpZX09SX05PVwkwCi0jICAgICAgICBlbmRpZgotIyAgICAgIGVuZGlmCi0jICAgIGVuZGlmCi0jICBlbmRpZgotI2VuZGlmCi0KLS8qIFdoZW4gLWZ2aXNiaWxpdHk9aGlkZGVuIGlzIHVzZWQsIGFzc3VtZSB0aGUgY29kZSBoYXMgYmVlbiBhbm5vdGF0ZWQKLSAgIGNvcnJlc3BvbmRpbmdseSBmb3IgdGhlIHN5bWJvbHMgbmVlZGVkLiAgKi8KLSNpZiBkZWZpbmVkKF9fR05VQ19fKSAmJiAoKChfX0dOVUNfXyA9PSAzKSAmJiAoX19HTlVDX01JTk9SX18gPj0gMykpIHx8IChfX0dOVUNfXyA+IDMpKQotaW50IGZub3JkICgpIF9fYXR0cmlidXRlX18oKHZpc2liaWxpdHkoImRlZmF1bHQiKSkpOwotI2VuZGlmCi0KLWludCBmbm9yZCAoKSB7IHJldHVybiA0MjsgfQotaW50IG1haW4gKCkKLXsKLSAgdm9pZCAqc2VsZiA9IGRsb3BlbiAoMCwgTFRfRExHTE9CQUx8TFRfRExMQVpZX09SX05PVyk7Ci0gIGludCBzdGF0dXMgPSAkbHRfZGx1bmtub3duOwotCi0gIGlmIChzZWxmKQotICAgIHsKLSAgICAgIGlmIChkbHN5bSAoc2VsZiwiZm5vcmQiKSkgICAgICAgc3RhdHVzID0gJGx0X2Rsbm9fdXNjb3JlOwotICAgICAgZWxzZQotICAgICAgICB7Ci0JICBpZiAoZGxzeW0oIHNlbGYsIl9mbm9yZCIpKSAgc3RhdHVzID0gJGx0X2RsbmVlZF91c2NvcmU7Ci0gICAgICAgICAgZWxzZSBwdXRzIChkbGVycm9yICgpKTsKLQl9Ci0gICAgICAvKiBkbGNsb3NlIChzZWxmKTsgKi8KLSAgICB9Ci0gIGVsc2UKLSAgICBwdXRzIChkbGVycm9yICgpKTsKLQotICByZXR1cm4gc3RhdHVzOwotfQotX0xUX0VPRgotICBpZiB7IHsgZXZhbCBlY2hvICJcIlwkYXNfbWVcIjoke2FzX2xpbmVuby0kTElORU5PfTogXCIkYWNfbGlua1wiIjsgfSA+JjUKLSAgKGV2YWwgJGFjX2xpbmspIDI+JjUKLSAgYWNfc3RhdHVzPSQ/Ci0gICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IFwkPyA9ICRhY19zdGF0dXMiID4mNQotICB0ZXN0ICRhY19zdGF0dXMgPSAwOyB9ICYmIHRlc3QgLXMgY29uZnRlc3Qke2FjX2V4ZWV4dH0gMj4vZGV2L251bGw7IHRoZW4KLSAgICAoLi9jb25mdGVzdDsgZXhpdDsgKSA+JjUgMj4vZGV2L251bGwKLSAgICBsdF9zdGF0dXM9JD8KLSAgICBjYXNlIHgkbHRfc3RhdHVzIGluCi0gICAgICB4JGx0X2Rsbm9fdXNjb3JlKSBsdF9jdl9kbG9wZW5fc2VsZl9zdGF0aWM9eWVzIDs7Ci0gICAgICB4JGx0X2RsbmVlZF91c2NvcmUpIGx0X2N2X2Rsb3Blbl9zZWxmX3N0YXRpYz15ZXMgOzsKLSAgICAgIHgkbHRfZGx1bmtub3dufHgqKSBsdF9jdl9kbG9wZW5fc2VsZl9zdGF0aWM9bm8gOzsKLSAgICBlc2FjCi0gIGVsc2UgOgotICAgICMgY29tcGlsYXRpb24gZmFpbGVkCi0gICAgbHRfY3ZfZGxvcGVuX3NlbGZfc3RhdGljPW5vCi0gIGZpCi1maQotcm0gLWZyIGNvbmZ0ZXN0KgotCi0KLWZpCi17ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJGx0X2N2X2Rsb3Blbl9zZWxmX3N0YXRpYyIgPiY1Ci0kYXNfZWNobyAiJGx0X2N2X2Rsb3Blbl9zZWxmX3N0YXRpYyIgPiY2OyB9Ci0gICAgZmkKLQotICAgIENQUEZMQUdTPSIkc2F2ZV9DUFBGTEFHUyIKLSAgICBMREZMQUdTPSIkc2F2ZV9MREZMQUdTIgotICAgIExJQlM9IiRzYXZlX0xJQlMiCi0gICAgOzsKLSAgZXNhYwotCi0gIGNhc2UgJGx0X2N2X2Rsb3Blbl9zZWxmIGluCi0gIHllc3xubykgZW5hYmxlX2Rsb3Blbl9zZWxmPSRsdF9jdl9kbG9wZW5fc2VsZiA7OwotICAqKSBlbmFibGVfZGxvcGVuX3NlbGY9dW5rbm93biA7OwotICBlc2FjCi0KLSAgY2FzZSAkbHRfY3ZfZGxvcGVuX3NlbGZfc3RhdGljIGluCi0gIHllc3xubykgZW5hYmxlX2Rsb3Blbl9zZWxmX3N0YXRpYz0kbHRfY3ZfZGxvcGVuX3NlbGZfc3RhdGljIDs7Ci0gICopIGVuYWJsZV9kbG9wZW5fc2VsZl9zdGF0aWM9dW5rbm93biA7OwotICBlc2FjCi1maQotCi0KLQotCi0KLQotCi0KLQotCi0KLQotCi0KLQotCi0KLXN0cmlwbGliPQotb2xkX3N0cmlwbGliPQoteyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyB3aGV0aGVyIHN0cmlwcGluZyBsaWJyYXJpZXMgaXMgcG9zc2libGUiID4mNQotJGFzX2VjaG9fbiAiY2hlY2tpbmcgd2hldGhlciBzdHJpcHBpbmcgbGlicmFyaWVzIGlzIHBvc3NpYmxlLi4uICIgPiY2OyB9Ci1pZiB0ZXN0IC1uICIkU1RSSVAiICYmICRTVFJJUCAtViAyPiYxIHwgJEdSRVAgIkdOVSBzdHJpcCIgPi9kZXYvbnVsbDsgdGhlbgotICB0ZXN0IC16ICIkb2xkX3N0cmlwbGliIiAmJiBvbGRfc3RyaXBsaWI9IiRTVFJJUCAtLXN0cmlwLWRlYnVnIgotICB0ZXN0IC16ICIkc3RyaXBsaWIiICYmIHN0cmlwbGliPSIkU1RSSVAgLS1zdHJpcC11bm5lZWRlZCIKLSAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6IHllcyIgPiY1Ci0kYXNfZWNobyAieWVzIiA+JjY7IH0KLWVsc2UKLSMgRklYTUUgLSBpbnNlcnQgc29tZSByZWFsIHRlc3RzLCBob3N0X29zIGlzbid0IHJlYWxseSBnb29kIGVub3VnaAotICBjYXNlICRob3N0X29zIGluCi0gIGRhcndpbiopCi0gICAgaWYgdGVzdCAtbiAiJFNUUklQIiA7IHRoZW4KLSAgICAgIHN0cmlwbGliPSIkU1RSSVAgLXgiCi0gICAgICBvbGRfc3RyaXBsaWI9IiRTVFJJUCAtUyIKLSAgICAgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiB5ZXMiID4mNQotJGFzX2VjaG8gInllcyIgPiY2OyB9Ci0gICAgZWxzZQotICAgICAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6IG5vIiA+JjUKLSRhc19lY2hvICJubyIgPiY2OyB9Ci0gICAgZmkKLSAgICA7OwotICAqKQotICAgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiBubyIgPiY1Ci0kYXNfZWNobyAibm8iID4mNjsgfQotICAgIDs7Ci0gIGVzYWMKLWZpCi0KLQotCi0KLQotCi0KLQotCi0KLQotCi0gICMgUmVwb3J0IHdoaWNoIGxpYnJhcnkgdHlwZXMgd2lsbCBhY3R1YWxseSBiZSBidWlsdAotICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGlmIGxpYnRvb2wgc3VwcG9ydHMgc2hhcmVkIGxpYnJhcmllcyIgPiY1Ci0kYXNfZWNob19uICJjaGVja2luZyBpZiBsaWJ0b29sIHN1cHBvcnRzIHNoYXJlZCBsaWJyYXJpZXMuLi4gIiA+JjY7IH0KLSAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRjYW5fYnVpbGRfc2hhcmVkIiA+JjUKLSRhc19lY2hvICIkY2FuX2J1aWxkX3NoYXJlZCIgPiY2OyB9Ci0KLSAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyB3aGV0aGVyIHRvIGJ1aWxkIHNoYXJlZCBsaWJyYXJpZXMiID4mNQotJGFzX2VjaG9fbiAiY2hlY2tpbmcgd2hldGhlciB0byBidWlsZCBzaGFyZWQgbGlicmFyaWVzLi4uICIgPiY2OyB9Ci0gIHRlc3QgIiRjYW5fYnVpbGRfc2hhcmVkIiA9ICJubyIgJiYgZW5hYmxlX3NoYXJlZD1ubwotCi0gICMgT24gQUlYLCBzaGFyZWQgbGlicmFyaWVzIGFuZCBzdGF0aWMgbGlicmFyaWVzIHVzZSB0aGUgc2FtZSBuYW1lc3BhY2UsIGFuZAotICAjIGFyZSBhbGwgYnVpbHQgZnJvbSBQSUMuCi0gIGNhc2UgJGhvc3Rfb3MgaW4KLSAgYWl4MyopCi0gICAgdGVzdCAiJGVuYWJsZV9zaGFyZWQiID0geWVzICYmIGVuYWJsZV9zdGF0aWM9bm8KLSAgICBpZiB0ZXN0IC1uICIkUkFOTElCIjsgdGhlbgotICAgICAgYXJjaGl2ZV9jbWRzPSIkYXJjaGl2ZV9jbWRzflwkUkFOTElCIFwkbGliIgotICAgICAgcG9zdGluc3RhbGxfY21kcz0nJFJBTkxJQiAkbGliJwotICAgIGZpCi0gICAgOzsKLQotICBhaXhbNC05XSopCi0gICAgaWYgdGVzdCAiJGhvc3RfY3B1IiAhPSBpYTY0ICYmIHRlc3QgIiRhaXhfdXNlX3J1bnRpbWVsaW5raW5nIiA9IG5vIDsgdGhlbgotICAgICAgdGVzdCAiJGVuYWJsZV9zaGFyZWQiID0geWVzICYmIGVuYWJsZV9zdGF0aWM9bm8KLSAgICBmaQotICAgIDs7Ci0gIGVzYWMKLSAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRlbmFibGVfc2hhcmVkIiA+JjUKLSRhc19lY2hvICIkZW5hYmxlX3NoYXJlZCIgPiY2OyB9Ci0KLSAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyB3aGV0aGVyIHRvIGJ1aWxkIHN0YXRpYyBsaWJyYXJpZXMiID4mNQotJGFzX2VjaG9fbiAiY2hlY2tpbmcgd2hldGhlciB0byBidWlsZCBzdGF0aWMgbGlicmFyaWVzLi4uICIgPiY2OyB9Ci0gICMgTWFrZSBzdXJlIGVpdGhlciBlbmFibGVfc2hhcmVkIG9yIGVuYWJsZV9zdGF0aWMgaXMgeWVzLgotICB0ZXN0ICIkZW5hYmxlX3NoYXJlZCIgPSB5ZXMgfHwgZW5hYmxlX3N0YXRpYz15ZXMKLSAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRlbmFibGVfc3RhdGljIiA+JjUKLSRhc19lY2hvICIkZW5hYmxlX3N0YXRpYyIgPiY2OyB9Ci0KLQotCi0KLWZpCi1hY19leHQ9YwotYWNfY3BwPSckQ1BQICRDUFBGTEFHUycKLWFjX2NvbXBpbGU9JyRDQyAtYyAkQ0ZMQUdTICRDUFBGTEFHUyBjb25mdGVzdC4kYWNfZXh0ID4mNScKLWFjX2xpbms9JyRDQyAtbyBjb25mdGVzdCRhY19leGVleHQgJENGTEFHUyAkQ1BQRkxBR1MgJExERkxBR1MgY29uZnRlc3QuJGFjX2V4dCAkTElCUyA+JjUnCi1hY19jb21waWxlcl9nbnU9JGFjX2N2X2NfY29tcGlsZXJfZ251Ci0KLUNDPSIkbHRfc2F2ZV9DQyIKLQotCi0KLQotCi0KLQotCi0KLQotCi0KLQotICAgICAgICBhY19jb25maWdfY29tbWFuZHM9IiRhY19jb25maWdfY29tbWFuZHMgbGlidG9vbCIKLQotCi0KLQotIyBPbmx5IGV4cGFuZCBvbmNlOgotCi0KLQotIyBTZWxlY3QgbWVtb3J5IG1hbmFnZXIgZGVwZW5kaW5nIG9uIHVzZXIgaW5wdXQuCi0jIElmIG5vICItZW5hYmxlLW1heG1lbSIsIHVzZSBqbWVtbm9icwotTUVNT1JZTUdSPSdqbWVtbm9icycKLU1BWE1FTT0ibm8iCi0jIENoZWNrIHdoZXRoZXIgLS1lbmFibGUtbWF4bWVtIHdhcyBnaXZlbi4KLWlmIHRlc3QgIiR7ZW5hYmxlX21heG1lbStzZXR9IiA9IHNldDsgdGhlbiA6Ci0gIGVuYWJsZXZhbD0kZW5hYmxlX21heG1lbTsgTUFYTUVNPSIkZW5hYmxldmFsIgotZmkKLQotaWYgdGVzdCAieCRNQVhNRU0iID0geHllczsgdGhlbgotICBNQVhNRU09MQotZmkKLWlmIHRlc3QgIngkTUFYTUVNIiAhPSB4bm87IHRoZW4KLSAgaWYgdGVzdCAtbiAiYGVjaG8gJE1BWE1FTSB8IHNlZCAncy9bMC05XS8vZydgIjsgdGhlbgotICAgIGFzX2ZuX2Vycm9yICQ/ICJub24tbnVtZXJpYyBhcmd1bWVudCB0byAtLWVuYWJsZS1tYXhtZW0iICIkTElORU5PIiA1Ci0gIGZpCi0gIERFRkFVTFRNQVhNRU09YGV4cHIgJE1BWE1FTSBcKiAxMDQ4NTc2YAotCi1jYXQgPj5jb25mZGVmcy5oIDw8X0FDRU9GCi0jZGVmaW5lIERFRkFVTFRfTUFYX01FTSAke0RFRkFVTFRNQVhNRU19Ci1fQUNFT0YKLQoteyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBmb3IgJ3RtcGZpbGUoKSciID4mNQotJGFzX2VjaG9fbiAiY2hlY2tpbmcgZm9yICd0bXBmaWxlKCknLi4uICIgPiY2OyB9Ci1jYXQgY29uZmRlZnMuaCAtIDw8X0FDRU9GID5jb25mdGVzdC4kYWNfZXh0Ci0vKiBlbmQgY29uZmRlZnMuaC4gICovCi0jaW5jbHVkZSA8c3RkaW8uaD4KLWludAotbWFpbiAoKQotewotIEZJTEUgKiB0ZmlsZSA9IHRtcGZpbGUoKTsKLSAgOwotICByZXR1cm4gMDsKLX0KLV9BQ0VPRgotaWYgYWNfZm5fY190cnlfbGluayAiJExJTkVOTyI7IHRoZW4gOgotICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogeWVzIiA+JjUKLSRhc19lY2hvICJ5ZXMiID4mNjsgfQotTUVNT1JZTUdSPSdqbWVtYW5zaScKLWVsc2UKLSAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6IG5vIiA+JjUKLSRhc19lY2hvICJubyIgPiY2OyB9Ci1NRU1PUllNR1I9J2ptZW1uYW1lJwotCi0jIFRlc3QgZm9yIHRoZSBuZWVkIHRvIHJlbW92ZSB0ZW1wb3JhcnkgZmlsZXMgdXNpbmcgYSBzaWduYWwgaGFuZGxlciAoZm9yIGNqcGVnL2RqcGVnKQotCi0kYXNfZWNobyAiI2RlZmluZSBORUVEX1NJR05BTF9DQVRDSEVSIDEiID4+Y29uZmRlZnMuaAotCi17ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGZvciAnbWt0ZW1wKCknIiA+JjUKLSRhc19lY2hvX24gImNoZWNraW5nIGZvciAnbWt0ZW1wKCknLi4uICIgPiY2OyB9Ci1jYXQgY29uZmRlZnMuaCAtIDw8X0FDRU9GID5jb25mdGVzdC4kYWNfZXh0Ci0vKiBlbmQgY29uZmRlZnMuaC4gICovCi0KLWludAotbWFpbiAoKQotewotIGNoYXIgZm5hbWVbODBdOyBta3RlbXAoZm5hbWUpOwotICA7Ci0gIHJldHVybiAwOwotfQotX0FDRU9GCi1pZiBhY19mbl9jX3RyeV9saW5rICIkTElORU5PIjsgdGhlbiA6Ci0gIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiB5ZXMiID4mNQotJGFzX2VjaG8gInllcyIgPiY2OyB9Ci1lbHNlCi0gIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiBubyIgPiY1Ci0kYXNfZWNobyAibm8iID4mNjsgfQotCi0kYXNfZWNobyAiI2RlZmluZSBOT19NS1RFTVAgMSIgPj5jb25mZGVmcy5oCi0KLWZpCi1ybSAtZiBjb3JlIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IFwKLSAgICBjb25mdGVzdCRhY19leGVleHQgY29uZnRlc3QuJGFjX2V4dAotZmkKLXJtIC1mIGNvcmUgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgXAotICAgIGNvbmZ0ZXN0JGFjX2V4ZWV4dCBjb25mdGVzdC4kYWNfZXh0Ci1maQotCi0KLSMgRXh0cmFjdCB0aGUgbGlicmFyeSB2ZXJzaW9uIElEcyBmcm9tIGpwZWdsaWIuaC4KLXsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgbGlianBlZyB2ZXJzaW9uIG51bWJlciIgPiY1Ci0kYXNfZWNob19uICJjaGVja2luZyBsaWJqcGVnIHZlcnNpb24gbnVtYmVyLi4uICIgPiY2OyB9Ci1KUEVHX0xJQl9WRVJTSU9OX01BSk9SPWBzZWQgLWUgJy9eI2RlZmluZSBKUEVHX0xJQl9WRVJTSU9OX01BSk9SLyFkJyAtZSAncy9eW14wLTldKlwoWzAtOV1bMC05XSpcKS4qJC9cMS8nICRzcmNkaXIvanBlZ2xpYi5oYAotSlBFR19MSUJfVkVSU0lPTl9NSU5PUj1gc2VkIC1lICcvXiNkZWZpbmUgSlBFR19MSUJfVkVSU0lPTl9NSU5PUi8hZCcgLWUgJ3MvXlteMC05XSpcKFswLTldWzAtOV0qXCkuKiQvXDEvJyAkc3JjZGlyL2pwZWdsaWIuaGAKLUpQRUdfTElCX1ZFUlNJT049ImBleHByICRKUEVHX0xJQl9WRVJTSU9OX01BSk9SICsgJEpQRUdfTElCX1ZFUlNJT05fTUlOT1JgOjA6JEpQRUdfTElCX1ZFUlNJT05fTUlOT1IiCi17ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJEpQRUdfTElCX1ZFUlNJT04iID4mNQotJGFzX2VjaG8gIiRKUEVHX0xJQl9WRVJTSU9OIiA+JjY7IH0KLQotCi1hY19jb25maWdfZmlsZXM9IiRhY19jb25maWdfZmlsZXMgTWFrZWZpbGUiCi0KLWNhdCA+Y29uZmNhY2hlIDw8XF9BQ0VPRgotIyBUaGlzIGZpbGUgaXMgYSBzaGVsbCBzY3JpcHQgdGhhdCBjYWNoZXMgdGhlIHJlc3VsdHMgb2YgY29uZmlndXJlCi0jIHRlc3RzIHJ1biBvbiB0aGlzIHN5c3RlbSBzbyB0aGV5IGNhbiBiZSBzaGFyZWQgYmV0d2VlbiBjb25maWd1cmUKLSMgc2NyaXB0cyBhbmQgY29uZmlndXJlIHJ1bnMsIHNlZSBjb25maWd1cmUncyBvcHRpb24gLS1jb25maWctY2FjaGUuCi0jIEl0IGlzIG5vdCB1c2VmdWwgb24gb3RoZXIgc3lzdGVtcy4gIElmIGl0IGNvbnRhaW5zIHJlc3VsdHMgeW91IGRvbid0Ci0jIHdhbnQgdG8ga2VlcCwgeW91IG1heSByZW1vdmUgb3IgZWRpdCBpdC4KLSMKLSMgY29uZmlnLnN0YXR1cyBvbmx5IHBheXMgYXR0ZW50aW9uIHRvIHRoZSBjYWNoZSBmaWxlIGlmIHlvdSBnaXZlIGl0Ci0jIHRoZSAtLXJlY2hlY2sgb3B0aW9uIHRvIHJlcnVuIGNvbmZpZ3VyZS4KLSMKLSMgYGFjX2N2X2Vudl9mb28nIHZhcmlhYmxlcyAoc2V0IG9yIHVuc2V0KSB3aWxsIGJlIG92ZXJyaWRkZW4gd2hlbgotIyBsb2FkaW5nIHRoaXMgZmlsZSwgb3RoZXIgKnVuc2V0KiBgYWNfY3ZfZm9vJyB3aWxsIGJlIGFzc2lnbmVkIHRoZQotIyBmb2xsb3dpbmcgdmFsdWVzLgotCi1fQUNFT0YKLQotIyBUaGUgZm9sbG93aW5nIHdheSBvZiB3cml0aW5nIHRoZSBjYWNoZSBtaXNoYW5kbGVzIG5ld2xpbmVzIGluIHZhbHVlcywKLSMgYnV0IHdlIGtub3cgb2Ygbm8gd29ya2Fyb3VuZCB0aGF0IGlzIHNpbXBsZSwgcG9ydGFibGUsIGFuZCBlZmZpY2llbnQuCi0jIFNvLCB3ZSBraWxsIHZhcmlhYmxlcyBjb250YWluaW5nIG5ld2xpbmVzLgotIyBVbHRyaXggc2ggc2V0IHdyaXRlcyB0byBzdGRlcnIgYW5kIGNhbid0IGJlIHJlZGlyZWN0ZWQgZGlyZWN0bHksCi0jIGFuZCBzZXRzIHRoZSBoaWdoIGJpdCBpbiB0aGUgY2FjaGUgZmlsZSB1bmxlc3Mgd2UgYXNzaWduIHRvIHRoZSB2YXJzLgotKAotICBmb3IgYWNfdmFyIGluIGAoc2V0KSAyPiYxIHwgc2VkIC1uICdzL15cKFthLXpBLVpfXVthLXpBLVowLTlfXSpcKT0uKi9cMS9wJ2A7IGRvCi0gICAgZXZhbCBhY192YWw9XCQkYWNfdmFyCi0gICAgY2FzZSAkYWNfdmFsIGluICMoCi0gICAgKiR7YXNfbmx9KikKLSAgICAgIGNhc2UgJGFjX3ZhciBpbiAjKAotICAgICAgKl9jdl8qKSB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IFdBUk5JTkc6IGNhY2hlIHZhcmlhYmxlICRhY192YXIgY29udGFpbnMgYSBuZXdsaW5lIiA+JjUKLSRhc19lY2hvICIkYXNfbWU6IFdBUk5JTkc6IGNhY2hlIHZhcmlhYmxlICRhY192YXIgY29udGFpbnMgYSBuZXdsaW5lIiA+JjI7fSA7OwotICAgICAgZXNhYwotICAgICAgY2FzZSAkYWNfdmFyIGluICMoCi0gICAgICBfIHwgSUZTIHwgYXNfbmwpIDs7ICMoCi0gICAgICBCQVNIX0FSR1YgfCBCQVNIX1NPVVJDRSkgZXZhbCAkYWNfdmFyPSA7OyAjKAotICAgICAgKikgeyBldmFsICRhY192YXI9OyB1bnNldCAkYWNfdmFyO30gOzsKLSAgICAgIGVzYWMgOzsKLSAgICBlc2FjCi0gIGRvbmUKLQotICAoc2V0KSAyPiYxIHwKLSAgICBjYXNlICRhc19ubGAoYWNfc3BhY2U9JyAnOyBzZXQpIDI+JjFgIGluICMoCi0gICAgKiR7YXNfbmx9YWNfc3BhY2U9XCAqKQotICAgICAgIyBgc2V0JyBkb2VzIG5vdCBxdW90ZSBjb3JyZWN0bHksIHNvIGFkZCBxdW90ZXM6IGRvdWJsZS1xdW90ZQotICAgICAgIyBzdWJzdGl0dXRpb24gdHVybnMgXFxcXCBpbnRvIFxcLCBhbmQgc2VkIHR1cm5zIFxcIGludG8gXC4KLSAgICAgIHNlZCAtbiBcCi0JInMvJy8nXFxcXCcnL2c7Ci0JICBzL15cXChbXyRhc19jcl9hbG51bV0qX2N2X1tfJGFzX2NyX2FsbnVtXSpcXCk9XFwoLipcXCkvXFwxPSdcXDInL3AiCi0gICAgICA7OyAjKAotICAgICopCi0gICAgICAjIGBzZXQnIHF1b3RlcyBjb3JyZWN0bHkgYXMgcmVxdWlyZWQgYnkgUE9TSVgsIHNvIGRvIG5vdCBhZGQgcXVvdGVzLgotICAgICAgc2VkIC1uICIvXltfJGFzX2NyX2FsbnVtXSpfY3ZfW18kYXNfY3JfYWxudW1dKj0vcCIKLSAgICAgIDs7Ci0gICAgZXNhYyB8Ci0gICAgc29ydAotKSB8Ci0gIHNlZCAnCi0gICAgIC9eYWNfY3ZfZW52Xy9iIGVuZAotICAgICB0IGNsZWFyCi0gICAgIDpjbGVhcgotICAgICBzL15cKFtePV0qXCk9XCguKlt7fV0uKlwpJC90ZXN0ICIke1wxK3NldH0iID0gc2V0IHx8ICYvCi0gICAgIHQgZW5kCi0gICAgIHMvXlwoW149XSpcKT1cKC4qXCkkL1wxPSR7XDE9XDJ9LwotICAgICA6ZW5kJyA+PmNvbmZjYWNoZQotaWYgZGlmZiAiJGNhY2hlX2ZpbGUiIGNvbmZjYWNoZSA+L2Rldi9udWxsIDI+JjE7IHRoZW4gOjsgZWxzZQotICBpZiB0ZXN0IC13ICIkY2FjaGVfZmlsZSI7IHRoZW4KLSAgICBpZiB0ZXN0ICJ4JGNhY2hlX2ZpbGUiICE9ICJ4L2Rldi9udWxsIjsgdGhlbgotICAgICAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiB1cGRhdGluZyBjYWNoZSAkY2FjaGVfZmlsZSIgPiY1Ci0kYXNfZWNobyAiJGFzX21lOiB1cGRhdGluZyBjYWNoZSAkY2FjaGVfZmlsZSIgPiY2O30KLSAgICAgIGlmIHRlc3QgISAtZiAiJGNhY2hlX2ZpbGUiIHx8IHRlc3QgLWggIiRjYWNoZV9maWxlIjsgdGhlbgotCWNhdCBjb25mY2FjaGUgPiIkY2FjaGVfZmlsZSIKLSAgICAgIGVsc2UKLSAgICAgICAgY2FzZSAkY2FjaGVfZmlsZSBpbiAjKAotICAgICAgICAqLyogfCA/OiopCi0JICBtdiAtZiBjb25mY2FjaGUgIiRjYWNoZV9maWxlIiQkICYmCi0JICBtdiAtZiAiJGNhY2hlX2ZpbGUiJCQgIiRjYWNoZV9maWxlIiA7OyAjKAotICAgICAgICAqKQotCSAgbXYgLWYgY29uZmNhY2hlICIkY2FjaGVfZmlsZSIgOzsKLQllc2FjCi0gICAgICBmaQotICAgIGZpCi0gIGVsc2UKLSAgICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IG5vdCB1cGRhdGluZyB1bndyaXRhYmxlIGNhY2hlICRjYWNoZV9maWxlIiA+JjUKLSRhc19lY2hvICIkYXNfbWU6IG5vdCB1cGRhdGluZyB1bndyaXRhYmxlIGNhY2hlICRjYWNoZV9maWxlIiA+JjY7fQotICBmaQotZmkKLXJtIC1mIGNvbmZjYWNoZQotCi10ZXN0ICJ4JHByZWZpeCIgPSB4Tk9ORSAmJiBwcmVmaXg9JGFjX2RlZmF1bHRfcHJlZml4Ci0jIExldCBtYWtlIGV4cGFuZCBleGVjX3ByZWZpeC4KLXRlc3QgIngkZXhlY19wcmVmaXgiID0geE5PTkUgJiYgZXhlY19wcmVmaXg9JyR7cHJlZml4fScKLQotREVGUz0tREhBVkVfQ09ORklHX0gKLQotYWNfbGlib2Jqcz0KLWFjX2x0bGlib2Jqcz0KLWZvciBhY19pIGluIDogJExJQk9CSlM7IGRvIHRlc3QgIngkYWNfaSIgPSB4OiAmJiBjb250aW51ZQotICAjIDEuIFJlbW92ZSB0aGUgZXh0ZW5zaW9uLCBhbmQgJFUgaWYgYWxyZWFkeSBpbnN0YWxsZWQuCi0gIGFjX3NjcmlwdD0ncy9cJFVcLi8uLztzL1wubyQvLztzL1wub2JqJC8vJwotICBhY19pPWAkYXNfZWNobyAiJGFjX2kiIHwgc2VkICIkYWNfc2NyaXB0ImAKLSAgIyAyLiBQcmVwZW5kIExJQk9CSkRJUi4gIFdoZW4gdXNlZCB3aXRoIGF1dG9tYWtlPj0xLjEwIExJQk9CSkRJUgotICAjICAgIHdpbGwgYmUgc2V0IHRvIHRoZSBkaXJlY3Rvcnkgd2hlcmUgTElCT0JKUyBvYmplY3RzIGFyZSBidWlsdC4KLSAgYXNfZm5fYXBwZW5kIGFjX2xpYm9ianMgIiBcJHtMSUJPQkpESVJ9JGFjX2lcJFUuJGFjX29iamV4dCIKLSAgYXNfZm5fYXBwZW5kIGFjX2x0bGlib2JqcyAiIFwke0xJQk9CSkRJUn0kYWNfaSInJFUubG8nCi1kb25lCi1MSUJPQkpTPSRhY19saWJvYmpzCi0KLUxUTElCT0JKUz0kYWNfbHRsaWJvYmpzCi0KLQotIGlmIHRlc3QgLW4gIiRFWEVFWFQiOyB0aGVuCi0gIGFtX19FWEVFWFRfVFJVRT0KLSAgYW1fX0VYRUVYVF9GQUxTRT0nIycKLWVsc2UKLSAgYW1fX0VYRUVYVF9UUlVFPScjJwotICBhbV9fRVhFRVhUX0ZBTFNFPQotZmkKLQotaWYgdGVzdCAteiAiJHtBTURFUF9UUlVFfSIgJiYgdGVzdCAteiAiJHtBTURFUF9GQUxTRX0iOyB0aGVuCi0gIGFzX2ZuX2Vycm9yICQ/ICJjb25kaXRpb25hbCBcIkFNREVQXCIgd2FzIG5ldmVyIGRlZmluZWQuCi1Vc3VhbGx5IHRoaXMgbWVhbnMgdGhlIG1hY3JvIHdhcyBvbmx5IGludm9rZWQgY29uZGl0aW9uYWxseS4iICIkTElORU5PIiA1Ci1maQotaWYgdGVzdCAteiAiJHthbV9fZmFzdGRlcENDX1RSVUV9IiAmJiB0ZXN0IC16ICIke2FtX19mYXN0ZGVwQ0NfRkFMU0V9IjsgdGhlbgotICBhc19mbl9lcnJvciAkPyAiY29uZGl0aW9uYWwgXCJhbV9fZmFzdGRlcENDXCIgd2FzIG5ldmVyIGRlZmluZWQuCi1Vc3VhbGx5IHRoaXMgbWVhbnMgdGhlIG1hY3JvIHdhcyBvbmx5IGludm9rZWQgY29uZGl0aW9uYWxseS4iICIkTElORU5PIiA1Ci1maQotaWYgdGVzdCAteiAiJHtNQUlOVEFJTkVSX01PREVfVFJVRX0iICYmIHRlc3QgLXogIiR7TUFJTlRBSU5FUl9NT0RFX0ZBTFNFfSI7IHRoZW4KLSAgYXNfZm5fZXJyb3IgJD8gImNvbmRpdGlvbmFsIFwiTUFJTlRBSU5FUl9NT0RFXCIgd2FzIG5ldmVyIGRlZmluZWQuCi1Vc3VhbGx5IHRoaXMgbWVhbnMgdGhlIG1hY3JvIHdhcyBvbmx5IGludm9rZWQgY29uZGl0aW9uYWxseS4iICIkTElORU5PIiA1Ci1maQotaWYgdGVzdCAteiAiJHthbV9fZmFzdGRlcENDX1RSVUV9IiAmJiB0ZXN0IC16ICIke2FtX19mYXN0ZGVwQ0NfRkFMU0V9IjsgdGhlbgotICBhc19mbl9lcnJvciAkPyAiY29uZGl0aW9uYWwgXCJhbV9fZmFzdGRlcENDXCIgd2FzIG5ldmVyIGRlZmluZWQuCi1Vc3VhbGx5IHRoaXMgbWVhbnMgdGhlIG1hY3JvIHdhcyBvbmx5IGludm9rZWQgY29uZGl0aW9uYWxseS4iICIkTElORU5PIiA1Ci1maQotaWYgdGVzdCAteiAiJHtIQVZFX0xEX1ZFUlNJT05fU0NSSVBUX1RSVUV9IiAmJiB0ZXN0IC16ICIke0hBVkVfTERfVkVSU0lPTl9TQ1JJUFRfRkFMU0V9IjsgdGhlbgotICBhc19mbl9lcnJvciAkPyAiY29uZGl0aW9uYWwgXCJIQVZFX0xEX1ZFUlNJT05fU0NSSVBUXCIgd2FzIG5ldmVyIGRlZmluZWQuCi1Vc3VhbGx5IHRoaXMgbWVhbnMgdGhlIG1hY3JvIHdhcyBvbmx5IGludm9rZWQgY29uZGl0aW9uYWxseS4iICIkTElORU5PIiA1Ci1maQotCi06ICIke0NPTkZJR19TVEFUVVM9Li9jb25maWcuc3RhdHVzfSIKLWFjX3dyaXRlX2ZhaWw9MAotYWNfY2xlYW5fZmlsZXNfc2F2ZT0kYWNfY2xlYW5fZmlsZXMKLWFjX2NsZWFuX2ZpbGVzPSIkYWNfY2xlYW5fZmlsZXMgJENPTkZJR19TVEFUVVMiCi17ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNyZWF0aW5nICRDT05GSUdfU1RBVFVTIiA+JjUKLSRhc19lY2hvICIkYXNfbWU6IGNyZWF0aW5nICRDT05GSUdfU1RBVFVTIiA+JjY7fQotYXNfd3JpdGVfZmFpbD0wCi1jYXQgPiRDT05GSUdfU1RBVFVTIDw8X0FTRU9GIHx8IGFzX3dyaXRlX2ZhaWw9MQotIyEgJFNIRUxMCi0jIEdlbmVyYXRlZCBieSAkYXNfbWUuCi0jIFJ1biB0aGlzIGZpbGUgdG8gcmVjcmVhdGUgdGhlIGN1cnJlbnQgY29uZmlndXJhdGlvbi4KLSMgQ29tcGlsZXIgb3V0cHV0IHByb2R1Y2VkIGJ5IGNvbmZpZ3VyZSwgdXNlZnVsIGZvciBkZWJ1Z2dpbmcKLSMgY29uZmlndXJlLCBpcyBpbiBjb25maWcubG9nIGlmIGl0IGV4aXN0cy4KLQotZGVidWc9ZmFsc2UKLWFjX2NzX3JlY2hlY2s9ZmFsc2UKLWFjX2NzX3NpbGVudD1mYWxzZQotCi1TSEVMTD1cJHtDT05GSUdfU0hFTEwtJFNIRUxMfQotZXhwb3J0IFNIRUxMCi1fQVNFT0YKLWNhdCA+PiRDT05GSUdfU1RBVFVTIDw8XF9BU0VPRiB8fCBhc193cml0ZV9mYWlsPTEKLSMjIC0tLS0tLS0tLS0tLS0tLS0tLS0tICMjCi0jIyBNNHNoIEluaXRpYWxpemF0aW9uLiAjIwotIyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0gIyMKLQotIyBCZSBtb3JlIEJvdXJuZSBjb21wYXRpYmxlCi1EVUFMQ0FTRT0xOyBleHBvcnQgRFVBTENBU0UgIyBmb3IgTUtTIHNoCi1pZiB0ZXN0IC1uICIke1pTSF9WRVJTSU9OK3NldH0iICYmIChlbXVsYXRlIHNoKSA+L2Rldi9udWxsIDI+JjE7IHRoZW4gOgotICBlbXVsYXRlIHNoCi0gIE5VTExDTUQ9OgotICAjIFByZS00LjIgdmVyc2lvbnMgb2YgWnNoIGRvIHdvcmQgc3BsaXR0aW5nIG9uICR7MSsiJEAifSwgd2hpY2gKLSAgIyBpcyBjb250cmFyeSB0byBvdXIgdXNhZ2UuICBEaXNhYmxlIHRoaXMgZmVhdHVyZS4KLSAgYWxpYXMgLWcgJyR7MSsiJEAifSc9JyIkQCInCi0gIHNldG9wdCBOT19HTE9CX1NVQlNUCi1lbHNlCi0gIGNhc2UgYChzZXQgLW8pIDI+L2Rldi9udWxsYCBpbiAjKAotICAqcG9zaXgqKSA6Ci0gICAgc2V0IC1vIHBvc2l4IDs7ICMoCi0gICopIDoKLSAgICAgOzsKLWVzYWMKLWZpCi0KLQotYXNfbmw9JwotJwotZXhwb3J0IGFzX25sCi0jIFByaW50aW5nIGEgbG9uZyBzdHJpbmcgY3Jhc2hlcyBTb2xhcmlzIDcgL3Vzci9iaW4vcHJpbnRmLgotYXNfZWNobz0nXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXCcKLWFzX2VjaG89JGFzX2VjaG8kYXNfZWNobyRhc19lY2hvJGFzX2VjaG8kYXNfZWNobwotYXNfZWNobz0kYXNfZWNobyRhc19lY2hvJGFzX2VjaG8kYXNfZWNobyRhc19lY2hvJGFzX2VjaG8KLSMgUHJlZmVyIGEga3NoIHNoZWxsIGJ1aWx0aW4gb3ZlciBhbiBleHRlcm5hbCBwcmludGYgcHJvZ3JhbSBvbiBTb2xhcmlzLAotIyBidXQgd2l0aG91dCB3YXN0aW5nIGZvcmtzIGZvciBiYXNoIG9yIHpzaC4KLWlmIHRlc3QgLXogIiRCQVNIX1ZFUlNJT04kWlNIX1ZFUlNJT04iIFwKLSAgICAmJiAodGVzdCAiWGBwcmludCAtciAtLSAkYXNfZWNob2AiID0gIlgkYXNfZWNobyIpIDI+L2Rldi9udWxsOyB0aGVuCi0gIGFzX2VjaG89J3ByaW50IC1yIC0tJwotICBhc19lY2hvX249J3ByaW50IC1ybiAtLScKLWVsaWYgKHRlc3QgIlhgcHJpbnRmICVzICRhc19lY2hvYCIgPSAiWCRhc19lY2hvIikgMj4vZGV2L251bGw7IHRoZW4KLSAgYXNfZWNobz0ncHJpbnRmICVzXG4nCi0gIGFzX2VjaG9fbj0ncHJpbnRmICVzJwotZWxzZQotICBpZiB0ZXN0ICJYYCgvdXNyL3VjYi9lY2hvIC1uIC1uICRhc19lY2hvKSAyPi9kZXYvbnVsbGAiID0gIlgtbiAkYXNfZWNobyI7IHRoZW4KLSAgICBhc19lY2hvX2JvZHk9J2V2YWwgL3Vzci91Y2IvZWNobyAtbiAiJDEkYXNfbmwiJwotICAgIGFzX2VjaG9fbj0nL3Vzci91Y2IvZWNobyAtbicKLSAgZWxzZQotICAgIGFzX2VjaG9fYm9keT0nZXZhbCBleHByICJYJDEiIDogIlhcXCguKlxcKSInCi0gICAgYXNfZWNob19uX2JvZHk9J2V2YWwKLSAgICAgIGFyZz0kMTsKLSAgICAgIGNhc2UgJGFyZyBpbiAjKAotICAgICAgKiIkYXNfbmwiKikKLQlleHByICJYJGFyZyIgOiAiWFxcKC4qXFwpJGFzX25sIjsKLQlhcmc9YGV4cHIgIlgkYXJnIiA6ICIuKiRhc19ubFxcKC4qXFwpImA7OwotICAgICAgZXNhYzsKLSAgICAgIGV4cHIgIlgkYXJnIiA6ICJYXFwoLipcXCkiIHwgdHIgLWQgIiRhc19ubCIKLSAgICAnCi0gICAgZXhwb3J0IGFzX2VjaG9fbl9ib2R5Ci0gICAgYXNfZWNob19uPSdzaCAtYyAkYXNfZWNob19uX2JvZHkgYXNfZWNobycKLSAgZmkKLSAgZXhwb3J0IGFzX2VjaG9fYm9keQotICBhc19lY2hvPSdzaCAtYyAkYXNfZWNob19ib2R5IGFzX2VjaG8nCi1maQotCi0jIFRoZSB1c2VyIGlzIGFsd2F5cyByaWdodC4KLWlmIHRlc3QgIiR7UEFUSF9TRVBBUkFUT1Irc2V0fSIgIT0gc2V0OyB0aGVuCi0gIFBBVEhfU0VQQVJBVE9SPToKLSAgKFBBVEg9Jy9iaW47L2Jpbic7IEZQQVRIPSRQQVRIOyBzaCAtYyA6KSA+L2Rldi9udWxsIDI+JjEgJiYgewotICAgIChQQVRIPScvYmluOi9iaW4nOyBGUEFUSD0kUEFUSDsgc2ggLWMgOikgPi9kZXYvbnVsbCAyPiYxIHx8Ci0gICAgICBQQVRIX1NFUEFSQVRPUj0nOycKLSAgfQotZmkKLQotCi0jIElGUwotIyBXZSBuZWVkIHNwYWNlLCB0YWIgYW5kIG5ldyBsaW5lLCBpbiBwcmVjaXNlbHkgdGhhdCBvcmRlci4gIFF1b3RpbmcgaXMKLSMgdGhlcmUgdG8gcHJldmVudCBlZGl0b3JzIGZyb20gY29tcGxhaW5pbmcgYWJvdXQgc3BhY2UtdGFiLgotIyAoSWYgX0FTX1BBVEhfV0FMSyB3ZXJlIGNhbGxlZCB3aXRoIElGUyB1bnNldCwgaXQgd291bGQgZGlzYWJsZSB3b3JkCi0jIHNwbGl0dGluZyBieSBzZXR0aW5nIElGUyB0byBlbXB0eSB2YWx1ZS4pCi1JRlM9IiAiIgkkYXNfbmwiCi0KLSMgRmluZCB3aG8gd2UgYXJlLiAgTG9vayBpbiB0aGUgcGF0aCBpZiB3ZSBjb250YWluIG5vIGRpcmVjdG9yeSBzZXBhcmF0b3IuCi1hc19teXNlbGY9Ci1jYXNlICQwIGluICMoKAotICAqW1xcL10qICkgYXNfbXlzZWxmPSQwIDs7Ci0gICopIGFzX3NhdmVfSUZTPSRJRlM7IElGUz0kUEFUSF9TRVBBUkFUT1IKLWZvciBhc19kaXIgaW4gJFBBVEgKLWRvCi0gIElGUz0kYXNfc2F2ZV9JRlMKLSAgdGVzdCAteiAiJGFzX2RpciIgJiYgYXNfZGlyPS4KLSAgICB0ZXN0IC1yICIkYXNfZGlyLyQwIiAmJiBhc19teXNlbGY9JGFzX2Rpci8kMCAmJiBicmVhawotICBkb25lCi1JRlM9JGFzX3NhdmVfSUZTCi0KLSAgICAgOzsKLWVzYWMKLSMgV2UgZGlkIG5vdCBmaW5kIG91cnNlbHZlcywgbW9zdCBwcm9iYWJseSB3ZSB3ZXJlIHJ1biBhcyBgc2ggQ09NTUFORCcKLSMgaW4gd2hpY2ggY2FzZSB3ZSBhcmUgbm90IHRvIGJlIGZvdW5kIGluIHRoZSBwYXRoLgotaWYgdGVzdCAieCRhc19teXNlbGYiID0geDsgdGhlbgotICBhc19teXNlbGY9JDAKLWZpCi1pZiB0ZXN0ICEgLWYgIiRhc19teXNlbGYiOyB0aGVuCi0gICRhc19lY2hvICIkYXNfbXlzZWxmOiBlcnJvcjogY2Fubm90IGZpbmQgbXlzZWxmOyByZXJ1biB3aXRoIGFuIGFic29sdXRlIGZpbGUgbmFtZSIgPiYyCi0gIGV4aXQgMQotZmkKLQotIyBVbnNldCB2YXJpYWJsZXMgdGhhdCB3ZSBkbyBub3QgbmVlZCBhbmQgd2hpY2ggY2F1c2UgYnVncyAoZS5nLiBpbgotIyBwcmUtMy4wIFVXSU4ga3NoKS4gIEJ1dCBkbyBub3QgY2F1c2UgYnVncyBpbiBiYXNoIDIuMDE7IHRoZSAifHwgZXhpdCAxIgotIyBzdXBwcmVzc2VzIGFueSAiU2VnbWVudGF0aW9uIGZhdWx0IiBtZXNzYWdlIHRoZXJlLiAgJygoJyBjb3VsZAotIyB0cmlnZ2VyIGEgYnVnIGluIHBka3NoIDUuMi4xNC4KLWZvciBhc192YXIgaW4gQkFTSF9FTlYgRU5WIE1BSUwgTUFJTFBBVEgKLWRvIGV2YWwgdGVzdCB4XCR7JGFzX3ZhcitzZXR9ID0geHNldCBcCi0gICYmICggKHVuc2V0ICRhc192YXIpIHx8IGV4aXQgMSkgPi9kZXYvbnVsbCAyPiYxICYmIHVuc2V0ICRhc192YXIgfHwgOgotZG9uZQotUFMxPSckICcKLVBTMj0nPiAnCi1QUzQ9JysgJwotCi0jIE5MUyBudWlzYW5jZXMuCi1MQ19BTEw9QwotZXhwb3J0IExDX0FMTAotTEFOR1VBR0U9QwotZXhwb3J0IExBTkdVQUdFCi0KLSMgQ0RQQVRILgotKHVuc2V0IENEUEFUSCkgPi9kZXYvbnVsbCAyPiYxICYmIHVuc2V0IENEUEFUSAotCi0KLSMgYXNfZm5fZXJyb3IgU1RBVFVTIEVSUk9SIFtMSU5FTk8gTE9HX0ZEXQotIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0jIE91dHB1dCAiYGJhc2VuYW1lICQwYDogZXJyb3I6IEVSUk9SIiB0byBzdGRlcnIuIElmIExJTkVOTyBhbmQgTE9HX0ZEIGFyZQotIyBwcm92aWRlZCwgYWxzbyBvdXRwdXQgdGhlIGVycm9yIHRvIExPR19GRCwgcmVmZXJlbmNpbmcgTElORU5PLiBUaGVuIGV4aXQgdGhlCi0jIHNjcmlwdCB3aXRoIFNUQVRVUywgdXNpbmcgMSBpZiB0aGF0IHdhcyAwLgotYXNfZm5fZXJyb3IgKCkKLXsKLSAgYXNfc3RhdHVzPSQxOyB0ZXN0ICRhc19zdGF0dXMgLWVxIDAgJiYgYXNfc3RhdHVzPTEKLSAgaWYgdGVzdCAiJDQiOyB0aGVuCi0gICAgYXNfbGluZW5vPSR7YXNfbGluZW5vLSIkMyJ9IGFzX2xpbmVub19zdGFjaz1hc19saW5lbm9fc3RhY2s9JGFzX2xpbmVub19zdGFjawotICAgICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGVycm9yOiAkMiIgPiYkNAotICBmaQotICAkYXNfZWNobyAiJGFzX21lOiBlcnJvcjogJDIiID4mMgotICBhc19mbl9leGl0ICRhc19zdGF0dXMKLX0gIyBhc19mbl9lcnJvcgotCi0KLSMgYXNfZm5fc2V0X3N0YXR1cyBTVEFUVVMKLSMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSMgU2V0ICQ/IHRvIFNUQVRVUywgd2l0aG91dCBmb3JraW5nLgotYXNfZm5fc2V0X3N0YXR1cyAoKQotewotICByZXR1cm4gJDEKLX0gIyBhc19mbl9zZXRfc3RhdHVzCi0KLSMgYXNfZm5fZXhpdCBTVEFUVVMKLSMgLS0tLS0tLS0tLS0tLS0tLS0KLSMgRXhpdCB0aGUgc2hlbGwgd2l0aCBTVEFUVVMsIGV2ZW4gaW4gYSAidHJhcCAwIiBvciAic2V0IC1lIiBjb250ZXh0LgotYXNfZm5fZXhpdCAoKQotewotICBzZXQgK2UKLSAgYXNfZm5fc2V0X3N0YXR1cyAkMQotICBleGl0ICQxCi19ICMgYXNfZm5fZXhpdAotCi0jIGFzX2ZuX3Vuc2V0IFZBUgotIyAtLS0tLS0tLS0tLS0tLS0KLSMgUG9ydGFibHkgdW5zZXQgVkFSLgotYXNfZm5fdW5zZXQgKCkKLXsKLSAgeyBldmFsICQxPTsgdW5zZXQgJDE7fQotfQotYXNfdW5zZXQ9YXNfZm5fdW5zZXQKLSMgYXNfZm5fYXBwZW5kIFZBUiBWQUxVRQotIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0jIEFwcGVuZCB0aGUgdGV4dCBpbiBWQUxVRSB0byB0aGUgZW5kIG9mIHRoZSBkZWZpbml0aW9uIGNvbnRhaW5lZCBpbiBWQVIuIFRha2UKLSMgYWR2YW50YWdlIG9mIGFueSBzaGVsbCBvcHRpbWl6YXRpb25zIHRoYXQgYWxsb3cgYW1vcnRpemVkIGxpbmVhciBncm93dGggb3ZlcgotIyByZXBlYXRlZCBhcHBlbmRzLCBpbnN0ZWFkIG9mIHRoZSB0eXBpY2FsIHF1YWRyYXRpYyBncm93dGggcHJlc2VudCBpbiBuYWl2ZQotIyBpbXBsZW1lbnRhdGlvbnMuCi1pZiAoZXZhbCAiYXNfdmFyPTE7IGFzX3Zhcis9MjsgdGVzdCB4XCRhc192YXIgPSB4MTIiKSAyPi9kZXYvbnVsbDsgdGhlbiA6Ci0gIGV2YWwgJ2FzX2ZuX2FwcGVuZCAoKQotICB7Ci0gICAgZXZhbCAkMSs9XCQyCi0gIH0nCi1lbHNlCi0gIGFzX2ZuX2FwcGVuZCAoKQotICB7Ci0gICAgZXZhbCAkMT1cJCQxXCQyCi0gIH0KLWZpICMgYXNfZm5fYXBwZW5kCi0KLSMgYXNfZm5fYXJpdGggQVJHLi4uCi0jIC0tLS0tLS0tLS0tLS0tLS0tLQotIyBQZXJmb3JtIGFyaXRobWV0aWMgZXZhbHVhdGlvbiBvbiB0aGUgQVJHcywgYW5kIHN0b3JlIHRoZSByZXN1bHQgaW4gdGhlCi0jIGdsb2JhbCAkYXNfdmFsLiBUYWtlIGFkdmFudGFnZSBvZiBzaGVsbHMgdGhhdCBjYW4gYXZvaWQgZm9ya3MuIFRoZSBhcmd1bWVudHMKLSMgbXVzdCBiZSBwb3J0YWJsZSBhY3Jvc3MgJCgoKSkgYW5kIGV4cHIuCi1pZiAoZXZhbCAidGVzdCBcJCgoIDEgKyAxICkpID0gMiIpIDI+L2Rldi9udWxsOyB0aGVuIDoKLSAgZXZhbCAnYXNfZm5fYXJpdGggKCkKLSAgewotICAgIGFzX3ZhbD0kKCggJCogKSkKLSAgfScKLWVsc2UKLSAgYXNfZm5fYXJpdGggKCkKLSAgewotICAgIGFzX3ZhbD1gZXhwciAiJEAiIHx8IHRlc3QgJD8gLWVxIDFgCi0gIH0KLWZpICMgYXNfZm5fYXJpdGgKLQotCi1pZiBleHByIGEgOiAnXChhXCknID4vZGV2L251bGwgMj4mMSAmJgotICAgdGVzdCAiWGBleHByIDAwMDAxIDogJy4qXCguLi5cKSdgIiA9IFgwMDE7IHRoZW4KLSAgYXNfZXhwcj1leHByCi1lbHNlCi0gIGFzX2V4cHI9ZmFsc2UKLWZpCi0KLWlmIChiYXNlbmFtZSAtLSAvKSA+L2Rldi9udWxsIDI+JjEgJiYgdGVzdCAiWGBiYXNlbmFtZSAtLSAvIDI+JjFgIiA9ICJYLyI7IHRoZW4KLSAgYXNfYmFzZW5hbWU9YmFzZW5hbWUKLWVsc2UKLSAgYXNfYmFzZW5hbWU9ZmFsc2UKLWZpCi0KLWlmIChhc19kaXI9YGRpcm5hbWUgLS0gL2AgJiYgdGVzdCAiWCRhc19kaXIiID0gWC8pID4vZGV2L251bGwgMj4mMTsgdGhlbgotICBhc19kaXJuYW1lPWRpcm5hbWUKLWVsc2UKLSAgYXNfZGlybmFtZT1mYWxzZQotZmkKLQotYXNfbWU9YCRhc19iYXNlbmFtZSAtLSAiJDAiIHx8Ci0kYXNfZXhwciBYLyIkMCIgOiAnLiovXChbXi9dW14vXSpcKS8qJCcgXHwgXAotCSBYIiQwIiA6ICdYXCgvL1wpJCcgXHwgXAotCSBYIiQwIiA6ICdYXCgvXCknIFx8IC4gMj4vZGV2L251bGwgfHwKLSRhc19lY2hvIFgvIiQwIiB8Ci0gICAgc2VkICcvXi4qXC9cKFteL11bXi9dKlwpXC8qJC97Ci0JICAgIHMvL1wxLwotCSAgICBxCi0JICB9Ci0JICAvXlhcL1woXC9cL1wpJC97Ci0JICAgIHMvL1wxLwotCSAgICBxCi0JICB9Ci0JICAvXlhcL1woXC9cKS4qL3sKLQkgICAgcy8vXDEvCi0JICAgIHEKLQkgIH0KLQkgIHMvLiovLi87IHEnYAotCi0jIEF2b2lkIGRlcGVuZGluZyB1cG9uIENoYXJhY3RlciBSYW5nZXMuCi1hc19jcl9sZXR0ZXJzPSdhYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5eicKLWFzX2NyX0xFVFRFUlM9J0FCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaJwotYXNfY3JfTGV0dGVycz0kYXNfY3JfbGV0dGVycyRhc19jcl9MRVRURVJTCi1hc19jcl9kaWdpdHM9JzAxMjM0NTY3ODknCi1hc19jcl9hbG51bT0kYXNfY3JfTGV0dGVycyRhc19jcl9kaWdpdHMKLQotRUNIT19DPSBFQ0hPX049IEVDSE9fVD0KLWNhc2UgYGVjaG8gLW4geGAgaW4gIygoKCgoCi0tbiopCi0gIGNhc2UgYGVjaG8gJ3h5XGMnYCBpbgotICAqYyopIEVDSE9fVD0nCSc7OwkjIEVDSE9fVCBpcyBzaW5nbGUgdGFiIGNoYXJhY3Rlci4KLSAgeHkpICBFQ0hPX0M9J1xjJzs7Ci0gICopICAgZWNobyBgZWNobyBrc2g4OCBidWcgb24gQUlYIDYuMWAgPiAvZGV2L251bGwKLSAgICAgICBFQ0hPX1Q9JwknOzsKLSAgZXNhYzs7Ci0qKQotICBFQ0hPX049Jy1uJzs7Ci1lc2FjCi0KLXJtIC1mIGNvbmYkJCBjb25mJCQuZXhlIGNvbmYkJC5maWxlCi1pZiB0ZXN0IC1kIGNvbmYkJC5kaXI7IHRoZW4KLSAgcm0gLWYgY29uZiQkLmRpci9jb25mJCQuZmlsZQotZWxzZQotICBybSAtZiBjb25mJCQuZGlyCi0gIG1rZGlyIGNvbmYkJC5kaXIgMj4vZGV2L251bGwKLWZpCi1pZiAoZWNobyA+Y29uZiQkLmZpbGUpIDI+L2Rldi9udWxsOyB0aGVuCi0gIGlmIGxuIC1zIGNvbmYkJC5maWxlIGNvbmYkJCAyPi9kZXYvbnVsbDsgdGhlbgotICAgIGFzX2xuX3M9J2xuIC1zJwotICAgICMgLi4uIGJ1dCB0aGVyZSBhcmUgdHdvIGdvdGNoYXM6Ci0gICAgIyAxKSBPbiBNU1lTLCBib3RoIGBsbiAtcyBmaWxlIGRpcicgYW5kIGBsbiBmaWxlIGRpcicgZmFpbC4KLSAgICAjIDIpIERKR1BQIDwgMi4wNCBoYXMgbm8gc3ltbGlua3M7IGBsbiAtcycgY3JlYXRlcyBhIHdyYXBwZXIgZXhlY3V0YWJsZS4KLSAgICAjIEluIGJvdGggY2FzZXMsIHdlIGhhdmUgdG8gZGVmYXVsdCB0byBgY3AgLXAnLgotICAgIGxuIC1zIGNvbmYkJC5maWxlIGNvbmYkJC5kaXIgMj4vZGV2L251bGwgJiYgdGVzdCAhIC1mIGNvbmYkJC5leGUgfHwKLSAgICAgIGFzX2xuX3M9J2NwIC1wJwotICBlbGlmIGxuIGNvbmYkJC5maWxlIGNvbmYkJCAyPi9kZXYvbnVsbDsgdGhlbgotICAgIGFzX2xuX3M9bG4KLSAgZWxzZQotICAgIGFzX2xuX3M9J2NwIC1wJwotICBmaQotZWxzZQotICBhc19sbl9zPSdjcCAtcCcKLWZpCi1ybSAtZiBjb25mJCQgY29uZiQkLmV4ZSBjb25mJCQuZGlyL2NvbmYkJC5maWxlIGNvbmYkJC5maWxlCi1ybWRpciBjb25mJCQuZGlyIDI+L2Rldi9udWxsCi0KLQotIyBhc19mbl9ta2Rpcl9wCi0jIC0tLS0tLS0tLS0tLS0KLSMgQ3JlYXRlICIkYXNfZGlyIiBhcyBhIGRpcmVjdG9yeSwgaW5jbHVkaW5nIHBhcmVudHMgaWYgbmVjZXNzYXJ5LgotYXNfZm5fbWtkaXJfcCAoKQotewotCi0gIGNhc2UgJGFzX2RpciBpbiAjKAotICAtKikgYXNfZGlyPS4vJGFzX2Rpcjs7Ci0gIGVzYWMKLSAgdGVzdCAtZCAiJGFzX2RpciIgfHwgZXZhbCAkYXNfbWtkaXJfcCB8fCB7Ci0gICAgYXNfZGlycz0KLSAgICB3aGlsZSA6OyBkbwotICAgICAgY2FzZSAkYXNfZGlyIGluICMoCi0gICAgICAqXCcqKSBhc19xZGlyPWAkYXNfZWNobyAiJGFzX2RpciIgfCBzZWQgInMvJy8nXFxcXFxcXFwnJy9nImA7OyAjJygKLSAgICAgICopIGFzX3FkaXI9JGFzX2Rpcjs7Ci0gICAgICBlc2FjCi0gICAgICBhc19kaXJzPSInJGFzX3FkaXInICRhc19kaXJzIgotICAgICAgYXNfZGlyPWAkYXNfZGlybmFtZSAtLSAiJGFzX2RpciIgfHwKLSRhc19leHByIFgiJGFzX2RpciIgOiAnWFwoLipbXi9dXCkvLypbXi9dW14vXSovKiQnIFx8IFwKLQkgWCIkYXNfZGlyIiA6ICdYXCgvL1wpW14vXScgXHwgXAotCSBYIiRhc19kaXIiIDogJ1hcKC8vXCkkJyBcfCBcCi0JIFgiJGFzX2RpciIgOiAnWFwoL1wpJyBcfCAuIDI+L2Rldi9udWxsIHx8Ci0kYXNfZWNobyBYIiRhc19kaXIiIHwKLSAgICBzZWQgJy9eWFwoLipbXi9dXClcL1wvKlteL11bXi9dKlwvKiQvewotCSAgICBzLy9cMS8KLQkgICAgcQotCSAgfQotCSAgL15YXChcL1wvXClbXi9dLiovewotCSAgICBzLy9cMS8KLQkgICAgcQotCSAgfQotCSAgL15YXChcL1wvXCkkL3sKLQkgICAgcy8vXDEvCi0JICAgIHEKLQkgIH0KLQkgIC9eWFwoXC9cKS4qL3sKLQkgICAgcy8vXDEvCi0JICAgIHEKLQkgIH0KLQkgIHMvLiovLi87IHEnYAotICAgICAgdGVzdCAtZCAiJGFzX2RpciIgJiYgYnJlYWsKLSAgICBkb25lCi0gICAgdGVzdCAteiAiJGFzX2RpcnMiIHx8IGV2YWwgIm1rZGlyICRhc19kaXJzIgotICB9IHx8IHRlc3QgLWQgIiRhc19kaXIiIHx8IGFzX2ZuX2Vycm9yICQ/ICJjYW5ub3QgY3JlYXRlIGRpcmVjdG9yeSAkYXNfZGlyIgotCi0KLX0gIyBhc19mbl9ta2Rpcl9wCi1pZiBta2RpciAtcCAuIDI+L2Rldi9udWxsOyB0aGVuCi0gIGFzX21rZGlyX3A9J21rZGlyIC1wICIkYXNfZGlyIicKLWVsc2UKLSAgdGVzdCAtZCAuLy1wICYmIHJtZGlyIC4vLXAKLSAgYXNfbWtkaXJfcD1mYWxzZQotZmkKLQotaWYgdGVzdCAteCAvID4vZGV2L251bGwgMj4mMTsgdGhlbgotICBhc190ZXN0X3g9J3Rlc3QgLXgnCi1lbHNlCi0gIGlmIGxzIC1kTCAvID4vZGV2L251bGwgMj4mMTsgdGhlbgotICAgIGFzX2xzX0xfb3B0aW9uPUwKLSAgZWxzZQotICAgIGFzX2xzX0xfb3B0aW9uPQotICBmaQotICBhc190ZXN0X3g9JwotICAgIGV2YWwgc2ggLWMgJ1wnJwotICAgICAgaWYgdGVzdCAtZCAiJDEiOyB0aGVuCi0JdGVzdCAtZCAiJDEvLiI7Ci0gICAgICBlbHNlCi0JY2FzZSAkMSBpbiAjKAotCS0qKXNldCAiLi8kMSI7OwotCWVzYWM7Ci0JY2FzZSBgbHMgLWxkJyRhc19sc19MX29wdGlvbicgIiQxIiAyPi9kZXYvbnVsbGAgaW4gIygoCi0JPz8/W3N4XSopOjs7KilmYWxzZTs7ZXNhYztmaQotICAgICdcJycgc2gKLSAgJwotZmkKLWFzX2V4ZWN1dGFibGVfcD0kYXNfdGVzdF94Ci0KLSMgU2VkIGV4cHJlc3Npb24gdG8gbWFwIGEgc3RyaW5nIG9udG8gYSB2YWxpZCBDUFAgbmFtZS4KLWFzX3RyX2NwcD0iZXZhbCBzZWQgJ3klKiRhc19jcl9sZXR0ZXJzJVAkYXNfY3JfTEVUVEVSUyU7cyVbXl8kYXNfY3JfYWxudW1dJV8lZyciCi0KLSMgU2VkIGV4cHJlc3Npb24gdG8gbWFwIGEgc3RyaW5nIG9udG8gYSB2YWxpZCB2YXJpYWJsZSBuYW1lLgotYXNfdHJfc2g9ImV2YWwgc2VkICd5JSorJXBwJTtzJVteXyRhc19jcl9hbG51bV0lXyVnJyIKLQotCi1leGVjIDY+JjEKLSMjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICMjCi0jIyBNYWluIGJvZHkgb2YgJENPTkZJR19TVEFUVVMgc2NyaXB0LiAjIwotIyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIyMKLV9BU0VPRgotdGVzdCAkYXNfd3JpdGVfZmFpbCA9IDAgJiYgY2htb2QgK3ggJENPTkZJR19TVEFUVVMgfHwgYWNfd3JpdGVfZmFpbD0xCi0KLWNhdCA+PiRDT05GSUdfU1RBVFVTIDw8XF9BQ0VPRiB8fCBhY193cml0ZV9mYWlsPTEKLSMgU2F2ZSB0aGUgbG9nIG1lc3NhZ2UsIHRvIGtlZXAgJDAgYW5kIHNvIG9uIG1lYW5pbmdmdWwsIGFuZCB0bwotIyByZXBvcnQgYWN0dWFsIGlucHV0IHZhbHVlcyBvZiBDT05GSUdfRklMRVMgZXRjLiBpbnN0ZWFkIG9mIHRoZWlyCi0jIHZhbHVlcyBhZnRlciBvcHRpb25zIGhhbmRsaW5nLgotYWNfbG9nPSIKLVRoaXMgZmlsZSB3YXMgZXh0ZW5kZWQgYnkgbGlianBlZyAkYXNfbWUgOC4zLjAsIHdoaWNoIHdhcwotZ2VuZXJhdGVkIGJ5IEdOVSBBdXRvY29uZiAyLjY4LiAgSW52b2NhdGlvbiBjb21tYW5kIGxpbmUgd2FzCi0KLSAgQ09ORklHX0ZJTEVTICAgID0gJENPTkZJR19GSUxFUwotICBDT05GSUdfSEVBREVSUyAgPSAkQ09ORklHX0hFQURFUlMKLSAgQ09ORklHX0xJTktTICAgID0gJENPTkZJR19MSU5LUwotICBDT05GSUdfQ09NTUFORFMgPSAkQ09ORklHX0NPTU1BTkRTCi0gICQgJDAgJEAKLQotb24gYChob3N0bmFtZSB8fCB1bmFtZSAtbikgMj4vZGV2L251bGwgfCBzZWQgMXFgCi0iCi0KLV9BQ0VPRgotCi1jYXNlICRhY19jb25maWdfZmlsZXMgaW4gKiIKLSIqKSBzZXQgeCAkYWNfY29uZmlnX2ZpbGVzOyBzaGlmdDsgYWNfY29uZmlnX2ZpbGVzPSQqOzsKLWVzYWMKLQotY2FzZSAkYWNfY29uZmlnX2hlYWRlcnMgaW4gKiIKLSIqKSBzZXQgeCAkYWNfY29uZmlnX2hlYWRlcnM7IHNoaWZ0OyBhY19jb25maWdfaGVhZGVycz0kKjs7Ci1lc2FjCi0KLQotY2F0ID4+JENPTkZJR19TVEFUVVMgPDxfQUNFT0YgfHwgYWNfd3JpdGVfZmFpbD0xCi0jIEZpbGVzIHRoYXQgY29uZmlnLnN0YXR1cyB3YXMgbWFkZSBmb3IuCi1jb25maWdfZmlsZXM9IiRhY19jb25maWdfZmlsZXMiCi1jb25maWdfaGVhZGVycz0iJGFjX2NvbmZpZ19oZWFkZXJzIgotY29uZmlnX2NvbW1hbmRzPSIkYWNfY29uZmlnX2NvbW1hbmRzIgotCi1fQUNFT0YKLQotY2F0ID4+JENPTkZJR19TVEFUVVMgPDxcX0FDRU9GIHx8IGFjX3dyaXRlX2ZhaWw9MQotYWNfY3NfdXNhZ2U9IlwKLVxgJGFzX21lJyBpbnN0YW50aWF0ZXMgZmlsZXMgYW5kIG90aGVyIGNvbmZpZ3VyYXRpb24gYWN0aW9ucwotZnJvbSB0ZW1wbGF0ZXMgYWNjb3JkaW5nIHRvIHRoZSBjdXJyZW50IGNvbmZpZ3VyYXRpb24uICBVbmxlc3MgdGhlIGZpbGVzCi1hbmQgYWN0aW9ucyBhcmUgc3BlY2lmaWVkIGFzIFRBR3MsIGFsbCBhcmUgaW5zdGFudGlhdGVkIGJ5IGRlZmF1bHQuCi0KLVVzYWdlOiAkMCBbT1BUSU9OXS4uLiBbVEFHXS4uLgotCi0gIC1oLCAtLWhlbHAgICAgICAgcHJpbnQgdGhpcyBoZWxwLCB0aGVuIGV4aXQKLSAgLVYsIC0tdmVyc2lvbiAgICBwcmludCB2ZXJzaW9uIG51bWJlciBhbmQgY29uZmlndXJhdGlvbiBzZXR0aW5ncywgdGhlbiBleGl0Ci0gICAgICAtLWNvbmZpZyAgICAgcHJpbnQgY29uZmlndXJhdGlvbiwgdGhlbiBleGl0Ci0gIC1xLCAtLXF1aWV0LCAtLXNpbGVudAotICAgICAgICAgICAgICAgICAgIGRvIG5vdCBwcmludCBwcm9ncmVzcyBtZXNzYWdlcwotICAtZCwgLS1kZWJ1ZyAgICAgIGRvbid0IHJlbW92ZSB0ZW1wb3JhcnkgZmlsZXMKLSAgICAgIC0tcmVjaGVjayAgICB1cGRhdGUgJGFzX21lIGJ5IHJlY29uZmlndXJpbmcgaW4gdGhlIHNhbWUgY29uZGl0aW9ucwotICAgICAgLS1maWxlPUZJTEVbOlRFTVBMQVRFXQotICAgICAgICAgICAgICAgICAgIGluc3RhbnRpYXRlIHRoZSBjb25maWd1cmF0aW9uIGZpbGUgRklMRQotICAgICAgLS1oZWFkZXI9RklMRVs6VEVNUExBVEVdCi0gICAgICAgICAgICAgICAgICAgaW5zdGFudGlhdGUgdGhlIGNvbmZpZ3VyYXRpb24gaGVhZGVyIEZJTEUKLQotQ29uZmlndXJhdGlvbiBmaWxlczoKLSRjb25maWdfZmlsZXMKLQotQ29uZmlndXJhdGlvbiBoZWFkZXJzOgotJGNvbmZpZ19oZWFkZXJzCi0KLUNvbmZpZ3VyYXRpb24gY29tbWFuZHM6Ci0kY29uZmlnX2NvbW1hbmRzCi0KLVJlcG9ydCBidWdzIHRvIHRoZSBwYWNrYWdlIHByb3ZpZGVyLiIKLQotX0FDRU9GCi1jYXQgPj4kQ09ORklHX1NUQVRVUyA8PF9BQ0VPRiB8fCBhY193cml0ZV9mYWlsPTEKLWFjX2NzX2NvbmZpZz0iYCRhc19lY2hvICIkYWNfY29uZmlndXJlX2FyZ3MiIHwgc2VkICdzL14gLy87IHMvW1xcIiJcYFwkXS9cXFxcJi9nJ2AiCi1hY19jc192ZXJzaW9uPSJcXAotbGlianBlZyBjb25maWcuc3RhdHVzIDguMy4wCi1jb25maWd1cmVkIGJ5ICQwLCBnZW5lcmF0ZWQgYnkgR05VIEF1dG9jb25mIDIuNjgsCi0gIHdpdGggb3B0aW9ucyBcXCJcJGFjX2NzX2NvbmZpZ1xcIgotCi1Db3B5cmlnaHQgKEMpIDIwMTAgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCi1UaGlzIGNvbmZpZy5zdGF0dXMgc2NyaXB0IGlzIGZyZWUgc29mdHdhcmU7IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24KLWdpdmVzIHVubGltaXRlZCBwZXJtaXNzaW9uIHRvIGNvcHksIGRpc3RyaWJ1dGUgYW5kIG1vZGlmeSBpdC4iCi0KLWFjX3B3ZD0nJGFjX3B3ZCcKLXNyY2Rpcj0nJHNyY2RpcicKLUlOU1RBTEw9JyRJTlNUQUxMJwotTUtESVJfUD0nJE1LRElSX1AnCi1BV0s9JyRBV0snCi10ZXN0IC1uICJcJEFXSyIgfHwgQVdLPWF3awotX0FDRU9GCi0KLWNhdCA+PiRDT05GSUdfU1RBVFVTIDw8XF9BQ0VPRiB8fCBhY193cml0ZV9mYWlsPTEKLSMgVGhlIGRlZmF1bHQgbGlzdHMgYXBwbHkgaWYgdGhlIHVzZXIgZG9lcyBub3Qgc3BlY2lmeSBhbnkgZmlsZS4KLWFjX25lZWRfZGVmYXVsdHM9Ogotd2hpbGUgdGVzdCAkIyAhPSAwCi1kbwotICBjYXNlICQxIGluCi0gIC0tKj0/KikKLSAgICBhY19vcHRpb249YGV4cHIgIlgkMSIgOiAnWFwoW149XSpcKT0nYAotICAgIGFjX29wdGFyZz1gZXhwciAiWCQxIiA6ICdYW149XSo9XCguKlwpJ2AKLSAgICBhY19zaGlmdD06Ci0gICAgOzsKLSAgLS0qPSkKLSAgICBhY19vcHRpb249YGV4cHIgIlgkMSIgOiAnWFwoW149XSpcKT0nYAotICAgIGFjX29wdGFyZz0KLSAgICBhY19zaGlmdD06Ci0gICAgOzsKLSAgKikKLSAgICBhY19vcHRpb249JDEKLSAgICBhY19vcHRhcmc9JDIKLSAgICBhY19zaGlmdD1zaGlmdAotICAgIDs7Ci0gIGVzYWMKLQotICBjYXNlICRhY19vcHRpb24gaW4KLSAgIyBIYW5kbGluZyBvZiB0aGUgb3B0aW9ucy4KLSAgLXJlY2hlY2sgfCAtLXJlY2hlY2sgfCAtLXJlY2hlYyB8IC0tcmVjaGUgfCAtLXJlY2ggfCAtLXJlYyB8IC0tcmUgfCAtLXIpCi0gICAgYWNfY3NfcmVjaGVjaz06IDs7Ci0gIC0tdmVyc2lvbiB8IC0tdmVyc2lvIHwgLS12ZXJzaSB8IC0tdmVycyB8IC0tdmVyIHwgLS12ZSB8IC0tdiB8IC1WICkKLSAgICAkYXNfZWNobyAiJGFjX2NzX3ZlcnNpb24iOyBleGl0IDs7Ci0gIC0tY29uZmlnIHwgLS1jb25maSB8IC0tY29uZiB8IC0tY29uIHwgLS1jbyB8IC0tYyApCi0gICAgJGFzX2VjaG8gIiRhY19jc19jb25maWciOyBleGl0IDs7Ci0gIC0tZGVidWcgfCAtLWRlYnUgfCAtLWRlYiB8IC0tZGUgfCAtLWQgfCAtZCApCi0gICAgZGVidWc9OiA7OwotICAtLWZpbGUgfCAtLWZpbCB8IC0tZmkgfCAtLWYgKQotICAgICRhY19zaGlmdAotICAgIGNhc2UgJGFjX29wdGFyZyBpbgotICAgICpcJyopIGFjX29wdGFyZz1gJGFzX2VjaG8gIiRhY19vcHRhcmciIHwgc2VkICJzLycvJ1xcXFxcXFxcJycvZyJgIDs7Ci0gICAgJycpIGFzX2ZuX2Vycm9yICQ/ICJtaXNzaW5nIGZpbGUgYXJndW1lbnQiIDs7Ci0gICAgZXNhYwotICAgIGFzX2ZuX2FwcGVuZCBDT05GSUdfRklMRVMgIiAnJGFjX29wdGFyZyciCi0gICAgYWNfbmVlZF9kZWZhdWx0cz1mYWxzZTs7Ci0gIC0taGVhZGVyIHwgLS1oZWFkZSB8IC0taGVhZCB8IC0taGVhICkKLSAgICAkYWNfc2hpZnQKLSAgICBjYXNlICRhY19vcHRhcmcgaW4KLSAgICAqXCcqKSBhY19vcHRhcmc9YCRhc19lY2hvICIkYWNfb3B0YXJnIiB8IHNlZCAicy8nLydcXFxcXFxcXCcnL2ciYCA7OwotICAgIGVzYWMKLSAgICBhc19mbl9hcHBlbmQgQ09ORklHX0hFQURFUlMgIiAnJGFjX29wdGFyZyciCi0gICAgYWNfbmVlZF9kZWZhdWx0cz1mYWxzZTs7Ci0gIC0taGUgfCAtLWgpCi0gICAgIyBDb25mbGljdCBiZXR3ZWVuIC0taGVscCBhbmQgLS1oZWFkZXIKLSAgICBhc19mbl9lcnJvciAkPyAiYW1iaWd1b3VzIG9wdGlvbjogXGAkMScKLVRyeSBcYCQwIC0taGVscCcgZm9yIG1vcmUgaW5mb3JtYXRpb24uIjs7Ci0gIC0taGVscCB8IC0taGVsIHwgLWggKQotICAgICRhc19lY2hvICIkYWNfY3NfdXNhZ2UiOyBleGl0IDs7Ci0gIC1xIHwgLXF1aWV0IHwgLS1xdWlldCB8IC0tcXVpZSB8IC0tcXVpIHwgLS1xdSB8IC0tcSBcCi0gIHwgLXNpbGVudCB8IC0tc2lsZW50IHwgLS1zaWxlbiB8IC0tc2lsZSB8IC0tc2lsIHwgLS1zaSB8IC0tcykKLSAgICBhY19jc19zaWxlbnQ9OiA7OwotCi0gICMgVGhpcyBpcyBhbiBlcnJvci4KLSAgLSopIGFzX2ZuX2Vycm9yICQ/ICJ1bnJlY29nbml6ZWQgb3B0aW9uOiBcYCQxJwotVHJ5IFxgJDAgLS1oZWxwJyBmb3IgbW9yZSBpbmZvcm1hdGlvbi4iIDs7Ci0KLSAgKikgYXNfZm5fYXBwZW5kIGFjX2NvbmZpZ190YXJnZXRzICIgJDEiCi0gICAgIGFjX25lZWRfZGVmYXVsdHM9ZmFsc2UgOzsKLQotICBlc2FjCi0gIHNoaWZ0Ci1kb25lCi0KLWFjX2NvbmZpZ3VyZV9leHRyYV9hcmdzPQotCi1pZiAkYWNfY3Nfc2lsZW50OyB0aGVuCi0gIGV4ZWMgNj4vZGV2L251bGwKLSAgYWNfY29uZmlndXJlX2V4dHJhX2FyZ3M9IiRhY19jb25maWd1cmVfZXh0cmFfYXJncyAtLXNpbGVudCIKLWZpCi0KLV9BQ0VPRgotY2F0ID4+JENPTkZJR19TVEFUVVMgPDxfQUNFT0YgfHwgYWNfd3JpdGVfZmFpbD0xCi1pZiBcJGFjX2NzX3JlY2hlY2s7IHRoZW4KLSAgc2V0IFggJyRTSEVMTCcgJyQwJyAkYWNfY29uZmlndXJlX2FyZ3MgXCRhY19jb25maWd1cmVfZXh0cmFfYXJncyAtLW5vLWNyZWF0ZSAtLW5vLXJlY3Vyc2lvbgotICBzaGlmdAotICBcJGFzX2VjaG8gInJ1bm5pbmcgQ09ORklHX1NIRUxMPSRTSEVMTCBcJCoiID4mNgotICBDT05GSUdfU0hFTEw9JyRTSEVMTCcKLSAgZXhwb3J0IENPTkZJR19TSEVMTAotICBleGVjICJcJEAiCi1maQotCi1fQUNFT0YKLWNhdCA+PiRDT05GSUdfU1RBVFVTIDw8XF9BQ0VPRiB8fCBhY193cml0ZV9mYWlsPTEKLWV4ZWMgNT4+Y29uZmlnLmxvZwotewotICBlY2hvCi0gIHNlZCAnaDtzLy4vLS9nO3MvXi4uLi8jIyAvO3MvLi4uJC8gIyMvO3A7eDtwO3gnIDw8X0FTQk9YCi0jIyBSdW5uaW5nICRhc19tZS4gIyMKLV9BU0JPWAotICAkYXNfZWNobyAiJGFjX2xvZyIKLX0gPiY1Ci0KLV9BQ0VPRgotY2F0ID4+JENPTkZJR19TVEFUVVMgPDxfQUNFT0YgfHwgYWNfd3JpdGVfZmFpbD0xCi0jCi0jIElOSVQtQ09NTUFORFMKLSMKLUFNREVQX1RSVUU9IiRBTURFUF9UUlVFIiBhY19hdXhfZGlyPSIkYWNfYXV4X2RpciIKLQotCi0jIFRoZSBIUC1VWCBrc2ggYW5kIFBPU0lYIHNoZWxsIHByaW50IHRoZSB0YXJnZXQgZGlyZWN0b3J5IHRvIHN0ZG91dAotIyBpZiBDRFBBVEggaXMgc2V0LgotKHVuc2V0IENEUEFUSCkgPi9kZXYvbnVsbCAyPiYxICYmIHVuc2V0IENEUEFUSAotCi1zZWRfcXVvdGVfc3Vic3Q9JyRzZWRfcXVvdGVfc3Vic3QnCi1kb3VibGVfcXVvdGVfc3Vic3Q9JyRkb3VibGVfcXVvdGVfc3Vic3QnCi1kZWxheV92YXJpYWJsZV9zdWJzdD0nJGRlbGF5X3ZhcmlhYmxlX3N1YnN0JwotQVM9J2AkRUNITyAiJEFTIiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKLURMTFRPT0w9J2AkRUNITyAiJERMTFRPT0wiIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJwotT0JKRFVNUD0nYCRFQ0hPICIkT0JKRFVNUCIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCi1tYWNyb192ZXJzaW9uPSdgJEVDSE8gIiRtYWNyb192ZXJzaW9uIiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKLW1hY3JvX3JldmlzaW9uPSdgJEVDSE8gIiRtYWNyb19yZXZpc2lvbiIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCi1lbmFibGVfc2hhcmVkPSdgJEVDSE8gIiRlbmFibGVfc2hhcmVkIiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKLWVuYWJsZV9zdGF0aWM9J2AkRUNITyAiJGVuYWJsZV9zdGF0aWMiIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJwotcGljX21vZGU9J2AkRUNITyAiJHBpY19tb2RlIiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKLWVuYWJsZV9mYXN0X2luc3RhbGw9J2AkRUNITyAiJGVuYWJsZV9mYXN0X2luc3RhbGwiIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJwotU0hFTEw9J2AkRUNITyAiJFNIRUxMIiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKLUVDSE89J2AkRUNITyAiJEVDSE8iIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJwotaG9zdF9hbGlhcz0nYCRFQ0hPICIkaG9zdF9hbGlhcyIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCi1ob3N0PSdgJEVDSE8gIiRob3N0IiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKLWhvc3Rfb3M9J2AkRUNITyAiJGhvc3Rfb3MiIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJwotYnVpbGRfYWxpYXM9J2AkRUNITyAiJGJ1aWxkX2FsaWFzIiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKLWJ1aWxkPSdgJEVDSE8gIiRidWlsZCIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCi1idWlsZF9vcz0nYCRFQ0hPICIkYnVpbGRfb3MiIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJwotU0VEPSdgJEVDSE8gIiRTRUQiIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJwotWHNlZD0nYCRFQ0hPICIkWHNlZCIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCi1HUkVQPSdgJEVDSE8gIiRHUkVQIiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKLUVHUkVQPSdgJEVDSE8gIiRFR1JFUCIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCi1GR1JFUD0nYCRFQ0hPICIkRkdSRVAiIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJwotTEQ9J2AkRUNITyAiJExEIiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKLU5NPSdgJEVDSE8gIiROTSIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCi1MTl9TPSdgJEVDSE8gIiRMTl9TIiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKLW1heF9jbWRfbGVuPSdgJEVDSE8gIiRtYXhfY21kX2xlbiIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCi1hY19vYmpleHQ9J2AkRUNITyAiJGFjX29iamV4dCIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCi1leGVleHQ9J2AkRUNITyAiJGV4ZWV4dCIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCi1sdF91bnNldD0nYCRFQ0hPICIkbHRfdW5zZXQiIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJwotbHRfU1AyTkw9J2AkRUNITyAiJGx0X1NQMk5MIiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKLWx0X05MMlNQPSdgJEVDSE8gIiRsdF9OTDJTUCIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCi1sdF9jdl90b19ob3N0X2ZpbGVfY21kPSdgJEVDSE8gIiRsdF9jdl90b19ob3N0X2ZpbGVfY21kIiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKLWx0X2N2X3RvX3Rvb2xfZmlsZV9jbWQ9J2AkRUNITyAiJGx0X2N2X3RvX3Rvb2xfZmlsZV9jbWQiIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJwotcmVsb2FkX2ZsYWc9J2AkRUNITyAiJHJlbG9hZF9mbGFnIiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKLXJlbG9hZF9jbWRzPSdgJEVDSE8gIiRyZWxvYWRfY21kcyIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCi1kZXBsaWJzX2NoZWNrX21ldGhvZD0nYCRFQ0hPICIkZGVwbGlic19jaGVja19tZXRob2QiIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJwotZmlsZV9tYWdpY19jbWQ9J2AkRUNITyAiJGZpbGVfbWFnaWNfY21kIiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKLWZpbGVfbWFnaWNfZ2xvYj0nYCRFQ0hPICIkZmlsZV9tYWdpY19nbG9iIiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKLXdhbnRfbm9jYXNlZ2xvYj0nYCRFQ0hPICIkd2FudF9ub2Nhc2VnbG9iIiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKLXNoYXJlZGxpYl9mcm9tX2xpbmtsaWJfY21kPSdgJEVDSE8gIiRzaGFyZWRsaWJfZnJvbV9saW5rbGliX2NtZCIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCi1BUj0nYCRFQ0hPICIkQVIiIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJwotQVJfRkxBR1M9J2AkRUNITyAiJEFSX0ZMQUdTIiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKLWFyY2hpdmVyX2xpc3Rfc3BlYz0nYCRFQ0hPICIkYXJjaGl2ZXJfbGlzdF9zcGVjIiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKLVNUUklQPSdgJEVDSE8gIiRTVFJJUCIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCi1SQU5MSUI9J2AkRUNITyAiJFJBTkxJQiIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCi1vbGRfcG9zdGluc3RhbGxfY21kcz0nYCRFQ0hPICIkb2xkX3Bvc3RpbnN0YWxsX2NtZHMiIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJwotb2xkX3Bvc3R1bmluc3RhbGxfY21kcz0nYCRFQ0hPICIkb2xkX3Bvc3R1bmluc3RhbGxfY21kcyIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCi1vbGRfYXJjaGl2ZV9jbWRzPSdgJEVDSE8gIiRvbGRfYXJjaGl2ZV9jbWRzIiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKLWxvY2tfb2xkX2FyY2hpdmVfZXh0cmFjdGlvbj0nYCRFQ0hPICIkbG9ja19vbGRfYXJjaGl2ZV9leHRyYWN0aW9uIiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKLUNDPSdgJEVDSE8gIiRDQyIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCi1DRkxBR1M9J2AkRUNITyAiJENGTEFHUyIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCi1jb21waWxlcj0nYCRFQ0hPICIkY29tcGlsZXIiIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJwotR0NDPSdgJEVDSE8gIiRHQ0MiIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJwotbHRfY3Zfc3lzX2dsb2JhbF9zeW1ib2xfcGlwZT0nYCRFQ0hPICIkbHRfY3Zfc3lzX2dsb2JhbF9zeW1ib2xfcGlwZSIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCi1sdF9jdl9zeXNfZ2xvYmFsX3N5bWJvbF90b19jZGVjbD0nYCRFQ0hPICIkbHRfY3Zfc3lzX2dsb2JhbF9zeW1ib2xfdG9fY2RlY2wiIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJwotbHRfY3Zfc3lzX2dsb2JhbF9zeW1ib2xfdG9fY19uYW1lX2FkZHJlc3M9J2AkRUNITyAiJGx0X2N2X3N5c19nbG9iYWxfc3ltYm9sX3RvX2NfbmFtZV9hZGRyZXNzIiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKLWx0X2N2X3N5c19nbG9iYWxfc3ltYm9sX3RvX2NfbmFtZV9hZGRyZXNzX2xpYl9wcmVmaXg9J2AkRUNITyAiJGx0X2N2X3N5c19nbG9iYWxfc3ltYm9sX3RvX2NfbmFtZV9hZGRyZXNzX2xpYl9wcmVmaXgiIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJwotbm1fZmlsZV9saXN0X3NwZWM9J2AkRUNITyAiJG5tX2ZpbGVfbGlzdF9zcGVjIiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKLWx0X3N5c3Jvb3Q9J2AkRUNITyAiJGx0X3N5c3Jvb3QiIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJwotb2JqZGlyPSdgJEVDSE8gIiRvYmpkaXIiIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJwotTUFHSUNfQ01EPSdgJEVDSE8gIiRNQUdJQ19DTUQiIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJwotbHRfcHJvZ19jb21waWxlcl9ub19idWlsdGluX2ZsYWc9J2AkRUNITyAiJGx0X3Byb2dfY29tcGlsZXJfbm9fYnVpbHRpbl9mbGFnIiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKLWx0X3Byb2dfY29tcGlsZXJfcGljPSdgJEVDSE8gIiRsdF9wcm9nX2NvbXBpbGVyX3BpYyIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCi1sdF9wcm9nX2NvbXBpbGVyX3dsPSdgJEVDSE8gIiRsdF9wcm9nX2NvbXBpbGVyX3dsIiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKLWx0X3Byb2dfY29tcGlsZXJfc3RhdGljPSdgJEVDSE8gIiRsdF9wcm9nX2NvbXBpbGVyX3N0YXRpYyIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCi1sdF9jdl9wcm9nX2NvbXBpbGVyX2Nfbz0nYCRFQ0hPICIkbHRfY3ZfcHJvZ19jb21waWxlcl9jX28iIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJwotbmVlZF9sb2Nrcz0nYCRFQ0hPICIkbmVlZF9sb2NrcyIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCi1NQU5JRkVTVF9UT09MPSdgJEVDSE8gIiRNQU5JRkVTVF9UT09MIiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKLURTWU1VVElMPSdgJEVDSE8gIiREU1lNVVRJTCIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCi1OTUVESVQ9J2AkRUNITyAiJE5NRURJVCIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCi1MSVBPPSdgJEVDSE8gIiRMSVBPIiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKLU9UT09MPSdgJEVDSE8gIiRPVE9PTCIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCi1PVE9PTDY0PSdgJEVDSE8gIiRPVE9PTDY0IiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKLWxpYmV4dD0nYCRFQ0hPICIkbGliZXh0IiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKLXNocmV4dF9jbWRzPSdgJEVDSE8gIiRzaHJleHRfY21kcyIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCi1leHRyYWN0X2V4cHN5bXNfY21kcz0nYCRFQ0hPICIkZXh0cmFjdF9leHBzeW1zX2NtZHMiIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJwotYXJjaGl2ZV9jbWRzX25lZWRfbGM9J2AkRUNITyAiJGFyY2hpdmVfY21kc19uZWVkX2xjIiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKLWVuYWJsZV9zaGFyZWRfd2l0aF9zdGF0aWNfcnVudGltZXM9J2AkRUNITyAiJGVuYWJsZV9zaGFyZWRfd2l0aF9zdGF0aWNfcnVudGltZXMiIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJwotZXhwb3J0X2R5bmFtaWNfZmxhZ19zcGVjPSdgJEVDSE8gIiRleHBvcnRfZHluYW1pY19mbGFnX3NwZWMiIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJwotd2hvbGVfYXJjaGl2ZV9mbGFnX3NwZWM9J2AkRUNITyAiJHdob2xlX2FyY2hpdmVfZmxhZ19zcGVjIiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKLWNvbXBpbGVyX25lZWRzX29iamVjdD0nYCRFQ0hPICIkY29tcGlsZXJfbmVlZHNfb2JqZWN0IiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKLW9sZF9hcmNoaXZlX2Zyb21fbmV3X2NtZHM9J2AkRUNITyAiJG9sZF9hcmNoaXZlX2Zyb21fbmV3X2NtZHMiIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJwotb2xkX2FyY2hpdmVfZnJvbV9leHBzeW1zX2NtZHM9J2AkRUNITyAiJG9sZF9hcmNoaXZlX2Zyb21fZXhwc3ltc19jbWRzIiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKLWFyY2hpdmVfY21kcz0nYCRFQ0hPICIkYXJjaGl2ZV9jbWRzIiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKLWFyY2hpdmVfZXhwc3ltX2NtZHM9J2AkRUNITyAiJGFyY2hpdmVfZXhwc3ltX2NtZHMiIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJwotbW9kdWxlX2NtZHM9J2AkRUNITyAiJG1vZHVsZV9jbWRzIiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKLW1vZHVsZV9leHBzeW1fY21kcz0nYCRFQ0hPICIkbW9kdWxlX2V4cHN5bV9jbWRzIiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKLXdpdGhfZ251X2xkPSdgJEVDSE8gIiR3aXRoX2dudV9sZCIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCi1hbGxvd191bmRlZmluZWRfZmxhZz0nYCRFQ0hPICIkYWxsb3dfdW5kZWZpbmVkX2ZsYWciIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJwotbm9fdW5kZWZpbmVkX2ZsYWc9J2AkRUNITyAiJG5vX3VuZGVmaW5lZF9mbGFnIiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKLWhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWM9J2AkRUNITyAiJGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWMiIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJwotaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlY19sZD0nYCRFQ0hPICIkaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlY19sZCIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCi1oYXJkY29kZV9saWJkaXJfc2VwYXJhdG9yPSdgJEVDSE8gIiRoYXJkY29kZV9saWJkaXJfc2VwYXJhdG9yIiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKLWhhcmRjb2RlX2RpcmVjdD0nYCRFQ0hPICIkaGFyZGNvZGVfZGlyZWN0IiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKLWhhcmRjb2RlX2RpcmVjdF9hYnNvbHV0ZT0nYCRFQ0hPICIkaGFyZGNvZGVfZGlyZWN0X2Fic29sdXRlIiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKLWhhcmRjb2RlX21pbnVzX0w9J2AkRUNITyAiJGhhcmRjb2RlX21pbnVzX0wiIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJwotaGFyZGNvZGVfc2hsaWJwYXRoX3Zhcj0nYCRFQ0hPICIkaGFyZGNvZGVfc2hsaWJwYXRoX3ZhciIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCi1oYXJkY29kZV9hdXRvbWF0aWM9J2AkRUNITyAiJGhhcmRjb2RlX2F1dG9tYXRpYyIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCi1pbmhlcml0X3JwYXRoPSdgJEVDSE8gIiRpbmhlcml0X3JwYXRoIiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKLWxpbmtfYWxsX2RlcGxpYnM9J2AkRUNITyAiJGxpbmtfYWxsX2RlcGxpYnMiIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJwotYWx3YXlzX2V4cG9ydF9zeW1ib2xzPSdgJEVDSE8gIiRhbHdheXNfZXhwb3J0X3N5bWJvbHMiIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJwotZXhwb3J0X3N5bWJvbHNfY21kcz0nYCRFQ0hPICIkZXhwb3J0X3N5bWJvbHNfY21kcyIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCi1leGNsdWRlX2V4cHN5bXM9J2AkRUNITyAiJGV4Y2x1ZGVfZXhwc3ltcyIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCi1pbmNsdWRlX2V4cHN5bXM9J2AkRUNITyAiJGluY2x1ZGVfZXhwc3ltcyIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCi1wcmVsaW5rX2NtZHM9J2AkRUNITyAiJHByZWxpbmtfY21kcyIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCi1wb3N0bGlua19jbWRzPSdgJEVDSE8gIiRwb3N0bGlua19jbWRzIiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKLWZpbGVfbGlzdF9zcGVjPSdgJEVDSE8gIiRmaWxlX2xpc3Rfc3BlYyIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCi12YXJpYWJsZXNfc2F2ZWRfZm9yX3JlbGluaz0nYCRFQ0hPICIkdmFyaWFibGVzX3NhdmVkX2Zvcl9yZWxpbmsiIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJwotbmVlZF9saWJfcHJlZml4PSdgJEVDSE8gIiRuZWVkX2xpYl9wcmVmaXgiIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJwotbmVlZF92ZXJzaW9uPSdgJEVDSE8gIiRuZWVkX3ZlcnNpb24iIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJwotdmVyc2lvbl90eXBlPSdgJEVDSE8gIiR2ZXJzaW9uX3R5cGUiIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJwotcnVucGF0aF92YXI9J2AkRUNITyAiJHJ1bnBhdGhfdmFyIiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKLXNobGlicGF0aF92YXI9J2AkRUNITyAiJHNobGlicGF0aF92YXIiIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJwotc2hsaWJwYXRoX292ZXJyaWRlc19ydW5wYXRoPSdgJEVDSE8gIiRzaGxpYnBhdGhfb3ZlcnJpZGVzX3J1bnBhdGgiIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJwotbGlibmFtZV9zcGVjPSdgJEVDSE8gIiRsaWJuYW1lX3NwZWMiIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJwotbGlicmFyeV9uYW1lc19zcGVjPSdgJEVDSE8gIiRsaWJyYXJ5X25hbWVzX3NwZWMiIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJwotc29uYW1lX3NwZWM9J2AkRUNITyAiJHNvbmFtZV9zcGVjIiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKLWluc3RhbGxfb3ZlcnJpZGVfbW9kZT0nYCRFQ0hPICIkaW5zdGFsbF9vdmVycmlkZV9tb2RlIiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKLXBvc3RpbnN0YWxsX2NtZHM9J2AkRUNITyAiJHBvc3RpbnN0YWxsX2NtZHMiIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJwotcG9zdHVuaW5zdGFsbF9jbWRzPSdgJEVDSE8gIiRwb3N0dW5pbnN0YWxsX2NtZHMiIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJwotZmluaXNoX2NtZHM9J2AkRUNITyAiJGZpbmlzaF9jbWRzIiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKLWZpbmlzaF9ldmFsPSdgJEVDSE8gIiRmaW5pc2hfZXZhbCIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCi1oYXJkY29kZV9pbnRvX2xpYnM9J2AkRUNITyAiJGhhcmRjb2RlX2ludG9fbGlicyIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCi1zeXNfbGliX3NlYXJjaF9wYXRoX3NwZWM9J2AkRUNITyAiJHN5c19saWJfc2VhcmNoX3BhdGhfc3BlYyIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCi1zeXNfbGliX2Rsc2VhcmNoX3BhdGhfc3BlYz0nYCRFQ0hPICIkc3lzX2xpYl9kbHNlYXJjaF9wYXRoX3NwZWMiIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJwotaGFyZGNvZGVfYWN0aW9uPSdgJEVDSE8gIiRoYXJkY29kZV9hY3Rpb24iIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJwotZW5hYmxlX2Rsb3Blbj0nYCRFQ0hPICIkZW5hYmxlX2Rsb3BlbiIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCi1lbmFibGVfZGxvcGVuX3NlbGY9J2AkRUNITyAiJGVuYWJsZV9kbG9wZW5fc2VsZiIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCi1lbmFibGVfZGxvcGVuX3NlbGZfc3RhdGljPSdgJEVDSE8gIiRlbmFibGVfZGxvcGVuX3NlbGZfc3RhdGljIiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKLW9sZF9zdHJpcGxpYj0nYCRFQ0hPICIkb2xkX3N0cmlwbGliIiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKLXN0cmlwbGliPSdgJEVDSE8gIiRzdHJpcGxpYiIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCi0KLUxUQ0M9JyRMVENDJwotTFRDRkxBR1M9JyRMVENGTEFHUycKLWNvbXBpbGVyPSckY29tcGlsZXJfREVGQVVMVCcKLQotIyBBIGZ1bmN0aW9uIHRoYXQgaXMgdXNlZCB3aGVuIHRoZXJlIGlzIG5vIHByaW50IGJ1aWx0aW4gb3IgcHJpbnRmLgotZnVuY19mYWxsYmFja19lY2hvICgpCi17Ci0gIGV2YWwgJ2NhdCA8PF9MVEVDSE9fRU9GCi1cJDEKLV9MVEVDSE9fRU9GJwotfQotCi0jIFF1b3RlIGV2YWxlZCBzdHJpbmdzLgotZm9yIHZhciBpbiBBUyBcCi1ETExUT09MIFwKLU9CSkRVTVAgXAotU0hFTEwgXAotRUNITyBcCi1TRUQgXAotR1JFUCBcCi1FR1JFUCBcCi1GR1JFUCBcCi1MRCBcCi1OTSBcCi1MTl9TIFwKLWx0X1NQMk5MIFwKLWx0X05MMlNQIFwKLXJlbG9hZF9mbGFnIFwKLWRlcGxpYnNfY2hlY2tfbWV0aG9kIFwKLWZpbGVfbWFnaWNfY21kIFwKLWZpbGVfbWFnaWNfZ2xvYiBcCi13YW50X25vY2FzZWdsb2IgXAotc2hhcmVkbGliX2Zyb21fbGlua2xpYl9jbWQgXAotQVIgXAotQVJfRkxBR1MgXAotYXJjaGl2ZXJfbGlzdF9zcGVjIFwKLVNUUklQIFwKLVJBTkxJQiBcCi1DQyBcCi1DRkxBR1MgXAotY29tcGlsZXIgXAotbHRfY3Zfc3lzX2dsb2JhbF9zeW1ib2xfcGlwZSBcCi1sdF9jdl9zeXNfZ2xvYmFsX3N5bWJvbF90b19jZGVjbCBcCi1sdF9jdl9zeXNfZ2xvYmFsX3N5bWJvbF90b19jX25hbWVfYWRkcmVzcyBcCi1sdF9jdl9zeXNfZ2xvYmFsX3N5bWJvbF90b19jX25hbWVfYWRkcmVzc19saWJfcHJlZml4IFwKLW5tX2ZpbGVfbGlzdF9zcGVjIFwKLWx0X3Byb2dfY29tcGlsZXJfbm9fYnVpbHRpbl9mbGFnIFwKLWx0X3Byb2dfY29tcGlsZXJfcGljIFwKLWx0X3Byb2dfY29tcGlsZXJfd2wgXAotbHRfcHJvZ19jb21waWxlcl9zdGF0aWMgXAotbHRfY3ZfcHJvZ19jb21waWxlcl9jX28gXAotbmVlZF9sb2NrcyBcCi1NQU5JRkVTVF9UT09MIFwKLURTWU1VVElMIFwKLU5NRURJVCBcCi1MSVBPIFwKLU9UT09MIFwKLU9UT09MNjQgXAotc2hyZXh0X2NtZHMgXAotZXhwb3J0X2R5bmFtaWNfZmxhZ19zcGVjIFwKLXdob2xlX2FyY2hpdmVfZmxhZ19zcGVjIFwKLWNvbXBpbGVyX25lZWRzX29iamVjdCBcCi13aXRoX2dudV9sZCBcCi1hbGxvd191bmRlZmluZWRfZmxhZyBcCi1ub191bmRlZmluZWRfZmxhZyBcCi1oYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjIFwKLWhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWNfbGQgXAotaGFyZGNvZGVfbGliZGlyX3NlcGFyYXRvciBcCi1leGNsdWRlX2V4cHN5bXMgXAotaW5jbHVkZV9leHBzeW1zIFwKLWZpbGVfbGlzdF9zcGVjIFwKLXZhcmlhYmxlc19zYXZlZF9mb3JfcmVsaW5rIFwKLWxpYm5hbWVfc3BlYyBcCi1saWJyYXJ5X25hbWVzX3NwZWMgXAotc29uYW1lX3NwZWMgXAotaW5zdGFsbF9vdmVycmlkZV9tb2RlIFwKLWZpbmlzaF9ldmFsIFwKLW9sZF9zdHJpcGxpYiBcCi1zdHJpcGxpYjsgZG8KLSAgICBjYXNlIFxgZXZhbCBcXFxcXCRFQ0hPIFxcXFwiIlxcXFxcJFwkdmFyIlxcXFwiXGAgaW4KLSAgICAqW1xcXFxcXFxgXFwiXFxcJF0qKQotICAgICAgZXZhbCAibHRfXCR2YXI9XFxcXFxcIlxcXGBcXFwkRUNITyBcXCJcXFwkXCR2YXJcXCIgfCBcXFwkU0VEIFxcIlxcXCRzZWRfcXVvdGVfc3Vic3RcXCJcXFxgXFxcXFxcIiIKLSAgICAgIDs7Ci0gICAgKikKLSAgICAgIGV2YWwgImx0X1wkdmFyPVxcXFxcXCJcXFwkXCR2YXJcXFxcXFwiIgotICAgICAgOzsKLSAgICBlc2FjCi1kb25lCi0KLSMgRG91YmxlLXF1b3RlIGRvdWJsZS1ldmFsZWQgc3RyaW5ncy4KLWZvciB2YXIgaW4gcmVsb2FkX2NtZHMgXAotb2xkX3Bvc3RpbnN0YWxsX2NtZHMgXAotb2xkX3Bvc3R1bmluc3RhbGxfY21kcyBcCi1vbGRfYXJjaGl2ZV9jbWRzIFwKLWV4dHJhY3RfZXhwc3ltc19jbWRzIFwKLW9sZF9hcmNoaXZlX2Zyb21fbmV3X2NtZHMgXAotb2xkX2FyY2hpdmVfZnJvbV9leHBzeW1zX2NtZHMgXAotYXJjaGl2ZV9jbWRzIFwKLWFyY2hpdmVfZXhwc3ltX2NtZHMgXAotbW9kdWxlX2NtZHMgXAotbW9kdWxlX2V4cHN5bV9jbWRzIFwKLWV4cG9ydF9zeW1ib2xzX2NtZHMgXAotcHJlbGlua19jbWRzIFwKLXBvc3RsaW5rX2NtZHMgXAotcG9zdGluc3RhbGxfY21kcyBcCi1wb3N0dW5pbnN0YWxsX2NtZHMgXAotZmluaXNoX2NtZHMgXAotc3lzX2xpYl9zZWFyY2hfcGF0aF9zcGVjIFwKLXN5c19saWJfZGxzZWFyY2hfcGF0aF9zcGVjOyBkbwotICAgIGNhc2UgXGBldmFsIFxcXFxcJEVDSE8gXFxcXCIiXFxcXFwkXCR2YXIiXFxcXCJcYCBpbgotICAgICpbXFxcXFxcXGBcXCJcXFwkXSopCi0gICAgICBldmFsICJsdF9cJHZhcj1cXFxcXFwiXFxcYFxcXCRFQ0hPIFxcIlxcXCRcJHZhclxcIiB8IFxcXCRTRUQgLWUgXFwiXFxcJGRvdWJsZV9xdW90ZV9zdWJzdFxcIiAtZSBcXCJcXFwkc2VkX3F1b3RlX3N1YnN0XFwiIC1lIFxcIlxcXCRkZWxheV92YXJpYWJsZV9zdWJzdFxcIlxcXGBcXFxcXFwiIgotICAgICAgOzsKLSAgICAqKQotICAgICAgZXZhbCAibHRfXCR2YXI9XFxcXFxcIlxcXCRcJHZhclxcXFxcXCIiCi0gICAgICA7OwotICAgIGVzYWMKLWRvbmUKLQotYWNfYXV4X2Rpcj0nJGFjX2F1eF9kaXInCi14c2lfc2hlbGw9JyR4c2lfc2hlbGwnCi1sdF9zaGVsbF9hcHBlbmQ9JyRsdF9zaGVsbF9hcHBlbmQnCi0KLSMgU2VlIGlmIHdlIGFyZSBydW5uaW5nIG9uIHpzaCwgYW5kIHNldCB0aGUgb3B0aW9ucyB3aGljaCBhbGxvdyBvdXIKLSMgY29tbWFuZHMgdGhyb3VnaCB3aXRob3V0IHJlbW92YWwgb2YgXCBlc2NhcGVzIElOSVQuCi1pZiB0ZXN0IC1uICJcJHtaU0hfVkVSU0lPTitzZXR9IiA7IHRoZW4KLSAgIHNldG9wdCBOT19HTE9CX1NVQlNUCi1maQotCi0KLSAgICBQQUNLQUdFPSckUEFDS0FHRScKLSAgICBWRVJTSU9OPSckVkVSU0lPTicKLSAgICBUSU1FU1RBTVA9JyRUSU1FU1RBTVAnCi0gICAgUk09JyRSTScKLSAgICBvZmlsZT0nJG9maWxlJwotCi0KLQotCi1fQUNFT0YKLQotY2F0ID4+JENPTkZJR19TVEFUVVMgPDxcX0FDRU9GIHx8IGFjX3dyaXRlX2ZhaWw9MQotCi0jIEhhbmRsaW5nIG9mIGFyZ3VtZW50cy4KLWZvciBhY19jb25maWdfdGFyZ2V0IGluICRhY19jb25maWdfdGFyZ2V0cwotZG8KLSAgY2FzZSAkYWNfY29uZmlnX3RhcmdldCBpbgotICAgICJqY29uZmlnLmgiKSBDT05GSUdfSEVBREVSUz0iJENPTkZJR19IRUFERVJTIGpjb25maWcuaDpqY29uZmlnLmNmZyIgOzsKLSAgICAiZGVwZmlsZXMiKSBDT05GSUdfQ09NTUFORFM9IiRDT05GSUdfQ09NTUFORFMgZGVwZmlsZXMiIDs7Ci0gICAgImxpYnRvb2wiKSBDT05GSUdfQ09NTUFORFM9IiRDT05GSUdfQ09NTUFORFMgbGlidG9vbCIgOzsKLSAgICAiTWFrZWZpbGUiKSBDT05GSUdfRklMRVM9IiRDT05GSUdfRklMRVMgTWFrZWZpbGUiIDs7Ci0KLSAgKikgYXNfZm5fZXJyb3IgJD8gImludmFsaWQgYXJndW1lbnQ6IFxgJGFjX2NvbmZpZ190YXJnZXQnIiAiJExJTkVOTyIgNTs7Ci0gIGVzYWMKLWRvbmUKLQotCi0jIElmIHRoZSB1c2VyIGRpZCBub3QgdXNlIHRoZSBhcmd1bWVudHMgdG8gc3BlY2lmeSB0aGUgaXRlbXMgdG8gaW5zdGFudGlhdGUsCi0jIHRoZW4gdGhlIGVudnZhciBpbnRlcmZhY2UgaXMgdXNlZC4gIFNldCBvbmx5IHRob3NlIHRoYXQgYXJlIG5vdC4KLSMgV2UgdXNlIHRoZSBsb25nIGZvcm0gZm9yIHRoZSBkZWZhdWx0IGFzc2lnbm1lbnQgYmVjYXVzZSBvZiBhbiBleHRyZW1lbHkKLSMgYml6YXJyZSBidWcgb24gU3VuT1MgNC4xLjMuCi1pZiAkYWNfbmVlZF9kZWZhdWx0czsgdGhlbgotICB0ZXN0ICIke0NPTkZJR19GSUxFUytzZXR9IiA9IHNldCB8fCBDT05GSUdfRklMRVM9JGNvbmZpZ19maWxlcwotICB0ZXN0ICIke0NPTkZJR19IRUFERVJTK3NldH0iID0gc2V0IHx8IENPTkZJR19IRUFERVJTPSRjb25maWdfaGVhZGVycwotICB0ZXN0ICIke0NPTkZJR19DT01NQU5EUytzZXR9IiA9IHNldCB8fCBDT05GSUdfQ09NTUFORFM9JGNvbmZpZ19jb21tYW5kcwotZmkKLQotIyBIYXZlIGEgdGVtcG9yYXJ5IGRpcmVjdG9yeSBmb3IgY29udmVuaWVuY2UuICBNYWtlIGl0IGluIHRoZSBidWlsZCB0cmVlCi0jIHNpbXBseSBiZWNhdXNlIHRoZXJlIGlzIG5vIHJlYXNvbiBhZ2FpbnN0IGhhdmluZyBpdCBoZXJlLCBhbmQgaW4gYWRkaXRpb24sCi0jIGNyZWF0aW5nIGFuZCBtb3ZpbmcgZmlsZXMgZnJvbSAvdG1wIGNhbiBzb21ldGltZXMgY2F1c2UgcHJvYmxlbXMuCi0jIEhvb2sgZm9yIGl0cyByZW1vdmFsIHVubGVzcyBkZWJ1Z2dpbmcuCi0jIE5vdGUgdGhhdCB0aGVyZSBpcyBhIHNtYWxsIHdpbmRvdyBpbiB3aGljaCB0aGUgZGlyZWN0b3J5IHdpbGwgbm90IGJlIGNsZWFuZWQ6Ci0jIGFmdGVyIGl0cyBjcmVhdGlvbiBidXQgYmVmb3JlIGl0cyBuYW1lIGhhcyBiZWVuIGFzc2lnbmVkIHRvIGAkdG1wJy4KLSRkZWJ1ZyB8fAotewotICB0bXA9IGFjX3RtcD0KLSAgdHJhcCAnZXhpdF9zdGF0dXM9JD8KLSAgOiAiJHthY190bXA6PSR0bXB9IgotICB7IHRlc3QgISAtZCAiJGFjX3RtcCIgfHwgcm0gLWZyICIkYWNfdG1wIjsgfSAmJiBleGl0ICRleGl0X3N0YXR1cwotJyAwCi0gIHRyYXAgJ2FzX2ZuX2V4aXQgMScgMSAyIDEzIDE1Ci19Ci0jIENyZWF0ZSBhIChzZWN1cmUpIHRtcCBkaXJlY3RvcnkgZm9yIHRtcCBmaWxlcy4KLQotewotICB0bXA9YCh1bWFzayAwNzcgJiYgbWt0ZW1wIC1kICIuL2NvbmZYWFhYWFgiKSAyPi9kZXYvbnVsbGAgJiYKLSAgdGVzdCAtZCAiJHRtcCIKLX0gIHx8Ci17Ci0gIHRtcD0uL2NvbmYkJC0kUkFORE9NCi0gICh1bWFzayAwNzcgJiYgbWtkaXIgIiR0bXAiKQotfSB8fCBhc19mbl9lcnJvciAkPyAiY2Fubm90IGNyZWF0ZSBhIHRlbXBvcmFyeSBkaXJlY3RvcnkgaW4gLiIgIiRMSU5FTk8iIDUKLWFjX3RtcD0kdG1wCi0KLSMgU2V0IHVwIHRoZSBzY3JpcHRzIGZvciBDT05GSUdfRklMRVMgc2VjdGlvbi4KLSMgTm8gbmVlZCB0byBnZW5lcmF0ZSB0aGVtIGlmIHRoZXJlIGFyZSBubyBDT05GSUdfRklMRVMuCi0jIFRoaXMgaGFwcGVucyBmb3IgaW5zdGFuY2Ugd2l0aCBgLi9jb25maWcuc3RhdHVzIGNvbmZpZy5oJy4KLWlmIHRlc3QgLW4gIiRDT05GSUdfRklMRVMiOyB0aGVuCi0KLQotYWNfY3I9YGVjaG8gWCB8IHRyIFggJ1wwMTUnYAotIyBPbiBjeWd3aW4sIGJhc2ggY2FuIGVhdCBcciBpbnNpZGUgYGAgaWYgdGhlIHVzZXIgcmVxdWVzdGVkIGlnbmNyLgotIyBCdXQgd2Uga25vdyBvZiBubyBvdGhlciBzaGVsbCB3aGVyZSBhY19jciB3b3VsZCBiZSBlbXB0eSBhdCB0aGlzCi0jIHBvaW50LCBzbyB3ZSBjYW4gdXNlIGEgYmFzaGlzbSBhcyBhIGZhbGxiYWNrLgotaWYgdGVzdCAieCRhY19jciIgPSB4OyB0aGVuCi0gIGV2YWwgYWNfY3I9XCRcJ1xcclwnCi1maQotYWNfY3NfYXdrX2NyPWAkQVdLICdCRUdJTiB7IHByaW50ICJhXHJiIiB9JyA8L2Rldi9udWxsIDI+L2Rldi9udWxsYAotaWYgdGVzdCAiJGFjX2NzX2F3a19jciIgPSAiYSR7YWNfY3J9YiI7IHRoZW4KLSAgYWNfY3NfYXdrX2NyPSdcXHInCi1lbHNlCi0gIGFjX2NzX2F3a19jcj0kYWNfY3IKLWZpCi0KLWVjaG8gJ0JFR0lOIHsnID4iJGFjX3RtcC9zdWJzMS5hd2siICYmCi1fQUNFT0YKLQotCi17Ci0gIGVjaG8gImNhdCA+Y29uZiQkc3Vicy5hd2sgPDxfQUNFT0YiICYmCi0gIGVjaG8gIiRhY19zdWJzdF92YXJzIiB8IHNlZCAncy8uKi8mISQmJGFjX2RlbGltLycgJiYKLSAgZWNobyAiX0FDRU9GIgotfSA+Y29uZiQkc3Vicy5zaCB8fAotICBhc19mbl9lcnJvciAkPyAiY291bGQgbm90IG1ha2UgJENPTkZJR19TVEFUVVMiICIkTElORU5PIiA1Ci1hY19kZWxpbV9udW09YGVjaG8gIiRhY19zdWJzdF92YXJzIiB8IGdyZXAgLWMgJ14nYAotYWNfZGVsaW09JyUhXyEjICcKLWZvciBhY19sYXN0X3RyeSBpbiBmYWxzZSBmYWxzZSBmYWxzZSBmYWxzZSBmYWxzZSA6OyBkbwotICAuIC4vY29uZiQkc3Vicy5zaCB8fAotICAgIGFzX2ZuX2Vycm9yICQ/ICJjb3VsZCBub3QgbWFrZSAkQ09ORklHX1NUQVRVUyIgIiRMSU5FTk8iIDUKLQotICBhY19kZWxpbV9uPWBzZWQgLW4gInMvLiokYWNfZGVsaW1cJC9YL3AiIGNvbmYkJHN1YnMuYXdrIHwgZ3JlcCAtYyBYYAotICBpZiB0ZXN0ICRhY19kZWxpbV9uID0gJGFjX2RlbGltX251bTsgdGhlbgotICAgIGJyZWFrCi0gIGVsaWYgJGFjX2xhc3RfdHJ5OyB0aGVuCi0gICAgYXNfZm5fZXJyb3IgJD8gImNvdWxkIG5vdCBtYWtlICRDT05GSUdfU1RBVFVTIiAiJExJTkVOTyIgNQotICBlbHNlCi0gICAgYWNfZGVsaW09IiRhY19kZWxpbSEkYWNfZGVsaW0gXyRhY19kZWxpbSEhICIKLSAgZmkKLWRvbmUKLXJtIC1mIGNvbmYkJHN1YnMuc2gKLQotY2F0ID4+JENPTkZJR19TVEFUVVMgPDxfQUNFT0YgfHwgYWNfd3JpdGVfZmFpbD0xCi1jYXQgPj4iXCRhY190bXAvc3ViczEuYXdrIiA8PFxcX0FDQVdLICYmCi1fQUNFT0YKLXNlZCAtbiAnCi1oCi1zL14vU1siLzsgcy8hLiovIl09LwotcAotZwotcy9eW14hXSohLy8KLTpyZXBsCi10IHJlcGwKLXMvJyIkYWNfZGVsaW0iJyQvLwotdCBkZWxpbQotOm5sCi1oCi1zL1woLlx7MTQ4XH1cKS4uKi9cMS8KLXQgbW9yZTEKLXMvWyJcXF0vXFwmL2c7IHMvXi8iLzsgcy8kL1xcbiJcXC8KLXAKLW4KLWIgcmVwbAotOm1vcmUxCi1zL1siXFxdL1xcJi9nOyBzL14vIi87IHMvJC8iXFwvCi1wCi1nCi1zLy5cezE0OFx9Ly8KLXQgbmwKLTpkZWxpbQotaAotcy9cKC5cezE0OFx9XCkuLiovXDEvCi10IG1vcmUyCi1zL1siXFxdL1xcJi9nOyBzL14vIi87IHMvJC8iLwotcAotYgotOm1vcmUyCi1zL1siXFxdL1xcJi9nOyBzL14vIi87IHMvJC8iXFwvCi1wCi1nCi1zLy5cezE0OFx9Ly8KLXQgZGVsaW0KLScgPGNvbmYkJHN1YnMuYXdrIHwgc2VkICcKLS9eW14iIl0vewotICBOCi0gIHMvXG4vLwotfQotJyA+PiRDT05GSUdfU1RBVFVTIHx8IGFjX3dyaXRlX2ZhaWw9MQotcm0gLWYgY29uZiQkc3Vicy5hd2sKLWNhdCA+PiRDT05GSUdfU1RBVFVTIDw8X0FDRU9GIHx8IGFjX3dyaXRlX2ZhaWw9MQotX0FDQVdLCi1jYXQgPj4iXCRhY190bXAvc3ViczEuYXdrIiA8PF9BQ0FXSyAmJgotICBmb3IgKGtleSBpbiBTKSBTX2lzX3NldFtrZXldID0gMQotICBGUyA9ICIHIgotCi19Ci17Ci0gIGxpbmUgPSAkIDAKLSAgbmZpZWxkcyA9IHNwbGl0KGxpbmUsIGZpZWxkLCAiQCIpCi0gIHN1YnN0ZWQgPSAwCi0gIGxlbiA9IGxlbmd0aChmaWVsZFsxXSkKLSAgZm9yIChpID0gMjsgaSA8IG5maWVsZHM7IGkrKykgewotICAgIGtleSA9IGZpZWxkW2ldCi0gICAga2V5bGVuID0gbGVuZ3RoKGtleSkKLSAgICBpZiAoU19pc19zZXRba2V5XSkgewotICAgICAgdmFsdWUgPSBTW2tleV0KLSAgICAgIGxpbmUgPSBzdWJzdHIobGluZSwgMSwgbGVuKSAiIiB2YWx1ZSAiIiBzdWJzdHIobGluZSwgbGVuICsga2V5bGVuICsgMykKLSAgICAgIGxlbiArPSBsZW5ndGgodmFsdWUpICsgbGVuZ3RoKGZpZWxkWysraV0pCi0gICAgICBzdWJzdGVkID0gMQotICAgIH0gZWxzZQotICAgICAgbGVuICs9IDEgKyBrZXlsZW4KLSAgfQotCi0gIHByaW50IGxpbmUKLX0KLQotX0FDQVdLCi1fQUNFT0YKLWNhdCA+PiRDT05GSUdfU1RBVFVTIDw8XF9BQ0VPRiB8fCBhY193cml0ZV9mYWlsPTEKLWlmIHNlZCAicy8kYWNfY3IvLyIgPCAvZGV2L251bGwgPiAvZGV2L251bGwgMj4mMTsgdGhlbgotICBzZWQgInMvJGFjX2NyXCQvLzsgcy8kYWNfY3IvJGFjX2NzX2F3a19jci9nIgotZWxzZQotICBjYXQKLWZpIDwgIiRhY190bXAvc3ViczEuYXdrIiA+ICIkYWNfdG1wL3N1YnMuYXdrIiBcCi0gIHx8IGFzX2ZuX2Vycm9yICQ/ICJjb3VsZCBub3Qgc2V0dXAgY29uZmlnIGZpbGVzIG1hY2hpbmVyeSIgIiRMSU5FTk8iIDUKLV9BQ0VPRgotCi0jIFZQQVRIIG1heSBjYXVzZSB0cm91YmxlIHdpdGggc29tZSBtYWtlcywgc28gd2UgcmVtb3ZlIHNvbGUgJChzcmNkaXIpLAotIyAke3NyY2Rpcn0gYW5kIEBzcmNkaXJAIGVudHJpZXMgZnJvbSBWUEFUSCBpZiBzcmNkaXIgaXMgIi4iLCBzdHJpcCBsZWFkaW5nIGFuZAotIyB0cmFpbGluZyBjb2xvbnMgYW5kIHRoZW4gcmVtb3ZlIHRoZSB3aG9sZSBsaW5lIGlmIFZQQVRIIGJlY29tZXMgZW1wdHkKLSMgKGFjdHVhbGx5IHdlIGxlYXZlIGFuIGVtcHR5IGxpbmUgdG8gcHJlc2VydmUgbGluZSBudW1iZXJzKS4KLWlmIHRlc3QgIngkc3JjZGlyIiA9IHguOyB0aGVuCi0gIGFjX3Zwc3ViPScvXlsJIF0qVlBBVEhbCSBdKj1bCSBdKi97Ci1oCi1zLy8vCi1zL14vOi8KLXMvWwkgXSokLzovCi1zLzpcJChzcmNkaXIpOi86L2cKLXMvOlwke3NyY2Rpcn06LzovZwotcy86QHNyY2RpckA6LzovZwotcy9eOiovLwotcy86KiQvLwoteAotcy9cKD1bCSBdKlwpLiovXDEvCi1HCi1zL1xuLy8KLXMvXltePV0qPVsJIF0qJC8vCi19JwotZmkKLQotY2F0ID4+JENPTkZJR19TVEFUVVMgPDxcX0FDRU9GIHx8IGFjX3dyaXRlX2ZhaWw9MQotZmkgIyB0ZXN0IC1uICIkQ09ORklHX0ZJTEVTIgotCi0jIFNldCB1cCB0aGUgc2NyaXB0cyBmb3IgQ09ORklHX0hFQURFUlMgc2VjdGlvbi4KLSMgTm8gbmVlZCB0byBnZW5lcmF0ZSB0aGVtIGlmIHRoZXJlIGFyZSBubyBDT05GSUdfSEVBREVSUy4KLSMgVGhpcyBoYXBwZW5zIGZvciBpbnN0YW5jZSB3aXRoIGAuL2NvbmZpZy5zdGF0dXMgTWFrZWZpbGUnLgotaWYgdGVzdCAtbiAiJENPTkZJR19IRUFERVJTIjsgdGhlbgotY2F0ID4iJGFjX3RtcC9kZWZpbmVzLmF3ayIgPDxcX0FDQVdLIHx8Ci1CRUdJTiB7Ci1fQUNFT0YKLQotIyBUcmFuc2Zvcm0gY29uZmRlZnMuaCBpbnRvIGFuIGF3ayBzY3JpcHQgYGRlZmluZXMuYXdrJywgZW1iZWRkZWQgYXMKLSMgaGVyZS1kb2N1bWVudCBpbiBjb25maWcuc3RhdHVzLCB0aGF0IHN1YnN0aXR1dGVzIHRoZSBwcm9wZXIgdmFsdWVzIGludG8KLSMgY29uZmlnLmguaW4gdG8gcHJvZHVjZSBjb25maWcuaC4KLQotIyBDcmVhdGUgYSBkZWxpbWl0ZXIgc3RyaW5nIHRoYXQgZG9lcyBub3QgZXhpc3QgaW4gY29uZmRlZnMuaCwgdG8gZWFzZQotIyBoYW5kbGluZyBvZiBsb25nIGxpbmVzLgotYWNfZGVsaW09JyUhXyEjICcKLWZvciBhY19sYXN0X3RyeSBpbiBmYWxzZSBmYWxzZSA6OyBkbwotICBhY190dD1gc2VkIC1uICIvJGFjX2RlbGltL3AiIGNvbmZkZWZzLmhgCi0gIGlmIHRlc3QgLXogIiRhY190dCI7IHRoZW4KLSAgICBicmVhawotICBlbGlmICRhY19sYXN0X3RyeTsgdGhlbgotICAgIGFzX2ZuX2Vycm9yICQ/ICJjb3VsZCBub3QgbWFrZSAkQ09ORklHX0hFQURFUlMiICIkTElORU5PIiA1Ci0gIGVsc2UKLSAgICBhY19kZWxpbT0iJGFjX2RlbGltISRhY19kZWxpbSBfJGFjX2RlbGltISEgIgotICBmaQotZG9uZQotCi0jIEZvciB0aGUgYXdrIHNjcmlwdCwgRCBpcyBhbiBhcnJheSBvZiBtYWNybyB2YWx1ZXMga2V5ZWQgYnkgbmFtZSwKLSMgbGlrZXdpc2UgUCBjb250YWlucyBtYWNybyBwYXJhbWV0ZXJzIGlmIGFueS4gIFByZXNlcnZlIGJhY2tzbGFzaAotIyBuZXdsaW5lIHNlcXVlbmNlcy4KLQotYWNfd29yZF9yZT1bXyRhc19jcl9MZXR0ZXJzXVtfJGFzX2NyX2FsbnVtXSoKLXNlZCAtbiAnCi1zLy5cezE0OFx9LyYnIiRhY19kZWxpbSInL2cKLXQgcnNldAotOnJzZXQKLXMvXlsJIF0qI1sJIF0qZGVmaW5lWwkgXVsJIF0qLyAvCi10IGRlZgotZAotOmRlZgotcy9cXCQvLwotdCBic25sCi1zL1siXFxdL1xcJi9nCi1zL14gXCgnIiRhY193b3JkX3JlIidcKVwoKFteKCldKilcKVsJIF0qXCguKlwpL1BbIlwxIl09IlwyIlwKLURbIlwxIl09IiBcMyIvcAotcy9eIFwoJyIkYWNfd29yZF9yZSInXClbCSBdKlwoLipcKS9EWyJcMSJdPSIgXDIiL3AKLWQKLTpic25sCi1zL1siXFxdL1xcJi9nCi1zL14gXCgnIiRhY193b3JkX3JlIidcKVwoKFteKCldKilcKVsJIF0qXCguKlwpL1BbIlwxIl09IlwyIlwKLURbIlwxIl09IiBcM1xcXFxcXG4iXFwvcAotdCBjb250Ci1zL14gXCgnIiRhY193b3JkX3JlIidcKVsJIF0qXCguKlwpL0RbIlwxIl09IiBcMlxcXFxcXG4iXFwvcAotdCBjb250Ci1kCi06Y29udAotbgotcy8uXHsxNDhcfS8mJyIkYWNfZGVsaW0iJy9nCi10IGNsZWFyCi06Y2xlYXIKLXMvXFwkLy8KLXQgYnNubGMKLXMvWyJcXF0vXFwmL2c7IHMvXi8iLzsgcy8kLyIvcAotZAotOmJzbmxjCi1zL1siXFxdL1xcJi9nOyBzL14vIi87IHMvJC9cXFxcXFxuIlxcL3AKLWIgY29udAotJyA8Y29uZmRlZnMuaCB8IHNlZCAnCi1zLyciJGFjX2RlbGltIicvIlxcXAotIi9nJyA+PiRDT05GSUdfU1RBVFVTIHx8IGFjX3dyaXRlX2ZhaWw9MQotCi1jYXQgPj4kQ09ORklHX1NUQVRVUyA8PF9BQ0VPRiB8fCBhY193cml0ZV9mYWlsPTEKLSAgZm9yIChrZXkgaW4gRCkgRF9pc19zZXRba2V5XSA9IDEKLSAgRlMgPSAiByIKLX0KLS9eW1x0IF0qI1tcdCBdKihkZWZpbmV8dW5kZWYpW1x0IF0rJGFjX3dvcmRfcmUoW1x0IChdfFwkKS8gewotICBsaW5lID0gXCQgMAotICBzcGxpdChsaW5lLCBhcmcsICIgIikKLSAgaWYgKGFyZ1sxXSA9PSAiIyIpIHsKLSAgICBkZWZ1bmRlZiA9IGFyZ1syXQotICAgIG1hYzEgPSBhcmdbM10KLSAgfSBlbHNlIHsKLSAgICBkZWZ1bmRlZiA9IHN1YnN0cihhcmdbMV0sIDIpCi0gICAgbWFjMSA9IGFyZ1syXQotICB9Ci0gIHNwbGl0KG1hYzEsIG1hYzIsICIoIikgIykKLSAgbWFjcm8gPSBtYWMyWzFdCi0gIHByZWZpeCA9IHN1YnN0cihsaW5lLCAxLCBpbmRleChsaW5lLCBkZWZ1bmRlZikgLSAxKQotICBpZiAoRF9pc19zZXRbbWFjcm9dKSB7Ci0gICAgIyBQcmVzZXJ2ZSB0aGUgd2hpdGUgc3BhY2Ugc3Vycm91bmRpbmcgdGhlICIjIi4KLSAgICBwcmludCBwcmVmaXggImRlZmluZSIsIG1hY3JvIFBbbWFjcm9dIERbbWFjcm9dCi0gICAgbmV4dAotICB9IGVsc2UgewotICAgICMgUmVwbGFjZSAjdW5kZWYgd2l0aCBjb21tZW50cy4gIFRoaXMgaXMgbmVjZXNzYXJ5LCBmb3IgZXhhbXBsZSwKLSAgICAjIGluIHRoZSBjYXNlIG9mIF9QT1NJWF9TT1VSQ0UsIHdoaWNoIGlzIHByZWRlZmluZWQgYW5kIHJlcXVpcmVkCi0gICAgIyBvbiBzb21lIHN5c3RlbXMgd2hlcmUgY29uZmlndXJlIHdpbGwgbm90IGRlY2lkZSB0byBkZWZpbmUgaXQuCi0gICAgaWYgKGRlZnVuZGVmID09ICJ1bmRlZiIpIHsKLSAgICAgIHByaW50ICIvKiIsIHByZWZpeCBkZWZ1bmRlZiwgbWFjcm8sICIqLyIKLSAgICAgIG5leHQKLSAgICB9Ci0gIH0KLX0KLXsgcHJpbnQgfQotX0FDQVdLCi1fQUNFT0YKLWNhdCA+PiRDT05GSUdfU1RBVFVTIDw8XF9BQ0VPRiB8fCBhY193cml0ZV9mYWlsPTEKLSAgYXNfZm5fZXJyb3IgJD8gImNvdWxkIG5vdCBzZXR1cCBjb25maWcgaGVhZGVycyBtYWNoaW5lcnkiICIkTElORU5PIiA1Ci1maSAjIHRlc3QgLW4gIiRDT05GSUdfSEVBREVSUyIKLQotCi1ldmFsIHNldCBYICIgIDpGICRDT05GSUdfRklMRVMgIDpIICRDT05GSUdfSEVBREVSUyAgICA6QyAkQ09ORklHX0NPTU1BTkRTIgotc2hpZnQKLWZvciBhY190YWcKLWRvCi0gIGNhc2UgJGFjX3RhZyBpbgotICA6W0ZITENdKSBhY19tb2RlPSRhY190YWc7IGNvbnRpbnVlOzsKLSAgZXNhYwotICBjYXNlICRhY19tb2RlJGFjX3RhZyBpbgotICA6W0ZITF0qOiopOzsKLSAgOkwqIHwgOkMqOiopIGFzX2ZuX2Vycm9yICQ/ICJpbnZhbGlkIHRhZyBcYCRhY190YWcnIiAiJExJTkVOTyIgNTs7Ci0gIDpbRkhdLSkgYWNfdGFnPS06LTs7Ci0gIDpbRkhdKikgYWNfdGFnPSRhY190YWc6JGFjX3RhZy5pbjs7Ci0gIGVzYWMKLSAgYWNfc2F2ZV9JRlM9JElGUwotICBJRlM9OgotICBzZXQgeCAkYWNfdGFnCi0gIElGUz0kYWNfc2F2ZV9JRlMKLSAgc2hpZnQKLSAgYWNfZmlsZT0kMQotICBzaGlmdAotCi0gIGNhc2UgJGFjX21vZGUgaW4KLSAgOkwpIGFjX3NvdXJjZT0kMTs7Ci0gIDpbRkhdKQotICAgIGFjX2ZpbGVfaW5wdXRzPQotICAgIGZvciBhY19mCi0gICAgZG8KLSAgICAgIGNhc2UgJGFjX2YgaW4KLSAgICAgIC0pIGFjX2Y9IiRhY190bXAvc3RkaW4iOzsKLSAgICAgICopICMgTG9vayBmb3IgdGhlIGZpbGUgZmlyc3QgaW4gdGhlIGJ1aWxkIHRyZWUsIHRoZW4gaW4gdGhlIHNvdXJjZSB0cmVlCi0JICMgKGlmIHRoZSBwYXRoIGlzIG5vdCBhYnNvbHV0ZSkuICBUaGUgYWJzb2x1dGUgcGF0aCBjYW5ub3QgYmUgRE9TLXN0eWxlLAotCSAjIGJlY2F1c2UgJGFjX2YgY2Fubm90IGNvbnRhaW4gYDonLgotCSB0ZXN0IC1mICIkYWNfZiIgfHwKLQkgICBjYXNlICRhY19mIGluCi0JICAgW1xcLyRdKikgZmFsc2U7OwotCSAgICopIHRlc3QgLWYgIiRzcmNkaXIvJGFjX2YiICYmIGFjX2Y9IiRzcmNkaXIvJGFjX2YiOzsKLQkgICBlc2FjIHx8Ci0JICAgYXNfZm5fZXJyb3IgMSAiY2Fubm90IGZpbmQgaW5wdXQgZmlsZTogXGAkYWNfZiciICIkTElORU5PIiA1OzsKLSAgICAgIGVzYWMKLSAgICAgIGNhc2UgJGFjX2YgaW4gKlwnKikgYWNfZj1gJGFzX2VjaG8gIiRhY19mIiB8IHNlZCAicy8nLydcXFxcXFxcXCcnL2ciYDs7IGVzYWMKLSAgICAgIGFzX2ZuX2FwcGVuZCBhY19maWxlX2lucHV0cyAiICckYWNfZiciCi0gICAgZG9uZQotCi0gICAgIyBMZXQncyBzdGlsbCBwcmV0ZW5kIGl0IGlzIGBjb25maWd1cmUnIHdoaWNoIGluc3RhbnRpYXRlcyAoaS5lLiwgZG9uJ3QKLSAgICAjIHVzZSAkYXNfbWUpLCBwZW9wbGUgd291bGQgYmUgc3VycHJpc2VkIHRvIHJlYWQ6Ci0gICAgIyAgICAvKiBjb25maWcuaC4gIEdlbmVyYXRlZCBieSBjb25maWcuc3RhdHVzLiAgKi8KLSAgICBjb25maWd1cmVfaW5wdXQ9J0dlbmVyYXRlZCBmcm9tICdgCi0JICAkYXNfZWNobyAiJCoiIHwgc2VkICdzfF5bXjpdKi98fDtzfDpbXjpdKi98LCB8ZycKLQlgJyBieSBjb25maWd1cmUuJwotICAgIGlmIHRlc3QgeCIkYWNfZmlsZSIgIT0geC07IHRoZW4KLSAgICAgIGNvbmZpZ3VyZV9pbnB1dD0iJGFjX2ZpbGUuICAkY29uZmlndXJlX2lucHV0IgotICAgICAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjcmVhdGluZyAkYWNfZmlsZSIgPiY1Ci0kYXNfZWNobyAiJGFzX21lOiBjcmVhdGluZyAkYWNfZmlsZSIgPiY2O30KLSAgICBmaQotICAgICMgTmV1dHJhbGl6ZSBzcGVjaWFsIGNoYXJhY3RlcnMgaW50ZXJwcmV0ZWQgYnkgc2VkIGluIHJlcGxhY2VtZW50IHN0cmluZ3MuCi0gICAgY2FzZSAkY29uZmlndXJlX2lucHV0IGluICMoCi0gICAgKlwmKiB8ICpcfCogfCAqXFwqICkKLSAgICAgICBhY19zZWRfY29uZl9pbnB1dD1gJGFzX2VjaG8gIiRjb25maWd1cmVfaW5wdXQiIHwKLSAgICAgICBzZWQgJ3MvW1xcXFwmfF0vXFxcXCYvZydgOzsgIygKLSAgICAqKSBhY19zZWRfY29uZl9pbnB1dD0kY29uZmlndXJlX2lucHV0OzsKLSAgICBlc2FjCi0KLSAgICBjYXNlICRhY190YWcgaW4KLSAgICAqOi06KiB8ICo6LSkgY2F0ID4iJGFjX3RtcC9zdGRpbiIgXAotICAgICAgfHwgYXNfZm5fZXJyb3IgJD8gImNvdWxkIG5vdCBjcmVhdGUgJGFjX2ZpbGUiICIkTElORU5PIiA1IDs7Ci0gICAgZXNhYwotICAgIDs7Ci0gIGVzYWMKLQotICBhY19kaXI9YCRhc19kaXJuYW1lIC0tICIkYWNfZmlsZSIgfHwKLSRhc19leHByIFgiJGFjX2ZpbGUiIDogJ1hcKC4qW14vXVwpLy8qW14vXVteL10qLyokJyBcfCBcCi0JIFgiJGFjX2ZpbGUiIDogJ1hcKC8vXClbXi9dJyBcfCBcCi0JIFgiJGFjX2ZpbGUiIDogJ1hcKC8vXCkkJyBcfCBcCi0JIFgiJGFjX2ZpbGUiIDogJ1hcKC9cKScgXHwgLiAyPi9kZXYvbnVsbCB8fAotJGFzX2VjaG8gWCIkYWNfZmlsZSIgfAotICAgIHNlZCAnL15YXCguKlteL11cKVwvXC8qW14vXVteL10qXC8qJC97Ci0JICAgIHMvL1wxLwotCSAgICBxCi0JICB9Ci0JICAvXlhcKFwvXC9cKVteL10uKi97Ci0JICAgIHMvL1wxLwotCSAgICBxCi0JICB9Ci0JICAvXlhcKFwvXC9cKSQvewotCSAgICBzLy9cMS8KLQkgICAgcQotCSAgfQotCSAgL15YXChcL1wpLiovewotCSAgICBzLy9cMS8KLQkgICAgcQotCSAgfQotCSAgcy8uKi8uLzsgcSdgCi0gIGFzX2Rpcj0iJGFjX2RpciI7IGFzX2ZuX21rZGlyX3AKLSAgYWNfYnVpbGRkaXI9LgotCi1jYXNlICIkYWNfZGlyIiBpbgotLikgYWNfZGlyX3N1ZmZpeD0gYWNfdG9wX2J1aWxkZGlyX3N1Yj0uIGFjX3RvcF9idWlsZF9wcmVmaXg9IDs7Ci0qKQotICBhY19kaXJfc3VmZml4PS9gJGFzX2VjaG8gIiRhY19kaXIiIHwgc2VkICdzfF5cLltcXC9dfHwnYAotICAjIEEgIi4uIiBmb3IgZWFjaCBkaXJlY3RvcnkgaW4gJGFjX2Rpcl9zdWZmaXguCi0gIGFjX3RvcF9idWlsZGRpcl9zdWI9YCRhc19lY2hvICIkYWNfZGlyX3N1ZmZpeCIgfCBzZWQgJ3N8L1teXFwvXSp8Ly4ufGc7c3wvfHwnYAotICBjYXNlICRhY190b3BfYnVpbGRkaXJfc3ViIGluCi0gICIiKSBhY190b3BfYnVpbGRkaXJfc3ViPS4gYWNfdG9wX2J1aWxkX3ByZWZpeD0gOzsKLSAgKikgIGFjX3RvcF9idWlsZF9wcmVmaXg9JGFjX3RvcF9idWlsZGRpcl9zdWIvIDs7Ci0gIGVzYWMgOzsKLWVzYWMKLWFjX2Fic190b3BfYnVpbGRkaXI9JGFjX3B3ZAotYWNfYWJzX2J1aWxkZGlyPSRhY19wd2QkYWNfZGlyX3N1ZmZpeAotIyBmb3IgYmFja3dhcmQgY29tcGF0aWJpbGl0eToKLWFjX3RvcF9idWlsZGRpcj0kYWNfdG9wX2J1aWxkX3ByZWZpeAotCi1jYXNlICRzcmNkaXIgaW4KLSAgLikgICMgV2UgYXJlIGJ1aWxkaW5nIGluIHBsYWNlLgotICAgIGFjX3NyY2Rpcj0uCi0gICAgYWNfdG9wX3NyY2Rpcj0kYWNfdG9wX2J1aWxkZGlyX3N1YgotICAgIGFjX2Fic190b3Bfc3JjZGlyPSRhY19wd2QgOzsKLSAgW1xcL10qIHwgPzpbXFwvXSogKSAgIyBBYnNvbHV0ZSBuYW1lLgotICAgIGFjX3NyY2Rpcj0kc3JjZGlyJGFjX2Rpcl9zdWZmaXg7Ci0gICAgYWNfdG9wX3NyY2Rpcj0kc3JjZGlyCi0gICAgYWNfYWJzX3RvcF9zcmNkaXI9JHNyY2RpciA7OwotICAqKSAjIFJlbGF0aXZlIG5hbWUuCi0gICAgYWNfc3JjZGlyPSRhY190b3BfYnVpbGRfcHJlZml4JHNyY2RpciRhY19kaXJfc3VmZml4Ci0gICAgYWNfdG9wX3NyY2Rpcj0kYWNfdG9wX2J1aWxkX3ByZWZpeCRzcmNkaXIKLSAgICBhY19hYnNfdG9wX3NyY2Rpcj0kYWNfcHdkLyRzcmNkaXIgOzsKLWVzYWMKLWFjX2Fic19zcmNkaXI9JGFjX2Fic190b3Bfc3JjZGlyJGFjX2Rpcl9zdWZmaXgKLQotCi0gIGNhc2UgJGFjX21vZGUgaW4KLSAgOkYpCi0gICMKLSAgIyBDT05GSUdfRklMRQotICAjCi0KLSAgY2FzZSAkSU5TVEFMTCBpbgotICBbXFwvJF0qIHwgPzpbXFwvXSogKSBhY19JTlNUQUxMPSRJTlNUQUxMIDs7Ci0gICopIGFjX0lOU1RBTEw9JGFjX3RvcF9idWlsZF9wcmVmaXgkSU5TVEFMTCA7OwotICBlc2FjCi0gIGFjX01LRElSX1A9JE1LRElSX1AKLSAgY2FzZSAkTUtESVJfUCBpbgotICBbXFwvJF0qIHwgPzpbXFwvXSogKSA7OwotICAqLyopIGFjX01LRElSX1A9JGFjX3RvcF9idWlsZF9wcmVmaXgkTUtESVJfUCA7OwotICBlc2FjCi1fQUNFT0YKLQotY2F0ID4+JENPTkZJR19TVEFUVVMgPDxcX0FDRU9GIHx8IGFjX3dyaXRlX2ZhaWw9MQotIyBJZiB0aGUgdGVtcGxhdGUgZG9lcyBub3Qga25vdyBhYm91dCBkYXRhcm9vdGRpciwgZXhwYW5kIGl0LgotIyBGSVhNRTogVGhpcyBoYWNrIHNob3VsZCBiZSByZW1vdmVkIGEgZmV3IHllYXJzIGFmdGVyIDIuNjAuCi1hY19kYXRhcm9vdGRpcl9oYWNrPTsgYWNfZGF0YXJvb3RkaXJfc2Vlbj0KLWFjX3NlZF9kYXRhcm9vdD0nCi0vZGF0YXJvb3RkaXIvIHsKLSAgcAotICBxCi19Ci0vQGRhdGFkaXJAL3AKLS9AZG9jZGlyQC9wCi0vQGluZm9kaXJAL3AKLS9AbG9jYWxlZGlyQC9wCi0vQG1hbmRpckAvcCcKLWNhc2UgYGV2YWwgInNlZCAtbiBcIlwkYWNfc2VkX2RhdGFyb290XCIgJGFjX2ZpbGVfaW5wdXRzImAgaW4KLSpkYXRhcm9vdGRpciopIGFjX2RhdGFyb290ZGlyX3NlZW49eWVzOzsKLSpAZGF0YWRpckAqfCpAZG9jZGlyQCp8KkBpbmZvZGlyQCp8KkBsb2NhbGVkaXJAKnwqQG1hbmRpckAqKQotICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IFdBUk5JTkc6ICRhY19maWxlX2lucHV0cyBzZWVtcyB0byBpZ25vcmUgdGhlIC0tZGF0YXJvb3RkaXIgc2V0dGluZyIgPiY1Ci0kYXNfZWNobyAiJGFzX21lOiBXQVJOSU5HOiAkYWNfZmlsZV9pbnB1dHMgc2VlbXMgdG8gaWdub3JlIHRoZSAtLWRhdGFyb290ZGlyIHNldHRpbmciID4mMjt9Ci1fQUNFT0YKLWNhdCA+PiRDT05GSUdfU1RBVFVTIDw8X0FDRU9GIHx8IGFjX3dyaXRlX2ZhaWw9MQotICBhY19kYXRhcm9vdGRpcl9oYWNrPScKLSAgcyZAZGF0YWRpckAmJGRhdGFkaXImZwotICBzJkBkb2NkaXJAJiRkb2NkaXImZwotICBzJkBpbmZvZGlyQCYkaW5mb2RpciZnCi0gIHMmQGxvY2FsZWRpckAmJGxvY2FsZWRpciZnCi0gIHMmQG1hbmRpckAmJG1hbmRpciZnCi0gIHMmXFxcJHtkYXRhcm9vdGRpcn0mJGRhdGFyb290ZGlyJmcnIDs7Ci1lc2FjCi1fQUNFT0YKLQotIyBOZXV0cmFsaXplIFZQQVRIIHdoZW4gYCRzcmNkaXInID0gYC4nLgotIyBTaGVsbCBjb2RlIGluIGNvbmZpZ3VyZS5hYyBtaWdodCBzZXQgZXh0cmFzdWIuCi0jIEZJWE1FOiBkbyB3ZSByZWFsbHkgd2FudCB0byBtYWludGFpbiB0aGlzIGZlYXR1cmU/Ci1jYXQgPj4kQ09ORklHX1NUQVRVUyA8PF9BQ0VPRiB8fCBhY193cml0ZV9mYWlsPTEKLWFjX3NlZF9leHRyYT0iJGFjX3Zwc3ViCi0kZXh0cmFzdWIKLV9BQ0VPRgotY2F0ID4+JENPTkZJR19TVEFUVVMgPDxcX0FDRU9GIHx8IGFjX3dyaXRlX2ZhaWw9MQotOnQKLS9AW2EtekEtWl9dW2EtekEtWl8wLTldKkAvIWIKLXN8QGNvbmZpZ3VyZV9pbnB1dEB8JGFjX3NlZF9jb25mX2lucHV0fDt0IHQKLXMmQHRvcF9idWlsZGRpckAmJGFjX3RvcF9idWlsZGRpcl9zdWImO3QgdAotcyZAdG9wX2J1aWxkX3ByZWZpeEAmJGFjX3RvcF9idWlsZF9wcmVmaXgmO3QgdAotcyZAc3JjZGlyQCYkYWNfc3JjZGlyJjt0IHQKLXMmQGFic19zcmNkaXJAJiRhY19hYnNfc3JjZGlyJjt0IHQKLXMmQHRvcF9zcmNkaXJAJiRhY190b3Bfc3JjZGlyJjt0IHQKLXMmQGFic190b3Bfc3JjZGlyQCYkYWNfYWJzX3RvcF9zcmNkaXImO3QgdAotcyZAYnVpbGRkaXJAJiRhY19idWlsZGRpciY7dCB0Ci1zJkBhYnNfYnVpbGRkaXJAJiRhY19hYnNfYnVpbGRkaXImO3QgdAotcyZAYWJzX3RvcF9idWlsZGRpckAmJGFjX2Fic190b3BfYnVpbGRkaXImO3QgdAotcyZASU5TVEFMTEAmJGFjX0lOU1RBTEwmO3QgdAotcyZATUtESVJfUEAmJGFjX01LRElSX1AmO3QgdAotJGFjX2RhdGFyb290ZGlyX2hhY2sKLSIKLWV2YWwgc2VkIFwiXCRhY19zZWRfZXh0cmFcIiAiJGFjX2ZpbGVfaW5wdXRzIiB8ICRBV0sgLWYgIiRhY190bXAvc3Vicy5hd2siIFwKLSAgPiRhY190bXAvb3V0IHx8IGFzX2ZuX2Vycm9yICQ/ICJjb3VsZCBub3QgY3JlYXRlICRhY19maWxlIiAiJExJTkVOTyIgNQotCi10ZXN0IC16ICIkYWNfZGF0YXJvb3RkaXJfaGFjayRhY19kYXRhcm9vdGRpcl9zZWVuIiAmJgotICB7IGFjX291dD1gc2VkIC1uICcvXCR7ZGF0YXJvb3RkaXJ9L3AnICIkYWNfdG1wL291dCJgOyB0ZXN0IC1uICIkYWNfb3V0IjsgfSAmJgotICB7IGFjX291dD1gc2VkIC1uICcvXlsJIF0qZGF0YXJvb3RkaXJbCSBdKjoqPS9wJyBcCi0gICAgICAiJGFjX3RtcC9vdXQiYDsgdGVzdCAteiAiJGFjX291dCI7IH0gJiYKLSAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBXQVJOSU5HOiAkYWNfZmlsZSBjb250YWlucyBhIHJlZmVyZW5jZSB0byB0aGUgdmFyaWFibGUgXGBkYXRhcm9vdGRpcicKLXdoaWNoIHNlZW1zIHRvIGJlIHVuZGVmaW5lZC4gIFBsZWFzZSBtYWtlIHN1cmUgaXQgaXMgZGVmaW5lZCIgPiY1Ci0kYXNfZWNobyAiJGFzX21lOiBXQVJOSU5HOiAkYWNfZmlsZSBjb250YWlucyBhIHJlZmVyZW5jZSB0byB0aGUgdmFyaWFibGUgXGBkYXRhcm9vdGRpcicKLXdoaWNoIHNlZW1zIHRvIGJlIHVuZGVmaW5lZC4gIFBsZWFzZSBtYWtlIHN1cmUgaXQgaXMgZGVmaW5lZCIgPiYyO30KLQotICBybSAtZiAiJGFjX3RtcC9zdGRpbiIKLSAgY2FzZSAkYWNfZmlsZSBpbgotICAtKSBjYXQgIiRhY190bXAvb3V0IiAmJiBybSAtZiAiJGFjX3RtcC9vdXQiOzsKLSAgKikgcm0gLWYgIiRhY19maWxlIiAmJiBtdiAiJGFjX3RtcC9vdXQiICIkYWNfZmlsZSI7OwotICBlc2FjIFwKLSAgfHwgYXNfZm5fZXJyb3IgJD8gImNvdWxkIG5vdCBjcmVhdGUgJGFjX2ZpbGUiICIkTElORU5PIiA1Ci0gOzsKLSAgOkgpCi0gICMKLSAgIyBDT05GSUdfSEVBREVSCi0gICMKLSAgaWYgdGVzdCB4IiRhY19maWxlIiAhPSB4LTsgdGhlbgotICAgIHsKLSAgICAgICRhc19lY2hvICIvKiAkY29uZmlndXJlX2lucHV0ICAqLyIgXAotICAgICAgJiYgZXZhbCAnJEFXSyAtZiAiJGFjX3RtcC9kZWZpbmVzLmF3ayInICIkYWNfZmlsZV9pbnB1dHMiCi0gICAgfSA+IiRhY190bXAvY29uZmlnLmgiIFwKLSAgICAgIHx8IGFzX2ZuX2Vycm9yICQ/ICJjb3VsZCBub3QgY3JlYXRlICRhY19maWxlIiAiJExJTkVOTyIgNQotICAgIGlmIGRpZmYgIiRhY19maWxlIiAiJGFjX3RtcC9jb25maWcuaCIgPi9kZXYvbnVsbCAyPiYxOyB0aGVuCi0gICAgICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306ICRhY19maWxlIGlzIHVuY2hhbmdlZCIgPiY1Ci0kYXNfZWNobyAiJGFzX21lOiAkYWNfZmlsZSBpcyB1bmNoYW5nZWQiID4mNjt9Ci0gICAgZWxzZQotICAgICAgcm0gLWYgIiRhY19maWxlIgotICAgICAgbXYgIiRhY190bXAvY29uZmlnLmgiICIkYWNfZmlsZSIgXAotCXx8IGFzX2ZuX2Vycm9yICQ/ICJjb3VsZCBub3QgY3JlYXRlICRhY19maWxlIiAiJExJTkVOTyIgNQotICAgIGZpCi0gIGVsc2UKLSAgICAkYXNfZWNobyAiLyogJGNvbmZpZ3VyZV9pbnB1dCAgKi8iIFwKLSAgICAgICYmIGV2YWwgJyRBV0sgLWYgIiRhY190bXAvZGVmaW5lcy5hd2siJyAiJGFjX2ZpbGVfaW5wdXRzIiBcCi0gICAgICB8fCBhc19mbl9lcnJvciAkPyAiY291bGQgbm90IGNyZWF0ZSAtIiAiJExJTkVOTyIgNQotICBmaQotIyBDb21wdXRlICIkYWNfZmlsZSIncyBpbmRleCBpbiAkY29uZmlnX2hlYWRlcnMuCi1fYW1fYXJnPSIkYWNfZmlsZSIKLV9hbV9zdGFtcF9jb3VudD0xCi1mb3IgX2FtX2hlYWRlciBpbiAkY29uZmlnX2hlYWRlcnMgOjsgZG8KLSAgY2FzZSAkX2FtX2hlYWRlciBpbgotICAgICRfYW1fYXJnIHwgJF9hbV9hcmc6KiApCi0gICAgICBicmVhayA7OwotICAgICogKQotICAgICAgX2FtX3N0YW1wX2NvdW50PWBleHByICRfYW1fc3RhbXBfY291bnQgKyAxYCA7OwotICBlc2FjCi1kb25lCi1lY2hvICJ0aW1lc3RhbXAgZm9yICRfYW1fYXJnIiA+YCRhc19kaXJuYW1lIC0tICIkX2FtX2FyZyIgfHwKLSRhc19leHByIFgiJF9hbV9hcmciIDogJ1hcKC4qW14vXVwpLy8qW14vXVteL10qLyokJyBcfCBcCi0JIFgiJF9hbV9hcmciIDogJ1hcKC8vXClbXi9dJyBcfCBcCi0JIFgiJF9hbV9hcmciIDogJ1hcKC8vXCkkJyBcfCBcCi0JIFgiJF9hbV9hcmciIDogJ1hcKC9cKScgXHwgLiAyPi9kZXYvbnVsbCB8fAotJGFzX2VjaG8gWCIkX2FtX2FyZyIgfAotICAgIHNlZCAnL15YXCguKlteL11cKVwvXC8qW14vXVteL10qXC8qJC97Ci0JICAgIHMvL1wxLwotCSAgICBxCi0JICB9Ci0JICAvXlhcKFwvXC9cKVteL10uKi97Ci0JICAgIHMvL1wxLwotCSAgICBxCi0JICB9Ci0JICAvXlhcKFwvXC9cKSQvewotCSAgICBzLy9cMS8KLQkgICAgcQotCSAgfQotCSAgL15YXChcL1wpLiovewotCSAgICBzLy9cMS8KLQkgICAgcQotCSAgfQotCSAgcy8uKi8uLzsgcSdgL3N0YW1wLWgkX2FtX3N0YW1wX2NvdW50Ci0gOzsKLQotICA6QykgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogZXhlY3V0aW5nICRhY19maWxlIGNvbW1hbmRzIiA+JjUKLSRhc19lY2hvICIkYXNfbWU6IGV4ZWN1dGluZyAkYWNfZmlsZSBjb21tYW5kcyIgPiY2O30KLSA7OwotICBlc2FjCi0KLQotICBjYXNlICRhY19maWxlJGFjX21vZGUgaW4KLSAgICAiZGVwZmlsZXMiOkMpIHRlc3QgeCIkQU1ERVBfVFJVRSIgIT0geCIiIHx8IHsKLSAgIyBBdXRvY29uZiAyLjYyIHF1b3RlcyAtLWZpbGUgYXJndW1lbnRzIGZvciBldmFsLCBidXQgbm90IHdoZW4gZmlsZXMKLSAgIyBhcmUgbGlzdGVkIHdpdGhvdXQgLS1maWxlLiAgTGV0J3MgcGxheSBzYWZlIGFuZCBvbmx5IGVuYWJsZSB0aGUgZXZhbAotICAjIGlmIHdlIGRldGVjdCB0aGUgcXVvdGluZy4KLSAgY2FzZSAkQ09ORklHX0ZJTEVTIGluCi0gICpcJyopIGV2YWwgc2V0IHggIiRDT05GSUdfRklMRVMiIDs7Ci0gICopICAgc2V0IHggJENPTkZJR19GSUxFUyA7OwotICBlc2FjCi0gIHNoaWZ0Ci0gIGZvciBtZgotICBkbwotICAgICMgU3RyaXAgTUYgc28gd2UgZW5kIHVwIHdpdGggdGhlIG5hbWUgb2YgdGhlIGZpbGUuCi0gICAgbWY9YGVjaG8gIiRtZiIgfCBzZWQgLWUgJ3MvOi4qJC8vJ2AKLSAgICAjIENoZWNrIHdoZXRoZXIgdGhpcyBpcyBhbiBBdXRvbWFrZSBnZW5lcmF0ZWQgTWFrZWZpbGUgb3Igbm90LgotICAgICMgV2UgdXNlZCB0byBtYXRjaCBvbmx5IHRoZSBmaWxlcyBuYW1lZCBgTWFrZWZpbGUuaW4nLCBidXQKLSAgICAjIHNvbWUgcGVvcGxlIHJlbmFtZSB0aGVtOyBzbyBpbnN0ZWFkIHdlIGxvb2sgYXQgdGhlIGZpbGUgY29udGVudC4KLSAgICAjIEdyZXAnaW5nIHRoZSBmaXJzdCBsaW5lIGlzIG5vdCBlbm91Z2g6IHNvbWUgcGVvcGxlIHBvc3QtcHJvY2VzcwotICAgICMgZWFjaCBNYWtlZmlsZS5pbiBhbmQgYWRkIGEgbmV3IGxpbmUgb24gdG9wIG9mIGVhY2ggZmlsZSB0byBzYXkgc28uCi0gICAgIyBHcmVwJ2luZyB0aGUgd2hvbGUgZmlsZSBpcyBub3QgZ29vZCBlaXRoZXI6IEFJWCBncmVwIGhhcyBhIGxpbmUKLSAgICAjIGxpbWl0IG9mIDIwNDgsIGJ1dCBhbGwgc2VkJ3Mgd2Uga25vdyBoYXZlIHVuZGVyc3RhbmQgYXQgbGVhc3QgNDAwMC4KLSAgICBpZiBzZWQgLW4gJ3MsXiMuKmdlbmVyYXRlZCBieSBhdXRvbWFrZS4qLFgscCcgIiRtZiIgfCBncmVwIFggPi9kZXYvbnVsbCAyPiYxOyB0aGVuCi0gICAgICBkaXJwYXJ0PWAkYXNfZGlybmFtZSAtLSAiJG1mIiB8fAotJGFzX2V4cHIgWCIkbWYiIDogJ1hcKC4qW14vXVwpLy8qW14vXVteL10qLyokJyBcfCBcCi0JIFgiJG1mIiA6ICdYXCgvL1wpW14vXScgXHwgXAotCSBYIiRtZiIgOiAnWFwoLy9cKSQnIFx8IFwKLQkgWCIkbWYiIDogJ1hcKC9cKScgXHwgLiAyPi9kZXYvbnVsbCB8fAotJGFzX2VjaG8gWCIkbWYiIHwKLSAgICBzZWQgJy9eWFwoLipbXi9dXClcL1wvKlteL11bXi9dKlwvKiQvewotCSAgICBzLy9cMS8KLQkgICAgcQotCSAgfQotCSAgL15YXChcL1wvXClbXi9dLiovewotCSAgICBzLy9cMS8KLQkgICAgcQotCSAgfQotCSAgL15YXChcL1wvXCkkL3sKLQkgICAgcy8vXDEvCi0JICAgIHEKLQkgIH0KLQkgIC9eWFwoXC9cKS4qL3sKLQkgICAgcy8vXDEvCi0JICAgIHEKLQkgIH0KLQkgIHMvLiovLi87IHEnYAotICAgIGVsc2UKLSAgICAgIGNvbnRpbnVlCi0gICAgZmkKLSAgICAjIEV4dHJhY3QgdGhlIGRlZmluaXRpb24gb2YgREVQRElSLCBhbV9faW5jbHVkZSwgYW5kIGFtX19xdW90ZQotICAgICMgZnJvbSB0aGUgTWFrZWZpbGUgd2l0aG91dCBydW5uaW5nIGBtYWtlJy4KLSAgICBERVBESVI9YHNlZCAtbiAncy9eREVQRElSID0gLy9wJyA8ICIkbWYiYAotICAgIHRlc3QgLXogIiRERVBESVIiICYmIGNvbnRpbnVlCi0gICAgYW1fX2luY2x1ZGU9YHNlZCAtbiAncy9eYW1fX2luY2x1ZGUgPSAvL3AnIDwgIiRtZiJgCi0gICAgdGVzdCAteiAiYW1fX2luY2x1ZGUiICYmIGNvbnRpbnVlCi0gICAgYW1fX3F1b3RlPWBzZWQgLW4gJ3MvXmFtX19xdW90ZSA9IC8vcCcgPCAiJG1mImAKLSAgICAjIFdoZW4gdXNpbmcgYW5zaTJrbnIsIFUgbWF5IGJlIGVtcHR5IG9yIGFuIHVuZGVyc2NvcmU7IGV4cGFuZCBpdAotICAgIFU9YHNlZCAtbiAncy9eVSA9IC8vcCcgPCAiJG1mImAKLSAgICAjIEZpbmQgYWxsIGRlcGVuZGVuY3kgb3V0cHV0IGZpbGVzLCB0aGV5IGFyZSBpbmNsdWRlZCBmaWxlcyB3aXRoCi0gICAgIyAkKERFUERJUikgaW4gdGhlaXIgbmFtZXMuICBXZSBpbnZva2Ugc2VkIHR3aWNlIGJlY2F1c2UgaXQgaXMgdGhlCi0gICAgIyBzaW1wbGVzdCBhcHByb2FjaCB0byBjaGFuZ2luZyAkKERFUERJUikgdG8gaXRzIGFjdHVhbCB2YWx1ZSBpbiB0aGUKLSAgICAjIGV4cGFuc2lvbi4KLSAgICBmb3IgZmlsZSBpbiBgc2VkIC1uICIKLSAgICAgIHMvXiRhbV9faW5jbHVkZSAkYW1fX3F1b3RlXCguKihERVBESVIpLipcKSRhbV9fcXVvdGUiJyQvXDEvcCcgPCIkbWYiIHwgXAotCSBzZWQgLWUgJ3MvXCQoREVQRElSKS8nIiRERVBESVIiJy9nJyAtZSAncy9cJFUvJyIkVSInL2cnYDsgZG8KLSAgICAgICMgTWFrZSBzdXJlIHRoZSBkaXJlY3RvcnkgZXhpc3RzLgotICAgICAgdGVzdCAtZiAiJGRpcnBhcnQvJGZpbGUiICYmIGNvbnRpbnVlCi0gICAgICBmZGlyPWAkYXNfZGlybmFtZSAtLSAiJGZpbGUiIHx8Ci0kYXNfZXhwciBYIiRmaWxlIiA6ICdYXCguKlteL11cKS8vKlteL11bXi9dKi8qJCcgXHwgXAotCSBYIiRmaWxlIiA6ICdYXCgvL1wpW14vXScgXHwgXAotCSBYIiRmaWxlIiA6ICdYXCgvL1wpJCcgXHwgXAotCSBYIiRmaWxlIiA6ICdYXCgvXCknIFx8IC4gMj4vZGV2L251bGwgfHwKLSRhc19lY2hvIFgiJGZpbGUiIHwKLSAgICBzZWQgJy9eWFwoLipbXi9dXClcL1wvKlteL11bXi9dKlwvKiQvewotCSAgICBzLy9cMS8KLQkgICAgcQotCSAgfQotCSAgL15YXChcL1wvXClbXi9dLiovewotCSAgICBzLy9cMS8KLQkgICAgcQotCSAgfQotCSAgL15YXChcL1wvXCkkL3sKLQkgICAgcy8vXDEvCi0JICAgIHEKLQkgIH0KLQkgIC9eWFwoXC9cKS4qL3sKLQkgICAgcy8vXDEvCi0JICAgIHEKLQkgIH0KLQkgIHMvLiovLi87IHEnYAotICAgICAgYXNfZGlyPSRkaXJwYXJ0LyRmZGlyOyBhc19mbl9ta2Rpcl9wCi0gICAgICAjIGVjaG8gImNyZWF0aW5nICRkaXJwYXJ0LyRmaWxlIgotICAgICAgZWNobyAnIyBkdW1teScgPiAiJGRpcnBhcnQvJGZpbGUiCi0gICAgZG9uZQotICBkb25lCi19Ci0gOzsKLSAgICAibGlidG9vbCI6QykKLQotICAgICMgU2VlIGlmIHdlIGFyZSBydW5uaW5nIG9uIHpzaCwgYW5kIHNldCB0aGUgb3B0aW9ucyB3aGljaCBhbGxvdyBvdXIKLSAgICAjIGNvbW1hbmRzIHRocm91Z2ggd2l0aG91dCByZW1vdmFsIG9mIFwgZXNjYXBlcy4KLSAgICBpZiB0ZXN0IC1uICIke1pTSF9WRVJTSU9OK3NldH0iIDsgdGhlbgotICAgICAgc2V0b3B0IE5PX0dMT0JfU1VCU1QKLSAgICBmaQotCi0gICAgY2ZnZmlsZT0iJHtvZmlsZX1UIgotICAgIHRyYXAgIiRSTSBcIiRjZmdmaWxlXCI7IGV4aXQgMSIgMSAyIDE1Ci0gICAgJFJNICIkY2ZnZmlsZSIKLQotICAgIGNhdCA8PF9MVF9FT0YgPj4gIiRjZmdmaWxlIgotIyEgJFNIRUxMCi0KLSMgYCRFQ0hPICIkb2ZpbGUiIHwgc2VkICdzJV4uKi8lJSdgIC0gUHJvdmlkZSBnZW5lcmFsaXplZCBsaWJyYXJ5LWJ1aWxkaW5nIHN1cHBvcnQgc2VydmljZXMuCi0jIEdlbmVyYXRlZCBhdXRvbWF0aWNhbGx5IGJ5ICRhc19tZSAoJFBBQ0tBR0UkVElNRVNUQU1QKSAkVkVSU0lPTgotIyBMaWJ0b29sIHdhcyBjb25maWd1cmVkIG9uIGhvc3QgYChob3N0bmFtZSB8fCB1bmFtZSAtbikgMj4vZGV2L251bGwgfCBzZWQgMXFgOgotIyBOT1RFOiBDaGFuZ2VzIG1hZGUgdG8gdGhpcyBmaWxlIHdpbGwgYmUgbG9zdDogbG9vayBhdCBsdG1haW4uc2guCi0jCi0jICAgQ29weXJpZ2h0IChDKSAxOTk2LCAxOTk3LCAxOTk4LCAxOTk5LCAyMDAwLCAyMDAxLCAyMDAzLCAyMDA0LCAyMDA1LAotIyAgICAgICAgICAgICAgICAgMjAwNiwgMjAwNywgMjAwOCwgMjAwOSwgMjAxMCBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sCi0jICAgICAgICAgICAgICAgICBJbmMuCi0jICAgV3JpdHRlbiBieSBHb3Jkb24gTWF0emlna2VpdCwgMTk5NgotIwotIyAgIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIEdOVSBMaWJ0b29sLgotIwotIyBHTlUgTGlidG9vbCBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKLSMgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMKLSMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YKLSMgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0jCi0jIEFzIGEgc3BlY2lhbCBleGNlcHRpb24gdG8gdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLAotIyBpZiB5b3UgZGlzdHJpYnV0ZSB0aGlzIGZpbGUgYXMgcGFydCBvZiBhIHByb2dyYW0gb3IgbGlicmFyeSB0aGF0Ci0jIGlzIGJ1aWx0IHVzaW5nIEdOVSBMaWJ0b29sLCB5b3UgbWF5IGluY2x1ZGUgdGhpcyBmaWxlIHVuZGVyIHRoZQotIyBzYW1lIGRpc3RyaWJ1dGlvbiB0ZXJtcyB0aGF0IHlvdSB1c2UgZm9yIHRoZSByZXN0IG9mIHRoYXQgcHJvZ3JhbS4KLSMKLSMgR05VIExpYnRvb2wgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSMgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSMgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQotIyBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotIwotIyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQotIyBhbG9uZyB3aXRoIEdOVSBMaWJ0b29sOyBzZWUgdGhlIGZpbGUgQ09QWUlORy4gIElmIG5vdCwgYSBjb3B5Ci0jIGNhbiBiZSBkb3dubG9hZGVkIGZyb20gaHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzL2dwbC5odG1sLCBvcgotIyBvYnRhaW5lZCBieSB3cml0aW5nIHRvIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sCi0jIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgotCi0KLSMgVGhlIG5hbWVzIG9mIHRoZSB0YWdnZWQgY29uZmlndXJhdGlvbnMgc3VwcG9ydGVkIGJ5IHRoaXMgc2NyaXB0LgotYXZhaWxhYmxlX3RhZ3M9IiIKLQotIyAjIyMgQkVHSU4gTElCVE9PTCBDT05GSUcKLQotIyBBc3NlbWJsZXIgcHJvZ3JhbS4KLUFTPSRsdF9BUwotCi0jIERMTCBjcmVhdGlvbiBwcm9ncmFtLgotRExMVE9PTD0kbHRfRExMVE9PTAotCi0jIE9iamVjdCBkdW1wZXIgcHJvZ3JhbS4KLU9CSkRVTVA9JGx0X09CSkRVTVAKLQotIyBXaGljaCByZWxlYXNlIG9mIGxpYnRvb2wubTQgd2FzIHVzZWQ/Ci1tYWNyb192ZXJzaW9uPSRtYWNyb192ZXJzaW9uCi1tYWNyb19yZXZpc2lvbj0kbWFjcm9fcmV2aXNpb24KLQotIyBXaGV0aGVyIG9yIG5vdCB0byBidWlsZCBzaGFyZWQgbGlicmFyaWVzLgotYnVpbGRfbGlidG9vbF9saWJzPSRlbmFibGVfc2hhcmVkCi0KLSMgV2hldGhlciBvciBub3QgdG8gYnVpbGQgc3RhdGljIGxpYnJhcmllcy4KLWJ1aWxkX29sZF9saWJzPSRlbmFibGVfc3RhdGljCi0KLSMgV2hhdCB0eXBlIG9mIG9iamVjdHMgdG8gYnVpbGQuCi1waWNfbW9kZT0kcGljX21vZGUKLQotIyBXaGV0aGVyIG9yIG5vdCB0byBvcHRpbWl6ZSBmb3IgZmFzdCBpbnN0YWxsYXRpb24uCi1mYXN0X2luc3RhbGw9JGVuYWJsZV9mYXN0X2luc3RhbGwKLQotIyBTaGVsbCB0byB1c2Ugd2hlbiBpbnZva2luZyBzaGVsbCBzY3JpcHRzLgotU0hFTEw9JGx0X1NIRUxMCi0KLSMgQW4gZWNobyBwcm9ncmFtIHRoYXQgcHJvdGVjdHMgYmFja3NsYXNoZXMuCi1FQ0hPPSRsdF9FQ0hPCi0KLSMgVGhlIGhvc3Qgc3lzdGVtLgotaG9zdF9hbGlhcz0kaG9zdF9hbGlhcwotaG9zdD0kaG9zdAotaG9zdF9vcz0kaG9zdF9vcwotCi0jIFRoZSBidWlsZCBzeXN0ZW0uCi1idWlsZF9hbGlhcz0kYnVpbGRfYWxpYXMKLWJ1aWxkPSRidWlsZAotYnVpbGRfb3M9JGJ1aWxkX29zCi0KLSMgQSBzZWQgcHJvZ3JhbSB0aGF0IGRvZXMgbm90IHRydW5jYXRlIG91dHB1dC4KLVNFRD0kbHRfU0VECi0KLSMgU2VkIHRoYXQgaGVscHMgdXMgYXZvaWQgYWNjaWRlbnRhbGx5IHRyaWdnZXJpbmcgZWNobygxKSBvcHRpb25zIGxpa2UgLW4uCi1Yc2VkPSJcJFNFRCAtZSAxcy9eWC8vIgotCi0jIEEgZ3JlcCBwcm9ncmFtIHRoYXQgaGFuZGxlcyBsb25nIGxpbmVzLgotR1JFUD0kbHRfR1JFUAotCi0jIEFuIEVSRSBtYXRjaGVyLgotRUdSRVA9JGx0X0VHUkVQCi0KLSMgQSBsaXRlcmFsIHN0cmluZyBtYXRjaGVyLgotRkdSRVA9JGx0X0ZHUkVQCi0KLSMgQSBCU0QtIG9yIE1TLWNvbXBhdGlibGUgbmFtZSBsaXN0ZXIuCi1OTT0kbHRfTk0KLQotIyBXaGV0aGVyIHdlIG5lZWQgc29mdCBvciBoYXJkIGxpbmtzLgotTE5fUz0kbHRfTE5fUwotCi0jIFdoYXQgaXMgdGhlIG1heGltdW0gbGVuZ3RoIG9mIGEgY29tbWFuZD8KLW1heF9jbWRfbGVuPSRtYXhfY21kX2xlbgotCi0jIE9iamVjdCBmaWxlIHN1ZmZpeCAobm9ybWFsbHkgIm8iKS4KLW9iamV4dD0kYWNfb2JqZXh0Ci0KLSMgRXhlY3V0YWJsZSBmaWxlIHN1ZmZpeCAobm9ybWFsbHkgIiIpLgotZXhlZXh0PSRleGVleHQKLQotIyB3aGV0aGVyIHRoZSBzaGVsbCB1bmRlcnN0YW5kcyAidW5zZXQiLgotbHRfdW5zZXQ9JGx0X3Vuc2V0Ci0KLSMgdHVybiBzcGFjZXMgaW50byBuZXdsaW5lcy4KLVNQMk5MPSRsdF9sdF9TUDJOTAotCi0jIHR1cm4gbmV3bGluZXMgaW50byBzcGFjZXMuCi1OTDJTUD0kbHRfbHRfTkwyU1AKLQotIyBjb252ZXJ0IFwkYnVpbGQgZmlsZSBuYW1lcyB0byBcJGhvc3QgZm9ybWF0LgotdG9faG9zdF9maWxlX2NtZD0kbHRfY3ZfdG9faG9zdF9maWxlX2NtZAotCi0jIGNvbnZlcnQgXCRidWlsZCBmaWxlcyB0byB0b29sY2hhaW4gZm9ybWF0LgotdG9fdG9vbF9maWxlX2NtZD0kbHRfY3ZfdG9fdG9vbF9maWxlX2NtZAotCi0jIE1ldGhvZCB0byBjaGVjayB3aGV0aGVyIGRlcGVuZGVudCBsaWJyYXJpZXMgYXJlIHNoYXJlZCBvYmplY3RzLgotZGVwbGlic19jaGVja19tZXRob2Q9JGx0X2RlcGxpYnNfY2hlY2tfbWV0aG9kCi0KLSMgQ29tbWFuZCB0byB1c2Ugd2hlbiBkZXBsaWJzX2NoZWNrX21ldGhvZCA9ICJmaWxlX21hZ2ljIi4KLWZpbGVfbWFnaWNfY21kPSRsdF9maWxlX21hZ2ljX2NtZAotCi0jIEhvdyB0byBmaW5kIHBvdGVudGlhbCBmaWxlcyB3aGVuIGRlcGxpYnNfY2hlY2tfbWV0aG9kID0gImZpbGVfbWFnaWMiLgotZmlsZV9tYWdpY19nbG9iPSRsdF9maWxlX21hZ2ljX2dsb2IKLQotIyBGaW5kIHBvdGVudGlhbCBmaWxlcyB1c2luZyBub2Nhc2VnbG9iIHdoZW4gZGVwbGlic19jaGVja19tZXRob2QgPSAiZmlsZV9tYWdpYyIuCi13YW50X25vY2FzZWdsb2I9JGx0X3dhbnRfbm9jYXNlZ2xvYgotCi0jIENvbW1hbmQgdG8gYXNzb2NpYXRlIHNoYXJlZCBhbmQgbGluayBsaWJyYXJpZXMuCi1zaGFyZWRsaWJfZnJvbV9saW5rbGliX2NtZD0kbHRfc2hhcmVkbGliX2Zyb21fbGlua2xpYl9jbWQKLQotIyBUaGUgYXJjaGl2ZXIuCi1BUj0kbHRfQVIKLQotIyBGbGFncyB0byBjcmVhdGUgYW4gYXJjaGl2ZS4KLUFSX0ZMQUdTPSRsdF9BUl9GTEFHUwotCi0jIEhvdyB0byBmZWVkIGEgZmlsZSBsaXN0aW5nIHRvIHRoZSBhcmNoaXZlci4KLWFyY2hpdmVyX2xpc3Rfc3BlYz0kbHRfYXJjaGl2ZXJfbGlzdF9zcGVjCi0KLSMgQSBzeW1ib2wgc3RyaXBwaW5nIHByb2dyYW0uCi1TVFJJUD0kbHRfU1RSSVAKLQotIyBDb21tYW5kcyB1c2VkIHRvIGluc3RhbGwgYW4gb2xkLXN0eWxlIGFyY2hpdmUuCi1SQU5MSUI9JGx0X1JBTkxJQgotb2xkX3Bvc3RpbnN0YWxsX2NtZHM9JGx0X29sZF9wb3N0aW5zdGFsbF9jbWRzCi1vbGRfcG9zdHVuaW5zdGFsbF9jbWRzPSRsdF9vbGRfcG9zdHVuaW5zdGFsbF9jbWRzCi0KLSMgV2hldGhlciB0byB1c2UgYSBsb2NrIGZvciBvbGQgYXJjaGl2ZSBleHRyYWN0aW9uLgotbG9ja19vbGRfYXJjaGl2ZV9leHRyYWN0aW9uPSRsb2NrX29sZF9hcmNoaXZlX2V4dHJhY3Rpb24KLQotIyBBIEMgY29tcGlsZXIuCi1MVENDPSRsdF9DQwotCi0jIExUQ0MgY29tcGlsZXIgZmxhZ3MuCi1MVENGTEFHUz0kbHRfQ0ZMQUdTCi0KLSMgVGFrZSB0aGUgb3V0cHV0IG9mIG5tIGFuZCBwcm9kdWNlIGEgbGlzdGluZyBvZiByYXcgc3ltYm9scyBhbmQgQyBuYW1lcy4KLWdsb2JhbF9zeW1ib2xfcGlwZT0kbHRfbHRfY3Zfc3lzX2dsb2JhbF9zeW1ib2xfcGlwZQotCi0jIFRyYW5zZm9ybSB0aGUgb3V0cHV0IG9mIG5tIGluIGEgcHJvcGVyIEMgZGVjbGFyYXRpb24uCi1nbG9iYWxfc3ltYm9sX3RvX2NkZWNsPSRsdF9sdF9jdl9zeXNfZ2xvYmFsX3N5bWJvbF90b19jZGVjbAotCi0jIFRyYW5zZm9ybSB0aGUgb3V0cHV0IG9mIG5tIGluIGEgQyBuYW1lIGFkZHJlc3MgcGFpci4KLWdsb2JhbF9zeW1ib2xfdG9fY19uYW1lX2FkZHJlc3M9JGx0X2x0X2N2X3N5c19nbG9iYWxfc3ltYm9sX3RvX2NfbmFtZV9hZGRyZXNzCi0KLSMgVHJhbnNmb3JtIHRoZSBvdXRwdXQgb2Ygbm0gaW4gYSBDIG5hbWUgYWRkcmVzcyBwYWlyIHdoZW4gbGliIHByZWZpeCBpcyBuZWVkZWQuCi1nbG9iYWxfc3ltYm9sX3RvX2NfbmFtZV9hZGRyZXNzX2xpYl9wcmVmaXg9JGx0X2x0X2N2X3N5c19nbG9iYWxfc3ltYm9sX3RvX2NfbmFtZV9hZGRyZXNzX2xpYl9wcmVmaXgKLQotIyBTcGVjaWZ5IGZpbGVuYW1lIGNvbnRhaW5pbmcgaW5wdXQgZmlsZXMgZm9yIFwkTk0uCi1ubV9maWxlX2xpc3Rfc3BlYz0kbHRfbm1fZmlsZV9saXN0X3NwZWMKLQotIyBUaGUgcm9vdCB3aGVyZSB0byBzZWFyY2ggZm9yIGRlcGVuZGVudCBsaWJyYXJpZXMsYW5kIGluIHdoaWNoIG91ciBsaWJyYXJpZXMgc2hvdWxkIGJlIGluc3RhbGxlZC4KLWx0X3N5c3Jvb3Q9JGx0X3N5c3Jvb3QKLQotIyBUaGUgbmFtZSBvZiB0aGUgZGlyZWN0b3J5IHRoYXQgY29udGFpbnMgdGVtcG9yYXJ5IGxpYnRvb2wgZmlsZXMuCi1vYmpkaXI9JG9iamRpcgotCi0jIFVzZWQgdG8gZXhhbWluZSBsaWJyYXJpZXMgd2hlbiBmaWxlX21hZ2ljX2NtZCBiZWdpbnMgd2l0aCAiZmlsZSIuCi1NQUdJQ19DTUQ9JE1BR0lDX0NNRAotCi0jIE11c3Qgd2UgbG9jayBmaWxlcyB3aGVuIGRvaW5nIGNvbXBpbGF0aW9uPwotbmVlZF9sb2Nrcz0kbHRfbmVlZF9sb2NrcwotCi0jIE1hbmlmZXN0IHRvb2wuCi1NQU5JRkVTVF9UT09MPSRsdF9NQU5JRkVTVF9UT09MCi0KLSMgVG9vbCB0byBtYW5pcHVsYXRlIGFyY2hpdmVkIERXQVJGIGRlYnVnIHN5bWJvbCBmaWxlcyBvbiBNYWMgT1MgWC4KLURTWU1VVElMPSRsdF9EU1lNVVRJTAotCi0jIFRvb2wgdG8gY2hhbmdlIGdsb2JhbCB0byBsb2NhbCBzeW1ib2xzIG9uIE1hYyBPUyBYLgotTk1FRElUPSRsdF9OTUVESVQKLQotIyBUb29sIHRvIG1hbmlwdWxhdGUgZmF0IG9iamVjdHMgYW5kIGFyY2hpdmVzIG9uIE1hYyBPUyBYLgotTElQTz0kbHRfTElQTwotCi0jIGxkZC9yZWFkZWxmIGxpa2UgdG9vbCBmb3IgTWFjaC1PIGJpbmFyaWVzIG9uIE1hYyBPUyBYLgotT1RPT0w9JGx0X09UT09MCi0KLSMgbGRkL3JlYWRlbGYgbGlrZSB0b29sIGZvciA2NCBiaXQgTWFjaC1PIGJpbmFyaWVzIG9uIE1hYyBPUyBYIDEwLjQuCi1PVE9PTDY0PSRsdF9PVE9PTDY0Ci0KLSMgT2xkIGFyY2hpdmUgc3VmZml4IChub3JtYWxseSAiYSIpLgotbGliZXh0PSRsaWJleHQKLQotIyBTaGFyZWQgbGlicmFyeSBzdWZmaXggKG5vcm1hbGx5ICIuc28iKS4KLXNocmV4dF9jbWRzPSRsdF9zaHJleHRfY21kcwotCi0jIFRoZSBjb21tYW5kcyB0byBleHRyYWN0IHRoZSBleHBvcnRlZCBzeW1ib2wgbGlzdCBmcm9tIGEgc2hhcmVkIGFyY2hpdmUuCi1leHRyYWN0X2V4cHN5bXNfY21kcz0kbHRfZXh0cmFjdF9leHBzeW1zX2NtZHMKLQotIyBWYXJpYWJsZXMgd2hvc2UgdmFsdWVzIHNob3VsZCBiZSBzYXZlZCBpbiBsaWJ0b29sIHdyYXBwZXIgc2NyaXB0cyBhbmQKLSMgcmVzdG9yZWQgYXQgbGluayB0aW1lLgotdmFyaWFibGVzX3NhdmVkX2Zvcl9yZWxpbms9JGx0X3ZhcmlhYmxlc19zYXZlZF9mb3JfcmVsaW5rCi0KLSMgRG8gd2UgbmVlZCB0aGUgImxpYiIgcHJlZml4IGZvciBtb2R1bGVzPwotbmVlZF9saWJfcHJlZml4PSRuZWVkX2xpYl9wcmVmaXgKLQotIyBEbyB3ZSBuZWVkIGEgdmVyc2lvbiBmb3IgbGlicmFyaWVzPwotbmVlZF92ZXJzaW9uPSRuZWVkX3ZlcnNpb24KLQotIyBMaWJyYXJ5IHZlcnNpb25pbmcgdHlwZS4KLXZlcnNpb25fdHlwZT0kdmVyc2lvbl90eXBlCi0KLSMgU2hhcmVkIGxpYnJhcnkgcnVudGltZSBwYXRoIHZhcmlhYmxlLgotcnVucGF0aF92YXI9JHJ1bnBhdGhfdmFyCi0KLSMgU2hhcmVkIGxpYnJhcnkgcGF0aCB2YXJpYWJsZS4KLXNobGlicGF0aF92YXI9JHNobGlicGF0aF92YXIKLQotIyBJcyBzaGxpYnBhdGggc2VhcmNoZWQgYmVmb3JlIHRoZSBoYXJkLWNvZGVkIGxpYnJhcnkgc2VhcmNoIHBhdGg/Ci1zaGxpYnBhdGhfb3ZlcnJpZGVzX3J1bnBhdGg9JHNobGlicGF0aF9vdmVycmlkZXNfcnVucGF0aAotCi0jIEZvcm1hdCBvZiBsaWJyYXJ5IG5hbWUgcHJlZml4LgotbGlibmFtZV9zcGVjPSRsdF9saWJuYW1lX3NwZWMKLQotIyBMaXN0IG9mIGFyY2hpdmUgbmFtZXMuICBGaXJzdCBuYW1lIGlzIHRoZSByZWFsIG9uZSwgdGhlIHJlc3QgYXJlIGxpbmtzLgotIyBUaGUgbGFzdCBuYW1lIGlzIHRoZSBvbmUgdGhhdCB0aGUgbGlua2VyIGZpbmRzIHdpdGggLWxOQU1FCi1saWJyYXJ5X25hbWVzX3NwZWM9JGx0X2xpYnJhcnlfbmFtZXNfc3BlYwotCi0jIFRoZSBjb2RlZCBuYW1lIG9mIHRoZSBsaWJyYXJ5LCBpZiBkaWZmZXJlbnQgZnJvbSB0aGUgcmVhbCBuYW1lLgotc29uYW1lX3NwZWM9JGx0X3NvbmFtZV9zcGVjCi0KLSMgUGVybWlzc2lvbiBtb2RlIG92ZXJyaWRlIGZvciBpbnN0YWxsYXRpb24gb2Ygc2hhcmVkIGxpYnJhcmllcy4KLWluc3RhbGxfb3ZlcnJpZGVfbW9kZT0kbHRfaW5zdGFsbF9vdmVycmlkZV9tb2RlCi0KLSMgQ29tbWFuZCB0byB1c2UgYWZ0ZXIgaW5zdGFsbGF0aW9uIG9mIGEgc2hhcmVkIGFyY2hpdmUuCi1wb3N0aW5zdGFsbF9jbWRzPSRsdF9wb3N0aW5zdGFsbF9jbWRzCi0KLSMgQ29tbWFuZCB0byB1c2UgYWZ0ZXIgdW5pbnN0YWxsYXRpb24gb2YgYSBzaGFyZWQgYXJjaGl2ZS4KLXBvc3R1bmluc3RhbGxfY21kcz0kbHRfcG9zdHVuaW5zdGFsbF9jbWRzCi0KLSMgQ29tbWFuZHMgdXNlZCB0byBmaW5pc2ggYSBsaWJ0b29sIGxpYnJhcnkgaW5zdGFsbGF0aW9uIGluIGEgZGlyZWN0b3J5LgotZmluaXNoX2NtZHM9JGx0X2ZpbmlzaF9jbWRzCi0KLSMgQXMgImZpbmlzaF9jbWRzIiwgZXhjZXB0IGEgc2luZ2xlIHNjcmlwdCBmcmFnbWVudCB0byBiZSBldmFsZWQgYnV0Ci0jIG5vdCBzaG93bi4KLWZpbmlzaF9ldmFsPSRsdF9maW5pc2hfZXZhbAotCi0jIFdoZXRoZXIgd2Ugc2hvdWxkIGhhcmRjb2RlIGxpYnJhcnkgcGF0aHMgaW50byBsaWJyYXJpZXMuCi1oYXJkY29kZV9pbnRvX2xpYnM9JGhhcmRjb2RlX2ludG9fbGlicwotCi0jIENvbXBpbGUtdGltZSBzeXN0ZW0gc2VhcmNoIHBhdGggZm9yIGxpYnJhcmllcy4KLXN5c19saWJfc2VhcmNoX3BhdGhfc3BlYz0kbHRfc3lzX2xpYl9zZWFyY2hfcGF0aF9zcGVjCi0KLSMgUnVuLXRpbWUgc3lzdGVtIHNlYXJjaCBwYXRoIGZvciBsaWJyYXJpZXMuCi1zeXNfbGliX2Rsc2VhcmNoX3BhdGhfc3BlYz0kbHRfc3lzX2xpYl9kbHNlYXJjaF9wYXRoX3NwZWMKLQotIyBXaGV0aGVyIGRsb3BlbiBpcyBzdXBwb3J0ZWQuCi1kbG9wZW5fc3VwcG9ydD0kZW5hYmxlX2Rsb3BlbgotCi0jIFdoZXRoZXIgZGxvcGVuIG9mIHByb2dyYW1zIGlzIHN1cHBvcnRlZC4KLWRsb3Blbl9zZWxmPSRlbmFibGVfZGxvcGVuX3NlbGYKLQotIyBXaGV0aGVyIGRsb3BlbiBvZiBzdGF0aWNhbGx5IGxpbmtlZCBwcm9ncmFtcyBpcyBzdXBwb3J0ZWQuCi1kbG9wZW5fc2VsZl9zdGF0aWM9JGVuYWJsZV9kbG9wZW5fc2VsZl9zdGF0aWMKLQotIyBDb21tYW5kcyB0byBzdHJpcCBsaWJyYXJpZXMuCi1vbGRfc3RyaXBsaWI9JGx0X29sZF9zdHJpcGxpYgotc3RyaXBsaWI9JGx0X3N0cmlwbGliCi0KLQotIyBUaGUgbGlua2VyIHVzZWQgdG8gYnVpbGQgbGlicmFyaWVzLgotTEQ9JGx0X0xECi0KLSMgSG93IHRvIGNyZWF0ZSByZWxvYWRhYmxlIG9iamVjdCBmaWxlcy4KLXJlbG9hZF9mbGFnPSRsdF9yZWxvYWRfZmxhZwotcmVsb2FkX2NtZHM9JGx0X3JlbG9hZF9jbWRzCi0KLSMgQ29tbWFuZHMgdXNlZCB0byBidWlsZCBhbiBvbGQtc3R5bGUgYXJjaGl2ZS4KLW9sZF9hcmNoaXZlX2NtZHM9JGx0X29sZF9hcmNoaXZlX2NtZHMKLQotIyBBIGxhbmd1YWdlIHNwZWNpZmljIGNvbXBpbGVyLgotQ0M9JGx0X2NvbXBpbGVyCi0KLSMgSXMgdGhlIGNvbXBpbGVyIHRoZSBHTlUgY29tcGlsZXI/Ci13aXRoX2djYz0kR0NDCi0KLSMgQ29tcGlsZXIgZmxhZyB0byB0dXJuIG9mZiBidWlsdGluIGZ1bmN0aW9ucy4KLW5vX2J1aWx0aW5fZmxhZz0kbHRfbHRfcHJvZ19jb21waWxlcl9ub19idWlsdGluX2ZsYWcKLQotIyBBZGRpdGlvbmFsIGNvbXBpbGVyIGZsYWdzIGZvciBidWlsZGluZyBsaWJyYXJ5IG9iamVjdHMuCi1waWNfZmxhZz0kbHRfbHRfcHJvZ19jb21waWxlcl9waWMKLQotIyBIb3cgdG8gcGFzcyBhIGxpbmtlciBmbGFnIHRocm91Z2ggdGhlIGNvbXBpbGVyLgotd2w9JGx0X2x0X3Byb2dfY29tcGlsZXJfd2wKLQotIyBDb21waWxlciBmbGFnIHRvIHByZXZlbnQgZHluYW1pYyBsaW5raW5nLgotbGlua19zdGF0aWNfZmxhZz0kbHRfbHRfcHJvZ19jb21waWxlcl9zdGF0aWMKLQotIyBEb2VzIGNvbXBpbGVyIHNpbXVsdGFuZW91c2x5IHN1cHBvcnQgLWMgYW5kIC1vIG9wdGlvbnM/Ci1jb21waWxlcl9jX289JGx0X2x0X2N2X3Byb2dfY29tcGlsZXJfY19vCi0KLSMgV2hldGhlciBvciBub3QgdG8gYWRkIC1sYyBmb3IgYnVpbGRpbmcgc2hhcmVkIGxpYnJhcmllcy4KLWJ1aWxkX2xpYnRvb2xfbmVlZF9sYz0kYXJjaGl2ZV9jbWRzX25lZWRfbGMKLQotIyBXaGV0aGVyIG9yIG5vdCB0byBkaXNhbGxvdyBzaGFyZWQgbGlicyB3aGVuIHJ1bnRpbWUgbGlicyBhcmUgc3RhdGljLgotYWxsb3dfbGlidG9vbF9saWJzX3dpdGhfc3RhdGljX3J1bnRpbWVzPSRlbmFibGVfc2hhcmVkX3dpdGhfc3RhdGljX3J1bnRpbWVzCi0KLSMgQ29tcGlsZXIgZmxhZyB0byBhbGxvdyByZWZsZXhpdmUgZGxvcGVucy4KLWV4cG9ydF9keW5hbWljX2ZsYWdfc3BlYz0kbHRfZXhwb3J0X2R5bmFtaWNfZmxhZ19zcGVjCi0KLSMgQ29tcGlsZXIgZmxhZyB0byBnZW5lcmF0ZSBzaGFyZWQgb2JqZWN0cyBkaXJlY3RseSBmcm9tIGFyY2hpdmVzLgotd2hvbGVfYXJjaGl2ZV9mbGFnX3NwZWM9JGx0X3dob2xlX2FyY2hpdmVfZmxhZ19zcGVjCi0KLSMgV2hldGhlciB0aGUgY29tcGlsZXIgY29wZXMgd2l0aCBwYXNzaW5nIG5vIG9iamVjdHMgZGlyZWN0bHkuCi1jb21waWxlcl9uZWVkc19vYmplY3Q9JGx0X2NvbXBpbGVyX25lZWRzX29iamVjdAotCi0jIENyZWF0ZSBhbiBvbGQtc3R5bGUgYXJjaGl2ZSBmcm9tIGEgc2hhcmVkIGFyY2hpdmUuCi1vbGRfYXJjaGl2ZV9mcm9tX25ld19jbWRzPSRsdF9vbGRfYXJjaGl2ZV9mcm9tX25ld19jbWRzCi0KLSMgQ3JlYXRlIGEgdGVtcG9yYXJ5IG9sZC1zdHlsZSBhcmNoaXZlIHRvIGxpbmsgaW5zdGVhZCBvZiBhIHNoYXJlZCBhcmNoaXZlLgotb2xkX2FyY2hpdmVfZnJvbV9leHBzeW1zX2NtZHM9JGx0X29sZF9hcmNoaXZlX2Zyb21fZXhwc3ltc19jbWRzCi0KLSMgQ29tbWFuZHMgdXNlZCB0byBidWlsZCBhIHNoYXJlZCBhcmNoaXZlLgotYXJjaGl2ZV9jbWRzPSRsdF9hcmNoaXZlX2NtZHMKLWFyY2hpdmVfZXhwc3ltX2NtZHM9JGx0X2FyY2hpdmVfZXhwc3ltX2NtZHMKLQotIyBDb21tYW5kcyB1c2VkIHRvIGJ1aWxkIGEgbG9hZGFibGUgbW9kdWxlIGlmIGRpZmZlcmVudCBmcm9tIGJ1aWxkaW5nCi0jIGEgc2hhcmVkIGFyY2hpdmUuCi1tb2R1bGVfY21kcz0kbHRfbW9kdWxlX2NtZHMKLW1vZHVsZV9leHBzeW1fY21kcz0kbHRfbW9kdWxlX2V4cHN5bV9jbWRzCi0KLSMgV2hldGhlciB3ZSBhcmUgYnVpbGRpbmcgd2l0aCBHTlUgbGQgb3Igbm90Lgotd2l0aF9nbnVfbGQ9JGx0X3dpdGhfZ251X2xkCi0KLSMgRmxhZyB0aGF0IGFsbG93cyBzaGFyZWQgbGlicmFyaWVzIHdpdGggdW5kZWZpbmVkIHN5bWJvbHMgdG8gYmUgYnVpbHQuCi1hbGxvd191bmRlZmluZWRfZmxhZz0kbHRfYWxsb3dfdW5kZWZpbmVkX2ZsYWcKLQotIyBGbGFnIHRoYXQgZW5mb3JjZXMgbm8gdW5kZWZpbmVkIHN5bWJvbHMuCi1ub191bmRlZmluZWRfZmxhZz0kbHRfbm9fdW5kZWZpbmVkX2ZsYWcKLQotIyBGbGFnIHRvIGhhcmRjb2RlIFwkbGliZGlyIGludG8gYSBiaW5hcnkgZHVyaW5nIGxpbmtpbmcuCi0jIFRoaXMgbXVzdCB3b3JrIGV2ZW4gaWYgXCRsaWJkaXIgZG9lcyBub3QgZXhpc3QKLWhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWM9JGx0X2hhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWMKLQotIyBJZiBsZCBpcyB1c2VkIHdoZW4gbGlua2luZywgZmxhZyB0byBoYXJkY29kZSBcJGxpYmRpciBpbnRvIGEgYmluYXJ5Ci0jIGR1cmluZyBsaW5raW5nLiAgVGhpcyBtdXN0IHdvcmsgZXZlbiBpZiBcJGxpYmRpciBkb2VzIG5vdCBleGlzdC4KLWhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWNfbGQ9JGx0X2hhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWNfbGQKLQotIyBXaGV0aGVyIHdlIG5lZWQgYSBzaW5nbGUgIi1ycGF0aCIgZmxhZyB3aXRoIGEgc2VwYXJhdGVkIGFyZ3VtZW50LgotaGFyZGNvZGVfbGliZGlyX3NlcGFyYXRvcj0kbHRfaGFyZGNvZGVfbGliZGlyX3NlcGFyYXRvcgotCi0jIFNldCB0byAieWVzIiBpZiB1c2luZyBESVIvbGliTkFNRVwke3NoYXJlZF9leHR9IGR1cmluZyBsaW5raW5nIGhhcmRjb2RlcwotIyBESVIgaW50byB0aGUgcmVzdWx0aW5nIGJpbmFyeS4KLWhhcmRjb2RlX2RpcmVjdD0kaGFyZGNvZGVfZGlyZWN0Ci0KLSMgU2V0IHRvICJ5ZXMiIGlmIHVzaW5nIERJUi9saWJOQU1FXCR7c2hhcmVkX2V4dH0gZHVyaW5nIGxpbmtpbmcgaGFyZGNvZGVzCi0jIERJUiBpbnRvIHRoZSByZXN1bHRpbmcgYmluYXJ5IGFuZCB0aGUgcmVzdWx0aW5nIGxpYnJhcnkgZGVwZW5kZW5jeSBpcwotIyAiYWJzb2x1dGUiLGkuZSBpbXBvc3NpYmxlIHRvIGNoYW5nZSBieSBzZXR0aW5nIFwke3NobGlicGF0aF92YXJ9IGlmIHRoZQotIyBsaWJyYXJ5IGlzIHJlbG9jYXRlZC4KLWhhcmRjb2RlX2RpcmVjdF9hYnNvbHV0ZT0kaGFyZGNvZGVfZGlyZWN0X2Fic29sdXRlCi0KLSMgU2V0IHRvICJ5ZXMiIGlmIHVzaW5nIHRoZSAtTERJUiBmbGFnIGR1cmluZyBsaW5raW5nIGhhcmRjb2RlcyBESVIKLSMgaW50byB0aGUgcmVzdWx0aW5nIGJpbmFyeS4KLWhhcmRjb2RlX21pbnVzX0w9JGhhcmRjb2RlX21pbnVzX0wKLQotIyBTZXQgdG8gInllcyIgaWYgdXNpbmcgU0hMSUJQQVRIX1ZBUj1ESVIgZHVyaW5nIGxpbmtpbmcgaGFyZGNvZGVzIERJUgotIyBpbnRvIHRoZSByZXN1bHRpbmcgYmluYXJ5LgotaGFyZGNvZGVfc2hsaWJwYXRoX3Zhcj0kaGFyZGNvZGVfc2hsaWJwYXRoX3ZhcgotCi0jIFNldCB0byAieWVzIiBpZiBidWlsZGluZyBhIHNoYXJlZCBsaWJyYXJ5IGF1dG9tYXRpY2FsbHkgaGFyZGNvZGVzIERJUgotIyBpbnRvIHRoZSBsaWJyYXJ5IGFuZCBhbGwgc3Vic2VxdWVudCBsaWJyYXJpZXMgYW5kIGV4ZWN1dGFibGVzIGxpbmtlZAotIyBhZ2FpbnN0IGl0LgotaGFyZGNvZGVfYXV0b21hdGljPSRoYXJkY29kZV9hdXRvbWF0aWMKLQotIyBTZXQgdG8geWVzIGlmIGxpbmtlciBhZGRzIHJ1bnRpbWUgcGF0aHMgb2YgZGVwZW5kZW50IGxpYnJhcmllcwotIyB0byBydW50aW1lIHBhdGggbGlzdC4KLWluaGVyaXRfcnBhdGg9JGluaGVyaXRfcnBhdGgKLQotIyBXaGV0aGVyIGxpYnRvb2wgbXVzdCBsaW5rIGEgcHJvZ3JhbSBhZ2FpbnN0IGFsbCBpdHMgZGVwZW5kZW5jeSBsaWJyYXJpZXMuCi1saW5rX2FsbF9kZXBsaWJzPSRsaW5rX2FsbF9kZXBsaWJzCi0KLSMgU2V0IHRvICJ5ZXMiIGlmIGV4cG9ydGVkIHN5bWJvbHMgYXJlIHJlcXVpcmVkLgotYWx3YXlzX2V4cG9ydF9zeW1ib2xzPSRhbHdheXNfZXhwb3J0X3N5bWJvbHMKLQotIyBUaGUgY29tbWFuZHMgdG8gbGlzdCBleHBvcnRlZCBzeW1ib2xzLgotZXhwb3J0X3N5bWJvbHNfY21kcz0kbHRfZXhwb3J0X3N5bWJvbHNfY21kcwotCi0jIFN5bWJvbHMgdGhhdCBzaG91bGQgbm90IGJlIGxpc3RlZCBpbiB0aGUgcHJlbG9hZGVkIHN5bWJvbHMuCi1leGNsdWRlX2V4cHN5bXM9JGx0X2V4Y2x1ZGVfZXhwc3ltcwotCi0jIFN5bWJvbHMgdGhhdCBtdXN0IGFsd2F5cyBiZSBleHBvcnRlZC4KLWluY2x1ZGVfZXhwc3ltcz0kbHRfaW5jbHVkZV9leHBzeW1zCi0KLSMgQ29tbWFuZHMgbmVjZXNzYXJ5IGZvciBsaW5raW5nIHByb2dyYW1zIChhZ2FpbnN0IGxpYnJhcmllcykgd2l0aCB0ZW1wbGF0ZXMuCi1wcmVsaW5rX2NtZHM9JGx0X3ByZWxpbmtfY21kcwotCi0jIENvbW1hbmRzIG5lY2Vzc2FyeSBmb3IgZmluaXNoaW5nIGxpbmtpbmcgcHJvZ3JhbXMuCi1wb3N0bGlua19jbWRzPSRsdF9wb3N0bGlua19jbWRzCi0KLSMgU3BlY2lmeSBmaWxlbmFtZSBjb250YWluaW5nIGlucHV0IGZpbGVzLgotZmlsZV9saXN0X3NwZWM9JGx0X2ZpbGVfbGlzdF9zcGVjCi0KLSMgSG93IHRvIGhhcmRjb2RlIGEgc2hhcmVkIGxpYnJhcnkgcGF0aCBpbnRvIGFuIGV4ZWN1dGFibGUuCi1oYXJkY29kZV9hY3Rpb249JGhhcmRjb2RlX2FjdGlvbgotCi0jICMjIyBFTkQgTElCVE9PTCBDT05GSUcKLQotX0xUX0VPRgotCi0gIGNhc2UgJGhvc3Rfb3MgaW4KLSAgYWl4MyopCi0gICAgY2F0IDw8XF9MVF9FT0YgPj4gIiRjZmdmaWxlIgotIyBBSVggc29tZXRpbWVzIGhhcyBwcm9ibGVtcyB3aXRoIHRoZSBHQ0MgY29sbGVjdDIgcHJvZ3JhbS4gIEZvciBzb21lCi0jIHJlYXNvbiwgaWYgd2Ugc2V0IHRoZSBDT0xMRUNUX05BTUVTIGVudmlyb25tZW50IHZhcmlhYmxlLCB0aGUgcHJvYmxlbXMKLSMgdmFuaXNoIGluIGEgcHVmZiBvZiBzbW9rZS4KLWlmIHRlc3QgIlgke0NPTExFQ1RfTkFNRVMrc2V0fSIgIT0gWHNldDsgdGhlbgotICBDT0xMRUNUX05BTUVTPQotICBleHBvcnQgQ09MTEVDVF9OQU1FUwotZmkKLV9MVF9FT0YKLSAgICA7OwotICBlc2FjCi0KLQotbHRtYWluPSIkYWNfYXV4X2Rpci9sdG1haW4uc2giCi0KLQotICAjIFdlIHVzZSBzZWQgaW5zdGVhZCBvZiBjYXQgYmVjYXVzZSBiYXNoIG9uIERKR1BQIGdldHMgY29uZnVzZWQgaWYKLSAgIyBpZiBmaW5kcyBtaXhlZCBDUi9MRiBhbmQgTEYtb25seSBsaW5lcy4gIFNpbmNlIHNlZCBvcGVyYXRlcyBpbgotICAjIHRleHQgbW9kZSwgaXQgcHJvcGVybHkgY29udmVydHMgbGluZXMgdG8gQ1IvTEYuICBUaGlzIGJhc2ggcHJvYmxlbQotICAjIGlzIHJlcG9ydGVkbHkgZml4ZWQsIGJ1dCB3aHkgbm90IHJ1biBvbiBvbGQgdmVyc2lvbnMgdG9vPwotICBzZWQgJyRxJyAiJGx0bWFpbiIgPj4gIiRjZmdmaWxlIiBcCi0gICAgIHx8IChybSAtZiAiJGNmZ2ZpbGUiOyBleGl0IDEpCi0KLSAgaWYgdGVzdCB4IiR4c2lfc2hlbGwiID0geHllczsgdGhlbgotICBzZWQgLWUgJy9eZnVuY19kaXJuYW1lICgpJC8sL159ICMgZnVuY19kaXJuYW1lIC9jXAotZnVuY19kaXJuYW1lICgpXAote1wKLVwgICAgY2FzZSAkezF9IGluXAotXCAgICAgICovKikgZnVuY19kaXJuYW1lX3Jlc3VsdD0iJHsxJS8qfSR7Mn0iIDs7XAotXCAgICAgICogICkgZnVuY19kaXJuYW1lX3Jlc3VsdD0iJHszfSIgOztcCi1cICAgIGVzYWNcCi19ICMgRXh0ZW5kZWQtc2hlbGwgZnVuY19kaXJuYW1lIGltcGxlbWVudGF0aW9uJyAiJGNmZ2ZpbGUiID4gJGNmZ2ZpbGUudG1wIFwKLSAgJiYgbXYgLWYgIiRjZmdmaWxlLnRtcCIgIiRjZmdmaWxlIiBcCi0gICAgfHwgKHJtIC1mICIkY2ZnZmlsZSIgJiYgY3AgIiRjZmdmaWxlLnRtcCIgIiRjZmdmaWxlIiAmJiBybSAtZiAiJGNmZ2ZpbGUudG1wIikKLXRlc3QgMCAtZXEgJD8gfHwgX2x0X2Z1bmN0aW9uX3JlcGxhY2VfZmFpbD06Ci0KLQotICBzZWQgLWUgJy9eZnVuY19iYXNlbmFtZSAoKSQvLC9efSAjIGZ1bmNfYmFzZW5hbWUgL2NcCi1mdW5jX2Jhc2VuYW1lICgpXAote1wKLVwgICAgZnVuY19iYXNlbmFtZV9yZXN1bHQ9IiR7MSMjKi99IlwKLX0gIyBFeHRlbmRlZC1zaGVsbCBmdW5jX2Jhc2VuYW1lIGltcGxlbWVudGF0aW9uJyAiJGNmZ2ZpbGUiID4gJGNmZ2ZpbGUudG1wIFwKLSAgJiYgbXYgLWYgIiRjZmdmaWxlLnRtcCIgIiRjZmdmaWxlIiBcCi0gICAgfHwgKHJtIC1mICIkY2ZnZmlsZSIgJiYgY3AgIiRjZmdmaWxlLnRtcCIgIiRjZmdmaWxlIiAmJiBybSAtZiAiJGNmZ2ZpbGUudG1wIikKLXRlc3QgMCAtZXEgJD8gfHwgX2x0X2Z1bmN0aW9uX3JlcGxhY2VfZmFpbD06Ci0KLQotICBzZWQgLWUgJy9eZnVuY19kaXJuYW1lX2FuZF9iYXNlbmFtZSAoKSQvLC9efSAjIGZ1bmNfZGlybmFtZV9hbmRfYmFzZW5hbWUgL2NcCi1mdW5jX2Rpcm5hbWVfYW5kX2Jhc2VuYW1lICgpXAote1wKLVwgICAgY2FzZSAkezF9IGluXAotXCAgICAgICovKikgZnVuY19kaXJuYW1lX3Jlc3VsdD0iJHsxJS8qfSR7Mn0iIDs7XAotXCAgICAgICogICkgZnVuY19kaXJuYW1lX3Jlc3VsdD0iJHszfSIgOztcCi1cICAgIGVzYWNcCi1cICAgIGZ1bmNfYmFzZW5hbWVfcmVzdWx0PSIkezEjIyovfSJcCi19ICMgRXh0ZW5kZWQtc2hlbGwgZnVuY19kaXJuYW1lX2FuZF9iYXNlbmFtZSBpbXBsZW1lbnRhdGlvbicgIiRjZmdmaWxlIiA+ICRjZmdmaWxlLnRtcCBcCi0gICYmIG12IC1mICIkY2ZnZmlsZS50bXAiICIkY2ZnZmlsZSIgXAotICAgIHx8IChybSAtZiAiJGNmZ2ZpbGUiICYmIGNwICIkY2ZnZmlsZS50bXAiICIkY2ZnZmlsZSIgJiYgcm0gLWYgIiRjZmdmaWxlLnRtcCIpCi10ZXN0IDAgLWVxICQ/IHx8IF9sdF9mdW5jdGlvbl9yZXBsYWNlX2ZhaWw9OgotCi0KLSAgc2VkIC1lICcvXmZ1bmNfc3RyaXBuYW1lICgpJC8sL159ICMgZnVuY19zdHJpcG5hbWUgL2NcCi1mdW5jX3N0cmlwbmFtZSAoKVwKLXtcCi1cICAgICMgcGRrc2ggNS4yLjE0IGRvZXMgbm90IGRvICR7WCUkWX0gY29ycmVjdGx5IGlmIGJvdGggWCBhbmQgWSBhcmVcCi1cICAgICMgcG9zaXRpb25hbCBwYXJhbWV0ZXJzLCBzbyBhc3NpZ24gb25lIHRvIG9yZGluYXJ5IHBhcmFtZXRlciBmaXJzdC5cCi1cICAgIGZ1bmNfc3RyaXBuYW1lX3Jlc3VsdD0kezN9XAotXCAgICBmdW5jX3N0cmlwbmFtZV9yZXN1bHQ9JHtmdW5jX3N0cmlwbmFtZV9yZXN1bHQjIiR7MX0ifVwKLVwgICAgZnVuY19zdHJpcG5hbWVfcmVzdWx0PSR7ZnVuY19zdHJpcG5hbWVfcmVzdWx0JSIkezJ9In1cCi19ICMgRXh0ZW5kZWQtc2hlbGwgZnVuY19zdHJpcG5hbWUgaW1wbGVtZW50YXRpb24nICIkY2ZnZmlsZSIgPiAkY2ZnZmlsZS50bXAgXAotICAmJiBtdiAtZiAiJGNmZ2ZpbGUudG1wIiAiJGNmZ2ZpbGUiIFwKLSAgICB8fCAocm0gLWYgIiRjZmdmaWxlIiAmJiBjcCAiJGNmZ2ZpbGUudG1wIiAiJGNmZ2ZpbGUiICYmIHJtIC1mICIkY2ZnZmlsZS50bXAiKQotdGVzdCAwIC1lcSAkPyB8fCBfbHRfZnVuY3Rpb25fcmVwbGFjZV9mYWlsPToKLQotCi0gIHNlZCAtZSAnL15mdW5jX3NwbGl0X2xvbmdfb3B0ICgpJC8sL159ICMgZnVuY19zcGxpdF9sb25nX29wdCAvY1wKLWZ1bmNfc3BsaXRfbG9uZ19vcHQgKClcCi17XAotXCAgICBmdW5jX3NwbGl0X2xvbmdfb3B0X25hbWU9JHsxJSU9Kn1cCi1cICAgIGZ1bmNfc3BsaXRfbG9uZ19vcHRfYXJnPSR7MSMqPX1cCi19ICMgRXh0ZW5kZWQtc2hlbGwgZnVuY19zcGxpdF9sb25nX29wdCBpbXBsZW1lbnRhdGlvbicgIiRjZmdmaWxlIiA+ICRjZmdmaWxlLnRtcCBcCi0gICYmIG12IC1mICIkY2ZnZmlsZS50bXAiICIkY2ZnZmlsZSIgXAotICAgIHx8IChybSAtZiAiJGNmZ2ZpbGUiICYmIGNwICIkY2ZnZmlsZS50bXAiICIkY2ZnZmlsZSIgJiYgcm0gLWYgIiRjZmdmaWxlLnRtcCIpCi10ZXN0IDAgLWVxICQ/IHx8IF9sdF9mdW5jdGlvbl9yZXBsYWNlX2ZhaWw9OgotCi0KLSAgc2VkIC1lICcvXmZ1bmNfc3BsaXRfc2hvcnRfb3B0ICgpJC8sL159ICMgZnVuY19zcGxpdF9zaG9ydF9vcHQgL2NcCi1mdW5jX3NwbGl0X3Nob3J0X29wdCAoKVwKLXtcCi1cICAgIGZ1bmNfc3BsaXRfc2hvcnRfb3B0X2FyZz0kezEjPz99XAotXCAgICBmdW5jX3NwbGl0X3Nob3J0X29wdF9uYW1lPSR7MSUiJGZ1bmNfc3BsaXRfc2hvcnRfb3B0X2FyZyJ9XAotfSAjIEV4dGVuZGVkLXNoZWxsIGZ1bmNfc3BsaXRfc2hvcnRfb3B0IGltcGxlbWVudGF0aW9uJyAiJGNmZ2ZpbGUiID4gJGNmZ2ZpbGUudG1wIFwKLSAgJiYgbXYgLWYgIiRjZmdmaWxlLnRtcCIgIiRjZmdmaWxlIiBcCi0gICAgfHwgKHJtIC1mICIkY2ZnZmlsZSIgJiYgY3AgIiRjZmdmaWxlLnRtcCIgIiRjZmdmaWxlIiAmJiBybSAtZiAiJGNmZ2ZpbGUudG1wIikKLXRlc3QgMCAtZXEgJD8gfHwgX2x0X2Z1bmN0aW9uX3JlcGxhY2VfZmFpbD06Ci0KLQotICBzZWQgLWUgJy9eZnVuY19sbzJvICgpJC8sL159ICMgZnVuY19sbzJvIC9jXAotZnVuY19sbzJvICgpXAote1wKLVwgICAgY2FzZSAkezF9IGluXAotXCAgICAgICoubG8pIGZ1bmNfbG8yb19yZXN1bHQ9JHsxJS5sb30uJHtvYmpleHR9IDs7XAotXCAgICAgICopICAgIGZ1bmNfbG8yb19yZXN1bHQ9JHsxfSA7O1wKLVwgICAgZXNhY1wKLX0gIyBFeHRlbmRlZC1zaGVsbCBmdW5jX2xvMm8gaW1wbGVtZW50YXRpb24nICIkY2ZnZmlsZSIgPiAkY2ZnZmlsZS50bXAgXAotICAmJiBtdiAtZiAiJGNmZ2ZpbGUudG1wIiAiJGNmZ2ZpbGUiIFwKLSAgICB8fCAocm0gLWYgIiRjZmdmaWxlIiAmJiBjcCAiJGNmZ2ZpbGUudG1wIiAiJGNmZ2ZpbGUiICYmIHJtIC1mICIkY2ZnZmlsZS50bXAiKQotdGVzdCAwIC1lcSAkPyB8fCBfbHRfZnVuY3Rpb25fcmVwbGFjZV9mYWlsPToKLQotCi0gIHNlZCAtZSAnL15mdW5jX3hmb3JtICgpJC8sL159ICMgZnVuY194Zm9ybSAvY1wKLWZ1bmNfeGZvcm0gKClcCi17XAotICAgIGZ1bmNfeGZvcm1fcmVzdWx0PSR7MSUuKn0ubG9cCi19ICMgRXh0ZW5kZWQtc2hlbGwgZnVuY194Zm9ybSBpbXBsZW1lbnRhdGlvbicgIiRjZmdmaWxlIiA+ICRjZmdmaWxlLnRtcCBcCi0gICYmIG12IC1mICIkY2ZnZmlsZS50bXAiICIkY2ZnZmlsZSIgXAotICAgIHx8IChybSAtZiAiJGNmZ2ZpbGUiICYmIGNwICIkY2ZnZmlsZS50bXAiICIkY2ZnZmlsZSIgJiYgcm0gLWYgIiRjZmdmaWxlLnRtcCIpCi10ZXN0IDAgLWVxICQ/IHx8IF9sdF9mdW5jdGlvbl9yZXBsYWNlX2ZhaWw9OgotCi0KLSAgc2VkIC1lICcvXmZ1bmNfYXJpdGggKCkkLywvXn0gIyBmdW5jX2FyaXRoIC9jXAotZnVuY19hcml0aCAoKVwKLXtcCi0gICAgZnVuY19hcml0aF9yZXN1bHQ9JCgoICQqICkpXAotfSAjIEV4dGVuZGVkLXNoZWxsIGZ1bmNfYXJpdGggaW1wbGVtZW50YXRpb24nICIkY2ZnZmlsZSIgPiAkY2ZnZmlsZS50bXAgXAotICAmJiBtdiAtZiAiJGNmZ2ZpbGUudG1wIiAiJGNmZ2ZpbGUiIFwKLSAgICB8fCAocm0gLWYgIiRjZmdmaWxlIiAmJiBjcCAiJGNmZ2ZpbGUudG1wIiAiJGNmZ2ZpbGUiICYmIHJtIC1mICIkY2ZnZmlsZS50bXAiKQotdGVzdCAwIC1lcSAkPyB8fCBfbHRfZnVuY3Rpb25fcmVwbGFjZV9mYWlsPToKLQotCi0gIHNlZCAtZSAnL15mdW5jX2xlbiAoKSQvLC9efSAjIGZ1bmNfbGVuIC9jXAotZnVuY19sZW4gKClcCi17XAotICAgIGZ1bmNfbGVuX3Jlc3VsdD0keyMxfVwKLX0gIyBFeHRlbmRlZC1zaGVsbCBmdW5jX2xlbiBpbXBsZW1lbnRhdGlvbicgIiRjZmdmaWxlIiA+ICRjZmdmaWxlLnRtcCBcCi0gICYmIG12IC1mICIkY2ZnZmlsZS50bXAiICIkY2ZnZmlsZSIgXAotICAgIHx8IChybSAtZiAiJGNmZ2ZpbGUiICYmIGNwICIkY2ZnZmlsZS50bXAiICIkY2ZnZmlsZSIgJiYgcm0gLWYgIiRjZmdmaWxlLnRtcCIpCi10ZXN0IDAgLWVxICQ/IHx8IF9sdF9mdW5jdGlvbl9yZXBsYWNlX2ZhaWw9OgotCi1maQotCi1pZiB0ZXN0IHgiJGx0X3NoZWxsX2FwcGVuZCIgPSB4eWVzOyB0aGVuCi0gIHNlZCAtZSAnL15mdW5jX2FwcGVuZCAoKSQvLC9efSAjIGZ1bmNfYXBwZW5kIC9jXAotZnVuY19hcHBlbmQgKClcCi17XAotICAgIGV2YWwgIiR7MX0rPVxcJHsyfSJcCi19ICMgRXh0ZW5kZWQtc2hlbGwgZnVuY19hcHBlbmQgaW1wbGVtZW50YXRpb24nICIkY2ZnZmlsZSIgPiAkY2ZnZmlsZS50bXAgXAotICAmJiBtdiAtZiAiJGNmZ2ZpbGUudG1wIiAiJGNmZ2ZpbGUiIFwKLSAgICB8fCAocm0gLWYgIiRjZmdmaWxlIiAmJiBjcCAiJGNmZ2ZpbGUudG1wIiAiJGNmZ2ZpbGUiICYmIHJtIC1mICIkY2ZnZmlsZS50bXAiKQotdGVzdCAwIC1lcSAkPyB8fCBfbHRfZnVuY3Rpb25fcmVwbGFjZV9mYWlsPToKLQotCi0gIHNlZCAtZSAnL15mdW5jX2FwcGVuZF9xdW90ZWQgKCkkLywvXn0gIyBmdW5jX2FwcGVuZF9xdW90ZWQgL2NcCi1mdW5jX2FwcGVuZF9xdW90ZWQgKClcCi17XAotXCAgICBmdW5jX3F1b3RlX2Zvcl9ldmFsICIkezJ9IlwKLVwgICAgZXZhbCAiJHsxfSs9XFxcXCBcXCRmdW5jX3F1b3RlX2Zvcl9ldmFsX3Jlc3VsdCJcCi19ICMgRXh0ZW5kZWQtc2hlbGwgZnVuY19hcHBlbmRfcXVvdGVkIGltcGxlbWVudGF0aW9uJyAiJGNmZ2ZpbGUiID4gJGNmZ2ZpbGUudG1wIFwKLSAgJiYgbXYgLWYgIiRjZmdmaWxlLnRtcCIgIiRjZmdmaWxlIiBcCi0gICAgfHwgKHJtIC1mICIkY2ZnZmlsZSIgJiYgY3AgIiRjZmdmaWxlLnRtcCIgIiRjZmdmaWxlIiAmJiBybSAtZiAiJGNmZ2ZpbGUudG1wIikKLXRlc3QgMCAtZXEgJD8gfHwgX2x0X2Z1bmN0aW9uX3JlcGxhY2VfZmFpbD06Ci0KLQotICAjIFNhdmUgYSBgZnVuY19hcHBlbmQnIGZ1bmN0aW9uIGNhbGwgd2hlcmUgcG9zc2libGUgYnkgZGlyZWN0IHVzZSBvZiAnKz0nCi0gIHNlZCAtZSAncyVmdW5jX2FwcGVuZCBcKFthLXpBLVpfXVx7MSxcfVwpICIlXDErPSIlZycgJGNmZ2ZpbGUgPiAkY2ZnZmlsZS50bXAgXAotICAgICYmIG12IC1mICIkY2ZnZmlsZS50bXAiICIkY2ZnZmlsZSIgXAotICAgICAgfHwgKHJtIC1mICIkY2ZnZmlsZSIgJiYgY3AgIiRjZmdmaWxlLnRtcCIgIiRjZmdmaWxlIiAmJiBybSAtZiAiJGNmZ2ZpbGUudG1wIikKLSAgdGVzdCAwIC1lcSAkPyB8fCBfbHRfZnVuY3Rpb25fcmVwbGFjZV9mYWlsPToKLWVsc2UKLSAgIyBTYXZlIGEgYGZ1bmNfYXBwZW5kJyBmdW5jdGlvbiBjYWxsIGV2ZW4gd2hlbiAnKz0nIGlzIG5vdCBhdmFpbGFibGUKLSAgc2VkIC1lICdzJWZ1bmNfYXBwZW5kIFwoW2EtekEtWl9dXHsxLFx9XCkgIiVcMT0iJFwxJWcnICRjZmdmaWxlID4gJGNmZ2ZpbGUudG1wIFwKLSAgICAmJiBtdiAtZiAiJGNmZ2ZpbGUudG1wIiAiJGNmZ2ZpbGUiIFwKLSAgICAgIHx8IChybSAtZiAiJGNmZ2ZpbGUiICYmIGNwICIkY2ZnZmlsZS50bXAiICIkY2ZnZmlsZSIgJiYgcm0gLWYgIiRjZmdmaWxlLnRtcCIpCi0gIHRlc3QgMCAtZXEgJD8gfHwgX2x0X2Z1bmN0aW9uX3JlcGxhY2VfZmFpbD06Ci1maQotCi1pZiB0ZXN0IHgiJF9sdF9mdW5jdGlvbl9yZXBsYWNlX2ZhaWwiID0geCI6IjsgdGhlbgotICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IFdBUk5JTkc6IFVuYWJsZSB0byBzdWJzdGl0dXRlIGV4dGVuZGVkIHNoZWxsIGZ1bmN0aW9ucyBpbiAkb2ZpbGUiID4mNQotJGFzX2VjaG8gIiRhc19tZTogV0FSTklORzogVW5hYmxlIHRvIHN1YnN0aXR1dGUgZXh0ZW5kZWQgc2hlbGwgZnVuY3Rpb25zIGluICRvZmlsZSIgPiYyO30KLWZpCi0KLQotICAgbXYgLWYgIiRjZmdmaWxlIiAiJG9maWxlIiB8fAotICAgIChybSAtZiAiJG9maWxlIiAmJiBjcCAiJGNmZ2ZpbGUiICIkb2ZpbGUiICYmIHJtIC1mICIkY2ZnZmlsZSIpCi0gIGNobW9kICt4ICIkb2ZpbGUiCi0KLSA7OwotCi0gIGVzYWMKLWRvbmUgIyBmb3IgYWNfdGFnCi0KLQotYXNfZm5fZXhpdCAwCi1fQUNFT0YKLWFjX2NsZWFuX2ZpbGVzPSRhY19jbGVhbl9maWxlc19zYXZlCi0KLXRlc3QgJGFjX3dyaXRlX2ZhaWwgPSAwIHx8Ci0gIGFzX2ZuX2Vycm9yICQ/ICJ3cml0ZSBmYWlsdXJlIGNyZWF0aW5nICRDT05GSUdfU1RBVFVTIiAiJExJTkVOTyIgNQotCi0KLSMgY29uZmlndXJlIGlzIHdyaXRpbmcgdG8gY29uZmlnLmxvZywgYW5kIHRoZW4gY2FsbHMgY29uZmlnLnN0YXR1cy4KLSMgY29uZmlnLnN0YXR1cyBkb2VzIGl0cyBvd24gcmVkaXJlY3Rpb24sIGFwcGVuZGluZyB0byBjb25maWcubG9nLgotIyBVbmZvcnR1bmF0ZWx5LCBvbiBET1MgdGhpcyBmYWlscywgYXMgY29uZmlnLmxvZyBpcyBzdGlsbCBrZXB0IG9wZW4KLSMgYnkgY29uZmlndXJlLCBzbyBjb25maWcuc3RhdHVzIHdvbid0IGJlIGFibGUgdG8gd3JpdGUgdG8gaXQ7IGl0cwotIyBvdXRwdXQgaXMgc2ltcGx5IGRpc2NhcmRlZC4gIFNvIHdlIGV4ZWMgdGhlIEZEIHRvIC9kZXYvbnVsbCwKLSMgZWZmZWN0aXZlbHkgY2xvc2luZyBjb25maWcubG9nLCBzbyBpdCBjYW4gYmUgcHJvcGVybHkgKHJlKW9wZW5lZCBhbmQKLSMgYXBwZW5kZWQgdG8gYnkgY29uZmlnLnN0YXR1cy4gIFdoZW4gY29taW5nIGJhY2sgdG8gY29uZmlndXJlLCB3ZQotIyBuZWVkIHRvIG1ha2UgdGhlIEZEIGF2YWlsYWJsZSBhZ2Fpbi4KLWlmIHRlc3QgIiRub19jcmVhdGUiICE9IHllczsgdGhlbgotICBhY19jc19zdWNjZXNzPToKLSAgYWNfY29uZmlnX3N0YXR1c19hcmdzPQotICB0ZXN0ICIkc2lsZW50IiA9IHllcyAmJgotICAgIGFjX2NvbmZpZ19zdGF0dXNfYXJncz0iJGFjX2NvbmZpZ19zdGF0dXNfYXJncyAtLXF1aWV0IgotICBleGVjIDU+L2Rldi9udWxsCi0gICRTSEVMTCAkQ09ORklHX1NUQVRVUyAkYWNfY29uZmlnX3N0YXR1c19hcmdzIHx8IGFjX2NzX3N1Y2Nlc3M9ZmFsc2UKLSAgZXhlYyA1Pj5jb25maWcubG9nCi0gICMgVXNlIHx8LCBub3QgJiYsIHRvIGF2b2lkIGV4aXRpbmcgZnJvbSB0aGUgaWYgd2l0aCAkPyA9IDEsIHdoaWNoCi0gICMgd291bGQgbWFrZSBjb25maWd1cmUgZmFpbCBpZiB0aGlzIGlzIHRoZSBsYXN0IGluc3RydWN0aW9uLgotICAkYWNfY3Nfc3VjY2VzcyB8fCBhc19mbl9leGl0IDEKLWZpCi1pZiB0ZXN0IC1uICIkYWNfdW5yZWNvZ25pemVkX29wdHMiICYmIHRlc3QgIiRlbmFibGVfb3B0aW9uX2NoZWNraW5nIiAhPSBubzsgdGhlbgotICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IFdBUk5JTkc6IHVucmVjb2duaXplZCBvcHRpb25zOiAkYWNfdW5yZWNvZ25pemVkX29wdHMiID4mNQotJGFzX2VjaG8gIiRhc19tZTogV0FSTklORzogdW5yZWNvZ25pemVkIG9wdGlvbnM6ICRhY191bnJlY29nbml6ZWRfb3B0cyIgPiYyO30KLWZpCi0KZGlmZiAtLWdpdCBhL2NvbmZpZ3VyZS5hYyBiL2NvbmZpZ3VyZS5hYwppbmRleCBlMmMzNzc0Li5hYzU0OGEzIDEwMDY0NAotLS0gYS9jb25maWd1cmUuYWMKKysrIGIvY29uZmlndXJlLmFjCkBAIC0xLDMxOCArMSwyNjcgQEAKLSMgSUpHIGF1dG8tY29uZmlndXJhdGlvbiBzb3VyY2UgZmlsZS4KKyMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0qLSBBdXRvY29uZiAtKi0KICMgUHJvY2VzcyB0aGlzIGZpbGUgd2l0aCBhdXRvY29uZiB0byBwcm9kdWNlIGEgY29uZmlndXJlIHNjcmlwdC4KIAotIwotIyBDb25maWd1cmUgc2NyaXB0IGZvciBJSkcgbGlianBlZwotIworQUNfUFJFUkVRKFsyLjU2XSkKK0FDX0lOSVQoW2xpYmpwZWctdHVyYm9dLCBbMS4xLjFdKQorQlVJTEQ9YGRhdGUgKyVZJW0lZGAKIAotQUNfSU5JVChbbGlianBlZ10sIFs4LjMuMF0pCitBTV9JTklUX0FVVE9NQUtFKFstV2FsbCBmb3JlaWduIGRpc3QtYnppcDJdKQorQUNfUFJFRklYX0RFRkFVTFQoL29wdC9saWJqcGVnLXR1cmJvKQogCi0jIERpcmVjdG9yeSB3aGVyZSBhdXRvdG9vbHMgaGVscGVyIHNjcmlwdHMgbGl2ZXMuCi1BQ19DT05GSUdfQVVYX0RJUihbLl0pCisjIEFsd2F5cyBidWlsZCB3aXRoIHByb3RvdHlwZXMKK0FDX0RFRklORShbSEFWRV9QUk9UT1RZUEVTXSwgMSwgW0RlZmluZSBpZiB5b3VyIGNvbXBpbGVyIHN1cHBvcnRzIHByb3RvdHlwZXNdKQogCi0jIEdlbmVyYXRlIGNvbmZpZ3VyYXRpb24gaGVhZGVycy4KLUFDX0NPTkZJR19IRUFERVJTKFtqY29uZmlnLmg6amNvbmZpZy5jZmddKQotCi0jIEhhY2s6IGRpc2FibGUgYXV0b2hlYWRlciBzbyB0aGF0IGl0IGRvZXNuJ3Qgb3ZlcndyaXRlIG91ciBjZmcgdGVtcGxhdGUuCi1BVVRPSEVBREVSPSJlY2hvIGF1dG9oZWFkZXIgaWdub3JlZCIKLQotIyBDaGVjayBzeXN0ZW0gdHlwZQotQUNfQ0FOT05JQ0FMX1RBUkdFVAotCi0jIEluaXRpYWxpemUgQXV0b21ha2UKLSMgRG9uJ3QgcmVxdWlyZSBhbGwgdGhlIEdOVSBtYW5kYXRlZCBmaWxlcwotQU1fSU5JVF9BVVRPTUFLRShbLVdhbGwgLVdlcnJvciBhbnNpMmtuciBuby1kaXN0IGZvcmVpZ25dKQotCi0jIE1ha2UgLS1lbmFibGUtc2lsZW50LXJ1bGVzIHRoZSBkZWZhdWx0LgotIyBUbyBnZXQgdmVyYm9zZSBidWlsZCBvdXRwdXQgeW91IG1heSBjb25maWd1cmUKLSMgd2l0aCAtLWRpc2FibGUtc2lsZW50LXJ1bGVzIG9yIHVzZSAibWFrZSBWPTEiLgotQU1fU0lMRU5UX1JVTEVTKFt5ZXNdKQotCi0jIFRoaXMgaXMgcmVxdWlyZWQgd2hlbiB1c2luZyB0aGUgZGUtQU5TSS1maWNhdGlvbiBmZWF0dXJlLgotQU1fQ19QUk9UT1RZUEVTCi0KLSMgQWRkIGNvbmZpZ3VyZSBvcHRpb24gLS1lbmFibGUtbWFpbnRhaW5lci1tb2RlIHdoaWNoIGVuYWJsZXMKLSMgZGVwZW5kZW5jeSBjaGVja2luZyBhbmQgZ2VuZXJhdGlvbiB1c2VmdWwgdG8gcGFja2FnZSBtYWludGFpbmVycy4KLSMgVGhpcyBpcyBtYWRlIGFuIG9wdGlvbiB0byBhdm9pZCBjb25mdXNpbmcgZW5kIHVzZXJzLgotQU1fTUFJTlRBSU5FUl9NT0RFCi0KLSMgQ2hlY2sgZm9yIHByb2dyYW1zCi1BQ19QUk9HX0NDCi1BQ19QUk9HX0NDX1NUREMKKyMgQ2hlY2tzIGZvciBwcm9ncmFtcy4KK1NBVkVEX0NGTEFHUz0ke0NGTEFHU30KK1NBVkVEX0NQUEZMQUdTPSR7Q1BQRkxBR1N9CiBBQ19QUk9HX0NQUAorQUNfUFJPR19DQwogQUNfUFJPR19JTlNUQUxMCi1BQ19QUk9HX01BS0VfU0VUCitBQ19QUk9HX0xJQlRPT0wKIEFDX1BST0dfTE5fUwogCi0jIENoZWNrIGlmIExEIHN1cHBvcnRzIGxpbmtlciBzY3JpcHRzLAotIyBhbmQgZGVmaW5lIGF1dG9tYWtlIGNvbmRpdGlvbmFsIEhBVkVfTERfVkVSU0lPTl9TQ1JJUFQgaWYgc28uCi1BQ19BUkdfRU5BQkxFKFtsZC12ZXJzaW9uLXNjcmlwdF0sCi0gIEFTX0hFTFBfU1RSSU5HKFstLWVuYWJsZS1sZC12ZXJzaW9uLXNjcmlwdF0sCi0gICAgW2VuYWJsZSBsaW5rZXIgdmVyc2lvbiBzY3JpcHQgKGRlZmF1bHQgaXMgZW5hYmxlZCB3aGVuIHBvc3NpYmxlKV0pLAotICAgIFtoYXZlX2xkX3ZlcnNpb25fc2NyaXB0PSRlbmFibGV2YWxdLCBbXSkKLWlmIHRlc3QgLXogIiRoYXZlX2xkX3ZlcnNpb25fc2NyaXB0IjsgdGhlbgotICBBQ19NU0dfQ0hFQ0tJTkcoW2lmIExEIC1XbCwtLXZlcnNpb24tc2NyaXB0IHdvcmtzXSkKLSAgc2F2ZV9MREZMQUdTPSIkTERGTEFHUyIKLSAgTERGTEFHUz0iJExERkxBR1MgLVdsLC0tdmVyc2lvbi1zY3JpcHQ9Y29uZnRlc3QubWFwIgotICBjYXQgPiBjb25mdGVzdC5tYXAgPDxFT0YKLVZFUlNfMSB7Ci0gICAgICAgIGdsb2JhbDogc3ltOwotfTsKLQotVkVSU18yIHsKLSAgICAgICAgZ2xvYmFsOiBzeW07Ci19IFZFUlNfMTsKLUVPRgotICBBQ19MSU5LX0lGRUxTRShbQUNfTEFOR19QUk9HUkFNKFtdLCBbXSldLAotICAgICAgICAgICAgICAgICBbaGF2ZV9sZF92ZXJzaW9uX3NjcmlwdD15ZXNdLCBbaGF2ZV9sZF92ZXJzaW9uX3NjcmlwdD1ub10pCi0gIHJtIC1mIGNvbmZ0ZXN0Lm1hcAotICBMREZMQUdTPSIkc2F2ZV9MREZMQUdTIgotICBBQ19NU0dfUkVTVUxUKCRoYXZlX2xkX3ZlcnNpb25fc2NyaXB0KQotZmkKLUFNX0NPTkRJVElPTkFMKEhBVkVfTERfVkVSU0lPTl9TQ1JJUFQsIHRlc3QgIiRoYXZlX2xkX3ZlcnNpb25fc2NyaXB0IiA9ICJ5ZXMiKQotCi0jIFNlZSBpZiBjb21waWxlciBzdXBwb3J0cyBwcm90b3R5cGVzLgotQUNfTVNHX0NIRUNLSU5HKGZvciBmdW5jdGlvbiBwcm90b3R5cGVzKQotQUNfQ0FDSEVfVkFMKGlqZ19jdl9oYXZlX3Byb3RvdHlwZXMsCi1bQUNfVFJZX0NPTVBJTEUoWwotaW50IHRlc3RmdW5jdGlvbiAoaW50IGFyZzEsIGludCAqIGFyZzIpOyAvKiBjaGVjayBwcm90b3R5cGVzICovCi1zdHJ1Y3QgbWV0aG9kc19zdHJ1Y3QgewkJLyogY2hlY2sgbWV0aG9kLXBvaW50ZXIgZGVjbGFyYXRpb25zICovCi0gIGludCAoKmVycm9yX2V4aXQpIChjaGFyICptc2d0ZXh0KTsKLSAgaW50ICgqdHJhY2VfbWVzc2FnZSkgKGNoYXIgKm1zZ3RleHQpOwotICBpbnQgKCphbm90aGVyX21ldGhvZCkgKHZvaWQpOwotfTsKLWludCB0ZXN0ZnVuY3Rpb24gKGludCBhcmcxLCBpbnQgKiBhcmcyKSAvKiBjaGVjayBkZWZpbml0aW9ucyAqLwoteyByZXR1cm4gYXJnMlthcmcxXTsgfQotaW50IHRlc3QyZnVuY3Rpb24gKHZvaWQpCS8qIGNoZWNrIHZvaWQgYXJnIGxpc3QgKi8KLXsgcmV0dXJuIDA7IH0KLV0sIFsgXSwgaWpnX2N2X2hhdmVfcHJvdG90eXBlcz15ZXMsIGlqZ19jdl9oYXZlX3Byb3RvdHlwZXM9bm8pXSkKLUFDX01TR19SRVNVTFQoJGlqZ19jdl9oYXZlX3Byb3RvdHlwZXMpCi1pZiB0ZXN0ICRpamdfY3ZfaGF2ZV9wcm90b3R5cGVzID0geWVzOyB0aGVuCi0gIEFDX0RFRklORShbSEFWRV9QUk9UT1RZUEVTXSxbMV0sW0NvbXBpbGVyIHN1cHBvcnRzIGZ1bmN0aW9uIHByb3RvdHlwZXMuXSkKLWVsc2UKLSAgZWNobyBZb3VyIGNvbXBpbGVyIGRvZXMgbm90IHNlZW0gdG8ga25vdyBhYm91dCBmdW5jdGlvbiBwcm90b3R5cGVzLgotICBlY2hvIFBlcmhhcHMgaXQgbmVlZHMgYSBzcGVjaWFsIHN3aXRjaCB0byBlbmFibGUgQU5TSSBDIG1vZGUuCi0gIGVjaG8gSWYgc28sIHdlIHJlY29tbWVuZCBydW5uaW5nIGNvbmZpZ3VyZSBsaWtlIHRoaXM6Ci0gIGVjaG8gIiAgIC4vY29uZmlndXJlICBDQz0nY2MgLXN3aXRjaCciCi0gIGVjaG8gd2hlcmUgLXN3aXRjaCBpcyB0aGUgcHJvcGVyIHN3aXRjaC4KLWZpCi0KLSMgQ2hlY2sgaGVhZGVyIGZpbGVzCi1BQ19DSEVDS19IRUFERVJTKHN0ZGRlZi5oIHN0ZGxpYi5oIGxvY2FsZS5oKQotQUNfQ0hFQ0tfSEVBREVSKHN0cmluZy5oLCAsIEFDX0RFRklORShbTkVFRF9CU0RfU1RSSU5HU10sWzFdLFtDb21waWxlciBoYXMgPHN0cmluZ3MuaD4gcmF0aGVyIHRoYW4gc3RhbmRhcmQgPHN0cmluZy5oPi5dKSkKLQotIyBTZWUgd2hldGhlciB0eXBlIHNpemVfdCBpcyBkZWZpbmVkIGluIGFueSBBTlNJLXN0YW5kYXJkIHBsYWNlczsKLSMgaWYgbm90LCBwZXJoYXBzIGl0IGlzIGRlZmluZWQgaW4gPHN5cy90eXBlcy5oPi4KLUFDX01TR19DSEVDS0lORyhmb3Igc2l6ZV90KQotQUNfVFJZX0NPTVBJTEUoWwotI2lmZGVmIEhBVkVfU1REREVGX0gKLSNpbmNsdWRlIDxzdGRkZWYuaD4KLSNlbmRpZgotI2lmZGVmIEhBVkVfU1RETElCX0gKLSNpbmNsdWRlIDxzdGRsaWIuaD4KLSNlbmRpZgotI2luY2x1ZGUgPHN0ZGlvLmg+Ci0jaWZkZWYgTkVFRF9CU0RfU1RSSU5HUwotI2luY2x1ZGUgPHN0cmluZ3MuaD4KLSNlbHNlCi0jaW5jbHVkZSA8c3RyaW5nLmg+Ci0jZW5kaWYKLXR5cGVkZWYgc2l6ZV90IG15X3NpemVfdDsKLV0sIFsgbXlfc2l6ZV90IGZvb3ZhcjsgXSwgaWpnX3NpemVfdF9vaz15ZXMsCi1baWpnX3NpemVfdF9vaz0ibm90IEFOU0ksIHBlcmhhcHMgaXQgaXMgaW4gc3lzL3R5cGVzLmgiXSkKLUFDX01TR19SRVNVTFQoJGlqZ19zaXplX3Rfb2spCi1pZiB0ZXN0ICIkaWpnX3NpemVfdF9vayIgIT0geWVzOyB0aGVuCi1BQ19DSEVDS19IRUFERVIoc3lzL3R5cGVzLmgsIFtBQ19ERUZJTkUoW05FRURfU1lTX1RZUEVTX0hdLFsxXSxbTmVlZCB0byBpbmNsdWRlIDxzeXMvdHlwZXMuaD4gaW4gb3JkZXIgdG8gb2J0YWluIHNpemVfdC5dKQotQUNfRUdSRVBfQ1BQKHNpemVfdCwgWyNpbmNsdWRlIDxzeXMvdHlwZXMuaD5dLAotW2lqZ19zaXplX3Rfb2s9InNpemVfdCBpcyBpbiBzeXMvdHlwZXMuaCJdLCBpamdfc2l6ZV90X29rPW5vKV0sCi1pamdfc2l6ZV90X29rPW5vKQotQUNfTVNHX1JFU1VMVCgkaWpnX3NpemVfdF9vaykKLWlmIHRlc3QgIiRpamdfc2l6ZV90X29rIiA9IG5vOyB0aGVuCi0gIGVjaG8gVHlwZSBzaXplX3QgaXMgbm90IGRlZmluZWQgaW4gYW55IG9mIHRoZSB1c3VhbCBwbGFjZXMuCi0gIGVjaG8gVHJ5IHB1dHRpbmcgJyJ0eXBlZGVmIHVuc2lnbmVkIGludCBzaXplX3Q7IicgaW4gamNvbmZpZy5oLgotZmkKLWZpCi0KLSMgQ2hlY2sgY29tcGlsZXIgY2hhcmFjdGVyaXN0aWNzCi1BQ19NU0dfQ0hFQ0tJTkcoZm9yIHR5cGUgdW5zaWduZWQgY2hhcikKLUFDX1RSWV9DT01QSUxFKCwgWyB1bnNpZ25lZCBjaGFyIHVuX2NoYXI7IF0sCi1bQUNfTVNHX1JFU1VMVCh5ZXMpCi1BQ19ERUZJTkUoW0hBVkVfVU5TSUdORURfQ0hBUl0sWzFdLFtDb21waWxlciBzdXBwb3J0cyAndW5zaWduZWQgY2hhcicuXSldLCBBQ19NU0dfUkVTVUxUKG5vKSkKLWRubAotQUNfTVNHX0NIRUNLSU5HKGZvciB0eXBlIHVuc2lnbmVkIHNob3J0KQotQUNfVFJZX0NPTVBJTEUoLCBbIHVuc2lnbmVkIHNob3J0IHVuX3Nob3J0OyBdLAotW0FDX01TR19SRVNVTFQoeWVzKQotQUNfREVGSU5FKFtIQVZFX1VOU0lHTkVEX1NIT1JUXSxbMV0sW0NvbXBpbGVyIHN1cHBvcnRzICd1bnNpZ25lZCBzaG9ydCcuXSldLCBBQ19NU0dfUkVTVUxUKG5vKSkKLWRubAotQUNfTVNHX0NIRUNLSU5HKGZvciB0eXBlIHZvaWQpCi1BQ19UUllfQ09NUElMRShbCi0vKiBDYXV0aW9uOiBhIEMrKyBjb21waWxlciB3aWxsIGluc2lzdCBvbiB2YWxpZCBwcm90b3R5cGVzICovCi10eXBlZGVmIHZvaWQgKiB2b2lkX3B0cjsJLyogY2hlY2sgdm9pZCAqICovCi0jaWZkZWYgSEFWRV9QUk9UT1RZUEVTCQkvKiBjaGVjayBwdHIgdG8gZnVuY3Rpb24gcmV0dXJuaW5nIHZvaWQgKi8KLXR5cGVkZWYgdm9pZCAoKnZvaWRfZnVuYykgKGludCBhLCBpbnQgYik7Ci0jZWxzZQotdHlwZWRlZiB2b2lkICgqdm9pZF9mdW5jKSAoKTsKLSNlbmRpZgotCi0jaWZkZWYgSEFWRV9QUk9UT1RZUEVTCQkvKiBjaGVjayB2b2lkIGZ1bmN0aW9uIHJlc3VsdCAqLwotdm9pZCB0ZXN0M2Z1bmN0aW9uICh2b2lkX3B0ciBhcmcxLCB2b2lkX2Z1bmMgYXJnMikKLSNlbHNlCi12b2lkIHRlc3QzZnVuY3Rpb24gKGFyZzEsIGFyZzIpCi0gICAgIHZvaWRfcHRyIGFyZzE7Ci0gICAgIHZvaWRfZnVuYyBhcmcyOwotI2VuZGlmCi17Ci0gIGNoYXIgKiBsb2NwdHIgPSAoY2hhciAqKSBhcmcxOyAvKiBjaGVjayBjYXN0aW5nIHRvIGFuZCBmcm9tIHZvaWQgKiAqLwotICBhcmcxID0gKHZvaWQgKikgbG9jcHRyOwotICAoKmFyZzIpICgxLCAyKTsJCS8qIGNoZWNrIGNhbGwgb2YgZmNuIHJldHVybmluZyB2b2lkICovCi19Ci1dLCBbIF0sIEFDX01TR19SRVNVTFQoeWVzKSwgW0FDX01TR19SRVNVTFQobm8pCi1BQ19ERUZJTkUoW3ZvaWRdLFtjaGFyXSxbRGVmaW5lICd2b2lkJyBhcyAnY2hhcicgZm9yIGFyY2hhaWMgY29tcGlsZXJzIHRoYXQgZG9uJ3QgdW5kZXJzdGFuZCBpdC5dKV0pCi1BQ19DX0NPTlNUCi0KLSMgQ2hlY2sgZm9yIG5vbi1icm9rZW4gaW5saW5lIHVuZGVyIHZhcmlvdXMgc3BlbGxpbmdzCi1BQ19NU0dfQ0hFQ0tJTkcoZm9yIGlubGluZSkKLWlqZ19jdl9pbmxpbmU9IiIKLUFDX1RSWV9DT01QSUxFKCwgW30gX19pbmxpbmVfXyBpbnQgZm9vKCkgeyByZXR1cm4gMDsgfQotaW50IGJhcigpIHsgcmV0dXJuIGZvbygpO10sIGlqZ19jdl9pbmxpbmU9Il9faW5saW5lX18iLAotQUNfVFJZX0NPTVBJTEUoLCBbfSBfX2lubGluZSBpbnQgZm9vKCkgeyByZXR1cm4gMDsgfQotaW50IGJhcigpIHsgcmV0dXJuIGZvbygpO10sIGlqZ19jdl9pbmxpbmU9Il9faW5saW5lIiwKLUFDX1RSWV9DT01QSUxFKCwgW30gaW5saW5lIGludCBmb28oKSB7IHJldHVybiAwOyB9Ci1pbnQgYmFyKCkgeyByZXR1cm4gZm9vKCk7XSwgaWpnX2N2X2lubGluZT0iaW5saW5lIikpKQotQUNfTVNHX1JFU1VMVCgkaWpnX2N2X2lubGluZSkKLUFDX0RFRklORV9VTlFVT1RFRChbSU5MSU5FXSxbJGlqZ19jdl9pbmxpbmVdLFtIb3cgdG8gb2J0YWluIGZ1bmN0aW9uIGlubGluaW5nLl0pCi0KLSMgV2UgY2Fubm90IGNoZWNrIGZvciBib2d1cyB3YXJuaW5ncywgYnV0IGF0IGxlYXN0IHdlIGNhbiBjaGVjayBmb3IgZXJyb3JzCi1BQ19NU0dfQ0hFQ0tJTkcoZm9yIGJyb2tlbiBpbmNvbXBsZXRlIHR5cGVzKQorIyBDaGVjayB3aGV0aGVyIGNvbXBpbGVyIHN1cHBvcnRzIHBvaW50ZXJzIHRvIHVuZGVmaW5lZCBzdHJ1Y3R1cmVzCitBQ19NU0dfQ0hFQ0tJTkcod2hldGhlciBjb21waWxlciBzdXBwb3J0cyBwb2ludGVycyB0byB1bmRlZmluZWQgc3RydWN0dXJlcykKIEFDX1RSWV9DT01QSUxFKFsgdHlwZWRlZiBzdHJ1Y3QgdW5kZWZpbmVkX3N0cnVjdHVyZSAqIHVuZGVmX3N0cnVjdF9wdHI7IF0sICwKLUFDX01TR19SRVNVTFQob2spLAotW0FDX01TR19SRVNVTFQoYnJva2VuKQotQUNfREVGSU5FKFtJTkNPTVBMRVRFX1RZUEVTX0JST0tFTl0sWzFdLFtDb21waWxlciBkb2VzIG5vdCBzdXBwb3J0IHBvaW50ZXJzIHRvIHVuc3BlY2lmaWVkIHN0cnVjdHVyZXMuXSldKQorQUNfTVNHX1JFU1VMVCh5ZXMpLAorW0FDX01TR19SRVNVTFQobm8pCitBQ19ERUZJTkUoW0lOQ09NUExFVEVfVFlQRVNfQlJPS0VOXSxbMV0sW0NvbXBpbGVyIGRvZXMgbm90IHN1cHBvcnQgcG9pbnRlcnMgdG8gdW5kZWZpbmVkIHN0cnVjdHVyZXMuXSldKQogCi0jIFRlc3Qgd2hldGhlciBnbG9iYWwgbmFtZXMgYXJlIHVuaXF1ZSB0byBhdCBsZWFzdCAxNSBjaGFycwotQUNfTVNHX0NIRUNLSU5HKGZvciBzaG9ydCBleHRlcm5hbCBuYW1lcykKLUFDX1RSWV9MSU5LKFsKLWludCBwb3NzaWJseV9kdXBsaWNhdGVfZnVuY3Rpb24gKCkgeyByZXR1cm4gMDsgfQotaW50IHBvc3NpYmx5X2R1cGxpX2Z1bmN0aW9uICgpIHsgcmV0dXJuIDE7IH0KLV0sIFsgXSwgQUNfTVNHX1JFU1VMVChvayksIFtBQ19NU0dfUkVTVUxUKHNob3J0KQotQUNfREVGSU5FKFtORUVEX1NIT1JUX0VYVEVSTkFMX05BTUVTXSxbMV0sW0xpbmtlciByZXF1aXJlcyB0aGF0IGdsb2JhbCBuYW1lcyBiZSB1bmlxdWUgaW4gZmlyc3QgMTUgY2hhcmFjdGVycy5dKV0pCi0KLSMgUnVuLXRpbWUgY2hlY2tzCi1BQ19NU0dfQ0hFQ0tJTkcodG8gc2VlIGlmIGNoYXIgaXMgc2lnbmVkKQotQUNfVFJZX1JVTihbCi0jaWZkZWYgSEFWRV9QUk9UT1RZUEVTCi1pbnQgaXNfY2hhcl9zaWduZWQgKGludCBhcmcpCi0jZWxzZQotaW50IGlzX2NoYXJfc2lnbmVkIChhcmcpCi0gICAgIGludCBhcmc7Ci0jZW5kaWYKLXsKLSAgaWYgKGFyZyA9PSAxODkpIHsJCS8qIGV4cGVjdGVkIHJlc3VsdCBmb3IgdW5zaWduZWQgY2hhciAqLwotICAgIHJldHVybiAwOwkJCS8qIHR5cGUgY2hhciBpcyB1bnNpZ25lZCAqLwotICB9Ci0gIGVsc2UgaWYgKGFyZyAhPSAtNjcpIHsJLyogZXhwZWN0ZWQgcmVzdWx0IGZvciBzaWduZWQgY2hhciAqLwotICAgIHByaW50ZigiSG1tLCBpdCBzZWVtcyAnY2hhcicgaXMgbm90IGVpZ2h0IGJpdHMgd2lkZSBvbiB5b3VyIG1hY2hpbmUuXG4iKTsKLSAgICBwcmludGYoIkkgZmVhciB0aGUgSlBFRyBzb2Z0d2FyZSB3aWxsIG5vdCB3b3JrIGF0IGFsbC5cblxuIik7Ci0gIH0KLSAgcmV0dXJuIDE7CQkJLyogYXNzdW1lIGNoYXIgaXMgc2lnbmVkIG90aGVyd2lzZSAqLwotfQotY2hhciBzaWduZWRfY2hhcl9jaGVjayA9IChjaGFyKSAoLTY3KTsKLWludCBtYWluKCkgewotICBleGl0KGlzX2NoYXJfc2lnbmVkKChpbnQpIHNpZ25lZF9jaGFyX2NoZWNrKSk7Ci19XSwgW0FDX01TR19SRVNVTFQobm8pCi1BQ19ERUZJTkUoW0NIQVJfSVNfVU5TSUdORURdLFsxXSxbQ2hhcmFjdGVycyBhcmUgdW5zaWduZWRdKV0sIEFDX01TR19SRVNVTFQoeWVzKSwKLVtlY2hvIEFzc3VtaW5nIHRoYXQgY2hhciBpcyBzaWduZWQgb24gdGFyZ2V0IG1hY2hpbmUuCi1lY2hvIElmIGl0IGlzIHVuc2lnbmVkLCB0aGlzIHdpbGwgYmUgYSBsaXR0bGUgYml0IGluZWZmaWNpZW50LgotXSkKLWRubAotQUNfTVNHX0NIRUNLSU5HKHRvIHNlZSBpZiByaWdodCBzaGlmdCBpcyBzaWduZWQpCi1BQ19UUllfUlVOKFsKLSNpZmRlZiBIQVZFX1BST1RPVFlQRVMKLWludCBpc19zaGlmdGluZ19zaWduZWQgKGxvbmcgYXJnKQotI2Vsc2UKLWludCBpc19zaGlmdGluZ19zaWduZWQgKGFyZykKLSAgICAgbG9uZyBhcmc7Ci0jZW5kaWYKLS8qIFNlZSB3aGV0aGVyIHJpZ2h0LXNoaWZ0IG9uIGEgbG9uZyBpcyBzaWduZWQgb3Igbm90LiAqLwotewotICBsb25nIHJlcyA9IGFyZyA+PiA0OwotCi0gIGlmIChyZXMgPT0gLTB4N0Y3RTgwQ0wpIHsJLyogZXhwZWN0ZWQgcmVzdWx0IGZvciBzaWduZWQgc2hpZnQgKi8KLSAgICByZXR1cm4gMTsJCQkvKiByaWdodCBzaGlmdCBpcyBzaWduZWQgKi8KLSAgfQotICAvKiBzZWUgaWYgdW5zaWduZWQtc2hpZnQgaGFjayB3aWxsIGZpeCBpdC4gKi8KLSAgLyogd2UgY2FuJ3QganVzdCB0ZXN0IGV4YWN0IHZhbHVlIHNpbmNlIGl0IGRlcGVuZHMgb24gd2lkdGggb2YgbG9uZy4uLiAqLwotICByZXMgfD0gKH4wTCkgPDwgKDMyLTQpOwotICBpZiAocmVzID09IC0weDdGN0U4MENMKSB7CS8qIGV4cGVjdGVkIHJlc3VsdCBub3c/ICovCi0gICAgcmV0dXJuIDA7CQkJLyogcmlnaHQgc2hpZnQgaXMgdW5zaWduZWQgKi8KLSAgfQotICBwcmludGYoIlJpZ2h0IHNoaWZ0IGlzbid0IGFjdGluZyBhcyBJIGV4cGVjdCBpdCB0by5cbiIpOwotICBwcmludGYoIkkgZmVhciB0aGUgSlBFRyBzb2Z0d2FyZSB3aWxsIG5vdCB3b3JrIGF0IGFsbC5cblxuIik7Ci0gIHJldHVybiAwOwkJCS8qIHRyeSBpdCB3aXRoIHVuc2lnbmVkIGFueXdheSAqLwotfQotaW50IG1haW4oKSB7Ci0gIGV4aXQoaXNfc2hpZnRpbmdfc2lnbmVkKC0weDdGN0U4MEIxTCkpOwotfV0sIFtBQ19NU0dfUkVTVUxUKG5vKQotQUNfREVGSU5FKFtSSUdIVF9TSElGVF9JU19VTlNJR05FRF0sWzFdLFtCcm9rZW4gY29tcGlsZXIgc2hpZnRzIHNpZ25lZCB2YWx1ZXMgYXMgYW4gdW5zaWduZWQgc2hpZnQuXSldLCBBQ19NU0dfUkVTVUxUKHllcyksCi1BQ19NU0dfUkVTVUxUKEFzc3VtaW5nIHRoYXQgcmlnaHQgc2hpZnQgaXMgc2lnbmVkIG9uIHRhcmdldCBtYWNoaW5lLikpCi1kbmwKLUFDX01TR19DSEVDS0lORyh0byBzZWUgaWYgZm9wZW4gYWNjZXB0cyBiIHNwZWMpCi1BQ19UUllfUlVOKFsKLSNpbmNsdWRlIDxzdGRpby5oPgotaW50IG1haW4oKSB7Ci0gIGlmIChmb3BlbigiY29uZnRlc3RkYXRhIiwgIndiIikgIT0gTlVMTCkKLSAgICBleGl0KDApOwotICBleGl0KDEpOwotfV0sIEFDX01TR19SRVNVTFQoeWVzKSwgW0FDX01TR19SRVNVTFQobm8pCi1BQ19ERUZJTkUoW0RPTlRfVVNFX0JfTU9ERV0sWzFdLFtEb24ndCBvcGVuIGZpbGVzIGluIGJpbmFyeSBtb2RlLl0pXSwKLUFDX01TR19SRVNVTFQoQXNzdW1pbmcgdGhhdCBpdCBkb2VzLikpCi0KLSMgQ29uZmlndXJlIGxpYnRvb2wKLUFDX0xJQlRPT0xfV0lOMzJfRExMCi1BQ19QUk9HX0xJQlRPT0wKLQotIyBTZWxlY3QgbWVtb3J5IG1hbmFnZXIgZGVwZW5kaW5nIG9uIHVzZXIgaW5wdXQuCi0jIElmIG5vICItZW5hYmxlLW1heG1lbSIsIHVzZSBqbWVtbm9icwotTUVNT1JZTUdSPSdqbWVtbm9icycKLU1BWE1FTT0ibm8iCi1BQ19BUkdfRU5BQkxFKG1heG1lbSwKLVsgIC0tZW5hYmxlLW1heG1lbVs9Tl0gICAgIGVuYWJsZSB1c2Ugb2YgdGVtcCBmaWxlcywgc2V0IG1heCBtZW0gdXNhZ2UgdG8gTiBNQl0sCi1NQVhNRU09IiRlbmFibGV2YWwiKQotZG5sIFsjIHN1cHBvcnQgLS13aXRoLW1heG1lbSBmb3IgYmFja3dhcmRzIGNvbXBhdGliaWxpdHkgd2l0aCBJSkcgVjUuXQotZG5sIEFDX0FSR19XSVRIKG1heG1lbSwgLCBNQVhNRU09IiR3aXRodmFsIikKLWlmIHRlc3QgIngkTUFYTUVNIiA9IHh5ZXM7IHRoZW4KLSAgTUFYTUVNPTEKLWZpCi1pZiB0ZXN0ICJ4JE1BWE1FTSIgIT0geG5vOyB0aGVuCi0gIGlmIHRlc3QgLW4gImBlY2hvICRNQVhNRU0gfCBzZWQgJ3MvW1swLTldXS8vZydgIjsgdGhlbgotICAgIEFDX01TR19FUlJPUihub24tbnVtZXJpYyBhcmd1bWVudCB0byAtLWVuYWJsZS1tYXhtZW0pCitpZiB0ZXN0ICJ4JHtHQ0N9IiA9ICJ4eWVzIjsgdGhlbgorICBpZiB0ZXN0ICJ4JHtTQVZFRF9DRkxBR1N9IiA9ICJ4IjsgdGhlbgorICAgIENGTEFHUz0tTzMKICAgZmkKLSAgREVGQVVMVE1BWE1FTT1gZXhwciAkTUFYTUVNIFwqIDEwNDg1NzZgCi1BQ19ERUZJTkVfVU5RVU9URUQoW0RFRkFVTFRfTUFYX01FTV0sIFske0RFRkFVTFRNQVhNRU19XSwgW01heGltdW0gZGF0YSBzcGFjZSBsaWJyYXJ5IHdpbGwgYWxsb2NhdGUuXSkKLUFDX01TR19DSEVDS0lORyhbZm9yICd0bXBmaWxlKCknXSkKLUFDX1RSWV9MSU5LKFsjaW5jbHVkZSA8c3RkaW8uaD5dLCBbIEZJTEUgKiB0ZmlsZSA9IHRtcGZpbGUoKTsgXSwKLVtBQ19NU0dfUkVTVUxUKHllcykKLU1FTU9SWU1HUj0nam1lbWFuc2knXSwKLVtBQ19NU0dfUkVTVUxUKG5vKQotZG5sIGlmIHRtcGZpbGUgaXMgbm90IHByZXNlbnQsIG11c3QgdXNlIGptZW1uYW1lLgotTUVNT1JZTUdSPSdqbWVtbmFtZScKLQotIyBUZXN0IGZvciB0aGUgbmVlZCB0byByZW1vdmUgdGVtcG9yYXJ5IGZpbGVzIHVzaW5nIGEgc2lnbmFsIGhhbmRsZXIgKGZvciBjanBlZy9kanBlZykKLUFDX0RFRklORShbTkVFRF9TSUdOQUxfQ0FUQ0hFUl0sWzFdLFtOZWVkIHNpZ25hbCBoYW5kbGVyIHRvIGNsZWFuIHVwIHRlbXBvcmFyeSBmaWxlcy5dKQotQUNfTVNHX0NIRUNLSU5HKFtmb3IgJ21rdGVtcCgpJ10pCi1BQ19UUllfTElOSygsIFsgY2hhciBmbmFtZVs4MF07IG1rdGVtcChmbmFtZSk7IF0sIEFDX01TR19SRVNVTFQoeWVzKSwKLVtBQ19NU0dfUkVTVUxUKG5vKQotQUNfREVGSU5FKFtOT19NS1RFTVBdLFsxXSxbVGhlIG1rdGVtcCgpIGZ1bmN0aW9uIGlzIG5vdCBhdmFpbGFibGUuXSldKV0pCisgIGlmIHRlc3QgIngke1NBVkVEX0NQUEZMQUdTfSIgPSAieCI7IHRoZW4KKyAgICBDUFBGTEFHUz0tV2FsbAorICBmaQogZmkKLUFDX1NVQlNUKE1FTU9SWU1HUikKIAotIyBFeHRyYWN0IHRoZSBsaWJyYXJ5IHZlcnNpb24gSURzIGZyb20ganBlZ2xpYi5oLgotQUNfTVNHX0NIRUNLSU5HKFtsaWJqcGVnIHZlcnNpb24gbnVtYmVyXSkKLVtKUEVHX0xJQl9WRVJTSU9OX01BSk9SPWBzZWQgLWUgJy9eI2RlZmluZSBKUEVHX0xJQl9WRVJTSU9OX01BSk9SLyFkJyAtZSAncy9eW14wLTldKlwoWzAtOV1bMC05XSpcKS4qJC9cMS8nICRzcmNkaXIvanBlZ2xpYi5oYF0KLVtKUEVHX0xJQl9WRVJTSU9OX01JTk9SPWBzZWQgLWUgJy9eI2RlZmluZSBKUEVHX0xJQl9WRVJTSU9OX01JTk9SLyFkJyAtZSAncy9eW14wLTldKlwoWzAtOV1bMC05XSpcKS4qJC9cMS8nICRzcmNkaXIvanBlZ2xpYi5oYF0KLVtKUEVHX0xJQl9WRVJTSU9OPSJgZXhwciAkSlBFR19MSUJfVkVSU0lPTl9NQUpPUiArICRKUEVHX0xJQl9WRVJTSU9OX01JTk9SYDowOiRKUEVHX0xJQl9WRVJTSU9OX01JTk9SIl0KLUFDX01TR19SRVNVTFQoWyRKUEVHX0xJQl9WRVJTSU9OXSkKLUFDX1NVQlNUKFtKUEVHX0xJQl9WRVJTSU9OXSkKK0FDX0NIRUNLX0RFQ0woW19fU1VOUFJPX0NdLCBbU1VOQ0M9InllcyJdLCBbU1VOQ0M9Im5vIl0pCitpZiB0ZXN0ICJ4JHtTVU5DQ30iID0gInh5ZXMiOyB0aGVuCisgIGlmIHRlc3QgIngke1NBVkVEX0NGTEFHU30iID0gIngiOyB0aGVuCisgICAgQ0ZMQUdTPS14TzUKKyAgZmkKK2ZpCiAKLUFDX0NPTkZJR19GSUxFUyhbTWFrZWZpbGVdKQorIyBDaGVja3MgZm9yIGxpYnJhcmllcy4KKworIyBDaGVja3MgZm9yIGhlYWRlciBmaWxlcy4KK0FDX0hFQURFUl9TVERDCitBQ19DSEVDS19IRUFERVJTKFtzdGRkZWYuaCBzdGRsaWIuaCBzdHJpbmcuaF0pCitBQ19DSEVDS19IRUFERVIoW3N5cy90eXBlcy5oXSwgQUNfREVGSU5FKFtORUVEX1NZU19UWVBFU19IXSwgMSwgW0RlZmluZSBpZiB5b3UgaGF2ZSBzeXMvdHlwZXMuaF0pKQorCisjIENoZWNrcyBmb3IgdHlwZWRlZnMsIHN0cnVjdHVyZXMsIGFuZCBjb21waWxlciBjaGFyYWN0ZXJpc3RpY3MuCitBQ19DX0NPTlNUCitBQ19DX0NIQVJfVU5TSUdORUQKK0FDX0NfSU5MSU5FCitBQ19UWVBFX1NJWkVfVAorQUNfQ0hFQ0tfVFlQRVMoW3Vuc2lnbmVkIGNoYXIsIHVuc2lnbmVkIHNob3J0XSkKKworQUNfTVNHX0NIRUNLSU5HKFtpZiByaWdodCBzaGlmdCBpcyBzaWduZWRdKQorQUNfVFJZX1JVTigKKwlbI2luY2x1ZGUgPHN0ZGlvLmg+CisJIGludCBpc19zaGlmdGluZ19zaWduZWQgKGxvbmcgYXJnKSB7CisJIGxvbmcgcmVzID0gYXJnID4+IDQ7CisKKwkgaWYgKHJlcyA9PSAtMHg3RjdFODBDTCkKKwkJcmV0dXJuIDE7IC8qIHJpZ2h0IHNoaWZ0IGlzIHNpZ25lZCAqLworCisJIC8qIHNlZSBpZiB1bnNpZ25lZC1zaGlmdCBoYWNrIHdpbGwgZml4IGl0LiAqLworCSAvKiB3ZSBjYW4ndCBqdXN0IHRlc3QgZXhhY3QgdmFsdWUgc2luY2UgaXQgZGVwZW5kcyBvbiB3aWR0aCBvZiBsb25nLi4uICovCisJIHJlcyB8PSAofjBMKSA8PCAoMzItNCk7CisJIGlmIChyZXMgPT0gLTB4N0Y3RTgwQ0wpCisJCXJldHVybiAwOyAvKiByaWdodCBzaGlmdCBpcyB1bnNpZ25lZCAqLworCisJIHByaW50ZigiUmlnaHQgc2hpZnQgaXNuJ3QgYWN0aW5nIGFzIEkgZXhwZWN0IGl0IHRvLlxuIik7CisJIHByaW50ZigiSSBmZWFyIHRoZSBKUEVHIHNvZnR3YXJlIHdpbGwgbm90IHdvcmsgYXQgYWxsLlxuXG4iKTsKKwkgcmV0dXJuIDA7IC8qIHRyeSBpdCB3aXRoIHVuc2lnbmVkIGFueXdheSAqLworCSB9CisJIGludCBtYWluICh2b2lkKSB7CisJCWV4aXQoaXNfc2hpZnRpbmdfc2lnbmVkKC0weDdGN0U4MEIxTCkpOworCSB9XSwKKwlbQUNfTVNHX1JFU1VMVChubykKKwkgQUNfREVGSU5FKFtSSUdIVF9TSElGVF9JU19VTlNJR05FRF0sIDEsIFtEZWZpbmUgaWYgc2hpZnQgaXMgdW5zaWduZWRdKV0sCisJW0FDX01TR19SRVNVTFQoeWVzKV0sCisJW0FDX01TR19SRVNVTFQoQXNzdW1pbmcgdGhhdCByaWdodCBzaGlmdCBpcyBzaWduZWQgb24gdGFyZ2V0IG1hY2hpbmUuKV0pCisKKyMgdGVzdCB3aGV0aGVyIGdsb2JhbCBuYW1lcyBhcmUgdW5pcXVlIHRvIGF0IGxlYXN0IDE1IGNoYXJzCitBQ19NU0dfQ0hFQ0tJTkcoW2ZvciBzaG9ydCBleHRlcm5hbCBuYW1lc10pCitBQ19UUllfTElOSygKKwlbaW50IHBvc3NpYmx5X2R1cGxpY2F0ZV9mdW5jdGlvbiAoKSB7IHJldHVybiAwOyB9CisJIGludCBwb3NzaWJseV9kdXBsaV9mdW5jdGlvbiAoKSB7IHJldHVybiAxOyB9XSwgWyBdLAorCVtBQ19NU0dfUkVTVUxUKG9rKV0sCisJW0FDX01TR19SRVNVTFQoc2hvcnQpCisJIEFDX0RFRklORShbTkVFRF9TSE9SVF9FWFRFUk5BTF9OQU1FU10sIDEsIFtEZWZpbmUgaWYgeW91IG5lZWQgc2hvcnQgZnVuY3Rpb24gbmFtZXNdKV0pCisKKyMgQ2hlY2tzIGZvciBsaWJyYXJ5IGZ1bmN0aW9ucy4KK0FDX0NIRUNLX0ZVTkNTKFttZW1zZXQgbWVtY3B5XSwgW10sCisJW0FDX0RFRklORShbTkVFRF9CU0RfU1RSSU5HU10sIDEsCisJCSAgIFtEZWZpbmUgaWYgeW91IGhhdmUgQlNELWxpa2UgYnplcm8gYW5kIGJjb3B5XSldKQorCitBQ19NU0dfQ0hFQ0tJTkcoW2xpYmpwZWcgQVBJIHZlcnNpb25dKQorQUNfQVJHX1ZBUihKUEVHX0xJQl9WRVJTSU9OLCBbbGlianBlZyBBUEkgdmVyc2lvbiAoNjIsIDcwLCBvciA4MCldKQoraWYgdGVzdCAieCRKUEVHX0xJQl9WRVJTSU9OIiA9ICJ4IjsgdGhlbgorICAgIEFDX0FSR19XSVRIKFtqcGVnN10sCisgICAgICAgIEFDX0hFTFBfU1RSSU5HKFstLXdpdGgtanBlZzddLCBbRW11bGF0ZSBsaWJqcGVnIHY3IEFQSS9BQkkgKHRoaXMgbWFrZXMgbGlianBlZy10dXJibyBiYWNrd2FyZCBpbmNvbXBhdGlibGUgd2l0aCBsaWJqcGVnIHY2Yi4pXSkpCisgICAgQUNfQVJHX1dJVEgoW2pwZWc4XSwKKyAgICAgICAgQUNfSEVMUF9TVFJJTkcoWy0td2l0aC1qcGVnOF0sIFtFbXVsYXRlIGxpYmpwZWcgdjggQVBJL0FCSSAodGhpcyBtYWtlcyBsaWJqcGVnLXR1cmJvIGJhY2t3YXJkIGluY29tcGF0aWJsZSB3aXRoIGxpYmpwZWcgdjZiLildKSkKKyAgICBpZiB0ZXN0ICJ4JHt3aXRoX2pwZWc4fSIgPSAieHllcyI7IHRoZW4KKyAgICAgICAgSlBFR19MSUJfVkVSU0lPTj04MAorICAgIGVsc2UKKyAgICAgICAgaWYgdGVzdCAieCR7d2l0aF9qcGVnN30iID0gInh5ZXMiOyB0aGVuCisgICAgICAgICAgICBKUEVHX0xJQl9WRVJTSU9OPTcwCisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIEpQRUdfTElCX1ZFUlNJT049NjIKKyAgICAgICAgZmkKKyAgICBmaQorZmkKK0pQRUdfTElCX1ZFUlNJT05fREVDSU1BTD1gZXhwciAkSlBFR19MSUJfVkVSU0lPTiAvIDEwYC5gZXhwciAkSlBFR19MSUJfVkVSU0lPTiAlIDEwYAorQUNfU1VCU1QoSlBFR19MSUJfVkVSU0lPTl9ERUNJTUFMKQorQUNfTVNHX1JFU1VMVChbJEpQRUdfTElCX1ZFUlNJT05fREVDSU1BTF0pCitBQ19ERUZJTkVfVU5RVU9URUQoSlBFR19MSUJfVkVSU0lPTiwgWyRKUEVHX0xJQl9WRVJTSU9OXSwgW2xpYmpwZWcgQVBJIHZlcnNpb25dKQorCitBQ19NU0dfQ0hFQ0tJTkcoW2xpYmpwZWcgc2hhcmVkIGxpYnJhcnkgdmVyc2lvbl0pCitBQ19BUkdfVkFSKFNPX01BSk9SX1ZFUlNJT04sIFtNYWpvciB2ZXJzaW9uIG9mIHRoZSBsaWJqcGVnLXR1cmJvIHNoYXJlZCBsaWJyYXJ5IChkZWZhdWx0IGlzIGRldGVybWluZWQgYnkgdGhlIEFQSSB2ZXJzaW9uKV0pCitBQ19BUkdfVkFSKFNPX01JTk9SX1ZFUlNJT04sIFtNaW5vciB2ZXJzaW9uIG9mIHRoZSBsaWJqcGVnLXR1cmJvIHNoYXJlZCBsaWJyYXJ5IChkZWZhdWx0IGlzIGRldGVybWluZWQgYnkgdGhlIEFQSSB2ZXJzaW9uKV0pCitpZiB0ZXN0ICJ4JFNPX01BSk9SX1ZFUlNJT04iID0gIngiOyB0aGVuCisgICAgY2FzZSAiJEpQRUdfTElCX1ZFUlNJT04iIGluCisgICAgICAgIDYyKSAgU09fTUFKT1JfVkVSU0lPTj0kSlBFR19MSUJfVkVSU0lPTiA7OworICAgICAgICAqKSAgIFNPX01BSk9SX1ZFUlNJT049YGV4cHIgJEpQRUdfTElCX1ZFUlNJT04gLyAxMGAgOzsKKyAgICBlc2FjCitmaQoraWYgdGVzdCAieCRTT19NSU5PUl9WRVJTSU9OIiA9ICJ4IjsgdGhlbgorICAgIGNhc2UgIiRKUEVHX0xJQl9WRVJTSU9OIiBpbgorICAgICAgICA4MCkgIFNPX01JTk9SX1ZFUlNJT049MiA7OworICAgICAgICAqKSAgIFNPX01JTk9SX1ZFUlNJT049MCA7OworICAgIGVzYWMKK2ZpCitBQ19NU0dfUkVTVUxUKFskU09fTUFKT1JfVkVSU0lPTjokU09fTUlOT1JfVkVSU0lPTl0pCitBQ19TVUJTVChTT19NQUpPUl9WRVJTSU9OKQorQUNfU1VCU1QoU09fTUlOT1JfVkVSU0lPTikKKworVkVSU0lPTl9TQ1JJUFQ9eWVzCitBQ19BUkdfRU5BQkxFKFtsZC12ZXJzaW9uLXNjcmlwdF0sCisgIEFTX0hFTFBfU1RSSU5HKFstLWRpc2FibGUtbGQtdmVyc2lvbi1zY3JpcHRdLAorICAgIFtEaXNhYmxlIGxpbmtlciB2ZXJzaW9uIHNjcmlwdCBmb3IgbGlianBlZy10dXJibyAoZGVmYXVsdCBpcyB0byB1c2UgbGlua2VyIHZlcnNpb24gc2NyaXB0IGlmIHRoZSBsaW5rZXIgc3VwcG9ydHMgaXQpXSksCisgICAgW1ZFUlNJT05fU0NSSVBUPSRlbmFibGV2YWxdLCBbXSkKKworQUNfTVNHX0NIRUNLSU5HKFt3aGV0aGVyIHRoZSBsaW5rZXIgc3VwcG9ydHMgdmVyc2lvbiBzY3JpcHRzXSkKK1NBVkVEX0xERkxBR1M9IiRMREZMQUdTIgorTERGTEFHUz0iJExERkxBR1MgLVdsLC0tdmVyc2lvbi1zY3JpcHQsY29uZnRlc3QubWFwIgorY2F0ID4gY29uZnRlc3QubWFwIDw8RU9GCitWRVJTXzEgeworICBnbG9iYWw6ICo7Cit9OworRU9GCitBQ19MSU5LX0lGRUxTRShBQ19MQU5HX1BST0dSQU0oW10sIFtdKSwKKyAgW1ZFUlNJT05fU0NSSVBUX0ZMQUc9LVdsLC0tdmVyc2lvbi1zY3JpcHQsOyBBQ19NU0dfUkVTVUxUKFt5ZXMgKEdOVSBzdHlsZSldKV0sIFtdKQoraWYgdGVzdCAieCRWRVJTSU9OX1NDUklQVF9GTEFHIiA9ICJ4IjsgdGhlbgorICBMREZMQUdTPSIkU0FWRURfTERGTEFHUyAtV2wsLU0sY29uZnRlc3QubWFwIgorICBBQ19MSU5LX0lGRUxTRShBQ19MQU5HX1BST0dSQU0oW10sIFtdKSwKKyAgICBbVkVSU0lPTl9TQ1JJUFRfRkxBRz0tV2wsLU0sOyBBQ19NU0dfUkVTVUxUKFt5ZXMgKFN1biBzdHlsZSldKV0sIFtdKQorZmkKK2lmIHRlc3QgIngkVkVSU0lPTl9TQ1JJUFRfRkxBRyIgPSAieCI7IHRoZW4KKyAgVkVSU0lPTl9TQ1JJUFQ9bm8KKyAgQUNfTVNHX1JFU1VMVChubykKK2ZpCitMREZMQUdTPSIkU0FWRURfTERGTEFHUyIKKworQUNfTVNHX0NIRUNLSU5HKFt3aGV0aGVyIHRvIHVzZSB2ZXJzaW9uIHNjcmlwdCB3aGVuIGJ1aWxkaW5nIGxpYmpwZWctdHVyYm9dKQorQUNfTVNHX1JFU1VMVCgkVkVSU0lPTl9TQ1JJUFQpCisKK0FNX0NPTkRJVElPTkFMKFZFUlNJT05fU0NSSVBULCB0ZXN0ICJ4JFZFUlNJT05fU0NSSVBUIiA9ICJ4eWVzIikKK0FDX1NVQlNUKFZFUlNJT05fU0NSSVBUX0ZMQUcpCisKK0FDX01TR19DSEVDS0lORyhbd2hldGhlciB0byBpbmNsdWRlIGFyaXRobWV0aWMgZW5jb2Rpbmcgc3VwcG9ydF0pCitBQ19BUkdfV0lUSChbYXJpdGgtZW5jXSwKKyAgICBBQ19IRUxQX1NUUklORyhbLS13aXRob3V0LWFyaXRoLWVuY10sIFtPbWl0IGFyaXRobWV0aWMgZW5jb2Rpbmcgc3VwcG9ydF0pKQoraWYgdGVzdCAieCR3aXRoX2FyaXRoX2VuYyIgPSAieG5vIjsgdGhlbgorICAgIEFDX01TR19SRVNVTFQobm8pCitlbHNlCisgICAgQUNfREVGSU5FKFtDX0FSSVRIX0NPRElOR19TVVBQT1JURURdLCBbMV0sIFtTdXBwb3J0IGFyaXRobWV0aWMgZW5jb2RpbmddKQorICAgIEFDX01TR19SRVNVTFQoeWVzKQorZmkKK0FNX0NPTkRJVElPTkFMKFtXSVRIX0FSSVRIX0VOQ10sIFt0ZXN0ICJ4JHdpdGhfYXJpdGhfZW5jIiAhPSAieG5vIl0pCisKK0FDX01TR19DSEVDS0lORyhbd2hldGhlciB0byBpbmNsdWRlIGFyaXRobWV0aWMgZGVjb2Rpbmcgc3VwcG9ydF0pCitBQ19BUkdfV0lUSChbYXJpdGgtZGVjXSwKKyAgICBBQ19IRUxQX1NUUklORyhbLS13aXRob3V0LWFyaXRoLWRlY10sIFtPbWl0IGFyaXRobWV0aWMgZGVjb2Rpbmcgc3VwcG9ydF0pKQoraWYgdGVzdCAieCR3aXRoX2FyaXRoX2RlYyIgPSAieG5vIjsgdGhlbgorICAgIEFDX01TR19SRVNVTFQobm8pCitlbHNlCisgICAgQUNfREVGSU5FKFtEX0FSSVRIX0NPRElOR19TVVBQT1JURURdLCBbMV0sIFtTdXBwb3J0IGFyaXRobWV0aWMgZGVjb2RpbmddKQorICAgIEFDX01TR19SRVNVTFQoeWVzKQorZmkKK0FNX0NPTkRJVElPTkFMKFtXSVRIX0FSSVRIX0RFQ10sIFt0ZXN0ICJ4JHdpdGhfYXJpdGhfZGVjIiAhPSAieG5vIl0pCisKK0FNX0NPTkRJVElPTkFMKFtXSVRIX0FSSVRIXSwgW3Rlc3QgIngkd2l0aF9hcml0aF9kZWMiICE9ICJ4bm8iIC1vICJ4JHdpdGhfYXJpdGhfZW5jIiAhPSAieG5vIl0pCisKKyMgU0lNRCBpcyBvcHRpb25hbAorQUNfQVJHX1dJVEgoW3NpbWRdLAorICAgIEFDX0hFTFBfU1RSSU5HKFstLXdpdGhvdXQtc2ltZF0sW09taXQgYWNjZWxlcmF0ZWQgU0lNRCByb3V0aW5lcy5dKSkKK2lmIHRlc3QgIngke3dpdGhfc2ltZH0iICE9ICJ4bm8iOyB0aGVuCisgICMgQ2hlY2sgaWYgd2UncmUgb24gYSBzdXBwb3J0ZWQgQ1BVCisgIEFDX01TR19DSEVDS0lORyhbaWYgd2UgaGF2ZSBTSU1EIG9wdGltaXNhdGlvbnMgZm9yIGNwdSB0eXBlXSkKKyAgY2FzZSAiJGhvc3RfY3B1IiBpbgorICAgIHg4Nl82NCB8IGFtZDY0KQorICAgICAgQUNfTVNHX1JFU1VMVChbeWVzICh4ODZfNjQpXSkKKyAgICAgIEFDX1BST0dfTkFTTQorICAgICAgc2ltZF9hcmNoPXg4Nl82NAorICAgIDs7CisgICAgaSo4NiB8IHg4NiB8IGlhMzIpCisgICAgICBBQ19NU0dfUkVTVUxUKFt5ZXMgKGkzODYpXSkKKyAgICAgIEFDX1BST0dfTkFTTQorICAgICAgc2ltZF9hcmNoPWkzODYKKyAgICA7OworICAgICopCisgICAgICBBQ19NU0dfUkVTVUxUKFtubyAoIiRob3N0X2NwdSIpXSkKKyAgICAgIEFDX01TR19XQVJOKFtTSU1EIHN1cHBvcnQgbm90IGF2YWlsYWJsZSBmb3IgdGhpcyBDUFUuICBQZXJmb3JtYW5jZSB3aWxsIHN1ZmZlci5dKQorICAgICAgd2l0aF9zaW1kPW5vOworICAgIDs7CisgIGVzYWMKKworICBpZiB0ZXN0ICJ4JHt3aXRoX3NpbWR9IiAhPSAieG5vIjsgdGhlbgorICAgIEFDX0RFRklORShbV0lUSF9TSU1EXSwgWzFdLCBbVXNlIGFjY2VsZXJhdGVkIFNJTUQgcm91dGluZXMuXSkKKyAgZmkKK2ZpCisKK0FNX0NPTkRJVElPTkFMKFtXSVRIX1NJTURdLCBbdGVzdCAieCR3aXRoX3NpbWQiICE9ICJ4bm8iXSkKK0FNX0NPTkRJVElPTkFMKFtTSU1EX0kzODZdLCBbdGVzdCAieCRzaW1kX2FyY2giID0gInhpMzg2Il0pCitBTV9DT05ESVRJT05BTChbU0lNRF9YODZfNjRdLCBbdGVzdCAieCRzaW1kX2FyY2giID0gInh4ODZfNjQiXSkKK0FNX0NPTkRJVElPTkFMKFtYODZfNjRdLCBbdGVzdCAieCRob3N0X2NwdSIgPSAieHg4Nl82NCIgLW8gIngkaG9zdF9jcHUiID0gInhhbWQ2NCJdKQorCitjYXNlICIkaG9zdF9jcHUiIGluCisgIHg4Nl82NCkKKyAgICBSUE1BUkNIPXg4Nl82NAorICAgIERFQkFSQ0g9YW1kNjQKKyAgICA7OworICBpKjg2IHwgeDg2IHwgaWEzMikKKyAgICBSUE1BUkNIPWkzODYKKyAgICBERUJBUkNIPWkzODYKKyAgICA7OworZXNhYworCitBQ19TVUJTVChSUE1BUkNIKQorQUNfU1VCU1QoREVCQVJDSCkKK0FDX1NVQlNUKEJVSUxEKQorQUNfREVGSU5FX1VOUVVPVEVEKFtCVUlMRF0sICIkQlVJTEQiLCBbQnVpbGQgbnVtYmVyXSkKKworIyBqY29uZmlnLmggaXMgdGhlIGZpbGUgd2UgdXNlLCBidXQgd2UgaGF2ZSBhbm90aGVyIGJlZm9yZSB0aGF0IHRvCisjIGZvb2wgYXV0b2hlYWRlci4gdGhlIHJlYXNvbiBpcyB0aGF0IHdlIGluY2x1ZGUgdGhpcyBoZWFkZXIgaW4gb3VyCisjIEFQSSBoZWFkZXJzLCB3aGljaCBjYW4gc2NyZXcgdGhpbmdzIHVwIGZvciB1c2VycyBvZiB0aGUgbGliLgorIyBqY29uZmlnLmggaXMgYSBtaW5pbWFsIHZlcnNpb24gdGhhdCBhbGxvd3MgdGhpcyBwYWNrYWdlIHRvIGJlIGJ1aWx0CitBQ19DT05GSUdfSEVBREVSUyhbY29uZmlnLmhdKQorQUNfQ09ORklHX0hFQURFUlMoW2pjb25maWcuaF0pCitBQ19DT05GSUdfRklMRVMoW3BrZ3NjcmlwdHMvbGlianBlZy10dXJiby5zcGVjOnJlbGVhc2UvbGlianBlZy10dXJiby5zcGVjLmluXSkKK0FDX0NPTkZJR19GSUxFUyhbcGtnc2NyaXB0cy9tYWtlY3lnd2lucGtnOnJlbGVhc2UvbWFrZWN5Z3dpbnBrZy5pbl0pCitBQ19DT05GSUdfRklMRVMoW3BrZ3NjcmlwdHMvbWFrZWRwa2c6cmVsZWFzZS9tYWtlZHBrZy5pbl0pCitBQ19DT05GSUdfRklMRVMoW3BrZ3NjcmlwdHMvZGViLWNvbnRyb2w6cmVsZWFzZS9kZWItY29udHJvbC5pbl0pCitBQ19DT05GSUdfRklMRVMoW3BrZ3NjcmlwdHMvbWFrZW1hY3BrZzpyZWxlYXNlL21ha2VtYWNwa2cuaW5dKQorQUNfQ09ORklHX0ZJTEVTKFtwa2dzY3JpcHRzL0Rlc2NyaXB0aW9uLnBsaXN0OnJlbGVhc2UvRGVzY3JpcHRpb24ucGxpc3QuaW5dKQorQUNfQ09ORklHX0ZJTEVTKFtwa2dzY3JpcHRzL0luZm8ucGxpc3Q6cmVsZWFzZS9JbmZvLnBsaXN0LmluXSkKK0FDX0NPTkZJR19GSUxFUyhbcGtnc2NyaXB0cy91bmluc3RhbGw6cmVsZWFzZS91bmluc3RhbGwuaW5dKQorQUNfQ09ORklHX0ZJTEVTKFtwa2dzY3JpcHRzL21ha2VzdW5wa2c6cmVsZWFzZS9tYWtlc3VucGtnLmluXSkKK0FDX0NPTkZJR19GSUxFUyhbcGtnc2NyaXB0cy9wa2dpbmZvOnJlbGVhc2UvcGtnaW5mby5pbl0pCitBQ19DT05GSUdfRklMRVMoW2xpYmpwZWcubWFwXSkKK0FDX0NPTkZJR19GSUxFUyhbTWFrZWZpbGUgc2ltZC9NYWtlZmlsZV0pCiBBQ19PVVRQVVQKZGlmZiAtLWdpdCBhL2RlcGNvbXAgYi9kZXBjb21wCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDc1NQppbmRleCBkZjhlZWE3Li4wMDAwMDAwCi0tLSBhL2RlcGNvbXAKKysrIC9kZXYvbnVsbApAQCAtMSw2MzAgKzAsMCBAQAotIyEgL2Jpbi9zaAotIyBkZXBjb21wIC0gY29tcGlsZSBhIHByb2dyYW0gZ2VuZXJhdGluZyBkZXBlbmRlbmNpZXMgYXMgc2lkZS1lZmZlY3RzCi0KLXNjcmlwdHZlcnNpb249MjAwOS0wNC0yOC4yMTsgIyBVVEMKLQotIyBDb3B5cmlnaHQgKEMpIDE5OTksIDIwMDAsIDIwMDMsIDIwMDQsIDIwMDUsIDIwMDYsIDIwMDcsIDIwMDkgRnJlZQotIyBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCi0KLSMgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKLSMgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKLSMgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiwgb3IgKGF0IHlvdXIgb3B0aW9uKQotIyBhbnkgbGF0ZXIgdmVyc2lvbi4KLQotIyBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSMgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSMgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQotIyBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotCi0jIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCi0jIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtLiAgSWYgbm90LCBzZWUgPGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LgotCi0jIEFzIGEgc3BlY2lhbCBleGNlcHRpb24gdG8gdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLCBpZiB5b3UKLSMgZGlzdHJpYnV0ZSB0aGlzIGZpbGUgYXMgcGFydCBvZiBhIHByb2dyYW0gdGhhdCBjb250YWlucyBhCi0jIGNvbmZpZ3VyYXRpb24gc2NyaXB0IGdlbmVyYXRlZCBieSBBdXRvY29uZiwgeW91IG1heSBpbmNsdWRlIGl0IHVuZGVyCi0jIHRoZSBzYW1lIGRpc3RyaWJ1dGlvbiB0ZXJtcyB0aGF0IHlvdSB1c2UgZm9yIHRoZSByZXN0IG9mIHRoYXQgcHJvZ3JhbS4KLQotIyBPcmlnaW5hbGx5IHdyaXR0ZW4gYnkgQWxleGFuZHJlIE9saXZhIDxvbGl2YUBkY2MudW5pY2FtcC5icj4uCi0KLWNhc2UgJDEgaW4KLSAgJycpCi0gICAgIGVjaG8gIiQwOiBObyBjb21tYW5kLiAgVHJ5IFxgJDAgLS1oZWxwJyBmb3IgbW9yZSBpbmZvcm1hdGlvbi4iIDE+JjIKLSAgICAgZXhpdCAxOwotICAgICA7OwotICAtaCB8IC0taCopCi0gICAgY2F0IDw8XEVPRgotVXNhZ2U6IGRlcGNvbXAgWy0taGVscF0gWy0tdmVyc2lvbl0gUFJPR1JBTSBbQVJHU10KLQotUnVuIFBST0dSQU1TIEFSR1MgdG8gY29tcGlsZSBhIGZpbGUsIGdlbmVyYXRpbmcgZGVwZW5kZW5jaWVzCi1hcyBzaWRlLWVmZmVjdHMuCi0KLUVudmlyb25tZW50IHZhcmlhYmxlczoKLSAgZGVwbW9kZSAgICAgRGVwZW5kZW5jeSB0cmFja2luZyBtb2RlLgotICBzb3VyY2UgICAgICBTb3VyY2UgZmlsZSByZWFkIGJ5IGBQUk9HUkFNUyBBUkdTJy4KLSAgb2JqZWN0ICAgICAgT2JqZWN0IGZpbGUgb3V0cHV0IGJ5IGBQUk9HUkFNUyBBUkdTJy4KLSAgREVQRElSICAgICAgZGlyZWN0b3J5IHdoZXJlIHRvIHN0b3JlIGRlcGVuZGVuY2llcy4KLSAgZGVwZmlsZSAgICAgRGVwZW5kZW5jeSBmaWxlIHRvIG91dHB1dC4KLSAgdG1wZGVwZmlsZSAgVGVtcG9yYXJ5IGZpbGUgdG8gdXNlIHdoZW4gb3V0cHV0aW5nIGRlcGVuZGVuY2llcy4KLSAgbGlidG9vbCAgICAgV2hldGhlciBsaWJ0b29sIGlzIHVzZWQgKHllcy9ubykuCi0KLVJlcG9ydCBidWdzIHRvIDxidWctYXV0b21ha2VAZ251Lm9yZz4uCi1FT0YKLSAgICBleGl0ICQ/Ci0gICAgOzsKLSAgLXYgfCAtLXYqKQotICAgIGVjaG8gImRlcGNvbXAgJHNjcmlwdHZlcnNpb24iCi0gICAgZXhpdCAkPwotICAgIDs7Ci1lc2FjCi0KLWlmIHRlc3QgLXogIiRkZXBtb2RlIiB8fCB0ZXN0IC16ICIkc291cmNlIiB8fCB0ZXN0IC16ICIkb2JqZWN0IjsgdGhlbgotICBlY2hvICJkZXBjb21wOiBWYXJpYWJsZXMgc291cmNlLCBvYmplY3QgYW5kIGRlcG1vZGUgbXVzdCBiZSBzZXQiIDE+JjIKLSAgZXhpdCAxCi1maQotCi0jIERlcGVuZGVuY2llcyBmb3Igc3ViL2Jhci5vIG9yIHN1Yi9iYXIub2JqIGdvIGludG8gc3ViLy5kZXBzL2Jhci5Qby4KLWRlcGZpbGU9JHtkZXBmaWxlLWBlY2hvICIkb2JqZWN0IiB8Ci0gIHNlZCAnc3xbXlxcL10qJHwnJHtERVBESVItLmRlcHN9Jy8mfDtzfFwuXChbXi5dKlwpJHwuUFwxfDtzfFBvYmokfFBvfCdgfQotdG1wZGVwZmlsZT0ke3RtcGRlcGZpbGUtYGVjaG8gIiRkZXBmaWxlIiB8IHNlZCAncy9cLlwoW14uXSpcKSQvLlRcMS8nYH0KLQotcm0gLWYgIiR0bXBkZXBmaWxlIgotCi0jIFNvbWUgbW9kZXMgd29yayBqdXN0IGxpa2Ugb3RoZXIgbW9kZXMsIGJ1dCB1c2UgZGlmZmVyZW50IGZsYWdzLiAgV2UKLSMgcGFyYW1ldGVyaXplIGhlcmUsIGJ1dCBzdGlsbCBsaXN0IHRoZSBtb2RlcyBpbiB0aGUgYmlnIGNhc2UgYmVsb3csCi0jIHRvIG1ha2UgZGVwZW5kLm00IGVhc2llciB0byB3cml0ZS4gIE5vdGUgdGhhdCB3ZSAqY2Fubm90KiB1c2UgYSBjYXNlCi0jIGhlcmUsIGJlY2F1c2UgdGhpcyBmaWxlIGNhbiBvbmx5IGNvbnRhaW4gb25lIGNhc2Ugc3RhdGVtZW50LgotaWYgdGVzdCAiJGRlcG1vZGUiID0gaHA7IHRoZW4KLSAgIyBIUCBjb21waWxlciB1c2VzIC1NIGFuZCBubyBleHRyYSBhcmcuCi0gIGdjY2ZsYWc9LU0KLSAgZGVwbW9kZT1nY2MKLWZpCi0KLWlmIHRlc3QgIiRkZXBtb2RlIiA9IGRhc2hYbXN0ZG91dDsgdGhlbgotICAgIyBUaGlzIGlzIGp1c3QgbGlrZSBkYXNobXN0ZG91dCB3aXRoIGEgZGlmZmVyZW50IGFyZ3VtZW50LgotICAgZGFzaG1mbGFnPS14TQotICAgZGVwbW9kZT1kYXNobXN0ZG91dAotZmkKLQotY3lncGF0aF91PSJjeWdwYXRoIC11IC1mIC0iCi1pZiB0ZXN0ICIkZGVwbW9kZSIgPSBtc3ZjbXN5czsgdGhlbgotICAgIyBUaGlzIGlzIGp1c3QgbGlrZSBtc3Zpc3VhbGNwcCBidXQgdy9vIGN5Z3BhdGggdHJhbnNsYXRpb24uCi0gICAjIEp1c3QgY29udmVydCB0aGUgYmFja3NsYXNoLWVzY2FwZWQgYmFja3NsYXNoZXMgdG8gc2luZ2xlIGZvcndhcmQKLSAgICMgc2xhc2hlcyB0byBzYXRpc2Z5IGRlcGVuZC5tNAotICAgY3lncGF0aF91PSJzZWQgcyxcXFxcXFxcXCwvLGciCi0gICBkZXBtb2RlPW1zdmlzdWFsY3BwCi1maQotCi1jYXNlICIkZGVwbW9kZSIgaW4KLWdjYzMpCi0jIyBnY2MgMyBpbXBsZW1lbnRzIGRlcGVuZGVuY3kgdHJhY2tpbmcgdGhhdCBkb2VzIGV4YWN0bHkgd2hhdAotIyMgd2Ugd2FudC4gIFlheSEgIE5vdGU6IGZvciBzb21lIHJlYXNvbiBsaWJ0b29sIDEuNCBkb2Vzbid0IGxpa2UKLSMjIGl0IGlmIC1NRCAtTVAgY29tZXMgYWZ0ZXIgdGhlIC1NRiBzdHVmZi4gIEhtbS4KLSMjIFVuZm9ydHVuYXRlbHksIEZyZWVCU0QgYzg5IGFjY2VwdGFuY2Ugb2YgZmxhZ3MgZGVwZW5kcyB1cG9uCi0jIyB0aGUgY29tbWFuZCBsaW5lIGFyZ3VtZW50IG9yZGVyOyBzbyBhZGQgdGhlIGZsYWdzIHdoZXJlIHRoZXkKLSMjIGFwcGVhciBpbiBkZXBlbmQyLmFtLiAgTm90ZSB0aGF0IHRoZSBzbG93ZG93biBpbmN1cnJlZCBoZXJlCi0jIyBhZmZlY3RzIG9ubHkgY29uZmlndXJlOiBpbiBtYWtlZmlsZXMsICVGQVNUREVQJSBzaG9ydGN1dHMgdGhpcy4KLSAgZm9yIGFyZwotICBkbwotICAgIGNhc2UgJGFyZyBpbgotICAgIC1jKSBzZXQgZm5vcmQgIiRAIiAtTVQgIiRvYmplY3QiIC1NRCAtTVAgLU1GICIkdG1wZGVwZmlsZSIgIiRhcmciIDs7Ci0gICAgKikgIHNldCBmbm9yZCAiJEAiICIkYXJnIiA7OwotICAgIGVzYWMKLSAgICBzaGlmdCAjIGZub3JkCi0gICAgc2hpZnQgIyAkYXJnCi0gIGRvbmUKLSAgIiRAIgotICBzdGF0PSQ/Ci0gIGlmIHRlc3QgJHN0YXQgLWVxIDA7IHRoZW4gOgotICBlbHNlCi0gICAgcm0gLWYgIiR0bXBkZXBmaWxlIgotICAgIGV4aXQgJHN0YXQKLSAgZmkKLSAgbXYgIiR0bXBkZXBmaWxlIiAiJGRlcGZpbGUiCi0gIDs7Ci0KLWdjYykKLSMjIFRoZXJlIGFyZSB2YXJpb3VzIHdheXMgdG8gZ2V0IGRlcGVuZGVuY3kgb3V0cHV0IGZyb20gZ2NjLiAgSGVyZSdzCi0jIyB3aHkgd2UgcGljayB0aGlzIHJhdGhlciBvYnNjdXJlIG1ldGhvZDoKLSMjIC0gRG9uJ3Qgd2FudCB0byB1c2UgLU1EIGJlY2F1c2Ugd2UnZCBsaWtlIHRoZSBkZXBlbmRlbmNpZXMgdG8gZW5kCi0jIyAgIHVwIGluIGEgc3ViZGlyLiAgSGF2aW5nIHRvIHJlbmFtZSBieSBoYW5kIGlzIHVnbHkuCi0jIyAgIChXZSBtaWdodCBlbmQgdXAgZG9pbmcgdGhpcyBhbnl3YXkgdG8gc3VwcG9ydCBvdGhlciBjb21waWxlcnMuKQotIyMgLSBUaGUgREVQRU5ERU5DSUVTX09VVFBVVCBlbnZpcm9ubWVudCB2YXJpYWJsZSBtYWtlcyBnY2MgYWN0IGxpa2UKLSMjICAgLU1NLCBub3QgLU0gKGRlc3BpdGUgd2hhdCB0aGUgZG9jcyBzYXkpLgotIyMgLSBVc2luZyAtTSBkaXJlY3RseSBtZWFucyBydW5uaW5nIHRoZSBjb21waWxlciB0d2ljZSAoZXZlbiB3b3JzZQotIyMgICB0aGFuIHJlbmFtaW5nKS4KLSAgaWYgdGVzdCAteiAiJGdjY2ZsYWciOyB0aGVuCi0gICAgZ2NjZmxhZz0tTUQsCi0gIGZpCi0gICIkQCIgLVdwLCIkZ2NjZmxhZyR0bXBkZXBmaWxlIgotICBzdGF0PSQ/Ci0gIGlmIHRlc3QgJHN0YXQgLWVxIDA7IHRoZW4gOgotICBlbHNlCi0gICAgcm0gLWYgIiR0bXBkZXBmaWxlIgotICAgIGV4aXQgJHN0YXQKLSAgZmkKLSAgcm0gLWYgIiRkZXBmaWxlIgotICBlY2hvICIkb2JqZWN0IDogXFwiID4gIiRkZXBmaWxlIgotICBhbHBoYT1BQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWmFiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6Ci0jIyBUaGUgc2Vjb25kIC1lIGV4cHJlc3Npb24gaGFuZGxlcyBET1Mtc3R5bGUgZmlsZSBuYW1lcyB3aXRoIGRyaXZlIGxldHRlcnMuCi0gIHNlZCAtZSAncy9eW146XSo6IC8gLycgXAotICAgICAgLWUgJ3MvXlsnJGFscGhhJ106XC9bXjpdKjogLyAvJyA8ICIkdG1wZGVwZmlsZSIgPj4gIiRkZXBmaWxlIgotIyMgVGhpcyBuZXh0IHBpZWNlIG9mIG1hZ2ljIGF2b2lkcyB0aGUgYGRlbGV0ZWQgaGVhZGVyIGZpbGUnIHByb2JsZW0uCi0jIyBUaGUgcHJvYmxlbSBpcyB0aGF0IHdoZW4gYSBoZWFkZXIgZmlsZSB3aGljaCBhcHBlYXJzIGluIGEgLlAgZmlsZQotIyMgaXMgZGVsZXRlZCwgdGhlIGRlcGVuZGVuY3kgY2F1c2VzIG1ha2UgdG8gZGllIChiZWNhdXNlIHRoZXJlIGlzCi0jIyB0eXBpY2FsbHkgbm8gd2F5IHRvIHJlYnVpbGQgdGhlIGhlYWRlcikuICBXZSBhdm9pZCB0aGlzIGJ5IGFkZGluZwotIyMgZHVtbXkgZGVwZW5kZW5jaWVzIGZvciBlYWNoIGhlYWRlciBmaWxlLiAgVG9vIGJhZCBnY2MgZG9lc24ndCBkbwotIyMgdGhpcyBmb3IgdXMgZGlyZWN0bHkuCi0gIHRyICcgJyAnCi0nIDwgIiR0bXBkZXBmaWxlIiB8Ci0jIyBTb21lIHZlcnNpb25zIG9mIGdjYyBwdXQgYSBzcGFjZSBiZWZvcmUgdGhlIGA6Jy4gIE9uIHRoZSB0aGVvcnkKLSMjIHRoYXQgdGhlIHNwYWNlIG1lYW5zIHNvbWV0aGluZywgd2UgYWRkIGEgc3BhY2UgdG8gdGhlIG91dHB1dCBhcwotIyMgd2VsbC4KLSMjIFNvbWUgdmVyc2lvbnMgb2YgdGhlIEhQVVggMTAuMjAgc2VkIGNhbid0IHByb2Nlc3MgdGhpcyBpbnZvY2F0aW9uCi0jIyBjb3JyZWN0bHkuICBCcmVha2luZyBpdCBpbnRvIHR3byBzZWQgaW52b2NhdGlvbnMgaXMgYSB3b3JrYXJvdW5kLgotICAgIHNlZCAtZSAncy9eXFwkLy8nIC1lICcvXiQvZCcgLWUgJy86JC9kJyB8IHNlZCAtZSAncy8kLyA6LycgPj4gIiRkZXBmaWxlIgotICBybSAtZiAiJHRtcGRlcGZpbGUiCi0gIDs7Ci0KLWhwKQotICAjIFRoaXMgY2FzZSBleGlzdHMgb25seSB0byBsZXQgZGVwZW5kLm00IGRvIGl0cyB3b3JrLiAgSXQgd29ya3MgYnkKLSAgIyBsb29raW5nIGF0IHRoZSB0ZXh0IG9mIHRoaXMgc2NyaXB0LiAgVGhpcyBjYXNlIHdpbGwgbmV2ZXIgYmUgcnVuLAotICAjIHNpbmNlIGl0IGlzIGNoZWNrZWQgZm9yIGFib3ZlLgotICBleGl0IDEKLSAgOzsKLQotc2dpKQotICBpZiB0ZXN0ICIkbGlidG9vbCIgPSB5ZXM7IHRoZW4KLSAgICAiJEAiICItV3AsLU1EdXBkYXRlLCR0bXBkZXBmaWxlIgotICBlbHNlCi0gICAgIiRAIiAtTUR1cGRhdGUgIiR0bXBkZXBmaWxlIgotICBmaQotICBzdGF0PSQ/Ci0gIGlmIHRlc3QgJHN0YXQgLWVxIDA7IHRoZW4gOgotICBlbHNlCi0gICAgcm0gLWYgIiR0bXBkZXBmaWxlIgotICAgIGV4aXQgJHN0YXQKLSAgZmkKLSAgcm0gLWYgIiRkZXBmaWxlIgotCi0gIGlmIHRlc3QgLWYgIiR0bXBkZXBmaWxlIjsgdGhlbiAgIyB5ZXMsIHRoZSBzb3VyY2VmaWxlIGRlcGVuZCBvbiBvdGhlciBmaWxlcwotICAgIGVjaG8gIiRvYmplY3QgOiBcXCIgPiAiJGRlcGZpbGUiCi0KLSAgICAjIENsaXAgb2ZmIHRoZSBpbml0aWFsIGVsZW1lbnQgKHRoZSBkZXBlbmRlbnQpLiAgRG9uJ3QgdHJ5IHRvIGJlCi0gICAgIyBjbGV2ZXIgYW5kIHJlcGxhY2UgdGhpcyB3aXRoIHNlZCBjb2RlLCBhcyBJUklYIHNlZCB3b24ndCBoYW5kbGUKLSAgICAjIGxpbmVzIHdpdGggbW9yZSB0aGFuIGEgZml4ZWQgbnVtYmVyIG9mIGNoYXJhY3RlcnMgKDQwOTYgaW4KLSAgICAjIElSSVggNi4yIHNlZCwgODE5MiBpbiBJUklYIDYuNSkuICBXZSBhbHNvIHJlbW92ZSBjb21tZW50IGxpbmVzOwotICAgICMgdGhlIElSSVggY2MgYWRkcyBjb21tZW50cyBsaWtlIGAjOmZlYycgdG8gdGhlIGVuZCBvZiB0aGUKLSAgICAjIGRlcGVuZGVuY3kgbGluZS4KLSAgICB0ciAnICcgJwotJyA8ICIkdG1wZGVwZmlsZSIgXAotICAgIHwgc2VkIC1lICdzL14uKlwubzovLycgLWUgJ3MvIy4qJC8vJyAtZSAnL14kLyBkJyB8IFwKLSAgICB0ciAnCi0nICcgJyA+PiAiJGRlcGZpbGUiCi0gICAgZWNobyA+PiAiJGRlcGZpbGUiCi0KLSAgICAjIFRoZSBzZWNvbmQgcGFzcyBnZW5lcmF0ZXMgYSBkdW1teSBlbnRyeSBmb3IgZWFjaCBoZWFkZXIgZmlsZS4KLSAgICB0ciAnICcgJwotJyA8ICIkdG1wZGVwZmlsZSIgXAotICAgfCBzZWQgLWUgJ3MvXi4qXC5vOi8vJyAtZSAncy8jLiokLy8nIC1lICcvXiQvIGQnIC1lICdzLyQvOi8nIFwKLSAgID4+ICIkZGVwZmlsZSIKLSAgZWxzZQotICAgICMgVGhlIHNvdXJjZWZpbGUgZG9lcyBub3QgY29udGFpbiBhbnkgZGVwZW5kZW5jaWVzLCBzbyBqdXN0Ci0gICAgIyBzdG9yZSBhIGR1bW15IGNvbW1lbnQgbGluZSwgdG8gYXZvaWQgZXJyb3JzIHdpdGggdGhlIE1ha2VmaWxlCi0gICAgIyAiaW5jbHVkZSBiYXNlbmFtZS5QbG8iIHNjaGVtZS4KLSAgICBlY2hvICIjZHVtbXkiID4gIiRkZXBmaWxlIgotICBmaQotICBybSAtZiAiJHRtcGRlcGZpbGUiCi0gIDs7Ci0KLWFpeCkKLSAgIyBUaGUgQyBmb3IgQUlYIENvbXBpbGVyIHVzZXMgLU0gYW5kIG91dHB1dHMgdGhlIGRlcGVuZGVuY2llcwotICAjIGluIGEgLnUgZmlsZS4gIEluIG9sZGVyIHZlcnNpb25zLCB0aGlzIGZpbGUgYWx3YXlzIGxpdmVzIGluIHRoZQotICAjIGN1cnJlbnQgZGlyZWN0b3J5LiAgQWxzbywgdGhlIEFJWCBjb21waWxlciBwdXRzIGAkb2JqZWN0OicgYXQgdGhlCi0gICMgc3RhcnQgb2YgZWFjaCBsaW5lOyAkb2JqZWN0IGRvZXNuJ3QgaGF2ZSBkaXJlY3RvcnkgaW5mb3JtYXRpb24uCi0gICMgVmVyc2lvbiA2IHVzZXMgdGhlIGRpcmVjdG9yeSBpbiBib3RoIGNhc2VzLgotICBkaXI9YGVjaG8gIiRvYmplY3QiIHwgc2VkIC1lICdzfC9bXi9dKiR8L3wnYAotICB0ZXN0ICJ4JGRpciIgPSAieCRvYmplY3QiICYmIGRpcj0KLSAgYmFzZT1gZWNobyAiJG9iamVjdCIgfCBzZWQgLWUgJ3N8Xi4qL3x8JyAtZSAncy9cLm8kLy8nIC1lICdzL1wubG8kLy8nYAotICBpZiB0ZXN0ICIkbGlidG9vbCIgPSB5ZXM7IHRoZW4KLSAgICB0bXBkZXBmaWxlMT0kZGlyJGJhc2UudQotICAgIHRtcGRlcGZpbGUyPSRiYXNlLnUKLSAgICB0bXBkZXBmaWxlMz0kZGlyLmxpYnMvJGJhc2UudQotICAgICIkQCIgLVdjLC1NCi0gIGVsc2UKLSAgICB0bXBkZXBmaWxlMT0kZGlyJGJhc2UudQotICAgIHRtcGRlcGZpbGUyPSRkaXIkYmFzZS51Ci0gICAgdG1wZGVwZmlsZTM9JGRpciRiYXNlLnUKLSAgICAiJEAiIC1NCi0gIGZpCi0gIHN0YXQ9JD8KLQotICBpZiB0ZXN0ICRzdGF0IC1lcSAwOyB0aGVuIDoKLSAgZWxzZQotICAgIHJtIC1mICIkdG1wZGVwZmlsZTEiICIkdG1wZGVwZmlsZTIiICIkdG1wZGVwZmlsZTMiCi0gICAgZXhpdCAkc3RhdAotICBmaQotCi0gIGZvciB0bXBkZXBmaWxlIGluICIkdG1wZGVwZmlsZTEiICIkdG1wZGVwZmlsZTIiICIkdG1wZGVwZmlsZTMiCi0gIGRvCi0gICAgdGVzdCAtZiAiJHRtcGRlcGZpbGUiICYmIGJyZWFrCi0gIGRvbmUKLSAgaWYgdGVzdCAtZiAiJHRtcGRlcGZpbGUiOyB0aGVuCi0gICAgIyBFYWNoIGxpbmUgaXMgb2YgdGhlIGZvcm0gYGZvby5vOiBkZXBlbmRlbnQuaCcuCi0gICAgIyBEbyB0d28gcGFzc2VzLCBvbmUgdG8ganVzdCBjaGFuZ2UgdGhlc2UgdG8KLSAgICAjIGAkb2JqZWN0OiBkZXBlbmRlbnQuaCcgYW5kIG9uZSB0byBzaW1wbHkgYGRlcGVuZGVudC5oOicuCi0gICAgc2VkIC1lICJzLF4uKlwuW2Etel0qOiwkb2JqZWN0OiwiIDwgIiR0bXBkZXBmaWxlIiA+ICIkZGVwZmlsZSIKLSAgICAjIFRoYXQncyBhIHRhYiBhbmQgYSBzcGFjZSBpbiB0aGUgW10uCi0gICAgc2VkIC1lICdzLF4uKlwuW2Etel0qOlsJIF0qLCwnIC1lICdzLCQsOiwnIDwgIiR0bXBkZXBmaWxlIiA+PiAiJGRlcGZpbGUiCi0gIGVsc2UKLSAgICAjIFRoZSBzb3VyY2VmaWxlIGRvZXMgbm90IGNvbnRhaW4gYW55IGRlcGVuZGVuY2llcywgc28ganVzdAotICAgICMgc3RvcmUgYSBkdW1teSBjb21tZW50IGxpbmUsIHRvIGF2b2lkIGVycm9ycyB3aXRoIHRoZSBNYWtlZmlsZQotICAgICMgImluY2x1ZGUgYmFzZW5hbWUuUGxvIiBzY2hlbWUuCi0gICAgZWNobyAiI2R1bW15IiA+ICIkZGVwZmlsZSIKLSAgZmkKLSAgcm0gLWYgIiR0bXBkZXBmaWxlIgotICA7OwotCi1pY2MpCi0gICMgSW50ZWwncyBDIGNvbXBpbGVyIHVuZGVyc3RhbmRzIGAtTUQgLU1GIGZpbGUnLiAgSG93ZXZlciBvbgotICAjICAgIGljYyAtTUQgLU1GIGZvby5kIC1jIC1vIHN1Yi9mb28ubyBzdWIvZm9vLmMKLSAgIyBJQ0MgNy4wIHdpbGwgZmlsbCBmb28uZCB3aXRoIHNvbWV0aGluZyBsaWtlCi0gICMgICAgZm9vLm86IHN1Yi9mb28uYwotICAjICAgIGZvby5vOiBzdWIvZm9vLmgKLSAgIyB3aGljaCBpcyB3cm9uZy4gIFdlIHdhbnQ6Ci0gICMgICAgc3ViL2Zvby5vOiBzdWIvZm9vLmMKLSAgIyAgICBzdWIvZm9vLm86IHN1Yi9mb28uaAotICAjICAgIHN1Yi9mb28uYzoKLSAgIyAgICBzdWIvZm9vLmg6Ci0gICMgSUNDIDcuMSB3aWxsIG91dHB1dAotICAjICAgIGZvby5vOiBzdWIvZm9vLmMgc3ViL2Zvby5oCi0gICMgYW5kIHdpbGwgd3JhcCBsb25nIGxpbmVzIHVzaW5nIFwgOgotICAjICAgIGZvby5vOiBzdWIvZm9vLmMgLi4uIFwKLSAgIyAgICAgc3ViL2Zvby5oIC4uLiBcCi0gICMgICAgIC4uLgotCi0gICIkQCIgLU1EIC1NRiAiJHRtcGRlcGZpbGUiCi0gIHN0YXQ9JD8KLSAgaWYgdGVzdCAkc3RhdCAtZXEgMDsgdGhlbiA6Ci0gIGVsc2UKLSAgICBybSAtZiAiJHRtcGRlcGZpbGUiCi0gICAgZXhpdCAkc3RhdAotICBmaQotICBybSAtZiAiJGRlcGZpbGUiCi0gICMgRWFjaCBsaW5lIGlzIG9mIHRoZSBmb3JtIGBmb28ubzogZGVwZW5kZW50LmgnLAotICAjIG9yIGBmb28ubzogZGVwMS5oIGRlcDIuaCBcJywgb3IgYCBkZXAzLmggZGVwNC5oIFwnLgotICAjIERvIHR3byBwYXNzZXMsIG9uZSB0byBqdXN0IGNoYW5nZSB0aGVzZSB0bwotICAjIGAkb2JqZWN0OiBkZXBlbmRlbnQuaCcgYW5kIG9uZSB0byBzaW1wbHkgYGRlcGVuZGVudC5oOicuCi0gIHNlZCAicyxeW146XSo6LCRvYmplY3QgOiwiIDwgIiR0bXBkZXBmaWxlIiA+ICIkZGVwZmlsZSIKLSAgIyBTb21lIHZlcnNpb25zIG9mIHRoZSBIUFVYIDEwLjIwIHNlZCBjYW4ndCBwcm9jZXNzIHRoaXMgaW52b2NhdGlvbgotICAjIGNvcnJlY3RseS4gIEJyZWFraW5nIGl0IGludG8gdHdvIHNlZCBpbnZvY2F0aW9ucyBpcyBhIHdvcmthcm91bmQuCi0gIHNlZCAncyxeW146XSo6IFwoLipcKSQsXDEsO3MvXlxcJC8vOy9eJC9kOy86JC9kJyA8ICIkdG1wZGVwZmlsZSIgfAotICAgIHNlZCAtZSAncy8kLyA6LycgPj4gIiRkZXBmaWxlIgotICBybSAtZiAiJHRtcGRlcGZpbGUiCi0gIDs7Ci0KLWhwMikKLSAgIyBUaGUgImhwIiBzdGFuemEgYWJvdmUgZG9lcyBub3Qgd29yayB3aXRoIGFDQyAoQysrKSBhbmQgSFAncyBpYTY0Ci0gICMgY29tcGlsZXJzLCB3aGljaCBoYXZlIGludGVncmF0ZWQgcHJlcHJvY2Vzc29ycy4gIFRoZSBjb3JyZWN0IG9wdGlvbgotICAjIHRvIHVzZSB3aXRoIHRoZXNlIGlzICtNYWtlZDsgaXQgd3JpdGVzIGRlcGVuZGVuY2llcyB0byBhIGZpbGUgbmFtZWQKLSAgIyAnZm9vLmQnLCB3aGljaCBsYW5kcyBuZXh0IHRvIHRoZSBvYmplY3QgZmlsZSwgd2hlcmV2ZXIgdGhhdAotICAjIGhhcHBlbnMgdG8gYmUuCi0gICMgTXVjaCBvZiB0aGlzIGlzIHNpbWlsYXIgdG8gdGhlIHRydTY0IGNhc2U7IHNlZSBjb21tZW50cyB0aGVyZS4KLSAgZGlyPWBlY2hvICIkb2JqZWN0IiB8IHNlZCAtZSAnc3wvW14vXSokfC98J2AKLSAgdGVzdCAieCRkaXIiID0gIngkb2JqZWN0IiAmJiBkaXI9Ci0gIGJhc2U9YGVjaG8gIiRvYmplY3QiIHwgc2VkIC1lICdzfF4uKi98fCcgLWUgJ3MvXC5vJC8vJyAtZSAncy9cLmxvJC8vJ2AKLSAgaWYgdGVzdCAiJGxpYnRvb2wiID0geWVzOyB0aGVuCi0gICAgdG1wZGVwZmlsZTE9JGRpciRiYXNlLmQKLSAgICB0bXBkZXBmaWxlMj0kZGlyLmxpYnMvJGJhc2UuZAotICAgICIkQCIgLVdjLCtNYWtlZAotICBlbHNlCi0gICAgdG1wZGVwZmlsZTE9JGRpciRiYXNlLmQKLSAgICB0bXBkZXBmaWxlMj0kZGlyJGJhc2UuZAotICAgICIkQCIgK01ha2VkCi0gIGZpCi0gIHN0YXQ9JD8KLSAgaWYgdGVzdCAkc3RhdCAtZXEgMDsgdGhlbiA6Ci0gIGVsc2UKLSAgICAgcm0gLWYgIiR0bXBkZXBmaWxlMSIgIiR0bXBkZXBmaWxlMiIKLSAgICAgZXhpdCAkc3RhdAotICBmaQotCi0gIGZvciB0bXBkZXBmaWxlIGluICIkdG1wZGVwZmlsZTEiICIkdG1wZGVwZmlsZTIiCi0gIGRvCi0gICAgdGVzdCAtZiAiJHRtcGRlcGZpbGUiICYmIGJyZWFrCi0gIGRvbmUKLSAgaWYgdGVzdCAtZiAiJHRtcGRlcGZpbGUiOyB0aGVuCi0gICAgc2VkIC1lICJzLF4uKlwuW2Etel0qOiwkb2JqZWN0OiwiICIkdG1wZGVwZmlsZSIgPiAiJGRlcGZpbGUiCi0gICAgIyBBZGQgYGRlcGVuZGVudC5oOicgbGluZXMuCi0gICAgc2VkIC1uZSAnMiwkewotCSAgICAgICBzL14gKi8vCi0JICAgICAgIHMvIFxcKiQvLwotCSAgICAgICBzLyQvOi8KLQkgICAgICAgcAotCSAgICAgfScgIiR0bXBkZXBmaWxlIiA+PiAiJGRlcGZpbGUiCi0gIGVsc2UKLSAgICBlY2hvICIjZHVtbXkiID4gIiRkZXBmaWxlIgotICBmaQotICBybSAtZiAiJHRtcGRlcGZpbGUiICIkdG1wZGVwZmlsZTIiCi0gIDs7Ci0KLXRydTY0KQotICAgIyBUaGUgVHJ1NjQgY29tcGlsZXIgdXNlcyAtTUQgdG8gZ2VuZXJhdGUgZGVwZW5kZW5jaWVzIGFzIGEgc2lkZQotICAgIyBlZmZlY3QuICBgY2MgLU1EIC1vIGZvby5vIC4uLicgcHV0cyB0aGUgZGVwZW5kZW5jaWVzIGludG8gYGZvby5vLmQnLgotICAgIyBBdCBsZWFzdCBvbiBBbHBoYS9SZWRoYXQgNi4xLCBDb21wYXEgQ0NDIFY2LjItNTA0IHNlZW1zIHRvIHB1dAotICAgIyBkZXBlbmRlbmNpZXMgaW4gYGZvby5kJyBpbnN0ZWFkLCBzbyB3ZSBjaGVjayBmb3IgdGhhdCB0b28uCi0gICAjIFN1YmRpcmVjdG9yaWVzIGFyZSByZXNwZWN0ZWQuCi0gICBkaXI9YGVjaG8gIiRvYmplY3QiIHwgc2VkIC1lICdzfC9bXi9dKiR8L3wnYAotICAgdGVzdCAieCRkaXIiID0gIngkb2JqZWN0IiAmJiBkaXI9Ci0gICBiYXNlPWBlY2hvICIkb2JqZWN0IiB8IHNlZCAtZSAnc3xeLiovfHwnIC1lICdzL1wubyQvLycgLWUgJ3MvXC5sbyQvLydgCi0KLSAgIGlmIHRlc3QgIiRsaWJ0b29sIiA9IHllczsgdGhlbgotICAgICAgIyBXaXRoIFRydTY0IGNjLCBzaGFyZWQgb2JqZWN0cyBjYW4gYWxzbyBiZSB1c2VkIHRvIG1ha2UgYQotICAgICAgIyBzdGF0aWMgbGlicmFyeS4gIFRoaXMgbWVjaGFuaXNtIGlzIHVzZWQgaW4gbGlidG9vbCAxLjQgc2VyaWVzIHRvCi0gICAgICAjIGhhbmRsZSBib3RoIHNoYXJlZCBhbmQgc3RhdGljIGxpYnJhcmllcyBpbiBhIHNpbmdsZSBjb21waWxhdGlvbi4KLSAgICAgICMgV2l0aCBsaWJ0b29sIDEuNCwgZGVwZW5kZW5jaWVzIHdlcmUgb3V0cHV0IGluICRkaXIubGlicy8kYmFzZS5sby5kLgotICAgICAgIwotICAgICAgIyBXaXRoIGxpYnRvb2wgMS41IHRoaXMgZXhjZXB0aW9uIHdhcyByZW1vdmVkLCBhbmQgbGlidG9vbCBub3cKLSAgICAgICMgZ2VuZXJhdGVzIDIgc2VwYXJhdGUgb2JqZWN0cyBmb3IgdGhlIDIgbGlicmFyaWVzLiAgVGhlc2UgdHdvCi0gICAgICAjIGNvbXBpbGF0aW9ucyBvdXRwdXQgZGVwZW5kZW5jaWVzIGluICRkaXIubGlicy8kYmFzZS5vLmQgYW5kCi0gICAgICAjIGluICRkaXIkYmFzZS5vLmQuICBXZSBoYXZlIHRvIGNoZWNrIGZvciBib3RoIGZpbGVzLCBiZWNhdXNlCi0gICAgICAjIG9uZSBvZiB0aGUgdHdvIGNvbXBpbGF0aW9ucyBjYW4gYmUgZGlzYWJsZWQuICBXZSBzaG91bGQgcHJlZmVyCi0gICAgICAjICRkaXIkYmFzZS5vLmQgb3ZlciAkZGlyLmxpYnMvJGJhc2Uuby5kIGJlY2F1c2UgdGhlIGxhdHRlciBpcwotICAgICAgIyBhdXRvbWF0aWNhbGx5IGNsZWFuZWQgd2hlbiAubGlicy8gaXMgZGVsZXRlZCwgd2hpbGUgaWdub3JpbmcKLSAgICAgICMgdGhlIGZvcm1lciB3b3VsZCBjYXVzZSBhIGRpc3RjbGVhbmNoZWNrIHBhbmljLgotICAgICAgdG1wZGVwZmlsZTE9JGRpci5saWJzLyRiYXNlLmxvLmQgICAjIGxpYnRvb2wgMS40Ci0gICAgICB0bXBkZXBmaWxlMj0kZGlyJGJhc2Uuby5kICAgICAgICAgICMgbGlidG9vbCAxLjUKLSAgICAgIHRtcGRlcGZpbGUzPSRkaXIubGlicy8kYmFzZS5vLmQgICAgIyBsaWJ0b29sIDEuNQotICAgICAgdG1wZGVwZmlsZTQ9JGRpci5saWJzLyRiYXNlLmQgICAgICAjIENvbXBhcSBDQ0MgVjYuMi01MDQKLSAgICAgICIkQCIgLVdjLC1NRAotICAgZWxzZQotICAgICAgdG1wZGVwZmlsZTE9JGRpciRiYXNlLm8uZAotICAgICAgdG1wZGVwZmlsZTI9JGRpciRiYXNlLmQKLSAgICAgIHRtcGRlcGZpbGUzPSRkaXIkYmFzZS5kCi0gICAgICB0bXBkZXBmaWxlND0kZGlyJGJhc2UuZAotICAgICAgIiRAIiAtTUQKLSAgIGZpCi0KLSAgIHN0YXQ9JD8KLSAgIGlmIHRlc3QgJHN0YXQgLWVxIDA7IHRoZW4gOgotICAgZWxzZQotICAgICAgcm0gLWYgIiR0bXBkZXBmaWxlMSIgIiR0bXBkZXBmaWxlMiIgIiR0bXBkZXBmaWxlMyIgIiR0bXBkZXBmaWxlNCIKLSAgICAgIGV4aXQgJHN0YXQKLSAgIGZpCi0KLSAgIGZvciB0bXBkZXBmaWxlIGluICIkdG1wZGVwZmlsZTEiICIkdG1wZGVwZmlsZTIiICIkdG1wZGVwZmlsZTMiICIkdG1wZGVwZmlsZTQiCi0gICBkbwotICAgICB0ZXN0IC1mICIkdG1wZGVwZmlsZSIgJiYgYnJlYWsKLSAgIGRvbmUKLSAgIGlmIHRlc3QgLWYgIiR0bXBkZXBmaWxlIjsgdGhlbgotICAgICAgc2VkIC1lICJzLF4uKlwuW2Etel0qOiwkb2JqZWN0OiwiIDwgIiR0bXBkZXBmaWxlIiA+ICIkZGVwZmlsZSIKLSAgICAgICMgVGhhdCdzIGEgdGFiIGFuZCBhIHNwYWNlIGluIHRoZSBbXS4KLSAgICAgIHNlZCAtZSAncyxeLipcLlthLXpdKjpbCSBdKiwsJyAtZSAncywkLDosJyA8ICIkdG1wZGVwZmlsZSIgPj4gIiRkZXBmaWxlIgotICAgZWxzZQotICAgICAgZWNobyAiI2R1bW15IiA+ICIkZGVwZmlsZSIKLSAgIGZpCi0gICBybSAtZiAiJHRtcGRlcGZpbGUiCi0gICA7OwotCi0jbm9zaWRlZWZmZWN0KQotICAjIFRoaXMgY29tbWVudCBhYm92ZSBpcyB1c2VkIGJ5IGF1dG9tYWtlIHRvIHRlbGwgc2lkZS1lZmZlY3QKLSAgIyBkZXBlbmRlbmN5IHRyYWNraW5nIG1lY2hhbmlzbXMgZnJvbSBzbG93ZXIgb25lcy4KLQotZGFzaG1zdGRvdXQpCi0gICMgSW1wb3J0YW50IG5vdGU6IGluIG9yZGVyIHRvIHN1cHBvcnQgdGhpcyBtb2RlLCBhIGNvbXBpbGVyICptdXN0KgotICAjIGFsd2F5cyB3cml0ZSB0aGUgcHJlcHJvY2Vzc2VkIGZpbGUgdG8gc3Rkb3V0LCByZWdhcmRsZXNzIG9mIC1vLgotICAiJEAiIHx8IGV4aXQgJD8KLQotICAjIFJlbW92ZSB0aGUgY2FsbCB0byBMaWJ0b29sLgotICBpZiB0ZXN0ICIkbGlidG9vbCIgPSB5ZXM7IHRoZW4KLSAgICB3aGlsZSB0ZXN0ICJYJDEiICE9ICdYLS1tb2RlPWNvbXBpbGUnOyBkbwotICAgICAgc2hpZnQKLSAgICBkb25lCi0gICAgc2hpZnQKLSAgZmkKLQotICAjIFJlbW92ZSBgLW8gJG9iamVjdCcuCi0gIElGUz0iICIKLSAgZm9yIGFyZwotICBkbwotICAgIGNhc2UgJGFyZyBpbgotICAgIC1vKQotICAgICAgc2hpZnQKLSAgICAgIDs7Ci0gICAgJG9iamVjdCkKLSAgICAgIHNoaWZ0Ci0gICAgICA7OwotICAgICopCi0gICAgICBzZXQgZm5vcmQgIiRAIiAiJGFyZyIKLSAgICAgIHNoaWZ0ICMgZm5vcmQKLSAgICAgIHNoaWZ0ICMgJGFyZwotICAgICAgOzsKLSAgICBlc2FjCi0gIGRvbmUKLQotICB0ZXN0IC16ICIkZGFzaG1mbGFnIiAmJiBkYXNobWZsYWc9LU0KLSAgIyBSZXF1aXJlIGF0IGxlYXN0IHR3byBjaGFyYWN0ZXJzIGJlZm9yZSBzZWFyY2hpbmcgZm9yIGA6JwotICAjIGluIHRoZSB0YXJnZXQgbmFtZS4gIFRoaXMgaXMgdG8gY29wZSB3aXRoIERPUy1zdHlsZSBmaWxlbmFtZXM6Ci0gICMgYSBkZXBlbmRlbmN5IHN1Y2ggYXMgYGM6L2Zvby9iYXInIGNvdWxkIGJlIHNlZW4gYXMgdGFyZ2V0IGBjJyBvdGhlcndpc2UuCi0gICIkQCIgJGRhc2htZmxhZyB8Ci0gICAgc2VkICdzOl5bICBdKlteOiBdW146XVteOl0qXDpbICAgIF0qOiciJG9iamVjdCInXDogOicgPiAiJHRtcGRlcGZpbGUiCi0gIHJtIC1mICIkZGVwZmlsZSIKLSAgY2F0IDwgIiR0bXBkZXBmaWxlIiA+ICIkZGVwZmlsZSIKLSAgdHIgJyAnICcKLScgPCAiJHRtcGRlcGZpbGUiIHwgXAotIyMgU29tZSB2ZXJzaW9ucyBvZiB0aGUgSFBVWCAxMC4yMCBzZWQgY2FuJ3QgcHJvY2VzcyB0aGlzIGludm9jYXRpb24KLSMjIGNvcnJlY3RseS4gIEJyZWFraW5nIGl0IGludG8gdHdvIHNlZCBpbnZvY2F0aW9ucyBpcyBhIHdvcmthcm91bmQuCi0gICAgc2VkIC1lICdzL15cXCQvLycgLWUgJy9eJC9kJyAtZSAnLzokL2QnIHwgc2VkIC1lICdzLyQvIDovJyA+PiAiJGRlcGZpbGUiCi0gIHJtIC1mICIkdG1wZGVwZmlsZSIKLSAgOzsKLQotZGFzaFhtc3Rkb3V0KQotICAjIFRoaXMgY2FzZSBvbmx5IGV4aXN0cyB0byBzYXRpc2Z5IGRlcGVuZC5tNC4gIEl0IGlzIG5ldmVyIGFjdHVhbGx5Ci0gICMgcnVuLCBhcyB0aGlzIG1vZGUgaXMgc3BlY2lhbGx5IHJlY29nbml6ZWQgaW4gdGhlIHByZWFtYmxlLgotICBleGl0IDEKLSAgOzsKLQotbWFrZWRlcGVuZCkKLSAgIiRAIiB8fCBleGl0ICQ/Ci0gICMgUmVtb3ZlIGFueSBMaWJ0b29sIGNhbGwKLSAgaWYgdGVzdCAiJGxpYnRvb2wiID0geWVzOyB0aGVuCi0gICAgd2hpbGUgdGVzdCAiWCQxIiAhPSAnWC0tbW9kZT1jb21waWxlJzsgZG8KLSAgICAgIHNoaWZ0Ci0gICAgZG9uZQotICAgIHNoaWZ0Ci0gIGZpCi0gICMgWCBtYWtlZGVwZW5kCi0gIHNoaWZ0Ci0gIGNsZWFyZWQ9bm8gZWF0PW5vCi0gIGZvciBhcmcKLSAgZG8KLSAgICBjYXNlICRjbGVhcmVkIGluCi0gICAgbm8pCi0gICAgICBzZXQgIiI7IHNoaWZ0Ci0gICAgICBjbGVhcmVkPXllcyA7OwotICAgIGVzYWMKLSAgICBpZiB0ZXN0ICRlYXQgPSB5ZXM7IHRoZW4KLSAgICAgIGVhdD1ubwotICAgICAgY29udGludWUKLSAgICBmaQotICAgIGNhc2UgIiRhcmciIGluCi0gICAgLUQqfC1JKikKLSAgICAgIHNldCBmbm9yZCAiJEAiICIkYXJnIjsgc2hpZnQgOzsKLSAgICAjIFN0cmlwIGFueSBvcHRpb24gdGhhdCBtYWtlZGVwZW5kIG1heSBub3QgdW5kZXJzdGFuZC4gIFJlbW92ZQotICAgICMgdGhlIG9iamVjdCB0b28sIG90aGVyd2lzZSBtYWtlZGVwZW5kIHdpbGwgcGFyc2UgaXQgYXMgYSBzb3VyY2UgZmlsZS4KLSAgICAtYXJjaCkKLSAgICAgIGVhdD15ZXMgOzsKLSAgICAtKnwkb2JqZWN0KQotICAgICAgOzsKLSAgICAqKQotICAgICAgc2V0IGZub3JkICIkQCIgIiRhcmciOyBzaGlmdCA7OwotICAgIGVzYWMKLSAgZG9uZQotICBvYmpfc3VmZml4PWBlY2hvICIkb2JqZWN0IiB8IHNlZCAncy9eLipcLi8uLydgCi0gIHRvdWNoICIkdG1wZGVwZmlsZSIKLSAgJHtNQUtFREVQRU5ELW1ha2VkZXBlbmR9IC1vIiRvYmpfc3VmZml4IiAtZiIkdG1wZGVwZmlsZSIgIiRAIgotICBybSAtZiAiJGRlcGZpbGUiCi0gIGNhdCA8ICIkdG1wZGVwZmlsZSIgPiAiJGRlcGZpbGUiCi0gIHNlZCAnMSwyZCcgIiR0bXBkZXBmaWxlIiB8IHRyICcgJyAnCi0nIHwgXAotIyMgU29tZSB2ZXJzaW9ucyBvZiB0aGUgSFBVWCAxMC4yMCBzZWQgY2FuJ3QgcHJvY2VzcyB0aGlzIGludm9jYXRpb24KLSMjIGNvcnJlY3RseS4gIEJyZWFraW5nIGl0IGludG8gdHdvIHNlZCBpbnZvY2F0aW9ucyBpcyBhIHdvcmthcm91bmQuCi0gICAgc2VkIC1lICdzL15cXCQvLycgLWUgJy9eJC9kJyAtZSAnLzokL2QnIHwgc2VkIC1lICdzLyQvIDovJyA+PiAiJGRlcGZpbGUiCi0gIHJtIC1mICIkdG1wZGVwZmlsZSIgIiR0bXBkZXBmaWxlIi5iYWsKLSAgOzsKLQotY3BwKQotICAjIEltcG9ydGFudCBub3RlOiBpbiBvcmRlciB0byBzdXBwb3J0IHRoaXMgbW9kZSwgYSBjb21waWxlciAqbXVzdCoKLSAgIyBhbHdheXMgd3JpdGUgdGhlIHByZXByb2Nlc3NlZCBmaWxlIHRvIHN0ZG91dC4KLSAgIiRAIiB8fCBleGl0ICQ/Ci0KLSAgIyBSZW1vdmUgdGhlIGNhbGwgdG8gTGlidG9vbC4KLSAgaWYgdGVzdCAiJGxpYnRvb2wiID0geWVzOyB0aGVuCi0gICAgd2hpbGUgdGVzdCAiWCQxIiAhPSAnWC0tbW9kZT1jb21waWxlJzsgZG8KLSAgICAgIHNoaWZ0Ci0gICAgZG9uZQotICAgIHNoaWZ0Ci0gIGZpCi0KLSAgIyBSZW1vdmUgYC1vICRvYmplY3QnLgotICBJRlM9IiAiCi0gIGZvciBhcmcKLSAgZG8KLSAgICBjYXNlICRhcmcgaW4KLSAgICAtbykKLSAgICAgIHNoaWZ0Ci0gICAgICA7OwotICAgICRvYmplY3QpCi0gICAgICBzaGlmdAotICAgICAgOzsKLSAgICAqKQotICAgICAgc2V0IGZub3JkICIkQCIgIiRhcmciCi0gICAgICBzaGlmdCAjIGZub3JkCi0gICAgICBzaGlmdCAjICRhcmcKLSAgICAgIDs7Ci0gICAgZXNhYwotICBkb25lCi0KLSAgIiRAIiAtRSB8Ci0gICAgc2VkIC1uIC1lICcvXiMgWzAtOV1bMC05XSogIlwoW14iXSpcKSIuKi8gczo6IFwxIFxcOnAnIFwKLSAgICAgICAtZSAnL14jbGluZSBbMC05XVswLTldKiAiXChbXiJdKlwpIi4qLyBzOjogXDEgXFw6cCcgfAotICAgIHNlZCAnJCBzOiBcXCQ6OicgPiAiJHRtcGRlcGZpbGUiCi0gIHJtIC1mICIkZGVwZmlsZSIKLSAgZWNobyAiJG9iamVjdCA6IFxcIiA+ICIkZGVwZmlsZSIKLSAgY2F0IDwgIiR0bXBkZXBmaWxlIiA+PiAiJGRlcGZpbGUiCi0gIHNlZCA8ICIkdG1wZGVwZmlsZSIgJy9eJC9kO3MvXiAvLztzLyBcXCQvLztzLyQvIDovJyA+PiAiJGRlcGZpbGUiCi0gIHJtIC1mICIkdG1wZGVwZmlsZSIKLSAgOzsKLQotbXN2aXN1YWxjcHApCi0gICMgSW1wb3J0YW50IG5vdGU6IGluIG9yZGVyIHRvIHN1cHBvcnQgdGhpcyBtb2RlLCBhIGNvbXBpbGVyICptdXN0KgotICAjIGFsd2F5cyB3cml0ZSB0aGUgcHJlcHJvY2Vzc2VkIGZpbGUgdG8gc3Rkb3V0LgotICAiJEAiIHx8IGV4aXQgJD8KLQotICAjIFJlbW92ZSB0aGUgY2FsbCB0byBMaWJ0b29sLgotICBpZiB0ZXN0ICIkbGlidG9vbCIgPSB5ZXM7IHRoZW4KLSAgICB3aGlsZSB0ZXN0ICJYJDEiICE9ICdYLS1tb2RlPWNvbXBpbGUnOyBkbwotICAgICAgc2hpZnQKLSAgICBkb25lCi0gICAgc2hpZnQKLSAgZmkKLQotICBJRlM9IiAiCi0gIGZvciBhcmcKLSAgZG8KLSAgICBjYXNlICIkYXJnIiBpbgotICAgIC1vKQotICAgICAgc2hpZnQKLSAgICAgIDs7Ci0gICAgJG9iamVjdCkKLSAgICAgIHNoaWZ0Ci0gICAgICA7OwotICAgICItR20ifCIvR20ifCItR2kifCIvR2kifCItWkkifCIvWkkiKQotCXNldCBmbm9yZCAiJEAiCi0Jc2hpZnQKLQlzaGlmdAotCTs7Ci0gICAgKikKLQlzZXQgZm5vcmQgIiRAIiAiJGFyZyIKLQlzaGlmdAotCXNoaWZ0Ci0JOzsKLSAgICBlc2FjCi0gIGRvbmUKLSAgIiRAIiAtRSAyPi9kZXYvbnVsbCB8Ci0gIHNlZCAtbiAnL14jbGluZSBbMC05XVswLTldKiAiXChbXiJdKlwpIi8gczo6XDE6cCcgfCAkY3lncGF0aF91IHwgc29ydCAtdSA+ICIkdG1wZGVwZmlsZSIKLSAgcm0gLWYgIiRkZXBmaWxlIgotICBlY2hvICIkb2JqZWN0IDogXFwiID4gIiRkZXBmaWxlIgotICBzZWQgPCAiJHRtcGRlcGZpbGUiIC1uIC1lICdzJSAlXFwgJWcnIC1lICcvXlwoLipcKSQvIHM6OglcMSBcXDpwJyA+PiAiJGRlcGZpbGUiCi0gIGVjaG8gIgkiID4+ICIkZGVwZmlsZSIKLSAgc2VkIDwgIiR0bXBkZXBmaWxlIiAtbiAtZSAncyUgJVxcICVnJyAtZSAnL15cKC4qXCkkLyBzOjpcMVw6OnAnID4+ICIkZGVwZmlsZSIKLSAgcm0gLWYgIiR0bXBkZXBmaWxlIgotICA7OwotCi1tc3ZjbXN5cykKLSAgIyBUaGlzIGNhc2UgZXhpc3RzIG9ubHkgdG8gbGV0IGRlcGVuZC5tNCBkbyBpdHMgd29yay4gIEl0IHdvcmtzIGJ5Ci0gICMgbG9va2luZyBhdCB0aGUgdGV4dCBvZiB0aGlzIHNjcmlwdC4gIFRoaXMgY2FzZSB3aWxsIG5ldmVyIGJlIHJ1biwKLSAgIyBzaW5jZSBpdCBpcyBjaGVja2VkIGZvciBhYm92ZS4KLSAgZXhpdCAxCi0gIDs7Ci0KLW5vbmUpCi0gIGV4ZWMgIiRAIgotICA7OwotCi0qKQotICBlY2hvICJVbmtub3duIGRlcG1vZGUgJGRlcG1vZGUiIDE+JjIKLSAgZXhpdCAxCi0gIDs7Ci1lc2FjCi0KLWV4aXQgMAotCi0jIExvY2FsIFZhcmlhYmxlczoKLSMgbW9kZTogc2hlbGwtc2NyaXB0Ci0jIHNoLWluZGVudGF0aW9uOiAyCi0jIGV2YWw6IChhZGQtaG9vayAnd3JpdGUtZmlsZS1ob29rcyAndGltZS1zdGFtcCkKLSMgdGltZS1zdGFtcC1zdGFydDogInNjcmlwdHZlcnNpb249IgotIyB0aW1lLXN0YW1wLWZvcm1hdDogIiU6eS0lMDJtLSUwMmQuJTAySCIKLSMgdGltZS1zdGFtcC10aW1lLXpvbmU6ICJVVEMiCi0jIHRpbWUtc3RhbXAtZW5kOiAiOyAjIFVUQyIKLSMgRW5kOgpkaWZmIC0tZ2l0IGEvZGpwZWcuMSBiL2RqcGVnLjEKaW5kZXggZjM3MjJkMS4uZTVlNDZmMiAxMDA2NDQKLS0tIGEvZGpwZWcuMQorKysgYi9kanBlZy4xCkBAIC0xLDQgKzEsNCBAQAotLlRIIERKUEVHIDEgIjMgT2N0b2JlciAyMDA5IgorLlRIIERKUEVHIDEgIjExIE9jdG9iZXIgMjAxMCIKIC5TSCBOQU1FCiBkanBlZyBcLSBkZWNvbXByZXNzIGEgSlBFRyBmaWxlIHRvIGFuIGltYWdlIGZpbGUKIC5TSCBTWU5PUFNJUwpAQCAtNjEsMTIgKzYxLDkgQEAKIHJ1bnMgbm90aWNlYWJseSBmYXN0ZXIgaW4gdGhpcyBtb2RlLgogLlRQCiAuQkkgXC1zY2FsZSAiIE0vTiIKLVNjYWxlIHRoZSBvdXRwdXQgaW1hZ2UgYnkgYSBmYWN0b3IgTS9OLiAgQ3VycmVudGx5IHN1cHBvcnRlZCBzY2FsZSBmYWN0b3JzIGFyZQotTS9OIHdpdGggYWxsIE0gZnJvbSAxIHRvIDE2LCB3aGVyZSBOIGlzIHRoZSBzb3VyY2UgRENUIHNpemUsIHdoaWNoIGlzIDggZm9yCi1iYXNlbGluZSBKUEVHLiAgSWYgdGhlIC9OIHBhcnQgaXMgb21pdHRlZCwgdGhlbiBNIHNwZWNpZmllcyB0aGUgRENUIHNjYWxlZAotc2l6ZSB0byBiZSBhcHBsaWVkIG9uIHRoZSBnaXZlbiBpbnB1dC4gIEZvciBiYXNlbGluZSBKUEVHIHRoaXMgaXMgZXF1aXZhbGVudAotdG8gTS84IHNjYWxpbmcsIHNpbmNlIHRoZSBzb3VyY2UgRENUIHNpemUgZm9yIGJhc2VsaW5lIEpQRUcgaXMgOC4KLVNjYWxpbmcgaXMgaGFuZHkgaWYgdGhlIGltYWdlIGlzIGxhcmdlciB0aGFuIHlvdXIgc2NyZWVuOyBhbHNvLAorU2NhbGUgdGhlIG91dHB1dCBpbWFnZSBieSBhIGZhY3RvciBNL04uICBDdXJyZW50bHkgdGhlIHNjYWxlIGZhY3RvciBtdXN0IGJlCisxLzEsIDEvMiwgMS80LCBvciAxLzguICBTY2FsaW5nIGlzIGhhbmR5IGlmIHRoZSBpbWFnZSBpcyBsYXJnZXIgdGhhbiB5b3VyCitzY3JlZW47IGFsc28sCiAuQiBkanBlZwogcnVucyBtdWNoIGZhc3RlciB3aGVuIHNjYWxpbmcgZG93biB0aGUgb3V0cHV0LgogLlRQCkBAIC0xNTMsNyArMTUwLDcgQEAKIC5CUiBcLW9uZXBhc3MgLgogLlRQCiAuQiBcLW5vc21vb3RoCi1Eb24ndCB1c2UgaGlnaC1xdWFsaXR5IHVwc2FtcGxpbmcuCitVc2UgYSBmYXN0ZXIsIGxvd2VyLXF1YWxpdHkgdXBzYW1wbGluZyByb3V0aW5lLgogLlRQCiAuQiBcLW9uZXBhc3MKIFVzZSBvbmUtcGFzcyBpbnN0ZWFkIG9mIHR3by1wYXNzIGNvbG9yIHF1YW50aXphdGlvbi4gIFRoZSBvbmUtcGFzcyBtZXRob2QgaXMKZGlmZiAtLWdpdCBhL2RqcGVnLmMgYi9kanBlZy5jCmluZGV4IGJjNTQ0ZGMuLjQ2Njk3M2YgMTAwNjQ0Ci0tLSBhL2RqcGVnLmMKKysrIGIvZGpwZWcuYwpAQCAtMiw3ICsyLDcgQEAKICAqIGRqcGVnLmMKICAqCiAgKiBDb3B5cmlnaHQgKEMpIDE5OTEtMTk5NywgVGhvbWFzIEcuIExhbmUuCi0gKiBNb2RpZmllZCAyMDA5IGJ5IEd1aWRvIFZvbGxiZWRpbmcuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTAsIEQuIFIuIENvbW1hbmRlci4KICAqIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBJbmRlcGVuZGVudCBKUEVHIEdyb3VwJ3Mgc29mdHdhcmUuCiAgKiBGb3IgY29uZGl0aW9ucyBvZiBkaXN0cmlidXRpb24gYW5kIHVzZSwgc2VlIHRoZSBhY2NvbXBhbnlpbmcgUkVBRE1FIGZpbGUuCiAgKgpAQCAtMjYsNiArMjYsNyBAQAogCiAjaW5jbHVkZSAiY2RqcGVnLmgiCQkvKiBDb21tb24gZGVjbHMgZm9yIGNqcGVnL2RqcGVnIGFwcGxpY2F0aW9ucyAqLwogI2luY2x1ZGUgImp2ZXJzaW9uLmgiCQkvKiBmb3IgdmVyc2lvbiBtZXNzYWdlICovCisjaW5jbHVkZSAiY29uZmlnLmgiCiAKICNpbmNsdWRlIDxjdHlwZS5oPgkJLyogdG8gZGVjbGFyZSBpc3ByaW50KCkgKi8KIApAQCAtMjQxLDcgKzI0MiwxMCBAQAogICAgICAgc3RhdGljIGJvb2xlYW4gcHJpbnRlZF92ZXJzaW9uID0gRkFMU0U7CiAKICAgICAgIGlmICghIHByaW50ZWRfdmVyc2lvbikgewotCWZwcmludGYoc3RkZXJyLCAiSW5kZXBlbmRlbnQgSlBFRyBHcm91cCdzIERKUEVHLCB2ZXJzaW9uICVzXG4lc1xuIiwKKwlmcHJpbnRmKHN0ZGVyciwgIiVzIHZlcnNpb24gJXMgKGJ1aWxkICVzKVxuIiwKKwkJUEFDS0FHRV9OQU1FLCBWRVJTSU9OLCBCVUlMRCk7CisJZnByaW50ZihzdGRlcnIsICIlc1xuXG4iLCBMSlRDT1BZUklHSFQpOworCWZwcmludGYoc3RkZXJyLCAiQmFzZWQgb24gSW5kZXBlbmRlbnQgSlBFRyBHcm91cCdzIGxpYmpwZWcsIHZlcnNpb24gJXNcbiVzXG5cbiIsCiAJCUpWRVJTSU9OLCBKQ09QWVJJR0hUKTsKIAlwcmludGVkX3ZlcnNpb24gPSBUUlVFOwogICAgICAgfQpAQCAtMzI4LDcgKzMzMiw3IEBACiAgICAgICBpZiAoKythcmduID49IGFyZ2MpCS8qIGFkdmFuY2UgdG8gbmV4dCBhcmd1bWVudCAqLwogCXVzYWdlKCk7CiAgICAgICBpZiAoc3NjYW5mKGFyZ3ZbYXJnbl0sICIlZC8lZCIsCi0JCSAmY2luZm8tPnNjYWxlX251bSwgJmNpbmZvLT5zY2FsZV9kZW5vbSkgPCAxKQorCQkgJmNpbmZvLT5zY2FsZV9udW0sICZjaW5mby0+c2NhbGVfZGVub20pICE9IDIpCiAJdXNhZ2UoKTsKIAogICAgIH0gZWxzZSBpZiAoa2V5bWF0Y2goYXJnLCAidGFyZ2EiLCAxKSkgewpAQCAtNDU2LDcgKzQ2MCw3IEBACiAgICAqIEFQUDEyIGlzIHVzZWQgYnkgc29tZSBkaWdpdGFsIGNhbWVyYSBtYWtlcnMgZm9yIHRleHR1YWwgaW5mbywKICAgICogc28gd2UgcHJvdmlkZSB0aGUgYWJpbGl0eSB0byBkaXNwbGF5IGl0IGFzIHRleHQuCiAgICAqIElmIHlvdSBsaWtlLCBhZGRpdGlvbmFsIEFQUG4gbWFya2VyIHR5cGVzIGNhbiBiZSBzZWxlY3RlZCBmb3IgZGlzcGxheSwKLSAgICogYnV0IGRvbid0IHRyeSB0byBvdmVycmlkZSBBUFAwIG9yIEFQUDE0IHRoaXMgd2F5IChzZWUgbGlianBlZy5kb2MpLgorICAgKiBidXQgZG9uJ3QgdHJ5IHRvIG92ZXJyaWRlIEFQUDAgb3IgQVBQMTQgdGhpcyB3YXkgKHNlZSBsaWJqcGVnLnR4dCkuCiAgICAqLwogICBqcGVnX3NldF9tYXJrZXJfcHJvY2Vzc29yKCZjaW5mbywgSlBFR19DT00sIHByaW50X3RleHRfbWFya2VyKTsKICAganBlZ19zZXRfbWFya2VyX3Byb2Nlc3NvcigmY2luZm8sIEpQRUdfQVBQMCsxMiwgcHJpbnRfdGV4dF9tYXJrZXIpOwpkaWZmIC0tZ2l0IGEvZmlsZWxpc3QudHh0IGIvZmlsZWxpc3QudHh0CmluZGV4IDdlMDUzODYuLjJmOTA1YTYgMTAwNjQ0Ci0tLSBhL2ZpbGVsaXN0LnR4dAorKysgYi9maWxlbGlzdC50eHQKQEAgLTEsNiArMSw2IEBACiBJSkcgSlBFRyBMSUJSQVJZOiAgRklMRSBMSVNUCiAKLUNvcHlyaWdodCAoQykgMTk5NC0yMDA5LCBUaG9tYXMgRy4gTGFuZSwgR3VpZG8gVm9sbGJlZGluZy4KK0NvcHlyaWdodCAoQykgMTk5NC0yMDEwLCBUaG9tYXMgRy4gTGFuZSwgR3VpZG8gVm9sbGJlZGluZywgRC4gUi4gQ29tbWFuZGVyLgogVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEluZGVwZW5kZW50IEpQRUcgR3JvdXAncyBzb2Z0d2FyZS4KIEZvciBjb25kaXRpb25zIG9mIGRpc3RyaWJ1dGlvbiBhbmQgdXNlLCBzZWUgdGhlIGFjY29tcGFueWluZyBSRUFETUUgZmlsZS4KIApAQCAtMjgsNiArMjgsOCBAQAogamluY2x1ZGUuaAlDZW50cmFsIGluY2x1ZGUgZmlsZSB1c2VkIGJ5IGFsbCBJSkcgLmMgZmlsZXMgdG8gcmVmZXJlbmNlCiAJCXN5c3RlbSBpbmNsdWRlIGZpbGVzLgoganBlZ2ludC5oCUpQRUcgbGlicmFyeSdzIGludGVybmFsIGRhdGEgc3RydWN0dXJlcy4KK2pjaHVmZi5oCVByaXZhdGUgZGVjbGFyYXRpb25zIGZvciBIdWZmbWFuIGVuY29kZXIgbW9kdWxlcy4KK2pkaHVmZi5oCVByaXZhdGUgZGVjbGFyYXRpb25zIGZvciBIdWZmbWFuIGRlY29kZXIgbW9kdWxlcy4KIGpkY3QuaAkJUHJpdmF0ZSBkZWNsYXJhdGlvbnMgZm9yIGZvcndhcmQgJiByZXZlcnNlIERDVCBzdWJzeXN0ZW1zLgogam1lbXN5cy5oCVByaXZhdGUgZGVjbGFyYXRpb25zIGZvciBtZW1vcnkgbWFuYWdlbWVudCBzdWJzeXN0ZW0uCiBqdmVyc2lvbi5oCVZlcnNpb24gaW5mb3JtYXRpb24uCkBAIC03MCw3ICs3Miw4IEBACiBqZmRjdGludC5jCUZvcndhcmQgRENUIHVzaW5nIHNsb3ctYnV0LWFjY3VyYXRlIGludGVnZXIgbWV0aG9kLgogamZkY3Rmc3QuYwlGb3J3YXJkIERDVCB1c2luZyBmYXN0ZXIsIGxlc3MgYWNjdXJhdGUgaW50ZWdlciBtZXRob2QuCiBqZmRjdGZsdC5jCUZvcndhcmQgRENUIHVzaW5nIGZsb2F0aW5nLXBvaW50IGFyaXRobWV0aWMuCi1qY2h1ZmYuYwlIdWZmbWFuIGVudHJvcHkgY29kaW5nLgoramNodWZmLmMJSHVmZm1hbiBlbnRyb3B5IGNvZGluZyBmb3Igc2VxdWVudGlhbCBKUEVHLgoramNwaHVmZi5jCUh1ZmZtYW4gZW50cm9weSBjb2RpbmcgZm9yIHByb2dyZXNzaXZlIEpQRUcuCiBqY2FyaXRoLmMJQXJpdGhtZXRpYyBlbnRyb3B5IGNvZGluZy4KIGpjbWFya2VyLmMJSlBFRyBtYXJrZXIgd3JpdGluZy4KIGpkYXRhZHN0LmMJRGF0YSBkZXN0aW5hdGlvbiBtYW5hZ2VycyBmb3IgbWVtb3J5IGFuZCBzdGRpbyBvdXRwdXQuCkBAIC04MywxMiArODYsMTQgQEAKIGpkY29lZmN0LmMJQnVmZmVyIGNvbnRyb2xsZXIgZm9yIERDVCBjb2VmZmljaWVudCBidWZmZXIuCiBqZHBvc3RjdC5jCVBvc3Rwcm9jZXNzb3IgYnVmZmVyIGNvbnRyb2xsZXIuCiBqZG1hcmtlci5jCUpQRUcgbWFya2VyIHJlYWRpbmcuCi1qZGh1ZmYuYwlIdWZmbWFuIGVudHJvcHkgZGVjb2RpbmcuCitqZGh1ZmYuYwlIdWZmbWFuIGVudHJvcHkgZGVjb2RpbmcgZm9yIHNlcXVlbnRpYWwgSlBFRy4KK2pkcGh1ZmYuYwlIdWZmbWFuIGVudHJvcHkgZGVjb2RpbmcgZm9yIHByb2dyZXNzaXZlIEpQRUcuCiBqZGFyaXRoLmMJQXJpdGhtZXRpYyBlbnRyb3B5IGRlY29kaW5nLgogamRkY3RtZ3IuYwlJRENUIG1hbmFnZXIgKElEQ1QgaW1wbGVtZW50YXRpb24gc2VsZWN0aW9uICYgY29udHJvbCkuCiBqaWRjdGludC5jCUludmVyc2UgRENUIHVzaW5nIHNsb3ctYnV0LWFjY3VyYXRlIGludGVnZXIgbWV0aG9kLgogamlkY3Rmc3QuYwlJbnZlcnNlIERDVCB1c2luZyBmYXN0ZXIsIGxlc3MgYWNjdXJhdGUgaW50ZWdlciBtZXRob2QuCiBqaWRjdGZsdC5jCUludmVyc2UgRENUIHVzaW5nIGZsb2F0aW5nLXBvaW50IGFyaXRobWV0aWMuCitqaWRjdHJlZC5jCUludmVyc2UgRENUcyB3aXRoIHJlZHVjZWQtc2l6ZSBvdXRwdXRzLgogamRzYW1wbGUuYwlVcHNhbXBsaW5nLgogamRjb2xvci5jCUNvbG9yIHNwYWNlIGNvbnZlcnNpb24uCiBqZG1lcmdlLmMJTWVyZ2VkIHVwc2FtcGxpbmcvY29sb3IgY29udmVyc2lvbiAoZmFzdGVyLCBsb3dlciBxdWFsaXR5KS4KQEAgLTIwMCwxNCArMjA1LDggQEAKIGluc3RhbGwtc2gJSW5zdGFsbCBzaGVsbCBzY3JpcHQgZm9yIHRob3NlIFVuaXggc3lzdGVtcyBsYWNraW5nIG9uZS4KIE1ha2VmaWxlLmluCU1ha2VmaWxlIGlucHV0IGZvciBjb25maWd1cmUuCiBNYWtlZmlsZS5hbQlTb3VyY2UgZmlsZSBmb3IgdXNlIHdpdGggQXV0b21ha2UgdG8gZ2VuZXJhdGUgTWFrZWZpbGUuaW4uCi1ja2NvbmZpZy5jCVByb2dyYW0gdG8gZ2VuZXJhdGUgamNvbmZpZy5oIG9uIG5vbi1Vbml4IHN5c3RlbXMuCiBqY29uZmlnLnR4dAlUZW1wbGF0ZSBmb3IgbWFraW5nIGpjb25maWcuaCBieSBoYW5kLgotbWFrKi4qCQlTYW1wbGUgbWFrZWZpbGVzIGZvciBwYXJ0aWN1bGFyIHN5c3RlbXMuCi1qY29uZmlnLioJU2FtcGxlIGpjb25maWcuaCBmb3IgcGFydGljdWxhciBzeXN0ZW1zLgotbGlianBlZy5tYXAJU2NyaXB0IHRvIGdlbmVyYXRlIHNoYXJlZCBsaWJyYXJ5IHdpdGggdmVyc2lvbmVkIHN5bWJvbHMuCiBhY2xvY2FsLm00CU00IG1hY3JvIGRlZmluaXRpb25zIGZvciB1c2Ugd2l0aCBBdXRvY29uZi4KLWFuc2kya25yLmMJRGUtQU5TSWZpZXIgZm9yIHByZS1BTlNJIEMgY29tcGlsZXJzIChjb3VydGVzeSBvZgotCQlMLiBQZXRlciBEZXV0c2NoIGFuZCBBbGFkZGluIEVudGVycHJpc2VzKS4KIAogVGVzdCBmaWxlcyAoc2VlIGluc3RhbGwudHh0IGZvciB0ZXN0IHByb2NlZHVyZSk6CiAKZGlmZiAtLWdpdCBhL2luc3RhbGwtc2ggYi9pbnN0YWxsLXNoCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDc1NQppbmRleCA2NzgxYjk4Li4wMDAwMDAwCi0tLSBhL2luc3RhbGwtc2gKKysrIC9kZXYvbnVsbApAQCAtMSw1MjAgKzAsMCBAQAotIyEvYmluL3NoCi0jIGluc3RhbGwgLSBpbnN0YWxsIGEgcHJvZ3JhbSwgc2NyaXB0LCBvciBkYXRhZmlsZQotCi1zY3JpcHR2ZXJzaW9uPTIwMDktMDQtMjguMjE7ICMgVVRDCi0KLSMgVGhpcyBvcmlnaW5hdGVzIGZyb20gWDExUjUgKG1pdC91dGlsL3NjcmlwdHMvaW5zdGFsbC5zaCksIHdoaWNoIHdhcwotIyBsYXRlciByZWxlYXNlZCBpbiBYMTFSNiAoeGMvY29uZmlnL3V0aWwvaW5zdGFsbC5zaCkgd2l0aCB0aGUKLSMgZm9sbG93aW5nIGNvcHlyaWdodCBhbmQgbGljZW5zZS4KLSMKLSMgQ29weXJpZ2h0IChDKSAxOTk0IFggQ29uc29ydGl1bQotIwotIyBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYSBjb3B5Ci0jIG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlICJTb2Z0d2FyZSIpLCB0bwotIyBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgd2l0aG91dCBsaW1pdGF0aW9uIHRoZQotIyByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCBkaXN0cmlidXRlLCBzdWJsaWNlbnNlLCBhbmQvb3IKLSMgc2VsbCBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMKLSMgZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczoKLSMKLSMgVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWQgaW4KLSMgYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuCi0jCi0jIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTIE9SCi0jIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZLAotIyBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiAgSU4gTk8gRVZFTlQgU0hBTEwgVEhFCi0jIFggQ09OU09SVElVTSBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUyBPUiBPVEhFUiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KLSMgQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDLQotIyBUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFIFNPRlRXQVJFLgotIwotIyBFeGNlcHQgYXMgY29udGFpbmVkIGluIHRoaXMgbm90aWNlLCB0aGUgbmFtZSBvZiB0aGUgWCBDb25zb3J0aXVtIHNoYWxsIG5vdAotIyBiZSB1c2VkIGluIGFkdmVydGlzaW5nIG9yIG90aGVyd2lzZSB0byBwcm9tb3RlIHRoZSBzYWxlLCB1c2Ugb3Igb3RoZXIgZGVhbC0KLSMgaW5ncyBpbiB0aGlzIFNvZnR3YXJlIHdpdGhvdXQgcHJpb3Igd3JpdHRlbiBhdXRob3JpemF0aW9uIGZyb20gdGhlIFggQ29uc29yLQotIyB0aXVtLgotIwotIwotIyBGU0YgY2hhbmdlcyB0byB0aGlzIGZpbGUgYXJlIGluIHRoZSBwdWJsaWMgZG9tYWluLgotIwotIyBDYWxsaW5nIHRoaXMgc2NyaXB0IGluc3RhbGwtc2ggaXMgcHJlZmVycmVkIG92ZXIgaW5zdGFsbC5zaCwgdG8gcHJldmVudAotIyBgbWFrZScgaW1wbGljaXQgcnVsZXMgZnJvbSBjcmVhdGluZyBhIGZpbGUgY2FsbGVkIGluc3RhbGwgZnJvbSBpdAotIyB3aGVuIHRoZXJlIGlzIG5vIE1ha2VmaWxlLgotIwotIyBUaGlzIHNjcmlwdCBpcyBjb21wYXRpYmxlIHdpdGggdGhlIEJTRCBpbnN0YWxsIHNjcmlwdCwgYnV0IHdhcyB3cml0dGVuCi0jIGZyb20gc2NyYXRjaC4KLQotbmw9JwotJwotSUZTPSIgIiIJJG5sIgotCi0jIHNldCBET0lUUFJPRyB0byBlY2hvIHRvIHRlc3QgdGhpcyBzY3JpcHQKLQotIyBEb24ndCB1c2UgOi0gc2luY2UgNC4zQlNEIGFuZCBlYXJsaWVyIHNoZWxscyBkb24ndCBsaWtlIGl0LgotZG9pdD0ke0RPSVRQUk9HLX0KLWlmIHRlc3QgLXogIiRkb2l0IjsgdGhlbgotICBkb2l0X2V4ZWM9ZXhlYwotZWxzZQotICBkb2l0X2V4ZWM9JGRvaXQKLWZpCi0KLSMgUHV0IGluIGFic29sdXRlIGZpbGUgbmFtZXMgaWYgeW91IGRvbid0IGhhdmUgdGhlbSBpbiB5b3VyIHBhdGg7Ci0jIG9yIHVzZSBlbnZpcm9ubWVudCB2YXJzLgotCi1jaGdycHByb2c9JHtDSEdSUFBST0ctY2hncnB9Ci1jaG1vZHByb2c9JHtDSE1PRFBST0ctY2htb2R9Ci1jaG93bnByb2c9JHtDSE9XTlBST0ctY2hvd259Ci1jbXBwcm9nPSR7Q01QUFJPRy1jbXB9Ci1jcHByb2c9JHtDUFBST0ctY3B9Ci1ta2RpcnByb2c9JHtNS0RJUlBST0ctbWtkaXJ9Ci1tdnByb2c9JHtNVlBST0ctbXZ9Ci1ybXByb2c9JHtSTVBST0ctcm19Ci1zdHJpcHByb2c9JHtTVFJJUFBST0ctc3RyaXB9Ci0KLXBvc2l4X2dsb2I9Jz8nCi1pbml0aWFsaXplX3Bvc2l4X2dsb2I9JwotICB0ZXN0ICIkcG9zaXhfZ2xvYiIgIT0gIj8iIHx8IHsKLSAgICBpZiAoc2V0IC1mKSAyPi9kZXYvbnVsbDsgdGhlbgotICAgICAgcG9zaXhfZ2xvYj0KLSAgICBlbHNlCi0gICAgICBwb3NpeF9nbG9iPToKLSAgICBmaQotICB9Ci0nCi0KLXBvc2l4X21rZGlyPQotCi0jIERlc2lyZWQgbW9kZSBvZiBpbnN0YWxsZWQgZmlsZS4KLW1vZGU9MDc1NQotCi1jaGdycGNtZD0KLWNobW9kY21kPSRjaG1vZHByb2cKLWNob3duY21kPQotbXZjbWQ9JG12cHJvZwotcm1jbWQ9IiRybXByb2cgLWYiCi1zdHJpcGNtZD0KLQotc3JjPQotZHN0PQotZGlyX2FyZz0KLWRzdF9hcmc9Ci0KLWNvcHlfb25fY2hhbmdlPWZhbHNlCi1ub190YXJnZXRfZGlyZWN0b3J5PQotCi11c2FnZT0iXAotVXNhZ2U6ICQwIFtPUFRJT05dLi4uIFstVF0gU1JDRklMRSBEU1RGSUxFCi0gICBvcjogJDAgW09QVElPTl0uLi4gU1JDRklMRVMuLi4gRElSRUNUT1JZCi0gICBvcjogJDAgW09QVElPTl0uLi4gLXQgRElSRUNUT1JZIFNSQ0ZJTEVTLi4uCi0gICBvcjogJDAgW09QVElPTl0uLi4gLWQgRElSRUNUT1JJRVMuLi4KLQotSW4gdGhlIDFzdCBmb3JtLCBjb3B5IFNSQ0ZJTEUgdG8gRFNURklMRS4KLUluIHRoZSAybmQgYW5kIDNyZCwgY29weSBhbGwgU1JDRklMRVMgdG8gRElSRUNUT1JZLgotSW4gdGhlIDR0aCwgY3JlYXRlIERJUkVDVE9SSUVTLgotCi1PcHRpb25zOgotICAgICAtLWhlbHAgICAgIGRpc3BsYXkgdGhpcyBoZWxwIGFuZCBleGl0LgotICAgICAtLXZlcnNpb24gIGRpc3BsYXkgdmVyc2lvbiBpbmZvIGFuZCBleGl0LgotCi0gIC1jICAgICAgICAgICAgKGlnbm9yZWQpCi0gIC1DICAgICAgICAgICAgaW5zdGFsbCBvbmx5IGlmIGRpZmZlcmVudCAocHJlc2VydmUgdGhlIGxhc3QgZGF0YSBtb2RpZmljYXRpb24gdGltZSkKLSAgLWQgICAgICAgICAgICBjcmVhdGUgZGlyZWN0b3JpZXMgaW5zdGVhZCBvZiBpbnN0YWxsaW5nIGZpbGVzLgotICAtZyBHUk9VUCAgICAgICRjaGdycHByb2cgaW5zdGFsbGVkIGZpbGVzIHRvIEdST1VQLgotICAtbSBNT0RFICAgICAgICRjaG1vZHByb2cgaW5zdGFsbGVkIGZpbGVzIHRvIE1PREUuCi0gIC1vIFVTRVIgICAgICAgJGNob3ducHJvZyBpbnN0YWxsZWQgZmlsZXMgdG8gVVNFUi4KLSAgLXMgICAgICAgICAgICAkc3RyaXBwcm9nIGluc3RhbGxlZCBmaWxlcy4KLSAgLXQgRElSRUNUT1JZICBpbnN0YWxsIGludG8gRElSRUNUT1JZLgotICAtVCAgICAgICAgICAgIHJlcG9ydCBhbiBlcnJvciBpZiBEU1RGSUxFIGlzIGEgZGlyZWN0b3J5LgotCi1FbnZpcm9ubWVudCB2YXJpYWJsZXMgb3ZlcnJpZGUgdGhlIGRlZmF1bHQgY29tbWFuZHM6Ci0gIENIR1JQUFJPRyBDSE1PRFBST0cgQ0hPV05QUk9HIENNUFBST0cgQ1BQUk9HIE1LRElSUFJPRyBNVlBST0cKLSAgUk1QUk9HIFNUUklQUFJPRwotIgotCi13aGlsZSB0ZXN0ICQjIC1uZSAwOyBkbwotICBjYXNlICQxIGluCi0gICAgLWMpIDs7Ci0KLSAgICAtQykgY29weV9vbl9jaGFuZ2U9dHJ1ZTs7Ci0KLSAgICAtZCkgZGlyX2FyZz10cnVlOzsKLQotICAgIC1nKSBjaGdycGNtZD0iJGNoZ3JwcHJvZyAkMiIKLQlzaGlmdDs7Ci0KLSAgICAtLWhlbHApIGVjaG8gIiR1c2FnZSI7IGV4aXQgJD87OwotCi0gICAgLW0pIG1vZGU9JDIKLQljYXNlICRtb2RlIGluCi0JICAqJyAnKiB8IConCScqIHwgKicKLScqCSAgfCAqJyonKiB8IConPycqIHwgKidbJyopCi0JICAgIGVjaG8gIiQwOiBpbnZhbGlkIG1vZGU6ICRtb2RlIiA+JjIKLQkgICAgZXhpdCAxOzsKLQllc2FjCi0Jc2hpZnQ7OwotCi0gICAgLW8pIGNob3duY21kPSIkY2hvd25wcm9nICQyIgotCXNoaWZ0OzsKLQotICAgIC1zKSBzdHJpcGNtZD0kc3RyaXBwcm9nOzsKLQotICAgIC10KSBkc3RfYXJnPSQyCi0Jc2hpZnQ7OwotCi0gICAgLVQpIG5vX3RhcmdldF9kaXJlY3Rvcnk9dHJ1ZTs7Ci0KLSAgICAtLXZlcnNpb24pIGVjaG8gIiQwICRzY3JpcHR2ZXJzaW9uIjsgZXhpdCAkPzs7Ci0KLSAgICAtLSkJc2hpZnQKLQlicmVhazs7Ci0KLSAgICAtKikJZWNobyAiJDA6IGludmFsaWQgb3B0aW9uOiAkMSIgPiYyCi0JZXhpdCAxOzsKLQotICAgICopICBicmVhazs7Ci0gIGVzYWMKLSAgc2hpZnQKLWRvbmUKLQotaWYgdGVzdCAkIyAtbmUgMCAmJiB0ZXN0IC16ICIkZGlyX2FyZyRkc3RfYXJnIjsgdGhlbgotICAjIFdoZW4gLWQgaXMgdXNlZCwgYWxsIHJlbWFpbmluZyBhcmd1bWVudHMgYXJlIGRpcmVjdG9yaWVzIHRvIGNyZWF0ZS4KLSAgIyBXaGVuIC10IGlzIHVzZWQsIHRoZSBkZXN0aW5hdGlvbiBpcyBhbHJlYWR5IHNwZWNpZmllZC4KLSAgIyBPdGhlcndpc2UsIHRoZSBsYXN0IGFyZ3VtZW50IGlzIHRoZSBkZXN0aW5hdGlvbi4gIFJlbW92ZSBpdCBmcm9tICRALgotICBmb3IgYXJnCi0gIGRvCi0gICAgaWYgdGVzdCAtbiAiJGRzdF9hcmciOyB0aGVuCi0gICAgICAjICRAIGlzIG5vdCBlbXB0eTogaXQgY29udGFpbnMgYXQgbGVhc3QgJGFyZy4KLSAgICAgIHNldCBmbm9yZCAiJEAiICIkZHN0X2FyZyIKLSAgICAgIHNoaWZ0ICMgZm5vcmQKLSAgICBmaQotICAgIHNoaWZ0ICMgYXJnCi0gICAgZHN0X2FyZz0kYXJnCi0gIGRvbmUKLWZpCi0KLWlmIHRlc3QgJCMgLWVxIDA7IHRoZW4KLSAgaWYgdGVzdCAteiAiJGRpcl9hcmciOyB0aGVuCi0gICAgZWNobyAiJDA6IG5vIGlucHV0IGZpbGUgc3BlY2lmaWVkLiIgPiYyCi0gICAgZXhpdCAxCi0gIGZpCi0gICMgSXQncyBPSyB0byBjYWxsIGBpbnN0YWxsLXNoIC1kJyB3aXRob3V0IGFyZ3VtZW50LgotICAjIFRoaXMgY2FuIGhhcHBlbiB3aGVuIGNyZWF0aW5nIGNvbmRpdGlvbmFsIGRpcmVjdG9yaWVzLgotICBleGl0IDAKLWZpCi0KLWlmIHRlc3QgLXogIiRkaXJfYXJnIjsgdGhlbgotICB0cmFwICcoZXhpdCAkPyk7IGV4aXQnIDEgMiAxMyAxNQotCi0gICMgU2V0IHVtYXNrIHNvIGFzIG5vdCB0byBjcmVhdGUgdGVtcHMgd2l0aCB0b28tZ2VuZXJvdXMgbW9kZXMuCi0gICMgSG93ZXZlciwgJ3N0cmlwJyByZXF1aXJlcyBib3RoIHJlYWQgYW5kIHdyaXRlIGFjY2VzcyB0byB0ZW1wcy4KLSAgY2FzZSAkbW9kZSBpbgotICAgICMgT3B0aW1pemUgY29tbW9uIGNhc2VzLgotICAgICo2NDQpIGNwX3VtYXNrPTEzMzs7Ci0gICAgKjc1NSkgY3BfdW1hc2s9MjI7OwotCi0gICAgKlswLTddKQotICAgICAgaWYgdGVzdCAteiAiJHN0cmlwY21kIjsgdGhlbgotCXVfcGx1c19ydz0KLSAgICAgIGVsc2UKLQl1X3BsdXNfcnc9JyUgMjAwJwotICAgICAgZmkKLSAgICAgIGNwX3VtYXNrPWBleHByICcoJyA3NzcgLSAkbW9kZSAlIDEwMDAgJyknICR1X3BsdXNfcndgOzsKLSAgICAqKQotICAgICAgaWYgdGVzdCAteiAiJHN0cmlwY21kIjsgdGhlbgotCXVfcGx1c19ydz0KLSAgICAgIGVsc2UKLQl1X3BsdXNfcnc9LHUrcncKLSAgICAgIGZpCi0gICAgICBjcF91bWFzaz0kbW9kZSR1X3BsdXNfcnc7OwotICBlc2FjCi1maQotCi1mb3Igc3JjCi1kbwotICAjIFByb3RlY3QgbmFtZXMgc3RhcnRpbmcgd2l0aCBgLScuCi0gIGNhc2UgJHNyYyBpbgotICAgIC0qKSBzcmM9Li8kc3JjOzsKLSAgZXNhYwotCi0gIGlmIHRlc3QgLW4gIiRkaXJfYXJnIjsgdGhlbgotICAgIGRzdD0kc3JjCi0gICAgZHN0ZGlyPSRkc3QKLSAgICB0ZXN0IC1kICIkZHN0ZGlyIgotICAgIGRzdGRpcl9zdGF0dXM9JD8KLSAgZWxzZQotCi0gICAgIyBXYWl0aW5nIGZvciB0aGlzIHRvIGJlIGRldGVjdGVkIGJ5IHRoZSAiJGNwcHJvZyAkc3JjICRkc3R0bXAiIGNvbW1hbmQKLSAgICAjIG1pZ2h0IGNhdXNlIGRpcmVjdG9yaWVzIHRvIGJlIGNyZWF0ZWQsIHdoaWNoIHdvdWxkIGJlIGVzcGVjaWFsbHkgYmFkCi0gICAgIyBpZiAkc3JjIChhbmQgdGh1cyAkZHN0dG1wKSBjb250YWlucyAnKicuCi0gICAgaWYgdGVzdCAhIC1mICIkc3JjIiAmJiB0ZXN0ICEgLWQgIiRzcmMiOyB0aGVuCi0gICAgICBlY2hvICIkMDogJHNyYyBkb2VzIG5vdCBleGlzdC4iID4mMgotICAgICAgZXhpdCAxCi0gICAgZmkKLQotICAgIGlmIHRlc3QgLXogIiRkc3RfYXJnIjsgdGhlbgotICAgICAgZWNobyAiJDA6IG5vIGRlc3RpbmF0aW9uIHNwZWNpZmllZC4iID4mMgotICAgICAgZXhpdCAxCi0gICAgZmkKLQotICAgIGRzdD0kZHN0X2FyZwotICAgICMgUHJvdGVjdCBuYW1lcyBzdGFydGluZyB3aXRoIGAtJy4KLSAgICBjYXNlICRkc3QgaW4KLSAgICAgIC0qKSBkc3Q9Li8kZHN0OzsKLSAgICBlc2FjCi0KLSAgICAjIElmIGRlc3RpbmF0aW9uIGlzIGEgZGlyZWN0b3J5LCBhcHBlbmQgdGhlIGlucHV0IGZpbGVuYW1lOyB3b24ndCB3b3JrCi0gICAgIyBpZiBkb3VibGUgc2xhc2hlcyBhcmVuJ3QgaWdub3JlZC4KLSAgICBpZiB0ZXN0IC1kICIkZHN0IjsgdGhlbgotICAgICAgaWYgdGVzdCAtbiAiJG5vX3RhcmdldF9kaXJlY3RvcnkiOyB0aGVuCi0JZWNobyAiJDA6ICRkc3RfYXJnOiBJcyBhIGRpcmVjdG9yeSIgPiYyCi0JZXhpdCAxCi0gICAgICBmaQotICAgICAgZHN0ZGlyPSRkc3QKLSAgICAgIGRzdD0kZHN0ZGlyL2BiYXNlbmFtZSAiJHNyYyJgCi0gICAgICBkc3RkaXJfc3RhdHVzPTAKLSAgICBlbHNlCi0gICAgICAjIFByZWZlciBkaXJuYW1lLCBidXQgZmFsbCBiYWNrIG9uIGEgc3Vic3RpdHV0ZSBpZiBkaXJuYW1lIGZhaWxzLgotICAgICAgZHN0ZGlyPWAKLQkoZGlybmFtZSAiJGRzdCIpIDI+L2Rldi9udWxsIHx8Ci0JZXhwciBYIiRkc3QiIDogJ1hcKC4qW14vXVwpLy8qW14vXVteL10qLyokJyBcfCBcCi0JICAgICBYIiRkc3QiIDogJ1hcKC8vXClbXi9dJyBcfCBcCi0JICAgICBYIiRkc3QiIDogJ1hcKC8vXCkkJyBcfCBcCi0JICAgICBYIiRkc3QiIDogJ1hcKC9cKScgXHwgLiAyPi9kZXYvbnVsbCB8fAotCWVjaG8gWCIkZHN0IiB8Ci0JICAgIHNlZCAnL15YXCguKlteL11cKVwvXC8qW14vXVteL10qXC8qJC97Ci0JCSAgIHMvL1wxLwotCQkgICBxCi0JCSB9Ci0JCSAvXlhcKFwvXC9cKVteL10uKi97Ci0JCSAgIHMvL1wxLwotCQkgICBxCi0JCSB9Ci0JCSAvXlhcKFwvXC9cKSQvewotCQkgICBzLy9cMS8KLQkJICAgcQotCQkgfQotCQkgL15YXChcL1wpLiovewotCQkgICBzLy9cMS8KLQkJICAgcQotCQkgfQotCQkgcy8uKi8uLzsgcScKLSAgICAgIGAKLQotICAgICAgdGVzdCAtZCAiJGRzdGRpciIKLSAgICAgIGRzdGRpcl9zdGF0dXM9JD8KLSAgICBmaQotICBmaQotCi0gIG9ic29sZXRlX21rZGlyX3VzZWQ9ZmFsc2UKLQotICBpZiB0ZXN0ICRkc3RkaXJfc3RhdHVzICE9IDA7IHRoZW4KLSAgICBjYXNlICRwb3NpeF9ta2RpciBpbgotICAgICAgJycpCi0JIyBDcmVhdGUgaW50ZXJtZWRpYXRlIGRpcnMgdXNpbmcgbW9kZSA3NTUgYXMgbW9kaWZpZWQgYnkgdGhlIHVtYXNrLgotCSMgVGhpcyBpcyBsaWtlIEZyZWVCU0QgJ2luc3RhbGwnIGFzIG9mIDE5OTctMTAtMjguCi0JdW1hc2s9YHVtYXNrYAotCWNhc2UgJHN0cmlwY21kLiR1bWFzayBpbgotCSAgIyBPcHRpbWl6ZSBjb21tb24gY2FzZXMuCi0JICAqWzIzNjddWzIzNjddKSBta2Rpcl91bWFzaz0kdW1hc2s7OwotCSAgLiowWzAyXVswMl0gfCAuWzAyXVswMl0gfCAuWzAyXSkgbWtkaXJfdW1hc2s9MjI7OwotCi0JICAqWzAtN10pCi0JICAgIG1rZGlyX3VtYXNrPWBleHByICR1bWFzayArIDIyIFwKLQkgICAgICAtICR1bWFzayAlIDEwMCAlIDQwICsgJHVtYXNrICUgMjAgXAotCSAgICAgIC0gJHVtYXNrICUgMTAgJSA0ICsgJHVtYXNrICUgMgotCSAgICBgOzsKLQkgICopIG1rZGlyX3VtYXNrPSR1bWFzayxnby13OzsKLQllc2FjCi0KLQkjIFdpdGggLWQsIGNyZWF0ZSB0aGUgbmV3IGRpcmVjdG9yeSB3aXRoIHRoZSB1c2VyLXNwZWNpZmllZCBtb2RlLgotCSMgT3RoZXJ3aXNlLCByZWx5IG9uICRta2Rpcl91bWFzay4KLQlpZiB0ZXN0IC1uICIkZGlyX2FyZyI7IHRoZW4KLQkgIG1rZGlyX21vZGU9LW0kbW9kZQotCWVsc2UKLQkgIG1rZGlyX21vZGU9Ci0JZmkKLQotCXBvc2l4X21rZGlyPWZhbHNlCi0JY2FzZSAkdW1hc2sgaW4KLQkgICpbMTIzNTY3XVswLTddWzAtN10pCi0JICAgICMgUE9TSVggbWtkaXIgLXAgc2V0cyB1K3d4IGJpdHMgcmVnYXJkbGVzcyBvZiB1bWFzaywgd2hpY2gKLQkgICAgIyBpcyBpbmNvbXBhdGlibGUgd2l0aCBGcmVlQlNEICdpbnN0YWxsJyB3aGVuICh1bWFzayAmIDMwMCkgIT0gMC4KLQkgICAgOzsKLQkgICopCi0JICAgIHRtcGRpcj0ke1RNUERJUi0vdG1wfS9pbnMkUkFORE9NLSQkCi0JICAgIHRyYXAgJ3JldD0kPzsgcm1kaXIgIiR0bXBkaXIvZCIgIiR0bXBkaXIiIDI+L2Rldi9udWxsOyBleGl0ICRyZXQnIDAKLQotCSAgICBpZiAodW1hc2sgJG1rZGlyX3VtYXNrICYmCi0JCWV4ZWMgJG1rZGlycHJvZyAkbWtkaXJfbW9kZSAtcCAtLSAiJHRtcGRpci9kIikgPi9kZXYvbnVsbCAyPiYxCi0JICAgIHRoZW4KLQkgICAgICBpZiB0ZXN0IC16ICIkZGlyX2FyZyIgfHwgewotCQkgICAjIENoZWNrIGZvciBQT1NJWCBpbmNvbXBhdGliaWxpdGllcyB3aXRoIC1tLgotCQkgICAjIEhQLVVYIDExLjIzIGFuZCBJUklYIDYuNSBta2RpciAtbSAtcCBzZXRzIGdyb3VwLSBvcgotCQkgICAjIG90aGVyLXdyaXRlYWJsZSBiaXQgb2YgcGFyZW50IGRpcmVjdG9yeSB3aGVuIGl0IHNob3VsZG4ndC4KLQkJICAgIyBGcmVlQlNEIDYuMSBta2RpciAtbSAtcCBzZXRzIG1vZGUgb2YgZXhpc3RpbmcgZGlyZWN0b3J5LgotCQkgICBsc19sZF90bXBkaXI9YGxzIC1sZCAiJHRtcGRpciJgCi0JCSAgIGNhc2UgJGxzX2xkX3RtcGRpciBpbgotCQkgICAgIGQ/Pz8/LT9yLSopIGRpZmZlcmVudF9tb2RlPTcwMDs7Ci0JCSAgICAgZD8/Pz8tPy0tKikgZGlmZmVyZW50X21vZGU9NzU1OzsKLQkJICAgICAqKSBmYWxzZTs7Ci0JCSAgIGVzYWMgJiYKLQkJICAgJG1rZGlycHJvZyAtbSRkaWZmZXJlbnRfbW9kZSAtcCAtLSAiJHRtcGRpciIgJiYgewotCQkgICAgIGxzX2xkX3RtcGRpcl8xPWBscyAtbGQgIiR0bXBkaXIiYAotCQkgICAgIHRlc3QgIiRsc19sZF90bXBkaXIiID0gIiRsc19sZF90bXBkaXJfMSIKLQkJICAgfQotCQkgfQotCSAgICAgIHRoZW4gcG9zaXhfbWtkaXI9OgotCSAgICAgIGZpCi0JICAgICAgcm1kaXIgIiR0bXBkaXIvZCIgIiR0bXBkaXIiCi0JICAgIGVsc2UKLQkgICAgICAjIFJlbW92ZSBhbnkgZGlycyBsZWZ0IGJlaGluZCBieSBhbmNpZW50IG1rZGlyIGltcGxlbWVudGF0aW9ucy4KLQkgICAgICBybWRpciAuLyRta2Rpcl9tb2RlIC4vLXAgLi8tLSAyPi9kZXYvbnVsbAotCSAgICBmaQotCSAgICB0cmFwICcnIDA7OwotCWVzYWM7OwotICAgIGVzYWMKLQotICAgIGlmCi0gICAgICAkcG9zaXhfbWtkaXIgJiYgKAotCXVtYXNrICRta2Rpcl91bWFzayAmJgotCSRkb2l0X2V4ZWMgJG1rZGlycHJvZyAkbWtkaXJfbW9kZSAtcCAtLSAiJGRzdGRpciIKLSAgICAgICkKLSAgICB0aGVuIDoKLSAgICBlbHNlCi0KLSAgICAgICMgVGhlIHVtYXNrIGlzIHJpZGljdWxvdXMsIG9yIG1rZGlyIGRvZXMgbm90IGNvbmZvcm0gdG8gUE9TSVgsCi0gICAgICAjIG9yIGl0IGZhaWxlZCBwb3NzaWJseSBkdWUgdG8gYSByYWNlIGNvbmRpdGlvbi4gIENyZWF0ZSB0aGUKLSAgICAgICMgZGlyZWN0b3J5IHRoZSBzbG93IHdheSwgc3RlcCBieSBzdGVwLCBjaGVja2luZyBmb3IgcmFjZXMgYXMgd2UgZ28uCi0KLSAgICAgIGNhc2UgJGRzdGRpciBpbgotCS8qKSBwcmVmaXg9Jy8nOzsKLQktKikgcHJlZml4PScuLyc7OwotCSopICBwcmVmaXg9Jyc7OwotICAgICAgZXNhYwotCi0gICAgICBldmFsICIkaW5pdGlhbGl6ZV9wb3NpeF9nbG9iIgotCi0gICAgICBvSUZTPSRJRlMKLSAgICAgIElGUz0vCi0gICAgICAkcG9zaXhfZ2xvYiBzZXQgLWYKLSAgICAgIHNldCBmbm9yZCAkZHN0ZGlyCi0gICAgICBzaGlmdAotICAgICAgJHBvc2l4X2dsb2Igc2V0ICtmCi0gICAgICBJRlM9JG9JRlMKLQotICAgICAgcHJlZml4ZXM9Ci0KLSAgICAgIGZvciBkCi0gICAgICBkbwotCXRlc3QgLXogIiRkIiAmJiBjb250aW51ZQotCi0JcHJlZml4PSRwcmVmaXgkZAotCWlmIHRlc3QgLWQgIiRwcmVmaXgiOyB0aGVuCi0JICBwcmVmaXhlcz0KLQllbHNlCi0JICBpZiAkcG9zaXhfbWtkaXI7IHRoZW4KLQkgICAgKHVtYXNrPSRta2Rpcl91bWFzayAmJgotCSAgICAgJGRvaXRfZXhlYyAkbWtkaXJwcm9nICRta2Rpcl9tb2RlIC1wIC0tICIkZHN0ZGlyIikgJiYgYnJlYWsKLQkgICAgIyBEb24ndCBmYWlsIGlmIHR3byBpbnN0YW5jZXMgYXJlIHJ1bm5pbmcgY29uY3VycmVudGx5LgotCSAgICB0ZXN0IC1kICIkcHJlZml4IiB8fCBleGl0IDEKLQkgIGVsc2UKLQkgICAgY2FzZSAkcHJlZml4IGluCi0JICAgICAgKlwnKikgcXByZWZpeD1gZWNobyAiJHByZWZpeCIgfCBzZWQgInMvJy8nXFxcXFxcXFwnJy9nImA7OwotCSAgICAgICopIHFwcmVmaXg9JHByZWZpeDs7Ci0JICAgIGVzYWMKLQkgICAgcHJlZml4ZXM9IiRwcmVmaXhlcyAnJHFwcmVmaXgnIgotCSAgZmkKLQlmaQotCXByZWZpeD0kcHJlZml4LwotICAgICAgZG9uZQotCi0gICAgICBpZiB0ZXN0IC1uICIkcHJlZml4ZXMiOyB0aGVuCi0JIyBEb24ndCBmYWlsIGlmIHR3byBpbnN0YW5jZXMgYXJlIHJ1bm5pbmcgY29uY3VycmVudGx5LgotCSh1bWFzayAkbWtkaXJfdW1hc2sgJiYKLQkgZXZhbCAiXCRkb2l0X2V4ZWMgXCRta2RpcnByb2cgJHByZWZpeGVzIikgfHwKLQkgIHRlc3QgLWQgIiRkc3RkaXIiIHx8IGV4aXQgMQotCW9ic29sZXRlX21rZGlyX3VzZWQ9dHJ1ZQotICAgICAgZmkKLSAgICBmaQotICBmaQotCi0gIGlmIHRlc3QgLW4gIiRkaXJfYXJnIjsgdGhlbgotICAgIHsgdGVzdCAteiAiJGNob3duY21kIiB8fCAkZG9pdCAkY2hvd25jbWQgIiRkc3QiOyB9ICYmCi0gICAgeyB0ZXN0IC16ICIkY2hncnBjbWQiIHx8ICRkb2l0ICRjaGdycGNtZCAiJGRzdCI7IH0gJiYKLSAgICB7IHRlc3QgIiRvYnNvbGV0ZV9ta2Rpcl91c2VkJGNob3duY21kJGNoZ3JwY21kIiA9IGZhbHNlIHx8Ci0gICAgICB0ZXN0IC16ICIkY2htb2RjbWQiIHx8ICRkb2l0ICRjaG1vZGNtZCAkbW9kZSAiJGRzdCI7IH0gfHwgZXhpdCAxCi0gIGVsc2UKLQotICAgICMgTWFrZSBhIGNvdXBsZSBvZiB0ZW1wIGZpbGUgbmFtZXMgaW4gdGhlIHByb3BlciBkaXJlY3RvcnkuCi0gICAgZHN0dG1wPSRkc3RkaXIvX2luc3QuJCRfCi0gICAgcm10bXA9JGRzdGRpci9fcm0uJCRfCi0KLSAgICAjIFRyYXAgdG8gY2xlYW4gdXAgdGhvc2UgdGVtcCBmaWxlcyBhdCBleGl0LgotICAgIHRyYXAgJ3JldD0kPzsgcm0gLWYgIiRkc3R0bXAiICIkcm10bXAiICYmIGV4aXQgJHJldCcgMAotCi0gICAgIyBDb3B5IHRoZSBmaWxlIG5hbWUgdG8gdGhlIHRlbXAgbmFtZS4KLSAgICAodW1hc2sgJGNwX3VtYXNrICYmICRkb2l0X2V4ZWMgJGNwcHJvZyAiJHNyYyIgIiRkc3R0bXAiKSAmJgotCi0gICAgIyBhbmQgc2V0IGFueSBvcHRpb25zOyBkbyBjaG1vZCBsYXN0IHRvIHByZXNlcnZlIHNldHVpZCBiaXRzLgotICAgICMKLSAgICAjIElmIGFueSBvZiB0aGVzZSBmYWlsLCB3ZSBhYm9ydCB0aGUgd2hvbGUgdGhpbmcuICBJZiB3ZSB3YW50IHRvCi0gICAgIyBpZ25vcmUgZXJyb3JzIGZyb20gYW55IG9mIHRoZXNlLCBqdXN0IG1ha2Ugc3VyZSBub3QgdG8gaWdub3JlCi0gICAgIyBlcnJvcnMgZnJvbSB0aGUgYWJvdmUgIiRkb2l0ICRjcHByb2cgJHNyYyAkZHN0dG1wIiBjb21tYW5kLgotICAgICMKLSAgICB7IHRlc3QgLXogIiRjaG93bmNtZCIgfHwgJGRvaXQgJGNob3duY21kICIkZHN0dG1wIjsgfSAmJgotICAgIHsgdGVzdCAteiAiJGNoZ3JwY21kIiB8fCAkZG9pdCAkY2hncnBjbWQgIiRkc3R0bXAiOyB9ICYmCi0gICAgeyB0ZXN0IC16ICIkc3RyaXBjbWQiIHx8ICRkb2l0ICRzdHJpcGNtZCAiJGRzdHRtcCI7IH0gJiYKLSAgICB7IHRlc3QgLXogIiRjaG1vZGNtZCIgfHwgJGRvaXQgJGNobW9kY21kICRtb2RlICIkZHN0dG1wIjsgfSAmJgotCi0gICAgIyBJZiAtQywgZG9uJ3QgYm90aGVyIHRvIGNvcHkgaWYgaXQgd291bGRuJ3QgY2hhbmdlIHRoZSBmaWxlLgotICAgIGlmICRjb3B5X29uX2NoYW5nZSAmJgotICAgICAgIG9sZD1gTENfQUxMPUMgbHMgLWRsTCAiJGRzdCIJMj4vZGV2L251bGxgICYmCi0gICAgICAgbmV3PWBMQ19BTEw9QyBscyAtZGxMICIkZHN0dG1wIgkyPi9kZXYvbnVsbGAgJiYKLQotICAgICAgIGV2YWwgIiRpbml0aWFsaXplX3Bvc2l4X2dsb2IiICYmCi0gICAgICAgJHBvc2l4X2dsb2Igc2V0IC1mICYmCi0gICAgICAgc2V0IFggJG9sZCAmJiBvbGQ9OiQyOiQ0OiQ1OiQ2ICYmCi0gICAgICAgc2V0IFggJG5ldyAmJiBuZXc9OiQyOiQ0OiQ1OiQ2ICYmCi0gICAgICAgJHBvc2l4X2dsb2Igc2V0ICtmICYmCi0KLSAgICAgICB0ZXN0ICIkb2xkIiA9ICIkbmV3IiAmJgotICAgICAgICRjbXBwcm9nICIkZHN0IiAiJGRzdHRtcCIgPi9kZXYvbnVsbCAyPiYxCi0gICAgdGhlbgotICAgICAgcm0gLWYgIiRkc3R0bXAiCi0gICAgZWxzZQotICAgICAgIyBSZW5hbWUgdGhlIGZpbGUgdG8gdGhlIHJlYWwgZGVzdGluYXRpb24uCi0gICAgICAkZG9pdCAkbXZjbWQgLWYgIiRkc3R0bXAiICIkZHN0IiAyPi9kZXYvbnVsbCB8fAotCi0gICAgICAjIFRoZSByZW5hbWUgZmFpbGVkLCBwZXJoYXBzIGJlY2F1c2UgbXYgY2FuJ3QgcmVuYW1lIHNvbWV0aGluZyBlbHNlCi0gICAgICAjIHRvIGl0c2VsZiwgb3IgcGVyaGFwcyBiZWNhdXNlIG12IGlzIHNvIGFuY2llbnQgdGhhdCBpdCBkb2VzIG5vdAotICAgICAgIyBzdXBwb3J0IC1mLgotICAgICAgewotCSMgTm93IHJlbW92ZSBvciBtb3ZlIGFzaWRlIGFueSBvbGQgZmlsZSBhdCBkZXN0aW5hdGlvbiBsb2NhdGlvbi4KLQkjIFdlIHRyeSB0aGlzIHR3byB3YXlzIHNpbmNlIHJtIGNhbid0IHVubGluayBpdHNlbGYgb24gc29tZQotCSMgc3lzdGVtcyBhbmQgdGhlIGRlc3RpbmF0aW9uIGZpbGUgbWlnaHQgYmUgYnVzeSBmb3Igb3RoZXIKLQkjIHJlYXNvbnMuICBJbiB0aGlzIGNhc2UsIHRoZSBmaW5hbCBjbGVhbnVwIG1pZ2h0IGZhaWwgYnV0IHRoZSBuZXcKLQkjIGZpbGUgc2hvdWxkIHN0aWxsIGluc3RhbGwgc3VjY2Vzc2Z1bGx5LgotCXsKLQkgIHRlc3QgISAtZiAiJGRzdCIgfHwKLQkgICRkb2l0ICRybWNtZCAtZiAiJGRzdCIgMj4vZGV2L251bGwgfHwKLQkgIHsgJGRvaXQgJG12Y21kIC1mICIkZHN0IiAiJHJtdG1wIiAyPi9kZXYvbnVsbCAmJgotCSAgICB7ICRkb2l0ICRybWNtZCAtZiAiJHJtdG1wIiAyPi9kZXYvbnVsbDsgOjsgfQotCSAgfSB8fAotCSAgeyBlY2hvICIkMDogY2Fubm90IHVubGluayBvciByZW5hbWUgJGRzdCIgPiYyCi0JICAgIChleGl0IDEpOyBleGl0IDEKLQkgIH0KLQl9ICYmCi0KLQkjIE5vdyByZW5hbWUgdGhlIGZpbGUgdG8gdGhlIHJlYWwgZGVzdGluYXRpb24uCi0JJGRvaXQgJG12Y21kICIkZHN0dG1wIiAiJGRzdCIKLSAgICAgIH0KLSAgICBmaSB8fCBleGl0IDEKLQotICAgIHRyYXAgJycgMAotICBmaQotZG9uZQotCi0jIExvY2FsIHZhcmlhYmxlczoKLSMgZXZhbDogKGFkZC1ob29rICd3cml0ZS1maWxlLWhvb2tzICd0aW1lLXN0YW1wKQotIyB0aW1lLXN0YW1wLXN0YXJ0OiAic2NyaXB0dmVyc2lvbj0iCi0jIHRpbWUtc3RhbXAtZm9ybWF0OiAiJTp5LSUwMm0tJTAyZC4lMDJIIgotIyB0aW1lLXN0YW1wLXRpbWUtem9uZTogIlVUQyIKLSMgdGltZS1zdGFtcC1lbmQ6ICI7ICMgVVRDIgotIyBFbmQ6CmRpZmYgLS1naXQgYS9qY2FwaW1pbi5jIGIvamNhcGltaW4uYwppbmRleCA2MzljZTg2Li4yMGJhOWU5IDEwMDY0NAotLS0gYS9qY2FwaW1pbi5jCisrKyBiL2pjYXBpbWluLmMKQEAgLTY2LDcgKzY2LDkgQEAKIAogICBmb3IgKGkgPSAwOyBpIDwgTlVNX1FVQU5UX1RCTFM7IGkrKykgewogICAgIGNpbmZvLT5xdWFudF90YmxfcHRyc1tpXSA9IE5VTEw7CisjaWYgSlBFR19MSUJfVkVSU0lPTiA+PSA3MAogICAgIGNpbmZvLT5xX3NjYWxlX2ZhY3RvcltpXSA9IDEwMDsKKyNlbmRpZgogICB9CiAKICAgZm9yIChpID0gMDsgaSA8IE5VTV9IVUZGX1RCTFM7IGkrKykgewpAQCAtNzQsMTAgKzc2LDEyIEBACiAgICAgY2luZm8tPmFjX2h1ZmZfdGJsX3B0cnNbaV0gPSBOVUxMOwogICB9CiAKKyNpZiBKUEVHX0xJQl9WRVJTSU9OID49IDgwCiAgIC8qIE11c3QgZG8gaXQgaGVyZSBmb3IgZW1pdF9kcXQgaW4gY2FzZSBqcGVnX3dyaXRlX3RhYmxlcyBpcyB1c2VkICovCiAgIGNpbmZvLT5ibG9ja19zaXplID0gRENUU0laRTsKICAgY2luZm8tPm5hdHVyYWxfb3JkZXIgPSBqcGVnX25hdHVyYWxfb3JkZXI7CiAgIGNpbmZvLT5saW1fU2UgPSBEQ1RTSVpFMi0xOworI2VuZGlmCiAKICAgY2luZm8tPnNjcmlwdF9zcGFjZSA9IE5VTEw7CiAKZGlmZiAtLWdpdCBhL2pjYXJpdGguYyBiL2pjYXJpdGguYwppbmRleCAwYjdlYTU1Li5hOWNhMWMzIDEwMDY0NAotLS0gYS9qY2FyaXRoLmMKKysrIGIvamNhcml0aC5jCkBAIC0zMzEsMTQgKzMzMSwxNCBAQAogICBmb3IgKGNpID0gMDsgY2kgPCBjaW5mby0+Y29tcHNfaW5fc2NhbjsgY2krKykgewogICAgIGNvbXBwdHIgPSBjaW5mby0+Y3VyX2NvbXBfaW5mb1tjaV07CiAgICAgLyogREMgbmVlZHMgbm8gdGFibGUgZm9yIHJlZmluZW1lbnQgc2NhbiAqLwotICAgIGlmIChjaW5mby0+U3MgPT0gMCAmJiBjaW5mby0+QWggPT0gMCkgeworICAgIGlmIChjaW5mby0+cHJvZ3Jlc3NpdmVfbW9kZSA9PSAwIHx8IChjaW5mby0+U3MgPT0gMCAmJiBjaW5mby0+QWggPT0gMCkpIHsKICAgICAgIE1FTVpFUk8oZW50cm9weS0+ZGNfc3RhdHNbY29tcHB0ci0+ZGNfdGJsX25vXSwgRENfU1RBVF9CSU5TKTsKICAgICAgIC8qIFJlc2V0IERDIHByZWRpY3Rpb25zIHRvIDAgKi8KICAgICAgIGVudHJvcHktPmxhc3RfZGNfdmFsW2NpXSA9IDA7CiAgICAgICBlbnRyb3B5LT5kY19jb250ZXh0W2NpXSA9IDA7CiAgICAgfQogICAgIC8qIEFDIG5lZWRzIG5vIHRhYmxlIHdoZW4gbm90IHByZXNlbnQgKi8KLSAgICBpZiAoY2luZm8tPlNlKSB7CisgICAgaWYgKGNpbmZvLT5wcm9ncmVzc2l2ZV9tb2RlID09IDAgfHwgY2luZm8tPlNlKSB7CiAgICAgICBNRU1aRVJPKGVudHJvcHktPmFjX3N0YXRzW2NvbXBwdHItPmFjX3RibF9ub10sIEFDX1NUQVRfQklOUyk7CiAgICAgfQogICB9CkBAIC00NTcsNyArNDU3LDYgQEAKICAgdW5zaWduZWQgY2hhciAqc3Q7CiAgIGludCB0YmwsIGssIGtlOwogICBpbnQgdiwgdjIsIG07Ci0gIGNvbnN0IGludCAqIG5hdHVyYWxfb3JkZXI7CiAKICAgLyogRW1pdCByZXN0YXJ0IG1hcmtlciBpZiBuZWVkZWQgKi8KICAgaWYgKGNpbmZvLT5yZXN0YXJ0X2ludGVydmFsKSB7CkBAIC00NzAsOCArNDY5LDYgQEAKICAgICBlbnRyb3B5LT5yZXN0YXJ0c190b19nby0tOwogICB9CiAKLSAgbmF0dXJhbF9vcmRlciA9IGNpbmZvLT5uYXR1cmFsX29yZGVyOwotCiAgIC8qIEVuY29kZSB0aGUgTUNVIGRhdGEgYmxvY2sgKi8KICAgYmxvY2sgPSBNQ1VfZGF0YVswXTsKICAgdGJsID0gY2luZm8tPmN1cl9jb21wX2luZm9bMF0tPmFjX3RibF9ubzsKQEAgLTQ4NCw3ICs0ODEsNyBAQAogICAgICAqIGlzIGFuIGludGVnZXIgZGl2aXNpb24gd2l0aCByb3VuZGluZyB0b3dhcmRzIDAuICBUbyBkbyB0aGlzIHBvcnRhYmx5CiAgICAgICogaW4gQywgd2Ugc2hpZnQgYWZ0ZXIgb2J0YWluaW5nIHRoZSBhYnNvbHV0ZSB2YWx1ZS4KICAgICAgKi8KLSAgICBpZiAoKHYgPSAoKmJsb2NrKVtuYXR1cmFsX29yZGVyW2tlXV0pID49IDApIHsKKyAgICBpZiAoKHYgPSAoKmJsb2NrKVtqcGVnX25hdHVyYWxfb3JkZXJba2VdXSkgPj0gMCkgewogICAgICAgaWYgKHYgPj49IGNpbmZvLT5BbCkgYnJlYWs7CiAgICAgfSBlbHNlIHsKICAgICAgIHYgPSAtdjsKQEAgLTQ5Niw3ICs0OTMsNyBAQAogICAgIHN0ID0gZW50cm9weS0+YWNfc3RhdHNbdGJsXSArIDMgKiAoayAtIDEpOwogICAgIGFyaXRoX2VuY29kZShjaW5mbywgc3QsIDApOwkJLyogRU9CIGRlY2lzaW9uICovCiAgICAgZm9yICg7OykgewotICAgICAgaWYgKCh2ID0gKCpibG9jaylbbmF0dXJhbF9vcmRlcltrXV0pID49IDApIHsKKyAgICAgIGlmICgodiA9ICgqYmxvY2spW2pwZWdfbmF0dXJhbF9vcmRlcltrXV0pID49IDApIHsKIAlpZiAodiA+Pj0gY2luZm8tPkFsKSB7CiAJICBhcml0aF9lbmNvZGUoY2luZm8sIHN0ICsgMSwgMSk7CiAJICBhcml0aF9lbmNvZGUoY2luZm8sIGVudHJvcHktPmZpeGVkX2JpbiwgMCk7CkBAIC01OTQsNyArNTkxLDYgQEAKICAgdW5zaWduZWQgY2hhciAqc3Q7CiAgIGludCB0YmwsIGssIGtlLCBrZXg7CiAgIGludCB2OwotICBjb25zdCBpbnQgKiBuYXR1cmFsX29yZGVyOwogCiAgIC8qIEVtaXQgcmVzdGFydCBtYXJrZXIgaWYgbmVlZGVkICovCiAgIGlmIChjaW5mby0+cmVzdGFydF9pbnRlcnZhbCkgewpAQCAtNjA3LDggKzYwMyw2IEBACiAgICAgZW50cm9weS0+cmVzdGFydHNfdG9fZ28tLTsKICAgfQogCi0gIG5hdHVyYWxfb3JkZXIgPSBjaW5mby0+bmF0dXJhbF9vcmRlcjsKLQogICAvKiBFbmNvZGUgdGhlIE1DVSBkYXRhIGJsb2NrICovCiAgIGJsb2NrID0gTUNVX2RhdGFbMF07CiAgIHRibCA9IGNpbmZvLT5jdXJfY29tcF9pbmZvWzBdLT5hY190Ymxfbm87CkBAIC02MjEsNyArNjE1LDcgQEAKICAgICAgKiBpcyBhbiBpbnRlZ2VyIGRpdmlzaW9uIHdpdGggcm91bmRpbmcgdG93YXJkcyAwLiAgVG8gZG8gdGhpcyBwb3J0YWJseQogICAgICAqIGluIEMsIHdlIHNoaWZ0IGFmdGVyIG9idGFpbmluZyB0aGUgYWJzb2x1dGUgdmFsdWUuCiAgICAgICovCi0gICAgaWYgKCh2ID0gKCpibG9jaylbbmF0dXJhbF9vcmRlcltrZV1dKSA+PSAwKSB7CisgICAgaWYgKCh2ID0gKCpibG9jaylbanBlZ19uYXR1cmFsX29yZGVyW2tlXV0pID49IDApIHsKICAgICAgIGlmICh2ID4+PSBjaW5mby0+QWwpIGJyZWFrOwogICAgIH0gZWxzZSB7CiAgICAgICB2ID0gLXY7CkBAIC02MzAsNyArNjI0LDcgQEAKIAogICAvKiBFc3RhYmxpc2ggRU9CeCAocHJldmlvdXMgc3RhZ2UgZW5kLW9mLWJsb2NrKSBpbmRleCAqLwogICBmb3IgKGtleCA9IGtlOyBrZXggPiAwOyBrZXgtLSkKLSAgICBpZiAoKHYgPSAoKmJsb2NrKVtuYXR1cmFsX29yZGVyW2tleF1dKSA+PSAwKSB7CisgICAgaWYgKCh2ID0gKCpibG9jaylbanBlZ19uYXR1cmFsX29yZGVyW2tleF1dKSA+PSAwKSB7CiAgICAgICBpZiAodiA+Pj0gY2luZm8tPkFoKSBicmVhazsKICAgICB9IGVsc2UgewogICAgICAgdiA9IC12OwpAQCAtNjQzLDcgKzYzNyw3IEBACiAgICAgaWYgKGsgPiBrZXgpCiAgICAgICBhcml0aF9lbmNvZGUoY2luZm8sIHN0LCAwKTsJLyogRU9CIGRlY2lzaW9uICovCiAgICAgZm9yICg7OykgewotICAgICAgaWYgKCh2ID0gKCpibG9jaylbbmF0dXJhbF9vcmRlcltrXV0pID49IDApIHsKKyAgICAgIGlmICgodiA9ICgqYmxvY2spW2pwZWdfbmF0dXJhbF9vcmRlcltrXV0pID49IDApIHsKIAlpZiAodiA+Pj0gY2luZm8tPkFsKSB7CiAJICBpZiAodiA+PiAxKQkJCS8qIHByZXZpb3VzbHkgbm9uemVybyBjb2VmICovCiAJICAgIGFyaXRoX2VuY29kZShjaW5mbywgc3QgKyAyLCAodiAmIDEpKTsKQEAgLTY5MSw3ICs2ODUsNiBAQAogICB1bnNpZ25lZCBjaGFyICpzdDsKICAgaW50IGJsa24sIGNpLCB0YmwsIGssIGtlOwogICBpbnQgdiwgdjIsIG07Ci0gIGNvbnN0IGludCAqIG5hdHVyYWxfb3JkZXI7CiAKICAgLyogRW1pdCByZXN0YXJ0IG1hcmtlciBpZiBuZWVkZWQgKi8KICAgaWYgKGNpbmZvLT5yZXN0YXJ0X2ludGVydmFsKSB7CkBAIC03MDQsOCArNjk3LDYgQEAKICAgICBlbnRyb3B5LT5yZXN0YXJ0c190b19nby0tOwogICB9CiAKLSAgbmF0dXJhbF9vcmRlciA9IGNpbmZvLT5uYXR1cmFsX29yZGVyOwotCiAgIC8qIEVuY29kZSB0aGUgTUNVIGRhdGEgYmxvY2tzICovCiAgIGZvciAoYmxrbiA9IDA7IGJsa24gPCBjaW5mby0+YmxvY2tzX2luX01DVTsgYmxrbisrKSB7CiAgICAgYmxvY2sgPSBNQ1VfZGF0YVtibGtuXTsKQEAgLTc2OCwxNCArNzU5LDE0IEBACiAgICAgdGJsID0gY29tcHB0ci0+YWNfdGJsX25vOwogCiAgICAgLyogRXN0YWJsaXNoIEVPQiAoZW5kLW9mLWJsb2NrKSBpbmRleCAqLwotICAgIGZvciAoa2UgPSBjaW5mby0+bGltX1NlOyBrZSA+IDA7IGtlLS0pCi0gICAgICBpZiAoKCpibG9jaylbbmF0dXJhbF9vcmRlcltrZV1dKSBicmVhazsKKyAgICBmb3IgKGtlID0gRENUU0laRTIgLSAxOyBrZSA+IDA7IGtlLS0pCisgICAgICBpZiAoKCpibG9jaylbanBlZ19uYXR1cmFsX29yZGVyW2tlXV0pIGJyZWFrOwogCiAgICAgLyogRmlndXJlIEYuNTogRW5jb2RlX0FDX0NvZWZmaWNpZW50cyAqLwogICAgIGZvciAoayA9IDE7IGsgPD0ga2U7IGsrKykgewogICAgICAgc3QgPSBlbnRyb3B5LT5hY19zdGF0c1t0YmxdICsgMyAqIChrIC0gMSk7CiAgICAgICBhcml0aF9lbmNvZGUoY2luZm8sIHN0LCAwKTsJLyogRU9CIGRlY2lzaW9uICovCi0gICAgICB3aGlsZSAoKHYgPSAoKmJsb2NrKVtuYXR1cmFsX29yZGVyW2tdXSkgPT0gMCkgeworICAgICAgd2hpbGUgKCh2ID0gKCpibG9jaylbanBlZ19uYXR1cmFsX29yZGVyW2tdXSkgPT0gMCkgewogCWFyaXRoX2VuY29kZShjaW5mbywgc3QgKyAxLCAwKTsgc3QgKz0gMzsgaysrOwogICAgICAgfQogICAgICAgYXJpdGhfZW5jb2RlKGNpbmZvLCBzdCArIDEsIDEpOwpAQCAtODEyLDggKzgwMyw4IEBACiAgICAgICB3aGlsZSAobSA+Pj0gMSkKIAlhcml0aF9lbmNvZGUoY2luZm8sIHN0LCAobSAmIHYpID8gMSA6IDApOwogICAgIH0KLSAgICAvKiBFbmNvZGUgRU9CIGRlY2lzaW9uIG9ubHkgaWYgayA8PSBjaW5mby0+bGltX1NlICovCi0gICAgaWYgKGsgPD0gY2luZm8tPmxpbV9TZSkgeworICAgIC8qIEVuY29kZSBFT0IgZGVjaXNpb24gb25seSBpZiBrIDw9IERDVFNJWkUyIC0gMSAqLworICAgIGlmIChrIDw9IERDVFNJWkUyIC0gMSkgewogICAgICAgc3QgPSBlbnRyb3B5LT5hY19zdGF0c1t0YmxdICsgMyAqIChrIC0gMSk7CiAgICAgICBhcml0aF9lbmNvZGUoY2luZm8sIHN0LCAxKTsKICAgICB9CkBAIC04NjMsNyArODU0LDcgQEAKICAgZm9yIChjaSA9IDA7IGNpIDwgY2luZm8tPmNvbXBzX2luX3NjYW47IGNpKyspIHsKICAgICBjb21wcHRyID0gY2luZm8tPmN1cl9jb21wX2luZm9bY2ldOwogICAgIC8qIERDIG5lZWRzIG5vIHRhYmxlIGZvciByZWZpbmVtZW50IHNjYW4gKi8KLSAgICBpZiAoY2luZm8tPlNzID09IDAgJiYgY2luZm8tPkFoID09IDApIHsKKyAgICBpZiAoY2luZm8tPnByb2dyZXNzaXZlX21vZGUgPT0gMCB8fCAoY2luZm8tPlNzID09IDAgJiYgY2luZm8tPkFoID09IDApKSB7CiAgICAgICB0YmwgPSBjb21wcHRyLT5kY190Ymxfbm87CiAgICAgICBpZiAodGJsIDwgMCB8fCB0YmwgPj0gTlVNX0FSSVRIX1RCTFMpCiAJRVJSRVhJVDEoY2luZm8sIEpFUlJfTk9fQVJJVEhfVEFCTEUsIHRibCk7CkBAIC04NzYsNyArODY3LDcgQEAKICAgICAgIGVudHJvcHktPmRjX2NvbnRleHRbY2ldID0gMDsKICAgICB9CiAgICAgLyogQUMgbmVlZHMgbm8gdGFibGUgd2hlbiBub3QgcHJlc2VudCAqLwotICAgIGlmIChjaW5mby0+U2UpIHsKKyAgICBpZiAoY2luZm8tPnByb2dyZXNzaXZlX21vZGUgPT0gMCB8fCBjaW5mby0+U2UpIHsKICAgICAgIHRibCA9IGNvbXBwdHItPmFjX3RibF9ubzsKICAgICAgIGlmICh0YmwgPCAwIHx8IHRibCA+PSBOVU1fQVJJVEhfVEJMUykKIAlFUlJFWElUMShjaW5mbywgSkVSUl9OT19BUklUSF9UQUJMRSwgdGJsKTsKZGlmZiAtLWdpdCBhL2pjY29lZmN0LmMgYi9qY2NvZWZjdC5jCmluZGV4IGQ3NzUzMTMuLjE5NjNkZGIgMTAwNjQ0Ci0tLSBhL2pjY29lZmN0LmMKKysrIGIvamNjb2VmY3QuYwpAQCAtMTQ5LDcgKzE0OSw2IEBACiAgIGludCBibGtuLCBiaSwgY2ksIHlpbmRleCwgeW9mZnNldCwgYmxvY2tjbnQ7CiAgIEpESU1FTlNJT04geXBvcywgeHBvczsKICAganBlZ19jb21wb25lbnRfaW5mbyAqY29tcHB0cjsKLSAgZm9yd2FyZF9EQ1RfcHRyIGZvcndhcmRfRENUOwogCiAgIC8qIExvb3AgdG8gd3JpdGUgYXMgbXVjaCBhcyBvbmUgd2hvbGUgaU1DVSByb3cgKi8KICAgZm9yICh5b2Zmc2V0ID0gY29lZi0+TUNVX3ZlcnRfb2Zmc2V0OyB5b2Zmc2V0IDwgY29lZi0+TUNVX3Jvd3NfcGVyX2lNQ1Vfcm93OwpAQCAtMTY4LDE5ICsxNjcsMTcgQEAKICAgICAgIGJsa24gPSAwOwogICAgICAgZm9yIChjaSA9IDA7IGNpIDwgY2luZm8tPmNvbXBzX2luX3NjYW47IGNpKyspIHsKIAljb21wcHRyID0gY2luZm8tPmN1cl9jb21wX2luZm9bY2ldOwotCWZvcndhcmRfRENUID0gY2luZm8tPmZkY3QtPmZvcndhcmRfRENUW2NvbXBwdHItPmNvbXBvbmVudF9pbmRleF07CiAJYmxvY2tjbnQgPSAoTUNVX2NvbF9udW0gPCBsYXN0X01DVV9jb2wpID8gY29tcHB0ci0+TUNVX3dpZHRoCiAJCQkJCQk6IGNvbXBwdHItPmxhc3RfY29sX3dpZHRoOwogCXhwb3MgPSBNQ1VfY29sX251bSAqIGNvbXBwdHItPk1DVV9zYW1wbGVfd2lkdGg7Ci0JeXBvcyA9IHlvZmZzZXQgKiBjb21wcHRyLT5EQ1Rfdl9zY2FsZWRfc2l6ZTsKLQkvKiB5cG9zID09ICh5b2Zmc2V0K3lpbmRleCkgKiBEQ1RTSVpFICovCisJeXBvcyA9IHlvZmZzZXQgKiBEQ1RTSVpFOyAvKiB5cG9zID09ICh5b2Zmc2V0K3lpbmRleCkgKiBEQ1RTSVpFICovCiAJZm9yICh5aW5kZXggPSAwOyB5aW5kZXggPCBjb21wcHRyLT5NQ1VfaGVpZ2h0OyB5aW5kZXgrKykgewogCSAgaWYgKGNvZWYtPmlNQ1Vfcm93X251bSA8IGxhc3RfaU1DVV9yb3cgfHwKIAkgICAgICB5b2Zmc2V0K3lpbmRleCA8IGNvbXBwdHItPmxhc3Rfcm93X2hlaWdodCkgewotCSAgICAoKmZvcndhcmRfRENUKSAoY2luZm8sIGNvbXBwdHIsCi0JCQkgICAgaW5wdXRfYnVmW2NvbXBwdHItPmNvbXBvbmVudF9pbmRleF0sCi0JCQkgICAgY29lZi0+TUNVX2J1ZmZlcltibGtuXSwKLQkJCSAgICB5cG9zLCB4cG9zLCAoSkRJTUVOU0lPTikgYmxvY2tjbnQpOworCSAgICAoKmNpbmZvLT5mZGN0LT5mb3J3YXJkX0RDVCkgKGNpbmZvLCBjb21wcHRyLAorCQkJCQkgaW5wdXRfYnVmW2NvbXBwdHItPmNvbXBvbmVudF9pbmRleF0sCisJCQkJCSBjb2VmLT5NQ1VfYnVmZmVyW2Jsa25dLAorCQkJCQkgeXBvcywgeHBvcywgKEpESU1FTlNJT04pIGJsb2NrY250KTsKIAkgICAgaWYgKGJsb2NrY250IDwgY29tcHB0ci0+TUNVX3dpZHRoKSB7CiAJICAgICAgLyogQ3JlYXRlIHNvbWUgZHVtbXkgYmxvY2tzIGF0IHRoZSByaWdodCBlZGdlIG9mIHRoZSBpbWFnZS4gKi8KIAkgICAgICBqemVyb19mYXIoKHZvaWQgRkFSICopIGNvZWYtPk1DVV9idWZmZXJbYmxrbiArIGJsb2NrY250XSwKQEAgLTE5OCw3ICsxOTUsNyBAQAogCSAgICB9CiAJICB9CiAJICBibGtuICs9IGNvbXBwdHItPk1DVV93aWR0aDsKLQkgIHlwb3MgKz0gY29tcHB0ci0+RENUX3Zfc2NhbGVkX3NpemU7CisJICB5cG9zICs9IERDVFNJWkU7CiAJfQogICAgICAgfQogICAgICAgLyogVHJ5IHRvIHdyaXRlIHRoZSBNQ1UuICBJbiBldmVudCBvZiBhIHN1c3BlbnNpb24gZmFpbHVyZSwgd2Ugd2lsbApAQCAtMjU1LDcgKzI1Miw2IEBACiAgIGpwZWdfY29tcG9uZW50X2luZm8gKmNvbXBwdHI7CiAgIEpCTE9DS0FSUkFZIGJ1ZmZlcjsKICAgSkJMT0NLUk9XIHRoaXNibG9ja3JvdywgbGFzdGJsb2Nrcm93OwotICBmb3J3YXJkX0RDVF9wdHIgZm9yd2FyZF9EQ1Q7CiAKICAgZm9yIChjaSA9IDAsIGNvbXBwdHIgPSBjaW5mby0+Y29tcF9pbmZvOyBjaSA8IGNpbmZvLT5udW1fY29tcG9uZW50czsKICAgICAgICBjaSsrLCBjb21wcHRyKyspIHsKQEAgLTI3OCwxNSArMjc0LDE1IEBACiAgICAgbmR1bW15ID0gKGludCkgKGJsb2Nrc19hY3Jvc3MgJSBoX3NhbXBfZmFjdG9yKTsKICAgICBpZiAobmR1bW15ID4gMCkKICAgICAgIG5kdW1teSA9IGhfc2FtcF9mYWN0b3IgLSBuZHVtbXk7Ci0gICAgZm9yd2FyZF9EQ1QgPSBjaW5mby0+ZmRjdC0+Zm9yd2FyZF9EQ1RbY2ldOwogICAgIC8qIFBlcmZvcm0gRENUIGZvciBhbGwgbm9uLWR1bW15IGJsb2NrcyBpbiB0aGlzIGlNQ1Ugcm93LiAgRWFjaCBjYWxsCiAgICAgICogb24gZm9yd2FyZF9EQ1QgcHJvY2Vzc2VzIGEgY29tcGxldGUgaG9yaXpvbnRhbCByb3cgb2YgRENUIGJsb2Nrcy4KICAgICAgKi8KICAgICBmb3IgKGJsb2NrX3JvdyA9IDA7IGJsb2NrX3JvdyA8IGJsb2NrX3Jvd3M7IGJsb2NrX3JvdysrKSB7CiAgICAgICB0aGlzYmxvY2tyb3cgPSBidWZmZXJbYmxvY2tfcm93XTsKLSAgICAgICgqZm9yd2FyZF9EQ1QpIChjaW5mbywgY29tcHB0ciwgaW5wdXRfYnVmW2NpXSwgdGhpc2Jsb2Nrcm93LAotCQkgICAgICAoSkRJTUVOU0lPTikgKGJsb2NrX3JvdyAqIGNvbXBwdHItPkRDVF92X3NjYWxlZF9zaXplKSwKLQkJICAgICAgKEpESU1FTlNJT04pIDAsIGJsb2Nrc19hY3Jvc3MpOworICAgICAgKCpjaW5mby0+ZmRjdC0+Zm9yd2FyZF9EQ1QpIChjaW5mbywgY29tcHB0ciwKKwkJCQkgICBpbnB1dF9idWZbY2ldLCB0aGlzYmxvY2tyb3csCisJCQkJICAgKEpESU1FTlNJT04pIChibG9ja19yb3cgKiBEQ1RTSVpFKSwKKwkJCQkgICAoSkRJTUVOU0lPTikgMCwgYmxvY2tzX2Fjcm9zcyk7CiAgICAgICBpZiAobmR1bW15ID4gMCkgewogCS8qIENyZWF0ZSBkdW1teSBibG9ja3MgYXQgdGhlIHJpZ2h0IGVkZ2Ugb2YgdGhlIGltYWdlLiAqLwogCXRoaXNibG9ja3JvdyArPSBibG9ja3NfYWNyb3NzOyAvKiA9PiBmaXJzdCBkdW1teSBibG9jayAqLwpkaWZmIC0tZ2l0IGEvamNjb2xvci5jIGIvamNjb2xvci5jCmluZGV4IDBhOGE0YjUuLmIzNzRjOGIgMTAwNjQ0Ci0tLSBhL2pjY29sb3IuYworKysgYi9qY2NvbG9yLmMKQEAgLTIsNiArMiw4IEBACiAgKiBqY2NvbG9yLmMKICAqCiAgKiBDb3B5cmlnaHQgKEMpIDE5OTEtMTk5NiwgVGhvbWFzIEcuIExhbmUuCisgKiBDb3B5cmlnaHQgMjAwOSBQaWVycmUgT3NzbWFuIDxvc3NtYW5AY2VuZGlvLnNlPiBmb3IgQ2VuZGlvIEFCCisgKiBDb3B5cmlnaHQgMjAwOS0yMDExIEQuIFIuIENvbW1hbmRlcgogICogVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEluZGVwZW5kZW50IEpQRUcgR3JvdXAncyBzb2Z0d2FyZS4KICAqIEZvciBjb25kaXRpb25zIG9mIGRpc3RyaWJ1dGlvbiBhbmQgdXNlLCBzZWUgdGhlIGFjY29tcGFueWluZyBSRUFETUUgZmlsZS4KICAqCkBAIC0xMSw2ICsxMyw3IEBACiAjZGVmaW5lIEpQRUdfSU5URVJOQUxTCiAjaW5jbHVkZSAiamluY2x1ZGUuaCIKICNpbmNsdWRlICJqcGVnbGliLmgiCisjaW5jbHVkZSAianNpbWQuaCIKIAogCiAvKiBQcml2YXRlIHN1Ym9iamVjdCAqLwpAQCAtNzgsNiArODEsNzQgQEAKICNkZWZpbmUgVEFCTEVfU0laRQkoOCooTUFYSlNBTVBMRSsxKSkKIAogCisjaWYgQklUU19JTl9KU0FNUExFID09IDgKKworc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgcmVkX2x1dFsyNTZdID0geworICAwICwgMCAsIDEgLCAxICwgMSAsIDEgLCAyICwgMiAsIDIgLCAzICwgMyAsIDMgLCA0ICwgNCAsIDQgLCA0ICwKKyAgNSAsIDUgLCA1ICwgNiAsIDYgLCA2ICwgNyAsIDcgLCA3ICwgNyAsIDggLCA4ICwgOCAsIDkgLCA5ICwgOSAsCisgIDEwLCAxMCwgMTAsIDEwLCAxMSwgMTEsIDExLCAxMiwgMTIsIDEyLCAxMywgMTMsIDEzLCAxMywgMTQsIDE0LAorICAxNCwgMTUsIDE1LCAxNSwgMTYsIDE2LCAxNiwgMTYsIDE3LCAxNywgMTcsIDE4LCAxOCwgMTgsIDE5LCAxOSwKKyAgMTksIDE5LCAyMCwgMjAsIDIwLCAyMSwgMjEsIDIxLCAyMiwgMjIsIDIyLCAyMiwgMjMsIDIzLCAyMywgMjQsCisgIDI0LCAyNCwgMjUsIDI1LCAyNSwgMjUsIDI2LCAyNiwgMjYsIDI3LCAyNywgMjcsIDI4LCAyOCwgMjgsIDI4LAorICAyOSwgMjksIDI5LCAzMCwgMzAsIDMwLCAzMCwgMzEsIDMxLCAzMSwgMzIsIDMyLCAzMiwgMzMsIDMzLCAzMywKKyAgMzMsIDM0LCAzNCwgMzQsIDM1LCAzNSwgMzUsIDM2LCAzNiwgMzYsIDM2LCAzNywgMzcsIDM3LCAzOCwgMzgsCisgIDM4LCAzOSwgMzksIDM5LCAzOSwgNDAsIDQwLCA0MCwgNDEsIDQxLCA0MSwgNDIsIDQyLCA0MiwgNDIsIDQzLAorICA0MywgNDMsIDQ0LCA0NCwgNDQsIDQ1LCA0NSwgNDUsIDQ1LCA0NiwgNDYsIDQ2LCA0NywgNDcsIDQ3LCA0OCwKKyAgNDgsIDQ4LCA0OCwgNDksIDQ5LCA0OSwgNTAsIDUwLCA1MCwgNTEsIDUxLCA1MSwgNTEsIDUyLCA1MiwgNTIsCisgIDUzLCA1MywgNTMsIDU0LCA1NCwgNTQsIDU0LCA1NSwgNTUsIDU1LCA1NiwgNTYsIDU2LCA1NywgNTcsIDU3LAorICA1NywgNTgsIDU4LCA1OCwgNTksIDU5LCA1OSwgNjAsIDYwLCA2MCwgNjAsIDYxLCA2MSwgNjEsIDYyLCA2MiwKKyAgNjIsIDYyLCA2MywgNjMsIDYzLCA2NCwgNjQsIDY0LCA2NSwgNjUsIDY1LCA2NSwgNjYsIDY2LCA2NiwgNjcsCisgIDY3LCA2NywgNjgsIDY4LCA2OCwgNjgsIDY5LCA2OSwgNjksIDcwLCA3MCwgNzAsIDcxLCA3MSwgNzEsIDcxLAorICA3MiwgNzIsIDcyLCA3MywgNzMsIDczLCA3NCwgNzQsIDc0LCA3NCwgNzUsIDc1LCA3NSwgNzYsIDc2LCA3NgorfTsKKworc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgZ3JlZW5fbHV0WzI1Nl0gPSB7CisgIDAgICwgMSAgLCAxICAsIDIgICwgMiAgLCAzICAsIDQgICwgNCAgLCA1ICAsIDUgICwgNiAgLCA2ICAsCisgIDcgICwgOCAgLCA4ICAsIDkgICwgOSAgLCAxMCAsIDExICwgMTEgLCAxMiAsIDEyICwgMTMgLCAxNCAsCisgIDE0ICwgMTUgLCAxNSAsIDE2ICwgMTYgLCAxNyAsIDE4ICwgMTggLCAxOSAsIDE5ICwgMjAgLCAyMSAsCisgIDIxICwgMjIgLCAyMiAsIDIzICwgMjMgLCAyNCAsIDI1ICwgMjUgLCAyNiAsIDI2ICwgMjcgLCAyOCAsCisgIDI4ICwgMjkgLCAyOSAsIDMwICwgMzEgLCAzMSAsIDMyICwgMzIgLCAzMyAsIDMzICwgMzQgLCAzNSAsCisgIDM1ICwgMzYgLCAzNiAsIDM3ICwgMzggLCAzOCAsIDM5ICwgMzkgLCA0MCAsIDQxICwgNDEgLCA0MiAsCisgIDQyICwgNDMgLCA0MyAsIDQ0ICwgNDUgLCA0NSAsIDQ2ICwgNDYgLCA0NyAsIDQ4ICwgNDggLCA0OSAsCisgIDQ5ICwgNTAgLCA1MCAsIDUxICwgNTIgLCA1MiAsIDUzICwgNTMgLCA1NCAsIDU1ICwgNTUgLCA1NiAsCisgIDU2ICwgNTcgLCA1OCAsIDU4ICwgNTkgLCA1OSAsIDYwICwgNjAgLCA2MSAsIDYyICwgNjIgLCA2MyAsCisgIDYzICwgNjQgLCA2NSAsIDY1ICwgNjYgLCA2NiAsIDY3ICwgNjggLCA2OCAsIDY5ICwgNjkgLCA3MCAsCisgIDcwICwgNzEgLCA3MiAsIDcyICwgNzMgLCA3MyAsIDc0ICwgNzUgLCA3NSAsIDc2ICwgNzYgLCA3NyAsCisgIDc3ICwgNzggLCA3OSAsIDc5ICwgODAgLCA4MCAsIDgxICwgODIgLCA4MiAsIDgzICwgODMgLCA4NCAsCisgIDg1ICwgODUgLCA4NiAsIDg2ICwgODcgLCA4NyAsIDg4ICwgODkgLCA4OSAsIDkwICwgOTAgLCA5MSAsCisgIDkyICwgOTIgLCA5MyAsIDkzICwgOTQgLCA5NSAsIDk1ICwgOTYgLCA5NiAsIDk3ICwgOTcgLCA5OCAsCisgIDk5ICwgOTkgLCAxMDAsIDEwMCwgMTAxLCAxMDIsIDEwMiwgMTAzLCAxMDMsIDEwNCwgMTA0LCAxMDUsCisgIDEwNiwgMTA2LCAxMDcsIDEwNywgMTA4LCAxMDksIDEwOSwgMTEwLCAxMTAsIDExMSwgMTEyLCAxMTIsCisgIDExMywgMTEzLCAxMTQsIDExNCwgMTE1LCAxMTYsIDExNiwgMTE3LCAxMTcsIDExOCwgMTE5LCAxMTksCisgIDEyMCwgMTIwLCAxMjEsIDEyMiwgMTIyLCAxMjMsIDEyMywgMTI0LCAxMjQsIDEyNSwgMTI2LCAxMjYsCisgIDEyNywgMTI3LCAxMjgsIDEyOSwgMTI5LCAxMzAsIDEzMCwgMTMxLCAxMzEsIDEzMiwgMTMzLCAxMzMsCisgIDEzNCwgMTM0LCAxMzUsIDEzNiwgMTM2LCAxMzcsIDEzNywgMTM4LCAxMzksIDEzOSwgMTQwLCAxNDAsCisgIDE0MSwgMTQxLCAxNDIsIDE0MywgMTQzLCAxNDQsIDE0NCwgMTQ1LCAxNDYsIDE0NiwgMTQ3LCAxNDcsCisgIDE0OCwgMTQ5LCAxNDksIDE1MAorfTsKKworc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgYmx1ZV9sdXRbMjU2XSA9IHsKKyAgMCAsIDAgLCAwICwgMCAsIDAgLCAxICwgMSAsIDEgLCAxICwgMSAsIDEgLCAxICwgMSAsIDEgLCAyICwgMiAsCisgIDIgLCAyICwgMiAsIDIgLCAyICwgMiAsIDMgLCAzICwgMyAsIDMgLCAzICwgMyAsIDMgLCAzICwgMyAsIDQgLAorICA0ICwgNCAsIDQgLCA0ICwgNCAsIDQgLCA0ICwgNCAsIDUgLCA1ICwgNSAsIDUgLCA1ICwgNSAsIDUgLCA1ICwKKyAgNSAsIDYgLCA2ICwgNiAsIDYgLCA2ICwgNiAsIDYgLCA2ICwgNiAsIDcgLCA3ICwgNyAsIDcgLCA3ICwgNyAsCisgIDcgLCA3ICwgOCAsIDggLCA4ICwgOCAsIDggLCA4ICwgOCAsIDggLCA4ICwgOSAsIDkgLCA5ICwgOSAsIDkgLAorICA5ICwgOSAsIDkgLCA5ICwgMTAsIDEwLCAxMCwgMTAsIDEwLCAxMCwgMTAsIDEwLCAxMCwgMTEsIDExLCAxMSwKKyAgMTEsIDExLCAxMSwgMTEsIDExLCAxMiwgMTIsIDEyLCAxMiwgMTIsIDEyLCAxMiwgMTIsIDEyLCAxMywgMTMsCisgIDEzLCAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LAorICAxNSwgMTUsIDE1LCAxNSwgMTUsIDE1LCAxNSwgMTUsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwKKyAgMTYsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE3LCAxNywgMTcsIDE4LCAxOCwgMTgsIDE4LCAxOCwgMTgsCisgIDE4LCAxOCwgMTgsIDE5LCAxOSwgMTksIDE5LCAxOSwgMTksIDE5LCAxOSwgMTksIDIwLCAyMCwgMjAsIDIwLAorICAyMCwgMjAsIDIwLCAyMCwgMjEsIDIxLCAyMSwgMjEsIDIxLCAyMSwgMjEsIDIxLCAyMSwgMjIsIDIyLCAyMiwKKyAgMjIsIDIyLCAyMiwgMjIsIDIyLCAyMiwgMjMsIDIzLCAyMywgMjMsIDIzLCAyMywgMjMsIDIzLCAyMywgMjQsCisgIDI0LCAyNCwgMjQsIDI0LCAyNCwgMjQsIDI0LCAyNSwgMjUsIDI1LCAyNSwgMjUsIDI1LCAyNSwgMjUsIDI1LAorICAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNywgMjcsIDI3LCAyNywgMjcsIDI3LCAyNywKKyAgMjcsIDI3LCAyOCwgMjgsIDI4LCAyOCwgMjgsIDI4LCAyOCwgMjgsIDI5LCAyOSwgMjksIDI5LCAyOSwgMjkKK307CisKKyNlbmRpZgorCisKIC8qCiAgKiBJbml0aWFsaXplIGZvciBSR0ItPllDQyBjb2xvcnNwYWNlIGNvbnZlcnNpb24uCiAgKi8KQEAgLTE0NiwxMCArMjE3LDEwIEBACiAgICAgb3V0cHRyMiA9IG91dHB1dF9idWZbMl1bb3V0cHV0X3Jvd107CiAgICAgb3V0cHV0X3JvdysrOwogICAgIGZvciAoY29sID0gMDsgY29sIDwgbnVtX2NvbHM7IGNvbCsrKSB7Ci0gICAgICByID0gR0VUSlNBTVBMRShpbnB0cltSR0JfUkVEXSk7Ci0gICAgICBnID0gR0VUSlNBTVBMRShpbnB0cltSR0JfR1JFRU5dKTsKLSAgICAgIGIgPSBHRVRKU0FNUExFKGlucHRyW1JHQl9CTFVFXSk7Ci0gICAgICBpbnB0ciArPSBSR0JfUElYRUxTSVpFOworICAgICAgciA9IEdFVEpTQU1QTEUoaW5wdHJbcmdiX3JlZFtjaW5mby0+aW5fY29sb3Jfc3BhY2VdXSk7CisgICAgICBnID0gR0VUSlNBTVBMRShpbnB0cltyZ2JfZ3JlZW5bY2luZm8tPmluX2NvbG9yX3NwYWNlXV0pOworICAgICAgYiA9IEdFVEpTQU1QTEUoaW5wdHJbcmdiX2JsdWVbY2luZm8tPmluX2NvbG9yX3NwYWNlXV0pOworICAgICAgaW5wdHIgKz0gcmdiX3BpeGVsc2l6ZVtjaW5mby0+aW5fY29sb3Jfc3BhY2VdOwogICAgICAgLyogSWYgdGhlIGlucHV0cyBhcmUgMC4uTUFYSlNBTVBMRSwgdGhlIG91dHB1dHMgb2YgdGhlc2UgZXF1YXRpb25zCiAgICAgICAgKiBtdXN0IGJlIHRvbzsgd2UgZG8gbm90IG5lZWQgYW4gZXhwbGljaXQgcmFuZ2UtbGltaXRpbmcgb3BlcmF0aW9uLgogICAgICAgICogSGVuY2UgdGhlIHZhbHVlIGJlaW5nIHNoaWZ0ZWQgaXMgbmV2ZXIgbmVnYXRpdmUsIGFuZCB3ZSBkb24ndApAQCAtMTg3LDI3ICsyNTgsMzYgQEAKIAkJICBKU0FNUEFSUkFZIGlucHV0X2J1ZiwgSlNBTVBJTUFHRSBvdXRwdXRfYnVmLAogCQkgIEpESU1FTlNJT04gb3V0cHV0X3JvdywgaW50IG51bV9yb3dzKQogeworICAjaWYgQklUU19JTl9KU0FNUExFICE9IDgKICAgbXlfY2NvbnZlcnRfcHRyIGNjb252ZXJ0ID0gKG15X2Njb252ZXJ0X3B0cikgY2luZm8tPmNjb252ZXJ0OwotICByZWdpc3RlciBpbnQgciwgZywgYjsKICAgcmVnaXN0ZXIgSU5UMzIgKiBjdGFiID0gY2NvbnZlcnQtPnJnYl95Y2NfdGFiOworICAjZW5kaWYKICAgcmVnaXN0ZXIgSlNBTVBST1cgaW5wdHI7CiAgIHJlZ2lzdGVyIEpTQU1QUk9XIG91dHB0cjsKLSAgcmVnaXN0ZXIgSkRJTUVOU0lPTiBjb2w7CisgIEpTQU1QTEUgKm1heG91dHB0cjsKICAgSkRJTUVOU0lPTiBudW1fY29scyA9IGNpbmZvLT5pbWFnZV93aWR0aDsKKyAgaW50IHJpbmRleCA9IHJnYl9yZWRbY2luZm8tPmluX2NvbG9yX3NwYWNlXTsKKyAgaW50IGdpbmRleCA9IHJnYl9ncmVlbltjaW5mby0+aW5fY29sb3Jfc3BhY2VdOworICBpbnQgYmluZGV4ID0gcmdiX2JsdWVbY2luZm8tPmluX2NvbG9yX3NwYWNlXTsKKyAgaW50IHJnYnN0cmlkZSA9IHJnYl9waXhlbHNpemVbY2luZm8tPmluX2NvbG9yX3NwYWNlXTsKIAogICB3aGlsZSAoLS1udW1fcm93cyA+PSAwKSB7CiAgICAgaW5wdHIgPSAqaW5wdXRfYnVmKys7CiAgICAgb3V0cHRyID0gb3V0cHV0X2J1ZlswXVtvdXRwdXRfcm93XTsKKyAgICBtYXhvdXRwdHIgPSAmb3V0cHRyW251bV9jb2xzXTsKICAgICBvdXRwdXRfcm93Kys7Ci0gICAgZm9yIChjb2wgPSAwOyBjb2wgPCBudW1fY29sczsgY29sKyspIHsKLSAgICAgIHIgPSBHRVRKU0FNUExFKGlucHRyW1JHQl9SRURdKTsKLSAgICAgIGcgPSBHRVRKU0FNUExFKGlucHRyW1JHQl9HUkVFTl0pOwotICAgICAgYiA9IEdFVEpTQU1QTEUoaW5wdHJbUkdCX0JMVUVdKTsKLSAgICAgIGlucHRyICs9IFJHQl9QSVhFTFNJWkU7CisgICAgZm9yICg7IG91dHB0ciA8IG1heG91dHB0cjsgb3V0cHRyKyssIGlucHRyICs9IHJnYnN0cmlkZSkgewogICAgICAgLyogWSAqLwotICAgICAgb3V0cHRyW2NvbF0gPSAoSlNBTVBMRSkKLQkJKChjdGFiW3IrUl9ZX09GRl0gKyBjdGFiW2crR19ZX09GRl0gKyBjdGFiW2IrQl9ZX09GRl0pCi0JCSA+PiBTQ0FMRUJJVFMpOworICAgICAgI2lmIEJJVFNfSU5fSlNBTVBMRSA9PSA4CisgICAgICAqb3V0cHRyID0gcmVkX2x1dFtpbnB0cltyaW5kZXhdXSArIGdyZWVuX2x1dFtpbnB0cltnaW5kZXhdXQorCSAgICArIGJsdWVfbHV0W2lucHRyW2JpbmRleF1dOworICAgICAgI2Vsc2UKKyAgICAgICpvdXRwdHIgPSAoSlNBTVBMRSkKKwkgICAgKChjdGFiW0dFVEpTQU1QTEUoaW5wdHJbcmluZGV4XSkrUl9ZX09GRl0KKwkgICAgICsgY3RhYltHRVRKU0FNUExFKGlucHRyW2dpbmRleF0pK0dfWV9PRkZdCisJICAgICArIGN0YWJbR0VUSlNBTVBMRShpbnB0cltiaW5kZXhdKStCX1lfT0ZGXSkKKwkgICAgID4+IFNDQUxFQklUUyk7CisgICAgICAjZW5kaWYKICAgICB9CiAgIH0KIH0KQEAgLTM2OCwxMSArNDQ4LDE1IEBACiAgICAgYnJlYWs7CiAKICAgY2FzZSBKQ1NfUkdCOgotI2lmIFJHQl9QSVhFTFNJWkUgIT0gMwotICAgIGlmIChjaW5mby0+aW5wdXRfY29tcG9uZW50cyAhPSBSR0JfUElYRUxTSVpFKQorICBjYXNlIEpDU19FWFRfUkdCOgorICBjYXNlIEpDU19FWFRfUkdCWDoKKyAgY2FzZSBKQ1NfRVhUX0JHUjoKKyAgY2FzZSBKQ1NfRVhUX0JHUlg6CisgIGNhc2UgSkNTX0VYVF9YQkdSOgorICBjYXNlIEpDU19FWFRfWFJHQjoKKyAgICBpZiAoY2luZm8tPmlucHV0X2NvbXBvbmVudHMgIT0gcmdiX3BpeGVsc2l6ZVtjaW5mby0+aW5fY29sb3Jfc3BhY2VdKQogICAgICAgRVJSRVhJVChjaW5mbywgSkVSUl9CQURfSU5fQ09MT1JTUEFDRSk7CiAgICAgYnJlYWs7Ci0jZW5kaWYgLyogZWxzZSBzaGFyZSBjb2RlIHdpdGggWUNiQ3IgKi8KIAogICBjYXNlIEpDU19ZQ2JDcjoKICAgICBpZiAoY2luZm8tPmlucHV0X2NvbXBvbmVudHMgIT0gMykKQEAgLTM5OCw3ICs0ODIsMTMgQEAKICAgICAgIEVSUkVYSVQoY2luZm8sIEpFUlJfQkFEX0pfQ09MT1JTUEFDRSk7CiAgICAgaWYgKGNpbmZvLT5pbl9jb2xvcl9zcGFjZSA9PSBKQ1NfR1JBWVNDQUxFKQogICAgICAgY2NvbnZlcnQtPnB1Yi5jb2xvcl9jb252ZXJ0ID0gZ3JheXNjYWxlX2NvbnZlcnQ7Ci0gICAgZWxzZSBpZiAoY2luZm8tPmluX2NvbG9yX3NwYWNlID09IEpDU19SR0IpIHsKKyAgICBlbHNlIGlmIChjaW5mby0+aW5fY29sb3Jfc3BhY2UgPT0gSkNTX1JHQiB8fAorICAgICAgICAgICAgIGNpbmZvLT5pbl9jb2xvcl9zcGFjZSA9PSBKQ1NfRVhUX1JHQiB8fAorICAgICAgICAgICAgIGNpbmZvLT5pbl9jb2xvcl9zcGFjZSA9PSBKQ1NfRVhUX1JHQlggfHwKKyAgICAgICAgICAgICBjaW5mby0+aW5fY29sb3Jfc3BhY2UgPT0gSkNTX0VYVF9CR1IgfHwKKyAgICAgICAgICAgICBjaW5mby0+aW5fY29sb3Jfc3BhY2UgPT0gSkNTX0VYVF9CR1JYIHx8CisgICAgICAgICAgICAgY2luZm8tPmluX2NvbG9yX3NwYWNlID09IEpDU19FWFRfWEJHUiB8fAorICAgICAgICAgICAgIGNpbmZvLT5pbl9jb2xvcl9zcGFjZSA9PSBKQ1NfRVhUX1hSR0IpIHsKICAgICAgIGNjb252ZXJ0LT5wdWIuc3RhcnRfcGFzcyA9IHJnYl95Y2Nfc3RhcnQ7CiAgICAgICBjY29udmVydC0+cHViLmNvbG9yX2NvbnZlcnQgPSByZ2JfZ3JheV9jb252ZXJ0OwogICAgIH0gZWxzZSBpZiAoY2luZm8tPmluX2NvbG9yX3NwYWNlID09IEpDU19ZQ2JDcikKQEAgLTQwOCw5ICs0OTgsMTYgQEAKICAgICBicmVhazsKIAogICBjYXNlIEpDU19SR0I6CisgIGNhc2UgSkNTX0VYVF9SR0I6CisgIGNhc2UgSkNTX0VYVF9SR0JYOgorICBjYXNlIEpDU19FWFRfQkdSOgorICBjYXNlIEpDU19FWFRfQkdSWDoKKyAgY2FzZSBKQ1NfRVhUX1hCR1I6CisgIGNhc2UgSkNTX0VYVF9YUkdCOgogICAgIGlmIChjaW5mby0+bnVtX2NvbXBvbmVudHMgIT0gMykKICAgICAgIEVSUkVYSVQoY2luZm8sIEpFUlJfQkFEX0pfQ09MT1JTUEFDRSk7Ci0gICAgaWYgKGNpbmZvLT5pbl9jb2xvcl9zcGFjZSA9PSBKQ1NfUkdCICYmIFJHQl9QSVhFTFNJWkUgPT0gMykKKyAgICBpZiAoY2luZm8tPmluX2NvbG9yX3NwYWNlID09IGNpbmZvLT5qcGVnX2NvbG9yX3NwYWNlICYmCisgICAgICByZ2JfcGl4ZWxzaXplW2NpbmZvLT5pbl9jb2xvcl9zcGFjZV0gPT0gMykKICAgICAgIGNjb252ZXJ0LT5wdWIuY29sb3JfY29udmVydCA9IG51bGxfY29udmVydDsKICAgICBlbHNlCiAgICAgICBFUlJFWElUKGNpbmZvLCBKRVJSX0NPTlZFUlNJT05fTk9USU1QTCk7CkBAIC00MTksOSArNTE2LDE5IEBACiAgIGNhc2UgSkNTX1lDYkNyOgogICAgIGlmIChjaW5mby0+bnVtX2NvbXBvbmVudHMgIT0gMykKICAgICAgIEVSUkVYSVQoY2luZm8sIEpFUlJfQkFEX0pfQ09MT1JTUEFDRSk7Ci0gICAgaWYgKGNpbmZvLT5pbl9jb2xvcl9zcGFjZSA9PSBKQ1NfUkdCKSB7Ci0gICAgICBjY29udmVydC0+cHViLnN0YXJ0X3Bhc3MgPSByZ2JfeWNjX3N0YXJ0OwotICAgICAgY2NvbnZlcnQtPnB1Yi5jb2xvcl9jb252ZXJ0ID0gcmdiX3ljY19jb252ZXJ0OworICAgIGlmIChjaW5mby0+aW5fY29sb3Jfc3BhY2UgPT0gSkNTX1JHQiB8fAorICAgICAgICBjaW5mby0+aW5fY29sb3Jfc3BhY2UgPT0gSkNTX0VYVF9SR0IgfHwKKyAgICAgICAgY2luZm8tPmluX2NvbG9yX3NwYWNlID09IEpDU19FWFRfUkdCWCB8fAorICAgICAgICBjaW5mby0+aW5fY29sb3Jfc3BhY2UgPT0gSkNTX0VYVF9CR1IgfHwKKyAgICAgICAgY2luZm8tPmluX2NvbG9yX3NwYWNlID09IEpDU19FWFRfQkdSWCB8fAorICAgICAgICBjaW5mby0+aW5fY29sb3Jfc3BhY2UgPT0gSkNTX0VYVF9YQkdSIHx8CisgICAgICAgIGNpbmZvLT5pbl9jb2xvcl9zcGFjZSA9PSBKQ1NfRVhUX1hSR0IpIHsKKyAgICAgIGlmIChqc2ltZF9jYW5fcmdiX3ljYygpKQorICAgICAgICBjY29udmVydC0+cHViLmNvbG9yX2NvbnZlcnQgPSBqc2ltZF9yZ2JfeWNjX2NvbnZlcnQ7CisgICAgICBlbHNlIHsKKyAgICAgICAgY2NvbnZlcnQtPnB1Yi5zdGFydF9wYXNzID0gcmdiX3ljY19zdGFydDsKKyAgICAgICAgY2NvbnZlcnQtPnB1Yi5jb2xvcl9jb252ZXJ0ID0gcmdiX3ljY19jb252ZXJ0OworICAgICAgfQogICAgIH0gZWxzZSBpZiAoY2luZm8tPmluX2NvbG9yX3NwYWNlID09IEpDU19ZQ2JDcikKICAgICAgIGNjb252ZXJ0LT5wdWIuY29sb3JfY29udmVydCA9IG51bGxfY29udmVydDsKICAgICBlbHNlCmRpZmYgLS1naXQgYS9qY2RjdG1nci5jIGIvamNkY3RtZ3IuYwppbmRleCAwYmJkYmI2Li43MTFmOWRhIDEwMDY0NAotLS0gYS9qY2RjdG1nci5jCisrKyBiL2pjZGN0bWdyLmMKQEAgLTIsNiArMiw5IEBACiAgKiBqY2RjdG1nci5jCiAgKgogICogQ29weXJpZ2h0IChDKSAxOTk0LTE5OTYsIFRob21hcyBHLiBMYW5lLgorICogQ29weXJpZ2h0IChDKSAxOTk5LTIwMDYsIE1JWUFTQUtBIE1hc2FydS4KKyAqIENvcHlyaWdodCAyMDA5IFBpZXJyZSBPc3NtYW4gPG9zc21hbkBjZW5kaW8uc2U+IGZvciBDZW5kaW8gQUIKKyAqIENvcHlyaWdodCAoQykgMjAxMSBELiBSLiBDb21tYW5kZXIKICAqIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBJbmRlcGVuZGVudCBKUEVHIEdyb3VwJ3Mgc29mdHdhcmUuCiAgKiBGb3IgY29uZGl0aW9ucyBvZiBkaXN0cmlidXRpb24gYW5kIHVzZSwgc2VlIHRoZSBhY2NvbXBhbnlpbmcgUkVBRE1FIGZpbGUuCiAgKgpAQCAtMTUsMTUgKzE4LDM3IEBACiAjaW5jbHVkZSAiamluY2x1ZGUuaCIKICNpbmNsdWRlICJqcGVnbGliLmgiCiAjaW5jbHVkZSAiamRjdC5oIgkJLyogUHJpdmF0ZSBkZWNsYXJhdGlvbnMgZm9yIERDVCBzdWJzeXN0ZW0gKi8KKyNpbmNsdWRlICJqc2ltZGRjdC5oIgogCiAKIC8qIFByaXZhdGUgc3Vib2JqZWN0IGZvciB0aGlzIG1vZHVsZSAqLwogCit0eXBlZGVmIEpNRVRIT0Qodm9pZCwgZm9yd2FyZF9EQ1RfbWV0aG9kX3B0ciwgKERDVEVMRU0gKiBkYXRhKSk7Cit0eXBlZGVmIEpNRVRIT0Qodm9pZCwgZmxvYXRfRENUX21ldGhvZF9wdHIsIChGQVNUX0ZMT0FUICogZGF0YSkpOworCit0eXBlZGVmIEpNRVRIT0Qodm9pZCwgY29udnNhbXBfbWV0aG9kX3B0ciwKKyAgICAgICAgICAgICAgICAoSlNBTVBBUlJBWSBzYW1wbGVfZGF0YSwgSkRJTUVOU0lPTiBzdGFydF9jb2wsCisgICAgICAgICAgICAgICAgIERDVEVMRU0gKiB3b3Jrc3BhY2UpKTsKK3R5cGVkZWYgSk1FVEhPRCh2b2lkLCBmbG9hdF9jb252c2FtcF9tZXRob2RfcHRyLAorICAgICAgICAgICAgICAgIChKU0FNUEFSUkFZIHNhbXBsZV9kYXRhLCBKRElNRU5TSU9OIHN0YXJ0X2NvbCwKKyAgICAgICAgICAgICAgICAgRkFTVF9GTE9BVCAqd29ya3NwYWNlKSk7CisKK3R5cGVkZWYgSk1FVEhPRCh2b2lkLCBxdWFudGl6ZV9tZXRob2RfcHRyLAorICAgICAgICAgICAgICAgIChKQ09FRlBUUiBjb2VmX2Jsb2NrLCBEQ1RFTEVNICogZGl2aXNvcnMsCisgICAgICAgICAgICAgICAgIERDVEVMRU0gKiB3b3Jrc3BhY2UpKTsKK3R5cGVkZWYgSk1FVEhPRCh2b2lkLCBmbG9hdF9xdWFudGl6ZV9tZXRob2RfcHRyLAorICAgICAgICAgICAgICAgIChKQ09FRlBUUiBjb2VmX2Jsb2NrLCBGQVNUX0ZMT0FUICogZGl2aXNvcnMsCisgICAgICAgICAgICAgICAgIEZBU1RfRkxPQVQgKiB3b3Jrc3BhY2UpKTsKKworTUVUSE9EREVGKHZvaWQpIHF1YW50aXplIChKQ09FRlBUUiwgRENURUxFTSAqLCBEQ1RFTEVNICopOworCiB0eXBlZGVmIHN0cnVjdCB7CiAgIHN0cnVjdCBqcGVnX2ZvcndhcmRfZGN0IHB1YjsJLyogcHVibGljIGZpZWxkcyAqLwogCiAgIC8qIFBvaW50ZXIgdG8gdGhlIERDVCByb3V0aW5lIGFjdHVhbGx5IGluIHVzZSAqLwotICBmb3J3YXJkX0RDVF9tZXRob2RfcHRyIGRvX2RjdFtNQVhfQ09NUE9ORU5UU107CisgIGZvcndhcmRfRENUX21ldGhvZF9wdHIgZGN0OworICBjb252c2FtcF9tZXRob2RfcHRyIGNvbnZzYW1wOworICBxdWFudGl6ZV9tZXRob2RfcHRyIHF1YW50aXplOwogCiAgIC8qIFRoZSBhY3R1YWwgcG9zdC1EQ1QgZGl2aXNvcnMgLS0tIG5vdCBpZGVudGljYWwgdG8gdGhlIHF1YW50IHRhYmxlCiAgICAqIGVudHJpZXMsIGJlY2F1c2Ugb2Ygc2NhbGluZyAoZXNwZWNpYWxseSBmb3IgYW4gdW5ub3JtYWxpemVkIERDVCkuCkBAIC0zMSwxNDIgKzU2LDE0NyBAQAogICAgKi8KICAgRENURUxFTSAqIGRpdmlzb3JzW05VTV9RVUFOVF9UQkxTXTsKIAorICAvKiB3b3JrIGFyZWEgZm9yIEZEQ1Qgc3Vicm91dGluZSAqLworICBEQ1RFTEVNICogd29ya3NwYWNlOworCiAjaWZkZWYgRENUX0ZMT0FUX1NVUFBPUlRFRAogICAvKiBTYW1lIGFzIGFib3ZlIGZvciB0aGUgZmxvYXRpbmctcG9pbnQgY2FzZS4gKi8KLSAgZmxvYXRfRENUX21ldGhvZF9wdHIgZG9fZmxvYXRfZGN0W01BWF9DT01QT05FTlRTXTsKKyAgZmxvYXRfRENUX21ldGhvZF9wdHIgZmxvYXRfZGN0OworICBmbG9hdF9jb252c2FtcF9tZXRob2RfcHRyIGZsb2F0X2NvbnZzYW1wOworICBmbG9hdF9xdWFudGl6ZV9tZXRob2RfcHRyIGZsb2F0X3F1YW50aXplOwogICBGQVNUX0ZMT0FUICogZmxvYXRfZGl2aXNvcnNbTlVNX1FVQU5UX1RCTFNdOworICBGQVNUX0ZMT0FUICogZmxvYXRfd29ya3NwYWNlOwogI2VuZGlmCiB9IG15X2ZkY3RfY29udHJvbGxlcjsKIAogdHlwZWRlZiBteV9mZGN0X2NvbnRyb2xsZXIgKiBteV9mZGN0X3B0cjsKIAogCi0vKiBUaGUgY3VycmVudCBzY2FsZWQtRENUIHJvdXRpbmVzIHJlcXVpcmUgSVNMT1ctc3R5bGUgZGl2aXNvciB0YWJsZXMsCi0gKiBzbyBiZSBzdXJlIHRvIGNvbXBpbGUgdGhhdCBjb2RlIGlmIGVpdGhlciBJU0xPVyBvciBTQ0FMSU5HIGlzIHJlcXVlc3RlZC4KKy8qCisgKiBGaW5kIHRoZSBoaWdoZXN0IGJpdCBpbiBhbiBpbnRlZ2VyIHRocm91Z2ggYmluYXJ5IHNlYXJjaC4KICAqLwotI2lmZGVmIERDVF9JU0xPV19TVVBQT1JURUQKLSNkZWZpbmUgUFJPVklERV9JU0xPV19UQUJMRVMKLSNlbHNlCi0jaWZkZWYgRENUX1NDQUxJTkdfU1VQUE9SVEVECi0jZGVmaW5lIFBST1ZJREVfSVNMT1dfVEFCTEVTCi0jZW5kaWYKLSNlbmRpZgorTE9DQUwoaW50KQorZmxzcyAoVUlOVDE2IHZhbCkKK3sKKyAgaW50IGJpdDsKIAorICBiaXQgPSAxNjsKKworICBpZiAoIXZhbCkKKyAgICByZXR1cm4gMDsKKworICBpZiAoISh2YWwgJiAweGZmMDApKSB7CisgICAgYml0IC09IDg7CisgICAgdmFsIDw8PSA4OworICB9CisgIGlmICghKHZhbCAmIDB4ZjAwMCkpIHsKKyAgICBiaXQgLT0gNDsKKyAgICB2YWwgPDw9IDQ7CisgIH0KKyAgaWYgKCEodmFsICYgMHhjMDAwKSkgeworICAgIGJpdCAtPSAyOworICAgIHZhbCA8PD0gMjsKKyAgfQorICBpZiAoISh2YWwgJiAweDgwMDApKSB7CisgICAgYml0IC09IDE7CisgICAgdmFsIDw8PSAxOworICB9CisKKyAgcmV0dXJuIGJpdDsKK30KIAogLyoKLSAqIFBlcmZvcm0gZm9yd2FyZCBEQ1Qgb24gb25lIG9yIG1vcmUgYmxvY2tzIG9mIGEgY29tcG9uZW50LgorICogQ29tcHV0ZSB2YWx1ZXMgdG8gZG8gYSBkaXZpc2lvbiB1c2luZyByZWNpcHJvY2FsLgogICoKLSAqIFRoZSBpbnB1dCBzYW1wbGVzIGFyZSB0YWtlbiBmcm9tIHRoZSBzYW1wbGVfZGF0YVtdIGFycmF5IHN0YXJ0aW5nIGF0Ci0gKiBwb3NpdGlvbiBzdGFydF9yb3cvc3RhcnRfY29sLCBhbmQgbW92aW5nIHRvIHRoZSByaWdodCBmb3IgYW55IGFkZGl0aW9uYWwKLSAqIGJsb2Nrcy4gVGhlIHF1YW50aXplZCBjb2VmZmljaWVudHMgYXJlIHJldHVybmVkIGluIGNvZWZfYmxvY2tzW10uCisgKiBUaGlzIGltcGxlbWVudGF0aW9uIGlzIGJhc2VkIG9uIGFuIGFsZ29yaXRobSBkZXNjcmliZWQgaW4KKyAqICAgIkhvdyB0byBvcHRpbWl6ZSBmb3IgdGhlIFBlbnRpdW0gZmFtaWx5IG9mIG1pY3JvcHJvY2Vzc29ycyIKKyAqICAgKGh0dHA6Ly93d3cuYWduZXIub3JnL2Fzc2VtLykuCisgKiBNb3JlIGluZm9ybWF0aW9uIGFib3V0IHRoZSBiYXNpYyBhbGdvcml0aG0gY2FuIGJlIGZvdW5kIGluCisgKiB0aGUgcGFwZXIgIkludGVnZXIgRGl2aXNpb24gVXNpbmcgUmVjaXByb2NhbHMiIGJ5IFJvYmVydCBBbHZlcnNvbi4KKyAqCisgKiBUaGUgYmFzaWMgaWRlYSBpcyB0byByZXBsYWNlIHgvZCBieSB4ICogZF4tMS4gSW4gb3JkZXIgdG8gc3RvcmUKKyAqIGReLTEgd2l0aCBlbm91Z2ggcHJlY2lzaW9uIHdlIHNoaWZ0IGl0IGxlZnQgYSBmZXcgcGxhY2VzLiBJdCB0dXJucworICogb3V0IHRoYXQgdGhpcyBhbGdvcmlnaHQgZ2l2ZXMganVzdCBlbm91Z2ggcHJlY2lzaW9uLCBhbmQgYWxzbyBmaXRzCisgKiBpbnRvIERDVEVMRU06CisgKgorICogICBiID0gKHRoZSBudW1iZXIgb2Ygc2lnbmlmaWNhbnQgYml0cyBpbiBkaXZpc29yKSAtIDEKKyAqICAgciA9ICh3b3JkIHNpemUpICsgYgorICogICBmID0gMl5yIC8gZGl2aXNvcgorICoKKyAqIGYgd2lsbCBub3QgYmUgYW4gaW50ZWdlciBmb3IgbW9zdCBjYXNlcywgc28gd2UgbmVlZCB0byBjb21wZW5zYXRlCisgKiBmb3IgdGhlIHJvdW5kaW5nIGVycm9yIGludHJvZHVjZWQ6CisgKgorICogICBubyBmcmFjdGlvbmFsIHBhcnQ6CisgKgorICogICAgICAgcmVzdWx0ID0gaW5wdXQgPj4gcgorICoKKyAqICAgZnJhY3Rpb25hbCBwYXJ0IG9mIGYgPCAwLjU6CisgKgorICogICAgICAgcm91bmQgZiBkb3duIHRvIG5lYXJlc3QgaW50ZWdlcgorICogICAgICAgcmVzdWx0ID0gKChpbnB1dCArIDEpICogZikgPj4gcgorICoKKyAqICAgZnJhY3Rpb25hbCBwYXJ0IG9mIGYgPiAwLjU6CisgKgorICogICAgICAgcm91bmQgZiB1cCB0byBuZWFyZXN0IGludGVnZXIKKyAqICAgICAgIHJlc3VsdCA9IChpbnB1dCAqIGYpID4+IHIKKyAqCisgKiBUaGlzIGlzIHRoZSBvcmlnaW5hbCBhbGdvcml0aG0gdGhhdCBnaXZlcyB0cnVuY2F0ZWQgcmVzdWx0cy4gQnV0IHdlCisgKiB3YW50IHByb3Blcmx5IHJvdW5kZWQgcmVzdWx0cywgc28gd2UgcmVwbGFjZSAiaW5wdXQiIHdpdGgKKyAqICJpbnB1dCArIGRpdmlzb3IvMiIuCisgKgorICogSW4gb3JkZXIgdG8gYWxsb3cgU0lNRCBpbXBsZW1lbnRhdGlvbnMgd2UgYWxzbyB0d2VhayB0aGUgdmFsdWVzIHRvCisgKiBhbGxvdyB0aGUgc2FtZSBjYWxjdWxhdGlvbiB0byBiZSBtYWRlIGF0IGFsbCB0aW1lczoKKyAqIAorICogICBkY3RibFswXSA9IGYgcm91bmRlZCB0byBuZWFyZXN0IGludGVnZXIKKyAqICAgZGN0YmxbMV0gPSBkaXZpc29yIC8gMiAoKyAxIGlmIGZyYWN0aW9uYWwgcGFydCBvZiBmIDwgMC41KQorICogICBkY3RibFsyXSA9IDEgPDwgKCh3b3JkIHNpemUpICogMiAtIHIpCisgKiAgIGRjdGJsWzNdID0gciAtICh3b3JkIHNpemUpCisgKgorICogZGN0YmxbMl0gaXMgZm9yIHN0dXBpZCBpbnN0cnVjdGlvbiBzZXRzIHdoZXJlIHRoZSBzaGlmdCBvcGVyYXRpb24KKyAqIGlzbid0IG1lbWJlciB3aXNlIChlLmcuIE1NWCkuCisgKgorICogVGhlIHJlYXNvbiBkY3RibFsyXSBhbmQgZGN0YmxbM10gcmVkdWNlIHRoZSBzaGlmdCB3aXRoICh3b3JkIHNpemUpCisgKiBpcyB0aGF0IG1vc3QgU0lNRCBpbXBsZW1lbnRhdGlvbnMgaGF2ZSBhICJtdWx0aXBseSBhbmQgc3RvcmUgdG9wCisgKiBoYWxmIiBvcGVyYXRpb24uCisgKgorICogTGFzdGx5LCB3ZSBzdG9yZSBlYWNoIG9mIHRoZSB2YWx1ZXMgaW4gdGhlaXIgb3duIHRhYmxlIGluc3RlYWQKKyAqIG9mIGluIGEgY29uc2VjdXRpdmUgbWFubmVyLCB5ZXQgYWdhaW4gaW4gb3JkZXIgdG8gYWxsb3cgU0lNRAorICogcm91dGluZXMuCiAgKi8KLQotTUVUSE9EREVGKHZvaWQpCi1mb3J3YXJkX0RDVCAoal9jb21wcmVzc19wdHIgY2luZm8sIGpwZWdfY29tcG9uZW50X2luZm8gKiBjb21wcHRyLAotCSAgICAgSlNBTVBBUlJBWSBzYW1wbGVfZGF0YSwgSkJMT0NLUk9XIGNvZWZfYmxvY2tzLAotCSAgICAgSkRJTUVOU0lPTiBzdGFydF9yb3csIEpESU1FTlNJT04gc3RhcnRfY29sLAotCSAgICAgSkRJTUVOU0lPTiBudW1fYmxvY2tzKQotLyogVGhpcyB2ZXJzaW9uIGlzIHVzZWQgZm9yIGludGVnZXIgRENUIGltcGxlbWVudGF0aW9ucy4gKi8KK0xPQ0FMKGludCkKK2NvbXB1dGVfcmVjaXByb2NhbCAoVUlOVDE2IGRpdmlzb3IsIERDVEVMRU0gKiBkdGJsKQogewotICAvKiBUaGlzIHJvdXRpbmUgaXMgaGVhdmlseSB1c2VkLCBzbyBpdCdzIHdvcnRoIGNvZGluZyBpdCB0aWdodGx5LiAqLwotICBteV9mZGN0X3B0ciBmZGN0ID0gKG15X2ZkY3RfcHRyKSBjaW5mby0+ZmRjdDsKLSAgZm9yd2FyZF9EQ1RfbWV0aG9kX3B0ciBkb19kY3QgPSBmZGN0LT5kb19kY3RbY29tcHB0ci0+Y29tcG9uZW50X2luZGV4XTsKLSAgRENURUxFTSAqIGRpdmlzb3JzID0gZmRjdC0+ZGl2aXNvcnNbY29tcHB0ci0+cXVhbnRfdGJsX25vXTsKLSAgRENURUxFTSB3b3Jrc3BhY2VbRENUU0laRTJdOwkvKiB3b3JrIGFyZWEgZm9yIEZEQ1Qgc3Vicm91dGluZSAqLwotICBKRElNRU5TSU9OIGJpOworICBVRENURUxFTTIgZnEsIGZyOworICBVRENURUxFTSBjOworICBpbnQgYiwgcjsKIAotICBzYW1wbGVfZGF0YSArPSBzdGFydF9yb3c7CS8qIGZvbGQgaW4gdGhlIHZlcnRpY2FsIG9mZnNldCBvbmNlICovCisgIGIgPSBmbHNzKGRpdmlzb3IpIC0gMTsKKyAgciAgPSBzaXplb2YoRENURUxFTSkgKiA4ICsgYjsKIAotICBmb3IgKGJpID0gMDsgYmkgPCBudW1fYmxvY2tzOyBiaSsrLCBzdGFydF9jb2wgKz0gY29tcHB0ci0+RENUX2hfc2NhbGVkX3NpemUpIHsKLSAgICAvKiBQZXJmb3JtIHRoZSBEQ1QgKi8KLSAgICAoKmRvX2RjdCkgKHdvcmtzcGFjZSwgc2FtcGxlX2RhdGEsIHN0YXJ0X2NvbCk7CisgIGZxID0gKChVRENURUxFTTIpMSA8PCByKSAvIGRpdmlzb3I7CisgIGZyID0gKChVRENURUxFTTIpMSA8PCByKSAlIGRpdmlzb3I7CiAKLSAgICAvKiBRdWFudGl6ZS9kZXNjYWxlIHRoZSBjb2VmZmljaWVudHMsIGFuZCBzdG9yZSBpbnRvIGNvZWZfYmxvY2tzW10gKi8KLSAgICB7IHJlZ2lzdGVyIERDVEVMRU0gdGVtcCwgcXZhbDsKLSAgICAgIHJlZ2lzdGVyIGludCBpOwotICAgICAgcmVnaXN0ZXIgSkNPRUZQVFIgb3V0cHV0X3B0ciA9IGNvZWZfYmxvY2tzW2JpXTsKKyAgYyA9IGRpdmlzb3IgLyAyOyAvKiBmb3Igcm91bmRpbmcgKi8KIAotICAgICAgZm9yIChpID0gMDsgaSA8IERDVFNJWkUyOyBpKyspIHsKLQlxdmFsID0gZGl2aXNvcnNbaV07Ci0JdGVtcCA9IHdvcmtzcGFjZVtpXTsKLQkvKiBEaXZpZGUgdGhlIGNvZWZmaWNpZW50IHZhbHVlIGJ5IHF2YWwsIGVuc3VyaW5nIHByb3BlciByb3VuZGluZy4KLQkgKiBTaW5jZSBDIGRvZXMgbm90IHNwZWNpZnkgdGhlIGRpcmVjdGlvbiBvZiByb3VuZGluZyBmb3IgbmVnYXRpdmUKLQkgKiBxdW90aWVudHMsIHdlIGhhdmUgdG8gZm9yY2UgdGhlIGRpdmlkZW5kIHBvc2l0aXZlIGZvciBwb3J0YWJpbGl0eS4KLQkgKgotCSAqIEluIG1vc3QgZmlsZXMsIGF0IGxlYXN0IGhhbGYgb2YgdGhlIG91dHB1dCB2YWx1ZXMgd2lsbCBiZSB6ZXJvCi0JICogKGF0IGRlZmF1bHQgcXVhbnRpemF0aW9uIHNldHRpbmdzLCBtb3JlIGxpa2UgdGhyZWUtcXVhcnRlcnMuLi4pCi0JICogc28gd2Ugc2hvdWxkIGVuc3VyZSB0aGF0IHRoaXMgY2FzZSBpcyBmYXN0LiAgT24gbWFueSBtYWNoaW5lcywKLQkgKiBhIGNvbXBhcmlzb24gaXMgZW5vdWdoIGNoZWFwZXIgdGhhbiBhIGRpdmlkZSB0byBtYWtlIGEgc3BlY2lhbCB0ZXN0Ci0JICogYSB3aW4uICBTaW5jZSBib3RoIGlucHV0cyB3aWxsIGJlIG5vbm5lZ2F0aXZlLCB3ZSBuZWVkIG9ubHkgdGVzdAotCSAqIGZvciBhIDwgYiB0byBkaXNjb3ZlciB3aGV0aGVyIGEvYiBpcyAwLgotCSAqIElmIHlvdXIgbWFjaGluZSdzIGRpdmlzaW9uIGlzIGZhc3QgZW5vdWdoLCBkZWZpbmUgRkFTVF9ESVZJREUuCi0JICovCi0jaWZkZWYgRkFTVF9ESVZJREUKLSNkZWZpbmUgRElWSURFX0JZKGEsYikJYSAvPSBiCi0jZWxzZQotI2RlZmluZSBESVZJREVfQlkoYSxiKQlpZiAoYSA+PSBiKSBhIC89IGI7IGVsc2UgYSA9IDAKLSNlbmRpZgotCWlmICh0ZW1wIDwgMCkgewotCSAgdGVtcCA9IC10ZW1wOwotCSAgdGVtcCArPSBxdmFsPj4xOwkvKiBmb3Igcm91bmRpbmcgKi8KLQkgIERJVklERV9CWSh0ZW1wLCBxdmFsKTsKLQkgIHRlbXAgPSAtdGVtcDsKLQl9IGVsc2UgewotCSAgdGVtcCArPSBxdmFsPj4xOwkvKiBmb3Igcm91bmRpbmcgKi8KLQkgIERJVklERV9CWSh0ZW1wLCBxdmFsKTsKLQl9Ci0Jb3V0cHV0X3B0cltpXSA9IChKQ09FRikgdGVtcDsKLSAgICAgIH0KLSAgICB9CisgIGlmIChmciA9PSAwKSB7IC8qIGRpdmlzb3IgaXMgcG93ZXIgb2YgdHdvICovCisgICAgLyogZnEgd2lsbCBiZSBvbmUgYml0IHRvbyBsYXJnZSB0byBmaXQgaW4gRENURUxFTSwgc28gYWRqdXN0ICovCisgICAgZnEgPj49IDE7CisgICAgci0tOworICB9IGVsc2UgaWYgKGZyIDw9IChkaXZpc29yIC8gMikpIHsgLyogZnJhY3Rpb25hbCBwYXJ0IGlzIDwgMC41ICovCisgICAgYysrOworICB9IGVsc2UgeyAvKiBmcmFjdGlvbmFsIHBhcnQgaXMgPiAwLjUgKi8KKyAgICBmcSsrOwogICB9CisKKyAgZHRibFtEQ1RTSVpFMiAqIDBdID0gKERDVEVMRU0pIGZxOyAgICAgIC8qIHJlY2lwcm9jYWwgKi8KKyAgZHRibFtEQ1RTSVpFMiAqIDFdID0gKERDVEVMRU0pIGM7ICAgICAgIC8qIGNvcnJlY3Rpb24gKyByb3VuZGZhY3RvciAqLworICBkdGJsW0RDVFNJWkUyICogMl0gPSAoRENURUxFTSkgKDEgPDwgKHNpemVvZihEQ1RFTEVNKSo4KjIgLSByKSk7ICAvKiBzY2FsZSAqLworICBkdGJsW0RDVFNJWkUyICogM10gPSAoRENURUxFTSkgciAtIHNpemVvZihEQ1RFTEVNKSo4OyAvKiBzaGlmdCAqLworCisgIGlmKHIgPD0gMTYpIHJldHVybiAwOworICBlbHNlIHJldHVybiAxOwogfQogCi0KLSNpZmRlZiBEQ1RfRkxPQVRfU1VQUE9SVEVECi0KLU1FVEhPRERFRih2b2lkKQotZm9yd2FyZF9EQ1RfZmxvYXQgKGpfY29tcHJlc3NfcHRyIGNpbmZvLCBqcGVnX2NvbXBvbmVudF9pbmZvICogY29tcHB0ciwKLQkJICAgSlNBTVBBUlJBWSBzYW1wbGVfZGF0YSwgSkJMT0NLUk9XIGNvZWZfYmxvY2tzLAotCQkgICBKRElNRU5TSU9OIHN0YXJ0X3JvdywgSkRJTUVOU0lPTiBzdGFydF9jb2wsCi0JCSAgIEpESU1FTlNJT04gbnVtX2Jsb2NrcykKLS8qIFRoaXMgdmVyc2lvbiBpcyB1c2VkIGZvciBmbG9hdGluZy1wb2ludCBEQ1QgaW1wbGVtZW50YXRpb25zLiAqLwotewotICAvKiBUaGlzIHJvdXRpbmUgaXMgaGVhdmlseSB1c2VkLCBzbyBpdCdzIHdvcnRoIGNvZGluZyBpdCB0aWdodGx5LiAqLwotICBteV9mZGN0X3B0ciBmZGN0ID0gKG15X2ZkY3RfcHRyKSBjaW5mby0+ZmRjdDsKLSAgZmxvYXRfRENUX21ldGhvZF9wdHIgZG9fZGN0ID0gZmRjdC0+ZG9fZmxvYXRfZGN0W2NvbXBwdHItPmNvbXBvbmVudF9pbmRleF07Ci0gIEZBU1RfRkxPQVQgKiBkaXZpc29ycyA9IGZkY3QtPmZsb2F0X2Rpdmlzb3JzW2NvbXBwdHItPnF1YW50X3RibF9ub107Ci0gIEZBU1RfRkxPQVQgd29ya3NwYWNlW0RDVFNJWkUyXTsgLyogd29yayBhcmVhIGZvciBGRENUIHN1YnJvdXRpbmUgKi8KLSAgSkRJTUVOU0lPTiBiaTsKLQotICBzYW1wbGVfZGF0YSArPSBzdGFydF9yb3c7CS8qIGZvbGQgaW4gdGhlIHZlcnRpY2FsIG9mZnNldCBvbmNlICovCi0KLSAgZm9yIChiaSA9IDA7IGJpIDwgbnVtX2Jsb2NrczsgYmkrKywgc3RhcnRfY29sICs9IGNvbXBwdHItPkRDVF9oX3NjYWxlZF9zaXplKSB7Ci0gICAgLyogUGVyZm9ybSB0aGUgRENUICovCi0gICAgKCpkb19kY3QpICh3b3Jrc3BhY2UsIHNhbXBsZV9kYXRhLCBzdGFydF9jb2wpOwotCi0gICAgLyogUXVhbnRpemUvZGVzY2FsZSB0aGUgY29lZmZpY2llbnRzLCBhbmQgc3RvcmUgaW50byBjb2VmX2Jsb2Nrc1tdICovCi0gICAgeyByZWdpc3RlciBGQVNUX0ZMT0FUIHRlbXA7Ci0gICAgICByZWdpc3RlciBpbnQgaTsKLSAgICAgIHJlZ2lzdGVyIEpDT0VGUFRSIG91dHB1dF9wdHIgPSBjb2VmX2Jsb2Nrc1tiaV07Ci0KLSAgICAgIGZvciAoaSA9IDA7IGkgPCBEQ1RTSVpFMjsgaSsrKSB7Ci0JLyogQXBwbHkgdGhlIHF1YW50aXphdGlvbiBhbmQgc2NhbGluZyBmYWN0b3IgKi8KLQl0ZW1wID0gd29ya3NwYWNlW2ldICogZGl2aXNvcnNbaV07Ci0JLyogUm91bmQgdG8gbmVhcmVzdCBpbnRlZ2VyLgotCSAqIFNpbmNlIEMgZG9lcyBub3Qgc3BlY2lmeSB0aGUgZGlyZWN0aW9uIG9mIHJvdW5kaW5nIGZvciBuZWdhdGl2ZQotCSAqIHF1b3RpZW50cywgd2UgaGF2ZSB0byBmb3JjZSB0aGUgZGl2aWRlbmQgcG9zaXRpdmUgZm9yIHBvcnRhYmlsaXR5LgotCSAqIFRoZSBtYXhpbXVtIGNvZWZmaWNpZW50IHNpemUgaXMgKy0xNksgKGZvciAxMi1iaXQgZGF0YSksIHNvIHRoaXMKLQkgKiBjb2RlIHNob3VsZCB3b3JrIGZvciBlaXRoZXIgMTYtYml0IG9yIDMyLWJpdCBpbnRzLgotCSAqLwotCW91dHB1dF9wdHJbaV0gPSAoSkNPRUYpICgoaW50KSAodGVtcCArIChGQVNUX0ZMT0FUKSAxNjM4NC41KSAtIDE2Mzg0KTsKLSAgICAgIH0KLSAgICB9Ci0gIH0KLX0KLQotI2VuZGlmIC8qIERDVF9GTE9BVF9TVVBQT1JURUQgKi8KLQotCiAvKgogICogSW5pdGlhbGl6ZSBmb3IgYSBwcm9jZXNzaW5nIHBhc3MuCiAgKiBWZXJpZnkgdGhhdCBhbGwgcmVmZXJlbmNlZCBRLXRhYmxlcyBhcmUgcHJlc2VudCwgYW5kIHNldCB1cApAQCAtMTgyLDE3MCArMjEyLDExIEBACiAgIG15X2ZkY3RfcHRyIGZkY3QgPSAobXlfZmRjdF9wdHIpIGNpbmZvLT5mZGN0OwogICBpbnQgY2ksIHF0YmxubywgaTsKICAganBlZ19jb21wb25lbnRfaW5mbyAqY29tcHB0cjsKLSAgaW50IG1ldGhvZCA9IDA7CiAgIEpRVUFOVF9UQkwgKiBxdGJsOwogICBEQ1RFTEVNICogZHRibDsKIAogICBmb3IgKGNpID0gMCwgY29tcHB0ciA9IGNpbmZvLT5jb21wX2luZm87IGNpIDwgY2luZm8tPm51bV9jb21wb25lbnRzOwogICAgICAgIGNpKyssIGNvbXBwdHIrKykgewotICAgIC8qIFNlbGVjdCB0aGUgcHJvcGVyIERDVCByb3V0aW5lIGZvciB0aGlzIGNvbXBvbmVudCdzIHNjYWxpbmcgKi8KLSAgICBzd2l0Y2ggKChjb21wcHRyLT5EQ1RfaF9zY2FsZWRfc2l6ZSA8PCA4KSArIGNvbXBwdHItPkRDVF92X3NjYWxlZF9zaXplKSB7Ci0jaWZkZWYgRENUX1NDQUxJTkdfU1VQUE9SVEVECi0gICAgY2FzZSAoKDEgPDwgOCkgKyAxKToKLSAgICAgIGZkY3QtPmRvX2RjdFtjaV0gPSBqcGVnX2ZkY3RfMXgxOwotICAgICAgbWV0aG9kID0gSkRDVF9JU0xPVzsJLyogamZkY3RpbnQgdXNlcyBpc2xvdy1zdHlsZSB0YWJsZSAqLwotICAgICAgYnJlYWs7Ci0gICAgY2FzZSAoKDIgPDwgOCkgKyAyKToKLSAgICAgIGZkY3QtPmRvX2RjdFtjaV0gPSBqcGVnX2ZkY3RfMngyOwotICAgICAgbWV0aG9kID0gSkRDVF9JU0xPVzsJLyogamZkY3RpbnQgdXNlcyBpc2xvdy1zdHlsZSB0YWJsZSAqLwotICAgICAgYnJlYWs7Ci0gICAgY2FzZSAoKDMgPDwgOCkgKyAzKToKLSAgICAgIGZkY3QtPmRvX2RjdFtjaV0gPSBqcGVnX2ZkY3RfM3gzOwotICAgICAgbWV0aG9kID0gSkRDVF9JU0xPVzsJLyogamZkY3RpbnQgdXNlcyBpc2xvdy1zdHlsZSB0YWJsZSAqLwotICAgICAgYnJlYWs7Ci0gICAgY2FzZSAoKDQgPDwgOCkgKyA0KToKLSAgICAgIGZkY3QtPmRvX2RjdFtjaV0gPSBqcGVnX2ZkY3RfNHg0OwotICAgICAgbWV0aG9kID0gSkRDVF9JU0xPVzsJLyogamZkY3RpbnQgdXNlcyBpc2xvdy1zdHlsZSB0YWJsZSAqLwotICAgICAgYnJlYWs7Ci0gICAgY2FzZSAoKDUgPDwgOCkgKyA1KToKLSAgICAgIGZkY3QtPmRvX2RjdFtjaV0gPSBqcGVnX2ZkY3RfNXg1OwotICAgICAgbWV0aG9kID0gSkRDVF9JU0xPVzsJLyogamZkY3RpbnQgdXNlcyBpc2xvdy1zdHlsZSB0YWJsZSAqLwotICAgICAgYnJlYWs7Ci0gICAgY2FzZSAoKDYgPDwgOCkgKyA2KToKLSAgICAgIGZkY3QtPmRvX2RjdFtjaV0gPSBqcGVnX2ZkY3RfNng2OwotICAgICAgbWV0aG9kID0gSkRDVF9JU0xPVzsJLyogamZkY3RpbnQgdXNlcyBpc2xvdy1zdHlsZSB0YWJsZSAqLwotICAgICAgYnJlYWs7Ci0gICAgY2FzZSAoKDcgPDwgOCkgKyA3KToKLSAgICAgIGZkY3QtPmRvX2RjdFtjaV0gPSBqcGVnX2ZkY3RfN3g3OwotICAgICAgbWV0aG9kID0gSkRDVF9JU0xPVzsJLyogamZkY3RpbnQgdXNlcyBpc2xvdy1zdHlsZSB0YWJsZSAqLwotICAgICAgYnJlYWs7Ci0gICAgY2FzZSAoKDkgPDwgOCkgKyA5KToKLSAgICAgIGZkY3QtPmRvX2RjdFtjaV0gPSBqcGVnX2ZkY3RfOXg5OwotICAgICAgbWV0aG9kID0gSkRDVF9JU0xPVzsJLyogamZkY3RpbnQgdXNlcyBpc2xvdy1zdHlsZSB0YWJsZSAqLwotICAgICAgYnJlYWs7Ci0gICAgY2FzZSAoKDEwIDw8IDgpICsgMTApOgotICAgICAgZmRjdC0+ZG9fZGN0W2NpXSA9IGpwZWdfZmRjdF8xMHgxMDsKLSAgICAgIG1ldGhvZCA9IEpEQ1RfSVNMT1c7CS8qIGpmZGN0aW50IHVzZXMgaXNsb3ctc3R5bGUgdGFibGUgKi8KLSAgICAgIGJyZWFrOwotICAgIGNhc2UgKCgxMSA8PCA4KSArIDExKToKLSAgICAgIGZkY3QtPmRvX2RjdFtjaV0gPSBqcGVnX2ZkY3RfMTF4MTE7Ci0gICAgICBtZXRob2QgPSBKRENUX0lTTE9XOwkvKiBqZmRjdGludCB1c2VzIGlzbG93LXN0eWxlIHRhYmxlICovCi0gICAgICBicmVhazsKLSAgICBjYXNlICgoMTIgPDwgOCkgKyAxMik6Ci0gICAgICBmZGN0LT5kb19kY3RbY2ldID0ganBlZ19mZGN0XzEyeDEyOwotICAgICAgbWV0aG9kID0gSkRDVF9JU0xPVzsJLyogamZkY3RpbnQgdXNlcyBpc2xvdy1zdHlsZSB0YWJsZSAqLwotICAgICAgYnJlYWs7Ci0gICAgY2FzZSAoKDEzIDw8IDgpICsgMTMpOgotICAgICAgZmRjdC0+ZG9fZGN0W2NpXSA9IGpwZWdfZmRjdF8xM3gxMzsKLSAgICAgIG1ldGhvZCA9IEpEQ1RfSVNMT1c7CS8qIGpmZGN0aW50IHVzZXMgaXNsb3ctc3R5bGUgdGFibGUgKi8KLSAgICAgIGJyZWFrOwotICAgIGNhc2UgKCgxNCA8PCA4KSArIDE0KToKLSAgICAgIGZkY3QtPmRvX2RjdFtjaV0gPSBqcGVnX2ZkY3RfMTR4MTQ7Ci0gICAgICBtZXRob2QgPSBKRENUX0lTTE9XOwkvKiBqZmRjdGludCB1c2VzIGlzbG93LXN0eWxlIHRhYmxlICovCi0gICAgICBicmVhazsKLSAgICBjYXNlICgoMTUgPDwgOCkgKyAxNSk6Ci0gICAgICBmZGN0LT5kb19kY3RbY2ldID0ganBlZ19mZGN0XzE1eDE1OwotICAgICAgbWV0aG9kID0gSkRDVF9JU0xPVzsJLyogamZkY3RpbnQgdXNlcyBpc2xvdy1zdHlsZSB0YWJsZSAqLwotICAgICAgYnJlYWs7Ci0gICAgY2FzZSAoKDE2IDw8IDgpICsgMTYpOgotICAgICAgZmRjdC0+ZG9fZGN0W2NpXSA9IGpwZWdfZmRjdF8xNngxNjsKLSAgICAgIG1ldGhvZCA9IEpEQ1RfSVNMT1c7CS8qIGpmZGN0aW50IHVzZXMgaXNsb3ctc3R5bGUgdGFibGUgKi8KLSAgICAgIGJyZWFrOwotICAgIGNhc2UgKCgxNiA8PCA4KSArIDgpOgotICAgICAgZmRjdC0+ZG9fZGN0W2NpXSA9IGpwZWdfZmRjdF8xNng4OwotICAgICAgbWV0aG9kID0gSkRDVF9JU0xPVzsJLyogamZkY3RpbnQgdXNlcyBpc2xvdy1zdHlsZSB0YWJsZSAqLwotICAgICAgYnJlYWs7Ci0gICAgY2FzZSAoKDE0IDw8IDgpICsgNyk6Ci0gICAgICBmZGN0LT5kb19kY3RbY2ldID0ganBlZ19mZGN0XzE0eDc7Ci0gICAgICBtZXRob2QgPSBKRENUX0lTTE9XOwkvKiBqZmRjdGludCB1c2VzIGlzbG93LXN0eWxlIHRhYmxlICovCi0gICAgICBicmVhazsKLSAgICBjYXNlICgoMTIgPDwgOCkgKyA2KToKLSAgICAgIGZkY3QtPmRvX2RjdFtjaV0gPSBqcGVnX2ZkY3RfMTJ4NjsKLSAgICAgIG1ldGhvZCA9IEpEQ1RfSVNMT1c7CS8qIGpmZGN0aW50IHVzZXMgaXNsb3ctc3R5bGUgdGFibGUgKi8KLSAgICAgIGJyZWFrOwotICAgIGNhc2UgKCgxMCA8PCA4KSArIDUpOgotICAgICAgZmRjdC0+ZG9fZGN0W2NpXSA9IGpwZWdfZmRjdF8xMHg1OwotICAgICAgbWV0aG9kID0gSkRDVF9JU0xPVzsJLyogamZkY3RpbnQgdXNlcyBpc2xvdy1zdHlsZSB0YWJsZSAqLwotICAgICAgYnJlYWs7Ci0gICAgY2FzZSAoKDggPDwgOCkgKyA0KToKLSAgICAgIGZkY3QtPmRvX2RjdFtjaV0gPSBqcGVnX2ZkY3RfOHg0OwotICAgICAgbWV0aG9kID0gSkRDVF9JU0xPVzsJLyogamZkY3RpbnQgdXNlcyBpc2xvdy1zdHlsZSB0YWJsZSAqLwotICAgICAgYnJlYWs7Ci0gICAgY2FzZSAoKDYgPDwgOCkgKyAzKToKLSAgICAgIGZkY3QtPmRvX2RjdFtjaV0gPSBqcGVnX2ZkY3RfNngzOwotICAgICAgbWV0aG9kID0gSkRDVF9JU0xPVzsJLyogamZkY3RpbnQgdXNlcyBpc2xvdy1zdHlsZSB0YWJsZSAqLwotICAgICAgYnJlYWs7Ci0gICAgY2FzZSAoKDQgPDwgOCkgKyAyKToKLSAgICAgIGZkY3QtPmRvX2RjdFtjaV0gPSBqcGVnX2ZkY3RfNHgyOwotICAgICAgbWV0aG9kID0gSkRDVF9JU0xPVzsJLyogamZkY3RpbnQgdXNlcyBpc2xvdy1zdHlsZSB0YWJsZSAqLwotICAgICAgYnJlYWs7Ci0gICAgY2FzZSAoKDIgPDwgOCkgKyAxKToKLSAgICAgIGZkY3QtPmRvX2RjdFtjaV0gPSBqcGVnX2ZkY3RfMngxOwotICAgICAgbWV0aG9kID0gSkRDVF9JU0xPVzsJLyogamZkY3RpbnQgdXNlcyBpc2xvdy1zdHlsZSB0YWJsZSAqLwotICAgICAgYnJlYWs7Ci0gICAgY2FzZSAoKDggPDwgOCkgKyAxNik6Ci0gICAgICBmZGN0LT5kb19kY3RbY2ldID0ganBlZ19mZGN0Xzh4MTY7Ci0gICAgICBtZXRob2QgPSBKRENUX0lTTE9XOwkvKiBqZmRjdGludCB1c2VzIGlzbG93LXN0eWxlIHRhYmxlICovCi0gICAgICBicmVhazsKLSAgICBjYXNlICgoNyA8PCA4KSArIDE0KToKLSAgICAgIGZkY3QtPmRvX2RjdFtjaV0gPSBqcGVnX2ZkY3RfN3gxNDsKLSAgICAgIG1ldGhvZCA9IEpEQ1RfSVNMT1c7CS8qIGpmZGN0aW50IHVzZXMgaXNsb3ctc3R5bGUgdGFibGUgKi8KLSAgICAgIGJyZWFrOwotICAgIGNhc2UgKCg2IDw8IDgpICsgMTIpOgotICAgICAgZmRjdC0+ZG9fZGN0W2NpXSA9IGpwZWdfZmRjdF82eDEyOwotICAgICAgbWV0aG9kID0gSkRDVF9JU0xPVzsJLyogamZkY3RpbnQgdXNlcyBpc2xvdy1zdHlsZSB0YWJsZSAqLwotICAgICAgYnJlYWs7Ci0gICAgY2FzZSAoKDUgPDwgOCkgKyAxMCk6Ci0gICAgICBmZGN0LT5kb19kY3RbY2ldID0ganBlZ19mZGN0XzV4MTA7Ci0gICAgICBtZXRob2QgPSBKRENUX0lTTE9XOwkvKiBqZmRjdGludCB1c2VzIGlzbG93LXN0eWxlIHRhYmxlICovCi0gICAgICBicmVhazsKLSAgICBjYXNlICgoNCA8PCA4KSArIDgpOgotICAgICAgZmRjdC0+ZG9fZGN0W2NpXSA9IGpwZWdfZmRjdF80eDg7Ci0gICAgICBtZXRob2QgPSBKRENUX0lTTE9XOwkvKiBqZmRjdGludCB1c2VzIGlzbG93LXN0eWxlIHRhYmxlICovCi0gICAgICBicmVhazsKLSAgICBjYXNlICgoMyA8PCA4KSArIDYpOgotICAgICAgZmRjdC0+ZG9fZGN0W2NpXSA9IGpwZWdfZmRjdF8zeDY7Ci0gICAgICBtZXRob2QgPSBKRENUX0lTTE9XOwkvKiBqZmRjdGludCB1c2VzIGlzbG93LXN0eWxlIHRhYmxlICovCi0gICAgICBicmVhazsKLSAgICBjYXNlICgoMiA8PCA4KSArIDQpOgotICAgICAgZmRjdC0+ZG9fZGN0W2NpXSA9IGpwZWdfZmRjdF8yeDQ7Ci0gICAgICBtZXRob2QgPSBKRENUX0lTTE9XOwkvKiBqZmRjdGludCB1c2VzIGlzbG93LXN0eWxlIHRhYmxlICovCi0gICAgICBicmVhazsKLSAgICBjYXNlICgoMSA8PCA4KSArIDIpOgotICAgICAgZmRjdC0+ZG9fZGN0W2NpXSA9IGpwZWdfZmRjdF8xeDI7Ci0gICAgICBtZXRob2QgPSBKRENUX0lTTE9XOwkvKiBqZmRjdGludCB1c2VzIGlzbG93LXN0eWxlIHRhYmxlICovCi0gICAgICBicmVhazsKLSNlbmRpZgotICAgIGNhc2UgKChEQ1RTSVpFIDw8IDgpICsgRENUU0laRSk6Ci0gICAgICBzd2l0Y2ggKGNpbmZvLT5kY3RfbWV0aG9kKSB7Ci0jaWZkZWYgRENUX0lTTE9XX1NVUFBPUlRFRAotICAgICAgY2FzZSBKRENUX0lTTE9XOgotCWZkY3QtPmRvX2RjdFtjaV0gPSBqcGVnX2ZkY3RfaXNsb3c7Ci0JbWV0aG9kID0gSkRDVF9JU0xPVzsKLQlicmVhazsKLSNlbmRpZgotI2lmZGVmIERDVF9JRkFTVF9TVVBQT1JURUQKLSAgICAgIGNhc2UgSkRDVF9JRkFTVDoKLQlmZGN0LT5kb19kY3RbY2ldID0ganBlZ19mZGN0X2lmYXN0OwotCW1ldGhvZCA9IEpEQ1RfSUZBU1Q7Ci0JYnJlYWs7Ci0jZW5kaWYKLSNpZmRlZiBEQ1RfRkxPQVRfU1VQUE9SVEVECi0gICAgICBjYXNlIEpEQ1RfRkxPQVQ6Ci0JZmRjdC0+ZG9fZmxvYXRfZGN0W2NpXSA9IGpwZWdfZmRjdF9mbG9hdDsKLQltZXRob2QgPSBKRENUX0ZMT0FUOwotCWJyZWFrOwotI2VuZGlmCi0gICAgICBkZWZhdWx0OgotCUVSUkVYSVQoY2luZm8sIEpFUlJfTk9UX0NPTVBJTEVEKTsKLQlicmVhazsKLSAgICAgIH0KLSAgICAgIGJyZWFrOwotICAgIGRlZmF1bHQ6Ci0gICAgICBFUlJFWElUMihjaW5mbywgSkVSUl9CQURfRENUU0laRSwKLQkgICAgICAgY29tcHB0ci0+RENUX2hfc2NhbGVkX3NpemUsIGNvbXBwdHItPkRDVF92X3NjYWxlZF9zaXplKTsKLSAgICAgIGJyZWFrOwotICAgIH0KICAgICBxdGJsbm8gPSBjb21wcHRyLT5xdWFudF90Ymxfbm87CiAgICAgLyogTWFrZSBzdXJlIHNwZWNpZmllZCBxdWFudGl6YXRpb24gdGFibGUgaXMgcHJlc2VudCAqLwogICAgIGlmIChxdGJsbm8gPCAwIHx8IHF0YmxubyA+PSBOVU1fUVVBTlRfVEJMUyB8fApAQCAtMzU0LDggKzIyNSw4IEBACiAgICAgcXRibCA9IGNpbmZvLT5xdWFudF90YmxfcHRyc1txdGJsbm9dOwogICAgIC8qIENvbXB1dGUgZGl2aXNvcnMgZm9yIHRoaXMgcXVhbnQgdGFibGUgKi8KICAgICAvKiBXZSBtYXkgZG8gdGhpcyBtb3JlIHRoYW4gb25jZSBmb3Igc2FtZSB0YWJsZSwgYnV0IGl0J3Mgbm90IGEgYmlnIGRlYWwgKi8KLSAgICBzd2l0Y2ggKG1ldGhvZCkgewotI2lmZGVmIFBST1ZJREVfSVNMT1dfVEFCTEVTCisgICAgc3dpdGNoIChjaW5mby0+ZGN0X21ldGhvZCkgeworI2lmZGVmIERDVF9JU0xPV19TVVBQT1JURUQKICAgICBjYXNlIEpEQ1RfSVNMT1c6CiAgICAgICAvKiBGb3IgTEwmTSBJRENUIG1ldGhvZCwgZGl2aXNvcnMgYXJlIGVxdWFsIHRvIHJhdyBxdWFudGl6YXRpb24KICAgICAgICAqIGNvZWZmaWNpZW50cyBtdWx0aXBsaWVkIGJ5IDggKHRvIGNvdW50ZXJhY3Qgc2NhbGluZykuCkBAIC0zNjMsMTMgKzIzNCwxNCBAQAogICAgICAgaWYgKGZkY3QtPmRpdmlzb3JzW3F0Ymxub10gPT0gTlVMTCkgewogCWZkY3QtPmRpdmlzb3JzW3F0Ymxub10gPSAoRENURUxFTSAqKQogCSAgKCpjaW5mby0+bWVtLT5hbGxvY19zbWFsbCkgKChqX2NvbW1vbl9wdHIpIGNpbmZvLCBKUE9PTF9JTUFHRSwKLQkJCQkgICAgICBEQ1RTSVpFMiAqIFNJWkVPRihEQ1RFTEVNKSk7CisJCQkJICAgICAgKERDVFNJWkUyICogNCkgKiBTSVpFT0YoRENURUxFTSkpOwogICAgICAgfQogICAgICAgZHRibCA9IGZkY3QtPmRpdmlzb3JzW3F0Ymxub107CiAgICAgICBmb3IgKGkgPSAwOyBpIDwgRENUU0laRTI7IGkrKykgewotCWR0YmxbaV0gPSAoKERDVEVMRU0pIHF0YmwtPnF1YW50dmFsW2ldKSA8PCAzOworCWlmKCFjb21wdXRlX3JlY2lwcm9jYWwocXRibC0+cXVhbnR2YWxbaV0gPDwgMywgJmR0YmxbaV0pCisJICAmJiBmZGN0LT5xdWFudGl6ZSA9PSBqc2ltZF9xdWFudGl6ZSkKKwkgIGZkY3QtPnF1YW50aXplID0gcXVhbnRpemU7CiAgICAgICB9Ci0gICAgICBmZGN0LT5wdWIuZm9yd2FyZF9EQ1RbY2ldID0gZm9yd2FyZF9EQ1Q7CiAgICAgICBicmVhazsKICNlbmRpZgogI2lmZGVmIERDVF9JRkFTVF9TVVBQT1JURUQKQEAgLTM5OCwxNyArMjcwLDE4IEBACiAJaWYgKGZkY3QtPmRpdmlzb3JzW3F0Ymxub10gPT0gTlVMTCkgewogCSAgZmRjdC0+ZGl2aXNvcnNbcXRibG5vXSA9IChEQ1RFTEVNICopCiAJICAgICgqY2luZm8tPm1lbS0+YWxsb2Nfc21hbGwpICgoal9jb21tb25fcHRyKSBjaW5mbywgSlBPT0xfSU1BR0UsCi0JCQkJCURDVFNJWkUyICogU0laRU9GKERDVEVMRU0pKTsKKwkJCQkJKERDVFNJWkUyICogNCkgKiBTSVpFT0YoRENURUxFTSkpOwogCX0KIAlkdGJsID0gZmRjdC0+ZGl2aXNvcnNbcXRibG5vXTsKIAlmb3IgKGkgPSAwOyBpIDwgRENUU0laRTI7IGkrKykgewotCSAgZHRibFtpXSA9IChEQ1RFTEVNKQorCSAgaWYoIWNvbXB1dGVfcmVjaXByb2NhbCgKIAkgICAgREVTQ0FMRShNVUxUSVBMWTE2VjE2KChJTlQzMikgcXRibC0+cXVhbnR2YWxbaV0sCiAJCQkJICAoSU5UMzIpIGFhbnNjYWxlc1tpXSksCi0JCSAgICBDT05TVF9CSVRTLTMpOworCQkgICAgQ09OU1RfQklUUy0zKSwgJmR0YmxbaV0pCisJICAgICYmIGZkY3QtPnF1YW50aXplID09IGpzaW1kX3F1YW50aXplKQorCSAgICBmZGN0LT5xdWFudGl6ZSA9IHF1YW50aXplOwogCX0KICAgICAgIH0KLSAgICAgIGZkY3QtPnB1Yi5mb3J3YXJkX0RDVFtjaV0gPSBmb3J3YXJkX0RDVDsKICAgICAgIGJyZWFrOwogI2VuZGlmCiAjaWZkZWYgRENUX0ZMT0FUX1NVUFBPUlRFRApAQCAtNDQ1LDcgKzMxOCw2IEBACiAJICB9CiAJfQogICAgICAgfQotICAgICAgZmRjdC0+cHViLmZvcndhcmRfRENUW2NpXSA9IGZvcndhcmRfRENUX2Zsb2F0OwogICAgICAgYnJlYWs7CiAjZW5kaWYKICAgICBkZWZhdWx0OgpAQCAtNDU3LDYgKzMyOSwyMTIgQEAKIAogCiAvKgorICogTG9hZCBkYXRhIGludG8gd29ya3NwYWNlLCBhcHBseWluZyB1bnNpZ25lZC0+c2lnbmVkIGNvbnZlcnNpb24uCisgKi8KKworTUVUSE9EREVGKHZvaWQpCitjb252c2FtcCAoSlNBTVBBUlJBWSBzYW1wbGVfZGF0YSwgSkRJTUVOU0lPTiBzdGFydF9jb2wsIERDVEVMRU0gKiB3b3Jrc3BhY2UpCit7CisgIHJlZ2lzdGVyIERDVEVMRU0gKndvcmtzcGFjZXB0cjsKKyAgcmVnaXN0ZXIgSlNBTVBST1cgZWxlbXB0cjsKKyAgcmVnaXN0ZXIgaW50IGVsZW1yOworCisgIHdvcmtzcGFjZXB0ciA9IHdvcmtzcGFjZTsKKyAgZm9yIChlbGVtciA9IDA7IGVsZW1yIDwgRENUU0laRTsgZWxlbXIrKykgeworICAgIGVsZW1wdHIgPSBzYW1wbGVfZGF0YVtlbGVtcl0gKyBzdGFydF9jb2w7CisKKyNpZiBEQ1RTSVpFID09IDgJCS8qIHVucm9sbCB0aGUgaW5uZXIgbG9vcCAqLworICAgICp3b3Jrc3BhY2VwdHIrKyA9IEdFVEpTQU1QTEUoKmVsZW1wdHIrKykgLSBDRU5URVJKU0FNUExFOworICAgICp3b3Jrc3BhY2VwdHIrKyA9IEdFVEpTQU1QTEUoKmVsZW1wdHIrKykgLSBDRU5URVJKU0FNUExFOworICAgICp3b3Jrc3BhY2VwdHIrKyA9IEdFVEpTQU1QTEUoKmVsZW1wdHIrKykgLSBDRU5URVJKU0FNUExFOworICAgICp3b3Jrc3BhY2VwdHIrKyA9IEdFVEpTQU1QTEUoKmVsZW1wdHIrKykgLSBDRU5URVJKU0FNUExFOworICAgICp3b3Jrc3BhY2VwdHIrKyA9IEdFVEpTQU1QTEUoKmVsZW1wdHIrKykgLSBDRU5URVJKU0FNUExFOworICAgICp3b3Jrc3BhY2VwdHIrKyA9IEdFVEpTQU1QTEUoKmVsZW1wdHIrKykgLSBDRU5URVJKU0FNUExFOworICAgICp3b3Jrc3BhY2VwdHIrKyA9IEdFVEpTQU1QTEUoKmVsZW1wdHIrKykgLSBDRU5URVJKU0FNUExFOworICAgICp3b3Jrc3BhY2VwdHIrKyA9IEdFVEpTQU1QTEUoKmVsZW1wdHIrKykgLSBDRU5URVJKU0FNUExFOworI2Vsc2UKKyAgICB7CisgICAgICByZWdpc3RlciBpbnQgZWxlbWM7CisgICAgICBmb3IgKGVsZW1jID0gRENUU0laRTsgZWxlbWMgPiAwOyBlbGVtYy0tKQorICAgICAgICAqd29ya3NwYWNlcHRyKysgPSBHRVRKU0FNUExFKCplbGVtcHRyKyspIC0gQ0VOVEVSSlNBTVBMRTsKKyAgICB9CisjZW5kaWYKKyAgfQorfQorCisKKy8qCisgKiBRdWFudGl6ZS9kZXNjYWxlIHRoZSBjb2VmZmljaWVudHMsIGFuZCBzdG9yZSBpbnRvIGNvZWZfYmxvY2tzW10uCisgKi8KKworTUVUSE9EREVGKHZvaWQpCitxdWFudGl6ZSAoSkNPRUZQVFIgY29lZl9ibG9jaywgRENURUxFTSAqIGRpdmlzb3JzLCBEQ1RFTEVNICogd29ya3NwYWNlKQoreworICBpbnQgaTsKKyAgRENURUxFTSB0ZW1wOworICBVRENURUxFTSByZWNpcCwgY29yciwgc2hpZnQ7CisgIFVEQ1RFTEVNMiBwcm9kdWN0OworICBKQ09FRlBUUiBvdXRwdXRfcHRyID0gY29lZl9ibG9jazsKKworICBmb3IgKGkgPSAwOyBpIDwgRENUU0laRTI7IGkrKykgeworICAgIHRlbXAgPSB3b3Jrc3BhY2VbaV07CisgICAgcmVjaXAgPSBkaXZpc29yc1tpICsgRENUU0laRTIgKiAwXTsKKyAgICBjb3JyID0gIGRpdmlzb3JzW2kgKyBEQ1RTSVpFMiAqIDFdOworICAgIHNoaWZ0ID0gZGl2aXNvcnNbaSArIERDVFNJWkUyICogM107CisKKyAgICBpZiAodGVtcCA8IDApIHsKKyAgICAgIHRlbXAgPSAtdGVtcDsKKyAgICAgIHByb2R1Y3QgPSAoVURDVEVMRU0yKSh0ZW1wICsgY29ycikgKiByZWNpcDsKKyAgICAgIHByb2R1Y3QgPj49IHNoaWZ0ICsgc2l6ZW9mKERDVEVMRU0pKjg7CisgICAgICB0ZW1wID0gcHJvZHVjdDsKKyAgICAgIHRlbXAgPSAtdGVtcDsKKyAgICB9IGVsc2UgeworICAgICAgcHJvZHVjdCA9IChVRENURUxFTTIpKHRlbXAgKyBjb3JyKSAqIHJlY2lwOworICAgICAgcHJvZHVjdCA+Pj0gc2hpZnQgKyBzaXplb2YoRENURUxFTSkqODsKKyAgICAgIHRlbXAgPSBwcm9kdWN0OworICAgIH0KKworICAgIG91dHB1dF9wdHJbaV0gPSAoSkNPRUYpIHRlbXA7CisgIH0KK30KKworCisvKgorICogUGVyZm9ybSBmb3J3YXJkIERDVCBvbiBvbmUgb3IgbW9yZSBibG9ja3Mgb2YgYSBjb21wb25lbnQuCisgKgorICogVGhlIGlucHV0IHNhbXBsZXMgYXJlIHRha2VuIGZyb20gdGhlIHNhbXBsZV9kYXRhW10gYXJyYXkgc3RhcnRpbmcgYXQKKyAqIHBvc2l0aW9uIHN0YXJ0X3Jvdy9zdGFydF9jb2wsIGFuZCBtb3ZpbmcgdG8gdGhlIHJpZ2h0IGZvciBhbnkgYWRkaXRpb25hbAorICogYmxvY2tzLiBUaGUgcXVhbnRpemVkIGNvZWZmaWNpZW50cyBhcmUgcmV0dXJuZWQgaW4gY29lZl9ibG9ja3NbXS4KKyAqLworCitNRVRIT0RERUYodm9pZCkKK2ZvcndhcmRfRENUIChqX2NvbXByZXNzX3B0ciBjaW5mbywganBlZ19jb21wb25lbnRfaW5mbyAqIGNvbXBwdHIsCisJICAgICBKU0FNUEFSUkFZIHNhbXBsZV9kYXRhLCBKQkxPQ0tST1cgY29lZl9ibG9ja3MsCisJICAgICBKRElNRU5TSU9OIHN0YXJ0X3JvdywgSkRJTUVOU0lPTiBzdGFydF9jb2wsCisJICAgICBKRElNRU5TSU9OIG51bV9ibG9ja3MpCisvKiBUaGlzIHZlcnNpb24gaXMgdXNlZCBmb3IgaW50ZWdlciBEQ1QgaW1wbGVtZW50YXRpb25zLiAqLworeworICAvKiBUaGlzIHJvdXRpbmUgaXMgaGVhdmlseSB1c2VkLCBzbyBpdCdzIHdvcnRoIGNvZGluZyBpdCB0aWdodGx5LiAqLworICBteV9mZGN0X3B0ciBmZGN0ID0gKG15X2ZkY3RfcHRyKSBjaW5mby0+ZmRjdDsKKyAgRENURUxFTSAqIGRpdmlzb3JzID0gZmRjdC0+ZGl2aXNvcnNbY29tcHB0ci0+cXVhbnRfdGJsX25vXTsKKyAgRENURUxFTSAqIHdvcmtzcGFjZTsKKyAgSkRJTUVOU0lPTiBiaTsKKworICAvKiBNYWtlIHN1cmUgdGhlIGNvbXBpbGVyIGRvZXNuJ3QgbG9vayB1cCB0aGVzZSBldmVyeSBwYXNzICovCisgIGZvcndhcmRfRENUX21ldGhvZF9wdHIgZG9fZGN0ID0gZmRjdC0+ZGN0OworICBjb252c2FtcF9tZXRob2RfcHRyIGRvX2NvbnZzYW1wID0gZmRjdC0+Y29udnNhbXA7CisgIHF1YW50aXplX21ldGhvZF9wdHIgZG9fcXVhbnRpemUgPSBmZGN0LT5xdWFudGl6ZTsKKyAgd29ya3NwYWNlID0gZmRjdC0+d29ya3NwYWNlOworCisgIHNhbXBsZV9kYXRhICs9IHN0YXJ0X3JvdzsJLyogZm9sZCBpbiB0aGUgdmVydGljYWwgb2Zmc2V0IG9uY2UgKi8KKworICBmb3IgKGJpID0gMDsgYmkgPCBudW1fYmxvY2tzOyBiaSsrLCBzdGFydF9jb2wgKz0gRENUU0laRSkgeworICAgIC8qIExvYWQgZGF0YSBpbnRvIHdvcmtzcGFjZSwgYXBwbHlpbmcgdW5zaWduZWQtPnNpZ25lZCBjb252ZXJzaW9uICovCisgICAgKCpkb19jb252c2FtcCkgKHNhbXBsZV9kYXRhLCBzdGFydF9jb2wsIHdvcmtzcGFjZSk7CisKKyAgICAvKiBQZXJmb3JtIHRoZSBEQ1QgKi8KKyAgICAoKmRvX2RjdCkgKHdvcmtzcGFjZSk7CisKKyAgICAvKiBRdWFudGl6ZS9kZXNjYWxlIHRoZSBjb2VmZmljaWVudHMsIGFuZCBzdG9yZSBpbnRvIGNvZWZfYmxvY2tzW10gKi8KKyAgICAoKmRvX3F1YW50aXplKSAoY29lZl9ibG9ja3NbYmldLCBkaXZpc29ycywgd29ya3NwYWNlKTsKKyAgfQorfQorCisKKyNpZmRlZiBEQ1RfRkxPQVRfU1VQUE9SVEVECisKKworTUVUSE9EREVGKHZvaWQpCitjb252c2FtcF9mbG9hdCAoSlNBTVBBUlJBWSBzYW1wbGVfZGF0YSwgSkRJTUVOU0lPTiBzdGFydF9jb2wsIEZBU1RfRkxPQVQgKiB3b3Jrc3BhY2UpCit7CisgIHJlZ2lzdGVyIEZBU1RfRkxPQVQgKndvcmtzcGFjZXB0cjsKKyAgcmVnaXN0ZXIgSlNBTVBST1cgZWxlbXB0cjsKKyAgcmVnaXN0ZXIgaW50IGVsZW1yOworCisgIHdvcmtzcGFjZXB0ciA9IHdvcmtzcGFjZTsKKyAgZm9yIChlbGVtciA9IDA7IGVsZW1yIDwgRENUU0laRTsgZWxlbXIrKykgeworICAgIGVsZW1wdHIgPSBzYW1wbGVfZGF0YVtlbGVtcl0gKyBzdGFydF9jb2w7CisjaWYgRENUU0laRSA9PSA4CQkvKiB1bnJvbGwgdGhlIGlubmVyIGxvb3AgKi8KKyAgICAqd29ya3NwYWNlcHRyKysgPSAoRkFTVF9GTE9BVCkoR0VUSlNBTVBMRSgqZWxlbXB0cisrKSAtIENFTlRFUkpTQU1QTEUpOworICAgICp3b3Jrc3BhY2VwdHIrKyA9IChGQVNUX0ZMT0FUKShHRVRKU0FNUExFKCplbGVtcHRyKyspIC0gQ0VOVEVSSlNBTVBMRSk7CisgICAgKndvcmtzcGFjZXB0cisrID0gKEZBU1RfRkxPQVQpKEdFVEpTQU1QTEUoKmVsZW1wdHIrKykgLSBDRU5URVJKU0FNUExFKTsKKyAgICAqd29ya3NwYWNlcHRyKysgPSAoRkFTVF9GTE9BVCkoR0VUSlNBTVBMRSgqZWxlbXB0cisrKSAtIENFTlRFUkpTQU1QTEUpOworICAgICp3b3Jrc3BhY2VwdHIrKyA9IChGQVNUX0ZMT0FUKShHRVRKU0FNUExFKCplbGVtcHRyKyspIC0gQ0VOVEVSSlNBTVBMRSk7CisgICAgKndvcmtzcGFjZXB0cisrID0gKEZBU1RfRkxPQVQpKEdFVEpTQU1QTEUoKmVsZW1wdHIrKykgLSBDRU5URVJKU0FNUExFKTsKKyAgICAqd29ya3NwYWNlcHRyKysgPSAoRkFTVF9GTE9BVCkoR0VUSlNBTVBMRSgqZWxlbXB0cisrKSAtIENFTlRFUkpTQU1QTEUpOworICAgICp3b3Jrc3BhY2VwdHIrKyA9IChGQVNUX0ZMT0FUKShHRVRKU0FNUExFKCplbGVtcHRyKyspIC0gQ0VOVEVSSlNBTVBMRSk7CisjZWxzZQorICAgIHsKKyAgICAgIHJlZ2lzdGVyIGludCBlbGVtYzsKKyAgICAgIGZvciAoZWxlbWMgPSBEQ1RTSVpFOyBlbGVtYyA+IDA7IGVsZW1jLS0pCisgICAgICAgICp3b3Jrc3BhY2VwdHIrKyA9IChGQVNUX0ZMT0FUKQorICAgICAgICAgICAgICAgICAgICAgICAgICAoR0VUSlNBTVBMRSgqZWxlbXB0cisrKSAtIENFTlRFUkpTQU1QTEUpOworICAgIH0KKyNlbmRpZgorICB9Cit9CisKKworTUVUSE9EREVGKHZvaWQpCitxdWFudGl6ZV9mbG9hdCAoSkNPRUZQVFIgY29lZl9ibG9jaywgRkFTVF9GTE9BVCAqIGRpdmlzb3JzLCBGQVNUX0ZMT0FUICogd29ya3NwYWNlKQoreworICByZWdpc3RlciBGQVNUX0ZMT0FUIHRlbXA7CisgIHJlZ2lzdGVyIGludCBpOworICByZWdpc3RlciBKQ09FRlBUUiBvdXRwdXRfcHRyID0gY29lZl9ibG9jazsKKworICBmb3IgKGkgPSAwOyBpIDwgRENUU0laRTI7IGkrKykgeworICAgIC8qIEFwcGx5IHRoZSBxdWFudGl6YXRpb24gYW5kIHNjYWxpbmcgZmFjdG9yICovCisgICAgdGVtcCA9IHdvcmtzcGFjZVtpXSAqIGRpdmlzb3JzW2ldOworCisgICAgLyogUm91bmQgdG8gbmVhcmVzdCBpbnRlZ2VyLgorICAgICAqIFNpbmNlIEMgZG9lcyBub3Qgc3BlY2lmeSB0aGUgZGlyZWN0aW9uIG9mIHJvdW5kaW5nIGZvciBuZWdhdGl2ZQorICAgICAqIHF1b3RpZW50cywgd2UgaGF2ZSB0byBmb3JjZSB0aGUgZGl2aWRlbmQgcG9zaXRpdmUgZm9yIHBvcnRhYmlsaXR5LgorICAgICAqIFRoZSBtYXhpbXVtIGNvZWZmaWNpZW50IHNpemUgaXMgKy0xNksgKGZvciAxMi1iaXQgZGF0YSksIHNvIHRoaXMKKyAgICAgKiBjb2RlIHNob3VsZCB3b3JrIGZvciBlaXRoZXIgMTYtYml0IG9yIDMyLWJpdCBpbnRzLgorICAgICAqLworICAgIG91dHB1dF9wdHJbaV0gPSAoSkNPRUYpICgoaW50KSAodGVtcCArIChGQVNUX0ZMT0FUKSAxNjM4NC41KSAtIDE2Mzg0KTsKKyAgfQorfQorCisKK01FVEhPRERFRih2b2lkKQorZm9yd2FyZF9EQ1RfZmxvYXQgKGpfY29tcHJlc3NfcHRyIGNpbmZvLCBqcGVnX2NvbXBvbmVudF9pbmZvICogY29tcHB0ciwKKwkJICAgSlNBTVBBUlJBWSBzYW1wbGVfZGF0YSwgSkJMT0NLUk9XIGNvZWZfYmxvY2tzLAorCQkgICBKRElNRU5TSU9OIHN0YXJ0X3JvdywgSkRJTUVOU0lPTiBzdGFydF9jb2wsCisJCSAgIEpESU1FTlNJT04gbnVtX2Jsb2NrcykKKy8qIFRoaXMgdmVyc2lvbiBpcyB1c2VkIGZvciBmbG9hdGluZy1wb2ludCBEQ1QgaW1wbGVtZW50YXRpb25zLiAqLworeworICAvKiBUaGlzIHJvdXRpbmUgaXMgaGVhdmlseSB1c2VkLCBzbyBpdCdzIHdvcnRoIGNvZGluZyBpdCB0aWdodGx5LiAqLworICBteV9mZGN0X3B0ciBmZGN0ID0gKG15X2ZkY3RfcHRyKSBjaW5mby0+ZmRjdDsKKyAgRkFTVF9GTE9BVCAqIGRpdmlzb3JzID0gZmRjdC0+ZmxvYXRfZGl2aXNvcnNbY29tcHB0ci0+cXVhbnRfdGJsX25vXTsKKyAgRkFTVF9GTE9BVCAqIHdvcmtzcGFjZTsKKyAgSkRJTUVOU0lPTiBiaTsKKworCisgIC8qIE1ha2Ugc3VyZSB0aGUgY29tcGlsZXIgZG9lc24ndCBsb29rIHVwIHRoZXNlIGV2ZXJ5IHBhc3MgKi8KKyAgZmxvYXRfRENUX21ldGhvZF9wdHIgZG9fZGN0ID0gZmRjdC0+ZmxvYXRfZGN0OworICBmbG9hdF9jb252c2FtcF9tZXRob2RfcHRyIGRvX2NvbnZzYW1wID0gZmRjdC0+ZmxvYXRfY29udnNhbXA7CisgIGZsb2F0X3F1YW50aXplX21ldGhvZF9wdHIgZG9fcXVhbnRpemUgPSBmZGN0LT5mbG9hdF9xdWFudGl6ZTsKKyAgd29ya3NwYWNlID0gZmRjdC0+ZmxvYXRfd29ya3NwYWNlOworCisgIHNhbXBsZV9kYXRhICs9IHN0YXJ0X3JvdzsJLyogZm9sZCBpbiB0aGUgdmVydGljYWwgb2Zmc2V0IG9uY2UgKi8KKworICBmb3IgKGJpID0gMDsgYmkgPCBudW1fYmxvY2tzOyBiaSsrLCBzdGFydF9jb2wgKz0gRENUU0laRSkgeworICAgIC8qIExvYWQgZGF0YSBpbnRvIHdvcmtzcGFjZSwgYXBwbHlpbmcgdW5zaWduZWQtPnNpZ25lZCBjb252ZXJzaW9uICovCisgICAgKCpkb19jb252c2FtcCkgKHNhbXBsZV9kYXRhLCBzdGFydF9jb2wsIHdvcmtzcGFjZSk7CisKKyAgICAvKiBQZXJmb3JtIHRoZSBEQ1QgKi8KKyAgICAoKmRvX2RjdCkgKHdvcmtzcGFjZSk7CisKKyAgICAvKiBRdWFudGl6ZS9kZXNjYWxlIHRoZSBjb2VmZmljaWVudHMsIGFuZCBzdG9yZSBpbnRvIGNvZWZfYmxvY2tzW10gKi8KKyAgICAoKmRvX3F1YW50aXplKSAoY29lZl9ibG9ja3NbYmldLCBkaXZpc29ycywgd29ya3NwYWNlKTsKKyAgfQorfQorCisjZW5kaWYgLyogRENUX0ZMT0FUX1NVUFBPUlRFRCAqLworCisKKy8qCiAgKiBJbml0aWFsaXplIEZEQ1QgbWFuYWdlci4KICAqLwogCkBAIC00NzIsNiArNTUwLDg4IEBACiAgIGNpbmZvLT5mZGN0ID0gKHN0cnVjdCBqcGVnX2ZvcndhcmRfZGN0ICopIGZkY3Q7CiAgIGZkY3QtPnB1Yi5zdGFydF9wYXNzID0gc3RhcnRfcGFzc19mZGN0bWdyOwogCisgIC8qIEZpcnN0IGRldGVybWluZSB0aGUgRENULi4uICovCisgIHN3aXRjaCAoY2luZm8tPmRjdF9tZXRob2QpIHsKKyNpZmRlZiBEQ1RfSVNMT1dfU1VQUE9SVEVECisgIGNhc2UgSkRDVF9JU0xPVzoKKyAgICBmZGN0LT5wdWIuZm9yd2FyZF9EQ1QgPSBmb3J3YXJkX0RDVDsKKyAgICBpZiAoanNpbWRfY2FuX2ZkY3RfaXNsb3coKSkKKyAgICAgIGZkY3QtPmRjdCA9IGpzaW1kX2ZkY3RfaXNsb3c7CisgICAgZWxzZQorICAgICAgZmRjdC0+ZGN0ID0ganBlZ19mZGN0X2lzbG93OworICAgIGJyZWFrOworI2VuZGlmCisjaWZkZWYgRENUX0lGQVNUX1NVUFBPUlRFRAorICBjYXNlIEpEQ1RfSUZBU1Q6CisgICAgZmRjdC0+cHViLmZvcndhcmRfRENUID0gZm9yd2FyZF9EQ1Q7CisgICAgaWYgKGpzaW1kX2Nhbl9mZGN0X2lmYXN0KCkpCisgICAgICBmZGN0LT5kY3QgPSBqc2ltZF9mZGN0X2lmYXN0OworICAgIGVsc2UKKyAgICAgIGZkY3QtPmRjdCA9IGpwZWdfZmRjdF9pZmFzdDsKKyAgICBicmVhazsKKyNlbmRpZgorI2lmZGVmIERDVF9GTE9BVF9TVVBQT1JURUQKKyAgY2FzZSBKRENUX0ZMT0FUOgorICAgIGZkY3QtPnB1Yi5mb3J3YXJkX0RDVCA9IGZvcndhcmRfRENUX2Zsb2F0OworICAgIGlmIChqc2ltZF9jYW5fZmRjdF9mbG9hdCgpKQorICAgICAgZmRjdC0+ZmxvYXRfZGN0ID0ganNpbWRfZmRjdF9mbG9hdDsKKyAgICBlbHNlCisgICAgICBmZGN0LT5mbG9hdF9kY3QgPSBqcGVnX2ZkY3RfZmxvYXQ7CisgICAgYnJlYWs7CisjZW5kaWYKKyAgZGVmYXVsdDoKKyAgICBFUlJFWElUKGNpbmZvLCBKRVJSX05PVF9DT01QSUxFRCk7CisgICAgYnJlYWs7CisgIH0KKworICAvKiAuLi50aGVuIHRoZSBzdXBwb3J0aW5nIHN0YWdlcy4gKi8KKyAgc3dpdGNoIChjaW5mby0+ZGN0X21ldGhvZCkgeworI2lmZGVmIERDVF9JU0xPV19TVVBQT1JURUQKKyAgY2FzZSBKRENUX0lTTE9XOgorI2VuZGlmCisjaWZkZWYgRENUX0lGQVNUX1NVUFBPUlRFRAorICBjYXNlIEpEQ1RfSUZBU1Q6CisjZW5kaWYKKyNpZiBkZWZpbmVkKERDVF9JU0xPV19TVVBQT1JURUQpIHx8IGRlZmluZWQoRENUX0lGQVNUX1NVUFBPUlRFRCkKKyAgICBpZiAoanNpbWRfY2FuX2NvbnZzYW1wKCkpCisgICAgICBmZGN0LT5jb252c2FtcCA9IGpzaW1kX2NvbnZzYW1wOworICAgIGVsc2UKKyAgICAgIGZkY3QtPmNvbnZzYW1wID0gY29udnNhbXA7CisgICAgaWYgKGpzaW1kX2Nhbl9xdWFudGl6ZSgpKQorICAgICAgZmRjdC0+cXVhbnRpemUgPSBqc2ltZF9xdWFudGl6ZTsKKyAgICBlbHNlCisgICAgICBmZGN0LT5xdWFudGl6ZSA9IHF1YW50aXplOworICAgIGJyZWFrOworI2VuZGlmCisjaWZkZWYgRENUX0ZMT0FUX1NVUFBPUlRFRAorICBjYXNlIEpEQ1RfRkxPQVQ6CisgICAgaWYgKGpzaW1kX2Nhbl9jb252c2FtcF9mbG9hdCgpKQorICAgICAgZmRjdC0+ZmxvYXRfY29udnNhbXAgPSBqc2ltZF9jb252c2FtcF9mbG9hdDsKKyAgICBlbHNlCisgICAgICBmZGN0LT5mbG9hdF9jb252c2FtcCA9IGNvbnZzYW1wX2Zsb2F0OworICAgIGlmIChqc2ltZF9jYW5fcXVhbnRpemVfZmxvYXQoKSkKKyAgICAgIGZkY3QtPmZsb2F0X3F1YW50aXplID0ganNpbWRfcXVhbnRpemVfZmxvYXQ7CisgICAgZWxzZQorICAgICAgZmRjdC0+ZmxvYXRfcXVhbnRpemUgPSBxdWFudGl6ZV9mbG9hdDsKKyAgICBicmVhazsKKyNlbmRpZgorICBkZWZhdWx0OgorICAgIEVSUkVYSVQoY2luZm8sIEpFUlJfTk9UX0NPTVBJTEVEKTsKKyAgICBicmVhazsKKyAgfQorCisgIC8qIEFsbG9jYXRlIHdvcmtzcGFjZSBtZW1vcnkgKi8KKyNpZmRlZiBEQ1RfRkxPQVRfU1VQUE9SVEVECisgIGlmIChjaW5mby0+ZGN0X21ldGhvZCA9PSBKRENUX0ZMT0FUKQorICAgIGZkY3QtPmZsb2F0X3dvcmtzcGFjZSA9IChGQVNUX0ZMT0FUICopCisgICAgICAoKmNpbmZvLT5tZW0tPmFsbG9jX3NtYWxsKSAoKGpfY29tbW9uX3B0cikgY2luZm8sIEpQT09MX0lNQUdFLAorCQkJCSAgU0laRU9GKEZBU1RfRkxPQVQpICogRENUU0laRTIpOworICBlbHNlCisjZW5kaWYKKyAgICBmZGN0LT53b3Jrc3BhY2UgPSAoRENURUxFTSAqKQorICAgICAgKCpjaW5mby0+bWVtLT5hbGxvY19zbWFsbCkgKChqX2NvbW1vbl9wdHIpIGNpbmZvLCBKUE9PTF9JTUFHRSwKKwkJCQkgIFNJWkVPRihEQ1RFTEVNKSAqIERDVFNJWkUyKTsKKwogICAvKiBNYXJrIGRpdmlzb3IgdGFibGVzIHVuYWxsb2NhdGVkICovCiAgIGZvciAoaSA9IDA7IGkgPCBOVU1fUVVBTlRfVEJMUzsgaSsrKSB7CiAgICAgZmRjdC0+ZGl2aXNvcnNbaV0gPSBOVUxMOwpkaWZmIC0tZ2l0IGEvamNodWZmLmMgYi9qY2h1ZmYuYwppbmRleCAyNTdkN2FhLi44YTQ2Yjk4IDEwMDY0NAotLS0gYS9qY2h1ZmYuYworKysgYi9qY2h1ZmYuYwpAQCAtMiw1MCArMiw0NiBAQAogICogamNodWZmLmMKICAqCiAgKiBDb3B5cmlnaHQgKEMpIDE5OTEtMTk5NywgVGhvbWFzIEcuIExhbmUuCi0gKiBNb2RpZmllZCAyMDA2LTIwMDkgYnkgR3VpZG8gVm9sbGJlZGluZy4KICAqIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBJbmRlcGVuZGVudCBKUEVHIEdyb3VwJ3Mgc29mdHdhcmUuCiAgKiBGb3IgY29uZGl0aW9ucyBvZiBkaXN0cmlidXRpb24gYW5kIHVzZSwgc2VlIHRoZSBhY2NvbXBhbnlpbmcgUkVBRE1FIGZpbGUuCiAgKgogICogVGhpcyBmaWxlIGNvbnRhaW5zIEh1ZmZtYW4gZW50cm9weSBlbmNvZGluZyByb3V0aW5lcy4KLSAqIEJvdGggc2VxdWVudGlhbCBhbmQgcHJvZ3Jlc3NpdmUgbW9kZXMgYXJlIHN1cHBvcnRlZCBpbiB0aGlzIHNpbmdsZSBtb2R1bGUuCiAgKgogICogTXVjaCBvZiB0aGUgY29tcGxleGl0eSBoZXJlIGhhcyB0byBkbyB3aXRoIHN1cHBvcnRpbmcgb3V0cHV0IHN1c3BlbnNpb24uCiAgKiBJZiB0aGUgZGF0YSBkZXN0aW5hdGlvbiBtb2R1bGUgZGVtYW5kcyBzdXNwZW5zaW9uLCB3ZSB3YW50IHRvIGJlIGFibGUgdG8KICAqIGJhY2sgdXAgdG8gdGhlIHN0YXJ0IG9mIHRoZSBjdXJyZW50IE1DVS4gIFRvIGRvIHRoaXMsIHdlIGNvcHkgc3RhdGUKICAqIHZhcmlhYmxlcyBpbnRvIGxvY2FsIHdvcmtpbmcgc3RvcmFnZSwgYW5kIHVwZGF0ZSB0aGVtIGJhY2sgdG8gdGhlCiAgKiBwZXJtYW5lbnQgSlBFRyBvYmplY3RzIG9ubHkgdXBvbiBzdWNjZXNzZnVsIGNvbXBsZXRpb24gb2YgYW4gTUNVLgorICovCisKKy8qIE1vZGlmaWNhdGlvbnM6CisgKiBDb3B5cmlnaHQgKEMpMjAwNyBTdW4gTWljcm9zeXN0ZW1zLCBJbmMuCisgKiBDb3B5cmlnaHQgKEMpMjAwOSBELiBSLiBDb21tYW5kZXIKICAqCi0gKiBXZSBkbyBub3Qgc3VwcG9ydCBvdXRwdXQgc3VzcGVuc2lvbiBmb3IgdGhlIHByb2dyZXNzaXZlIEpQRUcgbW9kZSwgc2luY2UKLSAqIHRoZSBsaWJyYXJ5IGN1cnJlbnRseSBkb2VzIG5vdCBhbGxvdyBtdWx0aXBsZS1zY2FuIGZpbGVzIHRvIGJlIHdyaXR0ZW4KLSAqIHdpdGggb3V0cHV0IHN1c3BlbnNpb24uCisgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZSBhbmQgbWF5IGJlIHJlZGlzdHJpYnV0ZWQgYW5kL29yIG1vZGlmaWVkIHVuZGVyCisgKiB0aGUgdGVybXMgb2YgdGhlIHd4V2luZG93cyBMaWJyYXJ5IExpY2Vuc2UsIFZlcnNpb24gMy4xIG9yIChhdCB5b3VyIG9wdGlvbikKKyAqIGFueSBsYXRlciB2ZXJzaW9uLiAgVGhlIGZ1bGwgbGljZW5zZSBpcyBpbiB0aGUgTElDRU5TRS50eHQgZmlsZSBpbmNsdWRlZAorICogd2l0aCB0aGlzIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgKiB3eFdpbmRvd3MgTGlicmFyeSBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCiAgKi8KIAogI2RlZmluZSBKUEVHX0lOVEVSTkFMUwogI2luY2x1ZGUgImppbmNsdWRlLmgiCiAjaW5jbHVkZSAianBlZ2xpYi5oIgorI2luY2x1ZGUgImpjaHVmZi5oIgkJLyogRGVjbGFyYXRpb25zIHNoYXJlZCB3aXRoIGpjcGh1ZmYuYyAqLworI2luY2x1ZGUgPGxpbWl0cy5oPgogCitzdGF0aWMgdW5zaWduZWQgY2hhciBqcGVnX2ZpcnN0X2JpdF90YWJsZVs2NTUzNl07CitzdGF0aWMgaW50IGpwZWdfZmlyc3RfYml0X3RhYmxlX2luaXQ9MDsKIAotLyogVGhlIGxlZ2FsIHJhbmdlIG9mIGEgRENUIGNvZWZmaWNpZW50IGlzCi0gKiAgLTEwMjQgLi4gKzEwMjMgIGZvciA4LWJpdCBkYXRhOwotICogLTE2Mzg0IC4uICsxNjM4MyBmb3IgMTItYml0IGRhdGEuCi0gKiBIZW5jZSB0aGUgbWFnbml0dWRlIHNob3VsZCBhbHdheXMgZml0IGluIDEwIG9yIDE0IGJpdHMgcmVzcGVjdGl2ZWx5LgotICovCi0KLSNpZiBCSVRTX0lOX0pTQU1QTEUgPT0gOAotI2RlZmluZSBNQVhfQ09FRl9CSVRTIDEwCi0jZWxzZQotI2RlZmluZSBNQVhfQ09FRl9CSVRTIDE0CisjaWZuZGVmIG1pbgorICNkZWZpbmUgbWluKGEsYikgKChhKTwoYik/KGEpOihiKSkKICNlbmRpZgogCi0vKiBEZXJpdmVkIGRhdGEgY29uc3RydWN0ZWQgZm9yIGVhY2ggSHVmZm1hbiB0YWJsZSAqLwotCi10eXBlZGVmIHN0cnVjdCB7Ci0gIHVuc2lnbmVkIGludCBlaHVmY29bMjU2XTsJLyogY29kZSBmb3IgZWFjaCBzeW1ib2wgKi8KLSAgY2hhciBlaHVmc2lbMjU2XTsJCS8qIGxlbmd0aCBvZiBjb2RlIGZvciBlYWNoIHN5bWJvbCAqLwotICAvKiBJZiBubyBjb2RlIGhhcyBiZWVuIGFsbG9jYXRlZCBmb3IgYSBzeW1ib2wgUywgZWh1ZnNpW1NdIGNvbnRhaW5zIDAgKi8KLX0gY19kZXJpdmVkX3RibDsKLQotCiAvKiBFeHBhbmRlZCBlbnRyb3B5IGVuY29kZXIgb2JqZWN0IGZvciBIdWZmbWFuIGVuY29kaW5nLgogICoKICAqIFRoZSBzYXZhYmxlX3N0YXRlIHN1YnJlY29yZCBjb250YWlucyBmaWVsZHMgdGhhdCBjaGFuZ2Ugd2l0aGluIGFuIE1DVSwKQEAgLTUzLDcgKzQ5LDcgQEAKICAqLwogCiB0eXBlZGVmIHN0cnVjdCB7Ci0gIElOVDMyIHB1dF9idWZmZXI7CQkvKiBjdXJyZW50IGJpdC1hY2N1bXVsYXRpb24gYnVmZmVyICovCisgIHNpemVfdCBwdXRfYnVmZmVyOwkJLyogY3VycmVudCBiaXQtYWNjdW11bGF0aW9uIGJ1ZmZlciAqLwogICBpbnQgcHV0X2JpdHM7CQkJLyogIyBvZiBiaXRzIG5vdyBpbiBpdCAqLwogICBpbnQgbGFzdF9kY192YWxbTUFYX0NPTVBTX0lOX1NDQU5dOyAvKiBsYXN0IERDIGNvZWYgZm9yIGVhY2ggY29tcG9uZW50ICovCiB9IHNhdmFibGVfc3RhdGU7CkBAIC05MSwzMiArODcsMTUgQEAKICAgY19kZXJpdmVkX3RibCAqIGRjX2Rlcml2ZWRfdGJsc1tOVU1fSFVGRl9UQkxTXTsKICAgY19kZXJpdmVkX3RibCAqIGFjX2Rlcml2ZWRfdGJsc1tOVU1fSFVGRl9UQkxTXTsKIAotICAvKiBTdGF0aXN0aWNzIHRhYmxlcyBmb3Igb3B0aW1pemF0aW9uICovCisjaWZkZWYgRU5UUk9QWV9PUFRfU1VQUE9SVEVECS8qIFN0YXRpc3RpY3MgdGFibGVzIGZvciBvcHRpbWl6YXRpb24gKi8KICAgbG9uZyAqIGRjX2NvdW50X3B0cnNbTlVNX0hVRkZfVEJMU107CiAgIGxvbmcgKiBhY19jb3VudF9wdHJzW05VTV9IVUZGX1RCTFNdOwotCi0gIC8qIEZvbGxvd2luZyBmaWVsZHMgdXNlZCBvbmx5IGluIHByb2dyZXNzaXZlIG1vZGUgKi8KLQotICAvKiBNb2RlIGZsYWc6IFRSVUUgZm9yIG9wdGltaXphdGlvbiwgRkFMU0UgZm9yIGFjdHVhbCBkYXRhIG91dHB1dCAqLwotICBib29sZWFuIGdhdGhlcl9zdGF0aXN0aWNzOwotCi0gIC8qIG5leHRfb3V0cHV0X2J5dGUvZnJlZV9pbl9idWZmZXIgYXJlIGxvY2FsIGNvcGllcyBvZiBjaW5mby0+ZGVzdCBmaWVsZHMuCi0gICAqLwotICBKT0NURVQgKiBuZXh0X291dHB1dF9ieXRlOwkvKiA9PiBuZXh0IGJ5dGUgdG8gd3JpdGUgaW4gYnVmZmVyICovCi0gIHNpemVfdCBmcmVlX2luX2J1ZmZlcjsJLyogIyBvZiBieXRlIHNwYWNlcyByZW1haW5pbmcgaW4gYnVmZmVyICovCi0gIGpfY29tcHJlc3NfcHRyIGNpbmZvOwkJLyogbGluayB0byBjaW5mbyAobmVlZGVkIGZvciBkdW1wX2J1ZmZlcikgKi8KLQotICAvKiBDb2Rpbmcgc3RhdHVzIGZvciBBQyBjb21wb25lbnRzICovCi0gIGludCBhY190Ymxfbm87CQkvKiB0aGUgdGFibGUgbnVtYmVyIG9mIHRoZSBzaW5nbGUgY29tcG9uZW50ICovCi0gIHVuc2lnbmVkIGludCBFT0JSVU47CQkvKiBydW4gbGVuZ3RoIG9mIEVPQnMgKi8KLSAgdW5zaWduZWQgaW50IEJFOwkJLyogIyBvZiBidWZmZXJlZCBjb3JyZWN0aW9uIGJpdHMgYmVmb3JlIE1DVSAqLwotICBjaGFyICogYml0X2J1ZmZlcjsJCS8qIGJ1ZmZlciBmb3IgY29ycmVjdGlvbiBiaXRzICgxIHBlciBjaGFyKSAqLwotICAvKiBwYWNraW5nIGNvcnJlY3Rpb24gYml0cyB0aWdodGx5IHdvdWxkIHNhdmUgc29tZSBzcGFjZSBidXQgY29zdCB0aW1lLi4uICovCisjZW5kaWYKIH0gaHVmZl9lbnRyb3B5X2VuY29kZXI7CiAKIHR5cGVkZWYgaHVmZl9lbnRyb3B5X2VuY29kZXIgKiBodWZmX2VudHJvcHlfcHRyOwogCi0vKiBXb3JraW5nIHN0YXRlIHdoaWxlIHdyaXRpbmcgYW4gTUNVIChzZXF1ZW50aWFsIG1vZGUpLgorLyogV29ya2luZyBzdGF0ZSB3aGlsZSB3cml0aW5nIGFuIE1DVS4KICAqIFRoaXMgc3RydWN0IGNvbnRhaW5zIGFsbCB0aGUgZmllbGRzIHRoYXQgYXJlIG5lZWRlZCBieSBzdWJyb3V0aW5lcy4KICAqLwogCkBAIC0xMjcsMzcgKzEwNiw5OSBAQAogICBqX2NvbXByZXNzX3B0ciBjaW5mbzsJCS8qIGR1bXBfYnVmZmVyIG5lZWRzIGFjY2VzcyB0byB0aGlzICovCiB9IHdvcmtpbmdfc3RhdGU7CiAKLS8qIE1BWF9DT1JSX0JJVFMgaXMgdGhlIG51bWJlciBvZiBiaXRzIHRoZSBBQyByZWZpbmVtZW50IGNvcnJlY3Rpb24tYml0Ci0gKiBidWZmZXIgY2FuIGhvbGQuICBMYXJnZXIgc2l6ZXMgbWF5IHNsaWdodGx5IGltcHJvdmUgY29tcHJlc3Npb24sIGJ1dAotICogMTAwMCBpcyBhbHJlYWR5IHdlbGwgaW50byB0aGUgcmVhbG0gb2Ygb3ZlcmtpbGwuCi0gKiBUaGUgbWluaW11bSBzYWZlIHNpemUgaXMgNjQgYml0cy4KLSAqLwogCi0jZGVmaW5lIE1BWF9DT1JSX0JJVFMgIDEwMDAJLyogTWF4ICMgb2YgY29ycmVjdGlvbiBiaXRzIEkgY2FuIGJ1ZmZlciAqLwotCi0vKiBJUklHSFRfU0hJRlQgaXMgbGlrZSBSSUdIVF9TSElGVCwgYnV0IHdvcmtzIG9uIGludCByYXRoZXIgdGhhbiBJTlQzMi4KLSAqIFdlIGFzc3VtZSB0aGF0IGludCByaWdodCBzaGlmdCBpcyB1bnNpZ25lZCBpZiBJTlQzMiByaWdodCBzaGlmdCBpcywKLSAqIHdoaWNoIHNob3VsZCBiZSBzYWZlLgotICovCi0KLSNpZmRlZiBSSUdIVF9TSElGVF9JU19VTlNJR05FRAotI2RlZmluZSBJU0hJRlRfVEVNUFMJaW50IGlzaGlmdF90ZW1wOwotI2RlZmluZSBJUklHSFRfU0hJRlQoeCxzaGZ0KSAgXAotCSgoaXNoaWZ0X3RlbXAgPSAoeCkpIDwgMCA/IFwKLQkgKGlzaGlmdF90ZW1wID4+IChzaGZ0KSkgfCAoKH4wKSA8PCAoMTYtKHNoZnQpKSkgOiBcCi0JIChpc2hpZnRfdGVtcCA+PiAoc2hmdCkpKQotI2Vsc2UKLSNkZWZpbmUgSVNISUZUX1RFTVBTCi0jZGVmaW5lIElSSUdIVF9TSElGVCh4LHNoZnQpCSgoeCkgPj4gKHNoZnQpKQorLyogRm9yd2FyZCBkZWNsYXJhdGlvbnMgKi8KK01FVEhPRERFRihib29sZWFuKSBlbmNvZGVfbWN1X2h1ZmYgSlBQKChqX2NvbXByZXNzX3B0ciBjaW5mbywKKwkJCQkJSkJMT0NLUk9XICpNQ1VfZGF0YSkpOworTUVUSE9EREVGKHZvaWQpIGZpbmlzaF9wYXNzX2h1ZmYgSlBQKChqX2NvbXByZXNzX3B0ciBjaW5mbykpOworI2lmZGVmIEVOVFJPUFlfT1BUX1NVUFBPUlRFRAorTUVUSE9EREVGKGJvb2xlYW4pIGVuY29kZV9tY3VfZ2F0aGVyIEpQUCgoal9jb21wcmVzc19wdHIgY2luZm8sCisJCQkJCSAgSkJMT0NLUk9XICpNQ1VfZGF0YSkpOworTUVUSE9EREVGKHZvaWQpIGZpbmlzaF9wYXNzX2dhdGhlciBKUFAoKGpfY29tcHJlc3NfcHRyIGNpbmZvKSk7CiAjZW5kaWYKIAogCiAvKgorICogSW5pdGlhbGl6ZSBmb3IgYSBIdWZmbWFuLWNvbXByZXNzZWQgc2Nhbi4KKyAqIElmIGdhdGhlcl9zdGF0aXN0aWNzIGlzIFRSVUUsIHdlIGRvIG5vdCBvdXRwdXQgYW55dGhpbmcgZHVyaW5nIHRoZSBzY2FuLAorICoganVzdCBjb3VudCB0aGUgSHVmZm1hbiBzeW1ib2xzIHVzZWQgYW5kIGdlbmVyYXRlIEh1ZmZtYW4gY29kZSB0YWJsZXMuCisgKi8KKworTUVUSE9EREVGKHZvaWQpCitzdGFydF9wYXNzX2h1ZmYgKGpfY29tcHJlc3NfcHRyIGNpbmZvLCBib29sZWFuIGdhdGhlcl9zdGF0aXN0aWNzKQoreworICBodWZmX2VudHJvcHlfcHRyIGVudHJvcHkgPSAoaHVmZl9lbnRyb3B5X3B0cikgY2luZm8tPmVudHJvcHk7CisgIGludCBjaSwgZGN0YmwsIGFjdGJsOworICBqcGVnX2NvbXBvbmVudF9pbmZvICogY29tcHB0cjsKKworICBpZiAoZ2F0aGVyX3N0YXRpc3RpY3MpIHsKKyNpZmRlZiBFTlRST1BZX09QVF9TVVBQT1JURUQKKyAgICBlbnRyb3B5LT5wdWIuZW5jb2RlX21jdSA9IGVuY29kZV9tY3VfZ2F0aGVyOworICAgIGVudHJvcHktPnB1Yi5maW5pc2hfcGFzcyA9IGZpbmlzaF9wYXNzX2dhdGhlcjsKKyNlbHNlCisgICAgRVJSRVhJVChjaW5mbywgSkVSUl9OT1RfQ09NUElMRUQpOworI2VuZGlmCisgIH0gZWxzZSB7CisgICAgZW50cm9weS0+cHViLmVuY29kZV9tY3UgPSBlbmNvZGVfbWN1X2h1ZmY7CisgICAgZW50cm9weS0+cHViLmZpbmlzaF9wYXNzID0gZmluaXNoX3Bhc3NfaHVmZjsKKyAgfQorCisgIGZvciAoY2kgPSAwOyBjaSA8IGNpbmZvLT5jb21wc19pbl9zY2FuOyBjaSsrKSB7CisgICAgY29tcHB0ciA9IGNpbmZvLT5jdXJfY29tcF9pbmZvW2NpXTsKKyAgICBkY3RibCA9IGNvbXBwdHItPmRjX3RibF9ubzsKKyAgICBhY3RibCA9IGNvbXBwdHItPmFjX3RibF9ubzsKKyAgICBpZiAoZ2F0aGVyX3N0YXRpc3RpY3MpIHsKKyNpZmRlZiBFTlRST1BZX09QVF9TVVBQT1JURUQKKyAgICAgIC8qIENoZWNrIGZvciBpbnZhbGlkIHRhYmxlIGluZGV4ZXMgKi8KKyAgICAgIC8qIChtYWtlX2NfZGVyaXZlZF90YmwgZG9lcyB0aGlzIGluIHRoZSBvdGhlciBwYXRoKSAqLworICAgICAgaWYgKGRjdGJsIDwgMCB8fCBkY3RibCA+PSBOVU1fSFVGRl9UQkxTKQorCUVSUkVYSVQxKGNpbmZvLCBKRVJSX05PX0hVRkZfVEFCTEUsIGRjdGJsKTsKKyAgICAgIGlmIChhY3RibCA8IDAgfHwgYWN0YmwgPj0gTlVNX0hVRkZfVEJMUykKKwlFUlJFWElUMShjaW5mbywgSkVSUl9OT19IVUZGX1RBQkxFLCBhY3RibCk7CisgICAgICAvKiBBbGxvY2F0ZSBhbmQgemVybyB0aGUgc3RhdGlzdGljcyB0YWJsZXMgKi8KKyAgICAgIC8qIE5vdGUgdGhhdCBqcGVnX2dlbl9vcHRpbWFsX3RhYmxlIGV4cGVjdHMgMjU3IGVudHJpZXMgaW4gZWFjaCB0YWJsZSEgKi8KKyAgICAgIGlmIChlbnRyb3B5LT5kY19jb3VudF9wdHJzW2RjdGJsXSA9PSBOVUxMKQorCWVudHJvcHktPmRjX2NvdW50X3B0cnNbZGN0YmxdID0gKGxvbmcgKikKKwkgICgqY2luZm8tPm1lbS0+YWxsb2Nfc21hbGwpICgoal9jb21tb25fcHRyKSBjaW5mbywgSlBPT0xfSU1BR0UsCisJCQkJICAgICAgMjU3ICogU0laRU9GKGxvbmcpKTsKKyAgICAgIE1FTVpFUk8oZW50cm9weS0+ZGNfY291bnRfcHRyc1tkY3RibF0sIDI1NyAqIFNJWkVPRihsb25nKSk7CisgICAgICBpZiAoZW50cm9weS0+YWNfY291bnRfcHRyc1thY3RibF0gPT0gTlVMTCkKKwllbnRyb3B5LT5hY19jb3VudF9wdHJzW2FjdGJsXSA9IChsb25nICopCisJICAoKmNpbmZvLT5tZW0tPmFsbG9jX3NtYWxsKSAoKGpfY29tbW9uX3B0cikgY2luZm8sIEpQT09MX0lNQUdFLAorCQkJCSAgICAgIDI1NyAqIFNJWkVPRihsb25nKSk7CisgICAgICBNRU1aRVJPKGVudHJvcHktPmFjX2NvdW50X3B0cnNbYWN0YmxdLCAyNTcgKiBTSVpFT0YobG9uZykpOworI2VuZGlmCisgICAgfSBlbHNlIHsKKyAgICAgIC8qIENvbXB1dGUgZGVyaXZlZCB2YWx1ZXMgZm9yIEh1ZmZtYW4gdGFibGVzICovCisgICAgICAvKiBXZSBtYXkgZG8gdGhpcyBtb3JlIHRoYW4gb25jZSBmb3IgYSB0YWJsZSwgYnV0IGl0J3Mgbm90IGV4cGVuc2l2ZSAqLworICAgICAganBlZ19tYWtlX2NfZGVyaXZlZF90YmwoY2luZm8sIFRSVUUsIGRjdGJsLAorCQkJICAgICAgJiBlbnRyb3B5LT5kY19kZXJpdmVkX3RibHNbZGN0YmxdKTsKKyAgICAgIGpwZWdfbWFrZV9jX2Rlcml2ZWRfdGJsKGNpbmZvLCBGQUxTRSwgYWN0YmwsCisJCQkgICAgICAmIGVudHJvcHktPmFjX2Rlcml2ZWRfdGJsc1thY3RibF0pOworICAgIH0KKyAgICAvKiBJbml0aWFsaXplIERDIHByZWRpY3Rpb25zIHRvIDAgKi8KKyAgICBlbnRyb3B5LT5zYXZlZC5sYXN0X2RjX3ZhbFtjaV0gPSAwOworICB9CisKKyAgLyogSW5pdGlhbGl6ZSBiaXQgYnVmZmVyIHRvIGVtcHR5ICovCisKKyAgZW50cm9weS0+c2F2ZWQucHV0X2J1ZmZlciA9IDA7CisgIGVudHJvcHktPnNhdmVkLnB1dF9iaXRzID0gMDsKKworICAvKiBJbml0aWFsaXplIHJlc3RhcnQgc3R1ZmYgKi8KKyAgZW50cm9weS0+cmVzdGFydHNfdG9fZ28gPSBjaW5mby0+cmVzdGFydF9pbnRlcnZhbDsKKyAgZW50cm9weS0+bmV4dF9yZXN0YXJ0X251bSA9IDA7Cit9CisKKworLyoKICAqIENvbXB1dGUgdGhlIGRlcml2ZWQgdmFsdWVzIGZvciBhIEh1ZmZtYW4gdGFibGUuCiAgKiBUaGlzIHJvdXRpbmUgYWxzbyBwZXJmb3JtcyBzb21lIHZhbGlkYXRpb24gY2hlY2tzIG9uIHRoZSB0YWJsZS4KKyAqCisgKiBOb3RlIHRoaXMgaXMgYWxzbyB1c2VkIGJ5IGpjcGh1ZmYuYy4KICAqLwogCi1MT0NBTCh2b2lkKQorR0xPQkFMKHZvaWQpCiBqcGVnX21ha2VfY19kZXJpdmVkX3RibCAoal9jb21wcmVzc19wdHIgY2luZm8sIGJvb2xlYW4gaXNEQywgaW50IHRibG5vLAogCQkJIGNfZGVyaXZlZF90YmwgKiogcGR0YmwpCiB7CkBAIC0yNDMsMzQgKzI4NCwzNiBAQAogICAgIGR0YmwtPmVodWZjb1tpXSA9IGh1ZmZjb2RlW3BdOwogICAgIGR0YmwtPmVodWZzaVtpXSA9IGh1ZmZzaXplW3BdOwogICB9CisKKyAgaWYoIWpwZWdfZmlyc3RfYml0X3RhYmxlX2luaXQpIHsKKyAgICBmb3IoaSA9IDA7IGkgPCA2NTUzNjsgaSsrKSB7CisgICAgICBpbnQgYml0ID0gMCwgdmFsID0gaTsKKyAgICAgIHdoaWxlICh2YWwpIHt2YWwgPj49IDE7ICBiaXQrKzt9CisgICAgICBqcGVnX2ZpcnN0X2JpdF90YWJsZVtpXSA9IGJpdDsKKyAgICB9CisgICAganBlZ19maXJzdF9iaXRfdGFibGVfaW5pdCA9IDE7CisgIH0KIH0KIAogCi0vKiBPdXRwdXR0aW5nIGJ5dGVzIHRvIHRoZSBmaWxlLgotICogTkI6IHRoZXNlIG11c3QgYmUgY2FsbGVkIG9ubHkgd2hlbiBhY3R1YWxseSBvdXRwdXR0aW5nLAotICogdGhhdCBpcywgZW50cm9weS0+Z2F0aGVyX3N0YXRpc3RpY3MgPT0gRkFMU0UuCi0gKi8KKy8qIE91dHB1dHRpbmcgYnl0ZXMgdG8gdGhlIGZpbGUgKi8KIAogLyogRW1pdCBhIGJ5dGUsIHRha2luZyAnYWN0aW9uJyBpZiBtdXN0IHN1c3BlbmQuICovCi0jZGVmaW5lIGVtaXRfYnl0ZV9zKHN0YXRlLHZhbCxhY3Rpb24pICBcCisjZGVmaW5lIGVtaXRfYnl0ZShzdGF0ZSx2YWwsYWN0aW9uKSAgXAogCXsgKihzdGF0ZSktPm5leHRfb3V0cHV0X2J5dGUrKyA9IChKT0NURVQpICh2YWwpOyAgXAogCSAgaWYgKC0tKHN0YXRlKS0+ZnJlZV9pbl9idWZmZXIgPT0gMCkgIFwKLQkgICAgaWYgKCEgZHVtcF9idWZmZXJfcyhzdGF0ZSkpICBcCisJICAgIGlmICghIGR1bXBfYnVmZmVyKHN0YXRlKSkgIFwKIAkgICAgICB7IGFjdGlvbjsgfSB9CiAKLS8qIEVtaXQgYSBieXRlICovCi0jZGVmaW5lIGVtaXRfYnl0ZV9lKGVudHJvcHksdmFsKSAgXAotCXsgKihlbnRyb3B5KS0+bmV4dF9vdXRwdXRfYnl0ZSsrID0gKEpPQ1RFVCkgKHZhbCk7ICBcCi0JICBpZiAoLS0oZW50cm9weSktPmZyZWVfaW5fYnVmZmVyID09IDApICBcCi0JICAgIGR1bXBfYnVmZmVyX2UoZW50cm9weSk7IH0KLQogCiBMT0NBTChib29sZWFuKQotZHVtcF9idWZmZXJfcyAod29ya2luZ19zdGF0ZSAqIHN0YXRlKQorZHVtcF9idWZmZXIgKHdvcmtpbmdfc3RhdGUgKiBzdGF0ZSkKIC8qIEVtcHR5IHRoZSBvdXRwdXQgYnVmZmVyOyByZXR1cm4gVFJVRSBpZiBzdWNjZXNzZnVsLCBGQUxTRSBpZiBtdXN0IHN1c3BlbmQgKi8KIHsKICAgc3RydWN0IGpwZWdfZGVzdGluYXRpb25fbWdyICogZGVzdCA9IHN0YXRlLT5jaW5mby0+ZGVzdDsKIAorICBkZXN0LT5mcmVlX2luX2J1ZmZlciA9IHN0YXRlLT5mcmVlX2luX2J1ZmZlcjsKKwogICBpZiAoISAoKmRlc3QtPmVtcHR5X291dHB1dF9idWZmZXIpIChzdGF0ZS0+Y2luZm8pKQogICAgIHJldHVybiBGQUxTRTsKICAgLyogQWZ0ZXIgYSBzdWNjZXNzZnVsIGJ1ZmZlciBkdW1wLCBtdXN0IHJlc2V0IGJ1ZmZlciBwb2ludGVycyAqLwpAQCAtMjgwLDIwICszMjMsNiBAQAogfQogCiAKLUxPQ0FMKHZvaWQpCi1kdW1wX2J1ZmZlcl9lIChodWZmX2VudHJvcHlfcHRyIGVudHJvcHkpCi0vKiBFbXB0eSB0aGUgb3V0cHV0IGJ1ZmZlcjsgd2UgZG8gbm90IHN1cHBvcnQgc3VzcGVuc2lvbiBpbiB0aGlzIGNhc2UuICovCi17Ci0gIHN0cnVjdCBqcGVnX2Rlc3RpbmF0aW9uX21nciAqIGRlc3QgPSBlbnRyb3B5LT5jaW5mby0+ZGVzdDsKLQotICBpZiAoISAoKmRlc3QtPmVtcHR5X291dHB1dF9idWZmZXIpIChlbnRyb3B5LT5jaW5mbykpCi0gICAgRVJSRVhJVChlbnRyb3B5LT5jaW5mbywgSkVSUl9DQU5UX1NVU1BFTkQpOwotICAvKiBBZnRlciBhIHN1Y2Nlc3NmdWwgYnVmZmVyIGR1bXAsIG11c3QgcmVzZXQgYnVmZmVyIHBvaW50ZXJzICovCi0gIGVudHJvcHktPm5leHRfb3V0cHV0X2J5dGUgPSBkZXN0LT5uZXh0X291dHB1dF9ieXRlOwotICBlbnRyb3B5LT5mcmVlX2luX2J1ZmZlciA9IGRlc3QtPmZyZWVfaW5fYnVmZmVyOwotfQotCi0KIC8qIE91dHB1dHRpbmcgYml0cyB0byB0aGUgZmlsZSAqLwogCiAvKiBPbmx5IHRoZSByaWdodCAyNCBiaXRzIG9mIHB1dF9idWZmZXIgYXJlIHVzZWQ7IHRoZSB2YWxpZCBiaXRzIGFyZQpAQCAtMzAyLDE4MyArMzMxLDI1MCBAQAogICogYmV0d2VlbiBjYWxscywgc28gMjQgYml0cyBhcmUgc3VmZmljaWVudC4KICAqLwogCi1JTkxJTkUKLUxPQ0FMKGJvb2xlYW4pCi1lbWl0X2JpdHNfcyAod29ya2luZ19zdGF0ZSAqIHN0YXRlLCB1bnNpZ25lZCBpbnQgY29kZSwgaW50IHNpemUpCi0vKiBFbWl0IHNvbWUgYml0czsgcmV0dXJuIFRSVUUgaWYgc3VjY2Vzc2Z1bCwgRkFMU0UgaWYgbXVzdCBzdXNwZW5kICovCi17Ci0gIC8qIFRoaXMgcm91dGluZSBpcyBoZWF2aWx5IHVzZWQsIHNvIGl0J3Mgd29ydGggY29kaW5nIHRpZ2h0bHkuICovCi0gIHJlZ2lzdGVyIElOVDMyIHB1dF9idWZmZXIgPSAoSU5UMzIpIGNvZGU7Ci0gIHJlZ2lzdGVyIGludCBwdXRfYml0cyA9IHN0YXRlLT5jdXIucHV0X2JpdHM7CisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogCi0gIC8qIGlmIHNpemUgaXMgMCwgY2FsbGVyIHVzZWQgYW4gaW52YWxpZCBIdWZmbWFuIHRhYmxlIGVudHJ5ICovCi0gIGlmIChzaXplID09IDApCi0gICAgRVJSRVhJVChzdGF0ZS0+Y2luZm8sIEpFUlJfSFVGRl9NSVNTSU5HX0NPREUpOworI2RlZmluZSBFTUlUX0JZVEUoKSB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgaWYgKDB4RkYgPT0gKCpidWZmZXIrKyA9ICAodW5zaWduZWQgY2hhcikocHV0X2J1ZmZlciA+PiAocHV0X2JpdHMgLT0gOCkpKSkgIFwKKyAgICAqYnVmZmVyKysgPSAwOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgfQogCi0gIHB1dF9idWZmZXIgJj0gKCgoSU5UMzIpIDEpPDxzaXplKSAtIDE7IC8qIG1hc2sgb2ZmIGFueSBleHRyYSBiaXRzIGluIGNvZGUgKi8KLSAgCi0gIHB1dF9iaXRzICs9IHNpemU7CQkvKiBuZXcgbnVtYmVyIG9mIGJpdHMgaW4gYnVmZmVyICovCi0gIAotICBwdXRfYnVmZmVyIDw8PSAyNCAtIHB1dF9iaXRzOyAvKiBhbGlnbiBpbmNvbWluZyBiaXRzICovCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogCi0gIHB1dF9idWZmZXIgfD0gc3RhdGUtPmN1ci5wdXRfYnVmZmVyOyAvKiBhbmQgbWVyZ2Ugd2l0aCBvbGQgYnVmZmVyIGNvbnRlbnRzICovCi0gIAotICB3aGlsZSAocHV0X2JpdHMgPj0gOCkgewotICAgIGludCBjID0gKGludCkgKChwdXRfYnVmZmVyID4+IDE2KSAmIDB4RkYpOwotICAgIAotICAgIGVtaXRfYnl0ZV9zKHN0YXRlLCBjLCByZXR1cm4gRkFMU0UpOwotICAgIGlmIChjID09IDB4RkYpIHsJCS8qIG5lZWQgdG8gc3R1ZmYgYSB6ZXJvIGJ5dGU/ICovCi0gICAgICBlbWl0X2J5dGVfcyhzdGF0ZSwgMCwgcmV0dXJuIEZBTFNFKTsKLSAgICB9Ci0gICAgcHV0X2J1ZmZlciA8PD0gODsKLSAgICBwdXRfYml0cyAtPSA4OwotICB9CisjZGVmaW5lIERVTVBfQklUU18oY29kZSwgc2l6ZSkgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICBwdXRfYml0cyArPSBzaXplOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgcHV0X2J1ZmZlciA9IChwdXRfYnVmZmVyIDw8IHNpemUpIHwgY29kZTsgICAgICAgICAgICAgICAgICAgICBcCisgIGlmIChwdXRfYml0cyA+IDcpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIHdoaWxlKHB1dF9iaXRzID4gNykgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgIEVNSVRfQllURSgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgfQogCi0gIHN0YXRlLT5jdXIucHV0X2J1ZmZlciA9IHB1dF9idWZmZXI7IC8qIHVwZGF0ZSBzdGF0ZSB2YXJpYWJsZXMgKi8KLSAgc3RhdGUtPmN1ci5wdXRfYml0cyA9IHB1dF9iaXRzOworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KIAotICByZXR1cm4gVFJVRTsKKyNkZWZpbmUgQ0hFQ0tCVUYxNSgpIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgIGlmIChwdXRfYml0cyA+IDE1KSB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIEVNSVRfQllURSgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICBFTUlUX0JZVEUoKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgIH0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAogfQogCi0KLUlOTElORQotTE9DQUwodm9pZCkKLWVtaXRfYml0c19lIChodWZmX2VudHJvcHlfcHRyIGVudHJvcHksIHVuc2lnbmVkIGludCBjb2RlLCBpbnQgc2l6ZSkKLS8qIEVtaXQgc29tZSBiaXRzLCB1bmxlc3Mgd2UgYXJlIGluIGdhdGhlciBtb2RlICovCi17Ci0gIC8qIFRoaXMgcm91dGluZSBpcyBoZWF2aWx5IHVzZWQsIHNvIGl0J3Mgd29ydGggY29kaW5nIHRpZ2h0bHkuICovCi0gIHJlZ2lzdGVyIElOVDMyIHB1dF9idWZmZXIgPSAoSU5UMzIpIGNvZGU7Ci0gIHJlZ2lzdGVyIGludCBwdXRfYml0cyA9IGVudHJvcHktPnNhdmVkLnB1dF9iaXRzOwotCi0gIC8qIGlmIHNpemUgaXMgMCwgY2FsbGVyIHVzZWQgYW4gaW52YWxpZCBIdWZmbWFuIHRhYmxlIGVudHJ5ICovCi0gIGlmIChzaXplID09IDApCi0gICAgRVJSRVhJVChlbnRyb3B5LT5jaW5mbywgSkVSUl9IVUZGX01JU1NJTkdfQ09ERSk7Ci0KLSAgaWYgKGVudHJvcHktPmdhdGhlcl9zdGF0aXN0aWNzKQotICAgIHJldHVybjsJCQkvKiBkbyBub3RoaW5nIGlmIHdlJ3JlIG9ubHkgZ2V0dGluZyBzdGF0cyAqLwotCi0gIHB1dF9idWZmZXIgJj0gKCgoSU5UMzIpIDEpPDxzaXplKSAtIDE7IC8qIG1hc2sgb2ZmIGFueSBleHRyYSBiaXRzIGluIGNvZGUgKi8KLSAgCi0gIHB1dF9iaXRzICs9IHNpemU7CQkvKiBuZXcgbnVtYmVyIG9mIGJpdHMgaW4gYnVmZmVyICovCi0KLSAgcHV0X2J1ZmZlciA8PD0gMjQgLSBwdXRfYml0czsgLyogYWxpZ24gaW5jb21pbmcgYml0cyAqLwotCi0gIC8qIGFuZCBtZXJnZSB3aXRoIG9sZCBidWZmZXIgY29udGVudHMgKi8KLSAgcHV0X2J1ZmZlciB8PSBlbnRyb3B5LT5zYXZlZC5wdXRfYnVmZmVyOwotCi0gIHdoaWxlIChwdXRfYml0cyA+PSA4KSB7Ci0gICAgaW50IGMgPSAoaW50KSAoKHB1dF9idWZmZXIgPj4gMTYpICYgMHhGRik7Ci0KLSAgICBlbWl0X2J5dGVfZShlbnRyb3B5LCBjKTsKLSAgICBpZiAoYyA9PSAweEZGKSB7CQkvKiBuZWVkIHRvIHN0dWZmIGEgemVybyBieXRlPyAqLwotICAgICAgZW1pdF9ieXRlX2UoZW50cm9weSwgMCk7Ci0gICAgfQotICAgIHB1dF9idWZmZXIgPDw9IDg7Ci0gICAgcHV0X2JpdHMgLT0gODsKLSAgfQotCi0gIGVudHJvcHktPnNhdmVkLnB1dF9idWZmZXIgPSBwdXRfYnVmZmVyOyAvKiB1cGRhdGUgdmFyaWFibGVzICovCi0gIGVudHJvcHktPnNhdmVkLnB1dF9iaXRzID0gcHV0X2JpdHM7CisjZGVmaW5lIENIRUNLQlVGNDcoKSB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICBpZiAocHV0X2JpdHMgPiA0NykgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICBFTUlUX0JZVEUoKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgRU1JVF9CWVRFKCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIEVNSVRfQllURSgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICBFTUlUX0JZVEUoKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgRU1JVF9CWVRFKCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIEVNSVRfQllURSgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCiB9CiAKKyNkZWZpbmUgQ0hFQ0tCVUYzMSgpIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgIGlmIChwdXRfYml0cyA+IDMxKSB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIEVNSVRfQllURSgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICBFTUlUX0JZVEUoKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgRU1JVF9CWVRFKCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIEVNSVRfQllURSgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCit9CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKyNkZWZpbmUgRFVNUF9CSVRTX05PQ0hFQ0soY29kZSwgc2l6ZSkgeyAgICAgICAgICAgICAgICAgICAgICAgICBcCisgIHB1dF9iaXRzICs9IHNpemU7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICBwdXRfYnVmZmVyID0gKHB1dF9idWZmZXIgPDwgc2l6ZSkgfCBjb2RlOyAgICAgICAgICAgICAgICAgICAgIFwKKyB9CisKKyNpZiBfX1dPUkRTSVpFPT02NCB8fCBkZWZpbmVkKF9XSU42NCkKKworI2RlZmluZSBEVU1QX0JJVFMoY29kZSwgc2l6ZSkgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgQ0hFQ0tCVUY0NygpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgIHB1dF9iaXRzICs9IHNpemU7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICBwdXRfYnVmZmVyID0gKHB1dF9idWZmZXIgPDwgc2l6ZSkgfCBjb2RlOyAgICAgICAgICAgICAgICAgICAgIFwKKyB9CisKKyNlbHNlCisKKyNkZWZpbmUgRFVNUF9CSVRTKGNvZGUsIHNpemUpIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgIHB1dF9iaXRzICs9IHNpemU7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICBwdXRfYnVmZmVyID0gKHB1dF9idWZmZXIgPDwgc2l6ZSkgfCBjb2RlOyAgICAgICAgICAgICAgICAgICAgIFwKKyAgQ0hFQ0tCVUYxNSgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgfQorCisjZW5kaWYKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworI2RlZmluZSBEVU1QX1NJTkdMRV9WQUxVRShodCwgY29kZXZhbHVlKSB7IFwKKyAgc2l6ZSA9IGh0LT5laHVmc2lbY29kZXZhbHVlXTsgICAgICAgICAgICBcCisgIGNvZGUgPSBodC0+ZWh1ZmNvW2NvZGV2YWx1ZV07ICAgICAgICAgICAgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgRFVNUF9CSVRTKGNvZGUsIHNpemUpICAgICAgICAgICAgICAgICAgICBcCisgfQorCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisjZGVmaW5lIERVTVBfVkFMVUVfU0xPVyhodCwgY29kZXZhbHVlLCB0LCBuYml0cykgeyBcCisgIHNpemUgPSBodC0+ZWh1ZnNpW2NvZGV2YWx1ZV07ICAgICAgICAgICAgICAgXAorICBjb2RlID0gaHQtPmVodWZjb1tjb2RldmFsdWVdOyAgICAgICAgICAgICAgIFwKKyAgdCAmPSB+KC0xIDw8IG5iaXRzKTsgICAgICAgICAgICAgICAgICAgICAgICBcCisgIERVTVBfQklUU19OT0NIRUNLKGNvZGUsIHNpemUpICAgICAgICAgICAgICAgXAorICBDSEVDS0JVRjE1KCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgRFVNUF9CSVRTX05PQ0hFQ0sodCwgbmJpdHMpICAgICAgICAgICAgICAgICBcCisgIENIRUNLQlVGMTUoKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorIH0KKworI2lmIF9fV09SRFNJWkU9PTY0IHx8IGRlZmluZWQoX1dJTjY0KQorCisjZGVmaW5lIERVTVBfVkFMVUUoaHQsIGNvZGV2YWx1ZSwgdCwgbmJpdHMpIHsgXAorICBzaXplID0gaHQtPmVodWZzaVtjb2RldmFsdWVdOyAgICAgICAgICAgICAgIFwKKyAgY29kZSA9IGh0LT5laHVmY29bY29kZXZhbHVlXTsgICAgICAgICAgICAgICBcCisgIHQgJj0gfigtMSA8PCBuYml0cyk7ICAgICAgICAgICAgICAgICAgICAgICAgXAorICBDSEVDS0JVRjMxKCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgRFVNUF9CSVRTX05PQ0hFQ0soY29kZSwgc2l6ZSkgICAgICAgICAgICAgICBcCisgIERVTVBfQklUU19OT0NIRUNLKHQsIG5iaXRzKSAgICAgICAgICAgICAgICAgXAorIH0KKworI2Vsc2UKKworI2RlZmluZSBEVU1QX1ZBTFVFKGh0LCBjb2RldmFsdWUsIHQsIG5iaXRzKSB7IFwKKyAgc2l6ZSA9IGh0LT5laHVmc2lbY29kZXZhbHVlXTsgICAgICAgICAgICAgICBcCisgIGNvZGUgPSBodC0+ZWh1ZmNvW2NvZGV2YWx1ZV07ICAgICAgICAgICAgICAgXAorICB0ICY9IH4oLTEgPDwgbmJpdHMpOyAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgRFVNUF9CSVRTX05PQ0hFQ0soY29kZSwgc2l6ZSkgICAgICAgICAgICAgICBcCisgIENIRUNLQlVGMTUoKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICBEVU1QX0JJVFNfTk9DSEVDSyh0LCBuYml0cykgICAgICAgICAgICAgICAgIFwKKyAgQ0hFQ0tCVUYxNSgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgfQorCisjZW5kaWYKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworI2RlZmluZSBCVUZTSVpFIChEQ1RTSVpFMiAqIDIpCisKKyNkZWZpbmUgTE9BRF9CVUZGRVIoKSB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgaWYgKHN0YXRlLT5mcmVlX2luX2J1ZmZlciA8IEJVRlNJWkUpIHsgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICBsb2NhbGJ1ZiA9IDE7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICBidWZmZXIgPSBfYnVmZmVyOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgZWxzZSBidWZmZXIgPSBzdGF0ZS0+bmV4dF9vdXRwdXRfYnl0ZTsgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyB9CisKKyNkZWZpbmUgU1RPUkVfQlVGRkVSKCkgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgaWYgKGxvY2FsYnVmKSB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICBieXRlcyA9IGJ1ZmZlciAtIF9idWZmZXI7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICBidWZmZXIgPSBfYnVmZmVyOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICB3aGlsZSAoYnl0ZXMgPiAwKSB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgIGJ5dGVzdG9jb3B5ID0gbWluKGJ5dGVzLCBzdGF0ZS0+ZnJlZV9pbl9idWZmZXIpOyAgICAgICAgICAgIFwKKyAgICAgIE1FTUNPUFkoc3RhdGUtPm5leHRfb3V0cHV0X2J5dGUsIGJ1ZmZlciwgYnl0ZXN0b2NvcHkpOyAgICAgIFwKKyAgICAgIHN0YXRlLT5uZXh0X291dHB1dF9ieXRlICs9IGJ5dGVzdG9jb3B5OyAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgIGJ1ZmZlciArPSBieXRlc3RvY29weTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgIHN0YXRlLT5mcmVlX2luX2J1ZmZlciAtPSBieXRlc3RvY29weTsgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgIGlmIChzdGF0ZS0+ZnJlZV9pbl9idWZmZXIgPT0gMCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgaWYgKCEgZHVtcF9idWZmZXIoc3RhdGUpKSByZXR1cm4gRkFMU0U7ICAgICAgICAgICAgICAgICAgIFwKKyAgICAgIGJ5dGVzIC09IGJ5dGVzdG9jb3B5OyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICB9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgZWxzZSB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICBzdGF0ZS0+ZnJlZV9pbl9idWZmZXIgLT0gKGJ1ZmZlciAtIHN0YXRlLT5uZXh0X291dHB1dF9ieXRlKTsgIFwKKyAgICBzdGF0ZS0+bmV4dF9vdXRwdXRfYnl0ZSA9IGJ1ZmZlcjsgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyB9CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAKIExPQ0FMKGJvb2xlYW4pCi1mbHVzaF9iaXRzX3MgKHdvcmtpbmdfc3RhdGUgKiBzdGF0ZSkKK2ZsdXNoX2JpdHMgKHdvcmtpbmdfc3RhdGUgKiBzdGF0ZSkKIHsKLSAgaWYgKCEgZW1pdF9iaXRzX3Moc3RhdGUsIDB4N0YsIDcpKSAvKiBmaWxsIGFueSBwYXJ0aWFsIGJ5dGUgd2l0aCBvbmVzICovCi0gICAgcmV0dXJuIEZBTFNFOwotICBzdGF0ZS0+Y3VyLnB1dF9idWZmZXIgPSAwOwkgICAgIC8qIGFuZCByZXNldCBiaXQtYnVmZmVyIHRvIGVtcHR5ICovCisgIHVuc2lnbmVkIGNoYXIgX2J1ZmZlcltCVUZTSVpFXSwgKmJ1ZmZlcjsKKyAgc2l6ZV90IHB1dF9idWZmZXI7ICBpbnQgcHV0X2JpdHM7CisgIHNpemVfdCBieXRlcywgYnl0ZXN0b2NvcHk7ICBpbnQgbG9jYWxidWYgPSAwOworCisgIHB1dF9idWZmZXIgPSBzdGF0ZS0+Y3VyLnB1dF9idWZmZXI7CisgIHB1dF9iaXRzID0gc3RhdGUtPmN1ci5wdXRfYml0czsKKyAgTE9BRF9CVUZGRVIoKQorCisgIERVTVBfQklUU18oMHg3RiwgNykKKworICBzdGF0ZS0+Y3VyLnB1dF9idWZmZXIgPSAwOwkvKiBhbmQgcmVzZXQgYml0LWJ1ZmZlciB0byBlbXB0eSAqLwogICBzdGF0ZS0+Y3VyLnB1dF9iaXRzID0gMDsKKyAgU1RPUkVfQlVGRkVSKCkKKwogICByZXR1cm4gVFJVRTsKIH0KIAorLyogRW5jb2RlIGEgc2luZ2xlIGJsb2NrJ3Mgd29ydGggb2YgY29lZmZpY2llbnRzICovCiAKLUxPQ0FMKHZvaWQpCi1mbHVzaF9iaXRzX2UgKGh1ZmZfZW50cm9weV9wdHIgZW50cm9weSkKK0xPQ0FMKGJvb2xlYW4pCitlbmNvZGVfb25lX2Jsb2NrICh3b3JraW5nX3N0YXRlICogc3RhdGUsIEpDT0VGUFRSIGJsb2NrLCBpbnQgbGFzdF9kY192YWwsCisJCSAgY19kZXJpdmVkX3RibCAqZGN0YmwsIGNfZGVyaXZlZF90YmwgKmFjdGJsKQogewotICBlbWl0X2JpdHNfZShlbnRyb3B5LCAweDdGLCA3KTsgLyogZmlsbCBhbnkgcGFydGlhbCBieXRlIHdpdGggb25lcyAqLwotICBlbnRyb3B5LT5zYXZlZC5wdXRfYnVmZmVyID0gMDsgLyogYW5kIHJlc2V0IGJpdC1idWZmZXIgdG8gZW1wdHkgKi8KLSAgZW50cm9weS0+c2F2ZWQucHV0X2JpdHMgPSAwOwotfQorICBpbnQgdGVtcCwgdGVtcDI7CisgIGludCBuYml0czsKKyAgaW50IHIsIHNmbGFnLCBzaXplLCBjb2RlOworICB1bnNpZ25lZCBjaGFyIF9idWZmZXJbQlVGU0laRV0sICpidWZmZXI7CisgIHNpemVfdCBwdXRfYnVmZmVyOyAgaW50IHB1dF9iaXRzOworICBpbnQgY29kZV8weGYwID0gYWN0YmwtPmVodWZjb1sweGYwXSwgc2l6ZV8weGYwID0gYWN0YmwtPmVodWZzaVsweGYwXTsKKyAgc2l6ZV90IGJ5dGVzLCBieXRlc3RvY29weTsgIGludCBsb2NhbGJ1ZiA9IDA7CiAKKyAgcHV0X2J1ZmZlciA9IHN0YXRlLT5jdXIucHV0X2J1ZmZlcjsKKyAgcHV0X2JpdHMgPSBzdGF0ZS0+Y3VyLnB1dF9iaXRzOworICBMT0FEX0JVRkZFUigpCiAKLS8qCi0gKiBFbWl0IChvciBqdXN0IGNvdW50KSBhIEh1ZmZtYW4gc3ltYm9sLgotICovCisgIC8qIEVuY29kZSB0aGUgREMgY29lZmZpY2llbnQgZGlmZmVyZW5jZSBwZXIgc2VjdGlvbiBGLjEuMi4xICovCisgIAorICB0ZW1wID0gdGVtcDIgPSBibG9ja1swXSAtIGxhc3RfZGNfdmFsOwogCi1JTkxJTkUKLUxPQ0FMKHZvaWQpCi1lbWl0X2RjX3N5bWJvbCAoaHVmZl9lbnRyb3B5X3B0ciBlbnRyb3B5LCBpbnQgdGJsX25vLCBpbnQgc3ltYm9sKQotewotICBpZiAoZW50cm9weS0+Z2F0aGVyX3N0YXRpc3RpY3MpCi0gICAgZW50cm9weS0+ZGNfY291bnRfcHRyc1t0Ymxfbm9dW3N5bWJvbF0rKzsKLSAgZWxzZSB7Ci0gICAgY19kZXJpdmVkX3RibCAqIHRibCA9IGVudHJvcHktPmRjX2Rlcml2ZWRfdGJsc1t0Ymxfbm9dOwotICAgIGVtaXRfYml0c19lKGVudHJvcHksIHRibC0+ZWh1ZmNvW3N5bWJvbF0sIHRibC0+ZWh1ZnNpW3N5bWJvbF0pOwotICB9Ci19CisgIHNmbGFnID0gdGVtcCA+PiAzMTsKKyAgdGVtcCAtPSAoKHRlbXAgKyB0ZW1wKSAmIHNmbGFnKTsKKyAgdGVtcDIgKz0gc2ZsYWc7CisgIG5iaXRzID0ganBlZ19maXJzdF9iaXRfdGFibGVbdGVtcF07CisgIERVTVBfVkFMVUVfU0xPVyhkY3RibCwgbmJpdHMsIHRlbXAyLCBuYml0cykKIAorICAvKiBFbmNvZGUgdGhlIEFDIGNvZWZmaWNpZW50cyBwZXIgc2VjdGlvbiBGLjEuMi4yICovCisgIAorICByID0gMDsJCQkvKiByID0gcnVuIGxlbmd0aCBvZiB6ZXJvcyAqLwogCi1JTkxJTkUKLUxPQ0FMKHZvaWQpCi1lbWl0X2FjX3N5bWJvbCAoaHVmZl9lbnRyb3B5X3B0ciBlbnRyb3B5LCBpbnQgdGJsX25vLCBpbnQgc3ltYm9sKQotewotICBpZiAoZW50cm9weS0+Z2F0aGVyX3N0YXRpc3RpY3MpCi0gICAgZW50cm9weS0+YWNfY291bnRfcHRyc1t0Ymxfbm9dW3N5bWJvbF0rKzsKLSAgZWxzZSB7Ci0gICAgY19kZXJpdmVkX3RibCAqIHRibCA9IGVudHJvcHktPmFjX2Rlcml2ZWRfdGJsc1t0Ymxfbm9dOwotICAgIGVtaXRfYml0c19lKGVudHJvcHksIHRibC0+ZWh1ZmNvW3N5bWJvbF0sIHRibC0+ZWh1ZnNpW3N5bWJvbF0pOwotICB9Ci19CisjZGVmaW5lIGlubmVybG9vcChvcmRlcikgeyAgXAorICB0ZW1wMiAgPSAqKEpDT0VGKikoKHVuc2lnbmVkIGNoYXIqKWJsb2NrICsgb3JkZXIpOyAgXAorICBpZih0ZW1wMiA9PSAwKSByKys7ICBcCisgIGVsc2UgeyAgXAorICAgIHRlbXAgPSAoSkNPRUYpdGVtcDI7ICBcCisgICAgc2ZsYWcgPSB0ZW1wID4+IDMxOyAgXAorICAgIHRlbXAgPSAodGVtcCBeIHNmbGFnKSAtIHNmbGFnOyAgXAorICAgIHRlbXAyICs9IHNmbGFnOyAgXAorICAgIG5iaXRzID0ganBlZ19maXJzdF9iaXRfdGFibGVbdGVtcF07ICBcCisgICAgZm9yKDsgciA+IDE1OyByIC09IDE2KSBEVU1QX0JJVFMoY29kZV8weGYwLCBzaXplXzB4ZjApICBcCisgICAgc2ZsYWcgPSAociA8PCA0KSArIG5iaXRzOyAgXAorICAgIERVTVBfVkFMVUUoYWN0YmwsIHNmbGFnLCB0ZW1wMiwgbmJpdHMpICBcCisgICAgciA9IDA7ICBcCisgIH19CiAKKyAgaW5uZXJsb29wKDIqMSk7ICAgaW5uZXJsb29wKDIqOCk7ICAgaW5uZXJsb29wKDIqMTYpOyAgaW5uZXJsb29wKDIqOSk7CisgIGlubmVybG9vcCgyKjIpOyAgIGlubmVybG9vcCgyKjMpOyAgIGlubmVybG9vcCgyKjEwKTsgIGlubmVybG9vcCgyKjE3KTsKKyAgaW5uZXJsb29wKDIqMjQpOyAgaW5uZXJsb29wKDIqMzIpOyAgaW5uZXJsb29wKDIqMjUpOyAgaW5uZXJsb29wKDIqMTgpOworICBpbm5lcmxvb3AoMioxMSk7ICBpbm5lcmxvb3AoMio0KTsgICBpbm5lcmxvb3AoMio1KTsgICBpbm5lcmxvb3AoMioxMik7CisgIGlubmVybG9vcCgyKjE5KTsgIGlubmVybG9vcCgyKjI2KTsgIGlubmVybG9vcCgyKjMzKTsgIGlubmVybG9vcCgyKjQwKTsKKyAgaW5uZXJsb29wKDIqNDgpOyAgaW5uZXJsb29wKDIqNDEpOyAgaW5uZXJsb29wKDIqMzQpOyAgaW5uZXJsb29wKDIqMjcpOworICBpbm5lcmxvb3AoMioyMCk7ICBpbm5lcmxvb3AoMioxMyk7ICBpbm5lcmxvb3AoMio2KTsgICBpbm5lcmxvb3AoMio3KTsKKyAgaW5uZXJsb29wKDIqMTQpOyAgaW5uZXJsb29wKDIqMjEpOyAgaW5uZXJsb29wKDIqMjgpOyAgaW5uZXJsb29wKDIqMzUpOworICBpbm5lcmxvb3AoMio0Mik7ICBpbm5lcmxvb3AoMio0OSk7ICBpbm5lcmxvb3AoMio1Nik7ICBpbm5lcmxvb3AoMio1Nyk7CisgIGlubmVybG9vcCgyKjUwKTsgIGlubmVybG9vcCgyKjQzKTsgIGlubmVybG9vcCgyKjM2KTsgIGlubmVybG9vcCgyKjI5KTsKKyAgaW5uZXJsb29wKDIqMjIpOyAgaW5uZXJsb29wKDIqMTUpOyAgaW5uZXJsb29wKDIqMjMpOyAgaW5uZXJsb29wKDIqMzApOworICBpbm5lcmxvb3AoMiozNyk7ICBpbm5lcmxvb3AoMio0NCk7ICBpbm5lcmxvb3AoMio1MSk7ICBpbm5lcmxvb3AoMio1OCk7CisgIGlubmVybG9vcCgyKjU5KTsgIGlubmVybG9vcCgyKjUyKTsgIGlubmVybG9vcCgyKjQ1KTsgIGlubmVybG9vcCgyKjM4KTsKKyAgaW5uZXJsb29wKDIqMzEpOyAgaW5uZXJsb29wKDIqMzkpOyAgaW5uZXJsb29wKDIqNDYpOyAgaW5uZXJsb29wKDIqNTMpOworICBpbm5lcmxvb3AoMio2MCk7ICBpbm5lcmxvb3AoMio2MSk7ICBpbm5lcmxvb3AoMio1NCk7ICBpbm5lcmxvb3AoMio0Nyk7CisgIGlubmVybG9vcCgyKjU1KTsgIGlubmVybG9vcCgyKjYyKTsgIGlubmVybG9vcCgyKjYzKTsKIAotLyoKLSAqIEVtaXQgYml0cyBmcm9tIGEgY29ycmVjdGlvbiBiaXQgYnVmZmVyLgotICovCisgIC8qIElmIHRoZSBsYXN0IGNvZWYocykgd2VyZSB6ZXJvLCBlbWl0IGFuIGVuZC1vZi1ibG9jayBjb2RlICovCisgIGlmIChyID4gMCkgRFVNUF9TSU5HTEVfVkFMVUUoYWN0YmwsIDB4MCkKIAotTE9DQUwodm9pZCkKLWVtaXRfYnVmZmVyZWRfYml0cyAoaHVmZl9lbnRyb3B5X3B0ciBlbnRyb3B5LCBjaGFyICogYnVmc3RhcnQsCi0JCSAgICB1bnNpZ25lZCBpbnQgbmJpdHMpCi17Ci0gIGlmIChlbnRyb3B5LT5nYXRoZXJfc3RhdGlzdGljcykKLSAgICByZXR1cm47CQkJLyogbm8gcmVhbCB3b3JrICovCisgIHN0YXRlLT5jdXIucHV0X2J1ZmZlciA9IHB1dF9idWZmZXI7CisgIHN0YXRlLT5jdXIucHV0X2JpdHMgPSBwdXRfYml0czsKKyAgU1RPUkVfQlVGRkVSKCkKIAotICB3aGlsZSAobmJpdHMgPiAwKSB7Ci0gICAgZW1pdF9iaXRzX2UoZW50cm9weSwgKHVuc2lnbmVkIGludCkgKCpidWZzdGFydCksIDEpOwotICAgIGJ1ZnN0YXJ0Kys7Ci0gICAgbmJpdHMtLTsKLSAgfQotfQotCi0KLS8qCi0gKiBFbWl0IGFueSBwZW5kaW5nIEVPQlJVTiBzeW1ib2wuCi0gKi8KLQotTE9DQUwodm9pZCkKLWVtaXRfZW9icnVuIChodWZmX2VudHJvcHlfcHRyIGVudHJvcHkpCi17Ci0gIHJlZ2lzdGVyIGludCB0ZW1wLCBuYml0czsKLQotICBpZiAoZW50cm9weS0+RU9CUlVOID4gMCkgewkvKiBpZiB0aGVyZSBpcyBhbnkgcGVuZGluZyBFT0JSVU4gKi8KLSAgICB0ZW1wID0gZW50cm9weS0+RU9CUlVOOwotICAgIG5iaXRzID0gMDsKLSAgICB3aGlsZSAoKHRlbXAgPj49IDEpKQotICAgICAgbmJpdHMrKzsKLSAgICAvKiBzYWZldHkgY2hlY2s6IHNob3VsZG4ndCBoYXBwZW4gZ2l2ZW4gbGltaXRlZCBjb3JyZWN0aW9uLWJpdCBidWZmZXIgKi8KLSAgICBpZiAobmJpdHMgPiAxNCkKLSAgICAgIEVSUkVYSVQoZW50cm9weS0+Y2luZm8sIEpFUlJfSFVGRl9NSVNTSU5HX0NPREUpOwotCi0gICAgZW1pdF9hY19zeW1ib2woZW50cm9weSwgZW50cm9weS0+YWNfdGJsX25vLCBuYml0cyA8PCA0KTsKLSAgICBpZiAobmJpdHMpCi0gICAgICBlbWl0X2JpdHNfZShlbnRyb3B5LCBlbnRyb3B5LT5FT0JSVU4sIG5iaXRzKTsKLQotICAgIGVudHJvcHktPkVPQlJVTiA9IDA7Ci0KLSAgICAvKiBFbWl0IGFueSBidWZmZXJlZCBjb3JyZWN0aW9uIGJpdHMgKi8KLSAgICBlbWl0X2J1ZmZlcmVkX2JpdHMoZW50cm9weSwgZW50cm9weS0+Yml0X2J1ZmZlciwgZW50cm9weS0+QkUpOwotICAgIGVudHJvcHktPkJFID0gMDsKLSAgfQorICByZXR1cm4gVFJVRTsKIH0KIAogCkBAIC00ODcsMTUgKzU4MywxNSBAQAogICovCiAKIExPQ0FMKGJvb2xlYW4pCi1lbWl0X3Jlc3RhcnRfcyAod29ya2luZ19zdGF0ZSAqIHN0YXRlLCBpbnQgcmVzdGFydF9udW0pCitlbWl0X3Jlc3RhcnQgKHdvcmtpbmdfc3RhdGUgKiBzdGF0ZSwgaW50IHJlc3RhcnRfbnVtKQogewogICBpbnQgY2k7CiAKLSAgaWYgKCEgZmx1c2hfYml0c19zKHN0YXRlKSkKKyAgaWYgKCEgZmx1c2hfYml0cyhzdGF0ZSkpCiAgICAgcmV0dXJuIEZBTFNFOwogCi0gIGVtaXRfYnl0ZV9zKHN0YXRlLCAweEZGLCByZXR1cm4gRkFMU0UpOwotICBlbWl0X2J5dGVfcyhzdGF0ZSwgSlBFR19SU1QwICsgcmVzdGFydF9udW0sIHJldHVybiBGQUxTRSk7CisgIGVtaXRfYnl0ZShzdGF0ZSwgMHhGRiwgcmV0dXJuIEZBTFNFKTsKKyAgZW1pdF9ieXRlKHN0YXRlLCBKUEVHX1JTVDAgKyByZXN0YXJ0X251bSwgcmV0dXJuIEZBTFNFKTsKIAogICAvKiBSZS1pbml0aWFsaXplIERDIHByZWRpY3Rpb25zIHRvIDAgKi8KICAgZm9yIChjaSA9IDA7IGNpIDwgc3RhdGUtPmNpbmZvLT5jb21wc19pbl9zY2FuOyBjaSsrKQpAQCAtNTA3LDUwNyArNjAzLDYgQEAKIH0KIAogCi1MT0NBTCh2b2lkKQotZW1pdF9yZXN0YXJ0X2UgKGh1ZmZfZW50cm9weV9wdHIgZW50cm9weSwgaW50IHJlc3RhcnRfbnVtKQotewotICBpbnQgY2k7Ci0KLSAgZW1pdF9lb2JydW4oZW50cm9weSk7Ci0KLSAgaWYgKCEgZW50cm9weS0+Z2F0aGVyX3N0YXRpc3RpY3MpIHsKLSAgICBmbHVzaF9iaXRzX2UoZW50cm9weSk7Ci0gICAgZW1pdF9ieXRlX2UoZW50cm9weSwgMHhGRik7Ci0gICAgZW1pdF9ieXRlX2UoZW50cm9weSwgSlBFR19SU1QwICsgcmVzdGFydF9udW0pOwotICB9Ci0KLSAgaWYgKGVudHJvcHktPmNpbmZvLT5TcyA9PSAwKSB7Ci0gICAgLyogUmUtaW5pdGlhbGl6ZSBEQyBwcmVkaWN0aW9ucyB0byAwICovCi0gICAgZm9yIChjaSA9IDA7IGNpIDwgZW50cm9weS0+Y2luZm8tPmNvbXBzX2luX3NjYW47IGNpKyspCi0gICAgICBlbnRyb3B5LT5zYXZlZC5sYXN0X2RjX3ZhbFtjaV0gPSAwOwotICB9IGVsc2UgewotICAgIC8qIFJlLWluaXRpYWxpemUgYWxsIEFDLXJlbGF0ZWQgZmllbGRzIHRvIDAgKi8KLSAgICBlbnRyb3B5LT5FT0JSVU4gPSAwOwotICAgIGVudHJvcHktPkJFID0gMDsKLSAgfQotfQotCi0KLS8qCi0gKiBNQ1UgZW5jb2RpbmcgZm9yIERDIGluaXRpYWwgc2NhbiAoZWl0aGVyIHNwZWN0cmFsIHNlbGVjdGlvbiwKLSAqIG9yIGZpcnN0IHBhc3Mgb2Ygc3VjY2Vzc2l2ZSBhcHByb3hpbWF0aW9uKS4KLSAqLwotCi1NRVRIT0RERUYoYm9vbGVhbikKLWVuY29kZV9tY3VfRENfZmlyc3QgKGpfY29tcHJlc3NfcHRyIGNpbmZvLCBKQkxPQ0tST1cgKk1DVV9kYXRhKQotewotICBodWZmX2VudHJvcHlfcHRyIGVudHJvcHkgPSAoaHVmZl9lbnRyb3B5X3B0cikgY2luZm8tPmVudHJvcHk7Ci0gIHJlZ2lzdGVyIGludCB0ZW1wLCB0ZW1wMjsKLSAgcmVnaXN0ZXIgaW50IG5iaXRzOwotICBpbnQgYmxrbiwgY2k7Ci0gIGludCBBbCA9IGNpbmZvLT5BbDsKLSAgSkJMT0NLUk9XIGJsb2NrOwotICBqcGVnX2NvbXBvbmVudF9pbmZvICogY29tcHB0cjsKLSAgSVNISUZUX1RFTVBTCi0KLSAgZW50cm9weS0+bmV4dF9vdXRwdXRfYnl0ZSA9IGNpbmZvLT5kZXN0LT5uZXh0X291dHB1dF9ieXRlOwotICBlbnRyb3B5LT5mcmVlX2luX2J1ZmZlciA9IGNpbmZvLT5kZXN0LT5mcmVlX2luX2J1ZmZlcjsKLQotICAvKiBFbWl0IHJlc3RhcnQgbWFya2VyIGlmIG5lZWRlZCAqLwotICBpZiAoY2luZm8tPnJlc3RhcnRfaW50ZXJ2YWwpCi0gICAgaWYgKGVudHJvcHktPnJlc3RhcnRzX3RvX2dvID09IDApCi0gICAgICBlbWl0X3Jlc3RhcnRfZShlbnRyb3B5LCBlbnRyb3B5LT5uZXh0X3Jlc3RhcnRfbnVtKTsKLQotICAvKiBFbmNvZGUgdGhlIE1DVSBkYXRhIGJsb2NrcyAqLwotICBmb3IgKGJsa24gPSAwOyBibGtuIDwgY2luZm8tPmJsb2Nrc19pbl9NQ1U7IGJsa24rKykgewotICAgIGJsb2NrID0gTUNVX2RhdGFbYmxrbl07Ci0gICAgY2kgPSBjaW5mby0+TUNVX21lbWJlcnNoaXBbYmxrbl07Ci0gICAgY29tcHB0ciA9IGNpbmZvLT5jdXJfY29tcF9pbmZvW2NpXTsKLQotICAgIC8qIENvbXB1dGUgdGhlIERDIHZhbHVlIGFmdGVyIHRoZSByZXF1aXJlZCBwb2ludCB0cmFuc2Zvcm0gYnkgQWwuCi0gICAgICogVGhpcyBpcyBzaW1wbHkgYW4gYXJpdGhtZXRpYyByaWdodCBzaGlmdC4KLSAgICAgKi8KLSAgICB0ZW1wMiA9IElSSUdIVF9TSElGVCgoaW50KSAoKCpibG9jaylbMF0pLCBBbCk7Ci0KLSAgICAvKiBEQyBkaWZmZXJlbmNlcyBhcmUgZmlndXJlZCBvbiB0aGUgcG9pbnQtdHJhbnNmb3JtZWQgdmFsdWVzLiAqLwotICAgIHRlbXAgPSB0ZW1wMiAtIGVudHJvcHktPnNhdmVkLmxhc3RfZGNfdmFsW2NpXTsKLSAgICBlbnRyb3B5LT5zYXZlZC5sYXN0X2RjX3ZhbFtjaV0gPSB0ZW1wMjsKLQotICAgIC8qIEVuY29kZSB0aGUgREMgY29lZmZpY2llbnQgZGlmZmVyZW5jZSBwZXIgc2VjdGlvbiBHLjEuMi4xICovCi0gICAgdGVtcDIgPSB0ZW1wOwotICAgIGlmICh0ZW1wIDwgMCkgewotICAgICAgdGVtcCA9IC10ZW1wOwkJLyogdGVtcCBpcyBhYnMgdmFsdWUgb2YgaW5wdXQgKi8KLSAgICAgIC8qIEZvciBhIG5lZ2F0aXZlIGlucHV0LCB3YW50IHRlbXAyID0gYml0d2lzZSBjb21wbGVtZW50IG9mIGFicyhpbnB1dCkgKi8KLSAgICAgIC8qIFRoaXMgY29kZSBhc3N1bWVzIHdlIGFyZSBvbiBhIHR3bydzIGNvbXBsZW1lbnQgbWFjaGluZSAqLwotICAgICAgdGVtcDItLTsKLSAgICB9Ci0gICAgCi0gICAgLyogRmluZCB0aGUgbnVtYmVyIG9mIGJpdHMgbmVlZGVkIGZvciB0aGUgbWFnbml0dWRlIG9mIHRoZSBjb2VmZmljaWVudCAqLwotICAgIG5iaXRzID0gMDsKLSAgICB3aGlsZSAodGVtcCkgewotICAgICAgbmJpdHMrKzsKLSAgICAgIHRlbXAgPj49IDE7Ci0gICAgfQotICAgIC8qIENoZWNrIGZvciBvdXQtb2YtcmFuZ2UgY29lZmZpY2llbnQgdmFsdWVzLgotICAgICAqIFNpbmNlIHdlJ3JlIGVuY29kaW5nIGEgZGlmZmVyZW5jZSwgdGhlIHJhbmdlIGxpbWl0IGlzIHR3aWNlIGFzIG11Y2guCi0gICAgICovCi0gICAgaWYgKG5iaXRzID4gTUFYX0NPRUZfQklUUysxKQotICAgICAgRVJSRVhJVChjaW5mbywgSkVSUl9CQURfRENUX0NPRUYpOwotICAgIAotICAgIC8qIENvdW50L2VtaXQgdGhlIEh1ZmZtYW4tY29kZWQgc3ltYm9sIGZvciB0aGUgbnVtYmVyIG9mIGJpdHMgKi8KLSAgICBlbWl0X2RjX3N5bWJvbChlbnRyb3B5LCBjb21wcHRyLT5kY190Ymxfbm8sIG5iaXRzKTsKLSAgICAKLSAgICAvKiBFbWl0IHRoYXQgbnVtYmVyIG9mIGJpdHMgb2YgdGhlIHZhbHVlLCBpZiBwb3NpdGl2ZSwgKi8KLSAgICAvKiBvciB0aGUgY29tcGxlbWVudCBvZiBpdHMgbWFnbml0dWRlLCBpZiBuZWdhdGl2ZS4gKi8KLSAgICBpZiAobmJpdHMpCQkJLyogZW1pdF9iaXRzIHJlamVjdHMgY2FsbHMgd2l0aCBzaXplIDAgKi8KLSAgICAgIGVtaXRfYml0c19lKGVudHJvcHksICh1bnNpZ25lZCBpbnQpIHRlbXAyLCBuYml0cyk7Ci0gIH0KLQotICBjaW5mby0+ZGVzdC0+bmV4dF9vdXRwdXRfYnl0ZSA9IGVudHJvcHktPm5leHRfb3V0cHV0X2J5dGU7Ci0gIGNpbmZvLT5kZXN0LT5mcmVlX2luX2J1ZmZlciA9IGVudHJvcHktPmZyZWVfaW5fYnVmZmVyOwotCi0gIC8qIFVwZGF0ZSByZXN0YXJ0LWludGVydmFsIHN0YXRlIHRvbyAqLwotICBpZiAoY2luZm8tPnJlc3RhcnRfaW50ZXJ2YWwpIHsKLSAgICBpZiAoZW50cm9weS0+cmVzdGFydHNfdG9fZ28gPT0gMCkgewotICAgICAgZW50cm9weS0+cmVzdGFydHNfdG9fZ28gPSBjaW5mby0+cmVzdGFydF9pbnRlcnZhbDsKLSAgICAgIGVudHJvcHktPm5leHRfcmVzdGFydF9udW0rKzsKLSAgICAgIGVudHJvcHktPm5leHRfcmVzdGFydF9udW0gJj0gNzsKLSAgICB9Ci0gICAgZW50cm9weS0+cmVzdGFydHNfdG9fZ28tLTsKLSAgfQotCi0gIHJldHVybiBUUlVFOwotfQotCi0KLS8qCi0gKiBNQ1UgZW5jb2RpbmcgZm9yIEFDIGluaXRpYWwgc2NhbiAoZWl0aGVyIHNwZWN0cmFsIHNlbGVjdGlvbiwKLSAqIG9yIGZpcnN0IHBhc3Mgb2Ygc3VjY2Vzc2l2ZSBhcHByb3hpbWF0aW9uKS4KLSAqLwotCi1NRVRIT0RERUYoYm9vbGVhbikKLWVuY29kZV9tY3VfQUNfZmlyc3QgKGpfY29tcHJlc3NfcHRyIGNpbmZvLCBKQkxPQ0tST1cgKk1DVV9kYXRhKQotewotICBodWZmX2VudHJvcHlfcHRyIGVudHJvcHkgPSAoaHVmZl9lbnRyb3B5X3B0cikgY2luZm8tPmVudHJvcHk7Ci0gIHJlZ2lzdGVyIGludCB0ZW1wLCB0ZW1wMjsKLSAgcmVnaXN0ZXIgaW50IG5iaXRzOwotICByZWdpc3RlciBpbnQgciwgazsKLSAgaW50IFNlLCBBbDsKLSAgY29uc3QgaW50ICogbmF0dXJhbF9vcmRlcjsKLSAgSkJMT0NLUk9XIGJsb2NrOwotCi0gIGVudHJvcHktPm5leHRfb3V0cHV0X2J5dGUgPSBjaW5mby0+ZGVzdC0+bmV4dF9vdXRwdXRfYnl0ZTsKLSAgZW50cm9weS0+ZnJlZV9pbl9idWZmZXIgPSBjaW5mby0+ZGVzdC0+ZnJlZV9pbl9idWZmZXI7Ci0KLSAgLyogRW1pdCByZXN0YXJ0IG1hcmtlciBpZiBuZWVkZWQgKi8KLSAgaWYgKGNpbmZvLT5yZXN0YXJ0X2ludGVydmFsKQotICAgIGlmIChlbnRyb3B5LT5yZXN0YXJ0c190b19nbyA9PSAwKQotICAgICAgZW1pdF9yZXN0YXJ0X2UoZW50cm9weSwgZW50cm9weS0+bmV4dF9yZXN0YXJ0X251bSk7Ci0KLSAgU2UgPSBjaW5mby0+U2U7Ci0gIEFsID0gY2luZm8tPkFsOwotICBuYXR1cmFsX29yZGVyID0gY2luZm8tPm5hdHVyYWxfb3JkZXI7Ci0KLSAgLyogRW5jb2RlIHRoZSBNQ1UgZGF0YSBibG9jayAqLwotICBibG9jayA9IE1DVV9kYXRhWzBdOwotCi0gIC8qIEVuY29kZSB0aGUgQUMgY29lZmZpY2llbnRzIHBlciBzZWN0aW9uIEcuMS4yLjIsIGZpZy4gRy4zICovCi0gIAotICByID0gMDsJCQkvKiByID0gcnVuIGxlbmd0aCBvZiB6ZXJvcyAqLwotICAgCi0gIGZvciAoayA9IGNpbmZvLT5TczsgayA8PSBTZTsgaysrKSB7Ci0gICAgaWYgKCh0ZW1wID0gKCpibG9jaylbbmF0dXJhbF9vcmRlcltrXV0pID09IDApIHsKLSAgICAgIHIrKzsKLSAgICAgIGNvbnRpbnVlOwotICAgIH0KLSAgICAvKiBXZSBtdXN0IGFwcGx5IHRoZSBwb2ludCB0cmFuc2Zvcm0gYnkgQWwuICBGb3IgQUMgY29lZmZpY2llbnRzIHRoaXMKLSAgICAgKiBpcyBhbiBpbnRlZ2VyIGRpdmlzaW9uIHdpdGggcm91bmRpbmcgdG93YXJkcyAwLiAgVG8gZG8gdGhpcyBwb3J0YWJseQotICAgICAqIGluIEMsIHdlIHNoaWZ0IGFmdGVyIG9idGFpbmluZyB0aGUgYWJzb2x1dGUgdmFsdWU7IHNvIHRoZSBjb2RlIGlzCi0gICAgICogaW50ZXJ3b3ZlbiB3aXRoIGZpbmRpbmcgdGhlIGFicyB2YWx1ZSAodGVtcCkgYW5kIG91dHB1dCBiaXRzICh0ZW1wMikuCi0gICAgICovCi0gICAgaWYgKHRlbXAgPCAwKSB7Ci0gICAgICB0ZW1wID0gLXRlbXA7CQkvKiB0ZW1wIGlzIGFicyB2YWx1ZSBvZiBpbnB1dCAqLwotICAgICAgdGVtcCA+Pj0gQWw7CQkvKiBhcHBseSB0aGUgcG9pbnQgdHJhbnNmb3JtICovCi0gICAgICAvKiBGb3IgYSBuZWdhdGl2ZSBjb2VmLCB3YW50IHRlbXAyID0gYml0d2lzZSBjb21wbGVtZW50IG9mIGFicyhjb2VmKSAqLwotICAgICAgdGVtcDIgPSB+dGVtcDsKLSAgICB9IGVsc2UgewotICAgICAgdGVtcCA+Pj0gQWw7CQkvKiBhcHBseSB0aGUgcG9pbnQgdHJhbnNmb3JtICovCi0gICAgICB0ZW1wMiA9IHRlbXA7Ci0gICAgfQotICAgIC8qIFdhdGNoIG91dCBmb3IgY2FzZSB0aGF0IG5vbnplcm8gY29lZiBpcyB6ZXJvIGFmdGVyIHBvaW50IHRyYW5zZm9ybSAqLwotICAgIGlmICh0ZW1wID09IDApIHsKLSAgICAgIHIrKzsKLSAgICAgIGNvbnRpbnVlOwotICAgIH0KLQotICAgIC8qIEVtaXQgYW55IHBlbmRpbmcgRU9CUlVOICovCi0gICAgaWYgKGVudHJvcHktPkVPQlJVTiA+IDApCi0gICAgICBlbWl0X2VvYnJ1bihlbnRyb3B5KTsKLSAgICAvKiBpZiBydW4gbGVuZ3RoID4gMTUsIG11c3QgZW1pdCBzcGVjaWFsIHJ1bi1sZW5ndGgtMTYgY29kZXMgKDB4RjApICovCi0gICAgd2hpbGUgKHIgPiAxNSkgewotICAgICAgZW1pdF9hY19zeW1ib2woZW50cm9weSwgZW50cm9weS0+YWNfdGJsX25vLCAweEYwKTsKLSAgICAgIHIgLT0gMTY7Ci0gICAgfQotCi0gICAgLyogRmluZCB0aGUgbnVtYmVyIG9mIGJpdHMgbmVlZGVkIGZvciB0aGUgbWFnbml0dWRlIG9mIHRoZSBjb2VmZmljaWVudCAqLwotICAgIG5iaXRzID0gMTsJCQkvKiB0aGVyZSBtdXN0IGJlIGF0IGxlYXN0IG9uZSAxIGJpdCAqLwotICAgIHdoaWxlICgodGVtcCA+Pj0gMSkpCi0gICAgICBuYml0cysrOwotICAgIC8qIENoZWNrIGZvciBvdXQtb2YtcmFuZ2UgY29lZmZpY2llbnQgdmFsdWVzICovCi0gICAgaWYgKG5iaXRzID4gTUFYX0NPRUZfQklUUykKLSAgICAgIEVSUkVYSVQoY2luZm8sIEpFUlJfQkFEX0RDVF9DT0VGKTsKLQotICAgIC8qIENvdW50L2VtaXQgSHVmZm1hbiBzeW1ib2wgZm9yIHJ1biBsZW5ndGggLyBudW1iZXIgb2YgYml0cyAqLwotICAgIGVtaXRfYWNfc3ltYm9sKGVudHJvcHksIGVudHJvcHktPmFjX3RibF9ubywgKHIgPDwgNCkgKyBuYml0cyk7Ci0KLSAgICAvKiBFbWl0IHRoYXQgbnVtYmVyIG9mIGJpdHMgb2YgdGhlIHZhbHVlLCBpZiBwb3NpdGl2ZSwgKi8KLSAgICAvKiBvciB0aGUgY29tcGxlbWVudCBvZiBpdHMgbWFnbml0dWRlLCBpZiBuZWdhdGl2ZS4gKi8KLSAgICBlbWl0X2JpdHNfZShlbnRyb3B5LCAodW5zaWduZWQgaW50KSB0ZW1wMiwgbmJpdHMpOwotCi0gICAgciA9IDA7CQkJLyogcmVzZXQgemVybyBydW4gbGVuZ3RoICovCi0gIH0KLQotICBpZiAociA+IDApIHsJCQkvKiBJZiB0aGVyZSBhcmUgdHJhaWxpbmcgemVyb2VzLCAqLwotICAgIGVudHJvcHktPkVPQlJVTisrOwkJLyogY291bnQgYW4gRU9CICovCi0gICAgaWYgKGVudHJvcHktPkVPQlJVTiA9PSAweDdGRkYpCi0gICAgICBlbWl0X2VvYnJ1bihlbnRyb3B5KTsJLyogZm9yY2UgaXQgb3V0IHRvIGF2b2lkIG92ZXJmbG93ICovCi0gIH0KLQotICBjaW5mby0+ZGVzdC0+bmV4dF9vdXRwdXRfYnl0ZSA9IGVudHJvcHktPm5leHRfb3V0cHV0X2J5dGU7Ci0gIGNpbmZvLT5kZXN0LT5mcmVlX2luX2J1ZmZlciA9IGVudHJvcHktPmZyZWVfaW5fYnVmZmVyOwotCi0gIC8qIFVwZGF0ZSByZXN0YXJ0LWludGVydmFsIHN0YXRlIHRvbyAqLwotICBpZiAoY2luZm8tPnJlc3RhcnRfaW50ZXJ2YWwpIHsKLSAgICBpZiAoZW50cm9weS0+cmVzdGFydHNfdG9fZ28gPT0gMCkgewotICAgICAgZW50cm9weS0+cmVzdGFydHNfdG9fZ28gPSBjaW5mby0+cmVzdGFydF9pbnRlcnZhbDsKLSAgICAgIGVudHJvcHktPm5leHRfcmVzdGFydF9udW0rKzsKLSAgICAgIGVudHJvcHktPm5leHRfcmVzdGFydF9udW0gJj0gNzsKLSAgICB9Ci0gICAgZW50cm9weS0+cmVzdGFydHNfdG9fZ28tLTsKLSAgfQotCi0gIHJldHVybiBUUlVFOwotfQotCi0KLS8qCi0gKiBNQ1UgZW5jb2RpbmcgZm9yIERDIHN1Y2Nlc3NpdmUgYXBwcm94aW1hdGlvbiByZWZpbmVtZW50IHNjYW4uCi0gKiBOb3RlOiB3ZSBhc3N1bWUgc3VjaCBzY2FucyBjYW4gYmUgbXVsdGktY29tcG9uZW50LCBhbHRob3VnaCB0aGUgc3BlYwotICogaXMgbm90IHZlcnkgY2xlYXIgb24gdGhlIHBvaW50LgotICovCi0KLU1FVEhPRERFRihib29sZWFuKQotZW5jb2RlX21jdV9EQ19yZWZpbmUgKGpfY29tcHJlc3NfcHRyIGNpbmZvLCBKQkxPQ0tST1cgKk1DVV9kYXRhKQotewotICBodWZmX2VudHJvcHlfcHRyIGVudHJvcHkgPSAoaHVmZl9lbnRyb3B5X3B0cikgY2luZm8tPmVudHJvcHk7Ci0gIHJlZ2lzdGVyIGludCB0ZW1wOwotICBpbnQgYmxrbjsKLSAgaW50IEFsID0gY2luZm8tPkFsOwotICBKQkxPQ0tST1cgYmxvY2s7Ci0KLSAgZW50cm9weS0+bmV4dF9vdXRwdXRfYnl0ZSA9IGNpbmZvLT5kZXN0LT5uZXh0X291dHB1dF9ieXRlOwotICBlbnRyb3B5LT5mcmVlX2luX2J1ZmZlciA9IGNpbmZvLT5kZXN0LT5mcmVlX2luX2J1ZmZlcjsKLQotICAvKiBFbWl0IHJlc3RhcnQgbWFya2VyIGlmIG5lZWRlZCAqLwotICBpZiAoY2luZm8tPnJlc3RhcnRfaW50ZXJ2YWwpCi0gICAgaWYgKGVudHJvcHktPnJlc3RhcnRzX3RvX2dvID09IDApCi0gICAgICBlbWl0X3Jlc3RhcnRfZShlbnRyb3B5LCBlbnRyb3B5LT5uZXh0X3Jlc3RhcnRfbnVtKTsKLQotICAvKiBFbmNvZGUgdGhlIE1DVSBkYXRhIGJsb2NrcyAqLwotICBmb3IgKGJsa24gPSAwOyBibGtuIDwgY2luZm8tPmJsb2Nrc19pbl9NQ1U7IGJsa24rKykgewotICAgIGJsb2NrID0gTUNVX2RhdGFbYmxrbl07Ci0KLSAgICAvKiBXZSBzaW1wbHkgZW1pdCB0aGUgQWwndGggYml0IG9mIHRoZSBEQyBjb2VmZmljaWVudCB2YWx1ZS4gKi8KLSAgICB0ZW1wID0gKCpibG9jaylbMF07Ci0gICAgZW1pdF9iaXRzX2UoZW50cm9weSwgKHVuc2lnbmVkIGludCkgKHRlbXAgPj4gQWwpLCAxKTsKLSAgfQotCi0gIGNpbmZvLT5kZXN0LT5uZXh0X291dHB1dF9ieXRlID0gZW50cm9weS0+bmV4dF9vdXRwdXRfYnl0ZTsKLSAgY2luZm8tPmRlc3QtPmZyZWVfaW5fYnVmZmVyID0gZW50cm9weS0+ZnJlZV9pbl9idWZmZXI7Ci0KLSAgLyogVXBkYXRlIHJlc3RhcnQtaW50ZXJ2YWwgc3RhdGUgdG9vICovCi0gIGlmIChjaW5mby0+cmVzdGFydF9pbnRlcnZhbCkgewotICAgIGlmIChlbnRyb3B5LT5yZXN0YXJ0c190b19nbyA9PSAwKSB7Ci0gICAgICBlbnRyb3B5LT5yZXN0YXJ0c190b19nbyA9IGNpbmZvLT5yZXN0YXJ0X2ludGVydmFsOwotICAgICAgZW50cm9weS0+bmV4dF9yZXN0YXJ0X251bSsrOwotICAgICAgZW50cm9weS0+bmV4dF9yZXN0YXJ0X251bSAmPSA3OwotICAgIH0KLSAgICBlbnRyb3B5LT5yZXN0YXJ0c190b19nby0tOwotICB9Ci0KLSAgcmV0dXJuIFRSVUU7Ci19Ci0KLQotLyoKLSAqIE1DVSBlbmNvZGluZyBmb3IgQUMgc3VjY2Vzc2l2ZSBhcHByb3hpbWF0aW9uIHJlZmluZW1lbnQgc2Nhbi4KLSAqLwotCi1NRVRIT0RERUYoYm9vbGVhbikKLWVuY29kZV9tY3VfQUNfcmVmaW5lIChqX2NvbXByZXNzX3B0ciBjaW5mbywgSkJMT0NLUk9XICpNQ1VfZGF0YSkKLXsKLSAgaHVmZl9lbnRyb3B5X3B0ciBlbnRyb3B5ID0gKGh1ZmZfZW50cm9weV9wdHIpIGNpbmZvLT5lbnRyb3B5OwotICByZWdpc3RlciBpbnQgdGVtcDsKLSAgcmVnaXN0ZXIgaW50IHIsIGs7Ci0gIGludCBFT0I7Ci0gIGNoYXIgKkJSX2J1ZmZlcjsKLSAgdW5zaWduZWQgaW50IEJSOwotICBpbnQgU2UsIEFsOwotICBjb25zdCBpbnQgKiBuYXR1cmFsX29yZGVyOwotICBKQkxPQ0tST1cgYmxvY2s7Ci0gIGludCBhYnN2YWx1ZXNbRENUU0laRTJdOwotCi0gIGVudHJvcHktPm5leHRfb3V0cHV0X2J5dGUgPSBjaW5mby0+ZGVzdC0+bmV4dF9vdXRwdXRfYnl0ZTsKLSAgZW50cm9weS0+ZnJlZV9pbl9idWZmZXIgPSBjaW5mby0+ZGVzdC0+ZnJlZV9pbl9idWZmZXI7Ci0KLSAgLyogRW1pdCByZXN0YXJ0IG1hcmtlciBpZiBuZWVkZWQgKi8KLSAgaWYgKGNpbmZvLT5yZXN0YXJ0X2ludGVydmFsKQotICAgIGlmIChlbnRyb3B5LT5yZXN0YXJ0c190b19nbyA9PSAwKQotICAgICAgZW1pdF9yZXN0YXJ0X2UoZW50cm9weSwgZW50cm9weS0+bmV4dF9yZXN0YXJ0X251bSk7Ci0KLSAgU2UgPSBjaW5mby0+U2U7Ci0gIEFsID0gY2luZm8tPkFsOwotICBuYXR1cmFsX29yZGVyID0gY2luZm8tPm5hdHVyYWxfb3JkZXI7Ci0KLSAgLyogRW5jb2RlIHRoZSBNQ1UgZGF0YSBibG9jayAqLwotICBibG9jayA9IE1DVV9kYXRhWzBdOwotCi0gIC8qIEl0IGlzIGNvbnZlbmllbnQgdG8gbWFrZSBhIHByZS1wYXNzIHRvIGRldGVybWluZSB0aGUgdHJhbnNmb3JtZWQKLSAgICogY29lZmZpY2llbnRzJyBhYnNvbHV0ZSB2YWx1ZXMgYW5kIHRoZSBFT0IgcG9zaXRpb24uCi0gICAqLwotICBFT0IgPSAwOwotICBmb3IgKGsgPSBjaW5mby0+U3M7IGsgPD0gU2U7IGsrKykgewotICAgIHRlbXAgPSAoKmJsb2NrKVtuYXR1cmFsX29yZGVyW2tdXTsKLSAgICAvKiBXZSBtdXN0IGFwcGx5IHRoZSBwb2ludCB0cmFuc2Zvcm0gYnkgQWwuICBGb3IgQUMgY29lZmZpY2llbnRzIHRoaXMKLSAgICAgKiBpcyBhbiBpbnRlZ2VyIGRpdmlzaW9uIHdpdGggcm91bmRpbmcgdG93YXJkcyAwLiAgVG8gZG8gdGhpcyBwb3J0YWJseQotICAgICAqIGluIEMsIHdlIHNoaWZ0IGFmdGVyIG9idGFpbmluZyB0aGUgYWJzb2x1dGUgdmFsdWUuCi0gICAgICovCi0gICAgaWYgKHRlbXAgPCAwKQotICAgICAgdGVtcCA9IC10ZW1wOwkJLyogdGVtcCBpcyBhYnMgdmFsdWUgb2YgaW5wdXQgKi8KLSAgICB0ZW1wID4+PSBBbDsJCS8qIGFwcGx5IHRoZSBwb2ludCB0cmFuc2Zvcm0gKi8KLSAgICBhYnN2YWx1ZXNba10gPSB0ZW1wOwkvKiBzYXZlIGFicyB2YWx1ZSBmb3IgbWFpbiBwYXNzICovCi0gICAgaWYgKHRlbXAgPT0gMSkKLSAgICAgIEVPQiA9IGs7CQkJLyogRU9CID0gaW5kZXggb2YgbGFzdCBuZXdseS1ub256ZXJvIGNvZWYgKi8KLSAgfQotCi0gIC8qIEVuY29kZSB0aGUgQUMgY29lZmZpY2llbnRzIHBlciBzZWN0aW9uIEcuMS4yLjMsIGZpZy4gRy43ICovCi0gIAotICByID0gMDsJCQkvKiByID0gcnVuIGxlbmd0aCBvZiB6ZXJvcyAqLwotICBCUiA9IDA7CQkJLyogQlIgPSBjb3VudCBvZiBidWZmZXJlZCBiaXRzIGFkZGVkIG5vdyAqLwotICBCUl9idWZmZXIgPSBlbnRyb3B5LT5iaXRfYnVmZmVyICsgZW50cm9weS0+QkU7IC8qIEFwcGVuZCBiaXRzIHRvIGJ1ZmZlciAqLwotCi0gIGZvciAoayA9IGNpbmZvLT5TczsgayA8PSBTZTsgaysrKSB7Ci0gICAgaWYgKCh0ZW1wID0gYWJzdmFsdWVzW2tdKSA9PSAwKSB7Ci0gICAgICByKys7Ci0gICAgICBjb250aW51ZTsKLSAgICB9Ci0KLSAgICAvKiBFbWl0IGFueSByZXF1aXJlZCBaUkxzLCBidXQgbm90IGlmIHRoZXkgY2FuIGJlIGZvbGRlZCBpbnRvIEVPQiAqLwotICAgIHdoaWxlIChyID4gMTUgJiYgayA8PSBFT0IpIHsKLSAgICAgIC8qIGVtaXQgYW55IHBlbmRpbmcgRU9CUlVOIGFuZCB0aGUgQkUgY29ycmVjdGlvbiBiaXRzICovCi0gICAgICBlbWl0X2VvYnJ1bihlbnRyb3B5KTsKLSAgICAgIC8qIEVtaXQgWlJMICovCi0gICAgICBlbWl0X2FjX3N5bWJvbChlbnRyb3B5LCBlbnRyb3B5LT5hY190Ymxfbm8sIDB4RjApOwotICAgICAgciAtPSAxNjsKLSAgICAgIC8qIEVtaXQgYnVmZmVyZWQgY29ycmVjdGlvbiBiaXRzIHRoYXQgbXVzdCBiZSBhc3NvY2lhdGVkIHdpdGggWlJMICovCi0gICAgICBlbWl0X2J1ZmZlcmVkX2JpdHMoZW50cm9weSwgQlJfYnVmZmVyLCBCUik7Ci0gICAgICBCUl9idWZmZXIgPSBlbnRyb3B5LT5iaXRfYnVmZmVyOyAvKiBCRSBiaXRzIGFyZSBnb25lIG5vdyAqLwotICAgICAgQlIgPSAwOwotICAgIH0KLQotICAgIC8qIElmIHRoZSBjb2VmIHdhcyBwcmV2aW91c2x5IG5vbnplcm8sIGl0IG9ubHkgbmVlZHMgYSBjb3JyZWN0aW9uIGJpdC4KLSAgICAgKiBOT1RFOiBhIHN0cmFpZ2h0IHRyYW5zbGF0aW9uIG9mIHRoZSBzcGVjJ3MgZmlndXJlIEcuNyB3b3VsZCBzdWdnZXN0Ci0gICAgICogdGhhdCB3ZSBhbHNvIG5lZWQgdG8gdGVzdCByID4gMTUuICBCdXQgaWYgciA+IDE1LCB3ZSBjYW4gb25seSBnZXQgaGVyZQotICAgICAqIGlmIGsgPiBFT0IsIHdoaWNoIGltcGxpZXMgdGhhdCB0aGlzIGNvZWZmaWNpZW50IGlzIG5vdCAxLgotICAgICAqLwotICAgIGlmICh0ZW1wID4gMSkgewotICAgICAgLyogVGhlIGNvcnJlY3Rpb24gYml0IGlzIHRoZSBuZXh0IGJpdCBvZiB0aGUgYWJzb2x1dGUgdmFsdWUuICovCi0gICAgICBCUl9idWZmZXJbQlIrK10gPSAoY2hhcikgKHRlbXAgJiAxKTsKLSAgICAgIGNvbnRpbnVlOwotICAgIH0KLQotICAgIC8qIEVtaXQgYW55IHBlbmRpbmcgRU9CUlVOIGFuZCB0aGUgQkUgY29ycmVjdGlvbiBiaXRzICovCi0gICAgZW1pdF9lb2JydW4oZW50cm9weSk7Ci0KLSAgICAvKiBDb3VudC9lbWl0IEh1ZmZtYW4gc3ltYm9sIGZvciBydW4gbGVuZ3RoIC8gbnVtYmVyIG9mIGJpdHMgKi8KLSAgICBlbWl0X2FjX3N5bWJvbChlbnRyb3B5LCBlbnRyb3B5LT5hY190Ymxfbm8sIChyIDw8IDQpICsgMSk7Ci0KLSAgICAvKiBFbWl0IG91dHB1dCBiaXQgZm9yIG5ld2x5LW5vbnplcm8gY29lZiAqLwotICAgIHRlbXAgPSAoKCpibG9jaylbbmF0dXJhbF9vcmRlcltrXV0gPCAwKSA/IDAgOiAxOwotICAgIGVtaXRfYml0c19lKGVudHJvcHksICh1bnNpZ25lZCBpbnQpIHRlbXAsIDEpOwotCi0gICAgLyogRW1pdCBidWZmZXJlZCBjb3JyZWN0aW9uIGJpdHMgdGhhdCBtdXN0IGJlIGFzc29jaWF0ZWQgd2l0aCB0aGlzIGNvZGUgKi8KLSAgICBlbWl0X2J1ZmZlcmVkX2JpdHMoZW50cm9weSwgQlJfYnVmZmVyLCBCUik7Ci0gICAgQlJfYnVmZmVyID0gZW50cm9weS0+Yml0X2J1ZmZlcjsgLyogQkUgYml0cyBhcmUgZ29uZSBub3cgKi8KLSAgICBCUiA9IDA7Ci0gICAgciA9IDA7CQkJLyogcmVzZXQgemVybyBydW4gbGVuZ3RoICovCi0gIH0KLQotICBpZiAociA+IDAgfHwgQlIgPiAwKSB7CS8qIElmIHRoZXJlIGFyZSB0cmFpbGluZyB6ZXJvZXMsICovCi0gICAgZW50cm9weS0+RU9CUlVOKys7CQkvKiBjb3VudCBhbiBFT0IgKi8KLSAgICBlbnRyb3B5LT5CRSArPSBCUjsJCS8qIGNvbmNhdCBteSBjb3JyZWN0aW9uIGJpdHMgdG8gb2xkZXIgb25lcyAqLwotICAgIC8qIFdlIGZvcmNlIG91dCB0aGUgRU9CIGlmIHdlIHJpc2sgZWl0aGVyOgotICAgICAqIDEuIG92ZXJmbG93IG9mIHRoZSBFT0IgY291bnRlcjsKLSAgICAgKiAyLiBvdmVyZmxvdyBvZiB0aGUgY29ycmVjdGlvbiBiaXQgYnVmZmVyIGR1cmluZyB0aGUgbmV4dCBNQ1UuCi0gICAgICovCi0gICAgaWYgKGVudHJvcHktPkVPQlJVTiA9PSAweDdGRkYgfHwgZW50cm9weS0+QkUgPiAoTUFYX0NPUlJfQklUUy1EQ1RTSVpFMisxKSkKLSAgICAgIGVtaXRfZW9icnVuKGVudHJvcHkpOwotICB9Ci0KLSAgY2luZm8tPmRlc3QtPm5leHRfb3V0cHV0X2J5dGUgPSBlbnRyb3B5LT5uZXh0X291dHB1dF9ieXRlOwotICBjaW5mby0+ZGVzdC0+ZnJlZV9pbl9idWZmZXIgPSBlbnRyb3B5LT5mcmVlX2luX2J1ZmZlcjsKLQotICAvKiBVcGRhdGUgcmVzdGFydC1pbnRlcnZhbCBzdGF0ZSB0b28gKi8KLSAgaWYgKGNpbmZvLT5yZXN0YXJ0X2ludGVydmFsKSB7Ci0gICAgaWYgKGVudHJvcHktPnJlc3RhcnRzX3RvX2dvID09IDApIHsKLSAgICAgIGVudHJvcHktPnJlc3RhcnRzX3RvX2dvID0gY2luZm8tPnJlc3RhcnRfaW50ZXJ2YWw7Ci0gICAgICBlbnRyb3B5LT5uZXh0X3Jlc3RhcnRfbnVtKys7Ci0gICAgICBlbnRyb3B5LT5uZXh0X3Jlc3RhcnRfbnVtICY9IDc7Ci0gICAgfQotICAgIGVudHJvcHktPnJlc3RhcnRzX3RvX2dvLS07Ci0gIH0KLQotICByZXR1cm4gVFJVRTsKLX0KLQotCi0vKiBFbmNvZGUgYSBzaW5nbGUgYmxvY2sncyB3b3J0aCBvZiBjb2VmZmljaWVudHMgKi8KLQotTE9DQUwoYm9vbGVhbikKLWVuY29kZV9vbmVfYmxvY2sgKHdvcmtpbmdfc3RhdGUgKiBzdGF0ZSwgSkNPRUZQVFIgYmxvY2ssIGludCBsYXN0X2RjX3ZhbCwKLQkJICBjX2Rlcml2ZWRfdGJsICpkY3RibCwgY19kZXJpdmVkX3RibCAqYWN0YmwpCi17Ci0gIHJlZ2lzdGVyIGludCB0ZW1wLCB0ZW1wMjsKLSAgcmVnaXN0ZXIgaW50IG5iaXRzOwotICByZWdpc3RlciBpbnQgaywgciwgaTsKLSAgaW50IFNlID0gc3RhdGUtPmNpbmZvLT5saW1fU2U7Ci0gIGNvbnN0IGludCAqIG5hdHVyYWxfb3JkZXIgPSBzdGF0ZS0+Y2luZm8tPm5hdHVyYWxfb3JkZXI7Ci0KLSAgLyogRW5jb2RlIHRoZSBEQyBjb2VmZmljaWVudCBkaWZmZXJlbmNlIHBlciBzZWN0aW9uIEYuMS4yLjEgKi8KLQotICB0ZW1wID0gdGVtcDIgPSBibG9ja1swXSAtIGxhc3RfZGNfdmFsOwotCi0gIGlmICh0ZW1wIDwgMCkgewotICAgIHRlbXAgPSAtdGVtcDsJCS8qIHRlbXAgaXMgYWJzIHZhbHVlIG9mIGlucHV0ICovCi0gICAgLyogRm9yIGEgbmVnYXRpdmUgaW5wdXQsIHdhbnQgdGVtcDIgPSBiaXR3aXNlIGNvbXBsZW1lbnQgb2YgYWJzKGlucHV0KSAqLwotICAgIC8qIFRoaXMgY29kZSBhc3N1bWVzIHdlIGFyZSBvbiBhIHR3bydzIGNvbXBsZW1lbnQgbWFjaGluZSAqLwotICAgIHRlbXAyLS07Ci0gIH0KLQotICAvKiBGaW5kIHRoZSBudW1iZXIgb2YgYml0cyBuZWVkZWQgZm9yIHRoZSBtYWduaXR1ZGUgb2YgdGhlIGNvZWZmaWNpZW50ICovCi0gIG5iaXRzID0gMDsKLSAgd2hpbGUgKHRlbXApIHsKLSAgICBuYml0cysrOwotICAgIHRlbXAgPj49IDE7Ci0gIH0KLSAgLyogQ2hlY2sgZm9yIG91dC1vZi1yYW5nZSBjb2VmZmljaWVudCB2YWx1ZXMuCi0gICAqIFNpbmNlIHdlJ3JlIGVuY29kaW5nIGEgZGlmZmVyZW5jZSwgdGhlIHJhbmdlIGxpbWl0IGlzIHR3aWNlIGFzIG11Y2guCi0gICAqLwotICBpZiAobmJpdHMgPiBNQVhfQ09FRl9CSVRTKzEpCi0gICAgRVJSRVhJVChzdGF0ZS0+Y2luZm8sIEpFUlJfQkFEX0RDVF9DT0VGKTsKLQotICAvKiBFbWl0IHRoZSBIdWZmbWFuLWNvZGVkIHN5bWJvbCBmb3IgdGhlIG51bWJlciBvZiBiaXRzICovCi0gIGlmICghIGVtaXRfYml0c19zKHN0YXRlLCBkY3RibC0+ZWh1ZmNvW25iaXRzXSwgZGN0YmwtPmVodWZzaVtuYml0c10pKQotICAgIHJldHVybiBGQUxTRTsKLQotICAvKiBFbWl0IHRoYXQgbnVtYmVyIG9mIGJpdHMgb2YgdGhlIHZhbHVlLCBpZiBwb3NpdGl2ZSwgKi8KLSAgLyogb3IgdGhlIGNvbXBsZW1lbnQgb2YgaXRzIG1hZ25pdHVkZSwgaWYgbmVnYXRpdmUuICovCi0gIGlmIChuYml0cykJCQkvKiBlbWl0X2JpdHMgcmVqZWN0cyBjYWxscyB3aXRoIHNpemUgMCAqLwotICAgIGlmICghIGVtaXRfYml0c19zKHN0YXRlLCAodW5zaWduZWQgaW50KSB0ZW1wMiwgbmJpdHMpKQotICAgICAgcmV0dXJuIEZBTFNFOwotCi0gIC8qIEVuY29kZSB0aGUgQUMgY29lZmZpY2llbnRzIHBlciBzZWN0aW9uIEYuMS4yLjIgKi8KLQotICByID0gMDsJCQkvKiByID0gcnVuIGxlbmd0aCBvZiB6ZXJvcyAqLwotCi0gIGZvciAoayA9IDE7IGsgPD0gU2U7IGsrKykgewotICAgIGlmICgodGVtcCA9IGJsb2NrW25hdHVyYWxfb3JkZXJba11dKSA9PSAwKSB7Ci0gICAgICByKys7Ci0gICAgfSBlbHNlIHsKLSAgICAgIC8qIGlmIHJ1biBsZW5ndGggPiAxNSwgbXVzdCBlbWl0IHNwZWNpYWwgcnVuLWxlbmd0aC0xNiBjb2RlcyAoMHhGMCkgKi8KLSAgICAgIHdoaWxlIChyID4gMTUpIHsKLQlpZiAoISBlbWl0X2JpdHNfcyhzdGF0ZSwgYWN0YmwtPmVodWZjb1sweEYwXSwgYWN0YmwtPmVodWZzaVsweEYwXSkpCi0JICByZXR1cm4gRkFMU0U7Ci0JciAtPSAxNjsKLSAgICAgIH0KLQotICAgICAgdGVtcDIgPSB0ZW1wOwotICAgICAgaWYgKHRlbXAgPCAwKSB7Ci0JdGVtcCA9IC10ZW1wOwkJLyogdGVtcCBpcyBhYnMgdmFsdWUgb2YgaW5wdXQgKi8KLQkvKiBUaGlzIGNvZGUgYXNzdW1lcyB3ZSBhcmUgb24gYSB0d28ncyBjb21wbGVtZW50IG1hY2hpbmUgKi8KLQl0ZW1wMi0tOwotICAgICAgfQotCi0gICAgICAvKiBGaW5kIHRoZSBudW1iZXIgb2YgYml0cyBuZWVkZWQgZm9yIHRoZSBtYWduaXR1ZGUgb2YgdGhlIGNvZWZmaWNpZW50ICovCi0gICAgICBuYml0cyA9IDE7CQkvKiB0aGVyZSBtdXN0IGJlIGF0IGxlYXN0IG9uZSAxIGJpdCAqLwotICAgICAgd2hpbGUgKCh0ZW1wID4+PSAxKSkKLQluYml0cysrOwotICAgICAgLyogQ2hlY2sgZm9yIG91dC1vZi1yYW5nZSBjb2VmZmljaWVudCB2YWx1ZXMgKi8KLSAgICAgIGlmIChuYml0cyA+IE1BWF9DT0VGX0JJVFMpCi0JRVJSRVhJVChzdGF0ZS0+Y2luZm8sIEpFUlJfQkFEX0RDVF9DT0VGKTsKLQotICAgICAgLyogRW1pdCBIdWZmbWFuIHN5bWJvbCBmb3IgcnVuIGxlbmd0aCAvIG51bWJlciBvZiBiaXRzICovCi0gICAgICBpID0gKHIgPDwgNCkgKyBuYml0czsKLSAgICAgIGlmICghIGVtaXRfYml0c19zKHN0YXRlLCBhY3RibC0+ZWh1ZmNvW2ldLCBhY3RibC0+ZWh1ZnNpW2ldKSkKLQlyZXR1cm4gRkFMU0U7Ci0KLSAgICAgIC8qIEVtaXQgdGhhdCBudW1iZXIgb2YgYml0cyBvZiB0aGUgdmFsdWUsIGlmIHBvc2l0aXZlLCAqLwotICAgICAgLyogb3IgdGhlIGNvbXBsZW1lbnQgb2YgaXRzIG1hZ25pdHVkZSwgaWYgbmVnYXRpdmUuICovCi0gICAgICBpZiAoISBlbWl0X2JpdHNfcyhzdGF0ZSwgKHVuc2lnbmVkIGludCkgdGVtcDIsIG5iaXRzKSkKLQlyZXR1cm4gRkFMU0U7Ci0KLSAgICAgIHIgPSAwOwotICAgIH0KLSAgfQotCi0gIC8qIElmIHRoZSBsYXN0IGNvZWYocykgd2VyZSB6ZXJvLCBlbWl0IGFuIGVuZC1vZi1ibG9jayBjb2RlICovCi0gIGlmIChyID4gMCkKLSAgICBpZiAoISBlbWl0X2JpdHNfcyhzdGF0ZSwgYWN0YmwtPmVodWZjb1swXSwgYWN0YmwtPmVodWZzaVswXSkpCi0gICAgICByZXR1cm4gRkFMU0U7Ci0KLSAgcmV0dXJuIFRSVUU7Ci19Ci0KLQogLyoKICAqIEVuY29kZSBhbmQgb3V0cHV0IG9uZSBNQ1UncyB3b3J0aCBvZiBIdWZmbWFuLWNvbXByZXNzZWQgY29lZmZpY2llbnRzLgogICovCkBAIC0xMDI5LDcgKzYyNCw3IEBACiAgIC8qIEVtaXQgcmVzdGFydCBtYXJrZXIgaWYgbmVlZGVkICovCiAgIGlmIChjaW5mby0+cmVzdGFydF9pbnRlcnZhbCkgewogICAgIGlmIChlbnRyb3B5LT5yZXN0YXJ0c190b19nbyA9PSAwKQotICAgICAgaWYgKCEgZW1pdF9yZXN0YXJ0X3MoJnN0YXRlLCBlbnRyb3B5LT5uZXh0X3Jlc3RhcnRfbnVtKSkKKyAgICAgIGlmICghIGVtaXRfcmVzdGFydCgmc3RhdGUsIGVudHJvcHktPm5leHRfcmVzdGFydF9udW0pKQogCXJldHVybiBGQUxTRTsKICAgfQogCkBAIC0xMDc1LDMyICs2NzAsMjAgQEAKICAgaHVmZl9lbnRyb3B5X3B0ciBlbnRyb3B5ID0gKGh1ZmZfZW50cm9weV9wdHIpIGNpbmZvLT5lbnRyb3B5OwogICB3b3JraW5nX3N0YXRlIHN0YXRlOwogCi0gIGlmIChjaW5mby0+cHJvZ3Jlc3NpdmVfbW9kZSkgewotICAgIGVudHJvcHktPm5leHRfb3V0cHV0X2J5dGUgPSBjaW5mby0+ZGVzdC0+bmV4dF9vdXRwdXRfYnl0ZTsKLSAgICBlbnRyb3B5LT5mcmVlX2luX2J1ZmZlciA9IGNpbmZvLT5kZXN0LT5mcmVlX2luX2J1ZmZlcjsKKyAgLyogTG9hZCB1cCB3b3JraW5nIHN0YXRlIC4uLiBmbHVzaF9iaXRzIG5lZWRzIGl0ICovCisgIHN0YXRlLm5leHRfb3V0cHV0X2J5dGUgPSBjaW5mby0+ZGVzdC0+bmV4dF9vdXRwdXRfYnl0ZTsKKyAgc3RhdGUuZnJlZV9pbl9idWZmZXIgPSBjaW5mby0+ZGVzdC0+ZnJlZV9pbl9idWZmZXI7CisgIEFTU0lHTl9TVEFURShzdGF0ZS5jdXIsIGVudHJvcHktPnNhdmVkKTsKKyAgc3RhdGUuY2luZm8gPSBjaW5mbzsKIAotICAgIC8qIEZsdXNoIG91dCBhbnkgYnVmZmVyZWQgZGF0YSAqLwotICAgIGVtaXRfZW9icnVuKGVudHJvcHkpOwotICAgIGZsdXNoX2JpdHNfZShlbnRyb3B5KTsKKyAgLyogRmx1c2ggb3V0IHRoZSBsYXN0IGRhdGEgKi8KKyAgaWYgKCEgZmx1c2hfYml0cygmc3RhdGUpKQorICAgIEVSUkVYSVQoY2luZm8sIEpFUlJfQ0FOVF9TVVNQRU5EKTsKIAotICAgIGNpbmZvLT5kZXN0LT5uZXh0X291dHB1dF9ieXRlID0gZW50cm9weS0+bmV4dF9vdXRwdXRfYnl0ZTsKLSAgICBjaW5mby0+ZGVzdC0+ZnJlZV9pbl9idWZmZXIgPSBlbnRyb3B5LT5mcmVlX2luX2J1ZmZlcjsKLSAgfSBlbHNlIHsKLSAgICAvKiBMb2FkIHVwIHdvcmtpbmcgc3RhdGUgLi4uIGZsdXNoX2JpdHMgbmVlZHMgaXQgKi8KLSAgICBzdGF0ZS5uZXh0X291dHB1dF9ieXRlID0gY2luZm8tPmRlc3QtPm5leHRfb3V0cHV0X2J5dGU7Ci0gICAgc3RhdGUuZnJlZV9pbl9idWZmZXIgPSBjaW5mby0+ZGVzdC0+ZnJlZV9pbl9idWZmZXI7Ci0gICAgQVNTSUdOX1NUQVRFKHN0YXRlLmN1ciwgZW50cm9weS0+c2F2ZWQpOwotICAgIHN0YXRlLmNpbmZvID0gY2luZm87Ci0KLSAgICAvKiBGbHVzaCBvdXQgdGhlIGxhc3QgZGF0YSAqLwotICAgIGlmICghIGZsdXNoX2JpdHNfcygmc3RhdGUpKQotICAgICAgRVJSRVhJVChjaW5mbywgSkVSUl9DQU5UX1NVU1BFTkQpOwotCi0gICAgLyogVXBkYXRlIHN0YXRlICovCi0gICAgY2luZm8tPmRlc3QtPm5leHRfb3V0cHV0X2J5dGUgPSBzdGF0ZS5uZXh0X291dHB1dF9ieXRlOwotICAgIGNpbmZvLT5kZXN0LT5mcmVlX2luX2J1ZmZlciA9IHN0YXRlLmZyZWVfaW5fYnVmZmVyOwotICAgIEFTU0lHTl9TVEFURShlbnRyb3B5LT5zYXZlZCwgc3RhdGUuY3VyKTsKLSAgfQorICAvKiBVcGRhdGUgc3RhdGUgKi8KKyAgY2luZm8tPmRlc3QtPm5leHRfb3V0cHV0X2J5dGUgPSBzdGF0ZS5uZXh0X291dHB1dF9ieXRlOworICBjaW5mby0+ZGVzdC0+ZnJlZV9pbl9idWZmZXIgPSBzdGF0ZS5mcmVlX2luX2J1ZmZlcjsKKyAgQVNTSUdOX1NUQVRFKGVudHJvcHktPnNhdmVkLCBzdGF0ZS5jdXIpOwogfQogCiAKQEAgLTExMTUsNiArNjk4LDggQEAKICAqIHRoZSBjb21wcmVzc2VkIGRhdGEuCiAgKi8KIAorI2lmZGVmIEVOVFJPUFlfT1BUX1NVUFBPUlRFRAorCiAKIC8qIFByb2Nlc3MgYSBzaW5nbGUgYmxvY2sncyB3b3J0aCBvZiBjb2VmZmljaWVudHMgKi8KIApAQCAtMTEyNSw4ICs3MTAsNiBAQAogICByZWdpc3RlciBpbnQgdGVtcDsKICAgcmVnaXN0ZXIgaW50IG5iaXRzOwogICByZWdpc3RlciBpbnQgaywgcjsKLSAgaW50IFNlID0gY2luZm8tPmxpbV9TZTsKLSAgY29uc3QgaW50ICogbmF0dXJhbF9vcmRlciA9IGNpbmZvLT5uYXR1cmFsX29yZGVyOwogICAKICAgLyogRW5jb2RlIHRoZSBEQyBjb2VmZmljaWVudCBkaWZmZXJlbmNlIHBlciBzZWN0aW9uIEYuMS4yLjEgKi8KICAgCkBAIC0xMTUzLDggKzczNiw4IEBACiAgIAogICByID0gMDsJCQkvKiByID0gcnVuIGxlbmd0aCBvZiB6ZXJvcyAqLwogICAKLSAgZm9yIChrID0gMTsgayA8PSBTZTsgaysrKSB7Ci0gICAgaWYgKCh0ZW1wID0gYmxvY2tbbmF0dXJhbF9vcmRlcltrXV0pID09IDApIHsKKyAgZm9yIChrID0gMTsgayA8IERDVFNJWkUyOyBrKyspIHsKKyAgICBpZiAoKHRlbXAgPSBibG9ja1tqcGVnX25hdHVyYWxfb3JkZXJba11dKSA9PSAwKSB7CiAgICAgICByKys7CiAgICAgfSBlbHNlIHsKICAgICAgIC8qIGlmIHJ1biBsZW5ndGggPiAxNSwgbXVzdCBlbWl0IHNwZWNpYWwgcnVuLWxlbmd0aC0xNiBjb2RlcyAoMHhGMCkgKi8KQEAgLTEyMjcsNiArODEwLDcgQEAKIAogLyoKICAqIEdlbmVyYXRlIHRoZSBiZXN0IEh1ZmZtYW4gY29kZSB0YWJsZSBmb3IgdGhlIGdpdmVuIGNvdW50cywgZmlsbCBodGJsLgorICogTm90ZSB0aGlzIGlzIGFsc28gdXNlZCBieSBqY3BodWZmLmMuCiAgKgogICogVGhlIEpQRUcgc3RhbmRhcmQgcmVxdWlyZXMgdGhhdCBubyBzeW1ib2wgYmUgYXNzaWduZWQgYSBjb2Rld29yZCBvZiBhbGwKICAqIG9uZSBiaXRzIChzbyB0aGF0IHBhZGRpbmcgYml0cyBhZGRlZCBhdCB0aGUgZW5kIG9mIGEgY29tcHJlc3NlZCBzZWdtZW50CkBAIC0xMjUyLDcgKzgzNiw3IEBACiAgKiBTbyB0aGUgZXh0cmEgY29tcGxleGl0eSBvZiBhbiBvcHRpbWFsIGFsZ29yaXRobSBkb2Vzbid0IHNlZW0gd29ydGh3aGlsZS4KICAqLwogCi1MT0NBTCh2b2lkKQorR0xPQkFMKHZvaWQpCiBqcGVnX2dlbl9vcHRpbWFsX3RhYmxlIChqX2NvbXByZXNzX3B0ciBjaW5mbywgSkhVRkZfVEJMICogaHRibCwgbG9uZyBmcmVxW10pCiB7CiAjZGVmaW5lIE1BWF9DTEVOIDMyCQkvKiBhc3N1bWVkIG1heGltdW0gaW5pdGlhbCBjb2RlIGxlbmd0aCAqLwpAQCAtMTM5Nyw3ICs5ODEsNyBAQAogZmluaXNoX3Bhc3NfZ2F0aGVyIChqX2NvbXByZXNzX3B0ciBjaW5mbykKIHsKICAgaHVmZl9lbnRyb3B5X3B0ciBlbnRyb3B5ID0gKGh1ZmZfZW50cm9weV9wdHIpIGNpbmZvLT5lbnRyb3B5OwotICBpbnQgY2ksIHRibDsKKyAgaW50IGNpLCBkY3RibCwgYWN0Ymw7CiAgIGpwZWdfY29tcG9uZW50X2luZm8gKiBjb21wcHRyOwogICBKSFVGRl9UQkwgKipodGJscHRyOwogICBib29sZWFuIGRpZF9kY1tOVU1fSFVGRl9UQkxTXTsKQEAgLTE0MDYsMTQ3ICs5OTAsMzIgQEAKICAgLyogSXQncyBpbXBvcnRhbnQgbm90IHRvIGFwcGx5IGpwZWdfZ2VuX29wdGltYWxfdGFibGUgbW9yZSB0aGFuIG9uY2UKICAgICogcGVyIHRhYmxlLCBiZWNhdXNlIGl0IGNsb2JiZXJzIHRoZSBpbnB1dCBmcmVxdWVuY3kgY291bnRzIQogICAgKi8KLSAgaWYgKGNpbmZvLT5wcm9ncmVzc2l2ZV9tb2RlKQotICAgIC8qIEZsdXNoIG91dCBidWZmZXJlZCBkYXRhIChhbGwgd2UgY2FyZSBhYm91dCBpcyBjb3VudGluZyB0aGUgRU9CIHN5bWJvbCkgKi8KLSAgICBlbWl0X2VvYnJ1bihlbnRyb3B5KTsKLQogICBNRU1aRVJPKGRpZF9kYywgU0laRU9GKGRpZF9kYykpOwogICBNRU1aRVJPKGRpZF9hYywgU0laRU9GKGRpZF9hYykpOwogCiAgIGZvciAoY2kgPSAwOyBjaSA8IGNpbmZvLT5jb21wc19pbl9zY2FuOyBjaSsrKSB7CiAgICAgY29tcHB0ciA9IGNpbmZvLT5jdXJfY29tcF9pbmZvW2NpXTsKLSAgICAvKiBEQyBuZWVkcyBubyB0YWJsZSBmb3IgcmVmaW5lbWVudCBzY2FuICovCi0gICAgaWYgKGNpbmZvLT5TcyA9PSAwICYmIGNpbmZvLT5BaCA9PSAwKSB7Ci0gICAgICB0YmwgPSBjb21wcHRyLT5kY190Ymxfbm87Ci0gICAgICBpZiAoISBkaWRfZGNbdGJsXSkgewotCWh0YmxwdHIgPSAmIGNpbmZvLT5kY19odWZmX3RibF9wdHJzW3RibF07Ci0JaWYgKCpodGJscHRyID09IE5VTEwpCi0JICAqaHRibHB0ciA9IGpwZWdfYWxsb2NfaHVmZl90YWJsZSgoal9jb21tb25fcHRyKSBjaW5mbyk7Ci0JanBlZ19nZW5fb3B0aW1hbF90YWJsZShjaW5mbywgKmh0YmxwdHIsIGVudHJvcHktPmRjX2NvdW50X3B0cnNbdGJsXSk7Ci0JZGlkX2RjW3RibF0gPSBUUlVFOwotICAgICAgfQorICAgIGRjdGJsID0gY29tcHB0ci0+ZGNfdGJsX25vOworICAgIGFjdGJsID0gY29tcHB0ci0+YWNfdGJsX25vOworICAgIGlmICghIGRpZF9kY1tkY3RibF0pIHsKKyAgICAgIGh0YmxwdHIgPSAmIGNpbmZvLT5kY19odWZmX3RibF9wdHJzW2RjdGJsXTsKKyAgICAgIGlmICgqaHRibHB0ciA9PSBOVUxMKQorCSpodGJscHRyID0ganBlZ19hbGxvY19odWZmX3RhYmxlKChqX2NvbW1vbl9wdHIpIGNpbmZvKTsKKyAgICAgIGpwZWdfZ2VuX29wdGltYWxfdGFibGUoY2luZm8sICpodGJscHRyLCBlbnRyb3B5LT5kY19jb3VudF9wdHJzW2RjdGJsXSk7CisgICAgICBkaWRfZGNbZGN0YmxdID0gVFJVRTsKICAgICB9Ci0gICAgLyogQUMgbmVlZHMgbm8gdGFibGUgd2hlbiBub3QgcHJlc2VudCAqLwotICAgIGlmIChjaW5mby0+U2UpIHsKLSAgICAgIHRibCA9IGNvbXBwdHItPmFjX3RibF9ubzsKLSAgICAgIGlmICghIGRpZF9hY1t0YmxdKSB7Ci0JaHRibHB0ciA9ICYgY2luZm8tPmFjX2h1ZmZfdGJsX3B0cnNbdGJsXTsKLQlpZiAoKmh0YmxwdHIgPT0gTlVMTCkKLQkgICpodGJscHRyID0ganBlZ19hbGxvY19odWZmX3RhYmxlKChqX2NvbW1vbl9wdHIpIGNpbmZvKTsKLQlqcGVnX2dlbl9vcHRpbWFsX3RhYmxlKGNpbmZvLCAqaHRibHB0ciwgZW50cm9weS0+YWNfY291bnRfcHRyc1t0YmxdKTsKLQlkaWRfYWNbdGJsXSA9IFRSVUU7Ci0gICAgICB9CisgICAgaWYgKCEgZGlkX2FjW2FjdGJsXSkgeworICAgICAgaHRibHB0ciA9ICYgY2luZm8tPmFjX2h1ZmZfdGJsX3B0cnNbYWN0YmxdOworICAgICAgaWYgKCpodGJscHRyID09IE5VTEwpCisJKmh0YmxwdHIgPSBqcGVnX2FsbG9jX2h1ZmZfdGFibGUoKGpfY29tbW9uX3B0cikgY2luZm8pOworICAgICAganBlZ19nZW5fb3B0aW1hbF90YWJsZShjaW5mbywgKmh0YmxwdHIsIGVudHJvcHktPmFjX2NvdW50X3B0cnNbYWN0YmxdKTsKKyAgICAgIGRpZF9hY1thY3RibF0gPSBUUlVFOwogICAgIH0KICAgfQogfQogCiAKLS8qCi0gKiBJbml0aWFsaXplIGZvciBhIEh1ZmZtYW4tY29tcHJlc3NlZCBzY2FuLgotICogSWYgZ2F0aGVyX3N0YXRpc3RpY3MgaXMgVFJVRSwgd2UgZG8gbm90IG91dHB1dCBhbnl0aGluZyBkdXJpbmcgdGhlIHNjYW4sCi0gKiBqdXN0IGNvdW50IHRoZSBIdWZmbWFuIHN5bWJvbHMgdXNlZCBhbmQgZ2VuZXJhdGUgSHVmZm1hbiBjb2RlIHRhYmxlcy4KLSAqLwotCi1NRVRIT0RERUYodm9pZCkKLXN0YXJ0X3Bhc3NfaHVmZiAoal9jb21wcmVzc19wdHIgY2luZm8sIGJvb2xlYW4gZ2F0aGVyX3N0YXRpc3RpY3MpCi17Ci0gIGh1ZmZfZW50cm9weV9wdHIgZW50cm9weSA9IChodWZmX2VudHJvcHlfcHRyKSBjaW5mby0+ZW50cm9weTsKLSAgaW50IGNpLCB0Ymw7Ci0gIGpwZWdfY29tcG9uZW50X2luZm8gKiBjb21wcHRyOwotCi0gIGlmIChnYXRoZXJfc3RhdGlzdGljcykKLSAgICBlbnRyb3B5LT5wdWIuZmluaXNoX3Bhc3MgPSBmaW5pc2hfcGFzc19nYXRoZXI7Ci0gIGVsc2UKLSAgICBlbnRyb3B5LT5wdWIuZmluaXNoX3Bhc3MgPSBmaW5pc2hfcGFzc19odWZmOwotCi0gIGlmIChjaW5mby0+cHJvZ3Jlc3NpdmVfbW9kZSkgewotICAgIGVudHJvcHktPmNpbmZvID0gY2luZm87Ci0gICAgZW50cm9weS0+Z2F0aGVyX3N0YXRpc3RpY3MgPSBnYXRoZXJfc3RhdGlzdGljczsKLQotICAgIC8qIFdlIGFzc3VtZSBqY21hc3Rlci5jIGFscmVhZHkgdmFsaWRhdGVkIHRoZSBzY2FuIHBhcmFtZXRlcnMuICovCi0KLSAgICAvKiBTZWxlY3QgZXhlY3V0aW9uIHJvdXRpbmUgKi8KLSAgICBpZiAoY2luZm8tPkFoID09IDApIHsKLSAgICAgIGlmIChjaW5mby0+U3MgPT0gMCkKLQllbnRyb3B5LT5wdWIuZW5jb2RlX21jdSA9IGVuY29kZV9tY3VfRENfZmlyc3Q7Ci0gICAgICBlbHNlCi0JZW50cm9weS0+cHViLmVuY29kZV9tY3UgPSBlbmNvZGVfbWN1X0FDX2ZpcnN0OwotICAgIH0gZWxzZSB7Ci0gICAgICBpZiAoY2luZm8tPlNzID09IDApCi0JZW50cm9weS0+cHViLmVuY29kZV9tY3UgPSBlbmNvZGVfbWN1X0RDX3JlZmluZTsKLSAgICAgIGVsc2UgewotCWVudHJvcHktPnB1Yi5lbmNvZGVfbWN1ID0gZW5jb2RlX21jdV9BQ19yZWZpbmU7Ci0JLyogQUMgcmVmaW5lbWVudCBuZWVkcyBhIGNvcnJlY3Rpb24gYml0IGJ1ZmZlciAqLwotCWlmIChlbnRyb3B5LT5iaXRfYnVmZmVyID09IE5VTEwpCi0JICBlbnRyb3B5LT5iaXRfYnVmZmVyID0gKGNoYXIgKikKLQkgICAgKCpjaW5mby0+bWVtLT5hbGxvY19zbWFsbCkgKChqX2NvbW1vbl9wdHIpIGNpbmZvLCBKUE9PTF9JTUFHRSwKLQkJCQkJTUFYX0NPUlJfQklUUyAqIFNJWkVPRihjaGFyKSk7Ci0gICAgICB9Ci0gICAgfQotCi0gICAgLyogSW5pdGlhbGl6ZSBBQyBzdHVmZiAqLwotICAgIGVudHJvcHktPmFjX3RibF9ubyA9IGNpbmZvLT5jdXJfY29tcF9pbmZvWzBdLT5hY190Ymxfbm87Ci0gICAgZW50cm9weS0+RU9CUlVOID0gMDsKLSAgICBlbnRyb3B5LT5CRSA9IDA7Ci0gIH0gZWxzZSB7Ci0gICAgaWYgKGdhdGhlcl9zdGF0aXN0aWNzKQotICAgICAgZW50cm9weS0+cHViLmVuY29kZV9tY3UgPSBlbmNvZGVfbWN1X2dhdGhlcjsKLSAgICBlbHNlCi0gICAgICBlbnRyb3B5LT5wdWIuZW5jb2RlX21jdSA9IGVuY29kZV9tY3VfaHVmZjsKLSAgfQotCi0gIGZvciAoY2kgPSAwOyBjaSA8IGNpbmZvLT5jb21wc19pbl9zY2FuOyBjaSsrKSB7Ci0gICAgY29tcHB0ciA9IGNpbmZvLT5jdXJfY29tcF9pbmZvW2NpXTsKLSAgICAvKiBEQyBuZWVkcyBubyB0YWJsZSBmb3IgcmVmaW5lbWVudCBzY2FuICovCi0gICAgaWYgKGNpbmZvLT5TcyA9PSAwICYmIGNpbmZvLT5BaCA9PSAwKSB7Ci0gICAgICB0YmwgPSBjb21wcHRyLT5kY190Ymxfbm87Ci0gICAgICBpZiAoZ2F0aGVyX3N0YXRpc3RpY3MpIHsKLQkvKiBDaGVjayBmb3IgaW52YWxpZCB0YWJsZSBpbmRleCAqLwotCS8qIChtYWtlX2NfZGVyaXZlZF90YmwgZG9lcyB0aGlzIGluIHRoZSBvdGhlciBwYXRoKSAqLwotCWlmICh0YmwgPCAwIHx8IHRibCA+PSBOVU1fSFVGRl9UQkxTKQotCSAgRVJSRVhJVDEoY2luZm8sIEpFUlJfTk9fSFVGRl9UQUJMRSwgdGJsKTsKLQkvKiBBbGxvY2F0ZSBhbmQgemVybyB0aGUgc3RhdGlzdGljcyB0YWJsZXMgKi8KLQkvKiBOb3RlIHRoYXQganBlZ19nZW5fb3B0aW1hbF90YWJsZSBleHBlY3RzIDI1NyBlbnRyaWVzIGluIGVhY2ggdGFibGUhICovCi0JaWYgKGVudHJvcHktPmRjX2NvdW50X3B0cnNbdGJsXSA9PSBOVUxMKQotCSAgZW50cm9weS0+ZGNfY291bnRfcHRyc1t0YmxdID0gKGxvbmcgKikKLQkgICAgKCpjaW5mby0+bWVtLT5hbGxvY19zbWFsbCkgKChqX2NvbW1vbl9wdHIpIGNpbmZvLCBKUE9PTF9JTUFHRSwKLQkJCQkJMjU3ICogU0laRU9GKGxvbmcpKTsKLQlNRU1aRVJPKGVudHJvcHktPmRjX2NvdW50X3B0cnNbdGJsXSwgMjU3ICogU0laRU9GKGxvbmcpKTsKLSAgICAgIH0gZWxzZSB7Ci0JLyogQ29tcHV0ZSBkZXJpdmVkIHZhbHVlcyBmb3IgSHVmZm1hbiB0YWJsZXMgKi8KLQkvKiBXZSBtYXkgZG8gdGhpcyBtb3JlIHRoYW4gb25jZSBmb3IgYSB0YWJsZSwgYnV0IGl0J3Mgbm90IGV4cGVuc2l2ZSAqLwotCWpwZWdfbWFrZV9jX2Rlcml2ZWRfdGJsKGNpbmZvLCBUUlVFLCB0YmwsCi0JCQkJJiBlbnRyb3B5LT5kY19kZXJpdmVkX3RibHNbdGJsXSk7Ci0gICAgICB9Ci0gICAgICAvKiBJbml0aWFsaXplIERDIHByZWRpY3Rpb25zIHRvIDAgKi8KLSAgICAgIGVudHJvcHktPnNhdmVkLmxhc3RfZGNfdmFsW2NpXSA9IDA7Ci0gICAgfQotICAgIC8qIEFDIG5lZWRzIG5vIHRhYmxlIHdoZW4gbm90IHByZXNlbnQgKi8KLSAgICBpZiAoY2luZm8tPlNlKSB7Ci0gICAgICB0YmwgPSBjb21wcHRyLT5hY190Ymxfbm87Ci0gICAgICBpZiAoZ2F0aGVyX3N0YXRpc3RpY3MpIHsKLQlpZiAodGJsIDwgMCB8fCB0YmwgPj0gTlVNX0hVRkZfVEJMUykKLQkgIEVSUkVYSVQxKGNpbmZvLCBKRVJSX05PX0hVRkZfVEFCTEUsIHRibCk7Ci0JaWYgKGVudHJvcHktPmFjX2NvdW50X3B0cnNbdGJsXSA9PSBOVUxMKQotCSAgZW50cm9weS0+YWNfY291bnRfcHRyc1t0YmxdID0gKGxvbmcgKikKLQkgICAgKCpjaW5mby0+bWVtLT5hbGxvY19zbWFsbCkgKChqX2NvbW1vbl9wdHIpIGNpbmZvLCBKUE9PTF9JTUFHRSwKLQkJCQkJMjU3ICogU0laRU9GKGxvbmcpKTsKLQlNRU1aRVJPKGVudHJvcHktPmFjX2NvdW50X3B0cnNbdGJsXSwgMjU3ICogU0laRU9GKGxvbmcpKTsKLSAgICAgIH0gZWxzZSB7Ci0JanBlZ19tYWtlX2NfZGVyaXZlZF90YmwoY2luZm8sIEZBTFNFLCB0YmwsCi0JCQkJJiBlbnRyb3B5LT5hY19kZXJpdmVkX3RibHNbdGJsXSk7Ci0gICAgICB9Ci0gICAgfQotICB9Ci0KLSAgLyogSW5pdGlhbGl6ZSBiaXQgYnVmZmVyIHRvIGVtcHR5ICovCi0gIGVudHJvcHktPnNhdmVkLnB1dF9idWZmZXIgPSAwOwotICBlbnRyb3B5LT5zYXZlZC5wdXRfYml0cyA9IDA7Ci0KLSAgLyogSW5pdGlhbGl6ZSByZXN0YXJ0IHN0dWZmICovCi0gIGVudHJvcHktPnJlc3RhcnRzX3RvX2dvID0gY2luZm8tPnJlc3RhcnRfaW50ZXJ2YWw7Ci0gIGVudHJvcHktPm5leHRfcmVzdGFydF9udW0gPSAwOwotfQorI2VuZGlmIC8qIEVOVFJPUFlfT1BUX1NVUFBPUlRFRCAqLwogCiAKIC8qCkBAIC0xNTY4LDkgKzEwMzcsOCBAQAogICAvKiBNYXJrIHRhYmxlcyB1bmFsbG9jYXRlZCAqLwogICBmb3IgKGkgPSAwOyBpIDwgTlVNX0hVRkZfVEJMUzsgaSsrKSB7CiAgICAgZW50cm9weS0+ZGNfZGVyaXZlZF90YmxzW2ldID0gZW50cm9weS0+YWNfZGVyaXZlZF90YmxzW2ldID0gTlVMTDsKKyNpZmRlZiBFTlRST1BZX09QVF9TVVBQT1JURUQKICAgICBlbnRyb3B5LT5kY19jb3VudF9wdHJzW2ldID0gZW50cm9weS0+YWNfY291bnRfcHRyc1tpXSA9IE5VTEw7CisjZW5kaWYKICAgfQotCi0gIGlmIChjaW5mby0+cHJvZ3Jlc3NpdmVfbW9kZSkKLSAgICBlbnRyb3B5LT5iaXRfYnVmZmVyID0gTlVMTDsJLyogbmVlZGVkIG9ubHkgaW4gQUMgcmVmaW5lbWVudCBzY2FuICovCiB9CmRpZmYgLS1naXQgYS9qY2h1ZmYuaCBiL2pjaHVmZi5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmE5NTk5ZmMKLS0tIC9kZXYvbnVsbAorKysgYi9qY2h1ZmYuaApAQCAtMCwwICsxLDQ3IEBACisvKgorICogamNodWZmLmgKKyAqCisgKiBDb3B5cmlnaHQgKEMpIDE5OTEtMTk5NywgVGhvbWFzIEcuIExhbmUuCisgKiBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgSW5kZXBlbmRlbnQgSlBFRyBHcm91cCdzIHNvZnR3YXJlLgorICogRm9yIGNvbmRpdGlvbnMgb2YgZGlzdHJpYnV0aW9uIGFuZCB1c2UsIHNlZSB0aGUgYWNjb21wYW55aW5nIFJFQURNRSBmaWxlLgorICoKKyAqIFRoaXMgZmlsZSBjb250YWlucyBkZWNsYXJhdGlvbnMgZm9yIEh1ZmZtYW4gZW50cm9weSBlbmNvZGluZyByb3V0aW5lcworICogdGhhdCBhcmUgc2hhcmVkIGJldHdlZW4gdGhlIHNlcXVlbnRpYWwgZW5jb2RlciAoamNodWZmLmMpIGFuZCB0aGUKKyAqIHByb2dyZXNzaXZlIGVuY29kZXIgKGpjcGh1ZmYuYykuICBObyBvdGhlciBtb2R1bGVzIG5lZWQgdG8gc2VlIHRoZXNlLgorICovCisKKy8qIFRoZSBsZWdhbCByYW5nZSBvZiBhIERDVCBjb2VmZmljaWVudCBpcworICogIC0xMDI0IC4uICsxMDIzICBmb3IgOC1iaXQgZGF0YTsKKyAqIC0xNjM4NCAuLiArMTYzODMgZm9yIDEyLWJpdCBkYXRhLgorICogSGVuY2UgdGhlIG1hZ25pdHVkZSBzaG91bGQgYWx3YXlzIGZpdCBpbiAxMCBvciAxNCBiaXRzIHJlc3BlY3RpdmVseS4KKyAqLworCisjaWYgQklUU19JTl9KU0FNUExFID09IDgKKyNkZWZpbmUgTUFYX0NPRUZfQklUUyAxMAorI2Vsc2UKKyNkZWZpbmUgTUFYX0NPRUZfQklUUyAxNAorI2VuZGlmCisKKy8qIERlcml2ZWQgZGF0YSBjb25zdHJ1Y3RlZCBmb3IgZWFjaCBIdWZmbWFuIHRhYmxlICovCisKK3R5cGVkZWYgc3RydWN0IHsKKyAgdW5zaWduZWQgaW50IGVodWZjb1syNTZdOwkvKiBjb2RlIGZvciBlYWNoIHN5bWJvbCAqLworICBjaGFyIGVodWZzaVsyNTZdOwkJLyogbGVuZ3RoIG9mIGNvZGUgZm9yIGVhY2ggc3ltYm9sICovCisgIC8qIElmIG5vIGNvZGUgaGFzIGJlZW4gYWxsb2NhdGVkIGZvciBhIHN5bWJvbCBTLCBlaHVmc2lbU10gY29udGFpbnMgMCAqLworfSBjX2Rlcml2ZWRfdGJsOworCisvKiBTaG9ydCBmb3JtcyBvZiBleHRlcm5hbCBuYW1lcyBmb3Igc3lzdGVtcyB3aXRoIGJyYWluLWRhbWFnZWQgbGlua2Vycy4gKi8KKworI2lmZGVmIE5FRURfU0hPUlRfRVhURVJOQUxfTkFNRVMKKyNkZWZpbmUganBlZ19tYWtlX2NfZGVyaXZlZF90YmwJak1rQ0Rlcml2ZWQKKyNkZWZpbmUganBlZ19nZW5fb3B0aW1hbF90YWJsZQlqR2VuT3B0VGJsCisjZW5kaWYgLyogTkVFRF9TSE9SVF9FWFRFUk5BTF9OQU1FUyAqLworCisvKiBFeHBhbmQgYSBIdWZmbWFuIHRhYmxlIGRlZmluaXRpb24gaW50byB0aGUgZGVyaXZlZCBmb3JtYXQgKi8KK0VYVEVSTih2b2lkKSBqcGVnX21ha2VfY19kZXJpdmVkX3RibAorCUpQUCgoal9jb21wcmVzc19wdHIgY2luZm8sIGJvb2xlYW4gaXNEQywgaW50IHRibG5vLAorCSAgICAgY19kZXJpdmVkX3RibCAqKiBwZHRibCkpOworCisvKiBHZW5lcmF0ZSBhbiBvcHRpbWFsIHRhYmxlIGRlZmluaXRpb24gZ2l2ZW4gdGhlIHNwZWNpZmllZCBjb3VudHMgKi8KK0VYVEVSTih2b2lkKSBqcGVnX2dlbl9vcHRpbWFsX3RhYmxlCisJSlBQKChqX2NvbXByZXNzX3B0ciBjaW5mbywgSkhVRkZfVEJMICogaHRibCwgbG9uZyBmcmVxW10pKTsKZGlmZiAtLWdpdCBhL2pjaW5pdC5jIGIvamNpbml0LmMKaW5kZXggMGJhMzEwZi4uZGUwYWRlMiAxMDA2NDQKLS0tIGEvamNpbml0LmMKKysrIGIvamNpbml0LmMKQEAgLTQxLDEwICs0MSwyMSBAQAogICAvKiBGb3J3YXJkIERDVCAqLwogICBqaW5pdF9mb3J3YXJkX2RjdChjaW5mbyk7CiAgIC8qIEVudHJvcHkgZW5jb2Rpbmc6IGVpdGhlciBIdWZmbWFuIG9yIGFyaXRobWV0aWMgY29kaW5nLiAqLwotICBpZiAoY2luZm8tPmFyaXRoX2NvZGUpCisgIGlmIChjaW5mby0+YXJpdGhfY29kZSkgeworI2lmZGVmIENfQVJJVEhfQ09ESU5HX1NVUFBPUlRFRAogICAgIGppbml0X2FyaXRoX2VuY29kZXIoY2luZm8pOwotICBlbHNlIHsKLSAgICBqaW5pdF9odWZmX2VuY29kZXIoY2luZm8pOworI2Vsc2UKKyAgICBFUlJFWElUKGNpbmZvLCBKRVJSX0FSSVRIX05PVElNUEwpOworI2VuZGlmCisgIH0gZWxzZSB7CisgICAgaWYgKGNpbmZvLT5wcm9ncmVzc2l2ZV9tb2RlKSB7CisjaWZkZWYgQ19QUk9HUkVTU0lWRV9TVVBQT1JURUQKKyAgICAgIGppbml0X3BodWZmX2VuY29kZXIoY2luZm8pOworI2Vsc2UKKyAgICAgIEVSUkVYSVQoY2luZm8sIEpFUlJfTk9UX0NPTVBJTEVEKTsKKyNlbmRpZgorICAgIH0gZWxzZQorICAgICAgamluaXRfaHVmZl9lbmNvZGVyKGNpbmZvKTsKICAgfQogCiAgIC8qIE5lZWQgYSBmdWxsLWltYWdlIGNvZWZmaWNpZW50IGJ1ZmZlciBpbiBhbnkgbXVsdGktcGFzcyBtb2RlLiAqLwpkaWZmIC0tZ2l0IGEvamNtYWluY3QuYyBiL2pjbWFpbmN0LmMKaW5kZXggN2RlNzVkMS4uZTAyNzlhNyAxMDA2NDQKLS0tIGEvamNtYWluY3QuYworKysgYi9qY21haW5jdC5jCkBAIC0xMTgsMTcgKzExOCwxNyBAQAogCiAgIHdoaWxlIChtYWluLT5jdXJfaU1DVV9yb3cgPCBjaW5mby0+dG90YWxfaU1DVV9yb3dzKSB7CiAgICAgLyogUmVhZCBpbnB1dCBkYXRhIGlmIHdlIGhhdmVuJ3QgZmlsbGVkIHRoZSBtYWluIGJ1ZmZlciB5ZXQgKi8KLSAgICBpZiAobWFpbi0+cm93Z3JvdXBfY3RyIDwgKEpESU1FTlNJT04pIGNpbmZvLT5taW5fRENUX3Zfc2NhbGVkX3NpemUpCisgICAgaWYgKG1haW4tPnJvd2dyb3VwX2N0ciA8IERDVFNJWkUpCiAgICAgICAoKmNpbmZvLT5wcmVwLT5wcmVfcHJvY2Vzc19kYXRhKSAoY2luZm8sCiAJCQkJCWlucHV0X2J1ZiwgaW5fcm93X2N0ciwgaW5fcm93c19hdmFpbCwKIAkJCQkJbWFpbi0+YnVmZmVyLCAmbWFpbi0+cm93Z3JvdXBfY3RyLAotCQkJCQkoSkRJTUVOU0lPTikgY2luZm8tPm1pbl9EQ1Rfdl9zY2FsZWRfc2l6ZSk7CisJCQkJCShKRElNRU5TSU9OKSBEQ1RTSVpFKTsKIAogICAgIC8qIElmIHdlIGRvbid0IGhhdmUgYSBmdWxsIGlNQ1Ugcm93IGJ1ZmZlcmVkLCByZXR1cm4gdG8gYXBwbGljYXRpb24gZm9yCiAgICAgICogbW9yZSBkYXRhLiAgTm90ZSB0aGF0IHByZXByb2Nlc3NvciB3aWxsIGFsd2F5cyBwYWQgdG8gZmlsbCB0aGUgaU1DVSByb3cKICAgICAgKiBhdCB0aGUgYm90dG9tIG9mIHRoZSBpbWFnZS4KICAgICAgKi8KLSAgICBpZiAobWFpbi0+cm93Z3JvdXBfY3RyICE9IChKRElNRU5TSU9OKSBjaW5mby0+bWluX0RDVF92X3NjYWxlZF9zaXplKQorICAgIGlmIChtYWluLT5yb3dncm91cF9jdHIgIT0gRENUU0laRSkKICAgICAgIHJldHVybjsKIAogICAgIC8qIFNlbmQgdGhlIGNvbXBsZXRlZCByb3cgdG8gdGhlIGNvbXByZXNzb3IgKi8KQEAgLTI2OSwxMCArMjY5LDEwIEBACiAJIGNpKyssIGNvbXBwdHIrKykgewogICAgICAgbWFpbi0+d2hvbGVfaW1hZ2VbY2ldID0gKCpjaW5mby0+bWVtLT5yZXF1ZXN0X3ZpcnRfc2FycmF5KQogCSgoal9jb21tb25fcHRyKSBjaW5mbywgSlBPT0xfSU1BR0UsIEZBTFNFLAotCSBjb21wcHRyLT53aWR0aF9pbl9ibG9ja3MgKiBjb21wcHRyLT5EQ1RfaF9zY2FsZWRfc2l6ZSwKKwkgY29tcHB0ci0+d2lkdGhfaW5fYmxvY2tzICogRENUU0laRSwKIAkgKEpESU1FTlNJT04pIGpyb3VuZF91cCgobG9uZykgY29tcHB0ci0+aGVpZ2h0X2luX2Jsb2NrcywKIAkJCQkobG9uZykgY29tcHB0ci0+dl9zYW1wX2ZhY3RvcikgKiBEQ1RTSVpFLAotCSAoSkRJTUVOU0lPTikgKGNvbXBwdHItPnZfc2FtcF9mYWN0b3IgKiBjb21wcHRyLT5EQ1Rfdl9zY2FsZWRfc2l6ZSkpOworCSAoSkRJTUVOU0lPTikgKGNvbXBwdHItPnZfc2FtcF9mYWN0b3IgKiBEQ1RTSVpFKSk7CiAgICAgfQogI2Vsc2UKICAgICBFUlJFWElUKGNpbmZvLCBKRVJSX0JBRF9CVUZGRVJfTU9ERSk7CkBAIC0yODYsOCArMjg2LDggQEAKIAkgY2krKywgY29tcHB0cisrKSB7CiAgICAgICBtYWluLT5idWZmZXJbY2ldID0gKCpjaW5mby0+bWVtLT5hbGxvY19zYXJyYXkpCiAJKChqX2NvbW1vbl9wdHIpIGNpbmZvLCBKUE9PTF9JTUFHRSwKLQkgY29tcHB0ci0+d2lkdGhfaW5fYmxvY2tzICogY29tcHB0ci0+RENUX2hfc2NhbGVkX3NpemUsCi0JIChKRElNRU5TSU9OKSAoY29tcHB0ci0+dl9zYW1wX2ZhY3RvciAqIGNvbXBwdHItPkRDVF92X3NjYWxlZF9zaXplKSk7CisJIGNvbXBwdHItPndpZHRoX2luX2Jsb2NrcyAqIERDVFNJWkUsCisJIChKRElNRU5TSU9OKSAoY29tcHB0ci0+dl9zYW1wX2ZhY3RvciAqIERDVFNJWkUpKTsKICAgICB9CiAgIH0KIH0KZGlmZiAtLWdpdCBhL2pjbWFya2VyLmMgYi9qY21hcmtlci5jCmluZGV4IDYwNmMxOWEuLmIxYzFlNDUgMTAwNjQ0Ci0tLSBhL2pjbWFya2VyLmMKKysrIGIvamNtYXJrZXIuYwpAQCAtMiw3ICsyLDcgQEAKICAqIGpjbWFya2VyLmMKICAqCiAgKiBDb3B5cmlnaHQgKEMpIDE5OTEtMTk5OCwgVGhvbWFzIEcuIExhbmUuCi0gKiBNb2RpZmllZCAyMDAzLTIwMTAgYnkgR3VpZG8gVm9sbGJlZGluZy4KKyAqIENvcHlyaWdodCAoQykgMjAxMCwgRC4gUi4gQ29tbWFuZGVyLgogICogVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEluZGVwZW5kZW50IEpQRUcgR3JvdXAncyBzb2Z0d2FyZS4KICAqIEZvciBjb25kaXRpb25zIG9mIGRpc3RyaWJ1dGlvbiBhbmQgdXNlLCBzZWUgdGhlIGFjY29tcGFueWluZyBSRUFETUUgZmlsZS4KICAqCkBAIC0xMiw2ICsxMiw3IEBACiAjZGVmaW5lIEpQRUdfSU5URVJOQUxTCiAjaW5jbHVkZSAiamluY2x1ZGUuaCIKICNpbmNsdWRlICJqcGVnbGliLmgiCisjaW5jbHVkZSAianBlZ2NvbXAuaCIKIAogCiB0eXBlZGVmIGVudW0gewkJCS8qIEpQRUcgbWFya2VyIGNvZGVzICovCkBAIC0xNTQsMjIgKzE1NSwyMSBAQAogICAgIEVSUkVYSVQxKGNpbmZvLCBKRVJSX05PX1FVQU5UX1RBQkxFLCBpbmRleCk7CiAKICAgcHJlYyA9IDA7Ci0gIGZvciAoaSA9IDA7IGkgPD0gY2luZm8tPmxpbV9TZTsgaSsrKSB7Ci0gICAgaWYgKHF0YmwtPnF1YW50dmFsW2NpbmZvLT5uYXR1cmFsX29yZGVyW2ldXSA+IDI1NSkKKyAgZm9yIChpID0gMDsgaSA8IERDVFNJWkUyOyBpKyspIHsKKyAgICBpZiAocXRibC0+cXVhbnR2YWxbaV0gPiAyNTUpCiAgICAgICBwcmVjID0gMTsKICAgfQogCiAgIGlmICghIHF0YmwtPnNlbnRfdGFibGUpIHsKICAgICBlbWl0X21hcmtlcihjaW5mbywgTV9EUVQpOwogCi0gICAgZW1pdF8yYnl0ZXMoY2luZm8sCi0gICAgICBwcmVjID8gY2luZm8tPmxpbV9TZSAqIDIgKyAyICsgMSArIDIgOiBjaW5mby0+bGltX1NlICsgMSArIDEgKyAyKTsKKyAgICBlbWl0XzJieXRlcyhjaW5mbywgcHJlYyA/IERDVFNJWkUyKjIgKyAxICsgMiA6IERDVFNJWkUyICsgMSArIDIpOwogCiAgICAgZW1pdF9ieXRlKGNpbmZvLCBpbmRleCArIChwcmVjPDw0KSk7CiAKLSAgICBmb3IgKGkgPSAwOyBpIDw9IGNpbmZvLT5saW1fU2U7IGkrKykgeworICAgIGZvciAoaSA9IDA7IGkgPCBEQ1RTSVpFMjsgaSsrKSB7CiAgICAgICAvKiBUaGUgdGFibGUgZW50cmllcyBtdXN0IGJlIGVtaXR0ZWQgaW4gemlnemFnIG9yZGVyLiAqLwotICAgICAgdW5zaWduZWQgaW50IHF2YWwgPSBxdGJsLT5xdWFudHZhbFtjaW5mby0+bmF0dXJhbF9vcmRlcltpXV07CisgICAgICB1bnNpZ25lZCBpbnQgcXZhbCA9IHF0YmwtPnF1YW50dmFsW2pwZWdfbmF0dXJhbF9vcmRlcltpXV07CiAgICAgICBpZiAocHJlYykKIAllbWl0X2J5dGUoY2luZm8sIChpbnQpIChxdmFsID4+IDgpKTsKICAgICAgIGVtaXRfYnl0ZShjaW5mbywgKGludCkgKHF2YWwgJiAweEZGKSk7CkBAIC0yMzEsMzggKzIzMSwzMiBAQAogICBjaGFyIGFjX2luX3VzZVtOVU1fQVJJVEhfVEJMU107CiAgIGludCBsZW5ndGgsIGk7CiAgIGpwZWdfY29tcG9uZW50X2luZm8gKmNvbXBwdHI7Ci0KKyAgCiAgIGZvciAoaSA9IDA7IGkgPCBOVU1fQVJJVEhfVEJMUzsgaSsrKQogICAgIGRjX2luX3VzZVtpXSA9IGFjX2luX3VzZVtpXSA9IDA7Ci0KKyAgCiAgIGZvciAoaSA9IDA7IGkgPCBjaW5mby0+Y29tcHNfaW5fc2NhbjsgaSsrKSB7CiAgICAgY29tcHB0ciA9IGNpbmZvLT5jdXJfY29tcF9pbmZvW2ldOwotICAgIC8qIERDIG5lZWRzIG5vIHRhYmxlIGZvciByZWZpbmVtZW50IHNjYW4gKi8KLSAgICBpZiAoY2luZm8tPlNzID09IDAgJiYgY2luZm8tPkFoID09IDApCi0gICAgICBkY19pbl91c2VbY29tcHB0ci0+ZGNfdGJsX25vXSA9IDE7Ci0gICAgLyogQUMgbmVlZHMgbm8gdGFibGUgd2hlbiBub3QgcHJlc2VudCAqLwotICAgIGlmIChjaW5mby0+U2UpCi0gICAgICBhY19pbl91c2VbY29tcHB0ci0+YWNfdGJsX25vXSA9IDE7CisgICAgZGNfaW5fdXNlW2NvbXBwdHItPmRjX3RibF9ub10gPSAxOworICAgIGFjX2luX3VzZVtjb21wcHRyLT5hY190Ymxfbm9dID0gMTsKICAgfQotCisgIAogICBsZW5ndGggPSAwOwogICBmb3IgKGkgPSAwOyBpIDwgTlVNX0FSSVRIX1RCTFM7IGkrKykKICAgICBsZW5ndGggKz0gZGNfaW5fdXNlW2ldICsgYWNfaW5fdXNlW2ldOwotCi0gIGlmIChsZW5ndGgpIHsKLSAgICBlbWl0X21hcmtlcihjaW5mbywgTV9EQUMpOwotCi0gICAgZW1pdF8yYnl0ZXMoY2luZm8sIGxlbmd0aCoyICsgMik7Ci0KLSAgICBmb3IgKGkgPSAwOyBpIDwgTlVNX0FSSVRIX1RCTFM7IGkrKykgewotICAgICAgaWYgKGRjX2luX3VzZVtpXSkgewotCWVtaXRfYnl0ZShjaW5mbywgaSk7Ci0JZW1pdF9ieXRlKGNpbmZvLCBjaW5mby0+YXJpdGhfZGNfTFtpXSArIChjaW5mby0+YXJpdGhfZGNfVVtpXTw8NCkpOwotICAgICAgfQotICAgICAgaWYgKGFjX2luX3VzZVtpXSkgewotCWVtaXRfYnl0ZShjaW5mbywgaSArIDB4MTApOwotCWVtaXRfYnl0ZShjaW5mbywgY2luZm8tPmFyaXRoX2FjX0tbaV0pOwotICAgICAgfQorICAKKyAgZW1pdF9tYXJrZXIoY2luZm8sIE1fREFDKTsKKyAgCisgIGVtaXRfMmJ5dGVzKGNpbmZvLCBsZW5ndGgqMiArIDIpOworICAKKyAgZm9yIChpID0gMDsgaSA8IE5VTV9BUklUSF9UQkxTOyBpKyspIHsKKyAgICBpZiAoZGNfaW5fdXNlW2ldKSB7CisgICAgICBlbWl0X2J5dGUoY2luZm8sIGkpOworICAgICAgZW1pdF9ieXRlKGNpbmZvLCBjaW5mby0+YXJpdGhfZGNfTFtpXSArIChjaW5mby0+YXJpdGhfZGNfVVtpXTw8NCkpOworICAgIH0KKyAgICBpZiAoYWNfaW5fdXNlW2ldKSB7CisgICAgICBlbWl0X2J5dGUoY2luZm8sIGkgKyAweDEwKTsKKyAgICAgIGVtaXRfYnl0ZShjaW5mbywgY2luZm8tPmFyaXRoX2FjX0tbaV0pOwogICAgIH0KICAgfQogI2VuZGlmIC8qIENfQVJJVEhfQ09ESU5HX1NVUFBPUlRFRCAqLwpAQCAtMjkzLDEzICsyODcsMTMgQEAKICAgZW1pdF8yYnl0ZXMoY2luZm8sIDMgKiBjaW5mby0+bnVtX2NvbXBvbmVudHMgKyAyICsgNSArIDEpOyAvKiBsZW5ndGggKi8KIAogICAvKiBNYWtlIHN1cmUgaW1hZ2UgaXNuJ3QgYmlnZ2VyIHRoYW4gU09GIGZpZWxkIGNhbiBoYW5kbGUgKi8KLSAgaWYgKChsb25nKSBjaW5mby0+anBlZ19oZWlnaHQgPiA2NTUzNUwgfHwKLSAgICAgIChsb25nKSBjaW5mby0+anBlZ193aWR0aCA+IDY1NTM1TCkKKyAgaWYgKChsb25nKSBjaW5mby0+X2pwZWdfaGVpZ2h0ID4gNjU1MzVMIHx8CisgICAgICAobG9uZykgY2luZm8tPl9qcGVnX3dpZHRoID4gNjU1MzVMKQogICAgIEVSUkVYSVQxKGNpbmZvLCBKRVJSX0lNQUdFX1RPT19CSUcsICh1bnNpZ25lZCBpbnQpIDY1NTM1KTsKIAogICBlbWl0X2J5dGUoY2luZm8sIGNpbmZvLT5kYXRhX3ByZWNpc2lvbik7Ci0gIGVtaXRfMmJ5dGVzKGNpbmZvLCAoaW50KSBjaW5mby0+anBlZ19oZWlnaHQpOwotICBlbWl0XzJieXRlcyhjaW5mbywgKGludCkgY2luZm8tPmpwZWdfd2lkdGgpOworICBlbWl0XzJieXRlcyhjaW5mbywgKGludCkgY2luZm8tPl9qcGVnX2hlaWdodCk7CisgIGVtaXRfMmJ5dGVzKGNpbmZvLCAoaW50KSBjaW5mby0+X2pwZWdfd2lkdGgpOwogCiAgIGVtaXRfYnl0ZShjaW5mbywgY2luZm8tPm51bV9jb21wb25lbnRzKTsKIApAQCAtMzI4LDE2ICszMjIsMjIgQEAKICAgZm9yIChpID0gMDsgaSA8IGNpbmZvLT5jb21wc19pbl9zY2FuOyBpKyspIHsKICAgICBjb21wcHRyID0gY2luZm8tPmN1cl9jb21wX2luZm9baV07CiAgICAgZW1pdF9ieXRlKGNpbmZvLCBjb21wcHRyLT5jb21wb25lbnRfaWQpOwotCi0gICAgLyogV2UgZW1pdCAwIGZvciB1bnVzZWQgZmllbGQocyk7IHRoaXMgaXMgcmVjb21tZW5kZWQgYnkgdGhlIFAmTSB0ZXh0Ci0gICAgICogYnV0IGRvZXMgbm90IHNlZW0gdG8gYmUgc3BlY2lmaWVkIGluIHRoZSBzdGFuZGFyZC4KLSAgICAgKi8KLQotICAgIC8qIERDIG5lZWRzIG5vIHRhYmxlIGZvciByZWZpbmVtZW50IHNjYW4gKi8KLSAgICB0ZCA9IGNpbmZvLT5TcyA9PSAwICYmIGNpbmZvLT5BaCA9PSAwID8gY29tcHB0ci0+ZGNfdGJsX25vIDogMDsKLSAgICAvKiBBQyBuZWVkcyBubyB0YWJsZSB3aGVuIG5vdCBwcmVzZW50ICovCi0gICAgdGEgPSBjaW5mby0+U2UgPyBjb21wcHRyLT5hY190Ymxfbm8gOiAwOwotCisgICAgdGQgPSBjb21wcHRyLT5kY190Ymxfbm87CisgICAgdGEgPSBjb21wcHRyLT5hY190Ymxfbm87CisgICAgaWYgKGNpbmZvLT5wcm9ncmVzc2l2ZV9tb2RlKSB7CisgICAgICAvKiBQcm9ncmVzc2l2ZSBtb2RlOiBvbmx5IERDIG9yIG9ubHkgQUMgdGFibGVzIGFyZSB1c2VkIGluIG9uZSBzY2FuOworICAgICAgICogZnVydGhlcm1vcmUsIEh1ZmZtYW4gY29kaW5nIG9mIERDIHJlZmluZW1lbnQgdXNlcyBubyB0YWJsZSBhdCBhbGwuCisgICAgICAgKiBXZSBlbWl0IDAgZm9yIHVudXNlZCBmaWVsZChzKTsgdGhpcyBpcyByZWNvbW1lbmRlZCBieSB0aGUgUCZNIHRleHQKKyAgICAgICAqIGJ1dCBkb2VzIG5vdCBzZWVtIHRvIGJlIHNwZWNpZmllZCBpbiB0aGUgc3RhbmRhcmQuCisgICAgICAgKi8KKyAgICAgIGlmIChjaW5mby0+U3MgPT0gMCkgeworCXRhID0gMDsJCQkvKiBEQyBzY2FuICovCisJaWYgKGNpbmZvLT5BaCAhPSAwICYmICFjaW5mby0+YXJpdGhfY29kZSkKKwkgIHRkID0gMDsJCS8qIG5vIERDIHRhYmxlIGVpdGhlciAqLworICAgICAgfSBlbHNlIHsKKwl0ZCA9IDA7CQkJLyogQUMgc2NhbiAqLworICAgICAgfQorICAgIH0KICAgICBlbWl0X2J5dGUoY2luZm8sICh0ZCA8PCA0KSArIHRhKTsKICAgfQogCkBAIC0zNDgsMjIgKzM0OCw2IEBACiAKIAogTE9DQUwodm9pZCkKLWVtaXRfcHNldWRvX3NvcyAoal9jb21wcmVzc19wdHIgY2luZm8pCi0vKiBFbWl0IGEgcHNldWRvIFNPUyBtYXJrZXIgKi8KLXsKLSAgZW1pdF9tYXJrZXIoY2luZm8sIE1fU09TKTsKLSAgCi0gIGVtaXRfMmJ5dGVzKGNpbmZvLCAyICsgMSArIDMpOyAvKiBsZW5ndGggKi8KLSAgCi0gIGVtaXRfYnl0ZShjaW5mbywgMCk7IC8qIE5zICovCi0KLSAgZW1pdF9ieXRlKGNpbmZvLCAwKTsgLyogU3MgKi8KLSAgZW1pdF9ieXRlKGNpbmZvLCBjaW5mby0+YmxvY2tfc2l6ZSAqIGNpbmZvLT5ibG9ja19zaXplIC0gMSk7IC8qIFNlICovCi0gIGVtaXRfYnl0ZShjaW5mbywgMCk7IC8qIEFoL0FsICovCi19Ci0KLQotTE9DQUwodm9pZCkKIGVtaXRfamZpZl9hcHAwIChqX2NvbXByZXNzX3B0ciBjaW5mbykKIC8qIEVtaXQgYSBKRklGLWNvbXBsaWFudCBBUFAwIG1hcmtlciAqLwogewpAQCAtNTAyLDcgKzQ4Niw3IEBACiAKIC8qCiAgKiBXcml0ZSBmcmFtZSBoZWFkZXIuCi0gKiBUaGlzIGNvbnNpc3RzIG9mIERRVCBhbmQgU09GbiBtYXJrZXJzLCBhbmQgYSBjb25kaXRpb25hbCBwc2V1ZG8gU09TIG1hcmtlci4KKyAqIFRoaXMgY29uc2lzdHMgb2YgRFFUIGFuZCBTT0ZuIG1hcmtlcnMuCiAgKiBOb3RlIHRoYXQgd2UgZG8gbm90IGVtaXQgdGhlIFNPRiB1bnRpbCB3ZSBoYXZlIGVtaXR0ZWQgdGhlIERRVChzKS4KICAqIFRoaXMgYXZvaWRzIGNvbXBhdGliaWxpdHkgcHJvYmxlbXMgd2l0aCBpbmNvcnJlY3QgaW1wbGVtZW50YXRpb25zIHRoYXQKICAqIHRyeSB0byBlcnJvci1jaGVjayB0aGUgcXVhbnQgdGFibGUgbnVtYmVycyBhcyBzb29uIGFzIHRoZXkgc2VlIHRoZSBTT0YuCkBAIC01MjksNyArNTEzLDcgQEAKICAgICogTm90ZSB3ZSBhc3N1bWUgdGhhdCBIdWZmbWFuIHRhYmxlIG51bWJlcnMgd29uJ3QgYmUgY2hhbmdlZCBsYXRlci4KICAgICovCiAgIGlmIChjaW5mby0+YXJpdGhfY29kZSB8fCBjaW5mby0+cHJvZ3Jlc3NpdmVfbW9kZSB8fAotICAgICAgY2luZm8tPmRhdGFfcHJlY2lzaW9uICE9IDggfHwgY2luZm8tPmJsb2NrX3NpemUgIT0gRENUU0laRSkgeworICAgICAgY2luZm8tPmRhdGFfcHJlY2lzaW9uICE9IDgpIHsKICAgICBpc19iYXNlbGluZSA9IEZBTFNFOwogICB9IGVsc2UgewogICAgIGlzX2Jhc2VsaW5lID0gVFJVRTsKQEAgLTU0NywxMCArNTMxLDcgQEAKIAogICAvKiBFbWl0IHRoZSBwcm9wZXIgU09GIG1hcmtlciAqLwogICBpZiAoY2luZm8tPmFyaXRoX2NvZGUpIHsKLSAgICBpZiAoY2luZm8tPnByb2dyZXNzaXZlX21vZGUpCi0gICAgICBlbWl0X3NvZihjaW5mbywgTV9TT0YxMCk7IC8qIFNPRiBjb2RlIGZvciBwcm9ncmVzc2l2ZSBhcml0aG1ldGljICovCi0gICAgZWxzZQotICAgICAgZW1pdF9zb2YoY2luZm8sIE1fU09GOSk7ICAvKiBTT0YgY29kZSBmb3Igc2VxdWVudGlhbCBhcml0aG1ldGljICovCisgICAgZW1pdF9zb2YoY2luZm8sIE1fU09GOSk7CS8qIFNPRiBjb2RlIGZvciBhcml0aG1ldGljIGNvZGluZyAqLwogICB9IGVsc2UgewogICAgIGlmIChjaW5mby0+cHJvZ3Jlc3NpdmVfbW9kZSkKICAgICAgIGVtaXRfc29mKGNpbmZvLCBNX1NPRjIpOwkvKiBTT0YgY29kZSBmb3IgcHJvZ3Jlc3NpdmUgSHVmZm1hbiAqLwpAQCAtNTU5LDEwICs1NDAsNiBAQAogICAgIGVsc2UKICAgICAgIGVtaXRfc29mKGNpbmZvLCBNX1NPRjEpOwkvKiBTT0YgY29kZSBmb3Igbm9uLWJhc2VsaW5lIEh1ZmZtYW4gZmlsZSAqLwogICB9Ci0KLSAgLyogQ2hlY2sgdG8gZW1pdCBwc2V1ZG8gU09TIG1hcmtlciAqLwotICBpZiAoY2luZm8tPnByb2dyZXNzaXZlX21vZGUgJiYgY2luZm8tPmJsb2NrX3NpemUgIT0gRENUU0laRSkKLSAgICBlbWl0X3BzZXVkb19zb3MoY2luZm8pOwogfQogCiAKQEAgLTU5MSwxMiArNTY4LDE5IEBACiAgICAgICovCiAgICAgZm9yIChpID0gMDsgaSA8IGNpbmZvLT5jb21wc19pbl9zY2FuOyBpKyspIHsKICAgICAgIGNvbXBwdHIgPSBjaW5mby0+Y3VyX2NvbXBfaW5mb1tpXTsKLSAgICAgIC8qIERDIG5lZWRzIG5vIHRhYmxlIGZvciByZWZpbmVtZW50IHNjYW4gKi8KLSAgICAgIGlmIChjaW5mby0+U3MgPT0gMCAmJiBjaW5mby0+QWggPT0gMCkKKyAgICAgIGlmIChjaW5mby0+cHJvZ3Jlc3NpdmVfbW9kZSkgeworCS8qIFByb2dyZXNzaXZlIG1vZGU6IG9ubHkgREMgb3Igb25seSBBQyB0YWJsZXMgYXJlIHVzZWQgaW4gb25lIHNjYW4gKi8KKwlpZiAoY2luZm8tPlNzID09IDApIHsKKwkgIGlmIChjaW5mby0+QWggPT0gMCkJLyogREMgbmVlZHMgbm8gdGFibGUgZm9yIHJlZmluZW1lbnQgc2NhbiAqLworCSAgICBlbWl0X2RodChjaW5mbywgY29tcHB0ci0+ZGNfdGJsX25vLCBGQUxTRSk7CisJfSBlbHNlIHsKKwkgIGVtaXRfZGh0KGNpbmZvLCBjb21wcHRyLT5hY190Ymxfbm8sIFRSVUUpOworCX0KKyAgICAgIH0gZWxzZSB7CisJLyogU2VxdWVudGlhbCBtb2RlOiBuZWVkIGJvdGggREMgYW5kIEFDIHRhYmxlcyAqLwogCWVtaXRfZGh0KGNpbmZvLCBjb21wcHRyLT5kY190Ymxfbm8sIEZBTFNFKTsKLSAgICAgIC8qIEFDIG5lZWRzIG5vIHRhYmxlIHdoZW4gbm90IHByZXNlbnQgKi8KLSAgICAgIGlmIChjaW5mby0+U2UpCiAJZW1pdF9kaHQoY2luZm8sIGNvbXBwdHItPmFjX3RibF9ubywgVFJVRSk7CisgICAgICB9CiAgICAgfQogICB9CiAKZGlmZiAtLWdpdCBhL2pjbWFzdGVyLmMgYi9qY21hc3Rlci5jCmluZGV4IGNhZjgwYTUuLjc0ZGY1NTUgMTAwNjQ0Ci0tLSBhL2pjbWFzdGVyLmMKKysrIGIvamNtYXN0ZXIuYwpAQCAtMiw3ICsyLDggQEAKICAqIGpjbWFzdGVyLmMKICAqCiAgKiBDb3B5cmlnaHQgKEMpIDE5OTEtMTk5NywgVGhvbWFzIEcuIExhbmUuCi0gKiBNb2RpZmllZCAyMDAzLTIwMTEgYnkgR3VpZG8gVm9sbGJlZGluZy4KKyAqIE1vZGlmaWVkIDIwMDMtMjAxMCBieSBHdWlkbyBWb2xsYmVkaW5nLgorICogQ29weXJpZ2h0IChDKSAyMDEwLCBELiBSLiBDb21tYW5kZXIuCiAgKiBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgSW5kZXBlbmRlbnQgSlBFRyBHcm91cCdzIHNvZnR3YXJlLgogICogRm9yIGNvbmRpdGlvbnMgb2YgZGlzdHJpYnV0aW9uIGFuZCB1c2UsIHNlZSB0aGUgYWNjb21wYW55aW5nIFJFQURNRSBmaWxlLgogICoKQEAgLTE1LDYgKzE2LDcgQEAKICNkZWZpbmUgSlBFR19JTlRFUk5BTFMKICNpbmNsdWRlICJqaW5jbHVkZS5oIgogI2luY2x1ZGUgImpwZWdsaWIuaCIKKyNpbmNsdWRlICJqcGVnY29tcC5oIgogCiAKIC8qIFByaXZhdGUgc3RhdGUgKi8KQEAgLTQzLDYgKzQ1LDcgQEAKICAqIFN1cHBvcnQgcm91dGluZXMgdGhhdCBkbyB2YXJpb3VzIGVzc2VudGlhbCBjYWxjdWxhdGlvbnMuCiAgKi8KIAorI2lmIEpQRUdfTElCX1ZFUlNJT04gPj0gNzAKIC8qCiAgKiBDb21wdXRlIEpQRUcgaW1hZ2UgZGltZW5zaW9ucyBhbmQgcmVsYXRlZCB2YWx1ZXMuCiAgKiBOT1RFOiB0aGlzIGlzIGV4cG9ydGVkIGZvciBwb3NzaWJsZSB1c2UgYnkgYXBwbGljYXRpb24uCkBAIC01MywyMTAgKzU2LDM3IEBACiBqcGVnX2NhbGNfanBlZ19kaW1lbnNpb25zIChqX2NvbXByZXNzX3B0ciBjaW5mbykKIC8qIERvIGNvbXB1dGF0aW9ucyB0aGF0IGFyZSBuZWVkZWQgYmVmb3JlIG1hc3RlciBzZWxlY3Rpb24gcGhhc2UgKi8KIHsKLSNpZmRlZiBEQ1RfU0NBTElOR19TVVBQT1JURUQKLQotICAvKiBTYW5pdHkgY2hlY2sgb24gaW5wdXQgaW1hZ2UgZGltZW5zaW9ucyB0byBwcmV2ZW50IG92ZXJmbG93IGluCi0gICAqIGZvbGxvd2luZyBjYWxjdWxhdGlvbi4KLSAgICogV2UgZG8gY2hlY2sganBlZ193aWR0aCBhbmQganBlZ19oZWlnaHQgaW4gaW5pdGlhbF9zZXR1cCBiZWxvdywKLSAgICogYnV0IGltYWdlX3dpZHRoIGFuZCBpbWFnZV9oZWlnaHQgY2FuIGNvbWUgZnJvbSBhcmJpdHJhcnkgZGF0YSwKLSAgICogYW5kIHdlIG5lZWQgc29tZSBzcGFjZSBmb3IgbXVsdGlwbGljYXRpb24gYnkgYmxvY2tfc2l6ZS4KLSAgICovCi0gIGlmICgoKGxvbmcpIGNpbmZvLT5pbWFnZV93aWR0aCA+PiAyNCkgfHwgKChsb25nKSBjaW5mby0+aW1hZ2VfaGVpZ2h0ID4+IDI0KSkKLSAgICBFUlJFWElUMShjaW5mbywgSkVSUl9JTUFHRV9UT09fQklHLCAodW5zaWduZWQgaW50KSBKUEVHX01BWF9ESU1FTlNJT04pOwotCi0gIC8qIENvbXB1dGUgYWN0dWFsIEpQRUcgaW1hZ2UgZGltZW5zaW9ucyBhbmQgRENUIHNjYWxpbmcgY2hvaWNlcy4gKi8KLSAgaWYgKGNpbmZvLT5zY2FsZV9udW0gPj0gY2luZm8tPnNjYWxlX2Rlbm9tICogY2luZm8tPmJsb2NrX3NpemUpIHsKLSAgICAvKiBQcm92aWRlIGJsb2NrX3NpemUvMSBzY2FsaW5nICovCi0gICAgY2luZm8tPmpwZWdfd2lkdGggPSBjaW5mby0+aW1hZ2Vfd2lkdGggKiBjaW5mby0+YmxvY2tfc2l6ZTsKLSAgICBjaW5mby0+anBlZ19oZWlnaHQgPSBjaW5mby0+aW1hZ2VfaGVpZ2h0ICogY2luZm8tPmJsb2NrX3NpemU7Ci0gICAgY2luZm8tPm1pbl9EQ1RfaF9zY2FsZWRfc2l6ZSA9IDE7Ci0gICAgY2luZm8tPm1pbl9EQ1Rfdl9zY2FsZWRfc2l6ZSA9IDE7Ci0gIH0gZWxzZSBpZiAoY2luZm8tPnNjYWxlX251bSAqIDIgPj0gY2luZm8tPnNjYWxlX2Rlbm9tICogY2luZm8tPmJsb2NrX3NpemUpIHsKLSAgICAvKiBQcm92aWRlIGJsb2NrX3NpemUvMiBzY2FsaW5nICovCi0gICAgY2luZm8tPmpwZWdfd2lkdGggPSAoSkRJTUVOU0lPTikKLSAgICAgIGpkaXZfcm91bmRfdXAoKGxvbmcpIGNpbmZvLT5pbWFnZV93aWR0aCAqIGNpbmZvLT5ibG9ja19zaXplLCAyTCk7Ci0gICAgY2luZm8tPmpwZWdfaGVpZ2h0ID0gKEpESU1FTlNJT04pCi0gICAgICBqZGl2X3JvdW5kX3VwKChsb25nKSBjaW5mby0+aW1hZ2VfaGVpZ2h0ICogY2luZm8tPmJsb2NrX3NpemUsIDJMKTsKLSAgICBjaW5mby0+bWluX0RDVF9oX3NjYWxlZF9zaXplID0gMjsKLSAgICBjaW5mby0+bWluX0RDVF92X3NjYWxlZF9zaXplID0gMjsKLSAgfSBlbHNlIGlmIChjaW5mby0+c2NhbGVfbnVtICogMyA+PSBjaW5mby0+c2NhbGVfZGVub20gKiBjaW5mby0+YmxvY2tfc2l6ZSkgewotICAgIC8qIFByb3ZpZGUgYmxvY2tfc2l6ZS8zIHNjYWxpbmcgKi8KLSAgICBjaW5mby0+anBlZ193aWR0aCA9IChKRElNRU5TSU9OKQotICAgICAgamRpdl9yb3VuZF91cCgobG9uZykgY2luZm8tPmltYWdlX3dpZHRoICogY2luZm8tPmJsb2NrX3NpemUsIDNMKTsKLSAgICBjaW5mby0+anBlZ19oZWlnaHQgPSAoSkRJTUVOU0lPTikKLSAgICAgIGpkaXZfcm91bmRfdXAoKGxvbmcpIGNpbmZvLT5pbWFnZV9oZWlnaHQgKiBjaW5mby0+YmxvY2tfc2l6ZSwgM0wpOwotICAgIGNpbmZvLT5taW5fRENUX2hfc2NhbGVkX3NpemUgPSAzOwotICAgIGNpbmZvLT5taW5fRENUX3Zfc2NhbGVkX3NpemUgPSAzOwotICB9IGVsc2UgaWYgKGNpbmZvLT5zY2FsZV9udW0gKiA0ID49IGNpbmZvLT5zY2FsZV9kZW5vbSAqIGNpbmZvLT5ibG9ja19zaXplKSB7Ci0gICAgLyogUHJvdmlkZSBibG9ja19zaXplLzQgc2NhbGluZyAqLwotICAgIGNpbmZvLT5qcGVnX3dpZHRoID0gKEpESU1FTlNJT04pCi0gICAgICBqZGl2X3JvdW5kX3VwKChsb25nKSBjaW5mby0+aW1hZ2Vfd2lkdGggKiBjaW5mby0+YmxvY2tfc2l6ZSwgNEwpOwotICAgIGNpbmZvLT5qcGVnX2hlaWdodCA9IChKRElNRU5TSU9OKQotICAgICAgamRpdl9yb3VuZF91cCgobG9uZykgY2luZm8tPmltYWdlX2hlaWdodCAqIGNpbmZvLT5ibG9ja19zaXplLCA0TCk7Ci0gICAgY2luZm8tPm1pbl9EQ1RfaF9zY2FsZWRfc2l6ZSA9IDQ7Ci0gICAgY2luZm8tPm1pbl9EQ1Rfdl9zY2FsZWRfc2l6ZSA9IDQ7Ci0gIH0gZWxzZSBpZiAoY2luZm8tPnNjYWxlX251bSAqIDUgPj0gY2luZm8tPnNjYWxlX2Rlbm9tICogY2luZm8tPmJsb2NrX3NpemUpIHsKLSAgICAvKiBQcm92aWRlIGJsb2NrX3NpemUvNSBzY2FsaW5nICovCi0gICAgY2luZm8tPmpwZWdfd2lkdGggPSAoSkRJTUVOU0lPTikKLSAgICAgIGpkaXZfcm91bmRfdXAoKGxvbmcpIGNpbmZvLT5pbWFnZV93aWR0aCAqIGNpbmZvLT5ibG9ja19zaXplLCA1TCk7Ci0gICAgY2luZm8tPmpwZWdfaGVpZ2h0ID0gKEpESU1FTlNJT04pCi0gICAgICBqZGl2X3JvdW5kX3VwKChsb25nKSBjaW5mby0+aW1hZ2VfaGVpZ2h0ICogY2luZm8tPmJsb2NrX3NpemUsIDVMKTsKLSAgICBjaW5mby0+bWluX0RDVF9oX3NjYWxlZF9zaXplID0gNTsKLSAgICBjaW5mby0+bWluX0RDVF92X3NjYWxlZF9zaXplID0gNTsKLSAgfSBlbHNlIGlmIChjaW5mby0+c2NhbGVfbnVtICogNiA+PSBjaW5mby0+c2NhbGVfZGVub20gKiBjaW5mby0+YmxvY2tfc2l6ZSkgewotICAgIC8qIFByb3ZpZGUgYmxvY2tfc2l6ZS82IHNjYWxpbmcgKi8KLSAgICBjaW5mby0+anBlZ193aWR0aCA9IChKRElNRU5TSU9OKQotICAgICAgamRpdl9yb3VuZF91cCgobG9uZykgY2luZm8tPmltYWdlX3dpZHRoICogY2luZm8tPmJsb2NrX3NpemUsIDZMKTsKLSAgICBjaW5mby0+anBlZ19oZWlnaHQgPSAoSkRJTUVOU0lPTikKLSAgICAgIGpkaXZfcm91bmRfdXAoKGxvbmcpIGNpbmZvLT5pbWFnZV9oZWlnaHQgKiBjaW5mby0+YmxvY2tfc2l6ZSwgNkwpOwotICAgIGNpbmZvLT5taW5fRENUX2hfc2NhbGVkX3NpemUgPSA2OwotICAgIGNpbmZvLT5taW5fRENUX3Zfc2NhbGVkX3NpemUgPSA2OwotICB9IGVsc2UgaWYgKGNpbmZvLT5zY2FsZV9udW0gKiA3ID49IGNpbmZvLT5zY2FsZV9kZW5vbSAqIGNpbmZvLT5ibG9ja19zaXplKSB7Ci0gICAgLyogUHJvdmlkZSBibG9ja19zaXplLzcgc2NhbGluZyAqLwotICAgIGNpbmZvLT5qcGVnX3dpZHRoID0gKEpESU1FTlNJT04pCi0gICAgICBqZGl2X3JvdW5kX3VwKChsb25nKSBjaW5mby0+aW1hZ2Vfd2lkdGggKiBjaW5mby0+YmxvY2tfc2l6ZSwgN0wpOwotICAgIGNpbmZvLT5qcGVnX2hlaWdodCA9IChKRElNRU5TSU9OKQotICAgICAgamRpdl9yb3VuZF91cCgobG9uZykgY2luZm8tPmltYWdlX2hlaWdodCAqIGNpbmZvLT5ibG9ja19zaXplLCA3TCk7Ci0gICAgY2luZm8tPm1pbl9EQ1RfaF9zY2FsZWRfc2l6ZSA9IDc7Ci0gICAgY2luZm8tPm1pbl9EQ1Rfdl9zY2FsZWRfc2l6ZSA9IDc7Ci0gIH0gZWxzZSBpZiAoY2luZm8tPnNjYWxlX251bSAqIDggPj0gY2luZm8tPnNjYWxlX2Rlbm9tICogY2luZm8tPmJsb2NrX3NpemUpIHsKLSAgICAvKiBQcm92aWRlIGJsb2NrX3NpemUvOCBzY2FsaW5nICovCi0gICAgY2luZm8tPmpwZWdfd2lkdGggPSAoSkRJTUVOU0lPTikKLSAgICAgIGpkaXZfcm91bmRfdXAoKGxvbmcpIGNpbmZvLT5pbWFnZV93aWR0aCAqIGNpbmZvLT5ibG9ja19zaXplLCA4TCk7Ci0gICAgY2luZm8tPmpwZWdfaGVpZ2h0ID0gKEpESU1FTlNJT04pCi0gICAgICBqZGl2X3JvdW5kX3VwKChsb25nKSBjaW5mby0+aW1hZ2VfaGVpZ2h0ICogY2luZm8tPmJsb2NrX3NpemUsIDhMKTsKLSAgICBjaW5mby0+bWluX0RDVF9oX3NjYWxlZF9zaXplID0gODsKLSAgICBjaW5mby0+bWluX0RDVF92X3NjYWxlZF9zaXplID0gODsKLSAgfSBlbHNlIGlmIChjaW5mby0+c2NhbGVfbnVtICogOSA+PSBjaW5mby0+c2NhbGVfZGVub20gKiBjaW5mby0+YmxvY2tfc2l6ZSkgewotICAgIC8qIFByb3ZpZGUgYmxvY2tfc2l6ZS85IHNjYWxpbmcgKi8KLSAgICBjaW5mby0+anBlZ193aWR0aCA9IChKRElNRU5TSU9OKQotICAgICAgamRpdl9yb3VuZF91cCgobG9uZykgY2luZm8tPmltYWdlX3dpZHRoICogY2luZm8tPmJsb2NrX3NpemUsIDlMKTsKLSAgICBjaW5mby0+anBlZ19oZWlnaHQgPSAoSkRJTUVOU0lPTikKLSAgICAgIGpkaXZfcm91bmRfdXAoKGxvbmcpIGNpbmZvLT5pbWFnZV9oZWlnaHQgKiBjaW5mby0+YmxvY2tfc2l6ZSwgOUwpOwotICAgIGNpbmZvLT5taW5fRENUX2hfc2NhbGVkX3NpemUgPSA5OwotICAgIGNpbmZvLT5taW5fRENUX3Zfc2NhbGVkX3NpemUgPSA5OwotICB9IGVsc2UgaWYgKGNpbmZvLT5zY2FsZV9udW0gKiAxMCA+PSBjaW5mby0+c2NhbGVfZGVub20gKiBjaW5mby0+YmxvY2tfc2l6ZSkgewotICAgIC8qIFByb3ZpZGUgYmxvY2tfc2l6ZS8xMCBzY2FsaW5nICovCi0gICAgY2luZm8tPmpwZWdfd2lkdGggPSAoSkRJTUVOU0lPTikKLSAgICAgIGpkaXZfcm91bmRfdXAoKGxvbmcpIGNpbmZvLT5pbWFnZV93aWR0aCAqIGNpbmZvLT5ibG9ja19zaXplLCAxMEwpOwotICAgIGNpbmZvLT5qcGVnX2hlaWdodCA9IChKRElNRU5TSU9OKQotICAgICAgamRpdl9yb3VuZF91cCgobG9uZykgY2luZm8tPmltYWdlX2hlaWdodCAqIGNpbmZvLT5ibG9ja19zaXplLCAxMEwpOwotICAgIGNpbmZvLT5taW5fRENUX2hfc2NhbGVkX3NpemUgPSAxMDsKLSAgICBjaW5mby0+bWluX0RDVF92X3NjYWxlZF9zaXplID0gMTA7Ci0gIH0gZWxzZSBpZiAoY2luZm8tPnNjYWxlX251bSAqIDExID49IGNpbmZvLT5zY2FsZV9kZW5vbSAqIGNpbmZvLT5ibG9ja19zaXplKSB7Ci0gICAgLyogUHJvdmlkZSBibG9ja19zaXplLzExIHNjYWxpbmcgKi8KLSAgICBjaW5mby0+anBlZ193aWR0aCA9IChKRElNRU5TSU9OKQotICAgICAgamRpdl9yb3VuZF91cCgobG9uZykgY2luZm8tPmltYWdlX3dpZHRoICogY2luZm8tPmJsb2NrX3NpemUsIDExTCk7Ci0gICAgY2luZm8tPmpwZWdfaGVpZ2h0ID0gKEpESU1FTlNJT04pCi0gICAgICBqZGl2X3JvdW5kX3VwKChsb25nKSBjaW5mby0+aW1hZ2VfaGVpZ2h0ICogY2luZm8tPmJsb2NrX3NpemUsIDExTCk7Ci0gICAgY2luZm8tPm1pbl9EQ1RfaF9zY2FsZWRfc2l6ZSA9IDExOwotICAgIGNpbmZvLT5taW5fRENUX3Zfc2NhbGVkX3NpemUgPSAxMTsKLSAgfSBlbHNlIGlmIChjaW5mby0+c2NhbGVfbnVtICogMTIgPj0gY2luZm8tPnNjYWxlX2Rlbm9tICogY2luZm8tPmJsb2NrX3NpemUpIHsKLSAgICAvKiBQcm92aWRlIGJsb2NrX3NpemUvMTIgc2NhbGluZyAqLwotICAgIGNpbmZvLT5qcGVnX3dpZHRoID0gKEpESU1FTlNJT04pCi0gICAgICBqZGl2X3JvdW5kX3VwKChsb25nKSBjaW5mby0+aW1hZ2Vfd2lkdGggKiBjaW5mby0+YmxvY2tfc2l6ZSwgMTJMKTsKLSAgICBjaW5mby0+anBlZ19oZWlnaHQgPSAoSkRJTUVOU0lPTikKLSAgICAgIGpkaXZfcm91bmRfdXAoKGxvbmcpIGNpbmZvLT5pbWFnZV9oZWlnaHQgKiBjaW5mby0+YmxvY2tfc2l6ZSwgMTJMKTsKLSAgICBjaW5mby0+bWluX0RDVF9oX3NjYWxlZF9zaXplID0gMTI7Ci0gICAgY2luZm8tPm1pbl9EQ1Rfdl9zY2FsZWRfc2l6ZSA9IDEyOwotICB9IGVsc2UgaWYgKGNpbmZvLT5zY2FsZV9udW0gKiAxMyA+PSBjaW5mby0+c2NhbGVfZGVub20gKiBjaW5mby0+YmxvY2tfc2l6ZSkgewotICAgIC8qIFByb3ZpZGUgYmxvY2tfc2l6ZS8xMyBzY2FsaW5nICovCi0gICAgY2luZm8tPmpwZWdfd2lkdGggPSAoSkRJTUVOU0lPTikKLSAgICAgIGpkaXZfcm91bmRfdXAoKGxvbmcpIGNpbmZvLT5pbWFnZV93aWR0aCAqIGNpbmZvLT5ibG9ja19zaXplLCAxM0wpOwotICAgIGNpbmZvLT5qcGVnX2hlaWdodCA9IChKRElNRU5TSU9OKQotICAgICAgamRpdl9yb3VuZF91cCgobG9uZykgY2luZm8tPmltYWdlX2hlaWdodCAqIGNpbmZvLT5ibG9ja19zaXplLCAxM0wpOwotICAgIGNpbmZvLT5taW5fRENUX2hfc2NhbGVkX3NpemUgPSAxMzsKLSAgICBjaW5mby0+bWluX0RDVF92X3NjYWxlZF9zaXplID0gMTM7Ci0gIH0gZWxzZSBpZiAoY2luZm8tPnNjYWxlX251bSAqIDE0ID49IGNpbmZvLT5zY2FsZV9kZW5vbSAqIGNpbmZvLT5ibG9ja19zaXplKSB7Ci0gICAgLyogUHJvdmlkZSBibG9ja19zaXplLzE0IHNjYWxpbmcgKi8KLSAgICBjaW5mby0+anBlZ193aWR0aCA9IChKRElNRU5TSU9OKQotICAgICAgamRpdl9yb3VuZF91cCgobG9uZykgY2luZm8tPmltYWdlX3dpZHRoICogY2luZm8tPmJsb2NrX3NpemUsIDE0TCk7Ci0gICAgY2luZm8tPmpwZWdfaGVpZ2h0ID0gKEpESU1FTlNJT04pCi0gICAgICBqZGl2X3JvdW5kX3VwKChsb25nKSBjaW5mby0+aW1hZ2VfaGVpZ2h0ICogY2luZm8tPmJsb2NrX3NpemUsIDE0TCk7Ci0gICAgY2luZm8tPm1pbl9EQ1RfaF9zY2FsZWRfc2l6ZSA9IDE0OwotICAgIGNpbmZvLT5taW5fRENUX3Zfc2NhbGVkX3NpemUgPSAxNDsKLSAgfSBlbHNlIGlmIChjaW5mby0+c2NhbGVfbnVtICogMTUgPj0gY2luZm8tPnNjYWxlX2Rlbm9tICogY2luZm8tPmJsb2NrX3NpemUpIHsKLSAgICAvKiBQcm92aWRlIGJsb2NrX3NpemUvMTUgc2NhbGluZyAqLwotICAgIGNpbmZvLT5qcGVnX3dpZHRoID0gKEpESU1FTlNJT04pCi0gICAgICBqZGl2X3JvdW5kX3VwKChsb25nKSBjaW5mby0+aW1hZ2Vfd2lkdGggKiBjaW5mby0+YmxvY2tfc2l6ZSwgMTVMKTsKLSAgICBjaW5mby0+anBlZ19oZWlnaHQgPSAoSkRJTUVOU0lPTikKLSAgICAgIGpkaXZfcm91bmRfdXAoKGxvbmcpIGNpbmZvLT5pbWFnZV9oZWlnaHQgKiBjaW5mby0+YmxvY2tfc2l6ZSwgMTVMKTsKLSAgICBjaW5mby0+bWluX0RDVF9oX3NjYWxlZF9zaXplID0gMTU7Ci0gICAgY2luZm8tPm1pbl9EQ1Rfdl9zY2FsZWRfc2l6ZSA9IDE1OwotICB9IGVsc2UgewotICAgIC8qIFByb3ZpZGUgYmxvY2tfc2l6ZS8xNiBzY2FsaW5nICovCi0gICAgY2luZm8tPmpwZWdfd2lkdGggPSAoSkRJTUVOU0lPTikKLSAgICAgIGpkaXZfcm91bmRfdXAoKGxvbmcpIGNpbmZvLT5pbWFnZV93aWR0aCAqIGNpbmZvLT5ibG9ja19zaXplLCAxNkwpOwotICAgIGNpbmZvLT5qcGVnX2hlaWdodCA9IChKRElNRU5TSU9OKQotICAgICAgamRpdl9yb3VuZF91cCgobG9uZykgY2luZm8tPmltYWdlX2hlaWdodCAqIGNpbmZvLT5ibG9ja19zaXplLCAxNkwpOwotICAgIGNpbmZvLT5taW5fRENUX2hfc2NhbGVkX3NpemUgPSAxNjsKLSAgICBjaW5mby0+bWluX0RDVF92X3NjYWxlZF9zaXplID0gMTY7Ci0gIH0KLQotI2Vsc2UgLyogIURDVF9TQ0FMSU5HX1NVUFBPUlRFRCAqLwotCiAgIC8qIEhhcmR3aXJlIGl0IHRvICJubyBzY2FsaW5nIiAqLwogICBjaW5mby0+anBlZ193aWR0aCA9IGNpbmZvLT5pbWFnZV93aWR0aDsKICAgY2luZm8tPmpwZWdfaGVpZ2h0ID0gY2luZm8tPmltYWdlX2hlaWdodDsKICAgY2luZm8tPm1pbl9EQ1RfaF9zY2FsZWRfc2l6ZSA9IERDVFNJWkU7CiAgIGNpbmZvLT5taW5fRENUX3Zfc2NhbGVkX3NpemUgPSBEQ1RTSVpFOwotCi0jZW5kaWYgLyogRENUX1NDQUxJTkdfU1VQUE9SVEVEICovCiB9Ci0KLQotTE9DQUwodm9pZCkKLWpwZWdfY2FsY190cmFuc19kaW1lbnNpb25zIChqX2NvbXByZXNzX3B0ciBjaW5mbykKLXsKLSAgaWYgKGNpbmZvLT5taW5fRENUX2hfc2NhbGVkX3NpemUgIT0gY2luZm8tPm1pbl9EQ1Rfdl9zY2FsZWRfc2l6ZSkKLSAgICBFUlJFWElUMihjaW5mbywgSkVSUl9CQURfRENUU0laRSwKLQkgICAgIGNpbmZvLT5taW5fRENUX2hfc2NhbGVkX3NpemUsIGNpbmZvLT5taW5fRENUX3Zfc2NhbGVkX3NpemUpOwotCi0gIGNpbmZvLT5ibG9ja19zaXplID0gY2luZm8tPm1pbl9EQ1RfaF9zY2FsZWRfc2l6ZTsKLX0KKyNlbmRpZgogCiAKIExPQ0FMKHZvaWQpCiBpbml0aWFsX3NldHVwIChqX2NvbXByZXNzX3B0ciBjaW5mbywgYm9vbGVhbiB0cmFuc2NvZGVfb25seSkKIC8qIERvIGNvbXB1dGF0aW9ucyB0aGF0IGFyZSBuZWVkZWQgYmVmb3JlIG1hc3RlciBzZWxlY3Rpb24gcGhhc2UgKi8KIHsKLSAgaW50IGNpLCBzc2l6ZTsKKyAgaW50IGNpOwogICBqcGVnX2NvbXBvbmVudF9pbmZvICpjb21wcHRyOwogICBsb25nIHNhbXBsZXNwZXJyb3c7CiAgIEpESU1FTlNJT04gamRfc2FtcGxlc3BlcnJvdzsKIAotICBpZiAodHJhbnNjb2RlX29ubHkpCi0gICAganBlZ19jYWxjX3RyYW5zX2RpbWVuc2lvbnMoY2luZm8pOwotICBlbHNlCisjaWYgSlBFR19MSUJfVkVSU0lPTiA+PSA3MAorICBpZiAoIXRyYW5zY29kZV9vbmx5KQogICAgIGpwZWdfY2FsY19qcGVnX2RpbWVuc2lvbnMoY2luZm8pOwotCi0gIC8qIFNhbml0eSBjaGVjayBvbiBibG9ja19zaXplICovCi0gIGlmIChjaW5mby0+YmxvY2tfc2l6ZSA8IDEgfHwgY2luZm8tPmJsb2NrX3NpemUgPiAxNikKLSAgICBFUlJFWElUMihjaW5mbywgSkVSUl9CQURfRENUU0laRSwgY2luZm8tPmJsb2NrX3NpemUsIGNpbmZvLT5ibG9ja19zaXplKTsKLQotICAvKiBEZXJpdmUgbmF0dXJhbF9vcmRlciBmcm9tIGJsb2NrX3NpemUgKi8KLSAgc3dpdGNoIChjaW5mby0+YmxvY2tfc2l6ZSkgewotICBjYXNlIDI6IGNpbmZvLT5uYXR1cmFsX29yZGVyID0ganBlZ19uYXR1cmFsX29yZGVyMjsgYnJlYWs7Ci0gIGNhc2UgMzogY2luZm8tPm5hdHVyYWxfb3JkZXIgPSBqcGVnX25hdHVyYWxfb3JkZXIzOyBicmVhazsKLSAgY2FzZSA0OiBjaW5mby0+bmF0dXJhbF9vcmRlciA9IGpwZWdfbmF0dXJhbF9vcmRlcjQ7IGJyZWFrOwotICBjYXNlIDU6IGNpbmZvLT5uYXR1cmFsX29yZGVyID0ganBlZ19uYXR1cmFsX29yZGVyNTsgYnJlYWs7Ci0gIGNhc2UgNjogY2luZm8tPm5hdHVyYWxfb3JkZXIgPSBqcGVnX25hdHVyYWxfb3JkZXI2OyBicmVhazsKLSAgY2FzZSA3OiBjaW5mby0+bmF0dXJhbF9vcmRlciA9IGpwZWdfbmF0dXJhbF9vcmRlcjc7IGJyZWFrOwotICBkZWZhdWx0OiBjaW5mby0+bmF0dXJhbF9vcmRlciA9IGpwZWdfbmF0dXJhbF9vcmRlcjsgYnJlYWs7Ci0gIH0KLQotICAvKiBEZXJpdmUgbGltX1NlIGZyb20gYmxvY2tfc2l6ZSAqLwotICBjaW5mby0+bGltX1NlID0gY2luZm8tPmJsb2NrX3NpemUgPCBEQ1RTSVpFID8KLSAgICBjaW5mby0+YmxvY2tfc2l6ZSAqIGNpbmZvLT5ibG9ja19zaXplIC0gMSA6IERDVFNJWkUyLTE7CisjZW5kaWYKIAogICAvKiBTYW5pdHkgY2hlY2sgb24gaW1hZ2UgZGltZW5zaW9ucyAqLwotICBpZiAoY2luZm8tPmpwZWdfaGVpZ2h0IDw9IDAgfHwgY2luZm8tPmpwZWdfd2lkdGggPD0gMCB8fAotICAgICAgY2luZm8tPm51bV9jb21wb25lbnRzIDw9IDAgfHwgY2luZm8tPmlucHV0X2NvbXBvbmVudHMgPD0gMCkKKyAgaWYgKGNpbmZvLT5fanBlZ19oZWlnaHQgPD0gMCB8fCBjaW5mby0+X2pwZWdfd2lkdGggPD0gMAorICAgICAgfHwgY2luZm8tPm51bV9jb21wb25lbnRzIDw9IDAgfHwgY2luZm8tPmlucHV0X2NvbXBvbmVudHMgPD0gMCkKICAgICBFUlJFWElUKGNpbmZvLCBKRVJSX0VNUFRZX0lNQUdFKTsKIAogICAvKiBNYWtlIHN1cmUgaW1hZ2UgaXNuJ3QgYmlnZ2VyIHRoYW4gSSBjYW4gaGFuZGxlICovCi0gIGlmICgobG9uZykgY2luZm8tPmpwZWdfaGVpZ2h0ID4gKGxvbmcpIEpQRUdfTUFYX0RJTUVOU0lPTiB8fAotICAgICAgKGxvbmcpIGNpbmZvLT5qcGVnX3dpZHRoID4gKGxvbmcpIEpQRUdfTUFYX0RJTUVOU0lPTikKKyAgaWYgKChsb25nKSBjaW5mby0+X2pwZWdfaGVpZ2h0ID4gKGxvbmcpIEpQRUdfTUFYX0RJTUVOU0lPTiB8fAorICAgICAgKGxvbmcpIGNpbmZvLT5fanBlZ193aWR0aCA+IChsb25nKSBKUEVHX01BWF9ESU1FTlNJT04pCiAgICAgRVJSRVhJVDEoY2luZm8sIEpFUlJfSU1BR0VfVE9PX0JJRywgKHVuc2lnbmVkIGludCkgSlBFR19NQVhfRElNRU5TSU9OKTsKIAogICAvKiBXaWR0aCBvZiBhbiBpbnB1dCBzY2FubGluZSBtdXN0IGJlIHJlcHJlc2VudGFibGUgYXMgSkRJTUVOU0lPTi4gKi8KQEAgLTI5Myw1MiArMTIzLDI2IEBACiAgICAgICAgY2krKywgY29tcHB0cisrKSB7CiAgICAgLyogRmlsbCBpbiB0aGUgY29ycmVjdCBjb21wb25lbnRfaW5kZXggdmFsdWU7IGRvbid0IHJlbHkgb24gYXBwbGljYXRpb24gKi8KICAgICBjb21wcHRyLT5jb21wb25lbnRfaW5kZXggPSBjaTsKLSAgICAvKiBJbiBzZWxlY3RpbmcgdGhlIGFjdHVhbCBEQ1Qgc2NhbGluZyBmb3IgZWFjaCBjb21wb25lbnQsIHdlIHRyeSB0bwotICAgICAqIHNjYWxlIGRvd24gdGhlIGNocm9tYSBjb21wb25lbnRzIHZpYSBEQ1Qgc2NhbGluZyByYXRoZXIgdGhhbiBkb3duc2FtcGxpbmcuCi0gICAgICogVGhpcyBzYXZlcyB0aW1lIGlmIHRoZSBkb3duc2FtcGxlciBnZXRzIHRvIHVzZSAxOjEgc2NhbGluZy4KLSAgICAgKiBOb3RlIHRoaXMgY29kZSBhZGFwdHMgc3Vic2FtcGxpbmcgcmF0aW9zIHdoaWNoIGFyZSBwb3dlcnMgb2YgMi4KLSAgICAgKi8KLSAgICBzc2l6ZSA9IDE7Ci0jaWZkZWYgRENUX1NDQUxJTkdfU1VQUE9SVEVECi0gICAgd2hpbGUgKGNpbmZvLT5taW5fRENUX2hfc2NhbGVkX3NpemUgKiBzc2l6ZSA8PQotCSAgIChjaW5mby0+ZG9fZmFuY3lfZG93bnNhbXBsaW5nID8gRENUU0laRSA6IERDVFNJWkUgLyAyKSAmJgotCSAgIChjaW5mby0+bWF4X2hfc2FtcF9mYWN0b3IgJSAoY29tcHB0ci0+aF9zYW1wX2ZhY3RvciAqIHNzaXplICogMikpID09IDApIHsKLSAgICAgIHNzaXplID0gc3NpemUgKiAyOwotICAgIH0KKyAgICAvKiBGb3IgY29tcHJlc3Npb24sIHdlIG5ldmVyIGRvIERDVCBzY2FsaW5nLiAqLworI2lmIEpQRUdfTElCX1ZFUlNJT04gPj0gNzAKKyAgICBjb21wcHRyLT5EQ1RfaF9zY2FsZWRfc2l6ZSA9IGNvbXBwdHItPkRDVF92X3NjYWxlZF9zaXplID0gRENUU0laRTsKKyNlbHNlCisgICAgY29tcHB0ci0+RENUX3NjYWxlZF9zaXplID0gRENUU0laRTsKICNlbmRpZgotICAgIGNvbXBwdHItPkRDVF9oX3NjYWxlZF9zaXplID0gY2luZm8tPm1pbl9EQ1RfaF9zY2FsZWRfc2l6ZSAqIHNzaXplOwotICAgIHNzaXplID0gMTsKLSNpZmRlZiBEQ1RfU0NBTElOR19TVVBQT1JURUQKLSAgICB3aGlsZSAoY2luZm8tPm1pbl9EQ1Rfdl9zY2FsZWRfc2l6ZSAqIHNzaXplIDw9Ci0JICAgKGNpbmZvLT5kb19mYW5jeV9kb3duc2FtcGxpbmcgPyBEQ1RTSVpFIDogRENUU0laRSAvIDIpICYmCi0JICAgKGNpbmZvLT5tYXhfdl9zYW1wX2ZhY3RvciAlIChjb21wcHRyLT52X3NhbXBfZmFjdG9yICogc3NpemUgKiAyKSkgPT0gMCkgewotICAgICAgc3NpemUgPSBzc2l6ZSAqIDI7Ci0gICAgfQotI2VuZGlmCi0gICAgY29tcHB0ci0+RENUX3Zfc2NhbGVkX3NpemUgPSBjaW5mby0+bWluX0RDVF92X3NjYWxlZF9zaXplICogc3NpemU7Ci0KLSAgICAvKiBXZSBkb24ndCBzdXBwb3J0IERDVCByYXRpb3MgbGFyZ2VyIHRoYW4gMi4gKi8KLSAgICBpZiAoY29tcHB0ci0+RENUX2hfc2NhbGVkX3NpemUgPiBjb21wcHRyLT5EQ1Rfdl9zY2FsZWRfc2l6ZSAqIDIpCi0JY29tcHB0ci0+RENUX2hfc2NhbGVkX3NpemUgPSBjb21wcHRyLT5EQ1Rfdl9zY2FsZWRfc2l6ZSAqIDI7Ci0gICAgZWxzZSBpZiAoY29tcHB0ci0+RENUX3Zfc2NhbGVkX3NpemUgPiBjb21wcHRyLT5EQ1RfaF9zY2FsZWRfc2l6ZSAqIDIpCi0JY29tcHB0ci0+RENUX3Zfc2NhbGVkX3NpemUgPSBjb21wcHRyLT5EQ1RfaF9zY2FsZWRfc2l6ZSAqIDI7Ci0KICAgICAvKiBTaXplIGluIERDVCBibG9ja3MgKi8KICAgICBjb21wcHRyLT53aWR0aF9pbl9ibG9ja3MgPSAoSkRJTUVOU0lPTikKLSAgICAgIGpkaXZfcm91bmRfdXAoKGxvbmcpIGNpbmZvLT5qcGVnX3dpZHRoICogKGxvbmcpIGNvbXBwdHItPmhfc2FtcF9mYWN0b3IsCi0JCSAgICAobG9uZykgKGNpbmZvLT5tYXhfaF9zYW1wX2ZhY3RvciAqIGNpbmZvLT5ibG9ja19zaXplKSk7CisgICAgICBqZGl2X3JvdW5kX3VwKChsb25nKSBjaW5mby0+X2pwZWdfd2lkdGggKiAobG9uZykgY29tcHB0ci0+aF9zYW1wX2ZhY3RvciwKKwkJICAgIChsb25nKSAoY2luZm8tPm1heF9oX3NhbXBfZmFjdG9yICogRENUU0laRSkpOwogICAgIGNvbXBwdHItPmhlaWdodF9pbl9ibG9ja3MgPSAoSkRJTUVOU0lPTikKLSAgICAgIGpkaXZfcm91bmRfdXAoKGxvbmcpIGNpbmZvLT5qcGVnX2hlaWdodCAqIChsb25nKSBjb21wcHRyLT52X3NhbXBfZmFjdG9yLAotCQkgICAgKGxvbmcpIChjaW5mby0+bWF4X3Zfc2FtcF9mYWN0b3IgKiBjaW5mby0+YmxvY2tfc2l6ZSkpOworICAgICAgamRpdl9yb3VuZF91cCgobG9uZykgY2luZm8tPl9qcGVnX2hlaWdodCAqIChsb25nKSBjb21wcHRyLT52X3NhbXBfZmFjdG9yLAorCQkgICAgKGxvbmcpIChjaW5mby0+bWF4X3Zfc2FtcF9mYWN0b3IgKiBEQ1RTSVpFKSk7CiAgICAgLyogU2l6ZSBpbiBzYW1wbGVzICovCiAgICAgY29tcHB0ci0+ZG93bnNhbXBsZWRfd2lkdGggPSAoSkRJTUVOU0lPTikKLSAgICAgIGpkaXZfcm91bmRfdXAoKGxvbmcpIGNpbmZvLT5qcGVnX3dpZHRoICoKLQkJICAgIChsb25nKSAoY29tcHB0ci0+aF9zYW1wX2ZhY3RvciAqIGNvbXBwdHItPkRDVF9oX3NjYWxlZF9zaXplKSwKLQkJICAgIChsb25nKSAoY2luZm8tPm1heF9oX3NhbXBfZmFjdG9yICogY2luZm8tPmJsb2NrX3NpemUpKTsKKyAgICAgIGpkaXZfcm91bmRfdXAoKGxvbmcpIGNpbmZvLT5fanBlZ193aWR0aCAqIChsb25nKSBjb21wcHRyLT5oX3NhbXBfZmFjdG9yLAorCQkgICAgKGxvbmcpIGNpbmZvLT5tYXhfaF9zYW1wX2ZhY3Rvcik7CiAgICAgY29tcHB0ci0+ZG93bnNhbXBsZWRfaGVpZ2h0ID0gKEpESU1FTlNJT04pCi0gICAgICBqZGl2X3JvdW5kX3VwKChsb25nKSBjaW5mby0+anBlZ19oZWlnaHQgKgotCQkgICAgKGxvbmcpIChjb21wcHRyLT52X3NhbXBfZmFjdG9yICogY29tcHB0ci0+RENUX3Zfc2NhbGVkX3NpemUpLAotCQkgICAgKGxvbmcpIChjaW5mby0+bWF4X3Zfc2FtcF9mYWN0b3IgKiBjaW5mby0+YmxvY2tfc2l6ZSkpOworICAgICAgamRpdl9yb3VuZF91cCgobG9uZykgY2luZm8tPl9qcGVnX2hlaWdodCAqIChsb25nKSBjb21wcHRyLT52X3NhbXBfZmFjdG9yLAorCQkgICAgKGxvbmcpIGNpbmZvLT5tYXhfdl9zYW1wX2ZhY3Rvcik7CiAgICAgLyogTWFyayBjb21wb25lbnQgbmVlZGVkICh0aGlzIGZsYWcgaXNuJ3QgYWN0dWFsbHkgdXNlZCBmb3IgY29tcHJlc3Npb24pICovCiAgICAgY29tcHB0ci0+Y29tcG9uZW50X25lZWRlZCA9IFRSVUU7CiAgIH0KQEAgLTM0Nyw4ICsxNTEsOCBAQAogICAgKiBtYWluIGNvbnRyb2xsZXIgd2lsbCBjYWxsIGNvZWZmaWNpZW50IGNvbnRyb2xsZXIpLgogICAgKi8KICAgY2luZm8tPnRvdGFsX2lNQ1Vfcm93cyA9IChKRElNRU5TSU9OKQotICAgIGpkaXZfcm91bmRfdXAoKGxvbmcpIGNpbmZvLT5qcGVnX2hlaWdodCwKLQkJICAobG9uZykgKGNpbmZvLT5tYXhfdl9zYW1wX2ZhY3RvciAqIGNpbmZvLT5ibG9ja19zaXplKSk7CisgICAgamRpdl9yb3VuZF91cCgobG9uZykgY2luZm8tPl9qcGVnX2hlaWdodCwKKwkJICAobG9uZykgKGNpbmZvLT5tYXhfdl9zYW1wX2ZhY3RvcipEQ1RTSVpFKSk7CiB9CiAKIApAQCAtNDg4LDM5ICsyOTIsNiBAQAogICB9CiB9CiAKLQotTE9DQUwodm9pZCkKLXJlZHVjZV9zY3JpcHQgKGpfY29tcHJlc3NfcHRyIGNpbmZvKQotLyogQWRhcHQgc2NhbiBzY3JpcHQgZm9yIHVzZSB3aXRoIHJlZHVjZWQgYmxvY2sgc2l6ZTsKLSAqIGFzc3VtZSB0aGF0IHNjcmlwdCBoYXMgYmVlbiB2YWxpZGF0ZWQgYmVmb3JlLgotICovCi17Ci0gIGpwZWdfc2Nhbl9pbmZvICogc2NhbnB0cjsKLSAgaW50IGlkeG91dCwgaWR4aW47Ci0KLSAgLyogQ2lyY3VtdmVudCBjb25zdCBkZWNsYXJhdGlvbiBmb3IgdGhpcyBmdW5jdGlvbiAqLwotICBzY2FucHRyID0gKGpwZWdfc2Nhbl9pbmZvICopIGNpbmZvLT5zY2FuX2luZm87Ci0gIGlkeG91dCA9IDA7Ci0KLSAgZm9yIChpZHhpbiA9IDA7IGlkeGluIDwgY2luZm8tPm51bV9zY2FuczsgaWR4aW4rKykgewotICAgIC8qIEFmdGVyIHNraXBwaW5nLCBpZHhvdXQgYmVjb21lcyBzbWFsbGVyIHRoYW4gaWR4aW4gKi8KLSAgICBpZiAoaWR4aW4gIT0gaWR4b3V0KQotICAgICAgLyogQ29weSByZXN0IG9mIGRhdGE7Ci0gICAgICAgKiBub3RlIHdlIHN0YXkgaW4gZ2l2ZW4gY2h1bmsgb2YgYWxsb2NhdGVkIG1lbW9yeS4KLSAgICAgICAqLwotICAgICAgc2NhbnB0cltpZHhvdXRdID0gc2NhbnB0cltpZHhpbl07Ci0gICAgaWYgKHNjYW5wdHJbaWR4b3V0XS5TcyA+IGNpbmZvLT5saW1fU2UpCi0gICAgICAvKiBFbnRpcmUgc2NhbiBvdXQgb2YgcmFuZ2UgLSBza2lwIHRoaXMgZW50cnkgKi8KLSAgICAgIGNvbnRpbnVlOwotICAgIGlmIChzY2FucHRyW2lkeG91dF0uU2UgPiBjaW5mby0+bGltX1NlKQotICAgICAgLyogTGltaXQgc2NhbiB0byBlbmQgb2YgYmxvY2sgKi8KLSAgICAgIHNjYW5wdHJbaWR4b3V0XS5TZSA9IGNpbmZvLT5saW1fU2U7Ci0gICAgaWR4b3V0Kys7Ci0gIH0KLQotICBjaW5mby0+bnVtX3NjYW5zID0gaWR4b3V0OwotfQotCiAjZW5kaWYgLyogQ19NVUxUSVNDQU5fRklMRVNfU1VQUE9SVEVEICovCiAKIApAQCAtNTQxLDEzICszMTIsMTAgQEAKICAgICAgIGNpbmZvLT5jdXJfY29tcF9pbmZvW2NpXSA9CiAJJmNpbmZvLT5jb21wX2luZm9bc2NhbnB0ci0+Y29tcG9uZW50X2luZGV4W2NpXV07CiAgICAgfQotICAgIGlmIChjaW5mby0+cHJvZ3Jlc3NpdmVfbW9kZSkgewotICAgICAgY2luZm8tPlNzID0gc2NhbnB0ci0+U3M7Ci0gICAgICBjaW5mby0+U2UgPSBzY2FucHRyLT5TZTsKLSAgICAgIGNpbmZvLT5BaCA9IHNjYW5wdHItPkFoOwotICAgICAgY2luZm8tPkFsID0gc2NhbnB0ci0+QWw7Ci0gICAgICByZXR1cm47Ci0gICAgfQorICAgIGNpbmZvLT5TcyA9IHNjYW5wdHItPlNzOworICAgIGNpbmZvLT5TZSA9IHNjYW5wdHItPlNlOworICAgIGNpbmZvLT5BaCA9IHNjYW5wdHItPkFoOworICAgIGNpbmZvLT5BbCA9IHNjYW5wdHItPkFsOwogICB9CiAgIGVsc2UKICNlbmRpZgpAQCAtNTYwLDExICszMjgsMTEgQEAKICAgICBmb3IgKGNpID0gMDsgY2kgPCBjaW5mby0+bnVtX2NvbXBvbmVudHM7IGNpKyspIHsKICAgICAgIGNpbmZvLT5jdXJfY29tcF9pbmZvW2NpXSA9ICZjaW5mby0+Y29tcF9pbmZvW2NpXTsKICAgICB9CisgICAgY2luZm8tPlNzID0gMDsKKyAgICBjaW5mby0+U2UgPSBEQ1RTSVpFMi0xOworICAgIGNpbmZvLT5BaCA9IDA7CisgICAgY2luZm8tPkFsID0gMDsKICAgfQotICBjaW5mby0+U3MgPSAwOwotICBjaW5mby0+U2UgPSBjaW5mby0+YmxvY2tfc2l6ZSAqIGNpbmZvLT5ibG9ja19zaXplIC0gMTsKLSAgY2luZm8tPkFoID0gMDsKLSAgY2luZm8tPkFsID0gMDsKIH0KIAogCkBAIC01ODksNyArMzU3LDcgQEAKICAgICBjb21wcHRyLT5NQ1Vfd2lkdGggPSAxOwogICAgIGNvbXBwdHItPk1DVV9oZWlnaHQgPSAxOwogICAgIGNvbXBwdHItPk1DVV9ibG9ja3MgPSAxOwotICAgIGNvbXBwdHItPk1DVV9zYW1wbGVfd2lkdGggPSBjb21wcHRyLT5EQ1RfaF9zY2FsZWRfc2l6ZTsKKyAgICBjb21wcHRyLT5NQ1Vfc2FtcGxlX3dpZHRoID0gRENUU0laRTsKICAgICBjb21wcHRyLT5sYXN0X2NvbF93aWR0aCA9IDE7CiAgICAgLyogRm9yIG5vbmludGVybGVhdmVkIHNjYW5zLCBpdCBpcyBjb252ZW5pZW50IHRvIGRlZmluZSBsYXN0X3Jvd19oZWlnaHQKICAgICAgKiBhcyB0aGUgbnVtYmVyIG9mIGJsb2NrIHJvd3MgcHJlc2VudCBpbiB0aGUgbGFzdCBpTUNVIHJvdy4KQEAgLTYxMSwxMSArMzc5LDExIEBACiAgICAgCiAgICAgLyogT3ZlcmFsbCBpbWFnZSBzaXplIGluIE1DVXMgKi8KICAgICBjaW5mby0+TUNVc19wZXJfcm93ID0gKEpESU1FTlNJT04pCi0gICAgICBqZGl2X3JvdW5kX3VwKChsb25nKSBjaW5mby0+anBlZ193aWR0aCwKLQkJICAgIChsb25nKSAoY2luZm8tPm1heF9oX3NhbXBfZmFjdG9yICogY2luZm8tPmJsb2NrX3NpemUpKTsKKyAgICAgIGpkaXZfcm91bmRfdXAoKGxvbmcpIGNpbmZvLT5fanBlZ193aWR0aCwKKwkJICAgIChsb25nKSAoY2luZm8tPm1heF9oX3NhbXBfZmFjdG9yKkRDVFNJWkUpKTsKICAgICBjaW5mby0+TUNVX3Jvd3NfaW5fc2NhbiA9IChKRElNRU5TSU9OKQotICAgICAgamRpdl9yb3VuZF91cCgobG9uZykgY2luZm8tPmpwZWdfaGVpZ2h0LAotCQkgICAgKGxvbmcpIChjaW5mby0+bWF4X3Zfc2FtcF9mYWN0b3IgKiBjaW5mby0+YmxvY2tfc2l6ZSkpOworICAgICAgamRpdl9yb3VuZF91cCgobG9uZykgY2luZm8tPl9qcGVnX2hlaWdodCwKKwkJICAgIChsb25nKSAoY2luZm8tPm1heF92X3NhbXBfZmFjdG9yKkRDVFNJWkUpKTsKICAgICAKICAgICBjaW5mby0+YmxvY2tzX2luX01DVSA9IDA7CiAgICAgCkBAIC02MjUsNyArMzkzLDcgQEAKICAgICAgIGNvbXBwdHItPk1DVV93aWR0aCA9IGNvbXBwdHItPmhfc2FtcF9mYWN0b3I7CiAgICAgICBjb21wcHRyLT5NQ1VfaGVpZ2h0ID0gY29tcHB0ci0+dl9zYW1wX2ZhY3RvcjsKICAgICAgIGNvbXBwdHItPk1DVV9ibG9ja3MgPSBjb21wcHRyLT5NQ1Vfd2lkdGggKiBjb21wcHRyLT5NQ1VfaGVpZ2h0OwotICAgICAgY29tcHB0ci0+TUNVX3NhbXBsZV93aWR0aCA9IGNvbXBwdHItPk1DVV93aWR0aCAqIGNvbXBwdHItPkRDVF9oX3NjYWxlZF9zaXplOworICAgICAgY29tcHB0ci0+TUNVX3NhbXBsZV93aWR0aCA9IGNvbXBwdHItPk1DVV93aWR0aCAqIERDVFNJWkU7CiAgICAgICAvKiBGaWd1cmUgbnVtYmVyIG9mIG5vbi1kdW1teSBibG9ja3MgaW4gbGFzdCBNQ1UgY29sdW1uICYgcm93ICovCiAgICAgICB0bXAgPSAoaW50KSAoY29tcHB0ci0+d2lkdGhfaW5fYmxvY2tzICUgY29tcHB0ci0+TUNVX3dpZHRoKTsKICAgICAgIGlmICh0bXAgPT0gMCkgdG1wID0gY29tcHB0ci0+TUNVX3dpZHRoOwpAQCAtNjk3LDcgKzQ2NSw3IEBACiAgICAgLyogRG8gSHVmZm1hbiBvcHRpbWl6YXRpb24gZm9yIGEgc2NhbiBhZnRlciB0aGUgZmlyc3Qgb25lLiAqLwogICAgIHNlbGVjdF9zY2FuX3BhcmFtZXRlcnMoY2luZm8pOwogICAgIHBlcl9zY2FuX3NldHVwKGNpbmZvKTsKLSAgICBpZiAoY2luZm8tPlNzICE9IDAgfHwgY2luZm8tPkFoID09IDApIHsKKyAgICBpZiAoY2luZm8tPlNzICE9IDAgfHwgY2luZm8tPkFoID09IDAgfHwgY2luZm8tPmFyaXRoX2NvZGUpIHsKICAgICAgICgqY2luZm8tPmVudHJvcHktPnN0YXJ0X3Bhc3MpIChjaW5mbywgVFJVRSk7CiAgICAgICAoKmNpbmZvLT5jb2VmLT5zdGFydF9wYXNzKSAoY2luZm8sIEpCVUZfQ1JBTktfREVTVCk7CiAgICAgICBtYXN0ZXItPnB1Yi5jYWxsX3Bhc3Nfc3RhcnR1cCA9IEZBTFNFOwpAQCAtODIzLDggKzU5MSw2IEBACiAgIGlmIChjaW5mby0+c2Nhbl9pbmZvICE9IE5VTEwpIHsKICNpZmRlZiBDX01VTFRJU0NBTl9GSUxFU19TVVBQT1JURUQKICAgICB2YWxpZGF0ZV9zY3JpcHQoY2luZm8pOwotICAgIGlmIChjaW5mby0+YmxvY2tfc2l6ZSA8IERDVFNJWkUpCi0gICAgICByZWR1Y2Vfc2NyaXB0KGNpbmZvKTsKICNlbHNlCiAgICAgRVJSRVhJVChjaW5mbywgSkVSUl9OT1RfQ09NUElMRUQpOwogI2VuZGlmCkBAIC04MzMsMTAgKzU5OSw4IEBACiAgICAgY2luZm8tPm51bV9zY2FucyA9IDE7CiAgIH0KIAotICBpZiAoKGNpbmZvLT5wcm9ncmVzc2l2ZV9tb2RlIHx8IGNpbmZvLT5ibG9ja19zaXplIDwgRENUU0laRSkgJiYKLSAgICAgICFjaW5mby0+YXJpdGhfY29kZSkJCQkvKiAgVEVNUE9SQVJZIEhBQ0sgPz8/ICovCi0gICAgLyogYXNzdW1lIGRlZmF1bHQgdGFibGVzIG5vIGdvb2QgZm9yIHByb2dyZXNzaXZlIG9yIGRvd25zY2FsZSBtb2RlICovCi0gICAgY2luZm8tPm9wdGltaXplX2NvZGluZyA9IFRSVUU7CisgIGlmIChjaW5mby0+cHJvZ3Jlc3NpdmVfbW9kZSkJLyogIFRFTVBPUkFSWSBIQUNLID8/PyAqLworICAgIGNpbmZvLT5vcHRpbWl6ZV9jb2RpbmcgPSBUUlVFOyAvKiBhc3N1bWUgZGVmYXVsdCB0YWJsZXMgbm8gZ29vZCBmb3IgcHJvZ3Jlc3NpdmUgbW9kZSAqLwogCiAgIC8qIEluaXRpYWxpemUgbXkgcHJpdmF0ZSBzdGF0ZSAqLwogICBpZiAodHJhbnNjb2RlX29ubHkpIHsKZGlmZiAtLWdpdCBhL2pjb25maWcuYmNjIGIvamNvbmZpZy5iY2MKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGU0ZGEzZDcuLjAwMDAwMDAKLS0tIGEvamNvbmZpZy5iY2MKKysrIC9kZXYvbnVsbApAQCAtMSw0OCArMCwwIEBACi0vKiBqY29uZmlnLmJjYyAtLS0gamNvbmZpZy5oIGZvciBCb3JsYW5kIEMgKFR1cmJvIEMpIG9uIE1TLURPUyBvciBPUy8yLiAqLwotLyogc2VlIGpjb25maWcudHh0IGZvciBleHBsYW5hdGlvbnMgKi8KLQotI2RlZmluZSBIQVZFX1BST1RPVFlQRVMKLSNkZWZpbmUgSEFWRV9VTlNJR05FRF9DSEFSCi0jZGVmaW5lIEhBVkVfVU5TSUdORURfU0hPUlQKLS8qICNkZWZpbmUgdm9pZCBjaGFyICovCi0vKiAjZGVmaW5lIGNvbnN0ICovCi0jdW5kZWYgQ0hBUl9JU19VTlNJR05FRAotI2RlZmluZSBIQVZFX1NURERFRl9ICi0jZGVmaW5lIEhBVkVfU1RETElCX0gKLSN1bmRlZiBORUVEX0JTRF9TVFJJTkdTCi0jdW5kZWYgTkVFRF9TWVNfVFlQRVNfSAotI2lmZGVmIF9fTVNET1NfXwotI2RlZmluZSBORUVEX0ZBUl9QT0lOVEVSUwkvKiBmb3Igc21hbGwgb3IgbWVkaXVtIG1lbW9yeSBtb2RlbCAqLwotI2VuZGlmCi0jdW5kZWYgTkVFRF9TSE9SVF9FWFRFUk5BTF9OQU1FUwotI3VuZGVmIElOQ09NUExFVEVfVFlQRVNfQlJPS0VOCS8qIHRoaXMgYXNzdW1lcyB5b3UgaGF2ZSAtdy1zdHUgaW4gQ0ZMQUdTICovCi0KLSNpZmRlZiBKUEVHX0lOVEVSTkFMUwotCi0jdW5kZWYgUklHSFRfU0hJRlRfSVNfVU5TSUdORUQKLQotI2lmZGVmIF9fTVNET1NfXwotI2RlZmluZSBVU0VfTVNET1NfTUVNTUdSCS8qIERlZmluZSB0aGlzIGlmIHlvdSB1c2Ugam1lbWRvcy5jICovCi0jZGVmaW5lIE1BWF9BTExPQ19DSFVOSyA2NTUyMEwJLyogTWF4aW11bSByZXF1ZXN0IHRvIG1hbGxvYygpICovCi0jZGVmaW5lIFVTRV9GTUVNCQkvKiBCb3JsYW5kIGhhcyBfZm1lbWNweSgpIGFuZCBfZm1lbXNldCgpICovCi0jZW5kaWYKLQotI2VuZGlmIC8qIEpQRUdfSU5URVJOQUxTICovCi0KLSNpZmRlZiBKUEVHX0NKUEVHX0RKUEVHCi0KLSNkZWZpbmUgQk1QX1NVUFBPUlRFRAkJLyogQk1QIGltYWdlIGZpbGUgZm9ybWF0ICovCi0jZGVmaW5lIEdJRl9TVVBQT1JURUQJCS8qIEdJRiBpbWFnZSBmaWxlIGZvcm1hdCAqLwotI2RlZmluZSBQUE1fU1VQUE9SVEVECQkvKiBQQk1QTFVTIFBQTS9QR00gaW1hZ2UgZmlsZSBmb3JtYXQgKi8KLSN1bmRlZiBSTEVfU1VQUE9SVEVECQkvKiBVdGFoIFJMRSBpbWFnZSBmaWxlIGZvcm1hdCAqLwotI2RlZmluZSBUQVJHQV9TVVBQT1JURUQJCS8qIFRhcmdhIGltYWdlIGZpbGUgZm9ybWF0ICovCi0KLSNkZWZpbmUgVFdPX0ZJTEVfQ09NTUFORExJTkUKLSNkZWZpbmUgVVNFX1NFVE1PREUJCS8qIEJvcmxhbmQgaGFzIHNldG1vZGUoKSAqLwotI2lmZGVmIF9fTVNET1NfXwotI2RlZmluZSBORUVEX1NJR05BTF9DQVRDSEVSCS8qIERlZmluZSB0aGlzIGlmIHlvdSB1c2Ugam1lbWRvcy5jICovCi0jZW5kaWYKLSN1bmRlZiBET05UX1VTRV9CX01PREUKLSN1bmRlZiBQUk9HUkVTU19SRVBPUlQJCS8qIG9wdGlvbmFsICovCi0KLSNlbmRpZiAvKiBKUEVHX0NKUEVHX0RKUEVHICovCmRpZmYgLS1naXQgYS9qY29uZmlnLmNmZyBiL2pjb25maWcuY2ZnCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiYjc0MzVjLi4wMDAwMDAwCi0tLSBhL2pjb25maWcuY2ZnCisrKyAvZGV2L251bGwKQEAgLTEsNTMgKzAsMCBAQAotLyogamNvbmZpZy5jZmcgLS0tIHNvdXJjZSBmaWxlIGVkaXRlZCBieSBjb25maWd1cmUgc2NyaXB0ICovCi0vKiBzZWUgamNvbmZpZy50eHQgZm9yIGV4cGxhbmF0aW9ucyAqLwotCi0jdW5kZWYgSEFWRV9QUk9UT1RZUEVTCi0jdW5kZWYgSEFWRV9VTlNJR05FRF9DSEFSCi0jdW5kZWYgSEFWRV9VTlNJR05FRF9TSE9SVAotI3VuZGVmIHZvaWQKLSN1bmRlZiBjb25zdAotI3VuZGVmIENIQVJfSVNfVU5TSUdORUQKLSN1bmRlZiBIQVZFX1NURERFRl9ICi0jdW5kZWYgSEFWRV9TVERMSUJfSAotI3VuZGVmIEhBVkVfTE9DQUxFX0gKLSN1bmRlZiBORUVEX0JTRF9TVFJJTkdTCi0jdW5kZWYgTkVFRF9TWVNfVFlQRVNfSAotI3VuZGVmIE5FRURfRkFSX1BPSU5URVJTCi0jdW5kZWYgTkVFRF9TSE9SVF9FWFRFUk5BTF9OQU1FUwotLyogRGVmaW5lIHRoaXMgaWYgeW91IGdldCB3YXJuaW5ncyBhYm91dCB1bmRlZmluZWQgc3RydWN0dXJlcy4gKi8KLSN1bmRlZiBJTkNPTVBMRVRFX1RZUEVTX0JST0tFTgotCi0vKiBEZWZpbmUgImJvb2xlYW4iIGFzIHVuc2lnbmVkIGNoYXIsIG5vdCBpbnQsIG9uIFdpbmRvd3Mgc3lzdGVtcy4gKi8KLSNpZmRlZiBfV0lOMzIKLSNpZm5kZWYgX19SUENORFJfSF9fCQkvKiBkb24ndCBjb25mbGljdCBpZiBycGNuZHIuaCBhbHJlYWR5IHJlYWQgKi8KLXR5cGVkZWYgdW5zaWduZWQgY2hhciBib29sZWFuOwotI2VuZGlmCi0jZGVmaW5lIEhBVkVfQk9PTEVBTgkJLyogcHJldmVudCBqbW9yZWNmZy5oIGZyb20gcmVkZWZpbmluZyBpdCAqLwotI2VuZGlmCi0KLSNpZmRlZiBKUEVHX0lOVEVSTkFMUwotCi0jdW5kZWYgUklHSFRfU0hJRlRfSVNfVU5TSUdORUQKLSN1bmRlZiBJTkxJTkUKLS8qIFRoZXNlIGFyZSBmb3IgY29uZmlndXJpbmcgdGhlIEpQRUcgbWVtb3J5IG1hbmFnZXIuICovCi0jdW5kZWYgREVGQVVMVF9NQVhfTUVNCi0jdW5kZWYgTk9fTUtURU1QCi0KLSNlbmRpZiAvKiBKUEVHX0lOVEVSTkFMUyAqLwotCi0jaWZkZWYgSlBFR19DSlBFR19ESlBFRwotCi0jZGVmaW5lIEJNUF9TVVBQT1JURUQJCS8qIEJNUCBpbWFnZSBmaWxlIGZvcm1hdCAqLwotI2RlZmluZSBHSUZfU1VQUE9SVEVECQkvKiBHSUYgaW1hZ2UgZmlsZSBmb3JtYXQgKi8KLSNkZWZpbmUgUFBNX1NVUFBPUlRFRAkJLyogUEJNUExVUyBQUE0vUEdNIGltYWdlIGZpbGUgZm9ybWF0ICovCi0jdW5kZWYgUkxFX1NVUFBPUlRFRAkJLyogVXRhaCBSTEUgaW1hZ2UgZmlsZSBmb3JtYXQgKi8KLSNkZWZpbmUgVEFSR0FfU1VQUE9SVEVECQkvKiBUYXJnYSBpbWFnZSBmaWxlIGZvcm1hdCAqLwotCi0jdW5kZWYgVFdPX0ZJTEVfQ09NTUFORExJTkUKLSN1bmRlZiBORUVEX1NJR05BTF9DQVRDSEVSCi0jdW5kZWYgRE9OVF9VU0VfQl9NT0RFCi0KLS8qIERlZmluZSB0aGlzIGlmIHlvdSB3YW50IHBlcmNlbnQtZG9uZSBwcm9ncmVzcyByZXBvcnRzIGZyb20gY2pwZWcvZGpwZWcuICovCi0jdW5kZWYgUFJPR1JFU1NfUkVQT1JUCi0KLSNlbmRpZiAvKiBKUEVHX0NKUEVHX0RKUEVHICovCmRpZmYgLS1naXQgYS9qY29uZmlnLmRqIGIvamNvbmZpZy5kagpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYTBkNDA5Mi4uMDAwMDAwMAotLS0gYS9qY29uZmlnLmRqCisrKyAvZGV2L251bGwKQEAgLTEsMzggKzAsMCBAQAotLyogamNvbmZpZy5kaiAtLS0gamNvbmZpZy5oIGZvciBESkdQUCAoRGVsb3JpZSdzIEdOVSBDIHBvcnQpIG9uIE1TLURPUy4gKi8KLS8qIHNlZSBqY29uZmlnLnR4dCBmb3IgZXhwbGFuYXRpb25zICovCi0KLSNkZWZpbmUgSEFWRV9QUk9UT1RZUEVTCi0jZGVmaW5lIEhBVkVfVU5TSUdORURfQ0hBUgotI2RlZmluZSBIQVZFX1VOU0lHTkVEX1NIT1JUCi0vKiAjZGVmaW5lIHZvaWQgY2hhciAqLwotLyogI2RlZmluZSBjb25zdCAqLwotI3VuZGVmIENIQVJfSVNfVU5TSUdORUQKLSNkZWZpbmUgSEFWRV9TVERERUZfSAotI2RlZmluZSBIQVZFX1NURExJQl9ICi0jdW5kZWYgTkVFRF9CU0RfU1RSSU5HUwotI3VuZGVmIE5FRURfU1lTX1RZUEVTX0gKLSN1bmRlZiBORUVEX0ZBUl9QT0lOVEVSUwkvKiBESkdQUCB1c2VzIGZsYXQgMzItYml0IGFkZHJlc3NpbmcgKi8KLSN1bmRlZiBORUVEX1NIT1JUX0VYVEVSTkFMX05BTUVTCi0jdW5kZWYgSU5DT01QTEVURV9UWVBFU19CUk9LRU4KLQotI2lmZGVmIEpQRUdfSU5URVJOQUxTCi0KLSN1bmRlZiBSSUdIVF9TSElGVF9JU19VTlNJR05FRAotCi0jZW5kaWYgLyogSlBFR19JTlRFUk5BTFMgKi8KLQotI2lmZGVmIEpQRUdfQ0pQRUdfREpQRUcKLQotI2RlZmluZSBCTVBfU1VQUE9SVEVECQkvKiBCTVAgaW1hZ2UgZmlsZSBmb3JtYXQgKi8KLSNkZWZpbmUgR0lGX1NVUFBPUlRFRAkJLyogR0lGIGltYWdlIGZpbGUgZm9ybWF0ICovCi0jZGVmaW5lIFBQTV9TVVBQT1JURUQJCS8qIFBCTVBMVVMgUFBNL1BHTSBpbWFnZSBmaWxlIGZvcm1hdCAqLwotI3VuZGVmIFJMRV9TVVBQT1JURUQJCS8qIFV0YWggUkxFIGltYWdlIGZpbGUgZm9ybWF0ICovCi0jZGVmaW5lIFRBUkdBX1NVUFBPUlRFRAkJLyogVGFyZ2EgaW1hZ2UgZmlsZSBmb3JtYXQgKi8KLQotI3VuZGVmIFRXT19GSUxFX0NPTU1BTkRMSU5FCS8qIG9wdGlvbmFsICovCi0jZGVmaW5lIFVTRV9TRVRNT0RFCQkvKiBOZWVkZWQgdG8gbWFrZSBvbmUtZmlsZSBzdHlsZSB3b3JrIGluIERKR1BQICovCi0jdW5kZWYgTkVFRF9TSUdOQUxfQ0FUQ0hFUgkvKiBEZWZpbmUgdGhpcyBpZiB5b3UgdXNlIGptZW1uYW1lLmMgKi8KLSN1bmRlZiBET05UX1VTRV9CX01PREUKLSN1bmRlZiBQUk9HUkVTU19SRVBPUlQJCS8qIG9wdGlvbmFsICovCi0KLSNlbmRpZiAvKiBKUEVHX0NKUEVHX0RKUEVHICovCmRpZmYgLS1naXQgYS9qY29uZmlnLmguaW4gYi9qY29uZmlnLmguaW4KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjcwYWZhYgotLS0gL2Rldi9udWxsCisrKyBiL2pjb25maWcuaC5pbgpAQCAtMCwwICsxLDYwIEBACisvKiBWZXJzaW9uIElEIGZvciB0aGUgSlBFRyBsaWJyYXJ5LgorICogTWlnaHQgYmUgdXNlZnVsIGZvciB0ZXN0cyBsaWtlICIjaWYgSlBFR19MSUJfVkVSU0lPTiA+PSA2MCIuCisgKi8KKyNkZWZpbmUgSlBFR19MSUJfVkVSU0lPTiAgNjIJLyogVmVyc2lvbiA2YiAqLworCisvKiBTdXBwb3J0IGFyaXRobWV0aWMgZW5jb2RpbmcgKi8KKyN1bmRlZiBDX0FSSVRIX0NPRElOR19TVVBQT1JURUQKKworLyogU3VwcG9ydCBhcml0aG1ldGljIGRlY29kaW5nICovCisjdW5kZWYgRF9BUklUSF9DT0RJTkdfU1VQUE9SVEVECisKKy8qIERlZmluZSBpZiB5b3VyIGNvbXBpbGVyIHN1cHBvcnRzIHByb3RvdHlwZXMgKi8KKyN1bmRlZiBIQVZFX1BST1RPVFlQRVMKKworLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIDxzdGRkZWYuaD4gaGVhZGVyIGZpbGUuICovCisjdW5kZWYgSEFWRV9TVERERUZfSAorCisvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgPHN0ZGxpYi5oPiBoZWFkZXIgZmlsZS4gKi8KKyN1bmRlZiBIQVZFX1NURExJQl9ICisKKy8qIERlZmluZSB0byAxIGlmIHRoZSBzeXN0ZW0gaGFzIHRoZSB0eXBlIGB1bnNpZ25lZCBjaGFyJy4gKi8KKyN1bmRlZiBIQVZFX1VOU0lHTkVEX0NIQVIKKworLyogRGVmaW5lIHRvIDEgaWYgdGhlIHN5c3RlbSBoYXMgdGhlIHR5cGUgYHVuc2lnbmVkIHNob3J0Jy4gKi8KKyN1bmRlZiBIQVZFX1VOU0lHTkVEX1NIT1JUCisKKy8qIERlZmluZSBpZiB5b3Ugd2FudCB1c2UgY29tcGxldGUgdHlwZXMgKi8KKyN1bmRlZiBJTkNPTVBMRVRFX1RZUEVTX0JST0tFTgorCisvKiBEZWZpbmUgaWYgeW91IGhhdmUgQlNELWxpa2UgYnplcm8gYW5kIGJjb3B5ICovCisjdW5kZWYgTkVFRF9CU0RfU1RSSU5HUworCisvKiBEZWZpbmUgaWYgeW91IG5lZWQgc2hvcnQgZnVuY3Rpb24gbmFtZXMgKi8KKyN1bmRlZiBORUVEX1NIT1JUX0VYVEVSTkFMX05BTUVTCisKKy8qIERlZmluZSBpZiB5b3UgaGF2ZSBzeXMvdHlwZXMuaCAqLworI3VuZGVmIE5FRURfU1lTX1RZUEVTX0gKKworLyogRGVmaW5lIGlmIHNoaWZ0IGlzIHVuc2lnbmVkICovCisjdW5kZWYgUklHSFRfU0hJRlRfSVNfVU5TSUdORUQKKworLyogVXNlIGFjY2VsZXJhdGVkIFNJTUQgcm91dGluZXMuICovCisjdW5kZWYgV0lUSF9TSU1ECisKKy8qIERlZmluZSB0byAxIGlmIHR5cGUgYGNoYXInIGlzIHVuc2lnbmVkIGFuZCB5b3UgYXJlIG5vdCB1c2luZyBnY2MuICAqLworI2lmbmRlZiBfX0NIQVJfVU5TSUdORURfXworIyB1bmRlZiBfX0NIQVJfVU5TSUdORURfXworI2VuZGlmCisKKy8qIERlZmluZSB0byBlbXB0eSBpZiBgY29uc3QnIGRvZXMgbm90IGNvbmZvcm0gdG8gQU5TSSBDLiAqLworI3VuZGVmIGNvbnN0CisKKy8qIERlZmluZSB0byBgX19pbmxpbmVfXycgb3IgYF9faW5saW5lJyBpZiB0aGF0J3Mgd2hhdCB0aGUgQyBjb21waWxlcgorICAgY2FsbHMgaXQsIG9yIHRvIG5vdGhpbmcgaWYgJ2lubGluZScgaXMgbm90IHN1cHBvcnRlZCB1bmRlciBhbnkgbmFtZS4gICovCisjaWZuZGVmIF9fY3BsdXNwbHVzCisjdW5kZWYgaW5saW5lCisjZW5kaWYKKworLyogRGVmaW5lIHRvIGB1bnNpZ25lZCBpbnQnIGlmIDxzeXMvdHlwZXMuaD4gZG9lcyBub3QgZGVmaW5lLiAqLworI3VuZGVmIHNpemVfdApkaWZmIC0tZ2l0IGEvamNvbmZpZy5tYWMgYi9qY29uZmlnLm1hYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNzBlZDY2Yy4uMDAwMDAwMAotLS0gYS9qY29uZmlnLm1hYworKysgL2Rldi9udWxsCkBAIC0xLDQzICswLDAgQEAKLS8qIGpjb25maWcubWFjIC0tLSBqY29uZmlnLmggZm9yIENvZGVXYXJyaW9yIG9uIEFwcGxlIE1hY2ludG9zaCAqLwotLyogc2VlIGpjb25maWcudHh0IGZvciBleHBsYW5hdGlvbnMgKi8KLQotI2RlZmluZSBIQVZFX1BST1RPVFlQRVMKLSNkZWZpbmUgSEFWRV9VTlNJR05FRF9DSEFSCi0jZGVmaW5lIEhBVkVfVU5TSUdORURfU0hPUlQKLS8qICNkZWZpbmUgdm9pZCBjaGFyICovCi0vKiAjZGVmaW5lIGNvbnN0ICovCi0jdW5kZWYgQ0hBUl9JU19VTlNJR05FRAotI2RlZmluZSBIQVZFX1NURERFRl9ICi0jZGVmaW5lIEhBVkVfU1RETElCX0gKLSN1bmRlZiBORUVEX0JTRF9TVFJJTkdTCi0jdW5kZWYgTkVFRF9TWVNfVFlQRVNfSAotI3VuZGVmIE5FRURfRkFSX1BPSU5URVJTCi0jdW5kZWYgTkVFRF9TSE9SVF9FWFRFUk5BTF9OQU1FUwotI3VuZGVmIElOQ09NUExFVEVfVFlQRVNfQlJPS0VOCi0KLSNpZmRlZiBKUEVHX0lOVEVSTkFMUwotCi0jdW5kZWYgUklHSFRfU0hJRlRfSVNfVU5TSUdORUQKLQotI2RlZmluZSBVU0VfTUFDX01FTU1HUgkJLyogRGVmaW5lIHRoaXMgaWYgeW91IHVzZSBqbWVtbWFjLmMgKi8KLQotI2RlZmluZSBBTElHTl9UWVBFIGxvbmcJCS8qIE5lZWRlZCBmb3IgNjgweDAgTWFjcyAqLwotCi0jZW5kaWYgLyogSlBFR19JTlRFUk5BTFMgKi8KLQotI2lmZGVmIEpQRUdfQ0pQRUdfREpQRUcKLQotI2RlZmluZSBCTVBfU1VQUE9SVEVECQkvKiBCTVAgaW1hZ2UgZmlsZSBmb3JtYXQgKi8KLSNkZWZpbmUgR0lGX1NVUFBPUlRFRAkJLyogR0lGIGltYWdlIGZpbGUgZm9ybWF0ICovCi0jZGVmaW5lIFBQTV9TVVBQT1JURUQJCS8qIFBCTVBMVVMgUFBNL1BHTSBpbWFnZSBmaWxlIGZvcm1hdCAqLwotI3VuZGVmIFJMRV9TVVBQT1JURUQJCS8qIFV0YWggUkxFIGltYWdlIGZpbGUgZm9ybWF0ICovCi0jZGVmaW5lIFRBUkdBX1NVUFBPUlRFRAkJLyogVGFyZ2EgaW1hZ2UgZmlsZSBmb3JtYXQgKi8KLQotI2RlZmluZSBVU0VfQ0NPTU1BTkQJCS8qIENvbW1hbmQgbGluZSByZWFkZXIgZm9yIE1hY2ludG9zaCAqLwotI2RlZmluZSBUV09fRklMRV9DT01NQU5ETElORQkvKiBCaW5hcnkgSS9PIHRocnUgc3RkaW4vc3Rkb3V0IGRvZXNuJ3Qgd29yayAqLwotCi0jdW5kZWYgTkVFRF9TSUdOQUxfQ0FUQ0hFUgotI3VuZGVmIERPTlRfVVNFX0JfTU9ERQotI3VuZGVmIFBST0dSRVNTX1JFUE9SVAkJLyogb3B0aW9uYWwgKi8KLQotI2VuZGlmIC8qIEpQRUdfQ0pQRUdfREpQRUcgKi8KZGlmZiAtLWdpdCBhL2pjb25maWcubWFueCBiL2pjb25maWcubWFueApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggY2Q1MjlkNy4uMDAwMDAwMAotLS0gYS9qY29uZmlnLm1hbngKKysrIC9kZXYvbnVsbApAQCAtMSw0MyArMCwwIEBACi0vKiBqY29uZmlnLm1hbnggLS0tIGpjb25maWcuaCBmb3IgQW1pZ2Egc3lzdGVtcyB1c2luZyBNYW54IEF6dGVjIEMgdmVyIDUueC4gKi8KLS8qIHNlZSBqY29uZmlnLnR4dCBmb3IgZXhwbGFuYXRpb25zICovCi0KLSNkZWZpbmUgSEFWRV9QUk9UT1RZUEVTCi0jZGVmaW5lIEhBVkVfVU5TSUdORURfQ0hBUgotI2RlZmluZSBIQVZFX1VOU0lHTkVEX1NIT1JUCi0vKiAjZGVmaW5lIHZvaWQgY2hhciAqLwotLyogI2RlZmluZSBjb25zdCAqLwotI3VuZGVmIENIQVJfSVNfVU5TSUdORUQKLSNkZWZpbmUgSEFWRV9TVERERUZfSAotI2RlZmluZSBIQVZFX1NURExJQl9ICi0jdW5kZWYgTkVFRF9CU0RfU1RSSU5HUwotI3VuZGVmIE5FRURfU1lTX1RZUEVTX0gKLSN1bmRlZiBORUVEX0ZBUl9QT0lOVEVSUwotI3VuZGVmIE5FRURfU0hPUlRfRVhURVJOQUxfTkFNRVMKLSN1bmRlZiBJTkNPTVBMRVRFX1RZUEVTX0JST0tFTgotCi0jaWZkZWYgSlBFR19JTlRFUk5BTFMKLQotI3VuZGVmIFJJR0hUX1NISUZUX0lTX1VOU0lHTkVECi0KLSNkZWZpbmUgVEVNUF9ESVJFQ1RPUlkgIkpQRUdUTVA6IgkvKiByZWNvbW1lbmRlZCBzZXR0aW5nIGZvciBBbWlnYSAqLwotCi0jZGVmaW5lIFNIT1JUeFNIT1JUXzMyCQkvKiBwcm9kdWNlcyBiZXR0ZXIgRENUIGNvZGUgd2l0aCBBenRlYyBDICovCi0KLSNlbmRpZiAvKiBKUEVHX0lOVEVSTkFMUyAqLwotCi0jaWZkZWYgSlBFR19DSlBFR19ESlBFRwotCi0jZGVmaW5lIEJNUF9TVVBQT1JURUQJCS8qIEJNUCBpbWFnZSBmaWxlIGZvcm1hdCAqLwotI2RlZmluZSBHSUZfU1VQUE9SVEVECQkvKiBHSUYgaW1hZ2UgZmlsZSBmb3JtYXQgKi8KLSNkZWZpbmUgUFBNX1NVUFBPUlRFRAkJLyogUEJNUExVUyBQUE0vUEdNIGltYWdlIGZpbGUgZm9ybWF0ICovCi0jdW5kZWYgUkxFX1NVUFBPUlRFRAkJLyogVXRhaCBSTEUgaW1hZ2UgZmlsZSBmb3JtYXQgKi8KLSNkZWZpbmUgVEFSR0FfU1VQUE9SVEVECQkvKiBUYXJnYSBpbWFnZSBmaWxlIGZvcm1hdCAqLwotCi0jZGVmaW5lIFRXT19GSUxFX0NPTU1BTkRMSU5FCi0jZGVmaW5lIE5FRURfU0lHTkFMX0NBVENIRVIKLSN1bmRlZiBET05UX1VTRV9CX01PREUKLSN1bmRlZiBQUk9HUkVTU19SRVBPUlQJCS8qIG9wdGlvbmFsICovCi0KLSNkZWZpbmUgc2lnbmFsX2NhdGNoZXIgX2Fib3J0CS8qIGhhY2sgZm9yIEF6dGVjIEMgbmFtaW5nIHJlcXVpcmVtZW50cyAqLwotCi0jZW5kaWYgLyogSlBFR19DSlBFR19ESlBFRyAqLwpkaWZmIC0tZ2l0IGEvamNvbmZpZy5tYzYgYi9qY29uZmlnLm1jNgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYWQ1NjUxYi4uMDAwMDAwMAotLS0gYS9qY29uZmlnLm1jNgorKysgL2Rldi9udWxsCkBAIC0xLDUyICswLDAgQEAKLS8qIGpjb25maWcubWM2IC0tLSBqY29uZmlnLmggZm9yIE1pY3Jvc29mdCBDIG9uIE1TLURPUywgdmVyc2lvbiA2LjAwQSAmIHVwLiAqLwotLyogc2VlIGpjb25maWcudHh0IGZvciBleHBsYW5hdGlvbnMgKi8KLQotI2RlZmluZSBIQVZFX1BST1RPVFlQRVMKLSNkZWZpbmUgSEFWRV9VTlNJR05FRF9DSEFSCi0jZGVmaW5lIEhBVkVfVU5TSUdORURfU0hPUlQKLS8qICNkZWZpbmUgdm9pZCBjaGFyICovCi0vKiAjZGVmaW5lIGNvbnN0ICovCi0jdW5kZWYgQ0hBUl9JU19VTlNJR05FRAotI2RlZmluZSBIQVZFX1NURERFRl9ICi0jZGVmaW5lIEhBVkVfU1RETElCX0gKLSN1bmRlZiBORUVEX0JTRF9TVFJJTkdTCi0jdW5kZWYgTkVFRF9TWVNfVFlQRVNfSAotI2RlZmluZSBORUVEX0ZBUl9QT0lOVEVSUwkvKiBmb3Igc21hbGwgb3IgbWVkaXVtIG1lbW9yeSBtb2RlbCAqLwotI3VuZGVmIE5FRURfU0hPUlRfRVhURVJOQUxfTkFNRVMKLSN1bmRlZiBJTkNPTVBMRVRFX1RZUEVTX0JST0tFTgotCi0jaWZkZWYgSlBFR19JTlRFUk5BTFMKLQotI3VuZGVmIFJJR0hUX1NISUZUX0lTX1VOU0lHTkVECi0KLSNkZWZpbmUgVVNFX01TRE9TX01FTU1HUgkvKiBEZWZpbmUgdGhpcyBpZiB5b3UgdXNlIGptZW1kb3MuYyAqLwotCi0jZGVmaW5lIE1BWF9BTExPQ19DSFVOSyA2NTUyMEwJLyogTWF4aW11bSByZXF1ZXN0IHRvIG1hbGxvYygpICovCi0KLSNkZWZpbmUgVVNFX0ZNRU0JCS8qIE1pY3Jvc29mdCBoYXMgX2ZtZW1jcHkoKSBhbmQgX2ZtZW1zZXQoKSAqLwotCi0jZGVmaW5lIE5FRURfRkhFQVBNSU4JCS8qIGZhciBoZWFwIG1hbmFnZW1lbnQgcm91dGluZXMgYXJlIGJyb2tlbiAqLwotCi0jZGVmaW5lIFNIT1JUeExDT05TVF8zMgkJLyogZW5hYmxlIGNvbXBpbGVyLXNwZWNpZmljIERDVCBvcHRpbWl6YXRpb24gKi8KLS8qIE5vdGU6IHRoZSBhYm92ZSBkZWZpbmUgaXMga25vd24gdG8gaW1wcm92ZSB0aGUgY29kZSB3aXRoIE1pY3Jvc29mdCBDIDYuMDBBLgotICogSSBkbyBub3Qga25vdyB3aGV0aGVyIGl0IGlzIGdvb2QgZm9yIGxhdGVyIGNvbXBpbGVyIHZlcnNpb25zLgotICogUGxlYXNlIHJlcG9ydCBhbnkgaW5mbyBvbiB0aGlzIHBvaW50IHRvIGpwZWctaW5mb0B1Yy5hZy4KLSAqLwotCi0jZW5kaWYgLyogSlBFR19JTlRFUk5BTFMgKi8KLQotI2lmZGVmIEpQRUdfQ0pQRUdfREpQRUcKLQotI2RlZmluZSBCTVBfU1VQUE9SVEVECQkvKiBCTVAgaW1hZ2UgZmlsZSBmb3JtYXQgKi8KLSNkZWZpbmUgR0lGX1NVUFBPUlRFRAkJLyogR0lGIGltYWdlIGZpbGUgZm9ybWF0ICovCi0jZGVmaW5lIFBQTV9TVVBQT1JURUQJCS8qIFBCTVBMVVMgUFBNL1BHTSBpbWFnZSBmaWxlIGZvcm1hdCAqLwotI3VuZGVmIFJMRV9TVVBQT1JURUQJCS8qIFV0YWggUkxFIGltYWdlIGZpbGUgZm9ybWF0ICovCi0jZGVmaW5lIFRBUkdBX1NVUFBPUlRFRAkJLyogVGFyZ2EgaW1hZ2UgZmlsZSBmb3JtYXQgKi8KLQotI2RlZmluZSBUV09fRklMRV9DT01NQU5ETElORQotI2RlZmluZSBVU0VfU0VUTU9ERQkJLyogTWljcm9zb2Z0IGhhcyBzZXRtb2RlKCkgKi8KLSNkZWZpbmUgTkVFRF9TSUdOQUxfQ0FUQ0hFUgkvKiBEZWZpbmUgdGhpcyBpZiB5b3UgdXNlIGptZW1kb3MuYyAqLwotI3VuZGVmIERPTlRfVVNFX0JfTU9ERQotI3VuZGVmIFBST0dSRVNTX1JFUE9SVAkJLyogb3B0aW9uYWwgKi8KLQotI2VuZGlmIC8qIEpQRUdfQ0pQRUdfREpQRUcgKi8KZGlmZiAtLWdpdCBhL2pjb25maWcuc2FzIGIvamNvbmZpZy5zYXMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGI4YTE4MTkuLjAwMDAwMDAKLS0tIGEvamNvbmZpZy5zYXMKKysrIC9kZXYvbnVsbApAQCAtMSw0MyArMCwwIEBACi0vKiBqY29uZmlnLnNhcyAtLS0gamNvbmZpZy5oIGZvciBBbWlnYSBzeXN0ZW1zIHVzaW5nIFNBUyBDIDYuMCBhbmQgdXAuICovCi0vKiBzZWUgamNvbmZpZy50eHQgZm9yIGV4cGxhbmF0aW9ucyAqLwotCi0jZGVmaW5lIEhBVkVfUFJPVE9UWVBFUwotI2RlZmluZSBIQVZFX1VOU0lHTkVEX0NIQVIKLSNkZWZpbmUgSEFWRV9VTlNJR05FRF9TSE9SVAotLyogI2RlZmluZSB2b2lkIGNoYXIgKi8KLS8qICNkZWZpbmUgY29uc3QgKi8KLSN1bmRlZiBDSEFSX0lTX1VOU0lHTkVECi0jZGVmaW5lIEhBVkVfU1REREVGX0gKLSNkZWZpbmUgSEFWRV9TVERMSUJfSAotI3VuZGVmIE5FRURfQlNEX1NUUklOR1MKLSN1bmRlZiBORUVEX1NZU19UWVBFU19ICi0jdW5kZWYgTkVFRF9GQVJfUE9JTlRFUlMKLSN1bmRlZiBORUVEX1NIT1JUX0VYVEVSTkFMX05BTUVTCi0jdW5kZWYgSU5DT01QTEVURV9UWVBFU19CUk9LRU4KLQotI2lmZGVmIEpQRUdfSU5URVJOQUxTCi0KLSN1bmRlZiBSSUdIVF9TSElGVF9JU19VTlNJR05FRAotCi0jZGVmaW5lIFRFTVBfRElSRUNUT1JZICJKUEVHVE1QOiIJLyogcmVjb21tZW5kZWQgc2V0dGluZyBmb3IgQW1pZ2EgKi8KLQotI2RlZmluZSBOT19NS1RFTVAJCS8qIFNBUyBDIGRvZXNuJ3QgaGF2ZSBta3RlbXAoKSAqLwotCi0jZGVmaW5lIFNIT1JUeFNIT1JUXzMyCQkvKiBwcm9kdWNlcyBiZXR0ZXIgRENUIGNvZGUgd2l0aCBTQVMgQyAqLwotCi0jZW5kaWYgLyogSlBFR19JTlRFUk5BTFMgKi8KLQotI2lmZGVmIEpQRUdfQ0pQRUdfREpQRUcKLQotI2RlZmluZSBCTVBfU1VQUE9SVEVECQkvKiBCTVAgaW1hZ2UgZmlsZSBmb3JtYXQgKi8KLSNkZWZpbmUgR0lGX1NVUFBPUlRFRAkJLyogR0lGIGltYWdlIGZpbGUgZm9ybWF0ICovCi0jZGVmaW5lIFBQTV9TVVBQT1JURUQJCS8qIFBCTVBMVVMgUFBNL1BHTSBpbWFnZSBmaWxlIGZvcm1hdCAqLwotI3VuZGVmIFJMRV9TVVBQT1JURUQJCS8qIFV0YWggUkxFIGltYWdlIGZpbGUgZm9ybWF0ICovCi0jZGVmaW5lIFRBUkdBX1NVUFBPUlRFRAkJLyogVGFyZ2EgaW1hZ2UgZmlsZSBmb3JtYXQgKi8KLQotI2RlZmluZSBUV09fRklMRV9DT01NQU5ETElORQotI2RlZmluZSBORUVEX1NJR05BTF9DQVRDSEVSCi0jdW5kZWYgRE9OVF9VU0VfQl9NT0RFCi0jdW5kZWYgUFJPR1JFU1NfUkVQT1JUCQkvKiBvcHRpb25hbCAqLwotCi0jZW5kaWYgLyogSlBFR19DSlBFR19ESlBFRyAqLwpkaWZmIC0tZ2l0IGEvamNvbmZpZy5zdCBiL2pjb25maWcuc3QKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDVhZmEwYjYuLjAwMDAwMDAKLS0tIGEvamNvbmZpZy5zdAorKysgL2Rldi9udWxsCkBAIC0xLDQyICswLDAgQEAKLS8qIGpjb25maWcuc3QgLS0tIGpjb25maWcuaCBmb3IgQXRhcmkgU1QvU1RFL1RUIHVzaW5nIFB1cmUgQyBvciBUdXJibyBDLiAqLwotLyogc2VlIGpjb25maWcudHh0IGZvciBleHBsYW5hdGlvbnMgKi8KLQotI2RlZmluZSBIQVZFX1BST1RPVFlQRVMKLSNkZWZpbmUgSEFWRV9VTlNJR05FRF9DSEFSCi0jZGVmaW5lIEhBVkVfVU5TSUdORURfU0hPUlQKLS8qICNkZWZpbmUgdm9pZCBjaGFyICovCi0vKiAjZGVmaW5lIGNvbnN0ICovCi0jdW5kZWYgQ0hBUl9JU19VTlNJR05FRAotI2RlZmluZSBIQVZFX1NURERFRl9ICi0jZGVmaW5lIEhBVkVfU1RETElCX0gKLSN1bmRlZiBORUVEX0JTRF9TVFJJTkdTCi0jdW5kZWYgTkVFRF9TWVNfVFlQRVNfSAotI3VuZGVmIE5FRURfRkFSX1BPSU5URVJTCi0jdW5kZWYgTkVFRF9TSE9SVF9FWFRFUk5BTF9OQU1FUwotI2RlZmluZSBJTkNPTVBMRVRFX1RZUEVTX0JST0tFTgkvKiBzdXBwcmVzcyB1bmRlZmluZWQtc3RydWN0dXJlIHdhcm5pbmdzICovCi0KLSNpZmRlZiBKUEVHX0lOVEVSTkFMUwotCi0jdW5kZWYgUklHSFRfU0hJRlRfSVNfVU5TSUdORUQKLQotI2RlZmluZSBBTElHTl9UWVBFICBsb25nCS8qIGFwcGFyZW50bHkgZG91YmxlIGlzIGEgd2VpcmQgc2l6ZT8gKi8KLQotI2VuZGlmIC8qIEpQRUdfSU5URVJOQUxTICovCi0KLSNpZmRlZiBKUEVHX0NKUEVHX0RKUEVHCi0KLSNkZWZpbmUgQk1QX1NVUFBPUlRFRAkJLyogQk1QIGltYWdlIGZpbGUgZm9ybWF0ICovCi0jZGVmaW5lIEdJRl9TVVBQT1JURUQJCS8qIEdJRiBpbWFnZSBmaWxlIGZvcm1hdCAqLwotI2RlZmluZSBQUE1fU1VQUE9SVEVECQkvKiBQQk1QTFVTIFBQTS9QR00gaW1hZ2UgZmlsZSBmb3JtYXQgKi8KLSN1bmRlZiBSTEVfU1VQUE9SVEVECQkvKiBVdGFoIFJMRSBpbWFnZSBmaWxlIGZvcm1hdCAqLwotI2RlZmluZSBUQVJHQV9TVVBQT1JURUQJCS8qIFRhcmdhIGltYWdlIGZpbGUgZm9ybWF0ICovCi0KLSNkZWZpbmUgVFdPX0ZJTEVfQ09NTUFORExJTkUJLyogb3B0aW9uYWwgLS0gdW5kZWYgaWYgeW91IGxpa2UgVW5peCBzdHlsZSAqLwotLyogTm90ZTogaWYgeW91IHVuZGVmIFRXT19GSUxFX0NPTU1BTkRMSU5FLCB5b3UgbWF5IG5lZWQgdG8gZGVmaW5lCi0gKiBVU0VfU0VUTU9ERS4gIFNvbWUgQXRhcmkgY29tcGlsZXJzIHJlcXVpcmUgaXQsIHNvbWUgZG8gbm90LgotICovCi0jZGVmaW5lIE5FRURfU0lHTkFMX0NBVENIRVIJLyogbmVlZGVkIGlmIHlvdSB1c2Ugam1lbW5hbWUuYyAqLwotI3VuZGVmIERPTlRfVVNFX0JfTU9ERQotI3VuZGVmIFBST0dSRVNTX1JFUE9SVAkJLyogb3B0aW9uYWwgKi8KLQotI2VuZGlmIC8qIEpQRUdfQ0pQRUdfREpQRUcgKi8KZGlmZiAtLWdpdCBhL2pjb25maWcudm1zIGIvamNvbmZpZy52bXMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDgzMzdiMGIuLjAwMDAwMDAKLS0tIGEvamNvbmZpZy52bXMKKysrIC9kZXYvbnVsbApAQCAtMSwzNyArMCwwIEBACi0vKiBqY29uZmlnLnZtcyAtLS0gamNvbmZpZy5oIGZvciB1c2Ugb24gRGlnaXRhbCBWTVMuICovCi0vKiBzZWUgamNvbmZpZy50eHQgZm9yIGV4cGxhbmF0aW9ucyAqLwotCi0jZGVmaW5lIEhBVkVfUFJPVE9UWVBFUwotI2RlZmluZSBIQVZFX1VOU0lHTkVEX0NIQVIKLSNkZWZpbmUgSEFWRV9VTlNJR05FRF9TSE9SVAotLyogI2RlZmluZSB2b2lkIGNoYXIgKi8KLS8qICNkZWZpbmUgY29uc3QgKi8KLSN1bmRlZiBDSEFSX0lTX1VOU0lHTkVECi0jZGVmaW5lIEhBVkVfU1REREVGX0gKLSNkZWZpbmUgSEFWRV9TVERMSUJfSAotI3VuZGVmIE5FRURfQlNEX1NUUklOR1MKLSN1bmRlZiBORUVEX1NZU19UWVBFU19ICi0jdW5kZWYgTkVFRF9GQVJfUE9JTlRFUlMKLSN1bmRlZiBORUVEX1NIT1JUX0VYVEVSTkFMX05BTUVTCi0jdW5kZWYgSU5DT01QTEVURV9UWVBFU19CUk9LRU4KLQotI2lmZGVmIEpQRUdfSU5URVJOQUxTCi0KLSN1bmRlZiBSSUdIVF9TSElGVF9JU19VTlNJR05FRAotCi0jZW5kaWYgLyogSlBFR19JTlRFUk5BTFMgKi8KLQotI2lmZGVmIEpQRUdfQ0pQRUdfREpQRUcKLQotI2RlZmluZSBCTVBfU1VQUE9SVEVECQkvKiBCTVAgaW1hZ2UgZmlsZSBmb3JtYXQgKi8KLSNkZWZpbmUgR0lGX1NVUFBPUlRFRAkJLyogR0lGIGltYWdlIGZpbGUgZm9ybWF0ICovCi0jZGVmaW5lIFBQTV9TVVBQT1JURUQJCS8qIFBCTVBMVVMgUFBNL1BHTSBpbWFnZSBmaWxlIGZvcm1hdCAqLwotI3VuZGVmIFJMRV9TVVBQT1JURUQJCS8qIFV0YWggUkxFIGltYWdlIGZpbGUgZm9ybWF0ICovCi0jZGVmaW5lIFRBUkdBX1NVUFBPUlRFRAkJLyogVGFyZ2EgaW1hZ2UgZmlsZSBmb3JtYXQgKi8KLQotI2RlZmluZSBUV09fRklMRV9DT01NQU5ETElORQkvKiBOZWVkZWQgb24gVk1TICovCi0jdW5kZWYgTkVFRF9TSUdOQUxfQ0FUQ0hFUgotI3VuZGVmIERPTlRfVVNFX0JfTU9ERQotI3VuZGVmIFBST0dSRVNTX1JFUE9SVAkJLyogb3B0aW9uYWwgKi8KLQotI2VuZGlmIC8qIEpQRUdfQ0pQRUdfREpQRUcgKi8KZGlmZiAtLWdpdCBhL2pjb25maWcud2F0IGIvamNvbmZpZy53YXQKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDE5MGNjNzUuLjAwMDAwMDAKLS0tIGEvamNvbmZpZy53YXQKKysrIC9kZXYvbnVsbApAQCAtMSwzOCArMCwwIEBACi0vKiBqY29uZmlnLndhdCAtLS0gamNvbmZpZy5oIGZvciBXYXRjb20gQy9DKysgb24gTVMtRE9TIG9yIE9TLzIuICovCi0vKiBzZWUgamNvbmZpZy50eHQgZm9yIGV4cGxhbmF0aW9ucyAqLwotCi0jZGVmaW5lIEhBVkVfUFJPVE9UWVBFUwotI2RlZmluZSBIQVZFX1VOU0lHTkVEX0NIQVIKLSNkZWZpbmUgSEFWRV9VTlNJR05FRF9TSE9SVAotLyogI2RlZmluZSB2b2lkIGNoYXIgKi8KLS8qICNkZWZpbmUgY29uc3QgKi8KLSNkZWZpbmUgQ0hBUl9JU19VTlNJR05FRAotI2RlZmluZSBIQVZFX1NURERFRl9ICi0jZGVmaW5lIEhBVkVfU1RETElCX0gKLSN1bmRlZiBORUVEX0JTRF9TVFJJTkdTCi0jdW5kZWYgTkVFRF9TWVNfVFlQRVNfSAotI3VuZGVmIE5FRURfRkFSX1BPSU5URVJTCS8qIFdhdGNvbSB1c2VzIGZsYXQgMzItYml0IGFkZHJlc3NpbmcgKi8KLSN1bmRlZiBORUVEX1NIT1JUX0VYVEVSTkFMX05BTUVTCi0jdW5kZWYgSU5DT01QTEVURV9UWVBFU19CUk9LRU4KLQotI2lmZGVmIEpQRUdfSU5URVJOQUxTCi0KLSN1bmRlZiBSSUdIVF9TSElGVF9JU19VTlNJR05FRAotCi0jZW5kaWYgLyogSlBFR19JTlRFUk5BTFMgKi8KLQotI2lmZGVmIEpQRUdfQ0pQRUdfREpQRUcKLQotI2RlZmluZSBCTVBfU1VQUE9SVEVECQkvKiBCTVAgaW1hZ2UgZmlsZSBmb3JtYXQgKi8KLSNkZWZpbmUgR0lGX1NVUFBPUlRFRAkJLyogR0lGIGltYWdlIGZpbGUgZm9ybWF0ICovCi0jZGVmaW5lIFBQTV9TVVBQT1JURUQJCS8qIFBCTVBMVVMgUFBNL1BHTSBpbWFnZSBmaWxlIGZvcm1hdCAqLwotI3VuZGVmIFJMRV9TVVBQT1JURUQJCS8qIFV0YWggUkxFIGltYWdlIGZpbGUgZm9ybWF0ICovCi0jZGVmaW5lIFRBUkdBX1NVUFBPUlRFRAkJLyogVGFyZ2EgaW1hZ2UgZmlsZSBmb3JtYXQgKi8KLQotI3VuZGVmIFRXT19GSUxFX0NPTU1BTkRMSU5FCS8qIG9wdGlvbmFsICovCi0jZGVmaW5lIFVTRV9TRVRNT0RFCQkvKiBOZWVkZWQgdG8gbWFrZSBvbmUtZmlsZSBzdHlsZSB3b3JrIGluIFdhdGNvbSAqLwotI3VuZGVmIE5FRURfU0lHTkFMX0NBVENIRVIJLyogRGVmaW5lIHRoaXMgaWYgeW91IHVzZSBqbWVtbmFtZS5jICovCi0jdW5kZWYgRE9OVF9VU0VfQl9NT0RFCi0jdW5kZWYgUFJPR1JFU1NfUkVQT1JUCQkvKiBvcHRpb25hbCAqLwotCi0jZW5kaWYgLyogSlBFR19DSlBFR19ESlBFRyAqLwpkaWZmIC0tZ2l0IGEvamNwYXJhbS5jIGIvamNwYXJhbS5jCmluZGV4IGM1ZTg1ZGQuLjI3YjVhMDMgMTAwNjQ0Ci0tLSBhL2pjcGFyYW0uYworKysgYi9qY3BhcmFtLmMKQEAgLTMsNiArMyw3IEBACiAgKgogICogQ29weXJpZ2h0IChDKSAxOTkxLTE5OTgsIFRob21hcyBHLiBMYW5lLgogICogTW9kaWZpZWQgMjAwMy0yMDA4IGJ5IEd1aWRvIFZvbGxiZWRpbmcuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDktMjAxMCwgRC4gUi4gQ29tbWFuZGVyLgogICogVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEluZGVwZW5kZW50IEpQRUcgR3JvdXAncyBzb2Z0d2FyZS4KICAqIEZvciBjb25kaXRpb25zIG9mIGRpc3RyaWJ1dGlvbiBhbmQgdXNlLCBzZWUgdGhlIGFjY29tcGFueWluZyBSRUFETUUgZmlsZS4KICAqCkBAIC04Nyw2ICs4OCw3IEBACiB9OwogCiAKKyNpZiBKUEVHX0xJQl9WRVJTSU9OID49IDcwCiBHTE9CQUwodm9pZCkKIGpwZWdfZGVmYXVsdF9xdGFibGVzIChqX2NvbXByZXNzX3B0ciBjaW5mbywgYm9vbGVhbiBmb3JjZV9iYXNlbGluZSkKIC8qIFNldCBvciBjaGFuZ2UgdGhlICdxdWFsaXR5JyAocXVhbnRpemF0aW9uKSBzZXR0aW5nLCB1c2luZyBkZWZhdWx0IHRhYmxlcwpAQCAtMTAwLDYgKzEwMiw3IEBACiAgIGpwZWdfYWRkX3F1YW50X3RhYmxlKGNpbmZvLCAxLCBzdGRfY2hyb21pbmFuY2VfcXVhbnRfdGJsLAogCQkgICAgICAgY2luZm8tPnFfc2NhbGVfZmFjdG9yWzFdLCBmb3JjZV9iYXNlbGluZSk7CiB9CisjZW5kaWYKIAogCiBHTE9CQUwodm9pZCkKQEAgLTMwMSw4ICszMDQsMTAgQEAKIAogICAvKiBJbml0aWFsaXplIGV2ZXJ5dGhpbmcgbm90IGRlcGVuZGVudCBvbiB0aGUgY29sb3Igc3BhY2UgKi8KIAorI2lmIEpQRUdfTElCX1ZFUlNJT04gPj0gNzAKICAgY2luZm8tPnNjYWxlX251bSA9IDE7CQkvKiAxOjEgc2NhbGluZyAqLwogICBjaW5mby0+c2NhbGVfZGVub20gPSAxOworI2VuZGlmCiAgIGNpbmZvLT5kYXRhX3ByZWNpc2lvbiA9IEJJVFNfSU5fSlNBTVBMRTsKICAgLyogU2V0IHVwIHR3byBxdWFudGl6YXRpb24gdGFibGVzIHVzaW5nIGRlZmF1bHQgcXVhbGl0eSBvZiA3NSAqLwogICBqcGVnX3NldF9xdWFsaXR5KGNpbmZvLCA3NSwgVFJVRSk7CkBAIC0zMzksOCArMzQ0LDEwIEBACiAgIC8qIEJ5IGRlZmF1bHQsIHVzZSB0aGUgc2ltcGxlciBub24tY29zaXRlZCBzYW1wbGluZyBhbGlnbm1lbnQgKi8KICAgY2luZm8tPkNDSVI2MDFfc2FtcGxpbmcgPSBGQUxTRTsKIAorI2lmIEpQRUdfTElCX1ZFUlNJT04gPj0gNzAKICAgLyogQnkgZGVmYXVsdCwgYXBwbHkgZmFuY3kgZG93bnNhbXBsaW5nICovCiAgIGNpbmZvLT5kb19mYW5jeV9kb3duc2FtcGxpbmcgPSBUUlVFOworI2VuZGlmCiAKICAgLyogTm8gaW5wdXQgc21vb3RoaW5nICovCiAgIGNpbmZvLT5zbW9vdGhpbmdfZmFjdG9yID0gMDsKQEAgLTM4NSw2ICszOTIsMTIgQEAKICAgICBqcGVnX3NldF9jb2xvcnNwYWNlKGNpbmZvLCBKQ1NfR1JBWVNDQUxFKTsKICAgICBicmVhazsKICAgY2FzZSBKQ1NfUkdCOgorICBjYXNlIEpDU19FWFRfUkdCOgorICBjYXNlIEpDU19FWFRfUkdCWDoKKyAgY2FzZSBKQ1NfRVhUX0JHUjoKKyAgY2FzZSBKQ1NfRVhUX0JHUlg6CisgIGNhc2UgSkNTX0VYVF9YQkdSOgorICBjYXNlIEpDU19FWFRfWFJHQjoKICAgICBqcGVnX3NldF9jb2xvcnNwYWNlKGNpbmZvLCBKQ1NfWUNiQ3IpOwogICAgIGJyZWFrOwogICBjYXNlIEpDU19ZQ2JDcjoKZGlmZiAtLWdpdCBhL2pjcGh1ZmYuYyBiL2pjcGh1ZmYuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zMTAyODcxCi0tLSAvZGV2L251bGwKKysrIGIvamNwaHVmZi5jCkBAIC0wLDAgKzEsODMxIEBACisvKgorICogamNwaHVmZi5jCisgKgorICogQ29weXJpZ2h0IChDKSAxOTk1LTE5OTcsIFRob21hcyBHLiBMYW5lLgorICogVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEluZGVwZW5kZW50IEpQRUcgR3JvdXAncyBzb2Z0d2FyZS4KKyAqIEZvciBjb25kaXRpb25zIG9mIGRpc3RyaWJ1dGlvbiBhbmQgdXNlLCBzZWUgdGhlIGFjY29tcGFueWluZyBSRUFETUUgZmlsZS4KKyAqCisgKiBUaGlzIGZpbGUgY29udGFpbnMgSHVmZm1hbiBlbnRyb3B5IGVuY29kaW5nIHJvdXRpbmVzIGZvciBwcm9ncmVzc2l2ZSBKUEVHLgorICoKKyAqIFdlIGRvIG5vdCBzdXBwb3J0IG91dHB1dCBzdXNwZW5zaW9uIGluIHRoaXMgbW9kdWxlLCBzaW5jZSB0aGUgbGlicmFyeQorICogY3VycmVudGx5IGRvZXMgbm90IGFsbG93IG11bHRpcGxlLXNjYW4gZmlsZXMgdG8gYmUgd3JpdHRlbiB3aXRoIG91dHB1dAorICogc3VzcGVuc2lvbi4KKyAqLworCisjZGVmaW5lIEpQRUdfSU5URVJOQUxTCisjaW5jbHVkZSAiamluY2x1ZGUuaCIKKyNpbmNsdWRlICJqcGVnbGliLmgiCisjaW5jbHVkZSAiamNodWZmLmgiCQkvKiBEZWNsYXJhdGlvbnMgc2hhcmVkIHdpdGggamNodWZmLmMgKi8KKworI2lmZGVmIENfUFJPR1JFU1NJVkVfU1VQUE9SVEVECisKKy8qIEV4cGFuZGVkIGVudHJvcHkgZW5jb2RlciBvYmplY3QgZm9yIHByb2dyZXNzaXZlIEh1ZmZtYW4gZW5jb2RpbmcuICovCisKK3R5cGVkZWYgc3RydWN0IHsKKyAgc3RydWN0IGpwZWdfZW50cm9weV9lbmNvZGVyIHB1YjsgLyogcHVibGljIGZpZWxkcyAqLworCisgIC8qIE1vZGUgZmxhZzogVFJVRSBmb3Igb3B0aW1pemF0aW9uLCBGQUxTRSBmb3IgYWN0dWFsIGRhdGEgb3V0cHV0ICovCisgIGJvb2xlYW4gZ2F0aGVyX3N0YXRpc3RpY3M7CisKKyAgLyogQml0LWxldmVsIGNvZGluZyBzdGF0dXMuCisgICAqIG5leHRfb3V0cHV0X2J5dGUvZnJlZV9pbl9idWZmZXIgYXJlIGxvY2FsIGNvcGllcyBvZiBjaW5mby0+ZGVzdCBmaWVsZHMuCisgICAqLworICBKT0NURVQgKiBuZXh0X291dHB1dF9ieXRlOwkvKiA9PiBuZXh0IGJ5dGUgdG8gd3JpdGUgaW4gYnVmZmVyICovCisgIHNpemVfdCBmcmVlX2luX2J1ZmZlcjsJLyogIyBvZiBieXRlIHNwYWNlcyByZW1haW5pbmcgaW4gYnVmZmVyICovCisgIElOVDMyIHB1dF9idWZmZXI7CQkvKiBjdXJyZW50IGJpdC1hY2N1bXVsYXRpb24gYnVmZmVyICovCisgIGludCBwdXRfYml0czsJCQkvKiAjIG9mIGJpdHMgbm93IGluIGl0ICovCisgIGpfY29tcHJlc3NfcHRyIGNpbmZvOwkJLyogbGluayB0byBjaW5mbyAobmVlZGVkIGZvciBkdW1wX2J1ZmZlcikgKi8KKworICAvKiBDb2Rpbmcgc3RhdHVzIGZvciBEQyBjb21wb25lbnRzICovCisgIGludCBsYXN0X2RjX3ZhbFtNQVhfQ09NUFNfSU5fU0NBTl07IC8qIGxhc3QgREMgY29lZiBmb3IgZWFjaCBjb21wb25lbnQgKi8KKworICAvKiBDb2Rpbmcgc3RhdHVzIGZvciBBQyBjb21wb25lbnRzICovCisgIGludCBhY190Ymxfbm87CQkvKiB0aGUgdGFibGUgbnVtYmVyIG9mIHRoZSBzaW5nbGUgY29tcG9uZW50ICovCisgIHVuc2lnbmVkIGludCBFT0JSVU47CQkvKiBydW4gbGVuZ3RoIG9mIEVPQnMgKi8KKyAgdW5zaWduZWQgaW50IEJFOwkJLyogIyBvZiBidWZmZXJlZCBjb3JyZWN0aW9uIGJpdHMgYmVmb3JlIE1DVSAqLworICBjaGFyICogYml0X2J1ZmZlcjsJCS8qIGJ1ZmZlciBmb3IgY29ycmVjdGlvbiBiaXRzICgxIHBlciBjaGFyKSAqLworICAvKiBwYWNraW5nIGNvcnJlY3Rpb24gYml0cyB0aWdodGx5IHdvdWxkIHNhdmUgc29tZSBzcGFjZSBidXQgY29zdCB0aW1lLi4uICovCisKKyAgdW5zaWduZWQgaW50IHJlc3RhcnRzX3RvX2dvOwkvKiBNQ1VzIGxlZnQgaW4gdGhpcyByZXN0YXJ0IGludGVydmFsICovCisgIGludCBuZXh0X3Jlc3RhcnRfbnVtOwkJLyogbmV4dCByZXN0YXJ0IG51bWJlciB0byB3cml0ZSAoMC03KSAqLworCisgIC8qIFBvaW50ZXJzIHRvIGRlcml2ZWQgdGFibGVzICh0aGVzZSB3b3Jrc3BhY2VzIGhhdmUgaW1hZ2UgbGlmZXNwYW4pLgorICAgKiBTaW5jZSBhbnkgb25lIHNjYW4gY29kZXMgb25seSBEQyBvciBvbmx5IEFDLCB3ZSBvbmx5IG5lZWQgb25lIHNldAorICAgKiBvZiB0YWJsZXMsIG5vdCBvbmUgZm9yIERDIGFuZCBvbmUgZm9yIEFDLgorICAgKi8KKyAgY19kZXJpdmVkX3RibCAqIGRlcml2ZWRfdGJsc1tOVU1fSFVGRl9UQkxTXTsKKworICAvKiBTdGF0aXN0aWNzIHRhYmxlcyBmb3Igb3B0aW1pemF0aW9uOyBhZ2Fpbiwgb25lIHNldCBpcyBlbm91Z2ggKi8KKyAgbG9uZyAqIGNvdW50X3B0cnNbTlVNX0hVRkZfVEJMU107Cit9IHBodWZmX2VudHJvcHlfZW5jb2RlcjsKKwordHlwZWRlZiBwaHVmZl9lbnRyb3B5X2VuY29kZXIgKiBwaHVmZl9lbnRyb3B5X3B0cjsKKworLyogTUFYX0NPUlJfQklUUyBpcyB0aGUgbnVtYmVyIG9mIGJpdHMgdGhlIEFDIHJlZmluZW1lbnQgY29ycmVjdGlvbi1iaXQKKyAqIGJ1ZmZlciBjYW4gaG9sZC4gIExhcmdlciBzaXplcyBtYXkgc2xpZ2h0bHkgaW1wcm92ZSBjb21wcmVzc2lvbiwgYnV0CisgKiAxMDAwIGlzIGFscmVhZHkgd2VsbCBpbnRvIHRoZSByZWFsbSBvZiBvdmVya2lsbC4KKyAqIFRoZSBtaW5pbXVtIHNhZmUgc2l6ZSBpcyA2NCBiaXRzLgorICovCisKKyNkZWZpbmUgTUFYX0NPUlJfQklUUyAgMTAwMAkvKiBNYXggIyBvZiBjb3JyZWN0aW9uIGJpdHMgSSBjYW4gYnVmZmVyICovCisKKy8qIElSSUdIVF9TSElGVCBpcyBsaWtlIFJJR0hUX1NISUZULCBidXQgd29ya3Mgb24gaW50IHJhdGhlciB0aGFuIElOVDMyLgorICogV2UgYXNzdW1lIHRoYXQgaW50IHJpZ2h0IHNoaWZ0IGlzIHVuc2lnbmVkIGlmIElOVDMyIHJpZ2h0IHNoaWZ0IGlzLAorICogd2hpY2ggc2hvdWxkIGJlIHNhZmUuCisgKi8KKworI2lmZGVmIFJJR0hUX1NISUZUX0lTX1VOU0lHTkVECisjZGVmaW5lIElTSElGVF9URU1QUwlpbnQgaXNoaWZ0X3RlbXA7CisjZGVmaW5lIElSSUdIVF9TSElGVCh4LHNoZnQpICBcCisJKChpc2hpZnRfdGVtcCA9ICh4KSkgPCAwID8gXAorCSAoaXNoaWZ0X3RlbXAgPj4gKHNoZnQpKSB8ICgofjApIDw8ICgxNi0oc2hmdCkpKSA6IFwKKwkgKGlzaGlmdF90ZW1wID4+IChzaGZ0KSkpCisjZWxzZQorI2RlZmluZSBJU0hJRlRfVEVNUFMKKyNkZWZpbmUgSVJJR0hUX1NISUZUKHgsc2hmdCkJKCh4KSA+PiAoc2hmdCkpCisjZW5kaWYKKworLyogRm9yd2FyZCBkZWNsYXJhdGlvbnMgKi8KK01FVEhPRERFRihib29sZWFuKSBlbmNvZGVfbWN1X0RDX2ZpcnN0IEpQUCgoal9jb21wcmVzc19wdHIgY2luZm8sCisJCQkJCSAgICBKQkxPQ0tST1cgKk1DVV9kYXRhKSk7CitNRVRIT0RERUYoYm9vbGVhbikgZW5jb2RlX21jdV9BQ19maXJzdCBKUFAoKGpfY29tcHJlc3NfcHRyIGNpbmZvLAorCQkJCQkgICAgSkJMT0NLUk9XICpNQ1VfZGF0YSkpOworTUVUSE9EREVGKGJvb2xlYW4pIGVuY29kZV9tY3VfRENfcmVmaW5lIEpQUCgoal9jb21wcmVzc19wdHIgY2luZm8sCisJCQkJCSAgICAgSkJMT0NLUk9XICpNQ1VfZGF0YSkpOworTUVUSE9EREVGKGJvb2xlYW4pIGVuY29kZV9tY3VfQUNfcmVmaW5lIEpQUCgoal9jb21wcmVzc19wdHIgY2luZm8sCisJCQkJCSAgICAgSkJMT0NLUk9XICpNQ1VfZGF0YSkpOworTUVUSE9EREVGKHZvaWQpIGZpbmlzaF9wYXNzX3BodWZmIEpQUCgoal9jb21wcmVzc19wdHIgY2luZm8pKTsKK01FVEhPRERFRih2b2lkKSBmaW5pc2hfcGFzc19nYXRoZXJfcGh1ZmYgSlBQKChqX2NvbXByZXNzX3B0ciBjaW5mbykpOworCisKKy8qCisgKiBJbml0aWFsaXplIGZvciBhIEh1ZmZtYW4tY29tcHJlc3NlZCBzY2FuIHVzaW5nIHByb2dyZXNzaXZlIEpQRUcuCisgKi8KKworTUVUSE9EREVGKHZvaWQpCitzdGFydF9wYXNzX3BodWZmIChqX2NvbXByZXNzX3B0ciBjaW5mbywgYm9vbGVhbiBnYXRoZXJfc3RhdGlzdGljcykKK3sgIAorICBwaHVmZl9lbnRyb3B5X3B0ciBlbnRyb3B5ID0gKHBodWZmX2VudHJvcHlfcHRyKSBjaW5mby0+ZW50cm9weTsKKyAgYm9vbGVhbiBpc19EQ19iYW5kOworICBpbnQgY2ksIHRibDsKKyAganBlZ19jb21wb25lbnRfaW5mbyAqIGNvbXBwdHI7CisKKyAgZW50cm9weS0+Y2luZm8gPSBjaW5mbzsKKyAgZW50cm9weS0+Z2F0aGVyX3N0YXRpc3RpY3MgPSBnYXRoZXJfc3RhdGlzdGljczsKKworICBpc19EQ19iYW5kID0gKGNpbmZvLT5TcyA9PSAwKTsKKworICAvKiBXZSBhc3N1bWUgamNtYXN0ZXIuYyBhbHJlYWR5IHZhbGlkYXRlZCB0aGUgc2NhbiBwYXJhbWV0ZXJzLiAqLworCisgIC8qIFNlbGVjdCBleGVjdXRpb24gcm91dGluZXMgKi8KKyAgaWYgKGNpbmZvLT5BaCA9PSAwKSB7CisgICAgaWYgKGlzX0RDX2JhbmQpCisgICAgICBlbnRyb3B5LT5wdWIuZW5jb2RlX21jdSA9IGVuY29kZV9tY3VfRENfZmlyc3Q7CisgICAgZWxzZQorICAgICAgZW50cm9weS0+cHViLmVuY29kZV9tY3UgPSBlbmNvZGVfbWN1X0FDX2ZpcnN0OworICB9IGVsc2UgeworICAgIGlmIChpc19EQ19iYW5kKQorICAgICAgZW50cm9weS0+cHViLmVuY29kZV9tY3UgPSBlbmNvZGVfbWN1X0RDX3JlZmluZTsKKyAgICBlbHNlIHsKKyAgICAgIGVudHJvcHktPnB1Yi5lbmNvZGVfbWN1ID0gZW5jb2RlX21jdV9BQ19yZWZpbmU7CisgICAgICAvKiBBQyByZWZpbmVtZW50IG5lZWRzIGEgY29ycmVjdGlvbiBiaXQgYnVmZmVyICovCisgICAgICBpZiAoZW50cm9weS0+Yml0X2J1ZmZlciA9PSBOVUxMKQorCWVudHJvcHktPmJpdF9idWZmZXIgPSAoY2hhciAqKQorCSAgKCpjaW5mby0+bWVtLT5hbGxvY19zbWFsbCkgKChqX2NvbW1vbl9wdHIpIGNpbmZvLCBKUE9PTF9JTUFHRSwKKwkJCQkgICAgICBNQVhfQ09SUl9CSVRTICogU0laRU9GKGNoYXIpKTsKKyAgICB9CisgIH0KKyAgaWYgKGdhdGhlcl9zdGF0aXN0aWNzKQorICAgIGVudHJvcHktPnB1Yi5maW5pc2hfcGFzcyA9IGZpbmlzaF9wYXNzX2dhdGhlcl9waHVmZjsKKyAgZWxzZQorICAgIGVudHJvcHktPnB1Yi5maW5pc2hfcGFzcyA9IGZpbmlzaF9wYXNzX3BodWZmOworCisgIC8qIE9ubHkgREMgY29lZmZpY2llbnRzIG1heSBiZSBpbnRlcmxlYXZlZCwgc28gY2luZm8tPmNvbXBzX2luX3NjYW4gPSAxCisgICAqIGZvciBBQyBjb2VmZmljaWVudHMuCisgICAqLworICBmb3IgKGNpID0gMDsgY2kgPCBjaW5mby0+Y29tcHNfaW5fc2NhbjsgY2krKykgeworICAgIGNvbXBwdHIgPSBjaW5mby0+Y3VyX2NvbXBfaW5mb1tjaV07CisgICAgLyogSW5pdGlhbGl6ZSBEQyBwcmVkaWN0aW9ucyB0byAwICovCisgICAgZW50cm9weS0+bGFzdF9kY192YWxbY2ldID0gMDsKKyAgICAvKiBHZXQgdGFibGUgaW5kZXggKi8KKyAgICBpZiAoaXNfRENfYmFuZCkgeworICAgICAgaWYgKGNpbmZvLT5BaCAhPSAwKQkvKiBEQyByZWZpbmVtZW50IG5lZWRzIG5vIHRhYmxlICovCisJY29udGludWU7CisgICAgICB0YmwgPSBjb21wcHRyLT5kY190Ymxfbm87CisgICAgfSBlbHNlIHsKKyAgICAgIGVudHJvcHktPmFjX3RibF9ubyA9IHRibCA9IGNvbXBwdHItPmFjX3RibF9ubzsKKyAgICB9CisgICAgaWYgKGdhdGhlcl9zdGF0aXN0aWNzKSB7CisgICAgICAvKiBDaGVjayBmb3IgaW52YWxpZCB0YWJsZSBpbmRleCAqLworICAgICAgLyogKG1ha2VfY19kZXJpdmVkX3RibCBkb2VzIHRoaXMgaW4gdGhlIG90aGVyIHBhdGgpICovCisgICAgICBpZiAodGJsIDwgMCB8fCB0YmwgPj0gTlVNX0hVRkZfVEJMUykKKyAgICAgICAgRVJSRVhJVDEoY2luZm8sIEpFUlJfTk9fSFVGRl9UQUJMRSwgdGJsKTsKKyAgICAgIC8qIEFsbG9jYXRlIGFuZCB6ZXJvIHRoZSBzdGF0aXN0aWNzIHRhYmxlcyAqLworICAgICAgLyogTm90ZSB0aGF0IGpwZWdfZ2VuX29wdGltYWxfdGFibGUgZXhwZWN0cyAyNTcgZW50cmllcyBpbiBlYWNoIHRhYmxlISAqLworICAgICAgaWYgKGVudHJvcHktPmNvdW50X3B0cnNbdGJsXSA9PSBOVUxMKQorCWVudHJvcHktPmNvdW50X3B0cnNbdGJsXSA9IChsb25nICopCisJICAoKmNpbmZvLT5tZW0tPmFsbG9jX3NtYWxsKSAoKGpfY29tbW9uX3B0cikgY2luZm8sIEpQT09MX0lNQUdFLAorCQkJCSAgICAgIDI1NyAqIFNJWkVPRihsb25nKSk7CisgICAgICBNRU1aRVJPKGVudHJvcHktPmNvdW50X3B0cnNbdGJsXSwgMjU3ICogU0laRU9GKGxvbmcpKTsKKyAgICB9IGVsc2UgeworICAgICAgLyogQ29tcHV0ZSBkZXJpdmVkIHZhbHVlcyBmb3IgSHVmZm1hbiB0YWJsZSAqLworICAgICAgLyogV2UgbWF5IGRvIHRoaXMgbW9yZSB0aGFuIG9uY2UgZm9yIGEgdGFibGUsIGJ1dCBpdCdzIG5vdCBleHBlbnNpdmUgKi8KKyAgICAgIGpwZWdfbWFrZV9jX2Rlcml2ZWRfdGJsKGNpbmZvLCBpc19EQ19iYW5kLCB0YmwsCisJCQkgICAgICAmIGVudHJvcHktPmRlcml2ZWRfdGJsc1t0YmxdKTsKKyAgICB9CisgIH0KKworICAvKiBJbml0aWFsaXplIEFDIHN0dWZmICovCisgIGVudHJvcHktPkVPQlJVTiA9IDA7CisgIGVudHJvcHktPkJFID0gMDsKKworICAvKiBJbml0aWFsaXplIGJpdCBidWZmZXIgdG8gZW1wdHkgKi8KKyAgZW50cm9weS0+cHV0X2J1ZmZlciA9IDA7CisgIGVudHJvcHktPnB1dF9iaXRzID0gMDsKKworICAvKiBJbml0aWFsaXplIHJlc3RhcnQgc3R1ZmYgKi8KKyAgZW50cm9weS0+cmVzdGFydHNfdG9fZ28gPSBjaW5mby0+cmVzdGFydF9pbnRlcnZhbDsKKyAgZW50cm9weS0+bmV4dF9yZXN0YXJ0X251bSA9IDA7Cit9CisKKworLyogT3V0cHV0dGluZyBieXRlcyB0byB0aGUgZmlsZS4KKyAqIE5COiB0aGVzZSBtdXN0IGJlIGNhbGxlZCBvbmx5IHdoZW4gYWN0dWFsbHkgb3V0cHV0dGluZywKKyAqIHRoYXQgaXMsIGVudHJvcHktPmdhdGhlcl9zdGF0aXN0aWNzID09IEZBTFNFLgorICovCisKKy8qIEVtaXQgYSBieXRlICovCisjZGVmaW5lIGVtaXRfYnl0ZShlbnRyb3B5LHZhbCkgIFwKKwl7ICooZW50cm9weSktPm5leHRfb3V0cHV0X2J5dGUrKyA9IChKT0NURVQpICh2YWwpOyAgXAorCSAgaWYgKC0tKGVudHJvcHkpLT5mcmVlX2luX2J1ZmZlciA9PSAwKSAgXAorCSAgICBkdW1wX2J1ZmZlcihlbnRyb3B5KTsgfQorCisKK0xPQ0FMKHZvaWQpCitkdW1wX2J1ZmZlciAocGh1ZmZfZW50cm9weV9wdHIgZW50cm9weSkKKy8qIEVtcHR5IHRoZSBvdXRwdXQgYnVmZmVyOyB3ZSBkbyBub3Qgc3VwcG9ydCBzdXNwZW5zaW9uIGluIHRoaXMgbW9kdWxlLiAqLworeworICBzdHJ1Y3QganBlZ19kZXN0aW5hdGlvbl9tZ3IgKiBkZXN0ID0gZW50cm9weS0+Y2luZm8tPmRlc3Q7CisKKyAgaWYgKCEgKCpkZXN0LT5lbXB0eV9vdXRwdXRfYnVmZmVyKSAoZW50cm9weS0+Y2luZm8pKQorICAgIEVSUkVYSVQoZW50cm9weS0+Y2luZm8sIEpFUlJfQ0FOVF9TVVNQRU5EKTsKKyAgLyogQWZ0ZXIgYSBzdWNjZXNzZnVsIGJ1ZmZlciBkdW1wLCBtdXN0IHJlc2V0IGJ1ZmZlciBwb2ludGVycyAqLworICBlbnRyb3B5LT5uZXh0X291dHB1dF9ieXRlID0gZGVzdC0+bmV4dF9vdXRwdXRfYnl0ZTsKKyAgZW50cm9weS0+ZnJlZV9pbl9idWZmZXIgPSBkZXN0LT5mcmVlX2luX2J1ZmZlcjsKK30KKworCisvKiBPdXRwdXR0aW5nIGJpdHMgdG8gdGhlIGZpbGUgKi8KKworLyogT25seSB0aGUgcmlnaHQgMjQgYml0cyBvZiBwdXRfYnVmZmVyIGFyZSB1c2VkOyB0aGUgdmFsaWQgYml0cyBhcmUKKyAqIGxlZnQtanVzdGlmaWVkIGluIHRoaXMgcGFydC4gIEF0IG1vc3QgMTYgYml0cyBjYW4gYmUgcGFzc2VkIHRvIGVtaXRfYml0cworICogaW4gb25lIGNhbGwsIGFuZCB3ZSBuZXZlciByZXRhaW4gbW9yZSB0aGFuIDcgYml0cyBpbiBwdXRfYnVmZmVyCisgKiBiZXR3ZWVuIGNhbGxzLCBzbyAyNCBiaXRzIGFyZSBzdWZmaWNpZW50LgorICovCisKK0xPQ0FMKHZvaWQpCitlbWl0X2JpdHMgKHBodWZmX2VudHJvcHlfcHRyIGVudHJvcHksIHVuc2lnbmVkIGludCBjb2RlLCBpbnQgc2l6ZSkKKy8qIEVtaXQgc29tZSBiaXRzLCB1bmxlc3Mgd2UgYXJlIGluIGdhdGhlciBtb2RlICovCit7CisgIC8qIFRoaXMgcm91dGluZSBpcyBoZWF2aWx5IHVzZWQsIHNvIGl0J3Mgd29ydGggY29kaW5nIHRpZ2h0bHkuICovCisgIHJlZ2lzdGVyIElOVDMyIHB1dF9idWZmZXIgPSAoSU5UMzIpIGNvZGU7CisgIHJlZ2lzdGVyIGludCBwdXRfYml0cyA9IGVudHJvcHktPnB1dF9iaXRzOworCisgIC8qIGlmIHNpemUgaXMgMCwgY2FsbGVyIHVzZWQgYW4gaW52YWxpZCBIdWZmbWFuIHRhYmxlIGVudHJ5ICovCisgIGlmIChzaXplID09IDApCisgICAgRVJSRVhJVChlbnRyb3B5LT5jaW5mbywgSkVSUl9IVUZGX01JU1NJTkdfQ09ERSk7CisKKyAgaWYgKGVudHJvcHktPmdhdGhlcl9zdGF0aXN0aWNzKQorICAgIHJldHVybjsJCQkvKiBkbyBub3RoaW5nIGlmIHdlJ3JlIG9ubHkgZ2V0dGluZyBzdGF0cyAqLworCisgIHB1dF9idWZmZXIgJj0gKCgoSU5UMzIpIDEpPDxzaXplKSAtIDE7IC8qIG1hc2sgb2ZmIGFueSBleHRyYSBiaXRzIGluIGNvZGUgKi8KKyAgCisgIHB1dF9iaXRzICs9IHNpemU7CQkvKiBuZXcgbnVtYmVyIG9mIGJpdHMgaW4gYnVmZmVyICovCisgIAorICBwdXRfYnVmZmVyIDw8PSAyNCAtIHB1dF9iaXRzOyAvKiBhbGlnbiBpbmNvbWluZyBiaXRzICovCisKKyAgcHV0X2J1ZmZlciB8PSBlbnRyb3B5LT5wdXRfYnVmZmVyOyAvKiBhbmQgbWVyZ2Ugd2l0aCBvbGQgYnVmZmVyIGNvbnRlbnRzICovCisKKyAgd2hpbGUgKHB1dF9iaXRzID49IDgpIHsKKyAgICBpbnQgYyA9IChpbnQpICgocHV0X2J1ZmZlciA+PiAxNikgJiAweEZGKTsKKyAgICAKKyAgICBlbWl0X2J5dGUoZW50cm9weSwgYyk7CisgICAgaWYgKGMgPT0gMHhGRikgewkJLyogbmVlZCB0byBzdHVmZiBhIHplcm8gYnl0ZT8gKi8KKyAgICAgIGVtaXRfYnl0ZShlbnRyb3B5LCAwKTsKKyAgICB9CisgICAgcHV0X2J1ZmZlciA8PD0gODsKKyAgICBwdXRfYml0cyAtPSA4OworICB9CisKKyAgZW50cm9weS0+cHV0X2J1ZmZlciA9IHB1dF9idWZmZXI7IC8qIHVwZGF0ZSB2YXJpYWJsZXMgKi8KKyAgZW50cm9weS0+cHV0X2JpdHMgPSBwdXRfYml0czsKK30KKworCitMT0NBTCh2b2lkKQorZmx1c2hfYml0cyAocGh1ZmZfZW50cm9weV9wdHIgZW50cm9weSkKK3sKKyAgZW1pdF9iaXRzKGVudHJvcHksIDB4N0YsIDcpOyAvKiBmaWxsIGFueSBwYXJ0aWFsIGJ5dGUgd2l0aCBvbmVzICovCisgIGVudHJvcHktPnB1dF9idWZmZXIgPSAwOyAgICAgLyogYW5kIHJlc2V0IGJpdC1idWZmZXIgdG8gZW1wdHkgKi8KKyAgZW50cm9weS0+cHV0X2JpdHMgPSAwOworfQorCisKKy8qCisgKiBFbWl0IChvciBqdXN0IGNvdW50KSBhIEh1ZmZtYW4gc3ltYm9sLgorICovCisKK0xPQ0FMKHZvaWQpCitlbWl0X3N5bWJvbCAocGh1ZmZfZW50cm9weV9wdHIgZW50cm9weSwgaW50IHRibF9ubywgaW50IHN5bWJvbCkKK3sKKyAgaWYgKGVudHJvcHktPmdhdGhlcl9zdGF0aXN0aWNzKQorICAgIGVudHJvcHktPmNvdW50X3B0cnNbdGJsX25vXVtzeW1ib2xdKys7CisgIGVsc2UgeworICAgIGNfZGVyaXZlZF90YmwgKiB0YmwgPSBlbnRyb3B5LT5kZXJpdmVkX3RibHNbdGJsX25vXTsKKyAgICBlbWl0X2JpdHMoZW50cm9weSwgdGJsLT5laHVmY29bc3ltYm9sXSwgdGJsLT5laHVmc2lbc3ltYm9sXSk7CisgIH0KK30KKworCisvKgorICogRW1pdCBiaXRzIGZyb20gYSBjb3JyZWN0aW9uIGJpdCBidWZmZXIuCisgKi8KKworTE9DQUwodm9pZCkKK2VtaXRfYnVmZmVyZWRfYml0cyAocGh1ZmZfZW50cm9weV9wdHIgZW50cm9weSwgY2hhciAqIGJ1ZnN0YXJ0LAorCQkgICAgdW5zaWduZWQgaW50IG5iaXRzKQoreworICBpZiAoZW50cm9weS0+Z2F0aGVyX3N0YXRpc3RpY3MpCisgICAgcmV0dXJuOwkJCS8qIG5vIHJlYWwgd29yayAqLworCisgIHdoaWxlIChuYml0cyA+IDApIHsKKyAgICBlbWl0X2JpdHMoZW50cm9weSwgKHVuc2lnbmVkIGludCkgKCpidWZzdGFydCksIDEpOworICAgIGJ1ZnN0YXJ0Kys7CisgICAgbmJpdHMtLTsKKyAgfQorfQorCisKKy8qCisgKiBFbWl0IGFueSBwZW5kaW5nIEVPQlJVTiBzeW1ib2wuCisgKi8KKworTE9DQUwodm9pZCkKK2VtaXRfZW9icnVuIChwaHVmZl9lbnRyb3B5X3B0ciBlbnRyb3B5KQoreworICByZWdpc3RlciBpbnQgdGVtcCwgbmJpdHM7CisKKyAgaWYgKGVudHJvcHktPkVPQlJVTiA+IDApIHsJLyogaWYgdGhlcmUgaXMgYW55IHBlbmRpbmcgRU9CUlVOICovCisgICAgdGVtcCA9IGVudHJvcHktPkVPQlJVTjsKKyAgICBuYml0cyA9IDA7CisgICAgd2hpbGUgKCh0ZW1wID4+PSAxKSkKKyAgICAgIG5iaXRzKys7CisgICAgLyogc2FmZXR5IGNoZWNrOiBzaG91bGRuJ3QgaGFwcGVuIGdpdmVuIGxpbWl0ZWQgY29ycmVjdGlvbi1iaXQgYnVmZmVyICovCisgICAgaWYgKG5iaXRzID4gMTQpCisgICAgICBFUlJFWElUKGVudHJvcHktPmNpbmZvLCBKRVJSX0hVRkZfTUlTU0lOR19DT0RFKTsKKworICAgIGVtaXRfc3ltYm9sKGVudHJvcHksIGVudHJvcHktPmFjX3RibF9ubywgbmJpdHMgPDwgNCk7CisgICAgaWYgKG5iaXRzKQorICAgICAgZW1pdF9iaXRzKGVudHJvcHksIGVudHJvcHktPkVPQlJVTiwgbmJpdHMpOworCisgICAgZW50cm9weS0+RU9CUlVOID0gMDsKKworICAgIC8qIEVtaXQgYW55IGJ1ZmZlcmVkIGNvcnJlY3Rpb24gYml0cyAqLworICAgIGVtaXRfYnVmZmVyZWRfYml0cyhlbnRyb3B5LCBlbnRyb3B5LT5iaXRfYnVmZmVyLCBlbnRyb3B5LT5CRSk7CisgICAgZW50cm9weS0+QkUgPSAwOworICB9Cit9CisKKworLyoKKyAqIEVtaXQgYSByZXN0YXJ0IG1hcmtlciAmIHJlc3luY2hyb25pemUgcHJlZGljdGlvbnMuCisgKi8KKworTE9DQUwodm9pZCkKK2VtaXRfcmVzdGFydCAocGh1ZmZfZW50cm9weV9wdHIgZW50cm9weSwgaW50IHJlc3RhcnRfbnVtKQoreworICBpbnQgY2k7CisKKyAgZW1pdF9lb2JydW4oZW50cm9weSk7CisKKyAgaWYgKCEgZW50cm9weS0+Z2F0aGVyX3N0YXRpc3RpY3MpIHsKKyAgICBmbHVzaF9iaXRzKGVudHJvcHkpOworICAgIGVtaXRfYnl0ZShlbnRyb3B5LCAweEZGKTsKKyAgICBlbWl0X2J5dGUoZW50cm9weSwgSlBFR19SU1QwICsgcmVzdGFydF9udW0pOworICB9CisKKyAgaWYgKGVudHJvcHktPmNpbmZvLT5TcyA9PSAwKSB7CisgICAgLyogUmUtaW5pdGlhbGl6ZSBEQyBwcmVkaWN0aW9ucyB0byAwICovCisgICAgZm9yIChjaSA9IDA7IGNpIDwgZW50cm9weS0+Y2luZm8tPmNvbXBzX2luX3NjYW47IGNpKyspCisgICAgICBlbnRyb3B5LT5sYXN0X2RjX3ZhbFtjaV0gPSAwOworICB9IGVsc2UgeworICAgIC8qIFJlLWluaXRpYWxpemUgYWxsIEFDLXJlbGF0ZWQgZmllbGRzIHRvIDAgKi8KKyAgICBlbnRyb3B5LT5FT0JSVU4gPSAwOworICAgIGVudHJvcHktPkJFID0gMDsKKyAgfQorfQorCisKKy8qCisgKiBNQ1UgZW5jb2RpbmcgZm9yIERDIGluaXRpYWwgc2NhbiAoZWl0aGVyIHNwZWN0cmFsIHNlbGVjdGlvbiwKKyAqIG9yIGZpcnN0IHBhc3Mgb2Ygc3VjY2Vzc2l2ZSBhcHByb3hpbWF0aW9uKS4KKyAqLworCitNRVRIT0RERUYoYm9vbGVhbikKK2VuY29kZV9tY3VfRENfZmlyc3QgKGpfY29tcHJlc3NfcHRyIGNpbmZvLCBKQkxPQ0tST1cgKk1DVV9kYXRhKQoreworICBwaHVmZl9lbnRyb3B5X3B0ciBlbnRyb3B5ID0gKHBodWZmX2VudHJvcHlfcHRyKSBjaW5mby0+ZW50cm9weTsKKyAgcmVnaXN0ZXIgaW50IHRlbXAsIHRlbXAyOworICByZWdpc3RlciBpbnQgbmJpdHM7CisgIGludCBibGtuLCBjaTsKKyAgaW50IEFsID0gY2luZm8tPkFsOworICBKQkxPQ0tST1cgYmxvY2s7CisgIGpwZWdfY29tcG9uZW50X2luZm8gKiBjb21wcHRyOworICBJU0hJRlRfVEVNUFMKKworICBlbnRyb3B5LT5uZXh0X291dHB1dF9ieXRlID0gY2luZm8tPmRlc3QtPm5leHRfb3V0cHV0X2J5dGU7CisgIGVudHJvcHktPmZyZWVfaW5fYnVmZmVyID0gY2luZm8tPmRlc3QtPmZyZWVfaW5fYnVmZmVyOworCisgIC8qIEVtaXQgcmVzdGFydCBtYXJrZXIgaWYgbmVlZGVkICovCisgIGlmIChjaW5mby0+cmVzdGFydF9pbnRlcnZhbCkKKyAgICBpZiAoZW50cm9weS0+cmVzdGFydHNfdG9fZ28gPT0gMCkKKyAgICAgIGVtaXRfcmVzdGFydChlbnRyb3B5LCBlbnRyb3B5LT5uZXh0X3Jlc3RhcnRfbnVtKTsKKworICAvKiBFbmNvZGUgdGhlIE1DVSBkYXRhIGJsb2NrcyAqLworICBmb3IgKGJsa24gPSAwOyBibGtuIDwgY2luZm8tPmJsb2Nrc19pbl9NQ1U7IGJsa24rKykgeworICAgIGJsb2NrID0gTUNVX2RhdGFbYmxrbl07CisgICAgY2kgPSBjaW5mby0+TUNVX21lbWJlcnNoaXBbYmxrbl07CisgICAgY29tcHB0ciA9IGNpbmZvLT5jdXJfY29tcF9pbmZvW2NpXTsKKworICAgIC8qIENvbXB1dGUgdGhlIERDIHZhbHVlIGFmdGVyIHRoZSByZXF1aXJlZCBwb2ludCB0cmFuc2Zvcm0gYnkgQWwuCisgICAgICogVGhpcyBpcyBzaW1wbHkgYW4gYXJpdGhtZXRpYyByaWdodCBzaGlmdC4KKyAgICAgKi8KKyAgICB0ZW1wMiA9IElSSUdIVF9TSElGVCgoaW50KSAoKCpibG9jaylbMF0pLCBBbCk7CisKKyAgICAvKiBEQyBkaWZmZXJlbmNlcyBhcmUgZmlndXJlZCBvbiB0aGUgcG9pbnQtdHJhbnNmb3JtZWQgdmFsdWVzLiAqLworICAgIHRlbXAgPSB0ZW1wMiAtIGVudHJvcHktPmxhc3RfZGNfdmFsW2NpXTsKKyAgICBlbnRyb3B5LT5sYXN0X2RjX3ZhbFtjaV0gPSB0ZW1wMjsKKworICAgIC8qIEVuY29kZSB0aGUgREMgY29lZmZpY2llbnQgZGlmZmVyZW5jZSBwZXIgc2VjdGlvbiBHLjEuMi4xICovCisgICAgdGVtcDIgPSB0ZW1wOworICAgIGlmICh0ZW1wIDwgMCkgeworICAgICAgdGVtcCA9IC10ZW1wOwkJLyogdGVtcCBpcyBhYnMgdmFsdWUgb2YgaW5wdXQgKi8KKyAgICAgIC8qIEZvciBhIG5lZ2F0aXZlIGlucHV0LCB3YW50IHRlbXAyID0gYml0d2lzZSBjb21wbGVtZW50IG9mIGFicyhpbnB1dCkgKi8KKyAgICAgIC8qIFRoaXMgY29kZSBhc3N1bWVzIHdlIGFyZSBvbiBhIHR3bydzIGNvbXBsZW1lbnQgbWFjaGluZSAqLworICAgICAgdGVtcDItLTsKKyAgICB9CisgICAgCisgICAgLyogRmluZCB0aGUgbnVtYmVyIG9mIGJpdHMgbmVlZGVkIGZvciB0aGUgbWFnbml0dWRlIG9mIHRoZSBjb2VmZmljaWVudCAqLworICAgIG5iaXRzID0gMDsKKyAgICB3aGlsZSAodGVtcCkgeworICAgICAgbmJpdHMrKzsKKyAgICAgIHRlbXAgPj49IDE7CisgICAgfQorICAgIC8qIENoZWNrIGZvciBvdXQtb2YtcmFuZ2UgY29lZmZpY2llbnQgdmFsdWVzLgorICAgICAqIFNpbmNlIHdlJ3JlIGVuY29kaW5nIGEgZGlmZmVyZW5jZSwgdGhlIHJhbmdlIGxpbWl0IGlzIHR3aWNlIGFzIG11Y2guCisgICAgICovCisgICAgaWYgKG5iaXRzID4gTUFYX0NPRUZfQklUUysxKQorICAgICAgRVJSRVhJVChjaW5mbywgSkVSUl9CQURfRENUX0NPRUYpOworICAgIAorICAgIC8qIENvdW50L2VtaXQgdGhlIEh1ZmZtYW4tY29kZWQgc3ltYm9sIGZvciB0aGUgbnVtYmVyIG9mIGJpdHMgKi8KKyAgICBlbWl0X3N5bWJvbChlbnRyb3B5LCBjb21wcHRyLT5kY190Ymxfbm8sIG5iaXRzKTsKKyAgICAKKyAgICAvKiBFbWl0IHRoYXQgbnVtYmVyIG9mIGJpdHMgb2YgdGhlIHZhbHVlLCBpZiBwb3NpdGl2ZSwgKi8KKyAgICAvKiBvciB0aGUgY29tcGxlbWVudCBvZiBpdHMgbWFnbml0dWRlLCBpZiBuZWdhdGl2ZS4gKi8KKyAgICBpZiAobmJpdHMpCQkJLyogZW1pdF9iaXRzIHJlamVjdHMgY2FsbHMgd2l0aCBzaXplIDAgKi8KKyAgICAgIGVtaXRfYml0cyhlbnRyb3B5LCAodW5zaWduZWQgaW50KSB0ZW1wMiwgbmJpdHMpOworICB9CisKKyAgY2luZm8tPmRlc3QtPm5leHRfb3V0cHV0X2J5dGUgPSBlbnRyb3B5LT5uZXh0X291dHB1dF9ieXRlOworICBjaW5mby0+ZGVzdC0+ZnJlZV9pbl9idWZmZXIgPSBlbnRyb3B5LT5mcmVlX2luX2J1ZmZlcjsKKworICAvKiBVcGRhdGUgcmVzdGFydC1pbnRlcnZhbCBzdGF0ZSB0b28gKi8KKyAgaWYgKGNpbmZvLT5yZXN0YXJ0X2ludGVydmFsKSB7CisgICAgaWYgKGVudHJvcHktPnJlc3RhcnRzX3RvX2dvID09IDApIHsKKyAgICAgIGVudHJvcHktPnJlc3RhcnRzX3RvX2dvID0gY2luZm8tPnJlc3RhcnRfaW50ZXJ2YWw7CisgICAgICBlbnRyb3B5LT5uZXh0X3Jlc3RhcnRfbnVtKys7CisgICAgICBlbnRyb3B5LT5uZXh0X3Jlc3RhcnRfbnVtICY9IDc7CisgICAgfQorICAgIGVudHJvcHktPnJlc3RhcnRzX3RvX2dvLS07CisgIH0KKworICByZXR1cm4gVFJVRTsKK30KKworCisvKgorICogTUNVIGVuY29kaW5nIGZvciBBQyBpbml0aWFsIHNjYW4gKGVpdGhlciBzcGVjdHJhbCBzZWxlY3Rpb24sCisgKiBvciBmaXJzdCBwYXNzIG9mIHN1Y2Nlc3NpdmUgYXBwcm94aW1hdGlvbikuCisgKi8KKworTUVUSE9EREVGKGJvb2xlYW4pCitlbmNvZGVfbWN1X0FDX2ZpcnN0IChqX2NvbXByZXNzX3B0ciBjaW5mbywgSkJMT0NLUk9XICpNQ1VfZGF0YSkKK3sKKyAgcGh1ZmZfZW50cm9weV9wdHIgZW50cm9weSA9IChwaHVmZl9lbnRyb3B5X3B0cikgY2luZm8tPmVudHJvcHk7CisgIHJlZ2lzdGVyIGludCB0ZW1wLCB0ZW1wMjsKKyAgcmVnaXN0ZXIgaW50IG5iaXRzOworICByZWdpc3RlciBpbnQgciwgazsKKyAgaW50IFNlID0gY2luZm8tPlNlOworICBpbnQgQWwgPSBjaW5mby0+QWw7CisgIEpCTE9DS1JPVyBibG9jazsKKworICBlbnRyb3B5LT5uZXh0X291dHB1dF9ieXRlID0gY2luZm8tPmRlc3QtPm5leHRfb3V0cHV0X2J5dGU7CisgIGVudHJvcHktPmZyZWVfaW5fYnVmZmVyID0gY2luZm8tPmRlc3QtPmZyZWVfaW5fYnVmZmVyOworCisgIC8qIEVtaXQgcmVzdGFydCBtYXJrZXIgaWYgbmVlZGVkICovCisgIGlmIChjaW5mby0+cmVzdGFydF9pbnRlcnZhbCkKKyAgICBpZiAoZW50cm9weS0+cmVzdGFydHNfdG9fZ28gPT0gMCkKKyAgICAgIGVtaXRfcmVzdGFydChlbnRyb3B5LCBlbnRyb3B5LT5uZXh0X3Jlc3RhcnRfbnVtKTsKKworICAvKiBFbmNvZGUgdGhlIE1DVSBkYXRhIGJsb2NrICovCisgIGJsb2NrID0gTUNVX2RhdGFbMF07CisKKyAgLyogRW5jb2RlIHRoZSBBQyBjb2VmZmljaWVudHMgcGVyIHNlY3Rpb24gRy4xLjIuMiwgZmlnLiBHLjMgKi8KKyAgCisgIHIgPSAwOwkJCS8qIHIgPSBydW4gbGVuZ3RoIG9mIHplcm9zICovCisgICAKKyAgZm9yIChrID0gY2luZm8tPlNzOyBrIDw9IFNlOyBrKyspIHsKKyAgICBpZiAoKHRlbXAgPSAoKmJsb2NrKVtqcGVnX25hdHVyYWxfb3JkZXJba11dKSA9PSAwKSB7CisgICAgICByKys7CisgICAgICBjb250aW51ZTsKKyAgICB9CisgICAgLyogV2UgbXVzdCBhcHBseSB0aGUgcG9pbnQgdHJhbnNmb3JtIGJ5IEFsLiAgRm9yIEFDIGNvZWZmaWNpZW50cyB0aGlzCisgICAgICogaXMgYW4gaW50ZWdlciBkaXZpc2lvbiB3aXRoIHJvdW5kaW5nIHRvd2FyZHMgMC4gIFRvIGRvIHRoaXMgcG9ydGFibHkKKyAgICAgKiBpbiBDLCB3ZSBzaGlmdCBhZnRlciBvYnRhaW5pbmcgdGhlIGFic29sdXRlIHZhbHVlOyBzbyB0aGUgY29kZSBpcworICAgICAqIGludGVyd292ZW4gd2l0aCBmaW5kaW5nIHRoZSBhYnMgdmFsdWUgKHRlbXApIGFuZCBvdXRwdXQgYml0cyAodGVtcDIpLgorICAgICAqLworICAgIGlmICh0ZW1wIDwgMCkgeworICAgICAgdGVtcCA9IC10ZW1wOwkJLyogdGVtcCBpcyBhYnMgdmFsdWUgb2YgaW5wdXQgKi8KKyAgICAgIHRlbXAgPj49IEFsOwkJLyogYXBwbHkgdGhlIHBvaW50IHRyYW5zZm9ybSAqLworICAgICAgLyogRm9yIGEgbmVnYXRpdmUgY29lZiwgd2FudCB0ZW1wMiA9IGJpdHdpc2UgY29tcGxlbWVudCBvZiBhYnMoY29lZikgKi8KKyAgICAgIHRlbXAyID0gfnRlbXA7CisgICAgfSBlbHNlIHsKKyAgICAgIHRlbXAgPj49IEFsOwkJLyogYXBwbHkgdGhlIHBvaW50IHRyYW5zZm9ybSAqLworICAgICAgdGVtcDIgPSB0ZW1wOworICAgIH0KKyAgICAvKiBXYXRjaCBvdXQgZm9yIGNhc2UgdGhhdCBub256ZXJvIGNvZWYgaXMgemVybyBhZnRlciBwb2ludCB0cmFuc2Zvcm0gKi8KKyAgICBpZiAodGVtcCA9PSAwKSB7CisgICAgICByKys7CisgICAgICBjb250aW51ZTsKKyAgICB9CisKKyAgICAvKiBFbWl0IGFueSBwZW5kaW5nIEVPQlJVTiAqLworICAgIGlmIChlbnRyb3B5LT5FT0JSVU4gPiAwKQorICAgICAgZW1pdF9lb2JydW4oZW50cm9weSk7CisgICAgLyogaWYgcnVuIGxlbmd0aCA+IDE1LCBtdXN0IGVtaXQgc3BlY2lhbCBydW4tbGVuZ3RoLTE2IGNvZGVzICgweEYwKSAqLworICAgIHdoaWxlIChyID4gMTUpIHsKKyAgICAgIGVtaXRfc3ltYm9sKGVudHJvcHksIGVudHJvcHktPmFjX3RibF9ubywgMHhGMCk7CisgICAgICByIC09IDE2OworICAgIH0KKworICAgIC8qIEZpbmQgdGhlIG51bWJlciBvZiBiaXRzIG5lZWRlZCBmb3IgdGhlIG1hZ25pdHVkZSBvZiB0aGUgY29lZmZpY2llbnQgKi8KKyAgICBuYml0cyA9IDE7CQkJLyogdGhlcmUgbXVzdCBiZSBhdCBsZWFzdCBvbmUgMSBiaXQgKi8KKyAgICB3aGlsZSAoKHRlbXAgPj49IDEpKQorICAgICAgbmJpdHMrKzsKKyAgICAvKiBDaGVjayBmb3Igb3V0LW9mLXJhbmdlIGNvZWZmaWNpZW50IHZhbHVlcyAqLworICAgIGlmIChuYml0cyA+IE1BWF9DT0VGX0JJVFMpCisgICAgICBFUlJFWElUKGNpbmZvLCBKRVJSX0JBRF9EQ1RfQ09FRik7CisKKyAgICAvKiBDb3VudC9lbWl0IEh1ZmZtYW4gc3ltYm9sIGZvciBydW4gbGVuZ3RoIC8gbnVtYmVyIG9mIGJpdHMgKi8KKyAgICBlbWl0X3N5bWJvbChlbnRyb3B5LCBlbnRyb3B5LT5hY190Ymxfbm8sIChyIDw8IDQpICsgbmJpdHMpOworCisgICAgLyogRW1pdCB0aGF0IG51bWJlciBvZiBiaXRzIG9mIHRoZSB2YWx1ZSwgaWYgcG9zaXRpdmUsICovCisgICAgLyogb3IgdGhlIGNvbXBsZW1lbnQgb2YgaXRzIG1hZ25pdHVkZSwgaWYgbmVnYXRpdmUuICovCisgICAgZW1pdF9iaXRzKGVudHJvcHksICh1bnNpZ25lZCBpbnQpIHRlbXAyLCBuYml0cyk7CisKKyAgICByID0gMDsJCQkvKiByZXNldCB6ZXJvIHJ1biBsZW5ndGggKi8KKyAgfQorCisgIGlmIChyID4gMCkgewkJCS8qIElmIHRoZXJlIGFyZSB0cmFpbGluZyB6ZXJvZXMsICovCisgICAgZW50cm9weS0+RU9CUlVOKys7CQkvKiBjb3VudCBhbiBFT0IgKi8KKyAgICBpZiAoZW50cm9weS0+RU9CUlVOID09IDB4N0ZGRikKKyAgICAgIGVtaXRfZW9icnVuKGVudHJvcHkpOwkvKiBmb3JjZSBpdCBvdXQgdG8gYXZvaWQgb3ZlcmZsb3cgKi8KKyAgfQorCisgIGNpbmZvLT5kZXN0LT5uZXh0X291dHB1dF9ieXRlID0gZW50cm9weS0+bmV4dF9vdXRwdXRfYnl0ZTsKKyAgY2luZm8tPmRlc3QtPmZyZWVfaW5fYnVmZmVyID0gZW50cm9weS0+ZnJlZV9pbl9idWZmZXI7CisKKyAgLyogVXBkYXRlIHJlc3RhcnQtaW50ZXJ2YWwgc3RhdGUgdG9vICovCisgIGlmIChjaW5mby0+cmVzdGFydF9pbnRlcnZhbCkgeworICAgIGlmIChlbnRyb3B5LT5yZXN0YXJ0c190b19nbyA9PSAwKSB7CisgICAgICBlbnRyb3B5LT5yZXN0YXJ0c190b19nbyA9IGNpbmZvLT5yZXN0YXJ0X2ludGVydmFsOworICAgICAgZW50cm9weS0+bmV4dF9yZXN0YXJ0X251bSsrOworICAgICAgZW50cm9weS0+bmV4dF9yZXN0YXJ0X251bSAmPSA3OworICAgIH0KKyAgICBlbnRyb3B5LT5yZXN0YXJ0c190b19nby0tOworICB9CisKKyAgcmV0dXJuIFRSVUU7Cit9CisKKworLyoKKyAqIE1DVSBlbmNvZGluZyBmb3IgREMgc3VjY2Vzc2l2ZSBhcHByb3hpbWF0aW9uIHJlZmluZW1lbnQgc2Nhbi4KKyAqIE5vdGU6IHdlIGFzc3VtZSBzdWNoIHNjYW5zIGNhbiBiZSBtdWx0aS1jb21wb25lbnQsIGFsdGhvdWdoIHRoZSBzcGVjCisgKiBpcyBub3QgdmVyeSBjbGVhciBvbiB0aGUgcG9pbnQuCisgKi8KKworTUVUSE9EREVGKGJvb2xlYW4pCitlbmNvZGVfbWN1X0RDX3JlZmluZSAoal9jb21wcmVzc19wdHIgY2luZm8sIEpCTE9DS1JPVyAqTUNVX2RhdGEpCit7CisgIHBodWZmX2VudHJvcHlfcHRyIGVudHJvcHkgPSAocGh1ZmZfZW50cm9weV9wdHIpIGNpbmZvLT5lbnRyb3B5OworICByZWdpc3RlciBpbnQgdGVtcDsKKyAgaW50IGJsa247CisgIGludCBBbCA9IGNpbmZvLT5BbDsKKyAgSkJMT0NLUk9XIGJsb2NrOworCisgIGVudHJvcHktPm5leHRfb3V0cHV0X2J5dGUgPSBjaW5mby0+ZGVzdC0+bmV4dF9vdXRwdXRfYnl0ZTsKKyAgZW50cm9weS0+ZnJlZV9pbl9idWZmZXIgPSBjaW5mby0+ZGVzdC0+ZnJlZV9pbl9idWZmZXI7CisKKyAgLyogRW1pdCByZXN0YXJ0IG1hcmtlciBpZiBuZWVkZWQgKi8KKyAgaWYgKGNpbmZvLT5yZXN0YXJ0X2ludGVydmFsKQorICAgIGlmIChlbnRyb3B5LT5yZXN0YXJ0c190b19nbyA9PSAwKQorICAgICAgZW1pdF9yZXN0YXJ0KGVudHJvcHksIGVudHJvcHktPm5leHRfcmVzdGFydF9udW0pOworCisgIC8qIEVuY29kZSB0aGUgTUNVIGRhdGEgYmxvY2tzICovCisgIGZvciAoYmxrbiA9IDA7IGJsa24gPCBjaW5mby0+YmxvY2tzX2luX01DVTsgYmxrbisrKSB7CisgICAgYmxvY2sgPSBNQ1VfZGF0YVtibGtuXTsKKworICAgIC8qIFdlIHNpbXBseSBlbWl0IHRoZSBBbCd0aCBiaXQgb2YgdGhlIERDIGNvZWZmaWNpZW50IHZhbHVlLiAqLworICAgIHRlbXAgPSAoKmJsb2NrKVswXTsKKyAgICBlbWl0X2JpdHMoZW50cm9weSwgKHVuc2lnbmVkIGludCkgKHRlbXAgPj4gQWwpLCAxKTsKKyAgfQorCisgIGNpbmZvLT5kZXN0LT5uZXh0X291dHB1dF9ieXRlID0gZW50cm9weS0+bmV4dF9vdXRwdXRfYnl0ZTsKKyAgY2luZm8tPmRlc3QtPmZyZWVfaW5fYnVmZmVyID0gZW50cm9weS0+ZnJlZV9pbl9idWZmZXI7CisKKyAgLyogVXBkYXRlIHJlc3RhcnQtaW50ZXJ2YWwgc3RhdGUgdG9vICovCisgIGlmIChjaW5mby0+cmVzdGFydF9pbnRlcnZhbCkgeworICAgIGlmIChlbnRyb3B5LT5yZXN0YXJ0c190b19nbyA9PSAwKSB7CisgICAgICBlbnRyb3B5LT5yZXN0YXJ0c190b19nbyA9IGNpbmZvLT5yZXN0YXJ0X2ludGVydmFsOworICAgICAgZW50cm9weS0+bmV4dF9yZXN0YXJ0X251bSsrOworICAgICAgZW50cm9weS0+bmV4dF9yZXN0YXJ0X251bSAmPSA3OworICAgIH0KKyAgICBlbnRyb3B5LT5yZXN0YXJ0c190b19nby0tOworICB9CisKKyAgcmV0dXJuIFRSVUU7Cit9CisKKworLyoKKyAqIE1DVSBlbmNvZGluZyBmb3IgQUMgc3VjY2Vzc2l2ZSBhcHByb3hpbWF0aW9uIHJlZmluZW1lbnQgc2Nhbi4KKyAqLworCitNRVRIT0RERUYoYm9vbGVhbikKK2VuY29kZV9tY3VfQUNfcmVmaW5lIChqX2NvbXByZXNzX3B0ciBjaW5mbywgSkJMT0NLUk9XICpNQ1VfZGF0YSkKK3sKKyAgcGh1ZmZfZW50cm9weV9wdHIgZW50cm9weSA9IChwaHVmZl9lbnRyb3B5X3B0cikgY2luZm8tPmVudHJvcHk7CisgIHJlZ2lzdGVyIGludCB0ZW1wOworICByZWdpc3RlciBpbnQgciwgazsKKyAgaW50IEVPQjsKKyAgY2hhciAqQlJfYnVmZmVyOworICB1bnNpZ25lZCBpbnQgQlI7CisgIGludCBTZSA9IGNpbmZvLT5TZTsKKyAgaW50IEFsID0gY2luZm8tPkFsOworICBKQkxPQ0tST1cgYmxvY2s7CisgIGludCBhYnN2YWx1ZXNbRENUU0laRTJdOworCisgIGVudHJvcHktPm5leHRfb3V0cHV0X2J5dGUgPSBjaW5mby0+ZGVzdC0+bmV4dF9vdXRwdXRfYnl0ZTsKKyAgZW50cm9weS0+ZnJlZV9pbl9idWZmZXIgPSBjaW5mby0+ZGVzdC0+ZnJlZV9pbl9idWZmZXI7CisKKyAgLyogRW1pdCByZXN0YXJ0IG1hcmtlciBpZiBuZWVkZWQgKi8KKyAgaWYgKGNpbmZvLT5yZXN0YXJ0X2ludGVydmFsKQorICAgIGlmIChlbnRyb3B5LT5yZXN0YXJ0c190b19nbyA9PSAwKQorICAgICAgZW1pdF9yZXN0YXJ0KGVudHJvcHksIGVudHJvcHktPm5leHRfcmVzdGFydF9udW0pOworCisgIC8qIEVuY29kZSB0aGUgTUNVIGRhdGEgYmxvY2sgKi8KKyAgYmxvY2sgPSBNQ1VfZGF0YVswXTsKKworICAvKiBJdCBpcyBjb252ZW5pZW50IHRvIG1ha2UgYSBwcmUtcGFzcyB0byBkZXRlcm1pbmUgdGhlIHRyYW5zZm9ybWVkCisgICAqIGNvZWZmaWNpZW50cycgYWJzb2x1dGUgdmFsdWVzIGFuZCB0aGUgRU9CIHBvc2l0aW9uLgorICAgKi8KKyAgRU9CID0gMDsKKyAgZm9yIChrID0gY2luZm8tPlNzOyBrIDw9IFNlOyBrKyspIHsKKyAgICB0ZW1wID0gKCpibG9jaylbanBlZ19uYXR1cmFsX29yZGVyW2tdXTsKKyAgICAvKiBXZSBtdXN0IGFwcGx5IHRoZSBwb2ludCB0cmFuc2Zvcm0gYnkgQWwuICBGb3IgQUMgY29lZmZpY2llbnRzIHRoaXMKKyAgICAgKiBpcyBhbiBpbnRlZ2VyIGRpdmlzaW9uIHdpdGggcm91bmRpbmcgdG93YXJkcyAwLiAgVG8gZG8gdGhpcyBwb3J0YWJseQorICAgICAqIGluIEMsIHdlIHNoaWZ0IGFmdGVyIG9idGFpbmluZyB0aGUgYWJzb2x1dGUgdmFsdWUuCisgICAgICovCisgICAgaWYgKHRlbXAgPCAwKQorICAgICAgdGVtcCA9IC10ZW1wOwkJLyogdGVtcCBpcyBhYnMgdmFsdWUgb2YgaW5wdXQgKi8KKyAgICB0ZW1wID4+PSBBbDsJCS8qIGFwcGx5IHRoZSBwb2ludCB0cmFuc2Zvcm0gKi8KKyAgICBhYnN2YWx1ZXNba10gPSB0ZW1wOwkvKiBzYXZlIGFicyB2YWx1ZSBmb3IgbWFpbiBwYXNzICovCisgICAgaWYgKHRlbXAgPT0gMSkKKyAgICAgIEVPQiA9IGs7CQkJLyogRU9CID0gaW5kZXggb2YgbGFzdCBuZXdseS1ub256ZXJvIGNvZWYgKi8KKyAgfQorCisgIC8qIEVuY29kZSB0aGUgQUMgY29lZmZpY2llbnRzIHBlciBzZWN0aW9uIEcuMS4yLjMsIGZpZy4gRy43ICovCisgIAorICByID0gMDsJCQkvKiByID0gcnVuIGxlbmd0aCBvZiB6ZXJvcyAqLworICBCUiA9IDA7CQkJLyogQlIgPSBjb3VudCBvZiBidWZmZXJlZCBiaXRzIGFkZGVkIG5vdyAqLworICBCUl9idWZmZXIgPSBlbnRyb3B5LT5iaXRfYnVmZmVyICsgZW50cm9weS0+QkU7IC8qIEFwcGVuZCBiaXRzIHRvIGJ1ZmZlciAqLworCisgIGZvciAoayA9IGNpbmZvLT5TczsgayA8PSBTZTsgaysrKSB7CisgICAgaWYgKCh0ZW1wID0gYWJzdmFsdWVzW2tdKSA9PSAwKSB7CisgICAgICByKys7CisgICAgICBjb250aW51ZTsKKyAgICB9CisKKyAgICAvKiBFbWl0IGFueSByZXF1aXJlZCBaUkxzLCBidXQgbm90IGlmIHRoZXkgY2FuIGJlIGZvbGRlZCBpbnRvIEVPQiAqLworICAgIHdoaWxlIChyID4gMTUgJiYgayA8PSBFT0IpIHsKKyAgICAgIC8qIGVtaXQgYW55IHBlbmRpbmcgRU9CUlVOIGFuZCB0aGUgQkUgY29ycmVjdGlvbiBiaXRzICovCisgICAgICBlbWl0X2VvYnJ1bihlbnRyb3B5KTsKKyAgICAgIC8qIEVtaXQgWlJMICovCisgICAgICBlbWl0X3N5bWJvbChlbnRyb3B5LCBlbnRyb3B5LT5hY190Ymxfbm8sIDB4RjApOworICAgICAgciAtPSAxNjsKKyAgICAgIC8qIEVtaXQgYnVmZmVyZWQgY29ycmVjdGlvbiBiaXRzIHRoYXQgbXVzdCBiZSBhc3NvY2lhdGVkIHdpdGggWlJMICovCisgICAgICBlbWl0X2J1ZmZlcmVkX2JpdHMoZW50cm9weSwgQlJfYnVmZmVyLCBCUik7CisgICAgICBCUl9idWZmZXIgPSBlbnRyb3B5LT5iaXRfYnVmZmVyOyAvKiBCRSBiaXRzIGFyZSBnb25lIG5vdyAqLworICAgICAgQlIgPSAwOworICAgIH0KKworICAgIC8qIElmIHRoZSBjb2VmIHdhcyBwcmV2aW91c2x5IG5vbnplcm8sIGl0IG9ubHkgbmVlZHMgYSBjb3JyZWN0aW9uIGJpdC4KKyAgICAgKiBOT1RFOiBhIHN0cmFpZ2h0IHRyYW5zbGF0aW9uIG9mIHRoZSBzcGVjJ3MgZmlndXJlIEcuNyB3b3VsZCBzdWdnZXN0CisgICAgICogdGhhdCB3ZSBhbHNvIG5lZWQgdG8gdGVzdCByID4gMTUuICBCdXQgaWYgciA+IDE1LCB3ZSBjYW4gb25seSBnZXQgaGVyZQorICAgICAqIGlmIGsgPiBFT0IsIHdoaWNoIGltcGxpZXMgdGhhdCB0aGlzIGNvZWZmaWNpZW50IGlzIG5vdCAxLgorICAgICAqLworICAgIGlmICh0ZW1wID4gMSkgeworICAgICAgLyogVGhlIGNvcnJlY3Rpb24gYml0IGlzIHRoZSBuZXh0IGJpdCBvZiB0aGUgYWJzb2x1dGUgdmFsdWUuICovCisgICAgICBCUl9idWZmZXJbQlIrK10gPSAoY2hhcikgKHRlbXAgJiAxKTsKKyAgICAgIGNvbnRpbnVlOworICAgIH0KKworICAgIC8qIEVtaXQgYW55IHBlbmRpbmcgRU9CUlVOIGFuZCB0aGUgQkUgY29ycmVjdGlvbiBiaXRzICovCisgICAgZW1pdF9lb2JydW4oZW50cm9weSk7CisKKyAgICAvKiBDb3VudC9lbWl0IEh1ZmZtYW4gc3ltYm9sIGZvciBydW4gbGVuZ3RoIC8gbnVtYmVyIG9mIGJpdHMgKi8KKyAgICBlbWl0X3N5bWJvbChlbnRyb3B5LCBlbnRyb3B5LT5hY190Ymxfbm8sIChyIDw8IDQpICsgMSk7CisKKyAgICAvKiBFbWl0IG91dHB1dCBiaXQgZm9yIG5ld2x5LW5vbnplcm8gY29lZiAqLworICAgIHRlbXAgPSAoKCpibG9jaylbanBlZ19uYXR1cmFsX29yZGVyW2tdXSA8IDApID8gMCA6IDE7CisgICAgZW1pdF9iaXRzKGVudHJvcHksICh1bnNpZ25lZCBpbnQpIHRlbXAsIDEpOworCisgICAgLyogRW1pdCBidWZmZXJlZCBjb3JyZWN0aW9uIGJpdHMgdGhhdCBtdXN0IGJlIGFzc29jaWF0ZWQgd2l0aCB0aGlzIGNvZGUgKi8KKyAgICBlbWl0X2J1ZmZlcmVkX2JpdHMoZW50cm9weSwgQlJfYnVmZmVyLCBCUik7CisgICAgQlJfYnVmZmVyID0gZW50cm9weS0+Yml0X2J1ZmZlcjsgLyogQkUgYml0cyBhcmUgZ29uZSBub3cgKi8KKyAgICBCUiA9IDA7CisgICAgciA9IDA7CQkJLyogcmVzZXQgemVybyBydW4gbGVuZ3RoICovCisgIH0KKworICBpZiAociA+IDAgfHwgQlIgPiAwKSB7CS8qIElmIHRoZXJlIGFyZSB0cmFpbGluZyB6ZXJvZXMsICovCisgICAgZW50cm9weS0+RU9CUlVOKys7CQkvKiBjb3VudCBhbiBFT0IgKi8KKyAgICBlbnRyb3B5LT5CRSArPSBCUjsJCS8qIGNvbmNhdCBteSBjb3JyZWN0aW9uIGJpdHMgdG8gb2xkZXIgb25lcyAqLworICAgIC8qIFdlIGZvcmNlIG91dCB0aGUgRU9CIGlmIHdlIHJpc2sgZWl0aGVyOgorICAgICAqIDEuIG92ZXJmbG93IG9mIHRoZSBFT0IgY291bnRlcjsKKyAgICAgKiAyLiBvdmVyZmxvdyBvZiB0aGUgY29ycmVjdGlvbiBiaXQgYnVmZmVyIGR1cmluZyB0aGUgbmV4dCBNQ1UuCisgICAgICovCisgICAgaWYgKGVudHJvcHktPkVPQlJVTiA9PSAweDdGRkYgfHwgZW50cm9weS0+QkUgPiAoTUFYX0NPUlJfQklUUy1EQ1RTSVpFMisxKSkKKyAgICAgIGVtaXRfZW9icnVuKGVudHJvcHkpOworICB9CisKKyAgY2luZm8tPmRlc3QtPm5leHRfb3V0cHV0X2J5dGUgPSBlbnRyb3B5LT5uZXh0X291dHB1dF9ieXRlOworICBjaW5mby0+ZGVzdC0+ZnJlZV9pbl9idWZmZXIgPSBlbnRyb3B5LT5mcmVlX2luX2J1ZmZlcjsKKworICAvKiBVcGRhdGUgcmVzdGFydC1pbnRlcnZhbCBzdGF0ZSB0b28gKi8KKyAgaWYgKGNpbmZvLT5yZXN0YXJ0X2ludGVydmFsKSB7CisgICAgaWYgKGVudHJvcHktPnJlc3RhcnRzX3RvX2dvID09IDApIHsKKyAgICAgIGVudHJvcHktPnJlc3RhcnRzX3RvX2dvID0gY2luZm8tPnJlc3RhcnRfaW50ZXJ2YWw7CisgICAgICBlbnRyb3B5LT5uZXh0X3Jlc3RhcnRfbnVtKys7CisgICAgICBlbnRyb3B5LT5uZXh0X3Jlc3RhcnRfbnVtICY9IDc7CisgICAgfQorICAgIGVudHJvcHktPnJlc3RhcnRzX3RvX2dvLS07CisgIH0KKworICByZXR1cm4gVFJVRTsKK30KKworCisvKgorICogRmluaXNoIHVwIGF0IHRoZSBlbmQgb2YgYSBIdWZmbWFuLWNvbXByZXNzZWQgcHJvZ3Jlc3NpdmUgc2Nhbi4KKyAqLworCitNRVRIT0RERUYodm9pZCkKK2ZpbmlzaF9wYXNzX3BodWZmIChqX2NvbXByZXNzX3B0ciBjaW5mbykKK3sgICAKKyAgcGh1ZmZfZW50cm9weV9wdHIgZW50cm9weSA9IChwaHVmZl9lbnRyb3B5X3B0cikgY2luZm8tPmVudHJvcHk7CisKKyAgZW50cm9weS0+bmV4dF9vdXRwdXRfYnl0ZSA9IGNpbmZvLT5kZXN0LT5uZXh0X291dHB1dF9ieXRlOworICBlbnRyb3B5LT5mcmVlX2luX2J1ZmZlciA9IGNpbmZvLT5kZXN0LT5mcmVlX2luX2J1ZmZlcjsKKworICAvKiBGbHVzaCBvdXQgYW55IGJ1ZmZlcmVkIGRhdGEgKi8KKyAgZW1pdF9lb2JydW4oZW50cm9weSk7CisgIGZsdXNoX2JpdHMoZW50cm9weSk7CisKKyAgY2luZm8tPmRlc3QtPm5leHRfb3V0cHV0X2J5dGUgPSBlbnRyb3B5LT5uZXh0X291dHB1dF9ieXRlOworICBjaW5mby0+ZGVzdC0+ZnJlZV9pbl9idWZmZXIgPSBlbnRyb3B5LT5mcmVlX2luX2J1ZmZlcjsKK30KKworCisvKgorICogRmluaXNoIHVwIGEgc3RhdGlzdGljcy1nYXRoZXJpbmcgcGFzcyBhbmQgY3JlYXRlIHRoZSBuZXcgSHVmZm1hbiB0YWJsZXMuCisgKi8KKworTUVUSE9EREVGKHZvaWQpCitmaW5pc2hfcGFzc19nYXRoZXJfcGh1ZmYgKGpfY29tcHJlc3NfcHRyIGNpbmZvKQoreworICBwaHVmZl9lbnRyb3B5X3B0ciBlbnRyb3B5ID0gKHBodWZmX2VudHJvcHlfcHRyKSBjaW5mby0+ZW50cm9weTsKKyAgYm9vbGVhbiBpc19EQ19iYW5kOworICBpbnQgY2ksIHRibDsKKyAganBlZ19jb21wb25lbnRfaW5mbyAqIGNvbXBwdHI7CisgIEpIVUZGX1RCTCAqKmh0YmxwdHI7CisgIGJvb2xlYW4gZGlkW05VTV9IVUZGX1RCTFNdOworCisgIC8qIEZsdXNoIG91dCBidWZmZXJlZCBkYXRhIChhbGwgd2UgY2FyZSBhYm91dCBpcyBjb3VudGluZyB0aGUgRU9CIHN5bWJvbCkgKi8KKyAgZW1pdF9lb2JydW4oZW50cm9weSk7CisKKyAgaXNfRENfYmFuZCA9IChjaW5mby0+U3MgPT0gMCk7CisKKyAgLyogSXQncyBpbXBvcnRhbnQgbm90IHRvIGFwcGx5IGpwZWdfZ2VuX29wdGltYWxfdGFibGUgbW9yZSB0aGFuIG9uY2UKKyAgICogcGVyIHRhYmxlLCBiZWNhdXNlIGl0IGNsb2JiZXJzIHRoZSBpbnB1dCBmcmVxdWVuY3kgY291bnRzIQorICAgKi8KKyAgTUVNWkVSTyhkaWQsIFNJWkVPRihkaWQpKTsKKworICBmb3IgKGNpID0gMDsgY2kgPCBjaW5mby0+Y29tcHNfaW5fc2NhbjsgY2krKykgeworICAgIGNvbXBwdHIgPSBjaW5mby0+Y3VyX2NvbXBfaW5mb1tjaV07CisgICAgaWYgKGlzX0RDX2JhbmQpIHsKKyAgICAgIGlmIChjaW5mby0+QWggIT0gMCkJLyogREMgcmVmaW5lbWVudCBuZWVkcyBubyB0YWJsZSAqLworCWNvbnRpbnVlOworICAgICAgdGJsID0gY29tcHB0ci0+ZGNfdGJsX25vOworICAgIH0gZWxzZSB7CisgICAgICB0YmwgPSBjb21wcHRyLT5hY190Ymxfbm87CisgICAgfQorICAgIGlmICghIGRpZFt0YmxdKSB7CisgICAgICBpZiAoaXNfRENfYmFuZCkKKyAgICAgICAgaHRibHB0ciA9ICYgY2luZm8tPmRjX2h1ZmZfdGJsX3B0cnNbdGJsXTsKKyAgICAgIGVsc2UKKyAgICAgICAgaHRibHB0ciA9ICYgY2luZm8tPmFjX2h1ZmZfdGJsX3B0cnNbdGJsXTsKKyAgICAgIGlmICgqaHRibHB0ciA9PSBOVUxMKQorICAgICAgICAqaHRibHB0ciA9IGpwZWdfYWxsb2NfaHVmZl90YWJsZSgoal9jb21tb25fcHRyKSBjaW5mbyk7CisgICAgICBqcGVnX2dlbl9vcHRpbWFsX3RhYmxlKGNpbmZvLCAqaHRibHB0ciwgZW50cm9weS0+Y291bnRfcHRyc1t0YmxdKTsKKyAgICAgIGRpZFt0YmxdID0gVFJVRTsKKyAgICB9CisgIH0KK30KKworCisvKgorICogTW9kdWxlIGluaXRpYWxpemF0aW9uIHJvdXRpbmUgZm9yIHByb2dyZXNzaXZlIEh1ZmZtYW4gZW50cm9weSBlbmNvZGluZy4KKyAqLworCitHTE9CQUwodm9pZCkKK2ppbml0X3BodWZmX2VuY29kZXIgKGpfY29tcHJlc3NfcHRyIGNpbmZvKQoreworICBwaHVmZl9lbnRyb3B5X3B0ciBlbnRyb3B5OworICBpbnQgaTsKKworICBlbnRyb3B5ID0gKHBodWZmX2VudHJvcHlfcHRyKQorICAgICgqY2luZm8tPm1lbS0+YWxsb2Nfc21hbGwpICgoal9jb21tb25fcHRyKSBjaW5mbywgSlBPT0xfSU1BR0UsCisJCQkJU0laRU9GKHBodWZmX2VudHJvcHlfZW5jb2RlcikpOworICBjaW5mby0+ZW50cm9weSA9IChzdHJ1Y3QganBlZ19lbnRyb3B5X2VuY29kZXIgKikgZW50cm9weTsKKyAgZW50cm9weS0+cHViLnN0YXJ0X3Bhc3MgPSBzdGFydF9wYXNzX3BodWZmOworCisgIC8qIE1hcmsgdGFibGVzIHVuYWxsb2NhdGVkICovCisgIGZvciAoaSA9IDA7IGkgPCBOVU1fSFVGRl9UQkxTOyBpKyspIHsKKyAgICBlbnRyb3B5LT5kZXJpdmVkX3RibHNbaV0gPSBOVUxMOworICAgIGVudHJvcHktPmNvdW50X3B0cnNbaV0gPSBOVUxMOworICB9CisgIGVudHJvcHktPmJpdF9idWZmZXIgPSBOVUxMOwkvKiBuZWVkZWQgb25seSBpbiBBQyByZWZpbmVtZW50IHNjYW4gKi8KK30KKworI2VuZGlmIC8qIENfUFJPR1JFU1NJVkVfU1VQUE9SVEVEICovCmRpZmYgLS1naXQgYS9qY3ByZXBjdC5jIGIvamNwcmVwY3QuYwppbmRleCBiZTQ0Y2M0Li5mYTkzMzMzIDEwMDY0NAotLS0gYS9qY3ByZXBjdC5jCisrKyBiL2pjcHJlcGN0LmMKQEAgLTE3MywxMiArMTczLDEwIEBACiAJKm91dF9yb3dfZ3JvdXBfY3RyIDwgb3V0X3Jvd19ncm91cHNfYXZhaWwpIHsKICAgICAgIGZvciAoY2kgPSAwLCBjb21wcHRyID0gY2luZm8tPmNvbXBfaW5mbzsgY2kgPCBjaW5mby0+bnVtX2NvbXBvbmVudHM7CiAJICAgY2krKywgY29tcHB0cisrKSB7Ci0JbnVtcm93cyA9IChjb21wcHRyLT52X3NhbXBfZmFjdG9yICogY29tcHB0ci0+RENUX3Zfc2NhbGVkX3NpemUpIC8KLQkJICBjaW5mby0+bWluX0RDVF92X3NjYWxlZF9zaXplOwogCWV4cGFuZF9ib3R0b21fZWRnZShvdXRwdXRfYnVmW2NpXSwKLQkJCSAgIGNvbXBwdHItPndpZHRoX2luX2Jsb2NrcyAqIGNvbXBwdHItPkRDVF9oX3NjYWxlZF9zaXplLAotCQkJICAgKGludCkgKCpvdXRfcm93X2dyb3VwX2N0ciAqIG51bXJvd3MpLAotCQkJICAgKGludCkgKG91dF9yb3dfZ3JvdXBzX2F2YWlsICogbnVtcm93cykpOworCQkJICAgY29tcHB0ci0+d2lkdGhfaW5fYmxvY2tzICogRENUU0laRSwKKwkJCSAgIChpbnQpICgqb3V0X3Jvd19ncm91cF9jdHIgKiBjb21wcHRyLT52X3NhbXBfZmFjdG9yKSwKKwkJCSAgIChpbnQpIChvdXRfcm93X2dyb3Vwc19hdmFpbCAqIGNvbXBwdHItPnZfc2FtcF9mYWN0b3IpKTsKICAgICAgIH0KICAgICAgICpvdXRfcm93X2dyb3VwX2N0ciA9IG91dF9yb3dfZ3JvdXBzX2F2YWlsOwogICAgICAgYnJlYWs7CQkJLyogY2FuIGV4aXQgb3V0ZXIgbG9vcCB3aXRob3V0IHRlc3QgKi8KQEAgLTI5MCw4ICsyODgsNyBAQAogICAgICAqLwogICAgIHRydWVfYnVmZmVyID0gKCpjaW5mby0+bWVtLT5hbGxvY19zYXJyYXkpCiAgICAgICAoKGpfY29tbW9uX3B0cikgY2luZm8sIEpQT09MX0lNQUdFLAotICAgICAgIChKRElNRU5TSU9OKSAoKChsb25nKSBjb21wcHRyLT53aWR0aF9pbl9ibG9ja3MgKgotCQkgICAgICBjaW5mby0+bWluX0RDVF9oX3NjYWxlZF9zaXplICoKKyAgICAgICAoSkRJTUVOU0lPTikgKCgobG9uZykgY29tcHB0ci0+d2lkdGhfaW5fYmxvY2tzICogRENUU0laRSAqCiAJCSAgICAgIGNpbmZvLT5tYXhfaF9zYW1wX2ZhY3RvcikgLyBjb21wcHRyLT5oX3NhbXBfZmFjdG9yKSwKICAgICAgICAoSkRJTUVOU0lPTikgKDMgKiByZ3JvdXBfaGVpZ2h0KSk7CiAgICAgLyogQ29weSB0cnVlIGJ1ZmZlciByb3cgcG9pbnRlcnMgaW50byB0aGUgbWlkZGxlIG9mIHRoZSBmYWtlIHJvdyBhcnJheSAqLwpAQCAtMzQ5LDggKzM0Niw3IEBACiAJIGNpKyssIGNvbXBwdHIrKykgewogICAgICAgcHJlcC0+Y29sb3JfYnVmW2NpXSA9ICgqY2luZm8tPm1lbS0+YWxsb2Nfc2FycmF5KQogCSgoal9jb21tb25fcHRyKSBjaW5mbywgSlBPT0xfSU1BR0UsCi0JIChKRElNRU5TSU9OKSAoKChsb25nKSBjb21wcHRyLT53aWR0aF9pbl9ibG9ja3MgKgotCQkJY2luZm8tPm1pbl9EQ1RfaF9zY2FsZWRfc2l6ZSAqCisJIChKRElNRU5TSU9OKSAoKChsb25nKSBjb21wcHRyLT53aWR0aF9pbl9ibG9ja3MgKiBEQ1RTSVpFICoKIAkJCWNpbmZvLT5tYXhfaF9zYW1wX2ZhY3RvcikgLyBjb21wcHRyLT5oX3NhbXBfZmFjdG9yKSwKIAkgKEpESU1FTlNJT04pIGNpbmZvLT5tYXhfdl9zYW1wX2ZhY3Rvcik7CiAgICAgfQpkaWZmIC0tZ2l0IGEvamNzYW1wbGUuYyBiL2pjc2FtcGxlLmMKaW5kZXggNGQzNmY4NS4uZWVhMzc2ZiAxMDA2NDQKLS0tIGEvamNzYW1wbGUuYworKysgYi9qY3NhbXBsZS5jCkBAIC0yLDYgKzIsNyBAQAogICogamNzYW1wbGUuYwogICoKICAqIENvcHlyaWdodCAoQykgMTk5MS0xOTk2LCBUaG9tYXMgRy4gTGFuZS4KKyAqIENvcHlyaWdodCAyMDA5IFBpZXJyZSBPc3NtYW4gPG9zc21hbkBjZW5kaW8uc2U+IGZvciBDZW5kaW8gQUIKICAqIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBJbmRlcGVuZGVudCBKUEVHIEdyb3VwJ3Mgc29mdHdhcmUuCiAgKiBGb3IgY29uZGl0aW9ucyBvZiBkaXN0cmlidXRpb24gYW5kIHVzZSwgc2VlIHRoZSBhY2NvbXBhbnlpbmcgUkVBRE1FIGZpbGUuCiAgKgpAQCAtNDgsNiArNDksNyBAQAogI2RlZmluZSBKUEVHX0lOVEVSTkFMUwogI2luY2x1ZGUgImppbmNsdWRlLmgiCiAjaW5jbHVkZSAianBlZ2xpYi5oIgorI2luY2x1ZGUgImpzaW1kLmgiCiAKIAogLyogUG9pbnRlciB0byByb3V0aW5lIHRvIGRvd25zYW1wbGUgYSBzaW5nbGUgY29tcG9uZW50ICovCkBAIC02MiwxNSArNjQsNiBAQAogCiAgIC8qIERvd25zYW1wbGluZyBtZXRob2QgcG9pbnRlcnMsIG9uZSBwZXIgY29tcG9uZW50ICovCiAgIGRvd25zYW1wbGUxX3B0ciBtZXRob2RzW01BWF9DT01QT05FTlRTXTsKLQotICAvKiBIZWlnaHQgb2YgYW4gb3V0cHV0IHJvdyBncm91cCBmb3IgZWFjaCBjb21wb25lbnQuICovCi0gIGludCByb3dncm91cF9oZWlnaHRbTUFYX0NPTVBPTkVOVFNdOwotCi0gIC8qIFRoZXNlIGFycmF5cyBzYXZlIHBpeGVsIGV4cGFuc2lvbiBmYWN0b3JzIHNvIHRoYXQgaW50X2Rvd25zYW1wbGUgbmVlZCBub3QKLSAgICogcmVjb21wdXRlIHRoZW0gZWFjaCB0aW1lLiAgVGhleSBhcmUgdW51c2VkIGZvciBvdGhlciBkb3duc2FtcGxpbmcgbWV0aG9kcy4KLSAgICovCi0gIFVJTlQ4IGhfZXhwYW5kW01BWF9DT01QT05FTlRTXTsKLSAgVUlOVDggdl9leHBhbmRbTUFYX0NPTVBPTkVOVFNdOwogfSBteV9kb3duc2FtcGxlcjsKIAogdHlwZWRlZiBteV9kb3duc2FtcGxlciAqIG15X2Rvd25zYW1wbGVfcHRyOwpAQCAtMTMyLDggKzEyNSw3IEBACiAgIGZvciAoY2kgPSAwLCBjb21wcHRyID0gY2luZm8tPmNvbXBfaW5mbzsgY2kgPCBjaW5mby0+bnVtX2NvbXBvbmVudHM7CiAgICAgICAgY2krKywgY29tcHB0cisrKSB7CiAgICAgaW5fcHRyID0gaW5wdXRfYnVmW2NpXSArIGluX3Jvd19pbmRleDsKLSAgICBvdXRfcHRyID0gb3V0cHV0X2J1ZltjaV0gKwotCSAgICAgIChvdXRfcm93X2dyb3VwX2luZGV4ICogZG93bnNhbXBsZS0+cm93Z3JvdXBfaGVpZ2h0W2NpXSk7CisgICAgb3V0X3B0ciA9IG91dHB1dF9idWZbY2ldICsgKG91dF9yb3dfZ3JvdXBfaW5kZXggKiBjb21wcHRyLT52X3NhbXBfZmFjdG9yKTsKICAgICAoKmRvd25zYW1wbGUtPm1ldGhvZHNbY2ldKSAoY2luZm8sIGNvbXBwdHIsIGluX3B0ciwgb3V0X3B0cik7CiAgIH0KIH0KQEAgLTE1MCwxNSArMTQyLDE0IEBACiBpbnRfZG93bnNhbXBsZSAoal9jb21wcmVzc19wdHIgY2luZm8sIGpwZWdfY29tcG9uZW50X2luZm8gKiBjb21wcHRyLAogCQlKU0FNUEFSUkFZIGlucHV0X2RhdGEsIEpTQU1QQVJSQVkgb3V0cHV0X2RhdGEpCiB7Ci0gIG15X2Rvd25zYW1wbGVfcHRyIGRvd25zYW1wbGUgPSAobXlfZG93bnNhbXBsZV9wdHIpIGNpbmZvLT5kb3duc2FtcGxlOwogICBpbnQgaW5yb3csIG91dHJvdywgaF9leHBhbmQsIHZfZXhwYW5kLCBudW1waXgsIG51bXBpeDIsIGgsIHY7CiAgIEpESU1FTlNJT04gb3V0Y29sLCBvdXRjb2xfaDsJLyogb3V0Y29sX2ggPT0gb3V0Y29sKmhfZXhwYW5kICovCi0gIEpESU1FTlNJT04gb3V0cHV0X2NvbHMgPSBjb21wcHRyLT53aWR0aF9pbl9ibG9ja3MgKiBjb21wcHRyLT5EQ1RfaF9zY2FsZWRfc2l6ZTsKKyAgSkRJTUVOU0lPTiBvdXRwdXRfY29scyA9IGNvbXBwdHItPndpZHRoX2luX2Jsb2NrcyAqIERDVFNJWkU7CiAgIEpTQU1QUk9XIGlucHRyLCBvdXRwdHI7CiAgIElOVDMyIG91dHZhbHVlOwogCi0gIGhfZXhwYW5kID0gZG93bnNhbXBsZS0+aF9leHBhbmRbY29tcHB0ci0+Y29tcG9uZW50X2luZGV4XTsKLSAgdl9leHBhbmQgPSBkb3duc2FtcGxlLT52X2V4cGFuZFtjb21wcHRyLT5jb21wb25lbnRfaW5kZXhdOworICBoX2V4cGFuZCA9IGNpbmZvLT5tYXhfaF9zYW1wX2ZhY3RvciAvIGNvbXBwdHItPmhfc2FtcF9mYWN0b3I7CisgIHZfZXhwYW5kID0gY2luZm8tPm1heF92X3NhbXBfZmFjdG9yIC8gY29tcHB0ci0+dl9zYW1wX2ZhY3RvcjsKICAgbnVtcGl4ID0gaF9leHBhbmQgKiB2X2V4cGFuZDsKICAgbnVtcGl4MiA9IG51bXBpeC8yOwogCkBAIC0xNjksOCArMTYwLDggQEAKICAgZXhwYW5kX3JpZ2h0X2VkZ2UoaW5wdXRfZGF0YSwgY2luZm8tPm1heF92X3NhbXBfZmFjdG9yLAogCQkgICAgY2luZm8tPmltYWdlX3dpZHRoLCBvdXRwdXRfY29scyAqIGhfZXhwYW5kKTsKIAotICBpbnJvdyA9IG91dHJvdyA9IDA7Ci0gIHdoaWxlIChpbnJvdyA8IGNpbmZvLT5tYXhfdl9zYW1wX2ZhY3RvcikgeworICBpbnJvdyA9IDA7CisgIGZvciAob3V0cm93ID0gMDsgb3V0cm93IDwgY29tcHB0ci0+dl9zYW1wX2ZhY3Rvcjsgb3V0cm93KyspIHsKICAgICBvdXRwdHIgPSBvdXRwdXRfZGF0YVtvdXRyb3ddOwogICAgIGZvciAob3V0Y29sID0gMCwgb3V0Y29sX2ggPSAwOyBvdXRjb2wgPCBvdXRwdXRfY29sczsKIAkgb3V0Y29sKyssIG91dGNvbF9oICs9IGhfZXhwYW5kKSB7CkBAIC0xODQsNyArMTc1LDYgQEAKICAgICAgICpvdXRwdHIrKyA9IChKU0FNUExFKSAoKG91dHZhbHVlICsgbnVtcGl4MikgLyBudW1waXgpOwogICAgIH0KICAgICBpbnJvdyArPSB2X2V4cGFuZDsKLSAgICBvdXRyb3crKzsKICAgfQogfQogCkBAIC0yMDMsOCArMTkzLDggQEAKICAgamNvcHlfc2FtcGxlX3Jvd3MoaW5wdXRfZGF0YSwgMCwgb3V0cHV0X2RhdGEsIDAsCiAJCSAgICBjaW5mby0+bWF4X3Zfc2FtcF9mYWN0b3IsIGNpbmZvLT5pbWFnZV93aWR0aCk7CiAgIC8qIEVkZ2UtZXhwYW5kICovCi0gIGV4cGFuZF9yaWdodF9lZGdlKG91dHB1dF9kYXRhLCBjaW5mby0+bWF4X3Zfc2FtcF9mYWN0b3IsIGNpbmZvLT5pbWFnZV93aWR0aCwKLQkJICAgIGNvbXBwdHItPndpZHRoX2luX2Jsb2NrcyAqIGNvbXBwdHItPkRDVF9oX3NjYWxlZF9zaXplKTsKKyAgZXhwYW5kX3JpZ2h0X2VkZ2Uob3V0cHV0X2RhdGEsIGNpbmZvLT5tYXhfdl9zYW1wX2ZhY3RvciwKKwkJICAgIGNpbmZvLT5pbWFnZV93aWR0aCwgY29tcHB0ci0+d2lkdGhfaW5fYmxvY2tzICogRENUU0laRSk7CiB9CiAKIApAQCAtMjI0LDkgKzIxNCw5IEBACiBoMnYxX2Rvd25zYW1wbGUgKGpfY29tcHJlc3NfcHRyIGNpbmZvLCBqcGVnX2NvbXBvbmVudF9pbmZvICogY29tcHB0ciwKIAkJIEpTQU1QQVJSQVkgaW5wdXRfZGF0YSwgSlNBTVBBUlJBWSBvdXRwdXRfZGF0YSkKIHsKLSAgaW50IGlucm93OworICBpbnQgb3V0cm93OwogICBKRElNRU5TSU9OIG91dGNvbDsKLSAgSkRJTUVOU0lPTiBvdXRwdXRfY29scyA9IGNvbXBwdHItPndpZHRoX2luX2Jsb2NrcyAqIGNvbXBwdHItPkRDVF9oX3NjYWxlZF9zaXplOworICBKRElNRU5TSU9OIG91dHB1dF9jb2xzID0gY29tcHB0ci0+d2lkdGhfaW5fYmxvY2tzICogRENUU0laRTsKICAgcmVnaXN0ZXIgSlNBTVBST1cgaW5wdHIsIG91dHB0cjsKICAgcmVnaXN0ZXIgaW50IGJpYXM7CiAKQEAgLTIzNyw5ICsyMjcsOSBAQAogICBleHBhbmRfcmlnaHRfZWRnZShpbnB1dF9kYXRhLCBjaW5mby0+bWF4X3Zfc2FtcF9mYWN0b3IsCiAJCSAgICBjaW5mby0+aW1hZ2Vfd2lkdGgsIG91dHB1dF9jb2xzICogMik7CiAKLSAgZm9yIChpbnJvdyA9IDA7IGlucm93IDwgY2luZm8tPm1heF92X3NhbXBfZmFjdG9yOyBpbnJvdysrKSB7Ci0gICAgb3V0cHRyID0gb3V0cHV0X2RhdGFbaW5yb3ddOwotICAgIGlucHRyID0gaW5wdXRfZGF0YVtpbnJvd107CisgIGZvciAob3V0cm93ID0gMDsgb3V0cm93IDwgY29tcHB0ci0+dl9zYW1wX2ZhY3Rvcjsgb3V0cm93KyspIHsKKyAgICBvdXRwdHIgPSBvdXRwdXRfZGF0YVtvdXRyb3ddOworICAgIGlucHRyID0gaW5wdXRfZGF0YVtvdXRyb3ddOwogICAgIGJpYXMgPSAwOwkJCS8qIGJpYXMgPSAwLDEsMCwxLC4uLiBmb3Igc3VjY2Vzc2l2ZSBzYW1wbGVzICovCiAgICAgZm9yIChvdXRjb2wgPSAwOyBvdXRjb2wgPCBvdXRwdXRfY29sczsgb3V0Y29sKyspIHsKICAgICAgICpvdXRwdHIrKyA9IChKU0FNUExFKSAoKEdFVEpTQU1QTEUoKmlucHRyKSArIEdFVEpTQU1QTEUoaW5wdHJbMV0pCkBAIC0yNjMsNyArMjUzLDcgQEAKIHsKICAgaW50IGlucm93LCBvdXRyb3c7CiAgIEpESU1FTlNJT04gb3V0Y29sOwotICBKRElNRU5TSU9OIG91dHB1dF9jb2xzID0gY29tcHB0ci0+d2lkdGhfaW5fYmxvY2tzICogY29tcHB0ci0+RENUX2hfc2NhbGVkX3NpemU7CisgIEpESU1FTlNJT04gb3V0cHV0X2NvbHMgPSBjb21wcHRyLT53aWR0aF9pbl9ibG9ja3MgKiBEQ1RTSVpFOwogICByZWdpc3RlciBKU0FNUFJPVyBpbnB0cjAsIGlucHRyMSwgb3V0cHRyOwogICByZWdpc3RlciBpbnQgYmlhczsKIApAQCAtMjc0LDggKzI2NCw4IEBACiAgIGV4cGFuZF9yaWdodF9lZGdlKGlucHV0X2RhdGEsIGNpbmZvLT5tYXhfdl9zYW1wX2ZhY3RvciwKIAkJICAgIGNpbmZvLT5pbWFnZV93aWR0aCwgb3V0cHV0X2NvbHMgKiAyKTsKIAotICBpbnJvdyA9IG91dHJvdyA9IDA7Ci0gIHdoaWxlIChpbnJvdyA8IGNpbmZvLT5tYXhfdl9zYW1wX2ZhY3RvcikgeworICBpbnJvdyA9IDA7CisgIGZvciAob3V0cm93ID0gMDsgb3V0cm93IDwgY29tcHB0ci0+dl9zYW1wX2ZhY3Rvcjsgb3V0cm93KyspIHsKICAgICBvdXRwdHIgPSBvdXRwdXRfZGF0YVtvdXRyb3ddOwogICAgIGlucHRyMCA9IGlucHV0X2RhdGFbaW5yb3ddOwogICAgIGlucHRyMSA9IGlucHV0X2RhdGFbaW5yb3crMV07CkBAIC0yODgsNyArMjc4LDYgQEAKICAgICAgIGlucHRyMCArPSAyOyBpbnB0cjEgKz0gMjsKICAgICB9CiAgICAgaW5yb3cgKz0gMjsKLSAgICBvdXRyb3crKzsKICAgfQogfQogCkBAIC0zMDcsNyArMjk2LDcgQEAKIHsKICAgaW50IGlucm93LCBvdXRyb3c7CiAgIEpESU1FTlNJT04gY29sY3RyOwotICBKRElNRU5TSU9OIG91dHB1dF9jb2xzID0gY29tcHB0ci0+d2lkdGhfaW5fYmxvY2tzICogY29tcHB0ci0+RENUX2hfc2NhbGVkX3NpemU7CisgIEpESU1FTlNJT04gb3V0cHV0X2NvbHMgPSBjb21wcHRyLT53aWR0aF9pbl9ibG9ja3MgKiBEQ1RTSVpFOwogICByZWdpc3RlciBKU0FNUFJPVyBpbnB0cjAsIGlucHRyMSwgYWJvdmVfcHRyLCBiZWxvd19wdHIsIG91dHB0cjsKICAgSU5UMzIgbWVtYmVyc3VtLCBuZWlnaHN1bSwgbWVtYmVyc2NhbGUsIG5laWdoc2NhbGU7CiAKQEAgLTMzNCw4ICszMjMsOCBAQAogICBtZW1iZXJzY2FsZSA9IDE2Mzg0IC0gY2luZm8tPnNtb290aGluZ19mYWN0b3IgKiA4MDsgLyogc2NhbGVkICgxLTUqU0YpLzQgKi8KICAgbmVpZ2hzY2FsZSA9IGNpbmZvLT5zbW9vdGhpbmdfZmFjdG9yICogMTY7IC8qIHNjYWxlZCBTRi80ICovCiAKLSAgaW5yb3cgPSBvdXRyb3cgPSAwOwotICB3aGlsZSAoaW5yb3cgPCBjaW5mby0+bWF4X3Zfc2FtcF9mYWN0b3IpIHsKKyAgaW5yb3cgPSAwOworICBmb3IgKG91dHJvdyA9IDA7IG91dHJvdyA8IGNvbXBwdHItPnZfc2FtcF9mYWN0b3I7IG91dHJvdysrKSB7CiAgICAgb3V0cHRyID0gb3V0cHV0X2RhdGFbb3V0cm93XTsKICAgICBpbnB0cjAgPSBpbnB1dF9kYXRhW2lucm93XTsKICAgICBpbnB0cjEgPSBpbnB1dF9kYXRhW2lucm93KzFdOwpAQCAtMzkxLDcgKzM4MCw2IEBACiAgICAgKm91dHB0ciA9IChKU0FNUExFKSAoKG1lbWJlcnN1bSArIDMyNzY4KSA+PiAxNik7CiAKICAgICBpbnJvdyArPSAyOwotICAgIG91dHJvdysrOwogICB9CiB9CiAKQEAgLTQwNiw5ICszOTQsOSBAQAogZnVsbHNpemVfc21vb3RoX2Rvd25zYW1wbGUgKGpfY29tcHJlc3NfcHRyIGNpbmZvLCBqcGVnX2NvbXBvbmVudF9pbmZvICpjb21wcHRyLAogCQkJICAgIEpTQU1QQVJSQVkgaW5wdXRfZGF0YSwgSlNBTVBBUlJBWSBvdXRwdXRfZGF0YSkKIHsKLSAgaW50IGlucm93OworICBpbnQgb3V0cm93OwogICBKRElNRU5TSU9OIGNvbGN0cjsKLSAgSkRJTUVOU0lPTiBvdXRwdXRfY29scyA9IGNvbXBwdHItPndpZHRoX2luX2Jsb2NrcyAqIGNvbXBwdHItPkRDVF9oX3NjYWxlZF9zaXplOworICBKRElNRU5TSU9OIG91dHB1dF9jb2xzID0gY29tcHB0ci0+d2lkdGhfaW5fYmxvY2tzICogRENUU0laRTsKICAgcmVnaXN0ZXIgSlNBTVBST1cgaW5wdHIsIGFib3ZlX3B0ciwgYmVsb3dfcHRyLCBvdXRwdHI7CiAgIElOVDMyIG1lbWJlcnN1bSwgbmVpZ2hzdW0sIG1lbWJlcnNjYWxlLCBuZWlnaHNjYWxlOwogICBpbnQgY29sc3VtLCBsYXN0Y29sc3VtLCBuZXh0Y29sc3VtOwpAQCAtNDI5LDExICs0MTcsMTEgQEAKICAgbWVtYmVyc2NhbGUgPSA2NTUzNkwgLSBjaW5mby0+c21vb3RoaW5nX2ZhY3RvciAqIDUxMkw7IC8qIHNjYWxlZCAxLTgqU0YgKi8KICAgbmVpZ2hzY2FsZSA9IGNpbmZvLT5zbW9vdGhpbmdfZmFjdG9yICogNjQ7IC8qIHNjYWxlZCBTRiAqLwogCi0gIGZvciAoaW5yb3cgPSAwOyBpbnJvdyA8IGNpbmZvLT5tYXhfdl9zYW1wX2ZhY3RvcjsgaW5yb3crKykgewotICAgIG91dHB0ciA9IG91dHB1dF9kYXRhW2lucm93XTsKLSAgICBpbnB0ciA9IGlucHV0X2RhdGFbaW5yb3ddOwotICAgIGFib3ZlX3B0ciA9IGlucHV0X2RhdGFbaW5yb3ctMV07Ci0gICAgYmVsb3dfcHRyID0gaW5wdXRfZGF0YVtpbnJvdysxXTsKKyAgZm9yIChvdXRyb3cgPSAwOyBvdXRyb3cgPCBjb21wcHRyLT52X3NhbXBfZmFjdG9yOyBvdXRyb3crKykgeworICAgIG91dHB0ciA9IG91dHB1dF9kYXRhW291dHJvd107CisgICAgaW5wdHIgPSBpbnB1dF9kYXRhW291dHJvd107CisgICAgYWJvdmVfcHRyID0gaW5wdXRfZGF0YVtvdXRyb3ctMV07CisgICAgYmVsb3dfcHRyID0gaW5wdXRfZGF0YVtvdXRyb3crMV07CiAKICAgICAvKiBTcGVjaWFsIGNhc2UgZm9yIGZpcnN0IGNvbHVtbiAqLwogICAgIGNvbHN1bSA9IEdFVEpTQU1QTEUoKmFib3ZlX3B0cisrKSArIEdFVEpTQU1QTEUoKmJlbG93X3B0cisrKSArCkBAIC00ODEsNyArNDY5LDYgQEAKICAgaW50IGNpOwogICBqcGVnX2NvbXBvbmVudF9pbmZvICogY29tcHB0cjsKICAgYm9vbGVhbiBzbW9vdGhvayA9IFRSVUU7Ci0gIGludCBoX2luX2dyb3VwLCB2X2luX2dyb3VwLCBoX291dF9ncm91cCwgdl9vdXRfZ3JvdXA7CiAKICAgZG93bnNhbXBsZSA9IChteV9kb3duc2FtcGxlX3B0cikKICAgICAoKmNpbmZvLT5tZW0tPmFsbG9jX3NtYWxsKSAoKGpfY29tbW9uX3B0cikgY2luZm8sIEpQT09MX0lNQUdFLApAQCAtNDk3LDE3ICs0ODQsOCBAQAogICAvKiBWZXJpZnkgd2UgY2FuIGhhbmRsZSB0aGUgc2FtcGxpbmcgZmFjdG9ycywgYW5kIHNldCB1cCBtZXRob2QgcG9pbnRlcnMgKi8KICAgZm9yIChjaSA9IDAsIGNvbXBwdHIgPSBjaW5mby0+Y29tcF9pbmZvOyBjaSA8IGNpbmZvLT5udW1fY29tcG9uZW50czsKICAgICAgICBjaSsrLCBjb21wcHRyKyspIHsKLSAgICAvKiBDb21wdXRlIHNpemUgb2YgYW4gIm91dHB1dCBncm91cCIgZm9yIERDVCBzY2FsaW5nLiAgVGhpcyBtYW55IHNhbXBsZXMKLSAgICAgKiBhcmUgdG8gYmUgY29udmVydGVkIGZyb20gbWF4X2hfc2FtcF9mYWN0b3IgKiBtYXhfdl9zYW1wX2ZhY3RvciBwaXhlbHMuCi0gICAgICovCi0gICAgaF9vdXRfZ3JvdXAgPSAoY29tcHB0ci0+aF9zYW1wX2ZhY3RvciAqIGNvbXBwdHItPkRDVF9oX3NjYWxlZF9zaXplKSAvCi0JCSAgY2luZm8tPm1pbl9EQ1RfaF9zY2FsZWRfc2l6ZTsKLSAgICB2X291dF9ncm91cCA9IChjb21wcHRyLT52X3NhbXBfZmFjdG9yICogY29tcHB0ci0+RENUX3Zfc2NhbGVkX3NpemUpIC8KLQkJICBjaW5mby0+bWluX0RDVF92X3NjYWxlZF9zaXplOwotICAgIGhfaW5fZ3JvdXAgPSBjaW5mby0+bWF4X2hfc2FtcF9mYWN0b3I7Ci0gICAgdl9pbl9ncm91cCA9IGNpbmZvLT5tYXhfdl9zYW1wX2ZhY3RvcjsKLSAgICBkb3duc2FtcGxlLT5yb3dncm91cF9oZWlnaHRbY2ldID0gdl9vdXRfZ3JvdXA7IC8qIHNhdmUgZm9yIHVzZSBsYXRlciAqLwotICAgIGlmIChoX2luX2dyb3VwID09IGhfb3V0X2dyb3VwICYmIHZfaW5fZ3JvdXAgPT0gdl9vdXRfZ3JvdXApIHsKKyAgICBpZiAoY29tcHB0ci0+aF9zYW1wX2ZhY3RvciA9PSBjaW5mby0+bWF4X2hfc2FtcF9mYWN0b3IgJiYKKwljb21wcHRyLT52X3NhbXBfZmFjdG9yID09IGNpbmZvLT5tYXhfdl9zYW1wX2ZhY3RvcikgewogI2lmZGVmIElOUFVUX1NNT09USElOR19TVVBQT1JURUQKICAgICAgIGlmIChjaW5mby0+c21vb3RoaW5nX2ZhY3RvcikgewogCWRvd25zYW1wbGUtPm1ldGhvZHNbY2ldID0gZnVsbHNpemVfc21vb3RoX2Rvd25zYW1wbGU7CkBAIC01MTUsMjUgKzQ5MywyOSBAQAogICAgICAgfSBlbHNlCiAjZW5kaWYKIAlkb3duc2FtcGxlLT5tZXRob2RzW2NpXSA9IGZ1bGxzaXplX2Rvd25zYW1wbGU7Ci0gICAgfSBlbHNlIGlmIChoX2luX2dyb3VwID09IGhfb3V0X2dyb3VwICogMiAmJgotCSAgICAgICB2X2luX2dyb3VwID09IHZfb3V0X2dyb3VwKSB7CisgICAgfSBlbHNlIGlmIChjb21wcHRyLT5oX3NhbXBfZmFjdG9yICogMiA9PSBjaW5mby0+bWF4X2hfc2FtcF9mYWN0b3IgJiYKKwkgICAgICAgY29tcHB0ci0+dl9zYW1wX2ZhY3RvciA9PSBjaW5mby0+bWF4X3Zfc2FtcF9mYWN0b3IpIHsKICAgICAgIHNtb290aG9rID0gRkFMU0U7Ci0gICAgICBkb3duc2FtcGxlLT5tZXRob2RzW2NpXSA9IGgydjFfZG93bnNhbXBsZTsKLSAgICB9IGVsc2UgaWYgKGhfaW5fZ3JvdXAgPT0gaF9vdXRfZ3JvdXAgKiAyICYmCi0JICAgICAgIHZfaW5fZ3JvdXAgPT0gdl9vdXRfZ3JvdXAgKiAyKSB7CisgICAgICBpZiAoanNpbWRfY2FuX2gydjFfZG93bnNhbXBsZSgpKQorICAgICAgICBkb3duc2FtcGxlLT5tZXRob2RzW2NpXSA9IGpzaW1kX2gydjFfZG93bnNhbXBsZTsKKyAgICAgIGVsc2UKKyAgICAgICAgZG93bnNhbXBsZS0+bWV0aG9kc1tjaV0gPSBoMnYxX2Rvd25zYW1wbGU7CisgICAgfSBlbHNlIGlmIChjb21wcHRyLT5oX3NhbXBfZmFjdG9yICogMiA9PSBjaW5mby0+bWF4X2hfc2FtcF9mYWN0b3IgJiYKKwkgICAgICAgY29tcHB0ci0+dl9zYW1wX2ZhY3RvciAqIDIgPT0gY2luZm8tPm1heF92X3NhbXBfZmFjdG9yKSB7CiAjaWZkZWYgSU5QVVRfU01PT1RISU5HX1NVUFBPUlRFRAogICAgICAgaWYgKGNpbmZvLT5zbW9vdGhpbmdfZmFjdG9yKSB7CiAJZG93bnNhbXBsZS0+bWV0aG9kc1tjaV0gPSBoMnYyX3Ntb290aF9kb3duc2FtcGxlOwogCWRvd25zYW1wbGUtPnB1Yi5uZWVkX2NvbnRleHRfcm93cyA9IFRSVUU7CiAgICAgICB9IGVsc2UKICNlbmRpZgotCWRvd25zYW1wbGUtPm1ldGhvZHNbY2ldID0gaDJ2Ml9kb3duc2FtcGxlOwotICAgIH0gZWxzZSBpZiAoKGhfaW5fZ3JvdXAgJSBoX291dF9ncm91cCkgPT0gMCAmJgotCSAgICAgICAodl9pbl9ncm91cCAlIHZfb3V0X2dyb3VwKSA9PSAwKSB7CisJaWYgKGpzaW1kX2Nhbl9oMnYyX2Rvd25zYW1wbGUoKSkKKwkgIGRvd25zYW1wbGUtPm1ldGhvZHNbY2ldID0ganNpbWRfaDJ2Ml9kb3duc2FtcGxlOworCWVsc2UKKwkgIGRvd25zYW1wbGUtPm1ldGhvZHNbY2ldID0gaDJ2Ml9kb3duc2FtcGxlOworICAgIH0gZWxzZSBpZiAoKGNpbmZvLT5tYXhfaF9zYW1wX2ZhY3RvciAlIGNvbXBwdHItPmhfc2FtcF9mYWN0b3IpID09IDAgJiYKKwkgICAgICAgKGNpbmZvLT5tYXhfdl9zYW1wX2ZhY3RvciAlIGNvbXBwdHItPnZfc2FtcF9mYWN0b3IpID09IDApIHsKICAgICAgIHNtb290aG9rID0gRkFMU0U7CiAgICAgICBkb3duc2FtcGxlLT5tZXRob2RzW2NpXSA9IGludF9kb3duc2FtcGxlOwotICAgICAgZG93bnNhbXBsZS0+aF9leHBhbmRbY2ldID0gKFVJTlQ4KSAoaF9pbl9ncm91cCAvIGhfb3V0X2dyb3VwKTsKLSAgICAgIGRvd25zYW1wbGUtPnZfZXhwYW5kW2NpXSA9IChVSU5UOCkgKHZfaW5fZ3JvdXAgLyB2X291dF9ncm91cCk7CiAgICAgfSBlbHNlCiAgICAgICBFUlJFWElUKGNpbmZvLCBKRVJSX0ZSQUNUX1NBTVBMRV9OT1RJTVBMKTsKICAgfQpkaWZmIC0tZ2l0IGEvamN0cmFucy5jIGIvamN0cmFucy5jCmluZGV4IGNlZTZiMGYuLjkxNmU4NzIgMTAwNjQ0Ci0tLSBhL2pjdHJhbnMuYworKysgYi9qY3RyYW5zLmMKQEAgLTc3LDEwICs3NywxMiBAQAogICBkc3RpbmZvLT5pbWFnZV9oZWlnaHQgPSBzcmNpbmZvLT5pbWFnZV9oZWlnaHQ7CiAgIGRzdGluZm8tPmlucHV0X2NvbXBvbmVudHMgPSBzcmNpbmZvLT5udW1fY29tcG9uZW50czsKICAgZHN0aW5mby0+aW5fY29sb3Jfc3BhY2UgPSBzcmNpbmZvLT5qcGVnX2NvbG9yX3NwYWNlOworI2lmIEpQRUdfTElCX1ZFUlNJT04gPj0gNzAKICAgZHN0aW5mby0+anBlZ193aWR0aCA9IHNyY2luZm8tPm91dHB1dF93aWR0aDsKICAgZHN0aW5mby0+anBlZ19oZWlnaHQgPSBzcmNpbmZvLT5vdXRwdXRfaGVpZ2h0OwogICBkc3RpbmZvLT5taW5fRENUX2hfc2NhbGVkX3NpemUgPSBzcmNpbmZvLT5taW5fRENUX2hfc2NhbGVkX3NpemU7CiAgIGRzdGluZm8tPm1pbl9EQ1Rfdl9zY2FsZWRfc2l6ZSA9IHNyY2luZm8tPm1pbl9EQ1Rfdl9zY2FsZWRfc2l6ZTsKKyNlbmRpZgogICAvKiBJbml0aWFsaXplIGFsbCBwYXJhbWV0ZXJzIHRvIGRlZmF1bHQgdmFsdWVzICovCiAgIGpwZWdfc2V0X2RlZmF1bHRzKGRzdGluZm8pOwogICAvKiBqcGVnX3NldF9kZWZhdWx0cyBtYXkgY2hvb3NlIHdyb25nIGNvbG9yc3BhY2UsIGVnIFlDYkNyIGlmIGlucHV0IGlzIFJHQi4KQEAgLTE2MywxNCArMTY1LDI5IEBACiB0cmFuc2VuY29kZV9tYXN0ZXJfc2VsZWN0aW9uIChqX2NvbXByZXNzX3B0ciBjaW5mbywKIAkJCSAgICAgIGp2aXJ0X2JhcnJheV9wdHIgKiBjb2VmX2FycmF5cykKIHsKKyAgLyogQWx0aG91Z2ggd2UgZG9uJ3QgYWN0dWFsbHkgdXNlIGlucHV0X2NvbXBvbmVudHMgZm9yIHRyYW5zY29kaW5nLAorICAgKiBqY21hc3Rlci5jJ3MgaW5pdGlhbF9zZXR1cCB3aWxsIGNvbXBsYWluIGlmIGlucHV0X2NvbXBvbmVudHMgaXMgMC4KKyAgICovCisgIGNpbmZvLT5pbnB1dF9jb21wb25lbnRzID0gMTsKICAgLyogSW5pdGlhbGl6ZSBtYXN0ZXIgY29udHJvbCAoaW5jbHVkZXMgcGFyYW1ldGVyIGNoZWNraW5nL3Byb2Nlc3NpbmcpICovCiAgIGppbml0X2NfbWFzdGVyX2NvbnRyb2woY2luZm8sIFRSVUUgLyogdHJhbnNjb2RlIG9ubHkgKi8pOwogCiAgIC8qIEVudHJvcHkgZW5jb2Rpbmc6IGVpdGhlciBIdWZmbWFuIG9yIGFyaXRobWV0aWMgY29kaW5nLiAqLwotICBpZiAoY2luZm8tPmFyaXRoX2NvZGUpCisgIGlmIChjaW5mby0+YXJpdGhfY29kZSkgeworI2lmZGVmIENfQVJJVEhfQ09ESU5HX1NVUFBPUlRFRAogICAgIGppbml0X2FyaXRoX2VuY29kZXIoY2luZm8pOwotICBlbHNlIHsKLSAgICBqaW5pdF9odWZmX2VuY29kZXIoY2luZm8pOworI2Vsc2UKKyAgICBFUlJFWElUKGNpbmZvLCBKRVJSX0FSSVRIX05PVElNUEwpOworI2VuZGlmCisgIH0gZWxzZSB7CisgICAgaWYgKGNpbmZvLT5wcm9ncmVzc2l2ZV9tb2RlKSB7CisjaWZkZWYgQ19QUk9HUkVTU0lWRV9TVVBQT1JURUQKKyAgICAgIGppbml0X3BodWZmX2VuY29kZXIoY2luZm8pOworI2Vsc2UKKyAgICAgIEVSUkVYSVQoY2luZm8sIEpFUlJfTk9UX0NPTVBJTEVEKTsKKyNlbmRpZgorICAgIH0gZWxzZQorICAgICAgamluaXRfaHVmZl9lbmNvZGVyKGNpbmZvKTsKICAgfQogCiAgIC8qIFdlIG5lZWQgYSBzcGVjaWFsIGNvZWZmaWNpZW50IGJ1ZmZlciBjb250cm9sbGVyLiAqLwpkaWZmIC0tZ2l0IGEvamRhcGltaW4uYyBiL2pkYXBpbWluLmMKaW5kZXggN2YxY2U0Yy4uY2FkYjU5ZiAxMDA2NDQKLS0tIGEvamRhcGltaW4uYworKysgYi9qZGFwaW1pbi5jCkBAIC0yLDcgKzIsNiBAQAogICogamRhcGltaW4uYwogICoKICAqIENvcHlyaWdodCAoQykgMTk5NC0xOTk4LCBUaG9tYXMgRy4gTGFuZS4KLSAqIE1vZGlmaWVkIDIwMDkgYnkgR3VpZG8gVm9sbGJlZGluZy4KICAqIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBJbmRlcGVuZGVudCBKUEVHIEdyb3VwJ3Mgc29mdHdhcmUuCiAgKiBGb3IgY29uZGl0aW9ucyBvZiBkaXN0cmlidXRpb24gYW5kIHVzZSwgc2VlIHRoZSBhY2NvbXBhbnlpbmcgUkVBRE1FIGZpbGUuCiAgKgpAQCAtMTg2LDggKzE4NSw4IEBACiAgIH0KIAogICAvKiBTZXQgZGVmYXVsdHMgZm9yIG90aGVyIGRlY29tcHJlc3Npb24gcGFyYW1ldGVycy4gKi8KLSAgY2luZm8tPnNjYWxlX251bSA9IGNpbmZvLT5ibG9ja19zaXplOwkJLyogMToxIHNjYWxpbmcgKi8KLSAgY2luZm8tPnNjYWxlX2Rlbm9tID0gY2luZm8tPmJsb2NrX3NpemU7CisgIGNpbmZvLT5zY2FsZV9udW0gPSAxOwkJLyogMToxIHNjYWxpbmcgKi8KKyAgY2luZm8tPnNjYWxlX2Rlbm9tID0gMTsKICAgY2luZm8tPm91dHB1dF9nYW1tYSA9IDEuMDsKICAgY2luZm8tPmJ1ZmZlcmVkX2ltYWdlID0gRkFMU0U7CiAgIGNpbmZvLT5yYXdfZGF0YV9vdXQgPSBGQUxTRTsKZGlmZiAtLWdpdCBhL2pkYXBpc3RkLmMgYi9qZGFwaXN0ZC5jCmluZGV4IDlkNzQ1MzcuLjIzNDNkYTUgMTAwNjQ0Ci0tLSBhL2pkYXBpc3RkLmMKKysrIGIvamRhcGlzdGQuYwpAQCAtMiw2ICsyLDcgQEAKICAqIGpkYXBpc3RkLmMKICAqCiAgKiBDb3B5cmlnaHQgKEMpIDE5OTQtMTk5NiwgVGhvbWFzIEcuIExhbmUuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTAsIEQuIFIuIENvbW1hbmRlci4KICAqIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBJbmRlcGVuZGVudCBKUEVHIEdyb3VwJ3Mgc29mdHdhcmUuCiAgKiBGb3IgY29uZGl0aW9ucyBvZiBkaXN0cmlidXRpb24gYW5kIHVzZSwgc2VlIHRoZSBhY2NvbXBhbnlpbmcgUkVBRE1FIGZpbGUuCiAgKgpAQCAtMTcsNiArMTgsNyBAQAogI2RlZmluZSBKUEVHX0lOVEVSTkFMUwogI2luY2x1ZGUgImppbmNsdWRlLmgiCiAjaW5jbHVkZSAianBlZ2xpYi5oIgorI2luY2x1ZGUgImpwZWdjb21wLmgiCiAKIAogLyogRm9yd2FyZCBkZWNsYXJhdGlvbnMgKi8KQEAgLTIwMiw3ICsyMDQsNyBAQAogICB9CiAKICAgLyogVmVyaWZ5IHRoYXQgYXQgbGVhc3Qgb25lIGlNQ1Ugcm93IGNhbiBiZSByZXR1cm5lZC4gKi8KLSAgbGluZXNfcGVyX2lNQ1Vfcm93ID0gY2luZm8tPm1heF92X3NhbXBfZmFjdG9yICogY2luZm8tPm1pbl9EQ1Rfdl9zY2FsZWRfc2l6ZTsKKyAgbGluZXNfcGVyX2lNQ1Vfcm93ID0gY2luZm8tPm1heF92X3NhbXBfZmFjdG9yICogY2luZm8tPl9taW5fRENUX3NjYWxlZF9zaXplOwogICBpZiAobWF4X2xpbmVzIDwgbGluZXNfcGVyX2lNQ1Vfcm93KQogICAgIEVSUkVYSVQoY2luZm8sIEpFUlJfQlVGRkVSX1NJWkUpOwogCmRpZmYgLS1naXQgYS9qZGFyaXRoLmMgYi9qZGFyaXRoLmMKaW5kZXggYzg1OGIyNC4uZDU1NjczMyAxMDA2NDQKLS0tIGEvamRhcml0aC5jCisrKyBiL2pkYXJpdGguYwpAQCAtMjA2LDggKzIwNiw3IEBACiAgICAgICBlbnRyb3B5LT5sYXN0X2RjX3ZhbFtjaV0gPSAwOwogICAgICAgZW50cm9weS0+ZGNfY29udGV4dFtjaV0gPSAwOwogICAgIH0KLSAgICBpZiAoKCEgY2luZm8tPnByb2dyZXNzaXZlX21vZGUgJiYgY2luZm8tPmxpbV9TZSkgfHwKLQkoY2luZm8tPnByb2dyZXNzaXZlX21vZGUgJiYgY2luZm8tPlNzKSkgeworICAgIGlmICghIGNpbmZvLT5wcm9ncmVzc2l2ZV9tb2RlIHx8IGNpbmZvLT5TcykgewogICAgICAgTUVNWkVSTyhlbnRyb3B5LT5hY19zdGF0c1tjb21wcHRyLT5hY190Ymxfbm9dLCBBQ19TVEFUX0JJTlMpOwogICAgIH0KICAgfQpAQCAtMzI1LDcgKzMyNCw2IEBACiAgIHVuc2lnbmVkIGNoYXIgKnN0OwogICBpbnQgdGJsLCBzaWduLCBrOwogICBpbnQgdiwgbTsKLSAgY29uc3QgaW50ICogbmF0dXJhbF9vcmRlcjsKIAogICAvKiBQcm9jZXNzIHJlc3RhcnQgbWFya2VyIGlmIG5lZWRlZCAqLwogICBpZiAoY2luZm8tPnJlc3RhcnRfaW50ZXJ2YWwpIHsKQEAgLTMzNiw4ICszMzQsNiBAQAogCiAgIGlmIChlbnRyb3B5LT5jdCA9PSAtMSkgcmV0dXJuIFRSVUU7CS8qIGlmIGVycm9yIGRvIG5vdGhpbmcgKi8KIAotICBuYXR1cmFsX29yZGVyID0gY2luZm8tPm5hdHVyYWxfb3JkZXI7Ci0KICAgLyogVGhlcmUgaXMgYWx3YXlzIG9ubHkgb25lIGJsb2NrIHBlciBNQ1UgKi8KICAgYmxvY2sgPSBNQ1VfZGF0YVswXTsKICAgdGJsID0gY2luZm8tPmN1cl9jb21wX2luZm9bMF0tPmFjX3RibF9ubzsKQEAgLTM4Myw3ICszNzksNyBAQAogICAgICAgaWYgKGFyaXRoX2RlY29kZShjaW5mbywgc3QpKSB2IHw9IG07CiAgICAgdiArPSAxOyBpZiAoc2lnbikgdiA9IC12OwogICAgIC8qIFNjYWxlIGFuZCBvdXRwdXQgY29lZmZpY2llbnQgaW4gbmF0dXJhbCAoZGV6aWd6YWdnZWQpIG9yZGVyICovCi0gICAgKCpibG9jaylbbmF0dXJhbF9vcmRlcltrXV0gPSAoSkNPRUYpICh2IDw8IGNpbmZvLT5BbCk7CisgICAgKCpibG9jaylbanBlZ19uYXR1cmFsX29yZGVyW2tdXSA9IChKQ09FRikgKHYgPDwgY2luZm8tPkFsKTsKICAgfQogCiAgIHJldHVybiBUUlVFOwpAQCAtNDM2LDcgKzQzMiw2IEBACiAgIHVuc2lnbmVkIGNoYXIgKnN0OwogICBpbnQgdGJsLCBrLCBrZXg7CiAgIGludCBwMSwgbTE7Ci0gIGNvbnN0IGludCAqIG5hdHVyYWxfb3JkZXI7CiAKICAgLyogUHJvY2VzcyByZXN0YXJ0IG1hcmtlciBpZiBuZWVkZWQgKi8KICAgaWYgKGNpbmZvLT5yZXN0YXJ0X2ludGVydmFsKSB7CkBAIC00NDcsOCArNDQyLDYgQEAKIAogICBpZiAoZW50cm9weS0+Y3QgPT0gLTEpIHJldHVybiBUUlVFOwkvKiBpZiBlcnJvciBkbyBub3RoaW5nICovCiAKLSAgbmF0dXJhbF9vcmRlciA9IGNpbmZvLT5uYXR1cmFsX29yZGVyOwotCiAgIC8qIFRoZXJlIGlzIGFsd2F5cyBvbmx5IG9uZSBibG9jayBwZXIgTUNVICovCiAgIGJsb2NrID0gTUNVX2RhdGFbMF07CiAgIHRibCA9IGNpbmZvLT5jdXJfY29tcF9pbmZvWzBdLT5hY190Ymxfbm87CkBAIC00NTgsMTQgKzQ1MSwxNCBAQAogCiAgIC8qIEVzdGFibGlzaCBFT0J4IChwcmV2aW91cyBzdGFnZSBlbmQtb2YtYmxvY2spIGluZGV4ICovCiAgIGZvciAoa2V4ID0gY2luZm8tPlNlOyBrZXggPiAwOyBrZXgtLSkKLSAgICBpZiAoKCpibG9jaylbbmF0dXJhbF9vcmRlcltrZXhdXSkgYnJlYWs7CisgICAgaWYgKCgqYmxvY2spW2pwZWdfbmF0dXJhbF9vcmRlcltrZXhdXSkgYnJlYWs7CiAKICAgZm9yIChrID0gY2luZm8tPlNzOyBrIDw9IGNpbmZvLT5TZTsgaysrKSB7CiAgICAgc3QgPSBlbnRyb3B5LT5hY19zdGF0c1t0YmxdICsgMyAqIChrIC0gMSk7CiAgICAgaWYgKGsgPiBrZXgpCiAgICAgICBpZiAoYXJpdGhfZGVjb2RlKGNpbmZvLCBzdCkpIGJyZWFrOwkvKiBFT0IgZmxhZyAqLwogICAgIGZvciAoOzspIHsKLSAgICAgIHRoaXNjb2VmID0gKmJsb2NrICsgbmF0dXJhbF9vcmRlcltrXTsKKyAgICAgIHRoaXNjb2VmID0gKmJsb2NrICsganBlZ19uYXR1cmFsX29yZGVyW2tdOwogICAgICAgaWYgKCp0aGlzY29lZikgewkJCQkvKiBwcmV2aW91c2x5IG5vbnplcm8gY29lZiAqLwogCWlmIChhcml0aF9kZWNvZGUoY2luZm8sIHN0ICsgMikpIHsKIAkgIGlmICgqdGhpc2NvZWYgPCAwKQpAQCAtNTA4LDcgKzUwMSw2IEBACiAgIHVuc2lnbmVkIGNoYXIgKnN0OwogICBpbnQgYmxrbiwgY2ksIHRibCwgc2lnbiwgazsKICAgaW50IHYsIG07Ci0gIGNvbnN0IGludCAqIG5hdHVyYWxfb3JkZXI7CiAKICAgLyogUHJvY2VzcyByZXN0YXJ0IG1hcmtlciBpZiBuZWVkZWQgKi8KICAgaWYgKGNpbmZvLT5yZXN0YXJ0X2ludGVydmFsKSB7CkBAIC01MTksOCArNTExLDYgQEAKIAogICBpZiAoZW50cm9weS0+Y3QgPT0gLTEpIHJldHVybiBUUlVFOwkvKiBpZiBlcnJvciBkbyBub3RoaW5nICovCiAKLSAgbmF0dXJhbF9vcmRlciA9IGNpbmZvLT5uYXR1cmFsX29yZGVyOwotCiAgIC8qIE91dGVyIGxvb3AgaGFuZGxlcyBlYWNoIGJsb2NrIGluIHRoZSBNQ1UgKi8KIAogICBmb3IgKGJsa24gPSAwOyBibGtuIDwgY2luZm8tPmJsb2Nrc19pbl9NQ1U7IGJsa24rKykgewpAQCAtNTc4LDEyICs1NjgsMTIgQEAKICAgICB0YmwgPSBjb21wcHRyLT5hY190Ymxfbm87CiAKICAgICAvKiBGaWd1cmUgRi4yMDogRGVjb2RlX0FDX2NvZWZmaWNpZW50cyAqLwotICAgIGZvciAoayA9IDE7IGsgPD0gY2luZm8tPmxpbV9TZTsgaysrKSB7CisgICAgZm9yIChrID0gMTsgayA8PSBEQ1RTSVpFMiAtIDE7IGsrKykgewogICAgICAgc3QgPSBlbnRyb3B5LT5hY19zdGF0c1t0YmxdICsgMyAqIChrIC0gMSk7CiAgICAgICBpZiAoYXJpdGhfZGVjb2RlKGNpbmZvLCBzdCkpIGJyZWFrOwkvKiBFT0IgZmxhZyAqLwogICAgICAgd2hpbGUgKGFyaXRoX2RlY29kZShjaW5mbywgc3QgKyAxKSA9PSAwKSB7CiAJc3QgKz0gMzsgaysrOwotCWlmIChrID4gY2luZm8tPmxpbV9TZSkgeworCWlmIChrID4gRENUU0laRTIgLSAxKSB7CiAJICBXQVJOTVMoY2luZm8sIEpXUk5fQVJJVEhfQkFEX0NPREUpOwogCSAgZW50cm9weS0+Y3QgPSAtMTsJCQkvKiBzcGVjdHJhbCBvdmVyZmxvdyAqLwogCSAgcmV0dXJuIFRSVUU7CkBAIC02MTUsNyArNjA1LDcgQEAKICAgICAgIHdoaWxlIChtID4+PSAxKQogCWlmIChhcml0aF9kZWNvZGUoY2luZm8sIHN0KSkgdiB8PSBtOwogICAgICAgdiArPSAxOyBpZiAoc2lnbikgdiA9IC12OwotICAgICAgKCpibG9jaylbbmF0dXJhbF9vcmRlcltrXV0gPSAoSkNPRUYpIHY7CisgICAgICAoKmJsb2NrKVtqcGVnX25hdHVyYWxfb3JkZXJba11dID0gKEpDT0VGKSB2OwogICAgIH0KICAgfQogCkBAIC02NDEsNyArNjMxLDcgQEAKIAlnb3RvIGJhZDsKICAgICB9IGVsc2UgewogICAgICAgLyogbmVlZCBub3QgY2hlY2sgU3MvU2UgPCAwIHNpbmNlIHRoZXkgY2FtZSBmcm9tIHVuc2lnbmVkIGJ5dGVzICovCi0gICAgICBpZiAoY2luZm8tPlNlIDwgY2luZm8tPlNzIHx8IGNpbmZvLT5TZSA+IGNpbmZvLT5saW1fU2UpCisgICAgICBpZiAoY2luZm8tPlNlIDwgY2luZm8tPlNzIHx8IGNpbmZvLT5TZSA+IERDVFNJWkUyIC0gMSkKIAlnb3RvIGJhZDsKICAgICAgIC8qIEFDIHNjYW5zIG1heSBoYXZlIG9ubHkgb25lIGNvbXBvbmVudCAqLwogICAgICAgaWYgKGNpbmZvLT5jb21wc19pbl9zY2FuICE9IDEpCkBAIC02OTAsNyArNjgwLDcgQEAKICAgICAgKiBUaGlzIG91Z2h0IHRvIGJlIGFuIGVycm9yIGNvbmRpdGlvbiwgYnV0IHdlIG1ha2UgaXQgYSB3YXJuaW5nLgogICAgICAqLwogICAgIGlmIChjaW5mby0+U3MgIT0gMCB8fCBjaW5mby0+QWggIT0gMCB8fCBjaW5mby0+QWwgIT0gMCB8fAotCShjaW5mby0+U2UgPCBEQ1RTSVpFMiAmJiBjaW5mby0+U2UgIT0gY2luZm8tPmxpbV9TZSkpCisJKGNpbmZvLT5TZSA8IERDVFNJWkUyICYmIGNpbmZvLT5TZSAhPSBEQ1RTSVpFMiAtIDEpKQogICAgICAgV0FSTk1TKGNpbmZvLCBKV1JOX05PVF9TRVFVRU5USUFMKTsKICAgICAvKiBTZWxlY3QgTUNVIGRlY29kaW5nIHJvdXRpbmUgKi8KICAgICBlbnRyb3B5LT5wdWIuZGVjb2RlX21jdSA9IGRlY29kZV9tY3U7CkBAIC03MTEsOCArNzAxLDcgQEAKICAgICAgIGVudHJvcHktPmxhc3RfZGNfdmFsW2NpXSA9IDA7CiAgICAgICBlbnRyb3B5LT5kY19jb250ZXh0W2NpXSA9IDA7CiAgICAgfQotICAgIGlmICgoISBjaW5mby0+cHJvZ3Jlc3NpdmVfbW9kZSAmJiBjaW5mby0+bGltX1NlKSB8fAotCShjaW5mby0+cHJvZ3Jlc3NpdmVfbW9kZSAmJiBjaW5mby0+U3MpKSB7CisgICAgaWYgKCEgY2luZm8tPnByb2dyZXNzaXZlX21vZGUgfHwgY2luZm8tPlNzKSB7CiAgICAgICB0YmwgPSBjb21wcHRyLT5hY190Ymxfbm87CiAgICAgICBpZiAodGJsIDwgMCB8fCB0YmwgPj0gTlVNX0FSSVRIX1RCTFMpCiAJRVJSRVhJVDEoY2luZm8sIEpFUlJfTk9fQVJJVEhfVEFCTEUsIHRibCk7CmRpZmYgLS1naXQgYS9qZGF0YWRzdC5jIGIvamRhdGFkc3QuYwppbmRleCA0NzJkNWYzLi4yZjQ4ODY5IDEwMDY0NAotLS0gYS9qZGF0YWRzdC5jCisrKyBiL2pkYXRhZHN0LmMKQEAgLTQwLDYgKzQwLDcgQEAKICNkZWZpbmUgT1VUUFVUX0JVRl9TSVpFICA0MDk2CS8qIGNob29zZSBhbiBlZmZpY2llbnRseSBmd3JpdGUnYWJsZSBzaXplICovCiAKIAorI2lmIEpQRUdfTElCX1ZFUlNJT04gPj0gODAKIC8qIEV4cGFuZGVkIGRhdGEgZGVzdGluYXRpb24gb2JqZWN0IGZvciBtZW1vcnkgb3V0cHV0ICovCiAKIHR5cGVkZWYgc3RydWN0IHsKQEAgLTUzLDYgKzU0LDcgQEAKIH0gbXlfbWVtX2Rlc3RpbmF0aW9uX21ncjsKIAogdHlwZWRlZiBteV9tZW1fZGVzdGluYXRpb25fbWdyICogbXlfbWVtX2Rlc3RfcHRyOworI2VuZGlmCiAKIAogLyoKQEAgLTc0LDExICs3NiwxMyBAQAogICBkZXN0LT5wdWIuZnJlZV9pbl9idWZmZXIgPSBPVVRQVVRfQlVGX1NJWkU7CiB9CiAKKyNpZiBKUEVHX0xJQl9WRVJTSU9OID49IDgwCiBNRVRIT0RERUYodm9pZCkKIGluaXRfbWVtX2Rlc3RpbmF0aW9uIChqX2NvbXByZXNzX3B0ciBjaW5mbykKIHsKICAgLyogbm8gd29yayBuZWNlc3NhcnkgaGVyZSAqLwogfQorI2VuZGlmCiAKIAogLyoKQEAgLTExOSw2ICsxMjMsNyBAQAogICByZXR1cm4gVFJVRTsKIH0KIAorI2lmIEpQRUdfTElCX1ZFUlNJT04gPj0gODAKIE1FVEhPRERFRihib29sZWFuKQogZW1wdHlfbWVtX291dHB1dF9idWZmZXIgKGpfY29tcHJlc3NfcHRyIGNpbmZvKQogewpAQCAtMTQ4LDYgKzE1Myw3IEBACiAKICAgcmV0dXJuIFRSVUU7CiB9CisjZW5kaWYKIAogCiAvKgpAQCAtMTc2LDYgKzE4Miw3IEBACiAgICAgRVJSRVhJVChjaW5mbywgSkVSUl9GSUxFX1dSSVRFKTsKIH0KIAorI2lmIEpQRUdfTElCX1ZFUlNJT04gPj0gODAKIE1FVEhPRERFRih2b2lkKQogdGVybV9tZW1fZGVzdGluYXRpb24gKGpfY29tcHJlc3NfcHRyIGNpbmZvKQogewpAQCAtMTg0LDYgKzE5MSw3IEBACiAgICpkZXN0LT5vdXRidWZmZXIgPSBkZXN0LT5idWZmZXI7CiAgICpkZXN0LT5vdXRzaXplID0gZGVzdC0+YnVmc2l6ZSAtIGRlc3QtPnB1Yi5mcmVlX2luX2J1ZmZlcjsKIH0KKyNlbmRpZgogCiAKIC8qCkBAIC0yMTcsNiArMjI1LDcgQEAKIH0KIAogCisjaWYgSlBFR19MSUJfVkVSU0lPTiA+PSA4MAogLyoKICAqIFByZXBhcmUgZm9yIG91dHB1dCB0byBhIG1lbW9yeSBidWZmZXIuCiAgKiBUaGUgY2FsbGVyIG1heSBzdXBwbHkgYW4gb3duIGluaXRpYWwgYnVmZmVyIHdpdGggYXBwcm9wcmlhdGUgc2l6ZS4KQEAgLTI2NSwzICsyNzQsNCBAQAogICBkZXN0LT5wdWIubmV4dF9vdXRwdXRfYnl0ZSA9IGRlc3QtPmJ1ZmZlciA9ICpvdXRidWZmZXI7CiAgIGRlc3QtPnB1Yi5mcmVlX2luX2J1ZmZlciA9IGRlc3QtPmJ1ZnNpemUgPSAqb3V0c2l6ZTsKIH0KKyNlbmRpZgpkaWZmIC0tZ2l0IGEvamRhdGFzcmMuYyBiL2pkYXRhc3JjLmMKaW5kZXggYzhmZTNkYS4uNzYwOWY3NiAxMDA2NDQKLS0tIGEvamRhdGFzcmMuYworKysgYi9qZGF0YXNyYy5jCkBAIC01MywxMSArNTMsMTMgQEAKICAgc3JjLT5zdGFydF9vZl9maWxlID0gVFJVRTsKIH0KIAorI2lmIEpQRUdfTElCX1ZFUlNJT04gPj0gODAKIE1FVEhPRERFRih2b2lkKQogaW5pdF9tZW1fc291cmNlIChqX2RlY29tcHJlc3NfcHRyIGNpbmZvKQogewogICAvKiBubyB3b3JrIG5lY2Vzc2FyeSBoZXJlICovCiB9CisjZW5kaWYKIAogCiAvKgpAQCAtMTE4LDYgKzEyMCw3IEBACiAgIHJldHVybiBUUlVFOwogfQogCisjaWYgSlBFR19MSUJfVkVSU0lPTiA+PSA4MAogTUVUSE9EREVGKGJvb2xlYW4pCiBmaWxsX21lbV9pbnB1dF9idWZmZXIgKGpfZGVjb21wcmVzc19wdHIgY2luZm8pCiB7CkBAIC0xMzcsNiArMTQwLDcgQEAKIAogICByZXR1cm4gVFJVRTsKIH0KKyNlbmRpZgogCiAKIC8qCkBAIC0yMzksNiArMjQzLDcgQEAKIH0KIAogCisjaWYgSlBFR19MSUJfVkVSU0lPTiA+PSA4MAogLyoKICAqIFByZXBhcmUgZm9yIGlucHV0IGZyb20gYSBzdXBwbGllZCBtZW1vcnkgYnVmZmVyLgogICogVGhlIGJ1ZmZlciBtdXN0IGNvbnRhaW4gdGhlIHdob2xlIEpQRUcgZGF0YS4KQEAgLTI3MiwzICsyNzcsNCBAQAogICBzcmMtPmJ5dGVzX2luX2J1ZmZlciA9IChzaXplX3QpIGluc2l6ZTsKICAgc3JjLT5uZXh0X2lucHV0X2J5dGUgPSAoSk9DVEVUICopIGluYnVmZmVyOwogfQorI2VuZGlmCmRpZmYgLS1naXQgYS9qZGNvZWZjdC5jIGIvamRjb2VmY3QuYwppbmRleCA0NjJlOTJjLi40OGE5ZmM2IDEwMDY0NAotLS0gYS9qZGNvZWZjdC5jCisrKyBiL2pkY29lZmN0LmMKQEAgLTIsNiArMiw3IEBACiAgKiBqZGNvZWZjdC5jCiAgKgogICogQ29weXJpZ2h0IChDKSAxOTk0LTE5OTcsIFRob21hcyBHLiBMYW5lLgorICogQ29weXJpZ2h0IChDKSAyMDEwLCBELiBSLiBDb21tYW5kZXIuCiAgKiBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgSW5kZXBlbmRlbnQgSlBFRyBHcm91cCdzIHNvZnR3YXJlLgogICogRm9yIGNvbmRpdGlvbnMgb2YgZGlzdHJpYnV0aW9uIGFuZCB1c2UsIHNlZSB0aGUgYWNjb21wYW55aW5nIFJFQURNRSBmaWxlLgogICoKQEAgLTE3LDYgKzE4LDcgQEAKICNkZWZpbmUgSlBFR19JTlRFUk5BTFMKICNpbmNsdWRlICJqaW5jbHVkZS5oIgogI2luY2x1ZGUgImpwZWdsaWIuaCIKKyNpbmNsdWRlICJqcGVnY29tcC5oIgogCiAvKiBCbG9jayBzbW9vdGhpbmcgaXMgb25seSBhcHBsaWNhYmxlIGZvciBwcm9ncmVzc2l2ZSBKUEVHLCBzbzogKi8KICNpZm5kZWYgRF9QUk9HUkVTU0lWRV9TVVBQT1JURUQKQEAgLTQ3LDYgKzQ5LDkgQEAKICAgICovCiAgIEpCTE9DS1JPVyBNQ1VfYnVmZmVyW0RfTUFYX0JMT0NLU19JTl9NQ1VdOwogCisgIC8qIFRlbXBvcmFyeSB3b3Jrc3BhY2UgZm9yIG9uZSBNQ1UgKi8KKyAgSkNPRUYgKiB3b3Jrc3BhY2U7CisKICNpZmRlZiBEX01VTFRJU0NBTl9GSUxFU19TVVBQT1JURUQKICAgLyogSW4gbXVsdGktcGFzcyBtb2Rlcywgd2UgbmVlZCBhIHZpcnR1YWwgYmxvY2sgYXJyYXkgZm9yIGVhY2ggY29tcG9uZW50LiAqLwogICBqdmlydF9iYXJyYXlfcHRyIHdob2xlX2ltYWdlW01BWF9DT01QT05FTlRTXTsKQEAgLTE4Nyw3ICsxOTIsNyBAQAogCXVzZWZ1bF93aWR0aCA9IChNQ1VfY29sX251bSA8IGxhc3RfTUNVX2NvbCkgPyBjb21wcHRyLT5NQ1Vfd2lkdGgKIAkJCQkJCSAgICA6IGNvbXBwdHItPmxhc3RfY29sX3dpZHRoOwogCW91dHB1dF9wdHIgPSBvdXRwdXRfYnVmW2NvbXBwdHItPmNvbXBvbmVudF9pbmRleF0gKwotCSAgeW9mZnNldCAqIGNvbXBwdHItPkRDVF92X3NjYWxlZF9zaXplOworCSAgeW9mZnNldCAqIGNvbXBwdHItPl9EQ1Rfc2NhbGVkX3NpemU7CiAJc3RhcnRfY29sID0gTUNVX2NvbF9udW0gKiBjb21wcHRyLT5NQ1Vfc2FtcGxlX3dpZHRoOwogCWZvciAoeWluZGV4ID0gMDsgeWluZGV4IDwgY29tcHB0ci0+TUNVX2hlaWdodDsgeWluZGV4KyspIHsKIAkgIGlmIChjaW5mby0+aW5wdXRfaU1DVV9yb3cgPCBsYXN0X2lNQ1Vfcm93IHx8CkBAIC0xOTcsMTEgKzIwMiwxMSBAQAogCSAgICAgICgqaW52ZXJzZV9EQ1QpIChjaW5mbywgY29tcHB0ciwKIAkJCSAgICAgIChKQ09FRlBUUikgY29lZi0+TUNVX2J1ZmZlcltibGtuK3hpbmRleF0sCiAJCQkgICAgICBvdXRwdXRfcHRyLCBvdXRwdXRfY29sKTsKLQkgICAgICBvdXRwdXRfY29sICs9IGNvbXBwdHItPkRDVF9oX3NjYWxlZF9zaXplOworCSAgICAgIG91dHB1dF9jb2wgKz0gY29tcHB0ci0+X0RDVF9zY2FsZWRfc2l6ZTsKIAkgICAgfQogCSAgfQogCSAgYmxrbiArPSBjb21wcHRyLT5NQ1Vfd2lkdGg7Ci0JICBvdXRwdXRfcHRyICs9IGNvbXBwdHItPkRDVF92X3NjYWxlZF9zaXplOworCSAgb3V0cHV0X3B0ciArPSBjb21wcHRyLT5fRENUX3NjYWxlZF9zaXplOwogCX0KICAgICAgIH0KICAgICB9CkBAIC0zNjIsOSArMzY3LDkgQEAKIAkoKmludmVyc2VfRENUKSAoY2luZm8sIGNvbXBwdHIsIChKQ09FRlBUUikgYnVmZmVyX3B0ciwKIAkJCW91dHB1dF9wdHIsIG91dHB1dF9jb2wpOwogCWJ1ZmZlcl9wdHIrKzsKLQlvdXRwdXRfY29sICs9IGNvbXBwdHItPkRDVF9oX3NjYWxlZF9zaXplOworCW91dHB1dF9jb2wgKz0gY29tcHB0ci0+X0RDVF9zY2FsZWRfc2l6ZTsKICAgICAgIH0KLSAgICAgIG91dHB1dF9wdHIgKz0gY29tcHB0ci0+RENUX3Zfc2NhbGVkX3NpemU7CisgICAgICBvdXRwdXRfcHRyICs9IGNvbXBwdHItPl9EQ1Rfc2NhbGVkX3NpemU7CiAgICAgfQogICB9CiAKQEAgLTQ3MSwxMyArNDc2LDE2IEBACiAgIGpwZWdfY29tcG9uZW50X2luZm8gKmNvbXBwdHI7CiAgIGludmVyc2VfRENUX21ldGhvZF9wdHIgaW52ZXJzZV9EQ1Q7CiAgIGJvb2xlYW4gZmlyc3Rfcm93LCBsYXN0X3JvdzsKLSAgSkJMT0NLIHdvcmtzcGFjZTsKKyAgSkNPRUYgKiB3b3Jrc3BhY2U7CiAgIGludCAqY29lZl9iaXRzOwogICBKUVVBTlRfVEJMICpxdWFudHRibDsKICAgSU5UMzIgUTAwLFEwMSxRMDIsUTEwLFExMSxRMjAsIG51bTsKICAgaW50IERDMSxEQzIsREMzLERDNCxEQzUsREM2LERDNyxEQzgsREM5OwogICBpbnQgQWwsIHByZWQ7CiAKKyAgLyogS2VlcCBhIGxvY2FsIHZhcmlhYmxlIHRvIGF2b2lkIGxvb2tpbmcgaXQgdXAgbW9yZSB0aGFuIG9uY2UgKi8KKyAgd29ya3NwYWNlID0gY29lZi0+d29ya3NwYWNlOworCiAgIC8qIEZvcmNlIHNvbWUgaW5wdXQgdG8gYmUgZG9uZSBpZiB3ZSBhcmUgZ2V0dGluZyBhaGVhZCBvZiB0aGUgaW5wdXQuICovCiAgIHdoaWxlIChjaW5mby0+aW5wdXRfc2Nhbl9udW1iZXIgPD0gY2luZm8tPm91dHB1dF9zY2FuX251bWJlciAmJgogCSAhIGNpbmZvLT5pbnB1dGN0bC0+ZW9pX3JlYWNoZWQpIHsKQEAgLTY1NCw5ICs2NjIsOSBAQAogCURDNCA9IERDNTsgREM1ID0gREM2OwogCURDNyA9IERDODsgREM4ID0gREM5OwogCWJ1ZmZlcl9wdHIrKywgcHJldl9ibG9ja19yb3crKywgbmV4dF9ibG9ja19yb3crKzsKLQlvdXRwdXRfY29sICs9IGNvbXBwdHItPkRDVF9oX3NjYWxlZF9zaXplOworCW91dHB1dF9jb2wgKz0gY29tcHB0ci0+X0RDVF9zY2FsZWRfc2l6ZTsKICAgICAgIH0KLSAgICAgIG91dHB1dF9wdHIgKz0gY29tcHB0ci0+RENUX3Zfc2NhbGVkX3NpemU7CisgICAgICBvdXRwdXRfcHRyICs9IGNvbXBwdHItPl9EQ1Rfc2NhbGVkX3NpemU7CiAgICAgfQogICB9CiAKQEAgLTczMyw0ICs3NDEsOSBAQAogICAgIGNvZWYtPnB1Yi5kZWNvbXByZXNzX2RhdGEgPSBkZWNvbXByZXNzX29uZXBhc3M7CiAgICAgY29lZi0+cHViLmNvZWZfYXJyYXlzID0gTlVMTDsgLyogZmxhZyBmb3Igbm8gdmlydHVhbCBhcnJheXMgKi8KICAgfQorCisgIC8qIEFsbG9jYXRlIHRoZSB3b3Jrc3BhY2UgYnVmZmVyICovCisgIGNvZWYtPndvcmtzcGFjZSA9IChKQ09FRiAqKQorICAgICgqY2luZm8tPm1lbS0+YWxsb2Nfc21hbGwpICgoal9jb21tb25fcHRyKSBjaW5mbywgSlBPT0xfSU1BR0UsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNJWkVPRihKQ09FRikgKiBEQ1RTSVpFMik7CiB9CmRpZmYgLS1naXQgYS9qZGNvbG9yLmMgYi9qZGNvbG9yLmMKaW5kZXggNmMwNGRmZS4uYmM3M2IzZiAxMDA2NDQKLS0tIGEvamRjb2xvci5jCisrKyBiL2pkY29sb3IuYwpAQCAtMiw2ICsyLDggQEAKICAqIGpkY29sb3IuYwogICoKICAqIENvcHlyaWdodCAoQykgMTk5MS0xOTk3LCBUaG9tYXMgRy4gTGFuZS4KKyAqIENvcHlyaWdodCAyMDA5IFBpZXJyZSBPc3NtYW4gPG9zc21hbkBjZW5kaW8uc2U+IGZvciBDZW5kaW8gQUIKKyAqIENvcHlyaWdodCAoQykgMjAwOSwgRC4gUi4gQ29tbWFuZGVyLgogICogVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEluZGVwZW5kZW50IEpQRUcgR3JvdXAncyBzb2Z0d2FyZS4KICAqIEZvciBjb25kaXRpb25zIG9mIGRpc3RyaWJ1dGlvbiBhbmQgdXNlLCBzZWUgdGhlIGFjY29tcGFueWluZyBSRUFETUUgZmlsZS4KICAqCkBAIC0xMSw2ICsxMyw3IEBACiAjZGVmaW5lIEpQRUdfSU5URVJOQUxTCiAjaW5jbHVkZSAiamluY2x1ZGUuaCIKICNpbmNsdWRlICJqcGVnbGliLmgiCisjaW5jbHVkZSAianNpbWQuaCIKIAogCiAvKiBQcml2YXRlIHN1Ym9iamVjdCAqLwpAQCAtMTQ2LDEyICsxNDksMTIgQEAKICAgICAgIGNiID0gR0VUSlNBTVBMRShpbnB0cjFbY29sXSk7CiAgICAgICBjciA9IEdFVEpTQU1QTEUoaW5wdHIyW2NvbF0pOwogICAgICAgLyogUmFuZ2UtbGltaXRpbmcgaXMgZXNzZW50aWFsIGR1ZSB0byBub2lzZSBpbnRyb2R1Y2VkIGJ5IERDVCBsb3NzZXMuICovCi0gICAgICBvdXRwdHJbUkdCX1JFRF0gPSAgIHJhbmdlX2xpbWl0W3kgKyBDcnJ0YWJbY3JdXTsKLSAgICAgIG91dHB0cltSR0JfR1JFRU5dID0gcmFuZ2VfbGltaXRbeSArCisgICAgICBvdXRwdHJbcmdiX3JlZFtjaW5mby0+b3V0X2NvbG9yX3NwYWNlXV0gPSAgIHJhbmdlX2xpbWl0W3kgKyBDcnJ0YWJbY3JdXTsKKyAgICAgIG91dHB0cltyZ2JfZ3JlZW5bY2luZm8tPm91dF9jb2xvcl9zcGFjZV1dID0gcmFuZ2VfbGltaXRbeSArCiAJCQkgICAgICAoKGludCkgUklHSFRfU0hJRlQoQ2JndGFiW2NiXSArIENyZ3RhYltjcl0sCiAJCQkJCQkgU0NBTEVCSVRTKSldOwotICAgICAgb3V0cHRyW1JHQl9CTFVFXSA9ICByYW5nZV9saW1pdFt5ICsgQ2JidGFiW2NiXV07Ci0gICAgICBvdXRwdHIgKz0gUkdCX1BJWEVMU0laRTsKKyAgICAgIG91dHB0cltyZ2JfYmx1ZVtjaW5mby0+b3V0X2NvbG9yX3NwYWNlXV0gPSAgcmFuZ2VfbGltaXRbeSArIENiYnRhYltjYl1dOworICAgICAgb3V0cHRyICs9IHJnYl9waXhlbHNpemVbY2luZm8tPm91dF9jb2xvcl9zcGFjZV07CiAgICAgfQogICB9CiB9CkBAIC0yMTksMTYgKzIyMiwyMCBAQAogCQkgIEpTQU1QQVJSQVkgb3V0cHV0X2J1ZiwgaW50IG51bV9yb3dzKQogewogICByZWdpc3RlciBKU0FNUFJPVyBpbnB0ciwgb3V0cHRyOwotICByZWdpc3RlciBKRElNRU5TSU9OIGNvbDsKKyAgSlNBTVBMRSAqbWF4aW5wdHI7CiAgIEpESU1FTlNJT04gbnVtX2NvbHMgPSBjaW5mby0+b3V0cHV0X3dpZHRoOworICBpbnQgcmluZGV4ID0gcmdiX3JlZFtjaW5mby0+b3V0X2NvbG9yX3NwYWNlXTsKKyAgaW50IGdpbmRleCA9IHJnYl9ncmVlbltjaW5mby0+b3V0X2NvbG9yX3NwYWNlXTsKKyAgaW50IGJpbmRleCA9IHJnYl9ibHVlW2NpbmZvLT5vdXRfY29sb3Jfc3BhY2VdOworICBpbnQgcmdic3RyaWRlID0gcmdiX3BpeGVsc2l6ZVtjaW5mby0+b3V0X2NvbG9yX3NwYWNlXTsKIAogICB3aGlsZSAoLS1udW1fcm93cyA+PSAwKSB7CiAgICAgaW5wdHIgPSBpbnB1dF9idWZbMF1baW5wdXRfcm93KytdOworICAgIG1heGlucHRyID0gJmlucHRyW251bV9jb2xzXTsKICAgICBvdXRwdHIgPSAqb3V0cHV0X2J1ZisrOwotICAgIGZvciAoY29sID0gMDsgY29sIDwgbnVtX2NvbHM7IGNvbCsrKSB7CisgICAgZm9yICg7IGlucHRyIDwgbWF4aW5wdHI7IGlucHRyKyssIG91dHB0ciArPSByZ2JzdHJpZGUpIHsKICAgICAgIC8qIFdlIGNhbiBkaXNwZW5zZSB3aXRoIEdFVEpTQU1QTEUoKSBoZXJlICovCi0gICAgICBvdXRwdHJbUkdCX1JFRF0gPSBvdXRwdHJbUkdCX0dSRUVOXSA9IG91dHB0cltSR0JfQkxVRV0gPSBpbnB0cltjb2xdOwotICAgICAgb3V0cHRyICs9IFJHQl9QSVhFTFNJWkU7CisgICAgICBvdXRwdHJbcmluZGV4XSA9IG91dHB0cltnaW5kZXhdID0gb3V0cHRyW2JpbmRleF0gPSAqaW5wdHI7CiAgICAgfQogICB9CiB9CkBAIC0zNTYsMTMgKzM2MywyNCBAQAogICAgIGJyZWFrOwogCiAgIGNhc2UgSkNTX1JHQjoKLSAgICBjaW5mby0+b3V0X2NvbG9yX2NvbXBvbmVudHMgPSBSR0JfUElYRUxTSVpFOworICBjYXNlIEpDU19FWFRfUkdCOgorICBjYXNlIEpDU19FWFRfUkdCWDoKKyAgY2FzZSBKQ1NfRVhUX0JHUjoKKyAgY2FzZSBKQ1NfRVhUX0JHUlg6CisgIGNhc2UgSkNTX0VYVF9YQkdSOgorICBjYXNlIEpDU19FWFRfWFJHQjoKKyAgICBjaW5mby0+b3V0X2NvbG9yX2NvbXBvbmVudHMgPSByZ2JfcGl4ZWxzaXplW2NpbmZvLT5vdXRfY29sb3Jfc3BhY2VdOwogICAgIGlmIChjaW5mby0+anBlZ19jb2xvcl9zcGFjZSA9PSBKQ1NfWUNiQ3IpIHsKLSAgICAgIGNjb252ZXJ0LT5wdWIuY29sb3JfY29udmVydCA9IHljY19yZ2JfY29udmVydDsKLSAgICAgIGJ1aWxkX3ljY19yZ2JfdGFibGUoY2luZm8pOworICAgICAgaWYgKGpzaW1kX2Nhbl95Y2NfcmdiKCkpCisgICAgICAgIGNjb252ZXJ0LT5wdWIuY29sb3JfY29udmVydCA9IGpzaW1kX3ljY19yZ2JfY29udmVydDsKKyAgICAgIGVsc2UgeworICAgICAgICBjY29udmVydC0+cHViLmNvbG9yX2NvbnZlcnQgPSB5Y2NfcmdiX2NvbnZlcnQ7CisgICAgICAgIGJ1aWxkX3ljY19yZ2JfdGFibGUoY2luZm8pOworICAgICAgfQogICAgIH0gZWxzZSBpZiAoY2luZm8tPmpwZWdfY29sb3Jfc3BhY2UgPT0gSkNTX0dSQVlTQ0FMRSkgewogICAgICAgY2NvbnZlcnQtPnB1Yi5jb2xvcl9jb252ZXJ0ID0gZ3JheV9yZ2JfY29udmVydDsKLSAgICB9IGVsc2UgaWYgKGNpbmZvLT5qcGVnX2NvbG9yX3NwYWNlID09IEpDU19SR0IgJiYgUkdCX1BJWEVMU0laRSA9PSAzKSB7CisgICAgfSBlbHNlIGlmIChjaW5mby0+anBlZ19jb2xvcl9zcGFjZSA9PSBjaW5mby0+b3V0X2NvbG9yX3NwYWNlICYmCisgICAgICByZ2JfcGl4ZWxzaXplW2NpbmZvLT5vdXRfY29sb3Jfc3BhY2VdID09IDMpIHsKICAgICAgIGNjb252ZXJ0LT5wdWIuY29sb3JfY29udmVydCA9IG51bGxfY29udmVydDsKICAgICB9IGVsc2UKICAgICAgIEVSUkVYSVQoY2luZm8sIEpFUlJfQ09OVkVSU0lPTl9OT1RJTVBMKTsKZGlmZiAtLWdpdCBhL2pkY3QuaCBiL2pkY3QuaAppbmRleCAzNjBkZWM4Li43YjQ5YTk3IDEwMDY0NAotLS0gYS9qZGN0LmgKKysrIGIvamRjdC5oCkBAIC0xNCwzNiArMTQsMzUgQEAKIAogCiAvKgotICogQSBmb3J3YXJkIERDVCByb3V0aW5lIGlzIGdpdmVuIGEgcG9pbnRlciB0byBhbiBpbnB1dCBzYW1wbGUgYXJyYXkgYW5kCi0gKiBhIHBvaW50ZXIgdG8gYSB3b3JrIGFyZWEgb2YgdHlwZSBEQ1RFTEVNW107IHRoZSBEQ1QgaXMgdG8gYmUgcGVyZm9ybWVkCi0gKiBpbi1wbGFjZSBpbiB0aGF0IGJ1ZmZlci4gIFR5cGUgRENURUxFTSBpcyBpbnQgZm9yIDgtYml0IHNhbXBsZXMsIElOVDMyCi0gKiBmb3IgMTItYml0IHNhbXBsZXMuICAoTk9URTogRmxvYXRpbmctcG9pbnQgRENUIGltcGxlbWVudGF0aW9ucyB1c2UgYW4KLSAqIGFycmF5IG9mIHR5cGUgRkFTVF9GTE9BVCwgaW5zdGVhZC4pCi0gKiBUaGUgaW5wdXQgZGF0YSBpcyB0byBiZSBmZXRjaGVkIGZyb20gdGhlIHNhbXBsZSBhcnJheSBzdGFydGluZyBhdCBhCi0gKiBzcGVjaWZpZWQgY29sdW1uLiAgKEFueSByb3cgb2Zmc2V0IG5lZWRlZCB3aWxsIGJlIGFwcGxpZWQgdG8gdGhlIGFycmF5Ci0gKiBwb2ludGVyIGJlZm9yZSBpdCBpcyBwYXNzZWQgdG8gdGhlIEZEQ1QgY29kZS4pCi0gKiBOb3RlIHRoYXQgdGhlIG51bWJlciBvZiBzYW1wbGVzIGZldGNoZWQgYnkgdGhlIEZEQ1Qgcm91dGluZSBpcwotICogRENUX2hfc2NhbGVkX3NpemUgKiBEQ1Rfdl9zY2FsZWRfc2l6ZS4KKyAqIEEgZm9yd2FyZCBEQ1Qgcm91dGluZSBpcyBnaXZlbiBhIHBvaW50ZXIgdG8gYSB3b3JrIGFyZWEgb2YgdHlwZSBEQ1RFTEVNW107CisgKiB0aGUgRENUIGlzIHRvIGJlIHBlcmZvcm1lZCBpbi1wbGFjZSBpbiB0aGF0IGJ1ZmZlci4gIFR5cGUgRENURUxFTSBpcyBpbnQKKyAqIGZvciA4LWJpdCBzYW1wbGVzLCBJTlQzMiBmb3IgMTItYml0IHNhbXBsZXMuICAoTk9URTogRmxvYXRpbmctcG9pbnQgRENUCisgKiBpbXBsZW1lbnRhdGlvbnMgdXNlIGFuIGFycmF5IG9mIHR5cGUgRkFTVF9GTE9BVCwgaW5zdGVhZC4pCisgKiBUaGUgRENUIGlucHV0cyBhcmUgZXhwZWN0ZWQgdG8gYmUgc2lnbmVkIChyYW5nZSArLUNFTlRFUkpTQU1QTEUpLgogICogVGhlIERDVCBvdXRwdXRzIGFyZSByZXR1cm5lZCBzY2FsZWQgdXAgYnkgYSBmYWN0b3Igb2YgODsgdGhleSB0aGVyZWZvcmUKICAqIGhhdmUgYSByYW5nZSBvZiArLThLIGZvciA4LWJpdCBkYXRhLCArLTEyOEsgZm9yIDEyLWJpdCBkYXRhLiAgVGhpcwogICogY29udmVudGlvbiBpbXByb3ZlcyBhY2N1cmFjeSBpbiBpbnRlZ2VyIGltcGxlbWVudGF0aW9ucyBhbmQgc2F2ZXMgc29tZQogICogd29yayBpbiBmbG9hdGluZy1wb2ludCBvbmVzLgotICogUXVhbnRpemF0aW9uIG9mIHRoZSBvdXRwdXQgY29lZmZpY2llbnRzIGlzIGRvbmUgYnkgamNkY3RtZ3IuYy4KKyAqIFF1YW50aXphdGlvbiBvZiB0aGUgb3V0cHV0IGNvZWZmaWNpZW50cyBpcyBkb25lIGJ5IGpjZGN0bWdyLmMuIFRoaXMKKyAqIHN0ZXAgcmVxdWlyZXMgYW4gdW5zaWduZWQgdHlwZSBhbmQgYWxzbyBvbmUgd2l0aCB0d2ljZSB0aGUgYml0cy4KICAqLwogCiAjaWYgQklUU19JTl9KU0FNUExFID09IDgKKyNpZm5kZWYgV0lUSF9TSU1ECiB0eXBlZGVmIGludCBEQ1RFTEVNOwkJLyogMTYgb3IgMzIgYml0cyBpcyBmaW5lICovCit0eXBlZGVmIHVuc2lnbmVkIGludCBVRENURUxFTTsKK3R5cGVkZWYgdW5zaWduZWQgbG9uZyBsb25nIFVEQ1RFTEVNMjsKKyNlbHNlCit0eXBlZGVmIHNob3J0IERDVEVMRU07ICAvKiBwcmVmZXIgMTYgYml0IHdpdGggU0lNRCBmb3IgcGFyZWxsZWxpc20gKi8KK3R5cGVkZWYgdW5zaWduZWQgc2hvcnQgVURDVEVMRU07Cit0eXBlZGVmIHVuc2lnbmVkIGludCBVRENURUxFTTI7CisjZW5kaWYKICNlbHNlCiB0eXBlZGVmIElOVDMyIERDVEVMRU07CQkvKiBtdXN0IGhhdmUgMzIgYml0cyAqLwordHlwZWRlZiBVSU5UMzIgVURDVEVMRU07Cit0eXBlZGVmIHVuc2lnbmVkIGxvbmcgbG9uZyBVRENURUxFTTI7CiAjZW5kaWYKIAotdHlwZWRlZiBKTUVUSE9EKHZvaWQsIGZvcndhcmRfRENUX21ldGhvZF9wdHIsIChEQ1RFTEVNICogZGF0YSwKLQkJCQkJICAgICAgIEpTQU1QQVJSQVkgc2FtcGxlX2RhdGEsCi0JCQkJCSAgICAgICBKRElNRU5TSU9OIHN0YXJ0X2NvbCkpOwotdHlwZWRlZiBKTUVUSE9EKHZvaWQsIGZsb2F0X0RDVF9tZXRob2RfcHRyLCAoRkFTVF9GTE9BVCAqIGRhdGEsCi0JCQkJCSAgICAgSlNBTVBBUlJBWSBzYW1wbGVfZGF0YSwKLQkJCQkJICAgICBKRElNRU5TSU9OIHN0YXJ0X2NvbCkpOwotCiAKIC8qCiAgKiBBbiBpbnZlcnNlIERDVCByb3V0aW5lIGlzIGdpdmVuIGEgcG9pbnRlciB0byB0aGUgaW5wdXQgSkJMT0NLIGFuZCBhIHBvaW50ZXIKQEAgLTUzLDcgKzUyLDcgQEAKICAqIHNhbXBsZSBhcnJheSBzdGFydGluZyBhdCBhIHNwZWNpZmllZCBjb2x1bW4uICAoQW55IHJvdyBvZmZzZXQgbmVlZGVkIHdpbGwKICAqIGJlIGFwcGxpZWQgdG8gdGhlIGFycmF5IHBvaW50ZXIgYmVmb3JlIGl0IGlzIHBhc3NlZCB0byB0aGUgSURDVCBjb2RlLikKICAqIE5vdGUgdGhhdCB0aGUgbnVtYmVyIG9mIHNhbXBsZXMgZW1pdHRlZCBieSB0aGUgSURDVCByb3V0aW5lIGlzCi0gKiBEQ1RfaF9zY2FsZWRfc2l6ZSAqIERDVF92X3NjYWxlZF9zaXplLgorICogRENUX3NjYWxlZF9zaXplICogRENUX3NjYWxlZF9zaXplLgogICovCiAKIC8qIHR5cGVkZWYgaW52ZXJzZV9EQ1RfbWV0aG9kX3B0ciBpcyBkZWNsYXJlZCBpbiBqcGVnaW50LmggKi8KQEAgLTkzLDE0MyArOTIsMTkgQEAKICNkZWZpbmUganBlZ19mZGN0X2lzbG93CQlqRkRpc2xvdwogI2RlZmluZSBqcGVnX2ZkY3RfaWZhc3QJCWpGRGlmYXN0CiAjZGVmaW5lIGpwZWdfZmRjdF9mbG9hdAkJakZEZmxvYXQKLSNkZWZpbmUganBlZ19mZGN0Xzd4NwkJakZEN3g3Ci0jZGVmaW5lIGpwZWdfZmRjdF82eDYJCWpGRDZ4NgotI2RlZmluZSBqcGVnX2ZkY3RfNXg1CQlqRkQ1eDUKLSNkZWZpbmUganBlZ19mZGN0XzR4NAkJakZENHg0Ci0jZGVmaW5lIGpwZWdfZmRjdF8zeDMJCWpGRDN4MwotI2RlZmluZSBqcGVnX2ZkY3RfMngyCQlqRkQyeDIKLSNkZWZpbmUganBlZ19mZGN0XzF4MQkJakZEMXgxCi0jZGVmaW5lIGpwZWdfZmRjdF85eDkJCWpGRDl4OQotI2RlZmluZSBqcGVnX2ZkY3RfMTB4MTAJCWpGRDEweDEwCi0jZGVmaW5lIGpwZWdfZmRjdF8xMXgxMQkJakZEMTF4MTEKLSNkZWZpbmUganBlZ19mZGN0XzEyeDEyCQlqRkQxMngxMgotI2RlZmluZSBqcGVnX2ZkY3RfMTN4MTMJCWpGRDEzeDEzCi0jZGVmaW5lIGpwZWdfZmRjdF8xNHgxNAkJakZEMTR4MTQKLSNkZWZpbmUganBlZ19mZGN0XzE1eDE1CQlqRkQxNXgxNQotI2RlZmluZSBqcGVnX2ZkY3RfMTZ4MTYJCWpGRDE2eDE2Ci0jZGVmaW5lIGpwZWdfZmRjdF8xNng4CQlqRkQxNng4Ci0jZGVmaW5lIGpwZWdfZmRjdF8xNHg3CQlqRkQxNHg3Ci0jZGVmaW5lIGpwZWdfZmRjdF8xMng2CQlqRkQxMng2Ci0jZGVmaW5lIGpwZWdfZmRjdF8xMHg1CQlqRkQxMHg1Ci0jZGVmaW5lIGpwZWdfZmRjdF84eDQJCWpGRDh4NAotI2RlZmluZSBqcGVnX2ZkY3RfNngzCQlqRkQ2eDMKLSNkZWZpbmUganBlZ19mZGN0XzR4MgkJakZENHgyCi0jZGVmaW5lIGpwZWdfZmRjdF8yeDEJCWpGRDJ4MQotI2RlZmluZSBqcGVnX2ZkY3RfOHgxNgkJakZEOHgxNgotI2RlZmluZSBqcGVnX2ZkY3RfN3gxNAkJakZEN3gxNAotI2RlZmluZSBqcGVnX2ZkY3RfNngxMgkJakZENngxMgotI2RlZmluZSBqcGVnX2ZkY3RfNXgxMAkJakZENXgxMAotI2RlZmluZSBqcGVnX2ZkY3RfNHg4CQlqRkQ0eDgKLSNkZWZpbmUganBlZ19mZGN0XzN4NgkJakZEM3g2Ci0jZGVmaW5lIGpwZWdfZmRjdF8yeDQJCWpGRDJ4NAotI2RlZmluZSBqcGVnX2ZkY3RfMXgyCQlqRkQxeDIKICNkZWZpbmUganBlZ19pZGN0X2lzbG93CQlqUkRpc2xvdwogI2RlZmluZSBqcGVnX2lkY3RfaWZhc3QJCWpSRGlmYXN0CiAjZGVmaW5lIGpwZWdfaWRjdF9mbG9hdAkJalJEZmxvYXQKLSNkZWZpbmUganBlZ19pZGN0Xzd4NwkJalJEN3g3Ci0jZGVmaW5lIGpwZWdfaWRjdF82eDYJCWpSRDZ4NgotI2RlZmluZSBqcGVnX2lkY3RfNXg1CQlqUkQ1eDUKICNkZWZpbmUganBlZ19pZGN0XzR4NAkJalJENHg0Ci0jZGVmaW5lIGpwZWdfaWRjdF8zeDMJCWpSRDN4MwogI2RlZmluZSBqcGVnX2lkY3RfMngyCQlqUkQyeDIKICNkZWZpbmUganBlZ19pZGN0XzF4MQkJalJEMXgxCi0jZGVmaW5lIGpwZWdfaWRjdF85eDkJCWpSRDl4OQotI2RlZmluZSBqcGVnX2lkY3RfMTB4MTAJCWpSRDEweDEwCi0jZGVmaW5lIGpwZWdfaWRjdF8xMXgxMQkJalJEMTF4MTEKLSNkZWZpbmUganBlZ19pZGN0XzEyeDEyCQlqUkQxMngxMgotI2RlZmluZSBqcGVnX2lkY3RfMTN4MTMJCWpSRDEzeDEzCi0jZGVmaW5lIGpwZWdfaWRjdF8xNHgxNAkJalJEMTR4MTQKLSNkZWZpbmUganBlZ19pZGN0XzE1eDE1CQlqUkQxNXgxNQotI2RlZmluZSBqcGVnX2lkY3RfMTZ4MTYJCWpSRDE2eDE2Ci0jZGVmaW5lIGpwZWdfaWRjdF8xNng4CQlqUkQxNng4Ci0jZGVmaW5lIGpwZWdfaWRjdF8xNHg3CQlqUkQxNHg3Ci0jZGVmaW5lIGpwZWdfaWRjdF8xMng2CQlqUkQxMng2Ci0jZGVmaW5lIGpwZWdfaWRjdF8xMHg1CQlqUkQxMHg1Ci0jZGVmaW5lIGpwZWdfaWRjdF84eDQJCWpSRDh4NAotI2RlZmluZSBqcGVnX2lkY3RfNngzCQlqUkQ2eDMKLSNkZWZpbmUganBlZ19pZGN0XzR4MgkJalJENHgyCi0jZGVmaW5lIGpwZWdfaWRjdF8yeDEJCWpSRDJ4MQotI2RlZmluZSBqcGVnX2lkY3RfOHgxNgkJalJEOHgxNgotI2RlZmluZSBqcGVnX2lkY3RfN3gxNAkJalJEN3gxNAotI2RlZmluZSBqcGVnX2lkY3RfNngxMgkJalJENngxMgotI2RlZmluZSBqcGVnX2lkY3RfNXgxMAkJalJENXgxMAotI2RlZmluZSBqcGVnX2lkY3RfNHg4CQlqUkQ0eDgKLSNkZWZpbmUganBlZ19pZGN0XzN4NgkJalJEM3g4Ci0jZGVmaW5lIGpwZWdfaWRjdF8yeDQJCWpSRDJ4NAotI2RlZmluZSBqcGVnX2lkY3RfMXgyCQlqUkQxeDIKICNlbmRpZiAvKiBORUVEX1NIT1JUX0VYVEVSTkFMX05BTUVTICovCiAKIC8qIEV4dGVybiBkZWNsYXJhdGlvbnMgZm9yIHRoZSBmb3J3YXJkIGFuZCBpbnZlcnNlIERDVCByb3V0aW5lcy4gKi8KIAotRVhURVJOKHZvaWQpIGpwZWdfZmRjdF9pc2xvdwotICAgIEpQUCgoRENURUxFTSAqIGRhdGEsIEpTQU1QQVJSQVkgc2FtcGxlX2RhdGEsIEpESU1FTlNJT04gc3RhcnRfY29sKSk7Ci1FWFRFUk4odm9pZCkganBlZ19mZGN0X2lmYXN0Ci0gICAgSlBQKChEQ1RFTEVNICogZGF0YSwgSlNBTVBBUlJBWSBzYW1wbGVfZGF0YSwgSkRJTUVOU0lPTiBzdGFydF9jb2wpKTsKLUVYVEVSTih2b2lkKSBqcGVnX2ZkY3RfZmxvYXQKLSAgICBKUFAoKEZBU1RfRkxPQVQgKiBkYXRhLCBKU0FNUEFSUkFZIHNhbXBsZV9kYXRhLCBKRElNRU5TSU9OIHN0YXJ0X2NvbCkpOwotRVhURVJOKHZvaWQpIGpwZWdfZmRjdF83eDcKLSAgICBKUFAoKERDVEVMRU0gKiBkYXRhLCBKU0FNUEFSUkFZIHNhbXBsZV9kYXRhLCBKRElNRU5TSU9OIHN0YXJ0X2NvbCkpOwotRVhURVJOKHZvaWQpIGpwZWdfZmRjdF82eDYKLSAgICBKUFAoKERDVEVMRU0gKiBkYXRhLCBKU0FNUEFSUkFZIHNhbXBsZV9kYXRhLCBKRElNRU5TSU9OIHN0YXJ0X2NvbCkpOwotRVhURVJOKHZvaWQpIGpwZWdfZmRjdF81eDUKLSAgICBKUFAoKERDVEVMRU0gKiBkYXRhLCBKU0FNUEFSUkFZIHNhbXBsZV9kYXRhLCBKRElNRU5TSU9OIHN0YXJ0X2NvbCkpOwotRVhURVJOKHZvaWQpIGpwZWdfZmRjdF80eDQKLSAgICBKUFAoKERDVEVMRU0gKiBkYXRhLCBKU0FNUEFSUkFZIHNhbXBsZV9kYXRhLCBKRElNRU5TSU9OIHN0YXJ0X2NvbCkpOwotRVhURVJOKHZvaWQpIGpwZWdfZmRjdF8zeDMKLSAgICBKUFAoKERDVEVMRU0gKiBkYXRhLCBKU0FNUEFSUkFZIHNhbXBsZV9kYXRhLCBKRElNRU5TSU9OIHN0YXJ0X2NvbCkpOwotRVhURVJOKHZvaWQpIGpwZWdfZmRjdF8yeDIKLSAgICBKUFAoKERDVEVMRU0gKiBkYXRhLCBKU0FNUEFSUkFZIHNhbXBsZV9kYXRhLCBKRElNRU5TSU9OIHN0YXJ0X2NvbCkpOwotRVhURVJOKHZvaWQpIGpwZWdfZmRjdF8xeDEKLSAgICBKUFAoKERDVEVMRU0gKiBkYXRhLCBKU0FNUEFSUkFZIHNhbXBsZV9kYXRhLCBKRElNRU5TSU9OIHN0YXJ0X2NvbCkpOwotRVhURVJOKHZvaWQpIGpwZWdfZmRjdF85eDkKLSAgICBKUFAoKERDVEVMRU0gKiBkYXRhLCBKU0FNUEFSUkFZIHNhbXBsZV9kYXRhLCBKRElNRU5TSU9OIHN0YXJ0X2NvbCkpOwotRVhURVJOKHZvaWQpIGpwZWdfZmRjdF8xMHgxMAotICAgIEpQUCgoRENURUxFTSAqIGRhdGEsIEpTQU1QQVJSQVkgc2FtcGxlX2RhdGEsIEpESU1FTlNJT04gc3RhcnRfY29sKSk7Ci1FWFRFUk4odm9pZCkganBlZ19mZGN0XzExeDExCi0gICAgSlBQKChEQ1RFTEVNICogZGF0YSwgSlNBTVBBUlJBWSBzYW1wbGVfZGF0YSwgSkRJTUVOU0lPTiBzdGFydF9jb2wpKTsKLUVYVEVSTih2b2lkKSBqcGVnX2ZkY3RfMTJ4MTIKLSAgICBKUFAoKERDVEVMRU0gKiBkYXRhLCBKU0FNUEFSUkFZIHNhbXBsZV9kYXRhLCBKRElNRU5TSU9OIHN0YXJ0X2NvbCkpOwotRVhURVJOKHZvaWQpIGpwZWdfZmRjdF8xM3gxMwotICAgIEpQUCgoRENURUxFTSAqIGRhdGEsIEpTQU1QQVJSQVkgc2FtcGxlX2RhdGEsIEpESU1FTlNJT04gc3RhcnRfY29sKSk7Ci1FWFRFUk4odm9pZCkganBlZ19mZGN0XzE0eDE0Ci0gICAgSlBQKChEQ1RFTEVNICogZGF0YSwgSlNBTVBBUlJBWSBzYW1wbGVfZGF0YSwgSkRJTUVOU0lPTiBzdGFydF9jb2wpKTsKLUVYVEVSTih2b2lkKSBqcGVnX2ZkY3RfMTV4MTUKLSAgICBKUFAoKERDVEVMRU0gKiBkYXRhLCBKU0FNUEFSUkFZIHNhbXBsZV9kYXRhLCBKRElNRU5TSU9OIHN0YXJ0X2NvbCkpOwotRVhURVJOKHZvaWQpIGpwZWdfZmRjdF8xNngxNgotICAgIEpQUCgoRENURUxFTSAqIGRhdGEsIEpTQU1QQVJSQVkgc2FtcGxlX2RhdGEsIEpESU1FTlNJT04gc3RhcnRfY29sKSk7Ci1FWFRFUk4odm9pZCkganBlZ19mZGN0XzE2eDgKLSAgICBKUFAoKERDVEVMRU0gKiBkYXRhLCBKU0FNUEFSUkFZIHNhbXBsZV9kYXRhLCBKRElNRU5TSU9OIHN0YXJ0X2NvbCkpOwotRVhURVJOKHZvaWQpIGpwZWdfZmRjdF8xNHg3Ci0gICAgSlBQKChEQ1RFTEVNICogZGF0YSwgSlNBTVBBUlJBWSBzYW1wbGVfZGF0YSwgSkRJTUVOU0lPTiBzdGFydF9jb2wpKTsKLUVYVEVSTih2b2lkKSBqcGVnX2ZkY3RfMTJ4NgotICAgIEpQUCgoRENURUxFTSAqIGRhdGEsIEpTQU1QQVJSQVkgc2FtcGxlX2RhdGEsIEpESU1FTlNJT04gc3RhcnRfY29sKSk7Ci1FWFRFUk4odm9pZCkganBlZ19mZGN0XzEweDUKLSAgICBKUFAoKERDVEVMRU0gKiBkYXRhLCBKU0FNUEFSUkFZIHNhbXBsZV9kYXRhLCBKRElNRU5TSU9OIHN0YXJ0X2NvbCkpOwotRVhURVJOKHZvaWQpIGpwZWdfZmRjdF84eDQKLSAgICBKUFAoKERDVEVMRU0gKiBkYXRhLCBKU0FNUEFSUkFZIHNhbXBsZV9kYXRhLCBKRElNRU5TSU9OIHN0YXJ0X2NvbCkpOwotRVhURVJOKHZvaWQpIGpwZWdfZmRjdF82eDMKLSAgICBKUFAoKERDVEVMRU0gKiBkYXRhLCBKU0FNUEFSUkFZIHNhbXBsZV9kYXRhLCBKRElNRU5TSU9OIHN0YXJ0X2NvbCkpOwotRVhURVJOKHZvaWQpIGpwZWdfZmRjdF80eDIKLSAgICBKUFAoKERDVEVMRU0gKiBkYXRhLCBKU0FNUEFSUkFZIHNhbXBsZV9kYXRhLCBKRElNRU5TSU9OIHN0YXJ0X2NvbCkpOwotRVhURVJOKHZvaWQpIGpwZWdfZmRjdF8yeDEKLSAgICBKUFAoKERDVEVMRU0gKiBkYXRhLCBKU0FNUEFSUkFZIHNhbXBsZV9kYXRhLCBKRElNRU5TSU9OIHN0YXJ0X2NvbCkpOwotRVhURVJOKHZvaWQpIGpwZWdfZmRjdF84eDE2Ci0gICAgSlBQKChEQ1RFTEVNICogZGF0YSwgSlNBTVBBUlJBWSBzYW1wbGVfZGF0YSwgSkRJTUVOU0lPTiBzdGFydF9jb2wpKTsKLUVYVEVSTih2b2lkKSBqcGVnX2ZkY3RfN3gxNAotICAgIEpQUCgoRENURUxFTSAqIGRhdGEsIEpTQU1QQVJSQVkgc2FtcGxlX2RhdGEsIEpESU1FTlNJT04gc3RhcnRfY29sKSk7Ci1FWFRFUk4odm9pZCkganBlZ19mZGN0XzZ4MTIKLSAgICBKUFAoKERDVEVMRU0gKiBkYXRhLCBKU0FNUEFSUkFZIHNhbXBsZV9kYXRhLCBKRElNRU5TSU9OIHN0YXJ0X2NvbCkpOwotRVhURVJOKHZvaWQpIGpwZWdfZmRjdF81eDEwCi0gICAgSlBQKChEQ1RFTEVNICogZGF0YSwgSlNBTVBBUlJBWSBzYW1wbGVfZGF0YSwgSkRJTUVOU0lPTiBzdGFydF9jb2wpKTsKLUVYVEVSTih2b2lkKSBqcGVnX2ZkY3RfNHg4Ci0gICAgSlBQKChEQ1RFTEVNICogZGF0YSwgSlNBTVBBUlJBWSBzYW1wbGVfZGF0YSwgSkRJTUVOU0lPTiBzdGFydF9jb2wpKTsKLUVYVEVSTih2b2lkKSBqcGVnX2ZkY3RfM3g2Ci0gICAgSlBQKChEQ1RFTEVNICogZGF0YSwgSlNBTVBBUlJBWSBzYW1wbGVfZGF0YSwgSkRJTUVOU0lPTiBzdGFydF9jb2wpKTsKLUVYVEVSTih2b2lkKSBqcGVnX2ZkY3RfMng0Ci0gICAgSlBQKChEQ1RFTEVNICogZGF0YSwgSlNBTVBBUlJBWSBzYW1wbGVfZGF0YSwgSkRJTUVOU0lPTiBzdGFydF9jb2wpKTsKLUVYVEVSTih2b2lkKSBqcGVnX2ZkY3RfMXgyCi0gICAgSlBQKChEQ1RFTEVNICogZGF0YSwgSlNBTVBBUlJBWSBzYW1wbGVfZGF0YSwgSkRJTUVOU0lPTiBzdGFydF9jb2wpKTsKK0VYVEVSTih2b2lkKSBqcGVnX2ZkY3RfaXNsb3cgSlBQKChEQ1RFTEVNICogZGF0YSkpOworRVhURVJOKHZvaWQpIGpwZWdfZmRjdF9pZmFzdCBKUFAoKERDVEVMRU0gKiBkYXRhKSk7CitFWFRFUk4odm9pZCkganBlZ19mZGN0X2Zsb2F0IEpQUCgoRkFTVF9GTE9BVCAqIGRhdGEpKTsKIAogRVhURVJOKHZvaWQpIGpwZWdfaWRjdF9pc2xvdwogICAgIEpQUCgoal9kZWNvbXByZXNzX3B0ciBjaW5mbywganBlZ19jb21wb25lbnRfaW5mbyAqIGNvbXBwdHIsCkBAIC0yNDAsOTkgKzExNSwxNSBAQAogRVhURVJOKHZvaWQpIGpwZWdfaWRjdF9mbG9hdAogICAgIEpQUCgoal9kZWNvbXByZXNzX3B0ciBjaW5mbywganBlZ19jb21wb25lbnRfaW5mbyAqIGNvbXBwdHIsCiAJIEpDT0VGUFRSIGNvZWZfYmxvY2ssIEpTQU1QQVJSQVkgb3V0cHV0X2J1ZiwgSkRJTUVOU0lPTiBvdXRwdXRfY29sKSk7Ci1FWFRFUk4odm9pZCkganBlZ19pZGN0Xzd4NwotICAgIEpQUCgoal9kZWNvbXByZXNzX3B0ciBjaW5mbywganBlZ19jb21wb25lbnRfaW5mbyAqIGNvbXBwdHIsCi0JIEpDT0VGUFRSIGNvZWZfYmxvY2ssIEpTQU1QQVJSQVkgb3V0cHV0X2J1ZiwgSkRJTUVOU0lPTiBvdXRwdXRfY29sKSk7Ci1FWFRFUk4odm9pZCkganBlZ19pZGN0XzZ4NgotICAgIEpQUCgoal9kZWNvbXByZXNzX3B0ciBjaW5mbywganBlZ19jb21wb25lbnRfaW5mbyAqIGNvbXBwdHIsCi0JIEpDT0VGUFRSIGNvZWZfYmxvY2ssIEpTQU1QQVJSQVkgb3V0cHV0X2J1ZiwgSkRJTUVOU0lPTiBvdXRwdXRfY29sKSk7Ci1FWFRFUk4odm9pZCkganBlZ19pZGN0XzV4NQotICAgIEpQUCgoal9kZWNvbXByZXNzX3B0ciBjaW5mbywganBlZ19jb21wb25lbnRfaW5mbyAqIGNvbXBwdHIsCi0JIEpDT0VGUFRSIGNvZWZfYmxvY2ssIEpTQU1QQVJSQVkgb3V0cHV0X2J1ZiwgSkRJTUVOU0lPTiBvdXRwdXRfY29sKSk7CiBFWFRFUk4odm9pZCkganBlZ19pZGN0XzR4NAogICAgIEpQUCgoal9kZWNvbXByZXNzX3B0ciBjaW5mbywganBlZ19jb21wb25lbnRfaW5mbyAqIGNvbXBwdHIsCiAJIEpDT0VGUFRSIGNvZWZfYmxvY2ssIEpTQU1QQVJSQVkgb3V0cHV0X2J1ZiwgSkRJTUVOU0lPTiBvdXRwdXRfY29sKSk7Ci1FWFRFUk4odm9pZCkganBlZ19pZGN0XzN4MwotICAgIEpQUCgoal9kZWNvbXByZXNzX3B0ciBjaW5mbywganBlZ19jb21wb25lbnRfaW5mbyAqIGNvbXBwdHIsCi0JIEpDT0VGUFRSIGNvZWZfYmxvY2ssIEpTQU1QQVJSQVkgb3V0cHV0X2J1ZiwgSkRJTUVOU0lPTiBvdXRwdXRfY29sKSk7CiBFWFRFUk4odm9pZCkganBlZ19pZGN0XzJ4MgogICAgIEpQUCgoal9kZWNvbXByZXNzX3B0ciBjaW5mbywganBlZ19jb21wb25lbnRfaW5mbyAqIGNvbXBwdHIsCiAJIEpDT0VGUFRSIGNvZWZfYmxvY2ssIEpTQU1QQVJSQVkgb3V0cHV0X2J1ZiwgSkRJTUVOU0lPTiBvdXRwdXRfY29sKSk7CiBFWFRFUk4odm9pZCkganBlZ19pZGN0XzF4MQogICAgIEpQUCgoal9kZWNvbXByZXNzX3B0ciBjaW5mbywganBlZ19jb21wb25lbnRfaW5mbyAqIGNvbXBwdHIsCiAJIEpDT0VGUFRSIGNvZWZfYmxvY2ssIEpTQU1QQVJSQVkgb3V0cHV0X2J1ZiwgSkRJTUVOU0lPTiBvdXRwdXRfY29sKSk7Ci1FWFRFUk4odm9pZCkganBlZ19pZGN0Xzl4OQotICAgIEpQUCgoal9kZWNvbXByZXNzX3B0ciBjaW5mbywganBlZ19jb21wb25lbnRfaW5mbyAqIGNvbXBwdHIsCi0JIEpDT0VGUFRSIGNvZWZfYmxvY2ssIEpTQU1QQVJSQVkgb3V0cHV0X2J1ZiwgSkRJTUVOU0lPTiBvdXRwdXRfY29sKSk7Ci1FWFRFUk4odm9pZCkganBlZ19pZGN0XzEweDEwCi0gICAgSlBQKChqX2RlY29tcHJlc3NfcHRyIGNpbmZvLCBqcGVnX2NvbXBvbmVudF9pbmZvICogY29tcHB0ciwKLQkgSkNPRUZQVFIgY29lZl9ibG9jaywgSlNBTVBBUlJBWSBvdXRwdXRfYnVmLCBKRElNRU5TSU9OIG91dHB1dF9jb2wpKTsKLUVYVEVSTih2b2lkKSBqcGVnX2lkY3RfMTF4MTEKLSAgICBKUFAoKGpfZGVjb21wcmVzc19wdHIgY2luZm8sIGpwZWdfY29tcG9uZW50X2luZm8gKiBjb21wcHRyLAotCSBKQ09FRlBUUiBjb2VmX2Jsb2NrLCBKU0FNUEFSUkFZIG91dHB1dF9idWYsIEpESU1FTlNJT04gb3V0cHV0X2NvbCkpOwotRVhURVJOKHZvaWQpIGpwZWdfaWRjdF8xMngxMgotICAgIEpQUCgoal9kZWNvbXByZXNzX3B0ciBjaW5mbywganBlZ19jb21wb25lbnRfaW5mbyAqIGNvbXBwdHIsCi0JIEpDT0VGUFRSIGNvZWZfYmxvY2ssIEpTQU1QQVJSQVkgb3V0cHV0X2J1ZiwgSkRJTUVOU0lPTiBvdXRwdXRfY29sKSk7Ci1FWFRFUk4odm9pZCkganBlZ19pZGN0XzEzeDEzCi0gICAgSlBQKChqX2RlY29tcHJlc3NfcHRyIGNpbmZvLCBqcGVnX2NvbXBvbmVudF9pbmZvICogY29tcHB0ciwKLQkgSkNPRUZQVFIgY29lZl9ibG9jaywgSlNBTVBBUlJBWSBvdXRwdXRfYnVmLCBKRElNRU5TSU9OIG91dHB1dF9jb2wpKTsKLUVYVEVSTih2b2lkKSBqcGVnX2lkY3RfMTR4MTQKLSAgICBKUFAoKGpfZGVjb21wcmVzc19wdHIgY2luZm8sIGpwZWdfY29tcG9uZW50X2luZm8gKiBjb21wcHRyLAotCSBKQ09FRlBUUiBjb2VmX2Jsb2NrLCBKU0FNUEFSUkFZIG91dHB1dF9idWYsIEpESU1FTlNJT04gb3V0cHV0X2NvbCkpOwotRVhURVJOKHZvaWQpIGpwZWdfaWRjdF8xNXgxNQotICAgIEpQUCgoal9kZWNvbXByZXNzX3B0ciBjaW5mbywganBlZ19jb21wb25lbnRfaW5mbyAqIGNvbXBwdHIsCi0JIEpDT0VGUFRSIGNvZWZfYmxvY2ssIEpTQU1QQVJSQVkgb3V0cHV0X2J1ZiwgSkRJTUVOU0lPTiBvdXRwdXRfY29sKSk7Ci1FWFRFUk4odm9pZCkganBlZ19pZGN0XzE2eDE2Ci0gICAgSlBQKChqX2RlY29tcHJlc3NfcHRyIGNpbmZvLCBqcGVnX2NvbXBvbmVudF9pbmZvICogY29tcHB0ciwKLQkgSkNPRUZQVFIgY29lZl9ibG9jaywgSlNBTVBBUlJBWSBvdXRwdXRfYnVmLCBKRElNRU5TSU9OIG91dHB1dF9jb2wpKTsKLUVYVEVSTih2b2lkKSBqcGVnX2lkY3RfMTZ4OAotICAgIEpQUCgoal9kZWNvbXByZXNzX3B0ciBjaW5mbywganBlZ19jb21wb25lbnRfaW5mbyAqIGNvbXBwdHIsCi0JIEpDT0VGUFRSIGNvZWZfYmxvY2ssIEpTQU1QQVJSQVkgb3V0cHV0X2J1ZiwgSkRJTUVOU0lPTiBvdXRwdXRfY29sKSk7Ci1FWFRFUk4odm9pZCkganBlZ19pZGN0XzE0eDcKLSAgICBKUFAoKGpfZGVjb21wcmVzc19wdHIgY2luZm8sIGpwZWdfY29tcG9uZW50X2luZm8gKiBjb21wcHRyLAotCSBKQ09FRlBUUiBjb2VmX2Jsb2NrLCBKU0FNUEFSUkFZIG91dHB1dF9idWYsIEpESU1FTlNJT04gb3V0cHV0X2NvbCkpOwotRVhURVJOKHZvaWQpIGpwZWdfaWRjdF8xMng2Ci0gICAgSlBQKChqX2RlY29tcHJlc3NfcHRyIGNpbmZvLCBqcGVnX2NvbXBvbmVudF9pbmZvICogY29tcHB0ciwKLQkgSkNPRUZQVFIgY29lZl9ibG9jaywgSlNBTVBBUlJBWSBvdXRwdXRfYnVmLCBKRElNRU5TSU9OIG91dHB1dF9jb2wpKTsKLUVYVEVSTih2b2lkKSBqcGVnX2lkY3RfMTB4NQotICAgIEpQUCgoal9kZWNvbXByZXNzX3B0ciBjaW5mbywganBlZ19jb21wb25lbnRfaW5mbyAqIGNvbXBwdHIsCi0JIEpDT0VGUFRSIGNvZWZfYmxvY2ssIEpTQU1QQVJSQVkgb3V0cHV0X2J1ZiwgSkRJTUVOU0lPTiBvdXRwdXRfY29sKSk7Ci1FWFRFUk4odm9pZCkganBlZ19pZGN0Xzh4NAotICAgIEpQUCgoal9kZWNvbXByZXNzX3B0ciBjaW5mbywganBlZ19jb21wb25lbnRfaW5mbyAqIGNvbXBwdHIsCi0JIEpDT0VGUFRSIGNvZWZfYmxvY2ssIEpTQU1QQVJSQVkgb3V0cHV0X2J1ZiwgSkRJTUVOU0lPTiBvdXRwdXRfY29sKSk7Ci1FWFRFUk4odm9pZCkganBlZ19pZGN0XzZ4MwotICAgIEpQUCgoal9kZWNvbXByZXNzX3B0ciBjaW5mbywganBlZ19jb21wb25lbnRfaW5mbyAqIGNvbXBwdHIsCi0JIEpDT0VGUFRSIGNvZWZfYmxvY2ssIEpTQU1QQVJSQVkgb3V0cHV0X2J1ZiwgSkRJTUVOU0lPTiBvdXRwdXRfY29sKSk7Ci1FWFRFUk4odm9pZCkganBlZ19pZGN0XzR4MgotICAgIEpQUCgoal9kZWNvbXByZXNzX3B0ciBjaW5mbywganBlZ19jb21wb25lbnRfaW5mbyAqIGNvbXBwdHIsCi0JIEpDT0VGUFRSIGNvZWZfYmxvY2ssIEpTQU1QQVJSQVkgb3V0cHV0X2J1ZiwgSkRJTUVOU0lPTiBvdXRwdXRfY29sKSk7Ci1FWFRFUk4odm9pZCkganBlZ19pZGN0XzJ4MQotICAgIEpQUCgoal9kZWNvbXByZXNzX3B0ciBjaW5mbywganBlZ19jb21wb25lbnRfaW5mbyAqIGNvbXBwdHIsCi0JIEpDT0VGUFRSIGNvZWZfYmxvY2ssIEpTQU1QQVJSQVkgb3V0cHV0X2J1ZiwgSkRJTUVOU0lPTiBvdXRwdXRfY29sKSk7Ci1FWFRFUk4odm9pZCkganBlZ19pZGN0Xzh4MTYKLSAgICBKUFAoKGpfZGVjb21wcmVzc19wdHIgY2luZm8sIGpwZWdfY29tcG9uZW50X2luZm8gKiBjb21wcHRyLAotCSBKQ09FRlBUUiBjb2VmX2Jsb2NrLCBKU0FNUEFSUkFZIG91dHB1dF9idWYsIEpESU1FTlNJT04gb3V0cHV0X2NvbCkpOwotRVhURVJOKHZvaWQpIGpwZWdfaWRjdF83eDE0Ci0gICAgSlBQKChqX2RlY29tcHJlc3NfcHRyIGNpbmZvLCBqcGVnX2NvbXBvbmVudF9pbmZvICogY29tcHB0ciwKLQkgSkNPRUZQVFIgY29lZl9ibG9jaywgSlNBTVBBUlJBWSBvdXRwdXRfYnVmLCBKRElNRU5TSU9OIG91dHB1dF9jb2wpKTsKLUVYVEVSTih2b2lkKSBqcGVnX2lkY3RfNngxMgotICAgIEpQUCgoal9kZWNvbXByZXNzX3B0ciBjaW5mbywganBlZ19jb21wb25lbnRfaW5mbyAqIGNvbXBwdHIsCi0JIEpDT0VGUFRSIGNvZWZfYmxvY2ssIEpTQU1QQVJSQVkgb3V0cHV0X2J1ZiwgSkRJTUVOU0lPTiBvdXRwdXRfY29sKSk7Ci1FWFRFUk4odm9pZCkganBlZ19pZGN0XzV4MTAKLSAgICBKUFAoKGpfZGVjb21wcmVzc19wdHIgY2luZm8sIGpwZWdfY29tcG9uZW50X2luZm8gKiBjb21wcHRyLAotCSBKQ09FRlBUUiBjb2VmX2Jsb2NrLCBKU0FNUEFSUkFZIG91dHB1dF9idWYsIEpESU1FTlNJT04gb3V0cHV0X2NvbCkpOwotRVhURVJOKHZvaWQpIGpwZWdfaWRjdF80eDgKLSAgICBKUFAoKGpfZGVjb21wcmVzc19wdHIgY2luZm8sIGpwZWdfY29tcG9uZW50X2luZm8gKiBjb21wcHRyLAotCSBKQ09FRlBUUiBjb2VmX2Jsb2NrLCBKU0FNUEFSUkFZIG91dHB1dF9idWYsIEpESU1FTlNJT04gb3V0cHV0X2NvbCkpOwotRVhURVJOKHZvaWQpIGpwZWdfaWRjdF8zeDYKLSAgICBKUFAoKGpfZGVjb21wcmVzc19wdHIgY2luZm8sIGpwZWdfY29tcG9uZW50X2luZm8gKiBjb21wcHRyLAotCSBKQ09FRlBUUiBjb2VmX2Jsb2NrLCBKU0FNUEFSUkFZIG91dHB1dF9idWYsIEpESU1FTlNJT04gb3V0cHV0X2NvbCkpOwotRVhURVJOKHZvaWQpIGpwZWdfaWRjdF8yeDQKLSAgICBKUFAoKGpfZGVjb21wcmVzc19wdHIgY2luZm8sIGpwZWdfY29tcG9uZW50X2luZm8gKiBjb21wcHRyLAotCSBKQ09FRlBUUiBjb2VmX2Jsb2NrLCBKU0FNUEFSUkFZIG91dHB1dF9idWYsIEpESU1FTlNJT04gb3V0cHV0X2NvbCkpOwotRVhURVJOKHZvaWQpIGpwZWdfaWRjdF8xeDIKLSAgICBKUFAoKGpfZGVjb21wcmVzc19wdHIgY2luZm8sIGpwZWdfY29tcG9uZW50X2luZm8gKiBjb21wcHRyLAotCSBKQ09FRlBUUiBjb2VmX2Jsb2NrLCBKU0FNUEFSUkFZIG91dHB1dF9idWYsIEpESU1FTlNJT04gb3V0cHV0X2NvbCkpOwogCiAKIC8qCmRpZmYgLS1naXQgYS9qZGRjdG1nci5jIGIvamRkY3RtZ3IuYwppbmRleCAwZGVkOWQ1Li4wNDRlNDY5IDEwMDY0NAotLS0gYS9qZGRjdG1nci5jCisrKyBiL2pkZGN0bWdyLmMKQEAgLTIsNyArMiw4IEBACiAgKiBqZGRjdG1nci5jCiAgKgogICogQ29weXJpZ2h0IChDKSAxOTk0LTE5OTYsIFRob21hcyBHLiBMYW5lLgotICogTW9kaWZpZWQgMjAwMi0yMDEwIGJ5IEd1aWRvIFZvbGxiZWRpbmcuCisgKiBDb3B5cmlnaHQgMjAwOSBQaWVycmUgT3NzbWFuIDxvc3NtYW5AY2VuZGlvLnNlPiBmb3IgQ2VuZGlvIEFCCisgKiBDb3B5cmlnaHQgKEMpIDIwMTAsIEQuIFIuIENvbW1hbmRlci4KICAqIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBJbmRlcGVuZGVudCBKUEVHIEdyb3VwJ3Mgc29mdHdhcmUuCiAgKiBGb3IgY29uZGl0aW9ucyBvZiBkaXN0cmlidXRpb24gYW5kIHVzZSwgc2VlIHRoZSBhY2NvbXBhbnlpbmcgUkVBRE1FIGZpbGUuCiAgKgpAQCAtMjAsNiArMjEsOCBAQAogI2luY2x1ZGUgImppbmNsdWRlLmgiCiAjaW5jbHVkZSAianBlZ2xpYi5oIgogI2luY2x1ZGUgImpkY3QuaCIJCS8qIFByaXZhdGUgZGVjbGFyYXRpb25zIGZvciBEQ1Qgc3Vic3lzdGVtICovCisjaW5jbHVkZSAianNpbWRkY3QuaCIKKyNpbmNsdWRlICJqcGVnY29tcC5oIgogCiAKIC8qCkBAIC05OSwxNTAgKzEwMiw1MyBAQAogICBmb3IgKGNpID0gMCwgY29tcHB0ciA9IGNpbmZvLT5jb21wX2luZm87IGNpIDwgY2luZm8tPm51bV9jb21wb25lbnRzOwogICAgICAgIGNpKyssIGNvbXBwdHIrKykgewogICAgIC8qIFNlbGVjdCB0aGUgcHJvcGVyIElEQ1Qgcm91dGluZSBmb3IgdGhpcyBjb21wb25lbnQncyBzY2FsaW5nICovCi0gICAgc3dpdGNoICgoY29tcHB0ci0+RENUX2hfc2NhbGVkX3NpemUgPDwgOCkgKyBjb21wcHRyLT5EQ1Rfdl9zY2FsZWRfc2l6ZSkgeworICAgIHN3aXRjaCAoY29tcHB0ci0+X0RDVF9zY2FsZWRfc2l6ZSkgewogI2lmZGVmIElEQ1RfU0NBTElOR19TVVBQT1JURUQKLSAgICBjYXNlICgoMSA8PCA4KSArIDEpOgorICAgIGNhc2UgMToKICAgICAgIG1ldGhvZF9wdHIgPSBqcGVnX2lkY3RfMXgxOwotICAgICAgbWV0aG9kID0gSkRDVF9JU0xPVzsJLyogamlkY3RpbnQgdXNlcyBpc2xvdy1zdHlsZSB0YWJsZSAqLworICAgICAgbWV0aG9kID0gSkRDVF9JU0xPVzsJLyogamlkY3RyZWQgdXNlcyBpc2xvdy1zdHlsZSB0YWJsZSAqLwogICAgICAgYnJlYWs7Ci0gICAgY2FzZSAoKDIgPDwgOCkgKyAyKToKLSAgICAgIG1ldGhvZF9wdHIgPSBqcGVnX2lkY3RfMngyOwotICAgICAgbWV0aG9kID0gSkRDVF9JU0xPVzsJLyogamlkY3RpbnQgdXNlcyBpc2xvdy1zdHlsZSB0YWJsZSAqLworICAgIGNhc2UgMjoKKyAgICAgIGlmIChqc2ltZF9jYW5faWRjdF8yeDIoKSkKKyAgICAgICAgbWV0aG9kX3B0ciA9IGpzaW1kX2lkY3RfMngyOworICAgICAgZWxzZQorICAgICAgICBtZXRob2RfcHRyID0ganBlZ19pZGN0XzJ4MjsKKyAgICAgIG1ldGhvZCA9IEpEQ1RfSVNMT1c7CS8qIGppZGN0cmVkIHVzZXMgaXNsb3ctc3R5bGUgdGFibGUgKi8KICAgICAgIGJyZWFrOwotICAgIGNhc2UgKCgzIDw8IDgpICsgMyk6Ci0gICAgICBtZXRob2RfcHRyID0ganBlZ19pZGN0XzN4MzsKLSAgICAgIG1ldGhvZCA9IEpEQ1RfSVNMT1c7CS8qIGppZGN0aW50IHVzZXMgaXNsb3ctc3R5bGUgdGFibGUgKi8KLSAgICAgIGJyZWFrOwotICAgIGNhc2UgKCg0IDw8IDgpICsgNCk6Ci0gICAgICBtZXRob2RfcHRyID0ganBlZ19pZGN0XzR4NDsKLSAgICAgIG1ldGhvZCA9IEpEQ1RfSVNMT1c7CS8qIGppZGN0aW50IHVzZXMgaXNsb3ctc3R5bGUgdGFibGUgKi8KLSAgICAgIGJyZWFrOwotICAgIGNhc2UgKCg1IDw8IDgpICsgNSk6Ci0gICAgICBtZXRob2RfcHRyID0ganBlZ19pZGN0XzV4NTsKLSAgICAgIG1ldGhvZCA9IEpEQ1RfSVNMT1c7CS8qIGppZGN0aW50IHVzZXMgaXNsb3ctc3R5bGUgdGFibGUgKi8KLSAgICAgIGJyZWFrOwotICAgIGNhc2UgKCg2IDw8IDgpICsgNik6Ci0gICAgICBtZXRob2RfcHRyID0ganBlZ19pZGN0XzZ4NjsKLSAgICAgIG1ldGhvZCA9IEpEQ1RfSVNMT1c7CS8qIGppZGN0aW50IHVzZXMgaXNsb3ctc3R5bGUgdGFibGUgKi8KLSAgICAgIGJyZWFrOwotICAgIGNhc2UgKCg3IDw8IDgpICsgNyk6Ci0gICAgICBtZXRob2RfcHRyID0ganBlZ19pZGN0Xzd4NzsKLSAgICAgIG1ldGhvZCA9IEpEQ1RfSVNMT1c7CS8qIGppZGN0aW50IHVzZXMgaXNsb3ctc3R5bGUgdGFibGUgKi8KLSAgICAgIGJyZWFrOwotICAgIGNhc2UgKCg5IDw8IDgpICsgOSk6Ci0gICAgICBtZXRob2RfcHRyID0ganBlZ19pZGN0Xzl4OTsKLSAgICAgIG1ldGhvZCA9IEpEQ1RfSVNMT1c7CS8qIGppZGN0aW50IHVzZXMgaXNsb3ctc3R5bGUgdGFibGUgKi8KLSAgICAgIGJyZWFrOwotICAgIGNhc2UgKCgxMCA8PCA4KSArIDEwKToKLSAgICAgIG1ldGhvZF9wdHIgPSBqcGVnX2lkY3RfMTB4MTA7Ci0gICAgICBtZXRob2QgPSBKRENUX0lTTE9XOwkvKiBqaWRjdGludCB1c2VzIGlzbG93LXN0eWxlIHRhYmxlICovCi0gICAgICBicmVhazsKLSAgICBjYXNlICgoMTEgPDwgOCkgKyAxMSk6Ci0gICAgICBtZXRob2RfcHRyID0ganBlZ19pZGN0XzExeDExOwotICAgICAgbWV0aG9kID0gSkRDVF9JU0xPVzsJLyogamlkY3RpbnQgdXNlcyBpc2xvdy1zdHlsZSB0YWJsZSAqLwotICAgICAgYnJlYWs7Ci0gICAgY2FzZSAoKDEyIDw8IDgpICsgMTIpOgotICAgICAgbWV0aG9kX3B0ciA9IGpwZWdfaWRjdF8xMngxMjsKLSAgICAgIG1ldGhvZCA9IEpEQ1RfSVNMT1c7CS8qIGppZGN0aW50IHVzZXMgaXNsb3ctc3R5bGUgdGFibGUgKi8KLSAgICAgIGJyZWFrOwotICAgIGNhc2UgKCgxMyA8PCA4KSArIDEzKToKLSAgICAgIG1ldGhvZF9wdHIgPSBqcGVnX2lkY3RfMTN4MTM7Ci0gICAgICBtZXRob2QgPSBKRENUX0lTTE9XOwkvKiBqaWRjdGludCB1c2VzIGlzbG93LXN0eWxlIHRhYmxlICovCi0gICAgICBicmVhazsKLSAgICBjYXNlICgoMTQgPDwgOCkgKyAxNCk6Ci0gICAgICBtZXRob2RfcHRyID0ganBlZ19pZGN0XzE0eDE0OwotICAgICAgbWV0aG9kID0gSkRDVF9JU0xPVzsJLyogamlkY3RpbnQgdXNlcyBpc2xvdy1zdHlsZSB0YWJsZSAqLwotICAgICAgYnJlYWs7Ci0gICAgY2FzZSAoKDE1IDw8IDgpICsgMTUpOgotICAgICAgbWV0aG9kX3B0ciA9IGpwZWdfaWRjdF8xNXgxNTsKLSAgICAgIG1ldGhvZCA9IEpEQ1RfSVNMT1c7CS8qIGppZGN0aW50IHVzZXMgaXNsb3ctc3R5bGUgdGFibGUgKi8KLSAgICAgIGJyZWFrOwotICAgIGNhc2UgKCgxNiA8PCA4KSArIDE2KToKLSAgICAgIG1ldGhvZF9wdHIgPSBqcGVnX2lkY3RfMTZ4MTY7Ci0gICAgICBtZXRob2QgPSBKRENUX0lTTE9XOwkvKiBqaWRjdGludCB1c2VzIGlzbG93LXN0eWxlIHRhYmxlICovCi0gICAgICBicmVhazsKLSAgICBjYXNlICgoMTYgPDwgOCkgKyA4KToKLSAgICAgIG1ldGhvZF9wdHIgPSBqcGVnX2lkY3RfMTZ4ODsKLSAgICAgIG1ldGhvZCA9IEpEQ1RfSVNMT1c7CS8qIGppZGN0aW50IHVzZXMgaXNsb3ctc3R5bGUgdGFibGUgKi8KLSAgICAgIGJyZWFrOwotICAgIGNhc2UgKCgxNCA8PCA4KSArIDcpOgotICAgICAgbWV0aG9kX3B0ciA9IGpwZWdfaWRjdF8xNHg3OwotICAgICAgbWV0aG9kID0gSkRDVF9JU0xPVzsJLyogamlkY3RpbnQgdXNlcyBpc2xvdy1zdHlsZSB0YWJsZSAqLwotICAgICAgYnJlYWs7Ci0gICAgY2FzZSAoKDEyIDw8IDgpICsgNik6Ci0gICAgICBtZXRob2RfcHRyID0ganBlZ19pZGN0XzEyeDY7Ci0gICAgICBtZXRob2QgPSBKRENUX0lTTE9XOwkvKiBqaWRjdGludCB1c2VzIGlzbG93LXN0eWxlIHRhYmxlICovCi0gICAgICBicmVhazsKLSAgICBjYXNlICgoMTAgPDwgOCkgKyA1KToKLSAgICAgIG1ldGhvZF9wdHIgPSBqcGVnX2lkY3RfMTB4NTsKLSAgICAgIG1ldGhvZCA9IEpEQ1RfSVNMT1c7CS8qIGppZGN0aW50IHVzZXMgaXNsb3ctc3R5bGUgdGFibGUgKi8KLSAgICAgIGJyZWFrOwotICAgIGNhc2UgKCg4IDw8IDgpICsgNCk6Ci0gICAgICBtZXRob2RfcHRyID0ganBlZ19pZGN0Xzh4NDsKLSAgICAgIG1ldGhvZCA9IEpEQ1RfSVNMT1c7CS8qIGppZGN0aW50IHVzZXMgaXNsb3ctc3R5bGUgdGFibGUgKi8KLSAgICAgIGJyZWFrOwotICAgIGNhc2UgKCg2IDw8IDgpICsgMyk6Ci0gICAgICBtZXRob2RfcHRyID0ganBlZ19pZGN0XzZ4MzsKLSAgICAgIG1ldGhvZCA9IEpEQ1RfSVNMT1c7CS8qIGppZGN0aW50IHVzZXMgaXNsb3ctc3R5bGUgdGFibGUgKi8KLSAgICAgIGJyZWFrOwotICAgIGNhc2UgKCg0IDw8IDgpICsgMik6Ci0gICAgICBtZXRob2RfcHRyID0ganBlZ19pZGN0XzR4MjsKLSAgICAgIG1ldGhvZCA9IEpEQ1RfSVNMT1c7CS8qIGppZGN0aW50IHVzZXMgaXNsb3ctc3R5bGUgdGFibGUgKi8KLSAgICAgIGJyZWFrOwotICAgIGNhc2UgKCgyIDw8IDgpICsgMSk6Ci0gICAgICBtZXRob2RfcHRyID0ganBlZ19pZGN0XzJ4MTsKLSAgICAgIG1ldGhvZCA9IEpEQ1RfSVNMT1c7CS8qIGppZGN0aW50IHVzZXMgaXNsb3ctc3R5bGUgdGFibGUgKi8KLSAgICAgIGJyZWFrOwotICAgIGNhc2UgKCg4IDw8IDgpICsgMTYpOgotICAgICAgbWV0aG9kX3B0ciA9IGpwZWdfaWRjdF84eDE2OwotICAgICAgbWV0aG9kID0gSkRDVF9JU0xPVzsJLyogamlkY3RpbnQgdXNlcyBpc2xvdy1zdHlsZSB0YWJsZSAqLwotICAgICAgYnJlYWs7Ci0gICAgY2FzZSAoKDcgPDwgOCkgKyAxNCk6Ci0gICAgICBtZXRob2RfcHRyID0ganBlZ19pZGN0Xzd4MTQ7Ci0gICAgICBtZXRob2QgPSBKRENUX0lTTE9XOwkvKiBqaWRjdGludCB1c2VzIGlzbG93LXN0eWxlIHRhYmxlICovCi0gICAgICBicmVhazsKLSAgICBjYXNlICgoNiA8PCA4KSArIDEyKToKLSAgICAgIG1ldGhvZF9wdHIgPSBqcGVnX2lkY3RfNngxMjsKLSAgICAgIG1ldGhvZCA9IEpEQ1RfSVNMT1c7CS8qIGppZGN0aW50IHVzZXMgaXNsb3ctc3R5bGUgdGFibGUgKi8KLSAgICAgIGJyZWFrOwotICAgIGNhc2UgKCg1IDw8IDgpICsgMTApOgotICAgICAgbWV0aG9kX3B0ciA9IGpwZWdfaWRjdF81eDEwOwotICAgICAgbWV0aG9kID0gSkRDVF9JU0xPVzsJLyogamlkY3RpbnQgdXNlcyBpc2xvdy1zdHlsZSB0YWJsZSAqLwotICAgICAgYnJlYWs7Ci0gICAgY2FzZSAoKDQgPDwgOCkgKyA4KToKLSAgICAgIG1ldGhvZF9wdHIgPSBqcGVnX2lkY3RfNHg4OwotICAgICAgbWV0aG9kID0gSkRDVF9JU0xPVzsJLyogamlkY3RpbnQgdXNlcyBpc2xvdy1zdHlsZSB0YWJsZSAqLwotICAgICAgYnJlYWs7Ci0gICAgY2FzZSAoKDMgPDwgOCkgKyA2KToKLSAgICAgIG1ldGhvZF9wdHIgPSBqcGVnX2lkY3RfM3g2OwotICAgICAgbWV0aG9kID0gSkRDVF9JU0xPVzsJLyogamlkY3RpbnQgdXNlcyBpc2xvdy1zdHlsZSB0YWJsZSAqLwotICAgICAgYnJlYWs7Ci0gICAgY2FzZSAoKDIgPDwgOCkgKyA0KToKLSAgICAgIG1ldGhvZF9wdHIgPSBqcGVnX2lkY3RfMng0OwotICAgICAgbWV0aG9kID0gSkRDVF9JU0xPVzsJLyogamlkY3RpbnQgdXNlcyBpc2xvdy1zdHlsZSB0YWJsZSAqLwotICAgICAgYnJlYWs7Ci0gICAgY2FzZSAoKDEgPDwgOCkgKyAyKToKLSAgICAgIG1ldGhvZF9wdHIgPSBqcGVnX2lkY3RfMXgyOwotICAgICAgbWV0aG9kID0gSkRDVF9JU0xPVzsJLyogamlkY3RpbnQgdXNlcyBpc2xvdy1zdHlsZSB0YWJsZSAqLworICAgIGNhc2UgNDoKKyAgICAgIGlmIChqc2ltZF9jYW5faWRjdF80eDQoKSkKKyAgICAgICAgbWV0aG9kX3B0ciA9IGpzaW1kX2lkY3RfNHg0OworICAgICAgZWxzZQorICAgICAgICBtZXRob2RfcHRyID0ganBlZ19pZGN0XzR4NDsKKyAgICAgIG1ldGhvZCA9IEpEQ1RfSVNMT1c7CS8qIGppZGN0cmVkIHVzZXMgaXNsb3ctc3R5bGUgdGFibGUgKi8KICAgICAgIGJyZWFrOwogI2VuZGlmCi0gICAgY2FzZSAoKERDVFNJWkUgPDwgOCkgKyBEQ1RTSVpFKToKKyAgICBjYXNlIERDVFNJWkU6CiAgICAgICBzd2l0Y2ggKGNpbmZvLT5kY3RfbWV0aG9kKSB7CiAjaWZkZWYgRENUX0lTTE9XX1NVUFBPUlRFRAogICAgICAgY2FzZSBKRENUX0lTTE9XOgotCW1ldGhvZF9wdHIgPSBqcGVnX2lkY3RfaXNsb3c7CisJaWYgKGpzaW1kX2Nhbl9pZGN0X2lzbG93KCkpCisJICBtZXRob2RfcHRyID0ganNpbWRfaWRjdF9pc2xvdzsKKwllbHNlCisJICBtZXRob2RfcHRyID0ganBlZ19pZGN0X2lzbG93OwogCW1ldGhvZCA9IEpEQ1RfSVNMT1c7CiAJYnJlYWs7CiAjZW5kaWYKICNpZmRlZiBEQ1RfSUZBU1RfU1VQUE9SVEVECiAgICAgICBjYXNlIEpEQ1RfSUZBU1Q6Ci0JbWV0aG9kX3B0ciA9IGpwZWdfaWRjdF9pZmFzdDsKKwlpZiAoanNpbWRfY2FuX2lkY3RfaWZhc3QoKSkKKwkgIG1ldGhvZF9wdHIgPSBqc2ltZF9pZGN0X2lmYXN0OworCWVsc2UKKwkgIG1ldGhvZF9wdHIgPSBqcGVnX2lkY3RfaWZhc3Q7CiAJbWV0aG9kID0gSkRDVF9JRkFTVDsKIAlicmVhazsKICNlbmRpZgogI2lmZGVmIERDVF9GTE9BVF9TVVBQT1JURUQKICAgICAgIGNhc2UgSkRDVF9GTE9BVDoKLQltZXRob2RfcHRyID0ganBlZ19pZGN0X2Zsb2F0OworCWlmIChqc2ltZF9jYW5faWRjdF9mbG9hdCgpKQorCSAgbWV0aG9kX3B0ciA9IGpzaW1kX2lkY3RfZmxvYXQ7CisJZWxzZQorCSAgbWV0aG9kX3B0ciA9IGpwZWdfaWRjdF9mbG9hdDsKIAltZXRob2QgPSBKRENUX0ZMT0FUOwogCWJyZWFrOwogI2VuZGlmCkBAIC0yNTIsOCArMTU4LDcgQEAKICAgICAgIH0KICAgICAgIGJyZWFrOwogICAgIGRlZmF1bHQ6Ci0gICAgICBFUlJFWElUMihjaW5mbywgSkVSUl9CQURfRENUU0laRSwKLQkgICAgICAgY29tcHB0ci0+RENUX2hfc2NhbGVkX3NpemUsIGNvbXBwdHItPkRDVF92X3NjYWxlZF9zaXplKTsKKyAgICAgIEVSUkVYSVQxKGNpbmZvLCBKRVJSX0JBRF9EQ1RTSVpFLCBjb21wcHRyLT5fRENUX3NjYWxlZF9zaXplKTsKICAgICAgIGJyZWFrOwogICAgIH0KICAgICBpZGN0LT5wdWIuaW52ZXJzZV9EQ1RbY2ldID0gbWV0aG9kX3B0cjsKQEAgLTMyNSw3ICsyMzAsNiBAQAogCSAqIGNvZWZmaWNpZW50cyBzY2FsZWQgYnkgc2NhbGVmYWN0b3Jbcm93XSpzY2FsZWZhY3Rvcltjb2xdLCB3aGVyZQogCSAqICAgc2NhbGVmYWN0b3JbMF0gPSAxCiAJICogICBzY2FsZWZhY3RvcltrXSA9IGNvcyhrKlBJLzE2KSAqIHNxcnQoMikgICAgZm9yIGs9MS4uNwotCSAqIFdlIGFwcGx5IGEgZnVydGhlciBzY2FsZSBmYWN0b3Igb2YgMS84LgogCSAqLwogCUZMT0FUX01VTFRfVFlQRSAqIGZtdGJsID0gKEZMT0FUX01VTFRfVFlQRSAqKSBjb21wcHRyLT5kY3RfdGFibGU7CiAJaW50IHJvdywgY29sOwpAQCAtMzM5LDcgKzI0Myw3IEBACiAJICBmb3IgKGNvbCA9IDA7IGNvbCA8IERDVFNJWkU7IGNvbCsrKSB7CiAJICAgIGZtdGJsW2ldID0gKEZMT0FUX01VTFRfVFlQRSkKIAkgICAgICAoKGRvdWJsZSkgcXRibC0+cXVhbnR2YWxbaV0gKgotCSAgICAgICBhYW5zY2FsZWZhY3Rvcltyb3ddICogYWFuc2NhbGVmYWN0b3JbY29sXSAqIDAuMTI1KTsKKwkgICAgICAgYWFuc2NhbGVmYWN0b3Jbcm93XSAqIGFhbnNjYWxlZmFjdG9yW2NvbF0pOwogCSAgICBpKys7CiAJICB9CiAJfQpkaWZmIC0tZ2l0IGEvamRodWZmLmMgYi9qZGh1ZmYuYwppbmRleCAwNmY5MmZlLi5mNmI2ZTAwIDEwMDY0NAotLS0gYS9qZGh1ZmYuYworKysgYi9qZGh1ZmYuYwpAQCAtMiwxMiArMiwxMSBAQAogICogamRodWZmLmMKICAqCiAgKiBDb3B5cmlnaHQgKEMpIDE5OTEtMTk5NywgVGhvbWFzIEcuIExhbmUuCi0gKiBNb2RpZmllZCAyMDA2LTIwMDkgYnkgR3VpZG8gVm9sbGJlZGluZy4KKyAqIENvcHlyaWdodCAoQykgMjAxMCwgRC4gUi4gQ29tbWFuZGVyLgogICogVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEluZGVwZW5kZW50IEpQRUcgR3JvdXAncyBzb2Z0d2FyZS4KICAqIEZvciBjb25kaXRpb25zIG9mIGRpc3RyaWJ1dGlvbiBhbmQgdXNlLCBzZWUgdGhlIGFjY29tcGFueWluZyBSRUFETUUgZmlsZS4KICAqCiAgKiBUaGlzIGZpbGUgY29udGFpbnMgSHVmZm1hbiBlbnRyb3B5IGRlY29kaW5nIHJvdXRpbmVzLgotICogQm90aCBzZXF1ZW50aWFsIGFuZCBwcm9ncmVzc2l2ZSBtb2RlcyBhcmUgc3VwcG9ydGVkIGluIHRoaXMgc2luZ2xlIG1vZHVsZS4KICAqCiAgKiBNdWNoIG9mIHRoZSBjb21wbGV4aXR5IGhlcmUgaGFzIHRvIGRvIHdpdGggc3VwcG9ydGluZyBpbnB1dCBzdXNwZW5zaW9uLgogICogSWYgdGhlIGRhdGEgc291cmNlIG1vZHVsZSBkZW1hbmRzIHN1c3BlbnNpb24sIHdlIHdhbnQgdG8gYmUgYWJsZSB0byBiYWNrCkBAIC0xNiwxNzYgKzE1LDI2IEBACiAgKiBzdG9yYWdlIG9ubHkgdXBvbiBzdWNjZXNzZnVsIGNvbXBsZXRpb24gb2YgYW4gTUNVLgogICovCiAKKy8qIFBlcmZvcm1hbmNlIGVuaGFuY2VtZW50czoKKyAqIENvcHlyaWdodCAoQykyMDA3IFN1biBNaWNyb3N5c3RlbXMsIEluYy4KKyAqIENvcHlyaWdodCAoQykyMDA5LTIwMTAgRC4gUi4gQ29tbWFuZGVyCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmUgYW5kIG1heSBiZSByZWRpc3RyaWJ1dGVkIGFuZC9vciBtb2RpZmllZCB1bmRlcgorICogdGhlIHRlcm1zIG9mIHRoZSB3eFdpbmRvd3MgTGlicmFyeSBMaWNlbnNlLCBWZXJzaW9uIDMuMSBvciAoYXQgeW91ciBvcHRpb24pCisgKiBhbnkgbGF0ZXIgdmVyc2lvbi4gIFRoZSBmdWxsIGxpY2Vuc2UgaXMgaW4gdGhlIExJQ0VOU0UudHh0IGZpbGUgaW5jbHVkZWQKKyAqIHdpdGggdGhpcyBkaXN0cmlidXRpb24uCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogd3hXaW5kb3dzIExpYnJhcnkgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICovCisKICNkZWZpbmUgSlBFR19JTlRFUk5BTFMKICNpbmNsdWRlICJqaW5jbHVkZS5oIgogI2luY2x1ZGUgImpwZWdsaWIuaCIKLQotCi0vKiBEZXJpdmVkIGRhdGEgY29uc3RydWN0ZWQgZm9yIGVhY2ggSHVmZm1hbiB0YWJsZSAqLwotCi0jZGVmaW5lIEhVRkZfTE9PS0FIRUFECTgJLyogIyBvZiBiaXRzIG9mIGxvb2thaGVhZCAqLwotCi10eXBlZGVmIHN0cnVjdCB7Ci0gIC8qIEJhc2ljIHRhYmxlczogKGVsZW1lbnQgWzBdIG9mIGVhY2ggYXJyYXkgaXMgdW51c2VkKSAqLwotICBJTlQzMiBtYXhjb2RlWzE4XTsJCS8qIGxhcmdlc3QgY29kZSBvZiBsZW5ndGggayAoLTEgaWYgbm9uZSkgKi8KLSAgLyogKG1heGNvZGVbMTddIGlzIGEgc2VudGluZWwgdG8gZW5zdXJlIGpwZWdfaHVmZl9kZWNvZGUgdGVybWluYXRlcykgKi8KLSAgSU5UMzIgdmFsb2Zmc2V0WzE3XTsJCS8qIGh1ZmZ2YWxbXSBvZmZzZXQgZm9yIGNvZGVzIG9mIGxlbmd0aCBrICovCi0gIC8qIHZhbG9mZnNldFtrXSA9IGh1ZmZ2YWxbXSBpbmRleCBvZiAxc3Qgc3ltYm9sIG9mIGNvZGUgbGVuZ3RoIGssIGxlc3MKLSAgICogdGhlIHNtYWxsZXN0IGNvZGUgb2YgbGVuZ3RoIGs7IHNvIGdpdmVuIGEgY29kZSBvZiBsZW5ndGggaywgdGhlCi0gICAqIGNvcnJlc3BvbmRpbmcgc3ltYm9sIGlzIGh1ZmZ2YWxbY29kZSArIHZhbG9mZnNldFtrXV0KLSAgICovCi0KLSAgLyogTGluayB0byBwdWJsaWMgSHVmZm1hbiB0YWJsZSAobmVlZGVkIG9ubHkgaW4ganBlZ19odWZmX2RlY29kZSkgKi8KLSAgSkhVRkZfVEJMICpwdWI7Ci0KLSAgLyogTG9va2FoZWFkIHRhYmxlczogaW5kZXhlZCBieSB0aGUgbmV4dCBIVUZGX0xPT0tBSEVBRCBiaXRzIG9mCi0gICAqIHRoZSBpbnB1dCBkYXRhIHN0cmVhbS4gIElmIHRoZSBuZXh0IEh1ZmZtYW4gY29kZSBpcyBubyBtb3JlCi0gICAqIHRoYW4gSFVGRl9MT09LQUhFQUQgYml0cyBsb25nLCB3ZSBjYW4gb2J0YWluIGl0cyBsZW5ndGggYW5kCi0gICAqIHRoZSBjb3JyZXNwb25kaW5nIHN5bWJvbCBkaXJlY3RseSBmcm9tIHRoZXNlIHRhYmxlcy4KLSAgICovCi0gIGludCBsb29rX25iaXRzWzE8PEhVRkZfTE9PS0FIRUFEXTsgLyogIyBiaXRzLCBvciAwIGlmIHRvbyBsb25nICovCi0gIFVJTlQ4IGxvb2tfc3ltWzE8PEhVRkZfTE9PS0FIRUFEXTsgLyogc3ltYm9sLCBvciB1bnVzZWQgKi8KLX0gZF9kZXJpdmVkX3RibDsKLQotCi0vKgotICogRmV0Y2hpbmcgdGhlIG5leHQgTiBiaXRzIGZyb20gdGhlIGlucHV0IHN0cmVhbSBpcyBhIHRpbWUtY3JpdGljYWwgb3BlcmF0aW9uCi0gKiBmb3IgdGhlIEh1ZmZtYW4gZGVjb2RlcnMuICBXZSBpbXBsZW1lbnQgaXQgd2l0aCBhIGNvbWJpbmF0aW9uIG9mIGlubGluZQotICogbWFjcm9zIGFuZCBvdXQtb2YtbGluZSBzdWJyb3V0aW5lcy4gIE5vdGUgdGhhdCBOICh0aGUgbnVtYmVyIG9mIGJpdHMKLSAqIGRlbWFuZGVkIGF0IG9uZSB0aW1lKSBuZXZlciBleGNlZWRzIDE1IGZvciBKUEVHIHVzZS4KLSAqCi0gKiBXZSByZWFkIHNvdXJjZSBieXRlcyBpbnRvIGdldF9idWZmZXIgYW5kIGRvbGUgb3V0IGJpdHMgYXMgbmVlZGVkLgotICogSWYgZ2V0X2J1ZmZlciBhbHJlYWR5IGNvbnRhaW5zIGVub3VnaCBiaXRzLCB0aGV5IGFyZSBmZXRjaGVkIGluLWxpbmUKLSAqIGJ5IHRoZSBtYWNyb3MgQ0hFQ0tfQklUX0JVRkZFUiBhbmQgR0VUX0JJVFMuICBXaGVuIHRoZXJlIGFyZW4ndCBlbm91Z2gKLSAqIGJpdHMsIGpwZWdfZmlsbF9iaXRfYnVmZmVyIGlzIGNhbGxlZDsgaXQgd2lsbCBhdHRlbXB0IHRvIGZpbGwgZ2V0X2J1ZmZlcgotICogYXMgZnVsbCBhcyBwb3NzaWJsZSAobm90IGp1c3QgdG8gdGhlIG51bWJlciBvZiBiaXRzIG5lZWRlZDsgdGhpcwotICogcHJlZmV0Y2hpbmcgcmVkdWNlcyB0aGUgb3ZlcmhlYWQgY29zdCBvZiBjYWxsaW5nIGpwZWdfZmlsbF9iaXRfYnVmZmVyKS4KLSAqIE5vdGUgdGhhdCBqcGVnX2ZpbGxfYml0X2J1ZmZlciBtYXkgcmV0dXJuIEZBTFNFIHRvIGluZGljYXRlIHN1c3BlbnNpb24uCi0gKiBPbiBUUlVFIHJldHVybiwganBlZ19maWxsX2JpdF9idWZmZXIgZ3VhcmFudGVlcyB0aGF0IGdldF9idWZmZXIgY29udGFpbnMKLSAqIGF0IGxlYXN0IHRoZSByZXF1ZXN0ZWQgbnVtYmVyIG9mIGJpdHMgLS0tIGR1bW15IHplcm9lcyBhcmUgaW5zZXJ0ZWQgaWYKLSAqIG5lY2Vzc2FyeS4KLSAqLwotCi10eXBlZGVmIElOVDMyIGJpdF9idWZfdHlwZTsJLyogdHlwZSBvZiBiaXQtZXh0cmFjdGlvbiBidWZmZXIgKi8KLSNkZWZpbmUgQklUX0JVRl9TSVpFICAzMgkvKiBzaXplIG9mIGJ1ZmZlciBpbiBiaXRzICovCi0KLS8qIElmIGxvbmcgaXMgPiAzMiBiaXRzIG9uIHlvdXIgbWFjaGluZSwgYW5kIHNoaWZ0aW5nL21hc2tpbmcgbG9uZ3MgaXMKLSAqIHJlYXNvbmFibHkgZmFzdCwgbWFraW5nIGJpdF9idWZfdHlwZSBiZSBsb25nIGFuZCBzZXR0aW5nIEJJVF9CVUZfU0laRQotICogYXBwcm9wcmlhdGVseSBzaG91bGQgYmUgYSB3aW4uICBVbmZvcnR1bmF0ZWx5IHdlIGNhbid0IGRlZmluZSB0aGUgc2l6ZQotICogd2l0aCBzb21ldGhpbmcgbGlrZSAgI2RlZmluZSBCSVRfQlVGX1NJWkUgKHNpemVvZihiaXRfYnVmX3R5cGUpKjgpCi0gKiBiZWNhdXNlIG5vdCBhbGwgbWFjaGluZXMgbWVhc3VyZSBzaXplb2YgaW4gOC1iaXQgYnl0ZXMuCi0gKi8KLQotdHlwZWRlZiBzdHJ1Y3QgewkJLyogQml0cmVhZGluZyBzdGF0ZSBzYXZlZCBhY3Jvc3MgTUNVcyAqLwotICBiaXRfYnVmX3R5cGUgZ2V0X2J1ZmZlcjsJLyogY3VycmVudCBiaXQtZXh0cmFjdGlvbiBidWZmZXIgKi8KLSAgaW50IGJpdHNfbGVmdDsJCS8qICMgb2YgdW51c2VkIGJpdHMgaW4gaXQgKi8KLX0gYml0cmVhZF9wZXJtX3N0YXRlOwotCi10eXBlZGVmIHN0cnVjdCB7CQkvKiBCaXRyZWFkaW5nIHdvcmtpbmcgc3RhdGUgd2l0aGluIGFuIE1DVSAqLwotICAvKiBDdXJyZW50IGRhdGEgc291cmNlIGxvY2F0aW9uICovCi0gIC8qIFdlIG5lZWQgYSBjb3B5LCByYXRoZXIgdGhhbiBtdW5naW5nIHRoZSBvcmlnaW5hbCwgaW4gY2FzZSBvZiBzdXNwZW5zaW9uICovCi0gIGNvbnN0IEpPQ1RFVCAqIG5leHRfaW5wdXRfYnl0ZTsgLyogPT4gbmV4dCBieXRlIHRvIHJlYWQgZnJvbSBzb3VyY2UgKi8KLSAgc2l6ZV90IGJ5dGVzX2luX2J1ZmZlcjsJLyogIyBvZiBieXRlcyByZW1haW5pbmcgaW4gc291cmNlIGJ1ZmZlciAqLwotICAvKiBCaXQgaW5wdXQgYnVmZmVyIC0tLSBub3RlIHRoZXNlIHZhbHVlcyBhcmUga2VwdCBpbiByZWdpc3RlciB2YXJpYWJsZXMsCi0gICAqIG5vdCBpbiB0aGlzIHN0cnVjdCwgaW5zaWRlIHRoZSBpbm5lciBsb29wcy4KLSAgICovCi0gIGJpdF9idWZfdHlwZSBnZXRfYnVmZmVyOwkvKiBjdXJyZW50IGJpdC1leHRyYWN0aW9uIGJ1ZmZlciAqLwotICBpbnQgYml0c19sZWZ0OwkJLyogIyBvZiB1bnVzZWQgYml0cyBpbiBpdCAqLwotICAvKiBQb2ludGVyIG5lZWRlZCBieSBqcGVnX2ZpbGxfYml0X2J1ZmZlci4gKi8KLSAgal9kZWNvbXByZXNzX3B0ciBjaW5mbzsJLyogYmFjayBsaW5rIHRvIGRlY29tcHJlc3MgbWFzdGVyIHJlY29yZCAqLwotfSBiaXRyZWFkX3dvcmtpbmdfc3RhdGU7Ci0KLS8qIE1hY3JvcyB0byBkZWNsYXJlIGFuZCBsb2FkL3NhdmUgYml0cmVhZCBsb2NhbCB2YXJpYWJsZXMuICovCi0jZGVmaW5lIEJJVFJFQURfU1RBVEVfVkFSUyAgXAotCXJlZ2lzdGVyIGJpdF9idWZfdHlwZSBnZXRfYnVmZmVyOyAgXAotCXJlZ2lzdGVyIGludCBiaXRzX2xlZnQ7ICBcCi0JYml0cmVhZF93b3JraW5nX3N0YXRlIGJyX3N0YXRlCi0KLSNkZWZpbmUgQklUUkVBRF9MT0FEX1NUQVRFKGNpbmZvcCxwZXJtc3RhdGUpICBcCi0JYnJfc3RhdGUuY2luZm8gPSBjaW5mb3A7IFwKLQlicl9zdGF0ZS5uZXh0X2lucHV0X2J5dGUgPSBjaW5mb3AtPnNyYy0+bmV4dF9pbnB1dF9ieXRlOyBcCi0JYnJfc3RhdGUuYnl0ZXNfaW5fYnVmZmVyID0gY2luZm9wLT5zcmMtPmJ5dGVzX2luX2J1ZmZlcjsgXAotCWdldF9idWZmZXIgPSBwZXJtc3RhdGUuZ2V0X2J1ZmZlcjsgXAotCWJpdHNfbGVmdCA9IHBlcm1zdGF0ZS5iaXRzX2xlZnQ7Ci0KLSNkZWZpbmUgQklUUkVBRF9TQVZFX1NUQVRFKGNpbmZvcCxwZXJtc3RhdGUpICBcCi0JY2luZm9wLT5zcmMtPm5leHRfaW5wdXRfYnl0ZSA9IGJyX3N0YXRlLm5leHRfaW5wdXRfYnl0ZTsgXAotCWNpbmZvcC0+c3JjLT5ieXRlc19pbl9idWZmZXIgPSBicl9zdGF0ZS5ieXRlc19pbl9idWZmZXI7IFwKLQlwZXJtc3RhdGUuZ2V0X2J1ZmZlciA9IGdldF9idWZmZXI7IFwKLQlwZXJtc3RhdGUuYml0c19sZWZ0ID0gYml0c19sZWZ0Ci0KLS8qCi0gKiBUaGVzZSBtYWNyb3MgcHJvdmlkZSB0aGUgaW4tbGluZSBwb3J0aW9uIG9mIGJpdCBmZXRjaGluZy4KLSAqIFVzZSBDSEVDS19CSVRfQlVGRkVSIHRvIGVuc3VyZSB0aGVyZSBhcmUgTiBiaXRzIGluIGdldF9idWZmZXIKLSAqIGJlZm9yZSB1c2luZyBHRVRfQklUUywgUEVFS19CSVRTLCBvciBEUk9QX0JJVFMuCi0gKiBUaGUgdmFyaWFibGVzIGdldF9idWZmZXIgYW5kIGJpdHNfbGVmdCBhcmUgYXNzdW1lZCB0byBiZSBsb2NhbHMsCi0gKiBidXQgdGhlIHN0YXRlIHN0cnVjdCBtaWdodCBub3QgYmUgKGpwZWdfaHVmZl9kZWNvZGUgbmVlZHMgdGhpcykuCi0gKglDSEVDS19CSVRfQlVGRkVSKHN0YXRlLG4sYWN0aW9uKTsKLSAqCQlFbnN1cmUgdGhlcmUgYXJlIE4gYml0cyBpbiBnZXRfYnVmZmVyOyBpZiBzdXNwZW5kLCB0YWtlIGFjdGlvbi4KLSAqICAgICAgdmFsID0gR0VUX0JJVFMobik7Ci0gKgkJRmV0Y2ggbmV4dCBOIGJpdHMuCi0gKiAgICAgIHZhbCA9IFBFRUtfQklUUyhuKTsKLSAqCQlGZXRjaCBuZXh0IE4gYml0cyB3aXRob3V0IHJlbW92aW5nIHRoZW0gZnJvbSB0aGUgYnVmZmVyLgotICoJRFJPUF9CSVRTKG4pOwotICoJCURpc2NhcmQgbmV4dCBOIGJpdHMuCi0gKiBUaGUgdmFsdWUgTiBzaG91bGQgYmUgYSBzaW1wbGUgdmFyaWFibGUsIG5vdCBhbiBleHByZXNzaW9uLCBiZWNhdXNlIGl0Ci0gKiBpcyBldmFsdWF0ZWQgbXVsdGlwbGUgdGltZXMuCi0gKi8KLQotI2RlZmluZSBDSEVDS19CSVRfQlVGRkVSKHN0YXRlLG5iaXRzLGFjdGlvbikgXAotCXsgaWYgKGJpdHNfbGVmdCA8IChuYml0cykpIHsgIFwKLQkgICAgaWYgKCEganBlZ19maWxsX2JpdF9idWZmZXIoJihzdGF0ZSksZ2V0X2J1ZmZlcixiaXRzX2xlZnQsbmJpdHMpKSAgXAotCSAgICAgIHsgYWN0aW9uOyB9ICBcCi0JICAgIGdldF9idWZmZXIgPSAoc3RhdGUpLmdldF9idWZmZXI7IGJpdHNfbGVmdCA9IChzdGF0ZSkuYml0c19sZWZ0OyB9IH0KLQotI2RlZmluZSBHRVRfQklUUyhuYml0cykgXAotCSgoKGludCkgKGdldF9idWZmZXIgPj4gKGJpdHNfbGVmdCAtPSAobmJpdHMpKSkpICYgQklUX01BU0sobmJpdHMpKQotCi0jZGVmaW5lIFBFRUtfQklUUyhuYml0cykgXAotCSgoKGludCkgKGdldF9idWZmZXIgPj4gKGJpdHNfbGVmdCAtICAobmJpdHMpKSkpICYgQklUX01BU0sobmJpdHMpKQotCi0jZGVmaW5lIERST1BfQklUUyhuYml0cykgXAotCShiaXRzX2xlZnQgLT0gKG5iaXRzKSkKLQotCi0vKgotICogQ29kZSBmb3IgZXh0cmFjdGluZyBuZXh0IEh1ZmZtYW4tY29kZWQgc3ltYm9sIGZyb20gaW5wdXQgYml0IHN0cmVhbS4KLSAqIEFnYWluLCB0aGlzIGlzIHRpbWUtY3JpdGljYWwgYW5kIHdlIG1ha2UgdGhlIG1haW4gcGF0aHMgYmUgbWFjcm9zLgotICoKLSAqIFdlIHVzZSBhIGxvb2thaGVhZCB0YWJsZSB0byBwcm9jZXNzIGNvZGVzIG9mIHVwIHRvIEhVRkZfTE9PS0FIRUFEIGJpdHMKLSAqIHdpdGhvdXQgbG9vcGluZy4gIFVzdWFsbHksIG1vcmUgdGhhbiA5NSUgb2YgdGhlIEh1ZmZtYW4gY29kZXMgd2lsbCBiZSA4Ci0gKiBvciBmZXdlciBiaXRzIGxvbmcuICBUaGUgZmV3IG92ZXJsZW5ndGggY29kZXMgYXJlIGhhbmRsZWQgd2l0aCBhIGxvb3AsCi0gKiB3aGljaCBuZWVkIG5vdCBiZSBpbmxpbmUgY29kZS4KLSAqCi0gKiBOb3RlcyBhYm91dCB0aGUgSFVGRl9ERUNPREUgbWFjcm86Ci0gKiAxLiBOZWFyIHRoZSBlbmQgb2YgdGhlIGRhdGEgc2VnbWVudCwgd2UgbWF5IGZhaWwgdG8gZ2V0IGVub3VnaCBiaXRzCi0gKiAgICBmb3IgYSBsb29rYWhlYWQuICBJbiB0aGF0IGNhc2UsIHdlIGRvIGl0IHRoZSBoYXJkIHdheS4KLSAqIDIuIElmIHRoZSBsb29rYWhlYWQgdGFibGUgY29udGFpbnMgbm8gZW50cnksIHRoZSBuZXh0IGNvZGUgbXVzdCBiZQotICogICAgbW9yZSB0aGFuIEhVRkZfTE9PS0FIRUFEIGJpdHMgbG9uZy4KLSAqIDMuIGpwZWdfaHVmZl9kZWNvZGUgcmV0dXJucyAtMSBpZiBmb3JjZWQgdG8gc3VzcGVuZC4KLSAqLwotCi0jZGVmaW5lIEhVRkZfREVDT0RFKHJlc3VsdCxzdGF0ZSxodGJsLGZhaWxhY3Rpb24sc2xvd2xhYmVsKSBcCi17IHJlZ2lzdGVyIGludCBuYiwgbG9vazsgXAotICBpZiAoYml0c19sZWZ0IDwgSFVGRl9MT09LQUhFQUQpIHsgXAotICAgIGlmICghIGpwZWdfZmlsbF9iaXRfYnVmZmVyKCZzdGF0ZSxnZXRfYnVmZmVyLGJpdHNfbGVmdCwgMCkpIHtmYWlsYWN0aW9uO30gXAotICAgIGdldF9idWZmZXIgPSBzdGF0ZS5nZXRfYnVmZmVyOyBiaXRzX2xlZnQgPSBzdGF0ZS5iaXRzX2xlZnQ7IFwKLSAgICBpZiAoYml0c19sZWZ0IDwgSFVGRl9MT09LQUhFQUQpIHsgXAotICAgICAgbmIgPSAxOyBnb3RvIHNsb3dsYWJlbDsgXAotICAgIH0gXAotICB9IFwKLSAgbG9vayA9IFBFRUtfQklUUyhIVUZGX0xPT0tBSEVBRCk7IFwKLSAgaWYgKChuYiA9IGh0YmwtPmxvb2tfbmJpdHNbbG9va10pICE9IDApIHsgXAotICAgIERST1BfQklUUyhuYik7IFwKLSAgICByZXN1bHQgPSBodGJsLT5sb29rX3N5bVtsb29rXTsgXAotICB9IGVsc2UgeyBcCi0gICAgbmIgPSBIVUZGX0xPT0tBSEVBRCsxOyBcCi1zbG93bGFiZWw6IFwKLSAgICBpZiAoKHJlc3VsdD1qcGVnX2h1ZmZfZGVjb2RlKCZzdGF0ZSxnZXRfYnVmZmVyLGJpdHNfbGVmdCxodGJsLG5iKSkgPCAwKSBcCi0JeyBmYWlsYWN0aW9uOyB9IFwKLSAgICBnZXRfYnVmZmVyID0gc3RhdGUuZ2V0X2J1ZmZlcjsgYml0c19sZWZ0ID0gc3RhdGUuYml0c19sZWZ0OyBcCi0gIH0gXAotfQorI2luY2x1ZGUgImpkaHVmZi5oIgkJLyogRGVjbGFyYXRpb25zIHNoYXJlZCB3aXRoIGpkcGh1ZmYuYyAqLworI2luY2x1ZGUgImpwZWdjb21wLmgiCiAKIAogLyoKQEAgLTE5Niw4ICs0NSw3IEBACiAgKi8KIAogdHlwZWRlZiBzdHJ1Y3QgewotICB1bnNpZ25lZCBpbnQgRU9CUlVOOwkJCS8qIHJlbWFpbmluZyBFT0JzIGluIEVPQlJVTiAqLwotICBpbnQgbGFzdF9kY192YWxbTUFYX0NPTVBTX0lOX1NDQU5dOwkvKiBsYXN0IERDIGNvZWYgZm9yIGVhY2ggY29tcG9uZW50ICovCisgIGludCBsYXN0X2RjX3ZhbFtNQVhfQ09NUFNfSU5fU0NBTl07IC8qIGxhc3QgREMgY29lZiBmb3IgZWFjaCBjb21wb25lbnQgKi8KIH0gc2F2YWJsZV9zdGF0ZTsKIAogLyogVGhpcyBtYWNybyBpcyB0byB3b3JrIGFyb3VuZCBjb21waWxlcnMgd2l0aCBtaXNzaW5nIG9yIGJyb2tlbgpAQCAtMjEwLDggKzU4LDcgQEAKICNlbHNlCiAjaWYgTUFYX0NPTVBTX0lOX1NDQU4gPT0gNAogI2RlZmluZSBBU1NJR05fU1RBVEUoZGVzdCxzcmMpICBcCi0JKChkZXN0KS5FT0JSVU4gPSAoc3JjKS5FT0JSVU4sIFwKLQkgKGRlc3QpLmxhc3RfZGNfdmFsWzBdID0gKHNyYykubGFzdF9kY192YWxbMF0sIFwKKwkoKGRlc3QpLmxhc3RfZGNfdmFsWzBdID0gKHNyYykubGFzdF9kY192YWxbMF0sIFwKIAkgKGRlc3QpLmxhc3RfZGNfdmFsWzFdID0gKHNyYykubGFzdF9kY192YWxbMV0sIFwKIAkgKGRlc3QpLmxhc3RfZGNfdmFsWzJdID0gKHNyYykubGFzdF9kY192YWxbMl0sIFwKIAkgKGRlc3QpLmxhc3RfZGNfdmFsWzNdID0gKHNyYykubGFzdF9kY192YWxbM10pCkBAIC0yMjksMTggKzc2LDggQEAKICAgc2F2YWJsZV9zdGF0ZSBzYXZlZDsJCS8qIE90aGVyIHN0YXRlIGF0IHN0YXJ0IG9mIE1DVSAqLwogCiAgIC8qIFRoZXNlIGZpZWxkcyBhcmUgTk9UIGxvYWRlZCBpbnRvIGxvY2FsIHdvcmtpbmcgc3RhdGUuICovCi0gIGJvb2xlYW4gaW5zdWZmaWNpZW50X2RhdGE7CS8qIHNldCBUUlVFIGFmdGVyIGVtaXR0aW5nIHdhcm5pbmcgKi8KICAgdW5zaWduZWQgaW50IHJlc3RhcnRzX3RvX2dvOwkvKiBNQ1VzIGxlZnQgaW4gdGhpcyByZXN0YXJ0IGludGVydmFsICovCiAKLSAgLyogRm9sbG93aW5nIHR3byBmaWVsZHMgdXNlZCBvbmx5IGluIHByb2dyZXNzaXZlIG1vZGUgKi8KLQotICAvKiBQb2ludGVycyB0byBkZXJpdmVkIHRhYmxlcyAodGhlc2Ugd29ya3NwYWNlcyBoYXZlIGltYWdlIGxpZmVzcGFuKSAqLwotICBkX2Rlcml2ZWRfdGJsICogZGVyaXZlZF90YmxzW05VTV9IVUZGX1RCTFNdOwotCi0gIGRfZGVyaXZlZF90YmwgKiBhY19kZXJpdmVkX3RibDsgLyogYWN0aXZlIHRhYmxlIGR1cmluZyBhbiBBQyBzY2FuICovCi0KLSAgLyogRm9sbG93aW5nIGZpZWxkcyB1c2VkIG9ubHkgaW4gc2VxdWVudGlhbCBtb2RlICovCi0KICAgLyogUG9pbnRlcnMgdG8gZGVyaXZlZCB0YWJsZXMgKHRoZXNlIHdvcmtzcGFjZXMgaGF2ZSBpbWFnZSBsaWZlc3BhbikgKi8KICAgZF9kZXJpdmVkX3RibCAqIGRjX2Rlcml2ZWRfdGJsc1tOVU1fSFVGRl9UQkxTXTsKICAgZF9kZXJpdmVkX3RibCAqIGFjX2Rlcml2ZWRfdGJsc1tOVU1fSFVGRl9UQkxTXTsKQEAgLTI1MSw3NSArODgsODEgQEAKICAgZF9kZXJpdmVkX3RibCAqIGRjX2N1cl90YmxzW0RfTUFYX0JMT0NLU19JTl9NQ1VdOwogICBkX2Rlcml2ZWRfdGJsICogYWNfY3VyX3RibHNbRF9NQVhfQkxPQ0tTX0lOX01DVV07CiAgIC8qIFdoZXRoZXIgd2UgY2FyZSBhYm91dCB0aGUgREMgYW5kIEFDIGNvZWZmaWNpZW50IHZhbHVlcyBmb3IgZWFjaCBibG9jayAqLwotICBpbnQgY29lZl9saW1pdFtEX01BWF9CTE9DS1NfSU5fTUNVXTsKKyAgYm9vbGVhbiBkY19uZWVkZWRbRF9NQVhfQkxPQ0tTX0lOX01DVV07CisgIGJvb2xlYW4gYWNfbmVlZGVkW0RfTUFYX0JMT0NLU19JTl9NQ1VdOwogfSBodWZmX2VudHJvcHlfZGVjb2RlcjsKIAogdHlwZWRlZiBodWZmX2VudHJvcHlfZGVjb2RlciAqIGh1ZmZfZW50cm9weV9wdHI7CiAKIAotc3RhdGljIGNvbnN0IGludCBqcGVnX3ppZ3phZ19vcmRlcls4XVs4XSA9IHsKLSAgeyAgMCwgIDEsICA1LCAgNiwgMTQsIDE1LCAyNywgMjggfSwKLSAgeyAgMiwgIDQsICA3LCAxMywgMTYsIDI2LCAyOSwgNDIgfSwKLSAgeyAgMywgIDgsIDEyLCAxNywgMjUsIDMwLCA0MSwgNDMgfSwKLSAgeyAgOSwgMTEsIDE4LCAyNCwgMzEsIDQwLCA0NCwgNTMgfSwKLSAgeyAxMCwgMTksIDIzLCAzMiwgMzksIDQ1LCA1MiwgNTQgfSwKLSAgeyAyMCwgMjIsIDMzLCAzOCwgNDYsIDUxLCA1NSwgNjAgfSwKLSAgeyAyMSwgMzQsIDM3LCA0NywgNTAsIDU2LCA1OSwgNjEgfSwKLSAgeyAzNSwgMzYsIDQ4LCA0OSwgNTcsIDU4LCA2MiwgNjMgfQotfTsKKy8qCisgKiBJbml0aWFsaXplIGZvciBhIEh1ZmZtYW4tY29tcHJlc3NlZCBzY2FuLgorICovCiAKLXN0YXRpYyBjb25zdCBpbnQganBlZ196aWd6YWdfb3JkZXI3WzddWzddID0gewotICB7ICAwLCAgMSwgIDUsICA2LCAxNCwgMTUsIDI3IH0sCi0gIHsgIDIsICA0LCAgNywgMTMsIDE2LCAyNiwgMjggfSwKLSAgeyAgMywgIDgsIDEyLCAxNywgMjUsIDI5LCAzOCB9LAotICB7ICA5LCAxMSwgMTgsIDI0LCAzMCwgMzcsIDM5IH0sCi0gIHsgMTAsIDE5LCAyMywgMzEsIDM2LCA0MCwgNDUgfSwKLSAgeyAyMCwgMjIsIDMyLCAzNSwgNDEsIDQ0LCA0NiB9LAotICB7IDIxLCAzMywgMzQsIDQyLCA0MywgNDcsIDQ4IH0KLX07CitNRVRIT0RERUYodm9pZCkKK3N0YXJ0X3Bhc3NfaHVmZl9kZWNvZGVyIChqX2RlY29tcHJlc3NfcHRyIGNpbmZvKQoreworICBodWZmX2VudHJvcHlfcHRyIGVudHJvcHkgPSAoaHVmZl9lbnRyb3B5X3B0cikgY2luZm8tPmVudHJvcHk7CisgIGludCBjaSwgYmxrbiwgZGN0YmwsIGFjdGJsOworICBqcGVnX2NvbXBvbmVudF9pbmZvICogY29tcHB0cjsKIAotc3RhdGljIGNvbnN0IGludCBqcGVnX3ppZ3phZ19vcmRlcjZbNl1bNl0gPSB7Ci0gIHsgIDAsICAxLCAgNSwgIDYsIDE0LCAxNSB9LAotICB7ICAyLCAgNCwgIDcsIDEzLCAxNiwgMjUgfSwKLSAgeyAgMywgIDgsIDEyLCAxNywgMjQsIDI2IH0sCi0gIHsgIDksIDExLCAxOCwgMjMsIDI3LCAzMiB9LAotICB7IDEwLCAxOSwgMjIsIDI4LCAzMSwgMzMgfSwKLSAgeyAyMCwgMjEsIDI5LCAzMCwgMzQsIDM1IH0KLX07CisgIC8qIENoZWNrIHRoYXQgdGhlIHNjYW4gcGFyYW1ldGVycyBTcywgU2UsIEFoL0FsIGFyZSBPSyBmb3Igc2VxdWVudGlhbCBKUEVHLgorICAgKiBUaGlzIG91Z2h0IHRvIGJlIGFuIGVycm9yIGNvbmRpdGlvbiwgYnV0IHdlIG1ha2UgaXQgYSB3YXJuaW5nIGJlY2F1c2UKKyAgICogdGhlcmUgYXJlIHNvbWUgYmFzZWxpbmUgZmlsZXMgb3V0IHRoZXJlIHdpdGggYWxsIHplcm9lcyBpbiB0aGVzZSBieXRlcy4KKyAgICovCisgIGlmIChjaW5mby0+U3MgIT0gMCB8fCBjaW5mby0+U2UgIT0gRENUU0laRTItMSB8fAorICAgICAgY2luZm8tPkFoICE9IDAgfHwgY2luZm8tPkFsICE9IDApCisgICAgV0FSTk1TKGNpbmZvLCBKV1JOX05PVF9TRVFVRU5USUFMKTsKIAotc3RhdGljIGNvbnN0IGludCBqcGVnX3ppZ3phZ19vcmRlcjVbNV1bNV0gPSB7Ci0gIHsgIDAsICAxLCAgNSwgIDYsIDE0IH0sCi0gIHsgIDIsICA0LCAgNywgMTMsIDE1IH0sCi0gIHsgIDMsICA4LCAxMiwgMTYsIDIxIH0sCi0gIHsgIDksIDExLCAxNywgMjAsIDIyIH0sCi0gIHsgMTAsIDE4LCAxOSwgMjMsIDI0IH0KLX07CisgIGZvciAoY2kgPSAwOyBjaSA8IGNpbmZvLT5jb21wc19pbl9zY2FuOyBjaSsrKSB7CisgICAgY29tcHB0ciA9IGNpbmZvLT5jdXJfY29tcF9pbmZvW2NpXTsKKyAgICBkY3RibCA9IGNvbXBwdHItPmRjX3RibF9ubzsKKyAgICBhY3RibCA9IGNvbXBwdHItPmFjX3RibF9ubzsKKyAgICAvKiBDb21wdXRlIGRlcml2ZWQgdmFsdWVzIGZvciBIdWZmbWFuIHRhYmxlcyAqLworICAgIC8qIFdlIG1heSBkbyB0aGlzIG1vcmUgdGhhbiBvbmNlIGZvciBhIHRhYmxlLCBidXQgaXQncyBub3QgZXhwZW5zaXZlICovCisgICAganBlZ19tYWtlX2RfZGVyaXZlZF90YmwoY2luZm8sIFRSVUUsIGRjdGJsLAorCQkJICAgICYgZW50cm9weS0+ZGNfZGVyaXZlZF90YmxzW2RjdGJsXSk7CisgICAganBlZ19tYWtlX2RfZGVyaXZlZF90YmwoY2luZm8sIEZBTFNFLCBhY3RibCwKKwkJCSAgICAmIGVudHJvcHktPmFjX2Rlcml2ZWRfdGJsc1thY3RibF0pOworICAgIC8qIEluaXRpYWxpemUgREMgcHJlZGljdGlvbnMgdG8gMCAqLworICAgIGVudHJvcHktPnNhdmVkLmxhc3RfZGNfdmFsW2NpXSA9IDA7CisgIH0KIAotc3RhdGljIGNvbnN0IGludCBqcGVnX3ppZ3phZ19vcmRlcjRbNF1bNF0gPSB7Ci0gIHsgMCwgIDEsICA1LCAgNiB9LAotICB7IDIsICA0LCAgNywgMTIgfSwKLSAgeyAzLCAgOCwgMTEsIDEzIH0sCi0gIHsgOSwgMTAsIDE0LCAxNSB9Ci19OworICAvKiBQcmVjYWxjdWxhdGUgZGVjb2RpbmcgaW5mbyBmb3IgZWFjaCBibG9jayBpbiBhbiBNQ1Ugb2YgdGhpcyBzY2FuICovCisgIGZvciAoYmxrbiA9IDA7IGJsa24gPCBjaW5mby0+YmxvY2tzX2luX01DVTsgYmxrbisrKSB7CisgICAgY2kgPSBjaW5mby0+TUNVX21lbWJlcnNoaXBbYmxrbl07CisgICAgY29tcHB0ciA9IGNpbmZvLT5jdXJfY29tcF9pbmZvW2NpXTsKKyAgICAvKiBQcmVjYWxjdWxhdGUgd2hpY2ggdGFibGUgdG8gdXNlIGZvciBlYWNoIGJsb2NrICovCisgICAgZW50cm9weS0+ZGNfY3VyX3RibHNbYmxrbl0gPSBlbnRyb3B5LT5kY19kZXJpdmVkX3RibHNbY29tcHB0ci0+ZGNfdGJsX25vXTsKKyAgICBlbnRyb3B5LT5hY19jdXJfdGJsc1tibGtuXSA9IGVudHJvcHktPmFjX2Rlcml2ZWRfdGJsc1tjb21wcHRyLT5hY190Ymxfbm9dOworICAgIC8qIERlY2lkZSB3aGV0aGVyIHdlIHJlYWxseSBjYXJlIGFib3V0IHRoZSBjb2VmZmljaWVudCB2YWx1ZXMgKi8KKyAgICBpZiAoY29tcHB0ci0+Y29tcG9uZW50X25lZWRlZCkgeworICAgICAgZW50cm9weS0+ZGNfbmVlZGVkW2Jsa25dID0gVFJVRTsKKyAgICAgIC8qIHdlIGRvbid0IG5lZWQgdGhlIEFDcyBpZiBwcm9kdWNpbmcgYSAxLzh0aC1zaXplIGltYWdlICovCisgICAgICBlbnRyb3B5LT5hY19uZWVkZWRbYmxrbl0gPSAoY29tcHB0ci0+X0RDVF9zY2FsZWRfc2l6ZSA+IDEpOworICAgIH0gZWxzZSB7CisgICAgICBlbnRyb3B5LT5kY19uZWVkZWRbYmxrbl0gPSBlbnRyb3B5LT5hY19uZWVkZWRbYmxrbl0gPSBGQUxTRTsKKyAgICB9CisgIH0KIAotc3RhdGljIGNvbnN0IGludCBqcGVnX3ppZ3phZ19vcmRlcjNbM11bM10gPSB7Ci0gIHsgMCwgMSwgNSB9LAotICB7IDIsIDQsIDYgfSwKLSAgeyAzLCA3LCA4IH0KLX07CisgIC8qIEluaXRpYWxpemUgYml0cmVhZCBzdGF0ZSB2YXJpYWJsZXMgKi8KKyAgZW50cm9weS0+Yml0c3RhdGUuYml0c19sZWZ0ID0gMDsKKyAgZW50cm9weS0+Yml0c3RhdGUuZ2V0X2J1ZmZlciA9IDA7IC8qIHVubmVjZXNzYXJ5LCBidXQga2VlcHMgUHVyaWZ5IHF1aWV0ICovCisgIGVudHJvcHktPnB1Yi5pbnN1ZmZpY2llbnRfZGF0YSA9IEZBTFNFOwogCi1zdGF0aWMgY29uc3QgaW50IGpwZWdfemlnemFnX29yZGVyMlsyXVsyXSA9IHsKLSAgeyAwLCAxIH0sCi0gIHsgMiwgMyB9Ci19OworICAvKiBJbml0aWFsaXplIHJlc3RhcnQgY291bnRlciAqLworICBlbnRyb3B5LT5yZXN0YXJ0c190b19nbyA9IGNpbmZvLT5yZXN0YXJ0X2ludGVydmFsOworfQogCiAKIC8qCiAgKiBDb21wdXRlIHRoZSBkZXJpdmVkIHZhbHVlcyBmb3IgYSBIdWZmbWFuIHRhYmxlLgogICogVGhpcyByb3V0aW5lIGFsc28gcGVyZm9ybXMgc29tZSB2YWxpZGF0aW9uIGNoZWNrcyBvbiB0aGUgdGFibGUuCisgKgorICogTm90ZSB0aGlzIGlzIGFsc28gdXNlZCBieSBqZHBodWZmLmMuCiAgKi8KIAotTE9DQUwodm9pZCkKK0dMT0JBTCh2b2lkKQoganBlZ19tYWtlX2RfZGVyaXZlZF90YmwgKGpfZGVjb21wcmVzc19wdHIgY2luZm8sIGJvb2xlYW4gaXNEQywgaW50IHRibG5vLAogCQkJIGRfZGVyaXZlZF90YmwgKiogcGR0YmwpCiB7CkBAIC0zOTksNiArMjQyLDcgQEAKICAgICAgIGR0YmwtPm1heGNvZGVbbF0gPSAtMTsJLyogLTEgaWYgbm8gY29kZXMgb2YgdGhpcyBsZW5ndGggKi8KICAgICB9CiAgIH0KKyAgZHRibC0+dmFsb2Zmc2V0WzE3XSA9IDA7CiAgIGR0YmwtPm1heGNvZGVbMTddID0gMHhGRkZGRkw7IC8qIGVuc3VyZXMganBlZ19odWZmX2RlY29kZSB0ZXJtaW5hdGVzICovCiAKICAgLyogQ29tcHV0ZSBsb29rYWhlYWQgdGFibGVzIHRvIHNwZWVkIHVwIGRlY29kaW5nLgpAQCAtNDA4LDcgKzI1Miw4IEBACiAgICAqIHdpdGggdGhhdCBjb2RlLgogICAgKi8KIAotICBNRU1aRVJPKGR0YmwtPmxvb2tfbmJpdHMsIFNJWkVPRihkdGJsLT5sb29rX25iaXRzKSk7CisgICBmb3IgKGkgPSAwOyBpIDwgKDEgPDwgSFVGRl9MT09LQUhFQUQpOyBpKyspCisgICAgIGR0YmwtPmxvb2t1cFtpXSA9IChIVUZGX0xPT0tBSEVBRCArIDEpIDw8IEhVRkZfTE9PS0FIRUFEOwogCiAgIHAgPSAwOwogICBmb3IgKGwgPSAxOyBsIDw9IEhVRkZfTE9PS0FIRUFEOyBsKyspIHsKQEAgLTQxNyw4ICsyNjIsNyBAQAogICAgICAgLyogR2VuZXJhdGUgbGVmdC1qdXN0aWZpZWQgY29kZSBmb2xsb3dlZCBieSBhbGwgcG9zc2libGUgYml0IHNlcXVlbmNlcyAqLwogICAgICAgbG9va2JpdHMgPSBodWZmY29kZVtwXSA8PCAoSFVGRl9MT09LQUhFQUQtbCk7CiAgICAgICBmb3IgKGN0ciA9IDEgPDwgKEhVRkZfTE9PS0FIRUFELWwpOyBjdHIgPiAwOyBjdHItLSkgewotCWR0YmwtPmxvb2tfbmJpdHNbbG9va2JpdHNdID0gbDsKLQlkdGJsLT5sb29rX3N5bVtsb29rYml0c10gPSBodGJsLT5odWZmdmFsW3BdOworCWR0YmwtPmxvb2t1cFtsb29rYml0c10gPSAobCA8PCBIVUZGX0xPT0tBSEVBRCkgfCBodGJsLT5odWZmdmFsW3BdOwogCWxvb2tiaXRzKys7CiAgICAgICB9CiAgICAgfQpAQCAtNDQxLDcgKzI4NSw4IEBACiAKIAogLyoKLSAqIE91dC1vZi1saW5lIGNvZGUgZm9yIGJpdCBmZXRjaGluZy4KKyAqIE91dC1vZi1saW5lIGNvZGUgZm9yIGJpdCBmZXRjaGluZyAoc2hhcmVkIHdpdGggamRwaHVmZi5jKS4KKyAqIFNlZSBqZGh1ZmYuaCBmb3IgaW5mbyBhYm91dCB1c2FnZS4KICAqIE5vdGU6IGN1cnJlbnQgdmFsdWVzIG9mIGdldF9idWZmZXIgYW5kIGJpdHNfbGVmdCBhcmUgcGFzc2VkIGFzIHBhcmFtZXRlcnMsCiAgKiBidXQgYXJlIHJldHVybmVkIGluIHRoZSBjb3JyZXNwb25kaW5nIGZpZWxkcyBvZiB0aGUgc3RhdGUgc3RydWN0LgogICoKQEAgLTQ2MSw3ICszMDYsNyBAQAogI2VuZGlmCiAKIAotTE9DQUwoYm9vbGVhbikKK0dMT0JBTChib29sZWFuKQoganBlZ19maWxsX2JpdF9idWZmZXIgKGJpdHJlYWRfd29ya2luZ19zdGF0ZSAqIHN0YXRlLAogCQkgICAgICByZWdpc3RlciBiaXRfYnVmX3R5cGUgZ2V0X2J1ZmZlciwgcmVnaXN0ZXIgaW50IGJpdHNfbGVmdCwKIAkJICAgICAgaW50IG5iaXRzKQpAQCAtNTQyLDkgKzM4Nyw5IEBACiAgICAgICAgKiBXZSB1c2UgYSBub252b2xhdGlsZSBmbGFnIHRvIGVuc3VyZSB0aGF0IG9ubHkgb25lIHdhcm5pbmcgbWVzc2FnZQogICAgICAgICogYXBwZWFycyBwZXIgZGF0YSBzZWdtZW50LgogICAgICAgICovCi0gICAgICBpZiAoISAoKGh1ZmZfZW50cm9weV9wdHIpIGNpbmZvLT5lbnRyb3B5KS0+aW5zdWZmaWNpZW50X2RhdGEpIHsKKyAgICAgIGlmICghIGNpbmZvLT5lbnRyb3B5LT5pbnN1ZmZpY2llbnRfZGF0YSkgewogCVdBUk5NUyhjaW5mbywgSldSTl9ISVRfTUFSS0VSKTsKLQkoKGh1ZmZfZW50cm9weV9wdHIpIGNpbmZvLT5lbnRyb3B5KS0+aW5zdWZmaWNpZW50X2RhdGEgPSBUUlVFOworCWNpbmZvLT5lbnRyb3B5LT5pbnN1ZmZpY2llbnRfZGF0YSA9IFRSVUU7CiAgICAgICB9CiAgICAgICAvKiBGaWxsIHRoZSBidWZmZXIgd2l0aCB6ZXJvIGJpdHMgKi8KICAgICAgIGdldF9idWZmZXIgPDw9IE1JTl9HRVRfQklUUyAtIGJpdHNfbGVmdDsKQEAgLTU2MywzMiArNDA4LDExIEBACiAKIAogLyoKLSAqIEZpZ3VyZSBGLjEyOiBleHRlbmQgc2lnbiBiaXQuCi0gKiBPbiBzb21lIG1hY2hpbmVzLCBhIHNoaWZ0IGFuZCBzdWIgd2lsbCBiZSBmYXN0ZXIgdGhhbiBhIHRhYmxlIGxvb2t1cC4KLSAqLwotCi0jaWZkZWYgQVZPSURfVEFCTEVTCi0KLSNkZWZpbmUgQklUX01BU0sobmJpdHMpICAgKCgxPDwobmJpdHMpKS0xKQotI2RlZmluZSBIVUZGX0VYVEVORCh4LHMpICAoKHgpIDwgKDE8PCgocyktMSkpID8gKHgpIC0gKCgxPDwocykpLTEpIDogKHgpKQotCi0jZWxzZQotCi0jZGVmaW5lIEJJVF9NQVNLKG5iaXRzKSAgIGJtYXNrW25iaXRzXQotI2RlZmluZSBIVUZGX0VYVEVORCh4LHMpICAoKHgpIDw9IGJtYXNrWyhzKSAtIDFdID8gKHgpIC0gYm1hc2tbc10gOiAoeCkpCi0KLXN0YXRpYyBjb25zdCBpbnQgYm1hc2tbMTZdID0JLyogYm1hc2tbbl0gaXMgbWFzayBmb3IgbiByaWdodG1vc3QgYml0cyAqLwotICB7IDAsIDB4MDAwMSwgMHgwMDAzLCAweDAwMDcsIDB4MDAwRiwgMHgwMDFGLCAweDAwM0YsIDB4MDA3RiwgMHgwMEZGLAotICAgIDB4MDFGRiwgMHgwM0ZGLCAweDA3RkYsIDB4MEZGRiwgMHgxRkZGLCAweDNGRkYsIDB4N0ZGRiB9OwotCi0jZW5kaWYgLyogQVZPSURfVEFCTEVTICovCi0KLQotLyoKICAqIE91dC1vZi1saW5lIGNvZGUgZm9yIEh1ZmZtYW4gY29kZSBkZWNvZGluZy4KKyAqIFNlZSBqZGh1ZmYuaCBmb3IgaW5mbyBhYm91dCB1c2FnZS4KICAqLwogCi1MT0NBTChpbnQpCitHTE9CQUwoaW50KQoganBlZ19odWZmX2RlY29kZSAoYml0cmVhZF93b3JraW5nX3N0YXRlICogc3RhdGUsCiAJCSAgcmVnaXN0ZXIgYml0X2J1Zl90eXBlIGdldF9idWZmZXIsIHJlZ2lzdGVyIGludCBiaXRzX2xlZnQsCiAJCSAgZF9kZXJpdmVkX3RibCAqIGh0YmwsIGludCBtaW5fYml0cykKQEAgLTYyOCw2ICs0NTIsMzMgQEAKIAogCiAvKgorICogRmlndXJlIEYuMTI6IGV4dGVuZCBzaWduIGJpdC4KKyAqIE9uIHNvbWUgbWFjaGluZXMsIGEgc2hpZnQgYW5kIGFkZCB3aWxsIGJlIGZhc3RlciB0aGFuIGEgdGFibGUgbG9va3VwLgorICovCisKKyNkZWZpbmUgQVZPSURfVEFCTEVTCisjaWZkZWYgQVZPSURfVEFCTEVTCisKKyNkZWZpbmUgSFVGRl9FWFRFTkQoeCxzKSAgKCh4KSArICgoKCh4KSAtICgxPDwoKHMpLTEpKSkgPj4gMzEpICYgKCgoLTEpPDwocykpICsgMSkpKQorCisjZWxzZQorCisjZGVmaW5lIEhVRkZfRVhURU5EKHgscykgICgoeCkgPCBleHRlbmRfdGVzdFtzXSA/ICh4KSArIGV4dGVuZF9vZmZzZXRbc10gOiAoeCkpCisKK3N0YXRpYyBjb25zdCBpbnQgZXh0ZW5kX3Rlc3RbMTZdID0gICAvKiBlbnRyeSBuIGlzIDIqKihuLTEpICovCisgIHsgMCwgMHgwMDAxLCAweDAwMDIsIDB4MDAwNCwgMHgwMDA4LCAweDAwMTAsIDB4MDAyMCwgMHgwMDQwLCAweDAwODAsCisgICAgMHgwMTAwLCAweDAyMDAsIDB4MDQwMCwgMHgwODAwLCAweDEwMDAsIDB4MjAwMCwgMHg0MDAwIH07CisKK3N0YXRpYyBjb25zdCBpbnQgZXh0ZW5kX29mZnNldFsxNl0gPSAvKiBlbnRyeSBuIGlzICgtMSA8PCBuKSArIDEgKi8KKyAgeyAwLCAoKC0xKTw8MSkgKyAxLCAoKC0xKTw8MikgKyAxLCAoKC0xKTw8MykgKyAxLCAoKC0xKTw8NCkgKyAxLAorICAgICgoLTEpPDw1KSArIDEsICgoLTEpPDw2KSArIDEsICgoLTEpPDw3KSArIDEsICgoLTEpPDw4KSArIDEsCisgICAgKCgtMSk8PDkpICsgMSwgKCgtMSk8PDEwKSArIDEsICgoLTEpPDwxMSkgKyAxLCAoKC0xKTw8MTIpICsgMSwKKyAgICAoKC0xKTw8MTMpICsgMSwgKCgtMSk8PDE0KSArIDEsICgoLTEpPDwxNSkgKyAxIH07CisKKyNlbmRpZiAvKiBBVk9JRF9UQUJMRVMgKi8KKworCisvKgogICogQ2hlY2sgZm9yIGEgcmVzdGFydCBtYXJrZXIgJiByZXN5bmNocm9uaXplIGRlY29kZXIuCiAgKiBSZXR1cm5zIEZBTFNFIGlmIG11c3Qgc3VzcGVuZC4KICAqLwpAQCAtNjUwLDggKzUwMSw2IEBACiAgIC8qIFJlLWluaXRpYWxpemUgREMgcHJlZGljdGlvbnMgdG8gMCAqLwogICBmb3IgKGNpID0gMDsgY2kgPCBjaW5mby0+Y29tcHNfaW5fc2NhbjsgY2krKykKICAgICBlbnRyb3B5LT5zYXZlZC5sYXN0X2RjX3ZhbFtjaV0gPSAwOwotICAvKiBSZS1pbml0IEVPQiBydW4gY291bnQsIHRvbyAqLwotICBlbnRyb3B5LT5zYXZlZC5FT0JSVU4gPSAwOwogCiAgIC8qIFJlc2V0IHJlc3RhcnQgY291bnRlciAqLwogICBlbnRyb3B5LT5yZXN0YXJ0c190b19nbyA9IGNpbmZvLT5yZXN0YXJ0X2ludGVydmFsOwpAQCAtNjYyLDYzNyArNTExLDI5NCBAQAogICAgKiBsZWF2aW5nIHRoZSBmbGFnIHNldC4KICAgICovCiAgIGlmIChjaW5mby0+dW5yZWFkX21hcmtlciA9PSAwKQotICAgIGVudHJvcHktPmluc3VmZmljaWVudF9kYXRhID0gRkFMU0U7CisgICAgZW50cm9weS0+cHViLmluc3VmZmljaWVudF9kYXRhID0gRkFMU0U7CiAKICAgcmV0dXJuIFRSVUU7CiB9CiAKIAotLyoKLSAqIEh1ZmZtYW4gTUNVIGRlY29kaW5nLgotICogRWFjaCBvZiB0aGVzZSByb3V0aW5lcyBkZWNvZGVzIGFuZCByZXR1cm5zIG9uZSBNQ1UncyB3b3J0aCBvZgotICogSHVmZm1hbi1jb21wcmVzc2VkIGNvZWZmaWNpZW50cy4gCi0gKiBUaGUgY29lZmZpY2llbnRzIGFyZSByZW9yZGVyZWQgZnJvbSB6aWd6YWcgb3JkZXIgaW50byBuYXR1cmFsIGFycmF5IG9yZGVyLAotICogYnV0IGFyZSBub3QgZGVxdWFudGl6ZWQuCi0gKgotICogVGhlIGkndGggYmxvY2sgb2YgdGhlIE1DVSBpcyBzdG9yZWQgaW50byB0aGUgYmxvY2sgcG9pbnRlZCB0byBieQotICogTUNVX2RhdGFbaV0uICBXRSBBU1NVTUUgVEhJUyBBUkVBIElTIElOSVRJQUxMWSBaRVJPRUQgQlkgVEhFIENBTExFUi4KLSAqIChXaG9sZXNhbGUgemVyb2luZyBpcyB1c3VhbGx5IGEgbGl0dGxlIGZhc3RlciB0aGFuIHJldGFpbC4uLikKLSAqCi0gKiBXZSByZXR1cm4gRkFMU0UgaWYgZGF0YSBzb3VyY2UgcmVxdWVzdGVkIHN1c3BlbnNpb24uICBJbiB0aGF0IGNhc2Ugbm8KLSAqIGNoYW5nZXMgaGF2ZSBiZWVuIG1hZGUgdG8gcGVybWFuZW50IHN0YXRlLiAgKEV4Y2VwdGlvbjogc29tZSBvdXRwdXQKLSAqIGNvZWZmaWNpZW50cyBtYXkgYWxyZWFkeSBoYXZlIGJlZW4gYXNzaWduZWQuICBUaGlzIGlzIGhhcm1sZXNzIGZvcgotICogc3BlY3RyYWwgc2VsZWN0aW9uLCBzaW5jZSB3ZSdsbCBqdXN0IHJlLWFzc2lnbiB0aGVtIG9uIHRoZSBuZXh0IGNhbGwuCi0gKiBTdWNjZXNzaXZlIGFwcHJveGltYXRpb24gQUMgcmVmaW5lbWVudCBoYXMgdG8gYmUgbW9yZSBjYXJlZnVsLCBob3dldmVyLikKLSAqLwotCi0vKgotICogTUNVIGRlY29kaW5nIGZvciBEQyBpbml0aWFsIHNjYW4gKGVpdGhlciBzcGVjdHJhbCBzZWxlY3Rpb24sCi0gKiBvciBmaXJzdCBwYXNzIG9mIHN1Y2Nlc3NpdmUgYXBwcm94aW1hdGlvbikuCi0gKi8KLQotTUVUSE9EREVGKGJvb2xlYW4pCi1kZWNvZGVfbWN1X0RDX2ZpcnN0IChqX2RlY29tcHJlc3NfcHRyIGNpbmZvLCBKQkxPQ0tST1cgKk1DVV9kYXRhKQoteyAgIAorTE9DQUwoYm9vbGVhbikKK2RlY29kZV9tY3Vfc2xvdyAoal9kZWNvbXByZXNzX3B0ciBjaW5mbywgSkJMT0NLUk9XICpNQ1VfZGF0YSkKK3sKICAgaHVmZl9lbnRyb3B5X3B0ciBlbnRyb3B5ID0gKGh1ZmZfZW50cm9weV9wdHIpIGNpbmZvLT5lbnRyb3B5OwotICBpbnQgQWwgPSBjaW5mby0+QWw7Ci0gIHJlZ2lzdGVyIGludCBzLCByOwotICBpbnQgYmxrbiwgY2k7Ci0gIEpCTE9DS1JPVyBibG9jazsKICAgQklUUkVBRF9TVEFURV9WQVJTOwotICBzYXZhYmxlX3N0YXRlIHN0YXRlOwotICBkX2Rlcml2ZWRfdGJsICogdGJsOwotICBqcGVnX2NvbXBvbmVudF9pbmZvICogY29tcHB0cjsKLQotICAvKiBQcm9jZXNzIHJlc3RhcnQgbWFya2VyIGlmIG5lZWRlZDsgbWF5IGhhdmUgdG8gc3VzcGVuZCAqLwotICBpZiAoY2luZm8tPnJlc3RhcnRfaW50ZXJ2YWwpIHsKLSAgICBpZiAoZW50cm9weS0+cmVzdGFydHNfdG9fZ28gPT0gMCkKLSAgICAgIGlmICghIHByb2Nlc3NfcmVzdGFydChjaW5mbykpCi0JcmV0dXJuIEZBTFNFOwotICB9Ci0KLSAgLyogSWYgd2UndmUgcnVuIG91dCBvZiBkYXRhLCBqdXN0IGxlYXZlIHRoZSBNQ1Ugc2V0IHRvIHplcm9lcy4KLSAgICogVGhpcyB3YXksIHdlIHJldHVybiB1bmlmb3JtIGdyYXkgZm9yIHRoZSByZW1haW5kZXIgb2YgdGhlIHNlZ21lbnQuCi0gICAqLwotICBpZiAoISBlbnRyb3B5LT5pbnN1ZmZpY2llbnRfZGF0YSkgewotCi0gICAgLyogTG9hZCB1cCB3b3JraW5nIHN0YXRlICovCi0gICAgQklUUkVBRF9MT0FEX1NUQVRFKGNpbmZvLGVudHJvcHktPmJpdHN0YXRlKTsKLSAgICBBU1NJR05fU1RBVEUoc3RhdGUsIGVudHJvcHktPnNhdmVkKTsKLQotICAgIC8qIE91dGVyIGxvb3AgaGFuZGxlcyBlYWNoIGJsb2NrIGluIHRoZSBNQ1UgKi8KLQotICAgIGZvciAoYmxrbiA9IDA7IGJsa24gPCBjaW5mby0+YmxvY2tzX2luX01DVTsgYmxrbisrKSB7Ci0gICAgICBibG9jayA9IE1DVV9kYXRhW2Jsa25dOwotICAgICAgY2kgPSBjaW5mby0+TUNVX21lbWJlcnNoaXBbYmxrbl07Ci0gICAgICBjb21wcHRyID0gY2luZm8tPmN1cl9jb21wX2luZm9bY2ldOwotICAgICAgdGJsID0gZW50cm9weS0+ZGVyaXZlZF90YmxzW2NvbXBwdHItPmRjX3RibF9ub107Ci0KLSAgICAgIC8qIERlY29kZSBhIHNpbmdsZSBibG9jaydzIHdvcnRoIG9mIGNvZWZmaWNpZW50cyAqLwotCi0gICAgICAvKiBTZWN0aW9uIEYuMi4yLjE6IGRlY29kZSB0aGUgREMgY29lZmZpY2llbnQgZGlmZmVyZW5jZSAqLwotICAgICAgSFVGRl9ERUNPREUocywgYnJfc3RhdGUsIHRibCwgcmV0dXJuIEZBTFNFLCBsYWJlbDEpOwotICAgICAgaWYgKHMpIHsKLQlDSEVDS19CSVRfQlVGRkVSKGJyX3N0YXRlLCBzLCByZXR1cm4gRkFMU0UpOwotCXIgPSBHRVRfQklUUyhzKTsKLQlzID0gSFVGRl9FWFRFTkQociwgcyk7Ci0gICAgICB9Ci0KLSAgICAgIC8qIENvbnZlcnQgREMgZGlmZmVyZW5jZSB0byBhY3R1YWwgdmFsdWUsIHVwZGF0ZSBsYXN0X2RjX3ZhbCAqLwotICAgICAgcyArPSBzdGF0ZS5sYXN0X2RjX3ZhbFtjaV07Ci0gICAgICBzdGF0ZS5sYXN0X2RjX3ZhbFtjaV0gPSBzOwotICAgICAgLyogU2NhbGUgYW5kIG91dHB1dCB0aGUgY29lZmZpY2llbnQgKGFzc3VtZXMganBlZ19uYXR1cmFsX29yZGVyWzBdPTApICovCi0gICAgICAoKmJsb2NrKVswXSA9IChKQ09FRikgKHMgPDwgQWwpOwotICAgIH0KLQotICAgIC8qIENvbXBsZXRlZCBNQ1UsIHNvIHVwZGF0ZSBzdGF0ZSAqLwotICAgIEJJVFJFQURfU0FWRV9TVEFURShjaW5mbyxlbnRyb3B5LT5iaXRzdGF0ZSk7Ci0gICAgQVNTSUdOX1NUQVRFKGVudHJvcHktPnNhdmVkLCBzdGF0ZSk7Ci0gIH0KLQotICAvKiBBY2NvdW50IGZvciByZXN0YXJ0IGludGVydmFsIChuby1vcCBpZiBub3QgdXNpbmcgcmVzdGFydHMpICovCi0gIGVudHJvcHktPnJlc3RhcnRzX3RvX2dvLS07Ci0KLSAgcmV0dXJuIFRSVUU7Ci19Ci0KLQotLyoKLSAqIE1DVSBkZWNvZGluZyBmb3IgQUMgaW5pdGlhbCBzY2FuIChlaXRoZXIgc3BlY3RyYWwgc2VsZWN0aW9uLAotICogb3IgZmlyc3QgcGFzcyBvZiBzdWNjZXNzaXZlIGFwcHJveGltYXRpb24pLgotICovCi0KLU1FVEhPRERFRihib29sZWFuKQotZGVjb2RlX21jdV9BQ19maXJzdCAoal9kZWNvbXByZXNzX3B0ciBjaW5mbywgSkJMT0NLUk9XICpNQ1VfZGF0YSkKLXsgICAKLSAgaHVmZl9lbnRyb3B5X3B0ciBlbnRyb3B5ID0gKGh1ZmZfZW50cm9weV9wdHIpIGNpbmZvLT5lbnRyb3B5OwotICByZWdpc3RlciBpbnQgcywgaywgcjsKLSAgdW5zaWduZWQgaW50IEVPQlJVTjsKLSAgaW50IFNlLCBBbDsKLSAgY29uc3QgaW50ICogbmF0dXJhbF9vcmRlcjsKLSAgSkJMT0NLUk9XIGJsb2NrOwotICBCSVRSRUFEX1NUQVRFX1ZBUlM7Ci0gIGRfZGVyaXZlZF90YmwgKiB0Ymw7Ci0KLSAgLyogUHJvY2VzcyByZXN0YXJ0IG1hcmtlciBpZiBuZWVkZWQ7IG1heSBoYXZlIHRvIHN1c3BlbmQgKi8KLSAgaWYgKGNpbmZvLT5yZXN0YXJ0X2ludGVydmFsKSB7Ci0gICAgaWYgKGVudHJvcHktPnJlc3RhcnRzX3RvX2dvID09IDApCi0gICAgICBpZiAoISBwcm9jZXNzX3Jlc3RhcnQoY2luZm8pKQotCXJldHVybiBGQUxTRTsKLSAgfQotCi0gIC8qIElmIHdlJ3ZlIHJ1biBvdXQgb2YgZGF0YSwganVzdCBsZWF2ZSB0aGUgTUNVIHNldCB0byB6ZXJvZXMuCi0gICAqIFRoaXMgd2F5LCB3ZSByZXR1cm4gdW5pZm9ybSBncmF5IGZvciB0aGUgcmVtYWluZGVyIG9mIHRoZSBzZWdtZW50LgotICAgKi8KLSAgaWYgKCEgZW50cm9weS0+aW5zdWZmaWNpZW50X2RhdGEpIHsKLQotICAgIFNlID0gY2luZm8tPlNlOwotICAgIEFsID0gY2luZm8tPkFsOwotICAgIG5hdHVyYWxfb3JkZXIgPSBjaW5mby0+bmF0dXJhbF9vcmRlcjsKLQotICAgIC8qIExvYWQgdXAgd29ya2luZyBzdGF0ZS4KLSAgICAgKiBXZSBjYW4gYXZvaWQgbG9hZGluZy9zYXZpbmcgYml0cmVhZCBzdGF0ZSBpZiBpbiBhbiBFT0IgcnVuLgotICAgICAqLwotICAgIEVPQlJVTiA9IGVudHJvcHktPnNhdmVkLkVPQlJVTjsJLyogb25seSBwYXJ0IG9mIHNhdmVkIHN0YXRlIHdlIG5lZWQgKi8KLQotICAgIC8qIFRoZXJlIGlzIGFsd2F5cyBvbmx5IG9uZSBibG9jayBwZXIgTUNVICovCi0KLSAgICBpZiAoRU9CUlVOID4gMCkJCS8qIGlmIGl0J3MgYSBiYW5kIG9mIHplcm9lcy4uLiAqLwotICAgICAgRU9CUlVOLS07CQkJLyogLi4ucHJvY2VzcyBpdCBub3cgKHdlIGRvIG5vdGhpbmcpICovCi0gICAgZWxzZSB7Ci0gICAgICBCSVRSRUFEX0xPQURfU1RBVEUoY2luZm8sZW50cm9weS0+Yml0c3RhdGUpOwotICAgICAgYmxvY2sgPSBNQ1VfZGF0YVswXTsKLSAgICAgIHRibCA9IGVudHJvcHktPmFjX2Rlcml2ZWRfdGJsOwotCi0gICAgICBmb3IgKGsgPSBjaW5mby0+U3M7IGsgPD0gU2U7IGsrKykgewotCUhVRkZfREVDT0RFKHMsIGJyX3N0YXRlLCB0YmwsIHJldHVybiBGQUxTRSwgbGFiZWwyKTsKLQlyID0gcyA+PiA0OwotCXMgJj0gMTU7Ci0JaWYgKHMpIHsKLQkgIGsgKz0gcjsKLQkgIENIRUNLX0JJVF9CVUZGRVIoYnJfc3RhdGUsIHMsIHJldHVybiBGQUxTRSk7Ci0JICByID0gR0VUX0JJVFMocyk7Ci0JICBzID0gSFVGRl9FWFRFTkQociwgcyk7Ci0JICAvKiBTY2FsZSBhbmQgb3V0cHV0IGNvZWZmaWNpZW50IGluIG5hdHVyYWwgKGRlemlnemFnZ2VkKSBvcmRlciAqLwotCSAgKCpibG9jaylbbmF0dXJhbF9vcmRlcltrXV0gPSAoSkNPRUYpIChzIDw8IEFsKTsKLQl9IGVsc2UgewotCSAgaWYgKHIgPT0gMTUpIHsJLyogWlJMICovCi0JICAgIGsgKz0gMTU7CQkvKiBza2lwIDE1IHplcm9lcyBpbiBiYW5kICovCi0JICB9IGVsc2UgewkJLyogRU9CciwgcnVuIGxlbmd0aCBpcyAyXnIgKyBhcHBlbmRlZCBiaXRzICovCi0JICAgIEVPQlJVTiA9IDEgPDwgcjsKLQkgICAgaWYgKHIpIHsJCS8qIEVPQnIsIHIgPiAwICovCi0JICAgICAgQ0hFQ0tfQklUX0JVRkZFUihicl9zdGF0ZSwgciwgcmV0dXJuIEZBTFNFKTsKLQkgICAgICByID0gR0VUX0JJVFMocik7Ci0JICAgICAgRU9CUlVOICs9IHI7Ci0JICAgIH0KLQkgICAgRU9CUlVOLS07CQkvKiB0aGlzIGJhbmQgaXMgcHJvY2Vzc2VkIGF0IHRoaXMgbW9tZW50ICovCi0JICAgIGJyZWFrOwkJLyogZm9yY2UgZW5kLW9mLWJhbmQgKi8KLQkgIH0KLQl9Ci0gICAgICB9Ci0KLSAgICAgIEJJVFJFQURfU0FWRV9TVEFURShjaW5mbyxlbnRyb3B5LT5iaXRzdGF0ZSk7Ci0gICAgfQotCi0gICAgLyogQ29tcGxldGVkIE1DVSwgc28gdXBkYXRlIHN0YXRlICovCi0gICAgZW50cm9weS0+c2F2ZWQuRU9CUlVOID0gRU9CUlVOOwkvKiBvbmx5IHBhcnQgb2Ygc2F2ZWQgc3RhdGUgd2UgbmVlZCAqLwotICB9Ci0KLSAgLyogQWNjb3VudCBmb3IgcmVzdGFydCBpbnRlcnZhbCAobm8tb3AgaWYgbm90IHVzaW5nIHJlc3RhcnRzKSAqLwotICBlbnRyb3B5LT5yZXN0YXJ0c190b19nby0tOwotCi0gIHJldHVybiBUUlVFOwotfQotCi0KLS8qCi0gKiBNQ1UgZGVjb2RpbmcgZm9yIERDIHN1Y2Nlc3NpdmUgYXBwcm94aW1hdGlvbiByZWZpbmVtZW50IHNjYW4uCi0gKiBOb3RlOiB3ZSBhc3N1bWUgc3VjaCBzY2FucyBjYW4gYmUgbXVsdGktY29tcG9uZW50LCBhbHRob3VnaCB0aGUgc3BlYwotICogaXMgbm90IHZlcnkgY2xlYXIgb24gdGhlIHBvaW50LgotICovCi0KLU1FVEhPRERFRihib29sZWFuKQotZGVjb2RlX21jdV9EQ19yZWZpbmUgKGpfZGVjb21wcmVzc19wdHIgY2luZm8sIEpCTE9DS1JPVyAqTUNVX2RhdGEpCi17ICAgCi0gIGh1ZmZfZW50cm9weV9wdHIgZW50cm9weSA9IChodWZmX2VudHJvcHlfcHRyKSBjaW5mby0+ZW50cm9weTsKLSAgaW50IHAxID0gMSA8PCBjaW5mby0+QWw7CS8qIDEgaW4gdGhlIGJpdCBwb3NpdGlvbiBiZWluZyBjb2RlZCAqLwogICBpbnQgYmxrbjsKLSAgSkJMT0NLUk9XIGJsb2NrOwotICBCSVRSRUFEX1NUQVRFX1ZBUlM7Ci0KLSAgLyogUHJvY2VzcyByZXN0YXJ0IG1hcmtlciBpZiBuZWVkZWQ7IG1heSBoYXZlIHRvIHN1c3BlbmQgKi8KLSAgaWYgKGNpbmZvLT5yZXN0YXJ0X2ludGVydmFsKSB7Ci0gICAgaWYgKGVudHJvcHktPnJlc3RhcnRzX3RvX2dvID09IDApCi0gICAgICBpZiAoISBwcm9jZXNzX3Jlc3RhcnQoY2luZm8pKQotCXJldHVybiBGQUxTRTsKLSAgfQotCi0gIC8qIE5vdCB3b3J0aCB0aGUgY3ljbGVzIHRvIGNoZWNrIGluc3VmZmljaWVudF9kYXRhIGhlcmUsCi0gICAqIHNpbmNlIHdlIHdpbGwgbm90IGNoYW5nZSB0aGUgZGF0YSBhbnl3YXkgaWYgd2UgcmVhZCB6ZXJvZXMuCi0gICAqLworICBzYXZhYmxlX3N0YXRlIHN0YXRlOworICAvKiBPdXRlciBsb29wIGhhbmRsZXMgZWFjaCBibG9jayBpbiB0aGUgTUNVICovCiAKICAgLyogTG9hZCB1cCB3b3JraW5nIHN0YXRlICovCiAgIEJJVFJFQURfTE9BRF9TVEFURShjaW5mbyxlbnRyb3B5LT5iaXRzdGF0ZSk7Ci0KLSAgLyogT3V0ZXIgbG9vcCBoYW5kbGVzIGVhY2ggYmxvY2sgaW4gdGhlIE1DVSAqLworICBBU1NJR05fU1RBVEUoc3RhdGUsIGVudHJvcHktPnNhdmVkKTsKIAogICBmb3IgKGJsa24gPSAwOyBibGtuIDwgY2luZm8tPmJsb2Nrc19pbl9NQ1U7IGJsa24rKykgewotICAgIGJsb2NrID0gTUNVX2RhdGFbYmxrbl07CisgICAgSkJMT0NLUk9XIGJsb2NrID0gTUNVX2RhdGFbYmxrbl07CisgICAgZF9kZXJpdmVkX3RibCAqIGRjdGJsID0gZW50cm9weS0+ZGNfY3VyX3RibHNbYmxrbl07CisgICAgZF9kZXJpdmVkX3RibCAqIGFjdGJsID0gZW50cm9weS0+YWNfY3VyX3RibHNbYmxrbl07CisgICAgcmVnaXN0ZXIgaW50IHMsIGssIHI7CiAKLSAgICAvKiBFbmNvZGVkIGRhdGEgaXMgc2ltcGx5IHRoZSBuZXh0IGJpdCBvZiB0aGUgdHdvJ3MtY29tcGxlbWVudCBEQyB2YWx1ZSAqLwotICAgIENIRUNLX0JJVF9CVUZGRVIoYnJfc3RhdGUsIDEsIHJldHVybiBGQUxTRSk7Ci0gICAgaWYgKEdFVF9CSVRTKDEpKQotICAgICAgKCpibG9jaylbMF0gfD0gcDE7Ci0gICAgLyogTm90ZTogc2luY2Ugd2UgdXNlIHw9LCByZXBlYXRpbmcgdGhlIGFzc2lnbm1lbnQgbGF0ZXIgaXMgc2FmZSAqLworICAgIC8qIERlY29kZSBhIHNpbmdsZSBibG9jaydzIHdvcnRoIG9mIGNvZWZmaWNpZW50cyAqLworCisgICAgLyogU2VjdGlvbiBGLjIuMi4xOiBkZWNvZGUgdGhlIERDIGNvZWZmaWNpZW50IGRpZmZlcmVuY2UgKi8KKyAgICBIVUZGX0RFQ09ERShzLCBicl9zdGF0ZSwgZGN0YmwsIHJldHVybiBGQUxTRSwgbGFiZWwxKTsKKyAgICBpZiAocykgeworICAgICAgQ0hFQ0tfQklUX0JVRkZFUihicl9zdGF0ZSwgcywgcmV0dXJuIEZBTFNFKTsKKyAgICAgIHIgPSBHRVRfQklUUyhzKTsKKyAgICAgIHMgPSBIVUZGX0VYVEVORChyLCBzKTsKKyAgICB9CisKKyAgICBpZiAoZW50cm9weS0+ZGNfbmVlZGVkW2Jsa25dKSB7CisgICAgICAvKiBDb252ZXJ0IERDIGRpZmZlcmVuY2UgdG8gYWN0dWFsIHZhbHVlLCB1cGRhdGUgbGFzdF9kY192YWwgKi8KKyAgICAgIGludCBjaSA9IGNpbmZvLT5NQ1VfbWVtYmVyc2hpcFtibGtuXTsKKyAgICAgIHMgKz0gc3RhdGUubGFzdF9kY192YWxbY2ldOworICAgICAgc3RhdGUubGFzdF9kY192YWxbY2ldID0gczsKKyAgICAgIC8qIE91dHB1dCB0aGUgREMgY29lZmZpY2llbnQgKGFzc3VtZXMganBlZ19uYXR1cmFsX29yZGVyWzBdID0gMCkgKi8KKyAgICAgICgqYmxvY2spWzBdID0gKEpDT0VGKSBzOworICAgIH0KKworICAgIGlmIChlbnRyb3B5LT5hY19uZWVkZWRbYmxrbl0pIHsKKworICAgICAgLyogU2VjdGlvbiBGLjIuMi4yOiBkZWNvZGUgdGhlIEFDIGNvZWZmaWNpZW50cyAqLworICAgICAgLyogU2luY2UgemVyb2VzIGFyZSBza2lwcGVkLCBvdXRwdXQgYXJlYSBtdXN0IGJlIGNsZWFyZWQgYmVmb3JlaGFuZCAqLworICAgICAgZm9yIChrID0gMTsgayA8IERDVFNJWkUyOyBrKyspIHsKKyAgICAgICAgSFVGRl9ERUNPREUocywgYnJfc3RhdGUsIGFjdGJsLCByZXR1cm4gRkFMU0UsIGxhYmVsMik7CisKKyAgICAgICAgciA9IHMgPj4gNDsKKyAgICAgICAgcyAmPSAxNTsKKyAgICAgIAorICAgICAgICBpZiAocykgeworICAgICAgICAgIGsgKz0gcjsKKyAgICAgICAgICBDSEVDS19CSVRfQlVGRkVSKGJyX3N0YXRlLCBzLCByZXR1cm4gRkFMU0UpOworICAgICAgICAgIHIgPSBHRVRfQklUUyhzKTsKKyAgICAgICAgICBzID0gSFVGRl9FWFRFTkQociwgcyk7CisgICAgICAgICAgLyogT3V0cHV0IGNvZWZmaWNpZW50IGluIG5hdHVyYWwgKGRlemlnemFnZ2VkKSBvcmRlci4KKyAgICAgICAgICAgKiBOb3RlOiB0aGUgZXh0cmEgZW50cmllcyBpbiBqcGVnX25hdHVyYWxfb3JkZXJbXSB3aWxsIHNhdmUgdXMKKyAgICAgICAgICAgKiBpZiBrID49IERDVFNJWkUyLCB3aGljaCBjb3VsZCBoYXBwZW4gaWYgdGhlIGRhdGEgaXMgY29ycnVwdGVkLgorICAgICAgICAgICAqLworICAgICAgICAgICgqYmxvY2spW2pwZWdfbmF0dXJhbF9vcmRlcltrXV0gPSAoSkNPRUYpIHM7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgaWYgKHIgIT0gMTUpCisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICBrICs9IDE1OworICAgICAgICB9CisgICAgICB9CisKKyAgICB9IGVsc2UgeworCisgICAgICAvKiBTZWN0aW9uIEYuMi4yLjI6IGRlY29kZSB0aGUgQUMgY29lZmZpY2llbnRzICovCisgICAgICAvKiBJbiB0aGlzIHBhdGggd2UganVzdCBkaXNjYXJkIHRoZSB2YWx1ZXMgKi8KKyAgICAgIGZvciAoayA9IDE7IGsgPCBEQ1RTSVpFMjsgaysrKSB7CisgICAgICAgIEhVRkZfREVDT0RFKHMsIGJyX3N0YXRlLCBhY3RibCwgcmV0dXJuIEZBTFNFLCBsYWJlbDMpOworCisgICAgICAgIHIgPSBzID4+IDQ7CisgICAgICAgIHMgJj0gMTU7CisKKyAgICAgICAgaWYgKHMpIHsKKyAgICAgICAgICBrICs9IHI7CisgICAgICAgICAgQ0hFQ0tfQklUX0JVRkZFUihicl9zdGF0ZSwgcywgcmV0dXJuIEZBTFNFKTsKKyAgICAgICAgICBEUk9QX0JJVFMocyk7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgaWYgKHIgIT0gMTUpCisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICBrICs9IDE1OworICAgICAgICB9CisgICAgICB9CisgICAgfQogICB9CiAKICAgLyogQ29tcGxldGVkIE1DVSwgc28gdXBkYXRlIHN0YXRlICovCiAgIEJJVFJFQURfU0FWRV9TVEFURShjaW5mbyxlbnRyb3B5LT5iaXRzdGF0ZSk7Ci0KLSAgLyogQWNjb3VudCBmb3IgcmVzdGFydCBpbnRlcnZhbCAobm8tb3AgaWYgbm90IHVzaW5nIHJlc3RhcnRzKSAqLwotICBlbnRyb3B5LT5yZXN0YXJ0c190b19nby0tOwotCisgIEFTU0lHTl9TVEFURShlbnRyb3B5LT5zYXZlZCwgc3RhdGUpOwogICByZXR1cm4gVFJVRTsKIH0KIAogCi0vKgotICogTUNVIGRlY29kaW5nIGZvciBBQyBzdWNjZXNzaXZlIGFwcHJveGltYXRpb24gcmVmaW5lbWVudCBzY2FuLgotICovCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogCi1NRVRIT0RERUYoYm9vbGVhbikKLWRlY29kZV9tY3VfQUNfcmVmaW5lIChqX2RlY29tcHJlc3NfcHRyIGNpbmZvLCBKQkxPQ0tST1cgKk1DVV9kYXRhKQoteyAgIAotICBodWZmX2VudHJvcHlfcHRyIGVudHJvcHkgPSAoaHVmZl9lbnRyb3B5X3B0cikgY2luZm8tPmVudHJvcHk7Ci0gIHJlZ2lzdGVyIGludCBzLCBrLCByOwotICB1bnNpZ25lZCBpbnQgRU9CUlVOOwotICBpbnQgU2UsIHAxLCBtMTsKLSAgY29uc3QgaW50ICogbmF0dXJhbF9vcmRlcjsKLSAgSkJMT0NLUk9XIGJsb2NrOwotICBKQ09FRlBUUiB0aGlzY29lZjsKLSAgQklUUkVBRF9TVEFURV9WQVJTOwotICBkX2Rlcml2ZWRfdGJsICogdGJsOwotICBpbnQgbnVtX25ld256OwotICBpbnQgbmV3bnpfcG9zW0RDVFNJWkUyXTsKLQotICAvKiBQcm9jZXNzIHJlc3RhcnQgbWFya2VyIGlmIG5lZWRlZDsgbWF5IGhhdmUgdG8gc3VzcGVuZCAqLwotICBpZiAoY2luZm8tPnJlc3RhcnRfaW50ZXJ2YWwpIHsKLSAgICBpZiAoZW50cm9weS0+cmVzdGFydHNfdG9fZ28gPT0gMCkKLSAgICAgIGlmICghIHByb2Nlc3NfcmVzdGFydChjaW5mbykpCi0JcmV0dXJuIEZBTFNFOwotICB9Ci0KLSAgLyogSWYgd2UndmUgcnVuIG91dCBvZiBkYXRhLCBkb24ndCBtb2RpZnkgdGhlIE1DVS4KLSAgICovCi0gIGlmICghIGVudHJvcHktPmluc3VmZmljaWVudF9kYXRhKSB7Ci0KLSAgICBTZSA9IGNpbmZvLT5TZTsKLSAgICBwMSA9IDEgPDwgY2luZm8tPkFsOwkvKiAxIGluIHRoZSBiaXQgcG9zaXRpb24gYmVpbmcgY29kZWQgKi8KLSAgICBtMSA9ICgtMSkgPDwgY2luZm8tPkFsOwkvKiAtMSBpbiB0aGUgYml0IHBvc2l0aW9uIGJlaW5nIGNvZGVkICovCi0gICAgbmF0dXJhbF9vcmRlciA9IGNpbmZvLT5uYXR1cmFsX29yZGVyOwotCi0gICAgLyogTG9hZCB1cCB3b3JraW5nIHN0YXRlICovCi0gICAgQklUUkVBRF9MT0FEX1NUQVRFKGNpbmZvLGVudHJvcHktPmJpdHN0YXRlKTsKLSAgICBFT0JSVU4gPSBlbnRyb3B5LT5zYXZlZC5FT0JSVU47IC8qIG9ubHkgcGFydCBvZiBzYXZlZCBzdGF0ZSB3ZSBuZWVkICovCi0KLSAgICAvKiBUaGVyZSBpcyBhbHdheXMgb25seSBvbmUgYmxvY2sgcGVyIE1DVSAqLwotICAgIGJsb2NrID0gTUNVX2RhdGFbMF07Ci0gICAgdGJsID0gZW50cm9weS0+YWNfZGVyaXZlZF90Ymw7Ci0KLSAgICAvKiBJZiB3ZSBhcmUgZm9yY2VkIHRvIHN1c3BlbmQsIHdlIG11c3QgdW5kbyB0aGUgYXNzaWdubWVudHMgdG8gYW55IG5ld2x5Ci0gICAgICogbm9uemVybyBjb2VmZmljaWVudHMgaW4gdGhlIGJsb2NrLCBiZWNhdXNlIG90aGVyd2lzZSB3ZSdkIGdldCBjb25mdXNlZAotICAgICAqIG5leHQgdGltZSBhYm91dCB3aGljaCBjb2VmZmljaWVudHMgd2VyZSBhbHJlYWR5IG5vbnplcm8uCi0gICAgICogQnV0IHdlIG5lZWQgbm90IHVuZG8gYWRkaXRpb24gb2YgYml0cyB0byBhbHJlYWR5LW5vbnplcm8gY29lZmZpY2llbnRzOwotICAgICAqIGluc3RlYWQsIHdlIGNhbiB0ZXN0IHRoZSBjdXJyZW50IGJpdCB0byBzZWUgaWYgd2UgYWxyZWFkeSBkaWQgaXQuCi0gICAgICovCi0gICAgbnVtX25ld256ID0gMDsKLQotICAgIC8qIGluaXRpYWxpemUgY29lZmZpY2llbnQgbG9vcCBjb3VudGVyIHRvIHN0YXJ0IG9mIGJhbmQgKi8KLSAgICBrID0gY2luZm8tPlNzOwotCi0gICAgaWYgKEVPQlJVTiA9PSAwKSB7Ci0gICAgICBmb3IgKDsgayA8PSBTZTsgaysrKSB7Ci0JSFVGRl9ERUNPREUocywgYnJfc3RhdGUsIHRibCwgZ290byB1bmRvaXQsIGxhYmVsMyk7Ci0JciA9IHMgPj4gNDsKLQlzICY9IDE1OwotCWlmIChzKSB7Ci0JICBpZiAocyAhPSAxKQkJLyogc2l6ZSBvZiBuZXcgY29lZiBzaG91bGQgYWx3YXlzIGJlIDEgKi8KLQkgICAgV0FSTk1TKGNpbmZvLCBKV1JOX0hVRkZfQkFEX0NPREUpOwotCSAgQ0hFQ0tfQklUX0JVRkZFUihicl9zdGF0ZSwgMSwgZ290byB1bmRvaXQpOwotCSAgaWYgKEdFVF9CSVRTKDEpKQotCSAgICBzID0gcDE7CQkvKiBuZXdseSBub256ZXJvIGNvZWYgaXMgcG9zaXRpdmUgKi8KLQkgIGVsc2UKLQkgICAgcyA9IG0xOwkJLyogbmV3bHkgbm9uemVybyBjb2VmIGlzIG5lZ2F0aXZlICovCi0JfSBlbHNlIHsKLQkgIGlmIChyICE9IDE1KSB7Ci0JICAgIEVPQlJVTiA9IDEgPDwgcjsJLyogRU9CciwgcnVuIGxlbmd0aCBpcyAyXnIgKyBhcHBlbmRlZCBiaXRzICovCi0JICAgIGlmIChyKSB7Ci0JICAgICAgQ0hFQ0tfQklUX0JVRkZFUihicl9zdGF0ZSwgciwgZ290byB1bmRvaXQpOwotCSAgICAgIHIgPSBHRVRfQklUUyhyKTsKLQkgICAgICBFT0JSVU4gKz0gcjsKLQkgICAgfQotCSAgICBicmVhazsJCS8qIHJlc3Qgb2YgYmxvY2sgaXMgaGFuZGxlZCBieSBFT0IgbG9naWMgKi8KLQkgIH0KLQkgIC8qIG5vdGUgcyA9IDAgZm9yIHByb2Nlc3NpbmcgWlJMICovCi0JfQotCS8qIEFkdmFuY2Ugb3ZlciBhbHJlYWR5LW5vbnplcm8gY29lZnMgYW5kIHIgc3RpbGwtemVybyBjb2VmcywKLQkgKiBhcHBlbmRpbmcgY29ycmVjdGlvbiBiaXRzIHRvIHRoZSBub256ZXJvZXMuICBBIGNvcnJlY3Rpb24gYml0IGlzIDEKLQkgKiBpZiB0aGUgYWJzb2x1dGUgdmFsdWUgb2YgdGhlIGNvZWZmaWNpZW50IG11c3QgYmUgaW5jcmVhc2VkLgotCSAqLwotCWRvIHsKLQkgIHRoaXNjb2VmID0gKmJsb2NrICsgbmF0dXJhbF9vcmRlcltrXTsKLQkgIGlmICgqdGhpc2NvZWYgIT0gMCkgewotCSAgICBDSEVDS19CSVRfQlVGRkVSKGJyX3N0YXRlLCAxLCBnb3RvIHVuZG9pdCk7Ci0JICAgIGlmIChHRVRfQklUUygxKSkgewotCSAgICAgIGlmICgoKnRoaXNjb2VmICYgcDEpID09IDApIHsgLyogZG8gbm90aGluZyBpZiBhbHJlYWR5IHNldCBpdCAqLwotCQlpZiAoKnRoaXNjb2VmID49IDApCi0JCSAgKnRoaXNjb2VmICs9IHAxOwotCQllbHNlCi0JCSAgKnRoaXNjb2VmICs9IG0xOwotCSAgICAgIH0KLQkgICAgfQotCSAgfSBlbHNlIHsKLQkgICAgaWYgKC0tciA8IDApCi0JICAgICAgYnJlYWs7CQkvKiByZWFjaGVkIHRhcmdldCB6ZXJvIGNvZWZmaWNpZW50ICovCi0JICB9Ci0JICBrKys7Ci0JfSB3aGlsZSAoayA8PSBTZSk7Ci0JaWYgKHMpIHsKLQkgIGludCBwb3MgPSBuYXR1cmFsX29yZGVyW2tdOwotCSAgLyogT3V0cHV0IG5ld2x5IG5vbnplcm8gY29lZmZpY2llbnQgKi8KLQkgICgqYmxvY2spW3Bvc10gPSAoSkNPRUYpIHM7Ci0JICAvKiBSZW1lbWJlciBpdHMgcG9zaXRpb24gaW4gY2FzZSB3ZSBoYXZlIHRvIHN1c3BlbmQgKi8KLQkgIG5ld256X3Bvc1tudW1fbmV3bnorK10gPSBwb3M7Ci0JfQotICAgICAgfQotICAgIH0KLQotICAgIGlmIChFT0JSVU4gPiAwKSB7Ci0gICAgICAvKiBTY2FuIGFueSByZW1haW5pbmcgY29lZmZpY2llbnQgcG9zaXRpb25zIGFmdGVyIHRoZSBlbmQtb2YtYmFuZAotICAgICAgICogKHRoZSBsYXN0IG5ld2x5IG5vbnplcm8gY29lZmZpY2llbnQsIGlmIGFueSkuICBBcHBlbmQgYSBjb3JyZWN0aW9uCi0gICAgICAgKiBiaXQgdG8gZWFjaCBhbHJlYWR5LW5vbnplcm8gY29lZmZpY2llbnQuICBBIGNvcnJlY3Rpb24gYml0IGlzIDEKLSAgICAgICAqIGlmIHRoZSBhYnNvbHV0ZSB2YWx1ZSBvZiB0aGUgY29lZmZpY2llbnQgbXVzdCBiZSBpbmNyZWFzZWQuCi0gICAgICAgKi8KLSAgICAgIGZvciAoOyBrIDw9IFNlOyBrKyspIHsKLQl0aGlzY29lZiA9ICpibG9jayArIG5hdHVyYWxfb3JkZXJba107Ci0JaWYgKCp0aGlzY29lZiAhPSAwKSB7Ci0JICBDSEVDS19CSVRfQlVGRkVSKGJyX3N0YXRlLCAxLCBnb3RvIHVuZG9pdCk7Ci0JICBpZiAoR0VUX0JJVFMoMSkpIHsKLQkgICAgaWYgKCgqdGhpc2NvZWYgJiBwMSkgPT0gMCkgeyAvKiBkbyBub3RoaW5nIGlmIGFscmVhZHkgY2hhbmdlZCBpdCAqLwotCSAgICAgIGlmICgqdGhpc2NvZWYgPj0gMCkKLQkJKnRoaXNjb2VmICs9IHAxOwotCSAgICAgIGVsc2UKLQkJKnRoaXNjb2VmICs9IG0xOwotCSAgICB9Ci0JICB9Ci0JfQotICAgICAgfQotICAgICAgLyogQ291bnQgb25lIGJsb2NrIGNvbXBsZXRlZCBpbiBFT0IgcnVuICovCi0gICAgICBFT0JSVU4tLTsKLSAgICB9Ci0KLSAgICAvKiBDb21wbGV0ZWQgTUNVLCBzbyB1cGRhdGUgc3RhdGUgKi8KLSAgICBCSVRSRUFEX1NBVkVfU1RBVEUoY2luZm8sZW50cm9weS0+Yml0c3RhdGUpOwotICAgIGVudHJvcHktPnNhdmVkLkVPQlJVTiA9IEVPQlJVTjsgLyogb25seSBwYXJ0IG9mIHNhdmVkIHN0YXRlIHdlIG5lZWQgKi8KLSAgfQotCi0gIC8qIEFjY291bnQgZm9yIHJlc3RhcnQgaW50ZXJ2YWwgKG5vLW9wIGlmIG5vdCB1c2luZyByZXN0YXJ0cykgKi8KLSAgZW50cm9weS0+cmVzdGFydHNfdG9fZ28tLTsKLQotICByZXR1cm4gVFJVRTsKLQotdW5kb2l0OgotICAvKiBSZS16ZXJvIGFueSBvdXRwdXQgY29lZmZpY2llbnRzIHRoYXQgd2UgbWFkZSBuZXdseSBub256ZXJvICovCi0gIHdoaWxlIChudW1fbmV3bnogPiAwKQotICAgICgqYmxvY2spW25ld256X3Bvc1stLW51bV9uZXduel1dID0gMDsKLQotICByZXR1cm4gRkFMU0U7CisjZGVmaW5lIEFERF9CWVRFICB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgaW50IHZhbDAgPSAqKGJ1ZmZlcisrKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICBpbnQgdmFsMSA9ICooYnVmZmVyKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgYml0c19sZWZ0ICs9IDg7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICBnZXRfYnVmZmVyID0gKGdldF9idWZmZXIgPDwgOCkgfCAodmFsMCk7ICAgICAgICAgICAgICBcCisgIGlmICh2YWwwID09IDB4RkYpIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICBidWZmZXIrKzsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIGlmICh2YWwxICE9IDApIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICBjaW5mby0+dW5yZWFkX21hcmtlciA9IHZhbDE7ICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgIGJ1ZmZlciAgIC09IDI7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgZ2V0X2J1ZmZlciAgICAgICY9IH4weEZGOyAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAogfQogCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogCi0vKgotICogRGVjb2RlIG9uZSBNQ1UncyB3b3J0aCBvZiBIdWZmbWFuLWNvbXByZXNzZWQgY29lZmZpY2llbnRzLAotICogcGFydGlhbCBibG9ja3MuCi0gKi8KKyNpZiBfX1dPUkRTSVpFID09IDY0IHx8IGRlZmluZWQoX1dJTjY0KQogCi1NRVRIT0RERUYoYm9vbGVhbikKLWRlY29kZV9tY3Vfc3ViIChqX2RlY29tcHJlc3NfcHRyIGNpbmZvLCBKQkxPQ0tST1cgKk1DVV9kYXRhKQorI2RlZmluZSBFTlNVUkVfU0hPUlQgXAorICBpZiAoYml0c19sZWZ0IDwgMTYpIHsgXAorICAgIEFERF9CWVRFIEFERF9CWVRFIEFERF9CWVRFIEFERF9CWVRFIEFERF9CWVRFIEFERF9CWVRFIFwKKyAgfQorCisjZWxzZQorCisjZGVmaW5lIEVOU1VSRV9TSE9SVCAgaWYgKGJpdHNfbGVmdCA8IDE2KSB7IEFERF9CWVRFIEFERF9CWVRFIH0KKworI2VuZGlmCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKyNkZWZpbmUgSFVGRl9ERUNPREVfRkFTVChzeW1ib2wsIHNpemUsIGh0YmwpIHsgXAorICBFTlNVUkVfU0hPUlQgXAorICBzeW1ib2wgPSBQRUVLX0JJVFMoSFVGRl9MT09LQUhFQUQpOyBcCisgIHN5bWJvbCA9IGh0YmwtPmxvb2t1cFtzeW1ib2xdOyBcCisgIHNpemUgPSBzeW1ib2wgPj4gODsgXAorICBiaXRzX2xlZnQgLT0gc2l6ZTsgXAorICBzeW1ib2wgPSBzeW1ib2wgJiAoKDEgPDwgSFVGRl9MT09LQUhFQUQpIC0gMSk7IFwKKyAgaWYgKHNpemUgPT0gSFVGRl9MT09LQUhFQUQgKyAxKSB7IFwKKyAgICBzeW1ib2wgPSAoZ2V0X2J1ZmZlciA+PiBiaXRzX2xlZnQpICYgKCgxIDw8IChzaXplKSkgLSAxKTsgXAorICAgIHdoaWxlIChzeW1ib2wgPiBodGJsLT5tYXhjb2RlW3NpemVdKSB7IFwKKyAgICAgIHN5bWJvbCA8PD0gMTsgXAorICAgICAgc3ltYm9sIHw9IEdFVF9CSVRTKDEpOyBcCisgICAgICBzaXplKys7IFwKKyAgICB9IFwKKyAgICBzeW1ib2wgPSBodGJsLT5wdWItPmh1ZmZ2YWxbIChpbnQpIChzeW1ib2wgKyBodGJsLT52YWxvZmZzZXRbc2l6ZV0pICYgMHhGRiBdOyBcCisgIH0gXAorfQorCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCitMT0NBTChib29sZWFuKQorZGVjb2RlX21jdV9mYXN0IChqX2RlY29tcHJlc3NfcHRyIGNpbmZvLCBKQkxPQ0tST1cgKk1DVV9kYXRhKQogewogICBodWZmX2VudHJvcHlfcHRyIGVudHJvcHkgPSAoaHVmZl9lbnRyb3B5X3B0cikgY2luZm8tPmVudHJvcHk7Ci0gIGNvbnN0IGludCAqIG5hdHVyYWxfb3JkZXI7Ci0gIGludCBTZSwgYmxrbjsKICAgQklUUkVBRF9TVEFURV9WQVJTOworICBKT0NURVQgKmJ1ZmZlcjsKKyAgaW50IGJsa247CiAgIHNhdmFibGVfc3RhdGUgc3RhdGU7CisgIC8qIE91dGVyIGxvb3AgaGFuZGxlcyBlYWNoIGJsb2NrIGluIHRoZSBNQ1UgKi8KIAotICAvKiBQcm9jZXNzIHJlc3RhcnQgbWFya2VyIGlmIG5lZWRlZDsgbWF5IGhhdmUgdG8gc3VzcGVuZCAqLwotICBpZiAoY2luZm8tPnJlc3RhcnRfaW50ZXJ2YWwpIHsKLSAgICBpZiAoZW50cm9weS0+cmVzdGFydHNfdG9fZ28gPT0gMCkKLSAgICAgIGlmICghIHByb2Nlc3NfcmVzdGFydChjaW5mbykpCi0JcmV0dXJuIEZBTFNFOwotICB9CisgIC8qIExvYWQgdXAgd29ya2luZyBzdGF0ZSAqLworICBCSVRSRUFEX0xPQURfU1RBVEUoY2luZm8sZW50cm9weS0+Yml0c3RhdGUpOworICBidWZmZXIgPSAoSk9DVEVUICopIGJyX3N0YXRlLm5leHRfaW5wdXRfYnl0ZTsKKyAgQVNTSUdOX1NUQVRFKHN0YXRlLCBlbnRyb3B5LT5zYXZlZCk7CiAKLSAgLyogSWYgd2UndmUgcnVuIG91dCBvZiBkYXRhLCBqdXN0IGxlYXZlIHRoZSBNQ1Ugc2V0IHRvIHplcm9lcy4KLSAgICogVGhpcyB3YXksIHdlIHJldHVybiB1bmlmb3JtIGdyYXkgZm9yIHRoZSByZW1haW5kZXIgb2YgdGhlIHNlZ21lbnQuCi0gICAqLwotICBpZiAoISBlbnRyb3B5LT5pbnN1ZmZpY2llbnRfZGF0YSkgeworICBmb3IgKGJsa24gPSAwOyBibGtuIDwgY2luZm8tPmJsb2Nrc19pbl9NQ1U7IGJsa24rKykgeworICAgIEpCTE9DS1JPVyBibG9jayA9IE1DVV9kYXRhW2Jsa25dOworICAgIGRfZGVyaXZlZF90YmwgKiBkY3RibCA9IGVudHJvcHktPmRjX2N1cl90YmxzW2Jsa25dOworICAgIGRfZGVyaXZlZF90YmwgKiBhY3RibCA9IGVudHJvcHktPmFjX2N1cl90YmxzW2Jsa25dOworICAgIHJlZ2lzdGVyIGludCBzLCBrLCByLCBsOwogCi0gICAgbmF0dXJhbF9vcmRlciA9IGNpbmZvLT5uYXR1cmFsX29yZGVyOwotICAgIFNlID0gY2luZm8tPmxpbV9TZTsKLQotICAgIC8qIExvYWQgdXAgd29ya2luZyBzdGF0ZSAqLwotICAgIEJJVFJFQURfTE9BRF9TVEFURShjaW5mbyxlbnRyb3B5LT5iaXRzdGF0ZSk7Ci0gICAgQVNTSUdOX1NUQVRFKHN0YXRlLCBlbnRyb3B5LT5zYXZlZCk7Ci0KLSAgICAvKiBPdXRlciBsb29wIGhhbmRsZXMgZWFjaCBibG9jayBpbiB0aGUgTUNVICovCi0KLSAgICBmb3IgKGJsa24gPSAwOyBibGtuIDwgY2luZm8tPmJsb2Nrc19pbl9NQ1U7IGJsa24rKykgewotICAgICAgSkJMT0NLUk9XIGJsb2NrID0gTUNVX2RhdGFbYmxrbl07Ci0gICAgICBkX2Rlcml2ZWRfdGJsICogaHRibDsKLSAgICAgIHJlZ2lzdGVyIGludCBzLCBrLCByOwotICAgICAgaW50IGNvZWZfbGltaXQsIGNpOwotCi0gICAgICAvKiBEZWNvZGUgYSBzaW5nbGUgYmxvY2sncyB3b3J0aCBvZiBjb2VmZmljaWVudHMgKi8KLQotICAgICAgLyogU2VjdGlvbiBGLjIuMi4xOiBkZWNvZGUgdGhlIERDIGNvZWZmaWNpZW50IGRpZmZlcmVuY2UgKi8KLSAgICAgIGh0YmwgPSBlbnRyb3B5LT5kY19jdXJfdGJsc1tibGtuXTsKLSAgICAgIEhVRkZfREVDT0RFKHMsIGJyX3N0YXRlLCBodGJsLCByZXR1cm4gRkFMU0UsIGxhYmVsMSk7Ci0KLSAgICAgIGh0YmwgPSBlbnRyb3B5LT5hY19jdXJfdGJsc1tibGtuXTsKLSAgICAgIGsgPSAxOwotICAgICAgY29lZl9saW1pdCA9IGVudHJvcHktPmNvZWZfbGltaXRbYmxrbl07Ci0gICAgICBpZiAoY29lZl9saW1pdCkgewotCS8qIENvbnZlcnQgREMgZGlmZmVyZW5jZSB0byBhY3R1YWwgdmFsdWUsIHVwZGF0ZSBsYXN0X2RjX3ZhbCAqLwotCWlmIChzKSB7Ci0JICBDSEVDS19CSVRfQlVGRkVSKGJyX3N0YXRlLCBzLCByZXR1cm4gRkFMU0UpOwotCSAgciA9IEdFVF9CSVRTKHMpOwotCSAgcyA9IEhVRkZfRVhURU5EKHIsIHMpOwotCX0KLQljaSA9IGNpbmZvLT5NQ1VfbWVtYmVyc2hpcFtibGtuXTsKLQlzICs9IHN0YXRlLmxhc3RfZGNfdmFsW2NpXTsKLQlzdGF0ZS5sYXN0X2RjX3ZhbFtjaV0gPSBzOwotCS8qIE91dHB1dCB0aGUgREMgY29lZmZpY2llbnQgKi8KLQkoKmJsb2NrKVswXSA9IChKQ09FRikgczsKLQotCS8qIFNlY3Rpb24gRi4yLjIuMjogZGVjb2RlIHRoZSBBQyBjb2VmZmljaWVudHMgKi8KLQkvKiBTaW5jZSB6ZXJvZXMgYXJlIHNraXBwZWQsIG91dHB1dCBhcmVhIG11c3QgYmUgY2xlYXJlZCBiZWZvcmVoYW5kICovCi0JZm9yICg7IGsgPCBjb2VmX2xpbWl0OyBrKyspIHsKLQkgIEhVRkZfREVDT0RFKHMsIGJyX3N0YXRlLCBodGJsLCByZXR1cm4gRkFMU0UsIGxhYmVsMik7Ci0KLQkgIHIgPSBzID4+IDQ7Ci0JICBzICY9IDE1OwotCi0JICBpZiAocykgewotCSAgICBrICs9IHI7Ci0JICAgIENIRUNLX0JJVF9CVUZGRVIoYnJfc3RhdGUsIHMsIHJldHVybiBGQUxTRSk7Ci0JICAgIHIgPSBHRVRfQklUUyhzKTsKLQkgICAgcyA9IEhVRkZfRVhURU5EKHIsIHMpOwotCSAgICAvKiBPdXRwdXQgY29lZmZpY2llbnQgaW4gbmF0dXJhbCAoZGV6aWd6YWdnZWQpIG9yZGVyLgotCSAgICAgKiBOb3RlOiB0aGUgZXh0cmEgZW50cmllcyBpbiBuYXR1cmFsX29yZGVyW10gd2lsbCBzYXZlIHVzCi0JICAgICAqIGlmIGsgPiBTZSwgd2hpY2ggY291bGQgaGFwcGVuIGlmIHRoZSBkYXRhIGlzIGNvcnJ1cHRlZC4KLQkgICAgICovCi0JICAgICgqYmxvY2spW25hdHVyYWxfb3JkZXJba11dID0gKEpDT0VGKSBzOwotCSAgfSBlbHNlIHsKLQkgICAgaWYgKHIgIT0gMTUpCi0JICAgICAgZ290byBFbmRPZkJsb2NrOwotCSAgICBrICs9IDE1OwotCSAgfQotCX0KLSAgICAgIH0gZWxzZSB7Ci0JaWYgKHMpIHsKLQkgIENIRUNLX0JJVF9CVUZGRVIoYnJfc3RhdGUsIHMsIHJldHVybiBGQUxTRSk7Ci0JICBEUk9QX0JJVFMocyk7Ci0JfQotICAgICAgfQotCi0gICAgICAvKiBTZWN0aW9uIEYuMi4yLjI6IGRlY29kZSB0aGUgQUMgY29lZmZpY2llbnRzICovCi0gICAgICAvKiBJbiB0aGlzIHBhdGggd2UganVzdCBkaXNjYXJkIHRoZSB2YWx1ZXMgKi8KLSAgICAgIGZvciAoOyBrIDw9IFNlOyBrKyspIHsKLQlIVUZGX0RFQ09ERShzLCBicl9zdGF0ZSwgaHRibCwgcmV0dXJuIEZBTFNFLCBsYWJlbDMpOwotCi0JciA9IHMgPj4gNDsKLQlzICY9IDE1OwotCi0JaWYgKHMpIHsKLQkgIGsgKz0gcjsKLQkgIENIRUNLX0JJVF9CVUZGRVIoYnJfc3RhdGUsIHMsIHJldHVybiBGQUxTRSk7Ci0JICBEUk9QX0JJVFMocyk7Ci0JfSBlbHNlIHsKLQkgIGlmIChyICE9IDE1KQotCSAgICBicmVhazsKLQkgIGsgKz0gMTU7Ci0JfQotICAgICAgfQotCi0gICAgICBFbmRPZkJsb2NrOiA7CisgICAgSFVGRl9ERUNPREVfRkFTVChzLCBsLCBkY3RibCk7CisgICAgaWYgKHMpIHsKKyAgICAgIEVOU1VSRV9TSE9SVAorICAgICAgciA9IEdFVF9CSVRTKHMpOworICAgICAgcyA9IEhVRkZfRVhURU5EKHIsIHMpOwogICAgIH0KIAotICAgIC8qIENvbXBsZXRlZCBNQ1UsIHNvIHVwZGF0ZSBzdGF0ZSAqLwotICAgIEJJVFJFQURfU0FWRV9TVEFURShjaW5mbyxlbnRyb3B5LT5iaXRzdGF0ZSk7Ci0gICAgQVNTSUdOX1NUQVRFKGVudHJvcHktPnNhdmVkLCBzdGF0ZSk7CisgICAgaWYgKGVudHJvcHktPmRjX25lZWRlZFtibGtuXSkgeworICAgICAgaW50IGNpID0gY2luZm8tPk1DVV9tZW1iZXJzaGlwW2Jsa25dOworICAgICAgcyArPSBzdGF0ZS5sYXN0X2RjX3ZhbFtjaV07CisgICAgICBzdGF0ZS5sYXN0X2RjX3ZhbFtjaV0gPSBzOworICAgICAgKCpibG9jaylbMF0gPSAoSkNPRUYpIHM7CisgICAgfQorCisgICAgaWYgKGVudHJvcHktPmFjX25lZWRlZFtibGtuXSkgeworCisgICAgICBmb3IgKGsgPSAxOyBrIDwgRENUU0laRTI7IGsrKykgeworICAgICAgICBIVUZGX0RFQ09ERV9GQVNUKHMsIGwsIGFjdGJsKTsKKyAgICAgICAgciA9IHMgPj4gNDsKKyAgICAgICAgcyAmPSAxNTsKKyAgICAgIAorICAgICAgICBpZiAocykgeworICAgICAgICAgIGsgKz0gcjsKKyAgICAgICAgICBFTlNVUkVfU0hPUlQKKyAgICAgICAgICByID0gR0VUX0JJVFMocyk7CisgICAgICAgICAgcyA9IEhVRkZfRVhURU5EKHIsIHMpOworICAgICAgICAgICgqYmxvY2spW2pwZWdfbmF0dXJhbF9vcmRlcltrXV0gPSAoSkNPRUYpIHM7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgaWYgKHIgIT0gMTUpIGJyZWFrOworICAgICAgICAgIGsgKz0gMTU7CisgICAgICAgIH0KKyAgICAgIH0KKworICAgIH0gZWxzZSB7CisKKyAgICAgIGZvciAoayA9IDE7IGsgPCBEQ1RTSVpFMjsgaysrKSB7CisgICAgICAgIEhVRkZfREVDT0RFX0ZBU1QocywgbCwgYWN0YmwpOworICAgICAgICByID0gcyA+PiA0OworICAgICAgICBzICY9IDE1OworCisgICAgICAgIGlmIChzKSB7CisgICAgICAgICAgayArPSByOworICAgICAgICAgIEVOU1VSRV9TSE9SVAorICAgICAgICAgIERST1BfQklUUyhzKTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICBpZiAociAhPSAxNSkgYnJlYWs7CisgICAgICAgICAgayArPSAxNTsKKyAgICAgICAgfQorICAgICAgfQorICAgIH0KICAgfQogCi0gIC8qIEFjY291bnQgZm9yIHJlc3RhcnQgaW50ZXJ2YWwgKG5vLW9wIGlmIG5vdCB1c2luZyByZXN0YXJ0cykgKi8KLSAgZW50cm9weS0+cmVzdGFydHNfdG9fZ28tLTsKKyAgaWYgKGNpbmZvLT51bnJlYWRfbWFya2VyICE9IDAgJiYgISBjaW5mby0+ZW50cm9weS0+aW5zdWZmaWNpZW50X2RhdGEpIHsKKyAgICBXQVJOTVMoY2luZm8sIEpXUk5fSElUX01BUktFUik7CisgICAgY2luZm8tPmVudHJvcHktPmluc3VmZmljaWVudF9kYXRhID0gVFJVRTsKKyAgfQogCisgIGJyX3N0YXRlLmJ5dGVzX2luX2J1ZmZlciAtPSAoYnVmZmVyIC0gYnJfc3RhdGUubmV4dF9pbnB1dF9ieXRlKTsKKyAgYnJfc3RhdGUubmV4dF9pbnB1dF9ieXRlID0gYnVmZmVyOworICBCSVRSRUFEX1NBVkVfU1RBVEUoY2luZm8sZW50cm9weS0+Yml0c3RhdGUpOworICBBU1NJR05fU1RBVEUoZW50cm9weS0+c2F2ZWQsIHN0YXRlKTsKICAgcmV0dXJuIFRSVUU7CiB9CiAKIAogLyoKLSAqIERlY29kZSBvbmUgTUNVJ3Mgd29ydGggb2YgSHVmZm1hbi1jb21wcmVzc2VkIGNvZWZmaWNpZW50cywKLSAqIGZ1bGwtc2l6ZSBibG9ja3MuCisgKiBEZWNvZGUgYW5kIHJldHVybiBvbmUgTUNVJ3Mgd29ydGggb2YgSHVmZm1hbi1jb21wcmVzc2VkIGNvZWZmaWNpZW50cy4KKyAqIFRoZSBjb2VmZmljaWVudHMgYXJlIHJlb3JkZXJlZCBmcm9tIHppZ3phZyBvcmRlciBpbnRvIG5hdHVyYWwgYXJyYXkgb3JkZXIsCisgKiBidXQgYXJlIG5vdCBkZXF1YW50aXplZC4KKyAqCisgKiBUaGUgaSd0aCBibG9jayBvZiB0aGUgTUNVIGlzIHN0b3JlZCBpbnRvIHRoZSBibG9jayBwb2ludGVkIHRvIGJ5CisgKiBNQ1VfZGF0YVtpXS4gIFdFIEFTU1VNRSBUSElTIEFSRUEgSEFTIEJFRU4gWkVST0VEIEJZIFRIRSBDQUxMRVIuCisgKiAoV2hvbGVzYWxlIHplcm9pbmcgaXMgdXN1YWxseSBhIGxpdHRsZSBmYXN0ZXIgdGhhbiByZXRhaWwuLi4pCisgKgorICogUmV0dXJucyBGQUxTRSBpZiBkYXRhIHNvdXJjZSByZXF1ZXN0ZWQgc3VzcGVuc2lvbi4gIEluIHRoYXQgY2FzZSBubworICogY2hhbmdlcyBoYXZlIGJlZW4gbWFkZSB0byBwZXJtYW5lbnQgc3RhdGUuICAoRXhjZXB0aW9uOiBzb21lIG91dHB1dAorICogY29lZmZpY2llbnRzIG1heSBhbHJlYWR5IGhhdmUgYmVlbiBhc3NpZ25lZC4gIFRoaXMgaXMgaGFybWxlc3MgZm9yCisgKiB0aGlzIG1vZHVsZSwgc2luY2Ugd2UnbGwganVzdCByZS1hc3NpZ24gdGhlbSBvbiB0aGUgbmV4dCBjYWxsLikKICAqLwogCisjZGVmaW5lIEJVRlNJWkUgKERDVFNJWkUyICogMikKKwogTUVUSE9EREVGKGJvb2xlYW4pCiBkZWNvZGVfbWN1IChqX2RlY29tcHJlc3NfcHRyIGNpbmZvLCBKQkxPQ0tST1cgKk1DVV9kYXRhKQogewogICBodWZmX2VudHJvcHlfcHRyIGVudHJvcHkgPSAoaHVmZl9lbnRyb3B5X3B0cikgY2luZm8tPmVudHJvcHk7Ci0gIGludCBibGtuOwotICBCSVRSRUFEX1NUQVRFX1ZBUlM7Ci0gIHNhdmFibGVfc3RhdGUgc3RhdGU7CisgIGludCB1c2VmYXN0ID0gMTsKIAogICAvKiBQcm9jZXNzIHJlc3RhcnQgbWFya2VyIGlmIG5lZWRlZDsgbWF5IGhhdmUgdG8gc3VzcGVuZCAqLwogICBpZiAoY2luZm8tPnJlc3RhcnRfaW50ZXJ2YWwpIHsKICAgICBpZiAoZW50cm9weS0+cmVzdGFydHNfdG9fZ28gPT0gMCkKICAgICAgIGlmICghIHByb2Nlc3NfcmVzdGFydChjaW5mbykpCiAJcmV0dXJuIEZBTFNFOworICAgIHVzZWZhc3QgPSAwOwogICB9CiAKKyAgaWYgKGNpbmZvLT5zcmMtPmJ5dGVzX2luX2J1ZmZlciA8IEJVRlNJWkUgKiBjaW5mby0+YmxvY2tzX2luX01DVSkKKyAgICB1c2VmYXN0ID0gMDsKKwogICAvKiBJZiB3ZSd2ZSBydW4gb3V0IG9mIGRhdGEsIGp1c3QgbGVhdmUgdGhlIE1DVSBzZXQgdG8gemVyb2VzLgogICAgKiBUaGlzIHdheSwgd2UgcmV0dXJuIHVuaWZvcm0gZ3JheSBmb3IgdGhlIHJlbWFpbmRlciBvZiB0aGUgc2VnbWVudC4KICAgICovCi0gIGlmICghIGVudHJvcHktPmluc3VmZmljaWVudF9kYXRhKSB7CisgIGlmICghIGVudHJvcHktPnB1Yi5pbnN1ZmZpY2llbnRfZGF0YSkgewogCi0gICAgLyogTG9hZCB1cCB3b3JraW5nIHN0YXRlICovCi0gICAgQklUUkVBRF9MT0FEX1NUQVRFKGNpbmZvLGVudHJvcHktPmJpdHN0YXRlKTsKLSAgICBBU1NJR05fU1RBVEUoc3RhdGUsIGVudHJvcHktPnNhdmVkKTsKLQotICAgIC8qIE91dGVyIGxvb3AgaGFuZGxlcyBlYWNoIGJsb2NrIGluIHRoZSBNQ1UgKi8KLQotICAgIGZvciAoYmxrbiA9IDA7IGJsa24gPCBjaW5mby0+YmxvY2tzX2luX01DVTsgYmxrbisrKSB7Ci0gICAgICBKQkxPQ0tST1cgYmxvY2sgPSBNQ1VfZGF0YVtibGtuXTsKLSAgICAgIGRfZGVyaXZlZF90YmwgKiBodGJsOwotICAgICAgcmVnaXN0ZXIgaW50IHMsIGssIHI7Ci0gICAgICBpbnQgY29lZl9saW1pdCwgY2k7Ci0KLSAgICAgIC8qIERlY29kZSBhIHNpbmdsZSBibG9jaydzIHdvcnRoIG9mIGNvZWZmaWNpZW50cyAqLwotCi0gICAgICAvKiBTZWN0aW9uIEYuMi4yLjE6IGRlY29kZSB0aGUgREMgY29lZmZpY2llbnQgZGlmZmVyZW5jZSAqLwotICAgICAgaHRibCA9IGVudHJvcHktPmRjX2N1cl90YmxzW2Jsa25dOwotICAgICAgSFVGRl9ERUNPREUocywgYnJfc3RhdGUsIGh0YmwsIHJldHVybiBGQUxTRSwgbGFiZWwxKTsKLQotICAgICAgaHRibCA9IGVudHJvcHktPmFjX2N1cl90YmxzW2Jsa25dOwotICAgICAgayA9IDE7Ci0gICAgICBjb2VmX2xpbWl0ID0gZW50cm9weS0+Y29lZl9saW1pdFtibGtuXTsKLSAgICAgIGlmIChjb2VmX2xpbWl0KSB7Ci0JLyogQ29udmVydCBEQyBkaWZmZXJlbmNlIHRvIGFjdHVhbCB2YWx1ZSwgdXBkYXRlIGxhc3RfZGNfdmFsICovCi0JaWYgKHMpIHsKLQkgIENIRUNLX0JJVF9CVUZGRVIoYnJfc3RhdGUsIHMsIHJldHVybiBGQUxTRSk7Ci0JICByID0gR0VUX0JJVFMocyk7Ci0JICBzID0gSFVGRl9FWFRFTkQociwgcyk7Ci0JfQotCWNpID0gY2luZm8tPk1DVV9tZW1iZXJzaGlwW2Jsa25dOwotCXMgKz0gc3RhdGUubGFzdF9kY192YWxbY2ldOwotCXN0YXRlLmxhc3RfZGNfdmFsW2NpXSA9IHM7Ci0JLyogT3V0cHV0IHRoZSBEQyBjb2VmZmljaWVudCAqLwotCSgqYmxvY2spWzBdID0gKEpDT0VGKSBzOwotCi0JLyogU2VjdGlvbiBGLjIuMi4yOiBkZWNvZGUgdGhlIEFDIGNvZWZmaWNpZW50cyAqLwotCS8qIFNpbmNlIHplcm9lcyBhcmUgc2tpcHBlZCwgb3V0cHV0IGFyZWEgbXVzdCBiZSBjbGVhcmVkIGJlZm9yZWhhbmQgKi8KLQlmb3IgKDsgayA8IGNvZWZfbGltaXQ7IGsrKykgewotCSAgSFVGRl9ERUNPREUocywgYnJfc3RhdGUsIGh0YmwsIHJldHVybiBGQUxTRSwgbGFiZWwyKTsKLQotCSAgciA9IHMgPj4gNDsKLQkgIHMgJj0gMTU7Ci0KLQkgIGlmIChzKSB7Ci0JICAgIGsgKz0gcjsKLQkgICAgQ0hFQ0tfQklUX0JVRkZFUihicl9zdGF0ZSwgcywgcmV0dXJuIEZBTFNFKTsKLQkgICAgciA9IEdFVF9CSVRTKHMpOwotCSAgICBzID0gSFVGRl9FWFRFTkQociwgcyk7Ci0JICAgIC8qIE91dHB1dCBjb2VmZmljaWVudCBpbiBuYXR1cmFsIChkZXppZ3phZ2dlZCkgb3JkZXIuCi0JICAgICAqIE5vdGU6IHRoZSBleHRyYSBlbnRyaWVzIGluIGpwZWdfbmF0dXJhbF9vcmRlcltdIHdpbGwgc2F2ZSB1cwotCSAgICAgKiBpZiBrID49IERDVFNJWkUyLCB3aGljaCBjb3VsZCBoYXBwZW4gaWYgdGhlIGRhdGEgaXMgY29ycnVwdGVkLgotCSAgICAgKi8KLQkgICAgKCpibG9jaylbanBlZ19uYXR1cmFsX29yZGVyW2tdXSA9IChKQ09FRikgczsKLQkgIH0gZWxzZSB7Ci0JICAgIGlmIChyICE9IDE1KQotCSAgICAgIGdvdG8gRW5kT2ZCbG9jazsKLQkgICAgayArPSAxNTsKLQkgIH0KLQl9Ci0gICAgICB9IGVsc2UgewotCWlmIChzKSB7Ci0JICBDSEVDS19CSVRfQlVGRkVSKGJyX3N0YXRlLCBzLCByZXR1cm4gRkFMU0UpOwotCSAgRFJPUF9CSVRTKHMpOwotCX0KLSAgICAgIH0KLQotICAgICAgLyogU2VjdGlvbiBGLjIuMi4yOiBkZWNvZGUgdGhlIEFDIGNvZWZmaWNpZW50cyAqLwotICAgICAgLyogSW4gdGhpcyBwYXRoIHdlIGp1c3QgZGlzY2FyZCB0aGUgdmFsdWVzICovCi0gICAgICBmb3IgKDsgayA8IERDVFNJWkUyOyBrKyspIHsKLQlIVUZGX0RFQ09ERShzLCBicl9zdGF0ZSwgaHRibCwgcmV0dXJuIEZBTFNFLCBsYWJlbDMpOwotCi0JciA9IHMgPj4gNDsKLQlzICY9IDE1OwotCi0JaWYgKHMpIHsKLQkgIGsgKz0gcjsKLQkgIENIRUNLX0JJVF9CVUZGRVIoYnJfc3RhdGUsIHMsIHJldHVybiBGQUxTRSk7Ci0JICBEUk9QX0JJVFMocyk7Ci0JfSBlbHNlIHsKLQkgIGlmIChyICE9IDE1KQotCSAgICBicmVhazsKLQkgIGsgKz0gMTU7Ci0JfQotICAgICAgfQotCi0gICAgICBFbmRPZkJsb2NrOiA7CisgICAgaWYgKHVzZWZhc3QpIHsKKyAgICAgIGlmICghZGVjb2RlX21jdV9mYXN0KGNpbmZvLCBNQ1VfZGF0YSkpIHJldHVybiBGQUxTRTsKKyAgICB9CisgICAgZWxzZSB7CisgICAgICBpZiAoIWRlY29kZV9tY3Vfc2xvdyhjaW5mbywgTUNVX2RhdGEpKSByZXR1cm4gRkFMU0U7CiAgICAgfQogCi0gICAgLyogQ29tcGxldGVkIE1DVSwgc28gdXBkYXRlIHN0YXRlICovCi0gICAgQklUUkVBRF9TQVZFX1NUQVRFKGNpbmZvLGVudHJvcHktPmJpdHN0YXRlKTsKLSAgICBBU1NJR05fU1RBVEUoZW50cm9weS0+c2F2ZWQsIHN0YXRlKTsKICAgfQogCiAgIC8qIEFjY291bnQgZm9yIHJlc3RhcnQgaW50ZXJ2YWwgKG5vLW9wIGlmIG5vdCB1c2luZyByZXN0YXJ0cykgKi8KQEAgLTEzMDMsMjA1ICs4MDksNiBAQAogCiAKIC8qCi0gKiBJbml0aWFsaXplIGZvciBhIEh1ZmZtYW4tY29tcHJlc3NlZCBzY2FuLgotICovCi0KLU1FVEhPRERFRih2b2lkKQotc3RhcnRfcGFzc19odWZmX2RlY29kZXIgKGpfZGVjb21wcmVzc19wdHIgY2luZm8pCi17Ci0gIGh1ZmZfZW50cm9weV9wdHIgZW50cm9weSA9IChodWZmX2VudHJvcHlfcHRyKSBjaW5mby0+ZW50cm9weTsKLSAgaW50IGNpLCBibGtuLCB0YmwsIGk7Ci0gIGpwZWdfY29tcG9uZW50X2luZm8gKiBjb21wcHRyOwotCi0gIGlmIChjaW5mby0+cHJvZ3Jlc3NpdmVfbW9kZSkgewotICAgIC8qIFZhbGlkYXRlIHByb2dyZXNzaXZlIHNjYW4gcGFyYW1ldGVycyAqLwotICAgIGlmIChjaW5mby0+U3MgPT0gMCkgewotICAgICAgaWYgKGNpbmZvLT5TZSAhPSAwKQotCWdvdG8gYmFkOwotICAgIH0gZWxzZSB7Ci0gICAgICAvKiBuZWVkIG5vdCBjaGVjayBTcy9TZSA8IDAgc2luY2UgdGhleSBjYW1lIGZyb20gdW5zaWduZWQgYnl0ZXMgKi8KLSAgICAgIGlmIChjaW5mby0+U2UgPCBjaW5mby0+U3MgfHwgY2luZm8tPlNlID4gY2luZm8tPmxpbV9TZSkKLQlnb3RvIGJhZDsKLSAgICAgIC8qIEFDIHNjYW5zIG1heSBoYXZlIG9ubHkgb25lIGNvbXBvbmVudCAqLwotICAgICAgaWYgKGNpbmZvLT5jb21wc19pbl9zY2FuICE9IDEpCi0JZ290byBiYWQ7Ci0gICAgfQotICAgIGlmIChjaW5mby0+QWggIT0gMCkgewotICAgICAgLyogU3VjY2Vzc2l2ZSBhcHByb3hpbWF0aW9uIHJlZmluZW1lbnQgc2NhbjogbXVzdCBoYXZlIEFsID0gQWgtMS4gKi8KLSAgICAgIGlmIChjaW5mby0+QWgtMSAhPSBjaW5mby0+QWwpCi0JZ290byBiYWQ7Ci0gICAgfQotICAgIGlmIChjaW5mby0+QWwgPiAxMykgewkvKiBuZWVkIG5vdCBjaGVjayBmb3IgPCAwICovCi0gICAgICAvKiBBcmd1YWJseSB0aGUgbWF4aW11bSBBbCB2YWx1ZSBzaG91bGQgYmUgbGVzcyB0aGFuIDEzIGZvciA4LWJpdCBwcmVjaXNpb24sCi0gICAgICAgKiBidXQgdGhlIHNwZWMgZG9lc24ndCBzYXkgc28sIGFuZCB3ZSB0cnkgdG8gYmUgbGliZXJhbCBhYm91dCB3aGF0IHdlCi0gICAgICAgKiBhY2NlcHQuICBOb3RlOiBsYXJnZSBBbCB2YWx1ZXMgY291bGQgcmVzdWx0IGluIG91dC1vZi1yYW5nZSBEQwotICAgICAgICogY29lZmZpY2llbnRzIGR1cmluZyBlYXJseSBzY2FucywgbGVhZGluZyB0byBiaXphcnJlIGRpc3BsYXlzIGR1ZSB0bwotICAgICAgICogb3ZlcmZsb3dzIGluIHRoZSBJRENUIG1hdGguICBCdXQgd2Ugd29uJ3QgY3Jhc2guCi0gICAgICAgKi8KLSAgICAgIGJhZDoKLSAgICAgIEVSUkVYSVQ0KGNpbmZvLCBKRVJSX0JBRF9QUk9HUkVTU0lPTiwKLQkgICAgICAgY2luZm8tPlNzLCBjaW5mby0+U2UsIGNpbmZvLT5BaCwgY2luZm8tPkFsKTsKLSAgICB9Ci0gICAgLyogVXBkYXRlIHByb2dyZXNzaW9uIHN0YXR1cywgYW5kIHZlcmlmeSB0aGF0IHNjYW4gb3JkZXIgaXMgbGVnYWwuCi0gICAgICogTm90ZSB0aGF0IGludGVyLXNjYW4gaW5jb25zaXN0ZW5jaWVzIGFyZSB0cmVhdGVkIGFzIHdhcm5pbmdzCi0gICAgICogbm90IGZhdGFsIGVycm9ycyAuLi4gbm90IGNsZWFyIGlmIHRoaXMgaXMgcmlnaHQgd2F5IHRvIGJlaGF2ZS4KLSAgICAgKi8KLSAgICBmb3IgKGNpID0gMDsgY2kgPCBjaW5mby0+Y29tcHNfaW5fc2NhbjsgY2krKykgewotICAgICAgaW50IGNvZWZpLCBjaW5kZXggPSBjaW5mby0+Y3VyX2NvbXBfaW5mb1tjaV0tPmNvbXBvbmVudF9pbmRleDsKLSAgICAgIGludCAqY29lZl9iaXRfcHRyID0gJiBjaW5mby0+Y29lZl9iaXRzW2NpbmRleF1bMF07Ci0gICAgICBpZiAoY2luZm8tPlNzICYmIGNvZWZfYml0X3B0clswXSA8IDApIC8qIEFDIHdpdGhvdXQgcHJpb3IgREMgc2NhbiAqLwotCVdBUk5NUzIoY2luZm8sIEpXUk5fQk9HVVNfUFJPR1JFU1NJT04sIGNpbmRleCwgMCk7Ci0gICAgICBmb3IgKGNvZWZpID0gY2luZm8tPlNzOyBjb2VmaSA8PSBjaW5mby0+U2U7IGNvZWZpKyspIHsKLQlpbnQgZXhwZWN0ZWQgPSAoY29lZl9iaXRfcHRyW2NvZWZpXSA8IDApID8gMCA6IGNvZWZfYml0X3B0cltjb2VmaV07Ci0JaWYgKGNpbmZvLT5BaCAhPSBleHBlY3RlZCkKLQkgIFdBUk5NUzIoY2luZm8sIEpXUk5fQk9HVVNfUFJPR1JFU1NJT04sIGNpbmRleCwgY29lZmkpOwotCWNvZWZfYml0X3B0cltjb2VmaV0gPSBjaW5mby0+QWw7Ci0gICAgICB9Ci0gICAgfQotCi0gICAgLyogU2VsZWN0IE1DVSBkZWNvZGluZyByb3V0aW5lICovCi0gICAgaWYgKGNpbmZvLT5BaCA9PSAwKSB7Ci0gICAgICBpZiAoY2luZm8tPlNzID09IDApCi0JZW50cm9weS0+cHViLmRlY29kZV9tY3UgPSBkZWNvZGVfbWN1X0RDX2ZpcnN0OwotICAgICAgZWxzZQotCWVudHJvcHktPnB1Yi5kZWNvZGVfbWN1ID0gZGVjb2RlX21jdV9BQ19maXJzdDsKLSAgICB9IGVsc2UgewotICAgICAgaWYgKGNpbmZvLT5TcyA9PSAwKQotCWVudHJvcHktPnB1Yi5kZWNvZGVfbWN1ID0gZGVjb2RlX21jdV9EQ19yZWZpbmU7Ci0gICAgICBlbHNlCi0JZW50cm9weS0+cHViLmRlY29kZV9tY3UgPSBkZWNvZGVfbWN1X0FDX3JlZmluZTsKLSAgICB9Ci0KLSAgICBmb3IgKGNpID0gMDsgY2kgPCBjaW5mby0+Y29tcHNfaW5fc2NhbjsgY2krKykgewotICAgICAgY29tcHB0ciA9IGNpbmZvLT5jdXJfY29tcF9pbmZvW2NpXTsKLSAgICAgIC8qIE1ha2Ugc3VyZSByZXF1ZXN0ZWQgdGFibGVzIGFyZSBwcmVzZW50LCBhbmQgY29tcHV0ZSBkZXJpdmVkIHRhYmxlcy4KLSAgICAgICAqIFdlIG1heSBidWlsZCBzYW1lIGRlcml2ZWQgdGFibGUgbW9yZSB0aGFuIG9uY2UsIGJ1dCBpdCdzIG5vdCBleHBlbnNpdmUuCi0gICAgICAgKi8KLSAgICAgIGlmIChjaW5mby0+U3MgPT0gMCkgewotCWlmIChjaW5mby0+QWggPT0gMCkgewkvKiBEQyByZWZpbmVtZW50IG5lZWRzIG5vIHRhYmxlICovCi0JICB0YmwgPSBjb21wcHRyLT5kY190Ymxfbm87Ci0JICBqcGVnX21ha2VfZF9kZXJpdmVkX3RibChjaW5mbywgVFJVRSwgdGJsLAotCQkJCSAgJiBlbnRyb3B5LT5kZXJpdmVkX3RibHNbdGJsXSk7Ci0JfQotICAgICAgfSBlbHNlIHsKLQl0YmwgPSBjb21wcHRyLT5hY190Ymxfbm87Ci0JanBlZ19tYWtlX2RfZGVyaXZlZF90YmwoY2luZm8sIEZBTFNFLCB0YmwsCi0JCQkJJiBlbnRyb3B5LT5kZXJpdmVkX3RibHNbdGJsXSk7Ci0JLyogcmVtZW1iZXIgdGhlIHNpbmdsZSBhY3RpdmUgdGFibGUgKi8KLQllbnRyb3B5LT5hY19kZXJpdmVkX3RibCA9IGVudHJvcHktPmRlcml2ZWRfdGJsc1t0YmxdOwotICAgICAgfQotICAgICAgLyogSW5pdGlhbGl6ZSBEQyBwcmVkaWN0aW9ucyB0byAwICovCi0gICAgICBlbnRyb3B5LT5zYXZlZC5sYXN0X2RjX3ZhbFtjaV0gPSAwOwotICAgIH0KLQotICAgIC8qIEluaXRpYWxpemUgcHJpdmF0ZSBzdGF0ZSB2YXJpYWJsZXMgKi8KLSAgICBlbnRyb3B5LT5zYXZlZC5FT0JSVU4gPSAwOwotICB9IGVsc2UgewotICAgIC8qIENoZWNrIHRoYXQgdGhlIHNjYW4gcGFyYW1ldGVycyBTcywgU2UsIEFoL0FsIGFyZSBPSyBmb3Igc2VxdWVudGlhbCBKUEVHLgotICAgICAqIFRoaXMgb3VnaHQgdG8gYmUgYW4gZXJyb3IgY29uZGl0aW9uLCBidXQgd2UgbWFrZSBpdCBhIHdhcm5pbmcgYmVjYXVzZQotICAgICAqIHRoZXJlIGFyZSBzb21lIGJhc2VsaW5lIGZpbGVzIG91dCB0aGVyZSB3aXRoIGFsbCB6ZXJvZXMgaW4gdGhlc2UgYnl0ZXMuCi0gICAgICovCi0gICAgaWYgKGNpbmZvLT5TcyAhPSAwIHx8IGNpbmZvLT5BaCAhPSAwIHx8IGNpbmZvLT5BbCAhPSAwIHx8Ci0JKChjaW5mby0+aXNfYmFzZWxpbmUgfHwgY2luZm8tPlNlIDwgRENUU0laRTIpICYmCi0JY2luZm8tPlNlICE9IGNpbmZvLT5saW1fU2UpKQotICAgICAgV0FSTk1TKGNpbmZvLCBKV1JOX05PVF9TRVFVRU5USUFMKTsKLQotICAgIC8qIFNlbGVjdCBNQ1UgZGVjb2Rpbmcgcm91dGluZSAqLwotICAgIC8qIFdlIHJldGFpbiB0aGUgaGFyZC1jb2RlZCBjYXNlIGZvciBmdWxsLXNpemUgYmxvY2tzLgotICAgICAqIFRoaXMgaXMgbm90IG5lY2Vzc2FyeSwgYnV0IGl0IGFwcGVhcnMgdGhhdCB0aGlzIHZlcnNpb24gaXMgc2xpZ2h0bHkKLSAgICAgKiBtb3JlIHBlcmZvcm1hbnQgaW4gdGhlIGdpdmVuIGltcGxlbWVudGF0aW9uLgotICAgICAqIFdpdGggYW4gaW1wcm92ZWQgaW1wbGVtZW50YXRpb24gd2Ugd291bGQgcHJlZmVyIGEgc2luZ2xlIG9wdGltaXplZAotICAgICAqIGZ1bmN0aW9uLgotICAgICAqLwotICAgIGlmIChjaW5mby0+bGltX1NlICE9IERDVFNJWkUyLTEpCi0gICAgICBlbnRyb3B5LT5wdWIuZGVjb2RlX21jdSA9IGRlY29kZV9tY3Vfc3ViOwotICAgIGVsc2UKLSAgICAgIGVudHJvcHktPnB1Yi5kZWNvZGVfbWN1ID0gZGVjb2RlX21jdTsKLQotICAgIGZvciAoY2kgPSAwOyBjaSA8IGNpbmZvLT5jb21wc19pbl9zY2FuOyBjaSsrKSB7Ci0gICAgICBjb21wcHRyID0gY2luZm8tPmN1cl9jb21wX2luZm9bY2ldOwotICAgICAgLyogQ29tcHV0ZSBkZXJpdmVkIHZhbHVlcyBmb3IgSHVmZm1hbiB0YWJsZXMgKi8KLSAgICAgIC8qIFdlIG1heSBkbyB0aGlzIG1vcmUgdGhhbiBvbmNlIGZvciBhIHRhYmxlLCBidXQgaXQncyBub3QgZXhwZW5zaXZlICovCi0gICAgICB0YmwgPSBjb21wcHRyLT5kY190Ymxfbm87Ci0gICAgICBqcGVnX21ha2VfZF9kZXJpdmVkX3RibChjaW5mbywgVFJVRSwgdGJsLAotCQkJICAgICAgJiBlbnRyb3B5LT5kY19kZXJpdmVkX3RibHNbdGJsXSk7Ci0gICAgICBpZiAoY2luZm8tPmxpbV9TZSkgewkvKiBBQyBuZWVkcyBubyB0YWJsZSB3aGVuIG5vdCBwcmVzZW50ICovCi0JdGJsID0gY29tcHB0ci0+YWNfdGJsX25vOwotCWpwZWdfbWFrZV9kX2Rlcml2ZWRfdGJsKGNpbmZvLCBGQUxTRSwgdGJsLAotCQkJCSYgZW50cm9weS0+YWNfZGVyaXZlZF90YmxzW3RibF0pOwotICAgICAgfQotICAgICAgLyogSW5pdGlhbGl6ZSBEQyBwcmVkaWN0aW9ucyB0byAwICovCi0gICAgICBlbnRyb3B5LT5zYXZlZC5sYXN0X2RjX3ZhbFtjaV0gPSAwOwotICAgIH0KLQotICAgIC8qIFByZWNhbGN1bGF0ZSBkZWNvZGluZyBpbmZvIGZvciBlYWNoIGJsb2NrIGluIGFuIE1DVSBvZiB0aGlzIHNjYW4gKi8KLSAgICBmb3IgKGJsa24gPSAwOyBibGtuIDwgY2luZm8tPmJsb2Nrc19pbl9NQ1U7IGJsa24rKykgewotICAgICAgY2kgPSBjaW5mby0+TUNVX21lbWJlcnNoaXBbYmxrbl07Ci0gICAgICBjb21wcHRyID0gY2luZm8tPmN1cl9jb21wX2luZm9bY2ldOwotICAgICAgLyogUHJlY2FsY3VsYXRlIHdoaWNoIHRhYmxlIHRvIHVzZSBmb3IgZWFjaCBibG9jayAqLwotICAgICAgZW50cm9weS0+ZGNfY3VyX3RibHNbYmxrbl0gPSBlbnRyb3B5LT5kY19kZXJpdmVkX3RibHNbY29tcHB0ci0+ZGNfdGJsX25vXTsKLSAgICAgIGVudHJvcHktPmFjX2N1cl90YmxzW2Jsa25dID0gZW50cm9weS0+YWNfZGVyaXZlZF90YmxzW2NvbXBwdHItPmFjX3RibF9ub107Ci0gICAgICAvKiBEZWNpZGUgd2hldGhlciB3ZSByZWFsbHkgY2FyZSBhYm91dCB0aGUgY29lZmZpY2llbnQgdmFsdWVzICovCi0gICAgICBpZiAoY29tcHB0ci0+Y29tcG9uZW50X25lZWRlZCkgewotCWNpID0gY29tcHB0ci0+RENUX3Zfc2NhbGVkX3NpemU7Ci0JaSA9IGNvbXBwdHItPkRDVF9oX3NjYWxlZF9zaXplOwotCXN3aXRjaCAoY2luZm8tPmxpbV9TZSkgewotCWNhc2UgKDEqMS0xKToKLQkgIGVudHJvcHktPmNvZWZfbGltaXRbYmxrbl0gPSAxOwotCSAgYnJlYWs7Ci0JY2FzZSAoMioyLTEpOgotCSAgaWYgKGNpIDw9IDAgfHwgY2kgPiAyKSBjaSA9IDI7Ci0JICBpZiAoaSA8PSAwIHx8IGkgPiAyKSBpID0gMjsKLQkgIGVudHJvcHktPmNvZWZfbGltaXRbYmxrbl0gPSAxICsganBlZ196aWd6YWdfb3JkZXIyW2NpIC0gMV1baSAtIDFdOwotCSAgYnJlYWs7Ci0JY2FzZSAoMyozLTEpOgotCSAgaWYgKGNpIDw9IDAgfHwgY2kgPiAzKSBjaSA9IDM7Ci0JICBpZiAoaSA8PSAwIHx8IGkgPiAzKSBpID0gMzsKLQkgIGVudHJvcHktPmNvZWZfbGltaXRbYmxrbl0gPSAxICsganBlZ196aWd6YWdfb3JkZXIzW2NpIC0gMV1baSAtIDFdOwotCSAgYnJlYWs7Ci0JY2FzZSAoNCo0LTEpOgotCSAgaWYgKGNpIDw9IDAgfHwgY2kgPiA0KSBjaSA9IDQ7Ci0JICBpZiAoaSA8PSAwIHx8IGkgPiA0KSBpID0gNDsKLQkgIGVudHJvcHktPmNvZWZfbGltaXRbYmxrbl0gPSAxICsganBlZ196aWd6YWdfb3JkZXI0W2NpIC0gMV1baSAtIDFdOwotCSAgYnJlYWs7Ci0JY2FzZSAoNSo1LTEpOgotCSAgaWYgKGNpIDw9IDAgfHwgY2kgPiA1KSBjaSA9IDU7Ci0JICBpZiAoaSA8PSAwIHx8IGkgPiA1KSBpID0gNTsKLQkgIGVudHJvcHktPmNvZWZfbGltaXRbYmxrbl0gPSAxICsganBlZ196aWd6YWdfb3JkZXI1W2NpIC0gMV1baSAtIDFdOwotCSAgYnJlYWs7Ci0JY2FzZSAoNio2LTEpOgotCSAgaWYgKGNpIDw9IDAgfHwgY2kgPiA2KSBjaSA9IDY7Ci0JICBpZiAoaSA8PSAwIHx8IGkgPiA2KSBpID0gNjsKLQkgIGVudHJvcHktPmNvZWZfbGltaXRbYmxrbl0gPSAxICsganBlZ196aWd6YWdfb3JkZXI2W2NpIC0gMV1baSAtIDFdOwotCSAgYnJlYWs7Ci0JY2FzZSAoNyo3LTEpOgotCSAgaWYgKGNpIDw9IDAgfHwgY2kgPiA3KSBjaSA9IDc7Ci0JICBpZiAoaSA8PSAwIHx8IGkgPiA3KSBpID0gNzsKLQkgIGVudHJvcHktPmNvZWZfbGltaXRbYmxrbl0gPSAxICsganBlZ196aWd6YWdfb3JkZXI3W2NpIC0gMV1baSAtIDFdOwotCSAgYnJlYWs7Ci0JZGVmYXVsdDoKLQkgIGlmIChjaSA8PSAwIHx8IGNpID4gOCkgY2kgPSA4OwotCSAgaWYgKGkgPD0gMCB8fCBpID4gOCkgaSA9IDg7Ci0JICBlbnRyb3B5LT5jb2VmX2xpbWl0W2Jsa25dID0gMSArIGpwZWdfemlnemFnX29yZGVyW2NpIC0gMV1baSAtIDFdOwotCSAgYnJlYWs7Ci0JfQotICAgICAgfSBlbHNlIHsKLQllbnRyb3B5LT5jb2VmX2xpbWl0W2Jsa25dID0gMDsKLSAgICAgIH0KLSAgICB9Ci0gIH0KLQotICAvKiBJbml0aWFsaXplIGJpdHJlYWQgc3RhdGUgdmFyaWFibGVzICovCi0gIGVudHJvcHktPmJpdHN0YXRlLmJpdHNfbGVmdCA9IDA7Ci0gIGVudHJvcHktPmJpdHN0YXRlLmdldF9idWZmZXIgPSAwOyAvKiB1bm5lY2Vzc2FyeSwgYnV0IGtlZXBzIFB1cmlmeSBxdWlldCAqLwotICBlbnRyb3B5LT5pbnN1ZmZpY2llbnRfZGF0YSA9IEZBTFNFOwotCi0gIC8qIEluaXRpYWxpemUgcmVzdGFydCBjb3VudGVyICovCi0gIGVudHJvcHktPnJlc3RhcnRzX3RvX2dvID0gY2luZm8tPnJlc3RhcnRfaW50ZXJ2YWw7Ci19Ci0KLQotLyoKICAqIE1vZHVsZSBpbml0aWFsaXphdGlvbiByb3V0aW5lIGZvciBIdWZmbWFuIGVudHJvcHkgZGVjb2RpbmcuCiAgKi8KIApAQCAtMTUxNiwyNiArODIzLDEwIEBACiAJCQkJU0laRU9GKGh1ZmZfZW50cm9weV9kZWNvZGVyKSk7CiAgIGNpbmZvLT5lbnRyb3B5ID0gKHN0cnVjdCBqcGVnX2VudHJvcHlfZGVjb2RlciAqKSBlbnRyb3B5OwogICBlbnRyb3B5LT5wdWIuc3RhcnRfcGFzcyA9IHN0YXJ0X3Bhc3NfaHVmZl9kZWNvZGVyOworICBlbnRyb3B5LT5wdWIuZGVjb2RlX21jdSA9IGRlY29kZV9tY3U7CiAKLSAgaWYgKGNpbmZvLT5wcm9ncmVzc2l2ZV9tb2RlKSB7Ci0gICAgLyogQ3JlYXRlIHByb2dyZXNzaW9uIHN0YXR1cyB0YWJsZSAqLwotICAgIGludCAqY29lZl9iaXRfcHRyLCBjaTsKLSAgICBjaW5mby0+Y29lZl9iaXRzID0gKGludCAoKilbRENUU0laRTJdKQotICAgICAgKCpjaW5mby0+bWVtLT5hbGxvY19zbWFsbCkgKChqX2NvbW1vbl9wdHIpIGNpbmZvLCBKUE9PTF9JTUFHRSwKLQkJCQkgIGNpbmZvLT5udW1fY29tcG9uZW50cypEQ1RTSVpFMipTSVpFT0YoaW50KSk7Ci0gICAgY29lZl9iaXRfcHRyID0gJiBjaW5mby0+Y29lZl9iaXRzWzBdWzBdOwotICAgIGZvciAoY2kgPSAwOyBjaSA8IGNpbmZvLT5udW1fY29tcG9uZW50czsgY2krKykKLSAgICAgIGZvciAoaSA9IDA7IGkgPCBEQ1RTSVpFMjsgaSsrKQotCSpjb2VmX2JpdF9wdHIrKyA9IC0xOwotCi0gICAgLyogTWFyayBkZXJpdmVkIHRhYmxlcyB1bmFsbG9jYXRlZCAqLwotICAgIGZvciAoaSA9IDA7IGkgPCBOVU1fSFVGRl9UQkxTOyBpKyspIHsKLSAgICAgIGVudHJvcHktPmRlcml2ZWRfdGJsc1tpXSA9IE5VTEw7Ci0gICAgfQotICB9IGVsc2UgewotICAgIC8qIE1hcmsgdGFibGVzIHVuYWxsb2NhdGVkICovCi0gICAgZm9yIChpID0gMDsgaSA8IE5VTV9IVUZGX1RCTFM7IGkrKykgewotICAgICAgZW50cm9weS0+ZGNfZGVyaXZlZF90YmxzW2ldID0gZW50cm9weS0+YWNfZGVyaXZlZF90YmxzW2ldID0gTlVMTDsKLSAgICB9CisgIC8qIE1hcmsgdGFibGVzIHVuYWxsb2NhdGVkICovCisgIGZvciAoaSA9IDA7IGkgPCBOVU1fSFVGRl9UQkxTOyBpKyspIHsKKyAgICBlbnRyb3B5LT5kY19kZXJpdmVkX3RibHNbaV0gPSBlbnRyb3B5LT5hY19kZXJpdmVkX3RibHNbaV0gPSBOVUxMOwogICB9CiB9CmRpZmYgLS1naXQgYS9qZGh1ZmYuaCBiL2pkaHVmZi5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjI2OTc0ODgKLS0tIC9kZXYvbnVsbAorKysgYi9qZGh1ZmYuaApAQCAtMCwwICsxLDIxNCBAQAorLyoKKyAqIGpkaHVmZi5oCisgKgorICogQ29weXJpZ2h0IChDKSAxOTkxLTE5OTcsIFRob21hcyBHLiBMYW5lLgorICogQ29weXJpZ2h0IChDKSAyMDEwLCBELiBSLiBDb21tYW5kZXIuCisgKiBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgSW5kZXBlbmRlbnQgSlBFRyBHcm91cCdzIHNvZnR3YXJlLgorICogRm9yIGNvbmRpdGlvbnMgb2YgZGlzdHJpYnV0aW9uIGFuZCB1c2UsIHNlZSB0aGUgYWNjb21wYW55aW5nIFJFQURNRSBmaWxlLgorICoKKyAqIFRoaXMgZmlsZSBjb250YWlucyBkZWNsYXJhdGlvbnMgZm9yIEh1ZmZtYW4gZW50cm9weSBkZWNvZGluZyByb3V0aW5lcworICogdGhhdCBhcmUgc2hhcmVkIGJldHdlZW4gdGhlIHNlcXVlbnRpYWwgZGVjb2RlciAoamRodWZmLmMpIGFuZCB0aGUKKyAqIHByb2dyZXNzaXZlIGRlY29kZXIgKGpkcGh1ZmYuYykuICBObyBvdGhlciBtb2R1bGVzIG5lZWQgdG8gc2VlIHRoZXNlLgorICovCisKKy8qIFNob3J0IGZvcm1zIG9mIGV4dGVybmFsIG5hbWVzIGZvciBzeXN0ZW1zIHdpdGggYnJhaW4tZGFtYWdlZCBsaW5rZXJzLiAqLworCisjaWZkZWYgTkVFRF9TSE9SVF9FWFRFUk5BTF9OQU1FUworI2RlZmluZSBqcGVnX21ha2VfZF9kZXJpdmVkX3RibAlqTWtERGVyaXZlZAorI2RlZmluZSBqcGVnX2ZpbGxfYml0X2J1ZmZlcglqRmlsQml0QnVmCisjZGVmaW5lIGpwZWdfaHVmZl9kZWNvZGUJakh1ZkRlY29kZQorI2VuZGlmIC8qIE5FRURfU0hPUlRfRVhURVJOQUxfTkFNRVMgKi8KKworCisvKiBEZXJpdmVkIGRhdGEgY29uc3RydWN0ZWQgZm9yIGVhY2ggSHVmZm1hbiB0YWJsZSAqLworCisjZGVmaW5lIEhVRkZfTE9PS0FIRUFECTgJLyogIyBvZiBiaXRzIG9mIGxvb2thaGVhZCAqLworCit0eXBlZGVmIHN0cnVjdCB7CisgIC8qIEJhc2ljIHRhYmxlczogKGVsZW1lbnQgWzBdIG9mIGVhY2ggYXJyYXkgaXMgdW51c2VkKSAqLworICBJTlQzMiBtYXhjb2RlWzE4XTsJCS8qIGxhcmdlc3QgY29kZSBvZiBsZW5ndGggayAoLTEgaWYgbm9uZSkgKi8KKyAgLyogKG1heGNvZGVbMTddIGlzIGEgc2VudGluZWwgdG8gZW5zdXJlIGpwZWdfaHVmZl9kZWNvZGUgdGVybWluYXRlcykgKi8KKyAgSU5UMzIgdmFsb2Zmc2V0WzE4XTsJCS8qIGh1ZmZ2YWxbXSBvZmZzZXQgZm9yIGNvZGVzIG9mIGxlbmd0aCBrICovCisgIC8qIHZhbG9mZnNldFtrXSA9IGh1ZmZ2YWxbXSBpbmRleCBvZiAxc3Qgc3ltYm9sIG9mIGNvZGUgbGVuZ3RoIGssIGxlc3MKKyAgICogdGhlIHNtYWxsZXN0IGNvZGUgb2YgbGVuZ3RoIGs7IHNvIGdpdmVuIGEgY29kZSBvZiBsZW5ndGggaywgdGhlCisgICAqIGNvcnJlc3BvbmRpbmcgc3ltYm9sIGlzIGh1ZmZ2YWxbY29kZSArIHZhbG9mZnNldFtrXV0KKyAgICovCisKKyAgLyogTGluayB0byBwdWJsaWMgSHVmZm1hbiB0YWJsZSAobmVlZGVkIG9ubHkgaW4ganBlZ19odWZmX2RlY29kZSkgKi8KKyAgSkhVRkZfVEJMICpwdWI7CisKKyAgLyogTG9va2FoZWFkIHRhYmxlOiBpbmRleGVkIGJ5IHRoZSBuZXh0IEhVRkZfTE9PS0FIRUFEIGJpdHMgb2YKKyAgICogdGhlIGlucHV0IGRhdGEgc3RyZWFtLiAgSWYgdGhlIG5leHQgSHVmZm1hbiBjb2RlIGlzIG5vIG1vcmUKKyAgICogdGhhbiBIVUZGX0xPT0tBSEVBRCBiaXRzIGxvbmcsIHdlIGNhbiBvYnRhaW4gaXRzIGxlbmd0aCBhbmQKKyAgICogdGhlIGNvcnJlc3BvbmRpbmcgc3ltYm9sIGRpcmVjdGx5IGZyb20gdGhpcyB0YWJsZXMuCisgICAqCisgICAqIFRoZSBsb3dlciA4IGJpdHMgb2YgZWFjaCB0YWJsZSBlbnRyeSBjb250YWluIHRoZSBudW1iZXIgb2YKKyAgICogYml0cyBpbiB0aGUgY29ycmVzcG9uZGluZyBIdWZmbWFuIGNvZGUsIG9yIEhVRkZfTE9PS0FIRUFEICsgMQorICAgKiBpZiB0b28gbG9uZy4gIFRoZSBuZXh0IDggYml0cyBvZiBlYWNoIGVudHJ5IGNvbnRhaW4gdGhlCisgICAqIHN5bWJvbC4KKyAgICovCisgIGludCBsb29rdXBbMTw8SFVGRl9MT09LQUhFQURdOworfSBkX2Rlcml2ZWRfdGJsOworCisvKiBFeHBhbmQgYSBIdWZmbWFuIHRhYmxlIGRlZmluaXRpb24gaW50byB0aGUgZGVyaXZlZCBmb3JtYXQgKi8KK0VYVEVSTih2b2lkKSBqcGVnX21ha2VfZF9kZXJpdmVkX3RibAorCUpQUCgoal9kZWNvbXByZXNzX3B0ciBjaW5mbywgYm9vbGVhbiBpc0RDLCBpbnQgdGJsbm8sCisJICAgICBkX2Rlcml2ZWRfdGJsICoqIHBkdGJsKSk7CisKKworLyoKKyAqIEZldGNoaW5nIHRoZSBuZXh0IE4gYml0cyBmcm9tIHRoZSBpbnB1dCBzdHJlYW0gaXMgYSB0aW1lLWNyaXRpY2FsIG9wZXJhdGlvbgorICogZm9yIHRoZSBIdWZmbWFuIGRlY29kZXJzLiAgV2UgaW1wbGVtZW50IGl0IHdpdGggYSBjb21iaW5hdGlvbiBvZiBpbmxpbmUKKyAqIG1hY3JvcyBhbmQgb3V0LW9mLWxpbmUgc3Vicm91dGluZXMuICBOb3RlIHRoYXQgTiAodGhlIG51bWJlciBvZiBiaXRzCisgKiBkZW1hbmRlZCBhdCBvbmUgdGltZSkgbmV2ZXIgZXhjZWVkcyAxNSBmb3IgSlBFRyB1c2UuCisgKgorICogV2UgcmVhZCBzb3VyY2UgYnl0ZXMgaW50byBnZXRfYnVmZmVyIGFuZCBkb2xlIG91dCBiaXRzIGFzIG5lZWRlZC4KKyAqIElmIGdldF9idWZmZXIgYWxyZWFkeSBjb250YWlucyBlbm91Z2ggYml0cywgdGhleSBhcmUgZmV0Y2hlZCBpbi1saW5lCisgKiBieSB0aGUgbWFjcm9zIENIRUNLX0JJVF9CVUZGRVIgYW5kIEdFVF9CSVRTLiAgV2hlbiB0aGVyZSBhcmVuJ3QgZW5vdWdoCisgKiBiaXRzLCBqcGVnX2ZpbGxfYml0X2J1ZmZlciBpcyBjYWxsZWQ7IGl0IHdpbGwgYXR0ZW1wdCB0byBmaWxsIGdldF9idWZmZXIKKyAqIGFzIGZ1bGwgYXMgcG9zc2libGUgKG5vdCBqdXN0IHRvIHRoZSBudW1iZXIgb2YgYml0cyBuZWVkZWQ7IHRoaXMKKyAqIHByZWZldGNoaW5nIHJlZHVjZXMgdGhlIG92ZXJoZWFkIGNvc3Qgb2YgY2FsbGluZyBqcGVnX2ZpbGxfYml0X2J1ZmZlcikuCisgKiBOb3RlIHRoYXQganBlZ19maWxsX2JpdF9idWZmZXIgbWF5IHJldHVybiBGQUxTRSB0byBpbmRpY2F0ZSBzdXNwZW5zaW9uLgorICogT24gVFJVRSByZXR1cm4sIGpwZWdfZmlsbF9iaXRfYnVmZmVyIGd1YXJhbnRlZXMgdGhhdCBnZXRfYnVmZmVyIGNvbnRhaW5zCisgKiBhdCBsZWFzdCB0aGUgcmVxdWVzdGVkIG51bWJlciBvZiBiaXRzIC0tLSBkdW1teSB6ZXJvZXMgYXJlIGluc2VydGVkIGlmCisgKiBuZWNlc3NhcnkuCisgKi8KKworI2lmIF9fV09SRFNJWkUgPT0gNjQgfHwgZGVmaW5lZChfV0lONjQpCisKK3R5cGVkZWYgc2l6ZV90IGJpdF9idWZfdHlwZTsJLyogdHlwZSBvZiBiaXQtZXh0cmFjdGlvbiBidWZmZXIgKi8KKyNkZWZpbmUgQklUX0JVRl9TSVpFICA2NAkJLyogc2l6ZSBvZiBidWZmZXIgaW4gYml0cyAqLworCisjZWxzZQorCit0eXBlZGVmIElOVDMyIGJpdF9idWZfdHlwZTsJLyogdHlwZSBvZiBiaXQtZXh0cmFjdGlvbiBidWZmZXIgKi8KKyNkZWZpbmUgQklUX0JVRl9TSVpFICAzMgkJLyogc2l6ZSBvZiBidWZmZXIgaW4gYml0cyAqLworCisjZW5kaWYKKworLyogSWYgbG9uZyBpcyA+IDMyIGJpdHMgb24geW91ciBtYWNoaW5lLCBhbmQgc2hpZnRpbmcvbWFza2luZyBsb25ncyBpcworICogcmVhc29uYWJseSBmYXN0LCBtYWtpbmcgYml0X2J1Zl90eXBlIGJlIGxvbmcgYW5kIHNldHRpbmcgQklUX0JVRl9TSVpFCisgKiBhcHByb3ByaWF0ZWx5IHNob3VsZCBiZSBhIHdpbi4gIFVuZm9ydHVuYXRlbHkgd2UgY2FuJ3QgZGVmaW5lIHRoZSBzaXplCisgKiB3aXRoIHNvbWV0aGluZyBsaWtlICAjZGVmaW5lIEJJVF9CVUZfU0laRSAoc2l6ZW9mKGJpdF9idWZfdHlwZSkqOCkKKyAqIGJlY2F1c2Ugbm90IGFsbCBtYWNoaW5lcyBtZWFzdXJlIHNpemVvZiBpbiA4LWJpdCBieXRlcy4KKyAqLworCit0eXBlZGVmIHN0cnVjdCB7CQkvKiBCaXRyZWFkaW5nIHN0YXRlIHNhdmVkIGFjcm9zcyBNQ1VzICovCisgIGJpdF9idWZfdHlwZSBnZXRfYnVmZmVyOwkvKiBjdXJyZW50IGJpdC1leHRyYWN0aW9uIGJ1ZmZlciAqLworICBpbnQgYml0c19sZWZ0OwkJLyogIyBvZiB1bnVzZWQgYml0cyBpbiBpdCAqLworfSBiaXRyZWFkX3Blcm1fc3RhdGU7CisKK3R5cGVkZWYgc3RydWN0IHsJCS8qIEJpdHJlYWRpbmcgd29ya2luZyBzdGF0ZSB3aXRoaW4gYW4gTUNVICovCisgIC8qIEN1cnJlbnQgZGF0YSBzb3VyY2UgbG9jYXRpb24gKi8KKyAgLyogV2UgbmVlZCBhIGNvcHksIHJhdGhlciB0aGFuIG11bmdpbmcgdGhlIG9yaWdpbmFsLCBpbiBjYXNlIG9mIHN1c3BlbnNpb24gKi8KKyAgY29uc3QgSk9DVEVUICogbmV4dF9pbnB1dF9ieXRlOyAvKiA9PiBuZXh0IGJ5dGUgdG8gcmVhZCBmcm9tIHNvdXJjZSAqLworICBzaXplX3QgYnl0ZXNfaW5fYnVmZmVyOwkvKiAjIG9mIGJ5dGVzIHJlbWFpbmluZyBpbiBzb3VyY2UgYnVmZmVyICovCisgIC8qIEJpdCBpbnB1dCBidWZmZXIgLS0tIG5vdGUgdGhlc2UgdmFsdWVzIGFyZSBrZXB0IGluIHJlZ2lzdGVyIHZhcmlhYmxlcywKKyAgICogbm90IGluIHRoaXMgc3RydWN0LCBpbnNpZGUgdGhlIGlubmVyIGxvb3BzLgorICAgKi8KKyAgYml0X2J1Zl90eXBlIGdldF9idWZmZXI7CS8qIGN1cnJlbnQgYml0LWV4dHJhY3Rpb24gYnVmZmVyICovCisgIGludCBiaXRzX2xlZnQ7CQkvKiAjIG9mIHVudXNlZCBiaXRzIGluIGl0ICovCisgIC8qIFBvaW50ZXIgbmVlZGVkIGJ5IGpwZWdfZmlsbF9iaXRfYnVmZmVyLiAqLworICBqX2RlY29tcHJlc3NfcHRyIGNpbmZvOwkvKiBiYWNrIGxpbmsgdG8gZGVjb21wcmVzcyBtYXN0ZXIgcmVjb3JkICovCit9IGJpdHJlYWRfd29ya2luZ19zdGF0ZTsKKworLyogTWFjcm9zIHRvIGRlY2xhcmUgYW5kIGxvYWQvc2F2ZSBiaXRyZWFkIGxvY2FsIHZhcmlhYmxlcy4gKi8KKyNkZWZpbmUgQklUUkVBRF9TVEFURV9WQVJTICBcCisJcmVnaXN0ZXIgYml0X2J1Zl90eXBlIGdldF9idWZmZXI7ICBcCisJcmVnaXN0ZXIgaW50IGJpdHNfbGVmdDsgIFwKKwliaXRyZWFkX3dvcmtpbmdfc3RhdGUgYnJfc3RhdGUKKworI2RlZmluZSBCSVRSRUFEX0xPQURfU1RBVEUoY2luZm9wLHBlcm1zdGF0ZSkgIFwKKwlicl9zdGF0ZS5jaW5mbyA9IGNpbmZvcDsgXAorCWJyX3N0YXRlLm5leHRfaW5wdXRfYnl0ZSA9IGNpbmZvcC0+c3JjLT5uZXh0X2lucHV0X2J5dGU7IFwKKwlicl9zdGF0ZS5ieXRlc19pbl9idWZmZXIgPSBjaW5mb3AtPnNyYy0+Ynl0ZXNfaW5fYnVmZmVyOyBcCisJZ2V0X2J1ZmZlciA9IHBlcm1zdGF0ZS5nZXRfYnVmZmVyOyBcCisJYml0c19sZWZ0ID0gcGVybXN0YXRlLmJpdHNfbGVmdDsKKworI2RlZmluZSBCSVRSRUFEX1NBVkVfU1RBVEUoY2luZm9wLHBlcm1zdGF0ZSkgIFwKKwljaW5mb3AtPnNyYy0+bmV4dF9pbnB1dF9ieXRlID0gYnJfc3RhdGUubmV4dF9pbnB1dF9ieXRlOyBcCisJY2luZm9wLT5zcmMtPmJ5dGVzX2luX2J1ZmZlciA9IGJyX3N0YXRlLmJ5dGVzX2luX2J1ZmZlcjsgXAorCXBlcm1zdGF0ZS5nZXRfYnVmZmVyID0gZ2V0X2J1ZmZlcjsgXAorCXBlcm1zdGF0ZS5iaXRzX2xlZnQgPSBiaXRzX2xlZnQKKworLyoKKyAqIFRoZXNlIG1hY3JvcyBwcm92aWRlIHRoZSBpbi1saW5lIHBvcnRpb24gb2YgYml0IGZldGNoaW5nLgorICogVXNlIENIRUNLX0JJVF9CVUZGRVIgdG8gZW5zdXJlIHRoZXJlIGFyZSBOIGJpdHMgaW4gZ2V0X2J1ZmZlcgorICogYmVmb3JlIHVzaW5nIEdFVF9CSVRTLCBQRUVLX0JJVFMsIG9yIERST1BfQklUUy4KKyAqIFRoZSB2YXJpYWJsZXMgZ2V0X2J1ZmZlciBhbmQgYml0c19sZWZ0IGFyZSBhc3N1bWVkIHRvIGJlIGxvY2FscywKKyAqIGJ1dCB0aGUgc3RhdGUgc3RydWN0IG1pZ2h0IG5vdCBiZSAoanBlZ19odWZmX2RlY29kZSBuZWVkcyB0aGlzKS4KKyAqCUNIRUNLX0JJVF9CVUZGRVIoc3RhdGUsbixhY3Rpb24pOworICoJCUVuc3VyZSB0aGVyZSBhcmUgTiBiaXRzIGluIGdldF9idWZmZXI7IGlmIHN1c3BlbmQsIHRha2UgYWN0aW9uLgorICogICAgICB2YWwgPSBHRVRfQklUUyhuKTsKKyAqCQlGZXRjaCBuZXh0IE4gYml0cy4KKyAqICAgICAgdmFsID0gUEVFS19CSVRTKG4pOworICoJCUZldGNoIG5leHQgTiBiaXRzIHdpdGhvdXQgcmVtb3ZpbmcgdGhlbSBmcm9tIHRoZSBidWZmZXIuCisgKglEUk9QX0JJVFMobik7CisgKgkJRGlzY2FyZCBuZXh0IE4gYml0cy4KKyAqIFRoZSB2YWx1ZSBOIHNob3VsZCBiZSBhIHNpbXBsZSB2YXJpYWJsZSwgbm90IGFuIGV4cHJlc3Npb24sIGJlY2F1c2UgaXQKKyAqIGlzIGV2YWx1YXRlZCBtdWx0aXBsZSB0aW1lcy4KKyAqLworCisjZGVmaW5lIENIRUNLX0JJVF9CVUZGRVIoc3RhdGUsbmJpdHMsYWN0aW9uKSBcCisJeyBpZiAoYml0c19sZWZ0IDwgKG5iaXRzKSkgeyAgXAorCSAgICBpZiAoISBqcGVnX2ZpbGxfYml0X2J1ZmZlcigmKHN0YXRlKSxnZXRfYnVmZmVyLGJpdHNfbGVmdCxuYml0cykpICBcCisJICAgICAgeyBhY3Rpb247IH0gIFwKKwkgICAgZ2V0X2J1ZmZlciA9IChzdGF0ZSkuZ2V0X2J1ZmZlcjsgYml0c19sZWZ0ID0gKHN0YXRlKS5iaXRzX2xlZnQ7IH0gfQorCisjZGVmaW5lIEdFVF9CSVRTKG5iaXRzKSBcCisJKCgoaW50KSAoZ2V0X2J1ZmZlciA+PiAoYml0c19sZWZ0IC09IChuYml0cykpKSkgJiAoKDE8PChuYml0cykpLTEpKQorCisjZGVmaW5lIFBFRUtfQklUUyhuYml0cykgXAorCSgoKGludCkgKGdldF9idWZmZXIgPj4gKGJpdHNfbGVmdCAtICAobmJpdHMpKSkpICYgKCgxPDwobmJpdHMpKS0xKSkKKworI2RlZmluZSBEUk9QX0JJVFMobmJpdHMpIFwKKwkoYml0c19sZWZ0IC09IChuYml0cykpCisKKy8qIExvYWQgdXAgdGhlIGJpdCBidWZmZXIgdG8gYSBkZXB0aCBvZiBhdCBsZWFzdCBuYml0cyAqLworRVhURVJOKGJvb2xlYW4pIGpwZWdfZmlsbF9iaXRfYnVmZmVyCisJSlBQKChiaXRyZWFkX3dvcmtpbmdfc3RhdGUgKiBzdGF0ZSwgcmVnaXN0ZXIgYml0X2J1Zl90eXBlIGdldF9idWZmZXIsCisJICAgICByZWdpc3RlciBpbnQgYml0c19sZWZ0LCBpbnQgbmJpdHMpKTsKKworCisvKgorICogQ29kZSBmb3IgZXh0cmFjdGluZyBuZXh0IEh1ZmZtYW4tY29kZWQgc3ltYm9sIGZyb20gaW5wdXQgYml0IHN0cmVhbS4KKyAqIEFnYWluLCB0aGlzIGlzIHRpbWUtY3JpdGljYWwgYW5kIHdlIG1ha2UgdGhlIG1haW4gcGF0aHMgYmUgbWFjcm9zLgorICoKKyAqIFdlIHVzZSBhIGxvb2thaGVhZCB0YWJsZSB0byBwcm9jZXNzIGNvZGVzIG9mIHVwIHRvIEhVRkZfTE9PS0FIRUFEIGJpdHMKKyAqIHdpdGhvdXQgbG9vcGluZy4gIFVzdWFsbHksIG1vcmUgdGhhbiA5NSUgb2YgdGhlIEh1ZmZtYW4gY29kZXMgd2lsbCBiZSA4CisgKiBvciBmZXdlciBiaXRzIGxvbmcuICBUaGUgZmV3IG92ZXJsZW5ndGggY29kZXMgYXJlIGhhbmRsZWQgd2l0aCBhIGxvb3AsCisgKiB3aGljaCBuZWVkIG5vdCBiZSBpbmxpbmUgY29kZS4KKyAqCisgKiBOb3RlcyBhYm91dCB0aGUgSFVGRl9ERUNPREUgbWFjcm86CisgKiAxLiBOZWFyIHRoZSBlbmQgb2YgdGhlIGRhdGEgc2VnbWVudCwgd2UgbWF5IGZhaWwgdG8gZ2V0IGVub3VnaCBiaXRzCisgKiAgICBmb3IgYSBsb29rYWhlYWQuICBJbiB0aGF0IGNhc2UsIHdlIGRvIGl0IHRoZSBoYXJkIHdheS4KKyAqIDIuIElmIHRoZSBsb29rYWhlYWQgdGFibGUgY29udGFpbnMgbm8gZW50cnksIHRoZSBuZXh0IGNvZGUgbXVzdCBiZQorICogICAgbW9yZSB0aGFuIEhVRkZfTE9PS0FIRUFEIGJpdHMgbG9uZy4KKyAqIDMuIGpwZWdfaHVmZl9kZWNvZGUgcmV0dXJucyAtMSBpZiBmb3JjZWQgdG8gc3VzcGVuZC4KKyAqLworCisjZGVmaW5lIEhVRkZfREVDT0RFKHJlc3VsdCxzdGF0ZSxodGJsLGZhaWxhY3Rpb24sc2xvd2xhYmVsKSBcCit7IHJlZ2lzdGVyIGludCBuYiwgbG9vazsgXAorICBpZiAoYml0c19sZWZ0IDwgSFVGRl9MT09LQUhFQUQpIHsgXAorICAgIGlmICghIGpwZWdfZmlsbF9iaXRfYnVmZmVyKCZzdGF0ZSxnZXRfYnVmZmVyLGJpdHNfbGVmdCwgMCkpIHtmYWlsYWN0aW9uO30gXAorICAgIGdldF9idWZmZXIgPSBzdGF0ZS5nZXRfYnVmZmVyOyBiaXRzX2xlZnQgPSBzdGF0ZS5iaXRzX2xlZnQ7IFwKKyAgICBpZiAoYml0c19sZWZ0IDwgSFVGRl9MT09LQUhFQUQpIHsgXAorICAgICAgbmIgPSAxOyBnb3RvIHNsb3dsYWJlbDsgXAorICAgIH0gXAorICB9IFwKKyAgbG9vayA9IFBFRUtfQklUUyhIVUZGX0xPT0tBSEVBRCk7IFwKKyAgaWYgKChuYiA9IChodGJsLT5sb29rdXBbbG9va10gPj4gSFVGRl9MT09LQUhFQUQpKSA8PSBIVUZGX0xPT0tBSEVBRCkgeyBcCisgICAgRFJPUF9CSVRTKG5iKTsgXAorICAgIHJlc3VsdCA9IGh0YmwtPmxvb2t1cFtsb29rXSAmICgoMSA8PCBIVUZGX0xPT0tBSEVBRCkgLSAxKTsgXAorICB9IGVsc2UgeyBcCitzbG93bGFiZWw6IFwKKyAgICBpZiAoKHJlc3VsdD1qcGVnX2h1ZmZfZGVjb2RlKCZzdGF0ZSxnZXRfYnVmZmVyLGJpdHNfbGVmdCxodGJsLG5iKSkgPCAwKSBcCisJeyBmYWlsYWN0aW9uOyB9IFwKKyAgICBnZXRfYnVmZmVyID0gc3RhdGUuZ2V0X2J1ZmZlcjsgYml0c19sZWZ0ID0gc3RhdGUuYml0c19sZWZ0OyBcCisgIH0gXAorfQorCisvKiBPdXQtb2YtbGluZSBjYXNlIGZvciBIdWZmbWFuIGNvZGUgZmV0Y2hpbmcgKi8KK0VYVEVSTihpbnQpIGpwZWdfaHVmZl9kZWNvZGUKKwlKUFAoKGJpdHJlYWRfd29ya2luZ19zdGF0ZSAqIHN0YXRlLCByZWdpc3RlciBiaXRfYnVmX3R5cGUgZ2V0X2J1ZmZlciwKKwkgICAgIHJlZ2lzdGVyIGludCBiaXRzX2xlZnQsIGRfZGVyaXZlZF90YmwgKiBodGJsLCBpbnQgbWluX2JpdHMpKTsKZGlmZiAtLWdpdCBhL2pkaW5wdXQuYyBiL2pkaW5wdXQuYwppbmRleCAyYzVjNzE3Li45ZmNkMDg5IDEwMDY0NAotLS0gYS9qZGlucHV0LmMKKysrIGIvamRpbnB1dC5jCkBAIC0zLDE4ICszLDIwIEBACiAgKgogICogQ29weXJpZ2h0IChDKSAxOTkxLTE5OTcsIFRob21hcyBHLiBMYW5lLgogICogTW9kaWZpZWQgMjAwMi0yMDA5IGJ5IEd1aWRvIFZvbGxiZWRpbmcuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTAsIEQuIFIuIENvbW1hbmRlci4KICAqIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBJbmRlcGVuZGVudCBKUEVHIEdyb3VwJ3Mgc29mdHdhcmUuCiAgKiBGb3IgY29uZGl0aW9ucyBvZiBkaXN0cmlidXRpb24gYW5kIHVzZSwgc2VlIHRoZSBhY2NvbXBhbnlpbmcgUkVBRE1FIGZpbGUuCiAgKgogICogVGhpcyBmaWxlIGNvbnRhaW5zIGlucHV0IGNvbnRyb2wgbG9naWMgZm9yIHRoZSBKUEVHIGRlY29tcHJlc3Nvci4KICAqIFRoZXNlIHJvdXRpbmVzIGFyZSBjb25jZXJuZWQgd2l0aCBjb250cm9sbGluZyB0aGUgZGVjb21wcmVzc29yJ3MgaW5wdXQKICAqIHByb2Nlc3NpbmcgKG1hcmtlciByZWFkaW5nIGFuZCBjb2VmZmljaWVudCBkZWNvZGluZykuICBUaGUgYWN0dWFsIGlucHV0Ci0gKiByZWFkaW5nIGlzIGRvbmUgaW4gamRtYXJrZXIuYywgamRodWZmLmMsIGFuZCBqZGFyaXRoLmMuCisgKiByZWFkaW5nIGlzIGRvbmUgaW4gamRtYXJrZXIuYywgamRodWZmLmMsIGFuZCBqZHBodWZmLmMuCiAgKi8KIAogI2RlZmluZSBKUEVHX0lOVEVSTkFMUwogI2luY2x1ZGUgImppbmNsdWRlLmgiCiAjaW5jbHVkZSAianBlZ2xpYi5oIgorI2luY2x1ZGUgImpwZWdjb21wLmgiCiAKIAogLyogUHJpdmF0ZSBzdGF0ZSAqLwpAQCAtMjIsNyArMjQsNyBAQAogdHlwZWRlZiBzdHJ1Y3QgewogICBzdHJ1Y3QganBlZ19pbnB1dF9jb250cm9sbGVyIHB1YjsgLyogcHVibGljIGZpZWxkcyAqLwogCi0gIGludCBpbmhlYWRlcnM7CQkvKiBOb256ZXJvIHVudGlsIGZpcnN0IFNPUyBpcyByZWFjaGVkICovCisgIGJvb2xlYW4gaW5oZWFkZXJzOwkJLyogVFJVRSB1bnRpbCBmaXJzdCBTT1MgaXMgcmVhY2hlZCAqLwogfSBteV9pbnB1dF9jb250cm9sbGVyOwogCiB0eXBlZGVmIG15X2lucHV0X2NvbnRyb2xsZXIgKiBteV9pbnB1dGN0bF9wdHI7CkBAIC0zNyw2ICszOSw3IEBACiAgKi8KIAogCisjaWYgSlBFR19MSUJfVkVSU0lPTiA+PSA4MAogLyoKICAqIENvbXB1dGUgb3V0cHV0IGltYWdlIGRpbWVuc2lvbnMgYW5kIHJlbGF0ZWQgdmFsdWVzLgogICogTk9URTogdGhpcyBpcyBleHBvcnRlZCBmb3IgcG9zc2libGUgdXNlIGJ5IGFwcGxpY2F0aW9uLgpAQCAtNzAsMTQgKzczLDYgQEAKICAgICAgIGpkaXZfcm91bmRfdXAoKGxvbmcpIGNpbmZvLT5pbWFnZV9oZWlnaHQgKiAyTCwgKGxvbmcpIGNpbmZvLT5ibG9ja19zaXplKTsKICAgICBjaW5mby0+bWluX0RDVF9oX3NjYWxlZF9zaXplID0gMjsKICAgICBjaW5mby0+bWluX0RDVF92X3NjYWxlZF9zaXplID0gMjsKLSAgfSBlbHNlIGlmIChjaW5mby0+c2NhbGVfbnVtICogY2luZm8tPmJsb2NrX3NpemUgPD0gY2luZm8tPnNjYWxlX2Rlbm9tICogMykgewotICAgIC8qIFByb3ZpZGUgMy9ibG9ja19zaXplIHNjYWxpbmcgKi8KLSAgICBjaW5mby0+b3V0cHV0X3dpZHRoID0gKEpESU1FTlNJT04pCi0gICAgICBqZGl2X3JvdW5kX3VwKChsb25nKSBjaW5mby0+aW1hZ2Vfd2lkdGggKiAzTCwgKGxvbmcpIGNpbmZvLT5ibG9ja19zaXplKTsKLSAgICBjaW5mby0+b3V0cHV0X2hlaWdodCA9IChKRElNRU5TSU9OKQotICAgICAgamRpdl9yb3VuZF91cCgobG9uZykgY2luZm8tPmltYWdlX2hlaWdodCAqIDNMLCAobG9uZykgY2luZm8tPmJsb2NrX3NpemUpOwotICAgIGNpbmZvLT5taW5fRENUX2hfc2NhbGVkX3NpemUgPSAzOwotICAgIGNpbmZvLT5taW5fRENUX3Zfc2NhbGVkX3NpemUgPSAzOwogICB9IGVsc2UgaWYgKGNpbmZvLT5zY2FsZV9udW0gKiBjaW5mby0+YmxvY2tfc2l6ZSA8PSBjaW5mby0+c2NhbGVfZGVub20gKiA0KSB7CiAgICAgLyogUHJvdmlkZSA0L2Jsb2NrX3NpemUgc2NhbGluZyAqLwogICAgIGNpbmZvLT5vdXRwdXRfd2lkdGggPSAoSkRJTUVOU0lPTikKQEAgLTg2LDMwICs4MSw2IEBACiAgICAgICBqZGl2X3JvdW5kX3VwKChsb25nKSBjaW5mby0+aW1hZ2VfaGVpZ2h0ICogNEwsIChsb25nKSBjaW5mby0+YmxvY2tfc2l6ZSk7CiAgICAgY2luZm8tPm1pbl9EQ1RfaF9zY2FsZWRfc2l6ZSA9IDQ7CiAgICAgY2luZm8tPm1pbl9EQ1Rfdl9zY2FsZWRfc2l6ZSA9IDQ7Ci0gIH0gZWxzZSBpZiAoY2luZm8tPnNjYWxlX251bSAqIGNpbmZvLT5ibG9ja19zaXplIDw9IGNpbmZvLT5zY2FsZV9kZW5vbSAqIDUpIHsKLSAgICAvKiBQcm92aWRlIDUvYmxvY2tfc2l6ZSBzY2FsaW5nICovCi0gICAgY2luZm8tPm91dHB1dF93aWR0aCA9IChKRElNRU5TSU9OKQotICAgICAgamRpdl9yb3VuZF91cCgobG9uZykgY2luZm8tPmltYWdlX3dpZHRoICogNUwsIChsb25nKSBjaW5mby0+YmxvY2tfc2l6ZSk7Ci0gICAgY2luZm8tPm91dHB1dF9oZWlnaHQgPSAoSkRJTUVOU0lPTikKLSAgICAgIGpkaXZfcm91bmRfdXAoKGxvbmcpIGNpbmZvLT5pbWFnZV9oZWlnaHQgKiA1TCwgKGxvbmcpIGNpbmZvLT5ibG9ja19zaXplKTsKLSAgICBjaW5mby0+bWluX0RDVF9oX3NjYWxlZF9zaXplID0gNTsKLSAgICBjaW5mby0+bWluX0RDVF92X3NjYWxlZF9zaXplID0gNTsKLSAgfSBlbHNlIGlmIChjaW5mby0+c2NhbGVfbnVtICogY2luZm8tPmJsb2NrX3NpemUgPD0gY2luZm8tPnNjYWxlX2Rlbm9tICogNikgewotICAgIC8qIFByb3ZpZGUgNi9ibG9ja19zaXplIHNjYWxpbmcgKi8KLSAgICBjaW5mby0+b3V0cHV0X3dpZHRoID0gKEpESU1FTlNJT04pCi0gICAgICBqZGl2X3JvdW5kX3VwKChsb25nKSBjaW5mby0+aW1hZ2Vfd2lkdGggKiA2TCwgKGxvbmcpIGNpbmZvLT5ibG9ja19zaXplKTsKLSAgICBjaW5mby0+b3V0cHV0X2hlaWdodCA9IChKRElNRU5TSU9OKQotICAgICAgamRpdl9yb3VuZF91cCgobG9uZykgY2luZm8tPmltYWdlX2hlaWdodCAqIDZMLCAobG9uZykgY2luZm8tPmJsb2NrX3NpemUpOwotICAgIGNpbmZvLT5taW5fRENUX2hfc2NhbGVkX3NpemUgPSA2OwotICAgIGNpbmZvLT5taW5fRENUX3Zfc2NhbGVkX3NpemUgPSA2OwotICB9IGVsc2UgaWYgKGNpbmZvLT5zY2FsZV9udW0gKiBjaW5mby0+YmxvY2tfc2l6ZSA8PSBjaW5mby0+c2NhbGVfZGVub20gKiA3KSB7Ci0gICAgLyogUHJvdmlkZSA3L2Jsb2NrX3NpemUgc2NhbGluZyAqLwotICAgIGNpbmZvLT5vdXRwdXRfd2lkdGggPSAoSkRJTUVOU0lPTikKLSAgICAgIGpkaXZfcm91bmRfdXAoKGxvbmcpIGNpbmZvLT5pbWFnZV93aWR0aCAqIDdMLCAobG9uZykgY2luZm8tPmJsb2NrX3NpemUpOwotICAgIGNpbmZvLT5vdXRwdXRfaGVpZ2h0ID0gKEpESU1FTlNJT04pCi0gICAgICBqZGl2X3JvdW5kX3VwKChsb25nKSBjaW5mby0+aW1hZ2VfaGVpZ2h0ICogN0wsIChsb25nKSBjaW5mby0+YmxvY2tfc2l6ZSk7Ci0gICAgY2luZm8tPm1pbl9EQ1RfaF9zY2FsZWRfc2l6ZSA9IDc7Ci0gICAgY2luZm8tPm1pbl9EQ1Rfdl9zY2FsZWRfc2l6ZSA9IDc7CiAgIH0gZWxzZSBpZiAoY2luZm8tPnNjYWxlX251bSAqIGNpbmZvLT5ibG9ja19zaXplIDw9IGNpbmZvLT5zY2FsZV9kZW5vbSAqIDgpIHsKICAgICAvKiBQcm92aWRlIDgvYmxvY2tfc2l6ZSBzY2FsaW5nICovCiAgICAgY2luZm8tPm91dHB1dF93aWR0aCA9IChKRElNRU5TSU9OKQpAQCAtMTE4LDcyICs4OSw3IEBACiAgICAgICBqZGl2X3JvdW5kX3VwKChsb25nKSBjaW5mby0+aW1hZ2VfaGVpZ2h0ICogOEwsIChsb25nKSBjaW5mby0+YmxvY2tfc2l6ZSk7CiAgICAgY2luZm8tPm1pbl9EQ1RfaF9zY2FsZWRfc2l6ZSA9IDg7CiAgICAgY2luZm8tPm1pbl9EQ1Rfdl9zY2FsZWRfc2l6ZSA9IDg7Ci0gIH0gZWxzZSBpZiAoY2luZm8tPnNjYWxlX251bSAqIGNpbmZvLT5ibG9ja19zaXplIDw9IGNpbmZvLT5zY2FsZV9kZW5vbSAqIDkpIHsKLSAgICAvKiBQcm92aWRlIDkvYmxvY2tfc2l6ZSBzY2FsaW5nICovCi0gICAgY2luZm8tPm91dHB1dF93aWR0aCA9IChKRElNRU5TSU9OKQotICAgICAgamRpdl9yb3VuZF91cCgobG9uZykgY2luZm8tPmltYWdlX3dpZHRoICogOUwsIChsb25nKSBjaW5mby0+YmxvY2tfc2l6ZSk7Ci0gICAgY2luZm8tPm91dHB1dF9oZWlnaHQgPSAoSkRJTUVOU0lPTikKLSAgICAgIGpkaXZfcm91bmRfdXAoKGxvbmcpIGNpbmZvLT5pbWFnZV9oZWlnaHQgKiA5TCwgKGxvbmcpIGNpbmZvLT5ibG9ja19zaXplKTsKLSAgICBjaW5mby0+bWluX0RDVF9oX3NjYWxlZF9zaXplID0gOTsKLSAgICBjaW5mby0+bWluX0RDVF92X3NjYWxlZF9zaXplID0gOTsKLSAgfSBlbHNlIGlmIChjaW5mby0+c2NhbGVfbnVtICogY2luZm8tPmJsb2NrX3NpemUgPD0gY2luZm8tPnNjYWxlX2Rlbm9tICogMTApIHsKLSAgICAvKiBQcm92aWRlIDEwL2Jsb2NrX3NpemUgc2NhbGluZyAqLwotICAgIGNpbmZvLT5vdXRwdXRfd2lkdGggPSAoSkRJTUVOU0lPTikKLSAgICAgIGpkaXZfcm91bmRfdXAoKGxvbmcpIGNpbmZvLT5pbWFnZV93aWR0aCAqIDEwTCwgKGxvbmcpIGNpbmZvLT5ibG9ja19zaXplKTsKLSAgICBjaW5mby0+b3V0cHV0X2hlaWdodCA9IChKRElNRU5TSU9OKQotICAgICAgamRpdl9yb3VuZF91cCgobG9uZykgY2luZm8tPmltYWdlX2hlaWdodCAqIDEwTCwgKGxvbmcpIGNpbmZvLT5ibG9ja19zaXplKTsKLSAgICBjaW5mby0+bWluX0RDVF9oX3NjYWxlZF9zaXplID0gMTA7Ci0gICAgY2luZm8tPm1pbl9EQ1Rfdl9zY2FsZWRfc2l6ZSA9IDEwOwotICB9IGVsc2UgaWYgKGNpbmZvLT5zY2FsZV9udW0gKiBjaW5mby0+YmxvY2tfc2l6ZSA8PSBjaW5mby0+c2NhbGVfZGVub20gKiAxMSkgewotICAgIC8qIFByb3ZpZGUgMTEvYmxvY2tfc2l6ZSBzY2FsaW5nICovCi0gICAgY2luZm8tPm91dHB1dF93aWR0aCA9IChKRElNRU5TSU9OKQotICAgICAgamRpdl9yb3VuZF91cCgobG9uZykgY2luZm8tPmltYWdlX3dpZHRoICogMTFMLCAobG9uZykgY2luZm8tPmJsb2NrX3NpemUpOwotICAgIGNpbmZvLT5vdXRwdXRfaGVpZ2h0ID0gKEpESU1FTlNJT04pCi0gICAgICBqZGl2X3JvdW5kX3VwKChsb25nKSBjaW5mby0+aW1hZ2VfaGVpZ2h0ICogMTFMLCAobG9uZykgY2luZm8tPmJsb2NrX3NpemUpOwotICAgIGNpbmZvLT5taW5fRENUX2hfc2NhbGVkX3NpemUgPSAxMTsKLSAgICBjaW5mby0+bWluX0RDVF92X3NjYWxlZF9zaXplID0gMTE7Ci0gIH0gZWxzZSBpZiAoY2luZm8tPnNjYWxlX251bSAqIGNpbmZvLT5ibG9ja19zaXplIDw9IGNpbmZvLT5zY2FsZV9kZW5vbSAqIDEyKSB7Ci0gICAgLyogUHJvdmlkZSAxMi9ibG9ja19zaXplIHNjYWxpbmcgKi8KLSAgICBjaW5mby0+b3V0cHV0X3dpZHRoID0gKEpESU1FTlNJT04pCi0gICAgICBqZGl2X3JvdW5kX3VwKChsb25nKSBjaW5mby0+aW1hZ2Vfd2lkdGggKiAxMkwsIChsb25nKSBjaW5mby0+YmxvY2tfc2l6ZSk7Ci0gICAgY2luZm8tPm91dHB1dF9oZWlnaHQgPSAoSkRJTUVOU0lPTikKLSAgICAgIGpkaXZfcm91bmRfdXAoKGxvbmcpIGNpbmZvLT5pbWFnZV9oZWlnaHQgKiAxMkwsIChsb25nKSBjaW5mby0+YmxvY2tfc2l6ZSk7Ci0gICAgY2luZm8tPm1pbl9EQ1RfaF9zY2FsZWRfc2l6ZSA9IDEyOwotICAgIGNpbmZvLT5taW5fRENUX3Zfc2NhbGVkX3NpemUgPSAxMjsKLSAgfSBlbHNlIGlmIChjaW5mby0+c2NhbGVfbnVtICogY2luZm8tPmJsb2NrX3NpemUgPD0gY2luZm8tPnNjYWxlX2Rlbm9tICogMTMpIHsKLSAgICAvKiBQcm92aWRlIDEzL2Jsb2NrX3NpemUgc2NhbGluZyAqLwotICAgIGNpbmZvLT5vdXRwdXRfd2lkdGggPSAoSkRJTUVOU0lPTikKLSAgICAgIGpkaXZfcm91bmRfdXAoKGxvbmcpIGNpbmZvLT5pbWFnZV93aWR0aCAqIDEzTCwgKGxvbmcpIGNpbmZvLT5ibG9ja19zaXplKTsKLSAgICBjaW5mby0+b3V0cHV0X2hlaWdodCA9IChKRElNRU5TSU9OKQotICAgICAgamRpdl9yb3VuZF91cCgobG9uZykgY2luZm8tPmltYWdlX2hlaWdodCAqIDEzTCwgKGxvbmcpIGNpbmZvLT5ibG9ja19zaXplKTsKLSAgICBjaW5mby0+bWluX0RDVF9oX3NjYWxlZF9zaXplID0gMTM7Ci0gICAgY2luZm8tPm1pbl9EQ1Rfdl9zY2FsZWRfc2l6ZSA9IDEzOwotICB9IGVsc2UgaWYgKGNpbmZvLT5zY2FsZV9udW0gKiBjaW5mby0+YmxvY2tfc2l6ZSA8PSBjaW5mby0+c2NhbGVfZGVub20gKiAxNCkgewotICAgIC8qIFByb3ZpZGUgMTQvYmxvY2tfc2l6ZSBzY2FsaW5nICovCi0gICAgY2luZm8tPm91dHB1dF93aWR0aCA9IChKRElNRU5TSU9OKQotICAgICAgamRpdl9yb3VuZF91cCgobG9uZykgY2luZm8tPmltYWdlX3dpZHRoICogMTRMLCAobG9uZykgY2luZm8tPmJsb2NrX3NpemUpOwotICAgIGNpbmZvLT5vdXRwdXRfaGVpZ2h0ID0gKEpESU1FTlNJT04pCi0gICAgICBqZGl2X3JvdW5kX3VwKChsb25nKSBjaW5mby0+aW1hZ2VfaGVpZ2h0ICogMTRMLCAobG9uZykgY2luZm8tPmJsb2NrX3NpemUpOwotICAgIGNpbmZvLT5taW5fRENUX2hfc2NhbGVkX3NpemUgPSAxNDsKLSAgICBjaW5mby0+bWluX0RDVF92X3NjYWxlZF9zaXplID0gMTQ7Ci0gIH0gZWxzZSBpZiAoY2luZm8tPnNjYWxlX251bSAqIGNpbmZvLT5ibG9ja19zaXplIDw9IGNpbmZvLT5zY2FsZV9kZW5vbSAqIDE1KSB7Ci0gICAgLyogUHJvdmlkZSAxNS9ibG9ja19zaXplIHNjYWxpbmcgKi8KLSAgICBjaW5mby0+b3V0cHV0X3dpZHRoID0gKEpESU1FTlNJT04pCi0gICAgICBqZGl2X3JvdW5kX3VwKChsb25nKSBjaW5mby0+aW1hZ2Vfd2lkdGggKiAxNUwsIChsb25nKSBjaW5mby0+YmxvY2tfc2l6ZSk7Ci0gICAgY2luZm8tPm91dHB1dF9oZWlnaHQgPSAoSkRJTUVOU0lPTikKLSAgICAgIGpkaXZfcm91bmRfdXAoKGxvbmcpIGNpbmZvLT5pbWFnZV9oZWlnaHQgKiAxNUwsIChsb25nKSBjaW5mby0+YmxvY2tfc2l6ZSk7Ci0gICAgY2luZm8tPm1pbl9EQ1RfaF9zY2FsZWRfc2l6ZSA9IDE1OwotICAgIGNpbmZvLT5taW5fRENUX3Zfc2NhbGVkX3NpemUgPSAxNTsKLSAgfSBlbHNlIHsKLSAgICAvKiBQcm92aWRlIDE2L2Jsb2NrX3NpemUgc2NhbGluZyAqLwotICAgIGNpbmZvLT5vdXRwdXRfd2lkdGggPSAoSkRJTUVOU0lPTikKLSAgICAgIGpkaXZfcm91bmRfdXAoKGxvbmcpIGNpbmZvLT5pbWFnZV93aWR0aCAqIDE2TCwgKGxvbmcpIGNpbmZvLT5ibG9ja19zaXplKTsKLSAgICBjaW5mby0+b3V0cHV0X2hlaWdodCA9IChKRElNRU5TSU9OKQotICAgICAgamRpdl9yb3VuZF91cCgobG9uZykgY2luZm8tPmltYWdlX2hlaWdodCAqIDE2TCwgKGxvbmcpIGNpbmZvLT5ibG9ja19zaXplKTsKLSAgICBjaW5mby0+bWluX0RDVF9oX3NjYWxlZF9zaXplID0gMTY7Ci0gICAgY2luZm8tPm1pbl9EQ1Rfdl9zY2FsZWRfc2l6ZSA9IDE2OwogICB9Ci0KICAgLyogUmVjb21wdXRlIGRpbWVuc2lvbnMgb2YgY29tcG9uZW50cyAqLwogICBmb3IgKGNpID0gMCwgY29tcHB0ciA9IGNpbmZvLT5jb21wX2luZm87IGNpIDwgY2luZm8tPm51bV9jb21wb25lbnRzOwogICAgICAgIGNpKyssIGNvbXBwdHIrKykgewpAQCAtMjAyLDYgKzEwOCw3IEBACiAKICNlbmRpZiAvKiBJRENUX1NDQUxJTkdfU1VQUE9SVEVEICovCiB9CisjZW5kaWYKIAogCiBMT0NBTCh2b2lkKQpAQCAtMjM5LDEyMSArMTQ2LDM3IEBACiAJCQkJICAgY29tcHB0ci0+dl9zYW1wX2ZhY3Rvcik7CiAgIH0KIAotICAvKiBEZXJpdmUgYmxvY2tfc2l6ZSwgbmF0dXJhbF9vcmRlciwgYW5kIGxpbV9TZSAqLwotICBpZiAoY2luZm8tPmlzX2Jhc2VsaW5lIHx8IChjaW5mby0+cHJvZ3Jlc3NpdmVfbW9kZSAmJgotICAgICAgY2luZm8tPmNvbXBzX2luX3NjYW4pKSB7IC8qIG5vIHBzZXVkbyBTT1MgbWFya2VyICovCisjaWYgSlBFR19MSUJfVkVSU0lPTiA+PTgwCiAgICAgY2luZm8tPmJsb2NrX3NpemUgPSBEQ1RTSVpFOwogICAgIGNpbmZvLT5uYXR1cmFsX29yZGVyID0ganBlZ19uYXR1cmFsX29yZGVyOwogICAgIGNpbmZvLT5saW1fU2UgPSBEQ1RTSVpFMi0xOwotICB9IGVsc2UKLSAgICBzd2l0Y2ggKGNpbmZvLT5TZSkgewotICAgIGNhc2UgKDEqMS0xKToKLSAgICAgIGNpbmZvLT5ibG9ja19zaXplID0gMTsKLSAgICAgIGNpbmZvLT5uYXR1cmFsX29yZGVyID0ganBlZ19uYXR1cmFsX29yZGVyOyAvKiBub3QgbmVlZGVkICovCi0gICAgICBjaW5mby0+bGltX1NlID0gY2luZm8tPlNlOwotICAgICAgYnJlYWs7Ci0gICAgY2FzZSAoMioyLTEpOgotICAgICAgY2luZm8tPmJsb2NrX3NpemUgPSAyOwotICAgICAgY2luZm8tPm5hdHVyYWxfb3JkZXIgPSBqcGVnX25hdHVyYWxfb3JkZXIyOwotICAgICAgY2luZm8tPmxpbV9TZSA9IGNpbmZvLT5TZTsKLSAgICAgIGJyZWFrOwotICAgIGNhc2UgKDMqMy0xKToKLSAgICAgIGNpbmZvLT5ibG9ja19zaXplID0gMzsKLSAgICAgIGNpbmZvLT5uYXR1cmFsX29yZGVyID0ganBlZ19uYXR1cmFsX29yZGVyMzsKLSAgICAgIGNpbmZvLT5saW1fU2UgPSBjaW5mby0+U2U7Ci0gICAgICBicmVhazsKLSAgICBjYXNlICg0KjQtMSk6Ci0gICAgICBjaW5mby0+YmxvY2tfc2l6ZSA9IDQ7Ci0gICAgICBjaW5mby0+bmF0dXJhbF9vcmRlciA9IGpwZWdfbmF0dXJhbF9vcmRlcjQ7Ci0gICAgICBjaW5mby0+bGltX1NlID0gY2luZm8tPlNlOwotICAgICAgYnJlYWs7Ci0gICAgY2FzZSAoNSo1LTEpOgotICAgICAgY2luZm8tPmJsb2NrX3NpemUgPSA1OwotICAgICAgY2luZm8tPm5hdHVyYWxfb3JkZXIgPSBqcGVnX25hdHVyYWxfb3JkZXI1OwotICAgICAgY2luZm8tPmxpbV9TZSA9IGNpbmZvLT5TZTsKLSAgICAgIGJyZWFrOwotICAgIGNhc2UgKDYqNi0xKToKLSAgICAgIGNpbmZvLT5ibG9ja19zaXplID0gNjsKLSAgICAgIGNpbmZvLT5uYXR1cmFsX29yZGVyID0ganBlZ19uYXR1cmFsX29yZGVyNjsKLSAgICAgIGNpbmZvLT5saW1fU2UgPSBjaW5mby0+U2U7Ci0gICAgICBicmVhazsKLSAgICBjYXNlICg3KjctMSk6Ci0gICAgICBjaW5mby0+YmxvY2tfc2l6ZSA9IDc7Ci0gICAgICBjaW5mby0+bmF0dXJhbF9vcmRlciA9IGpwZWdfbmF0dXJhbF9vcmRlcjc7Ci0gICAgICBjaW5mby0+bGltX1NlID0gY2luZm8tPlNlOwotICAgICAgYnJlYWs7Ci0gICAgY2FzZSAoOCo4LTEpOgotICAgICAgY2luZm8tPmJsb2NrX3NpemUgPSA4OwotICAgICAgY2luZm8tPm5hdHVyYWxfb3JkZXIgPSBqcGVnX25hdHVyYWxfb3JkZXI7Ci0gICAgICBjaW5mby0+bGltX1NlID0gRENUU0laRTItMTsKLSAgICAgIGJyZWFrOwotICAgIGNhc2UgKDkqOS0xKToKLSAgICAgIGNpbmZvLT5ibG9ja19zaXplID0gOTsKLSAgICAgIGNpbmZvLT5uYXR1cmFsX29yZGVyID0ganBlZ19uYXR1cmFsX29yZGVyOwotICAgICAgY2luZm8tPmxpbV9TZSA9IERDVFNJWkUyLTE7Ci0gICAgICBicmVhazsKLSAgICBjYXNlICgxMCoxMC0xKToKLSAgICAgIGNpbmZvLT5ibG9ja19zaXplID0gMTA7Ci0gICAgICBjaW5mby0+bmF0dXJhbF9vcmRlciA9IGpwZWdfbmF0dXJhbF9vcmRlcjsKLSAgICAgIGNpbmZvLT5saW1fU2UgPSBEQ1RTSVpFMi0xOwotICAgICAgYnJlYWs7Ci0gICAgY2FzZSAoMTEqMTEtMSk6Ci0gICAgICBjaW5mby0+YmxvY2tfc2l6ZSA9IDExOwotICAgICAgY2luZm8tPm5hdHVyYWxfb3JkZXIgPSBqcGVnX25hdHVyYWxfb3JkZXI7Ci0gICAgICBjaW5mby0+bGltX1NlID0gRENUU0laRTItMTsKLSAgICAgIGJyZWFrOwotICAgIGNhc2UgKDEyKjEyLTEpOgotICAgICAgY2luZm8tPmJsb2NrX3NpemUgPSAxMjsKLSAgICAgIGNpbmZvLT5uYXR1cmFsX29yZGVyID0ganBlZ19uYXR1cmFsX29yZGVyOwotICAgICAgY2luZm8tPmxpbV9TZSA9IERDVFNJWkUyLTE7Ci0gICAgICBicmVhazsKLSAgICBjYXNlICgxMyoxMy0xKToKLSAgICAgIGNpbmZvLT5ibG9ja19zaXplID0gMTM7Ci0gICAgICBjaW5mby0+bmF0dXJhbF9vcmRlciA9IGpwZWdfbmF0dXJhbF9vcmRlcjsKLSAgICAgIGNpbmZvLT5saW1fU2UgPSBEQ1RTSVpFMi0xOwotICAgICAgYnJlYWs7Ci0gICAgY2FzZSAoMTQqMTQtMSk6Ci0gICAgICBjaW5mby0+YmxvY2tfc2l6ZSA9IDE0OwotICAgICAgY2luZm8tPm5hdHVyYWxfb3JkZXIgPSBqcGVnX25hdHVyYWxfb3JkZXI7Ci0gICAgICBjaW5mby0+bGltX1NlID0gRENUU0laRTItMTsKLSAgICAgIGJyZWFrOwotICAgIGNhc2UgKDE1KjE1LTEpOgotICAgICAgY2luZm8tPmJsb2NrX3NpemUgPSAxNTsKLSAgICAgIGNpbmZvLT5uYXR1cmFsX29yZGVyID0ganBlZ19uYXR1cmFsX29yZGVyOwotICAgICAgY2luZm8tPmxpbV9TZSA9IERDVFNJWkUyLTE7Ci0gICAgICBicmVhazsKLSAgICBjYXNlICgxNioxNi0xKToKLSAgICAgIGNpbmZvLT5ibG9ja19zaXplID0gMTY7Ci0gICAgICBjaW5mby0+bmF0dXJhbF9vcmRlciA9IGpwZWdfbmF0dXJhbF9vcmRlcjsKLSAgICAgIGNpbmZvLT5saW1fU2UgPSBEQ1RTSVpFMi0xOwotICAgICAgYnJlYWs7Ci0gICAgZGVmYXVsdDoKLSAgICAgIEVSUkVYSVQ0KGNpbmZvLCBKRVJSX0JBRF9QUk9HUkVTU0lPTiwKLQkgICAgICAgY2luZm8tPlNzLCBjaW5mby0+U2UsIGNpbmZvLT5BaCwgY2luZm8tPkFsKTsKLSAgICAgIGJyZWFrOwotICAgIH0KKyNlbmRpZgogCi0gIC8qIFdlIGluaXRpYWxpemUgRENUX3NjYWxlZF9zaXplIGFuZCBtaW5fRENUX3NjYWxlZF9zaXplIHRvIGJsb2NrX3NpemUuCi0gICAqIEluIHRoZSBmdWxsIGRlY29tcHJlc3NvciwKLSAgICogdGhpcyB3aWxsIGJlIG92ZXJyaWRkZW4gYnkganBlZ19jYWxjX291dHB1dF9kaW1lbnNpb25zIGluIGpkbWFzdGVyLmM7Ci0gICAqIGJ1dCBpbiB0aGUgdHJhbnNjb2RlciwKLSAgICoganBlZ19jYWxjX291dHB1dF9kaW1lbnNpb25zIGlzIG5vdCB1c2VkLCBzbyB3ZSBtdXN0IGRvIGl0IGhlcmUuCisgIC8qIFdlIGluaXRpYWxpemUgRENUX3NjYWxlZF9zaXplIGFuZCBtaW5fRENUX3NjYWxlZF9zaXplIHRvIERDVFNJWkUuCisgICAqIEluIHRoZSBmdWxsIGRlY29tcHJlc3NvciwgdGhpcyB3aWxsIGJlIG92ZXJyaWRkZW4gYnkgamRtYXN0ZXIuYzsKKyAgICogYnV0IGluIHRoZSB0cmFuc2NvZGVyLCBqZG1hc3Rlci5jIGlzIG5vdCB1c2VkLCBzbyB3ZSBtdXN0IGRvIGl0IGhlcmUuCiAgICAqLwotICBjaW5mby0+bWluX0RDVF9oX3NjYWxlZF9zaXplID0gY2luZm8tPmJsb2NrX3NpemU7Ci0gIGNpbmZvLT5taW5fRENUX3Zfc2NhbGVkX3NpemUgPSBjaW5mby0+YmxvY2tfc2l6ZTsKKyNpZiBKUEVHX0xJQl9WRVJTSU9OID49IDcwCisgIGNpbmZvLT5taW5fRENUX2hfc2NhbGVkX3NpemUgPSBjaW5mby0+bWluX0RDVF92X3NjYWxlZF9zaXplID0gRENUU0laRTsKKyNlbHNlCisgIGNpbmZvLT5taW5fRENUX3NjYWxlZF9zaXplID0gRENUU0laRTsKKyNlbmRpZgogCiAgIC8qIENvbXB1dGUgZGltZW5zaW9ucyBvZiBjb21wb25lbnRzICovCiAgIGZvciAoY2kgPSAwLCBjb21wcHRyID0gY2luZm8tPmNvbXBfaW5mbzsgY2kgPCBjaW5mby0+bnVtX2NvbXBvbmVudHM7CiAgICAgICAgY2krKywgY29tcHB0cisrKSB7Ci0gICAgY29tcHB0ci0+RENUX2hfc2NhbGVkX3NpemUgPSBjaW5mby0+YmxvY2tfc2l6ZTsKLSAgICBjb21wcHRyLT5EQ1Rfdl9zY2FsZWRfc2l6ZSA9IGNpbmZvLT5ibG9ja19zaXplOworI2lmIEpQRUdfTElCX1ZFUlNJT04gPj0gNzAKKyAgICBjb21wcHRyLT5EQ1RfaF9zY2FsZWRfc2l6ZSA9IGNvbXBwdHItPkRDVF92X3NjYWxlZF9zaXplID0gRENUU0laRTsKKyNlbHNlCisgICAgY29tcHB0ci0+RENUX3NjYWxlZF9zaXplID0gRENUU0laRTsKKyNlbmRpZgogICAgIC8qIFNpemUgaW4gRENUIGJsb2NrcyAqLwogICAgIGNvbXBwdHItPndpZHRoX2luX2Jsb2NrcyA9IChKRElNRU5TSU9OKQogICAgICAgamRpdl9yb3VuZF91cCgobG9uZykgY2luZm8tPmltYWdlX3dpZHRoICogKGxvbmcpIGNvbXBwdHItPmhfc2FtcF9mYWN0b3IsCi0JCSAgICAobG9uZykgKGNpbmZvLT5tYXhfaF9zYW1wX2ZhY3RvciAqIGNpbmZvLT5ibG9ja19zaXplKSk7CisJCSAgICAobG9uZykgKGNpbmZvLT5tYXhfaF9zYW1wX2ZhY3RvciAqIERDVFNJWkUpKTsKICAgICBjb21wcHRyLT5oZWlnaHRfaW5fYmxvY2tzID0gKEpESU1FTlNJT04pCiAgICAgICBqZGl2X3JvdW5kX3VwKChsb25nKSBjaW5mby0+aW1hZ2VfaGVpZ2h0ICogKGxvbmcpIGNvbXBwdHItPnZfc2FtcF9mYWN0b3IsCi0JCSAgICAobG9uZykgKGNpbmZvLT5tYXhfdl9zYW1wX2ZhY3RvciAqIGNpbmZvLT5ibG9ja19zaXplKSk7CisJCSAgICAobG9uZykgKGNpbmZvLT5tYXhfdl9zYW1wX2ZhY3RvciAqIERDVFNJWkUpKTsKICAgICAvKiBkb3duc2FtcGxlZF93aWR0aCBhbmQgZG93bnNhbXBsZWRfaGVpZ2h0IHdpbGwgYWxzbyBiZSBvdmVycmlkZGVuIGJ5CiAgICAgICogamRtYXN0ZXIuYyBpZiB3ZSBhcmUgZG9pbmcgZnVsbCBkZWNvbXByZXNzaW9uLiAgVGhlIHRyYW5zY29kZXIgbGlicmFyeQogICAgICAqIGRvZXNuJ3QgdXNlIHRoZXNlIHZhbHVlcywgYnV0IHRoZSBjYWxsaW5nIGFwcGxpY2F0aW9uIG1pZ2h0LgpAQCAtMzc0LDcgKzE5Nyw3IEBACiAgIC8qIENvbXB1dGUgbnVtYmVyIG9mIGZ1bGx5IGludGVybGVhdmVkIE1DVSByb3dzLiAqLwogICBjaW5mby0+dG90YWxfaU1DVV9yb3dzID0gKEpESU1FTlNJT04pCiAgICAgamRpdl9yb3VuZF91cCgobG9uZykgY2luZm8tPmltYWdlX2hlaWdodCwKLQkgICAgICAgICAgKGxvbmcpIChjaW5mby0+bWF4X3Zfc2FtcF9mYWN0b3IgKiBjaW5mby0+YmxvY2tfc2l6ZSkpOworCQkgIChsb25nKSAoY2luZm8tPm1heF92X3NhbXBfZmFjdG9yKkRDVFNJWkUpKTsKIAogICAvKiBEZWNpZGUgd2hldGhlciBmaWxlIGNvbnRhaW5zIG11bHRpcGxlIHNjYW5zICovCiAgIGlmIChjaW5mby0+Y29tcHNfaW5fc2NhbiA8IGNpbmZvLT5udW1fY29tcG9uZW50cyB8fCBjaW5mby0+cHJvZ3Jlc3NpdmVfbW9kZSkKQEAgLTQwNSw3ICsyMjgsNyBAQAogICAgIGNvbXBwdHItPk1DVV93aWR0aCA9IDE7CiAgICAgY29tcHB0ci0+TUNVX2hlaWdodCA9IDE7CiAgICAgY29tcHB0ci0+TUNVX2Jsb2NrcyA9IDE7Ci0gICAgY29tcHB0ci0+TUNVX3NhbXBsZV93aWR0aCA9IGNvbXBwdHItPkRDVF9oX3NjYWxlZF9zaXplOworICAgIGNvbXBwdHItPk1DVV9zYW1wbGVfd2lkdGggPSBjb21wcHRyLT5fRENUX3NjYWxlZF9zaXplOwogICAgIGNvbXBwdHItPmxhc3RfY29sX3dpZHRoID0gMTsKICAgICAvKiBGb3Igbm9uaW50ZXJsZWF2ZWQgc2NhbnMsIGl0IGlzIGNvbnZlbmllbnQgdG8gZGVmaW5lIGxhc3Rfcm93X2hlaWdodAogICAgICAqIGFzIHRoZSBudW1iZXIgb2YgYmxvY2sgcm93cyBwcmVzZW50IGluIHRoZSBsYXN0IGlNQ1Ugcm93LgpAQCAtNDI4LDEwICsyNTEsMTAgQEAKICAgICAvKiBPdmVyYWxsIGltYWdlIHNpemUgaW4gTUNVcyAqLwogICAgIGNpbmZvLT5NQ1VzX3Blcl9yb3cgPSAoSkRJTUVOU0lPTikKICAgICAgIGpkaXZfcm91bmRfdXAoKGxvbmcpIGNpbmZvLT5pbWFnZV93aWR0aCwKLQkJICAgIChsb25nKSAoY2luZm8tPm1heF9oX3NhbXBfZmFjdG9yICogY2luZm8tPmJsb2NrX3NpemUpKTsKKwkJICAgIChsb25nKSAoY2luZm8tPm1heF9oX3NhbXBfZmFjdG9yKkRDVFNJWkUpKTsKICAgICBjaW5mby0+TUNVX3Jvd3NfaW5fc2NhbiA9IChKRElNRU5TSU9OKQogICAgICAgamRpdl9yb3VuZF91cCgobG9uZykgY2luZm8tPmltYWdlX2hlaWdodCwKLQkJICAgIChsb25nKSAoY2luZm8tPm1heF92X3NhbXBfZmFjdG9yICogY2luZm8tPmJsb2NrX3NpemUpKTsKKwkJICAgIChsb25nKSAoY2luZm8tPm1heF92X3NhbXBfZmFjdG9yKkRDVFNJWkUpKTsKICAgICAKICAgICBjaW5mby0+YmxvY2tzX2luX01DVSA9IDA7CiAgICAgCkBAIC00NDEsNyArMjY0LDcgQEAKICAgICAgIGNvbXBwdHItPk1DVV93aWR0aCA9IGNvbXBwdHItPmhfc2FtcF9mYWN0b3I7CiAgICAgICBjb21wcHRyLT5NQ1VfaGVpZ2h0ID0gY29tcHB0ci0+dl9zYW1wX2ZhY3RvcjsKICAgICAgIGNvbXBwdHItPk1DVV9ibG9ja3MgPSBjb21wcHRyLT5NQ1Vfd2lkdGggKiBjb21wcHRyLT5NQ1VfaGVpZ2h0OwotICAgICAgY29tcHB0ci0+TUNVX3NhbXBsZV93aWR0aCA9IGNvbXBwdHItPk1DVV93aWR0aCAqIGNvbXBwdHItPkRDVF9oX3NjYWxlZF9zaXplOworICAgICAgY29tcHB0ci0+TUNVX3NhbXBsZV93aWR0aCA9IGNvbXBwdHItPk1DVV93aWR0aCAqIGNvbXBwdHItPl9EQ1Rfc2NhbGVkX3NpemU7CiAgICAgICAvKiBGaWd1cmUgbnVtYmVyIG9mIG5vbi1kdW1teSBibG9ja3MgaW4gbGFzdCBNQ1UgY29sdW1uICYgcm93ICovCiAgICAgICB0bXAgPSAoaW50KSAoY29tcHB0ci0+d2lkdGhfaW5fYmxvY2tzICUgY29tcHB0ci0+TUNVX3dpZHRoKTsKICAgICAgIGlmICh0bXAgPT0gMCkgdG1wID0gY29tcHB0ci0+TUNVX3dpZHRoOwpAQCAtNTQ5LDEwICszNzIsNiBAQAogICogVGhlIGNvbnN1bWVfaW5wdXQgbWV0aG9kIHBvaW50ZXIgcG9pbnRzIGVpdGhlciBoZXJlIG9yIHRvIHRoZQogICogY29lZmZpY2llbnQgY29udHJvbGxlcidzIGNvbnN1bWVfZGF0YSByb3V0aW5lLCBkZXBlbmRpbmcgb24gd2hldGhlcgogICogd2UgYXJlIHJlYWRpbmcgYSBjb21wcmVzc2VkIGRhdGEgc2VnbWVudCBvciBpbnRlci1zZWdtZW50IG1hcmtlcnMuCi0gKgotICogTm90ZTogVGhpcyBmdW5jdGlvbiBzaG91bGQgTk9UIHJldHVybiBhIHBzZXVkbyBTT1MgbWFya2VyICh3aXRoIHplcm8KLSAqIGNvbXBvbmVudCBudW1iZXIpIHRvIHRoZSBjYWxsZXIuICBBIHBzZXVkbyBtYXJrZXIgcmVjZWl2ZWQgYnkKLSAqIHJlYWRfbWFya2VycyBpcyBwcm9jZXNzZWQgYW5kIHRoZW4gc2tpcHBlZCBmb3Igb3RoZXIgbWFya2Vycy4KICAqLwogCiBNRVRIT0RERUYoaW50KQpAQCAtNTY0LDUwICszODMsNDEgQEAKICAgaWYgKGlucHV0Y3RsLT5wdWIuZW9pX3JlYWNoZWQpIC8qIEFmdGVyIGhpdHRpbmcgRU9JLCByZWFkIG5vIGZ1cnRoZXIgKi8KICAgICByZXR1cm4gSlBFR19SRUFDSEVEX0VPSTsKIAotICBmb3IgKDs7KSB7CQkJLyogTG9vcCB0byBwYXNzIHBzZXVkbyBTT1MgbWFya2VyICovCi0gICAgdmFsID0gKCpjaW5mby0+bWFya2VyLT5yZWFkX21hcmtlcnMpIChjaW5mbyk7CisgIHZhbCA9ICgqY2luZm8tPm1hcmtlci0+cmVhZF9tYXJrZXJzKSAoY2luZm8pOwogCi0gICAgc3dpdGNoICh2YWwpIHsKLSAgICBjYXNlIEpQRUdfUkVBQ0hFRF9TT1M6CS8qIEZvdW5kIFNPUyAqLwotICAgICAgaWYgKGlucHV0Y3RsLT5pbmhlYWRlcnMpIHsgLyogMXN0IFNPUyAqLwotCWlmIChpbnB1dGN0bC0+aW5oZWFkZXJzID09IDEpCi0JICBpbml0aWFsX3NldHVwKGNpbmZvKTsKLQlpZiAoY2luZm8tPmNvbXBzX2luX3NjYW4gPT0gMCkgeyAvKiBwc2V1ZG8gU09TIG1hcmtlciAqLwotCSAgaW5wdXRjdGwtPmluaGVhZGVycyA9IDI7Ci0JICBicmVhazsKLQl9Ci0JaW5wdXRjdGwtPmluaGVhZGVycyA9IDA7Ci0JLyogTm90ZTogc3RhcnRfaW5wdXRfcGFzcyBtdXN0IGJlIGNhbGxlZCBieSBqZG1hc3Rlci5jCi0JICogYmVmb3JlIGFueSBtb3JlIGlucHV0IGNhbiBiZSBjb25zdW1lZC4gIGpkYXBpbWluLmMgaXMKLQkgKiByZXNwb25zaWJsZSBmb3IgZW5mb3JjaW5nIHRoaXMgc2VxdWVuY2luZy4KLQkgKi8KLSAgICAgIH0gZWxzZSB7CQkJLyogMm5kIG9yIGxhdGVyIFNPUyBtYXJrZXIgKi8KLQlpZiAoISBpbnB1dGN0bC0+cHViLmhhc19tdWx0aXBsZV9zY2FucykKLQkgIEVSUkVYSVQoY2luZm8sIEpFUlJfRU9JX0VYUEVDVEVEKTsgLyogT29wcywgSSB3YXNuJ3QgZXhwZWN0aW5nIHRoaXMhICovCi0JaWYgKGNpbmZvLT5jb21wc19pbl9zY2FuID09IDApIC8qIHVuZXhwZWN0ZWQgcHNldWRvIFNPUyBtYXJrZXIgKi8KLQkgIGJyZWFrOwotCXN0YXJ0X2lucHV0X3Bhc3MoY2luZm8pOwotICAgICAgfQotICAgICAgcmV0dXJuIHZhbDsKLSAgICBjYXNlIEpQRUdfUkVBQ0hFRF9FT0k6CS8qIEZvdW5kIEVPSSAqLwotICAgICAgaW5wdXRjdGwtPnB1Yi5lb2lfcmVhY2hlZCA9IFRSVUU7Ci0gICAgICBpZiAoaW5wdXRjdGwtPmluaGVhZGVycykgeyAvKiBUYWJsZXMtb25seSBkYXRhc3RyZWFtLCBhcHBhcmVudGx5ICovCi0JaWYgKGNpbmZvLT5tYXJrZXItPnNhd19TT0YpCi0JICBFUlJFWElUKGNpbmZvLCBKRVJSX1NPRl9OT19TT1MpOwotICAgICAgfSBlbHNlIHsKLQkvKiBQcmV2ZW50IGluZmluaXRlIGxvb3AgaW4gY29lZiBjdGxyJ3MgZGVjb21wcmVzc19kYXRhIHJvdXRpbmUKLQkgKiBpZiB1c2VyIHNldCBvdXRwdXRfc2Nhbl9udW1iZXIgbGFyZ2VyIHRoYW4gbnVtYmVyIG9mIHNjYW5zLgotCSAqLwotCWlmIChjaW5mby0+b3V0cHV0X3NjYW5fbnVtYmVyID4gY2luZm8tPmlucHV0X3NjYW5fbnVtYmVyKQotCSAgY2luZm8tPm91dHB1dF9zY2FuX251bWJlciA9IGNpbmZvLT5pbnB1dF9zY2FuX251bWJlcjsKLSAgICAgIH0KLSAgICAgIHJldHVybiB2YWw7Ci0gICAgY2FzZSBKUEVHX1NVU1BFTkRFRDoKLSAgICAgIHJldHVybiB2YWw7Ci0gICAgZGVmYXVsdDoKLSAgICAgIHJldHVybiB2YWw7CisgIHN3aXRjaCAodmFsKSB7CisgIGNhc2UgSlBFR19SRUFDSEVEX1NPUzoJLyogRm91bmQgU09TICovCisgICAgaWYgKGlucHV0Y3RsLT5pbmhlYWRlcnMpIHsJLyogMXN0IFNPUyAqLworICAgICAgaW5pdGlhbF9zZXR1cChjaW5mbyk7CisgICAgICBpbnB1dGN0bC0+aW5oZWFkZXJzID0gRkFMU0U7CisgICAgICAvKiBOb3RlOiBzdGFydF9pbnB1dF9wYXNzIG11c3QgYmUgY2FsbGVkIGJ5IGpkbWFzdGVyLmMKKyAgICAgICAqIGJlZm9yZSBhbnkgbW9yZSBpbnB1dCBjYW4gYmUgY29uc3VtZWQuICBqZGFwaW1pbi5jIGlzCisgICAgICAgKiByZXNwb25zaWJsZSBmb3IgZW5mb3JjaW5nIHRoaXMgc2VxdWVuY2luZy4KKyAgICAgICAqLworICAgIH0gZWxzZSB7CQkJLyogMm5kIG9yIGxhdGVyIFNPUyBtYXJrZXIgKi8KKyAgICAgIGlmICghIGlucHV0Y3RsLT5wdWIuaGFzX211bHRpcGxlX3NjYW5zKQorCUVSUkVYSVQoY2luZm8sIEpFUlJfRU9JX0VYUEVDVEVEKTsgLyogT29wcywgSSB3YXNuJ3QgZXhwZWN0aW5nIHRoaXMhICovCisgICAgICBzdGFydF9pbnB1dF9wYXNzKGNpbmZvKTsKICAgICB9CisgICAgYnJlYWs7CisgIGNhc2UgSlBFR19SRUFDSEVEX0VPSToJLyogRm91bmQgRU9JICovCisgICAgaW5wdXRjdGwtPnB1Yi5lb2lfcmVhY2hlZCA9IFRSVUU7CisgICAgaWYgKGlucHV0Y3RsLT5pbmhlYWRlcnMpIHsJLyogVGFibGVzLW9ubHkgZGF0YXN0cmVhbSwgYXBwYXJlbnRseSAqLworICAgICAgaWYgKGNpbmZvLT5tYXJrZXItPnNhd19TT0YpCisJRVJSRVhJVChjaW5mbywgSkVSUl9TT0ZfTk9fU09TKTsKKyAgICB9IGVsc2UgeworICAgICAgLyogUHJldmVudCBpbmZpbml0ZSBsb29wIGluIGNvZWYgY3RscidzIGRlY29tcHJlc3NfZGF0YSByb3V0aW5lCisgICAgICAgKiBpZiB1c2VyIHNldCBvdXRwdXRfc2Nhbl9udW1iZXIgbGFyZ2VyIHRoYW4gbnVtYmVyIG9mIHNjYW5zLgorICAgICAgICovCisgICAgICBpZiAoY2luZm8tPm91dHB1dF9zY2FuX251bWJlciA+IGNpbmZvLT5pbnB1dF9zY2FuX251bWJlcikKKwljaW5mby0+b3V0cHV0X3NjYW5fbnVtYmVyID0gY2luZm8tPmlucHV0X3NjYW5fbnVtYmVyOworICAgIH0KKyAgICBicmVhazsKKyAgY2FzZSBKUEVHX1NVU1BFTkRFRDoKKyAgICBicmVhazsKICAgfQorCisgIHJldHVybiB2YWw7CiB9CiAKIApAQCAtNjIzLDcgKzQzMyw3IEBACiAgIGlucHV0Y3RsLT5wdWIuY29uc3VtZV9pbnB1dCA9IGNvbnN1bWVfbWFya2VyczsKICAgaW5wdXRjdGwtPnB1Yi5oYXNfbXVsdGlwbGVfc2NhbnMgPSBGQUxTRTsgLyogInVua25vd24iIHdvdWxkIGJlIGJldHRlciAqLwogICBpbnB1dGN0bC0+cHViLmVvaV9yZWFjaGVkID0gRkFMU0U7Ci0gIGlucHV0Y3RsLT5pbmhlYWRlcnMgPSAxOworICBpbnB1dGN0bC0+aW5oZWFkZXJzID0gVFJVRTsKICAgLyogUmVzZXQgb3RoZXIgbW9kdWxlcyAqLwogICAoKmNpbmZvLT5lcnItPnJlc2V0X2Vycm9yX21ncikgKChqX2NvbW1vbl9wdHIpIGNpbmZvKTsKICAgKCpjaW5mby0+bWFya2VyLT5yZXNldF9tYXJrZXJfcmVhZGVyKSAoY2luZm8pOwpAQCAtNjU3LDUgKzQ2Nyw1IEBACiAgICAqLwogICBpbnB1dGN0bC0+cHViLmhhc19tdWx0aXBsZV9zY2FucyA9IEZBTFNFOyAvKiAidW5rbm93biIgd291bGQgYmUgYmV0dGVyICovCiAgIGlucHV0Y3RsLT5wdWIuZW9pX3JlYWNoZWQgPSBGQUxTRTsKLSAgaW5wdXRjdGwtPmluaGVhZGVycyA9IDE7CisgIGlucHV0Y3RsLT5pbmhlYWRlcnMgPSBUUlVFOwogfQpkaWZmIC0tZ2l0IGEvamRtYWluY3QuYyBiL2pkbWFpbmN0LmMKaW5kZXggMDI3MjNjYS4uNjdmNjIxNSAxMDA2NDQKLS0tIGEvamRtYWluY3QuYworKysgYi9qZG1haW5jdC5jCkBAIC0yLDYgKzIsNyBAQAogICogamRtYWluY3QuYwogICoKICAqIENvcHlyaWdodCAoQykgMTk5NC0xOTk2LCBUaG9tYXMgRy4gTGFuZS4KKyAqIENvcHlyaWdodCAoQykgMjAxMCwgRC4gUi4gQ29tbWFuZGVyLgogICogVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEluZGVwZW5kZW50IEpQRUcgR3JvdXAncyBzb2Z0d2FyZS4KICAqIEZvciBjb25kaXRpb25zIG9mIGRpc3RyaWJ1dGlvbiBhbmQgdXNlLCBzZWUgdGhlIGFjY29tcGFueWluZyBSRUFETUUgZmlsZS4KICAqCkBAIC0xNiw2ICsxNyw3IEBACiAjZGVmaW5lIEpQRUdfSU5URVJOQUxTCiAjaW5jbHVkZSAiamluY2x1ZGUuaCIKICNpbmNsdWRlICJqcGVnbGliLmgiCisjaW5jbHVkZSAianBlZ2NvbXAuaCIKIAogCiAvKgpAQCAtMTYxLDcgKzE2Myw3IEBACiB7CiAgIG15X21haW5fcHRyIG1haW4gPSAobXlfbWFpbl9wdHIpIGNpbmZvLT5tYWluOwogICBpbnQgY2ksIHJncm91cDsKLSAgaW50IE0gPSBjaW5mby0+bWluX0RDVF92X3NjYWxlZF9zaXplOworICBpbnQgTSA9IGNpbmZvLT5fbWluX0RDVF9zY2FsZWRfc2l6ZTsKICAganBlZ19jb21wb25lbnRfaW5mbyAqY29tcHB0cjsKICAgSlNBTVBBUlJBWSB4YnVmOwogCkBAIC0xNzUsOCArMTc3LDggQEAKIAogICBmb3IgKGNpID0gMCwgY29tcHB0ciA9IGNpbmZvLT5jb21wX2luZm87IGNpIDwgY2luZm8tPm51bV9jb21wb25lbnRzOwogICAgICAgIGNpKyssIGNvbXBwdHIrKykgewotICAgIHJncm91cCA9IChjb21wcHRyLT52X3NhbXBfZmFjdG9yICogY29tcHB0ci0+RENUX3Zfc2NhbGVkX3NpemUpIC8KLSAgICAgIGNpbmZvLT5taW5fRENUX3Zfc2NhbGVkX3NpemU7IC8qIGhlaWdodCBvZiBhIHJvdyBncm91cCBvZiBjb21wb25lbnQgKi8KKyAgICByZ3JvdXAgPSAoY29tcHB0ci0+dl9zYW1wX2ZhY3RvciAqIGNvbXBwdHItPl9EQ1Rfc2NhbGVkX3NpemUpIC8KKyAgICAgIGNpbmZvLT5fbWluX0RDVF9zY2FsZWRfc2l6ZTsgLyogaGVpZ2h0IG9mIGEgcm93IGdyb3VwIG9mIGNvbXBvbmVudCAqLwogICAgIC8qIEdldCBzcGFjZSBmb3IgcG9pbnRlciBsaXN0cyAtLS0gTSs0IHJvdyBncm91cHMgaW4gZWFjaCBsaXN0LgogICAgICAqIFdlIGFsbG9jIGJvdGggcG9pbnRlciBsaXN0cyB3aXRoIG9uZSBjYWxsIHRvIHNhdmUgYSBmZXcgY3ljbGVzLgogICAgICAqLwpAQCAtMjAyLDE0ICsyMDQsMTQgQEAKIHsKICAgbXlfbWFpbl9wdHIgbWFpbiA9IChteV9tYWluX3B0cikgY2luZm8tPm1haW47CiAgIGludCBjaSwgaSwgcmdyb3VwOwotICBpbnQgTSA9IGNpbmZvLT5taW5fRENUX3Zfc2NhbGVkX3NpemU7CisgIGludCBNID0gY2luZm8tPl9taW5fRENUX3NjYWxlZF9zaXplOwogICBqcGVnX2NvbXBvbmVudF9pbmZvICpjb21wcHRyOwogICBKU0FNUEFSUkFZIGJ1ZiwgeGJ1ZjAsIHhidWYxOwogCiAgIGZvciAoY2kgPSAwLCBjb21wcHRyID0gY2luZm8tPmNvbXBfaW5mbzsgY2kgPCBjaW5mby0+bnVtX2NvbXBvbmVudHM7CiAgICAgICAgY2krKywgY29tcHB0cisrKSB7Ci0gICAgcmdyb3VwID0gKGNvbXBwdHItPnZfc2FtcF9mYWN0b3IgKiBjb21wcHRyLT5EQ1Rfdl9zY2FsZWRfc2l6ZSkgLwotICAgICAgY2luZm8tPm1pbl9EQ1Rfdl9zY2FsZWRfc2l6ZTsgLyogaGVpZ2h0IG9mIGEgcm93IGdyb3VwIG9mIGNvbXBvbmVudCAqLworICAgIHJncm91cCA9IChjb21wcHRyLT52X3NhbXBfZmFjdG9yICogY29tcHB0ci0+X0RDVF9zY2FsZWRfc2l6ZSkgLworICAgICAgY2luZm8tPl9taW5fRENUX3NjYWxlZF9zaXplOyAvKiBoZWlnaHQgb2YgYSByb3cgZ3JvdXAgb2YgY29tcG9uZW50ICovCiAgICAgeGJ1ZjAgPSBtYWluLT54YnVmZmVyWzBdW2NpXTsKICAgICB4YnVmMSA9IG1haW4tPnhidWZmZXJbMV1bY2ldOwogICAgIC8qIEZpcnN0IGNvcHkgdGhlIHdvcmtzcGFjZSBwb2ludGVycyBhcy1pcyAqLwpAQCAtMjQyLDE0ICsyNDQsMTQgQEAKIHsKICAgbXlfbWFpbl9wdHIgbWFpbiA9IChteV9tYWluX3B0cikgY2luZm8tPm1haW47CiAgIGludCBjaSwgaSwgcmdyb3VwOwotICBpbnQgTSA9IGNpbmZvLT5taW5fRENUX3Zfc2NhbGVkX3NpemU7CisgIGludCBNID0gY2luZm8tPl9taW5fRENUX3NjYWxlZF9zaXplOwogICBqcGVnX2NvbXBvbmVudF9pbmZvICpjb21wcHRyOwogICBKU0FNUEFSUkFZIHhidWYwLCB4YnVmMTsKIAogICBmb3IgKGNpID0gMCwgY29tcHB0ciA9IGNpbmZvLT5jb21wX2luZm87IGNpIDwgY2luZm8tPm51bV9jb21wb25lbnRzOwogICAgICAgIGNpKyssIGNvbXBwdHIrKykgewotICAgIHJncm91cCA9IChjb21wcHRyLT52X3NhbXBfZmFjdG9yICogY29tcHB0ci0+RENUX3Zfc2NhbGVkX3NpemUpIC8KLSAgICAgIGNpbmZvLT5taW5fRENUX3Zfc2NhbGVkX3NpemU7IC8qIGhlaWdodCBvZiBhIHJvdyBncm91cCBvZiBjb21wb25lbnQgKi8KKyAgICByZ3JvdXAgPSAoY29tcHB0ci0+dl9zYW1wX2ZhY3RvciAqIGNvbXBwdHItPl9EQ1Rfc2NhbGVkX3NpemUpIC8KKyAgICAgIGNpbmZvLT5fbWluX0RDVF9zY2FsZWRfc2l6ZTsgLyogaGVpZ2h0IG9mIGEgcm93IGdyb3VwIG9mIGNvbXBvbmVudCAqLwogICAgIHhidWYwID0gbWFpbi0+eGJ1ZmZlclswXVtjaV07CiAgICAgeGJ1ZjEgPSBtYWluLT54YnVmZmVyWzFdW2NpXTsKICAgICBmb3IgKGkgPSAwOyBpIDwgcmdyb3VwOyBpKyspIHsKQEAgLTI3Nyw4ICsyNzksOCBAQAogICBmb3IgKGNpID0gMCwgY29tcHB0ciA9IGNpbmZvLT5jb21wX2luZm87IGNpIDwgY2luZm8tPm51bV9jb21wb25lbnRzOwogICAgICAgIGNpKyssIGNvbXBwdHIrKykgewogICAgIC8qIENvdW50IHNhbXBsZSByb3dzIGluIG9uZSBpTUNVIHJvdyBhbmQgaW4gb25lIHJvdyBncm91cCAqLwotICAgIGlNQ1VoZWlnaHQgPSBjb21wcHRyLT52X3NhbXBfZmFjdG9yICogY29tcHB0ci0+RENUX3Zfc2NhbGVkX3NpemU7Ci0gICAgcmdyb3VwID0gaU1DVWhlaWdodCAvIGNpbmZvLT5taW5fRENUX3Zfc2NhbGVkX3NpemU7CisgICAgaU1DVWhlaWdodCA9IGNvbXBwdHItPnZfc2FtcF9mYWN0b3IgKiBjb21wcHRyLT5fRENUX3NjYWxlZF9zaXplOworICAgIHJncm91cCA9IGlNQ1VoZWlnaHQgLyBjaW5mby0+X21pbl9EQ1Rfc2NhbGVkX3NpemU7CiAgICAgLyogQ291bnQgbm9uZHVtbXkgc2FtcGxlIHJvd3MgcmVtYWluaW5nIGZvciB0aGlzIGNvbXBvbmVudCAqLwogICAgIHJvd3NfbGVmdCA9IChpbnQpIChjb21wcHRyLT5kb3duc2FtcGxlZF9oZWlnaHQgJSAoSkRJTUVOU0lPTikgaU1DVWhlaWdodCk7CiAgICAgaWYgKHJvd3NfbGVmdCA9PSAwKSByb3dzX2xlZnQgPSBpTUNVaGVpZ2h0OwpAQCAtMzU3LDcgKzM1OSw3IEBACiAgIH0KIAogICAvKiBUaGVyZSBhcmUgYWx3YXlzIG1pbl9EQ1Rfc2NhbGVkX3NpemUgcm93IGdyb3VwcyBpbiBhbiBpTUNVIHJvdy4gKi8KLSAgcm93Z3JvdXBzX2F2YWlsID0gKEpESU1FTlNJT04pIGNpbmZvLT5taW5fRENUX3Zfc2NhbGVkX3NpemU7CisgIHJvd2dyb3Vwc19hdmFpbCA9IChKRElNRU5TSU9OKSBjaW5mby0+X21pbl9EQ1Rfc2NhbGVkX3NpemU7CiAgIC8qIE5vdGU6IGF0IHRoZSBib3R0b20gb2YgdGhlIGltYWdlLCB3ZSBtYXkgcGFzcyBleHRyYSBnYXJiYWdlIHJvdyBncm91cHMKICAgICogdG8gdGhlIHBvc3Rwcm9jZXNzb3IuICBUaGUgcG9zdHByb2Nlc3NvciBoYXMgdG8gY2hlY2sgZm9yIGJvdHRvbQogICAgKiBvZiBpbWFnZSBhbnl3YXkgKGF0IHJvdyByZXNvbHV0aW9uKSwgc28gbm8gcG9pbnQgaW4gdXMgZG9pbmcgaXQgdG9vLgpAQCAtNDE3LDcgKzQxOSw3IEBACiAgIGNhc2UgQ1RYX1BSRVBBUkVfRk9SX0lNQ1U6CiAgICAgLyogUHJlcGFyZSB0byBwcm9jZXNzIGZpcnN0IE0tMSByb3cgZ3JvdXBzIG9mIHRoaXMgaU1DVSByb3cgKi8KICAgICBtYWluLT5yb3dncm91cF9jdHIgPSAwOwotICAgIG1haW4tPnJvd2dyb3Vwc19hdmFpbCA9IChKRElNRU5TSU9OKSAoY2luZm8tPm1pbl9EQ1Rfdl9zY2FsZWRfc2l6ZSAtIDEpOworICAgIG1haW4tPnJvd2dyb3Vwc19hdmFpbCA9IChKRElNRU5TSU9OKSAoY2luZm8tPl9taW5fRENUX3NjYWxlZF9zaXplIC0gMSk7CiAgICAgLyogQ2hlY2sgZm9yIGJvdHRvbSBvZiBpbWFnZTogaWYgc28sIHR3ZWFrIHBvaW50ZXJzIHRvICJkdXBsaWNhdGUiCiAgICAgICogdGhlIGxhc3Qgc2FtcGxlIHJvdywgYW5kIGFkanVzdCByb3dncm91cHNfYXZhaWwgdG8gaWdub3JlIHBhZGRpbmcgcm93cy4KICAgICAgKi8KQEAgLTQ0MCw4ICs0NDIsOCBAQAogICAgIG1haW4tPmJ1ZmZlcl9mdWxsID0gRkFMU0U7CiAgICAgLyogU3RpbGwgbmVlZCB0byBwcm9jZXNzIGxhc3Qgcm93IGdyb3VwIG9mIHRoaXMgaU1DVSByb3csICovCiAgICAgLyogd2hpY2ggaXMgc2F2ZWQgYXQgaW5kZXggTSsxIG9mIHRoZSBvdGhlciB4YnVmZmVyICovCi0gICAgbWFpbi0+cm93Z3JvdXBfY3RyID0gKEpESU1FTlNJT04pIChjaW5mby0+bWluX0RDVF92X3NjYWxlZF9zaXplICsgMSk7Ci0gICAgbWFpbi0+cm93Z3JvdXBzX2F2YWlsID0gKEpESU1FTlNJT04pIChjaW5mby0+bWluX0RDVF92X3NjYWxlZF9zaXplICsgMik7CisgICAgbWFpbi0+cm93Z3JvdXBfY3RyID0gKEpESU1FTlNJT04pIChjaW5mby0+X21pbl9EQ1Rfc2NhbGVkX3NpemUgKyAxKTsKKyAgICBtYWluLT5yb3dncm91cHNfYXZhaWwgPSAoSkRJTUVOU0lPTikgKGNpbmZvLT5fbWluX0RDVF9zY2FsZWRfc2l6ZSArIDIpOwogICAgIG1haW4tPmNvbnRleHRfc3RhdGUgPSBDVFhfUE9TVFBPTkVEX1JPVzsKICAgfQogfQpAQCAtNDkyLDIxICs0OTQsMjEgQEAKICAgICogbmdyb3VwcyBpcyB0aGUgbnVtYmVyIG9mIHJvdyBncm91cHMgd2UgbmVlZC4KICAgICovCiAgIGlmIChjaW5mby0+dXBzYW1wbGUtPm5lZWRfY29udGV4dF9yb3dzKSB7Ci0gICAgaWYgKGNpbmZvLT5taW5fRENUX3Zfc2NhbGVkX3NpemUgPCAyKSAvKiB1bnN1cHBvcnRlZCwgc2VlIGNvbW1lbnRzIGFib3ZlICovCisgICAgaWYgKGNpbmZvLT5fbWluX0RDVF9zY2FsZWRfc2l6ZSA8IDIpIC8qIHVuc3VwcG9ydGVkLCBzZWUgY29tbWVudHMgYWJvdmUgKi8KICAgICAgIEVSUkVYSVQoY2luZm8sIEpFUlJfTk9USU1QTCk7CiAgICAgYWxsb2NfZnVubnlfcG9pbnRlcnMoY2luZm8pOyAvKiBBbGxvYyBzcGFjZSBmb3IgeGJ1ZmZlcltdIGxpc3RzICovCi0gICAgbmdyb3VwcyA9IGNpbmZvLT5taW5fRENUX3Zfc2NhbGVkX3NpemUgKyAyOworICAgIG5ncm91cHMgPSBjaW5mby0+X21pbl9EQ1Rfc2NhbGVkX3NpemUgKyAyOwogICB9IGVsc2UgewotICAgIG5ncm91cHMgPSBjaW5mby0+bWluX0RDVF92X3NjYWxlZF9zaXplOworICAgIG5ncm91cHMgPSBjaW5mby0+X21pbl9EQ1Rfc2NhbGVkX3NpemU7CiAgIH0KIAogICBmb3IgKGNpID0gMCwgY29tcHB0ciA9IGNpbmZvLT5jb21wX2luZm87IGNpIDwgY2luZm8tPm51bV9jb21wb25lbnRzOwogICAgICAgIGNpKyssIGNvbXBwdHIrKykgewotICAgIHJncm91cCA9IChjb21wcHRyLT52X3NhbXBfZmFjdG9yICogY29tcHB0ci0+RENUX3Zfc2NhbGVkX3NpemUpIC8KLSAgICAgIGNpbmZvLT5taW5fRENUX3Zfc2NhbGVkX3NpemU7IC8qIGhlaWdodCBvZiBhIHJvdyBncm91cCBvZiBjb21wb25lbnQgKi8KKyAgICByZ3JvdXAgPSAoY29tcHB0ci0+dl9zYW1wX2ZhY3RvciAqIGNvbXBwdHItPl9EQ1Rfc2NhbGVkX3NpemUpIC8KKyAgICAgIGNpbmZvLT5fbWluX0RDVF9zY2FsZWRfc2l6ZTsgLyogaGVpZ2h0IG9mIGEgcm93IGdyb3VwIG9mIGNvbXBvbmVudCAqLwogICAgIG1haW4tPmJ1ZmZlcltjaV0gPSAoKmNpbmZvLT5tZW0tPmFsbG9jX3NhcnJheSkKIAkJCSgoal9jb21tb25fcHRyKSBjaW5mbywgSlBPT0xfSU1BR0UsCi0JCQkgY29tcHB0ci0+d2lkdGhfaW5fYmxvY2tzICogY29tcHB0ci0+RENUX2hfc2NhbGVkX3NpemUsCisJCQkgY29tcHB0ci0+d2lkdGhfaW5fYmxvY2tzICogY29tcHB0ci0+X0RDVF9zY2FsZWRfc2l6ZSwKIAkJCSAoSkRJTUVOU0lPTikgKHJncm91cCAqIG5ncm91cHMpKTsKICAgfQogfQpkaWZmIC0tZ2l0IGEvamRtYXJrZXIuYyBiL2pkbWFya2VyLmMKaW5kZXggZjJhOWNjNC4uZjRjY2E4YyAxMDA2NDQKLS0tIGEvamRtYXJrZXIuYworKysgYi9qZG1hcmtlci5jCkBAIC0yLDcgKzIsNiBAQAogICogamRtYXJrZXIuYwogICoKICAqIENvcHlyaWdodCAoQykgMTk5MS0xOTk4LCBUaG9tYXMgRy4gTGFuZS4KLSAqIE1vZGlmaWVkIDIwMDkgYnkgR3VpZG8gVm9sbGJlZGluZy4KICAqIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBJbmRlcGVuZGVudCBKUEVHIEdyb3VwJ3Mgc29mdHdhcmUuCiAgKiBGb3IgY29uZGl0aW9ucyBvZiBkaXN0cmlidXRpb24gYW5kIHVzZSwgc2VlIHRoZSBhY2NvbXBhbnlpbmcgUkVBRE1FIGZpbGUuCiAgKgpAQCAtMjM1LDggKzIzNCw3IEBACiAKIAogTE9DQUwoYm9vbGVhbikKLWdldF9zb2YgKGpfZGVjb21wcmVzc19wdHIgY2luZm8sIGJvb2xlYW4gaXNfYmFzZWxpbmUsIGJvb2xlYW4gaXNfcHJvZywKLQkgYm9vbGVhbiBpc19hcml0aCkKK2dldF9zb2YgKGpfZGVjb21wcmVzc19wdHIgY2luZm8sIGJvb2xlYW4gaXNfcHJvZywgYm9vbGVhbiBpc19hcml0aCkKIC8qIFByb2Nlc3MgYSBTT0ZuIG1hcmtlciAqLwogewogICBJTlQzMiBsZW5ndGg7CkBAIC0yNDQsNyArMjQyLDYgQEAKICAganBlZ19jb21wb25lbnRfaW5mbyAqIGNvbXBwdHI7CiAgIElOUFVUX1ZBUlMoY2luZm8pOwogCi0gIGNpbmZvLT5pc19iYXNlbGluZSA9IGlzX2Jhc2VsaW5lOwogICBjaW5mby0+cHJvZ3Jlc3NpdmVfbW9kZSA9IGlzX3Byb2c7CiAgIGNpbmZvLT5hcml0aF9jb2RlID0gaXNfYXJpdGg7CiAKQEAgLTMxOCw5ICszMTUsNyBAQAogCiAgIFRSQUNFTVMxKGNpbmZvLCAxLCBKVFJDX1NPUywgbik7CiAKLSAgaWYgKGxlbmd0aCAhPSAobiAqIDIgKyA2KSB8fCBuID4gTUFYX0NPTVBTX0lOX1NDQU4gfHwKLSAgICAgIChuID09IDAgJiYgIWNpbmZvLT5wcm9ncmVzc2l2ZV9tb2RlKSkKLSAgICAgIC8qIHBzZXVkbyBTT1MgbWFya2VyIG9ubHkgYWxsb3dlZCBpbiBwcm9ncmVzc2l2ZSBtb2RlICovCisgIGlmIChsZW5ndGggIT0gKG4gKiAyICsgNikgfHwgbiA8IDEgfHwgbiA+IE1BWF9DT01QU19JTl9TQ0FOKQogICAgIEVSUkVYSVQoY2luZm8sIEpFUlJfQkFEX0xFTkdUSCk7CiAKICAgY2luZm8tPmNvbXBzX2luX3NjYW4gPSBuOwpAQCAtMzY0LDggKzM1OSw4IEBACiAgIC8qIFByZXBhcmUgdG8gc2NhbiBkYXRhICYgcmVzdGFydCBtYXJrZXJzICovCiAgIGNpbmZvLT5tYXJrZXItPm5leHRfcmVzdGFydF9udW0gPSAwOwogCi0gIC8qIENvdW50IGFub3RoZXIgKG5vbi1wc2V1ZG8pIFNPUyBtYXJrZXIgKi8KLSAgaWYgKG4pIGNpbmZvLT5pbnB1dF9zY2FuX251bWJlcisrOworICAvKiBDb3VudCBhbm90aGVyIFNPUyBtYXJrZXIgKi8KKyAgY2luZm8tPmlucHV0X3NjYW5fbnVtYmVyKys7CiAKICAgSU5QVVRfU1lOQyhjaW5mbyk7CiAgIHJldHVybiBUUlVFOwpAQCAtNDk1LDE4ICs0OTAsMTYgQEAKIGdldF9kcXQgKGpfZGVjb21wcmVzc19wdHIgY2luZm8pCiAvKiBQcm9jZXNzIGEgRFFUIG1hcmtlciAqLwogewotICBJTlQzMiBsZW5ndGgsIGNvdW50LCBpOwotICBpbnQgbiwgcHJlYzsKKyAgSU5UMzIgbGVuZ3RoOworICBpbnQgbiwgaSwgcHJlYzsKICAgdW5zaWduZWQgaW50IHRtcDsKICAgSlFVQU5UX1RCTCAqcXVhbnRfcHRyOwotICBjb25zdCBpbnQgKm5hdHVyYWxfb3JkZXI7CiAgIElOUFVUX1ZBUlMoY2luZm8pOwogCiAgIElOUFVUXzJCWVRFUyhjaW5mbywgbGVuZ3RoLCByZXR1cm4gRkFMU0UpOwogICBsZW5ndGggLT0gMjsKIAogICB3aGlsZSAobGVuZ3RoID4gMCkgewotICAgIGxlbmd0aC0tOwogICAgIElOUFVUX0JZVEUoY2luZm8sIG4sIHJldHVybiBGQUxTRSk7CiAgICAgcHJlYyA9IG4gPj4gNDsKICAgICBuICY9IDB4MEY7CkBAIC01MjAsNDMgKzUxMywxMyBAQAogICAgICAgY2luZm8tPnF1YW50X3RibF9wdHJzW25dID0ganBlZ19hbGxvY19xdWFudF90YWJsZSgoal9jb21tb25fcHRyKSBjaW5mbyk7CiAgICAgcXVhbnRfcHRyID0gY2luZm8tPnF1YW50X3RibF9wdHJzW25dOwogCi0gICAgaWYgKHByZWMpIHsKLSAgICAgIGlmIChsZW5ndGggPCBEQ1RTSVpFMiAqIDIpIHsKLQkvKiBJbml0aWFsaXplIGZ1bGwgdGFibGUgZm9yIHNhZmV0eS4gKi8KLQlmb3IgKGkgPSAwOyBpIDwgRENUU0laRTI7IGkrKykgewotCSAgcXVhbnRfcHRyLT5xdWFudHZhbFtpXSA9IDE7Ci0JfQotCWNvdW50ID0gbGVuZ3RoID4+IDE7Ci0gICAgICB9IGVsc2UKLQljb3VudCA9IERDVFNJWkUyOwotICAgIH0gZWxzZSB7Ci0gICAgICBpZiAobGVuZ3RoIDwgRENUU0laRTIpIHsKLQkvKiBJbml0aWFsaXplIGZ1bGwgdGFibGUgZm9yIHNhZmV0eS4gKi8KLQlmb3IgKGkgPSAwOyBpIDwgRENUU0laRTI7IGkrKykgewotCSAgcXVhbnRfcHRyLT5xdWFudHZhbFtpXSA9IDE7Ci0JfQotCWNvdW50ID0gbGVuZ3RoOwotICAgICAgfSBlbHNlCi0JY291bnQgPSBEQ1RTSVpFMjsKLSAgICB9Ci0KLSAgICBzd2l0Y2ggKGNvdW50KSB7Ci0gICAgY2FzZSAoMioyKTogbmF0dXJhbF9vcmRlciA9IGpwZWdfbmF0dXJhbF9vcmRlcjI7IGJyZWFrOwotICAgIGNhc2UgKDMqMyk6IG5hdHVyYWxfb3JkZXIgPSBqcGVnX25hdHVyYWxfb3JkZXIzOyBicmVhazsKLSAgICBjYXNlICg0KjQpOiBuYXR1cmFsX29yZGVyID0ganBlZ19uYXR1cmFsX29yZGVyNDsgYnJlYWs7Ci0gICAgY2FzZSAoNSo1KTogbmF0dXJhbF9vcmRlciA9IGpwZWdfbmF0dXJhbF9vcmRlcjU7IGJyZWFrOwotICAgIGNhc2UgKDYqNik6IG5hdHVyYWxfb3JkZXIgPSBqcGVnX25hdHVyYWxfb3JkZXI2OyBicmVhazsKLSAgICBjYXNlICg3KjcpOiBuYXR1cmFsX29yZGVyID0ganBlZ19uYXR1cmFsX29yZGVyNzsgYnJlYWs7Ci0gICAgZGVmYXVsdDogICAgbmF0dXJhbF9vcmRlciA9IGpwZWdfbmF0dXJhbF9vcmRlcjsgIGJyZWFrOwotICAgIH0KLQotICAgIGZvciAoaSA9IDA7IGkgPCBjb3VudDsgaSsrKSB7CisgICAgZm9yIChpID0gMDsgaSA8IERDVFNJWkUyOyBpKyspIHsKICAgICAgIGlmIChwcmVjKQogCUlOUFVUXzJCWVRFUyhjaW5mbywgdG1wLCByZXR1cm4gRkFMU0UpOwogICAgICAgZWxzZQogCUlOUFVUX0JZVEUoY2luZm8sIHRtcCwgcmV0dXJuIEZBTFNFKTsKICAgICAgIC8qIFdlIGNvbnZlcnQgdGhlIHppZ3phZy1vcmRlciB0YWJsZSB0byBuYXR1cmFsIGFycmF5IG9yZGVyLiAqLwotICAgICAgcXVhbnRfcHRyLT5xdWFudHZhbFtuYXR1cmFsX29yZGVyW2ldXSA9IChVSU5UMTYpIHRtcDsKKyAgICAgIHF1YW50X3B0ci0+cXVhbnR2YWxbanBlZ19uYXR1cmFsX29yZGVyW2ldXSA9IChVSU5UMTYpIHRtcDsKICAgICB9CiAKICAgICBpZiAoY2luZm8tPmVyci0+dHJhY2VfbGV2ZWwgPj0gMikgewpAQCAtNTY5LDggKzUzMiw4IEBACiAgICAgICB9CiAgICAgfQogCi0gICAgbGVuZ3RoIC09IGNvdW50OwotICAgIGlmIChwcmVjKSBsZW5ndGggLT0gY291bnQ7CisgICAgbGVuZ3RoIC09IERDVFNJWkUyKzE7CisgICAgaWYgKHByZWMpIGxlbmd0aCAtPSBEQ1RTSVpFMjsKICAgfQogCiAgIGlmIChsZW5ndGggIT0gMCkKQEAgLTk4MywxMSArOTQ2LDYgQEAKICAqCiAgKiBSZXR1cm5zIHNhbWUgY29kZXMgYXMgYXJlIGRlZmluZWQgZm9yIGpwZWdfY29uc3VtZV9pbnB1dDoKICAqIEpQRUdfU1VTUEVOREVELCBKUEVHX1JFQUNIRURfU09TLCBvciBKUEVHX1JFQUNIRURfRU9JLgotICoKLSAqIE5vdGU6IFRoaXMgZnVuY3Rpb24gbWF5IHJldHVybiBhIHBzZXVkbyBTT1MgbWFya2VyICh3aXRoIHplcm8KLSAqIGNvbXBvbmVudCBudW1iZXIpIGZvciB0cmVhdCBieSBpbnB1dCBjb250cm9sbGVyJ3MgY29uc3VtZV9pbnB1dC4KLSAqIGNvbnN1bWVfaW5wdXQgaXRzZWxmIHNob3VsZCBmaWx0ZXIgb3V0IChza2lwKSB0aGUgcHNldWRvIG1hcmtlcgotICogYWZ0ZXIgcHJvY2Vzc2luZyBmb3IgdGhlIGNhbGxlci4KICAqLwogCiBNRVRIT0RERUYoaW50KQpAQCAtMTAxNywyNyArOTc1LDIzIEBACiAgICAgICBicmVhazsKIAogICAgIGNhc2UgTV9TT0YwOgkJLyogQmFzZWxpbmUgKi8KLSAgICAgIGlmICghIGdldF9zb2YoY2luZm8sIFRSVUUsIEZBTFNFLCBGQUxTRSkpCi0JcmV0dXJuIEpQRUdfU1VTUEVOREVEOwotICAgICAgYnJlYWs7Ci0KICAgICBjYXNlIE1fU09GMToJCS8qIEV4dGVuZGVkIHNlcXVlbnRpYWwsIEh1ZmZtYW4gKi8KLSAgICAgIGlmICghIGdldF9zb2YoY2luZm8sIEZBTFNFLCBGQUxTRSwgRkFMU0UpKQorICAgICAgaWYgKCEgZ2V0X3NvZihjaW5mbywgRkFMU0UsIEZBTFNFKSkKIAlyZXR1cm4gSlBFR19TVVNQRU5ERUQ7CiAgICAgICBicmVhazsKIAogICAgIGNhc2UgTV9TT0YyOgkJLyogUHJvZ3Jlc3NpdmUsIEh1ZmZtYW4gKi8KLSAgICAgIGlmICghIGdldF9zb2YoY2luZm8sIEZBTFNFLCBUUlVFLCBGQUxTRSkpCisgICAgICBpZiAoISBnZXRfc29mKGNpbmZvLCBUUlVFLCBGQUxTRSkpCiAJcmV0dXJuIEpQRUdfU1VTUEVOREVEOwogICAgICAgYnJlYWs7CiAKICAgICBjYXNlIE1fU09GOToJCS8qIEV4dGVuZGVkIHNlcXVlbnRpYWwsIGFyaXRobWV0aWMgKi8KLSAgICAgIGlmICghIGdldF9zb2YoY2luZm8sIEZBTFNFLCBGQUxTRSwgVFJVRSkpCisgICAgICBpZiAoISBnZXRfc29mKGNpbmZvLCBGQUxTRSwgVFJVRSkpCiAJcmV0dXJuIEpQRUdfU1VTUEVOREVEOwogICAgICAgYnJlYWs7CiAKICAgICBjYXNlIE1fU09GMTA6CQkvKiBQcm9ncmVzc2l2ZSwgYXJpdGhtZXRpYyAqLwotICAgICAgaWYgKCEgZ2V0X3NvZihjaW5mbywgRkFMU0UsIFRSVUUsIFRSVUUpKQorICAgICAgaWYgKCEgZ2V0X3NvZihjaW5mbywgVFJVRSwgVFJVRSkpCiAJcmV0dXJuIEpQRUdfU1VTUEVOREVEOwogICAgICAgYnJlYWs7CiAKZGlmZiAtLWdpdCBhL2pkbWFzdGVyLmMgYi9qZG1hc3Rlci5jCmluZGV4IDhjMTE0NmUuLjE0NTIwZGEgMTAwNjQ0Ci0tLSBhL2pkbWFzdGVyLmMKKysrIGIvamRtYXN0ZXIuYwpAQCAtMiw3ICsyLDcgQEAKICAqIGpkbWFzdGVyLmMKICAqCiAgKiBDb3B5cmlnaHQgKEMpIDE5OTEtMTk5NywgVGhvbWFzIEcuIExhbmUuCi0gKiBNb2RpZmllZCAyMDAyLTIwMDkgYnkgR3VpZG8gVm9sbGJlZGluZy4KKyAqIENvcHlyaWdodCAoQykgMjAwOS0yMDEwLCBELiBSLiBDb21tYW5kZXIuCiAgKiBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgSW5kZXBlbmRlbnQgSlBFRyBHcm91cCdzIHNvZnR3YXJlLgogICogRm9yIGNvbmRpdGlvbnMgb2YgZGlzdHJpYnV0aW9uIGFuZCB1c2UsIHNlZSB0aGUgYWNjb21wYW55aW5nIFJFQURNRSBmaWxlLgogICoKQEAgLTE1LDYgKzE1LDcgQEAKICNkZWZpbmUgSlBFR19JTlRFUk5BTFMKICNpbmNsdWRlICJqaW5jbHVkZS5oIgogI2luY2x1ZGUgImpwZWdsaWIuaCIKKyNpbmNsdWRlICJqcGVnY29tcC5oIgogCiAKIC8qIFByaXZhdGUgc3RhdGUgKi8KQEAgLTUwLDggKzUxLDE0IEBACiAgICAgcmV0dXJuIEZBTFNFOwogICAvKiBqZG1lcmdlLmMgb25seSBzdXBwb3J0cyBZQ0M9PlJHQiBjb2xvciBjb252ZXJzaW9uICovCiAgIGlmIChjaW5mby0+anBlZ19jb2xvcl9zcGFjZSAhPSBKQ1NfWUNiQ3IgfHwgY2luZm8tPm51bV9jb21wb25lbnRzICE9IDMgfHwKLSAgICAgIGNpbmZvLT5vdXRfY29sb3Jfc3BhY2UgIT0gSkNTX1JHQiB8fAotICAgICAgY2luZm8tPm91dF9jb2xvcl9jb21wb25lbnRzICE9IFJHQl9QSVhFTFNJWkUpCisgICAgICAoY2luZm8tPm91dF9jb2xvcl9zcGFjZSAhPSBKQ1NfUkdCICYmCisgICAgICBjaW5mby0+b3V0X2NvbG9yX3NwYWNlICE9IEpDU19FWFRfUkdCICYmCisgICAgICBjaW5mby0+b3V0X2NvbG9yX3NwYWNlICE9IEpDU19FWFRfUkdCWCAmJgorICAgICAgY2luZm8tPm91dF9jb2xvcl9zcGFjZSAhPSBKQ1NfRVhUX0JHUiAmJgorICAgICAgY2luZm8tPm91dF9jb2xvcl9zcGFjZSAhPSBKQ1NfRVhUX0JHUlggJiYKKyAgICAgIGNpbmZvLT5vdXRfY29sb3Jfc3BhY2UgIT0gSkNTX0VYVF9YQkdSICYmCisgICAgICBjaW5mby0+b3V0X2NvbG9yX3NwYWNlICE9IEpDU19FWFRfWFJHQikgfHwKKyAgICAgIGNpbmZvLT5vdXRfY29sb3JfY29tcG9uZW50cyAhPSByZ2JfcGl4ZWxzaXplW2NpbmZvLT5vdXRfY29sb3Jfc3BhY2VdKQogICAgIHJldHVybiBGQUxTRTsKICAgLyogYW5kIGl0IG9ubHkgaGFuZGxlcyAyaDF2IG9yIDJoMnYgc2FtcGxpbmcgcmF0aW9zICovCiAgIGlmIChjaW5mby0+Y29tcF9pbmZvWzBdLmhfc2FtcF9mYWN0b3IgIT0gMiB8fApAQCAtNjIsMTIgKzY5LDkgQEAKICAgICAgIGNpbmZvLT5jb21wX2luZm9bMl0udl9zYW1wX2ZhY3RvciAhPSAxKQogICAgIHJldHVybiBGQUxTRTsKICAgLyogZnVydGhlcm1vcmUsIGl0IGRvZXNuJ3Qgd29yayBpZiB3ZSd2ZSBzY2FsZWQgdGhlIElEQ1RzIGRpZmZlcmVudGx5ICovCi0gIGlmIChjaW5mby0+Y29tcF9pbmZvWzBdLkRDVF9oX3NjYWxlZF9zaXplICE9IGNpbmZvLT5taW5fRENUX2hfc2NhbGVkX3NpemUgfHwKLSAgICAgIGNpbmZvLT5jb21wX2luZm9bMV0uRENUX2hfc2NhbGVkX3NpemUgIT0gY2luZm8tPm1pbl9EQ1RfaF9zY2FsZWRfc2l6ZSB8fAotICAgICAgY2luZm8tPmNvbXBfaW5mb1syXS5EQ1RfaF9zY2FsZWRfc2l6ZSAhPSBjaW5mby0+bWluX0RDVF9oX3NjYWxlZF9zaXplIHx8Ci0gICAgICBjaW5mby0+Y29tcF9pbmZvWzBdLkRDVF92X3NjYWxlZF9zaXplICE9IGNpbmZvLT5taW5fRENUX3Zfc2NhbGVkX3NpemUgfHwKLSAgICAgIGNpbmZvLT5jb21wX2luZm9bMV0uRENUX3Zfc2NhbGVkX3NpemUgIT0gY2luZm8tPm1pbl9EQ1Rfdl9zY2FsZWRfc2l6ZSB8fAotICAgICAgY2luZm8tPmNvbXBfaW5mb1syXS5EQ1Rfdl9zY2FsZWRfc2l6ZSAhPSBjaW5mby0+bWluX0RDVF92X3NjYWxlZF9zaXplKQorICBpZiAoY2luZm8tPmNvbXBfaW5mb1swXS5fRENUX3NjYWxlZF9zaXplICE9IGNpbmZvLT5fbWluX0RDVF9zY2FsZWRfc2l6ZSB8fAorICAgICAgY2luZm8tPmNvbXBfaW5mb1sxXS5fRENUX3NjYWxlZF9zaXplICE9IGNpbmZvLT5fbWluX0RDVF9zY2FsZWRfc2l6ZSB8fAorICAgICAgY2luZm8tPmNvbXBfaW5mb1syXS5fRENUX3NjYWxlZF9zaXplICE9IGNpbmZvLT5fbWluX0RDVF9zY2FsZWRfc2l6ZSkKICAgICByZXR1cm4gRkFMU0U7CiAgIC8qID8/PyBhbHNvIG5lZWQgdG8gdGVzdCBmb3IgdXBzYW1wbGUtdGltZSByZXNjYWxpbmcsIHdoZW4gJiBpZiBzdXBwb3J0ZWQgKi8KICAgcmV0dXJuIFRSVUU7CQkJLyogYnkgZ29sbHksIGl0J2xsIHdvcmsuLi4gKi8KQEAgLTg2LDkgKzkwLDcgQEAKIAogR0xPQkFMKHZvaWQpCiBqcGVnX2NhbGNfb3V0cHV0X2RpbWVuc2lvbnMgKGpfZGVjb21wcmVzc19wdHIgY2luZm8pCi0vKiBEbyBjb21wdXRhdGlvbnMgdGhhdCBhcmUgbmVlZGVkIGJlZm9yZSBtYXN0ZXIgc2VsZWN0aW9uIHBoYXNlLgotICogVGhpcyBmdW5jdGlvbiBpcyB1c2VkIGZvciBmdWxsIGRlY29tcHJlc3Npb24uCi0gKi8KKy8qIERvIGNvbXB1dGF0aW9ucyB0aGF0IGFyZSBuZWVkZWQgYmVmb3JlIG1hc3RlciBzZWxlY3Rpb24gcGhhc2UgKi8KIHsKICNpZmRlZiBJRENUX1NDQUxJTkdfU1VQUE9SVEVECiAgIGludCBjaTsKQEAgLTk5LDM4ICsxMDEsNzIgQEAKICAgaWYgKGNpbmZvLT5nbG9iYWxfc3RhdGUgIT0gRFNUQVRFX1JFQURZKQogICAgIEVSUkVYSVQxKGNpbmZvLCBKRVJSX0JBRF9TVEFURSwgY2luZm8tPmdsb2JhbF9zdGF0ZSk7CiAKLSAgLyogQ29tcHV0ZSBjb3JlIG91dHB1dCBpbWFnZSBkaW1lbnNpb25zIGFuZCBEQ1Qgc2NhbGluZyBjaG9pY2VzLiAqLwotICBqcGVnX2NvcmVfb3V0cHV0X2RpbWVuc2lvbnMoY2luZm8pOwotCiAjaWZkZWYgSURDVF9TQ0FMSU5HX1NVUFBPUlRFRAogCisgIC8qIENvbXB1dGUgYWN0dWFsIG91dHB1dCBpbWFnZSBkaW1lbnNpb25zIGFuZCBEQ1Qgc2NhbGluZyBjaG9pY2VzLiAqLworICBpZiAoY2luZm8tPnNjYWxlX251bSAqIDggPD0gY2luZm8tPnNjYWxlX2Rlbm9tKSB7CisgICAgLyogUHJvdmlkZSAxLzggc2NhbGluZyAqLworICAgIGNpbmZvLT5vdXRwdXRfd2lkdGggPSAoSkRJTUVOU0lPTikKKyAgICAgIGpkaXZfcm91bmRfdXAoKGxvbmcpIGNpbmZvLT5pbWFnZV93aWR0aCwgOEwpOworICAgIGNpbmZvLT5vdXRwdXRfaGVpZ2h0ID0gKEpESU1FTlNJT04pCisgICAgICBqZGl2X3JvdW5kX3VwKChsb25nKSBjaW5mby0+aW1hZ2VfaGVpZ2h0LCA4TCk7CisjaWYgSlBFR19MSUJfVkVSU0lPTiA+PSA3MAorICAgIGNpbmZvLT5taW5fRENUX2hfc2NhbGVkX3NpemUgPSBjaW5mby0+bWluX0RDVF92X3NjYWxlZF9zaXplID0gMTsKKyNlbHNlCisgICAgY2luZm8tPm1pbl9EQ1Rfc2NhbGVkX3NpemUgPSAxOworI2VuZGlmCisgIH0gZWxzZSBpZiAoY2luZm8tPnNjYWxlX251bSAqIDQgPD0gY2luZm8tPnNjYWxlX2Rlbm9tKSB7CisgICAgLyogUHJvdmlkZSAxLzQgc2NhbGluZyAqLworICAgIGNpbmZvLT5vdXRwdXRfd2lkdGggPSAoSkRJTUVOU0lPTikKKyAgICAgIGpkaXZfcm91bmRfdXAoKGxvbmcpIGNpbmZvLT5pbWFnZV93aWR0aCwgNEwpOworICAgIGNpbmZvLT5vdXRwdXRfaGVpZ2h0ID0gKEpESU1FTlNJT04pCisgICAgICBqZGl2X3JvdW5kX3VwKChsb25nKSBjaW5mby0+aW1hZ2VfaGVpZ2h0LCA0TCk7CisjaWYgSlBFR19MSUJfVkVSU0lPTiA+PSA3MAorICAgIGNpbmZvLT5taW5fRENUX2hfc2NhbGVkX3NpemUgPSBjaW5mby0+bWluX0RDVF92X3NjYWxlZF9zaXplID0gMjsKKyNlbHNlCisgICAgY2luZm8tPm1pbl9EQ1Rfc2NhbGVkX3NpemUgPSAyOworI2VuZGlmCisgIH0gZWxzZSBpZiAoY2luZm8tPnNjYWxlX251bSAqIDIgPD0gY2luZm8tPnNjYWxlX2Rlbm9tKSB7CisgICAgLyogUHJvdmlkZSAxLzIgc2NhbGluZyAqLworICAgIGNpbmZvLT5vdXRwdXRfd2lkdGggPSAoSkRJTUVOU0lPTikKKyAgICAgIGpkaXZfcm91bmRfdXAoKGxvbmcpIGNpbmZvLT5pbWFnZV93aWR0aCwgMkwpOworICAgIGNpbmZvLT5vdXRwdXRfaGVpZ2h0ID0gKEpESU1FTlNJT04pCisgICAgICBqZGl2X3JvdW5kX3VwKChsb25nKSBjaW5mby0+aW1hZ2VfaGVpZ2h0LCAyTCk7CisjaWYgSlBFR19MSUJfVkVSU0lPTiA+PSA3MAorICAgIGNpbmZvLT5taW5fRENUX2hfc2NhbGVkX3NpemUgPSBjaW5mby0+bWluX0RDVF92X3NjYWxlZF9zaXplID0gNDsKKyNlbHNlCisgICAgY2luZm8tPm1pbl9EQ1Rfc2NhbGVkX3NpemUgPSA0OworI2VuZGlmCisgIH0gZWxzZSB7CisgICAgLyogUHJvdmlkZSAxLzEgc2NhbGluZyAqLworICAgIGNpbmZvLT5vdXRwdXRfd2lkdGggPSBjaW5mby0+aW1hZ2Vfd2lkdGg7CisgICAgY2luZm8tPm91dHB1dF9oZWlnaHQgPSBjaW5mby0+aW1hZ2VfaGVpZ2h0OworI2lmIEpQRUdfTElCX1ZFUlNJT04gPj0gNzAKKyAgICBjaW5mby0+bWluX0RDVF9oX3NjYWxlZF9zaXplID0gY2luZm8tPm1pbl9EQ1Rfdl9zY2FsZWRfc2l6ZSA9IERDVFNJWkU7CisjZWxzZQorICAgIGNpbmZvLT5taW5fRENUX3NjYWxlZF9zaXplID0gRENUU0laRTsKKyNlbmRpZgorICB9CiAgIC8qIEluIHNlbGVjdGluZyB0aGUgYWN0dWFsIERDVCBzY2FsaW5nIGZvciBlYWNoIGNvbXBvbmVudCwgd2UgdHJ5IHRvCiAgICAqIHNjYWxlIHVwIHRoZSBjaHJvbWEgY29tcG9uZW50cyB2aWEgSURDVCBzY2FsaW5nIHJhdGhlciB0aGFuIHVwc2FtcGxpbmcuCiAgICAqIFRoaXMgc2F2ZXMgdGltZSBpZiB0aGUgdXBzYW1wbGVyIGdldHMgdG8gdXNlIDE6MSBzY2FsaW5nLgotICAgKiBOb3RlIHRoaXMgY29kZSBhZGFwdHMgc3Vic2FtcGxpbmcgcmF0aW9zIHdoaWNoIGFyZSBwb3dlcnMgb2YgMi4KKyAgICogTm90ZSB0aGlzIGNvZGUgYXNzdW1lcyB0aGF0IHRoZSBzdXBwb3J0ZWQgRENUIHNjYWxpbmdzIGFyZSBwb3dlcnMgb2YgMi4KICAgICovCiAgIGZvciAoY2kgPSAwLCBjb21wcHRyID0gY2luZm8tPmNvbXBfaW5mbzsgY2kgPCBjaW5mby0+bnVtX2NvbXBvbmVudHM7CiAgICAgICAgY2krKywgY29tcHB0cisrKSB7Ci0gICAgaW50IHNzaXplID0gMTsKLSAgICB3aGlsZSAoY2luZm8tPm1pbl9EQ1RfaF9zY2FsZWRfc2l6ZSAqIHNzaXplIDw9Ci0JICAgKGNpbmZvLT5kb19mYW5jeV91cHNhbXBsaW5nID8gRENUU0laRSA6IERDVFNJWkUgLyAyKSAmJgotCSAgIChjaW5mby0+bWF4X2hfc2FtcF9mYWN0b3IgJSAoY29tcHB0ci0+aF9zYW1wX2ZhY3RvciAqIHNzaXplICogMikpID09IDApIHsKKyAgICBpbnQgc3NpemUgPSBjaW5mby0+X21pbl9EQ1Rfc2NhbGVkX3NpemU7CisgICAgd2hpbGUgKHNzaXplIDwgRENUU0laRSAmJgorCSAgIChjb21wcHRyLT5oX3NhbXBfZmFjdG9yICogc3NpemUgKiAyIDw9CisJICAgIGNpbmZvLT5tYXhfaF9zYW1wX2ZhY3RvciAqIGNpbmZvLT5fbWluX0RDVF9zY2FsZWRfc2l6ZSkgJiYKKwkgICAoY29tcHB0ci0+dl9zYW1wX2ZhY3RvciAqIHNzaXplICogMiA8PQorCSAgICBjaW5mby0+bWF4X3Zfc2FtcF9mYWN0b3IgKiBjaW5mby0+X21pbl9EQ1Rfc2NhbGVkX3NpemUpKSB7CiAgICAgICBzc2l6ZSA9IHNzaXplICogMjsKICAgICB9Ci0gICAgY29tcHB0ci0+RENUX2hfc2NhbGVkX3NpemUgPSBjaW5mby0+bWluX0RDVF9oX3NjYWxlZF9zaXplICogc3NpemU7Ci0gICAgc3NpemUgPSAxOwotICAgIHdoaWxlIChjaW5mby0+bWluX0RDVF92X3NjYWxlZF9zaXplICogc3NpemUgPD0KLQkgICAoY2luZm8tPmRvX2ZhbmN5X3Vwc2FtcGxpbmcgPyBEQ1RTSVpFIDogRENUU0laRSAvIDIpICYmCi0JICAgKGNpbmZvLT5tYXhfdl9zYW1wX2ZhY3RvciAlIChjb21wcHRyLT52X3NhbXBfZmFjdG9yICogc3NpemUgKiAyKSkgPT0gMCkgewotICAgICAgc3NpemUgPSBzc2l6ZSAqIDI7Ci0gICAgfQotICAgIGNvbXBwdHItPkRDVF92X3NjYWxlZF9zaXplID0gY2luZm8tPm1pbl9EQ1Rfdl9zY2FsZWRfc2l6ZSAqIHNzaXplOwotCi0gICAgLyogV2UgZG9uJ3Qgc3VwcG9ydCBJRENUIHJhdGlvcyBsYXJnZXIgdGhhbiAyLiAqLwotICAgIGlmIChjb21wcHRyLT5EQ1RfaF9zY2FsZWRfc2l6ZSA+IGNvbXBwdHItPkRDVF92X3NjYWxlZF9zaXplICogMikKLQljb21wcHRyLT5EQ1RfaF9zY2FsZWRfc2l6ZSA9IGNvbXBwdHItPkRDVF92X3NjYWxlZF9zaXplICogMjsKLSAgICBlbHNlIGlmIChjb21wcHRyLT5EQ1Rfdl9zY2FsZWRfc2l6ZSA+IGNvbXBwdHItPkRDVF9oX3NjYWxlZF9zaXplICogMikKLQljb21wcHRyLT5EQ1Rfdl9zY2FsZWRfc2l6ZSA9IGNvbXBwdHItPkRDVF9oX3NjYWxlZF9zaXplICogMjsKKyNpZiBKUEVHX0xJQl9WRVJTSU9OID49IDcwCisgICAgY29tcHB0ci0+RENUX2hfc2NhbGVkX3NpemUgPSBjb21wcHRyLT5EQ1Rfdl9zY2FsZWRfc2l6ZSA9IHNzaXplOworI2Vsc2UKKyAgICBjb21wcHRyLT5EQ1Rfc2NhbGVkX3NpemUgPSBzc2l6ZTsKKyNlbmRpZgogICB9CiAKICAgLyogUmVjb21wdXRlIGRvd25zYW1wbGVkIGRpbWVuc2lvbnMgb2YgY29tcG9uZW50czsKQEAgLTE0MSwxNCArMTc3LDIzIEBACiAgICAgLyogU2l6ZSBpbiBzYW1wbGVzLCBhZnRlciBJRENUIHNjYWxpbmcgKi8KICAgICBjb21wcHRyLT5kb3duc2FtcGxlZF93aWR0aCA9IChKRElNRU5TSU9OKQogICAgICAgamRpdl9yb3VuZF91cCgobG9uZykgY2luZm8tPmltYWdlX3dpZHRoICoKLQkJICAgIChsb25nKSAoY29tcHB0ci0+aF9zYW1wX2ZhY3RvciAqIGNvbXBwdHItPkRDVF9oX3NjYWxlZF9zaXplKSwKLQkJICAgIChsb25nKSAoY2luZm8tPm1heF9oX3NhbXBfZmFjdG9yICogY2luZm8tPmJsb2NrX3NpemUpKTsKKwkJICAgIChsb25nKSAoY29tcHB0ci0+aF9zYW1wX2ZhY3RvciAqIGNvbXBwdHItPl9EQ1Rfc2NhbGVkX3NpemUpLAorCQkgICAgKGxvbmcpIChjaW5mby0+bWF4X2hfc2FtcF9mYWN0b3IgKiBEQ1RTSVpFKSk7CiAgICAgY29tcHB0ci0+ZG93bnNhbXBsZWRfaGVpZ2h0ID0gKEpESU1FTlNJT04pCiAgICAgICBqZGl2X3JvdW5kX3VwKChsb25nKSBjaW5mby0+aW1hZ2VfaGVpZ2h0ICoKLQkJICAgIChsb25nKSAoY29tcHB0ci0+dl9zYW1wX2ZhY3RvciAqIGNvbXBwdHItPkRDVF92X3NjYWxlZF9zaXplKSwKLQkJICAgIChsb25nKSAoY2luZm8tPm1heF92X3NhbXBfZmFjdG9yICogY2luZm8tPmJsb2NrX3NpemUpKTsKKwkJICAgIChsb25nKSAoY29tcHB0ci0+dl9zYW1wX2ZhY3RvciAqIGNvbXBwdHItPl9EQ1Rfc2NhbGVkX3NpemUpLAorCQkgICAgKGxvbmcpIChjaW5mby0+bWF4X3Zfc2FtcF9mYWN0b3IgKiBEQ1RTSVpFKSk7CiAgIH0KIAorI2Vsc2UgLyogIUlEQ1RfU0NBTElOR19TVVBQT1JURUQgKi8KKworICAvKiBIYXJkd2lyZSBpdCB0byAibm8gc2NhbGluZyIgKi8KKyAgY2luZm8tPm91dHB1dF93aWR0aCA9IGNpbmZvLT5pbWFnZV93aWR0aDsKKyAgY2luZm8tPm91dHB1dF9oZWlnaHQgPSBjaW5mby0+aW1hZ2VfaGVpZ2h0OworICAvKiBqZGlucHV0LmMgaGFzIGFscmVhZHkgaW5pdGlhbGl6ZWQgRENUX3NjYWxlZF9zaXplIHRvIERDVFNJWkUsCisgICAqIGFuZCBoYXMgY29tcHV0ZWQgdW5zY2FsZWQgZG93bnNhbXBsZWRfd2lkdGggYW5kIGRvd25zYW1wbGVkX2hlaWdodC4KKyAgICovCisKICNlbmRpZiAvKiBJRENUX1NDQUxJTkdfU1VQUE9SVEVEICovCiAKICAgLyogUmVwb3J0IG51bWJlciBvZiBjb21wb25lbnRzIGluIHNlbGVjdGVkIGNvbG9yc3BhY2UuICovCkBAIC0xNTgsMTAgKzIwMywxNCBAQAogICAgIGNpbmZvLT5vdXRfY29sb3JfY29tcG9uZW50cyA9IDE7CiAgICAgYnJlYWs7CiAgIGNhc2UgSkNTX1JHQjoKLSNpZiBSR0JfUElYRUxTSVpFICE9IDMKLSAgICBjaW5mby0+b3V0X2NvbG9yX2NvbXBvbmVudHMgPSBSR0JfUElYRUxTSVpFOworICBjYXNlIEpDU19FWFRfUkdCOgorICBjYXNlIEpDU19FWFRfUkdCWDoKKyAgY2FzZSBKQ1NfRVhUX0JHUjoKKyAgY2FzZSBKQ1NfRVhUX0JHUlg6CisgIGNhc2UgSkNTX0VYVF9YQkdSOgorICBjYXNlIEpDU19FWFRfWFJHQjoKKyAgICBjaW5mby0+b3V0X2NvbG9yX2NvbXBvbmVudHMgPSByZ2JfcGl4ZWxzaXplW2NpbmZvLT5vdXRfY29sb3Jfc3BhY2VdOwogICAgIGJyZWFrOwotI2VuZGlmIC8qIGVsc2Ugc2hhcmUgY29kZSB3aXRoIFlDYkNyICovCiAgIGNhc2UgSkNTX1lDYkNyOgogICAgIGNpbmZvLT5vdXRfY29sb3JfY29tcG9uZW50cyA9IDM7CiAgICAgYnJlYWs7CkBAIC0zNTUsMTAgKzQwNCwyMSBAQAogICAvKiBJbnZlcnNlIERDVCAqLwogICBqaW5pdF9pbnZlcnNlX2RjdChjaW5mbyk7CiAgIC8qIEVudHJvcHkgZGVjb2Rpbmc6IGVpdGhlciBIdWZmbWFuIG9yIGFyaXRobWV0aWMgY29kaW5nLiAqLwotICBpZiAoY2luZm8tPmFyaXRoX2NvZGUpCisgIGlmIChjaW5mby0+YXJpdGhfY29kZSkgeworI2lmZGVmIERfQVJJVEhfQ09ESU5HX1NVUFBPUlRFRAogICAgIGppbml0X2FyaXRoX2RlY29kZXIoY2luZm8pOwotICBlbHNlIHsKLSAgICBqaW5pdF9odWZmX2RlY29kZXIoY2luZm8pOworI2Vsc2UKKyAgICBFUlJFWElUKGNpbmZvLCBKRVJSX0FSSVRIX05PVElNUEwpOworI2VuZGlmCisgIH0gZWxzZSB7CisgICAgaWYgKGNpbmZvLT5wcm9ncmVzc2l2ZV9tb2RlKSB7CisjaWZkZWYgRF9QUk9HUkVTU0lWRV9TVVBQT1JURUQKKyAgICAgIGppbml0X3BodWZmX2RlY29kZXIoY2luZm8pOworI2Vsc2UKKyAgICAgIEVSUkVYSVQoY2luZm8sIEpFUlJfTk9UX0NPTVBJTEVEKTsKKyNlbmRpZgorICAgIH0gZWxzZQorICAgICAgamluaXRfaHVmZl9kZWNvZGVyKGNpbmZvKTsKICAgfQogCiAgIC8qIEluaXRpYWxpemUgcHJpbmNpcGFsIGJ1ZmZlciBjb250cm9sbGVycy4gKi8KZGlmZiAtLWdpdCBhL2pkbWVyZ2UuYyBiL2pkbWVyZ2UuYwppbmRleCAzNzQ0NDQ2Li5lZGYwNjFhIDEwMDY0NAotLS0gYS9qZG1lcmdlLmMKKysrIGIvamRtZXJnZS5jCkBAIC0yLDYgKzIsOCBAQAogICogamRtZXJnZS5jCiAgKgogICogQ29weXJpZ2h0IChDKSAxOTk0LTE5OTYsIFRob21hcyBHLiBMYW5lLgorICogQ29weXJpZ2h0IDIwMDkgUGllcnJlIE9zc21hbiA8b3NzbWFuQGNlbmRpby5zZT4gZm9yIENlbmRpbyBBQgorICogQ29weXJpZ2h0IChDKSAyMDA5LCBELiBSLiBDb21tYW5kZXIuCiAgKiBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgSW5kZXBlbmRlbnQgSlBFRyBHcm91cCdzIHNvZnR3YXJlLgogICogRm9yIGNvbmRpdGlvbnMgb2YgZGlzdHJpYnV0aW9uIGFuZCB1c2UsIHNlZSB0aGUgYWNjb21wYW55aW5nIFJFQURNRSBmaWxlLgogICoKQEAgLTM1LDYgKzM3LDcgQEAKICNkZWZpbmUgSlBFR19JTlRFUk5BTFMKICNpbmNsdWRlICJqaW5jbHVkZS5oIgogI2luY2x1ZGUgImpwZWdsaWIuaCIKKyNpbmNsdWRlICJqc2ltZC5oIgogCiAjaWZkZWYgVVBTQU1QTEVfTUVSR0lOR19TVVBQT1JURUQKIApAQCAtMjU1LDE1ICsyNTgsMTUgQEAKICAgICBjYmx1ZSA9IENiYnRhYltjYl07CiAgICAgLyogRmV0Y2ggMiBZIHZhbHVlcyBhbmQgZW1pdCAyIHBpeGVscyAqLwogICAgIHkgID0gR0VUSlNBTVBMRSgqaW5wdHIwKyspOwotICAgIG91dHB0cltSR0JfUkVEXSA9ICAgcmFuZ2VfbGltaXRbeSArIGNyZWRdOwotICAgIG91dHB0cltSR0JfR1JFRU5dID0gcmFuZ2VfbGltaXRbeSArIGNncmVlbl07Ci0gICAgb3V0cHRyW1JHQl9CTFVFXSA9ICByYW5nZV9saW1pdFt5ICsgY2JsdWVdOwotICAgIG91dHB0ciArPSBSR0JfUElYRUxTSVpFOworICAgIG91dHB0cltyZ2JfcmVkW2NpbmZvLT5vdXRfY29sb3Jfc3BhY2VdXSA9ICAgcmFuZ2VfbGltaXRbeSArIGNyZWRdOworICAgIG91dHB0cltyZ2JfZ3JlZW5bY2luZm8tPm91dF9jb2xvcl9zcGFjZV1dID0gcmFuZ2VfbGltaXRbeSArIGNncmVlbl07CisgICAgb3V0cHRyW3JnYl9ibHVlW2NpbmZvLT5vdXRfY29sb3Jfc3BhY2VdXSA9ICByYW5nZV9saW1pdFt5ICsgY2JsdWVdOworICAgIG91dHB0ciArPSByZ2JfcGl4ZWxzaXplW2NpbmZvLT5vdXRfY29sb3Jfc3BhY2VdOwogICAgIHkgID0gR0VUSlNBTVBMRSgqaW5wdHIwKyspOwotICAgIG91dHB0cltSR0JfUkVEXSA9ICAgcmFuZ2VfbGltaXRbeSArIGNyZWRdOwotICAgIG91dHB0cltSR0JfR1JFRU5dID0gcmFuZ2VfbGltaXRbeSArIGNncmVlbl07Ci0gICAgb3V0cHRyW1JHQl9CTFVFXSA9ICByYW5nZV9saW1pdFt5ICsgY2JsdWVdOwotICAgIG91dHB0ciArPSBSR0JfUElYRUxTSVpFOworICAgIG91dHB0cltyZ2JfcmVkW2NpbmZvLT5vdXRfY29sb3Jfc3BhY2VdXSA9ICAgcmFuZ2VfbGltaXRbeSArIGNyZWRdOworICAgIG91dHB0cltyZ2JfZ3JlZW5bY2luZm8tPm91dF9jb2xvcl9zcGFjZV1dID0gcmFuZ2VfbGltaXRbeSArIGNncmVlbl07CisgICAgb3V0cHRyW3JnYl9ibHVlW2NpbmZvLT5vdXRfY29sb3Jfc3BhY2VdXSA9ICByYW5nZV9saW1pdFt5ICsgY2JsdWVdOworICAgIG91dHB0ciArPSByZ2JfcGl4ZWxzaXplW2NpbmZvLT5vdXRfY29sb3Jfc3BhY2VdOwogICB9CiAgIC8qIElmIGltYWdlIHdpZHRoIGlzIG9kZCwgZG8gdGhlIGxhc3Qgb3V0cHV0IGNvbHVtbiBzZXBhcmF0ZWx5ICovCiAgIGlmIChjaW5mby0+b3V0cHV0X3dpZHRoICYgMSkgewpAQCAtMjczLDkgKzI3Niw5IEBACiAgICAgY2dyZWVuID0gKGludCkgUklHSFRfU0hJRlQoQ2JndGFiW2NiXSArIENyZ3RhYltjcl0sIFNDQUxFQklUUyk7CiAgICAgY2JsdWUgPSBDYmJ0YWJbY2JdOwogICAgIHkgID0gR0VUSlNBTVBMRSgqaW5wdHIwKTsKLSAgICBvdXRwdHJbUkdCX1JFRF0gPSAgIHJhbmdlX2xpbWl0W3kgKyBjcmVkXTsKLSAgICBvdXRwdHJbUkdCX0dSRUVOXSA9IHJhbmdlX2xpbWl0W3kgKyBjZ3JlZW5dOwotICAgIG91dHB0cltSR0JfQkxVRV0gPSAgcmFuZ2VfbGltaXRbeSArIGNibHVlXTsKKyAgICBvdXRwdHJbcmdiX3JlZFtjaW5mby0+b3V0X2NvbG9yX3NwYWNlXV0gPSAgIHJhbmdlX2xpbWl0W3kgKyBjcmVkXTsKKyAgICBvdXRwdHJbcmdiX2dyZWVuW2NpbmZvLT5vdXRfY29sb3Jfc3BhY2VdXSA9IHJhbmdlX2xpbWl0W3kgKyBjZ3JlZW5dOworICAgIG91dHB0cltyZ2JfYmx1ZVtjaW5mby0+b3V0X2NvbG9yX3NwYWNlXV0gPSAgcmFuZ2VfbGltaXRbeSArIGNibHVlXTsKICAgfQogfQogCkBAIC0zMTksMjQgKzMyMiwyNCBAQAogICAgIGNibHVlID0gQ2JidGFiW2NiXTsKICAgICAvKiBGZXRjaCA0IFkgdmFsdWVzIGFuZCBlbWl0IDQgcGl4ZWxzICovCiAgICAgeSAgPSBHRVRKU0FNUExFKCppbnB0cjAwKyspOwotICAgIG91dHB0cjBbUkdCX1JFRF0gPSAgIHJhbmdlX2xpbWl0W3kgKyBjcmVkXTsKLSAgICBvdXRwdHIwW1JHQl9HUkVFTl0gPSByYW5nZV9saW1pdFt5ICsgY2dyZWVuXTsKLSAgICBvdXRwdHIwW1JHQl9CTFVFXSA9ICByYW5nZV9saW1pdFt5ICsgY2JsdWVdOworICAgIG91dHB0cjBbcmdiX3JlZFtjaW5mby0+b3V0X2NvbG9yX3NwYWNlXV0gPSAgIHJhbmdlX2xpbWl0W3kgKyBjcmVkXTsKKyAgICBvdXRwdHIwW3JnYl9ncmVlbltjaW5mby0+b3V0X2NvbG9yX3NwYWNlXV0gPSByYW5nZV9saW1pdFt5ICsgY2dyZWVuXTsKKyAgICBvdXRwdHIwW3JnYl9ibHVlW2NpbmZvLT5vdXRfY29sb3Jfc3BhY2VdXSA9ICByYW5nZV9saW1pdFt5ICsgY2JsdWVdOwogICAgIG91dHB0cjAgKz0gUkdCX1BJWEVMU0laRTsKICAgICB5ICA9IEdFVEpTQU1QTEUoKmlucHRyMDArKyk7Ci0gICAgb3V0cHRyMFtSR0JfUkVEXSA9ICAgcmFuZ2VfbGltaXRbeSArIGNyZWRdOwotICAgIG91dHB0cjBbUkdCX0dSRUVOXSA9IHJhbmdlX2xpbWl0W3kgKyBjZ3JlZW5dOwotICAgIG91dHB0cjBbUkdCX0JMVUVdID0gIHJhbmdlX2xpbWl0W3kgKyBjYmx1ZV07CisgICAgb3V0cHRyMFtyZ2JfcmVkW2NpbmZvLT5vdXRfY29sb3Jfc3BhY2VdXSA9ICAgcmFuZ2VfbGltaXRbeSArIGNyZWRdOworICAgIG91dHB0cjBbcmdiX2dyZWVuW2NpbmZvLT5vdXRfY29sb3Jfc3BhY2VdXSA9IHJhbmdlX2xpbWl0W3kgKyBjZ3JlZW5dOworICAgIG91dHB0cjBbcmdiX2JsdWVbY2luZm8tPm91dF9jb2xvcl9zcGFjZV1dID0gIHJhbmdlX2xpbWl0W3kgKyBjYmx1ZV07CiAgICAgb3V0cHRyMCArPSBSR0JfUElYRUxTSVpFOwogICAgIHkgID0gR0VUSlNBTVBMRSgqaW5wdHIwMSsrKTsKLSAgICBvdXRwdHIxW1JHQl9SRURdID0gICByYW5nZV9saW1pdFt5ICsgY3JlZF07Ci0gICAgb3V0cHRyMVtSR0JfR1JFRU5dID0gcmFuZ2VfbGltaXRbeSArIGNncmVlbl07Ci0gICAgb3V0cHRyMVtSR0JfQkxVRV0gPSAgcmFuZ2VfbGltaXRbeSArIGNibHVlXTsKKyAgICBvdXRwdHIxW3JnYl9yZWRbY2luZm8tPm91dF9jb2xvcl9zcGFjZV1dID0gICByYW5nZV9saW1pdFt5ICsgY3JlZF07CisgICAgb3V0cHRyMVtyZ2JfZ3JlZW5bY2luZm8tPm91dF9jb2xvcl9zcGFjZV1dID0gcmFuZ2VfbGltaXRbeSArIGNncmVlbl07CisgICAgb3V0cHRyMVtyZ2JfYmx1ZVtjaW5mby0+b3V0X2NvbG9yX3NwYWNlXV0gPSAgcmFuZ2VfbGltaXRbeSArIGNibHVlXTsKICAgICBvdXRwdHIxICs9IFJHQl9QSVhFTFNJWkU7CiAgICAgeSAgPSBHRVRKU0FNUExFKCppbnB0cjAxKyspOwotICAgIG91dHB0cjFbUkdCX1JFRF0gPSAgIHJhbmdlX2xpbWl0W3kgKyBjcmVkXTsKLSAgICBvdXRwdHIxW1JHQl9HUkVFTl0gPSByYW5nZV9saW1pdFt5ICsgY2dyZWVuXTsKLSAgICBvdXRwdHIxW1JHQl9CTFVFXSA9ICByYW5nZV9saW1pdFt5ICsgY2JsdWVdOworICAgIG91dHB0cjFbcmdiX3JlZFtjaW5mby0+b3V0X2NvbG9yX3NwYWNlXV0gPSAgIHJhbmdlX2xpbWl0W3kgKyBjcmVkXTsKKyAgICBvdXRwdHIxW3JnYl9ncmVlbltjaW5mby0+b3V0X2NvbG9yX3NwYWNlXV0gPSByYW5nZV9saW1pdFt5ICsgY2dyZWVuXTsKKyAgICBvdXRwdHIxW3JnYl9ibHVlW2NpbmZvLT5vdXRfY29sb3Jfc3BhY2VdXSA9ICByYW5nZV9saW1pdFt5ICsgY2JsdWVdOwogICAgIG91dHB0cjEgKz0gUkdCX1BJWEVMU0laRTsKICAgfQogICAvKiBJZiBpbWFnZSB3aWR0aCBpcyBvZGQsIGRvIHRoZSBsYXN0IG91dHB1dCBjb2x1bW4gc2VwYXJhdGVseSAqLwpAQCAtMzQ3LDEzICszNTAsMTMgQEAKICAgICBjZ3JlZW4gPSAoaW50KSBSSUdIVF9TSElGVChDYmd0YWJbY2JdICsgQ3JndGFiW2NyXSwgU0NBTEVCSVRTKTsKICAgICBjYmx1ZSA9IENiYnRhYltjYl07CiAgICAgeSAgPSBHRVRKU0FNUExFKCppbnB0cjAwKTsKLSAgICBvdXRwdHIwW1JHQl9SRURdID0gICByYW5nZV9saW1pdFt5ICsgY3JlZF07Ci0gICAgb3V0cHRyMFtSR0JfR1JFRU5dID0gcmFuZ2VfbGltaXRbeSArIGNncmVlbl07Ci0gICAgb3V0cHRyMFtSR0JfQkxVRV0gPSAgcmFuZ2VfbGltaXRbeSArIGNibHVlXTsKKyAgICBvdXRwdHIwW3JnYl9yZWRbY2luZm8tPm91dF9jb2xvcl9zcGFjZV1dID0gICByYW5nZV9saW1pdFt5ICsgY3JlZF07CisgICAgb3V0cHRyMFtyZ2JfZ3JlZW5bY2luZm8tPm91dF9jb2xvcl9zcGFjZV1dID0gcmFuZ2VfbGltaXRbeSArIGNncmVlbl07CisgICAgb3V0cHRyMFtyZ2JfYmx1ZVtjaW5mby0+b3V0X2NvbG9yX3NwYWNlXV0gPSAgcmFuZ2VfbGltaXRbeSArIGNibHVlXTsKICAgICB5ICA9IEdFVEpTQU1QTEUoKmlucHRyMDEpOwotICAgIG91dHB0cjFbUkdCX1JFRF0gPSAgIHJhbmdlX2xpbWl0W3kgKyBjcmVkXTsKLSAgICBvdXRwdHIxW1JHQl9HUkVFTl0gPSByYW5nZV9saW1pdFt5ICsgY2dyZWVuXTsKLSAgICBvdXRwdHIxW1JHQl9CTFVFXSA9ICByYW5nZV9saW1pdFt5ICsgY2JsdWVdOworICAgIG91dHB0cjFbcmdiX3JlZFtjaW5mby0+b3V0X2NvbG9yX3NwYWNlXV0gPSAgIHJhbmdlX2xpbWl0W3kgKyBjcmVkXTsKKyAgICBvdXRwdHIxW3JnYl9ncmVlbltjaW5mby0+b3V0X2NvbG9yX3NwYWNlXV0gPSByYW5nZV9saW1pdFt5ICsgY2dyZWVuXTsKKyAgICBvdXRwdHIxW3JnYl9ibHVlW2NpbmZvLT5vdXRfY29sb3Jfc3BhY2VdXSA9ICByYW5nZV9saW1pdFt5ICsgY2JsdWVdOwogICB9CiB9CiAKQEAgLTM4MiwxNCArMzg1LDIwIEBACiAKICAgaWYgKGNpbmZvLT5tYXhfdl9zYW1wX2ZhY3RvciA9PSAyKSB7CiAgICAgdXBzYW1wbGUtPnB1Yi51cHNhbXBsZSA9IG1lcmdlZF8ydl91cHNhbXBsZTsKLSAgICB1cHNhbXBsZS0+dXBtZXRob2QgPSBoMnYyX21lcmdlZF91cHNhbXBsZTsKKyAgICBpZiAoanNpbWRfY2FuX2gydjJfbWVyZ2VkX3Vwc2FtcGxlKCkpCisgICAgICB1cHNhbXBsZS0+dXBtZXRob2QgPSBqc2ltZF9oMnYyX21lcmdlZF91cHNhbXBsZTsKKyAgICBlbHNlCisgICAgICB1cHNhbXBsZS0+dXBtZXRob2QgPSBoMnYyX21lcmdlZF91cHNhbXBsZTsKICAgICAvKiBBbGxvY2F0ZSBhIHNwYXJlIHJvdyBidWZmZXIgKi8KICAgICB1cHNhbXBsZS0+c3BhcmVfcm93ID0gKEpTQU1QUk9XKQogICAgICAgKCpjaW5mby0+bWVtLT5hbGxvY19sYXJnZSkgKChqX2NvbW1vbl9wdHIpIGNpbmZvLCBKUE9PTF9JTUFHRSwKIAkJKHNpemVfdCkgKHVwc2FtcGxlLT5vdXRfcm93X3dpZHRoICogU0laRU9GKEpTQU1QTEUpKSk7CiAgIH0gZWxzZSB7CiAgICAgdXBzYW1wbGUtPnB1Yi51cHNhbXBsZSA9IG1lcmdlZF8xdl91cHNhbXBsZTsKLSAgICB1cHNhbXBsZS0+dXBtZXRob2QgPSBoMnYxX21lcmdlZF91cHNhbXBsZTsKKyAgICBpZiAoanNpbWRfY2FuX2gydjFfbWVyZ2VkX3Vwc2FtcGxlKCkpCisgICAgICB1cHNhbXBsZS0+dXBtZXRob2QgPSBqc2ltZF9oMnYxX21lcmdlZF91cHNhbXBsZTsKKyAgICBlbHNlCisgICAgICB1cHNhbXBsZS0+dXBtZXRob2QgPSBoMnYxX21lcmdlZF91cHNhbXBsZTsKICAgICAvKiBObyBzcGFyZSByb3cgbmVlZGVkICovCiAgICAgdXBzYW1wbGUtPnNwYXJlX3JvdyA9IE5VTEw7CiAgIH0KZGlmZiAtLWdpdCBhL2pkcGh1ZmYuYyBiL2pkcGh1ZmYuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yMjY3ODA5Ci0tLSAvZGV2L251bGwKKysrIGIvamRwaHVmZi5jCkBAIC0wLDAgKzEsNjY4IEBACisvKgorICogamRwaHVmZi5jCisgKgorICogQ29weXJpZ2h0IChDKSAxOTk1LTE5OTcsIFRob21hcyBHLiBMYW5lLgorICogVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEluZGVwZW5kZW50IEpQRUcgR3JvdXAncyBzb2Z0d2FyZS4KKyAqIEZvciBjb25kaXRpb25zIG9mIGRpc3RyaWJ1dGlvbiBhbmQgdXNlLCBzZWUgdGhlIGFjY29tcGFueWluZyBSRUFETUUgZmlsZS4KKyAqCisgKiBUaGlzIGZpbGUgY29udGFpbnMgSHVmZm1hbiBlbnRyb3B5IGRlY29kaW5nIHJvdXRpbmVzIGZvciBwcm9ncmVzc2l2ZSBKUEVHLgorICoKKyAqIE11Y2ggb2YgdGhlIGNvbXBsZXhpdHkgaGVyZSBoYXMgdG8gZG8gd2l0aCBzdXBwb3J0aW5nIGlucHV0IHN1c3BlbnNpb24uCisgKiBJZiB0aGUgZGF0YSBzb3VyY2UgbW9kdWxlIGRlbWFuZHMgc3VzcGVuc2lvbiwgd2Ugd2FudCB0byBiZSBhYmxlIHRvIGJhY2sKKyAqIHVwIHRvIHRoZSBzdGFydCBvZiB0aGUgY3VycmVudCBNQ1UuICBUbyBkbyB0aGlzLCB3ZSBjb3B5IHN0YXRlIHZhcmlhYmxlcworICogaW50byBsb2NhbCB3b3JraW5nIHN0b3JhZ2UsIGFuZCB1cGRhdGUgdGhlbSBiYWNrIHRvIHRoZSBwZXJtYW5lbnQKKyAqIHN0b3JhZ2Ugb25seSB1cG9uIHN1Y2Nlc3NmdWwgY29tcGxldGlvbiBvZiBhbiBNQ1UuCisgKi8KKworI2RlZmluZSBKUEVHX0lOVEVSTkFMUworI2luY2x1ZGUgImppbmNsdWRlLmgiCisjaW5jbHVkZSAianBlZ2xpYi5oIgorI2luY2x1ZGUgImpkaHVmZi5oIgkJLyogRGVjbGFyYXRpb25zIHNoYXJlZCB3aXRoIGpkaHVmZi5jICovCisKKworI2lmZGVmIERfUFJPR1JFU1NJVkVfU1VQUE9SVEVECisKKy8qCisgKiBFeHBhbmRlZCBlbnRyb3B5IGRlY29kZXIgb2JqZWN0IGZvciBwcm9ncmVzc2l2ZSBIdWZmbWFuIGRlY29kaW5nLgorICoKKyAqIFRoZSBzYXZhYmxlX3N0YXRlIHN1YnJlY29yZCBjb250YWlucyBmaWVsZHMgdGhhdCBjaGFuZ2Ugd2l0aGluIGFuIE1DVSwKKyAqIGJ1dCBtdXN0IG5vdCBiZSB1cGRhdGVkIHBlcm1hbmVudGx5IHVudGlsIHdlIGNvbXBsZXRlIHRoZSBNQ1UuCisgKi8KKwordHlwZWRlZiBzdHJ1Y3QgeworICB1bnNpZ25lZCBpbnQgRU9CUlVOOwkJCS8qIHJlbWFpbmluZyBFT0JzIGluIEVPQlJVTiAqLworICBpbnQgbGFzdF9kY192YWxbTUFYX0NPTVBTX0lOX1NDQU5dOwkvKiBsYXN0IERDIGNvZWYgZm9yIGVhY2ggY29tcG9uZW50ICovCit9IHNhdmFibGVfc3RhdGU7CisKKy8qIFRoaXMgbWFjcm8gaXMgdG8gd29yayBhcm91bmQgY29tcGlsZXJzIHdpdGggbWlzc2luZyBvciBicm9rZW4KKyAqIHN0cnVjdHVyZSBhc3NpZ25tZW50LiAgWW91J2xsIG5lZWQgdG8gZml4IHRoaXMgY29kZSBpZiB5b3UgaGF2ZQorICogc3VjaCBhIGNvbXBpbGVyIGFuZCB5b3UgY2hhbmdlIE1BWF9DT01QU19JTl9TQ0FOLgorICovCisKKyNpZm5kZWYgTk9fU1RSVUNUX0FTU0lHTgorI2RlZmluZSBBU1NJR05fU1RBVEUoZGVzdCxzcmMpICAoKGRlc3QpID0gKHNyYykpCisjZWxzZQorI2lmIE1BWF9DT01QU19JTl9TQ0FOID09IDQKKyNkZWZpbmUgQVNTSUdOX1NUQVRFKGRlc3Qsc3JjKSAgXAorCSgoZGVzdCkuRU9CUlVOID0gKHNyYykuRU9CUlVOLCBcCisJIChkZXN0KS5sYXN0X2RjX3ZhbFswXSA9IChzcmMpLmxhc3RfZGNfdmFsWzBdLCBcCisJIChkZXN0KS5sYXN0X2RjX3ZhbFsxXSA9IChzcmMpLmxhc3RfZGNfdmFsWzFdLCBcCisJIChkZXN0KS5sYXN0X2RjX3ZhbFsyXSA9IChzcmMpLmxhc3RfZGNfdmFsWzJdLCBcCisJIChkZXN0KS5sYXN0X2RjX3ZhbFszXSA9IChzcmMpLmxhc3RfZGNfdmFsWzNdKQorI2VuZGlmCisjZW5kaWYKKworCit0eXBlZGVmIHN0cnVjdCB7CisgIHN0cnVjdCBqcGVnX2VudHJvcHlfZGVjb2RlciBwdWI7IC8qIHB1YmxpYyBmaWVsZHMgKi8KKworICAvKiBUaGVzZSBmaWVsZHMgYXJlIGxvYWRlZCBpbnRvIGxvY2FsIHZhcmlhYmxlcyBhdCBzdGFydCBvZiBlYWNoIE1DVS4KKyAgICogSW4gY2FzZSBvZiBzdXNwZW5zaW9uLCB3ZSBleGl0IFdJVEhPVVQgdXBkYXRpbmcgdGhlbS4KKyAgICovCisgIGJpdHJlYWRfcGVybV9zdGF0ZSBiaXRzdGF0ZTsJLyogQml0IGJ1ZmZlciBhdCBzdGFydCBvZiBNQ1UgKi8KKyAgc2F2YWJsZV9zdGF0ZSBzYXZlZDsJCS8qIE90aGVyIHN0YXRlIGF0IHN0YXJ0IG9mIE1DVSAqLworCisgIC8qIFRoZXNlIGZpZWxkcyBhcmUgTk9UIGxvYWRlZCBpbnRvIGxvY2FsIHdvcmtpbmcgc3RhdGUuICovCisgIHVuc2lnbmVkIGludCByZXN0YXJ0c190b19nbzsJLyogTUNVcyBsZWZ0IGluIHRoaXMgcmVzdGFydCBpbnRlcnZhbCAqLworCisgIC8qIFBvaW50ZXJzIHRvIGRlcml2ZWQgdGFibGVzICh0aGVzZSB3b3Jrc3BhY2VzIGhhdmUgaW1hZ2UgbGlmZXNwYW4pICovCisgIGRfZGVyaXZlZF90YmwgKiBkZXJpdmVkX3RibHNbTlVNX0hVRkZfVEJMU107CisKKyAgZF9kZXJpdmVkX3RibCAqIGFjX2Rlcml2ZWRfdGJsOyAvKiBhY3RpdmUgdGFibGUgZHVyaW5nIGFuIEFDIHNjYW4gKi8KK30gcGh1ZmZfZW50cm9weV9kZWNvZGVyOworCit0eXBlZGVmIHBodWZmX2VudHJvcHlfZGVjb2RlciAqIHBodWZmX2VudHJvcHlfcHRyOworCisvKiBGb3J3YXJkIGRlY2xhcmF0aW9ucyAqLworTUVUSE9EREVGKGJvb2xlYW4pIGRlY29kZV9tY3VfRENfZmlyc3QgSlBQKChqX2RlY29tcHJlc3NfcHRyIGNpbmZvLAorCQkJCQkgICAgSkJMT0NLUk9XICpNQ1VfZGF0YSkpOworTUVUSE9EREVGKGJvb2xlYW4pIGRlY29kZV9tY3VfQUNfZmlyc3QgSlBQKChqX2RlY29tcHJlc3NfcHRyIGNpbmZvLAorCQkJCQkgICAgSkJMT0NLUk9XICpNQ1VfZGF0YSkpOworTUVUSE9EREVGKGJvb2xlYW4pIGRlY29kZV9tY3VfRENfcmVmaW5lIEpQUCgoal9kZWNvbXByZXNzX3B0ciBjaW5mbywKKwkJCQkJICAgICBKQkxPQ0tST1cgKk1DVV9kYXRhKSk7CitNRVRIT0RERUYoYm9vbGVhbikgZGVjb2RlX21jdV9BQ19yZWZpbmUgSlBQKChqX2RlY29tcHJlc3NfcHRyIGNpbmZvLAorCQkJCQkgICAgIEpCTE9DS1JPVyAqTUNVX2RhdGEpKTsKKworCisvKgorICogSW5pdGlhbGl6ZSBmb3IgYSBIdWZmbWFuLWNvbXByZXNzZWQgc2Nhbi4KKyAqLworCitNRVRIT0RERUYodm9pZCkKK3N0YXJ0X3Bhc3NfcGh1ZmZfZGVjb2RlciAoal9kZWNvbXByZXNzX3B0ciBjaW5mbykKK3sKKyAgcGh1ZmZfZW50cm9weV9wdHIgZW50cm9weSA9IChwaHVmZl9lbnRyb3B5X3B0cikgY2luZm8tPmVudHJvcHk7CisgIGJvb2xlYW4gaXNfRENfYmFuZCwgYmFkOworICBpbnQgY2ksIGNvZWZpLCB0Ymw7CisgIGludCAqY29lZl9iaXRfcHRyOworICBqcGVnX2NvbXBvbmVudF9pbmZvICogY29tcHB0cjsKKworICBpc19EQ19iYW5kID0gKGNpbmZvLT5TcyA9PSAwKTsKKworICAvKiBWYWxpZGF0ZSBzY2FuIHBhcmFtZXRlcnMgKi8KKyAgYmFkID0gRkFMU0U7CisgIGlmIChpc19EQ19iYW5kKSB7CisgICAgaWYgKGNpbmZvLT5TZSAhPSAwKQorICAgICAgYmFkID0gVFJVRTsKKyAgfSBlbHNlIHsKKyAgICAvKiBuZWVkIG5vdCBjaGVjayBTcy9TZSA8IDAgc2luY2UgdGhleSBjYW1lIGZyb20gdW5zaWduZWQgYnl0ZXMgKi8KKyAgICBpZiAoY2luZm8tPlNzID4gY2luZm8tPlNlIHx8IGNpbmZvLT5TZSA+PSBEQ1RTSVpFMikKKyAgICAgIGJhZCA9IFRSVUU7CisgICAgLyogQUMgc2NhbnMgbWF5IGhhdmUgb25seSBvbmUgY29tcG9uZW50ICovCisgICAgaWYgKGNpbmZvLT5jb21wc19pbl9zY2FuICE9IDEpCisgICAgICBiYWQgPSBUUlVFOworICB9CisgIGlmIChjaW5mby0+QWggIT0gMCkgeworICAgIC8qIFN1Y2Nlc3NpdmUgYXBwcm94aW1hdGlvbiByZWZpbmVtZW50IHNjYW46IG11c3QgaGF2ZSBBbCA9IEFoLTEuICovCisgICAgaWYgKGNpbmZvLT5BbCAhPSBjaW5mby0+QWgtMSkKKyAgICAgIGJhZCA9IFRSVUU7CisgIH0KKyAgaWYgKGNpbmZvLT5BbCA+IDEzKQkJLyogbmVlZCBub3QgY2hlY2sgZm9yIDwgMCAqLworICAgIGJhZCA9IFRSVUU7CisgIC8qIEFyZ3VhYmx5IHRoZSBtYXhpbXVtIEFsIHZhbHVlIHNob3VsZCBiZSBsZXNzIHRoYW4gMTMgZm9yIDgtYml0IHByZWNpc2lvbiwKKyAgICogYnV0IHRoZSBzcGVjIGRvZXNuJ3Qgc2F5IHNvLCBhbmQgd2UgdHJ5IHRvIGJlIGxpYmVyYWwgYWJvdXQgd2hhdCB3ZQorICAgKiBhY2NlcHQuICBOb3RlOiBsYXJnZSBBbCB2YWx1ZXMgY291bGQgcmVzdWx0IGluIG91dC1vZi1yYW5nZSBEQworICAgKiBjb2VmZmljaWVudHMgZHVyaW5nIGVhcmx5IHNjYW5zLCBsZWFkaW5nIHRvIGJpemFycmUgZGlzcGxheXMgZHVlIHRvCisgICAqIG92ZXJmbG93cyBpbiB0aGUgSURDVCBtYXRoLiAgQnV0IHdlIHdvbid0IGNyYXNoLgorICAgKi8KKyAgaWYgKGJhZCkKKyAgICBFUlJFWElUNChjaW5mbywgSkVSUl9CQURfUFJPR1JFU1NJT04sCisJICAgICBjaW5mby0+U3MsIGNpbmZvLT5TZSwgY2luZm8tPkFoLCBjaW5mby0+QWwpOworICAvKiBVcGRhdGUgcHJvZ3Jlc3Npb24gc3RhdHVzLCBhbmQgdmVyaWZ5IHRoYXQgc2NhbiBvcmRlciBpcyBsZWdhbC4KKyAgICogTm90ZSB0aGF0IGludGVyLXNjYW4gaW5jb25zaXN0ZW5jaWVzIGFyZSB0cmVhdGVkIGFzIHdhcm5pbmdzCisgICAqIG5vdCBmYXRhbCBlcnJvcnMgLi4uIG5vdCBjbGVhciBpZiB0aGlzIGlzIHJpZ2h0IHdheSB0byBiZWhhdmUuCisgICAqLworICBmb3IgKGNpID0gMDsgY2kgPCBjaW5mby0+Y29tcHNfaW5fc2NhbjsgY2krKykgeworICAgIGludCBjaW5kZXggPSBjaW5mby0+Y3VyX2NvbXBfaW5mb1tjaV0tPmNvbXBvbmVudF9pbmRleDsKKyAgICBjb2VmX2JpdF9wdHIgPSAmIGNpbmZvLT5jb2VmX2JpdHNbY2luZGV4XVswXTsKKyAgICBpZiAoIWlzX0RDX2JhbmQgJiYgY29lZl9iaXRfcHRyWzBdIDwgMCkgLyogQUMgd2l0aG91dCBwcmlvciBEQyBzY2FuICovCisgICAgICBXQVJOTVMyKGNpbmZvLCBKV1JOX0JPR1VTX1BST0dSRVNTSU9OLCBjaW5kZXgsIDApOworICAgIGZvciAoY29lZmkgPSBjaW5mby0+U3M7IGNvZWZpIDw9IGNpbmZvLT5TZTsgY29lZmkrKykgeworICAgICAgaW50IGV4cGVjdGVkID0gKGNvZWZfYml0X3B0cltjb2VmaV0gPCAwKSA/IDAgOiBjb2VmX2JpdF9wdHJbY29lZmldOworICAgICAgaWYgKGNpbmZvLT5BaCAhPSBleHBlY3RlZCkKKwlXQVJOTVMyKGNpbmZvLCBKV1JOX0JPR1VTX1BST0dSRVNTSU9OLCBjaW5kZXgsIGNvZWZpKTsKKyAgICAgIGNvZWZfYml0X3B0cltjb2VmaV0gPSBjaW5mby0+QWw7CisgICAgfQorICB9CisKKyAgLyogU2VsZWN0IE1DVSBkZWNvZGluZyByb3V0aW5lICovCisgIGlmIChjaW5mby0+QWggPT0gMCkgeworICAgIGlmIChpc19EQ19iYW5kKQorICAgICAgZW50cm9weS0+cHViLmRlY29kZV9tY3UgPSBkZWNvZGVfbWN1X0RDX2ZpcnN0OworICAgIGVsc2UKKyAgICAgIGVudHJvcHktPnB1Yi5kZWNvZGVfbWN1ID0gZGVjb2RlX21jdV9BQ19maXJzdDsKKyAgfSBlbHNlIHsKKyAgICBpZiAoaXNfRENfYmFuZCkKKyAgICAgIGVudHJvcHktPnB1Yi5kZWNvZGVfbWN1ID0gZGVjb2RlX21jdV9EQ19yZWZpbmU7CisgICAgZWxzZQorICAgICAgZW50cm9weS0+cHViLmRlY29kZV9tY3UgPSBkZWNvZGVfbWN1X0FDX3JlZmluZTsKKyAgfQorCisgIGZvciAoY2kgPSAwOyBjaSA8IGNpbmZvLT5jb21wc19pbl9zY2FuOyBjaSsrKSB7CisgICAgY29tcHB0ciA9IGNpbmZvLT5jdXJfY29tcF9pbmZvW2NpXTsKKyAgICAvKiBNYWtlIHN1cmUgcmVxdWVzdGVkIHRhYmxlcyBhcmUgcHJlc2VudCwgYW5kIGNvbXB1dGUgZGVyaXZlZCB0YWJsZXMuCisgICAgICogV2UgbWF5IGJ1aWxkIHNhbWUgZGVyaXZlZCB0YWJsZSBtb3JlIHRoYW4gb25jZSwgYnV0IGl0J3Mgbm90IGV4cGVuc2l2ZS4KKyAgICAgKi8KKyAgICBpZiAoaXNfRENfYmFuZCkgeworICAgICAgaWYgKGNpbmZvLT5BaCA9PSAwKSB7CS8qIERDIHJlZmluZW1lbnQgbmVlZHMgbm8gdGFibGUgKi8KKwl0YmwgPSBjb21wcHRyLT5kY190Ymxfbm87CisJanBlZ19tYWtlX2RfZGVyaXZlZF90YmwoY2luZm8sIFRSVUUsIHRibCwKKwkJCQkmIGVudHJvcHktPmRlcml2ZWRfdGJsc1t0YmxdKTsKKyAgICAgIH0KKyAgICB9IGVsc2UgeworICAgICAgdGJsID0gY29tcHB0ci0+YWNfdGJsX25vOworICAgICAganBlZ19tYWtlX2RfZGVyaXZlZF90YmwoY2luZm8sIEZBTFNFLCB0YmwsCisJCQkgICAgICAmIGVudHJvcHktPmRlcml2ZWRfdGJsc1t0YmxdKTsKKyAgICAgIC8qIHJlbWVtYmVyIHRoZSBzaW5nbGUgYWN0aXZlIHRhYmxlICovCisgICAgICBlbnRyb3B5LT5hY19kZXJpdmVkX3RibCA9IGVudHJvcHktPmRlcml2ZWRfdGJsc1t0YmxdOworICAgIH0KKyAgICAvKiBJbml0aWFsaXplIERDIHByZWRpY3Rpb25zIHRvIDAgKi8KKyAgICBlbnRyb3B5LT5zYXZlZC5sYXN0X2RjX3ZhbFtjaV0gPSAwOworICB9CisKKyAgLyogSW5pdGlhbGl6ZSBiaXRyZWFkIHN0YXRlIHZhcmlhYmxlcyAqLworICBlbnRyb3B5LT5iaXRzdGF0ZS5iaXRzX2xlZnQgPSAwOworICBlbnRyb3B5LT5iaXRzdGF0ZS5nZXRfYnVmZmVyID0gMDsgLyogdW5uZWNlc3NhcnksIGJ1dCBrZWVwcyBQdXJpZnkgcXVpZXQgKi8KKyAgZW50cm9weS0+cHViLmluc3VmZmljaWVudF9kYXRhID0gRkFMU0U7CisKKyAgLyogSW5pdGlhbGl6ZSBwcml2YXRlIHN0YXRlIHZhcmlhYmxlcyAqLworICBlbnRyb3B5LT5zYXZlZC5FT0JSVU4gPSAwOworCisgIC8qIEluaXRpYWxpemUgcmVzdGFydCBjb3VudGVyICovCisgIGVudHJvcHktPnJlc3RhcnRzX3RvX2dvID0gY2luZm8tPnJlc3RhcnRfaW50ZXJ2YWw7Cit9CisKKworLyoKKyAqIEZpZ3VyZSBGLjEyOiBleHRlbmQgc2lnbiBiaXQuCisgKiBPbiBzb21lIG1hY2hpbmVzLCBhIHNoaWZ0IGFuZCBhZGQgd2lsbCBiZSBmYXN0ZXIgdGhhbiBhIHRhYmxlIGxvb2t1cC4KKyAqLworCisjaWZkZWYgQVZPSURfVEFCTEVTCisKKyNkZWZpbmUgSFVGRl9FWFRFTkQoeCxzKSAgKCh4KSA8ICgxPDwoKHMpLTEpKSA/ICh4KSArICgoKC0xKTw8KHMpKSArIDEpIDogKHgpKQorCisjZWxzZQorCisjZGVmaW5lIEhVRkZfRVhURU5EKHgscykgICgoeCkgPCBleHRlbmRfdGVzdFtzXSA/ICh4KSArIGV4dGVuZF9vZmZzZXRbc10gOiAoeCkpCisKK3N0YXRpYyBjb25zdCBpbnQgZXh0ZW5kX3Rlc3RbMTZdID0gICAvKiBlbnRyeSBuIGlzIDIqKihuLTEpICovCisgIHsgMCwgMHgwMDAxLCAweDAwMDIsIDB4MDAwNCwgMHgwMDA4LCAweDAwMTAsIDB4MDAyMCwgMHgwMDQwLCAweDAwODAsCisgICAgMHgwMTAwLCAweDAyMDAsIDB4MDQwMCwgMHgwODAwLCAweDEwMDAsIDB4MjAwMCwgMHg0MDAwIH07CisKK3N0YXRpYyBjb25zdCBpbnQgZXh0ZW5kX29mZnNldFsxNl0gPSAvKiBlbnRyeSBuIGlzICgtMSA8PCBuKSArIDEgKi8KKyAgeyAwLCAoKC0xKTw8MSkgKyAxLCAoKC0xKTw8MikgKyAxLCAoKC0xKTw8MykgKyAxLCAoKC0xKTw8NCkgKyAxLAorICAgICgoLTEpPDw1KSArIDEsICgoLTEpPDw2KSArIDEsICgoLTEpPDw3KSArIDEsICgoLTEpPDw4KSArIDEsCisgICAgKCgtMSk8PDkpICsgMSwgKCgtMSk8PDEwKSArIDEsICgoLTEpPDwxMSkgKyAxLCAoKC0xKTw8MTIpICsgMSwKKyAgICAoKC0xKTw8MTMpICsgMSwgKCgtMSk8PDE0KSArIDEsICgoLTEpPDwxNSkgKyAxIH07CisKKyNlbmRpZiAvKiBBVk9JRF9UQUJMRVMgKi8KKworCisvKgorICogQ2hlY2sgZm9yIGEgcmVzdGFydCBtYXJrZXIgJiByZXN5bmNocm9uaXplIGRlY29kZXIuCisgKiBSZXR1cm5zIEZBTFNFIGlmIG11c3Qgc3VzcGVuZC4KKyAqLworCitMT0NBTChib29sZWFuKQorcHJvY2Vzc19yZXN0YXJ0IChqX2RlY29tcHJlc3NfcHRyIGNpbmZvKQoreworICBwaHVmZl9lbnRyb3B5X3B0ciBlbnRyb3B5ID0gKHBodWZmX2VudHJvcHlfcHRyKSBjaW5mby0+ZW50cm9weTsKKyAgaW50IGNpOworCisgIC8qIFRocm93IGF3YXkgYW55IHVudXNlZCBiaXRzIHJlbWFpbmluZyBpbiBiaXQgYnVmZmVyOyAqLworICAvKiBpbmNsdWRlIGFueSBmdWxsIGJ5dGVzIGluIG5leHRfbWFya2VyJ3MgY291bnQgb2YgZGlzY2FyZGVkIGJ5dGVzICovCisgIGNpbmZvLT5tYXJrZXItPmRpc2NhcmRlZF9ieXRlcyArPSBlbnRyb3B5LT5iaXRzdGF0ZS5iaXRzX2xlZnQgLyA4OworICBlbnRyb3B5LT5iaXRzdGF0ZS5iaXRzX2xlZnQgPSAwOworCisgIC8qIEFkdmFuY2UgcGFzdCB0aGUgUlNUbiBtYXJrZXIgKi8KKyAgaWYgKCEgKCpjaW5mby0+bWFya2VyLT5yZWFkX3Jlc3RhcnRfbWFya2VyKSAoY2luZm8pKQorICAgIHJldHVybiBGQUxTRTsKKworICAvKiBSZS1pbml0aWFsaXplIERDIHByZWRpY3Rpb25zIHRvIDAgKi8KKyAgZm9yIChjaSA9IDA7IGNpIDwgY2luZm8tPmNvbXBzX2luX3NjYW47IGNpKyspCisgICAgZW50cm9weS0+c2F2ZWQubGFzdF9kY192YWxbY2ldID0gMDsKKyAgLyogUmUtaW5pdCBFT0IgcnVuIGNvdW50LCB0b28gKi8KKyAgZW50cm9weS0+c2F2ZWQuRU9CUlVOID0gMDsKKworICAvKiBSZXNldCByZXN0YXJ0IGNvdW50ZXIgKi8KKyAgZW50cm9weS0+cmVzdGFydHNfdG9fZ28gPSBjaW5mby0+cmVzdGFydF9pbnRlcnZhbDsKKworICAvKiBSZXNldCBvdXQtb2YtZGF0YSBmbGFnLCB1bmxlc3MgcmVhZF9yZXN0YXJ0X21hcmtlciBsZWZ0IHVzIHNtYWNrIHVwCisgICAqIGFnYWluc3QgYSBtYXJrZXIuICBJbiB0aGF0IGNhc2Ugd2Ugd2lsbCBlbmQgdXAgdHJlYXRpbmcgdGhlIG5leHQgZGF0YQorICAgKiBzZWdtZW50IGFzIGVtcHR5LCBhbmQgd2UgY2FuIGF2b2lkIHByb2R1Y2luZyBib2d1cyBvdXRwdXQgcGl4ZWxzIGJ5CisgICAqIGxlYXZpbmcgdGhlIGZsYWcgc2V0LgorICAgKi8KKyAgaWYgKGNpbmZvLT51bnJlYWRfbWFya2VyID09IDApCisgICAgZW50cm9weS0+cHViLmluc3VmZmljaWVudF9kYXRhID0gRkFMU0U7CisKKyAgcmV0dXJuIFRSVUU7Cit9CisKKworLyoKKyAqIEh1ZmZtYW4gTUNVIGRlY29kaW5nLgorICogRWFjaCBvZiB0aGVzZSByb3V0aW5lcyBkZWNvZGVzIGFuZCByZXR1cm5zIG9uZSBNQ1UncyB3b3J0aCBvZgorICogSHVmZm1hbi1jb21wcmVzc2VkIGNvZWZmaWNpZW50cy4gCisgKiBUaGUgY29lZmZpY2llbnRzIGFyZSByZW9yZGVyZWQgZnJvbSB6aWd6YWcgb3JkZXIgaW50byBuYXR1cmFsIGFycmF5IG9yZGVyLAorICogYnV0IGFyZSBub3QgZGVxdWFudGl6ZWQuCisgKgorICogVGhlIGkndGggYmxvY2sgb2YgdGhlIE1DVSBpcyBzdG9yZWQgaW50byB0aGUgYmxvY2sgcG9pbnRlZCB0byBieQorICogTUNVX2RhdGFbaV0uICBXRSBBU1NVTUUgVEhJUyBBUkVBIElTIElOSVRJQUxMWSBaRVJPRUQgQlkgVEhFIENBTExFUi4KKyAqCisgKiBXZSByZXR1cm4gRkFMU0UgaWYgZGF0YSBzb3VyY2UgcmVxdWVzdGVkIHN1c3BlbnNpb24uICBJbiB0aGF0IGNhc2Ugbm8KKyAqIGNoYW5nZXMgaGF2ZSBiZWVuIG1hZGUgdG8gcGVybWFuZW50IHN0YXRlLiAgKEV4Y2VwdGlvbjogc29tZSBvdXRwdXQKKyAqIGNvZWZmaWNpZW50cyBtYXkgYWxyZWFkeSBoYXZlIGJlZW4gYXNzaWduZWQuICBUaGlzIGlzIGhhcm1sZXNzIGZvcgorICogc3BlY3RyYWwgc2VsZWN0aW9uLCBzaW5jZSB3ZSdsbCBqdXN0IHJlLWFzc2lnbiB0aGVtIG9uIHRoZSBuZXh0IGNhbGwuCisgKiBTdWNjZXNzaXZlIGFwcHJveGltYXRpb24gQUMgcmVmaW5lbWVudCBoYXMgdG8gYmUgbW9yZSBjYXJlZnVsLCBob3dldmVyLikKKyAqLworCisvKgorICogTUNVIGRlY29kaW5nIGZvciBEQyBpbml0aWFsIHNjYW4gKGVpdGhlciBzcGVjdHJhbCBzZWxlY3Rpb24sCisgKiBvciBmaXJzdCBwYXNzIG9mIHN1Y2Nlc3NpdmUgYXBwcm94aW1hdGlvbikuCisgKi8KKworTUVUSE9EREVGKGJvb2xlYW4pCitkZWNvZGVfbWN1X0RDX2ZpcnN0IChqX2RlY29tcHJlc3NfcHRyIGNpbmZvLCBKQkxPQ0tST1cgKk1DVV9kYXRhKQoreyAgIAorICBwaHVmZl9lbnRyb3B5X3B0ciBlbnRyb3B5ID0gKHBodWZmX2VudHJvcHlfcHRyKSBjaW5mby0+ZW50cm9weTsKKyAgaW50IEFsID0gY2luZm8tPkFsOworICByZWdpc3RlciBpbnQgcywgcjsKKyAgaW50IGJsa24sIGNpOworICBKQkxPQ0tST1cgYmxvY2s7CisgIEJJVFJFQURfU1RBVEVfVkFSUzsKKyAgc2F2YWJsZV9zdGF0ZSBzdGF0ZTsKKyAgZF9kZXJpdmVkX3RibCAqIHRibDsKKyAganBlZ19jb21wb25lbnRfaW5mbyAqIGNvbXBwdHI7CisKKyAgLyogUHJvY2VzcyByZXN0YXJ0IG1hcmtlciBpZiBuZWVkZWQ7IG1heSBoYXZlIHRvIHN1c3BlbmQgKi8KKyAgaWYgKGNpbmZvLT5yZXN0YXJ0X2ludGVydmFsKSB7CisgICAgaWYgKGVudHJvcHktPnJlc3RhcnRzX3RvX2dvID09IDApCisgICAgICBpZiAoISBwcm9jZXNzX3Jlc3RhcnQoY2luZm8pKQorCXJldHVybiBGQUxTRTsKKyAgfQorCisgIC8qIElmIHdlJ3ZlIHJ1biBvdXQgb2YgZGF0YSwganVzdCBsZWF2ZSB0aGUgTUNVIHNldCB0byB6ZXJvZXMuCisgICAqIFRoaXMgd2F5LCB3ZSByZXR1cm4gdW5pZm9ybSBncmF5IGZvciB0aGUgcmVtYWluZGVyIG9mIHRoZSBzZWdtZW50LgorICAgKi8KKyAgaWYgKCEgZW50cm9weS0+cHViLmluc3VmZmljaWVudF9kYXRhKSB7CisKKyAgICAvKiBMb2FkIHVwIHdvcmtpbmcgc3RhdGUgKi8KKyAgICBCSVRSRUFEX0xPQURfU1RBVEUoY2luZm8sZW50cm9weS0+Yml0c3RhdGUpOworICAgIEFTU0lHTl9TVEFURShzdGF0ZSwgZW50cm9weS0+c2F2ZWQpOworCisgICAgLyogT3V0ZXIgbG9vcCBoYW5kbGVzIGVhY2ggYmxvY2sgaW4gdGhlIE1DVSAqLworCisgICAgZm9yIChibGtuID0gMDsgYmxrbiA8IGNpbmZvLT5ibG9ja3NfaW5fTUNVOyBibGtuKyspIHsKKyAgICAgIGJsb2NrID0gTUNVX2RhdGFbYmxrbl07CisgICAgICBjaSA9IGNpbmZvLT5NQ1VfbWVtYmVyc2hpcFtibGtuXTsKKyAgICAgIGNvbXBwdHIgPSBjaW5mby0+Y3VyX2NvbXBfaW5mb1tjaV07CisgICAgICB0YmwgPSBlbnRyb3B5LT5kZXJpdmVkX3RibHNbY29tcHB0ci0+ZGNfdGJsX25vXTsKKworICAgICAgLyogRGVjb2RlIGEgc2luZ2xlIGJsb2NrJ3Mgd29ydGggb2YgY29lZmZpY2llbnRzICovCisKKyAgICAgIC8qIFNlY3Rpb24gRi4yLjIuMTogZGVjb2RlIHRoZSBEQyBjb2VmZmljaWVudCBkaWZmZXJlbmNlICovCisgICAgICBIVUZGX0RFQ09ERShzLCBicl9zdGF0ZSwgdGJsLCByZXR1cm4gRkFMU0UsIGxhYmVsMSk7CisgICAgICBpZiAocykgeworCUNIRUNLX0JJVF9CVUZGRVIoYnJfc3RhdGUsIHMsIHJldHVybiBGQUxTRSk7CisJciA9IEdFVF9CSVRTKHMpOworCXMgPSBIVUZGX0VYVEVORChyLCBzKTsKKyAgICAgIH0KKworICAgICAgLyogQ29udmVydCBEQyBkaWZmZXJlbmNlIHRvIGFjdHVhbCB2YWx1ZSwgdXBkYXRlIGxhc3RfZGNfdmFsICovCisgICAgICBzICs9IHN0YXRlLmxhc3RfZGNfdmFsW2NpXTsKKyAgICAgIHN0YXRlLmxhc3RfZGNfdmFsW2NpXSA9IHM7CisgICAgICAvKiBTY2FsZSBhbmQgb3V0cHV0IHRoZSBjb2VmZmljaWVudCAoYXNzdW1lcyBqcGVnX25hdHVyYWxfb3JkZXJbMF09MCkgKi8KKyAgICAgICgqYmxvY2spWzBdID0gKEpDT0VGKSAocyA8PCBBbCk7CisgICAgfQorCisgICAgLyogQ29tcGxldGVkIE1DVSwgc28gdXBkYXRlIHN0YXRlICovCisgICAgQklUUkVBRF9TQVZFX1NUQVRFKGNpbmZvLGVudHJvcHktPmJpdHN0YXRlKTsKKyAgICBBU1NJR05fU1RBVEUoZW50cm9weS0+c2F2ZWQsIHN0YXRlKTsKKyAgfQorCisgIC8qIEFjY291bnQgZm9yIHJlc3RhcnQgaW50ZXJ2YWwgKG5vLW9wIGlmIG5vdCB1c2luZyByZXN0YXJ0cykgKi8KKyAgZW50cm9weS0+cmVzdGFydHNfdG9fZ28tLTsKKworICByZXR1cm4gVFJVRTsKK30KKworCisvKgorICogTUNVIGRlY29kaW5nIGZvciBBQyBpbml0aWFsIHNjYW4gKGVpdGhlciBzcGVjdHJhbCBzZWxlY3Rpb24sCisgKiBvciBmaXJzdCBwYXNzIG9mIHN1Y2Nlc3NpdmUgYXBwcm94aW1hdGlvbikuCisgKi8KKworTUVUSE9EREVGKGJvb2xlYW4pCitkZWNvZGVfbWN1X0FDX2ZpcnN0IChqX2RlY29tcHJlc3NfcHRyIGNpbmZvLCBKQkxPQ0tST1cgKk1DVV9kYXRhKQoreyAgIAorICBwaHVmZl9lbnRyb3B5X3B0ciBlbnRyb3B5ID0gKHBodWZmX2VudHJvcHlfcHRyKSBjaW5mby0+ZW50cm9weTsKKyAgaW50IFNlID0gY2luZm8tPlNlOworICBpbnQgQWwgPSBjaW5mby0+QWw7CisgIHJlZ2lzdGVyIGludCBzLCBrLCByOworICB1bnNpZ25lZCBpbnQgRU9CUlVOOworICBKQkxPQ0tST1cgYmxvY2s7CisgIEJJVFJFQURfU1RBVEVfVkFSUzsKKyAgZF9kZXJpdmVkX3RibCAqIHRibDsKKworICAvKiBQcm9jZXNzIHJlc3RhcnQgbWFya2VyIGlmIG5lZWRlZDsgbWF5IGhhdmUgdG8gc3VzcGVuZCAqLworICBpZiAoY2luZm8tPnJlc3RhcnRfaW50ZXJ2YWwpIHsKKyAgICBpZiAoZW50cm9weS0+cmVzdGFydHNfdG9fZ28gPT0gMCkKKyAgICAgIGlmICghIHByb2Nlc3NfcmVzdGFydChjaW5mbykpCisJcmV0dXJuIEZBTFNFOworICB9CisKKyAgLyogSWYgd2UndmUgcnVuIG91dCBvZiBkYXRhLCBqdXN0IGxlYXZlIHRoZSBNQ1Ugc2V0IHRvIHplcm9lcy4KKyAgICogVGhpcyB3YXksIHdlIHJldHVybiB1bmlmb3JtIGdyYXkgZm9yIHRoZSByZW1haW5kZXIgb2YgdGhlIHNlZ21lbnQuCisgICAqLworICBpZiAoISBlbnRyb3B5LT5wdWIuaW5zdWZmaWNpZW50X2RhdGEpIHsKKworICAgIC8qIExvYWQgdXAgd29ya2luZyBzdGF0ZS4KKyAgICAgKiBXZSBjYW4gYXZvaWQgbG9hZGluZy9zYXZpbmcgYml0cmVhZCBzdGF0ZSBpZiBpbiBhbiBFT0IgcnVuLgorICAgICAqLworICAgIEVPQlJVTiA9IGVudHJvcHktPnNhdmVkLkVPQlJVTjsJLyogb25seSBwYXJ0IG9mIHNhdmVkIHN0YXRlIHdlIG5lZWQgKi8KKworICAgIC8qIFRoZXJlIGlzIGFsd2F5cyBvbmx5IG9uZSBibG9jayBwZXIgTUNVICovCisKKyAgICBpZiAoRU9CUlVOID4gMCkJCS8qIGlmIGl0J3MgYSBiYW5kIG9mIHplcm9lcy4uLiAqLworICAgICAgRU9CUlVOLS07CQkJLyogLi4ucHJvY2VzcyBpdCBub3cgKHdlIGRvIG5vdGhpbmcpICovCisgICAgZWxzZSB7CisgICAgICBCSVRSRUFEX0xPQURfU1RBVEUoY2luZm8sZW50cm9weS0+Yml0c3RhdGUpOworICAgICAgYmxvY2sgPSBNQ1VfZGF0YVswXTsKKyAgICAgIHRibCA9IGVudHJvcHktPmFjX2Rlcml2ZWRfdGJsOworCisgICAgICBmb3IgKGsgPSBjaW5mby0+U3M7IGsgPD0gU2U7IGsrKykgeworCUhVRkZfREVDT0RFKHMsIGJyX3N0YXRlLCB0YmwsIHJldHVybiBGQUxTRSwgbGFiZWwyKTsKKwlyID0gcyA+PiA0OworCXMgJj0gMTU7CisJaWYgKHMpIHsKKwkgIGsgKz0gcjsKKwkgIENIRUNLX0JJVF9CVUZGRVIoYnJfc3RhdGUsIHMsIHJldHVybiBGQUxTRSk7CisJICByID0gR0VUX0JJVFMocyk7CisJICBzID0gSFVGRl9FWFRFTkQociwgcyk7CisJICAvKiBTY2FsZSBhbmQgb3V0cHV0IGNvZWZmaWNpZW50IGluIG5hdHVyYWwgKGRlemlnemFnZ2VkKSBvcmRlciAqLworCSAgKCpibG9jaylbanBlZ19uYXR1cmFsX29yZGVyW2tdXSA9IChKQ09FRikgKHMgPDwgQWwpOworCX0gZWxzZSB7CisJICBpZiAociA9PSAxNSkgewkvKiBaUkwgKi8KKwkgICAgayArPSAxNTsJCS8qIHNraXAgMTUgemVyb2VzIGluIGJhbmQgKi8KKwkgIH0gZWxzZSB7CQkvKiBFT0JyLCBydW4gbGVuZ3RoIGlzIDJeciArIGFwcGVuZGVkIGJpdHMgKi8KKwkgICAgRU9CUlVOID0gMSA8PCByOworCSAgICBpZiAocikgewkJLyogRU9CciwgciA+IDAgKi8KKwkgICAgICBDSEVDS19CSVRfQlVGRkVSKGJyX3N0YXRlLCByLCByZXR1cm4gRkFMU0UpOworCSAgICAgIHIgPSBHRVRfQklUUyhyKTsKKwkgICAgICBFT0JSVU4gKz0gcjsKKwkgICAgfQorCSAgICBFT0JSVU4tLTsJCS8qIHRoaXMgYmFuZCBpcyBwcm9jZXNzZWQgYXQgdGhpcyBtb21lbnQgKi8KKwkgICAgYnJlYWs7CQkvKiBmb3JjZSBlbmQtb2YtYmFuZCAqLworCSAgfQorCX0KKyAgICAgIH0KKworICAgICAgQklUUkVBRF9TQVZFX1NUQVRFKGNpbmZvLGVudHJvcHktPmJpdHN0YXRlKTsKKyAgICB9CisKKyAgICAvKiBDb21wbGV0ZWQgTUNVLCBzbyB1cGRhdGUgc3RhdGUgKi8KKyAgICBlbnRyb3B5LT5zYXZlZC5FT0JSVU4gPSBFT0JSVU47CS8qIG9ubHkgcGFydCBvZiBzYXZlZCBzdGF0ZSB3ZSBuZWVkICovCisgIH0KKworICAvKiBBY2NvdW50IGZvciByZXN0YXJ0IGludGVydmFsIChuby1vcCBpZiBub3QgdXNpbmcgcmVzdGFydHMpICovCisgIGVudHJvcHktPnJlc3RhcnRzX3RvX2dvLS07CisKKyAgcmV0dXJuIFRSVUU7Cit9CisKKworLyoKKyAqIE1DVSBkZWNvZGluZyBmb3IgREMgc3VjY2Vzc2l2ZSBhcHByb3hpbWF0aW9uIHJlZmluZW1lbnQgc2Nhbi4KKyAqIE5vdGU6IHdlIGFzc3VtZSBzdWNoIHNjYW5zIGNhbiBiZSBtdWx0aS1jb21wb25lbnQsIGFsdGhvdWdoIHRoZSBzcGVjCisgKiBpcyBub3QgdmVyeSBjbGVhciBvbiB0aGUgcG9pbnQuCisgKi8KKworTUVUSE9EREVGKGJvb2xlYW4pCitkZWNvZGVfbWN1X0RDX3JlZmluZSAoal9kZWNvbXByZXNzX3B0ciBjaW5mbywgSkJMT0NLUk9XICpNQ1VfZGF0YSkKK3sgICAKKyAgcGh1ZmZfZW50cm9weV9wdHIgZW50cm9weSA9IChwaHVmZl9lbnRyb3B5X3B0cikgY2luZm8tPmVudHJvcHk7CisgIGludCBwMSA9IDEgPDwgY2luZm8tPkFsOwkvKiAxIGluIHRoZSBiaXQgcG9zaXRpb24gYmVpbmcgY29kZWQgKi8KKyAgaW50IGJsa247CisgIEpCTE9DS1JPVyBibG9jazsKKyAgQklUUkVBRF9TVEFURV9WQVJTOworCisgIC8qIFByb2Nlc3MgcmVzdGFydCBtYXJrZXIgaWYgbmVlZGVkOyBtYXkgaGF2ZSB0byBzdXNwZW5kICovCisgIGlmIChjaW5mby0+cmVzdGFydF9pbnRlcnZhbCkgeworICAgIGlmIChlbnRyb3B5LT5yZXN0YXJ0c190b19nbyA9PSAwKQorICAgICAgaWYgKCEgcHJvY2Vzc19yZXN0YXJ0KGNpbmZvKSkKKwlyZXR1cm4gRkFMU0U7CisgIH0KKworICAvKiBOb3Qgd29ydGggdGhlIGN5Y2xlcyB0byBjaGVjayBpbnN1ZmZpY2llbnRfZGF0YSBoZXJlLAorICAgKiBzaW5jZSB3ZSB3aWxsIG5vdCBjaGFuZ2UgdGhlIGRhdGEgYW55d2F5IGlmIHdlIHJlYWQgemVyb2VzLgorICAgKi8KKworICAvKiBMb2FkIHVwIHdvcmtpbmcgc3RhdGUgKi8KKyAgQklUUkVBRF9MT0FEX1NUQVRFKGNpbmZvLGVudHJvcHktPmJpdHN0YXRlKTsKKworICAvKiBPdXRlciBsb29wIGhhbmRsZXMgZWFjaCBibG9jayBpbiB0aGUgTUNVICovCisKKyAgZm9yIChibGtuID0gMDsgYmxrbiA8IGNpbmZvLT5ibG9ja3NfaW5fTUNVOyBibGtuKyspIHsKKyAgICBibG9jayA9IE1DVV9kYXRhW2Jsa25dOworCisgICAgLyogRW5jb2RlZCBkYXRhIGlzIHNpbXBseSB0aGUgbmV4dCBiaXQgb2YgdGhlIHR3bydzLWNvbXBsZW1lbnQgREMgdmFsdWUgKi8KKyAgICBDSEVDS19CSVRfQlVGRkVSKGJyX3N0YXRlLCAxLCByZXR1cm4gRkFMU0UpOworICAgIGlmIChHRVRfQklUUygxKSkKKyAgICAgICgqYmxvY2spWzBdIHw9IHAxOworICAgIC8qIE5vdGU6IHNpbmNlIHdlIHVzZSB8PSwgcmVwZWF0aW5nIHRoZSBhc3NpZ25tZW50IGxhdGVyIGlzIHNhZmUgKi8KKyAgfQorCisgIC8qIENvbXBsZXRlZCBNQ1UsIHNvIHVwZGF0ZSBzdGF0ZSAqLworICBCSVRSRUFEX1NBVkVfU1RBVEUoY2luZm8sZW50cm9weS0+Yml0c3RhdGUpOworCisgIC8qIEFjY291bnQgZm9yIHJlc3RhcnQgaW50ZXJ2YWwgKG5vLW9wIGlmIG5vdCB1c2luZyByZXN0YXJ0cykgKi8KKyAgZW50cm9weS0+cmVzdGFydHNfdG9fZ28tLTsKKworICByZXR1cm4gVFJVRTsKK30KKworCisvKgorICogTUNVIGRlY29kaW5nIGZvciBBQyBzdWNjZXNzaXZlIGFwcHJveGltYXRpb24gcmVmaW5lbWVudCBzY2FuLgorICovCisKK01FVEhPRERFRihib29sZWFuKQorZGVjb2RlX21jdV9BQ19yZWZpbmUgKGpfZGVjb21wcmVzc19wdHIgY2luZm8sIEpCTE9DS1JPVyAqTUNVX2RhdGEpCit7ICAgCisgIHBodWZmX2VudHJvcHlfcHRyIGVudHJvcHkgPSAocGh1ZmZfZW50cm9weV9wdHIpIGNpbmZvLT5lbnRyb3B5OworICBpbnQgU2UgPSBjaW5mby0+U2U7CisgIGludCBwMSA9IDEgPDwgY2luZm8tPkFsOwkvKiAxIGluIHRoZSBiaXQgcG9zaXRpb24gYmVpbmcgY29kZWQgKi8KKyAgaW50IG0xID0gKC0xKSA8PCBjaW5mby0+QWw7CS8qIC0xIGluIHRoZSBiaXQgcG9zaXRpb24gYmVpbmcgY29kZWQgKi8KKyAgcmVnaXN0ZXIgaW50IHMsIGssIHI7CisgIHVuc2lnbmVkIGludCBFT0JSVU47CisgIEpCTE9DS1JPVyBibG9jazsKKyAgSkNPRUZQVFIgdGhpc2NvZWY7CisgIEJJVFJFQURfU1RBVEVfVkFSUzsKKyAgZF9kZXJpdmVkX3RibCAqIHRibDsKKyAgaW50IG51bV9uZXduejsKKyAgaW50IG5ld256X3Bvc1tEQ1RTSVpFMl07CisKKyAgLyogUHJvY2VzcyByZXN0YXJ0IG1hcmtlciBpZiBuZWVkZWQ7IG1heSBoYXZlIHRvIHN1c3BlbmQgKi8KKyAgaWYgKGNpbmZvLT5yZXN0YXJ0X2ludGVydmFsKSB7CisgICAgaWYgKGVudHJvcHktPnJlc3RhcnRzX3RvX2dvID09IDApCisgICAgICBpZiAoISBwcm9jZXNzX3Jlc3RhcnQoY2luZm8pKQorCXJldHVybiBGQUxTRTsKKyAgfQorCisgIC8qIElmIHdlJ3ZlIHJ1biBvdXQgb2YgZGF0YSwgZG9uJ3QgbW9kaWZ5IHRoZSBNQ1UuCisgICAqLworICBpZiAoISBlbnRyb3B5LT5wdWIuaW5zdWZmaWNpZW50X2RhdGEpIHsKKworICAgIC8qIExvYWQgdXAgd29ya2luZyBzdGF0ZSAqLworICAgIEJJVFJFQURfTE9BRF9TVEFURShjaW5mbyxlbnRyb3B5LT5iaXRzdGF0ZSk7CisgICAgRU9CUlVOID0gZW50cm9weS0+c2F2ZWQuRU9CUlVOOyAvKiBvbmx5IHBhcnQgb2Ygc2F2ZWQgc3RhdGUgd2UgbmVlZCAqLworCisgICAgLyogVGhlcmUgaXMgYWx3YXlzIG9ubHkgb25lIGJsb2NrIHBlciBNQ1UgKi8KKyAgICBibG9jayA9IE1DVV9kYXRhWzBdOworICAgIHRibCA9IGVudHJvcHktPmFjX2Rlcml2ZWRfdGJsOworCisgICAgLyogSWYgd2UgYXJlIGZvcmNlZCB0byBzdXNwZW5kLCB3ZSBtdXN0IHVuZG8gdGhlIGFzc2lnbm1lbnRzIHRvIGFueSBuZXdseQorICAgICAqIG5vbnplcm8gY29lZmZpY2llbnRzIGluIHRoZSBibG9jaywgYmVjYXVzZSBvdGhlcndpc2Ugd2UnZCBnZXQgY29uZnVzZWQKKyAgICAgKiBuZXh0IHRpbWUgYWJvdXQgd2hpY2ggY29lZmZpY2llbnRzIHdlcmUgYWxyZWFkeSBub256ZXJvLgorICAgICAqIEJ1dCB3ZSBuZWVkIG5vdCB1bmRvIGFkZGl0aW9uIG9mIGJpdHMgdG8gYWxyZWFkeS1ub256ZXJvIGNvZWZmaWNpZW50czsKKyAgICAgKiBpbnN0ZWFkLCB3ZSBjYW4gdGVzdCB0aGUgY3VycmVudCBiaXQgdG8gc2VlIGlmIHdlIGFscmVhZHkgZGlkIGl0LgorICAgICAqLworICAgIG51bV9uZXdueiA9IDA7CisKKyAgICAvKiBpbml0aWFsaXplIGNvZWZmaWNpZW50IGxvb3AgY291bnRlciB0byBzdGFydCBvZiBiYW5kICovCisgICAgayA9IGNpbmZvLT5TczsKKworICAgIGlmIChFT0JSVU4gPT0gMCkgeworICAgICAgZm9yICg7IGsgPD0gU2U7IGsrKykgeworCUhVRkZfREVDT0RFKHMsIGJyX3N0YXRlLCB0YmwsIGdvdG8gdW5kb2l0LCBsYWJlbDMpOworCXIgPSBzID4+IDQ7CisJcyAmPSAxNTsKKwlpZiAocykgeworCSAgaWYgKHMgIT0gMSkJCS8qIHNpemUgb2YgbmV3IGNvZWYgc2hvdWxkIGFsd2F5cyBiZSAxICovCisJICAgIFdBUk5NUyhjaW5mbywgSldSTl9IVUZGX0JBRF9DT0RFKTsKKwkgIENIRUNLX0JJVF9CVUZGRVIoYnJfc3RhdGUsIDEsIGdvdG8gdW5kb2l0KTsKKwkgIGlmIChHRVRfQklUUygxKSkKKwkgICAgcyA9IHAxOwkJLyogbmV3bHkgbm9uemVybyBjb2VmIGlzIHBvc2l0aXZlICovCisJICBlbHNlCisJICAgIHMgPSBtMTsJCS8qIG5ld2x5IG5vbnplcm8gY29lZiBpcyBuZWdhdGl2ZSAqLworCX0gZWxzZSB7CisJICBpZiAociAhPSAxNSkgeworCSAgICBFT0JSVU4gPSAxIDw8IHI7CS8qIEVPQnIsIHJ1biBsZW5ndGggaXMgMl5yICsgYXBwZW5kZWQgYml0cyAqLworCSAgICBpZiAocikgeworCSAgICAgIENIRUNLX0JJVF9CVUZGRVIoYnJfc3RhdGUsIHIsIGdvdG8gdW5kb2l0KTsKKwkgICAgICByID0gR0VUX0JJVFMocik7CisJICAgICAgRU9CUlVOICs9IHI7CisJICAgIH0KKwkgICAgYnJlYWs7CQkvKiByZXN0IG9mIGJsb2NrIGlzIGhhbmRsZWQgYnkgRU9CIGxvZ2ljICovCisJICB9CisJICAvKiBub3RlIHMgPSAwIGZvciBwcm9jZXNzaW5nIFpSTCAqLworCX0KKwkvKiBBZHZhbmNlIG92ZXIgYWxyZWFkeS1ub256ZXJvIGNvZWZzIGFuZCByIHN0aWxsLXplcm8gY29lZnMsCisJICogYXBwZW5kaW5nIGNvcnJlY3Rpb24gYml0cyB0byB0aGUgbm9uemVyb2VzLiAgQSBjb3JyZWN0aW9uIGJpdCBpcyAxCisJICogaWYgdGhlIGFic29sdXRlIHZhbHVlIG9mIHRoZSBjb2VmZmljaWVudCBtdXN0IGJlIGluY3JlYXNlZC4KKwkgKi8KKwlkbyB7CisJICB0aGlzY29lZiA9ICpibG9jayArIGpwZWdfbmF0dXJhbF9vcmRlcltrXTsKKwkgIGlmICgqdGhpc2NvZWYgIT0gMCkgeworCSAgICBDSEVDS19CSVRfQlVGRkVSKGJyX3N0YXRlLCAxLCBnb3RvIHVuZG9pdCk7CisJICAgIGlmIChHRVRfQklUUygxKSkgeworCSAgICAgIGlmICgoKnRoaXNjb2VmICYgcDEpID09IDApIHsgLyogZG8gbm90aGluZyBpZiBhbHJlYWR5IHNldCBpdCAqLworCQlpZiAoKnRoaXNjb2VmID49IDApCisJCSAgKnRoaXNjb2VmICs9IHAxOworCQllbHNlCisJCSAgKnRoaXNjb2VmICs9IG0xOworCSAgICAgIH0KKwkgICAgfQorCSAgfSBlbHNlIHsKKwkgICAgaWYgKC0tciA8IDApCisJICAgICAgYnJlYWs7CQkvKiByZWFjaGVkIHRhcmdldCB6ZXJvIGNvZWZmaWNpZW50ICovCisJICB9CisJICBrKys7CisJfSB3aGlsZSAoayA8PSBTZSk7CisJaWYgKHMpIHsKKwkgIGludCBwb3MgPSBqcGVnX25hdHVyYWxfb3JkZXJba107CisJICAvKiBPdXRwdXQgbmV3bHkgbm9uemVybyBjb2VmZmljaWVudCAqLworCSAgKCpibG9jaylbcG9zXSA9IChKQ09FRikgczsKKwkgIC8qIFJlbWVtYmVyIGl0cyBwb3NpdGlvbiBpbiBjYXNlIHdlIGhhdmUgdG8gc3VzcGVuZCAqLworCSAgbmV3bnpfcG9zW251bV9uZXdueisrXSA9IHBvczsKKwl9CisgICAgICB9CisgICAgfQorCisgICAgaWYgKEVPQlJVTiA+IDApIHsKKyAgICAgIC8qIFNjYW4gYW55IHJlbWFpbmluZyBjb2VmZmljaWVudCBwb3NpdGlvbnMgYWZ0ZXIgdGhlIGVuZC1vZi1iYW5kCisgICAgICAgKiAodGhlIGxhc3QgbmV3bHkgbm9uemVybyBjb2VmZmljaWVudCwgaWYgYW55KS4gIEFwcGVuZCBhIGNvcnJlY3Rpb24KKyAgICAgICAqIGJpdCB0byBlYWNoIGFscmVhZHktbm9uemVybyBjb2VmZmljaWVudC4gIEEgY29ycmVjdGlvbiBiaXQgaXMgMQorICAgICAgICogaWYgdGhlIGFic29sdXRlIHZhbHVlIG9mIHRoZSBjb2VmZmljaWVudCBtdXN0IGJlIGluY3JlYXNlZC4KKyAgICAgICAqLworICAgICAgZm9yICg7IGsgPD0gU2U7IGsrKykgeworCXRoaXNjb2VmID0gKmJsb2NrICsganBlZ19uYXR1cmFsX29yZGVyW2tdOworCWlmICgqdGhpc2NvZWYgIT0gMCkgeworCSAgQ0hFQ0tfQklUX0JVRkZFUihicl9zdGF0ZSwgMSwgZ290byB1bmRvaXQpOworCSAgaWYgKEdFVF9CSVRTKDEpKSB7CisJICAgIGlmICgoKnRoaXNjb2VmICYgcDEpID09IDApIHsgLyogZG8gbm90aGluZyBpZiBhbHJlYWR5IGNoYW5nZWQgaXQgKi8KKwkgICAgICBpZiAoKnRoaXNjb2VmID49IDApCisJCSp0aGlzY29lZiArPSBwMTsKKwkgICAgICBlbHNlCisJCSp0aGlzY29lZiArPSBtMTsKKwkgICAgfQorCSAgfQorCX0KKyAgICAgIH0KKyAgICAgIC8qIENvdW50IG9uZSBibG9jayBjb21wbGV0ZWQgaW4gRU9CIHJ1biAqLworICAgICAgRU9CUlVOLS07CisgICAgfQorCisgICAgLyogQ29tcGxldGVkIE1DVSwgc28gdXBkYXRlIHN0YXRlICovCisgICAgQklUUkVBRF9TQVZFX1NUQVRFKGNpbmZvLGVudHJvcHktPmJpdHN0YXRlKTsKKyAgICBlbnRyb3B5LT5zYXZlZC5FT0JSVU4gPSBFT0JSVU47IC8qIG9ubHkgcGFydCBvZiBzYXZlZCBzdGF0ZSB3ZSBuZWVkICovCisgIH0KKworICAvKiBBY2NvdW50IGZvciByZXN0YXJ0IGludGVydmFsIChuby1vcCBpZiBub3QgdXNpbmcgcmVzdGFydHMpICovCisgIGVudHJvcHktPnJlc3RhcnRzX3RvX2dvLS07CisKKyAgcmV0dXJuIFRSVUU7CisKK3VuZG9pdDoKKyAgLyogUmUtemVybyBhbnkgb3V0cHV0IGNvZWZmaWNpZW50cyB0aGF0IHdlIG1hZGUgbmV3bHkgbm9uemVybyAqLworICB3aGlsZSAobnVtX25ld256ID4gMCkKKyAgICAoKmJsb2NrKVtuZXduel9wb3NbLS1udW1fbmV3bnpdXSA9IDA7CisKKyAgcmV0dXJuIEZBTFNFOworfQorCisKKy8qCisgKiBNb2R1bGUgaW5pdGlhbGl6YXRpb24gcm91dGluZSBmb3IgcHJvZ3Jlc3NpdmUgSHVmZm1hbiBlbnRyb3B5IGRlY29kaW5nLgorICovCisKK0dMT0JBTCh2b2lkKQoramluaXRfcGh1ZmZfZGVjb2RlciAoal9kZWNvbXByZXNzX3B0ciBjaW5mbykKK3sKKyAgcGh1ZmZfZW50cm9weV9wdHIgZW50cm9weTsKKyAgaW50ICpjb2VmX2JpdF9wdHI7CisgIGludCBjaSwgaTsKKworICBlbnRyb3B5ID0gKHBodWZmX2VudHJvcHlfcHRyKQorICAgICgqY2luZm8tPm1lbS0+YWxsb2Nfc21hbGwpICgoal9jb21tb25fcHRyKSBjaW5mbywgSlBPT0xfSU1BR0UsCisJCQkJU0laRU9GKHBodWZmX2VudHJvcHlfZGVjb2RlcikpOworICBjaW5mby0+ZW50cm9weSA9IChzdHJ1Y3QganBlZ19lbnRyb3B5X2RlY29kZXIgKikgZW50cm9weTsKKyAgZW50cm9weS0+cHViLnN0YXJ0X3Bhc3MgPSBzdGFydF9wYXNzX3BodWZmX2RlY29kZXI7CisKKyAgLyogTWFyayBkZXJpdmVkIHRhYmxlcyB1bmFsbG9jYXRlZCAqLworICBmb3IgKGkgPSAwOyBpIDwgTlVNX0hVRkZfVEJMUzsgaSsrKSB7CisgICAgZW50cm9weS0+ZGVyaXZlZF90YmxzW2ldID0gTlVMTDsKKyAgfQorCisgIC8qIENyZWF0ZSBwcm9ncmVzc2lvbiBzdGF0dXMgdGFibGUgKi8KKyAgY2luZm8tPmNvZWZfYml0cyA9IChpbnQgKCopW0RDVFNJWkUyXSkKKyAgICAoKmNpbmZvLT5tZW0tPmFsbG9jX3NtYWxsKSAoKGpfY29tbW9uX3B0cikgY2luZm8sIEpQT09MX0lNQUdFLAorCQkJCWNpbmZvLT5udW1fY29tcG9uZW50cypEQ1RTSVpFMipTSVpFT0YoaW50KSk7CisgIGNvZWZfYml0X3B0ciA9ICYgY2luZm8tPmNvZWZfYml0c1swXVswXTsKKyAgZm9yIChjaSA9IDA7IGNpIDwgY2luZm8tPm51bV9jb21wb25lbnRzOyBjaSsrKSAKKyAgICBmb3IgKGkgPSAwOyBpIDwgRENUU0laRTI7IGkrKykKKyAgICAgICpjb2VmX2JpdF9wdHIrKyA9IC0xOworfQorCisjZW5kaWYgLyogRF9QUk9HUkVTU0lWRV9TVVBQT1JURUQgKi8KZGlmZiAtLWdpdCBhL2pkc2FtcGxlLmMgYi9qZHNhbXBsZS5jCmluZGV4IDdiYzg4ODUuLjE4NjRkZDYgMTAwNjQ0Ci0tLSBhL2pkc2FtcGxlLmMKKysrIGIvamRzYW1wbGUuYwpAQCAtMiwxNCArMiwxNSBAQAogICogamRzYW1wbGUuYwogICoKICAqIENvcHlyaWdodCAoQykgMTk5MS0xOTk2LCBUaG9tYXMgRy4gTGFuZS4KLSAqIE1vZGlmaWVkIDIwMDItMjAwOCBieSBHdWlkbyBWb2xsYmVkaW5nLgorICogQ29weXJpZ2h0IDIwMDkgUGllcnJlIE9zc21hbiA8b3NzbWFuQGNlbmRpby5zZT4gZm9yIENlbmRpbyBBQgorICogQ29weXJpZ2h0IChDKSAyMDEwLCBELiBSLiBDb21tYW5kZXIuCiAgKiBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgSW5kZXBlbmRlbnQgSlBFRyBHcm91cCdzIHNvZnR3YXJlLgogICogRm9yIGNvbmRpdGlvbnMgb2YgZGlzdHJpYnV0aW9uIGFuZCB1c2UsIHNlZSB0aGUgYWNjb21wYW55aW5nIFJFQURNRSBmaWxlLgogICoKICAqIFRoaXMgZmlsZSBjb250YWlucyB1cHNhbXBsaW5nIHJvdXRpbmVzLgogICoKICAqIFVwc2FtcGxpbmcgaW5wdXQgZGF0YSBpcyBjb3VudGVkIGluICJyb3cgZ3JvdXBzIi4gIEEgcm93IGdyb3VwCi0gKiBpcyBkZWZpbmVkIHRvIGJlICh2X3NhbXBfZmFjdG9yICogRENUX3Zfc2NhbGVkX3NpemUgLyBtaW5fRENUX3Zfc2NhbGVkX3NpemUpCisgKiBpcyBkZWZpbmVkIHRvIGJlICh2X3NhbXBfZmFjdG9yICogRENUX3NjYWxlZF9zaXplIC8gbWluX0RDVF9zY2FsZWRfc2l6ZSkKICAqIHNhbXBsZSByb3dzIG9mIGVhY2ggY29tcG9uZW50LiAgVXBzYW1wbGluZyB3aWxsIG5vcm1hbGx5IHByb2R1Y2UKICAqIG1heF92X3NhbXBfZmFjdG9yIHBpeGVsIHJvd3MgZnJvbSBlYWNoIHJvdyBncm91cCAoYnV0IHRoaXMgY291bGQgdmFyeQogICogaWYgdGhlIHVwc2FtcGxlciBpcyBhcHBseWluZyBhIHNjYWxlIGZhY3RvciBvZiBpdHMgb3duKS4KQEAgLTIyLDYgKzIzLDggQEAKICNkZWZpbmUgSlBFR19JTlRFUk5BTFMKICNpbmNsdWRlICJqaW5jbHVkZS5oIgogI2luY2x1ZGUgImpwZWdsaWIuaCIKKyNpbmNsdWRlICJqc2ltZC5oIgorI2luY2x1ZGUgImpwZWdjb21wLmgiCiAKIAogLyogUG9pbnRlciB0byByb3V0aW5lIHRvIHVwc2FtcGxlIGEgc2luZ2xlIGNvbXBvbmVudCAqLwpAQCAtMjM4LDExICsyNDEsMTEgQEAKICAgcmVnaXN0ZXIgSlNBTVBST1cgaW5wdHIsIG91dHB0cjsKICAgcmVnaXN0ZXIgSlNBTVBMRSBpbnZhbHVlOwogICBKU0FNUFJPVyBvdXRlbmQ7Ci0gIGludCBvdXRyb3c7CisgIGludCBpbnJvdzsKIAotICBmb3IgKG91dHJvdyA9IDA7IG91dHJvdyA8IGNpbmZvLT5tYXhfdl9zYW1wX2ZhY3Rvcjsgb3V0cm93KyspIHsKLSAgICBpbnB0ciA9IGlucHV0X2RhdGFbb3V0cm93XTsKLSAgICBvdXRwdHIgPSBvdXRwdXRfZGF0YVtvdXRyb3ddOworICBmb3IgKGlucm93ID0gMDsgaW5yb3cgPCBjaW5mby0+bWF4X3Zfc2FtcF9mYWN0b3I7IGlucm93KyspIHsKKyAgICBpbnB0ciA9IGlucHV0X2RhdGFbaW5yb3ddOworICAgIG91dHB0ciA9IG91dHB1dF9kYXRhW2lucm93XTsKICAgICBvdXRlbmQgPSBvdXRwdHIgKyBjaW5mby0+b3V0cHV0X3dpZHRoOwogICAgIHdoaWxlIChvdXRwdHIgPCBvdXRlbmQpIHsKICAgICAgIGludmFsdWUgPSAqaW5wdHIrKzsJLyogZG9uJ3QgbmVlZCBHRVRKU0FNUExFKCkgaGVyZSAqLwpAQCAtMjg3LDYgKzI5MCwxMTIgQEAKIAogCiAvKgorICogRmFuY3kgcHJvY2Vzc2luZyBmb3IgdGhlIGNvbW1vbiBjYXNlIG9mIDI6MSBob3Jpem9udGFsIGFuZCAxOjEgdmVydGljYWwuCisgKgorICogVGhlIHVwc2FtcGxpbmcgYWxnb3JpdGhtIGlzIGxpbmVhciBpbnRlcnBvbGF0aW9uIGJldHdlZW4gcGl4ZWwgY2VudGVycywKKyAqIGFsc28ga25vd24gYXMgYSAidHJpYW5nbGUgZmlsdGVyIi4gIFRoaXMgaXMgYSBnb29kIGNvbXByb21pc2UgYmV0d2VlbgorICogc3BlZWQgYW5kIHZpc3VhbCBxdWFsaXR5LiAgVGhlIGNlbnRlcnMgb2YgdGhlIG91dHB1dCBwaXhlbHMgYXJlIDEvNCBhbmQgMy80CisgKiBvZiB0aGUgd2F5IGJldHdlZW4gaW5wdXQgcGl4ZWwgY2VudGVycy4KKyAqCisgKiBBIG5vdGUgYWJvdXQgdGhlICJiaWFzIiBjYWxjdWxhdGlvbnM6IHdoZW4gcm91bmRpbmcgZnJhY3Rpb25hbCB2YWx1ZXMgdG8KKyAqIGludGVnZXIsIHdlIGRvIG5vdCB3YW50IHRvIGFsd2F5cyByb3VuZCAwLjUgdXAgdG8gdGhlIG5leHQgaW50ZWdlci4KKyAqIElmIHdlIGRpZCB0aGF0LCB3ZSdkIGludHJvZHVjZSBhIG5vdGljZWFibGUgYmlhcyB0b3dhcmRzIGxhcmdlciB2YWx1ZXMuCisgKiBJbnN0ZWFkLCB0aGlzIGNvZGUgaXMgYXJyYW5nZWQgc28gdGhhdCAwLjUgd2lsbCBiZSByb3VuZGVkIHVwIG9yIGRvd24gYXQKKyAqIGFsdGVybmF0ZSBwaXhlbCBsb2NhdGlvbnMgKGEgc2ltcGxlIG9yZGVyZWQgZGl0aGVyIHBhdHRlcm4pLgorICovCisKK01FVEhPRERFRih2b2lkKQoraDJ2MV9mYW5jeV91cHNhbXBsZSAoal9kZWNvbXByZXNzX3B0ciBjaW5mbywganBlZ19jb21wb25lbnRfaW5mbyAqIGNvbXBwdHIsCisJCSAgICAgSlNBTVBBUlJBWSBpbnB1dF9kYXRhLCBKU0FNUEFSUkFZICogb3V0cHV0X2RhdGFfcHRyKQoreworICBKU0FNUEFSUkFZIG91dHB1dF9kYXRhID0gKm91dHB1dF9kYXRhX3B0cjsKKyAgcmVnaXN0ZXIgSlNBTVBST1cgaW5wdHIsIG91dHB0cjsKKyAgcmVnaXN0ZXIgaW50IGludmFsdWU7CisgIHJlZ2lzdGVyIEpESU1FTlNJT04gY29sY3RyOworICBpbnQgaW5yb3c7CisKKyAgZm9yIChpbnJvdyA9IDA7IGlucm93IDwgY2luZm8tPm1heF92X3NhbXBfZmFjdG9yOyBpbnJvdysrKSB7CisgICAgaW5wdHIgPSBpbnB1dF9kYXRhW2lucm93XTsKKyAgICBvdXRwdHIgPSBvdXRwdXRfZGF0YVtpbnJvd107CisgICAgLyogU3BlY2lhbCBjYXNlIGZvciBmaXJzdCBjb2x1bW4gKi8KKyAgICBpbnZhbHVlID0gR0VUSlNBTVBMRSgqaW5wdHIrKyk7CisgICAgKm91dHB0cisrID0gKEpTQU1QTEUpIGludmFsdWU7CisgICAgKm91dHB0cisrID0gKEpTQU1QTEUpICgoaW52YWx1ZSAqIDMgKyBHRVRKU0FNUExFKCppbnB0cikgKyAyKSA+PiAyKTsKKworICAgIGZvciAoY29sY3RyID0gY29tcHB0ci0+ZG93bnNhbXBsZWRfd2lkdGggLSAyOyBjb2xjdHIgPiAwOyBjb2xjdHItLSkgeworICAgICAgLyogR2VuZXJhbCBjYXNlOiAzLzQgKiBuZWFyZXIgcGl4ZWwgKyAxLzQgKiBmdXJ0aGVyIHBpeGVsICovCisgICAgICBpbnZhbHVlID0gR0VUSlNBTVBMRSgqaW5wdHIrKykgKiAzOworICAgICAgKm91dHB0cisrID0gKEpTQU1QTEUpICgoaW52YWx1ZSArIEdFVEpTQU1QTEUoaW5wdHJbLTJdKSArIDEpID4+IDIpOworICAgICAgKm91dHB0cisrID0gKEpTQU1QTEUpICgoaW52YWx1ZSArIEdFVEpTQU1QTEUoKmlucHRyKSArIDIpID4+IDIpOworICAgIH0KKworICAgIC8qIFNwZWNpYWwgY2FzZSBmb3IgbGFzdCBjb2x1bW4gKi8KKyAgICBpbnZhbHVlID0gR0VUSlNBTVBMRSgqaW5wdHIpOworICAgICpvdXRwdHIrKyA9IChKU0FNUExFKSAoKGludmFsdWUgKiAzICsgR0VUSlNBTVBMRShpbnB0clstMV0pICsgMSkgPj4gMik7CisgICAgKm91dHB0cisrID0gKEpTQU1QTEUpIGludmFsdWU7CisgIH0KK30KKworCisvKgorICogRmFuY3kgcHJvY2Vzc2luZyBmb3IgdGhlIGNvbW1vbiBjYXNlIG9mIDI6MSBob3Jpem9udGFsIGFuZCAyOjEgdmVydGljYWwuCisgKiBBZ2FpbiBhIHRyaWFuZ2xlIGZpbHRlcjsgc2VlIGNvbW1lbnRzIGZvciBoMnYxIGNhc2UsIGFib3ZlLgorICoKKyAqIEl0IGlzIE9LIGZvciB1cyB0byByZWZlcmVuY2UgdGhlIGFkamFjZW50IGlucHV0IHJvd3MgYmVjYXVzZSB3ZSBkZW1hbmRlZAorICogY29udGV4dCBmcm9tIHRoZSBtYWluIGJ1ZmZlciBjb250cm9sbGVyIChzZWUgaW5pdGlhbGl6YXRpb24gY29kZSkuCisgKi8KKworTUVUSE9EREVGKHZvaWQpCitoMnYyX2ZhbmN5X3Vwc2FtcGxlIChqX2RlY29tcHJlc3NfcHRyIGNpbmZvLCBqcGVnX2NvbXBvbmVudF9pbmZvICogY29tcHB0ciwKKwkJICAgICBKU0FNUEFSUkFZIGlucHV0X2RhdGEsIEpTQU1QQVJSQVkgKiBvdXRwdXRfZGF0YV9wdHIpCit7CisgIEpTQU1QQVJSQVkgb3V0cHV0X2RhdGEgPSAqb3V0cHV0X2RhdGFfcHRyOworICByZWdpc3RlciBKU0FNUFJPVyBpbnB0cjAsIGlucHRyMSwgb3V0cHRyOworI2lmIEJJVFNfSU5fSlNBTVBMRSA9PSA4CisgIHJlZ2lzdGVyIGludCB0aGlzY29sc3VtLCBsYXN0Y29sc3VtLCBuZXh0Y29sc3VtOworI2Vsc2UKKyAgcmVnaXN0ZXIgSU5UMzIgdGhpc2NvbHN1bSwgbGFzdGNvbHN1bSwgbmV4dGNvbHN1bTsKKyNlbmRpZgorICByZWdpc3RlciBKRElNRU5TSU9OIGNvbGN0cjsKKyAgaW50IGlucm93LCBvdXRyb3csIHY7CisKKyAgaW5yb3cgPSBvdXRyb3cgPSAwOworICB3aGlsZSAob3V0cm93IDwgY2luZm8tPm1heF92X3NhbXBfZmFjdG9yKSB7CisgICAgZm9yICh2ID0gMDsgdiA8IDI7IHYrKykgeworICAgICAgLyogaW5wdHIwIHBvaW50cyB0byBuZWFyZXN0IGlucHV0IHJvdywgaW5wdHIxIHBvaW50cyB0byBuZXh0IG5lYXJlc3QgKi8KKyAgICAgIGlucHRyMCA9IGlucHV0X2RhdGFbaW5yb3ddOworICAgICAgaWYgKHYgPT0gMCkJCS8qIG5leHQgbmVhcmVzdCBpcyByb3cgYWJvdmUgKi8KKwlpbnB0cjEgPSBpbnB1dF9kYXRhW2lucm93LTFdOworICAgICAgZWxzZQkJCS8qIG5leHQgbmVhcmVzdCBpcyByb3cgYmVsb3cgKi8KKwlpbnB0cjEgPSBpbnB1dF9kYXRhW2lucm93KzFdOworICAgICAgb3V0cHRyID0gb3V0cHV0X2RhdGFbb3V0cm93KytdOworCisgICAgICAvKiBTcGVjaWFsIGNhc2UgZm9yIGZpcnN0IGNvbHVtbiAqLworICAgICAgdGhpc2NvbHN1bSA9IEdFVEpTQU1QTEUoKmlucHRyMCsrKSAqIDMgKyBHRVRKU0FNUExFKCppbnB0cjErKyk7CisgICAgICBuZXh0Y29sc3VtID0gR0VUSlNBTVBMRSgqaW5wdHIwKyspICogMyArIEdFVEpTQU1QTEUoKmlucHRyMSsrKTsKKyAgICAgICpvdXRwdHIrKyA9IChKU0FNUExFKSAoKHRoaXNjb2xzdW0gKiA0ICsgOCkgPj4gNCk7CisgICAgICAqb3V0cHRyKysgPSAoSlNBTVBMRSkgKCh0aGlzY29sc3VtICogMyArIG5leHRjb2xzdW0gKyA3KSA+PiA0KTsKKyAgICAgIGxhc3Rjb2xzdW0gPSB0aGlzY29sc3VtOyB0aGlzY29sc3VtID0gbmV4dGNvbHN1bTsKKworICAgICAgZm9yIChjb2xjdHIgPSBjb21wcHRyLT5kb3duc2FtcGxlZF93aWR0aCAtIDI7IGNvbGN0ciA+IDA7IGNvbGN0ci0tKSB7CisJLyogR2VuZXJhbCBjYXNlOiAzLzQgKiBuZWFyZXIgcGl4ZWwgKyAxLzQgKiBmdXJ0aGVyIHBpeGVsIGluIGVhY2ggKi8KKwkvKiBkaW1lbnNpb24sIHRodXMgOS8xNiwgMy8xNiwgMy8xNiwgMS8xNiBvdmVyYWxsICovCisJbmV4dGNvbHN1bSA9IEdFVEpTQU1QTEUoKmlucHRyMCsrKSAqIDMgKyBHRVRKU0FNUExFKCppbnB0cjErKyk7CisJKm91dHB0cisrID0gKEpTQU1QTEUpICgodGhpc2NvbHN1bSAqIDMgKyBsYXN0Y29sc3VtICsgOCkgPj4gNCk7CisJKm91dHB0cisrID0gKEpTQU1QTEUpICgodGhpc2NvbHN1bSAqIDMgKyBuZXh0Y29sc3VtICsgNykgPj4gNCk7CisJbGFzdGNvbHN1bSA9IHRoaXNjb2xzdW07IHRoaXNjb2xzdW0gPSBuZXh0Y29sc3VtOworICAgICAgfQorCisgICAgICAvKiBTcGVjaWFsIGNhc2UgZm9yIGxhc3QgY29sdW1uICovCisgICAgICAqb3V0cHRyKysgPSAoSlNBTVBMRSkgKCh0aGlzY29sc3VtICogMyArIGxhc3Rjb2xzdW0gKyA4KSA+PiA0KTsKKyAgICAgICpvdXRwdHIrKyA9IChKU0FNUExFKSAoKHRoaXNjb2xzdW0gKiA0ICsgNykgPj4gNCk7CisgICAgfQorICAgIGlucm93Kys7CisgIH0KK30KKworCisvKgogICogTW9kdWxlIGluaXRpYWxpemF0aW9uIHJvdXRpbmUgZm9yIHVwc2FtcGxpbmcuCiAgKi8KIApAQCAtMjk2LDcgKzQwNSw3IEBACiAgIG15X3Vwc2FtcGxlX3B0ciB1cHNhbXBsZTsKICAgaW50IGNpOwogICBqcGVnX2NvbXBvbmVudF9pbmZvICogY29tcHB0cjsKLSAgYm9vbGVhbiBuZWVkX2J1ZmZlcjsKKyAgYm9vbGVhbiBuZWVkX2J1ZmZlciwgZG9fZmFuY3k7CiAgIGludCBoX2luX2dyb3VwLCB2X2luX2dyb3VwLCBoX291dF9ncm91cCwgdl9vdXRfZ3JvdXA7CiAKICAgdXBzYW1wbGUgPSAobXlfdXBzYW1wbGVfcHRyKQpAQCAtMzEwLDYgKzQxOSwxMSBAQAogICBpZiAoY2luZm8tPkNDSVI2MDFfc2FtcGxpbmcpCS8qIHRoaXMgaXNuJ3Qgc3VwcG9ydGVkICovCiAgICAgRVJSRVhJVChjaW5mbywgSkVSUl9DQ0lSNjAxX05PVElNUEwpOwogCisgIC8qIGpkbWFpbmN0LmMgZG9lc24ndCBzdXBwb3J0IGNvbnRleHQgcm93cyB3aGVuIG1pbl9EQ1Rfc2NhbGVkX3NpemUgPSAxLAorICAgKiBzbyBkb24ndCBhc2sgZm9yIGl0LgorICAgKi8KKyAgZG9fZmFuY3kgPSBjaW5mby0+ZG9fZmFuY3lfdXBzYW1wbGluZyAmJiBjaW5mby0+X21pbl9EQ1Rfc2NhbGVkX3NpemUgPiAxOworCiAgIC8qIFZlcmlmeSB3ZSBjYW4gaGFuZGxlIHRoZSBzYW1wbGluZyBmYWN0b3JzLCBzZWxlY3QgcGVyLWNvbXBvbmVudCBtZXRob2RzLAogICAgKiBhbmQgY3JlYXRlIHN0b3JhZ2UgYXMgbmVlZGVkLgogICAgKi8KQEAgLTMxOCwxMCArNDMyLDEwIEBACiAgICAgLyogQ29tcHV0ZSBzaXplIG9mIGFuICJpbnB1dCBncm91cCIgYWZ0ZXIgSURDVCBzY2FsaW5nLiAgVGhpcyBtYW55IHNhbXBsZXMKICAgICAgKiBhcmUgdG8gYmUgY29udmVydGVkIHRvIG1heF9oX3NhbXBfZmFjdG9yICogbWF4X3Zfc2FtcF9mYWN0b3IgcGl4ZWxzLgogICAgICAqLwotICAgIGhfaW5fZ3JvdXAgPSAoY29tcHB0ci0+aF9zYW1wX2ZhY3RvciAqIGNvbXBwdHItPkRDVF9oX3NjYWxlZF9zaXplKSAvCi0JCSBjaW5mby0+bWluX0RDVF9oX3NjYWxlZF9zaXplOwotICAgIHZfaW5fZ3JvdXAgPSAoY29tcHB0ci0+dl9zYW1wX2ZhY3RvciAqIGNvbXBwdHItPkRDVF92X3NjYWxlZF9zaXplKSAvCi0JCSBjaW5mby0+bWluX0RDVF92X3NjYWxlZF9zaXplOworICAgIGhfaW5fZ3JvdXAgPSAoY29tcHB0ci0+aF9zYW1wX2ZhY3RvciAqIGNvbXBwdHItPl9EQ1Rfc2NhbGVkX3NpemUpIC8KKwkJIGNpbmZvLT5fbWluX0RDVF9zY2FsZWRfc2l6ZTsKKyAgICB2X2luX2dyb3VwID0gKGNvbXBwdHItPnZfc2FtcF9mYWN0b3IgKiBjb21wcHRyLT5fRENUX3NjYWxlZF9zaXplKSAvCisJCSBjaW5mby0+X21pbl9EQ1Rfc2NhbGVkX3NpemU7CiAgICAgaF9vdXRfZ3JvdXAgPSBjaW5mby0+bWF4X2hfc2FtcF9mYWN0b3I7CiAgICAgdl9vdXRfZ3JvdXAgPSBjaW5mby0+bWF4X3Zfc2FtcF9mYWN0b3I7CiAgICAgdXBzYW1wbGUtPnJvd2dyb3VwX2hlaWdodFtjaV0gPSB2X2luX2dyb3VwOyAvKiBzYXZlIGZvciB1c2UgbGF0ZXIgKi8KQEAgLTMzNiwxMiArNDUwLDMzIEBACiAgICAgICBuZWVkX2J1ZmZlciA9IEZBTFNFOwogICAgIH0gZWxzZSBpZiAoaF9pbl9ncm91cCAqIDIgPT0gaF9vdXRfZ3JvdXAgJiYKIAkgICAgICAgdl9pbl9ncm91cCA9PSB2X291dF9ncm91cCkgewotICAgICAgLyogU3BlY2lhbCBjYXNlIGZvciAyaDF2IHVwc2FtcGxpbmcgKi8KLSAgICAgIHVwc2FtcGxlLT5tZXRob2RzW2NpXSA9IGgydjFfdXBzYW1wbGU7CisgICAgICAvKiBTcGVjaWFsIGNhc2VzIGZvciAyaDF2IHVwc2FtcGxpbmcgKi8KKyAgICAgIGlmIChkb19mYW5jeSAmJiBjb21wcHRyLT5kb3duc2FtcGxlZF93aWR0aCA+IDIpIHsKKwlpZiAoanNpbWRfY2FuX2gydjFfZmFuY3lfdXBzYW1wbGUoKSkKKwkgIHVwc2FtcGxlLT5tZXRob2RzW2NpXSA9IGpzaW1kX2gydjFfZmFuY3lfdXBzYW1wbGU7CisJZWxzZQorCSAgdXBzYW1wbGUtPm1ldGhvZHNbY2ldID0gaDJ2MV9mYW5jeV91cHNhbXBsZTsKKyAgICAgIH0gZWxzZSB7CisJaWYgKGpzaW1kX2Nhbl9oMnYxX3Vwc2FtcGxlKCkpCisJICB1cHNhbXBsZS0+bWV0aG9kc1tjaV0gPSBqc2ltZF9oMnYxX3Vwc2FtcGxlOworCWVsc2UKKwkgIHVwc2FtcGxlLT5tZXRob2RzW2NpXSA9IGgydjFfdXBzYW1wbGU7CisgICAgICB9CiAgICAgfSBlbHNlIGlmIChoX2luX2dyb3VwICogMiA9PSBoX291dF9ncm91cCAmJgogCSAgICAgICB2X2luX2dyb3VwICogMiA9PSB2X291dF9ncm91cCkgewotICAgICAgLyogU3BlY2lhbCBjYXNlIGZvciAyaDJ2IHVwc2FtcGxpbmcgKi8KLSAgICAgIHVwc2FtcGxlLT5tZXRob2RzW2NpXSA9IGgydjJfdXBzYW1wbGU7CisgICAgICAvKiBTcGVjaWFsIGNhc2VzIGZvciAyaDJ2IHVwc2FtcGxpbmcgKi8KKyAgICAgIGlmIChkb19mYW5jeSAmJiBjb21wcHRyLT5kb3duc2FtcGxlZF93aWR0aCA+IDIpIHsKKwlpZiAoanNpbWRfY2FuX2gydjJfZmFuY3lfdXBzYW1wbGUoKSkKKwkgIHVwc2FtcGxlLT5tZXRob2RzW2NpXSA9IGpzaW1kX2gydjJfZmFuY3lfdXBzYW1wbGU7CisJZWxzZQorCSAgdXBzYW1wbGUtPm1ldGhvZHNbY2ldID0gaDJ2Ml9mYW5jeV91cHNhbXBsZTsKKwl1cHNhbXBsZS0+cHViLm5lZWRfY29udGV4dF9yb3dzID0gVFJVRTsKKyAgICAgIH0gZWxzZSB7CisJaWYgKGpzaW1kX2Nhbl9oMnYyX3Vwc2FtcGxlKCkpCisJICB1cHNhbXBsZS0+bWV0aG9kc1tjaV0gPSBqc2ltZF9oMnYyX3Vwc2FtcGxlOworCWVsc2UKKwkgIHVwc2FtcGxlLT5tZXRob2RzW2NpXSA9IGgydjJfdXBzYW1wbGU7CisgICAgICB9CiAgICAgfSBlbHNlIGlmICgoaF9vdXRfZ3JvdXAgJSBoX2luX2dyb3VwKSA9PSAwICYmCiAJICAgICAgICh2X291dF9ncm91cCAlIHZfaW5fZ3JvdXApID09IDApIHsKICAgICAgIC8qIEdlbmVyaWMgaW50ZWdyYWwtZmFjdG9ycyB1cHNhbXBsaW5nIG1ldGhvZCAqLwpkaWZmIC0tZ2l0IGEvamR0cmFucy5jIGIvamR0cmFucy5jCmluZGV4IDIyZGQ0N2YuLmYwY2QwYWUgMTAwNjQ0Ci0tLSBhL2pkdHJhbnMuYworKysgYi9qZHRyYW5zLmMKQEAgLTIsNyArMiw2IEBACiAgKiBqZHRyYW5zLmMKICAqCiAgKiBDb3B5cmlnaHQgKEMpIDE5OTUtMTk5NywgVGhvbWFzIEcuIExhbmUuCi0gKiBNb2RpZmllZCAyMDAwLTIwMDkgYnkgR3VpZG8gVm9sbGJlZGluZy4KICAqIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBJbmRlcGVuZGVudCBKUEVHIEdyb3VwJ3Mgc29mdHdhcmUuCiAgKiBGb3IgY29uZGl0aW9ucyBvZiBkaXN0cmlidXRpb24gYW5kIHVzZSwgc2VlIHRoZSBhY2NvbXBhbnlpbmcgUkVBRE1FIGZpbGUuCiAgKgpAQCAtMTAwLDE0ICs5OSwyNyBAQAogICAvKiBUaGlzIGlzIGVmZmVjdGl2ZWx5IGEgYnVmZmVyZWQtaW1hZ2Ugb3BlcmF0aW9uLiAqLwogICBjaW5mby0+YnVmZmVyZWRfaW1hZ2UgPSBUUlVFOwogCisjaWYgSlBFR19MSUJfVkVSU0lPTiA+PSA4MAogICAvKiBDb21wdXRlIG91dHB1dCBpbWFnZSBkaW1lbnNpb25zIGFuZCByZWxhdGVkIHZhbHVlcy4gKi8KICAganBlZ19jb3JlX291dHB1dF9kaW1lbnNpb25zKGNpbmZvKTsKKyNlbmRpZgogCiAgIC8qIEVudHJvcHkgZGVjb2Rpbmc6IGVpdGhlciBIdWZmbWFuIG9yIGFyaXRobWV0aWMgY29kaW5nLiAqLwotICBpZiAoY2luZm8tPmFyaXRoX2NvZGUpCisgIGlmIChjaW5mby0+YXJpdGhfY29kZSkgeworI2lmZGVmIERfQVJJVEhfQ09ESU5HX1NVUFBPUlRFRAogICAgIGppbml0X2FyaXRoX2RlY29kZXIoY2luZm8pOwotICBlbHNlIHsKLSAgICBqaW5pdF9odWZmX2RlY29kZXIoY2luZm8pOworI2Vsc2UKKyAgICBFUlJFWElUKGNpbmZvLCBKRVJSX0FSSVRIX05PVElNUEwpOworI2VuZGlmCisgIH0gZWxzZSB7CisgICAgaWYgKGNpbmZvLT5wcm9ncmVzc2l2ZV9tb2RlKSB7CisjaWZkZWYgRF9QUk9HUkVTU0lWRV9TVVBQT1JURUQKKyAgICAgIGppbml0X3BodWZmX2RlY29kZXIoY2luZm8pOworI2Vsc2UKKyAgICAgIEVSUkVYSVQoY2luZm8sIEpFUlJfTk9UX0NPTVBJTEVEKTsKKyNlbmRpZgorICAgIH0gZWxzZQorICAgICAgamluaXRfaHVmZl9kZWNvZGVyKGNpbmZvKTsKICAgfQogCiAgIC8qIEFsd2F5cyBnZXQgYSBmdWxsLWltYWdlIGNvZWZmaWNpZW50IGJ1ZmZlci4gKi8KZGlmZiAtLWdpdCBhL2plcnJvci5oIGIvamVycm9yLmgKaW5kZXggMWNmYjJiMS4uODhmMDE5ZSAxMDA2NDQKLS0tIGEvamVycm9yLmgKKysrIGIvamVycm9yLmgKQEAgLTQwLDE1ICs0MCwxNSBAQAogSk1FU1NBR0UoSk1TR19OT01FU1NBR0UsICJCb2d1cyBtZXNzYWdlIGNvZGUgJWQiKSAvKiBNdXN0IGJlIGZpcnN0IGVudHJ5ISAqLwogCiAvKiBGb3IgbWFpbnRlbmFuY2UgY29udmVuaWVuY2UsIGxpc3QgaXMgYWxwaGFiZXRpY2FsIGJ5IG1lc3NhZ2UgY29kZSBuYW1lICovCitKTUVTU0FHRShKRVJSX0FSSVRIX05PVElNUEwsCisJICJTb3JyeSwgYXJpdGhtZXRpYyBjb2RpbmcgaXMgbm90IGltcGxlbWVudGVkIikKIEpNRVNTQUdFKEpFUlJfQkFEX0FMSUdOX1RZUEUsICJBTElHTl9UWVBFIGlzIHdyb25nLCBwbGVhc2UgZml4IikKIEpNRVNTQUdFKEpFUlJfQkFEX0FMTE9DX0NIVU5LLCAiTUFYX0FMTE9DX0NIVU5LIGlzIHdyb25nLCBwbGVhc2UgZml4IikKIEpNRVNTQUdFKEpFUlJfQkFEX0JVRkZFUl9NT0RFLCAiQm9ndXMgYnVmZmVyIGNvbnRyb2wgbW9kZSIpCiBKTUVTU0FHRShKRVJSX0JBRF9DT01QT05FTlRfSUQsICJJbnZhbGlkIGNvbXBvbmVudCBJRCAlZCBpbiBTT1MiKQogSk1FU1NBR0UoSkVSUl9CQURfQ1JPUF9TUEVDLCAiSW52YWxpZCBjcm9wIHJlcXVlc3QiKQogSk1FU1NBR0UoSkVSUl9CQURfRENUX0NPRUYsICJEQ1QgY29lZmZpY2llbnQgb3V0IG9mIHJhbmdlIikKLUpNRVNTQUdFKEpFUlJfQkFEX0RDVFNJWkUsICJEQ1Qgc2NhbGVkIGJsb2NrIHNpemUgJWR4JWQgbm90IHN1cHBvcnRlZCIpCi1KTUVTU0FHRShKRVJSX0JBRF9EUk9QX1NBTVBMSU5HLAotCSAiQ29tcG9uZW50IGluZGV4ICVkOiBtaXNtYXRjaGluZyBzYW1wbGluZyByYXRpbyAlZDolZCwgJWQ6JWQsICVjIikKK0pNRVNTQUdFKEpFUlJfQkFEX0RDVFNJWkUsICJJRENUIG91dHB1dCBibG9jayBzaXplICVkIG5vdCBzdXBwb3J0ZWQiKQogSk1FU1NBR0UoSkVSUl9CQURfSFVGRl9UQUJMRSwgIkJvZ3VzIEh1ZmZtYW4gdGFibGUgZGVmaW5pdGlvbiIpCiBKTUVTU0FHRShKRVJSX0JBRF9JTl9DT0xPUlNQQUNFLCAiQm9ndXMgaW5wdXQgY29sb3JzcGFjZSIpCiBKTUVTU0FHRShKRVJSX0JBRF9KX0NPTE9SU1BBQ0UsICJCb2d1cyBKUEVHIGNvbG9yc3BhY2UiKQpAQCAtMjMxLDE1ICsyMzEsNiBAQAogICAgKGNpbmZvKS0+ZXJyLT5tc2dfcGFybS5pWzJdID0gKHAzKSwgXAogICAgKGNpbmZvKS0+ZXJyLT5tc2dfcGFybS5pWzNdID0gKHA0KSwgXAogICAgKCooY2luZm8pLT5lcnItPmVycm9yX2V4aXQpICgoal9jb21tb25fcHRyKSAoY2luZm8pKSkKLSNkZWZpbmUgRVJSRVhJVDYoY2luZm8sY29kZSxwMSxwMixwMyxwNCxwNSxwNikgIFwKLSAgKChjaW5mbyktPmVyci0+bXNnX2NvZGUgPSAoY29kZSksIFwKLSAgIChjaW5mbyktPmVyci0+bXNnX3Bhcm0uaVswXSA9IChwMSksIFwKLSAgIChjaW5mbyktPmVyci0+bXNnX3Bhcm0uaVsxXSA9IChwMiksIFwKLSAgIChjaW5mbyktPmVyci0+bXNnX3Bhcm0uaVsyXSA9IChwMyksIFwKLSAgIChjaW5mbyktPmVyci0+bXNnX3Bhcm0uaVszXSA9IChwNCksIFwKLSAgIChjaW5mbyktPmVyci0+bXNnX3Bhcm0uaVs0XSA9IChwNSksIFwKLSAgIChjaW5mbyktPmVyci0+bXNnX3Bhcm0uaVs1XSA9IChwNiksIFwKLSAgICgqKGNpbmZvKS0+ZXJyLT5lcnJvcl9leGl0KSAoKGpfY29tbW9uX3B0cikgKGNpbmZvKSkpCiAjZGVmaW5lIEVSUkVYSVRTKGNpbmZvLGNvZGUsc3RyKSAgXAogICAoKGNpbmZvKS0+ZXJyLT5tc2dfY29kZSA9IChjb2RlKSwgXAogICAgc3RybmNweSgoY2luZm8pLT5lcnItPm1zZ19wYXJtLnMsIChzdHIpLCBKTVNHX1NUUl9QQVJNX01BWCksIFwKZGlmZiAtLWdpdCBhL2pmZGN0Zmx0LmMgYi9qZmRjdGZsdC5jCmluZGV4IDc0ZDBkODYuLjc5ZDdhMDAgMTAwNjQ0Ci0tLSBhL2pmZGN0Zmx0LmMKKysrIGIvamZkY3RmbHQuYwpAQCAtMiw3ICsyLDYgQEAKICAqIGpmZGN0Zmx0LmMKICAqCiAgKiBDb3B5cmlnaHQgKEMpIDE5OTQtMTk5NiwgVGhvbWFzIEcuIExhbmUuCi0gKiBNb2RpZmllZCAyMDAzLTIwMDkgYnkgR3VpZG8gVm9sbGJlZGluZy4KICAqIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBJbmRlcGVuZGVudCBKUEVHIEdyb3VwJ3Mgc29mdHdhcmUuCiAgKiBGb3IgY29uZGl0aW9ucyBvZiBkaXN0cmlidXRpb24gYW5kIHVzZSwgc2VlIHRoZSBhY2NvbXBhbnlpbmcgUkVBRE1FIGZpbGUuCiAgKgpAQCAtNTcsNDYgKzU2LDQxIEBACiAgKi8KIAogR0xPQkFMKHZvaWQpCi1qcGVnX2ZkY3RfZmxvYXQgKEZBU1RfRkxPQVQgKiBkYXRhLCBKU0FNUEFSUkFZIHNhbXBsZV9kYXRhLCBKRElNRU5TSU9OIHN0YXJ0X2NvbCkKK2pwZWdfZmRjdF9mbG9hdCAoRkFTVF9GTE9BVCAqIGRhdGEpCiB7CiAgIEZBU1RfRkxPQVQgdG1wMCwgdG1wMSwgdG1wMiwgdG1wMywgdG1wNCwgdG1wNSwgdG1wNiwgdG1wNzsKICAgRkFTVF9GTE9BVCB0bXAxMCwgdG1wMTEsIHRtcDEyLCB0bXAxMzsKICAgRkFTVF9GTE9BVCB6MSwgejIsIHozLCB6NCwgejUsIHoxMSwgejEzOwogICBGQVNUX0ZMT0FUICpkYXRhcHRyOwotICBKU0FNUFJPVyBlbGVtcHRyOwogICBpbnQgY3RyOwogCiAgIC8qIFBhc3MgMTogcHJvY2VzcyByb3dzLiAqLwogCiAgIGRhdGFwdHIgPSBkYXRhOwotICBmb3IgKGN0ciA9IDA7IGN0ciA8IERDVFNJWkU7IGN0cisrKSB7Ci0gICAgZWxlbXB0ciA9IHNhbXBsZV9kYXRhW2N0cl0gKyBzdGFydF9jb2w7Ci0KLSAgICAvKiBMb2FkIGRhdGEgaW50byB3b3Jrc3BhY2UgKi8KLSAgICB0bXAwID0gKEZBU1RfRkxPQVQpIChHRVRKU0FNUExFKGVsZW1wdHJbMF0pICsgR0VUSlNBTVBMRShlbGVtcHRyWzddKSk7Ci0gICAgdG1wNyA9IChGQVNUX0ZMT0FUKSAoR0VUSlNBTVBMRShlbGVtcHRyWzBdKSAtIEdFVEpTQU1QTEUoZWxlbXB0cls3XSkpOwotICAgIHRtcDEgPSAoRkFTVF9GTE9BVCkgKEdFVEpTQU1QTEUoZWxlbXB0clsxXSkgKyBHRVRKU0FNUExFKGVsZW1wdHJbNl0pKTsKLSAgICB0bXA2ID0gKEZBU1RfRkxPQVQpIChHRVRKU0FNUExFKGVsZW1wdHJbMV0pIC0gR0VUSlNBTVBMRShlbGVtcHRyWzZdKSk7Ci0gICAgdG1wMiA9IChGQVNUX0ZMT0FUKSAoR0VUSlNBTVBMRShlbGVtcHRyWzJdKSArIEdFVEpTQU1QTEUoZWxlbXB0cls1XSkpOwotICAgIHRtcDUgPSAoRkFTVF9GTE9BVCkgKEdFVEpTQU1QTEUoZWxlbXB0clsyXSkgLSBHRVRKU0FNUExFKGVsZW1wdHJbNV0pKTsKLSAgICB0bXAzID0gKEZBU1RfRkxPQVQpIChHRVRKU0FNUExFKGVsZW1wdHJbM10pICsgR0VUSlNBTVBMRShlbGVtcHRyWzRdKSk7Ci0gICAgdG1wNCA9IChGQVNUX0ZMT0FUKSAoR0VUSlNBTVBMRShlbGVtcHRyWzNdKSAtIEdFVEpTQU1QTEUoZWxlbXB0cls0XSkpOwotCisgIGZvciAoY3RyID0gRENUU0laRS0xOyBjdHIgPj0gMDsgY3RyLS0pIHsKKyAgICB0bXAwID0gZGF0YXB0clswXSArIGRhdGFwdHJbN107CisgICAgdG1wNyA9IGRhdGFwdHJbMF0gLSBkYXRhcHRyWzddOworICAgIHRtcDEgPSBkYXRhcHRyWzFdICsgZGF0YXB0cls2XTsKKyAgICB0bXA2ID0gZGF0YXB0clsxXSAtIGRhdGFwdHJbNl07CisgICAgdG1wMiA9IGRhdGFwdHJbMl0gKyBkYXRhcHRyWzVdOworICAgIHRtcDUgPSBkYXRhcHRyWzJdIC0gZGF0YXB0cls1XTsKKyAgICB0bXAzID0gZGF0YXB0clszXSArIGRhdGFwdHJbNF07CisgICAgdG1wNCA9IGRhdGFwdHJbM10gLSBkYXRhcHRyWzRdOworICAgIAogICAgIC8qIEV2ZW4gcGFydCAqLwotCisgICAgCiAgICAgdG1wMTAgPSB0bXAwICsgdG1wMzsJLyogcGhhc2UgMiAqLwogICAgIHRtcDEzID0gdG1wMCAtIHRtcDM7CiAgICAgdG1wMTEgPSB0bXAxICsgdG1wMjsKICAgICB0bXAxMiA9IHRtcDEgLSB0bXAyOwotCi0gICAgLyogQXBwbHkgdW5zaWduZWQtPnNpZ25lZCBjb252ZXJzaW9uICovCi0gICAgZGF0YXB0clswXSA9IHRtcDEwICsgdG1wMTEgLSA4ICogQ0VOVEVSSlNBTVBMRTsgLyogcGhhc2UgMyAqLworICAgIAorICAgIGRhdGFwdHJbMF0gPSB0bXAxMCArIHRtcDExOyAvKiBwaGFzZSAzICovCiAgICAgZGF0YXB0cls0XSA9IHRtcDEwIC0gdG1wMTE7Ci0KKyAgICAKICAgICB6MSA9ICh0bXAxMiArIHRtcDEzKSAqICgoRkFTVF9GTE9BVCkgMC43MDcxMDY3ODEpOyAvKiBjNCAqLwogICAgIGRhdGFwdHJbMl0gPSB0bXAxMyArIHoxOwkvKiBwaGFzZSA1ICovCiAgICAgZGF0YXB0cls2XSA9IHRtcDEzIC0gejE7Ci0KKyAgICAKICAgICAvKiBPZGQgcGFydCAqLwogCiAgICAgdG1wMTAgPSB0bXA0ICsgdG1wNTsJLyogcGhhc2UgMiAqLwpAQCAtMTMyLDIxICsxMjYsMjEgQEAKICAgICB0bXA1ID0gZGF0YXB0cltEQ1RTSVpFKjJdIC0gZGF0YXB0cltEQ1RTSVpFKjVdOwogICAgIHRtcDMgPSBkYXRhcHRyW0RDVFNJWkUqM10gKyBkYXRhcHRyW0RDVFNJWkUqNF07CiAgICAgdG1wNCA9IGRhdGFwdHJbRENUU0laRSozXSAtIGRhdGFwdHJbRENUU0laRSo0XTsKLQorICAgIAogICAgIC8qIEV2ZW4gcGFydCAqLwotCisgICAgCiAgICAgdG1wMTAgPSB0bXAwICsgdG1wMzsJLyogcGhhc2UgMiAqLwogICAgIHRtcDEzID0gdG1wMCAtIHRtcDM7CiAgICAgdG1wMTEgPSB0bXAxICsgdG1wMjsKICAgICB0bXAxMiA9IHRtcDEgLSB0bXAyOwotCisgICAgCiAgICAgZGF0YXB0cltEQ1RTSVpFKjBdID0gdG1wMTAgKyB0bXAxMTsgLyogcGhhc2UgMyAqLwogICAgIGRhdGFwdHJbRENUU0laRSo0XSA9IHRtcDEwIC0gdG1wMTE7Ci0KKyAgICAKICAgICB6MSA9ICh0bXAxMiArIHRtcDEzKSAqICgoRkFTVF9GTE9BVCkgMC43MDcxMDY3ODEpOyAvKiBjNCAqLwogICAgIGRhdGFwdHJbRENUU0laRSoyXSA9IHRtcDEzICsgejE7IC8qIHBoYXNlIDUgKi8KICAgICBkYXRhcHRyW0RDVFNJWkUqNl0gPSB0bXAxMyAtIHoxOwotCisgICAgCiAgICAgLyogT2RkIHBhcnQgKi8KIAogICAgIHRtcDEwID0gdG1wNCArIHRtcDU7CS8qIHBoYXNlIDIgKi8KZGlmZiAtLWdpdCBhL2pmZGN0ZnN0LmMgYi9qZmRjdGZzdC5jCmluZGV4IDhjYWQ1ZjIuLmNjYjM3OGEgMTAwNjQ0Ci0tLSBhL2pmZGN0ZnN0LmMKKysrIGIvamZkY3Rmc3QuYwpAQCAtMiw3ICsyLDYgQEAKICAqIGpmZGN0ZnN0LmMKICAqCiAgKiBDb3B5cmlnaHQgKEMpIDE5OTQtMTk5NiwgVGhvbWFzIEcuIExhbmUuCi0gKiBNb2RpZmllZCAyMDAzLTIwMDkgYnkgR3VpZG8gVm9sbGJlZGluZy4KICAqIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBJbmRlcGVuZGVudCBKUEVHIEdyb3VwJ3Mgc29mdHdhcmUuCiAgKiBGb3IgY29uZGl0aW9ucyBvZiBkaXN0cmlidXRpb24gYW5kIHVzZSwgc2VlIHRoZSBhY2NvbXBhbnlpbmcgUkVBRE1FIGZpbGUuCiAgKgpAQCAtMTEyLDQ3ICsxMTEsNDIgQEAKICAqLwogCiBHTE9CQUwodm9pZCkKLWpwZWdfZmRjdF9pZmFzdCAoRENURUxFTSAqIGRhdGEsIEpTQU1QQVJSQVkgc2FtcGxlX2RhdGEsIEpESU1FTlNJT04gc3RhcnRfY29sKQoranBlZ19mZGN0X2lmYXN0IChEQ1RFTEVNICogZGF0YSkKIHsKICAgRENURUxFTSB0bXAwLCB0bXAxLCB0bXAyLCB0bXAzLCB0bXA0LCB0bXA1LCB0bXA2LCB0bXA3OwogICBEQ1RFTEVNIHRtcDEwLCB0bXAxMSwgdG1wMTIsIHRtcDEzOwogICBEQ1RFTEVNIHoxLCB6MiwgejMsIHo0LCB6NSwgejExLCB6MTM7CiAgIERDVEVMRU0gKmRhdGFwdHI7Ci0gIEpTQU1QUk9XIGVsZW1wdHI7CiAgIGludCBjdHI7CiAgIFNISUZUX1RFTVBTCiAKICAgLyogUGFzcyAxOiBwcm9jZXNzIHJvd3MuICovCiAKICAgZGF0YXB0ciA9IGRhdGE7Ci0gIGZvciAoY3RyID0gMDsgY3RyIDwgRENUU0laRTsgY3RyKyspIHsKLSAgICBlbGVtcHRyID0gc2FtcGxlX2RhdGFbY3RyXSArIHN0YXJ0X2NvbDsKLQotICAgIC8qIExvYWQgZGF0YSBpbnRvIHdvcmtzcGFjZSAqLwotICAgIHRtcDAgPSBHRVRKU0FNUExFKGVsZW1wdHJbMF0pICsgR0VUSlNBTVBMRShlbGVtcHRyWzddKTsKLSAgICB0bXA3ID0gR0VUSlNBTVBMRShlbGVtcHRyWzBdKSAtIEdFVEpTQU1QTEUoZWxlbXB0cls3XSk7Ci0gICAgdG1wMSA9IEdFVEpTQU1QTEUoZWxlbXB0clsxXSkgKyBHRVRKU0FNUExFKGVsZW1wdHJbNl0pOwotICAgIHRtcDYgPSBHRVRKU0FNUExFKGVsZW1wdHJbMV0pIC0gR0VUSlNBTVBMRShlbGVtcHRyWzZdKTsKLSAgICB0bXAyID0gR0VUSlNBTVBMRShlbGVtcHRyWzJdKSArIEdFVEpTQU1QTEUoZWxlbXB0cls1XSk7Ci0gICAgdG1wNSA9IEdFVEpTQU1QTEUoZWxlbXB0clsyXSkgLSBHRVRKU0FNUExFKGVsZW1wdHJbNV0pOwotICAgIHRtcDMgPSBHRVRKU0FNUExFKGVsZW1wdHJbM10pICsgR0VUSlNBTVBMRShlbGVtcHRyWzRdKTsKLSAgICB0bXA0ID0gR0VUSlNBTVBMRShlbGVtcHRyWzNdKSAtIEdFVEpTQU1QTEUoZWxlbXB0cls0XSk7Ci0KKyAgZm9yIChjdHIgPSBEQ1RTSVpFLTE7IGN0ciA+PSAwOyBjdHItLSkgeworICAgIHRtcDAgPSBkYXRhcHRyWzBdICsgZGF0YXB0cls3XTsKKyAgICB0bXA3ID0gZGF0YXB0clswXSAtIGRhdGFwdHJbN107CisgICAgdG1wMSA9IGRhdGFwdHJbMV0gKyBkYXRhcHRyWzZdOworICAgIHRtcDYgPSBkYXRhcHRyWzFdIC0gZGF0YXB0cls2XTsKKyAgICB0bXAyID0gZGF0YXB0clsyXSArIGRhdGFwdHJbNV07CisgICAgdG1wNSA9IGRhdGFwdHJbMl0gLSBkYXRhcHRyWzVdOworICAgIHRtcDMgPSBkYXRhcHRyWzNdICsgZGF0YXB0cls0XTsKKyAgICB0bXA0ID0gZGF0YXB0clszXSAtIGRhdGFwdHJbNF07CisgICAgCiAgICAgLyogRXZlbiBwYXJ0ICovCi0KKyAgICAKICAgICB0bXAxMCA9IHRtcDAgKyB0bXAzOwkvKiBwaGFzZSAyICovCiAgICAgdG1wMTMgPSB0bXAwIC0gdG1wMzsKICAgICB0bXAxMSA9IHRtcDEgKyB0bXAyOwogICAgIHRtcDEyID0gdG1wMSAtIHRtcDI7Ci0KLSAgICAvKiBBcHBseSB1bnNpZ25lZC0+c2lnbmVkIGNvbnZlcnNpb24gKi8KLSAgICBkYXRhcHRyWzBdID0gdG1wMTAgKyB0bXAxMSAtIDggKiBDRU5URVJKU0FNUExFOyAvKiBwaGFzZSAzICovCisgICAgCisgICAgZGF0YXB0clswXSA9IHRtcDEwICsgdG1wMTE7IC8qIHBoYXNlIDMgKi8KICAgICBkYXRhcHRyWzRdID0gdG1wMTAgLSB0bXAxMTsKLQorICAgIAogICAgIHoxID0gTVVMVElQTFkodG1wMTIgKyB0bXAxMywgRklYXzBfNzA3MTA2NzgxKTsgLyogYzQgKi8KICAgICBkYXRhcHRyWzJdID0gdG1wMTMgKyB6MTsJLyogcGhhc2UgNSAqLwogICAgIGRhdGFwdHJbNl0gPSB0bXAxMyAtIHoxOwotCisgICAgCiAgICAgLyogT2RkIHBhcnQgKi8KIAogICAgIHRtcDEwID0gdG1wNCArIHRtcDU7CS8qIHBoYXNlIDIgKi8KQEAgLTE4OCwyMSArMTgyLDIxIEBACiAgICAgdG1wNSA9IGRhdGFwdHJbRENUU0laRSoyXSAtIGRhdGFwdHJbRENUU0laRSo1XTsKICAgICB0bXAzID0gZGF0YXB0cltEQ1RTSVpFKjNdICsgZGF0YXB0cltEQ1RTSVpFKjRdOwogICAgIHRtcDQgPSBkYXRhcHRyW0RDVFNJWkUqM10gLSBkYXRhcHRyW0RDVFNJWkUqNF07Ci0KKyAgICAKICAgICAvKiBFdmVuIHBhcnQgKi8KLQorICAgIAogICAgIHRtcDEwID0gdG1wMCArIHRtcDM7CS8qIHBoYXNlIDIgKi8KICAgICB0bXAxMyA9IHRtcDAgLSB0bXAzOwogICAgIHRtcDExID0gdG1wMSArIHRtcDI7CiAgICAgdG1wMTIgPSB0bXAxIC0gdG1wMjsKLQorICAgIAogICAgIGRhdGFwdHJbRENUU0laRSowXSA9IHRtcDEwICsgdG1wMTE7IC8qIHBoYXNlIDMgKi8KICAgICBkYXRhcHRyW0RDVFNJWkUqNF0gPSB0bXAxMCAtIHRtcDExOwotCisgICAgCiAgICAgejEgPSBNVUxUSVBMWSh0bXAxMiArIHRtcDEzLCBGSVhfMF83MDcxMDY3ODEpOyAvKiBjNCAqLwogICAgIGRhdGFwdHJbRENUU0laRSoyXSA9IHRtcDEzICsgejE7IC8qIHBoYXNlIDUgKi8KICAgICBkYXRhcHRyW0RDVFNJWkUqNl0gPSB0bXAxMyAtIHoxOwotCisgICAgCiAgICAgLyogT2RkIHBhcnQgKi8KIAogICAgIHRtcDEwID0gdG1wNCArIHRtcDU7CS8qIHBoYXNlIDIgKi8KZGlmZiAtLWdpdCBhL2pmZGN0aW50LmMgYi9qZmRjdGludC5jCmluZGV4IDFkZGU1OGMuLjBhNzhiNjQgMTAwNjQ0Ci0tLSBhL2pmZGN0aW50LmMKKysrIGIvamZkY3RpbnQuYwpAQCAtMiw3ICsyLDYgQEAKICAqIGpmZGN0aW50LmMKICAqCiAgKiBDb3B5cmlnaHQgKEMpIDE5OTEtMTk5NiwgVGhvbWFzIEcuIExhbmUuCi0gKiBNb2RpZmljYXRpb24gZGV2ZWxvcGVkIDIwMDMtMjAwOSBieSBHdWlkbyBWb2xsYmVkaW5nLgogICogVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEluZGVwZW5kZW50IEpQRUcgR3JvdXAncyBzb2Z0d2FyZS4KICAqIEZvciBjb25kaXRpb25zIG9mIGRpc3RyaWJ1dGlvbiBhbmQgdXNlLCBzZWUgdGhlIGFjY29tcGFueWluZyBSRUFETUUgZmlsZS4KICAqCkBAIC0yMiwyMyArMjEsNiBAQAogICogVGhlIGFkdmFudGFnZSBvZiB0aGlzIG1ldGhvZCBpcyB0aGF0IG5vIGRhdGEgcGF0aCBjb250YWlucyBtb3JlIHRoYW4gb25lCiAgKiBtdWx0aXBsaWNhdGlvbjsgdGhpcyBhbGxvd3MgYSB2ZXJ5IHNpbXBsZSBhbmQgYWNjdXJhdGUgaW1wbGVtZW50YXRpb24gaW4KICAqIHNjYWxlZCBmaXhlZC1wb2ludCBhcml0aG1ldGljLCB3aXRoIGEgbWluaW1hbCBudW1iZXIgb2Ygc2hpZnRzLgotICoKLSAqIFdlIGFsc28gcHJvdmlkZSBGRENUIHJvdXRpbmVzIHdpdGggdmFyaW91cyBpbnB1dCBzYW1wbGUgYmxvY2sgc2l6ZXMgZm9yCi0gKiBkaXJlY3QgcmVzb2x1dGlvbiByZWR1Y3Rpb24gb3IgZW5sYXJnZW1lbnQgYW5kIGZvciBkaXJlY3QgcmVzb2x2aW5nIHRoZQotICogY29tbW9uIDJ4MSBhbmQgMXgyIHN1YnNhbXBsaW5nIGNhc2VzIHdpdGhvdXQgYWRkaXRpb25hbCByZXNhbXBsaW5nOiBOeE4KLSAqIChOPTEuLi4xNiksIDJOeE4sIGFuZCBOeDJOIChOPTEuLi44KSBwaXhlbHMgZm9yIG9uZSA4eDggb3V0cHV0IERDVCBibG9jay4KLSAqCi0gKiBGb3IgTjw4IHdlIGZpbGwgdGhlIHJlbWFpbmluZyBibG9jayBjb2VmZmljaWVudHMgd2l0aCB6ZXJvLgotICogRm9yIE4+OCB3ZSBhcHBseSBhIHBhcnRpYWwgTi1wb2ludCBGRENUIG9uIHRoZSBpbnB1dCBzYW1wbGVzLCBjb21wdXRpbmcKLSAqIGp1c3QgdGhlIGxvd2VyIDggZnJlcXVlbmN5IGNvZWZmaWNpZW50cyBhbmQgZGlzY2FyZGluZyB0aGUgcmVzdC4KLSAqCi0gKiBXZSBtdXN0IHNjYWxlIHRoZSBvdXRwdXQgY29lZmZpY2llbnRzIG9mIHRoZSBOLXBvaW50IEZEQ1QgYXBwcm9wcmlhdGVseQotICogdG8gdGhlIHN0YW5kYXJkIDgtcG9pbnQgRkRDVCBsZXZlbCBieSA4L04gcGVyIDEtRCBwYXNzLiAgVGhpcyBzY2FsaW5nCi0gKiBpcyBmb2xkZWQgaW50byB0aGUgY29uc3RhbnQgbXVsdGlwbGllcnMgKHBhc3MgMikgYW5kL29yIGZpbmFsL2luaXRpYWwKLSAqIHNoaWZ0aW5nLgotICoKLSAqIENBVVRJT046IFdlIHJlbHkgb24gdGhlIEZJWCgpIG1hY3JvIGV4Y2VwdCBmb3IgdGhlIE49MSwyLDQsOCBjYXNlcwotICogc2luY2UgdGhlcmUgd291bGQgYmUgdG9vIG1hbnkgYWRkaXRpb25hbCBjb25zdGFudHMgdG8gcHJlLWNhbGN1bGF0ZS4KICAqLwogCiAjZGVmaW5lIEpQRUdfSU5URVJOQUxTCkBAIC01NCw3ICszNiw3IEBACiAgKi8KIAogI2lmIERDVFNJWkUgIT0gOAotICBTb3JyeSwgdGhpcyBjb2RlIG9ubHkgY29wZXMgd2l0aCA4eDggRENUIGJsb2Nrcy4gLyogZGVsaWJlcmF0ZSBzeW50YXggZXJyICovCisgIFNvcnJ5LCB0aGlzIGNvZGUgb25seSBjb3BlcyB3aXRoIDh4OCBEQ1RzLiAvKiBkZWxpYmVyYXRlIHN5bnRheCBlcnIgKi8KICNlbmRpZgogCiAKQEAgLTE1NSwxMyArMTM3LDEyIEBACiAgKi8KIAogR0xPQkFMKHZvaWQpCi1qcGVnX2ZkY3RfaXNsb3cgKERDVEVMRU0gKiBkYXRhLCBKU0FNUEFSUkFZIHNhbXBsZV9kYXRhLCBKRElNRU5TSU9OIHN0YXJ0X2NvbCkKK2pwZWdfZmRjdF9pc2xvdyAoRENURUxFTSAqIGRhdGEpCiB7Ci0gIElOVDMyIHRtcDAsIHRtcDEsIHRtcDIsIHRtcDM7CisgIElOVDMyIHRtcDAsIHRtcDEsIHRtcDIsIHRtcDMsIHRtcDQsIHRtcDUsIHRtcDYsIHRtcDc7CiAgIElOVDMyIHRtcDEwLCB0bXAxMSwgdG1wMTIsIHRtcDEzOwotICBJTlQzMiB6MTsKKyAgSU5UMzIgejEsIHoyLCB6MywgejQsIHo1OwogICBEQ1RFTEVNICpkYXRhcHRyOwotICBKU0FNUFJPVyBlbGVtcHRyOwogICBpbnQgY3RyOwogICBTSElGVF9URU1QUwogCkBAIC0xNzAsMzg4NyArMTUxLDYyIEBACiAgIC8qIGZ1cnRoZXJtb3JlLCB3ZSBzY2FsZSB0aGUgcmVzdWx0cyBieSAyKipQQVNTMV9CSVRTLiAqLwogCiAgIGRhdGFwdHIgPSBkYXRhOwotICBmb3IgKGN0ciA9IDA7IGN0ciA8IERDVFNJWkU7IGN0cisrKSB7Ci0gICAgZWxlbXB0ciA9IHNhbXBsZV9kYXRhW2N0cl0gKyBzdGFydF9jb2w7Ci0KKyAgZm9yIChjdHIgPSBEQ1RTSVpFLTE7IGN0ciA+PSAwOyBjdHItLSkgeworICAgIHRtcDAgPSBkYXRhcHRyWzBdICsgZGF0YXB0cls3XTsKKyAgICB0bXA3ID0gZGF0YXB0clswXSAtIGRhdGFwdHJbN107CisgICAgdG1wMSA9IGRhdGFwdHJbMV0gKyBkYXRhcHRyWzZdOworICAgIHRtcDYgPSBkYXRhcHRyWzFdIC0gZGF0YXB0cls2XTsKKyAgICB0bXAyID0gZGF0YXB0clsyXSArIGRhdGFwdHJbNV07CisgICAgdG1wNSA9IGRhdGFwdHJbMl0gLSBkYXRhcHRyWzVdOworICAgIHRtcDMgPSBkYXRhcHRyWzNdICsgZGF0YXB0cls0XTsKKyAgICB0bXA0ID0gZGF0YXB0clszXSAtIGRhdGFwdHJbNF07CisgICAgCiAgICAgLyogRXZlbiBwYXJ0IHBlciBMTCZNIGZpZ3VyZSAxIC0tLSBub3RlIHRoYXQgcHVibGlzaGVkIGZpZ3VyZSBpcyBmYXVsdHk7CiAgICAgICogcm90YXRvciAic3FydCgyKSpjMSIgc2hvdWxkIGJlICJzcXJ0KDIpKmM2Ii4KICAgICAgKi8KLQotICAgIHRtcDAgPSBHRVRKU0FNUExFKGVsZW1wdHJbMF0pICsgR0VUSlNBTVBMRShlbGVtcHRyWzddKTsKLSAgICB0bXAxID0gR0VUSlNBTVBMRShlbGVtcHRyWzFdKSArIEdFVEpTQU1QTEUoZWxlbXB0cls2XSk7Ci0gICAgdG1wMiA9IEdFVEpTQU1QTEUoZWxlbXB0clsyXSkgKyBHRVRKU0FNUExFKGVsZW1wdHJbNV0pOwotICAgIHRtcDMgPSBHRVRKU0FNUExFKGVsZW1wdHJbM10pICsgR0VUSlNBTVBMRShlbGVtcHRyWzRdKTsKLQorICAgIAogICAgIHRtcDEwID0gdG1wMCArIHRtcDM7Ci0gICAgdG1wMTIgPSB0bXAwIC0gdG1wMzsKKyAgICB0bXAxMyA9IHRtcDAgLSB0bXAzOwogICAgIHRtcDExID0gdG1wMSArIHRtcDI7Ci0gICAgdG1wMTMgPSB0bXAxIC0gdG1wMjsKLQotICAgIHRtcDAgPSBHRVRKU0FNUExFKGVsZW1wdHJbMF0pIC0gR0VUSlNBTVBMRShlbGVtcHRyWzddKTsKLSAgICB0bXAxID0gR0VUSlNBTVBMRShlbGVtcHRyWzFdKSAtIEdFVEpTQU1QTEUoZWxlbXB0cls2XSk7Ci0gICAgdG1wMiA9IEdFVEpTQU1QTEUoZWxlbXB0clsyXSkgLSBHRVRKU0FNUExFKGVsZW1wdHJbNV0pOwotICAgIHRtcDMgPSBHRVRKU0FNUExFKGVsZW1wdHJbM10pIC0gR0VUSlNBTVBMRShlbGVtcHRyWzRdKTsKLQotICAgIC8qIEFwcGx5IHVuc2lnbmVkLT5zaWduZWQgY29udmVyc2lvbiAqLwotICAgIGRhdGFwdHJbMF0gPSAoRENURUxFTSkgKCh0bXAxMCArIHRtcDExIC0gOCAqIENFTlRFUkpTQU1QTEUpIDw8IFBBU1MxX0JJVFMpOworICAgIHRtcDEyID0gdG1wMSAtIHRtcDI7CisgICAgCisgICAgZGF0YXB0clswXSA9IChEQ1RFTEVNKSAoKHRtcDEwICsgdG1wMTEpIDw8IFBBU1MxX0JJVFMpOwogICAgIGRhdGFwdHJbNF0gPSAoRENURUxFTSkgKCh0bXAxMCAtIHRtcDExKSA8PCBQQVNTMV9CSVRTKTsKLQorICAgIAogICAgIHoxID0gTVVMVElQTFkodG1wMTIgKyB0bXAxMywgRklYXzBfNTQxMTk2MTAwKTsKLSAgICAvKiBBZGQgZnVkZ2UgZmFjdG9yIGhlcmUgZm9yIGZpbmFsIGRlc2NhbGUuICovCi0gICAgejEgKz0gT05FIDw8IChDT05TVF9CSVRTLVBBU1MxX0JJVFMtMSk7Ci0gICAgZGF0YXB0clsyXSA9IChEQ1RFTEVNKSBSSUdIVF9TSElGVCh6MSArIE1VTFRJUExZKHRtcDEyLCBGSVhfMF83NjUzNjY4NjUpLAotCQkJCSAgICAgICBDT05TVF9CSVRTLVBBU1MxX0JJVFMpOwotICAgIGRhdGFwdHJbNl0gPSAoRENURUxFTSkgUklHSFRfU0hJRlQoejEgLSBNVUxUSVBMWSh0bXAxMywgRklYXzFfODQ3NzU5MDY1KSwKLQkJCQkgICAgICAgQ09OU1RfQklUUy1QQVNTMV9CSVRTKTsKLQotICAgIC8qIE9kZCBwYXJ0IHBlciBmaWd1cmUgOCAtLS0gbm90ZSBwYXBlciBvbWl0cyBmYWN0b3Igb2Ygc3FydCgyKS4KLSAgICAgKiBjSyByZXByZXNlbnRzIHNxcnQoMikgKiBjb3MoSypwaS8xNikuCi0gICAgICogaTAuLmkzIGluIHRoZSBwYXBlciBhcmUgdG1wMC4udG1wMyBoZXJlLgotICAgICAqLwotCi0gICAgdG1wMTAgPSB0bXAwICsgdG1wMzsKLSAgICB0bXAxMSA9IHRtcDEgKyB0bXAyOwotICAgIHRtcDEyID0gdG1wMCArIHRtcDI7Ci0gICAgdG1wMTMgPSB0bXAxICsgdG1wMzsKLSAgICB6MSA9IE1VTFRJUExZKHRtcDEyICsgdG1wMTMsIEZJWF8xXzE3NTg3NTYwMik7IC8qICBjMyAqLwotICAgIC8qIEFkZCBmdWRnZSBmYWN0b3IgaGVyZSBmb3IgZmluYWwgZGVzY2FsZS4gKi8KLSAgICB6MSArPSBPTkUgPDwgKENPTlNUX0JJVFMtUEFTUzFfQklUUy0xKTsKLQotICAgIHRtcDAgID0gTVVMVElQTFkodG1wMCwgICAgRklYXzFfNTAxMzIxMTEwKTsgICAgLyogIGMxK2MzLWM1LWM3ICovCi0gICAgdG1wMSAgPSBNVUxUSVBMWSh0bXAxLCAgICBGSVhfM18wNzI3MTEwMjYpOyAgICAvKiAgYzErYzMrYzUtYzcgKi8KLSAgICB0bXAyICA9IE1VTFRJUExZKHRtcDIsICAgIEZJWF8yXzA1MzExOTg2OSk7ICAgIC8qICBjMStjMy1jNStjNyAqLwotICAgIHRtcDMgID0gTVVMVElQTFkodG1wMywgICAgRklYXzBfMjk4NjMxMzM2KTsgICAgLyogLWMxK2MzK2M1LWM3ICovCi0gICAgdG1wMTAgPSBNVUxUSVBMWSh0bXAxMCwgLSBGSVhfMF84OTk5NzYyMjMpOyAgICAvKiAgYzctYzMgKi8KLSAgICB0bXAxMSA9IE1VTFRJUExZKHRtcDExLCAtIEZJWF8yXzU2MjkxNTQ0Nyk7ICAgIC8qIC1jMS1jMyAqLwotICAgIHRtcDEyID0gTVVMVElQTFkodG1wMTIsIC0gRklYXzBfMzkwMTgwNjQ0KTsgICAgLyogIGM1LWMzICovCi0gICAgdG1wMTMgPSBNVUxUSVBMWSh0bXAxMywgLSBGSVhfMV85NjE1NzA1NjApOyAgICAvKiAtYzMtYzUgKi8KLQotICAgIHRtcDEyICs9IHoxOwotICAgIHRtcDEzICs9IHoxOwotCi0gICAgZGF0YXB0clsxXSA9IChEQ1RFTEVNKQotICAgICAgUklHSFRfU0hJRlQodG1wMCArIHRtcDEwICsgdG1wMTIsIENPTlNUX0JJVFMtUEFTUzFfQklUUyk7Ci0gICAgZGF0YXB0clszXSA9IChEQ1RFTEVNKQotICAgICAgUklHSFRfU0hJRlQodG1wMSArIHRtcDExICsgdG1wMTMsIENPTlNUX0JJVFMtUEFTUzFfQklUUyk7Ci0gICAgZGF0YXB0cls1XSA9IChEQ1RFTEVNKQotICAgICAgUklHSFRfU0hJRlQodG1wMiArIHRtcDExICsgdG1wMTIsIENPTlNUX0JJVFMtUEFTUzFfQklUUyk7Ci0gICAgZGF0YXB0cls3XSA9IChEQ1RFTEVNKQotICAgICAgUklHSFRfU0hJRlQodG1wMyArIHRtcDEwICsgdG1wMTMsIENPTlNUX0JJVFMtUEFTUzFfQklUUyk7Ci0KLSAgICBkYXRhcHRyICs9IERDVFNJWkU7CQkvKiBhZHZhbmNlIHBvaW50ZXIgdG8gbmV4dCByb3cgKi8KLSAgfQotCi0gIC8qIFBhc3MgMjogcHJvY2VzcyBjb2x1bW5zLgotICAgKiBXZSByZW1vdmUgdGhlIFBBU1MxX0JJVFMgc2NhbGluZywgYnV0IGxlYXZlIHRoZSByZXN1bHRzIHNjYWxlZCB1cAotICAgKiBieSBhbiBvdmVyYWxsIGZhY3RvciBvZiA4LgotICAgKi8KLQotICBkYXRhcHRyID0gZGF0YTsKLSAgZm9yIChjdHIgPSBEQ1RTSVpFLTE7IGN0ciA+PSAwOyBjdHItLSkgewotICAgIC8qIEV2ZW4gcGFydCBwZXIgTEwmTSBmaWd1cmUgMSAtLS0gbm90ZSB0aGF0IHB1Ymxpc2hlZCBmaWd1cmUgaXMgZmF1bHR5OwotICAgICAqIHJvdGF0b3IgInNxcnQoMikqYzEiIHNob3VsZCBiZSAic3FydCgyKSpjNiIuCi0gICAgICovCi0KLSAgICB0bXAwID0gZGF0YXB0cltEQ1RTSVpFKjBdICsgZGF0YXB0cltEQ1RTSVpFKjddOwotICAgIHRtcDEgPSBkYXRhcHRyW0RDVFNJWkUqMV0gKyBkYXRhcHRyW0RDVFNJWkUqNl07Ci0gICAgdG1wMiA9IGRhdGFwdHJbRENUU0laRSoyXSArIGRhdGFwdHJbRENUU0laRSo1XTsKLSAgICB0bXAzID0gZGF0YXB0cltEQ1RTSVpFKjNdICsgZGF0YXB0cltEQ1RTSVpFKjRdOwotCi0gICAgLyogQWRkIGZ1ZGdlIGZhY3RvciBoZXJlIGZvciBmaW5hbCBkZXNjYWxlLiAqLwotICAgIHRtcDEwID0gdG1wMCArIHRtcDMgKyAoT05FIDw8IChQQVNTMV9CSVRTLTEpKTsKLSAgICB0bXAxMiA9IHRtcDAgLSB0bXAzOwotICAgIHRtcDExID0gdG1wMSArIHRtcDI7Ci0gICAgdG1wMTMgPSB0bXAxIC0gdG1wMjsKLQotICAgIHRtcDAgPSBkYXRhcHRyW0RDVFNJWkUqMF0gLSBkYXRhcHRyW0RDVFNJWkUqN107Ci0gICAgdG1wMSA9IGRhdGFwdHJbRENUU0laRSoxXSAtIGRhdGFwdHJbRENUU0laRSo2XTsKLSAgICB0bXAyID0gZGF0YXB0cltEQ1RTSVpFKjJdIC0gZGF0YXB0cltEQ1RTSVpFKjVdOwotICAgIHRtcDMgPSBkYXRhcHRyW0RDVFNJWkUqM10gLSBkYXRhcHRyW0RDVFNJWkUqNF07Ci0KLSAgICBkYXRhcHRyW0RDVFNJWkUqMF0gPSAoRENURUxFTSkgUklHSFRfU0hJRlQodG1wMTAgKyB0bXAxMSwgUEFTUzFfQklUUyk7Ci0gICAgZGF0YXB0cltEQ1RTSVpFKjRdID0gKERDVEVMRU0pIFJJR0hUX1NISUZUKHRtcDEwIC0gdG1wMTEsIFBBU1MxX0JJVFMpOwotCi0gICAgejEgPSBNVUxUSVBMWSh0bXAxMiArIHRtcDEzLCBGSVhfMF81NDExOTYxMDApOwotICAgIC8qIEFkZCBmdWRnZSBmYWN0b3IgaGVyZSBmb3IgZmluYWwgZGVzY2FsZS4gKi8KLSAgICB6MSArPSBPTkUgPDwgKENPTlNUX0JJVFMrUEFTUzFfQklUUy0xKTsKLSAgICBkYXRhcHRyW0RDVFNJWkUqMl0gPSAoRENURUxFTSkKLSAgICAgIFJJR0hUX1NISUZUKHoxICsgTVVMVElQTFkodG1wMTIsIEZJWF8wXzc2NTM2Njg2NSksIENPTlNUX0JJVFMrUEFTUzFfQklUUyk7Ci0gICAgZGF0YXB0cltEQ1RTSVpFKjZdID0gKERDVEVMRU0pCi0gICAgICBSSUdIVF9TSElGVCh6MSAtIE1VTFRJUExZKHRtcDEzLCBGSVhfMV84NDc3NTkwNjUpLCBDT05TVF9CSVRTK1BBU1MxX0JJVFMpOwotCi0gICAgLyogT2RkIHBhcnQgcGVyIGZpZ3VyZSA4IC0tLSBub3RlIHBhcGVyIG9taXRzIGZhY3RvciBvZiBzcXJ0KDIpLgotICAgICAqIGNLIHJlcHJlc2VudHMgc3FydCgyKSAqIGNvcyhLKnBpLzE2KS4KLSAgICAgKiBpMC4uaTMgaW4gdGhlIHBhcGVyIGFyZSB0bXAwLi50bXAzIGhlcmUuCi0gICAgICovCi0KLSAgICB0bXAxMCA9IHRtcDAgKyB0bXAzOwotICAgIHRtcDExID0gdG1wMSArIHRtcDI7Ci0gICAgdG1wMTIgPSB0bXAwICsgdG1wMjsKLSAgICB0bXAxMyA9IHRtcDEgKyB0bXAzOwotICAgIHoxID0gTVVMVElQTFkodG1wMTIgKyB0bXAxMywgRklYXzFfMTc1ODc1NjAyKTsgLyogIGMzICovCi0gICAgLyogQWRkIGZ1ZGdlIGZhY3RvciBoZXJlIGZvciBmaW5hbCBkZXNjYWxlLiAqLwotICAgIHoxICs9IE9ORSA8PCAoQ09OU1RfQklUUytQQVNTMV9CSVRTLTEpOwotCi0gICAgdG1wMCAgPSBNVUxUSVBMWSh0bXAwLCAgICBGSVhfMV81MDEzMjExMTApOyAgICAvKiAgYzErYzMtYzUtYzcgKi8KLSAgICB0bXAxICA9IE1VTFRJUExZKHRtcDEsICAgIEZJWF8zXzA3MjcxMTAyNik7ICAgIC8qICBjMStjMytjNS1jNyAqLwotICAgIHRtcDIgID0gTVVMVElQTFkodG1wMiwgICAgRklYXzJfMDUzMTE5ODY5KTsgICAgLyogIGMxK2MzLWM1K2M3ICovCi0gICAgdG1wMyAgPSBNVUxUSVBMWSh0bXAzLCAgICBGSVhfMF8yOTg2MzEzMzYpOyAgICAvKiAtYzErYzMrYzUtYzcgKi8KLSAgICB0bXAxMCA9IE1VTFRJUExZKHRtcDEwLCAtIEZJWF8wXzg5OTk3NjIyMyk7ICAgIC8qICBjNy1jMyAqLwotICAgIHRtcDExID0gTVVMVElQTFkodG1wMTEsIC0gRklYXzJfNTYyOTE1NDQ3KTsgICAgLyogLWMxLWMzICovCi0gICAgdG1wMTIgPSBNVUxUSVBMWSh0bXAxMiwgLSBGSVhfMF8zOTAxODA2NDQpOyAgICAvKiAgYzUtYzMgKi8KLSAgICB0bXAxMyA9IE1VTFRJUExZKHRtcDEzLCAtIEZJWF8xXzk2MTU3MDU2MCk7ICAgIC8qIC1jMy1jNSAqLwotCi0gICAgdG1wMTIgKz0gejE7Ci0gICAgdG1wMTMgKz0gejE7Ci0KLSAgICBkYXRhcHRyW0RDVFNJWkUqMV0gPSAoRENURUxFTSkKLSAgICAgIFJJR0hUX1NISUZUKHRtcDAgKyB0bXAxMCArIHRtcDEyLCBDT05TVF9CSVRTK1BBU1MxX0JJVFMpOwotICAgIGRhdGFwdHJbRENUU0laRSozXSA9IChEQ1RFTEVNKQotICAgICAgUklHSFRfU0hJRlQodG1wMSArIHRtcDExICsgdG1wMTMsIENPTlNUX0JJVFMrUEFTUzFfQklUUyk7Ci0gICAgZGF0YXB0cltEQ1RTSVpFKjVdID0gKERDVEVMRU0pCi0gICAgICBSSUdIVF9TSElGVCh0bXAyICsgdG1wMTEgKyB0bXAxMiwgQ09OU1RfQklUUytQQVNTMV9CSVRTKTsKLSAgICBkYXRhcHRyW0RDVFNJWkUqN10gPSAoRENURUxFTSkKLSAgICAgIFJJR0hUX1NISUZUKHRtcDMgKyB0bXAxMCArIHRtcDEzLCBDT05TVF9CSVRTK1BBU1MxX0JJVFMpOwotCi0gICAgZGF0YXB0cisrOwkJCS8qIGFkdmFuY2UgcG9pbnRlciB0byBuZXh0IGNvbHVtbiAqLwotICB9Ci19Ci0KLSNpZmRlZiBEQ1RfU0NBTElOR19TVVBQT1JURUQKLQotCi0vKgotICogUGVyZm9ybSB0aGUgZm9yd2FyZCBEQ1Qgb24gYSA3eDcgc2FtcGxlIGJsb2NrLgotICovCi0KLUdMT0JBTCh2b2lkKQotanBlZ19mZGN0Xzd4NyAoRENURUxFTSAqIGRhdGEsIEpTQU1QQVJSQVkgc2FtcGxlX2RhdGEsIEpESU1FTlNJT04gc3RhcnRfY29sKQotewotICBJTlQzMiB0bXAwLCB0bXAxLCB0bXAyLCB0bXAzOwotICBJTlQzMiB0bXAxMCwgdG1wMTEsIHRtcDEyOwotICBJTlQzMiB6MSwgejIsIHozOwotICBEQ1RFTEVNICpkYXRhcHRyOwotICBKU0FNUFJPVyBlbGVtcHRyOwotICBpbnQgY3RyOwotICBTSElGVF9URU1QUwotCi0gIC8qIFByZS16ZXJvIG91dHB1dCBjb2VmZmljaWVudCBibG9jay4gKi8KLSAgTUVNWkVSTyhkYXRhLCBTSVpFT0YoRENURUxFTSkgKiBEQ1RTSVpFMik7Ci0KLSAgLyogUGFzcyAxOiBwcm9jZXNzIHJvd3MuICovCi0gIC8qIE5vdGUgcmVzdWx0cyBhcmUgc2NhbGVkIHVwIGJ5IHNxcnQoOCkgY29tcGFyZWQgdG8gYSB0cnVlIERDVDsgKi8KLSAgLyogZnVydGhlcm1vcmUsIHdlIHNjYWxlIHRoZSByZXN1bHRzIGJ5IDIqKlBBU1MxX0JJVFMuICovCi0gIC8qIGNLIHJlcHJlc2VudHMgc3FydCgyKSAqIGNvcyhLKnBpLzE0KS4gKi8KLQotICBkYXRhcHRyID0gZGF0YTsKLSAgZm9yIChjdHIgPSAwOyBjdHIgPCA3OyBjdHIrKykgewotICAgIGVsZW1wdHIgPSBzYW1wbGVfZGF0YVtjdHJdICsgc3RhcnRfY29sOwotCi0gICAgLyogRXZlbiBwYXJ0ICovCi0KLSAgICB0bXAwID0gR0VUSlNBTVBMRShlbGVtcHRyWzBdKSArIEdFVEpTQU1QTEUoZWxlbXB0cls2XSk7Ci0gICAgdG1wMSA9IEdFVEpTQU1QTEUoZWxlbXB0clsxXSkgKyBHRVRKU0FNUExFKGVsZW1wdHJbNV0pOwotICAgIHRtcDIgPSBHRVRKU0FNUExFKGVsZW1wdHJbMl0pICsgR0VUSlNBTVBMRShlbGVtcHRyWzRdKTsKLSAgICB0bXAzID0gR0VUSlNBTVBMRShlbGVtcHRyWzNdKTsKLQotICAgIHRtcDEwID0gR0VUSlNBTVBMRShlbGVtcHRyWzBdKSAtIEdFVEpTQU1QTEUoZWxlbXB0cls2XSk7Ci0gICAgdG1wMTEgPSBHRVRKU0FNUExFKGVsZW1wdHJbMV0pIC0gR0VUSlNBTVBMRShlbGVtcHRyWzVdKTsKLSAgICB0bXAxMiA9IEdFVEpTQU1QTEUoZWxlbXB0clsyXSkgLSBHRVRKU0FNUExFKGVsZW1wdHJbNF0pOwotCi0gICAgejEgPSB0bXAwICsgdG1wMjsKLSAgICAvKiBBcHBseSB1bnNpZ25lZC0+c2lnbmVkIGNvbnZlcnNpb24gKi8KLSAgICBkYXRhcHRyWzBdID0gKERDVEVMRU0pCi0gICAgICAoKHoxICsgdG1wMSArIHRtcDMgLSA3ICogQ0VOVEVSSlNBTVBMRSkgPDwgUEFTUzFfQklUUyk7Ci0gICAgdG1wMyArPSB0bXAzOwotICAgIHoxIC09IHRtcDM7Ci0gICAgejEgLT0gdG1wMzsKLSAgICB6MSA9IE1VTFRJUExZKHoxLCBGSVgoMC4zNTM1NTMzOTEpKTsgICAgICAgICAgICAgICAgLyogKGMyK2M2LWM0KS8yICovCi0gICAgejIgPSBNVUxUSVBMWSh0bXAwIC0gdG1wMiwgRklYKDAuOTIwNjA5MDAyKSk7ICAgICAgIC8qIChjMitjNC1jNikvMiAqLwotICAgIHozID0gTVVMVElQTFkodG1wMSAtIHRtcDIsIEZJWCgwLjMxNDY5MjEyMykpOyAgICAgICAvKiBjNiAqLwotICAgIGRhdGFwdHJbMl0gPSAoRENURUxFTSkgREVTQ0FMRSh6MSArIHoyICsgejMsIENPTlNUX0JJVFMtUEFTUzFfQklUUyk7Ci0gICAgejEgLT0gejI7Ci0gICAgejIgPSBNVUxUSVBMWSh0bXAwIC0gdG1wMSwgRklYKDAuODgxNzQ3NzM0KSk7ICAgICAgIC8qIGM0ICovCi0gICAgZGF0YXB0cls0XSA9IChEQ1RFTEVNKQotICAgICAgREVTQ0FMRSh6MiArIHozIC0gTVVMVElQTFkodG1wMSAtIHRtcDMsIEZJWCgwLjcwNzEwNjc4MSkpLCAvKiBjMitjNi1jNCAqLwotCSAgICAgIENPTlNUX0JJVFMtUEFTUzFfQklUUyk7Ci0gICAgZGF0YXB0cls2XSA9IChEQ1RFTEVNKSBERVNDQUxFKHoxICsgejIsIENPTlNUX0JJVFMtUEFTUzFfQklUUyk7Ci0KLSAgICAvKiBPZGQgcGFydCAqLwotCi0gICAgdG1wMSA9IE1VTFRJUExZKHRtcDEwICsgdG1wMTEsIEZJWCgwLjkzNTQxNDM0NykpOyAgIC8qIChjMytjMS1jNSkvMiAqLwotICAgIHRtcDIgPSBNVUxUSVBMWSh0bXAxMCAtIHRtcDExLCBGSVgoMC4xNzAyNjIzMzkpKTsgICAvKiAoYzMrYzUtYzEpLzIgKi8KLSAgICB0bXAwID0gdG1wMSAtIHRtcDI7Ci0gICAgdG1wMSArPSB0bXAyOwotICAgIHRtcDIgPSBNVUxUSVBMWSh0bXAxMSArIHRtcDEyLCAtIEZJWCgxLjM3ODc1NjI3NikpOyAvKiAtYzEgKi8KLSAgICB0bXAxICs9IHRtcDI7Ci0gICAgdG1wMyA9IE1VTFRJUExZKHRtcDEwICsgdG1wMTIsIEZJWCgwLjYxMzYwNDI2OCkpOyAgIC8qIGM1ICovCi0gICAgdG1wMCArPSB0bXAzOwotICAgIHRtcDIgKz0gdG1wMyArIE1VTFRJUExZKHRtcDEyLCBGSVgoMS44NzA4Mjg2OTMpKTsgICAvKiBjMytjMS1jNSAqLwotCi0gICAgZGF0YXB0clsxXSA9IChEQ1RFTEVNKSBERVNDQUxFKHRtcDAsIENPTlNUX0JJVFMtUEFTUzFfQklUUyk7Ci0gICAgZGF0YXB0clszXSA9IChEQ1RFTEVNKSBERVNDQUxFKHRtcDEsIENPTlNUX0JJVFMtUEFTUzFfQklUUyk7Ci0gICAgZGF0YXB0cls1XSA9IChEQ1RFTEVNKSBERVNDQUxFKHRtcDIsIENPTlNUX0JJVFMtUEFTUzFfQklUUyk7Ci0KLSAgICBkYXRhcHRyICs9IERDVFNJWkU7CQkvKiBhZHZhbmNlIHBvaW50ZXIgdG8gbmV4dCByb3cgKi8KLSAgfQotCi0gIC8qIFBhc3MgMjogcHJvY2VzcyBjb2x1bW5zLgotICAgKiBXZSByZW1vdmUgdGhlIFBBU1MxX0JJVFMgc2NhbGluZywgYnV0IGxlYXZlIHRoZSByZXN1bHRzIHNjYWxlZCB1cAotICAgKiBieSBhbiBvdmVyYWxsIGZhY3RvciBvZiA4LgotICAgKiBXZSBtdXN0IGFsc28gc2NhbGUgdGhlIG91dHB1dCBieSAoOC83KSoqMiA9IDY0LzQ5LCB3aGljaCB3ZSBmb2xkCi0gICAqIGludG8gdGhlIGNvbnN0YW50IG11bHRpcGxpZXJzOgotICAgKiBjSyBub3cgcmVwcmVzZW50cyBzcXJ0KDIpICogY29zKEsqcGkvMTQpICogNjQvNDkuCi0gICAqLwotCi0gIGRhdGFwdHIgPSBkYXRhOwotICBmb3IgKGN0ciA9IDA7IGN0ciA8IDc7IGN0cisrKSB7Ci0gICAgLyogRXZlbiBwYXJ0ICovCi0KLSAgICB0bXAwID0gZGF0YXB0cltEQ1RTSVpFKjBdICsgZGF0YXB0cltEQ1RTSVpFKjZdOwotICAgIHRtcDEgPSBkYXRhcHRyW0RDVFNJWkUqMV0gKyBkYXRhcHRyW0RDVFNJWkUqNV07Ci0gICAgdG1wMiA9IGRhdGFwdHJbRENUU0laRSoyXSArIGRhdGFwdHJbRENUU0laRSo0XTsKLSAgICB0bXAzID0gZGF0YXB0cltEQ1RTSVpFKjNdOwotCi0gICAgdG1wMTAgPSBkYXRhcHRyW0RDVFNJWkUqMF0gLSBkYXRhcHRyW0RDVFNJWkUqNl07Ci0gICAgdG1wMTEgPSBkYXRhcHRyW0RDVFNJWkUqMV0gLSBkYXRhcHRyW0RDVFNJWkUqNV07Ci0gICAgdG1wMTIgPSBkYXRhcHRyW0RDVFNJWkUqMl0gLSBkYXRhcHRyW0RDVFNJWkUqNF07Ci0KLSAgICB6MSA9IHRtcDAgKyB0bXAyOwotICAgIGRhdGFwdHJbRENUU0laRSowXSA9IChEQ1RFTEVNKQotICAgICAgREVTQ0FMRShNVUxUSVBMWSh6MSArIHRtcDEgKyB0bXAzLCBGSVgoMS4zMDYxMjI0NDkpKSwgLyogNjQvNDkgKi8KLQkgICAgICBDT05TVF9CSVRTK1BBU1MxX0JJVFMpOwotICAgIHRtcDMgKz0gdG1wMzsKLSAgICB6MSAtPSB0bXAzOwotICAgIHoxIC09IHRtcDM7Ci0gICAgejEgPSBNVUxUSVBMWSh6MSwgRklYKDAuNDYxNzg0MDIwKSk7ICAgICAgICAgICAgICAgIC8qIChjMitjNi1jNCkvMiAqLwotICAgIHoyID0gTVVMVElQTFkodG1wMCAtIHRtcDIsIEZJWCgxLjIwMjQyODA4NCkpOyAgICAgICAvKiAoYzIrYzQtYzYpLzIgKi8KLSAgICB6MyA9IE1VTFRJUExZKHRtcDEgLSB0bXAyLCBGSVgoMC40MTEwMjY0NDYpKTsgICAgICAgLyogYzYgKi8KLSAgICBkYXRhcHRyW0RDVFNJWkUqMl0gPSAoRENURUxFTSkgREVTQ0FMRSh6MSArIHoyICsgejMsIENPTlNUX0JJVFMrUEFTUzFfQklUUyk7Ci0gICAgejEgLT0gejI7Ci0gICAgejIgPSBNVUxUSVBMWSh0bXAwIC0gdG1wMSwgRklYKDEuMTUxNjcwNTA5KSk7ICAgICAgIC8qIGM0ICovCi0gICAgZGF0YXB0cltEQ1RTSVpFKjRdID0gKERDVEVMRU0pCi0gICAgICBERVNDQUxFKHoyICsgejMgLSBNVUxUSVBMWSh0bXAxIC0gdG1wMywgRklYKDAuOTIzNTY4MDQxKSksIC8qIGMyK2M2LWM0ICovCi0JICAgICAgQ09OU1RfQklUUytQQVNTMV9CSVRTKTsKLSAgICBkYXRhcHRyW0RDVFNJWkUqNl0gPSAoRENURUxFTSkgREVTQ0FMRSh6MSArIHoyLCBDT05TVF9CSVRTK1BBU1MxX0JJVFMpOwotCi0gICAgLyogT2RkIHBhcnQgKi8KLQotICAgIHRtcDEgPSBNVUxUSVBMWSh0bXAxMCArIHRtcDExLCBGSVgoMS4yMjE3NjU2NzcpKTsgICAvKiAoYzMrYzEtYzUpLzIgKi8KLSAgICB0bXAyID0gTVVMVElQTFkodG1wMTAgLSB0bXAxMSwgRklYKDAuMjIyMzgzNDY0KSk7ICAgLyogKGMzK2M1LWMxKS8yICovCi0gICAgdG1wMCA9IHRtcDEgLSB0bXAyOwotICAgIHRtcDEgKz0gdG1wMjsKLSAgICB0bXAyID0gTVVMVElQTFkodG1wMTEgKyB0bXAxMiwgLSBGSVgoMS44MDA4MjQ1MjMpKTsgLyogLWMxICovCi0gICAgdG1wMSArPSB0bXAyOwotICAgIHRtcDMgPSBNVUxUSVBMWSh0bXAxMCArIHRtcDEyLCBGSVgoMC44MDE0NDIzMTApKTsgICAvKiBjNSAqLwotICAgIHRtcDAgKz0gdG1wMzsKLSAgICB0bXAyICs9IHRtcDMgKyBNVUxUSVBMWSh0bXAxMiwgRklYKDIuNDQzNTMxMzU1KSk7ICAgLyogYzMrYzEtYzUgKi8KLQotICAgIGRhdGFwdHJbRENUU0laRSoxXSA9IChEQ1RFTEVNKSBERVNDQUxFKHRtcDAsIENPTlNUX0JJVFMrUEFTUzFfQklUUyk7Ci0gICAgZGF0YXB0cltEQ1RTSVpFKjNdID0gKERDVEVMRU0pIERFU0NBTEUodG1wMSwgQ09OU1RfQklUUytQQVNTMV9CSVRTKTsKLSAgICBkYXRhcHRyW0RDVFNJWkUqNV0gPSAoRENURUxFTSkgREVTQ0FMRSh0bXAyLCBDT05TVF9CSVRTK1BBU1MxX0JJVFMpOwotCi0gICAgZGF0YXB0cisrOwkJCS8qIGFkdmFuY2UgcG9pbnRlciB0byBuZXh0IGNvbHVtbiAqLwotICB9Ci19Ci0KLQotLyoKLSAqIFBlcmZvcm0gdGhlIGZvcndhcmQgRENUIG9uIGEgNng2IHNhbXBsZSBibG9jay4KLSAqLwotCi1HTE9CQUwodm9pZCkKLWpwZWdfZmRjdF82eDYgKERDVEVMRU0gKiBkYXRhLCBKU0FNUEFSUkFZIHNhbXBsZV9kYXRhLCBKRElNRU5TSU9OIHN0YXJ0X2NvbCkKLXsKLSAgSU5UMzIgdG1wMCwgdG1wMSwgdG1wMjsKLSAgSU5UMzIgdG1wMTAsIHRtcDExLCB0bXAxMjsKLSAgRENURUxFTSAqZGF0YXB0cjsKLSAgSlNBTVBST1cgZWxlbXB0cjsKLSAgaW50IGN0cjsKLSAgU0hJRlRfVEVNUFMKLQotICAvKiBQcmUtemVybyBvdXRwdXQgY29lZmZpY2llbnQgYmxvY2suICovCi0gIE1FTVpFUk8oZGF0YSwgU0laRU9GKERDVEVMRU0pICogRENUU0laRTIpOwotCi0gIC8qIFBhc3MgMTogcHJvY2VzcyByb3dzLiAqLwotICAvKiBOb3RlIHJlc3VsdHMgYXJlIHNjYWxlZCB1cCBieSBzcXJ0KDgpIGNvbXBhcmVkIHRvIGEgdHJ1ZSBEQ1Q7ICovCi0gIC8qIGZ1cnRoZXJtb3JlLCB3ZSBzY2FsZSB0aGUgcmVzdWx0cyBieSAyKipQQVNTMV9CSVRTLiAqLwotICAvKiBjSyByZXByZXNlbnRzIHNxcnQoMikgKiBjb3MoSypwaS8xMikuICovCi0KLSAgZGF0YXB0ciA9IGRhdGE7Ci0gIGZvciAoY3RyID0gMDsgY3RyIDwgNjsgY3RyKyspIHsKLSAgICBlbGVtcHRyID0gc2FtcGxlX2RhdGFbY3RyXSArIHN0YXJ0X2NvbDsKLQotICAgIC8qIEV2ZW4gcGFydCAqLwotCi0gICAgdG1wMCA9IEdFVEpTQU1QTEUoZWxlbXB0clswXSkgKyBHRVRKU0FNUExFKGVsZW1wdHJbNV0pOwotICAgIHRtcDExID0gR0VUSlNBTVBMRShlbGVtcHRyWzFdKSArIEdFVEpTQU1QTEUoZWxlbXB0cls0XSk7Ci0gICAgdG1wMiA9IEdFVEpTQU1QTEUoZWxlbXB0clsyXSkgKyBHRVRKU0FNUExFKGVsZW1wdHJbM10pOwotCi0gICAgdG1wMTAgPSB0bXAwICsgdG1wMjsKLSAgICB0bXAxMiA9IHRtcDAgLSB0bXAyOwotCi0gICAgdG1wMCA9IEdFVEpTQU1QTEUoZWxlbXB0clswXSkgLSBHRVRKU0FNUExFKGVsZW1wdHJbNV0pOwotICAgIHRtcDEgPSBHRVRKU0FNUExFKGVsZW1wdHJbMV0pIC0gR0VUSlNBTVBMRShlbGVtcHRyWzRdKTsKLSAgICB0bXAyID0gR0VUSlNBTVBMRShlbGVtcHRyWzJdKSAtIEdFVEpTQU1QTEUoZWxlbXB0clszXSk7Ci0KLSAgICAvKiBBcHBseSB1bnNpZ25lZC0+c2lnbmVkIGNvbnZlcnNpb24gKi8KLSAgICBkYXRhcHRyWzBdID0gKERDVEVMRU0pCi0gICAgICAoKHRtcDEwICsgdG1wMTEgLSA2ICogQ0VOVEVSSlNBTVBMRSkgPDwgUEFTUzFfQklUUyk7Ci0gICAgZGF0YXB0clsyXSA9IChEQ1RFTEVNKQotICAgICAgREVTQ0FMRShNVUxUSVBMWSh0bXAxMiwgRklYKDEuMjI0NzQ0ODcxKSksICAgICAgICAgICAgICAgICAvKiBjMiAqLwotCSAgICAgIENPTlNUX0JJVFMtUEFTUzFfQklUUyk7Ci0gICAgZGF0YXB0cls0XSA9IChEQ1RFTEVNKQotICAgICAgREVTQ0FMRShNVUxUSVBMWSh0bXAxMCAtIHRtcDExIC0gdG1wMTEsIEZJWCgwLjcwNzEwNjc4MSkpLCAvKiBjNCAqLwotCSAgICAgIENPTlNUX0JJVFMtUEFTUzFfQklUUyk7Ci0KLSAgICAvKiBPZGQgcGFydCAqLwotCi0gICAgdG1wMTAgPSBERVNDQUxFKE1VTFRJUExZKHRtcDAgKyB0bXAyLCBGSVgoMC4zNjYwMjU0MDQpKSwgICAgIC8qIGM1ICovCi0JCSAgICBDT05TVF9CSVRTLVBBU1MxX0JJVFMpOwotCi0gICAgZGF0YXB0clsxXSA9IChEQ1RFTEVNKSAodG1wMTAgKyAoKHRtcDAgKyB0bXAxKSA8PCBQQVNTMV9CSVRTKSk7Ci0gICAgZGF0YXB0clszXSA9IChEQ1RFTEVNKSAoKHRtcDAgLSB0bXAxIC0gdG1wMikgPDwgUEFTUzFfQklUUyk7Ci0gICAgZGF0YXB0cls1XSA9IChEQ1RFTEVNKSAodG1wMTAgKyAoKHRtcDIgLSB0bXAxKSA8PCBQQVNTMV9CSVRTKSk7Ci0KLSAgICBkYXRhcHRyICs9IERDVFNJWkU7CQkvKiBhZHZhbmNlIHBvaW50ZXIgdG8gbmV4dCByb3cgKi8KLSAgfQotCi0gIC8qIFBhc3MgMjogcHJvY2VzcyBjb2x1bW5zLgotICAgKiBXZSByZW1vdmUgdGhlIFBBU1MxX0JJVFMgc2NhbGluZywgYnV0IGxlYXZlIHRoZSByZXN1bHRzIHNjYWxlZCB1cAotICAgKiBieSBhbiBvdmVyYWxsIGZhY3RvciBvZiA4LgotICAgKiBXZSBtdXN0IGFsc28gc2NhbGUgdGhlIG91dHB1dCBieSAoOC82KSoqMiA9IDE2LzksIHdoaWNoIHdlIGZvbGQKLSAgICogaW50byB0aGUgY29uc3RhbnQgbXVsdGlwbGllcnM6Ci0gICAqIGNLIG5vdyByZXByZXNlbnRzIHNxcnQoMikgKiBjb3MoSypwaS8xMikgKiAxNi85LgotICAgKi8KLQotICBkYXRhcHRyID0gZGF0YTsKLSAgZm9yIChjdHIgPSAwOyBjdHIgPCA2OyBjdHIrKykgewotICAgIC8qIEV2ZW4gcGFydCAqLwotCi0gICAgdG1wMCA9IGRhdGFwdHJbRENUU0laRSowXSArIGRhdGFwdHJbRENUU0laRSo1XTsKLSAgICB0bXAxMSA9IGRhdGFwdHJbRENUU0laRSoxXSArIGRhdGFwdHJbRENUU0laRSo0XTsKLSAgICB0bXAyID0gZGF0YXB0cltEQ1RTSVpFKjJdICsgZGF0YXB0cltEQ1RTSVpFKjNdOwotCi0gICAgdG1wMTAgPSB0bXAwICsgdG1wMjsKLSAgICB0bXAxMiA9IHRtcDAgLSB0bXAyOwotCi0gICAgdG1wMCA9IGRhdGFwdHJbRENUU0laRSowXSAtIGRhdGFwdHJbRENUU0laRSo1XTsKLSAgICB0bXAxID0gZGF0YXB0cltEQ1RTSVpFKjFdIC0gZGF0YXB0cltEQ1RTSVpFKjRdOwotICAgIHRtcDIgPSBkYXRhcHRyW0RDVFNJWkUqMl0gLSBkYXRhcHRyW0RDVFNJWkUqM107Ci0KLSAgICBkYXRhcHRyW0RDVFNJWkUqMF0gPSAoRENURUxFTSkKLSAgICAgIERFU0NBTEUoTVVMVElQTFkodG1wMTAgKyB0bXAxMSwgRklYKDEuNzc3Nzc3Nzc4KSksICAgICAgICAgLyogMTYvOSAqLwotCSAgICAgIENPTlNUX0JJVFMrUEFTUzFfQklUUyk7Ci0gICAgZGF0YXB0cltEQ1RTSVpFKjJdID0gKERDVEVMRU0pCi0gICAgICBERVNDQUxFKE1VTFRJUExZKHRtcDEyLCBGSVgoMi4xNzczMjQyMTYpKSwgICAgICAgICAgICAgICAgIC8qIGMyICovCi0JICAgICAgQ09OU1RfQklUUytQQVNTMV9CSVRTKTsKLSAgICBkYXRhcHRyW0RDVFNJWkUqNF0gPSAoRENURUxFTSkKLSAgICAgIERFU0NBTEUoTVVMVElQTFkodG1wMTAgLSB0bXAxMSAtIHRtcDExLCBGSVgoMS4yNTcwNzg3MjIpKSwgLyogYzQgKi8KLQkgICAgICBDT05TVF9CSVRTK1BBU1MxX0JJVFMpOwotCi0gICAgLyogT2RkIHBhcnQgKi8KLQotICAgIHRtcDEwID0gTVVMVElQTFkodG1wMCArIHRtcDIsIEZJWCgwLjY1MDcxMTgyOSkpOyAgICAgICAgICAgICAvKiBjNSAqLwotCi0gICAgZGF0YXB0cltEQ1RTSVpFKjFdID0gKERDVEVMRU0pCi0gICAgICBERVNDQUxFKHRtcDEwICsgTVVMVElQTFkodG1wMCArIHRtcDEsIEZJWCgxLjc3Nzc3Nzc3OCkpLCAgIC8qIDE2LzkgKi8KLQkgICAgICBDT05TVF9CSVRTK1BBU1MxX0JJVFMpOwotICAgIGRhdGFwdHJbRENUU0laRSozXSA9IChEQ1RFTEVNKQotICAgICAgREVTQ0FMRShNVUxUSVBMWSh0bXAwIC0gdG1wMSAtIHRtcDIsIEZJWCgxLjc3Nzc3Nzc3OCkpLCAgICAvKiAxNi85ICovCi0JICAgICAgQ09OU1RfQklUUytQQVNTMV9CSVRTKTsKLSAgICBkYXRhcHRyW0RDVFNJWkUqNV0gPSAoRENURUxFTSkKLSAgICAgIERFU0NBTEUodG1wMTAgKyBNVUxUSVBMWSh0bXAyIC0gdG1wMSwgRklYKDEuNzc3Nzc3Nzc4KSksICAgLyogMTYvOSAqLwotCSAgICAgIENPTlNUX0JJVFMrUEFTUzFfQklUUyk7Ci0KLSAgICBkYXRhcHRyKys7CQkJLyogYWR2YW5jZSBwb2ludGVyIHRvIG5leHQgY29sdW1uICovCi0gIH0KLX0KLQotCi0vKgotICogUGVyZm9ybSB0aGUgZm9yd2FyZCBEQ1Qgb24gYSA1eDUgc2FtcGxlIGJsb2NrLgotICovCi0KLUdMT0JBTCh2b2lkKQotanBlZ19mZGN0XzV4NSAoRENURUxFTSAqIGRhdGEsIEpTQU1QQVJSQVkgc2FtcGxlX2RhdGEsIEpESU1FTlNJT04gc3RhcnRfY29sKQotewotICBJTlQzMiB0bXAwLCB0bXAxLCB0bXAyOwotICBJTlQzMiB0bXAxMCwgdG1wMTE7Ci0gIERDVEVMRU0gKmRhdGFwdHI7Ci0gIEpTQU1QUk9XIGVsZW1wdHI7Ci0gIGludCBjdHI7Ci0gIFNISUZUX1RFTVBTCi0KLSAgLyogUHJlLXplcm8gb3V0cHV0IGNvZWZmaWNpZW50IGJsb2NrLiAqLwotICBNRU1aRVJPKGRhdGEsIFNJWkVPRihEQ1RFTEVNKSAqIERDVFNJWkUyKTsKLQotICAvKiBQYXNzIDE6IHByb2Nlc3Mgcm93cy4gKi8KLSAgLyogTm90ZSByZXN1bHRzIGFyZSBzY2FsZWQgdXAgYnkgc3FydCg4KSBjb21wYXJlZCB0byBhIHRydWUgRENUOyAqLwotICAvKiBmdXJ0aGVybW9yZSwgd2Ugc2NhbGUgdGhlIHJlc3VsdHMgYnkgMioqUEFTUzFfQklUUy4gKi8KLSAgLyogV2Ugc2NhbGUgdGhlIHJlc3VsdHMgZnVydGhlciBieSAyIGFzIHBhcnQgb2Ygb3V0cHV0IGFkYXB0aW9uICovCi0gIC8qIHNjYWxpbmcgZm9yIGRpZmZlcmVudCBEQ1Qgc2l6ZS4gKi8KLSAgLyogY0sgcmVwcmVzZW50cyBzcXJ0KDIpICogY29zKEsqcGkvMTApLiAqLwotCi0gIGRhdGFwdHIgPSBkYXRhOwotICBmb3IgKGN0ciA9IDA7IGN0ciA8IDU7IGN0cisrKSB7Ci0gICAgZWxlbXB0ciA9IHNhbXBsZV9kYXRhW2N0cl0gKyBzdGFydF9jb2w7Ci0KLSAgICAvKiBFdmVuIHBhcnQgKi8KLQotICAgIHRtcDAgPSBHRVRKU0FNUExFKGVsZW1wdHJbMF0pICsgR0VUSlNBTVBMRShlbGVtcHRyWzRdKTsKLSAgICB0bXAxID0gR0VUSlNBTVBMRShlbGVtcHRyWzFdKSArIEdFVEpTQU1QTEUoZWxlbXB0clszXSk7Ci0gICAgdG1wMiA9IEdFVEpTQU1QTEUoZWxlbXB0clsyXSk7Ci0KLSAgICB0bXAxMCA9IHRtcDAgKyB0bXAxOwotICAgIHRtcDExID0gdG1wMCAtIHRtcDE7Ci0KLSAgICB0bXAwID0gR0VUSlNBTVBMRShlbGVtcHRyWzBdKSAtIEdFVEpTQU1QTEUoZWxlbXB0cls0XSk7Ci0gICAgdG1wMSA9IEdFVEpTQU1QTEUoZWxlbXB0clsxXSkgLSBHRVRKU0FNUExFKGVsZW1wdHJbM10pOwotCi0gICAgLyogQXBwbHkgdW5zaWduZWQtPnNpZ25lZCBjb252ZXJzaW9uICovCi0gICAgZGF0YXB0clswXSA9IChEQ1RFTEVNKQotICAgICAgKCh0bXAxMCArIHRtcDIgLSA1ICogQ0VOVEVSSlNBTVBMRSkgPDwgKFBBU1MxX0JJVFMrMSkpOwotICAgIHRtcDExID0gTVVMVElQTFkodG1wMTEsIEZJWCgwLjc5MDU2OTQxNSkpOyAgICAgICAgICAvKiAoYzIrYzQpLzIgKi8KLSAgICB0bXAxMCAtPSB0bXAyIDw8IDI7Ci0gICAgdG1wMTAgPSBNVUxUSVBMWSh0bXAxMCwgRklYKDAuMzUzNTUzMzkxKSk7ICAgICAgICAgIC8qIChjMi1jNCkvMiAqLwotICAgIGRhdGFwdHJbMl0gPSAoRENURUxFTSkgREVTQ0FMRSh0bXAxMSArIHRtcDEwLCBDT05TVF9CSVRTLVBBU1MxX0JJVFMtMSk7Ci0gICAgZGF0YXB0cls0XSA9IChEQ1RFTEVNKSBERVNDQUxFKHRtcDExIC0gdG1wMTAsIENPTlNUX0JJVFMtUEFTUzFfQklUUy0xKTsKLQotICAgIC8qIE9kZCBwYXJ0ICovCi0KLSAgICB0bXAxMCA9IE1VTFRJUExZKHRtcDAgKyB0bXAxLCBGSVgoMC44MzEyNTM4NzYpKTsgICAgLyogYzMgKi8KLQotICAgIGRhdGFwdHJbMV0gPSAoRENURUxFTSkKLSAgICAgIERFU0NBTEUodG1wMTAgKyBNVUxUSVBMWSh0bXAwLCBGSVgoMC41MTM3NDMxNDgpKSwgLyogYzEtYzMgKi8KLQkgICAgICBDT05TVF9CSVRTLVBBU1MxX0JJVFMtMSk7Ci0gICAgZGF0YXB0clszXSA9IChEQ1RFTEVNKQotICAgICAgREVTQ0FMRSh0bXAxMCAtIE1VTFRJUExZKHRtcDEsIEZJWCgyLjE3NjI1MDg5OSkpLCAvKiBjMStjMyAqLwotCSAgICAgIENPTlNUX0JJVFMtUEFTUzFfQklUUy0xKTsKLQotICAgIGRhdGFwdHIgKz0gRENUU0laRTsJCS8qIGFkdmFuY2UgcG9pbnRlciB0byBuZXh0IHJvdyAqLwotICB9Ci0KLSAgLyogUGFzcyAyOiBwcm9jZXNzIGNvbHVtbnMuCi0gICAqIFdlIHJlbW92ZSB0aGUgUEFTUzFfQklUUyBzY2FsaW5nLCBidXQgbGVhdmUgdGhlIHJlc3VsdHMgc2NhbGVkIHVwCi0gICAqIGJ5IGFuIG92ZXJhbGwgZmFjdG9yIG9mIDguCi0gICAqIFdlIG11c3QgYWxzbyBzY2FsZSB0aGUgb3V0cHV0IGJ5ICg4LzUpKioyID0gNjQvMjUsIHdoaWNoIHdlIHBhcnRpYWxseQotICAgKiBmb2xkIGludG8gdGhlIGNvbnN0YW50IG11bHRpcGxpZXJzIChvdGhlciBwYXJ0IHdhcyBkb25lIGluIHBhc3MgMSk6Ci0gICAqIGNLIG5vdyByZXByZXNlbnRzIHNxcnQoMikgKiBjb3MoSypwaS8xMCkgKiAzMi8yNS4KLSAgICovCi0KLSAgZGF0YXB0ciA9IGRhdGE7Ci0gIGZvciAoY3RyID0gMDsgY3RyIDwgNTsgY3RyKyspIHsKLSAgICAvKiBFdmVuIHBhcnQgKi8KLQotICAgIHRtcDAgPSBkYXRhcHRyW0RDVFNJWkUqMF0gKyBkYXRhcHRyW0RDVFNJWkUqNF07Ci0gICAgdG1wMSA9IGRhdGFwdHJbRENUU0laRSoxXSArIGRhdGFwdHJbRENUU0laRSozXTsKLSAgICB0bXAyID0gZGF0YXB0cltEQ1RTSVpFKjJdOwotCi0gICAgdG1wMTAgPSB0bXAwICsgdG1wMTsKLSAgICB0bXAxMSA9IHRtcDAgLSB0bXAxOwotCi0gICAgdG1wMCA9IGRhdGFwdHJbRENUU0laRSowXSAtIGRhdGFwdHJbRENUU0laRSo0XTsKLSAgICB0bXAxID0gZGF0YXB0cltEQ1RTSVpFKjFdIC0gZGF0YXB0cltEQ1RTSVpFKjNdOwotCi0gICAgZGF0YXB0cltEQ1RTSVpFKjBdID0gKERDVEVMRU0pCi0gICAgICBERVNDQUxFKE1VTFRJUExZKHRtcDEwICsgdG1wMiwgRklYKDEuMjgpKSwgICAgICAgIC8qIDMyLzI1ICovCi0JICAgICAgQ09OU1RfQklUUytQQVNTMV9CSVRTKTsKLSAgICB0bXAxMSA9IE1VTFRJUExZKHRtcDExLCBGSVgoMS4wMTE5Mjg4NTEpKTsgICAgICAgICAgLyogKGMyK2M0KS8yICovCi0gICAgdG1wMTAgLT0gdG1wMiA8PCAyOwotICAgIHRtcDEwID0gTVVMVElQTFkodG1wMTAsIEZJWCgwLjQ1MjU0ODM0MCkpOyAgICAgICAgICAvKiAoYzItYzQpLzIgKi8KLSAgICBkYXRhcHRyW0RDVFNJWkUqMl0gPSAoRENURUxFTSkgREVTQ0FMRSh0bXAxMSArIHRtcDEwLCBDT05TVF9CSVRTK1BBU1MxX0JJVFMpOwotICAgIGRhdGFwdHJbRENUU0laRSo0XSA9IChEQ1RFTEVNKSBERVNDQUxFKHRtcDExIC0gdG1wMTAsIENPTlNUX0JJVFMrUEFTUzFfQklUUyk7Ci0KLSAgICAvKiBPZGQgcGFydCAqLwotCi0gICAgdG1wMTAgPSBNVUxUSVBMWSh0bXAwICsgdG1wMSwgRklYKDEuMDY0MDA0OTYxKSk7ICAgIC8qIGMzICovCi0KLSAgICBkYXRhcHRyW0RDVFNJWkUqMV0gPSAoRENURUxFTSkKLSAgICAgIERFU0NBTEUodG1wMTAgKyBNVUxUSVBMWSh0bXAwLCBGSVgoMC42NTc1OTEyMzApKSwgLyogYzEtYzMgKi8KLQkgICAgICBDT05TVF9CSVRTK1BBU1MxX0JJVFMpOwotICAgIGRhdGFwdHJbRENUU0laRSozXSA9IChEQ1RFTEVNKQotICAgICAgREVTQ0FMRSh0bXAxMCAtIE1VTFRJUExZKHRtcDEsIEZJWCgyLjc4NTYwMTE1MSkpLCAvKiBjMStjMyAqLwotCSAgICAgIENPTlNUX0JJVFMrUEFTUzFfQklUUyk7Ci0KLSAgICBkYXRhcHRyKys7CQkJLyogYWR2YW5jZSBwb2ludGVyIHRvIG5leHQgY29sdW1uICovCi0gIH0KLX0KLQotCi0vKgotICogUGVyZm9ybSB0aGUgZm9yd2FyZCBEQ1Qgb24gYSA0eDQgc2FtcGxlIGJsb2NrLgotICovCi0KLUdMT0JBTCh2b2lkKQotanBlZ19mZGN0XzR4NCAoRENURUxFTSAqIGRhdGEsIEpTQU1QQVJSQVkgc2FtcGxlX2RhdGEsIEpESU1FTlNJT04gc3RhcnRfY29sKQotewotICBJTlQzMiB0bXAwLCB0bXAxOwotICBJTlQzMiB0bXAxMCwgdG1wMTE7Ci0gIERDVEVMRU0gKmRhdGFwdHI7Ci0gIEpTQU1QUk9XIGVsZW1wdHI7Ci0gIGludCBjdHI7Ci0gIFNISUZUX1RFTVBTCi0KLSAgLyogUHJlLXplcm8gb3V0cHV0IGNvZWZmaWNpZW50IGJsb2NrLiAqLwotICBNRU1aRVJPKGRhdGEsIFNJWkVPRihEQ1RFTEVNKSAqIERDVFNJWkUyKTsKLQotICAvKiBQYXNzIDE6IHByb2Nlc3Mgcm93cy4gKi8KLSAgLyogTm90ZSByZXN1bHRzIGFyZSBzY2FsZWQgdXAgYnkgc3FydCg4KSBjb21wYXJlZCB0byBhIHRydWUgRENUOyAqLwotICAvKiBmdXJ0aGVybW9yZSwgd2Ugc2NhbGUgdGhlIHJlc3VsdHMgYnkgMioqUEFTUzFfQklUUy4gKi8KLSAgLyogV2UgbXVzdCBhbHNvIHNjYWxlIHRoZSBvdXRwdXQgYnkgKDgvNCkqKjIgPSAyKioyLCB3aGljaCB3ZSBhZGQgaGVyZS4gKi8KLSAgLyogY0sgcmVwcmVzZW50cyBzcXJ0KDIpICogY29zKEsqcGkvMTYpIFtyZWZlcnMgdG8gOC1wb2ludCBGRENUXS4gKi8KLQotICBkYXRhcHRyID0gZGF0YTsKLSAgZm9yIChjdHIgPSAwOyBjdHIgPCA0OyBjdHIrKykgewotICAgIGVsZW1wdHIgPSBzYW1wbGVfZGF0YVtjdHJdICsgc3RhcnRfY29sOwotCi0gICAgLyogRXZlbiBwYXJ0ICovCi0KLSAgICB0bXAwID0gR0VUSlNBTVBMRShlbGVtcHRyWzBdKSArIEdFVEpTQU1QTEUoZWxlbXB0clszXSk7Ci0gICAgdG1wMSA9IEdFVEpTQU1QTEUoZWxlbXB0clsxXSkgKyBHRVRKU0FNUExFKGVsZW1wdHJbMl0pOwotCi0gICAgdG1wMTAgPSBHRVRKU0FNUExFKGVsZW1wdHJbMF0pIC0gR0VUSlNBTVBMRShlbGVtcHRyWzNdKTsKLSAgICB0bXAxMSA9IEdFVEpTQU1QTEUoZWxlbXB0clsxXSkgLSBHRVRKU0FNUExFKGVsZW1wdHJbMl0pOwotCi0gICAgLyogQXBwbHkgdW5zaWduZWQtPnNpZ25lZCBjb252ZXJzaW9uICovCi0gICAgZGF0YXB0clswXSA9IChEQ1RFTEVNKQotICAgICAgKCh0bXAwICsgdG1wMSAtIDQgKiBDRU5URVJKU0FNUExFKSA8PCAoUEFTUzFfQklUUysyKSk7Ci0gICAgZGF0YXB0clsyXSA9IChEQ1RFTEVNKSAoKHRtcDAgLSB0bXAxKSA8PCAoUEFTUzFfQklUUysyKSk7Ci0KLSAgICAvKiBPZGQgcGFydCAqLwotCi0gICAgdG1wMCA9IE1VTFRJUExZKHRtcDEwICsgdG1wMTEsIEZJWF8wXzU0MTE5NjEwMCk7ICAgICAgIC8qIGM2ICovCi0gICAgLyogQWRkIGZ1ZGdlIGZhY3RvciBoZXJlIGZvciBmaW5hbCBkZXNjYWxlLiAqLwotICAgIHRtcDAgKz0gT05FIDw8IChDT05TVF9CSVRTLVBBU1MxX0JJVFMtMyk7Ci0KLSAgICBkYXRhcHRyWzFdID0gKERDVEVMRU0pCi0gICAgICBSSUdIVF9TSElGVCh0bXAwICsgTVVMVElQTFkodG1wMTAsIEZJWF8wXzc2NTM2Njg2NSksIC8qIGMyLWM2ICovCi0JCSAgQ09OU1RfQklUUy1QQVNTMV9CSVRTLTIpOwotICAgIGRhdGFwdHJbM10gPSAoRENURUxFTSkKLSAgICAgIFJJR0hUX1NISUZUKHRtcDAgLSBNVUxUSVBMWSh0bXAxMSwgRklYXzFfODQ3NzU5MDY1KSwgLyogYzIrYzYgKi8KLQkJICBDT05TVF9CSVRTLVBBU1MxX0JJVFMtMik7Ci0KLSAgICBkYXRhcHRyICs9IERDVFNJWkU7CQkvKiBhZHZhbmNlIHBvaW50ZXIgdG8gbmV4dCByb3cgKi8KLSAgfQotCi0gIC8qIFBhc3MgMjogcHJvY2VzcyBjb2x1bW5zLgotICAgKiBXZSByZW1vdmUgdGhlIFBBU1MxX0JJVFMgc2NhbGluZywgYnV0IGxlYXZlIHRoZSByZXN1bHRzIHNjYWxlZCB1cAotICAgKiBieSBhbiBvdmVyYWxsIGZhY3RvciBvZiA4LgotICAgKi8KLQotICBkYXRhcHRyID0gZGF0YTsKLSAgZm9yIChjdHIgPSAwOyBjdHIgPCA0OyBjdHIrKykgewotICAgIC8qIEV2ZW4gcGFydCAqLwotCi0gICAgLyogQWRkIGZ1ZGdlIGZhY3RvciBoZXJlIGZvciBmaW5hbCBkZXNjYWxlLiAqLwotICAgIHRtcDAgPSBkYXRhcHRyW0RDVFNJWkUqMF0gKyBkYXRhcHRyW0RDVFNJWkUqM10gKyAoT05FIDw8IChQQVNTMV9CSVRTLTEpKTsKLSAgICB0bXAxID0gZGF0YXB0cltEQ1RTSVpFKjFdICsgZGF0YXB0cltEQ1RTSVpFKjJdOwotCi0gICAgdG1wMTAgPSBkYXRhcHRyW0RDVFNJWkUqMF0gLSBkYXRhcHRyW0RDVFNJWkUqM107Ci0gICAgdG1wMTEgPSBkYXRhcHRyW0RDVFNJWkUqMV0gLSBkYXRhcHRyW0RDVFNJWkUqMl07Ci0KLSAgICBkYXRhcHRyW0RDVFNJWkUqMF0gPSAoRENURUxFTSkgUklHSFRfU0hJRlQodG1wMCArIHRtcDEsIFBBU1MxX0JJVFMpOwotICAgIGRhdGFwdHJbRENUU0laRSoyXSA9IChEQ1RFTEVNKSBSSUdIVF9TSElGVCh0bXAwIC0gdG1wMSwgUEFTUzFfQklUUyk7Ci0KLSAgICAvKiBPZGQgcGFydCAqLwotCi0gICAgdG1wMCA9IE1VTFRJUExZKHRtcDEwICsgdG1wMTEsIEZJWF8wXzU0MTE5NjEwMCk7ICAgICAgIC8qIGM2ICovCi0gICAgLyogQWRkIGZ1ZGdlIGZhY3RvciBoZXJlIGZvciBmaW5hbCBkZXNjYWxlLiAqLwotICAgIHRtcDAgKz0gT05FIDw8IChDT05TVF9CSVRTK1BBU1MxX0JJVFMtMSk7Ci0KLSAgICBkYXRhcHRyW0RDVFNJWkUqMV0gPSAoRENURUxFTSkKLSAgICAgIFJJR0hUX1NISUZUKHRtcDAgKyBNVUxUSVBMWSh0bXAxMCwgRklYXzBfNzY1MzY2ODY1KSwgLyogYzItYzYgKi8KLQkJICBDT05TVF9CSVRTK1BBU1MxX0JJVFMpOwotICAgIGRhdGFwdHJbRENUU0laRSozXSA9IChEQ1RFTEVNKQotICAgICAgUklHSFRfU0hJRlQodG1wMCAtIE1VTFRJUExZKHRtcDExLCBGSVhfMV84NDc3NTkwNjUpLCAvKiBjMitjNiAqLwotCQkgIENPTlNUX0JJVFMrUEFTUzFfQklUUyk7Ci0KLSAgICBkYXRhcHRyKys7CQkJLyogYWR2YW5jZSBwb2ludGVyIHRvIG5leHQgY29sdW1uICovCi0gIH0KLX0KLQotCi0vKgotICogUGVyZm9ybSB0aGUgZm9yd2FyZCBEQ1Qgb24gYSAzeDMgc2FtcGxlIGJsb2NrLgotICovCi0KLUdMT0JBTCh2b2lkKQotanBlZ19mZGN0XzN4MyAoRENURUxFTSAqIGRhdGEsIEpTQU1QQVJSQVkgc2FtcGxlX2RhdGEsIEpESU1FTlNJT04gc3RhcnRfY29sKQotewotICBJTlQzMiB0bXAwLCB0bXAxLCB0bXAyOwotICBEQ1RFTEVNICpkYXRhcHRyOwotICBKU0FNUFJPVyBlbGVtcHRyOwotICBpbnQgY3RyOwotICBTSElGVF9URU1QUwotCi0gIC8qIFByZS16ZXJvIG91dHB1dCBjb2VmZmljaWVudCBibG9jay4gKi8KLSAgTUVNWkVSTyhkYXRhLCBTSVpFT0YoRENURUxFTSkgKiBEQ1RTSVpFMik7Ci0KLSAgLyogUGFzcyAxOiBwcm9jZXNzIHJvd3MuICovCi0gIC8qIE5vdGUgcmVzdWx0cyBhcmUgc2NhbGVkIHVwIGJ5IHNxcnQoOCkgY29tcGFyZWQgdG8gYSB0cnVlIERDVDsgKi8KLSAgLyogZnVydGhlcm1vcmUsIHdlIHNjYWxlIHRoZSByZXN1bHRzIGJ5IDIqKlBBU1MxX0JJVFMuICovCi0gIC8qIFdlIHNjYWxlIHRoZSByZXN1bHRzIGZ1cnRoZXIgYnkgMioqMiBhcyBwYXJ0IG9mIG91dHB1dCBhZGFwdGlvbiAqLwotICAvKiBzY2FsaW5nIGZvciBkaWZmZXJlbnQgRENUIHNpemUuICovCi0gIC8qIGNLIHJlcHJlc2VudHMgc3FydCgyKSAqIGNvcyhLKnBpLzYpLiAqLwotCi0gIGRhdGFwdHIgPSBkYXRhOwotICBmb3IgKGN0ciA9IDA7IGN0ciA8IDM7IGN0cisrKSB7Ci0gICAgZWxlbXB0ciA9IHNhbXBsZV9kYXRhW2N0cl0gKyBzdGFydF9jb2w7Ci0KLSAgICAvKiBFdmVuIHBhcnQgKi8KLQotICAgIHRtcDAgPSBHRVRKU0FNUExFKGVsZW1wdHJbMF0pICsgR0VUSlNBTVBMRShlbGVtcHRyWzJdKTsKLSAgICB0bXAxID0gR0VUSlNBTVBMRShlbGVtcHRyWzFdKTsKLQotICAgIHRtcDIgPSBHRVRKU0FNUExFKGVsZW1wdHJbMF0pIC0gR0VUSlNBTVBMRShlbGVtcHRyWzJdKTsKLQotICAgIC8qIEFwcGx5IHVuc2lnbmVkLT5zaWduZWQgY29udmVyc2lvbiAqLwotICAgIGRhdGFwdHJbMF0gPSAoRENURUxFTSkKLSAgICAgICgodG1wMCArIHRtcDEgLSAzICogQ0VOVEVSSlNBTVBMRSkgPDwgKFBBU1MxX0JJVFMrMikpOwotICAgIGRhdGFwdHJbMl0gPSAoRENURUxFTSkKLSAgICAgIERFU0NBTEUoTVVMVElQTFkodG1wMCAtIHRtcDEgLSB0bXAxLCBGSVgoMC43MDcxMDY3ODEpKSwgLyogYzIgKi8KLQkgICAgICBDT05TVF9CSVRTLVBBU1MxX0JJVFMtMik7Ci0KLSAgICAvKiBPZGQgcGFydCAqLwotCi0gICAgZGF0YXB0clsxXSA9IChEQ1RFTEVNKQotICAgICAgREVTQ0FMRShNVUxUSVBMWSh0bXAyLCBGSVgoMS4yMjQ3NDQ4NzEpKSwgICAgICAgICAgICAgICAvKiBjMSAqLwotCSAgICAgIENPTlNUX0JJVFMtUEFTUzFfQklUUy0yKTsKLQotICAgIGRhdGFwdHIgKz0gRENUU0laRTsJCS8qIGFkdmFuY2UgcG9pbnRlciB0byBuZXh0IHJvdyAqLwotICB9Ci0KLSAgLyogUGFzcyAyOiBwcm9jZXNzIGNvbHVtbnMuCi0gICAqIFdlIHJlbW92ZSB0aGUgUEFTUzFfQklUUyBzY2FsaW5nLCBidXQgbGVhdmUgdGhlIHJlc3VsdHMgc2NhbGVkIHVwCi0gICAqIGJ5IGFuIG92ZXJhbGwgZmFjdG9yIG9mIDguCi0gICAqIFdlIG11c3QgYWxzbyBzY2FsZSB0aGUgb3V0cHV0IGJ5ICg4LzMpKioyID0gNjQvOSwgd2hpY2ggd2UgcGFydGlhbGx5Ci0gICAqIGZvbGQgaW50byB0aGUgY29uc3RhbnQgbXVsdGlwbGllcnMgKG90aGVyIHBhcnQgd2FzIGRvbmUgaW4gcGFzcyAxKToKLSAgICogY0sgbm93IHJlcHJlc2VudHMgc3FydCgyKSAqIGNvcyhLKnBpLzYpICogMTYvOS4KLSAgICovCi0KLSAgZGF0YXB0ciA9IGRhdGE7Ci0gIGZvciAoY3RyID0gMDsgY3RyIDwgMzsgY3RyKyspIHsKLSAgICAvKiBFdmVuIHBhcnQgKi8KLQotICAgIHRtcDAgPSBkYXRhcHRyW0RDVFNJWkUqMF0gKyBkYXRhcHRyW0RDVFNJWkUqMl07Ci0gICAgdG1wMSA9IGRhdGFwdHJbRENUU0laRSoxXTsKLQotICAgIHRtcDIgPSBkYXRhcHRyW0RDVFNJWkUqMF0gLSBkYXRhcHRyW0RDVFNJWkUqMl07Ci0KLSAgICBkYXRhcHRyW0RDVFNJWkUqMF0gPSAoRENURUxFTSkKLSAgICAgIERFU0NBTEUoTVVMVElQTFkodG1wMCArIHRtcDEsIEZJWCgxLjc3Nzc3Nzc3OCkpLCAgICAgICAgLyogMTYvOSAqLwotCSAgICAgIENPTlNUX0JJVFMrUEFTUzFfQklUUyk7Ci0gICAgZGF0YXB0cltEQ1RTSVpFKjJdID0gKERDVEVMRU0pCi0gICAgICBERVNDQUxFKE1VTFRJUExZKHRtcDAgLSB0bXAxIC0gdG1wMSwgRklYKDEuMjU3MDc4NzIyKSksIC8qIGMyICovCi0JICAgICAgQ09OU1RfQklUUytQQVNTMV9CSVRTKTsKLQotICAgIC8qIE9kZCBwYXJ0ICovCi0KLSAgICBkYXRhcHRyW0RDVFNJWkUqMV0gPSAoRENURUxFTSkKLSAgICAgIERFU0NBTEUoTVVMVElQTFkodG1wMiwgRklYKDIuMTc3MzI0MjE2KSksICAgICAgICAgICAgICAgLyogYzEgKi8KLQkgICAgICBDT05TVF9CSVRTK1BBU1MxX0JJVFMpOwotCi0gICAgZGF0YXB0cisrOwkJCS8qIGFkdmFuY2UgcG9pbnRlciB0byBuZXh0IGNvbHVtbiAqLwotICB9Ci19Ci0KLQotLyoKLSAqIFBlcmZvcm0gdGhlIGZvcndhcmQgRENUIG9uIGEgMngyIHNhbXBsZSBibG9jay4KLSAqLwotCi1HTE9CQUwodm9pZCkKLWpwZWdfZmRjdF8yeDIgKERDVEVMRU0gKiBkYXRhLCBKU0FNUEFSUkFZIHNhbXBsZV9kYXRhLCBKRElNRU5TSU9OIHN0YXJ0X2NvbCkKLXsKLSAgSU5UMzIgdG1wMCwgdG1wMSwgdG1wMiwgdG1wMzsKLSAgSlNBTVBST1cgZWxlbXB0cjsKLQotICAvKiBQcmUtemVybyBvdXRwdXQgY29lZmZpY2llbnQgYmxvY2suICovCi0gIE1FTVpFUk8oZGF0YSwgU0laRU9GKERDVEVMRU0pICogRENUU0laRTIpOwotCi0gIC8qIFBhc3MgMTogcHJvY2VzcyByb3dzLiAqLwotICAvKiBOb3RlIHJlc3VsdHMgYXJlIHNjYWxlZCB1cCBieSBzcXJ0KDgpIGNvbXBhcmVkIHRvIGEgdHJ1ZSBEQ1QuICovCi0KLSAgLyogUm93IDAgKi8KLSAgZWxlbXB0ciA9IHNhbXBsZV9kYXRhWzBdICsgc3RhcnRfY29sOwotCi0gIHRtcDAgPSBHRVRKU0FNUExFKGVsZW1wdHJbMF0pICsgR0VUSlNBTVBMRShlbGVtcHRyWzFdKTsKLSAgdG1wMSA9IEdFVEpTQU1QTEUoZWxlbXB0clswXSkgLSBHRVRKU0FNUExFKGVsZW1wdHJbMV0pOwotCi0gIC8qIFJvdyAxICovCi0gIGVsZW1wdHIgPSBzYW1wbGVfZGF0YVsxXSArIHN0YXJ0X2NvbDsKLQotICB0bXAyID0gR0VUSlNBTVBMRShlbGVtcHRyWzBdKSArIEdFVEpTQU1QTEUoZWxlbXB0clsxXSk7Ci0gIHRtcDMgPSBHRVRKU0FNUExFKGVsZW1wdHJbMF0pIC0gR0VUSlNBTVBMRShlbGVtcHRyWzFdKTsKLQotICAvKiBQYXNzIDI6IHByb2Nlc3MgY29sdW1ucy4KLSAgICogV2UgbGVhdmUgdGhlIHJlc3VsdHMgc2NhbGVkIHVwIGJ5IGFuIG92ZXJhbGwgZmFjdG9yIG9mIDguCi0gICAqIFdlIG11c3QgYWxzbyBzY2FsZSB0aGUgb3V0cHV0IGJ5ICg4LzIpKioyID0gMioqNC4KLSAgICovCi0KLSAgLyogQ29sdW1uIDAgKi8KLSAgLyogQXBwbHkgdW5zaWduZWQtPnNpZ25lZCBjb252ZXJzaW9uICovCi0gIGRhdGFbRENUU0laRSowXSA9IChEQ1RFTEVNKSAoKHRtcDAgKyB0bXAyIC0gNCAqIENFTlRFUkpTQU1QTEUpIDw8IDQpOwotICBkYXRhW0RDVFNJWkUqMV0gPSAoRENURUxFTSkgKCh0bXAwIC0gdG1wMikgPDwgNCk7Ci0KLSAgLyogQ29sdW1uIDEgKi8KLSAgZGF0YVtEQ1RTSVpFKjArMV0gPSAoRENURUxFTSkgKCh0bXAxICsgdG1wMykgPDwgNCk7Ci0gIGRhdGFbRENUU0laRSoxKzFdID0gKERDVEVMRU0pICgodG1wMSAtIHRtcDMpIDw8IDQpOwotfQotCi0KLS8qCi0gKiBQZXJmb3JtIHRoZSBmb3J3YXJkIERDVCBvbiBhIDF4MSBzYW1wbGUgYmxvY2suCi0gKi8KLQotR0xPQkFMKHZvaWQpCi1qcGVnX2ZkY3RfMXgxIChEQ1RFTEVNICogZGF0YSwgSlNBTVBBUlJBWSBzYW1wbGVfZGF0YSwgSkRJTUVOU0lPTiBzdGFydF9jb2wpCi17Ci0gIC8qIFByZS16ZXJvIG91dHB1dCBjb2VmZmljaWVudCBibG9jay4gKi8KLSAgTUVNWkVSTyhkYXRhLCBTSVpFT0YoRENURUxFTSkgKiBEQ1RTSVpFMik7Ci0KLSAgLyogV2UgbGVhdmUgdGhlIHJlc3VsdCBzY2FsZWQgdXAgYnkgYW4gb3ZlcmFsbCBmYWN0b3Igb2YgOC4gKi8KLSAgLyogV2UgbXVzdCBhbHNvIHNjYWxlIHRoZSBvdXRwdXQgYnkgKDgvMSkqKjIgPSAyKio2LiAqLwotICAvKiBBcHBseSB1bnNpZ25lZC0+c2lnbmVkIGNvbnZlcnNpb24gKi8KLSAgZGF0YVswXSA9IChEQ1RFTEVNKQotICAgICgoR0VUSlNBTVBMRShzYW1wbGVfZGF0YVswXVtzdGFydF9jb2xdKSAtIENFTlRFUkpTQU1QTEUpIDw8IDYpOwotfQotCi0KLS8qCi0gKiBQZXJmb3JtIHRoZSBmb3J3YXJkIERDVCBvbiBhIDl4OSBzYW1wbGUgYmxvY2suCi0gKi8KLQotR0xPQkFMKHZvaWQpCi1qcGVnX2ZkY3RfOXg5IChEQ1RFTEVNICogZGF0YSwgSlNBTVBBUlJBWSBzYW1wbGVfZGF0YSwgSkRJTUVOU0lPTiBzdGFydF9jb2wpCi17Ci0gIElOVDMyIHRtcDAsIHRtcDEsIHRtcDIsIHRtcDMsIHRtcDQ7Ci0gIElOVDMyIHRtcDEwLCB0bXAxMSwgdG1wMTIsIHRtcDEzOwotICBJTlQzMiB6MSwgejI7Ci0gIERDVEVMRU0gd29ya3NwYWNlWzhdOwotICBEQ1RFTEVNICpkYXRhcHRyOwotICBEQ1RFTEVNICp3c3B0cjsKLSAgSlNBTVBST1cgZWxlbXB0cjsKLSAgaW50IGN0cjsKLSAgU0hJRlRfVEVNUFMKLQotICAvKiBQYXNzIDE6IHByb2Nlc3Mgcm93cy4gKi8KLSAgLyogTm90ZSByZXN1bHRzIGFyZSBzY2FsZWQgdXAgYnkgc3FydCg4KSBjb21wYXJlZCB0byBhIHRydWUgRENUOyAqLwotICAvKiB3ZSBzY2FsZSB0aGUgcmVzdWx0cyBmdXJ0aGVyIGJ5IDIgYXMgcGFydCBvZiBvdXRwdXQgYWRhcHRpb24gKi8KLSAgLyogc2NhbGluZyBmb3IgZGlmZmVyZW50IERDVCBzaXplLiAqLwotICAvKiBjSyByZXByZXNlbnRzIHNxcnQoMikgKiBjb3MoSypwaS8xOCkuICovCi0KLSAgZGF0YXB0ciA9IGRhdGE7Ci0gIGN0ciA9IDA7Ci0gIGZvciAoOzspIHsKLSAgICBlbGVtcHRyID0gc2FtcGxlX2RhdGFbY3RyXSArIHN0YXJ0X2NvbDsKLQotICAgIC8qIEV2ZW4gcGFydCAqLwotCi0gICAgdG1wMCA9IEdFVEpTQU1QTEUoZWxlbXB0clswXSkgKyBHRVRKU0FNUExFKGVsZW1wdHJbOF0pOwotICAgIHRtcDEgPSBHRVRKU0FNUExFKGVsZW1wdHJbMV0pICsgR0VUSlNBTVBMRShlbGVtcHRyWzddKTsKLSAgICB0bXAyID0gR0VUSlNBTVBMRShlbGVtcHRyWzJdKSArIEdFVEpTQU1QTEUoZWxlbXB0cls2XSk7Ci0gICAgdG1wMyA9IEdFVEpTQU1QTEUoZWxlbXB0clszXSkgKyBHRVRKU0FNUExFKGVsZW1wdHJbNV0pOwotICAgIHRtcDQgPSBHRVRKU0FNUExFKGVsZW1wdHJbNF0pOwotCi0gICAgdG1wMTAgPSBHRVRKU0FNUExFKGVsZW1wdHJbMF0pIC0gR0VUSlNBTVBMRShlbGVtcHRyWzhdKTsKLSAgICB0bXAxMSA9IEdFVEpTQU1QTEUoZWxlbXB0clsxXSkgLSBHRVRKU0FNUExFKGVsZW1wdHJbN10pOwotICAgIHRtcDEyID0gR0VUSlNBTVBMRShlbGVtcHRyWzJdKSAtIEdFVEpTQU1QTEUoZWxlbXB0cls2XSk7Ci0gICAgdG1wMTMgPSBHRVRKU0FNUExFKGVsZW1wdHJbM10pIC0gR0VUSlNBTVBMRShlbGVtcHRyWzVdKTsKLQotICAgIHoxID0gdG1wMCArIHRtcDIgKyB0bXAzOwotICAgIHoyID0gdG1wMSArIHRtcDQ7Ci0gICAgLyogQXBwbHkgdW5zaWduZWQtPnNpZ25lZCBjb252ZXJzaW9uICovCi0gICAgZGF0YXB0clswXSA9IChEQ1RFTEVNKSAoKHoxICsgejIgLSA5ICogQ0VOVEVSSlNBTVBMRSkgPDwgMSk7Ci0gICAgZGF0YXB0cls2XSA9IChEQ1RFTEVNKQotICAgICAgREVTQ0FMRShNVUxUSVBMWSh6MSAtIHoyIC0gejIsIEZJWCgwLjcwNzEwNjc4MSkpLCAgLyogYzYgKi8KLQkgICAgICBDT05TVF9CSVRTLTEpOwotICAgIHoxID0gTVVMVElQTFkodG1wMCAtIHRtcDIsIEZJWCgxLjMyODkyNjA0OSkpOyAgICAgICAgLyogYzIgKi8KLSAgICB6MiA9IE1VTFRJUExZKHRtcDEgLSB0bXA0IC0gdG1wNCwgRklYKDAuNzA3MTA2NzgxKSk7IC8qIGM2ICovCi0gICAgZGF0YXB0clsyXSA9IChEQ1RFTEVNKQotICAgICAgREVTQ0FMRShNVUxUSVBMWSh0bXAyIC0gdG1wMywgRklYKDEuMDgzMzUwNDQxKSkgICAgLyogYzQgKi8KLQkgICAgICArIHoxICsgejIsIENPTlNUX0JJVFMtMSk7Ci0gICAgZGF0YXB0cls0XSA9IChEQ1RFTEVNKQotICAgICAgREVTQ0FMRShNVUxUSVBMWSh0bXAzIC0gdG1wMCwgRklYKDAuMjQ1NTc1NjA4KSkgICAgLyogYzggKi8KLQkgICAgICArIHoxIC0gejIsIENPTlNUX0JJVFMtMSk7Ci0KLSAgICAvKiBPZGQgcGFydCAqLwotCi0gICAgZGF0YXB0clszXSA9IChEQ1RFTEVNKQotICAgICAgREVTQ0FMRShNVUxUSVBMWSh0bXAxMCAtIHRtcDEyIC0gdG1wMTMsIEZJWCgxLjIyNDc0NDg3MSkpLCAvKiBjMyAqLwotCSAgICAgIENPTlNUX0JJVFMtMSk7Ci0KLSAgICB0bXAxMSA9IE1VTFRJUExZKHRtcDExLCBGSVgoMS4yMjQ3NDQ4NzEpKTsgICAgICAgIC8qIGMzICovCi0gICAgdG1wMCA9IE1VTFRJUExZKHRtcDEwICsgdG1wMTIsIEZJWCgwLjkwOTAzODk1NSkpOyAvKiBjNSAqLwotICAgIHRtcDEgPSBNVUxUSVBMWSh0bXAxMCArIHRtcDEzLCBGSVgoMC40ODM2ODk1MjUpKTsgLyogYzcgKi8KLQotICAgIGRhdGFwdHJbMV0gPSAoRENURUxFTSkgREVTQ0FMRSh0bXAxMSArIHRtcDAgKyB0bXAxLCBDT05TVF9CSVRTLTEpOwotCi0gICAgdG1wMiA9IE1VTFRJUExZKHRtcDEyIC0gdG1wMTMsIEZJWCgxLjM5MjcyODQ4MSkpOyAvKiBjMSAqLwotCi0gICAgZGF0YXB0cls1XSA9IChEQ1RFTEVNKSBERVNDQUxFKHRtcDAgLSB0bXAxMSAtIHRtcDIsIENPTlNUX0JJVFMtMSk7Ci0gICAgZGF0YXB0cls3XSA9IChEQ1RFTEVNKSBERVNDQUxFKHRtcDEgLSB0bXAxMSArIHRtcDIsIENPTlNUX0JJVFMtMSk7Ci0KLSAgICBjdHIrKzsKLQotICAgIGlmIChjdHIgIT0gRENUU0laRSkgewotICAgICAgaWYgKGN0ciA9PSA5KQotCWJyZWFrOwkJCS8qIERvbmUuICovCi0gICAgICBkYXRhcHRyICs9IERDVFNJWkU7CS8qIGFkdmFuY2UgcG9pbnRlciB0byBuZXh0IHJvdyAqLwotICAgIH0gZWxzZQotICAgICAgZGF0YXB0ciA9IHdvcmtzcGFjZTsJLyogc3dpdGNoIHBvaW50ZXIgdG8gZXh0ZW5kZWQgd29ya3NwYWNlICovCi0gIH0KLQotICAvKiBQYXNzIDI6IHByb2Nlc3MgY29sdW1ucy4KLSAgICogV2UgbGVhdmUgdGhlIHJlc3VsdHMgc2NhbGVkIHVwIGJ5IGFuIG92ZXJhbGwgZmFjdG9yIG9mIDguCi0gICAqIFdlIG11c3QgYWxzbyBzY2FsZSB0aGUgb3V0cHV0IGJ5ICg4LzkpKioyID0gNjQvODEsIHdoaWNoIHdlIHBhcnRpYWxseQotICAgKiBmb2xkIGludG8gdGhlIGNvbnN0YW50IG11bHRpcGxpZXJzIGFuZCBmaW5hbC9pbml0aWFsIHNoaWZ0aW5nOgotICAgKiBjSyBub3cgcmVwcmVzZW50cyBzcXJ0KDIpICogY29zKEsqcGkvMTgpICogMTI4LzgxLgotICAgKi8KLQotICBkYXRhcHRyID0gZGF0YTsKLSAgd3NwdHIgPSB3b3Jrc3BhY2U7Ci0gIGZvciAoY3RyID0gRENUU0laRS0xOyBjdHIgPj0gMDsgY3RyLS0pIHsKLSAgICAvKiBFdmVuIHBhcnQgKi8KLQotICAgIHRtcDAgPSBkYXRhcHRyW0RDVFNJWkUqMF0gKyB3c3B0cltEQ1RTSVpFKjBdOwotICAgIHRtcDEgPSBkYXRhcHRyW0RDVFNJWkUqMV0gKyBkYXRhcHRyW0RDVFNJWkUqN107Ci0gICAgdG1wMiA9IGRhdGFwdHJbRENUU0laRSoyXSArIGRhdGFwdHJbRENUU0laRSo2XTsKLSAgICB0bXAzID0gZGF0YXB0cltEQ1RTSVpFKjNdICsgZGF0YXB0cltEQ1RTSVpFKjVdOwotICAgIHRtcDQgPSBkYXRhcHRyW0RDVFNJWkUqNF07Ci0KLSAgICB0bXAxMCA9IGRhdGFwdHJbRENUU0laRSowXSAtIHdzcHRyW0RDVFNJWkUqMF07Ci0gICAgdG1wMTEgPSBkYXRhcHRyW0RDVFNJWkUqMV0gLSBkYXRhcHRyW0RDVFNJWkUqN107Ci0gICAgdG1wMTIgPSBkYXRhcHRyW0RDVFNJWkUqMl0gLSBkYXRhcHRyW0RDVFNJWkUqNl07Ci0gICAgdG1wMTMgPSBkYXRhcHRyW0RDVFNJWkUqM10gLSBkYXRhcHRyW0RDVFNJWkUqNV07Ci0KLSAgICB6MSA9IHRtcDAgKyB0bXAyICsgdG1wMzsKLSAgICB6MiA9IHRtcDEgKyB0bXA0OwotICAgIGRhdGFwdHJbRENUU0laRSowXSA9IChEQ1RFTEVNKQotICAgICAgREVTQ0FMRShNVUxUSVBMWSh6MSArIHoyLCBGSVgoMS41ODAyNDY5MTQpKSwgICAgICAgLyogMTI4LzgxICovCi0JICAgICAgQ09OU1RfQklUUysyKTsKLSAgICBkYXRhcHRyW0RDVFNJWkUqNl0gPSAoRENURUxFTSkKLSAgICAgIERFU0NBTEUoTVVMVElQTFkoejEgLSB6MiAtIHoyLCBGSVgoMS4xMTc0MDMzMDkpKSwgIC8qIGM2ICovCi0JICAgICAgQ09OU1RfQklUUysyKTsKLSAgICB6MSA9IE1VTFRJUExZKHRtcDAgLSB0bXAyLCBGSVgoMi4xMDAwMzEyODcpKTsgICAgICAgIC8qIGMyICovCi0gICAgejIgPSBNVUxUSVBMWSh0bXAxIC0gdG1wNCAtIHRtcDQsIEZJWCgxLjExNzQwMzMwOSkpOyAvKiBjNiAqLwotICAgIGRhdGFwdHJbRENUU0laRSoyXSA9IChEQ1RFTEVNKQotICAgICAgREVTQ0FMRShNVUxUSVBMWSh0bXAyIC0gdG1wMywgRklYKDEuNzExOTYxMTkwKSkgICAgLyogYzQgKi8KLQkgICAgICArIHoxICsgejIsIENPTlNUX0JJVFMrMik7Ci0gICAgZGF0YXB0cltEQ1RTSVpFKjRdID0gKERDVEVMRU0pCi0gICAgICBERVNDQUxFKE1VTFRJUExZKHRtcDMgLSB0bXAwLCBGSVgoMC4zODgwNzAwOTYpKSAgICAvKiBjOCAqLwotCSAgICAgICsgejEgLSB6MiwgQ09OU1RfQklUUysyKTsKLQotICAgIC8qIE9kZCBwYXJ0ICovCi0KLSAgICBkYXRhcHRyW0RDVFNJWkUqM10gPSAoRENURUxFTSkKLSAgICAgIERFU0NBTEUoTVVMVElQTFkodG1wMTAgLSB0bXAxMiAtIHRtcDEzLCBGSVgoMS45MzUzOTkzMDMpKSwgLyogYzMgKi8KLQkgICAgICBDT05TVF9CSVRTKzIpOwotCi0gICAgdG1wMTEgPSBNVUxUSVBMWSh0bXAxMSwgRklYKDEuOTM1Mzk5MzAzKSk7ICAgICAgICAvKiBjMyAqLwotICAgIHRtcDAgPSBNVUxUSVBMWSh0bXAxMCArIHRtcDEyLCBGSVgoMS40MzY1MDYwMDQpKTsgLyogYzUgKi8KLSAgICB0bXAxID0gTVVMVElQTFkodG1wMTAgKyB0bXAxMywgRklYKDAuNzY0MzQ4ODc5KSk7IC8qIGM3ICovCi0KLSAgICBkYXRhcHRyW0RDVFNJWkUqMV0gPSAoRENURUxFTSkKLSAgICAgIERFU0NBTEUodG1wMTEgKyB0bXAwICsgdG1wMSwgQ09OU1RfQklUUysyKTsKLQotICAgIHRtcDIgPSBNVUxUSVBMWSh0bXAxMiAtIHRtcDEzLCBGSVgoMi4yMDA4NTQ4ODMpKTsgLyogYzEgKi8KLQotICAgIGRhdGFwdHJbRENUU0laRSo1XSA9IChEQ1RFTEVNKQotICAgICAgREVTQ0FMRSh0bXAwIC0gdG1wMTEgLSB0bXAyLCBDT05TVF9CSVRTKzIpOwotICAgIGRhdGFwdHJbRENUU0laRSo3XSA9IChEQ1RFTEVNKQotICAgICAgREVTQ0FMRSh0bXAxIC0gdG1wMTEgKyB0bXAyLCBDT05TVF9CSVRTKzIpOwotCi0gICAgZGF0YXB0cisrOwkJCS8qIGFkdmFuY2UgcG9pbnRlciB0byBuZXh0IGNvbHVtbiAqLwotICAgIHdzcHRyKys7CQkJLyogYWR2YW5jZSBwb2ludGVyIHRvIG5leHQgY29sdW1uICovCi0gIH0KLX0KLQotCi0vKgotICogUGVyZm9ybSB0aGUgZm9yd2FyZCBEQ1Qgb24gYSAxMHgxMCBzYW1wbGUgYmxvY2suCi0gKi8KLQotR0xPQkFMKHZvaWQpCi1qcGVnX2ZkY3RfMTB4MTAgKERDVEVMRU0gKiBkYXRhLCBKU0FNUEFSUkFZIHNhbXBsZV9kYXRhLCBKRElNRU5TSU9OIHN0YXJ0X2NvbCkKLXsKLSAgSU5UMzIgdG1wMCwgdG1wMSwgdG1wMiwgdG1wMywgdG1wNDsKLSAgSU5UMzIgdG1wMTAsIHRtcDExLCB0bXAxMiwgdG1wMTMsIHRtcDE0OwotICBEQ1RFTEVNIHdvcmtzcGFjZVs4KjJdOwotICBEQ1RFTEVNICpkYXRhcHRyOwotICBEQ1RFTEVNICp3c3B0cjsKLSAgSlNBTVBST1cgZWxlbXB0cjsKLSAgaW50IGN0cjsKLSAgU0hJRlRfVEVNUFMKLQotICAvKiBQYXNzIDE6IHByb2Nlc3Mgcm93cy4gKi8KLSAgLyogTm90ZSByZXN1bHRzIGFyZSBzY2FsZWQgdXAgYnkgc3FydCg4KSBjb21wYXJlZCB0byBhIHRydWUgRENUOyAqLwotICAvKiB3ZSBzY2FsZSB0aGUgcmVzdWx0cyBmdXJ0aGVyIGJ5IDIgYXMgcGFydCBvZiBvdXRwdXQgYWRhcHRpb24gKi8KLSAgLyogc2NhbGluZyBmb3IgZGlmZmVyZW50IERDVCBzaXplLiAqLwotICAvKiBjSyByZXByZXNlbnRzIHNxcnQoMikgKiBjb3MoSypwaS8yMCkuICovCi0KLSAgZGF0YXB0ciA9IGRhdGE7Ci0gIGN0ciA9IDA7Ci0gIGZvciAoOzspIHsKLSAgICBlbGVtcHRyID0gc2FtcGxlX2RhdGFbY3RyXSArIHN0YXJ0X2NvbDsKLQotICAgIC8qIEV2ZW4gcGFydCAqLwotCi0gICAgdG1wMCA9IEdFVEpTQU1QTEUoZWxlbXB0clswXSkgKyBHRVRKU0FNUExFKGVsZW1wdHJbOV0pOwotICAgIHRtcDEgPSBHRVRKU0FNUExFKGVsZW1wdHJbMV0pICsgR0VUSlNBTVBMRShlbGVtcHRyWzhdKTsKLSAgICB0bXAxMiA9IEdFVEpTQU1QTEUoZWxlbXB0clsyXSkgKyBHRVRKU0FNUExFKGVsZW1wdHJbN10pOwotICAgIHRtcDMgPSBHRVRKU0FNUExFKGVsZW1wdHJbM10pICsgR0VUSlNBTVBMRShlbGVtcHRyWzZdKTsKLSAgICB0bXA0ID0gR0VUSlNBTVBMRShlbGVtcHRyWzRdKSArIEdFVEpTQU1QTEUoZWxlbXB0cls1XSk7Ci0KLSAgICB0bXAxMCA9IHRtcDAgKyB0bXA0OwotICAgIHRtcDEzID0gdG1wMCAtIHRtcDQ7Ci0gICAgdG1wMTEgPSB0bXAxICsgdG1wMzsKLSAgICB0bXAxNCA9IHRtcDEgLSB0bXAzOwotCi0gICAgdG1wMCA9IEdFVEpTQU1QTEUoZWxlbXB0clswXSkgLSBHRVRKU0FNUExFKGVsZW1wdHJbOV0pOwotICAgIHRtcDEgPSBHRVRKU0FNUExFKGVsZW1wdHJbMV0pIC0gR0VUSlNBTVBMRShlbGVtcHRyWzhdKTsKLSAgICB0bXAyID0gR0VUSlNBTVBMRShlbGVtcHRyWzJdKSAtIEdFVEpTQU1QTEUoZWxlbXB0cls3XSk7Ci0gICAgdG1wMyA9IEdFVEpTQU1QTEUoZWxlbXB0clszXSkgLSBHRVRKU0FNUExFKGVsZW1wdHJbNl0pOwotICAgIHRtcDQgPSBHRVRKU0FNUExFKGVsZW1wdHJbNF0pIC0gR0VUSlNBTVBMRShlbGVtcHRyWzVdKTsKLQotICAgIC8qIEFwcGx5IHVuc2lnbmVkLT5zaWduZWQgY29udmVyc2lvbiAqLwotICAgIGRhdGFwdHJbMF0gPSAoRENURUxFTSkKLSAgICAgICgodG1wMTAgKyB0bXAxMSArIHRtcDEyIC0gMTAgKiBDRU5URVJKU0FNUExFKSA8PCAxKTsKLSAgICB0bXAxMiArPSB0bXAxMjsKLSAgICBkYXRhcHRyWzRdID0gKERDVEVMRU0pCi0gICAgICBERVNDQUxFKE1VTFRJUExZKHRtcDEwIC0gdG1wMTIsIEZJWCgxLjE0NDEyMjgwNikpIC0gLyogYzQgKi8KLQkgICAgICBNVUxUSVBMWSh0bXAxMSAtIHRtcDEyLCBGSVgoMC40MzcwMTYwMjQpKSwgIC8qIGM4ICovCi0JICAgICAgQ09OU1RfQklUUy0xKTsKLSAgICB0bXAxMCA9IE1VTFRJUExZKHRtcDEzICsgdG1wMTQsIEZJWCgwLjgzMTI1Mzg3NikpOyAgICAvKiBjNiAqLwotICAgIGRhdGFwdHJbMl0gPSAoRENURUxFTSkKLSAgICAgIERFU0NBTEUodG1wMTAgKyBNVUxUSVBMWSh0bXAxMywgRklYKDAuNTEzNzQzMTQ4KSksICAvKiBjMi1jNiAqLwotCSAgICAgIENPTlNUX0JJVFMtMSk7Ci0gICAgZGF0YXB0cls2XSA9IChEQ1RFTEVNKQotICAgICAgREVTQ0FMRSh0bXAxMCAtIE1VTFRJUExZKHRtcDE0LCBGSVgoMi4xNzYyNTA4OTkpKSwgIC8qIGMyK2M2ICovCi0JICAgICAgQ09OU1RfQklUUy0xKTsKLQotICAgIC8qIE9kZCBwYXJ0ICovCi0KLSAgICB0bXAxMCA9IHRtcDAgKyB0bXA0OwotICAgIHRtcDExID0gdG1wMSAtIHRtcDM7Ci0gICAgZGF0YXB0cls1XSA9IChEQ1RFTEVNKSAoKHRtcDEwIC0gdG1wMTEgLSB0bXAyKSA8PCAxKTsKLSAgICB0bXAyIDw8PSBDT05TVF9CSVRTOwotICAgIGRhdGFwdHJbMV0gPSAoRENURUxFTSkKLSAgICAgIERFU0NBTEUoTVVMVElQTFkodG1wMCwgRklYKDEuMzk2ODAyMjQ3KSkgKyAgICAgICAgICAvKiBjMSAqLwotCSAgICAgIE1VTFRJUExZKHRtcDEsIEZJWCgxLjI2MDA3MzUxMSkpICsgdG1wMiArICAgLyogYzMgKi8KLQkgICAgICBNVUxUSVBMWSh0bXAzLCBGSVgoMC42NDIwMzk1MjIpKSArICAgICAgICAgIC8qIGM3ICovCi0JICAgICAgTVVMVElQTFkodG1wNCwgRklYKDAuMjIxMjMxNzQyKSksICAgICAgICAgICAvKiBjOSAqLwotCSAgICAgIENPTlNUX0JJVFMtMSk7Ci0gICAgdG1wMTIgPSBNVUxUSVBMWSh0bXAwIC0gdG1wNCwgRklYKDAuOTUxMDU2NTE2KSkgLSAgICAgLyogKGMzK2M3KS8yICovCi0JICAgIE1VTFRJUExZKHRtcDEgKyB0bXAzLCBGSVgoMC41ODc3ODUyNTIpKTsgICAgICAvKiAoYzEtYzkpLzIgKi8KLSAgICB0bXAxMyA9IE1VTFRJUExZKHRtcDEwICsgdG1wMTEsIEZJWCgwLjMwOTAxNjk5NCkpICsgICAvKiAoYzMtYzcpLzIgKi8KLQkgICAgKHRtcDExIDw8IChDT05TVF9CSVRTIC0gMSkpIC0gdG1wMjsKLSAgICBkYXRhcHRyWzNdID0gKERDVEVMRU0pIERFU0NBTEUodG1wMTIgKyB0bXAxMywgQ09OU1RfQklUUy0xKTsKLSAgICBkYXRhcHRyWzddID0gKERDVEVMRU0pIERFU0NBTEUodG1wMTIgLSB0bXAxMywgQ09OU1RfQklUUy0xKTsKLQotICAgIGN0cisrOwotCi0gICAgaWYgKGN0ciAhPSBEQ1RTSVpFKSB7Ci0gICAgICBpZiAoY3RyID09IDEwKQotCWJyZWFrOwkJCS8qIERvbmUuICovCi0gICAgICBkYXRhcHRyICs9IERDVFNJWkU7CS8qIGFkdmFuY2UgcG9pbnRlciB0byBuZXh0IHJvdyAqLwotICAgIH0gZWxzZQotICAgICAgZGF0YXB0ciA9IHdvcmtzcGFjZTsJLyogc3dpdGNoIHBvaW50ZXIgdG8gZXh0ZW5kZWQgd29ya3NwYWNlICovCi0gIH0KLQotICAvKiBQYXNzIDI6IHByb2Nlc3MgY29sdW1ucy4KLSAgICogV2UgbGVhdmUgdGhlIHJlc3VsdHMgc2NhbGVkIHVwIGJ5IGFuIG92ZXJhbGwgZmFjdG9yIG9mIDguCi0gICAqIFdlIG11c3QgYWxzbyBzY2FsZSB0aGUgb3V0cHV0IGJ5ICg4LzEwKSoqMiA9IDE2LzI1LCB3aGljaCB3ZSBwYXJ0aWFsbHkKLSAgICogZm9sZCBpbnRvIHRoZSBjb25zdGFudCBtdWx0aXBsaWVycyBhbmQgZmluYWwvaW5pdGlhbCBzaGlmdGluZzoKLSAgICogY0sgbm93IHJlcHJlc2VudHMgc3FydCgyKSAqIGNvcyhLKnBpLzIwKSAqIDMyLzI1LgotICAgKi8KLQotICBkYXRhcHRyID0gZGF0YTsKLSAgd3NwdHIgPSB3b3Jrc3BhY2U7Ci0gIGZvciAoY3RyID0gRENUU0laRS0xOyBjdHIgPj0gMDsgY3RyLS0pIHsKLSAgICAvKiBFdmVuIHBhcnQgKi8KLQotICAgIHRtcDAgPSBkYXRhcHRyW0RDVFNJWkUqMF0gKyB3c3B0cltEQ1RTSVpFKjFdOwotICAgIHRtcDEgPSBkYXRhcHRyW0RDVFNJWkUqMV0gKyB3c3B0cltEQ1RTSVpFKjBdOwotICAgIHRtcDEyID0gZGF0YXB0cltEQ1RTSVpFKjJdICsgZGF0YXB0cltEQ1RTSVpFKjddOwotICAgIHRtcDMgPSBkYXRhcHRyW0RDVFNJWkUqM10gKyBkYXRhcHRyW0RDVFNJWkUqNl07Ci0gICAgdG1wNCA9IGRhdGFwdHJbRENUU0laRSo0XSArIGRhdGFwdHJbRENUU0laRSo1XTsKLQotICAgIHRtcDEwID0gdG1wMCArIHRtcDQ7Ci0gICAgdG1wMTMgPSB0bXAwIC0gdG1wNDsKLSAgICB0bXAxMSA9IHRtcDEgKyB0bXAzOwotICAgIHRtcDE0ID0gdG1wMSAtIHRtcDM7Ci0KLSAgICB0bXAwID0gZGF0YXB0cltEQ1RTSVpFKjBdIC0gd3NwdHJbRENUU0laRSoxXTsKLSAgICB0bXAxID0gZGF0YXB0cltEQ1RTSVpFKjFdIC0gd3NwdHJbRENUU0laRSowXTsKLSAgICB0bXAyID0gZGF0YXB0cltEQ1RTSVpFKjJdIC0gZGF0YXB0cltEQ1RTSVpFKjddOwotICAgIHRtcDMgPSBkYXRhcHRyW0RDVFNJWkUqM10gLSBkYXRhcHRyW0RDVFNJWkUqNl07Ci0gICAgdG1wNCA9IGRhdGFwdHJbRENUU0laRSo0XSAtIGRhdGFwdHJbRENUU0laRSo1XTsKLQotICAgIGRhdGFwdHJbRENUU0laRSowXSA9IChEQ1RFTEVNKQotICAgICAgREVTQ0FMRShNVUxUSVBMWSh0bXAxMCArIHRtcDExICsgdG1wMTIsIEZJWCgxLjI4KSksIC8qIDMyLzI1ICovCi0JICAgICAgQ09OU1RfQklUUysyKTsKLSAgICB0bXAxMiArPSB0bXAxMjsKLSAgICBkYXRhcHRyW0RDVFNJWkUqNF0gPSAoRENURUxFTSkKLSAgICAgIERFU0NBTEUoTVVMVElQTFkodG1wMTAgLSB0bXAxMiwgRklYKDEuNDY0NDc3MTkxKSkgLSAvKiBjNCAqLwotCSAgICAgIE1VTFRJUExZKHRtcDExIC0gdG1wMTIsIEZJWCgwLjU1OTM4MDUxMSkpLCAgLyogYzggKi8KLQkgICAgICBDT05TVF9CSVRTKzIpOwotICAgIHRtcDEwID0gTVVMVElQTFkodG1wMTMgKyB0bXAxNCwgRklYKDEuMDY0MDA0OTYxKSk7ICAgIC8qIGM2ICovCi0gICAgZGF0YXB0cltEQ1RTSVpFKjJdID0gKERDVEVMRU0pCi0gICAgICBERVNDQUxFKHRtcDEwICsgTVVMVElQTFkodG1wMTMsIEZJWCgwLjY1NzU5MTIzMCkpLCAgLyogYzItYzYgKi8KLQkgICAgICBDT05TVF9CSVRTKzIpOwotICAgIGRhdGFwdHJbRENUU0laRSo2XSA9IChEQ1RFTEVNKQotICAgICAgREVTQ0FMRSh0bXAxMCAtIE1VTFRJUExZKHRtcDE0LCBGSVgoMi43ODU2MDExNTEpKSwgIC8qIGMyK2M2ICovCi0JICAgICAgQ09OU1RfQklUUysyKTsKLQotICAgIC8qIE9kZCBwYXJ0ICovCi0KLSAgICB0bXAxMCA9IHRtcDAgKyB0bXA0OwotICAgIHRtcDExID0gdG1wMSAtIHRtcDM7Ci0gICAgZGF0YXB0cltEQ1RTSVpFKjVdID0gKERDVEVMRU0pCi0gICAgICBERVNDQUxFKE1VTFRJUExZKHRtcDEwIC0gdG1wMTEgLSB0bXAyLCBGSVgoMS4yOCkpLCAgLyogMzIvMjUgKi8KLQkgICAgICBDT05TVF9CSVRTKzIpOwotICAgIHRtcDIgPSBNVUxUSVBMWSh0bXAyLCBGSVgoMS4yOCkpOyAgICAgICAgICAgICAgICAgICAgIC8qIDMyLzI1ICovCi0gICAgZGF0YXB0cltEQ1RTSVpFKjFdID0gKERDVEVMRU0pCi0gICAgICBERVNDQUxFKE1VTFRJUExZKHRtcDAsIEZJWCgxLjc4NzkwNjg3NikpICsgICAgICAgICAgLyogYzEgKi8KLQkgICAgICBNVUxUSVBMWSh0bXAxLCBGSVgoMS42MTI4OTQwOTQpKSArIHRtcDIgKyAgIC8qIGMzICovCi0JICAgICAgTVVMVElQTFkodG1wMywgRklYKDAuODIxODEwNTg4KSkgKyAgICAgICAgICAvKiBjNyAqLwotCSAgICAgIE1VTFRJUExZKHRtcDQsIEZJWCgwLjI4MzE3NjYzMCkpLCAgICAgICAgICAgLyogYzkgKi8KLQkgICAgICBDT05TVF9CSVRTKzIpOwotICAgIHRtcDEyID0gTVVMVElQTFkodG1wMCAtIHRtcDQsIEZJWCgxLjIxNzM1MjM0MSkpIC0gICAgIC8qIChjMytjNykvMiAqLwotCSAgICBNVUxUSVBMWSh0bXAxICsgdG1wMywgRklYKDAuNzUyMzY1MTIzKSk7ICAgICAgLyogKGMxLWM5KS8yICovCi0gICAgdG1wMTMgPSBNVUxUSVBMWSh0bXAxMCArIHRtcDExLCBGSVgoMC4zOTU1NDE3NTMpKSArICAgLyogKGMzLWM3KS8yICovCi0JICAgIE1VTFRJUExZKHRtcDExLCBGSVgoMC42NCkpIC0gdG1wMjsgICAgICAgICAgICAvKiAxNi8yNSAqLwotICAgIGRhdGFwdHJbRENUU0laRSozXSA9IChEQ1RFTEVNKSBERVNDQUxFKHRtcDEyICsgdG1wMTMsIENPTlNUX0JJVFMrMik7Ci0gICAgZGF0YXB0cltEQ1RTSVpFKjddID0gKERDVEVMRU0pIERFU0NBTEUodG1wMTIgLSB0bXAxMywgQ09OU1RfQklUUysyKTsKLQotICAgIGRhdGFwdHIrKzsJCQkvKiBhZHZhbmNlIHBvaW50ZXIgdG8gbmV4dCBjb2x1bW4gKi8KLSAgICB3c3B0cisrOwkJCS8qIGFkdmFuY2UgcG9pbnRlciB0byBuZXh0IGNvbHVtbiAqLwotICB9Ci19Ci0KLQotLyoKLSAqIFBlcmZvcm0gdGhlIGZvcndhcmQgRENUIG9uIGFuIDExeDExIHNhbXBsZSBibG9jay4KLSAqLwotCi1HTE9CQUwodm9pZCkKLWpwZWdfZmRjdF8xMXgxMSAoRENURUxFTSAqIGRhdGEsIEpTQU1QQVJSQVkgc2FtcGxlX2RhdGEsIEpESU1FTlNJT04gc3RhcnRfY29sKQotewotICBJTlQzMiB0bXAwLCB0bXAxLCB0bXAyLCB0bXAzLCB0bXA0LCB0bXA1OwotICBJTlQzMiB0bXAxMCwgdG1wMTEsIHRtcDEyLCB0bXAxMywgdG1wMTQ7Ci0gIElOVDMyIHoxLCB6MiwgejM7Ci0gIERDVEVMRU0gd29ya3NwYWNlWzgqM107Ci0gIERDVEVMRU0gKmRhdGFwdHI7Ci0gIERDVEVMRU0gKndzcHRyOwotICBKU0FNUFJPVyBlbGVtcHRyOwotICBpbnQgY3RyOwotICBTSElGVF9URU1QUwotCi0gIC8qIFBhc3MgMTogcHJvY2VzcyByb3dzLiAqLwotICAvKiBOb3RlIHJlc3VsdHMgYXJlIHNjYWxlZCB1cCBieSBzcXJ0KDgpIGNvbXBhcmVkIHRvIGEgdHJ1ZSBEQ1Q7ICovCi0gIC8qIHdlIHNjYWxlIHRoZSByZXN1bHRzIGZ1cnRoZXIgYnkgMiBhcyBwYXJ0IG9mIG91dHB1dCBhZGFwdGlvbiAqLwotICAvKiBzY2FsaW5nIGZvciBkaWZmZXJlbnQgRENUIHNpemUuICovCi0gIC8qIGNLIHJlcHJlc2VudHMgc3FydCgyKSAqIGNvcyhLKnBpLzIyKS4gKi8KLQotICBkYXRhcHRyID0gZGF0YTsKLSAgY3RyID0gMDsKLSAgZm9yICg7OykgewotICAgIGVsZW1wdHIgPSBzYW1wbGVfZGF0YVtjdHJdICsgc3RhcnRfY29sOwotCi0gICAgLyogRXZlbiBwYXJ0ICovCi0KLSAgICB0bXAwID0gR0VUSlNBTVBMRShlbGVtcHRyWzBdKSArIEdFVEpTQU1QTEUoZWxlbXB0clsxMF0pOwotICAgIHRtcDEgPSBHRVRKU0FNUExFKGVsZW1wdHJbMV0pICsgR0VUSlNBTVBMRShlbGVtcHRyWzldKTsKLSAgICB0bXAyID0gR0VUSlNBTVBMRShlbGVtcHRyWzJdKSArIEdFVEpTQU1QTEUoZWxlbXB0cls4XSk7Ci0gICAgdG1wMyA9IEdFVEpTQU1QTEUoZWxlbXB0clszXSkgKyBHRVRKU0FNUExFKGVsZW1wdHJbN10pOwotICAgIHRtcDQgPSBHRVRKU0FNUExFKGVsZW1wdHJbNF0pICsgR0VUSlNBTVBMRShlbGVtcHRyWzZdKTsKLSAgICB0bXA1ID0gR0VUSlNBTVBMRShlbGVtcHRyWzVdKTsKLQotICAgIHRtcDEwID0gR0VUSlNBTVBMRShlbGVtcHRyWzBdKSAtIEdFVEpTQU1QTEUoZWxlbXB0clsxMF0pOwotICAgIHRtcDExID0gR0VUSlNBTVBMRShlbGVtcHRyWzFdKSAtIEdFVEpTQU1QTEUoZWxlbXB0cls5XSk7Ci0gICAgdG1wMTIgPSBHRVRKU0FNUExFKGVsZW1wdHJbMl0pIC0gR0VUSlNBTVBMRShlbGVtcHRyWzhdKTsKLSAgICB0bXAxMyA9IEdFVEpTQU1QTEUoZWxlbXB0clszXSkgLSBHRVRKU0FNUExFKGVsZW1wdHJbN10pOwotICAgIHRtcDE0ID0gR0VUSlNBTVBMRShlbGVtcHRyWzRdKSAtIEdFVEpTQU1QTEUoZWxlbXB0cls2XSk7Ci0KLSAgICAvKiBBcHBseSB1bnNpZ25lZC0+c2lnbmVkIGNvbnZlcnNpb24gKi8KLSAgICBkYXRhcHRyWzBdID0gKERDVEVMRU0pCi0gICAgICAoKHRtcDAgKyB0bXAxICsgdG1wMiArIHRtcDMgKyB0bXA0ICsgdG1wNSAtIDExICogQ0VOVEVSSlNBTVBMRSkgPDwgMSk7Ci0gICAgdG1wNSArPSB0bXA1OwotICAgIHRtcDAgLT0gdG1wNTsKLSAgICB0bXAxIC09IHRtcDU7Ci0gICAgdG1wMiAtPSB0bXA1OwotICAgIHRtcDMgLT0gdG1wNTsKLSAgICB0bXA0IC09IHRtcDU7Ci0gICAgejEgPSBNVUxUSVBMWSh0bXAwICsgdG1wMywgRklYKDEuMzU2OTI3OTc2KSkgKyAgICAgICAvKiBjMiAqLwotCSBNVUxUSVBMWSh0bXAyICsgdG1wNCwgRklYKDAuMjAxMjYzNTc0KSk7ICAgICAgICAvKiBjMTAgKi8KLSAgICB6MiA9IE1VTFRJUExZKHRtcDEgLSB0bXAzLCBGSVgoMC45MjYxMTI5MzEpKTsgICAgICAgIC8qIGM2ICovCi0gICAgejMgPSBNVUxUSVBMWSh0bXAwIC0gdG1wMSwgRklYKDEuMTg5NzEyMTU2KSk7ICAgICAgICAvKiBjNCAqLwotICAgIGRhdGFwdHJbMl0gPSAoRENURUxFTSkKLSAgICAgIERFU0NBTEUoejEgKyB6MiAtIE1VTFRJUExZKHRtcDMsIEZJWCgxLjAxODMwMDU5MCkpIC8qIGMyK2M4LWM2ICovCi0JICAgICAgLSBNVUxUSVBMWSh0bXA0LCBGSVgoMS4zOTA5NzU3MzApKSwgICAgICAgIC8qIGM0K2MxMCAqLwotCSAgICAgIENPTlNUX0JJVFMtMSk7Ci0gICAgZGF0YXB0cls0XSA9IChEQ1RFTEVNKQotICAgICAgREVTQ0FMRSh6MiArIHozICsgTVVMVElQTFkodG1wMSwgRklYKDAuMDYyMzM1NjUwKSkgLyogYzQtYzYtYzEwICovCi0JICAgICAgLSBNVUxUSVBMWSh0bXAyLCBGSVgoMS4zNTY5Mjc5NzYpKSAgICAgICAgIC8qIGMyICovCi0JICAgICAgKyBNVUxUSVBMWSh0bXA0LCBGSVgoMC41ODc0ODU1NDUpKSwgICAgICAgIC8qIGM4ICovCi0JICAgICAgQ09OU1RfQklUUy0xKTsKLSAgICBkYXRhcHRyWzZdID0gKERDVEVMRU0pCi0gICAgICBERVNDQUxFKHoxICsgejMgLSBNVUxUSVBMWSh0bXAwLCBGSVgoMS42MjA1MjcyMDApKSAvKiBjMitjNC1jNiAqLwotCSAgICAgIC0gTVVMVElQTFkodG1wMiwgRklYKDAuNzg4NzQ5MTIwKSksICAgICAgICAvKiBjOCtjMTAgKi8KLQkgICAgICBDT05TVF9CSVRTLTEpOwotCi0gICAgLyogT2RkIHBhcnQgKi8KLQotICAgIHRtcDEgPSBNVUxUSVBMWSh0bXAxMCArIHRtcDExLCBGSVgoMS4yODY0MTM5MDUpKTsgICAgLyogYzMgKi8KLSAgICB0bXAyID0gTVVMVElQTFkodG1wMTAgKyB0bXAxMiwgRklYKDEuMDY4NzkxMjk4KSk7ICAgIC8qIGM1ICovCi0gICAgdG1wMyA9IE1VTFRJUExZKHRtcDEwICsgdG1wMTMsIEZJWCgwLjc2NDU4MTU3NikpOyAgICAvKiBjNyAqLwotICAgIHRtcDAgPSB0bXAxICsgdG1wMiArIHRtcDMgLSBNVUxUSVBMWSh0bXAxMCwgRklYKDEuNzE5OTY3ODcxKSkgLyogYzcrYzUrYzMtYzEgKi8KLQkgICArIE1VTFRJUExZKHRtcDE0LCBGSVgoMC4zOTg0MzAwMDMpKTsgICAgICAgICAgLyogYzkgKi8KLSAgICB0bXA0ID0gTVVMVElQTFkodG1wMTEgKyB0bXAxMiwgLSBGSVgoMC43NjQ1ODE1NzYpKTsgIC8qIC1jNyAqLwotICAgIHRtcDUgPSBNVUxUSVBMWSh0bXAxMSArIHRtcDEzLCAtIEZJWCgxLjM5OTgxODkwNykpOyAgLyogLWMxICovCi0gICAgdG1wMSArPSB0bXA0ICsgdG1wNSArIE1VTFRJUExZKHRtcDExLCBGSVgoMS4yNzY0MTY1ODIpKSAvKiBjOStjNytjMS1jMyAqLwotCSAgICAtIE1VTFRJUExZKHRtcDE0LCBGSVgoMS4wNjg3OTEyOTgpKTsgICAgICAgICAvKiBjNSAqLwotICAgIHRtcDEwID0gTVVMVElQTFkodG1wMTIgKyB0bXAxMywgRklYKDAuMzk4NDMwMDAzKSk7ICAgLyogYzkgKi8KLSAgICB0bXAyICs9IHRtcDQgKyB0bXAxMCAtIE1VTFRJUExZKHRtcDEyLCBGSVgoMS45ODkwNTM2MjkpKSAvKiBjOStjNStjMy1jNyAqLwotCSAgICArIE1VTFRJUExZKHRtcDE0LCBGSVgoMS4zOTk4MTg5MDcpKTsgICAgICAgICAvKiBjMSAqLwotICAgIHRtcDMgKz0gdG1wNSArIHRtcDEwICsgTVVMVElQTFkodG1wMTMsIEZJWCgxLjMwNTU5ODYyNikpIC8qIGMxK2M1LWM5LWM3ICovCi0JICAgIC0gTVVMVElQTFkodG1wMTQsIEZJWCgxLjI4NjQxMzkwNSkpOyAgICAgICAgIC8qIGMzICovCi0KLSAgICBkYXRhcHRyWzFdID0gKERDVEVMRU0pIERFU0NBTEUodG1wMCwgQ09OU1RfQklUUy0xKTsKLSAgICBkYXRhcHRyWzNdID0gKERDVEVMRU0pIERFU0NBTEUodG1wMSwgQ09OU1RfQklUUy0xKTsKLSAgICBkYXRhcHRyWzVdID0gKERDVEVMRU0pIERFU0NBTEUodG1wMiwgQ09OU1RfQklUUy0xKTsKLSAgICBkYXRhcHRyWzddID0gKERDVEVMRU0pIERFU0NBTEUodG1wMywgQ09OU1RfQklUUy0xKTsKLQotICAgIGN0cisrOwotCi0gICAgaWYgKGN0ciAhPSBEQ1RTSVpFKSB7Ci0gICAgICBpZiAoY3RyID09IDExKQotCWJyZWFrOwkJCS8qIERvbmUuICovCi0gICAgICBkYXRhcHRyICs9IERDVFNJWkU7CS8qIGFkdmFuY2UgcG9pbnRlciB0byBuZXh0IHJvdyAqLwotICAgIH0gZWxzZQotICAgICAgZGF0YXB0ciA9IHdvcmtzcGFjZTsJLyogc3dpdGNoIHBvaW50ZXIgdG8gZXh0ZW5kZWQgd29ya3NwYWNlICovCi0gIH0KLQotICAvKiBQYXNzIDI6IHByb2Nlc3MgY29sdW1ucy4KLSAgICogV2UgbGVhdmUgdGhlIHJlc3VsdHMgc2NhbGVkIHVwIGJ5IGFuIG92ZXJhbGwgZmFjdG9yIG9mIDguCi0gICAqIFdlIG11c3QgYWxzbyBzY2FsZSB0aGUgb3V0cHV0IGJ5ICg4LzExKSoqMiA9IDY0LzEyMSwgd2hpY2ggd2UgcGFydGlhbGx5Ci0gICAqIGZvbGQgaW50byB0aGUgY29uc3RhbnQgbXVsdGlwbGllcnMgYW5kIGZpbmFsL2luaXRpYWwgc2hpZnRpbmc6Ci0gICAqIGNLIG5vdyByZXByZXNlbnRzIHNxcnQoMikgKiBjb3MoSypwaS8yMikgKiAxMjgvMTIxLgotICAgKi8KLQotICBkYXRhcHRyID0gZGF0YTsKLSAgd3NwdHIgPSB3b3Jrc3BhY2U7Ci0gIGZvciAoY3RyID0gRENUU0laRS0xOyBjdHIgPj0gMDsgY3RyLS0pIHsKLSAgICAvKiBFdmVuIHBhcnQgKi8KLQotICAgIHRtcDAgPSBkYXRhcHRyW0RDVFNJWkUqMF0gKyB3c3B0cltEQ1RTSVpFKjJdOwotICAgIHRtcDEgPSBkYXRhcHRyW0RDVFNJWkUqMV0gKyB3c3B0cltEQ1RTSVpFKjFdOwotICAgIHRtcDIgPSBkYXRhcHRyW0RDVFNJWkUqMl0gKyB3c3B0cltEQ1RTSVpFKjBdOwotICAgIHRtcDMgPSBkYXRhcHRyW0RDVFNJWkUqM10gKyBkYXRhcHRyW0RDVFNJWkUqN107Ci0gICAgdG1wNCA9IGRhdGFwdHJbRENUU0laRSo0XSArIGRhdGFwdHJbRENUU0laRSo2XTsKLSAgICB0bXA1ID0gZGF0YXB0cltEQ1RTSVpFKjVdOwotCi0gICAgdG1wMTAgPSBkYXRhcHRyW0RDVFNJWkUqMF0gLSB3c3B0cltEQ1RTSVpFKjJdOwotICAgIHRtcDExID0gZGF0YXB0cltEQ1RTSVpFKjFdIC0gd3NwdHJbRENUU0laRSoxXTsKLSAgICB0bXAxMiA9IGRhdGFwdHJbRENUU0laRSoyXSAtIHdzcHRyW0RDVFNJWkUqMF07Ci0gICAgdG1wMTMgPSBkYXRhcHRyW0RDVFNJWkUqM10gLSBkYXRhcHRyW0RDVFNJWkUqN107Ci0gICAgdG1wMTQgPSBkYXRhcHRyW0RDVFNJWkUqNF0gLSBkYXRhcHRyW0RDVFNJWkUqNl07Ci0KLSAgICBkYXRhcHRyW0RDVFNJWkUqMF0gPSAoRENURUxFTSkKLSAgICAgIERFU0NBTEUoTVVMVElQTFkodG1wMCArIHRtcDEgKyB0bXAyICsgdG1wMyArIHRtcDQgKyB0bXA1LAotCQkgICAgICAgRklYKDEuMDU3ODUxMjQwKSksICAgICAgICAgICAgICAgIC8qIDEyOC8xMjEgKi8KLQkgICAgICBDT05TVF9CSVRTKzIpOwotICAgIHRtcDUgKz0gdG1wNTsKLSAgICB0bXAwIC09IHRtcDU7Ci0gICAgdG1wMSAtPSB0bXA1OwotICAgIHRtcDIgLT0gdG1wNTsKLSAgICB0bXAzIC09IHRtcDU7Ci0gICAgdG1wNCAtPSB0bXA1OwotICAgIHoxID0gTVVMVElQTFkodG1wMCArIHRtcDMsIEZJWCgxLjQzNTQyNzk0MikpICsgICAgICAgLyogYzIgKi8KLQkgTVVMVElQTFkodG1wMiArIHRtcDQsIEZJWCgwLjIxMjkwNjkyMikpOyAgICAgICAgLyogYzEwICovCi0gICAgejIgPSBNVUxUSVBMWSh0bXAxIC0gdG1wMywgRklYKDAuOTc5Njg5NzEzKSk7ICAgICAgICAvKiBjNiAqLwotICAgIHozID0gTVVMVElQTFkodG1wMCAtIHRtcDEsIEZJWCgxLjI1ODUzODQ3OSkpOyAgICAgICAgLyogYzQgKi8KLSAgICBkYXRhcHRyW0RDVFNJWkUqMl0gPSAoRENURUxFTSkKLSAgICAgIERFU0NBTEUoejEgKyB6MiAtIE1VTFRJUExZKHRtcDMsIEZJWCgxLjA3NzIxMDU0MikpIC8qIGMyK2M4LWM2ICovCi0JICAgICAgLSBNVUxUSVBMWSh0bXA0LCBGSVgoMS40NzE0NDU0MDApKSwgICAgICAgIC8qIGM0K2MxMCAqLwotCSAgICAgIENPTlNUX0JJVFMrMik7Ci0gICAgZGF0YXB0cltEQ1RTSVpFKjRdID0gKERDVEVMRU0pCi0gICAgICBERVNDQUxFKHoyICsgejMgKyBNVUxUSVBMWSh0bXAxLCBGSVgoMC4wNjU5NDE4NDQpKSAvKiBjNC1jNi1jMTAgKi8KLQkgICAgICAtIE1VTFRJUExZKHRtcDIsIEZJWCgxLjQzNTQyNzk0MikpICAgICAgICAgLyogYzIgKi8KLQkgICAgICArIE1VTFRJUExZKHRtcDQsIEZJWCgwLjYyMTQ3MjMxMikpLCAgICAgICAgLyogYzggKi8KLQkgICAgICBDT05TVF9CSVRTKzIpOwotICAgIGRhdGFwdHJbRENUU0laRSo2XSA9IChEQ1RFTEVNKQotICAgICAgREVTQ0FMRSh6MSArIHozIC0gTVVMVElQTFkodG1wMCwgRklYKDEuNzE0Mjc2NzA4KSkgLyogYzIrYzQtYzYgKi8KLQkgICAgICAtIE1VTFRJUExZKHRtcDIsIEZJWCgwLjgzNDM3OTIzNCkpLCAgICAgICAgLyogYzgrYzEwICovCi0JICAgICAgQ09OU1RfQklUUysyKTsKLQotICAgIC8qIE9kZCBwYXJ0ICovCi0KLSAgICB0bXAxID0gTVVMVElQTFkodG1wMTAgKyB0bXAxMSwgRklYKDEuMzYwODM0NTQ0KSk7ICAgIC8qIGMzICovCi0gICAgdG1wMiA9IE1VTFRJUExZKHRtcDEwICsgdG1wMTIsIEZJWCgxLjEzMDYyMjE5OSkpOyAgICAvKiBjNSAqLwotICAgIHRtcDMgPSBNVUxUSVBMWSh0bXAxMCArIHRtcDEzLCBGSVgoMC44MDg4MTM1NjgpKTsgICAgLyogYzcgKi8KLSAgICB0bXAwID0gdG1wMSArIHRtcDIgKyB0bXAzIC0gTVVMVElQTFkodG1wMTAsIEZJWCgxLjgxOTQ3MDE0NSkpIC8qIGM3K2M1K2MzLWMxICovCi0JICAgKyBNVUxUSVBMWSh0bXAxNCwgRklYKDAuNDIxNDc5NjcyKSk7ICAgICAgICAgIC8qIGM5ICovCi0gICAgdG1wNCA9IE1VTFRJUExZKHRtcDExICsgdG1wMTIsIC0gRklYKDAuODA4ODEzNTY4KSk7ICAvKiAtYzcgKi8KLSAgICB0bXA1ID0gTVVMVElQTFkodG1wMTEgKyB0bXAxMywgLSBGSVgoMS40ODA4MDAxNjcpKTsgIC8qIC1jMSAqLwotICAgIHRtcDEgKz0gdG1wNCArIHRtcDUgKyBNVUxUSVBMWSh0bXAxMSwgRklYKDEuMzUwMjU4ODY0KSkgLyogYzkrYzcrYzEtYzMgKi8KLQkgICAgLSBNVUxUSVBMWSh0bXAxNCwgRklYKDEuMTMwNjIyMTk5KSk7ICAgICAgICAgLyogYzUgKi8KLSAgICB0bXAxMCA9IE1VTFRJUExZKHRtcDEyICsgdG1wMTMsIEZJWCgwLjQyMTQ3OTY3MikpOyAgIC8qIGM5ICovCi0gICAgdG1wMiArPSB0bXA0ICsgdG1wMTAgLSBNVUxUSVBMWSh0bXAxMiwgRklYKDIuMTA0MTIyODQ3KSkgLyogYzkrYzUrYzMtYzcgKi8KLQkgICAgKyBNVUxUSVBMWSh0bXAxNCwgRklYKDEuNDgwODAwMTY3KSk7ICAgICAgICAgLyogYzEgKi8KLSAgICB0bXAzICs9IHRtcDUgKyB0bXAxMCArIE1VTFRJUExZKHRtcDEzLCBGSVgoMS4zODExMjkxMjUpKSAvKiBjMStjNS1jOS1jNyAqLwotCSAgICAtIE1VTFRJUExZKHRtcDE0LCBGSVgoMS4zNjA4MzQ1NDQpKTsgICAgICAgICAvKiBjMyAqLwotCi0gICAgZGF0YXB0cltEQ1RTSVpFKjFdID0gKERDVEVMRU0pIERFU0NBTEUodG1wMCwgQ09OU1RfQklUUysyKTsKLSAgICBkYXRhcHRyW0RDVFNJWkUqM10gPSAoRENURUxFTSkgREVTQ0FMRSh0bXAxLCBDT05TVF9CSVRTKzIpOwotICAgIGRhdGFwdHJbRENUU0laRSo1XSA9IChEQ1RFTEVNKSBERVNDQUxFKHRtcDIsIENPTlNUX0JJVFMrMik7Ci0gICAgZGF0YXB0cltEQ1RTSVpFKjddID0gKERDVEVMRU0pIERFU0NBTEUodG1wMywgQ09OU1RfQklUUysyKTsKLQotICAgIGRhdGFwdHIrKzsJCQkvKiBhZHZhbmNlIHBvaW50ZXIgdG8gbmV4dCBjb2x1bW4gKi8KLSAgICB3c3B0cisrOwkJCS8qIGFkdmFuY2UgcG9pbnRlciB0byBuZXh0IGNvbHVtbiAqLwotICB9Ci19Ci0KLQotLyoKLSAqIFBlcmZvcm0gdGhlIGZvcndhcmQgRENUIG9uIGEgMTJ4MTIgc2FtcGxlIGJsb2NrLgotICovCi0KLUdMT0JBTCh2b2lkKQotanBlZ19mZGN0XzEyeDEyIChEQ1RFTEVNICogZGF0YSwgSlNBTVBBUlJBWSBzYW1wbGVfZGF0YSwgSkRJTUVOU0lPTiBzdGFydF9jb2wpCi17Ci0gIElOVDMyIHRtcDAsIHRtcDEsIHRtcDIsIHRtcDMsIHRtcDQsIHRtcDU7Ci0gIElOVDMyIHRtcDEwLCB0bXAxMSwgdG1wMTIsIHRtcDEzLCB0bXAxNCwgdG1wMTU7Ci0gIERDVEVMRU0gd29ya3NwYWNlWzgqNF07Ci0gIERDVEVMRU0gKmRhdGFwdHI7Ci0gIERDVEVMRU0gKndzcHRyOwotICBKU0FNUFJPVyBlbGVtcHRyOwotICBpbnQgY3RyOwotICBTSElGVF9URU1QUwotCi0gIC8qIFBhc3MgMTogcHJvY2VzcyByb3dzLiAqLwotICAvKiBOb3RlIHJlc3VsdHMgYXJlIHNjYWxlZCB1cCBieSBzcXJ0KDgpIGNvbXBhcmVkIHRvIGEgdHJ1ZSBEQ1QuICovCi0gIC8qIGNLIHJlcHJlc2VudHMgc3FydCgyKSAqIGNvcyhLKnBpLzI0KS4gKi8KLQotICBkYXRhcHRyID0gZGF0YTsKLSAgY3RyID0gMDsKLSAgZm9yICg7OykgewotICAgIGVsZW1wdHIgPSBzYW1wbGVfZGF0YVtjdHJdICsgc3RhcnRfY29sOwotCi0gICAgLyogRXZlbiBwYXJ0ICovCi0KLSAgICB0bXAwID0gR0VUSlNBTVBMRShlbGVtcHRyWzBdKSArIEdFVEpTQU1QTEUoZWxlbXB0clsxMV0pOwotICAgIHRtcDEgPSBHRVRKU0FNUExFKGVsZW1wdHJbMV0pICsgR0VUSlNBTVBMRShlbGVtcHRyWzEwXSk7Ci0gICAgdG1wMiA9IEdFVEpTQU1QTEUoZWxlbXB0clsyXSkgKyBHRVRKU0FNUExFKGVsZW1wdHJbOV0pOwotICAgIHRtcDMgPSBHRVRKU0FNUExFKGVsZW1wdHJbM10pICsgR0VUSlNBTVBMRShlbGVtcHRyWzhdKTsKLSAgICB0bXA0ID0gR0VUSlNBTVBMRShlbGVtcHRyWzRdKSArIEdFVEpTQU1QTEUoZWxlbXB0cls3XSk7Ci0gICAgdG1wNSA9IEdFVEpTQU1QTEUoZWxlbXB0cls1XSkgKyBHRVRKU0FNUExFKGVsZW1wdHJbNl0pOwotCi0gICAgdG1wMTAgPSB0bXAwICsgdG1wNTsKLSAgICB0bXAxMyA9IHRtcDAgLSB0bXA1OwotICAgIHRtcDExID0gdG1wMSArIHRtcDQ7Ci0gICAgdG1wMTQgPSB0bXAxIC0gdG1wNDsKLSAgICB0bXAxMiA9IHRtcDIgKyB0bXAzOwotICAgIHRtcDE1ID0gdG1wMiAtIHRtcDM7Ci0KLSAgICB0bXAwID0gR0VUSlNBTVBMRShlbGVtcHRyWzBdKSAtIEdFVEpTQU1QTEUoZWxlbXB0clsxMV0pOwotICAgIHRtcDEgPSBHRVRKU0FNUExFKGVsZW1wdHJbMV0pIC0gR0VUSlNBTVBMRShlbGVtcHRyWzEwXSk7Ci0gICAgdG1wMiA9IEdFVEpTQU1QTEUoZWxlbXB0clsyXSkgLSBHRVRKU0FNUExFKGVsZW1wdHJbOV0pOwotICAgIHRtcDMgPSBHRVRKU0FNUExFKGVsZW1wdHJbM10pIC0gR0VUSlNBTVBMRShlbGVtcHRyWzhdKTsKLSAgICB0bXA0ID0gR0VUSlNBTVBMRShlbGVtcHRyWzRdKSAtIEdFVEpTQU1QTEUoZWxlbXB0cls3XSk7Ci0gICAgdG1wNSA9IEdFVEpTQU1QTEUoZWxlbXB0cls1XSkgLSBHRVRKU0FNUExFKGVsZW1wdHJbNl0pOwotCi0gICAgLyogQXBwbHkgdW5zaWduZWQtPnNpZ25lZCBjb252ZXJzaW9uICovCi0gICAgZGF0YXB0clswXSA9IChEQ1RFTEVNKSAodG1wMTAgKyB0bXAxMSArIHRtcDEyIC0gMTIgKiBDRU5URVJKU0FNUExFKTsKLSAgICBkYXRhcHRyWzZdID0gKERDVEVMRU0pICh0bXAxMyAtIHRtcDE0IC0gdG1wMTUpOwotICAgIGRhdGFwdHJbNF0gPSAoRENURUxFTSkKLSAgICAgIERFU0NBTEUoTVVMVElQTFkodG1wMTAgLSB0bXAxMiwgRklYKDEuMjI0NzQ0ODcxKSksIC8qIGM0ICovCi0JICAgICAgQ09OU1RfQklUUyk7Ci0gICAgZGF0YXB0clsyXSA9IChEQ1RFTEVNKQotICAgICAgREVTQ0FMRSh0bXAxNCAtIHRtcDE1ICsgTVVMVElQTFkodG1wMTMgKyB0bXAxNSwgRklYKDEuMzY2MDI1NDA0KSksIC8qIGMyICovCi0JICAgICAgQ09OU1RfQklUUyk7Ci0KLSAgICAvKiBPZGQgcGFydCAqLwotCi0gICAgdG1wMTAgPSBNVUxUSVBMWSh0bXAxICsgdG1wNCwgRklYXzBfNTQxMTk2MTAwKTsgICAgLyogYzkgKi8KLSAgICB0bXAxNCA9IHRtcDEwICsgTVVMVElQTFkodG1wMSwgRklYXzBfNzY1MzY2ODY1KTsgICAvKiBjMy1jOSAqLwotICAgIHRtcDE1ID0gdG1wMTAgLSBNVUxUSVBMWSh0bXA0LCBGSVhfMV84NDc3NTkwNjUpOyAgIC8qIGMzK2M5ICovCi0gICAgdG1wMTIgPSBNVUxUSVBMWSh0bXAwICsgdG1wMiwgRklYKDEuMTIxOTcxMDU0KSk7ICAgLyogYzUgKi8KLSAgICB0bXAxMyA9IE1VTFRJUExZKHRtcDAgKyB0bXAzLCBGSVgoMC44NjA5MTg2NjkpKTsgICAvKiBjNyAqLwotICAgIHRtcDEwID0gdG1wMTIgKyB0bXAxMyArIHRtcDE0IC0gTVVMVElQTFkodG1wMCwgRklYKDAuNTgwNzc0OTUzKSkgLyogYzUrYzctYzEgKi8KLQkgICAgKyBNVUxUSVBMWSh0bXA1LCBGSVgoMC4xODQ1OTE5MTEpKTsgICAgICAgIC8qIGMxMSAqLwotICAgIHRtcDExID0gTVVMVElQTFkodG1wMiArIHRtcDMsIC0gRklYKDAuMTg0NTkxOTExKSk7IC8qIC1jMTEgKi8KLSAgICB0bXAxMiArPSB0bXAxMSAtIHRtcDE1IC0gTVVMVElQTFkodG1wMiwgRklYKDIuMzM5NDkzOTEyKSkgLyogYzErYzUtYzExICovCi0JICAgICsgTVVMVElQTFkodG1wNSwgRklYKDAuODYwOTE4NjY5KSk7ICAgICAgICAvKiBjNyAqLwotICAgIHRtcDEzICs9IHRtcDExIC0gdG1wMTQgKyBNVUxUSVBMWSh0bXAzLCBGSVgoMC43MjU3ODgwMTEpKSAvKiBjMStjMTEtYzcgKi8KLQkgICAgLSBNVUxUSVBMWSh0bXA1LCBGSVgoMS4xMjE5NzEwNTQpKTsgICAgICAgIC8qIGM1ICovCi0gICAgdG1wMTEgPSB0bXAxNSArIE1VTFRJUExZKHRtcDAgLSB0bXAzLCBGSVgoMS4zMDY1NjI5NjUpKSAvKiBjMyAqLwotCSAgICAtIE1VTFRJUExZKHRtcDIgKyB0bXA1LCBGSVhfMF81NDExOTYxMDApOyAgLyogYzkgKi8KLQotICAgIGRhdGFwdHJbMV0gPSAoRENURUxFTSkgREVTQ0FMRSh0bXAxMCwgQ09OU1RfQklUUyk7Ci0gICAgZGF0YXB0clszXSA9IChEQ1RFTEVNKSBERVNDQUxFKHRtcDExLCBDT05TVF9CSVRTKTsKLSAgICBkYXRhcHRyWzVdID0gKERDVEVMRU0pIERFU0NBTEUodG1wMTIsIENPTlNUX0JJVFMpOwotICAgIGRhdGFwdHJbN10gPSAoRENURUxFTSkgREVTQ0FMRSh0bXAxMywgQ09OU1RfQklUUyk7Ci0KLSAgICBjdHIrKzsKLQotICAgIGlmIChjdHIgIT0gRENUU0laRSkgewotICAgICAgaWYgKGN0ciA9PSAxMikKLQlicmVhazsJCQkvKiBEb25lLiAqLwotICAgICAgZGF0YXB0ciArPSBEQ1RTSVpFOwkvKiBhZHZhbmNlIHBvaW50ZXIgdG8gbmV4dCByb3cgKi8KLSAgICB9IGVsc2UKLSAgICAgIGRhdGFwdHIgPSB3b3Jrc3BhY2U7CS8qIHN3aXRjaCBwb2ludGVyIHRvIGV4dGVuZGVkIHdvcmtzcGFjZSAqLwotICB9Ci0KLSAgLyogUGFzcyAyOiBwcm9jZXNzIGNvbHVtbnMuCi0gICAqIFdlIGxlYXZlIHRoZSByZXN1bHRzIHNjYWxlZCB1cCBieSBhbiBvdmVyYWxsIGZhY3RvciBvZiA4LgotICAgKiBXZSBtdXN0IGFsc28gc2NhbGUgdGhlIG91dHB1dCBieSAoOC8xMikqKjIgPSA0LzksIHdoaWNoIHdlIHBhcnRpYWxseQotICAgKiBmb2xkIGludG8gdGhlIGNvbnN0YW50IG11bHRpcGxpZXJzIGFuZCBmaW5hbCBzaGlmdGluZzoKLSAgICogY0sgbm93IHJlcHJlc2VudHMgc3FydCgyKSAqIGNvcyhLKnBpLzI0KSAqIDgvOS4KLSAgICovCi0KLSAgZGF0YXB0ciA9IGRhdGE7Ci0gIHdzcHRyID0gd29ya3NwYWNlOwotICBmb3IgKGN0ciA9IERDVFNJWkUtMTsgY3RyID49IDA7IGN0ci0tKSB7Ci0gICAgLyogRXZlbiBwYXJ0ICovCi0KLSAgICB0bXAwID0gZGF0YXB0cltEQ1RTSVpFKjBdICsgd3NwdHJbRENUU0laRSozXTsKLSAgICB0bXAxID0gZGF0YXB0cltEQ1RTSVpFKjFdICsgd3NwdHJbRENUU0laRSoyXTsKLSAgICB0bXAyID0gZGF0YXB0cltEQ1RTSVpFKjJdICsgd3NwdHJbRENUU0laRSoxXTsKLSAgICB0bXAzID0gZGF0YXB0cltEQ1RTSVpFKjNdICsgd3NwdHJbRENUU0laRSowXTsKLSAgICB0bXA0ID0gZGF0YXB0cltEQ1RTSVpFKjRdICsgZGF0YXB0cltEQ1RTSVpFKjddOwotICAgIHRtcDUgPSBkYXRhcHRyW0RDVFNJWkUqNV0gKyBkYXRhcHRyW0RDVFNJWkUqNl07Ci0KLSAgICB0bXAxMCA9IHRtcDAgKyB0bXA1OwotICAgIHRtcDEzID0gdG1wMCAtIHRtcDU7Ci0gICAgdG1wMTEgPSB0bXAxICsgdG1wNDsKLSAgICB0bXAxNCA9IHRtcDEgLSB0bXA0OwotICAgIHRtcDEyID0gdG1wMiArIHRtcDM7Ci0gICAgdG1wMTUgPSB0bXAyIC0gdG1wMzsKLQotICAgIHRtcDAgPSBkYXRhcHRyW0RDVFNJWkUqMF0gLSB3c3B0cltEQ1RTSVpFKjNdOwotICAgIHRtcDEgPSBkYXRhcHRyW0RDVFNJWkUqMV0gLSB3c3B0cltEQ1RTSVpFKjJdOwotICAgIHRtcDIgPSBkYXRhcHRyW0RDVFNJWkUqMl0gLSB3c3B0cltEQ1RTSVpFKjFdOwotICAgIHRtcDMgPSBkYXRhcHRyW0RDVFNJWkUqM10gLSB3c3B0cltEQ1RTSVpFKjBdOwotICAgIHRtcDQgPSBkYXRhcHRyW0RDVFNJWkUqNF0gLSBkYXRhcHRyW0RDVFNJWkUqN107Ci0gICAgdG1wNSA9IGRhdGFwdHJbRENUU0laRSo1XSAtIGRhdGFwdHJbRENUU0laRSo2XTsKLQotICAgIGRhdGFwdHJbRENUU0laRSowXSA9IChEQ1RFTEVNKQotICAgICAgREVTQ0FMRShNVUxUSVBMWSh0bXAxMCArIHRtcDExICsgdG1wMTIsIEZJWCgwLjg4ODg4ODg4OSkpLCAvKiA4LzkgKi8KLQkgICAgICBDT05TVF9CSVRTKzEpOwotICAgIGRhdGFwdHJbRENUU0laRSo2XSA9IChEQ1RFTEVNKQotICAgICAgREVTQ0FMRShNVUxUSVBMWSh0bXAxMyAtIHRtcDE0IC0gdG1wMTUsIEZJWCgwLjg4ODg4ODg4OSkpLCAvKiA4LzkgKi8KLQkgICAgICBDT05TVF9CSVRTKzEpOwotICAgIGRhdGFwdHJbRENUU0laRSo0XSA9IChEQ1RFTEVNKQotICAgICAgREVTQ0FMRShNVUxUSVBMWSh0bXAxMCAtIHRtcDEyLCBGSVgoMS4wODg2NjIxMDgpKSwgICAgICAgICAvKiBjNCAqLwotCSAgICAgIENPTlNUX0JJVFMrMSk7Ci0gICAgZGF0YXB0cltEQ1RTSVpFKjJdID0gKERDVEVMRU0pCi0gICAgICBERVNDQUxFKE1VTFRJUExZKHRtcDE0IC0gdG1wMTUsIEZJWCgwLjg4ODg4ODg4OSkpICsgICAgICAgIC8qIDgvOSAqLwotCSAgICAgIE1VTFRJUExZKHRtcDEzICsgdG1wMTUsIEZJWCgxLjIxNDI0NDgwMykpLCAgICAgICAgIC8qIGMyICovCi0JICAgICAgQ09OU1RfQklUUysxKTsKLQotICAgIC8qIE9kZCBwYXJ0ICovCi0KLSAgICB0bXAxMCA9IE1VTFRJUExZKHRtcDEgKyB0bXA0LCBGSVgoMC40ODEwNjMyMDApKTsgICAvKiBjOSAqLwotICAgIHRtcDE0ID0gdG1wMTAgKyBNVUxUSVBMWSh0bXAxLCBGSVgoMC42ODAzMjYxMDIpKTsgIC8qIGMzLWM5ICovCi0gICAgdG1wMTUgPSB0bXAxMCAtIE1VTFRJUExZKHRtcDQsIEZJWCgxLjY0MjQ1MjUwMikpOyAgLyogYzMrYzkgKi8KLSAgICB0bXAxMiA9IE1VTFRJUExZKHRtcDAgKyB0bXAyLCBGSVgoMC45OTczMDc2MDMpKTsgICAvKiBjNSAqLwotICAgIHRtcDEzID0gTVVMVElQTFkodG1wMCArIHRtcDMsIEZJWCgwLjc2NTI2MTAzOSkpOyAgIC8qIGM3ICovCi0gICAgdG1wMTAgPSB0bXAxMiArIHRtcDEzICsgdG1wMTQgLSBNVUxUSVBMWSh0bXAwLCBGSVgoMC41MTYyNDQ0MDMpKSAvKiBjNStjNy1jMSAqLwotCSAgICArIE1VTFRJUExZKHRtcDUsIEZJWCgwLjE2NDA4MTY5OSkpOyAgICAgICAgLyogYzExICovCi0gICAgdG1wMTEgPSBNVUxUSVBMWSh0bXAyICsgdG1wMywgLSBGSVgoMC4xNjQwODE2OTkpKTsgLyogLWMxMSAqLwotICAgIHRtcDEyICs9IHRtcDExIC0gdG1wMTUgLSBNVUxUSVBMWSh0bXAyLCBGSVgoMi4wNzk1NTAxNDQpKSAvKiBjMStjNS1jMTEgKi8KLQkgICAgKyBNVUxUSVBMWSh0bXA1LCBGSVgoMC43NjUyNjEwMzkpKTsgICAgICAgIC8qIGM3ICovCi0gICAgdG1wMTMgKz0gdG1wMTEgLSB0bXAxNCArIE1VTFRJUExZKHRtcDMsIEZJWCgwLjY0NTE0NDg5OSkpIC8qIGMxK2MxMS1jNyAqLwotCSAgICAtIE1VTFRJUExZKHRtcDUsIEZJWCgwLjk5NzMwNzYwMykpOyAgICAgICAgLyogYzUgKi8KLSAgICB0bXAxMSA9IHRtcDE1ICsgTVVMVElQTFkodG1wMCAtIHRtcDMsIEZJWCgxLjE2MTM4OTMwMikpIC8qIGMzICovCi0JICAgIC0gTVVMVElQTFkodG1wMiArIHRtcDUsIEZJWCgwLjQ4MTA2MzIwMCkpOyAvKiBjOSAqLwotCi0gICAgZGF0YXB0cltEQ1RTSVpFKjFdID0gKERDVEVMRU0pIERFU0NBTEUodG1wMTAsIENPTlNUX0JJVFMrMSk7Ci0gICAgZGF0YXB0cltEQ1RTSVpFKjNdID0gKERDVEVMRU0pIERFU0NBTEUodG1wMTEsIENPTlNUX0JJVFMrMSk7Ci0gICAgZGF0YXB0cltEQ1RTSVpFKjVdID0gKERDVEVMRU0pIERFU0NBTEUodG1wMTIsIENPTlNUX0JJVFMrMSk7Ci0gICAgZGF0YXB0cltEQ1RTSVpFKjddID0gKERDVEVMRU0pIERFU0NBTEUodG1wMTMsIENPTlNUX0JJVFMrMSk7Ci0KLSAgICBkYXRhcHRyKys7CQkJLyogYWR2YW5jZSBwb2ludGVyIHRvIG5leHQgY29sdW1uICovCi0gICAgd3NwdHIrKzsJCQkvKiBhZHZhbmNlIHBvaW50ZXIgdG8gbmV4dCBjb2x1bW4gKi8KLSAgfQotfQotCi0KLS8qCi0gKiBQZXJmb3JtIHRoZSBmb3J3YXJkIERDVCBvbiBhIDEzeDEzIHNhbXBsZSBibG9jay4KLSAqLwotCi1HTE9CQUwodm9pZCkKLWpwZWdfZmRjdF8xM3gxMyAoRENURUxFTSAqIGRhdGEsIEpTQU1QQVJSQVkgc2FtcGxlX2RhdGEsIEpESU1FTlNJT04gc3RhcnRfY29sKQotewotICBJTlQzMiB0bXAwLCB0bXAxLCB0bXAyLCB0bXAzLCB0bXA0LCB0bXA1LCB0bXA2OwotICBJTlQzMiB0bXAxMCwgdG1wMTEsIHRtcDEyLCB0bXAxMywgdG1wMTQsIHRtcDE1OwotICBJTlQzMiB6MSwgejI7Ci0gIERDVEVMRU0gd29ya3NwYWNlWzgqNV07Ci0gIERDVEVMRU0gKmRhdGFwdHI7Ci0gIERDVEVMRU0gKndzcHRyOwotICBKU0FNUFJPVyBlbGVtcHRyOwotICBpbnQgY3RyOwotICBTSElGVF9URU1QUwotCi0gIC8qIFBhc3MgMTogcHJvY2VzcyByb3dzLiAqLwotICAvKiBOb3RlIHJlc3VsdHMgYXJlIHNjYWxlZCB1cCBieSBzcXJ0KDgpIGNvbXBhcmVkIHRvIGEgdHJ1ZSBEQ1QuICovCi0gIC8qIGNLIHJlcHJlc2VudHMgc3FydCgyKSAqIGNvcyhLKnBpLzI2KS4gKi8KLQotICBkYXRhcHRyID0gZGF0YTsKLSAgY3RyID0gMDsKLSAgZm9yICg7OykgewotICAgIGVsZW1wdHIgPSBzYW1wbGVfZGF0YVtjdHJdICsgc3RhcnRfY29sOwotCi0gICAgLyogRXZlbiBwYXJ0ICovCi0KLSAgICB0bXAwID0gR0VUSlNBTVBMRShlbGVtcHRyWzBdKSArIEdFVEpTQU1QTEUoZWxlbXB0clsxMl0pOwotICAgIHRtcDEgPSBHRVRKU0FNUExFKGVsZW1wdHJbMV0pICsgR0VUSlNBTVBMRShlbGVtcHRyWzExXSk7Ci0gICAgdG1wMiA9IEdFVEpTQU1QTEUoZWxlbXB0clsyXSkgKyBHRVRKU0FNUExFKGVsZW1wdHJbMTBdKTsKLSAgICB0bXAzID0gR0VUSlNBTVBMRShlbGVtcHRyWzNdKSArIEdFVEpTQU1QTEUoZWxlbXB0cls5XSk7Ci0gICAgdG1wNCA9IEdFVEpTQU1QTEUoZWxlbXB0cls0XSkgKyBHRVRKU0FNUExFKGVsZW1wdHJbOF0pOwotICAgIHRtcDUgPSBHRVRKU0FNUExFKGVsZW1wdHJbNV0pICsgR0VUSlNBTVBMRShlbGVtcHRyWzddKTsKLSAgICB0bXA2ID0gR0VUSlNBTVBMRShlbGVtcHRyWzZdKTsKLQotICAgIHRtcDEwID0gR0VUSlNBTVBMRShlbGVtcHRyWzBdKSAtIEdFVEpTQU1QTEUoZWxlbXB0clsxMl0pOwotICAgIHRtcDExID0gR0VUSlNBTVBMRShlbGVtcHRyWzFdKSAtIEdFVEpTQU1QTEUoZWxlbXB0clsxMV0pOwotICAgIHRtcDEyID0gR0VUSlNBTVBMRShlbGVtcHRyWzJdKSAtIEdFVEpTQU1QTEUoZWxlbXB0clsxMF0pOwotICAgIHRtcDEzID0gR0VUSlNBTVBMRShlbGVtcHRyWzNdKSAtIEdFVEpTQU1QTEUoZWxlbXB0cls5XSk7Ci0gICAgdG1wMTQgPSBHRVRKU0FNUExFKGVsZW1wdHJbNF0pIC0gR0VUSlNBTVBMRShlbGVtcHRyWzhdKTsKLSAgICB0bXAxNSA9IEdFVEpTQU1QTEUoZWxlbXB0cls1XSkgLSBHRVRKU0FNUExFKGVsZW1wdHJbN10pOwotCi0gICAgLyogQXBwbHkgdW5zaWduZWQtPnNpZ25lZCBjb252ZXJzaW9uICovCi0gICAgZGF0YXB0clswXSA9IChEQ1RFTEVNKQotICAgICAgKHRtcDAgKyB0bXAxICsgdG1wMiArIHRtcDMgKyB0bXA0ICsgdG1wNSArIHRtcDYgLSAxMyAqIENFTlRFUkpTQU1QTEUpOwotICAgIHRtcDYgKz0gdG1wNjsKLSAgICB0bXAwIC09IHRtcDY7Ci0gICAgdG1wMSAtPSB0bXA2OwotICAgIHRtcDIgLT0gdG1wNjsKLSAgICB0bXAzIC09IHRtcDY7Ci0gICAgdG1wNCAtPSB0bXA2OwotICAgIHRtcDUgLT0gdG1wNjsKLSAgICBkYXRhcHRyWzJdID0gKERDVEVMRU0pCi0gICAgICBERVNDQUxFKE1VTFRJUExZKHRtcDAsIEZJWCgxLjM3MzExOTA4NikpICsgICAvKiBjMiAqLwotCSAgICAgIE1VTFRJUExZKHRtcDEsIEZJWCgxLjA1ODU1NDA1MikpICsgICAvKiBjNiAqLwotCSAgICAgIE1VTFRJUExZKHRtcDIsIEZJWCgwLjUwMTQ4NzA0MSkpIC0gICAvKiBjMTAgKi8KLQkgICAgICBNVUxUSVBMWSh0bXAzLCBGSVgoMC4xNzA0NjQ2MDgpKSAtICAgLyogYzEyICovCi0JICAgICAgTVVMVElQTFkodG1wNCwgRklYKDAuODAzMzY0ODY5KSkgLSAgIC8qIGM4ICovCi0JICAgICAgTVVMVElQTFkodG1wNSwgRklYKDEuMjUyMjIzOTIwKSksICAgIC8qIGM0ICovCi0JICAgICAgQ09OU1RfQklUUyk7Ci0gICAgejEgPSBNVUxUSVBMWSh0bXAwIC0gdG1wMiwgRklYKDEuMTU1Mzg4OTg2KSkgLSAvKiAoYzQrYzYpLzIgKi8KLQkgTVVMVElQTFkodG1wMyAtIHRtcDQsIEZJWCgwLjQzNTgxNjAyMykpIC0gLyogKGMyLWMxMCkvMiAqLwotCSBNVUxUSVBMWSh0bXAxIC0gdG1wNSwgRklYKDAuMzE2NDUwMTMxKSk7ICAvKiAoYzgtYzEyKS8yICovCi0gICAgejIgPSBNVUxUSVBMWSh0bXAwICsgdG1wMiwgRklYKDAuMDk2ODM0OTM0KSkgLSAvKiAoYzQtYzYpLzIgKi8KLQkgTVVMVElQTFkodG1wMyArIHRtcDQsIEZJWCgwLjkzNzMwMzA2NCkpICsgLyogKGMyK2MxMCkvMiAqLwotCSBNVUxUSVBMWSh0bXAxICsgdG1wNSwgRklYKDAuNDg2OTE0NzM5KSk7ICAvKiAoYzgrYzEyKS8yICovCi0KLSAgICBkYXRhcHRyWzRdID0gKERDVEVMRU0pIERFU0NBTEUoejEgKyB6MiwgQ09OU1RfQklUUyk7Ci0gICAgZGF0YXB0cls2XSA9IChEQ1RFTEVNKSBERVNDQUxFKHoxIC0gejIsIENPTlNUX0JJVFMpOwotCi0gICAgLyogT2RkIHBhcnQgKi8KLQotICAgIHRtcDEgPSBNVUxUSVBMWSh0bXAxMCArIHRtcDExLCBGSVgoMS4zMjIzMTI2NTEpKTsgICAvKiBjMyAqLwotICAgIHRtcDIgPSBNVUxUSVBMWSh0bXAxMCArIHRtcDEyLCBGSVgoMS4xNjM4NzQ5NDUpKTsgICAvKiBjNSAqLwotICAgIHRtcDMgPSBNVUxUSVBMWSh0bXAxMCArIHRtcDEzLCBGSVgoMC45Mzc3OTcwNTcpKSArICAvKiBjNyAqLwotCSAgIE1VTFRJUExZKHRtcDE0ICsgdG1wMTUsIEZJWCgwLjMzODQ0MzQ1OCkpOyAgIC8qIGMxMSAqLwotICAgIHRtcDAgPSB0bXAxICsgdG1wMiArIHRtcDMgLQotCSAgIE1VTFRJUExZKHRtcDEwLCBGSVgoMi4wMjAwODIzMDApKSArICAgICAgICAgIC8qIGMzK2M1K2M3LWMxICovCi0JICAgTVVMVElQTFkodG1wMTQsIEZJWCgwLjMxODc3NDM1NSkpOyAgICAgICAgICAgLyogYzktYzExICovCi0gICAgdG1wNCA9IE1VTFRJUExZKHRtcDE0IC0gdG1wMTUsIEZJWCgwLjkzNzc5NzA1NykpIC0gIC8qIGM3ICovCi0JICAgTVVMVElQTFkodG1wMTEgKyB0bXAxMiwgRklYKDAuMzM4NDQzNDU4KSk7ICAgLyogYzExICovCi0gICAgdG1wNSA9IE1VTFRJUExZKHRtcDExICsgdG1wMTMsIC0gRklYKDEuMTYzODc0OTQ1KSk7IC8qIC1jNSAqLwotICAgIHRtcDEgKz0gdG1wNCArIHRtcDUgKwotCSAgICBNVUxUSVBMWSh0bXAxMSwgRklYKDAuODM3MjIzNTY0KSkgLSAgICAgICAgIC8qIGM1K2M5K2MxMS1jMyAqLwotCSAgICBNVUxUSVBMWSh0bXAxNCwgRklYKDIuMzQxNjk5NDEwKSk7ICAgICAgICAgIC8qIGMxK2M3ICovCi0gICAgdG1wNiA9IE1VTFRJUExZKHRtcDEyICsgdG1wMTMsIC0gRklYKDAuNjU3MjE3ODEzKSk7IC8qIC1jOSAqLwotICAgIHRtcDIgKz0gdG1wNCArIHRtcDYgLQotCSAgICBNVUxUSVBMWSh0bXAxMiwgRklYKDEuNTcyMTE2MDI3KSkgKyAgICAgICAgIC8qIGMxK2M1LWM5LWMxMSAqLwotCSAgICBNVUxUSVBMWSh0bXAxNSwgRklYKDIuMjYwMTA5NzA4KSk7ICAgICAgICAgIC8qIGMzK2M3ICovCi0gICAgdG1wMyArPSB0bXA1ICsgdG1wNiArCi0JICAgIE1VTFRJUExZKHRtcDEzLCBGSVgoMi4yMDU2MDgzNTIpKSAtICAgICAgICAgLyogYzMrYzUrYzktYzcgKi8KLQkgICAgTVVMVElQTFkodG1wMTUsIEZJWCgxLjc0MjM0NTgxMSkpOyAgICAgICAgICAvKiBjMStjMTEgKi8KLQotICAgIGRhdGFwdHJbMV0gPSAoRENURUxFTSkgREVTQ0FMRSh0bXAwLCBDT05TVF9CSVRTKTsKLSAgICBkYXRhcHRyWzNdID0gKERDVEVMRU0pIERFU0NBTEUodG1wMSwgQ09OU1RfQklUUyk7Ci0gICAgZGF0YXB0cls1XSA9IChEQ1RFTEVNKSBERVNDQUxFKHRtcDIsIENPTlNUX0JJVFMpOwotICAgIGRhdGFwdHJbN10gPSAoRENURUxFTSkgREVTQ0FMRSh0bXAzLCBDT05TVF9CSVRTKTsKLQotICAgIGN0cisrOwotCi0gICAgaWYgKGN0ciAhPSBEQ1RTSVpFKSB7Ci0gICAgICBpZiAoY3RyID09IDEzKQotCWJyZWFrOwkJCS8qIERvbmUuICovCi0gICAgICBkYXRhcHRyICs9IERDVFNJWkU7CS8qIGFkdmFuY2UgcG9pbnRlciB0byBuZXh0IHJvdyAqLwotICAgIH0gZWxzZQotICAgICAgZGF0YXB0ciA9IHdvcmtzcGFjZTsJLyogc3dpdGNoIHBvaW50ZXIgdG8gZXh0ZW5kZWQgd29ya3NwYWNlICovCi0gIH0KLQotICAvKiBQYXNzIDI6IHByb2Nlc3MgY29sdW1ucy4KLSAgICogV2UgbGVhdmUgdGhlIHJlc3VsdHMgc2NhbGVkIHVwIGJ5IGFuIG92ZXJhbGwgZmFjdG9yIG9mIDguCi0gICAqIFdlIG11c3QgYWxzbyBzY2FsZSB0aGUgb3V0cHV0IGJ5ICg4LzEzKSoqMiA9IDY0LzE2OSwgd2hpY2ggd2UgcGFydGlhbGx5Ci0gICAqIGZvbGQgaW50byB0aGUgY29uc3RhbnQgbXVsdGlwbGllcnMgYW5kIGZpbmFsIHNoaWZ0aW5nOgotICAgKiBjSyBub3cgcmVwcmVzZW50cyBzcXJ0KDIpICogY29zKEsqcGkvMjYpICogMTI4LzE2OS4KLSAgICovCi0KLSAgZGF0YXB0ciA9IGRhdGE7Ci0gIHdzcHRyID0gd29ya3NwYWNlOwotICBmb3IgKGN0ciA9IERDVFNJWkUtMTsgY3RyID49IDA7IGN0ci0tKSB7Ci0gICAgLyogRXZlbiBwYXJ0ICovCi0KLSAgICB0bXAwID0gZGF0YXB0cltEQ1RTSVpFKjBdICsgd3NwdHJbRENUU0laRSo0XTsKLSAgICB0bXAxID0gZGF0YXB0cltEQ1RTSVpFKjFdICsgd3NwdHJbRENUU0laRSozXTsKLSAgICB0bXAyID0gZGF0YXB0cltEQ1RTSVpFKjJdICsgd3NwdHJbRENUU0laRSoyXTsKLSAgICB0bXAzID0gZGF0YXB0cltEQ1RTSVpFKjNdICsgd3NwdHJbRENUU0laRSoxXTsKLSAgICB0bXA0ID0gZGF0YXB0cltEQ1RTSVpFKjRdICsgd3NwdHJbRENUU0laRSowXTsKLSAgICB0bXA1ID0gZGF0YXB0cltEQ1RTSVpFKjVdICsgZGF0YXB0cltEQ1RTSVpFKjddOwotICAgIHRtcDYgPSBkYXRhcHRyW0RDVFNJWkUqNl07Ci0KLSAgICB0bXAxMCA9IGRhdGFwdHJbRENUU0laRSowXSAtIHdzcHRyW0RDVFNJWkUqNF07Ci0gICAgdG1wMTEgPSBkYXRhcHRyW0RDVFNJWkUqMV0gLSB3c3B0cltEQ1RTSVpFKjNdOwotICAgIHRtcDEyID0gZGF0YXB0cltEQ1RTSVpFKjJdIC0gd3NwdHJbRENUU0laRSoyXTsKLSAgICB0bXAxMyA9IGRhdGFwdHJbRENUU0laRSozXSAtIHdzcHRyW0RDVFNJWkUqMV07Ci0gICAgdG1wMTQgPSBkYXRhcHRyW0RDVFNJWkUqNF0gLSB3c3B0cltEQ1RTSVpFKjBdOwotICAgIHRtcDE1ID0gZGF0YXB0cltEQ1RTSVpFKjVdIC0gZGF0YXB0cltEQ1RTSVpFKjddOwotCi0gICAgZGF0YXB0cltEQ1RTSVpFKjBdID0gKERDVEVMRU0pCi0gICAgICBERVNDQUxFKE1VTFRJUExZKHRtcDAgKyB0bXAxICsgdG1wMiArIHRtcDMgKyB0bXA0ICsgdG1wNSArIHRtcDYsCi0JCSAgICAgICBGSVgoMC43NTczOTY0NTApKSwgICAgICAgICAgLyogMTI4LzE2OSAqLwotCSAgICAgIENPTlNUX0JJVFMrMSk7Ci0gICAgdG1wNiArPSB0bXA2OwotICAgIHRtcDAgLT0gdG1wNjsKLSAgICB0bXAxIC09IHRtcDY7Ci0gICAgdG1wMiAtPSB0bXA2OwotICAgIHRtcDMgLT0gdG1wNjsKLSAgICB0bXA0IC09IHRtcDY7Ci0gICAgdG1wNSAtPSB0bXA2OwotICAgIGRhdGFwdHJbRENUU0laRSoyXSA9IChEQ1RFTEVNKQotICAgICAgREVTQ0FMRShNVUxUSVBMWSh0bXAwLCBGSVgoMS4wMzk5OTU1MjEpKSArICAgLyogYzIgKi8KLQkgICAgICBNVUxUSVBMWSh0bXAxLCBGSVgoMC44MDE3NDUwODEpKSArICAgLyogYzYgKi8KLQkgICAgICBNVUxUSVBMWSh0bXAyLCBGSVgoMC4zNzk4MjQ1MDQpKSAtICAgLyogYzEwICovCi0JICAgICAgTVVMVElQTFkodG1wMywgRklYKDAuMTI5MTA5Mjg5KSkgLSAgIC8qIGMxMiAqLwotCSAgICAgIE1VTFRJUExZKHRtcDQsIEZJWCgwLjYwODQ2NTcwMCkpIC0gICAvKiBjOCAqLwotCSAgICAgIE1VTFRJUExZKHRtcDUsIEZJWCgwLjk0ODQyOTk1MikpLCAgICAvKiBjNCAqLwotCSAgICAgIENPTlNUX0JJVFMrMSk7Ci0gICAgejEgPSBNVUxUSVBMWSh0bXAwIC0gdG1wMiwgRklYKDAuODc1MDg3NTE2KSkgLSAvKiAoYzQrYzYpLzIgKi8KLQkgTVVMVElQTFkodG1wMyAtIHRtcDQsIEZJWCgwLjMzMDA4NTUwOSkpIC0gLyogKGMyLWMxMCkvMiAqLwotCSBNVUxUSVBMWSh0bXAxIC0gdG1wNSwgRklYKDAuMjM5Njc4MjA1KSk7ICAvKiAoYzgtYzEyKS8yICovCi0gICAgejIgPSBNVUxUSVBMWSh0bXAwICsgdG1wMiwgRklYKDAuMDczMzQyNDM1KSkgLSAvKiAoYzQtYzYpLzIgKi8KLQkgTVVMVElQTFkodG1wMyArIHRtcDQsIEZJWCgwLjcwOTkxMDAxMykpICsgLyogKGMyK2MxMCkvMiAqLwotCSBNVUxUSVBMWSh0bXAxICsgdG1wNSwgRklYKDAuMzY4Nzg3NDk0KSk7ICAvKiAoYzgrYzEyKS8yICovCi0KLSAgICBkYXRhcHRyW0RDVFNJWkUqNF0gPSAoRENURUxFTSkgREVTQ0FMRSh6MSArIHoyLCBDT05TVF9CSVRTKzEpOwotICAgIGRhdGFwdHJbRENUU0laRSo2XSA9IChEQ1RFTEVNKSBERVNDQUxFKHoxIC0gejIsIENPTlNUX0JJVFMrMSk7Ci0KLSAgICAvKiBPZGQgcGFydCAqLwotCi0gICAgdG1wMSA9IE1VTFRJUExZKHRtcDEwICsgdG1wMTEsIEZJWCgxLjAwMTUxNDkwOCkpOyAgIC8qIGMzICovCi0gICAgdG1wMiA9IE1VTFRJUExZKHRtcDEwICsgdG1wMTIsIEZJWCgwLjg4MTUxNDc1MSkpOyAgIC8qIGM1ICovCi0gICAgdG1wMyA9IE1VTFRJUExZKHRtcDEwICsgdG1wMTMsIEZJWCgwLjcxMDI4NDE2MSkpICsgIC8qIGM3ICovCi0JICAgTVVMVElQTFkodG1wMTQgKyB0bXAxNSwgRklYKDAuMjU2MzM1ODc0KSk7ICAgLyogYzExICovCi0gICAgdG1wMCA9IHRtcDEgKyB0bXAyICsgdG1wMyAtCi0JICAgTVVMVElQTFkodG1wMTAsIEZJWCgxLjUzMDAwMzE2MikpICsgICAgICAgICAgLyogYzMrYzUrYzctYzEgKi8KLQkgICBNVUxUSVBMWSh0bXAxNCwgRklYKDAuMjQxNDM4NTY0KSk7ICAgICAgICAgICAvKiBjOS1jMTEgKi8KLSAgICB0bXA0ID0gTVVMVElQTFkodG1wMTQgLSB0bXAxNSwgRklYKDAuNzEwMjg0MTYxKSkgLSAgLyogYzcgKi8KLQkgICBNVUxUSVBMWSh0bXAxMSArIHRtcDEyLCBGSVgoMC4yNTYzMzU4NzQpKTsgICAvKiBjMTEgKi8KLSAgICB0bXA1ID0gTVVMVElQTFkodG1wMTEgKyB0bXAxMywgLSBGSVgoMC44ODE1MTQ3NTEpKTsgLyogLWM1ICovCi0gICAgdG1wMSArPSB0bXA0ICsgdG1wNSArCi0JICAgIE1VTFRJUExZKHRtcDExLCBGSVgoMC42MzQxMTAxNTUpKSAtICAgICAgICAgLyogYzUrYzkrYzExLWMzICovCi0JICAgIE1VTFRJUExZKHRtcDE0LCBGSVgoMS43NzM1OTQ4MTkpKTsgICAgICAgICAgLyogYzErYzcgKi8KLSAgICB0bXA2ID0gTVVMVElQTFkodG1wMTIgKyB0bXAxMywgLSBGSVgoMC40OTc3NzQ0MzgpKTsgLyogLWM5ICovCi0gICAgdG1wMiArPSB0bXA0ICsgdG1wNiAtCi0JICAgIE1VTFRJUExZKHRtcDEyLCBGSVgoMS4xOTA3MTUwOTgpKSArICAgICAgICAgLyogYzErYzUtYzktYzExICovCi0JICAgIE1VTFRJUExZKHRtcDE1LCBGSVgoMS43MTE3OTkwNjkpKTsgICAgICAgICAgLyogYzMrYzcgKi8KLSAgICB0bXAzICs9IHRtcDUgKyB0bXA2ICsKLQkgICAgTVVMVElQTFkodG1wMTMsIEZJWCgxLjY3MDUxOTkzNSkpIC0gICAgICAgICAvKiBjMytjNStjOS1jNyAqLwotCSAgICBNVUxUSVBMWSh0bXAxNSwgRklYKDEuMzE5NjQ2NTMyKSk7ICAgICAgICAgIC8qIGMxK2MxMSAqLwotCi0gICAgZGF0YXB0cltEQ1RTSVpFKjFdID0gKERDVEVMRU0pIERFU0NBTEUodG1wMCwgQ09OU1RfQklUUysxKTsKLSAgICBkYXRhcHRyW0RDVFNJWkUqM10gPSAoRENURUxFTSkgREVTQ0FMRSh0bXAxLCBDT05TVF9CSVRTKzEpOwotICAgIGRhdGFwdHJbRENUU0laRSo1XSA9IChEQ1RFTEVNKSBERVNDQUxFKHRtcDIsIENPTlNUX0JJVFMrMSk7Ci0gICAgZGF0YXB0cltEQ1RTSVpFKjddID0gKERDVEVMRU0pIERFU0NBTEUodG1wMywgQ09OU1RfQklUUysxKTsKLQotICAgIGRhdGFwdHIrKzsJCQkvKiBhZHZhbmNlIHBvaW50ZXIgdG8gbmV4dCBjb2x1bW4gKi8KLSAgICB3c3B0cisrOwkJCS8qIGFkdmFuY2UgcG9pbnRlciB0byBuZXh0IGNvbHVtbiAqLwotICB9Ci19Ci0KLQotLyoKLSAqIFBlcmZvcm0gdGhlIGZvcndhcmQgRENUIG9uIGEgMTR4MTQgc2FtcGxlIGJsb2NrLgotICovCi0KLUdMT0JBTCh2b2lkKQotanBlZ19mZGN0XzE0eDE0IChEQ1RFTEVNICogZGF0YSwgSlNBTVBBUlJBWSBzYW1wbGVfZGF0YSwgSkRJTUVOU0lPTiBzdGFydF9jb2wpCi17Ci0gIElOVDMyIHRtcDAsIHRtcDEsIHRtcDIsIHRtcDMsIHRtcDQsIHRtcDUsIHRtcDY7Ci0gIElOVDMyIHRtcDEwLCB0bXAxMSwgdG1wMTIsIHRtcDEzLCB0bXAxNCwgdG1wMTUsIHRtcDE2OwotICBEQ1RFTEVNIHdvcmtzcGFjZVs4KjZdOwotICBEQ1RFTEVNICpkYXRhcHRyOwotICBEQ1RFTEVNICp3c3B0cjsKLSAgSlNBTVBST1cgZWxlbXB0cjsKLSAgaW50IGN0cjsKLSAgU0hJRlRfVEVNUFMKLQotICAvKiBQYXNzIDE6IHByb2Nlc3Mgcm93cy4gKi8KLSAgLyogTm90ZSByZXN1bHRzIGFyZSBzY2FsZWQgdXAgYnkgc3FydCg4KSBjb21wYXJlZCB0byBhIHRydWUgRENULiAqLwotICAvKiBjSyByZXByZXNlbnRzIHNxcnQoMikgKiBjb3MoSypwaS8yOCkuICovCi0KLSAgZGF0YXB0ciA9IGRhdGE7Ci0gIGN0ciA9IDA7Ci0gIGZvciAoOzspIHsKLSAgICBlbGVtcHRyID0gc2FtcGxlX2RhdGFbY3RyXSArIHN0YXJ0X2NvbDsKLQotICAgIC8qIEV2ZW4gcGFydCAqLwotCi0gICAgdG1wMCA9IEdFVEpTQU1QTEUoZWxlbXB0clswXSkgKyBHRVRKU0FNUExFKGVsZW1wdHJbMTNdKTsKLSAgICB0bXAxID0gR0VUSlNBTVBMRShlbGVtcHRyWzFdKSArIEdFVEpTQU1QTEUoZWxlbXB0clsxMl0pOwotICAgIHRtcDIgPSBHRVRKU0FNUExFKGVsZW1wdHJbMl0pICsgR0VUSlNBTVBMRShlbGVtcHRyWzExXSk7Ci0gICAgdG1wMTMgPSBHRVRKU0FNUExFKGVsZW1wdHJbM10pICsgR0VUSlNBTVBMRShlbGVtcHRyWzEwXSk7Ci0gICAgdG1wNCA9IEdFVEpTQU1QTEUoZWxlbXB0cls0XSkgKyBHRVRKU0FNUExFKGVsZW1wdHJbOV0pOwotICAgIHRtcDUgPSBHRVRKU0FNUExFKGVsZW1wdHJbNV0pICsgR0VUSlNBTVBMRShlbGVtcHRyWzhdKTsKLSAgICB0bXA2ID0gR0VUSlNBTVBMRShlbGVtcHRyWzZdKSArIEdFVEpTQU1QTEUoZWxlbXB0cls3XSk7Ci0KLSAgICB0bXAxMCA9IHRtcDAgKyB0bXA2OwotICAgIHRtcDE0ID0gdG1wMCAtIHRtcDY7Ci0gICAgdG1wMTEgPSB0bXAxICsgdG1wNTsKLSAgICB0bXAxNSA9IHRtcDEgLSB0bXA1OwotICAgIHRtcDEyID0gdG1wMiArIHRtcDQ7Ci0gICAgdG1wMTYgPSB0bXAyIC0gdG1wNDsKLQotICAgIHRtcDAgPSBHRVRKU0FNUExFKGVsZW1wdHJbMF0pIC0gR0VUSlNBTVBMRShlbGVtcHRyWzEzXSk7Ci0gICAgdG1wMSA9IEdFVEpTQU1QTEUoZWxlbXB0clsxXSkgLSBHRVRKU0FNUExFKGVsZW1wdHJbMTJdKTsKLSAgICB0bXAyID0gR0VUSlNBTVBMRShlbGVtcHRyWzJdKSAtIEdFVEpTQU1QTEUoZWxlbXB0clsxMV0pOwotICAgIHRtcDMgPSBHRVRKU0FNUExFKGVsZW1wdHJbM10pIC0gR0VUSlNBTVBMRShlbGVtcHRyWzEwXSk7Ci0gICAgdG1wNCA9IEdFVEpTQU1QTEUoZWxlbXB0cls0XSkgLSBHRVRKU0FNUExFKGVsZW1wdHJbOV0pOwotICAgIHRtcDUgPSBHRVRKU0FNUExFKGVsZW1wdHJbNV0pIC0gR0VUSlNBTVBMRShlbGVtcHRyWzhdKTsKLSAgICB0bXA2ID0gR0VUSlNBTVBMRShlbGVtcHRyWzZdKSAtIEdFVEpTQU1QTEUoZWxlbXB0cls3XSk7Ci0KLSAgICAvKiBBcHBseSB1bnNpZ25lZC0+c2lnbmVkIGNvbnZlcnNpb24gKi8KLSAgICBkYXRhcHRyWzBdID0gKERDVEVMRU0pCi0gICAgICAodG1wMTAgKyB0bXAxMSArIHRtcDEyICsgdG1wMTMgLSAxNCAqIENFTlRFUkpTQU1QTEUpOwotICAgIHRtcDEzICs9IHRtcDEzOwotICAgIGRhdGFwdHJbNF0gPSAoRENURUxFTSkKLSAgICAgIERFU0NBTEUoTVVMVElQTFkodG1wMTAgLSB0bXAxMywgRklYKDEuMjc0MTYyMzkyKSkgKyAvKiBjNCAqLwotCSAgICAgIE1VTFRJUExZKHRtcDExIC0gdG1wMTMsIEZJWCgwLjMxNDY5MjEyMykpIC0gLyogYzEyICovCi0JICAgICAgTVVMVElQTFkodG1wMTIgLSB0bXAxMywgRklYKDAuODgxNzQ3NzM0KSksICAvKiBjOCAqLwotCSAgICAgIENPTlNUX0JJVFMpOwotCi0gICAgdG1wMTAgPSBNVUxUSVBMWSh0bXAxNCArIHRtcDE1LCBGSVgoMS4xMDU2NzY2ODYpKTsgICAgLyogYzYgKi8KLQotICAgIGRhdGFwdHJbMl0gPSAoRENURUxFTSkKLSAgICAgIERFU0NBTEUodG1wMTAgKyBNVUxUSVBMWSh0bXAxNCwgRklYKDAuMjczMDc5NTkwKSkgICAvKiBjMi1jNiAqLwotCSAgICAgICsgTVVMVElQTFkodG1wMTYsIEZJWCgwLjYxMzYwNDI2OCkpLCAgICAgICAgLyogYzEwICovCi0JICAgICAgQ09OU1RfQklUUyk7Ci0gICAgZGF0YXB0cls2XSA9IChEQ1RFTEVNKQotICAgICAgREVTQ0FMRSh0bXAxMCAtIE1VTFRJUExZKHRtcDE1LCBGSVgoMS43MTkyODA5NTQpKSAgIC8qIGM2K2MxMCAqLwotCSAgICAgIC0gTVVMVElQTFkodG1wMTYsIEZJWCgxLjM3ODc1NjI3NikpLCAgICAgICAgLyogYzIgKi8KLQkgICAgICBDT05TVF9CSVRTKTsKLQotICAgIC8qIE9kZCBwYXJ0ICovCi0KLSAgICB0bXAxMCA9IHRtcDEgKyB0bXAyOwotICAgIHRtcDExID0gdG1wNSAtIHRtcDQ7Ci0gICAgZGF0YXB0cls3XSA9IChEQ1RFTEVNKSAodG1wMCAtIHRtcDEwICsgdG1wMyAtIHRtcDExIC0gdG1wNik7Ci0gICAgdG1wMyA8PD0gQ09OU1RfQklUUzsKLSAgICB0bXAxMCA9IE1VTFRJUExZKHRtcDEwLCAtIEZJWCgwLjE1ODM0MTY4MSkpOyAgICAgICAgICAvKiAtYzEzICovCi0gICAgdG1wMTEgPSBNVUxUSVBMWSh0bXAxMSwgRklYKDEuNDA1MzIxMjg0KSk7ICAgICAgICAgICAgLyogYzEgKi8KLSAgICB0bXAxMCArPSB0bXAxMSAtIHRtcDM7Ci0gICAgdG1wMTEgPSBNVUxUSVBMWSh0bXAwICsgdG1wMiwgRklYKDEuMTk3NDQ4ODQ2KSkgKyAgICAgLyogYzUgKi8KLQkgICAgTVVMVElQTFkodG1wNCArIHRtcDYsIEZJWCgwLjc1MjQwNjk3OCkpOyAgICAgIC8qIGM5ICovCi0gICAgZGF0YXB0cls1XSA9IChEQ1RFTEVNKQotICAgICAgREVTQ0FMRSh0bXAxMCArIHRtcDExIC0gTVVMVElQTFkodG1wMiwgRklYKDIuMzczOTU5NzczKSkgLyogYzMrYzUtYzEzICovCi0JICAgICAgKyBNVUxUSVBMWSh0bXA0LCBGSVgoMS4xMTk5OTk0MzUpKSwgICAgICAgICAvKiBjMStjMTEtYzkgKi8KLQkgICAgICBDT05TVF9CSVRTKTsKLSAgICB0bXAxMiA9IE1VTFRJUExZKHRtcDAgKyB0bXAxLCBGSVgoMS4zMzQ4NTI2MDcpKSArICAgICAvKiBjMyAqLwotCSAgICBNVUxUSVBMWSh0bXA1IC0gdG1wNiwgRklYKDAuNDY3MDg1MTI5KSk7ICAgICAgLyogYzExICovCi0gICAgZGF0YXB0clszXSA9IChEQ1RFTEVNKQotICAgICAgREVTQ0FMRSh0bXAxMCArIHRtcDEyIC0gTVVMVElQTFkodG1wMSwgRklYKDAuNDI0MTAzOTQ4KSkgLyogYzMtYzktYzEzICovCi0JICAgICAgLSBNVUxUSVBMWSh0bXA1LCBGSVgoMy4wNjk4NTUyNTkpKSwgICAgICAgICAvKiBjMStjNStjMTEgKi8KLQkgICAgICBDT05TVF9CSVRTKTsKLSAgICBkYXRhcHRyWzFdID0gKERDVEVMRU0pCi0gICAgICBERVNDQUxFKHRtcDExICsgdG1wMTIgKyB0bXAzICsgdG1wNiAtCi0JICAgICAgTVVMVElQTFkodG1wMCArIHRtcDYsIEZJWCgxLjEyNjk4MDE2OSkpLCAgICAvKiBjMytjNS1jMSAqLwotCSAgICAgIENPTlNUX0JJVFMpOwotCi0gICAgY3RyKys7Ci0KLSAgICBpZiAoY3RyICE9IERDVFNJWkUpIHsKLSAgICAgIGlmIChjdHIgPT0gMTQpCi0JYnJlYWs7CQkJLyogRG9uZS4gKi8KLSAgICAgIGRhdGFwdHIgKz0gRENUU0laRTsJLyogYWR2YW5jZSBwb2ludGVyIHRvIG5leHQgcm93ICovCi0gICAgfSBlbHNlCi0gICAgICBkYXRhcHRyID0gd29ya3NwYWNlOwkvKiBzd2l0Y2ggcG9pbnRlciB0byBleHRlbmRlZCB3b3Jrc3BhY2UgKi8KLSAgfQotCi0gIC8qIFBhc3MgMjogcHJvY2VzcyBjb2x1bW5zLgotICAgKiBXZSBsZWF2ZSB0aGUgcmVzdWx0cyBzY2FsZWQgdXAgYnkgYW4gb3ZlcmFsbCBmYWN0b3Igb2YgOC4KLSAgICogV2UgbXVzdCBhbHNvIHNjYWxlIHRoZSBvdXRwdXQgYnkgKDgvMTQpKioyID0gMTYvNDksIHdoaWNoIHdlIHBhcnRpYWxseQotICAgKiBmb2xkIGludG8gdGhlIGNvbnN0YW50IG11bHRpcGxpZXJzIGFuZCBmaW5hbCBzaGlmdGluZzoKLSAgICogY0sgbm93IHJlcHJlc2VudHMgc3FydCgyKSAqIGNvcyhLKnBpLzI4KSAqIDMyLzQ5LgotICAgKi8KLQotICBkYXRhcHRyID0gZGF0YTsKLSAgd3NwdHIgPSB3b3Jrc3BhY2U7Ci0gIGZvciAoY3RyID0gRENUU0laRS0xOyBjdHIgPj0gMDsgY3RyLS0pIHsKLSAgICAvKiBFdmVuIHBhcnQgKi8KLQotICAgIHRtcDAgPSBkYXRhcHRyW0RDVFNJWkUqMF0gKyB3c3B0cltEQ1RTSVpFKjVdOwotICAgIHRtcDEgPSBkYXRhcHRyW0RDVFNJWkUqMV0gKyB3c3B0cltEQ1RTSVpFKjRdOwotICAgIHRtcDIgPSBkYXRhcHRyW0RDVFNJWkUqMl0gKyB3c3B0cltEQ1RTSVpFKjNdOwotICAgIHRtcDEzID0gZGF0YXB0cltEQ1RTSVpFKjNdICsgd3NwdHJbRENUU0laRSoyXTsKLSAgICB0bXA0ID0gZGF0YXB0cltEQ1RTSVpFKjRdICsgd3NwdHJbRENUU0laRSoxXTsKLSAgICB0bXA1ID0gZGF0YXB0cltEQ1RTSVpFKjVdICsgd3NwdHJbRENUU0laRSowXTsKLSAgICB0bXA2ID0gZGF0YXB0cltEQ1RTSVpFKjZdICsgZGF0YXB0cltEQ1RTSVpFKjddOwotCi0gICAgdG1wMTAgPSB0bXAwICsgdG1wNjsKLSAgICB0bXAxNCA9IHRtcDAgLSB0bXA2OwotICAgIHRtcDExID0gdG1wMSArIHRtcDU7Ci0gICAgdG1wMTUgPSB0bXAxIC0gdG1wNTsKLSAgICB0bXAxMiA9IHRtcDIgKyB0bXA0OwotICAgIHRtcDE2ID0gdG1wMiAtIHRtcDQ7Ci0KLSAgICB0bXAwID0gZGF0YXB0cltEQ1RTSVpFKjBdIC0gd3NwdHJbRENUU0laRSo1XTsKLSAgICB0bXAxID0gZGF0YXB0cltEQ1RTSVpFKjFdIC0gd3NwdHJbRENUU0laRSo0XTsKLSAgICB0bXAyID0gZGF0YXB0cltEQ1RTSVpFKjJdIC0gd3NwdHJbRENUU0laRSozXTsKLSAgICB0bXAzID0gZGF0YXB0cltEQ1RTSVpFKjNdIC0gd3NwdHJbRENUU0laRSoyXTsKLSAgICB0bXA0ID0gZGF0YXB0cltEQ1RTSVpFKjRdIC0gd3NwdHJbRENUU0laRSoxXTsKLSAgICB0bXA1ID0gZGF0YXB0cltEQ1RTSVpFKjVdIC0gd3NwdHJbRENUU0laRSowXTsKLSAgICB0bXA2ID0gZGF0YXB0cltEQ1RTSVpFKjZdIC0gZGF0YXB0cltEQ1RTSVpFKjddOwotCi0gICAgZGF0YXB0cltEQ1RTSVpFKjBdID0gKERDVEVMRU0pCi0gICAgICBERVNDQUxFKE1VTFRJUExZKHRtcDEwICsgdG1wMTEgKyB0bXAxMiArIHRtcDEzLAotCQkgICAgICAgRklYKDAuNjUzMDYxMjI0KSksICAgICAgICAgICAgICAgICAvKiAzMi80OSAqLwotCSAgICAgIENPTlNUX0JJVFMrMSk7Ci0gICAgdG1wMTMgKz0gdG1wMTM7Ci0gICAgZGF0YXB0cltEQ1RTSVpFKjRdID0gKERDVEVMRU0pCi0gICAgICBERVNDQUxFKE1VTFRJUExZKHRtcDEwIC0gdG1wMTMsIEZJWCgwLjgzMjEwNjA1MikpICsgLyogYzQgKi8KLQkgICAgICBNVUxUSVBMWSh0bXAxMSAtIHRtcDEzLCBGSVgoMC4yMDU1MTMyMjMpKSAtIC8qIGMxMiAqLwotCSAgICAgIE1VTFRJUExZKHRtcDEyIC0gdG1wMTMsIEZJWCgwLjU3NTgzNTI1NSkpLCAgLyogYzggKi8KLQkgICAgICBDT05TVF9CSVRTKzEpOwotCi0gICAgdG1wMTAgPSBNVUxUSVBMWSh0bXAxNCArIHRtcDE1LCBGSVgoMC43MjIwNzQ1NzApKTsgICAgLyogYzYgKi8KLQotICAgIGRhdGFwdHJbRENUU0laRSoyXSA9IChEQ1RFTEVNKQotICAgICAgREVTQ0FMRSh0bXAxMCArIE1VTFRJUExZKHRtcDE0LCBGSVgoMC4xNzgzMzc2OTEpKSAgIC8qIGMyLWM2ICovCi0JICAgICAgKyBNVUxUSVBMWSh0bXAxNiwgRklYKDAuNDAwNzIxMTU1KSksICAgICAgICAvKiBjMTAgKi8KLQkgICAgICBDT05TVF9CSVRTKzEpOwotICAgIGRhdGFwdHJbRENUU0laRSo2XSA9IChEQ1RFTEVNKQotICAgICAgREVTQ0FMRSh0bXAxMCAtIE1VTFRJUExZKHRtcDE1LCBGSVgoMS4xMjI3OTU3MjUpKSAgIC8qIGM2K2MxMCAqLwotCSAgICAgIC0gTVVMVElQTFkodG1wMTYsIEZJWCgwLjkwMDQxMjI2MikpLCAgICAgICAgLyogYzIgKi8KLQkgICAgICBDT05TVF9CSVRTKzEpOwotCi0gICAgLyogT2RkIHBhcnQgKi8KLQotICAgIHRtcDEwID0gdG1wMSArIHRtcDI7Ci0gICAgdG1wMTEgPSB0bXA1IC0gdG1wNDsKLSAgICBkYXRhcHRyW0RDVFNJWkUqN10gPSAoRENURUxFTSkKLSAgICAgIERFU0NBTEUoTVVMVElQTFkodG1wMCAtIHRtcDEwICsgdG1wMyAtIHRtcDExIC0gdG1wNiwKLQkJICAgICAgIEZJWCgwLjY1MzA2MTIyNCkpLCAgICAgICAgICAgICAgICAgLyogMzIvNDkgKi8KLQkgICAgICBDT05TVF9CSVRTKzEpOwotICAgIHRtcDMgID0gTVVMVElQTFkodG1wMyAsIEZJWCgwLjY1MzA2MTIyNCkpOyAgICAgICAgICAgIC8qIDMyLzQ5ICovCi0gICAgdG1wMTAgPSBNVUxUSVBMWSh0bXAxMCwgLSBGSVgoMC4xMDM0MDY4MTIpKTsgICAgICAgICAgLyogLWMxMyAqLwotICAgIHRtcDExID0gTVVMVElQTFkodG1wMTEsIEZJWCgwLjkxNzc2MDgzOSkpOyAgICAgICAgICAgIC8qIGMxICovCi0gICAgdG1wMTAgKz0gdG1wMTEgLSB0bXAzOwotICAgIHRtcDExID0gTVVMVElQTFkodG1wMCArIHRtcDIsIEZJWCgwLjc4MjAwNzQxMCkpICsgICAgIC8qIGM1ICovCi0JICAgIE1VTFRJUExZKHRtcDQgKyB0bXA2LCBGSVgoMC40OTEzNjc4MjMpKTsgICAgICAvKiBjOSAqLwotICAgIGRhdGFwdHJbRENUU0laRSo1XSA9IChEQ1RFTEVNKQotICAgICAgREVTQ0FMRSh0bXAxMCArIHRtcDExIC0gTVVMVElQTFkodG1wMiwgRklYKDEuNTUwMzQxMDc2KSkgLyogYzMrYzUtYzEzICovCi0JICAgICAgKyBNVUxUSVBMWSh0bXA0LCBGSVgoMC43MzE0MjgyMDIpKSwgICAgICAgICAvKiBjMStjMTEtYzkgKi8KLQkgICAgICBDT05TVF9CSVRTKzEpOwotICAgIHRtcDEyID0gTVVMVElQTFkodG1wMCArIHRtcDEsIEZJWCgwLjg3MTc0MDQ3OCkpICsgICAgIC8qIGMzICovCi0JICAgIE1VTFRJUExZKHRtcDUgLSB0bXA2LCBGSVgoMC4zMDUwMzUxODYpKTsgICAgICAvKiBjMTEgKi8KLSAgICBkYXRhcHRyW0RDVFNJWkUqM10gPSAoRENURUxFTSkKLSAgICAgIERFU0NBTEUodG1wMTAgKyB0bXAxMiAtIE1VTFRJUExZKHRtcDEsIEZJWCgwLjI3Njk2NTg0NCkpIC8qIGMzLWM5LWMxMyAqLwotCSAgICAgIC0gTVVMVElQTFkodG1wNSwgRklYKDIuMDA0ODAzNDM1KSksICAgICAgICAgLyogYzErYzUrYzExICovCi0JICAgICAgQ09OU1RfQklUUysxKTsKLSAgICBkYXRhcHRyW0RDVFNJWkUqMV0gPSAoRENURUxFTSkKLSAgICAgIERFU0NBTEUodG1wMTEgKyB0bXAxMiArIHRtcDMKLQkgICAgICAtIE1VTFRJUExZKHRtcDAsIEZJWCgwLjczNTk4NzA0OSkpICAgICAgICAgIC8qIGMzK2M1LWMxICovCi0JICAgICAgLSBNVUxUSVBMWSh0bXA2LCBGSVgoMC4wODI5MjU4MjUpKSwgICAgICAgICAvKiBjOS1jMTEtYzEzICovCi0JICAgICAgQ09OU1RfQklUUysxKTsKLQotICAgIGRhdGFwdHIrKzsJCQkvKiBhZHZhbmNlIHBvaW50ZXIgdG8gbmV4dCBjb2x1bW4gKi8KLSAgICB3c3B0cisrOwkJCS8qIGFkdmFuY2UgcG9pbnRlciB0byBuZXh0IGNvbHVtbiAqLwotICB9Ci19Ci0KLQotLyoKLSAqIFBlcmZvcm0gdGhlIGZvcndhcmQgRENUIG9uIGEgMTV4MTUgc2FtcGxlIGJsb2NrLgotICovCi0KLUdMT0JBTCh2b2lkKQotanBlZ19mZGN0XzE1eDE1IChEQ1RFTEVNICogZGF0YSwgSlNBTVBBUlJBWSBzYW1wbGVfZGF0YSwgSkRJTUVOU0lPTiBzdGFydF9jb2wpCi17Ci0gIElOVDMyIHRtcDAsIHRtcDEsIHRtcDIsIHRtcDMsIHRtcDQsIHRtcDUsIHRtcDYsIHRtcDc7Ci0gIElOVDMyIHRtcDEwLCB0bXAxMSwgdG1wMTIsIHRtcDEzLCB0bXAxNCwgdG1wMTUsIHRtcDE2OwotICBJTlQzMiB6MSwgejIsIHozOwotICBEQ1RFTEVNIHdvcmtzcGFjZVs4KjddOwotICBEQ1RFTEVNICpkYXRhcHRyOwotICBEQ1RFTEVNICp3c3B0cjsKLSAgSlNBTVBST1cgZWxlbXB0cjsKLSAgaW50IGN0cjsKLSAgU0hJRlRfVEVNUFMKLQotICAvKiBQYXNzIDE6IHByb2Nlc3Mgcm93cy4gKi8KLSAgLyogTm90ZSByZXN1bHRzIGFyZSBzY2FsZWQgdXAgYnkgc3FydCg4KSBjb21wYXJlZCB0byBhIHRydWUgRENULiAqLwotICAvKiBjSyByZXByZXNlbnRzIHNxcnQoMikgKiBjb3MoSypwaS8zMCkuICovCi0KLSAgZGF0YXB0ciA9IGRhdGE7Ci0gIGN0ciA9IDA7Ci0gIGZvciAoOzspIHsKLSAgICBlbGVtcHRyID0gc2FtcGxlX2RhdGFbY3RyXSArIHN0YXJ0X2NvbDsKLQotICAgIC8qIEV2ZW4gcGFydCAqLwotCi0gICAgdG1wMCA9IEdFVEpTQU1QTEUoZWxlbXB0clswXSkgKyBHRVRKU0FNUExFKGVsZW1wdHJbMTRdKTsKLSAgICB0bXAxID0gR0VUSlNBTVBMRShlbGVtcHRyWzFdKSArIEdFVEpTQU1QTEUoZWxlbXB0clsxM10pOwotICAgIHRtcDIgPSBHRVRKU0FNUExFKGVsZW1wdHJbMl0pICsgR0VUSlNBTVBMRShlbGVtcHRyWzEyXSk7Ci0gICAgdG1wMyA9IEdFVEpTQU1QTEUoZWxlbXB0clszXSkgKyBHRVRKU0FNUExFKGVsZW1wdHJbMTFdKTsKLSAgICB0bXA0ID0gR0VUSlNBTVBMRShlbGVtcHRyWzRdKSArIEdFVEpTQU1QTEUoZWxlbXB0clsxMF0pOwotICAgIHRtcDUgPSBHRVRKU0FNUExFKGVsZW1wdHJbNV0pICsgR0VUSlNBTVBMRShlbGVtcHRyWzldKTsKLSAgICB0bXA2ID0gR0VUSlNBTVBMRShlbGVtcHRyWzZdKSArIEdFVEpTQU1QTEUoZWxlbXB0cls4XSk7Ci0gICAgdG1wNyA9IEdFVEpTQU1QTEUoZWxlbXB0cls3XSk7Ci0KLSAgICB0bXAxMCA9IEdFVEpTQU1QTEUoZWxlbXB0clswXSkgLSBHRVRKU0FNUExFKGVsZW1wdHJbMTRdKTsKLSAgICB0bXAxMSA9IEdFVEpTQU1QTEUoZWxlbXB0clsxXSkgLSBHRVRKU0FNUExFKGVsZW1wdHJbMTNdKTsKLSAgICB0bXAxMiA9IEdFVEpTQU1QTEUoZWxlbXB0clsyXSkgLSBHRVRKU0FNUExFKGVsZW1wdHJbMTJdKTsKLSAgICB0bXAxMyA9IEdFVEpTQU1QTEUoZWxlbXB0clszXSkgLSBHRVRKU0FNUExFKGVsZW1wdHJbMTFdKTsKLSAgICB0bXAxNCA9IEdFVEpTQU1QTEUoZWxlbXB0cls0XSkgLSBHRVRKU0FNUExFKGVsZW1wdHJbMTBdKTsKLSAgICB0bXAxNSA9IEdFVEpTQU1QTEUoZWxlbXB0cls1XSkgLSBHRVRKU0FNUExFKGVsZW1wdHJbOV0pOwotICAgIHRtcDE2ID0gR0VUSlNBTVBMRShlbGVtcHRyWzZdKSAtIEdFVEpTQU1QTEUoZWxlbXB0cls4XSk7Ci0KLSAgICB6MSA9IHRtcDAgKyB0bXA0ICsgdG1wNTsKLSAgICB6MiA9IHRtcDEgKyB0bXAzICsgdG1wNjsKLSAgICB6MyA9IHRtcDIgKyB0bXA3OwotICAgIC8qIEFwcGx5IHVuc2lnbmVkLT5zaWduZWQgY29udmVyc2lvbiAqLwotICAgIGRhdGFwdHJbMF0gPSAoRENURUxFTSkgKHoxICsgejIgKyB6MyAtIDE1ICogQ0VOVEVSSlNBTVBMRSk7Ci0gICAgejMgKz0gejM7Ci0gICAgZGF0YXB0cls2XSA9IChEQ1RFTEVNKQotICAgICAgREVTQ0FMRShNVUxUSVBMWSh6MSAtIHozLCBGSVgoMS4xNDQxMjI4MDYpKSAtIC8qIGM2ICovCi0JICAgICAgTVVMVElQTFkoejIgLSB6MywgRklYKDAuNDM3MDE2MDI0KSksICAvKiBjMTIgKi8KLQkgICAgICBDT05TVF9CSVRTKTsKLSAgICB0bXAyICs9ICgodG1wMSArIHRtcDQpID4+IDEpIC0gdG1wNyAtIHRtcDc7Ci0gICAgejEgPSBNVUxUSVBMWSh0bXAzIC0gdG1wMiwgRklYKDEuNTMxMTM1MTczKSkgLSAgLyogYzIrYzE0ICovCi0gICAgICAgICBNVUxUSVBMWSh0bXA2IC0gdG1wMiwgRklYKDIuMjM4MjQxOTU1KSk7ICAgLyogYzQrYzggKi8KLSAgICB6MiA9IE1VTFRJUExZKHRtcDUgLSB0bXAyLCBGSVgoMC43OTg0NjgwMDgpKSAtICAvKiBjOC1jMTQgKi8KLQkgTVVMVElQTFkodG1wMCAtIHRtcDIsIEZJWCgwLjA5MTM2MTIyNykpOyAgIC8qIGMyLWM0ICovCi0gICAgejMgPSBNVUxUSVBMWSh0bXAwIC0gdG1wMywgRklYKDEuMzgzMzA5NjAzKSkgKyAgLyogYzIgKi8KLQkgTVVMVElQTFkodG1wNiAtIHRtcDUsIEZJWCgwLjk0NjI5MzU3OSkpICsgIC8qIGM4ICovCi0JIE1VTFRJUExZKHRtcDEgLSB0bXA0LCBGSVgoMC43OTA1Njk0MTUpKTsgICAvKiAoYzYrYzEyKS8yICovCi0KLSAgICBkYXRhcHRyWzJdID0gKERDVEVMRU0pIERFU0NBTEUoejEgKyB6MywgQ09OU1RfQklUUyk7Ci0gICAgZGF0YXB0cls0XSA9IChEQ1RFTEVNKSBERVNDQUxFKHoyICsgejMsIENPTlNUX0JJVFMpOwotCi0gICAgLyogT2RkIHBhcnQgKi8KLQotICAgIHRtcDIgPSBNVUxUSVBMWSh0bXAxMCAtIHRtcDEyIC0gdG1wMTMgKyB0bXAxNSArIHRtcDE2LAotCQkgICAgRklYKDEuMjI0NzQ0ODcxKSk7ICAgICAgICAgICAgICAgICAgICAgICAgIC8qIGM1ICovCi0gICAgdG1wMSA9IE1VTFRJUExZKHRtcDEwIC0gdG1wMTQgLSB0bXAxNSwgRklYKDEuMzQ0OTk3MDI0KSkgKyAvKiBjMyAqLwotCSAgIE1VTFRJUExZKHRtcDExIC0gdG1wMTMgLSB0bXAxNiwgRklYKDAuODMxMjUzODc2KSk7ICAvKiBjOSAqLwotICAgIHRtcDEyID0gTVVMVElQTFkodG1wMTIsIEZJWCgxLjIyNDc0NDg3MSkpOyAgICAgICAgICAgICAgICAgLyogYzUgKi8KLSAgICB0bXA0ID0gTVVMVElQTFkodG1wMTAgLSB0bXAxNiwgRklYKDEuNDA2NDY2MzUzKSkgKyAgICAgICAgIC8qIGMxICovCi0JICAgTVVMVElQTFkodG1wMTEgKyB0bXAxNCwgRklYKDEuMzQ0OTk3MDI0KSkgKyAgICAgICAgIC8qIGMzICovCi0JICAgTVVMVElQTFkodG1wMTMgKyB0bXAxNSwgRklYKDAuNTc1MjEyNDc3KSk7ICAgICAgICAgIC8qIGMxMSAqLwotICAgIHRtcDAgPSBNVUxUSVBMWSh0bXAxMywgRklYKDAuNDc1NzUzMDE0KSkgLSAgICAgICAgICAgICAgICAgLyogYzctYzExICovCi0JICAgTVVMVElQTFkodG1wMTQsIEZJWCgwLjUxMzc0MzE0OCkpICsgICAgICAgICAgICAgICAgIC8qIGMzLWM5ICovCi0JICAgTVVMVElQTFkodG1wMTYsIEZJWCgxLjcwMDQ5Nzg4NSkpICsgdG1wNCArIHRtcDEyOyAgIC8qIGMxK2MxMyAqLwotICAgIHRtcDMgPSBNVUxUSVBMWSh0bXAxMCwgLSBGSVgoMC4zNTU1MDA4NjIpKSAtICAgICAgICAgICAgICAgLyogLShjMS1jNykgKi8KLQkgICBNVUxUSVBMWSh0bXAxMSwgRklYKDIuMTc2MjUwODk5KSkgLSAgICAgICAgICAgICAgICAgLyogYzMrYzkgKi8KLQkgICBNVUxUSVBMWSh0bXAxNSwgRklYKDAuODY5MjQ0MDEwKSkgKyB0bXA0IC0gdG1wMTI7ICAgLyogYzExK2MxMyAqLwotCi0gICAgZGF0YXB0clsxXSA9IChEQ1RFTEVNKSBERVNDQUxFKHRtcDAsIENPTlNUX0JJVFMpOwotICAgIGRhdGFwdHJbM10gPSAoRENURUxFTSkgREVTQ0FMRSh0bXAxLCBDT05TVF9CSVRTKTsKLSAgICBkYXRhcHRyWzVdID0gKERDVEVMRU0pIERFU0NBTEUodG1wMiwgQ09OU1RfQklUUyk7Ci0gICAgZGF0YXB0cls3XSA9IChEQ1RFTEVNKSBERVNDQUxFKHRtcDMsIENPTlNUX0JJVFMpOwotCi0gICAgY3RyKys7Ci0KLSAgICBpZiAoY3RyICE9IERDVFNJWkUpIHsKLSAgICAgIGlmIChjdHIgPT0gMTUpCi0JYnJlYWs7CQkJLyogRG9uZS4gKi8KLSAgICAgIGRhdGFwdHIgKz0gRENUU0laRTsJLyogYWR2YW5jZSBwb2ludGVyIHRvIG5leHQgcm93ICovCi0gICAgfSBlbHNlCi0gICAgICBkYXRhcHRyID0gd29ya3NwYWNlOwkvKiBzd2l0Y2ggcG9pbnRlciB0byBleHRlbmRlZCB3b3Jrc3BhY2UgKi8KLSAgfQotCi0gIC8qIFBhc3MgMjogcHJvY2VzcyBjb2x1bW5zLgotICAgKiBXZSBsZWF2ZSB0aGUgcmVzdWx0cyBzY2FsZWQgdXAgYnkgYW4gb3ZlcmFsbCBmYWN0b3Igb2YgOC4KLSAgICogV2UgbXVzdCBhbHNvIHNjYWxlIHRoZSBvdXRwdXQgYnkgKDgvMTUpKioyID0gNjQvMjI1LCB3aGljaCB3ZSBwYXJ0aWFsbHkKLSAgICogZm9sZCBpbnRvIHRoZSBjb25zdGFudCBtdWx0aXBsaWVycyBhbmQgZmluYWwgc2hpZnRpbmc6Ci0gICAqIGNLIG5vdyByZXByZXNlbnRzIHNxcnQoMikgKiBjb3MoSypwaS8zMCkgKiAyNTYvMjI1LgotICAgKi8KLQotICBkYXRhcHRyID0gZGF0YTsKLSAgd3NwdHIgPSB3b3Jrc3BhY2U7Ci0gIGZvciAoY3RyID0gRENUU0laRS0xOyBjdHIgPj0gMDsgY3RyLS0pIHsKLSAgICAvKiBFdmVuIHBhcnQgKi8KLQotICAgIHRtcDAgPSBkYXRhcHRyW0RDVFNJWkUqMF0gKyB3c3B0cltEQ1RTSVpFKjZdOwotICAgIHRtcDEgPSBkYXRhcHRyW0RDVFNJWkUqMV0gKyB3c3B0cltEQ1RTSVpFKjVdOwotICAgIHRtcDIgPSBkYXRhcHRyW0RDVFNJWkUqMl0gKyB3c3B0cltEQ1RTSVpFKjRdOwotICAgIHRtcDMgPSBkYXRhcHRyW0RDVFNJWkUqM10gKyB3c3B0cltEQ1RTSVpFKjNdOwotICAgIHRtcDQgPSBkYXRhcHRyW0RDVFNJWkUqNF0gKyB3c3B0cltEQ1RTSVpFKjJdOwotICAgIHRtcDUgPSBkYXRhcHRyW0RDVFNJWkUqNV0gKyB3c3B0cltEQ1RTSVpFKjFdOwotICAgIHRtcDYgPSBkYXRhcHRyW0RDVFNJWkUqNl0gKyB3c3B0cltEQ1RTSVpFKjBdOwotICAgIHRtcDcgPSBkYXRhcHRyW0RDVFNJWkUqN107Ci0KLSAgICB0bXAxMCA9IGRhdGFwdHJbRENUU0laRSowXSAtIHdzcHRyW0RDVFNJWkUqNl07Ci0gICAgdG1wMTEgPSBkYXRhcHRyW0RDVFNJWkUqMV0gLSB3c3B0cltEQ1RTSVpFKjVdOwotICAgIHRtcDEyID0gZGF0YXB0cltEQ1RTSVpFKjJdIC0gd3NwdHJbRENUU0laRSo0XTsKLSAgICB0bXAxMyA9IGRhdGFwdHJbRENUU0laRSozXSAtIHdzcHRyW0RDVFNJWkUqM107Ci0gICAgdG1wMTQgPSBkYXRhcHRyW0RDVFNJWkUqNF0gLSB3c3B0cltEQ1RTSVpFKjJdOwotICAgIHRtcDE1ID0gZGF0YXB0cltEQ1RTSVpFKjVdIC0gd3NwdHJbRENUU0laRSoxXTsKLSAgICB0bXAxNiA9IGRhdGFwdHJbRENUU0laRSo2XSAtIHdzcHRyW0RDVFNJWkUqMF07Ci0KLSAgICB6MSA9IHRtcDAgKyB0bXA0ICsgdG1wNTsKLSAgICB6MiA9IHRtcDEgKyB0bXAzICsgdG1wNjsKLSAgICB6MyA9IHRtcDIgKyB0bXA3OwotICAgIGRhdGFwdHJbRENUU0laRSowXSA9IChEQ1RFTEVNKQotICAgICAgREVTQ0FMRShNVUxUSVBMWSh6MSArIHoyICsgejMsIEZJWCgxLjEzNzc3Nzc3OCkpLCAvKiAyNTYvMjI1ICovCi0JICAgICAgQ09OU1RfQklUUysyKTsKLSAgICB6MyArPSB6MzsKLSAgICBkYXRhcHRyW0RDVFNJWkUqNl0gPSAoRENURUxFTSkKLSAgICAgIERFU0NBTEUoTVVMVElQTFkoejEgLSB6MywgRklYKDEuMzAxNzU3NTAzKSkgLSAvKiBjNiAqLwotCSAgICAgIE1VTFRJUExZKHoyIC0gejMsIEZJWCgwLjQ5NzIyNzEyMSkpLCAgLyogYzEyICovCi0JICAgICAgQ09OU1RfQklUUysyKTsKLSAgICB0bXAyICs9ICgodG1wMSArIHRtcDQpID4+IDEpIC0gdG1wNyAtIHRtcDc7Ci0gICAgejEgPSBNVUxUSVBMWSh0bXAzIC0gdG1wMiwgRklYKDEuNzQyMDkxNTc1KSkgLSAgLyogYzIrYzE0ICovCi0gICAgICAgICBNVUxUSVBMWSh0bXA2IC0gdG1wMiwgRklYKDIuNTQ2NjIxOTU3KSk7ICAgLyogYzQrYzggKi8KLSAgICB6MiA9IE1VTFRJUExZKHRtcDUgLSB0bXAyLCBGSVgoMC45MDg0NzkxNTYpKSAtICAvKiBjOC1jMTQgKi8KLQkgTVVMVElQTFkodG1wMCAtIHRtcDIsIEZJWCgwLjEwMzk0ODc3NCkpOyAgIC8qIGMyLWM0ICovCi0gICAgejMgPSBNVUxUSVBMWSh0bXAwIC0gdG1wMywgRklYKDEuNTczODk4OTI2KSkgKyAgLyogYzIgKi8KLQkgTVVMVElQTFkodG1wNiAtIHRtcDUsIEZJWCgxLjA3NjY3MTgwNSkpICsgIC8qIGM4ICovCi0JIE1VTFRJUExZKHRtcDEgLSB0bXA0LCBGSVgoMC44OTk0OTIzMTIpKTsgICAvKiAoYzYrYzEyKS8yICovCi0KLSAgICBkYXRhcHRyW0RDVFNJWkUqMl0gPSAoRENURUxFTSkgREVTQ0FMRSh6MSArIHozLCBDT05TVF9CSVRTKzIpOwotICAgIGRhdGFwdHJbRENUU0laRSo0XSA9IChEQ1RFTEVNKSBERVNDQUxFKHoyICsgejMsIENPTlNUX0JJVFMrMik7Ci0KLSAgICAvKiBPZGQgcGFydCAqLwotCi0gICAgdG1wMiA9IE1VTFRJUExZKHRtcDEwIC0gdG1wMTIgLSB0bXAxMyArIHRtcDE1ICsgdG1wMTYsCi0JCSAgICBGSVgoMS4zOTM0ODc0OTgpKTsgICAgICAgICAgICAgICAgICAgICAgICAgLyogYzUgKi8KLSAgICB0bXAxID0gTVVMVElQTFkodG1wMTAgLSB0bXAxNCAtIHRtcDE1LCBGSVgoMS41MzAzMDc3MjUpKSArIC8qIGMzICovCi0JICAgTVVMVElQTFkodG1wMTEgLSB0bXAxMyAtIHRtcDE2LCBGSVgoMC45NDU3ODIxODcpKTsgIC8qIGM5ICovCi0gICAgdG1wMTIgPSBNVUxUSVBMWSh0bXAxMiwgRklYKDEuMzkzNDg3NDk4KSk7ICAgICAgICAgICAgICAgICAvKiBjNSAqLwotICAgIHRtcDQgPSBNVUxUSVBMWSh0bXAxMCAtIHRtcDE2LCBGSVgoMS42MDAyNDYxNjEpKSArICAgICAgICAgLyogYzEgKi8KLQkgICBNVUxUSVBMWSh0bXAxMSArIHRtcDE0LCBGSVgoMS41MzAzMDc3MjUpKSArICAgICAgICAgLyogYzMgKi8KLQkgICBNVUxUSVBMWSh0bXAxMyArIHRtcDE1LCBGSVgoMC42NTQ0NjM5NzQpKTsgICAgICAgICAgLyogYzExICovCi0gICAgdG1wMCA9IE1VTFRJUExZKHRtcDEzLCBGSVgoMC41NDEzMDEyMDcpKSAtICAgICAgICAgICAgICAgICAvKiBjNy1jMTEgKi8KLQkgICBNVUxUSVBMWSh0bXAxNCwgRklYKDAuNTg0NTI1NTM4KSkgKyAgICAgICAgICAgICAgICAgLyogYzMtYzkgKi8KLQkgICBNVUxUSVBMWSh0bXAxNiwgRklYKDEuOTM0Nzg4NzA1KSkgKyB0bXA0ICsgdG1wMTI7ICAgLyogYzErYzEzICovCi0gICAgdG1wMyA9IE1VTFRJUExZKHRtcDEwLCAtIEZJWCgwLjQwNDQ4MDk4MCkpIC0gICAgICAgICAgICAgICAvKiAtKGMxLWM3KSAqLwotCSAgIE1VTFRJUExZKHRtcDExLCBGSVgoMi40NzYwODk5MTIpKSAtICAgICAgICAgICAgICAgICAvKiBjMytjOSAqLwotCSAgIE1VTFRJUExZKHRtcDE1LCBGSVgoMC45ODkwMDY1MTgpKSArIHRtcDQgLSB0bXAxMjsgICAvKiBjMTErYzEzICovCi0KLSAgICBkYXRhcHRyW0RDVFNJWkUqMV0gPSAoRENURUxFTSkgREVTQ0FMRSh0bXAwLCBDT05TVF9CSVRTKzIpOwotICAgIGRhdGFwdHJbRENUU0laRSozXSA9IChEQ1RFTEVNKSBERVNDQUxFKHRtcDEsIENPTlNUX0JJVFMrMik7Ci0gICAgZGF0YXB0cltEQ1RTSVpFKjVdID0gKERDVEVMRU0pIERFU0NBTEUodG1wMiwgQ09OU1RfQklUUysyKTsKLSAgICBkYXRhcHRyW0RDVFNJWkUqN10gPSAoRENURUxFTSkgREVTQ0FMRSh0bXAzLCBDT05TVF9CSVRTKzIpOwotCi0gICAgZGF0YXB0cisrOwkJCS8qIGFkdmFuY2UgcG9pbnRlciB0byBuZXh0IGNvbHVtbiAqLwotICAgIHdzcHRyKys7CQkJLyogYWR2YW5jZSBwb2ludGVyIHRvIG5leHQgY29sdW1uICovCi0gIH0KLX0KLQotCi0vKgotICogUGVyZm9ybSB0aGUgZm9yd2FyZCBEQ1Qgb24gYSAxNngxNiBzYW1wbGUgYmxvY2suCi0gKi8KLQotR0xPQkFMKHZvaWQpCi1qcGVnX2ZkY3RfMTZ4MTYgKERDVEVMRU0gKiBkYXRhLCBKU0FNUEFSUkFZIHNhbXBsZV9kYXRhLCBKRElNRU5TSU9OIHN0YXJ0X2NvbCkKLXsKLSAgSU5UMzIgdG1wMCwgdG1wMSwgdG1wMiwgdG1wMywgdG1wNCwgdG1wNSwgdG1wNiwgdG1wNzsKLSAgSU5UMzIgdG1wMTAsIHRtcDExLCB0bXAxMiwgdG1wMTMsIHRtcDE0LCB0bXAxNSwgdG1wMTYsIHRtcDE3OwotICBEQ1RFTEVNIHdvcmtzcGFjZVtEQ1RTSVpFMl07Ci0gIERDVEVMRU0gKmRhdGFwdHI7Ci0gIERDVEVMRU0gKndzcHRyOwotICBKU0FNUFJPVyBlbGVtcHRyOwotICBpbnQgY3RyOwotICBTSElGVF9URU1QUwotCi0gIC8qIFBhc3MgMTogcHJvY2VzcyByb3dzLiAqLwotICAvKiBOb3RlIHJlc3VsdHMgYXJlIHNjYWxlZCB1cCBieSBzcXJ0KDgpIGNvbXBhcmVkIHRvIGEgdHJ1ZSBEQ1Q7ICovCi0gIC8qIGZ1cnRoZXJtb3JlLCB3ZSBzY2FsZSB0aGUgcmVzdWx0cyBieSAyKipQQVNTMV9CSVRTLiAqLwotICAvKiBjSyByZXByZXNlbnRzIHNxcnQoMikgKiBjb3MoSypwaS8zMikuICovCi0KLSAgZGF0YXB0ciA9IGRhdGE7Ci0gIGN0ciA9IDA7Ci0gIGZvciAoOzspIHsKLSAgICBlbGVtcHRyID0gc2FtcGxlX2RhdGFbY3RyXSArIHN0YXJ0X2NvbDsKLQotICAgIC8qIEV2ZW4gcGFydCAqLwotCi0gICAgdG1wMCA9IEdFVEpTQU1QTEUoZWxlbXB0clswXSkgKyBHRVRKU0FNUExFKGVsZW1wdHJbMTVdKTsKLSAgICB0bXAxID0gR0VUSlNBTVBMRShlbGVtcHRyWzFdKSArIEdFVEpTQU1QTEUoZWxlbXB0clsxNF0pOwotICAgIHRtcDIgPSBHRVRKU0FNUExFKGVsZW1wdHJbMl0pICsgR0VUSlNBTVBMRShlbGVtcHRyWzEzXSk7Ci0gICAgdG1wMyA9IEdFVEpTQU1QTEUoZWxlbXB0clszXSkgKyBHRVRKU0FNUExFKGVsZW1wdHJbMTJdKTsKLSAgICB0bXA0ID0gR0VUSlNBTVBMRShlbGVtcHRyWzRdKSArIEdFVEpTQU1QTEUoZWxlbXB0clsxMV0pOwotICAgIHRtcDUgPSBHRVRKU0FNUExFKGVsZW1wdHJbNV0pICsgR0VUSlNBTVBMRShlbGVtcHRyWzEwXSk7Ci0gICAgdG1wNiA9IEdFVEpTQU1QTEUoZWxlbXB0cls2XSkgKyBHRVRKU0FNUExFKGVsZW1wdHJbOV0pOwotICAgIHRtcDcgPSBHRVRKU0FNUExFKGVsZW1wdHJbN10pICsgR0VUSlNBTVBMRShlbGVtcHRyWzhdKTsKLQotICAgIHRtcDEwID0gdG1wMCArIHRtcDc7Ci0gICAgdG1wMTQgPSB0bXAwIC0gdG1wNzsKLSAgICB0bXAxMSA9IHRtcDEgKyB0bXA2OwotICAgIHRtcDE1ID0gdG1wMSAtIHRtcDY7Ci0gICAgdG1wMTIgPSB0bXAyICsgdG1wNTsKLSAgICB0bXAxNiA9IHRtcDIgLSB0bXA1OwotICAgIHRtcDEzID0gdG1wMyArIHRtcDQ7Ci0gICAgdG1wMTcgPSB0bXAzIC0gdG1wNDsKLQotICAgIHRtcDAgPSBHRVRKU0FNUExFKGVsZW1wdHJbMF0pIC0gR0VUSlNBTVBMRShlbGVtcHRyWzE1XSk7Ci0gICAgdG1wMSA9IEdFVEpTQU1QTEUoZWxlbXB0clsxXSkgLSBHRVRKU0FNUExFKGVsZW1wdHJbMTRdKTsKLSAgICB0bXAyID0gR0VUSlNBTVBMRShlbGVtcHRyWzJdKSAtIEdFVEpTQU1QTEUoZWxlbXB0clsxM10pOwotICAgIHRtcDMgPSBHRVRKU0FNUExFKGVsZW1wdHJbM10pIC0gR0VUSlNBTVBMRShlbGVtcHRyWzEyXSk7Ci0gICAgdG1wNCA9IEdFVEpTQU1QTEUoZWxlbXB0cls0XSkgLSBHRVRKU0FNUExFKGVsZW1wdHJbMTFdKTsKLSAgICB0bXA1ID0gR0VUSlNBTVBMRShlbGVtcHRyWzVdKSAtIEdFVEpTQU1QTEUoZWxlbXB0clsxMF0pOwotICAgIHRtcDYgPSBHRVRKU0FNUExFKGVsZW1wdHJbNl0pIC0gR0VUSlNBTVBMRShlbGVtcHRyWzldKTsKLSAgICB0bXA3ID0gR0VUSlNBTVBMRShlbGVtcHRyWzddKSAtIEdFVEpTQU1QTEUoZWxlbXB0cls4XSk7Ci0KLSAgICAvKiBBcHBseSB1bnNpZ25lZC0+c2lnbmVkIGNvbnZlcnNpb24gKi8KLSAgICBkYXRhcHRyWzBdID0gKERDVEVMRU0pCi0gICAgICAoKHRtcDEwICsgdG1wMTEgKyB0bXAxMiArIHRtcDEzIC0gMTYgKiBDRU5URVJKU0FNUExFKSA8PCBQQVNTMV9CSVRTKTsKLSAgICBkYXRhcHRyWzRdID0gKERDVEVMRU0pCi0gICAgICBERVNDQUxFKE1VTFRJUExZKHRtcDEwIC0gdG1wMTMsIEZJWCgxLjMwNjU2Mjk2NSkpICsgLyogYzRbMTZdID0gYzJbOF0gKi8KLQkgICAgICBNVUxUSVBMWSh0bXAxMSAtIHRtcDEyLCBGSVhfMF81NDExOTYxMDApLCAgIC8qIGMxMlsxNl0gPSBjNls4XSAqLwotCSAgICAgIENPTlNUX0JJVFMtUEFTUzFfQklUUyk7Ci0KLSAgICB0bXAxMCA9IE1VTFRJUExZKHRtcDE3IC0gdG1wMTUsIEZJWCgwLjI3NTg5OTM3OSkpICsgICAvKiBjMTRbMTZdID0gYzdbOF0gKi8KLQkgICAgTVVMVElQTFkodG1wMTQgLSB0bXAxNiwgRklYKDEuMzg3MDM5ODQ1KSk7ICAgIC8qIGMyWzE2XSA9IGMxWzhdICovCi0KLSAgICBkYXRhcHRyWzJdID0gKERDVEVMRU0pCi0gICAgICBERVNDQUxFKHRtcDEwICsgTVVMVElQTFkodG1wMTUsIEZJWCgxLjQ1MTc3NDk4MikpICAgLyogYzYrYzE0ICovCi0JICAgICAgKyBNVUxUSVBMWSh0bXAxNiwgRklYKDIuMTcyNzM0ODA0KSksICAgICAgICAvKiBjMitjMTAgKi8KLQkgICAgICBDT05TVF9CSVRTLVBBU1MxX0JJVFMpOwotICAgIGRhdGFwdHJbNl0gPSAoRENURUxFTSkKLSAgICAgIERFU0NBTEUodG1wMTAgLSBNVUxUSVBMWSh0bXAxNCwgRklYKDAuMjExMTY0MjQzKSkgICAvKiBjMi1jNiAqLwotCSAgICAgIC0gTVVMVElQTFkodG1wMTcsIEZJWCgxLjA2MTU5NDMzOCkpLCAgICAgICAgLyogYzEwK2MxNCAqLwotCSAgICAgIENPTlNUX0JJVFMtUEFTUzFfQklUUyk7Ci0KLSAgICAvKiBPZGQgcGFydCAqLwotCi0gICAgdG1wMTEgPSBNVUxUSVBMWSh0bXAwICsgdG1wMSwgRklYKDEuMzUzMzE4MDAxKSkgKyAgICAgICAgIC8qIGMzICovCi0JICAgIE1VTFRJUExZKHRtcDYgLSB0bXA3LCBGSVgoMC40MTA1MjQ1MjgpKTsgICAgICAgICAgLyogYzEzICovCi0gICAgdG1wMTIgPSBNVUxUSVBMWSh0bXAwICsgdG1wMiwgRklYKDEuMjQ3MjI1MDEzKSkgKyAgICAgICAgIC8qIGM1ICovCi0JICAgIE1VTFRJUExZKHRtcDUgKyB0bXA3LCBGSVgoMC42NjY2NTU2NTgpKTsgICAgICAgICAgLyogYzExICovCi0gICAgdG1wMTMgPSBNVUxUSVBMWSh0bXAwICsgdG1wMywgRklYKDEuMDkzMjAxODY3KSkgKyAgICAgICAgIC8qIGM3ICovCi0JICAgIE1VTFRJUExZKHRtcDQgLSB0bXA3LCBGSVgoMC44OTcxNjc1ODYpKTsgICAgICAgICAgLyogYzkgKi8KLSAgICB0bXAxNCA9IE1VTFRJUExZKHRtcDEgKyB0bXAyLCBGSVgoMC4xMzg2MTcxNjkpKSArICAgICAgICAgLyogYzE1ICovCi0JICAgIE1VTFRJUExZKHRtcDYgLSB0bXA1LCBGSVgoMS40MDc0MDM3MzgpKTsgICAgICAgICAgLyogYzEgKi8KLSAgICB0bXAxNSA9IE1VTFRJUExZKHRtcDEgKyB0bXAzLCAtIEZJWCgwLjY2NjY1NTY1OCkpICsgICAgICAgLyogLWMxMSAqLwotCSAgICBNVUxUSVBMWSh0bXA0ICsgdG1wNiwgLSBGSVgoMS4yNDcyMjUwMTMpKTsgICAgICAgIC8qIC1jNSAqLwotICAgIHRtcDE2ID0gTVVMVElQTFkodG1wMiArIHRtcDMsIC0gRklYKDEuMzUzMzE4MDAxKSkgKyAgICAgICAvKiAtYzMgKi8KLQkgICAgTVVMVElQTFkodG1wNSAtIHRtcDQsIEZJWCgwLjQxMDUyNDUyOCkpOyAgICAgICAgICAvKiBjMTMgKi8KLSAgICB0bXAxMCA9IHRtcDExICsgdG1wMTIgKyB0bXAxMyAtCi0JICAgIE1VTFRJUExZKHRtcDAsIEZJWCgyLjI4NjM0MTE0NCkpICsgICAgICAgICAgICAgICAgLyogYzcrYzUrYzMtYzEgKi8KLQkgICAgTVVMVElQTFkodG1wNywgRklYKDAuNzc5NjUzNjI1KSk7ICAgICAgICAgICAgICAgICAvKiBjMTUrYzEzLWMxMStjOSAqLwotICAgIHRtcDExICs9IHRtcDE0ICsgdG1wMTUgKyBNVUxUSVBMWSh0bXAxLCBGSVgoMC4wNzE4ODgwNzQpKSAvKiBjOS1jMy1jMTUrYzExICovCi0JICAgICAtIE1VTFRJUExZKHRtcDYsIEZJWCgxLjY2MzkwNTExOSkpOyAgICAgICAgICAgICAgLyogYzcrYzEzK2MxLWM1ICovCi0gICAgdG1wMTIgKz0gdG1wMTQgKyB0bXAxNiAtIE1VTFRJUExZKHRtcDIsIEZJWCgxLjEyNTcyNjA0OCkpIC8qIGM3K2M1K2MxNS1jMyAqLwotCSAgICAgKyBNVUxUSVBMWSh0bXA1LCBGSVgoMS4yMjczOTExMzgpKTsgICAgICAgICAgICAgIC8qIGM5LWMxMStjMS1jMTMgKi8KLSAgICB0bXAxMyArPSB0bXAxNSArIHRtcDE2ICsgTVVMVElQTFkodG1wMywgRklYKDEuMDY1Mzg4OTYyKSkgLyogYzE1K2MzK2MxMS1jNyAqLwotCSAgICAgKyBNVUxUSVBMWSh0bXA0LCBGSVgoMi4xNjc5ODU2OTIpKTsgICAgICAgICAgICAgIC8qIGMxK2MxMytjNS1jOSAqLwotCi0gICAgZGF0YXB0clsxXSA9IChEQ1RFTEVNKSBERVNDQUxFKHRtcDEwLCBDT05TVF9CSVRTLVBBU1MxX0JJVFMpOwotICAgIGRhdGFwdHJbM10gPSAoRENURUxFTSkgREVTQ0FMRSh0bXAxMSwgQ09OU1RfQklUUy1QQVNTMV9CSVRTKTsKLSAgICBkYXRhcHRyWzVdID0gKERDVEVMRU0pIERFU0NBTEUodG1wMTIsIENPTlNUX0JJVFMtUEFTUzFfQklUUyk7Ci0gICAgZGF0YXB0cls3XSA9IChEQ1RFTEVNKSBERVNDQUxFKHRtcDEzLCBDT05TVF9CSVRTLVBBU1MxX0JJVFMpOwotCi0gICAgY3RyKys7Ci0KLSAgICBpZiAoY3RyICE9IERDVFNJWkUpIHsKLSAgICAgIGlmIChjdHIgPT0gRENUU0laRSAqIDIpCi0JYnJlYWs7CQkJLyogRG9uZS4gKi8KLSAgICAgIGRhdGFwdHIgKz0gRENUU0laRTsJLyogYWR2YW5jZSBwb2ludGVyIHRvIG5leHQgcm93ICovCi0gICAgfSBlbHNlCi0gICAgICBkYXRhcHRyID0gd29ya3NwYWNlOwkvKiBzd2l0Y2ggcG9pbnRlciB0byBleHRlbmRlZCB3b3Jrc3BhY2UgKi8KLSAgfQotCi0gIC8qIFBhc3MgMjogcHJvY2VzcyBjb2x1bW5zLgotICAgKiBXZSByZW1vdmUgdGhlIFBBU1MxX0JJVFMgc2NhbGluZywgYnV0IGxlYXZlIHRoZSByZXN1bHRzIHNjYWxlZCB1cAotICAgKiBieSBhbiBvdmVyYWxsIGZhY3RvciBvZiA4LgotICAgKiBXZSBtdXN0IGFsc28gc2NhbGUgdGhlIG91dHB1dCBieSAoOC8xNikqKjIgPSAxLzIqKjIuCi0gICAqLwotCi0gIGRhdGFwdHIgPSBkYXRhOwotICB3c3B0ciA9IHdvcmtzcGFjZTsKLSAgZm9yIChjdHIgPSBEQ1RTSVpFLTE7IGN0ciA+PSAwOyBjdHItLSkgewotICAgIC8qIEV2ZW4gcGFydCAqLwotCi0gICAgdG1wMCA9IGRhdGFwdHJbRENUU0laRSowXSArIHdzcHRyW0RDVFNJWkUqN107Ci0gICAgdG1wMSA9IGRhdGFwdHJbRENUU0laRSoxXSArIHdzcHRyW0RDVFNJWkUqNl07Ci0gICAgdG1wMiA9IGRhdGFwdHJbRENUU0laRSoyXSArIHdzcHRyW0RDVFNJWkUqNV07Ci0gICAgdG1wMyA9IGRhdGFwdHJbRENUU0laRSozXSArIHdzcHRyW0RDVFNJWkUqNF07Ci0gICAgdG1wNCA9IGRhdGFwdHJbRENUU0laRSo0XSArIHdzcHRyW0RDVFNJWkUqM107Ci0gICAgdG1wNSA9IGRhdGFwdHJbRENUU0laRSo1XSArIHdzcHRyW0RDVFNJWkUqMl07Ci0gICAgdG1wNiA9IGRhdGFwdHJbRENUU0laRSo2XSArIHdzcHRyW0RDVFNJWkUqMV07Ci0gICAgdG1wNyA9IGRhdGFwdHJbRENUU0laRSo3XSArIHdzcHRyW0RDVFNJWkUqMF07Ci0KLSAgICB0bXAxMCA9IHRtcDAgKyB0bXA3OwotICAgIHRtcDE0ID0gdG1wMCAtIHRtcDc7Ci0gICAgdG1wMTEgPSB0bXAxICsgdG1wNjsKLSAgICB0bXAxNSA9IHRtcDEgLSB0bXA2OwotICAgIHRtcDEyID0gdG1wMiArIHRtcDU7Ci0gICAgdG1wMTYgPSB0bXAyIC0gdG1wNTsKLSAgICB0bXAxMyA9IHRtcDMgKyB0bXA0OwotICAgIHRtcDE3ID0gdG1wMyAtIHRtcDQ7Ci0KLSAgICB0bXAwID0gZGF0YXB0cltEQ1RTSVpFKjBdIC0gd3NwdHJbRENUU0laRSo3XTsKLSAgICB0bXAxID0gZGF0YXB0cltEQ1RTSVpFKjFdIC0gd3NwdHJbRENUU0laRSo2XTsKLSAgICB0bXAyID0gZGF0YXB0cltEQ1RTSVpFKjJdIC0gd3NwdHJbRENUU0laRSo1XTsKLSAgICB0bXAzID0gZGF0YXB0cltEQ1RTSVpFKjNdIC0gd3NwdHJbRENUU0laRSo0XTsKLSAgICB0bXA0ID0gZGF0YXB0cltEQ1RTSVpFKjRdIC0gd3NwdHJbRENUU0laRSozXTsKLSAgICB0bXA1ID0gZGF0YXB0cltEQ1RTSVpFKjVdIC0gd3NwdHJbRENUU0laRSoyXTsKLSAgICB0bXA2ID0gZGF0YXB0cltEQ1RTSVpFKjZdIC0gd3NwdHJbRENUU0laRSoxXTsKLSAgICB0bXA3ID0gZGF0YXB0cltEQ1RTSVpFKjddIC0gd3NwdHJbRENUU0laRSowXTsKLQotICAgIGRhdGFwdHJbRENUU0laRSowXSA9IChEQ1RFTEVNKQotICAgICAgREVTQ0FMRSh0bXAxMCArIHRtcDExICsgdG1wMTIgKyB0bXAxMywgUEFTUzFfQklUUysyKTsKLSAgICBkYXRhcHRyW0RDVFNJWkUqNF0gPSAoRENURUxFTSkKLSAgICAgIERFU0NBTEUoTVVMVElQTFkodG1wMTAgLSB0bXAxMywgRklYKDEuMzA2NTYyOTY1KSkgKyAvKiBjNFsxNl0gPSBjMls4XSAqLwotCSAgICAgIE1VTFRJUExZKHRtcDExIC0gdG1wMTIsIEZJWF8wXzU0MTE5NjEwMCksICAgLyogYzEyWzE2XSA9IGM2WzhdICovCi0JICAgICAgQ09OU1RfQklUUytQQVNTMV9CSVRTKzIpOwotCi0gICAgdG1wMTAgPSBNVUxUSVBMWSh0bXAxNyAtIHRtcDE1LCBGSVgoMC4yNzU4OTkzNzkpKSArICAgLyogYzE0WzE2XSA9IGM3WzhdICovCi0JICAgIE1VTFRJUExZKHRtcDE0IC0gdG1wMTYsIEZJWCgxLjM4NzAzOTg0NSkpOyAgICAvKiBjMlsxNl0gPSBjMVs4XSAqLwotCi0gICAgZGF0YXB0cltEQ1RTSVpFKjJdID0gKERDVEVMRU0pCi0gICAgICBERVNDQUxFKHRtcDEwICsgTVVMVElQTFkodG1wMTUsIEZJWCgxLjQ1MTc3NDk4MikpICAgLyogYzYrYzE0ICovCi0JICAgICAgKyBNVUxUSVBMWSh0bXAxNiwgRklYKDIuMTcyNzM0ODA0KSksICAgICAgICAvKiBjMisxMCAqLwotCSAgICAgIENPTlNUX0JJVFMrUEFTUzFfQklUUysyKTsKLSAgICBkYXRhcHRyW0RDVFNJWkUqNl0gPSAoRENURUxFTSkKLSAgICAgIERFU0NBTEUodG1wMTAgLSBNVUxUSVBMWSh0bXAxNCwgRklYKDAuMjExMTY0MjQzKSkgICAvKiBjMi1jNiAqLwotCSAgICAgIC0gTVVMVElQTFkodG1wMTcsIEZJWCgxLjA2MTU5NDMzOCkpLCAgICAgICAgLyogYzEwK2MxNCAqLwotCSAgICAgIENPTlNUX0JJVFMrUEFTUzFfQklUUysyKTsKLQotICAgIC8qIE9kZCBwYXJ0ICovCi0KLSAgICB0bXAxMSA9IE1VTFRJUExZKHRtcDAgKyB0bXAxLCBGSVgoMS4zNTMzMTgwMDEpKSArICAgICAgICAgLyogYzMgKi8KLQkgICAgTVVMVElQTFkodG1wNiAtIHRtcDcsIEZJWCgwLjQxMDUyNDUyOCkpOyAgICAgICAgICAvKiBjMTMgKi8KLSAgICB0bXAxMiA9IE1VTFRJUExZKHRtcDAgKyB0bXAyLCBGSVgoMS4yNDcyMjUwMTMpKSArICAgICAgICAgLyogYzUgKi8KLQkgICAgTVVMVElQTFkodG1wNSArIHRtcDcsIEZJWCgwLjY2NjY1NTY1OCkpOyAgICAgICAgICAvKiBjMTEgKi8KLSAgICB0bXAxMyA9IE1VTFRJUExZKHRtcDAgKyB0bXAzLCBGSVgoMS4wOTMyMDE4NjcpKSArICAgICAgICAgLyogYzcgKi8KLQkgICAgTVVMVElQTFkodG1wNCAtIHRtcDcsIEZJWCgwLjg5NzE2NzU4NikpOyAgICAgICAgICAvKiBjOSAqLwotICAgIHRtcDE0ID0gTVVMVElQTFkodG1wMSArIHRtcDIsIEZJWCgwLjEzODYxNzE2OSkpICsgICAgICAgICAvKiBjMTUgKi8KLQkgICAgTVVMVElQTFkodG1wNiAtIHRtcDUsIEZJWCgxLjQwNzQwMzczOCkpOyAgICAgICAgICAvKiBjMSAqLwotICAgIHRtcDE1ID0gTVVMVElQTFkodG1wMSArIHRtcDMsIC0gRklYKDAuNjY2NjU1NjU4KSkgKyAgICAgICAvKiAtYzExICovCi0JICAgIE1VTFRJUExZKHRtcDQgKyB0bXA2LCAtIEZJWCgxLjI0NzIyNTAxMykpOyAgICAgICAgLyogLWM1ICovCi0gICAgdG1wMTYgPSBNVUxUSVBMWSh0bXAyICsgdG1wMywgLSBGSVgoMS4zNTMzMTgwMDEpKSArICAgICAgIC8qIC1jMyAqLwotCSAgICBNVUxUSVBMWSh0bXA1IC0gdG1wNCwgRklYKDAuNDEwNTI0NTI4KSk7ICAgICAgICAgIC8qIGMxMyAqLwotICAgIHRtcDEwID0gdG1wMTEgKyB0bXAxMiArIHRtcDEzIC0KLQkgICAgTVVMVElQTFkodG1wMCwgRklYKDIuMjg2MzQxMTQ0KSkgKyAgICAgICAgICAgICAgICAvKiBjNytjNStjMy1jMSAqLwotCSAgICBNVUxUSVBMWSh0bXA3LCBGSVgoMC43Nzk2NTM2MjUpKTsgICAgICAgICAgICAgICAgIC8qIGMxNStjMTMtYzExK2M5ICovCi0gICAgdG1wMTEgKz0gdG1wMTQgKyB0bXAxNSArIE1VTFRJUExZKHRtcDEsIEZJWCgwLjA3MTg4ODA3NCkpIC8qIGM5LWMzLWMxNStjMTEgKi8KLQkgICAgIC0gTVVMVElQTFkodG1wNiwgRklYKDEuNjYzOTA1MTE5KSk7ICAgICAgICAgICAgICAvKiBjNytjMTMrYzEtYzUgKi8KLSAgICB0bXAxMiArPSB0bXAxNCArIHRtcDE2IC0gTVVMVElQTFkodG1wMiwgRklYKDEuMTI1NzI2MDQ4KSkgLyogYzcrYzUrYzE1LWMzICovCi0JICAgICArIE1VTFRJUExZKHRtcDUsIEZJWCgxLjIyNzM5MTEzOCkpOyAgICAgICAgICAgICAgLyogYzktYzExK2MxLWMxMyAqLwotICAgIHRtcDEzICs9IHRtcDE1ICsgdG1wMTYgKyBNVUxUSVBMWSh0bXAzLCBGSVgoMS4wNjUzODg5NjIpKSAvKiBjMTUrYzMrYzExLWM3ICovCi0JICAgICArIE1VTFRJUExZKHRtcDQsIEZJWCgyLjE2Nzk4NTY5MikpOyAgICAgICAgICAgICAgLyogYzErYzEzK2M1LWM5ICovCi0KLSAgICBkYXRhcHRyW0RDVFNJWkUqMV0gPSAoRENURUxFTSkgREVTQ0FMRSh0bXAxMCwgQ09OU1RfQklUUytQQVNTMV9CSVRTKzIpOwotICAgIGRhdGFwdHJbRENUU0laRSozXSA9IChEQ1RFTEVNKSBERVNDQUxFKHRtcDExLCBDT05TVF9CSVRTK1BBU1MxX0JJVFMrMik7Ci0gICAgZGF0YXB0cltEQ1RTSVpFKjVdID0gKERDVEVMRU0pIERFU0NBTEUodG1wMTIsIENPTlNUX0JJVFMrUEFTUzFfQklUUysyKTsKLSAgICBkYXRhcHRyW0RDVFNJWkUqN10gPSAoRENURUxFTSkgREVTQ0FMRSh0bXAxMywgQ09OU1RfQklUUytQQVNTMV9CSVRTKzIpOwotCi0gICAgZGF0YXB0cisrOwkJCS8qIGFkdmFuY2UgcG9pbnRlciB0byBuZXh0IGNvbHVtbiAqLwotICAgIHdzcHRyKys7CQkJLyogYWR2YW5jZSBwb2ludGVyIHRvIG5leHQgY29sdW1uICovCi0gIH0KLX0KLQotCi0vKgotICogUGVyZm9ybSB0aGUgZm9yd2FyZCBEQ1Qgb24gYSAxNng4IHNhbXBsZSBibG9jay4KLSAqCi0gKiAxNi1wb2ludCBGRENUIGluIHBhc3MgMSAocm93cyksIDgtcG9pbnQgaW4gcGFzcyAyIChjb2x1bW5zKS4KLSAqLwotCi1HTE9CQUwodm9pZCkKLWpwZWdfZmRjdF8xNng4IChEQ1RFTEVNICogZGF0YSwgSlNBTVBBUlJBWSBzYW1wbGVfZGF0YSwgSkRJTUVOU0lPTiBzdGFydF9jb2wpCi17Ci0gIElOVDMyIHRtcDAsIHRtcDEsIHRtcDIsIHRtcDMsIHRtcDQsIHRtcDUsIHRtcDYsIHRtcDc7Ci0gIElOVDMyIHRtcDEwLCB0bXAxMSwgdG1wMTIsIHRtcDEzLCB0bXAxNCwgdG1wMTUsIHRtcDE2LCB0bXAxNzsKLSAgSU5UMzIgejE7Ci0gIERDVEVMRU0gKmRhdGFwdHI7Ci0gIEpTQU1QUk9XIGVsZW1wdHI7Ci0gIGludCBjdHI7Ci0gIFNISUZUX1RFTVBTCi0KLSAgLyogUGFzcyAxOiBwcm9jZXNzIHJvd3MuICovCi0gIC8qIE5vdGUgcmVzdWx0cyBhcmUgc2NhbGVkIHVwIGJ5IHNxcnQoOCkgY29tcGFyZWQgdG8gYSB0cnVlIERDVDsgKi8KLSAgLyogZnVydGhlcm1vcmUsIHdlIHNjYWxlIHRoZSByZXN1bHRzIGJ5IDIqKlBBU1MxX0JJVFMuICovCi0gIC8qIDE2LXBvaW50IEZEQ1Qga2VybmVsLCBjSyByZXByZXNlbnRzIHNxcnQoMikgKiBjb3MoSypwaS8zMikuICovCi0KLSAgZGF0YXB0ciA9IGRhdGE7Ci0gIGN0ciA9IDA7Ci0gIGZvciAoY3RyID0gMDsgY3RyIDwgRENUU0laRTsgY3RyKyspIHsKLSAgICBlbGVtcHRyID0gc2FtcGxlX2RhdGFbY3RyXSArIHN0YXJ0X2NvbDsKLQotICAgIC8qIEV2ZW4gcGFydCAqLwotCi0gICAgdG1wMCA9IEdFVEpTQU1QTEUoZWxlbXB0clswXSkgKyBHRVRKU0FNUExFKGVsZW1wdHJbMTVdKTsKLSAgICB0bXAxID0gR0VUSlNBTVBMRShlbGVtcHRyWzFdKSArIEdFVEpTQU1QTEUoZWxlbXB0clsxNF0pOwotICAgIHRtcDIgPSBHRVRKU0FNUExFKGVsZW1wdHJbMl0pICsgR0VUSlNBTVBMRShlbGVtcHRyWzEzXSk7Ci0gICAgdG1wMyA9IEdFVEpTQU1QTEUoZWxlbXB0clszXSkgKyBHRVRKU0FNUExFKGVsZW1wdHJbMTJdKTsKLSAgICB0bXA0ID0gR0VUSlNBTVBMRShlbGVtcHRyWzRdKSArIEdFVEpTQU1QTEUoZWxlbXB0clsxMV0pOwotICAgIHRtcDUgPSBHRVRKU0FNUExFKGVsZW1wdHJbNV0pICsgR0VUSlNBTVBMRShlbGVtcHRyWzEwXSk7Ci0gICAgdG1wNiA9IEdFVEpTQU1QTEUoZWxlbXB0cls2XSkgKyBHRVRKU0FNUExFKGVsZW1wdHJbOV0pOwotICAgIHRtcDcgPSBHRVRKU0FNUExFKGVsZW1wdHJbN10pICsgR0VUSlNBTVBMRShlbGVtcHRyWzhdKTsKLQotICAgIHRtcDEwID0gdG1wMCArIHRtcDc7Ci0gICAgdG1wMTQgPSB0bXAwIC0gdG1wNzsKLSAgICB0bXAxMSA9IHRtcDEgKyB0bXA2OwotICAgIHRtcDE1ID0gdG1wMSAtIHRtcDY7Ci0gICAgdG1wMTIgPSB0bXAyICsgdG1wNTsKLSAgICB0bXAxNiA9IHRtcDIgLSB0bXA1OwotICAgIHRtcDEzID0gdG1wMyArIHRtcDQ7Ci0gICAgdG1wMTcgPSB0bXAzIC0gdG1wNDsKLQotICAgIHRtcDAgPSBHRVRKU0FNUExFKGVsZW1wdHJbMF0pIC0gR0VUSlNBTVBMRShlbGVtcHRyWzE1XSk7Ci0gICAgdG1wMSA9IEdFVEpTQU1QTEUoZWxlbXB0clsxXSkgLSBHRVRKU0FNUExFKGVsZW1wdHJbMTRdKTsKLSAgICB0bXAyID0gR0VUSlNBTVBMRShlbGVtcHRyWzJdKSAtIEdFVEpTQU1QTEUoZWxlbXB0clsxM10pOwotICAgIHRtcDMgPSBHRVRKU0FNUExFKGVsZW1wdHJbM10pIC0gR0VUSlNBTVBMRShlbGVtcHRyWzEyXSk7Ci0gICAgdG1wNCA9IEdFVEpTQU1QTEUoZWxlbXB0cls0XSkgLSBHRVRKU0FNUExFKGVsZW1wdHJbMTFdKTsKLSAgICB0bXA1ID0gR0VUSlNBTVBMRShlbGVtcHRyWzVdKSAtIEdFVEpTQU1QTEUoZWxlbXB0clsxMF0pOwotICAgIHRtcDYgPSBHRVRKU0FNUExFKGVsZW1wdHJbNl0pIC0gR0VUSlNBTVBMRShlbGVtcHRyWzldKTsKLSAgICB0bXA3ID0gR0VUSlNBTVBMRShlbGVtcHRyWzddKSAtIEdFVEpTQU1QTEUoZWxlbXB0cls4XSk7Ci0KLSAgICAvKiBBcHBseSB1bnNpZ25lZC0+c2lnbmVkIGNvbnZlcnNpb24gKi8KLSAgICBkYXRhcHRyWzBdID0gKERDVEVMRU0pCi0gICAgICAoKHRtcDEwICsgdG1wMTEgKyB0bXAxMiArIHRtcDEzIC0gMTYgKiBDRU5URVJKU0FNUExFKSA8PCBQQVNTMV9CSVRTKTsKLSAgICBkYXRhcHRyWzRdID0gKERDVEVMRU0pCi0gICAgICBERVNDQUxFKE1VTFRJUExZKHRtcDEwIC0gdG1wMTMsIEZJWCgxLjMwNjU2Mjk2NSkpICsgLyogYzRbMTZdID0gYzJbOF0gKi8KLQkgICAgICBNVUxUSVBMWSh0bXAxMSAtIHRtcDEyLCBGSVhfMF81NDExOTYxMDApLCAgIC8qIGMxMlsxNl0gPSBjNls4XSAqLwotCSAgICAgIENPTlNUX0JJVFMtUEFTUzFfQklUUyk7Ci0KLSAgICB0bXAxMCA9IE1VTFRJUExZKHRtcDE3IC0gdG1wMTUsIEZJWCgwLjI3NTg5OTM3OSkpICsgICAvKiBjMTRbMTZdID0gYzdbOF0gKi8KLQkgICAgTVVMVElQTFkodG1wMTQgLSB0bXAxNiwgRklYKDEuMzg3MDM5ODQ1KSk7ICAgIC8qIGMyWzE2XSA9IGMxWzhdICovCi0KLSAgICBkYXRhcHRyWzJdID0gKERDVEVMRU0pCi0gICAgICBERVNDQUxFKHRtcDEwICsgTVVMVElQTFkodG1wMTUsIEZJWCgxLjQ1MTc3NDk4MikpICAgLyogYzYrYzE0ICovCi0JICAgICAgKyBNVUxUSVBMWSh0bXAxNiwgRklYKDIuMTcyNzM0ODA0KSksICAgICAgICAvKiBjMitjMTAgKi8KLQkgICAgICBDT05TVF9CSVRTLVBBU1MxX0JJVFMpOwotICAgIGRhdGFwdHJbNl0gPSAoRENURUxFTSkKLSAgICAgIERFU0NBTEUodG1wMTAgLSBNVUxUSVBMWSh0bXAxNCwgRklYKDAuMjExMTY0MjQzKSkgICAvKiBjMi1jNiAqLwotCSAgICAgIC0gTVVMVElQTFkodG1wMTcsIEZJWCgxLjA2MTU5NDMzOCkpLCAgICAgICAgLyogYzEwK2MxNCAqLwotCSAgICAgIENPTlNUX0JJVFMtUEFTUzFfQklUUyk7Ci0KLSAgICAvKiBPZGQgcGFydCAqLwotCi0gICAgdG1wMTEgPSBNVUxUSVBMWSh0bXAwICsgdG1wMSwgRklYKDEuMzUzMzE4MDAxKSkgKyAgICAgICAgIC8qIGMzICovCi0JICAgIE1VTFRJUExZKHRtcDYgLSB0bXA3LCBGSVgoMC40MTA1MjQ1MjgpKTsgICAgICAgICAgLyogYzEzICovCi0gICAgdG1wMTIgPSBNVUxUSVBMWSh0bXAwICsgdG1wMiwgRklYKDEuMjQ3MjI1MDEzKSkgKyAgICAgICAgIC8qIGM1ICovCi0JICAgIE1VTFRJUExZKHRtcDUgKyB0bXA3LCBGSVgoMC42NjY2NTU2NTgpKTsgICAgICAgICAgLyogYzExICovCi0gICAgdG1wMTMgPSBNVUxUSVBMWSh0bXAwICsgdG1wMywgRklYKDEuMDkzMjAxODY3KSkgKyAgICAgICAgIC8qIGM3ICovCi0JICAgIE1VTFRJUExZKHRtcDQgLSB0bXA3LCBGSVgoMC44OTcxNjc1ODYpKTsgICAgICAgICAgLyogYzkgKi8KLSAgICB0bXAxNCA9IE1VTFRJUExZKHRtcDEgKyB0bXAyLCBGSVgoMC4xMzg2MTcxNjkpKSArICAgICAgICAgLyogYzE1ICovCi0JICAgIE1VTFRJUExZKHRtcDYgLSB0bXA1LCBGSVgoMS40MDc0MDM3MzgpKTsgICAgICAgICAgLyogYzEgKi8KLSAgICB0bXAxNSA9IE1VTFRJUExZKHRtcDEgKyB0bXAzLCAtIEZJWCgwLjY2NjY1NTY1OCkpICsgICAgICAgLyogLWMxMSAqLwotCSAgICBNVUxUSVBMWSh0bXA0ICsgdG1wNiwgLSBGSVgoMS4yNDcyMjUwMTMpKTsgICAgICAgIC8qIC1jNSAqLwotICAgIHRtcDE2ID0gTVVMVElQTFkodG1wMiArIHRtcDMsIC0gRklYKDEuMzUzMzE4MDAxKSkgKyAgICAgICAvKiAtYzMgKi8KLQkgICAgTVVMVElQTFkodG1wNSAtIHRtcDQsIEZJWCgwLjQxMDUyNDUyOCkpOyAgICAgICAgICAvKiBjMTMgKi8KLSAgICB0bXAxMCA9IHRtcDExICsgdG1wMTIgKyB0bXAxMyAtCi0JICAgIE1VTFRJUExZKHRtcDAsIEZJWCgyLjI4NjM0MTE0NCkpICsgICAgICAgICAgICAgICAgLyogYzcrYzUrYzMtYzEgKi8KLQkgICAgTVVMVElQTFkodG1wNywgRklYKDAuNzc5NjUzNjI1KSk7ICAgICAgICAgICAgICAgICAvKiBjMTUrYzEzLWMxMStjOSAqLwotICAgIHRtcDExICs9IHRtcDE0ICsgdG1wMTUgKyBNVUxUSVBMWSh0bXAxLCBGSVgoMC4wNzE4ODgwNzQpKSAvKiBjOS1jMy1jMTUrYzExICovCi0JICAgICAtIE1VTFRJUExZKHRtcDYsIEZJWCgxLjY2MzkwNTExOSkpOyAgICAgICAgICAgICAgLyogYzcrYzEzK2MxLWM1ICovCi0gICAgdG1wMTIgKz0gdG1wMTQgKyB0bXAxNiAtIE1VTFRJUExZKHRtcDIsIEZJWCgxLjEyNTcyNjA0OCkpIC8qIGM3K2M1K2MxNS1jMyAqLwotCSAgICAgKyBNVUxUSVBMWSh0bXA1LCBGSVgoMS4yMjczOTExMzgpKTsgICAgICAgICAgICAgIC8qIGM5LWMxMStjMS1jMTMgKi8KLSAgICB0bXAxMyArPSB0bXAxNSArIHRtcDE2ICsgTVVMVElQTFkodG1wMywgRklYKDEuMDY1Mzg4OTYyKSkgLyogYzE1K2MzK2MxMS1jNyAqLwotCSAgICAgKyBNVUxUSVBMWSh0bXA0LCBGSVgoMi4xNjc5ODU2OTIpKTsgICAgICAgICAgICAgIC8qIGMxK2MxMytjNS1jOSAqLwotCi0gICAgZGF0YXB0clsxXSA9IChEQ1RFTEVNKSBERVNDQUxFKHRtcDEwLCBDT05TVF9CSVRTLVBBU1MxX0JJVFMpOwotICAgIGRhdGFwdHJbM10gPSAoRENURUxFTSkgREVTQ0FMRSh0bXAxMSwgQ09OU1RfQklUUy1QQVNTMV9CSVRTKTsKLSAgICBkYXRhcHRyWzVdID0gKERDVEVMRU0pIERFU0NBTEUodG1wMTIsIENPTlNUX0JJVFMtUEFTUzFfQklUUyk7Ci0gICAgZGF0YXB0cls3XSA9IChEQ1RFTEVNKSBERVNDQUxFKHRtcDEzLCBDT05TVF9CSVRTLVBBU1MxX0JJVFMpOwotCi0gICAgZGF0YXB0ciArPSBEQ1RTSVpFOwkJLyogYWR2YW5jZSBwb2ludGVyIHRvIG5leHQgcm93ICovCi0gIH0KLQotICAvKiBQYXNzIDI6IHByb2Nlc3MgY29sdW1ucy4KLSAgICogV2UgcmVtb3ZlIHRoZSBQQVNTMV9CSVRTIHNjYWxpbmcsIGJ1dCBsZWF2ZSB0aGUgcmVzdWx0cyBzY2FsZWQgdXAKLSAgICogYnkgYW4gb3ZlcmFsbCBmYWN0b3Igb2YgOC4KLSAgICogV2UgbXVzdCBhbHNvIHNjYWxlIHRoZSBvdXRwdXQgYnkgOC8xNiA9IDEvMi4KLSAgICovCi0KLSAgZGF0YXB0ciA9IGRhdGE7Ci0gIGZvciAoY3RyID0gRENUU0laRS0xOyBjdHIgPj0gMDsgY3RyLS0pIHsKLSAgICAvKiBFdmVuIHBhcnQgcGVyIExMJk0gZmlndXJlIDEgLS0tIG5vdGUgdGhhdCBwdWJsaXNoZWQgZmlndXJlIGlzIGZhdWx0eTsKLSAgICAgKiByb3RhdG9yICJzcXJ0KDIpKmMxIiBzaG91bGQgYmUgInNxcnQoMikqYzYiLgotICAgICAqLwotCi0gICAgdG1wMCA9IGRhdGFwdHJbRENUU0laRSowXSArIGRhdGFwdHJbRENUU0laRSo3XTsKLSAgICB0bXAxID0gZGF0YXB0cltEQ1RTSVpFKjFdICsgZGF0YXB0cltEQ1RTSVpFKjZdOwotICAgIHRtcDIgPSBkYXRhcHRyW0RDVFNJWkUqMl0gKyBkYXRhcHRyW0RDVFNJWkUqNV07Ci0gICAgdG1wMyA9IGRhdGFwdHJbRENUU0laRSozXSArIGRhdGFwdHJbRENUU0laRSo0XTsKLQotICAgIHRtcDEwID0gdG1wMCArIHRtcDM7Ci0gICAgdG1wMTIgPSB0bXAwIC0gdG1wMzsKLSAgICB0bXAxMSA9IHRtcDEgKyB0bXAyOwotICAgIHRtcDEzID0gdG1wMSAtIHRtcDI7Ci0KLSAgICB0bXAwID0gZGF0YXB0cltEQ1RTSVpFKjBdIC0gZGF0YXB0cltEQ1RTSVpFKjddOwotICAgIHRtcDEgPSBkYXRhcHRyW0RDVFNJWkUqMV0gLSBkYXRhcHRyW0RDVFNJWkUqNl07Ci0gICAgdG1wMiA9IGRhdGFwdHJbRENUU0laRSoyXSAtIGRhdGFwdHJbRENUU0laRSo1XTsKLSAgICB0bXAzID0gZGF0YXB0cltEQ1RTSVpFKjNdIC0gZGF0YXB0cltEQ1RTSVpFKjRdOwotCi0gICAgZGF0YXB0cltEQ1RTSVpFKjBdID0gKERDVEVMRU0pIERFU0NBTEUodG1wMTAgKyB0bXAxMSwgUEFTUzFfQklUUysxKTsKLSAgICBkYXRhcHRyW0RDVFNJWkUqNF0gPSAoRENURUxFTSkgREVTQ0FMRSh0bXAxMCAtIHRtcDExLCBQQVNTMV9CSVRTKzEpOwotCi0gICAgejEgPSBNVUxUSVBMWSh0bXAxMiArIHRtcDEzLCBGSVhfMF81NDExOTYxMDApOwotICAgIGRhdGFwdHJbRENUU0laRSoyXSA9IChEQ1RFTEVNKSBERVNDQUxFKHoxICsgTVVMVElQTFkodG1wMTIsIEZJWF8wXzc2NTM2Njg2NSksCi0JCQkJCSAgIENPTlNUX0JJVFMrUEFTUzFfQklUUysxKTsKLSAgICBkYXRhcHRyW0RDVFNJWkUqNl0gPSAoRENURUxFTSkgREVTQ0FMRSh6MSAtIE1VTFRJUExZKHRtcDEzLCBGSVhfMV84NDc3NTkwNjUpLAotCQkJCQkgICBDT05TVF9CSVRTK1BBU1MxX0JJVFMrMSk7Ci0KLSAgICAvKiBPZGQgcGFydCBwZXIgZmlndXJlIDggLS0tIG5vdGUgcGFwZXIgb21pdHMgZmFjdG9yIG9mIHNxcnQoMikuCi0gICAgICogOC1wb2ludCBGRENUIGtlcm5lbCwgY0sgcmVwcmVzZW50cyBzcXJ0KDIpICogY29zKEsqcGkvMTYpLgotICAgICAqIGkwLi5pMyBpbiB0aGUgcGFwZXIgYXJlIHRtcDAuLnRtcDMgaGVyZS4KLSAgICAgKi8KLQotICAgIHRtcDEwID0gdG1wMCArIHRtcDM7Ci0gICAgdG1wMTEgPSB0bXAxICsgdG1wMjsKLSAgICB0bXAxMiA9IHRtcDAgKyB0bXAyOwotICAgIHRtcDEzID0gdG1wMSArIHRtcDM7Ci0gICAgejEgPSBNVUxUSVBMWSh0bXAxMiArIHRtcDEzLCBGSVhfMV8xNzU4NzU2MDIpOyAvKiAgYzMgKi8KLQotICAgIHRtcDAgID0gTVVMVElQTFkodG1wMCwgICAgRklYXzFfNTAxMzIxMTEwKTsgICAgLyogIGMxK2MzLWM1LWM3ICovCi0gICAgdG1wMSAgPSBNVUxUSVBMWSh0bXAxLCAgICBGSVhfM18wNzI3MTEwMjYpOyAgICAvKiAgYzErYzMrYzUtYzcgKi8KLSAgICB0bXAyICA9IE1VTFRJUExZKHRtcDIsICAgIEZJWF8yXzA1MzExOTg2OSk7ICAgIC8qICBjMStjMy1jNStjNyAqLwotICAgIHRtcDMgID0gTVVMVElQTFkodG1wMywgICAgRklYXzBfMjk4NjMxMzM2KTsgICAgLyogLWMxK2MzK2M1LWM3ICovCi0gICAgdG1wMTAgPSBNVUxUSVBMWSh0bXAxMCwgLSBGSVhfMF84OTk5NzYyMjMpOyAgICAvKiAgYzctYzMgKi8KLSAgICB0bXAxMSA9IE1VTFRJUExZKHRtcDExLCAtIEZJWF8yXzU2MjkxNTQ0Nyk7ICAgIC8qIC1jMS1jMyAqLwotICAgIHRtcDEyID0gTVVMVElQTFkodG1wMTIsIC0gRklYXzBfMzkwMTgwNjQ0KTsgICAgLyogIGM1LWMzICovCi0gICAgdG1wMTMgPSBNVUxUSVBMWSh0bXAxMywgLSBGSVhfMV85NjE1NzA1NjApOyAgICAvKiAtYzMtYzUgKi8KLQotICAgIHRtcDEyICs9IHoxOwotICAgIHRtcDEzICs9IHoxOwotCi0gICAgZGF0YXB0cltEQ1RTSVpFKjFdID0gKERDVEVMRU0pIERFU0NBTEUodG1wMCArIHRtcDEwICsgdG1wMTIsCi0JCQkJCSAgIENPTlNUX0JJVFMrUEFTUzFfQklUUysxKTsKLSAgICBkYXRhcHRyW0RDVFNJWkUqM10gPSAoRENURUxFTSkgREVTQ0FMRSh0bXAxICsgdG1wMTEgKyB0bXAxMywKLQkJCQkJICAgQ09OU1RfQklUUytQQVNTMV9CSVRTKzEpOwotICAgIGRhdGFwdHJbRENUU0laRSo1XSA9IChEQ1RFTEVNKSBERVNDQUxFKHRtcDIgKyB0bXAxMSArIHRtcDEyLAotCQkJCQkgICBDT05TVF9CSVRTK1BBU1MxX0JJVFMrMSk7Ci0gICAgZGF0YXB0cltEQ1RTSVpFKjddID0gKERDVEVMRU0pIERFU0NBTEUodG1wMyArIHRtcDEwICsgdG1wMTMsCi0JCQkJCSAgIENPTlNUX0JJVFMrUEFTUzFfQklUUysxKTsKLQotICAgIGRhdGFwdHIrKzsJCQkvKiBhZHZhbmNlIHBvaW50ZXIgdG8gbmV4dCBjb2x1bW4gKi8KLSAgfQotfQotCi0KLS8qCi0gKiBQZXJmb3JtIHRoZSBmb3J3YXJkIERDVCBvbiBhIDE0eDcgc2FtcGxlIGJsb2NrLgotICoKLSAqIDE0LXBvaW50IEZEQ1QgaW4gcGFzcyAxIChyb3dzKSwgNy1wb2ludCBpbiBwYXNzIDIgKGNvbHVtbnMpLgotICovCi0KLUdMT0JBTCh2b2lkKQotanBlZ19mZGN0XzE0eDcgKERDVEVMRU0gKiBkYXRhLCBKU0FNUEFSUkFZIHNhbXBsZV9kYXRhLCBKRElNRU5TSU9OIHN0YXJ0X2NvbCkKLXsKLSAgSU5UMzIgdG1wMCwgdG1wMSwgdG1wMiwgdG1wMywgdG1wNCwgdG1wNSwgdG1wNjsKLSAgSU5UMzIgdG1wMTAsIHRtcDExLCB0bXAxMiwgdG1wMTMsIHRtcDE0LCB0bXAxNSwgdG1wMTY7Ci0gIElOVDMyIHoxLCB6MiwgejM7Ci0gIERDVEVMRU0gKmRhdGFwdHI7Ci0gIEpTQU1QUk9XIGVsZW1wdHI7Ci0gIGludCBjdHI7Ci0gIFNISUZUX1RFTVBTCi0KLSAgLyogWmVybyBib3R0b20gcm93IG9mIG91dHB1dCBjb2VmZmljaWVudCBibG9jay4gKi8KLSAgTUVNWkVSTygmZGF0YVtEQ1RTSVpFKjddLCBTSVpFT0YoRENURUxFTSkgKiBEQ1RTSVpFKTsKLQotICAvKiBQYXNzIDE6IHByb2Nlc3Mgcm93cy4gKi8KLSAgLyogTm90ZSByZXN1bHRzIGFyZSBzY2FsZWQgdXAgYnkgc3FydCg4KSBjb21wYXJlZCB0byBhIHRydWUgRENUOyAqLwotICAvKiBmdXJ0aGVybW9yZSwgd2Ugc2NhbGUgdGhlIHJlc3VsdHMgYnkgMioqUEFTUzFfQklUUy4gKi8KLSAgLyogMTQtcG9pbnQgRkRDVCBrZXJuZWwsIGNLIHJlcHJlc2VudHMgc3FydCgyKSAqIGNvcyhLKnBpLzI4KS4gKi8KLQotICBkYXRhcHRyID0gZGF0YTsKLSAgZm9yIChjdHIgPSAwOyBjdHIgPCA3OyBjdHIrKykgewotICAgIGVsZW1wdHIgPSBzYW1wbGVfZGF0YVtjdHJdICsgc3RhcnRfY29sOwotCi0gICAgLyogRXZlbiBwYXJ0ICovCi0KLSAgICB0bXAwID0gR0VUSlNBTVBMRShlbGVtcHRyWzBdKSArIEdFVEpTQU1QTEUoZWxlbXB0clsxM10pOwotICAgIHRtcDEgPSBHRVRKU0FNUExFKGVsZW1wdHJbMV0pICsgR0VUSlNBTVBMRShlbGVtcHRyWzEyXSk7Ci0gICAgdG1wMiA9IEdFVEpTQU1QTEUoZWxlbXB0clsyXSkgKyBHRVRKU0FNUExFKGVsZW1wdHJbMTFdKTsKLSAgICB0bXAxMyA9IEdFVEpTQU1QTEUoZWxlbXB0clszXSkgKyBHRVRKU0FNUExFKGVsZW1wdHJbMTBdKTsKLSAgICB0bXA0ID0gR0VUSlNBTVBMRShlbGVtcHRyWzRdKSArIEdFVEpTQU1QTEUoZWxlbXB0cls5XSk7Ci0gICAgdG1wNSA9IEdFVEpTQU1QTEUoZWxlbXB0cls1XSkgKyBHRVRKU0FNUExFKGVsZW1wdHJbOF0pOwotICAgIHRtcDYgPSBHRVRKU0FNUExFKGVsZW1wdHJbNl0pICsgR0VUSlNBTVBMRShlbGVtcHRyWzddKTsKLQotICAgIHRtcDEwID0gdG1wMCArIHRtcDY7Ci0gICAgdG1wMTQgPSB0bXAwIC0gdG1wNjsKLSAgICB0bXAxMSA9IHRtcDEgKyB0bXA1OwotICAgIHRtcDE1ID0gdG1wMSAtIHRtcDU7Ci0gICAgdG1wMTIgPSB0bXAyICsgdG1wNDsKLSAgICB0bXAxNiA9IHRtcDIgLSB0bXA0OwotCi0gICAgdG1wMCA9IEdFVEpTQU1QTEUoZWxlbXB0clswXSkgLSBHRVRKU0FNUExFKGVsZW1wdHJbMTNdKTsKLSAgICB0bXAxID0gR0VUSlNBTVBMRShlbGVtcHRyWzFdKSAtIEdFVEpTQU1QTEUoZWxlbXB0clsxMl0pOwotICAgIHRtcDIgPSBHRVRKU0FNUExFKGVsZW1wdHJbMl0pIC0gR0VUSlNBTVBMRShlbGVtcHRyWzExXSk7Ci0gICAgdG1wMyA9IEdFVEpTQU1QTEUoZWxlbXB0clszXSkgLSBHRVRKU0FNUExFKGVsZW1wdHJbMTBdKTsKLSAgICB0bXA0ID0gR0VUSlNBTVBMRShlbGVtcHRyWzRdKSAtIEdFVEpTQU1QTEUoZWxlbXB0cls5XSk7Ci0gICAgdG1wNSA9IEdFVEpTQU1QTEUoZWxlbXB0cls1XSkgLSBHRVRKU0FNUExFKGVsZW1wdHJbOF0pOwotICAgIHRtcDYgPSBHRVRKU0FNUExFKGVsZW1wdHJbNl0pIC0gR0VUSlNBTVBMRShlbGVtcHRyWzddKTsKLQotICAgIC8qIEFwcGx5IHVuc2lnbmVkLT5zaWduZWQgY29udmVyc2lvbiAqLwotICAgIGRhdGFwdHJbMF0gPSAoRENURUxFTSkKLSAgICAgICgodG1wMTAgKyB0bXAxMSArIHRtcDEyICsgdG1wMTMgLSAxNCAqIENFTlRFUkpTQU1QTEUpIDw8IFBBU1MxX0JJVFMpOwotICAgIHRtcDEzICs9IHRtcDEzOwotICAgIGRhdGFwdHJbNF0gPSAoRENURUxFTSkKLSAgICAgIERFU0NBTEUoTVVMVElQTFkodG1wMTAgLSB0bXAxMywgRklYKDEuMjc0MTYyMzkyKSkgKyAvKiBjNCAqLwotCSAgICAgIE1VTFRJUExZKHRtcDExIC0gdG1wMTMsIEZJWCgwLjMxNDY5MjEyMykpIC0gLyogYzEyICovCi0JICAgICAgTVVMVElQTFkodG1wMTIgLSB0bXAxMywgRklYKDAuODgxNzQ3NzM0KSksICAvKiBjOCAqLwotCSAgICAgIENPTlNUX0JJVFMtUEFTUzFfQklUUyk7Ci0KLSAgICB0bXAxMCA9IE1VTFRJUExZKHRtcDE0ICsgdG1wMTUsIEZJWCgxLjEwNTY3NjY4NikpOyAgICAvKiBjNiAqLwotCi0gICAgZGF0YXB0clsyXSA9IChEQ1RFTEVNKQotICAgICAgREVTQ0FMRSh0bXAxMCArIE1VTFRJUExZKHRtcDE0LCBGSVgoMC4yNzMwNzk1OTApKSAgIC8qIGMyLWM2ICovCi0JICAgICAgKyBNVUxUSVBMWSh0bXAxNiwgRklYKDAuNjEzNjA0MjY4KSksICAgICAgICAvKiBjMTAgKi8KLQkgICAgICBDT05TVF9CSVRTLVBBU1MxX0JJVFMpOwotICAgIGRhdGFwdHJbNl0gPSAoRENURUxFTSkKLSAgICAgIERFU0NBTEUodG1wMTAgLSBNVUxUSVBMWSh0bXAxNSwgRklYKDEuNzE5MjgwOTU0KSkgICAvKiBjNitjMTAgKi8KLQkgICAgICAtIE1VTFRJUExZKHRtcDE2LCBGSVgoMS4zNzg3NTYyNzYpKSwgICAgICAgIC8qIGMyICovCi0JICAgICAgQ09OU1RfQklUUy1QQVNTMV9CSVRTKTsKLQotICAgIC8qIE9kZCBwYXJ0ICovCi0KLSAgICB0bXAxMCA9IHRtcDEgKyB0bXAyOwotICAgIHRtcDExID0gdG1wNSAtIHRtcDQ7Ci0gICAgZGF0YXB0cls3XSA9IChEQ1RFTEVNKSAoKHRtcDAgLSB0bXAxMCArIHRtcDMgLSB0bXAxMSAtIHRtcDYpIDw8IFBBU1MxX0JJVFMpOwotICAgIHRtcDMgPDw9IENPTlNUX0JJVFM7Ci0gICAgdG1wMTAgPSBNVUxUSVBMWSh0bXAxMCwgLSBGSVgoMC4xNTgzNDE2ODEpKTsgICAgICAgICAgLyogLWMxMyAqLwotICAgIHRtcDExID0gTVVMVElQTFkodG1wMTEsIEZJWCgxLjQwNTMyMTI4NCkpOyAgICAgICAgICAgIC8qIGMxICovCi0gICAgdG1wMTAgKz0gdG1wMTEgLSB0bXAzOwotICAgIHRtcDExID0gTVVMVElQTFkodG1wMCArIHRtcDIsIEZJWCgxLjE5NzQ0ODg0NikpICsgICAgIC8qIGM1ICovCi0JICAgIE1VTFRJUExZKHRtcDQgKyB0bXA2LCBGSVgoMC43NTI0MDY5NzgpKTsgICAgICAvKiBjOSAqLwotICAgIGRhdGFwdHJbNV0gPSAoRENURUxFTSkKLSAgICAgIERFU0NBTEUodG1wMTAgKyB0bXAxMSAtIE1VTFRJUExZKHRtcDIsIEZJWCgyLjM3Mzk1OTc3MykpIC8qIGMzK2M1LWMxMyAqLwotCSAgICAgICsgTVVMVElQTFkodG1wNCwgRklYKDEuMTE5OTk5NDM1KSksICAgICAgICAgLyogYzErYzExLWM5ICovCi0JICAgICAgQ09OU1RfQklUUy1QQVNTMV9CSVRTKTsKLSAgICB0bXAxMiA9IE1VTFRJUExZKHRtcDAgKyB0bXAxLCBGSVgoMS4zMzQ4NTI2MDcpKSArICAgICAvKiBjMyAqLwotCSAgICBNVUxUSVBMWSh0bXA1IC0gdG1wNiwgRklYKDAuNDY3MDg1MTI5KSk7ICAgICAgLyogYzExICovCi0gICAgZGF0YXB0clszXSA9IChEQ1RFTEVNKQotICAgICAgREVTQ0FMRSh0bXAxMCArIHRtcDEyIC0gTVVMVElQTFkodG1wMSwgRklYKDAuNDI0MTAzOTQ4KSkgLyogYzMtYzktYzEzICovCi0JICAgICAgLSBNVUxUSVBMWSh0bXA1LCBGSVgoMy4wNjk4NTUyNTkpKSwgICAgICAgICAvKiBjMStjNStjMTEgKi8KLQkgICAgICBDT05TVF9CSVRTLVBBU1MxX0JJVFMpOwotICAgIGRhdGFwdHJbMV0gPSAoRENURUxFTSkKLSAgICAgIERFU0NBTEUodG1wMTEgKyB0bXAxMiArIHRtcDMgKyB0bXA2IC0KLQkgICAgICBNVUxUSVBMWSh0bXAwICsgdG1wNiwgRklYKDEuMTI2OTgwMTY5KSksICAgIC8qIGMzK2M1LWMxICovCi0JICAgICAgQ09OU1RfQklUUy1QQVNTMV9CSVRTKTsKLQotICAgIGRhdGFwdHIgKz0gRENUU0laRTsJCS8qIGFkdmFuY2UgcG9pbnRlciB0byBuZXh0IHJvdyAqLwotICB9Ci0KLSAgLyogUGFzcyAyOiBwcm9jZXNzIGNvbHVtbnMuCi0gICAqIFdlIHJlbW92ZSB0aGUgUEFTUzFfQklUUyBzY2FsaW5nLCBidXQgbGVhdmUgdGhlIHJlc3VsdHMgc2NhbGVkIHVwCi0gICAqIGJ5IGFuIG92ZXJhbGwgZmFjdG9yIG9mIDguCi0gICAqIFdlIG11c3QgYWxzbyBzY2FsZSB0aGUgb3V0cHV0IGJ5ICg4LzE0KSooOC83KSA9IDMyLzQ5LCB3aGljaCB3ZQotICAgKiBwYXJ0aWFsbHkgZm9sZCBpbnRvIHRoZSBjb25zdGFudCBtdWx0aXBsaWVycyBhbmQgZmluYWwgc2hpZnRpbmc6Ci0gICAqIDctcG9pbnQgRkRDVCBrZXJuZWwsIGNLIHJlcHJlc2VudHMgc3FydCgyKSAqIGNvcyhLKnBpLzE0KSAqIDY0LzQ5LgotICAgKi8KLQotICBkYXRhcHRyID0gZGF0YTsKLSAgZm9yIChjdHIgPSBEQ1RTSVpFLTE7IGN0ciA+PSAwOyBjdHItLSkgewotICAgIC8qIEV2ZW4gcGFydCAqLwotCi0gICAgdG1wMCA9IGRhdGFwdHJbRENUU0laRSowXSArIGRhdGFwdHJbRENUU0laRSo2XTsKLSAgICB0bXAxID0gZGF0YXB0cltEQ1RTSVpFKjFdICsgZGF0YXB0cltEQ1RTSVpFKjVdOwotICAgIHRtcDIgPSBkYXRhcHRyW0RDVFNJWkUqMl0gKyBkYXRhcHRyW0RDVFNJWkUqNF07Ci0gICAgdG1wMyA9IGRhdGFwdHJbRENUU0laRSozXTsKLQotICAgIHRtcDEwID0gZGF0YXB0cltEQ1RTSVpFKjBdIC0gZGF0YXB0cltEQ1RTSVpFKjZdOwotICAgIHRtcDExID0gZGF0YXB0cltEQ1RTSVpFKjFdIC0gZGF0YXB0cltEQ1RTSVpFKjVdOwotICAgIHRtcDEyID0gZGF0YXB0cltEQ1RTSVpFKjJdIC0gZGF0YXB0cltEQ1RTSVpFKjRdOwotCi0gICAgejEgPSB0bXAwICsgdG1wMjsKLSAgICBkYXRhcHRyW0RDVFNJWkUqMF0gPSAoRENURUxFTSkKLSAgICAgIERFU0NBTEUoTVVMVElQTFkoejEgKyB0bXAxICsgdG1wMywgRklYKDEuMzA2MTIyNDQ5KSksIC8qIDY0LzQ5ICovCi0JICAgICAgQ09OU1RfQklUUytQQVNTMV9CSVRTKzEpOwotICAgIHRtcDMgKz0gdG1wMzsKLSAgICB6MSAtPSB0bXAzOwotICAgIHoxIC09IHRtcDM7Ci0gICAgejEgPSBNVUxUSVBMWSh6MSwgRklYKDAuNDYxNzg0MDIwKSk7ICAgICAgICAgICAgICAgIC8qIChjMitjNi1jNCkvMiAqLwotICAgIHoyID0gTVVMVElQTFkodG1wMCAtIHRtcDIsIEZJWCgxLjIwMjQyODA4NCkpOyAgICAgICAvKiAoYzIrYzQtYzYpLzIgKi8KLSAgICB6MyA9IE1VTFRJUExZKHRtcDEgLSB0bXAyLCBGSVgoMC40MTEwMjY0NDYpKTsgICAgICAgLyogYzYgKi8KLSAgICBkYXRhcHRyW0RDVFNJWkUqMl0gPSAoRENURUxFTSkgREVTQ0FMRSh6MSArIHoyICsgejMsIENPTlNUX0JJVFMrUEFTUzFfQklUUysxKTsKLSAgICB6MSAtPSB6MjsKLSAgICB6MiA9IE1VTFRJUExZKHRtcDAgLSB0bXAxLCBGSVgoMS4xNTE2NzA1MDkpKTsgICAgICAgLyogYzQgKi8KLSAgICBkYXRhcHRyW0RDVFNJWkUqNF0gPSAoRENURUxFTSkKLSAgICAgIERFU0NBTEUoejIgKyB6MyAtIE1VTFRJUExZKHRtcDEgLSB0bXAzLCBGSVgoMC45MjM1NjgwNDEpKSwgLyogYzIrYzYtYzQgKi8KLQkgICAgICBDT05TVF9CSVRTK1BBU1MxX0JJVFMrMSk7Ci0gICAgZGF0YXB0cltEQ1RTSVpFKjZdID0gKERDVEVMRU0pIERFU0NBTEUoejEgKyB6MiwgQ09OU1RfQklUUytQQVNTMV9CSVRTKzEpOwotCi0gICAgLyogT2RkIHBhcnQgKi8KLQotICAgIHRtcDEgPSBNVUxUSVBMWSh0bXAxMCArIHRtcDExLCBGSVgoMS4yMjE3NjU2NzcpKTsgICAvKiAoYzMrYzEtYzUpLzIgKi8KLSAgICB0bXAyID0gTVVMVElQTFkodG1wMTAgLSB0bXAxMSwgRklYKDAuMjIyMzgzNDY0KSk7ICAgLyogKGMzK2M1LWMxKS8yICovCi0gICAgdG1wMCA9IHRtcDEgLSB0bXAyOwotICAgIHRtcDEgKz0gdG1wMjsKLSAgICB0bXAyID0gTVVMVElQTFkodG1wMTEgKyB0bXAxMiwgLSBGSVgoMS44MDA4MjQ1MjMpKTsgLyogLWMxICovCi0gICAgdG1wMSArPSB0bXAyOwotICAgIHRtcDMgPSBNVUxUSVBMWSh0bXAxMCArIHRtcDEyLCBGSVgoMC44MDE0NDIzMTApKTsgICAvKiBjNSAqLwotICAgIHRtcDAgKz0gdG1wMzsKLSAgICB0bXAyICs9IHRtcDMgKyBNVUxUSVBMWSh0bXAxMiwgRklYKDIuNDQzNTMxMzU1KSk7ICAgLyogYzMrYzEtYzUgKi8KLQotICAgIGRhdGFwdHJbRENUU0laRSoxXSA9IChEQ1RFTEVNKSBERVNDQUxFKHRtcDAsIENPTlNUX0JJVFMrUEFTUzFfQklUUysxKTsKLSAgICBkYXRhcHRyW0RDVFNJWkUqM10gPSAoRENURUxFTSkgREVTQ0FMRSh0bXAxLCBDT05TVF9CSVRTK1BBU1MxX0JJVFMrMSk7Ci0gICAgZGF0YXB0cltEQ1RTSVpFKjVdID0gKERDVEVMRU0pIERFU0NBTEUodG1wMiwgQ09OU1RfQklUUytQQVNTMV9CSVRTKzEpOwotCi0gICAgZGF0YXB0cisrOwkJCS8qIGFkdmFuY2UgcG9pbnRlciB0byBuZXh0IGNvbHVtbiAqLwotICB9Ci19Ci0KLQotLyoKLSAqIFBlcmZvcm0gdGhlIGZvcndhcmQgRENUIG9uIGEgMTJ4NiBzYW1wbGUgYmxvY2suCi0gKgotICogMTItcG9pbnQgRkRDVCBpbiBwYXNzIDEgKHJvd3MpLCA2LXBvaW50IGluIHBhc3MgMiAoY29sdW1ucykuCi0gKi8KLQotR0xPQkFMKHZvaWQpCi1qcGVnX2ZkY3RfMTJ4NiAoRENURUxFTSAqIGRhdGEsIEpTQU1QQVJSQVkgc2FtcGxlX2RhdGEsIEpESU1FTlNJT04gc3RhcnRfY29sKQotewotICBJTlQzMiB0bXAwLCB0bXAxLCB0bXAyLCB0bXAzLCB0bXA0LCB0bXA1OwotICBJTlQzMiB0bXAxMCwgdG1wMTEsIHRtcDEyLCB0bXAxMywgdG1wMTQsIHRtcDE1OwotICBEQ1RFTEVNICpkYXRhcHRyOwotICBKU0FNUFJPVyBlbGVtcHRyOwotICBpbnQgY3RyOwotICBTSElGVF9URU1QUwotCi0gIC8qIFplcm8gMiBib3R0b20gcm93cyBvZiBvdXRwdXQgY29lZmZpY2llbnQgYmxvY2suICovCi0gIE1FTVpFUk8oJmRhdGFbRENUU0laRSo2XSwgU0laRU9GKERDVEVMRU0pICogRENUU0laRSAqIDIpOwotCi0gIC8qIFBhc3MgMTogcHJvY2VzcyByb3dzLiAqLwotICAvKiBOb3RlIHJlc3VsdHMgYXJlIHNjYWxlZCB1cCBieSBzcXJ0KDgpIGNvbXBhcmVkIHRvIGEgdHJ1ZSBEQ1Q7ICovCi0gIC8qIGZ1cnRoZXJtb3JlLCB3ZSBzY2FsZSB0aGUgcmVzdWx0cyBieSAyKipQQVNTMV9CSVRTLiAqLwotICAvKiAxMi1wb2ludCBGRENUIGtlcm5lbCwgY0sgcmVwcmVzZW50cyBzcXJ0KDIpICogY29zKEsqcGkvMjQpLiAqLwotCi0gIGRhdGFwdHIgPSBkYXRhOwotICBmb3IgKGN0ciA9IDA7IGN0ciA8IDY7IGN0cisrKSB7Ci0gICAgZWxlbXB0ciA9IHNhbXBsZV9kYXRhW2N0cl0gKyBzdGFydF9jb2w7Ci0KLSAgICAvKiBFdmVuIHBhcnQgKi8KLQotICAgIHRtcDAgPSBHRVRKU0FNUExFKGVsZW1wdHJbMF0pICsgR0VUSlNBTVBMRShlbGVtcHRyWzExXSk7Ci0gICAgdG1wMSA9IEdFVEpTQU1QTEUoZWxlbXB0clsxXSkgKyBHRVRKU0FNUExFKGVsZW1wdHJbMTBdKTsKLSAgICB0bXAyID0gR0VUSlNBTVBMRShlbGVtcHRyWzJdKSArIEdFVEpTQU1QTEUoZWxlbXB0cls5XSk7Ci0gICAgdG1wMyA9IEdFVEpTQU1QTEUoZWxlbXB0clszXSkgKyBHRVRKU0FNUExFKGVsZW1wdHJbOF0pOwotICAgIHRtcDQgPSBHRVRKU0FNUExFKGVsZW1wdHJbNF0pICsgR0VUSlNBTVBMRShlbGVtcHRyWzddKTsKLSAgICB0bXA1ID0gR0VUSlNBTVBMRShlbGVtcHRyWzVdKSArIEdFVEpTQU1QTEUoZWxlbXB0cls2XSk7Ci0KLSAgICB0bXAxMCA9IHRtcDAgKyB0bXA1OwotICAgIHRtcDEzID0gdG1wMCAtIHRtcDU7Ci0gICAgdG1wMTEgPSB0bXAxICsgdG1wNDsKLSAgICB0bXAxNCA9IHRtcDEgLSB0bXA0OwotICAgIHRtcDEyID0gdG1wMiArIHRtcDM7Ci0gICAgdG1wMTUgPSB0bXAyIC0gdG1wMzsKLQotICAgIHRtcDAgPSBHRVRKU0FNUExFKGVsZW1wdHJbMF0pIC0gR0VUSlNBTVBMRShlbGVtcHRyWzExXSk7Ci0gICAgdG1wMSA9IEdFVEpTQU1QTEUoZWxlbXB0clsxXSkgLSBHRVRKU0FNUExFKGVsZW1wdHJbMTBdKTsKLSAgICB0bXAyID0gR0VUSlNBTVBMRShlbGVtcHRyWzJdKSAtIEdFVEpTQU1QTEUoZWxlbXB0cls5XSk7Ci0gICAgdG1wMyA9IEdFVEpTQU1QTEUoZWxlbXB0clszXSkgLSBHRVRKU0FNUExFKGVsZW1wdHJbOF0pOwotICAgIHRtcDQgPSBHRVRKU0FNUExFKGVsZW1wdHJbNF0pIC0gR0VUSlNBTVBMRShlbGVtcHRyWzddKTsKLSAgICB0bXA1ID0gR0VUSlNBTVBMRShlbGVtcHRyWzVdKSAtIEdFVEpTQU1QTEUoZWxlbXB0cls2XSk7Ci0KLSAgICAvKiBBcHBseSB1bnNpZ25lZC0+c2lnbmVkIGNvbnZlcnNpb24gKi8KLSAgICBkYXRhcHRyWzBdID0gKERDVEVMRU0pCi0gICAgICAoKHRtcDEwICsgdG1wMTEgKyB0bXAxMiAtIDEyICogQ0VOVEVSSlNBTVBMRSkgPDwgUEFTUzFfQklUUyk7Ci0gICAgZGF0YXB0cls2XSA9IChEQ1RFTEVNKSAoKHRtcDEzIC0gdG1wMTQgLSB0bXAxNSkgPDwgUEFTUzFfQklUUyk7Ci0gICAgZGF0YXB0cls0XSA9IChEQ1RFTEVNKQotICAgICAgREVTQ0FMRShNVUxUSVBMWSh0bXAxMCAtIHRtcDEyLCBGSVgoMS4yMjQ3NDQ4NzEpKSwgLyogYzQgKi8KLQkgICAgICBDT05TVF9CSVRTLVBBU1MxX0JJVFMpOwotICAgIGRhdGFwdHJbMl0gPSAoRENURUxFTSkKLSAgICAgIERFU0NBTEUodG1wMTQgLSB0bXAxNSArIE1VTFRJUExZKHRtcDEzICsgdG1wMTUsIEZJWCgxLjM2NjAyNTQwNCkpLCAvKiBjMiAqLwotCSAgICAgIENPTlNUX0JJVFMtUEFTUzFfQklUUyk7Ci0KLSAgICAvKiBPZGQgcGFydCAqLwotCi0gICAgdG1wMTAgPSBNVUxUSVBMWSh0bXAxICsgdG1wNCwgRklYXzBfNTQxMTk2MTAwKTsgICAgLyogYzkgKi8KLSAgICB0bXAxNCA9IHRtcDEwICsgTVVMVElQTFkodG1wMSwgRklYXzBfNzY1MzY2ODY1KTsgICAvKiBjMy1jOSAqLwotICAgIHRtcDE1ID0gdG1wMTAgLSBNVUxUSVBMWSh0bXA0LCBGSVhfMV84NDc3NTkwNjUpOyAgIC8qIGMzK2M5ICovCi0gICAgdG1wMTIgPSBNVUxUSVBMWSh0bXAwICsgdG1wMiwgRklYKDEuMTIxOTcxMDU0KSk7ICAgLyogYzUgKi8KLSAgICB0bXAxMyA9IE1VTFRJUExZKHRtcDAgKyB0bXAzLCBGSVgoMC44NjA5MTg2NjkpKTsgICAvKiBjNyAqLwotICAgIHRtcDEwID0gdG1wMTIgKyB0bXAxMyArIHRtcDE0IC0gTVVMVElQTFkodG1wMCwgRklYKDAuNTgwNzc0OTUzKSkgLyogYzUrYzctYzEgKi8KLQkgICAgKyBNVUxUSVBMWSh0bXA1LCBGSVgoMC4xODQ1OTE5MTEpKTsgICAgICAgIC8qIGMxMSAqLwotICAgIHRtcDExID0gTVVMVElQTFkodG1wMiArIHRtcDMsIC0gRklYKDAuMTg0NTkxOTExKSk7IC8qIC1jMTEgKi8KLSAgICB0bXAxMiArPSB0bXAxMSAtIHRtcDE1IC0gTVVMVElQTFkodG1wMiwgRklYKDIuMzM5NDkzOTEyKSkgLyogYzErYzUtYzExICovCi0JICAgICsgTVVMVElQTFkodG1wNSwgRklYKDAuODYwOTE4NjY5KSk7ICAgICAgICAvKiBjNyAqLwotICAgIHRtcDEzICs9IHRtcDExIC0gdG1wMTQgKyBNVUxUSVBMWSh0bXAzLCBGSVgoMC43MjU3ODgwMTEpKSAvKiBjMStjMTEtYzcgKi8KLQkgICAgLSBNVUxUSVBMWSh0bXA1LCBGSVgoMS4xMjE5NzEwNTQpKTsgICAgICAgIC8qIGM1ICovCi0gICAgdG1wMTEgPSB0bXAxNSArIE1VTFRJUExZKHRtcDAgLSB0bXAzLCBGSVgoMS4zMDY1NjI5NjUpKSAvKiBjMyAqLwotCSAgICAtIE1VTFRJUExZKHRtcDIgKyB0bXA1LCBGSVhfMF81NDExOTYxMDApOyAgLyogYzkgKi8KLQotICAgIGRhdGFwdHJbMV0gPSAoRENURUxFTSkgREVTQ0FMRSh0bXAxMCwgQ09OU1RfQklUUy1QQVNTMV9CSVRTKTsKLSAgICBkYXRhcHRyWzNdID0gKERDVEVMRU0pIERFU0NBTEUodG1wMTEsIENPTlNUX0JJVFMtUEFTUzFfQklUUyk7Ci0gICAgZGF0YXB0cls1XSA9IChEQ1RFTEVNKSBERVNDQUxFKHRtcDEyLCBDT05TVF9CSVRTLVBBU1MxX0JJVFMpOwotICAgIGRhdGFwdHJbN10gPSAoRENURUxFTSkgREVTQ0FMRSh0bXAxMywgQ09OU1RfQklUUy1QQVNTMV9CSVRTKTsKLQotICAgIGRhdGFwdHIgKz0gRENUU0laRTsJCS8qIGFkdmFuY2UgcG9pbnRlciB0byBuZXh0IHJvdyAqLwotICB9Ci0KLSAgLyogUGFzcyAyOiBwcm9jZXNzIGNvbHVtbnMuCi0gICAqIFdlIHJlbW92ZSB0aGUgUEFTUzFfQklUUyBzY2FsaW5nLCBidXQgbGVhdmUgdGhlIHJlc3VsdHMgc2NhbGVkIHVwCi0gICAqIGJ5IGFuIG92ZXJhbGwgZmFjdG9yIG9mIDguCi0gICAqIFdlIG11c3QgYWxzbyBzY2FsZSB0aGUgb3V0cHV0IGJ5ICg4LzEyKSooOC82KSA9IDgvOSwgd2hpY2ggd2UKLSAgICogcGFydGlhbGx5IGZvbGQgaW50byB0aGUgY29uc3RhbnQgbXVsdGlwbGllcnMgYW5kIGZpbmFsIHNoaWZ0aW5nOgotICAgKiA2LXBvaW50IEZEQ1Qga2VybmVsLCBjSyByZXByZXNlbnRzIHNxcnQoMikgKiBjb3MoSypwaS8xMikgKiAxNi85LgotICAgKi8KLQotICBkYXRhcHRyID0gZGF0YTsKLSAgZm9yIChjdHIgPSBEQ1RTSVpFLTE7IGN0ciA+PSAwOyBjdHItLSkgewotICAgIC8qIEV2ZW4gcGFydCAqLwotCi0gICAgdG1wMCA9IGRhdGFwdHJbRENUU0laRSowXSArIGRhdGFwdHJbRENUU0laRSo1XTsKLSAgICB0bXAxMSA9IGRhdGFwdHJbRENUU0laRSoxXSArIGRhdGFwdHJbRENUU0laRSo0XTsKLSAgICB0bXAyID0gZGF0YXB0cltEQ1RTSVpFKjJdICsgZGF0YXB0cltEQ1RTSVpFKjNdOwotCi0gICAgdG1wMTAgPSB0bXAwICsgdG1wMjsKLSAgICB0bXAxMiA9IHRtcDAgLSB0bXAyOwotCi0gICAgdG1wMCA9IGRhdGFwdHJbRENUU0laRSowXSAtIGRhdGFwdHJbRENUU0laRSo1XTsKLSAgICB0bXAxID0gZGF0YXB0cltEQ1RTSVpFKjFdIC0gZGF0YXB0cltEQ1RTSVpFKjRdOwotICAgIHRtcDIgPSBkYXRhcHRyW0RDVFNJWkUqMl0gLSBkYXRhcHRyW0RDVFNJWkUqM107Ci0KLSAgICBkYXRhcHRyW0RDVFNJWkUqMF0gPSAoRENURUxFTSkKLSAgICAgIERFU0NBTEUoTVVMVElQTFkodG1wMTAgKyB0bXAxMSwgRklYKDEuNzc3Nzc3Nzc4KSksICAgICAgICAgLyogMTYvOSAqLwotCSAgICAgIENPTlNUX0JJVFMrUEFTUzFfQklUUysxKTsKLSAgICBkYXRhcHRyW0RDVFNJWkUqMl0gPSAoRENURUxFTSkKLSAgICAgIERFU0NBTEUoTVVMVElQTFkodG1wMTIsIEZJWCgyLjE3NzMyNDIxNikpLCAgICAgICAgICAgICAgICAgLyogYzIgKi8KLQkgICAgICBDT05TVF9CSVRTK1BBU1MxX0JJVFMrMSk7Ci0gICAgZGF0YXB0cltEQ1RTSVpFKjRdID0gKERDVEVMRU0pCi0gICAgICBERVNDQUxFKE1VTFRJUExZKHRtcDEwIC0gdG1wMTEgLSB0bXAxMSwgRklYKDEuMjU3MDc4NzIyKSksIC8qIGM0ICovCi0JICAgICAgQ09OU1RfQklUUytQQVNTMV9CSVRTKzEpOwotCi0gICAgLyogT2RkIHBhcnQgKi8KLQotICAgIHRtcDEwID0gTVVMVElQTFkodG1wMCArIHRtcDIsIEZJWCgwLjY1MDcxMTgyOSkpOyAgICAgICAgICAgICAvKiBjNSAqLwotCi0gICAgZGF0YXB0cltEQ1RTSVpFKjFdID0gKERDVEVMRU0pCi0gICAgICBERVNDQUxFKHRtcDEwICsgTVVMVElQTFkodG1wMCArIHRtcDEsIEZJWCgxLjc3Nzc3Nzc3OCkpLCAgIC8qIDE2LzkgKi8KLQkgICAgICBDT05TVF9CSVRTK1BBU1MxX0JJVFMrMSk7Ci0gICAgZGF0YXB0cltEQ1RTSVpFKjNdID0gKERDVEVMRU0pCi0gICAgICBERVNDQUxFKE1VTFRJUExZKHRtcDAgLSB0bXAxIC0gdG1wMiwgRklYKDEuNzc3Nzc3Nzc4KSksICAgIC8qIDE2LzkgKi8KLQkgICAgICBDT05TVF9CSVRTK1BBU1MxX0JJVFMrMSk7Ci0gICAgZGF0YXB0cltEQ1RTSVpFKjVdID0gKERDVEVMRU0pCi0gICAgICBERVNDQUxFKHRtcDEwICsgTVVMVElQTFkodG1wMiAtIHRtcDEsIEZJWCgxLjc3Nzc3Nzc3OCkpLCAgIC8qIDE2LzkgKi8KLQkgICAgICBDT05TVF9CSVRTK1BBU1MxX0JJVFMrMSk7Ci0KLSAgICBkYXRhcHRyKys7CQkJLyogYWR2YW5jZSBwb2ludGVyIHRvIG5leHQgY29sdW1uICovCi0gIH0KLX0KLQotCi0vKgotICogUGVyZm9ybSB0aGUgZm9yd2FyZCBEQ1Qgb24gYSAxMHg1IHNhbXBsZSBibG9jay4KLSAqCi0gKiAxMC1wb2ludCBGRENUIGluIHBhc3MgMSAocm93cyksIDUtcG9pbnQgaW4gcGFzcyAyIChjb2x1bW5zKS4KLSAqLwotCi1HTE9CQUwodm9pZCkKLWpwZWdfZmRjdF8xMHg1IChEQ1RFTEVNICogZGF0YSwgSlNBTVBBUlJBWSBzYW1wbGVfZGF0YSwgSkRJTUVOU0lPTiBzdGFydF9jb2wpCi17Ci0gIElOVDMyIHRtcDAsIHRtcDEsIHRtcDIsIHRtcDMsIHRtcDQ7Ci0gIElOVDMyIHRtcDEwLCB0bXAxMSwgdG1wMTIsIHRtcDEzLCB0bXAxNDsKLSAgRENURUxFTSAqZGF0YXB0cjsKLSAgSlNBTVBST1cgZWxlbXB0cjsKLSAgaW50IGN0cjsKLSAgU0hJRlRfVEVNUFMKLQotICAvKiBaZXJvIDMgYm90dG9tIHJvd3Mgb2Ygb3V0cHV0IGNvZWZmaWNpZW50IGJsb2NrLiAqLwotICBNRU1aRVJPKCZkYXRhW0RDVFNJWkUqNV0sIFNJWkVPRihEQ1RFTEVNKSAqIERDVFNJWkUgKiAzKTsKLQotICAvKiBQYXNzIDE6IHByb2Nlc3Mgcm93cy4gKi8KLSAgLyogTm90ZSByZXN1bHRzIGFyZSBzY2FsZWQgdXAgYnkgc3FydCg4KSBjb21wYXJlZCB0byBhIHRydWUgRENUOyAqLwotICAvKiBmdXJ0aGVybW9yZSwgd2Ugc2NhbGUgdGhlIHJlc3VsdHMgYnkgMioqUEFTUzFfQklUUy4gKi8KLSAgLyogMTAtcG9pbnQgRkRDVCBrZXJuZWwsIGNLIHJlcHJlc2VudHMgc3FydCgyKSAqIGNvcyhLKnBpLzIwKS4gKi8KLQotICBkYXRhcHRyID0gZGF0YTsKLSAgZm9yIChjdHIgPSAwOyBjdHIgPCA1OyBjdHIrKykgewotICAgIGVsZW1wdHIgPSBzYW1wbGVfZGF0YVtjdHJdICsgc3RhcnRfY29sOwotCi0gICAgLyogRXZlbiBwYXJ0ICovCi0KLSAgICB0bXAwID0gR0VUSlNBTVBMRShlbGVtcHRyWzBdKSArIEdFVEpTQU1QTEUoZWxlbXB0cls5XSk7Ci0gICAgdG1wMSA9IEdFVEpTQU1QTEUoZWxlbXB0clsxXSkgKyBHRVRKU0FNUExFKGVsZW1wdHJbOF0pOwotICAgIHRtcDEyID0gR0VUSlNBTVBMRShlbGVtcHRyWzJdKSArIEdFVEpTQU1QTEUoZWxlbXB0cls3XSk7Ci0gICAgdG1wMyA9IEdFVEpTQU1QTEUoZWxlbXB0clszXSkgKyBHRVRKU0FNUExFKGVsZW1wdHJbNl0pOwotICAgIHRtcDQgPSBHRVRKU0FNUExFKGVsZW1wdHJbNF0pICsgR0VUSlNBTVBMRShlbGVtcHRyWzVdKTsKLQotICAgIHRtcDEwID0gdG1wMCArIHRtcDQ7Ci0gICAgdG1wMTMgPSB0bXAwIC0gdG1wNDsKLSAgICB0bXAxMSA9IHRtcDEgKyB0bXAzOwotICAgIHRtcDE0ID0gdG1wMSAtIHRtcDM7Ci0KLSAgICB0bXAwID0gR0VUSlNBTVBMRShlbGVtcHRyWzBdKSAtIEdFVEpTQU1QTEUoZWxlbXB0cls5XSk7Ci0gICAgdG1wMSA9IEdFVEpTQU1QTEUoZWxlbXB0clsxXSkgLSBHRVRKU0FNUExFKGVsZW1wdHJbOF0pOwotICAgIHRtcDIgPSBHRVRKU0FNUExFKGVsZW1wdHJbMl0pIC0gR0VUSlNBTVBMRShlbGVtcHRyWzddKTsKLSAgICB0bXAzID0gR0VUSlNBTVBMRShlbGVtcHRyWzNdKSAtIEdFVEpTQU1QTEUoZWxlbXB0cls2XSk7Ci0gICAgdG1wNCA9IEdFVEpTQU1QTEUoZWxlbXB0cls0XSkgLSBHRVRKU0FNUExFKGVsZW1wdHJbNV0pOwotCi0gICAgLyogQXBwbHkgdW5zaWduZWQtPnNpZ25lZCBjb252ZXJzaW9uICovCi0gICAgZGF0YXB0clswXSA9IChEQ1RFTEVNKQotICAgICAgKCh0bXAxMCArIHRtcDExICsgdG1wMTIgLSAxMCAqIENFTlRFUkpTQU1QTEUpIDw8IFBBU1MxX0JJVFMpOwotICAgIHRtcDEyICs9IHRtcDEyOwotICAgIGRhdGFwdHJbNF0gPSAoRENURUxFTSkKLSAgICAgIERFU0NBTEUoTVVMVElQTFkodG1wMTAgLSB0bXAxMiwgRklYKDEuMTQ0MTIyODA2KSkgLSAvKiBjNCAqLwotCSAgICAgIE1VTFRJUExZKHRtcDExIC0gdG1wMTIsIEZJWCgwLjQzNzAxNjAyNCkpLCAgLyogYzggKi8KLQkgICAgICBDT05TVF9CSVRTLVBBU1MxX0JJVFMpOwotICAgIHRtcDEwID0gTVVMVElQTFkodG1wMTMgKyB0bXAxNCwgRklYKDAuODMxMjUzODc2KSk7ICAgIC8qIGM2ICovCi0gICAgZGF0YXB0clsyXSA9IChEQ1RFTEVNKQotICAgICAgREVTQ0FMRSh0bXAxMCArIE1VTFRJUExZKHRtcDEzLCBGSVgoMC41MTM3NDMxNDgpKSwgIC8qIGMyLWM2ICovCi0JICAgICAgQ09OU1RfQklUUy1QQVNTMV9CSVRTKTsKLSAgICBkYXRhcHRyWzZdID0gKERDVEVMRU0pCi0gICAgICBERVNDQUxFKHRtcDEwIC0gTVVMVElQTFkodG1wMTQsIEZJWCgyLjE3NjI1MDg5OSkpLCAgLyogYzIrYzYgKi8KLQkgICAgICBDT05TVF9CSVRTLVBBU1MxX0JJVFMpOwotCi0gICAgLyogT2RkIHBhcnQgKi8KLQotICAgIHRtcDEwID0gdG1wMCArIHRtcDQ7Ci0gICAgdG1wMTEgPSB0bXAxIC0gdG1wMzsKLSAgICBkYXRhcHRyWzVdID0gKERDVEVMRU0pICgodG1wMTAgLSB0bXAxMSAtIHRtcDIpIDw8IFBBU1MxX0JJVFMpOwotICAgIHRtcDIgPDw9IENPTlNUX0JJVFM7Ci0gICAgZGF0YXB0clsxXSA9IChEQ1RFTEVNKQotICAgICAgREVTQ0FMRShNVUxUSVBMWSh0bXAwLCBGSVgoMS4zOTY4MDIyNDcpKSArICAgICAgICAgIC8qIGMxICovCi0JICAgICAgTVVMVElQTFkodG1wMSwgRklYKDEuMjYwMDczNTExKSkgKyB0bXAyICsgICAvKiBjMyAqLwotCSAgICAgIE1VTFRJUExZKHRtcDMsIEZJWCgwLjY0MjAzOTUyMikpICsgICAgICAgICAgLyogYzcgKi8KLQkgICAgICBNVUxUSVBMWSh0bXA0LCBGSVgoMC4yMjEyMzE3NDIpKSwgICAgICAgICAgIC8qIGM5ICovCi0JICAgICAgQ09OU1RfQklUUy1QQVNTMV9CSVRTKTsKLSAgICB0bXAxMiA9IE1VTFRJUExZKHRtcDAgLSB0bXA0LCBGSVgoMC45NTEwNTY1MTYpKSAtICAgICAvKiAoYzMrYzcpLzIgKi8KLQkgICAgTVVMVElQTFkodG1wMSArIHRtcDMsIEZJWCgwLjU4Nzc4NTI1MikpOyAgICAgIC8qIChjMS1jOSkvMiAqLwotICAgIHRtcDEzID0gTVVMVElQTFkodG1wMTAgKyB0bXAxMSwgRklYKDAuMzA5MDE2OTk0KSkgKyAgIC8qIChjMy1jNykvMiAqLwotCSAgICAodG1wMTEgPDwgKENPTlNUX0JJVFMgLSAxKSkgLSB0bXAyOwotICAgIGRhdGFwdHJbM10gPSAoRENURUxFTSkgREVTQ0FMRSh0bXAxMiArIHRtcDEzLCBDT05TVF9CSVRTLVBBU1MxX0JJVFMpOwotICAgIGRhdGFwdHJbN10gPSAoRENURUxFTSkgREVTQ0FMRSh0bXAxMiAtIHRtcDEzLCBDT05TVF9CSVRTLVBBU1MxX0JJVFMpOwotCi0gICAgZGF0YXB0ciArPSBEQ1RTSVpFOwkJLyogYWR2YW5jZSBwb2ludGVyIHRvIG5leHQgcm93ICovCi0gIH0KLQotICAvKiBQYXNzIDI6IHByb2Nlc3MgY29sdW1ucy4KLSAgICogV2UgcmVtb3ZlIHRoZSBQQVNTMV9CSVRTIHNjYWxpbmcsIGJ1dCBsZWF2ZSB0aGUgcmVzdWx0cyBzY2FsZWQgdXAKLSAgICogYnkgYW4gb3ZlcmFsbCBmYWN0b3Igb2YgOC4KLSAgICogV2UgbXVzdCBhbHNvIHNjYWxlIHRoZSBvdXRwdXQgYnkgKDgvMTApKig4LzUpID0gMzIvMjUsIHdoaWNoIHdlCi0gICAqIGZvbGQgaW50byB0aGUgY29uc3RhbnQgbXVsdGlwbGllcnM6Ci0gICAqIDUtcG9pbnQgRkRDVCBrZXJuZWwsIGNLIHJlcHJlc2VudHMgc3FydCgyKSAqIGNvcyhLKnBpLzEwKSAqIDMyLzI1LgotICAgKi8KLQotICBkYXRhcHRyID0gZGF0YTsKLSAgZm9yIChjdHIgPSBEQ1RTSVpFLTE7IGN0ciA+PSAwOyBjdHItLSkgewotICAgIC8qIEV2ZW4gcGFydCAqLwotCi0gICAgdG1wMCA9IGRhdGFwdHJbRENUU0laRSowXSArIGRhdGFwdHJbRENUU0laRSo0XTsKLSAgICB0bXAxID0gZGF0YXB0cltEQ1RTSVpFKjFdICsgZGF0YXB0cltEQ1RTSVpFKjNdOwotICAgIHRtcDIgPSBkYXRhcHRyW0RDVFNJWkUqMl07Ci0KLSAgICB0bXAxMCA9IHRtcDAgKyB0bXAxOwotICAgIHRtcDExID0gdG1wMCAtIHRtcDE7Ci0KLSAgICB0bXAwID0gZGF0YXB0cltEQ1RTSVpFKjBdIC0gZGF0YXB0cltEQ1RTSVpFKjRdOwotICAgIHRtcDEgPSBkYXRhcHRyW0RDVFNJWkUqMV0gLSBkYXRhcHRyW0RDVFNJWkUqM107Ci0KLSAgICBkYXRhcHRyW0RDVFNJWkUqMF0gPSAoRENURUxFTSkKLSAgICAgIERFU0NBTEUoTVVMVElQTFkodG1wMTAgKyB0bXAyLCBGSVgoMS4yOCkpLCAgICAgICAgLyogMzIvMjUgKi8KLQkgICAgICBDT05TVF9CSVRTK1BBU1MxX0JJVFMpOwotICAgIHRtcDExID0gTVVMVElQTFkodG1wMTEsIEZJWCgxLjAxMTkyODg1MSkpOyAgICAgICAgICAvKiAoYzIrYzQpLzIgKi8KLSAgICB0bXAxMCAtPSB0bXAyIDw8IDI7Ci0gICAgdG1wMTAgPSBNVUxUSVBMWSh0bXAxMCwgRklYKDAuNDUyNTQ4MzQwKSk7ICAgICAgICAgIC8qIChjMi1jNCkvMiAqLwotICAgIGRhdGFwdHJbRENUU0laRSoyXSA9IChEQ1RFTEVNKSBERVNDQUxFKHRtcDExICsgdG1wMTAsIENPTlNUX0JJVFMrUEFTUzFfQklUUyk7Ci0gICAgZGF0YXB0cltEQ1RTSVpFKjRdID0gKERDVEVMRU0pIERFU0NBTEUodG1wMTEgLSB0bXAxMCwgQ09OU1RfQklUUytQQVNTMV9CSVRTKTsKLQotICAgIC8qIE9kZCBwYXJ0ICovCi0KLSAgICB0bXAxMCA9IE1VTFRJUExZKHRtcDAgKyB0bXAxLCBGSVgoMS4wNjQwMDQ5NjEpKTsgICAgLyogYzMgKi8KLQotICAgIGRhdGFwdHJbRENUU0laRSoxXSA9IChEQ1RFTEVNKQotICAgICAgREVTQ0FMRSh0bXAxMCArIE1VTFRJUExZKHRtcDAsIEZJWCgwLjY1NzU5MTIzMCkpLCAvKiBjMS1jMyAqLwotCSAgICAgIENPTlNUX0JJVFMrUEFTUzFfQklUUyk7Ci0gICAgZGF0YXB0cltEQ1RTSVpFKjNdID0gKERDVEVMRU0pCi0gICAgICBERVNDQUxFKHRtcDEwIC0gTVVMVElQTFkodG1wMSwgRklYKDIuNzg1NjAxMTUxKSksIC8qIGMxK2MzICovCi0JICAgICAgQ09OU1RfQklUUytQQVNTMV9CSVRTKTsKLQotICAgIGRhdGFwdHIrKzsJCQkvKiBhZHZhbmNlIHBvaW50ZXIgdG8gbmV4dCBjb2x1bW4gKi8KLSAgfQotfQotCi0KLS8qCi0gKiBQZXJmb3JtIHRoZSBmb3J3YXJkIERDVCBvbiBhbiA4eDQgc2FtcGxlIGJsb2NrLgotICoKLSAqIDgtcG9pbnQgRkRDVCBpbiBwYXNzIDEgKHJvd3MpLCA0LXBvaW50IGluIHBhc3MgMiAoY29sdW1ucykuCi0gKi8KLQotR0xPQkFMKHZvaWQpCi1qcGVnX2ZkY3RfOHg0IChEQ1RFTEVNICogZGF0YSwgSlNBTVBBUlJBWSBzYW1wbGVfZGF0YSwgSkRJTUVOU0lPTiBzdGFydF9jb2wpCi17Ci0gIElOVDMyIHRtcDAsIHRtcDEsIHRtcDIsIHRtcDM7Ci0gIElOVDMyIHRtcDEwLCB0bXAxMSwgdG1wMTIsIHRtcDEzOwotICBJTlQzMiB6MTsKLSAgRENURUxFTSAqZGF0YXB0cjsKLSAgSlNBTVBST1cgZWxlbXB0cjsKLSAgaW50IGN0cjsKLSAgU0hJRlRfVEVNUFMKLQotICAvKiBaZXJvIDQgYm90dG9tIHJvd3Mgb2Ygb3V0cHV0IGNvZWZmaWNpZW50IGJsb2NrLiAqLwotICBNRU1aRVJPKCZkYXRhW0RDVFNJWkUqNF0sIFNJWkVPRihEQ1RFTEVNKSAqIERDVFNJWkUgKiA0KTsKLQotICAvKiBQYXNzIDE6IHByb2Nlc3Mgcm93cy4gKi8KLSAgLyogTm90ZSByZXN1bHRzIGFyZSBzY2FsZWQgdXAgYnkgc3FydCg4KSBjb21wYXJlZCB0byBhIHRydWUgRENUOyAqLwotICAvKiBmdXJ0aGVybW9yZSwgd2Ugc2NhbGUgdGhlIHJlc3VsdHMgYnkgMioqUEFTUzFfQklUUy4gKi8KLSAgLyogV2UgbXVzdCBhbHNvIHNjYWxlIHRoZSBvdXRwdXQgYnkgOC80ID0gMiwgd2hpY2ggd2UgYWRkIGhlcmUuICovCi0KLSAgZGF0YXB0ciA9IGRhdGE7Ci0gIGZvciAoY3RyID0gMDsgY3RyIDwgNDsgY3RyKyspIHsKLSAgICBlbGVtcHRyID0gc2FtcGxlX2RhdGFbY3RyXSArIHN0YXJ0X2NvbDsKLQotICAgIC8qIEV2ZW4gcGFydCBwZXIgTEwmTSBmaWd1cmUgMSAtLS0gbm90ZSB0aGF0IHB1Ymxpc2hlZCBmaWd1cmUgaXMgZmF1bHR5OwotICAgICAqIHJvdGF0b3IgInNxcnQoMikqYzEiIHNob3VsZCBiZSAic3FydCgyKSpjNiIuCi0gICAgICovCi0KLSAgICB0bXAwID0gR0VUSlNBTVBMRShlbGVtcHRyWzBdKSArIEdFVEpTQU1QTEUoZWxlbXB0cls3XSk7Ci0gICAgdG1wMSA9IEdFVEpTQU1QTEUoZWxlbXB0clsxXSkgKyBHRVRKU0FNUExFKGVsZW1wdHJbNl0pOwotICAgIHRtcDIgPSBHRVRKU0FNUExFKGVsZW1wdHJbMl0pICsgR0VUSlNBTVBMRShlbGVtcHRyWzVdKTsKLSAgICB0bXAzID0gR0VUSlNBTVBMRShlbGVtcHRyWzNdKSArIEdFVEpTQU1QTEUoZWxlbXB0cls0XSk7Ci0KLSAgICB0bXAxMCA9IHRtcDAgKyB0bXAzOwotICAgIHRtcDEyID0gdG1wMCAtIHRtcDM7Ci0gICAgdG1wMTEgPSB0bXAxICsgdG1wMjsKLSAgICB0bXAxMyA9IHRtcDEgLSB0bXAyOwotCi0gICAgdG1wMCA9IEdFVEpTQU1QTEUoZWxlbXB0clswXSkgLSBHRVRKU0FNUExFKGVsZW1wdHJbN10pOwotICAgIHRtcDEgPSBHRVRKU0FNUExFKGVsZW1wdHJbMV0pIC0gR0VUSlNBTVBMRShlbGVtcHRyWzZdKTsKLSAgICB0bXAyID0gR0VUSlNBTVBMRShlbGVtcHRyWzJdKSAtIEdFVEpTQU1QTEUoZWxlbXB0cls1XSk7Ci0gICAgdG1wMyA9IEdFVEpTQU1QTEUoZWxlbXB0clszXSkgLSBHRVRKU0FNUExFKGVsZW1wdHJbNF0pOwotCi0gICAgLyogQXBwbHkgdW5zaWduZWQtPnNpZ25lZCBjb252ZXJzaW9uICovCi0gICAgZGF0YXB0clswXSA9IChEQ1RFTEVNKQotICAgICAgKCh0bXAxMCArIHRtcDExIC0gOCAqIENFTlRFUkpTQU1QTEUpIDw8IChQQVNTMV9CSVRTKzEpKTsKLSAgICBkYXRhcHRyWzRdID0gKERDVEVMRU0pICgodG1wMTAgLSB0bXAxMSkgPDwgKFBBU1MxX0JJVFMrMSkpOwotCi0gICAgejEgPSBNVUxUSVBMWSh0bXAxMiArIHRtcDEzLCBGSVhfMF81NDExOTYxMDApOwotICAgIC8qIEFkZCBmdWRnZSBmYWN0b3IgaGVyZSBmb3IgZmluYWwgZGVzY2FsZS4gKi8KLSAgICB6MSArPSBPTkUgPDwgKENPTlNUX0JJVFMtUEFTUzFfQklUUy0yKTsKLSAgICBkYXRhcHRyWzJdID0gKERDVEVMRU0pIFJJR0hUX1NISUZUKHoxICsgTVVMVElQTFkodG1wMTIsIEZJWF8wXzc2NTM2Njg2NSksCi0JCQkJICAgICAgIENPTlNUX0JJVFMtUEFTUzFfQklUUy0xKTsKLSAgICBkYXRhcHRyWzZdID0gKERDVEVMRU0pIFJJR0hUX1NISUZUKHoxIC0gTVVMVElQTFkodG1wMTMsIEZJWF8xXzg0Nzc1OTA2NSksCi0JCQkJICAgICAgIENPTlNUX0JJVFMtUEFTUzFfQklUUy0xKTsKLQotICAgIC8qIE9kZCBwYXJ0IHBlciBmaWd1cmUgOCAtLS0gbm90ZSBwYXBlciBvbWl0cyBmYWN0b3Igb2Ygc3FydCgyKS4KLSAgICAgKiA4LXBvaW50IEZEQ1Qga2VybmVsLCBjSyByZXByZXNlbnRzIHNxcnQoMikgKiBjb3MoSypwaS8xNikuCi0gICAgICogaTAuLmkzIGluIHRoZSBwYXBlciBhcmUgdG1wMC4udG1wMyBoZXJlLgotICAgICAqLwotCi0gICAgdG1wMTAgPSB0bXAwICsgdG1wMzsKLSAgICB0bXAxMSA9IHRtcDEgKyB0bXAyOwotICAgIHRtcDEyID0gdG1wMCArIHRtcDI7Ci0gICAgdG1wMTMgPSB0bXAxICsgdG1wMzsKLSAgICB6MSA9IE1VTFRJUExZKHRtcDEyICsgdG1wMTMsIEZJWF8xXzE3NTg3NTYwMik7IC8qICBjMyAqLwotICAgIC8qIEFkZCBmdWRnZSBmYWN0b3IgaGVyZSBmb3IgZmluYWwgZGVzY2FsZS4gKi8KLSAgICB6MSArPSBPTkUgPDwgKENPTlNUX0JJVFMtUEFTUzFfQklUUy0yKTsKLQotICAgIHRtcDAgID0gTVVMVElQTFkodG1wMCwgICAgRklYXzFfNTAxMzIxMTEwKTsgICAgLyogIGMxK2MzLWM1LWM3ICovCi0gICAgdG1wMSAgPSBNVUxUSVBMWSh0bXAxLCAgICBGSVhfM18wNzI3MTEwMjYpOyAgICAvKiAgYzErYzMrYzUtYzcgKi8KLSAgICB0bXAyICA9IE1VTFRJUExZKHRtcDIsICAgIEZJWF8yXzA1MzExOTg2OSk7ICAgIC8qICBjMStjMy1jNStjNyAqLwotICAgIHRtcDMgID0gTVVMVElQTFkodG1wMywgICAgRklYXzBfMjk4NjMxMzM2KTsgICAgLyogLWMxK2MzK2M1LWM3ICovCi0gICAgdG1wMTAgPSBNVUxUSVBMWSh0bXAxMCwgLSBGSVhfMF84OTk5NzYyMjMpOyAgICAvKiAgYzctYzMgKi8KLSAgICB0bXAxMSA9IE1VTFRJUExZKHRtcDExLCAtIEZJWF8yXzU2MjkxNTQ0Nyk7ICAgIC8qIC1jMS1jMyAqLwotICAgIHRtcDEyID0gTVVMVElQTFkodG1wMTIsIC0gRklYXzBfMzkwMTgwNjQ0KTsgICAgLyogIGM1LWMzICovCi0gICAgdG1wMTMgPSBNVUxUSVBMWSh0bXAxMywgLSBGSVhfMV85NjE1NzA1NjApOyAgICAvKiAtYzMtYzUgKi8KLQotICAgIHRtcDEyICs9IHoxOwotICAgIHRtcDEzICs9IHoxOwotCi0gICAgZGF0YXB0clsxXSA9IChEQ1RFTEVNKQotICAgICAgUklHSFRfU0hJRlQodG1wMCArIHRtcDEwICsgdG1wMTIsIENPTlNUX0JJVFMtUEFTUzFfQklUUy0xKTsKLSAgICBkYXRhcHRyWzNdID0gKERDVEVMRU0pCi0gICAgICBSSUdIVF9TSElGVCh0bXAxICsgdG1wMTEgKyB0bXAxMywgQ09OU1RfQklUUy1QQVNTMV9CSVRTLTEpOwotICAgIGRhdGFwdHJbNV0gPSAoRENURUxFTSkKLSAgICAgIFJJR0hUX1NISUZUKHRtcDIgKyB0bXAxMSArIHRtcDEyLCBDT05TVF9CSVRTLVBBU1MxX0JJVFMtMSk7Ci0gICAgZGF0YXB0cls3XSA9IChEQ1RFTEVNKQotICAgICAgUklHSFRfU0hJRlQodG1wMyArIHRtcDEwICsgdG1wMTMsIENPTlNUX0JJVFMtUEFTUzFfQklUUy0xKTsKLQotICAgIGRhdGFwdHIgKz0gRENUU0laRTsJCS8qIGFkdmFuY2UgcG9pbnRlciB0byBuZXh0IHJvdyAqLwotICB9Ci0KLSAgLyogUGFzcyAyOiBwcm9jZXNzIGNvbHVtbnMuCi0gICAqIFdlIHJlbW92ZSB0aGUgUEFTUzFfQklUUyBzY2FsaW5nLCBidXQgbGVhdmUgdGhlIHJlc3VsdHMgc2NhbGVkIHVwCi0gICAqIGJ5IGFuIG92ZXJhbGwgZmFjdG9yIG9mIDguCi0gICAqIDQtcG9pbnQgRkRDVCBrZXJuZWwsIGNLIHJlcHJlc2VudHMgc3FydCgyKSAqIGNvcyhLKnBpLzE2KS4KLSAgICovCi0KLSAgZGF0YXB0ciA9IGRhdGE7Ci0gIGZvciAoY3RyID0gRENUU0laRS0xOyBjdHIgPj0gMDsgY3RyLS0pIHsKLSAgICAvKiBFdmVuIHBhcnQgKi8KLQotICAgIC8qIEFkZCBmdWRnZSBmYWN0b3IgaGVyZSBmb3IgZmluYWwgZGVzY2FsZS4gKi8KLSAgICB0bXAwID0gZGF0YXB0cltEQ1RTSVpFKjBdICsgZGF0YXB0cltEQ1RTSVpFKjNdICsgKE9ORSA8PCAoUEFTUzFfQklUUy0xKSk7Ci0gICAgdG1wMSA9IGRhdGFwdHJbRENUU0laRSoxXSArIGRhdGFwdHJbRENUU0laRSoyXTsKLQotICAgIHRtcDEwID0gZGF0YXB0cltEQ1RTSVpFKjBdIC0gZGF0YXB0cltEQ1RTSVpFKjNdOwotICAgIHRtcDExID0gZGF0YXB0cltEQ1RTSVpFKjFdIC0gZGF0YXB0cltEQ1RTSVpFKjJdOwotCi0gICAgZGF0YXB0cltEQ1RTSVpFKjBdID0gKERDVEVMRU0pIFJJR0hUX1NISUZUKHRtcDAgKyB0bXAxLCBQQVNTMV9CSVRTKTsKLSAgICBkYXRhcHRyW0RDVFNJWkUqMl0gPSAoRENURUxFTSkgUklHSFRfU0hJRlQodG1wMCAtIHRtcDEsIFBBU1MxX0JJVFMpOwotCi0gICAgLyogT2RkIHBhcnQgKi8KLQotICAgIHRtcDAgPSBNVUxUSVBMWSh0bXAxMCArIHRtcDExLCBGSVhfMF81NDExOTYxMDApOyAgIC8qIGM2ICovCi0gICAgLyogQWRkIGZ1ZGdlIGZhY3RvciBoZXJlIGZvciBmaW5hbCBkZXNjYWxlLiAqLwotICAgIHRtcDAgKz0gT05FIDw8IChDT05TVF9CSVRTK1BBU1MxX0JJVFMtMSk7Ci0KLSAgICBkYXRhcHRyW0RDVFNJWkUqMV0gPSAoRENURUxFTSkKLSAgICAgIFJJR0hUX1NISUZUKHRtcDAgKyBNVUxUSVBMWSh0bXAxMCwgRklYXzBfNzY1MzY2ODY1KSwgLyogYzItYzYgKi8KLQkJICBDT05TVF9CSVRTK1BBU1MxX0JJVFMpOwotICAgIGRhdGFwdHJbRENUU0laRSozXSA9IChEQ1RFTEVNKQotICAgICAgUklHSFRfU0hJRlQodG1wMCAtIE1VTFRJUExZKHRtcDExLCBGSVhfMV84NDc3NTkwNjUpLCAvKiBjMitjNiAqLwotCQkgIENPTlNUX0JJVFMrUEFTUzFfQklUUyk7Ci0KLSAgICBkYXRhcHRyKys7CQkJLyogYWR2YW5jZSBwb2ludGVyIHRvIG5leHQgY29sdW1uICovCi0gIH0KLX0KLQotCi0vKgotICogUGVyZm9ybSB0aGUgZm9yd2FyZCBEQ1Qgb24gYSA2eDMgc2FtcGxlIGJsb2NrLgotICoKLSAqIDYtcG9pbnQgRkRDVCBpbiBwYXNzIDEgKHJvd3MpLCAzLXBvaW50IGluIHBhc3MgMiAoY29sdW1ucykuCi0gKi8KLQotR0xPQkFMKHZvaWQpCi1qcGVnX2ZkY3RfNngzIChEQ1RFTEVNICogZGF0YSwgSlNBTVBBUlJBWSBzYW1wbGVfZGF0YSwgSkRJTUVOU0lPTiBzdGFydF9jb2wpCi17Ci0gIElOVDMyIHRtcDAsIHRtcDEsIHRtcDI7Ci0gIElOVDMyIHRtcDEwLCB0bXAxMSwgdG1wMTI7Ci0gIERDVEVMRU0gKmRhdGFwdHI7Ci0gIEpTQU1QUk9XIGVsZW1wdHI7Ci0gIGludCBjdHI7Ci0gIFNISUZUX1RFTVBTCi0KLSAgLyogUHJlLXplcm8gb3V0cHV0IGNvZWZmaWNpZW50IGJsb2NrLiAqLwotICBNRU1aRVJPKGRhdGEsIFNJWkVPRihEQ1RFTEVNKSAqIERDVFNJWkUyKTsKLQotICAvKiBQYXNzIDE6IHByb2Nlc3Mgcm93cy4gKi8KLSAgLyogTm90ZSByZXN1bHRzIGFyZSBzY2FsZWQgdXAgYnkgc3FydCg4KSBjb21wYXJlZCB0byBhIHRydWUgRENUOyAqLwotICAvKiBmdXJ0aGVybW9yZSwgd2Ugc2NhbGUgdGhlIHJlc3VsdHMgYnkgMioqUEFTUzFfQklUUy4gKi8KLSAgLyogV2Ugc2NhbGUgdGhlIHJlc3VsdHMgZnVydGhlciBieSAyIGFzIHBhcnQgb2Ygb3V0cHV0IGFkYXB0aW9uICovCi0gIC8qIHNjYWxpbmcgZm9yIGRpZmZlcmVudCBEQ1Qgc2l6ZS4gKi8KLSAgLyogNi1wb2ludCBGRENUIGtlcm5lbCwgY0sgcmVwcmVzZW50cyBzcXJ0KDIpICogY29zKEsqcGkvMTIpLiAqLwotCi0gIGRhdGFwdHIgPSBkYXRhOwotICBmb3IgKGN0ciA9IDA7IGN0ciA8IDM7IGN0cisrKSB7Ci0gICAgZWxlbXB0ciA9IHNhbXBsZV9kYXRhW2N0cl0gKyBzdGFydF9jb2w7Ci0KLSAgICAvKiBFdmVuIHBhcnQgKi8KLQotICAgIHRtcDAgPSBHRVRKU0FNUExFKGVsZW1wdHJbMF0pICsgR0VUSlNBTVBMRShlbGVtcHRyWzVdKTsKLSAgICB0bXAxMSA9IEdFVEpTQU1QTEUoZWxlbXB0clsxXSkgKyBHRVRKU0FNUExFKGVsZW1wdHJbNF0pOwotICAgIHRtcDIgPSBHRVRKU0FNUExFKGVsZW1wdHJbMl0pICsgR0VUSlNBTVBMRShlbGVtcHRyWzNdKTsKLQotICAgIHRtcDEwID0gdG1wMCArIHRtcDI7Ci0gICAgdG1wMTIgPSB0bXAwIC0gdG1wMjsKLQotICAgIHRtcDAgPSBHRVRKU0FNUExFKGVsZW1wdHJbMF0pIC0gR0VUSlNBTVBMRShlbGVtcHRyWzVdKTsKLSAgICB0bXAxID0gR0VUSlNBTVBMRShlbGVtcHRyWzFdKSAtIEdFVEpTQU1QTEUoZWxlbXB0cls0XSk7Ci0gICAgdG1wMiA9IEdFVEpTQU1QTEUoZWxlbXB0clsyXSkgLSBHRVRKU0FNUExFKGVsZW1wdHJbM10pOwotCi0gICAgLyogQXBwbHkgdW5zaWduZWQtPnNpZ25lZCBjb252ZXJzaW9uICovCi0gICAgZGF0YXB0clswXSA9IChEQ1RFTEVNKQotICAgICAgKCh0bXAxMCArIHRtcDExIC0gNiAqIENFTlRFUkpTQU1QTEUpIDw8IChQQVNTMV9CSVRTKzEpKTsKLSAgICBkYXRhcHRyWzJdID0gKERDVEVMRU0pCi0gICAgICBERVNDQUxFKE1VTFRJUExZKHRtcDEyLCBGSVgoMS4yMjQ3NDQ4NzEpKSwgICAgICAgICAgICAgICAgIC8qIGMyICovCi0JICAgICAgQ09OU1RfQklUUy1QQVNTMV9CSVRTLTEpOwotICAgIGRhdGFwdHJbNF0gPSAoRENURUxFTSkKLSAgICAgIERFU0NBTEUoTVVMVElQTFkodG1wMTAgLSB0bXAxMSAtIHRtcDExLCBGSVgoMC43MDcxMDY3ODEpKSwgLyogYzQgKi8KLQkgICAgICBDT05TVF9CSVRTLVBBU1MxX0JJVFMtMSk7Ci0KLSAgICAvKiBPZGQgcGFydCAqLwotCi0gICAgdG1wMTAgPSBERVNDQUxFKE1VTFRJUExZKHRtcDAgKyB0bXAyLCBGSVgoMC4zNjYwMjU0MDQpKSwgICAgIC8qIGM1ICovCi0JCSAgICBDT05TVF9CSVRTLVBBU1MxX0JJVFMtMSk7Ci0KLSAgICBkYXRhcHRyWzFdID0gKERDVEVMRU0pICh0bXAxMCArICgodG1wMCArIHRtcDEpIDw8IChQQVNTMV9CSVRTKzEpKSk7Ci0gICAgZGF0YXB0clszXSA9IChEQ1RFTEVNKSAoKHRtcDAgLSB0bXAxIC0gdG1wMikgPDwgKFBBU1MxX0JJVFMrMSkpOwotICAgIGRhdGFwdHJbNV0gPSAoRENURUxFTSkgKHRtcDEwICsgKCh0bXAyIC0gdG1wMSkgPDwgKFBBU1MxX0JJVFMrMSkpKTsKLQotICAgIGRhdGFwdHIgKz0gRENUU0laRTsJCS8qIGFkdmFuY2UgcG9pbnRlciB0byBuZXh0IHJvdyAqLwotICB9Ci0KLSAgLyogUGFzcyAyOiBwcm9jZXNzIGNvbHVtbnMuCi0gICAqIFdlIHJlbW92ZSB0aGUgUEFTUzFfQklUUyBzY2FsaW5nLCBidXQgbGVhdmUgdGhlIHJlc3VsdHMgc2NhbGVkIHVwCi0gICAqIGJ5IGFuIG92ZXJhbGwgZmFjdG9yIG9mIDguCi0gICAqIFdlIG11c3QgYWxzbyBzY2FsZSB0aGUgb3V0cHV0IGJ5ICg4LzYpKig4LzMpID0gMzIvOSwgd2hpY2ggd2UgcGFydGlhbGx5Ci0gICAqIGZvbGQgaW50byB0aGUgY29uc3RhbnQgbXVsdGlwbGllcnMgKG90aGVyIHBhcnQgd2FzIGRvbmUgaW4gcGFzcyAxKToKLSAgICogMy1wb2ludCBGRENUIGtlcm5lbCwgY0sgcmVwcmVzZW50cyBzcXJ0KDIpICogY29zKEsqcGkvNikgKiAxNi85LgotICAgKi8KLQotICBkYXRhcHRyID0gZGF0YTsKLSAgZm9yIChjdHIgPSAwOyBjdHIgPCA2OyBjdHIrKykgewotICAgIC8qIEV2ZW4gcGFydCAqLwotCi0gICAgdG1wMCA9IGRhdGFwdHJbRENUU0laRSowXSArIGRhdGFwdHJbRENUU0laRSoyXTsKLSAgICB0bXAxID0gZGF0YXB0cltEQ1RTSVpFKjFdOwotCi0gICAgdG1wMiA9IGRhdGFwdHJbRENUU0laRSowXSAtIGRhdGFwdHJbRENUU0laRSoyXTsKLQotICAgIGRhdGFwdHJbRENUU0laRSowXSA9IChEQ1RFTEVNKQotICAgICAgREVTQ0FMRShNVUxUSVBMWSh0bXAwICsgdG1wMSwgRklYKDEuNzc3Nzc3Nzc4KSksICAgICAgICAvKiAxNi85ICovCi0JICAgICAgQ09OU1RfQklUUytQQVNTMV9CSVRTKTsKLSAgICBkYXRhcHRyW0RDVFNJWkUqMl0gPSAoRENURUxFTSkKLSAgICAgIERFU0NBTEUoTVVMVElQTFkodG1wMCAtIHRtcDEgLSB0bXAxLCBGSVgoMS4yNTcwNzg3MjIpKSwgLyogYzIgKi8KLQkgICAgICBDT05TVF9CSVRTK1BBU1MxX0JJVFMpOwotCi0gICAgLyogT2RkIHBhcnQgKi8KLQotICAgIGRhdGFwdHJbRENUU0laRSoxXSA9IChEQ1RFTEVNKQotICAgICAgREVTQ0FMRShNVUxUSVBMWSh0bXAyLCBGSVgoMi4xNzczMjQyMTYpKSwgICAgICAgICAgICAgICAvKiBjMSAqLwotCSAgICAgIENPTlNUX0JJVFMrUEFTUzFfQklUUyk7Ci0KLSAgICBkYXRhcHRyKys7CQkJLyogYWR2YW5jZSBwb2ludGVyIHRvIG5leHQgY29sdW1uICovCi0gIH0KLX0KLQotCi0vKgotICogUGVyZm9ybSB0aGUgZm9yd2FyZCBEQ1Qgb24gYSA0eDIgc2FtcGxlIGJsb2NrLgotICoKLSAqIDQtcG9pbnQgRkRDVCBpbiBwYXNzIDEgKHJvd3MpLCAyLXBvaW50IGluIHBhc3MgMiAoY29sdW1ucykuCi0gKi8KLQotR0xPQkFMKHZvaWQpCi1qcGVnX2ZkY3RfNHgyIChEQ1RFTEVNICogZGF0YSwgSlNBTVBBUlJBWSBzYW1wbGVfZGF0YSwgSkRJTUVOU0lPTiBzdGFydF9jb2wpCi17Ci0gIElOVDMyIHRtcDAsIHRtcDE7Ci0gIElOVDMyIHRtcDEwLCB0bXAxMTsKLSAgRENURUxFTSAqZGF0YXB0cjsKLSAgSlNBTVBST1cgZWxlbXB0cjsKLSAgaW50IGN0cjsKLSAgU0hJRlRfVEVNUFMKLQotICAvKiBQcmUtemVybyBvdXRwdXQgY29lZmZpY2llbnQgYmxvY2suICovCi0gIE1FTVpFUk8oZGF0YSwgU0laRU9GKERDVEVMRU0pICogRENUU0laRTIpOwotCi0gIC8qIFBhc3MgMTogcHJvY2VzcyByb3dzLiAqLwotICAvKiBOb3RlIHJlc3VsdHMgYXJlIHNjYWxlZCB1cCBieSBzcXJ0KDgpIGNvbXBhcmVkIHRvIGEgdHJ1ZSBEQ1Q7ICovCi0gIC8qIGZ1cnRoZXJtb3JlLCB3ZSBzY2FsZSB0aGUgcmVzdWx0cyBieSAyKipQQVNTMV9CSVRTLiAqLwotICAvKiBXZSBtdXN0IGFsc28gc2NhbGUgdGhlIG91dHB1dCBieSAoOC80KSooOC8yKSA9IDIqKjMsIHdoaWNoIHdlIGFkZCBoZXJlLiAqLwotICAvKiA0LXBvaW50IEZEQ1Qga2VybmVsLCAqLwotICAvKiBjSyByZXByZXNlbnRzIHNxcnQoMikgKiBjb3MoSypwaS8xNikgW3JlZmVycyB0byA4LXBvaW50IEZEQ1RdLiAqLwotCi0gIGRhdGFwdHIgPSBkYXRhOwotICBmb3IgKGN0ciA9IDA7IGN0ciA8IDI7IGN0cisrKSB7Ci0gICAgZWxlbXB0ciA9IHNhbXBsZV9kYXRhW2N0cl0gKyBzdGFydF9jb2w7Ci0KLSAgICAvKiBFdmVuIHBhcnQgKi8KLQotICAgIHRtcDAgPSBHRVRKU0FNUExFKGVsZW1wdHJbMF0pICsgR0VUSlNBTVBMRShlbGVtcHRyWzNdKTsKLSAgICB0bXAxID0gR0VUSlNBTVBMRShlbGVtcHRyWzFdKSArIEdFVEpTQU1QTEUoZWxlbXB0clsyXSk7Ci0KLSAgICB0bXAxMCA9IEdFVEpTQU1QTEUoZWxlbXB0clswXSkgLSBHRVRKU0FNUExFKGVsZW1wdHJbM10pOwotICAgIHRtcDExID0gR0VUSlNBTVBMRShlbGVtcHRyWzFdKSAtIEdFVEpTQU1QTEUoZWxlbXB0clsyXSk7Ci0KLSAgICAvKiBBcHBseSB1bnNpZ25lZC0+c2lnbmVkIGNvbnZlcnNpb24gKi8KLSAgICBkYXRhcHRyWzBdID0gKERDVEVMRU0pCi0gICAgICAoKHRtcDAgKyB0bXAxIC0gNCAqIENFTlRFUkpTQU1QTEUpIDw8IChQQVNTMV9CSVRTKzMpKTsKLSAgICBkYXRhcHRyWzJdID0gKERDVEVMRU0pICgodG1wMCAtIHRtcDEpIDw8IChQQVNTMV9CSVRTKzMpKTsKLQotICAgIC8qIE9kZCBwYXJ0ICovCi0KLSAgICB0bXAwID0gTVVMVElQTFkodG1wMTAgKyB0bXAxMSwgRklYXzBfNTQxMTk2MTAwKTsgICAgICAgLyogYzYgKi8KLSAgICAvKiBBZGQgZnVkZ2UgZmFjdG9yIGhlcmUgZm9yIGZpbmFsIGRlc2NhbGUuICovCi0gICAgdG1wMCArPSBPTkUgPDwgKENPTlNUX0JJVFMtUEFTUzFfQklUUy00KTsKLQotICAgIGRhdGFwdHJbMV0gPSAoRENURUxFTSkKLSAgICAgIFJJR0hUX1NISUZUKHRtcDAgKyBNVUxUSVBMWSh0bXAxMCwgRklYXzBfNzY1MzY2ODY1KSwgLyogYzItYzYgKi8KLQkJICBDT05TVF9CSVRTLVBBU1MxX0JJVFMtMyk7Ci0gICAgZGF0YXB0clszXSA9IChEQ1RFTEVNKQotICAgICAgUklHSFRfU0hJRlQodG1wMCAtIE1VTFRJUExZKHRtcDExLCBGSVhfMV84NDc3NTkwNjUpLCAvKiBjMitjNiAqLwotCQkgIENPTlNUX0JJVFMtUEFTUzFfQklUUy0zKTsKLQotICAgIGRhdGFwdHIgKz0gRENUU0laRTsJCS8qIGFkdmFuY2UgcG9pbnRlciB0byBuZXh0IHJvdyAqLwotICB9Ci0KLSAgLyogUGFzcyAyOiBwcm9jZXNzIGNvbHVtbnMuCi0gICAqIFdlIHJlbW92ZSB0aGUgUEFTUzFfQklUUyBzY2FsaW5nLCBidXQgbGVhdmUgdGhlIHJlc3VsdHMgc2NhbGVkIHVwCi0gICAqIGJ5IGFuIG92ZXJhbGwgZmFjdG9yIG9mIDguCi0gICAqLwotCi0gIGRhdGFwdHIgPSBkYXRhOwotICBmb3IgKGN0ciA9IDA7IGN0ciA8IDQ7IGN0cisrKSB7Ci0gICAgLyogRXZlbiBwYXJ0ICovCi0KLSAgICAvKiBBZGQgZnVkZ2UgZmFjdG9yIGhlcmUgZm9yIGZpbmFsIGRlc2NhbGUuICovCi0gICAgdG1wMCA9IGRhdGFwdHJbRENUU0laRSowXSArIChPTkUgPDwgKFBBU1MxX0JJVFMtMSkpOwotICAgIHRtcDEgPSBkYXRhcHRyW0RDVFNJWkUqMV07Ci0KLSAgICBkYXRhcHRyW0RDVFNJWkUqMF0gPSAoRENURUxFTSkgUklHSFRfU0hJRlQodG1wMCArIHRtcDEsIFBBU1MxX0JJVFMpOwotCi0gICAgLyogT2RkIHBhcnQgKi8KLQotICAgIGRhdGFwdHJbRENUU0laRSoxXSA9IChEQ1RFTEVNKSBSSUdIVF9TSElGVCh0bXAwIC0gdG1wMSwgUEFTUzFfQklUUyk7Ci0KLSAgICBkYXRhcHRyKys7CQkJLyogYWR2YW5jZSBwb2ludGVyIHRvIG5leHQgY29sdW1uICovCi0gIH0KLX0KLQotCi0vKgotICogUGVyZm9ybSB0aGUgZm9yd2FyZCBEQ1Qgb24gYSAyeDEgc2FtcGxlIGJsb2NrLgotICoKLSAqIDItcG9pbnQgRkRDVCBpbiBwYXNzIDEgKHJvd3MpLCAxLXBvaW50IGluIHBhc3MgMiAoY29sdW1ucykuCi0gKi8KLQotR0xPQkFMKHZvaWQpCi1qcGVnX2ZkY3RfMngxIChEQ1RFTEVNICogZGF0YSwgSlNBTVBBUlJBWSBzYW1wbGVfZGF0YSwgSkRJTUVOU0lPTiBzdGFydF9jb2wpCi17Ci0gIElOVDMyIHRtcDAsIHRtcDE7Ci0gIEpTQU1QUk9XIGVsZW1wdHI7Ci0KLSAgLyogUHJlLXplcm8gb3V0cHV0IGNvZWZmaWNpZW50IGJsb2NrLiAqLwotICBNRU1aRVJPKGRhdGEsIFNJWkVPRihEQ1RFTEVNKSAqIERDVFNJWkUyKTsKLQotICBlbGVtcHRyID0gc2FtcGxlX2RhdGFbMF0gKyBzdGFydF9jb2w7Ci0KLSAgdG1wMCA9IEdFVEpTQU1QTEUoZWxlbXB0clswXSk7Ci0gIHRtcDEgPSBHRVRKU0FNUExFKGVsZW1wdHJbMV0pOwotCi0gIC8qIFdlIGxlYXZlIHRoZSByZXN1bHRzIHNjYWxlZCB1cCBieSBhbiBvdmVyYWxsIGZhY3RvciBvZiA4LgotICAgKiBXZSBtdXN0IGFsc28gc2NhbGUgdGhlIG91dHB1dCBieSAoOC8yKSooOC8xKSA9IDIqKjUuCi0gICAqLwotCi0gIC8qIEV2ZW4gcGFydCAqLwotICAvKiBBcHBseSB1bnNpZ25lZC0+c2lnbmVkIGNvbnZlcnNpb24gKi8KLSAgZGF0YVswXSA9IChEQ1RFTEVNKSAoKHRtcDAgKyB0bXAxIC0gMiAqIENFTlRFUkpTQU1QTEUpIDw8IDUpOwotCi0gIC8qIE9kZCBwYXJ0ICovCi0gIGRhdGFbMV0gPSAoRENURUxFTSkgKCh0bXAwIC0gdG1wMSkgPDwgNSk7Ci19Ci0KLQotLyoKLSAqIFBlcmZvcm0gdGhlIGZvcndhcmQgRENUIG9uIGFuIDh4MTYgc2FtcGxlIGJsb2NrLgotICoKLSAqIDgtcG9pbnQgRkRDVCBpbiBwYXNzIDEgKHJvd3MpLCAxNi1wb2ludCBpbiBwYXNzIDIgKGNvbHVtbnMpLgotICovCi0KLUdMT0JBTCh2b2lkKQotanBlZ19mZGN0Xzh4MTYgKERDVEVMRU0gKiBkYXRhLCBKU0FNUEFSUkFZIHNhbXBsZV9kYXRhLCBKRElNRU5TSU9OIHN0YXJ0X2NvbCkKLXsKLSAgSU5UMzIgdG1wMCwgdG1wMSwgdG1wMiwgdG1wMywgdG1wNCwgdG1wNSwgdG1wNiwgdG1wNzsKLSAgSU5UMzIgdG1wMTAsIHRtcDExLCB0bXAxMiwgdG1wMTMsIHRtcDE0LCB0bXAxNSwgdG1wMTYsIHRtcDE3OwotICBJTlQzMiB6MTsKLSAgRENURUxFTSB3b3Jrc3BhY2VbRENUU0laRTJdOwotICBEQ1RFTEVNICpkYXRhcHRyOwotICBEQ1RFTEVNICp3c3B0cjsKLSAgSlNBTVBST1cgZWxlbXB0cjsKLSAgaW50IGN0cjsKLSAgU0hJRlRfVEVNUFMKLQotICAvKiBQYXNzIDE6IHByb2Nlc3Mgcm93cy4gKi8KLSAgLyogTm90ZSByZXN1bHRzIGFyZSBzY2FsZWQgdXAgYnkgc3FydCg4KSBjb21wYXJlZCB0byBhIHRydWUgRENUOyAqLwotICAvKiBmdXJ0aGVybW9yZSwgd2Ugc2NhbGUgdGhlIHJlc3VsdHMgYnkgMioqUEFTUzFfQklUUy4gKi8KLQotICBkYXRhcHRyID0gZGF0YTsKLSAgY3RyID0gMDsKLSAgZm9yICg7OykgewotICAgIGVsZW1wdHIgPSBzYW1wbGVfZGF0YVtjdHJdICsgc3RhcnRfY29sOwotCi0gICAgLyogRXZlbiBwYXJ0IHBlciBMTCZNIGZpZ3VyZSAxIC0tLSBub3RlIHRoYXQgcHVibGlzaGVkIGZpZ3VyZSBpcyBmYXVsdHk7Ci0gICAgICogcm90YXRvciAic3FydCgyKSpjMSIgc2hvdWxkIGJlICJzcXJ0KDIpKmM2Ii4KLSAgICAgKi8KLQotICAgIHRtcDAgPSBHRVRKU0FNUExFKGVsZW1wdHJbMF0pICsgR0VUSlNBTVBMRShlbGVtcHRyWzddKTsKLSAgICB0bXAxID0gR0VUSlNBTVBMRShlbGVtcHRyWzFdKSArIEdFVEpTQU1QTEUoZWxlbXB0cls2XSk7Ci0gICAgdG1wMiA9IEdFVEpTQU1QTEUoZWxlbXB0clsyXSkgKyBHRVRKU0FNUExFKGVsZW1wdHJbNV0pOwotICAgIHRtcDMgPSBHRVRKU0FNUExFKGVsZW1wdHJbM10pICsgR0VUSlNBTVBMRShlbGVtcHRyWzRdKTsKLQotICAgIHRtcDEwID0gdG1wMCArIHRtcDM7Ci0gICAgdG1wMTIgPSB0bXAwIC0gdG1wMzsKLSAgICB0bXAxMSA9IHRtcDEgKyB0bXAyOwotICAgIHRtcDEzID0gdG1wMSAtIHRtcDI7Ci0KLSAgICB0bXAwID0gR0VUSlNBTVBMRShlbGVtcHRyWzBdKSAtIEdFVEpTQU1QTEUoZWxlbXB0cls3XSk7Ci0gICAgdG1wMSA9IEdFVEpTQU1QTEUoZWxlbXB0clsxXSkgLSBHRVRKU0FNUExFKGVsZW1wdHJbNl0pOwotICAgIHRtcDIgPSBHRVRKU0FNUExFKGVsZW1wdHJbMl0pIC0gR0VUSlNBTVBMRShlbGVtcHRyWzVdKTsKLSAgICB0bXAzID0gR0VUSlNBTVBMRShlbGVtcHRyWzNdKSAtIEdFVEpTQU1QTEUoZWxlbXB0cls0XSk7Ci0KLSAgICAvKiBBcHBseSB1bnNpZ25lZC0+c2lnbmVkIGNvbnZlcnNpb24gKi8KLSAgICBkYXRhcHRyWzBdID0gKERDVEVMRU0pICgodG1wMTAgKyB0bXAxMSAtIDggKiBDRU5URVJKU0FNUExFKSA8PCBQQVNTMV9CSVRTKTsKLSAgICBkYXRhcHRyWzRdID0gKERDVEVMRU0pICgodG1wMTAgLSB0bXAxMSkgPDwgUEFTUzFfQklUUyk7Ci0KLSAgICB6MSA9IE1VTFRJUExZKHRtcDEyICsgdG1wMTMsIEZJWF8wXzU0MTE5NjEwMCk7Ci0gICAgZGF0YXB0clsyXSA9IChEQ1RFTEVNKSBERVNDQUxFKHoxICsgTVVMVElQTFkodG1wMTIsIEZJWF8wXzc2NTM2Njg2NSksCisgICAgZGF0YXB0clsyXSA9IChEQ1RFTEVNKSBERVNDQUxFKHoxICsgTVVMVElQTFkodG1wMTMsIEZJWF8wXzc2NTM2Njg2NSksCiAJCQkJICAgQ09OU1RfQklUUy1QQVNTMV9CSVRTKTsKLSAgICBkYXRhcHRyWzZdID0gKERDVEVMRU0pIERFU0NBTEUoejEgLSBNVUxUSVBMWSh0bXAxMywgRklYXzFfODQ3NzU5MDY1KSwKKyAgICBkYXRhcHRyWzZdID0gKERDVEVMRU0pIERFU0NBTEUoejEgKyBNVUxUSVBMWSh0bXAxMiwgLSBGSVhfMV84NDc3NTkwNjUpLAogCQkJCSAgIENPTlNUX0JJVFMtUEFTUzFfQklUUyk7Ci0KKyAgICAKICAgICAvKiBPZGQgcGFydCBwZXIgZmlndXJlIDggLS0tIG5vdGUgcGFwZXIgb21pdHMgZmFjdG9yIG9mIHNxcnQoMikuCi0gICAgICogOC1wb2ludCBGRENUIGtlcm5lbCwgY0sgcmVwcmVzZW50cyBzcXJ0KDIpICogY29zKEsqcGkvMTYpLgotICAgICAqIGkwLi5pMyBpbiB0aGUgcGFwZXIgYXJlIHRtcDAuLnRtcDMgaGVyZS4KKyAgICAgKiBjSyByZXByZXNlbnRzIGNvcyhLKnBpLzE2KS4KKyAgICAgKiBpMC4uaTMgaW4gdGhlIHBhcGVyIGFyZSB0bXA0Li50bXA3IGhlcmUuCiAgICAgICovCi0KLSAgICB0bXAxMCA9IHRtcDAgKyB0bXAzOwotICAgIHRtcDExID0gdG1wMSArIHRtcDI7Ci0gICAgdG1wMTIgPSB0bXAwICsgdG1wMjsKLSAgICB0bXAxMyA9IHRtcDEgKyB0bXAzOwotICAgIHoxID0gTVVMVElQTFkodG1wMTIgKyB0bXAxMywgRklYXzFfMTc1ODc1NjAyKTsgLyogIGMzICovCi0KLSAgICB0bXAwICA9IE1VTFRJUExZKHRtcDAsICAgIEZJWF8xXzUwMTMyMTExMCk7ICAgIC8qICBjMStjMy1jNS1jNyAqLwotICAgIHRtcDEgID0gTVVMVElQTFkodG1wMSwgICAgRklYXzNfMDcyNzExMDI2KTsgICAgLyogIGMxK2MzK2M1LWM3ICovCi0gICAgdG1wMiAgPSBNVUxUSVBMWSh0bXAyLCAgICBGSVhfMl8wNTMxMTk4NjkpOyAgICAvKiAgYzErYzMtYzUrYzcgKi8KLSAgICB0bXAzICA9IE1VTFRJUExZKHRtcDMsICAgIEZJWF8wXzI5ODYzMTMzNik7ICAgIC8qIC1jMStjMytjNS1jNyAqLwotICAgIHRtcDEwID0gTVVMVElQTFkodG1wMTAsIC0gRklYXzBfODk5OTc2MjIzKTsgICAgLyogIGM3LWMzICovCi0gICAgdG1wMTEgPSBNVUxUSVBMWSh0bXAxMSwgLSBGSVhfMl81NjI5MTU0NDcpOyAgICAvKiAtYzEtYzMgKi8KLSAgICB0bXAxMiA9IE1VTFRJUExZKHRtcDEyLCAtIEZJWF8wXzM5MDE4MDY0NCk7ICAgIC8qICBjNS1jMyAqLwotICAgIHRtcDEzID0gTVVMVElQTFkodG1wMTMsIC0gRklYXzFfOTYxNTcwNTYwKTsgICAgLyogLWMzLWM1ICovCi0KLSAgICB0bXAxMiArPSB6MTsKLSAgICB0bXAxMyArPSB6MTsKLQotICAgIGRhdGFwdHJbMV0gPSAoRENURUxFTSkgREVTQ0FMRSh0bXAwICsgdG1wMTAgKyB0bXAxMiwgQ09OU1RfQklUUy1QQVNTMV9CSVRTKTsKLSAgICBkYXRhcHRyWzNdID0gKERDVEVMRU0pIERFU0NBTEUodG1wMSArIHRtcDExICsgdG1wMTMsIENPTlNUX0JJVFMtUEFTUzFfQklUUyk7Ci0gICAgZGF0YXB0cls1XSA9IChEQ1RFTEVNKSBERVNDQUxFKHRtcDIgKyB0bXAxMSArIHRtcDEyLCBDT05TVF9CSVRTLVBBU1MxX0JJVFMpOwotICAgIGRhdGFwdHJbN10gPSAoRENURUxFTSkgREVTQ0FMRSh0bXAzICsgdG1wMTAgKyB0bXAxMywgQ09OU1RfQklUUy1QQVNTMV9CSVRTKTsKLQotICAgIGN0cisrOwotCi0gICAgaWYgKGN0ciAhPSBEQ1RTSVpFKSB7Ci0gICAgICBpZiAoY3RyID09IERDVFNJWkUgKiAyKQotCWJyZWFrOwkJCS8qIERvbmUuICovCi0gICAgICBkYXRhcHRyICs9IERDVFNJWkU7CS8qIGFkdmFuY2UgcG9pbnRlciB0byBuZXh0IHJvdyAqLwotICAgIH0gZWxzZQotICAgICAgZGF0YXB0ciA9IHdvcmtzcGFjZTsJLyogc3dpdGNoIHBvaW50ZXIgdG8gZXh0ZW5kZWQgd29ya3NwYWNlICovCi0gIH0KLQotICAvKiBQYXNzIDI6IHByb2Nlc3MgY29sdW1ucy4KLSAgICogV2UgcmVtb3ZlIHRoZSBQQVNTMV9CSVRTIHNjYWxpbmcsIGJ1dCBsZWF2ZSB0aGUgcmVzdWx0cyBzY2FsZWQgdXAKLSAgICogYnkgYW4gb3ZlcmFsbCBmYWN0b3Igb2YgOC4KLSAgICogV2UgbXVzdCBhbHNvIHNjYWxlIHRoZSBvdXRwdXQgYnkgOC8xNiA9IDEvMi4KLSAgICogMTYtcG9pbnQgRkRDVCBrZXJuZWwsIGNLIHJlcHJlc2VudHMgc3FydCgyKSAqIGNvcyhLKnBpLzMyKS4KLSAgICovCi0KLSAgZGF0YXB0ciA9IGRhdGE7Ci0gIHdzcHRyID0gd29ya3NwYWNlOwotICBmb3IgKGN0ciA9IERDVFNJWkUtMTsgY3RyID49IDA7IGN0ci0tKSB7Ci0gICAgLyogRXZlbiBwYXJ0ICovCi0KLSAgICB0bXAwID0gZGF0YXB0cltEQ1RTSVpFKjBdICsgd3NwdHJbRENUU0laRSo3XTsKLSAgICB0bXAxID0gZGF0YXB0cltEQ1RTSVpFKjFdICsgd3NwdHJbRENUU0laRSo2XTsKLSAgICB0bXAyID0gZGF0YXB0cltEQ1RTSVpFKjJdICsgd3NwdHJbRENUU0laRSo1XTsKLSAgICB0bXAzID0gZGF0YXB0cltEQ1RTSVpFKjNdICsgd3NwdHJbRENUU0laRSo0XTsKLSAgICB0bXA0ID0gZGF0YXB0cltEQ1RTSVpFKjRdICsgd3NwdHJbRENUU0laRSozXTsKLSAgICB0bXA1ID0gZGF0YXB0cltEQ1RTSVpFKjVdICsgd3NwdHJbRENUU0laRSoyXTsKLSAgICB0bXA2ID0gZGF0YXB0cltEQ1RTSVpFKjZdICsgd3NwdHJbRENUU0laRSoxXTsKLSAgICB0bXA3ID0gZGF0YXB0cltEQ1RTSVpFKjddICsgd3NwdHJbRENUU0laRSowXTsKLQotICAgIHRtcDEwID0gdG1wMCArIHRtcDc7Ci0gICAgdG1wMTQgPSB0bXAwIC0gdG1wNzsKLSAgICB0bXAxMSA9IHRtcDEgKyB0bXA2OwotICAgIHRtcDE1ID0gdG1wMSAtIHRtcDY7Ci0gICAgdG1wMTIgPSB0bXAyICsgdG1wNTsKLSAgICB0bXAxNiA9IHRtcDIgLSB0bXA1OwotICAgIHRtcDEzID0gdG1wMyArIHRtcDQ7Ci0gICAgdG1wMTcgPSB0bXAzIC0gdG1wNDsKLQotICAgIHRtcDAgPSBkYXRhcHRyW0RDVFNJWkUqMF0gLSB3c3B0cltEQ1RTSVpFKjddOwotICAgIHRtcDEgPSBkYXRhcHRyW0RDVFNJWkUqMV0gLSB3c3B0cltEQ1RTSVpFKjZdOwotICAgIHRtcDIgPSBkYXRhcHRyW0RDVFNJWkUqMl0gLSB3c3B0cltEQ1RTSVpFKjVdOwotICAgIHRtcDMgPSBkYXRhcHRyW0RDVFNJWkUqM10gLSB3c3B0cltEQ1RTSVpFKjRdOwotICAgIHRtcDQgPSBkYXRhcHRyW0RDVFNJWkUqNF0gLSB3c3B0cltEQ1RTSVpFKjNdOwotICAgIHRtcDUgPSBkYXRhcHRyW0RDVFNJWkUqNV0gLSB3c3B0cltEQ1RTSVpFKjJdOwotICAgIHRtcDYgPSBkYXRhcHRyW0RDVFNJWkUqNl0gLSB3c3B0cltEQ1RTSVpFKjFdOwotICAgIHRtcDcgPSBkYXRhcHRyW0RDVFNJWkUqN10gLSB3c3B0cltEQ1RTSVpFKjBdOwotCi0gICAgZGF0YXB0cltEQ1RTSVpFKjBdID0gKERDVEVMRU0pCi0gICAgICBERVNDQUxFKHRtcDEwICsgdG1wMTEgKyB0bXAxMiArIHRtcDEzLCBQQVNTMV9CSVRTKzEpOwotICAgIGRhdGFwdHJbRENUU0laRSo0XSA9IChEQ1RFTEVNKQotICAgICAgREVTQ0FMRShNVUxUSVBMWSh0bXAxMCAtIHRtcDEzLCBGSVgoMS4zMDY1NjI5NjUpKSArIC8qIGM0WzE2XSA9IGMyWzhdICovCi0JICAgICAgTVVMVElQTFkodG1wMTEgLSB0bXAxMiwgRklYXzBfNTQxMTk2MTAwKSwgICAvKiBjMTJbMTZdID0gYzZbOF0gKi8KLQkgICAgICBDT05TVF9CSVRTK1BBU1MxX0JJVFMrMSk7Ci0KLSAgICB0bXAxMCA9IE1VTFRJUExZKHRtcDE3IC0gdG1wMTUsIEZJWCgwLjI3NTg5OTM3OSkpICsgICAvKiBjMTRbMTZdID0gYzdbOF0gKi8KLQkgICAgTVVMVElQTFkodG1wMTQgLSB0bXAxNiwgRklYKDEuMzg3MDM5ODQ1KSk7ICAgIC8qIGMyWzE2XSA9IGMxWzhdICovCi0KLSAgICBkYXRhcHRyW0RDVFNJWkUqMl0gPSAoRENURUxFTSkKLSAgICAgIERFU0NBTEUodG1wMTAgKyBNVUxUSVBMWSh0bXAxNSwgRklYKDEuNDUxNzc0OTgyKSkgICAvKiBjNitjMTQgKi8KLQkgICAgICArIE1VTFRJUExZKHRtcDE2LCBGSVgoMi4xNzI3MzQ4MDQpKSwgICAgICAgIC8qIGMyK2MxMCAqLwotCSAgICAgIENPTlNUX0JJVFMrUEFTUzFfQklUUysxKTsKLSAgICBkYXRhcHRyW0RDVFNJWkUqNl0gPSAoRENURUxFTSkKLSAgICAgIERFU0NBTEUodG1wMTAgLSBNVUxUSVBMWSh0bXAxNCwgRklYKDAuMjExMTY0MjQzKSkgICAvKiBjMi1jNiAqLwotCSAgICAgIC0gTVVMVElQTFkodG1wMTcsIEZJWCgxLjA2MTU5NDMzOCkpLCAgICAgICAgLyogYzEwK2MxNCAqLwotCSAgICAgIENPTlNUX0JJVFMrUEFTUzFfQklUUysxKTsKLQotICAgIC8qIE9kZCBwYXJ0ICovCi0KLSAgICB0bXAxMSA9IE1VTFRJUExZKHRtcDAgKyB0bXAxLCBGSVgoMS4zNTMzMTgwMDEpKSArICAgICAgICAgLyogYzMgKi8KLQkgICAgTVVMVElQTFkodG1wNiAtIHRtcDcsIEZJWCgwLjQxMDUyNDUyOCkpOyAgICAgICAgICAvKiBjMTMgKi8KLSAgICB0bXAxMiA9IE1VTFRJUExZKHRtcDAgKyB0bXAyLCBGSVgoMS4yNDcyMjUwMTMpKSArICAgICAgICAgLyogYzUgKi8KLQkgICAgTVVMVElQTFkodG1wNSArIHRtcDcsIEZJWCgwLjY2NjY1NTY1OCkpOyAgICAgICAgICAvKiBjMTEgKi8KLSAgICB0bXAxMyA9IE1VTFRJUExZKHRtcDAgKyB0bXAzLCBGSVgoMS4wOTMyMDE4NjcpKSArICAgICAgICAgLyogYzcgKi8KLQkgICAgTVVMVElQTFkodG1wNCAtIHRtcDcsIEZJWCgwLjg5NzE2NzU4NikpOyAgICAgICAgICAvKiBjOSAqLwotICAgIHRtcDE0ID0gTVVMVElQTFkodG1wMSArIHRtcDIsIEZJWCgwLjEzODYxNzE2OSkpICsgICAgICAgICAvKiBjMTUgKi8KLQkgICAgTVVMVElQTFkodG1wNiAtIHRtcDUsIEZJWCgxLjQwNzQwMzczOCkpOyAgICAgICAgICAvKiBjMSAqLwotICAgIHRtcDE1ID0gTVVMVElQTFkodG1wMSArIHRtcDMsIC0gRklYKDAuNjY2NjU1NjU4KSkgKyAgICAgICAvKiAtYzExICovCi0JICAgIE1VTFRJUExZKHRtcDQgKyB0bXA2LCAtIEZJWCgxLjI0NzIyNTAxMykpOyAgICAgICAgLyogLWM1ICovCi0gICAgdG1wMTYgPSBNVUxUSVBMWSh0bXAyICsgdG1wMywgLSBGSVgoMS4zNTMzMTgwMDEpKSArICAgICAgIC8qIC1jMyAqLwotCSAgICBNVUxUSVBMWSh0bXA1IC0gdG1wNCwgRklYKDAuNDEwNTI0NTI4KSk7ICAgICAgICAgIC8qIGMxMyAqLwotICAgIHRtcDEwID0gdG1wMTEgKyB0bXAxMiArIHRtcDEzIC0KLQkgICAgTVVMVElQTFkodG1wMCwgRklYKDIuMjg2MzQxMTQ0KSkgKyAgICAgICAgICAgICAgICAvKiBjNytjNStjMy1jMSAqLwotCSAgICBNVUxUSVBMWSh0bXA3LCBGSVgoMC43Nzk2NTM2MjUpKTsgICAgICAgICAgICAgICAgIC8qIGMxNStjMTMtYzExK2M5ICovCi0gICAgdG1wMTEgKz0gdG1wMTQgKyB0bXAxNSArIE1VTFRJUExZKHRtcDEsIEZJWCgwLjA3MTg4ODA3NCkpIC8qIGM5LWMzLWMxNStjMTEgKi8KLQkgICAgIC0gTVVMVElQTFkodG1wNiwgRklYKDEuNjYzOTA1MTE5KSk7ICAgICAgICAgICAgICAvKiBjNytjMTMrYzEtYzUgKi8KLSAgICB0bXAxMiArPSB0bXAxNCArIHRtcDE2IC0gTVVMVElQTFkodG1wMiwgRklYKDEuMTI1NzI2MDQ4KSkgLyogYzcrYzUrYzE1LWMzICovCi0JICAgICArIE1VTFRJUExZKHRtcDUsIEZJWCgxLjIyNzM5MTEzOCkpOyAgICAgICAgICAgICAgLyogYzktYzExK2MxLWMxMyAqLwotICAgIHRtcDEzICs9IHRtcDE1ICsgdG1wMTYgKyBNVUxUSVBMWSh0bXAzLCBGSVgoMS4wNjUzODg5NjIpKSAvKiBjMTUrYzMrYzExLWM3ICovCi0JICAgICArIE1VTFRJUExZKHRtcDQsIEZJWCgyLjE2Nzk4NTY5MikpOyAgICAgICAgICAgICAgLyogYzErYzEzK2M1LWM5ICovCi0KLSAgICBkYXRhcHRyW0RDVFNJWkUqMV0gPSAoRENURUxFTSkgREVTQ0FMRSh0bXAxMCwgQ09OU1RfQklUUytQQVNTMV9CSVRTKzEpOwotICAgIGRhdGFwdHJbRENUU0laRSozXSA9IChEQ1RFTEVNKSBERVNDQUxFKHRtcDExLCBDT05TVF9CSVRTK1BBU1MxX0JJVFMrMSk7Ci0gICAgZGF0YXB0cltEQ1RTSVpFKjVdID0gKERDVEVMRU0pIERFU0NBTEUodG1wMTIsIENPTlNUX0JJVFMrUEFTUzFfQklUUysxKTsKLSAgICBkYXRhcHRyW0RDVFNJWkUqN10gPSAoRENURUxFTSkgREVTQ0FMRSh0bXAxMywgQ09OU1RfQklUUytQQVNTMV9CSVRTKzEpOwotCi0gICAgZGF0YXB0cisrOwkJCS8qIGFkdmFuY2UgcG9pbnRlciB0byBuZXh0IGNvbHVtbiAqLwotICAgIHdzcHRyKys7CQkJLyogYWR2YW5jZSBwb2ludGVyIHRvIG5leHQgY29sdW1uICovCi0gIH0KLX0KLQotCi0vKgotICogUGVyZm9ybSB0aGUgZm9yd2FyZCBEQ1Qgb24gYSA3eDE0IHNhbXBsZSBibG9jay4KLSAqCi0gKiA3LXBvaW50IEZEQ1QgaW4gcGFzcyAxIChyb3dzKSwgMTQtcG9pbnQgaW4gcGFzcyAyIChjb2x1bW5zKS4KLSAqLwotCi1HTE9CQUwodm9pZCkKLWpwZWdfZmRjdF83eDE0IChEQ1RFTEVNICogZGF0YSwgSlNBTVBBUlJBWSBzYW1wbGVfZGF0YSwgSkRJTUVOU0lPTiBzdGFydF9jb2wpCi17Ci0gIElOVDMyIHRtcDAsIHRtcDEsIHRtcDIsIHRtcDMsIHRtcDQsIHRtcDUsIHRtcDY7Ci0gIElOVDMyIHRtcDEwLCB0bXAxMSwgdG1wMTIsIHRtcDEzLCB0bXAxNCwgdG1wMTUsIHRtcDE2OwotICBJTlQzMiB6MSwgejIsIHozOwotICBEQ1RFTEVNIHdvcmtzcGFjZVs4KjZdOwotICBEQ1RFTEVNICpkYXRhcHRyOwotICBEQ1RFTEVNICp3c3B0cjsKLSAgSlNBTVBST1cgZWxlbXB0cjsKLSAgaW50IGN0cjsKLSAgU0hJRlRfVEVNUFMKLQotICAvKiBQcmUtemVybyBvdXRwdXQgY29lZmZpY2llbnQgYmxvY2suICovCi0gIE1FTVpFUk8oZGF0YSwgU0laRU9GKERDVEVMRU0pICogRENUU0laRTIpOwotCi0gIC8qIFBhc3MgMTogcHJvY2VzcyByb3dzLiAqLwotICAvKiBOb3RlIHJlc3VsdHMgYXJlIHNjYWxlZCB1cCBieSBzcXJ0KDgpIGNvbXBhcmVkIHRvIGEgdHJ1ZSBEQ1Q7ICovCi0gIC8qIGZ1cnRoZXJtb3JlLCB3ZSBzY2FsZSB0aGUgcmVzdWx0cyBieSAyKipQQVNTMV9CSVRTLiAqLwotICAvKiA3LXBvaW50IEZEQ1Qga2VybmVsLCBjSyByZXByZXNlbnRzIHNxcnQoMikgKiBjb3MoSypwaS8xNCkuICovCi0KLSAgZGF0YXB0ciA9IGRhdGE7Ci0gIGN0ciA9IDA7Ci0gIGZvciAoOzspIHsKLSAgICBlbGVtcHRyID0gc2FtcGxlX2RhdGFbY3RyXSArIHN0YXJ0X2NvbDsKLQotICAgIC8qIEV2ZW4gcGFydCAqLwotCi0gICAgdG1wMCA9IEdFVEpTQU1QTEUoZWxlbXB0clswXSkgKyBHRVRKU0FNUExFKGVsZW1wdHJbNl0pOwotICAgIHRtcDEgPSBHRVRKU0FNUExFKGVsZW1wdHJbMV0pICsgR0VUSlNBTVBMRShlbGVtcHRyWzVdKTsKLSAgICB0bXAyID0gR0VUSlNBTVBMRShlbGVtcHRyWzJdKSArIEdFVEpTQU1QTEUoZWxlbXB0cls0XSk7Ci0gICAgdG1wMyA9IEdFVEpTQU1QTEUoZWxlbXB0clszXSk7Ci0KLSAgICB0bXAxMCA9IEdFVEpTQU1QTEUoZWxlbXB0clswXSkgLSBHRVRKU0FNUExFKGVsZW1wdHJbNl0pOwotICAgIHRtcDExID0gR0VUSlNBTVBMRShlbGVtcHRyWzFdKSAtIEdFVEpTQU1QTEUoZWxlbXB0cls1XSk7Ci0gICAgdG1wMTIgPSBHRVRKU0FNUExFKGVsZW1wdHJbMl0pIC0gR0VUSlNBTVBMRShlbGVtcHRyWzRdKTsKLQotICAgIHoxID0gdG1wMCArIHRtcDI7Ci0gICAgLyogQXBwbHkgdW5zaWduZWQtPnNpZ25lZCBjb252ZXJzaW9uICovCi0gICAgZGF0YXB0clswXSA9IChEQ1RFTEVNKQotICAgICAgKCh6MSArIHRtcDEgKyB0bXAzIC0gNyAqIENFTlRFUkpTQU1QTEUpIDw8IFBBU1MxX0JJVFMpOwotICAgIHRtcDMgKz0gdG1wMzsKLSAgICB6MSAtPSB0bXAzOwotICAgIHoxIC09IHRtcDM7Ci0gICAgejEgPSBNVUxUSVBMWSh6MSwgRklYKDAuMzUzNTUzMzkxKSk7ICAgICAgICAgICAgICAgIC8qIChjMitjNi1jNCkvMiAqLwotICAgIHoyID0gTVVMVElQTFkodG1wMCAtIHRtcDIsIEZJWCgwLjkyMDYwOTAwMikpOyAgICAgICAvKiAoYzIrYzQtYzYpLzIgKi8KLSAgICB6MyA9IE1VTFRJUExZKHRtcDEgLSB0bXAyLCBGSVgoMC4zMTQ2OTIxMjMpKTsgICAgICAgLyogYzYgKi8KLSAgICBkYXRhcHRyWzJdID0gKERDVEVMRU0pIERFU0NBTEUoejEgKyB6MiArIHozLCBDT05TVF9CSVRTLVBBU1MxX0JJVFMpOwotICAgIHoxIC09IHoyOwotICAgIHoyID0gTVVMVElQTFkodG1wMCAtIHRtcDEsIEZJWCgwLjg4MTc0NzczNCkpOyAgICAgICAvKiBjNCAqLwotICAgIGRhdGFwdHJbNF0gPSAoRENURUxFTSkKLSAgICAgIERFU0NBTEUoejIgKyB6MyAtIE1VTFRJUExZKHRtcDEgLSB0bXAzLCBGSVgoMC43MDcxMDY3ODEpKSwgLyogYzIrYzYtYzQgKi8KLQkgICAgICBDT05TVF9CSVRTLVBBU1MxX0JJVFMpOwotICAgIGRhdGFwdHJbNl0gPSAoRENURUxFTSkgREVTQ0FMRSh6MSArIHoyLCBDT05TVF9CSVRTLVBBU1MxX0JJVFMpOwotCi0gICAgLyogT2RkIHBhcnQgKi8KLQotICAgIHRtcDEgPSBNVUxUSVBMWSh0bXAxMCArIHRtcDExLCBGSVgoMC45MzU0MTQzNDcpKTsgICAvKiAoYzMrYzEtYzUpLzIgKi8KLSAgICB0bXAyID0gTVVMVElQTFkodG1wMTAgLSB0bXAxMSwgRklYKDAuMTcwMjYyMzM5KSk7ICAgLyogKGMzK2M1LWMxKS8yICovCi0gICAgdG1wMCA9IHRtcDEgLSB0bXAyOwotICAgIHRtcDEgKz0gdG1wMjsKLSAgICB0bXAyID0gTVVMVElQTFkodG1wMTEgKyB0bXAxMiwgLSBGSVgoMS4zNzg3NTYyNzYpKTsgLyogLWMxICovCi0gICAgdG1wMSArPSB0bXAyOwotICAgIHRtcDMgPSBNVUxUSVBMWSh0bXAxMCArIHRtcDEyLCBGSVgoMC42MTM2MDQyNjgpKTsgICAvKiBjNSAqLwotICAgIHRtcDAgKz0gdG1wMzsKLSAgICB0bXAyICs9IHRtcDMgKyBNVUxUSVBMWSh0bXAxMiwgRklYKDEuODcwODI4NjkzKSk7ICAgLyogYzMrYzEtYzUgKi8KLQotICAgIGRhdGFwdHJbMV0gPSAoRENURUxFTSkgREVTQ0FMRSh0bXAwLCBDT05TVF9CSVRTLVBBU1MxX0JJVFMpOwotICAgIGRhdGFwdHJbM10gPSAoRENURUxFTSkgREVTQ0FMRSh0bXAxLCBDT05TVF9CSVRTLVBBU1MxX0JJVFMpOwotICAgIGRhdGFwdHJbNV0gPSAoRENURUxFTSkgREVTQ0FMRSh0bXAyLCBDT05TVF9CSVRTLVBBU1MxX0JJVFMpOwotCi0gICAgY3RyKys7Ci0KLSAgICBpZiAoY3RyICE9IERDVFNJWkUpIHsKLSAgICAgIGlmIChjdHIgPT0gMTQpCi0JYnJlYWs7CQkJLyogRG9uZS4gKi8KLSAgICAgIGRhdGFwdHIgKz0gRENUU0laRTsJLyogYWR2YW5jZSBwb2ludGVyIHRvIG5leHQgcm93ICovCi0gICAgfSBlbHNlCi0gICAgICBkYXRhcHRyID0gd29ya3NwYWNlOwkvKiBzd2l0Y2ggcG9pbnRlciB0byBleHRlbmRlZCB3b3Jrc3BhY2UgKi8KLSAgfQotCi0gIC8qIFBhc3MgMjogcHJvY2VzcyBjb2x1bW5zLgotICAgKiBXZSByZW1vdmUgdGhlIFBBU1MxX0JJVFMgc2NhbGluZywgYnV0IGxlYXZlIHRoZSByZXN1bHRzIHNjYWxlZCB1cAotICAgKiBieSBhbiBvdmVyYWxsIGZhY3RvciBvZiA4LgotICAgKiBXZSBtdXN0IGFsc28gc2NhbGUgdGhlIG91dHB1dCBieSAoOC83KSooOC8xNCkgPSAzMi80OSwgd2hpY2ggd2UKLSAgICogZm9sZCBpbnRvIHRoZSBjb25zdGFudCBtdWx0aXBsaWVyczoKLSAgICogMTQtcG9pbnQgRkRDVCBrZXJuZWwsIGNLIHJlcHJlc2VudHMgc3FydCgyKSAqIGNvcyhLKnBpLzI4KSAqIDMyLzQ5LgotICAgKi8KLQotICBkYXRhcHRyID0gZGF0YTsKLSAgd3NwdHIgPSB3b3Jrc3BhY2U7Ci0gIGZvciAoY3RyID0gMDsgY3RyIDwgNzsgY3RyKyspIHsKLSAgICAvKiBFdmVuIHBhcnQgKi8KLQotICAgIHRtcDAgPSBkYXRhcHRyW0RDVFNJWkUqMF0gKyB3c3B0cltEQ1RTSVpFKjVdOwotICAgIHRtcDEgPSBkYXRhcHRyW0RDVFNJWkUqMV0gKyB3c3B0cltEQ1RTSVpFKjRdOwotICAgIHRtcDIgPSBkYXRhcHRyW0RDVFNJWkUqMl0gKyB3c3B0cltEQ1RTSVpFKjNdOwotICAgIHRtcDEzID0gZGF0YXB0cltEQ1RTSVpFKjNdICsgd3NwdHJbRENUU0laRSoyXTsKLSAgICB0bXA0ID0gZGF0YXB0cltEQ1RTSVpFKjRdICsgd3NwdHJbRENUU0laRSoxXTsKLSAgICB0bXA1ID0gZGF0YXB0cltEQ1RTSVpFKjVdICsgd3NwdHJbRENUU0laRSowXTsKLSAgICB0bXA2ID0gZGF0YXB0cltEQ1RTSVpFKjZdICsgZGF0YXB0cltEQ1RTSVpFKjddOwotCi0gICAgdG1wMTAgPSB0bXAwICsgdG1wNjsKLSAgICB0bXAxNCA9IHRtcDAgLSB0bXA2OwotICAgIHRtcDExID0gdG1wMSArIHRtcDU7Ci0gICAgdG1wMTUgPSB0bXAxIC0gdG1wNTsKLSAgICB0bXAxMiA9IHRtcDIgKyB0bXA0OwotICAgIHRtcDE2ID0gdG1wMiAtIHRtcDQ7Ci0KLSAgICB0bXAwID0gZGF0YXB0cltEQ1RTSVpFKjBdIC0gd3NwdHJbRENUU0laRSo1XTsKLSAgICB0bXAxID0gZGF0YXB0cltEQ1RTSVpFKjFdIC0gd3NwdHJbRENUU0laRSo0XTsKLSAgICB0bXAyID0gZGF0YXB0cltEQ1RTSVpFKjJdIC0gd3NwdHJbRENUU0laRSozXTsKLSAgICB0bXAzID0gZGF0YXB0cltEQ1RTSVpFKjNdIC0gd3NwdHJbRENUU0laRSoyXTsKLSAgICB0bXA0ID0gZGF0YXB0cltEQ1RTSVpFKjRdIC0gd3NwdHJbRENUU0laRSoxXTsKLSAgICB0bXA1ID0gZGF0YXB0cltEQ1RTSVpFKjVdIC0gd3NwdHJbRENUU0laRSowXTsKLSAgICB0bXA2ID0gZGF0YXB0cltEQ1RTSVpFKjZdIC0gZGF0YXB0cltEQ1RTSVpFKjddOwotCi0gICAgZGF0YXB0cltEQ1RTSVpFKjBdID0gKERDVEVMRU0pCi0gICAgICBERVNDQUxFKE1VTFRJUExZKHRtcDEwICsgdG1wMTEgKyB0bXAxMiArIHRtcDEzLAotCQkgICAgICAgRklYKDAuNjUzMDYxMjI0KSksICAgICAgICAgICAgICAgICAvKiAzMi80OSAqLwotCSAgICAgIENPTlNUX0JJVFMrUEFTUzFfQklUUyk7Ci0gICAgdG1wMTMgKz0gdG1wMTM7Ci0gICAgZGF0YXB0cltEQ1RTSVpFKjRdID0gKERDVEVMRU0pCi0gICAgICBERVNDQUxFKE1VTFRJUExZKHRtcDEwIC0gdG1wMTMsIEZJWCgwLjgzMjEwNjA1MikpICsgLyogYzQgKi8KLQkgICAgICBNVUxUSVBMWSh0bXAxMSAtIHRtcDEzLCBGSVgoMC4yMDU1MTMyMjMpKSAtIC8qIGMxMiAqLwotCSAgICAgIE1VTFRJUExZKHRtcDEyIC0gdG1wMTMsIEZJWCgwLjU3NTgzNTI1NSkpLCAgLyogYzggKi8KLQkgICAgICBDT05TVF9CSVRTK1BBU1MxX0JJVFMpOwotCi0gICAgdG1wMTAgPSBNVUxUSVBMWSh0bXAxNCArIHRtcDE1LCBGSVgoMC43MjIwNzQ1NzApKTsgICAgLyogYzYgKi8KLQotICAgIGRhdGFwdHJbRENUU0laRSoyXSA9IChEQ1RFTEVNKQotICAgICAgREVTQ0FMRSh0bXAxMCArIE1VTFRJUExZKHRtcDE0LCBGSVgoMC4xNzgzMzc2OTEpKSAgIC8qIGMyLWM2ICovCi0JICAgICAgKyBNVUxUSVBMWSh0bXAxNiwgRklYKDAuNDAwNzIxMTU1KSksICAgICAgICAvKiBjMTAgKi8KLQkgICAgICBDT05TVF9CSVRTK1BBU1MxX0JJVFMpOwotICAgIGRhdGFwdHJbRENUU0laRSo2XSA9IChEQ1RFTEVNKQotICAgICAgREVTQ0FMRSh0bXAxMCAtIE1VTFRJUExZKHRtcDE1LCBGSVgoMS4xMjI3OTU3MjUpKSAgIC8qIGM2K2MxMCAqLwotCSAgICAgIC0gTVVMVElQTFkodG1wMTYsIEZJWCgwLjkwMDQxMjI2MikpLCAgICAgICAgLyogYzIgKi8KLQkgICAgICBDT05TVF9CSVRTK1BBU1MxX0JJVFMpOwotCi0gICAgLyogT2RkIHBhcnQgKi8KLQotICAgIHRtcDEwID0gdG1wMSArIHRtcDI7Ci0gICAgdG1wMTEgPSB0bXA1IC0gdG1wNDsKLSAgICBkYXRhcHRyW0RDVFNJWkUqN10gPSAoRENURUxFTSkKLSAgICAgIERFU0NBTEUoTVVMVElQTFkodG1wMCAtIHRtcDEwICsgdG1wMyAtIHRtcDExIC0gdG1wNiwKLQkJICAgICAgIEZJWCgwLjY1MzA2MTIyNCkpLCAgICAgICAgICAgICAgICAgLyogMzIvNDkgKi8KLQkgICAgICBDT05TVF9CSVRTK1BBU1MxX0JJVFMpOwotICAgIHRtcDMgID0gTVVMVElQTFkodG1wMyAsIEZJWCgwLjY1MzA2MTIyNCkpOyAgICAgICAgICAgIC8qIDMyLzQ5ICovCi0gICAgdG1wMTAgPSBNVUxUSVBMWSh0bXAxMCwgLSBGSVgoMC4xMDM0MDY4MTIpKTsgICAgICAgICAgLyogLWMxMyAqLwotICAgIHRtcDExID0gTVVMVElQTFkodG1wMTEsIEZJWCgwLjkxNzc2MDgzOSkpOyAgICAgICAgICAgIC8qIGMxICovCi0gICAgdG1wMTAgKz0gdG1wMTEgLSB0bXAzOwotICAgIHRtcDExID0gTVVMVElQTFkodG1wMCArIHRtcDIsIEZJWCgwLjc4MjAwNzQxMCkpICsgICAgIC8qIGM1ICovCi0JICAgIE1VTFRJUExZKHRtcDQgKyB0bXA2LCBGSVgoMC40OTEzNjc4MjMpKTsgICAgICAvKiBjOSAqLwotICAgIGRhdGFwdHJbRENUU0laRSo1XSA9IChEQ1RFTEVNKQotICAgICAgREVTQ0FMRSh0bXAxMCArIHRtcDExIC0gTVVMVElQTFkodG1wMiwgRklYKDEuNTUwMzQxMDc2KSkgLyogYzMrYzUtYzEzICovCi0JICAgICAgKyBNVUxUSVBMWSh0bXA0LCBGSVgoMC43MzE0MjgyMDIpKSwgICAgICAgICAvKiBjMStjMTEtYzkgKi8KLQkgICAgICBDT05TVF9CSVRTK1BBU1MxX0JJVFMpOwotICAgIHRtcDEyID0gTVVMVElQTFkodG1wMCArIHRtcDEsIEZJWCgwLjg3MTc0MDQ3OCkpICsgICAgIC8qIGMzICovCi0JICAgIE1VTFRJUExZKHRtcDUgLSB0bXA2LCBGSVgoMC4zMDUwMzUxODYpKTsgICAgICAvKiBjMTEgKi8KLSAgICBkYXRhcHRyW0RDVFNJWkUqM10gPSAoRENURUxFTSkKLSAgICAgIERFU0NBTEUodG1wMTAgKyB0bXAxMiAtIE1VTFRJUExZKHRtcDEsIEZJWCgwLjI3Njk2NTg0NCkpIC8qIGMzLWM5LWMxMyAqLwotCSAgICAgIC0gTVVMVElQTFkodG1wNSwgRklYKDIuMDA0ODAzNDM1KSksICAgICAgICAgLyogYzErYzUrYzExICovCi0JICAgICAgQ09OU1RfQklUUytQQVNTMV9CSVRTKTsKLSAgICBkYXRhcHRyW0RDVFNJWkUqMV0gPSAoRENURUxFTSkKLSAgICAgIERFU0NBTEUodG1wMTEgKyB0bXAxMiArIHRtcDMKLQkgICAgICAtIE1VTFRJUExZKHRtcDAsIEZJWCgwLjczNTk4NzA0OSkpICAgICAgICAgIC8qIGMzK2M1LWMxICovCi0JICAgICAgLSBNVUxUSVBMWSh0bXA2LCBGSVgoMC4wODI5MjU4MjUpKSwgICAgICAgICAvKiBjOS1jMTEtYzEzICovCi0JICAgICAgQ09OU1RfQklUUytQQVNTMV9CSVRTKTsKLQotICAgIGRhdGFwdHIrKzsJCQkvKiBhZHZhbmNlIHBvaW50ZXIgdG8gbmV4dCBjb2x1bW4gKi8KLSAgICB3c3B0cisrOwkJCS8qIGFkdmFuY2UgcG9pbnRlciB0byBuZXh0IGNvbHVtbiAqLwotICB9Ci19Ci0KLQotLyoKLSAqIFBlcmZvcm0gdGhlIGZvcndhcmQgRENUIG9uIGEgNngxMiBzYW1wbGUgYmxvY2suCi0gKgotICogNi1wb2ludCBGRENUIGluIHBhc3MgMSAocm93cyksIDEyLXBvaW50IGluIHBhc3MgMiAoY29sdW1ucykuCi0gKi8KLQotR0xPQkFMKHZvaWQpCi1qcGVnX2ZkY3RfNngxMiAoRENURUxFTSAqIGRhdGEsIEpTQU1QQVJSQVkgc2FtcGxlX2RhdGEsIEpESU1FTlNJT04gc3RhcnRfY29sKQotewotICBJTlQzMiB0bXAwLCB0bXAxLCB0bXAyLCB0bXAzLCB0bXA0LCB0bXA1OwotICBJTlQzMiB0bXAxMCwgdG1wMTEsIHRtcDEyLCB0bXAxMywgdG1wMTQsIHRtcDE1OwotICBEQ1RFTEVNIHdvcmtzcGFjZVs4KjRdOwotICBEQ1RFTEVNICpkYXRhcHRyOwotICBEQ1RFTEVNICp3c3B0cjsKLSAgSlNBTVBST1cgZWxlbXB0cjsKLSAgaW50IGN0cjsKLSAgU0hJRlRfVEVNUFMKLQotICAvKiBQcmUtemVybyBvdXRwdXQgY29lZmZpY2llbnQgYmxvY2suICovCi0gIE1FTVpFUk8oZGF0YSwgU0laRU9GKERDVEVMRU0pICogRENUU0laRTIpOwotCi0gIC8qIFBhc3MgMTogcHJvY2VzcyByb3dzLiAqLwotICAvKiBOb3RlIHJlc3VsdHMgYXJlIHNjYWxlZCB1cCBieSBzcXJ0KDgpIGNvbXBhcmVkIHRvIGEgdHJ1ZSBEQ1Q7ICovCi0gIC8qIGZ1cnRoZXJtb3JlLCB3ZSBzY2FsZSB0aGUgcmVzdWx0cyBieSAyKipQQVNTMV9CSVRTLiAqLwotICAvKiA2LXBvaW50IEZEQ1Qga2VybmVsLCBjSyByZXByZXNlbnRzIHNxcnQoMikgKiBjb3MoSypwaS8xMikuICovCi0KLSAgZGF0YXB0ciA9IGRhdGE7Ci0gIGN0ciA9IDA7Ci0gIGZvciAoOzspIHsKLSAgICBlbGVtcHRyID0gc2FtcGxlX2RhdGFbY3RyXSArIHN0YXJ0X2NvbDsKLQotICAgIC8qIEV2ZW4gcGFydCAqLwotCi0gICAgdG1wMCA9IEdFVEpTQU1QTEUoZWxlbXB0clswXSkgKyBHRVRKU0FNUExFKGVsZW1wdHJbNV0pOwotICAgIHRtcDExID0gR0VUSlNBTVBMRShlbGVtcHRyWzFdKSArIEdFVEpTQU1QTEUoZWxlbXB0cls0XSk7Ci0gICAgdG1wMiA9IEdFVEpTQU1QTEUoZWxlbXB0clsyXSkgKyBHRVRKU0FNUExFKGVsZW1wdHJbM10pOwotCi0gICAgdG1wMTAgPSB0bXAwICsgdG1wMjsKLSAgICB0bXAxMiA9IHRtcDAgLSB0bXAyOwotCi0gICAgdG1wMCA9IEdFVEpTQU1QTEUoZWxlbXB0clswXSkgLSBHRVRKU0FNUExFKGVsZW1wdHJbNV0pOwotICAgIHRtcDEgPSBHRVRKU0FNUExFKGVsZW1wdHJbMV0pIC0gR0VUSlNBTVBMRShlbGVtcHRyWzRdKTsKLSAgICB0bXAyID0gR0VUSlNBTVBMRShlbGVtcHRyWzJdKSAtIEdFVEpTQU1QTEUoZWxlbXB0clszXSk7Ci0KLSAgICAvKiBBcHBseSB1bnNpZ25lZC0+c2lnbmVkIGNvbnZlcnNpb24gKi8KLSAgICBkYXRhcHRyWzBdID0gKERDVEVMRU0pCi0gICAgICAoKHRtcDEwICsgdG1wMTEgLSA2ICogQ0VOVEVSSlNBTVBMRSkgPDwgUEFTUzFfQklUUyk7Ci0gICAgZGF0YXB0clsyXSA9IChEQ1RFTEVNKQotICAgICAgREVTQ0FMRShNVUxUSVBMWSh0bXAxMiwgRklYKDEuMjI0NzQ0ODcxKSksICAgICAgICAgICAgICAgICAvKiBjMiAqLwotCSAgICAgIENPTlNUX0JJVFMtUEFTUzFfQklUUyk7Ci0gICAgZGF0YXB0cls0XSA9IChEQ1RFTEVNKQotICAgICAgREVTQ0FMRShNVUxUSVBMWSh0bXAxMCAtIHRtcDExIC0gdG1wMTEsIEZJWCgwLjcwNzEwNjc4MSkpLCAvKiBjNCAqLwotCSAgICAgIENPTlNUX0JJVFMtUEFTUzFfQklUUyk7Ci0KLSAgICAvKiBPZGQgcGFydCAqLwotCi0gICAgdG1wMTAgPSBERVNDQUxFKE1VTFRJUExZKHRtcDAgKyB0bXAyLCBGSVgoMC4zNjYwMjU0MDQpKSwgICAgIC8qIGM1ICovCi0JCSAgICBDT05TVF9CSVRTLVBBU1MxX0JJVFMpOwotCi0gICAgZGF0YXB0clsxXSA9IChEQ1RFTEVNKSAodG1wMTAgKyAoKHRtcDAgKyB0bXAxKSA8PCBQQVNTMV9CSVRTKSk7Ci0gICAgZGF0YXB0clszXSA9IChEQ1RFTEVNKSAoKHRtcDAgLSB0bXAxIC0gdG1wMikgPDwgUEFTUzFfQklUUyk7Ci0gICAgZGF0YXB0cls1XSA9IChEQ1RFTEVNKSAodG1wMTAgKyAoKHRtcDIgLSB0bXAxKSA8PCBQQVNTMV9CSVRTKSk7Ci0KLSAgICBjdHIrKzsKLQotICAgIGlmIChjdHIgIT0gRENUU0laRSkgewotICAgICAgaWYgKGN0ciA9PSAxMikKLQlicmVhazsJCQkvKiBEb25lLiAqLwotICAgICAgZGF0YXB0ciArPSBEQ1RTSVpFOwkvKiBhZHZhbmNlIHBvaW50ZXIgdG8gbmV4dCByb3cgKi8KLSAgICB9IGVsc2UKLSAgICAgIGRhdGFwdHIgPSB3b3Jrc3BhY2U7CS8qIHN3aXRjaCBwb2ludGVyIHRvIGV4dGVuZGVkIHdvcmtzcGFjZSAqLwotICB9Ci0KLSAgLyogUGFzcyAyOiBwcm9jZXNzIGNvbHVtbnMuCi0gICAqIFdlIHJlbW92ZSB0aGUgUEFTUzFfQklUUyBzY2FsaW5nLCBidXQgbGVhdmUgdGhlIHJlc3VsdHMgc2NhbGVkIHVwCi0gICAqIGJ5IGFuIG92ZXJhbGwgZmFjdG9yIG9mIDguCi0gICAqIFdlIG11c3QgYWxzbyBzY2FsZSB0aGUgb3V0cHV0IGJ5ICg4LzYpKig4LzEyKSA9IDgvOSwgd2hpY2ggd2UKLSAgICogZm9sZCBpbnRvIHRoZSBjb25zdGFudCBtdWx0aXBsaWVyczoKLSAgICogMTItcG9pbnQgRkRDVCBrZXJuZWwsIGNLIHJlcHJlc2VudHMgc3FydCgyKSAqIGNvcyhLKnBpLzI0KSAqIDgvOS4KLSAgICovCi0KLSAgZGF0YXB0ciA9IGRhdGE7Ci0gIHdzcHRyID0gd29ya3NwYWNlOwotICBmb3IgKGN0ciA9IDA7IGN0ciA8IDY7IGN0cisrKSB7Ci0gICAgLyogRXZlbiBwYXJ0ICovCi0KLSAgICB0bXAwID0gZGF0YXB0cltEQ1RTSVpFKjBdICsgd3NwdHJbRENUU0laRSozXTsKLSAgICB0bXAxID0gZGF0YXB0cltEQ1RTSVpFKjFdICsgd3NwdHJbRENUU0laRSoyXTsKLSAgICB0bXAyID0gZGF0YXB0cltEQ1RTSVpFKjJdICsgd3NwdHJbRENUU0laRSoxXTsKLSAgICB0bXAzID0gZGF0YXB0cltEQ1RTSVpFKjNdICsgd3NwdHJbRENUU0laRSowXTsKLSAgICB0bXA0ID0gZGF0YXB0cltEQ1RTSVpFKjRdICsgZGF0YXB0cltEQ1RTSVpFKjddOwotICAgIHRtcDUgPSBkYXRhcHRyW0RDVFNJWkUqNV0gKyBkYXRhcHRyW0RDVFNJWkUqNl07Ci0KLSAgICB0bXAxMCA9IHRtcDAgKyB0bXA1OwotICAgIHRtcDEzID0gdG1wMCAtIHRtcDU7Ci0gICAgdG1wMTEgPSB0bXAxICsgdG1wNDsKLSAgICB0bXAxNCA9IHRtcDEgLSB0bXA0OwotICAgIHRtcDEyID0gdG1wMiArIHRtcDM7Ci0gICAgdG1wMTUgPSB0bXAyIC0gdG1wMzsKLQotICAgIHRtcDAgPSBkYXRhcHRyW0RDVFNJWkUqMF0gLSB3c3B0cltEQ1RTSVpFKjNdOwotICAgIHRtcDEgPSBkYXRhcHRyW0RDVFNJWkUqMV0gLSB3c3B0cltEQ1RTSVpFKjJdOwotICAgIHRtcDIgPSBkYXRhcHRyW0RDVFNJWkUqMl0gLSB3c3B0cltEQ1RTSVpFKjFdOwotICAgIHRtcDMgPSBkYXRhcHRyW0RDVFNJWkUqM10gLSB3c3B0cltEQ1RTSVpFKjBdOwotICAgIHRtcDQgPSBkYXRhcHRyW0RDVFNJWkUqNF0gLSBkYXRhcHRyW0RDVFNJWkUqN107Ci0gICAgdG1wNSA9IGRhdGFwdHJbRENUU0laRSo1XSAtIGRhdGFwdHJbRENUU0laRSo2XTsKLQotICAgIGRhdGFwdHJbRENUU0laRSowXSA9IChEQ1RFTEVNKQotICAgICAgREVTQ0FMRShNVUxUSVBMWSh0bXAxMCArIHRtcDExICsgdG1wMTIsIEZJWCgwLjg4ODg4ODg4OSkpLCAvKiA4LzkgKi8KLQkgICAgICBDT05TVF9CSVRTK1BBU1MxX0JJVFMpOwotICAgIGRhdGFwdHJbRENUU0laRSo2XSA9IChEQ1RFTEVNKQotICAgICAgREVTQ0FMRShNVUxUSVBMWSh0bXAxMyAtIHRtcDE0IC0gdG1wMTUsIEZJWCgwLjg4ODg4ODg4OSkpLCAvKiA4LzkgKi8KLQkgICAgICBDT05TVF9CSVRTK1BBU1MxX0JJVFMpOwotICAgIGRhdGFwdHJbRENUU0laRSo0XSA9IChEQ1RFTEVNKQotICAgICAgREVTQ0FMRShNVUxUSVBMWSh0bXAxMCAtIHRtcDEyLCBGSVgoMS4wODg2NjIxMDgpKSwgICAgICAgICAvKiBjNCAqLwotCSAgICAgIENPTlNUX0JJVFMrUEFTUzFfQklUUyk7Ci0gICAgZGF0YXB0cltEQ1RTSVpFKjJdID0gKERDVEVMRU0pCi0gICAgICBERVNDQUxFKE1VTFRJUExZKHRtcDE0IC0gdG1wMTUsIEZJWCgwLjg4ODg4ODg4OSkpICsgICAgICAgIC8qIDgvOSAqLwotCSAgICAgIE1VTFRJUExZKHRtcDEzICsgdG1wMTUsIEZJWCgxLjIxNDI0NDgwMykpLCAgICAgICAgIC8qIGMyICovCi0JICAgICAgQ09OU1RfQklUUytQQVNTMV9CSVRTKTsKLQotICAgIC8qIE9kZCBwYXJ0ICovCi0KLSAgICB0bXAxMCA9IE1VTFRJUExZKHRtcDEgKyB0bXA0LCBGSVgoMC40ODEwNjMyMDApKTsgICAvKiBjOSAqLwotICAgIHRtcDE0ID0gdG1wMTAgKyBNVUxUSVBMWSh0bXAxLCBGSVgoMC42ODAzMjYxMDIpKTsgIC8qIGMzLWM5ICovCi0gICAgdG1wMTUgPSB0bXAxMCAtIE1VTFRJUExZKHRtcDQsIEZJWCgxLjY0MjQ1MjUwMikpOyAgLyogYzMrYzkgKi8KLSAgICB0bXAxMiA9IE1VTFRJUExZKHRtcDAgKyB0bXAyLCBGSVgoMC45OTczMDc2MDMpKTsgICAvKiBjNSAqLwotICAgIHRtcDEzID0gTVVMVElQTFkodG1wMCArIHRtcDMsIEZJWCgwLjc2NTI2MTAzOSkpOyAgIC8qIGM3ICovCi0gICAgdG1wMTAgPSB0bXAxMiArIHRtcDEzICsgdG1wMTQgLSBNVUxUSVBMWSh0bXAwLCBGSVgoMC41MTYyNDQ0MDMpKSAvKiBjNStjNy1jMSAqLwotCSAgICArIE1VTFRJUExZKHRtcDUsIEZJWCgwLjE2NDA4MTY5OSkpOyAgICAgICAgLyogYzExICovCi0gICAgdG1wMTEgPSBNVUxUSVBMWSh0bXAyICsgdG1wMywgLSBGSVgoMC4xNjQwODE2OTkpKTsgLyogLWMxMSAqLwotICAgIHRtcDEyICs9IHRtcDExIC0gdG1wMTUgLSBNVUxUSVBMWSh0bXAyLCBGSVgoMi4wNzk1NTAxNDQpKSAvKiBjMStjNS1jMTEgKi8KLQkgICAgKyBNVUxUSVBMWSh0bXA1LCBGSVgoMC43NjUyNjEwMzkpKTsgICAgICAgIC8qIGM3ICovCi0gICAgdG1wMTMgKz0gdG1wMTEgLSB0bXAxNCArIE1VTFRJUExZKHRtcDMsIEZJWCgwLjY0NTE0NDg5OSkpIC8qIGMxK2MxMS1jNyAqLwotCSAgICAtIE1VTFRJUExZKHRtcDUsIEZJWCgwLjk5NzMwNzYwMykpOyAgICAgICAgLyogYzUgKi8KLSAgICB0bXAxMSA9IHRtcDE1ICsgTVVMVElQTFkodG1wMCAtIHRtcDMsIEZJWCgxLjE2MTM4OTMwMikpIC8qIGMzICovCi0JICAgIC0gTVVMVElQTFkodG1wMiArIHRtcDUsIEZJWCgwLjQ4MTA2MzIwMCkpOyAvKiBjOSAqLwotCi0gICAgZGF0YXB0cltEQ1RTSVpFKjFdID0gKERDVEVMRU0pIERFU0NBTEUodG1wMTAsIENPTlNUX0JJVFMrUEFTUzFfQklUUyk7Ci0gICAgZGF0YXB0cltEQ1RTSVpFKjNdID0gKERDVEVMRU0pIERFU0NBTEUodG1wMTEsIENPTlNUX0JJVFMrUEFTUzFfQklUUyk7Ci0gICAgZGF0YXB0cltEQ1RTSVpFKjVdID0gKERDVEVMRU0pIERFU0NBTEUodG1wMTIsIENPTlNUX0JJVFMrUEFTUzFfQklUUyk7Ci0gICAgZGF0YXB0cltEQ1RTSVpFKjddID0gKERDVEVMRU0pIERFU0NBTEUodG1wMTMsIENPTlNUX0JJVFMrUEFTUzFfQklUUyk7Ci0KLSAgICBkYXRhcHRyKys7CQkJLyogYWR2YW5jZSBwb2ludGVyIHRvIG5leHQgY29sdW1uICovCi0gICAgd3NwdHIrKzsJCQkvKiBhZHZhbmNlIHBvaW50ZXIgdG8gbmV4dCBjb2x1bW4gKi8KLSAgfQotfQotCi0KLS8qCi0gKiBQZXJmb3JtIHRoZSBmb3J3YXJkIERDVCBvbiBhIDV4MTAgc2FtcGxlIGJsb2NrLgotICoKLSAqIDUtcG9pbnQgRkRDVCBpbiBwYXNzIDEgKHJvd3MpLCAxMC1wb2ludCBpbiBwYXNzIDIgKGNvbHVtbnMpLgotICovCi0KLUdMT0JBTCh2b2lkKQotanBlZ19mZGN0XzV4MTAgKERDVEVMRU0gKiBkYXRhLCBKU0FNUEFSUkFZIHNhbXBsZV9kYXRhLCBKRElNRU5TSU9OIHN0YXJ0X2NvbCkKLXsKLSAgSU5UMzIgdG1wMCwgdG1wMSwgdG1wMiwgdG1wMywgdG1wNDsKLSAgSU5UMzIgdG1wMTAsIHRtcDExLCB0bXAxMiwgdG1wMTMsIHRtcDE0OwotICBEQ1RFTEVNIHdvcmtzcGFjZVs4KjJdOwotICBEQ1RFTEVNICpkYXRhcHRyOwotICBEQ1RFTEVNICp3c3B0cjsKLSAgSlNBTVBST1cgZWxlbXB0cjsKLSAgaW50IGN0cjsKLSAgU0hJRlRfVEVNUFMKLQotICAvKiBQcmUtemVybyBvdXRwdXQgY29lZmZpY2llbnQgYmxvY2suICovCi0gIE1FTVpFUk8oZGF0YSwgU0laRU9GKERDVEVMRU0pICogRENUU0laRTIpOwotCi0gIC8qIFBhc3MgMTogcHJvY2VzcyByb3dzLiAqLwotICAvKiBOb3RlIHJlc3VsdHMgYXJlIHNjYWxlZCB1cCBieSBzcXJ0KDgpIGNvbXBhcmVkIHRvIGEgdHJ1ZSBEQ1Q7ICovCi0gIC8qIGZ1cnRoZXJtb3JlLCB3ZSBzY2FsZSB0aGUgcmVzdWx0cyBieSAyKipQQVNTMV9CSVRTLiAqLwotICAvKiA1LXBvaW50IEZEQ1Qga2VybmVsLCBjSyByZXByZXNlbnRzIHNxcnQoMikgKiBjb3MoSypwaS8xMCkuICovCi0KLSAgZGF0YXB0ciA9IGRhdGE7Ci0gIGN0ciA9IDA7Ci0gIGZvciAoOzspIHsKLSAgICBlbGVtcHRyID0gc2FtcGxlX2RhdGFbY3RyXSArIHN0YXJ0X2NvbDsKLQotICAgIC8qIEV2ZW4gcGFydCAqLwotCi0gICAgdG1wMCA9IEdFVEpTQU1QTEUoZWxlbXB0clswXSkgKyBHRVRKU0FNUExFKGVsZW1wdHJbNF0pOwotICAgIHRtcDEgPSBHRVRKU0FNUExFKGVsZW1wdHJbMV0pICsgR0VUSlNBTVBMRShlbGVtcHRyWzNdKTsKLSAgICB0bXAyID0gR0VUSlNBTVBMRShlbGVtcHRyWzJdKTsKLQotICAgIHRtcDEwID0gdG1wMCArIHRtcDE7Ci0gICAgdG1wMTEgPSB0bXAwIC0gdG1wMTsKLQotICAgIHRtcDAgPSBHRVRKU0FNUExFKGVsZW1wdHJbMF0pIC0gR0VUSlNBTVBMRShlbGVtcHRyWzRdKTsKLSAgICB0bXAxID0gR0VUSlNBTVBMRShlbGVtcHRyWzFdKSAtIEdFVEpTQU1QTEUoZWxlbXB0clszXSk7Ci0KLSAgICAvKiBBcHBseSB1bnNpZ25lZC0+c2lnbmVkIGNvbnZlcnNpb24gKi8KLSAgICBkYXRhcHRyWzBdID0gKERDVEVMRU0pCi0gICAgICAoKHRtcDEwICsgdG1wMiAtIDUgKiBDRU5URVJKU0FNUExFKSA8PCBQQVNTMV9CSVRTKTsKLSAgICB0bXAxMSA9IE1VTFRJUExZKHRtcDExLCBGSVgoMC43OTA1Njk0MTUpKTsgICAgICAgICAgLyogKGMyK2M0KS8yICovCi0gICAgdG1wMTAgLT0gdG1wMiA8PCAyOwotICAgIHRtcDEwID0gTVVMVElQTFkodG1wMTAsIEZJWCgwLjM1MzU1MzM5MSkpOyAgICAgICAgICAvKiAoYzItYzQpLzIgKi8KLSAgICBkYXRhcHRyWzJdID0gKERDVEVMRU0pIERFU0NBTEUodG1wMTEgKyB0bXAxMCwgQ09OU1RfQklUUy1QQVNTMV9CSVRTKTsKLSAgICBkYXRhcHRyWzRdID0gKERDVEVMRU0pIERFU0NBTEUodG1wMTEgLSB0bXAxMCwgQ09OU1RfQklUUy1QQVNTMV9CSVRTKTsKLQotICAgIC8qIE9kZCBwYXJ0ICovCi0KLSAgICB0bXAxMCA9IE1VTFRJUExZKHRtcDAgKyB0bXAxLCBGSVgoMC44MzEyNTM4NzYpKTsgICAgLyogYzMgKi8KLQotICAgIGRhdGFwdHJbMV0gPSAoRENURUxFTSkKLSAgICAgIERFU0NBTEUodG1wMTAgKyBNVUxUSVBMWSh0bXAwLCBGSVgoMC41MTM3NDMxNDgpKSwgLyogYzEtYzMgKi8KLQkgICAgICBDT05TVF9CSVRTLVBBU1MxX0JJVFMpOwotICAgIGRhdGFwdHJbM10gPSAoRENURUxFTSkKLSAgICAgIERFU0NBTEUodG1wMTAgLSBNVUxUSVBMWSh0bXAxLCBGSVgoMi4xNzYyNTA4OTkpKSwgLyogYzErYzMgKi8KLQkgICAgICBDT05TVF9CSVRTLVBBU1MxX0JJVFMpOwotCi0gICAgY3RyKys7Ci0KLSAgICBpZiAoY3RyICE9IERDVFNJWkUpIHsKLSAgICAgIGlmIChjdHIgPT0gMTApCi0JYnJlYWs7CQkJLyogRG9uZS4gKi8KLSAgICAgIGRhdGFwdHIgKz0gRENUU0laRTsJLyogYWR2YW5jZSBwb2ludGVyIHRvIG5leHQgcm93ICovCi0gICAgfSBlbHNlCi0gICAgICBkYXRhcHRyID0gd29ya3NwYWNlOwkvKiBzd2l0Y2ggcG9pbnRlciB0byBleHRlbmRlZCB3b3Jrc3BhY2UgKi8KLSAgfQotCi0gIC8qIFBhc3MgMjogcHJvY2VzcyBjb2x1bW5zLgotICAgKiBXZSByZW1vdmUgdGhlIFBBU1MxX0JJVFMgc2NhbGluZywgYnV0IGxlYXZlIHRoZSByZXN1bHRzIHNjYWxlZCB1cAotICAgKiBieSBhbiBvdmVyYWxsIGZhY3RvciBvZiA4LgotICAgKiBXZSBtdXN0IGFsc28gc2NhbGUgdGhlIG91dHB1dCBieSAoOC81KSooOC8xMCkgPSAzMi8yNSwgd2hpY2ggd2UKLSAgICogZm9sZCBpbnRvIHRoZSBjb25zdGFudCBtdWx0aXBsaWVyczoKLSAgICogMTAtcG9pbnQgRkRDVCBrZXJuZWwsIGNLIHJlcHJlc2VudHMgc3FydCgyKSAqIGNvcyhLKnBpLzIwKSAqIDMyLzI1LgotICAgKi8KLQotICBkYXRhcHRyID0gZGF0YTsKLSAgd3NwdHIgPSB3b3Jrc3BhY2U7Ci0gIGZvciAoY3RyID0gMDsgY3RyIDwgNTsgY3RyKyspIHsKLSAgICAvKiBFdmVuIHBhcnQgKi8KLQotICAgIHRtcDAgPSBkYXRhcHRyW0RDVFNJWkUqMF0gKyB3c3B0cltEQ1RTSVpFKjFdOwotICAgIHRtcDEgPSBkYXRhcHRyW0RDVFNJWkUqMV0gKyB3c3B0cltEQ1RTSVpFKjBdOwotICAgIHRtcDEyID0gZGF0YXB0cltEQ1RTSVpFKjJdICsgZGF0YXB0cltEQ1RTSVpFKjddOwotICAgIHRtcDMgPSBkYXRhcHRyW0RDVFNJWkUqM10gKyBkYXRhcHRyW0RDVFNJWkUqNl07Ci0gICAgdG1wNCA9IGRhdGFwdHJbRENUU0laRSo0XSArIGRhdGFwdHJbRENUU0laRSo1XTsKLQotICAgIHRtcDEwID0gdG1wMCArIHRtcDQ7Ci0gICAgdG1wMTMgPSB0bXAwIC0gdG1wNDsKLSAgICB0bXAxMSA9IHRtcDEgKyB0bXAzOwotICAgIHRtcDE0ID0gdG1wMSAtIHRtcDM7Ci0KLSAgICB0bXAwID0gZGF0YXB0cltEQ1RTSVpFKjBdIC0gd3NwdHJbRENUU0laRSoxXTsKLSAgICB0bXAxID0gZGF0YXB0cltEQ1RTSVpFKjFdIC0gd3NwdHJbRENUU0laRSowXTsKLSAgICB0bXAyID0gZGF0YXB0cltEQ1RTSVpFKjJdIC0gZGF0YXB0cltEQ1RTSVpFKjddOwotICAgIHRtcDMgPSBkYXRhcHRyW0RDVFNJWkUqM10gLSBkYXRhcHRyW0RDVFNJWkUqNl07Ci0gICAgdG1wNCA9IGRhdGFwdHJbRENUU0laRSo0XSAtIGRhdGFwdHJbRENUU0laRSo1XTsKLQotICAgIGRhdGFwdHJbRENUU0laRSowXSA9IChEQ1RFTEVNKQotICAgICAgREVTQ0FMRShNVUxUSVBMWSh0bXAxMCArIHRtcDExICsgdG1wMTIsIEZJWCgxLjI4KSksIC8qIDMyLzI1ICovCi0JICAgICAgQ09OU1RfQklUUytQQVNTMV9CSVRTKTsKLSAgICB0bXAxMiArPSB0bXAxMjsKLSAgICBkYXRhcHRyW0RDVFNJWkUqNF0gPSAoRENURUxFTSkKLSAgICAgIERFU0NBTEUoTVVMVElQTFkodG1wMTAgLSB0bXAxMiwgRklYKDEuNDY0NDc3MTkxKSkgLSAvKiBjNCAqLwotCSAgICAgIE1VTFRJUExZKHRtcDExIC0gdG1wMTIsIEZJWCgwLjU1OTM4MDUxMSkpLCAgLyogYzggKi8KLQkgICAgICBDT05TVF9CSVRTK1BBU1MxX0JJVFMpOwotICAgIHRtcDEwID0gTVVMVElQTFkodG1wMTMgKyB0bXAxNCwgRklYKDEuMDY0MDA0OTYxKSk7ICAgIC8qIGM2ICovCi0gICAgZGF0YXB0cltEQ1RTSVpFKjJdID0gKERDVEVMRU0pCi0gICAgICBERVNDQUxFKHRtcDEwICsgTVVMVElQTFkodG1wMTMsIEZJWCgwLjY1NzU5MTIzMCkpLCAgLyogYzItYzYgKi8KLQkgICAgICBDT05TVF9CSVRTK1BBU1MxX0JJVFMpOwotICAgIGRhdGFwdHJbRENUU0laRSo2XSA9IChEQ1RFTEVNKQotICAgICAgREVTQ0FMRSh0bXAxMCAtIE1VTFRJUExZKHRtcDE0LCBGSVgoMi43ODU2MDExNTEpKSwgIC8qIGMyK2M2ICovCi0JICAgICAgQ09OU1RfQklUUytQQVNTMV9CSVRTKTsKLQotICAgIC8qIE9kZCBwYXJ0ICovCi0KLSAgICB0bXAxMCA9IHRtcDAgKyB0bXA0OwotICAgIHRtcDExID0gdG1wMSAtIHRtcDM7Ci0gICAgZGF0YXB0cltEQ1RTSVpFKjVdID0gKERDVEVMRU0pCi0gICAgICBERVNDQUxFKE1VTFRJUExZKHRtcDEwIC0gdG1wMTEgLSB0bXAyLCBGSVgoMS4yOCkpLCAgLyogMzIvMjUgKi8KLQkgICAgICBDT05TVF9CSVRTK1BBU1MxX0JJVFMpOwotICAgIHRtcDIgPSBNVUxUSVBMWSh0bXAyLCBGSVgoMS4yOCkpOyAgICAgICAgICAgICAgICAgICAgIC8qIDMyLzI1ICovCi0gICAgZGF0YXB0cltEQ1RTSVpFKjFdID0gKERDVEVMRU0pCi0gICAgICBERVNDQUxFKE1VTFRJUExZKHRtcDAsIEZJWCgxLjc4NzkwNjg3NikpICsgICAgICAgICAgLyogYzEgKi8KLQkgICAgICBNVUxUSVBMWSh0bXAxLCBGSVgoMS42MTI4OTQwOTQpKSArIHRtcDIgKyAgIC8qIGMzICovCi0JICAgICAgTVVMVElQTFkodG1wMywgRklYKDAuODIxODEwNTg4KSkgKyAgICAgICAgICAvKiBjNyAqLwotCSAgICAgIE1VTFRJUExZKHRtcDQsIEZJWCgwLjI4MzE3NjYzMCkpLCAgICAgICAgICAgLyogYzkgKi8KLQkgICAgICBDT05TVF9CSVRTK1BBU1MxX0JJVFMpOwotICAgIHRtcDEyID0gTVVMVElQTFkodG1wMCAtIHRtcDQsIEZJWCgxLjIxNzM1MjM0MSkpIC0gICAgIC8qIChjMytjNykvMiAqLwotCSAgICBNVUxUSVBMWSh0bXAxICsgdG1wMywgRklYKDAuNzUyMzY1MTIzKSk7ICAgICAgLyogKGMxLWM5KS8yICovCi0gICAgdG1wMTMgPSBNVUxUSVBMWSh0bXAxMCArIHRtcDExLCBGSVgoMC4zOTU1NDE3NTMpKSArICAgLyogKGMzLWM3KS8yICovCi0JICAgIE1VTFRJUExZKHRtcDExLCBGSVgoMC42NCkpIC0gdG1wMjsgICAgICAgICAgICAvKiAxNi8yNSAqLwotICAgIGRhdGFwdHJbRENUU0laRSozXSA9IChEQ1RFTEVNKSBERVNDQUxFKHRtcDEyICsgdG1wMTMsIENPTlNUX0JJVFMrUEFTUzFfQklUUyk7Ci0gICAgZGF0YXB0cltEQ1RTSVpFKjddID0gKERDVEVMRU0pIERFU0NBTEUodG1wMTIgLSB0bXAxMywgQ09OU1RfQklUUytQQVNTMV9CSVRTKTsKLQotICAgIGRhdGFwdHIrKzsJCQkvKiBhZHZhbmNlIHBvaW50ZXIgdG8gbmV4dCBjb2x1bW4gKi8KLSAgICB3c3B0cisrOwkJCS8qIGFkdmFuY2UgcG9pbnRlciB0byBuZXh0IGNvbHVtbiAqLwotICB9Ci19Ci0KLQotLyoKLSAqIFBlcmZvcm0gdGhlIGZvcndhcmQgRENUIG9uIGEgNHg4IHNhbXBsZSBibG9jay4KLSAqCi0gKiA0LXBvaW50IEZEQ1QgaW4gcGFzcyAxIChyb3dzKSwgOC1wb2ludCBpbiBwYXNzIDIgKGNvbHVtbnMpLgotICovCi0KLUdMT0JBTCh2b2lkKQotanBlZ19mZGN0XzR4OCAoRENURUxFTSAqIGRhdGEsIEpTQU1QQVJSQVkgc2FtcGxlX2RhdGEsIEpESU1FTlNJT04gc3RhcnRfY29sKQotewotICBJTlQzMiB0bXAwLCB0bXAxLCB0bXAyLCB0bXAzOwotICBJTlQzMiB0bXAxMCwgdG1wMTEsIHRtcDEyLCB0bXAxMzsKLSAgSU5UMzIgejE7Ci0gIERDVEVMRU0gKmRhdGFwdHI7Ci0gIEpTQU1QUk9XIGVsZW1wdHI7Ci0gIGludCBjdHI7Ci0gIFNISUZUX1RFTVBTCi0KLSAgLyogUHJlLXplcm8gb3V0cHV0IGNvZWZmaWNpZW50IGJsb2NrLiAqLwotICBNRU1aRVJPKGRhdGEsIFNJWkVPRihEQ1RFTEVNKSAqIERDVFNJWkUyKTsKLQotICAvKiBQYXNzIDE6IHByb2Nlc3Mgcm93cy4gKi8KLSAgLyogTm90ZSByZXN1bHRzIGFyZSBzY2FsZWQgdXAgYnkgc3FydCg4KSBjb21wYXJlZCB0byBhIHRydWUgRENUOyAqLwotICAvKiBmdXJ0aGVybW9yZSwgd2Ugc2NhbGUgdGhlIHJlc3VsdHMgYnkgMioqUEFTUzFfQklUUy4gKi8KLSAgLyogV2UgbXVzdCBhbHNvIHNjYWxlIHRoZSBvdXRwdXQgYnkgOC80ID0gMiwgd2hpY2ggd2UgYWRkIGhlcmUuICovCi0gIC8qIDQtcG9pbnQgRkRDVCBrZXJuZWwsIGNLIHJlcHJlc2VudHMgc3FydCgyKSAqIGNvcyhLKnBpLzE2KS4gKi8KLQotICBkYXRhcHRyID0gZGF0YTsKLSAgZm9yIChjdHIgPSAwOyBjdHIgPCBEQ1RTSVpFOyBjdHIrKykgewotICAgIGVsZW1wdHIgPSBzYW1wbGVfZGF0YVtjdHJdICsgc3RhcnRfY29sOwotCi0gICAgLyogRXZlbiBwYXJ0ICovCi0KLSAgICB0bXAwID0gR0VUSlNBTVBMRShlbGVtcHRyWzBdKSArIEdFVEpTQU1QTEUoZWxlbXB0clszXSk7Ci0gICAgdG1wMSA9IEdFVEpTQU1QTEUoZWxlbXB0clsxXSkgKyBHRVRKU0FNUExFKGVsZW1wdHJbMl0pOwotCi0gICAgdG1wMTAgPSBHRVRKU0FNUExFKGVsZW1wdHJbMF0pIC0gR0VUSlNBTVBMRShlbGVtcHRyWzNdKTsKLSAgICB0bXAxMSA9IEdFVEpTQU1QTEUoZWxlbXB0clsxXSkgLSBHRVRKU0FNUExFKGVsZW1wdHJbMl0pOwotCi0gICAgLyogQXBwbHkgdW5zaWduZWQtPnNpZ25lZCBjb252ZXJzaW9uICovCi0gICAgZGF0YXB0clswXSA9IChEQ1RFTEVNKQotICAgICAgKCh0bXAwICsgdG1wMSAtIDQgKiBDRU5URVJKU0FNUExFKSA8PCAoUEFTUzFfQklUUysxKSk7Ci0gICAgZGF0YXB0clsyXSA9IChEQ1RFTEVNKSAoKHRtcDAgLSB0bXAxKSA8PCAoUEFTUzFfQklUUysxKSk7Ci0KLSAgICAvKiBPZGQgcGFydCAqLwotCi0gICAgdG1wMCA9IE1VTFRJUExZKHRtcDEwICsgdG1wMTEsIEZJWF8wXzU0MTE5NjEwMCk7ICAgICAgIC8qIGM2ICovCi0gICAgLyogQWRkIGZ1ZGdlIGZhY3RvciBoZXJlIGZvciBmaW5hbCBkZXNjYWxlLiAqLwotICAgIHRtcDAgKz0gT05FIDw8IChDT05TVF9CSVRTLVBBU1MxX0JJVFMtMik7Ci0KLSAgICBkYXRhcHRyWzFdID0gKERDVEVMRU0pCi0gICAgICBSSUdIVF9TSElGVCh0bXAwICsgTVVMVElQTFkodG1wMTAsIEZJWF8wXzc2NTM2Njg2NSksIC8qIGMyLWM2ICovCi0JCSAgQ09OU1RfQklUUy1QQVNTMV9CSVRTLTEpOwotICAgIGRhdGFwdHJbM10gPSAoRENURUxFTSkKLSAgICAgIFJJR0hUX1NISUZUKHRtcDAgLSBNVUxUSVBMWSh0bXAxMSwgRklYXzFfODQ3NzU5MDY1KSwgLyogYzIrYzYgKi8KLQkJICBDT05TVF9CSVRTLVBBU1MxX0JJVFMtMSk7Ci0KKyAgICAKKyAgICB6MSA9IHRtcDQgKyB0bXA3OworICAgIHoyID0gdG1wNSArIHRtcDY7CisgICAgejMgPSB0bXA0ICsgdG1wNjsKKyAgICB6NCA9IHRtcDUgKyB0bXA3OworICAgIHo1ID0gTVVMVElQTFkoejMgKyB6NCwgRklYXzFfMTc1ODc1NjAyKTsgLyogc3FydCgyKSAqIGMzICovCisgICAgCisgICAgdG1wNCA9IE1VTFRJUExZKHRtcDQsIEZJWF8wXzI5ODYzMTMzNik7IC8qIHNxcnQoMikgKiAoLWMxK2MzK2M1LWM3KSAqLworICAgIHRtcDUgPSBNVUxUSVBMWSh0bXA1LCBGSVhfMl8wNTMxMTk4NjkpOyAvKiBzcXJ0KDIpICogKCBjMStjMy1jNStjNykgKi8KKyAgICB0bXA2ID0gTVVMVElQTFkodG1wNiwgRklYXzNfMDcyNzExMDI2KTsgLyogc3FydCgyKSAqICggYzErYzMrYzUtYzcpICovCisgICAgdG1wNyA9IE1VTFRJUExZKHRtcDcsIEZJWF8xXzUwMTMyMTExMCk7IC8qIHNxcnQoMikgKiAoIGMxK2MzLWM1LWM3KSAqLworICAgIHoxID0gTVVMVElQTFkoejEsIC0gRklYXzBfODk5OTc2MjIzKTsgLyogc3FydCgyKSAqIChjNy1jMykgKi8KKyAgICB6MiA9IE1VTFRJUExZKHoyLCAtIEZJWF8yXzU2MjkxNTQ0Nyk7IC8qIHNxcnQoMikgKiAoLWMxLWMzKSAqLworICAgIHozID0gTVVMVElQTFkoejMsIC0gRklYXzFfOTYxNTcwNTYwKTsgLyogc3FydCgyKSAqICgtYzMtYzUpICovCisgICAgejQgPSBNVUxUSVBMWSh6NCwgLSBGSVhfMF8zOTAxODA2NDQpOyAvKiBzcXJ0KDIpICogKGM1LWMzKSAqLworICAgIAorICAgIHozICs9IHo1OworICAgIHo0ICs9IHo1OworICAgIAorICAgIGRhdGFwdHJbN10gPSAoRENURUxFTSkgREVTQ0FMRSh0bXA0ICsgejEgKyB6MywgQ09OU1RfQklUUy1QQVNTMV9CSVRTKTsKKyAgICBkYXRhcHRyWzVdID0gKERDVEVMRU0pIERFU0NBTEUodG1wNSArIHoyICsgejQsIENPTlNUX0JJVFMtUEFTUzFfQklUUyk7CisgICAgZGF0YXB0clszXSA9IChEQ1RFTEVNKSBERVNDQUxFKHRtcDYgKyB6MiArIHozLCBDT05TVF9CSVRTLVBBU1MxX0JJVFMpOworICAgIGRhdGFwdHJbMV0gPSAoRENURUxFTSkgREVTQ0FMRSh0bXA3ICsgejEgKyB6NCwgQ09OU1RfQklUUy1QQVNTMV9CSVRTKTsKKyAgICAKICAgICBkYXRhcHRyICs9IERDVFNJWkU7CQkvKiBhZHZhbmNlIHBvaW50ZXIgdG8gbmV4dCByb3cgKi8KICAgfQogCkBAIC00MDYwLDI4OSArMjE2LDY4IEBACiAgICAqLwogCiAgIGRhdGFwdHIgPSBkYXRhOwotICBmb3IgKGN0ciA9IDA7IGN0ciA8IDQ7IGN0cisrKSB7CisgIGZvciAoY3RyID0gRENUU0laRS0xOyBjdHIgPj0gMDsgY3RyLS0pIHsKKyAgICB0bXAwID0gZGF0YXB0cltEQ1RTSVpFKjBdICsgZGF0YXB0cltEQ1RTSVpFKjddOworICAgIHRtcDcgPSBkYXRhcHRyW0RDVFNJWkUqMF0gLSBkYXRhcHRyW0RDVFNJWkUqN107CisgICAgdG1wMSA9IGRhdGFwdHJbRENUU0laRSoxXSArIGRhdGFwdHJbRENUU0laRSo2XTsKKyAgICB0bXA2ID0gZGF0YXB0cltEQ1RTSVpFKjFdIC0gZGF0YXB0cltEQ1RTSVpFKjZdOworICAgIHRtcDIgPSBkYXRhcHRyW0RDVFNJWkUqMl0gKyBkYXRhcHRyW0RDVFNJWkUqNV07CisgICAgdG1wNSA9IGRhdGFwdHJbRENUU0laRSoyXSAtIGRhdGFwdHJbRENUU0laRSo1XTsKKyAgICB0bXAzID0gZGF0YXB0cltEQ1RTSVpFKjNdICsgZGF0YXB0cltEQ1RTSVpFKjRdOworICAgIHRtcDQgPSBkYXRhcHRyW0RDVFNJWkUqM10gLSBkYXRhcHRyW0RDVFNJWkUqNF07CisgICAgCiAgICAgLyogRXZlbiBwYXJ0IHBlciBMTCZNIGZpZ3VyZSAxIC0tLSBub3RlIHRoYXQgcHVibGlzaGVkIGZpZ3VyZSBpcyBmYXVsdHk7CiAgICAgICogcm90YXRvciAic3FydCgyKSpjMSIgc2hvdWxkIGJlICJzcXJ0KDIpKmM2Ii4KICAgICAgKi8KLQotICAgIHRtcDAgPSBkYXRhcHRyW0RDVFNJWkUqMF0gKyBkYXRhcHRyW0RDVFNJWkUqN107Ci0gICAgdG1wMSA9IGRhdGFwdHJbRENUU0laRSoxXSArIGRhdGFwdHJbRENUU0laRSo2XTsKLSAgICB0bXAyID0gZGF0YXB0cltEQ1RTSVpFKjJdICsgZGF0YXB0cltEQ1RTSVpFKjVdOwotICAgIHRtcDMgPSBkYXRhcHRyW0RDVFNJWkUqM10gKyBkYXRhcHRyW0RDVFNJWkUqNF07Ci0KLSAgICAvKiBBZGQgZnVkZ2UgZmFjdG9yIGhlcmUgZm9yIGZpbmFsIGRlc2NhbGUuICovCi0gICAgdG1wMTAgPSB0bXAwICsgdG1wMyArIChPTkUgPDwgKFBBU1MxX0JJVFMtMSkpOwotICAgIHRtcDEyID0gdG1wMCAtIHRtcDM7Ci0gICAgdG1wMTEgPSB0bXAxICsgdG1wMjsKLSAgICB0bXAxMyA9IHRtcDEgLSB0bXAyOwotCi0gICAgdG1wMCA9IGRhdGFwdHJbRENUU0laRSowXSAtIGRhdGFwdHJbRENUU0laRSo3XTsKLSAgICB0bXAxID0gZGF0YXB0cltEQ1RTSVpFKjFdIC0gZGF0YXB0cltEQ1RTSVpFKjZdOwotICAgIHRtcDIgPSBkYXRhcHRyW0RDVFNJWkUqMl0gLSBkYXRhcHRyW0RDVFNJWkUqNV07Ci0gICAgdG1wMyA9IGRhdGFwdHJbRENUU0laRSozXSAtIGRhdGFwdHJbRENUU0laRSo0XTsKLQotICAgIGRhdGFwdHJbRENUU0laRSowXSA9IChEQ1RFTEVNKSBSSUdIVF9TSElGVCh0bXAxMCArIHRtcDExLCBQQVNTMV9CSVRTKTsKLSAgICBkYXRhcHRyW0RDVFNJWkUqNF0gPSAoRENURUxFTSkgUklHSFRfU0hJRlQodG1wMTAgLSB0bXAxMSwgUEFTUzFfQklUUyk7Ci0KLSAgICB6MSA9IE1VTFRJUExZKHRtcDEyICsgdG1wMTMsIEZJWF8wXzU0MTE5NjEwMCk7Ci0gICAgLyogQWRkIGZ1ZGdlIGZhY3RvciBoZXJlIGZvciBmaW5hbCBkZXNjYWxlLiAqLwotICAgIHoxICs9IE9ORSA8PCAoQ09OU1RfQklUUytQQVNTMV9CSVRTLTEpOwotICAgIGRhdGFwdHJbRENUU0laRSoyXSA9IChEQ1RFTEVNKQotICAgICAgUklHSFRfU0hJRlQoejEgKyBNVUxUSVBMWSh0bXAxMiwgRklYXzBfNzY1MzY2ODY1KSwgQ09OU1RfQklUUytQQVNTMV9CSVRTKTsKLSAgICBkYXRhcHRyW0RDVFNJWkUqNl0gPSAoRENURUxFTSkKLSAgICAgIFJJR0hUX1NISUZUKHoxIC0gTVVMVElQTFkodG1wMTMsIEZJWF8xXzg0Nzc1OTA2NSksIENPTlNUX0JJVFMrUEFTUzFfQklUUyk7Ci0KLSAgICAvKiBPZGQgcGFydCBwZXIgZmlndXJlIDggLS0tIG5vdGUgcGFwZXIgb21pdHMgZmFjdG9yIG9mIHNxcnQoMikuCi0gICAgICogOC1wb2ludCBGRENUIGtlcm5lbCwgY0sgcmVwcmVzZW50cyBzcXJ0KDIpICogY29zKEsqcGkvMTYpLgotICAgICAqIGkwLi5pMyBpbiB0aGUgcGFwZXIgYXJlIHRtcDAuLnRtcDMgaGVyZS4KLSAgICAgKi8KLQorICAgIAogICAgIHRtcDEwID0gdG1wMCArIHRtcDM7CisgICAgdG1wMTMgPSB0bXAwIC0gdG1wMzsKICAgICB0bXAxMSA9IHRtcDEgKyB0bXAyOwotICAgIHRtcDEyID0gdG1wMCArIHRtcDI7Ci0gICAgdG1wMTMgPSB0bXAxICsgdG1wMzsKLSAgICB6MSA9IE1VTFRJUExZKHRtcDEyICsgdG1wMTMsIEZJWF8xXzE3NTg3NTYwMik7IC8qICBjMyAqLwotICAgIC8qIEFkZCBmdWRnZSBmYWN0b3IgaGVyZSBmb3IgZmluYWwgZGVzY2FsZS4gKi8KLSAgICB6MSArPSBPTkUgPDwgKENPTlNUX0JJVFMrUEFTUzFfQklUUy0xKTsKLQotICAgIHRtcDAgID0gTVVMVElQTFkodG1wMCwgICAgRklYXzFfNTAxMzIxMTEwKTsgICAgLyogIGMxK2MzLWM1LWM3ICovCi0gICAgdG1wMSAgPSBNVUxUSVBMWSh0bXAxLCAgICBGSVhfM18wNzI3MTEwMjYpOyAgICAvKiAgYzErYzMrYzUtYzcgKi8KLSAgICB0bXAyICA9IE1VTFRJUExZKHRtcDIsICAgIEZJWF8yXzA1MzExOTg2OSk7ICAgIC8qICBjMStjMy1jNStjNyAqLwotICAgIHRtcDMgID0gTVVMVElQTFkodG1wMywgICAgRklYXzBfMjk4NjMxMzM2KTsgICAgLyogLWMxK2MzK2M1LWM3ICovCi0gICAgdG1wMTAgPSBNVUxUSVBMWSh0bXAxMCwgLSBGSVhfMF84OTk5NzYyMjMpOyAgICAvKiAgYzctYzMgKi8KLSAgICB0bXAxMSA9IE1VTFRJUExZKHRtcDExLCAtIEZJWF8yXzU2MjkxNTQ0Nyk7ICAgIC8qIC1jMS1jMyAqLwotICAgIHRtcDEyID0gTVVMVElQTFkodG1wMTIsIC0gRklYXzBfMzkwMTgwNjQ0KTsgICAgLyogIGM1LWMzICovCi0gICAgdG1wMTMgPSBNVUxUSVBMWSh0bXAxMywgLSBGSVhfMV85NjE1NzA1NjApOyAgICAvKiAtYzMtYzUgKi8KLQotICAgIHRtcDEyICs9IHoxOwotICAgIHRtcDEzICs9IHoxOwotCi0gICAgZGF0YXB0cltEQ1RTSVpFKjFdID0gKERDVEVMRU0pCi0gICAgICBSSUdIVF9TSElGVCh0bXAwICsgdG1wMTAgKyB0bXAxMiwgQ09OU1RfQklUUytQQVNTMV9CSVRTKTsKLSAgICBkYXRhcHRyW0RDVFNJWkUqM10gPSAoRENURUxFTSkKLSAgICAgIFJJR0hUX1NISUZUKHRtcDEgKyB0bXAxMSArIHRtcDEzLCBDT05TVF9CSVRTK1BBU1MxX0JJVFMpOwotICAgIGRhdGFwdHJbRENUU0laRSo1XSA9IChEQ1RFTEVNKQotICAgICAgUklHSFRfU0hJRlQodG1wMiArIHRtcDExICsgdG1wMTIsIENPTlNUX0JJVFMrUEFTUzFfQklUUyk7Ci0gICAgZGF0YXB0cltEQ1RTSVpFKjddID0gKERDVEVMRU0pCi0gICAgICBSSUdIVF9TSElGVCh0bXAzICsgdG1wMTAgKyB0bXAxMywgQ09OU1RfQklUUytQQVNTMV9CSVRTKTsKLQorICAgIHRtcDEyID0gdG1wMSAtIHRtcDI7CisgICAgCisgICAgZGF0YXB0cltEQ1RTSVpFKjBdID0gKERDVEVMRU0pIERFU0NBTEUodG1wMTAgKyB0bXAxMSwgUEFTUzFfQklUUyk7CisgICAgZGF0YXB0cltEQ1RTSVpFKjRdID0gKERDVEVMRU0pIERFU0NBTEUodG1wMTAgLSB0bXAxMSwgUEFTUzFfQklUUyk7CisgICAgCisgICAgejEgPSBNVUxUSVBMWSh0bXAxMiArIHRtcDEzLCBGSVhfMF81NDExOTYxMDApOworICAgIGRhdGFwdHJbRENUU0laRSoyXSA9IChEQ1RFTEVNKSBERVNDQUxFKHoxICsgTVVMVElQTFkodG1wMTMsIEZJWF8wXzc2NTM2Njg2NSksCisJCQkJCSAgIENPTlNUX0JJVFMrUEFTUzFfQklUUyk7CisgICAgZGF0YXB0cltEQ1RTSVpFKjZdID0gKERDVEVMRU0pIERFU0NBTEUoejEgKyBNVUxUSVBMWSh0bXAxMiwgLSBGSVhfMV84NDc3NTkwNjUpLAorCQkJCQkgICBDT05TVF9CSVRTK1BBU1MxX0JJVFMpOworICAgIAorICAgIC8qIE9kZCBwYXJ0IHBlciBmaWd1cmUgOCAtLS0gbm90ZSBwYXBlciBvbWl0cyBmYWN0b3Igb2Ygc3FydCgyKS4KKyAgICAgKiBjSyByZXByZXNlbnRzIGNvcyhLKnBpLzE2KS4KKyAgICAgKiBpMC4uaTMgaW4gdGhlIHBhcGVyIGFyZSB0bXA0Li50bXA3IGhlcmUuCisgICAgICovCisgICAgCisgICAgejEgPSB0bXA0ICsgdG1wNzsKKyAgICB6MiA9IHRtcDUgKyB0bXA2OworICAgIHozID0gdG1wNCArIHRtcDY7CisgICAgejQgPSB0bXA1ICsgdG1wNzsKKyAgICB6NSA9IE1VTFRJUExZKHozICsgejQsIEZJWF8xXzE3NTg3NTYwMik7IC8qIHNxcnQoMikgKiBjMyAqLworICAgIAorICAgIHRtcDQgPSBNVUxUSVBMWSh0bXA0LCBGSVhfMF8yOTg2MzEzMzYpOyAvKiBzcXJ0KDIpICogKC1jMStjMytjNS1jNykgKi8KKyAgICB0bXA1ID0gTVVMVElQTFkodG1wNSwgRklYXzJfMDUzMTE5ODY5KTsgLyogc3FydCgyKSAqICggYzErYzMtYzUrYzcpICovCisgICAgdG1wNiA9IE1VTFRJUExZKHRtcDYsIEZJWF8zXzA3MjcxMTAyNik7IC8qIHNxcnQoMikgKiAoIGMxK2MzK2M1LWM3KSAqLworICAgIHRtcDcgPSBNVUxUSVBMWSh0bXA3LCBGSVhfMV81MDEzMjExMTApOyAvKiBzcXJ0KDIpICogKCBjMStjMy1jNS1jNykgKi8KKyAgICB6MSA9IE1VTFRJUExZKHoxLCAtIEZJWF8wXzg5OTk3NjIyMyk7IC8qIHNxcnQoMikgKiAoYzctYzMpICovCisgICAgejIgPSBNVUxUSVBMWSh6MiwgLSBGSVhfMl81NjI5MTU0NDcpOyAvKiBzcXJ0KDIpICogKC1jMS1jMykgKi8KKyAgICB6MyA9IE1VTFRJUExZKHozLCAtIEZJWF8xXzk2MTU3MDU2MCk7IC8qIHNxcnQoMikgKiAoLWMzLWM1KSAqLworICAgIHo0ID0gTVVMVElQTFkoejQsIC0gRklYXzBfMzkwMTgwNjQ0KTsgLyogc3FydCgyKSAqIChjNS1jMykgKi8KKyAgICAKKyAgICB6MyArPSB6NTsKKyAgICB6NCArPSB6NTsKKyAgICAKKyAgICBkYXRhcHRyW0RDVFNJWkUqN10gPSAoRENURUxFTSkgREVTQ0FMRSh0bXA0ICsgejEgKyB6MywKKwkJCQkJICAgQ09OU1RfQklUUytQQVNTMV9CSVRTKTsKKyAgICBkYXRhcHRyW0RDVFNJWkUqNV0gPSAoRENURUxFTSkgREVTQ0FMRSh0bXA1ICsgejIgKyB6NCwKKwkJCQkJICAgQ09OU1RfQklUUytQQVNTMV9CSVRTKTsKKyAgICBkYXRhcHRyW0RDVFNJWkUqM10gPSAoRENURUxFTSkgREVTQ0FMRSh0bXA2ICsgejIgKyB6MywKKwkJCQkJICAgQ09OU1RfQklUUytQQVNTMV9CSVRTKTsKKyAgICBkYXRhcHRyW0RDVFNJWkUqMV0gPSAoRENURUxFTSkgREVTQ0FMRSh0bXA3ICsgejEgKyB6NCwKKwkJCQkJICAgQ09OU1RfQklUUytQQVNTMV9CSVRTKTsKKyAgICAKICAgICBkYXRhcHRyKys7CQkJLyogYWR2YW5jZSBwb2ludGVyIHRvIG5leHQgY29sdW1uICovCiAgIH0KIH0KIAotCi0vKgotICogUGVyZm9ybSB0aGUgZm9yd2FyZCBEQ1Qgb24gYSAzeDYgc2FtcGxlIGJsb2NrLgotICoKLSAqIDMtcG9pbnQgRkRDVCBpbiBwYXNzIDEgKHJvd3MpLCA2LXBvaW50IGluIHBhc3MgMiAoY29sdW1ucykuCi0gKi8KLQotR0xPQkFMKHZvaWQpCi1qcGVnX2ZkY3RfM3g2IChEQ1RFTEVNICogZGF0YSwgSlNBTVBBUlJBWSBzYW1wbGVfZGF0YSwgSkRJTUVOU0lPTiBzdGFydF9jb2wpCi17Ci0gIElOVDMyIHRtcDAsIHRtcDEsIHRtcDI7Ci0gIElOVDMyIHRtcDEwLCB0bXAxMSwgdG1wMTI7Ci0gIERDVEVMRU0gKmRhdGFwdHI7Ci0gIEpTQU1QUk9XIGVsZW1wdHI7Ci0gIGludCBjdHI7Ci0gIFNISUZUX1RFTVBTCi0KLSAgLyogUHJlLXplcm8gb3V0cHV0IGNvZWZmaWNpZW50IGJsb2NrLiAqLwotICBNRU1aRVJPKGRhdGEsIFNJWkVPRihEQ1RFTEVNKSAqIERDVFNJWkUyKTsKLQotICAvKiBQYXNzIDE6IHByb2Nlc3Mgcm93cy4gKi8KLSAgLyogTm90ZSByZXN1bHRzIGFyZSBzY2FsZWQgdXAgYnkgc3FydCg4KSBjb21wYXJlZCB0byBhIHRydWUgRENUOyAqLwotICAvKiBmdXJ0aGVybW9yZSwgd2Ugc2NhbGUgdGhlIHJlc3VsdHMgYnkgMioqUEFTUzFfQklUUy4gKi8KLSAgLyogV2Ugc2NhbGUgdGhlIHJlc3VsdHMgZnVydGhlciBieSAyIGFzIHBhcnQgb2Ygb3V0cHV0IGFkYXB0aW9uICovCi0gIC8qIHNjYWxpbmcgZm9yIGRpZmZlcmVudCBEQ1Qgc2l6ZS4gKi8KLSAgLyogMy1wb2ludCBGRENUIGtlcm5lbCwgY0sgcmVwcmVzZW50cyBzcXJ0KDIpICogY29zKEsqcGkvNikuICovCi0KLSAgZGF0YXB0ciA9IGRhdGE7Ci0gIGZvciAoY3RyID0gMDsgY3RyIDwgNjsgY3RyKyspIHsKLSAgICBlbGVtcHRyID0gc2FtcGxlX2RhdGFbY3RyXSArIHN0YXJ0X2NvbDsKLQotICAgIC8qIEV2ZW4gcGFydCAqLwotCi0gICAgdG1wMCA9IEdFVEpTQU1QTEUoZWxlbXB0clswXSkgKyBHRVRKU0FNUExFKGVsZW1wdHJbMl0pOwotICAgIHRtcDEgPSBHRVRKU0FNUExFKGVsZW1wdHJbMV0pOwotCi0gICAgdG1wMiA9IEdFVEpTQU1QTEUoZWxlbXB0clswXSkgLSBHRVRKU0FNUExFKGVsZW1wdHJbMl0pOwotCi0gICAgLyogQXBwbHkgdW5zaWduZWQtPnNpZ25lZCBjb252ZXJzaW9uICovCi0gICAgZGF0YXB0clswXSA9IChEQ1RFTEVNKQotICAgICAgKCh0bXAwICsgdG1wMSAtIDMgKiBDRU5URVJKU0FNUExFKSA8PCAoUEFTUzFfQklUUysxKSk7Ci0gICAgZGF0YXB0clsyXSA9IChEQ1RFTEVNKQotICAgICAgREVTQ0FMRShNVUxUSVBMWSh0bXAwIC0gdG1wMSAtIHRtcDEsIEZJWCgwLjcwNzEwNjc4MSkpLCAvKiBjMiAqLwotCSAgICAgIENPTlNUX0JJVFMtUEFTUzFfQklUUy0xKTsKLQotICAgIC8qIE9kZCBwYXJ0ICovCi0KLSAgICBkYXRhcHRyWzFdID0gKERDVEVMRU0pCi0gICAgICBERVNDQUxFKE1VTFRJUExZKHRtcDIsIEZJWCgxLjIyNDc0NDg3MSkpLCAgICAgICAgICAgICAgIC8qIGMxICovCi0JICAgICAgQ09OU1RfQklUUy1QQVNTMV9CSVRTLTEpOwotCi0gICAgZGF0YXB0ciArPSBEQ1RTSVpFOwkJLyogYWR2YW5jZSBwb2ludGVyIHRvIG5leHQgcm93ICovCi0gIH0KLQotICAvKiBQYXNzIDI6IHByb2Nlc3MgY29sdW1ucy4KLSAgICogV2UgcmVtb3ZlIHRoZSBQQVNTMV9CSVRTIHNjYWxpbmcsIGJ1dCBsZWF2ZSB0aGUgcmVzdWx0cyBzY2FsZWQgdXAKLSAgICogYnkgYW4gb3ZlcmFsbCBmYWN0b3Igb2YgOC4KLSAgICogV2UgbXVzdCBhbHNvIHNjYWxlIHRoZSBvdXRwdXQgYnkgKDgvNikqKDgvMykgPSAzMi85LCB3aGljaCB3ZSBwYXJ0aWFsbHkKLSAgICogZm9sZCBpbnRvIHRoZSBjb25zdGFudCBtdWx0aXBsaWVycyAob3RoZXIgcGFydCB3YXMgZG9uZSBpbiBwYXNzIDEpOgotICAgKiA2LXBvaW50IEZEQ1Qga2VybmVsLCBjSyByZXByZXNlbnRzIHNxcnQoMikgKiBjb3MoSypwaS8xMikgKiAxNi85LgotICAgKi8KLQotICBkYXRhcHRyID0gZGF0YTsKLSAgZm9yIChjdHIgPSAwOyBjdHIgPCAzOyBjdHIrKykgewotICAgIC8qIEV2ZW4gcGFydCAqLwotCi0gICAgdG1wMCA9IGRhdGFwdHJbRENUU0laRSowXSArIGRhdGFwdHJbRENUU0laRSo1XTsKLSAgICB0bXAxMSA9IGRhdGFwdHJbRENUU0laRSoxXSArIGRhdGFwdHJbRENUU0laRSo0XTsKLSAgICB0bXAyID0gZGF0YXB0cltEQ1RTSVpFKjJdICsgZGF0YXB0cltEQ1RTSVpFKjNdOwotCi0gICAgdG1wMTAgPSB0bXAwICsgdG1wMjsKLSAgICB0bXAxMiA9IHRtcDAgLSB0bXAyOwotCi0gICAgdG1wMCA9IGRhdGFwdHJbRENUU0laRSowXSAtIGRhdGFwdHJbRENUU0laRSo1XTsKLSAgICB0bXAxID0gZGF0YXB0cltEQ1RTSVpFKjFdIC0gZGF0YXB0cltEQ1RTSVpFKjRdOwotICAgIHRtcDIgPSBkYXRhcHRyW0RDVFNJWkUqMl0gLSBkYXRhcHRyW0RDVFNJWkUqM107Ci0KLSAgICBkYXRhcHRyW0RDVFNJWkUqMF0gPSAoRENURUxFTSkKLSAgICAgIERFU0NBTEUoTVVMVElQTFkodG1wMTAgKyB0bXAxMSwgRklYKDEuNzc3Nzc3Nzc4KSksICAgICAgICAgLyogMTYvOSAqLwotCSAgICAgIENPTlNUX0JJVFMrUEFTUzFfQklUUyk7Ci0gICAgZGF0YXB0cltEQ1RTSVpFKjJdID0gKERDVEVMRU0pCi0gICAgICBERVNDQUxFKE1VTFRJUExZKHRtcDEyLCBGSVgoMi4xNzczMjQyMTYpKSwgICAgICAgICAgICAgICAgIC8qIGMyICovCi0JICAgICAgQ09OU1RfQklUUytQQVNTMV9CSVRTKTsKLSAgICBkYXRhcHRyW0RDVFNJWkUqNF0gPSAoRENURUxFTSkKLSAgICAgIERFU0NBTEUoTVVMVElQTFkodG1wMTAgLSB0bXAxMSAtIHRtcDExLCBGSVgoMS4yNTcwNzg3MjIpKSwgLyogYzQgKi8KLQkgICAgICBDT05TVF9CSVRTK1BBU1MxX0JJVFMpOwotCi0gICAgLyogT2RkIHBhcnQgKi8KLQotICAgIHRtcDEwID0gTVVMVElQTFkodG1wMCArIHRtcDIsIEZJWCgwLjY1MDcxMTgyOSkpOyAgICAgICAgICAgICAvKiBjNSAqLwotCi0gICAgZGF0YXB0cltEQ1RTSVpFKjFdID0gKERDVEVMRU0pCi0gICAgICBERVNDQUxFKHRtcDEwICsgTVVMVElQTFkodG1wMCArIHRtcDEsIEZJWCgxLjc3Nzc3Nzc3OCkpLCAgIC8qIDE2LzkgKi8KLQkgICAgICBDT05TVF9CSVRTK1BBU1MxX0JJVFMpOwotICAgIGRhdGFwdHJbRENUU0laRSozXSA9IChEQ1RFTEVNKQotICAgICAgREVTQ0FMRShNVUxUSVBMWSh0bXAwIC0gdG1wMSAtIHRtcDIsIEZJWCgxLjc3Nzc3Nzc3OCkpLCAgICAvKiAxNi85ICovCi0JICAgICAgQ09OU1RfQklUUytQQVNTMV9CSVRTKTsKLSAgICBkYXRhcHRyW0RDVFNJWkUqNV0gPSAoRENURUxFTSkKLSAgICAgIERFU0NBTEUodG1wMTAgKyBNVUxUSVBMWSh0bXAyIC0gdG1wMSwgRklYKDEuNzc3Nzc3Nzc4KSksICAgLyogMTYvOSAqLwotCSAgICAgIENPTlNUX0JJVFMrUEFTUzFfQklUUyk7Ci0KLSAgICBkYXRhcHRyKys7CQkJLyogYWR2YW5jZSBwb2ludGVyIHRvIG5leHQgY29sdW1uICovCi0gIH0KLX0KLQotCi0vKgotICogUGVyZm9ybSB0aGUgZm9yd2FyZCBEQ1Qgb24gYSAyeDQgc2FtcGxlIGJsb2NrLgotICoKLSAqIDItcG9pbnQgRkRDVCBpbiBwYXNzIDEgKHJvd3MpLCA0LXBvaW50IGluIHBhc3MgMiAoY29sdW1ucykuCi0gKi8KLQotR0xPQkFMKHZvaWQpCi1qcGVnX2ZkY3RfMng0IChEQ1RFTEVNICogZGF0YSwgSlNBTVBBUlJBWSBzYW1wbGVfZGF0YSwgSkRJTUVOU0lPTiBzdGFydF9jb2wpCi17Ci0gIElOVDMyIHRtcDAsIHRtcDE7Ci0gIElOVDMyIHRtcDEwLCB0bXAxMTsKLSAgRENURUxFTSAqZGF0YXB0cjsKLSAgSlNBTVBST1cgZWxlbXB0cjsKLSAgaW50IGN0cjsKLSAgU0hJRlRfVEVNUFMKLQotICAvKiBQcmUtemVybyBvdXRwdXQgY29lZmZpY2llbnQgYmxvY2suICovCi0gIE1FTVpFUk8oZGF0YSwgU0laRU9GKERDVEVMRU0pICogRENUU0laRTIpOwotCi0gIC8qIFBhc3MgMTogcHJvY2VzcyByb3dzLiAqLwotICAvKiBOb3RlIHJlc3VsdHMgYXJlIHNjYWxlZCB1cCBieSBzcXJ0KDgpIGNvbXBhcmVkIHRvIGEgdHJ1ZSBEQ1QuICovCi0gIC8qIFdlIG11c3QgYWxzbyBzY2FsZSB0aGUgb3V0cHV0IGJ5ICg4LzIpKig4LzQpID0gMioqMywgd2hpY2ggd2UgYWRkIGhlcmUuICovCi0KLSAgZGF0YXB0ciA9IGRhdGE7Ci0gIGZvciAoY3RyID0gMDsgY3RyIDwgNDsgY3RyKyspIHsKLSAgICBlbGVtcHRyID0gc2FtcGxlX2RhdGFbY3RyXSArIHN0YXJ0X2NvbDsKLQotICAgIC8qIEV2ZW4gcGFydCAqLwotCi0gICAgdG1wMCA9IEdFVEpTQU1QTEUoZWxlbXB0clswXSk7Ci0gICAgdG1wMSA9IEdFVEpTQU1QTEUoZWxlbXB0clsxXSk7Ci0KLSAgICAvKiBBcHBseSB1bnNpZ25lZC0+c2lnbmVkIGNvbnZlcnNpb24gKi8KLSAgICBkYXRhcHRyWzBdID0gKERDVEVMRU0pICgodG1wMCArIHRtcDEgLSAyICogQ0VOVEVSSlNBTVBMRSkgPDwgMyk7Ci0KLSAgICAvKiBPZGQgcGFydCAqLwotCi0gICAgZGF0YXB0clsxXSA9IChEQ1RFTEVNKSAoKHRtcDAgLSB0bXAxKSA8PCAzKTsKLQotICAgIGRhdGFwdHIgKz0gRENUU0laRTsJCS8qIGFkdmFuY2UgcG9pbnRlciB0byBuZXh0IHJvdyAqLwotICB9Ci0KLSAgLyogUGFzcyAyOiBwcm9jZXNzIGNvbHVtbnMuCi0gICAqIFdlIGxlYXZlIHRoZSByZXN1bHRzIHNjYWxlZCB1cCBieSBhbiBvdmVyYWxsIGZhY3RvciBvZiA4LgotICAgKiA0LXBvaW50IEZEQ1Qga2VybmVsLAotICAgKiBjSyByZXByZXNlbnRzIHNxcnQoMikgKiBjb3MoSypwaS8xNikgW3JlZmVycyB0byA4LXBvaW50IEZEQ1RdLgotICAgKi8KLQotICBkYXRhcHRyID0gZGF0YTsKLSAgZm9yIChjdHIgPSAwOyBjdHIgPCAyOyBjdHIrKykgewotICAgIC8qIEV2ZW4gcGFydCAqLwotCi0gICAgdG1wMCA9IGRhdGFwdHJbRENUU0laRSowXSArIGRhdGFwdHJbRENUU0laRSozXTsKLSAgICB0bXAxID0gZGF0YXB0cltEQ1RTSVpFKjFdICsgZGF0YXB0cltEQ1RTSVpFKjJdOwotCi0gICAgdG1wMTAgPSBkYXRhcHRyW0RDVFNJWkUqMF0gLSBkYXRhcHRyW0RDVFNJWkUqM107Ci0gICAgdG1wMTEgPSBkYXRhcHRyW0RDVFNJWkUqMV0gLSBkYXRhcHRyW0RDVFNJWkUqMl07Ci0KLSAgICBkYXRhcHRyW0RDVFNJWkUqMF0gPSAoRENURUxFTSkgKHRtcDAgKyB0bXAxKTsKLSAgICBkYXRhcHRyW0RDVFNJWkUqMl0gPSAoRENURUxFTSkgKHRtcDAgLSB0bXAxKTsKLQotICAgIC8qIE9kZCBwYXJ0ICovCi0KLSAgICB0bXAwID0gTVVMVElQTFkodG1wMTAgKyB0bXAxMSwgRklYXzBfNTQxMTk2MTAwKTsgICAgICAgLyogYzYgKi8KLSAgICAvKiBBZGQgZnVkZ2UgZmFjdG9yIGhlcmUgZm9yIGZpbmFsIGRlc2NhbGUuICovCi0gICAgdG1wMCArPSBPTkUgPDwgKENPTlNUX0JJVFMtMSk7Ci0KLSAgICBkYXRhcHRyW0RDVFNJWkUqMV0gPSAoRENURUxFTSkKLSAgICAgIFJJR0hUX1NISUZUKHRtcDAgKyBNVUxUSVBMWSh0bXAxMCwgRklYXzBfNzY1MzY2ODY1KSwgLyogYzItYzYgKi8KLQkJICBDT05TVF9CSVRTKTsKLSAgICBkYXRhcHRyW0RDVFNJWkUqM10gPSAoRENURUxFTSkKLSAgICAgIFJJR0hUX1NISUZUKHRtcDAgLSBNVUxUSVBMWSh0bXAxMSwgRklYXzFfODQ3NzU5MDY1KSwgLyogYzIrYzYgKi8KLQkJICBDT05TVF9CSVRTKTsKLQotICAgIGRhdGFwdHIrKzsJCQkvKiBhZHZhbmNlIHBvaW50ZXIgdG8gbmV4dCBjb2x1bW4gKi8KLSAgfQotfQotCi0KLS8qCi0gKiBQZXJmb3JtIHRoZSBmb3J3YXJkIERDVCBvbiBhIDF4MiBzYW1wbGUgYmxvY2suCi0gKgotICogMS1wb2ludCBGRENUIGluIHBhc3MgMSAocm93cyksIDItcG9pbnQgaW4gcGFzcyAyIChjb2x1bW5zKS4KLSAqLwotCi1HTE9CQUwodm9pZCkKLWpwZWdfZmRjdF8xeDIgKERDVEVMRU0gKiBkYXRhLCBKU0FNUEFSUkFZIHNhbXBsZV9kYXRhLCBKRElNRU5TSU9OIHN0YXJ0X2NvbCkKLXsKLSAgSU5UMzIgdG1wMCwgdG1wMTsKLQotICAvKiBQcmUtemVybyBvdXRwdXQgY29lZmZpY2llbnQgYmxvY2suICovCi0gIE1FTVpFUk8oZGF0YSwgU0laRU9GKERDVEVMRU0pICogRENUU0laRTIpOwotCi0gIHRtcDAgPSBHRVRKU0FNUExFKHNhbXBsZV9kYXRhWzBdW3N0YXJ0X2NvbF0pOwotICB0bXAxID0gR0VUSlNBTVBMRShzYW1wbGVfZGF0YVsxXVtzdGFydF9jb2xdKTsKLQotICAvKiBXZSBsZWF2ZSB0aGUgcmVzdWx0cyBzY2FsZWQgdXAgYnkgYW4gb3ZlcmFsbCBmYWN0b3Igb2YgOC4KLSAgICogV2UgbXVzdCBhbHNvIHNjYWxlIHRoZSBvdXRwdXQgYnkgKDgvMSkqKDgvMikgPSAyKio1LgotICAgKi8KLQotICAvKiBFdmVuIHBhcnQgKi8KLSAgLyogQXBwbHkgdW5zaWduZWQtPnNpZ25lZCBjb252ZXJzaW9uICovCi0gIGRhdGFbRENUU0laRSowXSA9IChEQ1RFTEVNKSAoKHRtcDAgKyB0bXAxIC0gMiAqIENFTlRFUkpTQU1QTEUpIDw8IDUpOwotCi0gIC8qIE9kZCBwYXJ0ICovCi0gIGRhdGFbRENUU0laRSoxXSA9IChEQ1RFTEVNKSAoKHRtcDAgLSB0bXAxKSA8PCA1KTsKLX0KLQotI2VuZGlmIC8qIERDVF9TQ0FMSU5HX1NVUFBPUlRFRCAqLwogI2VuZGlmIC8qIERDVF9JU0xPV19TVVBQT1JURUQgKi8KZGlmZiAtLWdpdCBhL2ppZGN0Zmx0LmMgYi9qaWRjdGZsdC5jCmluZGV4IDIzYWU5ZDMuLjAxODhjZTMgMTAwNjQ0Ci0tLSBhL2ppZGN0Zmx0LmMKKysrIGIvamlkY3RmbHQuYwpAQCAtMiw3ICsyLDYgQEAKICAqIGppZGN0Zmx0LmMKICAqCiAgKiBDb3B5cmlnaHQgKEMpIDE5OTQtMTk5OCwgVGhvbWFzIEcuIExhbmUuCi0gKiBNb2RpZmllZCAyMDEwIGJ5IEd1aWRvIFZvbGxiZWRpbmcuCiAgKiBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgSW5kZXBlbmRlbnQgSlBFRyBHcm91cCdzIHNvZnR3YXJlLgogICogRm9yIGNvbmRpdGlvbnMgb2YgZGlzdHJpYnV0aW9uIGFuZCB1c2UsIHNlZSB0aGUgYWNjb21wYW55aW5nIFJFQURNRSBmaWxlLgogICoKQEAgLTc3LDkgKzc2LDEwIEBACiAgIEZMT0FUX01VTFRfVFlQRSAqIHF1YW50cHRyOwogICBGQVNUX0ZMT0FUICogd3NwdHI7CiAgIEpTQU1QUk9XIG91dHB0cjsKLSAgSlNBTVBMRSAqcmFuZ2VfbGltaXQgPSBjaW5mby0+c2FtcGxlX3JhbmdlX2xpbWl0OworICBKU0FNUExFICpyYW5nZV9saW1pdCA9IElEQ1RfcmFuZ2VfbGltaXQoY2luZm8pOwogICBpbnQgY3RyOwogICBGQVNUX0ZMT0FUIHdvcmtzcGFjZVtEQ1RTSVpFMl07IC8qIGJ1ZmZlcnMgZGF0YSBiZXR3ZWVuIHBhc3NlcyAqLworICBTSElGVF9URU1QUwogCiAgIC8qIFBhc3MgMTogcHJvY2VzcyBjb2x1bW5zIGZyb20gaW5wdXQsIHN0b3JlIGludG8gd29yayBhcnJheS4gKi8KIApAQCAtMTUyLDEyICsxNTIsMTIgQEAKICAgICB0bXAxMSA9ICh6MTEgLSB6MTMpICogKChGQVNUX0ZMT0FUKSAxLjQxNDIxMzU2Mik7IC8qIDIqYzQgKi8KIAogICAgIHo1ID0gKHoxMCArIHoxMikgKiAoKEZBU1RfRkxPQVQpIDEuODQ3NzU5MDY1KTsgLyogMipjMiAqLwotICAgIHRtcDEwID0gejUgLSB6MTIgKiAoKEZBU1RfRkxPQVQpIDEuMDgyMzkyMjAwKTsgLyogMiooYzItYzYpICovCi0gICAgdG1wMTIgPSB6NSAtIHoxMCAqICgoRkFTVF9GTE9BVCkgMi42MTMxMjU5MzApOyAvKiAyKihjMitjNikgKi8KKyAgICB0bXAxMCA9ICgoRkFTVF9GTE9BVCkgMS4wODIzOTIyMDApICogejEyIC0gejU7IC8qIDIqKGMyLWM2KSAqLworICAgIHRtcDEyID0gKChGQVNUX0ZMT0FUKSAtMi42MTMxMjU5MzApICogejEwICsgejU7IC8qIC0yKihjMitjNikgKi8KIAogICAgIHRtcDYgPSB0bXAxMiAtIHRtcDc7CS8qIHBoYXNlIDIgKi8KICAgICB0bXA1ID0gdG1wMTEgLSB0bXA2OwotICAgIHRtcDQgPSB0bXAxMCAtIHRtcDU7CisgICAgdG1wNCA9IHRtcDEwICsgdG1wNTsKIAogICAgIHdzcHRyW0RDVFNJWkUqMF0gPSB0bXAwICsgdG1wNzsKICAgICB3c3B0cltEQ1RTSVpFKjddID0gdG1wMCAtIHRtcDc7CkBAIC0xNjUsOCArMTY1LDggQEAKICAgICB3c3B0cltEQ1RTSVpFKjZdID0gdG1wMSAtIHRtcDY7CiAgICAgd3NwdHJbRENUU0laRSoyXSA9IHRtcDIgKyB0bXA1OwogICAgIHdzcHRyW0RDVFNJWkUqNV0gPSB0bXAyIC0gdG1wNTsKLSAgICB3c3B0cltEQ1RTSVpFKjNdID0gdG1wMyArIHRtcDQ7Ci0gICAgd3NwdHJbRENUU0laRSo0XSA9IHRtcDMgLSB0bXA0OworICAgIHdzcHRyW0RDVFNJWkUqNF0gPSB0bXAzICsgdG1wNDsKKyAgICB3c3B0cltEQ1RTSVpFKjNdID0gdG1wMyAtIHRtcDQ7CiAKICAgICBpbnB0cisrOwkJCS8qIGFkdmFuY2UgcG9pbnRlcnMgdG8gbmV4dCBjb2x1bW4gKi8KICAgICBxdWFudHB0cisrOwpAQCAtMTc0LDYgKzE3NCw3IEBACiAgIH0KICAgCiAgIC8qIFBhc3MgMjogcHJvY2VzcyByb3dzIGZyb20gd29yayBhcnJheSwgc3RvcmUgaW50byBvdXRwdXQgYXJyYXkuICovCisgIC8qIE5vdGUgdGhhdCB3ZSBtdXN0IGRlc2NhbGUgdGhlIHJlc3VsdHMgYnkgYSBmYWN0b3Igb2YgOCA9PSAyKiozLiAqLwogCiAgIHdzcHRyID0gd29ya3NwYWNlOwogICBmb3IgKGN0ciA9IDA7IGN0ciA8IERDVFNJWkU7IGN0cisrKSB7CkBAIC0xODYsMTAgKzE4Nyw4IEBACiAgICAgCiAgICAgLyogRXZlbiBwYXJ0ICovCiAKLSAgICAvKiBBcHBseSBzaWduZWQtPnVuc2lnbmVkIGFuZCBwcmVwYXJlIGZsb2F0LT5pbnQgY29udmVyc2lvbiAqLwotICAgIHo1ID0gd3NwdHJbMF0gKyAoKEZBU1RfRkxPQVQpIENFTlRFUkpTQU1QTEUgKyAoRkFTVF9GTE9BVCkgMC41KTsKLSAgICB0bXAxMCA9IHo1ICsgd3NwdHJbNF07Ci0gICAgdG1wMTEgPSB6NSAtIHdzcHRyWzRdOworICAgIHRtcDEwID0gd3NwdHJbMF0gKyB3c3B0cls0XTsKKyAgICB0bXAxMSA9IHdzcHRyWzBdIC0gd3NwdHJbNF07CiAKICAgICB0bXAxMyA9IHdzcHRyWzJdICsgd3NwdHJbNl07CiAgICAgdG1wMTIgPSAod3NwdHJbMl0gLSB3c3B0cls2XSkgKiAoKEZBU1RfRkxPQVQpIDEuNDE0MjEzNTYyKSAtIHRtcDEzOwpAQCAtMjEwLDIzICsyMDksMzEgQEAKICAgICB0bXAxMSA9ICh6MTEgLSB6MTMpICogKChGQVNUX0ZMT0FUKSAxLjQxNDIxMzU2Mik7CiAKICAgICB6NSA9ICh6MTAgKyB6MTIpICogKChGQVNUX0ZMT0FUKSAxLjg0Nzc1OTA2NSk7IC8qIDIqYzIgKi8KLSAgICB0bXAxMCA9IHo1IC0gejEyICogKChGQVNUX0ZMT0FUKSAxLjA4MjM5MjIwMCk7IC8qIDIqKGMyLWM2KSAqLwotICAgIHRtcDEyID0gejUgLSB6MTAgKiAoKEZBU1RfRkxPQVQpIDIuNjEzMTI1OTMwKTsgLyogMiooYzIrYzYpICovCisgICAgdG1wMTAgPSAoKEZBU1RfRkxPQVQpIDEuMDgyMzkyMjAwKSAqIHoxMiAtIHo1OyAvKiAyKihjMi1jNikgKi8KKyAgICB0bXAxMiA9ICgoRkFTVF9GTE9BVCkgLTIuNjEzMTI1OTMwKSAqIHoxMCArIHo1OyAvKiAtMiooYzIrYzYpICovCiAKICAgICB0bXA2ID0gdG1wMTIgLSB0bXA3OwogICAgIHRtcDUgPSB0bXAxMSAtIHRtcDY7Ci0gICAgdG1wNCA9IHRtcDEwIC0gdG1wNTsKKyAgICB0bXA0ID0gdG1wMTAgKyB0bXA1OwogCi0gICAgLyogRmluYWwgb3V0cHV0IHN0YWdlOiBmbG9hdC0+aW50IGNvbnZlcnNpb24gYW5kIHJhbmdlLWxpbWl0ICovCisgICAgLyogRmluYWwgb3V0cHV0IHN0YWdlOiBzY2FsZSBkb3duIGJ5IGEgZmFjdG9yIG9mIDggYW5kIHJhbmdlLWxpbWl0ICovCiAKLSAgICBvdXRwdHJbMF0gPSByYW5nZV9saW1pdFsoKGludCkgKHRtcDAgKyB0bXA3KSkgJiBSQU5HRV9NQVNLXTsKLSAgICBvdXRwdHJbN10gPSByYW5nZV9saW1pdFsoKGludCkgKHRtcDAgLSB0bXA3KSkgJiBSQU5HRV9NQVNLXTsKLSAgICBvdXRwdHJbMV0gPSByYW5nZV9saW1pdFsoKGludCkgKHRtcDEgKyB0bXA2KSkgJiBSQU5HRV9NQVNLXTsKLSAgICBvdXRwdHJbNl0gPSByYW5nZV9saW1pdFsoKGludCkgKHRtcDEgLSB0bXA2KSkgJiBSQU5HRV9NQVNLXTsKLSAgICBvdXRwdHJbMl0gPSByYW5nZV9saW1pdFsoKGludCkgKHRtcDIgKyB0bXA1KSkgJiBSQU5HRV9NQVNLXTsKLSAgICBvdXRwdHJbNV0gPSByYW5nZV9saW1pdFsoKGludCkgKHRtcDIgLSB0bXA1KSkgJiBSQU5HRV9NQVNLXTsKLSAgICBvdXRwdHJbM10gPSByYW5nZV9saW1pdFsoKGludCkgKHRtcDMgKyB0bXA0KSkgJiBSQU5HRV9NQVNLXTsKLSAgICBvdXRwdHJbNF0gPSByYW5nZV9saW1pdFsoKGludCkgKHRtcDMgLSB0bXA0KSkgJiBSQU5HRV9NQVNLXTsKKyAgICBvdXRwdHJbMF0gPSByYW5nZV9saW1pdFsoaW50KSBERVNDQUxFKChJTlQzMikgKHRtcDAgKyB0bXA3KSwgMykKKwkJCSAgICAmIFJBTkdFX01BU0tdOworICAgIG91dHB0cls3XSA9IHJhbmdlX2xpbWl0WyhpbnQpIERFU0NBTEUoKElOVDMyKSAodG1wMCAtIHRtcDcpLCAzKQorCQkJICAgICYgUkFOR0VfTUFTS107CisgICAgb3V0cHRyWzFdID0gcmFuZ2VfbGltaXRbKGludCkgREVTQ0FMRSgoSU5UMzIpICh0bXAxICsgdG1wNiksIDMpCisJCQkgICAgJiBSQU5HRV9NQVNLXTsKKyAgICBvdXRwdHJbNl0gPSByYW5nZV9saW1pdFsoaW50KSBERVNDQUxFKChJTlQzMikgKHRtcDEgLSB0bXA2KSwgMykKKwkJCSAgICAmIFJBTkdFX01BU0tdOworICAgIG91dHB0clsyXSA9IHJhbmdlX2xpbWl0WyhpbnQpIERFU0NBTEUoKElOVDMyKSAodG1wMiArIHRtcDUpLCAzKQorCQkJICAgICYgUkFOR0VfTUFTS107CisgICAgb3V0cHRyWzVdID0gcmFuZ2VfbGltaXRbKGludCkgREVTQ0FMRSgoSU5UMzIpICh0bXAyIC0gdG1wNSksIDMpCisJCQkgICAgJiBSQU5HRV9NQVNLXTsKKyAgICBvdXRwdHJbNF0gPSByYW5nZV9saW1pdFsoaW50KSBERVNDQUxFKChJTlQzMikgKHRtcDMgKyB0bXA0KSwgMykKKwkJCSAgICAmIFJBTkdFX01BU0tdOworICAgIG91dHB0clszXSA9IHJhbmdlX2xpbWl0WyhpbnQpIERFU0NBTEUoKElOVDMyKSAodG1wMyAtIHRtcDQpLCAzKQorCQkJICAgICYgUkFOR0VfTUFTS107CiAgICAgCiAgICAgd3NwdHIgKz0gRENUU0laRTsJCS8qIGFkdmFuY2UgcG9pbnRlciB0byBuZXh0IHJvdyAqLwogICB9CmRpZmYgLS1naXQgYS9qaWRjdGludC5jIGIvamlkY3RpbnQuYwppbmRleCBkY2RmN2NlLi5hNzJiMzIwIDEwMDY0NAotLS0gYS9qaWRjdGludC5jCisrKyBiL2ppZGN0aW50LmMKQEAgLTIsNyArMiw2IEBACiAgKiBqaWRjdGludC5jCiAgKgogICogQ29weXJpZ2h0IChDKSAxOTkxLTE5OTgsIFRob21hcyBHLiBMYW5lLgotICogTW9kaWZpY2F0aW9uIGRldmVsb3BlZCAyMDAyLTIwMDkgYnkgR3VpZG8gVm9sbGJlZGluZy4KICAqIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBJbmRlcGVuZGVudCBKUEVHIEdyb3VwJ3Mgc29mdHdhcmUuCiAgKiBGb3IgY29uZGl0aW9ucyBvZiBkaXN0cmlidXRpb24gYW5kIHVzZSwgc2VlIHRoZSBhY2NvbXBhbnlpbmcgUkVBRE1FIGZpbGUuCiAgKgpAQCAtMjQsMjggKzIzLDYgQEAKICAqIFRoZSBhZHZhbnRhZ2Ugb2YgdGhpcyBtZXRob2QgaXMgdGhhdCBubyBkYXRhIHBhdGggY29udGFpbnMgbW9yZSB0aGFuIG9uZQogICogbXVsdGlwbGljYXRpb247IHRoaXMgYWxsb3dzIGEgdmVyeSBzaW1wbGUgYW5kIGFjY3VyYXRlIGltcGxlbWVudGF0aW9uIGluCiAgKiBzY2FsZWQgZml4ZWQtcG9pbnQgYXJpdGhtZXRpYywgd2l0aCBhIG1pbmltYWwgbnVtYmVyIG9mIHNoaWZ0cy4KLSAqCi0gKiBXZSBhbHNvIHByb3ZpZGUgSURDVCByb3V0aW5lcyB3aXRoIHZhcmlvdXMgb3V0cHV0IHNhbXBsZSBibG9jayBzaXplcyBmb3IKLSAqIGRpcmVjdCByZXNvbHV0aW9uIHJlZHVjdGlvbiBvciBlbmxhcmdlbWVudCBhbmQgZm9yIGRpcmVjdCByZXNvbHZpbmcgdGhlCi0gKiBjb21tb24gMngxIGFuZCAxeDIgc3Vic2FtcGxpbmcgY2FzZXMgd2l0aG91dCBhZGRpdGlvbmFsIHJlc2FtcGxpbmc6IE54TgotICogKE49MS4uLjE2KSwgMk54TiwgYW5kIE54Mk4gKE49MS4uLjgpIHBpeGVscyBmb3Igb25lIDh4OCBpbnB1dCBEQ1QgYmxvY2suCi0gKgotICogRm9yIE48OCB3ZSBzaW1wbHkgdGFrZSB0aGUgY29ycmVzcG9uZGluZyBsb3ctZnJlcXVlbmN5IGNvZWZmaWNpZW50cyBvZgotICogdGhlIDh4OCBpbnB1dCBEQ1QgYmxvY2sgYW5kIGFwcGx5IGFuIE54TiBwb2ludCBJRENUIG9uIHRoZSBzdWItYmxvY2sKLSAqIHRvIHlpZWxkIHRoZSBkb3duc2NhbGVkIG91dHB1dHMuCi0gKiBUaGlzIGNhbiBiZSBzZWVuIGFzIGRpcmVjdCBsb3ctcGFzcyBkb3duc2FtcGxpbmcgZnJvbSB0aGUgRENUIGRvbWFpbgotICogcG9pbnQgb2YgdmlldyByYXRoZXIgdGhhbiB0aGUgdXN1YWwgc3BhdGlhbCBkb21haW4gcG9pbnQgb2YgdmlldywKLSAqIHlpZWxkaW5nIHNpZ25pZmljYW50IGNvbXB1dGF0aW9uYWwgc2F2aW5ncyBhbmQgcmVzdWx0cyBhdCBsZWFzdAotICogYXMgZ29vZCBhcyBjb21tb24gYmlsaW5lYXIgKGF2ZXJhZ2luZykgc3BhdGlhbCBkb3duc2FtcGxpbmcuCi0gKgotICogRm9yIE4+OCB3ZSBhcHBseSBhIHBhcnRpYWwgTnhOIElEQ1Qgb24gdGhlIDggaW5wdXQgY29lZmZpY2llbnRzIGFzCi0gKiBsb3dlciBmcmVxdWVuY2llcyBhbmQgaGlnaGVyIGZyZXF1ZW5jaWVzIGFzc3VtZWQgdG8gYmUgemVyby4KLSAqIEl0IHR1cm5zIG91dCB0aGF0IHRoZSBjb21wdXRhdGlvbmFsIGVmZm9ydCBpcyBzaW1pbGFyIHRvIHRoZSA4eDggSURDVAotICogcmVnYXJkaW5nIHRoZSBvdXRwdXQgc2l6ZS4KLSAqIEZ1cnRoZXJtb3JlLCB0aGUgc2NhbGluZyBhbmQgZGVzY2FsaW5nIGlzIHRoZSBzYW1lIGZvciBhbGwgSURDVCBzaXplcy4KLSAqCi0gKiBDQVVUSU9OOiBXZSByZWx5IG9uIHRoZSBGSVgoKSBtYWNybyBleGNlcHQgZm9yIHRoZSBOPTEsMiw0LDggY2FzZXMKLSAqIHNpbmNlIHRoZXJlIHdvdWxkIGJlIHRvbyBtYW55IGFkZGl0aW9uYWwgY29uc3RhbnRzIHRvIHByZS1jYWxjdWxhdGUuCiAgKi8KIAogI2RlZmluZSBKUEVHX0lOVEVSTkFMUwpAQCAtNjEsNyArMzgsNyBAQAogICovCiAKICNpZiBEQ1RTSVpFICE9IDgKLSAgU29ycnksIHRoaXMgY29kZSBvbmx5IGNvcGVzIHdpdGggOHg4IERDVCBibG9ja3MuIC8qIGRlbGliZXJhdGUgc3ludGF4IGVyciAqLworICBTb3JyeSwgdGhpcyBjb2RlIG9ubHkgY29wZXMgd2l0aCA4eDggRENUcy4gLyogZGVsaWJlcmF0ZSBzeW50YXggZXJyICovCiAjZW5kaWYKIAogCkBAIC0xNzQsNyArMTUxLDcgQEAKIHsKICAgSU5UMzIgdG1wMCwgdG1wMSwgdG1wMiwgdG1wMzsKICAgSU5UMzIgdG1wMTAsIHRtcDExLCB0bXAxMiwgdG1wMTM7Ci0gIElOVDMyIHoxLCB6MiwgejM7CisgIElOVDMyIHoxLCB6MiwgejMsIHo0LCB6NTsKICAgSkNPRUZQVFIgaW5wdHI7CiAgIElTTE9XX01VTFRfVFlQRSAqIHF1YW50cHRyOwogICBpbnQgKiB3c3B0cjsKQEAgLTIwMCwxNCArMTc3LDE0IEBACiAgICAgICogV2l0aCB0eXBpY2FsIGltYWdlcyBhbmQgcXVhbnRpemF0aW9uIHRhYmxlcywgaGFsZiBvciBtb3JlIG9mIHRoZQogICAgICAqIGNvbHVtbiBEQ1QgY2FsY3VsYXRpb25zIGNhbiBiZSBzaW1wbGlmaWVkIHRoaXMgd2F5LgogICAgICAqLwotCisgICAgCiAgICAgaWYgKGlucHRyW0RDVFNJWkUqMV0gPT0gMCAmJiBpbnB0cltEQ1RTSVpFKjJdID09IDAgJiYKIAlpbnB0cltEQ1RTSVpFKjNdID09IDAgJiYgaW5wdHJbRENUU0laRSo0XSA9PSAwICYmCiAJaW5wdHJbRENUU0laRSo1XSA9PSAwICYmIGlucHRyW0RDVFNJWkUqNl0gPT0gMCAmJgogCWlucHRyW0RDVFNJWkUqN10gPT0gMCkgewogICAgICAgLyogQUMgdGVybXMgYWxsIHplcm8gKi8KICAgICAgIGludCBkY3ZhbCA9IERFUVVBTlRJWkUoaW5wdHJbRENUU0laRSowXSwgcXVhbnRwdHJbRENUU0laRSowXSkgPDwgUEFTUzFfQklUUzsKLQorICAgICAgCiAgICAgICB3c3B0cltEQ1RTSVpFKjBdID0gZGN2YWw7CiAgICAgICB3c3B0cltEQ1RTSVpFKjFdID0gZGN2YWw7CiAgICAgICB3c3B0cltEQ1RTSVpFKjJdID0gZGN2YWw7CkBAIC0yMTYsODQgKzE5Myw4MiBAQAogICAgICAgd3NwdHJbRENUU0laRSo1XSA9IGRjdmFsOwogICAgICAgd3NwdHJbRENUU0laRSo2XSA9IGRjdmFsOwogICAgICAgd3NwdHJbRENUU0laRSo3XSA9IGRjdmFsOwotCisgICAgICAKICAgICAgIGlucHRyKys7CQkJLyogYWR2YW5jZSBwb2ludGVycyB0byBuZXh0IGNvbHVtbiAqLwogICAgICAgcXVhbnRwdHIrKzsKICAgICAgIHdzcHRyKys7CiAgICAgICBjb250aW51ZTsKICAgICB9Ci0KKyAgICAKICAgICAvKiBFdmVuIHBhcnQ6IHJldmVyc2UgdGhlIGV2ZW4gcGFydCBvZiB0aGUgZm9yd2FyZCBEQ1QuICovCiAgICAgLyogVGhlIHJvdGF0b3IgaXMgc3FydCgyKSpjKC02KS4gKi8KICAgICAKICAgICB6MiA9IERFUVVBTlRJWkUoaW5wdHJbRENUU0laRSoyXSwgcXVhbnRwdHJbRENUU0laRSoyXSk7CiAgICAgejMgPSBERVFVQU5USVpFKGlucHRyW0RDVFNJWkUqNl0sIHF1YW50cHRyW0RDVFNJWkUqNl0pOwotCisgICAgCiAgICAgejEgPSBNVUxUSVBMWSh6MiArIHozLCBGSVhfMF81NDExOTYxMDApOwotICAgIHRtcDIgPSB6MSArIE1VTFRJUExZKHoyLCBGSVhfMF83NjUzNjY4NjUpOwotICAgIHRtcDMgPSB6MSAtIE1VTFRJUExZKHozLCBGSVhfMV84NDc3NTkwNjUpOwotCisgICAgdG1wMiA9IHoxICsgTVVMVElQTFkoejMsIC0gRklYXzFfODQ3NzU5MDY1KTsKKyAgICB0bXAzID0gejEgKyBNVUxUSVBMWSh6MiwgRklYXzBfNzY1MzY2ODY1KTsKKyAgICAKICAgICB6MiA9IERFUVVBTlRJWkUoaW5wdHJbRENUU0laRSowXSwgcXVhbnRwdHJbRENUU0laRSowXSk7CiAgICAgejMgPSBERVFVQU5USVpFKGlucHRyW0RDVFNJWkUqNF0sIHF1YW50cHRyW0RDVFNJWkUqNF0pOwotICAgIHoyIDw8PSBDT05TVF9CSVRTOwotICAgIHozIDw8PSBDT05TVF9CSVRTOwotICAgIC8qIEFkZCBmdWRnZSBmYWN0b3IgaGVyZSBmb3IgZmluYWwgZGVzY2FsZS4gKi8KLSAgICB6MiArPSBPTkUgPDwgKENPTlNUX0JJVFMtUEFTUzFfQklUUy0xKTsKIAotICAgIHRtcDAgPSB6MiArIHozOwotICAgIHRtcDEgPSB6MiAtIHozOwotCi0gICAgdG1wMTAgPSB0bXAwICsgdG1wMjsKLSAgICB0bXAxMyA9IHRtcDAgLSB0bXAyOwotICAgIHRtcDExID0gdG1wMSArIHRtcDM7Ci0gICAgdG1wMTIgPSB0bXAxIC0gdG1wMzsKLQorICAgIHRtcDAgPSAoejIgKyB6MykgPDwgQ09OU1RfQklUUzsKKyAgICB0bXAxID0gKHoyIC0gejMpIDw8IENPTlNUX0JJVFM7CisgICAgCisgICAgdG1wMTAgPSB0bXAwICsgdG1wMzsKKyAgICB0bXAxMyA9IHRtcDAgLSB0bXAzOworICAgIHRtcDExID0gdG1wMSArIHRtcDI7CisgICAgdG1wMTIgPSB0bXAxIC0gdG1wMjsKKyAgICAKICAgICAvKiBPZGQgcGFydCBwZXIgZmlndXJlIDg7IHRoZSBtYXRyaXggaXMgdW5pdGFyeSBhbmQgaGVuY2UgaXRzCiAgICAgICogdHJhbnNwb3NlIGlzIGl0cyBpbnZlcnNlLiAgaTAuLmkzIGFyZSB5Nyx5NSx5Myx5MSByZXNwZWN0aXZlbHkuCiAgICAgICovCi0KKyAgICAKICAgICB0bXAwID0gREVRVUFOVElaRShpbnB0cltEQ1RTSVpFKjddLCBxdWFudHB0cltEQ1RTSVpFKjddKTsKICAgICB0bXAxID0gREVRVUFOVElaRShpbnB0cltEQ1RTSVpFKjVdLCBxdWFudHB0cltEQ1RTSVpFKjVdKTsKICAgICB0bXAyID0gREVRVUFOVElaRShpbnB0cltEQ1RTSVpFKjNdLCBxdWFudHB0cltEQ1RTSVpFKjNdKTsKICAgICB0bXAzID0gREVRVUFOVElaRShpbnB0cltEQ1RTSVpFKjFdLCBxdWFudHB0cltEQ1RTSVpFKjFdKTsKICAgICAKLSAgICB6MiA9IHRtcDAgKyB0bXAyOwotICAgIHozID0gdG1wMSArIHRtcDM7Ci0KLSAgICB6MSA9IE1VTFRJUExZKHoyICsgejMsIEZJWF8xXzE3NTg3NTYwMik7IC8qIHNxcnQoMikgKiBjMyAqLwotICAgIHoyID0gTVVMVElQTFkoejIsIC0gRklYXzFfOTYxNTcwNTYwKTsgLyogc3FydCgyKSAqICgtYzMtYzUpICovCi0gICAgejMgPSBNVUxUSVBMWSh6MywgLSBGSVhfMF8zOTAxODA2NDQpOyAvKiBzcXJ0KDIpICogKGM1LWMzKSAqLwotICAgIHoyICs9IHoxOwotICAgIHozICs9IHoxOwotCi0gICAgejEgPSBNVUxUSVBMWSh0bXAwICsgdG1wMywgLSBGSVhfMF84OTk5NzYyMjMpOyAvKiBzcXJ0KDIpICogKGM3LWMzKSAqLworICAgIHoxID0gdG1wMCArIHRtcDM7CisgICAgejIgPSB0bXAxICsgdG1wMjsKKyAgICB6MyA9IHRtcDAgKyB0bXAyOworICAgIHo0ID0gdG1wMSArIHRtcDM7CisgICAgejUgPSBNVUxUSVBMWSh6MyArIHo0LCBGSVhfMV8xNzU4NzU2MDIpOyAvKiBzcXJ0KDIpICogYzMgKi8KKyAgICAKICAgICB0bXAwID0gTVVMVElQTFkodG1wMCwgRklYXzBfMjk4NjMxMzM2KTsgLyogc3FydCgyKSAqICgtYzErYzMrYzUtYzcpICovCi0gICAgdG1wMyA9IE1VTFRJUExZKHRtcDMsIEZJWF8xXzUwMTMyMTExMCk7IC8qIHNxcnQoMikgKiAoIGMxK2MzLWM1LWM3KSAqLwotICAgIHRtcDAgKz0gejEgKyB6MjsKLSAgICB0bXAzICs9IHoxICsgejM7Ci0KLSAgICB6MSA9IE1VTFRJUExZKHRtcDEgKyB0bXAyLCAtIEZJWF8yXzU2MjkxNTQ0Nyk7IC8qIHNxcnQoMikgKiAoLWMxLWMzKSAqLwogICAgIHRtcDEgPSBNVUxUSVBMWSh0bXAxLCBGSVhfMl8wNTMxMTk4NjkpOyAvKiBzcXJ0KDIpICogKCBjMStjMy1jNStjNykgKi8KICAgICB0bXAyID0gTVVMVElQTFkodG1wMiwgRklYXzNfMDcyNzExMDI2KTsgLyogc3FydCgyKSAqICggYzErYzMrYzUtYzcpICovCi0gICAgdG1wMSArPSB6MSArIHozOwotICAgIHRtcDIgKz0gejEgKyB6MjsKLQorICAgIHRtcDMgPSBNVUxUSVBMWSh0bXAzLCBGSVhfMV81MDEzMjExMTApOyAvKiBzcXJ0KDIpICogKCBjMStjMy1jNS1jNykgKi8KKyAgICB6MSA9IE1VTFRJUExZKHoxLCAtIEZJWF8wXzg5OTk3NjIyMyk7IC8qIHNxcnQoMikgKiAoYzctYzMpICovCisgICAgejIgPSBNVUxUSVBMWSh6MiwgLSBGSVhfMl81NjI5MTU0NDcpOyAvKiBzcXJ0KDIpICogKC1jMS1jMykgKi8KKyAgICB6MyA9IE1VTFRJUExZKHozLCAtIEZJWF8xXzk2MTU3MDU2MCk7IC8qIHNxcnQoMikgKiAoLWMzLWM1KSAqLworICAgIHo0ID0gTVVMVElQTFkoejQsIC0gRklYXzBfMzkwMTgwNjQ0KTsgLyogc3FydCgyKSAqIChjNS1jMykgKi8KKyAgICAKKyAgICB6MyArPSB6NTsKKyAgICB6NCArPSB6NTsKKyAgICAKKyAgICB0bXAwICs9IHoxICsgejM7CisgICAgdG1wMSArPSB6MiArIHo0OworICAgIHRtcDIgKz0gejIgKyB6MzsKKyAgICB0bXAzICs9IHoxICsgejQ7CisgICAgCiAgICAgLyogRmluYWwgb3V0cHV0IHN0YWdlOiBpbnB1dHMgYXJlIHRtcDEwLi50bXAxMywgdG1wMC4udG1wMyAqLwotCi0gICAgd3NwdHJbRENUU0laRSowXSA9IChpbnQpIFJJR0hUX1NISUZUKHRtcDEwICsgdG1wMywgQ09OU1RfQklUUy1QQVNTMV9CSVRTKTsKLSAgICB3c3B0cltEQ1RTSVpFKjddID0gKGludCkgUklHSFRfU0hJRlQodG1wMTAgLSB0bXAzLCBDT05TVF9CSVRTLVBBU1MxX0JJVFMpOwotICAgIHdzcHRyW0RDVFNJWkUqMV0gPSAoaW50KSBSSUdIVF9TSElGVCh0bXAxMSArIHRtcDIsIENPTlNUX0JJVFMtUEFTUzFfQklUUyk7Ci0gICAgd3NwdHJbRENUU0laRSo2XSA9IChpbnQpIFJJR0hUX1NISUZUKHRtcDExIC0gdG1wMiwgQ09OU1RfQklUUy1QQVNTMV9CSVRTKTsKLSAgICB3c3B0cltEQ1RTSVpFKjJdID0gKGludCkgUklHSFRfU0hJRlQodG1wMTIgKyB0bXAxLCBDT05TVF9CSVRTLVBBU1MxX0JJVFMpOwotICAgIHdzcHRyW0RDVFNJWkUqNV0gPSAoaW50KSBSSUdIVF9TSElGVCh0bXAxMiAtIHRtcDEsIENPTlNUX0JJVFMtUEFTUzFfQklUUyk7Ci0gICAgd3NwdHJbRENUU0laRSozXSA9IChpbnQpIFJJR0hUX1NISUZUKHRtcDEzICsgdG1wMCwgQ09OU1RfQklUUy1QQVNTMV9CSVRTKTsKLSAgICB3c3B0cltEQ1RTSVpFKjRdID0gKGludCkgUklHSFRfU0hJRlQodG1wMTMgLSB0bXAwLCBDT05TVF9CSVRTLVBBU1MxX0JJVFMpOworICAgIAorICAgIHdzcHRyW0RDVFNJWkUqMF0gPSAoaW50KSBERVNDQUxFKHRtcDEwICsgdG1wMywgQ09OU1RfQklUUy1QQVNTMV9CSVRTKTsKKyAgICB3c3B0cltEQ1RTSVpFKjddID0gKGludCkgREVTQ0FMRSh0bXAxMCAtIHRtcDMsIENPTlNUX0JJVFMtUEFTUzFfQklUUyk7CisgICAgd3NwdHJbRENUU0laRSoxXSA9IChpbnQpIERFU0NBTEUodG1wMTEgKyB0bXAyLCBDT05TVF9CSVRTLVBBU1MxX0JJVFMpOworICAgIHdzcHRyW0RDVFNJWkUqNl0gPSAoaW50KSBERVNDQUxFKHRtcDExIC0gdG1wMiwgQ09OU1RfQklUUy1QQVNTMV9CSVRTKTsKKyAgICB3c3B0cltEQ1RTSVpFKjJdID0gKGludCkgREVTQ0FMRSh0bXAxMiArIHRtcDEsIENPTlNUX0JJVFMtUEFTUzFfQklUUyk7CisgICAgd3NwdHJbRENUU0laRSo1XSA9IChpbnQpIERFU0NBTEUodG1wMTIgLSB0bXAxLCBDT05TVF9CSVRTLVBBU1MxX0JJVFMpOworICAgIHdzcHRyW0RDVFNJWkUqM10gPSAoaW50KSBERVNDQUxFKHRtcDEzICsgdG1wMCwgQ09OU1RfQklUUy1QQVNTMV9CSVRTKTsKKyAgICB3c3B0cltEQ1RTSVpFKjRdID0gKGludCkgREVTQ0FMRSh0bXAxMyAtIHRtcDAsIENPTlNUX0JJVFMtUEFTUzFfQklUUyk7CiAgICAgCiAgICAgaW5wdHIrKzsJCQkvKiBhZHZhbmNlIHBvaW50ZXJzIHRvIG5leHQgY29sdW1uICovCiAgICAgcXVhbnRwdHIrKzsKICAgICB3c3B0cisrOwogICB9Ci0KKyAgCiAgIC8qIFBhc3MgMjogcHJvY2VzcyByb3dzIGZyb20gd29yayBhcnJheSwgc3RvcmUgaW50byBvdXRwdXQgYXJyYXkuICovCiAgIC8qIE5vdGUgdGhhdCB3ZSBtdXN0IGRlc2NhbGUgdGhlIHJlc3VsdHMgYnkgYSBmYWN0b3Igb2YgOCA9PSAyKiozLCAqLwogICAvKiBhbmQgYWxzbyB1bmRvIHRoZSBQQVNTMV9CSVRTIHNjYWxpbmcuICovCkBAIC0zMDgsMTQgKzI4MywxNCBAQAogICAgICAqIHRlc3QgdGFrZXMgbW9yZSB0aW1lIHRoYW4gaXQncyB3b3J0aC4gIEluIHRoYXQgY2FzZSB0aGlzIHNlY3Rpb24KICAgICAgKiBtYXkgYmUgY29tbWVudGVkIG91dC4KICAgICAgKi8KLQorICAgIAogI2lmbmRlZiBOT19aRVJPX1JPV19URVNUCiAgICAgaWYgKHdzcHRyWzFdID09IDAgJiYgd3NwdHJbMl0gPT0gMCAmJiB3c3B0clszXSA9PSAwICYmIHdzcHRyWzRdID09IDAgJiYKIAl3c3B0cls1XSA9PSAwICYmIHdzcHRyWzZdID09IDAgJiYgd3NwdHJbN10gPT0gMCkgewogICAgICAgLyogQUMgdGVybXMgYWxsIHplcm8gKi8KICAgICAgIEpTQU1QTEUgZGN2YWwgPSByYW5nZV9saW1pdFsoaW50KSBERVNDQUxFKChJTlQzMikgd3NwdHJbMF0sIFBBU1MxX0JJVFMrMykKIAkJCQkgICYgUkFOR0VfTUFTS107Ci0KKyAgICAgIAogICAgICAgb3V0cHRyWzBdID0gZGN2YWw7CiAgICAgICBvdXRwdHJbMV0gPSBkY3ZhbDsKICAgICAgIG91dHB0clsyXSA9IGRjdmFsOwpAQCAtMzI5LDM4MTkgKzMwNCw2IEBACiAgICAgICBjb250aW51ZTsKICAgICB9CiAjZW5kaWYKLQotICAgIC8qIEV2ZW4gcGFydDogcmV2ZXJzZSB0aGUgZXZlbiBwYXJ0IG9mIHRoZSBmb3J3YXJkIERDVC4gKi8KLSAgICAvKiBUaGUgcm90YXRvciBpcyBzcXJ0KDIpKmMoLTYpLiAqLwotICAgIAotICAgIHoyID0gKElOVDMyKSB3c3B0clsyXTsKLSAgICB6MyA9IChJTlQzMikgd3NwdHJbNl07Ci0KLSAgICB6MSA9IE1VTFRJUExZKHoyICsgejMsIEZJWF8wXzU0MTE5NjEwMCk7Ci0gICAgdG1wMiA9IHoxICsgTVVMVElQTFkoejIsIEZJWF8wXzc2NTM2Njg2NSk7Ci0gICAgdG1wMyA9IHoxIC0gTVVMVElQTFkoejMsIEZJWF8xXzg0Nzc1OTA2NSk7Ci0KLSAgICAvKiBBZGQgZnVkZ2UgZmFjdG9yIGhlcmUgZm9yIGZpbmFsIGRlc2NhbGUuICovCi0gICAgejIgPSAoSU5UMzIpIHdzcHRyWzBdICsgKE9ORSA8PCAoUEFTUzFfQklUUysyKSk7Ci0gICAgejMgPSAoSU5UMzIpIHdzcHRyWzRdOwotCi0gICAgdG1wMCA9ICh6MiArIHozKSA8PCBDT05TVF9CSVRTOwotICAgIHRtcDEgPSAoejIgLSB6MykgPDwgQ09OU1RfQklUUzsKLSAgICAKLSAgICB0bXAxMCA9IHRtcDAgKyB0bXAyOwotICAgIHRtcDEzID0gdG1wMCAtIHRtcDI7Ci0gICAgdG1wMTEgPSB0bXAxICsgdG1wMzsKLSAgICB0bXAxMiA9IHRtcDEgLSB0bXAzOwotCi0gICAgLyogT2RkIHBhcnQgcGVyIGZpZ3VyZSA4OyB0aGUgbWF0cml4IGlzIHVuaXRhcnkgYW5kIGhlbmNlIGl0cwotICAgICAqIHRyYW5zcG9zZSBpcyBpdHMgaW52ZXJzZS4gIGkwLi5pMyBhcmUgeTcseTUseTMseTEgcmVzcGVjdGl2ZWx5LgotICAgICAqLwotCi0gICAgdG1wMCA9IChJTlQzMikgd3NwdHJbN107Ci0gICAgdG1wMSA9IChJTlQzMikgd3NwdHJbNV07Ci0gICAgdG1wMiA9IChJTlQzMikgd3NwdHJbM107Ci0gICAgdG1wMyA9IChJTlQzMikgd3NwdHJbMV07Ci0KLSAgICB6MiA9IHRtcDAgKyB0bXAyOwotICAgIHozID0gdG1wMSArIHRtcDM7Ci0KLSAgICB6MSA9IE1VTFRJUExZKHoyICsgejMsIEZJWF8xXzE3NTg3NTYwMik7IC8qIHNxcnQoMikgKiBjMyAqLwotICAgIHoyID0gTVVMVElQTFkoejIsIC0gRklYXzFfOTYxNTcwNTYwKTsgLyogc3FydCgyKSAqICgtYzMtYzUpICovCi0gICAgejMgPSBNVUxUSVBMWSh6MywgLSBGSVhfMF8zOTAxODA2NDQpOyAvKiBzcXJ0KDIpICogKGM1LWMzKSAqLwotICAgIHoyICs9IHoxOwotICAgIHozICs9IHoxOwotCi0gICAgejEgPSBNVUxUSVBMWSh0bXAwICsgdG1wMywgLSBGSVhfMF84OTk5NzYyMjMpOyAvKiBzcXJ0KDIpICogKGM3LWMzKSAqLwotICAgIHRtcDAgPSBNVUxUSVBMWSh0bXAwLCBGSVhfMF8yOTg2MzEzMzYpOyAvKiBzcXJ0KDIpICogKC1jMStjMytjNS1jNykgKi8KLSAgICB0bXAzID0gTVVMVElQTFkodG1wMywgRklYXzFfNTAxMzIxMTEwKTsgLyogc3FydCgyKSAqICggYzErYzMtYzUtYzcpICovCi0gICAgdG1wMCArPSB6MSArIHoyOwotICAgIHRtcDMgKz0gejEgKyB6MzsKLQotICAgIHoxID0gTVVMVElQTFkodG1wMSArIHRtcDIsIC0gRklYXzJfNTYyOTE1NDQ3KTsgLyogc3FydCgyKSAqICgtYzEtYzMpICovCi0gICAgdG1wMSA9IE1VTFRJUExZKHRtcDEsIEZJWF8yXzA1MzExOTg2OSk7IC8qIHNxcnQoMikgKiAoIGMxK2MzLWM1K2M3KSAqLwotICAgIHRtcDIgPSBNVUxUSVBMWSh0bXAyLCBGSVhfM18wNzI3MTEwMjYpOyAvKiBzcXJ0KDIpICogKCBjMStjMytjNS1jNykgKi8KLSAgICB0bXAxICs9IHoxICsgejM7Ci0gICAgdG1wMiArPSB6MSArIHoyOwotCi0gICAgLyogRmluYWwgb3V0cHV0IHN0YWdlOiBpbnB1dHMgYXJlIHRtcDEwLi50bXAxMywgdG1wMC4udG1wMyAqLwotCi0gICAgb3V0cHRyWzBdID0gcmFuZ2VfbGltaXRbKGludCkgUklHSFRfU0hJRlQodG1wMTAgKyB0bXAzLAotCQkJCQkgICAgICBDT05TVF9CSVRTK1BBU1MxX0JJVFMrMykKLQkJCSAgICAmIFJBTkdFX01BU0tdOwotICAgIG91dHB0cls3XSA9IHJhbmdlX2xpbWl0WyhpbnQpIFJJR0hUX1NISUZUKHRtcDEwIC0gdG1wMywKLQkJCQkJICAgICAgQ09OU1RfQklUUytQQVNTMV9CSVRTKzMpCi0JCQkgICAgJiBSQU5HRV9NQVNLXTsKLSAgICBvdXRwdHJbMV0gPSByYW5nZV9saW1pdFsoaW50KSBSSUdIVF9TSElGVCh0bXAxMSArIHRtcDIsCi0JCQkJCSAgICAgIENPTlNUX0JJVFMrUEFTUzFfQklUUyszKQotCQkJICAgICYgUkFOR0VfTUFTS107Ci0gICAgb3V0cHRyWzZdID0gcmFuZ2VfbGltaXRbKGludCkgUklHSFRfU0hJRlQodG1wMTEgLSB0bXAyLAotCQkJCQkgICAgICBDT05TVF9CSVRTK1BBU1MxX0JJVFMrMykKLQkJCSAgICAmIFJBTkdFX01BU0tdOwotICAgIG91dHB0clsyXSA9IHJhbmdlX2xpbWl0WyhpbnQpIFJJR0hUX1NISUZUKHRtcDEyICsgdG1wMSwKLQkJCQkJICAgICAgQ09OU1RfQklUUytQQVNTMV9CSVRTKzMpCi0JCQkgICAgJiBSQU5HRV9NQVNLXTsKLSAgICBvdXRwdHJbNV0gPSByYW5nZV9saW1pdFsoaW50KSBSSUdIVF9TSElGVCh0bXAxMiAtIHRtcDEsCi0JCQkJCSAgICAgIENPTlNUX0JJVFMrUEFTUzFfQklUUyszKQotCQkJICAgICYgUkFOR0VfTUFTS107Ci0gICAgb3V0cHRyWzNdID0gcmFuZ2VfbGltaXRbKGludCkgUklHSFRfU0hJRlQodG1wMTMgKyB0bXAwLAotCQkJCQkgICAgICBDT05TVF9CSVRTK1BBU1MxX0JJVFMrMykKLQkJCSAgICAmIFJBTkdFX01BU0tdOwotICAgIG91dHB0cls0XSA9IHJhbmdlX2xpbWl0WyhpbnQpIFJJR0hUX1NISUZUKHRtcDEzIC0gdG1wMCwKLQkJCQkJICAgICAgQ09OU1RfQklUUytQQVNTMV9CSVRTKzMpCi0JCQkgICAgJiBSQU5HRV9NQVNLXTsKLQotICAgIHdzcHRyICs9IERDVFNJWkU7CQkvKiBhZHZhbmNlIHBvaW50ZXIgdG8gbmV4dCByb3cgKi8KLSAgfQotfQotCi0jaWZkZWYgSURDVF9TQ0FMSU5HX1NVUFBPUlRFRAotCi0KLS8qCi0gKiBQZXJmb3JtIGRlcXVhbnRpemF0aW9uIGFuZCBpbnZlcnNlIERDVCBvbiBvbmUgYmxvY2sgb2YgY29lZmZpY2llbnRzLAotICogcHJvZHVjaW5nIGEgN3g3IG91dHB1dCBibG9jay4KLSAqCi0gKiBPcHRpbWl6ZWQgYWxnb3JpdGhtIHdpdGggMTIgbXVsdGlwbGljYXRpb25zIGluIHRoZSAxLUQga2VybmVsLgotICogY0sgcmVwcmVzZW50cyBzcXJ0KDIpICogY29zKEsqcGkvMTQpLgotICovCi0KLUdMT0JBTCh2b2lkKQotanBlZ19pZGN0Xzd4NyAoal9kZWNvbXByZXNzX3B0ciBjaW5mbywganBlZ19jb21wb25lbnRfaW5mbyAqIGNvbXBwdHIsCi0JICAgICAgIEpDT0VGUFRSIGNvZWZfYmxvY2ssCi0JICAgICAgIEpTQU1QQVJSQVkgb3V0cHV0X2J1ZiwgSkRJTUVOU0lPTiBvdXRwdXRfY29sKQotewotICBJTlQzMiB0bXAwLCB0bXAxLCB0bXAyLCB0bXAxMCwgdG1wMTEsIHRtcDEyLCB0bXAxMzsKLSAgSU5UMzIgejEsIHoyLCB6MzsKLSAgSkNPRUZQVFIgaW5wdHI7Ci0gIElTTE9XX01VTFRfVFlQRSAqIHF1YW50cHRyOwotICBpbnQgKiB3c3B0cjsKLSAgSlNBTVBST1cgb3V0cHRyOwotICBKU0FNUExFICpyYW5nZV9saW1pdCA9IElEQ1RfcmFuZ2VfbGltaXQoY2luZm8pOwotICBpbnQgY3RyOwotICBpbnQgd29ya3NwYWNlWzcqN107CS8qIGJ1ZmZlcnMgZGF0YSBiZXR3ZWVuIHBhc3NlcyAqLwotICBTSElGVF9URU1QUwotCi0gIC8qIFBhc3MgMTogcHJvY2VzcyBjb2x1bW5zIGZyb20gaW5wdXQsIHN0b3JlIGludG8gd29yayBhcnJheS4gKi8KLQotICBpbnB0ciA9IGNvZWZfYmxvY2s7Ci0gIHF1YW50cHRyID0gKElTTE9XX01VTFRfVFlQRSAqKSBjb21wcHRyLT5kY3RfdGFibGU7Ci0gIHdzcHRyID0gd29ya3NwYWNlOwotICBmb3IgKGN0ciA9IDA7IGN0ciA8IDc7IGN0cisrLCBpbnB0cisrLCBxdWFudHB0cisrLCB3c3B0cisrKSB7Ci0gICAgLyogRXZlbiBwYXJ0ICovCi0KLSAgICB0bXAxMyA9IERFUVVBTlRJWkUoaW5wdHJbRENUU0laRSowXSwgcXVhbnRwdHJbRENUU0laRSowXSk7Ci0gICAgdG1wMTMgPDw9IENPTlNUX0JJVFM7Ci0gICAgLyogQWRkIGZ1ZGdlIGZhY3RvciBoZXJlIGZvciBmaW5hbCBkZXNjYWxlLiAqLwotICAgIHRtcDEzICs9IE9ORSA8PCAoQ09OU1RfQklUUy1QQVNTMV9CSVRTLTEpOwotCi0gICAgejEgPSBERVFVQU5USVpFKGlucHRyW0RDVFNJWkUqMl0sIHF1YW50cHRyW0RDVFNJWkUqMl0pOwotICAgIHoyID0gREVRVUFOVElaRShpbnB0cltEQ1RTSVpFKjRdLCBxdWFudHB0cltEQ1RTSVpFKjRdKTsKLSAgICB6MyA9IERFUVVBTlRJWkUoaW5wdHJbRENUU0laRSo2XSwgcXVhbnRwdHJbRENUU0laRSo2XSk7Ci0KLSAgICB0bXAxMCA9IE1VTFRJUExZKHoyIC0gejMsIEZJWCgwLjg4MTc0NzczNCkpOyAgICAgLyogYzQgKi8KLSAgICB0bXAxMiA9IE1VTFRJUExZKHoxIC0gejIsIEZJWCgwLjMxNDY5MjEyMykpOyAgICAgLyogYzYgKi8KLSAgICB0bXAxMSA9IHRtcDEwICsgdG1wMTIgKyB0bXAxMyAtIE1VTFRJUExZKHoyLCBGSVgoMS44NDEyMTgwMDMpKTsgLyogYzIrYzQtYzYgKi8KLSAgICB0bXAwID0gejEgKyB6MzsKLSAgICB6MiAtPSB0bXAwOwotICAgIHRtcDAgPSBNVUxUSVBMWSh0bXAwLCBGSVgoMS4yNzQxNjIzOTIpKSArIHRtcDEzOyAvKiBjMiAqLwotICAgIHRtcDEwICs9IHRtcDAgLSBNVUxUSVBMWSh6MywgRklYKDAuMDc3NzIyNTM2KSk7ICAvKiBjMi1jNC1jNiAqLwotICAgIHRtcDEyICs9IHRtcDAgLSBNVUxUSVBMWSh6MSwgRklYKDIuNDcwNjAyMjQ5KSk7ICAvKiBjMitjNCtjNiAqLwotICAgIHRtcDEzICs9IE1VTFRJUExZKHoyLCBGSVgoMS40MTQyMTM1NjIpKTsgICAgICAgICAvKiBjMCAqLwotCi0gICAgLyogT2RkIHBhcnQgKi8KLQotICAgIHoxID0gREVRVUFOVElaRShpbnB0cltEQ1RTSVpFKjFdLCBxdWFudHB0cltEQ1RTSVpFKjFdKTsKLSAgICB6MiA9IERFUVVBTlRJWkUoaW5wdHJbRENUU0laRSozXSwgcXVhbnRwdHJbRENUU0laRSozXSk7Ci0gICAgejMgPSBERVFVQU5USVpFKGlucHRyW0RDVFNJWkUqNV0sIHF1YW50cHRyW0RDVFNJWkUqNV0pOwotCi0gICAgdG1wMSA9IE1VTFRJUExZKHoxICsgejIsIEZJWCgwLjkzNTQxNDM0NykpOyAgICAgIC8qIChjMytjMS1jNSkvMiAqLwotICAgIHRtcDIgPSBNVUxUSVBMWSh6MSAtIHoyLCBGSVgoMC4xNzAyNjIzMzkpKTsgICAgICAvKiAoYzMrYzUtYzEpLzIgKi8KLSAgICB0bXAwID0gdG1wMSAtIHRtcDI7Ci0gICAgdG1wMSArPSB0bXAyOwotICAgIHRtcDIgPSBNVUxUSVBMWSh6MiArIHozLCAtIEZJWCgxLjM3ODc1NjI3NikpOyAgICAvKiAtYzEgKi8KLSAgICB0bXAxICs9IHRtcDI7Ci0gICAgejIgPSBNVUxUSVBMWSh6MSArIHozLCBGSVgoMC42MTM2MDQyNjgpKTsgICAgICAgIC8qIGM1ICovCi0gICAgdG1wMCArPSB6MjsKLSAgICB0bXAyICs9IHoyICsgTVVMVElQTFkoejMsIEZJWCgxLjg3MDgyODY5MykpOyAgICAgLyogYzMrYzEtYzUgKi8KLQotICAgIC8qIEZpbmFsIG91dHB1dCBzdGFnZSAqLwotCi0gICAgd3NwdHJbNyowXSA9IChpbnQpIFJJR0hUX1NISUZUKHRtcDEwICsgdG1wMCwgQ09OU1RfQklUUy1QQVNTMV9CSVRTKTsKLSAgICB3c3B0cls3KjZdID0gKGludCkgUklHSFRfU0hJRlQodG1wMTAgLSB0bXAwLCBDT05TVF9CSVRTLVBBU1MxX0JJVFMpOwotICAgIHdzcHRyWzcqMV0gPSAoaW50KSBSSUdIVF9TSElGVCh0bXAxMSArIHRtcDEsIENPTlNUX0JJVFMtUEFTUzFfQklUUyk7Ci0gICAgd3NwdHJbNyo1XSA9IChpbnQpIFJJR0hUX1NISUZUKHRtcDExIC0gdG1wMSwgQ09OU1RfQklUUy1QQVNTMV9CSVRTKTsKLSAgICB3c3B0cls3KjJdID0gKGludCkgUklHSFRfU0hJRlQodG1wMTIgKyB0bXAyLCBDT05TVF9CSVRTLVBBU1MxX0JJVFMpOwotICAgIHdzcHRyWzcqNF0gPSAoaW50KSBSSUdIVF9TSElGVCh0bXAxMiAtIHRtcDIsIENPTlNUX0JJVFMtUEFTUzFfQklUUyk7Ci0gICAgd3NwdHJbNyozXSA9IChpbnQpIFJJR0hUX1NISUZUKHRtcDEzLCBDT05TVF9CSVRTLVBBU1MxX0JJVFMpOwotICB9Ci0KLSAgLyogUGFzcyAyOiBwcm9jZXNzIDcgcm93cyBmcm9tIHdvcmsgYXJyYXksIHN0b3JlIGludG8gb3V0cHV0IGFycmF5LiAqLwotCi0gIHdzcHRyID0gd29ya3NwYWNlOwotICBmb3IgKGN0ciA9IDA7IGN0ciA8IDc7IGN0cisrKSB7Ci0gICAgb3V0cHRyID0gb3V0cHV0X2J1ZltjdHJdICsgb3V0cHV0X2NvbDsKLQotICAgIC8qIEV2ZW4gcGFydCAqLwotCi0gICAgLyogQWRkIGZ1ZGdlIGZhY3RvciBoZXJlIGZvciBmaW5hbCBkZXNjYWxlLiAqLwotICAgIHRtcDEzID0gKElOVDMyKSB3c3B0clswXSArIChPTkUgPDwgKFBBU1MxX0JJVFMrMikpOwotICAgIHRtcDEzIDw8PSBDT05TVF9CSVRTOwotCi0gICAgejEgPSAoSU5UMzIpIHdzcHRyWzJdOwotICAgIHoyID0gKElOVDMyKSB3c3B0cls0XTsKLSAgICB6MyA9IChJTlQzMikgd3NwdHJbNl07Ci0KLSAgICB0bXAxMCA9IE1VTFRJUExZKHoyIC0gejMsIEZJWCgwLjg4MTc0NzczNCkpOyAgICAgLyogYzQgKi8KLSAgICB0bXAxMiA9IE1VTFRJUExZKHoxIC0gejIsIEZJWCgwLjMxNDY5MjEyMykpOyAgICAgLyogYzYgKi8KLSAgICB0bXAxMSA9IHRtcDEwICsgdG1wMTIgKyB0bXAxMyAtIE1VTFRJUExZKHoyLCBGSVgoMS44NDEyMTgwMDMpKTsgLyogYzIrYzQtYzYgKi8KLSAgICB0bXAwID0gejEgKyB6MzsKLSAgICB6MiAtPSB0bXAwOwotICAgIHRtcDAgPSBNVUxUSVBMWSh0bXAwLCBGSVgoMS4yNzQxNjIzOTIpKSArIHRtcDEzOyAvKiBjMiAqLwotICAgIHRtcDEwICs9IHRtcDAgLSBNVUxUSVBMWSh6MywgRklYKDAuMDc3NzIyNTM2KSk7ICAvKiBjMi1jNC1jNiAqLwotICAgIHRtcDEyICs9IHRtcDAgLSBNVUxUSVBMWSh6MSwgRklYKDIuNDcwNjAyMjQ5KSk7ICAvKiBjMitjNCtjNiAqLwotICAgIHRtcDEzICs9IE1VTFRJUExZKHoyLCBGSVgoMS40MTQyMTM1NjIpKTsgICAgICAgICAvKiBjMCAqLwotCi0gICAgLyogT2RkIHBhcnQgKi8KLQotICAgIHoxID0gKElOVDMyKSB3c3B0clsxXTsKLSAgICB6MiA9IChJTlQzMikgd3NwdHJbM107Ci0gICAgejMgPSAoSU5UMzIpIHdzcHRyWzVdOwotCi0gICAgdG1wMSA9IE1VTFRJUExZKHoxICsgejIsIEZJWCgwLjkzNTQxNDM0NykpOyAgICAgIC8qIChjMytjMS1jNSkvMiAqLwotICAgIHRtcDIgPSBNVUxUSVBMWSh6MSAtIHoyLCBGSVgoMC4xNzAyNjIzMzkpKTsgICAgICAvKiAoYzMrYzUtYzEpLzIgKi8KLSAgICB0bXAwID0gdG1wMSAtIHRtcDI7Ci0gICAgdG1wMSArPSB0bXAyOwotICAgIHRtcDIgPSBNVUxUSVBMWSh6MiArIHozLCAtIEZJWCgxLjM3ODc1NjI3NikpOyAgICAvKiAtYzEgKi8KLSAgICB0bXAxICs9IHRtcDI7Ci0gICAgejIgPSBNVUxUSVBMWSh6MSArIHozLCBGSVgoMC42MTM2MDQyNjgpKTsgICAgICAgIC8qIGM1ICovCi0gICAgdG1wMCArPSB6MjsKLSAgICB0bXAyICs9IHoyICsgTVVMVElQTFkoejMsIEZJWCgxLjg3MDgyODY5MykpOyAgICAgLyogYzMrYzEtYzUgKi8KLQotICAgIC8qIEZpbmFsIG91dHB1dCBzdGFnZSAqLwotCi0gICAgb3V0cHRyWzBdID0gcmFuZ2VfbGltaXRbKGludCkgUklHSFRfU0hJRlQodG1wMTAgKyB0bXAwLAotCQkJCQkgICAgICBDT05TVF9CSVRTK1BBU1MxX0JJVFMrMykKLQkJCSAgICAmIFJBTkdFX01BU0tdOwotICAgIG91dHB0cls2XSA9IHJhbmdlX2xpbWl0WyhpbnQpIFJJR0hUX1NISUZUKHRtcDEwIC0gdG1wMCwKLQkJCQkJICAgICAgQ09OU1RfQklUUytQQVNTMV9CSVRTKzMpCi0JCQkgICAgJiBSQU5HRV9NQVNLXTsKLSAgICBvdXRwdHJbMV0gPSByYW5nZV9saW1pdFsoaW50KSBSSUdIVF9TSElGVCh0bXAxMSArIHRtcDEsCi0JCQkJCSAgICAgIENPTlNUX0JJVFMrUEFTUzFfQklUUyszKQotCQkJICAgICYgUkFOR0VfTUFTS107Ci0gICAgb3V0cHRyWzVdID0gcmFuZ2VfbGltaXRbKGludCkgUklHSFRfU0hJRlQodG1wMTEgLSB0bXAxLAotCQkJCQkgICAgICBDT05TVF9CSVRTK1BBU1MxX0JJVFMrMykKLQkJCSAgICAmIFJBTkdFX01BU0tdOwotICAgIG91dHB0clsyXSA9IHJhbmdlX2xpbWl0WyhpbnQpIFJJR0hUX1NISUZUKHRtcDEyICsgdG1wMiwKLQkJCQkJICAgICAgQ09OU1RfQklUUytQQVNTMV9CSVRTKzMpCi0JCQkgICAgJiBSQU5HRV9NQVNLXTsKLSAgICBvdXRwdHJbNF0gPSByYW5nZV9saW1pdFsoaW50KSBSSUdIVF9TSElGVCh0bXAxMiAtIHRtcDIsCi0JCQkJCSAgICAgIENPTlNUX0JJVFMrUEFTUzFfQklUUyszKQotCQkJICAgICYgUkFOR0VfTUFTS107Ci0gICAgb3V0cHRyWzNdID0gcmFuZ2VfbGltaXRbKGludCkgUklHSFRfU0hJRlQodG1wMTMsCi0JCQkJCSAgICAgIENPTlNUX0JJVFMrUEFTUzFfQklUUyszKQotCQkJICAgICYgUkFOR0VfTUFTS107Ci0KLSAgICB3c3B0ciArPSA3OwkJLyogYWR2YW5jZSBwb2ludGVyIHRvIG5leHQgcm93ICovCi0gIH0KLX0KLQotCi0vKgotICogUGVyZm9ybSBkZXF1YW50aXphdGlvbiBhbmQgaW52ZXJzZSBEQ1Qgb24gb25lIGJsb2NrIG9mIGNvZWZmaWNpZW50cywKLSAqIHByb2R1Y2luZyBhIHJlZHVjZWQtc2l6ZSA2eDYgb3V0cHV0IGJsb2NrLgotICoKLSAqIE9wdGltaXplZCBhbGdvcml0aG0gd2l0aCAzIG11bHRpcGxpY2F0aW9ucyBpbiB0aGUgMS1EIGtlcm5lbC4KLSAqIGNLIHJlcHJlc2VudHMgc3FydCgyKSAqIGNvcyhLKnBpLzEyKS4KLSAqLwotCi1HTE9CQUwodm9pZCkKLWpwZWdfaWRjdF82eDYgKGpfZGVjb21wcmVzc19wdHIgY2luZm8sIGpwZWdfY29tcG9uZW50X2luZm8gKiBjb21wcHRyLAotCSAgICAgICBKQ09FRlBUUiBjb2VmX2Jsb2NrLAotCSAgICAgICBKU0FNUEFSUkFZIG91dHB1dF9idWYsIEpESU1FTlNJT04gb3V0cHV0X2NvbCkKLXsKLSAgSU5UMzIgdG1wMCwgdG1wMSwgdG1wMiwgdG1wMTAsIHRtcDExLCB0bXAxMjsKLSAgSU5UMzIgejEsIHoyLCB6MzsKLSAgSkNPRUZQVFIgaW5wdHI7Ci0gIElTTE9XX01VTFRfVFlQRSAqIHF1YW50cHRyOwotICBpbnQgKiB3c3B0cjsKLSAgSlNBTVBST1cgb3V0cHRyOwotICBKU0FNUExFICpyYW5nZV9saW1pdCA9IElEQ1RfcmFuZ2VfbGltaXQoY2luZm8pOwotICBpbnQgY3RyOwotICBpbnQgd29ya3NwYWNlWzYqNl07CS8qIGJ1ZmZlcnMgZGF0YSBiZXR3ZWVuIHBhc3NlcyAqLwotICBTSElGVF9URU1QUwotCi0gIC8qIFBhc3MgMTogcHJvY2VzcyBjb2x1bW5zIGZyb20gaW5wdXQsIHN0b3JlIGludG8gd29yayBhcnJheS4gKi8KLQotICBpbnB0ciA9IGNvZWZfYmxvY2s7Ci0gIHF1YW50cHRyID0gKElTTE9XX01VTFRfVFlQRSAqKSBjb21wcHRyLT5kY3RfdGFibGU7Ci0gIHdzcHRyID0gd29ya3NwYWNlOwotICBmb3IgKGN0ciA9IDA7IGN0ciA8IDY7IGN0cisrLCBpbnB0cisrLCBxdWFudHB0cisrLCB3c3B0cisrKSB7Ci0gICAgLyogRXZlbiBwYXJ0ICovCi0KLSAgICB0bXAwID0gREVRVUFOVElaRShpbnB0cltEQ1RTSVpFKjBdLCBxdWFudHB0cltEQ1RTSVpFKjBdKTsKLSAgICB0bXAwIDw8PSBDT05TVF9CSVRTOwotICAgIC8qIEFkZCBmdWRnZSBmYWN0b3IgaGVyZSBmb3IgZmluYWwgZGVzY2FsZS4gKi8KLSAgICB0bXAwICs9IE9ORSA8PCAoQ09OU1RfQklUUy1QQVNTMV9CSVRTLTEpOwotICAgIHRtcDIgPSBERVFVQU5USVpFKGlucHRyW0RDVFNJWkUqNF0sIHF1YW50cHRyW0RDVFNJWkUqNF0pOwotICAgIHRtcDEwID0gTVVMVElQTFkodG1wMiwgRklYKDAuNzA3MTA2NzgxKSk7ICAgLyogYzQgKi8KLSAgICB0bXAxID0gdG1wMCArIHRtcDEwOwotICAgIHRtcDExID0gUklHSFRfU0hJRlQodG1wMCAtIHRtcDEwIC0gdG1wMTAsIENPTlNUX0JJVFMtUEFTUzFfQklUUyk7Ci0gICAgdG1wMTAgPSBERVFVQU5USVpFKGlucHRyW0RDVFNJWkUqMl0sIHF1YW50cHRyW0RDVFNJWkUqMl0pOwotICAgIHRtcDAgPSBNVUxUSVBMWSh0bXAxMCwgRklYKDEuMjI0NzQ0ODcxKSk7ICAgLyogYzIgKi8KLSAgICB0bXAxMCA9IHRtcDEgKyB0bXAwOwotICAgIHRtcDEyID0gdG1wMSAtIHRtcDA7Ci0KLSAgICAvKiBPZGQgcGFydCAqLwotCi0gICAgejEgPSBERVFVQU5USVpFKGlucHRyW0RDVFNJWkUqMV0sIHF1YW50cHRyW0RDVFNJWkUqMV0pOwotICAgIHoyID0gREVRVUFOVElaRShpbnB0cltEQ1RTSVpFKjNdLCBxdWFudHB0cltEQ1RTSVpFKjNdKTsKLSAgICB6MyA9IERFUVVBTlRJWkUoaW5wdHJbRENUU0laRSo1XSwgcXVhbnRwdHJbRENUU0laRSo1XSk7Ci0gICAgdG1wMSA9IE1VTFRJUExZKHoxICsgejMsIEZJWCgwLjM2NjAyNTQwNCkpOyAvKiBjNSAqLwotICAgIHRtcDAgPSB0bXAxICsgKCh6MSArIHoyKSA8PCBDT05TVF9CSVRTKTsKLSAgICB0bXAyID0gdG1wMSArICgoejMgLSB6MikgPDwgQ09OU1RfQklUUyk7Ci0gICAgdG1wMSA9ICh6MSAtIHoyIC0gejMpIDw8IFBBU1MxX0JJVFM7Ci0KLSAgICAvKiBGaW5hbCBvdXRwdXQgc3RhZ2UgKi8KLQotICAgIHdzcHRyWzYqMF0gPSAoaW50KSBSSUdIVF9TSElGVCh0bXAxMCArIHRtcDAsIENPTlNUX0JJVFMtUEFTUzFfQklUUyk7Ci0gICAgd3NwdHJbNio1XSA9IChpbnQpIFJJR0hUX1NISUZUKHRtcDEwIC0gdG1wMCwgQ09OU1RfQklUUy1QQVNTMV9CSVRTKTsKLSAgICB3c3B0cls2KjFdID0gKGludCkgKHRtcDExICsgdG1wMSk7Ci0gICAgd3NwdHJbNio0XSA9IChpbnQpICh0bXAxMSAtIHRtcDEpOwotICAgIHdzcHRyWzYqMl0gPSAoaW50KSBSSUdIVF9TSElGVCh0bXAxMiArIHRtcDIsIENPTlNUX0JJVFMtUEFTUzFfQklUUyk7Ci0gICAgd3NwdHJbNiozXSA9IChpbnQpIFJJR0hUX1NISUZUKHRtcDEyIC0gdG1wMiwgQ09OU1RfQklUUy1QQVNTMV9CSVRTKTsKLSAgfQotCi0gIC8qIFBhc3MgMjogcHJvY2VzcyA2IHJvd3MgZnJvbSB3b3JrIGFycmF5LCBzdG9yZSBpbnRvIG91dHB1dCBhcnJheS4gKi8KLQotICB3c3B0ciA9IHdvcmtzcGFjZTsKLSAgZm9yIChjdHIgPSAwOyBjdHIgPCA2OyBjdHIrKykgewotICAgIG91dHB0ciA9IG91dHB1dF9idWZbY3RyXSArIG91dHB1dF9jb2w7Ci0KLSAgICAvKiBFdmVuIHBhcnQgKi8KLQotICAgIC8qIEFkZCBmdWRnZSBmYWN0b3IgaGVyZSBmb3IgZmluYWwgZGVzY2FsZS4gKi8KLSAgICB0bXAwID0gKElOVDMyKSB3c3B0clswXSArIChPTkUgPDwgKFBBU1MxX0JJVFMrMikpOwotICAgIHRtcDAgPDw9IENPTlNUX0JJVFM7Ci0gICAgdG1wMiA9IChJTlQzMikgd3NwdHJbNF07Ci0gICAgdG1wMTAgPSBNVUxUSVBMWSh0bXAyLCBGSVgoMC43MDcxMDY3ODEpKTsgICAvKiBjNCAqLwotICAgIHRtcDEgPSB0bXAwICsgdG1wMTA7Ci0gICAgdG1wMTEgPSB0bXAwIC0gdG1wMTAgLSB0bXAxMDsKLSAgICB0bXAxMCA9IChJTlQzMikgd3NwdHJbMl07Ci0gICAgdG1wMCA9IE1VTFRJUExZKHRtcDEwLCBGSVgoMS4yMjQ3NDQ4NzEpKTsgICAvKiBjMiAqLwotICAgIHRtcDEwID0gdG1wMSArIHRtcDA7Ci0gICAgdG1wMTIgPSB0bXAxIC0gdG1wMDsKLQotICAgIC8qIE9kZCBwYXJ0ICovCi0KLSAgICB6MSA9IChJTlQzMikgd3NwdHJbMV07Ci0gICAgejIgPSAoSU5UMzIpIHdzcHRyWzNdOwotICAgIHozID0gKElOVDMyKSB3c3B0cls1XTsKLSAgICB0bXAxID0gTVVMVElQTFkoejEgKyB6MywgRklYKDAuMzY2MDI1NDA0KSk7IC8qIGM1ICovCi0gICAgdG1wMCA9IHRtcDEgKyAoKHoxICsgejIpIDw8IENPTlNUX0JJVFMpOwotICAgIHRtcDIgPSB0bXAxICsgKCh6MyAtIHoyKSA8PCBDT05TVF9CSVRTKTsKLSAgICB0bXAxID0gKHoxIC0gejIgLSB6MykgPDwgQ09OU1RfQklUUzsKLQotICAgIC8qIEZpbmFsIG91dHB1dCBzdGFnZSAqLwotCi0gICAgb3V0cHRyWzBdID0gcmFuZ2VfbGltaXRbKGludCkgUklHSFRfU0hJRlQodG1wMTAgKyB0bXAwLAotCQkJCQkgICAgICBDT05TVF9CSVRTK1BBU1MxX0JJVFMrMykKLQkJCSAgICAmIFJBTkdFX01BU0tdOwotICAgIG91dHB0cls1XSA9IHJhbmdlX2xpbWl0WyhpbnQpIFJJR0hUX1NISUZUKHRtcDEwIC0gdG1wMCwKLQkJCQkJICAgICAgQ09OU1RfQklUUytQQVNTMV9CSVRTKzMpCi0JCQkgICAgJiBSQU5HRV9NQVNLXTsKLSAgICBvdXRwdHJbMV0gPSByYW5nZV9saW1pdFsoaW50KSBSSUdIVF9TSElGVCh0bXAxMSArIHRtcDEsCi0JCQkJCSAgICAgIENPTlNUX0JJVFMrUEFTUzFfQklUUyszKQotCQkJICAgICYgUkFOR0VfTUFTS107Ci0gICAgb3V0cHRyWzRdID0gcmFuZ2VfbGltaXRbKGludCkgUklHSFRfU0hJRlQodG1wMTEgLSB0bXAxLAotCQkJCQkgICAgICBDT05TVF9CSVRTK1BBU1MxX0JJVFMrMykKLQkJCSAgICAmIFJBTkdFX01BU0tdOwotICAgIG91dHB0clsyXSA9IHJhbmdlX2xpbWl0WyhpbnQpIFJJR0hUX1NISUZUKHRtcDEyICsgdG1wMiwKLQkJCQkJICAgICAgQ09OU1RfQklUUytQQVNTMV9CSVRTKzMpCi0JCQkgICAgJiBSQU5HRV9NQVNLXTsKLSAgICBvdXRwdHJbM10gPSByYW5nZV9saW1pdFsoaW50KSBSSUdIVF9TSElGVCh0bXAxMiAtIHRtcDIsCi0JCQkJCSAgICAgIENPTlNUX0JJVFMrUEFTUzFfQklUUyszKQotCQkJICAgICYgUkFOR0VfTUFTS107Ci0KLSAgICB3c3B0ciArPSA2OwkJLyogYWR2YW5jZSBwb2ludGVyIHRvIG5leHQgcm93ICovCi0gIH0KLX0KLQotCi0vKgotICogUGVyZm9ybSBkZXF1YW50aXphdGlvbiBhbmQgaW52ZXJzZSBEQ1Qgb24gb25lIGJsb2NrIG9mIGNvZWZmaWNpZW50cywKLSAqIHByb2R1Y2luZyBhIHJlZHVjZWQtc2l6ZSA1eDUgb3V0cHV0IGJsb2NrLgotICoKLSAqIE9wdGltaXplZCBhbGdvcml0aG0gd2l0aCA1IG11bHRpcGxpY2F0aW9ucyBpbiB0aGUgMS1EIGtlcm5lbC4KLSAqIGNLIHJlcHJlc2VudHMgc3FydCgyKSAqIGNvcyhLKnBpLzEwKS4KLSAqLwotCi1HTE9CQUwodm9pZCkKLWpwZWdfaWRjdF81eDUgKGpfZGVjb21wcmVzc19wdHIgY2luZm8sIGpwZWdfY29tcG9uZW50X2luZm8gKiBjb21wcHRyLAotCSAgICAgICBKQ09FRlBUUiBjb2VmX2Jsb2NrLAotCSAgICAgICBKU0FNUEFSUkFZIG91dHB1dF9idWYsIEpESU1FTlNJT04gb3V0cHV0X2NvbCkKLXsKLSAgSU5UMzIgdG1wMCwgdG1wMSwgdG1wMTAsIHRtcDExLCB0bXAxMjsKLSAgSU5UMzIgejEsIHoyLCB6MzsKLSAgSkNPRUZQVFIgaW5wdHI7Ci0gIElTTE9XX01VTFRfVFlQRSAqIHF1YW50cHRyOwotICBpbnQgKiB3c3B0cjsKLSAgSlNBTVBST1cgb3V0cHRyOwotICBKU0FNUExFICpyYW5nZV9saW1pdCA9IElEQ1RfcmFuZ2VfbGltaXQoY2luZm8pOwotICBpbnQgY3RyOwotICBpbnQgd29ya3NwYWNlWzUqNV07CS8qIGJ1ZmZlcnMgZGF0YSBiZXR3ZWVuIHBhc3NlcyAqLwotICBTSElGVF9URU1QUwotCi0gIC8qIFBhc3MgMTogcHJvY2VzcyBjb2x1bW5zIGZyb20gaW5wdXQsIHN0b3JlIGludG8gd29yayBhcnJheS4gKi8KLQotICBpbnB0ciA9IGNvZWZfYmxvY2s7Ci0gIHF1YW50cHRyID0gKElTTE9XX01VTFRfVFlQRSAqKSBjb21wcHRyLT5kY3RfdGFibGU7Ci0gIHdzcHRyID0gd29ya3NwYWNlOwotICBmb3IgKGN0ciA9IDA7IGN0ciA8IDU7IGN0cisrLCBpbnB0cisrLCBxdWFudHB0cisrLCB3c3B0cisrKSB7Ci0gICAgLyogRXZlbiBwYXJ0ICovCi0KLSAgICB0bXAxMiA9IERFUVVBTlRJWkUoaW5wdHJbRENUU0laRSowXSwgcXVhbnRwdHJbRENUU0laRSowXSk7Ci0gICAgdG1wMTIgPDw9IENPTlNUX0JJVFM7Ci0gICAgLyogQWRkIGZ1ZGdlIGZhY3RvciBoZXJlIGZvciBmaW5hbCBkZXNjYWxlLiAqLwotICAgIHRtcDEyICs9IE9ORSA8PCAoQ09OU1RfQklUUy1QQVNTMV9CSVRTLTEpOwotICAgIHRtcDAgPSBERVFVQU5USVpFKGlucHRyW0RDVFNJWkUqMl0sIHF1YW50cHRyW0RDVFNJWkUqMl0pOwotICAgIHRtcDEgPSBERVFVQU5USVpFKGlucHRyW0RDVFNJWkUqNF0sIHF1YW50cHRyW0RDVFNJWkUqNF0pOwotICAgIHoxID0gTVVMVElQTFkodG1wMCArIHRtcDEsIEZJWCgwLjc5MDU2OTQxNSkpOyAvKiAoYzIrYzQpLzIgKi8KLSAgICB6MiA9IE1VTFRJUExZKHRtcDAgLSB0bXAxLCBGSVgoMC4zNTM1NTMzOTEpKTsgLyogKGMyLWM0KS8yICovCi0gICAgejMgPSB0bXAxMiArIHoyOwotICAgIHRtcDEwID0gejMgKyB6MTsKLSAgICB0bXAxMSA9IHozIC0gejE7Ci0gICAgdG1wMTIgLT0gejIgPDwgMjsKLQotICAgIC8qIE9kZCBwYXJ0ICovCi0KLSAgICB6MiA9IERFUVVBTlRJWkUoaW5wdHJbRENUU0laRSoxXSwgcXVhbnRwdHJbRENUU0laRSoxXSk7Ci0gICAgejMgPSBERVFVQU5USVpFKGlucHRyW0RDVFNJWkUqM10sIHF1YW50cHRyW0RDVFNJWkUqM10pOwotCi0gICAgejEgPSBNVUxUSVBMWSh6MiArIHozLCBGSVgoMC44MzEyNTM4NzYpKTsgICAgIC8qIGMzICovCi0gICAgdG1wMCA9IHoxICsgTVVMVElQTFkoejIsIEZJWCgwLjUxMzc0MzE0OCkpOyAgIC8qIGMxLWMzICovCi0gICAgdG1wMSA9IHoxIC0gTVVMVElQTFkoejMsIEZJWCgyLjE3NjI1MDg5OSkpOyAgIC8qIGMxK2MzICovCi0KLSAgICAvKiBGaW5hbCBvdXRwdXQgc3RhZ2UgKi8KLQotICAgIHdzcHRyWzUqMF0gPSAoaW50KSBSSUdIVF9TSElGVCh0bXAxMCArIHRtcDAsIENPTlNUX0JJVFMtUEFTUzFfQklUUyk7Ci0gICAgd3NwdHJbNSo0XSA9IChpbnQpIFJJR0hUX1NISUZUKHRtcDEwIC0gdG1wMCwgQ09OU1RfQklUUy1QQVNTMV9CSVRTKTsKLSAgICB3c3B0cls1KjFdID0gKGludCkgUklHSFRfU0hJRlQodG1wMTEgKyB0bXAxLCBDT05TVF9CSVRTLVBBU1MxX0JJVFMpOwotICAgIHdzcHRyWzUqM10gPSAoaW50KSBSSUdIVF9TSElGVCh0bXAxMSAtIHRtcDEsIENPTlNUX0JJVFMtUEFTUzFfQklUUyk7Ci0gICAgd3NwdHJbNSoyXSA9IChpbnQpIFJJR0hUX1NISUZUKHRtcDEyLCBDT05TVF9CSVRTLVBBU1MxX0JJVFMpOwotICB9Ci0KLSAgLyogUGFzcyAyOiBwcm9jZXNzIDUgcm93cyBmcm9tIHdvcmsgYXJyYXksIHN0b3JlIGludG8gb3V0cHV0IGFycmF5LiAqLwotCi0gIHdzcHRyID0gd29ya3NwYWNlOwotICBmb3IgKGN0ciA9IDA7IGN0ciA8IDU7IGN0cisrKSB7Ci0gICAgb3V0cHRyID0gb3V0cHV0X2J1ZltjdHJdICsgb3V0cHV0X2NvbDsKLQotICAgIC8qIEV2ZW4gcGFydCAqLwotCi0gICAgLyogQWRkIGZ1ZGdlIGZhY3RvciBoZXJlIGZvciBmaW5hbCBkZXNjYWxlLiAqLwotICAgIHRtcDEyID0gKElOVDMyKSB3c3B0clswXSArIChPTkUgPDwgKFBBU1MxX0JJVFMrMikpOwotICAgIHRtcDEyIDw8PSBDT05TVF9CSVRTOwotICAgIHRtcDAgPSAoSU5UMzIpIHdzcHRyWzJdOwotICAgIHRtcDEgPSAoSU5UMzIpIHdzcHRyWzRdOwotICAgIHoxID0gTVVMVElQTFkodG1wMCArIHRtcDEsIEZJWCgwLjc5MDU2OTQxNSkpOyAvKiAoYzIrYzQpLzIgKi8KLSAgICB6MiA9IE1VTFRJUExZKHRtcDAgLSB0bXAxLCBGSVgoMC4zNTM1NTMzOTEpKTsgLyogKGMyLWM0KS8yICovCi0gICAgejMgPSB0bXAxMiArIHoyOwotICAgIHRtcDEwID0gejMgKyB6MTsKLSAgICB0bXAxMSA9IHozIC0gejE7Ci0gICAgdG1wMTIgLT0gejIgPDwgMjsKLQotICAgIC8qIE9kZCBwYXJ0ICovCi0KLSAgICB6MiA9IChJTlQzMikgd3NwdHJbMV07Ci0gICAgejMgPSAoSU5UMzIpIHdzcHRyWzNdOwotCi0gICAgejEgPSBNVUxUSVBMWSh6MiArIHozLCBGSVgoMC44MzEyNTM4NzYpKTsgICAgIC8qIGMzICovCi0gICAgdG1wMCA9IHoxICsgTVVMVElQTFkoejIsIEZJWCgwLjUxMzc0MzE0OCkpOyAgIC8qIGMxLWMzICovCi0gICAgdG1wMSA9IHoxIC0gTVVMVElQTFkoejMsIEZJWCgyLjE3NjI1MDg5OSkpOyAgIC8qIGMxK2MzICovCi0KLSAgICAvKiBGaW5hbCBvdXRwdXQgc3RhZ2UgKi8KLQotICAgIG91dHB0clswXSA9IHJhbmdlX2xpbWl0WyhpbnQpIFJJR0hUX1NISUZUKHRtcDEwICsgdG1wMCwKLQkJCQkJICAgICAgQ09OU1RfQklUUytQQVNTMV9CSVRTKzMpCi0JCQkgICAgJiBSQU5HRV9NQVNLXTsKLSAgICBvdXRwdHJbNF0gPSByYW5nZV9saW1pdFsoaW50KSBSSUdIVF9TSElGVCh0bXAxMCAtIHRtcDAsCi0JCQkJCSAgICAgIENPTlNUX0JJVFMrUEFTUzFfQklUUyszKQotCQkJICAgICYgUkFOR0VfTUFTS107Ci0gICAgb3V0cHRyWzFdID0gcmFuZ2VfbGltaXRbKGludCkgUklHSFRfU0hJRlQodG1wMTEgKyB0bXAxLAotCQkJCQkgICAgICBDT05TVF9CSVRTK1BBU1MxX0JJVFMrMykKLQkJCSAgICAmIFJBTkdFX01BU0tdOwotICAgIG91dHB0clszXSA9IHJhbmdlX2xpbWl0WyhpbnQpIFJJR0hUX1NISUZUKHRtcDExIC0gdG1wMSwKLQkJCQkJICAgICAgQ09OU1RfQklUUytQQVNTMV9CSVRTKzMpCi0JCQkgICAgJiBSQU5HRV9NQVNLXTsKLSAgICBvdXRwdHJbMl0gPSByYW5nZV9saW1pdFsoaW50KSBSSUdIVF9TSElGVCh0bXAxMiwKLQkJCQkJICAgICAgQ09OU1RfQklUUytQQVNTMV9CSVRTKzMpCi0JCQkgICAgJiBSQU5HRV9NQVNLXTsKLQotICAgIHdzcHRyICs9IDU7CQkvKiBhZHZhbmNlIHBvaW50ZXIgdG8gbmV4dCByb3cgKi8KLSAgfQotfQotCi0KLS8qCi0gKiBQZXJmb3JtIGRlcXVhbnRpemF0aW9uIGFuZCBpbnZlcnNlIERDVCBvbiBvbmUgYmxvY2sgb2YgY29lZmZpY2llbnRzLAotICogcHJvZHVjaW5nIGEgcmVkdWNlZC1zaXplIDR4NCBvdXRwdXQgYmxvY2suCi0gKgotICogT3B0aW1pemVkIGFsZ29yaXRobSB3aXRoIDMgbXVsdGlwbGljYXRpb25zIGluIHRoZSAxLUQga2VybmVsLgotICogY0sgcmVwcmVzZW50cyBzcXJ0KDIpICogY29zKEsqcGkvMTYpIFtyZWZlcnMgdG8gOC1wb2ludCBJRENUXS4KLSAqLwotCi1HTE9CQUwodm9pZCkKLWpwZWdfaWRjdF80eDQgKGpfZGVjb21wcmVzc19wdHIgY2luZm8sIGpwZWdfY29tcG9uZW50X2luZm8gKiBjb21wcHRyLAotCSAgICAgICBKQ09FRlBUUiBjb2VmX2Jsb2NrLAotCSAgICAgICBKU0FNUEFSUkFZIG91dHB1dF9idWYsIEpESU1FTlNJT04gb3V0cHV0X2NvbCkKLXsKLSAgSU5UMzIgdG1wMCwgdG1wMiwgdG1wMTAsIHRtcDEyOwotICBJTlQzMiB6MSwgejIsIHozOwotICBKQ09FRlBUUiBpbnB0cjsKLSAgSVNMT1dfTVVMVF9UWVBFICogcXVhbnRwdHI7Ci0gIGludCAqIHdzcHRyOwotICBKU0FNUFJPVyBvdXRwdHI7Ci0gIEpTQU1QTEUgKnJhbmdlX2xpbWl0ID0gSURDVF9yYW5nZV9saW1pdChjaW5mbyk7Ci0gIGludCBjdHI7Ci0gIGludCB3b3Jrc3BhY2VbNCo0XTsJLyogYnVmZmVycyBkYXRhIGJldHdlZW4gcGFzc2VzICovCi0gIFNISUZUX1RFTVBTCi0KLSAgLyogUGFzcyAxOiBwcm9jZXNzIGNvbHVtbnMgZnJvbSBpbnB1dCwgc3RvcmUgaW50byB3b3JrIGFycmF5LiAqLwotCi0gIGlucHRyID0gY29lZl9ibG9jazsKLSAgcXVhbnRwdHIgPSAoSVNMT1dfTVVMVF9UWVBFICopIGNvbXBwdHItPmRjdF90YWJsZTsKLSAgd3NwdHIgPSB3b3Jrc3BhY2U7Ci0gIGZvciAoY3RyID0gMDsgY3RyIDwgNDsgY3RyKyssIGlucHRyKyssIHF1YW50cHRyKyssIHdzcHRyKyspIHsKLSAgICAvKiBFdmVuIHBhcnQgKi8KLQotICAgIHRtcDAgPSBERVFVQU5USVpFKGlucHRyW0RDVFNJWkUqMF0sIHF1YW50cHRyW0RDVFNJWkUqMF0pOwotICAgIHRtcDIgPSBERVFVQU5USVpFKGlucHRyW0RDVFNJWkUqMl0sIHF1YW50cHRyW0RDVFNJWkUqMl0pOwotICAgIAotICAgIHRtcDEwID0gKHRtcDAgKyB0bXAyKSA8PCBQQVNTMV9CSVRTOwotICAgIHRtcDEyID0gKHRtcDAgLSB0bXAyKSA8PCBQQVNTMV9CSVRTOwotCi0gICAgLyogT2RkIHBhcnQgKi8KLSAgICAvKiBTYW1lIHJvdGF0aW9uIGFzIGluIHRoZSBldmVuIHBhcnQgb2YgdGhlIDh4OCBMTCZNIElEQ1QgKi8KLQotICAgIHoyID0gREVRVUFOVElaRShpbnB0cltEQ1RTSVpFKjFdLCBxdWFudHB0cltEQ1RTSVpFKjFdKTsKLSAgICB6MyA9IERFUVVBTlRJWkUoaW5wdHJbRENUU0laRSozXSwgcXVhbnRwdHJbRENUU0laRSozXSk7Ci0KLSAgICB6MSA9IE1VTFRJUExZKHoyICsgejMsIEZJWF8wXzU0MTE5NjEwMCk7ICAgICAgICAgICAgICAgLyogYzYgKi8KLSAgICAvKiBBZGQgZnVkZ2UgZmFjdG9yIGhlcmUgZm9yIGZpbmFsIGRlc2NhbGUuICovCi0gICAgejEgKz0gT05FIDw8IChDT05TVF9CSVRTLVBBU1MxX0JJVFMtMSk7Ci0gICAgdG1wMCA9IFJJR0hUX1NISUZUKHoxICsgTVVMVElQTFkoejIsIEZJWF8wXzc2NTM2Njg2NSksIC8qIGMyLWM2ICovCi0JCSAgICAgICBDT05TVF9CSVRTLVBBU1MxX0JJVFMpOwotICAgIHRtcDIgPSBSSUdIVF9TSElGVCh6MSAtIE1VTFRJUExZKHozLCBGSVhfMV84NDc3NTkwNjUpLCAvKiBjMitjNiAqLwotCQkgICAgICAgQ09OU1RfQklUUy1QQVNTMV9CSVRTKTsKLQotICAgIC8qIEZpbmFsIG91dHB1dCBzdGFnZSAqLwotCi0gICAgd3NwdHJbNCowXSA9IChpbnQpICh0bXAxMCArIHRtcDApOwotICAgIHdzcHRyWzQqM10gPSAoaW50KSAodG1wMTAgLSB0bXAwKTsKLSAgICB3c3B0cls0KjFdID0gKGludCkgKHRtcDEyICsgdG1wMik7Ci0gICAgd3NwdHJbNCoyXSA9IChpbnQpICh0bXAxMiAtIHRtcDIpOwotICB9Ci0KLSAgLyogUGFzcyAyOiBwcm9jZXNzIDQgcm93cyBmcm9tIHdvcmsgYXJyYXksIHN0b3JlIGludG8gb3V0cHV0IGFycmF5LiAqLwotCi0gIHdzcHRyID0gd29ya3NwYWNlOwotICBmb3IgKGN0ciA9IDA7IGN0ciA8IDQ7IGN0cisrKSB7Ci0gICAgb3V0cHRyID0gb3V0cHV0X2J1ZltjdHJdICsgb3V0cHV0X2NvbDsKLQotICAgIC8qIEV2ZW4gcGFydCAqLwotCi0gICAgLyogQWRkIGZ1ZGdlIGZhY3RvciBoZXJlIGZvciBmaW5hbCBkZXNjYWxlLiAqLwotICAgIHRtcDAgPSAoSU5UMzIpIHdzcHRyWzBdICsgKE9ORSA8PCAoUEFTUzFfQklUUysyKSk7Ci0gICAgdG1wMiA9IChJTlQzMikgd3NwdHJbMl07Ci0KLSAgICB0bXAxMCA9ICh0bXAwICsgdG1wMikgPDwgQ09OU1RfQklUUzsKLSAgICB0bXAxMiA9ICh0bXAwIC0gdG1wMikgPDwgQ09OU1RfQklUUzsKLQotICAgIC8qIE9kZCBwYXJ0ICovCi0gICAgLyogU2FtZSByb3RhdGlvbiBhcyBpbiB0aGUgZXZlbiBwYXJ0IG9mIHRoZSA4eDggTEwmTSBJRENUICovCi0KLSAgICB6MiA9IChJTlQzMikgd3NwdHJbMV07Ci0gICAgejMgPSAoSU5UMzIpIHdzcHRyWzNdOwotCi0gICAgejEgPSBNVUxUSVBMWSh6MiArIHozLCBGSVhfMF81NDExOTYxMDApOyAgIC8qIGM2ICovCi0gICAgdG1wMCA9IHoxICsgTVVMVElQTFkoejIsIEZJWF8wXzc2NTM2Njg2NSk7IC8qIGMyLWM2ICovCi0gICAgdG1wMiA9IHoxIC0gTVVMVElQTFkoejMsIEZJWF8xXzg0Nzc1OTA2NSk7IC8qIGMyK2M2ICovCi0KLSAgICAvKiBGaW5hbCBvdXRwdXQgc3RhZ2UgKi8KLQotICAgIG91dHB0clswXSA9IHJhbmdlX2xpbWl0WyhpbnQpIFJJR0hUX1NISUZUKHRtcDEwICsgdG1wMCwKLQkJCQkJICAgICAgQ09OU1RfQklUUytQQVNTMV9CSVRTKzMpCi0JCQkgICAgJiBSQU5HRV9NQVNLXTsKLSAgICBvdXRwdHJbM10gPSByYW5nZV9saW1pdFsoaW50KSBSSUdIVF9TSElGVCh0bXAxMCAtIHRtcDAsCi0JCQkJCSAgICAgIENPTlNUX0JJVFMrUEFTUzFfQklUUyszKQotCQkJICAgICYgUkFOR0VfTUFTS107Ci0gICAgb3V0cHRyWzFdID0gcmFuZ2VfbGltaXRbKGludCkgUklHSFRfU0hJRlQodG1wMTIgKyB0bXAyLAotCQkJCQkgICAgICBDT05TVF9CSVRTK1BBU1MxX0JJVFMrMykKLQkJCSAgICAmIFJBTkdFX01BU0tdOwotICAgIG91dHB0clsyXSA9IHJhbmdlX2xpbWl0WyhpbnQpIFJJR0hUX1NISUZUKHRtcDEyIC0gdG1wMiwKLQkJCQkJICAgICAgQ09OU1RfQklUUytQQVNTMV9CSVRTKzMpCi0JCQkgICAgJiBSQU5HRV9NQVNLXTsKLQotICAgIHdzcHRyICs9IDQ7CQkvKiBhZHZhbmNlIHBvaW50ZXIgdG8gbmV4dCByb3cgKi8KLSAgfQotfQotCi0KLS8qCi0gKiBQZXJmb3JtIGRlcXVhbnRpemF0aW9uIGFuZCBpbnZlcnNlIERDVCBvbiBvbmUgYmxvY2sgb2YgY29lZmZpY2llbnRzLAotICogcHJvZHVjaW5nIGEgcmVkdWNlZC1zaXplIDN4MyBvdXRwdXQgYmxvY2suCi0gKgotICogT3B0aW1pemVkIGFsZ29yaXRobSB3aXRoIDIgbXVsdGlwbGljYXRpb25zIGluIHRoZSAxLUQga2VybmVsLgotICogY0sgcmVwcmVzZW50cyBzcXJ0KDIpICogY29zKEsqcGkvNikuCi0gKi8KLQotR0xPQkFMKHZvaWQpCi1qcGVnX2lkY3RfM3gzIChqX2RlY29tcHJlc3NfcHRyIGNpbmZvLCBqcGVnX2NvbXBvbmVudF9pbmZvICogY29tcHB0ciwKLQkgICAgICAgSkNPRUZQVFIgY29lZl9ibG9jaywKLQkgICAgICAgSlNBTVBBUlJBWSBvdXRwdXRfYnVmLCBKRElNRU5TSU9OIG91dHB1dF9jb2wpCi17Ci0gIElOVDMyIHRtcDAsIHRtcDIsIHRtcDEwLCB0bXAxMjsKLSAgSkNPRUZQVFIgaW5wdHI7Ci0gIElTTE9XX01VTFRfVFlQRSAqIHF1YW50cHRyOwotICBpbnQgKiB3c3B0cjsKLSAgSlNBTVBST1cgb3V0cHRyOwotICBKU0FNUExFICpyYW5nZV9saW1pdCA9IElEQ1RfcmFuZ2VfbGltaXQoY2luZm8pOwotICBpbnQgY3RyOwotICBpbnQgd29ya3NwYWNlWzMqM107CS8qIGJ1ZmZlcnMgZGF0YSBiZXR3ZWVuIHBhc3NlcyAqLwotICBTSElGVF9URU1QUwotCi0gIC8qIFBhc3MgMTogcHJvY2VzcyBjb2x1bW5zIGZyb20gaW5wdXQsIHN0b3JlIGludG8gd29yayBhcnJheS4gKi8KLQotICBpbnB0ciA9IGNvZWZfYmxvY2s7Ci0gIHF1YW50cHRyID0gKElTTE9XX01VTFRfVFlQRSAqKSBjb21wcHRyLT5kY3RfdGFibGU7Ci0gIHdzcHRyID0gd29ya3NwYWNlOwotICBmb3IgKGN0ciA9IDA7IGN0ciA8IDM7IGN0cisrLCBpbnB0cisrLCBxdWFudHB0cisrLCB3c3B0cisrKSB7Ci0gICAgLyogRXZlbiBwYXJ0ICovCi0KLSAgICB0bXAwID0gREVRVUFOVElaRShpbnB0cltEQ1RTSVpFKjBdLCBxdWFudHB0cltEQ1RTSVpFKjBdKTsKLSAgICB0bXAwIDw8PSBDT05TVF9CSVRTOwotICAgIC8qIEFkZCBmdWRnZSBmYWN0b3IgaGVyZSBmb3IgZmluYWwgZGVzY2FsZS4gKi8KLSAgICB0bXAwICs9IE9ORSA8PCAoQ09OU1RfQklUUy1QQVNTMV9CSVRTLTEpOwotICAgIHRtcDIgPSBERVFVQU5USVpFKGlucHRyW0RDVFNJWkUqMl0sIHF1YW50cHRyW0RDVFNJWkUqMl0pOwotICAgIHRtcDEyID0gTVVMVElQTFkodG1wMiwgRklYKDAuNzA3MTA2NzgxKSk7IC8qIGMyICovCi0gICAgdG1wMTAgPSB0bXAwICsgdG1wMTI7Ci0gICAgdG1wMiA9IHRtcDAgLSB0bXAxMiAtIHRtcDEyOwotCi0gICAgLyogT2RkIHBhcnQgKi8KLQotICAgIHRtcDEyID0gREVRVUFOVElaRShpbnB0cltEQ1RTSVpFKjFdLCBxdWFudHB0cltEQ1RTSVpFKjFdKTsKLSAgICB0bXAwID0gTVVMVElQTFkodG1wMTIsIEZJWCgxLjIyNDc0NDg3MSkpOyAvKiBjMSAqLwotCi0gICAgLyogRmluYWwgb3V0cHV0IHN0YWdlICovCi0KLSAgICB3c3B0clszKjBdID0gKGludCkgUklHSFRfU0hJRlQodG1wMTAgKyB0bXAwLCBDT05TVF9CSVRTLVBBU1MxX0JJVFMpOwotICAgIHdzcHRyWzMqMl0gPSAoaW50KSBSSUdIVF9TSElGVCh0bXAxMCAtIHRtcDAsIENPTlNUX0JJVFMtUEFTUzFfQklUUyk7Ci0gICAgd3NwdHJbMyoxXSA9IChpbnQpIFJJR0hUX1NISUZUKHRtcDIsIENPTlNUX0JJVFMtUEFTUzFfQklUUyk7Ci0gIH0KLQotICAvKiBQYXNzIDI6IHByb2Nlc3MgMyByb3dzIGZyb20gd29yayBhcnJheSwgc3RvcmUgaW50byBvdXRwdXQgYXJyYXkuICovCi0KLSAgd3NwdHIgPSB3b3Jrc3BhY2U7Ci0gIGZvciAoY3RyID0gMDsgY3RyIDwgMzsgY3RyKyspIHsKLSAgICBvdXRwdHIgPSBvdXRwdXRfYnVmW2N0cl0gKyBvdXRwdXRfY29sOwotCi0gICAgLyogRXZlbiBwYXJ0ICovCi0KLSAgICAvKiBBZGQgZnVkZ2UgZmFjdG9yIGhlcmUgZm9yIGZpbmFsIGRlc2NhbGUuICovCi0gICAgdG1wMCA9IChJTlQzMikgd3NwdHJbMF0gKyAoT05FIDw8IChQQVNTMV9CSVRTKzIpKTsKLSAgICB0bXAwIDw8PSBDT05TVF9CSVRTOwotICAgIHRtcDIgPSAoSU5UMzIpIHdzcHRyWzJdOwotICAgIHRtcDEyID0gTVVMVElQTFkodG1wMiwgRklYKDAuNzA3MTA2NzgxKSk7IC8qIGMyICovCi0gICAgdG1wMTAgPSB0bXAwICsgdG1wMTI7Ci0gICAgdG1wMiA9IHRtcDAgLSB0bXAxMiAtIHRtcDEyOwotCi0gICAgLyogT2RkIHBhcnQgKi8KLQotICAgIHRtcDEyID0gKElOVDMyKSB3c3B0clsxXTsKLSAgICB0bXAwID0gTVVMVElQTFkodG1wMTIsIEZJWCgxLjIyNDc0NDg3MSkpOyAvKiBjMSAqLwotCi0gICAgLyogRmluYWwgb3V0cHV0IHN0YWdlICovCi0KLSAgICBvdXRwdHJbMF0gPSByYW5nZV9saW1pdFsoaW50KSBSSUdIVF9TSElGVCh0bXAxMCArIHRtcDAsCi0JCQkJCSAgICAgIENPTlNUX0JJVFMrUEFTUzFfQklUUyszKQotCQkJICAgICYgUkFOR0VfTUFTS107Ci0gICAgb3V0cHRyWzJdID0gcmFuZ2VfbGltaXRbKGludCkgUklHSFRfU0hJRlQodG1wMTAgLSB0bXAwLAotCQkJCQkgICAgICBDT05TVF9CSVRTK1BBU1MxX0JJVFMrMykKLQkJCSAgICAmIFJBTkdFX01BU0tdOwotICAgIG91dHB0clsxXSA9IHJhbmdlX2xpbWl0WyhpbnQpIFJJR0hUX1NISUZUKHRtcDIsCi0JCQkJCSAgICAgIENPTlNUX0JJVFMrUEFTUzFfQklUUyszKQotCQkJICAgICYgUkFOR0VfTUFTS107Ci0KLSAgICB3c3B0ciArPSAzOwkJLyogYWR2YW5jZSBwb2ludGVyIHRvIG5leHQgcm93ICovCi0gIH0KLX0KLQotCi0vKgotICogUGVyZm9ybSBkZXF1YW50aXphdGlvbiBhbmQgaW52ZXJzZSBEQ1Qgb24gb25lIGJsb2NrIG9mIGNvZWZmaWNpZW50cywKLSAqIHByb2R1Y2luZyBhIHJlZHVjZWQtc2l6ZSAyeDIgb3V0cHV0IGJsb2NrLgotICoKLSAqIE11bHRpcGxpY2F0aW9uLWxlc3MgYWxnb3JpdGhtLgotICovCi0KLUdMT0JBTCh2b2lkKQotanBlZ19pZGN0XzJ4MiAoal9kZWNvbXByZXNzX3B0ciBjaW5mbywganBlZ19jb21wb25lbnRfaW5mbyAqIGNvbXBwdHIsCi0JICAgICAgIEpDT0VGUFRSIGNvZWZfYmxvY2ssCi0JICAgICAgIEpTQU1QQVJSQVkgb3V0cHV0X2J1ZiwgSkRJTUVOU0lPTiBvdXRwdXRfY29sKQotewotICBJTlQzMiB0bXAwLCB0bXAxLCB0bXAyLCB0bXAzLCB0bXA0LCB0bXA1OwotICBJU0xPV19NVUxUX1RZUEUgKiBxdWFudHB0cjsKLSAgSlNBTVBST1cgb3V0cHRyOwotICBKU0FNUExFICpyYW5nZV9saW1pdCA9IElEQ1RfcmFuZ2VfbGltaXQoY2luZm8pOwotICBTSElGVF9URU1QUwotCi0gIC8qIFBhc3MgMTogcHJvY2VzcyBjb2x1bW5zIGZyb20gaW5wdXQuICovCi0KLSAgcXVhbnRwdHIgPSAoSVNMT1dfTVVMVF9UWVBFICopIGNvbXBwdHItPmRjdF90YWJsZTsKLQotICAvKiBDb2x1bW4gMCAqLwotICB0bXA0ID0gREVRVUFOVElaRShjb2VmX2Jsb2NrW0RDVFNJWkUqMF0sIHF1YW50cHRyW0RDVFNJWkUqMF0pOwotICB0bXA1ID0gREVRVUFOVElaRShjb2VmX2Jsb2NrW0RDVFNJWkUqMV0sIHF1YW50cHRyW0RDVFNJWkUqMV0pOwotICAvKiBBZGQgZnVkZ2UgZmFjdG9yIGhlcmUgZm9yIGZpbmFsIGRlc2NhbGUuICovCi0gIHRtcDQgKz0gT05FIDw8IDI7Ci0KLSAgdG1wMCA9IHRtcDQgKyB0bXA1OwotICB0bXAyID0gdG1wNCAtIHRtcDU7Ci0KLSAgLyogQ29sdW1uIDEgKi8KLSAgdG1wNCA9IERFUVVBTlRJWkUoY29lZl9ibG9ja1tEQ1RTSVpFKjArMV0sIHF1YW50cHRyW0RDVFNJWkUqMCsxXSk7Ci0gIHRtcDUgPSBERVFVQU5USVpFKGNvZWZfYmxvY2tbRENUU0laRSoxKzFdLCBxdWFudHB0cltEQ1RTSVpFKjErMV0pOwotCi0gIHRtcDEgPSB0bXA0ICsgdG1wNTsKLSAgdG1wMyA9IHRtcDQgLSB0bXA1OwotCi0gIC8qIFBhc3MgMjogcHJvY2VzcyAyIHJvd3MsIHN0b3JlIGludG8gb3V0cHV0IGFycmF5LiAqLwotCi0gIC8qIFJvdyAwICovCi0gIG91dHB0ciA9IG91dHB1dF9idWZbMF0gKyBvdXRwdXRfY29sOwotCi0gIG91dHB0clswXSA9IHJhbmdlX2xpbWl0WyhpbnQpIFJJR0hUX1NISUZUKHRtcDAgKyB0bXAxLCAzKSAmIFJBTkdFX01BU0tdOwotICBvdXRwdHJbMV0gPSByYW5nZV9saW1pdFsoaW50KSBSSUdIVF9TSElGVCh0bXAwIC0gdG1wMSwgMykgJiBSQU5HRV9NQVNLXTsKLQotICAvKiBSb3cgMSAqLwotICBvdXRwdHIgPSBvdXRwdXRfYnVmWzFdICsgb3V0cHV0X2NvbDsKLQotICBvdXRwdHJbMF0gPSByYW5nZV9saW1pdFsoaW50KSBSSUdIVF9TSElGVCh0bXAyICsgdG1wMywgMykgJiBSQU5HRV9NQVNLXTsKLSAgb3V0cHRyWzFdID0gcmFuZ2VfbGltaXRbKGludCkgUklHSFRfU0hJRlQodG1wMiAtIHRtcDMsIDMpICYgUkFOR0VfTUFTS107Ci19Ci0KLQotLyoKLSAqIFBlcmZvcm0gZGVxdWFudGl6YXRpb24gYW5kIGludmVyc2UgRENUIG9uIG9uZSBibG9jayBvZiBjb2VmZmljaWVudHMsCi0gKiBwcm9kdWNpbmcgYSByZWR1Y2VkLXNpemUgMXgxIG91dHB1dCBibG9jay4KLSAqCi0gKiBXZSBoYXJkbHkgbmVlZCBhbiBpbnZlcnNlIERDVCByb3V0aW5lIGZvciB0aGlzOiBqdXN0IHRha2UgdGhlCi0gKiBhdmVyYWdlIHBpeGVsIHZhbHVlLCB3aGljaCBpcyBvbmUtZWlnaHRoIG9mIHRoZSBEQyBjb2VmZmljaWVudC4KLSAqLwotCi1HTE9CQUwodm9pZCkKLWpwZWdfaWRjdF8xeDEgKGpfZGVjb21wcmVzc19wdHIgY2luZm8sIGpwZWdfY29tcG9uZW50X2luZm8gKiBjb21wcHRyLAotCSAgICAgICBKQ09FRlBUUiBjb2VmX2Jsb2NrLAotCSAgICAgICBKU0FNUEFSUkFZIG91dHB1dF9idWYsIEpESU1FTlNJT04gb3V0cHV0X2NvbCkKLXsKLSAgaW50IGRjdmFsOwotICBJU0xPV19NVUxUX1RZUEUgKiBxdWFudHB0cjsKLSAgSlNBTVBMRSAqcmFuZ2VfbGltaXQgPSBJRENUX3JhbmdlX2xpbWl0KGNpbmZvKTsKLSAgU0hJRlRfVEVNUFMKLQotICAvKiAxeDEgaXMgdHJpdmlhbDoganVzdCB0YWtlIHRoZSBEQyBjb2VmZmljaWVudCBkaXZpZGVkIGJ5IDguICovCi0gIHF1YW50cHRyID0gKElTTE9XX01VTFRfVFlQRSAqKSBjb21wcHRyLT5kY3RfdGFibGU7Ci0gIGRjdmFsID0gREVRVUFOVElaRShjb2VmX2Jsb2NrWzBdLCBxdWFudHB0clswXSk7Ci0gIGRjdmFsID0gKGludCkgREVTQ0FMRSgoSU5UMzIpIGRjdmFsLCAzKTsKLQotICBvdXRwdXRfYnVmWzBdW291dHB1dF9jb2xdID0gcmFuZ2VfbGltaXRbZGN2YWwgJiBSQU5HRV9NQVNLXTsKLX0KLQotCi0vKgotICogUGVyZm9ybSBkZXF1YW50aXphdGlvbiBhbmQgaW52ZXJzZSBEQ1Qgb24gb25lIGJsb2NrIG9mIGNvZWZmaWNpZW50cywKLSAqIHByb2R1Y2luZyBhIDl4OSBvdXRwdXQgYmxvY2suCi0gKgotICogT3B0aW1pemVkIGFsZ29yaXRobSB3aXRoIDEwIG11bHRpcGxpY2F0aW9ucyBpbiB0aGUgMS1EIGtlcm5lbC4KLSAqIGNLIHJlcHJlc2VudHMgc3FydCgyKSAqIGNvcyhLKnBpLzE4KS4KLSAqLwotCi1HTE9CQUwodm9pZCkKLWpwZWdfaWRjdF85eDkgKGpfZGVjb21wcmVzc19wdHIgY2luZm8sIGpwZWdfY29tcG9uZW50X2luZm8gKiBjb21wcHRyLAotCSAgICAgICBKQ09FRlBUUiBjb2VmX2Jsb2NrLAotCSAgICAgICBKU0FNUEFSUkFZIG91dHB1dF9idWYsIEpESU1FTlNJT04gb3V0cHV0X2NvbCkKLXsKLSAgSU5UMzIgdG1wMCwgdG1wMSwgdG1wMiwgdG1wMywgdG1wMTAsIHRtcDExLCB0bXAxMiwgdG1wMTMsIHRtcDE0OwotICBJTlQzMiB6MSwgejIsIHozLCB6NDsKLSAgSkNPRUZQVFIgaW5wdHI7Ci0gIElTTE9XX01VTFRfVFlQRSAqIHF1YW50cHRyOwotICBpbnQgKiB3c3B0cjsKLSAgSlNBTVBST1cgb3V0cHRyOwotICBKU0FNUExFICpyYW5nZV9saW1pdCA9IElEQ1RfcmFuZ2VfbGltaXQoY2luZm8pOwotICBpbnQgY3RyOwotICBpbnQgd29ya3NwYWNlWzgqOV07CS8qIGJ1ZmZlcnMgZGF0YSBiZXR3ZWVuIHBhc3NlcyAqLwotICBTSElGVF9URU1QUwotCi0gIC8qIFBhc3MgMTogcHJvY2VzcyBjb2x1bW5zIGZyb20gaW5wdXQsIHN0b3JlIGludG8gd29yayBhcnJheS4gKi8KLQotICBpbnB0ciA9IGNvZWZfYmxvY2s7Ci0gIHF1YW50cHRyID0gKElTTE9XX01VTFRfVFlQRSAqKSBjb21wcHRyLT5kY3RfdGFibGU7Ci0gIHdzcHRyID0gd29ya3NwYWNlOwotICBmb3IgKGN0ciA9IDA7IGN0ciA8IDg7IGN0cisrLCBpbnB0cisrLCBxdWFudHB0cisrLCB3c3B0cisrKSB7Ci0gICAgLyogRXZlbiBwYXJ0ICovCi0KLSAgICB0bXAwID0gREVRVUFOVElaRShpbnB0cltEQ1RTSVpFKjBdLCBxdWFudHB0cltEQ1RTSVpFKjBdKTsKLSAgICB0bXAwIDw8PSBDT05TVF9CSVRTOwotICAgIC8qIEFkZCBmdWRnZSBmYWN0b3IgaGVyZSBmb3IgZmluYWwgZGVzY2FsZS4gKi8KLSAgICB0bXAwICs9IE9ORSA8PCAoQ09OU1RfQklUUy1QQVNTMV9CSVRTLTEpOwotCi0gICAgejEgPSBERVFVQU5USVpFKGlucHRyW0RDVFNJWkUqMl0sIHF1YW50cHRyW0RDVFNJWkUqMl0pOwotICAgIHoyID0gREVRVUFOVElaRShpbnB0cltEQ1RTSVpFKjRdLCBxdWFudHB0cltEQ1RTSVpFKjRdKTsKLSAgICB6MyA9IERFUVVBTlRJWkUoaW5wdHJbRENUU0laRSo2XSwgcXVhbnRwdHJbRENUU0laRSo2XSk7Ci0KLSAgICB0bXAzID0gTVVMVElQTFkoejMsIEZJWCgwLjcwNzEwNjc4MSkpOyAgICAgIC8qIGM2ICovCi0gICAgdG1wMSA9IHRtcDAgKyB0bXAzOwotICAgIHRtcDIgPSB0bXAwIC0gdG1wMyAtIHRtcDM7Ci0KLSAgICB0bXAwID0gTVVMVElQTFkoejEgLSB6MiwgRklYKDAuNzA3MTA2NzgxKSk7IC8qIGM2ICovCi0gICAgdG1wMTEgPSB0bXAyICsgdG1wMDsKLSAgICB0bXAxNCA9IHRtcDIgLSB0bXAwIC0gdG1wMDsKLQotICAgIHRtcDAgPSBNVUxUSVBMWSh6MSArIHoyLCBGSVgoMS4zMjg5MjYwNDkpKTsgLyogYzIgKi8KLSAgICB0bXAyID0gTVVMVElQTFkoejEsIEZJWCgxLjA4MzM1MDQ0MSkpOyAgICAgIC8qIGM0ICovCi0gICAgdG1wMyA9IE1VTFRJUExZKHoyLCBGSVgoMC4yNDU1NzU2MDgpKTsgICAgICAvKiBjOCAqLwotCi0gICAgdG1wMTAgPSB0bXAxICsgdG1wMCAtIHRtcDM7Ci0gICAgdG1wMTIgPSB0bXAxIC0gdG1wMCArIHRtcDI7Ci0gICAgdG1wMTMgPSB0bXAxIC0gdG1wMiArIHRtcDM7Ci0KLSAgICAvKiBPZGQgcGFydCAqLwotCi0gICAgejEgPSBERVFVQU5USVpFKGlucHRyW0RDVFNJWkUqMV0sIHF1YW50cHRyW0RDVFNJWkUqMV0pOwotICAgIHoyID0gREVRVUFOVElaRShpbnB0cltEQ1RTSVpFKjNdLCBxdWFudHB0cltEQ1RTSVpFKjNdKTsKLSAgICB6MyA9IERFUVVBTlRJWkUoaW5wdHJbRENUU0laRSo1XSwgcXVhbnRwdHJbRENUU0laRSo1XSk7Ci0gICAgejQgPSBERVFVQU5USVpFKGlucHRyW0RDVFNJWkUqN10sIHF1YW50cHRyW0RDVFNJWkUqN10pOwotCi0gICAgejIgPSBNVUxUSVBMWSh6MiwgLSBGSVgoMS4yMjQ3NDQ4NzEpKTsgICAgICAgICAgIC8qIC1jMyAqLwotCi0gICAgdG1wMiA9IE1VTFRJUExZKHoxICsgejMsIEZJWCgwLjkwOTAzODk1NSkpOyAgICAgIC8qIGM1ICovCi0gICAgdG1wMyA9IE1VTFRJUExZKHoxICsgejQsIEZJWCgwLjQ4MzY4OTUyNSkpOyAgICAgIC8qIGM3ICovCi0gICAgdG1wMCA9IHRtcDIgKyB0bXAzIC0gejI7Ci0gICAgdG1wMSA9IE1VTFRJUExZKHozIC0gejQsIEZJWCgxLjM5MjcyODQ4MSkpOyAgICAgIC8qIGMxICovCi0gICAgdG1wMiArPSB6MiAtIHRtcDE7Ci0gICAgdG1wMyArPSB6MiArIHRtcDE7Ci0gICAgdG1wMSA9IE1VTFRJUExZKHoxIC0gejMgLSB6NCwgRklYKDEuMjI0NzQ0ODcxKSk7IC8qIGMzICovCi0KLSAgICAvKiBGaW5hbCBvdXRwdXQgc3RhZ2UgKi8KLQotICAgIHdzcHRyWzgqMF0gPSAoaW50KSBSSUdIVF9TSElGVCh0bXAxMCArIHRtcDAsIENPTlNUX0JJVFMtUEFTUzFfQklUUyk7Ci0gICAgd3NwdHJbOCo4XSA9IChpbnQpIFJJR0hUX1NISUZUKHRtcDEwIC0gdG1wMCwgQ09OU1RfQklUUy1QQVNTMV9CSVRTKTsKLSAgICB3c3B0cls4KjFdID0gKGludCkgUklHSFRfU0hJRlQodG1wMTEgKyB0bXAxLCBDT05TVF9CSVRTLVBBU1MxX0JJVFMpOwotICAgIHdzcHRyWzgqN10gPSAoaW50KSBSSUdIVF9TSElGVCh0bXAxMSAtIHRtcDEsIENPTlNUX0JJVFMtUEFTUzFfQklUUyk7Ci0gICAgd3NwdHJbOCoyXSA9IChpbnQpIFJJR0hUX1NISUZUKHRtcDEyICsgdG1wMiwgQ09OU1RfQklUUy1QQVNTMV9CSVRTKTsKLSAgICB3c3B0cls4KjZdID0gKGludCkgUklHSFRfU0hJRlQodG1wMTIgLSB0bXAyLCBDT05TVF9CSVRTLVBBU1MxX0JJVFMpOwotICAgIHdzcHRyWzgqM10gPSAoaW50KSBSSUdIVF9TSElGVCh0bXAxMyArIHRtcDMsIENPTlNUX0JJVFMtUEFTUzFfQklUUyk7Ci0gICAgd3NwdHJbOCo1XSA9IChpbnQpIFJJR0hUX1NISUZUKHRtcDEzIC0gdG1wMywgQ09OU1RfQklUUy1QQVNTMV9CSVRTKTsKLSAgICB3c3B0cls4KjRdID0gKGludCkgUklHSFRfU0hJRlQodG1wMTQsIENPTlNUX0JJVFMtUEFTUzFfQklUUyk7Ci0gIH0KLQotICAvKiBQYXNzIDI6IHByb2Nlc3MgOSByb3dzIGZyb20gd29yayBhcnJheSwgc3RvcmUgaW50byBvdXRwdXQgYXJyYXkuICovCi0KLSAgd3NwdHIgPSB3b3Jrc3BhY2U7Ci0gIGZvciAoY3RyID0gMDsgY3RyIDwgOTsgY3RyKyspIHsKLSAgICBvdXRwdHIgPSBvdXRwdXRfYnVmW2N0cl0gKyBvdXRwdXRfY29sOwotCi0gICAgLyogRXZlbiBwYXJ0ICovCi0KLSAgICAvKiBBZGQgZnVkZ2UgZmFjdG9yIGhlcmUgZm9yIGZpbmFsIGRlc2NhbGUuICovCi0gICAgdG1wMCA9IChJTlQzMikgd3NwdHJbMF0gKyAoT05FIDw8IChQQVNTMV9CSVRTKzIpKTsKLSAgICB0bXAwIDw8PSBDT05TVF9CSVRTOwotCi0gICAgejEgPSAoSU5UMzIpIHdzcHRyWzJdOwotICAgIHoyID0gKElOVDMyKSB3c3B0cls0XTsKLSAgICB6MyA9IChJTlQzMikgd3NwdHJbNl07Ci0KLSAgICB0bXAzID0gTVVMVElQTFkoejMsIEZJWCgwLjcwNzEwNjc4MSkpOyAgICAgIC8qIGM2ICovCi0gICAgdG1wMSA9IHRtcDAgKyB0bXAzOwotICAgIHRtcDIgPSB0bXAwIC0gdG1wMyAtIHRtcDM7Ci0KLSAgICB0bXAwID0gTVVMVElQTFkoejEgLSB6MiwgRklYKDAuNzA3MTA2NzgxKSk7IC8qIGM2ICovCi0gICAgdG1wMTEgPSB0bXAyICsgdG1wMDsKLSAgICB0bXAxNCA9IHRtcDIgLSB0bXAwIC0gdG1wMDsKLQotICAgIHRtcDAgPSBNVUxUSVBMWSh6MSArIHoyLCBGSVgoMS4zMjg5MjYwNDkpKTsgLyogYzIgKi8KLSAgICB0bXAyID0gTVVMVElQTFkoejEsIEZJWCgxLjA4MzM1MDQ0MSkpOyAgICAgIC8qIGM0ICovCi0gICAgdG1wMyA9IE1VTFRJUExZKHoyLCBGSVgoMC4yNDU1NzU2MDgpKTsgICAgICAvKiBjOCAqLwotCi0gICAgdG1wMTAgPSB0bXAxICsgdG1wMCAtIHRtcDM7Ci0gICAgdG1wMTIgPSB0bXAxIC0gdG1wMCArIHRtcDI7Ci0gICAgdG1wMTMgPSB0bXAxIC0gdG1wMiArIHRtcDM7Ci0KLSAgICAvKiBPZGQgcGFydCAqLwotCi0gICAgejEgPSAoSU5UMzIpIHdzcHRyWzFdOwotICAgIHoyID0gKElOVDMyKSB3c3B0clszXTsKLSAgICB6MyA9IChJTlQzMikgd3NwdHJbNV07Ci0gICAgejQgPSAoSU5UMzIpIHdzcHRyWzddOwotCi0gICAgejIgPSBNVUxUSVBMWSh6MiwgLSBGSVgoMS4yMjQ3NDQ4NzEpKTsgICAgICAgICAgIC8qIC1jMyAqLwotCi0gICAgdG1wMiA9IE1VTFRJUExZKHoxICsgejMsIEZJWCgwLjkwOTAzODk1NSkpOyAgICAgIC8qIGM1ICovCi0gICAgdG1wMyA9IE1VTFRJUExZKHoxICsgejQsIEZJWCgwLjQ4MzY4OTUyNSkpOyAgICAgIC8qIGM3ICovCi0gICAgdG1wMCA9IHRtcDIgKyB0bXAzIC0gejI7Ci0gICAgdG1wMSA9IE1VTFRJUExZKHozIC0gejQsIEZJWCgxLjM5MjcyODQ4MSkpOyAgICAgIC8qIGMxICovCi0gICAgdG1wMiArPSB6MiAtIHRtcDE7Ci0gICAgdG1wMyArPSB6MiArIHRtcDE7Ci0gICAgdG1wMSA9IE1VTFRJUExZKHoxIC0gejMgLSB6NCwgRklYKDEuMjI0NzQ0ODcxKSk7IC8qIGMzICovCi0KLSAgICAvKiBGaW5hbCBvdXRwdXQgc3RhZ2UgKi8KLQotICAgIG91dHB0clswXSA9IHJhbmdlX2xpbWl0WyhpbnQpIFJJR0hUX1NISUZUKHRtcDEwICsgdG1wMCwKLQkJCQkJICAgICAgQ09OU1RfQklUUytQQVNTMV9CSVRTKzMpCi0JCQkgICAgJiBSQU5HRV9NQVNLXTsKLSAgICBvdXRwdHJbOF0gPSByYW5nZV9saW1pdFsoaW50KSBSSUdIVF9TSElGVCh0bXAxMCAtIHRtcDAsCi0JCQkJCSAgICAgIENPTlNUX0JJVFMrUEFTUzFfQklUUyszKQotCQkJICAgICYgUkFOR0VfTUFTS107Ci0gICAgb3V0cHRyWzFdID0gcmFuZ2VfbGltaXRbKGludCkgUklHSFRfU0hJRlQodG1wMTEgKyB0bXAxLAotCQkJCQkgICAgICBDT05TVF9CSVRTK1BBU1MxX0JJVFMrMykKLQkJCSAgICAmIFJBTkdFX01BU0tdOwotICAgIG91dHB0cls3XSA9IHJhbmdlX2xpbWl0WyhpbnQpIFJJR0hUX1NISUZUKHRtcDExIC0gdG1wMSwKLQkJCQkJICAgICAgQ09OU1RfQklUUytQQVNTMV9CSVRTKzMpCi0JCQkgICAgJiBSQU5HRV9NQVNLXTsKLSAgICBvdXRwdHJbMl0gPSByYW5nZV9saW1pdFsoaW50KSBSSUdIVF9TSElGVCh0bXAxMiArIHRtcDIsCi0JCQkJCSAgICAgIENPTlNUX0JJVFMrUEFTUzFfQklUUyszKQotCQkJICAgICYgUkFOR0VfTUFTS107Ci0gICAgb3V0cHRyWzZdID0gcmFuZ2VfbGltaXRbKGludCkgUklHSFRfU0hJRlQodG1wMTIgLSB0bXAyLAotCQkJCQkgICAgICBDT05TVF9CSVRTK1BBU1MxX0JJVFMrMykKLQkJCSAgICAmIFJBTkdFX01BU0tdOwotICAgIG91dHB0clszXSA9IHJhbmdlX2xpbWl0WyhpbnQpIFJJR0hUX1NISUZUKHRtcDEzICsgdG1wMywKLQkJCQkJICAgICAgQ09OU1RfQklUUytQQVNTMV9CSVRTKzMpCi0JCQkgICAgJiBSQU5HRV9NQVNLXTsKLSAgICBvdXRwdHJbNV0gPSByYW5nZV9saW1pdFsoaW50KSBSSUdIVF9TSElGVCh0bXAxMyAtIHRtcDMsCi0JCQkJCSAgICAgIENPTlNUX0JJVFMrUEFTUzFfQklUUyszKQotCQkJICAgICYgUkFOR0VfTUFTS107Ci0gICAgb3V0cHRyWzRdID0gcmFuZ2VfbGltaXRbKGludCkgUklHSFRfU0hJRlQodG1wMTQsCi0JCQkJCSAgICAgIENPTlNUX0JJVFMrUEFTUzFfQklUUyszKQotCQkJICAgICYgUkFOR0VfTUFTS107Ci0KLSAgICB3c3B0ciArPSA4OwkJLyogYWR2YW5jZSBwb2ludGVyIHRvIG5leHQgcm93ICovCi0gIH0KLX0KLQotCi0vKgotICogUGVyZm9ybSBkZXF1YW50aXphdGlvbiBhbmQgaW52ZXJzZSBEQ1Qgb24gb25lIGJsb2NrIG9mIGNvZWZmaWNpZW50cywKLSAqIHByb2R1Y2luZyBhIDEweDEwIG91dHB1dCBibG9jay4KLSAqCi0gKiBPcHRpbWl6ZWQgYWxnb3JpdGhtIHdpdGggMTIgbXVsdGlwbGljYXRpb25zIGluIHRoZSAxLUQga2VybmVsLgotICogY0sgcmVwcmVzZW50cyBzcXJ0KDIpICogY29zKEsqcGkvMjApLgotICovCi0KLUdMT0JBTCh2b2lkKQotanBlZ19pZGN0XzEweDEwIChqX2RlY29tcHJlc3NfcHRyIGNpbmZvLCBqcGVnX2NvbXBvbmVudF9pbmZvICogY29tcHB0ciwKLQkJIEpDT0VGUFRSIGNvZWZfYmxvY2ssCi0JCSBKU0FNUEFSUkFZIG91dHB1dF9idWYsIEpESU1FTlNJT04gb3V0cHV0X2NvbCkKLXsKLSAgSU5UMzIgdG1wMTAsIHRtcDExLCB0bXAxMiwgdG1wMTMsIHRtcDE0OwotICBJTlQzMiB0bXAyMCwgdG1wMjEsIHRtcDIyLCB0bXAyMywgdG1wMjQ7Ci0gIElOVDMyIHoxLCB6MiwgejMsIHo0LCB6NTsKLSAgSkNPRUZQVFIgaW5wdHI7Ci0gIElTTE9XX01VTFRfVFlQRSAqIHF1YW50cHRyOwotICBpbnQgKiB3c3B0cjsKLSAgSlNBTVBST1cgb3V0cHRyOwotICBKU0FNUExFICpyYW5nZV9saW1pdCA9IElEQ1RfcmFuZ2VfbGltaXQoY2luZm8pOwotICBpbnQgY3RyOwotICBpbnQgd29ya3NwYWNlWzgqMTBdOwkvKiBidWZmZXJzIGRhdGEgYmV0d2VlbiBwYXNzZXMgKi8KLSAgU0hJRlRfVEVNUFMKLQotICAvKiBQYXNzIDE6IHByb2Nlc3MgY29sdW1ucyBmcm9tIGlucHV0LCBzdG9yZSBpbnRvIHdvcmsgYXJyYXkuICovCi0KLSAgaW5wdHIgPSBjb2VmX2Jsb2NrOwotICBxdWFudHB0ciA9IChJU0xPV19NVUxUX1RZUEUgKikgY29tcHB0ci0+ZGN0X3RhYmxlOwotICB3c3B0ciA9IHdvcmtzcGFjZTsKLSAgZm9yIChjdHIgPSAwOyBjdHIgPCA4OyBjdHIrKywgaW5wdHIrKywgcXVhbnRwdHIrKywgd3NwdHIrKykgewotICAgIC8qIEV2ZW4gcGFydCAqLwotCi0gICAgejMgPSBERVFVQU5USVpFKGlucHRyW0RDVFNJWkUqMF0sIHF1YW50cHRyW0RDVFNJWkUqMF0pOwotICAgIHozIDw8PSBDT05TVF9CSVRTOwotICAgIC8qIEFkZCBmdWRnZSBmYWN0b3IgaGVyZSBmb3IgZmluYWwgZGVzY2FsZS4gKi8KLSAgICB6MyArPSBPTkUgPDwgKENPTlNUX0JJVFMtUEFTUzFfQklUUy0xKTsKLSAgICB6NCA9IERFUVVBTlRJWkUoaW5wdHJbRENUU0laRSo0XSwgcXVhbnRwdHJbRENUU0laRSo0XSk7Ci0gICAgejEgPSBNVUxUSVBMWSh6NCwgRklYKDEuMTQ0MTIyODA2KSk7ICAgICAgICAgLyogYzQgKi8KLSAgICB6MiA9IE1VTFRJUExZKHo0LCBGSVgoMC40MzcwMTYwMjQpKTsgICAgICAgICAvKiBjOCAqLwotICAgIHRtcDEwID0gejMgKyB6MTsKLSAgICB0bXAxMSA9IHozIC0gejI7Ci0KLSAgICB0bXAyMiA9IFJJR0hUX1NISUZUKHozIC0gKCh6MSAtIHoyKSA8PCAxKSwgICAvKiBjMCA9IChjNC1jOCkqMiAqLwotCQkJQ09OU1RfQklUUy1QQVNTMV9CSVRTKTsKLQotICAgIHoyID0gREVRVUFOVElaRShpbnB0cltEQ1RTSVpFKjJdLCBxdWFudHB0cltEQ1RTSVpFKjJdKTsKLSAgICB6MyA9IERFUVVBTlRJWkUoaW5wdHJbRENUU0laRSo2XSwgcXVhbnRwdHJbRENUU0laRSo2XSk7Ci0KLSAgICB6MSA9IE1VTFRJUExZKHoyICsgejMsIEZJWCgwLjgzMTI1Mzg3NikpOyAgICAvKiBjNiAqLwotICAgIHRtcDEyID0gejEgKyBNVUxUSVBMWSh6MiwgRklYKDAuNTEzNzQzMTQ4KSk7IC8qIGMyLWM2ICovCi0gICAgdG1wMTMgPSB6MSAtIE1VTFRJUExZKHozLCBGSVgoMi4xNzYyNTA4OTkpKTsgLyogYzIrYzYgKi8KLQotICAgIHRtcDIwID0gdG1wMTAgKyB0bXAxMjsKLSAgICB0bXAyNCA9IHRtcDEwIC0gdG1wMTI7Ci0gICAgdG1wMjEgPSB0bXAxMSArIHRtcDEzOwotICAgIHRtcDIzID0gdG1wMTEgLSB0bXAxMzsKLQotICAgIC8qIE9kZCBwYXJ0ICovCi0KLSAgICB6MSA9IERFUVVBTlRJWkUoaW5wdHJbRENUU0laRSoxXSwgcXVhbnRwdHJbRENUU0laRSoxXSk7Ci0gICAgejIgPSBERVFVQU5USVpFKGlucHRyW0RDVFNJWkUqM10sIHF1YW50cHRyW0RDVFNJWkUqM10pOwotICAgIHozID0gREVRVUFOVElaRShpbnB0cltEQ1RTSVpFKjVdLCBxdWFudHB0cltEQ1RTSVpFKjVdKTsKLSAgICB6NCA9IERFUVVBTlRJWkUoaW5wdHJbRENUU0laRSo3XSwgcXVhbnRwdHJbRENUU0laRSo3XSk7Ci0KLSAgICB0bXAxMSA9IHoyICsgejQ7Ci0gICAgdG1wMTMgPSB6MiAtIHo0OwotCi0gICAgdG1wMTIgPSBNVUxUSVBMWSh0bXAxMywgRklYKDAuMzA5MDE2OTk0KSk7ICAgICAgICAvKiAoYzMtYzcpLzIgKi8KLSAgICB6NSA9IHozIDw8IENPTlNUX0JJVFM7Ci0KLSAgICB6MiA9IE1VTFRJUExZKHRtcDExLCBGSVgoMC45NTEwNTY1MTYpKTsgICAgICAgICAgIC8qIChjMytjNykvMiAqLwotICAgIHo0ID0gejUgKyB0bXAxMjsKLQotICAgIHRtcDEwID0gTVVMVElQTFkoejEsIEZJWCgxLjM5NjgwMjI0NykpICsgejIgKyB6NDsgLyogYzEgKi8KLSAgICB0bXAxNCA9IE1VTFRJUExZKHoxLCBGSVgoMC4yMjEyMzE3NDIpKSAtIHoyICsgejQ7IC8qIGM5ICovCi0KLSAgICB6MiA9IE1VTFRJUExZKHRtcDExLCBGSVgoMC41ODc3ODUyNTIpKTsgICAgICAgICAgIC8qIChjMS1jOSkvMiAqLwotICAgIHo0ID0gejUgLSB0bXAxMiAtICh0bXAxMyA8PCAoQ09OU1RfQklUUyAtIDEpKTsKLQotICAgIHRtcDEyID0gKHoxIC0gdG1wMTMgLSB6MykgPDwgUEFTUzFfQklUUzsKLQotICAgIHRtcDExID0gTVVMVElQTFkoejEsIEZJWCgxLjI2MDA3MzUxMSkpIC0gejIgLSB6NDsgLyogYzMgKi8KLSAgICB0bXAxMyA9IE1VTFRJUExZKHoxLCBGSVgoMC42NDIwMzk1MjIpKSAtIHoyICsgejQ7IC8qIGM3ICovCi0KLSAgICAvKiBGaW5hbCBvdXRwdXQgc3RhZ2UgKi8KLQotICAgIHdzcHRyWzgqMF0gPSAoaW50KSBSSUdIVF9TSElGVCh0bXAyMCArIHRtcDEwLCBDT05TVF9CSVRTLVBBU1MxX0JJVFMpOwotICAgIHdzcHRyWzgqOV0gPSAoaW50KSBSSUdIVF9TSElGVCh0bXAyMCAtIHRtcDEwLCBDT05TVF9CSVRTLVBBU1MxX0JJVFMpOwotICAgIHdzcHRyWzgqMV0gPSAoaW50KSBSSUdIVF9TSElGVCh0bXAyMSArIHRtcDExLCBDT05TVF9CSVRTLVBBU1MxX0JJVFMpOwotICAgIHdzcHRyWzgqOF0gPSAoaW50KSBSSUdIVF9TSElGVCh0bXAyMSAtIHRtcDExLCBDT05TVF9CSVRTLVBBU1MxX0JJVFMpOwotICAgIHdzcHRyWzgqMl0gPSAoaW50KSAodG1wMjIgKyB0bXAxMik7Ci0gICAgd3NwdHJbOCo3XSA9IChpbnQpICh0bXAyMiAtIHRtcDEyKTsKLSAgICB3c3B0cls4KjNdID0gKGludCkgUklHSFRfU0hJRlQodG1wMjMgKyB0bXAxMywgQ09OU1RfQklUUy1QQVNTMV9CSVRTKTsKLSAgICB3c3B0cls4KjZdID0gKGludCkgUklHSFRfU0hJRlQodG1wMjMgLSB0bXAxMywgQ09OU1RfQklUUy1QQVNTMV9CSVRTKTsKLSAgICB3c3B0cls4KjRdID0gKGludCkgUklHSFRfU0hJRlQodG1wMjQgKyB0bXAxNCwgQ09OU1RfQklUUy1QQVNTMV9CSVRTKTsKLSAgICB3c3B0cls4KjVdID0gKGludCkgUklHSFRfU0hJRlQodG1wMjQgLSB0bXAxNCwgQ09OU1RfQklUUy1QQVNTMV9CSVRTKTsKLSAgfQotCi0gIC8qIFBhc3MgMjogcHJvY2VzcyAxMCByb3dzIGZyb20gd29yayBhcnJheSwgc3RvcmUgaW50byBvdXRwdXQgYXJyYXkuICovCi0KLSAgd3NwdHIgPSB3b3Jrc3BhY2U7Ci0gIGZvciAoY3RyID0gMDsgY3RyIDwgMTA7IGN0cisrKSB7Ci0gICAgb3V0cHRyID0gb3V0cHV0X2J1ZltjdHJdICsgb3V0cHV0X2NvbDsKLQotICAgIC8qIEV2ZW4gcGFydCAqLwotCi0gICAgLyogQWRkIGZ1ZGdlIGZhY3RvciBoZXJlIGZvciBmaW5hbCBkZXNjYWxlLiAqLwotICAgIHozID0gKElOVDMyKSB3c3B0clswXSArIChPTkUgPDwgKFBBU1MxX0JJVFMrMikpOwotICAgIHozIDw8PSBDT05TVF9CSVRTOwotICAgIHo0ID0gKElOVDMyKSB3c3B0cls0XTsKLSAgICB6MSA9IE1VTFRJUExZKHo0LCBGSVgoMS4xNDQxMjI4MDYpKTsgICAgICAgICAvKiBjNCAqLwotICAgIHoyID0gTVVMVElQTFkoejQsIEZJWCgwLjQzNzAxNjAyNCkpOyAgICAgICAgIC8qIGM4ICovCi0gICAgdG1wMTAgPSB6MyArIHoxOwotICAgIHRtcDExID0gejMgLSB6MjsKLQotICAgIHRtcDIyID0gejMgLSAoKHoxIC0gejIpIDw8IDEpOyAgICAgICAgICAgICAgIC8qIGMwID0gKGM0LWM4KSoyICovCi0KLSAgICB6MiA9IChJTlQzMikgd3NwdHJbMl07Ci0gICAgejMgPSAoSU5UMzIpIHdzcHRyWzZdOwotCi0gICAgejEgPSBNVUxUSVBMWSh6MiArIHozLCBGSVgoMC44MzEyNTM4NzYpKTsgICAgLyogYzYgKi8KLSAgICB0bXAxMiA9IHoxICsgTVVMVElQTFkoejIsIEZJWCgwLjUxMzc0MzE0OCkpOyAvKiBjMi1jNiAqLwotICAgIHRtcDEzID0gejEgLSBNVUxUSVBMWSh6MywgRklYKDIuMTc2MjUwODk5KSk7IC8qIGMyK2M2ICovCi0KLSAgICB0bXAyMCA9IHRtcDEwICsgdG1wMTI7Ci0gICAgdG1wMjQgPSB0bXAxMCAtIHRtcDEyOwotICAgIHRtcDIxID0gdG1wMTEgKyB0bXAxMzsKLSAgICB0bXAyMyA9IHRtcDExIC0gdG1wMTM7Ci0KLSAgICAvKiBPZGQgcGFydCAqLwotCi0gICAgejEgPSAoSU5UMzIpIHdzcHRyWzFdOwotICAgIHoyID0gKElOVDMyKSB3c3B0clszXTsKLSAgICB6MyA9IChJTlQzMikgd3NwdHJbNV07Ci0gICAgejMgPDw9IENPTlNUX0JJVFM7Ci0gICAgejQgPSAoSU5UMzIpIHdzcHRyWzddOwotCi0gICAgdG1wMTEgPSB6MiArIHo0OwotICAgIHRtcDEzID0gejIgLSB6NDsKLQotICAgIHRtcDEyID0gTVVMVElQTFkodG1wMTMsIEZJWCgwLjMwOTAxNjk5NCkpOyAgICAgICAgLyogKGMzLWM3KS8yICovCi0KLSAgICB6MiA9IE1VTFRJUExZKHRtcDExLCBGSVgoMC45NTEwNTY1MTYpKTsgICAgICAgICAgIC8qIChjMytjNykvMiAqLwotICAgIHo0ID0gejMgKyB0bXAxMjsKLQotICAgIHRtcDEwID0gTVVMVElQTFkoejEsIEZJWCgxLjM5NjgwMjI0NykpICsgejIgKyB6NDsgLyogYzEgKi8KLSAgICB0bXAxNCA9IE1VTFRJUExZKHoxLCBGSVgoMC4yMjEyMzE3NDIpKSAtIHoyICsgejQ7IC8qIGM5ICovCi0KLSAgICB6MiA9IE1VTFRJUExZKHRtcDExLCBGSVgoMC41ODc3ODUyNTIpKTsgICAgICAgICAgIC8qIChjMS1jOSkvMiAqLwotICAgIHo0ID0gejMgLSB0bXAxMiAtICh0bXAxMyA8PCAoQ09OU1RfQklUUyAtIDEpKTsKLQotICAgIHRtcDEyID0gKCh6MSAtIHRtcDEzKSA8PCBDT05TVF9CSVRTKSAtIHozOwotCi0gICAgdG1wMTEgPSBNVUxUSVBMWSh6MSwgRklYKDEuMjYwMDczNTExKSkgLSB6MiAtIHo0OyAvKiBjMyAqLwotICAgIHRtcDEzID0gTVVMVElQTFkoejEsIEZJWCgwLjY0MjAzOTUyMikpIC0gejIgKyB6NDsgLyogYzcgKi8KLQotICAgIC8qIEZpbmFsIG91dHB1dCBzdGFnZSAqLwotCi0gICAgb3V0cHRyWzBdID0gcmFuZ2VfbGltaXRbKGludCkgUklHSFRfU0hJRlQodG1wMjAgKyB0bXAxMCwKLQkJCQkJICAgICAgQ09OU1RfQklUUytQQVNTMV9CSVRTKzMpCi0JCQkgICAgJiBSQU5HRV9NQVNLXTsKLSAgICBvdXRwdHJbOV0gPSByYW5nZV9saW1pdFsoaW50KSBSSUdIVF9TSElGVCh0bXAyMCAtIHRtcDEwLAotCQkJCQkgICAgICBDT05TVF9CSVRTK1BBU1MxX0JJVFMrMykKLQkJCSAgICAmIFJBTkdFX01BU0tdOwotICAgIG91dHB0clsxXSA9IHJhbmdlX2xpbWl0WyhpbnQpIFJJR0hUX1NISUZUKHRtcDIxICsgdG1wMTEsCi0JCQkJCSAgICAgIENPTlNUX0JJVFMrUEFTUzFfQklUUyszKQotCQkJICAgICYgUkFOR0VfTUFTS107Ci0gICAgb3V0cHRyWzhdID0gcmFuZ2VfbGltaXRbKGludCkgUklHSFRfU0hJRlQodG1wMjEgLSB0bXAxMSwKLQkJCQkJICAgICAgQ09OU1RfQklUUytQQVNTMV9CSVRTKzMpCi0JCQkgICAgJiBSQU5HRV9NQVNLXTsKLSAgICBvdXRwdHJbMl0gPSByYW5nZV9saW1pdFsoaW50KSBSSUdIVF9TSElGVCh0bXAyMiArIHRtcDEyLAotCQkJCQkgICAgICBDT05TVF9CSVRTK1BBU1MxX0JJVFMrMykKLQkJCSAgICAmIFJBTkdFX01BU0tdOwotICAgIG91dHB0cls3XSA9IHJhbmdlX2xpbWl0WyhpbnQpIFJJR0hUX1NISUZUKHRtcDIyIC0gdG1wMTIsCi0JCQkJCSAgICAgIENPTlNUX0JJVFMrUEFTUzFfQklUUyszKQotCQkJICAgICYgUkFOR0VfTUFTS107Ci0gICAgb3V0cHRyWzNdID0gcmFuZ2VfbGltaXRbKGludCkgUklHSFRfU0hJRlQodG1wMjMgKyB0bXAxMywKLQkJCQkJICAgICAgQ09OU1RfQklUUytQQVNTMV9CSVRTKzMpCi0JCQkgICAgJiBSQU5HRV9NQVNLXTsKLSAgICBvdXRwdHJbNl0gPSByYW5nZV9saW1pdFsoaW50KSBSSUdIVF9TSElGVCh0bXAyMyAtIHRtcDEzLAotCQkJCQkgICAgICBDT05TVF9CSVRTK1BBU1MxX0JJVFMrMykKLQkJCSAgICAmIFJBTkdFX01BU0tdOwotICAgIG91dHB0cls0XSA9IHJhbmdlX2xpbWl0WyhpbnQpIFJJR0hUX1NISUZUKHRtcDI0ICsgdG1wMTQsCi0JCQkJCSAgICAgIENPTlNUX0JJVFMrUEFTUzFfQklUUyszKQotCQkJICAgICYgUkFOR0VfTUFTS107Ci0gICAgb3V0cHRyWzVdID0gcmFuZ2VfbGltaXRbKGludCkgUklHSFRfU0hJRlQodG1wMjQgLSB0bXAxNCwKLQkJCQkJICAgICAgQ09OU1RfQklUUytQQVNTMV9CSVRTKzMpCi0JCQkgICAgJiBSQU5HRV9NQVNLXTsKLQotICAgIHdzcHRyICs9IDg7CQkvKiBhZHZhbmNlIHBvaW50ZXIgdG8gbmV4dCByb3cgKi8KLSAgfQotfQotCi0KLS8qCi0gKiBQZXJmb3JtIGRlcXVhbnRpemF0aW9uIGFuZCBpbnZlcnNlIERDVCBvbiBvbmUgYmxvY2sgb2YgY29lZmZpY2llbnRzLAotICogcHJvZHVjaW5nIGEgMTF4MTEgb3V0cHV0IGJsb2NrLgotICoKLSAqIE9wdGltaXplZCBhbGdvcml0aG0gd2l0aCAyNCBtdWx0aXBsaWNhdGlvbnMgaW4gdGhlIDEtRCBrZXJuZWwuCi0gKiBjSyByZXByZXNlbnRzIHNxcnQoMikgKiBjb3MoSypwaS8yMikuCi0gKi8KLQotR0xPQkFMKHZvaWQpCi1qcGVnX2lkY3RfMTF4MTEgKGpfZGVjb21wcmVzc19wdHIgY2luZm8sIGpwZWdfY29tcG9uZW50X2luZm8gKiBjb21wcHRyLAotCQkgSkNPRUZQVFIgY29lZl9ibG9jaywKLQkJIEpTQU1QQVJSQVkgb3V0cHV0X2J1ZiwgSkRJTUVOU0lPTiBvdXRwdXRfY29sKQotewotICBJTlQzMiB0bXAxMCwgdG1wMTEsIHRtcDEyLCB0bXAxMywgdG1wMTQ7Ci0gIElOVDMyIHRtcDIwLCB0bXAyMSwgdG1wMjIsIHRtcDIzLCB0bXAyNCwgdG1wMjU7Ci0gIElOVDMyIHoxLCB6MiwgejMsIHo0OwotICBKQ09FRlBUUiBpbnB0cjsKLSAgSVNMT1dfTVVMVF9UWVBFICogcXVhbnRwdHI7Ci0gIGludCAqIHdzcHRyOwotICBKU0FNUFJPVyBvdXRwdHI7Ci0gIEpTQU1QTEUgKnJhbmdlX2xpbWl0ID0gSURDVF9yYW5nZV9saW1pdChjaW5mbyk7Ci0gIGludCBjdHI7Ci0gIGludCB3b3Jrc3BhY2VbOCoxMV07CS8qIGJ1ZmZlcnMgZGF0YSBiZXR3ZWVuIHBhc3NlcyAqLwotICBTSElGVF9URU1QUwotCi0gIC8qIFBhc3MgMTogcHJvY2VzcyBjb2x1bW5zIGZyb20gaW5wdXQsIHN0b3JlIGludG8gd29yayBhcnJheS4gKi8KLQotICBpbnB0ciA9IGNvZWZfYmxvY2s7Ci0gIHF1YW50cHRyID0gKElTTE9XX01VTFRfVFlQRSAqKSBjb21wcHRyLT5kY3RfdGFibGU7Ci0gIHdzcHRyID0gd29ya3NwYWNlOwotICBmb3IgKGN0ciA9IDA7IGN0ciA8IDg7IGN0cisrLCBpbnB0cisrLCBxdWFudHB0cisrLCB3c3B0cisrKSB7Ci0gICAgLyogRXZlbiBwYXJ0ICovCi0KLSAgICB0bXAxMCA9IERFUVVBTlRJWkUoaW5wdHJbRENUU0laRSowXSwgcXVhbnRwdHJbRENUU0laRSowXSk7Ci0gICAgdG1wMTAgPDw9IENPTlNUX0JJVFM7Ci0gICAgLyogQWRkIGZ1ZGdlIGZhY3RvciBoZXJlIGZvciBmaW5hbCBkZXNjYWxlLiAqLwotICAgIHRtcDEwICs9IE9ORSA8PCAoQ09OU1RfQklUUy1QQVNTMV9CSVRTLTEpOwotCi0gICAgejEgPSBERVFVQU5USVpFKGlucHRyW0RDVFNJWkUqMl0sIHF1YW50cHRyW0RDVFNJWkUqMl0pOwotICAgIHoyID0gREVRVUFOVElaRShpbnB0cltEQ1RTSVpFKjRdLCBxdWFudHB0cltEQ1RTSVpFKjRdKTsKLSAgICB6MyA9IERFUVVBTlRJWkUoaW5wdHJbRENUU0laRSo2XSwgcXVhbnRwdHJbRENUU0laRSo2XSk7Ci0KLSAgICB0bXAyMCA9IE1VTFRJUExZKHoyIC0gejMsIEZJWCgyLjU0NjY0MDEzMikpOyAgICAgLyogYzIrYzQgKi8KLSAgICB0bXAyMyA9IE1VTFRJUExZKHoyIC0gejEsIEZJWCgwLjQzMDgxNTA0NSkpOyAgICAgLyogYzItYzYgKi8KLSAgICB6NCA9IHoxICsgejM7Ci0gICAgdG1wMjQgPSBNVUxUSVBMWSh6NCwgLSBGSVgoMS4xNTU2NjQ0MDIpKTsgICAgICAgIC8qIC0oYzItYzEwKSAqLwotICAgIHo0IC09IHoyOwotICAgIHRtcDI1ID0gdG1wMTAgKyBNVUxUSVBMWSh6NCwgRklYKDEuMzU2OTI3OTc2KSk7ICAvKiBjMiAqLwotICAgIHRtcDIxID0gdG1wMjAgKyB0bXAyMyArIHRtcDI1IC0KLQkgICAgTVVMVElQTFkoejIsIEZJWCgxLjgyMTc5MDc3NSkpOyAgICAgICAgICAvKiBjMitjNCtjMTAtYzYgKi8KLSAgICB0bXAyMCArPSB0bXAyNSArIE1VTFRJUExZKHozLCBGSVgoMi4xMTU4MjUwODcpKTsgLyogYzQrYzYgKi8KLSAgICB0bXAyMyArPSB0bXAyNSAtIE1VTFRJUExZKHoxLCBGSVgoMS41MTM1OTg0NzcpKTsgLyogYzYrYzggKi8KLSAgICB0bXAyNCArPSB0bXAyNTsKLSAgICB0bXAyMiA9IHRtcDI0IC0gTVVMVElQTFkoejMsIEZJWCgwLjc4ODc0OTEyMCkpOyAgLyogYzgrYzEwICovCi0gICAgdG1wMjQgKz0gTVVMVElQTFkoejIsIEZJWCgxLjk0NDQxMzUyMikpIC0gICAgICAgIC8qIGMyK2M4ICovCi0JICAgICBNVUxUSVBMWSh6MSwgRklYKDEuMzkwOTc1NzMwKSk7ICAgICAgICAgLyogYzQrYzEwICovCi0gICAgdG1wMjUgPSB0bXAxMCAtIE1VTFRJUExZKHo0LCBGSVgoMS40MTQyMTM1NjIpKTsgIC8qIGMwICovCi0KLSAgICAvKiBPZGQgcGFydCAqLwotCi0gICAgejEgPSBERVFVQU5USVpFKGlucHRyW0RDVFNJWkUqMV0sIHF1YW50cHRyW0RDVFNJWkUqMV0pOwotICAgIHoyID0gREVRVUFOVElaRShpbnB0cltEQ1RTSVpFKjNdLCBxdWFudHB0cltEQ1RTSVpFKjNdKTsKLSAgICB6MyA9IERFUVVBTlRJWkUoaW5wdHJbRENUU0laRSo1XSwgcXVhbnRwdHJbRENUU0laRSo1XSk7Ci0gICAgejQgPSBERVFVQU5USVpFKGlucHRyW0RDVFNJWkUqN10sIHF1YW50cHRyW0RDVFNJWkUqN10pOwotCi0gICAgdG1wMTEgPSB6MSArIHoyOwotICAgIHRtcDE0ID0gTVVMVElQTFkodG1wMTEgKyB6MyArIHo0LCBGSVgoMC4zOTg0MzAwMDMpKTsgLyogYzkgKi8KLSAgICB0bXAxMSA9IE1VTFRJUExZKHRtcDExLCBGSVgoMC44ODc5ODM5MDIpKTsgICAgICAgICAgIC8qIGMzLWM5ICovCi0gICAgdG1wMTIgPSBNVUxUSVBMWSh6MSArIHozLCBGSVgoMC42NzAzNjEyOTUpKTsgICAgICAgICAvKiBjNS1jOSAqLwotICAgIHRtcDEzID0gdG1wMTQgKyBNVUxUSVBMWSh6MSArIHo0LCBGSVgoMC4zNjYxNTE1NzQpKTsgLyogYzctYzkgKi8KLSAgICB0bXAxMCA9IHRtcDExICsgdG1wMTIgKyB0bXAxMyAtCi0JICAgIE1VTFRJUExZKHoxLCBGSVgoMC45MjMxMDc4NjYpKTsgICAgICAgICAgICAgIC8qIGM3K2M1K2MzLWMxLTIqYzkgKi8KLSAgICB6MSAgICA9IHRtcDE0IC0gTVVMVElQTFkoejIgKyB6MywgRklYKDEuMTYzMDExNTc5KSk7IC8qIGM3K2M5ICovCi0gICAgdG1wMTEgKz0gejEgKyBNVUxUSVBMWSh6MiwgRklYKDIuMDczMjc2NTg4KSk7ICAgICAgICAvKiBjMStjNyszKmM5LWMzICovCi0gICAgdG1wMTIgKz0gejEgLSBNVUxUSVBMWSh6MywgRklYKDEuMTkyMTkzNjIzKSk7ICAgICAgICAvKiBjMytjNS1jNy1jOSAqLwotICAgIHoxICAgID0gTVVMVElQTFkoejIgKyB6NCwgLSBGSVgoMS43OTgyNDg5MTApKTsgICAgICAgLyogLShjMStjOSkgKi8KLSAgICB0bXAxMSArPSB6MTsKLSAgICB0bXAxMyArPSB6MSArIE1VTFRJUExZKHo0LCBGSVgoMi4xMDI0NTg2MzIpKTsgICAgICAgIC8qIGMxK2M1K2M5LWM3ICovCi0gICAgdG1wMTQgKz0gTVVMVElQTFkoejIsIC0gRklYKDEuNDY3MjIxMzAxKSkgKyAgICAgICAgICAvKiAtKGM1K2M5KSAqLwotCSAgICAgTVVMVElQTFkoejMsIEZJWCgxLjAwMTM4ODkwNSkpIC0gICAgICAgICAgICAvKiBjMS1jOSAqLwotCSAgICAgTVVMVElQTFkoejQsIEZJWCgxLjY4NDg0MzkwNykpOyAgICAgICAgICAgICAvKiBjMytjOSAqLwotCi0gICAgLyogRmluYWwgb3V0cHV0IHN0YWdlICovCi0KLSAgICB3c3B0cls4KjBdICA9IChpbnQpIFJJR0hUX1NISUZUKHRtcDIwICsgdG1wMTAsIENPTlNUX0JJVFMtUEFTUzFfQklUUyk7Ci0gICAgd3NwdHJbOCoxMF0gPSAoaW50KSBSSUdIVF9TSElGVCh0bXAyMCAtIHRtcDEwLCBDT05TVF9CSVRTLVBBU1MxX0JJVFMpOwotICAgIHdzcHRyWzgqMV0gID0gKGludCkgUklHSFRfU0hJRlQodG1wMjEgKyB0bXAxMSwgQ09OU1RfQklUUy1QQVNTMV9CSVRTKTsKLSAgICB3c3B0cls4KjldICA9IChpbnQpIFJJR0hUX1NISUZUKHRtcDIxIC0gdG1wMTEsIENPTlNUX0JJVFMtUEFTUzFfQklUUyk7Ci0gICAgd3NwdHJbOCoyXSAgPSAoaW50KSBSSUdIVF9TSElGVCh0bXAyMiArIHRtcDEyLCBDT05TVF9CSVRTLVBBU1MxX0JJVFMpOwotICAgIHdzcHRyWzgqOF0gID0gKGludCkgUklHSFRfU0hJRlQodG1wMjIgLSB0bXAxMiwgQ09OU1RfQklUUy1QQVNTMV9CSVRTKTsKLSAgICB3c3B0cls4KjNdICA9IChpbnQpIFJJR0hUX1NISUZUKHRtcDIzICsgdG1wMTMsIENPTlNUX0JJVFMtUEFTUzFfQklUUyk7Ci0gICAgd3NwdHJbOCo3XSAgPSAoaW50KSBSSUdIVF9TSElGVCh0bXAyMyAtIHRtcDEzLCBDT05TVF9CSVRTLVBBU1MxX0JJVFMpOwotICAgIHdzcHRyWzgqNF0gID0gKGludCkgUklHSFRfU0hJRlQodG1wMjQgKyB0bXAxNCwgQ09OU1RfQklUUy1QQVNTMV9CSVRTKTsKLSAgICB3c3B0cls4KjZdICA9IChpbnQpIFJJR0hUX1NISUZUKHRtcDI0IC0gdG1wMTQsIENPTlNUX0JJVFMtUEFTUzFfQklUUyk7Ci0gICAgd3NwdHJbOCo1XSAgPSAoaW50KSBSSUdIVF9TSElGVCh0bXAyNSwgQ09OU1RfQklUUy1QQVNTMV9CSVRTKTsKLSAgfQotCi0gIC8qIFBhc3MgMjogcHJvY2VzcyAxMSByb3dzIGZyb20gd29yayBhcnJheSwgc3RvcmUgaW50byBvdXRwdXQgYXJyYXkuICovCi0KLSAgd3NwdHIgPSB3b3Jrc3BhY2U7Ci0gIGZvciAoY3RyID0gMDsgY3RyIDwgMTE7IGN0cisrKSB7Ci0gICAgb3V0cHRyID0gb3V0cHV0X2J1ZltjdHJdICsgb3V0cHV0X2NvbDsKLQotICAgIC8qIEV2ZW4gcGFydCAqLwotCi0gICAgLyogQWRkIGZ1ZGdlIGZhY3RvciBoZXJlIGZvciBmaW5hbCBkZXNjYWxlLiAqLwotICAgIHRtcDEwID0gKElOVDMyKSB3c3B0clswXSArIChPTkUgPDwgKFBBU1MxX0JJVFMrMikpOwotICAgIHRtcDEwIDw8PSBDT05TVF9CSVRTOwotCi0gICAgejEgPSAoSU5UMzIpIHdzcHRyWzJdOwotICAgIHoyID0gKElOVDMyKSB3c3B0cls0XTsKLSAgICB6MyA9IChJTlQzMikgd3NwdHJbNl07Ci0KLSAgICB0bXAyMCA9IE1VTFRJUExZKHoyIC0gejMsIEZJWCgyLjU0NjY0MDEzMikpOyAgICAgLyogYzIrYzQgKi8KLSAgICB0bXAyMyA9IE1VTFRJUExZKHoyIC0gejEsIEZJWCgwLjQzMDgxNTA0NSkpOyAgICAgLyogYzItYzYgKi8KLSAgICB6NCA9IHoxICsgejM7Ci0gICAgdG1wMjQgPSBNVUxUSVBMWSh6NCwgLSBGSVgoMS4xNTU2NjQ0MDIpKTsgICAgICAgIC8qIC0oYzItYzEwKSAqLwotICAgIHo0IC09IHoyOwotICAgIHRtcDI1ID0gdG1wMTAgKyBNVUxUSVBMWSh6NCwgRklYKDEuMzU2OTI3OTc2KSk7ICAvKiBjMiAqLwotICAgIHRtcDIxID0gdG1wMjAgKyB0bXAyMyArIHRtcDI1IC0KLQkgICAgTVVMVElQTFkoejIsIEZJWCgxLjgyMTc5MDc3NSkpOyAgICAgICAgICAvKiBjMitjNCtjMTAtYzYgKi8KLSAgICB0bXAyMCArPSB0bXAyNSArIE1VTFRJUExZKHozLCBGSVgoMi4xMTU4MjUwODcpKTsgLyogYzQrYzYgKi8KLSAgICB0bXAyMyArPSB0bXAyNSAtIE1VTFRJUExZKHoxLCBGSVgoMS41MTM1OTg0NzcpKTsgLyogYzYrYzggKi8KLSAgICB0bXAyNCArPSB0bXAyNTsKLSAgICB0bXAyMiA9IHRtcDI0IC0gTVVMVElQTFkoejMsIEZJWCgwLjc4ODc0OTEyMCkpOyAgLyogYzgrYzEwICovCi0gICAgdG1wMjQgKz0gTVVMVElQTFkoejIsIEZJWCgxLjk0NDQxMzUyMikpIC0gICAgICAgIC8qIGMyK2M4ICovCi0JICAgICBNVUxUSVBMWSh6MSwgRklYKDEuMzkwOTc1NzMwKSk7ICAgICAgICAgLyogYzQrYzEwICovCi0gICAgdG1wMjUgPSB0bXAxMCAtIE1VTFRJUExZKHo0LCBGSVgoMS40MTQyMTM1NjIpKTsgIC8qIGMwICovCi0KLSAgICAvKiBPZGQgcGFydCAqLwotCi0gICAgejEgPSAoSU5UMzIpIHdzcHRyWzFdOwotICAgIHoyID0gKElOVDMyKSB3c3B0clszXTsKLSAgICB6MyA9IChJTlQzMikgd3NwdHJbNV07Ci0gICAgejQgPSAoSU5UMzIpIHdzcHRyWzddOwotCi0gICAgdG1wMTEgPSB6MSArIHoyOwotICAgIHRtcDE0ID0gTVVMVElQTFkodG1wMTEgKyB6MyArIHo0LCBGSVgoMC4zOTg0MzAwMDMpKTsgLyogYzkgKi8KLSAgICB0bXAxMSA9IE1VTFRJUExZKHRtcDExLCBGSVgoMC44ODc5ODM5MDIpKTsgICAgICAgICAgIC8qIGMzLWM5ICovCi0gICAgdG1wMTIgPSBNVUxUSVBMWSh6MSArIHozLCBGSVgoMC42NzAzNjEyOTUpKTsgICAgICAgICAvKiBjNS1jOSAqLwotICAgIHRtcDEzID0gdG1wMTQgKyBNVUxUSVBMWSh6MSArIHo0LCBGSVgoMC4zNjYxNTE1NzQpKTsgLyogYzctYzkgKi8KLSAgICB0bXAxMCA9IHRtcDExICsgdG1wMTIgKyB0bXAxMyAtCi0JICAgIE1VTFRJUExZKHoxLCBGSVgoMC45MjMxMDc4NjYpKTsgICAgICAgICAgICAgIC8qIGM3K2M1K2MzLWMxLTIqYzkgKi8KLSAgICB6MSAgICA9IHRtcDE0IC0gTVVMVElQTFkoejIgKyB6MywgRklYKDEuMTYzMDExNTc5KSk7IC8qIGM3K2M5ICovCi0gICAgdG1wMTEgKz0gejEgKyBNVUxUSVBMWSh6MiwgRklYKDIuMDczMjc2NTg4KSk7ICAgICAgICAvKiBjMStjNyszKmM5LWMzICovCi0gICAgdG1wMTIgKz0gejEgLSBNVUxUSVBMWSh6MywgRklYKDEuMTkyMTkzNjIzKSk7ICAgICAgICAvKiBjMytjNS1jNy1jOSAqLwotICAgIHoxICAgID0gTVVMVElQTFkoejIgKyB6NCwgLSBGSVgoMS43OTgyNDg5MTApKTsgICAgICAgLyogLShjMStjOSkgKi8KLSAgICB0bXAxMSArPSB6MTsKLSAgICB0bXAxMyArPSB6MSArIE1VTFRJUExZKHo0LCBGSVgoMi4xMDI0NTg2MzIpKTsgICAgICAgIC8qIGMxK2M1K2M5LWM3ICovCi0gICAgdG1wMTQgKz0gTVVMVElQTFkoejIsIC0gRklYKDEuNDY3MjIxMzAxKSkgKyAgICAgICAgICAvKiAtKGM1K2M5KSAqLwotCSAgICAgTVVMVElQTFkoejMsIEZJWCgxLjAwMTM4ODkwNSkpIC0gICAgICAgICAgICAvKiBjMS1jOSAqLwotCSAgICAgTVVMVElQTFkoejQsIEZJWCgxLjY4NDg0MzkwNykpOyAgICAgICAgICAgICAvKiBjMytjOSAqLwotCi0gICAgLyogRmluYWwgb3V0cHV0IHN0YWdlICovCi0KLSAgICBvdXRwdHJbMF0gID0gcmFuZ2VfbGltaXRbKGludCkgUklHSFRfU0hJRlQodG1wMjAgKyB0bXAxMCwKLQkJCQkJICAgICAgIENPTlNUX0JJVFMrUEFTUzFfQklUUyszKQotCQkJICAgICAmIFJBTkdFX01BU0tdOwotICAgIG91dHB0clsxMF0gPSByYW5nZV9saW1pdFsoaW50KSBSSUdIVF9TSElGVCh0bXAyMCAtIHRtcDEwLAotCQkJCQkgICAgICAgQ09OU1RfQklUUytQQVNTMV9CSVRTKzMpCi0JCQkgICAgICYgUkFOR0VfTUFTS107Ci0gICAgb3V0cHRyWzFdICA9IHJhbmdlX2xpbWl0WyhpbnQpIFJJR0hUX1NISUZUKHRtcDIxICsgdG1wMTEsCi0JCQkJCSAgICAgICBDT05TVF9CSVRTK1BBU1MxX0JJVFMrMykKLQkJCSAgICAgJiBSQU5HRV9NQVNLXTsKLSAgICBvdXRwdHJbOV0gID0gcmFuZ2VfbGltaXRbKGludCkgUklHSFRfU0hJRlQodG1wMjEgLSB0bXAxMSwKLQkJCQkJICAgICAgIENPTlNUX0JJVFMrUEFTUzFfQklUUyszKQotCQkJICAgICAmIFJBTkdFX01BU0tdOwotICAgIG91dHB0clsyXSAgPSByYW5nZV9saW1pdFsoaW50KSBSSUdIVF9TSElGVCh0bXAyMiArIHRtcDEyLAotCQkJCQkgICAgICAgQ09OU1RfQklUUytQQVNTMV9CSVRTKzMpCi0JCQkgICAgICYgUkFOR0VfTUFTS107Ci0gICAgb3V0cHRyWzhdICA9IHJhbmdlX2xpbWl0WyhpbnQpIFJJR0hUX1NISUZUKHRtcDIyIC0gdG1wMTIsCi0JCQkJCSAgICAgICBDT05TVF9CSVRTK1BBU1MxX0JJVFMrMykKLQkJCSAgICAgJiBSQU5HRV9NQVNLXTsKLSAgICBvdXRwdHJbM10gID0gcmFuZ2VfbGltaXRbKGludCkgUklHSFRfU0hJRlQodG1wMjMgKyB0bXAxMywKLQkJCQkJICAgICAgIENPTlNUX0JJVFMrUEFTUzFfQklUUyszKQotCQkJICAgICAmIFJBTkdFX01BU0tdOwotICAgIG91dHB0cls3XSAgPSByYW5nZV9saW1pdFsoaW50KSBSSUdIVF9TSElGVCh0bXAyMyAtIHRtcDEzLAotCQkJCQkgICAgICAgQ09OU1RfQklUUytQQVNTMV9CSVRTKzMpCi0JCQkgICAgICYgUkFOR0VfTUFTS107Ci0gICAgb3V0cHRyWzRdICA9IHJhbmdlX2xpbWl0WyhpbnQpIFJJR0hUX1NISUZUKHRtcDI0ICsgdG1wMTQsCi0JCQkJCSAgICAgICBDT05TVF9CSVRTK1BBU1MxX0JJVFMrMykKLQkJCSAgICAgJiBSQU5HRV9NQVNLXTsKLSAgICBvdXRwdHJbNl0gID0gcmFuZ2VfbGltaXRbKGludCkgUklHSFRfU0hJRlQodG1wMjQgLSB0bXAxNCwKLQkJCQkJICAgICAgIENPTlNUX0JJVFMrUEFTUzFfQklUUyszKQotCQkJICAgICAmIFJBTkdFX01BU0tdOwotICAgIG91dHB0cls1XSAgPSByYW5nZV9saW1pdFsoaW50KSBSSUdIVF9TSElGVCh0bXAyNSwKLQkJCQkJICAgICAgIENPTlNUX0JJVFMrUEFTUzFfQklUUyszKQotCQkJICAgICAmIFJBTkdFX01BU0tdOwotCi0gICAgd3NwdHIgKz0gODsJCS8qIGFkdmFuY2UgcG9pbnRlciB0byBuZXh0IHJvdyAqLwotICB9Ci19Ci0KLQotLyoKLSAqIFBlcmZvcm0gZGVxdWFudGl6YXRpb24gYW5kIGludmVyc2UgRENUIG9uIG9uZSBibG9jayBvZiBjb2VmZmljaWVudHMsCi0gKiBwcm9kdWNpbmcgYSAxMngxMiBvdXRwdXQgYmxvY2suCi0gKgotICogT3B0aW1pemVkIGFsZ29yaXRobSB3aXRoIDE1IG11bHRpcGxpY2F0aW9ucyBpbiB0aGUgMS1EIGtlcm5lbC4KLSAqIGNLIHJlcHJlc2VudHMgc3FydCgyKSAqIGNvcyhLKnBpLzI0KS4KLSAqLwotCi1HTE9CQUwodm9pZCkKLWpwZWdfaWRjdF8xMngxMiAoal9kZWNvbXByZXNzX3B0ciBjaW5mbywganBlZ19jb21wb25lbnRfaW5mbyAqIGNvbXBwdHIsCi0JCSBKQ09FRlBUUiBjb2VmX2Jsb2NrLAotCQkgSlNBTVBBUlJBWSBvdXRwdXRfYnVmLCBKRElNRU5TSU9OIG91dHB1dF9jb2wpCi17Ci0gIElOVDMyIHRtcDEwLCB0bXAxMSwgdG1wMTIsIHRtcDEzLCB0bXAxNCwgdG1wMTU7Ci0gIElOVDMyIHRtcDIwLCB0bXAyMSwgdG1wMjIsIHRtcDIzLCB0bXAyNCwgdG1wMjU7Ci0gIElOVDMyIHoxLCB6MiwgejMsIHo0OwotICBKQ09FRlBUUiBpbnB0cjsKLSAgSVNMT1dfTVVMVF9UWVBFICogcXVhbnRwdHI7Ci0gIGludCAqIHdzcHRyOwotICBKU0FNUFJPVyBvdXRwdHI7Ci0gIEpTQU1QTEUgKnJhbmdlX2xpbWl0ID0gSURDVF9yYW5nZV9saW1pdChjaW5mbyk7Ci0gIGludCBjdHI7Ci0gIGludCB3b3Jrc3BhY2VbOCoxMl07CS8qIGJ1ZmZlcnMgZGF0YSBiZXR3ZWVuIHBhc3NlcyAqLwotICBTSElGVF9URU1QUwotCi0gIC8qIFBhc3MgMTogcHJvY2VzcyBjb2x1bW5zIGZyb20gaW5wdXQsIHN0b3JlIGludG8gd29yayBhcnJheS4gKi8KLQotICBpbnB0ciA9IGNvZWZfYmxvY2s7Ci0gIHF1YW50cHRyID0gKElTTE9XX01VTFRfVFlQRSAqKSBjb21wcHRyLT5kY3RfdGFibGU7Ci0gIHdzcHRyID0gd29ya3NwYWNlOwotICBmb3IgKGN0ciA9IDA7IGN0ciA8IDg7IGN0cisrLCBpbnB0cisrLCBxdWFudHB0cisrLCB3c3B0cisrKSB7Ci0gICAgLyogRXZlbiBwYXJ0ICovCi0KLSAgICB6MyA9IERFUVVBTlRJWkUoaW5wdHJbRENUU0laRSowXSwgcXVhbnRwdHJbRENUU0laRSowXSk7Ci0gICAgejMgPDw9IENPTlNUX0JJVFM7Ci0gICAgLyogQWRkIGZ1ZGdlIGZhY3RvciBoZXJlIGZvciBmaW5hbCBkZXNjYWxlLiAqLwotICAgIHozICs9IE9ORSA8PCAoQ09OU1RfQklUUy1QQVNTMV9CSVRTLTEpOwotCi0gICAgejQgPSBERVFVQU5USVpFKGlucHRyW0RDVFNJWkUqNF0sIHF1YW50cHRyW0RDVFNJWkUqNF0pOwotICAgIHo0ID0gTVVMVElQTFkoejQsIEZJWCgxLjIyNDc0NDg3MSkpOyAvKiBjNCAqLwotCi0gICAgdG1wMTAgPSB6MyArIHo0OwotICAgIHRtcDExID0gejMgLSB6NDsKLQotICAgIHoxID0gREVRVUFOVElaRShpbnB0cltEQ1RTSVpFKjJdLCBxdWFudHB0cltEQ1RTSVpFKjJdKTsKLSAgICB6NCA9IE1VTFRJUExZKHoxLCBGSVgoMS4zNjYwMjU0MDQpKTsgLyogYzIgKi8KLSAgICB6MSA8PD0gQ09OU1RfQklUUzsKLSAgICB6MiA9IERFUVVBTlRJWkUoaW5wdHJbRENUU0laRSo2XSwgcXVhbnRwdHJbRENUU0laRSo2XSk7Ci0gICAgejIgPDw9IENPTlNUX0JJVFM7Ci0KLSAgICB0bXAxMiA9IHoxIC0gejI7Ci0KLSAgICB0bXAyMSA9IHozICsgdG1wMTI7Ci0gICAgdG1wMjQgPSB6MyAtIHRtcDEyOwotCi0gICAgdG1wMTIgPSB6NCArIHoyOwotCi0gICAgdG1wMjAgPSB0bXAxMCArIHRtcDEyOwotICAgIHRtcDI1ID0gdG1wMTAgLSB0bXAxMjsKLQotICAgIHRtcDEyID0gejQgLSB6MSAtIHoyOwotCi0gICAgdG1wMjIgPSB0bXAxMSArIHRtcDEyOwotICAgIHRtcDIzID0gdG1wMTEgLSB0bXAxMjsKLQotICAgIC8qIE9kZCBwYXJ0ICovCi0KLSAgICB6MSA9IERFUVVBTlRJWkUoaW5wdHJbRENUU0laRSoxXSwgcXVhbnRwdHJbRENUU0laRSoxXSk7Ci0gICAgejIgPSBERVFVQU5USVpFKGlucHRyW0RDVFNJWkUqM10sIHF1YW50cHRyW0RDVFNJWkUqM10pOwotICAgIHozID0gREVRVUFOVElaRShpbnB0cltEQ1RTSVpFKjVdLCBxdWFudHB0cltEQ1RTSVpFKjVdKTsKLSAgICB6NCA9IERFUVVBTlRJWkUoaW5wdHJbRENUU0laRSo3XSwgcXVhbnRwdHJbRENUU0laRSo3XSk7Ci0KLSAgICB0bXAxMSA9IE1VTFRJUExZKHoyLCBGSVgoMS4zMDY1NjI5NjUpKTsgICAgICAgICAgICAgICAgICAvKiBjMyAqLwotICAgIHRtcDE0ID0gTVVMVElQTFkoejIsIC0gRklYXzBfNTQxMTk2MTAwKTsgICAgICAgICAgICAgICAgIC8qIC1jOSAqLwotCi0gICAgdG1wMTAgPSB6MSArIHozOwotICAgIHRtcDE1ID0gTVVMVElQTFkodG1wMTAgKyB6NCwgRklYKDAuODYwOTE4NjY5KSk7ICAgICAgICAgIC8qIGM3ICovCi0gICAgdG1wMTIgPSB0bXAxNSArIE1VTFRJUExZKHRtcDEwLCBGSVgoMC4yNjEwNTIzODQpKTsgICAgICAgLyogYzUtYzcgKi8KLSAgICB0bXAxMCA9IHRtcDEyICsgdG1wMTEgKyBNVUxUSVBMWSh6MSwgRklYKDAuMjgwMTQzNzE2KSk7ICAvKiBjMS1jNSAqLwotICAgIHRtcDEzID0gTVVMVElQTFkoejMgKyB6NCwgLSBGSVgoMS4wNDU1MTA1ODApKTsgICAgICAgICAgIC8qIC0oYzcrYzExKSAqLwotICAgIHRtcDEyICs9IHRtcDEzICsgdG1wMTQgLSBNVUxUSVBMWSh6MywgRklYKDEuNDc4NTc1MjQyKSk7IC8qIGMxK2M1LWM3LWMxMSAqLwotICAgIHRtcDEzICs9IHRtcDE1IC0gdG1wMTEgKyBNVUxUSVBMWSh6NCwgRklYKDEuNTg2NzA2NjgxKSk7IC8qIGMxK2MxMSAqLwotICAgIHRtcDE1ICs9IHRtcDE0IC0gTVVMVElQTFkoejEsIEZJWCgwLjY3NjMyNjc1OCkpIC0gICAgICAgIC8qIGM3LWMxMSAqLwotCSAgICAgTVVMVElQTFkoejQsIEZJWCgxLjk4Mjg4OTcyMykpOyAgICAgICAgICAgICAgICAgLyogYzUrYzcgKi8KLQotICAgIHoxIC09IHo0OwotICAgIHoyIC09IHozOwotICAgIHozID0gTVVMVElQTFkoejEgKyB6MiwgRklYXzBfNTQxMTk2MTAwKTsgICAgICAgICAgICAgICAgIC8qIGM5ICovCi0gICAgdG1wMTEgPSB6MyArIE1VTFRJUExZKHoxLCBGSVhfMF83NjUzNjY4NjUpOyAgICAgICAgICAgICAgLyogYzMtYzkgKi8KLSAgICB0bXAxNCA9IHozIC0gTVVMVElQTFkoejIsIEZJWF8xXzg0Nzc1OTA2NSk7ICAgICAgICAgICAgICAvKiBjMytjOSAqLwotCi0gICAgLyogRmluYWwgb3V0cHV0IHN0YWdlICovCi0KLSAgICB3c3B0cls4KjBdICA9IChpbnQpIFJJR0hUX1NISUZUKHRtcDIwICsgdG1wMTAsIENPTlNUX0JJVFMtUEFTUzFfQklUUyk7Ci0gICAgd3NwdHJbOCoxMV0gPSAoaW50KSBSSUdIVF9TSElGVCh0bXAyMCAtIHRtcDEwLCBDT05TVF9CSVRTLVBBU1MxX0JJVFMpOwotICAgIHdzcHRyWzgqMV0gID0gKGludCkgUklHSFRfU0hJRlQodG1wMjEgKyB0bXAxMSwgQ09OU1RfQklUUy1QQVNTMV9CSVRTKTsKLSAgICB3c3B0cls4KjEwXSA9IChpbnQpIFJJR0hUX1NISUZUKHRtcDIxIC0gdG1wMTEsIENPTlNUX0JJVFMtUEFTUzFfQklUUyk7Ci0gICAgd3NwdHJbOCoyXSAgPSAoaW50KSBSSUdIVF9TSElGVCh0bXAyMiArIHRtcDEyLCBDT05TVF9CSVRTLVBBU1MxX0JJVFMpOwotICAgIHdzcHRyWzgqOV0gID0gKGludCkgUklHSFRfU0hJRlQodG1wMjIgLSB0bXAxMiwgQ09OU1RfQklUUy1QQVNTMV9CSVRTKTsKLSAgICB3c3B0cls4KjNdICA9IChpbnQpIFJJR0hUX1NISUZUKHRtcDIzICsgdG1wMTMsIENPTlNUX0JJVFMtUEFTUzFfQklUUyk7Ci0gICAgd3NwdHJbOCo4XSAgPSAoaW50KSBSSUdIVF9TSElGVCh0bXAyMyAtIHRtcDEzLCBDT05TVF9CSVRTLVBBU1MxX0JJVFMpOwotICAgIHdzcHRyWzgqNF0gID0gKGludCkgUklHSFRfU0hJRlQodG1wMjQgKyB0bXAxNCwgQ09OU1RfQklUUy1QQVNTMV9CSVRTKTsKLSAgICB3c3B0cls4KjddICA9IChpbnQpIFJJR0hUX1NISUZUKHRtcDI0IC0gdG1wMTQsIENPTlNUX0JJVFMtUEFTUzFfQklUUyk7Ci0gICAgd3NwdHJbOCo1XSAgPSAoaW50KSBSSUdIVF9TSElGVCh0bXAyNSArIHRtcDE1LCBDT05TVF9CSVRTLVBBU1MxX0JJVFMpOwotICAgIHdzcHRyWzgqNl0gID0gKGludCkgUklHSFRfU0hJRlQodG1wMjUgLSB0bXAxNSwgQ09OU1RfQklUUy1QQVNTMV9CSVRTKTsKLSAgfQotCi0gIC8qIFBhc3MgMjogcHJvY2VzcyAxMiByb3dzIGZyb20gd29yayBhcnJheSwgc3RvcmUgaW50byBvdXRwdXQgYXJyYXkuICovCi0KLSAgd3NwdHIgPSB3b3Jrc3BhY2U7Ci0gIGZvciAoY3RyID0gMDsgY3RyIDwgMTI7IGN0cisrKSB7Ci0gICAgb3V0cHRyID0gb3V0cHV0X2J1ZltjdHJdICsgb3V0cHV0X2NvbDsKLQotICAgIC8qIEV2ZW4gcGFydCAqLwotCi0gICAgLyogQWRkIGZ1ZGdlIGZhY3RvciBoZXJlIGZvciBmaW5hbCBkZXNjYWxlLiAqLwotICAgIHozID0gKElOVDMyKSB3c3B0clswXSArIChPTkUgPDwgKFBBU1MxX0JJVFMrMikpOwotICAgIHozIDw8PSBDT05TVF9CSVRTOwotCi0gICAgejQgPSAoSU5UMzIpIHdzcHRyWzRdOwotICAgIHo0ID0gTVVMVElQTFkoejQsIEZJWCgxLjIyNDc0NDg3MSkpOyAvKiBjNCAqLwotCi0gICAgdG1wMTAgPSB6MyArIHo0OwotICAgIHRtcDExID0gejMgLSB6NDsKLQotICAgIHoxID0gKElOVDMyKSB3c3B0clsyXTsKLSAgICB6NCA9IE1VTFRJUExZKHoxLCBGSVgoMS4zNjYwMjU0MDQpKTsgLyogYzIgKi8KLSAgICB6MSA8PD0gQ09OU1RfQklUUzsKLSAgICB6MiA9IChJTlQzMikgd3NwdHJbNl07Ci0gICAgejIgPDw9IENPTlNUX0JJVFM7Ci0KLSAgICB0bXAxMiA9IHoxIC0gejI7Ci0KLSAgICB0bXAyMSA9IHozICsgdG1wMTI7Ci0gICAgdG1wMjQgPSB6MyAtIHRtcDEyOwotCi0gICAgdG1wMTIgPSB6NCArIHoyOwotCi0gICAgdG1wMjAgPSB0bXAxMCArIHRtcDEyOwotICAgIHRtcDI1ID0gdG1wMTAgLSB0bXAxMjsKLQotICAgIHRtcDEyID0gejQgLSB6MSAtIHoyOwotCi0gICAgdG1wMjIgPSB0bXAxMSArIHRtcDEyOwotICAgIHRtcDIzID0gdG1wMTEgLSB0bXAxMjsKLQotICAgIC8qIE9kZCBwYXJ0ICovCi0KLSAgICB6MSA9IChJTlQzMikgd3NwdHJbMV07Ci0gICAgejIgPSAoSU5UMzIpIHdzcHRyWzNdOwotICAgIHozID0gKElOVDMyKSB3c3B0cls1XTsKLSAgICB6NCA9IChJTlQzMikgd3NwdHJbN107Ci0KLSAgICB0bXAxMSA9IE1VTFRJUExZKHoyLCBGSVgoMS4zMDY1NjI5NjUpKTsgICAgICAgICAgICAgICAgICAvKiBjMyAqLwotICAgIHRtcDE0ID0gTVVMVElQTFkoejIsIC0gRklYXzBfNTQxMTk2MTAwKTsgICAgICAgICAgICAgICAgIC8qIC1jOSAqLwotCi0gICAgdG1wMTAgPSB6MSArIHozOwotICAgIHRtcDE1ID0gTVVMVElQTFkodG1wMTAgKyB6NCwgRklYKDAuODYwOTE4NjY5KSk7ICAgICAgICAgIC8qIGM3ICovCi0gICAgdG1wMTIgPSB0bXAxNSArIE1VTFRJUExZKHRtcDEwLCBGSVgoMC4yNjEwNTIzODQpKTsgICAgICAgLyogYzUtYzcgKi8KLSAgICB0bXAxMCA9IHRtcDEyICsgdG1wMTEgKyBNVUxUSVBMWSh6MSwgRklYKDAuMjgwMTQzNzE2KSk7ICAvKiBjMS1jNSAqLwotICAgIHRtcDEzID0gTVVMVElQTFkoejMgKyB6NCwgLSBGSVgoMS4wNDU1MTA1ODApKTsgICAgICAgICAgIC8qIC0oYzcrYzExKSAqLwotICAgIHRtcDEyICs9IHRtcDEzICsgdG1wMTQgLSBNVUxUSVBMWSh6MywgRklYKDEuNDc4NTc1MjQyKSk7IC8qIGMxK2M1LWM3LWMxMSAqLwotICAgIHRtcDEzICs9IHRtcDE1IC0gdG1wMTEgKyBNVUxUSVBMWSh6NCwgRklYKDEuNTg2NzA2NjgxKSk7IC8qIGMxK2MxMSAqLwotICAgIHRtcDE1ICs9IHRtcDE0IC0gTVVMVElQTFkoejEsIEZJWCgwLjY3NjMyNjc1OCkpIC0gICAgICAgIC8qIGM3LWMxMSAqLwotCSAgICAgTVVMVElQTFkoejQsIEZJWCgxLjk4Mjg4OTcyMykpOyAgICAgICAgICAgICAgICAgLyogYzUrYzcgKi8KLQotICAgIHoxIC09IHo0OwotICAgIHoyIC09IHozOwotICAgIHozID0gTVVMVElQTFkoejEgKyB6MiwgRklYXzBfNTQxMTk2MTAwKTsgICAgICAgICAgICAgICAgIC8qIGM5ICovCi0gICAgdG1wMTEgPSB6MyArIE1VTFRJUExZKHoxLCBGSVhfMF83NjUzNjY4NjUpOyAgICAgICAgICAgICAgLyogYzMtYzkgKi8KLSAgICB0bXAxNCA9IHozIC0gTVVMVElQTFkoejIsIEZJWF8xXzg0Nzc1OTA2NSk7ICAgICAgICAgICAgICAvKiBjMytjOSAqLwotCi0gICAgLyogRmluYWwgb3V0cHV0IHN0YWdlICovCi0KLSAgICBvdXRwdHJbMF0gID0gcmFuZ2VfbGltaXRbKGludCkgUklHSFRfU0hJRlQodG1wMjAgKyB0bXAxMCwKLQkJCQkJICAgICAgIENPTlNUX0JJVFMrUEFTUzFfQklUUyszKQotCQkJICAgICAmIFJBTkdFX01BU0tdOwotICAgIG91dHB0clsxMV0gPSByYW5nZV9saW1pdFsoaW50KSBSSUdIVF9TSElGVCh0bXAyMCAtIHRtcDEwLAotCQkJCQkgICAgICAgQ09OU1RfQklUUytQQVNTMV9CSVRTKzMpCi0JCQkgICAgICYgUkFOR0VfTUFTS107Ci0gICAgb3V0cHRyWzFdICA9IHJhbmdlX2xpbWl0WyhpbnQpIFJJR0hUX1NISUZUKHRtcDIxICsgdG1wMTEsCi0JCQkJCSAgICAgICBDT05TVF9CSVRTK1BBU1MxX0JJVFMrMykKLQkJCSAgICAgJiBSQU5HRV9NQVNLXTsKLSAgICBvdXRwdHJbMTBdID0gcmFuZ2VfbGltaXRbKGludCkgUklHSFRfU0hJRlQodG1wMjEgLSB0bXAxMSwKLQkJCQkJICAgICAgIENPTlNUX0JJVFMrUEFTUzFfQklUUyszKQotCQkJICAgICAmIFJBTkdFX01BU0tdOwotICAgIG91dHB0clsyXSAgPSByYW5nZV9saW1pdFsoaW50KSBSSUdIVF9TSElGVCh0bXAyMiArIHRtcDEyLAotCQkJCQkgICAgICAgQ09OU1RfQklUUytQQVNTMV9CSVRTKzMpCi0JCQkgICAgICYgUkFOR0VfTUFTS107Ci0gICAgb3V0cHRyWzldICA9IHJhbmdlX2xpbWl0WyhpbnQpIFJJR0hUX1NISUZUKHRtcDIyIC0gdG1wMTIsCi0JCQkJCSAgICAgICBDT05TVF9CSVRTK1BBU1MxX0JJVFMrMykKLQkJCSAgICAgJiBSQU5HRV9NQVNLXTsKLSAgICBvdXRwdHJbM10gID0gcmFuZ2VfbGltaXRbKGludCkgUklHSFRfU0hJRlQodG1wMjMgKyB0bXAxMywKLQkJCQkJICAgICAgIENPTlNUX0JJVFMrUEFTUzFfQklUUyszKQotCQkJICAgICAmIFJBTkdFX01BU0tdOwotICAgIG91dHB0cls4XSAgPSByYW5nZV9saW1pdFsoaW50KSBSSUdIVF9TSElGVCh0bXAyMyAtIHRtcDEzLAotCQkJCQkgICAgICAgQ09OU1RfQklUUytQQVNTMV9CSVRTKzMpCi0JCQkgICAgICYgUkFOR0VfTUFTS107Ci0gICAgb3V0cHRyWzRdICA9IHJhbmdlX2xpbWl0WyhpbnQpIFJJR0hUX1NISUZUKHRtcDI0ICsgdG1wMTQsCi0JCQkJCSAgICAgICBDT05TVF9CSVRTK1BBU1MxX0JJVFMrMykKLQkJCSAgICAgJiBSQU5HRV9NQVNLXTsKLSAgICBvdXRwdHJbN10gID0gcmFuZ2VfbGltaXRbKGludCkgUklHSFRfU0hJRlQodG1wMjQgLSB0bXAxNCwKLQkJCQkJICAgICAgIENPTlNUX0JJVFMrUEFTUzFfQklUUyszKQotCQkJICAgICAmIFJBTkdFX01BU0tdOwotICAgIG91dHB0cls1XSAgPSByYW5nZV9saW1pdFsoaW50KSBSSUdIVF9TSElGVCh0bXAyNSArIHRtcDE1LAotCQkJCQkgICAgICAgQ09OU1RfQklUUytQQVNTMV9CSVRTKzMpCi0JCQkgICAgICYgUkFOR0VfTUFTS107Ci0gICAgb3V0cHRyWzZdICA9IHJhbmdlX2xpbWl0WyhpbnQpIFJJR0hUX1NISUZUKHRtcDI1IC0gdG1wMTUsCi0JCQkJCSAgICAgICBDT05TVF9CSVRTK1BBU1MxX0JJVFMrMykKLQkJCSAgICAgJiBSQU5HRV9NQVNLXTsKLQotICAgIHdzcHRyICs9IDg7CQkvKiBhZHZhbmNlIHBvaW50ZXIgdG8gbmV4dCByb3cgKi8KLSAgfQotfQotCi0KLS8qCi0gKiBQZXJmb3JtIGRlcXVhbnRpemF0aW9uIGFuZCBpbnZlcnNlIERDVCBvbiBvbmUgYmxvY2sgb2YgY29lZmZpY2llbnRzLAotICogcHJvZHVjaW5nIGEgMTN4MTMgb3V0cHV0IGJsb2NrLgotICoKLSAqIE9wdGltaXplZCBhbGdvcml0aG0gd2l0aCAyOSBtdWx0aXBsaWNhdGlvbnMgaW4gdGhlIDEtRCBrZXJuZWwuCi0gKiBjSyByZXByZXNlbnRzIHNxcnQoMikgKiBjb3MoSypwaS8yNikuCi0gKi8KLQotR0xPQkFMKHZvaWQpCi1qcGVnX2lkY3RfMTN4MTMgKGpfZGVjb21wcmVzc19wdHIgY2luZm8sIGpwZWdfY29tcG9uZW50X2luZm8gKiBjb21wcHRyLAotCQkgSkNPRUZQVFIgY29lZl9ibG9jaywKLQkJIEpTQU1QQVJSQVkgb3V0cHV0X2J1ZiwgSkRJTUVOU0lPTiBvdXRwdXRfY29sKQotewotICBJTlQzMiB0bXAxMCwgdG1wMTEsIHRtcDEyLCB0bXAxMywgdG1wMTQsIHRtcDE1OwotICBJTlQzMiB0bXAyMCwgdG1wMjEsIHRtcDIyLCB0bXAyMywgdG1wMjQsIHRtcDI1LCB0bXAyNjsKLSAgSU5UMzIgejEsIHoyLCB6MywgejQ7Ci0gIEpDT0VGUFRSIGlucHRyOwotICBJU0xPV19NVUxUX1RZUEUgKiBxdWFudHB0cjsKLSAgaW50ICogd3NwdHI7Ci0gIEpTQU1QUk9XIG91dHB0cjsKLSAgSlNBTVBMRSAqcmFuZ2VfbGltaXQgPSBJRENUX3JhbmdlX2xpbWl0KGNpbmZvKTsKLSAgaW50IGN0cjsKLSAgaW50IHdvcmtzcGFjZVs4KjEzXTsJLyogYnVmZmVycyBkYXRhIGJldHdlZW4gcGFzc2VzICovCi0gIFNISUZUX1RFTVBTCi0KLSAgLyogUGFzcyAxOiBwcm9jZXNzIGNvbHVtbnMgZnJvbSBpbnB1dCwgc3RvcmUgaW50byB3b3JrIGFycmF5LiAqLwotCi0gIGlucHRyID0gY29lZl9ibG9jazsKLSAgcXVhbnRwdHIgPSAoSVNMT1dfTVVMVF9UWVBFICopIGNvbXBwdHItPmRjdF90YWJsZTsKLSAgd3NwdHIgPSB3b3Jrc3BhY2U7Ci0gIGZvciAoY3RyID0gMDsgY3RyIDwgODsgY3RyKyssIGlucHRyKyssIHF1YW50cHRyKyssIHdzcHRyKyspIHsKLSAgICAvKiBFdmVuIHBhcnQgKi8KLQotICAgIHoxID0gREVRVUFOVElaRShpbnB0cltEQ1RTSVpFKjBdLCBxdWFudHB0cltEQ1RTSVpFKjBdKTsKLSAgICB6MSA8PD0gQ09OU1RfQklUUzsKLSAgICAvKiBBZGQgZnVkZ2UgZmFjdG9yIGhlcmUgZm9yIGZpbmFsIGRlc2NhbGUuICovCi0gICAgejEgKz0gT05FIDw8IChDT05TVF9CSVRTLVBBU1MxX0JJVFMtMSk7Ci0KLSAgICB6MiA9IERFUVVBTlRJWkUoaW5wdHJbRENUU0laRSoyXSwgcXVhbnRwdHJbRENUU0laRSoyXSk7Ci0gICAgejMgPSBERVFVQU5USVpFKGlucHRyW0RDVFNJWkUqNF0sIHF1YW50cHRyW0RDVFNJWkUqNF0pOwotICAgIHo0ID0gREVRVUFOVElaRShpbnB0cltEQ1RTSVpFKjZdLCBxdWFudHB0cltEQ1RTSVpFKjZdKTsKLQotICAgIHRtcDEwID0gejMgKyB6NDsKLSAgICB0bXAxMSA9IHozIC0gejQ7Ci0KLSAgICB0bXAxMiA9IE1VTFRJUExZKHRtcDEwLCBGSVgoMS4xNTUzODg5ODYpKTsgICAgICAgICAgICAgICAgLyogKGM0K2M2KS8yICovCi0gICAgdG1wMTMgPSBNVUxUSVBMWSh0bXAxMSwgRklYKDAuMDk2ODM0OTM0KSkgKyB6MTsgICAgICAgICAgIC8qIChjNC1jNikvMiAqLwotCi0gICAgdG1wMjAgPSBNVUxUSVBMWSh6MiwgRklYKDEuMzczMTE5MDg2KSkgKyB0bXAxMiArIHRtcDEzOyAgIC8qIGMyICovCi0gICAgdG1wMjIgPSBNVUxUSVBMWSh6MiwgRklYKDAuNTAxNDg3MDQxKSkgLSB0bXAxMiArIHRtcDEzOyAgIC8qIGMxMCAqLwotCi0gICAgdG1wMTIgPSBNVUxUSVBMWSh0bXAxMCwgRklYKDAuMzE2NDUwMTMxKSk7ICAgICAgICAgICAgICAgIC8qIChjOC1jMTIpLzIgKi8KLSAgICB0bXAxMyA9IE1VTFRJUExZKHRtcDExLCBGSVgoMC40ODY5MTQ3MzkpKSArIHoxOyAgICAgICAgICAgLyogKGM4K2MxMikvMiAqLwotCi0gICAgdG1wMjEgPSBNVUxUSVBMWSh6MiwgRklYKDEuMDU4NTU0MDUyKSkgLSB0bXAxMiArIHRtcDEzOyAgIC8qIGM2ICovCi0gICAgdG1wMjUgPSBNVUxUSVBMWSh6MiwgLSBGSVgoMS4yNTIyMjM5MjApKSArIHRtcDEyICsgdG1wMTM7IC8qIGM0ICovCi0KLSAgICB0bXAxMiA9IE1VTFRJUExZKHRtcDEwLCBGSVgoMC40MzU4MTYwMjMpKTsgICAgICAgICAgICAgICAgLyogKGMyLWMxMCkvMiAqLwotICAgIHRtcDEzID0gTVVMVElQTFkodG1wMTEsIEZJWCgwLjkzNzMwMzA2NCkpIC0gejE7ICAgICAgICAgICAvKiAoYzIrYzEwKS8yICovCi0KLSAgICB0bXAyMyA9IE1VTFRJUExZKHoyLCAtIEZJWCgwLjE3MDQ2NDYwOCkpIC0gdG1wMTIgLSB0bXAxMzsgLyogYzEyICovCi0gICAgdG1wMjQgPSBNVUxUSVBMWSh6MiwgLSBGSVgoMC44MDMzNjQ4NjkpKSArIHRtcDEyIC0gdG1wMTM7IC8qIGM4ICovCi0KLSAgICB0bXAyNiA9IE1VTFRJUExZKHRtcDExIC0gejIsIEZJWCgxLjQxNDIxMzU2MikpICsgejE7ICAgICAgLyogYzAgKi8KLQotICAgIC8qIE9kZCBwYXJ0ICovCi0KLSAgICB6MSA9IERFUVVBTlRJWkUoaW5wdHJbRENUU0laRSoxXSwgcXVhbnRwdHJbRENUU0laRSoxXSk7Ci0gICAgejIgPSBERVFVQU5USVpFKGlucHRyW0RDVFNJWkUqM10sIHF1YW50cHRyW0RDVFNJWkUqM10pOwotICAgIHozID0gREVRVUFOVElaRShpbnB0cltEQ1RTSVpFKjVdLCBxdWFudHB0cltEQ1RTSVpFKjVdKTsKLSAgICB6NCA9IERFUVVBTlRJWkUoaW5wdHJbRENUU0laRSo3XSwgcXVhbnRwdHJbRENUU0laRSo3XSk7Ci0KLSAgICB0bXAxMSA9IE1VTFRJUExZKHoxICsgejIsIEZJWCgxLjMyMjMxMjY1MSkpOyAgICAgLyogYzMgKi8KLSAgICB0bXAxMiA9IE1VTFRJUExZKHoxICsgejMsIEZJWCgxLjE2Mzg3NDk0NSkpOyAgICAgLyogYzUgKi8KLSAgICB0bXAxNSA9IHoxICsgejQ7Ci0gICAgdG1wMTMgPSBNVUxUSVBMWSh0bXAxNSwgRklYKDAuOTM3Nzk3MDU3KSk7ICAgICAgIC8qIGM3ICovCi0gICAgdG1wMTAgPSB0bXAxMSArIHRtcDEyICsgdG1wMTMgLQotCSAgICBNVUxUSVBMWSh6MSwgRklYKDIuMDIwMDgyMzAwKSk7ICAgICAgICAgIC8qIGM3K2M1K2MzLWMxICovCi0gICAgdG1wMTQgPSBNVUxUSVBMWSh6MiArIHozLCAtIEZJWCgwLjMzODQ0MzQ1OCkpOyAgIC8qIC1jMTEgKi8KLSAgICB0bXAxMSArPSB0bXAxNCArIE1VTFRJUExZKHoyLCBGSVgoMC44MzcyMjM1NjQpKTsgLyogYzUrYzkrYzExLWMzICovCi0gICAgdG1wMTIgKz0gdG1wMTQgLSBNVUxUSVBMWSh6MywgRklYKDEuNTcyMTE2MDI3KSk7IC8qIGMxK2M1LWM5LWMxMSAqLwotICAgIHRtcDE0ID0gTVVMVElQTFkoejIgKyB6NCwgLSBGSVgoMS4xNjM4NzQ5NDUpKTsgICAvKiAtYzUgKi8KLSAgICB0bXAxMSArPSB0bXAxNDsKLSAgICB0bXAxMyArPSB0bXAxNCArIE1VTFRJUExZKHo0LCBGSVgoMi4yMDU2MDgzNTIpKTsgLyogYzMrYzUrYzktYzcgKi8KLSAgICB0bXAxNCA9IE1VTFRJUExZKHozICsgejQsIC0gRklYKDAuNjU3MjE3ODEzKSk7ICAgLyogLWM5ICovCi0gICAgdG1wMTIgKz0gdG1wMTQ7Ci0gICAgdG1wMTMgKz0gdG1wMTQ7Ci0gICAgdG1wMTUgPSBNVUxUSVBMWSh0bXAxNSwgRklYKDAuMzM4NDQzNDU4KSk7ICAgICAgIC8qIGMxMSAqLwotICAgIHRtcDE0ID0gdG1wMTUgKyBNVUxUSVBMWSh6MSwgRklYKDAuMzE4Nzc0MzU1KSkgLSAvKiBjOS1jMTEgKi8KLQkgICAgTVVMVElQTFkoejIsIEZJWCgwLjQ2NjEwNTI5NikpOyAgICAgICAgICAvKiBjMS1jNyAqLwotICAgIHoxICAgID0gTVVMVElQTFkoejMgLSB6MiwgRklYKDAuOTM3Nzk3MDU3KSk7ICAgICAvKiBjNyAqLwotICAgIHRtcDE0ICs9IHoxOwotICAgIHRtcDE1ICs9IHoxICsgTVVMVElQTFkoejMsIEZJWCgwLjM4NDUxNTU5NSkpIC0gICAvKiBjMy1jNyAqLwotCSAgICAgTVVMVElQTFkoejQsIEZJWCgxLjc0MjM0NTgxMSkpOyAgICAgICAgIC8qIGMxK2MxMSAqLwotCi0gICAgLyogRmluYWwgb3V0cHV0IHN0YWdlICovCi0KLSAgICB3c3B0cls4KjBdICA9IChpbnQpIFJJR0hUX1NISUZUKHRtcDIwICsgdG1wMTAsIENPTlNUX0JJVFMtUEFTUzFfQklUUyk7Ci0gICAgd3NwdHJbOCoxMl0gPSAoaW50KSBSSUdIVF9TSElGVCh0bXAyMCAtIHRtcDEwLCBDT05TVF9CSVRTLVBBU1MxX0JJVFMpOwotICAgIHdzcHRyWzgqMV0gID0gKGludCkgUklHSFRfU0hJRlQodG1wMjEgKyB0bXAxMSwgQ09OU1RfQklUUy1QQVNTMV9CSVRTKTsKLSAgICB3c3B0cls4KjExXSA9IChpbnQpIFJJR0hUX1NISUZUKHRtcDIxIC0gdG1wMTEsIENPTlNUX0JJVFMtUEFTUzFfQklUUyk7Ci0gICAgd3NwdHJbOCoyXSAgPSAoaW50KSBSSUdIVF9TSElGVCh0bXAyMiArIHRtcDEyLCBDT05TVF9CSVRTLVBBU1MxX0JJVFMpOwotICAgIHdzcHRyWzgqMTBdID0gKGludCkgUklHSFRfU0hJRlQodG1wMjIgLSB0bXAxMiwgQ09OU1RfQklUUy1QQVNTMV9CSVRTKTsKLSAgICB3c3B0cls4KjNdICA9IChpbnQpIFJJR0hUX1NISUZUKHRtcDIzICsgdG1wMTMsIENPTlNUX0JJVFMtUEFTUzFfQklUUyk7Ci0gICAgd3NwdHJbOCo5XSAgPSAoaW50KSBSSUdIVF9TSElGVCh0bXAyMyAtIHRtcDEzLCBDT05TVF9CSVRTLVBBU1MxX0JJVFMpOwotICAgIHdzcHRyWzgqNF0gID0gKGludCkgUklHSFRfU0hJRlQodG1wMjQgKyB0bXAxNCwgQ09OU1RfQklUUy1QQVNTMV9CSVRTKTsKLSAgICB3c3B0cls4KjhdICA9IChpbnQpIFJJR0hUX1NISUZUKHRtcDI0IC0gdG1wMTQsIENPTlNUX0JJVFMtUEFTUzFfQklUUyk7Ci0gICAgd3NwdHJbOCo1XSAgPSAoaW50KSBSSUdIVF9TSElGVCh0bXAyNSArIHRtcDE1LCBDT05TVF9CSVRTLVBBU1MxX0JJVFMpOwotICAgIHdzcHRyWzgqN10gID0gKGludCkgUklHSFRfU0hJRlQodG1wMjUgLSB0bXAxNSwgQ09OU1RfQklUUy1QQVNTMV9CSVRTKTsKLSAgICB3c3B0cls4KjZdICA9IChpbnQpIFJJR0hUX1NISUZUKHRtcDI2LCBDT05TVF9CSVRTLVBBU1MxX0JJVFMpOwotICB9Ci0KLSAgLyogUGFzcyAyOiBwcm9jZXNzIDEzIHJvd3MgZnJvbSB3b3JrIGFycmF5LCBzdG9yZSBpbnRvIG91dHB1dCBhcnJheS4gKi8KLQotICB3c3B0ciA9IHdvcmtzcGFjZTsKLSAgZm9yIChjdHIgPSAwOyBjdHIgPCAxMzsgY3RyKyspIHsKLSAgICBvdXRwdHIgPSBvdXRwdXRfYnVmW2N0cl0gKyBvdXRwdXRfY29sOwotCi0gICAgLyogRXZlbiBwYXJ0ICovCi0KLSAgICAvKiBBZGQgZnVkZ2UgZmFjdG9yIGhlcmUgZm9yIGZpbmFsIGRlc2NhbGUuICovCi0gICAgejEgPSAoSU5UMzIpIHdzcHRyWzBdICsgKE9ORSA8PCAoUEFTUzFfQklUUysyKSk7Ci0gICAgejEgPDw9IENPTlNUX0JJVFM7Ci0KLSAgICB6MiA9IChJTlQzMikgd3NwdHJbMl07Ci0gICAgejMgPSAoSU5UMzIpIHdzcHRyWzRdOwotICAgIHo0ID0gKElOVDMyKSB3c3B0cls2XTsKLQotICAgIHRtcDEwID0gejMgKyB6NDsKLSAgICB0bXAxMSA9IHozIC0gejQ7Ci0KLSAgICB0bXAxMiA9IE1VTFRJUExZKHRtcDEwLCBGSVgoMS4xNTUzODg5ODYpKTsgICAgICAgICAgICAgICAgLyogKGM0K2M2KS8yICovCi0gICAgdG1wMTMgPSBNVUxUSVBMWSh0bXAxMSwgRklYKDAuMDk2ODM0OTM0KSkgKyB6MTsgICAgICAgICAgIC8qIChjNC1jNikvMiAqLwotCi0gICAgdG1wMjAgPSBNVUxUSVBMWSh6MiwgRklYKDEuMzczMTE5MDg2KSkgKyB0bXAxMiArIHRtcDEzOyAgIC8qIGMyICovCi0gICAgdG1wMjIgPSBNVUxUSVBMWSh6MiwgRklYKDAuNTAxNDg3MDQxKSkgLSB0bXAxMiArIHRtcDEzOyAgIC8qIGMxMCAqLwotCi0gICAgdG1wMTIgPSBNVUxUSVBMWSh0bXAxMCwgRklYKDAuMzE2NDUwMTMxKSk7ICAgICAgICAgICAgICAgIC8qIChjOC1jMTIpLzIgKi8KLSAgICB0bXAxMyA9IE1VTFRJUExZKHRtcDExLCBGSVgoMC40ODY5MTQ3MzkpKSArIHoxOyAgICAgICAgICAgLyogKGM4K2MxMikvMiAqLwotCi0gICAgdG1wMjEgPSBNVUxUSVBMWSh6MiwgRklYKDEuMDU4NTU0MDUyKSkgLSB0bXAxMiArIHRtcDEzOyAgIC8qIGM2ICovCi0gICAgdG1wMjUgPSBNVUxUSVBMWSh6MiwgLSBGSVgoMS4yNTIyMjM5MjApKSArIHRtcDEyICsgdG1wMTM7IC8qIGM0ICovCi0KLSAgICB0bXAxMiA9IE1VTFRJUExZKHRtcDEwLCBGSVgoMC40MzU4MTYwMjMpKTsgICAgICAgICAgICAgICAgLyogKGMyLWMxMCkvMiAqLwotICAgIHRtcDEzID0gTVVMVElQTFkodG1wMTEsIEZJWCgwLjkzNzMwMzA2NCkpIC0gejE7ICAgICAgICAgICAvKiAoYzIrYzEwKS8yICovCi0KLSAgICB0bXAyMyA9IE1VTFRJUExZKHoyLCAtIEZJWCgwLjE3MDQ2NDYwOCkpIC0gdG1wMTIgLSB0bXAxMzsgLyogYzEyICovCi0gICAgdG1wMjQgPSBNVUxUSVBMWSh6MiwgLSBGSVgoMC44MDMzNjQ4NjkpKSArIHRtcDEyIC0gdG1wMTM7IC8qIGM4ICovCi0KLSAgICB0bXAyNiA9IE1VTFRJUExZKHRtcDExIC0gejIsIEZJWCgxLjQxNDIxMzU2MikpICsgejE7ICAgICAgLyogYzAgKi8KLQotICAgIC8qIE9kZCBwYXJ0ICovCi0KLSAgICB6MSA9IChJTlQzMikgd3NwdHJbMV07Ci0gICAgejIgPSAoSU5UMzIpIHdzcHRyWzNdOwotICAgIHozID0gKElOVDMyKSB3c3B0cls1XTsKLSAgICB6NCA9IChJTlQzMikgd3NwdHJbN107Ci0KLSAgICB0bXAxMSA9IE1VTFRJUExZKHoxICsgejIsIEZJWCgxLjMyMjMxMjY1MSkpOyAgICAgLyogYzMgKi8KLSAgICB0bXAxMiA9IE1VTFRJUExZKHoxICsgejMsIEZJWCgxLjE2Mzg3NDk0NSkpOyAgICAgLyogYzUgKi8KLSAgICB0bXAxNSA9IHoxICsgejQ7Ci0gICAgdG1wMTMgPSBNVUxUSVBMWSh0bXAxNSwgRklYKDAuOTM3Nzk3MDU3KSk7ICAgICAgIC8qIGM3ICovCi0gICAgdG1wMTAgPSB0bXAxMSArIHRtcDEyICsgdG1wMTMgLQotCSAgICBNVUxUSVBMWSh6MSwgRklYKDIuMDIwMDgyMzAwKSk7ICAgICAgICAgIC8qIGM3K2M1K2MzLWMxICovCi0gICAgdG1wMTQgPSBNVUxUSVBMWSh6MiArIHozLCAtIEZJWCgwLjMzODQ0MzQ1OCkpOyAgIC8qIC1jMTEgKi8KLSAgICB0bXAxMSArPSB0bXAxNCArIE1VTFRJUExZKHoyLCBGSVgoMC44MzcyMjM1NjQpKTsgLyogYzUrYzkrYzExLWMzICovCi0gICAgdG1wMTIgKz0gdG1wMTQgLSBNVUxUSVBMWSh6MywgRklYKDEuNTcyMTE2MDI3KSk7IC8qIGMxK2M1LWM5LWMxMSAqLwotICAgIHRtcDE0ID0gTVVMVElQTFkoejIgKyB6NCwgLSBGSVgoMS4xNjM4NzQ5NDUpKTsgICAvKiAtYzUgKi8KLSAgICB0bXAxMSArPSB0bXAxNDsKLSAgICB0bXAxMyArPSB0bXAxNCArIE1VTFRJUExZKHo0LCBGSVgoMi4yMDU2MDgzNTIpKTsgLyogYzMrYzUrYzktYzcgKi8KLSAgICB0bXAxNCA9IE1VTFRJUExZKHozICsgejQsIC0gRklYKDAuNjU3MjE3ODEzKSk7ICAgLyogLWM5ICovCi0gICAgdG1wMTIgKz0gdG1wMTQ7Ci0gICAgdG1wMTMgKz0gdG1wMTQ7Ci0gICAgdG1wMTUgPSBNVUxUSVBMWSh0bXAxNSwgRklYKDAuMzM4NDQzNDU4KSk7ICAgICAgIC8qIGMxMSAqLwotICAgIHRtcDE0ID0gdG1wMTUgKyBNVUxUSVBMWSh6MSwgRklYKDAuMzE4Nzc0MzU1KSkgLSAvKiBjOS1jMTEgKi8KLQkgICAgTVVMVElQTFkoejIsIEZJWCgwLjQ2NjEwNTI5NikpOyAgICAgICAgICAvKiBjMS1jNyAqLwotICAgIHoxICAgID0gTVVMVElQTFkoejMgLSB6MiwgRklYKDAuOTM3Nzk3MDU3KSk7ICAgICAvKiBjNyAqLwotICAgIHRtcDE0ICs9IHoxOwotICAgIHRtcDE1ICs9IHoxICsgTVVMVElQTFkoejMsIEZJWCgwLjM4NDUxNTU5NSkpIC0gICAvKiBjMy1jNyAqLwotCSAgICAgTVVMVElQTFkoejQsIEZJWCgxLjc0MjM0NTgxMSkpOyAgICAgICAgIC8qIGMxK2MxMSAqLwotCi0gICAgLyogRmluYWwgb3V0cHV0IHN0YWdlICovCi0KLSAgICBvdXRwdHJbMF0gID0gcmFuZ2VfbGltaXRbKGludCkgUklHSFRfU0hJRlQodG1wMjAgKyB0bXAxMCwKLQkJCQkJICAgICAgIENPTlNUX0JJVFMrUEFTUzFfQklUUyszKQotCQkJICAgICAmIFJBTkdFX01BU0tdOwotICAgIG91dHB0clsxMl0gPSByYW5nZV9saW1pdFsoaW50KSBSSUdIVF9TSElGVCh0bXAyMCAtIHRtcDEwLAotCQkJCQkgICAgICAgQ09OU1RfQklUUytQQVNTMV9CSVRTKzMpCi0JCQkgICAgICYgUkFOR0VfTUFTS107Ci0gICAgb3V0cHRyWzFdICA9IHJhbmdlX2xpbWl0WyhpbnQpIFJJR0hUX1NISUZUKHRtcDIxICsgdG1wMTEsCi0JCQkJCSAgICAgICBDT05TVF9CSVRTK1BBU1MxX0JJVFMrMykKLQkJCSAgICAgJiBSQU5HRV9NQVNLXTsKLSAgICBvdXRwdHJbMTFdID0gcmFuZ2VfbGltaXRbKGludCkgUklHSFRfU0hJRlQodG1wMjEgLSB0bXAxMSwKLQkJCQkJICAgICAgIENPTlNUX0JJVFMrUEFTUzFfQklUUyszKQotCQkJICAgICAmIFJBTkdFX01BU0tdOwotICAgIG91dHB0clsyXSAgPSByYW5nZV9saW1pdFsoaW50KSBSSUdIVF9TSElGVCh0bXAyMiArIHRtcDEyLAotCQkJCQkgICAgICAgQ09OU1RfQklUUytQQVNTMV9CSVRTKzMpCi0JCQkgICAgICYgUkFOR0VfTUFTS107Ci0gICAgb3V0cHRyWzEwXSA9IHJhbmdlX2xpbWl0WyhpbnQpIFJJR0hUX1NISUZUKHRtcDIyIC0gdG1wMTIsCi0JCQkJCSAgICAgICBDT05TVF9CSVRTK1BBU1MxX0JJVFMrMykKLQkJCSAgICAgJiBSQU5HRV9NQVNLXTsKLSAgICBvdXRwdHJbM10gID0gcmFuZ2VfbGltaXRbKGludCkgUklHSFRfU0hJRlQodG1wMjMgKyB0bXAxMywKLQkJCQkJICAgICAgIENPTlNUX0JJVFMrUEFTUzFfQklUUyszKQotCQkJICAgICAmIFJBTkdFX01BU0tdOwotICAgIG91dHB0cls5XSAgPSByYW5nZV9saW1pdFsoaW50KSBSSUdIVF9TSElGVCh0bXAyMyAtIHRtcDEzLAotCQkJCQkgICAgICAgQ09OU1RfQklUUytQQVNTMV9CSVRTKzMpCi0JCQkgICAgICYgUkFOR0VfTUFTS107Ci0gICAgb3V0cHRyWzRdICA9IHJhbmdlX2xpbWl0WyhpbnQpIFJJR0hUX1NISUZUKHRtcDI0ICsgdG1wMTQsCi0JCQkJCSAgICAgICBDT05TVF9CSVRTK1BBU1MxX0JJVFMrMykKLQkJCSAgICAgJiBSQU5HRV9NQVNLXTsKLSAgICBvdXRwdHJbOF0gID0gcmFuZ2VfbGltaXRbKGludCkgUklHSFRfU0hJRlQodG1wMjQgLSB0bXAxNCwKLQkJCQkJICAgICAgIENPTlNUX0JJVFMrUEFTUzFfQklUUyszKQotCQkJICAgICAmIFJBTkdFX01BU0tdOwotICAgIG91dHB0cls1XSAgPSByYW5nZV9saW1pdFsoaW50KSBSSUdIVF9TSElGVCh0bXAyNSArIHRtcDE1LAotCQkJCQkgICAgICAgQ09OU1RfQklUUytQQVNTMV9CSVRTKzMpCi0JCQkgICAgICYgUkFOR0VfTUFTS107Ci0gICAgb3V0cHRyWzddICA9IHJhbmdlX2xpbWl0WyhpbnQpIFJJR0hUX1NISUZUKHRtcDI1IC0gdG1wMTUsCi0JCQkJCSAgICAgICBDT05TVF9CSVRTK1BBU1MxX0JJVFMrMykKLQkJCSAgICAgJiBSQU5HRV9NQVNLXTsKLSAgICBvdXRwdHJbNl0gID0gcmFuZ2VfbGltaXRbKGludCkgUklHSFRfU0hJRlQodG1wMjYsCi0JCQkJCSAgICAgICBDT05TVF9CSVRTK1BBU1MxX0JJVFMrMykKLQkJCSAgICAgJiBSQU5HRV9NQVNLXTsKLQotICAgIHdzcHRyICs9IDg7CQkvKiBhZHZhbmNlIHBvaW50ZXIgdG8gbmV4dCByb3cgKi8KLSAgfQotfQotCi0KLS8qCi0gKiBQZXJmb3JtIGRlcXVhbnRpemF0aW9uIGFuZCBpbnZlcnNlIERDVCBvbiBvbmUgYmxvY2sgb2YgY29lZmZpY2llbnRzLAotICogcHJvZHVjaW5nIGEgMTR4MTQgb3V0cHV0IGJsb2NrLgotICoKLSAqIE9wdGltaXplZCBhbGdvcml0aG0gd2l0aCAyMCBtdWx0aXBsaWNhdGlvbnMgaW4gdGhlIDEtRCBrZXJuZWwuCi0gKiBjSyByZXByZXNlbnRzIHNxcnQoMikgKiBjb3MoSypwaS8yOCkuCi0gKi8KLQotR0xPQkFMKHZvaWQpCi1qcGVnX2lkY3RfMTR4MTQgKGpfZGVjb21wcmVzc19wdHIgY2luZm8sIGpwZWdfY29tcG9uZW50X2luZm8gKiBjb21wcHRyLAotCQkgSkNPRUZQVFIgY29lZl9ibG9jaywKLQkJIEpTQU1QQVJSQVkgb3V0cHV0X2J1ZiwgSkRJTUVOU0lPTiBvdXRwdXRfY29sKQotewotICBJTlQzMiB0bXAxMCwgdG1wMTEsIHRtcDEyLCB0bXAxMywgdG1wMTQsIHRtcDE1LCB0bXAxNjsKLSAgSU5UMzIgdG1wMjAsIHRtcDIxLCB0bXAyMiwgdG1wMjMsIHRtcDI0LCB0bXAyNSwgdG1wMjY7Ci0gIElOVDMyIHoxLCB6MiwgejMsIHo0OwotICBKQ09FRlBUUiBpbnB0cjsKLSAgSVNMT1dfTVVMVF9UWVBFICogcXVhbnRwdHI7Ci0gIGludCAqIHdzcHRyOwotICBKU0FNUFJPVyBvdXRwdHI7Ci0gIEpTQU1QTEUgKnJhbmdlX2xpbWl0ID0gSURDVF9yYW5nZV9saW1pdChjaW5mbyk7Ci0gIGludCBjdHI7Ci0gIGludCB3b3Jrc3BhY2VbOCoxNF07CS8qIGJ1ZmZlcnMgZGF0YSBiZXR3ZWVuIHBhc3NlcyAqLwotICBTSElGVF9URU1QUwotCi0gIC8qIFBhc3MgMTogcHJvY2VzcyBjb2x1bW5zIGZyb20gaW5wdXQsIHN0b3JlIGludG8gd29yayBhcnJheS4gKi8KLQotICBpbnB0ciA9IGNvZWZfYmxvY2s7Ci0gIHF1YW50cHRyID0gKElTTE9XX01VTFRfVFlQRSAqKSBjb21wcHRyLT5kY3RfdGFibGU7Ci0gIHdzcHRyID0gd29ya3NwYWNlOwotICBmb3IgKGN0ciA9IDA7IGN0ciA8IDg7IGN0cisrLCBpbnB0cisrLCBxdWFudHB0cisrLCB3c3B0cisrKSB7Ci0gICAgLyogRXZlbiBwYXJ0ICovCi0KLSAgICB6MSA9IERFUVVBTlRJWkUoaW5wdHJbRENUU0laRSowXSwgcXVhbnRwdHJbRENUU0laRSowXSk7Ci0gICAgejEgPDw9IENPTlNUX0JJVFM7Ci0gICAgLyogQWRkIGZ1ZGdlIGZhY3RvciBoZXJlIGZvciBmaW5hbCBkZXNjYWxlLiAqLwotICAgIHoxICs9IE9ORSA8PCAoQ09OU1RfQklUUy1QQVNTMV9CSVRTLTEpOwotICAgIHo0ID0gREVRVUFOVElaRShpbnB0cltEQ1RTSVpFKjRdLCBxdWFudHB0cltEQ1RTSVpFKjRdKTsKLSAgICB6MiA9IE1VTFRJUExZKHo0LCBGSVgoMS4yNzQxNjIzOTIpKTsgICAgICAgICAvKiBjNCAqLwotICAgIHozID0gTVVMVElQTFkoejQsIEZJWCgwLjMxNDY5MjEyMykpOyAgICAgICAgIC8qIGMxMiAqLwotICAgIHo0ID0gTVVMVElQTFkoejQsIEZJWCgwLjg4MTc0NzczNCkpOyAgICAgICAgIC8qIGM4ICovCi0KLSAgICB0bXAxMCA9IHoxICsgejI7Ci0gICAgdG1wMTEgPSB6MSArIHozOwotICAgIHRtcDEyID0gejEgLSB6NDsKLQotICAgIHRtcDIzID0gUklHSFRfU0hJRlQoejEgLSAoKHoyICsgejMgLSB6NCkgPDwgMSksIC8qIGMwID0gKGM0K2MxMi1jOCkqMiAqLwotCQkJQ09OU1RfQklUUy1QQVNTMV9CSVRTKTsKLQotICAgIHoxID0gREVRVUFOVElaRShpbnB0cltEQ1RTSVpFKjJdLCBxdWFudHB0cltEQ1RTSVpFKjJdKTsKLSAgICB6MiA9IERFUVVBTlRJWkUoaW5wdHJbRENUU0laRSo2XSwgcXVhbnRwdHJbRENUU0laRSo2XSk7Ci0KLSAgICB6MyA9IE1VTFRJUExZKHoxICsgejIsIEZJWCgxLjEwNTY3NjY4NikpOyAgICAvKiBjNiAqLwotCi0gICAgdG1wMTMgPSB6MyArIE1VTFRJUExZKHoxLCBGSVgoMC4yNzMwNzk1OTApKTsgLyogYzItYzYgKi8KLSAgICB0bXAxNCA9IHozIC0gTVVMVElQTFkoejIsIEZJWCgxLjcxOTI4MDk1NCkpOyAvKiBjNitjMTAgKi8KLSAgICB0bXAxNSA9IE1VTFRJUExZKHoxLCBGSVgoMC42MTM2MDQyNjgpKSAtICAgICAvKiBjMTAgKi8KLQkgICAgTVVMVElQTFkoejIsIEZJWCgxLjM3ODc1NjI3NikpOyAgICAgIC8qIGMyICovCi0KLSAgICB0bXAyMCA9IHRtcDEwICsgdG1wMTM7Ci0gICAgdG1wMjYgPSB0bXAxMCAtIHRtcDEzOwotICAgIHRtcDIxID0gdG1wMTEgKyB0bXAxNDsKLSAgICB0bXAyNSA9IHRtcDExIC0gdG1wMTQ7Ci0gICAgdG1wMjIgPSB0bXAxMiArIHRtcDE1OwotICAgIHRtcDI0ID0gdG1wMTIgLSB0bXAxNTsKLQotICAgIC8qIE9kZCBwYXJ0ICovCi0KLSAgICB6MSA9IERFUVVBTlRJWkUoaW5wdHJbRENUU0laRSoxXSwgcXVhbnRwdHJbRENUU0laRSoxXSk7Ci0gICAgejIgPSBERVFVQU5USVpFKGlucHRyW0RDVFNJWkUqM10sIHF1YW50cHRyW0RDVFNJWkUqM10pOwotICAgIHozID0gREVRVUFOVElaRShpbnB0cltEQ1RTSVpFKjVdLCBxdWFudHB0cltEQ1RTSVpFKjVdKTsKLSAgICB6NCA9IERFUVVBTlRJWkUoaW5wdHJbRENUU0laRSo3XSwgcXVhbnRwdHJbRENUU0laRSo3XSk7Ci0gICAgdG1wMTMgPSB6NCA8PCBDT05TVF9CSVRTOwotCi0gICAgdG1wMTQgPSB6MSArIHozOwotICAgIHRtcDExID0gTVVMVElQTFkoejEgKyB6MiwgRklYKDEuMzM0ODUyNjA3KSk7ICAgICAgICAgICAvKiBjMyAqLwotICAgIHRtcDEyID0gTVVMVElQTFkodG1wMTQsIEZJWCgxLjE5NzQ0ODg0NikpOyAgICAgICAgICAgICAvKiBjNSAqLwotICAgIHRtcDEwID0gdG1wMTEgKyB0bXAxMiArIHRtcDEzIC0gTVVMVElQTFkoejEsIEZJWCgxLjEyNjk4MDE2OSkpOyAvKiBjMytjNS1jMSAqLwotICAgIHRtcDE0ID0gTVVMVElQTFkodG1wMTQsIEZJWCgwLjc1MjQwNjk3OCkpOyAgICAgICAgICAgICAvKiBjOSAqLwotICAgIHRtcDE2ID0gdG1wMTQgLSBNVUxUSVBMWSh6MSwgRklYKDEuMDYxMTUwNDI2KSk7ICAgICAgICAvKiBjOStjMTEtYzEzICovCi0gICAgejEgICAgLT0gejI7Ci0gICAgdG1wMTUgPSBNVUxUSVBMWSh6MSwgRklYKDAuNDY3MDg1MTI5KSkgLSB0bXAxMzsgICAgICAgIC8qIGMxMSAqLwotICAgIHRtcDE2ICs9IHRtcDE1OwotICAgIHoxICAgICs9IHo0OwotICAgIHo0ICAgID0gTVVMVElQTFkoejIgKyB6MywgLSBGSVgoMC4xNTgzNDE2ODEpKSAtIHRtcDEzOyAvKiAtYzEzICovCi0gICAgdG1wMTEgKz0gejQgLSBNVUxUSVBMWSh6MiwgRklYKDAuNDI0MTAzOTQ4KSk7ICAgICAgICAgIC8qIGMzLWM5LWMxMyAqLwotICAgIHRtcDEyICs9IHo0IC0gTVVMVElQTFkoejMsIEZJWCgyLjM3Mzk1OTc3MykpOyAgICAgICAgICAvKiBjMytjNS1jMTMgKi8KLSAgICB6NCAgICA9IE1VTFRJUExZKHozIC0gejIsIEZJWCgxLjQwNTMyMTI4NCkpOyAgICAgICAgICAgLyogYzEgKi8KLSAgICB0bXAxNCArPSB6NCArIHRtcDEzIC0gTVVMVElQTFkoejMsIEZJWCgxLjY5MDY0MzEzMzQpKTsgLyogYzErYzktYzExICovCi0gICAgdG1wMTUgKz0gejQgKyBNVUxUSVBMWSh6MiwgRklYKDAuNjc0OTU3NTY3KSk7ICAgICAgICAgIC8qIGMxK2MxMS1jNSAqLwotCi0gICAgdG1wMTMgPSAoejEgLSB6MykgPDwgUEFTUzFfQklUUzsKLQotICAgIC8qIEZpbmFsIG91dHB1dCBzdGFnZSAqLwotCi0gICAgd3NwdHJbOCowXSAgPSAoaW50KSBSSUdIVF9TSElGVCh0bXAyMCArIHRtcDEwLCBDT05TVF9CSVRTLVBBU1MxX0JJVFMpOwotICAgIHdzcHRyWzgqMTNdID0gKGludCkgUklHSFRfU0hJRlQodG1wMjAgLSB0bXAxMCwgQ09OU1RfQklUUy1QQVNTMV9CSVRTKTsKLSAgICB3c3B0cls4KjFdICA9IChpbnQpIFJJR0hUX1NISUZUKHRtcDIxICsgdG1wMTEsIENPTlNUX0JJVFMtUEFTUzFfQklUUyk7Ci0gICAgd3NwdHJbOCoxMl0gPSAoaW50KSBSSUdIVF9TSElGVCh0bXAyMSAtIHRtcDExLCBDT05TVF9CSVRTLVBBU1MxX0JJVFMpOwotICAgIHdzcHRyWzgqMl0gID0gKGludCkgUklHSFRfU0hJRlQodG1wMjIgKyB0bXAxMiwgQ09OU1RfQklUUy1QQVNTMV9CSVRTKTsKLSAgICB3c3B0cls4KjExXSA9IChpbnQpIFJJR0hUX1NISUZUKHRtcDIyIC0gdG1wMTIsIENPTlNUX0JJVFMtUEFTUzFfQklUUyk7Ci0gICAgd3NwdHJbOCozXSAgPSAoaW50KSAodG1wMjMgKyB0bXAxMyk7Ci0gICAgd3NwdHJbOCoxMF0gPSAoaW50KSAodG1wMjMgLSB0bXAxMyk7Ci0gICAgd3NwdHJbOCo0XSAgPSAoaW50KSBSSUdIVF9TSElGVCh0bXAyNCArIHRtcDE0LCBDT05TVF9CSVRTLVBBU1MxX0JJVFMpOwotICAgIHdzcHRyWzgqOV0gID0gKGludCkgUklHSFRfU0hJRlQodG1wMjQgLSB0bXAxNCwgQ09OU1RfQklUUy1QQVNTMV9CSVRTKTsKLSAgICB3c3B0cls4KjVdICA9IChpbnQpIFJJR0hUX1NISUZUKHRtcDI1ICsgdG1wMTUsIENPTlNUX0JJVFMtUEFTUzFfQklUUyk7Ci0gICAgd3NwdHJbOCo4XSAgPSAoaW50KSBSSUdIVF9TSElGVCh0bXAyNSAtIHRtcDE1LCBDT05TVF9CSVRTLVBBU1MxX0JJVFMpOwotICAgIHdzcHRyWzgqNl0gID0gKGludCkgUklHSFRfU0hJRlQodG1wMjYgKyB0bXAxNiwgQ09OU1RfQklUUy1QQVNTMV9CSVRTKTsKLSAgICB3c3B0cls4KjddICA9IChpbnQpIFJJR0hUX1NISUZUKHRtcDI2IC0gdG1wMTYsIENPTlNUX0JJVFMtUEFTUzFfQklUUyk7Ci0gIH0KLQotICAvKiBQYXNzIDI6IHByb2Nlc3MgMTQgcm93cyBmcm9tIHdvcmsgYXJyYXksIHN0b3JlIGludG8gb3V0cHV0IGFycmF5LiAqLwotCi0gIHdzcHRyID0gd29ya3NwYWNlOwotICBmb3IgKGN0ciA9IDA7IGN0ciA8IDE0OyBjdHIrKykgewotICAgIG91dHB0ciA9IG91dHB1dF9idWZbY3RyXSArIG91dHB1dF9jb2w7Ci0KLSAgICAvKiBFdmVuIHBhcnQgKi8KLQotICAgIC8qIEFkZCBmdWRnZSBmYWN0b3IgaGVyZSBmb3IgZmluYWwgZGVzY2FsZS4gKi8KLSAgICB6MSA9IChJTlQzMikgd3NwdHJbMF0gKyAoT05FIDw8IChQQVNTMV9CSVRTKzIpKTsKLSAgICB6MSA8PD0gQ09OU1RfQklUUzsKLSAgICB6NCA9IChJTlQzMikgd3NwdHJbNF07Ci0gICAgejIgPSBNVUxUSVBMWSh6NCwgRklYKDEuMjc0MTYyMzkyKSk7ICAgICAgICAgLyogYzQgKi8KLSAgICB6MyA9IE1VTFRJUExZKHo0LCBGSVgoMC4zMTQ2OTIxMjMpKTsgICAgICAgICAvKiBjMTIgKi8KLSAgICB6NCA9IE1VTFRJUExZKHo0LCBGSVgoMC44ODE3NDc3MzQpKTsgICAgICAgICAvKiBjOCAqLwotCi0gICAgdG1wMTAgPSB6MSArIHoyOwotICAgIHRtcDExID0gejEgKyB6MzsKLSAgICB0bXAxMiA9IHoxIC0gejQ7Ci0KLSAgICB0bXAyMyA9IHoxIC0gKCh6MiArIHozIC0gejQpIDw8IDEpOyAgICAgICAgICAvKiBjMCA9IChjNCtjMTItYzgpKjIgKi8KLQotICAgIHoxID0gKElOVDMyKSB3c3B0clsyXTsKLSAgICB6MiA9IChJTlQzMikgd3NwdHJbNl07Ci0KLSAgICB6MyA9IE1VTFRJUExZKHoxICsgejIsIEZJWCgxLjEwNTY3NjY4NikpOyAgICAvKiBjNiAqLwotCi0gICAgdG1wMTMgPSB6MyArIE1VTFRJUExZKHoxLCBGSVgoMC4yNzMwNzk1OTApKTsgLyogYzItYzYgKi8KLSAgICB0bXAxNCA9IHozIC0gTVVMVElQTFkoejIsIEZJWCgxLjcxOTI4MDk1NCkpOyAvKiBjNitjMTAgKi8KLSAgICB0bXAxNSA9IE1VTFRJUExZKHoxLCBGSVgoMC42MTM2MDQyNjgpKSAtICAgICAvKiBjMTAgKi8KLQkgICAgTVVMVElQTFkoejIsIEZJWCgxLjM3ODc1NjI3NikpOyAgICAgIC8qIGMyICovCi0KLSAgICB0bXAyMCA9IHRtcDEwICsgdG1wMTM7Ci0gICAgdG1wMjYgPSB0bXAxMCAtIHRtcDEzOwotICAgIHRtcDIxID0gdG1wMTEgKyB0bXAxNDsKLSAgICB0bXAyNSA9IHRtcDExIC0gdG1wMTQ7Ci0gICAgdG1wMjIgPSB0bXAxMiArIHRtcDE1OwotICAgIHRtcDI0ID0gdG1wMTIgLSB0bXAxNTsKLQotICAgIC8qIE9kZCBwYXJ0ICovCi0KLSAgICB6MSA9IChJTlQzMikgd3NwdHJbMV07Ci0gICAgejIgPSAoSU5UMzIpIHdzcHRyWzNdOwotICAgIHozID0gKElOVDMyKSB3c3B0cls1XTsKLSAgICB6NCA9IChJTlQzMikgd3NwdHJbN107Ci0gICAgejQgPDw9IENPTlNUX0JJVFM7Ci0KLSAgICB0bXAxNCA9IHoxICsgejM7Ci0gICAgdG1wMTEgPSBNVUxUSVBMWSh6MSArIHoyLCBGSVgoMS4zMzQ4NTI2MDcpKTsgICAgICAgICAgIC8qIGMzICovCi0gICAgdG1wMTIgPSBNVUxUSVBMWSh0bXAxNCwgRklYKDEuMTk3NDQ4ODQ2KSk7ICAgICAgICAgICAgIC8qIGM1ICovCi0gICAgdG1wMTAgPSB0bXAxMSArIHRtcDEyICsgejQgLSBNVUxUSVBMWSh6MSwgRklYKDEuMTI2OTgwMTY5KSk7IC8qIGMzK2M1LWMxICovCi0gICAgdG1wMTQgPSBNVUxUSVBMWSh0bXAxNCwgRklYKDAuNzUyNDA2OTc4KSk7ICAgICAgICAgICAgIC8qIGM5ICovCi0gICAgdG1wMTYgPSB0bXAxNCAtIE1VTFRJUExZKHoxLCBGSVgoMS4wNjExNTA0MjYpKTsgICAgICAgIC8qIGM5K2MxMS1jMTMgKi8KLSAgICB6MSAgICAtPSB6MjsKLSAgICB0bXAxNSA9IE1VTFRJUExZKHoxLCBGSVgoMC40NjcwODUxMjkpKSAtIHo0OyAgICAgICAgICAgLyogYzExICovCi0gICAgdG1wMTYgKz0gdG1wMTU7Ci0gICAgdG1wMTMgPSBNVUxUSVBMWSh6MiArIHozLCAtIEZJWCgwLjE1ODM0MTY4MSkpIC0gejQ7ICAgIC8qIC1jMTMgKi8KLSAgICB0bXAxMSArPSB0bXAxMyAtIE1VTFRJUExZKHoyLCBGSVgoMC40MjQxMDM5NDgpKTsgICAgICAgLyogYzMtYzktYzEzICovCi0gICAgdG1wMTIgKz0gdG1wMTMgLSBNVUxUSVBMWSh6MywgRklYKDIuMzczOTU5NzczKSk7ICAgICAgIC8qIGMzK2M1LWMxMyAqLwotICAgIHRtcDEzID0gTVVMVElQTFkoejMgLSB6MiwgRklYKDEuNDA1MzIxMjg0KSk7ICAgICAgICAgICAvKiBjMSAqLwotICAgIHRtcDE0ICs9IHRtcDEzICsgejQgLSBNVUxUSVBMWSh6MywgRklYKDEuNjkwNjQzMTMzNCkpOyAvKiBjMStjOS1jMTEgKi8KLSAgICB0bXAxNSArPSB0bXAxMyArIE1VTFRJUExZKHoyLCBGSVgoMC42NzQ5NTc1NjcpKTsgICAgICAgLyogYzErYzExLWM1ICovCi0KLSAgICB0bXAxMyA9ICgoejEgLSB6MykgPDwgQ09OU1RfQklUUykgKyB6NDsKLQotICAgIC8qIEZpbmFsIG91dHB1dCBzdGFnZSAqLwotCi0gICAgb3V0cHRyWzBdICA9IHJhbmdlX2xpbWl0WyhpbnQpIFJJR0hUX1NISUZUKHRtcDIwICsgdG1wMTAsCi0JCQkJCSAgICAgICBDT05TVF9CSVRTK1BBU1MxX0JJVFMrMykKLQkJCSAgICAgJiBSQU5HRV9NQVNLXTsKLSAgICBvdXRwdHJbMTNdID0gcmFuZ2VfbGltaXRbKGludCkgUklHSFRfU0hJRlQodG1wMjAgLSB0bXAxMCwKLQkJCQkJICAgICAgIENPTlNUX0JJVFMrUEFTUzFfQklUUyszKQotCQkJICAgICAmIFJBTkdFX01BU0tdOwotICAgIG91dHB0clsxXSAgPSByYW5nZV9saW1pdFsoaW50KSBSSUdIVF9TSElGVCh0bXAyMSArIHRtcDExLAotCQkJCQkgICAgICAgQ09OU1RfQklUUytQQVNTMV9CSVRTKzMpCi0JCQkgICAgICYgUkFOR0VfTUFTS107Ci0gICAgb3V0cHRyWzEyXSA9IHJhbmdlX2xpbWl0WyhpbnQpIFJJR0hUX1NISUZUKHRtcDIxIC0gdG1wMTEsCi0JCQkJCSAgICAgICBDT05TVF9CSVRTK1BBU1MxX0JJVFMrMykKLQkJCSAgICAgJiBSQU5HRV9NQVNLXTsKLSAgICBvdXRwdHJbMl0gID0gcmFuZ2VfbGltaXRbKGludCkgUklHSFRfU0hJRlQodG1wMjIgKyB0bXAxMiwKLQkJCQkJICAgICAgIENPTlNUX0JJVFMrUEFTUzFfQklUUyszKQotCQkJICAgICAmIFJBTkdFX01BU0tdOwotICAgIG91dHB0clsxMV0gPSByYW5nZV9saW1pdFsoaW50KSBSSUdIVF9TSElGVCh0bXAyMiAtIHRtcDEyLAotCQkJCQkgICAgICAgQ09OU1RfQklUUytQQVNTMV9CSVRTKzMpCi0JCQkgICAgICYgUkFOR0VfTUFTS107Ci0gICAgb3V0cHRyWzNdICA9IHJhbmdlX2xpbWl0WyhpbnQpIFJJR0hUX1NISUZUKHRtcDIzICsgdG1wMTMsCi0JCQkJCSAgICAgICBDT05TVF9CSVRTK1BBU1MxX0JJVFMrMykKLQkJCSAgICAgJiBSQU5HRV9NQVNLXTsKLSAgICBvdXRwdHJbMTBdID0gcmFuZ2VfbGltaXRbKGludCkgUklHSFRfU0hJRlQodG1wMjMgLSB0bXAxMywKLQkJCQkJICAgICAgIENPTlNUX0JJVFMrUEFTUzFfQklUUyszKQotCQkJICAgICAmIFJBTkdFX01BU0tdOwotICAgIG91dHB0cls0XSAgPSByYW5nZV9saW1pdFsoaW50KSBSSUdIVF9TSElGVCh0bXAyNCArIHRtcDE0LAotCQkJCQkgICAgICAgQ09OU1RfQklUUytQQVNTMV9CSVRTKzMpCi0JCQkgICAgICYgUkFOR0VfTUFTS107Ci0gICAgb3V0cHRyWzldICA9IHJhbmdlX2xpbWl0WyhpbnQpIFJJR0hUX1NISUZUKHRtcDI0IC0gdG1wMTQsCi0JCQkJCSAgICAgICBDT05TVF9CSVRTK1BBU1MxX0JJVFMrMykKLQkJCSAgICAgJiBSQU5HRV9NQVNLXTsKLSAgICBvdXRwdHJbNV0gID0gcmFuZ2VfbGltaXRbKGludCkgUklHSFRfU0hJRlQodG1wMjUgKyB0bXAxNSwKLQkJCQkJICAgICAgIENPTlNUX0JJVFMrUEFTUzFfQklUUyszKQotCQkJICAgICAmIFJBTkdFX01BU0tdOwotICAgIG91dHB0cls4XSAgPSByYW5nZV9saW1pdFsoaW50KSBSSUdIVF9TSElGVCh0bXAyNSAtIHRtcDE1LAotCQkJCQkgICAgICAgQ09OU1RfQklUUytQQVNTMV9CSVRTKzMpCi0JCQkgICAgICYgUkFOR0VfTUFTS107Ci0gICAgb3V0cHRyWzZdICA9IHJhbmdlX2xpbWl0WyhpbnQpIFJJR0hUX1NISUZUKHRtcDI2ICsgdG1wMTYsCi0JCQkJCSAgICAgICBDT05TVF9CSVRTK1BBU1MxX0JJVFMrMykKLQkJCSAgICAgJiBSQU5HRV9NQVNLXTsKLSAgICBvdXRwdHJbN10gID0gcmFuZ2VfbGltaXRbKGludCkgUklHSFRfU0hJRlQodG1wMjYgLSB0bXAxNiwKLQkJCQkJICAgICAgIENPTlNUX0JJVFMrUEFTUzFfQklUUyszKQotCQkJICAgICAmIFJBTkdFX01BU0tdOwotCi0gICAgd3NwdHIgKz0gODsJCS8qIGFkdmFuY2UgcG9pbnRlciB0byBuZXh0IHJvdyAqLwotICB9Ci19Ci0KLQotLyoKLSAqIFBlcmZvcm0gZGVxdWFudGl6YXRpb24gYW5kIGludmVyc2UgRENUIG9uIG9uZSBibG9jayBvZiBjb2VmZmljaWVudHMsCi0gKiBwcm9kdWNpbmcgYSAxNXgxNSBvdXRwdXQgYmxvY2suCi0gKgotICogT3B0aW1pemVkIGFsZ29yaXRobSB3aXRoIDIyIG11bHRpcGxpY2F0aW9ucyBpbiB0aGUgMS1EIGtlcm5lbC4KLSAqIGNLIHJlcHJlc2VudHMgc3FydCgyKSAqIGNvcyhLKnBpLzMwKS4KLSAqLwotCi1HTE9CQUwodm9pZCkKLWpwZWdfaWRjdF8xNXgxNSAoal9kZWNvbXByZXNzX3B0ciBjaW5mbywganBlZ19jb21wb25lbnRfaW5mbyAqIGNvbXBwdHIsCi0JCSBKQ09FRlBUUiBjb2VmX2Jsb2NrLAotCQkgSlNBTVBBUlJBWSBvdXRwdXRfYnVmLCBKRElNRU5TSU9OIG91dHB1dF9jb2wpCi17Ci0gIElOVDMyIHRtcDEwLCB0bXAxMSwgdG1wMTIsIHRtcDEzLCB0bXAxNCwgdG1wMTUsIHRtcDE2OwotICBJTlQzMiB0bXAyMCwgdG1wMjEsIHRtcDIyLCB0bXAyMywgdG1wMjQsIHRtcDI1LCB0bXAyNiwgdG1wMjc7Ci0gIElOVDMyIHoxLCB6MiwgejMsIHo0OwotICBKQ09FRlBUUiBpbnB0cjsKLSAgSVNMT1dfTVVMVF9UWVBFICogcXVhbnRwdHI7Ci0gIGludCAqIHdzcHRyOwotICBKU0FNUFJPVyBvdXRwdHI7Ci0gIEpTQU1QTEUgKnJhbmdlX2xpbWl0ID0gSURDVF9yYW5nZV9saW1pdChjaW5mbyk7Ci0gIGludCBjdHI7Ci0gIGludCB3b3Jrc3BhY2VbOCoxNV07CS8qIGJ1ZmZlcnMgZGF0YSBiZXR3ZWVuIHBhc3NlcyAqLwotICBTSElGVF9URU1QUwotCi0gIC8qIFBhc3MgMTogcHJvY2VzcyBjb2x1bW5zIGZyb20gaW5wdXQsIHN0b3JlIGludG8gd29yayBhcnJheS4gKi8KLQotICBpbnB0ciA9IGNvZWZfYmxvY2s7Ci0gIHF1YW50cHRyID0gKElTTE9XX01VTFRfVFlQRSAqKSBjb21wcHRyLT5kY3RfdGFibGU7Ci0gIHdzcHRyID0gd29ya3NwYWNlOwotICBmb3IgKGN0ciA9IDA7IGN0ciA8IDg7IGN0cisrLCBpbnB0cisrLCBxdWFudHB0cisrLCB3c3B0cisrKSB7Ci0gICAgLyogRXZlbiBwYXJ0ICovCi0KLSAgICB6MSA9IERFUVVBTlRJWkUoaW5wdHJbRENUU0laRSowXSwgcXVhbnRwdHJbRENUU0laRSowXSk7Ci0gICAgejEgPDw9IENPTlNUX0JJVFM7Ci0gICAgLyogQWRkIGZ1ZGdlIGZhY3RvciBoZXJlIGZvciBmaW5hbCBkZXNjYWxlLiAqLwotICAgIHoxICs9IE9ORSA8PCAoQ09OU1RfQklUUy1QQVNTMV9CSVRTLTEpOwotCi0gICAgejIgPSBERVFVQU5USVpFKGlucHRyW0RDVFNJWkUqMl0sIHF1YW50cHRyW0RDVFNJWkUqMl0pOwotICAgIHozID0gREVRVUFOVElaRShpbnB0cltEQ1RTSVpFKjRdLCBxdWFudHB0cltEQ1RTSVpFKjRdKTsKLSAgICB6NCA9IERFUVVBTlRJWkUoaW5wdHJbRENUU0laRSo2XSwgcXVhbnRwdHJbRENUU0laRSo2XSk7Ci0KLSAgICB0bXAxMCA9IE1VTFRJUExZKHo0LCBGSVgoMC40MzcwMTYwMjQpKTsgLyogYzEyICovCi0gICAgdG1wMTEgPSBNVUxUSVBMWSh6NCwgRklYKDEuMTQ0MTIyODA2KSk7IC8qIGM2ICovCi0KLSAgICB0bXAxMiA9IHoxIC0gdG1wMTA7Ci0gICAgdG1wMTMgPSB6MSArIHRtcDExOwotICAgIHoxIC09ICh0bXAxMSAtIHRtcDEwKSA8PCAxOyAgICAgICAgICAgICAvKiBjMCA9IChjNi1jMTIpKjIgKi8KLQotICAgIHo0ID0gejIgLSB6MzsKLSAgICB6MyArPSB6MjsKLSAgICB0bXAxMCA9IE1VTFRJUExZKHozLCBGSVgoMS4zMzc2Mjg5OTApKTsgLyogKGMyK2M0KS8yICovCi0gICAgdG1wMTEgPSBNVUxUSVBMWSh6NCwgRklYKDAuMDQ1NjgwNjEzKSk7IC8qIChjMi1jNCkvMiAqLwotICAgIHoyID0gTVVMVElQTFkoejIsIEZJWCgxLjQzOTc3Mzk0NikpOyAgICAvKiBjNCtjMTQgKi8KLQotICAgIHRtcDIwID0gdG1wMTMgKyB0bXAxMCArIHRtcDExOwotICAgIHRtcDIzID0gdG1wMTIgLSB0bXAxMCArIHRtcDExICsgejI7Ci0KLSAgICB0bXAxMCA9IE1VTFRJUExZKHozLCBGSVgoMC41NDcwNTk1NzQpKTsgLyogKGM4K2MxNCkvMiAqLwotICAgIHRtcDExID0gTVVMVElQTFkoejQsIEZJWCgwLjM5OTIzNDAwNCkpOyAvKiAoYzgtYzE0KS8yICovCi0KLSAgICB0bXAyNSA9IHRtcDEzIC0gdG1wMTAgLSB0bXAxMTsKLSAgICB0bXAyNiA9IHRtcDEyICsgdG1wMTAgLSB0bXAxMSAtIHoyOwotCi0gICAgdG1wMTAgPSBNVUxUSVBMWSh6MywgRklYKDAuNzkwNTY5NDE1KSk7IC8qIChjNitjMTIpLzIgKi8KLSAgICB0bXAxMSA9IE1VTFRJUExZKHo0LCBGSVgoMC4zNTM1NTMzOTEpKTsgLyogKGM2LWMxMikvMiAqLwotCi0gICAgdG1wMjEgPSB0bXAxMiArIHRtcDEwICsgdG1wMTE7Ci0gICAgdG1wMjQgPSB0bXAxMyAtIHRtcDEwICsgdG1wMTE7Ci0gICAgdG1wMTEgKz0gdG1wMTE7Ci0gICAgdG1wMjIgPSB6MSArIHRtcDExOyAgICAgICAgICAgICAgICAgICAgIC8qIGMxMCA9IGM2LWMxMiAqLwotICAgIHRtcDI3ID0gejEgLSB0bXAxMSAtIHRtcDExOyAgICAgICAgICAgICAvKiBjMCA9IChjNi1jMTIpKjIgKi8KLQotICAgIC8qIE9kZCBwYXJ0ICovCi0KLSAgICB6MSA9IERFUVVBTlRJWkUoaW5wdHJbRENUU0laRSoxXSwgcXVhbnRwdHJbRENUU0laRSoxXSk7Ci0gICAgejIgPSBERVFVQU5USVpFKGlucHRyW0RDVFNJWkUqM10sIHF1YW50cHRyW0RDVFNJWkUqM10pOwotICAgIHo0ID0gREVRVUFOVElaRShpbnB0cltEQ1RTSVpFKjVdLCBxdWFudHB0cltEQ1RTSVpFKjVdKTsKLSAgICB6MyA9IE1VTFRJUExZKHo0LCBGSVgoMS4yMjQ3NDQ4NzEpKTsgICAgICAgICAgICAgICAgICAgIC8qIGM1ICovCi0gICAgejQgPSBERVFVQU5USVpFKGlucHRyW0RDVFNJWkUqN10sIHF1YW50cHRyW0RDVFNJWkUqN10pOwotCi0gICAgdG1wMTMgPSB6MiAtIHo0OwotICAgIHRtcDE1ID0gTVVMVElQTFkoejEgKyB0bXAxMywgRklYKDAuODMxMjUzODc2KSk7ICAgICAgICAgLyogYzkgKi8KLSAgICB0bXAxMSA9IHRtcDE1ICsgTVVMVElQTFkoejEsIEZJWCgwLjUxMzc0MzE0OCkpOyAgICAgICAgIC8qIGMzLWM5ICovCi0gICAgdG1wMTQgPSB0bXAxNSAtIE1VTFRJUExZKHRtcDEzLCBGSVgoMi4xNzYyNTA4OTkpKTsgICAgICAvKiBjMytjOSAqLwotCi0gICAgdG1wMTMgPSBNVUxUSVBMWSh6MiwgLSBGSVgoMC44MzEyNTM4NzYpKTsgICAgICAgICAgICAgICAvKiAtYzkgKi8KLSAgICB0bXAxNSA9IE1VTFRJUExZKHoyLCAtIEZJWCgxLjM0NDk5NzAyNCkpOyAgICAgICAgICAgICAgIC8qIC1jMyAqLwotICAgIHoyID0gejEgLSB6NDsKLSAgICB0bXAxMiA9IHozICsgTVVMVElQTFkoejIsIEZJWCgxLjQwNjQ2NjM1MykpOyAgICAgICAgICAgIC8qIGMxICovCi0KLSAgICB0bXAxMCA9IHRtcDEyICsgTVVMVElQTFkoejQsIEZJWCgyLjQ1NzQzMTg0NCkpIC0gdG1wMTU7IC8qIGMxK2M3ICovCi0gICAgdG1wMTYgPSB0bXAxMiAtIE1VTFRJUExZKHoxLCBGSVgoMS4xMTI0MzQ4MjApKSArIHRtcDEzOyAvKiBjMS1jMTMgKi8KLSAgICB0bXAxMiA9IE1VTFRJUExZKHoyLCBGSVgoMS4yMjQ3NDQ4NzEpKSAtIHozOyAgICAgICAgICAgIC8qIGM1ICovCi0gICAgejIgPSBNVUxUSVBMWSh6MSArIHo0LCBGSVgoMC41NzUyMTI0NzcpKTsgICAgICAgICAgICAgICAvKiBjMTEgKi8KLSAgICB0bXAxMyArPSB6MiArIE1VTFRJUExZKHoxLCBGSVgoMC40NzU3NTMwMTQpKSAtIHozOyAgICAgIC8qIGM3LWMxMSAqLwotICAgIHRtcDE1ICs9IHoyIC0gTVVMVElQTFkoejQsIEZJWCgwLjg2OTI0NDAxMCkpICsgejM7ICAgICAgLyogYzExK2MxMyAqLwotCi0gICAgLyogRmluYWwgb3V0cHV0IHN0YWdlICovCi0KLSAgICB3c3B0cls4KjBdICA9IChpbnQpIFJJR0hUX1NISUZUKHRtcDIwICsgdG1wMTAsIENPTlNUX0JJVFMtUEFTUzFfQklUUyk7Ci0gICAgd3NwdHJbOCoxNF0gPSAoaW50KSBSSUdIVF9TSElGVCh0bXAyMCAtIHRtcDEwLCBDT05TVF9CSVRTLVBBU1MxX0JJVFMpOwotICAgIHdzcHRyWzgqMV0gID0gKGludCkgUklHSFRfU0hJRlQodG1wMjEgKyB0bXAxMSwgQ09OU1RfQklUUy1QQVNTMV9CSVRTKTsKLSAgICB3c3B0cls4KjEzXSA9IChpbnQpIFJJR0hUX1NISUZUKHRtcDIxIC0gdG1wMTEsIENPTlNUX0JJVFMtUEFTUzFfQklUUyk7Ci0gICAgd3NwdHJbOCoyXSAgPSAoaW50KSBSSUdIVF9TSElGVCh0bXAyMiArIHRtcDEyLCBDT05TVF9CSVRTLVBBU1MxX0JJVFMpOwotICAgIHdzcHRyWzgqMTJdID0gKGludCkgUklHSFRfU0hJRlQodG1wMjIgLSB0bXAxMiwgQ09OU1RfQklUUy1QQVNTMV9CSVRTKTsKLSAgICB3c3B0cls4KjNdICA9IChpbnQpIFJJR0hUX1NISUZUKHRtcDIzICsgdG1wMTMsIENPTlNUX0JJVFMtUEFTUzFfQklUUyk7Ci0gICAgd3NwdHJbOCoxMV0gPSAoaW50KSBSSUdIVF9TSElGVCh0bXAyMyAtIHRtcDEzLCBDT05TVF9CSVRTLVBBU1MxX0JJVFMpOwotICAgIHdzcHRyWzgqNF0gID0gKGludCkgUklHSFRfU0hJRlQodG1wMjQgKyB0bXAxNCwgQ09OU1RfQklUUy1QQVNTMV9CSVRTKTsKLSAgICB3c3B0cls4KjEwXSA9IChpbnQpIFJJR0hUX1NISUZUKHRtcDI0IC0gdG1wMTQsIENPTlNUX0JJVFMtUEFTUzFfQklUUyk7Ci0gICAgd3NwdHJbOCo1XSAgPSAoaW50KSBSSUdIVF9TSElGVCh0bXAyNSArIHRtcDE1LCBDT05TVF9CSVRTLVBBU1MxX0JJVFMpOwotICAgIHdzcHRyWzgqOV0gID0gKGludCkgUklHSFRfU0hJRlQodG1wMjUgLSB0bXAxNSwgQ09OU1RfQklUUy1QQVNTMV9CSVRTKTsKLSAgICB3c3B0cls4KjZdICA9IChpbnQpIFJJR0hUX1NISUZUKHRtcDI2ICsgdG1wMTYsIENPTlNUX0JJVFMtUEFTUzFfQklUUyk7Ci0gICAgd3NwdHJbOCo4XSAgPSAoaW50KSBSSUdIVF9TSElGVCh0bXAyNiAtIHRtcDE2LCBDT05TVF9CSVRTLVBBU1MxX0JJVFMpOwotICAgIHdzcHRyWzgqN10gID0gKGludCkgUklHSFRfU0hJRlQodG1wMjcsIENPTlNUX0JJVFMtUEFTUzFfQklUUyk7Ci0gIH0KLQotICAvKiBQYXNzIDI6IHByb2Nlc3MgMTUgcm93cyBmcm9tIHdvcmsgYXJyYXksIHN0b3JlIGludG8gb3V0cHV0IGFycmF5LiAqLwotCi0gIHdzcHRyID0gd29ya3NwYWNlOwotICBmb3IgKGN0ciA9IDA7IGN0ciA8IDE1OyBjdHIrKykgewotICAgIG91dHB0ciA9IG91dHB1dF9idWZbY3RyXSArIG91dHB1dF9jb2w7Ci0KLSAgICAvKiBFdmVuIHBhcnQgKi8KLQotICAgIC8qIEFkZCBmdWRnZSBmYWN0b3IgaGVyZSBmb3IgZmluYWwgZGVzY2FsZS4gKi8KLSAgICB6MSA9IChJTlQzMikgd3NwdHJbMF0gKyAoT05FIDw8IChQQVNTMV9CSVRTKzIpKTsKLSAgICB6MSA8PD0gQ09OU1RfQklUUzsKLQotICAgIHoyID0gKElOVDMyKSB3c3B0clsyXTsKLSAgICB6MyA9IChJTlQzMikgd3NwdHJbNF07Ci0gICAgejQgPSAoSU5UMzIpIHdzcHRyWzZdOwotCi0gICAgdG1wMTAgPSBNVUxUSVBMWSh6NCwgRklYKDAuNDM3MDE2MDI0KSk7IC8qIGMxMiAqLwotICAgIHRtcDExID0gTVVMVElQTFkoejQsIEZJWCgxLjE0NDEyMjgwNikpOyAvKiBjNiAqLwotCi0gICAgdG1wMTIgPSB6MSAtIHRtcDEwOwotICAgIHRtcDEzID0gejEgKyB0bXAxMTsKLSAgICB6MSAtPSAodG1wMTEgLSB0bXAxMCkgPDwgMTsgICAgICAgICAgICAgLyogYzAgPSAoYzYtYzEyKSoyICovCi0KLSAgICB6NCA9IHoyIC0gejM7Ci0gICAgejMgKz0gejI7Ci0gICAgdG1wMTAgPSBNVUxUSVBMWSh6MywgRklYKDEuMzM3NjI4OTkwKSk7IC8qIChjMitjNCkvMiAqLwotICAgIHRtcDExID0gTVVMVElQTFkoejQsIEZJWCgwLjA0NTY4MDYxMykpOyAvKiAoYzItYzQpLzIgKi8KLSAgICB6MiA9IE1VTFRJUExZKHoyLCBGSVgoMS40Mzk3NzM5NDYpKTsgICAgLyogYzQrYzE0ICovCi0KLSAgICB0bXAyMCA9IHRtcDEzICsgdG1wMTAgKyB0bXAxMTsKLSAgICB0bXAyMyA9IHRtcDEyIC0gdG1wMTAgKyB0bXAxMSArIHoyOwotCi0gICAgdG1wMTAgPSBNVUxUSVBMWSh6MywgRklYKDAuNTQ3MDU5NTc0KSk7IC8qIChjOCtjMTQpLzIgKi8KLSAgICB0bXAxMSA9IE1VTFRJUExZKHo0LCBGSVgoMC4zOTkyMzQwMDQpKTsgLyogKGM4LWMxNCkvMiAqLwotCi0gICAgdG1wMjUgPSB0bXAxMyAtIHRtcDEwIC0gdG1wMTE7Ci0gICAgdG1wMjYgPSB0bXAxMiArIHRtcDEwIC0gdG1wMTEgLSB6MjsKLQotICAgIHRtcDEwID0gTVVMVElQTFkoejMsIEZJWCgwLjc5MDU2OTQxNSkpOyAvKiAoYzYrYzEyKS8yICovCi0gICAgdG1wMTEgPSBNVUxUSVBMWSh6NCwgRklYKDAuMzUzNTUzMzkxKSk7IC8qIChjNi1jMTIpLzIgKi8KLQotICAgIHRtcDIxID0gdG1wMTIgKyB0bXAxMCArIHRtcDExOwotICAgIHRtcDI0ID0gdG1wMTMgLSB0bXAxMCArIHRtcDExOwotICAgIHRtcDExICs9IHRtcDExOwotICAgIHRtcDIyID0gejEgKyB0bXAxMTsgICAgICAgICAgICAgICAgICAgICAvKiBjMTAgPSBjNi1jMTIgKi8KLSAgICB0bXAyNyA9IHoxIC0gdG1wMTEgLSB0bXAxMTsgICAgICAgICAgICAgLyogYzAgPSAoYzYtYzEyKSoyICovCi0KLSAgICAvKiBPZGQgcGFydCAqLwotCi0gICAgejEgPSAoSU5UMzIpIHdzcHRyWzFdOwotICAgIHoyID0gKElOVDMyKSB3c3B0clszXTsKLSAgICB6NCA9IChJTlQzMikgd3NwdHJbNV07Ci0gICAgejMgPSBNVUxUSVBMWSh6NCwgRklYKDEuMjI0NzQ0ODcxKSk7ICAgICAgICAgICAgICAgICAgICAvKiBjNSAqLwotICAgIHo0ID0gKElOVDMyKSB3c3B0cls3XTsKLQotICAgIHRtcDEzID0gejIgLSB6NDsKLSAgICB0bXAxNSA9IE1VTFRJUExZKHoxICsgdG1wMTMsIEZJWCgwLjgzMTI1Mzg3NikpOyAgICAgICAgIC8qIGM5ICovCi0gICAgdG1wMTEgPSB0bXAxNSArIE1VTFRJUExZKHoxLCBGSVgoMC41MTM3NDMxNDgpKTsgICAgICAgICAvKiBjMy1jOSAqLwotICAgIHRtcDE0ID0gdG1wMTUgLSBNVUxUSVBMWSh0bXAxMywgRklYKDIuMTc2MjUwODk5KSk7ICAgICAgLyogYzMrYzkgKi8KLQotICAgIHRtcDEzID0gTVVMVElQTFkoejIsIC0gRklYKDAuODMxMjUzODc2KSk7ICAgICAgICAgICAgICAgLyogLWM5ICovCi0gICAgdG1wMTUgPSBNVUxUSVBMWSh6MiwgLSBGSVgoMS4zNDQ5OTcwMjQpKTsgICAgICAgICAgICAgICAvKiAtYzMgKi8KLSAgICB6MiA9IHoxIC0gejQ7Ci0gICAgdG1wMTIgPSB6MyArIE1VTFRJUExZKHoyLCBGSVgoMS40MDY0NjYzNTMpKTsgICAgICAgICAgICAvKiBjMSAqLwotCi0gICAgdG1wMTAgPSB0bXAxMiArIE1VTFRJUExZKHo0LCBGSVgoMi40NTc0MzE4NDQpKSAtIHRtcDE1OyAvKiBjMStjNyAqLwotICAgIHRtcDE2ID0gdG1wMTIgLSBNVUxUSVBMWSh6MSwgRklYKDEuMTEyNDM0ODIwKSkgKyB0bXAxMzsgLyogYzEtYzEzICovCi0gICAgdG1wMTIgPSBNVUxUSVBMWSh6MiwgRklYKDEuMjI0NzQ0ODcxKSkgLSB6MzsgICAgICAgICAgICAvKiBjNSAqLwotICAgIHoyID0gTVVMVElQTFkoejEgKyB6NCwgRklYKDAuNTc1MjEyNDc3KSk7ICAgICAgICAgICAgICAgLyogYzExICovCi0gICAgdG1wMTMgKz0gejIgKyBNVUxUSVBMWSh6MSwgRklYKDAuNDc1NzUzMDE0KSkgLSB6MzsgICAgICAvKiBjNy1jMTEgKi8KLSAgICB0bXAxNSArPSB6MiAtIE1VTFRJUExZKHo0LCBGSVgoMC44NjkyNDQwMTApKSArIHozOyAgICAgIC8qIGMxMStjMTMgKi8KLQotICAgIC8qIEZpbmFsIG91dHB1dCBzdGFnZSAqLwotCi0gICAgb3V0cHRyWzBdICA9IHJhbmdlX2xpbWl0WyhpbnQpIFJJR0hUX1NISUZUKHRtcDIwICsgdG1wMTAsCi0JCQkJCSAgICAgICBDT05TVF9CSVRTK1BBU1MxX0JJVFMrMykKLQkJCSAgICAgJiBSQU5HRV9NQVNLXTsKLSAgICBvdXRwdHJbMTRdID0gcmFuZ2VfbGltaXRbKGludCkgUklHSFRfU0hJRlQodG1wMjAgLSB0bXAxMCwKLQkJCQkJICAgICAgIENPTlNUX0JJVFMrUEFTUzFfQklUUyszKQotCQkJICAgICAmIFJBTkdFX01BU0tdOwotICAgIG91dHB0clsxXSAgPSByYW5nZV9saW1pdFsoaW50KSBSSUdIVF9TSElGVCh0bXAyMSArIHRtcDExLAotCQkJCQkgICAgICAgQ09OU1RfQklUUytQQVNTMV9CSVRTKzMpCi0JCQkgICAgICYgUkFOR0VfTUFTS107Ci0gICAgb3V0cHRyWzEzXSA9IHJhbmdlX2xpbWl0WyhpbnQpIFJJR0hUX1NISUZUKHRtcDIxIC0gdG1wMTEsCi0JCQkJCSAgICAgICBDT05TVF9CSVRTK1BBU1MxX0JJVFMrMykKLQkJCSAgICAgJiBSQU5HRV9NQVNLXTsKLSAgICBvdXRwdHJbMl0gID0gcmFuZ2VfbGltaXRbKGludCkgUklHSFRfU0hJRlQodG1wMjIgKyB0bXAxMiwKLQkJCQkJICAgICAgIENPTlNUX0JJVFMrUEFTUzFfQklUUyszKQotCQkJICAgICAmIFJBTkdFX01BU0tdOwotICAgIG91dHB0clsxMl0gPSByYW5nZV9saW1pdFsoaW50KSBSSUdIVF9TSElGVCh0bXAyMiAtIHRtcDEyLAotCQkJCQkgICAgICAgQ09OU1RfQklUUytQQVNTMV9CSVRTKzMpCi0JCQkgICAgICYgUkFOR0VfTUFTS107Ci0gICAgb3V0cHRyWzNdICA9IHJhbmdlX2xpbWl0WyhpbnQpIFJJR0hUX1NISUZUKHRtcDIzICsgdG1wMTMsCi0JCQkJCSAgICAgICBDT05TVF9CSVRTK1BBU1MxX0JJVFMrMykKLQkJCSAgICAgJiBSQU5HRV9NQVNLXTsKLSAgICBvdXRwdHJbMTFdID0gcmFuZ2VfbGltaXRbKGludCkgUklHSFRfU0hJRlQodG1wMjMgLSB0bXAxMywKLQkJCQkJICAgICAgIENPTlNUX0JJVFMrUEFTUzFfQklUUyszKQotCQkJICAgICAmIFJBTkdFX01BU0tdOwotICAgIG91dHB0cls0XSAgPSByYW5nZV9saW1pdFsoaW50KSBSSUdIVF9TSElGVCh0bXAyNCArIHRtcDE0LAotCQkJCQkgICAgICAgQ09OU1RfQklUUytQQVNTMV9CSVRTKzMpCi0JCQkgICAgICYgUkFOR0VfTUFTS107Ci0gICAgb3V0cHRyWzEwXSA9IHJhbmdlX2xpbWl0WyhpbnQpIFJJR0hUX1NISUZUKHRtcDI0IC0gdG1wMTQsCi0JCQkJCSAgICAgICBDT05TVF9CSVRTK1BBU1MxX0JJVFMrMykKLQkJCSAgICAgJiBSQU5HRV9NQVNLXTsKLSAgICBvdXRwdHJbNV0gID0gcmFuZ2VfbGltaXRbKGludCkgUklHSFRfU0hJRlQodG1wMjUgKyB0bXAxNSwKLQkJCQkJICAgICAgIENPTlNUX0JJVFMrUEFTUzFfQklUUyszKQotCQkJICAgICAmIFJBTkdFX01BU0tdOwotICAgIG91dHB0cls5XSAgPSByYW5nZV9saW1pdFsoaW50KSBSSUdIVF9TSElGVCh0bXAyNSAtIHRtcDE1LAotCQkJCQkgICAgICAgQ09OU1RfQklUUytQQVNTMV9CSVRTKzMpCi0JCQkgICAgICYgUkFOR0VfTUFTS107Ci0gICAgb3V0cHRyWzZdICA9IHJhbmdlX2xpbWl0WyhpbnQpIFJJR0hUX1NISUZUKHRtcDI2ICsgdG1wMTYsCi0JCQkJCSAgICAgICBDT05TVF9CSVRTK1BBU1MxX0JJVFMrMykKLQkJCSAgICAgJiBSQU5HRV9NQVNLXTsKLSAgICBvdXRwdHJbOF0gID0gcmFuZ2VfbGltaXRbKGludCkgUklHSFRfU0hJRlQodG1wMjYgLSB0bXAxNiwKLQkJCQkJICAgICAgIENPTlNUX0JJVFMrUEFTUzFfQklUUyszKQotCQkJICAgICAmIFJBTkdFX01BU0tdOwotICAgIG91dHB0cls3XSAgPSByYW5nZV9saW1pdFsoaW50KSBSSUdIVF9TSElGVCh0bXAyNywKLQkJCQkJICAgICAgIENPTlNUX0JJVFMrUEFTUzFfQklUUyszKQotCQkJICAgICAmIFJBTkdFX01BU0tdOwotCi0gICAgd3NwdHIgKz0gODsJCS8qIGFkdmFuY2UgcG9pbnRlciB0byBuZXh0IHJvdyAqLwotICB9Ci19Ci0KLQotLyoKLSAqIFBlcmZvcm0gZGVxdWFudGl6YXRpb24gYW5kIGludmVyc2UgRENUIG9uIG9uZSBibG9jayBvZiBjb2VmZmljaWVudHMsCi0gKiBwcm9kdWNpbmcgYSAxNngxNiBvdXRwdXQgYmxvY2suCi0gKgotICogT3B0aW1pemVkIGFsZ29yaXRobSB3aXRoIDI4IG11bHRpcGxpY2F0aW9ucyBpbiB0aGUgMS1EIGtlcm5lbC4KLSAqIGNLIHJlcHJlc2VudHMgc3FydCgyKSAqIGNvcyhLKnBpLzMyKS4KLSAqLwotCi1HTE9CQUwodm9pZCkKLWpwZWdfaWRjdF8xNngxNiAoal9kZWNvbXByZXNzX3B0ciBjaW5mbywganBlZ19jb21wb25lbnRfaW5mbyAqIGNvbXBwdHIsCi0JCSBKQ09FRlBUUiBjb2VmX2Jsb2NrLAotCQkgSlNBTVBBUlJBWSBvdXRwdXRfYnVmLCBKRElNRU5TSU9OIG91dHB1dF9jb2wpCi17Ci0gIElOVDMyIHRtcDAsIHRtcDEsIHRtcDIsIHRtcDMsIHRtcDEwLCB0bXAxMSwgdG1wMTIsIHRtcDEzOwotICBJTlQzMiB0bXAyMCwgdG1wMjEsIHRtcDIyLCB0bXAyMywgdG1wMjQsIHRtcDI1LCB0bXAyNiwgdG1wMjc7Ci0gIElOVDMyIHoxLCB6MiwgejMsIHo0OwotICBKQ09FRlBUUiBpbnB0cjsKLSAgSVNMT1dfTVVMVF9UWVBFICogcXVhbnRwdHI7Ci0gIGludCAqIHdzcHRyOwotICBKU0FNUFJPVyBvdXRwdHI7Ci0gIEpTQU1QTEUgKnJhbmdlX2xpbWl0ID0gSURDVF9yYW5nZV9saW1pdChjaW5mbyk7Ci0gIGludCBjdHI7Ci0gIGludCB3b3Jrc3BhY2VbOCoxNl07CS8qIGJ1ZmZlcnMgZGF0YSBiZXR3ZWVuIHBhc3NlcyAqLwotICBTSElGVF9URU1QUwotCi0gIC8qIFBhc3MgMTogcHJvY2VzcyBjb2x1bW5zIGZyb20gaW5wdXQsIHN0b3JlIGludG8gd29yayBhcnJheS4gKi8KLQotICBpbnB0ciA9IGNvZWZfYmxvY2s7Ci0gIHF1YW50cHRyID0gKElTTE9XX01VTFRfVFlQRSAqKSBjb21wcHRyLT5kY3RfdGFibGU7Ci0gIHdzcHRyID0gd29ya3NwYWNlOwotICBmb3IgKGN0ciA9IDA7IGN0ciA8IDg7IGN0cisrLCBpbnB0cisrLCBxdWFudHB0cisrLCB3c3B0cisrKSB7Ci0gICAgLyogRXZlbiBwYXJ0ICovCi0KLSAgICB0bXAwID0gREVRVUFOVElaRShpbnB0cltEQ1RTSVpFKjBdLCBxdWFudHB0cltEQ1RTSVpFKjBdKTsKLSAgICB0bXAwIDw8PSBDT05TVF9CSVRTOwotICAgIC8qIEFkZCBmdWRnZSBmYWN0b3IgaGVyZSBmb3IgZmluYWwgZGVzY2FsZS4gKi8KLSAgICB0bXAwICs9IDEgPDwgKENPTlNUX0JJVFMtUEFTUzFfQklUUy0xKTsKLQotICAgIHoxID0gREVRVUFOVElaRShpbnB0cltEQ1RTSVpFKjRdLCBxdWFudHB0cltEQ1RTSVpFKjRdKTsKLSAgICB0bXAxID0gTVVMVElQTFkoejEsIEZJWCgxLjMwNjU2Mjk2NSkpOyAgICAgIC8qIGM0WzE2XSA9IGMyWzhdICovCi0gICAgdG1wMiA9IE1VTFRJUExZKHoxLCBGSVhfMF81NDExOTYxMDApOyAgICAgICAvKiBjMTJbMTZdID0gYzZbOF0gKi8KLQotICAgIHRtcDEwID0gdG1wMCArIHRtcDE7Ci0gICAgdG1wMTEgPSB0bXAwIC0gdG1wMTsKLSAgICB0bXAxMiA9IHRtcDAgKyB0bXAyOwotICAgIHRtcDEzID0gdG1wMCAtIHRtcDI7Ci0KLSAgICB6MSA9IERFUVVBTlRJWkUoaW5wdHJbRENUU0laRSoyXSwgcXVhbnRwdHJbRENUU0laRSoyXSk7Ci0gICAgejIgPSBERVFVQU5USVpFKGlucHRyW0RDVFNJWkUqNl0sIHF1YW50cHRyW0RDVFNJWkUqNl0pOwotICAgIHozID0gejEgLSB6MjsKLSAgICB6NCA9IE1VTFRJUExZKHozLCBGSVgoMC4yNzU4OTkzNzkpKTsgICAgICAgIC8qIGMxNFsxNl0gPSBjN1s4XSAqLwotICAgIHozID0gTVVMVElQTFkoejMsIEZJWCgxLjM4NzAzOTg0NSkpOyAgICAgICAgLyogYzJbMTZdID0gYzFbOF0gKi8KLQotICAgIHRtcDAgPSB6MyArIE1VTFRJUExZKHoyLCBGSVhfMl81NjI5MTU0NDcpOyAgLyogKGM2K2MyKVsxNl0gPSAoYzMrYzEpWzhdICovCi0gICAgdG1wMSA9IHo0ICsgTVVMVElQTFkoejEsIEZJWF8wXzg5OTk3NjIyMyk7ICAvKiAoYzYtYzE0KVsxNl0gPSAoYzMtYzcpWzhdICovCi0gICAgdG1wMiA9IHozIC0gTVVMVElQTFkoejEsIEZJWCgwLjYwMTM0NDg4NykpOyAvKiAoYzItYzEwKVsxNl0gPSAoYzEtYzUpWzhdICovCi0gICAgdG1wMyA9IHo0IC0gTVVMVElQTFkoejIsIEZJWCgwLjUwOTc5NTU3OSkpOyAvKiAoYzEwLWMxNClbMTZdID0gKGM1LWM3KVs4XSAqLwotCi0gICAgdG1wMjAgPSB0bXAxMCArIHRtcDA7Ci0gICAgdG1wMjcgPSB0bXAxMCAtIHRtcDA7Ci0gICAgdG1wMjEgPSB0bXAxMiArIHRtcDE7Ci0gICAgdG1wMjYgPSB0bXAxMiAtIHRtcDE7Ci0gICAgdG1wMjIgPSB0bXAxMyArIHRtcDI7Ci0gICAgdG1wMjUgPSB0bXAxMyAtIHRtcDI7Ci0gICAgdG1wMjMgPSB0bXAxMSArIHRtcDM7Ci0gICAgdG1wMjQgPSB0bXAxMSAtIHRtcDM7Ci0KLSAgICAvKiBPZGQgcGFydCAqLwotCi0gICAgejEgPSBERVFVQU5USVpFKGlucHRyW0RDVFNJWkUqMV0sIHF1YW50cHRyW0RDVFNJWkUqMV0pOwotICAgIHoyID0gREVRVUFOVElaRShpbnB0cltEQ1RTSVpFKjNdLCBxdWFudHB0cltEQ1RTSVpFKjNdKTsKLSAgICB6MyA9IERFUVVBTlRJWkUoaW5wdHJbRENUU0laRSo1XSwgcXVhbnRwdHJbRENUU0laRSo1XSk7Ci0gICAgejQgPSBERVFVQU5USVpFKGlucHRyW0RDVFNJWkUqN10sIHF1YW50cHRyW0RDVFNJWkUqN10pOwotCi0gICAgdG1wMTEgPSB6MSArIHozOwotCi0gICAgdG1wMSAgPSBNVUxUSVBMWSh6MSArIHoyLCBGSVgoMS4zNTMzMTgwMDEpKTsgICAvKiBjMyAqLwotICAgIHRtcDIgID0gTVVMVElQTFkodG1wMTEsICAgRklYKDEuMjQ3MjI1MDEzKSk7ICAgLyogYzUgKi8KLSAgICB0bXAzICA9IE1VTFRJUExZKHoxICsgejQsIEZJWCgxLjA5MzIwMTg2NykpOyAgIC8qIGM3ICovCi0gICAgdG1wMTAgPSBNVUxUSVBMWSh6MSAtIHo0LCBGSVgoMC44OTcxNjc1ODYpKTsgICAvKiBjOSAqLwotICAgIHRtcDExID0gTVVMVElQTFkodG1wMTEsICAgRklYKDAuNjY2NjU1NjU4KSk7ICAgLyogYzExICovCi0gICAgdG1wMTIgPSBNVUxUSVBMWSh6MSAtIHoyLCBGSVgoMC40MTA1MjQ1MjgpKTsgICAvKiBjMTMgKi8KLSAgICB0bXAwICA9IHRtcDEgKyB0bXAyICsgdG1wMyAtCi0JICAgIE1VTFRJUExZKHoxLCBGSVgoMi4yODYzNDExNDQpKTsgICAgICAgIC8qIGM3K2M1K2MzLWMxICovCi0gICAgdG1wMTMgPSB0bXAxMCArIHRtcDExICsgdG1wMTIgLQotCSAgICBNVUxUSVBMWSh6MSwgRklYKDEuODM1NzMwNjAzKSk7ICAgICAgICAvKiBjOStjMTErYzEzLWMxNSAqLwotICAgIHoxICAgID0gTVVMVElQTFkoejIgKyB6MywgRklYKDAuMTM4NjE3MTY5KSk7ICAgLyogYzE1ICovCi0gICAgdG1wMSAgKz0gejEgKyBNVUxUSVBMWSh6MiwgRklYKDAuMDcxODg4MDc0KSk7ICAvKiBjOStjMTEtYzMtYzE1ICovCi0gICAgdG1wMiAgKz0gejEgLSBNVUxUSVBMWSh6MywgRklYKDEuMTI1NzI2MDQ4KSk7ICAvKiBjNStjNytjMTUtYzMgKi8KLSAgICB6MSAgICA9IE1VTFRJUExZKHozIC0gejIsIEZJWCgxLjQwNzQwMzczOCkpOyAgIC8qIGMxICovCi0gICAgdG1wMTEgKz0gejEgLSBNVUxUSVBMWSh6MywgRklYKDAuNzY2MzY3MjgyKSk7ICAvKiBjMStjMTEtYzktYzEzICovCi0gICAgdG1wMTIgKz0gejEgKyBNVUxUSVBMWSh6MiwgRklYKDEuOTcxOTUxNDExKSk7ICAvKiBjMStjNStjMTMtYzcgKi8KLSAgICB6MiAgICArPSB6NDsKLSAgICB6MSAgICA9IE1VTFRJUExZKHoyLCAtIEZJWCgwLjY2NjY1NTY1OCkpOyAgICAgIC8qIC1jMTEgKi8KLSAgICB0bXAxICArPSB6MTsKLSAgICB0bXAzICArPSB6MSArIE1VTFRJUExZKHo0LCBGSVgoMS4wNjUzODg5NjIpKTsgIC8qIGMzK2MxMStjMTUtYzcgKi8KLSAgICB6MiAgICA9IE1VTFRJUExZKHoyLCAtIEZJWCgxLjI0NzIyNTAxMykpOyAgICAgIC8qIC1jNSAqLwotICAgIHRtcDEwICs9IHoyICsgTVVMVElQTFkoejQsIEZJWCgzLjE0MTI3MTgwOSkpOyAgLyogYzErYzUrYzktYzEzICovCi0gICAgdG1wMTIgKz0gejI7Ci0gICAgejIgICAgPSBNVUxUSVBMWSh6MyArIHo0LCAtIEZJWCgxLjM1MzMxODAwMSkpOyAvKiAtYzMgKi8KLSAgICB0bXAyICArPSB6MjsKLSAgICB0bXAzICArPSB6MjsKLSAgICB6MiAgICA9IE1VTFRJUExZKHo0IC0gejMsIEZJWCgwLjQxMDUyNDUyOCkpOyAgIC8qIGMxMyAqLwotICAgIHRtcDEwICs9IHoyOwotICAgIHRtcDExICs9IHoyOwotCi0gICAgLyogRmluYWwgb3V0cHV0IHN0YWdlICovCi0KLSAgICB3c3B0cls4KjBdICA9IChpbnQpIFJJR0hUX1NISUZUKHRtcDIwICsgdG1wMCwgIENPTlNUX0JJVFMtUEFTUzFfQklUUyk7Ci0gICAgd3NwdHJbOCoxNV0gPSAoaW50KSBSSUdIVF9TSElGVCh0bXAyMCAtIHRtcDAsICBDT05TVF9CSVRTLVBBU1MxX0JJVFMpOwotICAgIHdzcHRyWzgqMV0gID0gKGludCkgUklHSFRfU0hJRlQodG1wMjEgKyB0bXAxLCAgQ09OU1RfQklUUy1QQVNTMV9CSVRTKTsKLSAgICB3c3B0cls4KjE0XSA9IChpbnQpIFJJR0hUX1NISUZUKHRtcDIxIC0gdG1wMSwgIENPTlNUX0JJVFMtUEFTUzFfQklUUyk7Ci0gICAgd3NwdHJbOCoyXSAgPSAoaW50KSBSSUdIVF9TSElGVCh0bXAyMiArIHRtcDIsICBDT05TVF9CSVRTLVBBU1MxX0JJVFMpOwotICAgIHdzcHRyWzgqMTNdID0gKGludCkgUklHSFRfU0hJRlQodG1wMjIgLSB0bXAyLCAgQ09OU1RfQklUUy1QQVNTMV9CSVRTKTsKLSAgICB3c3B0cls4KjNdICA9IChpbnQpIFJJR0hUX1NISUZUKHRtcDIzICsgdG1wMywgIENPTlNUX0JJVFMtUEFTUzFfQklUUyk7Ci0gICAgd3NwdHJbOCoxMl0gPSAoaW50KSBSSUdIVF9TSElGVCh0bXAyMyAtIHRtcDMsICBDT05TVF9CSVRTLVBBU1MxX0JJVFMpOwotICAgIHdzcHRyWzgqNF0gID0gKGludCkgUklHSFRfU0hJRlQodG1wMjQgKyB0bXAxMCwgQ09OU1RfQklUUy1QQVNTMV9CSVRTKTsKLSAgICB3c3B0cls4KjExXSA9IChpbnQpIFJJR0hUX1NISUZUKHRtcDI0IC0gdG1wMTAsIENPTlNUX0JJVFMtUEFTUzFfQklUUyk7Ci0gICAgd3NwdHJbOCo1XSAgPSAoaW50KSBSSUdIVF9TSElGVCh0bXAyNSArIHRtcDExLCBDT05TVF9CSVRTLVBBU1MxX0JJVFMpOwotICAgIHdzcHRyWzgqMTBdID0gKGludCkgUklHSFRfU0hJRlQodG1wMjUgLSB0bXAxMSwgQ09OU1RfQklUUy1QQVNTMV9CSVRTKTsKLSAgICB3c3B0cls4KjZdICA9IChpbnQpIFJJR0hUX1NISUZUKHRtcDI2ICsgdG1wMTIsIENPTlNUX0JJVFMtUEFTUzFfQklUUyk7Ci0gICAgd3NwdHJbOCo5XSAgPSAoaW50KSBSSUdIVF9TSElGVCh0bXAyNiAtIHRtcDEyLCBDT05TVF9CSVRTLVBBU1MxX0JJVFMpOwotICAgIHdzcHRyWzgqN10gID0gKGludCkgUklHSFRfU0hJRlQodG1wMjcgKyB0bXAxMywgQ09OU1RfQklUUy1QQVNTMV9CSVRTKTsKLSAgICB3c3B0cls4KjhdICA9IChpbnQpIFJJR0hUX1NISUZUKHRtcDI3IC0gdG1wMTMsIENPTlNUX0JJVFMtUEFTUzFfQklUUyk7Ci0gIH0KLQotICAvKiBQYXNzIDI6IHByb2Nlc3MgMTYgcm93cyBmcm9tIHdvcmsgYXJyYXksIHN0b3JlIGludG8gb3V0cHV0IGFycmF5LiAqLwotCi0gIHdzcHRyID0gd29ya3NwYWNlOwotICBmb3IgKGN0ciA9IDA7IGN0ciA8IDE2OyBjdHIrKykgewotICAgIG91dHB0ciA9IG91dHB1dF9idWZbY3RyXSArIG91dHB1dF9jb2w7Ci0KLSAgICAvKiBFdmVuIHBhcnQgKi8KLQotICAgIC8qIEFkZCBmdWRnZSBmYWN0b3IgaGVyZSBmb3IgZmluYWwgZGVzY2FsZS4gKi8KLSAgICB0bXAwID0gKElOVDMyKSB3c3B0clswXSArIChPTkUgPDwgKFBBU1MxX0JJVFMrMikpOwotICAgIHRtcDAgPDw9IENPTlNUX0JJVFM7Ci0KLSAgICB6MSA9IChJTlQzMikgd3NwdHJbNF07Ci0gICAgdG1wMSA9IE1VTFRJUExZKHoxLCBGSVgoMS4zMDY1NjI5NjUpKTsgICAgICAvKiBjNFsxNl0gPSBjMls4XSAqLwotICAgIHRtcDIgPSBNVUxUSVBMWSh6MSwgRklYXzBfNTQxMTk2MTAwKTsgICAgICAgLyogYzEyWzE2XSA9IGM2WzhdICovCi0KLSAgICB0bXAxMCA9IHRtcDAgKyB0bXAxOwotICAgIHRtcDExID0gdG1wMCAtIHRtcDE7Ci0gICAgdG1wMTIgPSB0bXAwICsgdG1wMjsKLSAgICB0bXAxMyA9IHRtcDAgLSB0bXAyOwotCi0gICAgejEgPSAoSU5UMzIpIHdzcHRyWzJdOwotICAgIHoyID0gKElOVDMyKSB3c3B0cls2XTsKLSAgICB6MyA9IHoxIC0gejI7Ci0gICAgejQgPSBNVUxUSVBMWSh6MywgRklYKDAuMjc1ODk5Mzc5KSk7ICAgICAgICAvKiBjMTRbMTZdID0gYzdbOF0gKi8KLSAgICB6MyA9IE1VTFRJUExZKHozLCBGSVgoMS4zODcwMzk4NDUpKTsgICAgICAgIC8qIGMyWzE2XSA9IGMxWzhdICovCi0KLSAgICB0bXAwID0gejMgKyBNVUxUSVBMWSh6MiwgRklYXzJfNTYyOTE1NDQ3KTsgIC8qIChjNitjMilbMTZdID0gKGMzK2MxKVs4XSAqLwotICAgIHRtcDEgPSB6NCArIE1VTFRJUExZKHoxLCBGSVhfMF84OTk5NzYyMjMpOyAgLyogKGM2LWMxNClbMTZdID0gKGMzLWM3KVs4XSAqLwotICAgIHRtcDIgPSB6MyAtIE1VTFRJUExZKHoxLCBGSVgoMC42MDEzNDQ4ODcpKTsgLyogKGMyLWMxMClbMTZdID0gKGMxLWM1KVs4XSAqLwotICAgIHRtcDMgPSB6NCAtIE1VTFRJUExZKHoyLCBGSVgoMC41MDk3OTU1NzkpKTsgLyogKGMxMC1jMTQpWzE2XSA9IChjNS1jNylbOF0gKi8KLQotICAgIHRtcDIwID0gdG1wMTAgKyB0bXAwOwotICAgIHRtcDI3ID0gdG1wMTAgLSB0bXAwOwotICAgIHRtcDIxID0gdG1wMTIgKyB0bXAxOwotICAgIHRtcDI2ID0gdG1wMTIgLSB0bXAxOwotICAgIHRtcDIyID0gdG1wMTMgKyB0bXAyOwotICAgIHRtcDI1ID0gdG1wMTMgLSB0bXAyOwotICAgIHRtcDIzID0gdG1wMTEgKyB0bXAzOwotICAgIHRtcDI0ID0gdG1wMTEgLSB0bXAzOwotCi0gICAgLyogT2RkIHBhcnQgKi8KLQotICAgIHoxID0gKElOVDMyKSB3c3B0clsxXTsKLSAgICB6MiA9IChJTlQzMikgd3NwdHJbM107Ci0gICAgejMgPSAoSU5UMzIpIHdzcHRyWzVdOwotICAgIHo0ID0gKElOVDMyKSB3c3B0cls3XTsKLQotICAgIHRtcDExID0gejEgKyB6MzsKLQotICAgIHRtcDEgID0gTVVMVElQTFkoejEgKyB6MiwgRklYKDEuMzUzMzE4MDAxKSk7ICAgLyogYzMgKi8KLSAgICB0bXAyICA9IE1VTFRJUExZKHRtcDExLCAgIEZJWCgxLjI0NzIyNTAxMykpOyAgIC8qIGM1ICovCi0gICAgdG1wMyAgPSBNVUxUSVBMWSh6MSArIHo0LCBGSVgoMS4wOTMyMDE4NjcpKTsgICAvKiBjNyAqLwotICAgIHRtcDEwID0gTVVMVElQTFkoejEgLSB6NCwgRklYKDAuODk3MTY3NTg2KSk7ICAgLyogYzkgKi8KLSAgICB0bXAxMSA9IE1VTFRJUExZKHRtcDExLCAgIEZJWCgwLjY2NjY1NTY1OCkpOyAgIC8qIGMxMSAqLwotICAgIHRtcDEyID0gTVVMVElQTFkoejEgLSB6MiwgRklYKDAuNDEwNTI0NTI4KSk7ICAgLyogYzEzICovCi0gICAgdG1wMCAgPSB0bXAxICsgdG1wMiArIHRtcDMgLQotCSAgICBNVUxUSVBMWSh6MSwgRklYKDIuMjg2MzQxMTQ0KSk7ICAgICAgICAvKiBjNytjNStjMy1jMSAqLwotICAgIHRtcDEzID0gdG1wMTAgKyB0bXAxMSArIHRtcDEyIC0KLQkgICAgTVVMVElQTFkoejEsIEZJWCgxLjgzNTczMDYwMykpOyAgICAgICAgLyogYzkrYzExK2MxMy1jMTUgKi8KLSAgICB6MSAgICA9IE1VTFRJUExZKHoyICsgejMsIEZJWCgwLjEzODYxNzE2OSkpOyAgIC8qIGMxNSAqLwotICAgIHRtcDEgICs9IHoxICsgTVVMVElQTFkoejIsIEZJWCgwLjA3MTg4ODA3NCkpOyAgLyogYzkrYzExLWMzLWMxNSAqLwotICAgIHRtcDIgICs9IHoxIC0gTVVMVElQTFkoejMsIEZJWCgxLjEyNTcyNjA0OCkpOyAgLyogYzUrYzcrYzE1LWMzICovCi0gICAgejEgICAgPSBNVUxUSVBMWSh6MyAtIHoyLCBGSVgoMS40MDc0MDM3MzgpKTsgICAvKiBjMSAqLwotICAgIHRtcDExICs9IHoxIC0gTVVMVElQTFkoejMsIEZJWCgwLjc2NjM2NzI4MikpOyAgLyogYzErYzExLWM5LWMxMyAqLwotICAgIHRtcDEyICs9IHoxICsgTVVMVElQTFkoejIsIEZJWCgxLjk3MTk1MTQxMSkpOyAgLyogYzErYzUrYzEzLWM3ICovCi0gICAgejIgICAgKz0gejQ7Ci0gICAgejEgICAgPSBNVUxUSVBMWSh6MiwgLSBGSVgoMC42NjY2NTU2NTgpKTsgICAgICAvKiAtYzExICovCi0gICAgdG1wMSAgKz0gejE7Ci0gICAgdG1wMyAgKz0gejEgKyBNVUxUSVBMWSh6NCwgRklYKDEuMDY1Mzg4OTYyKSk7ICAvKiBjMytjMTErYzE1LWM3ICovCi0gICAgejIgICAgPSBNVUxUSVBMWSh6MiwgLSBGSVgoMS4yNDcyMjUwMTMpKTsgICAgICAvKiAtYzUgKi8KLSAgICB0bXAxMCArPSB6MiArIE1VTFRJUExZKHo0LCBGSVgoMy4xNDEyNzE4MDkpKTsgIC8qIGMxK2M1K2M5LWMxMyAqLwotICAgIHRtcDEyICs9IHoyOwotICAgIHoyICAgID0gTVVMVElQTFkoejMgKyB6NCwgLSBGSVgoMS4zNTMzMTgwMDEpKTsgLyogLWMzICovCi0gICAgdG1wMiAgKz0gejI7Ci0gICAgdG1wMyAgKz0gejI7Ci0gICAgejIgICAgPSBNVUxUSVBMWSh6NCAtIHozLCBGSVgoMC40MTA1MjQ1MjgpKTsgICAvKiBjMTMgKi8KLSAgICB0bXAxMCArPSB6MjsKLSAgICB0bXAxMSArPSB6MjsKLQotICAgIC8qIEZpbmFsIG91dHB1dCBzdGFnZSAqLwotCi0gICAgb3V0cHRyWzBdICA9IHJhbmdlX2xpbWl0WyhpbnQpIFJJR0hUX1NISUZUKHRtcDIwICsgdG1wMCwKLQkJCQkJICAgICAgIENPTlNUX0JJVFMrUEFTUzFfQklUUyszKQotCQkJICAgICAmIFJBTkdFX01BU0tdOwotICAgIG91dHB0clsxNV0gPSByYW5nZV9saW1pdFsoaW50KSBSSUdIVF9TSElGVCh0bXAyMCAtIHRtcDAsCi0JCQkJCSAgICAgICBDT05TVF9CSVRTK1BBU1MxX0JJVFMrMykKLQkJCSAgICAgJiBSQU5HRV9NQVNLXTsKLSAgICBvdXRwdHJbMV0gID0gcmFuZ2VfbGltaXRbKGludCkgUklHSFRfU0hJRlQodG1wMjEgKyB0bXAxLAotCQkJCQkgICAgICAgQ09OU1RfQklUUytQQVNTMV9CSVRTKzMpCi0JCQkgICAgICYgUkFOR0VfTUFTS107Ci0gICAgb3V0cHRyWzE0XSA9IHJhbmdlX2xpbWl0WyhpbnQpIFJJR0hUX1NISUZUKHRtcDIxIC0gdG1wMSwKLQkJCQkJICAgICAgIENPTlNUX0JJVFMrUEFTUzFfQklUUyszKQotCQkJICAgICAmIFJBTkdFX01BU0tdOwotICAgIG91dHB0clsyXSAgPSByYW5nZV9saW1pdFsoaW50KSBSSUdIVF9TSElGVCh0bXAyMiArIHRtcDIsCi0JCQkJCSAgICAgICBDT05TVF9CSVRTK1BBU1MxX0JJVFMrMykKLQkJCSAgICAgJiBSQU5HRV9NQVNLXTsKLSAgICBvdXRwdHJbMTNdID0gcmFuZ2VfbGltaXRbKGludCkgUklHSFRfU0hJRlQodG1wMjIgLSB0bXAyLAotCQkJCQkgICAgICAgQ09OU1RfQklUUytQQVNTMV9CSVRTKzMpCi0JCQkgICAgICYgUkFOR0VfTUFTS107Ci0gICAgb3V0cHRyWzNdICA9IHJhbmdlX2xpbWl0WyhpbnQpIFJJR0hUX1NISUZUKHRtcDIzICsgdG1wMywKLQkJCQkJICAgICAgIENPTlNUX0JJVFMrUEFTUzFfQklUUyszKQotCQkJICAgICAmIFJBTkdFX01BU0tdOwotICAgIG91dHB0clsxMl0gPSByYW5nZV9saW1pdFsoaW50KSBSSUdIVF9TSElGVCh0bXAyMyAtIHRtcDMsCi0JCQkJCSAgICAgICBDT05TVF9CSVRTK1BBU1MxX0JJVFMrMykKLQkJCSAgICAgJiBSQU5HRV9NQVNLXTsKLSAgICBvdXRwdHJbNF0gID0gcmFuZ2VfbGltaXRbKGludCkgUklHSFRfU0hJRlQodG1wMjQgKyB0bXAxMCwKLQkJCQkJICAgICAgIENPTlNUX0JJVFMrUEFTUzFfQklUUyszKQotCQkJICAgICAmIFJBTkdFX01BU0tdOwotICAgIG91dHB0clsxMV0gPSByYW5nZV9saW1pdFsoaW50KSBSSUdIVF9TSElGVCh0bXAyNCAtIHRtcDEwLAotCQkJCQkgICAgICAgQ09OU1RfQklUUytQQVNTMV9CSVRTKzMpCi0JCQkgICAgICYgUkFOR0VfTUFTS107Ci0gICAgb3V0cHRyWzVdICA9IHJhbmdlX2xpbWl0WyhpbnQpIFJJR0hUX1NISUZUKHRtcDI1ICsgdG1wMTEsCi0JCQkJCSAgICAgICBDT05TVF9CSVRTK1BBU1MxX0JJVFMrMykKLQkJCSAgICAgJiBSQU5HRV9NQVNLXTsKLSAgICBvdXRwdHJbMTBdID0gcmFuZ2VfbGltaXRbKGludCkgUklHSFRfU0hJRlQodG1wMjUgLSB0bXAxMSwKLQkJCQkJICAgICAgIENPTlNUX0JJVFMrUEFTUzFfQklUUyszKQotCQkJICAgICAmIFJBTkdFX01BU0tdOwotICAgIG91dHB0cls2XSAgPSByYW5nZV9saW1pdFsoaW50KSBSSUdIVF9TSElGVCh0bXAyNiArIHRtcDEyLAotCQkJCQkgICAgICAgQ09OU1RfQklUUytQQVNTMV9CSVRTKzMpCi0JCQkgICAgICYgUkFOR0VfTUFTS107Ci0gICAgb3V0cHRyWzldICA9IHJhbmdlX2xpbWl0WyhpbnQpIFJJR0hUX1NISUZUKHRtcDI2IC0gdG1wMTIsCi0JCQkJCSAgICAgICBDT05TVF9CSVRTK1BBU1MxX0JJVFMrMykKLQkJCSAgICAgJiBSQU5HRV9NQVNLXTsKLSAgICBvdXRwdHJbN10gID0gcmFuZ2VfbGltaXRbKGludCkgUklHSFRfU0hJRlQodG1wMjcgKyB0bXAxMywKLQkJCQkJICAgICAgIENPTlNUX0JJVFMrUEFTUzFfQklUUyszKQotCQkJICAgICAmIFJBTkdFX01BU0tdOwotICAgIG91dHB0cls4XSAgPSByYW5nZV9saW1pdFsoaW50KSBSSUdIVF9TSElGVCh0bXAyNyAtIHRtcDEzLAotCQkJCQkgICAgICAgQ09OU1RfQklUUytQQVNTMV9CSVRTKzMpCi0JCQkgICAgICYgUkFOR0VfTUFTS107Ci0KLSAgICB3c3B0ciArPSA4OwkJLyogYWR2YW5jZSBwb2ludGVyIHRvIG5leHQgcm93ICovCi0gIH0KLX0KLQotCi0vKgotICogUGVyZm9ybSBkZXF1YW50aXphdGlvbiBhbmQgaW52ZXJzZSBEQ1Qgb24gb25lIGJsb2NrIG9mIGNvZWZmaWNpZW50cywKLSAqIHByb2R1Y2luZyBhIDE2eDggb3V0cHV0IGJsb2NrLgotICoKLSAqIDgtcG9pbnQgSURDVCBpbiBwYXNzIDEgKGNvbHVtbnMpLCAxNi1wb2ludCBpbiBwYXNzIDIgKHJvd3MpLgotICovCi0KLUdMT0JBTCh2b2lkKQotanBlZ19pZGN0XzE2eDggKGpfZGVjb21wcmVzc19wdHIgY2luZm8sIGpwZWdfY29tcG9uZW50X2luZm8gKiBjb21wcHRyLAotCQlKQ09FRlBUUiBjb2VmX2Jsb2NrLAotCQlKU0FNUEFSUkFZIG91dHB1dF9idWYsIEpESU1FTlNJT04gb3V0cHV0X2NvbCkKLXsKLSAgSU5UMzIgdG1wMCwgdG1wMSwgdG1wMiwgdG1wMywgdG1wMTAsIHRtcDExLCB0bXAxMiwgdG1wMTM7Ci0gIElOVDMyIHRtcDIwLCB0bXAyMSwgdG1wMjIsIHRtcDIzLCB0bXAyNCwgdG1wMjUsIHRtcDI2LCB0bXAyNzsKLSAgSU5UMzIgejEsIHoyLCB6MywgejQ7Ci0gIEpDT0VGUFRSIGlucHRyOwotICBJU0xPV19NVUxUX1RZUEUgKiBxdWFudHB0cjsKLSAgaW50ICogd3NwdHI7Ci0gIEpTQU1QUk9XIG91dHB0cjsKLSAgSlNBTVBMRSAqcmFuZ2VfbGltaXQgPSBJRENUX3JhbmdlX2xpbWl0KGNpbmZvKTsKLSAgaW50IGN0cjsKLSAgaW50IHdvcmtzcGFjZVs4KjhdOwkvKiBidWZmZXJzIGRhdGEgYmV0d2VlbiBwYXNzZXMgKi8KLSAgU0hJRlRfVEVNUFMKLQotICAvKiBQYXNzIDE6IHByb2Nlc3MgY29sdW1ucyBmcm9tIGlucHV0LCBzdG9yZSBpbnRvIHdvcmsgYXJyYXkuICovCi0gIC8qIE5vdGUgcmVzdWx0cyBhcmUgc2NhbGVkIHVwIGJ5IHNxcnQoOCkgY29tcGFyZWQgdG8gYSB0cnVlIElEQ1Q7ICovCi0gIC8qIGZ1cnRoZXJtb3JlLCB3ZSBzY2FsZSB0aGUgcmVzdWx0cyBieSAyKipQQVNTMV9CSVRTLiAqLwotCi0gIGlucHRyID0gY29lZl9ibG9jazsKLSAgcXVhbnRwdHIgPSAoSVNMT1dfTVVMVF9UWVBFICopIGNvbXBwdHItPmRjdF90YWJsZTsKLSAgd3NwdHIgPSB3b3Jrc3BhY2U7Ci0gIGZvciAoY3RyID0gRENUU0laRTsgY3RyID4gMDsgY3RyLS0pIHsKLSAgICAvKiBEdWUgdG8gcXVhbnRpemF0aW9uLCB3ZSB3aWxsIHVzdWFsbHkgZmluZCB0aGF0IG1hbnkgb2YgdGhlIGlucHV0Ci0gICAgICogY29lZmZpY2llbnRzIGFyZSB6ZXJvLCBlc3BlY2lhbGx5IHRoZSBBQyB0ZXJtcy4gIFdlIGNhbiBleHBsb2l0IHRoaXMKLSAgICAgKiBieSBzaG9ydC1jaXJjdWl0aW5nIHRoZSBJRENUIGNhbGN1bGF0aW9uIGZvciBhbnkgY29sdW1uIGluIHdoaWNoIGFsbAotICAgICAqIHRoZSBBQyB0ZXJtcyBhcmUgemVyby4gIEluIHRoYXQgY2FzZSBlYWNoIG91dHB1dCBpcyBlcXVhbCB0byB0aGUKLSAgICAgKiBEQyBjb2VmZmljaWVudCAod2l0aCBzY2FsZSBmYWN0b3IgYXMgbmVlZGVkKS4KLSAgICAgKiBXaXRoIHR5cGljYWwgaW1hZ2VzIGFuZCBxdWFudGl6YXRpb24gdGFibGVzLCBoYWxmIG9yIG1vcmUgb2YgdGhlCi0gICAgICogY29sdW1uIERDVCBjYWxjdWxhdGlvbnMgY2FuIGJlIHNpbXBsaWZpZWQgdGhpcyB3YXkuCi0gICAgICovCi0gICAgCi0gICAgaWYgKGlucHRyW0RDVFNJWkUqMV0gPT0gMCAmJiBpbnB0cltEQ1RTSVpFKjJdID09IDAgJiYKLQlpbnB0cltEQ1RTSVpFKjNdID09IDAgJiYgaW5wdHJbRENUU0laRSo0XSA9PSAwICYmCi0JaW5wdHJbRENUU0laRSo1XSA9PSAwICYmIGlucHRyW0RDVFNJWkUqNl0gPT0gMCAmJgotCWlucHRyW0RDVFNJWkUqN10gPT0gMCkgewotICAgICAgLyogQUMgdGVybXMgYWxsIHplcm8gKi8KLSAgICAgIGludCBkY3ZhbCA9IERFUVVBTlRJWkUoaW5wdHJbRENUU0laRSowXSwgcXVhbnRwdHJbRENUU0laRSowXSkgPDwgUEFTUzFfQklUUzsKLSAgICAgIAotICAgICAgd3NwdHJbRENUU0laRSowXSA9IGRjdmFsOwotICAgICAgd3NwdHJbRENUU0laRSoxXSA9IGRjdmFsOwotICAgICAgd3NwdHJbRENUU0laRSoyXSA9IGRjdmFsOwotICAgICAgd3NwdHJbRENUU0laRSozXSA9IGRjdmFsOwotICAgICAgd3NwdHJbRENUU0laRSo0XSA9IGRjdmFsOwotICAgICAgd3NwdHJbRENUU0laRSo1XSA9IGRjdmFsOwotICAgICAgd3NwdHJbRENUU0laRSo2XSA9IGRjdmFsOwotICAgICAgd3NwdHJbRENUU0laRSo3XSA9IGRjdmFsOwotICAgICAgCi0gICAgICBpbnB0cisrOwkJCS8qIGFkdmFuY2UgcG9pbnRlcnMgdG8gbmV4dCBjb2x1bW4gKi8KLSAgICAgIHF1YW50cHRyKys7Ci0gICAgICB3c3B0cisrOwotICAgICAgY29udGludWU7Ci0gICAgfQotICAgIAotICAgIC8qIEV2ZW4gcGFydDogcmV2ZXJzZSB0aGUgZXZlbiBwYXJ0IG9mIHRoZSBmb3J3YXJkIERDVC4gKi8KLSAgICAvKiBUaGUgcm90YXRvciBpcyBzcXJ0KDIpKmMoLTYpLiAqLwotICAgIAotICAgIHoyID0gREVRVUFOVElaRShpbnB0cltEQ1RTSVpFKjJdLCBxdWFudHB0cltEQ1RTSVpFKjJdKTsKLSAgICB6MyA9IERFUVVBTlRJWkUoaW5wdHJbRENUU0laRSo2XSwgcXVhbnRwdHJbRENUU0laRSo2XSk7Ci0gICAgCi0gICAgejEgPSBNVUxUSVBMWSh6MiArIHozLCBGSVhfMF81NDExOTYxMDApOwotICAgIHRtcDIgPSB6MSArIE1VTFRJUExZKHoyLCBGSVhfMF83NjUzNjY4NjUpOwotICAgIHRtcDMgPSB6MSAtIE1VTFRJUExZKHozLCBGSVhfMV84NDc3NTkwNjUpOwotICAgIAotICAgIHoyID0gREVRVUFOVElaRShpbnB0cltEQ1RTSVpFKjBdLCBxdWFudHB0cltEQ1RTSVpFKjBdKTsKLSAgICB6MyA9IERFUVVBTlRJWkUoaW5wdHJbRENUU0laRSo0XSwgcXVhbnRwdHJbRENUU0laRSo0XSk7Ci0gICAgejIgPDw9IENPTlNUX0JJVFM7Ci0gICAgejMgPDw9IENPTlNUX0JJVFM7Ci0gICAgLyogQWRkIGZ1ZGdlIGZhY3RvciBoZXJlIGZvciBmaW5hbCBkZXNjYWxlLiAqLwotICAgIHoyICs9IE9ORSA8PCAoQ09OU1RfQklUUy1QQVNTMV9CSVRTLTEpOwotCi0gICAgdG1wMCA9IHoyICsgejM7Ci0gICAgdG1wMSA9IHoyIC0gejM7Ci0gICAgCi0gICAgdG1wMTAgPSB0bXAwICsgdG1wMjsKLSAgICB0bXAxMyA9IHRtcDAgLSB0bXAyOwotICAgIHRtcDExID0gdG1wMSArIHRtcDM7Ci0gICAgdG1wMTIgPSB0bXAxIC0gdG1wMzsKLSAgICAKLSAgICAvKiBPZGQgcGFydCBwZXIgZmlndXJlIDg7IHRoZSBtYXRyaXggaXMgdW5pdGFyeSBhbmQgaGVuY2UgaXRzCi0gICAgICogdHJhbnNwb3NlIGlzIGl0cyBpbnZlcnNlLiAgaTAuLmkzIGFyZSB5Nyx5NSx5Myx5MSByZXNwZWN0aXZlbHkuCi0gICAgICovCi0gICAgCi0gICAgdG1wMCA9IERFUVVBTlRJWkUoaW5wdHJbRENUU0laRSo3XSwgcXVhbnRwdHJbRENUU0laRSo3XSk7Ci0gICAgdG1wMSA9IERFUVVBTlRJWkUoaW5wdHJbRENUU0laRSo1XSwgcXVhbnRwdHJbRENUU0laRSo1XSk7Ci0gICAgdG1wMiA9IERFUVVBTlRJWkUoaW5wdHJbRENUU0laRSozXSwgcXVhbnRwdHJbRENUU0laRSozXSk7Ci0gICAgdG1wMyA9IERFUVVBTlRJWkUoaW5wdHJbRENUU0laRSoxXSwgcXVhbnRwdHJbRENUU0laRSoxXSk7Ci0gICAgCi0gICAgejIgPSB0bXAwICsgdG1wMjsKLSAgICB6MyA9IHRtcDEgKyB0bXAzOwotCi0gICAgejEgPSBNVUxUSVBMWSh6MiArIHozLCBGSVhfMV8xNzU4NzU2MDIpOyAvKiBzcXJ0KDIpICogYzMgKi8KLSAgICB6MiA9IE1VTFRJUExZKHoyLCAtIEZJWF8xXzk2MTU3MDU2MCk7IC8qIHNxcnQoMikgKiAoLWMzLWM1KSAqLwotICAgIHozID0gTVVMVElQTFkoejMsIC0gRklYXzBfMzkwMTgwNjQ0KTsgLyogc3FydCgyKSAqIChjNS1jMykgKi8KLSAgICB6MiArPSB6MTsKLSAgICB6MyArPSB6MTsKLQotICAgIHoxID0gTVVMVElQTFkodG1wMCArIHRtcDMsIC0gRklYXzBfODk5OTc2MjIzKTsgLyogc3FydCgyKSAqIChjNy1jMykgKi8KLSAgICB0bXAwID0gTVVMVElQTFkodG1wMCwgRklYXzBfMjk4NjMxMzM2KTsgLyogc3FydCgyKSAqICgtYzErYzMrYzUtYzcpICovCi0gICAgdG1wMyA9IE1VTFRJUExZKHRtcDMsIEZJWF8xXzUwMTMyMTExMCk7IC8qIHNxcnQoMikgKiAoIGMxK2MzLWM1LWM3KSAqLwotICAgIHRtcDAgKz0gejEgKyB6MjsKLSAgICB0bXAzICs9IHoxICsgejM7Ci0KLSAgICB6MSA9IE1VTFRJUExZKHRtcDEgKyB0bXAyLCAtIEZJWF8yXzU2MjkxNTQ0Nyk7IC8qIHNxcnQoMikgKiAoLWMxLWMzKSAqLwotICAgIHRtcDEgPSBNVUxUSVBMWSh0bXAxLCBGSVhfMl8wNTMxMTk4NjkpOyAvKiBzcXJ0KDIpICogKCBjMStjMy1jNStjNykgKi8KLSAgICB0bXAyID0gTVVMVElQTFkodG1wMiwgRklYXzNfMDcyNzExMDI2KTsgLyogc3FydCgyKSAqICggYzErYzMrYzUtYzcpICovCi0gICAgdG1wMSArPSB6MSArIHozOwotICAgIHRtcDIgKz0gejEgKyB6MjsKLSAgICAKLSAgICAvKiBGaW5hbCBvdXRwdXQgc3RhZ2U6IGlucHV0cyBhcmUgdG1wMTAuLnRtcDEzLCB0bXAwLi50bXAzICovCi0gICAgCi0gICAgd3NwdHJbRENUU0laRSowXSA9IChpbnQpIFJJR0hUX1NISUZUKHRtcDEwICsgdG1wMywgQ09OU1RfQklUUy1QQVNTMV9CSVRTKTsKLSAgICB3c3B0cltEQ1RTSVpFKjddID0gKGludCkgUklHSFRfU0hJRlQodG1wMTAgLSB0bXAzLCBDT05TVF9CSVRTLVBBU1MxX0JJVFMpOwotICAgIHdzcHRyW0RDVFNJWkUqMV0gPSAoaW50KSBSSUdIVF9TSElGVCh0bXAxMSArIHRtcDIsIENPTlNUX0JJVFMtUEFTUzFfQklUUyk7Ci0gICAgd3NwdHJbRENUU0laRSo2XSA9IChpbnQpIFJJR0hUX1NISUZUKHRtcDExIC0gdG1wMiwgQ09OU1RfQklUUy1QQVNTMV9CSVRTKTsKLSAgICB3c3B0cltEQ1RTSVpFKjJdID0gKGludCkgUklHSFRfU0hJRlQodG1wMTIgKyB0bXAxLCBDT05TVF9CSVRTLVBBU1MxX0JJVFMpOwotICAgIHdzcHRyW0RDVFNJWkUqNV0gPSAoaW50KSBSSUdIVF9TSElGVCh0bXAxMiAtIHRtcDEsIENPTlNUX0JJVFMtUEFTUzFfQklUUyk7Ci0gICAgd3NwdHJbRENUU0laRSozXSA9IChpbnQpIFJJR0hUX1NISUZUKHRtcDEzICsgdG1wMCwgQ09OU1RfQklUUy1QQVNTMV9CSVRTKTsKLSAgICB3c3B0cltEQ1RTSVpFKjRdID0gKGludCkgUklHSFRfU0hJRlQodG1wMTMgLSB0bXAwLCBDT05TVF9CSVRTLVBBU1MxX0JJVFMpOwotICAgIAotICAgIGlucHRyKys7CQkJLyogYWR2YW5jZSBwb2ludGVycyB0byBuZXh0IGNvbHVtbiAqLwotICAgIHF1YW50cHRyKys7Ci0gICAgd3NwdHIrKzsKLSAgfQotCi0gIC8qIFBhc3MgMjogcHJvY2VzcyA4IHJvd3MgZnJvbSB3b3JrIGFycmF5LCBzdG9yZSBpbnRvIG91dHB1dCBhcnJheS4KLSAgICogMTYtcG9pbnQgSURDVCBrZXJuZWwsIGNLIHJlcHJlc2VudHMgc3FydCgyKSAqIGNvcyhLKnBpLzMyKS4KLSAgICovCi0gIHdzcHRyID0gd29ya3NwYWNlOwotICBmb3IgKGN0ciA9IDA7IGN0ciA8IDg7IGN0cisrKSB7Ci0gICAgb3V0cHRyID0gb3V0cHV0X2J1ZltjdHJdICsgb3V0cHV0X2NvbDsKLQotICAgIC8qIEV2ZW4gcGFydCAqLwotCi0gICAgLyogQWRkIGZ1ZGdlIGZhY3RvciBoZXJlIGZvciBmaW5hbCBkZXNjYWxlLiAqLwotICAgIHRtcDAgPSAoSU5UMzIpIHdzcHRyWzBdICsgKE9ORSA8PCAoUEFTUzFfQklUUysyKSk7Ci0gICAgdG1wMCA8PD0gQ09OU1RfQklUUzsKLQotICAgIHoxID0gKElOVDMyKSB3c3B0cls0XTsKLSAgICB0bXAxID0gTVVMVElQTFkoejEsIEZJWCgxLjMwNjU2Mjk2NSkpOyAgICAgIC8qIGM0WzE2XSA9IGMyWzhdICovCi0gICAgdG1wMiA9IE1VTFRJUExZKHoxLCBGSVhfMF81NDExOTYxMDApOyAgICAgICAvKiBjMTJbMTZdID0gYzZbOF0gKi8KLQotICAgIHRtcDEwID0gdG1wMCArIHRtcDE7Ci0gICAgdG1wMTEgPSB0bXAwIC0gdG1wMTsKLSAgICB0bXAxMiA9IHRtcDAgKyB0bXAyOwotICAgIHRtcDEzID0gdG1wMCAtIHRtcDI7Ci0KLSAgICB6MSA9IChJTlQzMikgd3NwdHJbMl07Ci0gICAgejIgPSAoSU5UMzIpIHdzcHRyWzZdOwotICAgIHozID0gejEgLSB6MjsKLSAgICB6NCA9IE1VTFRJUExZKHozLCBGSVgoMC4yNzU4OTkzNzkpKTsgICAgICAgIC8qIGMxNFsxNl0gPSBjN1s4XSAqLwotICAgIHozID0gTVVMVElQTFkoejMsIEZJWCgxLjM4NzAzOTg0NSkpOyAgICAgICAgLyogYzJbMTZdID0gYzFbOF0gKi8KLQotICAgIHRtcDAgPSB6MyArIE1VTFRJUExZKHoyLCBGSVhfMl81NjI5MTU0NDcpOyAgLyogKGM2K2MyKVsxNl0gPSAoYzMrYzEpWzhdICovCi0gICAgdG1wMSA9IHo0ICsgTVVMVElQTFkoejEsIEZJWF8wXzg5OTk3NjIyMyk7ICAvKiAoYzYtYzE0KVsxNl0gPSAoYzMtYzcpWzhdICovCi0gICAgdG1wMiA9IHozIC0gTVVMVElQTFkoejEsIEZJWCgwLjYwMTM0NDg4NykpOyAvKiAoYzItYzEwKVsxNl0gPSAoYzEtYzUpWzhdICovCi0gICAgdG1wMyA9IHo0IC0gTVVMVElQTFkoejIsIEZJWCgwLjUwOTc5NTU3OSkpOyAvKiAoYzEwLWMxNClbMTZdID0gKGM1LWM3KVs4XSAqLwotCi0gICAgdG1wMjAgPSB0bXAxMCArIHRtcDA7Ci0gICAgdG1wMjcgPSB0bXAxMCAtIHRtcDA7Ci0gICAgdG1wMjEgPSB0bXAxMiArIHRtcDE7Ci0gICAgdG1wMjYgPSB0bXAxMiAtIHRtcDE7Ci0gICAgdG1wMjIgPSB0bXAxMyArIHRtcDI7Ci0gICAgdG1wMjUgPSB0bXAxMyAtIHRtcDI7Ci0gICAgdG1wMjMgPSB0bXAxMSArIHRtcDM7Ci0gICAgdG1wMjQgPSB0bXAxMSAtIHRtcDM7Ci0KLSAgICAvKiBPZGQgcGFydCAqLwotCi0gICAgejEgPSAoSU5UMzIpIHdzcHRyWzFdOwotICAgIHoyID0gKElOVDMyKSB3c3B0clszXTsKLSAgICB6MyA9IChJTlQzMikgd3NwdHJbNV07Ci0gICAgejQgPSAoSU5UMzIpIHdzcHRyWzddOwotCi0gICAgdG1wMTEgPSB6MSArIHozOwotCi0gICAgdG1wMSAgPSBNVUxUSVBMWSh6MSArIHoyLCBGSVgoMS4zNTMzMTgwMDEpKTsgICAvKiBjMyAqLwotICAgIHRtcDIgID0gTVVMVElQTFkodG1wMTEsICAgRklYKDEuMjQ3MjI1MDEzKSk7ICAgLyogYzUgKi8KLSAgICB0bXAzICA9IE1VTFRJUExZKHoxICsgejQsIEZJWCgxLjA5MzIwMTg2NykpOyAgIC8qIGM3ICovCi0gICAgdG1wMTAgPSBNVUxUSVBMWSh6MSAtIHo0LCBGSVgoMC44OTcxNjc1ODYpKTsgICAvKiBjOSAqLwotICAgIHRtcDExID0gTVVMVElQTFkodG1wMTEsICAgRklYKDAuNjY2NjU1NjU4KSk7ICAgLyogYzExICovCi0gICAgdG1wMTIgPSBNVUxUSVBMWSh6MSAtIHoyLCBGSVgoMC40MTA1MjQ1MjgpKTsgICAvKiBjMTMgKi8KLSAgICB0bXAwICA9IHRtcDEgKyB0bXAyICsgdG1wMyAtCi0JICAgIE1VTFRJUExZKHoxLCBGSVgoMi4yODYzNDExNDQpKTsgICAgICAgIC8qIGM3K2M1K2MzLWMxICovCi0gICAgdG1wMTMgPSB0bXAxMCArIHRtcDExICsgdG1wMTIgLQotCSAgICBNVUxUSVBMWSh6MSwgRklYKDEuODM1NzMwNjAzKSk7ICAgICAgICAvKiBjOStjMTErYzEzLWMxNSAqLwotICAgIHoxICAgID0gTVVMVElQTFkoejIgKyB6MywgRklYKDAuMTM4NjE3MTY5KSk7ICAgLyogYzE1ICovCi0gICAgdG1wMSAgKz0gejEgKyBNVUxUSVBMWSh6MiwgRklYKDAuMDcxODg4MDc0KSk7ICAvKiBjOStjMTEtYzMtYzE1ICovCi0gICAgdG1wMiAgKz0gejEgLSBNVUxUSVBMWSh6MywgRklYKDEuMTI1NzI2MDQ4KSk7ICAvKiBjNStjNytjMTUtYzMgKi8KLSAgICB6MSAgICA9IE1VTFRJUExZKHozIC0gejIsIEZJWCgxLjQwNzQwMzczOCkpOyAgIC8qIGMxICovCi0gICAgdG1wMTEgKz0gejEgLSBNVUxUSVBMWSh6MywgRklYKDAuNzY2MzY3MjgyKSk7ICAvKiBjMStjMTEtYzktYzEzICovCi0gICAgdG1wMTIgKz0gejEgKyBNVUxUSVBMWSh6MiwgRklYKDEuOTcxOTUxNDExKSk7ICAvKiBjMStjNStjMTMtYzcgKi8KLSAgICB6MiAgICArPSB6NDsKLSAgICB6MSAgICA9IE1VTFRJUExZKHoyLCAtIEZJWCgwLjY2NjY1NTY1OCkpOyAgICAgIC8qIC1jMTEgKi8KLSAgICB0bXAxICArPSB6MTsKLSAgICB0bXAzICArPSB6MSArIE1VTFRJUExZKHo0LCBGSVgoMS4wNjUzODg5NjIpKTsgIC8qIGMzK2MxMStjMTUtYzcgKi8KLSAgICB6MiAgICA9IE1VTFRJUExZKHoyLCAtIEZJWCgxLjI0NzIyNTAxMykpOyAgICAgIC8qIC1jNSAqLwotICAgIHRtcDEwICs9IHoyICsgTVVMVElQTFkoejQsIEZJWCgzLjE0MTI3MTgwOSkpOyAgLyogYzErYzUrYzktYzEzICovCi0gICAgdG1wMTIgKz0gejI7Ci0gICAgejIgICAgPSBNVUxUSVBMWSh6MyArIHo0LCAtIEZJWCgxLjM1MzMxODAwMSkpOyAvKiAtYzMgKi8KLSAgICB0bXAyICArPSB6MjsKLSAgICB0bXAzICArPSB6MjsKLSAgICB6MiAgICA9IE1VTFRJUExZKHo0IC0gejMsIEZJWCgwLjQxMDUyNDUyOCkpOyAgIC8qIGMxMyAqLwotICAgIHRtcDEwICs9IHoyOwotICAgIHRtcDExICs9IHoyOwotCi0gICAgLyogRmluYWwgb3V0cHV0IHN0YWdlICovCi0KLSAgICBvdXRwdHJbMF0gID0gcmFuZ2VfbGltaXRbKGludCkgUklHSFRfU0hJRlQodG1wMjAgKyB0bXAwLAotCQkJCQkgICAgICAgQ09OU1RfQklUUytQQVNTMV9CSVRTKzMpCi0JCQkgICAgICYgUkFOR0VfTUFTS107Ci0gICAgb3V0cHRyWzE1XSA9IHJhbmdlX2xpbWl0WyhpbnQpIFJJR0hUX1NISUZUKHRtcDIwIC0gdG1wMCwKLQkJCQkJICAgICAgIENPTlNUX0JJVFMrUEFTUzFfQklUUyszKQotCQkJICAgICAmIFJBTkdFX01BU0tdOwotICAgIG91dHB0clsxXSAgPSByYW5nZV9saW1pdFsoaW50KSBSSUdIVF9TSElGVCh0bXAyMSArIHRtcDEsCi0JCQkJCSAgICAgICBDT05TVF9CSVRTK1BBU1MxX0JJVFMrMykKLQkJCSAgICAgJiBSQU5HRV9NQVNLXTsKLSAgICBvdXRwdHJbMTRdID0gcmFuZ2VfbGltaXRbKGludCkgUklHSFRfU0hJRlQodG1wMjEgLSB0bXAxLAotCQkJCQkgICAgICAgQ09OU1RfQklUUytQQVNTMV9CSVRTKzMpCi0JCQkgICAgICYgUkFOR0VfTUFTS107Ci0gICAgb3V0cHRyWzJdICA9IHJhbmdlX2xpbWl0WyhpbnQpIFJJR0hUX1NISUZUKHRtcDIyICsgdG1wMiwKLQkJCQkJICAgICAgIENPTlNUX0JJVFMrUEFTUzFfQklUUyszKQotCQkJICAgICAmIFJBTkdFX01BU0tdOwotICAgIG91dHB0clsxM10gPSByYW5nZV9saW1pdFsoaW50KSBSSUdIVF9TSElGVCh0bXAyMiAtIHRtcDIsCi0JCQkJCSAgICAgICBDT05TVF9CSVRTK1BBU1MxX0JJVFMrMykKLQkJCSAgICAgJiBSQU5HRV9NQVNLXTsKLSAgICBvdXRwdHJbM10gID0gcmFuZ2VfbGltaXRbKGludCkgUklHSFRfU0hJRlQodG1wMjMgKyB0bXAzLAotCQkJCQkgICAgICAgQ09OU1RfQklUUytQQVNTMV9CSVRTKzMpCi0JCQkgICAgICYgUkFOR0VfTUFTS107Ci0gICAgb3V0cHRyWzEyXSA9IHJhbmdlX2xpbWl0WyhpbnQpIFJJR0hUX1NISUZUKHRtcDIzIC0gdG1wMywKLQkJCQkJICAgICAgIENPTlNUX0JJVFMrUEFTUzFfQklUUyszKQotCQkJICAgICAmIFJBTkdFX01BU0tdOwotICAgIG91dHB0cls0XSAgPSByYW5nZV9saW1pdFsoaW50KSBSSUdIVF9TSElGVCh0bXAyNCArIHRtcDEwLAotCQkJCQkgICAgICAgQ09OU1RfQklUUytQQVNTMV9CSVRTKzMpCi0JCQkgICAgICYgUkFOR0VfTUFTS107Ci0gICAgb3V0cHRyWzExXSA9IHJhbmdlX2xpbWl0WyhpbnQpIFJJR0hUX1NISUZUKHRtcDI0IC0gdG1wMTAsCi0JCQkJCSAgICAgICBDT05TVF9CSVRTK1BBU1MxX0JJVFMrMykKLQkJCSAgICAgJiBSQU5HRV9NQVNLXTsKLSAgICBvdXRwdHJbNV0gID0gcmFuZ2VfbGltaXRbKGludCkgUklHSFRfU0hJRlQodG1wMjUgKyB0bXAxMSwKLQkJCQkJICAgICAgIENPTlNUX0JJVFMrUEFTUzFfQklUUyszKQotCQkJICAgICAmIFJBTkdFX01BU0tdOwotICAgIG91dHB0clsxMF0gPSByYW5nZV9saW1pdFsoaW50KSBSSUdIVF9TSElGVCh0bXAyNSAtIHRtcDExLAotCQkJCQkgICAgICAgQ09OU1RfQklUUytQQVNTMV9CSVRTKzMpCi0JCQkgICAgICYgUkFOR0VfTUFTS107Ci0gICAgb3V0cHRyWzZdICA9IHJhbmdlX2xpbWl0WyhpbnQpIFJJR0hUX1NISUZUKHRtcDI2ICsgdG1wMTIsCi0JCQkJCSAgICAgICBDT05TVF9CSVRTK1BBU1MxX0JJVFMrMykKLQkJCSAgICAgJiBSQU5HRV9NQVNLXTsKLSAgICBvdXRwdHJbOV0gID0gcmFuZ2VfbGltaXRbKGludCkgUklHSFRfU0hJRlQodG1wMjYgLSB0bXAxMiwKLQkJCQkJICAgICAgIENPTlNUX0JJVFMrUEFTUzFfQklUUyszKQotCQkJICAgICAmIFJBTkdFX01BU0tdOwotICAgIG91dHB0cls3XSAgPSByYW5nZV9saW1pdFsoaW50KSBSSUdIVF9TSElGVCh0bXAyNyArIHRtcDEzLAotCQkJCQkgICAgICAgQ09OU1RfQklUUytQQVNTMV9CSVRTKzMpCi0JCQkgICAgICYgUkFOR0VfTUFTS107Ci0gICAgb3V0cHRyWzhdICA9IHJhbmdlX2xpbWl0WyhpbnQpIFJJR0hUX1NISUZUKHRtcDI3IC0gdG1wMTMsCi0JCQkJCSAgICAgICBDT05TVF9CSVRTK1BBU1MxX0JJVFMrMykKLQkJCSAgICAgJiBSQU5HRV9NQVNLXTsKLQotICAgIHdzcHRyICs9IDg7CQkvKiBhZHZhbmNlIHBvaW50ZXIgdG8gbmV4dCByb3cgKi8KLSAgfQotfQotCi0KLS8qCi0gKiBQZXJmb3JtIGRlcXVhbnRpemF0aW9uIGFuZCBpbnZlcnNlIERDVCBvbiBvbmUgYmxvY2sgb2YgY29lZmZpY2llbnRzLAotICogcHJvZHVjaW5nIGEgMTR4NyBvdXRwdXQgYmxvY2suCi0gKgotICogNy1wb2ludCBJRENUIGluIHBhc3MgMSAoY29sdW1ucyksIDE0LXBvaW50IGluIHBhc3MgMiAocm93cykuCi0gKi8KLQotR0xPQkFMKHZvaWQpCi1qcGVnX2lkY3RfMTR4NyAoal9kZWNvbXByZXNzX3B0ciBjaW5mbywganBlZ19jb21wb25lbnRfaW5mbyAqIGNvbXBwdHIsCi0JCUpDT0VGUFRSIGNvZWZfYmxvY2ssCi0JCUpTQU1QQVJSQVkgb3V0cHV0X2J1ZiwgSkRJTUVOU0lPTiBvdXRwdXRfY29sKQotewotICBJTlQzMiB0bXAxMCwgdG1wMTEsIHRtcDEyLCB0bXAxMywgdG1wMTQsIHRtcDE1LCB0bXAxNjsKLSAgSU5UMzIgdG1wMjAsIHRtcDIxLCB0bXAyMiwgdG1wMjMsIHRtcDI0LCB0bXAyNSwgdG1wMjY7Ci0gIElOVDMyIHoxLCB6MiwgejMsIHo0OwotICBKQ09FRlBUUiBpbnB0cjsKLSAgSVNMT1dfTVVMVF9UWVBFICogcXVhbnRwdHI7Ci0gIGludCAqIHdzcHRyOwotICBKU0FNUFJPVyBvdXRwdHI7Ci0gIEpTQU1QTEUgKnJhbmdlX2xpbWl0ID0gSURDVF9yYW5nZV9saW1pdChjaW5mbyk7Ci0gIGludCBjdHI7Ci0gIGludCB3b3Jrc3BhY2VbOCo3XTsJLyogYnVmZmVycyBkYXRhIGJldHdlZW4gcGFzc2VzICovCi0gIFNISUZUX1RFTVBTCi0KLSAgLyogUGFzcyAxOiBwcm9jZXNzIGNvbHVtbnMgZnJvbSBpbnB1dCwgc3RvcmUgaW50byB3b3JrIGFycmF5LgotICAgKiA3LXBvaW50IElEQ1Qga2VybmVsLCBjSyByZXByZXNlbnRzIHNxcnQoMikgKiBjb3MoSypwaS8xNCkuCi0gICAqLwotICBpbnB0ciA9IGNvZWZfYmxvY2s7Ci0gIHF1YW50cHRyID0gKElTTE9XX01VTFRfVFlQRSAqKSBjb21wcHRyLT5kY3RfdGFibGU7Ci0gIHdzcHRyID0gd29ya3NwYWNlOwotICBmb3IgKGN0ciA9IDA7IGN0ciA8IDg7IGN0cisrLCBpbnB0cisrLCBxdWFudHB0cisrLCB3c3B0cisrKSB7Ci0gICAgLyogRXZlbiBwYXJ0ICovCi0KLSAgICB0bXAyMyA9IERFUVVBTlRJWkUoaW5wdHJbRENUU0laRSowXSwgcXVhbnRwdHJbRENUU0laRSowXSk7Ci0gICAgdG1wMjMgPDw9IENPTlNUX0JJVFM7Ci0gICAgLyogQWRkIGZ1ZGdlIGZhY3RvciBoZXJlIGZvciBmaW5hbCBkZXNjYWxlLiAqLwotICAgIHRtcDIzICs9IE9ORSA8PCAoQ09OU1RfQklUUy1QQVNTMV9CSVRTLTEpOwotCi0gICAgejEgPSBERVFVQU5USVpFKGlucHRyW0RDVFNJWkUqMl0sIHF1YW50cHRyW0RDVFNJWkUqMl0pOwotICAgIHoyID0gREVRVUFOVElaRShpbnB0cltEQ1RTSVpFKjRdLCBxdWFudHB0cltEQ1RTSVpFKjRdKTsKLSAgICB6MyA9IERFUVVBTlRJWkUoaW5wdHJbRENUU0laRSo2XSwgcXVhbnRwdHJbRENUU0laRSo2XSk7Ci0KLSAgICB0bXAyMCA9IE1VTFRJUExZKHoyIC0gejMsIEZJWCgwLjg4MTc0NzczNCkpOyAgICAgICAvKiBjNCAqLwotICAgIHRtcDIyID0gTVVMVElQTFkoejEgLSB6MiwgRklYKDAuMzE0NjkyMTIzKSk7ICAgICAgIC8qIGM2ICovCi0gICAgdG1wMjEgPSB0bXAyMCArIHRtcDIyICsgdG1wMjMgLSBNVUxUSVBMWSh6MiwgRklYKDEuODQxMjE4MDAzKSk7IC8qIGMyK2M0LWM2ICovCi0gICAgdG1wMTAgPSB6MSArIHozOwotICAgIHoyIC09IHRtcDEwOwotICAgIHRtcDEwID0gTVVMVElQTFkodG1wMTAsIEZJWCgxLjI3NDE2MjM5MikpICsgdG1wMjM7IC8qIGMyICovCi0gICAgdG1wMjAgKz0gdG1wMTAgLSBNVUxUSVBMWSh6MywgRklYKDAuMDc3NzIyNTM2KSk7ICAgLyogYzItYzQtYzYgKi8KLSAgICB0bXAyMiArPSB0bXAxMCAtIE1VTFRJUExZKHoxLCBGSVgoMi40NzA2MDIyNDkpKTsgICAvKiBjMitjNCtjNiAqLwotICAgIHRtcDIzICs9IE1VTFRJUExZKHoyLCBGSVgoMS40MTQyMTM1NjIpKTsgICAgICAgICAgIC8qIGMwICovCi0KLSAgICAvKiBPZGQgcGFydCAqLwotCi0gICAgejEgPSBERVFVQU5USVpFKGlucHRyW0RDVFNJWkUqMV0sIHF1YW50cHRyW0RDVFNJWkUqMV0pOwotICAgIHoyID0gREVRVUFOVElaRShpbnB0cltEQ1RTSVpFKjNdLCBxdWFudHB0cltEQ1RTSVpFKjNdKTsKLSAgICB6MyA9IERFUVVBTlRJWkUoaW5wdHJbRENUU0laRSo1XSwgcXVhbnRwdHJbRENUU0laRSo1XSk7Ci0KLSAgICB0bXAxMSA9IE1VTFRJUExZKHoxICsgejIsIEZJWCgwLjkzNTQxNDM0NykpOyAgICAgICAvKiAoYzMrYzEtYzUpLzIgKi8KLSAgICB0bXAxMiA9IE1VTFRJUExZKHoxIC0gejIsIEZJWCgwLjE3MDI2MjMzOSkpOyAgICAgICAvKiAoYzMrYzUtYzEpLzIgKi8KLSAgICB0bXAxMCA9IHRtcDExIC0gdG1wMTI7Ci0gICAgdG1wMTEgKz0gdG1wMTI7Ci0gICAgdG1wMTIgPSBNVUxUSVBMWSh6MiArIHozLCAtIEZJWCgxLjM3ODc1NjI3NikpOyAgICAgLyogLWMxICovCi0gICAgdG1wMTEgKz0gdG1wMTI7Ci0gICAgejIgPSBNVUxUSVBMWSh6MSArIHozLCBGSVgoMC42MTM2MDQyNjgpKTsgICAgICAgICAgLyogYzUgKi8KLSAgICB0bXAxMCArPSB6MjsKLSAgICB0bXAxMiArPSB6MiArIE1VTFRJUExZKHozLCBGSVgoMS44NzA4Mjg2OTMpKTsgICAgICAvKiBjMytjMS1jNSAqLwotCi0gICAgLyogRmluYWwgb3V0cHV0IHN0YWdlICovCi0KLSAgICB3c3B0cls4KjBdID0gKGludCkgUklHSFRfU0hJRlQodG1wMjAgKyB0bXAxMCwgQ09OU1RfQklUUy1QQVNTMV9CSVRTKTsKLSAgICB3c3B0cls4KjZdID0gKGludCkgUklHSFRfU0hJRlQodG1wMjAgLSB0bXAxMCwgQ09OU1RfQklUUy1QQVNTMV9CSVRTKTsKLSAgICB3c3B0cls4KjFdID0gKGludCkgUklHSFRfU0hJRlQodG1wMjEgKyB0bXAxMSwgQ09OU1RfQklUUy1QQVNTMV9CSVRTKTsKLSAgICB3c3B0cls4KjVdID0gKGludCkgUklHSFRfU0hJRlQodG1wMjEgLSB0bXAxMSwgQ09OU1RfQklUUy1QQVNTMV9CSVRTKTsKLSAgICB3c3B0cls4KjJdID0gKGludCkgUklHSFRfU0hJRlQodG1wMjIgKyB0bXAxMiwgQ09OU1RfQklUUy1QQVNTMV9CSVRTKTsKLSAgICB3c3B0cls4KjRdID0gKGludCkgUklHSFRfU0hJRlQodG1wMjIgLSB0bXAxMiwgQ09OU1RfQklUUy1QQVNTMV9CSVRTKTsKLSAgICB3c3B0cls4KjNdID0gKGludCkgUklHSFRfU0hJRlQodG1wMjMsIENPTlNUX0JJVFMtUEFTUzFfQklUUyk7Ci0gIH0KLQotICAvKiBQYXNzIDI6IHByb2Nlc3MgNyByb3dzIGZyb20gd29yayBhcnJheSwgc3RvcmUgaW50byBvdXRwdXQgYXJyYXkuCi0gICAqIDE0LXBvaW50IElEQ1Qga2VybmVsLCBjSyByZXByZXNlbnRzIHNxcnQoMikgKiBjb3MoSypwaS8yOCkuCi0gICAqLwotICB3c3B0ciA9IHdvcmtzcGFjZTsKLSAgZm9yIChjdHIgPSAwOyBjdHIgPCA3OyBjdHIrKykgewotICAgIG91dHB0ciA9IG91dHB1dF9idWZbY3RyXSArIG91dHB1dF9jb2w7Ci0KLSAgICAvKiBFdmVuIHBhcnQgKi8KLQotICAgIC8qIEFkZCBmdWRnZSBmYWN0b3IgaGVyZSBmb3IgZmluYWwgZGVzY2FsZS4gKi8KLSAgICB6MSA9IChJTlQzMikgd3NwdHJbMF0gKyAoT05FIDw8IChQQVNTMV9CSVRTKzIpKTsKLSAgICB6MSA8PD0gQ09OU1RfQklUUzsKLSAgICB6NCA9IChJTlQzMikgd3NwdHJbNF07Ci0gICAgejIgPSBNVUxUSVBMWSh6NCwgRklYKDEuMjc0MTYyMzkyKSk7ICAgICAgICAgLyogYzQgKi8KLSAgICB6MyA9IE1VTFRJUExZKHo0LCBGSVgoMC4zMTQ2OTIxMjMpKTsgICAgICAgICAvKiBjMTIgKi8KLSAgICB6NCA9IE1VTFRJUExZKHo0LCBGSVgoMC44ODE3NDc3MzQpKTsgICAgICAgICAvKiBjOCAqLwotCi0gICAgdG1wMTAgPSB6MSArIHoyOwotICAgIHRtcDExID0gejEgKyB6MzsKLSAgICB0bXAxMiA9IHoxIC0gejQ7Ci0KLSAgICB0bXAyMyA9IHoxIC0gKCh6MiArIHozIC0gejQpIDw8IDEpOyAgICAgICAgICAvKiBjMCA9IChjNCtjMTItYzgpKjIgKi8KLQotICAgIHoxID0gKElOVDMyKSB3c3B0clsyXTsKLSAgICB6MiA9IChJTlQzMikgd3NwdHJbNl07Ci0KLSAgICB6MyA9IE1VTFRJUExZKHoxICsgejIsIEZJWCgxLjEwNTY3NjY4NikpOyAgICAvKiBjNiAqLwotCi0gICAgdG1wMTMgPSB6MyArIE1VTFRJUExZKHoxLCBGSVgoMC4yNzMwNzk1OTApKTsgLyogYzItYzYgKi8KLSAgICB0bXAxNCA9IHozIC0gTVVMVElQTFkoejIsIEZJWCgxLjcxOTI4MDk1NCkpOyAvKiBjNitjMTAgKi8KLSAgICB0bXAxNSA9IE1VTFRJUExZKHoxLCBGSVgoMC42MTM2MDQyNjgpKSAtICAgICAvKiBjMTAgKi8KLQkgICAgTVVMVElQTFkoejIsIEZJWCgxLjM3ODc1NjI3NikpOyAgICAgIC8qIGMyICovCi0KLSAgICB0bXAyMCA9IHRtcDEwICsgdG1wMTM7Ci0gICAgdG1wMjYgPSB0bXAxMCAtIHRtcDEzOwotICAgIHRtcDIxID0gdG1wMTEgKyB0bXAxNDsKLSAgICB0bXAyNSA9IHRtcDExIC0gdG1wMTQ7Ci0gICAgdG1wMjIgPSB0bXAxMiArIHRtcDE1OwotICAgIHRtcDI0ID0gdG1wMTIgLSB0bXAxNTsKLQotICAgIC8qIE9kZCBwYXJ0ICovCi0KLSAgICB6MSA9IChJTlQzMikgd3NwdHJbMV07Ci0gICAgejIgPSAoSU5UMzIpIHdzcHRyWzNdOwotICAgIHozID0gKElOVDMyKSB3c3B0cls1XTsKLSAgICB6NCA9IChJTlQzMikgd3NwdHJbN107Ci0gICAgejQgPDw9IENPTlNUX0JJVFM7Ci0KLSAgICB0bXAxNCA9IHoxICsgejM7Ci0gICAgdG1wMTEgPSBNVUxUSVBMWSh6MSArIHoyLCBGSVgoMS4zMzQ4NTI2MDcpKTsgICAgICAgICAgIC8qIGMzICovCi0gICAgdG1wMTIgPSBNVUxUSVBMWSh0bXAxNCwgRklYKDEuMTk3NDQ4ODQ2KSk7ICAgICAgICAgICAgIC8qIGM1ICovCi0gICAgdG1wMTAgPSB0bXAxMSArIHRtcDEyICsgejQgLSBNVUxUSVBMWSh6MSwgRklYKDEuMTI2OTgwMTY5KSk7IC8qIGMzK2M1LWMxICovCi0gICAgdG1wMTQgPSBNVUxUSVBMWSh0bXAxNCwgRklYKDAuNzUyNDA2OTc4KSk7ICAgICAgICAgICAgIC8qIGM5ICovCi0gICAgdG1wMTYgPSB0bXAxNCAtIE1VTFRJUExZKHoxLCBGSVgoMS4wNjExNTA0MjYpKTsgICAgICAgIC8qIGM5K2MxMS1jMTMgKi8KLSAgICB6MSAgICAtPSB6MjsKLSAgICB0bXAxNSA9IE1VTFRJUExZKHoxLCBGSVgoMC40NjcwODUxMjkpKSAtIHo0OyAgICAgICAgICAgLyogYzExICovCi0gICAgdG1wMTYgKz0gdG1wMTU7Ci0gICAgdG1wMTMgPSBNVUxUSVBMWSh6MiArIHozLCAtIEZJWCgwLjE1ODM0MTY4MSkpIC0gejQ7ICAgIC8qIC1jMTMgKi8KLSAgICB0bXAxMSArPSB0bXAxMyAtIE1VTFRJUExZKHoyLCBGSVgoMC40MjQxMDM5NDgpKTsgICAgICAgLyogYzMtYzktYzEzICovCi0gICAgdG1wMTIgKz0gdG1wMTMgLSBNVUxUSVBMWSh6MywgRklYKDIuMzczOTU5NzczKSk7ICAgICAgIC8qIGMzK2M1LWMxMyAqLwotICAgIHRtcDEzID0gTVVMVElQTFkoejMgLSB6MiwgRklYKDEuNDA1MzIxMjg0KSk7ICAgICAgICAgICAvKiBjMSAqLwotICAgIHRtcDE0ICs9IHRtcDEzICsgejQgLSBNVUxUSVBMWSh6MywgRklYKDEuNjkwNjQzMTMzNCkpOyAvKiBjMStjOS1jMTEgKi8KLSAgICB0bXAxNSArPSB0bXAxMyArIE1VTFRJUExZKHoyLCBGSVgoMC42NzQ5NTc1NjcpKTsgICAgICAgLyogYzErYzExLWM1ICovCi0KLSAgICB0bXAxMyA9ICgoejEgLSB6MykgPDwgQ09OU1RfQklUUykgKyB6NDsKLQotICAgIC8qIEZpbmFsIG91dHB1dCBzdGFnZSAqLwotCi0gICAgb3V0cHRyWzBdICA9IHJhbmdlX2xpbWl0WyhpbnQpIFJJR0hUX1NISUZUKHRtcDIwICsgdG1wMTAsCi0JCQkJCSAgICAgICBDT05TVF9CSVRTK1BBU1MxX0JJVFMrMykKLQkJCSAgICAgJiBSQU5HRV9NQVNLXTsKLSAgICBvdXRwdHJbMTNdID0gcmFuZ2VfbGltaXRbKGludCkgUklHSFRfU0hJRlQodG1wMjAgLSB0bXAxMCwKLQkJCQkJICAgICAgIENPTlNUX0JJVFMrUEFTUzFfQklUUyszKQotCQkJICAgICAmIFJBTkdFX01BU0tdOwotICAgIG91dHB0clsxXSAgPSByYW5nZV9saW1pdFsoaW50KSBSSUdIVF9TSElGVCh0bXAyMSArIHRtcDExLAotCQkJCQkgICAgICAgQ09OU1RfQklUUytQQVNTMV9CSVRTKzMpCi0JCQkgICAgICYgUkFOR0VfTUFTS107Ci0gICAgb3V0cHRyWzEyXSA9IHJhbmdlX2xpbWl0WyhpbnQpIFJJR0hUX1NISUZUKHRtcDIxIC0gdG1wMTEsCi0JCQkJCSAgICAgICBDT05TVF9CSVRTK1BBU1MxX0JJVFMrMykKLQkJCSAgICAgJiBSQU5HRV9NQVNLXTsKLSAgICBvdXRwdHJbMl0gID0gcmFuZ2VfbGltaXRbKGludCkgUklHSFRfU0hJRlQodG1wMjIgKyB0bXAxMiwKLQkJCQkJICAgICAgIENPTlNUX0JJVFMrUEFTUzFfQklUUyszKQotCQkJICAgICAmIFJBTkdFX01BU0tdOwotICAgIG91dHB0clsxMV0gPSByYW5nZV9saW1pdFsoaW50KSBSSUdIVF9TSElGVCh0bXAyMiAtIHRtcDEyLAotCQkJCQkgICAgICAgQ09OU1RfQklUUytQQVNTMV9CSVRTKzMpCi0JCQkgICAgICYgUkFOR0VfTUFTS107Ci0gICAgb3V0cHRyWzNdICA9IHJhbmdlX2xpbWl0WyhpbnQpIFJJR0hUX1NISUZUKHRtcDIzICsgdG1wMTMsCi0JCQkJCSAgICAgICBDT05TVF9CSVRTK1BBU1MxX0JJVFMrMykKLQkJCSAgICAgJiBSQU5HRV9NQVNLXTsKLSAgICBvdXRwdHJbMTBdID0gcmFuZ2VfbGltaXRbKGludCkgUklHSFRfU0hJRlQodG1wMjMgLSB0bXAxMywKLQkJCQkJICAgICAgIENPTlNUX0JJVFMrUEFTUzFfQklUUyszKQotCQkJICAgICAmIFJBTkdFX01BU0tdOwotICAgIG91dHB0cls0XSAgPSByYW5nZV9saW1pdFsoaW50KSBSSUdIVF9TSElGVCh0bXAyNCArIHRtcDE0LAotCQkJCQkgICAgICAgQ09OU1RfQklUUytQQVNTMV9CSVRTKzMpCi0JCQkgICAgICYgUkFOR0VfTUFTS107Ci0gICAgb3V0cHRyWzldICA9IHJhbmdlX2xpbWl0WyhpbnQpIFJJR0hUX1NISUZUKHRtcDI0IC0gdG1wMTQsCi0JCQkJCSAgICAgICBDT05TVF9CSVRTK1BBU1MxX0JJVFMrMykKLQkJCSAgICAgJiBSQU5HRV9NQVNLXTsKLSAgICBvdXRwdHJbNV0gID0gcmFuZ2VfbGltaXRbKGludCkgUklHSFRfU0hJRlQodG1wMjUgKyB0bXAxNSwKLQkJCQkJICAgICAgIENPTlNUX0JJVFMrUEFTUzFfQklUUyszKQotCQkJICAgICAmIFJBTkdFX01BU0tdOwotICAgIG91dHB0cls4XSAgPSByYW5nZV9saW1pdFsoaW50KSBSSUdIVF9TSElGVCh0bXAyNSAtIHRtcDE1LAotCQkJCQkgICAgICAgQ09OU1RfQklUUytQQVNTMV9CSVRTKzMpCi0JCQkgICAgICYgUkFOR0VfTUFTS107Ci0gICAgb3V0cHRyWzZdICA9IHJhbmdlX2xpbWl0WyhpbnQpIFJJR0hUX1NISUZUKHRtcDI2ICsgdG1wMTYsCi0JCQkJCSAgICAgICBDT05TVF9CSVRTK1BBU1MxX0JJVFMrMykKLQkJCSAgICAgJiBSQU5HRV9NQVNLXTsKLSAgICBvdXRwdHJbN10gID0gcmFuZ2VfbGltaXRbKGludCkgUklHSFRfU0hJRlQodG1wMjYgLSB0bXAxNiwKLQkJCQkJICAgICAgIENPTlNUX0JJVFMrUEFTUzFfQklUUyszKQotCQkJICAgICAmIFJBTkdFX01BU0tdOwotCi0gICAgd3NwdHIgKz0gODsJCS8qIGFkdmFuY2UgcG9pbnRlciB0byBuZXh0IHJvdyAqLwotICB9Ci19Ci0KLQotLyoKLSAqIFBlcmZvcm0gZGVxdWFudGl6YXRpb24gYW5kIGludmVyc2UgRENUIG9uIG9uZSBibG9jayBvZiBjb2VmZmljaWVudHMsCi0gKiBwcm9kdWNpbmcgYSAxMng2IG91dHB1dCBibG9jay4KLSAqCi0gKiA2LXBvaW50IElEQ1QgaW4gcGFzcyAxIChjb2x1bW5zKSwgMTItcG9pbnQgaW4gcGFzcyAyIChyb3dzKS4KLSAqLwotCi1HTE9CQUwodm9pZCkKLWpwZWdfaWRjdF8xMng2IChqX2RlY29tcHJlc3NfcHRyIGNpbmZvLCBqcGVnX2NvbXBvbmVudF9pbmZvICogY29tcHB0ciwKLQkJSkNPRUZQVFIgY29lZl9ibG9jaywKLQkJSlNBTVBBUlJBWSBvdXRwdXRfYnVmLCBKRElNRU5TSU9OIG91dHB1dF9jb2wpCi17Ci0gIElOVDMyIHRtcDEwLCB0bXAxMSwgdG1wMTIsIHRtcDEzLCB0bXAxNCwgdG1wMTU7Ci0gIElOVDMyIHRtcDIwLCB0bXAyMSwgdG1wMjIsIHRtcDIzLCB0bXAyNCwgdG1wMjU7Ci0gIElOVDMyIHoxLCB6MiwgejMsIHo0OwotICBKQ09FRlBUUiBpbnB0cjsKLSAgSVNMT1dfTVVMVF9UWVBFICogcXVhbnRwdHI7Ci0gIGludCAqIHdzcHRyOwotICBKU0FNUFJPVyBvdXRwdHI7Ci0gIEpTQU1QTEUgKnJhbmdlX2xpbWl0ID0gSURDVF9yYW5nZV9saW1pdChjaW5mbyk7Ci0gIGludCBjdHI7Ci0gIGludCB3b3Jrc3BhY2VbOCo2XTsJLyogYnVmZmVycyBkYXRhIGJldHdlZW4gcGFzc2VzICovCi0gIFNISUZUX1RFTVBTCi0KLSAgLyogUGFzcyAxOiBwcm9jZXNzIGNvbHVtbnMgZnJvbSBpbnB1dCwgc3RvcmUgaW50byB3b3JrIGFycmF5LgotICAgKiA2LXBvaW50IElEQ1Qga2VybmVsLCBjSyByZXByZXNlbnRzIHNxcnQoMikgKiBjb3MoSypwaS8xMikuCi0gICAqLwotICBpbnB0ciA9IGNvZWZfYmxvY2s7Ci0gIHF1YW50cHRyID0gKElTTE9XX01VTFRfVFlQRSAqKSBjb21wcHRyLT5kY3RfdGFibGU7Ci0gIHdzcHRyID0gd29ya3NwYWNlOwotICBmb3IgKGN0ciA9IDA7IGN0ciA8IDg7IGN0cisrLCBpbnB0cisrLCBxdWFudHB0cisrLCB3c3B0cisrKSB7Ci0gICAgLyogRXZlbiBwYXJ0ICovCi0KLSAgICB0bXAxMCA9IERFUVVBTlRJWkUoaW5wdHJbRENUU0laRSowXSwgcXVhbnRwdHJbRENUU0laRSowXSk7Ci0gICAgdG1wMTAgPDw9IENPTlNUX0JJVFM7Ci0gICAgLyogQWRkIGZ1ZGdlIGZhY3RvciBoZXJlIGZvciBmaW5hbCBkZXNjYWxlLiAqLwotICAgIHRtcDEwICs9IE9ORSA8PCAoQ09OU1RfQklUUy1QQVNTMV9CSVRTLTEpOwotICAgIHRtcDEyID0gREVRVUFOVElaRShpbnB0cltEQ1RTSVpFKjRdLCBxdWFudHB0cltEQ1RTSVpFKjRdKTsKLSAgICB0bXAyMCA9IE1VTFRJUExZKHRtcDEyLCBGSVgoMC43MDcxMDY3ODEpKTsgICAvKiBjNCAqLwotICAgIHRtcDExID0gdG1wMTAgKyB0bXAyMDsKLSAgICB0bXAyMSA9IFJJR0hUX1NISUZUKHRtcDEwIC0gdG1wMjAgLSB0bXAyMCwgQ09OU1RfQklUUy1QQVNTMV9CSVRTKTsKLSAgICB0bXAyMCA9IERFUVVBTlRJWkUoaW5wdHJbRENUU0laRSoyXSwgcXVhbnRwdHJbRENUU0laRSoyXSk7Ci0gICAgdG1wMTAgPSBNVUxUSVBMWSh0bXAyMCwgRklYKDEuMjI0NzQ0ODcxKSk7ICAgLyogYzIgKi8KLSAgICB0bXAyMCA9IHRtcDExICsgdG1wMTA7Ci0gICAgdG1wMjIgPSB0bXAxMSAtIHRtcDEwOwotCi0gICAgLyogT2RkIHBhcnQgKi8KLQotICAgIHoxID0gREVRVUFOVElaRShpbnB0cltEQ1RTSVpFKjFdLCBxdWFudHB0cltEQ1RTSVpFKjFdKTsKLSAgICB6MiA9IERFUVVBTlRJWkUoaW5wdHJbRENUU0laRSozXSwgcXVhbnRwdHJbRENUU0laRSozXSk7Ci0gICAgejMgPSBERVFVQU5USVpFKGlucHRyW0RDVFNJWkUqNV0sIHF1YW50cHRyW0RDVFNJWkUqNV0pOwotICAgIHRtcDExID0gTVVMVElQTFkoejEgKyB6MywgRklYKDAuMzY2MDI1NDA0KSk7IC8qIGM1ICovCi0gICAgdG1wMTAgPSB0bXAxMSArICgoejEgKyB6MikgPDwgQ09OU1RfQklUUyk7Ci0gICAgdG1wMTIgPSB0bXAxMSArICgoejMgLSB6MikgPDwgQ09OU1RfQklUUyk7Ci0gICAgdG1wMTEgPSAoejEgLSB6MiAtIHozKSA8PCBQQVNTMV9CSVRTOwotCi0gICAgLyogRmluYWwgb3V0cHV0IHN0YWdlICovCi0KLSAgICB3c3B0cls4KjBdID0gKGludCkgUklHSFRfU0hJRlQodG1wMjAgKyB0bXAxMCwgQ09OU1RfQklUUy1QQVNTMV9CSVRTKTsKLSAgICB3c3B0cls4KjVdID0gKGludCkgUklHSFRfU0hJRlQodG1wMjAgLSB0bXAxMCwgQ09OU1RfQklUUy1QQVNTMV9CSVRTKTsKLSAgICB3c3B0cls4KjFdID0gKGludCkgKHRtcDIxICsgdG1wMTEpOwotICAgIHdzcHRyWzgqNF0gPSAoaW50KSAodG1wMjEgLSB0bXAxMSk7Ci0gICAgd3NwdHJbOCoyXSA9IChpbnQpIFJJR0hUX1NISUZUKHRtcDIyICsgdG1wMTIsIENPTlNUX0JJVFMtUEFTUzFfQklUUyk7Ci0gICAgd3NwdHJbOCozXSA9IChpbnQpIFJJR0hUX1NISUZUKHRtcDIyIC0gdG1wMTIsIENPTlNUX0JJVFMtUEFTUzFfQklUUyk7Ci0gIH0KLQotICAvKiBQYXNzIDI6IHByb2Nlc3MgNiByb3dzIGZyb20gd29yayBhcnJheSwgc3RvcmUgaW50byBvdXRwdXQgYXJyYXkuCi0gICAqIDEyLXBvaW50IElEQ1Qga2VybmVsLCBjSyByZXByZXNlbnRzIHNxcnQoMikgKiBjb3MoSypwaS8yNCkuCi0gICAqLwotICB3c3B0ciA9IHdvcmtzcGFjZTsKLSAgZm9yIChjdHIgPSAwOyBjdHIgPCA2OyBjdHIrKykgewotICAgIG91dHB0ciA9IG91dHB1dF9idWZbY3RyXSArIG91dHB1dF9jb2w7Ci0KLSAgICAvKiBFdmVuIHBhcnQgKi8KLQotICAgIC8qIEFkZCBmdWRnZSBmYWN0b3IgaGVyZSBmb3IgZmluYWwgZGVzY2FsZS4gKi8KLSAgICB6MyA9IChJTlQzMikgd3NwdHJbMF0gKyAoT05FIDw8IChQQVNTMV9CSVRTKzIpKTsKLSAgICB6MyA8PD0gQ09OU1RfQklUUzsKLQotICAgIHo0ID0gKElOVDMyKSB3c3B0cls0XTsKLSAgICB6NCA9IE1VTFRJUExZKHo0LCBGSVgoMS4yMjQ3NDQ4NzEpKTsgLyogYzQgKi8KLQotICAgIHRtcDEwID0gejMgKyB6NDsKLSAgICB0bXAxMSA9IHozIC0gejQ7Ci0KLSAgICB6MSA9IChJTlQzMikgd3NwdHJbMl07Ci0gICAgejQgPSBNVUxUSVBMWSh6MSwgRklYKDEuMzY2MDI1NDA0KSk7IC8qIGMyICovCi0gICAgejEgPDw9IENPTlNUX0JJVFM7Ci0gICAgejIgPSAoSU5UMzIpIHdzcHRyWzZdOwotICAgIHoyIDw8PSBDT05TVF9CSVRTOwotCi0gICAgdG1wMTIgPSB6MSAtIHoyOwotCi0gICAgdG1wMjEgPSB6MyArIHRtcDEyOwotICAgIHRtcDI0ID0gejMgLSB0bXAxMjsKLQotICAgIHRtcDEyID0gejQgKyB6MjsKLQotICAgIHRtcDIwID0gdG1wMTAgKyB0bXAxMjsKLSAgICB0bXAyNSA9IHRtcDEwIC0gdG1wMTI7Ci0KLSAgICB0bXAxMiA9IHo0IC0gejEgLSB6MjsKLQotICAgIHRtcDIyID0gdG1wMTEgKyB0bXAxMjsKLSAgICB0bXAyMyA9IHRtcDExIC0gdG1wMTI7Ci0KLSAgICAvKiBPZGQgcGFydCAqLwotCi0gICAgejEgPSAoSU5UMzIpIHdzcHRyWzFdOwotICAgIHoyID0gKElOVDMyKSB3c3B0clszXTsKLSAgICB6MyA9IChJTlQzMikgd3NwdHJbNV07Ci0gICAgejQgPSAoSU5UMzIpIHdzcHRyWzddOwotCi0gICAgdG1wMTEgPSBNVUxUSVBMWSh6MiwgRklYKDEuMzA2NTYyOTY1KSk7ICAgICAgICAgICAgICAgICAgLyogYzMgKi8KLSAgICB0bXAxNCA9IE1VTFRJUExZKHoyLCAtIEZJWF8wXzU0MTE5NjEwMCk7ICAgICAgICAgICAgICAgICAvKiAtYzkgKi8KLQotICAgIHRtcDEwID0gejEgKyB6MzsKLSAgICB0bXAxNSA9IE1VTFRJUExZKHRtcDEwICsgejQsIEZJWCgwLjg2MDkxODY2OSkpOyAgICAgICAgICAvKiBjNyAqLwotICAgIHRtcDEyID0gdG1wMTUgKyBNVUxUSVBMWSh0bXAxMCwgRklYKDAuMjYxMDUyMzg0KSk7ICAgICAgIC8qIGM1LWM3ICovCi0gICAgdG1wMTAgPSB0bXAxMiArIHRtcDExICsgTVVMVElQTFkoejEsIEZJWCgwLjI4MDE0MzcxNikpOyAgLyogYzEtYzUgKi8KLSAgICB0bXAxMyA9IE1VTFRJUExZKHozICsgejQsIC0gRklYKDEuMDQ1NTEwNTgwKSk7ICAgICAgICAgICAvKiAtKGM3K2MxMSkgKi8KLSAgICB0bXAxMiArPSB0bXAxMyArIHRtcDE0IC0gTVVMVElQTFkoejMsIEZJWCgxLjQ3ODU3NTI0MikpOyAvKiBjMStjNS1jNy1jMTEgKi8KLSAgICB0bXAxMyArPSB0bXAxNSAtIHRtcDExICsgTVVMVElQTFkoejQsIEZJWCgxLjU4NjcwNjY4MSkpOyAvKiBjMStjMTEgKi8KLSAgICB0bXAxNSArPSB0bXAxNCAtIE1VTFRJUExZKHoxLCBGSVgoMC42NzYzMjY3NTgpKSAtICAgICAgICAvKiBjNy1jMTEgKi8KLQkgICAgIE1VTFRJUExZKHo0LCBGSVgoMS45ODI4ODk3MjMpKTsgICAgICAgICAgICAgICAgIC8qIGM1K2M3ICovCi0KLSAgICB6MSAtPSB6NDsKLSAgICB6MiAtPSB6MzsKLSAgICB6MyA9IE1VTFRJUExZKHoxICsgejIsIEZJWF8wXzU0MTE5NjEwMCk7ICAgICAgICAgICAgICAgICAvKiBjOSAqLwotICAgIHRtcDExID0gejMgKyBNVUxUSVBMWSh6MSwgRklYXzBfNzY1MzY2ODY1KTsgICAgICAgICAgICAgIC8qIGMzLWM5ICovCi0gICAgdG1wMTQgPSB6MyAtIE1VTFRJUExZKHoyLCBGSVhfMV84NDc3NTkwNjUpOyAgICAgICAgICAgICAgLyogYzMrYzkgKi8KLQotICAgIC8qIEZpbmFsIG91dHB1dCBzdGFnZSAqLwotCi0gICAgb3V0cHRyWzBdICA9IHJhbmdlX2xpbWl0WyhpbnQpIFJJR0hUX1NISUZUKHRtcDIwICsgdG1wMTAsCi0JCQkJCSAgICAgICBDT05TVF9CSVRTK1BBU1MxX0JJVFMrMykKLQkJCSAgICAgJiBSQU5HRV9NQVNLXTsKLSAgICBvdXRwdHJbMTFdID0gcmFuZ2VfbGltaXRbKGludCkgUklHSFRfU0hJRlQodG1wMjAgLSB0bXAxMCwKLQkJCQkJICAgICAgIENPTlNUX0JJVFMrUEFTUzFfQklUUyszKQotCQkJICAgICAmIFJBTkdFX01BU0tdOwotICAgIG91dHB0clsxXSAgPSByYW5nZV9saW1pdFsoaW50KSBSSUdIVF9TSElGVCh0bXAyMSArIHRtcDExLAotCQkJCQkgICAgICAgQ09OU1RfQklUUytQQVNTMV9CSVRTKzMpCi0JCQkgICAgICYgUkFOR0VfTUFTS107Ci0gICAgb3V0cHRyWzEwXSA9IHJhbmdlX2xpbWl0WyhpbnQpIFJJR0hUX1NISUZUKHRtcDIxIC0gdG1wMTEsCi0JCQkJCSAgICAgICBDT05TVF9CSVRTK1BBU1MxX0JJVFMrMykKLQkJCSAgICAgJiBSQU5HRV9NQVNLXTsKLSAgICBvdXRwdHJbMl0gID0gcmFuZ2VfbGltaXRbKGludCkgUklHSFRfU0hJRlQodG1wMjIgKyB0bXAxMiwKLQkJCQkJICAgICAgIENPTlNUX0JJVFMrUEFTUzFfQklUUyszKQotCQkJICAgICAmIFJBTkdFX01BU0tdOwotICAgIG91dHB0cls5XSAgPSByYW5nZV9saW1pdFsoaW50KSBSSUdIVF9TSElGVCh0bXAyMiAtIHRtcDEyLAotCQkJCQkgICAgICAgQ09OU1RfQklUUytQQVNTMV9CSVRTKzMpCi0JCQkgICAgICYgUkFOR0VfTUFTS107Ci0gICAgb3V0cHRyWzNdICA9IHJhbmdlX2xpbWl0WyhpbnQpIFJJR0hUX1NISUZUKHRtcDIzICsgdG1wMTMsCi0JCQkJCSAgICAgICBDT05TVF9CSVRTK1BBU1MxX0JJVFMrMykKLQkJCSAgICAgJiBSQU5HRV9NQVNLXTsKLSAgICBvdXRwdHJbOF0gID0gcmFuZ2VfbGltaXRbKGludCkgUklHSFRfU0hJRlQodG1wMjMgLSB0bXAxMywKLQkJCQkJICAgICAgIENPTlNUX0JJVFMrUEFTUzFfQklUUyszKQotCQkJICAgICAmIFJBTkdFX01BU0tdOwotICAgIG91dHB0cls0XSAgPSByYW5nZV9saW1pdFsoaW50KSBSSUdIVF9TSElGVCh0bXAyNCArIHRtcDE0LAotCQkJCQkgICAgICAgQ09OU1RfQklUUytQQVNTMV9CSVRTKzMpCi0JCQkgICAgICYgUkFOR0VfTUFTS107Ci0gICAgb3V0cHRyWzddICA9IHJhbmdlX2xpbWl0WyhpbnQpIFJJR0hUX1NISUZUKHRtcDI0IC0gdG1wMTQsCi0JCQkJCSAgICAgICBDT05TVF9CSVRTK1BBU1MxX0JJVFMrMykKLQkJCSAgICAgJiBSQU5HRV9NQVNLXTsKLSAgICBvdXRwdHJbNV0gID0gcmFuZ2VfbGltaXRbKGludCkgUklHSFRfU0hJRlQodG1wMjUgKyB0bXAxNSwKLQkJCQkJICAgICAgIENPTlNUX0JJVFMrUEFTUzFfQklUUyszKQotCQkJICAgICAmIFJBTkdFX01BU0tdOwotICAgIG91dHB0cls2XSAgPSByYW5nZV9saW1pdFsoaW50KSBSSUdIVF9TSElGVCh0bXAyNSAtIHRtcDE1LAotCQkJCQkgICAgICAgQ09OU1RfQklUUytQQVNTMV9CSVRTKzMpCi0JCQkgICAgICYgUkFOR0VfTUFTS107Ci0KLSAgICB3c3B0ciArPSA4OwkJLyogYWR2YW5jZSBwb2ludGVyIHRvIG5leHQgcm93ICovCi0gIH0KLX0KLQotCi0vKgotICogUGVyZm9ybSBkZXF1YW50aXphdGlvbiBhbmQgaW52ZXJzZSBEQ1Qgb24gb25lIGJsb2NrIG9mIGNvZWZmaWNpZW50cywKLSAqIHByb2R1Y2luZyBhIDEweDUgb3V0cHV0IGJsb2NrLgotICoKLSAqIDUtcG9pbnQgSURDVCBpbiBwYXNzIDEgKGNvbHVtbnMpLCAxMC1wb2ludCBpbiBwYXNzIDIgKHJvd3MpLgotICovCi0KLUdMT0JBTCh2b2lkKQotanBlZ19pZGN0XzEweDUgKGpfZGVjb21wcmVzc19wdHIgY2luZm8sIGpwZWdfY29tcG9uZW50X2luZm8gKiBjb21wcHRyLAotCQlKQ09FRlBUUiBjb2VmX2Jsb2NrLAotCQlKU0FNUEFSUkFZIG91dHB1dF9idWYsIEpESU1FTlNJT04gb3V0cHV0X2NvbCkKLXsKLSAgSU5UMzIgdG1wMTAsIHRtcDExLCB0bXAxMiwgdG1wMTMsIHRtcDE0OwotICBJTlQzMiB0bXAyMCwgdG1wMjEsIHRtcDIyLCB0bXAyMywgdG1wMjQ7Ci0gIElOVDMyIHoxLCB6MiwgejMsIHo0OwotICBKQ09FRlBUUiBpbnB0cjsKLSAgSVNMT1dfTVVMVF9UWVBFICogcXVhbnRwdHI7Ci0gIGludCAqIHdzcHRyOwotICBKU0FNUFJPVyBvdXRwdHI7Ci0gIEpTQU1QTEUgKnJhbmdlX2xpbWl0ID0gSURDVF9yYW5nZV9saW1pdChjaW5mbyk7Ci0gIGludCBjdHI7Ci0gIGludCB3b3Jrc3BhY2VbOCo1XTsJLyogYnVmZmVycyBkYXRhIGJldHdlZW4gcGFzc2VzICovCi0gIFNISUZUX1RFTVBTCi0KLSAgLyogUGFzcyAxOiBwcm9jZXNzIGNvbHVtbnMgZnJvbSBpbnB1dCwgc3RvcmUgaW50byB3b3JrIGFycmF5LgotICAgKiA1LXBvaW50IElEQ1Qga2VybmVsLCBjSyByZXByZXNlbnRzIHNxcnQoMikgKiBjb3MoSypwaS8xMCkuCi0gICAqLwotICBpbnB0ciA9IGNvZWZfYmxvY2s7Ci0gIHF1YW50cHRyID0gKElTTE9XX01VTFRfVFlQRSAqKSBjb21wcHRyLT5kY3RfdGFibGU7Ci0gIHdzcHRyID0gd29ya3NwYWNlOwotICBmb3IgKGN0ciA9IDA7IGN0ciA8IDg7IGN0cisrLCBpbnB0cisrLCBxdWFudHB0cisrLCB3c3B0cisrKSB7Ci0gICAgLyogRXZlbiBwYXJ0ICovCi0KLSAgICB0bXAxMiA9IERFUVVBTlRJWkUoaW5wdHJbRENUU0laRSowXSwgcXVhbnRwdHJbRENUU0laRSowXSk7Ci0gICAgdG1wMTIgPDw9IENPTlNUX0JJVFM7Ci0gICAgLyogQWRkIGZ1ZGdlIGZhY3RvciBoZXJlIGZvciBmaW5hbCBkZXNjYWxlLiAqLwotICAgIHRtcDEyICs9IE9ORSA8PCAoQ09OU1RfQklUUy1QQVNTMV9CSVRTLTEpOwotICAgIHRtcDEzID0gREVRVUFOVElaRShpbnB0cltEQ1RTSVpFKjJdLCBxdWFudHB0cltEQ1RTSVpFKjJdKTsKLSAgICB0bXAxNCA9IERFUVVBTlRJWkUoaW5wdHJbRENUU0laRSo0XSwgcXVhbnRwdHJbRENUU0laRSo0XSk7Ci0gICAgejEgPSBNVUxUSVBMWSh0bXAxMyArIHRtcDE0LCBGSVgoMC43OTA1Njk0MTUpKTsgLyogKGMyK2M0KS8yICovCi0gICAgejIgPSBNVUxUSVBMWSh0bXAxMyAtIHRtcDE0LCBGSVgoMC4zNTM1NTMzOTEpKTsgLyogKGMyLWM0KS8yICovCi0gICAgejMgPSB0bXAxMiArIHoyOwotICAgIHRtcDEwID0gejMgKyB6MTsKLSAgICB0bXAxMSA9IHozIC0gejE7Ci0gICAgdG1wMTIgLT0gejIgPDwgMjsKLQotICAgIC8qIE9kZCBwYXJ0ICovCi0KLSAgICB6MiA9IERFUVVBTlRJWkUoaW5wdHJbRENUU0laRSoxXSwgcXVhbnRwdHJbRENUU0laRSoxXSk7Ci0gICAgejMgPSBERVFVQU5USVpFKGlucHRyW0RDVFNJWkUqM10sIHF1YW50cHRyW0RDVFNJWkUqM10pOwotCi0gICAgejEgPSBNVUxUSVBMWSh6MiArIHozLCBGSVgoMC44MzEyNTM4NzYpKTsgICAgICAgLyogYzMgKi8KLSAgICB0bXAxMyA9IHoxICsgTVVMVElQTFkoejIsIEZJWCgwLjUxMzc0MzE0OCkpOyAgICAvKiBjMS1jMyAqLwotICAgIHRtcDE0ID0gejEgLSBNVUxUSVBMWSh6MywgRklYKDIuMTc2MjUwODk5KSk7ICAgIC8qIGMxK2MzICovCi0KLSAgICAvKiBGaW5hbCBvdXRwdXQgc3RhZ2UgKi8KLQotICAgIHdzcHRyWzgqMF0gPSAoaW50KSBSSUdIVF9TSElGVCh0bXAxMCArIHRtcDEzLCBDT05TVF9CSVRTLVBBU1MxX0JJVFMpOwotICAgIHdzcHRyWzgqNF0gPSAoaW50KSBSSUdIVF9TSElGVCh0bXAxMCAtIHRtcDEzLCBDT05TVF9CSVRTLVBBU1MxX0JJVFMpOwotICAgIHdzcHRyWzgqMV0gPSAoaW50KSBSSUdIVF9TSElGVCh0bXAxMSArIHRtcDE0LCBDT05TVF9CSVRTLVBBU1MxX0JJVFMpOwotICAgIHdzcHRyWzgqM10gPSAoaW50KSBSSUdIVF9TSElGVCh0bXAxMSAtIHRtcDE0LCBDT05TVF9CSVRTLVBBU1MxX0JJVFMpOwotICAgIHdzcHRyWzgqMl0gPSAoaW50KSBSSUdIVF9TSElGVCh0bXAxMiwgQ09OU1RfQklUUy1QQVNTMV9CSVRTKTsKLSAgfQotCi0gIC8qIFBhc3MgMjogcHJvY2VzcyA1IHJvd3MgZnJvbSB3b3JrIGFycmF5LCBzdG9yZSBpbnRvIG91dHB1dCBhcnJheS4KLSAgICogMTAtcG9pbnQgSURDVCBrZXJuZWwsIGNLIHJlcHJlc2VudHMgc3FydCgyKSAqIGNvcyhLKnBpLzIwKS4KLSAgICovCi0gIHdzcHRyID0gd29ya3NwYWNlOwotICBmb3IgKGN0ciA9IDA7IGN0ciA8IDU7IGN0cisrKSB7Ci0gICAgb3V0cHRyID0gb3V0cHV0X2J1ZltjdHJdICsgb3V0cHV0X2NvbDsKLQotICAgIC8qIEV2ZW4gcGFydCAqLwotCi0gICAgLyogQWRkIGZ1ZGdlIGZhY3RvciBoZXJlIGZvciBmaW5hbCBkZXNjYWxlLiAqLwotICAgIHozID0gKElOVDMyKSB3c3B0clswXSArIChPTkUgPDwgKFBBU1MxX0JJVFMrMikpOwotICAgIHozIDw8PSBDT05TVF9CSVRTOwotICAgIHo0ID0gKElOVDMyKSB3c3B0cls0XTsKLSAgICB6MSA9IE1VTFRJUExZKHo0LCBGSVgoMS4xNDQxMjI4MDYpKTsgICAgICAgICAvKiBjNCAqLwotICAgIHoyID0gTVVMVElQTFkoejQsIEZJWCgwLjQzNzAxNjAyNCkpOyAgICAgICAgIC8qIGM4ICovCi0gICAgdG1wMTAgPSB6MyArIHoxOwotICAgIHRtcDExID0gejMgLSB6MjsKLQotICAgIHRtcDIyID0gejMgLSAoKHoxIC0gejIpIDw8IDEpOyAgICAgICAgICAgICAgIC8qIGMwID0gKGM0LWM4KSoyICovCi0KLSAgICB6MiA9IChJTlQzMikgd3NwdHJbMl07Ci0gICAgejMgPSAoSU5UMzIpIHdzcHRyWzZdOwotCi0gICAgejEgPSBNVUxUSVBMWSh6MiArIHozLCBGSVgoMC44MzEyNTM4NzYpKTsgICAgLyogYzYgKi8KLSAgICB0bXAxMiA9IHoxICsgTVVMVElQTFkoejIsIEZJWCgwLjUxMzc0MzE0OCkpOyAvKiBjMi1jNiAqLwotICAgIHRtcDEzID0gejEgLSBNVUxUSVBMWSh6MywgRklYKDIuMTc2MjUwODk5KSk7IC8qIGMyK2M2ICovCi0KLSAgICB0bXAyMCA9IHRtcDEwICsgdG1wMTI7Ci0gICAgdG1wMjQgPSB0bXAxMCAtIHRtcDEyOwotICAgIHRtcDIxID0gdG1wMTEgKyB0bXAxMzsKLSAgICB0bXAyMyA9IHRtcDExIC0gdG1wMTM7Ci0KLSAgICAvKiBPZGQgcGFydCAqLwotCi0gICAgejEgPSAoSU5UMzIpIHdzcHRyWzFdOwotICAgIHoyID0gKElOVDMyKSB3c3B0clszXTsKLSAgICB6MyA9IChJTlQzMikgd3NwdHJbNV07Ci0gICAgejMgPDw9IENPTlNUX0JJVFM7Ci0gICAgejQgPSAoSU5UMzIpIHdzcHRyWzddOwotCi0gICAgdG1wMTEgPSB6MiArIHo0OwotICAgIHRtcDEzID0gejIgLSB6NDsKLQotICAgIHRtcDEyID0gTVVMVElQTFkodG1wMTMsIEZJWCgwLjMwOTAxNjk5NCkpOyAgICAgICAgLyogKGMzLWM3KS8yICovCi0KLSAgICB6MiA9IE1VTFRJUExZKHRtcDExLCBGSVgoMC45NTEwNTY1MTYpKTsgICAgICAgICAgIC8qIChjMytjNykvMiAqLwotICAgIHo0ID0gejMgKyB0bXAxMjsKLQotICAgIHRtcDEwID0gTVVMVElQTFkoejEsIEZJWCgxLjM5NjgwMjI0NykpICsgejIgKyB6NDsgLyogYzEgKi8KLSAgICB0bXAxNCA9IE1VTFRJUExZKHoxLCBGSVgoMC4yMjEyMzE3NDIpKSAtIHoyICsgejQ7IC8qIGM5ICovCi0KLSAgICB6MiA9IE1VTFRJUExZKHRtcDExLCBGSVgoMC41ODc3ODUyNTIpKTsgICAgICAgICAgIC8qIChjMS1jOSkvMiAqLwotICAgIHo0ID0gejMgLSB0bXAxMiAtICh0bXAxMyA8PCAoQ09OU1RfQklUUyAtIDEpKTsKLQotICAgIHRtcDEyID0gKCh6MSAtIHRtcDEzKSA8PCBDT05TVF9CSVRTKSAtIHozOwotCi0gICAgdG1wMTEgPSBNVUxUSVBMWSh6MSwgRklYKDEuMjYwMDczNTExKSkgLSB6MiAtIHo0OyAvKiBjMyAqLwotICAgIHRtcDEzID0gTVVMVElQTFkoejEsIEZJWCgwLjY0MjAzOTUyMikpIC0gejIgKyB6NDsgLyogYzcgKi8KLQotICAgIC8qIEZpbmFsIG91dHB1dCBzdGFnZSAqLwotCi0gICAgb3V0cHRyWzBdID0gcmFuZ2VfbGltaXRbKGludCkgUklHSFRfU0hJRlQodG1wMjAgKyB0bXAxMCwKLQkJCQkJICAgICAgQ09OU1RfQklUUytQQVNTMV9CSVRTKzMpCi0JCQkgICAgJiBSQU5HRV9NQVNLXTsKLSAgICBvdXRwdHJbOV0gPSByYW5nZV9saW1pdFsoaW50KSBSSUdIVF9TSElGVCh0bXAyMCAtIHRtcDEwLAotCQkJCQkgICAgICBDT05TVF9CSVRTK1BBU1MxX0JJVFMrMykKLQkJCSAgICAmIFJBTkdFX01BU0tdOwotICAgIG91dHB0clsxXSA9IHJhbmdlX2xpbWl0WyhpbnQpIFJJR0hUX1NISUZUKHRtcDIxICsgdG1wMTEsCi0JCQkJCSAgICAgIENPTlNUX0JJVFMrUEFTUzFfQklUUyszKQotCQkJICAgICYgUkFOR0VfTUFTS107Ci0gICAgb3V0cHRyWzhdID0gcmFuZ2VfbGltaXRbKGludCkgUklHSFRfU0hJRlQodG1wMjEgLSB0bXAxMSwKLQkJCQkJICAgICAgQ09OU1RfQklUUytQQVNTMV9CSVRTKzMpCi0JCQkgICAgJiBSQU5HRV9NQVNLXTsKLSAgICBvdXRwdHJbMl0gPSByYW5nZV9saW1pdFsoaW50KSBSSUdIVF9TSElGVCh0bXAyMiArIHRtcDEyLAotCQkJCQkgICAgICBDT05TVF9CSVRTK1BBU1MxX0JJVFMrMykKLQkJCSAgICAmIFJBTkdFX01BU0tdOwotICAgIG91dHB0cls3XSA9IHJhbmdlX2xpbWl0WyhpbnQpIFJJR0hUX1NISUZUKHRtcDIyIC0gdG1wMTIsCi0JCQkJCSAgICAgIENPTlNUX0JJVFMrUEFTUzFfQklUUyszKQotCQkJICAgICYgUkFOR0VfTUFTS107Ci0gICAgb3V0cHRyWzNdID0gcmFuZ2VfbGltaXRbKGludCkgUklHSFRfU0hJRlQodG1wMjMgKyB0bXAxMywKLQkJCQkJICAgICAgQ09OU1RfQklUUytQQVNTMV9CSVRTKzMpCi0JCQkgICAgJiBSQU5HRV9NQVNLXTsKLSAgICBvdXRwdHJbNl0gPSByYW5nZV9saW1pdFsoaW50KSBSSUdIVF9TSElGVCh0bXAyMyAtIHRtcDEzLAotCQkJCQkgICAgICBDT05TVF9CSVRTK1BBU1MxX0JJVFMrMykKLQkJCSAgICAmIFJBTkdFX01BU0tdOwotICAgIG91dHB0cls0XSA9IHJhbmdlX2xpbWl0WyhpbnQpIFJJR0hUX1NISUZUKHRtcDI0ICsgdG1wMTQsCi0JCQkJCSAgICAgIENPTlNUX0JJVFMrUEFTUzFfQklUUyszKQotCQkJICAgICYgUkFOR0VfTUFTS107Ci0gICAgb3V0cHRyWzVdID0gcmFuZ2VfbGltaXRbKGludCkgUklHSFRfU0hJRlQodG1wMjQgLSB0bXAxNCwKLQkJCQkJICAgICAgQ09OU1RfQklUUytQQVNTMV9CSVRTKzMpCi0JCQkgICAgJiBSQU5HRV9NQVNLXTsKLQotICAgIHdzcHRyICs9IDg7CQkvKiBhZHZhbmNlIHBvaW50ZXIgdG8gbmV4dCByb3cgKi8KLSAgfQotfQotCi0KLS8qCi0gKiBQZXJmb3JtIGRlcXVhbnRpemF0aW9uIGFuZCBpbnZlcnNlIERDVCBvbiBvbmUgYmxvY2sgb2YgY29lZmZpY2llbnRzLAotICogcHJvZHVjaW5nIGEgOHg0IG91dHB1dCBibG9jay4KLSAqCi0gKiA0LXBvaW50IElEQ1QgaW4gcGFzcyAxIChjb2x1bW5zKSwgOC1wb2ludCBpbiBwYXNzIDIgKHJvd3MpLgotICovCi0KLUdMT0JBTCh2b2lkKQotanBlZ19pZGN0Xzh4NCAoal9kZWNvbXByZXNzX3B0ciBjaW5mbywganBlZ19jb21wb25lbnRfaW5mbyAqIGNvbXBwdHIsCi0JICAgICAgIEpDT0VGUFRSIGNvZWZfYmxvY2ssCi0JICAgICAgIEpTQU1QQVJSQVkgb3V0cHV0X2J1ZiwgSkRJTUVOU0lPTiBvdXRwdXRfY29sKQotewotICBJTlQzMiB0bXAwLCB0bXAxLCB0bXAyLCB0bXAzOwotICBJTlQzMiB0bXAxMCwgdG1wMTEsIHRtcDEyLCB0bXAxMzsKLSAgSU5UMzIgejEsIHoyLCB6MzsKLSAgSkNPRUZQVFIgaW5wdHI7Ci0gIElTTE9XX01VTFRfVFlQRSAqIHF1YW50cHRyOwotICBpbnQgKiB3c3B0cjsKLSAgSlNBTVBST1cgb3V0cHRyOwotICBKU0FNUExFICpyYW5nZV9saW1pdCA9IElEQ1RfcmFuZ2VfbGltaXQoY2luZm8pOwotICBpbnQgY3RyOwotICBpbnQgd29ya3NwYWNlWzgqNF07CS8qIGJ1ZmZlcnMgZGF0YSBiZXR3ZWVuIHBhc3NlcyAqLwotICBTSElGVF9URU1QUwotCi0gIC8qIFBhc3MgMTogcHJvY2VzcyBjb2x1bW5zIGZyb20gaW5wdXQsIHN0b3JlIGludG8gd29yayBhcnJheS4KLSAgICogNC1wb2ludCBJRENUIGtlcm5lbCwgY0sgcmVwcmVzZW50cyBzcXJ0KDIpICogY29zKEsqcGkvMTYpLgotICAgKi8KLSAgaW5wdHIgPSBjb2VmX2Jsb2NrOwotICBxdWFudHB0ciA9IChJU0xPV19NVUxUX1RZUEUgKikgY29tcHB0ci0+ZGN0X3RhYmxlOwotICB3c3B0ciA9IHdvcmtzcGFjZTsKLSAgZm9yIChjdHIgPSAwOyBjdHIgPCA4OyBjdHIrKywgaW5wdHIrKywgcXVhbnRwdHIrKywgd3NwdHIrKykgewotICAgIC8qIEV2ZW4gcGFydCAqLwotCi0gICAgdG1wMCA9IERFUVVBTlRJWkUoaW5wdHJbRENUU0laRSowXSwgcXVhbnRwdHJbRENUU0laRSowXSk7Ci0gICAgdG1wMiA9IERFUVVBTlRJWkUoaW5wdHJbRENUU0laRSoyXSwgcXVhbnRwdHJbRENUU0laRSoyXSk7Ci0KLSAgICB0bXAxMCA9ICh0bXAwICsgdG1wMikgPDwgUEFTUzFfQklUUzsKLSAgICB0bXAxMiA9ICh0bXAwIC0gdG1wMikgPDwgUEFTUzFfQklUUzsKLQotICAgIC8qIE9kZCBwYXJ0ICovCi0gICAgLyogU2FtZSByb3RhdGlvbiBhcyBpbiB0aGUgZXZlbiBwYXJ0IG9mIHRoZSA4eDggTEwmTSBJRENUICovCi0KLSAgICB6MiA9IERFUVVBTlRJWkUoaW5wdHJbRENUU0laRSoxXSwgcXVhbnRwdHJbRENUU0laRSoxXSk7Ci0gICAgejMgPSBERVFVQU5USVpFKGlucHRyW0RDVFNJWkUqM10sIHF1YW50cHRyW0RDVFNJWkUqM10pOwotCi0gICAgejEgPSBNVUxUSVBMWSh6MiArIHozLCBGSVhfMF81NDExOTYxMDApOyAgICAgICAgICAgICAgIC8qIGM2ICovCi0gICAgLyogQWRkIGZ1ZGdlIGZhY3RvciBoZXJlIGZvciBmaW5hbCBkZXNjYWxlLiAqLwotICAgIHoxICs9IE9ORSA8PCAoQ09OU1RfQklUUy1QQVNTMV9CSVRTLTEpOwotICAgIHRtcDAgPSBSSUdIVF9TSElGVCh6MSArIE1VTFRJUExZKHoyLCBGSVhfMF83NjUzNjY4NjUpLCAvKiBjMi1jNiAqLwotCQkgICAgICAgQ09OU1RfQklUUy1QQVNTMV9CSVRTKTsKLSAgICB0bXAyID0gUklHSFRfU0hJRlQoejEgLSBNVUxUSVBMWSh6MywgRklYXzFfODQ3NzU5MDY1KSwgLyogYzIrYzYgKi8KLQkJICAgICAgIENPTlNUX0JJVFMtUEFTUzFfQklUUyk7Ci0KLSAgICAvKiBGaW5hbCBvdXRwdXQgc3RhZ2UgKi8KLQotICAgIHdzcHRyWzgqMF0gPSAoaW50KSAodG1wMTAgKyB0bXAwKTsKLSAgICB3c3B0cls4KjNdID0gKGludCkgKHRtcDEwIC0gdG1wMCk7Ci0gICAgd3NwdHJbOCoxXSA9IChpbnQpICh0bXAxMiArIHRtcDIpOwotICAgIHdzcHRyWzgqMl0gPSAoaW50KSAodG1wMTIgLSB0bXAyKTsKLSAgfQotCi0gIC8qIFBhc3MgMjogcHJvY2VzcyByb3dzIGZyb20gd29yayBhcnJheSwgc3RvcmUgaW50byBvdXRwdXQgYXJyYXkuICovCi0gIC8qIE5vdGUgdGhhdCB3ZSBtdXN0IGRlc2NhbGUgdGhlIHJlc3VsdHMgYnkgYSBmYWN0b3Igb2YgOCA9PSAyKiozLCAqLwotICAvKiBhbmQgYWxzbyB1bmRvIHRoZSBQQVNTMV9CSVRTIHNjYWxpbmcuICovCi0KLSAgd3NwdHIgPSB3b3Jrc3BhY2U7Ci0gIGZvciAoY3RyID0gMDsgY3RyIDwgNDsgY3RyKyspIHsKLSAgICBvdXRwdHIgPSBvdXRwdXRfYnVmW2N0cl0gKyBvdXRwdXRfY29sOwotCi0gICAgLyogRXZlbiBwYXJ0OiByZXZlcnNlIHRoZSBldmVuIHBhcnQgb2YgdGhlIGZvcndhcmQgRENULiAqLwotICAgIC8qIFRoZSByb3RhdG9yIGlzIHNxcnQoMikqYygtNikuICovCi0KLSAgICB6MiA9IChJTlQzMikgd3NwdHJbMl07Ci0gICAgejMgPSAoSU5UMzIpIHdzcHRyWzZdOwotICAgIAotICAgIHoxID0gTVVMVElQTFkoejIgKyB6MywgRklYXzBfNTQxMTk2MTAwKTsKLSAgICB0bXAyID0gejEgKyBNVUxUSVBMWSh6MiwgRklYXzBfNzY1MzY2ODY1KTsKLSAgICB0bXAzID0gejEgLSBNVUxUSVBMWSh6MywgRklYXzFfODQ3NzU5MDY1KTsKLSAgICAKLSAgICAvKiBBZGQgZnVkZ2UgZmFjdG9yIGhlcmUgZm9yIGZpbmFsIGRlc2NhbGUuICovCi0gICAgejIgPSAoSU5UMzIpIHdzcHRyWzBdICsgKE9ORSA8PCAoUEFTUzFfQklUUysyKSk7Ci0gICAgejMgPSAoSU5UMzIpIHdzcHRyWzRdOwotICAgIAotICAgIHRtcDAgPSAoejIgKyB6MykgPDwgQ09OU1RfQklUUzsKLSAgICB0bXAxID0gKHoyIC0gejMpIDw8IENPTlNUX0JJVFM7Ci0gICAgCi0gICAgdG1wMTAgPSB0bXAwICsgdG1wMjsKLSAgICB0bXAxMyA9IHRtcDAgLSB0bXAyOwotICAgIHRtcDExID0gdG1wMSArIHRtcDM7Ci0gICAgdG1wMTIgPSB0bXAxIC0gdG1wMzsKLQotICAgIC8qIE9kZCBwYXJ0IHBlciBmaWd1cmUgODsgdGhlIG1hdHJpeCBpcyB1bml0YXJ5IGFuZCBoZW5jZSBpdHMKLSAgICAgKiB0cmFuc3Bvc2UgaXMgaXRzIGludmVyc2UuICBpMC4uaTMgYXJlIHk3LHk1LHkzLHkxIHJlc3BlY3RpdmVseS4KLSAgICAgKi8KLQotICAgIHRtcDAgPSAoSU5UMzIpIHdzcHRyWzddOwotICAgIHRtcDEgPSAoSU5UMzIpIHdzcHRyWzVdOwotICAgIHRtcDIgPSAoSU5UMzIpIHdzcHRyWzNdOwotICAgIHRtcDMgPSAoSU5UMzIpIHdzcHRyWzFdOwotCi0gICAgejIgPSB0bXAwICsgdG1wMjsKLSAgICB6MyA9IHRtcDEgKyB0bXAzOwotCi0gICAgejEgPSBNVUxUSVBMWSh6MiArIHozLCBGSVhfMV8xNzU4NzU2MDIpOyAvKiBzcXJ0KDIpICogYzMgKi8KLSAgICB6MiA9IE1VTFRJUExZKHoyLCAtIEZJWF8xXzk2MTU3MDU2MCk7IC8qIHNxcnQoMikgKiAoLWMzLWM1KSAqLwotICAgIHozID0gTVVMVElQTFkoejMsIC0gRklYXzBfMzkwMTgwNjQ0KTsgLyogc3FydCgyKSAqIChjNS1jMykgKi8KLSAgICB6MiArPSB6MTsKLSAgICB6MyArPSB6MTsKLQotICAgIHoxID0gTVVMVElQTFkodG1wMCArIHRtcDMsIC0gRklYXzBfODk5OTc2MjIzKTsgLyogc3FydCgyKSAqIChjNy1jMykgKi8KLSAgICB0bXAwID0gTVVMVElQTFkodG1wMCwgRklYXzBfMjk4NjMxMzM2KTsgLyogc3FydCgyKSAqICgtYzErYzMrYzUtYzcpICovCi0gICAgdG1wMyA9IE1VTFRJUExZKHRtcDMsIEZJWF8xXzUwMTMyMTExMCk7IC8qIHNxcnQoMikgKiAoIGMxK2MzLWM1LWM3KSAqLwotICAgIHRtcDAgKz0gejEgKyB6MjsKLSAgICB0bXAzICs9IHoxICsgejM7Ci0KLSAgICB6MSA9IE1VTFRJUExZKHRtcDEgKyB0bXAyLCAtIEZJWF8yXzU2MjkxNTQ0Nyk7IC8qIHNxcnQoMikgKiAoLWMxLWMzKSAqLwotICAgIHRtcDEgPSBNVUxUSVBMWSh0bXAxLCBGSVhfMl8wNTMxMTk4NjkpOyAvKiBzcXJ0KDIpICogKCBjMStjMy1jNStjNykgKi8KLSAgICB0bXAyID0gTVVMVElQTFkodG1wMiwgRklYXzNfMDcyNzExMDI2KTsgLyogc3FydCgyKSAqICggYzErYzMrYzUtYzcpICovCi0gICAgdG1wMSArPSB6MSArIHozOwotICAgIHRtcDIgKz0gejEgKyB6MjsKLQotICAgIC8qIEZpbmFsIG91dHB1dCBzdGFnZTogaW5wdXRzIGFyZSB0bXAxMC4udG1wMTMsIHRtcDAuLnRtcDMgKi8KLQotICAgIG91dHB0clswXSA9IHJhbmdlX2xpbWl0WyhpbnQpIFJJR0hUX1NISUZUKHRtcDEwICsgdG1wMywKLQkJCQkJICAgICAgQ09OU1RfQklUUytQQVNTMV9CSVRTKzMpCi0JCQkgICAgJiBSQU5HRV9NQVNLXTsKLSAgICBvdXRwdHJbN10gPSByYW5nZV9saW1pdFsoaW50KSBSSUdIVF9TSElGVCh0bXAxMCAtIHRtcDMsCi0JCQkJCSAgICAgIENPTlNUX0JJVFMrUEFTUzFfQklUUyszKQotCQkJICAgICYgUkFOR0VfTUFTS107Ci0gICAgb3V0cHRyWzFdID0gcmFuZ2VfbGltaXRbKGludCkgUklHSFRfU0hJRlQodG1wMTEgKyB0bXAyLAotCQkJCQkgICAgICBDT05TVF9CSVRTK1BBU1MxX0JJVFMrMykKLQkJCSAgICAmIFJBTkdFX01BU0tdOwotICAgIG91dHB0cls2XSA9IHJhbmdlX2xpbWl0WyhpbnQpIFJJR0hUX1NISUZUKHRtcDExIC0gdG1wMiwKLQkJCQkJICAgICAgQ09OU1RfQklUUytQQVNTMV9CSVRTKzMpCi0JCQkgICAgJiBSQU5HRV9NQVNLXTsKLSAgICBvdXRwdHJbMl0gPSByYW5nZV9saW1pdFsoaW50KSBSSUdIVF9TSElGVCh0bXAxMiArIHRtcDEsCi0JCQkJCSAgICAgIENPTlNUX0JJVFMrUEFTUzFfQklUUyszKQotCQkJICAgICYgUkFOR0VfTUFTS107Ci0gICAgb3V0cHRyWzVdID0gcmFuZ2VfbGltaXRbKGludCkgUklHSFRfU0hJRlQodG1wMTIgLSB0bXAxLAotCQkJCQkgICAgICBDT05TVF9CSVRTK1BBU1MxX0JJVFMrMykKLQkJCSAgICAmIFJBTkdFX01BU0tdOwotICAgIG91dHB0clszXSA9IHJhbmdlX2xpbWl0WyhpbnQpIFJJR0hUX1NISUZUKHRtcDEzICsgdG1wMCwKLQkJCQkJICAgICAgQ09OU1RfQklUUytQQVNTMV9CSVRTKzMpCi0JCQkgICAgJiBSQU5HRV9NQVNLXTsKLSAgICBvdXRwdHJbNF0gPSByYW5nZV9saW1pdFsoaW50KSBSSUdIVF9TSElGVCh0bXAxMyAtIHRtcDAsCi0JCQkJCSAgICAgIENPTlNUX0JJVFMrUEFTUzFfQklUUyszKQotCQkJICAgICYgUkFOR0VfTUFTS107Ci0KLSAgICB3c3B0ciArPSBEQ1RTSVpFOwkJLyogYWR2YW5jZSBwb2ludGVyIHRvIG5leHQgcm93ICovCi0gIH0KLX0KLQotCi0vKgotICogUGVyZm9ybSBkZXF1YW50aXphdGlvbiBhbmQgaW52ZXJzZSBEQ1Qgb24gb25lIGJsb2NrIG9mIGNvZWZmaWNpZW50cywKLSAqIHByb2R1Y2luZyBhIHJlZHVjZWQtc2l6ZSA2eDMgb3V0cHV0IGJsb2NrLgotICoKLSAqIDMtcG9pbnQgSURDVCBpbiBwYXNzIDEgKGNvbHVtbnMpLCA2LXBvaW50IGluIHBhc3MgMiAocm93cykuCi0gKi8KLQotR0xPQkFMKHZvaWQpCi1qcGVnX2lkY3RfNngzIChqX2RlY29tcHJlc3NfcHRyIGNpbmZvLCBqcGVnX2NvbXBvbmVudF9pbmZvICogY29tcHB0ciwKLQkgICAgICAgSkNPRUZQVFIgY29lZl9ibG9jaywKLQkgICAgICAgSlNBTVBBUlJBWSBvdXRwdXRfYnVmLCBKRElNRU5TSU9OIG91dHB1dF9jb2wpCi17Ci0gIElOVDMyIHRtcDAsIHRtcDEsIHRtcDIsIHRtcDEwLCB0bXAxMSwgdG1wMTI7Ci0gIElOVDMyIHoxLCB6MiwgejM7Ci0gIEpDT0VGUFRSIGlucHRyOwotICBJU0xPV19NVUxUX1RZUEUgKiBxdWFudHB0cjsKLSAgaW50ICogd3NwdHI7Ci0gIEpTQU1QUk9XIG91dHB0cjsKLSAgSlNBTVBMRSAqcmFuZ2VfbGltaXQgPSBJRENUX3JhbmdlX2xpbWl0KGNpbmZvKTsKLSAgaW50IGN0cjsKLSAgaW50IHdvcmtzcGFjZVs2KjNdOwkvKiBidWZmZXJzIGRhdGEgYmV0d2VlbiBwYXNzZXMgKi8KLSAgU0hJRlRfVEVNUFMKLQotICAvKiBQYXNzIDE6IHByb2Nlc3MgY29sdW1ucyBmcm9tIGlucHV0LCBzdG9yZSBpbnRvIHdvcmsgYXJyYXkuCi0gICAqIDMtcG9pbnQgSURDVCBrZXJuZWwsIGNLIHJlcHJlc2VudHMgc3FydCgyKSAqIGNvcyhLKnBpLzYpLgotICAgKi8KLSAgaW5wdHIgPSBjb2VmX2Jsb2NrOwotICBxdWFudHB0ciA9IChJU0xPV19NVUxUX1RZUEUgKikgY29tcHB0ci0+ZGN0X3RhYmxlOwotICB3c3B0ciA9IHdvcmtzcGFjZTsKLSAgZm9yIChjdHIgPSAwOyBjdHIgPCA2OyBjdHIrKywgaW5wdHIrKywgcXVhbnRwdHIrKywgd3NwdHIrKykgewotICAgIC8qIEV2ZW4gcGFydCAqLwotCi0gICAgdG1wMCA9IERFUVVBTlRJWkUoaW5wdHJbRENUU0laRSowXSwgcXVhbnRwdHJbRENUU0laRSowXSk7Ci0gICAgdG1wMCA8PD0gQ09OU1RfQklUUzsKLSAgICAvKiBBZGQgZnVkZ2UgZmFjdG9yIGhlcmUgZm9yIGZpbmFsIGRlc2NhbGUuICovCi0gICAgdG1wMCArPSBPTkUgPDwgKENPTlNUX0JJVFMtUEFTUzFfQklUUy0xKTsKLSAgICB0bXAyID0gREVRVUFOVElaRShpbnB0cltEQ1RTSVpFKjJdLCBxdWFudHB0cltEQ1RTSVpFKjJdKTsKLSAgICB0bXAxMiA9IE1VTFRJUExZKHRtcDIsIEZJWCgwLjcwNzEwNjc4MSkpOyAvKiBjMiAqLwotICAgIHRtcDEwID0gdG1wMCArIHRtcDEyOwotICAgIHRtcDIgPSB0bXAwIC0gdG1wMTIgLSB0bXAxMjsKLQotICAgIC8qIE9kZCBwYXJ0ICovCi0KLSAgICB0bXAxMiA9IERFUVVBTlRJWkUoaW5wdHJbRENUU0laRSoxXSwgcXVhbnRwdHJbRENUU0laRSoxXSk7Ci0gICAgdG1wMCA9IE1VTFRJUExZKHRtcDEyLCBGSVgoMS4yMjQ3NDQ4NzEpKTsgLyogYzEgKi8KLQotICAgIC8qIEZpbmFsIG91dHB1dCBzdGFnZSAqLwotCi0gICAgd3NwdHJbNiowXSA9IChpbnQpIFJJR0hUX1NISUZUKHRtcDEwICsgdG1wMCwgQ09OU1RfQklUUy1QQVNTMV9CSVRTKTsKLSAgICB3c3B0cls2KjJdID0gKGludCkgUklHSFRfU0hJRlQodG1wMTAgLSB0bXAwLCBDT05TVF9CSVRTLVBBU1MxX0JJVFMpOwotICAgIHdzcHRyWzYqMV0gPSAoaW50KSBSSUdIVF9TSElGVCh0bXAyLCBDT05TVF9CSVRTLVBBU1MxX0JJVFMpOwotICB9Ci0gIAotICAvKiBQYXNzIDI6IHByb2Nlc3MgMyByb3dzIGZyb20gd29yayBhcnJheSwgc3RvcmUgaW50byBvdXRwdXQgYXJyYXkuCi0gICAqIDYtcG9pbnQgSURDVCBrZXJuZWwsIGNLIHJlcHJlc2VudHMgc3FydCgyKSAqIGNvcyhLKnBpLzEyKS4KLSAgICovCi0gIHdzcHRyID0gd29ya3NwYWNlOwotICBmb3IgKGN0ciA9IDA7IGN0ciA8IDM7IGN0cisrKSB7Ci0gICAgb3V0cHRyID0gb3V0cHV0X2J1ZltjdHJdICsgb3V0cHV0X2NvbDsKLQotICAgIC8qIEV2ZW4gcGFydCAqLwotCi0gICAgLyogQWRkIGZ1ZGdlIGZhY3RvciBoZXJlIGZvciBmaW5hbCBkZXNjYWxlLiAqLwotICAgIHRtcDAgPSAoSU5UMzIpIHdzcHRyWzBdICsgKE9ORSA8PCAoUEFTUzFfQklUUysyKSk7Ci0gICAgdG1wMCA8PD0gQ09OU1RfQklUUzsKLSAgICB0bXAyID0gKElOVDMyKSB3c3B0cls0XTsKLSAgICB0bXAxMCA9IE1VTFRJUExZKHRtcDIsIEZJWCgwLjcwNzEwNjc4MSkpOyAgIC8qIGM0ICovCi0gICAgdG1wMSA9IHRtcDAgKyB0bXAxMDsKLSAgICB0bXAxMSA9IHRtcDAgLSB0bXAxMCAtIHRtcDEwOwotICAgIHRtcDEwID0gKElOVDMyKSB3c3B0clsyXTsKLSAgICB0bXAwID0gTVVMVElQTFkodG1wMTAsIEZJWCgxLjIyNDc0NDg3MSkpOyAgIC8qIGMyICovCi0gICAgdG1wMTAgPSB0bXAxICsgdG1wMDsKLSAgICB0bXAxMiA9IHRtcDEgLSB0bXAwOwotCi0gICAgLyogT2RkIHBhcnQgKi8KLQotICAgIHoxID0gKElOVDMyKSB3c3B0clsxXTsKLSAgICB6MiA9IChJTlQzMikgd3NwdHJbM107Ci0gICAgejMgPSAoSU5UMzIpIHdzcHRyWzVdOwotICAgIHRtcDEgPSBNVUxUSVBMWSh6MSArIHozLCBGSVgoMC4zNjYwMjU0MDQpKTsgLyogYzUgKi8KLSAgICB0bXAwID0gdG1wMSArICgoejEgKyB6MikgPDwgQ09OU1RfQklUUyk7Ci0gICAgdG1wMiA9IHRtcDEgKyAoKHozIC0gejIpIDw8IENPTlNUX0JJVFMpOwotICAgIHRtcDEgPSAoejEgLSB6MiAtIHozKSA8PCBDT05TVF9CSVRTOwotCi0gICAgLyogRmluYWwgb3V0cHV0IHN0YWdlICovCi0KLSAgICBvdXRwdHJbMF0gPSByYW5nZV9saW1pdFsoaW50KSBSSUdIVF9TSElGVCh0bXAxMCArIHRtcDAsCi0JCQkJCSAgICAgIENPTlNUX0JJVFMrUEFTUzFfQklUUyszKQotCQkJICAgICYgUkFOR0VfTUFTS107Ci0gICAgb3V0cHRyWzVdID0gcmFuZ2VfbGltaXRbKGludCkgUklHSFRfU0hJRlQodG1wMTAgLSB0bXAwLAotCQkJCQkgICAgICBDT05TVF9CSVRTK1BBU1MxX0JJVFMrMykKLQkJCSAgICAmIFJBTkdFX01BU0tdOwotICAgIG91dHB0clsxXSA9IHJhbmdlX2xpbWl0WyhpbnQpIFJJR0hUX1NISUZUKHRtcDExICsgdG1wMSwKLQkJCQkJICAgICAgQ09OU1RfQklUUytQQVNTMV9CSVRTKzMpCi0JCQkgICAgJiBSQU5HRV9NQVNLXTsKLSAgICBvdXRwdHJbNF0gPSByYW5nZV9saW1pdFsoaW50KSBSSUdIVF9TSElGVCh0bXAxMSAtIHRtcDEsCi0JCQkJCSAgICAgIENPTlNUX0JJVFMrUEFTUzFfQklUUyszKQotCQkJICAgICYgUkFOR0VfTUFTS107Ci0gICAgb3V0cHRyWzJdID0gcmFuZ2VfbGltaXRbKGludCkgUklHSFRfU0hJRlQodG1wMTIgKyB0bXAyLAotCQkJCQkgICAgICBDT05TVF9CSVRTK1BBU1MxX0JJVFMrMykKLQkJCSAgICAmIFJBTkdFX01BU0tdOwotICAgIG91dHB0clszXSA9IHJhbmdlX2xpbWl0WyhpbnQpIFJJR0hUX1NISUZUKHRtcDEyIC0gdG1wMiwKLQkJCQkJICAgICAgQ09OU1RfQklUUytQQVNTMV9CSVRTKzMpCi0JCQkgICAgJiBSQU5HRV9NQVNLXTsKLQotICAgIHdzcHRyICs9IDY7CQkvKiBhZHZhbmNlIHBvaW50ZXIgdG8gbmV4dCByb3cgKi8KLSAgfQotfQotCi0KLS8qCi0gKiBQZXJmb3JtIGRlcXVhbnRpemF0aW9uIGFuZCBpbnZlcnNlIERDVCBvbiBvbmUgYmxvY2sgb2YgY29lZmZpY2llbnRzLAotICogcHJvZHVjaW5nIGEgNHgyIG91dHB1dCBibG9jay4KLSAqCi0gKiAyLXBvaW50IElEQ1QgaW4gcGFzcyAxIChjb2x1bW5zKSwgNC1wb2ludCBpbiBwYXNzIDIgKHJvd3MpLgotICovCi0KLUdMT0JBTCh2b2lkKQotanBlZ19pZGN0XzR4MiAoal9kZWNvbXByZXNzX3B0ciBjaW5mbywganBlZ19jb21wb25lbnRfaW5mbyAqIGNvbXBwdHIsCi0JICAgICAgIEpDT0VGUFRSIGNvZWZfYmxvY2ssCi0JICAgICAgIEpTQU1QQVJSQVkgb3V0cHV0X2J1ZiwgSkRJTUVOU0lPTiBvdXRwdXRfY29sKQotewotICBJTlQzMiB0bXAwLCB0bXAyLCB0bXAxMCwgdG1wMTI7Ci0gIElOVDMyIHoxLCB6MiwgejM7Ci0gIEpDT0VGUFRSIGlucHRyOwotICBJU0xPV19NVUxUX1RZUEUgKiBxdWFudHB0cjsKLSAgSU5UMzIgKiB3c3B0cjsKLSAgSlNBTVBST1cgb3V0cHRyOwotICBKU0FNUExFICpyYW5nZV9saW1pdCA9IElEQ1RfcmFuZ2VfbGltaXQoY2luZm8pOwotICBpbnQgY3RyOwotICBJTlQzMiB3b3Jrc3BhY2VbNCoyXTsJLyogYnVmZmVycyBkYXRhIGJldHdlZW4gcGFzc2VzICovCi0gIFNISUZUX1RFTVBTCi0KLSAgLyogUGFzcyAxOiBwcm9jZXNzIGNvbHVtbnMgZnJvbSBpbnB1dCwgc3RvcmUgaW50byB3b3JrIGFycmF5LiAqLwotCi0gIGlucHRyID0gY29lZl9ibG9jazsKLSAgcXVhbnRwdHIgPSAoSVNMT1dfTVVMVF9UWVBFICopIGNvbXBwdHItPmRjdF90YWJsZTsKLSAgd3NwdHIgPSB3b3Jrc3BhY2U7Ci0gIGZvciAoY3RyID0gMDsgY3RyIDwgNDsgY3RyKyssIGlucHRyKyssIHF1YW50cHRyKyssIHdzcHRyKyspIHsKLSAgICAvKiBFdmVuIHBhcnQgKi8KLQotICAgIHRtcDEwID0gREVRVUFOVElaRShpbnB0cltEQ1RTSVpFKjBdLCBxdWFudHB0cltEQ1RTSVpFKjBdKTsKLQotICAgIC8qIE9kZCBwYXJ0ICovCi0KLSAgICB0bXAwID0gREVRVUFOVElaRShpbnB0cltEQ1RTSVpFKjFdLCBxdWFudHB0cltEQ1RTSVpFKjFdKTsKLQotICAgIC8qIEZpbmFsIG91dHB1dCBzdGFnZSAqLwotCi0gICAgd3NwdHJbNCowXSA9IHRtcDEwICsgdG1wMDsKLSAgICB3c3B0cls0KjFdID0gdG1wMTAgLSB0bXAwOwotICB9Ci0KLSAgLyogUGFzcyAyOiBwcm9jZXNzIDIgcm93cyBmcm9tIHdvcmsgYXJyYXksIHN0b3JlIGludG8gb3V0cHV0IGFycmF5LgotICAgKiA0LXBvaW50IElEQ1Qga2VybmVsLAotICAgKiBjSyByZXByZXNlbnRzIHNxcnQoMikgKiBjb3MoSypwaS8xNikgW3JlZmVycyB0byA4LXBvaW50IElEQ1RdLgotICAgKi8KLSAgd3NwdHIgPSB3b3Jrc3BhY2U7Ci0gIGZvciAoY3RyID0gMDsgY3RyIDwgMjsgY3RyKyspIHsKLSAgICBvdXRwdHIgPSBvdXRwdXRfYnVmW2N0cl0gKyBvdXRwdXRfY29sOwotCi0gICAgLyogRXZlbiBwYXJ0ICovCi0KLSAgICAvKiBBZGQgZnVkZ2UgZmFjdG9yIGhlcmUgZm9yIGZpbmFsIGRlc2NhbGUuICovCi0gICAgdG1wMCA9IHdzcHRyWzBdICsgKE9ORSA8PCAyKTsKLSAgICB0bXAyID0gd3NwdHJbMl07Ci0KLSAgICB0bXAxMCA9ICh0bXAwICsgdG1wMikgPDwgQ09OU1RfQklUUzsKLSAgICB0bXAxMiA9ICh0bXAwIC0gdG1wMikgPDwgQ09OU1RfQklUUzsKLQotICAgIC8qIE9kZCBwYXJ0ICovCi0gICAgLyogU2FtZSByb3RhdGlvbiBhcyBpbiB0aGUgZXZlbiBwYXJ0IG9mIHRoZSA4eDggTEwmTSBJRENUICovCi0KLSAgICB6MiA9IHdzcHRyWzFdOwotICAgIHozID0gd3NwdHJbM107Ci0KLSAgICB6MSA9IE1VTFRJUExZKHoyICsgejMsIEZJWF8wXzU0MTE5NjEwMCk7ICAgLyogYzYgKi8KLSAgICB0bXAwID0gejEgKyBNVUxUSVBMWSh6MiwgRklYXzBfNzY1MzY2ODY1KTsgLyogYzItYzYgKi8KLSAgICB0bXAyID0gejEgLSBNVUxUSVBMWSh6MywgRklYXzFfODQ3NzU5MDY1KTsgLyogYzIrYzYgKi8KLQotICAgIC8qIEZpbmFsIG91dHB1dCBzdGFnZSAqLwotCi0gICAgb3V0cHRyWzBdID0gcmFuZ2VfbGltaXRbKGludCkgUklHSFRfU0hJRlQodG1wMTAgKyB0bXAwLAotCQkJCQkgICAgICBDT05TVF9CSVRTKzMpCi0JCQkgICAgJiBSQU5HRV9NQVNLXTsKLSAgICBvdXRwdHJbM10gPSByYW5nZV9saW1pdFsoaW50KSBSSUdIVF9TSElGVCh0bXAxMCAtIHRtcDAsCi0JCQkJCSAgICAgIENPTlNUX0JJVFMrMykKLQkJCSAgICAmIFJBTkdFX01BU0tdOwotICAgIG91dHB0clsxXSA9IHJhbmdlX2xpbWl0WyhpbnQpIFJJR0hUX1NISUZUKHRtcDEyICsgdG1wMiwKLQkJCQkJICAgICAgQ09OU1RfQklUUyszKQotCQkJICAgICYgUkFOR0VfTUFTS107Ci0gICAgb3V0cHRyWzJdID0gcmFuZ2VfbGltaXRbKGludCkgUklHSFRfU0hJRlQodG1wMTIgLSB0bXAyLAotCQkJCQkgICAgICBDT05TVF9CSVRTKzMpCi0JCQkgICAgJiBSQU5HRV9NQVNLXTsKLQotICAgIHdzcHRyICs9IDQ7CQkvKiBhZHZhbmNlIHBvaW50ZXIgdG8gbmV4dCByb3cgKi8KLSAgfQotfQotCi0KLS8qCi0gKiBQZXJmb3JtIGRlcXVhbnRpemF0aW9uIGFuZCBpbnZlcnNlIERDVCBvbiBvbmUgYmxvY2sgb2YgY29lZmZpY2llbnRzLAotICogcHJvZHVjaW5nIGEgMngxIG91dHB1dCBibG9jay4KLSAqCi0gKiAxLXBvaW50IElEQ1QgaW4gcGFzcyAxIChjb2x1bW5zKSwgMi1wb2ludCBpbiBwYXNzIDIgKHJvd3MpLgotICovCi0KLUdMT0JBTCh2b2lkKQotanBlZ19pZGN0XzJ4MSAoal9kZWNvbXByZXNzX3B0ciBjaW5mbywganBlZ19jb21wb25lbnRfaW5mbyAqIGNvbXBwdHIsCi0JICAgICAgIEpDT0VGUFRSIGNvZWZfYmxvY2ssCi0JICAgICAgIEpTQU1QQVJSQVkgb3V0cHV0X2J1ZiwgSkRJTUVOU0lPTiBvdXRwdXRfY29sKQotewotICBJTlQzMiB0bXAwLCB0bXAxMDsKLSAgSVNMT1dfTVVMVF9UWVBFICogcXVhbnRwdHI7Ci0gIEpTQU1QUk9XIG91dHB0cjsKLSAgSlNBTVBMRSAqcmFuZ2VfbGltaXQgPSBJRENUX3JhbmdlX2xpbWl0KGNpbmZvKTsKLSAgU0hJRlRfVEVNUFMKLQotICAvKiBQYXNzIDE6IGVtcHR5LiAqLwotCi0gIC8qIFBhc3MgMjogcHJvY2VzcyAxIHJvdyBmcm9tIGlucHV0LCBzdG9yZSBpbnRvIG91dHB1dCBhcnJheS4gKi8KLQotICBxdWFudHB0ciA9IChJU0xPV19NVUxUX1RZUEUgKikgY29tcHB0ci0+ZGN0X3RhYmxlOwotICBvdXRwdHIgPSBvdXRwdXRfYnVmWzBdICsgb3V0cHV0X2NvbDsKLQotICAvKiBFdmVuIHBhcnQgKi8KLQotICB0bXAxMCA9IERFUVVBTlRJWkUoY29lZl9ibG9ja1swXSwgcXVhbnRwdHJbMF0pOwotICAvKiBBZGQgZnVkZ2UgZmFjdG9yIGhlcmUgZm9yIGZpbmFsIGRlc2NhbGUuICovCi0gIHRtcDEwICs9IE9ORSA8PCAyOwotCi0gIC8qIE9kZCBwYXJ0ICovCi0KLSAgdG1wMCA9IERFUVVBTlRJWkUoY29lZl9ibG9ja1sxXSwgcXVhbnRwdHJbMV0pOwotCi0gIC8qIEZpbmFsIG91dHB1dCBzdGFnZSAqLwotCi0gIG91dHB0clswXSA9IHJhbmdlX2xpbWl0WyhpbnQpIFJJR0hUX1NISUZUKHRtcDEwICsgdG1wMCwgMykgJiBSQU5HRV9NQVNLXTsKLSAgb3V0cHRyWzFdID0gcmFuZ2VfbGltaXRbKGludCkgUklHSFRfU0hJRlQodG1wMTAgLSB0bXAwLCAzKSAmIFJBTkdFX01BU0tdOwotfQotCi0KLS8qCi0gKiBQZXJmb3JtIGRlcXVhbnRpemF0aW9uIGFuZCBpbnZlcnNlIERDVCBvbiBvbmUgYmxvY2sgb2YgY29lZmZpY2llbnRzLAotICogcHJvZHVjaW5nIGEgOHgxNiBvdXRwdXQgYmxvY2suCi0gKgotICogMTYtcG9pbnQgSURDVCBpbiBwYXNzIDEgKGNvbHVtbnMpLCA4LXBvaW50IGluIHBhc3MgMiAocm93cykuCi0gKi8KLQotR0xPQkFMKHZvaWQpCi1qcGVnX2lkY3RfOHgxNiAoal9kZWNvbXByZXNzX3B0ciBjaW5mbywganBlZ19jb21wb25lbnRfaW5mbyAqIGNvbXBwdHIsCi0JCUpDT0VGUFRSIGNvZWZfYmxvY2ssCi0JCUpTQU1QQVJSQVkgb3V0cHV0X2J1ZiwgSkRJTUVOU0lPTiBvdXRwdXRfY29sKQotewotICBJTlQzMiB0bXAwLCB0bXAxLCB0bXAyLCB0bXAzLCB0bXAxMCwgdG1wMTEsIHRtcDEyLCB0bXAxMzsKLSAgSU5UMzIgdG1wMjAsIHRtcDIxLCB0bXAyMiwgdG1wMjMsIHRtcDI0LCB0bXAyNSwgdG1wMjYsIHRtcDI3OwotICBJTlQzMiB6MSwgejIsIHozLCB6NDsKLSAgSkNPRUZQVFIgaW5wdHI7Ci0gIElTTE9XX01VTFRfVFlQRSAqIHF1YW50cHRyOwotICBpbnQgKiB3c3B0cjsKLSAgSlNBTVBST1cgb3V0cHRyOwotICBKU0FNUExFICpyYW5nZV9saW1pdCA9IElEQ1RfcmFuZ2VfbGltaXQoY2luZm8pOwotICBpbnQgY3RyOwotICBpbnQgd29ya3NwYWNlWzgqMTZdOwkvKiBidWZmZXJzIGRhdGEgYmV0d2VlbiBwYXNzZXMgKi8KLSAgU0hJRlRfVEVNUFMKLQotICAvKiBQYXNzIDE6IHByb2Nlc3MgY29sdW1ucyBmcm9tIGlucHV0LCBzdG9yZSBpbnRvIHdvcmsgYXJyYXkuCi0gICAqIDE2LXBvaW50IElEQ1Qga2VybmVsLCBjSyByZXByZXNlbnRzIHNxcnQoMikgKiBjb3MoSypwaS8zMikuCi0gICAqLwotICBpbnB0ciA9IGNvZWZfYmxvY2s7Ci0gIHF1YW50cHRyID0gKElTTE9XX01VTFRfVFlQRSAqKSBjb21wcHRyLT5kY3RfdGFibGU7Ci0gIHdzcHRyID0gd29ya3NwYWNlOwotICBmb3IgKGN0ciA9IDA7IGN0ciA8IDg7IGN0cisrLCBpbnB0cisrLCBxdWFudHB0cisrLCB3c3B0cisrKSB7Ci0gICAgLyogRXZlbiBwYXJ0ICovCi0KLSAgICB0bXAwID0gREVRVUFOVElaRShpbnB0cltEQ1RTSVpFKjBdLCBxdWFudHB0cltEQ1RTSVpFKjBdKTsKLSAgICB0bXAwIDw8PSBDT05TVF9CSVRTOwotICAgIC8qIEFkZCBmdWRnZSBmYWN0b3IgaGVyZSBmb3IgZmluYWwgZGVzY2FsZS4gKi8KLSAgICB0bXAwICs9IE9ORSA8PCAoQ09OU1RfQklUUy1QQVNTMV9CSVRTLTEpOwotCi0gICAgejEgPSBERVFVQU5USVpFKGlucHRyW0RDVFNJWkUqNF0sIHF1YW50cHRyW0RDVFNJWkUqNF0pOwotICAgIHRtcDEgPSBNVUxUSVBMWSh6MSwgRklYKDEuMzA2NTYyOTY1KSk7ICAgICAgLyogYzRbMTZdID0gYzJbOF0gKi8KLSAgICB0bXAyID0gTVVMVElQTFkoejEsIEZJWF8wXzU0MTE5NjEwMCk7ICAgICAgIC8qIGMxMlsxNl0gPSBjNls4XSAqLwotCi0gICAgdG1wMTAgPSB0bXAwICsgdG1wMTsKLSAgICB0bXAxMSA9IHRtcDAgLSB0bXAxOwotICAgIHRtcDEyID0gdG1wMCArIHRtcDI7Ci0gICAgdG1wMTMgPSB0bXAwIC0gdG1wMjsKLQotICAgIHoxID0gREVRVUFOVElaRShpbnB0cltEQ1RTSVpFKjJdLCBxdWFudHB0cltEQ1RTSVpFKjJdKTsKLSAgICB6MiA9IERFUVVBTlRJWkUoaW5wdHJbRENUU0laRSo2XSwgcXVhbnRwdHJbRENUU0laRSo2XSk7Ci0gICAgejMgPSB6MSAtIHoyOwotICAgIHo0ID0gTVVMVElQTFkoejMsIEZJWCgwLjI3NTg5OTM3OSkpOyAgICAgICAgLyogYzE0WzE2XSA9IGM3WzhdICovCi0gICAgejMgPSBNVUxUSVBMWSh6MywgRklYKDEuMzg3MDM5ODQ1KSk7ICAgICAgICAvKiBjMlsxNl0gPSBjMVs4XSAqLwotCi0gICAgdG1wMCA9IHozICsgTVVMVElQTFkoejIsIEZJWF8yXzU2MjkxNTQ0Nyk7ICAvKiAoYzYrYzIpWzE2XSA9IChjMytjMSlbOF0gKi8KLSAgICB0bXAxID0gejQgKyBNVUxUSVBMWSh6MSwgRklYXzBfODk5OTc2MjIzKTsgIC8qIChjNi1jMTQpWzE2XSA9IChjMy1jNylbOF0gKi8KLSAgICB0bXAyID0gejMgLSBNVUxUSVBMWSh6MSwgRklYKDAuNjAxMzQ0ODg3KSk7IC8qIChjMi1jMTApWzE2XSA9IChjMS1jNSlbOF0gKi8KLSAgICB0bXAzID0gejQgLSBNVUxUSVBMWSh6MiwgRklYKDAuNTA5Nzk1NTc5KSk7IC8qIChjMTAtYzE0KVsxNl0gPSAoYzUtYzcpWzhdICovCi0KLSAgICB0bXAyMCA9IHRtcDEwICsgdG1wMDsKLSAgICB0bXAyNyA9IHRtcDEwIC0gdG1wMDsKLSAgICB0bXAyMSA9IHRtcDEyICsgdG1wMTsKLSAgICB0bXAyNiA9IHRtcDEyIC0gdG1wMTsKLSAgICB0bXAyMiA9IHRtcDEzICsgdG1wMjsKLSAgICB0bXAyNSA9IHRtcDEzIC0gdG1wMjsKLSAgICB0bXAyMyA9IHRtcDExICsgdG1wMzsKLSAgICB0bXAyNCA9IHRtcDExIC0gdG1wMzsKLQotICAgIC8qIE9kZCBwYXJ0ICovCi0KLSAgICB6MSA9IERFUVVBTlRJWkUoaW5wdHJbRENUU0laRSoxXSwgcXVhbnRwdHJbRENUU0laRSoxXSk7Ci0gICAgejIgPSBERVFVQU5USVpFKGlucHRyW0RDVFNJWkUqM10sIHF1YW50cHRyW0RDVFNJWkUqM10pOwotICAgIHozID0gREVRVUFOVElaRShpbnB0cltEQ1RTSVpFKjVdLCBxdWFudHB0cltEQ1RTSVpFKjVdKTsKLSAgICB6NCA9IERFUVVBTlRJWkUoaW5wdHJbRENUU0laRSo3XSwgcXVhbnRwdHJbRENUU0laRSo3XSk7Ci0KLSAgICB0bXAxMSA9IHoxICsgejM7Ci0KLSAgICB0bXAxICA9IE1VTFRJUExZKHoxICsgejIsIEZJWCgxLjM1MzMxODAwMSkpOyAgIC8qIGMzICovCi0gICAgdG1wMiAgPSBNVUxUSVBMWSh0bXAxMSwgICBGSVgoMS4yNDcyMjUwMTMpKTsgICAvKiBjNSAqLwotICAgIHRtcDMgID0gTVVMVElQTFkoejEgKyB6NCwgRklYKDEuMDkzMjAxODY3KSk7ICAgLyogYzcgKi8KLSAgICB0bXAxMCA9IE1VTFRJUExZKHoxIC0gejQsIEZJWCgwLjg5NzE2NzU4NikpOyAgIC8qIGM5ICovCi0gICAgdG1wMTEgPSBNVUxUSVBMWSh0bXAxMSwgICBGSVgoMC42NjY2NTU2NTgpKTsgICAvKiBjMTEgKi8KLSAgICB0bXAxMiA9IE1VTFRJUExZKHoxIC0gejIsIEZJWCgwLjQxMDUyNDUyOCkpOyAgIC8qIGMxMyAqLwotICAgIHRtcDAgID0gdG1wMSArIHRtcDIgKyB0bXAzIC0KLQkgICAgTVVMVElQTFkoejEsIEZJWCgyLjI4NjM0MTE0NCkpOyAgICAgICAgLyogYzcrYzUrYzMtYzEgKi8KLSAgICB0bXAxMyA9IHRtcDEwICsgdG1wMTEgKyB0bXAxMiAtCi0JICAgIE1VTFRJUExZKHoxLCBGSVgoMS44MzU3MzA2MDMpKTsgICAgICAgIC8qIGM5K2MxMStjMTMtYzE1ICovCi0gICAgejEgICAgPSBNVUxUSVBMWSh6MiArIHozLCBGSVgoMC4xMzg2MTcxNjkpKTsgICAvKiBjMTUgKi8KLSAgICB0bXAxICArPSB6MSArIE1VTFRJUExZKHoyLCBGSVgoMC4wNzE4ODgwNzQpKTsgIC8qIGM5K2MxMS1jMy1jMTUgKi8KLSAgICB0bXAyICArPSB6MSAtIE1VTFRJUExZKHozLCBGSVgoMS4xMjU3MjYwNDgpKTsgIC8qIGM1K2M3K2MxNS1jMyAqLwotICAgIHoxICAgID0gTVVMVElQTFkoejMgLSB6MiwgRklYKDEuNDA3NDAzNzM4KSk7ICAgLyogYzEgKi8KLSAgICB0bXAxMSArPSB6MSAtIE1VTFRJUExZKHozLCBGSVgoMC43NjYzNjcyODIpKTsgIC8qIGMxK2MxMS1jOS1jMTMgKi8KLSAgICB0bXAxMiArPSB6MSArIE1VTFRJUExZKHoyLCBGSVgoMS45NzE5NTE0MTEpKTsgIC8qIGMxK2M1K2MxMy1jNyAqLwotICAgIHoyICAgICs9IHo0OwotICAgIHoxICAgID0gTVVMVElQTFkoejIsIC0gRklYKDAuNjY2NjU1NjU4KSk7ICAgICAgLyogLWMxMSAqLwotICAgIHRtcDEgICs9IHoxOwotICAgIHRtcDMgICs9IHoxICsgTVVMVElQTFkoejQsIEZJWCgxLjA2NTM4ODk2MikpOyAgLyogYzMrYzExK2MxNS1jNyAqLwotICAgIHoyICAgID0gTVVMVElQTFkoejIsIC0gRklYKDEuMjQ3MjI1MDEzKSk7ICAgICAgLyogLWM1ICovCi0gICAgdG1wMTAgKz0gejIgKyBNVUxUSVBMWSh6NCwgRklYKDMuMTQxMjcxODA5KSk7ICAvKiBjMStjNStjOS1jMTMgKi8KLSAgICB0bXAxMiArPSB6MjsKLSAgICB6MiAgICA9IE1VTFRJUExZKHozICsgejQsIC0gRklYKDEuMzUzMzE4MDAxKSk7IC8qIC1jMyAqLwotICAgIHRtcDIgICs9IHoyOwotICAgIHRtcDMgICs9IHoyOwotICAgIHoyICAgID0gTVVMVElQTFkoejQgLSB6MywgRklYKDAuNDEwNTI0NTI4KSk7ICAgLyogYzEzICovCi0gICAgdG1wMTAgKz0gejI7Ci0gICAgdG1wMTEgKz0gejI7Ci0KLSAgICAvKiBGaW5hbCBvdXRwdXQgc3RhZ2UgKi8KLQotICAgIHdzcHRyWzgqMF0gID0gKGludCkgUklHSFRfU0hJRlQodG1wMjAgKyB0bXAwLCAgQ09OU1RfQklUUy1QQVNTMV9CSVRTKTsKLSAgICB3c3B0cls4KjE1XSA9IChpbnQpIFJJR0hUX1NISUZUKHRtcDIwIC0gdG1wMCwgIENPTlNUX0JJVFMtUEFTUzFfQklUUyk7Ci0gICAgd3NwdHJbOCoxXSAgPSAoaW50KSBSSUdIVF9TSElGVCh0bXAyMSArIHRtcDEsICBDT05TVF9CSVRTLVBBU1MxX0JJVFMpOwotICAgIHdzcHRyWzgqMTRdID0gKGludCkgUklHSFRfU0hJRlQodG1wMjEgLSB0bXAxLCAgQ09OU1RfQklUUy1QQVNTMV9CSVRTKTsKLSAgICB3c3B0cls4KjJdICA9IChpbnQpIFJJR0hUX1NISUZUKHRtcDIyICsgdG1wMiwgIENPTlNUX0JJVFMtUEFTUzFfQklUUyk7Ci0gICAgd3NwdHJbOCoxM10gPSAoaW50KSBSSUdIVF9TSElGVCh0bXAyMiAtIHRtcDIsICBDT05TVF9CSVRTLVBBU1MxX0JJVFMpOwotICAgIHdzcHRyWzgqM10gID0gKGludCkgUklHSFRfU0hJRlQodG1wMjMgKyB0bXAzLCAgQ09OU1RfQklUUy1QQVNTMV9CSVRTKTsKLSAgICB3c3B0cls4KjEyXSA9IChpbnQpIFJJR0hUX1NISUZUKHRtcDIzIC0gdG1wMywgIENPTlNUX0JJVFMtUEFTUzFfQklUUyk7Ci0gICAgd3NwdHJbOCo0XSAgPSAoaW50KSBSSUdIVF9TSElGVCh0bXAyNCArIHRtcDEwLCBDT05TVF9CSVRTLVBBU1MxX0JJVFMpOwotICAgIHdzcHRyWzgqMTFdID0gKGludCkgUklHSFRfU0hJRlQodG1wMjQgLSB0bXAxMCwgQ09OU1RfQklUUy1QQVNTMV9CSVRTKTsKLSAgICB3c3B0cls4KjVdICA9IChpbnQpIFJJR0hUX1NISUZUKHRtcDI1ICsgdG1wMTEsIENPTlNUX0JJVFMtUEFTUzFfQklUUyk7Ci0gICAgd3NwdHJbOCoxMF0gPSAoaW50KSBSSUdIVF9TSElGVCh0bXAyNSAtIHRtcDExLCBDT05TVF9CSVRTLVBBU1MxX0JJVFMpOwotICAgIHdzcHRyWzgqNl0gID0gKGludCkgUklHSFRfU0hJRlQodG1wMjYgKyB0bXAxMiwgQ09OU1RfQklUUy1QQVNTMV9CSVRTKTsKLSAgICB3c3B0cls4KjldICA9IChpbnQpIFJJR0hUX1NISUZUKHRtcDI2IC0gdG1wMTIsIENPTlNUX0JJVFMtUEFTUzFfQklUUyk7Ci0gICAgd3NwdHJbOCo3XSAgPSAoaW50KSBSSUdIVF9TSElGVCh0bXAyNyArIHRtcDEzLCBDT05TVF9CSVRTLVBBU1MxX0JJVFMpOwotICAgIHdzcHRyWzgqOF0gID0gKGludCkgUklHSFRfU0hJRlQodG1wMjcgLSB0bXAxMywgQ09OU1RfQklUUy1QQVNTMV9CSVRTKTsKLSAgfQotICAKLSAgLyogUGFzcyAyOiBwcm9jZXNzIHJvd3MgZnJvbSB3b3JrIGFycmF5LCBzdG9yZSBpbnRvIG91dHB1dCBhcnJheS4gKi8KLSAgLyogTm90ZSB0aGF0IHdlIG11c3QgZGVzY2FsZSB0aGUgcmVzdWx0cyBieSBhIGZhY3RvciBvZiA4ID09IDIqKjMsICovCi0gIC8qIGFuZCBhbHNvIHVuZG8gdGhlIFBBU1MxX0JJVFMgc2NhbGluZy4gKi8KLQotICB3c3B0ciA9IHdvcmtzcGFjZTsKLSAgZm9yIChjdHIgPSAwOyBjdHIgPCAxNjsgY3RyKyspIHsKLSAgICBvdXRwdHIgPSBvdXRwdXRfYnVmW2N0cl0gKyBvdXRwdXRfY29sOwogICAgIAogICAgIC8qIEV2ZW4gcGFydDogcmV2ZXJzZSB0aGUgZXZlbiBwYXJ0IG9mIHRoZSBmb3J3YXJkIERDVC4gKi8KICAgICAvKiBUaGUgcm90YXRvciBpcyBzcXJ0KDIpKmMoLTYpLiAqLwpAQCAtNDE1MCwyMCArMzEyLDE2IEBACiAgICAgejMgPSAoSU5UMzIpIHdzcHRyWzZdOwogICAgIAogICAgIHoxID0gTVVMVElQTFkoejIgKyB6MywgRklYXzBfNTQxMTk2MTAwKTsKLSAgICB0bXAyID0gejEgKyBNVUxUSVBMWSh6MiwgRklYXzBfNzY1MzY2ODY1KTsKLSAgICB0bXAzID0gejEgLSBNVUxUSVBMWSh6MywgRklYXzFfODQ3NzU5MDY1KTsKKyAgICB0bXAyID0gejEgKyBNVUxUSVBMWSh6MywgLSBGSVhfMV84NDc3NTkwNjUpOworICAgIHRtcDMgPSB6MSArIE1VTFRJUExZKHoyLCBGSVhfMF83NjUzNjY4NjUpOwogICAgIAotICAgIC8qIEFkZCBmdWRnZSBmYWN0b3IgaGVyZSBmb3IgZmluYWwgZGVzY2FsZS4gKi8KLSAgICB6MiA9IChJTlQzMikgd3NwdHJbMF0gKyAoT05FIDw8IChQQVNTMV9CSVRTKzIpKTsKLSAgICB6MyA9IChJTlQzMikgd3NwdHJbNF07CisgICAgdG1wMCA9ICgoSU5UMzIpIHdzcHRyWzBdICsgKElOVDMyKSB3c3B0cls0XSkgPDwgQ09OU1RfQklUUzsKKyAgICB0bXAxID0gKChJTlQzMikgd3NwdHJbMF0gLSAoSU5UMzIpIHdzcHRyWzRdKSA8PCBDT05TVF9CSVRTOwogICAgIAotICAgIHRtcDAgPSAoejIgKyB6MykgPDwgQ09OU1RfQklUUzsKLSAgICB0bXAxID0gKHoyIC0gejMpIDw8IENPTlNUX0JJVFM7Ci0gICAgCi0gICAgdG1wMTAgPSB0bXAwICsgdG1wMjsKLSAgICB0bXAxMyA9IHRtcDAgLSB0bXAyOwotICAgIHRtcDExID0gdG1wMSArIHRtcDM7Ci0gICAgdG1wMTIgPSB0bXAxIC0gdG1wMzsKKyAgICB0bXAxMCA9IHRtcDAgKyB0bXAzOworICAgIHRtcDEzID0gdG1wMCAtIHRtcDM7CisgICAgdG1wMTEgPSB0bXAxICsgdG1wMjsKKyAgICB0bXAxMiA9IHRtcDEgLSB0bXAyOwogICAgIAogICAgIC8qIE9kZCBwYXJ0IHBlciBmaWd1cmUgODsgdGhlIG1hdHJpeCBpcyB1bml0YXJ5IGFuZCBoZW5jZSBpdHMKICAgICAgKiB0cmFuc3Bvc2UgaXMgaXRzIGludmVyc2UuICBpMC4uaTMgYXJlIHk3LHk1LHkzLHkxIHJlc3BlY3RpdmVseS4KQEAgLTQxNzQsOTY0ICszMzIsNTggQEAKICAgICB0bXAyID0gKElOVDMyKSB3c3B0clszXTsKICAgICB0bXAzID0gKElOVDMyKSB3c3B0clsxXTsKICAgICAKLSAgICB6MiA9IHRtcDAgKyB0bXAyOwotICAgIHozID0gdG1wMSArIHRtcDM7Ci0KLSAgICB6MSA9IE1VTFRJUExZKHoyICsgejMsIEZJWF8xXzE3NTg3NTYwMik7IC8qIHNxcnQoMikgKiBjMyAqLwotICAgIHoyID0gTVVMVElQTFkoejIsIC0gRklYXzFfOTYxNTcwNTYwKTsgLyogc3FydCgyKSAqICgtYzMtYzUpICovCi0gICAgejMgPSBNVUxUSVBMWSh6MywgLSBGSVhfMF8zOTAxODA2NDQpOyAvKiBzcXJ0KDIpICogKGM1LWMzKSAqLwotICAgIHoyICs9IHoxOwotICAgIHozICs9IHoxOwotCi0gICAgejEgPSBNVUxUSVBMWSh0bXAwICsgdG1wMywgLSBGSVhfMF84OTk5NzYyMjMpOyAvKiBzcXJ0KDIpICogKGM3LWMzKSAqLworICAgIHoxID0gdG1wMCArIHRtcDM7CisgICAgejIgPSB0bXAxICsgdG1wMjsKKyAgICB6MyA9IHRtcDAgKyB0bXAyOworICAgIHo0ID0gdG1wMSArIHRtcDM7CisgICAgejUgPSBNVUxUSVBMWSh6MyArIHo0LCBGSVhfMV8xNzU4NzU2MDIpOyAvKiBzcXJ0KDIpICogYzMgKi8KKyAgICAKICAgICB0bXAwID0gTVVMVElQTFkodG1wMCwgRklYXzBfMjk4NjMxMzM2KTsgLyogc3FydCgyKSAqICgtYzErYzMrYzUtYzcpICovCi0gICAgdG1wMyA9IE1VTFRJUExZKHRtcDMsIEZJWF8xXzUwMTMyMTExMCk7IC8qIHNxcnQoMikgKiAoIGMxK2MzLWM1LWM3KSAqLwotICAgIHRtcDAgKz0gejEgKyB6MjsKLSAgICB0bXAzICs9IHoxICsgejM7Ci0KLSAgICB6MSA9IE1VTFRJUExZKHRtcDEgKyB0bXAyLCAtIEZJWF8yXzU2MjkxNTQ0Nyk7IC8qIHNxcnQoMikgKiAoLWMxLWMzKSAqLwogICAgIHRtcDEgPSBNVUxUSVBMWSh0bXAxLCBGSVhfMl8wNTMxMTk4NjkpOyAvKiBzcXJ0KDIpICogKCBjMStjMy1jNStjNykgKi8KICAgICB0bXAyID0gTVVMVElQTFkodG1wMiwgRklYXzNfMDcyNzExMDI2KTsgLyogc3FydCgyKSAqICggYzErYzMrYzUtYzcpICovCi0gICAgdG1wMSArPSB6MSArIHozOwotICAgIHRtcDIgKz0gejEgKyB6MjsKKyAgICB0bXAzID0gTVVMVElQTFkodG1wMywgRklYXzFfNTAxMzIxMTEwKTsgLyogc3FydCgyKSAqICggYzErYzMtYzUtYzcpICovCisgICAgejEgPSBNVUxUSVBMWSh6MSwgLSBGSVhfMF84OTk5NzYyMjMpOyAvKiBzcXJ0KDIpICogKGM3LWMzKSAqLworICAgIHoyID0gTVVMVElQTFkoejIsIC0gRklYXzJfNTYyOTE1NDQ3KTsgLyogc3FydCgyKSAqICgtYzEtYzMpICovCisgICAgejMgPSBNVUxUSVBMWSh6MywgLSBGSVhfMV85NjE1NzA1NjApOyAvKiBzcXJ0KDIpICogKC1jMy1jNSkgKi8KKyAgICB6NCA9IE1VTFRJUExZKHo0LCAtIEZJWF8wXzM5MDE4MDY0NCk7IC8qIHNxcnQoMikgKiAoYzUtYzMpICovCisgICAgCisgICAgejMgKz0gejU7CisgICAgejQgKz0gejU7CisgICAgCisgICAgdG1wMCArPSB6MSArIHozOworICAgIHRtcDEgKz0gejIgKyB6NDsKKyAgICB0bXAyICs9IHoyICsgejM7CisgICAgdG1wMyArPSB6MSArIHo0OwogICAgIAogICAgIC8qIEZpbmFsIG91dHB1dCBzdGFnZTogaW5wdXRzIGFyZSB0bXAxMC4udG1wMTMsIHRtcDAuLnRtcDMgKi8KICAgICAKLSAgICBvdXRwdHJbMF0gPSByYW5nZV9saW1pdFsoaW50KSBSSUdIVF9TSElGVCh0bXAxMCArIHRtcDMsCi0JCQkJCSAgICAgIENPTlNUX0JJVFMrUEFTUzFfQklUUyszKQorICAgIG91dHB0clswXSA9IHJhbmdlX2xpbWl0WyhpbnQpIERFU0NBTEUodG1wMTAgKyB0bXAzLAorCQkJCQkgIENPTlNUX0JJVFMrUEFTUzFfQklUUyszKQogCQkJICAgICYgUkFOR0VfTUFTS107Ci0gICAgb3V0cHRyWzddID0gcmFuZ2VfbGltaXRbKGludCkgUklHSFRfU0hJRlQodG1wMTAgLSB0bXAzLAotCQkJCQkgICAgICBDT05TVF9CSVRTK1BBU1MxX0JJVFMrMykKKyAgICBvdXRwdHJbN10gPSByYW5nZV9saW1pdFsoaW50KSBERVNDQUxFKHRtcDEwIC0gdG1wMywKKwkJCQkJICBDT05TVF9CSVRTK1BBU1MxX0JJVFMrMykKIAkJCSAgICAmIFJBTkdFX01BU0tdOwotICAgIG91dHB0clsxXSA9IHJhbmdlX2xpbWl0WyhpbnQpIFJJR0hUX1NISUZUKHRtcDExICsgdG1wMiwKLQkJCQkJICAgICAgQ09OU1RfQklUUytQQVNTMV9CSVRTKzMpCisgICAgb3V0cHRyWzFdID0gcmFuZ2VfbGltaXRbKGludCkgREVTQ0FMRSh0bXAxMSArIHRtcDIsCisJCQkJCSAgQ09OU1RfQklUUytQQVNTMV9CSVRTKzMpCiAJCQkgICAgJiBSQU5HRV9NQVNLXTsKLSAgICBvdXRwdHJbNl0gPSByYW5nZV9saW1pdFsoaW50KSBSSUdIVF9TSElGVCh0bXAxMSAtIHRtcDIsCi0JCQkJCSAgICAgIENPTlNUX0JJVFMrUEFTUzFfQklUUyszKQorICAgIG91dHB0cls2XSA9IHJhbmdlX2xpbWl0WyhpbnQpIERFU0NBTEUodG1wMTEgLSB0bXAyLAorCQkJCQkgIENPTlNUX0JJVFMrUEFTUzFfQklUUyszKQogCQkJICAgICYgUkFOR0VfTUFTS107Ci0gICAgb3V0cHRyWzJdID0gcmFuZ2VfbGltaXRbKGludCkgUklHSFRfU0hJRlQodG1wMTIgKyB0bXAxLAotCQkJCQkgICAgICBDT05TVF9CSVRTK1BBU1MxX0JJVFMrMykKKyAgICBvdXRwdHJbMl0gPSByYW5nZV9saW1pdFsoaW50KSBERVNDQUxFKHRtcDEyICsgdG1wMSwKKwkJCQkJICBDT05TVF9CSVRTK1BBU1MxX0JJVFMrMykKIAkJCSAgICAmIFJBTkdFX01BU0tdOwotICAgIG91dHB0cls1XSA9IHJhbmdlX2xpbWl0WyhpbnQpIFJJR0hUX1NISUZUKHRtcDEyIC0gdG1wMSwKLQkJCQkJICAgICAgQ09OU1RfQklUUytQQVNTMV9CSVRTKzMpCisgICAgb3V0cHRyWzVdID0gcmFuZ2VfbGltaXRbKGludCkgREVTQ0FMRSh0bXAxMiAtIHRtcDEsCisJCQkJCSAgQ09OU1RfQklUUytQQVNTMV9CSVRTKzMpCiAJCQkgICAgJiBSQU5HRV9NQVNLXTsKLSAgICBvdXRwdHJbM10gPSByYW5nZV9saW1pdFsoaW50KSBSSUdIVF9TSElGVCh0bXAxMyArIHRtcDAsCi0JCQkJCSAgICAgIENPTlNUX0JJVFMrUEFTUzFfQklUUyszKQorICAgIG91dHB0clszXSA9IHJhbmdlX2xpbWl0WyhpbnQpIERFU0NBTEUodG1wMTMgKyB0bXAwLAorCQkJCQkgIENPTlNUX0JJVFMrUEFTUzFfQklUUyszKQogCQkJICAgICYgUkFOR0VfTUFTS107Ci0gICAgb3V0cHRyWzRdID0gcmFuZ2VfbGltaXRbKGludCkgUklHSFRfU0hJRlQodG1wMTMgLSB0bXAwLAotCQkJCQkgICAgICBDT05TVF9CSVRTK1BBU1MxX0JJVFMrMykKKyAgICBvdXRwdHJbNF0gPSByYW5nZV9saW1pdFsoaW50KSBERVNDQUxFKHRtcDEzIC0gdG1wMCwKKwkJCQkJICBDT05TVF9CSVRTK1BBU1MxX0JJVFMrMykKIAkJCSAgICAmIFJBTkdFX01BU0tdOwogICAgIAogICAgIHdzcHRyICs9IERDVFNJWkU7CQkvKiBhZHZhbmNlIHBvaW50ZXIgdG8gbmV4dCByb3cgKi8KICAgfQogfQogCi0KLS8qCi0gKiBQZXJmb3JtIGRlcXVhbnRpemF0aW9uIGFuZCBpbnZlcnNlIERDVCBvbiBvbmUgYmxvY2sgb2YgY29lZmZpY2llbnRzLAotICogcHJvZHVjaW5nIGEgN3gxNCBvdXRwdXQgYmxvY2suCi0gKgotICogMTQtcG9pbnQgSURDVCBpbiBwYXNzIDEgKGNvbHVtbnMpLCA3LXBvaW50IGluIHBhc3MgMiAocm93cykuCi0gKi8KLQotR0xPQkFMKHZvaWQpCi1qcGVnX2lkY3RfN3gxNCAoal9kZWNvbXByZXNzX3B0ciBjaW5mbywganBlZ19jb21wb25lbnRfaW5mbyAqIGNvbXBwdHIsCi0JCUpDT0VGUFRSIGNvZWZfYmxvY2ssCi0JCUpTQU1QQVJSQVkgb3V0cHV0X2J1ZiwgSkRJTUVOU0lPTiBvdXRwdXRfY29sKQotewotICBJTlQzMiB0bXAxMCwgdG1wMTEsIHRtcDEyLCB0bXAxMywgdG1wMTQsIHRtcDE1LCB0bXAxNjsKLSAgSU5UMzIgdG1wMjAsIHRtcDIxLCB0bXAyMiwgdG1wMjMsIHRtcDI0LCB0bXAyNSwgdG1wMjY7Ci0gIElOVDMyIHoxLCB6MiwgejMsIHo0OwotICBKQ09FRlBUUiBpbnB0cjsKLSAgSVNMT1dfTVVMVF9UWVBFICogcXVhbnRwdHI7Ci0gIGludCAqIHdzcHRyOwotICBKU0FNUFJPVyBvdXRwdHI7Ci0gIEpTQU1QTEUgKnJhbmdlX2xpbWl0ID0gSURDVF9yYW5nZV9saW1pdChjaW5mbyk7Ci0gIGludCBjdHI7Ci0gIGludCB3b3Jrc3BhY2VbNyoxNF07CS8qIGJ1ZmZlcnMgZGF0YSBiZXR3ZWVuIHBhc3NlcyAqLwotICBTSElGVF9URU1QUwotCi0gIC8qIFBhc3MgMTogcHJvY2VzcyBjb2x1bW5zIGZyb20gaW5wdXQsIHN0b3JlIGludG8gd29yayBhcnJheS4KLSAgICogMTQtcG9pbnQgSURDVCBrZXJuZWwsIGNLIHJlcHJlc2VudHMgc3FydCgyKSAqIGNvcyhLKnBpLzI4KS4KLSAgICovCi0gIGlucHRyID0gY29lZl9ibG9jazsKLSAgcXVhbnRwdHIgPSAoSVNMT1dfTVVMVF9UWVBFICopIGNvbXBwdHItPmRjdF90YWJsZTsKLSAgd3NwdHIgPSB3b3Jrc3BhY2U7Ci0gIGZvciAoY3RyID0gMDsgY3RyIDwgNzsgY3RyKyssIGlucHRyKyssIHF1YW50cHRyKyssIHdzcHRyKyspIHsKLSAgICAvKiBFdmVuIHBhcnQgKi8KLQotICAgIHoxID0gREVRVUFOVElaRShpbnB0cltEQ1RTSVpFKjBdLCBxdWFudHB0cltEQ1RTSVpFKjBdKTsKLSAgICB6MSA8PD0gQ09OU1RfQklUUzsKLSAgICAvKiBBZGQgZnVkZ2UgZmFjdG9yIGhlcmUgZm9yIGZpbmFsIGRlc2NhbGUuICovCi0gICAgejEgKz0gT05FIDw8IChDT05TVF9CSVRTLVBBU1MxX0JJVFMtMSk7Ci0gICAgejQgPSBERVFVQU5USVpFKGlucHRyW0RDVFNJWkUqNF0sIHF1YW50cHRyW0RDVFNJWkUqNF0pOwotICAgIHoyID0gTVVMVElQTFkoejQsIEZJWCgxLjI3NDE2MjM5MikpOyAgICAgICAgIC8qIGM0ICovCi0gICAgejMgPSBNVUxUSVBMWSh6NCwgRklYKDAuMzE0NjkyMTIzKSk7ICAgICAgICAgLyogYzEyICovCi0gICAgejQgPSBNVUxUSVBMWSh6NCwgRklYKDAuODgxNzQ3NzM0KSk7ICAgICAgICAgLyogYzggKi8KLQotICAgIHRtcDEwID0gejEgKyB6MjsKLSAgICB0bXAxMSA9IHoxICsgejM7Ci0gICAgdG1wMTIgPSB6MSAtIHo0OwotCi0gICAgdG1wMjMgPSBSSUdIVF9TSElGVCh6MSAtICgoejIgKyB6MyAtIHo0KSA8PCAxKSwgLyogYzAgPSAoYzQrYzEyLWM4KSoyICovCi0JCQlDT05TVF9CSVRTLVBBU1MxX0JJVFMpOwotCi0gICAgejEgPSBERVFVQU5USVpFKGlucHRyW0RDVFNJWkUqMl0sIHF1YW50cHRyW0RDVFNJWkUqMl0pOwotICAgIHoyID0gREVRVUFOVElaRShpbnB0cltEQ1RTSVpFKjZdLCBxdWFudHB0cltEQ1RTSVpFKjZdKTsKLQotICAgIHozID0gTVVMVElQTFkoejEgKyB6MiwgRklYKDEuMTA1Njc2Njg2KSk7ICAgIC8qIGM2ICovCi0KLSAgICB0bXAxMyA9IHozICsgTVVMVElQTFkoejEsIEZJWCgwLjI3MzA3OTU5MCkpOyAvKiBjMi1jNiAqLwotICAgIHRtcDE0ID0gejMgLSBNVUxUSVBMWSh6MiwgRklYKDEuNzE5MjgwOTU0KSk7IC8qIGM2K2MxMCAqLwotICAgIHRtcDE1ID0gTVVMVElQTFkoejEsIEZJWCgwLjYxMzYwNDI2OCkpIC0gICAgIC8qIGMxMCAqLwotCSAgICBNVUxUSVBMWSh6MiwgRklYKDEuMzc4NzU2Mjc2KSk7ICAgICAgLyogYzIgKi8KLQotICAgIHRtcDIwID0gdG1wMTAgKyB0bXAxMzsKLSAgICB0bXAyNiA9IHRtcDEwIC0gdG1wMTM7Ci0gICAgdG1wMjEgPSB0bXAxMSArIHRtcDE0OwotICAgIHRtcDI1ID0gdG1wMTEgLSB0bXAxNDsKLSAgICB0bXAyMiA9IHRtcDEyICsgdG1wMTU7Ci0gICAgdG1wMjQgPSB0bXAxMiAtIHRtcDE1OwotCi0gICAgLyogT2RkIHBhcnQgKi8KLQotICAgIHoxID0gREVRVUFOVElaRShpbnB0cltEQ1RTSVpFKjFdLCBxdWFudHB0cltEQ1RTSVpFKjFdKTsKLSAgICB6MiA9IERFUVVBTlRJWkUoaW5wdHJbRENUU0laRSozXSwgcXVhbnRwdHJbRENUU0laRSozXSk7Ci0gICAgejMgPSBERVFVQU5USVpFKGlucHRyW0RDVFNJWkUqNV0sIHF1YW50cHRyW0RDVFNJWkUqNV0pOwotICAgIHo0ID0gREVRVUFOVElaRShpbnB0cltEQ1RTSVpFKjddLCBxdWFudHB0cltEQ1RTSVpFKjddKTsKLSAgICB0bXAxMyA9IHo0IDw8IENPTlNUX0JJVFM7Ci0KLSAgICB0bXAxNCA9IHoxICsgejM7Ci0gICAgdG1wMTEgPSBNVUxUSVBMWSh6MSArIHoyLCBGSVgoMS4zMzQ4NTI2MDcpKTsgICAgICAgICAgIC8qIGMzICovCi0gICAgdG1wMTIgPSBNVUxUSVBMWSh0bXAxNCwgRklYKDEuMTk3NDQ4ODQ2KSk7ICAgICAgICAgICAgIC8qIGM1ICovCi0gICAgdG1wMTAgPSB0bXAxMSArIHRtcDEyICsgdG1wMTMgLSBNVUxUSVBMWSh6MSwgRklYKDEuMTI2OTgwMTY5KSk7IC8qIGMzK2M1LWMxICovCi0gICAgdG1wMTQgPSBNVUxUSVBMWSh0bXAxNCwgRklYKDAuNzUyNDA2OTc4KSk7ICAgICAgICAgICAgIC8qIGM5ICovCi0gICAgdG1wMTYgPSB0bXAxNCAtIE1VTFRJUExZKHoxLCBGSVgoMS4wNjExNTA0MjYpKTsgICAgICAgIC8qIGM5K2MxMS1jMTMgKi8KLSAgICB6MSAgICAtPSB6MjsKLSAgICB0bXAxNSA9IE1VTFRJUExZKHoxLCBGSVgoMC40NjcwODUxMjkpKSAtIHRtcDEzOyAgICAgICAgLyogYzExICovCi0gICAgdG1wMTYgKz0gdG1wMTU7Ci0gICAgejEgICAgKz0gejQ7Ci0gICAgejQgICAgPSBNVUxUSVBMWSh6MiArIHozLCAtIEZJWCgwLjE1ODM0MTY4MSkpIC0gdG1wMTM7IC8qIC1jMTMgKi8KLSAgICB0bXAxMSArPSB6NCAtIE1VTFRJUExZKHoyLCBGSVgoMC40MjQxMDM5NDgpKTsgICAgICAgICAgLyogYzMtYzktYzEzICovCi0gICAgdG1wMTIgKz0gejQgLSBNVUxUSVBMWSh6MywgRklYKDIuMzczOTU5NzczKSk7ICAgICAgICAgIC8qIGMzK2M1LWMxMyAqLwotICAgIHo0ICAgID0gTVVMVElQTFkoejMgLSB6MiwgRklYKDEuNDA1MzIxMjg0KSk7ICAgICAgICAgICAvKiBjMSAqLwotICAgIHRtcDE0ICs9IHo0ICsgdG1wMTMgLSBNVUxUSVBMWSh6MywgRklYKDEuNjkwNjQzMTMzNCkpOyAvKiBjMStjOS1jMTEgKi8KLSAgICB0bXAxNSArPSB6NCArIE1VTFRJUExZKHoyLCBGSVgoMC42NzQ5NTc1NjcpKTsgICAgICAgICAgLyogYzErYzExLWM1ICovCi0KLSAgICB0bXAxMyA9ICh6MSAtIHozKSA8PCBQQVNTMV9CSVRTOwotCi0gICAgLyogRmluYWwgb3V0cHV0IHN0YWdlICovCi0KLSAgICB3c3B0cls3KjBdICA9IChpbnQpIFJJR0hUX1NISUZUKHRtcDIwICsgdG1wMTAsIENPTlNUX0JJVFMtUEFTUzFfQklUUyk7Ci0gICAgd3NwdHJbNyoxM10gPSAoaW50KSBSSUdIVF9TSElGVCh0bXAyMCAtIHRtcDEwLCBDT05TVF9CSVRTLVBBU1MxX0JJVFMpOwotICAgIHdzcHRyWzcqMV0gID0gKGludCkgUklHSFRfU0hJRlQodG1wMjEgKyB0bXAxMSwgQ09OU1RfQklUUy1QQVNTMV9CSVRTKTsKLSAgICB3c3B0cls3KjEyXSA9IChpbnQpIFJJR0hUX1NISUZUKHRtcDIxIC0gdG1wMTEsIENPTlNUX0JJVFMtUEFTUzFfQklUUyk7Ci0gICAgd3NwdHJbNyoyXSAgPSAoaW50KSBSSUdIVF9TSElGVCh0bXAyMiArIHRtcDEyLCBDT05TVF9CSVRTLVBBU1MxX0JJVFMpOwotICAgIHdzcHRyWzcqMTFdID0gKGludCkgUklHSFRfU0hJRlQodG1wMjIgLSB0bXAxMiwgQ09OU1RfQklUUy1QQVNTMV9CSVRTKTsKLSAgICB3c3B0cls3KjNdICA9IChpbnQpICh0bXAyMyArIHRtcDEzKTsKLSAgICB3c3B0cls3KjEwXSA9IChpbnQpICh0bXAyMyAtIHRtcDEzKTsKLSAgICB3c3B0cls3KjRdICA9IChpbnQpIFJJR0hUX1NISUZUKHRtcDI0ICsgdG1wMTQsIENPTlNUX0JJVFMtUEFTUzFfQklUUyk7Ci0gICAgd3NwdHJbNyo5XSAgPSAoaW50KSBSSUdIVF9TSElGVCh0bXAyNCAtIHRtcDE0LCBDT05TVF9CSVRTLVBBU1MxX0JJVFMpOwotICAgIHdzcHRyWzcqNV0gID0gKGludCkgUklHSFRfU0hJRlQodG1wMjUgKyB0bXAxNSwgQ09OU1RfQklUUy1QQVNTMV9CSVRTKTsKLSAgICB3c3B0cls3KjhdICA9IChpbnQpIFJJR0hUX1NISUZUKHRtcDI1IC0gdG1wMTUsIENPTlNUX0JJVFMtUEFTUzFfQklUUyk7Ci0gICAgd3NwdHJbNyo2XSAgPSAoaW50KSBSSUdIVF9TSElGVCh0bXAyNiArIHRtcDE2LCBDT05TVF9CSVRTLVBBU1MxX0JJVFMpOwotICAgIHdzcHRyWzcqN10gID0gKGludCkgUklHSFRfU0hJRlQodG1wMjYgLSB0bXAxNiwgQ09OU1RfQklUUy1QQVNTMV9CSVRTKTsKLSAgfQotCi0gIC8qIFBhc3MgMjogcHJvY2VzcyAxNCByb3dzIGZyb20gd29yayBhcnJheSwgc3RvcmUgaW50byBvdXRwdXQgYXJyYXkuCi0gICAqIDctcG9pbnQgSURDVCBrZXJuZWwsIGNLIHJlcHJlc2VudHMgc3FydCgyKSAqIGNvcyhLKnBpLzE0KS4KLSAgICovCi0gIHdzcHRyID0gd29ya3NwYWNlOwotICBmb3IgKGN0ciA9IDA7IGN0ciA8IDE0OyBjdHIrKykgewotICAgIG91dHB0ciA9IG91dHB1dF9idWZbY3RyXSArIG91dHB1dF9jb2w7Ci0KLSAgICAvKiBFdmVuIHBhcnQgKi8KLQotICAgIC8qIEFkZCBmdWRnZSBmYWN0b3IgaGVyZSBmb3IgZmluYWwgZGVzY2FsZS4gKi8KLSAgICB0bXAyMyA9IChJTlQzMikgd3NwdHJbMF0gKyAoT05FIDw8IChQQVNTMV9CSVRTKzIpKTsKLSAgICB0bXAyMyA8PD0gQ09OU1RfQklUUzsKLQotICAgIHoxID0gKElOVDMyKSB3c3B0clsyXTsKLSAgICB6MiA9IChJTlQzMikgd3NwdHJbNF07Ci0gICAgejMgPSAoSU5UMzIpIHdzcHRyWzZdOwotCi0gICAgdG1wMjAgPSBNVUxUSVBMWSh6MiAtIHozLCBGSVgoMC44ODE3NDc3MzQpKTsgICAgICAgLyogYzQgKi8KLSAgICB0bXAyMiA9IE1VTFRJUExZKHoxIC0gejIsIEZJWCgwLjMxNDY5MjEyMykpOyAgICAgICAvKiBjNiAqLwotICAgIHRtcDIxID0gdG1wMjAgKyB0bXAyMiArIHRtcDIzIC0gTVVMVElQTFkoejIsIEZJWCgxLjg0MTIxODAwMykpOyAvKiBjMitjNC1jNiAqLwotICAgIHRtcDEwID0gejEgKyB6MzsKLSAgICB6MiAtPSB0bXAxMDsKLSAgICB0bXAxMCA9IE1VTFRJUExZKHRtcDEwLCBGSVgoMS4yNzQxNjIzOTIpKSArIHRtcDIzOyAvKiBjMiAqLwotICAgIHRtcDIwICs9IHRtcDEwIC0gTVVMVElQTFkoejMsIEZJWCgwLjA3NzcyMjUzNikpOyAgIC8qIGMyLWM0LWM2ICovCi0gICAgdG1wMjIgKz0gdG1wMTAgLSBNVUxUSVBMWSh6MSwgRklYKDIuNDcwNjAyMjQ5KSk7ICAgLyogYzIrYzQrYzYgKi8KLSAgICB0bXAyMyArPSBNVUxUSVBMWSh6MiwgRklYKDEuNDE0MjEzNTYyKSk7ICAgICAgICAgICAvKiBjMCAqLwotCi0gICAgLyogT2RkIHBhcnQgKi8KLQotICAgIHoxID0gKElOVDMyKSB3c3B0clsxXTsKLSAgICB6MiA9IChJTlQzMikgd3NwdHJbM107Ci0gICAgejMgPSAoSU5UMzIpIHdzcHRyWzVdOwotCi0gICAgdG1wMTEgPSBNVUxUSVBMWSh6MSArIHoyLCBGSVgoMC45MzU0MTQzNDcpKTsgICAgICAgLyogKGMzK2MxLWM1KS8yICovCi0gICAgdG1wMTIgPSBNVUxUSVBMWSh6MSAtIHoyLCBGSVgoMC4xNzAyNjIzMzkpKTsgICAgICAgLyogKGMzK2M1LWMxKS8yICovCi0gICAgdG1wMTAgPSB0bXAxMSAtIHRtcDEyOwotICAgIHRtcDExICs9IHRtcDEyOwotICAgIHRtcDEyID0gTVVMVElQTFkoejIgKyB6MywgLSBGSVgoMS4zNzg3NTYyNzYpKTsgICAgIC8qIC1jMSAqLwotICAgIHRtcDExICs9IHRtcDEyOwotICAgIHoyID0gTVVMVElQTFkoejEgKyB6MywgRklYKDAuNjEzNjA0MjY4KSk7ICAgICAgICAgIC8qIGM1ICovCi0gICAgdG1wMTAgKz0gejI7Ci0gICAgdG1wMTIgKz0gejIgKyBNVUxUSVBMWSh6MywgRklYKDEuODcwODI4NjkzKSk7ICAgICAgLyogYzMrYzEtYzUgKi8KLQotICAgIC8qIEZpbmFsIG91dHB1dCBzdGFnZSAqLwotCi0gICAgb3V0cHRyWzBdID0gcmFuZ2VfbGltaXRbKGludCkgUklHSFRfU0hJRlQodG1wMjAgKyB0bXAxMCwKLQkJCQkJICAgICAgQ09OU1RfQklUUytQQVNTMV9CSVRTKzMpCi0JCQkgICAgJiBSQU5HRV9NQVNLXTsKLSAgICBvdXRwdHJbNl0gPSByYW5nZV9saW1pdFsoaW50KSBSSUdIVF9TSElGVCh0bXAyMCAtIHRtcDEwLAotCQkJCQkgICAgICBDT05TVF9CSVRTK1BBU1MxX0JJVFMrMykKLQkJCSAgICAmIFJBTkdFX01BU0tdOwotICAgIG91dHB0clsxXSA9IHJhbmdlX2xpbWl0WyhpbnQpIFJJR0hUX1NISUZUKHRtcDIxICsgdG1wMTEsCi0JCQkJCSAgICAgIENPTlNUX0JJVFMrUEFTUzFfQklUUyszKQotCQkJICAgICYgUkFOR0VfTUFTS107Ci0gICAgb3V0cHRyWzVdID0gcmFuZ2VfbGltaXRbKGludCkgUklHSFRfU0hJRlQodG1wMjEgLSB0bXAxMSwKLQkJCQkJICAgICAgQ09OU1RfQklUUytQQVNTMV9CSVRTKzMpCi0JCQkgICAgJiBSQU5HRV9NQVNLXTsKLSAgICBvdXRwdHJbMl0gPSByYW5nZV9saW1pdFsoaW50KSBSSUdIVF9TSElGVCh0bXAyMiArIHRtcDEyLAotCQkJCQkgICAgICBDT05TVF9CSVRTK1BBU1MxX0JJVFMrMykKLQkJCSAgICAmIFJBTkdFX01BU0tdOwotICAgIG91dHB0cls0XSA9IHJhbmdlX2xpbWl0WyhpbnQpIFJJR0hUX1NISUZUKHRtcDIyIC0gdG1wMTIsCi0JCQkJCSAgICAgIENPTlNUX0JJVFMrUEFTUzFfQklUUyszKQotCQkJICAgICYgUkFOR0VfTUFTS107Ci0gICAgb3V0cHRyWzNdID0gcmFuZ2VfbGltaXRbKGludCkgUklHSFRfU0hJRlQodG1wMjMsCi0JCQkJCSAgICAgIENPTlNUX0JJVFMrUEFTUzFfQklUUyszKQotCQkJICAgICYgUkFOR0VfTUFTS107Ci0KLSAgICB3c3B0ciArPSA3OwkJLyogYWR2YW5jZSBwb2ludGVyIHRvIG5leHQgcm93ICovCi0gIH0KLX0KLQotCi0vKgotICogUGVyZm9ybSBkZXF1YW50aXphdGlvbiBhbmQgaW52ZXJzZSBEQ1Qgb24gb25lIGJsb2NrIG9mIGNvZWZmaWNpZW50cywKLSAqIHByb2R1Y2luZyBhIDZ4MTIgb3V0cHV0IGJsb2NrLgotICoKLSAqIDEyLXBvaW50IElEQ1QgaW4gcGFzcyAxIChjb2x1bW5zKSwgNi1wb2ludCBpbiBwYXNzIDIgKHJvd3MpLgotICovCi0KLUdMT0JBTCh2b2lkKQotanBlZ19pZGN0XzZ4MTIgKGpfZGVjb21wcmVzc19wdHIgY2luZm8sIGpwZWdfY29tcG9uZW50X2luZm8gKiBjb21wcHRyLAotCQlKQ09FRlBUUiBjb2VmX2Jsb2NrLAotCQlKU0FNUEFSUkFZIG91dHB1dF9idWYsIEpESU1FTlNJT04gb3V0cHV0X2NvbCkKLXsKLSAgSU5UMzIgdG1wMTAsIHRtcDExLCB0bXAxMiwgdG1wMTMsIHRtcDE0LCB0bXAxNTsKLSAgSU5UMzIgdG1wMjAsIHRtcDIxLCB0bXAyMiwgdG1wMjMsIHRtcDI0LCB0bXAyNTsKLSAgSU5UMzIgejEsIHoyLCB6MywgejQ7Ci0gIEpDT0VGUFRSIGlucHRyOwotICBJU0xPV19NVUxUX1RZUEUgKiBxdWFudHB0cjsKLSAgaW50ICogd3NwdHI7Ci0gIEpTQU1QUk9XIG91dHB0cjsKLSAgSlNBTVBMRSAqcmFuZ2VfbGltaXQgPSBJRENUX3JhbmdlX2xpbWl0KGNpbmZvKTsKLSAgaW50IGN0cjsKLSAgaW50IHdvcmtzcGFjZVs2KjEyXTsJLyogYnVmZmVycyBkYXRhIGJldHdlZW4gcGFzc2VzICovCi0gIFNISUZUX1RFTVBTCi0KLSAgLyogUGFzcyAxOiBwcm9jZXNzIGNvbHVtbnMgZnJvbSBpbnB1dCwgc3RvcmUgaW50byB3b3JrIGFycmF5LgotICAgKiAxMi1wb2ludCBJRENUIGtlcm5lbCwgY0sgcmVwcmVzZW50cyBzcXJ0KDIpICogY29zKEsqcGkvMjQpLgotICAgKi8KLSAgaW5wdHIgPSBjb2VmX2Jsb2NrOwotICBxdWFudHB0ciA9IChJU0xPV19NVUxUX1RZUEUgKikgY29tcHB0ci0+ZGN0X3RhYmxlOwotICB3c3B0ciA9IHdvcmtzcGFjZTsKLSAgZm9yIChjdHIgPSAwOyBjdHIgPCA2OyBjdHIrKywgaW5wdHIrKywgcXVhbnRwdHIrKywgd3NwdHIrKykgewotICAgIC8qIEV2ZW4gcGFydCAqLwotCi0gICAgejMgPSBERVFVQU5USVpFKGlucHRyW0RDVFNJWkUqMF0sIHF1YW50cHRyW0RDVFNJWkUqMF0pOwotICAgIHozIDw8PSBDT05TVF9CSVRTOwotICAgIC8qIEFkZCBmdWRnZSBmYWN0b3IgaGVyZSBmb3IgZmluYWwgZGVzY2FsZS4gKi8KLSAgICB6MyArPSBPTkUgPDwgKENPTlNUX0JJVFMtUEFTUzFfQklUUy0xKTsKLQotICAgIHo0ID0gREVRVUFOVElaRShpbnB0cltEQ1RTSVpFKjRdLCBxdWFudHB0cltEQ1RTSVpFKjRdKTsKLSAgICB6NCA9IE1VTFRJUExZKHo0LCBGSVgoMS4yMjQ3NDQ4NzEpKTsgLyogYzQgKi8KLQotICAgIHRtcDEwID0gejMgKyB6NDsKLSAgICB0bXAxMSA9IHozIC0gejQ7Ci0KLSAgICB6MSA9IERFUVVBTlRJWkUoaW5wdHJbRENUU0laRSoyXSwgcXVhbnRwdHJbRENUU0laRSoyXSk7Ci0gICAgejQgPSBNVUxUSVBMWSh6MSwgRklYKDEuMzY2MDI1NDA0KSk7IC8qIGMyICovCi0gICAgejEgPDw9IENPTlNUX0JJVFM7Ci0gICAgejIgPSBERVFVQU5USVpFKGlucHRyW0RDVFNJWkUqNl0sIHF1YW50cHRyW0RDVFNJWkUqNl0pOwotICAgIHoyIDw8PSBDT05TVF9CSVRTOwotCi0gICAgdG1wMTIgPSB6MSAtIHoyOwotCi0gICAgdG1wMjEgPSB6MyArIHRtcDEyOwotICAgIHRtcDI0ID0gejMgLSB0bXAxMjsKLQotICAgIHRtcDEyID0gejQgKyB6MjsKLQotICAgIHRtcDIwID0gdG1wMTAgKyB0bXAxMjsKLSAgICB0bXAyNSA9IHRtcDEwIC0gdG1wMTI7Ci0KLSAgICB0bXAxMiA9IHo0IC0gejEgLSB6MjsKLQotICAgIHRtcDIyID0gdG1wMTEgKyB0bXAxMjsKLSAgICB0bXAyMyA9IHRtcDExIC0gdG1wMTI7Ci0KLSAgICAvKiBPZGQgcGFydCAqLwotCi0gICAgejEgPSBERVFVQU5USVpFKGlucHRyW0RDVFNJWkUqMV0sIHF1YW50cHRyW0RDVFNJWkUqMV0pOwotICAgIHoyID0gREVRVUFOVElaRShpbnB0cltEQ1RTSVpFKjNdLCBxdWFudHB0cltEQ1RTSVpFKjNdKTsKLSAgICB6MyA9IERFUVVBTlRJWkUoaW5wdHJbRENUU0laRSo1XSwgcXVhbnRwdHJbRENUU0laRSo1XSk7Ci0gICAgejQgPSBERVFVQU5USVpFKGlucHRyW0RDVFNJWkUqN10sIHF1YW50cHRyW0RDVFNJWkUqN10pOwotCi0gICAgdG1wMTEgPSBNVUxUSVBMWSh6MiwgRklYKDEuMzA2NTYyOTY1KSk7ICAgICAgICAgICAgICAgICAgLyogYzMgKi8KLSAgICB0bXAxNCA9IE1VTFRJUExZKHoyLCAtIEZJWF8wXzU0MTE5NjEwMCk7ICAgICAgICAgICAgICAgICAvKiAtYzkgKi8KLQotICAgIHRtcDEwID0gejEgKyB6MzsKLSAgICB0bXAxNSA9IE1VTFRJUExZKHRtcDEwICsgejQsIEZJWCgwLjg2MDkxODY2OSkpOyAgICAgICAgICAvKiBjNyAqLwotICAgIHRtcDEyID0gdG1wMTUgKyBNVUxUSVBMWSh0bXAxMCwgRklYKDAuMjYxMDUyMzg0KSk7ICAgICAgIC8qIGM1LWM3ICovCi0gICAgdG1wMTAgPSB0bXAxMiArIHRtcDExICsgTVVMVElQTFkoejEsIEZJWCgwLjI4MDE0MzcxNikpOyAgLyogYzEtYzUgKi8KLSAgICB0bXAxMyA9IE1VTFRJUExZKHozICsgejQsIC0gRklYKDEuMDQ1NTEwNTgwKSk7ICAgICAgICAgICAvKiAtKGM3K2MxMSkgKi8KLSAgICB0bXAxMiArPSB0bXAxMyArIHRtcDE0IC0gTVVMVElQTFkoejMsIEZJWCgxLjQ3ODU3NTI0MikpOyAvKiBjMStjNS1jNy1jMTEgKi8KLSAgICB0bXAxMyArPSB0bXAxNSAtIHRtcDExICsgTVVMVElQTFkoejQsIEZJWCgxLjU4NjcwNjY4MSkpOyAvKiBjMStjMTEgKi8KLSAgICB0bXAxNSArPSB0bXAxNCAtIE1VTFRJUExZKHoxLCBGSVgoMC42NzYzMjY3NTgpKSAtICAgICAgICAvKiBjNy1jMTEgKi8KLQkgICAgIE1VTFRJUExZKHo0LCBGSVgoMS45ODI4ODk3MjMpKTsgICAgICAgICAgICAgICAgIC8qIGM1K2M3ICovCi0KLSAgICB6MSAtPSB6NDsKLSAgICB6MiAtPSB6MzsKLSAgICB6MyA9IE1VTFRJUExZKHoxICsgejIsIEZJWF8wXzU0MTE5NjEwMCk7ICAgICAgICAgICAgICAgICAvKiBjOSAqLwotICAgIHRtcDExID0gejMgKyBNVUxUSVBMWSh6MSwgRklYXzBfNzY1MzY2ODY1KTsgICAgICAgICAgICAgIC8qIGMzLWM5ICovCi0gICAgdG1wMTQgPSB6MyAtIE1VTFRJUExZKHoyLCBGSVhfMV84NDc3NTkwNjUpOyAgICAgICAgICAgICAgLyogYzMrYzkgKi8KLQotICAgIC8qIEZpbmFsIG91dHB1dCBzdGFnZSAqLwotCi0gICAgd3NwdHJbNiowXSAgPSAoaW50KSBSSUdIVF9TSElGVCh0bXAyMCArIHRtcDEwLCBDT05TVF9CSVRTLVBBU1MxX0JJVFMpOwotICAgIHdzcHRyWzYqMTFdID0gKGludCkgUklHSFRfU0hJRlQodG1wMjAgLSB0bXAxMCwgQ09OU1RfQklUUy1QQVNTMV9CSVRTKTsKLSAgICB3c3B0cls2KjFdICA9IChpbnQpIFJJR0hUX1NISUZUKHRtcDIxICsgdG1wMTEsIENPTlNUX0JJVFMtUEFTUzFfQklUUyk7Ci0gICAgd3NwdHJbNioxMF0gPSAoaW50KSBSSUdIVF9TSElGVCh0bXAyMSAtIHRtcDExLCBDT05TVF9CSVRTLVBBU1MxX0JJVFMpOwotICAgIHdzcHRyWzYqMl0gID0gKGludCkgUklHSFRfU0hJRlQodG1wMjIgKyB0bXAxMiwgQ09OU1RfQklUUy1QQVNTMV9CSVRTKTsKLSAgICB3c3B0cls2KjldICA9IChpbnQpIFJJR0hUX1NISUZUKHRtcDIyIC0gdG1wMTIsIENPTlNUX0JJVFMtUEFTUzFfQklUUyk7Ci0gICAgd3NwdHJbNiozXSAgPSAoaW50KSBSSUdIVF9TSElGVCh0bXAyMyArIHRtcDEzLCBDT05TVF9CSVRTLVBBU1MxX0JJVFMpOwotICAgIHdzcHRyWzYqOF0gID0gKGludCkgUklHSFRfU0hJRlQodG1wMjMgLSB0bXAxMywgQ09OU1RfQklUUy1QQVNTMV9CSVRTKTsKLSAgICB3c3B0cls2KjRdICA9IChpbnQpIFJJR0hUX1NISUZUKHRtcDI0ICsgdG1wMTQsIENPTlNUX0JJVFMtUEFTUzFfQklUUyk7Ci0gICAgd3NwdHJbNio3XSAgPSAoaW50KSBSSUdIVF9TSElGVCh0bXAyNCAtIHRtcDE0LCBDT05TVF9CSVRTLVBBU1MxX0JJVFMpOwotICAgIHdzcHRyWzYqNV0gID0gKGludCkgUklHSFRfU0hJRlQodG1wMjUgKyB0bXAxNSwgQ09OU1RfQklUUy1QQVNTMV9CSVRTKTsKLSAgICB3c3B0cls2KjZdICA9IChpbnQpIFJJR0hUX1NISUZUKHRtcDI1IC0gdG1wMTUsIENPTlNUX0JJVFMtUEFTUzFfQklUUyk7Ci0gIH0KLQotICAvKiBQYXNzIDI6IHByb2Nlc3MgMTIgcm93cyBmcm9tIHdvcmsgYXJyYXksIHN0b3JlIGludG8gb3V0cHV0IGFycmF5LgotICAgKiA2LXBvaW50IElEQ1Qga2VybmVsLCBjSyByZXByZXNlbnRzIHNxcnQoMikgKiBjb3MoSypwaS8xMikuCi0gICAqLwotICB3c3B0ciA9IHdvcmtzcGFjZTsKLSAgZm9yIChjdHIgPSAwOyBjdHIgPCAxMjsgY3RyKyspIHsKLSAgICBvdXRwdHIgPSBvdXRwdXRfYnVmW2N0cl0gKyBvdXRwdXRfY29sOwotCi0gICAgLyogRXZlbiBwYXJ0ICovCi0KLSAgICAvKiBBZGQgZnVkZ2UgZmFjdG9yIGhlcmUgZm9yIGZpbmFsIGRlc2NhbGUuICovCi0gICAgdG1wMTAgPSAoSU5UMzIpIHdzcHRyWzBdICsgKE9ORSA8PCAoUEFTUzFfQklUUysyKSk7Ci0gICAgdG1wMTAgPDw9IENPTlNUX0JJVFM7Ci0gICAgdG1wMTIgPSAoSU5UMzIpIHdzcHRyWzRdOwotICAgIHRtcDIwID0gTVVMVElQTFkodG1wMTIsIEZJWCgwLjcwNzEwNjc4MSkpOyAgIC8qIGM0ICovCi0gICAgdG1wMTEgPSB0bXAxMCArIHRtcDIwOwotICAgIHRtcDIxID0gdG1wMTAgLSB0bXAyMCAtIHRtcDIwOwotICAgIHRtcDIwID0gKElOVDMyKSB3c3B0clsyXTsKLSAgICB0bXAxMCA9IE1VTFRJUExZKHRtcDIwLCBGSVgoMS4yMjQ3NDQ4NzEpKTsgICAvKiBjMiAqLwotICAgIHRtcDIwID0gdG1wMTEgKyB0bXAxMDsKLSAgICB0bXAyMiA9IHRtcDExIC0gdG1wMTA7Ci0KLSAgICAvKiBPZGQgcGFydCAqLwotCi0gICAgejEgPSAoSU5UMzIpIHdzcHRyWzFdOwotICAgIHoyID0gKElOVDMyKSB3c3B0clszXTsKLSAgICB6MyA9IChJTlQzMikgd3NwdHJbNV07Ci0gICAgdG1wMTEgPSBNVUxUSVBMWSh6MSArIHozLCBGSVgoMC4zNjYwMjU0MDQpKTsgLyogYzUgKi8KLSAgICB0bXAxMCA9IHRtcDExICsgKCh6MSArIHoyKSA8PCBDT05TVF9CSVRTKTsKLSAgICB0bXAxMiA9IHRtcDExICsgKCh6MyAtIHoyKSA8PCBDT05TVF9CSVRTKTsKLSAgICB0bXAxMSA9ICh6MSAtIHoyIC0gejMpIDw8IENPTlNUX0JJVFM7Ci0KLSAgICAvKiBGaW5hbCBvdXRwdXQgc3RhZ2UgKi8KLQotICAgIG91dHB0clswXSA9IHJhbmdlX2xpbWl0WyhpbnQpIFJJR0hUX1NISUZUKHRtcDIwICsgdG1wMTAsCi0JCQkJCSAgICAgIENPTlNUX0JJVFMrUEFTUzFfQklUUyszKQotCQkJICAgICYgUkFOR0VfTUFTS107Ci0gICAgb3V0cHRyWzVdID0gcmFuZ2VfbGltaXRbKGludCkgUklHSFRfU0hJRlQodG1wMjAgLSB0bXAxMCwKLQkJCQkJICAgICAgQ09OU1RfQklUUytQQVNTMV9CSVRTKzMpCi0JCQkgICAgJiBSQU5HRV9NQVNLXTsKLSAgICBvdXRwdHJbMV0gPSByYW5nZV9saW1pdFsoaW50KSBSSUdIVF9TSElGVCh0bXAyMSArIHRtcDExLAotCQkJCQkgICAgICBDT05TVF9CSVRTK1BBU1MxX0JJVFMrMykKLQkJCSAgICAmIFJBTkdFX01BU0tdOwotICAgIG91dHB0cls0XSA9IHJhbmdlX2xpbWl0WyhpbnQpIFJJR0hUX1NISUZUKHRtcDIxIC0gdG1wMTEsCi0JCQkJCSAgICAgIENPTlNUX0JJVFMrUEFTUzFfQklUUyszKQotCQkJICAgICYgUkFOR0VfTUFTS107Ci0gICAgb3V0cHRyWzJdID0gcmFuZ2VfbGltaXRbKGludCkgUklHSFRfU0hJRlQodG1wMjIgKyB0bXAxMiwKLQkJCQkJICAgICAgQ09OU1RfQklUUytQQVNTMV9CSVRTKzMpCi0JCQkgICAgJiBSQU5HRV9NQVNLXTsKLSAgICBvdXRwdHJbM10gPSByYW5nZV9saW1pdFsoaW50KSBSSUdIVF9TSElGVCh0bXAyMiAtIHRtcDEyLAotCQkJCQkgICAgICBDT05TVF9CSVRTK1BBU1MxX0JJVFMrMykKLQkJCSAgICAmIFJBTkdFX01BU0tdOwotCi0gICAgd3NwdHIgKz0gNjsJCS8qIGFkdmFuY2UgcG9pbnRlciB0byBuZXh0IHJvdyAqLwotICB9Ci19Ci0KLQotLyoKLSAqIFBlcmZvcm0gZGVxdWFudGl6YXRpb24gYW5kIGludmVyc2UgRENUIG9uIG9uZSBibG9jayBvZiBjb2VmZmljaWVudHMsCi0gKiBwcm9kdWNpbmcgYSA1eDEwIG91dHB1dCBibG9jay4KLSAqCi0gKiAxMC1wb2ludCBJRENUIGluIHBhc3MgMSAoY29sdW1ucyksIDUtcG9pbnQgaW4gcGFzcyAyIChyb3dzKS4KLSAqLwotCi1HTE9CQUwodm9pZCkKLWpwZWdfaWRjdF81eDEwIChqX2RlY29tcHJlc3NfcHRyIGNpbmZvLCBqcGVnX2NvbXBvbmVudF9pbmZvICogY29tcHB0ciwKLQkJSkNPRUZQVFIgY29lZl9ibG9jaywKLQkJSlNBTVBBUlJBWSBvdXRwdXRfYnVmLCBKRElNRU5TSU9OIG91dHB1dF9jb2wpCi17Ci0gIElOVDMyIHRtcDEwLCB0bXAxMSwgdG1wMTIsIHRtcDEzLCB0bXAxNDsKLSAgSU5UMzIgdG1wMjAsIHRtcDIxLCB0bXAyMiwgdG1wMjMsIHRtcDI0OwotICBJTlQzMiB6MSwgejIsIHozLCB6NCwgejU7Ci0gIEpDT0VGUFRSIGlucHRyOwotICBJU0xPV19NVUxUX1RZUEUgKiBxdWFudHB0cjsKLSAgaW50ICogd3NwdHI7Ci0gIEpTQU1QUk9XIG91dHB0cjsKLSAgSlNBTVBMRSAqcmFuZ2VfbGltaXQgPSBJRENUX3JhbmdlX2xpbWl0KGNpbmZvKTsKLSAgaW50IGN0cjsKLSAgaW50IHdvcmtzcGFjZVs1KjEwXTsJLyogYnVmZmVycyBkYXRhIGJldHdlZW4gcGFzc2VzICovCi0gIFNISUZUX1RFTVBTCi0KLSAgLyogUGFzcyAxOiBwcm9jZXNzIGNvbHVtbnMgZnJvbSBpbnB1dCwgc3RvcmUgaW50byB3b3JrIGFycmF5LgotICAgKiAxMC1wb2ludCBJRENUIGtlcm5lbCwgY0sgcmVwcmVzZW50cyBzcXJ0KDIpICogY29zKEsqcGkvMjApLgotICAgKi8KLSAgaW5wdHIgPSBjb2VmX2Jsb2NrOwotICBxdWFudHB0ciA9IChJU0xPV19NVUxUX1RZUEUgKikgY29tcHB0ci0+ZGN0X3RhYmxlOwotICB3c3B0ciA9IHdvcmtzcGFjZTsKLSAgZm9yIChjdHIgPSAwOyBjdHIgPCA1OyBjdHIrKywgaW5wdHIrKywgcXVhbnRwdHIrKywgd3NwdHIrKykgewotICAgIC8qIEV2ZW4gcGFydCAqLwotCi0gICAgejMgPSBERVFVQU5USVpFKGlucHRyW0RDVFNJWkUqMF0sIHF1YW50cHRyW0RDVFNJWkUqMF0pOwotICAgIHozIDw8PSBDT05TVF9CSVRTOwotICAgIC8qIEFkZCBmdWRnZSBmYWN0b3IgaGVyZSBmb3IgZmluYWwgZGVzY2FsZS4gKi8KLSAgICB6MyArPSBPTkUgPDwgKENPTlNUX0JJVFMtUEFTUzFfQklUUy0xKTsKLSAgICB6NCA9IERFUVVBTlRJWkUoaW5wdHJbRENUU0laRSo0XSwgcXVhbnRwdHJbRENUU0laRSo0XSk7Ci0gICAgejEgPSBNVUxUSVBMWSh6NCwgRklYKDEuMTQ0MTIyODA2KSk7ICAgICAgICAgLyogYzQgKi8KLSAgICB6MiA9IE1VTFRJUExZKHo0LCBGSVgoMC40MzcwMTYwMjQpKTsgICAgICAgICAvKiBjOCAqLwotICAgIHRtcDEwID0gejMgKyB6MTsKLSAgICB0bXAxMSA9IHozIC0gejI7Ci0KLSAgICB0bXAyMiA9IFJJR0hUX1NISUZUKHozIC0gKCh6MSAtIHoyKSA8PCAxKSwgICAvKiBjMCA9IChjNC1jOCkqMiAqLwotCQkJQ09OU1RfQklUUy1QQVNTMV9CSVRTKTsKLQotICAgIHoyID0gREVRVUFOVElaRShpbnB0cltEQ1RTSVpFKjJdLCBxdWFudHB0cltEQ1RTSVpFKjJdKTsKLSAgICB6MyA9IERFUVVBTlRJWkUoaW5wdHJbRENUU0laRSo2XSwgcXVhbnRwdHJbRENUU0laRSo2XSk7Ci0KLSAgICB6MSA9IE1VTFRJUExZKHoyICsgejMsIEZJWCgwLjgzMTI1Mzg3NikpOyAgICAvKiBjNiAqLwotICAgIHRtcDEyID0gejEgKyBNVUxUSVBMWSh6MiwgRklYKDAuNTEzNzQzMTQ4KSk7IC8qIGMyLWM2ICovCi0gICAgdG1wMTMgPSB6MSAtIE1VTFRJUExZKHozLCBGSVgoMi4xNzYyNTA4OTkpKTsgLyogYzIrYzYgKi8KLQotICAgIHRtcDIwID0gdG1wMTAgKyB0bXAxMjsKLSAgICB0bXAyNCA9IHRtcDEwIC0gdG1wMTI7Ci0gICAgdG1wMjEgPSB0bXAxMSArIHRtcDEzOwotICAgIHRtcDIzID0gdG1wMTEgLSB0bXAxMzsKLQotICAgIC8qIE9kZCBwYXJ0ICovCi0KLSAgICB6MSA9IERFUVVBTlRJWkUoaW5wdHJbRENUU0laRSoxXSwgcXVhbnRwdHJbRENUU0laRSoxXSk7Ci0gICAgejIgPSBERVFVQU5USVpFKGlucHRyW0RDVFNJWkUqM10sIHF1YW50cHRyW0RDVFNJWkUqM10pOwotICAgIHozID0gREVRVUFOVElaRShpbnB0cltEQ1RTSVpFKjVdLCBxdWFudHB0cltEQ1RTSVpFKjVdKTsKLSAgICB6NCA9IERFUVVBTlRJWkUoaW5wdHJbRENUU0laRSo3XSwgcXVhbnRwdHJbRENUU0laRSo3XSk7Ci0KLSAgICB0bXAxMSA9IHoyICsgejQ7Ci0gICAgdG1wMTMgPSB6MiAtIHo0OwotCi0gICAgdG1wMTIgPSBNVUxUSVBMWSh0bXAxMywgRklYKDAuMzA5MDE2OTk0KSk7ICAgICAgICAvKiAoYzMtYzcpLzIgKi8KLSAgICB6NSA9IHozIDw8IENPTlNUX0JJVFM7Ci0KLSAgICB6MiA9IE1VTFRJUExZKHRtcDExLCBGSVgoMC45NTEwNTY1MTYpKTsgICAgICAgICAgIC8qIChjMytjNykvMiAqLwotICAgIHo0ID0gejUgKyB0bXAxMjsKLQotICAgIHRtcDEwID0gTVVMVElQTFkoejEsIEZJWCgxLjM5NjgwMjI0NykpICsgejIgKyB6NDsgLyogYzEgKi8KLSAgICB0bXAxNCA9IE1VTFRJUExZKHoxLCBGSVgoMC4yMjEyMzE3NDIpKSAtIHoyICsgejQ7IC8qIGM5ICovCi0KLSAgICB6MiA9IE1VTFRJUExZKHRtcDExLCBGSVgoMC41ODc3ODUyNTIpKTsgICAgICAgICAgIC8qIChjMS1jOSkvMiAqLwotICAgIHo0ID0gejUgLSB0bXAxMiAtICh0bXAxMyA8PCAoQ09OU1RfQklUUyAtIDEpKTsKLQotICAgIHRtcDEyID0gKHoxIC0gdG1wMTMgLSB6MykgPDwgUEFTUzFfQklUUzsKLQotICAgIHRtcDExID0gTVVMVElQTFkoejEsIEZJWCgxLjI2MDA3MzUxMSkpIC0gejIgLSB6NDsgLyogYzMgKi8KLSAgICB0bXAxMyA9IE1VTFRJUExZKHoxLCBGSVgoMC42NDIwMzk1MjIpKSAtIHoyICsgejQ7IC8qIGM3ICovCi0KLSAgICAvKiBGaW5hbCBvdXRwdXQgc3RhZ2UgKi8KLQotICAgIHdzcHRyWzUqMF0gPSAoaW50KSBSSUdIVF9TSElGVCh0bXAyMCArIHRtcDEwLCBDT05TVF9CSVRTLVBBU1MxX0JJVFMpOwotICAgIHdzcHRyWzUqOV0gPSAoaW50KSBSSUdIVF9TSElGVCh0bXAyMCAtIHRtcDEwLCBDT05TVF9CSVRTLVBBU1MxX0JJVFMpOwotICAgIHdzcHRyWzUqMV0gPSAoaW50KSBSSUdIVF9TSElGVCh0bXAyMSArIHRtcDExLCBDT05TVF9CSVRTLVBBU1MxX0JJVFMpOwotICAgIHdzcHRyWzUqOF0gPSAoaW50KSBSSUdIVF9TSElGVCh0bXAyMSAtIHRtcDExLCBDT05TVF9CSVRTLVBBU1MxX0JJVFMpOwotICAgIHdzcHRyWzUqMl0gPSAoaW50KSAodG1wMjIgKyB0bXAxMik7Ci0gICAgd3NwdHJbNSo3XSA9IChpbnQpICh0bXAyMiAtIHRtcDEyKTsKLSAgICB3c3B0cls1KjNdID0gKGludCkgUklHSFRfU0hJRlQodG1wMjMgKyB0bXAxMywgQ09OU1RfQklUUy1QQVNTMV9CSVRTKTsKLSAgICB3c3B0cls1KjZdID0gKGludCkgUklHSFRfU0hJRlQodG1wMjMgLSB0bXAxMywgQ09OU1RfQklUUy1QQVNTMV9CSVRTKTsKLSAgICB3c3B0cls1KjRdID0gKGludCkgUklHSFRfU0hJRlQodG1wMjQgKyB0bXAxNCwgQ09OU1RfQklUUy1QQVNTMV9CSVRTKTsKLSAgICB3c3B0cls1KjVdID0gKGludCkgUklHSFRfU0hJRlQodG1wMjQgLSB0bXAxNCwgQ09OU1RfQklUUy1QQVNTMV9CSVRTKTsKLSAgfQotCi0gIC8qIFBhc3MgMjogcHJvY2VzcyAxMCByb3dzIGZyb20gd29yayBhcnJheSwgc3RvcmUgaW50byBvdXRwdXQgYXJyYXkuCi0gICAqIDUtcG9pbnQgSURDVCBrZXJuZWwsIGNLIHJlcHJlc2VudHMgc3FydCgyKSAqIGNvcyhLKnBpLzEwKS4KLSAgICovCi0gIHdzcHRyID0gd29ya3NwYWNlOwotICBmb3IgKGN0ciA9IDA7IGN0ciA8IDEwOyBjdHIrKykgewotICAgIG91dHB0ciA9IG91dHB1dF9idWZbY3RyXSArIG91dHB1dF9jb2w7Ci0KLSAgICAvKiBFdmVuIHBhcnQgKi8KLQotICAgIC8qIEFkZCBmdWRnZSBmYWN0b3IgaGVyZSBmb3IgZmluYWwgZGVzY2FsZS4gKi8KLSAgICB0bXAxMiA9IChJTlQzMikgd3NwdHJbMF0gKyAoT05FIDw8IChQQVNTMV9CSVRTKzIpKTsKLSAgICB0bXAxMiA8PD0gQ09OU1RfQklUUzsKLSAgICB0bXAxMyA9IChJTlQzMikgd3NwdHJbMl07Ci0gICAgdG1wMTQgPSAoSU5UMzIpIHdzcHRyWzRdOwotICAgIHoxID0gTVVMVElQTFkodG1wMTMgKyB0bXAxNCwgRklYKDAuNzkwNTY5NDE1KSk7IC8qIChjMitjNCkvMiAqLwotICAgIHoyID0gTVVMVElQTFkodG1wMTMgLSB0bXAxNCwgRklYKDAuMzUzNTUzMzkxKSk7IC8qIChjMi1jNCkvMiAqLwotICAgIHozID0gdG1wMTIgKyB6MjsKLSAgICB0bXAxMCA9IHozICsgejE7Ci0gICAgdG1wMTEgPSB6MyAtIHoxOwotICAgIHRtcDEyIC09IHoyIDw8IDI7Ci0KLSAgICAvKiBPZGQgcGFydCAqLwotCi0gICAgejIgPSAoSU5UMzIpIHdzcHRyWzFdOwotICAgIHozID0gKElOVDMyKSB3c3B0clszXTsKLQotICAgIHoxID0gTVVMVElQTFkoejIgKyB6MywgRklYKDAuODMxMjUzODc2KSk7ICAgICAgIC8qIGMzICovCi0gICAgdG1wMTMgPSB6MSArIE1VTFRJUExZKHoyLCBGSVgoMC41MTM3NDMxNDgpKTsgICAgLyogYzEtYzMgKi8KLSAgICB0bXAxNCA9IHoxIC0gTVVMVElQTFkoejMsIEZJWCgyLjE3NjI1MDg5OSkpOyAgICAvKiBjMStjMyAqLwotCi0gICAgLyogRmluYWwgb3V0cHV0IHN0YWdlICovCi0KLSAgICBvdXRwdHJbMF0gPSByYW5nZV9saW1pdFsoaW50KSBSSUdIVF9TSElGVCh0bXAxMCArIHRtcDEzLAotCQkJCQkgICAgICBDT05TVF9CSVRTK1BBU1MxX0JJVFMrMykKLQkJCSAgICAmIFJBTkdFX01BU0tdOwotICAgIG91dHB0cls0XSA9IHJhbmdlX2xpbWl0WyhpbnQpIFJJR0hUX1NISUZUKHRtcDEwIC0gdG1wMTMsCi0JCQkJCSAgICAgIENPTlNUX0JJVFMrUEFTUzFfQklUUyszKQotCQkJICAgICYgUkFOR0VfTUFTS107Ci0gICAgb3V0cHRyWzFdID0gcmFuZ2VfbGltaXRbKGludCkgUklHSFRfU0hJRlQodG1wMTEgKyB0bXAxNCwKLQkJCQkJICAgICAgQ09OU1RfQklUUytQQVNTMV9CSVRTKzMpCi0JCQkgICAgJiBSQU5HRV9NQVNLXTsKLSAgICBvdXRwdHJbM10gPSByYW5nZV9saW1pdFsoaW50KSBSSUdIVF9TSElGVCh0bXAxMSAtIHRtcDE0LAotCQkJCQkgICAgICBDT05TVF9CSVRTK1BBU1MxX0JJVFMrMykKLQkJCSAgICAmIFJBTkdFX01BU0tdOwotICAgIG91dHB0clsyXSA9IHJhbmdlX2xpbWl0WyhpbnQpIFJJR0hUX1NISUZUKHRtcDEyLAotCQkJCQkgICAgICBDT05TVF9CSVRTK1BBU1MxX0JJVFMrMykKLQkJCSAgICAmIFJBTkdFX01BU0tdOwotCi0gICAgd3NwdHIgKz0gNTsJCS8qIGFkdmFuY2UgcG9pbnRlciB0byBuZXh0IHJvdyAqLwotICB9Ci19Ci0KLQotLyoKLSAqIFBlcmZvcm0gZGVxdWFudGl6YXRpb24gYW5kIGludmVyc2UgRENUIG9uIG9uZSBibG9jayBvZiBjb2VmZmljaWVudHMsCi0gKiBwcm9kdWNpbmcgYSA0eDggb3V0cHV0IGJsb2NrLgotICoKLSAqIDgtcG9pbnQgSURDVCBpbiBwYXNzIDEgKGNvbHVtbnMpLCA0LXBvaW50IGluIHBhc3MgMiAocm93cykuCi0gKi8KLQotR0xPQkFMKHZvaWQpCi1qcGVnX2lkY3RfNHg4IChqX2RlY29tcHJlc3NfcHRyIGNpbmZvLCBqcGVnX2NvbXBvbmVudF9pbmZvICogY29tcHB0ciwKLQkgICAgICAgSkNPRUZQVFIgY29lZl9ibG9jaywKLQkgICAgICAgSlNBTVBBUlJBWSBvdXRwdXRfYnVmLCBKRElNRU5TSU9OIG91dHB1dF9jb2wpCi17Ci0gIElOVDMyIHRtcDAsIHRtcDEsIHRtcDIsIHRtcDM7Ci0gIElOVDMyIHRtcDEwLCB0bXAxMSwgdG1wMTIsIHRtcDEzOwotICBJTlQzMiB6MSwgejIsIHozOwotICBKQ09FRlBUUiBpbnB0cjsKLSAgSVNMT1dfTVVMVF9UWVBFICogcXVhbnRwdHI7Ci0gIGludCAqIHdzcHRyOwotICBKU0FNUFJPVyBvdXRwdHI7Ci0gIEpTQU1QTEUgKnJhbmdlX2xpbWl0ID0gSURDVF9yYW5nZV9saW1pdChjaW5mbyk7Ci0gIGludCBjdHI7Ci0gIGludCB3b3Jrc3BhY2VbNCo4XTsJLyogYnVmZmVycyBkYXRhIGJldHdlZW4gcGFzc2VzICovCi0gIFNISUZUX1RFTVBTCi0KLSAgLyogUGFzcyAxOiBwcm9jZXNzIGNvbHVtbnMgZnJvbSBpbnB1dCwgc3RvcmUgaW50byB3b3JrIGFycmF5LiAqLwotICAvKiBOb3RlIHJlc3VsdHMgYXJlIHNjYWxlZCB1cCBieSBzcXJ0KDgpIGNvbXBhcmVkIHRvIGEgdHJ1ZSBJRENUOyAqLwotICAvKiBmdXJ0aGVybW9yZSwgd2Ugc2NhbGUgdGhlIHJlc3VsdHMgYnkgMioqUEFTUzFfQklUUy4gKi8KLQotICBpbnB0ciA9IGNvZWZfYmxvY2s7Ci0gIHF1YW50cHRyID0gKElTTE9XX01VTFRfVFlQRSAqKSBjb21wcHRyLT5kY3RfdGFibGU7Ci0gIHdzcHRyID0gd29ya3NwYWNlOwotICBmb3IgKGN0ciA9IDQ7IGN0ciA+IDA7IGN0ci0tKSB7Ci0gICAgLyogRHVlIHRvIHF1YW50aXphdGlvbiwgd2Ugd2lsbCB1c3VhbGx5IGZpbmQgdGhhdCBtYW55IG9mIHRoZSBpbnB1dAotICAgICAqIGNvZWZmaWNpZW50cyBhcmUgemVybywgZXNwZWNpYWxseSB0aGUgQUMgdGVybXMuICBXZSBjYW4gZXhwbG9pdCB0aGlzCi0gICAgICogYnkgc2hvcnQtY2lyY3VpdGluZyB0aGUgSURDVCBjYWxjdWxhdGlvbiBmb3IgYW55IGNvbHVtbiBpbiB3aGljaCBhbGwKLSAgICAgKiB0aGUgQUMgdGVybXMgYXJlIHplcm8uICBJbiB0aGF0IGNhc2UgZWFjaCBvdXRwdXQgaXMgZXF1YWwgdG8gdGhlCi0gICAgICogREMgY29lZmZpY2llbnQgKHdpdGggc2NhbGUgZmFjdG9yIGFzIG5lZWRlZCkuCi0gICAgICogV2l0aCB0eXBpY2FsIGltYWdlcyBhbmQgcXVhbnRpemF0aW9uIHRhYmxlcywgaGFsZiBvciBtb3JlIG9mIHRoZQotICAgICAqIGNvbHVtbiBEQ1QgY2FsY3VsYXRpb25zIGNhbiBiZSBzaW1wbGlmaWVkIHRoaXMgd2F5LgotICAgICAqLwotCi0gICAgaWYgKGlucHRyW0RDVFNJWkUqMV0gPT0gMCAmJiBpbnB0cltEQ1RTSVpFKjJdID09IDAgJiYKLQlpbnB0cltEQ1RTSVpFKjNdID09IDAgJiYgaW5wdHJbRENUU0laRSo0XSA9PSAwICYmCi0JaW5wdHJbRENUU0laRSo1XSA9PSAwICYmIGlucHRyW0RDVFNJWkUqNl0gPT0gMCAmJgotCWlucHRyW0RDVFNJWkUqN10gPT0gMCkgewotICAgICAgLyogQUMgdGVybXMgYWxsIHplcm8gKi8KLSAgICAgIGludCBkY3ZhbCA9IERFUVVBTlRJWkUoaW5wdHJbRENUU0laRSowXSwgcXVhbnRwdHJbRENUU0laRSowXSkgPDwgUEFTUzFfQklUUzsKLQotICAgICAgd3NwdHJbNCowXSA9IGRjdmFsOwotICAgICAgd3NwdHJbNCoxXSA9IGRjdmFsOwotICAgICAgd3NwdHJbNCoyXSA9IGRjdmFsOwotICAgICAgd3NwdHJbNCozXSA9IGRjdmFsOwotICAgICAgd3NwdHJbNCo0XSA9IGRjdmFsOwotICAgICAgd3NwdHJbNCo1XSA9IGRjdmFsOwotICAgICAgd3NwdHJbNCo2XSA9IGRjdmFsOwotICAgICAgd3NwdHJbNCo3XSA9IGRjdmFsOwotCi0gICAgICBpbnB0cisrOwkJCS8qIGFkdmFuY2UgcG9pbnRlcnMgdG8gbmV4dCBjb2x1bW4gKi8KLSAgICAgIHF1YW50cHRyKys7Ci0gICAgICB3c3B0cisrOwotICAgICAgY29udGludWU7Ci0gICAgfQotCi0gICAgLyogRXZlbiBwYXJ0OiByZXZlcnNlIHRoZSBldmVuIHBhcnQgb2YgdGhlIGZvcndhcmQgRENULiAqLwotICAgIC8qIFRoZSByb3RhdG9yIGlzIHNxcnQoMikqYygtNikuICovCi0KLSAgICB6MiA9IERFUVVBTlRJWkUoaW5wdHJbRENUU0laRSoyXSwgcXVhbnRwdHJbRENUU0laRSoyXSk7Ci0gICAgejMgPSBERVFVQU5USVpFKGlucHRyW0RDVFNJWkUqNl0sIHF1YW50cHRyW0RDVFNJWkUqNl0pOwotICAgIAotICAgIHoxID0gTVVMVElQTFkoejIgKyB6MywgRklYXzBfNTQxMTk2MTAwKTsKLSAgICB0bXAyID0gejEgKyBNVUxUSVBMWSh6MiwgRklYXzBfNzY1MzY2ODY1KTsKLSAgICB0bXAzID0gejEgLSBNVUxUSVBMWSh6MywgRklYXzFfODQ3NzU5MDY1KTsKLSAgICAKLSAgICB6MiA9IERFUVVBTlRJWkUoaW5wdHJbRENUU0laRSowXSwgcXVhbnRwdHJbRENUU0laRSowXSk7Ci0gICAgejMgPSBERVFVQU5USVpFKGlucHRyW0RDVFNJWkUqNF0sIHF1YW50cHRyW0RDVFNJWkUqNF0pOwotICAgIHoyIDw8PSBDT05TVF9CSVRTOwotICAgIHozIDw8PSBDT05TVF9CSVRTOwotICAgIC8qIEFkZCBmdWRnZSBmYWN0b3IgaGVyZSBmb3IgZmluYWwgZGVzY2FsZS4gKi8KLSAgICB6MiArPSBPTkUgPDwgKENPTlNUX0JJVFMtUEFTUzFfQklUUy0xKTsKLQotICAgIHRtcDAgPSB6MiArIHozOwotICAgIHRtcDEgPSB6MiAtIHozOwotICAgIAotICAgIHRtcDEwID0gdG1wMCArIHRtcDI7Ci0gICAgdG1wMTMgPSB0bXAwIC0gdG1wMjsKLSAgICB0bXAxMSA9IHRtcDEgKyB0bXAzOwotICAgIHRtcDEyID0gdG1wMSAtIHRtcDM7Ci0KLSAgICAvKiBPZGQgcGFydCBwZXIgZmlndXJlIDg7IHRoZSBtYXRyaXggaXMgdW5pdGFyeSBhbmQgaGVuY2UgaXRzCi0gICAgICogdHJhbnNwb3NlIGlzIGl0cyBpbnZlcnNlLiAgaTAuLmkzIGFyZSB5Nyx5NSx5Myx5MSByZXNwZWN0aXZlbHkuCi0gICAgICovCi0KLSAgICB0bXAwID0gREVRVUFOVElaRShpbnB0cltEQ1RTSVpFKjddLCBxdWFudHB0cltEQ1RTSVpFKjddKTsKLSAgICB0bXAxID0gREVRVUFOVElaRShpbnB0cltEQ1RTSVpFKjVdLCBxdWFudHB0cltEQ1RTSVpFKjVdKTsKLSAgICB0bXAyID0gREVRVUFOVElaRShpbnB0cltEQ1RTSVpFKjNdLCBxdWFudHB0cltEQ1RTSVpFKjNdKTsKLSAgICB0bXAzID0gREVRVUFOVElaRShpbnB0cltEQ1RTSVpFKjFdLCBxdWFudHB0cltEQ1RTSVpFKjFdKTsKLQotICAgIHoyID0gdG1wMCArIHRtcDI7Ci0gICAgejMgPSB0bXAxICsgdG1wMzsKLQotICAgIHoxID0gTVVMVElQTFkoejIgKyB6MywgRklYXzFfMTc1ODc1NjAyKTsgLyogc3FydCgyKSAqIGMzICovCi0gICAgejIgPSBNVUxUSVBMWSh6MiwgLSBGSVhfMV85NjE1NzA1NjApOyAvKiBzcXJ0KDIpICogKC1jMy1jNSkgKi8KLSAgICB6MyA9IE1VTFRJUExZKHozLCAtIEZJWF8wXzM5MDE4MDY0NCk7IC8qIHNxcnQoMikgKiAoYzUtYzMpICovCi0gICAgejIgKz0gejE7Ci0gICAgejMgKz0gejE7Ci0KLSAgICB6MSA9IE1VTFRJUExZKHRtcDAgKyB0bXAzLCAtIEZJWF8wXzg5OTk3NjIyMyk7IC8qIHNxcnQoMikgKiAoYzctYzMpICovCi0gICAgdG1wMCA9IE1VTFRJUExZKHRtcDAsIEZJWF8wXzI5ODYzMTMzNik7IC8qIHNxcnQoMikgKiAoLWMxK2MzK2M1LWM3KSAqLwotICAgIHRtcDMgPSBNVUxUSVBMWSh0bXAzLCBGSVhfMV81MDEzMjExMTApOyAvKiBzcXJ0KDIpICogKCBjMStjMy1jNS1jNykgKi8KLSAgICB0bXAwICs9IHoxICsgejI7Ci0gICAgdG1wMyArPSB6MSArIHozOwotCi0gICAgejEgPSBNVUxUSVBMWSh0bXAxICsgdG1wMiwgLSBGSVhfMl81NjI5MTU0NDcpOyAvKiBzcXJ0KDIpICogKC1jMS1jMykgKi8KLSAgICB0bXAxID0gTVVMVElQTFkodG1wMSwgRklYXzJfMDUzMTE5ODY5KTsgLyogc3FydCgyKSAqICggYzErYzMtYzUrYzcpICovCi0gICAgdG1wMiA9IE1VTFRJUExZKHRtcDIsIEZJWF8zXzA3MjcxMTAyNik7IC8qIHNxcnQoMikgKiAoIGMxK2MzK2M1LWM3KSAqLwotICAgIHRtcDEgKz0gejEgKyB6MzsKLSAgICB0bXAyICs9IHoxICsgejI7Ci0KLSAgICAvKiBGaW5hbCBvdXRwdXQgc3RhZ2U6IGlucHV0cyBhcmUgdG1wMTAuLnRtcDEzLCB0bXAwLi50bXAzICovCi0KLSAgICB3c3B0cls0KjBdID0gKGludCkgUklHSFRfU0hJRlQodG1wMTAgKyB0bXAzLCBDT05TVF9CSVRTLVBBU1MxX0JJVFMpOwotICAgIHdzcHRyWzQqN10gPSAoaW50KSBSSUdIVF9TSElGVCh0bXAxMCAtIHRtcDMsIENPTlNUX0JJVFMtUEFTUzFfQklUUyk7Ci0gICAgd3NwdHJbNCoxXSA9IChpbnQpIFJJR0hUX1NISUZUKHRtcDExICsgdG1wMiwgQ09OU1RfQklUUy1QQVNTMV9CSVRTKTsKLSAgICB3c3B0cls0KjZdID0gKGludCkgUklHSFRfU0hJRlQodG1wMTEgLSB0bXAyLCBDT05TVF9CSVRTLVBBU1MxX0JJVFMpOwotICAgIHdzcHRyWzQqMl0gPSAoaW50KSBSSUdIVF9TSElGVCh0bXAxMiArIHRtcDEsIENPTlNUX0JJVFMtUEFTUzFfQklUUyk7Ci0gICAgd3NwdHJbNCo1XSA9IChpbnQpIFJJR0hUX1NISUZUKHRtcDEyIC0gdG1wMSwgQ09OU1RfQklUUy1QQVNTMV9CSVRTKTsKLSAgICB3c3B0cls0KjNdID0gKGludCkgUklHSFRfU0hJRlQodG1wMTMgKyB0bXAwLCBDT05TVF9CSVRTLVBBU1MxX0JJVFMpOwotICAgIHdzcHRyWzQqNF0gPSAoaW50KSBSSUdIVF9TSElGVCh0bXAxMyAtIHRtcDAsIENPTlNUX0JJVFMtUEFTUzFfQklUUyk7Ci0KLSAgICBpbnB0cisrOwkJCS8qIGFkdmFuY2UgcG9pbnRlcnMgdG8gbmV4dCBjb2x1bW4gKi8KLSAgICBxdWFudHB0cisrOwotICAgIHdzcHRyKys7Ci0gIH0KLQotICAvKiBQYXNzIDI6IHByb2Nlc3MgOCByb3dzIGZyb20gd29yayBhcnJheSwgc3RvcmUgaW50byBvdXRwdXQgYXJyYXkuCi0gICAqIDQtcG9pbnQgSURDVCBrZXJuZWwsIGNLIHJlcHJlc2VudHMgc3FydCgyKSAqIGNvcyhLKnBpLzE2KS4KLSAgICovCi0gIHdzcHRyID0gd29ya3NwYWNlOwotICBmb3IgKGN0ciA9IDA7IGN0ciA8IDg7IGN0cisrKSB7Ci0gICAgb3V0cHRyID0gb3V0cHV0X2J1ZltjdHJdICsgb3V0cHV0X2NvbDsKLQotICAgIC8qIEV2ZW4gcGFydCAqLwotCi0gICAgLyogQWRkIGZ1ZGdlIGZhY3RvciBoZXJlIGZvciBmaW5hbCBkZXNjYWxlLiAqLwotICAgIHRtcDAgPSAoSU5UMzIpIHdzcHRyWzBdICsgKE9ORSA8PCAoUEFTUzFfQklUUysyKSk7Ci0gICAgdG1wMiA9IChJTlQzMikgd3NwdHJbMl07Ci0KLSAgICB0bXAxMCA9ICh0bXAwICsgdG1wMikgPDwgQ09OU1RfQklUUzsKLSAgICB0bXAxMiA9ICh0bXAwIC0gdG1wMikgPDwgQ09OU1RfQklUUzsKLQotICAgIC8qIE9kZCBwYXJ0ICovCi0gICAgLyogU2FtZSByb3RhdGlvbiBhcyBpbiB0aGUgZXZlbiBwYXJ0IG9mIHRoZSA4eDggTEwmTSBJRENUICovCi0KLSAgICB6MiA9IChJTlQzMikgd3NwdHJbMV07Ci0gICAgejMgPSAoSU5UMzIpIHdzcHRyWzNdOwotCi0gICAgejEgPSBNVUxUSVBMWSh6MiArIHozLCBGSVhfMF81NDExOTYxMDApOyAgIC8qIGM2ICovCi0gICAgdG1wMCA9IHoxICsgTVVMVElQTFkoejIsIEZJWF8wXzc2NTM2Njg2NSk7IC8qIGMyLWM2ICovCi0gICAgdG1wMiA9IHoxIC0gTVVMVElQTFkoejMsIEZJWF8xXzg0Nzc1OTA2NSk7IC8qIGMyK2M2ICovCi0KLSAgICAvKiBGaW5hbCBvdXRwdXQgc3RhZ2UgKi8KLQotICAgIG91dHB0clswXSA9IHJhbmdlX2xpbWl0WyhpbnQpIFJJR0hUX1NISUZUKHRtcDEwICsgdG1wMCwKLQkJCQkJICAgICAgQ09OU1RfQklUUytQQVNTMV9CSVRTKzMpCi0JCQkgICAgJiBSQU5HRV9NQVNLXTsKLSAgICBvdXRwdHJbM10gPSByYW5nZV9saW1pdFsoaW50KSBSSUdIVF9TSElGVCh0bXAxMCAtIHRtcDAsCi0JCQkJCSAgICAgIENPTlNUX0JJVFMrUEFTUzFfQklUUyszKQotCQkJICAgICYgUkFOR0VfTUFTS107Ci0gICAgb3V0cHRyWzFdID0gcmFuZ2VfbGltaXRbKGludCkgUklHSFRfU0hJRlQodG1wMTIgKyB0bXAyLAotCQkJCQkgICAgICBDT05TVF9CSVRTK1BBU1MxX0JJVFMrMykKLQkJCSAgICAmIFJBTkdFX01BU0tdOwotICAgIG91dHB0clsyXSA9IHJhbmdlX2xpbWl0WyhpbnQpIFJJR0hUX1NISUZUKHRtcDEyIC0gdG1wMiwKLQkJCQkJICAgICAgQ09OU1RfQklUUytQQVNTMV9CSVRTKzMpCi0JCQkgICAgJiBSQU5HRV9NQVNLXTsKLSAgICAKLSAgICB3c3B0ciArPSA0OwkJLyogYWR2YW5jZSBwb2ludGVyIHRvIG5leHQgcm93ICovCi0gIH0KLX0KLQotCi0vKgotICogUGVyZm9ybSBkZXF1YW50aXphdGlvbiBhbmQgaW52ZXJzZSBEQ1Qgb24gb25lIGJsb2NrIG9mIGNvZWZmaWNpZW50cywKLSAqIHByb2R1Y2luZyBhIHJlZHVjZWQtc2l6ZSAzeDYgb3V0cHV0IGJsb2NrLgotICoKLSAqIDYtcG9pbnQgSURDVCBpbiBwYXNzIDEgKGNvbHVtbnMpLCAzLXBvaW50IGluIHBhc3MgMiAocm93cykuCi0gKi8KLQotR0xPQkFMKHZvaWQpCi1qcGVnX2lkY3RfM3g2IChqX2RlY29tcHJlc3NfcHRyIGNpbmZvLCBqcGVnX2NvbXBvbmVudF9pbmZvICogY29tcHB0ciwKLQkgICAgICAgSkNPRUZQVFIgY29lZl9ibG9jaywKLQkgICAgICAgSlNBTVBBUlJBWSBvdXRwdXRfYnVmLCBKRElNRU5TSU9OIG91dHB1dF9jb2wpCi17Ci0gIElOVDMyIHRtcDAsIHRtcDEsIHRtcDIsIHRtcDEwLCB0bXAxMSwgdG1wMTI7Ci0gIElOVDMyIHoxLCB6MiwgejM7Ci0gIEpDT0VGUFRSIGlucHRyOwotICBJU0xPV19NVUxUX1RZUEUgKiBxdWFudHB0cjsKLSAgaW50ICogd3NwdHI7Ci0gIEpTQU1QUk9XIG91dHB0cjsKLSAgSlNBTVBMRSAqcmFuZ2VfbGltaXQgPSBJRENUX3JhbmdlX2xpbWl0KGNpbmZvKTsKLSAgaW50IGN0cjsKLSAgaW50IHdvcmtzcGFjZVszKjZdOwkvKiBidWZmZXJzIGRhdGEgYmV0d2VlbiBwYXNzZXMgKi8KLSAgU0hJRlRfVEVNUFMKLQotICAvKiBQYXNzIDE6IHByb2Nlc3MgY29sdW1ucyBmcm9tIGlucHV0LCBzdG9yZSBpbnRvIHdvcmsgYXJyYXkuCi0gICAqIDYtcG9pbnQgSURDVCBrZXJuZWwsIGNLIHJlcHJlc2VudHMgc3FydCgyKSAqIGNvcyhLKnBpLzEyKS4KLSAgICovCi0gIGlucHRyID0gY29lZl9ibG9jazsKLSAgcXVhbnRwdHIgPSAoSVNMT1dfTVVMVF9UWVBFICopIGNvbXBwdHItPmRjdF90YWJsZTsKLSAgd3NwdHIgPSB3b3Jrc3BhY2U7Ci0gIGZvciAoY3RyID0gMDsgY3RyIDwgMzsgY3RyKyssIGlucHRyKyssIHF1YW50cHRyKyssIHdzcHRyKyspIHsKLSAgICAvKiBFdmVuIHBhcnQgKi8KLQotICAgIHRtcDAgPSBERVFVQU5USVpFKGlucHRyW0RDVFNJWkUqMF0sIHF1YW50cHRyW0RDVFNJWkUqMF0pOwotICAgIHRtcDAgPDw9IENPTlNUX0JJVFM7Ci0gICAgLyogQWRkIGZ1ZGdlIGZhY3RvciBoZXJlIGZvciBmaW5hbCBkZXNjYWxlLiAqLwotICAgIHRtcDAgKz0gT05FIDw8IChDT05TVF9CSVRTLVBBU1MxX0JJVFMtMSk7Ci0gICAgdG1wMiA9IERFUVVBTlRJWkUoaW5wdHJbRENUU0laRSo0XSwgcXVhbnRwdHJbRENUU0laRSo0XSk7Ci0gICAgdG1wMTAgPSBNVUxUSVBMWSh0bXAyLCBGSVgoMC43MDcxMDY3ODEpKTsgICAvKiBjNCAqLwotICAgIHRtcDEgPSB0bXAwICsgdG1wMTA7Ci0gICAgdG1wMTEgPSBSSUdIVF9TSElGVCh0bXAwIC0gdG1wMTAgLSB0bXAxMCwgQ09OU1RfQklUUy1QQVNTMV9CSVRTKTsKLSAgICB0bXAxMCA9IERFUVVBTlRJWkUoaW5wdHJbRENUU0laRSoyXSwgcXVhbnRwdHJbRENUU0laRSoyXSk7Ci0gICAgdG1wMCA9IE1VTFRJUExZKHRtcDEwLCBGSVgoMS4yMjQ3NDQ4NzEpKTsgICAvKiBjMiAqLwotICAgIHRtcDEwID0gdG1wMSArIHRtcDA7Ci0gICAgdG1wMTIgPSB0bXAxIC0gdG1wMDsKLQotICAgIC8qIE9kZCBwYXJ0ICovCi0KLSAgICB6MSA9IERFUVVBTlRJWkUoaW5wdHJbRENUU0laRSoxXSwgcXVhbnRwdHJbRENUU0laRSoxXSk7Ci0gICAgejIgPSBERVFVQU5USVpFKGlucHRyW0RDVFNJWkUqM10sIHF1YW50cHRyW0RDVFNJWkUqM10pOwotICAgIHozID0gREVRVUFOVElaRShpbnB0cltEQ1RTSVpFKjVdLCBxdWFudHB0cltEQ1RTSVpFKjVdKTsKLSAgICB0bXAxID0gTVVMVElQTFkoejEgKyB6MywgRklYKDAuMzY2MDI1NDA0KSk7IC8qIGM1ICovCi0gICAgdG1wMCA9IHRtcDEgKyAoKHoxICsgejIpIDw8IENPTlNUX0JJVFMpOwotICAgIHRtcDIgPSB0bXAxICsgKCh6MyAtIHoyKSA8PCBDT05TVF9CSVRTKTsKLSAgICB0bXAxID0gKHoxIC0gejIgLSB6MykgPDwgUEFTUzFfQklUUzsKLQotICAgIC8qIEZpbmFsIG91dHB1dCBzdGFnZSAqLwotCi0gICAgd3NwdHJbMyowXSA9IChpbnQpIFJJR0hUX1NISUZUKHRtcDEwICsgdG1wMCwgQ09OU1RfQklUUy1QQVNTMV9CSVRTKTsKLSAgICB3c3B0clszKjVdID0gKGludCkgUklHSFRfU0hJRlQodG1wMTAgLSB0bXAwLCBDT05TVF9CSVRTLVBBU1MxX0JJVFMpOwotICAgIHdzcHRyWzMqMV0gPSAoaW50KSAodG1wMTEgKyB0bXAxKTsKLSAgICB3c3B0clszKjRdID0gKGludCkgKHRtcDExIC0gdG1wMSk7Ci0gICAgd3NwdHJbMyoyXSA9IChpbnQpIFJJR0hUX1NISUZUKHRtcDEyICsgdG1wMiwgQ09OU1RfQklUUy1QQVNTMV9CSVRTKTsKLSAgICB3c3B0clszKjNdID0gKGludCkgUklHSFRfU0hJRlQodG1wMTIgLSB0bXAyLCBDT05TVF9CSVRTLVBBU1MxX0JJVFMpOwotICB9Ci0KLSAgLyogUGFzcyAyOiBwcm9jZXNzIDYgcm93cyBmcm9tIHdvcmsgYXJyYXksIHN0b3JlIGludG8gb3V0cHV0IGFycmF5LgotICAgKiAzLXBvaW50IElEQ1Qga2VybmVsLCBjSyByZXByZXNlbnRzIHNxcnQoMikgKiBjb3MoSypwaS82KS4KLSAgICovCi0gIHdzcHRyID0gd29ya3NwYWNlOwotICBmb3IgKGN0ciA9IDA7IGN0ciA8IDY7IGN0cisrKSB7Ci0gICAgb3V0cHRyID0gb3V0cHV0X2J1ZltjdHJdICsgb3V0cHV0X2NvbDsKLQotICAgIC8qIEV2ZW4gcGFydCAqLwotCi0gICAgLyogQWRkIGZ1ZGdlIGZhY3RvciBoZXJlIGZvciBmaW5hbCBkZXNjYWxlLiAqLwotICAgIHRtcDAgPSAoSU5UMzIpIHdzcHRyWzBdICsgKE9ORSA8PCAoUEFTUzFfQklUUysyKSk7Ci0gICAgdG1wMCA8PD0gQ09OU1RfQklUUzsKLSAgICB0bXAyID0gKElOVDMyKSB3c3B0clsyXTsKLSAgICB0bXAxMiA9IE1VTFRJUExZKHRtcDIsIEZJWCgwLjcwNzEwNjc4MSkpOyAvKiBjMiAqLwotICAgIHRtcDEwID0gdG1wMCArIHRtcDEyOwotICAgIHRtcDIgPSB0bXAwIC0gdG1wMTIgLSB0bXAxMjsKLQotICAgIC8qIE9kZCBwYXJ0ICovCi0KLSAgICB0bXAxMiA9IChJTlQzMikgd3NwdHJbMV07Ci0gICAgdG1wMCA9IE1VTFRJUExZKHRtcDEyLCBGSVgoMS4yMjQ3NDQ4NzEpKTsgLyogYzEgKi8KLQotICAgIC8qIEZpbmFsIG91dHB1dCBzdGFnZSAqLwotCi0gICAgb3V0cHRyWzBdID0gcmFuZ2VfbGltaXRbKGludCkgUklHSFRfU0hJRlQodG1wMTAgKyB0bXAwLAotCQkJCQkgICAgICBDT05TVF9CSVRTK1BBU1MxX0JJVFMrMykKLQkJCSAgICAmIFJBTkdFX01BU0tdOwotICAgIG91dHB0clsyXSA9IHJhbmdlX2xpbWl0WyhpbnQpIFJJR0hUX1NISUZUKHRtcDEwIC0gdG1wMCwKLQkJCQkJICAgICAgQ09OU1RfQklUUytQQVNTMV9CSVRTKzMpCi0JCQkgICAgJiBSQU5HRV9NQVNLXTsKLSAgICBvdXRwdHJbMV0gPSByYW5nZV9saW1pdFsoaW50KSBSSUdIVF9TSElGVCh0bXAyLAotCQkJCQkgICAgICBDT05TVF9CSVRTK1BBU1MxX0JJVFMrMykKLQkJCSAgICAmIFJBTkdFX01BU0tdOwotCi0gICAgd3NwdHIgKz0gMzsJCS8qIGFkdmFuY2UgcG9pbnRlciB0byBuZXh0IHJvdyAqLwotICB9Ci19Ci0KLQotLyoKLSAqIFBlcmZvcm0gZGVxdWFudGl6YXRpb24gYW5kIGludmVyc2UgRENUIG9uIG9uZSBibG9jayBvZiBjb2VmZmljaWVudHMsCi0gKiBwcm9kdWNpbmcgYSAyeDQgb3V0cHV0IGJsb2NrLgotICoKLSAqIDQtcG9pbnQgSURDVCBpbiBwYXNzIDEgKGNvbHVtbnMpLCAyLXBvaW50IGluIHBhc3MgMiAocm93cykuCi0gKi8KLQotR0xPQkFMKHZvaWQpCi1qcGVnX2lkY3RfMng0IChqX2RlY29tcHJlc3NfcHRyIGNpbmZvLCBqcGVnX2NvbXBvbmVudF9pbmZvICogY29tcHB0ciwKLQkgICAgICAgSkNPRUZQVFIgY29lZl9ibG9jaywKLQkgICAgICAgSlNBTVBBUlJBWSBvdXRwdXRfYnVmLCBKRElNRU5TSU9OIG91dHB1dF9jb2wpCi17Ci0gIElOVDMyIHRtcDAsIHRtcDIsIHRtcDEwLCB0bXAxMjsKLSAgSU5UMzIgejEsIHoyLCB6MzsKLSAgSkNPRUZQVFIgaW5wdHI7Ci0gIElTTE9XX01VTFRfVFlQRSAqIHF1YW50cHRyOwotICBJTlQzMiAqIHdzcHRyOwotICBKU0FNUFJPVyBvdXRwdHI7Ci0gIEpTQU1QTEUgKnJhbmdlX2xpbWl0ID0gSURDVF9yYW5nZV9saW1pdChjaW5mbyk7Ci0gIGludCBjdHI7Ci0gIElOVDMyIHdvcmtzcGFjZVsyKjRdOwkvKiBidWZmZXJzIGRhdGEgYmV0d2VlbiBwYXNzZXMgKi8KLSAgU0hJRlRfVEVNUFMKLQotICAvKiBQYXNzIDE6IHByb2Nlc3MgY29sdW1ucyBmcm9tIGlucHV0LCBzdG9yZSBpbnRvIHdvcmsgYXJyYXkuCi0gICAqIDQtcG9pbnQgSURDVCBrZXJuZWwsCi0gICAqIGNLIHJlcHJlc2VudHMgc3FydCgyKSAqIGNvcyhLKnBpLzE2KSBbcmVmZXJzIHRvIDgtcG9pbnQgSURDVF0uCi0gICAqLwotICBpbnB0ciA9IGNvZWZfYmxvY2s7Ci0gIHF1YW50cHRyID0gKElTTE9XX01VTFRfVFlQRSAqKSBjb21wcHRyLT5kY3RfdGFibGU7Ci0gIHdzcHRyID0gd29ya3NwYWNlOwotICBmb3IgKGN0ciA9IDA7IGN0ciA8IDI7IGN0cisrLCBpbnB0cisrLCBxdWFudHB0cisrLCB3c3B0cisrKSB7Ci0gICAgLyogRXZlbiBwYXJ0ICovCi0KLSAgICB0bXAwID0gREVRVUFOVElaRShpbnB0cltEQ1RTSVpFKjBdLCBxdWFudHB0cltEQ1RTSVpFKjBdKTsKLSAgICB0bXAyID0gREVRVUFOVElaRShpbnB0cltEQ1RTSVpFKjJdLCBxdWFudHB0cltEQ1RTSVpFKjJdKTsKLQotICAgIHRtcDEwID0gKHRtcDAgKyB0bXAyKSA8PCBDT05TVF9CSVRTOwotICAgIHRtcDEyID0gKHRtcDAgLSB0bXAyKSA8PCBDT05TVF9CSVRTOwotCi0gICAgLyogT2RkIHBhcnQgKi8KLSAgICAvKiBTYW1lIHJvdGF0aW9uIGFzIGluIHRoZSBldmVuIHBhcnQgb2YgdGhlIDh4OCBMTCZNIElEQ1QgKi8KLQotICAgIHoyID0gREVRVUFOVElaRShpbnB0cltEQ1RTSVpFKjFdLCBxdWFudHB0cltEQ1RTSVpFKjFdKTsKLSAgICB6MyA9IERFUVVBTlRJWkUoaW5wdHJbRENUU0laRSozXSwgcXVhbnRwdHJbRENUU0laRSozXSk7Ci0KLSAgICB6MSA9IE1VTFRJUExZKHoyICsgejMsIEZJWF8wXzU0MTE5NjEwMCk7ICAgLyogYzYgKi8KLSAgICB0bXAwID0gejEgKyBNVUxUSVBMWSh6MiwgRklYXzBfNzY1MzY2ODY1KTsgLyogYzItYzYgKi8KLSAgICB0bXAyID0gejEgLSBNVUxUSVBMWSh6MywgRklYXzFfODQ3NzU5MDY1KTsgLyogYzIrYzYgKi8KLQotICAgIC8qIEZpbmFsIG91dHB1dCBzdGFnZSAqLwotCi0gICAgd3NwdHJbMiowXSA9IHRtcDEwICsgdG1wMDsKLSAgICB3c3B0clsyKjNdID0gdG1wMTAgLSB0bXAwOwotICAgIHdzcHRyWzIqMV0gPSB0bXAxMiArIHRtcDI7Ci0gICAgd3NwdHJbMioyXSA9IHRtcDEyIC0gdG1wMjsKLSAgfQotCi0gIC8qIFBhc3MgMjogcHJvY2VzcyA0IHJvd3MgZnJvbSB3b3JrIGFycmF5LCBzdG9yZSBpbnRvIG91dHB1dCBhcnJheS4gKi8KLQotICB3c3B0ciA9IHdvcmtzcGFjZTsKLSAgZm9yIChjdHIgPSAwOyBjdHIgPCA0OyBjdHIrKykgewotICAgIG91dHB0ciA9IG91dHB1dF9idWZbY3RyXSArIG91dHB1dF9jb2w7Ci0KLSAgICAvKiBFdmVuIHBhcnQgKi8KLQotICAgIC8qIEFkZCBmdWRnZSBmYWN0b3IgaGVyZSBmb3IgZmluYWwgZGVzY2FsZS4gKi8KLSAgICB0bXAxMCA9IHdzcHRyWzBdICsgKE9ORSA8PCAoQ09OU1RfQklUUysyKSk7Ci0KLSAgICAvKiBPZGQgcGFydCAqLwotCi0gICAgdG1wMCA9IHdzcHRyWzFdOwotCi0gICAgLyogRmluYWwgb3V0cHV0IHN0YWdlICovCi0KLSAgICBvdXRwdHJbMF0gPSByYW5nZV9saW1pdFsoaW50KSBSSUdIVF9TSElGVCh0bXAxMCArIHRtcDAsIENPTlNUX0JJVFMrMykKLQkJCSAgICAmIFJBTkdFX01BU0tdOwotICAgIG91dHB0clsxXSA9IHJhbmdlX2xpbWl0WyhpbnQpIFJJR0hUX1NISUZUKHRtcDEwIC0gdG1wMCwgQ09OU1RfQklUUyszKQotCQkJICAgICYgUkFOR0VfTUFTS107Ci0KLSAgICB3c3B0ciArPSAyOwkJLyogYWR2YW5jZSBwb2ludGVyIHRvIG5leHQgcm93ICovCi0gIH0KLX0KLQotCi0vKgotICogUGVyZm9ybSBkZXF1YW50aXphdGlvbiBhbmQgaW52ZXJzZSBEQ1Qgb24gb25lIGJsb2NrIG9mIGNvZWZmaWNpZW50cywKLSAqIHByb2R1Y2luZyBhIDF4MiBvdXRwdXQgYmxvY2suCi0gKgotICogMi1wb2ludCBJRENUIGluIHBhc3MgMSAoY29sdW1ucyksIDEtcG9pbnQgaW4gcGFzcyAyIChyb3dzKS4KLSAqLwotCi1HTE9CQUwodm9pZCkKLWpwZWdfaWRjdF8xeDIgKGpfZGVjb21wcmVzc19wdHIgY2luZm8sIGpwZWdfY29tcG9uZW50X2luZm8gKiBjb21wcHRyLAotCSAgICAgICBKQ09FRlBUUiBjb2VmX2Jsb2NrLAotCSAgICAgICBKU0FNUEFSUkFZIG91dHB1dF9idWYsIEpESU1FTlNJT04gb3V0cHV0X2NvbCkKLXsKLSAgSU5UMzIgdG1wMCwgdG1wMTA7Ci0gIElTTE9XX01VTFRfVFlQRSAqIHF1YW50cHRyOwotICBKU0FNUExFICpyYW5nZV9saW1pdCA9IElEQ1RfcmFuZ2VfbGltaXQoY2luZm8pOwotICBTSElGVF9URU1QUwotCi0gIC8qIFByb2Nlc3MgMSBjb2x1bW4gZnJvbSBpbnB1dCwgc3RvcmUgaW50byBvdXRwdXQgYXJyYXkuICovCi0KLSAgcXVhbnRwdHIgPSAoSVNMT1dfTVVMVF9UWVBFICopIGNvbXBwdHItPmRjdF90YWJsZTsKLQotICAvKiBFdmVuIHBhcnQgKi8KLSAgICAKLSAgdG1wMTAgPSBERVFVQU5USVpFKGNvZWZfYmxvY2tbRENUU0laRSowXSwgcXVhbnRwdHJbRENUU0laRSowXSk7Ci0gIC8qIEFkZCBmdWRnZSBmYWN0b3IgaGVyZSBmb3IgZmluYWwgZGVzY2FsZS4gKi8KLSAgdG1wMTAgKz0gT05FIDw8IDI7Ci0KLSAgLyogT2RkIHBhcnQgKi8KLQotICB0bXAwID0gREVRVUFOVElaRShjb2VmX2Jsb2NrW0RDVFNJWkUqMV0sIHF1YW50cHRyW0RDVFNJWkUqMV0pOwotCi0gIC8qIEZpbmFsIG91dHB1dCBzdGFnZSAqLwotCi0gIG91dHB1dF9idWZbMF1bb3V0cHV0X2NvbF0gPSByYW5nZV9saW1pdFsoaW50KSBSSUdIVF9TSElGVCh0bXAxMCArIHRtcDAsIDMpCi0JCQkJCSAgJiBSQU5HRV9NQVNLXTsKLSAgb3V0cHV0X2J1ZlsxXVtvdXRwdXRfY29sXSA9IHJhbmdlX2xpbWl0WyhpbnQpIFJJR0hUX1NISUZUKHRtcDEwIC0gdG1wMCwgMykKLQkJCQkJICAmIFJBTkdFX01BU0tdOwotfQotCi0jZW5kaWYgLyogSURDVF9TQ0FMSU5HX1NVUFBPUlRFRCAqLwogI2VuZGlmIC8qIERDVF9JU0xPV19TVVBQT1JURUQgKi8KZGlmZiAtLWdpdCBhL2ppZGN0cmVkLmMgYi9qaWRjdHJlZC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQyMWYzYzcKLS0tIC9kZXYvbnVsbAorKysgYi9qaWRjdHJlZC5jCkBAIC0wLDAgKzEsMzk4IEBACisvKgorICogamlkY3RyZWQuYworICoKKyAqIENvcHlyaWdodCAoQykgMTk5NC0xOTk4LCBUaG9tYXMgRy4gTGFuZS4KKyAqIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBJbmRlcGVuZGVudCBKUEVHIEdyb3VwJ3Mgc29mdHdhcmUuCisgKiBGb3IgY29uZGl0aW9ucyBvZiBkaXN0cmlidXRpb24gYW5kIHVzZSwgc2VlIHRoZSBhY2NvbXBhbnlpbmcgUkVBRE1FIGZpbGUuCisgKgorICogVGhpcyBmaWxlIGNvbnRhaW5zIGludmVyc2UtRENUIHJvdXRpbmVzIHRoYXQgcHJvZHVjZSByZWR1Y2VkLXNpemUgb3V0cHV0OgorICogZWl0aGVyIDR4NCwgMngyLCBvciAxeDEgcGl4ZWxzIGZyb20gYW4gOHg4IERDVCBibG9jay4KKyAqCisgKiBUaGUgaW1wbGVtZW50YXRpb24gaXMgYmFzZWQgb24gdGhlIExvZWZmbGVyLCBMaWd0ZW5iZXJnIGFuZCBNb3NjaHl0eiAoTEwmTSkKKyAqIGFsZ29yaXRobSB1c2VkIGluIGppZGN0aW50LmMuICBXZSBzaW1wbHkgcmVwbGFjZSBlYWNoIDgtdG8tOCAxLUQgSURDVCBzdGVwCisgKiB3aXRoIGFuIDgtdG8tNCBzdGVwIHRoYXQgcHJvZHVjZXMgdGhlIGZvdXIgYXZlcmFnZXMgb2YgdHdvIGFkamFjZW50IG91dHB1dHMKKyAqIChvciBhbiA4LXRvLTIgc3RlcCBwcm9kdWNpbmcgdHdvIGF2ZXJhZ2VzIG9mIGZvdXIgb3V0cHV0cywgZm9yIDJ4MiBvdXRwdXQpLgorICogVGhlc2Ugc3RlcHMgd2VyZSBkZXJpdmVkIGJ5IGNvbXB1dGluZyB0aGUgY29ycmVzcG9uZGluZyB2YWx1ZXMgYXQgdGhlIGVuZAorICogb2YgdGhlIG5vcm1hbCBMTCZNIGNvZGUsIHRoZW4gc2ltcGxpZnlpbmcgYXMgbXVjaCBhcyBwb3NzaWJsZS4KKyAqCisgKiAxeDEgaXMgdHJpdmlhbDoganVzdCB0YWtlIHRoZSBEQyBjb2VmZmljaWVudCBkaXZpZGVkIGJ5IDguCisgKgorICogU2VlIGppZGN0aW50LmMgZm9yIGFkZGl0aW9uYWwgY29tbWVudHMuCisgKi8KKworI2RlZmluZSBKUEVHX0lOVEVSTkFMUworI2luY2x1ZGUgImppbmNsdWRlLmgiCisjaW5jbHVkZSAianBlZ2xpYi5oIgorI2luY2x1ZGUgImpkY3QuaCIJCS8qIFByaXZhdGUgZGVjbGFyYXRpb25zIGZvciBEQ1Qgc3Vic3lzdGVtICovCisKKyNpZmRlZiBJRENUX1NDQUxJTkdfU1VQUE9SVEVECisKKworLyoKKyAqIFRoaXMgbW9kdWxlIGlzIHNwZWNpYWxpemVkIHRvIHRoZSBjYXNlIERDVFNJWkUgPSA4LgorICovCisKKyNpZiBEQ1RTSVpFICE9IDgKKyAgU29ycnksIHRoaXMgY29kZSBvbmx5IGNvcGVzIHdpdGggOHg4IERDVHMuIC8qIGRlbGliZXJhdGUgc3ludGF4IGVyciAqLworI2VuZGlmCisKKworLyogU2NhbGluZyBpcyB0aGUgc2FtZSBhcyBpbiBqaWRjdGludC5jLiAqLworCisjaWYgQklUU19JTl9KU0FNUExFID09IDgKKyNkZWZpbmUgQ09OU1RfQklUUyAgMTMKKyNkZWZpbmUgUEFTUzFfQklUUyAgMgorI2Vsc2UKKyNkZWZpbmUgQ09OU1RfQklUUyAgMTMKKyNkZWZpbmUgUEFTUzFfQklUUyAgMQkJLyogbG9zZSBhIGxpdHRsZSBwcmVjaXNpb24gdG8gYXZvaWQgb3ZlcmZsb3cgKi8KKyNlbmRpZgorCisvKiBTb21lIEMgY29tcGlsZXJzIGZhaWwgdG8gcmVkdWNlICJGSVgoY29uc3RhbnQpIiBhdCBjb21waWxlIHRpbWUsIHRodXMKKyAqIGNhdXNpbmcgYSBsb3Qgb2YgdXNlbGVzcyBmbG9hdGluZy1wb2ludCBvcGVyYXRpb25zIGF0IHJ1biB0aW1lLgorICogVG8gZ2V0IGFyb3VuZCB0aGlzIHdlIHVzZSB0aGUgZm9sbG93aW5nIHByZS1jYWxjdWxhdGVkIGNvbnN0YW50cy4KKyAqIElmIHlvdSBjaGFuZ2UgQ09OU1RfQklUUyB5b3UgbWF5IHdhbnQgdG8gYWRkIGFwcHJvcHJpYXRlIHZhbHVlcy4KKyAqIChXaXRoIGEgcmVhc29uYWJsZSBDIGNvbXBpbGVyLCB5b3UgY2FuIGp1c3QgcmVseSBvbiB0aGUgRklYKCkgbWFjcm8uLi4pCisgKi8KKworI2lmIENPTlNUX0JJVFMgPT0gMTMKKyNkZWZpbmUgRklYXzBfMjExMTY0MjQzICAoKElOVDMyKSAgMTczMCkJLyogRklYKDAuMjExMTY0MjQzKSAqLworI2RlZmluZSBGSVhfMF81MDk3OTU1NzkgICgoSU5UMzIpICA0MTc2KQkvKiBGSVgoMC41MDk3OTU1NzkpICovCisjZGVmaW5lIEZJWF8wXzYwMTM0NDg4NyAgKChJTlQzMikgIDQ5MjYpCS8qIEZJWCgwLjYwMTM0NDg4NykgKi8KKyNkZWZpbmUgRklYXzBfNzIwOTU5ODIyICAoKElOVDMyKSAgNTkwNikJLyogRklYKDAuNzIwOTU5ODIyKSAqLworI2RlZmluZSBGSVhfMF83NjUzNjY4NjUgICgoSU5UMzIpICA2MjcwKQkvKiBGSVgoMC43NjUzNjY4NjUpICovCisjZGVmaW5lIEZJWF8wXzg1MDQzMDA5NSAgKChJTlQzMikgIDY5NjcpCS8qIEZJWCgwLjg1MDQzMDA5NSkgKi8KKyNkZWZpbmUgRklYXzBfODk5OTc2MjIzICAoKElOVDMyKSAgNzM3MykJLyogRklYKDAuODk5OTc2MjIzKSAqLworI2RlZmluZSBGSVhfMV8wNjE1OTQzMzcgICgoSU5UMzIpICA4Njk3KQkvKiBGSVgoMS4wNjE1OTQzMzcpICovCisjZGVmaW5lIEZJWF8xXzI3Mjc1ODU4MCAgKChJTlQzMikgIDEwNDI2KQkvKiBGSVgoMS4yNzI3NTg1ODApICovCisjZGVmaW5lIEZJWF8xXzQ1MTc3NDk4MSAgKChJTlQzMikgIDExODkzKQkvKiBGSVgoMS40NTE3NzQ5ODEpICovCisjZGVmaW5lIEZJWF8xXzg0Nzc1OTA2NSAgKChJTlQzMikgIDE1MTM3KQkvKiBGSVgoMS44NDc3NTkwNjUpICovCisjZGVmaW5lIEZJWF8yXzE3MjczNDgwMyAgKChJTlQzMikgIDE3Nzk5KQkvKiBGSVgoMi4xNzI3MzQ4MDMpICovCisjZGVmaW5lIEZJWF8yXzU2MjkxNTQ0NyAgKChJTlQzMikgIDIwOTk1KQkvKiBGSVgoMi41NjI5MTU0NDcpICovCisjZGVmaW5lIEZJWF8zXzYyNDUwOTc4NSAgKChJTlQzMikgIDI5NjkyKQkvKiBGSVgoMy42MjQ1MDk3ODUpICovCisjZWxzZQorI2RlZmluZSBGSVhfMF8yMTExNjQyNDMgIEZJWCgwLjIxMTE2NDI0MykKKyNkZWZpbmUgRklYXzBfNTA5Nzk1NTc5ICBGSVgoMC41MDk3OTU1NzkpCisjZGVmaW5lIEZJWF8wXzYwMTM0NDg4NyAgRklYKDAuNjAxMzQ0ODg3KQorI2RlZmluZSBGSVhfMF83MjA5NTk4MjIgIEZJWCgwLjcyMDk1OTgyMikKKyNkZWZpbmUgRklYXzBfNzY1MzY2ODY1ICBGSVgoMC43NjUzNjY4NjUpCisjZGVmaW5lIEZJWF8wXzg1MDQzMDA5NSAgRklYKDAuODUwNDMwMDk1KQorI2RlZmluZSBGSVhfMF84OTk5NzYyMjMgIEZJWCgwLjg5OTk3NjIyMykKKyNkZWZpbmUgRklYXzFfMDYxNTk0MzM3ICBGSVgoMS4wNjE1OTQzMzcpCisjZGVmaW5lIEZJWF8xXzI3Mjc1ODU4MCAgRklYKDEuMjcyNzU4NTgwKQorI2RlZmluZSBGSVhfMV80NTE3NzQ5ODEgIEZJWCgxLjQ1MTc3NDk4MSkKKyNkZWZpbmUgRklYXzFfODQ3NzU5MDY1ICBGSVgoMS44NDc3NTkwNjUpCisjZGVmaW5lIEZJWF8yXzE3MjczNDgwMyAgRklYKDIuMTcyNzM0ODAzKQorI2RlZmluZSBGSVhfMl81NjI5MTU0NDcgIEZJWCgyLjU2MjkxNTQ0NykKKyNkZWZpbmUgRklYXzNfNjI0NTA5Nzg1ICBGSVgoMy42MjQ1MDk3ODUpCisjZW5kaWYKKworCisvKiBNdWx0aXBseSBhbiBJTlQzMiB2YXJpYWJsZSBieSBhbiBJTlQzMiBjb25zdGFudCB0byB5aWVsZCBhbiBJTlQzMiByZXN1bHQuCisgKiBGb3IgOC1iaXQgc2FtcGxlcyB3aXRoIHRoZSByZWNvbW1lbmRlZCBzY2FsaW5nLCBhbGwgdGhlIHZhcmlhYmxlCisgKiBhbmQgY29uc3RhbnQgdmFsdWVzIGludm9sdmVkIGFyZSBubyBtb3JlIHRoYW4gMTYgYml0cyB3aWRlLCBzbyBhCisgKiAxNngxNi0+MzIgYml0IG11bHRpcGx5IGNhbiBiZSB1c2VkIGluc3RlYWQgb2YgYSBmdWxsIDMyeDMyIG11bHRpcGx5LgorICogRm9yIDEyLWJpdCBzYW1wbGVzLCBhIGZ1bGwgMzItYml0IG11bHRpcGxpY2F0aW9uIHdpbGwgYmUgbmVlZGVkLgorICovCisKKyNpZiBCSVRTX0lOX0pTQU1QTEUgPT0gOAorI2RlZmluZSBNVUxUSVBMWSh2YXIsY29uc3QpICBNVUxUSVBMWTE2QzE2KHZhcixjb25zdCkKKyNlbHNlCisjZGVmaW5lIE1VTFRJUExZKHZhcixjb25zdCkgICgodmFyKSAqIChjb25zdCkpCisjZW5kaWYKKworCisvKiBEZXF1YW50aXplIGEgY29lZmZpY2llbnQgYnkgbXVsdGlwbHlpbmcgaXQgYnkgdGhlIG11bHRpcGxpZXItdGFibGUKKyAqIGVudHJ5OyBwcm9kdWNlIGFuIGludCByZXN1bHQuICBJbiB0aGlzIG1vZHVsZSwgYm90aCBpbnB1dHMgYW5kIHJlc3VsdAorICogYXJlIDE2IGJpdHMgb3IgbGVzcywgc28gZWl0aGVyIGludCBvciBzaG9ydCBtdWx0aXBseSB3aWxsIHdvcmsuCisgKi8KKworI2RlZmluZSBERVFVQU5USVpFKGNvZWYscXVhbnR2YWwpICAoKChJU0xPV19NVUxUX1RZUEUpIChjb2VmKSkgKiAocXVhbnR2YWwpKQorCisKKy8qCisgKiBQZXJmb3JtIGRlcXVhbnRpemF0aW9uIGFuZCBpbnZlcnNlIERDVCBvbiBvbmUgYmxvY2sgb2YgY29lZmZpY2llbnRzLAorICogcHJvZHVjaW5nIGEgcmVkdWNlZC1zaXplIDR4NCBvdXRwdXQgYmxvY2suCisgKi8KKworR0xPQkFMKHZvaWQpCitqcGVnX2lkY3RfNHg0IChqX2RlY29tcHJlc3NfcHRyIGNpbmZvLCBqcGVnX2NvbXBvbmVudF9pbmZvICogY29tcHB0ciwKKwkgICAgICAgSkNPRUZQVFIgY29lZl9ibG9jaywKKwkgICAgICAgSlNBTVBBUlJBWSBvdXRwdXRfYnVmLCBKRElNRU5TSU9OIG91dHB1dF9jb2wpCit7CisgIElOVDMyIHRtcDAsIHRtcDIsIHRtcDEwLCB0bXAxMjsKKyAgSU5UMzIgejEsIHoyLCB6MywgejQ7CisgIEpDT0VGUFRSIGlucHRyOworICBJU0xPV19NVUxUX1RZUEUgKiBxdWFudHB0cjsKKyAgaW50ICogd3NwdHI7CisgIEpTQU1QUk9XIG91dHB0cjsKKyAgSlNBTVBMRSAqcmFuZ2VfbGltaXQgPSBJRENUX3JhbmdlX2xpbWl0KGNpbmZvKTsKKyAgaW50IGN0cjsKKyAgaW50IHdvcmtzcGFjZVtEQ1RTSVpFKjRdOwkvKiBidWZmZXJzIGRhdGEgYmV0d2VlbiBwYXNzZXMgKi8KKyAgU0hJRlRfVEVNUFMKKworICAvKiBQYXNzIDE6IHByb2Nlc3MgY29sdW1ucyBmcm9tIGlucHV0LCBzdG9yZSBpbnRvIHdvcmsgYXJyYXkuICovCisKKyAgaW5wdHIgPSBjb2VmX2Jsb2NrOworICBxdWFudHB0ciA9IChJU0xPV19NVUxUX1RZUEUgKikgY29tcHB0ci0+ZGN0X3RhYmxlOworICB3c3B0ciA9IHdvcmtzcGFjZTsKKyAgZm9yIChjdHIgPSBEQ1RTSVpFOyBjdHIgPiAwOyBpbnB0cisrLCBxdWFudHB0cisrLCB3c3B0cisrLCBjdHItLSkgeworICAgIC8qIERvbid0IGJvdGhlciB0byBwcm9jZXNzIGNvbHVtbiA0LCBiZWNhdXNlIHNlY29uZCBwYXNzIHdvbid0IHVzZSBpdCAqLworICAgIGlmIChjdHIgPT0gRENUU0laRS00KQorICAgICAgY29udGludWU7CisgICAgaWYgKGlucHRyW0RDVFNJWkUqMV0gPT0gMCAmJiBpbnB0cltEQ1RTSVpFKjJdID09IDAgJiYKKwlpbnB0cltEQ1RTSVpFKjNdID09IDAgJiYgaW5wdHJbRENUU0laRSo1XSA9PSAwICYmCisJaW5wdHJbRENUU0laRSo2XSA9PSAwICYmIGlucHRyW0RDVFNJWkUqN10gPT0gMCkgeworICAgICAgLyogQUMgdGVybXMgYWxsIHplcm87IHdlIG5lZWQgbm90IGV4YW1pbmUgdGVybSA0IGZvciA0eDQgb3V0cHV0ICovCisgICAgICBpbnQgZGN2YWwgPSBERVFVQU5USVpFKGlucHRyW0RDVFNJWkUqMF0sIHF1YW50cHRyW0RDVFNJWkUqMF0pIDw8IFBBU1MxX0JJVFM7CisgICAgICAKKyAgICAgIHdzcHRyW0RDVFNJWkUqMF0gPSBkY3ZhbDsKKyAgICAgIHdzcHRyW0RDVFNJWkUqMV0gPSBkY3ZhbDsKKyAgICAgIHdzcHRyW0RDVFNJWkUqMl0gPSBkY3ZhbDsKKyAgICAgIHdzcHRyW0RDVFNJWkUqM10gPSBkY3ZhbDsKKyAgICAgIAorICAgICAgY29udGludWU7CisgICAgfQorICAgIAorICAgIC8qIEV2ZW4gcGFydCAqLworICAgIAorICAgIHRtcDAgPSBERVFVQU5USVpFKGlucHRyW0RDVFNJWkUqMF0sIHF1YW50cHRyW0RDVFNJWkUqMF0pOworICAgIHRtcDAgPDw9IChDT05TVF9CSVRTKzEpOworICAgIAorICAgIHoyID0gREVRVUFOVElaRShpbnB0cltEQ1RTSVpFKjJdLCBxdWFudHB0cltEQ1RTSVpFKjJdKTsKKyAgICB6MyA9IERFUVVBTlRJWkUoaW5wdHJbRENUU0laRSo2XSwgcXVhbnRwdHJbRENUU0laRSo2XSk7CisKKyAgICB0bXAyID0gTVVMVElQTFkoejIsIEZJWF8xXzg0Nzc1OTA2NSkgKyBNVUxUSVBMWSh6MywgLSBGSVhfMF83NjUzNjY4NjUpOworICAgIAorICAgIHRtcDEwID0gdG1wMCArIHRtcDI7CisgICAgdG1wMTIgPSB0bXAwIC0gdG1wMjsKKyAgICAKKyAgICAvKiBPZGQgcGFydCAqLworICAgIAorICAgIHoxID0gREVRVUFOVElaRShpbnB0cltEQ1RTSVpFKjddLCBxdWFudHB0cltEQ1RTSVpFKjddKTsKKyAgICB6MiA9IERFUVVBTlRJWkUoaW5wdHJbRENUU0laRSo1XSwgcXVhbnRwdHJbRENUU0laRSo1XSk7CisgICAgejMgPSBERVFVQU5USVpFKGlucHRyW0RDVFNJWkUqM10sIHF1YW50cHRyW0RDVFNJWkUqM10pOworICAgIHo0ID0gREVRVUFOVElaRShpbnB0cltEQ1RTSVpFKjFdLCBxdWFudHB0cltEQ1RTSVpFKjFdKTsKKyAgICAKKyAgICB0bXAwID0gTVVMVElQTFkoejEsIC0gRklYXzBfMjExMTY0MjQzKSAvKiBzcXJ0KDIpICogKGMzLWMxKSAqLworCSArIE1VTFRJUExZKHoyLCBGSVhfMV80NTE3NzQ5ODEpIC8qIHNxcnQoMikgKiAoYzMrYzcpICovCisJICsgTVVMVElQTFkoejMsIC0gRklYXzJfMTcyNzM0ODAzKSAvKiBzcXJ0KDIpICogKC1jMS1jNSkgKi8KKwkgKyBNVUxUSVBMWSh6NCwgRklYXzFfMDYxNTk0MzM3KTsgLyogc3FydCgyKSAqIChjNStjNykgKi8KKyAgICAKKyAgICB0bXAyID0gTVVMVElQTFkoejEsIC0gRklYXzBfNTA5Nzk1NTc5KSAvKiBzcXJ0KDIpICogKGM3LWM1KSAqLworCSArIE1VTFRJUExZKHoyLCAtIEZJWF8wXzYwMTM0NDg4NykgLyogc3FydCgyKSAqIChjNS1jMSkgKi8KKwkgKyBNVUxUSVBMWSh6MywgRklYXzBfODk5OTc2MjIzKSAvKiBzcXJ0KDIpICogKGMzLWM3KSAqLworCSArIE1VTFRJUExZKHo0LCBGSVhfMl81NjI5MTU0NDcpOyAvKiBzcXJ0KDIpICogKGMxK2MzKSAqLworCisgICAgLyogRmluYWwgb3V0cHV0IHN0YWdlICovCisgICAgCisgICAgd3NwdHJbRENUU0laRSowXSA9IChpbnQpIERFU0NBTEUodG1wMTAgKyB0bXAyLCBDT05TVF9CSVRTLVBBU1MxX0JJVFMrMSk7CisgICAgd3NwdHJbRENUU0laRSozXSA9IChpbnQpIERFU0NBTEUodG1wMTAgLSB0bXAyLCBDT05TVF9CSVRTLVBBU1MxX0JJVFMrMSk7CisgICAgd3NwdHJbRENUU0laRSoxXSA9IChpbnQpIERFU0NBTEUodG1wMTIgKyB0bXAwLCBDT05TVF9CSVRTLVBBU1MxX0JJVFMrMSk7CisgICAgd3NwdHJbRENUU0laRSoyXSA9IChpbnQpIERFU0NBTEUodG1wMTIgLSB0bXAwLCBDT05TVF9CSVRTLVBBU1MxX0JJVFMrMSk7CisgIH0KKyAgCisgIC8qIFBhc3MgMjogcHJvY2VzcyA0IHJvd3MgZnJvbSB3b3JrIGFycmF5LCBzdG9yZSBpbnRvIG91dHB1dCBhcnJheS4gKi8KKworICB3c3B0ciA9IHdvcmtzcGFjZTsKKyAgZm9yIChjdHIgPSAwOyBjdHIgPCA0OyBjdHIrKykgeworICAgIG91dHB0ciA9IG91dHB1dF9idWZbY3RyXSArIG91dHB1dF9jb2w7CisgICAgLyogSXQncyBub3QgY2xlYXIgd2hldGhlciBhIHplcm8gcm93IHRlc3QgaXMgd29ydGh3aGlsZSBoZXJlIC4uLiAqLworCisjaWZuZGVmIE5PX1pFUk9fUk9XX1RFU1QKKyAgICBpZiAod3NwdHJbMV0gPT0gMCAmJiB3c3B0clsyXSA9PSAwICYmIHdzcHRyWzNdID09IDAgJiYKKwl3c3B0cls1XSA9PSAwICYmIHdzcHRyWzZdID09IDAgJiYgd3NwdHJbN10gPT0gMCkgeworICAgICAgLyogQUMgdGVybXMgYWxsIHplcm8gKi8KKyAgICAgIEpTQU1QTEUgZGN2YWwgPSByYW5nZV9saW1pdFsoaW50KSBERVNDQUxFKChJTlQzMikgd3NwdHJbMF0sIFBBU1MxX0JJVFMrMykKKwkJCQkgICYgUkFOR0VfTUFTS107CisgICAgICAKKyAgICAgIG91dHB0clswXSA9IGRjdmFsOworICAgICAgb3V0cHRyWzFdID0gZGN2YWw7CisgICAgICBvdXRwdHJbMl0gPSBkY3ZhbDsKKyAgICAgIG91dHB0clszXSA9IGRjdmFsOworICAgICAgCisgICAgICB3c3B0ciArPSBEQ1RTSVpFOwkJLyogYWR2YW5jZSBwb2ludGVyIHRvIG5leHQgcm93ICovCisgICAgICBjb250aW51ZTsKKyAgICB9CisjZW5kaWYKKyAgICAKKyAgICAvKiBFdmVuIHBhcnQgKi8KKyAgICAKKyAgICB0bXAwID0gKChJTlQzMikgd3NwdHJbMF0pIDw8IChDT05TVF9CSVRTKzEpOworICAgIAorICAgIHRtcDIgPSBNVUxUSVBMWSgoSU5UMzIpIHdzcHRyWzJdLCBGSVhfMV84NDc3NTkwNjUpCisJICsgTVVMVElQTFkoKElOVDMyKSB3c3B0cls2XSwgLSBGSVhfMF83NjUzNjY4NjUpOworICAgIAorICAgIHRtcDEwID0gdG1wMCArIHRtcDI7CisgICAgdG1wMTIgPSB0bXAwIC0gdG1wMjsKKyAgICAKKyAgICAvKiBPZGQgcGFydCAqLworICAgIAorICAgIHoxID0gKElOVDMyKSB3c3B0cls3XTsKKyAgICB6MiA9IChJTlQzMikgd3NwdHJbNV07CisgICAgejMgPSAoSU5UMzIpIHdzcHRyWzNdOworICAgIHo0ID0gKElOVDMyKSB3c3B0clsxXTsKKyAgICAKKyAgICB0bXAwID0gTVVMVElQTFkoejEsIC0gRklYXzBfMjExMTY0MjQzKSAvKiBzcXJ0KDIpICogKGMzLWMxKSAqLworCSArIE1VTFRJUExZKHoyLCBGSVhfMV80NTE3NzQ5ODEpIC8qIHNxcnQoMikgKiAoYzMrYzcpICovCisJICsgTVVMVElQTFkoejMsIC0gRklYXzJfMTcyNzM0ODAzKSAvKiBzcXJ0KDIpICogKC1jMS1jNSkgKi8KKwkgKyBNVUxUSVBMWSh6NCwgRklYXzFfMDYxNTk0MzM3KTsgLyogc3FydCgyKSAqIChjNStjNykgKi8KKyAgICAKKyAgICB0bXAyID0gTVVMVElQTFkoejEsIC0gRklYXzBfNTA5Nzk1NTc5KSAvKiBzcXJ0KDIpICogKGM3LWM1KSAqLworCSArIE1VTFRJUExZKHoyLCAtIEZJWF8wXzYwMTM0NDg4NykgLyogc3FydCgyKSAqIChjNS1jMSkgKi8KKwkgKyBNVUxUSVBMWSh6MywgRklYXzBfODk5OTc2MjIzKSAvKiBzcXJ0KDIpICogKGMzLWM3KSAqLworCSArIE1VTFRJUExZKHo0LCBGSVhfMl81NjI5MTU0NDcpOyAvKiBzcXJ0KDIpICogKGMxK2MzKSAqLworCisgICAgLyogRmluYWwgb3V0cHV0IHN0YWdlICovCisgICAgCisgICAgb3V0cHRyWzBdID0gcmFuZ2VfbGltaXRbKGludCkgREVTQ0FMRSh0bXAxMCArIHRtcDIsCisJCQkJCSAgQ09OU1RfQklUUytQQVNTMV9CSVRTKzMrMSkKKwkJCSAgICAmIFJBTkdFX01BU0tdOworICAgIG91dHB0clszXSA9IHJhbmdlX2xpbWl0WyhpbnQpIERFU0NBTEUodG1wMTAgLSB0bXAyLAorCQkJCQkgIENPTlNUX0JJVFMrUEFTUzFfQklUUyszKzEpCisJCQkgICAgJiBSQU5HRV9NQVNLXTsKKyAgICBvdXRwdHJbMV0gPSByYW5nZV9saW1pdFsoaW50KSBERVNDQUxFKHRtcDEyICsgdG1wMCwKKwkJCQkJICBDT05TVF9CSVRTK1BBU1MxX0JJVFMrMysxKQorCQkJICAgICYgUkFOR0VfTUFTS107CisgICAgb3V0cHRyWzJdID0gcmFuZ2VfbGltaXRbKGludCkgREVTQ0FMRSh0bXAxMiAtIHRtcDAsCisJCQkJCSAgQ09OU1RfQklUUytQQVNTMV9CSVRTKzMrMSkKKwkJCSAgICAmIFJBTkdFX01BU0tdOworICAgIAorICAgIHdzcHRyICs9IERDVFNJWkU7CQkvKiBhZHZhbmNlIHBvaW50ZXIgdG8gbmV4dCByb3cgKi8KKyAgfQorfQorCisKKy8qCisgKiBQZXJmb3JtIGRlcXVhbnRpemF0aW9uIGFuZCBpbnZlcnNlIERDVCBvbiBvbmUgYmxvY2sgb2YgY29lZmZpY2llbnRzLAorICogcHJvZHVjaW5nIGEgcmVkdWNlZC1zaXplIDJ4MiBvdXRwdXQgYmxvY2suCisgKi8KKworR0xPQkFMKHZvaWQpCitqcGVnX2lkY3RfMngyIChqX2RlY29tcHJlc3NfcHRyIGNpbmZvLCBqcGVnX2NvbXBvbmVudF9pbmZvICogY29tcHB0ciwKKwkgICAgICAgSkNPRUZQVFIgY29lZl9ibG9jaywKKwkgICAgICAgSlNBTVBBUlJBWSBvdXRwdXRfYnVmLCBKRElNRU5TSU9OIG91dHB1dF9jb2wpCit7CisgIElOVDMyIHRtcDAsIHRtcDEwLCB6MTsKKyAgSkNPRUZQVFIgaW5wdHI7CisgIElTTE9XX01VTFRfVFlQRSAqIHF1YW50cHRyOworICBpbnQgKiB3c3B0cjsKKyAgSlNBTVBST1cgb3V0cHRyOworICBKU0FNUExFICpyYW5nZV9saW1pdCA9IElEQ1RfcmFuZ2VfbGltaXQoY2luZm8pOworICBpbnQgY3RyOworICBpbnQgd29ya3NwYWNlW0RDVFNJWkUqMl07CS8qIGJ1ZmZlcnMgZGF0YSBiZXR3ZWVuIHBhc3NlcyAqLworICBTSElGVF9URU1QUworCisgIC8qIFBhc3MgMTogcHJvY2VzcyBjb2x1bW5zIGZyb20gaW5wdXQsIHN0b3JlIGludG8gd29yayBhcnJheS4gKi8KKworICBpbnB0ciA9IGNvZWZfYmxvY2s7CisgIHF1YW50cHRyID0gKElTTE9XX01VTFRfVFlQRSAqKSBjb21wcHRyLT5kY3RfdGFibGU7CisgIHdzcHRyID0gd29ya3NwYWNlOworICBmb3IgKGN0ciA9IERDVFNJWkU7IGN0ciA+IDA7IGlucHRyKyssIHF1YW50cHRyKyssIHdzcHRyKyssIGN0ci0tKSB7CisgICAgLyogRG9uJ3QgYm90aGVyIHRvIHByb2Nlc3MgY29sdW1ucyAyLDQsNiAqLworICAgIGlmIChjdHIgPT0gRENUU0laRS0yIHx8IGN0ciA9PSBEQ1RTSVpFLTQgfHwgY3RyID09IERDVFNJWkUtNikKKyAgICAgIGNvbnRpbnVlOworICAgIGlmIChpbnB0cltEQ1RTSVpFKjFdID09IDAgJiYgaW5wdHJbRENUU0laRSozXSA9PSAwICYmCisJaW5wdHJbRENUU0laRSo1XSA9PSAwICYmIGlucHRyW0RDVFNJWkUqN10gPT0gMCkgeworICAgICAgLyogQUMgdGVybXMgYWxsIHplcm87IHdlIG5lZWQgbm90IGV4YW1pbmUgdGVybXMgMiw0LDYgZm9yIDJ4MiBvdXRwdXQgKi8KKyAgICAgIGludCBkY3ZhbCA9IERFUVVBTlRJWkUoaW5wdHJbRENUU0laRSowXSwgcXVhbnRwdHJbRENUU0laRSowXSkgPDwgUEFTUzFfQklUUzsKKyAgICAgIAorICAgICAgd3NwdHJbRENUU0laRSowXSA9IGRjdmFsOworICAgICAgd3NwdHJbRENUU0laRSoxXSA9IGRjdmFsOworICAgICAgCisgICAgICBjb250aW51ZTsKKyAgICB9CisgICAgCisgICAgLyogRXZlbiBwYXJ0ICovCisgICAgCisgICAgejEgPSBERVFVQU5USVpFKGlucHRyW0RDVFNJWkUqMF0sIHF1YW50cHRyW0RDVFNJWkUqMF0pOworICAgIHRtcDEwID0gejEgPDwgKENPTlNUX0JJVFMrMik7CisgICAgCisgICAgLyogT2RkIHBhcnQgKi8KKworICAgIHoxID0gREVRVUFOVElaRShpbnB0cltEQ1RTSVpFKjddLCBxdWFudHB0cltEQ1RTSVpFKjddKTsKKyAgICB0bXAwID0gTVVMVElQTFkoejEsIC0gRklYXzBfNzIwOTU5ODIyKTsgLyogc3FydCgyKSAqIChjNy1jNStjMy1jMSkgKi8KKyAgICB6MSA9IERFUVVBTlRJWkUoaW5wdHJbRENUU0laRSo1XSwgcXVhbnRwdHJbRENUU0laRSo1XSk7CisgICAgdG1wMCArPSBNVUxUSVBMWSh6MSwgRklYXzBfODUwNDMwMDk1KTsgLyogc3FydCgyKSAqICgtYzErYzMrYzUrYzcpICovCisgICAgejEgPSBERVFVQU5USVpFKGlucHRyW0RDVFNJWkUqM10sIHF1YW50cHRyW0RDVFNJWkUqM10pOworICAgIHRtcDAgKz0gTVVMVElQTFkoejEsIC0gRklYXzFfMjcyNzU4NTgwKTsgLyogc3FydCgyKSAqICgtYzErYzMtYzUtYzcpICovCisgICAgejEgPSBERVFVQU5USVpFKGlucHRyW0RDVFNJWkUqMV0sIHF1YW50cHRyW0RDVFNJWkUqMV0pOworICAgIHRtcDAgKz0gTVVMVElQTFkoejEsIEZJWF8zXzYyNDUwOTc4NSk7IC8qIHNxcnQoMikgKiAoYzErYzMrYzUrYzcpICovCisKKyAgICAvKiBGaW5hbCBvdXRwdXQgc3RhZ2UgKi8KKyAgICAKKyAgICB3c3B0cltEQ1RTSVpFKjBdID0gKGludCkgREVTQ0FMRSh0bXAxMCArIHRtcDAsIENPTlNUX0JJVFMtUEFTUzFfQklUUysyKTsKKyAgICB3c3B0cltEQ1RTSVpFKjFdID0gKGludCkgREVTQ0FMRSh0bXAxMCAtIHRtcDAsIENPTlNUX0JJVFMtUEFTUzFfQklUUysyKTsKKyAgfQorICAKKyAgLyogUGFzcyAyOiBwcm9jZXNzIDIgcm93cyBmcm9tIHdvcmsgYXJyYXksIHN0b3JlIGludG8gb3V0cHV0IGFycmF5LiAqLworCisgIHdzcHRyID0gd29ya3NwYWNlOworICBmb3IgKGN0ciA9IDA7IGN0ciA8IDI7IGN0cisrKSB7CisgICAgb3V0cHRyID0gb3V0cHV0X2J1ZltjdHJdICsgb3V0cHV0X2NvbDsKKyAgICAvKiBJdCdzIG5vdCBjbGVhciB3aGV0aGVyIGEgemVybyByb3cgdGVzdCBpcyB3b3J0aHdoaWxlIGhlcmUgLi4uICovCisKKyNpZm5kZWYgTk9fWkVST19ST1dfVEVTVAorICAgIGlmICh3c3B0clsxXSA9PSAwICYmIHdzcHRyWzNdID09IDAgJiYgd3NwdHJbNV0gPT0gMCAmJiB3c3B0cls3XSA9PSAwKSB7CisgICAgICAvKiBBQyB0ZXJtcyBhbGwgemVybyAqLworICAgICAgSlNBTVBMRSBkY3ZhbCA9IHJhbmdlX2xpbWl0WyhpbnQpIERFU0NBTEUoKElOVDMyKSB3c3B0clswXSwgUEFTUzFfQklUUyszKQorCQkJCSAgJiBSQU5HRV9NQVNLXTsKKyAgICAgIAorICAgICAgb3V0cHRyWzBdID0gZGN2YWw7CisgICAgICBvdXRwdHJbMV0gPSBkY3ZhbDsKKyAgICAgIAorICAgICAgd3NwdHIgKz0gRENUU0laRTsJCS8qIGFkdmFuY2UgcG9pbnRlciB0byBuZXh0IHJvdyAqLworICAgICAgY29udGludWU7CisgICAgfQorI2VuZGlmCisgICAgCisgICAgLyogRXZlbiBwYXJ0ICovCisgICAgCisgICAgdG1wMTAgPSAoKElOVDMyKSB3c3B0clswXSkgPDwgKENPTlNUX0JJVFMrMik7CisgICAgCisgICAgLyogT2RkIHBhcnQgKi8KKworICAgIHRtcDAgPSBNVUxUSVBMWSgoSU5UMzIpIHdzcHRyWzddLCAtIEZJWF8wXzcyMDk1OTgyMikgLyogc3FydCgyKSAqIChjNy1jNStjMy1jMSkgKi8KKwkgKyBNVUxUSVBMWSgoSU5UMzIpIHdzcHRyWzVdLCBGSVhfMF84NTA0MzAwOTUpIC8qIHNxcnQoMikgKiAoLWMxK2MzK2M1K2M3KSAqLworCSArIE1VTFRJUExZKChJTlQzMikgd3NwdHJbM10sIC0gRklYXzFfMjcyNzU4NTgwKSAvKiBzcXJ0KDIpICogKC1jMStjMy1jNS1jNykgKi8KKwkgKyBNVUxUSVBMWSgoSU5UMzIpIHdzcHRyWzFdLCBGSVhfM182MjQ1MDk3ODUpOyAvKiBzcXJ0KDIpICogKGMxK2MzK2M1K2M3KSAqLworCisgICAgLyogRmluYWwgb3V0cHV0IHN0YWdlICovCisgICAgCisgICAgb3V0cHRyWzBdID0gcmFuZ2VfbGltaXRbKGludCkgREVTQ0FMRSh0bXAxMCArIHRtcDAsCisJCQkJCSAgQ09OU1RfQklUUytQQVNTMV9CSVRTKzMrMikKKwkJCSAgICAmIFJBTkdFX01BU0tdOworICAgIG91dHB0clsxXSA9IHJhbmdlX2xpbWl0WyhpbnQpIERFU0NBTEUodG1wMTAgLSB0bXAwLAorCQkJCQkgIENPTlNUX0JJVFMrUEFTUzFfQklUUyszKzIpCisJCQkgICAgJiBSQU5HRV9NQVNLXTsKKyAgICAKKyAgICB3c3B0ciArPSBEQ1RTSVpFOwkJLyogYWR2YW5jZSBwb2ludGVyIHRvIG5leHQgcm93ICovCisgIH0KK30KKworCisvKgorICogUGVyZm9ybSBkZXF1YW50aXphdGlvbiBhbmQgaW52ZXJzZSBEQ1Qgb24gb25lIGJsb2NrIG9mIGNvZWZmaWNpZW50cywKKyAqIHByb2R1Y2luZyBhIHJlZHVjZWQtc2l6ZSAxeDEgb3V0cHV0IGJsb2NrLgorICovCisKK0dMT0JBTCh2b2lkKQoranBlZ19pZGN0XzF4MSAoal9kZWNvbXByZXNzX3B0ciBjaW5mbywganBlZ19jb21wb25lbnRfaW5mbyAqIGNvbXBwdHIsCisJICAgICAgIEpDT0VGUFRSIGNvZWZfYmxvY2ssCisJICAgICAgIEpTQU1QQVJSQVkgb3V0cHV0X2J1ZiwgSkRJTUVOU0lPTiBvdXRwdXRfY29sKQoreworICBpbnQgZGN2YWw7CisgIElTTE9XX01VTFRfVFlQRSAqIHF1YW50cHRyOworICBKU0FNUExFICpyYW5nZV9saW1pdCA9IElEQ1RfcmFuZ2VfbGltaXQoY2luZm8pOworICBTSElGVF9URU1QUworCisgIC8qIFdlIGhhcmRseSBuZWVkIGFuIGludmVyc2UgRENUIHJvdXRpbmUgZm9yIHRoaXM6IGp1c3QgdGFrZSB0aGUKKyAgICogYXZlcmFnZSBwaXhlbCB2YWx1ZSwgd2hpY2ggaXMgb25lLWVpZ2h0aCBvZiB0aGUgREMgY29lZmZpY2llbnQuCisgICAqLworICBxdWFudHB0ciA9IChJU0xPV19NVUxUX1RZUEUgKikgY29tcHB0ci0+ZGN0X3RhYmxlOworICBkY3ZhbCA9IERFUVVBTlRJWkUoY29lZl9ibG9ja1swXSwgcXVhbnRwdHJbMF0pOworICBkY3ZhbCA9IChpbnQpIERFU0NBTEUoKElOVDMyKSBkY3ZhbCwgMyk7CisKKyAgb3V0cHV0X2J1ZlswXVtvdXRwdXRfY29sXSA9IHJhbmdlX2xpbWl0W2RjdmFsICYgUkFOR0VfTUFTS107Cit9CisKKyNlbmRpZiAvKiBJRENUX1NDQUxJTkdfU1VQUE9SVEVEICovCmRpZmYgLS1naXQgYS9qbWVtYW5zaS5jIGIvam1lbWFuc2kuYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMmQ5M2U0OS4uMDAwMDAwMAotLS0gYS9qbWVtYW5zaS5jCisrKyAvZGV2L251bGwKQEAgLTEsMTY3ICswLDAgQEAKLS8qCi0gKiBqbWVtYW5zaS5jCi0gKgotICogQ29weXJpZ2h0IChDKSAxOTkyLTE5OTYsIFRob21hcyBHLiBMYW5lLgotICogVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEluZGVwZW5kZW50IEpQRUcgR3JvdXAncyBzb2Z0d2FyZS4KLSAqIEZvciBjb25kaXRpb25zIG9mIGRpc3RyaWJ1dGlvbiBhbmQgdXNlLCBzZWUgdGhlIGFjY29tcGFueWluZyBSRUFETUUgZmlsZS4KLSAqCi0gKiBUaGlzIGZpbGUgcHJvdmlkZXMgYSBzaW1wbGUgZ2VuZXJpYyBpbXBsZW1lbnRhdGlvbiBvZiB0aGUgc3lzdGVtLQotICogZGVwZW5kZW50IHBvcnRpb24gb2YgdGhlIEpQRUcgbWVtb3J5IG1hbmFnZXIuICBUaGlzIGltcGxlbWVudGF0aW9uCi0gKiBhc3N1bWVzIHRoYXQgeW91IGhhdmUgdGhlIEFOU0ktc3RhbmRhcmQgbGlicmFyeSByb3V0aW5lIHRtcGZpbGUoKS4KLSAqIEFsc28sIHRoZSBwcm9ibGVtIG9mIGRldGVybWluaW5nIHRoZSBhbW91bnQgb2YgbWVtb3J5IGF2YWlsYWJsZQotICogaXMgc2hvdmVkIG9udG8gdGhlIHVzZXIuCi0gKi8KLQotI2RlZmluZSBKUEVHX0lOVEVSTkFMUwotI2luY2x1ZGUgImppbmNsdWRlLmgiCi0jaW5jbHVkZSAianBlZ2xpYi5oIgotI2luY2x1ZGUgImptZW1zeXMuaCIJCS8qIGltcG9ydCB0aGUgc3lzdGVtLWRlcGVuZGVudCBkZWNsYXJhdGlvbnMgKi8KLQotI2lmbmRlZiBIQVZFX1NURExJQl9ICQkvKiA8c3RkbGliLmg+IHNob3VsZCBkZWNsYXJlIG1hbGxvYygpLGZyZWUoKSAqLwotZXh0ZXJuIHZvaWQgKiBtYWxsb2MgSlBQKChzaXplX3Qgc2l6ZSkpOwotZXh0ZXJuIHZvaWQgZnJlZSBKUFAoKHZvaWQgKnB0cikpOwotI2VuZGlmCi0KLSNpZm5kZWYgU0VFS19TRVQJCS8qIHByZS1BTlNJIHN5c3RlbXMgbWF5IG5vdCBkZWZpbmUgdGhpczsgKi8KLSNkZWZpbmUgU0VFS19TRVQgIDAJCS8qIGlmIG5vdCwgYXNzdW1lIDAgaXMgY29ycmVjdCAqLwotI2VuZGlmCi0KLQotLyoKLSAqIE1lbW9yeSBhbGxvY2F0aW9uIGFuZCBmcmVlaW5nIGFyZSBjb250cm9sbGVkIGJ5IHRoZSByZWd1bGFyIGxpYnJhcnkKLSAqIHJvdXRpbmVzIG1hbGxvYygpIGFuZCBmcmVlKCkuCi0gKi8KLQotR0xPQkFMKHZvaWQgKikKLWpwZWdfZ2V0X3NtYWxsIChqX2NvbW1vbl9wdHIgY2luZm8sIHNpemVfdCBzaXplb2ZvYmplY3QpCi17Ci0gIHJldHVybiAodm9pZCAqKSBtYWxsb2Moc2l6ZW9mb2JqZWN0KTsKLX0KLQotR0xPQkFMKHZvaWQpCi1qcGVnX2ZyZWVfc21hbGwgKGpfY29tbW9uX3B0ciBjaW5mbywgdm9pZCAqIG9iamVjdCwgc2l6ZV90IHNpemVvZm9iamVjdCkKLXsKLSAgZnJlZShvYmplY3QpOwotfQotCi0KLS8qCi0gKiAiTGFyZ2UiIG9iamVjdHMgYXJlIHRyZWF0ZWQgdGhlIHNhbWUgYXMgInNtYWxsIiBvbmVzLgotICogTkI6IGFsdGhvdWdoIHdlIGluY2x1ZGUgRkFSIGtleXdvcmRzIGluIHRoZSByb3V0aW5lIGRlY2xhcmF0aW9ucywKLSAqIHRoaXMgZmlsZSB3b24ndCBhY3R1YWxseSB3b3JrIGluIDgweDg2IHNtYWxsL21lZGl1bSBtb2RlbDsgYXQgbGVhc3QsCi0gKiB5b3UgcHJvYmFibHkgd29uJ3QgYmUgYWJsZSB0byBwcm9jZXNzIHVzZWZ1bC1zaXplIGltYWdlcyBpbiBvbmx5IDY0S0IuCi0gKi8KLQotR0xPQkFMKHZvaWQgRkFSICopCi1qcGVnX2dldF9sYXJnZSAoal9jb21tb25fcHRyIGNpbmZvLCBzaXplX3Qgc2l6ZW9mb2JqZWN0KQotewotICByZXR1cm4gKHZvaWQgRkFSICopIG1hbGxvYyhzaXplb2ZvYmplY3QpOwotfQotCi1HTE9CQUwodm9pZCkKLWpwZWdfZnJlZV9sYXJnZSAoal9jb21tb25fcHRyIGNpbmZvLCB2b2lkIEZBUiAqIG9iamVjdCwgc2l6ZV90IHNpemVvZm9iamVjdCkKLXsKLSAgZnJlZShvYmplY3QpOwotfQotCi0KLS8qCi0gKiBUaGlzIHJvdXRpbmUgY29tcHV0ZXMgdGhlIHRvdGFsIG1lbW9yeSBzcGFjZSBhdmFpbGFibGUgZm9yIGFsbG9jYXRpb24uCi0gKiBJdCdzIGltcG9zc2libGUgdG8gZG8gdGhpcyBpbiBhIHBvcnRhYmxlIHdheTsgb3VyIGN1cnJlbnQgc29sdXRpb24gaXMKLSAqIHRvIG1ha2UgdGhlIHVzZXIgdGVsbCB1cyAod2l0aCBhIGRlZmF1bHQgdmFsdWUgc2V0IGF0IGNvbXBpbGUgdGltZSkuCi0gKiBJZiB5b3UgY2FuIGFjdHVhbGx5IGdldCB0aGUgYXZhaWxhYmxlIHNwYWNlLCBpdCdzIGEgZ29vZCBpZGVhIHRvIHN1YnRyYWN0Ci0gKiBhIHNsb3AgZmFjdG9yIG9mIDUlIG9yIHNvLgotICovCi0KLSNpZm5kZWYgREVGQVVMVF9NQVhfTUVNCQkvKiBzbyBjYW4gb3ZlcnJpZGUgZnJvbSBtYWtlZmlsZSAqLwotI2RlZmluZSBERUZBVUxUX01BWF9NRU0JCTEwMDAwMDBMIC8qIGRlZmF1bHQ6IG9uZSBtZWdhYnl0ZSAqLwotI2VuZGlmCi0KLUdMT0JBTChsb25nKQotanBlZ19tZW1fYXZhaWxhYmxlIChqX2NvbW1vbl9wdHIgY2luZm8sIGxvbmcgbWluX2J5dGVzX25lZWRlZCwKLQkJICAgIGxvbmcgbWF4X2J5dGVzX25lZWRlZCwgbG9uZyBhbHJlYWR5X2FsbG9jYXRlZCkKLXsKLSAgcmV0dXJuIGNpbmZvLT5tZW0tPm1heF9tZW1vcnlfdG9fdXNlIC0gYWxyZWFkeV9hbGxvY2F0ZWQ7Ci19Ci0KLQotLyoKLSAqIEJhY2tpbmcgc3RvcmUgKHRlbXBvcmFyeSBmaWxlKSBtYW5hZ2VtZW50LgotICogQmFja2luZyBzdG9yZSBvYmplY3RzIGFyZSBvbmx5IHVzZWQgd2hlbiB0aGUgdmFsdWUgcmV0dXJuZWQgYnkKLSAqIGpwZWdfbWVtX2F2YWlsYWJsZSBpcyBsZXNzIHRoYW4gdGhlIHRvdGFsIHNwYWNlIG5lZWRlZC4gIFlvdSBjYW4gZGlzcGVuc2UKLSAqIHdpdGggdGhlc2Ugcm91dGluZXMgaWYgeW91IGhhdmUgcGxlbnR5IG9mIHZpcnR1YWwgbWVtb3J5OyBzZWUgam1lbW5vYnMuYy4KLSAqLwotCi0KLU1FVEhPRERFRih2b2lkKQotcmVhZF9iYWNraW5nX3N0b3JlIChqX2NvbW1vbl9wdHIgY2luZm8sIGJhY2tpbmdfc3RvcmVfcHRyIGluZm8sCi0JCSAgICB2b2lkIEZBUiAqIGJ1ZmZlcl9hZGRyZXNzLAotCQkgICAgbG9uZyBmaWxlX29mZnNldCwgbG9uZyBieXRlX2NvdW50KQotewotICBpZiAoZnNlZWsoaW5mby0+dGVtcF9maWxlLCBmaWxlX29mZnNldCwgU0VFS19TRVQpKQotICAgIEVSUkVYSVQoY2luZm8sIEpFUlJfVEZJTEVfU0VFSyk7Ci0gIGlmIChKRlJFQUQoaW5mby0+dGVtcF9maWxlLCBidWZmZXJfYWRkcmVzcywgYnl0ZV9jb3VudCkKLSAgICAgICE9IChzaXplX3QpIGJ5dGVfY291bnQpCi0gICAgRVJSRVhJVChjaW5mbywgSkVSUl9URklMRV9SRUFEKTsKLX0KLQotCi1NRVRIT0RERUYodm9pZCkKLXdyaXRlX2JhY2tpbmdfc3RvcmUgKGpfY29tbW9uX3B0ciBjaW5mbywgYmFja2luZ19zdG9yZV9wdHIgaW5mbywKLQkJICAgICB2b2lkIEZBUiAqIGJ1ZmZlcl9hZGRyZXNzLAotCQkgICAgIGxvbmcgZmlsZV9vZmZzZXQsIGxvbmcgYnl0ZV9jb3VudCkKLXsKLSAgaWYgKGZzZWVrKGluZm8tPnRlbXBfZmlsZSwgZmlsZV9vZmZzZXQsIFNFRUtfU0VUKSkKLSAgICBFUlJFWElUKGNpbmZvLCBKRVJSX1RGSUxFX1NFRUspOwotICBpZiAoSkZXUklURShpbmZvLT50ZW1wX2ZpbGUsIGJ1ZmZlcl9hZGRyZXNzLCBieXRlX2NvdW50KQotICAgICAgIT0gKHNpemVfdCkgYnl0ZV9jb3VudCkKLSAgICBFUlJFWElUKGNpbmZvLCBKRVJSX1RGSUxFX1dSSVRFKTsKLX0KLQotCi1NRVRIT0RERUYodm9pZCkKLWNsb3NlX2JhY2tpbmdfc3RvcmUgKGpfY29tbW9uX3B0ciBjaW5mbywgYmFja2luZ19zdG9yZV9wdHIgaW5mbykKLXsKLSAgZmNsb3NlKGluZm8tPnRlbXBfZmlsZSk7Ci0gIC8qIFNpbmNlIHRoaXMgaW1wbGVtZW50YXRpb24gdXNlcyB0bXBmaWxlKCkgdG8gY3JlYXRlIHRoZSBmaWxlLAotICAgKiBubyBleHBsaWNpdCBmaWxlIGRlbGV0aW9uIGlzIG5lZWRlZC4KLSAgICovCi19Ci0KLQotLyoKLSAqIEluaXRpYWwgb3BlbmluZyBvZiBhIGJhY2tpbmctc3RvcmUgb2JqZWN0LgotICoKLSAqIFRoaXMgdmVyc2lvbiB1c2VzIHRtcGZpbGUoKSwgd2hpY2ggY29uc3RydWN0cyBhIHN1aXRhYmxlIGZpbGUgbmFtZQotICogYmVoaW5kIHRoZSBzY2VuZXMuICBXZSBkb24ndCBoYXZlIHRvIHVzZSBpbmZvLT50ZW1wX25hbWVbXSBhdCBhbGw7Ci0gKiBpbmRlZWQsIHdlIGNhbid0IGV2ZW4gZmluZCBvdXQgdGhlIGFjdHVhbCBuYW1lIG9mIHRoZSB0ZW1wIGZpbGUuCi0gKi8KLQotR0xPQkFMKHZvaWQpCi1qcGVnX29wZW5fYmFja2luZ19zdG9yZSAoal9jb21tb25fcHRyIGNpbmZvLCBiYWNraW5nX3N0b3JlX3B0ciBpbmZvLAotCQkJIGxvbmcgdG90YWxfYnl0ZXNfbmVlZGVkKQotewotICBpZiAoKGluZm8tPnRlbXBfZmlsZSA9IHRtcGZpbGUoKSkgPT0gTlVMTCkKLSAgICBFUlJFWElUUyhjaW5mbywgSkVSUl9URklMRV9DUkVBVEUsICIiKTsKLSAgaW5mby0+cmVhZF9iYWNraW5nX3N0b3JlID0gcmVhZF9iYWNraW5nX3N0b3JlOwotICBpbmZvLT53cml0ZV9iYWNraW5nX3N0b3JlID0gd3JpdGVfYmFja2luZ19zdG9yZTsKLSAgaW5mby0+Y2xvc2VfYmFja2luZ19zdG9yZSA9IGNsb3NlX2JhY2tpbmdfc3RvcmU7Ci19Ci0KLQotLyoKLSAqIFRoZXNlIHJvdXRpbmVzIHRha2UgY2FyZSBvZiBhbnkgc3lzdGVtLWRlcGVuZGVudCBpbml0aWFsaXphdGlvbiBhbmQKLSAqIGNsZWFudXAgcmVxdWlyZWQuCi0gKi8KLQotR0xPQkFMKGxvbmcpCi1qcGVnX21lbV9pbml0IChqX2NvbW1vbl9wdHIgY2luZm8pCi17Ci0gIHJldHVybiBERUZBVUxUX01BWF9NRU07CS8qIGRlZmF1bHQgZm9yIG1heF9tZW1vcnlfdG9fdXNlICovCi19Ci0KLUdMT0JBTCh2b2lkKQotanBlZ19tZW1fdGVybSAoal9jb21tb25fcHRyIGNpbmZvKQotewotICAvKiBubyB3b3JrICovCi19CmRpZmYgLS1naXQgYS9qbWVtZG9zLmMgYi9qbWVtZG9zLmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDYwYjQ1YzYuLjAwMDAwMDAKLS0tIGEvam1lbWRvcy5jCisrKyAvZGV2L251bGwKQEAgLTEsNjM4ICswLDAgQEAKLS8qCi0gKiBqbWVtZG9zLmMKLSAqCi0gKiBDb3B5cmlnaHQgKEMpIDE5OTItMTk5NywgVGhvbWFzIEcuIExhbmUuCi0gKiBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgSW5kZXBlbmRlbnQgSlBFRyBHcm91cCdzIHNvZnR3YXJlLgotICogRm9yIGNvbmRpdGlvbnMgb2YgZGlzdHJpYnV0aW9uIGFuZCB1c2UsIHNlZSB0aGUgYWNjb21wYW55aW5nIFJFQURNRSBmaWxlLgotICoKLSAqIFRoaXMgZmlsZSBwcm92aWRlcyBhbiBNUy1ET1MtY29tcGF0aWJsZSBpbXBsZW1lbnRhdGlvbiBvZiB0aGUgc3lzdGVtLQotICogZGVwZW5kZW50IHBvcnRpb24gb2YgdGhlIEpQRUcgbWVtb3J5IG1hbmFnZXIuICBUZW1wb3JhcnkgZGF0YSBjYW4gYmUKLSAqIHN0b3JlZCBpbiBleHRlbmRlZCBvciBleHBhbmRlZCBtZW1vcnkgYXMgd2VsbCBhcyBpbiByZWd1bGFyIERPUyBmaWxlcy4KLSAqCi0gKiBJZiB5b3UgdXNlIHRoaXMgZmlsZSwgeW91IG11c3QgYmUgc3VyZSB0aGF0IE5FRURfRkFSX1BPSU5URVJTIGlzIGRlZmluZWQKLSAqIGlmIHlvdSBjb21waWxlIGluIGEgc21hbGwtZGF0YSBtZW1vcnkgbW9kZWw7IGl0IHNob3VsZCBOT1QgYmUgZGVmaW5lZCBpZgotICogeW91IHVzZSBhIGxhcmdlLWRhdGEgbWVtb3J5IG1vZGVsLiAgVGhpcyBmaWxlIGlzIG5vdCByZWNvbW1lbmRlZCBpZiB5b3UKLSAqIGFyZSB1c2luZyBhIGZsYXQtbWVtb3J5LXNwYWNlIDM4NiBlbnZpcm9ubWVudCBzdWNoIGFzIERKR0NDIG9yIFdhdGNvbSBDLgotICogQWxzbywgdGhpcyBjb2RlIHdpbGwgTk9UIHdvcmsgaWYgc3RydWN0IGZpZWxkcyBhcmUgYWxpZ25lZCBvbiBncmVhdGVyIHRoYW4KLSAqIDItYnl0ZSBib3VuZGFyaWVzLgotICoKLSAqIEJhc2VkIG9uIGNvZGUgY29udHJpYnV0ZWQgYnkgR2UnIFdlaWplcnMuCi0gKi8KLQotLyoKLSAqIElmIHlvdSBoYXZlIGJvdGggZXh0ZW5kZWQgYW5kIGV4cGFuZGVkIG1lbW9yeSwgeW91IG1heSB3YW50IHRvIGNoYW5nZSB0aGUKLSAqIG9yZGVyIGluIHdoaWNoIHRoZXkgYXJlIHRyaWVkIGluIGpvcGVuX2JhY2tpbmdfc3RvcmUuICBPbiBhIDI4NiBtYWNoaW5lCi0gKiBleHBhbmRlZCBtZW1vcnkgaXMgdXN1YWxseSBmYXN0ZXIsIHNpbmNlIGV4dGVuZGVkIG1lbW9yeSBhY2Nlc3MgaW52b2x2ZXMKLSAqIGFuIGV4cGVuc2l2ZSBwcm90ZWN0ZWQtbW9kZS1hbmQtYmFjayBzd2l0Y2guICBPbiAzODYgYW5kIGJldHRlciwgZXh0ZW5kZWQKLSAqIG1lbW9yeSBpcyB1c3VhbGx5IGZhc3Rlci4gIEFzIGRpc3RyaWJ1dGVkLCB0aGUgY29kZSB0cmllcyBleHRlbmRlZCBtZW1vcnkKLSAqIGZpcnN0ICh3aGF0PyBub3QgZXZlcnlvbmUgaGFzIGEgMzg2PyA6LSkuCi0gKgotICogWW91IGNhbiBkaXNhYmxlIHVzZSBvZiBleHRlbmRlZC9leHBhbmRlZCBtZW1vcnkgZW50aXJlbHkgYnkgYWx0ZXJpbmcgdGhlc2UKLSAqIGRlZmluaXRpb25zIG9yIG92ZXJyaWRpbmcgdGhlbSBmcm9tIHRoZSBNYWtlZmlsZSAoZWcsIC1ERU1TX1NVUFBPUlRFRD0wKS4KLSAqLwotCi0jaWZuZGVmIFhNU19TVVBQT1JURUQKLSNkZWZpbmUgWE1TX1NVUFBPUlRFRCAgMQotI2VuZGlmCi0jaWZuZGVmIEVNU19TVVBQT1JURUQKLSNkZWZpbmUgRU1TX1NVUFBPUlRFRCAgMQotI2VuZGlmCi0KLQotI2RlZmluZSBKUEVHX0lOVEVSTkFMUwotI2luY2x1ZGUgImppbmNsdWRlLmgiCi0jaW5jbHVkZSAianBlZ2xpYi5oIgotI2luY2x1ZGUgImptZW1zeXMuaCIJCS8qIGltcG9ydCB0aGUgc3lzdGVtLWRlcGVuZGVudCBkZWNsYXJhdGlvbnMgKi8KLQotI2lmbmRlZiBIQVZFX1NURExJQl9ICQkvKiA8c3RkbGliLmg+IHNob3VsZCBkZWNsYXJlIHRoZXNlICovCi1leHRlcm4gdm9pZCAqIG1hbGxvYyBKUFAoKHNpemVfdCBzaXplKSk7Ci1leHRlcm4gdm9pZCBmcmVlIEpQUCgodm9pZCAqcHRyKSk7Ci1leHRlcm4gY2hhciAqIGdldGVudiBKUFAoKGNvbnN0IGNoYXIgKiBuYW1lKSk7Ci0jZW5kaWYKLQotI2lmZGVmIE5FRURfRkFSX1BPSU5URVJTCi0KLSNpZmRlZiBfX1RVUkJPQ19fCi0vKiBUaGVzZSBkZWZpbml0aW9ucyB3b3JrIGZvciBCb3JsYW5kIEMgKFR1cmJvIEMpICovCi0jaW5jbHVkZSA8YWxsb2MuaD4JCS8qIG5lZWQgZmFybWFsbG9jKCksIGZhcmZyZWUoKSAqLwotI2RlZmluZSBmYXJfbWFsbG9jKHgpCWZhcm1hbGxvYyh4KQotI2RlZmluZSBmYXJfZnJlZSh4KQlmYXJmcmVlKHgpCi0jZWxzZQotLyogVGhlc2UgZGVmaW5pdGlvbnMgd29yayBmb3IgTWljcm9zb2Z0IEMgYW5kIGNvbXBhdGlibGUgY29tcGlsZXJzICovCi0jaW5jbHVkZSA8bWFsbG9jLmg+CQkvKiBuZWVkIF9mbWFsbG9jKCksIF9mZnJlZSgpICovCi0jZGVmaW5lIGZhcl9tYWxsb2MoeCkJX2ZtYWxsb2MoeCkKLSNkZWZpbmUgZmFyX2ZyZWUoeCkJX2ZmcmVlKHgpCi0jZW5kaWYKLQotI2Vsc2UgLyogbm90IE5FRURfRkFSX1BPSU5URVJTICovCi0KLSNkZWZpbmUgZmFyX21hbGxvYyh4KQltYWxsb2MoeCkKLSNkZWZpbmUgZmFyX2ZyZWUoeCkJZnJlZSh4KQotCi0jZW5kaWYgLyogTkVFRF9GQVJfUE9JTlRFUlMgKi8KLQotI2lmZGVmIERPTlRfVVNFX0JfTU9ERQkJLyogZGVmaW5lIG1vZGUgcGFyYW1ldGVycyBmb3IgZm9wZW4oKSAqLwotI2RlZmluZSBSRUFEX0JJTkFSWQkiciIKLSNlbHNlCi0jZGVmaW5lIFJFQURfQklOQVJZCSJyYiIKLSNlbmRpZgotCi0jaWZuZGVmIFVTRV9NU0RPU19NRU1NR1IJLyogbWFrZSBzdXJlIHVzZXIgZ290IGNvbmZpZ3VyYXRpb24gcmlnaHQgKi8KLSAgWW91IGZvcmdvdCB0byBkZWZpbmUgVVNFX01TRE9TX01FTU1HUiBpbiBqY29uZmlnLmguIC8qIGRlbGliZXJhdGUgc3ludGF4IGVycm9yICovCi0jZW5kaWYKLQotI2lmIE1BWF9BTExPQ19DSFVOSyA+PSA2NTUzNUwJLyogbWFrZSBzdXJlIGpjb25maWcuaCBnb3QgdGhpcyByaWdodCAqLwotICBNQVhfQUxMT0NfQ0hVTksgc2hvdWxkIGJlIGxlc3MgdGhhbiA2NEsuIC8qIGRlbGliZXJhdGUgc3ludGF4IGVycm9yICovCi0jZW5kaWYKLQotCi0vKgotICogRGVjbGFyYXRpb25zIGZvciBhc3NlbWJseS1sYW5ndWFnZSBzdXBwb3J0IHJvdXRpbmVzIChzZWUgam1lbWRvc2EuYXNtKS4KLSAqCi0gKiBUaGUgZnVuY3Rpb25zIGFyZSBkZWNsYXJlZCAiZmFyIiBhcyBhcmUgYWxsIHRoZWlyIHBvaW50ZXIgYXJndW1lbnRzOwotICogdGhpcyBlbnN1cmVzIHRoZSBhc3NlbWJseSBzb3VyY2UgY29kZSB3aWxsIHdvcmsgcmVnYXJkbGVzcyBvZiB0aGUKLSAqIGNvbXBpbGVyIG1lbW9yeSBtb2RlbC4gIFdlIGFzc3VtZSAic2hvcnQiIGlzIDE2IGJpdHMsICJsb25nIiBpcyAzMi4KLSAqLwotCi10eXBlZGVmIHZvaWQgZmFyICogWE1TRFJJVkVSOwkvKiBhY3R1YWxseSBhIHBvaW50ZXIgdG8gY29kZSAqLwotdHlwZWRlZiBzdHJ1Y3QgewkJLyogcmVnaXN0ZXJzIGZvciBjYWxsaW5nIFhNUyBkcml2ZXIgKi8KLQl1bnNpZ25lZCBzaG9ydCBheCwgZHgsIGJ4OwotCXZvaWQgZmFyICogZHNfc2k7Ci0gICAgICB9IFhNU2NvbnRleHQ7Ci10eXBlZGVmIHN0cnVjdCB7CQkvKiByZWdpc3RlcnMgZm9yIGNhbGxpbmcgRU1TIGRyaXZlciAqLwotCXVuc2lnbmVkIHNob3J0IGF4LCBkeCwgYng7Ci0Jdm9pZCBmYXIgKiBkc19zaTsKLSAgICAgIH0gRU1TY29udGV4dDsKLQotZXh0ZXJuIHNob3J0IGZhciBqZG9zX29wZW4gSlBQKChzaG9ydCBmYXIgKiBoYW5kbGUsIGNoYXIgZmFyICogZmlsZW5hbWUpKTsKLWV4dGVybiBzaG9ydCBmYXIgamRvc19jbG9zZSBKUFAoKHNob3J0IGhhbmRsZSkpOwotZXh0ZXJuIHNob3J0IGZhciBqZG9zX3NlZWsgSlBQKChzaG9ydCBoYW5kbGUsIGxvbmcgb2Zmc2V0KSk7Ci1leHRlcm4gc2hvcnQgZmFyIGpkb3NfcmVhZCBKUFAoKHNob3J0IGhhbmRsZSwgdm9pZCBmYXIgKiBidWZmZXIsCi0JCQkJdW5zaWduZWQgc2hvcnQgY291bnQpKTsKLWV4dGVybiBzaG9ydCBmYXIgamRvc193cml0ZSBKUFAoKHNob3J0IGhhbmRsZSwgdm9pZCBmYXIgKiBidWZmZXIsCi0JCQkJIHVuc2lnbmVkIHNob3J0IGNvdW50KSk7Ci1leHRlcm4gdm9pZCBmYXIganhtc19nZXRkcml2ZXIgSlBQKChYTVNEUklWRVIgZmFyICopKTsKLWV4dGVybiB2b2lkIGZhciBqeG1zX2NhbGxkcml2ZXIgSlBQKChYTVNEUklWRVIsIFhNU2NvbnRleHQgZmFyICopKTsKLWV4dGVybiBzaG9ydCBmYXIgamVtc19hdmFpbGFibGUgSlBQKCh2b2lkKSk7Ci1leHRlcm4gdm9pZCBmYXIgamVtc19jYWxsZHJpdmVyIEpQUCgoRU1TY29udGV4dCBmYXIgKikpOwotCi0KLS8qCi0gKiBTZWxlY3Rpb24gb2YgYSBmaWxlIG5hbWUgZm9yIGEgdGVtcG9yYXJ5IGZpbGUuCi0gKiBUaGlzIGlzIGhpZ2hseSBzeXN0ZW0tZGVwZW5kZW50LCBhbmQgeW91IG1heSB3YW50IHRvIGN1c3RvbWl6ZSBpdC4KLSAqLwotCi1zdGF0aWMgaW50IG5leHRfZmlsZV9udW07CS8qIHRvIGRpc3Rpbmd1aXNoIGFtb25nIHNldmVyYWwgdGVtcCBmaWxlcyAqLwotCi1MT0NBTCh2b2lkKQotc2VsZWN0X2ZpbGVfbmFtZSAoY2hhciAqIGZuYW1lKQotewotICBjb25zdCBjaGFyICogZW52OwotICBjaGFyICogcHRyOwotICBGSUxFICogdGZpbGU7Ci0KLSAgLyogS2VlcCBnZW5lcmF0aW5nIGZpbGUgbmFtZXMgdGlsbCB3ZSBmaW5kIG9uZSB0aGF0J3Mgbm90IGluIHVzZSAqLwotICBmb3IgKDs7KSB7Ci0gICAgLyogR2V0IHRlbXAgZGlyZWN0b3J5IG5hbWUgZnJvbSBlbnZpcm9ubWVudCBUTVAgb3IgVEVNUCB2YXJpYWJsZTsKLSAgICAgKiBpZiBub25lLCB1c2UgIi4iCi0gICAgICovCi0gICAgaWYgKChlbnYgPSAoY29uc3QgY2hhciAqKSBnZXRlbnYoIlRNUCIpKSA9PSBOVUxMKQotICAgICAgaWYgKChlbnYgPSAoY29uc3QgY2hhciAqKSBnZXRlbnYoIlRFTVAiKSkgPT0gTlVMTCkKLQllbnYgPSAiLiI7Ci0gICAgaWYgKCplbnYgPT0gJ1wwJykJCS8qIG51bGwgc3RyaW5nIG1lYW5zICIuIiAqLwotICAgICAgZW52ID0gIi4iOwotICAgIHB0ciA9IGZuYW1lOwkJLyogY29weSBuYW1lIHRvIGZuYW1lICovCi0gICAgd2hpbGUgKCplbnYgIT0gJ1wwJykKLSAgICAgICpwdHIrKyA9ICplbnYrKzsKLSAgICBpZiAocHRyWy0xXSAhPSAnXFwnICYmIHB0clstMV0gIT0gJy8nKQotICAgICAgKnB0cisrID0gJ1xcJzsJCS8qIGFwcGVuZCBiYWNrc2xhc2ggaWYgbm90IGluIGVudiB2YXJpYWJsZSAqLwotICAgIC8qIEFwcGVuZCBhIHN1aXRhYmxlIGZpbGUgbmFtZSAqLwotICAgIG5leHRfZmlsZV9udW0rKzsJCS8qIGFkdmFuY2UgY291bnRlciAqLwotICAgIHNwcmludGYocHRyLCAiSlBHJTAzZC5UTVAiLCBuZXh0X2ZpbGVfbnVtKTsKLSAgICAvKiBQcm9iZSB0byBzZWUgaWYgZmlsZSBuYW1lIGlzIGFscmVhZHkgaW4gdXNlICovCi0gICAgaWYgKCh0ZmlsZSA9IGZvcGVuKGZuYW1lLCBSRUFEX0JJTkFSWSkpID09IE5VTEwpCi0gICAgICBicmVhazsKLSAgICBmY2xvc2UodGZpbGUpOwkJLyogb29wcywgaXQncyB0aGVyZTsgY2xvc2UgdGZpbGUgJiB0cnkgYWdhaW4gKi8KLSAgfQotfQotCi0KLS8qCi0gKiBOZWFyLW1lbW9yeSBhbGxvY2F0aW9uIGFuZCBmcmVlaW5nIGFyZSBjb250cm9sbGVkIGJ5IHRoZSByZWd1bGFyIGxpYnJhcnkKLSAqIHJvdXRpbmVzIG1hbGxvYygpIGFuZCBmcmVlKCkuCi0gKi8KLQotR0xPQkFMKHZvaWQgKikKLWpwZWdfZ2V0X3NtYWxsIChqX2NvbW1vbl9wdHIgY2luZm8sIHNpemVfdCBzaXplb2ZvYmplY3QpCi17Ci0gIHJldHVybiAodm9pZCAqKSBtYWxsb2Moc2l6ZW9mb2JqZWN0KTsKLX0KLQotR0xPQkFMKHZvaWQpCi1qcGVnX2ZyZWVfc21hbGwgKGpfY29tbW9uX3B0ciBjaW5mbywgdm9pZCAqIG9iamVjdCwgc2l6ZV90IHNpemVvZm9iamVjdCkKLXsKLSAgZnJlZShvYmplY3QpOwotfQotCi0KLS8qCi0gKiAiTGFyZ2UiIG9iamVjdHMgYXJlIGFsbG9jYXRlZCBpbiBmYXIgbWVtb3J5LCBpZiBwb3NzaWJsZQotICovCi0KLUdMT0JBTCh2b2lkIEZBUiAqKQotanBlZ19nZXRfbGFyZ2UgKGpfY29tbW9uX3B0ciBjaW5mbywgc2l6ZV90IHNpemVvZm9iamVjdCkKLXsKLSAgcmV0dXJuICh2b2lkIEZBUiAqKSBmYXJfbWFsbG9jKHNpemVvZm9iamVjdCk7Ci19Ci0KLUdMT0JBTCh2b2lkKQotanBlZ19mcmVlX2xhcmdlIChqX2NvbW1vbl9wdHIgY2luZm8sIHZvaWQgRkFSICogb2JqZWN0LCBzaXplX3Qgc2l6ZW9mb2JqZWN0KQotewotICBmYXJfZnJlZShvYmplY3QpOwotfQotCi0KLS8qCi0gKiBUaGlzIHJvdXRpbmUgY29tcHV0ZXMgdGhlIHRvdGFsIG1lbW9yeSBzcGFjZSBhdmFpbGFibGUgZm9yIGFsbG9jYXRpb24uCi0gKiBJdCdzIGltcG9zc2libGUgdG8gZG8gdGhpcyBpbiBhIHBvcnRhYmxlIHdheTsgb3VyIGN1cnJlbnQgc29sdXRpb24gaXMKLSAqIHRvIG1ha2UgdGhlIHVzZXIgdGVsbCB1cyAod2l0aCBhIGRlZmF1bHQgdmFsdWUgc2V0IGF0IGNvbXBpbGUgdGltZSkuCi0gKiBJZiB5b3UgY2FuIGFjdHVhbGx5IGdldCB0aGUgYXZhaWxhYmxlIHNwYWNlLCBpdCdzIGEgZ29vZCBpZGVhIHRvIHN1YnRyYWN0Ci0gKiBhIHNsb3AgZmFjdG9yIG9mIDUlIG9yIHNvLgotICovCi0KLSNpZm5kZWYgREVGQVVMVF9NQVhfTUVNCQkvKiBzbyBjYW4gb3ZlcnJpZGUgZnJvbSBtYWtlZmlsZSAqLwotI2RlZmluZSBERUZBVUxUX01BWF9NRU0JCTMwMDAwMEwgLyogZm9yIHRvdGFsIHVzYWdlIGFib3V0IDQ1MEsgKi8KLSNlbmRpZgotCi1HTE9CQUwobG9uZykKLWpwZWdfbWVtX2F2YWlsYWJsZSAoal9jb21tb25fcHRyIGNpbmZvLCBsb25nIG1pbl9ieXRlc19uZWVkZWQsCi0JCSAgICBsb25nIG1heF9ieXRlc19uZWVkZWQsIGxvbmcgYWxyZWFkeV9hbGxvY2F0ZWQpCi17Ci0gIHJldHVybiBjaW5mby0+bWVtLT5tYXhfbWVtb3J5X3RvX3VzZSAtIGFscmVhZHlfYWxsb2NhdGVkOwotfQotCi0KLS8qCi0gKiBCYWNraW5nIHN0b3JlICh0ZW1wb3JhcnkgZmlsZSkgbWFuYWdlbWVudC4KLSAqIEJhY2tpbmcgc3RvcmUgb2JqZWN0cyBhcmUgb25seSB1c2VkIHdoZW4gdGhlIHZhbHVlIHJldHVybmVkIGJ5Ci0gKiBqcGVnX21lbV9hdmFpbGFibGUgaXMgbGVzcyB0aGFuIHRoZSB0b3RhbCBzcGFjZSBuZWVkZWQuICBZb3UgY2FuIGRpc3BlbnNlCi0gKiB3aXRoIHRoZXNlIHJvdXRpbmVzIGlmIHlvdSBoYXZlIHBsZW50eSBvZiB2aXJ0dWFsIG1lbW9yeTsgc2VlIGptZW1ub2JzLmMuCi0gKi8KLQotLyoKLSAqIEZvciBNUy1ET1Mgd2Ugc3VwcG9ydCB0aHJlZSB0eXBlcyBvZiBiYWNraW5nIHN0b3JhZ2U6Ci0gKiAgIDEuIENvbnZlbnRpb25hbCBET1MgZmlsZXMuICBXZSBhY2Nlc3MgdGhlc2UgYnkgZGlyZWN0IERPUyBjYWxscyByYXRoZXIKLSAqICAgICAgdGhhbiB2aWEgdGhlIHN0ZGlvIHBhY2thZ2UuICBUaGlzIHByb3ZpZGVzIGEgYml0IGJldHRlciBwZXJmb3JtYW5jZSwKLSAqICAgICAgYnV0IHRoZSByZWFsIHJlYXNvbiBpcyB0aGF0IHRoZSBidWZmZXJzIHRvIGJlIHJlYWQgb3Igd3JpdHRlbiBhcmUgRkFSLgotICogICAgICBUaGUgc3RkaW8gbGlicmFyeSBmb3Igc21hbGwtZGF0YSBtZW1vcnkgbW9kZWxzIGNhbid0IGNvcGUgd2l0aCB0aGF0LgotICogICAyLiBFeHRlbmRlZCBtZW1vcnksIGFjY2Vzc2VkIHBlciB0aGUgWE1TIFYyLjAgc3BlY2lmaWNhdGlvbi4KLSAqICAgMy4gRXhwYW5kZWQgbWVtb3J5LCBhY2Nlc3NlZCBwZXIgdGhlIExJTS9FTVMgNC4wIHNwZWNpZmljYXRpb24uCi0gKiBZb3UnbGwgbmVlZCBjb3BpZXMgb2YgdGhvc2Ugc3BlY3MgdG8gbWFrZSBzZW5zZSBvZiB0aGUgcmVsYXRlZCBjb2RlLgotICogVGhlIHNwZWNzIGFyZSBhdmFpbGFibGUgYnkgSW50ZXJuZXQgRlRQIGZyb20gdGhlIFNJTVRFTCBhcmNoaXZlcyAKLSAqIChvYWsub2FrbGFuZC5lZHUgYW5kIGl0cyB2YXJpb3VzIG1pcnJvciBzaXRlcykuICBTZWUgZmlsZXMKLSAqIHB1Yi9tc2Rvcy9taWNyb3NvZnQveG1zMjAuYXJjIGFuZCBwdWIvbXNkb3MvaW5mby9saW1lbXM0MS56aXAuCi0gKi8KLQotCi0vKgotICogQWNjZXNzIG1ldGhvZHMgZm9yIGEgRE9TIGZpbGUuCi0gKi8KLQotCi1NRVRIT0RERUYodm9pZCkKLXJlYWRfZmlsZV9zdG9yZSAoal9jb21tb25fcHRyIGNpbmZvLCBiYWNraW5nX3N0b3JlX3B0ciBpbmZvLAotCQkgdm9pZCBGQVIgKiBidWZmZXJfYWRkcmVzcywKLQkJIGxvbmcgZmlsZV9vZmZzZXQsIGxvbmcgYnl0ZV9jb3VudCkKLXsKLSAgaWYgKGpkb3Nfc2VlayhpbmZvLT5oYW5kbGUuZmlsZV9oYW5kbGUsIGZpbGVfb2Zmc2V0KSkKLSAgICBFUlJFWElUKGNpbmZvLCBKRVJSX1RGSUxFX1NFRUspOwotICAvKiBTaW5jZSBNQVhfQUxMT0NfQ0hVTksgaXMgbGVzcyB0aGFuIDY0SywgYnl0ZV9jb3VudCB3aWxsIGJlIHRvby4gKi8KLSAgaWYgKGJ5dGVfY291bnQgPiA2NTUzNUwpCS8qIHNhZmV0eSBjaGVjayAqLwotICAgIEVSUkVYSVQoY2luZm8sIEpFUlJfQkFEX0FMTE9DX0NIVU5LKTsKLSAgaWYgKGpkb3NfcmVhZChpbmZvLT5oYW5kbGUuZmlsZV9oYW5kbGUsIGJ1ZmZlcl9hZGRyZXNzLAotCQkodW5zaWduZWQgc2hvcnQpIGJ5dGVfY291bnQpKQotICAgIEVSUkVYSVQoY2luZm8sIEpFUlJfVEZJTEVfUkVBRCk7Ci19Ci0KLQotTUVUSE9EREVGKHZvaWQpCi13cml0ZV9maWxlX3N0b3JlIChqX2NvbW1vbl9wdHIgY2luZm8sIGJhY2tpbmdfc3RvcmVfcHRyIGluZm8sCi0JCSAgdm9pZCBGQVIgKiBidWZmZXJfYWRkcmVzcywKLQkJICBsb25nIGZpbGVfb2Zmc2V0LCBsb25nIGJ5dGVfY291bnQpCi17Ci0gIGlmIChqZG9zX3NlZWsoaW5mby0+aGFuZGxlLmZpbGVfaGFuZGxlLCBmaWxlX29mZnNldCkpCi0gICAgRVJSRVhJVChjaW5mbywgSkVSUl9URklMRV9TRUVLKTsKLSAgLyogU2luY2UgTUFYX0FMTE9DX0NIVU5LIGlzIGxlc3MgdGhhbiA2NEssIGJ5dGVfY291bnQgd2lsbCBiZSB0b28uICovCi0gIGlmIChieXRlX2NvdW50ID4gNjU1MzVMKQkvKiBzYWZldHkgY2hlY2sgKi8KLSAgICBFUlJFWElUKGNpbmZvLCBKRVJSX0JBRF9BTExPQ19DSFVOSyk7Ci0gIGlmIChqZG9zX3dyaXRlKGluZm8tPmhhbmRsZS5maWxlX2hhbmRsZSwgYnVmZmVyX2FkZHJlc3MsCi0JCSAodW5zaWduZWQgc2hvcnQpIGJ5dGVfY291bnQpKQotICAgIEVSUkVYSVQoY2luZm8sIEpFUlJfVEZJTEVfV1JJVEUpOwotfQotCi0KLU1FVEhPRERFRih2b2lkKQotY2xvc2VfZmlsZV9zdG9yZSAoal9jb21tb25fcHRyIGNpbmZvLCBiYWNraW5nX3N0b3JlX3B0ciBpbmZvKQotewotICBqZG9zX2Nsb3NlKGluZm8tPmhhbmRsZS5maWxlX2hhbmRsZSk7CS8qIGNsb3NlIHRoZSBmaWxlICovCi0gIHJlbW92ZShpbmZvLT50ZW1wX25hbWUpOwkvKiBkZWxldGUgdGhlIGZpbGUgKi8KLS8qIElmIHlvdXIgc3lzdGVtIGRvZXNuJ3QgaGF2ZSByZW1vdmUoKSwgdHJ5IHVubGluaygpIGluc3RlYWQuCi0gKiByZW1vdmUoKSBpcyB0aGUgQU5TSS1zdGFuZGFyZCBuYW1lIGZvciB0aGlzIGZ1bmN0aW9uLCBidXQKLSAqIHVubGluaygpIHdhcyBtb3JlIGNvbW1vbiBpbiBwcmUtQU5TSSBzeXN0ZW1zLgotICovCi0gIFRSQUNFTVNTKGNpbmZvLCAxLCBKVFJDX1RGSUxFX0NMT1NFLCBpbmZvLT50ZW1wX25hbWUpOwotfQotCi0KLUxPQ0FMKGJvb2xlYW4pCi1vcGVuX2ZpbGVfc3RvcmUgKGpfY29tbW9uX3B0ciBjaW5mbywgYmFja2luZ19zdG9yZV9wdHIgaW5mbywKLQkJIGxvbmcgdG90YWxfYnl0ZXNfbmVlZGVkKQotewotICBzaG9ydCBoYW5kbGU7Ci0KLSAgc2VsZWN0X2ZpbGVfbmFtZShpbmZvLT50ZW1wX25hbWUpOwotICBpZiAoamRvc19vcGVuKChzaG9ydCBmYXIgKikgJiBoYW5kbGUsIChjaGFyIGZhciAqKSBpbmZvLT50ZW1wX25hbWUpKSB7Ci0gICAgLyogbWlnaHQgYXMgd2VsbCBleGl0IHNpbmNlIGpwZWdfb3Blbl9iYWNraW5nX3N0b3JlIHdpbGwgZmFpbCBhbnl3YXkgKi8KLSAgICBFUlJFWElUUyhjaW5mbywgSkVSUl9URklMRV9DUkVBVEUsIGluZm8tPnRlbXBfbmFtZSk7Ci0gICAgcmV0dXJuIEZBTFNFOwotICB9Ci0gIGluZm8tPmhhbmRsZS5maWxlX2hhbmRsZSA9IGhhbmRsZTsKLSAgaW5mby0+cmVhZF9iYWNraW5nX3N0b3JlID0gcmVhZF9maWxlX3N0b3JlOwotICBpbmZvLT53cml0ZV9iYWNraW5nX3N0b3JlID0gd3JpdGVfZmlsZV9zdG9yZTsKLSAgaW5mby0+Y2xvc2VfYmFja2luZ19zdG9yZSA9IGNsb3NlX2ZpbGVfc3RvcmU7Ci0gIFRSQUNFTVNTKGNpbmZvLCAxLCBKVFJDX1RGSUxFX09QRU4sIGluZm8tPnRlbXBfbmFtZSk7Ci0gIHJldHVybiBUUlVFOwkJCS8qIHN1Y2NlZWRlZCAqLwotfQotCi0KLS8qCi0gKiBBY2Nlc3MgbWV0aG9kcyBmb3IgZXh0ZW5kZWQgbWVtb3J5LgotICovCi0KLSNpZiBYTVNfU1VQUE9SVEVECi0KLXN0YXRpYyBYTVNEUklWRVIgeG1zX2RyaXZlcjsJLyogc2F2ZWQgYWRkcmVzcyBvZiBYTVMgZHJpdmVyICovCi0KLXR5cGVkZWYgdW5pb24gewkJCS8qIGVpdGhlciBsb25nIG9mZnNldCBvciByZWFsLW1vZGUgcG9pbnRlciAqLwotCWxvbmcgb2Zmc2V0OwotCXZvaWQgZmFyICogcHRyOwotICAgICAgfSBYTVNQVFI7Ci0KLXR5cGVkZWYgc3RydWN0IHsJCS8qIFhNUyBtb3ZlIHNwZWNpZmljYXRpb24gc3RydWN0dXJlICovCi0JbG9uZyBsZW5ndGg7Ci0JWE1TSCBzcmNfaGFuZGxlOwotCVhNU1BUUiBzcmM7Ci0JWE1TSCBkc3RfaGFuZGxlOwotCVhNU1BUUiBkc3Q7Ci0gICAgICB9IFhNU3NwZWM7Ci0KLSNkZWZpbmUgT0REKFgpCSgoKFgpICYgMUwpICE9IDApCi0KLQotTUVUSE9EREVGKHZvaWQpCi1yZWFkX3htc19zdG9yZSAoal9jb21tb25fcHRyIGNpbmZvLCBiYWNraW5nX3N0b3JlX3B0ciBpbmZvLAotCQl2b2lkIEZBUiAqIGJ1ZmZlcl9hZGRyZXNzLAotCQlsb25nIGZpbGVfb2Zmc2V0LCBsb25nIGJ5dGVfY291bnQpCi17Ci0gIFhNU2NvbnRleHQgY3R4OwotICBYTVNzcGVjIHNwZWM7Ci0gIGNoYXIgZW5kYnVmZmVyWzJdOwotCi0gIC8qIFRoZSBYTVMgZHJpdmVyIGNhbid0IGNvcGUgd2l0aCBhbiBvZGQgbGVuZ3RoLCBzbyBoYW5kbGUgdGhlIGxhc3QgYnl0ZQotICAgKiBzcGVjaWFsbHkgaWYgYnl0ZV9jb3VudCBpcyBvZGQuICBXZSBkb24ndCBleHBlY3QgdGhpcyB0byBiZSBjb21tb24uCi0gICAqLwotCi0gIHNwZWMubGVuZ3RoID0gYnl0ZV9jb3VudCAmICh+IDFMKTsKLSAgc3BlYy5zcmNfaGFuZGxlID0gaW5mby0+aGFuZGxlLnhtc19oYW5kbGU7Ci0gIHNwZWMuc3JjLm9mZnNldCA9IGZpbGVfb2Zmc2V0OwotICBzcGVjLmRzdF9oYW5kbGUgPSAwOwotICBzcGVjLmRzdC5wdHIgPSBidWZmZXJfYWRkcmVzczsKLSAgCi0gIGN0eC5kc19zaSA9ICh2b2lkIGZhciAqKSAmIHNwZWM7Ci0gIGN0eC5heCA9IDB4MGIwMDsJCS8qIEVNQiBtb3ZlICovCi0gIGp4bXNfY2FsbGRyaXZlcih4bXNfZHJpdmVyLCAoWE1TY29udGV4dCBmYXIgKikgJiBjdHgpOwotICBpZiAoY3R4LmF4ICE9IDEpCi0gICAgRVJSRVhJVChjaW5mbywgSkVSUl9YTVNfUkVBRCk7Ci0KLSAgaWYgKE9ERChieXRlX2NvdW50KSkgewotICAgIHJlYWRfeG1zX3N0b3JlKGNpbmZvLCBpbmZvLCAodm9pZCBGQVIgKikgZW5kYnVmZmVyLAotCQkgICBmaWxlX29mZnNldCArIGJ5dGVfY291bnQgLSAxTCwgMkwpOwotICAgICgoY2hhciBGQVIgKikgYnVmZmVyX2FkZHJlc3MpW2J5dGVfY291bnQgLSAxTF0gPSBlbmRidWZmZXJbMF07Ci0gIH0KLX0KLQotCi1NRVRIT0RERUYodm9pZCkKLXdyaXRlX3htc19zdG9yZSAoal9jb21tb25fcHRyIGNpbmZvLCBiYWNraW5nX3N0b3JlX3B0ciBpbmZvLAotCQkgdm9pZCBGQVIgKiBidWZmZXJfYWRkcmVzcywKLQkJIGxvbmcgZmlsZV9vZmZzZXQsIGxvbmcgYnl0ZV9jb3VudCkKLXsKLSAgWE1TY29udGV4dCBjdHg7Ci0gIFhNU3NwZWMgc3BlYzsKLSAgY2hhciBlbmRidWZmZXJbMl07Ci0KLSAgLyogVGhlIFhNUyBkcml2ZXIgY2FuJ3QgY29wZSB3aXRoIGFuIG9kZCBsZW5ndGgsIHNvIGhhbmRsZSB0aGUgbGFzdCBieXRlCi0gICAqIHNwZWNpYWxseSBpZiBieXRlX2NvdW50IGlzIG9kZC4gIFdlIGRvbid0IGV4cGVjdCB0aGlzIHRvIGJlIGNvbW1vbi4KLSAgICovCi0KLSAgc3BlYy5sZW5ndGggPSBieXRlX2NvdW50ICYgKH4gMUwpOwotICBzcGVjLnNyY19oYW5kbGUgPSAwOwotICBzcGVjLnNyYy5wdHIgPSBidWZmZXJfYWRkcmVzczsKLSAgc3BlYy5kc3RfaGFuZGxlID0gaW5mby0+aGFuZGxlLnhtc19oYW5kbGU7Ci0gIHNwZWMuZHN0Lm9mZnNldCA9IGZpbGVfb2Zmc2V0OwotCi0gIGN0eC5kc19zaSA9ICh2b2lkIGZhciAqKSAmIHNwZWM7Ci0gIGN0eC5heCA9IDB4MGIwMDsJCS8qIEVNQiBtb3ZlICovCi0gIGp4bXNfY2FsbGRyaXZlcih4bXNfZHJpdmVyLCAoWE1TY29udGV4dCBmYXIgKikgJiBjdHgpOwotICBpZiAoY3R4LmF4ICE9IDEpCi0gICAgRVJSRVhJVChjaW5mbywgSkVSUl9YTVNfV1JJVEUpOwotCi0gIGlmIChPREQoYnl0ZV9jb3VudCkpIHsKLSAgICByZWFkX3htc19zdG9yZShjaW5mbywgaW5mbywgKHZvaWQgRkFSICopIGVuZGJ1ZmZlciwKLQkJICAgZmlsZV9vZmZzZXQgKyBieXRlX2NvdW50IC0gMUwsIDJMKTsKLSAgICBlbmRidWZmZXJbMF0gPSAoKGNoYXIgRkFSICopIGJ1ZmZlcl9hZGRyZXNzKVtieXRlX2NvdW50IC0gMUxdOwotICAgIHdyaXRlX3htc19zdG9yZShjaW5mbywgaW5mbywgKHZvaWQgRkFSICopIGVuZGJ1ZmZlciwKLQkJICAgIGZpbGVfb2Zmc2V0ICsgYnl0ZV9jb3VudCAtIDFMLCAyTCk7Ci0gIH0KLX0KLQotCi1NRVRIT0RERUYodm9pZCkKLWNsb3NlX3htc19zdG9yZSAoal9jb21tb25fcHRyIGNpbmZvLCBiYWNraW5nX3N0b3JlX3B0ciBpbmZvKQotewotICBYTVNjb250ZXh0IGN0eDsKLQotICBjdHguZHggPSBpbmZvLT5oYW5kbGUueG1zX2hhbmRsZTsKLSAgY3R4LmF4ID0gMHgwYTAwOwotICBqeG1zX2NhbGxkcml2ZXIoeG1zX2RyaXZlciwgKFhNU2NvbnRleHQgZmFyICopICYgY3R4KTsKLSAgVFJBQ0VNUzEoY2luZm8sIDEsIEpUUkNfWE1TX0NMT1NFLCBpbmZvLT5oYW5kbGUueG1zX2hhbmRsZSk7Ci0gIC8qIHdlIGlnbm9yZSBhbnkgZXJyb3IgcmV0dXJuIGZyb20gdGhlIGRyaXZlciAqLwotfQotCi0KLUxPQ0FMKGJvb2xlYW4pCi1vcGVuX3htc19zdG9yZSAoal9jb21tb25fcHRyIGNpbmZvLCBiYWNraW5nX3N0b3JlX3B0ciBpbmZvLAotCQlsb25nIHRvdGFsX2J5dGVzX25lZWRlZCkKLXsKLSAgWE1TY29udGV4dCBjdHg7Ci0KLSAgLyogR2V0IGFkZHJlc3Mgb2YgWE1TIGRyaXZlciAqLwotICBqeG1zX2dldGRyaXZlcigoWE1TRFJJVkVSIGZhciAqKSAmIHhtc19kcml2ZXIpOwotICBpZiAoeG1zX2RyaXZlciA9PSBOVUxMKQotICAgIHJldHVybiBGQUxTRTsJCS8qIG5vIGRyaXZlciB0byBiZSBoYWQgKi8KLQotICAvKiBHZXQgdmVyc2lvbiBudW1iZXIsIG11c3QgYmUgPj0gMi4wMCAqLwotICBjdHguYXggPSAweDAwMDA7Ci0gIGp4bXNfY2FsbGRyaXZlcih4bXNfZHJpdmVyLCAoWE1TY29udGV4dCBmYXIgKikgJiBjdHgpOwotICBpZiAoY3R4LmF4IDwgKHVuc2lnbmVkIHNob3J0KSAweDAyMDApCi0gICAgcmV0dXJuIEZBTFNFOwotCi0gIC8qIFRyeSB0byBnZXQgc3BhY2UgKGV4cHJlc3NlZCBpbiBraWxvYnl0ZXMpICovCi0gIGN0eC5keCA9ICh1bnNpZ25lZCBzaG9ydCkgKCh0b3RhbF9ieXRlc19uZWVkZWQgKyAxMDIzTCkgPj4gMTApOwotICBjdHguYXggPSAweDA5MDA7Ci0gIGp4bXNfY2FsbGRyaXZlcih4bXNfZHJpdmVyLCAoWE1TY29udGV4dCBmYXIgKikgJiBjdHgpOwotICBpZiAoY3R4LmF4ICE9IDEpCi0gICAgcmV0dXJuIEZBTFNFOwotCi0gIC8qIFN1Y2NlZWRlZCwgc2F2ZSB0aGUgaGFuZGxlIGFuZCBhd2F5IHdlIGdvICovCi0gIGluZm8tPmhhbmRsZS54bXNfaGFuZGxlID0gY3R4LmR4OwotICBpbmZvLT5yZWFkX2JhY2tpbmdfc3RvcmUgPSByZWFkX3htc19zdG9yZTsKLSAgaW5mby0+d3JpdGVfYmFja2luZ19zdG9yZSA9IHdyaXRlX3htc19zdG9yZTsKLSAgaW5mby0+Y2xvc2VfYmFja2luZ19zdG9yZSA9IGNsb3NlX3htc19zdG9yZTsKLSAgVFJBQ0VNUzEoY2luZm8sIDEsIEpUUkNfWE1TX09QRU4sIGN0eC5keCk7Ci0gIHJldHVybiBUUlVFOwkJCS8qIHN1Y2NlZWRlZCAqLwotfQotCi0jZW5kaWYgLyogWE1TX1NVUFBPUlRFRCAqLwotCi0KLS8qCi0gKiBBY2Nlc3MgbWV0aG9kcyBmb3IgZXhwYW5kZWQgbWVtb3J5LgotICovCi0KLSNpZiBFTVNfU1VQUE9SVEVECi0KLS8qIFRoZSBFTVMgbW92ZSBzcGVjaWZpY2F0aW9uIHN0cnVjdHVyZSByZXF1aXJlcyB3b3JkIGFuZCBsb25nIGZpZWxkcyBhbGlnbmVkCi0gKiBhdCBvZGQgYnl0ZSBib3VuZGFyaWVzLiAgU29tZSBjb21waWxlcnMgd2lsbCBhbGlnbiBzdHJ1Y3QgZmllbGRzIGF0IGV2ZW4KLSAqIGJ5dGUgYm91bmRhcmllcy4gIFdoaWxlIGl0J3MgdXN1YWxseSBwb3NzaWJsZSB0byBmb3JjZSBieXRlIGFsaWdubWVudCwKLSAqIHRoYXQgY2F1c2VzIGFuIG92ZXJhbGwgcGVyZm9ybWFuY2UgcGVuYWx0eSBhbmQgbWF5IHBvc2UgcHJvYmxlbXMgaW4gbWVyZ2luZwotICogSlBFRyBpbnRvIGEgbGFyZ2VyIGFwcGxpY2F0aW9uLiAgSW5zdGVhZCB3ZSBhY2NlcHQgc29tZSByYXRoZXIgZGlydHkgY29kZQotICogaGVyZS4gIE5vdGUgdGhpcyBjb2RlIHdvdWxkIGZhaWwgaWYgdGhlIGhhcmR3YXJlIGRpZCBub3QgYWxsb3cgb2RkLWJ5dGUKLSAqIHdvcmQgJiBsb25nIGFjY2Vzc2VzLCBidXQgYWxsIDgweDg2IENQVXMgZG8uCi0gKi8KLQotdHlwZWRlZiB2b2lkIGZhciAqIEVNU1BUUjsKLQotdHlwZWRlZiB1bmlvbiB7CQkJLyogRU1TIG1vdmUgc3BlY2lmaWNhdGlvbiBzdHJ1Y3R1cmUgKi8KLQlsb25nIGxlbmd0aDsJCS8qIEl0J3MgZWFzeSB0byBhY2Nlc3MgZmlyc3QgNCBieXRlcyAqLwotCWNoYXIgYnl0ZXNbMThdOwkJLyogTWlzYWxpZ25lZCBmaWVsZHMgaW4gaGVyZSEgKi8KLSAgICAgIH0gRU1Tc3BlYzsKLQotLyogTWFjcm9zIGZvciBhY2Nlc3NpbmcgbWlzYWxpZ25lZCBmaWVsZHMgKi8KLSNkZWZpbmUgRklFTERfQVQoc3BlYyxvZmZzZXQsdHlwZSkgICgqKCh0eXBlICopICYoc3BlYy5ieXRlc1tvZmZzZXRdKSkpCi0jZGVmaW5lIFNSQ19UWVBFKHNwZWMpCQlGSUVMRF9BVChzcGVjLDQsY2hhcikKLSNkZWZpbmUgU1JDX0hBTkRMRShzcGVjKQlGSUVMRF9BVChzcGVjLDUsRU1TSCkKLSNkZWZpbmUgU1JDX09GRlNFVChzcGVjKQlGSUVMRF9BVChzcGVjLDcsdW5zaWduZWQgc2hvcnQpCi0jZGVmaW5lIFNSQ19QQUdFKHNwZWMpCQlGSUVMRF9BVChzcGVjLDksdW5zaWduZWQgc2hvcnQpCi0jZGVmaW5lIFNSQ19QVFIoc3BlYykJCUZJRUxEX0FUKHNwZWMsNyxFTVNQVFIpCi0jZGVmaW5lIERTVF9UWVBFKHNwZWMpCQlGSUVMRF9BVChzcGVjLDExLGNoYXIpCi0jZGVmaW5lIERTVF9IQU5ETEUoc3BlYykJRklFTERfQVQoc3BlYywxMixFTVNIKQotI2RlZmluZSBEU1RfT0ZGU0VUKHNwZWMpCUZJRUxEX0FUKHNwZWMsMTQsdW5zaWduZWQgc2hvcnQpCi0jZGVmaW5lIERTVF9QQUdFKHNwZWMpCQlGSUVMRF9BVChzcGVjLDE2LHVuc2lnbmVkIHNob3J0KQotI2RlZmluZSBEU1RfUFRSKHNwZWMpCQlGSUVMRF9BVChzcGVjLDE0LEVNU1BUUikKLQotI2RlZmluZSBFTVNQQUdFU0laRQkxNjM4NEwJLyogZ29zcGVsLCBzZWUgdGhlIEVNUyBzcGVjcyAqLwotCi0jZGVmaW5lIEhJQllURShXKSAgKCgoVykgPj4gOCkgJiAweEZGKQotI2RlZmluZSBMT0JZVEUoVykgICgoVykgJiAweEZGKQotCi0KLU1FVEhPRERFRih2b2lkKQotcmVhZF9lbXNfc3RvcmUgKGpfY29tbW9uX3B0ciBjaW5mbywgYmFja2luZ19zdG9yZV9wdHIgaW5mbywKLQkJdm9pZCBGQVIgKiBidWZmZXJfYWRkcmVzcywKLQkJbG9uZyBmaWxlX29mZnNldCwgbG9uZyBieXRlX2NvdW50KQotewotICBFTVNjb250ZXh0IGN0eDsKLSAgRU1Tc3BlYyBzcGVjOwotCi0gIHNwZWMubGVuZ3RoID0gYnl0ZV9jb3VudDsKLSAgU1JDX1RZUEUoc3BlYykgPSAxOwotICBTUkNfSEFORExFKHNwZWMpID0gaW5mby0+aGFuZGxlLmVtc19oYW5kbGU7Ci0gIFNSQ19QQUdFKHNwZWMpICAgPSAodW5zaWduZWQgc2hvcnQpIChmaWxlX29mZnNldCAvIEVNU1BBR0VTSVpFKTsKLSAgU1JDX09GRlNFVChzcGVjKSA9ICh1bnNpZ25lZCBzaG9ydCkgKGZpbGVfb2Zmc2V0ICUgRU1TUEFHRVNJWkUpOwotICBEU1RfVFlQRShzcGVjKSA9IDA7Ci0gIERTVF9IQU5ETEUoc3BlYykgPSAwOwotICBEU1RfUFRSKHNwZWMpICAgID0gYnVmZmVyX2FkZHJlc3M7Ci0gIAotICBjdHguZHNfc2kgPSAodm9pZCBmYXIgKikgJiBzcGVjOwotICBjdHguYXggPSAweDU3MDA7CQkvKiBtb3ZlIG1lbW9yeSByZWdpb24gKi8KLSAgamVtc19jYWxsZHJpdmVyKChFTVNjb250ZXh0IGZhciAqKSAmIGN0eCk7Ci0gIGlmIChISUJZVEUoY3R4LmF4KSAhPSAwKQotICAgIEVSUkVYSVQoY2luZm8sIEpFUlJfRU1TX1JFQUQpOwotfQotCi0KLU1FVEhPRERFRih2b2lkKQotd3JpdGVfZW1zX3N0b3JlIChqX2NvbW1vbl9wdHIgY2luZm8sIGJhY2tpbmdfc3RvcmVfcHRyIGluZm8sCi0JCSB2b2lkIEZBUiAqIGJ1ZmZlcl9hZGRyZXNzLAotCQkgbG9uZyBmaWxlX29mZnNldCwgbG9uZyBieXRlX2NvdW50KQotewotICBFTVNjb250ZXh0IGN0eDsKLSAgRU1Tc3BlYyBzcGVjOwotCi0gIHNwZWMubGVuZ3RoID0gYnl0ZV9jb3VudDsKLSAgU1JDX1RZUEUoc3BlYykgPSAwOwotICBTUkNfSEFORExFKHNwZWMpID0gMDsKLSAgU1JDX1BUUihzcGVjKSAgICA9IGJ1ZmZlcl9hZGRyZXNzOwotICBEU1RfVFlQRShzcGVjKSA9IDE7Ci0gIERTVF9IQU5ETEUoc3BlYykgPSBpbmZvLT5oYW5kbGUuZW1zX2hhbmRsZTsKLSAgRFNUX1BBR0Uoc3BlYykgICA9ICh1bnNpZ25lZCBzaG9ydCkgKGZpbGVfb2Zmc2V0IC8gRU1TUEFHRVNJWkUpOwotICBEU1RfT0ZGU0VUKHNwZWMpID0gKHVuc2lnbmVkIHNob3J0KSAoZmlsZV9vZmZzZXQgJSBFTVNQQUdFU0laRSk7Ci0gIAotICBjdHguZHNfc2kgPSAodm9pZCBmYXIgKikgJiBzcGVjOwotICBjdHguYXggPSAweDU3MDA7CQkvKiBtb3ZlIG1lbW9yeSByZWdpb24gKi8KLSAgamVtc19jYWxsZHJpdmVyKChFTVNjb250ZXh0IGZhciAqKSAmIGN0eCk7Ci0gIGlmIChISUJZVEUoY3R4LmF4KSAhPSAwKQotICAgIEVSUkVYSVQoY2luZm8sIEpFUlJfRU1TX1dSSVRFKTsKLX0KLQotCi1NRVRIT0RERUYodm9pZCkKLWNsb3NlX2Vtc19zdG9yZSAoal9jb21tb25fcHRyIGNpbmZvLCBiYWNraW5nX3N0b3JlX3B0ciBpbmZvKQotewotICBFTVNjb250ZXh0IGN0eDsKLQotICBjdHguYXggPSAweDQ1MDA7Ci0gIGN0eC5keCA9IGluZm8tPmhhbmRsZS5lbXNfaGFuZGxlOwotICBqZW1zX2NhbGxkcml2ZXIoKEVNU2NvbnRleHQgZmFyICopICYgY3R4KTsKLSAgVFJBQ0VNUzEoY2luZm8sIDEsIEpUUkNfRU1TX0NMT1NFLCBpbmZvLT5oYW5kbGUuZW1zX2hhbmRsZSk7Ci0gIC8qIHdlIGlnbm9yZSBhbnkgZXJyb3IgcmV0dXJuIGZyb20gdGhlIGRyaXZlciAqLwotfQotCi0KLUxPQ0FMKGJvb2xlYW4pCi1vcGVuX2Vtc19zdG9yZSAoal9jb21tb25fcHRyIGNpbmZvLCBiYWNraW5nX3N0b3JlX3B0ciBpbmZvLAotCQlsb25nIHRvdGFsX2J5dGVzX25lZWRlZCkKLXsKLSAgRU1TY29udGV4dCBjdHg7Ci0KLSAgLyogSXMgRU1TIGRyaXZlciB0aGVyZT8gKi8KLSAgaWYgKCEgamVtc19hdmFpbGFibGUoKSkKLSAgICByZXR1cm4gRkFMU0U7Ci0KLSAgLyogR2V0IHN0YXR1cywgbWFrZSBzdXJlIEVNUyBpcyBPSyAqLwotICBjdHguYXggPSAweDQwMDA7Ci0gIGplbXNfY2FsbGRyaXZlcigoRU1TY29udGV4dCBmYXIgKikgJiBjdHgpOwotICBpZiAoSElCWVRFKGN0eC5heCkgIT0gMCkKLSAgICByZXR1cm4gRkFMU0U7Ci0KLSAgLyogR2V0IHZlcnNpb24sIG11c3QgYmUgPj0gNC4wICovCi0gIGN0eC5heCA9IDB4NDYwMDsKLSAgamVtc19jYWxsZHJpdmVyKChFTVNjb250ZXh0IGZhciAqKSAmIGN0eCk7Ci0gIGlmIChISUJZVEUoY3R4LmF4KSAhPSAwIHx8IExPQllURShjdHguYXgpIDwgMHg0MCkKLSAgICByZXR1cm4gRkFMU0U7Ci0KLSAgLyogVHJ5IHRvIGFsbG9jYXRlIHJlcXVlc3RlZCBzcGFjZSAqLwotICBjdHguYXggPSAweDQzMDA7Ci0gIGN0eC5ieCA9ICh1bnNpZ25lZCBzaG9ydCkgKCh0b3RhbF9ieXRlc19uZWVkZWQgKyBFTVNQQUdFU0laRS0xTCkgLyBFTVNQQUdFU0laRSk7Ci0gIGplbXNfY2FsbGRyaXZlcigoRU1TY29udGV4dCBmYXIgKikgJiBjdHgpOwotICBpZiAoSElCWVRFKGN0eC5heCkgIT0gMCkKLSAgICByZXR1cm4gRkFMU0U7Ci0KLSAgLyogU3VjY2VlZGVkLCBzYXZlIHRoZSBoYW5kbGUgYW5kIGF3YXkgd2UgZ28gKi8KLSAgaW5mby0+aGFuZGxlLmVtc19oYW5kbGUgPSBjdHguZHg7Ci0gIGluZm8tPnJlYWRfYmFja2luZ19zdG9yZSA9IHJlYWRfZW1zX3N0b3JlOwotICBpbmZvLT53cml0ZV9iYWNraW5nX3N0b3JlID0gd3JpdGVfZW1zX3N0b3JlOwotICBpbmZvLT5jbG9zZV9iYWNraW5nX3N0b3JlID0gY2xvc2VfZW1zX3N0b3JlOwotICBUUkFDRU1TMShjaW5mbywgMSwgSlRSQ19FTVNfT1BFTiwgY3R4LmR4KTsKLSAgcmV0dXJuIFRSVUU7CQkJLyogc3VjY2VlZGVkICovCi19Ci0KLSNlbmRpZiAvKiBFTVNfU1VQUE9SVEVEICovCi0KLQotLyoKLSAqIEluaXRpYWwgb3BlbmluZyBvZiBhIGJhY2tpbmctc3RvcmUgb2JqZWN0LgotICovCi0KLUdMT0JBTCh2b2lkKQotanBlZ19vcGVuX2JhY2tpbmdfc3RvcmUgKGpfY29tbW9uX3B0ciBjaW5mbywgYmFja2luZ19zdG9yZV9wdHIgaW5mbywKLQkJCSBsb25nIHRvdGFsX2J5dGVzX25lZWRlZCkKLXsKLSAgLyogVHJ5IGV4dGVuZGVkIG1lbW9yeSwgdGhlbiBleHBhbmRlZCBtZW1vcnksIHRoZW4gcmVndWxhciBmaWxlLiAqLwotI2lmIFhNU19TVVBQT1JURUQKLSAgaWYgKG9wZW5feG1zX3N0b3JlKGNpbmZvLCBpbmZvLCB0b3RhbF9ieXRlc19uZWVkZWQpKQotICAgIHJldHVybjsKLSNlbmRpZgotI2lmIEVNU19TVVBQT1JURUQKLSAgaWYgKG9wZW5fZW1zX3N0b3JlKGNpbmZvLCBpbmZvLCB0b3RhbF9ieXRlc19uZWVkZWQpKQotICAgIHJldHVybjsKLSNlbmRpZgotICBpZiAob3Blbl9maWxlX3N0b3JlKGNpbmZvLCBpbmZvLCB0b3RhbF9ieXRlc19uZWVkZWQpKQotICAgIHJldHVybjsKLSAgRVJSRVhJVFMoY2luZm8sIEpFUlJfVEZJTEVfQ1JFQVRFLCAiIik7Ci19Ci0KLQotLyoKLSAqIFRoZXNlIHJvdXRpbmVzIHRha2UgY2FyZSBvZiBhbnkgc3lzdGVtLWRlcGVuZGVudCBpbml0aWFsaXphdGlvbiBhbmQKLSAqIGNsZWFudXAgcmVxdWlyZWQuCi0gKi8KLQotR0xPQkFMKGxvbmcpCi1qcGVnX21lbV9pbml0IChqX2NvbW1vbl9wdHIgY2luZm8pCi17Ci0gIG5leHRfZmlsZV9udW0gPSAwOwkJLyogaW5pdGlhbGl6ZSB0ZW1wIGZpbGUgbmFtZSBnZW5lcmF0b3IgKi8KLSAgcmV0dXJuIERFRkFVTFRfTUFYX01FTTsJLyogZGVmYXVsdCBmb3IgbWF4X21lbW9yeV90b191c2UgKi8KLX0KLQotR0xPQkFMKHZvaWQpCi1qcGVnX21lbV90ZXJtIChqX2NvbW1vbl9wdHIgY2luZm8pCi17Ci0gIC8qIE1pY3Jvc29mdCBDLCBhdCBsZWFzdCBpbiB2Ni4wMEEsIHdpbGwgbm90IHN1Y2Nlc3NmdWxseSByZWNsYWltIGZyZWVkCi0gICAqIGJsb2NrcyBvZiBzaXplID4gMzJLYnl0ZXMgdW5sZXNzIHdlIGdpdmUgaXQgYSBraWNrIGluIHRoZSByZWFyLCBsaWtlIHNvOgotICAgKi8KLSNpZmRlZiBORUVEX0ZIRUFQTUlOCi0gIF9maGVhcG1pbigpOwotI2VuZGlmCi19CmRpZmYgLS1naXQgYS9qbWVtZG9zYS5hc20gYi9qbWVtZG9zYS5hc20KZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGVjZDQzNzIuLjAwMDAwMDAKLS0tIGEvam1lbWRvc2EuYXNtCisrKyAvZGV2L251bGwKQEAgLTEsMzc5ICswLDAgQEAKLTsKLTsgam1lbWRvc2EuYXNtCi07Ci07IENvcHlyaWdodCAoQykgMTk5MiwgVGhvbWFzIEcuIExhbmUuCi07IFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBJbmRlcGVuZGVudCBKUEVHIEdyb3VwJ3Mgc29mdHdhcmUuCi07IEZvciBjb25kaXRpb25zIG9mIGRpc3RyaWJ1dGlvbiBhbmQgdXNlLCBzZWUgdGhlIGFjY29tcGFueWluZyBSRUFETUUgZmlsZS4KLTsKLTsgVGhpcyBmaWxlIGNvbnRhaW5zIGxvdy1sZXZlbCBpbnRlcmZhY2Ugcm91dGluZXMgdG8gc3VwcG9ydCB0aGUgTVMtRE9TCi07IGJhY2tpbmcgc3RvcmUgbWFuYWdlciAoam1lbWRvcy5jKS4gIFJvdXRpbmVzIGFyZSBwcm92aWRlZCB0byBhY2Nlc3MgZGlzawotOyBmaWxlcyB0aHJvdWdoIGRpcmVjdCBET1MgY2FsbHMsIGFuZCB0byBhY2Nlc3MgWE1TIGFuZCBFTVMgZHJpdmVycy4KLTsKLTsgVGhpcyBmaWxlIHNob3VsZCBhc3NlbWJsZSB3aXRoIE1pY3Jvc29mdCdzIE1BU00gb3IgYW55IGNvbXBhdGlibGUKLTsgYXNzZW1ibGVyIChpbmNsdWRpbmcgQm9ybGFuZCdzIFR1cmJvIEFzc2VtYmxlcikuICBJZiB5b3UgaGF2ZW4ndCBnb3QKLTsgYSBjb21wYXRpYmxlIGFzc2VtYmxlciwgYmV0dGVyIGZhbGwgYmFjayB0byBqbWVtYW5zaS5jIG9yIGptZW1uYW1lLmMuCi07Ci07IFRvIG1pbmltaXplIGRlcGVuZGVuY2Ugb24gdGhlIEMgY29tcGlsZXIncyByZWdpc3RlciB1c2FnZSBjb252ZW50aW9ucywKLTsgd2Ugc2F2ZSBhbmQgcmVzdG9yZSBhbGwgODA4NiByZWdpc3RlcnMsIGV2ZW4gdGhvdWdoIG1vc3QgY29tcGlsZXJzIG9ubHkKLTsgcmVxdWlyZSBTSSxESSxEUyB0byBiZSBwcmVzZXJ2ZWQuICBBbHNvLCB3ZSB1c2Ugb25seSAxNi1iaXQtd2lkZSByZXR1cm4KLTsgdmFsdWVzLCB3aGljaCBldmVyeWJvZHkgcmV0dXJucyBpbiBBWC4KLTsKLTsgQmFzZWQgb24gY29kZSBjb250cmlidXRlZCBieSBHZScgV2VpamVycy4KLTsKLQotSk1FTURPU0FfVFhUCXNlZ21lbnQgYnl0ZSBwdWJsaWMgJ0NPREUnCi0KLQkJYXNzdW1lCWNzOkpNRU1ET1NBX1RYVAotCi0JCXB1YmxpYwlfamRvc19vcGVuCi0JCXB1YmxpYwlfamRvc19jbG9zZQotCQlwdWJsaWMJX2pkb3Nfc2VlawotCQlwdWJsaWMJX2pkb3NfcmVhZAotCQlwdWJsaWMJX2pkb3Nfd3JpdGUKLQkJcHVibGljCV9qeG1zX2dldGRyaXZlcgotCQlwdWJsaWMJX2p4bXNfY2FsbGRyaXZlcgotCQlwdWJsaWMJX2plbXNfYXZhaWxhYmxlCi0JCXB1YmxpYwlfamVtc19jYWxsZHJpdmVyCi0KLTsKLTsgc2hvcnQgZmFyIGpkb3Nfb3BlbiAoc2hvcnQgZmFyICogaGFuZGxlLCBjaGFyIGZhciAqIGZpbGVuYW1lKQotOwotOyBDcmVhdGUgYW5kIG9wZW4gYSB0ZW1wb3JhcnkgZmlsZQotOwotX2pkb3Nfb3Blbglwcm9jCWZhcgotCQlwdXNoCWJwCQkJOyBsaW5rYWdlCi0JCW1vdiAJYnAsc3AKLQkJcHVzaAlzaQkJCTsgc2F2ZSBhbGwgcmVnaXN0ZXJzIGZvciBzYWZldHkKLQkJcHVzaAlkaQotCQlwdXNoCWJ4Ci0JCXB1c2gJY3gKLQkJcHVzaAlkeAotCQlwdXNoCWVzCi0JCXB1c2gJZHMKLQkJbW92CWN4LDAJCQk7IG5vcm1hbCBmaWxlIGF0dHJpYnV0ZXMKLQkJbGRzCWR4LGR3b3JkIHB0ciBbYnArMTBdCTsgZ2V0IGZpbGVuYW1lIHBvaW50ZXIKLQkJbW92CWFoLDNjaAkJCTsgY3JlYXRlIGZpbGUKLQkJaW50CTIxaAotCQlqYwlvcGVuX2VycgkJOyBpZiBmYWlsZWQsIHJldHVybiBlcnJvciBjb2RlCi0JCWxkcwlieCxkd29yZCBwdHIgW2JwKzZdCTsgZ2V0IGhhbmRsZSBwb2ludGVyCi0JCW1vdgl3b3JkIHB0ciBbYnhdLGF4CTsgc2F2ZSB0aGUgaGFuZGxlCi0JCXhvcglheCxheAkJCTsgcmV0dXJuIHplcm8gZm9yIE9LCi1vcGVuX2VycjoJcG9wCWRzCQkJOyByZXN0b3JlIHJlZ2lzdGVycyBhbmQgZXhpdAotCQlwb3AJZXMKLQkJcG9wCWR4Ci0JCXBvcAljeAotCQlwb3AJYngKLQkJcG9wCWRpCi0JCXBvcAlzaQotCQlwb3AgCWJwCi0JCXJldAotX2pkb3Nfb3BlbgllbmRwCi0KLQotOwotOyBzaG9ydCBmYXIgamRvc19jbG9zZSAoc2hvcnQgaGFuZGxlKQotOwotOyBDbG9zZSB0aGUgZmlsZSBoYW5kbGUKLTsKLV9qZG9zX2Nsb3NlCXByb2MJZmFyCi0JCXB1c2gJYnAJCQk7IGxpbmthZ2UKLQkJbW92IAlicCxzcAotCQlwdXNoCXNpCQkJOyBzYXZlIGFsbCByZWdpc3RlcnMgZm9yIHNhZmV0eQotCQlwdXNoCWRpCi0JCXB1c2gJYngKLQkJcHVzaAljeAotCQlwdXNoCWR4Ci0JCXB1c2gJZXMKLQkJcHVzaAlkcwotCQltb3YJYngsd29yZCBwdHIgW2JwKzZdCTsgZmlsZSBoYW5kbGUKLQkJbW92CWFoLDNlaAkJCTsgY2xvc2UgZmlsZQotCQlpbnQJMjFoCi0JCWpjCWNsb3NlX2VycgkJOyBpZiBmYWlsZWQsIHJldHVybiBlcnJvciBjb2RlCi0JCXhvcglheCxheAkJCTsgcmV0dXJuIHplcm8gZm9yIE9LCi1jbG9zZV9lcnI6CXBvcAlkcwkJCTsgcmVzdG9yZSByZWdpc3RlcnMgYW5kIGV4aXQKLQkJcG9wCWVzCi0JCXBvcAlkeAotCQlwb3AJY3gKLQkJcG9wCWJ4Ci0JCXBvcAlkaQotCQlwb3AJc2kKLQkJcG9wIAlicAotCQlyZXQKLV9qZG9zX2Nsb3NlCWVuZHAKLQotCi07Ci07IHNob3J0IGZhciBqZG9zX3NlZWsgKHNob3J0IGhhbmRsZSwgbG9uZyBvZmZzZXQpCi07Ci07IFNldCBmaWxlIHBvc2l0aW9uCi07Ci1famRvc19zZWVrCXByb2MJZmFyCi0JCXB1c2gJYnAJCQk7IGxpbmthZ2UKLQkJbW92IAlicCxzcAotCQlwdXNoCXNpCQkJOyBzYXZlIGFsbCByZWdpc3RlcnMgZm9yIHNhZmV0eQotCQlwdXNoCWRpCi0JCXB1c2gJYngKLQkJcHVzaAljeAotCQlwdXNoCWR4Ci0JCXB1c2gJZXMKLQkJcHVzaAlkcwotCQltb3YJYngsd29yZCBwdHIgW2JwKzZdCTsgZmlsZSBoYW5kbGUKLQkJbW92CWR4LHdvcmQgcHRyIFticCs4XQk7IExTIG9mZnNldAotCQltb3YJY3gsd29yZCBwdHIgW2JwKzEwXQk7IE1TIG9mZnNldAotCQltb3YJYXgsNDIwMGgJCTsgYWJzb2x1dGUgc2VlawotCQlpbnQJMjFoCi0JCWpjCXNlZWtfZXJyCQk7IGlmIGZhaWxlZCwgcmV0dXJuIGVycm9yIGNvZGUKLQkJeG9yCWF4LGF4CQkJOyByZXR1cm4gemVybyBmb3IgT0sKLXNlZWtfZXJyOglwb3AJZHMJCQk7IHJlc3RvcmUgcmVnaXN0ZXJzIGFuZCBleGl0Ci0JCXBvcAllcwotCQlwb3AJZHgKLQkJcG9wCWN4Ci0JCXBvcAlieAotCQlwb3AJZGkKLQkJcG9wCXNpCi0JCXBvcCAJYnAKLQkJcmV0Ci1famRvc19zZWVrCWVuZHAKLQotCi07Ci07IHNob3J0IGZhciBqZG9zX3JlYWQgKHNob3J0IGhhbmRsZSwgdm9pZCBmYXIgKiBidWZmZXIsIHVuc2lnbmVkIHNob3J0IGNvdW50KQotOwotOyBSZWFkIGZyb20gZmlsZQotOwotX2pkb3NfcmVhZAlwcm9jCWZhcgotCQlwdXNoCWJwCQkJOyBsaW5rYWdlCi0JCW1vdiAJYnAsc3AKLQkJcHVzaAlzaQkJCTsgc2F2ZSBhbGwgcmVnaXN0ZXJzIGZvciBzYWZldHkKLQkJcHVzaAlkaQotCQlwdXNoCWJ4Ci0JCXB1c2gJY3gKLQkJcHVzaAlkeAotCQlwdXNoCWVzCi0JCXB1c2gJZHMKLQkJbW92CWJ4LHdvcmQgcHRyIFticCs2XQk7IGZpbGUgaGFuZGxlCi0JCWxkcwlkeCxkd29yZCBwdHIgW2JwKzhdCTsgYnVmZmVyIGFkZHJlc3MKLQkJbW92CWN4LHdvcmQgcHRyIFticCsxMl0JOyBudW1iZXIgb2YgYnl0ZXMKLQkJbW92CWFoLDNmaAkJCTsgcmVhZCBmaWxlCi0JCWludAkyMWgKLQkJamMJcmVhZF9lcnIJCTsgaWYgZmFpbGVkLCByZXR1cm4gZXJyb3IgY29kZQotCQljbXAJYXgsd29yZCBwdHIgW2JwKzEyXQk7IG1ha2Ugc3VyZSBhbGwgYnl0ZXMgd2VyZSByZWFkCi0JCWplCXJlYWRfb2sKLQkJbW92CWF4LDEJCQk7IGVsc2UgcmV0dXJuIDEgZm9yIG5vdCBPSwotCQlqbXAJc2hvcnQgcmVhZF9lcnIKLXJlYWRfb2s6CXhvcglheCxheAkJCTsgcmV0dXJuIHplcm8gZm9yIE9LCi1yZWFkX2VycjoJcG9wCWRzCQkJOyByZXN0b3JlIHJlZ2lzdGVycyBhbmQgZXhpdAotCQlwb3AJZXMKLQkJcG9wCWR4Ci0JCXBvcAljeAotCQlwb3AJYngKLQkJcG9wCWRpCi0JCXBvcAlzaQotCQlwb3AgCWJwCi0JCXJldAotX2pkb3NfcmVhZAllbmRwCi0KLQotOwotOyBzaG9ydCBmYXIgamRvc193cml0ZSAoc2hvcnQgaGFuZGxlLCB2b2lkIGZhciAqIGJ1ZmZlciwgdW5zaWduZWQgc2hvcnQgY291bnQpCi07Ci07IFdyaXRlIHRvIGZpbGUKLTsKLV9qZG9zX3dyaXRlCXByb2MJZmFyCi0JCXB1c2gJYnAJCQk7IGxpbmthZ2UKLQkJbW92IAlicCxzcAotCQlwdXNoCXNpCQkJOyBzYXZlIGFsbCByZWdpc3RlcnMgZm9yIHNhZmV0eQotCQlwdXNoCWRpCi0JCXB1c2gJYngKLQkJcHVzaAljeAotCQlwdXNoCWR4Ci0JCXB1c2gJZXMKLQkJcHVzaAlkcwotCQltb3YJYngsd29yZCBwdHIgW2JwKzZdCTsgZmlsZSBoYW5kbGUKLQkJbGRzCWR4LGR3b3JkIHB0ciBbYnArOF0JOyBidWZmZXIgYWRkcmVzcwotCQltb3YJY3gsd29yZCBwdHIgW2JwKzEyXQk7IG51bWJlciBvZiBieXRlcwotCQltb3YJYWgsNDBoCQkJOyB3cml0ZSBmaWxlCi0JCWludAkyMWgKLQkJamMJd3JpdGVfZXJyCQk7IGlmIGZhaWxlZCwgcmV0dXJuIGVycm9yIGNvZGUKLQkJY21wCWF4LHdvcmQgcHRyIFticCsxMl0JOyBtYWtlIHN1cmUgYWxsIGJ5dGVzIHdyaXR0ZW4KLQkJamUJd3JpdGVfb2sKLQkJbW92CWF4LDEJCQk7IGVsc2UgcmV0dXJuIDEgZm9yIG5vdCBPSwotCQlqbXAJc2hvcnQgd3JpdGVfZXJyCi13cml0ZV9vazoJeG9yCWF4LGF4CQkJOyByZXR1cm4gemVybyBmb3IgT0sKLXdyaXRlX2VycjoJcG9wCWRzCQkJOyByZXN0b3JlIHJlZ2lzdGVycyBhbmQgZXhpdAotCQlwb3AJZXMKLQkJcG9wCWR4Ci0JCXBvcAljeAotCQlwb3AJYngKLQkJcG9wCWRpCi0JCXBvcAlzaQotCQlwb3AgCWJwCi0JCXJldAotX2pkb3Nfd3JpdGUJZW5kcAotCi0KLTsKLTsgdm9pZCBmYXIganhtc19nZXRkcml2ZXIgKFhNU0RSSVZFUiBmYXIgKikKLTsKLTsgR2V0IHRoZSBhZGRyZXNzIG9mIHRoZSBYTVMgZHJpdmVyLCBvciBOVUxMIGlmIG5vdCBhdmFpbGFibGUKLTsKLV9qeG1zX2dldGRyaXZlcglwcm9jCWZhcgotCQlwdXNoCWJwCQkJOyBsaW5rYWdlCi0JCW1vdiAJYnAsc3AKLQkJcHVzaAlzaQkJCTsgc2F2ZSBhbGwgcmVnaXN0ZXJzIGZvciBzYWZldHkKLQkJcHVzaAlkaQotCQlwdXNoCWJ4Ci0JCXB1c2gJY3gKLQkJcHVzaAlkeAotCQlwdXNoCWVzCi0JCXB1c2gJZHMKLQkJbW92IAlheCw0MzAwaAkJOyBjYWxsIG11bHRpcGxleCBpbnRlcnJ1cHQgd2l0aAotCQlpbnQJMmZoCQkJOyBhIG1hZ2ljIGNvb2tpZSwgaGV4IDQzMDAKLQkJY21wIAlhbCw4MGgJCQk7IEFMIHNob3VsZCBjb250YWluIGhleCA4MAotCQlqZQl4bXNhdmFpbAotCQl4b3IgCWR4LGR4CQkJOyBubyBYTVMgZHJpdmVyIGF2YWlsYWJsZQotCQl4b3IgCWF4LGF4CQkJOyByZXR1cm4gYSBuaWwgcG9pbnRlcgotCQlqbXAJc2hvcnQgeG1zYXZhaWxfZG9uZQoteG1zYXZhaWw6CW1vdiAJYXgsNDMxMGgJCTsgZmV0Y2ggZHJpdmVyIGFkZHJlc3Mgd2l0aAotCQlpbnQJMmZoCQkJOyBhbm90aGVyIG1hZ2ljIGNvb2tpZQotCQltb3YgCWR4LGVzCQkJOyBjb3B5IGFkZHJlc3MgdG8gZHg6YXgKLQkJbW92IAlheCxieAoteG1zYXZhaWxfZG9uZToJbGVzIAlieCxkd29yZCBwdHIgW2JwKzZdCTsgZ2V0IHBvaW50ZXIgdG8gcmV0dXJuIHZhbHVlCi0JCW1vdgl3b3JkIHB0ciBlczpbYnhdLGF4Ci0JCW1vdgl3b3JkIHB0ciBlczpbYngrMl0sZHgKLQkJcG9wCWRzCQkJOyByZXN0b3JlIHJlZ2lzdGVycyBhbmQgZXhpdAotCQlwb3AJZXMKLQkJcG9wCWR4Ci0JCXBvcAljeAotCQlwb3AJYngKLQkJcG9wCWRpCi0JCXBvcAlzaQotCQlwb3AJYnAKLQkJcmV0Ci1fanhtc19nZXRkcml2ZXIJZW5kcAotCi0KLTsKLTsgdm9pZCBmYXIganhtc19jYWxsZHJpdmVyIChYTVNEUklWRVIsIFhNU2NvbnRleHQgZmFyICopCi07Ci07IFRoZSBYTVNjb250ZXh0IHN0cnVjdHVyZSBjb250YWlucyB2YWx1ZXMgZm9yIHRoZSBBWCxEWCxCWCxTSSxEUyByZWdpc3RlcnMuCi07IFRoZXNlIGFyZSBsb2FkZWQsIHRoZSBYTVMgY2FsbCBpcyBwZXJmb3JtZWQsIGFuZCB0aGUgbmV3IHZhbHVlcyBvZiB0aGUKLTsgQVgsRFgsQlggcmVnaXN0ZXJzIGFyZSB3cml0dGVuIGJhY2sgdG8gdGhlIGNvbnRleHQgc3RydWN0dXJlLgotOwotX2p4bXNfY2FsbGRyaXZlciAJcHJvYwlmYXIKLQkJcHVzaAlicAkJCTsgbGlua2FnZQotCQltb3YgCWJwLHNwCi0JCXB1c2gJc2kJCQk7IHNhdmUgYWxsIHJlZ2lzdGVycyBmb3Igc2FmZXR5Ci0JCXB1c2gJZGkKLQkJcHVzaAlieAotCQlwdXNoCWN4Ci0JCXB1c2gJZHgKLQkJcHVzaAllcwotCQlwdXNoCWRzCi0JCWxlcyAJYngsZHdvcmQgcHRyIFticCsxMF0JOyBnZXQgWE1TY29udGV4dCBwb2ludGVyCi0JCW1vdiAJYXgsd29yZCBwdHIgZXM6W2J4XQk7IGxvYWQgcmVnaXN0ZXJzCi0JCW1vdiAJZHgsd29yZCBwdHIgZXM6W2J4KzJdCi0JCW1vdiAJc2ksd29yZCBwdHIgZXM6W2J4KzZdCi0JCW1vdiAJZHMsd29yZCBwdHIgZXM6W2J4KzhdCi0JCW1vdiAJYngsd29yZCBwdHIgZXM6W2J4KzRdCi0JCWNhbGwJZHdvcmQgcHRyIFticCs2XQk7IGNhbGwgdGhlIGRyaXZlcgotCQltb3YJY3gsYngJCQk7IHNhdmUgcmV0dXJuZWQgQlggZm9yIGEgc2VjCi0JCWxlcyAJYngsZHdvcmQgcHRyIFticCsxMF0JOyBnZXQgWE1TY29udGV4dCBwb2ludGVyCi0JCW1vdiAJd29yZCBwdHIgZXM6W2J4XSxheAk7IHB1dCBiYWNrIGF4LGR4LGJ4Ci0JCW1vdiAJd29yZCBwdHIgZXM6W2J4KzJdLGR4Ci0JCW1vdiAJd29yZCBwdHIgZXM6W2J4KzRdLGN4Ci0JCXBvcAlkcwkJCTsgcmVzdG9yZSByZWdpc3RlcnMgYW5kIGV4aXQKLQkJcG9wCWVzCi0JCXBvcAlkeAotCQlwb3AJY3gKLQkJcG9wCWJ4Ci0JCXBvcAlkaQotCQlwb3AJc2kKLQkJcG9wIAlicAotCQlyZXQKLV9qeG1zX2NhbGxkcml2ZXIgCWVuZHAKLQotCi07Ci07IHNob3J0IGZhciBqZW1zX2F2YWlsYWJsZSAodm9pZCkKLTsKLTsgSGF2ZSB3ZSBnb3QgYW4gRU1TIGRyaXZlcj8gKHRoaXMgY29tZXMgc3RyYWlnaHQgZnJvbSB0aGUgRU1TIDQuMCBzcGVjcykKLTsKLV9qZW1zX2F2YWlsYWJsZQlwcm9jCWZhcgotCQlwdXNoCXNpCQkJOyBzYXZlIGFsbCByZWdpc3RlcnMgZm9yIHNhZmV0eQotCQlwdXNoCWRpCi0JCXB1c2gJYngKLQkJcHVzaAljeAotCQlwdXNoCWR4Ci0JCXB1c2gJZXMKLQkJcHVzaAlkcwotCQltb3YJYXgsMzU2N2gJCTsgZ2V0IGludGVycnVwdCB2ZWN0b3IgNjdoCi0JCWludAkyMWgKLQkJcHVzaAljcwotCQlwb3AJZHMKLQkJbW92CWRpLDAwMGFoCQk7IGNoZWNrIG9mZnMgMTAgaW4gcmV0dXJuZWQgc2VnCi0JCWxlYQlzaSxBU0NJSV9kZXZpY2VfbmFtZQk7IGFnYWluc3QgbGl0ZXJhbCBzdHJpbmcKLQkJbW92CWN4LDgKLQkJY2xkCi0JCXJlcGUgY21wc2IKLQkJam5lCW5vX2VtcwotCQltb3YJYXgsMQkJCTsgbWF0Y2gsIGl0J3MgdGhlcmUKLQkJam1wCXNob3J0IGF2YWlsX2RvbmUKLW5vX2VtczoJCXhvcglheCxheAkJCTsgaXQncyBub3QgdGhlcmUKLWF2YWlsX2RvbmU6CXBvcAlkcwkJCTsgcmVzdG9yZSByZWdpc3RlcnMgYW5kIGV4aXQKLQkJcG9wCWVzCi0JCXBvcAlkeAotCQlwb3AJY3gKLQkJcG9wCWJ4Ci0JCXBvcAlkaQotCQlwb3AJc2kKLQkJcmV0Ci0KLUFTQ0lJX2RldmljZV9uYW1lCWRiCSJFTU1YWFhYMCIKLQotX2plbXNfYXZhaWxhYmxlCWVuZHAKLQotCi07Ci07IHZvaWQgZmFyIGplbXNfY2FsbGRyaXZlciAoRU1TY29udGV4dCBmYXIgKikKLTsKLTsgVGhlIEVNU2NvbnRleHQgc3RydWN0dXJlIGNvbnRhaW5zIHZhbHVlcyBmb3IgdGhlIEFYLERYLEJYLFNJLERTIHJlZ2lzdGVycy4KLTsgVGhlc2UgYXJlIGxvYWRlZCwgdGhlIEVNUyB0cmFwIGlzIHBlcmZvcm1lZCwgYW5kIHRoZSBuZXcgdmFsdWVzIG9mIHRoZQotOyBBWCxEWCxCWCByZWdpc3RlcnMgYXJlIHdyaXR0ZW4gYmFjayB0byB0aGUgY29udGV4dCBzdHJ1Y3R1cmUuCi07Ci1famVtc19jYWxsZHJpdmVyCXByb2MgZmFyCi0JCXB1c2gJYnAJCQk7IGxpbmthZ2UKLQkJbW92IAlicCxzcAotCQlwdXNoCXNpCQkJOyBzYXZlIGFsbCByZWdpc3RlcnMgZm9yIHNhZmV0eQotCQlwdXNoCWRpCi0JCXB1c2gJYngKLQkJcHVzaAljeAotCQlwdXNoCWR4Ci0JCXB1c2gJZXMKLQkJcHVzaAlkcwotCQlsZXMgCWJ4LGR3b3JkIHB0ciBbYnArNl0JOyBnZXQgRU1TY29udGV4dCBwb2ludGVyCi0JCW1vdiAJYXgsd29yZCBwdHIgZXM6W2J4XQk7IGxvYWQgcmVnaXN0ZXJzCi0JCW1vdiAJZHgsd29yZCBwdHIgZXM6W2J4KzJdCi0JCW1vdiAJc2ksd29yZCBwdHIgZXM6W2J4KzZdCi0JCW1vdiAJZHMsd29yZCBwdHIgZXM6W2J4KzhdCi0JCW1vdiAJYngsd29yZCBwdHIgZXM6W2J4KzRdCi0JCWludAk2N2gJCQk7IGNhbGwgdGhlIEVNUyBkcml2ZXIKLQkJbW92CWN4LGJ4CQkJOyBzYXZlIHJldHVybmVkIEJYIGZvciBhIHNlYwotCQlsZXMgCWJ4LGR3b3JkIHB0ciBbYnArNl0JOyBnZXQgRU1TY29udGV4dCBwb2ludGVyCi0JCW1vdiAJd29yZCBwdHIgZXM6W2J4XSxheAk7IHB1dCBiYWNrIGF4LGR4LGJ4Ci0JCW1vdiAJd29yZCBwdHIgZXM6W2J4KzJdLGR4Ci0JCW1vdiAJd29yZCBwdHIgZXM6W2J4KzRdLGN4Ci0JCXBvcAlkcwkJCTsgcmVzdG9yZSByZWdpc3RlcnMgYW5kIGV4aXQKLQkJcG9wCWVzCi0JCXBvcAlkeAotCQlwb3AJY3gKLQkJcG9wCWJ4Ci0JCXBvcAlkaQotCQlwb3AJc2kKLQkJcG9wIAlicAotCQlyZXQKLV9qZW1zX2NhbGxkcml2ZXIJZW5kcAotCi1KTUVNRE9TQV9UWFQJZW5kcwotCi0JCWVuZApkaWZmIC0tZ2l0IGEvam1lbW1hYy5jIGIvam1lbW1hYy5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxMDZmOWJlLi4wMDAwMDAwCi0tLSBhL2ptZW1tYWMuYworKysgL2Rldi9udWxsCkBAIC0xLDI4OSArMCwwIEBACi0vKgotICogam1lbW1hYy5jCi0gKgotICogQ29weXJpZ2h0IChDKSAxOTkyLTE5OTcsIFRob21hcyBHLiBMYW5lLgotICogVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEluZGVwZW5kZW50IEpQRUcgR3JvdXAncyBzb2Z0d2FyZS4KLSAqIEZvciBjb25kaXRpb25zIG9mIGRpc3RyaWJ1dGlvbiBhbmQgdXNlLCBzZWUgdGhlIGFjY29tcGFueWluZyBSRUFETUUgZmlsZS4KLSAqCi0gKiBqbWVtbWFjLmMgcHJvdmlkZXMgYW4gQXBwbGUgTWFjaW50b3NoIGltcGxlbWVudGF0aW9uIG9mIHRoZSBzeXN0ZW0tCi0gKiBkZXBlbmRlbnQgcG9ydGlvbiBvZiB0aGUgSlBFRyBtZW1vcnkgbWFuYWdlci4KLSAqCi0gKiBJZiB5b3UgdXNlIGptZW1tYWMuYywgdGhlbiB5b3UgbXVzdCBkZWZpbmUgVVNFX01BQ19NRU1NR1IgaW4gdGhlCi0gKiBKUEVHX0lOVEVSTkFMUyBwYXJ0IG9mIGpjb25maWcuaC4KLSAqCi0gKiBqbWVtbWFjLmMgdXNlcyB0aGUgTWFjaW50b3NoIHRvb2xib3ggcm91dGluZXMgTmV3UHRyIGFuZCBEaXNwb3NlUHRyCi0gKiBpbnN0ZWFkIG9mIG1hbGxvYyBhbmQgZnJlZS4gIEl0IGFjY3VyYXRlbHkgZGV0ZXJtaW5lcyB0aGUgYW1vdW50IG9mCi0gKiBtZW1vcnkgYXZhaWxhYmxlIGJ5IHVzaW5nIENvbXBhY3RNZW0uICBOb3RpY2UgdGhhdCBpZiBsZWZ0IHRvIGl0cwotICogb3duIGRldmljZXMsIHRoaXMgY29kZSBjYW4gY2hldyB1cCBhbGwgYXZhaWxhYmxlIHNwYWNlIGluIHRoZQotICogYXBwbGljYXRpb24ncyB6b25lLCB3aXRoIHRoZSBleGNlcHRpb24gb2YgdGhlIHJhdGhlciBzbWFsbCAic2xvcCIKLSAqIGZhY3RvciBjb21wdXRlZCBpbiBqcGVnX21lbV9hdmFpbGFibGUoKS4gIFRoZSBhcHBsaWNhdGlvbiBjYW4gZW5zdXJlCi0gKiB0aGF0IG1vcmUgc3BhY2UgaXMgbGVmdCBvdmVyIGJ5IHJlZHVjaW5nIG1heF9tZW1vcnlfdG9fdXNlLgotICoKLSAqIExhcmdlIGltYWdlcyBhcmUgc3dhcHBlZCB0byBkaXNrIHVzaW5nIHRlbXBvcmFyeSBmaWxlcyBhbmQgU3lzdGVtIDcuMCsncwotICogdGVtcG9yYXJ5IGZvbGRlciBmdW5jdGlvbmFsaXR5LgotICoKLSAqIE5vdGUgdGhhdCBqbWVtbWFjLmMgZGVwZW5kcyBvbiB0d28gZmVhdHVyZXMgb2YgTWFjT1MgdGhhdCB3ZXJlIGZpcnN0Ci0gKiBpbnRyb2R1Y2VkIGluIFN5c3RlbSA3OiBGaW5kRm9sZGVyIGFuZCB0aGUgRlNTcGVjLWJhc2VkIGNhbGxzLgotICogSWYgeW91ciBhcHBsaWNhdGlvbiB1c2VzIGptZW1tYWMuYyBhbmQgaXMgcnVuIHVuZGVyIFN5c3RlbSA2IG9yIGVhcmxpZXIsCi0gKiBhbmQgdGhlIGpwZWcgbGlicmFyeSBkZWNpZGVzIGl0IG5lZWRzIGEgdGVtcG9yYXJ5IGZpbGUsIGl0IHdpbGwgYWJvcnQsCi0gKiBwcmludGluZyBlcnJvciBtZXNzYWdlcyBhYm91dCByZXF1aXJpbmcgU3lzdGVtIDcuICAoSWYgbm8gdGVtcG9yYXJ5IGZpbGVzCi0gKiBhcmUgY3JlYXRlZCwgaXQgd2lsbCBydW4gZmluZS4pCi0gKgotICogSWYgeW91IHdhbnQgdG8gdXNlIGptZW1tYWMuYyBpbiBhbiBhcHBsaWNhdGlvbiB0aGF0IG1pZ2h0IGJlIHVzZWQgd2l0aAotICogU3lzdGVtIDYgb3IgZWFybGllciwgdGhlbiB5b3Ugc2hvdWxkIHJlbW92ZSBkZXBlbmRlbmNpZXMgb24gRmluZEZvbGRlcgotICogYW5kIHRoZSBGU1NwZWMgY2FsbHMuICBZb3Ugd2lsbCBuZWVkIHRvIHJlcGxhY2UgRmluZEZvbGRlciB3aXRoIHNvbWUKLSAqIG90aGVyIG1lY2hhbmlzbSBmb3IgZmluZGluZyBhIHBsYWNlIHRvIHB1dCB0ZW1wb3JhcnkgZmlsZXMsIGFuZCB5b3UKLSAqIHNob3VsZCByZXBsYWNlIHRoZSBGU1NwZWMgY2FsbHMgd2l0aCB0aGVpciBIRlMgZXF1aXZhbGVudHM6Ci0gKgotICogICAgIEZTcERlbGV0ZSAgICAgLT4gIEhEZWxldGUKLSAqICAgICBGU3BHZXRGSW5mbyAgIC0+ICBIR2V0RkluZm8KLSAqICAgICBGU3BDcmVhdGUgICAgIC0+ICBIQ3JlYXRlCi0gKiAgICAgRlNwT3BlbkRGICAgICAtPiAgSE9wZW4gICAgICAqKiogTm90ZTogbm90IEhPcGVuREYgKioqCi0gKiAgICAgRlNNYWtlRlNTcGVjICAtPiAgKGZpbGwgaW4gc3BlYyBieSBoYW5kLikKLSAqCi0gKiAoVXNlIEhPcGVuIGluc3RlYWQgb2YgSE9wZW5ERi4gIEhPcGVuIGlzIGp1c3QgYSBnbHVlLWludGVyZmFjZSB0byBQQkhPcGVuLAotICogd2hpY2ggaXMgb24gYWxsIEhGUyBtYWNzLiAgSE9wZW5ERiBpcyBhIFN5c3RlbSA3IGFkZGl0aW9uIHdoaWNoIGF2b2lkcyB0aGUKLSAqIGFnZXMtb2xkIHByb2JsZW0gb2YgbmFtZXMgc3RhcnRpbmcgd2l0aCBhIHBlcmlvZC4pCi0gKgotICogQ29udHJpYnV0ZWQgYnkgU2FtIEJ1c2hlbGwgKGpzYW1AaWFndS5vbi5uZXQpIGFuZAotICogRGFuIEdpbGRvciAoZ3lsZEBpbi10b3VjaC5jb20pLgotICovCi0KLSNkZWZpbmUgSlBFR19JTlRFUk5BTFMKLSNpbmNsdWRlICJqaW5jbHVkZS5oIgotI2luY2x1ZGUgImpwZWdsaWIuaCIKLSNpbmNsdWRlICJqbWVtc3lzLmgiICAgIC8qIGltcG9ydCB0aGUgc3lzdGVtLWRlcGVuZGVudCBkZWNsYXJhdGlvbnMgKi8KLQotI2lmbmRlZiBVU0VfTUFDX01FTU1HUgkvKiBtYWtlIHN1cmUgdXNlciBnb3QgY29uZmlndXJhdGlvbiByaWdodCAqLwotICBZb3UgZm9yZ290IHRvIGRlZmluZSBVU0VfTUFDX01FTU1HUiBpbiBqY29uZmlnLmguIC8qIGRlbGliZXJhdGUgc3ludGF4IGVycm9yICovCi0jZW5kaWYKLQotI2luY2x1ZGUgPE1lbW9yeS5oPiAgICAgLyogd2UgdXNlIHRoZSBNYWNPUyBtZW1vcnkgbWFuYWdlciAqLwotI2luY2x1ZGUgPEZpbGVzLmg+ICAgICAgLyogd2UgdXNlIHRoZSBNYWNPUyBGaWxlIHN0dWZmICovCi0jaW5jbHVkZSA8Rm9sZGVycy5oPiAgICAvKiB3ZSB1c2UgdGhlIE1hY09TIEhGUyBzdHVmZiAqLwotI2luY2x1ZGUgPFNjcmlwdC5oPiAgICAgLyogZm9yIHNtU3lzdGVtU2NyaXB0ICovCi0jaW5jbHVkZSA8R2VzdGFsdC5oPiAgICAvKiB3ZSB1c2UgR2VzdGFsdCB0byB0ZXN0IGZvciBzcGVjaWZpYyBmdW5jdGlvbmFsaXR5ICovCi0KLSNpZm5kZWYgVEVNUF9GSUxFX05BTUUJCS8qIGNhbiBvdmVycmlkZSBmcm9tIGpjb25maWcuaCBvciBNYWtlZmlsZSAqLwotI2RlZmluZSBURU1QX0ZJTEVfTkFNRSAgIkpQRyUwM2QuVE1QIgotI2VuZGlmCi0KLXN0YXRpYyBpbnQgbmV4dF9maWxlX251bTsJLyogdG8gZGlzdGluZ3Vpc2ggYW1vbmcgc2V2ZXJhbCB0ZW1wIGZpbGVzICovCi0KLQotLyoKLSAqIE1lbW9yeSBhbGxvY2F0aW9uIGFuZCBmcmVlaW5nIGFyZSBjb250cm9sbGVkIGJ5IHRoZSBNYWNPUyBsaWJyYXJ5Ci0gKiByb3V0aW5lcyBOZXdQdHIoKSBhbmQgRGlzcG9zZVB0cigpLCB3aGljaCBhbGxvY2F0ZSBmaXhlZC1hZGRyZXNzCi0gKiBzdG9yYWdlLiAgVW5mb3J0dW5hdGVseSwgdGhlIElKRyBsaWJyYXJ5IGlzbid0IHNtYXJ0IGVub3VnaCB0byBjb3BlCi0gKiB3aXRoIHJlbG9jYXRhYmxlIHN0b3JhZ2UuCi0gKi8KLQotR0xPQkFMKHZvaWQgKikKLWpwZWdfZ2V0X3NtYWxsIChqX2NvbW1vbl9wdHIgY2luZm8sIHNpemVfdCBzaXplb2ZvYmplY3QpCi17Ci0gIHJldHVybiAodm9pZCAqKSBOZXdQdHIoc2l6ZW9mb2JqZWN0KTsKLX0KLQotR0xPQkFMKHZvaWQpCi1qcGVnX2ZyZWVfc21hbGwgKGpfY29tbW9uX3B0ciBjaW5mbywgdm9pZCAqIG9iamVjdCwgc2l6ZV90IHNpemVvZm9iamVjdCkKLXsKLSAgRGlzcG9zZVB0cigoUHRyKSBvYmplY3QpOwotfQotCi0KLS8qCi0gKiAiTGFyZ2UiIG9iamVjdHMgYXJlIHRyZWF0ZWQgdGhlIHNhbWUgYXMgInNtYWxsIiBvbmVzLgotICogTkI6IHdlIGluY2x1ZGUgRkFSIGtleXdvcmRzIGluIHRoZSByb3V0aW5lIGRlY2xhcmF0aW9ucyBzaW1wbHkgZm9yCi0gKiBjb25zaXN0ZW5jeSB3aXRoIHRoZSByZXN0IG9mIHRoZSBJSkcgY29kZTsgRkFSIHNob3VsZCBleHBhbmQgdG8gZW1wdHkKLSAqIG9uIHJhdGlvbmFsIGFyY2hpdGVjdHVyZXMgbGlrZSB0aGUgTWFjLgotICovCi0KLUdMT0JBTCh2b2lkIEZBUiAqKQotanBlZ19nZXRfbGFyZ2UgKGpfY29tbW9uX3B0ciBjaW5mbywgc2l6ZV90IHNpemVvZm9iamVjdCkKLXsKLSAgcmV0dXJuICh2b2lkIEZBUiAqKSBOZXdQdHIoc2l6ZW9mb2JqZWN0KTsKLX0KLQotR0xPQkFMKHZvaWQpCi1qcGVnX2ZyZWVfbGFyZ2UgKGpfY29tbW9uX3B0ciBjaW5mbywgdm9pZCBGQVIgKiBvYmplY3QsIHNpemVfdCBzaXplb2ZvYmplY3QpCi17Ci0gIERpc3Bvc2VQdHIoKFB0cikgb2JqZWN0KTsKLX0KLQotCi0vKgotICogVGhpcyByb3V0aW5lIGNvbXB1dGVzIHRoZSB0b3RhbCBtZW1vcnkgc3BhY2UgYXZhaWxhYmxlIGZvciBhbGxvY2F0aW9uLgotICovCi0KLUdMT0JBTChsb25nKQotanBlZ19tZW1fYXZhaWxhYmxlIChqX2NvbW1vbl9wdHIgY2luZm8sIGxvbmcgbWluX2J5dGVzX25lZWRlZCwKLQkJICAgIGxvbmcgbWF4X2J5dGVzX25lZWRlZCwgbG9uZyBhbHJlYWR5X2FsbG9jYXRlZCkKLXsKLSAgbG9uZyBsaW1pdCA9IGNpbmZvLT5tZW0tPm1heF9tZW1vcnlfdG9fdXNlIC0gYWxyZWFkeV9hbGxvY2F0ZWQ7Ci0gIGxvbmcgc2xvcCwgbWVtOwotCi0gIC8qIERvbid0IGFzayBmb3IgbW9yZSB0aGFuIHdoYXQgYXBwbGljYXRpb24gaGFzIHRvbGQgdXMgd2UgbWF5IHVzZSAqLwotICBpZiAobWF4X2J5dGVzX25lZWRlZCA+IGxpbWl0ICYmIGxpbWl0ID4gMCkKLSAgICBtYXhfYnl0ZXNfbmVlZGVkID0gbGltaXQ7Ci0gIC8qIEZpbmQgd2hldGhlciB0aGVyZSdzIGEgYmlnIGVub3VnaCBmcmVlIGJsb2NrIGluIHRoZSBoZWFwLgotICAgKiBDb21wYWN0TWVtIHRyaWVzIHRvIGNyZWF0ZSBhIGNvbnRpZ3VvdXMgYmxvY2sgb2YgdGhlIHJlcXVlc3RlZCBzaXplLAotICAgKiBhbmQgdGhlbiByZXR1cm5zIHRoZSBzaXplIG9mIHRoZSBsYXJnZXN0IGZyZWUgYmxvY2sgKHdoaWNoIGNvdWxkIGJlCi0gICAqIG11Y2ggbW9yZSBvciBtdWNoIGxlc3MgdGhhbiB3ZSBhc2tlZCBmb3IpLgotICAgKiBXZSBhZGQgc29tZSBzbG9wIHRvIGVuc3VyZSB3ZSBkb24ndCB1c2UgdXAgYWxsIGF2YWlsYWJsZSBtZW1vcnkuCi0gICAqLwotICBzbG9wID0gbWF4X2J5dGVzX25lZWRlZCAvIDE2ICsgMzI3NjhMOwotICBtZW0gPSBDb21wYWN0TWVtKG1heF9ieXRlc19uZWVkZWQgKyBzbG9wKSAtIHNsb3A7Ci0gIGlmIChtZW0gPCAwKQotICAgIG1lbSA9IDA7CQkJLyogc2lnaCwgY291bGRuJ3QgZXZlbiBnZXQgdGhlIHNsb3AgKi8KLSAgLyogRG9uJ3QgdGFrZSBtb3JlIHRoYW4gdGhlIGFwcGxpY2F0aW9uIHNheXMgd2UgY2FuIGhhdmUgKi8KLSAgaWYgKG1lbSA+IGxpbWl0ICYmIGxpbWl0ID4gMCkKLSAgICBtZW0gPSBsaW1pdDsKLSAgcmV0dXJuIG1lbTsKLX0KLQotCi0vKgotICogQmFja2luZyBzdG9yZSAodGVtcG9yYXJ5IGZpbGUpIG1hbmFnZW1lbnQuCi0gKiBCYWNraW5nIHN0b3JlIG9iamVjdHMgYXJlIG9ubHkgdXNlZCB3aGVuIHRoZSB2YWx1ZSByZXR1cm5lZCBieQotICoganBlZ19tZW1fYXZhaWxhYmxlIGlzIGxlc3MgdGhhbiB0aGUgdG90YWwgc3BhY2UgbmVlZGVkLiAgWW91IGNhbiBkaXNwZW5zZQotICogd2l0aCB0aGVzZSByb3V0aW5lcyBpZiB5b3UgaGF2ZSBwbGVudHkgb2YgdmlydHVhbCBtZW1vcnk7IHNlZSBqbWVtbm9icy5jLgotICovCi0KLQotTUVUSE9EREVGKHZvaWQpCi1yZWFkX2JhY2tpbmdfc3RvcmUgKGpfY29tbW9uX3B0ciBjaW5mbywgYmFja2luZ19zdG9yZV9wdHIgaW5mbywKLQkJICAgIHZvaWQgRkFSICogYnVmZmVyX2FkZHJlc3MsCi0JCSAgICBsb25nIGZpbGVfb2Zmc2V0LCBsb25nIGJ5dGVfY291bnQpCi17Ci0gIGxvbmcgYnl0ZXMgPSBieXRlX2NvdW50OwotICBsb25nIHJldFZhbDsKLQotICBpZiAoIFNldEZQb3MgKCBpbmZvLT50ZW1wX2ZpbGUsIGZzRnJvbVN0YXJ0LCBmaWxlX29mZnNldCApICE9IG5vRXJyICkKLSAgICBFUlJFWElUKGNpbmZvLCBKRVJSX1RGSUxFX1NFRUspOwotCi0gIHJldFZhbCA9IEZTUmVhZCAoIGluZm8tPnRlbXBfZmlsZSwgJmJ5dGVzLAotCQkgICAgKHVuc2lnbmVkIGNoYXIgKikgYnVmZmVyX2FkZHJlc3MgKTsKLSAgaWYgKCByZXRWYWwgIT0gbm9FcnIgfHwgYnl0ZXMgIT0gYnl0ZV9jb3VudCApCi0gICAgRVJSRVhJVChjaW5mbywgSkVSUl9URklMRV9SRUFEKTsKLX0KLQotCi1NRVRIT0RERUYodm9pZCkKLXdyaXRlX2JhY2tpbmdfc3RvcmUgKGpfY29tbW9uX3B0ciBjaW5mbywgYmFja2luZ19zdG9yZV9wdHIgaW5mbywKLQkJICAgICB2b2lkIEZBUiAqIGJ1ZmZlcl9hZGRyZXNzLAotCQkgICAgIGxvbmcgZmlsZV9vZmZzZXQsIGxvbmcgYnl0ZV9jb3VudCkKLXsKLSAgbG9uZyBieXRlcyA9IGJ5dGVfY291bnQ7Ci0gIGxvbmcgcmV0VmFsOwotCi0gIGlmICggU2V0RlBvcyAoIGluZm8tPnRlbXBfZmlsZSwgZnNGcm9tU3RhcnQsIGZpbGVfb2Zmc2V0ICkgIT0gbm9FcnIgKQotICAgIEVSUkVYSVQoY2luZm8sIEpFUlJfVEZJTEVfU0VFSyk7Ci0KLSAgcmV0VmFsID0gRlNXcml0ZSAoIGluZm8tPnRlbXBfZmlsZSwgJmJ5dGVzLAotCQkgICAgICh1bnNpZ25lZCBjaGFyICopIGJ1ZmZlcl9hZGRyZXNzICk7Ci0gIGlmICggcmV0VmFsICE9IG5vRXJyIHx8IGJ5dGVzICE9IGJ5dGVfY291bnQgKQotICAgIEVSUkVYSVQoY2luZm8sIEpFUlJfVEZJTEVfV1JJVEUpOwotfQotCi0KLU1FVEhPRERFRih2b2lkKQotY2xvc2VfYmFja2luZ19zdG9yZSAoal9jb21tb25fcHRyIGNpbmZvLCBiYWNraW5nX3N0b3JlX3B0ciBpbmZvKQotewotICBGU0Nsb3NlICggaW5mby0+dGVtcF9maWxlICk7Ci0gIEZTcERlbGV0ZSAoICYoaW5mby0+dGVtcFNwZWMpICk7Ci19Ci0KLQotLyoKLSAqIEluaXRpYWwgb3BlbmluZyBvZiBhIGJhY2tpbmctc3RvcmUgb2JqZWN0LgotICoKLSAqIFRoaXMgdmVyc2lvbiB1c2VzIEZpbmRGb2xkZXIgdG8gZmluZCB0aGUgVGVtcG9yYXJ5IEl0ZW1zIGZvbGRlciwKLSAqIGFuZCBwdXRzIHRoZSB0ZW1wb3JhcnkgZmlsZSBpbiB0aGVyZS4KLSAqLwotCi1HTE9CQUwodm9pZCkKLWpwZWdfb3Blbl9iYWNraW5nX3N0b3JlIChqX2NvbW1vbl9wdHIgY2luZm8sIGJhY2tpbmdfc3RvcmVfcHRyIGluZm8sCi0JCQkgbG9uZyB0b3RhbF9ieXRlc19uZWVkZWQpCi17Ci0gIHNob3J0ICAgICAgICAgdG1wUmVmLCB2UmVmTnVtOwotICBsb25nICAgICAgICAgIGRpcklEOwotICBGSW5mbyAgICAgICAgIGZpbmRlckluZm87Ci0gIEZTU3BlYyAgICAgICAgdGhlU3BlYzsKLSAgU3RyMjU1ICAgICAgICBmTmFtZTsKLSAgT1NFcnIgICAgICAgICBvc0VycjsKLSAgbG9uZyAgICAgICAgICBnZXN0YWx0UmVzcG9uc2UgPSAwOwotCi0gIC8qIENoZWNrIHRoYXQgRlNTcGVjIGNhbGxzIGFyZSBhdmFpbGFibGUuICovCi0gIG9zRXJyID0gR2VzdGFsdCggZ2VzdGFsdEZTQXR0ciwgJmdlc3RhbHRSZXNwb25zZSApOwotICBpZiAoICggb3NFcnIgIT0gbm9FcnIgKQotICAgICAgIHx8ICEoIGdlc3RhbHRSZXNwb25zZSAmICgxPDxnZXN0YWx0SGFzRlNTcGVjQ2FsbHMpICkgKQotICAgIEVSUkVYSVRTKGNpbmZvLCBKRVJSX1RGSUxFX0NSRUFURSwgIi0gU3lzdGVtIDcuMCBvciBsYXRlciByZXF1aXJlZCIpOwotICAvKiBUTyBETzogYWRkIGEgcHJvcGVyIGVycm9yIG1lc3NhZ2UgdG8gamVycm9yLmguICovCi0KLSAgLyogQ2hlY2sgdGhhdCBGaW5kRm9sZGVyIGlzIGF2YWlsYWJsZS4gKi8KLSAgb3NFcnIgPSBHZXN0YWx0KCBnZXN0YWx0RmluZEZvbGRlckF0dHIsICZnZXN0YWx0UmVzcG9uc2UgKTsKLSAgaWYgKCAoIG9zRXJyICE9IG5vRXJyICkKLSAgICAgICB8fCAhKCBnZXN0YWx0UmVzcG9uc2UgJiAoMTw8Z2VzdGFsdEZpbmRGb2xkZXJQcmVzZW50KSApICkKLSAgICBFUlJFWElUUyhjaW5mbywgSkVSUl9URklMRV9DUkVBVEUsICItIFN5c3RlbSA3LjAgb3IgbGF0ZXIgcmVxdWlyZWQuIik7Ci0gIC8qIFRPIERPOiBhZGQgYSBwcm9wZXIgZXJyb3IgbWVzc2FnZSB0byBqZXJyb3IuaC4gKi8KLQotICBvc0VyciA9IEZpbmRGb2xkZXIgKCBrT25TeXN0ZW1EaXNrLCBrVGVtcG9yYXJ5Rm9sZGVyVHlwZSwga0NyZWF0ZUZvbGRlciwKLSAgICAgICAgICAgICAgICAgICAgICAgJnZSZWZOdW0sICZkaXJJRCApOwotICBpZiAoIG9zRXJyICE9IG5vRXJyICkKLSAgICBFUlJFWElUUyhjaW5mbywgSkVSUl9URklMRV9DUkVBVEUsICItIHRlbXBvcmFyeSBpdGVtcyBmb2xkZXIgdW5hdmFpbGFibGUiKTsKLSAgLyogVE8gRE86IFRyeSBwdXR0aW5nIHRoZSB0ZW1wIGZpbGVzIHNvbWV3aGVyZSBlbHNlLiAqLwotCi0gIC8qIEtlZXAgZ2VuZXJhdGluZyBmaWxlIG5hbWVzIHRpbGwgd2UgZmluZCBvbmUgdGhhdCdzIG5vdCBpbiB1c2UgKi8KLSAgZm9yICg7OykgewotICAgIG5leHRfZmlsZV9udW0rKzsJCS8qIGFkdmFuY2UgY291bnRlciAqLwotCi0gICAgc3ByaW50ZihpbmZvLT50ZW1wX25hbWUsIFRFTVBfRklMRV9OQU1FLCBuZXh0X2ZpbGVfbnVtKTsKLSAgICBzdHJjcHkgKCAoUHRyKWZOYW1lKzEsIGluZm8tPnRlbXBfbmFtZSApOwotICAgICpmTmFtZSA9IHN0cmxlbiAoaW5mby0+dGVtcF9uYW1lKTsKLSAgICBvc0VyciA9IEZTTWFrZUZTU3BlYyAoIHZSZWZOdW0sIGRpcklELCBmTmFtZSwgJnRoZVNwZWMgKTsKLQotICAgIGlmICggKG9zRXJyID0gRlNwR2V0RkluZm8gKCAmdGhlU3BlYywgJmZpbmRlckluZm8gKSApICE9IG5vRXJyICkKLSAgICAgIGJyZWFrOwotICB9Ci0KLSAgb3NFcnIgPSBGU3BDcmVhdGUgKCAmdGhlU3BlYywgJz8/Pz8nLCAnPz8/PycsIHNtU3lzdGVtU2NyaXB0ICk7Ci0gIGlmICggb3NFcnIgIT0gbm9FcnIgKQotICAgIEVSUkVYSVRTKGNpbmZvLCBKRVJSX1RGSUxFX0NSRUFURSwgaW5mby0+dGVtcF9uYW1lKTsKLQotICBvc0VyciA9IEZTcE9wZW5ERiAoICZ0aGVTcGVjLCBmc1JkV3JQZXJtLCAmKGluZm8tPnRlbXBfZmlsZSkgKTsKLSAgaWYgKCBvc0VyciAhPSBub0VyciApCi0gICAgRVJSRVhJVFMoY2luZm8sIEpFUlJfVEZJTEVfQ1JFQVRFLCBpbmZvLT50ZW1wX25hbWUpOwotCi0gIGluZm8tPnRlbXBTcGVjID0gdGhlU3BlYzsKLQotICBpbmZvLT5yZWFkX2JhY2tpbmdfc3RvcmUgPSByZWFkX2JhY2tpbmdfc3RvcmU7Ci0gIGluZm8tPndyaXRlX2JhY2tpbmdfc3RvcmUgPSB3cml0ZV9iYWNraW5nX3N0b3JlOwotICBpbmZvLT5jbG9zZV9iYWNraW5nX3N0b3JlID0gY2xvc2VfYmFja2luZ19zdG9yZTsKLSAgVFJBQ0VNU1MoY2luZm8sIDEsIEpUUkNfVEZJTEVfT1BFTiwgaW5mby0+dGVtcF9uYW1lKTsKLX0KLQotCi0vKgotICogVGhlc2Ugcm91dGluZXMgdGFrZSBjYXJlIG9mIGFueSBzeXN0ZW0tZGVwZW5kZW50IGluaXRpYWxpemF0aW9uIGFuZAotICogY2xlYW51cCByZXF1aXJlZC4KLSAqLwotCi1HTE9CQUwobG9uZykKLWpwZWdfbWVtX2luaXQgKGpfY29tbW9uX3B0ciBjaW5mbykKLXsKLSAgbmV4dF9maWxlX251bSA9IDA7Ci0KLSAgLyogbWF4X21lbW9yeV90b191c2Ugd2lsbCBiZSBpbml0aWFsaXplZCB0byBGcmVlTWVtKCkncyByZXN1bHQ7Ci0gICAqIHRoZSBjYWxsaW5nIGFwcGxpY2F0aW9uIG1pZ2h0IGxhdGVyIHJlZHVjZSBpdCwgZm9yIGV4YW1wbGUKLSAgICogdG8gbGVhdmUgcm9vbSB0byBpbnZva2UgbXVsdGlwbGUgSlBFRyBvYmplY3RzLgotICAgKiBOb3RlIHRoYXQgRnJlZU1lbSByZXR1cm5zIHRoZSB0b3RhbCBudW1iZXIgb2YgZnJlZSBieXRlczsKLSAgICogaXQgbWF5IG5vdCBiZSBwb3NzaWJsZSB0byBhbGxvY2F0ZSBhIHNpbmdsZSBibG9jayBvZiB0aGlzIHNpemUuCi0gICAqLwotICByZXR1cm4gRnJlZU1lbSgpOwotfQotCi1HTE9CQUwodm9pZCkKLWpwZWdfbWVtX3Rlcm0gKGpfY29tbW9uX3B0ciBjaW5mbykKLXsKLSAgLyogbm8gd29yayAqLwotfQpkaWZmIC0tZ2l0IGEvam1lbW1nci5jIGIvam1lbW1nci5jCmluZGV4IGQ4MDFiMzIuLmNmMzI1MjQgMTAwNjQ0Ci0tLSBhL2ptZW1tZ3IuYworKysgYi9qbWVtbWdyLmMKQEAgLTM3LDYgKzM3LDE1IEBACiAjZW5kaWYKIAogCitMT0NBTChzaXplX3QpCityb3VuZF91cF9wb3cyIChzaXplX3QgYSwgc2l6ZV90IGIpCisvKiBhIHJvdW5kZWQgdXAgdG8gdGhlIG5leHQgbXVsdGlwbGUgb2YgYiwgaS5lLiBjZWlsKGEvYikqYiAqLworLyogQXNzdW1lcyBhID49IDAsIGIgPiAwLCBhbmQgYiBpcyBhIHBvd2VyIG9mIDIgKi8KK3sKKyAgcmV0dXJuICgoYSArIGIgLSAxKSAmICh+KGIgLSAxKSkpOworfQorCisKIC8qCiAgKiBTb21lIGltcG9ydGFudCBub3RlczoKICAqICAgVGhlIGFsbG9jYXRpb24gcm91dGluZXMgcHJvdmlkZWQgaGVyZSBtdXN0IG5ldmVyIHJldHVybiBOVUxMLgpAQCAtNTcsMjIgKzY2LDI1IEBACiAgKiByZXF1aXJlbWVudCwgYW5kIHdlIGhhZCBiZXR0ZXIgZG8gc28gdG9vLgogICogVGhlcmUgaXNuJ3QgYW55IHJlYWxseSBwb3J0YWJsZSB3YXkgdG8gZGV0ZXJtaW5lIHRoZSB3b3JzdC1jYXNlIGFsaWdubWVudAogICogcmVxdWlyZW1lbnQuICBUaGlzIG1vZHVsZSBhc3N1bWVzIHRoYXQgdGhlIGFsaWdubWVudCByZXF1aXJlbWVudCBpcwotICogbXVsdGlwbGVzIG9mIHNpemVvZihBTElHTl9UWVBFKS4KLSAqIEJ5IGRlZmF1bHQsIHdlIGRlZmluZSBBTElHTl9UWVBFIGFzIGRvdWJsZS4gIFRoaXMgaXMgbmVjZXNzYXJ5IG9uIHNvbWUKKyAqIG11bHRpcGxlcyBvZiBBTElHTl9TSVpFLgorICogQnkgZGVmYXVsdCwgd2UgZGVmaW5lIEFMSUdOX1NJWkUgYXMgc2l6ZW9mKGRvdWJsZSkuICBUaGlzIGlzIG5lY2Vzc2FyeSBvbiBzb21lCiAgKiB3b3Jrc3RhdGlvbnMgKHdoZXJlIGRvdWJsZXMgcmVhbGx5IGRvIG5lZWQgOC1ieXRlIGFsaWdubWVudCkgYW5kIHdpbGwgd29yawogICogZmluZSBvbiBuZWFybHkgZXZlcnl0aGluZy4gIElmIHlvdXIgbWFjaGluZSBoYXMgbGVzc2VyIGFsaWdubWVudCBuZWVkcywKLSAqIHlvdSBjYW4gc2F2ZSBhIGZldyBieXRlcyBieSBtYWtpbmcgQUxJR05fVFlQRSBzbWFsbGVyLgorICogeW91IGNhbiBzYXZlIGEgZmV3IGJ5dGVzIGJ5IG1ha2luZyBBTElHTl9TSVpFIHNtYWxsZXIuCiAgKiBUaGUgb25seSBwbGFjZSBJIGtub3cgb2Ygd2hlcmUgdGhpcyB3aWxsIE5PVCB3b3JrIGlzIGNlcnRhaW4gTWFjaW50b3NoCiAgKiA2ODB4MCBjb21waWxlcnMgdGhhdCBkZWZpbmUgZG91YmxlIGFzIGEgMTAtYnl0ZSBJRUVFIGV4dGVuZGVkIGZsb2F0LgogICogRG9pbmcgMTAtYnl0ZSBhbGlnbm1lbnQgaXMgY291bnRlcnByb2R1Y3RpdmUgYmVjYXVzZSBsb25nd29yZHMgd29uJ3QgYmUKLSAqIGFsaWduZWQgd2VsbC4gIFB1dCAiI2RlZmluZSBBTElHTl9UWVBFIGxvbmciIGluIGpjb25maWcuaCBpZiB5b3UgaGF2ZQorICogYWxpZ25lZCB3ZWxsLiAgUHV0ICIjZGVmaW5lIEFMSUdOX1NJWkUgNCIgaW4gamNvbmZpZy5oIGlmIHlvdSBoYXZlCiAgKiBzdWNoIGEgY29tcGlsZXIuCiAgKi8KIAotI2lmbmRlZiBBTElHTl9UWVBFCQkvKiBzbyBjYW4gb3ZlcnJpZGUgZnJvbSBqY29uZmlnLmggKi8KLSNkZWZpbmUgQUxJR05fVFlQRSAgZG91YmxlCisjaWZuZGVmIEFMSUdOX1NJWkUJCS8qIHNvIGNhbiBvdmVycmlkZSBmcm9tIGpjb25maWcuaCAqLworI2lmbmRlZiBXSVRIX1NJTUQKKyNkZWZpbmUgQUxJR05fU0laRSAgU0laRU9GKGRvdWJsZSkKKyNlbHNlCisjZGVmaW5lIEFMSUdOX1NJWkUgIDE2IC8qIE1vc3QgU0lNRCBpbXBsZW1lbnRhdGlvbnMgcmVxdWlyZSB0aGlzICovCiAjZW5kaWYKLQorI2VuZGlmCiAKIC8qCiAgKiBXZSBhbGxvY2F0ZSBvYmplY3RzIGZyb20gInBvb2xzIiwgd2hlcmUgZWFjaCBwb29sIGlzIGdvdHRlbiB3aXRoIGEgc2luZ2xlCkBAIC04MSwzNCArOTMsMjQgQEAKICAqIGhlYWRlciB3aXRoIGEgbGluayB0byB0aGUgbmV4dCBwb29sIG9mIHRoZSBzYW1lIGNsYXNzLgogICogU21hbGwgYW5kIGxhcmdlIHBvb2wgaGVhZGVycyBhcmUgaWRlbnRpY2FsIGV4Y2VwdCB0aGF0IHRoZSBsYXR0ZXIncwogICogbGluayBwb2ludGVyIG11c3QgYmUgRkFSIG9uIDgweDg2IG1hY2hpbmVzLgotICogTm90aWNlIHRoYXQgdGhlICJyZWFsIiBoZWFkZXIgZmllbGRzIGFyZSB1bmlvbidlZCB3aXRoIGEgZHVtbXkgQUxJR05fVFlQRQotICogZmllbGQuICBUaGlzIGZvcmNlcyB0aGUgY29tcGlsZXIgdG8gbWFrZSBTSVpFT0Yoc21hbGxfcG9vbF9oZHIpIGEgbXVsdGlwbGUKLSAqIG9mIHRoZSBhbGlnbm1lbnQgcmVxdWlyZW1lbnQgb2YgQUxJR05fVFlQRS4KICAqLwogCi10eXBlZGVmIHVuaW9uIHNtYWxsX3Bvb2xfc3RydWN0ICogc21hbGxfcG9vbF9wdHI7Cit0eXBlZGVmIHN0cnVjdCBzbWFsbF9wb29sX3N0cnVjdCAqIHNtYWxsX3Bvb2xfcHRyOwogCi10eXBlZGVmIHVuaW9uIHNtYWxsX3Bvb2xfc3RydWN0IHsKLSAgc3RydWN0IHsKLSAgICBzbWFsbF9wb29sX3B0ciBuZXh0OwkvKiBuZXh0IGluIGxpc3Qgb2YgcG9vbHMgKi8KLSAgICBzaXplX3QgYnl0ZXNfdXNlZDsJCS8qIGhvdyBtYW55IGJ5dGVzIGFscmVhZHkgdXNlZCB3aXRoaW4gcG9vbCAqLwotICAgIHNpemVfdCBieXRlc19sZWZ0OwkJLyogYnl0ZXMgc3RpbGwgYXZhaWxhYmxlIGluIHRoaXMgcG9vbCAqLwotICB9IGhkcjsKLSAgQUxJR05fVFlQRSBkdW1teTsJCS8qIGluY2x1ZGVkIGluIHVuaW9uIHRvIGVuc3VyZSBhbGlnbm1lbnQgKi8KK3R5cGVkZWYgc3RydWN0IHNtYWxsX3Bvb2xfc3RydWN0IHsKKyAgc21hbGxfcG9vbF9wdHIgbmV4dDsJLyogbmV4dCBpbiBsaXN0IG9mIHBvb2xzICovCisgIHNpemVfdCBieXRlc191c2VkOwkJLyogaG93IG1hbnkgYnl0ZXMgYWxyZWFkeSB1c2VkIHdpdGhpbiBwb29sICovCisgIHNpemVfdCBieXRlc19sZWZ0OwkJLyogYnl0ZXMgc3RpbGwgYXZhaWxhYmxlIGluIHRoaXMgcG9vbCAqLwogfSBzbWFsbF9wb29sX2hkcjsKIAotdHlwZWRlZiB1bmlvbiBsYXJnZV9wb29sX3N0cnVjdCBGQVIgKiBsYXJnZV9wb29sX3B0cjsKK3R5cGVkZWYgc3RydWN0IGxhcmdlX3Bvb2xfc3RydWN0IEZBUiAqIGxhcmdlX3Bvb2xfcHRyOwogCi10eXBlZGVmIHVuaW9uIGxhcmdlX3Bvb2xfc3RydWN0IHsKLSAgc3RydWN0IHsKLSAgICBsYXJnZV9wb29sX3B0ciBuZXh0OwkvKiBuZXh0IGluIGxpc3Qgb2YgcG9vbHMgKi8KLSAgICBzaXplX3QgYnl0ZXNfdXNlZDsJCS8qIGhvdyBtYW55IGJ5dGVzIGFscmVhZHkgdXNlZCB3aXRoaW4gcG9vbCAqLwotICAgIHNpemVfdCBieXRlc19sZWZ0OwkJLyogYnl0ZXMgc3RpbGwgYXZhaWxhYmxlIGluIHRoaXMgcG9vbCAqLwotICB9IGhkcjsKLSAgQUxJR05fVFlQRSBkdW1teTsJCS8qIGluY2x1ZGVkIGluIHVuaW9uIHRvIGVuc3VyZSBhbGlnbm1lbnQgKi8KK3R5cGVkZWYgc3RydWN0IGxhcmdlX3Bvb2xfc3RydWN0IHsKKyAgbGFyZ2VfcG9vbF9wdHIgbmV4dDsJLyogbmV4dCBpbiBsaXN0IG9mIHBvb2xzICovCisgIHNpemVfdCBieXRlc191c2VkOwkJLyogaG93IG1hbnkgYnl0ZXMgYWxyZWFkeSB1c2VkIHdpdGhpbiBwb29sICovCisgIHNpemVfdCBieXRlc19sZWZ0OwkJLyogYnl0ZXMgc3RpbGwgYXZhaWxhYmxlIGluIHRoaXMgcG9vbCAqLwogfSBsYXJnZV9wb29sX2hkcjsKIAotCiAvKgogICogSGVyZSBpcyB0aGUgZnVsbCBkZWZpbml0aW9uIG9mIGEgbWVtb3J5IG1hbmFnZXIgb2JqZWN0LgogICovCkBAIC0xMjksNyArMTMxLDcgQEAKICAganZpcnRfYmFycmF5X3B0ciB2aXJ0X2JhcnJheV9saXN0OwogCiAgIC8qIFRoaXMgY291bnRzIHRvdGFsIHNwYWNlIG9idGFpbmVkIGZyb20ganBlZ19nZXRfc21hbGwvbGFyZ2UgKi8KLSAgbG9uZyB0b3RhbF9zcGFjZV9hbGxvY2F0ZWQ7CisgIHNpemVfdCB0b3RhbF9zcGFjZV9hbGxvY2F0ZWQ7CiAKICAgLyogYWxsb2Nfc2FycmF5IGFuZCBhbGxvY19iYXJyYXkgc2V0IHRoaXMgdmFsdWUgZm9yIHVzZSBieSB2aXJ0dWFsCiAgICAqIGFycmF5IHJvdXRpbmVzLgpAQCAtMTk3LDE2ICsxOTksMTYgQEAKIAkgIHBvb2xfaWQsIG1lbS0+dG90YWxfc3BhY2VfYWxsb2NhdGVkKTsKIAogICBmb3IgKGxoZHJfcHRyID0gbWVtLT5sYXJnZV9saXN0W3Bvb2xfaWRdOyBsaGRyX3B0ciAhPSBOVUxMOwotICAgICAgIGxoZHJfcHRyID0gbGhkcl9wdHItPmhkci5uZXh0KSB7CisgICAgICAgbGhkcl9wdHIgPSBsaGRyX3B0ci0+bmV4dCkgewogICAgIGZwcmludGYoc3RkZXJyLCAiICBMYXJnZSBjaHVuayB1c2VkICVsZFxuIiwKLQkgICAgKGxvbmcpIGxoZHJfcHRyLT5oZHIuYnl0ZXNfdXNlZCk7CisJICAgIChsb25nKSBsaGRyX3B0ci0+Ynl0ZXNfdXNlZCk7CiAgIH0KIAogICBmb3IgKHNoZHJfcHRyID0gbWVtLT5zbWFsbF9saXN0W3Bvb2xfaWRdOyBzaGRyX3B0ciAhPSBOVUxMOwotICAgICAgIHNoZHJfcHRyID0gc2hkcl9wdHItPmhkci5uZXh0KSB7CisgICAgICAgc2hkcl9wdHIgPSBzaGRyX3B0ci0+bmV4dCkgewogICAgIGZwcmludGYoc3RkZXJyLCAiICBTbWFsbCBjaHVuayB1c2VkICVsZCBmcmVlICVsZFxuIiwKLQkgICAgKGxvbmcpIHNoZHJfcHRyLT5oZHIuYnl0ZXNfdXNlZCwKLQkgICAgKGxvbmcpIHNoZHJfcHRyLT5oZHIuYnl0ZXNfbGVmdCk7CisJICAgIChsb25nKSBzaGRyX3B0ci0+Ynl0ZXNfdXNlZCwKKwkgICAgKGxvbmcpIHNoZHJfcHRyLT5ieXRlc19sZWZ0KTsKICAgfQogfQogCkBAIC0yMzYsNiArMjM4LDEwIEBACiAgKiBhbmQgd2UgYWxzbyBkaXN0aW5ndWlzaCB0aGUgZmlyc3QgcG9vbCBvZiBhIGNsYXNzIGZyb20gbGF0ZXIgb25lcy4KICAqIE5PVEU6IHRoZSB2YWx1ZXMgZ2l2ZW4gd29yayBmYWlybHkgd2VsbCBvbiBib3RoIDE2LSBhbmQgMzItYml0LWludAogICogbWFjaGluZXMsIGJ1dCBtYXkgYmUgdG9vIHNtYWxsIGlmIGxvbmdzIGFyZSA2NCBiaXRzIG9yIG1vcmUuCisgKgorICogU2luY2Ugd2UgZG8gbm90IGtub3cgd2hhdCBhbGlnbm1lbnQgbWFsbG9jKCkgZ2l2ZXMgdXMsIHdlIGhhdmUgdG8KKyAqIGFsbG9jYXRlIEFMSUdOX1NJWkUtMSBleHRyYSBzcGFjZSBwZXIgcG9vbCB0byBoYXZlIHJvb20gZm9yIGFsaWdubWVudAorICogYWRqdXN0bWVudC4KICAqLwogCiBzdGF0aWMgY29uc3Qgc2l6ZV90IGZpcnN0X3Bvb2xfc2xvcFtKUE9PTF9OVU1QT09MU10gPSAKQEAgLTI2MCwzMyArMjY2LDM2IEBACiAgIG15X21lbV9wdHIgbWVtID0gKG15X21lbV9wdHIpIGNpbmZvLT5tZW07CiAgIHNtYWxsX3Bvb2xfcHRyIGhkcl9wdHIsIHByZXZfaGRyX3B0cjsKICAgY2hhciAqIGRhdGFfcHRyOwotICBzaXplX3Qgb2RkX2J5dGVzLCBtaW5fcmVxdWVzdCwgc2xvcDsKKyAgc2l6ZV90IG1pbl9yZXF1ZXN0LCBzbG9wOworCisgIC8qCisgICAqIFJvdW5kIHVwIHRoZSByZXF1ZXN0ZWQgc2l6ZSB0byBhIG11bHRpcGxlIG9mIEFMSUdOX1NJWkUgaW4gb3JkZXIKKyAgICogdG8gYXNzdXJlIGFsaWdubWVudCBmb3IgdGhlIG5leHQgb2JqZWN0IGFsbG9jYXRlZCBpbiB0aGUgc2FtZSBwb29sCisgICAqIGFuZCBzbyB0aGF0IGFsZ29yaXRobXMgY2FuIHN0cmFkZGxlIG91dHNpZGUgdGhlIHByb3BlciBhcmVhIHVwCisgICAqIHRvIHRoZSBuZXh0IGFsaWdubWVudC4KKyAgICovCisgIHNpemVvZm9iamVjdCA9IHJvdW5kX3VwX3BvdzIoc2l6ZW9mb2JqZWN0LCBBTElHTl9TSVpFKTsKIAogICAvKiBDaGVjayBmb3IgdW5zYXRpc2ZpYWJsZSByZXF1ZXN0IChkbyBub3cgdG8gZW5zdXJlIG5vIG92ZXJmbG93IGJlbG93KSAqLwotICBpZiAoc2l6ZW9mb2JqZWN0ID4gKHNpemVfdCkgKE1BWF9BTExPQ19DSFVOSy1TSVpFT0Yoc21hbGxfcG9vbF9oZHIpKSkKKyAgaWYgKChTSVpFT0Yoc21hbGxfcG9vbF9oZHIpICsgc2l6ZW9mb2JqZWN0ICsgQUxJR05fU0laRSAtIDEpID4gTUFYX0FMTE9DX0NIVU5LKQogICAgIG91dF9vZl9tZW1vcnkoY2luZm8sIDEpOwkvKiByZXF1ZXN0IGV4Y2VlZHMgbWFsbG9jJ3MgYWJpbGl0eSAqLwogCi0gIC8qIFJvdW5kIHVwIHRoZSByZXF1ZXN0ZWQgc2l6ZSB0byBhIG11bHRpcGxlIG9mIFNJWkVPRihBTElHTl9UWVBFKSAqLwotICBvZGRfYnl0ZXMgPSBzaXplb2ZvYmplY3QgJSBTSVpFT0YoQUxJR05fVFlQRSk7Ci0gIGlmIChvZGRfYnl0ZXMgPiAwKQotICAgIHNpemVvZm9iamVjdCArPSBTSVpFT0YoQUxJR05fVFlQRSkgLSBvZGRfYnl0ZXM7Ci0KICAgLyogU2VlIGlmIHNwYWNlIGlzIGF2YWlsYWJsZSBpbiBhbnkgZXhpc3RpbmcgcG9vbCAqLwogICBpZiAocG9vbF9pZCA8IDAgfHwgcG9vbF9pZCA+PSBKUE9PTF9OVU1QT09MUykKICAgICBFUlJFWElUMShjaW5mbywgSkVSUl9CQURfUE9PTF9JRCwgcG9vbF9pZCk7CS8qIHNhZmV0eSBjaGVjayAqLwogICBwcmV2X2hkcl9wdHIgPSBOVUxMOwogICBoZHJfcHRyID0gbWVtLT5zbWFsbF9saXN0W3Bvb2xfaWRdOwogICB3aGlsZSAoaGRyX3B0ciAhPSBOVUxMKSB7Ci0gICAgaWYgKGhkcl9wdHItPmhkci5ieXRlc19sZWZ0ID49IHNpemVvZm9iamVjdCkKKyAgICBpZiAoaGRyX3B0ci0+Ynl0ZXNfbGVmdCA+PSBzaXplb2ZvYmplY3QpCiAgICAgICBicmVhazsJCQkvKiBmb3VuZCBwb29sIHdpdGggZW5vdWdoIHNwYWNlICovCiAgICAgcHJldl9oZHJfcHRyID0gaGRyX3B0cjsKLSAgICBoZHJfcHRyID0gaGRyX3B0ci0+aGRyLm5leHQ7CisgICAgaGRyX3B0ciA9IGhkcl9wdHItPm5leHQ7CiAgIH0KIAogICAvKiBUaW1lIHRvIG1ha2UgYSBuZXcgcG9vbD8gKi8KICAgaWYgKGhkcl9wdHIgPT0gTlVMTCkgewogICAgIC8qIG1pbl9yZXF1ZXN0IGlzIHdoYXQgd2UgbmVlZCBub3csIHNsb3AgaXMgd2hhdCB3aWxsIGJlIGxlZnRvdmVyICovCi0gICAgbWluX3JlcXVlc3QgPSBzaXplb2ZvYmplY3QgKyBTSVpFT0Yoc21hbGxfcG9vbF9oZHIpOworICAgIG1pbl9yZXF1ZXN0ID0gU0laRU9GKHNtYWxsX3Bvb2xfaGRyKSArIHNpemVvZm9iamVjdCArIEFMSUdOX1NJWkUgLSAxOwogICAgIGlmIChwcmV2X2hkcl9wdHIgPT0gTlVMTCkJLyogZmlyc3QgcG9vbCBpbiBjbGFzcz8gKi8KICAgICAgIHNsb3AgPSBmaXJzdF9wb29sX3Nsb3BbcG9vbF9pZF07CiAgICAgZWxzZQpAQCAtMzA1LDIwICszMTQsMjMgQEAKICAgICB9CiAgICAgbWVtLT50b3RhbF9zcGFjZV9hbGxvY2F0ZWQgKz0gbWluX3JlcXVlc3QgKyBzbG9wOwogICAgIC8qIFN1Y2Nlc3MsIGluaXRpYWxpemUgdGhlIG5ldyBwb29sIGhlYWRlciBhbmQgYWRkIHRvIGVuZCBvZiBsaXN0ICovCi0gICAgaGRyX3B0ci0+aGRyLm5leHQgPSBOVUxMOwotICAgIGhkcl9wdHItPmhkci5ieXRlc191c2VkID0gMDsKLSAgICBoZHJfcHRyLT5oZHIuYnl0ZXNfbGVmdCA9IHNpemVvZm9iamVjdCArIHNsb3A7CisgICAgaGRyX3B0ci0+bmV4dCA9IE5VTEw7CisgICAgaGRyX3B0ci0+Ynl0ZXNfdXNlZCA9IDA7CisgICAgaGRyX3B0ci0+Ynl0ZXNfbGVmdCA9IHNpemVvZm9iamVjdCArIHNsb3A7CiAgICAgaWYgKHByZXZfaGRyX3B0ciA9PSBOVUxMKQkvKiBmaXJzdCBwb29sIGluIGNsYXNzPyAqLwogICAgICAgbWVtLT5zbWFsbF9saXN0W3Bvb2xfaWRdID0gaGRyX3B0cjsKICAgICBlbHNlCi0gICAgICBwcmV2X2hkcl9wdHItPmhkci5uZXh0ID0gaGRyX3B0cjsKKyAgICAgIHByZXZfaGRyX3B0ci0+bmV4dCA9IGhkcl9wdHI7CiAgIH0KIAogICAvKiBPSywgYWxsb2NhdGUgdGhlIG9iamVjdCBmcm9tIHRoZSBjdXJyZW50IHBvb2wgKi8KLSAgZGF0YV9wdHIgPSAoY2hhciAqKSAoaGRyX3B0ciArIDEpOyAvKiBwb2ludCB0byBmaXJzdCBkYXRhIGJ5dGUgaW4gcG9vbCAqLwotICBkYXRhX3B0ciArPSBoZHJfcHRyLT5oZHIuYnl0ZXNfdXNlZDsgLyogcG9pbnQgdG8gcGxhY2UgZm9yIG9iamVjdCAqLwotICBoZHJfcHRyLT5oZHIuYnl0ZXNfdXNlZCArPSBzaXplb2ZvYmplY3Q7Ci0gIGhkcl9wdHItPmhkci5ieXRlc19sZWZ0IC09IHNpemVvZm9iamVjdDsKKyAgZGF0YV9wdHIgPSAoY2hhciAqKSBoZHJfcHRyOyAvKiBwb2ludCB0byBmaXJzdCBkYXRhIGJ5dGUgaW4gcG9vbC4uLiAqLworICBkYXRhX3B0ciArPSBTSVpFT0Yoc21hbGxfcG9vbF9oZHIpOyAvKiAuLi5ieSBza2lwcGluZyB0aGUgaGVhZGVyLi4uICovCisgIGlmICgoc2l6ZV90KWRhdGFfcHRyICUgQUxJR05fU0laRSkgLyogLi4uYW5kIGFkanVzdCBmb3IgYWxpZ25tZW50ICovCisgICAgZGF0YV9wdHIgKz0gQUxJR05fU0laRSAtIChzaXplX3QpZGF0YV9wdHIgJSBBTElHTl9TSVpFOworICBkYXRhX3B0ciArPSBoZHJfcHRyLT5ieXRlc191c2VkOyAvKiBwb2ludCB0byBwbGFjZSBmb3Igb2JqZWN0ICovCisgIGhkcl9wdHItPmJ5dGVzX3VzZWQgKz0gc2l6ZW9mb2JqZWN0OworICBoZHJfcHRyLT5ieXRlc19sZWZ0IC09IHNpemVvZm9iamVjdDsKIAogICByZXR1cm4gKHZvaWQgKikgZGF0YV9wdHI7CiB9CkBAIC0zNDQsMzcgKzM1Niw0NSBAQAogewogICBteV9tZW1fcHRyIG1lbSA9IChteV9tZW1fcHRyKSBjaW5mby0+bWVtOwogICBsYXJnZV9wb29sX3B0ciBoZHJfcHRyOwotICBzaXplX3Qgb2RkX2J5dGVzOworICBjaGFyIEZBUiAqIGRhdGFfcHRyOworCisgIC8qCisgICAqIFJvdW5kIHVwIHRoZSByZXF1ZXN0ZWQgc2l6ZSB0byBhIG11bHRpcGxlIG9mIEFMSUdOX1NJWkUgc28gdGhhdAorICAgKiBhbGdvcml0aG1zIGNhbiBzdHJhZGRsZSBvdXRzaWRlIHRoZSBwcm9wZXIgYXJlYSB1cCB0byB0aGUgbmV4dAorICAgKiBhbGlnbm1lbnQuCisgICAqLworICBzaXplb2ZvYmplY3QgPSByb3VuZF91cF9wb3cyKHNpemVvZm9iamVjdCwgQUxJR05fU0laRSk7CiAKICAgLyogQ2hlY2sgZm9yIHVuc2F0aXNmaWFibGUgcmVxdWVzdCAoZG8gbm93IHRvIGVuc3VyZSBubyBvdmVyZmxvdyBiZWxvdykgKi8KLSAgaWYgKHNpemVvZm9iamVjdCA+IChzaXplX3QpIChNQVhfQUxMT0NfQ0hVTkstU0laRU9GKGxhcmdlX3Bvb2xfaGRyKSkpCisgIGlmICgoU0laRU9GKGxhcmdlX3Bvb2xfaGRyKSArIHNpemVvZm9iamVjdCArIEFMSUdOX1NJWkUgLSAxKSA+IE1BWF9BTExPQ19DSFVOSykKICAgICBvdXRfb2ZfbWVtb3J5KGNpbmZvLCAzKTsJLyogcmVxdWVzdCBleGNlZWRzIG1hbGxvYydzIGFiaWxpdHkgKi8KIAotICAvKiBSb3VuZCB1cCB0aGUgcmVxdWVzdGVkIHNpemUgdG8gYSBtdWx0aXBsZSBvZiBTSVpFT0YoQUxJR05fVFlQRSkgKi8KLSAgb2RkX2J5dGVzID0gc2l6ZW9mb2JqZWN0ICUgU0laRU9GKEFMSUdOX1RZUEUpOwotICBpZiAob2RkX2J5dGVzID4gMCkKLSAgICBzaXplb2ZvYmplY3QgKz0gU0laRU9GKEFMSUdOX1RZUEUpIC0gb2RkX2J5dGVzOwotCiAgIC8qIEFsd2F5cyBtYWtlIGEgbmV3IHBvb2wgKi8KICAgaWYgKHBvb2xfaWQgPCAwIHx8IHBvb2xfaWQgPj0gSlBPT0xfTlVNUE9PTFMpCiAgICAgRVJSRVhJVDEoY2luZm8sIEpFUlJfQkFEX1BPT0xfSUQsIHBvb2xfaWQpOwkvKiBzYWZldHkgY2hlY2sgKi8KIAogICBoZHJfcHRyID0gKGxhcmdlX3Bvb2xfcHRyKSBqcGVnX2dldF9sYXJnZShjaW5mbywgc2l6ZW9mb2JqZWN0ICsKLQkJCQkJICAgIFNJWkVPRihsYXJnZV9wb29sX2hkcikpOworCQkJCQkgICAgU0laRU9GKGxhcmdlX3Bvb2xfaGRyKSArCisJCQkJCSAgICBBTElHTl9TSVpFIC0gMSk7CiAgIGlmIChoZHJfcHRyID09IE5VTEwpCiAgICAgb3V0X29mX21lbW9yeShjaW5mbywgNCk7CS8qIGpwZWdfZ2V0X2xhcmdlIGZhaWxlZCAqLwotICBtZW0tPnRvdGFsX3NwYWNlX2FsbG9jYXRlZCArPSBzaXplb2ZvYmplY3QgKyBTSVpFT0YobGFyZ2VfcG9vbF9oZHIpOworICBtZW0tPnRvdGFsX3NwYWNlX2FsbG9jYXRlZCArPSBzaXplb2ZvYmplY3QgKyBTSVpFT0YobGFyZ2VfcG9vbF9oZHIpICsgQUxJR05fU0laRSAtIDE7CiAKICAgLyogU3VjY2VzcywgaW5pdGlhbGl6ZSB0aGUgbmV3IHBvb2wgaGVhZGVyIGFuZCBhZGQgdG8gbGlzdCAqLwotICBoZHJfcHRyLT5oZHIubmV4dCA9IG1lbS0+bGFyZ2VfbGlzdFtwb29sX2lkXTsKKyAgaGRyX3B0ci0+bmV4dCA9IG1lbS0+bGFyZ2VfbGlzdFtwb29sX2lkXTsKICAgLyogV2UgbWFpbnRhaW4gc3BhY2UgY291bnRzIGluIGVhY2ggcG9vbCBoZWFkZXIgZm9yIHN0YXRpc3RpY2FsIHB1cnBvc2VzLAogICAgKiBldmVuIHRob3VnaCB0aGV5IGFyZSBub3QgbmVlZGVkIGZvciBhbGxvY2F0aW9uLgogICAgKi8KLSAgaGRyX3B0ci0+aGRyLmJ5dGVzX3VzZWQgPSBzaXplb2ZvYmplY3Q7Ci0gIGhkcl9wdHItPmhkci5ieXRlc19sZWZ0ID0gMDsKKyAgaGRyX3B0ci0+Ynl0ZXNfdXNlZCA9IHNpemVvZm9iamVjdDsKKyAgaGRyX3B0ci0+Ynl0ZXNfbGVmdCA9IDA7CiAgIG1lbS0+bGFyZ2VfbGlzdFtwb29sX2lkXSA9IGhkcl9wdHI7CiAKLSAgcmV0dXJuICh2b2lkIEZBUiAqKSAoaGRyX3B0ciArIDEpOyAvKiBwb2ludCB0byBmaXJzdCBkYXRhIGJ5dGUgaW4gcG9vbCAqLworICBkYXRhX3B0ciA9IChjaGFyICopIGhkcl9wdHI7IC8qIHBvaW50IHRvIGZpcnN0IGRhdGEgYnl0ZSBpbiBwb29sLi4uICovCisgIGRhdGFfcHRyICs9IFNJWkVPRihzbWFsbF9wb29sX2hkcik7IC8qIC4uLmJ5IHNraXBwaW5nIHRoZSBoZWFkZXIuLi4gKi8KKyAgaWYgKChzaXplX3QpZGF0YV9wdHIgJSBBTElHTl9TSVpFKSAvKiAuLi5hbmQgYWRqdXN0IGZvciBhbGlnbm1lbnQgKi8KKyAgICBkYXRhX3B0ciArPSBBTElHTl9TSVpFIC0gKHNpemVfdClkYXRhX3B0ciAlIEFMSUdOX1NJWkU7CisKKyAgcmV0dXJuICh2b2lkIEZBUiAqKSBkYXRhX3B0cjsKIH0KIAogCkBAIC0zODksNiArNDA5LDEwIEBACiAgKiB0aGlzIGNodW5raW5nIG9mIHJvd3MuICBUaGUgcm93c3BlcmNodW5rIHZhbHVlIGlzIGxlZnQgaW4gdGhlIG1lbSBtYW5hZ2VyCiAgKiBvYmplY3Qgc28gdGhhdCBpdCBjYW4gYmUgc2F2ZWQgYXdheSBpZiB0aGlzIHNhcnJheSBpcyB0aGUgd29ya3NwYWNlIGZvcgogICogYSB2aXJ0dWFsIGFycmF5LgorICoKKyAqIFNpbmNlIHdlIGFyZSBvZnRlbiB1cHNhbXBsaW5nIHdpdGggYSBmYWN0b3IgMiwgd2UgYWxpZ24gdGhlIHNpemUgKG5vdAorICogdGhlIHN0YXJ0KSB0byAyICogQUxJR05fU0laRSBzbyB0aGF0IHRoZSB1cHNhbXBsaW5nIHJvdXRpbmVzIGRvbid0IGhhdmUKKyAqIHRvIGJlIGFzIGNhcmVmdWwgYWJvdXQgc2l6ZS4KICAqLwogCiBNRVRIT0RERUYoSlNBTVBBUlJBWSkKQEAgLTQwMiw2ICs0MjYsMTEgQEAKICAgSkRJTUVOU0lPTiByb3dzcGVyY2h1bmssIGN1cnJvdywgaTsKICAgbG9uZyBsdGVtcDsKIAorICAvKiBNYWtlIHN1cmUgZWFjaCByb3cgaXMgcHJvcGVybHkgYWxpZ25lZCAqLworICBpZiAoKEFMSUdOX1NJWkUgJSBTSVpFT0YoSlNBTVBMRSkpICE9IDApCisgICAgb3V0X29mX21lbW9yeShjaW5mbywgNSk7CS8qIHNhZmV0eSBjaGVjayAqLworICBzYW1wbGVzcGVycm93ID0gKEpESU1FTlNJT04pcm91bmRfdXBfcG93MihzYW1wbGVzcGVycm93LCAoMiAqIEFMSUdOX1NJWkUpIC8gU0laRU9GKEpTQU1QTEUpKTsKKwogICAvKiBDYWxjdWxhdGUgbWF4ICMgb2Ygcm93cyBhbGxvd2VkIGluIG9uZSBhbGxvY2F0aW9uIGNodW5rICovCiAgIGx0ZW1wID0gKE1BWF9BTExPQ19DSFVOSy1TSVpFT0YobGFyZ2VfcG9vbF9oZHIpKSAvCiAJICAoKGxvbmcpIHNhbXBsZXNwZXJyb3cgKiBTSVpFT0YoSlNBTVBMRSkpOwpAQCAtNDUwLDYgKzQ3OSwxMCBAQAogICBKRElNRU5TSU9OIHJvd3NwZXJjaHVuaywgY3Vycm93LCBpOwogICBsb25nIGx0ZW1wOwogCisgIC8qIE1ha2Ugc3VyZSBlYWNoIHJvdyBpcyBwcm9wZXJseSBhbGlnbmVkICovCisgIGlmICgoU0laRU9GKEpCTE9DSykgJSBBTElHTl9TSVpFKSAhPSAwKQorICAgIG91dF9vZl9tZW1vcnkoY2luZm8sIDYpOwkvKiBzYWZldHkgY2hlY2sgKi8KKwogICAvKiBDYWxjdWxhdGUgbWF4ICMgb2Ygcm93cyBhbGxvd2VkIGluIG9uZSBhbGxvY2F0aW9uIGNodW5rICovCiAgIGx0ZW1wID0gKE1BWF9BTExPQ19DSFVOSy1TSVpFT0YobGFyZ2VfcG9vbF9oZHIpKSAvCiAJICAoKGxvbmcpIGJsb2Nrc3BlcnJvdyAqIFNJWkVPRihKQkxPQ0spKTsKQEAgLTU4NCw4ICs2MTcsOCBAQAogLyogQWxsb2NhdGUgdGhlIGluLW1lbW9yeSBidWZmZXJzIGZvciBhbnkgdW5yZWFsaXplZCB2aXJ0dWFsIGFycmF5cyAqLwogewogICBteV9tZW1fcHRyIG1lbSA9IChteV9tZW1fcHRyKSBjaW5mby0+bWVtOwotICBsb25nIHNwYWNlX3Blcl9taW5oZWlnaHQsIG1heGltdW1fc3BhY2UsIGF2YWlsX21lbTsKLSAgbG9uZyBtaW5oZWlnaHRzLCBtYXhfbWluaGVpZ2h0czsKKyAgc2l6ZV90IHNwYWNlX3Blcl9taW5oZWlnaHQsIG1heGltdW1fc3BhY2UsIGF2YWlsX21lbTsKKyAgc2l6ZV90IG1pbmhlaWdodHMsIG1heF9taW5oZWlnaHRzOwogICBqdmlydF9zYXJyYXlfcHRyIHNwdHI7CiAgIGp2aXJ0X2JhcnJheV9wdHIgYnB0cjsKIApAQCAtOTY4LDkgKzEwMDEsOSBAQAogICBtZW0tPmxhcmdlX2xpc3RbcG9vbF9pZF0gPSBOVUxMOwogCiAgIHdoaWxlIChsaGRyX3B0ciAhPSBOVUxMKSB7Ci0gICAgbGFyZ2VfcG9vbF9wdHIgbmV4dF9saGRyX3B0ciA9IGxoZHJfcHRyLT5oZHIubmV4dDsKLSAgICBzcGFjZV9mcmVlZCA9IGxoZHJfcHRyLT5oZHIuYnl0ZXNfdXNlZCArCi0JCSAgbGhkcl9wdHItPmhkci5ieXRlc19sZWZ0ICsKKyAgICBsYXJnZV9wb29sX3B0ciBuZXh0X2xoZHJfcHRyID0gbGhkcl9wdHItPm5leHQ7CisgICAgc3BhY2VfZnJlZWQgPSBsaGRyX3B0ci0+Ynl0ZXNfdXNlZCArCisJCSAgbGhkcl9wdHItPmJ5dGVzX2xlZnQgKwogCQkgIFNJWkVPRihsYXJnZV9wb29sX2hkcik7CiAgICAganBlZ19mcmVlX2xhcmdlKGNpbmZvLCAodm9pZCBGQVIgKikgbGhkcl9wdHIsIHNwYWNlX2ZyZWVkKTsKICAgICBtZW0tPnRvdGFsX3NwYWNlX2FsbG9jYXRlZCAtPSBzcGFjZV9mcmVlZDsKQEAgLTk4Miw5ICsxMDE1LDkgQEAKICAgbWVtLT5zbWFsbF9saXN0W3Bvb2xfaWRdID0gTlVMTDsKIAogICB3aGlsZSAoc2hkcl9wdHIgIT0gTlVMTCkgewotICAgIHNtYWxsX3Bvb2xfcHRyIG5leHRfc2hkcl9wdHIgPSBzaGRyX3B0ci0+aGRyLm5leHQ7Ci0gICAgc3BhY2VfZnJlZWQgPSBzaGRyX3B0ci0+aGRyLmJ5dGVzX3VzZWQgKwotCQkgIHNoZHJfcHRyLT5oZHIuYnl0ZXNfbGVmdCArCisgICAgc21hbGxfcG9vbF9wdHIgbmV4dF9zaGRyX3B0ciA9IHNoZHJfcHRyLT5uZXh0OworICAgIHNwYWNlX2ZyZWVkID0gc2hkcl9wdHItPmJ5dGVzX3VzZWQgKworCQkgIHNoZHJfcHRyLT5ieXRlc19sZWZ0ICsKIAkJICBTSVpFT0Yoc21hbGxfcG9vbF9oZHIpOwogICAgIGpwZWdfZnJlZV9zbWFsbChjaW5mbywgKHZvaWQgKikgc2hkcl9wdHIsIHNwYWNlX2ZyZWVkKTsKICAgICBtZW0tPnRvdGFsX3NwYWNlX2FsbG9jYXRlZCAtPSBzcGFjZV9mcmVlZDsKQEAgLTEwNDEsMTYgKzEwNzQsMTYgQEAKICAgICogaW4gY29tbW9uIGlmIGFuZCBvbmx5IGlmIFggaXMgYSBwb3dlciBvZiAyLCBpZSBoYXMgb25seSBvbmUgb25lLWJpdC4KICAgICogU29tZSBjb21waWxlcnMgbWF5IGdpdmUgYW4gInVucmVhY2hhYmxlIGNvZGUiIHdhcm5pbmcgaGVyZTsgaWdub3JlIGl0LgogICAgKi8KLSAgaWYgKChTSVpFT0YoQUxJR05fVFlQRSkgJiAoU0laRU9GKEFMSUdOX1RZUEUpLTEpKSAhPSAwKQorICBpZiAoKEFMSUdOX1NJWkUgJiAoQUxJR05fU0laRS0xKSkgIT0gMCkKICAgICBFUlJFWElUKGNpbmZvLCBKRVJSX0JBRF9BTElHTl9UWVBFKTsKICAgLyogTUFYX0FMTE9DX0NIVU5LIG11c3QgYmUgcmVwcmVzZW50YWJsZSBhcyB0eXBlIHNpemVfdCwgYW5kIG11c3QgYmUKLSAgICogYSBtdWx0aXBsZSBvZiBTSVpFT0YoQUxJR05fVFlQRSkuCisgICAqIGEgbXVsdGlwbGUgb2YgQUxJR05fU0laRS4KICAgICogQWdhaW4sIGFuICJ1bnJlYWNoYWJsZSBjb2RlIiB3YXJuaW5nIG1heSBiZSBpZ25vcmVkIGhlcmUuCiAgICAqIEJ1dCBhICJjb25zdGFudCB0b28gbGFyZ2UiIHdhcm5pbmcgbWVhbnMgeW91IG5lZWQgdG8gZml4IE1BWF9BTExPQ19DSFVOSy4KICAgICovCiAgIHRlc3RfbWFjID0gKHNpemVfdCkgTUFYX0FMTE9DX0NIVU5LOwogICBpZiAoKGxvbmcpIHRlc3RfbWFjICE9IE1BWF9BTExPQ19DSFVOSyB8fAotICAgICAgKE1BWF9BTExPQ19DSFVOSyAlIFNJWkVPRihBTElHTl9UWVBFKSkgIT0gMCkKKyAgICAgIChNQVhfQUxMT0NfQ0hVTksgJSBBTElHTl9TSVpFKSAhPSAwKQogICAgIEVSUkVYSVQoY2luZm8sIEpFUlJfQkFEX0FMTE9DX0NIVU5LKTsKIAogICBtYXhfdG9fdXNlID0ganBlZ19tZW1faW5pdChjaW5mbyk7IC8qIHN5c3RlbS1kZXBlbmRlbnQgaW5pdGlhbGl6YXRpb24gKi8KZGlmZiAtLWdpdCBhL2ptZW1uYW1lLmMgYi9qbWVtbmFtZS5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlZDk2ZGVlLi4wMDAwMDAwCi0tLSBhL2ptZW1uYW1lLmMKKysrIC9kZXYvbnVsbApAQCAtMSwyNzYgKzAsMCBAQAotLyoKLSAqIGptZW1uYW1lLmMKLSAqCi0gKiBDb3B5cmlnaHQgKEMpIDE5OTItMTk5NywgVGhvbWFzIEcuIExhbmUuCi0gKiBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgSW5kZXBlbmRlbnQgSlBFRyBHcm91cCdzIHNvZnR3YXJlLgotICogRm9yIGNvbmRpdGlvbnMgb2YgZGlzdHJpYnV0aW9uIGFuZCB1c2UsIHNlZSB0aGUgYWNjb21wYW55aW5nIFJFQURNRSBmaWxlLgotICoKLSAqIFRoaXMgZmlsZSBwcm92aWRlcyBhIGdlbmVyaWMgaW1wbGVtZW50YXRpb24gb2YgdGhlIHN5c3RlbS1kZXBlbmRlbnQKLSAqIHBvcnRpb24gb2YgdGhlIEpQRUcgbWVtb3J5IG1hbmFnZXIuICBUaGlzIGltcGxlbWVudGF0aW9uIGFzc3VtZXMgdGhhdAotICogeW91IG11c3QgZXhwbGljaXRseSBjb25zdHJ1Y3QgYSBuYW1lIGZvciBlYWNoIHRlbXAgZmlsZS4KLSAqIEFsc28sIHRoZSBwcm9ibGVtIG9mIGRldGVybWluaW5nIHRoZSBhbW91bnQgb2YgbWVtb3J5IGF2YWlsYWJsZQotICogaXMgc2hvdmVkIG9udG8gdGhlIHVzZXIuCi0gKi8KLQotI2RlZmluZSBKUEVHX0lOVEVSTkFMUwotI2luY2x1ZGUgImppbmNsdWRlLmgiCi0jaW5jbHVkZSAianBlZ2xpYi5oIgotI2luY2x1ZGUgImptZW1zeXMuaCIJCS8qIGltcG9ydCB0aGUgc3lzdGVtLWRlcGVuZGVudCBkZWNsYXJhdGlvbnMgKi8KLQotI2lmbmRlZiBIQVZFX1NURExJQl9ICQkvKiA8c3RkbGliLmg+IHNob3VsZCBkZWNsYXJlIG1hbGxvYygpLGZyZWUoKSAqLwotZXh0ZXJuIHZvaWQgKiBtYWxsb2MgSlBQKChzaXplX3Qgc2l6ZSkpOwotZXh0ZXJuIHZvaWQgZnJlZSBKUFAoKHZvaWQgKnB0cikpOwotI2VuZGlmCi0KLSNpZm5kZWYgU0VFS19TRVQJCS8qIHByZS1BTlNJIHN5c3RlbXMgbWF5IG5vdCBkZWZpbmUgdGhpczsgKi8KLSNkZWZpbmUgU0VFS19TRVQgIDAJCS8qIGlmIG5vdCwgYXNzdW1lIDAgaXMgY29ycmVjdCAqLwotI2VuZGlmCi0KLSNpZmRlZiBET05UX1VTRV9CX01PREUJCS8qIGRlZmluZSBtb2RlIHBhcmFtZXRlcnMgZm9yIGZvcGVuKCkgKi8KLSNkZWZpbmUgUkVBRF9CSU5BUlkJInIiCi0jZGVmaW5lIFJXX0JJTkFSWQkidysiCi0jZWxzZQotI2lmZGVmIFZNUwkJCS8qIFZNUyBpcyB2ZXJ5IG5vbnN0YW5kYXJkICovCi0jZGVmaW5lIFJFQURfQklOQVJZCSJyYiIsICJjdHg9c3RtIgotI2RlZmluZSBSV19CSU5BUlkJIncrYiIsICJjdHg9c3RtIgotI2Vsc2UJCQkJLyogc3RhbmRhcmQgQU5TSS1jb21wbGlhbnQgY2FzZSAqLwotI2RlZmluZSBSRUFEX0JJTkFSWQkicmIiCi0jZGVmaW5lIFJXX0JJTkFSWQkidytiIgotI2VuZGlmCi0jZW5kaWYKLQotCi0vKgotICogU2VsZWN0aW9uIG9mIGEgZmlsZSBuYW1lIGZvciBhIHRlbXBvcmFyeSBmaWxlLgotICogVGhpcyBpcyBzeXN0ZW0tZGVwZW5kZW50IQotICoKLSAqIFRoZSBjb2RlIGFzIGdpdmVuIGlzIHN1aXRhYmxlIGZvciBtb3N0IFVuaXggc3lzdGVtcywgYW5kIGl0IGlzIGVhc2lseQotICogbW9kaWZpZWQgZm9yIG1vc3Qgbm9uLVVuaXggc3lzdGVtcy4gIFNvbWUgbm90ZXM6Ci0gKiAgMS4gIFRoZSB0ZW1wIGZpbGUgaXMgY3JlYXRlZCBpbiB0aGUgZGlyZWN0b3J5IG5hbWVkIGJ5IFRFTVBfRElSRUNUT1JZLgotICogICAgICBUaGUgZGVmYXVsdCB2YWx1ZSBpcyAvdXNyL3RtcCwgd2hpY2ggaXMgdGhlIGNvbnZlbnRpb25hbCBwbGFjZSBmb3IKLSAqICAgICAgY3JlYXRpbmcgbGFyZ2UgdGVtcCBmaWxlcyBvbiBVbml4LiAgT24gb3RoZXIgc3lzdGVtcyB5b3UnbGwgcHJvYmFibHkKLSAqICAgICAgd2FudCB0byBjaGFuZ2UgdGhlIGZpbGUgbG9jYXRpb24uICBZb3UgY2FuIGRvIHRoaXMgYnkgZWRpdGluZyB0aGUKLSAqICAgICAgI2RlZmluZSwgb3IgKHByZWZlcnJlZCkgYnkgZGVmaW5pbmcgVEVNUF9ESVJFQ1RPUlkgaW4gamNvbmZpZy5oLgotICoKLSAqICAyLiAgSWYgeW91IG5lZWQgdG8gY2hhbmdlIHRoZSBmaWxlIG5hbWUgYXMgd2VsbCBhcyBpdHMgbG9jYXRpb24sCi0gKiAgICAgIHlvdSBjYW4gb3ZlcnJpZGUgdGhlIFRFTVBfRklMRV9OQU1FIG1hY3JvLiAgKE5vdGUgdGhhdCB0aGlzIGlzCi0gKiAgICAgIGFjdHVhbGx5IGEgcHJpbnRmIGZvcm1hdCBzdHJpbmc7IGl0IG11c3QgY29udGFpbiAlcyBhbmQgJWQuKQotICogICAgICBGZXcgcGVvcGxlIHNob3VsZCBuZWVkIHRvIGRvIHRoaXMuCi0gKgotICogIDMuICBta3RlbXAoKSBpcyB1c2VkIHRvIGVuc3VyZSB0aGF0IG11bHRpcGxlIHByb2Nlc3NlcyBydW5uaW5nCi0gKiAgICAgIHNpbXVsdGFuZW91c2x5IHdvbid0IHNlbGVjdCB0aGUgc2FtZSBmaWxlIG5hbWVzLiAgSWYgeW91ciBzeXN0ZW0KLSAqICAgICAgZG9lc24ndCBoYXZlIG1rdGVtcCgpLCBkZWZpbmUgTk9fTUtURU1QIHRvIGRvIGl0IHRoZSBoYXJkIHdheS4KLSAqICAgICAgKElmIHlvdSBkb24ndCBoYXZlIDxlcnJuby5oPiwgYWxzbyBkZWZpbmUgTk9fRVJSTk9fSC4pCi0gKgotICogIDQuICBZb3UgcHJvYmFibHkgd2FudCB0byBkZWZpbmUgTkVFRF9TSUdOQUxfQ0FUQ0hFUiBzbyB0aGF0IGNqcGVnLmMvZGpwZWcuYwotICogICAgICB3aWxsIGNhdXNlIHRoZSB0ZW1wIGZpbGVzIHRvIGJlIHJlbW92ZWQgaWYgeW91IHN0b3AgdGhlIHByb2dyYW0gZWFybHkuCi0gKi8KLQotI2lmbmRlZiBURU1QX0RJUkVDVE9SWQkJLyogY2FuIG92ZXJyaWRlIGZyb20gamNvbmZpZy5oIG9yIE1ha2VmaWxlICovCi0jZGVmaW5lIFRFTVBfRElSRUNUT1JZICAiL3Vzci90bXAvIiAvKiByZWNvbW1lbmRlZCBzZXR0aW5nIGZvciBVbml4ICovCi0jZW5kaWYKLQotc3RhdGljIGludCBuZXh0X2ZpbGVfbnVtOwkvKiB0byBkaXN0aW5ndWlzaCBhbW9uZyBzZXZlcmFsIHRlbXAgZmlsZXMgKi8KLQotI2lmZGVmIE5PX01LVEVNUAotCi0jaWZuZGVmIFRFTVBfRklMRV9OQU1FCQkvKiBjYW4gb3ZlcnJpZGUgZnJvbSBqY29uZmlnLmggb3IgTWFrZWZpbGUgKi8KLSNkZWZpbmUgVEVNUF9GSUxFX05BTUUgICIlc0pQRyUwM2QuVE1QIgotI2VuZGlmCi0KLSNpZm5kZWYgTk9fRVJSTk9fSAotI2luY2x1ZGUgPGVycm5vLmg+CQkvKiB0byBkZWZpbmUgRU5PRU5UICovCi0jZW5kaWYKLQotLyogQU5TSSBDIHNwZWNpZmllcyB0aGF0IGVycm5vIGlzIGEgbWFjcm8sIGJ1dCBvbiBvbGRlciBzeXN0ZW1zIGl0J3MgbW9yZQotICogbGlrZWx5IHRvIGJlIGEgcGxhaW4gaW50IHZhcmlhYmxlLiAgQW5kIG5vdCBhbGwgdmVyc2lvbnMgb2YgZXJybm8uaAotICogYm90aGVyIHRvIGRlY2xhcmUgaXQsIHNvIHdlIGhhdmUgdG8gaW4gb3JkZXIgdG8gYmUgbW9zdCBwb3J0YWJsZS4gIFRodXM6Ci0gKi8KLSNpZm5kZWYgZXJybm8KLWV4dGVybiBpbnQgZXJybm87Ci0jZW5kaWYKLQotCi1MT0NBTCh2b2lkKQotc2VsZWN0X2ZpbGVfbmFtZSAoY2hhciAqIGZuYW1lKQotewotICBGSUxFICogdGZpbGU7Ci0KLSAgLyogS2VlcCBnZW5lcmF0aW5nIGZpbGUgbmFtZXMgdGlsbCB3ZSBmaW5kIG9uZSB0aGF0J3Mgbm90IGluIHVzZSAqLwotICBmb3IgKDs7KSB7Ci0gICAgbmV4dF9maWxlX251bSsrOwkJLyogYWR2YW5jZSBjb3VudGVyICovCi0gICAgc3ByaW50ZihmbmFtZSwgVEVNUF9GSUxFX05BTUUsIFRFTVBfRElSRUNUT1JZLCBuZXh0X2ZpbGVfbnVtKTsKLSAgICBpZiAoKHRmaWxlID0gZm9wZW4oZm5hbWUsIFJFQURfQklOQVJZKSkgPT0gTlVMTCkgewotICAgICAgLyogZm9wZW4gY291bGQgaGF2ZSBmYWlsZWQgZm9yIGEgcmVhc29uIG90aGVyIHRoYW4gdGhlIGZpbGUgbm90Ci0gICAgICAgKiBiZWluZyB0aGVyZTsgZm9yIGV4YW1wbGUsIGZpbGUgdGhlcmUgYnV0IHVucmVhZGFibGUuCi0gICAgICAgKiBJZiA8ZXJybm8uaD4gaXNuJ3QgYXZhaWxhYmxlLCB0aGVuIHdlIGNhbm5vdCB0ZXN0IHRoZSBjYXVzZS4KLSAgICAgICAqLwotI2lmZGVmIEVOT0VOVAotICAgICAgaWYgKGVycm5vICE9IEVOT0VOVCkKLQljb250aW51ZTsKLSNlbmRpZgotICAgICAgYnJlYWs7Ci0gICAgfQotICAgIGZjbG9zZSh0ZmlsZSk7CQkvKiBvb3BzLCBpdCdzIHRoZXJlOyBjbG9zZSB0ZmlsZSAmIHRyeSBhZ2FpbiAqLwotICB9Ci19Ci0KLSNlbHNlIC8qICEgTk9fTUtURU1QICovCi0KLS8qIE5vdGUgdGhhdCBta3RlbXAoKSByZXF1aXJlcyB0aGUgaW5pdGlhbCBmaWxlbmFtZSB0byBlbmQgaW4gc2l4IFgncyAqLwotI2lmbmRlZiBURU1QX0ZJTEVfTkFNRQkJLyogY2FuIG92ZXJyaWRlIGZyb20gamNvbmZpZy5oIG9yIE1ha2VmaWxlICovCi0jZGVmaW5lIFRFTVBfRklMRV9OQU1FICAiJXNKUEclZFhYWFhYWCIKLSNlbmRpZgotCi1MT0NBTCh2b2lkKQotc2VsZWN0X2ZpbGVfbmFtZSAoY2hhciAqIGZuYW1lKQotewotICBuZXh0X2ZpbGVfbnVtKys7CQkvKiBhZHZhbmNlIGNvdW50ZXIgKi8KLSAgc3ByaW50ZihmbmFtZSwgVEVNUF9GSUxFX05BTUUsIFRFTVBfRElSRUNUT1JZLCBuZXh0X2ZpbGVfbnVtKTsKLSAgbWt0ZW1wKGZuYW1lKTsJCS8qIG1ha2Ugc3VyZSBmaWxlIG5hbWUgaXMgdW5pcXVlICovCi0gIC8qIG1rdGVtcCByZXBsYWNlcyB0aGUgdHJhaWxpbmcgWFhYWFhYIHdpdGggYSB1bmlxdWUgc3RyaW5nIG9mIGNoYXJhY3RlcnMgKi8KLX0KLQotI2VuZGlmIC8qIE5PX01LVEVNUCAqLwotCi0KLS8qCi0gKiBNZW1vcnkgYWxsb2NhdGlvbiBhbmQgZnJlZWluZyBhcmUgY29udHJvbGxlZCBieSB0aGUgcmVndWxhciBsaWJyYXJ5Ci0gKiByb3V0aW5lcyBtYWxsb2MoKSBhbmQgZnJlZSgpLgotICovCi0KLUdMT0JBTCh2b2lkICopCi1qcGVnX2dldF9zbWFsbCAoal9jb21tb25fcHRyIGNpbmZvLCBzaXplX3Qgc2l6ZW9mb2JqZWN0KQotewotICByZXR1cm4gKHZvaWQgKikgbWFsbG9jKHNpemVvZm9iamVjdCk7Ci19Ci0KLUdMT0JBTCh2b2lkKQotanBlZ19mcmVlX3NtYWxsIChqX2NvbW1vbl9wdHIgY2luZm8sIHZvaWQgKiBvYmplY3QsIHNpemVfdCBzaXplb2ZvYmplY3QpCi17Ci0gIGZyZWUob2JqZWN0KTsKLX0KLQotCi0vKgotICogIkxhcmdlIiBvYmplY3RzIGFyZSB0cmVhdGVkIHRoZSBzYW1lIGFzICJzbWFsbCIgb25lcy4KLSAqIE5COiBhbHRob3VnaCB3ZSBpbmNsdWRlIEZBUiBrZXl3b3JkcyBpbiB0aGUgcm91dGluZSBkZWNsYXJhdGlvbnMsCi0gKiB0aGlzIGZpbGUgd29uJ3QgYWN0dWFsbHkgd29yayBpbiA4MHg4NiBzbWFsbC9tZWRpdW0gbW9kZWw7IGF0IGxlYXN0LAotICogeW91IHByb2JhYmx5IHdvbid0IGJlIGFibGUgdG8gcHJvY2VzcyB1c2VmdWwtc2l6ZSBpbWFnZXMgaW4gb25seSA2NEtCLgotICovCi0KLUdMT0JBTCh2b2lkIEZBUiAqKQotanBlZ19nZXRfbGFyZ2UgKGpfY29tbW9uX3B0ciBjaW5mbywgc2l6ZV90IHNpemVvZm9iamVjdCkKLXsKLSAgcmV0dXJuICh2b2lkIEZBUiAqKSBtYWxsb2Moc2l6ZW9mb2JqZWN0KTsKLX0KLQotR0xPQkFMKHZvaWQpCi1qcGVnX2ZyZWVfbGFyZ2UgKGpfY29tbW9uX3B0ciBjaW5mbywgdm9pZCBGQVIgKiBvYmplY3QsIHNpemVfdCBzaXplb2ZvYmplY3QpCi17Ci0gIGZyZWUob2JqZWN0KTsKLX0KLQotCi0vKgotICogVGhpcyByb3V0aW5lIGNvbXB1dGVzIHRoZSB0b3RhbCBtZW1vcnkgc3BhY2UgYXZhaWxhYmxlIGZvciBhbGxvY2F0aW9uLgotICogSXQncyBpbXBvc3NpYmxlIHRvIGRvIHRoaXMgaW4gYSBwb3J0YWJsZSB3YXk7IG91ciBjdXJyZW50IHNvbHV0aW9uIGlzCi0gKiB0byBtYWtlIHRoZSB1c2VyIHRlbGwgdXMgKHdpdGggYSBkZWZhdWx0IHZhbHVlIHNldCBhdCBjb21waWxlIHRpbWUpLgotICogSWYgeW91IGNhbiBhY3R1YWxseSBnZXQgdGhlIGF2YWlsYWJsZSBzcGFjZSwgaXQncyBhIGdvb2QgaWRlYSB0byBzdWJ0cmFjdAotICogYSBzbG9wIGZhY3RvciBvZiA1JSBvciBzby4KLSAqLwotCi0jaWZuZGVmIERFRkFVTFRfTUFYX01FTQkJLyogc28gY2FuIG92ZXJyaWRlIGZyb20gbWFrZWZpbGUgKi8KLSNkZWZpbmUgREVGQVVMVF9NQVhfTUVNCQkxMDAwMDAwTCAvKiBkZWZhdWx0OiBvbmUgbWVnYWJ5dGUgKi8KLSNlbmRpZgotCi1HTE9CQUwobG9uZykKLWpwZWdfbWVtX2F2YWlsYWJsZSAoal9jb21tb25fcHRyIGNpbmZvLCBsb25nIG1pbl9ieXRlc19uZWVkZWQsCi0JCSAgICBsb25nIG1heF9ieXRlc19uZWVkZWQsIGxvbmcgYWxyZWFkeV9hbGxvY2F0ZWQpCi17Ci0gIHJldHVybiBjaW5mby0+bWVtLT5tYXhfbWVtb3J5X3RvX3VzZSAtIGFscmVhZHlfYWxsb2NhdGVkOwotfQotCi0KLS8qCi0gKiBCYWNraW5nIHN0b3JlICh0ZW1wb3JhcnkgZmlsZSkgbWFuYWdlbWVudC4KLSAqIEJhY2tpbmcgc3RvcmUgb2JqZWN0cyBhcmUgb25seSB1c2VkIHdoZW4gdGhlIHZhbHVlIHJldHVybmVkIGJ5Ci0gKiBqcGVnX21lbV9hdmFpbGFibGUgaXMgbGVzcyB0aGFuIHRoZSB0b3RhbCBzcGFjZSBuZWVkZWQuICBZb3UgY2FuIGRpc3BlbnNlCi0gKiB3aXRoIHRoZXNlIHJvdXRpbmVzIGlmIHlvdSBoYXZlIHBsZW50eSBvZiB2aXJ0dWFsIG1lbW9yeTsgc2VlIGptZW1ub2JzLmMuCi0gKi8KLQotCi1NRVRIT0RERUYodm9pZCkKLXJlYWRfYmFja2luZ19zdG9yZSAoal9jb21tb25fcHRyIGNpbmZvLCBiYWNraW5nX3N0b3JlX3B0ciBpbmZvLAotCQkgICAgdm9pZCBGQVIgKiBidWZmZXJfYWRkcmVzcywKLQkJICAgIGxvbmcgZmlsZV9vZmZzZXQsIGxvbmcgYnl0ZV9jb3VudCkKLXsKLSAgaWYgKGZzZWVrKGluZm8tPnRlbXBfZmlsZSwgZmlsZV9vZmZzZXQsIFNFRUtfU0VUKSkKLSAgICBFUlJFWElUKGNpbmZvLCBKRVJSX1RGSUxFX1NFRUspOwotICBpZiAoSkZSRUFEKGluZm8tPnRlbXBfZmlsZSwgYnVmZmVyX2FkZHJlc3MsIGJ5dGVfY291bnQpCi0gICAgICAhPSAoc2l6ZV90KSBieXRlX2NvdW50KQotICAgIEVSUkVYSVQoY2luZm8sIEpFUlJfVEZJTEVfUkVBRCk7Ci19Ci0KLQotTUVUSE9EREVGKHZvaWQpCi13cml0ZV9iYWNraW5nX3N0b3JlIChqX2NvbW1vbl9wdHIgY2luZm8sIGJhY2tpbmdfc3RvcmVfcHRyIGluZm8sCi0JCSAgICAgdm9pZCBGQVIgKiBidWZmZXJfYWRkcmVzcywKLQkJICAgICBsb25nIGZpbGVfb2Zmc2V0LCBsb25nIGJ5dGVfY291bnQpCi17Ci0gIGlmIChmc2VlayhpbmZvLT50ZW1wX2ZpbGUsIGZpbGVfb2Zmc2V0LCBTRUVLX1NFVCkpCi0gICAgRVJSRVhJVChjaW5mbywgSkVSUl9URklMRV9TRUVLKTsKLSAgaWYgKEpGV1JJVEUoaW5mby0+dGVtcF9maWxlLCBidWZmZXJfYWRkcmVzcywgYnl0ZV9jb3VudCkKLSAgICAgICE9IChzaXplX3QpIGJ5dGVfY291bnQpCi0gICAgRVJSRVhJVChjaW5mbywgSkVSUl9URklMRV9XUklURSk7Ci19Ci0KLQotTUVUSE9EREVGKHZvaWQpCi1jbG9zZV9iYWNraW5nX3N0b3JlIChqX2NvbW1vbl9wdHIgY2luZm8sIGJhY2tpbmdfc3RvcmVfcHRyIGluZm8pCi17Ci0gIGZjbG9zZShpbmZvLT50ZW1wX2ZpbGUpOwkvKiBjbG9zZSB0aGUgZmlsZSAqLwotICB1bmxpbmsoaW5mby0+dGVtcF9uYW1lKTsJLyogZGVsZXRlIHRoZSBmaWxlICovCi0vKiBJZiB5b3VyIHN5c3RlbSBkb2Vzbid0IGhhdmUgdW5saW5rKCksIHVzZSByZW1vdmUoKSBpbnN0ZWFkLgotICogcmVtb3ZlKCkgaXMgdGhlIEFOU0ktc3RhbmRhcmQgbmFtZSBmb3IgdGhpcyBmdW5jdGlvbiwgYnV0IGlmCi0gKiB5b3VyIHN5c3RlbSB3YXMgQU5TSSB5b3UnZCBiZSB1c2luZyBqbWVtYW5zaS5jLCByaWdodD8KLSAqLwotICBUUkFDRU1TUyhjaW5mbywgMSwgSlRSQ19URklMRV9DTE9TRSwgaW5mby0+dGVtcF9uYW1lKTsKLX0KLQotCi0vKgotICogSW5pdGlhbCBvcGVuaW5nIG9mIGEgYmFja2luZy1zdG9yZSBvYmplY3QuCi0gKi8KLQotR0xPQkFMKHZvaWQpCi1qcGVnX29wZW5fYmFja2luZ19zdG9yZSAoal9jb21tb25fcHRyIGNpbmZvLCBiYWNraW5nX3N0b3JlX3B0ciBpbmZvLAotCQkJIGxvbmcgdG90YWxfYnl0ZXNfbmVlZGVkKQotewotICBzZWxlY3RfZmlsZV9uYW1lKGluZm8tPnRlbXBfbmFtZSk7Ci0gIGlmICgoaW5mby0+dGVtcF9maWxlID0gZm9wZW4oaW5mby0+dGVtcF9uYW1lLCBSV19CSU5BUlkpKSA9PSBOVUxMKQotICAgIEVSUkVYSVRTKGNpbmZvLCBKRVJSX1RGSUxFX0NSRUFURSwgaW5mby0+dGVtcF9uYW1lKTsKLSAgaW5mby0+cmVhZF9iYWNraW5nX3N0b3JlID0gcmVhZF9iYWNraW5nX3N0b3JlOwotICBpbmZvLT53cml0ZV9iYWNraW5nX3N0b3JlID0gd3JpdGVfYmFja2luZ19zdG9yZTsKLSAgaW5mby0+Y2xvc2VfYmFja2luZ19zdG9yZSA9IGNsb3NlX2JhY2tpbmdfc3RvcmU7Ci0gIFRSQUNFTVNTKGNpbmZvLCAxLCBKVFJDX1RGSUxFX09QRU4sIGluZm8tPnRlbXBfbmFtZSk7Ci19Ci0KLQotLyoKLSAqIFRoZXNlIHJvdXRpbmVzIHRha2UgY2FyZSBvZiBhbnkgc3lzdGVtLWRlcGVuZGVudCBpbml0aWFsaXphdGlvbiBhbmQKLSAqIGNsZWFudXAgcmVxdWlyZWQuCi0gKi8KLQotR0xPQkFMKGxvbmcpCi1qcGVnX21lbV9pbml0IChqX2NvbW1vbl9wdHIgY2luZm8pCi17Ci0gIG5leHRfZmlsZV9udW0gPSAwOwkJLyogaW5pdGlhbGl6ZSB0ZW1wIGZpbGUgbmFtZSBnZW5lcmF0b3IgKi8KLSAgcmV0dXJuIERFRkFVTFRfTUFYX01FTTsJLyogZGVmYXVsdCBmb3IgbWF4X21lbW9yeV90b191c2UgKi8KLX0KLQotR0xPQkFMKHZvaWQpCi1qcGVnX21lbV90ZXJtIChqX2NvbW1vbl9wdHIgY2luZm8pCi17Ci0gIC8qIG5vIHdvcmsgKi8KLX0KZGlmZiAtLWdpdCBhL2ptZW1ub2JzLmMgYi9qbWVtbm9icy5jCmluZGV4IGViOGMzMzcuLjM0YjE4OTUgMTAwNjQ0Ci0tLSBhL2ptZW1ub2JzLmMKKysrIGIvam1lbW5vYnMuYwpAQCAtNjksOSArNjksOSBAQAogICogSGVyZSB3ZSBhbHdheXMgc2F5LCAid2UgZ290IGFsbCB5b3Ugd2FudCBidWQhIgogICovCiAKLUdMT0JBTChsb25nKQotanBlZ19tZW1fYXZhaWxhYmxlIChqX2NvbW1vbl9wdHIgY2luZm8sIGxvbmcgbWluX2J5dGVzX25lZWRlZCwKLQkJICAgIGxvbmcgbWF4X2J5dGVzX25lZWRlZCwgbG9uZyBhbHJlYWR5X2FsbG9jYXRlZCkKK0dMT0JBTChzaXplX3QpCitqcGVnX21lbV9hdmFpbGFibGUgKGpfY29tbW9uX3B0ciBjaW5mbywgc2l6ZV90IG1pbl9ieXRlc19uZWVkZWQsCisJCSAgICBzaXplX3QgbWF4X2J5dGVzX25lZWRlZCwgc2l6ZV90IGFscmVhZHlfYWxsb2NhdGVkKQogewogICByZXR1cm4gbWF4X2J5dGVzX25lZWRlZDsKIH0KZGlmZiAtLWdpdCBhL2ptZW1zeXMuaCBiL2ptZW1zeXMuaAppbmRleCA2YzNjNmQzLi5iMTkwOTQ1IDEwMDY0NAotLS0gYS9qbWVtc3lzLmgKKysrIGIvam1lbXN5cy5oCkBAIC0xMDAsMTAgKzEwMCwxMCBAQAogICogQ29udmVyc2VseSwgemVybyBtYXkgYmUgcmV0dXJuZWQgdG8gYWx3YXlzIHVzZSB0aGUgbWluaW11bSBhbW91bnQgb2YgbWVtb3J5LgogICovCiAKLUVYVEVSTihsb25nKSBqcGVnX21lbV9hdmFpbGFibGUgSlBQKChqX2NvbW1vbl9wdHIgY2luZm8sCi0JCQkJICAgICBsb25nIG1pbl9ieXRlc19uZWVkZWQsCi0JCQkJICAgICBsb25nIG1heF9ieXRlc19uZWVkZWQsCi0JCQkJICAgICBsb25nIGFscmVhZHlfYWxsb2NhdGVkKSk7CitFWFRFUk4oc2l6ZV90KSBqcGVnX21lbV9hdmFpbGFibGUgSlBQKChqX2NvbW1vbl9wdHIgY2luZm8sCisJCQkJICAgICBzaXplX3QgbWluX2J5dGVzX25lZWRlZCwKKwkJCQkgICAgIHNpemVfdCBtYXhfYnl0ZXNfbmVlZGVkLAorCQkJCSAgICAgc2l6ZV90IGFscmVhZHlfYWxsb2NhdGVkKSk7CiAKIAogLyoKZGlmZiAtLWdpdCBhL2ptb3JlY2ZnLmggYi9qbW9yZWNmZy5oCmluZGV4IDkyOGQwNTIuLmMxNGE1ZjMgMTAwNjQ0Ci0tLSBhL2ptb3JlY2ZnLmgKKysrIGIvam1vcmVjZmcuaApAQCAtMiw3ICsyLDcgQEAKICAqIGptb3JlY2ZnLmgKICAqCiAgKiBDb3B5cmlnaHQgKEMpIDE5OTEtMTk5NywgVGhvbWFzIEcuIExhbmUuCi0gKiBNb2RpZmllZCAxOTk3LTIwMDkgYnkgR3VpZG8gVm9sbGJlZGluZy4KKyAqIENvcHlyaWdodCAoQykgMjAwOSwgRC4gUi4gQ29tbWFuZGVyLgogICogVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEluZGVwZW5kZW50IEpQRUcgR3JvdXAncyBzb2Z0d2FyZS4KICAqIEZvciBjb25kaXRpb25zIG9mIGRpc3RyaWJ1dGlvbiBhbmQgdXNlLCBzZWUgdGhlIGFjY29tcGFueWluZyBSRUFETUUgZmlsZS4KICAqCkBAIC02MywxMSArNjMsMTEgQEAKICNlbHNlIC8qIG5vdCBIQVZFX1VOU0lHTkVEX0NIQVIgKi8KIAogdHlwZWRlZiBjaGFyIEpTQU1QTEU7Ci0jaWZkZWYgQ0hBUl9JU19VTlNJR05FRAorI2lmZGVmIF9fQ0hBUl9VTlNJR05FRF9fCiAjZGVmaW5lIEdFVEpTQU1QTEUodmFsdWUpICAoKGludCkgKHZhbHVlKSkKICNlbHNlCiAjZGVmaW5lIEdFVEpTQU1QTEUodmFsdWUpICAoKGludCkgKHZhbHVlKSAmIDB4RkYpCi0jZW5kaWYgLyogQ0hBUl9JU19VTlNJR05FRCAqLworI2VuZGlmIC8qIF9fQ0hBUl9VTlNJR05FRF9fICovCiAKICNlbmRpZiAvKiBIQVZFX1VOU0lHTkVEX0NIQVIgKi8KIApAQCAtMTE0LDExICsxMTQsMTEgQEAKICNlbHNlIC8qIG5vdCBIQVZFX1VOU0lHTkVEX0NIQVIgKi8KIAogdHlwZWRlZiBjaGFyIEpPQ1RFVDsKLSNpZmRlZiBDSEFSX0lTX1VOU0lHTkVECisjaWZkZWYgX19DSEFSX1VOU0lHTkVEX18KICNkZWZpbmUgR0VUSk9DVEVUKHZhbHVlKSAgKHZhbHVlKQogI2Vsc2UKICNkZWZpbmUgR0VUSk9DVEVUKHZhbHVlKSAgKCh2YWx1ZSkgJiAweEZGKQotI2VuZGlmIC8qIENIQVJfSVNfVU5TSUdORUQgKi8KKyNlbmRpZiAvKiBfX0NIQVJfVU5TSUdORURfXyAqLwogCiAjZW5kaWYgLyogSEFWRV9VTlNJR05FRF9DSEFSICovCiAKQEAgLTEzNSwxMSArMTM1LDExIEBACiAjaWZkZWYgSEFWRV9VTlNJR05FRF9DSEFSCiB0eXBlZGVmIHVuc2lnbmVkIGNoYXIgVUlOVDg7CiAjZWxzZSAvKiBub3QgSEFWRV9VTlNJR05FRF9DSEFSICovCi0jaWZkZWYgQ0hBUl9JU19VTlNJR05FRAorI2lmZGVmIF9fQ0hBUl9VTlNJR05FRF9fCiB0eXBlZGVmIGNoYXIgVUlOVDg7Ci0jZWxzZSAvKiBub3QgQ0hBUl9JU19VTlNJR05FRCAqLworI2Vsc2UgLyogbm90IF9fQ0hBUl9VTlNJR05FRF9fICovCiB0eXBlZGVmIHNob3J0IFVJTlQ4OwotI2VuZGlmIC8qIENIQVJfSVNfVU5TSUdORUQgKi8KKyNlbmRpZiAvKiBfX0NIQVJfVU5TSUdORURfXyAqLwogI2VuZGlmIC8qIEhBVkVfVU5TSUdORURfQ0hBUiAqLwogCiAvKiBVSU5UMTYgbXVzdCBob2xkIGF0IGxlYXN0IHRoZSB2YWx1ZXMgMC4uNjU1MzUuICovCkBAIC0xNTksMTQgKzE1OSw4IEBACiAvKiBJTlQzMiBtdXN0IGhvbGQgYXQgbGVhc3Qgc2lnbmVkIDMyLWJpdCB2YWx1ZXMuICovCiAKICNpZm5kZWYgWE1EX0gJCQkvKiBYMTEveG1kLmggY29ycmVjdGx5IGRlZmluZXMgSU5UMzIgKi8KLSNpZm5kZWYgX0JBU0VUU0RfSF8JCS8qIE1pY3Jvc29mdCBkZWZpbmVzIGl0IGluIGJhc2V0c2QuaCAqLwotI2lmbmRlZiBfQkFTRVRTRF9ICQkvKiBNaW5HVyBpcyBzbGlnaHRseSBkaWZmZXJlbnQgKi8KLSNpZm5kZWYgUUdMT0JBTF9ICQkvKiBRdCBkZWZpbmVzIGl0IGluIHFnbG9iYWwuaCAqLwogdHlwZWRlZiBsb25nIElOVDMyOwogI2VuZGlmCi0jZW5kaWYKLSNlbmRpZgotI2VuZGlmCiAKIC8qIERhdGF0eXBlIHVzZWQgZm9yIGltYWdlIGRpbWVuc2lvbnMuICBUaGUgSlBFRyBzdGFuZGFyZCBvbmx5IHN1cHBvcnRzCiAgKiBpbWFnZXMgdXAgdG8gNjRLKjY0SyBkdWUgdG8gMTYtYml0IGZpZWxkcyBpbiBTT0YgbWFya2Vycy4gIFRoZXJlZm9yZQpAQCAtMjE2LDEzICsyMTAsMTEgQEAKICAqIGV4cGxpY2l0IGNvZGluZyBpcyBuZWVkZWQ7IHNlZSB1c2VzIG9mIHRoZSBORUVEX0ZBUl9QT0lOVEVSUyBzeW1ib2wuCiAgKi8KIAotI2lmbmRlZiBGQVIKICNpZmRlZiBORUVEX0ZBUl9QT0lOVEVSUwogI2RlZmluZSBGQVIgIGZhcgogI2Vsc2UKICNkZWZpbmUgRkFSCiAjZW5kaWYKLSNlbmRpZgogCiAKIC8qCkBAIC0yNzMsMTAgKzI2NSw4IEBACiAKIC8qIEVuY29kZXIgY2FwYWJpbGl0eSBvcHRpb25zOiAqLwogCi0jZGVmaW5lIENfQVJJVEhfQ09ESU5HX1NVUFBPUlRFRCAgICAvKiBBcml0aG1ldGljIGNvZGluZyBiYWNrIGVuZD8gKi8KICNkZWZpbmUgQ19NVUxUSVNDQU5fRklMRVNfU1VQUE9SVEVEIC8qIE11bHRpcGxlLXNjYW4gSlBFRyBmaWxlcz8gKi8KICNkZWZpbmUgQ19QUk9HUkVTU0lWRV9TVVBQT1JURUQJICAgIC8qIFByb2dyZXNzaXZlIEpQRUc/IChSZXF1aXJlcyBNVUxUSVNDQU4pKi8KLSNkZWZpbmUgRENUX1NDQUxJTkdfU1VQUE9SVEVECSAgICAvKiBJbnB1dCByZXNjYWxpbmcgdmlhIERDVD8gKFJlcXVpcmVzIERDVF9JU0xPVykqLwogI2RlZmluZSBFTlRST1BZX09QVF9TVVBQT1JURUQJICAgIC8qIE9wdGltaXphdGlvbiBvZiBlbnRyb3B5IGNvZGluZyBwYXJtcz8gKi8KIC8qIE5vdGU6IGlmIHlvdSBzZWxlY3RlZCAxMi1iaXQgZGF0YSBwcmVjaXNpb24sIGl0IGlzIGRhbmdlcm91cyB0byB0dXJuIG9mZgogICogRU5UUk9QWV9PUFRfU1VQUE9SVEVELiAgVGhlIHN0YW5kYXJkIEh1ZmZtYW4gdGFibGVzIGFyZSBvbmx5IGdvb2QgZm9yIDgtYml0CkBAIC0yOTAsMTIgKzI4MCwxMSBAQAogCiAvKiBEZWNvZGVyIGNhcGFiaWxpdHkgb3B0aW9uczogKi8KIAotI2RlZmluZSBEX0FSSVRIX0NPRElOR19TVVBQT1JURUQgICAgLyogQXJpdGhtZXRpYyBjb2RpbmcgYmFjayBlbmQ/ICovCiAjZGVmaW5lIERfTVVMVElTQ0FOX0ZJTEVTX1NVUFBPUlRFRCAvKiBNdWx0aXBsZS1zY2FuIEpQRUcgZmlsZXM/ICovCiAjZGVmaW5lIERfUFJPR1JFU1NJVkVfU1VQUE9SVEVECSAgICAvKiBQcm9ncmVzc2l2ZSBKUEVHPyAoUmVxdWlyZXMgTVVMVElTQ0FOKSovCi0jZGVmaW5lIElEQ1RfU0NBTElOR19TVVBQT1JURUQJICAgIC8qIE91dHB1dCByZXNjYWxpbmcgdmlhIElEQ1Q/ICovCiAjZGVmaW5lIFNBVkVfTUFSS0VSU19TVVBQT1JURUQJICAgIC8qIGpwZWdfc2F2ZV9tYXJrZXJzKCkgbmVlZGVkPyAqLwogI2RlZmluZSBCTE9DS19TTU9PVEhJTkdfU1VQUE9SVEVEICAgLyogQmxvY2sgc21vb3RoaW5nPyAoUHJvZ3Jlc3NpdmUgb25seSkgKi8KKyNkZWZpbmUgSURDVF9TQ0FMSU5HX1NVUFBPUlRFRAkgICAgLyogT3V0cHV0IHJlc2NhbGluZyB2aWEgSURDVD8gKi8KICN1bmRlZiAgVVBTQU1QTEVfU0NBTElOR19TVVBQT1JURUQgIC8qIE91dHB1dCByZXNjYWxpbmcgYXQgdXBzYW1wbGUgc3RhZ2U/ICovCiAjZGVmaW5lIFVQU0FNUExFX01FUkdJTkdfU1VQUE9SVEVEICAvKiBGYXN0IHBhdGggZm9yIHNsb3BweSB1cHNhbXBsaW5nPyAqLwogI2RlZmluZSBRVUFOVF8xUEFTU19TVVBQT1JURUQJICAgIC8qIDEtcGFzcyBjb2xvciBxdWFudGl6YXRpb24/ICovCkBAIC0zMjQsMzEgKzMxMywzNyBAQAogI2RlZmluZSBSR0JfQkxVRQkyCS8qIE9mZnNldCBvZiBCbHVlICovCiAjZGVmaW5lIFJHQl9QSVhFTFNJWkUJMwkvKiBKU0FNUExFcyBwZXIgUkdCIHNjYW5saW5lIGVsZW1lbnQgKi8KIAorI2RlZmluZSBKUEVHX05VTUNTIDEyCisKK3N0YXRpYyBjb25zdCBpbnQgcmdiX3JlZFtKUEVHX05VTUNTXSA9IHsKKwktMSwgLTEsIFJHQl9SRUQsIC0xLCAtMSwgLTEsIDAsIDAsIDIsIDIsIDMsIDEKK307CisKK3N0YXRpYyBjb25zdCBpbnQgcmdiX2dyZWVuW0pQRUdfTlVNQ1NdID0geworCS0xLCAtMSwgUkdCX0dSRUVOLCAtMSwgLTEsIC0xLCAxLCAxLCAxLCAxLCAyLCAyCit9OworCitzdGF0aWMgY29uc3QgaW50IHJnYl9ibHVlW0pQRUdfTlVNQ1NdID0geworCS0xLCAtMSwgUkdCX0JMVUUsIC0xLCAtMSwgLTEsIDIsIDIsIDAsIDAsIDEsIDMKK307CisKK3N0YXRpYyBjb25zdCBpbnQgcmdiX3BpeGVsc2l6ZVtKUEVHX05VTUNTXSA9IHsKKwktMSwgLTEsIFJHQl9QSVhFTFNJWkUsIC0xLCAtMSwgLTEsIDMsIDQsIDMsIDQsIDQsIDQKK307CiAKIC8qIERlZmluaXRpb25zIGZvciBzcGVlZC1yZWxhdGVkIG9wdGltaXphdGlvbnMuICovCiAKLQotLyogSWYgeW91ciBjb21waWxlciBzdXBwb3J0cyBpbmxpbmUgZnVuY3Rpb25zLCBkZWZpbmUgSU5MSU5FCi0gKiBhcyB0aGUgaW5saW5lIGtleXdvcmQ7IG90aGVyd2lzZSBkZWZpbmUgaXQgYXMgZW1wdHkuCi0gKi8KLQotI2lmbmRlZiBJTkxJTkUKLSNpZmRlZiBfX0dOVUNfXwkJCS8qIGZvciBpbnN0YW5jZSwgR05VIEMga25vd3MgYWJvdXQgaW5saW5lICovCi0jZGVmaW5lIElOTElORSBfX2lubGluZV9fCi0jZW5kaWYKLSNpZm5kZWYgSU5MSU5FCi0jZGVmaW5lIElOTElORQkJCS8qIGRlZmF1bHQgaXMgdG8gZGVmaW5lIGl0IGFzIGVtcHR5ICovCi0jZW5kaWYKLSNlbmRpZgotCi0KIC8qIE9uIHNvbWUgbWFjaGluZXMgKG5vdGFibHkgNjgwMDAgc2VyaWVzKSAiaW50IiBpcyAzMiBiaXRzLCBidXQgbXVsdGlwbHlpbmcKICAqIHR3byAxNi1iaXQgc2hvcnRzIGlzIGZhc3RlciB0aGFuIG11bHRpcGx5aW5nIHR3byBpbnRzLiAgRGVmaW5lIE1VTFRJUExJRVIKICAqIGFzIHNob3J0IG9uIHN1Y2ggYSBtYWNoaW5lLiAgTVVMVElQTElFUiBtdXN0IGJlIGF0IGxlYXN0IDE2IGJpdHMgd2lkZS4KICAqLwogCiAjaWZuZGVmIE1VTFRJUExJRVIKKyNpZm5kZWYgV0lUSF9TSU1ECiAjZGVmaW5lIE1VTFRJUExJRVIgIGludAkJLyogdHlwZSBmb3IgZmFzdGVzdCBpbnRlZ2VyIG11bHRpcGx5ICovCisjZWxzZQorI2RlZmluZSBNVUxUSVBMSUVSIHNob3J0ICAvKiBwcmVmZXIgMTYtYml0IHdpdGggU0lNRCBmb3IgcGFyZWxsZWxpc20gKi8KKyNlbmRpZgogI2VuZGlmCiAKIApkaWZmIC0tZ2l0IGEvanBlZ2NvbXAuaCBiL2pwZWdjb21wLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMWI5ZTBhNAotLS0gL2Rldi9udWxsCisrKyBiL2pwZWdjb21wLmgKQEAgLTAsMCArMSwyNiBAQAorLyoKKyAqIGpwZWdjb21wLmgKKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMTAsIEQuIFIuIENvbW1hbmRlcgorICogRm9yIGNvbmRpdGlvbnMgb2YgZGlzdHJpYnV0aW9uIGFuZCB1c2UsIHNlZSB0aGUgYWNjb21wYW55aW5nIFJFQURNRSBmaWxlLgorICoKKyAqIEpQRUcgY29tcGF0aWJpbGl0eSBtYWNyb3MKKyAqIFRoZXNlIGRlY2xhcmF0aW9ucyBhcmUgY29uc2lkZXJlZCBpbnRlcm5hbCB0byB0aGUgSlBFRyBsaWJyYXJ5OyBtb3N0CisgKiBhcHBsaWNhdGlvbnMgdXNpbmcgdGhlIGxpYnJhcnkgc2hvdWxkbid0IG5lZWQgdG8gaW5jbHVkZSB0aGlzIGZpbGUuCisgKi8KKworI2lmIEpQRUdfTElCX1ZFUlNJT04gPj0gNzAKKyNkZWZpbmUgX0RDVF9zY2FsZWRfc2l6ZSBEQ1RfaF9zY2FsZWRfc2l6ZQorI2RlZmluZSBfbWluX0RDVF9zY2FsZWRfc2l6ZSBtaW5fRENUX2hfc2NhbGVkX3NpemUKKyNkZWZpbmUgX21pbl9EQ1RfaF9zY2FsZWRfc2l6ZSBtaW5fRENUX2hfc2NhbGVkX3NpemUKKyNkZWZpbmUgX21pbl9EQ1Rfdl9zY2FsZWRfc2l6ZSBtaW5fRENUX3Zfc2NhbGVkX3NpemUKKyNkZWZpbmUgX2pwZWdfd2lkdGgganBlZ193aWR0aAorI2RlZmluZSBfanBlZ19oZWlnaHQganBlZ19oZWlnaHQKKyNlbHNlCisjZGVmaW5lIF9EQ1Rfc2NhbGVkX3NpemUgRENUX3NjYWxlZF9zaXplCisjZGVmaW5lIF9taW5fRENUX3NjYWxlZF9zaXplIG1pbl9EQ1Rfc2NhbGVkX3NpemUKKyNkZWZpbmUgX21pbl9EQ1RfaF9zY2FsZWRfc2l6ZSBtaW5fRENUX3NjYWxlZF9zaXplCisjZGVmaW5lIF9taW5fRENUX3Zfc2NhbGVkX3NpemUgbWluX0RDVF9zY2FsZWRfc2l6ZQorI2RlZmluZSBfanBlZ193aWR0aCBpbWFnZV93aWR0aAorI2RlZmluZSBfanBlZ19oZWlnaHQgaW1hZ2VfaGVpZ2h0CisjZW5kaWYKZGlmZiAtLWdpdCBhL2pwZWdpbnQuaCBiL2pwZWdpbnQuaAppbmRleCAwYzI3YTRlLi43ODcxNzQ4IDEwMDY0NAotLS0gYS9qcGVnaW50LmgKKysrIGIvanBlZ2ludC5oCkBAIC0xMDAsMTYgKzEwMCwxNCBAQAogfTsKIAogLyogRm9yd2FyZCBEQ1QgKGFsc28gY29udHJvbHMgY29lZmZpY2llbnQgcXVhbnRpemF0aW9uKSAqLwotdHlwZWRlZiBKTUVUSE9EKHZvaWQsIGZvcndhcmRfRENUX3B0ciwKLQkJKGpfY29tcHJlc3NfcHRyIGNpbmZvLCBqcGVnX2NvbXBvbmVudF9pbmZvICogY29tcHB0ciwKLQkJIEpTQU1QQVJSQVkgc2FtcGxlX2RhdGEsIEpCTE9DS1JPVyBjb2VmX2Jsb2NrcywKLQkJIEpESU1FTlNJT04gc3RhcnRfcm93LCBKRElNRU5TSU9OIHN0YXJ0X2NvbCwKLQkJIEpESU1FTlNJT04gbnVtX2Jsb2NrcykpOwotCiBzdHJ1Y3QganBlZ19mb3J3YXJkX2RjdCB7CiAgIEpNRVRIT0Qodm9pZCwgc3RhcnRfcGFzcywgKGpfY29tcHJlc3NfcHRyIGNpbmZvKSk7Ci0gIC8qIEl0IGlzIHVzZWZ1bCB0byBhbGxvdyBlYWNoIGNvbXBvbmVudCB0byBoYXZlIGEgc2VwYXJhdGUgRkRDVCBtZXRob2QuICovCi0gIGZvcndhcmRfRENUX3B0ciBmb3J3YXJkX0RDVFtNQVhfQ09NUE9ORU5UU107CisgIC8qIHBlcmhhcHMgdGhpcyBzaG91bGQgYmUgYW4gYXJyYXk/Pz8gKi8KKyAgSk1FVEhPRCh2b2lkLCBmb3J3YXJkX0RDVCwgKGpfY29tcHJlc3NfcHRyIGNpbmZvLAorCQkJICAgICAganBlZ19jb21wb25lbnRfaW5mbyAqIGNvbXBwdHIsCisJCQkgICAgICBKU0FNUEFSUkFZIHNhbXBsZV9kYXRhLCBKQkxPQ0tST1cgY29lZl9ibG9ja3MsCisJCQkgICAgICBKRElNRU5TSU9OIHN0YXJ0X3JvdywgSkRJTUVOU0lPTiBzdGFydF9jb2wsCisJCQkgICAgICBKRElNRU5TSU9OIG51bV9ibG9ja3MpKTsKIH07CiAKIC8qIEVudHJvcHkgZW5jb2RpbmcgKi8KQEAgLTIxMyw2ICsyMTEsMTAgQEAKICAgSk1FVEhPRCh2b2lkLCBzdGFydF9wYXNzLCAoal9kZWNvbXByZXNzX3B0ciBjaW5mbykpOwogICBKTUVUSE9EKGJvb2xlYW4sIGRlY29kZV9tY3UsIChqX2RlY29tcHJlc3NfcHRyIGNpbmZvLAogCQkJCUpCTE9DS1JPVyAqTUNVX2RhdGEpKTsKKworICAvKiBUaGlzIGlzIGhlcmUgdG8gc2hhcmUgY29kZSBiZXR3ZWVuIGJhc2VsaW5lIGFuZCBwcm9ncmVzc2l2ZSBkZWNvZGVyczsgKi8KKyAgLyogb3RoZXIgbW9kdWxlcyBwcm9iYWJseSBzaG91bGQgbm90IHVzZSBpdCAqLworICBib29sZWFuIGluc3VmZmljaWVudF9kYXRhOwkvKiBzZXQgVFJVRSBhZnRlciBlbWl0dGluZyB3YXJuaW5nICovCiB9OwogCiAvKiBJbnZlcnNlIERDVCAoYWxzbyBwZXJmb3JtcyBkZXF1YW50aXphdGlvbikgKi8KQEAgLTMwMiw2ICszMDQsNyBAQAogI2RlZmluZSBqaW5pdF9kb3duc2FtcGxlcglqSURvd25zYW1wbGVyCiAjZGVmaW5lIGppbml0X2ZvcndhcmRfZGN0CWpJRkRDVAogI2RlZmluZSBqaW5pdF9odWZmX2VuY29kZXIJaklIRW5jb2RlcgorI2RlZmluZSBqaW5pdF9waHVmZl9lbmNvZGVyCWpJUEhFbmNvZGVyCiAjZGVmaW5lIGppbml0X2FyaXRoX2VuY29kZXIJaklBRW5jb2RlcgogI2RlZmluZSBqaW5pdF9tYXJrZXJfd3JpdGVyCWpJTVdyaXRlcgogI2RlZmluZSBqaW5pdF9tYXN0ZXJfZGVjb21wcmVzcwlqSURNYXN0ZXIKQEAgLTMxMSw2ICszMTQsNyBAQAogI2RlZmluZSBqaW5pdF9pbnB1dF9jb250cm9sbGVyCWpJSW5DdGxyCiAjZGVmaW5lIGppbml0X21hcmtlcl9yZWFkZXIJaklNUmVhZGVyCiAjZGVmaW5lIGppbml0X2h1ZmZfZGVjb2RlcglqSUhEZWNvZGVyCisjZGVmaW5lIGppbml0X3BodWZmX2RlY29kZXIJaklQSERlY29kZXIKICNkZWZpbmUgamluaXRfYXJpdGhfZGVjb2RlcglqSUFEZWNvZGVyCiAjZGVmaW5lIGppbml0X2ludmVyc2VfZGN0CWpJSURDVAogI2RlZmluZSBqaW5pdF91cHNhbXBsZXIJCWpJVXBzYW1wbGVyCkBAIC0zMjYsMTIgKzMzMCw2IEBACiAjZGVmaW5lIGp6ZXJvX2ZhcgkJalplcm9GYXIKICNkZWZpbmUganBlZ196aWd6YWdfb3JkZXIJalpJR1RhYmxlCiAjZGVmaW5lIGpwZWdfbmF0dXJhbF9vcmRlcglqWkFHVGFibGUKLSNkZWZpbmUganBlZ19uYXR1cmFsX29yZGVyNwlqWkFHVGFibGU3Ci0jZGVmaW5lIGpwZWdfbmF0dXJhbF9vcmRlcjYJalpBR1RhYmxlNgotI2RlZmluZSBqcGVnX25hdHVyYWxfb3JkZXI1CWpaQUdUYWJsZTUKLSNkZWZpbmUganBlZ19uYXR1cmFsX29yZGVyNAlqWkFHVGFibGU0Ci0jZGVmaW5lIGpwZWdfbmF0dXJhbF9vcmRlcjMJalpBR1RhYmxlMwotI2RlZmluZSBqcGVnX25hdHVyYWxfb3JkZXIyCWpaQUdUYWJsZTIKICNkZWZpbmUganBlZ19hcml0YWIJCWpBcmlUYWIKICNlbmRpZiAvKiBORUVEX1NIT1JUX0VYVEVSTkFMX05BTUVTICovCiAKQEAgLTM1MCw2ICszNDgsNyBAQAogRVhURVJOKHZvaWQpIGppbml0X2Rvd25zYW1wbGVyIEpQUCgoal9jb21wcmVzc19wdHIgY2luZm8pKTsKIEVYVEVSTih2b2lkKSBqaW5pdF9mb3J3YXJkX2RjdCBKUFAoKGpfY29tcHJlc3NfcHRyIGNpbmZvKSk7CiBFWFRFUk4odm9pZCkgamluaXRfaHVmZl9lbmNvZGVyIEpQUCgoal9jb21wcmVzc19wdHIgY2luZm8pKTsKK0VYVEVSTih2b2lkKSBqaW5pdF9waHVmZl9lbmNvZGVyIEpQUCgoal9jb21wcmVzc19wdHIgY2luZm8pKTsKIEVYVEVSTih2b2lkKSBqaW5pdF9hcml0aF9lbmNvZGVyIEpQUCgoal9jb21wcmVzc19wdHIgY2luZm8pKTsKIEVYVEVSTih2b2lkKSBqaW5pdF9tYXJrZXJfd3JpdGVyIEpQUCgoal9jb21wcmVzc19wdHIgY2luZm8pKTsKIC8qIERlY29tcHJlc3Npb24gbW9kdWxlIGluaXRpYWxpemF0aW9uIHJvdXRpbmVzICovCkBAIC0zNjMsNiArMzYyLDcgQEAKIEVYVEVSTih2b2lkKSBqaW5pdF9pbnB1dF9jb250cm9sbGVyIEpQUCgoal9kZWNvbXByZXNzX3B0ciBjaW5mbykpOwogRVhURVJOKHZvaWQpIGppbml0X21hcmtlcl9yZWFkZXIgSlBQKChqX2RlY29tcHJlc3NfcHRyIGNpbmZvKSk7CiBFWFRFUk4odm9pZCkgamluaXRfaHVmZl9kZWNvZGVyIEpQUCgoal9kZWNvbXByZXNzX3B0ciBjaW5mbykpOworRVhURVJOKHZvaWQpIGppbml0X3BodWZmX2RlY29kZXIgSlBQKChqX2RlY29tcHJlc3NfcHRyIGNpbmZvKSk7CiBFWFRFUk4odm9pZCkgamluaXRfYXJpdGhfZGVjb2RlciBKUFAoKGpfZGVjb21wcmVzc19wdHIgY2luZm8pKTsKIEVYVEVSTih2b2lkKSBqaW5pdF9pbnZlcnNlX2RjdCBKUFAoKGpfZGVjb21wcmVzc19wdHIgY2luZm8pKTsKIEVYVEVSTih2b2lkKSBqaW5pdF91cHNhbXBsZXIgSlBQKChqX2RlY29tcHJlc3NfcHRyIGNpbmZvKSk7CkBAIC0zODcsMTIgKzM4Nyw2IEBACiBleHRlcm4gY29uc3QgaW50IGpwZWdfemlnemFnX29yZGVyW107IC8qIG5hdHVyYWwgY29lZiBvcmRlciB0byB6aWd6YWcgb3JkZXIgKi8KICNlbmRpZgogZXh0ZXJuIGNvbnN0IGludCBqcGVnX25hdHVyYWxfb3JkZXJbXTsgLyogemlnemFnIGNvZWYgb3JkZXIgdG8gbmF0dXJhbCBvcmRlciAqLwotZXh0ZXJuIGNvbnN0IGludCBqcGVnX25hdHVyYWxfb3JkZXI3W107IC8qIHp6IHRvIG5hdHVyYWwgb3JkZXIgZm9yIDd4NyBibG9jayAqLwotZXh0ZXJuIGNvbnN0IGludCBqcGVnX25hdHVyYWxfb3JkZXI2W107IC8qIHp6IHRvIG5hdHVyYWwgb3JkZXIgZm9yIDZ4NiBibG9jayAqLwotZXh0ZXJuIGNvbnN0IGludCBqcGVnX25hdHVyYWxfb3JkZXI1W107IC8qIHp6IHRvIG5hdHVyYWwgb3JkZXIgZm9yIDV4NSBibG9jayAqLwotZXh0ZXJuIGNvbnN0IGludCBqcGVnX25hdHVyYWxfb3JkZXI0W107IC8qIHp6IHRvIG5hdHVyYWwgb3JkZXIgZm9yIDR4NCBibG9jayAqLwotZXh0ZXJuIGNvbnN0IGludCBqcGVnX25hdHVyYWxfb3JkZXIzW107IC8qIHp6IHRvIG5hdHVyYWwgb3JkZXIgZm9yIDN4MyBibG9jayAqLwotZXh0ZXJuIGNvbnN0IGludCBqcGVnX25hdHVyYWxfb3JkZXIyW107IC8qIHp6IHRvIG5hdHVyYWwgb3JkZXIgZm9yIDJ4MiBibG9jayAqLwogCiAvKiBBcml0aG1ldGljIGNvZGluZyBwcm9iYWJpbGl0eSBlc3RpbWF0aW9uIHRhYmxlcyBpbiBqYXJpY29tLmMgKi8KIGV4dGVybiBjb25zdCBJTlQzMiBqcGVnX2FyaXRhYltdOwpkaWZmIC0tZ2l0IGEvanBlZ2xpYi5oIGIvanBlZ2xpYi5oCmluZGV4IDFlYjFmYWMuLmNiM2FjYWYgMTAwNjQ0Ci0tLSBhL2pwZWdsaWIuaAorKysgYi9qcGVnbGliLmgKQEAgLTIsNyArMiw4IEBACiAgKiBqcGVnbGliLmgKICAqCiAgKiBDb3B5cmlnaHQgKEMpIDE5OTEtMTk5OCwgVGhvbWFzIEcuIExhbmUuCi0gKiBNb2RpZmllZCAyMDAyLTIwMTAgYnkgR3VpZG8gVm9sbGJlZGluZy4KKyAqIE1vZGlmaWVkIDIwMDItMjAwOSBieSBHdWlkbyBWb2xsYmVkaW5nLgorICogQ29weXJpZ2h0IChDKSAyMDA5LTIwMTAsIEQuIFIuIENvbW1hbmRlci4KICAqIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBJbmRlcGVuZGVudCBKUEVHIEdyb3VwJ3Mgc29mdHdhcmUuCiAgKiBGb3IgY29uZGl0aW9ucyBvZiBkaXN0cmlidXRpb24gYW5kIHVzZSwgc2VlIHRoZSBhY2NvbXBhbnlpbmcgUkVBRE1FIGZpbGUuCiAgKgpAQCAtMzMsMTQgKzM0LDYgQEAKICNlbmRpZgogI2VuZGlmCiAKLS8qIFZlcnNpb24gSURzIGZvciB0aGUgSlBFRyBsaWJyYXJ5LgotICogTWlnaHQgYmUgdXNlZnVsIGZvciB0ZXN0cyBsaWtlICIjaWYgSlBFR19MSUJfVkVSU0lPTiA+PSA4MCIuCi0gKi8KLQotI2RlZmluZSBKUEVHX0xJQl9WRVJTSU9OICAgICAgICA4MAkvKiBDb21wYXRpYmlsaXR5IHZlcnNpb24gOC4wICovCi0jZGVmaW5lIEpQRUdfTElCX1ZFUlNJT05fTUFKT1IgIDgKLSNkZWZpbmUgSlBFR19MSUJfVkVSU0lPTl9NSU5PUiAgMwotCiAKIC8qIFZhcmlvdXMgY29uc3RhbnRzIGRldGVybWluaW5nIHRoZSBzaXplcyBvZiB0aGluZ3MuCiAgKiBBbGwgb2YgdGhlc2UgYXJlIHNwZWNpZmllZCBieSB0aGUgSlBFRyBzdGFuZGFyZCwgc28gZG9uJ3QgY2hhbmdlIHRoZW0KQEAgLTE0NywxOCArMTQwLDIzIEBACiAgICAqLwogICBKRElNRU5TSU9OIHdpZHRoX2luX2Jsb2NrczsKICAgSkRJTUVOU0lPTiBoZWlnaHRfaW5fYmxvY2tzOwotICAvKiBTaXplIG9mIGEgRENUIGJsb2NrIGluIHNhbXBsZXMsCi0gICAqIHJlZmxlY3RpbmcgYW55IHNjYWxpbmcgd2UgY2hvb3NlIHRvIGFwcGx5IGR1cmluZyB0aGUgRENUIHN0ZXAuCi0gICAqIFZhbHVlcyBmcm9tIDEgdG8gMTYgYXJlIHN1cHBvcnRlZC4KLSAgICogTm90ZSB0aGF0IGRpZmZlcmVudCBjb21wb25lbnRzIG1heSByZWNlaXZlIGRpZmZlcmVudCBEQ1Qgc2NhbGluZ3MuCisgIC8qIFNpemUgb2YgYSBEQ1QgYmxvY2sgaW4gc2FtcGxlcy4gIEFsd2F5cyBEQ1RTSVpFIGZvciBjb21wcmVzc2lvbi4KKyAgICogRm9yIGRlY29tcHJlc3Npb24gdGhpcyBpcyB0aGUgc2l6ZSBvZiB0aGUgb3V0cHV0IGZyb20gb25lIERDVCBibG9jaywKKyAgICogcmVmbGVjdGluZyBhbnkgc2NhbGluZyB3ZSBjaG9vc2UgdG8gYXBwbHkgZHVyaW5nIHRoZSBJRENUIHN0ZXAuCisgICAqIFZhbHVlcyBvZiAxLDIsNCw4IGFyZSBsaWtlbHkgdG8gYmUgc3VwcG9ydGVkLiAgTm90ZSB0aGF0IGRpZmZlcmVudAorICAgKiBjb21wb25lbnRzIG1heSByZWNlaXZlIGRpZmZlcmVudCBJRENUIHNjYWxpbmdzLgogICAgKi8KKyNpZiBKUEVHX0xJQl9WRVJTSU9OID49IDcwCiAgIGludCBEQ1RfaF9zY2FsZWRfc2l6ZTsKICAgaW50IERDVF92X3NjYWxlZF9zaXplOworI2Vsc2UKKyAgaW50IERDVF9zY2FsZWRfc2l6ZTsKKyNlbmRpZgogICAvKiBUaGUgZG93bnNhbXBsZWQgZGltZW5zaW9ucyBhcmUgdGhlIGNvbXBvbmVudCdzIGFjdHVhbCwgdW5wYWRkZWQgbnVtYmVyCi0gICAqIG9mIHNhbXBsZXMgYXQgdGhlIG1haW4gYnVmZmVyIChwcmVwcm9jZXNzaW5nL2NvbXByZXNzaW9uIGludGVyZmFjZSk7Ci0gICAqIERDVCBzY2FsaW5nIGlzIGluY2x1ZGVkLCBzbwotICAgKiBkb3duc2FtcGxlZF93aWR0aCA9IGNlaWwoaW1hZ2Vfd2lkdGggKiBIaS9IbWF4ICogRENUX2hfc2NhbGVkX3NpemUvRENUU0laRSkKLSAgICogYW5kIHNpbWlsYXJseSBmb3IgaGVpZ2h0LgorICAgKiBvZiBzYW1wbGVzIGF0IHRoZSBtYWluIGJ1ZmZlciAocHJlcHJvY2Vzc2luZy9jb21wcmVzc2lvbiBpbnRlcmZhY2UpLCB0aHVzCisgICAqIGRvd25zYW1wbGVkX3dpZHRoID0gY2VpbChpbWFnZV93aWR0aCAqIEhpL0htYXgpCisgICAqIGFuZCBzaW1pbGFybHkgZm9yIGhlaWdodC4gIEZvciBkZWNvbXByZXNzaW9uLCBJRENUIHNjYWxpbmcgaXMgaW5jbHVkZWQsIHNvCisgICAqIGRvd25zYW1wbGVkX3dpZHRoID0gY2VpbChpbWFnZV93aWR0aCAqIEhpL0htYXggKiBEQ1RfW2hfXXNjYWxlZF9zaXplL0RDVFNJWkUpCiAgICAqLwogICBKRElNRU5TSU9OIGRvd25zYW1wbGVkX3dpZHRoOwkgLyogYWN0dWFsIHdpZHRoIGluIHNhbXBsZXMgKi8KICAgSkRJTUVOU0lPTiBkb3duc2FtcGxlZF9oZWlnaHQ7IC8qIGFjdHVhbCBoZWlnaHQgaW4gc2FtcGxlcyAqLwpAQCAtMTczLDcgKzE3MSw3IEBACiAgIGludCBNQ1Vfd2lkdGg7CQkvKiBudW1iZXIgb2YgYmxvY2tzIHBlciBNQ1UsIGhvcml6b250YWxseSAqLwogICBpbnQgTUNVX2hlaWdodDsJCS8qIG51bWJlciBvZiBibG9ja3MgcGVyIE1DVSwgdmVydGljYWxseSAqLwogICBpbnQgTUNVX2Jsb2NrczsJCS8qIE1DVV93aWR0aCAqIE1DVV9oZWlnaHQgKi8KLSAgaW50IE1DVV9zYW1wbGVfd2lkdGg7CS8qIE1DVSB3aWR0aCBpbiBzYW1wbGVzOiBNQ1Vfd2lkdGggKiBEQ1RfaF9zY2FsZWRfc2l6ZSAqLworICBpbnQgTUNVX3NhbXBsZV93aWR0aDsJCS8qIE1DVSB3aWR0aCBpbiBzYW1wbGVzLCBNQ1Vfd2lkdGgqRENUX1toX11zY2FsZWRfc2l6ZSAqLwogICBpbnQgbGFzdF9jb2xfd2lkdGg7CQkvKiAjIG9mIG5vbi1kdW1teSBibG9ja3MgYWNyb3NzIGluIGxhc3QgTUNVICovCiAgIGludCBsYXN0X3Jvd19oZWlnaHQ7CQkvKiAjIG9mIG5vbi1kdW1teSBibG9ja3MgZG93biBpbiBsYXN0IE1DVSAqLwogCkBAIC0yMTIsMTMgKzIxMCwyMiBAQAogCiAvKiBLbm93biBjb2xvciBzcGFjZXMuICovCiAKKyNkZWZpbmUgSkNTX0VYVEVOU0lPTlMgMQorCiB0eXBlZGVmIGVudW0gewogCUpDU19VTktOT1dOLAkJLyogZXJyb3IvdW5zcGVjaWZpZWQgKi8KIAlKQ1NfR1JBWVNDQUxFLAkJLyogbW9ub2Nocm9tZSAqLwotCUpDU19SR0IsCQkvKiByZWQvZ3JlZW4vYmx1ZSAqLworCUpDU19SR0IsCQkvKiByZWQvZ3JlZW4vYmx1ZSBhcyBzcGVjaWZpZWQgYnkgdGhlIFJHQl9SRUQsIFJHQl9HUkVFTiwKKyAgICAgICAgICAgICAgICAgUkdCX0JMVUUsIGFuZCBSR0JfUElYRUxTSVpFIG1hY3JvcyAqLwogCUpDU19ZQ2JDciwJCS8qIFkvQ2IvQ3IgKGFsc28ga25vd24gYXMgWVVWKSAqLwogCUpDU19DTVlLLAkJLyogQy9NL1kvSyAqLwotCUpDU19ZQ0NLCQkvKiBZL0NiL0NyL0sgKi8KKwlKQ1NfWUNDSywJCS8qIFkvQ2IvQ3IvSyAqLworCUpDU19FWFRfUkdCLAkJLyogcmVkL2dyZWVuL2JsdWUgKi8KKwlKQ1NfRVhUX1JHQlgsCQkvKiByZWQvZ3JlZW4vYmx1ZS94ICovCisJSkNTX0VYVF9CR1IsCQkvKiBibHVlL2dyZWVuL3JlZCAqLworCUpDU19FWFRfQkdSWCwJCS8qIGJsdWUvZ3JlZW4vcmVkL3ggKi8KKwlKQ1NfRVhUX1hCR1IsCQkvKiB4L2JsdWUvZ3JlZW4vcmVkICovCisJSkNTX0VYVF9YUkdCCQkvKiB4L3JlZC9ncmVlbi9ibHVlICovCiB9IEpfQ09MT1JfU1BBQ0U7CiAKIC8qIERDVC9JRENUIGFsZ29yaXRobSBvcHRpb25zLiAqLwpAQCAtMzAwLDYgKzMwNyw3IEBACiAgICAqIGhlbHBlciByb3V0aW5lcyB0byBzaW1wbGlmeSBjaGFuZ2luZyBwYXJhbWV0ZXJzLgogICAgKi8KIAorI2lmIEpQRUdfTElCX1ZFUlNJT04gPj0gNzAKICAgdW5zaWduZWQgaW50IHNjYWxlX251bSwgc2NhbGVfZGVub207IC8qIGZyYWN0aW9uIGJ5IHdoaWNoIHRvIHNjYWxlIGltYWdlICovCiAKICAgSkRJTUVOU0lPTiBqcGVnX3dpZHRoOwkvKiBzY2FsZWQgSlBFRyBpbWFnZSB3aWR0aCAqLwpAQCAtMzEwLDYgKzMxOCw3IEBACiAgICAqIFlvdSBjYW4gYWxzbyB1c2UganBlZ19jYWxjX2pwZWdfZGltZW5zaW9ucygpIHRvIGRldGVybWluZSB0aGVzZSB2YWx1ZXMKICAgICogaW4gYWR2YW5jZSBvZiBjYWxsaW5nIGpwZWdfc3RhcnRfY29tcHJlc3MoKS4KICAgICovCisjZW5kaWYKIAogICBpbnQgZGF0YV9wcmVjaXNpb247CQkvKiBiaXRzIG9mIHByZWNpc2lvbiBpbiBpbWFnZSBkYXRhICovCiAKQEAgLTMyMCw3ICszMjksOSBAQAogICAvKiBjb21wX2luZm9baV0gZGVzY3JpYmVzIGNvbXBvbmVudCB0aGF0IGFwcGVhcnMgaSd0aCBpbiBTT0YgKi8KIAogICBKUVVBTlRfVEJMICogcXVhbnRfdGJsX3B0cnNbTlVNX1FVQU5UX1RCTFNdOworI2lmIEpQRUdfTElCX1ZFUlNJT04gPj0gNzAKICAgaW50IHFfc2NhbGVfZmFjdG9yW05VTV9RVUFOVF9UQkxTXTsKKyNlbmRpZgogICAvKiBwdHJzIHRvIGNvZWZmaWNpZW50IHF1YW50aXphdGlvbiB0YWJsZXMsIG9yIE5VTEwgaWYgbm90IGRlZmluZWQsCiAgICAqIGFuZCBjb3JyZXNwb25kaW5nIHNjYWxlIGZhY3RvcnMgKHBlcmNlbnRhZ2UsIGluaXRpYWxpemVkIDEwMCkuCiAgICAqLwpAQCAtMzQ0LDcgKzM1NSw5IEBACiAgIGJvb2xlYW4gYXJpdGhfY29kZTsJCS8qIFRSVUU9YXJpdGhtZXRpYyBjb2RpbmcsIEZBTFNFPUh1ZmZtYW4gKi8KICAgYm9vbGVhbiBvcHRpbWl6ZV9jb2Rpbmc7CS8qIFRSVUU9b3B0aW1pemUgZW50cm9weSBlbmNvZGluZyBwYXJtcyAqLwogICBib29sZWFuIENDSVI2MDFfc2FtcGxpbmc7CS8qIFRSVUU9Zmlyc3Qgc2FtcGxlcyBhcmUgY29zaXRlZCAqLworI2lmIEpQRUdfTElCX1ZFUlNJT04gPj0gNzAKICAgYm9vbGVhbiBkb19mYW5jeV9kb3duc2FtcGxpbmc7IC8qIFRSVUU9YXBwbHkgZmFuY3kgZG93bnNhbXBsaW5nICovCisjZW5kaWYKICAgaW50IHNtb290aGluZ19mYWN0b3I7CQkvKiAxLi4xMDAsIG9yIDAgZm9yIG5vIGlucHV0IHNtb290aGluZyAqLwogICBKX0RDVF9NRVRIT0QgZGN0X21ldGhvZDsJLyogRENUIGFsZ29yaXRobSBzZWxlY3RvciAqLwogCkBAIC0zODgsOCArNDAxLDEwIEBACiAgIGludCBtYXhfaF9zYW1wX2ZhY3RvcjsJLyogbGFyZ2VzdCBoX3NhbXBfZmFjdG9yICovCiAgIGludCBtYXhfdl9zYW1wX2ZhY3RvcjsJLyogbGFyZ2VzdCB2X3NhbXBfZmFjdG9yICovCiAKKyNpZiBKUEVHX0xJQl9WRVJTSU9OID49IDcwCiAgIGludCBtaW5fRENUX2hfc2NhbGVkX3NpemU7CS8qIHNtYWxsZXN0IERDVF9oX3NjYWxlZF9zaXplIG9mIGFueSBjb21wb25lbnQgKi8KICAgaW50IG1pbl9EQ1Rfdl9zY2FsZWRfc2l6ZTsJLyogc21hbGxlc3QgRENUX3Zfc2NhbGVkX3NpemUgb2YgYW55IGNvbXBvbmVudCAqLworI2VuZGlmCiAKICAgSkRJTUVOU0lPTiB0b3RhbF9pTUNVX3Jvd3M7CS8qICMgb2YgaU1DVSByb3dzIHRvIGJlIGlucHV0IHRvIGNvZWYgY3RsciAqLwogICAvKiBUaGUgY29lZmZpY2llbnQgY29udHJvbGxlciByZWNlaXZlcyBkYXRhIGluIHVuaXRzIG9mIE1DVSByb3dzIGFzIGRlZmluZWQKQEAgLTQxNiw5ICs0MzEsMTEgQEAKIAogICBpbnQgU3MsIFNlLCBBaCwgQWw7CQkvKiBwcm9ncmVzc2l2ZSBKUEVHIHBhcmFtZXRlcnMgZm9yIHNjYW4gKi8KIAorI2lmIEpQRUdfTElCX1ZFUlNJT04gPj0gODAKICAgaW50IGJsb2NrX3NpemU7CQkvKiB0aGUgYmFzaWMgRENUIGJsb2NrIHNpemU6IDEuLjE2ICovCiAgIGNvbnN0IGludCAqIG5hdHVyYWxfb3JkZXI7CS8qIG5hdHVyYWwtb3JkZXIgcG9zaXRpb24gYXJyYXkgKi8KICAgaW50IGxpbV9TZTsJCQkvKiBtaW4oIFNlLCBEQ1RTSVpFMi0xICkgKi8KKyNlbmRpZgogCiAgIC8qCiAgICAqIExpbmtzIHRvIGNvbXByZXNzaW9uIHN1Ym9iamVjdHMgKG1ldGhvZHMgYW5kIHByaXZhdGUgdmFyaWFibGVzIG9mIG1vZHVsZXMpCkBAIC01NjYsNyArNTgzLDkgQEAKICAganBlZ19jb21wb25lbnRfaW5mbyAqIGNvbXBfaW5mbzsKICAgLyogY29tcF9pbmZvW2ldIGRlc2NyaWJlcyBjb21wb25lbnQgdGhhdCBhcHBlYXJzIGkndGggaW4gU09GICovCiAKKyNpZiBKUEVHX0xJQl9WRVJTSU9OID49IDgwCiAgIGJvb2xlYW4gaXNfYmFzZWxpbmU7CQkvKiBUUlVFIGlmIEJhc2VsaW5lIFNPRjAgZW5jb3VudGVyZWQgKi8KKyNlbmRpZgogICBib29sZWFuIHByb2dyZXNzaXZlX21vZGU7CS8qIFRSVUUgaWYgU09GbiBzcGVjaWZpZXMgcHJvZ3Jlc3NpdmUgbW9kZSAqLwogICBib29sZWFuIGFyaXRoX2NvZGU7CQkvKiBUUlVFPWFyaXRobWV0aWMgY29kaW5nLCBGQUxTRT1IdWZmbWFuICovCiAKQEAgLTYwNyw4ICs2MjYsMTIgQEAKICAgaW50IG1heF9oX3NhbXBfZmFjdG9yOwkvKiBsYXJnZXN0IGhfc2FtcF9mYWN0b3IgKi8KICAgaW50IG1heF92X3NhbXBfZmFjdG9yOwkvKiBsYXJnZXN0IHZfc2FtcF9mYWN0b3IgKi8KIAorI2lmIEpQRUdfTElCX1ZFUlNJT04gPj0gNzAKICAgaW50IG1pbl9EQ1RfaF9zY2FsZWRfc2l6ZTsJLyogc21hbGxlc3QgRENUX2hfc2NhbGVkX3NpemUgb2YgYW55IGNvbXBvbmVudCAqLwogICBpbnQgbWluX0RDVF92X3NjYWxlZF9zaXplOwkvKiBzbWFsbGVzdCBEQ1Rfdl9zY2FsZWRfc2l6ZSBvZiBhbnkgY29tcG9uZW50ICovCisjZWxzZQorICBpbnQgbWluX0RDVF9zY2FsZWRfc2l6ZTsJLyogc21hbGxlc3QgRENUX3NjYWxlZF9zaXplIG9mIGFueSBjb21wb25lbnQgKi8KKyNlbmRpZgogCiAgIEpESU1FTlNJT04gdG90YWxfaU1DVV9yb3dzOwkvKiAjIG9mIGlNQ1Ugcm93cyBpbiBpbWFnZSAqLwogICAvKiBUaGUgY29lZmZpY2llbnQgY29udHJvbGxlcidzIGlucHV0IGFuZCBvdXRwdXQgcHJvZ3Jlc3MgaXMgbWVhc3VyZWQgaW4KQEAgLTYxNiw3ICs2MzksNyBAQAogICAgKiBpbiBmdWxseSBpbnRlcmxlYXZlZCBKUEVHIHNjYW5zLCBidXQgYXJlIHVzZWQgd2hldGhlciB0aGUgc2NhbiBpcwogICAgKiBpbnRlcmxlYXZlZCBvciBub3QuICBXZSBkZWZpbmUgYW4gaU1DVSByb3cgYXMgdl9zYW1wX2ZhY3RvciBEQ1QgYmxvY2sKICAgICogcm93cyBvZiBlYWNoIGNvbXBvbmVudC4gIFRoZXJlZm9yZSwgdGhlIElEQ1Qgb3V0cHV0IGNvbnRhaW5zCi0gICAqIHZfc2FtcF9mYWN0b3IqRENUX3Zfc2NhbGVkX3NpemUgc2FtcGxlIHJvd3Mgb2YgYSBjb21wb25lbnQgcGVyIGlNQ1Ugcm93LgorICAgKiB2X3NhbXBfZmFjdG9yKkRDVF9bdl9dc2NhbGVkX3NpemUgc2FtcGxlIHJvd3Mgb2YgYSBjb21wb25lbnQgcGVyIGlNQ1Ugcm93LgogICAgKi8KIAogICBKU0FNUExFICogc2FtcGxlX3JhbmdlX2xpbWl0OyAvKiB0YWJsZSBmb3IgZmFzdCByYW5nZS1saW1pdGluZyAqLwpAQCAtNjQwLDExICs2NjMsMTMgQEAKIAogICBpbnQgU3MsIFNlLCBBaCwgQWw7CQkvKiBwcm9ncmVzc2l2ZSBKUEVHIHBhcmFtZXRlcnMgZm9yIHNjYW4gKi8KIAorI2lmIEpQRUdfTElCX1ZFUlNJT04gPj0gODAKICAgLyogVGhlc2UgZmllbGRzIGFyZSBkZXJpdmVkIGZyb20gU2Ugb2YgZmlyc3QgU09TIG1hcmtlci4KICAgICovCiAgIGludCBibG9ja19zaXplOwkJLyogdGhlIGJhc2ljIERDVCBibG9jayBzaXplOiAxLi4xNiAqLwogICBjb25zdCBpbnQgKiBuYXR1cmFsX29yZGVyOyAvKiBuYXR1cmFsLW9yZGVyIHBvc2l0aW9uIGFycmF5IGZvciBlbnRyb3B5IGRlY29kZSAqLwogICBpbnQgbGltX1NlOwkJCS8qIG1pbiggU2UsIERDVFNJWkUyLTEgKSBmb3IgZW50cm9weSBkZWNvZGUgKi8KKyNlbmRpZgogCiAgIC8qIFRoaXMgZmllbGQgaXMgc2hhcmVkIGJldHdlZW4gZW50cm9weSBkZWNvZGVyIGFuZCBtYXJrZXIgcGFyc2VyLgogICAgKiBJdCBpcyBlaXRoZXIgemVybyBvciB0aGUgY29kZSBvZiBhIEpQRUcgbWFya2VyIHRoYXQgaGFzIGJlZW4KQEAgLTg3NSwxNCArOTAwLDE4IEBACiAjZGVmaW5lIGpwZWdfZGVzdHJveV9kZWNvbXByZXNzCWpEZXN0RGVjb21wcmVzcwogI2RlZmluZSBqcGVnX3N0ZGlvX2Rlc3QJCWpTdGREZXN0CiAjZGVmaW5lIGpwZWdfc3RkaW9fc3JjCQlqU3RkU3JjCisjaWYgSlBFR19MSUJfVkVSU0lPTiA+PSA4MAogI2RlZmluZSBqcGVnX21lbV9kZXN0CQlqTWVtRGVzdAogI2RlZmluZSBqcGVnX21lbV9zcmMJCWpNZW1TcmMKKyNlbmRpZgogI2RlZmluZSBqcGVnX3NldF9kZWZhdWx0cwlqU2V0RGVmYXVsdHMKICNkZWZpbmUganBlZ19zZXRfY29sb3JzcGFjZQlqU2V0Q29sb3JzcGFjZQogI2RlZmluZSBqcGVnX2RlZmF1bHRfY29sb3JzcGFjZQlqRGVmQ29sb3JzcGFjZQogI2RlZmluZSBqcGVnX3NldF9xdWFsaXR5CWpTZXRRdWFsaXR5CiAjZGVmaW5lIGpwZWdfc2V0X2xpbmVhcl9xdWFsaXR5CWpTZXRMUXVhbGl0eQorI2lmIEpQRUdfTElCX1ZFUlNJT04gPj0gNzAKICNkZWZpbmUganBlZ19kZWZhdWx0X3F0YWJsZXMJakRlZlFUYWJsZXMKKyNlbmRpZgogI2RlZmluZSBqcGVnX2FkZF9xdWFudF90YWJsZQlqQWRkUXVhbnRUYWJsZQogI2RlZmluZSBqcGVnX3F1YWxpdHlfc2NhbGluZwlqUXVhbGl0eVNjYWxpbmcKICNkZWZpbmUganBlZ19zaW1wbGVfcHJvZ3Jlc3Npb24JalNpbVByb2dyZXNzCkBAIC04OTIsNyArOTIxLDkgQEAKICNkZWZpbmUganBlZ19zdGFydF9jb21wcmVzcwlqU3RydENvbXByZXNzCiAjZGVmaW5lIGpwZWdfd3JpdGVfc2NhbmxpbmVzCWpXcnRTY2FubGluZXMKICNkZWZpbmUganBlZ19maW5pc2hfY29tcHJlc3MJakZpbkNvbXByZXNzCisjaWYgSlBFR19MSUJfVkVSU0lPTiA+PSA3MAogI2RlZmluZSBqcGVnX2NhbGNfanBlZ19kaW1lbnNpb25zCWpDanBlZ0RpbWVuc2lvbnMKKyNlbmRpZgogI2RlZmluZSBqcGVnX3dyaXRlX3Jhd19kYXRhCWpXcnRSYXdEYXRhCiAjZGVmaW5lIGpwZWdfd3JpdGVfbWFya2VyCWpXcnRNYXJrZXIKICNkZWZpbmUganBlZ193cml0ZV9tX2hlYWRlcglqV3J0TUhlYWRlcgpAQCAtOTA5LDcgKzk0MCw5IEBACiAjZGVmaW5lIGpwZWdfaW5wdXRfY29tcGxldGUJakluQ29tcGxldGUKICNkZWZpbmUganBlZ19uZXdfY29sb3JtYXAJak5ld0NNYXAKICNkZWZpbmUganBlZ19jb25zdW1lX2lucHV0CWpDb25zdW1lSW5wdXQKKyNpZiBKUEVHX0xJQl9WRVJTSU9OID49IDgwCiAjZGVmaW5lIGpwZWdfY29yZV9vdXRwdXRfZGltZW5zaW9ucwlqQ29yZURpbWVuc2lvbnMKKyNlbmRpZgogI2RlZmluZSBqcGVnX2NhbGNfb3V0cHV0X2RpbWVuc2lvbnMJakNhbGNEaW1lbnNpb25zCiAjZGVmaW5lIGpwZWdfc2F2ZV9tYXJrZXJzCWpTYXZlTWFya2VycwogI2RlZmluZSBqcGVnX3NldF9tYXJrZXJfcHJvY2Vzc29yCWpTZXRNYXJrZXIKQEAgLTk1NCw2ICs5ODcsNyBAQAogRVhURVJOKHZvaWQpIGpwZWdfc3RkaW9fZGVzdCBKUFAoKGpfY29tcHJlc3NfcHRyIGNpbmZvLCBGSUxFICogb3V0ZmlsZSkpOwogRVhURVJOKHZvaWQpIGpwZWdfc3RkaW9fc3JjIEpQUCgoal9kZWNvbXByZXNzX3B0ciBjaW5mbywgRklMRSAqIGluZmlsZSkpOwogCisjaWYgSlBFR19MSUJfVkVSU0lPTiA+PSA4MAogLyogRGF0YSBzb3VyY2UgYW5kIGRlc3RpbmF0aW9uIG1hbmFnZXJzOiBtZW1vcnkgYnVmZmVycy4gKi8KIEVYVEVSTih2b2lkKSBqcGVnX21lbV9kZXN0IEpQUCgoal9jb21wcmVzc19wdHIgY2luZm8sCiAJCQkgICAgICAgdW5zaWduZWQgY2hhciAqKiBvdXRidWZmZXIsCkBAIC05NjEsNiArOTk1LDcgQEAKIEVYVEVSTih2b2lkKSBqcGVnX21lbV9zcmMgSlBQKChqX2RlY29tcHJlc3NfcHRyIGNpbmZvLAogCQkJICAgICAgdW5zaWduZWQgY2hhciAqIGluYnVmZmVyLAogCQkJICAgICAgdW5zaWduZWQgbG9uZyBpbnNpemUpKTsKKyNlbmRpZgogCiAvKiBEZWZhdWx0IHBhcmFtZXRlciBzZXR1cCBmb3IgY29tcHJlc3Npb24gKi8KIEVYVEVSTih2b2lkKSBqcGVnX3NldF9kZWZhdWx0cyBKUFAoKGpfY29tcHJlc3NfcHRyIGNpbmZvKSk7CkBAIC05NzMsOCArMTAwOCwxMCBAQAogRVhURVJOKHZvaWQpIGpwZWdfc2V0X2xpbmVhcl9xdWFsaXR5IEpQUCgoal9jb21wcmVzc19wdHIgY2luZm8sCiAJCQkJCSAgaW50IHNjYWxlX2ZhY3RvciwKIAkJCQkJICBib29sZWFuIGZvcmNlX2Jhc2VsaW5lKSk7CisjaWYgSlBFR19MSUJfVkVSU0lPTiA+PSA3MAogRVhURVJOKHZvaWQpIGpwZWdfZGVmYXVsdF9xdGFibGVzIEpQUCgoal9jb21wcmVzc19wdHIgY2luZm8sCiAJCQkJICAgICAgIGJvb2xlYW4gZm9yY2VfYmFzZWxpbmUpKTsKKyNlbmRpZgogRVhURVJOKHZvaWQpIGpwZWdfYWRkX3F1YW50X3RhYmxlIEpQUCgoal9jb21wcmVzc19wdHIgY2luZm8sIGludCB3aGljaF90YmwsCiAJCQkJICAgICAgIGNvbnN0IHVuc2lnbmVkIGludCAqYmFzaWNfdGFibGUsCiAJCQkJICAgICAgIGludCBzY2FsZV9mYWN0b3IsCkBAIC05OTQsOCArMTAzMSwxMCBAQAogCQkJCQkgICAgIEpESU1FTlNJT04gbnVtX2xpbmVzKSk7CiBFWFRFUk4odm9pZCkganBlZ19maW5pc2hfY29tcHJlc3MgSlBQKChqX2NvbXByZXNzX3B0ciBjaW5mbykpOwogCisjaWYgSlBFR19MSUJfVkVSU0lPTiA+PSA3MAogLyogUHJlY2FsY3VsYXRlIEpQRUcgZGltZW5zaW9ucyBmb3IgY3VycmVudCBjb21wcmVzc2lvbiBwYXJhbWV0ZXJzLiAqLwogRVhURVJOKHZvaWQpIGpwZWdfY2FsY19qcGVnX2RpbWVuc2lvbnMgSlBQKChqX2NvbXByZXNzX3B0ciBjaW5mbykpOworI2VuZGlmCiAKIC8qIFJlcGxhY2VzIGpwZWdfd3JpdGVfc2NhbmxpbmVzIHdoZW4gd3JpdGluZyByYXcgZG93bnNhbXBsZWQgZGF0YS4gKi8KIEVYVEVSTihKRElNRU5TSU9OKSBqcGVnX3dyaXRlX3Jhd19kYXRhIEpQUCgoal9jb21wcmVzc19wdHIgY2luZm8sCkBAIC0xMDU2LDcgKzEwOTUsOSBAQAogI2RlZmluZSBKUEVHX1NDQU5fQ09NUExFVEVECTQgLyogQ29tcGxldGVkIGxhc3QgaU1DVSByb3cgb2YgYSBzY2FuICovCiAKIC8qIFByZWNhbGN1bGF0ZSBvdXRwdXQgZGltZW5zaW9ucyBmb3IgY3VycmVudCBkZWNvbXByZXNzaW9uIHBhcmFtZXRlcnMuICovCisjaWYgSlBFR19MSUJfVkVSU0lPTiA+PSA4MAogRVhURVJOKHZvaWQpIGpwZWdfY29yZV9vdXRwdXRfZGltZW5zaW9ucyBKUFAoKGpfZGVjb21wcmVzc19wdHIgY2luZm8pKTsKKyNlbmRpZgogRVhURVJOKHZvaWQpIGpwZWdfY2FsY19vdXRwdXRfZGltZW5zaW9ucyBKUFAoKGpfZGVjb21wcmVzc19wdHIgY2luZm8pKTsKIAogLyogQ29udHJvbCBzYXZpbmcgb2YgQ09NIGFuZCBBUFBuIG1hcmtlcnMgaW50byBtYXJrZXJfbGlzdC4gKi8KZGlmZiAtLWdpdCBhL2pwZWd0cmFuLjEgYi9qcGVndHJhbi4xCmluZGV4IDBhZDFiYmMuLmYxMGNkYmIgMTAwNjQ0Ci0tLSBhL2pwZWd0cmFuLjEKKysrIGIvanBlZ3RyYW4uMQpAQCAtMSw0ICsxLDQgQEAKLS5USCBKUEVHVFJBTiAxICIyOCBEZWNlbWJlciAyMDA5IgorLlRIIEpQRUdUUkFOIDEgIjExIE9jdG9iZXIgMjAxMCIKIC5TSCBOQU1FCiBqcGVndHJhbiBcLSBsb3NzbGVzcyB0cmFuc2Zvcm1hdGlvbiBvZiBKUEVHIGZpbGVzCiAuU0ggU1lOT1BTSVMKQEAgLTk0LDEyICs5NCwxMiBAQAogLlRQCiAuQiBcLXRyYW5zdmVyc2UKIFRyYW5zdmVyc2UgdHJhbnNwb3NlIChhY3Jvc3MgVVItdG8tTEwgYXhpcykuCi0uSVAKKy5QUAogVGhlIHRyYW5zcG9zZSB0cmFuc2Zvcm1hdGlvbiBoYXMgbm8gcmVzdHJpY3Rpb25zIHJlZ2FyZGluZyBpbWFnZSBkaW1lbnNpb25zLgogVGhlIG90aGVyIHRyYW5zZm9ybWF0aW9ucyBvcGVyYXRlIHJhdGhlciBvZGRseSBpZiB0aGUgaW1hZ2UgZGltZW5zaW9ucyBhcmUgbm90CiBhIG11bHRpcGxlIG9mIHRoZSBpTUNVIHNpemUgKHVzdWFsbHkgOCBvciAxNiBwaXhlbHMpLCBiZWNhdXNlIHRoZXkgY2FuIG9ubHkKIHRyYW5zZm9ybSBjb21wbGV0ZSBibG9ja3Mgb2YgRENUIGNvZWZmaWNpZW50IGRhdGEgaW4gdGhlIGRlc2lyZWQgd2F5LgotLklQCisuUFAKIC5CUiBqcGVndHJhbiAncwogZGVmYXVsdCBiZWhhdmlvciB3aGVuIHRyYW5zZm9ybWluZyBhbiBvZGQtc2l6ZSBpbWFnZSBpcyBkZXNpZ25lZAogdG8gcHJlc2VydmUgZXhhY3QgcmV2ZXJzaWJpbGl0eSBhbmQgbWF0aGVtYXRpY2FsIGNvbnNpc3RlbmN5IG9mIHRoZQpAQCAtMTExLDcgKzExMSw3IEBACiBvZiB0cmFuc3Bvc2UgYW5kIGZsaXAgb3BlcmF0aW9uczsgZm9yIGNvbnNpc3RlbmN5LCB0aGVpciBhY3Rpb25zIG9uIGVkZ2UKIHBpeGVscyBhcmUgZGVmaW5lZCB0byBiZSB0aGUgc2FtZSBhcyB0aGUgZW5kIHJlc3VsdCBvZiB0aGUgY29ycmVzcG9uZGluZwogdHJhbnNwb3NlLWFuZC1mbGlwIHNlcXVlbmNlLgotLklQCisuUFAKIEZvciBwcmFjdGljYWwgdXNlLCB5b3UgbWF5IHByZWZlciB0byBkaXNjYXJkIGFueSB1bnRyYW5zZm9ybWFibGUgZWRnZSBwaXhlbHMKIHJhdGhlciB0aGFuIGhhdmluZyBhIHN0cmFuZ2UtbG9va2luZyBzdHJpcCBhbG9uZyB0aGUgcmlnaHQgYW5kL29yIGJvdHRvbSBlZGdlcwogb2YgYSB0cmFuc2Zvcm1lZCBpbWFnZS4gIFRvIGRvIHRoaXMsIGFkZCB0aGUKQEAgLTEzMywxNSArMTMzLDE1IEBACiBmb2xsb3dlZCBieQogLkIgXC1yb3QgMTgwIC10cmltCiB0cmltcyBib3RoIGVkZ2VzLgotLklQCi1JZiB5b3UgYXJlIG9ubHkgaW50ZXJlc3RlZCBpbiBwZXJmZWN0IHRyYW5zZm9ybWF0aW9uLCBhZGQgdGhlCi0uQiBcLXBlcmZlY3QKLXN3aXRjaDoKIC5UUAogLkIgXC1wZXJmZWN0Ci1GYWlscyB3aXRoIGFuIGVycm9yIGlmIHRoZSB0cmFuc2Zvcm1hdGlvbiBpcyBub3QgcGVyZmVjdC4KK0lmIHlvdSBhcmUgb25seSBpbnRlcmVzdGVkIGluIHBlcmZlY3QgdHJhbnNmb3JtYXRpb25zLCBhZGQgdGhlCisuQiBcLXBlcmZlY3QKK3N3aXRjaC4gIFRoaXMgY2F1c2VzCisuQiBqcGVndHJhbgordG8gZmFpbCB3aXRoIGFuIGVycm9yIGlmIHRoZSB0cmFuc2Zvcm1hdGlvbiBpcyBub3QgcGVyZmVjdC4KIC5JUAotRm9yIGV4YW1wbGUgeW91IG1heSB3YW50IHRvIGRvCitGb3IgZXhhbXBsZSwgeW91IG1heSB3YW50IHRvIGRvCiAuSVAKIC5CIChqcGVndHJhbiBcLXJvdCA5MCAtcGVyZmVjdAogLkkgZm9vLmpwZwpAQCAtMTQ5LDIxICsxNDksMTYgQEAKIC5JIGZvby5qcGcKIC5CIHwgcG5tZmxpcCBcLXI5MCB8IGNqcGVnKQogLklQCi10byBkbyBhIHBlcmZlY3Qgcm90YXRpb24gaWYgYXZhaWxhYmxlIG9yIGFuIGFwcHJveGltYXRlZCBvbmUgaWYgbm90LgotLlBQCi1XZSBhbHNvIG9mZmVyIGEgbG9zc2xlc3MtY3JvcCBvcHRpb24sIHdoaWNoIGRpc2NhcmRzIGRhdGEgb3V0c2lkZSBhIGdpdmVuCi1pbWFnZSByZWdpb24gYnV0IGxvc3NsZXNzbHkgcHJlc2VydmVzIHdoYXQgaXMgaW5zaWRlLiAgTGlrZSB0aGUgcm90YXRlIGFuZAotZmxpcCB0cmFuc2Zvcm1zLCBsb3NzbGVzcyBjcm9wIGlzIHJlc3RyaWN0ZWQgYnkgdGhlIGN1cnJlbnQgSlBFRyBmb3JtYXQ6IHRoZQotdXBwZXIgbGVmdCBjb3JuZXIgb2YgdGhlIHNlbGVjdGVkIHJlZ2lvbiBtdXN0IGZhbGwgb24gYW4gaU1DVSBib3VuZGFyeS4gIElmCi10aGlzIGRvZXMgbm90IGhvbGQgZm9yIHRoZSBnaXZlbiBjcm9wIHBhcmFtZXRlcnMsIHdlIHNpbGVudGx5IG1vdmUgdGhlIHVwcGVyCi1sZWZ0IGNvcm5lciB1cCBhbmQvb3IgbGVmdCB0byBtYWtlIGl0IHNvLCBzaW11bHRhbmVvdXNseSBpbmNyZWFzaW5nIHRoZSByZWdpb24KLWRpbWVuc2lvbnMgdG8ga2VlcCB0aGUgbG93ZXIgcmlnaHQgY3JvcCBjb3JuZXIgdW5jaGFuZ2VkLiAgKFRodXMsIHRoZSBvdXRwdXQKLWltYWdlIGNvdmVycyBhdCBsZWFzdCB0aGUgcmVxdWVzdGVkIHJlZ2lvbiwgYnV0IG1heSBjb3ZlciBtb3JlLikKLQotVGhlIGltYWdlIGNhbiBiZSBsb3NzbGVzc2x5IGNyb3BwZWQgYnkgZ2l2aW5nIHRoZSBzd2l0Y2g6Cit0byBkbyBhIHBlcmZlY3Qgcm90YXRpb24sIGlmIGF2YWlsYWJsZSwgb3IgYW4gYXBwcm94aW1hdGVkIG9uZSBpZiBub3QuCiAuVFAKIC5CIFwtY3JvcCBXeEgrWCtZCi1Dcm9wIHRvIGEgcmVjdGFuZ3VsYXIgc3ViYXJlYSBvZiB3aWR0aCBXLCBoZWlnaHQgSCBzdGFydGluZyBhdCBwb2ludCBYLFkuCitDcm9wIHRoZSBpbWFnZSB0byBhIHJlY3Rhbmd1bGFyIHJlZ2lvbiBvZiB3aWR0aCBXIGFuZCBoZWlnaHQgSCwgc3RhcnRpbmcgYXQKK3BvaW50IFgsWS4gIFRoZSBsb3NzbGVzcyBjcm9wIGZlYXR1cmUgZGlzY2FyZHMgZGF0YSBvdXRzaWRlIG9mIGEgZ2l2ZW4gaW1hZ2UKK3JlZ2lvbiBidXQgbG9zc2xlc3NseSBwcmVzZXJ2ZXMgd2hhdCBpcyBpbnNpZGUuICBMaWtlIHRoZSByb3RhdGUgYW5kIGZsaXAKK3RyYW5zZm9ybXMsIGxvc3NsZXNzIGNyb3AgaXMgcmVzdHJpY3RlZCBieSB0aGUgY3VycmVudCBKUEVHIGZvcm1hdDsgdGhlIHVwcGVyCitsZWZ0IGNvcm5lciBvZiB0aGUgc2VsZWN0ZWQgcmVnaW9uIG11c3QgZmFsbCBvbiBhbiBpTUNVIGJvdW5kYXJ5LiAgSWYgaXQKK2RvZXNuJ3QsIHRoZW4gaXQgaXMgc2lsZW50bHkgbW92ZWQgdXAgYW5kL29yIGxlZnQgdG8gdGhlIG5lYXJlc3QgaU1DVSBib3VuZGFyeQorKHRoZSBsb3dlciByaWdodCBjb3JuZXIgaXMgdW5jaGFuZ2VkLikKIC5QUAogT3RoZXIgbm90LXN0cmljdGx5LWxvc3NsZXNzIHRyYW5zZm9ybWF0aW9uIHN3aXRjaGVzIGFyZToKIC5UUApAQCAtMTc4LDE5ICsxNzMsNiBAQAogZW5jb2RlZCBhcyBhIGNvbG9yIEpQRUcuICAoSW4gc3VjaCBhIGNhc2UsIHRoZSBzcGFjZSBzYXZpbmdzIGZyb20gZ2V0dGluZyByaWQKIG9mIHRoZSBuZWFyLWVtcHR5IGNocm9tYSBjaGFubmVscyB3b24ndCBiZSBsYXJnZTsgYnV0IHRoZSBkZWNvZGluZyB0aW1lIGZvcgogYSBncmF5c2NhbGUgSlBFRyBpcyBzdWJzdGFudGlhbGx5IGxlc3MgdGhhbiB0aGF0IGZvciBhIGNvbG9yIEpQRUcuKQotLlRQCi0uQkkgXC1zY2FsZSAiIE0vTiIKLVNjYWxlIHRoZSBvdXRwdXQgaW1hZ2UgYnkgYSBmYWN0b3IgTS9OLgotLklQCi1DdXJyZW50bHkgc3VwcG9ydGVkIHNjYWxlIGZhY3RvcnMgYXJlIE0vTiB3aXRoIGFsbCBNIGZyb20gMSB0byAxNiwgd2hlcmUgTiBpcwotdGhlIHNvdXJjZSBEQ1Qgc2l6ZSwgd2hpY2ggaXMgOCBmb3IgYmFzZWxpbmUgSlBFRy4gIElmIHRoZSAvTiBwYXJ0IGlzIG9taXR0ZWQsCi10aGVuIE0gc3BlY2lmaWVzIHRoZSBEQ1Qgc2NhbGVkIHNpemUgdG8gYmUgYXBwbGllZCBvbiB0aGUgZ2l2ZW4gaW5wdXQuICBGb3IKLWJhc2VsaW5lIEpQRUcgdGhpcyBpcyBlcXVpdmFsZW50IHRvIE0vOCBzY2FsaW5nLCBzaW5jZSB0aGUgc291cmNlIERDVCBzaXplCi1mb3IgYmFzZWxpbmUgSlBFRyBpcyA4LgotLkIgQ2F1dGlvbjoKLUFuIGltcGxlbWVudGF0aW9uIG9mIHRoZSBKUEVHIFNtYXJ0U2NhbGUgZXh0ZW5zaW9uIGlzIHJlcXVpcmVkIGZvciB0aGlzCi1mZWF0dXJlLiAgU21hcnRTY2FsZSBlbmFibGVkIEpQRUcgaXMgbm90IHlldCB3aWRlbHkgaW1wbGVtZW50ZWQsIHNvIG1hbnkKLWRlY29kZXJzIHdpbGwgYmUgdW5hYmxlIHRvIHZpZXcgYSBTbWFydFNjYWxlIGV4dGVuZGVkIEpQRUcgZmlsZSBhdCBhbGwuCiAuUFAKIC5CIGpwZWd0cmFuCiBhbHNvIHJlY29nbml6ZXMgdGhlc2Ugc3dpdGNoZXMgdGhhdCBjb250cm9sIHdoYXQgdG8gZG8gd2l0aCAiZXh0cmEiIG1hcmtlcnMsCkBAIC0yMDEsMjAgKzE4MywxNiBAQAogY29tbWVudHMgYW5kIG90aGVyIGV4Y2VzcyBiYWdnYWdlIHByZXNlbnQgaW4gdGhlIHNvdXJjZSBmaWxlLgogLlRQCiAuQiBcLWNvcHkgY29tbWVudHMKLUNvcHkgb25seSBjb21tZW50IG1hcmtlcnMuICBUaGlzIHNldHRpbmcgY29waWVzIGNvbW1lbnRzIGZyb20gdGhlIHNvdXJjZSBmaWxlLAotYnV0IGRpc2NhcmRzIGFueSBvdGhlciBpbmVzc2VudGlhbCAoZm9yIGltYWdlIGRpc3BsYXkpIGRhdGEuCitDb3B5IG9ubHkgY29tbWVudCBtYXJrZXJzLiAgVGhpcyBzZXR0aW5nIGNvcGllcyBjb21tZW50cyBmcm9tIHRoZSBzb3VyY2UgZmlsZQorYnV0IGRpc2NhcmRzIGFueSBvdGhlciBkYXRhIHdoaWNoIGlzIGluZXNzZW50aWFsIGZvciBpbWFnZSBkaXNwbGF5LgogLlRQCiAuQiBcLWNvcHkgYWxsCiBDb3B5IGFsbCBleHRyYSBtYXJrZXJzLiAgVGhpcyBzZXR0aW5nIHByZXNlcnZlcyBtaXNjZWxsYW5lb3VzIG1hcmtlcnMKIGZvdW5kIGluIHRoZSBzb3VyY2UgZmlsZSwgc3VjaCBhcyBKRklGIHRodW1ibmFpbHMsIEV4aWYgZGF0YSwgYW5kIFBob3Rvc2hvcAotc2V0dGluZ3MuICBJbiBzb21lIGZpbGVzIHRoZXNlIGV4dHJhIG1hcmtlcnMgY2FuIGJlIHNpemFibGUuCi0uSVAKLVRoZSBkZWZhdWx0IGJlaGF2aW9yIGlzCi0uQlIgIlwtY29weSBjb21tZW50cyIgLgotKE5vdGU6IGluIElKRyByZWxlYXNlcyB2NiBhbmQgdjZhLAotLkIganBlZ3RyYW4KLWFsd2F5cyBkaWQgdGhlIGVxdWl2YWxlbnQgb2YKLS5CUiAiXC1jb3B5IG5vbmUiIC4pCitzZXR0aW5ncy4gIEluIHNvbWUgZmlsZXMsIHRoZXNlIGV4dHJhIG1hcmtlcnMgY2FuIGJlIHNpemFibGUuCisuUFAKK1RoZSBkZWZhdWx0IGJlaGF2aW9yIGlzIFxmQi1jb3B5IGNvbW1lbnRzXGZSLiAgKE5vdGU6IGluIElKRyByZWxlYXNlcyB2NiBhbmQKK3Y2YSwgXGZCanBlZ3RyYW5cZlIgYWx3YXlzIGRpZCB0aGUgZXF1aXZhbGVudCBvZiBcZkItY29weSBub25lXGZSLikKIC5QUAogQWRkaXRpb25hbCBzd2l0Y2hlcyByZWNvZ25pemVkIGJ5IGpwZWd0cmFuIGFyZToKIC5UUApkaWZmIC0tZ2l0IGEvanBlZ3RyYW4uYyBiL2pwZWd0cmFuLmMKaW5kZXggOGNiM2Q4MC4uNzNkYmU1MyAxMDA2NDQKLS0tIGEvanBlZ3RyYW4uYworKysgYi9qcGVndHJhbi5jCkBAIC0yLDYgKzIsNyBAQAogICoganBlZ3RyYW4uYwogICoKICAqIENvcHlyaWdodCAoQykgMTk5NS0yMDEwLCBUaG9tYXMgRy4gTGFuZSwgR3VpZG8gVm9sbGJlZGluZy4KKyAqIENvcHlyaWdodCAoQykgMjAxMCwgRC4gUi4gQ29tbWFuZGVyLgogICogVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEluZGVwZW5kZW50IEpQRUcgR3JvdXAncyBzb2Z0d2FyZS4KICAqIEZvciBjb25kaXRpb25zIG9mIGRpc3RyaWJ1dGlvbiBhbmQgdXNlLCBzZWUgdGhlIGFjY29tcGFueWluZyBSRUFETUUgZmlsZS4KICAqCkBAIC0xNCw2ICsxNSw3IEBACiAjaW5jbHVkZSAiY2RqcGVnLmgiCQkvKiBDb21tb24gZGVjbHMgZm9yIGNqcGVnL2RqcGVnIGFwcGxpY2F0aW9ucyAqLwogI2luY2x1ZGUgInRyYW5zdXBwLmgiCQkvKiBTdXBwb3J0IHJvdXRpbmVzIGZvciBqcGVndHJhbiAqLwogI2luY2x1ZGUgImp2ZXJzaW9uLmgiCQkvKiBmb3IgdmVyc2lvbiBtZXNzYWdlICovCisjaW5jbHVkZSAiY29uZmlnLmgiCiAKICNpZmRlZiBVU0VfQ0NPTU1BTkQJCS8qIGNvbW1hbmQtbGluZSByZWFkZXIgZm9yIE1hY2ludG9zaCAqLwogI2lmZGVmIF9fTVdFUktTX18KQEAgLTM3LDcgKzM5LDYgQEAKIAogc3RhdGljIGNvbnN0IGNoYXIgKiBwcm9nbmFtZTsJLyogcHJvZ3JhbSBuYW1lIGZvciBlcnJvciBtZXNzYWdlcyAqLwogc3RhdGljIGNoYXIgKiBvdXRmaWxlbmFtZTsJLyogZm9yIC1vdXRmaWxlIHN3aXRjaCAqLwotc3RhdGljIGNoYXIgKiBzY2FsZW9wdGlvbjsJLyogLXNjYWxlIHN3aXRjaCAqLwogc3RhdGljIEpDT1BZX09QVElPTiBjb3B5b3B0aW9uOwkvKiAtY29weSBzd2l0Y2ggKi8KIHN0YXRpYyBqcGVnX3RyYW5zZm9ybV9pbmZvIHRyYW5zZm9ybW9wdGlvbjsgLyogaW1hZ2UgdHJhbnNmb3JtYXRpb24gb3B0aW9ucyAqLwogCkBAIC03MSw3ICs3Miw2IEBACiAgIGZwcmludGYoc3RkZXJyLCAiICAtcGVyZmVjdCAgICAgICBGYWlsIGlmIHRoZXJlIGlzIG5vbi10cmFuc2Zvcm1hYmxlIGVkZ2UgYmxvY2tzXG4iKTsKICAgZnByaW50ZihzdGRlcnIsICIgIC1yb3RhdGUgWzkwfDE4MHwyNzBdICAgICAgICAgUm90YXRlIGltYWdlIChkZWdyZWVzIGNsb2Nrd2lzZSlcbiIpOwogI2VuZGlmCi0gIGZwcmludGYoc3RkZXJyLCAiICAtc2NhbGUgTS9OICAgICBTY2FsZSBvdXRwdXQgaW1hZ2UgYnkgZnJhY3Rpb24gTS9OLCBlZywgMS84XG4iKTsKICNpZiBUUkFOU0ZPUk1TX1NVUFBPUlRFRAogICBmcHJpbnRmKHN0ZGVyciwgIiAgLXRyYW5zcG9zZSAgICAgVHJhbnNwb3NlIGltYWdlXG4iKTsKICAgZnByaW50ZihzdGRlcnIsICIgIC10cmFuc3ZlcnNlICAgIFRyYW5zdmVyc2UgdHJhbnNwb3NlIGltYWdlXG4iKTsKQEAgLTEzNiw3ICsxMzYsNiBAQAogICAvKiBTZXQgdXAgZGVmYXVsdCBKUEVHIHBhcmFtZXRlcnMuICovCiAgIHNpbXBsZV9wcm9ncmVzc2l2ZSA9IEZBTFNFOwogICBvdXRmaWxlbmFtZSA9IE5VTEw7Ci0gIHNjYWxlb3B0aW9uID0gTlVMTDsKICAgY29weW9wdGlvbiA9IEpDT1BZT1BUX0RFRkFVTFQ7CiAgIHRyYW5zZm9ybW9wdGlvbi50cmFuc2Zvcm0gPSBKWEZPUk1fTk9ORTsKICAgdHJhbnNmb3Jtb3B0aW9uLnBlcmZlY3QgPSBGQUxTRTsKQEAgLTIwMiw3ICsyMDEsMTAgQEAKICAgICAgIHN0YXRpYyBib29sZWFuIHByaW50ZWRfdmVyc2lvbiA9IEZBTFNFOwogCiAgICAgICBpZiAoISBwcmludGVkX3ZlcnNpb24pIHsKLQlmcHJpbnRmKHN0ZGVyciwgIkluZGVwZW5kZW50IEpQRUcgR3JvdXAncyBKUEVHVFJBTiwgdmVyc2lvbiAlc1xuJXNcbiIsCisJZnByaW50ZihzdGRlcnIsICIlcyB2ZXJzaW9uICVzIChidWlsZCAlcylcbiIsCisJCVBBQ0tBR0VfTkFNRSwgVkVSU0lPTiwgQlVJTEQpOworCWZwcmludGYoc3RkZXJyLCAiJXNcblxuIiwgTEpUQ09QWVJJR0hUKTsKKwlmcHJpbnRmKHN0ZGVyciwgIkJhc2VkIG9uIEluZGVwZW5kZW50IEpQRUcgR3JvdXAncyBsaWJqcGVnLCB2ZXJzaW9uICVzXG4lc1xuXG4iLAogCQlKVkVSU0lPTiwgSkNPUFlSSUdIVCk7CiAJcHJpbnRlZF92ZXJzaW9uID0gVFJVRTsKICAgICAgIH0KQEAgLTMwNCwxMyArMzA2LDYgQEAKICAgICAgIGVsc2UKIAl1c2FnZSgpOwogCi0gICAgfSBlbHNlIGlmIChrZXltYXRjaChhcmcsICJzY2FsZSIsIDQpKSB7Ci0gICAgICAvKiBTY2FsZSB0aGUgb3V0cHV0IGltYWdlIGJ5IGEgZnJhY3Rpb24gTS9OLiAqLwotICAgICAgaWYgKCsrYXJnbiA+PSBhcmdjKQkvKiBhZHZhbmNlIHRvIG5leHQgYXJndW1lbnQgKi8KLQl1c2FnZSgpOwotICAgICAgc2NhbGVvcHRpb24gPSBhcmd2W2FyZ25dOwotICAgICAgLyogV2UgbXVzdCBwb3N0cG9uZSBwcm9jZXNzaW5nIHVudGlsIGRlY29tcHJlc3Npb24gc3RhcnR1cC4gKi8KLQogICAgIH0gZWxzZSBpZiAoa2V5bWF0Y2goYXJnLCAic2NhbnMiLCAxKSkgewogICAgICAgLyogU2V0IHNjYW4gc2NyaXB0LiAqLwogI2lmZGVmIENfTVVMVElTQ0FOX0ZJTEVTX1NVUFBPUlRFRApAQCAtNDY1LDEyICs0NjAsNiBAQAogICAvKiBSZWFkIGZpbGUgaGVhZGVyICovCiAgICh2b2lkKSBqcGVnX3JlYWRfaGVhZGVyKCZzcmNpbmZvLCBUUlVFKTsKIAotICAvKiBBZGp1c3QgZGVmYXVsdCBkZWNvbXByZXNzaW9uIHBhcmFtZXRlcnMgKi8KLSAgaWYgKHNjYWxlb3B0aW9uICE9IE5VTEwpCi0gICAgaWYgKHNzY2FuZihzY2FsZW9wdGlvbiwgIiVkLyVkIiwKLQkmc3JjaW5mby5zY2FsZV9udW0sICZzcmNpbmZvLnNjYWxlX2Rlbm9tKSA8IDEpCi0gICAgICB1c2FnZSgpOwotCiAgIC8qIEFueSBzcGFjZSBuZWVkZWQgYnkgYSB0cmFuc2Zvcm0gb3B0aW9uIG11c3QgYmUgcmVxdWVzdGVkIGJlZm9yZQogICAgKiBqcGVnX3JlYWRfY29lZmZpY2llbnRzIHNvIHRoYXQgbWVtb3J5IGFsbG9jYXRpb24gd2lsbCBiZSBkb25lIHJpZ2h0LgogICAgKi8KZGlmZiAtLWdpdCBhL2pwZWd1dC5jIGIvanBlZ3V0LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uM2JiY2I4OQotLS0gL2Rldi9udWxsCisrKyBiL2pwZWd1dC5jCkBAIC0wLDAgKzEsNjEzIEBACisvKiBDb3B5cmlnaHQgKEMpMjAwNCBMYW5kbWFyayBHcmFwaGljcyBDb3Jwb3JhdGlvbgorICogQ29weXJpZ2h0IChDKTIwMDUgU3VuIE1pY3Jvc3lzdGVtcywgSW5jLgorICogQ29weXJpZ2h0IChDKTIwMDktMjAxMSBELiBSLiBDb21tYW5kZXIKKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZSBhbmQgbWF5IGJlIHJlZGlzdHJpYnV0ZWQgYW5kL29yIG1vZGlmaWVkIHVuZGVyCisgKiB0aGUgdGVybXMgb2YgdGhlIHd4V2luZG93cyBMaWJyYXJ5IExpY2Vuc2UsIFZlcnNpb24gMy4xIG9yIChhdCB5b3VyIG9wdGlvbikKKyAqIGFueSBsYXRlciB2ZXJzaW9uLiAgVGhlIGZ1bGwgbGljZW5zZSBpcyBpbiB0aGUgTElDRU5TRS50eHQgZmlsZSBpbmNsdWRlZAorICogd2l0aCB0aGlzIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgKiB3eFdpbmRvd3MgTGlicmFyeSBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKi8KKworI2luY2x1ZGUgPHN0ZGlvLmg+CisjaW5jbHVkZSA8c3RkbGliLmg+CisjaW5jbHVkZSA8c3RyaW5nLmg+CisjaW5jbHVkZSAiLi9ycnRpbWVyLmgiCisjaW5jbHVkZSAiLi90dXJib2pwZWcuaCIKKyNpZm5kZWYgX1dJTjMyCisgI2RlZmluZSBzdHJpY21wIHN0cmNhc2VjbXAKKyNlbmRpZgorCisjZGVmaW5lIF9jYXRjaChmKSB7aWYoKGYpPT0tMSkge3ByaW50ZigiVEpQRUc6ICVzXG4iLCB0akdldEVycm9yU3RyKCkpOyAgYmFpbG91dCgpO319CisKK2NvbnN0IGNoYXIgKl9zdWJuYW1lbFtOVU1TVUJPUFRdPXsiNDo0OjQiLCAiNDoyOjIiLCAiNDoyOjAiLCAiR1JBWSJ9OworY29uc3QgY2hhciAqX3N1Ym5hbWVzW05VTVNVQk9QVF09eyI0NDQiLCAiNDIyIiwgIjQyMCIsICJHUkFZIn07Citjb25zdCBpbnQgX2hzZltOVU1TVUJPUFRdPXsxLCAyLCAyLCAxfTsKK2NvbnN0IGludCBfdnNmW05VTVNVQk9QVF09ezEsIDEsIDIsIDF9OworCitlbnVtIHtZVVZFTkNPREU9MSwgWVVWREVDT0RFfTsKK2ludCB5dXY9MDsKKworaW50IGV4aXRzdGF0dXM9MDsKKyNkZWZpbmUgYmFpbG91dCgpIHtleGl0c3RhdHVzPS0xOyAgZ290byBmaW5hbGx5O30KKworaW50IHBpeGVsc1s5XVszXT0KK3sKKwl7MCwgMjU1LCAwfSwKKwl7MjU1LCAwLCAyNTV9LAorCXsyNTUsIDI1NSwgMH0sCisJezAsIDAsIDI1NX0sCisJezAsIDI1NSwgMjU1fSwKKwl7MjU1LCAwLCAwfSwKKwl7MjU1LCAyNTUsIDI1NX0sCisJezAsIDAsIDB9LAorCXsyNTUsIDAsIDB9Cit9OworCit2b2lkIGluaXRidWYodW5zaWduZWQgY2hhciAqYnVmLCBpbnQgdywgaW50IGgsIGludCBwcywgaW50IGZsYWdzKQoreworCWludCByb2Zmc2V0PShmbGFncyZUSl9CR1IpPzI6MCwgZ29mZnNldD0xLCBib2Zmc2V0PShmbGFncyZUSl9CR1IpPzA6MiwgaSwKKwkJX2ksIGo7CisJaWYoZmxhZ3MmVEpfQUxQSEFGSVJTVCkge3JvZmZzZXQrKzsgIGdvZmZzZXQrKzsgIGJvZmZzZXQrKzt9CisJbWVtc2V0KGJ1ZiwgMCwgdypoKnBzKTsKKwlpZihwcz09MSkKKwl7CisJCWZvcihfaT0wOyBfaTwxNjsgX2krKykKKwkJeworCQkJaWYoZmxhZ3MmVEpfQk9UVE9NVVApIGk9aC1faS0xOyAgZWxzZSBpPV9pOworCQkJZm9yKGo9MDsgajx3OyBqKyspCisJCQl7CisJCQkJaWYoKChfaS84KSsoai84KSklMj09MCkgYnVmW3cqaStqXT0yNTU7CisJCQkJZWxzZSBidWZbdyppK2pdPTc2OworCQkJfQorCQl9CisJCWZvcihfaT0xNjsgX2k8aDsgX2krKykKKwkJeworCQkJaWYoZmxhZ3MmVEpfQk9UVE9NVVApIGk9aC1faS0xOyAgZWxzZSBpPV9pOworCQkJZm9yKGo9MDsgajx3OyBqKyspCisJCQl7CisJCQkJaWYoKChfaS84KSsoai84KSklMj09MCkgYnVmW3cqaStqXT0wOworCQkJCWVsc2UgYnVmW3cqaStqXT0yMjY7CisJCQl9CisJCX0KKwkJcmV0dXJuOworCX0KKwlmb3IoX2k9MDsgX2k8MTY7IF9pKyspCisJeworCQlpZihmbGFncyZUSl9CT1RUT01VUCkgaT1oLV9pLTE7ICBlbHNlIGk9X2k7CisJCWZvcihqPTA7IGo8dzsgaisrKQorCQl7CisJCQlidWZbKHcqaStqKSpwcytyb2Zmc2V0XT0yNTU7CisJCQlpZigoKF9pLzgpKyhqLzgpKSUyPT0wKQorCQkJeworCQkJCWJ1ZlsodyppK2opKnBzK2dvZmZzZXRdPTI1NTsKKwkJCQlidWZbKHcqaStqKSpwcytib2Zmc2V0XT0yNTU7CisJCQl9CisJCX0KKwl9CisJZm9yKF9pPTE2OyBfaTxoOyBfaSsrKQorCXsKKwkJaWYoZmxhZ3MmVEpfQk9UVE9NVVApIGk9aC1faS0xOyAgZWxzZSBpPV9pOworCQlmb3Ioaj0wOyBqPHc7IGorKykKKwkJeworCQkJaWYoKChfaS84KSsoai84KSklMiE9MCkKKwkJCXsKKwkJCQlidWZbKHcqaStqKSpwcytyb2Zmc2V0XT0yNTU7CisJCQkJYnVmWyh3KmkraikqcHMrZ29mZnNldF09MjU1OworCQkJfQorCQl9CisJfQorfQorCit2b2lkIGR1bXBidWYodW5zaWduZWQgY2hhciAqYnVmLCBpbnQgdywgaW50IGgsIGludCBwcywgaW50IGZsYWdzKQoreworCWludCByb2Zmc2V0PShmbGFncyZUSl9CR1IpPzI6MCwgZ29mZnNldD0xLCBib2Zmc2V0PShmbGFncyZUSl9CR1IpPzA6MiwgaSwKKwkJajsKKwlwcmludGYoIlxuIik7CisJZm9yKGk9MDsgaTxoOyBpKyspCisJeworCQlmb3Ioaj0wOyBqPHc7IGorKykKKwkJeworCQkJcHJpbnRmKCIlLjNkLyUuM2QvJS4zZCAiLCBidWZbKHcqaStqKSpwcytyb2Zmc2V0XSwKKwkJCQlidWZbKHcqaStqKSpwcytnb2Zmc2V0XSwgYnVmWyh3KmkraikqcHMrYm9mZnNldF0pOworCQl9CisJCXByaW50ZigiXG4iKTsKKwl9Cit9CisKK2ludCBjaGVja2J1Zih1bnNpZ25lZCBjaGFyICpidWYsIGludCB3LCBpbnQgaCwgaW50IHBzLCBpbnQgc3Vic2FtcCwgaW50IGZsYWdzKQoreworCWludCByb2Zmc2V0PShmbGFncyZUSl9CR1IpPzI6MCwgZ29mZnNldD0xLCBib2Zmc2V0PShmbGFncyZUSl9CR1IpPzA6MiwgaSwKKwkJX2ksIGo7CisJaWYoZmxhZ3MmVEpfQUxQSEFGSVJTVCkge3JvZmZzZXQrKzsgIGdvZmZzZXQrKzsgIGJvZmZzZXQrKzt9CisJaWYocHM9PTEpIHJvZmZzZXQ9Z29mZnNldD1ib2Zmc2V0PTA7CisJaWYoc3Vic2FtcD09VEpfR1JBWVNDQUxFKQorCXsKKwkJZm9yKF9pPTA7IF9pPDE2OyBfaSsrKQorCQl7CisJCQlpZihmbGFncyZUSl9CT1RUT01VUCkgaT1oLV9pLTE7ICBlbHNlIGk9X2k7CisJCQlmb3Ioaj0wOyBqPHc7IGorKykKKwkJCXsKKwkJCQl1bnNpZ25lZCBjaGFyIHI9YnVmWyh3KmkraikqcHMrcm9mZnNldF0sCisJCQkJCWc9YnVmWyh3KmkraikqcHMrZ29mZnNldF0sCisJCQkJCWI9YnVmWyh3KmkraikqcHMrYm9mZnNldF07CisJCQkJaWYoKChfaS84KSsoai84KSklMj09MCkKKwkJCQl7CisJCQkJCWlmKHI8MjUzIHx8IGc8MjUzIHx8IGI8MjUzKSByZXR1cm4gMDsKKwkJCQl9CisJCQkJZWxzZQorCQkJCXsKKwkJCQkJaWYocjw3NCB8fCByPjc4IHx8IGc8NzQgfHwgZz43OCB8fCBiPDc0IHx8IGI+NzgpIHJldHVybiAwOworCQkJCX0KKwkJCX0KKwkJfQorCQlmb3IoX2k9MTY7IF9pPGg7IF9pKyspCisJCXsKKwkJCWlmKGZsYWdzJlRKX0JPVFRPTVVQKSBpPWgtX2ktMTsgIGVsc2UgaT1faTsKKwkJCWZvcihqPTA7IGo8dzsgaisrKQorCQkJeworCQkJCXVuc2lnbmVkIGNoYXIgcj1idWZbKHcqaStqKSpwcytyb2Zmc2V0XSwKKwkJCQkJZz1idWZbKHcqaStqKSpwcytnb2Zmc2V0XSwKKwkJCQkJYj1idWZbKHcqaStqKSpwcytib2Zmc2V0XTsKKwkJCQlpZigoKF9pLzgpKyhqLzgpKSUyPT0wKQorCQkJCXsKKwkJCQkJaWYocj4yIHx8IGc+MiB8fCBiPjIpIHJldHVybiAwOworCQkJCX0KKwkJCQllbHNlCisJCQkJeworCQkJCQlpZihyPDIyNCB8fCByPjIyOCB8fCBnPDIyNCB8fCBnPjIyOCB8fCBiPDIyNCB8fCBiPjIyOCkgcmV0dXJuIDA7CisJCQkJfQorCQkJfQorCQl9CisJfQorCWVsc2UKKwl7CisJCWZvcihfaT0wOyBfaTwxNjsgX2krKykKKwkJeworCQkJaWYoZmxhZ3MmVEpfQk9UVE9NVVApIGk9aC1faS0xOyAgZWxzZSBpPV9pOworCQkJZm9yKGo9MDsgajx3OyBqKyspCisJCQl7CisJCQkJaWYoYnVmWyh3KmkraikqcHMrcm9mZnNldF08MjUzKSByZXR1cm4gMDsKKwkJCQlpZigoKF9pLzgpKyhqLzgpKSUyPT0wKQorCQkJCXsKKwkJCQkJaWYoYnVmWyh3KmkraikqcHMrZ29mZnNldF08MjUzKSByZXR1cm4gMDsKKwkJCQkJaWYoYnVmWyh3KmkraikqcHMrYm9mZnNldF08MjUzKSByZXR1cm4gMDsKKwkJCQl9CisJCQkJZWxzZQorCQkJCXsKKwkJCQkJaWYoYnVmWyh3KmkraikqcHMrZ29mZnNldF0+MikgcmV0dXJuIDA7CisJCQkJCWlmKGJ1ZlsodyppK2opKnBzK2JvZmZzZXRdPjIpIHJldHVybiAwOworCQkJCX0KKwkJCX0KKwkJfQorCQlmb3IoX2k9MTY7IF9pPGg7IF9pKyspCisJCXsKKwkJCWlmKGZsYWdzJlRKX0JPVFRPTVVQKSBpPWgtX2ktMTsgIGVsc2UgaT1faTsKKwkJCWZvcihqPTA7IGo8dzsgaisrKQorCQkJeworCQkJCWlmKGJ1ZlsodyppK2opKnBzK2JvZmZzZXRdPjIpIHJldHVybiAwOworCQkJCWlmKCgoX2kvOCkrKGovOCkpJTI9PTApCisJCQkJeworCQkJCQlpZihidWZbKHcqaStqKSpwcytyb2Zmc2V0XT4yKSByZXR1cm4gMDsKKwkJCQkJaWYoYnVmWyh3KmkraikqcHMrZ29mZnNldF0+MikgcmV0dXJuIDA7CisJCQkJfQorCQkJCWVsc2UKKwkJCQl7CisJCQkJCWlmKGJ1ZlsodyppK2opKnBzK3JvZmZzZXRdPDI1MykgcmV0dXJuIDA7CisJCQkJCWlmKGJ1ZlsodyppK2opKnBzK2dvZmZzZXRdPDI1MykgcmV0dXJuIDA7CisJCQkJfQorCQkJfQorCQl9CisJfQorCXJldHVybiAxOworfQorCisjZGVmaW5lIGNoZWNrdmFsKHYsIGN2KSB7IFwKKwlpZih2PGN2LTEgfHwgdj5jdisxKSB7IFwKKwkJcHJpbnRmKCJcbkNvbXAuICVzIGF0ICVkLCVkIHNob3VsZCBiZSAlZCwgbm90ICVkXG4iLCAjdiwgaSwgaiwgY3YsIHYpOyBcCisJCXJldHZhbD0wOyAgZ290byBiYWlsb3V0OyBcCisJfX0KKworI2RlZmluZSBjaGVja3ZhbDAodikgeyBcCisJaWYodj4xKSB7IFwKKwkJcHJpbnRmKCJcbkNvbXAuICVzIGF0ICVkLCVkIHNob3VsZCBiZSAwLCBub3QgJWRcbiIsICN2LCBpLCBqLCB2KTsgXAorCQlyZXR2YWw9MDsgIGdvdG8gYmFpbG91dDsgXAorCX19CisKKyNkZWZpbmUgY2hlY2t2YWwyNTUodikgeyBcCisJaWYodjwyNTQpIHsgXAorCQlwcmludGYoIlxuQ29tcC4gJXMgYXQgJWQsJWQgc2hvdWxkIGJlIDI1NSwgbm90ICVkXG4iLCAjdiwgaSwgaiwgdik7IFwKKwkJcmV0dmFsPTA7ICBnb3RvIGJhaWxvdXQ7IFwKKwl9fQorCisjZGVmaW5lIFBBRCh2LCBwKSAoKHYrKHApLTEpJih+KChwKS0xKSkpCisKK2ludCBjaGVja2J1Znl1dih1bnNpZ25lZCBjaGFyICpidWYsIGludCB3LCBpbnQgaCwgaW50IHN1YnNhbXApCit7CisJaW50IGksIGo7CisJaW50IGhzZj1faHNmW3N1YnNhbXBdLCB2c2Y9X3ZzZltzdWJzYW1wXTsKKwlpbnQgcHc9UEFEKHcsIGhzZiksIHBoPVBBRChoLCB2c2YpOworCWludCBjdz1wdy9oc2YsIGNoPXBoL3ZzZjsKKwlpbnQgeXBpdGNoPVBBRChwdywgNCksIHV2cGl0Y2g9UEFEKGN3LCA0KTsKKwlpbnQgcmV0dmFsPTE7CisKKwlmb3IoaT0wOyBpPDE2OyBpKyspCisJeworCQlmb3Ioaj0wOyBqPHB3OyBqKyspCisJCXsKKwkJCXVuc2lnbmVkIGNoYXIgeT1idWZbeXBpdGNoKmkral07CisJCQlpZigoKGkvOCkrKGovOCkpJTI9PTApIGNoZWNrdmFsMjU1KHkpCisJCQllbHNlIGNoZWNrdmFsKHksIDc2KQorCQl9CisJfQorCWZvcihpPTE2OyBpPHBoOyBpKyspCisJeworCQlmb3Ioaj0wOyBqPHB3OyBqKyspCisJCXsKKwkJCXVuc2lnbmVkIGNoYXIgeT1idWZbeXBpdGNoKmkral07CisJCQlpZigoKGkvOCkrKGovOCkpJTI9PTApIGNoZWNrdmFsMCh5KQorCQkJZWxzZSBjaGVja3ZhbCh5LCAyMjYpCisJCX0KKwl9CisJaWYoc3Vic2FtcCE9VEpfR1JBWVNDQUxFKQorCXsKKwkJZm9yKGk9MDsgaTwxNi92c2Y7IGkrKykKKwkJeworCQkJZm9yKGo9MDsgajxjdzsgaisrKQorCQkJeworCQkJCXVuc2lnbmVkIGNoYXIgdT1idWZbeXBpdGNoKnBoICsgKHV2cGl0Y2gqaStqKV0sCisJCQkJCXY9YnVmW3lwaXRjaCpwaCArIHV2cGl0Y2gqY2ggKyAodXZwaXRjaCppK2opXTsKKwkJCQlpZigoKGkqdnNmLzgpKyhqKmhzZi84KSklMj09MCkKKwkJCQl7CisJCQkJCWNoZWNrdmFsKHUsIDEyOCk7ICBjaGVja3ZhbCh2LCAxMjgpOworCQkJCX0KKwkJCQllbHNlCisJCQkJeworCQkJCQljaGVja3ZhbCh1LCA4NSk7ICBjaGVja3ZhbDI1NSh2KTsKKwkJCQl9CisJCQl9CisJCX0KKwkJZm9yKGk9MTYvdnNmOyBpPGNoOyBpKyspCisJCXsKKwkJCWZvcihqPTA7IGo8Y3c7IGorKykKKwkJCXsKKwkJCQl1bnNpZ25lZCBjaGFyIHU9YnVmW3lwaXRjaCpwaCArICh1dnBpdGNoKmkraildLAorCQkJCQl2PWJ1Zlt5cGl0Y2gqcGggKyB1dnBpdGNoKmNoICsgKHV2cGl0Y2gqaStqKV07CisJCQkJaWYoKChpKnZzZi84KSsoaipoc2YvOCkpJTI9PTApCisJCQkJeworCQkJCQljaGVja3ZhbCh1LCAxMjgpOyAgY2hlY2t2YWwodiwgMTI4KTsKKwkJCQl9CisJCQkJZWxzZQorCQkJCXsKKwkJCQkJY2hlY2t2YWwwKHUpOyAgY2hlY2t2YWwodiwgMTQ5KTsKKwkJCQl9CisJCQl9CisJCX0KKwl9CisKKwliYWlsb3V0OgorCWlmKHJldHZhbD09MCkKKwl7CisJCWZvcihpPTA7IGk8cGg7IGkrKykKKwkJeworCQkJZm9yKGo9MDsgajxwdzsgaisrKQorCQkJCXByaW50ZigiJS4zZCAiLCBidWZbeXBpdGNoKmkral0pOworCQkJcHJpbnRmKCJcbiIpOworCQl9CisJCXByaW50ZigiXG4iKTsKKwkJZm9yKGk9MDsgaTxjaDsgaSsrKQorCQl7CisJCQlmb3Ioaj0wOyBqPGN3OyBqKyspCisJCQkJcHJpbnRmKCIlLjNkICIsIGJ1Zlt5cGl0Y2gqcGggKyAodXZwaXRjaCppK2opXSk7CisJCQlwcmludGYoIlxuIik7CisJCX0KKwkJcHJpbnRmKCJcbiIpOworCQlmb3IoaT0wOyBpPGNoOyBpKyspCisJCXsKKwkJCWZvcihqPTA7IGo8Y3c7IGorKykKKwkJCQlwcmludGYoIiUuM2QgIiwgYnVmW3lwaXRjaCpwaCArIHV2cGl0Y2gqY2ggKyAodXZwaXRjaCppK2opXSk7CisJCQlwcmludGYoIlxuIik7CisJCX0KKwkJcHJpbnRmKCJcbiIpOworCX0KKworCXJldHVybiByZXR2YWw7Cit9CisKK3ZvaWQgd3JpdGVqcGVnKHVuc2lnbmVkIGNoYXIgKmpwZWdidWYsIHVuc2lnbmVkIGxvbmcganBnYnVmc2l6ZSwgY2hhciAqZmlsZW5hbWUpCit7CisJRklMRSAqb3V0ZmlsZT1OVUxMOworCWlmKChvdXRmaWxlPWZvcGVuKGZpbGVuYW1lLCAid2IiKSk9PU5VTEwpCisJeworCQlwcmludGYoIkVSUk9SOiBDb3VsZCBub3Qgb3BlbiAlcyBmb3Igd3JpdGluZy5cbiIsIGZpbGVuYW1lKTsKKwkJYmFpbG91dCgpOworCX0KKwlpZihmd3JpdGUoanBlZ2J1ZiwganBnYnVmc2l6ZSwgMSwgb3V0ZmlsZSkhPTEpCisJeworCQlwcmludGYoIkVSUk9SOiBDb3VsZCBub3Qgd3JpdGUgdG8gJXMuXG4iLCBmaWxlbmFtZSk7CisJCWJhaWxvdXQoKTsKKwl9CisKKwlmaW5hbGx5OgorCWlmKG91dGZpbGUpIGZjbG9zZShvdXRmaWxlKTsKK30KKwordm9pZCBnZW50ZXN0anBlZyh0amhhbmRsZSBobmQsIHVuc2lnbmVkIGNoYXIgKmpwZWdidWYsIHVuc2lnbmVkIGxvbmcgKnNpemUsCisJaW50IHcsIGludCBoLCBpbnQgcHMsIGNoYXIgKmJhc2VmaWxlbmFtZSwgaW50IHN1YnNhbXAsIGludCBxdWFsLCBpbnQgZmxhZ3MpCit7CisJY2hhciB0ZW1wc3RyWzEwMjRdOyAgdW5zaWduZWQgY2hhciAqYm1wYnVmPU5VTEw7CisJY29uc3QgY2hhciAqcGl4Zm9ybWF0OyAgZG91YmxlIHQ7CisKKwlpZihmbGFncyZUSl9CR1IpCisJeworCQlpZihwcz09MykgcGl4Zm9ybWF0PSJCR1IiOworCQllbHNlIHtpZihmbGFncyZUSl9BTFBIQUZJUlNUKSBwaXhmb3JtYXQ9IlhCR1IiOyAgZWxzZSBwaXhmb3JtYXQ9IkJHUlgiO30KKwl9CisJZWxzZQorCXsKKwkJaWYocHM9PTMpIHBpeGZvcm1hdD0iUkdCIjsKKwkJZWxzZSB7aWYoZmxhZ3MmVEpfQUxQSEFGSVJTVCkgcGl4Zm9ybWF0PSJYUkdCIjsgIGVsc2UgcGl4Zm9ybWF0PSJSR0JYIjt9CisJfQorCWlmKHBzPT0xKSBwaXhmb3JtYXQ9IkdyYXlzY2FsZSI7CisJaWYoeXV2PT1ZVVZFTkNPREUpCisJCXByaW50ZigiJXMgJXMgLT4gJXMgWVVWIC4uLiAiLCBwaXhmb3JtYXQsCisJCQkoZmxhZ3MmVEpfQk9UVE9NVVApPyJCb3R0b20tVXAiOiJUb3AtRG93biAiLCBfc3VibmFtZWxbc3Vic2FtcF0pOworCWVsc2UKKwkJcHJpbnRmKCIlcyAlcyAtPiAlcyBRJWQgLi4uICIsIHBpeGZvcm1hdCwKKwkJCShmbGFncyZUSl9CT1RUT01VUCk/IkJvdHRvbS1VcCI6IlRvcC1Eb3duICIsIF9zdWJuYW1lbFtzdWJzYW1wXSwgcXVhbCk7CisKKwlpZigoYm1wYnVmPSh1bnNpZ25lZCBjaGFyICopbWFsbG9jKHcqaCpwcysxKSk9PU5VTEwpCisJeworCQlwcmludGYoIkVSUk9SOiBDb3VsZCBub3QgYWxsb2NhdGUgYnVmZmVyXG4iKTsgIGJhaWxvdXQoKTsKKwl9CisJaW5pdGJ1ZihibXBidWYsIHcsIGgsIHBzLCBmbGFncyk7CisJbWVtc2V0KGpwZWdidWYsIDAsCisJCXl1dj09WVVWRU5DT0RFPyBUSkJVRlNJWkVZVVYodywgaCwgc3Vic2FtcCk6VEpCVUZTSVpFKHcsIGgpKTsKKworCXQ9cnJ0aW1lKCk7CisJaWYoeXV2PT1ZVVZFTkNPREUpCisJeworCQlfY2F0Y2godGpFbmNvZGVZVVYoaG5kLCBibXBidWYsIHcsIDAsIGgsIHBzLCBqcGVnYnVmLCBzdWJzYW1wLCBmbGFncykpOworCQkqc2l6ZT1USkJVRlNJWkVZVVYodywgaCwgc3Vic2FtcCk7CisJfQorCWVsc2UKKwl7CisJCV9jYXRjaCh0akNvbXByZXNzKGhuZCwgYm1wYnVmLCB3LCAwLCBoLCBwcywganBlZ2J1Ziwgc2l6ZSwgc3Vic2FtcCwgcXVhbCwKKwkJCWZsYWdzKSk7CisJfQorCXQ9cnJ0aW1lKCktdDsKKworCWlmKHl1dj09WVVWRU5DT0RFKQorCQlzcHJpbnRmKHRlbXBzdHIsICIlc19lbmNfJXNfJXNfJXMueXV2IiwgYmFzZWZpbGVuYW1lLCBwaXhmb3JtYXQsCisJCQkoZmxhZ3MmVEpfQk9UVE9NVVApPyAiQlUiOiJURCIsIF9zdWJuYW1lc1tzdWJzYW1wXSk7CisJZWxzZQorCQlzcHJpbnRmKHRlbXBzdHIsICIlc19lbmNfJXNfJXNfJXNRJWQuanBnIiwgYmFzZWZpbGVuYW1lLCBwaXhmb3JtYXQsCisJCQkoZmxhZ3MmVEpfQk9UVE9NVVApPyAiQlUiOiJURCIsIF9zdWJuYW1lc1tzdWJzYW1wXSwgcXVhbCk7CisJd3JpdGVqcGVnKGpwZWdidWYsICpzaXplLCB0ZW1wc3RyKTsKKwlpZih5dXY9PVlVVkVOQ09ERSkKKwl7CisJCWlmKGNoZWNrYnVmeXV2KGpwZWdidWYsIHcsIGgsIHN1YnNhbXApKSBwcmludGYoIlBhc3NlZC4iKTsKKwkJZWxzZSB7cHJpbnRmKCJGQUlMRUQhIik7ICBleGl0c3RhdHVzPS0xO30KKwl9CisJZWxzZSBwcmludGYoIkRvbmUuIik7CisJcHJpbnRmKCIgICVmIG1zXG4gIFJlc3VsdCBpbiAlc1xuIiwgdCoxMDAwLiwgdGVtcHN0cik7CisKKwlmaW5hbGx5OgorCWlmKGJtcGJ1ZikgZnJlZShibXBidWYpOworfQorCit2b2lkIGdlbnRlc3RibXAodGpoYW5kbGUgaG5kLCB1bnNpZ25lZCBjaGFyICpqcGVnYnVmLCB1bnNpZ25lZCBsb25nIGpwZWdzaXplLAorCWludCB3LCBpbnQgaCwgaW50IHBzLCBjaGFyICpiYXNlZmlsZW5hbWUsIGludCBzdWJzYW1wLCBpbnQgZmxhZ3MpCit7CisJdW5zaWduZWQgY2hhciAqYm1wYnVmPU5VTEw7CisJY29uc3QgY2hhciAqcGl4Zm9ybWF0OyAgaW50IF93PTAsIF9oPTA7ICBkb3VibGUgdDsKKwl1bnNpZ25lZCBsb25nIHNpemU9MDsKKworCWlmKHl1dj09WVVWRU5DT0RFKSByZXR1cm47CisKKwlpZihmbGFncyZUSl9CR1IpCisJeworCQlpZihwcz09MykgcGl4Zm9ybWF0PSJCR1IiOworCQllbHNlIHtpZihmbGFncyZUSl9BTFBIQUZJUlNUKSBwaXhmb3JtYXQ9IlhCR1IiOyAgZWxzZSBwaXhmb3JtYXQ9IkJHUlgiO30KKwl9CisJZWxzZQorCXsKKwkJaWYocHM9PTMpIHBpeGZvcm1hdD0iUkdCIjsKKwkJZWxzZSB7aWYoZmxhZ3MmVEpfQUxQSEFGSVJTVCkgcGl4Zm9ybWF0PSJYUkdCIjsgIGVsc2UgcGl4Zm9ybWF0PSJSR0JYIjt9CisJfQorCWlmKHBzPT0xKSBwaXhmb3JtYXQ9IkdyYXlzY2FsZSI7CisJaWYoeXV2PT1ZVVZERUNPREUpCisJCXByaW50ZigiSlBFRyAtPiBZVVYgJXMgLi4uICIsIF9zdWJuYW1lc1tzdWJzYW1wXSk7CisJZWxzZQorCQlwcmludGYoIkpQRUcgLT4gJXMgJXMgLi4uICIsIHBpeGZvcm1hdCwKKwkJCShmbGFncyZUSl9CT1RUT01VUCk/IkJvdHRvbS1VcCI6IlRvcC1Eb3duICIpOworCisJX2NhdGNoKHRqRGVjb21wcmVzc0hlYWRlcihobmQsIGpwZWdidWYsIGpwZWdzaXplLCAmX3csICZfaCkpOworCWlmKF93IT13IHx8IF9oIT1oKQorCXsKKwkJcHJpbnRmKCJJbmNvcnJlY3QgSlBFRyBoZWFkZXJcbiIpOyAgYmFpbG91dCgpOworCX0KKworCWlmKHl1dj09WVVWREVDT0RFKSBzaXplPVRKQlVGU0laRVlVVih3LCBoLCBzdWJzYW1wKTsKKwllbHNlIHNpemU9dypoKnBzKzE7CisJaWYoKGJtcGJ1Zj0odW5zaWduZWQgY2hhciAqKW1hbGxvYyhzaXplKSk9PU5VTEwpCisJeworCQlwcmludGYoIkVSUk9SOiBDb3VsZCBub3QgYWxsb2NhdGUgYnVmZmVyXG4iKTsgIGJhaWxvdXQoKTsKKwl9CisJbWVtc2V0KGJtcGJ1ZiwgMCwgc2l6ZSk7CisKKwl0PXJydGltZSgpOworCWlmKHl1dj09WVVWREVDT0RFKQorCXsKKwkJX2NhdGNoKHRqRGVjb21wcmVzc1RvWVVWKGhuZCwganBlZ2J1ZiwganBlZ3NpemUsIGJtcGJ1ZiwgZmxhZ3MpKTsKKwl9CisJZWxzZQorCXsKKwkJX2NhdGNoKHRqRGVjb21wcmVzcyhobmQsIGpwZWdidWYsIGpwZWdzaXplLCBibXBidWYsIHcsIHcqcHMsIGgsIHBzLAorCQkJZmxhZ3MpKTsKKwl9CisJdD1ycnRpbWUoKS10OworCisJaWYoeXV2PT1ZVVZERUNPREUpCisJeworCQlpZihjaGVja2J1Znl1dihibXBidWYsIHcsIGgsIHN1YnNhbXApKSBwcmludGYoIlBhc3NlZC4iKTsKKwkJZWxzZSB7cHJpbnRmKCJGQUlMRUQhIik7ICBleGl0c3RhdHVzPS0xO30KKwl9CisJZWxzZQorCXsKKwkJaWYoY2hlY2tidWYoYm1wYnVmLCB3LCBoLCBwcywgc3Vic2FtcCwgZmxhZ3MpKSBwcmludGYoIlBhc3NlZC4iKTsKKwkJZWxzZQorCQl7CisJCQlwcmludGYoIkZBSUxFRCEiKTsgIGV4aXRzdGF0dXM9LTE7CisJCQlkdW1wYnVmKGJtcGJ1ZiwgdywgaCwgcHMsIGZsYWdzKTsKKwkJfQorCX0KKwlwcmludGYoIiAgJWYgbXNcblxuIiwgdCoxMDAwLik7CisKKwlmaW5hbGx5OgorCWlmKGJtcGJ1ZikgZnJlZShibXBidWYpOworfQorCit2b2lkIGRvdGVzdChpbnQgdywgaW50IGgsIGludCBwcywgaW50IHN1YnNhbXAsIGNoYXIgKmJhc2VmaWxlbmFtZSkKK3sKKwl0amhhbmRsZSBobmQ9TlVMTCwgZGhuZD1OVUxMOyAgdW5zaWduZWQgY2hhciAqanBlZ2J1Zj1OVUxMOworCXVuc2lnbmVkIGxvbmcgc2l6ZTsKKworCXNpemU9KHl1dj09WVVWRU5DT0RFPyBUSkJVRlNJWkVZVVYodywgaCwgc3Vic2FtcCk6VEpCVUZTSVpFKHcsIGgpKTsKKwlpZigoanBlZ2J1Zj0odW5zaWduZWQgY2hhciAqKW1hbGxvYyhzaXplKSkgPT0gTlVMTCkKKwl7CisJCXB1dHMoIkVSUk9SOiBDb3VsZCBub3QgYWxsb2NhdGUgYnVmZmVyLiIpOyAgYmFpbG91dCgpOworCX0KKworCWlmKChobmQ9dGpJbml0Q29tcHJlc3MoKSk9PU5VTEwpCisJCXtwcmludGYoIkVycm9yIGluIHRqSW5pdENvbXByZXNzKCk6XG4lc1xuIiwgdGpHZXRFcnJvclN0cigpKTsgIGJhaWxvdXQoKTt9CisJaWYoKGRobmQ9dGpJbml0RGVjb21wcmVzcygpKT09TlVMTCkKKwkJe3ByaW50ZigiRXJyb3IgaW4gdGpJbml0RGVjb21wcmVzcygpOlxuJXNcbiIsIHRqR2V0RXJyb3JTdHIoKSk7ICBiYWlsb3V0KCk7fQorCisJZ2VudGVzdGpwZWcoaG5kLCBqcGVnYnVmLCAmc2l6ZSwgdywgaCwgcHMsIGJhc2VmaWxlbmFtZSwgc3Vic2FtcCwgMTAwLCAwKTsKKwlnZW50ZXN0Ym1wKGRobmQsIGpwZWdidWYsIHNpemUsIHcsIGgsIHBzLCBiYXNlZmlsZW5hbWUsIHN1YnNhbXAsIDApOworCisJaWYocHM9PTEgfHwgeXV2PT1ZVVZERUNPREUpIGdvdG8gZmluYWxseTsKKworCWdlbnRlc3RqcGVnKGhuZCwganBlZ2J1ZiwgJnNpemUsIHcsIGgsIHBzLCBiYXNlZmlsZW5hbWUsIHN1YnNhbXAsIDEwMCwgVEpfQkdSKTsKKwlnZW50ZXN0Ym1wKGRobmQsIGpwZWdidWYsIHNpemUsIHcsIGgsIHBzLCBiYXNlZmlsZW5hbWUsIHN1YnNhbXAsIFRKX0JHUik7CisKKwlnZW50ZXN0anBlZyhobmQsIGpwZWdidWYsICZzaXplLCB3LCBoLCBwcywgYmFzZWZpbGVuYW1lLCBzdWJzYW1wLCAxMDAsIFRKX0JPVFRPTVVQKTsKKwlnZW50ZXN0Ym1wKGRobmQsIGpwZWdidWYsIHNpemUsIHcsIGgsIHBzLCBiYXNlZmlsZW5hbWUsIHN1YnNhbXAsIFRKX0JPVFRPTVVQKTsKKworCWdlbnRlc3RqcGVnKGhuZCwganBlZ2J1ZiwgJnNpemUsIHcsIGgsIHBzLCBiYXNlZmlsZW5hbWUsIHN1YnNhbXAsIDEwMCwgVEpfQkdSfFRKX0JPVFRPTVVQKTsKKwlnZW50ZXN0Ym1wKGRobmQsIGpwZWdidWYsIHNpemUsIHcsIGgsIHBzLCBiYXNlZmlsZW5hbWUsIHN1YnNhbXAsIFRKX0JHUnxUSl9CT1RUT01VUCk7CisKKwlpZihwcz09NCkKKwl7CisJCWdlbnRlc3RqcGVnKGhuZCwganBlZ2J1ZiwgJnNpemUsIHcsIGgsIHBzLCBiYXNlZmlsZW5hbWUsIHN1YnNhbXAsIDEwMCwgVEpfQUxQSEFGSVJTVCk7CisJCWdlbnRlc3RibXAoZGhuZCwganBlZ2J1Ziwgc2l6ZSwgdywgaCwgcHMsIGJhc2VmaWxlbmFtZSwgc3Vic2FtcCwgVEpfQUxQSEFGSVJTVCk7CisKKwkJZ2VudGVzdGpwZWcoaG5kLCBqcGVnYnVmLCAmc2l6ZSwgdywgaCwgcHMsIGJhc2VmaWxlbmFtZSwgc3Vic2FtcCwgMTAwLCBUSl9BTFBIQUZJUlNUfFRKX0JHUik7CisJCWdlbnRlc3RibXAoZGhuZCwganBlZ2J1Ziwgc2l6ZSwgdywgaCwgcHMsIGJhc2VmaWxlbmFtZSwgc3Vic2FtcCwgVEpfQUxQSEFGSVJTVHxUSl9CR1IpOworCisJCWdlbnRlc3RqcGVnKGhuZCwganBlZ2J1ZiwgJnNpemUsIHcsIGgsIHBzLCBiYXNlZmlsZW5hbWUsIHN1YnNhbXAsIDEwMCwgVEpfQUxQSEFGSVJTVHxUSl9CT1RUT01VUCk7CisJCWdlbnRlc3RibXAoZGhuZCwganBlZ2J1Ziwgc2l6ZSwgdywgaCwgcHMsIGJhc2VmaWxlbmFtZSwgc3Vic2FtcCwgVEpfQUxQSEFGSVJTVHxUSl9CT1RUT01VUCk7CisKKwkJZ2VudGVzdGpwZWcoaG5kLCBqcGVnYnVmLCAmc2l6ZSwgdywgaCwgcHMsIGJhc2VmaWxlbmFtZSwgc3Vic2FtcCwgMTAwLCBUSl9BTFBIQUZJUlNUfFRKX0JHUnxUSl9CT1RUT01VUCk7CisJCWdlbnRlc3RibXAoZGhuZCwganBlZ2J1Ziwgc2l6ZSwgdywgaCwgcHMsIGJhc2VmaWxlbmFtZSwgc3Vic2FtcCwgVEpfQUxQSEFGSVJTVHxUSl9CR1J8VEpfQk9UVE9NVVApOworCX0KKworCWZpbmFsbHk6CisJaWYoaG5kKSB0akRlc3Ryb3koaG5kKTsKKwlpZihkaG5kKSB0akRlc3Ryb3koZGhuZCk7CisKKwlpZihqcGVnYnVmKSBmcmVlKGpwZWdidWYpOworfQorCisjZGVmaW5lIE1BWExFTkdUSCAyMDQ4CisKK3ZvaWQgZG90ZXN0MSh2b2lkKQoreworCWludCBpLCBqLCBpMjsgIHVuc2lnbmVkIGNoYXIgKmJtcGJ1Zj1OVUxMLCAqanBnYnVmPU5VTEw7CisJdGpoYW5kbGUgaG5kPU5VTEw7ICB1bnNpZ25lZCBsb25nIHNpemU7CisJaWYoKGhuZD10akluaXRDb21wcmVzcygpKT09TlVMTCkKKwkJe3ByaW50ZigiRXJyb3IgaW4gdGpJbml0Q29tcHJlc3MoKTpcbiVzXG4iLCB0akdldEVycm9yU3RyKCkpOyAgYmFpbG91dCgpO30KKwlwcmludGYoIkJ1ZmZlciBzaXplIHJlZ3Jlc3Npb24gdGVzdFxuIik7CisJZm9yKGo9MTsgajw0ODsgaisrKQorCXsKKwkJZm9yKGk9MTsgaTwoaj09MT9NQVhMRU5HVEg6NDgpOyBpKyspCisJCXsKKwkJCWlmKGklMTAwPT0wKSBwcmludGYoIiUuNGQgeCAlLjRkXGJcYlxiXGJcYlxiXGJcYlxiXGJcYiIsIGksIGopOworCQkJaWYoKGJtcGJ1Zj0odW5zaWduZWQgY2hhciAqKW1hbGxvYyhpKmoqNCkpPT1OVUxMCisJCQl8fCAoanBnYnVmPSh1bnNpZ25lZCBjaGFyICopbWFsbG9jKFRKQlVGU0laRShpLCBqKSkpPT1OVUxMKQorCQkJeworCQkJCXByaW50ZigiTWVtb3J5IGFsbG9jYXRpb24gZmFpbHVyZVxuIik7ICBiYWlsb3V0KCk7CisJCQl9CisJCQltZW1zZXQoYm1wYnVmLCAwLCBpKmoqNCk7CisJCQlmb3IoaTI9MDsgaTI8aSpqOyBpMisrKQorCQkJeworCQkJCWJtcGJ1ZltpMio0XT1waXhlbHNbaTIlOV1bMl07CisJCQkJYm1wYnVmW2kyKjQrMV09cGl4ZWxzW2kyJTldWzFdOworCQkJCWJtcGJ1ZltpMio0KzJdPXBpeGVsc1tpMiU5XVswXTsKKwkJCX0KKwkJCV9jYXRjaCh0akNvbXByZXNzKGhuZCwgYm1wYnVmLCBpLCAwLCBqLCA0LAorCQkJCWpwZ2J1ZiwgJnNpemUsIFRKXzQ0NCwgMTAwLCBUSl9CR1IpKTsKKwkJCWZyZWUoYm1wYnVmKTsgIGJtcGJ1Zj1OVUxMOyAgZnJlZShqcGdidWYpOyAganBnYnVmPU5VTEw7CisKKwkJCWlmKChibXBidWY9KHVuc2lnbmVkIGNoYXIgKiltYWxsb2MoaippKjQpKT09TlVMTAorCQkJfHwgKGpwZ2J1Zj0odW5zaWduZWQgY2hhciAqKW1hbGxvYyhUSkJVRlNJWkUoaiwgaSkpKT09TlVMTCkKKwkJCXsKKwkJCQlwcmludGYoIk1lbW9yeSBhbGxvY2F0aW9uIGZhaWx1cmVcbiIpOyAgYmFpbG91dCgpOworCQkJfQorCQkJZm9yKGkyPTA7IGkyPGoqaTsgaTIrKykKKwkJCXsKKwkJCQlpZihpMiUyPT0wKSBibXBidWZbaTIqNF09Ym1wYnVmW2kyKjQrMV09Ym1wYnVmW2kyKjQrMl09MHhGRjsKKwkJCQllbHNlIGJtcGJ1ZltpMio0XT1ibXBidWZbaTIqNCsxXT1ibXBidWZbaTIqNCsyXT0wOworCQkJfQorCQkJX2NhdGNoKHRqQ29tcHJlc3MoaG5kLCBibXBidWYsIGosIDAsIGksIDQsCisJCQkJanBnYnVmLCAmc2l6ZSwgVEpfNDQ0LCAxMDAsIFRKX0JHUikpOworCQkJZnJlZShibXBidWYpOyAgYm1wYnVmPU5VTEw7ICBmcmVlKGpwZ2J1Zik7ICBqcGdidWY9TlVMTDsKKwkJfQorCX0KKwlwcmludGYoIkRvbmUuICAgICAgXG4iKTsKKworCWZpbmFsbHk6CisJaWYoYm1wYnVmKSBmcmVlKGJtcGJ1Zik7ICBpZihqcGdidWYpIGZyZWUoanBnYnVmKTsKKwlpZihobmQpIHRqRGVzdHJveShobmQpOworfQorCitpbnQgbWFpbihpbnQgYXJnYywgY2hhciAqYXJndltdKQoreworCWludCBkb3l1dj0wOworCWlmKGFyZ2M+MSAmJiAhc3RyaWNtcChhcmd2WzFdLCAiLXl1diIpKSBkb3l1dj0xOworCWlmKGRveXV2KSB5dXY9WVVWRU5DT0RFOworCWRvdGVzdCgzNSwgMzksIDMsIFRKXzQ0NCwgInRlc3QiKTsKKwlkb3Rlc3QoMzksIDQxLCA0LCBUSl80NDQsICJ0ZXN0Iik7CisJaWYoZG95dXYpCisJeworCQlkb3Rlc3QoNDEsIDM1LCAzLCBUSl80MjIsICJ0ZXN0Iik7CisJCWRvdGVzdCgzNSwgMzksIDQsIFRKXzQyMiwgInRlc3QiKTsKKwkJZG90ZXN0KDM5LCA0MSwgMywgVEpfNDIwLCAidGVzdCIpOworCQlkb3Rlc3QoNDEsIDM1LCA0LCBUSl80MjAsICJ0ZXN0Iik7CisJfQorCWRvdGVzdCgzNSwgMzksIDEsIFRKX0dSQVlTQ0FMRSwgInRlc3QiKTsKKwlkb3Rlc3QoMzksIDQxLCAzLCBUSl9HUkFZU0NBTEUsICJ0ZXN0Iik7CisJZG90ZXN0KDQxLCAzNSwgNCwgVEpfR1JBWVNDQUxFLCAidGVzdCIpOworCWlmKCFkb3l1dikgZG90ZXN0MSgpOworCWlmKGRveXV2KQorCXsKKwkJeXV2PVlVVkRFQ09ERTsKKwkJZG90ZXN0KDQ4LCA0OCwgMywgVEpfNDQ0LCAidGVzdCIpOworCQlkb3Rlc3QoMzUsIDM5LCAzLCBUSl80NDQsICJ0ZXN0Iik7CisJCWRvdGVzdCg0OCwgNDgsIDMsIFRKXzQyMiwgInRlc3QiKTsKKwkJZG90ZXN0KDM5LCA0MSwgMywgVEpfNDIyLCAidGVzdCIpOworCQlkb3Rlc3QoNDgsIDQ4LCAzLCBUSl80MjAsICJ0ZXN0Iik7CisJCWRvdGVzdCg0MSwgMzUsIDMsIFRKXzQyMCwgInRlc3QiKTsKKwkJZG90ZXN0KDQ4LCA0OCwgMywgVEpfR1JBWVNDQUxFLCAidGVzdCIpOworCQlkb3Rlc3QoMzUsIDM5LCAzLCBUSl9HUkFZU0NBTEUsICJ0ZXN0Iik7CisJCWRvdGVzdCg0OCwgNDgsIDEsIFRKX0dSQVlTQ0FMRSwgInRlc3QiKTsKKwkJZG90ZXN0KDM5LCA0MSwgMSwgVEpfR1JBWVNDQUxFLCAidGVzdCIpOworCX0KKworCXJldHVybiBleGl0c3RhdHVzOworfQpkaWZmIC0tZ2l0IGEvanBndGVzdC5jIGIvanBndGVzdC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmNhYzVjZTMKLS0tIC9kZXYvbnVsbAorKysgYi9qcGd0ZXN0LmMKQEAgLTAsMCArMSw2MTAgQEAKKy8qIENvcHlyaWdodCAoQykyMDA0IExhbmRtYXJrIEdyYXBoaWNzIENvcnBvcmF0aW9uCisgKiBDb3B5cmlnaHQgKEMpMjAwNSwgMjAwNiBTdW4gTWljcm9zeXN0ZW1zLCBJbmMuCisgKiBDb3B5cmlnaHQgKEMpMjAwOS0yMDExIEQuIFIuIENvbW1hbmRlcgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlIGFuZCBtYXkgYmUgcmVkaXN0cmlidXRlZCBhbmQvb3IgbW9kaWZpZWQgdW5kZXIKKyAqIHRoZSB0ZXJtcyBvZiB0aGUgd3hXaW5kb3dzIExpYnJhcnkgTGljZW5zZSwgVmVyc2lvbiAzLjEgb3IgKGF0IHlvdXIgb3B0aW9uKQorICogYW55IGxhdGVyIHZlcnNpb24uICBUaGUgZnVsbCBsaWNlbnNlIGlzIGluIHRoZSBMSUNFTlNFLnR4dCBmaWxlIGluY2x1ZGVkCisgKiB3aXRoIHRoaXMgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAqIHd4V2luZG93cyBMaWJyYXJ5IExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqLworCisjaW5jbHVkZSA8c3RkaW8uaD4KKyNpbmNsdWRlIDxzdGRsaWIuaD4KKyNpbmNsdWRlIDxzdHJpbmcuaD4KKyNpbmNsdWRlIDxtYXRoLmg+CisjaW5jbHVkZSA8ZXJybm8uaD4KKyNpbmNsdWRlICIuL2JtcC5oIgorI2luY2x1ZGUgIi4vcnJ1dGlsLmgiCisjaW5jbHVkZSAiLi9ycnRpbWVyLmgiCisjaW5jbHVkZSAiLi90dXJib2pwZWcuaCIKKworI2RlZmluZSBfdGhyb3cob3AsIGVycikgeyAgXAorCXByaW50ZigiRVJST1IgaW4gbGluZSAlZCB3aGlsZSAlczpcbiVzXG4iLCBfX0xJTkVfXywgb3AsIGVycik7ICBnb3RvIGJhaWxvdXQ7fQorI2RlZmluZSBfdGhyb3d1bml4KG0pIF90aHJvdyhtLCBzdHJlcnJvcihlcnJubykpCisjZGVmaW5lIF90aHJvd3RqKG0pIF90aHJvdyhtLCB0akdldEVycm9yU3RyKCkpCisjZGVmaW5lIF90aHJvd2JtcChtKSBfdGhyb3cobSwgYm1wZ2V0ZXJyKCkpCisKKyNkZWZpbmUgUEFEKHYsIHApICgodisocCktMSkmKH4oKHApLTEpKSkKKworZW51bSB7WVVWRU5DT0RFPTEsIFlVVkRFQ09ERX07CitpbnQgZm9yY2VtbXg9MCwgZm9yY2Vzc2U9MCwgZm9yY2Vzc2UyPTAsIGZvcmNlc3NlMz0wLCBmYXN0dXBzYW1wbGU9MCwKKwlkZWNvbXBvbmx5PTAsIHl1dj0wOworY29uc3QgaW50IF9wc1tCTVBQSVhFTEZPUk1BVFNdPXszLCA0LCAzLCA0LCA0LCA0fTsKK2NvbnN0IGludCBfZmxhZ3NbQk1QUElYRUxGT1JNQVRTXT17MCwgMCwgVEpfQkdSLCBUSl9CR1IsCisJVEpfQkdSfFRKX0FMUEhBRklSU1QsIFRKX0FMUEhBRklSU1R9OworY29uc3QgaW50IF9yaW5kZXhbQk1QUElYRUxGT1JNQVRTXT17MCwgMCwgMiwgMiwgMywgMX07Citjb25zdCBpbnQgX2dpbmRleFtCTVBQSVhFTEZPUk1BVFNdPXsxLCAxLCAxLCAxLCAyLCAyfTsKK2NvbnN0IGludCBfYmluZGV4W0JNUFBJWEVMRk9STUFUU109ezIsIDIsIDAsIDAsIDEsIDN9OworY29uc3QgY2hhciAqX3BmbmFtZVtdPXsiUkdCIiwgIlJHQlgiLCAiQkdSIiwgIkJHUlgiLCAiWEJHUiIsICJYUkdCIn07Citjb25zdCBjaGFyICpfc3VibmFtZWxbTlVNU1VCT1BUXT17IjQ6NDo0IiwgIjQ6MjoyIiwgIjQ6MjowIiwgIkdSQVkifTsKK2NvbnN0IGNoYXIgKl9zdWJuYW1lc1tOVU1TVUJPUFRdPXsiNDQ0IiwgIjQyMiIsICI0MjAiLCAiR1JBWSJ9OworCit2b2lkIHByaW50c2lnZmlnKGRvdWJsZSB2YWwsIGludCBmaWdzKQoreworCWNoYXIgZm9ybWF0WzgwXTsKKwlkb3VibGUgX2w9bG9nMTAodmFsKTsgIGludCBsOworCWlmKF9sPDAuKQorCXsKKwkJbD0oaW50KWZhYnMoX2wpOworCQlzcHJpbnRmKGZvcm1hdCwgIiUlJWQuJWRmIiwgZmlncytsKzIsIGZpZ3MrbCk7CisJfQorCWVsc2UKKwl7CisJCWw9KGludClfbCsxOworCQlpZihmaWdzPD1sKSBzcHJpbnRmKGZvcm1hdCwgIiUlLjBmIik7CisJCWVsc2Ugc3ByaW50Zihmb3JtYXQsICIlJSVkLiVkZiIsIGZpZ3MrMSwgZmlncy1sKTsKKwl9CQorCXByaW50Zihmb3JtYXQsIHZhbCk7Cit9CisKK3ZvaWQgZG90ZXN0KHVuc2lnbmVkIGNoYXIgKnNyY2J1ZiwgaW50IHcsIGludCBoLCBpbnQgcGYsIGludCBidSwKKwlpbnQganBlZ3N1YiwgaW50IHF1YWwsIGNoYXIgKmZpbGVuYW1lLCBpbnQgZG90aWxlLCBpbnQgdXNlcHBtLCBpbnQgcXVpZXQpCit7CisJY2hhciB0ZW1wc3RyWzEwMjRdOworCUZJTEUgKm91dGZpbGU9TlVMTDsgIHRqaGFuZGxlIGhuZD1OVUxMOworCXVuc2lnbmVkIGNoYXIgKipqcGVnYnVmPU5VTEwsICpyZ2JidWY9TlVMTDsKKwlkb3VibGUgc3RhcnQsIGVsYXBzZWQ7CisJaW50IGpwZ2J1ZnNpemU9MCwgaSwgaiwgdGlsZXNpemV4PXcsIHRpbGVzaXpleT1oLCBudW10aWxlc3g9MSwgbnVtdGlsZXN5PTEsCisJCUlURVI7CisJdW5zaWduZWQgbG9uZyAqY29tcHRpbGVzaXplPU5VTEw7CisJaW50IGZsYWdzPShmb3JjZW1teD9USl9GT1JDRU1NWDowKXwoZm9yY2Vzc2U/VEpfRk9SQ0VTU0U6MCkKKwkJfChmb3JjZXNzZTI/VEpfRk9SQ0VTU0UyOjApfChmb3JjZXNzZTM/VEpfRk9SQ0VTU0UzOjApCisJCXwoZmFzdHVwc2FtcGxlP1RKX0ZBU1RVUFNBTVBMRTowKTsKKwlpbnQgcHM9X3BzW3BmXSwgdGlsZW47CisJaW50IHBpdGNoPXcqcHMsIHl1dnNpemU9MDsKKworCWZsYWdzIHw9IF9mbGFnc1twZl07CisJaWYoYnUpIGZsYWdzIHw9IFRKX0JPVFRPTVVQOworCisJaWYoeXV2PT1ZVVZFTkNPREUpIHl1dnNpemU9VEpCVUZTSVpFWVVWKHcsIGgsIGpwZWdzdWIpOworCWlmKChyZ2JidWY9KHVuc2lnbmVkIGNoYXIgKiltYWxsb2MobWF4KHl1dnNpemUsIHBpdGNoKmgrMSkpKSA9PSBOVUxMKQorCQlfdGhyb3d1bml4KCJhbGxvY2F0aW5nIGltYWdlIGJ1ZmZlciIpOworCisJaWYoIXF1aWV0KQorCXsKKwkJaWYoeXV2PT1ZVVZFTkNPREUpCisJCQlwcmludGYoIj4+Pj4+ICAlcyAoJXMpIDwtLT4gWVVWICVzICA8PDw8PFxuIiwgX3BmbmFtZVtwZl0sCisJCQkJYnU/IkJvdHRvbS11cCI6IlRvcC1kb3duIiwgX3N1Ym5hbWVsW2pwZWdzdWJdKTsKKwkJZWxzZQorCQkJcHJpbnRmKCI+Pj4+PiAgJXMgKCVzKSA8LS0+IEpQRUcgJXMgUSVkICA8PDw8PFxuIiwgX3BmbmFtZVtwZl0sCisJCQkJYnU/IkJvdHRvbS11cCI6IlRvcC1kb3duIiwgX3N1Ym5hbWVsW2pwZWdzdWJdLCBxdWFsKTsKKwl9CisJaWYoeXV2KSBkb3RpbGU9MDsKKwlpZihkb3RpbGUpIHt0aWxlc2l6ZXg9dGlsZXNpemV5PTQ7fSAgZWxzZSB7dGlsZXNpemV4PXc7ICB0aWxlc2l6ZXk9aDt9CisKKwlkbworCXsKKwkJdGlsZXNpemV4Kj0yOyAgaWYodGlsZXNpemV4PncpIHRpbGVzaXpleD13OworCQl0aWxlc2l6ZXkqPTI7ICBpZih0aWxlc2l6ZXk+aCkgdGlsZXNpemV5PWg7CisJCW51bXRpbGVzeD0odyt0aWxlc2l6ZXgtMSkvdGlsZXNpemV4OworCQludW10aWxlc3k9KGgrdGlsZXNpemV5LTEpL3RpbGVzaXpleTsKKwkJaWYoKGNvbXB0aWxlc2l6ZT0odW5zaWduZWQgbG9uZyAqKW1hbGxvYyhzaXplb2YodW5zaWduZWQgbG9uZykqbnVtdGlsZXN4Km51bXRpbGVzeSkpID09IE5VTEwKKwkJfHwgKGpwZWdidWY9KHVuc2lnbmVkIGNoYXIgKiopbWFsbG9jKHNpemVvZih1bnNpZ25lZCBjaGFyICopKm51bXRpbGVzeCpudW10aWxlc3kpKSA9PSBOVUxMKQorCQkJX3Rocm93dW5peCgiYWxsb2NhdGluZyBpbWFnZSBidWZmZXJzIik7CisJCW1lbXNldChqcGVnYnVmLCAwLCBzaXplb2YodW5zaWduZWQgY2hhciAqKSpudW10aWxlc3gqbnVtdGlsZXN5KTsKKwkJZm9yKGk9MDsgaTxudW10aWxlc3gqbnVtdGlsZXN5OyBpKyspCisJCXsKKwkJCWlmKChqcGVnYnVmW2ldPSh1bnNpZ25lZCBjaGFyICopbWFsbG9jKAorCQkJCXl1dj09WVVWRU5DT0RFPyBUSkJVRlNJWkVZVVYodGlsZXNpemV4LCB0aWxlc2l6ZXksIGpwZWdzdWIpCisJCQkJCTogVEpCVUZTSVpFKHRpbGVzaXpleCwgdGlsZXNpemV5KSkpID09IE5VTEwpCisJCQkJX3Rocm93dW5peCgiYWxsb2NhdGluZyBpbWFnZSBidWZmZXJzIik7CisJCX0KKworCQkvLyBDb21wcmVzc2lvbiB0ZXN0CisJCWlmKHF1aWV0PT0xKSBwcmludGYoIiVzXHQlc1x0JXNcdCVkXHQiLCAgX3BmbmFtZVtwZl0sIGJ1PyJCVSI6IlREIiwKKwkJCV9zdWJuYW1lbFtqcGVnc3ViXSwgcXVhbCk7CisJCWZvcihpPTA7IGk8aDsgaSsrKSBtZW1jcHkoJnJnYmJ1ZltwaXRjaCppXSwgJnNyY2J1Zlt3KnBzKmldLCB3KnBzKTsKKwkJaWYoKGhuZD10akluaXRDb21wcmVzcygpKT09TlVMTCkKKwkJCV90aHJvd3RqKCJleGVjdXRpbmcgdGpJbml0Q29tcHJlc3MoKSIpOworCQlpZih5dXY9PVlVVkVOQ09ERSkKKwkJeworCQkJaWYodGpFbmNvZGVZVVYoaG5kLCByZ2JidWYsIHRpbGVzaXpleCwgcGl0Y2gsIHRpbGVzaXpleSwgcHMsCisJCQkJanBlZ2J1ZlswXSwganBlZ3N1YiwgZmxhZ3MpPT0tMSkKKwkJCQlfdGhyb3d0aigiZXhlY3V0aW5nIHRqRW5jb2RlWVVWKCkiKTsKKwkJCWNvbXB0aWxlc2l6ZVswXT1USkJVRlNJWkVZVVYodGlsZXNpemV4LCB0aWxlc2l6ZXksIGpwZWdzdWIpOworCQl9CisJCWVsc2UgaWYodGpDb21wcmVzcyhobmQsIHJnYmJ1ZiwgdGlsZXNpemV4LCBwaXRjaCwgdGlsZXNpemV5LCBwcywKKwkJCWpwZWdidWZbMF0sICZjb21wdGlsZXNpemVbMF0sIGpwZWdzdWIsIHF1YWwsIGZsYWdzKT09LTEpCisJCQlfdGhyb3d0aigiZXhlY3V0aW5nIHRqQ29tcHJlc3MoKSIpOworCQlJVEVSPTA7CisJCXN0YXJ0PXJydGltZSgpOworCQlkbworCQl7CisJCQlqcGdidWZzaXplPTA7ICB0aWxlbj0wOworCQkJZm9yKGk9MDsgaTxoOyBpKz10aWxlc2l6ZXkpCisJCQl7CisJCQkJZm9yKGo9MDsgajx3OyBqKz10aWxlc2l6ZXgpCisJCQkJeworCQkJCQlpbnQgdGVtcHc9bWluKHRpbGVzaXpleCwgdy1qKSwgdGVtcGg9bWluKHRpbGVzaXpleSwgaC1pKTsKKwkJCQkJaWYoeXV2PT1ZVVZFTkNPREUpCisJCQkJCXsKKwkJCQkJCWlmKHRqRW5jb2RlWVVWKGhuZCwgJnJnYmJ1ZltwaXRjaCppK2oqcHNdLCB0ZW1wdywgcGl0Y2gsCisJCQkJCQkJdGVtcGgsIHBzLCBqcGVnYnVmW3RpbGVuXSwganBlZ3N1YiwgZmxhZ3MpPT0tMSkKKwkJCQkJCQlfdGhyb3d0aigiZXhlY3V0aW5nIHRqRW5jb2RlWVVWKCkiKTsKKwkJCQkJCWNvbXB0aWxlc2l6ZVt0aWxlbl09VEpCVUZTSVpFWVVWKHRlbXB3LCB0ZW1waCwganBlZ3N1Yik7CisJCQkJCX0KKwkJCQkJZWxzZSBpZih0akNvbXByZXNzKGhuZCwgJnJnYmJ1ZltwaXRjaCppK2oqcHNdLCB0ZW1wdywgcGl0Y2gsCisJCQkJCQl0ZW1waCwgcHMsIGpwZWdidWZbdGlsZW5dLCAmY29tcHRpbGVzaXplW3RpbGVuXSwganBlZ3N1YiwgcXVhbCwKKwkJCQkJCWZsYWdzKT09LTEpCisJCQkJCQlfdGhyb3d0aigiZXhlY3V0aW5nIHRqQ29tcHJlc3MoKSIpOworCQkJCQlqcGdidWZzaXplKz1jb21wdGlsZXNpemVbdGlsZW5dOworCQkJCQl0aWxlbisrOworCQkJCX0KKwkJCX0KKwkJCUlURVIrKzsKKwkJfSB3aGlsZSgoZWxhcHNlZD1ycnRpbWUoKS1zdGFydCk8NS4pOworCQlpZih0akRlc3Ryb3koaG5kKT09LTEpIF90aHJvd3RqKCJleGVjdXRpbmcgdGpEZXN0cm95KCkiKTsKKwkJaG5kPU5VTEw7CisJCWlmKHF1aWV0PT0xKQorCQl7CisJCQlpZih0aWxlc2l6ZXg9PXcgJiYgdGlsZXNpemV5PT1oKSBwcmludGYoIkZ1bGwgICAgIFx0Iik7CisJCQllbHNlIHByaW50ZigiJS00ZCAlLTRkXHQiLCB0aWxlc2l6ZXgsIHRpbGVzaXpleSk7CisJCX0KKwkJaWYocXVpZXQpCisJCXsKKwkJCXByaW50c2lnZmlnKChkb3VibGUpKHcqaCkvMTAwMDAwMC4qKGRvdWJsZSlJVEVSL2VsYXBzZWQsIDQpOworCQkJcHJpbnRmKCIlYyIsIHF1aWV0PT0yPyAnXG4nOidcdCcpOworCQkJcHJpbnRzaWdmaWcoKGRvdWJsZSkodypoKnBzKS8oZG91YmxlKWpwZ2J1ZnNpemUsIDQpOworCQkJcHJpbnRmKCIlYyIsIHF1aWV0PT0yPyAnXG4nOidcdCcpOworCQl9CisJCWVsc2UKKwkJeworCQkJaWYodGlsZXNpemV4PT13ICYmIHRpbGVzaXpleT09aCkgcHJpbnRmKCJcbkZ1bGwgaW1hZ2VcbiIpOworCQkJZWxzZSBwcmludGYoIlxuVGlsZSBzaXplOiAlZCB4ICVkXG4iLCB0aWxlc2l6ZXgsIHRpbGVzaXpleSk7CisJCQlwcmludGYoIkMtLT4gRnJhbWUgcmF0ZTogICAgICAgICAgICVmIGZwc1xuIiwgKGRvdWJsZSlJVEVSL2VsYXBzZWQpOworCQkJcHJpbnRmKCIgICAgIE91dHB1dCBpbWFnZSBzaXplOiAgICAlZCBieXRlc1xuIiwganBnYnVmc2l6ZSk7CisJCQlwcmludGYoIiAgICAgQ29tcHJlc3Npb24gcmF0aW86ICAgICVmOjFcbiIsCisJCQkJKGRvdWJsZSkodypoKnBzKS8oZG91YmxlKWpwZ2J1ZnNpemUpOworCQkJcHJpbnRmKCIgICAgIFNvdXJjZSB0aHJvdWdocHV0OiAgICAlZiBNZWdhcGl4ZWxzL3NlY1xuIiwKKwkJCQkoZG91YmxlKSh3KmgpLzEwMDAwMDAuKihkb3VibGUpSVRFUi9lbGFwc2VkKTsKKwkJCXByaW50ZigiICAgICBPdXRwdXQgYml0IHN0cmVhbTogICAgJWYgTWVnYWJpdHMvc2VjXG4iLAorCQkJCShkb3VibGUpanBnYnVmc2l6ZSo4Li8xMDAwMDAwLiooZG91YmxlKUlURVIvZWxhcHNlZCk7CisJCX0KKwkJaWYodGlsZXNpemV4PT13ICYmIHRpbGVzaXpleT09aCkKKwkJeworCQkJaWYoeXV2PT1ZVVZFTkNPREUpCisJCQkJc3ByaW50Zih0ZW1wc3RyLCAiJXNfJXMueXV2IiwgZmlsZW5hbWUsIF9zdWJuYW1lc1tqcGVnc3ViXSk7CisJCQllbHNlCisJCQkJc3ByaW50Zih0ZW1wc3RyLCAiJXNfJXNRJWQuanBnIiwgZmlsZW5hbWUsIF9zdWJuYW1lc1tqcGVnc3ViXSwgcXVhbCk7CisJCQlpZigob3V0ZmlsZT1mb3Blbih0ZW1wc3RyLCAid2IiKSk9PU5VTEwpCisJCQkJX3Rocm93dW5peCgib3BlbmluZyByZWZlcmVuY2UgaW1hZ2UiKTsKKwkJCWlmKGZ3cml0ZShqcGVnYnVmWzBdLCBqcGdidWZzaXplLCAxLCBvdXRmaWxlKSE9MSkKKwkJCQlfdGhyb3d1bml4KCJ3cml0aW5nIHJlZmVyZW5jZSBpbWFnZSIpOworCQkJZmNsb3NlKG91dGZpbGUpOyAgb3V0ZmlsZT1OVUxMOworCQkJaWYoIXF1aWV0KSBwcmludGYoIlJlZmVyZW5jZSBpbWFnZSB3cml0dGVuIHRvICVzXG4iLCB0ZW1wc3RyKTsKKwkJfQorCQlpZih5dXY9PVlVVkVOQ09ERSkKKwkJeworCQkJaWYocXVpZXQ9PTEpIHByaW50ZigiXG4iKTsgIGdvdG8gYmFpbG91dDsKKwkJfQorCisJCS8vIERlY29tcHJlc3Npb24gdGVzdAorCQltZW1zZXQocmdiYnVmLCAxMjcsIG1heCh5dXZzaXplLCBwaXRjaCpoKSk7ICAvLyBHcmV5IGltYWdlIG1lYW5zIGRlY29tcHJlc3NvciBkaWQgbm90aGluZworCQlpZigoaG5kPXRqSW5pdERlY29tcHJlc3MoKSk9PU5VTEwpCisJCQlfdGhyb3d0aigiZXhlY3V0aW5nIHRqSW5pdERlY29tcHJlc3MoKSIpOworCQlpZih5dXY9PVlVVkRFQ09ERSkKKwkJeworCQkJaWYodGpEZWNvbXByZXNzVG9ZVVYoaG5kLCBqcGVnYnVmWzBdLCBqcGdidWZzaXplLCByZ2JidWYsIGZsYWdzKT09LTEpCisJCQkJX3Rocm93dGooImV4ZWN1dGluZyB0akRlY29tcHJlc3NUb1lVVigpIik7CisJCX0KKwkJZWxzZSBpZih0akRlY29tcHJlc3MoaG5kLCBqcGVnYnVmWzBdLCBqcGdidWZzaXplLCByZ2JidWYsIHRpbGVzaXpleCwgcGl0Y2gsCisJCQl0aWxlc2l6ZXksIHBzLCBmbGFncyk9PS0xKQorCQkJX3Rocm93dGooImV4ZWN1dGluZyB0akRlY29tcHJlc3MoKSIpOworCQlJVEVSPTA7CisJCXN0YXJ0PXJydGltZSgpOworCQlkbworCQl7CisJCQlpbnQgdGlsZW49MDsKKwkJCWZvcihpPTA7IGk8aDsgaSs9dGlsZXNpemV5KQorCQkJeworCQkJCWZvcihqPTA7IGo8dzsgais9dGlsZXNpemV4KQorCQkJCXsKKwkJCQkJaW50IHRlbXB3PW1pbih0aWxlc2l6ZXgsIHctaiksIHRlbXBoPW1pbih0aWxlc2l6ZXksIGgtaSk7CisJCQkJCWlmKHl1dj09WVVWREVDT0RFKQorCQkJCQl7CisJCQkJCQlpZih0akRlY29tcHJlc3NUb1lVVihobmQsIGpwZWdidWZbdGlsZW5dLCBjb21wdGlsZXNpemVbdGlsZW5dLAorCQkJCQkJCSZyZ2JidWZbcGl0Y2gqaStwcypqXSwgZmxhZ3MpPT0tMSkKKwkJCQkJCQlfdGhyb3d0aigiZXhlY3V0aW5nIHRqRGVjb21wcmVzc1RvWVVWKCkiKTsKKwkJCQkJfQorCQkJCQllbHNlIGlmKHRqRGVjb21wcmVzcyhobmQsIGpwZWdidWZbdGlsZW5dLCBjb21wdGlsZXNpemVbdGlsZW5dLAorCQkJCQkJJnJnYmJ1ZltwaXRjaCppK3BzKmpdLCB0ZW1wdywgcGl0Y2gsIHRlbXBoLCBwcywgZmxhZ3MpPT0tMSkKKwkJCQkJCV90aHJvd3RqKCJleGVjdXRpbmcgdGpEZWNvbXByZXNzKCkiKTsKKwkJCQkJdGlsZW4rKzsKKwkJCQl9CisJCQl9CisJCQlJVEVSKys7CisJCX0Jd2hpbGUoKGVsYXBzZWQ9cnJ0aW1lKCktc3RhcnQpPDUuKTsKKwkJaWYodGpEZXN0cm95KGhuZCk9PS0xKSBfdGhyb3d0aigiZXhlY3V0aW5nIHRqRGVzdHJveSgpIik7CisJCWhuZD1OVUxMOworCQlpZihxdWlldCkKKwkJeworCQkJcHJpbnRzaWdmaWcoKGRvdWJsZSkodypoKS8xMDAwMDAwLiooZG91YmxlKUlURVIvZWxhcHNlZCwgNCk7CisJCQlwcmludGYoIlxuIik7CisJCX0KKwkJZWxzZQorCQl7CisJCQlwcmludGYoIkQtLT4gRnJhbWUgcmF0ZTogICAgICAgICAgICVmIGZwc1xuIiwgKGRvdWJsZSlJVEVSL2VsYXBzZWQpOworCQkJcHJpbnRmKCIgICAgIERlc3QuIHRocm91Z2hwdXQ6ICAgICAlZiBNZWdhcGl4ZWxzL3NlY1xuIiwKKwkJCQkoZG91YmxlKSh3KmgpLzEwMDAwMDAuKihkb3VibGUpSVRFUi9lbGFwc2VkKTsKKwkJfQorCQlpZih5dXY9PVlVVkRFQ09ERSkKKwkJeworCQkJc3ByaW50Zih0ZW1wc3RyLCAiJXNfJXNRJWQueXV2IiwgZmlsZW5hbWUsIF9zdWJuYW1lc1tqcGVnc3ViXSwgcXVhbCk7CisJCQlpZigob3V0ZmlsZT1mb3Blbih0ZW1wc3RyLCAid2IiKSk9PU5VTEwpCisJCQkJX3Rocm93dW5peCgib3BlbmluZyBZVVYgaW1hZ2UgZm9yIG91dHB1dCIpOworCQkJaWYoZndyaXRlKHJnYmJ1ZiwgeXV2c2l6ZSwgMSwgb3V0ZmlsZSkhPTEpCisJCQkJX3Rocm93dW5peCgid3JpdGluZyBZVVYgaW1hZ2UiKTsKKwkJCWZjbG9zZShvdXRmaWxlKTsgIG91dGZpbGU9TlVMTDsKKwkJfQorCQllbHNlCisJCXsKKwkJCWlmKHRpbGVzaXpleD09dyAmJiB0aWxlc2l6ZXk9PWgpCisJCQkJc3ByaW50Zih0ZW1wc3RyLCAiJXNfJXNRJWRfZnVsbC4lcyIsIGZpbGVuYW1lLCBfc3VibmFtZXNbanBlZ3N1Yl0sIHF1YWwsCisJCQkJCXVzZXBwbT8icHBtIjoiYm1wIik7CisJCQllbHNlIHNwcmludGYodGVtcHN0ciwgIiVzXyVzUSVkXyVkeCVkLiVzIiwgZmlsZW5hbWUsIF9zdWJuYW1lc1tqcGVnc3ViXSwKKwkJCQlxdWFsLCB0aWxlc2l6ZXgsIHRpbGVzaXpleSwgdXNlcHBtPyJwcG0iOiJibXAiKTsKKwkJCWlmKHNhdmVibXAodGVtcHN0ciwgcmdiYnVmLCB3LCBoLCBwZiwgcGl0Y2gsIGJ1KT09LTEpCisJCQkJX3Rocm93Ym1wKCJzYXZpbmcgYml0bWFwIik7CisJCQlzcHJpbnRmKHN0cnJjaHIodGVtcHN0ciwgJy4nKSwgIi1lcnIuJXMiLCB1c2VwcG0/InBwbSI6ImJtcCIpOworCQkJaWYoIXF1aWV0KQorCQkJCXByaW50ZigiQ29tcHV0aW5nIGNvbXByZXNzaW9uIGVycm9yIGFuZCBzYXZpbmcgdG8gJXMuXG4iLCB0ZW1wc3RyKTsKKwkJCWlmKGpwZWdzdWI9PVRKX0dSQVlTQ0FMRSkKKwkJCXsKKwkJCQlmb3Ioaj0wOyBqPGg7IGorKykKKwkJCQl7CisJCQkJCWZvcihpPTA7IGk8dypwczsgaSs9cHMpCisJCQkJCXsKKwkJCQkJCWludCB5PShpbnQpKChkb3VibGUpc3JjYnVmW3cqcHMqaitpK19yaW5kZXhbcGZdXSowLjI5OQorCQkJCQkJCSsgKGRvdWJsZSlzcmNidWZbdypwcypqK2krX2dpbmRleFtwZl1dKjAuNTg3CisJCQkJCQkJKyAoZG91YmxlKXNyY2J1Zlt3KnBzKmoraStfYmluZGV4W3BmXV0qMC4xMTQgKyAwLjUpOworCQkJCQkJaWYoeT4yNTUpIHk9MjU1OyAgaWYoeTwwKSB5PTA7CisJCQkJCQlyZ2JidWZbcGl0Y2gqaitpK19yaW5kZXhbcGZdXT1hYnMocmdiYnVmW3BpdGNoKmoraStfcmluZGV4W3BmXV0teSk7CisJCQkJCQlyZ2JidWZbcGl0Y2gqaitpK19naW5kZXhbcGZdXT1hYnMocmdiYnVmW3BpdGNoKmoraStfZ2luZGV4W3BmXV0teSk7CisJCQkJCQlyZ2JidWZbcGl0Y2gqaitpK19iaW5kZXhbcGZdXT1hYnMocmdiYnVmW3BpdGNoKmoraStfYmluZGV4W3BmXV0teSk7CisJCQkJCX0KKwkJCQl9CisJCQl9CQkKKwkJCWVsc2UKKwkJCXsKKwkJCQlmb3Ioaj0wOyBqPGg7IGorKykgZm9yKGk9MDsgaTx3KnBzOyBpKyspCisJCQkJCXJnYmJ1ZltwaXRjaCpqK2ldPWFicyhyZ2JidWZbcGl0Y2gqaitpXS1zcmNidWZbdypwcypqK2ldKTsKKwkJCX0KKwkJCWlmKHNhdmVibXAodGVtcHN0ciwgcmdiYnVmLCB3LCBoLCBwZiwgcGl0Y2gsIGJ1KT09LTEpCisJCQkJX3Rocm93Ym1wKCJzYXZpbmcgYml0bWFwIik7CisJCX0KKworCQkvLyBDbGVhbnVwCisJCWlmKG91dGZpbGUpIHtmY2xvc2Uob3V0ZmlsZSk7ICBvdXRmaWxlPU5VTEw7fQorCQlpZihqcGVnYnVmKQorCQl7CisJCQlmb3IoaT0wOyBpPG51bXRpbGVzeCpudW10aWxlc3k7IGkrKykKKwkJCQl7aWYoanBlZ2J1ZltpXSkgZnJlZShqcGVnYnVmW2ldKTsgIGpwZWdidWZbaV09TlVMTDt9CisJCQlmcmVlKGpwZWdidWYpOyAganBlZ2J1Zj1OVUxMOworCQl9CisJCWlmKGNvbXB0aWxlc2l6ZSkge2ZyZWUoY29tcHRpbGVzaXplKTsgIGNvbXB0aWxlc2l6ZT1OVUxMO30KKwl9IHdoaWxlKHRpbGVzaXpleDx3IHx8IHRpbGVzaXpleTxoKTsKKworCWlmKHJnYmJ1Zikge2ZyZWUocmdiYnVmKTsgIHJnYmJ1Zj1OVUxMO30KKwlyZXR1cm47CisKKwliYWlsb3V0OgorCWlmKG91dGZpbGUpIHtmY2xvc2Uob3V0ZmlsZSk7ICBvdXRmaWxlPU5VTEw7fQorCWlmKGpwZWdidWYpCisJeworCQlmb3IoaT0wOyBpPG51bXRpbGVzeCpudW10aWxlc3k7IGkrKykKKwkJCXtpZihqcGVnYnVmW2ldKSBmcmVlKGpwZWdidWZbaV0pOyAganBlZ2J1ZltpXT1OVUxMO30KKwkJZnJlZShqcGVnYnVmKTsgIGpwZWdidWY9TlVMTDsKKwl9CisJaWYoY29tcHRpbGVzaXplKSB7ZnJlZShjb21wdGlsZXNpemUpOyAgY29tcHRpbGVzaXplPU5VTEw7fQorCWlmKHJnYmJ1Zikge2ZyZWUocmdiYnVmKTsgIHJnYmJ1Zj1OVUxMO30KKwlpZihobmQpIHt0akRlc3Ryb3koaG5kKTsgIGhuZD1OVUxMO30KKwlyZXR1cm47Cit9CisKKwordm9pZCBkb2RlY29tcHRlc3QoY2hhciAqZmlsZW5hbWUsIGludCBwZiwgaW50IGJ1LCBpbnQgdXNlcHBtLAorCWludCBxdWlldCkKK3sKKwljaGFyIHRlbXBzdHJbMTAyNF07CisJRklMRSAqZmlsZT1OVUxMOyAgdGpoYW5kbGUgaG5kPU5VTEw7CisJdW5zaWduZWQgY2hhciAqanBlZ2J1Zj1OVUxMLCAqcmdiYnVmPU5VTEw7CisJZG91YmxlIHN0YXJ0LCBlbGFwc2VkOworCWludCB3LCBoLCBJVEVSOworCXVuc2lnbmVkIGxvbmcganBnYnVmc2l6ZT0wOworCWludCBmbGFncz0oZm9yY2VtbXg/VEpfRk9SQ0VNTVg6MCl8KGZvcmNlc3NlP1RKX0ZPUkNFU1NFOjApCisJCXwoZm9yY2Vzc2UyP1RKX0ZPUkNFU1NFMjowKXwoZm9yY2Vzc2UzP1RKX0ZPUkNFU1NFMzowKQorCQl8KGZhc3R1cHNhbXBsZT9USl9GQVNUVVBTQU1QTEU6MCk7CisJaW50IHBzPV9wc1twZl0sIHBpdGNoLCBqcGVnc3ViPS0xOworCWNoYXIgKnRlbXA9TlVMTDsKKwlpbnQgeXV2c2l6ZSwgYnVmc2l6ZTsKKworCWZsYWdzIHw9IF9mbGFnc1twZl07CisJaWYoYnUpIGZsYWdzIHw9IFRKX0JPVFRPTVVQOworCisJaWYoKGZpbGU9Zm9wZW4oZmlsZW5hbWUsICJyYiIpKT09TlVMTCkKKwkJX3Rocm93dW5peCgib3BlbmluZyBmaWxlIik7CisJaWYoZnNlZWsoZmlsZSwgMCwgU0VFS19FTkQpPDAgfHwgKGpwZ2J1ZnNpemU9ZnRlbGwoZmlsZSkpPDApCisJCV90aHJvd3VuaXgoImRldGVybWluaW5nIGZpbGUgc2l6ZSIpOworCWlmKChqcGVnYnVmPSh1bnNpZ25lZCBjaGFyICopbWFsbG9jKGpwZ2J1ZnNpemUpKT09TlVMTCkKKwkJX3Rocm93dW5peCgiYWxsb2NhdGluZyBtZW1vcnkiKTsKKwlpZihmc2VlayhmaWxlLCAwLCBTRUVLX1NFVCk8MCkKKwkJX3Rocm93dW5peCgic2V0dGluZyBmaWxlIHBvc2l0aW9uIik7CisJaWYoZnJlYWQoanBlZ2J1ZiwganBnYnVmc2l6ZSwgMSwgZmlsZSk8MSkKKwkJX3Rocm93dW5peCgicmVhZGluZyBKUEVHIGRhdGEiKTsKKwlmY2xvc2UoZmlsZSk7ICBmaWxlPU5VTEw7CisKKwl0ZW1wPXN0cnJjaHIoZmlsZW5hbWUsICcuJyk7CisJaWYodGVtcCE9TlVMTCkgKnRlbXA9J1wwJzsKKworCWlmKChobmQ9dGpJbml0RGVjb21wcmVzcygpKT09TlVMTCkgX3Rocm93dGooImV4ZWN1dGluZyB0akluaXREZWNvbXByZXNzKCkiKTsKKwlpZih0akRlY29tcHJlc3NIZWFkZXIyKGhuZCwganBlZ2J1ZiwganBnYnVmc2l6ZSwgJncsICZoLCAmanBlZ3N1Yik9PS0xKQorCQlfdGhyb3d0aigiZXhlY3V0aW5nIHRqRGVjb21wcmVzc0hlYWRlcjIoKSIpOworCisJeXV2c2l6ZT1USkJVRlNJWkVZVVYodywgaCwganBlZ3N1Yik7CisKKwlwaXRjaD13KnBzOworCisJaWYocXVpZXQ9PTEpCisJeworCQlwcmludGYoIkFsbCBwZXJmb3JtYW5jZSB2YWx1ZXMgaW4gTXBpeGVscy9zZWNcblxuIik7CisJCXByaW50ZigiQml0bWFwXHRCaXRtYXBcdEltYWdlIFNpemVcdERlY29tcFxuIiksCisJCXByaW50ZigiRm9ybWF0XHRPcmRlclx0IFggICAgWSAgXHRQZXJmXG5cbiIpOworCQlwcmludGYoIiVzXHQlc1x0JS00ZCAlLTRkXHQiLCBfcGZuYW1lW3BmXSwgYnU/IkJVIjoiVEQiLCB3LCBoKTsKKwl9CisKKwlidWZzaXplPSh5dXY9PVlVVkRFQ09ERT8geXV2c2l6ZTpwaXRjaCpoKTsKKwlpZigocmdiYnVmPSh1bnNpZ25lZCBjaGFyICopbWFsbG9jKGJ1ZnNpemUpKT09TlVMTCkKKwkJX3Rocm93dW5peCgiYWxsb2NhdGluZyBpbWFnZSBidWZmZXIiKTsKKworCWlmKCFxdWlldCkKKwl7CisJCWlmKHl1dj09WVVWREVDT0RFKQorCQkJcHJpbnRmKCI+Pj4+PiAgSlBFRyAtLT4gWVVWICVzICA8PDw8PFxuIiwgX3N1Ym5hbWVsW2pwZWdzdWJdKTsKKwkJZWxzZQorCQkJcHJpbnRmKCI+Pj4+PiAgSlBFRyAtLT4gJXMgKCVzKSAgPDw8PDxcbiIsIF9wZm5hbWVbcGZdLAorCQkJCWJ1PyJCb3R0b20tdXAiOiJUb3AtZG93biIpOworCQlwcmludGYoIlxuSW1hZ2Ugc2l6ZTogJWQgeCAlZFxuIiwgdywgaCk7CisJfQorCisJbWVtc2V0KHJnYmJ1ZiwgMTI3LCBidWZzaXplKTsgIC8vIEdyZXkgaW1hZ2UgbWVhbnMgZGVjb21wcmVzc29yIGRpZCBub3RoaW5nCisJaWYoeXV2PT1ZVVZERUNPREUpCisJeworCQlpZih0akRlY29tcHJlc3NUb1lVVihobmQsIGpwZWdidWYsIGpwZ2J1ZnNpemUsIHJnYmJ1ZiwgZmxhZ3MpPT0tMSkKKwkJCV90aHJvd3RqKCJleGVjdXRpbmcgdGpEZWNvbXByZXNzVG9ZVVYoKSIpOworCX0KKwllbHNlIGlmKHRqRGVjb21wcmVzcyhobmQsIGpwZWdidWYsIGpwZ2J1ZnNpemUsIHJnYmJ1ZiwgdywgcGl0Y2gsIGgsIHBzLAorCQlmbGFncyk9PS0xKQorCQlfdGhyb3d0aigiZXhlY3V0aW5nIHRqRGVjb21wcmVzcygpIik7CisJSVRFUj0wOworCXN0YXJ0PXJydGltZSgpOworCWRvCisJeworCQlpZih5dXY9PVlVVkRFQ09ERSkKKwkJeworCQkJaWYodGpEZWNvbXByZXNzVG9ZVVYoaG5kLCBqcGVnYnVmLCBqcGdidWZzaXplLCByZ2JidWYsIGZsYWdzKT09LTEpCisJCQkJX3Rocm93dGooImV4ZWN1dGluZyB0akRlY29tcHJlc3NUb1lVVigpIik7CisJCX0KKwkJZWxzZSBpZih0akRlY29tcHJlc3MoaG5kLCBqcGVnYnVmLCBqcGdidWZzaXplLCByZ2JidWYsIHcsIHBpdGNoLCBoLCBwcywKKwkJCWZsYWdzKT09LTEpCisJCQlfdGhyb3d0aigiZXhlY3V0aW5nIHRqRGVjb21wcmVzcygpIik7CisJCUlURVIrKzsKKwl9CXdoaWxlKChlbGFwc2VkPXJydGltZSgpLXN0YXJ0KTw1Lik7CisJaWYodGpEZXN0cm95KGhuZCk9PS0xKSBfdGhyb3d0aigiZXhlY3V0aW5nIHRqRGVzdHJveSgpIik7CisJaG5kPU5VTEw7CisJaWYocXVpZXQpCisJeworCQlwcmludHNpZ2ZpZygoZG91YmxlKSh3KmgpLzEwMDAwMDAuKihkb3VibGUpSVRFUi9lbGFwc2VkLCA0KTsKKwkJcHJpbnRmKCJcbiIpOworCX0KKwllbHNlCisJeworCQlwcmludGYoIkQtLT4gRnJhbWUgcmF0ZTogICAgICAgICAgICVmIGZwc1xuIiwgKGRvdWJsZSlJVEVSL2VsYXBzZWQpOworCQlwcmludGYoIiAgICAgRGVzdC4gdGhyb3VnaHB1dDogICAgICVmIE1lZ2FwaXhlbHMvc2VjXG4iLAorCQkJKGRvdWJsZSkodypoKS8xMDAwMDAwLiooZG91YmxlKUlURVIvZWxhcHNlZCk7CisJfQorCXNwcmludGYodGVtcHN0ciwgIiVzX2Z1bGwuJXMiLCBmaWxlbmFtZSwgdXNlcHBtPyJwcG0iOiJibXAiKTsKKwlpZih5dXY9PVlVVkRFQ09ERSkKKwl7CisJCXNwcmludGYodGVtcHN0ciwgIiVzXyVzLnl1diIsIGZpbGVuYW1lLCBfc3VibmFtZXNbanBlZ3N1Yl0pOworCQlpZigoZmlsZT1mb3Blbih0ZW1wc3RyLCAid2IiKSk9PU5VTEwpCisJCQlfdGhyb3d1bml4KCJvcGVuaW5nIFlVViBpbWFnZSBmb3Igb3V0cHV0Iik7CisJCWlmKGZ3cml0ZShyZ2JidWYsIHl1dnNpemUsIDEsIGZpbGUpIT0xKQorCQkJX3Rocm93dW5peCgid3JpdGluZyBZVVYgaW1hZ2UiKTsKKwkJZmNsb3NlKGZpbGUpOyAgZmlsZT1OVUxMOworCX0KKwllbHNlCisJeworCQlpZihzYXZlYm1wKHRlbXBzdHIsIHJnYmJ1ZiwgdywgaCwgcGYsIHBpdGNoLCBidSk9PS0xKQorCQkJX3Rocm93Ym1wKCJzYXZpbmcgYml0bWFwIik7CisJfQorCisJYmFpbG91dDoKKwlpZihmaWxlKSB7ZmNsb3NlKGZpbGUpOyAgZmlsZT1OVUxMO30KKwlpZihqcGVnYnVmKSB7ZnJlZShqcGVnYnVmKTsgIGpwZWdidWY9TlVMTDt9CisJaWYocmdiYnVmKSB7ZnJlZShyZ2JidWYpOyAgcmdiYnVmPU5VTEw7fQorCWlmKGhuZCkge3RqRGVzdHJveShobmQpOyAgaG5kPU5VTEw7fQorCXJldHVybjsKK30KKworCit2b2lkIHVzYWdlKGNoYXIgKnByb2duYW1lKQoreworCXByaW50ZigiVVNBR0U6ICVzIDxJbnB1dGZpbGUgKEJNUHxQUE0pKT4gPCUlIFF1YWxpdHk+XG4iLCBwcm9nbmFtZSk7CisJcHJpbnRmKCIgICAgICAgJXMgPElucHV0ZmlsZSAoSlBHKSk+XG5cbiIsIHByb2duYW1lKTsKKwlwcmludGYoIiAgICAgICBbLXRpbGVdXG4iKTsKKwlwcmludGYoIiAgICAgICBUZXN0IHBlcmZvcm1hbmNlIG9mIHRoZSBjb2RlYyB3aGVuIHRoZSBpbWFnZSBpcyBlbmNvZGVkXG4iKTsKKwlwcmludGYoIiAgICAgICBhcyBzZXBhcmF0ZSB0aWxlcyBvZiB2YXJ5aW5nIHNpemVzLlxuXG4iKTsKKwlwcmludGYoIiAgICAgICBbLWZvcmNlbW14XSBbLWZvcmNlc3NlXSBbLWZvcmNlc3NlMl0gWy1mb3JjZXNzZTNdXG4iKTsKKwlwcmludGYoIiAgICAgICBGb3JjZSBNTVgsIFNTRSwgU1NFMiwgb3IgU1NFMyBjb2RlIHBhdGhzIGluIHRoZSB1bmRlcmx5aW5nIGNvZGVjXG5cbiIpOworCXByaW50ZigiICAgICAgIFstcmdiIHwgLWJnciB8IC1yZ2J4IHwgLWJncnggfCAteGJnciB8IC14cmdiXVxuIik7CisJcHJpbnRmKCIgICAgICAgVGVzdCB0aGUgc3BlY2lmaWVkIGNvbG9yIGNvbnZlcnNpb24gcGF0aCBpbiB0aGUgY29kZWMgKGRlZmF1bHQ6IEJHUilcblxuIik7CisJcHJpbnRmKCIgICAgICAgWy1mYXN0dXBzYW1wbGVdXG4iKTsKKwlwcmludGYoIiAgICAgICBVc2UgZmFzdCwgaW5hY2N1cmF0ZSB1cHNhbXBsaW5nIGNvZGUgdG8gcGVyZm9ybSA0OjI6MiBhbmQgNDoyOjBcbiIpOworCXByaW50ZigiICAgICAgIFlVViBkZWNvZGluZyBpbiBsaWJqcGVnIGRlY29tcHJlc3NvclxuXG4iKTsKKwlwcmludGYoIiAgICAgICBbLXF1aWV0XVxuIik7CisJcHJpbnRmKCIgICAgICAgT3V0cHV0IGluIHRhYnVsYXIgcmF0aGVyIHRoYW4gdmVyYm9zZSBmb3JtYXRcblxuIik7CisJcHJpbnRmKCIgICAgICAgWy15dXZlbmNvZGVdXG4iKTsKKwlwcmludGYoIiAgICAgICBFbmNvZGUgUkdCIGlucHV0IGFzIHBsYW5hciBZVVYgcmF0aGVyIHRoYW4gY29tcHJlc3NpbmcgYXMgSlBFR1xuXG4iKTsKKwlwcmludGYoIiAgICAgICBbLXl1dmRlY29kZV1cbiIpOworCXByaW50ZigiICAgICAgIERlY29kZSBKUEVHIGltYWdlIHRvIHBsYW5hciBZVVYgcmF0aGVyIHRoYW4gUkdCXG5cbiIpOworCXByaW50ZigiICAgICAgIE5PVEU6IElmIHRoZSBxdWFsaXR5IGlzIHNwZWNpZmllZCBhcyBhIHJhbmdlLCBpLmUuIDkwLTEwMCwgYSBzZXBhcmF0ZVxuIik7CisJcHJpbnRmKCIgICAgICAgdGVzdCB3aWxsIGJlIHBlcmZvcm1lZCBmb3IgYWxsIHF1YWxpdHkgdmFsdWVzIGluIHRoZSByYW5nZS5cbiIpOworCWV4aXQoMSk7Cit9CisKKworaW50IG1haW4oaW50IGFyZ2MsIGNoYXIgKmFyZ3ZbXSkKK3sKKwl1bnNpZ25lZCBjaGFyICpibXBidWY9TlVMTDsgIGludCB3LCBoLCBpLCB1c2VwcG09MDsKKwlpbnQgcXVhbD0tMSwgZG90aWxlPTAsIHF1aWV0PTAsIGhpcXVhbD0tMTsgIGNoYXIgKnRlbXA7CisJaW50IHBmPUJNUF9CR1I7CisJaW50IGJ1PTAsIG1pbmFyZz0yOworCisJaWYoYXJnYzxtaW5hcmcpIHVzYWdlKGFyZ3ZbMF0pOworCisJdGVtcD1zdHJyY2hyKGFyZ3ZbMV0sICcuJyk7CisJaWYodGVtcCE9TlVMTCkKKwl7CisJCWlmKCFzdHJpY21wKHRlbXAsICIucHBtIikpIHVzZXBwbT0xOworCQlpZighc3RyaWNtcCh0ZW1wLCAiLmpwZyIpIHx8ICFzdHJpY21wKHRlbXAsICIuanBlZyIpKSBkZWNvbXBvbmx5PTE7CisJfQorCisJcHJpbnRmKCJcbiIpOworCisJaWYoYXJnYz5taW5hcmcpCisJeworCQlmb3IoaT1taW5hcmc7IGk8YXJnYzsgaSsrKQorCQl7CisJCQlpZighc3RyaWNtcChhcmd2W2ldLCAiLXl1dmVuY29kZSIpKQorCQkJeworCQkJCXByaW50ZigiVGVzdGluZyBZVVYgcGxhbmFyIGVuY29kaW5nXG5cbiIpOworCQkJCXl1dj1ZVVZFTkNPREU7ICBoaXF1YWw9cXVhbD0xMDA7CisJCQl9CisJCQlpZighc3RyaWNtcChhcmd2W2ldLCAiLXl1dmRlY29kZSIpKQorCQkJeworCQkJCXByaW50ZigiVGVzdGluZyBZVVYgcGxhbmFyIGRlY29kaW5nXG5cbiIpOworCQkJCXl1dj1ZVVZERUNPREU7CisJCQl9CisJCX0KKwl9CisKKwlpZighZGVjb21wb25seSAmJiB5dXYhPVlVVkVOQ09ERSkKKwl7CisJCW1pbmFyZz0zOworCQlpZihhcmdjPG1pbmFyZykgdXNhZ2UoYXJndlswXSk7CisJCWlmKChxdWFsPWF0b2koYXJndlsyXSkpPDEgfHwgcXVhbD4xMDApCisJCXsKKwkJCXB1dHMoIkVSUk9SOiBRdWFsaXR5IG11c3QgYmUgYmV0d2VlbiAxIGFuZCAxMDAuIik7CisJCQlleGl0KDEpOworCQl9CisJCWlmKCh0ZW1wPXN0cmNocihhcmd2WzJdLCAnLScpKSE9TlVMTCAmJiBzdHJsZW4odGVtcCk+MQorCQkJJiYgc3NjYW5mKCZ0ZW1wWzFdLCAiJWQiLCAmaGlxdWFsKT09MSAmJiBoaXF1YWw+cXVhbCAmJiBoaXF1YWw+PTEKKwkJCSYmIGhpcXVhbDw9MTAwKSB7fQorCQllbHNlIGhpcXVhbD1xdWFsOworCX0KKworCWlmKGFyZ2M+bWluYXJnKQorCXsKKwkJZm9yKGk9bWluYXJnOyBpPGFyZ2M7IGkrKykKKwkJeworCQkJaWYoIXN0cmljbXAoYXJndltpXSwgIi10aWxlIikpIGRvdGlsZT0xOworCQkJaWYoIXN0cmljbXAoYXJndltpXSwgIi1mb3JjZXNzZTMiKSkKKwkJCXsKKwkJCQlwcmludGYoIlVzaW5nIFNTRTMgY29kZVxuXG4iKTsKKwkJCQlmb3JjZXNzZTM9MTsKKwkJCX0KKwkJCWlmKCFzdHJpY21wKGFyZ3ZbaV0sICItZm9yY2Vzc2UyIikpCisJCQl7CisJCQkJcHJpbnRmKCJVc2luZyBTU0UyIGNvZGVcblxuIik7CisJCQkJZm9yY2Vzc2UyPTE7CisJCQl9CisJCQlpZighc3RyaWNtcChhcmd2W2ldLCAiLWZvcmNlc3NlIikpCisJCQl7CisJCQkJcHJpbnRmKCJVc2luZyBTU0UgY29kZVxuXG4iKTsKKwkJCQlmb3JjZXNzZT0xOworCQkJfQorCQkJaWYoIXN0cmljbXAoYXJndltpXSwgIi1mb3JjZW1teCIpKQorCQkJeworCQkJCXByaW50ZigiVXNpbmcgTU1YIGNvZGVcblxuIik7CisJCQkJZm9yY2VtbXg9MTsKKwkJCX0KKwkJCWlmKCFzdHJpY21wKGFyZ3ZbaV0sICItZmFzdHVwc2FtcGxlIikpCisJCQl7CisJCQkJcHJpbnRmKCJVc2luZyBmYXN0IHVwc2FtcGxpbmcgY29kZVxuXG4iKTsKKwkJCQlmYXN0dXBzYW1wbGU9MTsKKwkJCX0KKwkJCWlmKCFzdHJpY21wKGFyZ3ZbaV0sICItcmdiIikpIHBmPUJNUF9SR0I7CisJCQlpZighc3RyaWNtcChhcmd2W2ldLCAiLXJnYngiKSkgcGY9Qk1QX1JHQlg7CisJCQlpZighc3RyaWNtcChhcmd2W2ldLCAiLWJnciIpKSBwZj1CTVBfQkdSOworCQkJaWYoIXN0cmljbXAoYXJndltpXSwgIi1iZ3J4IikpIHBmPUJNUF9CR1JYOworCQkJaWYoIXN0cmljbXAoYXJndltpXSwgIi14YmdyIikpIHBmPUJNUF9YQkdSOworCQkJaWYoIXN0cmljbXAoYXJndltpXSwgIi14cmdiIikpIHBmPUJNUF9YUkdCOworCQkJaWYoIXN0cmljbXAoYXJndltpXSwgIi1ib3R0b211cCIpKSBidT0xOworCQkJaWYoIXN0cmljbXAoYXJndltpXSwgIi1xdWlldCIpKSBxdWlldD0xOworCQkJaWYoIXN0cmljbXAoYXJndltpXSwgIi1xcSIpKSBxdWlldD0yOworCQl9CisJfQorCisJaWYoIWRlY29tcG9ubHkpCisJeworCQlpZihsb2FkYm1wKGFyZ3ZbMV0sICZibXBidWYsICZ3LCAmaCwgcGYsIDEsIGJ1KT09LTEpCisJCQlfdGhyb3dibXAoImxvYWRpbmcgYml0bWFwIik7CisJCXRlbXA9c3RycmNocihhcmd2WzFdLCAnLicpOworCQlpZih0ZW1wIT1OVUxMKSAqdGVtcD0nXDAnOworCX0KKworCWlmKHF1aWV0PT0xICYmICFkZWNvbXBvbmx5KQorCXsKKwkJcHJpbnRmKCJBbGwgcGVyZm9ybWFuY2UgdmFsdWVzIGluIE1waXhlbHMvc2VjXG5cbiIpOworCQlwcmludGYoIkJpdG1hcFx0Qml0bWFwXHRKUEVHXHRKUEVHXHRUaWxlIFNpemVcdENvbXByXHRDb21wclx0RGVjb21wXG4iKTsKKwkJcHJpbnRmKCJGb3JtYXRcdE9yZGVyXHRGb3JtYXRcdFF1YWxcdCBYICAgIFkgIFx0UGVyZiBcdFJhdGlvXHRQZXJmXG5cbiIpOworCX0KKworCWlmKGRlY29tcG9ubHkpCisJeworCQlkb2RlY29tcHRlc3QoYXJndlsxXSwgcGYsIGJ1LCAxLCBxdWlldCk7CisJCXByaW50ZigiXG4iKTsKKwkJZ290byBiYWlsb3V0OworCX0KKwlmb3IoaT1oaXF1YWw7IGk+PXF1YWw7IGktLSkKKwkJZG90ZXN0KGJtcGJ1ZiwgdywgaCwgcGYsIGJ1LCBUSl9HUkFZU0NBTEUsIGksIGFyZ3ZbMV0sIGRvdGlsZSwgdXNlcHBtLCBxdWlldCk7CisJcHJpbnRmKCJcbiIpOworCWZvcihpPWhpcXVhbDsgaT49cXVhbDsgaS0tKQorCQlkb3Rlc3QoYm1wYnVmLCB3LCBoLCBwZiwgYnUsIFRKXzQyMCwgaSwgYXJndlsxXSwgZG90aWxlLCB1c2VwcG0sIHF1aWV0KTsKKwlwcmludGYoIlxuIik7CisJZm9yKGk9aGlxdWFsOyBpPj1xdWFsOyBpLS0pCisJCWRvdGVzdChibXBidWYsIHcsIGgsIHBmLCBidSwgVEpfNDIyLCBpLCBhcmd2WzFdLCBkb3RpbGUsIHVzZXBwbSwgcXVpZXQpOworCXByaW50ZigiXG4iKTsKKwlmb3IoaT1oaXF1YWw7IGk+PXF1YWw7IGktLSkKKwkJZG90ZXN0KGJtcGJ1ZiwgdywgaCwgcGYsIGJ1LCBUSl80NDQsIGksIGFyZ3ZbMV0sIGRvdGlsZSwgdXNlcHBtLCBxdWlldCk7CisJcHJpbnRmKCJcbiIpOworCisJYmFpbG91dDoKKwlpZihibXBidWYpIGZyZWUoYm1wYnVmKTsKKwlyZXR1cm4gMDsKK30KZGlmZiAtLWdpdCBhL2pxdWFudDEuYyBiL2pxdWFudDEuYwppbmRleCBiMmY5NmFhLi4zNjJiYjFlIDEwMDY0NAotLS0gYS9qcXVhbnQxLmMKKysrIGIvanF1YW50MS5jCkBAIC0yLDYgKzIsNyBAQAogICoganF1YW50MS5jCiAgKgogICogQ29weXJpZ2h0IChDKSAxOTkxLTE5OTYsIFRob21hcyBHLiBMYW5lLgorICogQ29weXJpZ2h0IChDKSAyMDA5LCBELiBSLiBDb21tYW5kZXIKICAqIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBJbmRlcGVuZGVudCBKUEVHIEdyb3VwJ3Mgc29mdHdhcmUuCiAgKiBGb3IgY29uZGl0aW9ucyBvZiBkaXN0cmlidXRpb24gYW5kIHVzZSwgc2VlIHRoZSBhY2NvbXBhbnlpbmcgUkVBRE1FIGZpbGUuCiAgKgpAQCAtMTkzLDcgKzE5NCwxMCBAQAogICBpbnQgdG90YWxfY29sb3JzLCBpcm9vdCwgaSwgajsKICAgYm9vbGVhbiBjaGFuZ2VkOwogICBsb25nIHRlbXA7Ci0gIHN0YXRpYyBjb25zdCBpbnQgUkdCX29yZGVyWzNdID0geyBSR0JfR1JFRU4sIFJHQl9SRUQsIFJHQl9CTFVFIH07CisgIGludCBSR0Jfb3JkZXJbM10gPSB7IFJHQl9HUkVFTiwgUkdCX1JFRCwgUkdCX0JMVUUgfTsKKyAgUkdCX29yZGVyWzBdID0gcmdiX2dyZWVuW2NpbmZvLT5vdXRfY29sb3Jfc3BhY2VdOworICBSR0Jfb3JkZXJbMV0gPSByZ2JfcmVkW2NpbmZvLT5vdXRfY29sb3Jfc3BhY2VdOworICBSR0Jfb3JkZXJbMl0gPSByZ2JfYmx1ZVtjaW5mby0+b3V0X2NvbG9yX3NwYWNlXTsKIAogICAvKiBXZSBjYW4gYWxsb2NhdGUgYXQgbGVhc3QgdGhlIG5jJ3RoIHJvb3Qgb2YgbWF4X2NvbG9ycyBwZXIgY29tcG9uZW50LiAqLwogICAvKiBDb21wdXRlIGZsb29yKG5jJ3RoIHJvb3Qgb2YgbWF4X2NvbG9ycykuICovCmRpZmYgLS1naXQgYS9qcXVhbnQyLmMgYi9qcXVhbnQyLmMKaW5kZXggYWY2MDFlMy4uZGE5NjRmNyAxMDA2NDQKLS0tIGEvanF1YW50Mi5jCisrKyBiL2pxdWFudDIuYwpAQCAtMiw2ICsyLDcgQEAKICAqIGpxdWFudDIuYwogICoKICAqIENvcHlyaWdodCAoQykgMTk5MS0xOTk2LCBUaG9tYXMgRy4gTGFuZS4KKyAqIENvcHlyaWdodCAoQykgMjAwOSwgRC4gUi4gQ29tbWFuZGVyLgogICogVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEluZGVwZW5kZW50IEpQRUcgR3JvdXAncyBzb2Z0d2FyZS4KICAqIEZvciBjb25kaXRpb25zIG9mIGRpc3RyaWJ1dGlvbiBhbmQgdXNlLCBzZWUgdGhlIGFjY29tcGFueWluZyBSRUFETUUgZmlsZS4KICAqCkBAIC03NCwyOSArNzUsMTAgQEAKICNkZWZpbmUgR19TQ0FMRSAzCQkvKiBzY2FsZSBHIGRpc3RhbmNlcyBieSB0aGlzIG11Y2ggKi8KICNkZWZpbmUgQl9TQ0FMRSAxCQkvKiBhbmQgQiBieSB0aGlzIG11Y2ggKi8KIAotLyogUmVsYWJlbCBSL0cvQiBhcyBjb21wb25lbnRzIDAvMS8yLCByZXNwZWN0aW5nIHRoZSBSR0Igb3JkZXJpbmcgZGVmaW5lZAotICogaW4gam1vcmVjZmcuaC4gIEFzIHRoZSBjb2RlIHN0YW5kcywgaXQgd2lsbCBkbyB0aGUgcmlnaHQgdGhpbmcgZm9yIFIsRyxCCi0gKiBhbmQgQixHLFIgb3JkZXJzLiAgSWYgeW91IGRlZmluZSBzb21lIG90aGVyIHdlaXJkIG9yZGVyIGluIGptb3JlY2ZnLmgsCi0gKiB5b3UnbGwgZ2V0IGNvbXBpbGUgZXJyb3JzIHVudGlsIHlvdSBleHRlbmQgdGhpcyBsb2dpYy4gIEluIHRoYXQgY2FzZQotICogeW91J2xsIHByb2JhYmx5IHdhbnQgdG8gdHdlYWsgdGhlIGhpc3RvZ3JhbSBzaXplcyB0b28uCi0gKi8KLQotI2lmIFJHQl9SRUQgPT0gMAotI2RlZmluZSBDMF9TQ0FMRSBSX1NDQUxFCi0jZW5kaWYKLSNpZiBSR0JfQkxVRSA9PSAwCi0jZGVmaW5lIEMwX1NDQUxFIEJfU0NBTEUKLSNlbmRpZgotI2lmIFJHQl9HUkVFTiA9PSAxCi0jZGVmaW5lIEMxX1NDQUxFIEdfU0NBTEUKLSNlbmRpZgotI2lmIFJHQl9SRUQgPT0gMgotI2RlZmluZSBDMl9TQ0FMRSBSX1NDQUxFCi0jZW5kaWYKLSNpZiBSR0JfQkxVRSA9PSAyCi0jZGVmaW5lIEMyX1NDQUxFIEJfU0NBTEUKLSNlbmRpZgotCitzdGF0aWMgY29uc3QgaW50IGNfc2NhbGVzWzNdPXtSX1NDQUxFLCBHX1NDQUxFLCBCX1NDQUxFfTsKKyNkZWZpbmUgQzBfU0NBTEUgY19zY2FsZXNbcmdiX3JlZFtjaW5mby0+b3V0X2NvbG9yX3NwYWNlXV0KKyNkZWZpbmUgQzFfU0NBTEUgY19zY2FsZXNbcmdiX2dyZWVuW2NpbmZvLT5vdXRfY29sb3Jfc3BhY2VdXQorI2RlZmluZSBDMl9TQ0FMRSBjX3NjYWxlc1tyZ2JfYmx1ZVtjaW5mby0+b3V0X2NvbG9yX3NwYWNlXV0KIAogLyoKICAqIEZpcnN0IHdlIGhhdmUgdGhlIGhpc3RvZ3JhbSBkYXRhIHN0cnVjdHVyZSBhbmQgcm91dGluZXMgZm9yIGNyZWF0aW5nIGl0LgpAQCAtNDU0LDE1ICs0MzYsMTYgQEAKICAgICAvKiBXZSB3YW50IHRvIGJyZWFrIGFueSB0aWVzIGluIGZhdm9yIG9mIGdyZWVuLCB0aGVuIHJlZCwgYmx1ZSBsYXN0LgogICAgICAqIFRoaXMgY29kZSBkb2VzIHRoZSByaWdodCB0aGluZyBmb3IgUixHLEIgb3IgQixHLFIgY29sb3Igb3JkZXJzIG9ubHkuCiAgICAgICovCi0jaWYgUkdCX1JFRCA9PSAwCi0gICAgY21heCA9IGMxOyBuID0gMTsKLSAgICBpZiAoYzAgPiBjbWF4KSB7IGNtYXggPSBjMDsgbiA9IDA7IH0KLSAgICBpZiAoYzIgPiBjbWF4KSB7IG4gPSAyOyB9Ci0jZWxzZQotICAgIGNtYXggPSBjMTsgbiA9IDE7Ci0gICAgaWYgKGMyID4gY21heCkgeyBjbWF4ID0gYzI7IG4gPSAyOyB9Ci0gICAgaWYgKGMwID4gY21heCkgeyBuID0gMDsgfQotI2VuZGlmCisgICAgaWYgKHJnYl9yZWRbY2luZm8tPm91dF9jb2xvcl9zcGFjZV0gPT0gMCkgeworICAgICAgY21heCA9IGMxOyBuID0gMTsKKyAgICAgIGlmIChjMCA+IGNtYXgpIHsgY21heCA9IGMwOyBuID0gMDsgfQorICAgICAgaWYgKGMyID4gY21heCkgeyBuID0gMjsgfQorICAgIH0KKyAgICBlbHNlIHsKKyAgICAgIGNtYXggPSBjMTsgbiA9IDE7CisgICAgICBpZiAoYzIgPiBjbWF4KSB7IGNtYXggPSBjMjsgbiA9IDI7IH0KKyAgICAgIGlmIChjMCA+IGNtYXgpIHsgbiA9IDA7IH0KKyAgICB9CiAgICAgLyogQ2hvb3NlIHNwbGl0IHBvaW50IGFsb25nIHNlbGVjdGVkIGF4aXMsIGFuZCB1cGRhdGUgYm94IGJvdW5kcy4KICAgICAgKiBDdXJyZW50IGFsZ29yaXRobTogc3BsaXQgYXQgaGFsZndheSBwb2ludC4KICAgICAgKiAoU2luY2UgdGhlIGJveCBoYXMgYmVlbiBzaHJ1bmsgdG8gbWluaW11bSB2b2x1bWUsCmRpZmYgLS1naXQgYS9qc2ltZC5oIGIvanNpbWQuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iNjYzNzkxCi0tLSAvZGV2L251bGwKKysrIGIvanNpbWQuaApAQCAtMCwwICsxLDkwIEBACisvKgorICoganNpbWQuaAorICoKKyAqIENvcHlyaWdodCAyMDA5IFBpZXJyZSBPc3NtYW4gPG9zc21hbkBjZW5kaW8uc2U+IGZvciBDZW5kaW8gQUIKKyAqIAorICogQmFzZWQgb24gdGhlIHg4NiBTSU1EIGV4dGVuc2lvbiBmb3IgSUpHIEpQRUcgbGlicmFyeSwKKyAqIENvcHlyaWdodCAoQykgMTk5OS0yMDA2LCBNSVlBU0FLQSBNYXNhcnUuCisgKiBGb3IgY29uZGl0aW9ucyBvZiBkaXN0cmlidXRpb24gYW5kIHVzZSwgc2VlIGNvcHlyaWdodCBub3RpY2UgaW4ganNpbWRleHQuaW5jCisgKgorICovCisKKy8qIFNob3J0IGZvcm1zIG9mIGV4dGVybmFsIG5hbWVzIGZvciBzeXN0ZW1zIHdpdGggYnJhaW4tZGFtYWdlZCBsaW5rZXJzLiAqLworCisjaWZkZWYgTkVFRF9TSE9SVF9FWFRFUk5BTF9OQU1FUworI2RlZmluZSBqc2ltZF9jYW5fcmdiX3ljYyAgICAgICAgICAgICAgICAgalNDYW5SZ2JZY2MKKyNkZWZpbmUganNpbWRfY2FuX3ljY19yZ2IgICAgICAgICAgICAgICAgIGpTQ2FuWWNjUmdiCisjZGVmaW5lIGpzaW1kX3JnYl95Y2NfY29udmVydCAgICAgICAgICAgICBqU1JnYlljY0NvbnYKKyNkZWZpbmUganNpbWRfeWNjX3JnYl9jb252ZXJ0ICAgICAgICAgICAgIGpTWWNjUmdiQ29udgorI2RlZmluZSBqc2ltZF9jYW5faDJ2Ml9kb3duc2FtcGxlICAgICAgICAgalNDYW5IMlYyRG93bgorI2RlZmluZSBqc2ltZF9jYW5faDJ2MV9kb3duc2FtcGxlICAgICAgICAgalNDYW5IMlYxRG93bgorI2RlZmluZSBqc2ltZF9oMnYyX2Rvd25zYW1wbGUgICAgICAgICAgICAgalNIMlYyRG93bgorI2RlZmluZSBqc2ltZF9oMnYxX2Rvd25zYW1wbGUgICAgICAgICAgICAgalNIMlYxRG93bgorI2RlZmluZSBqc2ltZF9jYW5faDJ2Ml91cHNhbXBsZSAgICAgICAgICAgalNDYW5IMlYyVXAKKyNkZWZpbmUganNpbWRfY2FuX2gydjFfdXBzYW1wbGUgICAgICAgICAgIGpTQ2FuSDJWMVVwCisjZGVmaW5lIGpzaW1kX2gydjJfdXBzYW1wbGUgICAgICAgICAgICAgICBqU0gyVjJVcAorI2RlZmluZSBqc2ltZF9oMnYxX3Vwc2FtcGxlICAgICAgICAgICAgICAgalNIMlYxVXAKKyNkZWZpbmUganNpbWRfY2FuX2gydjJfZmFuY3lfdXBzYW1wbGUgICAgIGpTQ2FuSDJWMkZVcAorI2RlZmluZSBqc2ltZF9jYW5faDJ2MV9mYW5jeV91cHNhbXBsZSAgICAgalNDYW5IMlYxRlVwCisjZGVmaW5lIGpzaW1kX2gydjJfZmFuY3lfdXBzYW1wbGUgICAgICAgICBqU0gyVjJGVXAKKyNkZWZpbmUganNpbWRfaDJ2MV9mYW5jeV91cHNhbXBsZSAgICAgICAgIGpTSDJWMUZVcAorI2RlZmluZSBqc2ltZF9jYW5faDJ2Ml9tZXJnZWRfdXBzYW1wbGUgICAgalNDYW5IMlYyTVVwCisjZGVmaW5lIGpzaW1kX2Nhbl9oMnYxX21lcmdlZF91cHNhbXBsZSAgICBqU0NhbkgyVjFNVXAKKyNkZWZpbmUganNpbWRfaDJ2Ml9tZXJnZWRfdXBzYW1wbGUgICAgICAgIGpTSDJWMk1VcAorI2RlZmluZSBqc2ltZF9oMnYxX21lcmdlZF91cHNhbXBsZSAgICAgICAgalNIMlYxTVVwCisjZW5kaWYgLyogTkVFRF9TSE9SVF9FWFRFUk5BTF9OQU1FUyAqLworCitFWFRFUk4oaW50KSBqc2ltZF9jYW5fcmdiX3ljYyBKUFAoKHZvaWQpKTsKK0VYVEVSTihpbnQpIGpzaW1kX2Nhbl95Y2NfcmdiIEpQUCgodm9pZCkpOworCitFWFRFUk4odm9pZCkganNpbWRfcmdiX3ljY19jb252ZXJ0CisgICAgICAgIEpQUCgoal9jb21wcmVzc19wdHIgY2luZm8sCisgICAgICAgICAgICAgSlNBTVBBUlJBWSBpbnB1dF9idWYsIEpTQU1QSU1BR0Ugb3V0cHV0X2J1ZiwKKyAgICAgICAgICAgICBKRElNRU5TSU9OIG91dHB1dF9yb3csIGludCBudW1fcm93cykpOworRVhURVJOKHZvaWQpIGpzaW1kX3ljY19yZ2JfY29udmVydAorICAgICAgICBKUFAoKGpfZGVjb21wcmVzc19wdHIgY2luZm8sCisgICAgICAgICAgICAgSlNBTVBJTUFHRSBpbnB1dF9idWYsIEpESU1FTlNJT04gaW5wdXRfcm93LAorICAgICAgICAgICAgIEpTQU1QQVJSQVkgb3V0cHV0X2J1ZiwgaW50IG51bV9yb3dzKSk7CisKK0VYVEVSTihpbnQpIGpzaW1kX2Nhbl9oMnYyX2Rvd25zYW1wbGUgSlBQKCh2b2lkKSk7CitFWFRFUk4oaW50KSBqc2ltZF9jYW5faDJ2MV9kb3duc2FtcGxlIEpQUCgodm9pZCkpOworCitFWFRFUk4odm9pZCkganNpbWRfaDJ2Ml9kb3duc2FtcGxlCisgICAgICAgIEpQUCgoal9jb21wcmVzc19wdHIgY2luZm8sIGpwZWdfY29tcG9uZW50X2luZm8gKiBjb21wcHRyLAorICAgICAgICAgICAgIEpTQU1QQVJSQVkgaW5wdXRfZGF0YSwgSlNBTVBBUlJBWSBvdXRwdXRfZGF0YSkpOworRVhURVJOKHZvaWQpIGpzaW1kX2gydjFfZG93bnNhbXBsZQorICAgICAgICBKUFAoKGpfY29tcHJlc3NfcHRyIGNpbmZvLCBqcGVnX2NvbXBvbmVudF9pbmZvICogY29tcHB0ciwKKyAgICAgICAgICAgICBKU0FNUEFSUkFZIGlucHV0X2RhdGEsIEpTQU1QQVJSQVkgb3V0cHV0X2RhdGEpKTsKKworRVhURVJOKGludCkganNpbWRfY2FuX2gydjJfdXBzYW1wbGUgSlBQKCh2b2lkKSk7CitFWFRFUk4oaW50KSBqc2ltZF9jYW5faDJ2MV91cHNhbXBsZSBKUFAoKHZvaWQpKTsKKworRVhURVJOKHZvaWQpIGpzaW1kX2gydjJfdXBzYW1wbGUKKyAgICAgICAgSlBQKChqX2RlY29tcHJlc3NfcHRyIGNpbmZvLCBqcGVnX2NvbXBvbmVudF9pbmZvICogY29tcHB0ciwKKyAgICAgICAgICAgICBKU0FNUEFSUkFZIGlucHV0X2RhdGEsIEpTQU1QQVJSQVkgKiBvdXRwdXRfZGF0YV9wdHIpKTsKK0VYVEVSTih2b2lkKSBqc2ltZF9oMnYxX3Vwc2FtcGxlCisgICAgICAgIEpQUCgoal9kZWNvbXByZXNzX3B0ciBjaW5mbywganBlZ19jb21wb25lbnRfaW5mbyAqIGNvbXBwdHIsCisgICAgICAgICAgICAgSlNBTVBBUlJBWSBpbnB1dF9kYXRhLCBKU0FNUEFSUkFZICogb3V0cHV0X2RhdGFfcHRyKSk7CisKK0VYVEVSTihpbnQpIGpzaW1kX2Nhbl9oMnYyX2ZhbmN5X3Vwc2FtcGxlIEpQUCgodm9pZCkpOworRVhURVJOKGludCkganNpbWRfY2FuX2gydjFfZmFuY3lfdXBzYW1wbGUgSlBQKCh2b2lkKSk7CisKK0VYVEVSTih2b2lkKSBqc2ltZF9oMnYyX2ZhbmN5X3Vwc2FtcGxlCisgICAgICAgIEpQUCgoal9kZWNvbXByZXNzX3B0ciBjaW5mbywganBlZ19jb21wb25lbnRfaW5mbyAqIGNvbXBwdHIsCisgICAgICAgICAgICAgSlNBTVBBUlJBWSBpbnB1dF9kYXRhLCBKU0FNUEFSUkFZICogb3V0cHV0X2RhdGFfcHRyKSk7CitFWFRFUk4odm9pZCkganNpbWRfaDJ2MV9mYW5jeV91cHNhbXBsZQorICAgICAgICBKUFAoKGpfZGVjb21wcmVzc19wdHIgY2luZm8sIGpwZWdfY29tcG9uZW50X2luZm8gKiBjb21wcHRyLAorICAgICAgICAgICAgIEpTQU1QQVJSQVkgaW5wdXRfZGF0YSwgSlNBTVBBUlJBWSAqIG91dHB1dF9kYXRhX3B0cikpOworCitFWFRFUk4oaW50KSBqc2ltZF9jYW5faDJ2Ml9tZXJnZWRfdXBzYW1wbGUgSlBQKCh2b2lkKSk7CitFWFRFUk4oaW50KSBqc2ltZF9jYW5faDJ2MV9tZXJnZWRfdXBzYW1wbGUgSlBQKCh2b2lkKSk7CisKK0VYVEVSTih2b2lkKSBqc2ltZF9oMnYyX21lcmdlZF91cHNhbXBsZQorICAgICAgICBKUFAoKGpfZGVjb21wcmVzc19wdHIgY2luZm8sCisgICAgICAgICAgICAgSlNBTVBJTUFHRSBpbnB1dF9idWYsIEpESU1FTlNJT04gaW5fcm93X2dyb3VwX2N0ciwKKyAgICAgICAgICAgICBKU0FNUEFSUkFZIG91dHB1dF9idWYpKTsKK0VYVEVSTih2b2lkKSBqc2ltZF9oMnYxX21lcmdlZF91cHNhbXBsZQorICAgICAgICBKUFAoKGpfZGVjb21wcmVzc19wdHIgY2luZm8sCisgICAgICAgICAgICAgSlNBTVBJTUFHRSBpbnB1dF9idWYsIEpESU1FTlNJT04gaW5fcm93X2dyb3VwX2N0ciwKKyAgICAgICAgICAgICBKU0FNUEFSUkFZIG91dHB1dF9idWYpKTsKKwpkaWZmIC0tZ2l0IGEvanNpbWRfbm9uZS5jIGIvanNpbWRfbm9uZS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjdmZjMwNzQKLS0tIC9kZXYvbnVsbAorKysgYi9qc2ltZF9ub25lLmMKQEAgLTAsMCArMSwzMDAgQEAKKy8qCisgKiBqc2ltZF9ub25lLmMKKyAqCisgKiBDb3B5cmlnaHQgMjAwOSBQaWVycmUgT3NzbWFuIDxvc3NtYW5AY2VuZGlvLnNlPiBmb3IgQ2VuZGlvIEFCCisgKiBDb3B5cmlnaHQgMjAwOSBELiBSLiBDb21tYW5kZXIKKyAqIAorICogQmFzZWQgb24gdGhlIHg4NiBTSU1EIGV4dGVuc2lvbiBmb3IgSUpHIEpQRUcgbGlicmFyeSwKKyAqIENvcHlyaWdodCAoQykgMTk5OS0yMDA2LCBNSVlBU0FLQSBNYXNhcnUuCisgKiBGb3IgY29uZGl0aW9ucyBvZiBkaXN0cmlidXRpb24gYW5kIHVzZSwgc2VlIGNvcHlyaWdodCBub3RpY2UgaW4ganNpbWRleHQuaW5jCisgKgorICogVGhpcyBmaWxlIGNvbnRhaW5zIHN0dWJzIGZvciB3aGVuIHRoZXJlIGlzIG5vIFNJTUQgc3VwcG9ydCBhdmFpbGFibGUuCisgKi8KKworI2RlZmluZSBKUEVHX0lOVEVSTkFMUworI2luY2x1ZGUgImppbmNsdWRlLmgiCisjaW5jbHVkZSAianBlZ2xpYi5oIgorI2luY2x1ZGUgImpzaW1kLmgiCisjaW5jbHVkZSAiamRjdC5oIgorI2luY2x1ZGUgImpzaW1kZGN0LmgiCisKK0dMT0JBTChpbnQpCitqc2ltZF9jYW5fcmdiX3ljYyAodm9pZCkKK3sKKyAgcmV0dXJuIDA7Cit9CisKK0dMT0JBTChpbnQpCitqc2ltZF9jYW5feWNjX3JnYiAodm9pZCkKK3sKKyAgcmV0dXJuIDA7Cit9CisKK0dMT0JBTCh2b2lkKQoranNpbWRfcmdiX3ljY19jb252ZXJ0IChqX2NvbXByZXNzX3B0ciBjaW5mbywKKyAgICAgICAgICAgICAgICAgICAgICAgSlNBTVBBUlJBWSBpbnB1dF9idWYsIEpTQU1QSU1BR0Ugb3V0cHV0X2J1ZiwKKyAgICAgICAgICAgICAgICAgICAgICAgSkRJTUVOU0lPTiBvdXRwdXRfcm93LCBpbnQgbnVtX3Jvd3MpCit7Cit9CisKK0dMT0JBTCh2b2lkKQoranNpbWRfeWNjX3JnYl9jb252ZXJ0IChqX2RlY29tcHJlc3NfcHRyIGNpbmZvLAorICAgICAgICAgICAgICAgICAgICAgICBKU0FNUElNQUdFIGlucHV0X2J1ZiwgSkRJTUVOU0lPTiBpbnB1dF9yb3csCisgICAgICAgICAgICAgICAgICAgICAgIEpTQU1QQVJSQVkgb3V0cHV0X2J1ZiwgaW50IG51bV9yb3dzKQoreworfQorCitHTE9CQUwoaW50KQoranNpbWRfY2FuX2gydjJfZG93bnNhbXBsZSAodm9pZCkKK3sKKyAgcmV0dXJuIDA7Cit9CisKK0dMT0JBTChpbnQpCitqc2ltZF9jYW5faDJ2MV9kb3duc2FtcGxlICh2b2lkKQoreworICByZXR1cm4gMDsKK30KKworR0xPQkFMKHZvaWQpCitqc2ltZF9oMnYyX2Rvd25zYW1wbGUgKGpfY29tcHJlc3NfcHRyIGNpbmZvLCBqcGVnX2NvbXBvbmVudF9pbmZvICogY29tcHB0ciwKKyAgICAgICAgICAgICAgICAgICAgICAgSlNBTVBBUlJBWSBpbnB1dF9kYXRhLCBKU0FNUEFSUkFZIG91dHB1dF9kYXRhKQoreworfQorCitHTE9CQUwodm9pZCkKK2pzaW1kX2gydjFfZG93bnNhbXBsZSAoal9jb21wcmVzc19wdHIgY2luZm8sIGpwZWdfY29tcG9uZW50X2luZm8gKiBjb21wcHRyLAorICAgICAgICAgICAgICAgICAgICAgICBKU0FNUEFSUkFZIGlucHV0X2RhdGEsIEpTQU1QQVJSQVkgb3V0cHV0X2RhdGEpCit7Cit9CisKK0dMT0JBTChpbnQpCitqc2ltZF9jYW5faDJ2Ml91cHNhbXBsZSAodm9pZCkKK3sKKyAgcmV0dXJuIDA7Cit9CisKK0dMT0JBTChpbnQpCitqc2ltZF9jYW5faDJ2MV91cHNhbXBsZSAodm9pZCkKK3sKKyAgcmV0dXJuIDA7Cit9CisKK0dMT0JBTCh2b2lkKQoranNpbWRfaDJ2Ml91cHNhbXBsZSAoal9kZWNvbXByZXNzX3B0ciBjaW5mbywKKyAgICAgICAgICAgICAgICAgICAgIGpwZWdfY29tcG9uZW50X2luZm8gKiBjb21wcHRyLCAKKyAgICAgICAgICAgICAgICAgICAgIEpTQU1QQVJSQVkgaW5wdXRfZGF0YSwKKyAgICAgICAgICAgICAgICAgICAgIEpTQU1QQVJSQVkgKiBvdXRwdXRfZGF0YV9wdHIpCit7Cit9CisKK0dMT0JBTCh2b2lkKQoranNpbWRfaDJ2MV91cHNhbXBsZSAoal9kZWNvbXByZXNzX3B0ciBjaW5mbywKKyAgICAgICAgICAgICAgICAgICAgIGpwZWdfY29tcG9uZW50X2luZm8gKiBjb21wcHRyLCAKKyAgICAgICAgICAgICAgICAgICAgIEpTQU1QQVJSQVkgaW5wdXRfZGF0YSwKKyAgICAgICAgICAgICAgICAgICAgIEpTQU1QQVJSQVkgKiBvdXRwdXRfZGF0YV9wdHIpCit7Cit9CisKK0dMT0JBTChpbnQpCitqc2ltZF9jYW5faDJ2Ml9mYW5jeV91cHNhbXBsZSAodm9pZCkKK3sKKyAgcmV0dXJuIDA7Cit9CisKK0dMT0JBTChpbnQpCitqc2ltZF9jYW5faDJ2MV9mYW5jeV91cHNhbXBsZSAodm9pZCkKK3sKKyAgcmV0dXJuIDA7Cit9CisKK0dMT0JBTCh2b2lkKQoranNpbWRfaDJ2Ml9mYW5jeV91cHNhbXBsZSAoal9kZWNvbXByZXNzX3B0ciBjaW5mbywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIGpwZWdfY29tcG9uZW50X2luZm8gKiBjb21wcHRyLCAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIEpTQU1QQVJSQVkgaW5wdXRfZGF0YSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIEpTQU1QQVJSQVkgKiBvdXRwdXRfZGF0YV9wdHIpCit7Cit9CisKK0dMT0JBTCh2b2lkKQoranNpbWRfaDJ2MV9mYW5jeV91cHNhbXBsZSAoal9kZWNvbXByZXNzX3B0ciBjaW5mbywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIGpwZWdfY29tcG9uZW50X2luZm8gKiBjb21wcHRyLCAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIEpTQU1QQVJSQVkgaW5wdXRfZGF0YSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIEpTQU1QQVJSQVkgKiBvdXRwdXRfZGF0YV9wdHIpCit7Cit9CisKK0dMT0JBTChpbnQpCitqc2ltZF9jYW5faDJ2Ml9tZXJnZWRfdXBzYW1wbGUgKHZvaWQpCit7CisgIHJldHVybiAwOworfQorCitHTE9CQUwoaW50KQoranNpbWRfY2FuX2gydjFfbWVyZ2VkX3Vwc2FtcGxlICh2b2lkKQoreworICByZXR1cm4gMDsKK30KKworR0xPQkFMKHZvaWQpCitqc2ltZF9oMnYyX21lcmdlZF91cHNhbXBsZSAoal9kZWNvbXByZXNzX3B0ciBjaW5mbywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBKU0FNUElNQUdFIGlucHV0X2J1ZiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBKRElNRU5TSU9OIGluX3Jvd19ncm91cF9jdHIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgSlNBTVBBUlJBWSBvdXRwdXRfYnVmKQoreworfQorCitHTE9CQUwodm9pZCkKK2pzaW1kX2gydjFfbWVyZ2VkX3Vwc2FtcGxlIChqX2RlY29tcHJlc3NfcHRyIGNpbmZvLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIEpTQU1QSU1BR0UgaW5wdXRfYnVmLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIEpESU1FTlNJT04gaW5fcm93X2dyb3VwX2N0ciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBKU0FNUEFSUkFZIG91dHB1dF9idWYpCit7Cit9CisKK0dMT0JBTChpbnQpCitqc2ltZF9jYW5fY29udnNhbXAgKHZvaWQpCit7CisgIHJldHVybiAwOworfQorCitHTE9CQUwoaW50KQoranNpbWRfY2FuX2NvbnZzYW1wX2Zsb2F0ICh2b2lkKQoreworICByZXR1cm4gMDsKK30KKworR0xPQkFMKHZvaWQpCitqc2ltZF9jb252c2FtcCAoSlNBTVBBUlJBWSBzYW1wbGVfZGF0YSwgSkRJTUVOU0lPTiBzdGFydF9jb2wsCisgICAgICAgICAgICAgICAgRENURUxFTSAqIHdvcmtzcGFjZSkKK3sKK30KKworR0xPQkFMKHZvaWQpCitqc2ltZF9jb252c2FtcF9mbG9hdCAoSlNBTVBBUlJBWSBzYW1wbGVfZGF0YSwgSkRJTUVOU0lPTiBzdGFydF9jb2wsCisgICAgICAgICAgICAgICAgICAgICAgRkFTVF9GTE9BVCAqIHdvcmtzcGFjZSkKK3sKK30KKworR0xPQkFMKGludCkKK2pzaW1kX2Nhbl9mZGN0X2lzbG93ICh2b2lkKQoreworICByZXR1cm4gMDsKK30KKworR0xPQkFMKGludCkKK2pzaW1kX2Nhbl9mZGN0X2lmYXN0ICh2b2lkKQoreworICByZXR1cm4gMDsKK30KKworR0xPQkFMKGludCkKK2pzaW1kX2Nhbl9mZGN0X2Zsb2F0ICh2b2lkKQoreworICByZXR1cm4gMDsKK30KKworR0xPQkFMKHZvaWQpCitqc2ltZF9mZGN0X2lzbG93IChEQ1RFTEVNICogZGF0YSkKK3sKK30KKworR0xPQkFMKHZvaWQpCitqc2ltZF9mZGN0X2lmYXN0IChEQ1RFTEVNICogZGF0YSkKK3sKK30KKworR0xPQkFMKHZvaWQpCitqc2ltZF9mZGN0X2Zsb2F0IChGQVNUX0ZMT0FUICogZGF0YSkKK3sKK30KKworR0xPQkFMKGludCkKK2pzaW1kX2Nhbl9xdWFudGl6ZSAodm9pZCkKK3sKKyAgcmV0dXJuIDA7Cit9CisKK0dMT0JBTChpbnQpCitqc2ltZF9jYW5fcXVhbnRpemVfZmxvYXQgKHZvaWQpCit7CisgIHJldHVybiAwOworfQorCitHTE9CQUwodm9pZCkKK2pzaW1kX3F1YW50aXplIChKQ09FRlBUUiBjb2VmX2Jsb2NrLCBEQ1RFTEVNICogZGl2aXNvcnMsCisgICAgICAgICAgICAgICAgRENURUxFTSAqIHdvcmtzcGFjZSkKK3sKK30KKworR0xPQkFMKHZvaWQpCitqc2ltZF9xdWFudGl6ZV9mbG9hdCAoSkNPRUZQVFIgY29lZl9ibG9jaywgRkFTVF9GTE9BVCAqIGRpdmlzb3JzLAorICAgICAgICAgICAgICAgICAgICAgIEZBU1RfRkxPQVQgKiB3b3Jrc3BhY2UpCit7Cit9CisKK0dMT0JBTChpbnQpCitqc2ltZF9jYW5faWRjdF8yeDIgKHZvaWQpCit7CisgIHJldHVybiAwOworfQorCitHTE9CQUwoaW50KQoranNpbWRfY2FuX2lkY3RfNHg0ICh2b2lkKQoreworICByZXR1cm4gMDsKK30KKworR0xPQkFMKHZvaWQpCitqc2ltZF9pZGN0XzJ4MiAoal9kZWNvbXByZXNzX3B0ciBjaW5mbywganBlZ19jb21wb25lbnRfaW5mbyAqIGNvbXBwdHIsCisgICAgICAgICAgICAgICAgSkNPRUZQVFIgY29lZl9ibG9jaywgSlNBTVBBUlJBWSBvdXRwdXRfYnVmLAorICAgICAgICAgICAgICAgIEpESU1FTlNJT04gb3V0cHV0X2NvbCkKK3sKK30KKworR0xPQkFMKHZvaWQpCitqc2ltZF9pZGN0XzR4NCAoal9kZWNvbXByZXNzX3B0ciBjaW5mbywganBlZ19jb21wb25lbnRfaW5mbyAqIGNvbXBwdHIsCisgICAgICAgICAgICAgICAgSkNPRUZQVFIgY29lZl9ibG9jaywgSlNBTVBBUlJBWSBvdXRwdXRfYnVmLAorICAgICAgICAgICAgICAgIEpESU1FTlNJT04gb3V0cHV0X2NvbCkKK3sKK30KKworR0xPQkFMKGludCkKK2pzaW1kX2Nhbl9pZGN0X2lzbG93ICh2b2lkKQoreworICByZXR1cm4gMDsKK30KKworR0xPQkFMKGludCkKK2pzaW1kX2Nhbl9pZGN0X2lmYXN0ICh2b2lkKQoreworICByZXR1cm4gMDsKK30KKworR0xPQkFMKGludCkKK2pzaW1kX2Nhbl9pZGN0X2Zsb2F0ICh2b2lkKQoreworICByZXR1cm4gMDsKK30KKworR0xPQkFMKHZvaWQpCitqc2ltZF9pZGN0X2lzbG93IChqX2RlY29tcHJlc3NfcHRyIGNpbmZvLCBqcGVnX2NvbXBvbmVudF9pbmZvICogY29tcHB0ciwKKyAgICAgICAgICAgICAgICBKQ09FRlBUUiBjb2VmX2Jsb2NrLCBKU0FNUEFSUkFZIG91dHB1dF9idWYsCisgICAgICAgICAgICAgICAgSkRJTUVOU0lPTiBvdXRwdXRfY29sKQoreworfQorCitHTE9CQUwodm9pZCkKK2pzaW1kX2lkY3RfaWZhc3QgKGpfZGVjb21wcmVzc19wdHIgY2luZm8sIGpwZWdfY29tcG9uZW50X2luZm8gKiBjb21wcHRyLAorICAgICAgICAgICAgICAgIEpDT0VGUFRSIGNvZWZfYmxvY2ssIEpTQU1QQVJSQVkgb3V0cHV0X2J1ZiwKKyAgICAgICAgICAgICAgICBKRElNRU5TSU9OIG91dHB1dF9jb2wpCit7Cit9CisKK0dMT0JBTCh2b2lkKQoranNpbWRfaWRjdF9mbG9hdCAoal9kZWNvbXByZXNzX3B0ciBjaW5mbywganBlZ19jb21wb25lbnRfaW5mbyAqIGNvbXBwdHIsCisgICAgICAgICAgICAgICAgSkNPRUZQVFIgY29lZl9ibG9jaywgSlNBTVBBUlJBWSBvdXRwdXRfYnVmLAorICAgICAgICAgICAgICAgIEpESU1FTlNJT04gb3V0cHV0X2NvbCkKK3sKK30KKwpkaWZmIC0tZ2l0IGEvanNpbWRkY3QuaCBiL2pzaW1kZGN0LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTFjNzQ0MAotLS0gL2Rldi9udWxsCisrKyBiL2pzaW1kZGN0LmgKQEAgLTAsMCArMSwxMDIgQEAKKy8qCisgKiBqc2ltZGRjdC5oCisgKgorICogQ29weXJpZ2h0IDIwMDkgUGllcnJlIE9zc21hbiA8b3NzbWFuQGNlbmRpby5zZT4gZm9yIENlbmRpbyBBQgorICogCisgKiBCYXNlZCBvbiB0aGUgeDg2IFNJTUQgZXh0ZW5zaW9uIGZvciBJSkcgSlBFRyBsaWJyYXJ5LAorICogQ29weXJpZ2h0IChDKSAxOTk5LTIwMDYsIE1JWUFTQUtBIE1hc2FydS4KKyAqIEZvciBjb25kaXRpb25zIG9mIGRpc3RyaWJ1dGlvbiBhbmQgdXNlLCBzZWUgY29weXJpZ2h0IG5vdGljZSBpbiBqc2ltZGV4dC5pbmMKKyAqCisgKi8KKworLyogU2hvcnQgZm9ybXMgb2YgZXh0ZXJuYWwgbmFtZXMgZm9yIHN5c3RlbXMgd2l0aCBicmFpbi1kYW1hZ2VkIGxpbmtlcnMuICovCisKKyNpZmRlZiBORUVEX1NIT1JUX0VYVEVSTkFMX05BTUVTCisjZGVmaW5lIGpzaW1kX2Nhbl9jb252c2FtcCAgICAgICAgICAgICAgICBqU0NhbkNvbnYKKyNkZWZpbmUganNpbWRfY2FuX2NvbnZzYW1wX2Zsb2F0ICAgICAgICAgIGpTQ2FuQ29udkYKKyNkZWZpbmUganNpbWRfY29udnNhbXAgICAgICAgICAgICAgICAgICAgIGpTQ29udgorI2RlZmluZSBqc2ltZF9jb252c2FtcF9mbG9hdCAgICAgICAgICAgICAgalNDb252RgorI2RlZmluZSBqc2ltZF9jYW5fZmRjdF9pc2xvdyAgICAgICAgICAgICAgalNDYW5GRENUSVMKKyNkZWZpbmUganNpbWRfY2FuX2ZkY3RfaWZhc3QgICAgICAgICAgICAgIGpTQ2FuRkRDVElGCisjZGVmaW5lIGpzaW1kX2Nhbl9mZGN0X2Zsb2F0ICAgICAgICAgICAgICBqU0NhbkZEQ1RGbAorI2RlZmluZSBqc2ltZF9mZGN0X2lzbG93ICAgICAgICAgICAgICAgICAgalNGRENUSVMKKyNkZWZpbmUganNpbWRfZmRjdF9pZmFzdCAgICAgICAgICAgICAgICAgIGpTRkRDVElGCisjZGVmaW5lIGpzaW1kX2ZkY3RfZmxvYXQgICAgICAgICAgICAgICAgICBqU0ZEQ1RGbAorI2RlZmluZSBqc2ltZF9jYW5fcXVhbnRpemUgICAgICAgICAgICAgICAgalNDYW5RdWFudAorI2RlZmluZSBqc2ltZF9jYW5fcXVhbnRpemVfZmxvYXQgICAgICAgICAgalNDYW5RdWFudEYKKyNkZWZpbmUganNpbWRfcXVhbnRpemUgICAgICAgICAgICAgICAgICAgIGpTUXVhbnQKKyNkZWZpbmUganNpbWRfcXVhbnRpemVfZmxvYXQgICAgICAgICAgICAgIGpTUXVhbnRGCisjZGVmaW5lIGpzaW1kX2Nhbl9pZGN0XzJ4MiAgICAgICAgICAgICAgICBqU0NhbklEQ1QyMgorI2RlZmluZSBqc2ltZF9jYW5faWRjdF80eDQgICAgICAgICAgICAgICAgalNDYW5JRENUNDQKKyNkZWZpbmUganNpbWRfaWRjdF8yeDIgICAgICAgICAgICAgICAgICAgIGpTSURDVDIyCisjZGVmaW5lIGpzaW1kX2lkY3RfNHg0ICAgICAgICAgICAgICAgICAgICBqU0lEQ1Q0NAorI2RlZmluZSBqc2ltZF9jYW5faWRjdF9pc2xvdyAgICAgICAgICAgICAgalNDYW5JRENUSVMKKyNkZWZpbmUganNpbWRfY2FuX2lkY3RfaWZhc3QgICAgICAgICAgICAgIGpTQ2FuSURDVElGCisjZGVmaW5lIGpzaW1kX2Nhbl9pZGN0X2Zsb2F0ICAgICAgICAgICAgICBqU0NhbklEQ1RGbAorI2RlZmluZSBqc2ltZF9pZGN0X2lzbG93ICAgICAgICAgICAgICAgICAgalNJRENUSVMKKyNkZWZpbmUganNpbWRfaWRjdF9pZmFzdCAgICAgICAgICAgICAgICAgIGpTSURDVElGCisjZGVmaW5lIGpzaW1kX2lkY3RfZmxvYXQgICAgICAgICAgICAgICAgICBqU0lEQ1RGbAorI2VuZGlmIC8qIE5FRURfU0hPUlRfRVhURVJOQUxfTkFNRVMgKi8KKworRVhURVJOKGludCkganNpbWRfY2FuX2NvbnZzYW1wIEpQUCgodm9pZCkpOworRVhURVJOKGludCkganNpbWRfY2FuX2NvbnZzYW1wX2Zsb2F0IEpQUCgodm9pZCkpOworCitFWFRFUk4odm9pZCkganNpbWRfY29udnNhbXAgSlBQKChKU0FNUEFSUkFZIHNhbXBsZV9kYXRhLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSkRJTUVOU0lPTiBzdGFydF9jb2wsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBEQ1RFTEVNICogd29ya3NwYWNlKSk7CitFWFRFUk4odm9pZCkganNpbWRfY29udnNhbXBfZmxvYXQgSlBQKChKU0FNUEFSUkFZIHNhbXBsZV9kYXRhLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSkRJTUVOU0lPTiBzdGFydF9jb2wsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGQVNUX0ZMT0FUICogd29ya3NwYWNlKSk7CisKK0VYVEVSTihpbnQpIGpzaW1kX2Nhbl9mZGN0X2lzbG93IEpQUCgodm9pZCkpOworRVhURVJOKGludCkganNpbWRfY2FuX2ZkY3RfaWZhc3QgSlBQKCh2b2lkKSk7CitFWFRFUk4oaW50KSBqc2ltZF9jYW5fZmRjdF9mbG9hdCBKUFAoKHZvaWQpKTsKKworRVhURVJOKHZvaWQpIGpzaW1kX2ZkY3RfaXNsb3cgSlBQKChEQ1RFTEVNICogZGF0YSkpOworRVhURVJOKHZvaWQpIGpzaW1kX2ZkY3RfaWZhc3QgSlBQKChEQ1RFTEVNICogZGF0YSkpOworRVhURVJOKHZvaWQpIGpzaW1kX2ZkY3RfZmxvYXQgSlBQKChGQVNUX0ZMT0FUICogZGF0YSkpOworCitFWFRFUk4oaW50KSBqc2ltZF9jYW5fcXVhbnRpemUgSlBQKCh2b2lkKSk7CitFWFRFUk4oaW50KSBqc2ltZF9jYW5fcXVhbnRpemVfZmxvYXQgSlBQKCh2b2lkKSk7CisKK0VYVEVSTih2b2lkKSBqc2ltZF9xdWFudGl6ZSBKUFAoKEpDT0VGUFRSIGNvZWZfYmxvY2ssCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBEQ1RFTEVNICogZGl2aXNvcnMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBEQ1RFTEVNICogd29ya3NwYWNlKSk7CitFWFRFUk4odm9pZCkganNpbWRfcXVhbnRpemVfZmxvYXQgSlBQKChKQ09FRlBUUiBjb2VmX2Jsb2NrLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRkFTVF9GTE9BVCAqIGRpdmlzb3JzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRkFTVF9GTE9BVCAqIHdvcmtzcGFjZSkpOworCitFWFRFUk4oaW50KSBqc2ltZF9jYW5faWRjdF8yeDIgSlBQKCh2b2lkKSk7CitFWFRFUk4oaW50KSBqc2ltZF9jYW5faWRjdF80eDQgSlBQKCh2b2lkKSk7CisKK0VYVEVSTih2b2lkKSBqc2ltZF9pZGN0XzJ4MiBKUFAoKGpfZGVjb21wcmVzc19wdHIgY2luZm8sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBqcGVnX2NvbXBvbmVudF9pbmZvICogY29tcHB0ciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEpDT0VGUFRSIGNvZWZfYmxvY2ssCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBKU0FNUEFSUkFZIG91dHB1dF9idWYsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBKRElNRU5TSU9OIG91dHB1dF9jb2wpKTsKK0VYVEVSTih2b2lkKSBqc2ltZF9pZGN0XzR4NCBKUFAoKGpfZGVjb21wcmVzc19wdHIgY2luZm8sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBqcGVnX2NvbXBvbmVudF9pbmZvICogY29tcHB0ciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEpDT0VGUFRSIGNvZWZfYmxvY2ssCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBKU0FNUEFSUkFZIG91dHB1dF9idWYsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBKRElNRU5TSU9OIG91dHB1dF9jb2wpKTsKKworRVhURVJOKGludCkganNpbWRfY2FuX2lkY3RfaXNsb3cgSlBQKCh2b2lkKSk7CitFWFRFUk4oaW50KSBqc2ltZF9jYW5faWRjdF9pZmFzdCBKUFAoKHZvaWQpKTsKK0VYVEVSTihpbnQpIGpzaW1kX2Nhbl9pZGN0X2Zsb2F0IEpQUCgodm9pZCkpOworCitFWFRFUk4odm9pZCkganNpbWRfaWRjdF9pc2xvdyBKUFAoKGpfZGVjb21wcmVzc19wdHIgY2luZm8sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGpwZWdfY29tcG9uZW50X2luZm8gKiBjb21wcHRyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBKQ09FRlBUUiBjb2VmX2Jsb2NrLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBKU0FNUEFSUkFZIG91dHB1dF9idWYsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEpESU1FTlNJT04gb3V0cHV0X2NvbCkpOworRVhURVJOKHZvaWQpIGpzaW1kX2lkY3RfaWZhc3QgSlBQKChqX2RlY29tcHJlc3NfcHRyIGNpbmZvLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBqcGVnX2NvbXBvbmVudF9pbmZvICogY29tcHB0ciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSkNPRUZQVFIgY29lZl9ibG9jaywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSlNBTVBBUlJBWSBvdXRwdXRfYnVmLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBKRElNRU5TSU9OIG91dHB1dF9jb2wpKTsKK0VYVEVSTih2b2lkKSBqc2ltZF9pZGN0X2Zsb2F0IEpQUCgoal9kZWNvbXByZXNzX3B0ciBjaW5mbywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAganBlZ19jb21wb25lbnRfaW5mbyAqIGNvbXBwdHIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEpDT0VGUFRSIGNvZWZfYmxvY2ssCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEpTQU1QQVJSQVkgb3V0cHV0X2J1ZiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSkRJTUVOU0lPTiBvdXRwdXRfY29sKSk7CisKZGlmZiAtLWdpdCBhL2p1dGlscy5jIGIvanV0aWxzLmMKaW5kZXggMDQzNTE3OS4uZDE4YTk1NSAxMDA2NDQKLS0tIGEvanV0aWxzLmMKKysrIGIvanV0aWxzLmMKQEAgLTIsNyArMiw2IEBACiAgKiBqdXRpbHMuYwogICoKICAqIENvcHlyaWdodCAoQykgMTk5MS0xOTk2LCBUaG9tYXMgRy4gTGFuZS4KLSAqIE1vZGlmaWVkIDIwMDkgYnkgR3VpZG8gVm9sbGJlZGluZy4KICAqIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBJbmRlcGVuZGVudCBKUEVHIEdyb3VwJ3Mgc29mdHdhcmUuCiAgKiBGb3IgY29uZGl0aW9ucyBvZiBkaXN0cmlidXRpb24gYW5kIHVzZSwgc2VlIHRoZSBhY2NvbXBhbnlpbmcgUkVBRE1FIGZpbGUuCiAgKgpAQCAtNjQsNTcgKzYzLDYgQEAKICA2MywgNjMsIDYzLCA2MywgNjMsIDYzLCA2MywgNjMKIH07CiAKLWNvbnN0IGludCBqcGVnX25hdHVyYWxfb3JkZXI3WzcqNysxNl0gPSB7Ci0gIDAsICAxLCAgOCwgMTYsICA5LCAgMiwgIDMsIDEwLAotIDE3LCAyNCwgMzIsIDI1LCAxOCwgMTEsICA0LCAgNSwKLSAxMiwgMTksIDI2LCAzMywgNDAsIDQ4LCA0MSwgMzQsCi0gMjcsIDIwLCAxMywgIDYsIDE0LCAyMSwgMjgsIDM1LAotIDQyLCA0OSwgNTAsIDQzLCAzNiwgMjksIDIyLCAzMCwKLSAzNywgNDQsIDUxLCA1MiwgNDUsIDM4LCA0NiwgNTMsCi0gNTQsCi0gNjMsIDYzLCA2MywgNjMsIDYzLCA2MywgNjMsIDYzLCAvKiBleHRyYSBlbnRyaWVzIGZvciBzYWZldHkgaW4gZGVjb2RlciAqLwotIDYzLCA2MywgNjMsIDYzLCA2MywgNjMsIDYzLCA2MwotfTsKLQotY29uc3QgaW50IGpwZWdfbmF0dXJhbF9vcmRlcjZbNio2KzE2XSA9IHsKLSAgMCwgIDEsICA4LCAxNiwgIDksICAyLCAgMywgMTAsCi0gMTcsIDI0LCAzMiwgMjUsIDE4LCAxMSwgIDQsICA1LAotIDEyLCAxOSwgMjYsIDMzLCA0MCwgNDEsIDM0LCAyNywKLSAyMCwgMTMsIDIxLCAyOCwgMzUsIDQyLCA0MywgMzYsCi0gMjksIDM3LCA0NCwgNDUsCi0gNjMsIDYzLCA2MywgNjMsIDYzLCA2MywgNjMsIDYzLCAvKiBleHRyYSBlbnRyaWVzIGZvciBzYWZldHkgaW4gZGVjb2RlciAqLwotIDYzLCA2MywgNjMsIDYzLCA2MywgNjMsIDYzLCA2MwotfTsKLQotY29uc3QgaW50IGpwZWdfbmF0dXJhbF9vcmRlcjVbNSo1KzE2XSA9IHsKLSAgMCwgIDEsICA4LCAxNiwgIDksICAyLCAgMywgMTAsCi0gMTcsIDI0LCAzMiwgMjUsIDE4LCAxMSwgIDQsIDEyLAotIDE5LCAyNiwgMzMsIDM0LCAyNywgMjAsIDI4LCAzNSwKLSAzNiwKLSA2MywgNjMsIDYzLCA2MywgNjMsIDYzLCA2MywgNjMsIC8qIGV4dHJhIGVudHJpZXMgZm9yIHNhZmV0eSBpbiBkZWNvZGVyICovCi0gNjMsIDYzLCA2MywgNjMsIDYzLCA2MywgNjMsIDYzCi19OwotCi1jb25zdCBpbnQganBlZ19uYXR1cmFsX29yZGVyNFs0KjQrMTZdID0gewotICAwLCAgMSwgIDgsIDE2LCAgOSwgIDIsICAzLCAxMCwKLSAxNywgMjQsIDI1LCAxOCwgMTEsIDE5LCAyNiwgMjcsCi0gNjMsIDYzLCA2MywgNjMsIDYzLCA2MywgNjMsIDYzLCAvKiBleHRyYSBlbnRyaWVzIGZvciBzYWZldHkgaW4gZGVjb2RlciAqLwotIDYzLCA2MywgNjMsIDYzLCA2MywgNjMsIDYzLCA2MwotfTsKLQotY29uc3QgaW50IGpwZWdfbmF0dXJhbF9vcmRlcjNbMyozKzE2XSA9IHsKLSAgMCwgIDEsICA4LCAxNiwgIDksICAyLCAxMCwgMTcsCi0gMTgsCi0gNjMsIDYzLCA2MywgNjMsIDYzLCA2MywgNjMsIDYzLCAvKiBleHRyYSBlbnRyaWVzIGZvciBzYWZldHkgaW4gZGVjb2RlciAqLwotIDYzLCA2MywgNjMsIDYzLCA2MywgNjMsIDYzLCA2MwotfTsKLQotY29uc3QgaW50IGpwZWdfbmF0dXJhbF9vcmRlcjJbMioyKzE2XSA9IHsKLSAgMCwgIDEsICA4LCAgOSwKLSA2MywgNjMsIDYzLCA2MywgNjMsIDYzLCA2MywgNjMsIC8qIGV4dHJhIGVudHJpZXMgZm9yIHNhZmV0eSBpbiBkZWNvZGVyICovCi0gNjMsIDYzLCA2MywgNjMsIDYzLCA2MywgNjMsIDYzCi19OwotCiAKIC8qCiAgKiBBcml0aG1ldGljIHV0aWxpdGllcwpkaWZmIC0tZ2l0IGEvanZlcnNpb24uaCBiL2p2ZXJzaW9uLmgKaW5kZXggZTg2ODUzOC4uMTE5YzQ4MSAxMDA2NDQKLS0tIGEvanZlcnNpb24uaAorKysgYi9qdmVyc2lvbi5oCkBAIC0xLDcgKzEsOCBAQAogLyoKICAqIGp2ZXJzaW9uLmgKICAqCi0gKiBDb3B5cmlnaHQgKEMpIDE5OTEtMjAxMSwgVGhvbWFzIEcuIExhbmUsIEd1aWRvIFZvbGxiZWRpbmcuCisgKiBDb3B5cmlnaHQgKEMpIDE5OTEtMjAxMCwgVGhvbWFzIEcuIExhbmUsIEd1aWRvIFZvbGxiZWRpbmcuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTAsIEQuIFIuIENvbW1hbmRlci4KICAqIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBJbmRlcGVuZGVudCBKUEVHIEdyb3VwJ3Mgc29mdHdhcmUuCiAgKiBGb3IgY29uZGl0aW9ucyBvZiBkaXN0cmlidXRpb24gYW5kIHVzZSwgc2VlIHRoZSBhY2NvbXBhbnlpbmcgUkVBRE1FIGZpbGUuCiAgKgpAQCAtOSw2ICsxMCwyOCBAQAogICovCiAKIAotI2RlZmluZSBKVkVSU0lPTgkiOGMgIDE2LUphbi0yMDExIgorI2lmIEpQRUdfTElCX1ZFUlNJT04gPj0gODAKIAotI2RlZmluZSBKQ09QWVJJR0hUCSJDb3B5cmlnaHQgKEMpIDIwMTEsIFRob21hcyBHLiBMYW5lLCBHdWlkbyBWb2xsYmVkaW5nIgorI2RlZmluZSBKVkVSU0lPTgkiOGIgIDE2LU1heS0yMDEwIgorCisjZGVmaW5lIEpDT1BZUklHSFQJIkNvcHlyaWdodCAoQykgMjAxMCwgVGhvbWFzIEcuIExhbmUsIEd1aWRvIFZvbGxiZWRpbmciCisKKyNlbGlmIEpQRUdfTElCX1ZFUlNJT04gPj0gNzAKKworI2RlZmluZSBKVkVSU0lPTiAgICAgICAgIjcgIDI3LUp1bi0yMDA5IgorCisjZGVmaW5lIEpDT1BZUklHSFQgICAgICAiQ29weXJpZ2h0IChDKSAyMDA5LCBUaG9tYXMgRy4gTGFuZSwgR3VpZG8gVm9sbGJlZGluZyIKKworI2Vsc2UKKworI2RlZmluZSBKVkVSU0lPTgkiNmIgIDI3LU1hci0xOTk4IgorCisjZGVmaW5lIEpDT1BZUklHSFQJIkNvcHlyaWdodCAoQykgMTk5OCwgVGhvbWFzIEcuIExhbmUiCisKKyNlbmRpZgorCisjZGVmaW5lIExKVENPUFlSSUdIVAkiQ29weXJpZ2h0IChDKSAxOTk5LTIwMDYgTUlZQVNBS0EgTWFzYXJ1XG4iIFwKKwkJCSJDb3B5cmlnaHQgKEMpIDIwMDQgTGFuZG1hcmsgR3JhcGhpY3MgQ29ycG9yYXRpb25cbiIgXAorCQkJIkNvcHlyaWdodCAoQykgMjAwNS0yMDA3IFN1biBNaWNyb3N5c3RlbXMsIEluYy5cbiIgXAorCQkJIkNvcHlyaWdodCAoQykgMjAwOSBQaWVycmUgT3NzbWFuIGZvciBDZW5kaW8gQUJcbiIgXAorCQkJIkNvcHlyaWdodCAoQykgMjAwOS0yMDExIEQuIFIuIENvbW1hbmRlciIKZGlmZiAtLWdpdCBhL2xpYmpwZWcubWFwIGIvbGlianBlZy5tYXAKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGFjNzdkY2EuLjAwMDAwMDAKLS0tIGEvbGlianBlZy5tYXAKKysrIC9kZXYvbnVsbApAQCAtMSw0ICswLDAgQEAKLUxJQkpQRUdfOC4wIHsKLSAgZ2xvYmFsOgotICAgICo7Ci19OwpkaWZmIC0tZ2l0IGEvbGlianBlZy5tYXAuaW4gYi9saWJqcGVnLm1hcC5pbgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41NDQzOTQzCi0tLSAvZGV2L251bGwKKysrIGIvbGlianBlZy5tYXAuaW4KQEAgLTAsMCArMSwxMCBAQAorTElCSlBFR1RVUkJPX0BKUEVHX0xJQl9WRVJTSU9OX0RFQ0lNQUxAIHsKKyAgbG9jYWw6CisgICAganNpbWRfKjsKKyAgICBqY29uc3RfKjsKK307CisKK0xJQkpQRUdfQEpQRUdfTElCX1ZFUlNJT05fREVDSU1BTEAgeworICBnbG9iYWw6CisgICAgKjsKK307CmRpZmYgLS1naXQgYS9saWJqcGVnLnR4dCBiL2xpYmpwZWcudHh0CmluZGV4IDJkOThlMjIuLjE5MWIzNWUgMTAwNjQ0Ci0tLSBhL2xpYmpwZWcudHh0CisrKyBiL2xpYmpwZWcudHh0CkBAIC0xLDYgKzEsNiBAQAogVVNJTkcgVEhFIElKRyBKUEVHIExJQlJBUlkKIAotQ29weXJpZ2h0IChDKSAxOTk0LTIwMTAsIFRob21hcyBHLiBMYW5lLCBHdWlkbyBWb2xsYmVkaW5nLgorQ29weXJpZ2h0IChDKSAxOTk0LTIwMTAsIFRob21hcyBHLiBMYW5lLCBHdWlkbyBWb2xsYmVkaW5nLCBELiBSLiBDb21tYW5kZXIuCiBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgSW5kZXBlbmRlbnQgSlBFRyBHcm91cCdzIHNvZnR3YXJlLgogRm9yIGNvbmRpdGlvbnMgb2YgZGlzdHJpYnV0aW9uIGFuZCB1c2UsIHNlZSB0aGUgYWNjb21wYW55aW5nIFJFQURNRSBmaWxlLgogCkBAIC04NTAsOCArODUwLDggQEAKIAlwcmVtaXNlIG9mIHRoaXMgcm91dGluZSBjb2xsYXBzZXMuICBDYXZlYXQgdXNlci4KIAoganBlZ19kZWZhdWx0X3F0YWJsZXMgKGpfY29tcHJlc3NfcHRyIGNpbmZvLCBib29sZWFuIGZvcmNlX2Jhc2VsaW5lKQotCVNldCBkZWZhdWx0IHF1YW50aXphdGlvbiB0YWJsZXMgd2l0aCBsaW5lYXIgcV9zY2FsZV9mYWN0b3JbXSB2YWx1ZXMKLQkoc2VlIGJlbG93KS4KKwlbbGlianBlZyB2Ny92OCBvbmx5XSBTZXQgZGVmYXVsdCBxdWFudGl6YXRpb24gdGFibGVzIHdpdGggbGluZWFyCisJcV9zY2FsZV9mYWN0b3JbXSB2YWx1ZXMgKHNlZSBiZWxvdykuCiAKIGpwZWdfYWRkX3F1YW50X3RhYmxlIChqX2NvbXByZXNzX3B0ciBjaW5mbywgaW50IHdoaWNoX3RibCwKIAkJICAgICAgY29uc3QgdW5zaWduZWQgaW50ICpiYXNpY190YWJsZSwKQEAgLTg3NiwxOCArODc2LDYgQEAKIAogQ29tcHJlc3Npb24gcGFyYW1ldGVycyAoY2luZm8gZmllbGRzKSBpbmNsdWRlOgogCi1pbnQgYmxvY2tfc2l6ZQotCVNldCBEQ1QgYmxvY2sgc2l6ZS4gIEFsbCBOIGZyb20gMSB0byAxNiBhcmUgcG9zc2libGUuCi0JRGVmYXVsdCBpcyA4IChiYXNlbGluZSBmb3JtYXQpLgotCUxhcmdlciB2YWx1ZXMgcHJvZHVjZSBoaWdoZXIgY29tcHJlc3Npb24sCi0Jc21hbGxlciB2YWx1ZXMgcHJvZHVjZSBoaWdoZXIgcXVhbGl0eS4KLQlBbiBleGFjdCBEQ1Qgc3RhZ2UgaXMgcG9zc2libGUgd2l0aCAxIG9yIDIuCi0JV2l0aCB0aGUgZGVmYXVsdCBxdWFsaXR5IG9mIDc1IGFuZCBkZWZhdWx0IEx1bWluYW5jZSBxdGFibGUKLQl0aGUgRENUK1F1YW50aXphdGlvbiBzdGFnZSBpcyBsb3NzbGVzcyBmb3IgdmFsdWUgMS4KLQlOb3RlIHRoYXQgdmFsdWVzIG90aGVyIHRoYW4gOCByZXF1aXJlIGEgU21hcnRTY2FsZSBjYXBhYmxlIGRlY29kZXIsCi0JaW50cm9kdWNlZCB3aXRoIElKRyBKUEVHIDguICBTZXR0aW5nIHRoZSBibG9ja19zaXplIHBhcmFtZXRlciBmb3IKLQljb21wcmVzc2lvbiB3b3JrcyB3aXRoIHZlcnNpb24gOGMgYW5kIGxhdGVyLgotCiBKX0RDVF9NRVRIT0QgZGN0X21ldGhvZAogCVNlbGVjdHMgdGhlIGFsZ29yaXRobSB1c2VkIGZvciB0aGUgRENUIHN0ZXAuICBDaG9pY2VzIGFyZToKIAkJSkRDVF9JU0xPVzogc2xvdyBidXQgYWNjdXJhdGUgaW50ZWdlciBhbGdvcml0aG0KQEAgLTkwNCwxNCArODkyLDYgQEAKIAlyZWNvbW1lbmRlZCBpZiBoaWdoIHF1YWxpdHkgaXMgYSBjb25jZXJuLiAgSkRDVF9ERUZBVUxUIGFuZAogCUpEQ1RfRkFTVEVTVCBhcmUgbWFjcm9zIGNvbmZpZ3VyYWJsZSBieSBlYWNoIGluc3RhbGxhdGlvbi4KIAotdW5zaWduZWQgaW50IHNjYWxlX251bSwgc2NhbGVfZGVub20KLQlTY2FsZSB0aGUgaW1hZ2UgYnkgdGhlIGZyYWN0aW9uIHNjYWxlX251bS9zY2FsZV9kZW5vbS4gIERlZmF1bHQgaXMKLQkxLzEsIG9yIG5vIHNjYWxpbmcuICBDdXJyZW50bHksIHRoZSBzdXBwb3J0ZWQgc2NhbGluZyByYXRpb3MgYXJlCi0JTS9OIHdpdGggYWxsIE4gZnJvbSAxIHRvIDE2LCB3aGVyZSBNIGlzIHRoZSBkZXN0aW5hdGlvbiBEQ1Qgc2l6ZSwKLQl3aGljaCBpcyA4IGJ5IGRlZmF1bHQgKHNlZSBibG9ja19zaXplIHBhcmFtZXRlciBhYm92ZSkuCi0JKFRoZSBsaWJyYXJ5IGRlc2lnbiBhbGxvd3MgZm9yIGFyYml0cmFyeSBzY2FsaW5nIHJhdGlvcyBidXQgdGhpcwotCWlzIG5vdCBsaWtlbHkgdG8gYmUgaW1wbGVtZW50ZWQgYW55IHRpbWUgc29vbi4pCi0KIEpfQ09MT1JfU1BBQ0UganBlZ19jb2xvcl9zcGFjZQogaW50IG51bV9jb21wb25lbnRzCiAJVGhlIEpQRUcgY29sb3Igc3BhY2UgYW5kIGNvcnJlc3BvbmRpbmcgbnVtYmVyIG9mIGNvbXBvbmVudHM7IHNlZQpAQCAtOTUzLDE1ICs5MzMsNiBAQAogCWEgc3VpdGFibGUgc2NhbiBkZWZpbml0aW9uIGFycmF5IGZvciBwcm9ncmVzc2l2ZSBKUEVHLikgIFRoaXMgaXMKIAlkaXNjdXNzZWQgZnVydGhlciB1bmRlciAiUHJvZ3Jlc3NpdmUgSlBFRyBzdXBwb3J0Ii4KIAotYm9vbGVhbiBkb19mYW5jeV9kb3duc2FtcGxpbmcKLQlJZiBUUlVFLCB1c2UgZGlyZWN0IERDVCBzY2FsaW5nIHdpdGggRENUIHNpemUgPiA4IGZvciBkb3duc2FtcGxpbmcKLQlvZiBjaHJvbWEgY29tcG9uZW50cy4KLQlJZiBGQUxTRSwgdXNlIG9ubHkgRENUIHNpemUgPD0gOCBhbmQgc2ltcGxlIHNlcGFyYXRlIGRvd25zYW1wbGluZy4KLQlEZWZhdWx0IGlzIFRSVUUuCi0JRm9yIGJldHRlciBpbWFnZSBzdGFiaWxpdHkgaW4gbXVsdGlwbGUgZ2VuZXJhdGlvbiBjb21wcmVzc2lvbiBjeWNsZXMKLQlpdCBpcyBwcmVmZXJhYmxlIHRoYXQgdGhpcyB2YWx1ZSBtYXRjaGVzIHRoZSBjb3JyZXNwb25kaW5nCi0JZG9fZmFuY3lfdXBzYW1wbGluZyB2YWx1ZSBpbiBkZWNvbXByZXNzaW9uLgotCiBpbnQgc21vb3RoaW5nX2ZhY3RvcgogCUlmIG5vbi16ZXJvLCB0aGUgaW5wdXQgaW1hZ2UgaXMgc21vb3RoZWQ7IHRoZSB2YWx1ZSBzaG91bGQgYmUgMSBmb3IKIAltaW5pbWFsIHNtb290aGluZyB0byAxMDAgZm9yIG1heGltdW0gc21vb3RoaW5nLiAgQ29uc3VsdCBqY3NhbXBsZS5jCkBAIC0xMDA1LDEyICs5NzYsMTMgQEAKIAlzbG90IDEgZm9yIGNocm9taW5hbmNlLgogCiBpbnQgcV9zY2FsZV9mYWN0b3JbTlVNX1FVQU5UX1RCTFNdCi0JTGluZWFyIHF1YW50aXphdGlvbiBzY2FsaW5nIGZhY3RvcnMgKHBlcmNlbnRhZ2UsIGluaXRpYWxpemVkIDEwMCkKLQlmb3IgdXNlIHdpdGgganBlZ19kZWZhdWx0X3F0YWJsZXMoKS4KKwlbbGlianBlZyB2Nysgb25seV0gTGluZWFyIHF1YW50aXphdGlvbiBzY2FsaW5nIGZhY3RvcnMgKDAtMTAwLCBkZWZhdWx0CisJMTAwKSBmb3IgdXNlIHdpdGgganBlZ19kZWZhdWx0X3F0YWJsZXMoKS4KIAlTZWUgcmRzd2l0Y2guYyBhbmQgY2pwZWcuYyBmb3IgYW4gZXhhbXBsZSBvZiB1c2FnZS4KLQlOb3RlIHRoYXQgdGhlIHFfc2NhbGVfZmFjdG9yW10gZmllbGRzIGFyZSB0aGUgImxpbmVhciIgc2NhbGVzLCBzbyB5b3UKLQloYXZlIHRvIGNvbnZlcnQgZnJvbSB1c2VyLWRlZmluZWQgcmF0aW5ncyB2aWEganBlZ19xdWFsaXR5X3NjYWxpbmcoKS4KLQlIZXJlIGlzIGFuIGV4YW1wbGUgY29kZSB3aGljaCBjb3JyZXNwb25kcyB0byBjanBlZyAtcXVhbGl0eSA5MCw3MDoKKwlOb3RlIHRoYXQgdGhlIHFfc2NhbGVfZmFjdG9yW10gdmFsdWVzIHVzZSAibGluZWFyIiBzY2FsZXMsIHNvIEpQRUcKKwlxdWFsaXR5IGxldmVscyBjaG9zZW4gYnkgdGhlIHVzZXIgbXVzdCBiZSBjb252ZXJ0ZWQgdG8gdGhlc2Ugc2NhbGVzCisJdXNpbmcganBlZ19xdWFsaXR5X3NjYWxpbmcoKS4gIEhlcmUgaXMgYW4gZXhhbXBsZSB3aGljaCBjb3JyZXNwb25kcyB0bworCWNqcGVnIC1xdWFsaXR5IDkwLDcwOgogCiAJCWpwZWdfc2V0X2RlZmF1bHRzKGNpbmZvKTsKIApAQCAtMTAyMSw5ICs5OTMsMTAgQEAKIAogCQlqcGVnX2RlZmF1bHRfcXRhYmxlcyhjaW5mbywgZm9yY2VfYmFzZWxpbmUpOwogCi0JQ0FVVElPTjogWW91IG11c3QgYWxzbyBzZXQgMXgxIHN1YnNhbXBsaW5nIGZvciBlZmZpY2llbnQgc2VwYXJhdGUKLQljb2xvciBxdWFsaXR5IHNlbGVjdGlvbiwgc2luY2UgdGhlIGRlZmF1bHQgdmFsdWUgdXNlZCBieSBsaWJyYXJ5Ci0JaXMgMngyOgorCUNBVVRJT046IFNldHRpbmcgc2VwYXJhdGUgcXVhbGl0eSBsZXZlbHMgZm9yIGNocm9taW5hbmNlIGFuZCBsdW1pbmFuY2UKKwlpcyBtYWlubHkgb25seSB1c2VmdWwgaWYgY2hyb21pbmFuY2Ugc3Vic2FtcGxpbmcgaXMgZGlzYWJsZWQuICAyeDIKKwljaHJvbWluYW5jZSBzdWJzYW1wbGluZyAoQUtBICI0OjI6MCIpIGlzIHRoZSBkZWZhdWx0LCBidXQgeW91IGNhbgorCWV4cGxpY2l0bHkgZGlzYWJsZSBzdWJzYW1wbGluZyBhcyBmb2xsb3dzOgogCiAJCWNpbmZvLT5jb21wX2luZm9bMF0udl9zYW1wX2ZhY3RvciA9IDE7CiAJCWNpbmZvLT5jb21wX2luZm9bMF0uaF9zYW1wX2ZhY3RvciA9IDE7CkBAIC0xMDM5LDEyICsxMDEyLDExIEBACiAJYW55IG5lZWQgdG8gbWVzcyB3aXRoIHByb3ZpZGluZyB5b3VyIG93biBIdWZmbWFuIHRhYmxlcy4KIAogCi1UaGUgYWN0dWFsIGRpbWVuc2lvbnMgb2YgdGhlIEpQRUcgaW1hZ2UgdGhhdCB3aWxsIGJlIHdyaXR0ZW4gdG8gdGhlIGZpbGUgYXJlCi1naXZlbiBieSB0aGUgZm9sbG93aW5nIGZpZWxkcy4gIFRoZXNlIGFyZSBjb21wdXRlZCBmcm9tIHRoZSBpbnB1dCBpbWFnZQotZGltZW5zaW9ucyBhbmQgdGhlIGNvbXByZXNzaW9uIHBhcmFtZXRlcnMgYnkganBlZ19zdGFydF9jb21wcmVzcygpLiAgWW91IGNhbgotYWxzbyBjYWxsIGpwZWdfY2FsY19qcGVnX2RpbWVuc2lvbnMoKSB0byBvYnRhaW4gdGhlIHZhbHVlcyB0aGF0IHdpbGwgcmVzdWx0Ci1mcm9tIHRoZSBjdXJyZW50IHBhcmFtZXRlciBzZXR0aW5ncy4gIFRoaXMgY2FuIGJlIHVzZWZ1bCBpZiB5b3UgYXJlIHRyeWluZwotdG8gcGljayBhIHNjYWxpbmcgcmF0aW8gdGhhdCB3aWxsIGdldCBjbG9zZSB0byBhIGRlc2lyZWQgdGFyZ2V0IHNpemUuCitbbGlianBlZyB2Nysgb25seV0gVGhlIGFjdHVhbCBkaW1lbnNpb25zIG9mIHRoZSBKUEVHIGltYWdlIHRoYXQgd2lsbCBiZSB3cml0dGVuCit0byB0aGUgZmlsZSBhcmUgZ2l2ZW4gYnkgdGhlIGZvbGxvd2luZyBmaWVsZHMuICBUaGVzZSBhcmUgY29tcHV0ZWQgZnJvbSB0aGUKK2lucHV0IGltYWdlIGRpbWVuc2lvbnMgYW5kIHRoZSBjb21wcmVzc2lvbiBwYXJhbWV0ZXJzIGJ5IGpwZWdfc3RhcnRfY29tcHJlc3MoKS4KK1lvdSBjYW4gYWxzbyBjYWxsIGpwZWdfY2FsY19qcGVnX2RpbWVuc2lvbnMoKSB0byBvYnRhaW4gdGhlIHZhbHVlcyB0aGF0IHdpbGwKK3Jlc3VsdCBmcm9tIHRoZSBjdXJyZW50IHBhcmFtZXRlciBzZXR0aW5ncy4KIAogSkRJTUVOU0lPTiBqcGVnX3dpZHRoCQlBY3R1YWwgZGltZW5zaW9ucyBvZiBvdXRwdXQgaW1hZ2UuCiBKRElNRU5TSU9OIGpwZWdfaGVpZ2h0CkBAIC0xMTM2LDE2ICsxMTA4LDEwIEBACiAJdW51c3VhbCBjb252ZXJzaW9uLgogCiB1bnNpZ25lZCBpbnQgc2NhbGVfbnVtLCBzY2FsZV9kZW5vbQotCVNjYWxlIHRoZSBpbWFnZSBieSB0aGUgZnJhY3Rpb24gc2NhbGVfbnVtL3NjYWxlX2Rlbm9tLiAgQ3VycmVudGx5LAotCXRoZSBzdXBwb3J0ZWQgc2NhbGluZyByYXRpb3MgYXJlIE0vTiB3aXRoIGFsbCBNIGZyb20gMSB0byAxNiwgd2hlcmUKLQlOIGlzIHRoZSBzb3VyY2UgRENUIHNpemUsIHdoaWNoIGlzIDggZm9yIGJhc2VsaW5lIEpQRUcuICAoVGhlIGxpYnJhcnkKLQlkZXNpZ24gYWxsb3dzIGZvciBhcmJpdHJhcnkgc2NhbGluZyByYXRpb3MgYnV0IHRoaXMgaXMgbm90IGxpa2VseQotCXRvIGJlIGltcGxlbWVudGVkIGFueSB0aW1lIHNvb24uKSAgVGhlIHZhbHVlcyBhcmUgaW5pdGlhbGl6ZWQgYnkKLQlqcGVnX3JlYWRfaGVhZGVyKCkgd2l0aCB0aGUgc291cmNlIERDVCBzaXplLiAgRm9yIGJhc2VsaW5lIEpQRUcKLQl0aGlzIGlzIDgvOC4gIElmIHlvdSBjaGFuZ2Ugb25seSB0aGUgc2NhbGVfbnVtIHZhbHVlIHdoaWxlIGxlYXZpbmcKLQl0aGUgb3RoZXIgdW5jaGFuZ2VkLCB0aGVuIHRoaXMgc3BlY2lmaWVzIHRoZSBEQ1Qgc2NhbGVkIHNpemUgdG8gYmUKLQlhcHBsaWVkIG9uIHRoZSBnaXZlbiBpbnB1dC4gIEZvciBiYXNlbGluZSBKUEVHIHRoaXMgaXMgZXF1aXZhbGVudAotCXRvIE0vOCBzY2FsaW5nLCBzaW5jZSB0aGUgc291cmNlIERDVCBzaXplIGZvciBiYXNlbGluZSBKUEVHIGlzIDguCisJU2NhbGUgdGhlIGltYWdlIGJ5IHRoZSBmcmFjdGlvbiBzY2FsZV9udW0vc2NhbGVfZGVub20uICBEZWZhdWx0IGlzCisJMS8xLCBvciBubyBzY2FsaW5nLiAgQ3VycmVudGx5LCB0aGUgb25seSBzdXBwb3J0ZWQgc2NhbGluZyByYXRpb3MKKwlhcmUgMS8xLCAxLzIsIDEvNCwgYW5kIDEvOC4gIChUaGUgbGlicmFyeSBkZXNpZ24gYWxsb3dzIGZvciBhcmJpdHJhcnkKKwlzY2FsaW5nIHJhdGlvcyBidXQgdGhpcyBpcyBub3QgbGlrZWx5IHRvIGJlIGltcGxlbWVudGVkIGFueSB0aW1lIHNvb24uKQogCVNtYWxsZXIgc2NhbGluZyByYXRpb3MgcGVybWl0IHNpZ25pZmljYW50bHkgZmFzdGVyIGRlY29kaW5nIHNpbmNlCiAJZmV3ZXIgcGl4ZWxzIG5lZWQgYmUgcHJvY2Vzc2VkIGFuZCBhIHNpbXBsZXIgSURDVCBtZXRob2QgY2FuIGJlIHVzZWQuCiAKQEAgLTEyMDEsMTMgKzExNjcsOSBAQAogCWFzIGRlc2NyaWJlZCBhYm92ZSBmb3IgY29tcHJlc3Npb24uCiAKIGJvb2xlYW4gZG9fZmFuY3lfdXBzYW1wbGluZwotCUlmIFRSVUUsIHVzZSBkaXJlY3QgRENUIHNjYWxpbmcgd2l0aCBEQ1Qgc2l6ZSA+IDggZm9yIHVwc2FtcGxpbmcKLQlvZiBjaHJvbWEgY29tcG9uZW50cy4KLQlJZiBGQUxTRSwgdXNlIG9ubHkgRENUIHNpemUgPD0gOCBhbmQgc2ltcGxlIHNlcGFyYXRlIHVwc2FtcGxpbmcuCi0JRGVmYXVsdCBpcyBUUlVFLgotCUZvciBiZXR0ZXIgaW1hZ2Ugc3RhYmlsaXR5IGluIG11bHRpcGxlIGdlbmVyYXRpb24gY29tcHJlc3Npb24gY3ljbGVzCi0JaXQgaXMgcHJlZmVyYWJsZSB0aGF0IHRoaXMgdmFsdWUgbWF0Y2hlcyB0aGUgY29ycmVzcG9uZGluZwotCWRvX2ZhbmN5X2Rvd25zYW1wbGluZyB2YWx1ZSBpbiBjb21wcmVzc2lvbi4KKwlJZiBUUlVFLCBkbyBjYXJlZnVsIHVwc2FtcGxpbmcgb2YgY2hyb21hIGNvbXBvbmVudHMuICBJZiBGQUxTRSwKKwlhIGZhc3RlciBidXQgc2xvcHBpZXIgbWV0aG9kIGlzIHVzZWQuICBEZWZhdWx0IGlzIFRSVUUuICBUaGUgdmlzdWFsCisJaW1wYWN0IG9mIHRoZSBzbG9wcGllciBtZXRob2QgaXMgb2Z0ZW4gdmVyeSBzbWFsbC4KIAogYm9vbGVhbiBkb19ibG9ja19zbW9vdGhpbmcKIAlJZiBUUlVFLCBpbnRlcmJsb2NrIHNtb290aGluZyBpcyBhcHBsaWVkIGluIGVhcmx5IHN0YWdlcyBvZiBkZWNvZGluZwpAQCAtMjU4Miw4ICsyNTQ0LDYgQEAKIHRoZSBmb2xsb3dpbmc6CiAgICogU2V0IGNpbmZvLT5yYXdfZGF0YV9pbiB0byBUUlVFLiAgKEl0IGlzIHNldCBGQUxTRSBieSBqcGVnX3NldF9kZWZhdWx0cygpLikKICAgICBUaGlzIG5vdGlmaWVzIHRoZSBsaWJyYXJ5IHRoYXQgeW91IHdpbGwgYmUgc3VwcGx5aW5nIHJhdyBkYXRhLgotICAgIEZ1cnRoZXJtb3JlLCBzZXQgY2luZm8tPmRvX2ZhbmN5X2Rvd25zYW1wbGluZyB0byBGQUxTRSBpZiB5b3Ugd2FudCB0byB1c2UKLSAgICByZWFsIGRvd25zYW1wbGVkIGRhdGEuICAoSXQgaXMgc2V0IFRSVUUgYnkganBlZ19zZXRfZGVmYXVsdHMoKS4pCiAgICogRW5zdXJlIGpwZWdfY29sb3Jfc3BhY2UgaXMgY29ycmVjdCAtLS0gYW4gZXhwbGljaXQganBlZ19zZXRfY29sb3JzcGFjZSgpCiAgICAgY2FsbCBpcyBhIGdvb2QgaWRlYS4gIE5vdGUgdGhhdCBzaW5jZSBjb2xvciBjb252ZXJzaW9uIGlzIGJ5cGFzc2VkLAogICAgIGluX2NvbG9yX3NwYWNlIGlzIGlnbm9yZWQsIGV4Y2VwdCB0aGF0IGpwZWdfc2V0X2RlZmF1bHRzKCkgdXNlcyBpdCB0bwpAQCAtMjY0MiwxNyArMjYwMiwxNiBAQAogSW4gdGhpcyBjYXNlIHRoZSBzYW1lIGRhdGEgcm93cyBtdXN0IGJlIHBhc3NlZCBhZ2FpbiBvbiB0aGUgbmV4dCBjYWxsLgogCiAKLURlY29tcHJlc3Npb24gd2l0aCByYXcgZGF0YSBvdXRwdXQgaW1wbGllcyBieXBhc3NpbmcgYWxsIHBvc3Rwcm9jZXNzaW5nLgotWW91IG11c3QgZGVhbCB3aXRoIHRoZSBjb2xvciBzcGFjZSBhbmQgc2FtcGxpbmcgZmFjdG9ycyBwcmVzZW50IGluIHRoZQotaW5jb21pbmcgZmlsZS4gIElmIHlvdXIgYXBwbGljYXRpb24gb25seSBoYW5kbGVzLCBzYXksIDJoMXYgWUNiQ3IgZGF0YSwKK0RlY29tcHJlc3Npb24gd2l0aCByYXcgZGF0YSBvdXRwdXQgaW1wbGllcyBieXBhc3NpbmcgYWxsIHBvc3Rwcm9jZXNzaW5nOgoreW91IGNhbm5vdCBhc2sgZm9yIHJlc2NhbGluZyBvciBjb2xvciBxdWFudGl6YXRpb24sIGZvciBpbnN0YW5jZS4gIE1vcmUKK3NlcmlvdXNseSwgeW91IG11c3QgZGVhbCB3aXRoIHRoZSBjb2xvciBzcGFjZSBhbmQgc2FtcGxpbmcgZmFjdG9ycyBwcmVzZW50IGluCit0aGUgaW5jb21pbmcgZmlsZS4gIElmIHlvdXIgYXBwbGljYXRpb24gb25seSBoYW5kbGVzLCBzYXksIDJoMXYgWUNiQ3IgZGF0YSwKIHlvdSBtdXN0IGNoZWNrIGZvciBhbmQgZmFpbCBvbiBvdGhlciBjb2xvciBzcGFjZXMgb3Igb3RoZXIgc2FtcGxpbmcgZmFjdG9ycy4KIFRoZSBsaWJyYXJ5IHdpbGwgbm90IGNvbnZlcnQgdG8gYSBkaWZmZXJlbnQgY29sb3Igc3BhY2UgZm9yIHlvdS4KIAogVG8gb2J0YWluIHJhdyBkYXRhIG91dHB1dCwgc2V0IGNpbmZvLT5yYXdfZGF0YV9vdXQgPSBUUlVFIGJlZm9yZQoganBlZ19zdGFydF9kZWNvbXByZXNzKCkgKGl0IGlzIHNldCBGQUxTRSBieSBqcGVnX3JlYWRfaGVhZGVyKCkpLiAgQmUgc3VyZSB0bwogdmVyaWZ5IHRoYXQgdGhlIGNvbG9yIHNwYWNlIGFuZCBzYW1wbGluZyBmYWN0b3JzIGFyZSBvbmVzIHlvdSBjYW4gaGFuZGxlLgotRnVydGhlcm1vcmUsIHNldCBjaW5mby0+ZG9fZmFuY3lfdXBzYW1wbGluZyA9IEZBTFNFIGlmIHlvdSB3YW50IHRvIGdldCByZWFsCi1kb3duc2FtcGxlZCBkYXRhIChpdCBpcyBzZXQgVFJVRSBieSBqcGVnX3JlYWRfaGVhZGVyKCkpLgogVGhlbiBjYWxsIGpwZWdfcmVhZF9yYXdfZGF0YSgpIGluIHBsYWNlIG9mIGpwZWdfcmVhZF9zY2FubGluZXMoKS4gIFRoZQogZGVjb21wcmVzc2lvbiBwcm9jZXNzIGlzIG90aGVyd2lzZSB0aGUgc2FtZSBhcyB1c3VhbC4KIApkaWZmIC0tZ2l0IGEvbHRtYWluLnNoIGIvbHRtYWluLnNoCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAzMDYxZTNjLi4wMDAwMDAwCi0tLSBhL2x0bWFpbi5zaAorKysgL2Rldi9udWxsCkBAIC0xLDk2MzYgKzAsMCBAQAotCi0jIGxpYnRvb2wgKEdOVSBsaWJ0b29sKSAyLjQKLSMgV3JpdHRlbiBieSBHb3Jkb24gTWF0emlna2VpdCA8Z29yZEBnbnUuYWkubWl0LmVkdT4sIDE5OTYKLQotIyBDb3B5cmlnaHQgKEMpIDE5OTYsIDE5OTcsIDE5OTgsIDE5OTksIDIwMDAsIDIwMDEsIDIwMDMsIDIwMDQsIDIwMDUsIDIwMDYsCi0jIDIwMDcsIDIwMDgsIDIwMDksIDIwMTAgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCi0jIFRoaXMgaXMgZnJlZSBzb2Z0d2FyZTsgc2VlIHRoZSBzb3VyY2UgZm9yIGNvcHlpbmcgY29uZGl0aW9ucy4gIFRoZXJlIGlzIE5PCi0jIHdhcnJhbnR5OyBub3QgZXZlbiBmb3IgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLgotCi0jIEdOVSBMaWJ0b29sIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKLSMgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKLSMgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKLSMgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSMKLSMgQXMgYSBzcGVjaWFsIGV4Y2VwdGlvbiB0byB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UsCi0jIGlmIHlvdSBkaXN0cmlidXRlIHRoaXMgZmlsZSBhcyBwYXJ0IG9mIGEgcHJvZ3JhbSBvciBsaWJyYXJ5IHRoYXQKLSMgaXMgYnVpbHQgdXNpbmcgR05VIExpYnRvb2wsIHlvdSBtYXkgaW5jbHVkZSB0aGlzIGZpbGUgdW5kZXIgdGhlCi0jIHNhbWUgZGlzdHJpYnV0aW9uIHRlcm1zIHRoYXQgeW91IHVzZSBmb3IgdGhlIHJlc3Qgb2YgdGhhdCBwcm9ncmFtLgotIwotIyBHTlUgTGlidG9vbCBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQKLSMgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotIyBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQotIyBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0jCi0jIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCi0jIGFsb25nIHdpdGggR05VIExpYnRvb2w7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLiAgSWYgbm90LCBhIGNvcHkKLSMgY2FuIGJlIGRvd25sb2FkZWQgZnJvbSBodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvZ3BsLmh0bWwsCi0jIG9yIG9idGFpbmVkIGJ5IHdyaXRpbmcgdG8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwKLSMgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCi0KLSMgVXNhZ2U6ICRwcm9nbmFtZSBbT1BUSU9OXS4uLiBbTU9ERS1BUkddLi4uCi0jCi0jIFByb3ZpZGUgZ2VuZXJhbGl6ZWQgbGlicmFyeS1idWlsZGluZyBzdXBwb3J0IHNlcnZpY2VzLgotIwotIyAgICAgICAtLWNvbmZpZyAgICAgICAgICAgICBzaG93IGFsbCBjb25maWd1cmF0aW9uIHZhcmlhYmxlcwotIyAgICAgICAtLWRlYnVnICAgICAgICAgICAgICBlbmFibGUgdmVyYm9zZSBzaGVsbCB0cmFjaW5nCi0jICAgLW4sIC0tZHJ5LXJ1biAgICAgICAgICAgIGRpc3BsYXkgY29tbWFuZHMgd2l0aG91dCBtb2RpZnlpbmcgYW55IGZpbGVzCi0jICAgICAgIC0tZmVhdHVyZXMgICAgICAgICAgIGRpc3BsYXkgYmFzaWMgY29uZmlndXJhdGlvbiBpbmZvcm1hdGlvbiBhbmQgZXhpdAotIyAgICAgICAtLW1vZGU9TU9ERSAgICAgICAgICB1c2Ugb3BlcmF0aW9uIG1vZGUgTU9ERQotIyAgICAgICAtLXByZXNlcnZlLWR1cC1kZXBzICBkb24ndCByZW1vdmUgZHVwbGljYXRlIGRlcGVuZGVuY3kgbGlicmFyaWVzCi0jICAgICAgIC0tcXVpZXQsIC0tc2lsZW50ICAgIGRvbid0IHByaW50IGluZm9ybWF0aW9uYWwgbWVzc2FnZXMKLSMgICAgICAgLS1uby1xdWlldCwgLS1uby1zaWxlbnQKLSMgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJpbnQgaW5mb3JtYXRpb25hbCBtZXNzYWdlcyAoZGVmYXVsdCkKLSMgICAgICAgLS10YWc9VEFHICAgICAgICAgICAgdXNlIGNvbmZpZ3VyYXRpb24gdmFyaWFibGVzIGZyb20gdGFnIFRBRwotIyAgIC12LCAtLXZlcmJvc2UgICAgICAgICAgICBwcmludCBtb3JlIGluZm9ybWF0aW9uYWwgbWVzc2FnZXMgdGhhbiBkZWZhdWx0Ci0jICAgICAgIC0tbm8tdmVyYm9zZSAgICAgICAgIGRvbid0IHByaW50IHRoZSBleHRyYSBpbmZvcm1hdGlvbmFsIG1lc3NhZ2VzCi0jICAgICAgIC0tdmVyc2lvbiAgICAgICAgICAgIHByaW50IHZlcnNpb24gaW5mb3JtYXRpb24KLSMgICAtaCwgLS1oZWxwLCAtLWhlbHAtYWxsICAgcHJpbnQgc2hvcnQsIGxvbmcsIG9yIGRldGFpbGVkIGhlbHAgbWVzc2FnZQotIwotIyBNT0RFIG11c3QgYmUgb25lIG9mIHRoZSBmb2xsb3dpbmc6Ci0jCi0jICAgICAgICAgY2xlYW4gICAgICAgICAgICAgIHJlbW92ZSBmaWxlcyBmcm9tIHRoZSBidWlsZCBkaXJlY3RvcnkKLSMgICAgICAgICBjb21waWxlICAgICAgICAgICAgY29tcGlsZSBhIHNvdXJjZSBmaWxlIGludG8gYSBsaWJ0b29sIG9iamVjdAotIyAgICAgICAgIGV4ZWN1dGUgICAgICAgICAgICBhdXRvbWF0aWNhbGx5IHNldCBsaWJyYXJ5IHBhdGgsIHRoZW4gcnVuIGEgcHJvZ3JhbQotIyAgICAgICAgIGZpbmlzaCAgICAgICAgICAgICBjb21wbGV0ZSB0aGUgaW5zdGFsbGF0aW9uIG9mIGxpYnRvb2wgbGlicmFyaWVzCi0jICAgICAgICAgaW5zdGFsbCAgICAgICAgICAgIGluc3RhbGwgbGlicmFyaWVzIG9yIGV4ZWN1dGFibGVzCi0jICAgICAgICAgbGluayAgICAgICAgICAgICAgIGNyZWF0ZSBhIGxpYnJhcnkgb3IgYW4gZXhlY3V0YWJsZQotIyAgICAgICAgIHVuaW5zdGFsbCAgICAgICAgICByZW1vdmUgbGlicmFyaWVzIGZyb20gYW4gaW5zdGFsbGVkIGRpcmVjdG9yeQotIwotIyBNT0RFLUFSR1MgdmFyeSBkZXBlbmRpbmcgb24gdGhlIE1PREUuICBXaGVuIHBhc3NlZCBhcyBmaXJzdCBvcHRpb24sCi0jIGAtLW1vZGU9TU9ERScgbWF5IGJlIGFiYnJldmlhdGVkIGFzIGBNT0RFJyBvciBhIHVuaXF1ZSBhYmJyZXZpYXRpb24gb2YgdGhhdC4KLSMgVHJ5IGAkcHJvZ25hbWUgLS1oZWxwIC0tbW9kZT1NT0RFJyBmb3IgYSBtb3JlIGRldGFpbGVkIGRlc2NyaXB0aW9uIG9mIE1PREUuCi0jCi0jIFdoZW4gcmVwb3J0aW5nIGEgYnVnLCBwbGVhc2UgZGVzY3JpYmUgYSB0ZXN0IGNhc2UgdG8gcmVwcm9kdWNlIGl0IGFuZAotIyBpbmNsdWRlIHRoZSBmb2xsb3dpbmcgaW5mb3JtYXRpb246Ci0jCi0jICAgICAgICAgaG9zdC10cmlwbGV0OgkkaG9zdAotIyAgICAgICAgIHNoZWxsOgkJJFNIRUxMCi0jICAgICAgICAgY29tcGlsZXI6CQkkTFRDQwotIyAgICAgICAgIGNvbXBpbGVyIGZsYWdzOgkJJExUQ0ZMQUdTCi0jICAgICAgICAgbGlua2VyOgkJJExEIChnbnU/ICR3aXRoX2dudV9sZCkKLSMgICAgICAgICAkcHJvZ25hbWU6CShHTlUgbGlidG9vbCkgMi40Ci0jICAgICAgICAgYXV0b21ha2U6CSRhdXRvbWFrZV92ZXJzaW9uCi0jICAgICAgICAgYXV0b2NvbmY6CSRhdXRvY29uZl92ZXJzaW9uCi0jCi0jIFJlcG9ydCBidWdzIHRvIDxidWctbGlidG9vbEBnbnUub3JnPi4KLSMgR05VIGxpYnRvb2wgaG9tZSBwYWdlOiA8aHR0cDovL3d3dy5nbnUub3JnL3NvZnR3YXJlL2xpYnRvb2wvPi4KLSMgR2VuZXJhbCBoZWxwIHVzaW5nIEdOVSBzb2Z0d2FyZTogPGh0dHA6Ly93d3cuZ251Lm9yZy9nZXRoZWxwLz4uCi0KLVBST0dSQU09bGlidG9vbAotUEFDS0FHRT1saWJ0b29sCi1WRVJTSU9OPTIuNAotVElNRVNUQU1QPSIiCi1wYWNrYWdlX3JldmlzaW9uPTEuMzI5MwotCi0jIEJlIEJvdXJuZSBjb21wYXRpYmxlCi1pZiB0ZXN0IC1uICIke1pTSF9WRVJTSU9OK3NldH0iICYmIChlbXVsYXRlIHNoKSA+L2Rldi9udWxsIDI+JjE7IHRoZW4KLSAgZW11bGF0ZSBzaAotICBOVUxMQ01EPToKLSAgIyBac2ggMy54IGFuZCA0LnggcGVyZm9ybXMgd29yZCBzcGxpdHRpbmcgb24gJHsxKyIkQCJ9LCB3aGljaAotICAjIGlzIGNvbnRyYXJ5IHRvIG91ciB1c2FnZS4gIERpc2FibGUgdGhpcyBmZWF0dXJlLgotICBhbGlhcyAtZyAnJHsxKyIkQCJ9Jz0nIiRAIicKLSAgc2V0b3B0IE5PX0dMT0JfU1VCU1QKLWVsc2UKLSAgY2FzZSBgKHNldCAtbykgMj4vZGV2L251bGxgIGluICpwb3NpeCopIHNldCAtbyBwb3NpeDs7IGVzYWMKLWZpCi1CSU5fU0g9eHBnNDsgZXhwb3J0IEJJTl9TSCAjIGZvciBUcnU2NAotRFVBTENBU0U9MTsgZXhwb3J0IERVQUxDQVNFICMgZm9yIE1LUyBzaAotCi0jIEEgZnVuY3Rpb24gdGhhdCBpcyB1c2VkIHdoZW4gdGhlcmUgaXMgbm8gcHJpbnQgYnVpbHRpbiBvciBwcmludGYuCi1mdW5jX2ZhbGxiYWNrX2VjaG8gKCkKLXsKLSAgZXZhbCAnY2F0IDw8X0xURUNIT19FT0YKLSQxCi1fTFRFQ0hPX0VPRicKLX0KLQotIyBOTFMgbnVpc2FuY2VzOiBXZSBzYXZlIHRoZSBvbGQgdmFsdWVzIHRvIHJlc3RvcmUgZHVyaW5nIGV4ZWN1dGUgbW9kZS4KLWx0X3VzZXJfbG9jYWxlPQotbHRfc2FmZV9sb2NhbGU9Ci1mb3IgbHRfdmFyIGluIExBTkcgTEFOR1VBR0UgTENfQUxMIExDX0NUWVBFIExDX0NPTExBVEUgTENfTUVTU0FHRVMKLWRvCi0gIGV2YWwgImlmIHRlc3QgXCJcJHskbHRfdmFyK3NldH1cIiA9IHNldDsgdGhlbgotICAgICAgICAgIHNhdmVfJGx0X3Zhcj1cJCRsdF92YXIKLSAgICAgICAgICAkbHRfdmFyPUMKLQkgIGV4cG9ydCAkbHRfdmFyCi0JICBsdF91c2VyX2xvY2FsZT1cIiRsdF92YXI9XFxcJHNhdmVfXCRsdF92YXI7IFwkbHRfdXNlcl9sb2NhbGVcIgotCSAgbHRfc2FmZV9sb2NhbGU9XCIkbHRfdmFyPUM7IFwkbHRfc2FmZV9sb2NhbGVcIgotCWZpIgotZG9uZQotTENfQUxMPUMKLUxBTkdVQUdFPUMKLWV4cG9ydCBMQU5HVUFHRSBMQ19BTEwKLQotJGx0X3Vuc2V0IENEUEFUSAotCi0KLSMgV29yayBhcm91bmQgYmFja3dhcmQgY29tcGF0aWJpbGl0eSBpc3N1ZSBvbiBJUklYIDYuNS4gT24gSVJJWCA2LjQrLCBzaAotIyBpcyBrc2ggYnV0IHdoZW4gdGhlIHNoZWxsIGlzIGludm9rZWQgYXMgInNoIiBhbmQgdGhlIGN1cnJlbnQgdmFsdWUgb2YKLSMgdGhlIF9YUEcgZW52aXJvbm1lbnQgdmFyaWFibGUgaXMgbm90IGVxdWFsIHRvIDEgKG9uZSksIHRoZSBzcGVjaWFsCi0jIHBvc2l0aW9uYWwgcGFyYW1ldGVyICQwLCB3aXRoaW4gYSBmdW5jdGlvbiBjYWxsLCBpcyB0aGUgbmFtZSBvZiB0aGUKLSMgZnVuY3Rpb24uCi1wcm9ncGF0aD0iJDAiCi0KLQotCi06ICR7Q1A9ImNwIC1mIn0KLXRlc3QgIiR7RUNITytzZXR9IiA9IHNldCB8fCBFQ0hPPSR7YXNfZWNoby0ncHJpbnRmICVzXG4nfQotOiAke0VHUkVQPSJncmVwIC1FIn0KLTogJHtGR1JFUD0iZ3JlcCAtRiJ9Ci06ICR7R1JFUD0iZ3JlcCJ9Ci06ICR7TE5fUz0ibG4gLXMifQotOiAke01BS0U9Im1ha2UifQotOiAke01LRElSPSJta2RpciJ9Ci06ICR7TVY9Im12IC1mIn0KLTogJHtSTT0icm0gLWYifQotOiAke1NFRD0ic2VkIn0KLTogJHtTSEVMTD0iJHtDT05GSUdfU0hFTEwtL2Jpbi9zaH0ifQotOiAke1hzZWQ9IiRTRUQgLWUgMXMvXlgvLyJ9Ci0KLSMgR2xvYmFsIHZhcmlhYmxlczoKLUVYSVRfU1VDQ0VTUz0wCi1FWElUX0ZBSUxVUkU9MQotRVhJVF9NSVNNQVRDSD02MyAgIyAkPyA9IDYzIGlzIHVzZWQgdG8gaW5kaWNhdGUgdmVyc2lvbiBtaXNtYXRjaCB0byBtaXNzaW5nLgotRVhJVF9TS0lQPTc3CSAgIyAkPyA9IDc3IGlzIHVzZWQgdG8gaW5kaWNhdGUgYSBza2lwcGVkIHRlc3QgdG8gYXV0b21ha2UuCi0KLWV4aXRfc3RhdHVzPSRFWElUX1NVQ0NFU1MKLQotIyBNYWtlIHN1cmUgSUZTIGhhcyBhIHNlbnNpYmxlIGRlZmF1bHQKLWx0X25sPScKLScKLUlGUz0iIAkkbHRfbmwiCi0KLWRpcm5hbWU9InMsL1teL10qJCwsIgotYmFzZW5hbWU9InMsXi4qLywsIgotCi0jIGZ1bmNfZGlybmFtZSBmaWxlIGFwcGVuZCBub25kaXJfcmVwbGFjZW1lbnQKLSMgQ29tcHV0ZSB0aGUgZGlybmFtZSBvZiBGSUxFLiAgSWYgbm9uZW1wdHksIGFkZCBBUFBFTkQgdG8gdGhlIHJlc3VsdCwKLSMgb3RoZXJ3aXNlIHNldCByZXN1bHQgdG8gTk9ORElSX1JFUExBQ0VNRU5ULgotZnVuY19kaXJuYW1lICgpCi17Ci0gICAgZnVuY19kaXJuYW1lX3Jlc3VsdD1gJEVDSE8gIiR7MX0iIHwgJFNFRCAiJGRpcm5hbWUiYAotICAgIGlmIHRlc3QgIlgkZnVuY19kaXJuYW1lX3Jlc3VsdCIgPSAiWCR7MX0iOyB0aGVuCi0gICAgICBmdW5jX2Rpcm5hbWVfcmVzdWx0PSIkezN9IgotICAgIGVsc2UKLSAgICAgIGZ1bmNfZGlybmFtZV9yZXN1bHQ9IiRmdW5jX2Rpcm5hbWVfcmVzdWx0JHsyfSIKLSAgICBmaQotfSAjIGZ1bmNfZGlybmFtZSBtYXkgYmUgcmVwbGFjZWQgYnkgZXh0ZW5kZWQgc2hlbGwgaW1wbGVtZW50YXRpb24KLQotCi0jIGZ1bmNfYmFzZW5hbWUgZmlsZQotZnVuY19iYXNlbmFtZSAoKQotewotICAgIGZ1bmNfYmFzZW5hbWVfcmVzdWx0PWAkRUNITyAiJHsxfSIgfCAkU0VEICIkYmFzZW5hbWUiYAotfSAjIGZ1bmNfYmFzZW5hbWUgbWF5IGJlIHJlcGxhY2VkIGJ5IGV4dGVuZGVkIHNoZWxsIGltcGxlbWVudGF0aW9uCi0KLQotIyBmdW5jX2Rpcm5hbWVfYW5kX2Jhc2VuYW1lIGZpbGUgYXBwZW5kIG5vbmRpcl9yZXBsYWNlbWVudAotIyBwZXJmb3JtIGZ1bmNfYmFzZW5hbWUgYW5kIGZ1bmNfZGlybmFtZSBpbiBhIHNpbmdsZSBmdW5jdGlvbgotIyBjYWxsOgotIyAgIGRpcm5hbWU6ICBDb21wdXRlIHRoZSBkaXJuYW1lIG9mIEZJTEUuICBJZiBub25lbXB0eSwKLSMgICAgICAgICAgICAgYWRkIEFQUEVORCB0byB0aGUgcmVzdWx0LCBvdGhlcndpc2Ugc2V0IHJlc3VsdAotIyAgICAgICAgICAgICB0byBOT05ESVJfUkVQTEFDRU1FTlQuCi0jICAgICAgICAgICAgIHZhbHVlIHJldHVybmVkIGluICIkZnVuY19kaXJuYW1lX3Jlc3VsdCIKLSMgICBiYXNlbmFtZTogQ29tcHV0ZSBmaWxlbmFtZSBvZiBGSUxFLgotIyAgICAgICAgICAgICB2YWx1ZSByZXR1bmVkIGluICIkZnVuY19iYXNlbmFtZV9yZXN1bHQiCi0jIEltcGxlbWVudGF0aW9uIG11c3QgYmUga2VwdCBzeW5jaHJvbml6ZWQgd2l0aCBmdW5jX2Rpcm5hbWUKLSMgYW5kIGZ1bmNfYmFzZW5hbWUuIEZvciBlZmZpY2llbmN5LCB3ZSBkbyBub3QgZGVsZWdhdGUgdG8KLSMgdGhvc2UgZnVuY3Rpb25zIGJ1dCBpbnN0ZWFkIGR1cGxpY2F0ZSB0aGUgZnVuY3Rpb25hbGl0eSBoZXJlLgotZnVuY19kaXJuYW1lX2FuZF9iYXNlbmFtZSAoKQotewotICAgICMgRXh0cmFjdCBzdWJkaXJlY3RvcnkgZnJvbSB0aGUgYXJndW1lbnQuCi0gICAgZnVuY19kaXJuYW1lX3Jlc3VsdD1gJEVDSE8gIiR7MX0iIHwgJFNFRCAtZSAiJGRpcm5hbWUiYAotICAgIGlmIHRlc3QgIlgkZnVuY19kaXJuYW1lX3Jlc3VsdCIgPSAiWCR7MX0iOyB0aGVuCi0gICAgICBmdW5jX2Rpcm5hbWVfcmVzdWx0PSIkezN9IgotICAgIGVsc2UKLSAgICAgIGZ1bmNfZGlybmFtZV9yZXN1bHQ9IiRmdW5jX2Rpcm5hbWVfcmVzdWx0JHsyfSIKLSAgICBmaQotICAgIGZ1bmNfYmFzZW5hbWVfcmVzdWx0PWAkRUNITyAiJHsxfSIgfCAkU0VEIC1lICIkYmFzZW5hbWUiYAotfSAjIGZ1bmNfZGlybmFtZV9hbmRfYmFzZW5hbWUgbWF5IGJlIHJlcGxhY2VkIGJ5IGV4dGVuZGVkIHNoZWxsIGltcGxlbWVudGF0aW9uCi0KLQotIyBmdW5jX3N0cmlwbmFtZSBwcmVmaXggc3VmZml4IG5hbWUKLSMgc3RyaXAgUFJFRklYIGFuZCBTVUZGSVggb2ZmIG9mIE5BTUUuCi0jIFBSRUZJWCBhbmQgU1VGRklYIG11c3Qgbm90IGNvbnRhaW4gZ2xvYmJpbmcgb3IgcmVnZXggc3BlY2lhbAotIyBjaGFyYWN0ZXJzLCBoYXNoZXMsIHBlcmNlbnQgc2lnbnMsIGJ1dCBTVUZGSVggbWF5IGNvbnRhaW4gYSBsZWFkaW5nCi0jIGRvdCAoaW4gd2hpY2ggY2FzZSB0aGF0IG1hdGNoZXMgb25seSBhIGRvdCkuCi0jIGZ1bmNfc3RyaXBfc3VmZml4IHByZWZpeCBuYW1lCi1mdW5jX3N0cmlwbmFtZSAoKQotewotICAgIGNhc2UgJHsyfSBpbgotICAgICAgLiopIGZ1bmNfc3RyaXBuYW1lX3Jlc3VsdD1gJEVDSE8gIiR7M30iIHwgJFNFRCAicyVeJHsxfSUlOyBzJVxcXFwkezJ9XCQlJSJgOzsKLSAgICAgICopICBmdW5jX3N0cmlwbmFtZV9yZXN1bHQ9YCRFQ0hPICIkezN9IiB8ICRTRUQgInMlXiR7MX0lJTsgcyUkezJ9XCQlJSJgOzsKLSAgICBlc2FjCi19ICMgZnVuY19zdHJpcG5hbWUgbWF5IGJlIHJlcGxhY2VkIGJ5IGV4dGVuZGVkIHNoZWxsIGltcGxlbWVudGF0aW9uCi0KLQotIyBUaGVzZSBTRUQgc2NyaXB0cyBwcmVzdXBwb3NlIGFuIGFic29sdXRlIHBhdGggd2l0aCBhIHRyYWlsaW5nIHNsYXNoLgotcGF0aGNhcj0ncyxeL1woW14vXSpcKS4qJCxcMSwnCi1wYXRoY2RyPSdzLF4vW14vXSosLCcKLXJlbW92ZWRvdHBhcnRzPSc6ZG90c2wKLQkJc0AvXC4vQC9AZwotCQl0IGRvdHNsCi0JCXMsL1wuJCwvLCcKLWNvbGxhcHNlc2xhc2hlcz0nc0AvXHsxLFx9QC9AZycKLWZpbmFsc2xhc2g9J3MsLyokLC8sJwotCi0jIGZ1bmNfbm9ybWFsX2Fic3BhdGggUEFUSAotIyBSZW1vdmUgZG91YmxlZC11cCBhbmQgdHJhaWxpbmcgc2xhc2hlcywgIi4iIHBhdGggY29tcG9uZW50cywKLSMgYW5kIGNhbmNlbCBvdXQgYW55ICIuLiIgcGF0aCBjb21wb25lbnRzIGluIFBBVEggYWZ0ZXIgbWFraW5nCi0jIGl0IGFuIGFic29sdXRlIHBhdGguCi0jICAgICAgICAgICAgIHZhbHVlIHJldHVybmVkIGluICIkZnVuY19ub3JtYWxfYWJzcGF0aF9yZXN1bHQiCi1mdW5jX25vcm1hbF9hYnNwYXRoICgpCi17Ci0gICMgU3RhcnQgZnJvbSByb290IGRpciBhbmQgcmVhc3NlbWJsZSB0aGUgcGF0aC4KLSAgZnVuY19ub3JtYWxfYWJzcGF0aF9yZXN1bHQ9Ci0gIGZ1bmNfbm9ybWFsX2Fic3BhdGhfdHBhdGg9JDEKLSAgZnVuY19ub3JtYWxfYWJzcGF0aF9hbHRuYW1lc3BhY2U9Ci0gIGNhc2UgJGZ1bmNfbm9ybWFsX2Fic3BhdGhfdHBhdGggaW4KLSAgICAiIikKLSAgICAgICMgRW1wdHkgcGF0aCwgdGhhdCBqdXN0IG1lYW5zICRjd2QuCi0gICAgICBmdW5jX3N0cmlwbmFtZSAnJyAnLycgImBwd2RgIgotICAgICAgZnVuY19ub3JtYWxfYWJzcGF0aF9yZXN1bHQ9JGZ1bmNfc3RyaXBuYW1lX3Jlc3VsdAotICAgICAgcmV0dXJuCi0gICAgOzsKLSAgICAjIFRoZSBuZXh0IHRocmVlIGVudHJpZXMgYXJlIHVzZWQgdG8gc3BvdCBhIHJ1biBvZiBwcmVjaXNlbHkKLSAgICAjIHR3byBsZWFkaW5nIHNsYXNoZXMgd2l0aG91dCB1c2luZyBuZWdhdGVkIGNoYXJhY3RlciBjbGFzc2VzOwotICAgICMgd2UgdGFrZSBhZHZhbnRhZ2Ugb2YgY2FzZSdzIGZpcnN0LW1hdGNoIGJlaGF2aW91ci4KLSAgICAvLy8qKQotICAgICAgIyBVbnVzdWFsIGZvcm0gb2YgYWJzb2x1dGUgcGF0aCwgZG8gbm90aGluZy4KLSAgICA7OwotICAgIC8vKikKLSAgICAgICMgTm90IG5lY2Vzc2FyaWx5IGFuIG9yZGluYXJ5IHBhdGg7IFBPU0lYIHJlc2VydmVzIGxlYWRpbmcgJy8vJwotICAgICAgIyBhbmQgZm9yIGV4YW1wbGUgQ3lnd2luIHVzZXMgaXQgdG8gYWNjZXNzIHJlbW90ZSBmaWxlIHNoYXJlcwotICAgICAgIyBvdmVyIENJRlMvU01CLCBzbyB3ZSBjb25zZXJ2ZSBhIGxlYWRpbmcgZG91YmxlIHNsYXNoIGlmIGZvdW5kLgotICAgICAgZnVuY19ub3JtYWxfYWJzcGF0aF9hbHRuYW1lc3BhY2U9LwotICAgIDs7Ci0gICAgLyopCi0gICAgICAjIEFic29sdXRlIHBhdGgsIGRvIG5vdGhpbmcuCi0gICAgOzsKLSAgICAqKQotICAgICAgIyBSZWxhdGl2ZSBwYXRoLCBwcmVwZW5kICRjd2QuCi0gICAgICBmdW5jX25vcm1hbF9hYnNwYXRoX3RwYXRoPWBwd2RgLyRmdW5jX25vcm1hbF9hYnNwYXRoX3RwYXRoCi0gICAgOzsKLSAgZXNhYwotICAjIENhbmNlbCBvdXQgYWxsIHRoZSBzaW1wbGUgc3R1ZmYgdG8gc2F2ZSBpdGVyYXRpb25zLiAgV2UgYWxzbyB3YW50Ci0gICMgdGhlIHBhdGggdG8gZW5kIHdpdGggYSBzbGFzaCBmb3IgZWFzZSBvZiBwYXJzaW5nLCBzbyBtYWtlIHN1cmUKLSAgIyB0aGVyZSBpcyBvbmUgKGFuZCBvbmx5IG9uZSkgaGVyZS4KLSAgZnVuY19ub3JtYWxfYWJzcGF0aF90cGF0aD1gJEVDSE8gIiRmdW5jX25vcm1hbF9hYnNwYXRoX3RwYXRoIiB8ICRTRUQgXAotICAgICAgICAtZSAiJHJlbW92ZWRvdHBhcnRzIiAtZSAiJGNvbGxhcHNlc2xhc2hlcyIgLWUgIiRmaW5hbHNsYXNoImAKLSAgd2hpbGUgOjsgZG8KLSAgICAjIFByb2Nlc3NlZCBpdCBhbGwgeWV0PwotICAgIGlmIHRlc3QgIiRmdW5jX25vcm1hbF9hYnNwYXRoX3RwYXRoIiA9IC8gOyB0aGVuCi0gICAgICAjIElmIHdlIGFzY2VuZGVkIHRvIHRoZSByb290IHVzaW5nICIuLiIgdGhlIHJlc3VsdCBtYXkgYmUgZW1wdHkgbm93LgotICAgICAgaWYgdGVzdCAteiAiJGZ1bmNfbm9ybWFsX2Fic3BhdGhfcmVzdWx0IiA7IHRoZW4KLSAgICAgICAgZnVuY19ub3JtYWxfYWJzcGF0aF9yZXN1bHQ9LwotICAgICAgZmkKLSAgICAgIGJyZWFrCi0gICAgZmkKLSAgICBmdW5jX25vcm1hbF9hYnNwYXRoX3Rjb21wb25lbnQ9YCRFQ0hPICIkZnVuY19ub3JtYWxfYWJzcGF0aF90cGF0aCIgfCAkU0VEIFwKLSAgICAgICAgLWUgIiRwYXRoY2FyImAKLSAgICBmdW5jX25vcm1hbF9hYnNwYXRoX3RwYXRoPWAkRUNITyAiJGZ1bmNfbm9ybWFsX2Fic3BhdGhfdHBhdGgiIHwgJFNFRCBcCi0gICAgICAgIC1lICIkcGF0aGNkciJgCi0gICAgIyBGaWd1cmUgb3V0IHdoYXQgdG8gZG8gd2l0aCBpdAotICAgIGNhc2UgJGZ1bmNfbm9ybWFsX2Fic3BhdGhfdGNvbXBvbmVudCBpbgotICAgICAgIiIpCi0gICAgICAgICMgVHJhaWxpbmcgZW1wdHkgcGF0aCBjb21wb25lbnQsIGlnbm9yZSBpdC4KLSAgICAgIDs7Ci0gICAgICAuLikKLSAgICAgICAgIyBQYXJlbnQgZGlyOyBzdHJpcCBsYXN0IGFzc2VtYmxlZCBjb21wb25lbnQgZnJvbSByZXN1bHQuCi0gICAgICAgIGZ1bmNfZGlybmFtZSAiJGZ1bmNfbm9ybWFsX2Fic3BhdGhfcmVzdWx0IgotICAgICAgICBmdW5jX25vcm1hbF9hYnNwYXRoX3Jlc3VsdD0kZnVuY19kaXJuYW1lX3Jlc3VsdAotICAgICAgOzsKLSAgICAgICopCi0gICAgICAgICMgQWN0dWFsIHBhdGggY29tcG9uZW50LCBhcHBlbmQgaXQuCi0gICAgICAgIGZ1bmNfbm9ybWFsX2Fic3BhdGhfcmVzdWx0PSRmdW5jX25vcm1hbF9hYnNwYXRoX3Jlc3VsdC8kZnVuY19ub3JtYWxfYWJzcGF0aF90Y29tcG9uZW50Ci0gICAgICA7OwotICAgIGVzYWMKLSAgZG9uZQotICAjIFJlc3RvcmUgbGVhZGluZyBkb3VibGUtc2xhc2ggaWYgb25lIHdhcyBmb3VuZCBvbiBlbnRyeS4KLSAgZnVuY19ub3JtYWxfYWJzcGF0aF9yZXN1bHQ9JGZ1bmNfbm9ybWFsX2Fic3BhdGhfYWx0bmFtZXNwYWNlJGZ1bmNfbm9ybWFsX2Fic3BhdGhfcmVzdWx0Ci19Ci0KLSMgZnVuY19yZWxhdGl2ZV9wYXRoIFNSQ0RJUiBEU1RESVIKLSMgZ2VuZXJhdGVzIGEgcmVsYXRpdmUgcGF0aCBmcm9tIFNSQ0RJUiB0byBEU1RESVIsIHdpdGggYSB0cmFpbGluZwotIyBzbGFzaCBpZiBub24tZW1wdHksIHN1aXRhYmxlIGZvciBpbW1lZGlhdGVseSBhcHBlbmRpbmcgYSBmaWxlbmFtZQotIyB3aXRob3V0IG5lZWRpbmcgdG8gYXBwZW5kIGEgc2VwYXJhdG9yLgotIyAgICAgICAgICAgICB2YWx1ZSByZXR1cm5lZCBpbiAiJGZ1bmNfcmVsYXRpdmVfcGF0aF9yZXN1bHQiCi1mdW5jX3JlbGF0aXZlX3BhdGggKCkKLXsKLSAgZnVuY19yZWxhdGl2ZV9wYXRoX3Jlc3VsdD0KLSAgZnVuY19ub3JtYWxfYWJzcGF0aCAiJDEiCi0gIGZ1bmNfcmVsYXRpdmVfcGF0aF90bGliZGlyPSRmdW5jX25vcm1hbF9hYnNwYXRoX3Jlc3VsdAotICBmdW5jX25vcm1hbF9hYnNwYXRoICIkMiIKLSAgZnVuY19yZWxhdGl2ZV9wYXRoX3RiaW5kaXI9JGZ1bmNfbm9ybWFsX2Fic3BhdGhfcmVzdWx0Ci0KLSAgIyBBc2NlbmQgdGhlIHRyZWUgc3RhcnRpbmcgZnJvbSBsaWJkaXIKLSAgd2hpbGUgOjsgZG8KLSAgICAjIGNoZWNrIGlmIHdlIGhhdmUgZm91bmQgYSBwcmVmaXggb2YgYmluZGlyCi0gICAgY2FzZSAkZnVuY19yZWxhdGl2ZV9wYXRoX3RiaW5kaXIgaW4KLSAgICAgICRmdW5jX3JlbGF0aXZlX3BhdGhfdGxpYmRpcikKLSAgICAgICAgIyBmb3VuZCBhbiBleGFjdCBtYXRjaAotICAgICAgICBmdW5jX3JlbGF0aXZlX3BhdGhfdGNhbmNlbGxlZD0KLSAgICAgICAgYnJlYWsKLSAgICAgICAgOzsKLSAgICAgICRmdW5jX3JlbGF0aXZlX3BhdGhfdGxpYmRpciopCi0gICAgICAgICMgZm91bmQgYSBtYXRjaGluZyBwcmVmaXgKLSAgICAgICAgZnVuY19zdHJpcG5hbWUgIiRmdW5jX3JlbGF0aXZlX3BhdGhfdGxpYmRpciIgJycgIiRmdW5jX3JlbGF0aXZlX3BhdGhfdGJpbmRpciIKLSAgICAgICAgZnVuY19yZWxhdGl2ZV9wYXRoX3RjYW5jZWxsZWQ9JGZ1bmNfc3RyaXBuYW1lX3Jlc3VsdAotICAgICAgICBpZiB0ZXN0IC16ICIkZnVuY19yZWxhdGl2ZV9wYXRoX3Jlc3VsdCI7IHRoZW4KLSAgICAgICAgICBmdW5jX3JlbGF0aXZlX3BhdGhfcmVzdWx0PS4KLSAgICAgICAgZmkKLSAgICAgICAgYnJlYWsKLSAgICAgICAgOzsKLSAgICAgICopCi0gICAgICAgIGZ1bmNfZGlybmFtZSAkZnVuY19yZWxhdGl2ZV9wYXRoX3RsaWJkaXIKLSAgICAgICAgZnVuY19yZWxhdGl2ZV9wYXRoX3RsaWJkaXI9JHtmdW5jX2Rpcm5hbWVfcmVzdWx0fQotICAgICAgICBpZiB0ZXN0ICJ4JGZ1bmNfcmVsYXRpdmVfcGF0aF90bGliZGlyIiA9IHggOyB0aGVuCi0gICAgICAgICAgIyBIYXZlIHRvIGRlc2NlbmQgYWxsIHRoZSB3YXkgdG8gdGhlIHJvb3QhCi0gICAgICAgICAgZnVuY19yZWxhdGl2ZV9wYXRoX3Jlc3VsdD0uLi8kZnVuY19yZWxhdGl2ZV9wYXRoX3Jlc3VsdAotICAgICAgICAgIGZ1bmNfcmVsYXRpdmVfcGF0aF90Y2FuY2VsbGVkPSRmdW5jX3JlbGF0aXZlX3BhdGhfdGJpbmRpcgotICAgICAgICAgIGJyZWFrCi0gICAgICAgIGZpCi0gICAgICAgIGZ1bmNfcmVsYXRpdmVfcGF0aF9yZXN1bHQ9Li4vJGZ1bmNfcmVsYXRpdmVfcGF0aF9yZXN1bHQKLSAgICAgICAgOzsKLSAgICBlc2FjCi0gIGRvbmUKLQotICAjIE5vdyBjYWxjdWxhdGUgcGF0aDsgdGFrZSBjYXJlIHRvIGF2b2lkIGRvdWJsaW5nLXVwIHNsYXNoZXMuCi0gIGZ1bmNfc3RyaXBuYW1lICcnICcvJyAiJGZ1bmNfcmVsYXRpdmVfcGF0aF9yZXN1bHQiCi0gIGZ1bmNfcmVsYXRpdmVfcGF0aF9yZXN1bHQ9JGZ1bmNfc3RyaXBuYW1lX3Jlc3VsdAotICBmdW5jX3N0cmlwbmFtZSAnLycgJy8nICIkZnVuY19yZWxhdGl2ZV9wYXRoX3RjYW5jZWxsZWQiCi0gIGlmIHRlc3QgIngkZnVuY19zdHJpcG5hbWVfcmVzdWx0IiAhPSB4IDsgdGhlbgotICAgIGZ1bmNfcmVsYXRpdmVfcGF0aF9yZXN1bHQ9JHtmdW5jX3JlbGF0aXZlX3BhdGhfcmVzdWx0fS8ke2Z1bmNfc3RyaXBuYW1lX3Jlc3VsdH0KLSAgZmkKLQotICAjIE5vcm1hbGlzYXRpb24uIElmIGJpbmRpciBpcyBsaWJkaXIsIHJldHVybiBlbXB0eSBzdHJpbmcsCi0gICMgZWxzZSByZWxhdGl2ZSBwYXRoIGVuZGluZyB3aXRoIGEgc2xhc2g7IGVpdGhlciB3YXksIHRhcmdldAotICAjIGZpbGUgbmFtZSBjYW4gYmUgZGlyZWN0bHkgYXBwZW5kZWQuCi0gIGlmIHRlc3QgISAteiAiJGZ1bmNfcmVsYXRpdmVfcGF0aF9yZXN1bHQiOyB0aGVuCi0gICAgZnVuY19zdHJpcG5hbWUgJy4vJyAnJyAiJGZ1bmNfcmVsYXRpdmVfcGF0aF9yZXN1bHQvIgotICAgIGZ1bmNfcmVsYXRpdmVfcGF0aF9yZXN1bHQ9JGZ1bmNfc3RyaXBuYW1lX3Jlc3VsdAotICBmaQotfQotCi0jIFRoZSBuYW1lIG9mIHRoaXMgcHJvZ3JhbToKLWZ1bmNfZGlybmFtZV9hbmRfYmFzZW5hbWUgIiRwcm9ncGF0aCIKLXByb2duYW1lPSRmdW5jX2Jhc2VuYW1lX3Jlc3VsdAotCi0jIE1ha2Ugc3VyZSB3ZSBoYXZlIGFuIGFic29sdXRlIHBhdGggZm9yIHJlZXhlY3V0aW9uOgotY2FzZSAkcHJvZ3BhdGggaW4KLSAgW1xcL10qfFtBLVphLXpdOlxcKikgOzsKLSAgKltcXC9dKikKLSAgICAgcHJvZ2Rpcj0kZnVuY19kaXJuYW1lX3Jlc3VsdAotICAgICBwcm9nZGlyPWBjZCAiJHByb2dkaXIiICYmIHB3ZGAKLSAgICAgcHJvZ3BhdGg9IiRwcm9nZGlyLyRwcm9nbmFtZSIKLSAgICAgOzsKLSAgKikKLSAgICAgc2F2ZV9JRlM9IiRJRlMiCi0gICAgIElGUz06Ci0gICAgIGZvciBwcm9nZGlyIGluICRQQVRIOyBkbwotICAgICAgIElGUz0iJHNhdmVfSUZTIgotICAgICAgIHRlc3QgLXggIiRwcm9nZGlyLyRwcm9nbmFtZSIgJiYgYnJlYWsKLSAgICAgZG9uZQotICAgICBJRlM9IiRzYXZlX0lGUyIKLSAgICAgdGVzdCAtbiAiJHByb2dkaXIiIHx8IHByb2dkaXI9YHB3ZGAKLSAgICAgcHJvZ3BhdGg9IiRwcm9nZGlyLyRwcm9nbmFtZSIKLSAgICAgOzsKLWVzYWMKLQotIyBTZWQgc3Vic3RpdHV0aW9uIHRoYXQgaGVscHMgdXMgZG8gcm9idXN0IHF1b3RpbmcuICBJdCBiYWNrc2xhc2hpZmllcwotIyBtZXRhY2hhcmFjdGVycyB0aGF0IGFyZSBzdGlsbCBhY3RpdmUgd2l0aGluIGRvdWJsZS1xdW90ZWQgc3RyaW5ncy4KLVhzZWQ9IiR7U0VEfSInIC1lIDFzL15YLy8nCi1zZWRfcXVvdGVfc3Vic3Q9J3MvXChbYCIkXFxdXCkvXFxcMS9nJwotCi0jIFNhbWUgYXMgYWJvdmUsIGJ1dCBkbyBub3QgcXVvdGUgdmFyaWFibGUgcmVmZXJlbmNlcy4KLWRvdWJsZV9xdW90ZV9zdWJzdD0ncy9cKFsiYFxcXVwpL1xcXDEvZycKLQotIyBTZWQgc3Vic3RpdHV0aW9uIHRoYXQgdHVybnMgYSBzdHJpbmcgaW50byBhIHJlZ2V4IG1hdGNoaW5nIGZvciB0aGUKLSMgc3RyaW5nIGxpdGVyYWxseS4KLXNlZF9tYWtlX2xpdGVyYWxfcmVnZXg9J3MsW10uW14kXFwqXC9dLFxcJixnJwotCi0jIFNlZCBzdWJzdGl0dXRpb24gdGhhdCBjb252ZXJ0cyBhIHczMiBmaWxlIG5hbWUgb3IgcGF0aAotIyB3aGljaCBjb250YWlucyBmb3J3YXJkIHNsYXNoZXMsIGludG8gb25lIHRoYXQgY29udGFpbnMKLSMgKGVzY2FwZWQpIGJhY2tzbGFzaGVzLiAgQSB2ZXJ5IG5haXZlIGltcGxlbWVudGF0aW9uLgotbHRfc2VkX25haXZlX2JhY2tzbGFzaGlmeT0nc3xcXFxcKnxcXHxnO3N8L3xcXHxnO3N8XFx8XFxcXHxnJwotCi0jIFJlLWBcJyBwYXJhbWV0ZXIgZXhwYW5zaW9ucyBpbiBvdXRwdXQgb2YgZG91YmxlX3F1b3RlX3N1YnN0IHRoYXQgd2VyZQotIyBgXCctZWQgaW4gaW5wdXQgdG8gdGhlIHNhbWUuICBJZiBhbiBvZGQgbnVtYmVyIG9mIGBcJyBwcmVjZWRlZCBhICckJwotIyBpbiBpbnB1dCB0byBkb3VibGVfcXVvdGVfc3Vic3QsIHRoYXQgJyQnIHdhcyBwcm90ZWN0ZWQgZnJvbSBleHBhbnNpb24uCi0jIFNpbmNlIGVhY2ggaW5wdXQgYFwnIGlzIG5vdyB0d28gYFwncywgbG9vayBmb3IgYW55IG51bWJlciBvZiBydW5zIG9mCi0jIGZvdXIgYFwncyBmb2xsb3dlZCBieSB0d28gYFwncyBhbmQgdGhlbiBhICckJy4gIGBcJyB0aGF0ICckJy4KLWJzPSdcXCcKLWJzMj0nXFxcXCcKLWJzND0nXFxcXFxcXFwnCi1kb2xsYXI9J1wkJwotc2VkX2RvdWJsZV9iYWNrc2xhc2g9IlwKLSAgcy8kYnM0LyZcXAotL2cKLSAgcy9eJGJzMiRkb2xsYXIvJGJzJi8KLSAgcy9cXChbXiRic11cXCkkYnMyJGRvbGxhci9cXDEkYnMyJGJzJGRvbGxhci9nCi0gIHMvXG4vL2ciCi0KLSMgU3RhbmRhcmQgb3B0aW9uczoKLW9wdF9kcnlfcnVuPWZhbHNlCi1vcHRfaGVscD1mYWxzZQotb3B0X3F1aWV0PWZhbHNlCi1vcHRfdmVyYm9zZT1mYWxzZQotb3B0X3dhcm5pbmc9OgotCi0jIGZ1bmNfZWNobyBhcmcuLi4KLSMgRWNobyBwcm9ncmFtIG5hbWUgcHJlZml4ZWQgbWVzc2FnZSwgYWxvbmcgd2l0aCB0aGUgY3VycmVudCBtb2RlCi0jIG5hbWUgaWYgaXQgaGFzIGJlZW4gc2V0IHlldC4KLWZ1bmNfZWNobyAoKQotewotICAgICRFQ0hPICIkcHJvZ25hbWU6ICR7b3B0X21vZGUrJG9wdF9tb2RlOiB9JCoiCi19Ci0KLSMgZnVuY192ZXJib3NlIGFyZy4uLgotIyBFY2hvIHByb2dyYW0gbmFtZSBwcmVmaXhlZCBtZXNzYWdlIGluIHZlcmJvc2UgbW9kZSBvbmx5LgotZnVuY192ZXJib3NlICgpCi17Ci0gICAgJG9wdF92ZXJib3NlICYmIGZ1bmNfZWNobyAkezErIiRAIn0KLQotICAgICMgQSBidWcgaW4gYmFzaCBoYWx0cyB0aGUgc2NyaXB0IGlmIHRoZSBsYXN0IGxpbmUgb2YgYSBmdW5jdGlvbgotICAgICMgZmFpbHMgd2hlbiBzZXQgLWUgaXMgaW4gZm9yY2UsIHNvIHdlIG5lZWQgYW5vdGhlciBjb21tYW5kIHRvCi0gICAgIyB3b3JrIGFyb3VuZCB0aGF0OgotICAgIDoKLX0KLQotIyBmdW5jX2VjaG9fYWxsIGFyZy4uLgotIyBJbnZva2UgJEVDSE8gd2l0aCBhbGwgYXJncywgc3BhY2Utc2VwYXJhdGVkLgotZnVuY19lY2hvX2FsbCAoKQotewotICAgICRFQ0hPICIkKiIKLX0KLQotIyBmdW5jX2Vycm9yIGFyZy4uLgotIyBFY2hvIHByb2dyYW0gbmFtZSBwcmVmaXhlZCBtZXNzYWdlIHRvIHN0YW5kYXJkIGVycm9yLgotZnVuY19lcnJvciAoKQotewotICAgICRFQ0hPICIkcHJvZ25hbWU6ICR7b3B0X21vZGUrJG9wdF9tb2RlOiB9IiR7MSsiJEAifSAxPiYyCi19Ci0KLSMgZnVuY193YXJuaW5nIGFyZy4uLgotIyBFY2hvIHByb2dyYW0gbmFtZSBwcmVmaXhlZCB3YXJuaW5nIG1lc3NhZ2UgdG8gc3RhbmRhcmQgZXJyb3IuCi1mdW5jX3dhcm5pbmcgKCkKLXsKLSAgICAkb3B0X3dhcm5pbmcgJiYgJEVDSE8gIiRwcm9nbmFtZTogJHtvcHRfbW9kZSskb3B0X21vZGU6IH13YXJuaW5nOiAiJHsxKyIkQCJ9IDE+JjIKLQotICAgICMgYmFzaCBidWcgYWdhaW46Ci0gICAgOgotfQotCi0jIGZ1bmNfZmF0YWxfZXJyb3IgYXJnLi4uCi0jIEVjaG8gcHJvZ3JhbSBuYW1lIHByZWZpeGVkIG1lc3NhZ2UgdG8gc3RhbmRhcmQgZXJyb3IsIGFuZCBleGl0LgotZnVuY19mYXRhbF9lcnJvciAoKQotewotICAgIGZ1bmNfZXJyb3IgJHsxKyIkQCJ9Ci0gICAgZXhpdCAkRVhJVF9GQUlMVVJFCi19Ci0KLSMgZnVuY19mYXRhbF9oZWxwIGFyZy4uLgotIyBFY2hvIHByb2dyYW0gbmFtZSBwcmVmaXhlZCBtZXNzYWdlIHRvIHN0YW5kYXJkIGVycm9yLCBmb2xsb3dlZCBieQotIyBhIGhlbHAgaGludCwgYW5kIGV4aXQuCi1mdW5jX2ZhdGFsX2hlbHAgKCkKLXsKLSAgICBmdW5jX2Vycm9yICR7MSsiJEAifQotICAgIGZ1bmNfZmF0YWxfZXJyb3IgIiRoZWxwIgotfQotaGVscD0iVHJ5IFxgJHByb2duYW1lIC0taGVscCcgZm9yIG1vcmUgaW5mb3JtYXRpb24uIiAgIyMgZGVmYXVsdAotCi0KLSMgZnVuY19ncmVwIGV4cHJlc3Npb24gZmlsZW5hbWUKLSMgQ2hlY2sgd2hldGhlciBFWFBSRVNTSU9OIG1hdGNoZXMgYW55IGxpbmUgb2YgRklMRU5BTUUsIHdpdGhvdXQgb3V0cHV0LgotZnVuY19ncmVwICgpCi17Ci0gICAgJEdSRVAgIiQxIiAiJDIiID4vZGV2L251bGwgMj4mMQotfQotCi0KLSMgZnVuY19ta2Rpcl9wIGRpcmVjdG9yeS1wYXRoCi0jIE1ha2Ugc3VyZSB0aGUgZW50aXJlIHBhdGggdG8gRElSRUNUT1JZLVBBVEggaXMgYXZhaWxhYmxlLgotZnVuY19ta2Rpcl9wICgpCi17Ci0gICAgbXlfZGlyZWN0b3J5X3BhdGg9IiQxIgotICAgIG15X2Rpcl9saXN0PQotCi0gICAgaWYgdGVzdCAtbiAiJG15X2RpcmVjdG9yeV9wYXRoIiAmJiB0ZXN0ICIkb3B0X2RyeV9ydW4iICE9ICI6IjsgdGhlbgotCi0gICAgICAjIFByb3RlY3QgZGlyZWN0b3J5IG5hbWVzIHN0YXJ0aW5nIHdpdGggYC0nCi0gICAgICBjYXNlICRteV9kaXJlY3RvcnlfcGF0aCBpbgotICAgICAgICAtKikgbXlfZGlyZWN0b3J5X3BhdGg9Ii4vJG15X2RpcmVjdG9yeV9wYXRoIiA7OwotICAgICAgZXNhYwotCi0gICAgICAjIFdoaWxlIHNvbWUgcG9ydGlvbiBvZiBESVIgZG9lcyBub3QgeWV0IGV4aXN0Li4uCi0gICAgICB3aGlsZSB0ZXN0ICEgLWQgIiRteV9kaXJlY3RvcnlfcGF0aCI7IGRvCi0gICAgICAgICMgLi4ubWFrZSBhIGxpc3QgaW4gdG9wbW9zdCBmaXJzdCBvcmRlci4gIFVzZSBhIGNvbG9uIGRlbGltaXRlZAotCSMgbGlzdCBpbmNhc2Ugc29tZSBwb3J0aW9uIG9mIHBhdGggY29udGFpbnMgd2hpdGVzcGFjZS4KLSAgICAgICAgbXlfZGlyX2xpc3Q9IiRteV9kaXJlY3RvcnlfcGF0aDokbXlfZGlyX2xpc3QiCi0KLSAgICAgICAgIyBJZiB0aGUgbGFzdCBwb3J0aW9uIGFkZGVkIGhhcyBubyBzbGFzaCBpbiBpdCwgdGhlIGxpc3QgaXMgZG9uZQotICAgICAgICBjYXNlICRteV9kaXJlY3RvcnlfcGF0aCBpbiAqLyopIDs7ICopIGJyZWFrIDs7IGVzYWMKLQotICAgICAgICAjIC4uLm90aGVyd2lzZSB0aHJvdyBhd2F5IHRoZSBjaGlsZCBkaXJlY3RvcnkgYW5kIGxvb3AKLSAgICAgICAgbXlfZGlyZWN0b3J5X3BhdGg9YCRFQ0hPICIkbXlfZGlyZWN0b3J5X3BhdGgiIHwgJFNFRCAtZSAiJGRpcm5hbWUiYAotICAgICAgZG9uZQotICAgICAgbXlfZGlyX2xpc3Q9YCRFQ0hPICIkbXlfZGlyX2xpc3QiIHwgJFNFRCAncyw6KiQsLCdgCi0KLSAgICAgIHNhdmVfbWtkaXJfcF9JRlM9IiRJRlMiOyBJRlM9JzonCi0gICAgICBmb3IgbXlfZGlyIGluICRteV9kaXJfbGlzdDsgZG8KLQlJRlM9IiRzYXZlX21rZGlyX3BfSUZTIgotICAgICAgICAjIG1rZGlyIGNhbiBmYWlsIHdpdGggYSBgRmlsZSBleGlzdCcgZXJyb3IgaWYgdHdvIHByb2Nlc3NlcwotICAgICAgICAjIHRyeSB0byBjcmVhdGUgb25lIG9mIHRoZSBkaXJlY3RvcmllcyBjb25jdXJyZW50bHkuICBEb24ndAotICAgICAgICAjIHN0b3AgaW4gdGhhdCBjYXNlIQotICAgICAgICAkTUtESVIgIiRteV9kaXIiIDI+L2Rldi9udWxsIHx8IDoKLSAgICAgIGRvbmUKLSAgICAgIElGUz0iJHNhdmVfbWtkaXJfcF9JRlMiCi0KLSAgICAgICMgQmFpbCBvdXQgaWYgd2UgKG9yIHNvbWUgb3RoZXIgcHJvY2VzcykgZmFpbGVkIHRvIGNyZWF0ZSBhIGRpcmVjdG9yeS4KLSAgICAgIHRlc3QgLWQgIiRteV9kaXJlY3RvcnlfcGF0aCIgfHwgXAotICAgICAgICBmdW5jX2ZhdGFsX2Vycm9yICJGYWlsZWQgdG8gY3JlYXRlIFxgJDEnIgotICAgIGZpCi19Ci0KLQotIyBmdW5jX21rdGVtcGRpciBbc3RyaW5nXQotIyBNYWtlIGEgdGVtcG9yYXJ5IGRpcmVjdG9yeSB0aGF0IHdvbid0IGNsYXNoIHdpdGggb3RoZXIgcnVubmluZwotIyBsaWJ0b29sIHByb2Nlc3NlcywgYW5kIGF2b2lkcyByYWNlIGNvbmRpdGlvbnMgaWYgcG9zc2libGUuICBJZgotIyBnaXZlbiwgU1RSSU5HIGlzIHRoZSBiYXNlbmFtZSBmb3IgdGhhdCBkaXJlY3RvcnkuCi1mdW5jX21rdGVtcGRpciAoKQotewotICAgIG15X3RlbXBsYXRlPSIke1RNUERJUi0vdG1wfS8kezEtJHByb2duYW1lfSIKLQotICAgIGlmIHRlc3QgIiRvcHRfZHJ5X3J1biIgPSAiOiI7IHRoZW4KLSAgICAgICMgUmV0dXJuIGEgZGlyZWN0b3J5IG5hbWUsIGJ1dCBkb24ndCBjcmVhdGUgaXQgaW4gZHJ5LXJ1biBtb2RlCi0gICAgICBteV90bXBkaXI9IiR7bXlfdGVtcGxhdGV9LSQkIgotICAgIGVsc2UKLQotICAgICAgIyBJZiBta3RlbXAgd29ya3MsIHVzZSB0aGF0IGZpcnN0IGFuZCBmb3JlbW9zdAotICAgICAgbXlfdG1wZGlyPWBta3RlbXAgLWQgIiR7bXlfdGVtcGxhdGV9LVhYWFhYWFhYIiAyPi9kZXYvbnVsbGAKLQotICAgICAgaWYgdGVzdCAhIC1kICIkbXlfdG1wZGlyIjsgdGhlbgotICAgICAgICAjIEZhaWxpbmcgdGhhdCwgYXQgbGVhc3QgdHJ5IGFuZCB1c2UgJFJBTkRPTSB0byBhdm9pZCBhIHJhY2UKLSAgICAgICAgbXlfdG1wZGlyPSIke215X3RlbXBsYXRlfS0ke1JBTkRPTS0wfSQkIgotCi0gICAgICAgIHNhdmVfbWt0ZW1wZGlyX3VtYXNrPWB1bWFza2AKLSAgICAgICAgdW1hc2sgMDA3NwotICAgICAgICAkTUtESVIgIiRteV90bXBkaXIiCi0gICAgICAgIHVtYXNrICRzYXZlX21rdGVtcGRpcl91bWFzawotICAgICAgZmkKLQotICAgICAgIyBJZiB3ZSdyZSBub3QgaW4gZHJ5LXJ1biBtb2RlLCBib21iIG91dCBvbiBmYWlsdXJlCi0gICAgICB0ZXN0IC1kICIkbXlfdG1wZGlyIiB8fCBcCi0gICAgICAgIGZ1bmNfZmF0YWxfZXJyb3IgImNhbm5vdCBjcmVhdGUgdGVtcG9yYXJ5IGRpcmVjdG9yeSBcYCRteV90bXBkaXInIgotICAgIGZpCi0KLSAgICAkRUNITyAiJG15X3RtcGRpciIKLX0KLQotCi0jIGZ1bmNfcXVvdGVfZm9yX2V2YWwgYXJnCi0jIEFlc3RoZXRpY2FsbHkgcXVvdGUgQVJHIHRvIGJlIGV2YWxlZCBsYXRlci4KLSMgVGhpcyBmdW5jdGlvbiByZXR1cm5zIHR3byB2YWx1ZXM6IEZVTkNfUVVPVEVfRk9SX0VWQUxfUkVTVUxUCi0jIGlzIGRvdWJsZS1xdW90ZWQsIHN1aXRhYmxlIGZvciBhIHN1YnNlcXVlbnQgZXZhbCwgd2hlcmVhcwotIyBGVU5DX1FVT1RFX0ZPUl9FVkFMX1VOUVVPVEVEX1JFU1VMVCBoYXMgbWVyZWx5IGFsbCBjaGFyYWN0ZXJzCi0jIHdoaWNoIGFyZSBzdGlsbCBhY3RpdmUgd2l0aGluIGRvdWJsZSBxdW90ZXMgYmFja3NsYXNoaWZpZWQuCi1mdW5jX3F1b3RlX2Zvcl9ldmFsICgpCi17Ci0gICAgY2FzZSAkMSBpbgotICAgICAgKltcXFxgXCJcJF0qKQotCWZ1bmNfcXVvdGVfZm9yX2V2YWxfdW5xdW90ZWRfcmVzdWx0PWAkRUNITyAiJDEiIHwgJFNFRCAiJHNlZF9xdW90ZV9zdWJzdCJgIDs7Ci0gICAgICAqKQotICAgICAgICBmdW5jX3F1b3RlX2Zvcl9ldmFsX3VucXVvdGVkX3Jlc3VsdD0iJDEiIDs7Ci0gICAgZXNhYwotCi0gICAgY2FzZSAkZnVuY19xdW90ZV9mb3JfZXZhbF91bnF1b3RlZF9yZXN1bHQgaW4KLSAgICAgICMgRG91YmxlLXF1b3RlIGFyZ3MgY29udGFpbmluZyBzaGVsbCBtZXRhY2hhcmFjdGVycyB0byBkZWxheQotICAgICAgIyB3b3JkIHNwbGl0dGluZywgY29tbWFuZCBzdWJzdGl0dXRpb24gYW5kIGFuZCB2YXJpYWJsZQotICAgICAgIyBleHBhbnNpb24gZm9yIGEgc3Vic2VxdWVudCBldmFsLgotICAgICAgIyBNYW55IEJvdXJuZSBzaGVsbHMgY2Fubm90IGhhbmRsZSBjbG9zZSBicmFja2V0cyBjb3JyZWN0bHkKLSAgICAgICMgaW4gc2NhbiBzZXRzLCBzbyB3ZSBzcGVjaWZ5IGl0IHNlcGFyYXRlbHkuCi0gICAgICAqW1xbXH5cI1xeXCZcKlwoXClce1x9XHxcO1w8XD5cP1wnXCBcCV0qfCpdKnwiIikKLSAgICAgICAgZnVuY19xdW90ZV9mb3JfZXZhbF9yZXN1bHQ9IlwiJGZ1bmNfcXVvdGVfZm9yX2V2YWxfdW5xdW90ZWRfcmVzdWx0XCIiCi0gICAgICAgIDs7Ci0gICAgICAqKQotICAgICAgICBmdW5jX3F1b3RlX2Zvcl9ldmFsX3Jlc3VsdD0iJGZ1bmNfcXVvdGVfZm9yX2V2YWxfdW5xdW90ZWRfcmVzdWx0IgotICAgIGVzYWMKLX0KLQotCi0jIGZ1bmNfcXVvdGVfZm9yX2V4cGFuZCBhcmcKLSMgQWVzdGhldGljYWxseSBxdW90ZSBBUkcgdG8gYmUgZXZhbGVkIGxhdGVyOyBzYW1lIGFzIGFib3ZlLAotIyBidXQgZG8gbm90IHF1b3RlIHZhcmlhYmxlIHJlZmVyZW5jZXMuCi1mdW5jX3F1b3RlX2Zvcl9leHBhbmQgKCkKLXsKLSAgICBjYXNlICQxIGluCi0gICAgICAqW1xcXGBcIl0qKQotCW15X2FyZz1gJEVDSE8gIiQxIiB8ICRTRUQgXAotCSAgICAtZSAiJGRvdWJsZV9xdW90ZV9zdWJzdCIgLWUgIiRzZWRfZG91YmxlX2JhY2tzbGFzaCJgIDs7Ci0gICAgICAqKQotICAgICAgICBteV9hcmc9IiQxIiA7OwotICAgIGVzYWMKLQotICAgIGNhc2UgJG15X2FyZyBpbgotICAgICAgIyBEb3VibGUtcXVvdGUgYXJncyBjb250YWluaW5nIHNoZWxsIG1ldGFjaGFyYWN0ZXJzIHRvIGRlbGF5Ci0gICAgICAjIHdvcmQgc3BsaXR0aW5nIGFuZCBjb21tYW5kIHN1YnN0aXR1dGlvbiBmb3IgYSBzdWJzZXF1ZW50IGV2YWwuCi0gICAgICAjIE1hbnkgQm91cm5lIHNoZWxscyBjYW5ub3QgaGFuZGxlIGNsb3NlIGJyYWNrZXRzIGNvcnJlY3RseQotICAgICAgIyBpbiBzY2FuIHNldHMsIHNvIHdlIHNwZWNpZnkgaXQgc2VwYXJhdGVseS4KLSAgICAgICpbXFtcflwjXF5cJlwqXChcKVx7XH1cfFw7XDxcPlw/XCdcIFwJXSp8Kl0qfCIiKQotICAgICAgICBteV9hcmc9IlwiJG15X2FyZ1wiIgotICAgICAgICA7OwotICAgIGVzYWMKLQotICAgIGZ1bmNfcXVvdGVfZm9yX2V4cGFuZF9yZXN1bHQ9IiRteV9hcmciCi19Ci0KLQotIyBmdW5jX3Nob3dfZXZhbCBjbWQgW2ZhaWxfZXhwXQotIyBVbmxlc3Mgb3B0X3NpbGVudCBpcyB0cnVlLCB0aGVuIG91dHB1dCBDTUQuICBUaGVuLCBpZiBvcHRfZHJ5cnVuIGlzCi0jIG5vdCB0cnVlLCBldmFsdWF0ZSBDTUQuICBJZiB0aGUgZXZhbHVhdGlvbiBvZiBDTUQgZmFpbHMsIGFuZCBGQUlMX0VYUAotIyBpcyBnaXZlbiwgdGhlbiBldmFsdWF0ZSBpdC4KLWZ1bmNfc2hvd19ldmFsICgpCi17Ci0gICAgbXlfY21kPSIkMSIKLSAgICBteV9mYWlsX2V4cD0iJHsyLTp9IgotCi0gICAgJHtvcHRfc2lsZW50LWZhbHNlfSB8fCB7Ci0gICAgICBmdW5jX3F1b3RlX2Zvcl9leHBhbmQgIiRteV9jbWQiCi0gICAgICBldmFsICJmdW5jX2VjaG8gJGZ1bmNfcXVvdGVfZm9yX2V4cGFuZF9yZXN1bHQiCi0gICAgfQotCi0gICAgaWYgJHtvcHRfZHJ5X3J1bi1mYWxzZX07IHRoZW4gOjsgZWxzZQotICAgICAgZXZhbCAiJG15X2NtZCIKLSAgICAgIG15X3N0YXR1cz0kPwotICAgICAgaWYgdGVzdCAiJG15X3N0YXR1cyIgLWVxIDA7IHRoZW4gOjsgZWxzZQotCWV2YWwgIihleGl0ICRteV9zdGF0dXMpOyAkbXlfZmFpbF9leHAiCi0gICAgICBmaQotICAgIGZpCi19Ci0KLQotIyBmdW5jX3Nob3dfZXZhbF9sb2NhbGUgY21kIFtmYWlsX2V4cF0KLSMgVW5sZXNzIG9wdF9zaWxlbnQgaXMgdHJ1ZSwgdGhlbiBvdXRwdXQgQ01ELiAgVGhlbiwgaWYgb3B0X2RyeXJ1biBpcwotIyBub3QgdHJ1ZSwgZXZhbHVhdGUgQ01ELiAgSWYgdGhlIGV2YWx1YXRpb24gb2YgQ01EIGZhaWxzLCBhbmQgRkFJTF9FWFAKLSMgaXMgZ2l2ZW4sIHRoZW4gZXZhbHVhdGUgaXQuICBVc2UgdGhlIHNhdmVkIGxvY2FsZSBmb3IgZXZhbHVhdGlvbi4KLWZ1bmNfc2hvd19ldmFsX2xvY2FsZSAoKQotewotICAgIG15X2NtZD0iJDEiCi0gICAgbXlfZmFpbF9leHA9IiR7Mi06fSIKLQotICAgICR7b3B0X3NpbGVudC1mYWxzZX0gfHwgewotICAgICAgZnVuY19xdW90ZV9mb3JfZXhwYW5kICIkbXlfY21kIgotICAgICAgZXZhbCAiZnVuY19lY2hvICRmdW5jX3F1b3RlX2Zvcl9leHBhbmRfcmVzdWx0IgotICAgIH0KLQotICAgIGlmICR7b3B0X2RyeV9ydW4tZmFsc2V9OyB0aGVuIDo7IGVsc2UKLSAgICAgIGV2YWwgIiRsdF91c2VyX2xvY2FsZQotCSAgICAkbXlfY21kIgotICAgICAgbXlfc3RhdHVzPSQ/Ci0gICAgICBldmFsICIkbHRfc2FmZV9sb2NhbGUiCi0gICAgICBpZiB0ZXN0ICIkbXlfc3RhdHVzIiAtZXEgMDsgdGhlbiA6OyBlbHNlCi0JZXZhbCAiKGV4aXQgJG15X3N0YXR1cyk7ICRteV9mYWlsX2V4cCIKLSAgICAgIGZpCi0gICAgZmkKLX0KLQotIyBmdW5jX3RyX3NoCi0jIFR1cm4gJDEgaW50byBhIHN0cmluZyBzdWl0YWJsZSBmb3IgYSBzaGVsbCB2YXJpYWJsZSBuYW1lLgotIyBSZXN1bHQgaXMgc3RvcmVkIGluICRmdW5jX3RyX3NoX3Jlc3VsdC4gIEFsbCBjaGFyYWN0ZXJzCi0jIG5vdCBpbiB0aGUgc2V0IGEtekEtWjAtOV8gYXJlIHJlcGxhY2VkIHdpdGggJ18nLiBGdXJ0aGVyLAotIyBpZiAkMSBiZWdpbnMgd2l0aCBhIGRpZ2l0LCBhICdfJyBpcyBwcmVwZW5kZWQgYXMgd2VsbC4KLWZ1bmNfdHJfc2ggKCkKLXsKLSAgY2FzZSAkMSBpbgotICBbMC05XSogfCAqWyFhLXpBLVowLTlfXSopCi0gICAgZnVuY190cl9zaF9yZXN1bHQ9YCRFQ0hPICIkMSIgfCAkU0VEICdzL15cKFswLTldXCkvX1wxLzsgcy9bXmEtekEtWjAtOV9dL18vZydgCi0gICAgOzsKLSAgKiApCi0gICAgZnVuY190cl9zaF9yZXN1bHQ9JDEKLSAgICA7OwotICBlc2FjCi19Ci0KLQotIyBmdW5jX3ZlcnNpb24KLSMgRWNobyB2ZXJzaW9uIG1lc3NhZ2UgdG8gc3RhbmRhcmQgb3V0cHV0IGFuZCBleGl0LgotZnVuY192ZXJzaW9uICgpCi17Ci0gICAgJG9wdF9kZWJ1ZwotCi0gICAgJFNFRCAtbiAnLyhDKS8hYiBnbwotCTptb3JlCi0JL1wuLyF7Ci0JICBOCi0JICBzL1xuIyAvIC8KLQkgIGIgbW9yZQotCX0KLQk6Z28KLQkvXiMgJyRQUk9HUkFNJyAoR05VIC8sLyMgd2FycmFudHk7IC8gewotICAgICAgICBzL14jIC8vCi0Jcy9eIyAqJC8vCi0gICAgICAgIHMvXCgoQylcKVsgMC05LC1dKlwoIFsxLTldWzAtOV0qXCkvXDFcMi8KLSAgICAgICAgcAotICAgICB9JyA8ICIkcHJvZ3BhdGgiCi0gICAgIGV4aXQgJD8KLX0KLQotIyBmdW5jX3VzYWdlCi0jIEVjaG8gc2hvcnQgaGVscCBtZXNzYWdlIHRvIHN0YW5kYXJkIG91dHB1dCBhbmQgZXhpdC4KLWZ1bmNfdXNhZ2UgKCkKLXsKLSAgICAkb3B0X2RlYnVnCi0KLSAgICAkU0VEIC1uICcvXiMgVXNhZ2U6LywvXiMgICouKi0taGVscC8gewotICAgICAgICBzL14jIC8vCi0Jcy9eIyAqJC8vCi0Jcy9cJHByb2duYW1lLyckcHJvZ25hbWUnLwotCXAKLSAgICB9JyA8ICIkcHJvZ3BhdGgiCi0gICAgZWNobwotICAgICRFQ0hPICJydW4gXGAkcHJvZ25hbWUgLS1oZWxwIHwgbW9yZScgZm9yIGZ1bGwgdXNhZ2UiCi0gICAgZXhpdCAkPwotfQotCi0jIGZ1bmNfaGVscCBbTk9FWElUXQotIyBFY2hvIGxvbmcgaGVscCBtZXNzYWdlIHRvIHN0YW5kYXJkIG91dHB1dCBhbmQgZXhpdCwKLSMgdW5sZXNzICdub2V4aXQnIGlzIHBhc3NlZCBhcyBhcmd1bWVudC4KLWZ1bmNfaGVscCAoKQotewotICAgICRvcHRfZGVidWcKLQotICAgICRTRUQgLW4gJy9eIyBVc2FnZTovLC8jIFJlcG9ydCBidWdzIHRvLyB7Ci0JOnByaW50Ci0gICAgICAgIHMvXiMgLy8KLQlzL14jICokLy8KLQlzKlwkcHJvZ25hbWUqJyRwcm9nbmFtZScqCi0JcypcJGhvc3QqJyIkaG9zdCInKgotCXMqXCRTSEVMTConIiRTSEVMTCInKgotCXMqXCRMVENDKiciJExUQ0MiJyoKLQlzKlwkTFRDRkxBR1MqJyIkTFRDRkxBR1MiJyoKLQlzKlwkTEQqJyIkTEQiJyoKLQlzL1wkd2l0aF9nbnVfbGQvJyIkd2l0aF9nbnVfbGQiJy8KLQlzL1wkYXV0b21ha2VfdmVyc2lvbi8nImAoYXV0b21ha2UgLS12ZXJzaW9uKSAyPi9kZXYvbnVsbCB8JFNFRCAxcWAiJy8KLQlzL1wkYXV0b2NvbmZfdmVyc2lvbi8nImAoYXV0b2NvbmYgLS12ZXJzaW9uKSAyPi9kZXYvbnVsbCB8JFNFRCAxcWAiJy8KLQlwCi0JZAotICAgICB9Ci0gICAgIC9eIyAuKiBob21lIHBhZ2U6L2IgcHJpbnQKLSAgICAgL14jIEdlbmVyYWwgaGVscCB1c2luZy9iIHByaW50Ci0gICAgICcgPCAiJHByb2dwYXRoIgotICAgIHJldD0kPwotICAgIGlmIHRlc3QgLXogIiQxIjsgdGhlbgotICAgICAgZXhpdCAkcmV0Ci0gICAgZmkKLX0KLQotIyBmdW5jX21pc3NpbmdfYXJnIGFyZ25hbWUKLSMgRWNobyBwcm9ncmFtIG5hbWUgcHJlZml4ZWQgbWVzc2FnZSB0byBzdGFuZGFyZCBlcnJvciBhbmQgc2V0IGdsb2JhbAotIyBleGl0X2NtZC4KLWZ1bmNfbWlzc2luZ19hcmcgKCkKLXsKLSAgICAkb3B0X2RlYnVnCi0KLSAgICBmdW5jX2Vycm9yICJtaXNzaW5nIGFyZ3VtZW50IGZvciAkMS4iCi0gICAgZXhpdF9jbWQ9ZXhpdAotfQotCi0KLSMgZnVuY19zcGxpdF9zaG9ydF9vcHQgc2hvcnRvcHQKLSMgU2V0IGZ1bmNfc3BsaXRfc2hvcnRfb3B0X25hbWUgYW5kIGZ1bmNfc3BsaXRfc2hvcnRfb3B0X2FyZyBzaGVsbAotIyB2YXJpYWJsZXMgYWZ0ZXIgc3BsaXR0aW5nIFNIT1JUT1BUIGFmdGVyIHRoZSAybmQgY2hhcmFjdGVyLgotZnVuY19zcGxpdF9zaG9ydF9vcHQgKCkKLXsKLSAgICBteV9zZWRfc2hvcnRfb3B0PScxcy9eXCguLlwpLiokL1wxLztxJwotICAgIG15X3NlZF9zaG9ydF9yZXN0PScxcy9eLi5cKC4qXCkkL1wxLztxJwotCi0gICAgZnVuY19zcGxpdF9zaG9ydF9vcHRfbmFtZT1gJEVDSE8gIiQxIiB8ICRTRUQgIiRteV9zZWRfc2hvcnRfb3B0ImAKLSAgICBmdW5jX3NwbGl0X3Nob3J0X29wdF9hcmc9YCRFQ0hPICIkMSIgfCAkU0VEICIkbXlfc2VkX3Nob3J0X3Jlc3QiYAotfSAjIGZ1bmNfc3BsaXRfc2hvcnRfb3B0IG1heSBiZSByZXBsYWNlZCBieSBleHRlbmRlZCBzaGVsbCBpbXBsZW1lbnRhdGlvbgotCi0KLSMgZnVuY19zcGxpdF9sb25nX29wdCBsb25nb3B0Ci0jIFNldCBmdW5jX3NwbGl0X2xvbmdfb3B0X25hbWUgYW5kIGZ1bmNfc3BsaXRfbG9uZ19vcHRfYXJnIHNoZWxsCi0jIHZhcmlhYmxlcyBhZnRlciBzcGxpdHRpbmcgTE9OR09QVCBhdCB0aGUgYD0nIHNpZ24uCi1mdW5jX3NwbGl0X2xvbmdfb3B0ICgpCi17Ci0gICAgbXlfc2VkX2xvbmdfb3B0PScxcy9eXCgtLVtePV0qXCk9LiovXDEvO3EnCi0gICAgbXlfc2VkX2xvbmdfYXJnPScxcy9eLS1bXj1dKj0vLycKLQotICAgIGZ1bmNfc3BsaXRfbG9uZ19vcHRfbmFtZT1gJEVDSE8gIiQxIiB8ICRTRUQgIiRteV9zZWRfbG9uZ19vcHQiYAotICAgIGZ1bmNfc3BsaXRfbG9uZ19vcHRfYXJnPWAkRUNITyAiJDEiIHwgJFNFRCAiJG15X3NlZF9sb25nX2FyZyJgCi19ICMgZnVuY19zcGxpdF9sb25nX29wdCBtYXkgYmUgcmVwbGFjZWQgYnkgZXh0ZW5kZWQgc2hlbGwgaW1wbGVtZW50YXRpb24KLQotZXhpdF9jbWQ9OgotCi0KLQotCi0KLW1hZ2ljPSIlJSVNQUdJQyB2YXJpYWJsZSUlJSIKLW1hZ2ljX2V4ZT0iJSUlTUFHSUMgRVhFIHZhcmlhYmxlJSUlIgotCi0jIEdsb2JhbCB2YXJpYWJsZXMuCi1ub25vcHQ9Ci1wcmVzZXJ2ZV9hcmdzPQotbG8ybz0icy9cXC5sb1wkLy4ke29iamV4dH0vIgotbzJsbz0icy9cXC4ke29iamV4dH1cJC8ubG8vIgotZXh0cmFjdGVkX2FyY2hpdmVzPQotZXh0cmFjdGVkX3NlcmlhbD0wCi0KLSMgSWYgdGhpcyB2YXJpYWJsZSBpcyBzZXQgaW4gYW55IG9mIHRoZSBhY3Rpb25zLCB0aGUgY29tbWFuZCBpbiBpdAotIyB3aWxsIGJlIGV4ZWNlZCBhdCB0aGUgZW5kLiAgVGhpcyBwcmV2ZW50cyBoZXJlLWRvY3VtZW50cyBmcm9tIGJlaW5nCi0jIGxlZnQgb3ZlciBieSBzaGVsbHMuCi1leGVjX2NtZD0KLQotIyBmdW5jX2FwcGVuZCB2YXIgdmFsdWUKLSMgQXBwZW5kIFZBTFVFIHRvIHRoZSBlbmQgb2Ygc2hlbGwgdmFyaWFibGUgVkFSLgotZnVuY19hcHBlbmQgKCkKLXsKLSAgICBldmFsICIkezF9PVwkJHsxfVwkezJ9IgotfSAjIGZ1bmNfYXBwZW5kIG1heSBiZSByZXBsYWNlZCBieSBleHRlbmRlZCBzaGVsbCBpbXBsZW1lbnRhdGlvbgotCi0jIGZ1bmNfYXBwZW5kX3F1b3RlZCB2YXIgdmFsdWUKLSMgUXVvdGUgVkFMVUUgYW5kIGFwcGVuZCB0byB0aGUgZW5kIG9mIHNoZWxsIHZhcmlhYmxlIFZBUiwgc2VwYXJhdGVkCi0jIGJ5IGEgc3BhY2UuCi1mdW5jX2FwcGVuZF9xdW90ZWQgKCkKLXsKLSAgICBmdW5jX3F1b3RlX2Zvcl9ldmFsICIkezJ9IgotICAgIGV2YWwgIiR7MX09XCQkezF9XFwgXCRmdW5jX3F1b3RlX2Zvcl9ldmFsX3Jlc3VsdCIKLX0gIyBmdW5jX2FwcGVuZF9xdW90ZWQgbWF5IGJlIHJlcGxhY2VkIGJ5IGV4dGVuZGVkIHNoZWxsIGltcGxlbWVudGF0aW9uCi0KLQotIyBmdW5jX2FyaXRoIGFyaXRobWV0aWMtdGVybS4uLgotZnVuY19hcml0aCAoKQotewotICAgIGZ1bmNfYXJpdGhfcmVzdWx0PWBleHByICIke0B9ImAKLX0gIyBmdW5jX2FyaXRoIG1heSBiZSByZXBsYWNlZCBieSBleHRlbmRlZCBzaGVsbCBpbXBsZW1lbnRhdGlvbgotCi0KLSMgZnVuY19sZW4gc3RyaW5nCi0jIFNUUklORyBtYXkgbm90IHN0YXJ0IHdpdGggYSBoeXBoZW4uCi1mdW5jX2xlbiAoKQotewotICAgIGZ1bmNfbGVuX3Jlc3VsdD1gZXhwciAiJHsxfSIgOiAiLioiIDI+L2Rldi9udWxsIHx8IGVjaG8gJG1heF9jbWRfbGVuYAotfSAjIGZ1bmNfbGVuIG1heSBiZSByZXBsYWNlZCBieSBleHRlbmRlZCBzaGVsbCBpbXBsZW1lbnRhdGlvbgotCi0KLSMgZnVuY19sbzJvIG9iamVjdAotZnVuY19sbzJvICgpCi17Ci0gICAgZnVuY19sbzJvX3Jlc3VsdD1gJEVDSE8gIiR7MX0iIHwgJFNFRCAiJGxvMm8iYAotfSAjIGZ1bmNfbG8ybyBtYXkgYmUgcmVwbGFjZWQgYnkgZXh0ZW5kZWQgc2hlbGwgaW1wbGVtZW50YXRpb24KLQotCi0jIGZ1bmNfeGZvcm0gbGlib2JqLW9yLXNvdXJjZQotZnVuY194Zm9ybSAoKQotewotICAgIGZ1bmNfeGZvcm1fcmVzdWx0PWAkRUNITyAiJHsxfSIgfCAkU0VEICdzL1wuW14uXSokLy5sby8nYAotfSAjIGZ1bmNfeGZvcm0gbWF5IGJlIHJlcGxhY2VkIGJ5IGV4dGVuZGVkIHNoZWxsIGltcGxlbWVudGF0aW9uCi0KLQotIyBmdW5jX2ZhdGFsX2NvbmZpZ3VyYXRpb24gYXJnLi4uCi0jIEVjaG8gcHJvZ3JhbSBuYW1lIHByZWZpeGVkIG1lc3NhZ2UgdG8gc3RhbmRhcmQgZXJyb3IsIGZvbGxvd2VkIGJ5Ci0jIGEgY29uZmlndXJhdGlvbiBmYWlsdXJlIGhpbnQsIGFuZCBleGl0LgotZnVuY19mYXRhbF9jb25maWd1cmF0aW9uICgpCi17Ci0gICAgZnVuY19lcnJvciAkezErIiRAIn0KLSAgICBmdW5jX2Vycm9yICJTZWUgdGhlICRQQUNLQUdFIGRvY3VtZW50YXRpb24gZm9yIG1vcmUgaW5mb3JtYXRpb24uIgotICAgIGZ1bmNfZmF0YWxfZXJyb3IgIkZhdGFsIGNvbmZpZ3VyYXRpb24gZXJyb3IuIgotfQotCi0KLSMgZnVuY19jb25maWcKLSMgRGlzcGxheSB0aGUgY29uZmlndXJhdGlvbiBmb3IgYWxsIHRoZSB0YWdzIGluIHRoaXMgc2NyaXB0LgotZnVuY19jb25maWcgKCkKLXsKLSAgICByZV9iZWdpbmNmPSdeIyAjIyMgQkVHSU4gTElCVE9PTCcKLSAgICByZV9lbmRjZj0nXiMgIyMjIEVORCBMSUJUT09MJwotCi0gICAgIyBEZWZhdWx0IGNvbmZpZ3VyYXRpb24uCi0gICAgJFNFRCAiMSwvJHJlX2JlZ2luY2YgQ09ORklHL2Q7LyRyZV9lbmRjZiBDT05GSUcvLFwkZCIgPCAiJHByb2dwYXRoIgotCi0gICAgIyBOb3cgcHJpbnQgdGhlIGNvbmZpZ3VyYXRpb25zIGZvciB0aGUgdGFncy4KLSAgICBmb3IgdGFnbmFtZSBpbiAkdGFnbGlzdDsgZG8KLSAgICAgICRTRUQgLW4gIi8kcmVfYmVnaW5jZiBUQUcgQ09ORklHOiAkdGFnbmFtZVwkLywvJHJlX2VuZGNmIFRBRyBDT05GSUc6ICR0YWduYW1lXCQvcCIgPCAiJHByb2dwYXRoIgotICAgIGRvbmUKLQotICAgIGV4aXQgJD8KLX0KLQotIyBmdW5jX2ZlYXR1cmVzCi0jIERpc3BsYXkgdGhlIGZlYXR1cmVzIHN1cHBvcnRlZCBieSB0aGlzIHNjcmlwdC4KLWZ1bmNfZmVhdHVyZXMgKCkKLXsKLSAgICBlY2hvICJob3N0OiAkaG9zdCIKLSAgICBpZiB0ZXN0ICIkYnVpbGRfbGlidG9vbF9saWJzIiA9IHllczsgdGhlbgotICAgICAgZWNobyAiZW5hYmxlIHNoYXJlZCBsaWJyYXJpZXMiCi0gICAgZWxzZQotICAgICAgZWNobyAiZGlzYWJsZSBzaGFyZWQgbGlicmFyaWVzIgotICAgIGZpCi0gICAgaWYgdGVzdCAiJGJ1aWxkX29sZF9saWJzIiA9IHllczsgdGhlbgotICAgICAgZWNobyAiZW5hYmxlIHN0YXRpYyBsaWJyYXJpZXMiCi0gICAgZWxzZQotICAgICAgZWNobyAiZGlzYWJsZSBzdGF0aWMgbGlicmFyaWVzIgotICAgIGZpCi0KLSAgICBleGl0ICQ/Ci19Ci0KLSMgZnVuY19lbmFibGVfdGFnIHRhZ25hbWUKLSMgVmVyaWZ5IHRoYXQgVEFHTkFNRSBpcyB2YWxpZCwgYW5kIGVpdGhlciBmbGFnIGFuIGVycm9yIGFuZCBleGl0LCBvcgotIyBlbmFibGUgdGhlIFRBR05BTUUgdGFnLiAgV2UgYWxzbyBhZGQgVEFHTkFNRSB0byB0aGUgZ2xvYmFsICR0YWdsaXN0Ci0jIHZhcmlhYmxlIGhlcmUuCi1mdW5jX2VuYWJsZV90YWcgKCkKLXsKLSAgIyBHbG9iYWwgdmFyaWFibGU6Ci0gIHRhZ25hbWU9IiQxIgotCi0gIHJlX2JlZ2luY2Y9Il4jICMjIyBCRUdJTiBMSUJUT09MIFRBRyBDT05GSUc6ICR0YWduYW1lXCQiCi0gIHJlX2VuZGNmPSJeIyAjIyMgRU5EIExJQlRPT0wgVEFHIENPTkZJRzogJHRhZ25hbWVcJCIKLSAgc2VkX2V4dHJhY3RjZj0iLyRyZV9iZWdpbmNmLywvJHJlX2VuZGNmL3AiCi0KLSAgIyBWYWxpZGF0ZSB0YWduYW1lLgotICBjYXNlICR0YWduYW1lIGluCi0gICAgKlshLV9BLVphLXowLTksL10qKQotICAgICAgZnVuY19mYXRhbF9lcnJvciAiaW52YWxpZCB0YWcgbmFtZTogJHRhZ25hbWUiCi0gICAgICA7OwotICBlc2FjCi0KLSAgIyBEb24ndCB0ZXN0IGZvciB0aGUgImRlZmF1bHQiIEMgdGFnLCBhcyB3ZSBrbm93IGl0J3MKLSAgIyB0aGVyZSBidXQgbm90IHNwZWNpYWxseSBtYXJrZWQuCi0gIGNhc2UgJHRhZ25hbWUgaW4KLSAgICBDQykgOzsKLSAgICAqKQotICAgICAgaWYgJEdSRVAgIiRyZV9iZWdpbmNmIiAiJHByb2dwYXRoIiA+L2Rldi9udWxsIDI+JjE7IHRoZW4KLQl0YWdsaXN0PSIkdGFnbGlzdCAkdGFnbmFtZSIKLQotCSMgRXZhbHVhdGUgdGhlIGNvbmZpZ3VyYXRpb24uICBCZSBjYXJlZnVsIHRvIHF1b3RlIHRoZSBwYXRoCi0JIyBhbmQgdGhlIHNlZCBzY3JpcHQsIHRvIGF2b2lkIHNwbGl0dGluZyBvbiB3aGl0ZXNwYWNlLCBidXQKLQkjIGFsc28gZG9uJ3QgdXNlIG5vbi1wb3J0YWJsZSBxdW90ZXMgd2l0aGluIGJhY2txdW90ZXMgd2l0aGluCi0JIyBxdW90ZXMgd2UgaGF2ZSB0byBkbyBpdCBpbiAyIHN0ZXBzOgotCWV4dHJhY3RlZGNmPWAkU0VEIC1uIC1lICIkc2VkX2V4dHJhY3RjZiIgPCAiJHByb2dwYXRoImAKLQlldmFsICIkZXh0cmFjdGVkY2YiCi0gICAgICBlbHNlCi0JZnVuY19lcnJvciAiaWdub3JpbmcgdW5rbm93biB0YWcgJHRhZ25hbWUiCi0gICAgICBmaQotICAgICAgOzsKLSAgZXNhYwotfQotCi0jIGZ1bmNfY2hlY2tfdmVyc2lvbl9tYXRjaAotIyBFbnN1cmUgdGhhdCB3ZSBhcmUgdXNpbmcgbTQgbWFjcm9zLCBhbmQgbGlidG9vbCBzY3JpcHQgZnJvbSB0aGUgc2FtZQotIyByZWxlYXNlIG9mIGxpYnRvb2wuCi1mdW5jX2NoZWNrX3ZlcnNpb25fbWF0Y2ggKCkKLXsKLSAgaWYgdGVzdCAiJHBhY2thZ2VfcmV2aXNpb24iICE9ICIkbWFjcm9fcmV2aXNpb24iOyB0aGVuCi0gICAgaWYgdGVzdCAiJFZFUlNJT04iICE9ICIkbWFjcm9fdmVyc2lvbiI7IHRoZW4KLSAgICAgIGlmIHRlc3QgLXogIiRtYWNyb192ZXJzaW9uIjsgdGhlbgotICAgICAgICBjYXQgPiYyIDw8X0xUX0VPRgotJHByb2duYW1lOiBWZXJzaW9uIG1pc21hdGNoIGVycm9yLiAgVGhpcyBpcyAkUEFDS0FHRSAkVkVSU0lPTiwgYnV0IHRoZQotJHByb2duYW1lOiBkZWZpbml0aW9uIG9mIHRoaXMgTFRfSU5JVCBjb21lcyBmcm9tIGFuIG9sZGVyIHJlbGVhc2UuCi0kcHJvZ25hbWU6IFlvdSBzaG91bGQgcmVjcmVhdGUgYWNsb2NhbC5tNCB3aXRoIG1hY3JvcyBmcm9tICRQQUNLQUdFICRWRVJTSU9OCi0kcHJvZ25hbWU6IGFuZCBydW4gYXV0b2NvbmYgYWdhaW4uCi1fTFRfRU9GCi0gICAgICBlbHNlCi0gICAgICAgIGNhdCA+JjIgPDxfTFRfRU9GCi0kcHJvZ25hbWU6IFZlcnNpb24gbWlzbWF0Y2ggZXJyb3IuICBUaGlzIGlzICRQQUNLQUdFICRWRVJTSU9OLCBidXQgdGhlCi0kcHJvZ25hbWU6IGRlZmluaXRpb24gb2YgdGhpcyBMVF9JTklUIGNvbWVzIGZyb20gJFBBQ0tBR0UgJG1hY3JvX3ZlcnNpb24uCi0kcHJvZ25hbWU6IFlvdSBzaG91bGQgcmVjcmVhdGUgYWNsb2NhbC5tNCB3aXRoIG1hY3JvcyBmcm9tICRQQUNLQUdFICRWRVJTSU9OCi0kcHJvZ25hbWU6IGFuZCBydW4gYXV0b2NvbmYgYWdhaW4uCi1fTFRfRU9GCi0gICAgICBmaQotICAgIGVsc2UKLSAgICAgIGNhdCA+JjIgPDxfTFRfRU9GCi0kcHJvZ25hbWU6IFZlcnNpb24gbWlzbWF0Y2ggZXJyb3IuICBUaGlzIGlzICRQQUNLQUdFICRWRVJTSU9OLCByZXZpc2lvbiAkcGFja2FnZV9yZXZpc2lvbiwKLSRwcm9nbmFtZTogYnV0IHRoZSBkZWZpbml0aW9uIG9mIHRoaXMgTFRfSU5JVCBjb21lcyBmcm9tIHJldmlzaW9uICRtYWNyb19yZXZpc2lvbi4KLSRwcm9nbmFtZTogWW91IHNob3VsZCByZWNyZWF0ZSBhY2xvY2FsLm00IHdpdGggbWFjcm9zIGZyb20gcmV2aXNpb24gJHBhY2thZ2VfcmV2aXNpb24KLSRwcm9nbmFtZTogb2YgJFBBQ0tBR0UgJFZFUlNJT04gYW5kIHJ1biBhdXRvY29uZiBhZ2Fpbi4KLV9MVF9FT0YKLSAgICBmaQotCi0gICAgZXhpdCAkRVhJVF9NSVNNQVRDSAotICBmaQotfQotCi0KLSMgU2hvcnRoYW5kIGZvciAtLW1vZGU9Zm9vLCBvbmx5IHZhbGlkIGFzIHRoZSBmaXJzdCBhcmd1bWVudAotY2FzZSAkMSBpbgotY2xlYW58Y2xlYXxjbGV8Y2wpCi0gIHNoaWZ0OyBzZXQgZHVtbXkgLS1tb2RlIGNsZWFuICR7MSsiJEAifTsgc2hpZnQKLSAgOzsKLWNvbXBpbGV8Y29tcGlsfGNvbXBpfGNvbXB8Y29tfGNvfGMpCi0gIHNoaWZ0OyBzZXQgZHVtbXkgLS1tb2RlIGNvbXBpbGUgJHsxKyIkQCJ9OyBzaGlmdAotICA7OwotZXhlY3V0ZXxleGVjdXR8ZXhlY3V8ZXhlY3xleGV8ZXh8ZSkKLSAgc2hpZnQ7IHNldCBkdW1teSAtLW1vZGUgZXhlY3V0ZSAkezErIiRAIn07IHNoaWZ0Ci0gIDs7Ci1maW5pc2h8ZmluaXN8ZmluaXxmaW58Zml8ZikKLSAgc2hpZnQ7IHNldCBkdW1teSAtLW1vZGUgZmluaXNoICR7MSsiJEAifTsgc2hpZnQKLSAgOzsKLWluc3RhbGx8aW5zdGFsfGluc3RhfGluc3R8aW5zfGlufGkpCi0gIHNoaWZ0OyBzZXQgZHVtbXkgLS1tb2RlIGluc3RhbGwgJHsxKyIkQCJ9OyBzaGlmdAotICA7OwotbGlua3xsaW58bGl8bCkKLSAgc2hpZnQ7IHNldCBkdW1teSAtLW1vZGUgbGluayAkezErIiRAIn07IHNoaWZ0Ci0gIDs7Ci11bmluc3RhbGx8dW5pbnN0YWx8dW5pbnN0YXx1bmluc3R8dW5pbnN8dW5pbnx1bml8dW58dSkKLSAgc2hpZnQ7IHNldCBkdW1teSAtLW1vZGUgdW5pbnN0YWxsICR7MSsiJEAifTsgc2hpZnQKLSAgOzsKLWVzYWMKLQotCi0KLSMgT3B0aW9uIGRlZmF1bHRzOgotb3B0X2RlYnVnPToKLW9wdF9kcnlfcnVuPWZhbHNlCi1vcHRfY29uZmlnPWZhbHNlCi1vcHRfcHJlc2VydmVfZHVwX2RlcHM9ZmFsc2UKLW9wdF9mZWF0dXJlcz1mYWxzZQotb3B0X2ZpbmlzaD1mYWxzZQotb3B0X2hlbHA9ZmFsc2UKLW9wdF9oZWxwX2FsbD1mYWxzZQotb3B0X3NpbGVudD06Ci1vcHRfdmVyYm9zZT06Ci1vcHRfc2lsZW50PWZhbHNlCi1vcHRfdmVyYm9zZT1mYWxzZQotCi0KLSMgUGFyc2Ugb3B0aW9ucyBvbmNlLCB0aG9yb3VnaGx5LiAgVGhpcyBjb21lcyBhcyBzb29uIGFzIHBvc3NpYmxlIGluIHRoZQotIyBzY3JpcHQgdG8gbWFrZSB0aGluZ3MgbGlrZSBgLS12ZXJzaW9uJyBoYXBwZW4gYXMgcXVpY2tseSBhcyB3ZSBjYW4uCi17Ci0gICMgdGhpcyBqdXN0IGVhc2VzIGV4aXQgaGFuZGxpbmcKLSAgd2hpbGUgdGVzdCAkIyAtZ3QgMDsgZG8KLSAgICBvcHQ9IiQxIgotICAgIHNoaWZ0Ci0gICAgY2FzZSAkb3B0IGluCi0gICAgICAtLWRlYnVnfC14KQlvcHRfZGVidWc9J3NldCAteCcKLQkJCWZ1bmNfZWNobyAiZW5hYmxpbmcgc2hlbGwgdHJhY2UgbW9kZSIKLQkJCSRvcHRfZGVidWcKLQkJCTs7Ci0gICAgICAtLWRyeS1ydW58LS1kcnlydW58LW4pCi0JCQlvcHRfZHJ5X3J1bj06Ci0JCQk7OwotICAgICAgLS1jb25maWcpCi0JCQlvcHRfY29uZmlnPToKLWZ1bmNfY29uZmlnCi0JCQk7OwotICAgICAgLS1kbG9wZW58LWRsb3BlbikKLQkJCW9wdGFyZz0iJDEiCi0JCQlvcHRfZGxvcGVuPSIke29wdF9kbG9wZW4rJG9wdF9kbG9wZW4KLX0kb3B0YXJnIgotCQkJc2hpZnQKLQkJCTs7Ci0gICAgICAtLXByZXNlcnZlLWR1cC1kZXBzKQotCQkJb3B0X3ByZXNlcnZlX2R1cF9kZXBzPToKLQkJCTs7Ci0gICAgICAtLWZlYXR1cmVzKQotCQkJb3B0X2ZlYXR1cmVzPToKLWZ1bmNfZmVhdHVyZXMKLQkJCTs7Ci0gICAgICAtLWZpbmlzaCkKLQkJCW9wdF9maW5pc2g9Ogotc2V0IGR1bW15IC0tbW9kZSBmaW5pc2ggJHsxKyIkQCJ9OyBzaGlmdAotCQkJOzsKLSAgICAgIC0taGVscCkKLQkJCW9wdF9oZWxwPToKLQkJCTs7Ci0gICAgICAtLWhlbHAtYWxsKQotCQkJb3B0X2hlbHBfYWxsPToKLW9wdF9oZWxwPSc6IGhlbHAtYWxsJwotCQkJOzsKLSAgICAgIC0tbW9kZSkKLQkJCXRlc3QgJCMgPSAwICYmIGZ1bmNfbWlzc2luZ19hcmcgJG9wdCAmJiBicmVhawotCQkJb3B0YXJnPSIkMSIKLQkJCW9wdF9tb2RlPSIkb3B0YXJnIgotY2FzZSAkb3B0YXJnIGluCi0gICMgVmFsaWQgbW9kZSBhcmd1bWVudHM6Ci0gIGNsZWFufGNvbXBpbGV8ZXhlY3V0ZXxmaW5pc2h8aW5zdGFsbHxsaW5rfHJlbGlua3x1bmluc3RhbGwpIDs7Ci0KLSAgIyBDYXRjaCBhbnl0aGluZyBlbHNlIGFzIGFuIGVycm9yCi0gICopIGZ1bmNfZXJyb3IgImludmFsaWQgYXJndW1lbnQgZm9yICRvcHQiCi0gICAgIGV4aXRfY21kPWV4aXQKLSAgICAgYnJlYWsKLSAgICAgOzsKLWVzYWMKLQkJCXNoaWZ0Ci0JCQk7OwotICAgICAgLS1uby1zaWxlbnR8LS1uby1xdWlldCkKLQkJCW9wdF9zaWxlbnQ9ZmFsc2UKLWZ1bmNfYXBwZW5kIHByZXNlcnZlX2FyZ3MgIiAkb3B0IgotCQkJOzsKLSAgICAgIC0tbm8tdmVyYm9zZSkKLQkJCW9wdF92ZXJib3NlPWZhbHNlCi1mdW5jX2FwcGVuZCBwcmVzZXJ2ZV9hcmdzICIgJG9wdCIKLQkJCTs7Ci0gICAgICAtLXNpbGVudHwtLXF1aWV0KQotCQkJb3B0X3NpbGVudD06Ci1mdW5jX2FwcGVuZCBwcmVzZXJ2ZV9hcmdzICIgJG9wdCIKLSAgICAgICAgb3B0X3ZlcmJvc2U9ZmFsc2UKLQkJCTs7Ci0gICAgICAtLXZlcmJvc2V8LXYpCi0JCQlvcHRfdmVyYm9zZT06Ci1mdW5jX2FwcGVuZCBwcmVzZXJ2ZV9hcmdzICIgJG9wdCIKLW9wdF9zaWxlbnQ9ZmFsc2UKLQkJCTs7Ci0gICAgICAtLXRhZykKLQkJCXRlc3QgJCMgPSAwICYmIGZ1bmNfbWlzc2luZ19hcmcgJG9wdCAmJiBicmVhawotCQkJb3B0YXJnPSIkMSIKLQkJCW9wdF90YWc9IiRvcHRhcmciCi1mdW5jX2FwcGVuZCBwcmVzZXJ2ZV9hcmdzICIgJG9wdCAkb3B0YXJnIgotZnVuY19lbmFibGVfdGFnICIkb3B0YXJnIgotCQkJc2hpZnQKLQkJCTs7Ci0KLSAgICAgIC1cP3wtaCkJCWZ1bmNfdXNhZ2UJCQkJOzsKLSAgICAgIC0taGVscCkJCWZ1bmNfaGVscAkJCQk7OwotICAgICAgLS12ZXJzaW9uKQlmdW5jX3ZlcnNpb24JCQkJOzsKLQotICAgICAgIyBTZXBhcmF0ZSBvcHRhcmdzIHRvIGxvbmcgb3B0aW9uczoKLSAgICAgIC0tKj0qKQotCQkJZnVuY19zcGxpdF9sb25nX29wdCAiJG9wdCIKLQkJCXNldCBkdW1teSAiJGZ1bmNfc3BsaXRfbG9uZ19vcHRfbmFtZSIgIiRmdW5jX3NwbGl0X2xvbmdfb3B0X2FyZyIgJHsxKyIkQCJ9Ci0JCQlzaGlmdAotCQkJOzsKLQotICAgICAgIyBTZXBhcmF0ZSBub24tYXJndW1lbnQgc2hvcnQgb3B0aW9uczoKLSAgICAgIC1cPyp8LWgqfC1uKnwtdiopCi0JCQlmdW5jX3NwbGl0X3Nob3J0X29wdCAiJG9wdCIKLQkJCXNldCBkdW1teSAiJGZ1bmNfc3BsaXRfc2hvcnRfb3B0X25hbWUiICItJGZ1bmNfc3BsaXRfc2hvcnRfb3B0X2FyZyIgJHsxKyIkQCJ9Ci0JCQlzaGlmdAotCQkJOzsKLQotICAgICAgLS0pCQlicmVhawkJCQkJOzsKLSAgICAgIC0qKQkJZnVuY19mYXRhbF9oZWxwICJ1bnJlY29nbml6ZWQgb3B0aW9uIFxgJG9wdCciIDs7Ci0gICAgICAqKQkJc2V0IGR1bW15ICIkb3B0IiAkezErIiRAIn07CXNoaWZ0OyBicmVhayAgOzsKLSAgICBlc2FjCi0gIGRvbmUKLQotICAjIFZhbGlkYXRlIG9wdGlvbnM6Ci0KLSAgIyBzYXZlIGZpcnN0IG5vbi1vcHRpb24gYXJndW1lbnQKLSAgaWYgdGVzdCAiJCMiIC1ndCAwOyB0aGVuCi0gICAgbm9ub3B0PSIkb3B0IgotICAgIHNoaWZ0Ci0gIGZpCi0KLSAgIyBwcmVzZXJ2ZSAtLWRlYnVnCi0gIHRlc3QgIiRvcHRfZGVidWciID0gOiB8fCBmdW5jX2FwcGVuZCBwcmVzZXJ2ZV9hcmdzICIgLS1kZWJ1ZyIKLQotICBjYXNlICRob3N0IGluCi0gICAgKmN5Z3dpbiogfCAqbWluZ3cqIHwgKnB3MzIqIHwgKmNlZ2NjKikKLSAgICAgICMgZG9uJ3QgZWxpbWluYXRlIGR1cGxpY2F0aW9ucyBpbiAkcG9zdGRlcHMgYW5kICRwcmVkZXBzCi0gICAgICBvcHRfZHVwbGljYXRlX2NvbXBpbGVyX2dlbmVyYXRlZF9kZXBzPToKLSAgICAgIDs7Ci0gICAgKikKLSAgICAgIG9wdF9kdXBsaWNhdGVfY29tcGlsZXJfZ2VuZXJhdGVkX2RlcHM9JG9wdF9wcmVzZXJ2ZV9kdXBfZGVwcwotICAgICAgOzsKLSAgZXNhYwotCi0gICRvcHRfaGVscCB8fCB7Ci0gICAgIyBTYW5pdHkgY2hlY2tzIGZpcnN0OgotICAgIGZ1bmNfY2hlY2tfdmVyc2lvbl9tYXRjaAotCi0gICAgaWYgdGVzdCAiJGJ1aWxkX2xpYnRvb2xfbGlicyIgIT0geWVzICYmIHRlc3QgIiRidWlsZF9vbGRfbGlicyIgIT0geWVzOyB0aGVuCi0gICAgICBmdW5jX2ZhdGFsX2NvbmZpZ3VyYXRpb24gIm5vdCBjb25maWd1cmVkIHRvIGJ1aWxkIGFueSBraW5kIG9mIGxpYnJhcnkiCi0gICAgZmkKLQotICAgICMgRGFyd2luIHN1Y2tzCi0gICAgZXZhbCBzdGRfc2hyZXh0PVwiJHNocmV4dF9jbWRzXCIKLQotICAgICMgT25seSBleGVjdXRlIG1vZGUgaXMgYWxsb3dlZCB0byBoYXZlIC1kbG9wZW4gZmxhZ3MuCi0gICAgaWYgdGVzdCAtbiAiJG9wdF9kbG9wZW4iICYmIHRlc3QgIiRvcHRfbW9kZSIgIT0gZXhlY3V0ZTsgdGhlbgotICAgICAgZnVuY19lcnJvciAidW5yZWNvZ25pemVkIG9wdGlvbiBcYC1kbG9wZW4nIgotICAgICAgJEVDSE8gIiRoZWxwIiAxPiYyCi0gICAgICBleGl0ICRFWElUX0ZBSUxVUkUKLSAgICBmaQotCi0gICAgIyBDaGFuZ2UgdGhlIGhlbHAgbWVzc2FnZSB0byBhIG1vZGUtc3BlY2lmaWMgb25lLgotICAgIGdlbmVyaWNfaGVscD0iJGhlbHAiCi0gICAgaGVscD0iVHJ5IFxgJHByb2duYW1lIC0taGVscCAtLW1vZGU9JG9wdF9tb2RlJyBmb3IgbW9yZSBpbmZvcm1hdGlvbi4iCi0gIH0KLQotCi0gICMgQmFpbCBpZiB0aGUgb3B0aW9ucyB3ZXJlIHNjcmV3ZWQKLSAgJGV4aXRfY21kICRFWElUX0ZBSUxVUkUKLX0KLQotCi0KLQotIyMgLS0tLS0tLS0tLS0gIyMKLSMjICAgIE1haW4uICAgICMjCi0jIyAtLS0tLS0tLS0tLSAjIwotCi0jIGZ1bmNfbGFsaWJfcCBmaWxlCi0jIFRydWUgaWZmIEZJTEUgaXMgYSBsaWJ0b29sIGAubGEnIGxpYnJhcnkgb3IgYC5sbycgb2JqZWN0IGZpbGUuCi0jIFRoaXMgZnVuY3Rpb24gaXMgb25seSBhIGJhc2ljIHNhbml0eSBjaGVjazsgaXQgd2lsbCBoYXJkbHkgZmx1c2ggb3V0Ci0jIGRldGVybWluZWQgaW1wb3N0ZXJzLgotZnVuY19sYWxpYl9wICgpCi17Ci0gICAgdGVzdCAtZiAiJDEiICYmCi0gICAgICAkU0VEIC1lIDRxICIkMSIgMj4vZGV2L251bGwgXAotICAgICAgICB8ICRHUkVQICJeIyBHZW5lcmF0ZWQgYnkgLiokUEFDS0FHRSIgPiAvZGV2L251bGwgMj4mMQotfQotCi0jIGZ1bmNfbGFsaWJfdW5zYWZlX3AgZmlsZQotIyBUcnVlIGlmZiBGSUxFIGlzIGEgbGlidG9vbCBgLmxhJyBsaWJyYXJ5IG9yIGAubG8nIG9iamVjdCBmaWxlLgotIyBUaGlzIGZ1bmN0aW9uIGltcGxlbWVudHMgdGhlIHNhbWUgY2hlY2sgYXMgZnVuY19sYWxpYl9wIHdpdGhvdXQKLSMgcmVzb3J0aW5nIHRvIGV4dGVybmFsIHByb2dyYW1zLiAgVG8gdGhpcyBlbmQsIGl0IHJlZGlyZWN0cyBzdGRpbiBhbmQKLSMgY2xvc2VzIGl0IGFmdGVyd2FyZHMsIHdpdGhvdXQgc2F2aW5nIHRoZSBvcmlnaW5hbCBmaWxlIGRlc2NyaXB0b3IuCi0jIEFzIGEgc2FmZXR5IG1lYXN1cmUsIHVzZSBpdCBvbmx5IHdoZXJlIGEgbmVnYXRpdmUgcmVzdWx0IHdvdWxkIGJlCi0jIGZhdGFsIGFueXdheS4gIFdvcmtzIGlmIGBmaWxlJyBkb2VzIG5vdCBleGlzdC4KLWZ1bmNfbGFsaWJfdW5zYWZlX3AgKCkKLXsKLSAgICBsYWxpYl9wPW5vCi0gICAgaWYgdGVzdCAtZiAiJDEiICYmIHRlc3QgLXIgIiQxIiAmJiBleGVjIDU8JjAgPCIkMSI7IHRoZW4KLQlmb3IgbGFsaWJfcF9sIGluIDEgMiAzIDQKLQlkbwotCSAgICByZWFkIGxhbGliX3BfbGluZQotCSAgICBjYXNlICIkbGFsaWJfcF9saW5lIiBpbgotCQlcI1wgR2VuZXJhdGVkXCBieVwgKiRQQUNLQUdFKiApIGxhbGliX3A9eWVzOyBicmVhazs7Ci0JICAgIGVzYWMKLQlkb25lCi0JZXhlYyAwPCY1IDU8Ji0KLSAgICBmaQotICAgIHRlc3QgIiRsYWxpYl9wIiA9IHllcwotfQotCi0jIGZ1bmNfbHR3cmFwcGVyX3NjcmlwdF9wIGZpbGUKLSMgVHJ1ZSBpZmYgRklMRSBpcyBhIGxpYnRvb2wgd3JhcHBlciBzY3JpcHQKLSMgVGhpcyBmdW5jdGlvbiBpcyBvbmx5IGEgYmFzaWMgc2FuaXR5IGNoZWNrOyBpdCB3aWxsIGhhcmRseSBmbHVzaCBvdXQKLSMgZGV0ZXJtaW5lZCBpbXBvc3RlcnMuCi1mdW5jX2x0d3JhcHBlcl9zY3JpcHRfcCAoKQotewotICAgIGZ1bmNfbGFsaWJfcCAiJDEiCi19Ci0KLSMgZnVuY19sdHdyYXBwZXJfZXhlY3V0YWJsZV9wIGZpbGUKLSMgVHJ1ZSBpZmYgRklMRSBpcyBhIGxpYnRvb2wgd3JhcHBlciBleGVjdXRhYmxlCi0jIFRoaXMgZnVuY3Rpb24gaXMgb25seSBhIGJhc2ljIHNhbml0eSBjaGVjazsgaXQgd2lsbCBoYXJkbHkgZmx1c2ggb3V0Ci0jIGRldGVybWluZWQgaW1wb3N0ZXJzLgotZnVuY19sdHdyYXBwZXJfZXhlY3V0YWJsZV9wICgpCi17Ci0gICAgZnVuY19sdHdyYXBwZXJfZXhlY19zdWZmaXg9Ci0gICAgY2FzZSAkMSBpbgotICAgICouZXhlKSA7OwotICAgICopIGZ1bmNfbHR3cmFwcGVyX2V4ZWNfc3VmZml4PS5leGUgOzsKLSAgICBlc2FjCi0gICAgJEdSRVAgIiRtYWdpY19leGUiICIkMSRmdW5jX2x0d3JhcHBlcl9leGVjX3N1ZmZpeCIgPi9kZXYvbnVsbCAyPiYxCi19Ci0KLSMgZnVuY19sdHdyYXBwZXJfc2NyaXB0bmFtZSBmaWxlCi0jIEFzc3VtZXMgZmlsZSBpcyBhbiBsdHdyYXBwZXJfZXhlY3V0YWJsZQotIyB1c2VzICRmaWxlIHRvIGRldGVybWluZSB0aGUgYXBwcm9wcmlhdGUgZmlsZW5hbWUgZm9yIGEKLSMgdGVtcG9yYXJ5IGx0d3JhcHBlcl9zY3JpcHQuCi1mdW5jX2x0d3JhcHBlcl9zY3JpcHRuYW1lICgpCi17Ci0gICAgZnVuY19kaXJuYW1lX2FuZF9iYXNlbmFtZSAiJDEiICIiICIuIgotICAgIGZ1bmNfc3RyaXBuYW1lICcnICcuZXhlJyAiJGZ1bmNfYmFzZW5hbWVfcmVzdWx0IgotICAgIGZ1bmNfbHR3cmFwcGVyX3NjcmlwdG5hbWVfcmVzdWx0PSIkZnVuY19kaXJuYW1lX3Jlc3VsdC8kb2JqZGlyLyR7ZnVuY19zdHJpcG5hbWVfcmVzdWx0fV9sdHNod3JhcHBlciIKLX0KLQotIyBmdW5jX2x0d3JhcHBlcl9wIGZpbGUKLSMgVHJ1ZSBpZmYgRklMRSBpcyBhIGxpYnRvb2wgd3JhcHBlciBzY3JpcHQgb3Igd3JhcHBlciBleGVjdXRhYmxlCi0jIFRoaXMgZnVuY3Rpb24gaXMgb25seSBhIGJhc2ljIHNhbml0eSBjaGVjazsgaXQgd2lsbCBoYXJkbHkgZmx1c2ggb3V0Ci0jIGRldGVybWluZWQgaW1wb3N0ZXJzLgotZnVuY19sdHdyYXBwZXJfcCAoKQotewotICAgIGZ1bmNfbHR3cmFwcGVyX3NjcmlwdF9wICIkMSIgfHwgZnVuY19sdHdyYXBwZXJfZXhlY3V0YWJsZV9wICIkMSIKLX0KLQotCi0jIGZ1bmNfZXhlY3V0ZV9jbWRzIGNvbW1hbmRzIGZhaWxfY21kCi0jIEV4ZWN1dGUgdGlsZGUtZGVsaW1pdGVkIENPTU1BTkRTLgotIyBJZiBGQUlMX0NNRCBpcyBnaXZlbiwgZXZhbCB0aGF0IHVwb24gZmFpbHVyZS4KLSMgRkFJTF9DTUQgbWF5IHJlYWQtYWNjZXNzIHRoZSBjdXJyZW50IGNvbW1hbmQgaW4gdmFyaWFibGUgQ01EIQotZnVuY19leGVjdXRlX2NtZHMgKCkKLXsKLSAgICAkb3B0X2RlYnVnCi0gICAgc2F2ZV9pZnM9JElGUzsgSUZTPSd+JwotICAgIGZvciBjbWQgaW4gJDE7IGRvCi0gICAgICBJRlM9JHNhdmVfaWZzCi0gICAgICBldmFsIGNtZD1cIiRjbWRcIgotICAgICAgZnVuY19zaG93X2V2YWwgIiRjbWQiICIkezItOn0iCi0gICAgZG9uZQotICAgIElGUz0kc2F2ZV9pZnMKLX0KLQotCi0jIGZ1bmNfc291cmNlIGZpbGUKLSMgU291cmNlIEZJTEUsIGFkZGluZyBkaXJlY3RvcnkgY29tcG9uZW50IGlmIG5lY2Vzc2FyeS4KLSMgTm90ZSB0aGF0IGl0IGlzIG5vdCBuZWNlc3Nhcnkgb24gY3lnd2luL21pbmd3IHRvIGFwcGVuZCBhIGRvdCB0bwotIyBGSUxFIGV2ZW4gaWYgYm90aCBGSUxFIGFuZCBGSUxFLmV4ZSBleGlzdDogYXV0b21hdGljLWFwcGVuZC0uZXhlCi0jIGJlaGF2aW9yIGhhcHBlbnMgb25seSBmb3IgZXhlYygzKSwgbm90IGZvciBvcGVuKDIpISAgQWxzbywgc291cmNpbmcKLSMgYEZJTEUuJyBkb2VzIG5vdCB3b3JrIG9uIGN5Z3dpbiBtYW5hZ2VkIG1vdW50cy4KLWZ1bmNfc291cmNlICgpCi17Ci0gICAgJG9wdF9kZWJ1ZwotICAgIGNhc2UgJDEgaW4KLSAgICAqLyogfCAqXFwqKQkuICIkMSIgOzsKLSAgICAqKQkJLiAiLi8kMSIgOzsKLSAgICBlc2FjCi19Ci0KLQotIyBmdW5jX3Jlc29sdmVfc3lzcm9vdCBQQVRICi0jIFJlcGxhY2UgYSBsZWFkaW5nID0gaW4gUEFUSCB3aXRoIGEgc3lzcm9vdC4gIFN0b3JlIHRoZSByZXN1bHQgaW50bwotIyBmdW5jX3Jlc29sdmVfc3lzcm9vdF9yZXN1bHQKLWZ1bmNfcmVzb2x2ZV9zeXNyb290ICgpCi17Ci0gIGZ1bmNfcmVzb2x2ZV9zeXNyb290X3Jlc3VsdD0kMQotICBjYXNlICRmdW5jX3Jlc29sdmVfc3lzcm9vdF9yZXN1bHQgaW4KLSAgPSopCi0gICAgZnVuY19zdHJpcG5hbWUgJz0nICcnICIkZnVuY19yZXNvbHZlX3N5c3Jvb3RfcmVzdWx0IgotICAgIGZ1bmNfcmVzb2x2ZV9zeXNyb290X3Jlc3VsdD0kbHRfc3lzcm9vdCRmdW5jX3N0cmlwbmFtZV9yZXN1bHQKLSAgICA7OwotICBlc2FjCi19Ci0KLSMgZnVuY19yZXBsYWNlX3N5c3Jvb3QgUEFUSAotIyBJZiBQQVRIIGJlZ2lucyB3aXRoIHRoZSBzeXNyb290LCByZXBsYWNlIGl0IHdpdGggPSBhbmQKLSMgc3RvcmUgdGhlIHJlc3VsdCBpbnRvIGZ1bmNfcmVwbGFjZV9zeXNyb290X3Jlc3VsdC4KLWZ1bmNfcmVwbGFjZV9zeXNyb290ICgpCi17Ci0gIGNhc2UgIiRsdF9zeXNyb290OiQxIiBpbgotICA/KjoiJGx0X3N5c3Jvb3QiKikKLSAgICBmdW5jX3N0cmlwbmFtZSAiJGx0X3N5c3Jvb3QiICcnICIkMSIKLSAgICBmdW5jX3JlcGxhY2Vfc3lzcm9vdF9yZXN1bHQ9Ij0kZnVuY19zdHJpcG5hbWVfcmVzdWx0IgotICAgIDs7Ci0gICopCi0gICAgIyBJbmNsdWRpbmcgbm8gc3lzcm9vdC4KLSAgICBmdW5jX3JlcGxhY2Vfc3lzcm9vdF9yZXN1bHQ9JDEKLSAgICA7OwotICBlc2FjCi19Ci0KLSMgZnVuY19pbmZlcl90YWcgYXJnCi0jIEluZmVyIHRhZ2dlZCBjb25maWd1cmF0aW9uIHRvIHVzZSBpZiBhbnkgYXJlIGF2YWlsYWJsZSBhbmQKLSMgaWYgb25lIHdhc24ndCBjaG9zZW4gdmlhIHRoZSAiLS10YWciIGNvbW1hbmQgbGluZSBvcHRpb24uCi0jIE9ubHkgYXR0ZW1wdCB0aGlzIGlmIHRoZSBjb21waWxlciBpbiB0aGUgYmFzZSBjb21waWxlCi0jIGNvbW1hbmQgZG9lc24ndCBtYXRjaCB0aGUgZGVmYXVsdCBjb21waWxlci4KLSMgYXJnIGlzIHVzdWFsbHkgb2YgdGhlIGZvcm0gJ2djYyAuLi4nCi1mdW5jX2luZmVyX3RhZyAoKQotewotICAgICRvcHRfZGVidWcKLSAgICBpZiB0ZXN0IC1uICIkYXZhaWxhYmxlX3RhZ3MiICYmIHRlc3QgLXogIiR0YWduYW1lIjsgdGhlbgotICAgICAgQ0NfcXVvdGVkPQotICAgICAgZm9yIGFyZyBpbiAkQ0M7IGRvCi0JZnVuY19hcHBlbmRfcXVvdGVkIENDX3F1b3RlZCAiJGFyZyIKLSAgICAgIGRvbmUKLSAgICAgIENDX2V4cGFuZGVkPWBmdW5jX2VjaG9fYWxsICRDQ2AKLSAgICAgIENDX3F1b3RlZF9leHBhbmRlZD1gZnVuY19lY2hvX2FsbCAkQ0NfcXVvdGVkYAotICAgICAgY2FzZSAkQCBpbgotICAgICAgIyBCbGFua3MgaW4gdGhlIGNvbW1hbmQgbWF5IGhhdmUgYmVlbiBzdHJpcHBlZCBieSB0aGUgY2FsbGluZyBzaGVsbCwKLSAgICAgICMgYnV0IG5vdCBmcm9tIHRoZSBDQyBlbnZpcm9ubWVudCB2YXJpYWJsZSB3aGVuIGNvbmZpZ3VyZSB3YXMgcnVuLgotICAgICAgIiAkQ0MgIiogfCAiJENDICIqIHwgIiAkQ0NfZXhwYW5kZWQgIiogfCAiJENDX2V4cGFuZGVkICIqIHwgXAotICAgICAgIiAkQ0NfcXVvdGVkIiogfCAiJENDX3F1b3RlZCAiKiB8ICIgJENDX3F1b3RlZF9leHBhbmRlZCAiKiB8ICIkQ0NfcXVvdGVkX2V4cGFuZGVkICIqKSA7OwotICAgICAgIyBCbGFua3MgYXQgdGhlIHN0YXJ0IG9mICRiYXNlX2NvbXBpbGUgd2lsbCBjYXVzZSB0aGlzIHRvIGZhaWwKLSAgICAgICMgaWYgd2UgZG9uJ3QgY2hlY2sgZm9yIHRoZW0gYXMgd2VsbC4KLSAgICAgICopCi0JZm9yIHogaW4gJGF2YWlsYWJsZV90YWdzOyBkbwotCSAgaWYgJEdSRVAgIl4jICMjIyBCRUdJTiBMSUJUT09MIFRBRyBDT05GSUc6ICR6JCIgPCAiJHByb2dwYXRoIiA+IC9kZXYvbnVsbDsgdGhlbgotCSAgICAjIEV2YWx1YXRlIHRoZSBjb25maWd1cmF0aW9uLgotCSAgICBldmFsICJgJHtTRUR9IC1uIC1lICcvXiMgIyMjIEJFR0lOIExJQlRPT0wgVEFHIENPTkZJRzogJyR6JyQvLC9eIyAjIyMgRU5EIExJQlRPT0wgVEFHIENPTkZJRzogJyR6JyQvcCcgPCAkcHJvZ3BhdGhgIgotCSAgICBDQ19xdW90ZWQ9Ci0JICAgIGZvciBhcmcgaW4gJENDOyBkbwotCSAgICAgICMgRG91YmxlLXF1b3RlIGFyZ3MgY29udGFpbmluZyBvdGhlciBzaGVsbCBtZXRhY2hhcmFjdGVycy4KLQkgICAgICBmdW5jX2FwcGVuZF9xdW90ZWQgQ0NfcXVvdGVkICIkYXJnIgotCSAgICBkb25lCi0JICAgIENDX2V4cGFuZGVkPWBmdW5jX2VjaG9fYWxsICRDQ2AKLQkgICAgQ0NfcXVvdGVkX2V4cGFuZGVkPWBmdW5jX2VjaG9fYWxsICRDQ19xdW90ZWRgCi0JICAgIGNhc2UgIiRAICIgaW4KLQkgICAgIiAkQ0MgIiogfCAiJENDICIqIHwgIiAkQ0NfZXhwYW5kZWQgIiogfCAiJENDX2V4cGFuZGVkICIqIHwgXAotCSAgICAiICRDQ19xdW90ZWQiKiB8ICIkQ0NfcXVvdGVkICIqIHwgIiAkQ0NfcXVvdGVkX2V4cGFuZGVkICIqIHwgIiRDQ19xdW90ZWRfZXhwYW5kZWQgIiopCi0JICAgICAgIyBUaGUgY29tcGlsZXIgaW4gdGhlIGJhc2UgY29tcGlsZSBjb21tYW5kIG1hdGNoZXMKLQkgICAgICAjIHRoZSBvbmUgaW4gdGhlIHRhZ2dlZCBjb25maWd1cmF0aW9uLgotCSAgICAgICMgQXNzdW1lIHRoaXMgaXMgdGhlIHRhZ2dlZCBjb25maWd1cmF0aW9uIHdlIHdhbnQuCi0JICAgICAgdGFnbmFtZT0kegotCSAgICAgIGJyZWFrCi0JICAgICAgOzsKLQkgICAgZXNhYwotCSAgZmkKLQlkb25lCi0JIyBJZiAkdGFnbmFtZSBzdGlsbCBpc24ndCBzZXQsIHRoZW4gbm8gdGFnZ2VkIGNvbmZpZ3VyYXRpb24KLQkjIHdhcyBmb3VuZCBhbmQgbGV0IHRoZSB1c2VyIGtub3cgdGhhdCB0aGUgIi0tdGFnIiBjb21tYW5kCi0JIyBsaW5lIG9wdGlvbiBtdXN0IGJlIHVzZWQuCi0JaWYgdGVzdCAteiAiJHRhZ25hbWUiOyB0aGVuCi0JICBmdW5jX2VjaG8gInVuYWJsZSB0byBpbmZlciB0YWdnZWQgY29uZmlndXJhdGlvbiIKLQkgIGZ1bmNfZmF0YWxfZXJyb3IgInNwZWNpZnkgYSB0YWcgd2l0aCBcYC0tdGFnJyIKLSMJZWxzZQotIwkgIGZ1bmNfdmVyYm9zZSAidXNpbmcgJHRhZ25hbWUgdGFnZ2VkIGNvbmZpZ3VyYXRpb24iCi0JZmkKLQk7OwotICAgICAgZXNhYwotICAgIGZpCi19Ci0KLQotCi0jIGZ1bmNfd3JpdGVfbGlidG9vbF9vYmplY3Qgb3V0cHV0X25hbWUgcGljX25hbWUgbm9ucGljX25hbWUKLSMgQ3JlYXRlIGEgbGlidG9vbCBvYmplY3QgZmlsZSAoYW5hbG9nb3VzIHRvIGEgIi5sYSIgZmlsZSksCi0jIGJ1dCBkb24ndCBjcmVhdGUgaXQgaWYgd2UncmUgZG9pbmcgYSBkcnkgcnVuLgotZnVuY193cml0ZV9saWJ0b29sX29iamVjdCAoKQotewotICAgIHdyaXRlX2xpYm9iaj0kezF9Ci0gICAgaWYgdGVzdCAiJGJ1aWxkX2xpYnRvb2xfbGlicyIgPSB5ZXM7IHRoZW4KLSAgICAgIHdyaXRlX2xvYmo9XCckezJ9XCcKLSAgICBlbHNlCi0gICAgICB3cml0ZV9sb2JqPW5vbmUKLSAgICBmaQotCi0gICAgaWYgdGVzdCAiJGJ1aWxkX29sZF9saWJzIiA9IHllczsgdGhlbgotICAgICAgd3JpdGVfb2xkb2JqPVwnJHszfVwnCi0gICAgZWxzZQotICAgICAgd3JpdGVfb2xkb2JqPW5vbmUKLSAgICBmaQotCi0gICAgJG9wdF9kcnlfcnVuIHx8IHsKLSAgICAgIGNhdCA+JHt3cml0ZV9saWJvYmp9VCA8PEVPRgotIyAkd3JpdGVfbGlib2JqIC0gYSBsaWJ0b29sIG9iamVjdCBmaWxlCi0jIEdlbmVyYXRlZCBieSAkUFJPR1JBTSAoR05VICRQQUNLQUdFJFRJTUVTVEFNUCkgJFZFUlNJT04KLSMKLSMgUGxlYXNlIERPIE5PVCBkZWxldGUgdGhpcyBmaWxlIQotIyBJdCBpcyBuZWNlc3NhcnkgZm9yIGxpbmtpbmcgdGhlIGxpYnJhcnkuCi0KLSMgTmFtZSBvZiB0aGUgUElDIG9iamVjdC4KLXBpY19vYmplY3Q9JHdyaXRlX2xvYmoKLQotIyBOYW1lIG9mIHRoZSBub24tUElDIG9iamVjdAotbm9uX3BpY19vYmplY3Q9JHdyaXRlX29sZG9iagotCi1FT0YKLSAgICAgICRNViAiJHt3cml0ZV9saWJvYmp9VCIgIiR7d3JpdGVfbGlib2JqfSIKLSAgICB9Ci19Ci0KLQotIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKLSMgRklMRSBOQU1FIEFORCBQQVRIIENPTlZFUlNJT04gSEVMUEVSIEZVTkNUSU9OUyAjCi0jIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwotCi0jIGZ1bmNfY29udmVydF9jb3JlX2ZpbGVfd2luZV90b193MzIgQVJHCi0jIEhlbHBlciBmdW5jdGlvbiB1c2VkIGJ5IGZpbGUgbmFtZSBjb252ZXJzaW9uIGZ1bmN0aW9ucyB3aGVuICRidWlsZCBpcyAqbml4LAotIyBhbmQgJGhvc3QgaXMgbWluZ3csIGN5Z3dpbiwgb3Igc29tZSBvdGhlciB3MzIgZW52aXJvbm1lbnQuIFJlbGllcyBvbiBhCi0jIGNvcnJlY3RseSBjb25maWd1cmVkIHdpbmUgZW52aXJvbm1lbnQgYXZhaWxhYmxlLCB3aXRoIHRoZSB3aW5lcGF0aCBwcm9ncmFtCi0jIGluICRidWlsZCdzICRQQVRILgotIwotIyBBUkcgaXMgdGhlICRidWlsZCBmaWxlIG5hbWUgdG8gYmUgY29udmVydGVkIHRvIHczMiBmb3JtYXQuCi0jIFJlc3VsdCBpcyBhdmFpbGFibGUgaW4gJGZ1bmNfY29udmVydF9jb3JlX2ZpbGVfd2luZV90b193MzJfcmVzdWx0LCBhbmQgd2lsbAotIyBiZSBlbXB0eSBvbiBlcnJvciAob3Igd2hlbiBBUkcgaXMgZW1wdHkpCi1mdW5jX2NvbnZlcnRfY29yZV9maWxlX3dpbmVfdG9fdzMyICgpCi17Ci0gICRvcHRfZGVidWcKLSAgZnVuY19jb252ZXJ0X2NvcmVfZmlsZV93aW5lX3RvX3czMl9yZXN1bHQ9IiQxIgotICBpZiB0ZXN0IC1uICIkMSI7IHRoZW4KLSAgICAjIFVuZm9ydHVuYXRlbHksIHdpbmVwYXRoIGRvZXMgbm90IGV4aXQgd2l0aCBhIG5vbi16ZXJvIGVycm9yIGNvZGUsIHNvIHdlCi0gICAgIyBhcmUgZm9yY2VkIHRvIGNoZWNrIHRoZSBjb250ZW50cyBvZiBzdGRvdXQuIE9uIHRoZSBvdGhlciBoYW5kLCBpZiB0aGUKLSAgICAjIGNvbW1hbmQgaXMgbm90IGZvdW5kLCB0aGUgc2hlbGwgd2lsbCBzZXQgYW4gZXhpdCBjb2RlIG9mIDEyNyBhbmQgcHJpbnQKLSAgICAjICphbiBlcnJvciBtZXNzYWdlKiB0byBzdGRvdXQuIFNvIHdlIG11c3QgY2hlY2sgZm9yIGJvdGggZXJyb3IgY29kZSBvZgotICAgICMgemVybyBBTkQgbm9uLWVtcHR5IHN0ZG91dCwgd2hpY2ggZXhwbGFpbnMgdGhlIG9kZCBjb25zdHJ1Y3Rpb246Ci0gICAgZnVuY19jb252ZXJ0X2NvcmVfZmlsZV93aW5lX3RvX3czMl90bXA9YHdpbmVwYXRoIC13ICIkMSIgMj4vZGV2L251bGxgCi0gICAgaWYgdGVzdCAiJD8iIC1lcSAwICYmIHRlc3QgLW4gIiR7ZnVuY19jb252ZXJ0X2NvcmVfZmlsZV93aW5lX3RvX3czMl90bXB9IjsgdGhlbgotICAgICAgZnVuY19jb252ZXJ0X2NvcmVfZmlsZV93aW5lX3RvX3czMl9yZXN1bHQ9YCRFQ0hPICIkZnVuY19jb252ZXJ0X2NvcmVfZmlsZV93aW5lX3RvX3czMl90bXAiIHwKLSAgICAgICAgJFNFRCAtZSAiJGx0X3NlZF9uYWl2ZV9iYWNrc2xhc2hpZnkiYAotICAgIGVsc2UKLSAgICAgIGZ1bmNfY29udmVydF9jb3JlX2ZpbGVfd2luZV90b193MzJfcmVzdWx0PQotICAgIGZpCi0gIGZpCi19Ci0jIGVuZDogZnVuY19jb252ZXJ0X2NvcmVfZmlsZV93aW5lX3RvX3czMgotCi0KLSMgZnVuY19jb252ZXJ0X2NvcmVfcGF0aF93aW5lX3RvX3czMiBBUkcKLSMgSGVscGVyIGZ1bmN0aW9uIHVzZWQgYnkgcGF0aCBjb252ZXJzaW9uIGZ1bmN0aW9ucyB3aGVuICRidWlsZCBpcyAqbml4LCBhbmQKLSMgJGhvc3QgaXMgbWluZ3csIGN5Z3dpbiwgb3Igc29tZSBvdGhlciB3MzIgZW52aXJvbm1lbnQuIFJlbGllcyBvbiBhIGNvcnJlY3RseQotIyBjb25maWd1cmVkIHdpbmUgZW52aXJvbm1lbnQgYXZhaWxhYmxlLCB3aXRoIHRoZSB3aW5lcGF0aCBwcm9ncmFtIGluICRidWlsZCdzCi0jICRQQVRILiBBc3N1bWVzIEFSRyBoYXMgbm8gbGVhZGluZyBvciB0cmFpbGluZyBwYXRoIHNlcGFyYXRvciBjaGFyYWN0ZXJzLgotIwotIyBBUkcgaXMgcGF0aCB0byBiZSBjb252ZXJ0ZWQgZnJvbSAkYnVpbGQgZm9ybWF0IHRvIHdpbjMyLgotIyBSZXN1bHQgaXMgYXZhaWxhYmxlIGluICRmdW5jX2NvbnZlcnRfY29yZV9wYXRoX3dpbmVfdG9fdzMyX3Jlc3VsdC4KLSMgVW5jb252ZXJ0aWJsZSBmaWxlIChkaXJlY3RvcnkpIG5hbWVzIGluIEFSRyBhcmUgc2tpcHBlZDsgaWYgbm8gZGlyZWN0b3J5IG5hbWVzCi0jIGFyZSBjb252ZXJ0aWJsZSwgdGhlbiB0aGUgcmVzdWx0IG1heSBiZSBlbXB0eS4KLWZ1bmNfY29udmVydF9jb3JlX3BhdGhfd2luZV90b193MzIgKCkKLXsKLSAgJG9wdF9kZWJ1ZwotICAjIHVuZm9ydHVuYXRlbHksIHdpbmVwYXRoIGRvZXNuJ3QgY29udmVydCBwYXRocywgb25seSBmaWxlIG5hbWVzCi0gIGZ1bmNfY29udmVydF9jb3JlX3BhdGhfd2luZV90b193MzJfcmVzdWx0PSIiCi0gIGlmIHRlc3QgLW4gIiQxIjsgdGhlbgotICAgIG9sZElGUz0kSUZTCi0gICAgSUZTPToKLSAgICBmb3IgZnVuY19jb252ZXJ0X2NvcmVfcGF0aF93aW5lX3RvX3czMl9mIGluICQxOyBkbwotICAgICAgSUZTPSRvbGRJRlMKLSAgICAgIGZ1bmNfY29udmVydF9jb3JlX2ZpbGVfd2luZV90b193MzIgIiRmdW5jX2NvbnZlcnRfY29yZV9wYXRoX3dpbmVfdG9fdzMyX2YiCi0gICAgICBpZiB0ZXN0IC1uICIkZnVuY19jb252ZXJ0X2NvcmVfZmlsZV93aW5lX3RvX3czMl9yZXN1bHQiIDsgdGhlbgotICAgICAgICBpZiB0ZXN0IC16ICIkZnVuY19jb252ZXJ0X2NvcmVfcGF0aF93aW5lX3RvX3czMl9yZXN1bHQiOyB0aGVuCi0gICAgICAgICAgZnVuY19jb252ZXJ0X2NvcmVfcGF0aF93aW5lX3RvX3czMl9yZXN1bHQ9IiRmdW5jX2NvbnZlcnRfY29yZV9maWxlX3dpbmVfdG9fdzMyX3Jlc3VsdCIKLSAgICAgICAgZWxzZQotICAgICAgICAgIGZ1bmNfYXBwZW5kIGZ1bmNfY29udmVydF9jb3JlX3BhdGhfd2luZV90b193MzJfcmVzdWx0ICI7JGZ1bmNfY29udmVydF9jb3JlX2ZpbGVfd2luZV90b193MzJfcmVzdWx0IgotICAgICAgICBmaQotICAgICAgZmkKLSAgICBkb25lCi0gICAgSUZTPSRvbGRJRlMKLSAgZmkKLX0KLSMgZW5kOiBmdW5jX2NvbnZlcnRfY29yZV9wYXRoX3dpbmVfdG9fdzMyCi0KLQotIyBmdW5jX2N5Z3BhdGggQVJHUy4uLgotIyBXcmFwcGVyIGFyb3VuZCBjYWxsaW5nIHRoZSBjeWdwYXRoIHByb2dyYW0gdmlhIExUX0NZR1BBVEguIFRoaXMgaXMgdXNlZCB3aGVuCi0jIHdoZW4gKDEpICRidWlsZCBpcyAqbml4IGFuZCBDeWd3aW4gaXMgaG9zdGVkIHZpYSBhIHdpbmUgZW52aXJvbm1lbnQ7IG9yICgyKQotIyAkYnVpbGQgaXMgTVNZUyBhbmQgJGhvc3QgaXMgQ3lnd2luLCBvciAoMykgJGJ1aWxkIGlzIEN5Z3dpbi4gSW4gY2FzZSAoMSkgb3IKLSMgKDIpLCByZXR1cm5zIHRoZSBDeWd3aW4gZmlsZSBuYW1lIG9yIHBhdGggaW4gZnVuY19jeWdwYXRoX3Jlc3VsdCAoaW5wdXQKLSMgZmlsZSBuYW1lIG9yIHBhdGggaXMgYXNzdW1lZCB0byBiZSBpbiB3MzIgZm9ybWF0LCBhcyBwcmV2aW91c2x5IGNvbnZlcnRlZAotIyBmcm9tICRidWlsZCdzICpuaXggb3IgTVNZUyBmb3JtYXQpLiBJbiBjYXNlICgzKSwgcmV0dXJucyB0aGUgdzMyIGZpbGUgbmFtZQotIyBvciBwYXRoIGluIGZ1bmNfY3lncGF0aF9yZXN1bHQgKGlucHV0IGZpbGUgbmFtZSBvciBwYXRoIGlzIGFzc3VtZWQgdG8gYmUgaW4KLSMgQ3lnd2luIGZvcm1hdCkuIFJldHVybnMgYW4gZW1wdHkgc3RyaW5nIG9uIGVycm9yLgotIwotIyBBUkdTIGFyZSBwYXNzZWQgdG8gY3lncGF0aCwgd2l0aCB0aGUgbGFzdCBvbmUgYmVpbmcgdGhlIGZpbGUgbmFtZSBvciBwYXRoIHRvCi0jIGJlIGNvbnZlcnRlZC4KLSMKLSMgU3BlY2lmeSB0aGUgYWJzb2x1dGUgKm5peCAob3IgdzMyKSBuYW1lIHRvIGN5Z3BhdGggaW4gdGhlIExUX0NZR1BBVEgKLSMgZW52aXJvbm1lbnQgdmFyaWFibGU7IGRvIG5vdCBwdXQgaXQgaW4gJFBBVEguCi1mdW5jX2N5Z3BhdGggKCkKLXsKLSAgJG9wdF9kZWJ1ZwotICBpZiB0ZXN0IC1uICIkTFRfQ1lHUEFUSCIgJiYgdGVzdCAtZiAiJExUX0NZR1BBVEgiOyB0aGVuCi0gICAgZnVuY19jeWdwYXRoX3Jlc3VsdD1gJExUX0NZR1BBVEggIiRAIiAyPi9kZXYvbnVsbGAKLSAgICBpZiB0ZXN0ICIkPyIgLW5lIDA7IHRoZW4KLSAgICAgICMgb24gZmFpbHVyZSwgZW5zdXJlIHJlc3VsdCBpcyBlbXB0eQotICAgICAgZnVuY19jeWdwYXRoX3Jlc3VsdD0KLSAgICBmaQotICBlbHNlCi0gICAgZnVuY19jeWdwYXRoX3Jlc3VsdD0KLSAgICBmdW5jX2Vycm9yICJMVF9DWUdQQVRIIGlzIGVtcHR5IG9yIHNwZWNpZmllcyBub24tZXhpc3RlbnQgZmlsZTogXGAkTFRfQ1lHUEFUSCciCi0gIGZpCi19Ci0jZW5kOiBmdW5jX2N5Z3BhdGgKLQotCi0jIGZ1bmNfY29udmVydF9jb3JlX21zeXNfdG9fdzMyIEFSRwotIyBDb252ZXJ0IGZpbGUgbmFtZSBvciBwYXRoIEFSRyBmcm9tIE1TWVMgZm9ybWF0IHRvIHczMiBmb3JtYXQuICBSZXR1cm4KLSMgcmVzdWx0IGluIGZ1bmNfY29udmVydF9jb3JlX21zeXNfdG9fdzMyX3Jlc3VsdC4KLWZ1bmNfY29udmVydF9jb3JlX21zeXNfdG9fdzMyICgpCi17Ci0gICRvcHRfZGVidWcKLSAgIyBhd2t3YXJkOiBjbWQgYXBwZW5kcyBzcGFjZXMgdG8gcmVzdWx0Ci0gIGZ1bmNfY29udmVydF9jb3JlX21zeXNfdG9fdzMyX3Jlc3VsdD1gKCBjbWQgLy9jIGVjaG8gIiQxIiApIDI+L2Rldi9udWxsIHwKLSAgICAkU0VEIC1lICdzL1sgXSokLy8nIC1lICIkbHRfc2VkX25haXZlX2JhY2tzbGFzaGlmeSJgCi19Ci0jZW5kOiBmdW5jX2NvbnZlcnRfY29yZV9tc3lzX3RvX3czMgotCi0KLSMgZnVuY19jb252ZXJ0X2ZpbGVfY2hlY2sgQVJHMSBBUkcyCi0jIFZlcmlmeSB0aGF0IEFSRzEgKGEgZmlsZSBuYW1lIGluICRidWlsZCBmb3JtYXQpIHdhcyBjb252ZXJ0ZWQgdG8gJGhvc3QKLSMgZm9ybWF0IGluIEFSRzIuIE90aGVyd2lzZSwgZW1pdCBhbiBlcnJvciBtZXNzYWdlLCBidXQgY29udGludWUgKHJlc2V0dGluZwotIyBmdW5jX3RvX2hvc3RfZmlsZV9yZXN1bHQgdG8gQVJHMSkuCi1mdW5jX2NvbnZlcnRfZmlsZV9jaGVjayAoKQotewotICAkb3B0X2RlYnVnCi0gIGlmIHRlc3QgLXogIiQyIiAmJiB0ZXN0IC1uICIkMSIgOyB0aGVuCi0gICAgZnVuY19lcnJvciAiQ291bGQgbm90IGRldGVybWluZSBob3N0IGZpbGUgbmFtZSBjb3JyZXNwb25kaW5nIHRvIgotICAgIGZ1bmNfZXJyb3IgIiAgXGAkMSciCi0gICAgZnVuY19lcnJvciAiQ29udGludWluZywgYnV0IHVuaW5zdGFsbGVkIGV4ZWN1dGFibGVzIG1heSBub3Qgd29yay4iCi0gICAgIyBGYWxsYmFjazoKLSAgICBmdW5jX3RvX2hvc3RfZmlsZV9yZXN1bHQ9IiQxIgotICBmaQotfQotIyBlbmQgZnVuY19jb252ZXJ0X2ZpbGVfY2hlY2sKLQotCi0jIGZ1bmNfY29udmVydF9wYXRoX2NoZWNrIEZST01fUEFUSFNFUCBUT19QQVRIU0VQIEZST01fUEFUSCBUT19QQVRICi0jIFZlcmlmeSB0aGF0IEZST01fUEFUSCAoYSBwYXRoIGluICRidWlsZCBmb3JtYXQpIHdhcyBjb252ZXJ0ZWQgdG8gJGhvc3QKLSMgZm9ybWF0IGluIFRPX1BBVEguIE90aGVyd2lzZSwgZW1pdCBhbiBlcnJvciBtZXNzYWdlLCBidXQgY29udGludWUsIHJlc2V0dGluZwotIyBmdW5jX3RvX2hvc3RfZmlsZV9yZXN1bHQgdG8gYSBzaW1wbGlzdGljIGZhbGxiYWNrIHZhbHVlIChzZWUgYmVsb3cpLgotZnVuY19jb252ZXJ0X3BhdGhfY2hlY2sgKCkKLXsKLSAgJG9wdF9kZWJ1ZwotICBpZiB0ZXN0IC16ICIkNCIgJiYgdGVzdCAtbiAiJDMiOyB0aGVuCi0gICAgZnVuY19lcnJvciAiQ291bGQgbm90IGRldGVybWluZSB0aGUgaG9zdCBwYXRoIGNvcnJlc3BvbmRpbmcgdG8iCi0gICAgZnVuY19lcnJvciAiICBcYCQzJyIKLSAgICBmdW5jX2Vycm9yICJDb250aW51aW5nLCBidXQgdW5pbnN0YWxsZWQgZXhlY3V0YWJsZXMgbWF5IG5vdCB3b3JrLiIKLSAgICAjIEZhbGxiYWNrLiAgVGhpcyBpcyBhIGRlbGliZXJhdGVseSBzaW1wbGlzdGljICJjb252ZXJzaW9uIiBhbmQKLSAgICAjIHNob3VsZCBub3QgYmUgImltcHJvdmVkIi4gIFNlZSBsaWJ0b29sLmluZm8uCi0gICAgaWYgdGVzdCAieCQxIiAhPSAieCQyIjsgdGhlbgotICAgICAgbHRfcmVwbGFjZV9wYXRoc2VwX2NoYXJzPSJzfCQxfCQyfGciCi0gICAgICBmdW5jX3RvX2hvc3RfcGF0aF9yZXN1bHQ9YGVjaG8gIiQzIiB8Ci0gICAgICAgICRTRUQgLWUgIiRsdF9yZXBsYWNlX3BhdGhzZXBfY2hhcnMiYAotICAgIGVsc2UKLSAgICAgIGZ1bmNfdG9faG9zdF9wYXRoX3Jlc3VsdD0iJDMiCi0gICAgZmkKLSAgZmkKLX0KLSMgZW5kIGZ1bmNfY29udmVydF9wYXRoX2NoZWNrCi0KLQotIyBmdW5jX2NvbnZlcnRfcGF0aF9mcm9udF9iYWNrX3BhdGhzZXAgRlJPTlRQQVQgQkFDS1BBVCBSRVBMIE9SSUcKLSMgTW9kaWZpZXMgZnVuY190b19ob3N0X3BhdGhfcmVzdWx0IGJ5IHByZXBlbmRpbmcgUkVQTCBpZiBPUklHIG1hdGNoZXMgRlJPTlRQQVQKLSMgYW5kIGFwcGVuZGluZyBSRVBMIGlmIE9SSUcgbWF0Y2hlcyBCQUNLUEFULgotZnVuY19jb252ZXJ0X3BhdGhfZnJvbnRfYmFja19wYXRoc2VwICgpCi17Ci0gICRvcHRfZGVidWcKLSAgY2FzZSAkNCBpbgotICAkMSApIGZ1bmNfdG9faG9zdF9wYXRoX3Jlc3VsdD0iJDMkZnVuY190b19ob3N0X3BhdGhfcmVzdWx0IgotICAgIDs7Ci0gIGVzYWMKLSAgY2FzZSAkNCBpbgotICAkMiApIGZ1bmNfYXBwZW5kIGZ1bmNfdG9faG9zdF9wYXRoX3Jlc3VsdCAiJDMiCi0gICAgOzsKLSAgZXNhYwotfQotIyBlbmQgZnVuY19jb252ZXJ0X3BhdGhfZnJvbnRfYmFja19wYXRoc2VwCi0KLQotIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKLSMgJGJ1aWxkIHRvICRob3N0IEZJTEUgTkFNRSBDT05WRVJTSU9OIEZVTkNUSU9OUyAjCi0jIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwotIyBpbnZva2VkIHZpYSBgJHRvX2hvc3RfZmlsZV9jbWQgQVJHJwotIwotIyBJbiBlYWNoIGNhc2UsIEFSRyBpcyB0aGUgcGF0aCB0byBiZSBjb252ZXJ0ZWQgZnJvbSAkYnVpbGQgdG8gJGhvc3QgZm9ybWF0LgotIyBSZXN1bHQgd2lsbCBiZSBhdmFpbGFibGUgaW4gJGZ1bmNfdG9faG9zdF9maWxlX3Jlc3VsdC4KLQotCi0jIGZ1bmNfdG9faG9zdF9maWxlIEFSRwotIyBDb252ZXJ0cyB0aGUgZmlsZSBuYW1lIEFSRyBmcm9tICRidWlsZCBmb3JtYXQgdG8gJGhvc3QgZm9ybWF0LiBSZXR1cm4gcmVzdWx0Ci0jIGluIGZ1bmNfdG9faG9zdF9maWxlX3Jlc3VsdC4KLWZ1bmNfdG9faG9zdF9maWxlICgpCi17Ci0gICRvcHRfZGVidWcKLSAgJHRvX2hvc3RfZmlsZV9jbWQgIiQxIgotfQotIyBlbmQgZnVuY190b19ob3N0X2ZpbGUKLQotCi0jIGZ1bmNfdG9fdG9vbF9maWxlIEFSRyBMQVpZCi0jIGNvbnZlcnRzIHRoZSBmaWxlIG5hbWUgQVJHIGZyb20gJGJ1aWxkIGZvcm1hdCB0byB0b29sY2hhaW4gZm9ybWF0LiBSZXR1cm4KLSMgcmVzdWx0IGluIGZ1bmNfdG9fdG9vbF9maWxlX3Jlc3VsdC4gIElmIHRoZSBjb252ZXJzaW9uIGluIHVzZSBpcyBsaXN0ZWQKLSMgaW4gKHRoZSBjb21tYSBzZXBhcmF0ZWQpIExBWlksIG5vIGNvbnZlcnNpb24gdGFrZXMgcGxhY2UuCi1mdW5jX3RvX3Rvb2xfZmlsZSAoKQotewotICAkb3B0X2RlYnVnCi0gIGNhc2UgLCQyLCBpbgotICAgICosIiR0b190b29sX2ZpbGVfY21kIiwqKQotICAgICAgZnVuY190b190b29sX2ZpbGVfcmVzdWx0PSQxCi0gICAgICA7OwotICAgICopCi0gICAgICAkdG9fdG9vbF9maWxlX2NtZCAiJDEiCi0gICAgICBmdW5jX3RvX3Rvb2xfZmlsZV9yZXN1bHQ9JGZ1bmNfdG9faG9zdF9maWxlX3Jlc3VsdAotICAgICAgOzsKLSAgZXNhYwotfQotIyBlbmQgZnVuY190b190b29sX2ZpbGUKLQotCi0jIGZ1bmNfY29udmVydF9maWxlX25vb3AgQVJHCi0jIENvcHkgQVJHIHRvIGZ1bmNfdG9faG9zdF9maWxlX3Jlc3VsdC4KLWZ1bmNfY29udmVydF9maWxlX25vb3AgKCkKLXsKLSAgZnVuY190b19ob3N0X2ZpbGVfcmVzdWx0PSIkMSIKLX0KLSMgZW5kIGZ1bmNfY29udmVydF9maWxlX25vb3AKLQotCi0jIGZ1bmNfY29udmVydF9maWxlX21zeXNfdG9fdzMyIEFSRwotIyBDb252ZXJ0IGZpbGUgbmFtZSBBUkcgZnJvbSAobWluZ3cpIE1TWVMgdG8gKG1pbmd3KSB3MzIgZm9ybWF0OyBhdXRvbWF0aWMKLSMgY29udmVyc2lvbiB0byB3MzIgaXMgbm90IGF2YWlsYWJsZSBpbnNpZGUgdGhlIGN3cmFwcGVyLiAgUmV0dXJucyByZXN1bHQgaW4KLSMgZnVuY190b19ob3N0X2ZpbGVfcmVzdWx0LgotZnVuY19jb252ZXJ0X2ZpbGVfbXN5c190b193MzIgKCkKLXsKLSAgJG9wdF9kZWJ1ZwotICBmdW5jX3RvX2hvc3RfZmlsZV9yZXN1bHQ9IiQxIgotICBpZiB0ZXN0IC1uICIkMSI7IHRoZW4KLSAgICBmdW5jX2NvbnZlcnRfY29yZV9tc3lzX3RvX3czMiAiJDEiCi0gICAgZnVuY190b19ob3N0X2ZpbGVfcmVzdWx0PSIkZnVuY19jb252ZXJ0X2NvcmVfbXN5c190b193MzJfcmVzdWx0IgotICBmaQotICBmdW5jX2NvbnZlcnRfZmlsZV9jaGVjayAiJDEiICIkZnVuY190b19ob3N0X2ZpbGVfcmVzdWx0IgotfQotIyBlbmQgZnVuY19jb252ZXJ0X2ZpbGVfbXN5c190b193MzIKLQotCi0jIGZ1bmNfY29udmVydF9maWxlX2N5Z3dpbl90b193MzIgQVJHCi0jIENvbnZlcnQgZmlsZSBuYW1lIEFSRyBmcm9tIEN5Z3dpbiB0byB3MzIgZm9ybWF0LiAgUmV0dXJucyByZXN1bHQgaW4KLSMgZnVuY190b19ob3N0X2ZpbGVfcmVzdWx0LgotZnVuY19jb252ZXJ0X2ZpbGVfY3lnd2luX3RvX3czMiAoKQotewotICAkb3B0X2RlYnVnCi0gIGZ1bmNfdG9faG9zdF9maWxlX3Jlc3VsdD0iJDEiCi0gIGlmIHRlc3QgLW4gIiQxIjsgdGhlbgotICAgICMgYmVjYXVzZSAkYnVpbGQgaXMgY3lnd2luLCB3ZSBjYWxsICJ0aGUiIGN5Z3BhdGggaW4gJFBBVEg7IG5vIG5lZWQgdG8gdXNlCi0gICAgIyBMVF9DWUdQQVRIIGluIHRoaXMgY2FzZS4KLSAgICBmdW5jX3RvX2hvc3RfZmlsZV9yZXN1bHQ9YGN5Z3BhdGggLW0gIiQxImAKLSAgZmkKLSAgZnVuY19jb252ZXJ0X2ZpbGVfY2hlY2sgIiQxIiAiJGZ1bmNfdG9faG9zdF9maWxlX3Jlc3VsdCIKLX0KLSMgZW5kIGZ1bmNfY29udmVydF9maWxlX2N5Z3dpbl90b193MzIKLQotCi0jIGZ1bmNfY29udmVydF9maWxlX25peF90b193MzIgQVJHCi0jIENvbnZlcnQgZmlsZSBuYW1lIEFSRyBmcm9tICpuaXggdG8gdzMyIGZvcm1hdC4gIFJlcXVpcmVzIGEgd2luZSBlbnZpcm9ubWVudAotIyBhbmQgYSB3b3JraW5nIHdpbmVwYXRoLiBSZXR1cm5zIHJlc3VsdCBpbiBmdW5jX3RvX2hvc3RfZmlsZV9yZXN1bHQuCi1mdW5jX2NvbnZlcnRfZmlsZV9uaXhfdG9fdzMyICgpCi17Ci0gICRvcHRfZGVidWcKLSAgZnVuY190b19ob3N0X2ZpbGVfcmVzdWx0PSIkMSIKLSAgaWYgdGVzdCAtbiAiJDEiOyB0aGVuCi0gICAgZnVuY19jb252ZXJ0X2NvcmVfZmlsZV93aW5lX3RvX3czMiAiJDEiCi0gICAgZnVuY190b19ob3N0X2ZpbGVfcmVzdWx0PSIkZnVuY19jb252ZXJ0X2NvcmVfZmlsZV93aW5lX3RvX3czMl9yZXN1bHQiCi0gIGZpCi0gIGZ1bmNfY29udmVydF9maWxlX2NoZWNrICIkMSIgIiRmdW5jX3RvX2hvc3RfZmlsZV9yZXN1bHQiCi19Ci0jIGVuZCBmdW5jX2NvbnZlcnRfZmlsZV9uaXhfdG9fdzMyCi0KLQotIyBmdW5jX2NvbnZlcnRfZmlsZV9tc3lzX3RvX2N5Z3dpbiBBUkcKLSMgQ29udmVydCBmaWxlIG5hbWUgQVJHIGZyb20gTVNZUyB0byBDeWd3aW4gZm9ybWF0LiAgUmVxdWlyZXMgTFRfQ1lHUEFUSCBzZXQuCi0jIFJldHVybnMgcmVzdWx0IGluIGZ1bmNfdG9faG9zdF9maWxlX3Jlc3VsdC4KLWZ1bmNfY29udmVydF9maWxlX21zeXNfdG9fY3lnd2luICgpCi17Ci0gICRvcHRfZGVidWcKLSAgZnVuY190b19ob3N0X2ZpbGVfcmVzdWx0PSIkMSIKLSAgaWYgdGVzdCAtbiAiJDEiOyB0aGVuCi0gICAgZnVuY19jb252ZXJ0X2NvcmVfbXN5c190b193MzIgIiQxIgotICAgIGZ1bmNfY3lncGF0aCAtdSAiJGZ1bmNfY29udmVydF9jb3JlX21zeXNfdG9fdzMyX3Jlc3VsdCIKLSAgICBmdW5jX3RvX2hvc3RfZmlsZV9yZXN1bHQ9IiRmdW5jX2N5Z3BhdGhfcmVzdWx0IgotICBmaQotICBmdW5jX2NvbnZlcnRfZmlsZV9jaGVjayAiJDEiICIkZnVuY190b19ob3N0X2ZpbGVfcmVzdWx0IgotfQotIyBlbmQgZnVuY19jb252ZXJ0X2ZpbGVfbXN5c190b19jeWd3aW4KLQotCi0jIGZ1bmNfY29udmVydF9maWxlX25peF90b19jeWd3aW4gQVJHCi0jIENvbnZlcnQgZmlsZSBuYW1lIEFSRyBmcm9tICpuaXggdG8gQ3lnd2luIGZvcm1hdC4gIFJlcXVpcmVzIEN5Z3dpbiBpbnN0YWxsZWQKLSMgaW4gYSB3aW5lIGVudmlyb25tZW50LCB3b3JraW5nIHdpbmVwYXRoLCBhbmQgTFRfQ1lHUEFUSCBzZXQuICBSZXR1cm5zIHJlc3VsdAotIyBpbiBmdW5jX3RvX2hvc3RfZmlsZV9yZXN1bHQuCi1mdW5jX2NvbnZlcnRfZmlsZV9uaXhfdG9fY3lnd2luICgpCi17Ci0gICRvcHRfZGVidWcKLSAgZnVuY190b19ob3N0X2ZpbGVfcmVzdWx0PSIkMSIKLSAgaWYgdGVzdCAtbiAiJDEiOyB0aGVuCi0gICAgIyBjb252ZXJ0IGZyb20gKm5peCB0byB3MzIsIHRoZW4gdXNlIGN5Z3BhdGggdG8gY29udmVydCBmcm9tIHczMiB0byBjeWd3aW4uCi0gICAgZnVuY19jb252ZXJ0X2NvcmVfZmlsZV93aW5lX3RvX3czMiAiJDEiCi0gICAgZnVuY19jeWdwYXRoIC11ICIkZnVuY19jb252ZXJ0X2NvcmVfZmlsZV93aW5lX3RvX3czMl9yZXN1bHQiCi0gICAgZnVuY190b19ob3N0X2ZpbGVfcmVzdWx0PSIkZnVuY19jeWdwYXRoX3Jlc3VsdCIKLSAgZmkKLSAgZnVuY19jb252ZXJ0X2ZpbGVfY2hlY2sgIiQxIiAiJGZ1bmNfdG9faG9zdF9maWxlX3Jlc3VsdCIKLX0KLSMgZW5kIGZ1bmNfY29udmVydF9maWxlX25peF90b19jeWd3aW4KLQotCi0jIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKLSMgJGJ1aWxkIHRvICRob3N0IFBBVEggQ09OVkVSU0lPTiBGVU5DVElPTlMgIwotIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCi0jIGludm9rZWQgdmlhIGAkdG9faG9zdF9wYXRoX2NtZCBBUkcnCi0jCi0jIEluIGVhY2ggY2FzZSwgQVJHIGlzIHRoZSBwYXRoIHRvIGJlIGNvbnZlcnRlZCBmcm9tICRidWlsZCB0byAkaG9zdCBmb3JtYXQuCi0jIFRoZSByZXN1bHQgd2lsbCBiZSBhdmFpbGFibGUgaW4gJGZ1bmNfdG9faG9zdF9wYXRoX3Jlc3VsdC4KLSMKLSMgUGF0aCBzZXBhcmF0b3JzIGFyZSBhbHNvIGNvbnZlcnRlZCBmcm9tICRidWlsZCBmb3JtYXQgdG8gJGhvc3QgZm9ybWF0LiAgSWYKLSMgQVJHIGJlZ2lucyBvciBlbmRzIHdpdGggYSBwYXRoIHNlcGFyYXRvciBjaGFyYWN0ZXIsIGl0IGlzIHByZXNlcnZlZCAoYnV0Ci0jIGNvbnZlcnRlZCB0byAkaG9zdCBmb3JtYXQpIG9uIG91dHB1dC4KLSMKLSMgQWxsIHBhdGggY29udmVyc2lvbiBmdW5jdGlvbnMgYXJlIG5hbWVkIHVzaW5nIHRoZSBmb2xsb3dpbmcgY29udmVudGlvbjoKLSMgICBmaWxlIG5hbWUgY29udmVyc2lvbiBmdW5jdGlvbiAgICA6IGZ1bmNfY29udmVydF9maWxlX1hfdG9fWSAoKQotIyAgIHBhdGggY29udmVyc2lvbiBmdW5jdGlvbiAgICAgICAgIDogZnVuY19jb252ZXJ0X3BhdGhfWF90b19ZICgpCi0jIHdoZXJlLCBmb3IgYW55IGdpdmVuICRidWlsZC8kaG9zdCBjb21iaW5hdGlvbiB0aGUgJ1hfdG9fWScgdmFsdWUgaXMgdGhlCi0jIHNhbWUuICBJZiBjb252ZXJzaW9uIGZ1bmN0aW9ucyBhcmUgYWRkZWQgZm9yIG5ldyAkYnVpbGQvJGhvc3QgY29tYmluYXRpb25zLAotIyB0aGUgdHdvIG5ldyBmdW5jdGlvbnMgbXVzdCBmb2xsb3cgdGhpcyBwYXR0ZXJuLCBvciBmdW5jX2luaXRfdG9faG9zdF9wYXRoX2NtZAotIyB3aWxsIGJyZWFrLgotCi0KLSMgZnVuY19pbml0X3RvX2hvc3RfcGF0aF9jbWQKLSMgRW5zdXJlcyB0aGF0IGZ1bmN0aW9uICJwb2ludGVyIiB2YXJpYWJsZSAkdG9faG9zdF9wYXRoX2NtZCBpcyBzZXQgdG8gdGhlCi0jIGFwcHJvcHJpYXRlIHZhbHVlLCBiYXNlZCBvbiB0aGUgdmFsdWUgb2YgJHRvX2hvc3RfZmlsZV9jbWQuCi10b19ob3N0X3BhdGhfY21kPQotZnVuY19pbml0X3RvX2hvc3RfcGF0aF9jbWQgKCkKLXsKLSAgJG9wdF9kZWJ1ZwotICBpZiB0ZXN0IC16ICIkdG9faG9zdF9wYXRoX2NtZCI7IHRoZW4KLSAgICBmdW5jX3N0cmlwbmFtZSAnZnVuY19jb252ZXJ0X2ZpbGVfJyAnJyAiJHRvX2hvc3RfZmlsZV9jbWQiCi0gICAgdG9faG9zdF9wYXRoX2NtZD0iZnVuY19jb252ZXJ0X3BhdGhfJHtmdW5jX3N0cmlwbmFtZV9yZXN1bHR9IgotICBmaQotfQotCi0KLSMgZnVuY190b19ob3N0X3BhdGggQVJHCi0jIENvbnZlcnRzIHRoZSBwYXRoIEFSRyBmcm9tICRidWlsZCBmb3JtYXQgdG8gJGhvc3QgZm9ybWF0LiBSZXR1cm4gcmVzdWx0Ci0jIGluIGZ1bmNfdG9faG9zdF9wYXRoX3Jlc3VsdC4KLWZ1bmNfdG9faG9zdF9wYXRoICgpCi17Ci0gICRvcHRfZGVidWcKLSAgZnVuY19pbml0X3RvX2hvc3RfcGF0aF9jbWQKLSAgJHRvX2hvc3RfcGF0aF9jbWQgIiQxIgotfQotIyBlbmQgZnVuY190b19ob3N0X3BhdGgKLQotCi0jIGZ1bmNfY29udmVydF9wYXRoX25vb3AgQVJHCi0jIENvcHkgQVJHIHRvIGZ1bmNfdG9faG9zdF9wYXRoX3Jlc3VsdC4KLWZ1bmNfY29udmVydF9wYXRoX25vb3AgKCkKLXsKLSAgZnVuY190b19ob3N0X3BhdGhfcmVzdWx0PSIkMSIKLX0KLSMgZW5kIGZ1bmNfY29udmVydF9wYXRoX25vb3AKLQotCi0jIGZ1bmNfY29udmVydF9wYXRoX21zeXNfdG9fdzMyIEFSRwotIyBDb252ZXJ0IHBhdGggQVJHIGZyb20gKG1pbmd3KSBNU1lTIHRvIChtaW5ndykgdzMyIGZvcm1hdDsgYXV0b21hdGljCi0jIGNvbnZlcnNpb24gdG8gdzMyIGlzIG5vdCBhdmFpbGFibGUgaW5zaWRlIHRoZSBjd3JhcHBlci4gIFJldHVybnMgcmVzdWx0IGluCi0jIGZ1bmNfdG9faG9zdF9wYXRoX3Jlc3VsdC4KLWZ1bmNfY29udmVydF9wYXRoX21zeXNfdG9fdzMyICgpCi17Ci0gICRvcHRfZGVidWcKLSAgZnVuY190b19ob3N0X3BhdGhfcmVzdWx0PSIkMSIKLSAgaWYgdGVzdCAtbiAiJDEiOyB0aGVuCi0gICAgIyBSZW1vdmUgbGVhZGluZyBhbmQgdHJhaWxpbmcgcGF0aCBzZXBhcmF0b3IgY2hhcmFjdGVycyBmcm9tIEFSRy4gIE1TWVMKLSAgICAjIGJlaGF2aW9yIGlzIGluY29uc2lzdGVudCBoZXJlOyBjeWdwYXRoIHR1cm5zIHRoZW0gaW50byAnLjsnIGFuZCAnOy4nOwotICAgICMgYW5kIHdpbmVwYXRoIGlnbm9yZXMgdGhlbSBjb21wbGV0ZWx5LgotICAgIGZ1bmNfc3RyaXBuYW1lIDogOiAiJDEiCi0gICAgZnVuY190b19ob3N0X3BhdGhfdG1wMT0kZnVuY19zdHJpcG5hbWVfcmVzdWx0Ci0gICAgZnVuY19jb252ZXJ0X2NvcmVfbXN5c190b193MzIgIiRmdW5jX3RvX2hvc3RfcGF0aF90bXAxIgotICAgIGZ1bmNfdG9faG9zdF9wYXRoX3Jlc3VsdD0iJGZ1bmNfY29udmVydF9jb3JlX21zeXNfdG9fdzMyX3Jlc3VsdCIKLSAgICBmdW5jX2NvbnZlcnRfcGF0aF9jaGVjayA6ICI7IiBcCi0gICAgICAiJGZ1bmNfdG9faG9zdF9wYXRoX3RtcDEiICIkZnVuY190b19ob3N0X3BhdGhfcmVzdWx0IgotICAgIGZ1bmNfY29udmVydF9wYXRoX2Zyb250X2JhY2tfcGF0aHNlcCAiOioiICIqOiIgIjsiICIkMSIKLSAgZmkKLX0KLSMgZW5kIGZ1bmNfY29udmVydF9wYXRoX21zeXNfdG9fdzMyCi0KLQotIyBmdW5jX2NvbnZlcnRfcGF0aF9jeWd3aW5fdG9fdzMyIEFSRwotIyBDb252ZXJ0IHBhdGggQVJHIGZyb20gQ3lnd2luIHRvIHczMiBmb3JtYXQuICBSZXR1cm5zIHJlc3VsdCBpbgotIyBmdW5jX3RvX2hvc3RfZmlsZV9yZXN1bHQuCi1mdW5jX2NvbnZlcnRfcGF0aF9jeWd3aW5fdG9fdzMyICgpCi17Ci0gICRvcHRfZGVidWcKLSAgZnVuY190b19ob3N0X3BhdGhfcmVzdWx0PSIkMSIKLSAgaWYgdGVzdCAtbiAiJDEiOyB0aGVuCi0gICAgIyBTZWUgZnVuY19jb252ZXJ0X3BhdGhfbXN5c190b193MzI6Ci0gICAgZnVuY19zdHJpcG5hbWUgOiA6ICIkMSIKLSAgICBmdW5jX3RvX2hvc3RfcGF0aF90bXAxPSRmdW5jX3N0cmlwbmFtZV9yZXN1bHQKLSAgICBmdW5jX3RvX2hvc3RfcGF0aF9yZXN1bHQ9YGN5Z3BhdGggLW0gLXAgIiRmdW5jX3RvX2hvc3RfcGF0aF90bXAxImAKLSAgICBmdW5jX2NvbnZlcnRfcGF0aF9jaGVjayA6ICI7IiBcCi0gICAgICAiJGZ1bmNfdG9faG9zdF9wYXRoX3RtcDEiICIkZnVuY190b19ob3N0X3BhdGhfcmVzdWx0IgotICAgIGZ1bmNfY29udmVydF9wYXRoX2Zyb250X2JhY2tfcGF0aHNlcCAiOioiICIqOiIgIjsiICIkMSIKLSAgZmkKLX0KLSMgZW5kIGZ1bmNfY29udmVydF9wYXRoX2N5Z3dpbl90b193MzIKLQotCi0jIGZ1bmNfY29udmVydF9wYXRoX25peF90b193MzIgQVJHCi0jIENvbnZlcnQgcGF0aCBBUkcgZnJvbSAqbml4IHRvIHczMiBmb3JtYXQuICBSZXF1aXJlcyBhIHdpbmUgZW52aXJvbm1lbnQgYW5kCi0jIGEgd29ya2luZyB3aW5lcGF0aC4gIFJldHVybnMgcmVzdWx0IGluIGZ1bmNfdG9faG9zdF9maWxlX3Jlc3VsdC4KLWZ1bmNfY29udmVydF9wYXRoX25peF90b193MzIgKCkKLXsKLSAgJG9wdF9kZWJ1ZwotICBmdW5jX3RvX2hvc3RfcGF0aF9yZXN1bHQ9IiQxIgotICBpZiB0ZXN0IC1uICIkMSI7IHRoZW4KLSAgICAjIFNlZSBmdW5jX2NvbnZlcnRfcGF0aF9tc3lzX3RvX3czMjoKLSAgICBmdW5jX3N0cmlwbmFtZSA6IDogIiQxIgotICAgIGZ1bmNfdG9faG9zdF9wYXRoX3RtcDE9JGZ1bmNfc3RyaXBuYW1lX3Jlc3VsdAotICAgIGZ1bmNfY29udmVydF9jb3JlX3BhdGhfd2luZV90b193MzIgIiRmdW5jX3RvX2hvc3RfcGF0aF90bXAxIgotICAgIGZ1bmNfdG9faG9zdF9wYXRoX3Jlc3VsdD0iJGZ1bmNfY29udmVydF9jb3JlX3BhdGhfd2luZV90b193MzJfcmVzdWx0IgotICAgIGZ1bmNfY29udmVydF9wYXRoX2NoZWNrIDogIjsiIFwKLSAgICAgICIkZnVuY190b19ob3N0X3BhdGhfdG1wMSIgIiRmdW5jX3RvX2hvc3RfcGF0aF9yZXN1bHQiCi0gICAgZnVuY19jb252ZXJ0X3BhdGhfZnJvbnRfYmFja19wYXRoc2VwICI6KiIgIio6IiAiOyIgIiQxIgotICBmaQotfQotIyBlbmQgZnVuY19jb252ZXJ0X3BhdGhfbml4X3RvX3czMgotCi0KLSMgZnVuY19jb252ZXJ0X3BhdGhfbXN5c190b19jeWd3aW4gQVJHCi0jIENvbnZlcnQgcGF0aCBBUkcgZnJvbSBNU1lTIHRvIEN5Z3dpbiBmb3JtYXQuICBSZXF1aXJlcyBMVF9DWUdQQVRIIHNldC4KLSMgUmV0dXJucyByZXN1bHQgaW4gZnVuY190b19ob3N0X2ZpbGVfcmVzdWx0LgotZnVuY19jb252ZXJ0X3BhdGhfbXN5c190b19jeWd3aW4gKCkKLXsKLSAgJG9wdF9kZWJ1ZwotICBmdW5jX3RvX2hvc3RfcGF0aF9yZXN1bHQ9IiQxIgotICBpZiB0ZXN0IC1uICIkMSI7IHRoZW4KLSAgICAjIFNlZSBmdW5jX2NvbnZlcnRfcGF0aF9tc3lzX3RvX3czMjoKLSAgICBmdW5jX3N0cmlwbmFtZSA6IDogIiQxIgotICAgIGZ1bmNfdG9faG9zdF9wYXRoX3RtcDE9JGZ1bmNfc3RyaXBuYW1lX3Jlc3VsdAotICAgIGZ1bmNfY29udmVydF9jb3JlX21zeXNfdG9fdzMyICIkZnVuY190b19ob3N0X3BhdGhfdG1wMSIKLSAgICBmdW5jX2N5Z3BhdGggLXUgLXAgIiRmdW5jX2NvbnZlcnRfY29yZV9tc3lzX3RvX3czMl9yZXN1bHQiCi0gICAgZnVuY190b19ob3N0X3BhdGhfcmVzdWx0PSIkZnVuY19jeWdwYXRoX3Jlc3VsdCIKLSAgICBmdW5jX2NvbnZlcnRfcGF0aF9jaGVjayA6IDogXAotICAgICAgIiRmdW5jX3RvX2hvc3RfcGF0aF90bXAxIiAiJGZ1bmNfdG9faG9zdF9wYXRoX3Jlc3VsdCIKLSAgICBmdW5jX2NvbnZlcnRfcGF0aF9mcm9udF9iYWNrX3BhdGhzZXAgIjoqIiAiKjoiIDogIiQxIgotICBmaQotfQotIyBlbmQgZnVuY19jb252ZXJ0X3BhdGhfbXN5c190b19jeWd3aW4KLQotCi0jIGZ1bmNfY29udmVydF9wYXRoX25peF90b19jeWd3aW4gQVJHCi0jIENvbnZlcnQgcGF0aCBBUkcgZnJvbSAqbml4IHRvIEN5Z3dpbiBmb3JtYXQuICBSZXF1aXJlcyBDeWd3aW4gaW5zdGFsbGVkIGluIGEKLSMgYSB3aW5lIGVudmlyb25tZW50LCB3b3JraW5nIHdpbmVwYXRoLCBhbmQgTFRfQ1lHUEFUSCBzZXQuICBSZXR1cm5zIHJlc3VsdCBpbgotIyBmdW5jX3RvX2hvc3RfZmlsZV9yZXN1bHQuCi1mdW5jX2NvbnZlcnRfcGF0aF9uaXhfdG9fY3lnd2luICgpCi17Ci0gICRvcHRfZGVidWcKLSAgZnVuY190b19ob3N0X3BhdGhfcmVzdWx0PSIkMSIKLSAgaWYgdGVzdCAtbiAiJDEiOyB0aGVuCi0gICAgIyBSZW1vdmUgbGVhZGluZyBhbmQgdHJhaWxpbmcgcGF0aCBzZXBhcmF0b3IgY2hhcmFjdGVycyBmcm9tCi0gICAgIyBBUkcuIG1zeXMgYmVoYXZpb3IgaXMgaW5jb25zaXN0ZW50IGhlcmUsIGN5Z3BhdGggdHVybnMgdGhlbQotICAgICMgaW50byAnLjsnIGFuZCAnOy4nLCBhbmQgd2luZXBhdGggaWdub3JlcyB0aGVtIGNvbXBsZXRlbHkuCi0gICAgZnVuY19zdHJpcG5hbWUgOiA6ICIkMSIKLSAgICBmdW5jX3RvX2hvc3RfcGF0aF90bXAxPSRmdW5jX3N0cmlwbmFtZV9yZXN1bHQKLSAgICBmdW5jX2NvbnZlcnRfY29yZV9wYXRoX3dpbmVfdG9fdzMyICIkZnVuY190b19ob3N0X3BhdGhfdG1wMSIKLSAgICBmdW5jX2N5Z3BhdGggLXUgLXAgIiRmdW5jX2NvbnZlcnRfY29yZV9wYXRoX3dpbmVfdG9fdzMyX3Jlc3VsdCIKLSAgICBmdW5jX3RvX2hvc3RfcGF0aF9yZXN1bHQ9IiRmdW5jX2N5Z3BhdGhfcmVzdWx0IgotICAgIGZ1bmNfY29udmVydF9wYXRoX2NoZWNrIDogOiBcCi0gICAgICAiJGZ1bmNfdG9faG9zdF9wYXRoX3RtcDEiICIkZnVuY190b19ob3N0X3BhdGhfcmVzdWx0IgotICAgIGZ1bmNfY29udmVydF9wYXRoX2Zyb250X2JhY2tfcGF0aHNlcCAiOioiICIqOiIgOiAiJDEiCi0gIGZpCi19Ci0jIGVuZCBmdW5jX2NvbnZlcnRfcGF0aF9uaXhfdG9fY3lnd2luCi0KLQotIyBmdW5jX21vZGVfY29tcGlsZSBhcmcuLi4KLWZ1bmNfbW9kZV9jb21waWxlICgpCi17Ci0gICAgJG9wdF9kZWJ1ZwotICAgICMgR2V0IHRoZSBjb21waWxhdGlvbiBjb21tYW5kIGFuZCB0aGUgc291cmNlIGZpbGUuCi0gICAgYmFzZV9jb21waWxlPQotICAgIHNyY2ZpbGU9IiRub25vcHQiICAjICBhbHdheXMga2VlcCBhIG5vbi1lbXB0eSB2YWx1ZSBpbiAic3JjZmlsZSIKLSAgICBzdXBwcmVzc19vcHQ9eWVzCi0gICAgc3VwcHJlc3Nfb3V0cHV0PQotICAgIGFyZ19tb2RlPW5vcm1hbAotICAgIGxpYm9iaj0KLSAgICBsYXRlcj0KLSAgICBwaWVfZmxhZz0KLQotICAgIGZvciBhcmcKLSAgICBkbwotICAgICAgY2FzZSAkYXJnX21vZGUgaW4KLSAgICAgIGFyZyAgKQotCSMgZG8gbm90ICJjb250aW51ZSIuICBJbnN0ZWFkLCBhZGQgdGhpcyB0byBiYXNlX2NvbXBpbGUKLQlsYXN0YXJnPSIkYXJnIgotCWFyZ19tb2RlPW5vcm1hbAotCTs7Ci0KLSAgICAgIHRhcmdldCApCi0JbGlib2JqPSIkYXJnIgotCWFyZ19tb2RlPW5vcm1hbAotCWNvbnRpbnVlCi0JOzsKLQotICAgICAgbm9ybWFsICkKLQkjIEFjY2VwdCBhbnkgY29tbWFuZC1saW5lIG9wdGlvbnMuCi0JY2FzZSAkYXJnIGluCi0JLW8pCi0JICB0ZXN0IC1uICIkbGlib2JqIiAmJiBcCi0JICAgIGZ1bmNfZmF0YWxfZXJyb3IgInlvdSBjYW5ub3Qgc3BlY2lmeSBcYC1vJyBtb3JlIHRoYW4gb25jZSIKLQkgIGFyZ19tb2RlPXRhcmdldAotCSAgY29udGludWUKLQkgIDs7Ci0KLQktcGllIHwgLWZwaWUgfCAtZlBJRSkKLSAgICAgICAgICBmdW5jX2FwcGVuZCBwaWVfZmxhZyAiICRhcmciCi0JICBjb250aW51ZQotCSAgOzsKLQotCS1zaGFyZWQgfCAtc3RhdGljIHwgLXByZWZlci1waWMgfCAtcHJlZmVyLW5vbi1waWMpCi0JICBmdW5jX2FwcGVuZCBsYXRlciAiICRhcmciCi0JICBjb250aW51ZQotCSAgOzsKLQotCS1uby1zdXBwcmVzcykKLQkgIHN1cHByZXNzX29wdD1ubwotCSAgY29udGludWUKLQkgIDs7Ci0KLQktWGNvbXBpbGVyKQotCSAgYXJnX21vZGU9YXJnICAjICB0aGUgbmV4dCBvbmUgZ29lcyBpbnRvIHRoZSAiYmFzZV9jb21waWxlIiBhcmcgbGlzdAotCSAgY29udGludWUgICAgICAjICBUaGUgY3VycmVudCAic3JjZmlsZSIgd2lsbCBlaXRoZXIgYmUgcmV0YWluZWQgb3IKLQkgIDs7ICAgICAgICAgICAgIyAgcmVwbGFjZWQgbGF0ZXIuICBJIHdvdWxkIGd1ZXNzIHRoYXQgd291bGQgYmUgYSBidWcuCi0KLQktV2MsKikKLQkgIGZ1bmNfc3RyaXBuYW1lICctV2MsJyAnJyAiJGFyZyIKLQkgIGFyZ3M9JGZ1bmNfc3RyaXBuYW1lX3Jlc3VsdAotCSAgbGFzdGFyZz0KLQkgIHNhdmVfaWZzPSIkSUZTIjsgSUZTPScsJwotCSAgZm9yIGFyZyBpbiAkYXJnczsgZG8KLQkgICAgSUZTPSIkc2F2ZV9pZnMiCi0JICAgIGZ1bmNfYXBwZW5kX3F1b3RlZCBsYXN0YXJnICIkYXJnIgotCSAgZG9uZQotCSAgSUZTPSIkc2F2ZV9pZnMiCi0JICBmdW5jX3N0cmlwbmFtZSAnICcgJycgIiRsYXN0YXJnIgotCSAgbGFzdGFyZz0kZnVuY19zdHJpcG5hbWVfcmVzdWx0Ci0KLQkgICMgQWRkIHRoZSBhcmd1bWVudHMgdG8gYmFzZV9jb21waWxlLgotCSAgZnVuY19hcHBlbmQgYmFzZV9jb21waWxlICIgJGxhc3RhcmciCi0JICBjb250aW51ZQotCSAgOzsKLQotCSopCi0JICAjIEFjY2VwdCB0aGUgY3VycmVudCBhcmd1bWVudCBhcyB0aGUgc291cmNlIGZpbGUuCi0JICAjIFRoZSBwcmV2aW91cyAic3JjZmlsZSIgYmVjb21lcyB0aGUgY3VycmVudCBhcmd1bWVudC4KLQkgICMKLQkgIGxhc3Rhcmc9IiRzcmNmaWxlIgotCSAgc3JjZmlsZT0iJGFyZyIKLQkgIDs7Ci0JZXNhYyAgIyAgY2FzZSAkYXJnCi0JOzsKLSAgICAgIGVzYWMgICAgIyAgY2FzZSAkYXJnX21vZGUKLQotICAgICAgIyBBZXN0aGV0aWNhbGx5IHF1b3RlIHRoZSBwcmV2aW91cyBhcmd1bWVudC4KLSAgICAgIGZ1bmNfYXBwZW5kX3F1b3RlZCBiYXNlX2NvbXBpbGUgIiRsYXN0YXJnIgotICAgIGRvbmUgIyBmb3IgYXJnCi0KLSAgICBjYXNlICRhcmdfbW9kZSBpbgotICAgIGFyZykKLSAgICAgIGZ1bmNfZmF0YWxfZXJyb3IgInlvdSBtdXN0IHNwZWNpZnkgYW4gYXJndW1lbnQgZm9yIC1YY29tcGlsZSIKLSAgICAgIDs7Ci0gICAgdGFyZ2V0KQotICAgICAgZnVuY19mYXRhbF9lcnJvciAieW91IG11c3Qgc3BlY2lmeSBhIHRhcmdldCB3aXRoIFxgLW8nIgotICAgICAgOzsKLSAgICAqKQotICAgICAgIyBHZXQgdGhlIG5hbWUgb2YgdGhlIGxpYnJhcnkgb2JqZWN0LgotICAgICAgdGVzdCAteiAiJGxpYm9iaiIgJiYgewotCWZ1bmNfYmFzZW5hbWUgIiRzcmNmaWxlIgotCWxpYm9iaj0iJGZ1bmNfYmFzZW5hbWVfcmVzdWx0IgotICAgICAgfQotICAgICAgOzsKLSAgICBlc2FjCi0KLSAgICAjIFJlY29nbml6ZSBzZXZlcmFsIGRpZmZlcmVudCBmaWxlIHN1ZmZpeGVzLgotICAgICMgSWYgdGhlIHVzZXIgc3BlY2lmaWVzIC1vIGZpbGUubywgaXQgaXMgcmVwbGFjZWQgd2l0aCBmaWxlLmxvCi0gICAgY2FzZSAkbGlib2JqIGluCi0gICAgKi5bY0NGU2lmbXNvXSB8IFwKLSAgICAqLmFkYSB8ICouYWRiIHwgKi5hZHMgfCAqLmFzbSB8IFwKLSAgICAqLmMrKyB8ICouY2MgfCAqLmlpIHwgKi5jbGFzcyB8ICouY3BwIHwgKi5jeHggfCBcCi0gICAgKi5bZkZdWzA5XT8gfCAqLmZvciB8ICouamF2YSB8ICoub2JqIHwgKi5zeCB8ICouY3UgfCAqLmN1cCkKLSAgICAgIGZ1bmNfeGZvcm0gIiRsaWJvYmoiCi0gICAgICBsaWJvYmo9JGZ1bmNfeGZvcm1fcmVzdWx0Ci0gICAgICA7OwotICAgIGVzYWMKLQotICAgIGNhc2UgJGxpYm9iaiBpbgotICAgICoubG8pIGZ1bmNfbG8ybyAiJGxpYm9iaiI7IG9iaj0kZnVuY19sbzJvX3Jlc3VsdCA7OwotICAgICopCi0gICAgICBmdW5jX2ZhdGFsX2Vycm9yICJjYW5ub3QgZGV0ZXJtaW5lIG5hbWUgb2YgbGlicmFyeSBvYmplY3QgZnJvbSBcYCRsaWJvYmonIgotICAgICAgOzsKLSAgICBlc2FjCi0KLSAgICBmdW5jX2luZmVyX3RhZyAkYmFzZV9jb21waWxlCi0KLSAgICBmb3IgYXJnIGluICRsYXRlcjsgZG8KLSAgICAgIGNhc2UgJGFyZyBpbgotICAgICAgLXNoYXJlZCkKLQl0ZXN0ICIkYnVpbGRfbGlidG9vbF9saWJzIiAhPSB5ZXMgJiYgXAotCSAgZnVuY19mYXRhbF9jb25maWd1cmF0aW9uICJjYW4gbm90IGJ1aWxkIGEgc2hhcmVkIGxpYnJhcnkiCi0JYnVpbGRfb2xkX2xpYnM9bm8KLQljb250aW51ZQotCTs7Ci0KLSAgICAgIC1zdGF0aWMpCi0JYnVpbGRfbGlidG9vbF9saWJzPW5vCi0JYnVpbGRfb2xkX2xpYnM9eWVzCi0JY29udGludWUKLQk7OwotCi0gICAgICAtcHJlZmVyLXBpYykKLQlwaWNfbW9kZT15ZXMKLQljb250aW51ZQotCTs7Ci0KLSAgICAgIC1wcmVmZXItbm9uLXBpYykKLQlwaWNfbW9kZT1ubwotCWNvbnRpbnVlCi0JOzsKLSAgICAgIGVzYWMKLSAgICBkb25lCi0KLSAgICBmdW5jX3F1b3RlX2Zvcl9ldmFsICIkbGlib2JqIgotICAgIHRlc3QgIlgkbGlib2JqIiAhPSAiWCRmdW5jX3F1b3RlX2Zvcl9ldmFsX3Jlc3VsdCIgXAotICAgICAgJiYgJEVDSE8gIlgkbGlib2JqIiB8ICRHUkVQICdbXX4jXip7fTs8Pj8iJyInIicJICYoKXxgJFtdJyBcCi0gICAgICAmJiBmdW5jX3dhcm5pbmcgImxpYm9iaiBuYW1lIFxgJGxpYm9iaicgbWF5IG5vdCBjb250YWluIHNoZWxsIHNwZWNpYWwgY2hhcmFjdGVycy4iCi0gICAgZnVuY19kaXJuYW1lX2FuZF9iYXNlbmFtZSAiJG9iaiIgIi8iICIiCi0gICAgb2JqbmFtZT0iJGZ1bmNfYmFzZW5hbWVfcmVzdWx0IgotICAgIHhkaXI9IiRmdW5jX2Rpcm5hbWVfcmVzdWx0IgotICAgIGxvYmo9JHt4ZGlyfSRvYmpkaXIvJG9iam5hbWUKLQotICAgIHRlc3QgLXogIiRiYXNlX2NvbXBpbGUiICYmIFwKLSAgICAgIGZ1bmNfZmF0YWxfaGVscCAieW91IG11c3Qgc3BlY2lmeSBhIGNvbXBpbGF0aW9uIGNvbW1hbmQiCi0KLSAgICAjIERlbGV0ZSBhbnkgbGVmdG92ZXIgbGlicmFyeSBvYmplY3RzLgotICAgIGlmIHRlc3QgIiRidWlsZF9vbGRfbGlicyIgPSB5ZXM7IHRoZW4KLSAgICAgIHJlbW92ZWxpc3Q9IiRvYmogJGxvYmogJGxpYm9iaiAke2xpYm9ian1UIgotICAgIGVsc2UKLSAgICAgIHJlbW92ZWxpc3Q9IiRsb2JqICRsaWJvYmogJHtsaWJvYmp9VCIKLSAgICBmaQotCi0gICAgIyBPbiBDeWd3aW4gdGhlcmUncyBubyAicmVhbCIgUElDIGZsYWcgc28gd2UgbXVzdCBidWlsZCBib3RoIG9iamVjdCB0eXBlcwotICAgIGNhc2UgJGhvc3Rfb3MgaW4KLSAgICBjeWd3aW4qIHwgbWluZ3cqIHwgcHczMiogfCBvczIqIHwgY2VnY2MqKQotICAgICAgcGljX21vZGU9ZGVmYXVsdAotICAgICAgOzsKLSAgICBlc2FjCi0gICAgaWYgdGVzdCAiJHBpY19tb2RlIiA9IG5vICYmIHRlc3QgIiRkZXBsaWJzX2NoZWNrX21ldGhvZCIgIT0gcGFzc19hbGw7IHRoZW4KLSAgICAgICMgbm9uLVBJQyBjb2RlIGluIHNoYXJlZCBsaWJyYXJpZXMgaXMgbm90IHN1cHBvcnRlZAotICAgICAgcGljX21vZGU9ZGVmYXVsdAotICAgIGZpCi0KLSAgICAjIENhbGN1bGF0ZSB0aGUgZmlsZW5hbWUgb2YgdGhlIG91dHB1dCBvYmplY3QgaWYgY29tcGlsZXIgZG9lcwotICAgICMgbm90IHN1cHBvcnQgLW8gd2l0aCAtYwotICAgIGlmIHRlc3QgIiRjb21waWxlcl9jX28iID0gbm87IHRoZW4KLSAgICAgIG91dHB1dF9vYmo9YCRFQ0hPICIkc3JjZmlsZSIgfCAkU0VEICdzJV4uKi8lJTsgcyVcLlteLl0qJCUlJ2AuJHtvYmpleHR9Ci0gICAgICBsb2NrZmlsZT0iJG91dHB1dF9vYmoubG9jayIKLSAgICBlbHNlCi0gICAgICBvdXRwdXRfb2JqPQotICAgICAgbmVlZF9sb2Nrcz1ubwotICAgICAgbG9ja2ZpbGU9Ci0gICAgZmkKLQotICAgICMgTG9jayB0aGlzIGNyaXRpY2FsIHNlY3Rpb24gaWYgaXQgaXMgbmVlZGVkCi0gICAgIyBXZSB1c2UgdGhpcyBzY3JpcHQgZmlsZSB0byBtYWtlIHRoZSBsaW5rLCBpdCBhdm9pZHMgY3JlYXRpbmcgYSBuZXcgZmlsZQotICAgIGlmIHRlc3QgIiRuZWVkX2xvY2tzIiA9IHllczsgdGhlbgotICAgICAgdW50aWwgJG9wdF9kcnlfcnVuIHx8IGxuICIkcHJvZ3BhdGgiICIkbG9ja2ZpbGUiIDI+L2Rldi9udWxsOyBkbwotCWZ1bmNfZWNobyAiV2FpdGluZyBmb3IgJGxvY2tmaWxlIHRvIGJlIHJlbW92ZWQiCi0Jc2xlZXAgMgotICAgICAgZG9uZQotICAgIGVsaWYgdGVzdCAiJG5lZWRfbG9ja3MiID0gd2FybjsgdGhlbgotICAgICAgaWYgdGVzdCAtZiAiJGxvY2tmaWxlIjsgdGhlbgotCSRFQ0hPICJcCi0qKiogRVJST1IsICRsb2NrZmlsZSBleGlzdHMgYW5kIGNvbnRhaW5zOgotYGNhdCAkbG9ja2ZpbGUgMj4vZGV2L251bGxgCi0KLVRoaXMgaW5kaWNhdGVzIHRoYXQgYW5vdGhlciBwcm9jZXNzIGlzIHRyeWluZyB0byB1c2UgdGhlIHNhbWUKLXRlbXBvcmFyeSBvYmplY3QgZmlsZSwgYW5kIGxpYnRvb2wgY291bGQgbm90IHdvcmsgYXJvdW5kIGl0IGJlY2F1c2UKLXlvdXIgY29tcGlsZXIgZG9lcyBub3Qgc3VwcG9ydCBcYC1jJyBhbmQgXGAtbycgdG9nZXRoZXIuICBJZiB5b3UKLXJlcGVhdCB0aGlzIGNvbXBpbGF0aW9uLCBpdCBtYXkgc3VjY2VlZCwgYnkgY2hhbmNlLCBidXQgeW91IGhhZCBiZXR0ZXIKLWF2b2lkIHBhcmFsbGVsIGJ1aWxkcyAobWFrZSAtaikgaW4gdGhpcyBwbGF0Zm9ybSwgb3IgZ2V0IGEgYmV0dGVyCi1jb21waWxlci4iCi0KLQkkb3B0X2RyeV9ydW4gfHwgJFJNICRyZW1vdmVsaXN0Ci0JZXhpdCAkRVhJVF9GQUlMVVJFCi0gICAgICBmaQotICAgICAgZnVuY19hcHBlbmQgcmVtb3ZlbGlzdCAiICRvdXRwdXRfb2JqIgotICAgICAgJEVDSE8gIiRzcmNmaWxlIiA+ICIkbG9ja2ZpbGUiCi0gICAgZmkKLQotICAgICRvcHRfZHJ5X3J1biB8fCAkUk0gJHJlbW92ZWxpc3QKLSAgICBmdW5jX2FwcGVuZCByZW1vdmVsaXN0ICIgJGxvY2tmaWxlIgotICAgIHRyYXAgJyRvcHRfZHJ5X3J1biB8fCAkUk0gJHJlbW92ZWxpc3Q7IGV4aXQgJEVYSVRfRkFJTFVSRScgMSAyIDE1Ci0KLSAgICBmdW5jX3RvX3Rvb2xfZmlsZSAiJHNyY2ZpbGUiIGZ1bmNfY29udmVydF9maWxlX21zeXNfdG9fdzMyCi0gICAgc3JjZmlsZT0kZnVuY190b190b29sX2ZpbGVfcmVzdWx0Ci0gICAgZnVuY19xdW90ZV9mb3JfZXZhbCAiJHNyY2ZpbGUiCi0gICAgcXNyY2ZpbGU9JGZ1bmNfcXVvdGVfZm9yX2V2YWxfcmVzdWx0Ci0KLSAgICAjIE9ubHkgYnVpbGQgYSBQSUMgb2JqZWN0IGlmIHdlIGFyZSBidWlsZGluZyBsaWJ0b29sIGxpYnJhcmllcy4KLSAgICBpZiB0ZXN0ICIkYnVpbGRfbGlidG9vbF9saWJzIiA9IHllczsgdGhlbgotICAgICAgIyBXaXRob3V0IHRoaXMgYXNzaWdubWVudCwgYmFzZV9jb21waWxlIGdldHMgZW1wdGllZC4KLSAgICAgIGZic2RfaGlkZW91c19zaF9idWc9JGJhc2VfY29tcGlsZQotCi0gICAgICBpZiB0ZXN0ICIkcGljX21vZGUiICE9IG5vOyB0aGVuCi0JY29tbWFuZD0iJGJhc2VfY29tcGlsZSAkcXNyY2ZpbGUgJHBpY19mbGFnIgotICAgICAgZWxzZQotCSMgRG9uJ3QgYnVpbGQgUElDIGNvZGUKLQljb21tYW5kPSIkYmFzZV9jb21waWxlICRxc3JjZmlsZSIKLSAgICAgIGZpCi0KLSAgICAgIGZ1bmNfbWtkaXJfcCAiJHhkaXIkb2JqZGlyIgotCi0gICAgICBpZiB0ZXN0IC16ICIkb3V0cHV0X29iaiI7IHRoZW4KLQkjIFBsYWNlIFBJQyBvYmplY3RzIGluICRvYmpkaXIKLQlmdW5jX2FwcGVuZCBjb21tYW5kICIgLW8gJGxvYmoiCi0gICAgICBmaQotCi0gICAgICBmdW5jX3Nob3dfZXZhbF9sb2NhbGUgIiRjb21tYW5kIglcCi0gICAgICAgICAgJ3Rlc3QgLW4gIiRvdXRwdXRfb2JqIiAmJiAkUk0gJHJlbW92ZWxpc3Q7IGV4aXQgJEVYSVRfRkFJTFVSRScKLQotICAgICAgaWYgdGVzdCAiJG5lZWRfbG9ja3MiID0gd2FybiAmJgotCSB0ZXN0ICJYYGNhdCAkbG9ja2ZpbGUgMj4vZGV2L251bGxgIiAhPSAiWCRzcmNmaWxlIjsgdGhlbgotCSRFQ0hPICJcCi0qKiogRVJST1IsICRsb2NrZmlsZSBjb250YWluczoKLWBjYXQgJGxvY2tmaWxlIDI+L2Rldi9udWxsYAotCi1idXQgaXQgc2hvdWxkIGNvbnRhaW46Ci0kc3JjZmlsZQotCi1UaGlzIGluZGljYXRlcyB0aGF0IGFub3RoZXIgcHJvY2VzcyBpcyB0cnlpbmcgdG8gdXNlIHRoZSBzYW1lCi10ZW1wb3Jhcnkgb2JqZWN0IGZpbGUsIGFuZCBsaWJ0b29sIGNvdWxkIG5vdCB3b3JrIGFyb3VuZCBpdCBiZWNhdXNlCi15b3VyIGNvbXBpbGVyIGRvZXMgbm90IHN1cHBvcnQgXGAtYycgYW5kIFxgLW8nIHRvZ2V0aGVyLiAgSWYgeW91Ci1yZXBlYXQgdGhpcyBjb21waWxhdGlvbiwgaXQgbWF5IHN1Y2NlZWQsIGJ5IGNoYW5jZSwgYnV0IHlvdSBoYWQgYmV0dGVyCi1hdm9pZCBwYXJhbGxlbCBidWlsZHMgKG1ha2UgLWopIGluIHRoaXMgcGxhdGZvcm0sIG9yIGdldCBhIGJldHRlcgotY29tcGlsZXIuIgotCi0JJG9wdF9kcnlfcnVuIHx8ICRSTSAkcmVtb3ZlbGlzdAotCWV4aXQgJEVYSVRfRkFJTFVSRQotICAgICAgZmkKLQotICAgICAgIyBKdXN0IG1vdmUgdGhlIG9iamVjdCBpZiBuZWVkZWQsIHRoZW4gZ28gb24gdG8gY29tcGlsZSB0aGUgbmV4dCBvbmUKLSAgICAgIGlmIHRlc3QgLW4gIiRvdXRwdXRfb2JqIiAmJiB0ZXN0ICJYJG91dHB1dF9vYmoiICE9ICJYJGxvYmoiOyB0aGVuCi0JZnVuY19zaG93X2V2YWwgJyRNViAiJG91dHB1dF9vYmoiICIkbG9iaiInIFwKLQkgICdlcnJvcj0kPzsgJG9wdF9kcnlfcnVuIHx8ICRSTSAkcmVtb3ZlbGlzdDsgZXhpdCAkZXJyb3InCi0gICAgICBmaQotCi0gICAgICAjIEFsbG93IGVycm9yIG1lc3NhZ2VzIG9ubHkgZnJvbSB0aGUgZmlyc3QgY29tcGlsYXRpb24uCi0gICAgICBpZiB0ZXN0ICIkc3VwcHJlc3Nfb3B0IiA9IHllczsgdGhlbgotCXN1cHByZXNzX291dHB1dD0nID4vZGV2L251bGwgMj4mMScKLSAgICAgIGZpCi0gICAgZmkKLQotICAgICMgT25seSBidWlsZCBhIHBvc2l0aW9uLWRlcGVuZGVudCBvYmplY3QgaWYgd2UgYnVpbGQgb2xkIGxpYnJhcmllcy4KLSAgICBpZiB0ZXN0ICIkYnVpbGRfb2xkX2xpYnMiID0geWVzOyB0aGVuCi0gICAgICBpZiB0ZXN0ICIkcGljX21vZGUiICE9IHllczsgdGhlbgotCSMgRG9uJ3QgYnVpbGQgUElDIGNvZGUKLQljb21tYW5kPSIkYmFzZV9jb21waWxlICRxc3JjZmlsZSRwaWVfZmxhZyIKLSAgICAgIGVsc2UKLQljb21tYW5kPSIkYmFzZV9jb21waWxlICRxc3JjZmlsZSAkcGljX2ZsYWciCi0gICAgICBmaQotICAgICAgaWYgdGVzdCAiJGNvbXBpbGVyX2NfbyIgPSB5ZXM7IHRoZW4KLQlmdW5jX2FwcGVuZCBjb21tYW5kICIgLW8gJG9iaiIKLSAgICAgIGZpCi0KLSAgICAgICMgU3VwcHJlc3MgY29tcGlsZXIgb3V0cHV0IGlmIHdlIGFscmVhZHkgZGlkIGEgUElDIGNvbXBpbGF0aW9uLgotICAgICAgZnVuY19hcHBlbmQgY29tbWFuZCAiJHN1cHByZXNzX291dHB1dCIKLSAgICAgIGZ1bmNfc2hvd19ldmFsX2xvY2FsZSAiJGNvbW1hbmQiIFwKLSAgICAgICAgJyRvcHRfZHJ5X3J1biB8fCAkUk0gJHJlbW92ZWxpc3Q7IGV4aXQgJEVYSVRfRkFJTFVSRScKLQotICAgICAgaWYgdGVzdCAiJG5lZWRfbG9ja3MiID0gd2FybiAmJgotCSB0ZXN0ICJYYGNhdCAkbG9ja2ZpbGUgMj4vZGV2L251bGxgIiAhPSAiWCRzcmNmaWxlIjsgdGhlbgotCSRFQ0hPICJcCi0qKiogRVJST1IsICRsb2NrZmlsZSBjb250YWluczoKLWBjYXQgJGxvY2tmaWxlIDI+L2Rldi9udWxsYAotCi1idXQgaXQgc2hvdWxkIGNvbnRhaW46Ci0kc3JjZmlsZQotCi1UaGlzIGluZGljYXRlcyB0aGF0IGFub3RoZXIgcHJvY2VzcyBpcyB0cnlpbmcgdG8gdXNlIHRoZSBzYW1lCi10ZW1wb3Jhcnkgb2JqZWN0IGZpbGUsIGFuZCBsaWJ0b29sIGNvdWxkIG5vdCB3b3JrIGFyb3VuZCBpdCBiZWNhdXNlCi15b3VyIGNvbXBpbGVyIGRvZXMgbm90IHN1cHBvcnQgXGAtYycgYW5kIFxgLW8nIHRvZ2V0aGVyLiAgSWYgeW91Ci1yZXBlYXQgdGhpcyBjb21waWxhdGlvbiwgaXQgbWF5IHN1Y2NlZWQsIGJ5IGNoYW5jZSwgYnV0IHlvdSBoYWQgYmV0dGVyCi1hdm9pZCBwYXJhbGxlbCBidWlsZHMgKG1ha2UgLWopIGluIHRoaXMgcGxhdGZvcm0sIG9yIGdldCBhIGJldHRlcgotY29tcGlsZXIuIgotCi0JJG9wdF9kcnlfcnVuIHx8ICRSTSAkcmVtb3ZlbGlzdAotCWV4aXQgJEVYSVRfRkFJTFVSRQotICAgICAgZmkKLQotICAgICAgIyBKdXN0IG1vdmUgdGhlIG9iamVjdCBpZiBuZWVkZWQKLSAgICAgIGlmIHRlc3QgLW4gIiRvdXRwdXRfb2JqIiAmJiB0ZXN0ICJYJG91dHB1dF9vYmoiICE9ICJYJG9iaiI7IHRoZW4KLQlmdW5jX3Nob3dfZXZhbCAnJE1WICIkb3V0cHV0X29iaiIgIiRvYmoiJyBcCi0JICAnZXJyb3I9JD87ICRvcHRfZHJ5X3J1biB8fCAkUk0gJHJlbW92ZWxpc3Q7IGV4aXQgJGVycm9yJwotICAgICAgZmkKLSAgICBmaQotCi0gICAgJG9wdF9kcnlfcnVuIHx8IHsKLSAgICAgIGZ1bmNfd3JpdGVfbGlidG9vbF9vYmplY3QgIiRsaWJvYmoiICIkb2JqZGlyLyRvYmpuYW1lIiAiJG9iam5hbWUiCi0KLSAgICAgICMgVW5sb2NrIHRoZSBjcml0aWNhbCBzZWN0aW9uIGlmIGl0IHdhcyBsb2NrZWQKLSAgICAgIGlmIHRlc3QgIiRuZWVkX2xvY2tzIiAhPSBubzsgdGhlbgotCXJlbW92ZWxpc3Q9JGxvY2tmaWxlCi0gICAgICAgICRSTSAiJGxvY2tmaWxlIgotICAgICAgZmkKLSAgICB9Ci0KLSAgICBleGl0ICRFWElUX1NVQ0NFU1MKLX0KLQotJG9wdF9oZWxwIHx8IHsKLSAgdGVzdCAiJG9wdF9tb2RlIiA9IGNvbXBpbGUgJiYgZnVuY19tb2RlX2NvbXBpbGUgJHsxKyIkQCJ9Ci19Ci0KLWZ1bmNfbW9kZV9oZWxwICgpCi17Ci0gICAgIyBXZSBuZWVkIHRvIGRpc3BsYXkgaGVscCBmb3IgZWFjaCBvZiB0aGUgbW9kZXMuCi0gICAgY2FzZSAkb3B0X21vZGUgaW4KLSAgICAgICIiKQotICAgICAgICAjIEdlbmVyaWMgaGVscCBpcyBleHRyYWN0ZWQgZnJvbSB0aGUgdXNhZ2UgY29tbWVudHMKLSAgICAgICAgIyBhdCB0aGUgc3RhcnQgb2YgdGhpcyBmaWxlLgotICAgICAgICBmdW5jX2hlbHAKLSAgICAgICAgOzsKLQotICAgICAgY2xlYW4pCi0gICAgICAgICRFQ0hPIFwKLSJVc2FnZTogJHByb2duYW1lIFtPUFRJT05dLi4uIC0tbW9kZT1jbGVhbiBSTSBbUk0tT1BUSU9OXS4uLiBGSUxFLi4uCi0KLVJlbW92ZSBmaWxlcyBmcm9tIHRoZSBidWlsZCBkaXJlY3RvcnkuCi0KLVJNIGlzIHRoZSBuYW1lIG9mIHRoZSBwcm9ncmFtIHRvIHVzZSB0byBkZWxldGUgZmlsZXMgYXNzb2NpYXRlZCB3aXRoIGVhY2ggRklMRQotKHR5cGljYWxseSBcYC9iaW4vcm0nKS4gIFJNLU9QVElPTlMgYXJlIG9wdGlvbnMgKHN1Y2ggYXMgXGAtZicpIHRvIGJlIHBhc3NlZAotdG8gUk0uCi0KLUlmIEZJTEUgaXMgYSBsaWJ0b29sIGxpYnJhcnksIG9iamVjdCBvciBwcm9ncmFtLCBhbGwgdGhlIGZpbGVzIGFzc29jaWF0ZWQKLXdpdGggaXQgYXJlIGRlbGV0ZWQuIE90aGVyd2lzZSwgb25seSBGSUxFIGl0c2VsZiBpcyBkZWxldGVkIHVzaW5nIFJNLiIKLSAgICAgICAgOzsKLQotICAgICAgY29tcGlsZSkKLSAgICAgICRFQ0hPIFwKLSJVc2FnZTogJHByb2duYW1lIFtPUFRJT05dLi4uIC0tbW9kZT1jb21waWxlIENPTVBJTEUtQ09NTUFORC4uLiBTT1VSQ0VGSUxFCi0KLUNvbXBpbGUgYSBzb3VyY2UgZmlsZSBpbnRvIGEgbGlidG9vbCBsaWJyYXJ5IG9iamVjdC4KLQotVGhpcyBtb2RlIGFjY2VwdHMgdGhlIGZvbGxvd2luZyBhZGRpdGlvbmFsIG9wdGlvbnM6Ci0KLSAgLW8gT1VUUFVULUZJTEUgICAgc2V0IHRoZSBvdXRwdXQgZmlsZSBuYW1lIHRvIE9VVFBVVC1GSUxFCi0gIC1uby1zdXBwcmVzcyAgICAgIGRvIG5vdCBzdXBwcmVzcyBjb21waWxlciBvdXRwdXQgZm9yIG11bHRpcGxlIHBhc3NlcwotICAtcHJlZmVyLXBpYyAgICAgICB0cnkgdG8gYnVpbGQgUElDIG9iamVjdHMgb25seQotICAtcHJlZmVyLW5vbi1waWMgICB0cnkgdG8gYnVpbGQgbm9uLVBJQyBvYmplY3RzIG9ubHkKLSAgLXNoYXJlZCAgICAgICAgICAgZG8gbm90IGJ1aWxkIGEgXGAubycgZmlsZSBzdWl0YWJsZSBmb3Igc3RhdGljIGxpbmtpbmcKLSAgLXN0YXRpYyAgICAgICAgICAgb25seSBidWlsZCBhIFxgLm8nIGZpbGUgc3VpdGFibGUgZm9yIHN0YXRpYyBsaW5raW5nCi0gIC1XYyxGTEFHICAgICAgICAgIHBhc3MgRkxBRyBkaXJlY3RseSB0byB0aGUgY29tcGlsZXIKLQotQ09NUElMRS1DT01NQU5EIGlzIGEgY29tbWFuZCB0byBiZSB1c2VkIGluIGNyZWF0aW5nIGEgXGBzdGFuZGFyZCcgb2JqZWN0IGZpbGUKLWZyb20gdGhlIGdpdmVuIFNPVVJDRUZJTEUuCi0KLVRoZSBvdXRwdXQgZmlsZSBuYW1lIGlzIGRldGVybWluZWQgYnkgcmVtb3ZpbmcgdGhlIGRpcmVjdG9yeSBjb21wb25lbnQgZnJvbQotU09VUkNFRklMRSwgdGhlbiBzdWJzdGl0dXRpbmcgdGhlIEMgc291cmNlIGNvZGUgc3VmZml4IFxgLmMnIHdpdGggdGhlCi1saWJyYXJ5IG9iamVjdCBzdWZmaXgsIFxgLmxvJy4iCi0gICAgICAgIDs7Ci0KLSAgICAgIGV4ZWN1dGUpCi0gICAgICAgICRFQ0hPIFwKLSJVc2FnZTogJHByb2duYW1lIFtPUFRJT05dLi4uIC0tbW9kZT1leGVjdXRlIENPTU1BTkQgW0FSR1NdLi4uCi0KLUF1dG9tYXRpY2FsbHkgc2V0IGxpYnJhcnkgcGF0aCwgdGhlbiBydW4gYSBwcm9ncmFtLgotCi1UaGlzIG1vZGUgYWNjZXB0cyB0aGUgZm9sbG93aW5nIGFkZGl0aW9uYWwgb3B0aW9uczoKLQotICAtZGxvcGVuIEZJTEUgICAgICBhZGQgdGhlIGRpcmVjdG9yeSBjb250YWluaW5nIEZJTEUgdG8gdGhlIGxpYnJhcnkgcGF0aAotCi1UaGlzIG1vZGUgc2V0cyB0aGUgbGlicmFyeSBwYXRoIGVudmlyb25tZW50IHZhcmlhYmxlIGFjY29yZGluZyB0byBcYC1kbG9wZW4nCi1mbGFncy4KLQotSWYgYW55IG9mIHRoZSBBUkdTIGFyZSBsaWJ0b29sIGV4ZWN1dGFibGUgd3JhcHBlcnMsIHRoZW4gdGhleSBhcmUgdHJhbnNsYXRlZAotaW50byB0aGVpciBjb3JyZXNwb25kaW5nIHVuaW5zdGFsbGVkIGJpbmFyeSwgYW5kIGFueSBvZiB0aGVpciByZXF1aXJlZCBsaWJyYXJ5Ci1kaXJlY3RvcmllcyBhcmUgYWRkZWQgdG8gdGhlIGxpYnJhcnkgcGF0aC4KLQotVGhlbiwgQ09NTUFORCBpcyBleGVjdXRlZCwgd2l0aCBBUkdTIGFzIGFyZ3VtZW50cy4iCi0gICAgICAgIDs7Ci0KLSAgICAgIGZpbmlzaCkKLSAgICAgICAgJEVDSE8gXAotIlVzYWdlOiAkcHJvZ25hbWUgW09QVElPTl0uLi4gLS1tb2RlPWZpbmlzaCBbTElCRElSXS4uLgotCi1Db21wbGV0ZSB0aGUgaW5zdGFsbGF0aW9uIG9mIGxpYnRvb2wgbGlicmFyaWVzLgotCi1FYWNoIExJQkRJUiBpcyBhIGRpcmVjdG9yeSB0aGF0IGNvbnRhaW5zIGxpYnRvb2wgbGlicmFyaWVzLgotCi1UaGUgY29tbWFuZHMgdGhhdCB0aGlzIG1vZGUgZXhlY3V0ZXMgbWF5IHJlcXVpcmUgc3VwZXJ1c2VyIHByaXZpbGVnZXMuICBVc2UKLXRoZSBcYC0tZHJ5LXJ1bicgb3B0aW9uIGlmIHlvdSBqdXN0IHdhbnQgdG8gc2VlIHdoYXQgd291bGQgYmUgZXhlY3V0ZWQuIgotICAgICAgICA7OwotCi0gICAgICBpbnN0YWxsKQotICAgICAgICAkRUNITyBcCi0iVXNhZ2U6ICRwcm9nbmFtZSBbT1BUSU9OXS4uLiAtLW1vZGU9aW5zdGFsbCBJTlNUQUxMLUNPTU1BTkQuLi4KLQotSW5zdGFsbCBleGVjdXRhYmxlcyBvciBsaWJyYXJpZXMuCi0KLUlOU1RBTEwtQ09NTUFORCBpcyB0aGUgaW5zdGFsbGF0aW9uIGNvbW1hbmQuICBUaGUgZmlyc3QgY29tcG9uZW50IHNob3VsZCBiZQotZWl0aGVyIHRoZSBcYGluc3RhbGwnIG9yIFxgY3AnIHByb2dyYW0uCi0KLVRoZSBmb2xsb3dpbmcgY29tcG9uZW50cyBvZiBJTlNUQUxMLUNPTU1BTkQgYXJlIHRyZWF0ZWQgc3BlY2lhbGx5OgotCi0gIC1pbnN0LXByZWZpeC1kaXIgUFJFRklYLURJUiAgVXNlIFBSRUZJWC1ESVIgYXMgYSBzdGFnaW5nIGFyZWEgZm9yIGluc3RhbGxhdGlvbgotCi1UaGUgcmVzdCBvZiB0aGUgY29tcG9uZW50cyBhcmUgaW50ZXJwcmV0ZWQgYXMgYXJndW1lbnRzIHRvIHRoYXQgY29tbWFuZCAob25seQotQlNELWNvbXBhdGlibGUgaW5zdGFsbCBvcHRpb25zIGFyZSByZWNvZ25pemVkKS4iCi0gICAgICAgIDs7Ci0KLSAgICAgIGxpbmspCi0gICAgICAgICRFQ0hPIFwKLSJVc2FnZTogJHByb2duYW1lIFtPUFRJT05dLi4uIC0tbW9kZT1saW5rIExJTkstQ09NTUFORC4uLgotCi1MaW5rIG9iamVjdCBmaWxlcyBvciBsaWJyYXJpZXMgdG9nZXRoZXIgdG8gZm9ybSBhbm90aGVyIGxpYnJhcnksIG9yIHRvCi1jcmVhdGUgYW4gZXhlY3V0YWJsZSBwcm9ncmFtLgotCi1MSU5LLUNPTU1BTkQgaXMgYSBjb21tYW5kIHVzaW5nIHRoZSBDIGNvbXBpbGVyIHRoYXQgeW91IHdvdWxkIHVzZSB0byBjcmVhdGUKLWEgcHJvZ3JhbSBmcm9tIHNldmVyYWwgb2JqZWN0IGZpbGVzLgotCi1UaGUgZm9sbG93aW5nIGNvbXBvbmVudHMgb2YgTElOSy1DT01NQU5EIGFyZSB0cmVhdGVkIHNwZWNpYWxseToKLQotICAtYWxsLXN0YXRpYyAgICAgICBkbyBub3QgZG8gYW55IGR5bmFtaWMgbGlua2luZyBhdCBhbGwKLSAgLWF2b2lkLXZlcnNpb24gICAgZG8gbm90IGFkZCBhIHZlcnNpb24gc3VmZml4IGlmIHBvc3NpYmxlCi0gIC1iaW5kaXIgQklORElSICAgIHNwZWNpZnkgcGF0aCB0byBiaW5hcmllcyBkaXJlY3RvcnkgKGZvciBzeXN0ZW1zIHdoZXJlCi0gICAgICAgICAgICAgICAgICAgIGxpYnJhcmllcyBtdXN0IGJlIGZvdW5kIGluIHRoZSBQQVRIIHNldHRpbmcgYXQgcnVudGltZSkKLSAgLWRsb3BlbiBGSUxFICAgICAgXGAtZGxwcmVvcGVuJyBGSUxFIGlmIGl0IGNhbm5vdCBiZSBkbG9wZW5lZCBhdCBydW50aW1lCi0gIC1kbHByZW9wZW4gRklMRSAgIGxpbmsgaW4gRklMRSBhbmQgYWRkIGl0cyBzeW1ib2xzIHRvIGx0X3ByZWxvYWRlZF9zeW1ib2xzCi0gIC1leHBvcnQtZHluYW1pYyAgIGFsbG93IHN5bWJvbHMgZnJvbSBPVVRQVVQtRklMRSB0byBiZSByZXNvbHZlZCB3aXRoIGRsc3ltKDMpCi0gIC1leHBvcnQtc3ltYm9scyBTWU1GSUxFCi0gICAgICAgICAgICAgICAgICAgIHRyeSB0byBleHBvcnQgb25seSB0aGUgc3ltYm9scyBsaXN0ZWQgaW4gU1lNRklMRQotICAtZXhwb3J0LXN5bWJvbHMtcmVnZXggUkVHRVgKLSAgICAgICAgICAgICAgICAgICAgdHJ5IHRvIGV4cG9ydCBvbmx5IHRoZSBzeW1ib2xzIG1hdGNoaW5nIFJFR0VYCi0gIC1MTElCRElSICAgICAgICAgIHNlYXJjaCBMSUJESVIgZm9yIHJlcXVpcmVkIGluc3RhbGxlZCBsaWJyYXJpZXMKLSAgLWxOQU1FICAgICAgICAgICAgT1VUUFVULUZJTEUgcmVxdWlyZXMgdGhlIGluc3RhbGxlZCBsaWJyYXJ5IGxpYk5BTUUKLSAgLW1vZHVsZSAgICAgICAgICAgYnVpbGQgYSBsaWJyYXJ5IHRoYXQgY2FuIGRsb3BlbmVkCi0gIC1uby1mYXN0LWluc3RhbGwgIGRpc2FibGUgdGhlIGZhc3QtaW5zdGFsbCBtb2RlCi0gIC1uby1pbnN0YWxsICAgICAgIGxpbmsgYSBub3QtaW5zdGFsbGFibGUgZXhlY3V0YWJsZQotICAtbm8tdW5kZWZpbmVkICAgICBkZWNsYXJlIHRoYXQgYSBsaWJyYXJ5IGRvZXMgbm90IHJlZmVyIHRvIGV4dGVybmFsIHN5bWJvbHMKLSAgLW8gT1VUUFVULUZJTEUgICAgY3JlYXRlIE9VVFBVVC1GSUxFIGZyb20gdGhlIHNwZWNpZmllZCBvYmplY3RzCi0gIC1vYmplY3RsaXN0IEZJTEUgIFVzZSBhIGxpc3Qgb2Ygb2JqZWN0IGZpbGVzIGZvdW5kIGluIEZJTEUgdG8gc3BlY2lmeSBvYmplY3RzCi0gIC1wcmVjaW91cy1maWxlcy1yZWdleCBSRUdFWAotICAgICAgICAgICAgICAgICAgICBkb24ndCByZW1vdmUgb3V0cHV0IGZpbGVzIG1hdGNoaW5nIFJFR0VYCi0gIC1yZWxlYXNlIFJFTEVBU0UgIHNwZWNpZnkgcGFja2FnZSByZWxlYXNlIGluZm9ybWF0aW9uCi0gIC1ycGF0aCBMSUJESVIgICAgIHRoZSBjcmVhdGVkIGxpYnJhcnkgd2lsbCBldmVudHVhbGx5IGJlIGluc3RhbGxlZCBpbiBMSUJESVIKLSAgLVJbIF1MSUJESVIgICAgICAgYWRkIExJQkRJUiB0byB0aGUgcnVudGltZSBwYXRoIG9mIHByb2dyYW1zIGFuZCBsaWJyYXJpZXMKLSAgLXNoYXJlZCAgICAgICAgICAgb25seSBkbyBkeW5hbWljIGxpbmtpbmcgb2YgbGlidG9vbCBsaWJyYXJpZXMKLSAgLXNocmV4dCBTVUZGSVggICAgb3ZlcnJpZGUgdGhlIHN0YW5kYXJkIHNoYXJlZCBsaWJyYXJ5IGZpbGUgZXh0ZW5zaW9uCi0gIC1zdGF0aWMgICAgICAgICAgIGRvIG5vdCBkbyBhbnkgZHluYW1pYyBsaW5raW5nIG9mIHVuaW5zdGFsbGVkIGxpYnRvb2wgbGlicmFyaWVzCi0gIC1zdGF0aWMtbGlidG9vbC1saWJzCi0gICAgICAgICAgICAgICAgICAgIGRvIG5vdCBkbyBhbnkgZHluYW1pYyBsaW5raW5nIG9mIGxpYnRvb2wgbGlicmFyaWVzCi0gIC12ZXJzaW9uLWluZm8gQ1VSUkVOVFs6UkVWSVNJT05bOkFHRV1dCi0gICAgICAgICAgICAgICAgICAgIHNwZWNpZnkgbGlicmFyeSB2ZXJzaW9uIGluZm8gW2VhY2ggdmFyaWFibGUgZGVmYXVsdHMgdG8gMF0KLSAgLXdlYWsgTElCTkFNRSAgICAgZGVjbGFyZSB0aGF0IHRoZSB0YXJnZXQgcHJvdmlkZXMgdGhlIExJQk5BTUUgaW50ZXJmYWNlCi0gIC1XYyxGTEFHCi0gIC1YY29tcGlsZXIgRkxBRyAgIHBhc3MgbGlua2VyLXNwZWNpZmljIEZMQUcgZGlyZWN0bHkgdG8gdGhlIGNvbXBpbGVyCi0gIC1XbCxGTEFHCi0gIC1YbGlua2VyIEZMQUcgICAgIHBhc3MgbGlua2VyLXNwZWNpZmljIEZMQUcgZGlyZWN0bHkgdG8gdGhlIGxpbmtlcgotICAtWENDbGlua2VyIEZMQUcgICBwYXNzIGxpbmstc3BlY2lmaWMgRkxBRyB0byB0aGUgY29tcGlsZXIgZHJpdmVyIChDQykKLQotQWxsIG90aGVyIG9wdGlvbnMgKGFyZ3VtZW50cyBiZWdpbm5pbmcgd2l0aCBcYC0nKSBhcmUgaWdub3JlZC4KLQotRXZlcnkgb3RoZXIgYXJndW1lbnQgaXMgdHJlYXRlZCBhcyBhIGZpbGVuYW1lLiAgRmlsZXMgZW5kaW5nIGluIFxgLmxhJyBhcmUKLXRyZWF0ZWQgYXMgdW5pbnN0YWxsZWQgbGlidG9vbCBsaWJyYXJpZXMsIG90aGVyIGZpbGVzIGFyZSBzdGFuZGFyZCBvciBsaWJyYXJ5Ci1vYmplY3QgZmlsZXMuCi0KLUlmIHRoZSBPVVRQVVQtRklMRSBlbmRzIGluIFxgLmxhJywgdGhlbiBhIGxpYnRvb2wgbGlicmFyeSBpcyBjcmVhdGVkLAotb25seSBsaWJyYXJ5IG9iamVjdHMgKFxgLmxvJyBmaWxlcykgbWF5IGJlIHNwZWNpZmllZCwgYW5kIFxgLXJwYXRoJyBpcwotcmVxdWlyZWQsIGV4Y2VwdCB3aGVuIGNyZWF0aW5nIGEgY29udmVuaWVuY2UgbGlicmFyeS4KLQotSWYgT1VUUFVULUZJTEUgZW5kcyBpbiBcYC5hJyBvciBcYC5saWInLCB0aGVuIGEgc3RhbmRhcmQgbGlicmFyeSBpcyBjcmVhdGVkCi11c2luZyBcYGFyJyBhbmQgXGByYW5saWInLCBvciBvbiBXaW5kb3dzIHVzaW5nIFxgbGliJy4KLQotSWYgT1VUUFVULUZJTEUgZW5kcyBpbiBcYC5sbycgb3IgXGAuJHtvYmpleHR9JywgdGhlbiBhIHJlbG9hZGFibGUgb2JqZWN0IGZpbGUKLWlzIGNyZWF0ZWQsIG90aGVyd2lzZSBhbiBleGVjdXRhYmxlIHByb2dyYW0gaXMgY3JlYXRlZC4iCi0gICAgICAgIDs7Ci0KLSAgICAgIHVuaW5zdGFsbCkKLSAgICAgICAgJEVDSE8gXAotIlVzYWdlOiAkcHJvZ25hbWUgW09QVElPTl0uLi4gLS1tb2RlPXVuaW5zdGFsbCBSTSBbUk0tT1BUSU9OXS4uLiBGSUxFLi4uCi0KLVJlbW92ZSBsaWJyYXJpZXMgZnJvbSBhbiBpbnN0YWxsYXRpb24gZGlyZWN0b3J5LgotCi1STSBpcyB0aGUgbmFtZSBvZiB0aGUgcHJvZ3JhbSB0byB1c2UgdG8gZGVsZXRlIGZpbGVzIGFzc29jaWF0ZWQgd2l0aCBlYWNoIEZJTEUKLSh0eXBpY2FsbHkgXGAvYmluL3JtJykuICBSTS1PUFRJT05TIGFyZSBvcHRpb25zIChzdWNoIGFzIFxgLWYnKSB0byBiZSBwYXNzZWQKLXRvIFJNLgotCi1JZiBGSUxFIGlzIGEgbGlidG9vbCBsaWJyYXJ5LCBhbGwgdGhlIGZpbGVzIGFzc29jaWF0ZWQgd2l0aCBpdCBhcmUgZGVsZXRlZC4KLU90aGVyd2lzZSwgb25seSBGSUxFIGl0c2VsZiBpcyBkZWxldGVkIHVzaW5nIFJNLiIKLSAgICAgICAgOzsKLQotICAgICAgKikKLSAgICAgICAgZnVuY19mYXRhbF9oZWxwICJpbnZhbGlkIG9wZXJhdGlvbiBtb2RlIFxgJG9wdF9tb2RlJyIKLSAgICAgICAgOzsKLSAgICBlc2FjCi0KLSAgICBlY2hvCi0gICAgJEVDSE8gIlRyeSBcYCRwcm9nbmFtZSAtLWhlbHAnIGZvciBtb3JlIGluZm9ybWF0aW9uIGFib3V0IG90aGVyIG1vZGVzLiIKLX0KLQotIyBOb3cgdGhhdCB3ZSd2ZSBjb2xsZWN0ZWQgYSBwb3NzaWJsZSAtLW1vZGUgYXJnLCBzaG93IGhlbHAgaWYgbmVjZXNzYXJ5Ci1pZiAkb3B0X2hlbHA7IHRoZW4KLSAgaWYgdGVzdCAiJG9wdF9oZWxwIiA9IDo7IHRoZW4KLSAgICBmdW5jX21vZGVfaGVscAotICBlbHNlCi0gICAgewotICAgICAgZnVuY19oZWxwIG5vZXhpdAotICAgICAgZm9yIG9wdF9tb2RlIGluIGNvbXBpbGUgbGluayBleGVjdXRlIGluc3RhbGwgZmluaXNoIHVuaW5zdGFsbCBjbGVhbjsgZG8KLQlmdW5jX21vZGVfaGVscAotICAgICAgZG9uZQotICAgIH0gfCBzZWQgLW4gJzFwOyAyLCRzL15Vc2FnZTovICBvcjogL3AnCi0gICAgewotICAgICAgZnVuY19oZWxwIG5vZXhpdAotICAgICAgZm9yIG9wdF9tb2RlIGluIGNvbXBpbGUgbGluayBleGVjdXRlIGluc3RhbGwgZmluaXNoIHVuaW5zdGFsbCBjbGVhbjsgZG8KLQllY2hvCi0JZnVuY19tb2RlX2hlbHAKLSAgICAgIGRvbmUKLSAgICB9IHwKLSAgICBzZWQgJzFkCi0gICAgICAvXldoZW4gcmVwb3J0aW5nLywvXlJlcG9ydC97Ci0JSAotCWQKLSAgICAgIH0KLSAgICAgICR4Ci0gICAgICAvaW5mb3JtYXRpb24gYWJvdXQgb3RoZXIgbW9kZXMvZAotICAgICAgL21vcmUgZGV0YWlsZWQgLipNT0RFL2QKLSAgICAgIHMvXlVzYWdlOi4qLS1tb2RlPVwoW14gXSpcKSAuKi9EZXNjcmlwdGlvbiBvZiBcMSBtb2RlOi8nCi0gIGZpCi0gIGV4aXQgJD8KLWZpCi0KLQotIyBmdW5jX21vZGVfZXhlY3V0ZSBhcmcuLi4KLWZ1bmNfbW9kZV9leGVjdXRlICgpCi17Ci0gICAgJG9wdF9kZWJ1ZwotICAgICMgVGhlIGZpcnN0IGFyZ3VtZW50IGlzIHRoZSBjb21tYW5kIG5hbWUuCi0gICAgY21kPSIkbm9ub3B0IgotICAgIHRlc3QgLXogIiRjbWQiICYmIFwKLSAgICAgIGZ1bmNfZmF0YWxfaGVscCAieW91IG11c3Qgc3BlY2lmeSBhIENPTU1BTkQiCi0KLSAgICAjIEhhbmRsZSAtZGxvcGVuIGZsYWdzIGltbWVkaWF0ZWx5LgotICAgIGZvciBmaWxlIGluICRvcHRfZGxvcGVuOyBkbwotICAgICAgdGVzdCAtZiAiJGZpbGUiIFwKLQl8fCBmdW5jX2ZhdGFsX2hlbHAgIlxgJGZpbGUnIGlzIG5vdCBhIGZpbGUiCi0KLSAgICAgIGRpcj0KLSAgICAgIGNhc2UgJGZpbGUgaW4KLSAgICAgICoubGEpCi0JZnVuY19yZXNvbHZlX3N5c3Jvb3QgIiRmaWxlIgotCWZpbGU9JGZ1bmNfcmVzb2x2ZV9zeXNyb290X3Jlc3VsdAotCi0JIyBDaGVjayB0byBzZWUgdGhhdCB0aGlzIHJlYWxseSBpcyBhIGxpYnRvb2wgYXJjaGl2ZS4KLQlmdW5jX2xhbGliX3Vuc2FmZV9wICIkZmlsZSIgXAotCSAgfHwgZnVuY19mYXRhbF9oZWxwICJcYCRsaWInIGlzIG5vdCBhIHZhbGlkIGxpYnRvb2wgYXJjaGl2ZSIKLQotCSMgUmVhZCB0aGUgbGlidG9vbCBsaWJyYXJ5LgotCWRsbmFtZT0KLQlsaWJyYXJ5X25hbWVzPQotCWZ1bmNfc291cmNlICIkZmlsZSIKLQotCSMgU2tpcCB0aGlzIGxpYnJhcnkgaWYgaXQgY2Fubm90IGJlIGRsb3BlbmVkLgotCWlmIHRlc3QgLXogIiRkbG5hbWUiOyB0aGVuCi0JICAjIFdhcm4gaWYgaXQgd2FzIGEgc2hhcmVkIGxpYnJhcnkuCi0JICB0ZXN0IC1uICIkbGlicmFyeV9uYW1lcyIgJiYgXAotCSAgICBmdW5jX3dhcm5pbmcgIlxgJGZpbGUnIHdhcyBub3QgbGlua2VkIHdpdGggXGAtZXhwb3J0LWR5bmFtaWMnIgotCSAgY29udGludWUKLQlmaQotCi0JZnVuY19kaXJuYW1lICIkZmlsZSIgIiIgIi4iCi0JZGlyPSIkZnVuY19kaXJuYW1lX3Jlc3VsdCIKLQotCWlmIHRlc3QgLWYgIiRkaXIvJG9iamRpci8kZGxuYW1lIjsgdGhlbgotCSAgZnVuY19hcHBlbmQgZGlyICIvJG9iamRpciIKLQllbHNlCi0JICBpZiB0ZXN0ICEgLWYgIiRkaXIvJGRsbmFtZSI7IHRoZW4KLQkgICAgZnVuY19mYXRhbF9lcnJvciAiY2Fubm90IGZpbmQgXGAkZGxuYW1lJyBpbiBcYCRkaXInIG9yIFxgJGRpci8kb2JqZGlyJyIKLQkgIGZpCi0JZmkKLQk7OwotCi0gICAgICAqLmxvKQotCSMgSnVzdCBhZGQgdGhlIGRpcmVjdG9yeSBjb250YWluaW5nIHRoZSAubG8gZmlsZS4KLQlmdW5jX2Rpcm5hbWUgIiRmaWxlIiAiIiAiLiIKLQlkaXI9IiRmdW5jX2Rpcm5hbWVfcmVzdWx0IgotCTs7Ci0KLSAgICAgICopCi0JZnVuY193YXJuaW5nICJcYC1kbG9wZW4nIGlzIGlnbm9yZWQgZm9yIG5vbi1saWJ0b29sIGxpYnJhcmllcyBhbmQgb2JqZWN0cyIKLQljb250aW51ZQotCTs7Ci0gICAgICBlc2FjCi0KLSAgICAgICMgR2V0IHRoZSBhYnNvbHV0ZSBwYXRobmFtZS4KLSAgICAgIGFic2Rpcj1gY2QgIiRkaXIiICYmIHB3ZGAKLSAgICAgIHRlc3QgLW4gIiRhYnNkaXIiICYmIGRpcj0iJGFic2RpciIKLQotICAgICAgIyBOb3cgYWRkIHRoZSBkaXJlY3RvcnkgdG8gc2hsaWJwYXRoX3Zhci4KLSAgICAgIGlmIGV2YWwgInRlc3QgLXogXCJcJCRzaGxpYnBhdGhfdmFyXCIiOyB0aGVuCi0JZXZhbCAiJHNobGlicGF0aF92YXI9XCJcJGRpclwiIgotICAgICAgZWxzZQotCWV2YWwgIiRzaGxpYnBhdGhfdmFyPVwiXCRkaXI6XCQkc2hsaWJwYXRoX3ZhclwiIgotICAgICAgZmkKLSAgICBkb25lCi0KLSAgICAjIFRoaXMgdmFyaWFibGUgdGVsbHMgd3JhcHBlciBzY3JpcHRzIGp1c3QgdG8gc2V0IHNobGlicGF0aF92YXIKLSAgICAjIHJhdGhlciB0aGFuIHJ1bm5pbmcgdGhlaXIgcHJvZ3JhbXMuCi0gICAgbGlidG9vbF9leGVjdXRlX21hZ2ljPSIkbWFnaWMiCi0KLSAgICAjIENoZWNrIGlmIGFueSBvZiB0aGUgYXJndW1lbnRzIGlzIGEgd3JhcHBlciBzY3JpcHQuCi0gICAgYXJncz0KLSAgICBmb3IgZmlsZQotICAgIGRvCi0gICAgICBjYXNlICRmaWxlIGluCi0gICAgICAtKiB8ICoubGEgfCAqLmxvICkgOzsKLSAgICAgICopCi0JIyBEbyBhIHRlc3QgdG8gc2VlIGlmIHRoaXMgaXMgcmVhbGx5IGEgbGlidG9vbCBwcm9ncmFtLgotCWlmIGZ1bmNfbHR3cmFwcGVyX3NjcmlwdF9wICIkZmlsZSI7IHRoZW4KLQkgIGZ1bmNfc291cmNlICIkZmlsZSIKLQkgICMgVHJhbnNmb3JtIGFyZyB0byB3cmFwcGVkIG5hbWUuCi0JICBmaWxlPSIkcHJvZ2Rpci8kcHJvZ3JhbSIKLQllbGlmIGZ1bmNfbHR3cmFwcGVyX2V4ZWN1dGFibGVfcCAiJGZpbGUiOyB0aGVuCi0JICBmdW5jX2x0d3JhcHBlcl9zY3JpcHRuYW1lICIkZmlsZSIKLQkgIGZ1bmNfc291cmNlICIkZnVuY19sdHdyYXBwZXJfc2NyaXB0bmFtZV9yZXN1bHQiCi0JICAjIFRyYW5zZm9ybSBhcmcgdG8gd3JhcHBlZCBuYW1lLgotCSAgZmlsZT0iJHByb2dkaXIvJHByb2dyYW0iCi0JZmkKLQk7OwotICAgICAgZXNhYwotICAgICAgIyBRdW90ZSBhcmd1bWVudHMgKHRvIHByZXNlcnZlIHNoZWxsIG1ldGFjaGFyYWN0ZXJzKS4KLSAgICAgIGZ1bmNfYXBwZW5kX3F1b3RlZCBhcmdzICIkZmlsZSIKLSAgICBkb25lCi0KLSAgICBpZiB0ZXN0ICJYJG9wdF9kcnlfcnVuIiA9IFhmYWxzZTsgdGhlbgotICAgICAgaWYgdGVzdCAtbiAiJHNobGlicGF0aF92YXIiOyB0aGVuCi0JIyBFeHBvcnQgdGhlIHNobGlicGF0aF92YXIuCi0JZXZhbCAiZXhwb3J0ICRzaGxpYnBhdGhfdmFyIgotICAgICAgZmkKLQotICAgICAgIyBSZXN0b3JlIHNhdmVkIGVudmlyb25tZW50IHZhcmlhYmxlcwotICAgICAgZm9yIGx0X3ZhciBpbiBMQU5HIExBTkdVQUdFIExDX0FMTCBMQ19DVFlQRSBMQ19DT0xMQVRFIExDX01FU1NBR0VTCi0gICAgICBkbwotCWV2YWwgImlmIHRlc3QgXCJcJHtzYXZlXyRsdF92YXIrc2V0fVwiID0gc2V0OyB0aGVuCi0gICAgICAgICAgICAgICAgJGx0X3Zhcj1cJHNhdmVfJGx0X3ZhcjsgZXhwb3J0ICRsdF92YXIKLQkgICAgICBlbHNlCi0JCSRsdF91bnNldCAkbHRfdmFyCi0JICAgICAgZmkiCi0gICAgICBkb25lCi0KLSAgICAgICMgTm93IHByZXBhcmUgdG8gYWN0dWFsbHkgZXhlYyB0aGUgY29tbWFuZC4KLSAgICAgIGV4ZWNfY21kPSJcJGNtZCRhcmdzIgotICAgIGVsc2UKLSAgICAgICMgRGlzcGxheSB3aGF0IHdvdWxkIGJlIGRvbmUuCi0gICAgICBpZiB0ZXN0IC1uICIkc2hsaWJwYXRoX3ZhciI7IHRoZW4KLQlldmFsICJcJEVDSE8gXCJcJHNobGlicGF0aF92YXI9XCQkc2hsaWJwYXRoX3ZhclwiIgotCWVjaG8gImV4cG9ydCAkc2hsaWJwYXRoX3ZhciIKLSAgICAgIGZpCi0gICAgICAkRUNITyAiJGNtZCRhcmdzIgotICAgICAgZXhpdCAkRVhJVF9TVUNDRVNTCi0gICAgZmkKLX0KLQotdGVzdCAiJG9wdF9tb2RlIiA9IGV4ZWN1dGUgJiYgZnVuY19tb2RlX2V4ZWN1dGUgJHsxKyIkQCJ9Ci0KLQotIyBmdW5jX21vZGVfZmluaXNoIGFyZy4uLgotZnVuY19tb2RlX2ZpbmlzaCAoKQotewotICAgICRvcHRfZGVidWcKLSAgICBsaWJzPQotICAgIGxpYmRpcnM9Ci0gICAgYWRtaW5jbWRzPQotCi0gICAgZm9yIG9wdCBpbiAiJG5vbm9wdCIgJHsxKyIkQCJ9Ci0gICAgZG8KLSAgICAgIGlmIHRlc3QgLWQgIiRvcHQiOyB0aGVuCi0JZnVuY19hcHBlbmQgbGliZGlycyAiICRvcHQiCi0KLSAgICAgIGVsaWYgdGVzdCAtZiAiJG9wdCI7IHRoZW4KLQlpZiBmdW5jX2xhbGliX3Vuc2FmZV9wICIkb3B0IjsgdGhlbgotCSAgZnVuY19hcHBlbmQgbGlicyAiICRvcHQiCi0JZWxzZQotCSAgZnVuY193YXJuaW5nICJcYCRvcHQnIGlzIG5vdCBhIHZhbGlkIGxpYnRvb2wgYXJjaGl2ZSIKLQlmaQotCi0gICAgICBlbHNlCi0JZnVuY19mYXRhbF9lcnJvciAiaW52YWxpZCBhcmd1bWVudCBcYCRvcHQnIgotICAgICAgZmkKLSAgICBkb25lCi0KLSAgICBpZiB0ZXN0IC1uICIkbGlicyI7IHRoZW4KLSAgICAgIGlmIHRlc3QgLW4gIiRsdF9zeXNyb290IjsgdGhlbgotICAgICAgICBzeXNyb290X3JlZ2V4PWAkRUNITyAiJGx0X3N5c3Jvb3QiIHwgJFNFRCAiJHNlZF9tYWtlX2xpdGVyYWxfcmVnZXgiYAotICAgICAgICBzeXNyb290X2NtZD0icy9cKFsgJ11cKSRzeXNyb290X3JlZ2V4L1wxL2c7IgotICAgICAgZWxzZQotICAgICAgICBzeXNyb290X2NtZD0KLSAgICAgIGZpCi0KLSAgICAgICMgUmVtb3ZlIHN5c3Jvb3QgcmVmZXJlbmNlcwotICAgICAgaWYgJG9wdF9kcnlfcnVuOyB0aGVuCi0gICAgICAgIGZvciBsaWIgaW4gJGxpYnM7IGRvCi0gICAgICAgICAgZWNobyAicmVtb3ZpbmcgcmVmZXJlbmNlcyB0byAkbHRfc3lzcm9vdCBhbmQgXGA9JyBwcmVmaXhlcyBmcm9tICRsaWIiCi0gICAgICAgIGRvbmUKLSAgICAgIGVsc2UKLSAgICAgICAgdG1wZGlyPWBmdW5jX21rdGVtcGRpcmAKLSAgICAgICAgZm9yIGxpYiBpbiAkbGliczsgZG8KLQkgIHNlZCAtZSAiJHtzeXNyb290X2NtZH0gcy9cKFsgJ10tW0xSXVwpPS9cMS9nOyBzL1woWyAnXVwpPS9cMS9nIiAkbGliIFwKLQkgICAgPiAkdG1wZGlyL3RtcC1sYQotCSAgbXYgLWYgJHRtcGRpci90bXAtbGEgJGxpYgotCWRvbmUKLSAgICAgICAgJHtSTX1yICIkdG1wZGlyIgotICAgICAgZmkKLSAgICBmaQotCi0gICAgaWYgdGVzdCAtbiAiJGZpbmlzaF9jbWRzJGZpbmlzaF9ldmFsIiAmJiB0ZXN0IC1uICIkbGliZGlycyI7IHRoZW4KLSAgICAgIGZvciBsaWJkaXIgaW4gJGxpYmRpcnM7IGRvCi0JaWYgdGVzdCAtbiAiJGZpbmlzaF9jbWRzIjsgdGhlbgotCSAgIyBEbyBlYWNoIGNvbW1hbmQgaW4gdGhlIGZpbmlzaCBjb21tYW5kcy4KLQkgIGZ1bmNfZXhlY3V0ZV9jbWRzICIkZmluaXNoX2NtZHMiICdhZG1pbmNtZHM9IiRhZG1pbmNtZHMKLSciJGNtZCInIicKLQlmaQotCWlmIHRlc3QgLW4gIiRmaW5pc2hfZXZhbCI7IHRoZW4KLQkgICMgRG8gdGhlIHNpbmdsZSBmaW5pc2hfZXZhbC4KLQkgIGV2YWwgY21kcz1cIiRmaW5pc2hfZXZhbFwiCi0JICAkb3B0X2RyeV9ydW4gfHwgZXZhbCAiJGNtZHMiIHx8IGZ1bmNfYXBwZW5kIGFkbWluY21kcyAiCi0gICAgICAgJGNtZHMiCi0JZmkKLSAgICAgIGRvbmUKLSAgICBmaQotCi0gICAgIyBFeGl0IGhlcmUgaWYgdGhleSB3YW50ZWQgc2lsZW50IG1vZGUuCi0gICAgJG9wdF9zaWxlbnQgJiYgZXhpdCAkRVhJVF9TVUNDRVNTCi0KLSAgICBpZiB0ZXN0IC1uICIkZmluaXNoX2NtZHMkZmluaXNoX2V2YWwiICYmIHRlc3QgLW4gIiRsaWJkaXJzIjsgdGhlbgotICAgICAgZWNobyAiLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSIKLSAgICAgIGVjaG8gIkxpYnJhcmllcyBoYXZlIGJlZW4gaW5zdGFsbGVkIGluOiIKLSAgICAgIGZvciBsaWJkaXIgaW4gJGxpYmRpcnM7IGRvCi0JJEVDSE8gIiAgICRsaWJkaXIiCi0gICAgICBkb25lCi0gICAgICBlY2hvCi0gICAgICBlY2hvICJJZiB5b3UgZXZlciBoYXBwZW4gdG8gd2FudCB0byBsaW5rIGFnYWluc3QgaW5zdGFsbGVkIGxpYnJhcmllcyIKLSAgICAgIGVjaG8gImluIGEgZ2l2ZW4gZGlyZWN0b3J5LCBMSUJESVIsIHlvdSBtdXN0IGVpdGhlciB1c2UgbGlidG9vbCwgYW5kIgotICAgICAgZWNobyAic3BlY2lmeSB0aGUgZnVsbCBwYXRobmFtZSBvZiB0aGUgbGlicmFyeSwgb3IgdXNlIHRoZSBcYC1MTElCRElSJyIKLSAgICAgIGVjaG8gImZsYWcgZHVyaW5nIGxpbmtpbmcgYW5kIGRvIGF0IGxlYXN0IG9uZSBvZiB0aGUgZm9sbG93aW5nOiIKLSAgICAgIGlmIHRlc3QgLW4gIiRzaGxpYnBhdGhfdmFyIjsgdGhlbgotCWVjaG8gIiAgIC0gYWRkIExJQkRJUiB0byB0aGUgXGAkc2hsaWJwYXRoX3ZhcicgZW52aXJvbm1lbnQgdmFyaWFibGUiCi0JZWNobyAiICAgICBkdXJpbmcgZXhlY3V0aW9uIgotICAgICAgZmkKLSAgICAgIGlmIHRlc3QgLW4gIiRydW5wYXRoX3ZhciI7IHRoZW4KLQllY2hvICIgICAtIGFkZCBMSUJESVIgdG8gdGhlIFxgJHJ1bnBhdGhfdmFyJyBlbnZpcm9ubWVudCB2YXJpYWJsZSIKLQllY2hvICIgICAgIGR1cmluZyBsaW5raW5nIgotICAgICAgZmkKLSAgICAgIGlmIHRlc3QgLW4gIiRoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjIjsgdGhlbgotCWxpYmRpcj1MSUJESVIKLQlldmFsIGZsYWc9XCIkaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlY1wiCi0KLQkkRUNITyAiICAgLSB1c2UgdGhlIFxgJGZsYWcnIGxpbmtlciBmbGFnIgotICAgICAgZmkKLSAgICAgIGlmIHRlc3QgLW4gIiRhZG1pbmNtZHMiOyB0aGVuCi0JJEVDSE8gIiAgIC0gaGF2ZSB5b3VyIHN5c3RlbSBhZG1pbmlzdHJhdG9yIHJ1biB0aGVzZSBjb21tYW5kczokYWRtaW5jbWRzIgotICAgICAgZmkKLSAgICAgIGlmIHRlc3QgLWYgL2V0Yy9sZC5zby5jb25mOyB0aGVuCi0JZWNobyAiICAgLSBoYXZlIHlvdXIgc3lzdGVtIGFkbWluaXN0cmF0b3IgYWRkIExJQkRJUiB0byBcYC9ldGMvbGQuc28uY29uZiciCi0gICAgICBmaQotICAgICAgZWNobwotCi0gICAgICBlY2hvICJTZWUgYW55IG9wZXJhdGluZyBzeXN0ZW0gZG9jdW1lbnRhdGlvbiBhYm91dCBzaGFyZWQgbGlicmFyaWVzIGZvciIKLSAgICAgIGNhc2UgJGhvc3QgaW4KLQlzb2xhcmlzMi5bNjc4OV18c29sYXJpczIuMVswLTldKQotCSAgZWNobyAibW9yZSBpbmZvcm1hdGlvbiwgc3VjaCBhcyB0aGUgbGQoMSksIGNybGUoMSkgYW5kIGxkLnNvKDgpIG1hbnVhbCIKLQkgIGVjaG8gInBhZ2VzLiIKLQkgIDs7Ci0JKikKLQkgIGVjaG8gIm1vcmUgaW5mb3JtYXRpb24sIHN1Y2ggYXMgdGhlIGxkKDEpIGFuZCBsZC5zbyg4KSBtYW51YWwgcGFnZXMuIgotCSAgOzsKLSAgICAgIGVzYWMKLSAgICAgIGVjaG8gIi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0iCi0gICAgZmkKLSAgICBleGl0ICRFWElUX1NVQ0NFU1MKLX0KLQotdGVzdCAiJG9wdF9tb2RlIiA9IGZpbmlzaCAmJiBmdW5jX21vZGVfZmluaXNoICR7MSsiJEAifQotCi0KLSMgZnVuY19tb2RlX2luc3RhbGwgYXJnLi4uCi1mdW5jX21vZGVfaW5zdGFsbCAoKQotewotICAgICRvcHRfZGVidWcKLSAgICAjIFRoZXJlIG1heSBiZSBhbiBvcHRpb25hbCBzaCgxKSBhcmd1bWVudCBhdCB0aGUgYmVnaW5uaW5nIG9mCi0gICAgIyBpbnN0YWxsX3Byb2cgKGVzcGVjaWFsbHkgb24gV2luZG93cyBOVCkuCi0gICAgaWYgdGVzdCAiJG5vbm9wdCIgPSAiJFNIRUxMIiB8fCB0ZXN0ICIkbm9ub3B0IiA9IC9iaW4vc2ggfHwKLSAgICAgICAjIEFsbG93IHRoZSB1c2Ugb2YgR05VIHNodG9vbCdzIGluc3RhbGwgY29tbWFuZC4KLSAgICAgICBjYXNlICRub25vcHQgaW4gKnNodG9vbCopIDo7OyAqKSBmYWxzZTs7IGVzYWM7IHRoZW4KLSAgICAgICMgQWVzdGhldGljYWxseSBxdW90ZSBpdC4KLSAgICAgIGZ1bmNfcXVvdGVfZm9yX2V2YWwgIiRub25vcHQiCi0gICAgICBpbnN0YWxsX3Byb2c9IiRmdW5jX3F1b3RlX2Zvcl9ldmFsX3Jlc3VsdCAiCi0gICAgICBhcmc9JDEKLSAgICAgIHNoaWZ0Ci0gICAgZWxzZQotICAgICAgaW5zdGFsbF9wcm9nPQotICAgICAgYXJnPSRub25vcHQKLSAgICBmaQotCi0gICAgIyBUaGUgcmVhbCBmaXJzdCBhcmd1bWVudCBzaG91bGQgYmUgdGhlIG5hbWUgb2YgdGhlIGluc3RhbGxhdGlvbiBwcm9ncmFtLgotICAgICMgQWVzdGhldGljYWxseSBxdW90ZSBpdC4KLSAgICBmdW5jX3F1b3RlX2Zvcl9ldmFsICIkYXJnIgotICAgIGZ1bmNfYXBwZW5kIGluc3RhbGxfcHJvZyAiJGZ1bmNfcXVvdGVfZm9yX2V2YWxfcmVzdWx0IgotICAgIGluc3RhbGxfc2hhcmVkX3Byb2c9JGluc3RhbGxfcHJvZwotICAgIGNhc2UgIiAkaW5zdGFsbF9wcm9nICIgaW4KLSAgICAgICpbXFxcIC9dY3BcICopIGluc3RhbGxfY3A9OiA7OwotICAgICAgKikgaW5zdGFsbF9jcD1mYWxzZSA7OwotICAgIGVzYWMKLQotICAgICMgV2UgbmVlZCB0byBhY2NlcHQgYXQgbGVhc3QgYWxsIHRoZSBCU0QgaW5zdGFsbCBmbGFncy4KLSAgICBkZXN0PQotICAgIGZpbGVzPQotICAgIG9wdHM9Ci0gICAgcHJldj0KLSAgICBpbnN0YWxsX3R5cGU9Ci0gICAgaXNkaXI9bm8KLSAgICBzdHJpcG1lPQotICAgIG5vX21vZGU9OgotICAgIGZvciBhcmcKLSAgICBkbwotICAgICAgYXJnMj0KLSAgICAgIGlmIHRlc3QgLW4gIiRkZXN0IjsgdGhlbgotCWZ1bmNfYXBwZW5kIGZpbGVzICIgJGRlc3QiCi0JZGVzdD0kYXJnCi0JY29udGludWUKLSAgICAgIGZpCi0KLSAgICAgIGNhc2UgJGFyZyBpbgotICAgICAgLWQpIGlzZGlyPXllcyA7OwotICAgICAgLWYpCi0JaWYgJGluc3RhbGxfY3A7IHRoZW4gOjsgZWxzZQotCSAgcHJldj0kYXJnCi0JZmkKLQk7OwotICAgICAgLWcgfCAtbSB8IC1vKQotCXByZXY9JGFyZwotCTs7Ci0gICAgICAtcykKLQlzdHJpcG1lPSIgLXMiCi0JY29udGludWUKLQk7OwotICAgICAgLSopCi0JOzsKLSAgICAgICopCi0JIyBJZiB0aGUgcHJldmlvdXMgb3B0aW9uIG5lZWRlZCBhbiBhcmd1bWVudCwgdGhlbiBza2lwIGl0LgotCWlmIHRlc3QgLW4gIiRwcmV2IjsgdGhlbgotCSAgaWYgdGVzdCAieCRwcmV2IiA9IHgtbSAmJiB0ZXN0IC1uICIkaW5zdGFsbF9vdmVycmlkZV9tb2RlIjsgdGhlbgotCSAgICBhcmcyPSRpbnN0YWxsX292ZXJyaWRlX21vZGUKLQkgICAgbm9fbW9kZT1mYWxzZQotCSAgZmkKLQkgIHByZXY9Ci0JZWxzZQotCSAgZGVzdD0kYXJnCi0JICBjb250aW51ZQotCWZpCi0JOzsKLSAgICAgIGVzYWMKLQotICAgICAgIyBBZXN0aGV0aWNhbGx5IHF1b3RlIHRoZSBhcmd1bWVudC4KLSAgICAgIGZ1bmNfcXVvdGVfZm9yX2V2YWwgIiRhcmciCi0gICAgICBmdW5jX2FwcGVuZCBpbnN0YWxsX3Byb2cgIiAkZnVuY19xdW90ZV9mb3JfZXZhbF9yZXN1bHQiCi0gICAgICBpZiB0ZXN0IC1uICIkYXJnMiI7IHRoZW4KLQlmdW5jX3F1b3RlX2Zvcl9ldmFsICIkYXJnMiIKLSAgICAgIGZpCi0gICAgICBmdW5jX2FwcGVuZCBpbnN0YWxsX3NoYXJlZF9wcm9nICIgJGZ1bmNfcXVvdGVfZm9yX2V2YWxfcmVzdWx0IgotICAgIGRvbmUKLQotICAgIHRlc3QgLXogIiRpbnN0YWxsX3Byb2ciICYmIFwKLSAgICAgIGZ1bmNfZmF0YWxfaGVscCAieW91IG11c3Qgc3BlY2lmeSBhbiBpbnN0YWxsIHByb2dyYW0iCi0KLSAgICB0ZXN0IC1uICIkcHJldiIgJiYgXAotICAgICAgZnVuY19mYXRhbF9oZWxwICJ0aGUgXGAkcHJldicgb3B0aW9uIHJlcXVpcmVzIGFuIGFyZ3VtZW50IgotCi0gICAgaWYgdGVzdCAtbiAiJGluc3RhbGxfb3ZlcnJpZGVfbW9kZSIgJiYgJG5vX21vZGU7IHRoZW4KLSAgICAgIGlmICRpbnN0YWxsX2NwOyB0aGVuIDo7IGVsc2UKLQlmdW5jX3F1b3RlX2Zvcl9ldmFsICIkaW5zdGFsbF9vdmVycmlkZV9tb2RlIgotCWZ1bmNfYXBwZW5kIGluc3RhbGxfc2hhcmVkX3Byb2cgIiAtbSAkZnVuY19xdW90ZV9mb3JfZXZhbF9yZXN1bHQiCi0gICAgICBmaQotICAgIGZpCi0KLSAgICBpZiB0ZXN0IC16ICIkZmlsZXMiOyB0aGVuCi0gICAgICBpZiB0ZXN0IC16ICIkZGVzdCI7IHRoZW4KLQlmdW5jX2ZhdGFsX2hlbHAgIm5vIGZpbGUgb3IgZGVzdGluYXRpb24gc3BlY2lmaWVkIgotICAgICAgZWxzZQotCWZ1bmNfZmF0YWxfaGVscCAieW91IG11c3Qgc3BlY2lmeSBhIGRlc3RpbmF0aW9uIgotICAgICAgZmkKLSAgICBmaQotCi0gICAgIyBTdHJpcCBhbnkgdHJhaWxpbmcgc2xhc2ggZnJvbSB0aGUgZGVzdGluYXRpb24uCi0gICAgZnVuY19zdHJpcG5hbWUgJycgJy8nICIkZGVzdCIKLSAgICBkZXN0PSRmdW5jX3N0cmlwbmFtZV9yZXN1bHQKLQotICAgICMgQ2hlY2sgdG8gc2VlIHRoYXQgdGhlIGRlc3RpbmF0aW9uIGlzIGEgZGlyZWN0b3J5LgotICAgIHRlc3QgLWQgIiRkZXN0IiAmJiBpc2Rpcj15ZXMKLSAgICBpZiB0ZXN0ICIkaXNkaXIiID0geWVzOyB0aGVuCi0gICAgICBkZXN0ZGlyPSIkZGVzdCIKLSAgICAgIGRlc3RuYW1lPQotICAgIGVsc2UKLSAgICAgIGZ1bmNfZGlybmFtZV9hbmRfYmFzZW5hbWUgIiRkZXN0IiAiIiAiLiIKLSAgICAgIGRlc3RkaXI9IiRmdW5jX2Rpcm5hbWVfcmVzdWx0IgotICAgICAgZGVzdG5hbWU9IiRmdW5jX2Jhc2VuYW1lX3Jlc3VsdCIKLQotICAgICAgIyBOb3QgYSBkaXJlY3RvcnksIHNvIGNoZWNrIHRvIHNlZSB0aGF0IHRoZXJlIGlzIG9ubHkgb25lIGZpbGUgc3BlY2lmaWVkLgotICAgICAgc2V0IGR1bW15ICRmaWxlczsgc2hpZnQKLSAgICAgIHRlc3QgIiQjIiAtZ3QgMSAmJiBcCi0JZnVuY19mYXRhbF9oZWxwICJcYCRkZXN0JyBpcyBub3QgYSBkaXJlY3RvcnkiCi0gICAgZmkKLSAgICBjYXNlICRkZXN0ZGlyIGluCi0gICAgW1xcL10qIHwgW0EtWmEtel06W1xcL10qKSA7OwotICAgICopCi0gICAgICBmb3IgZmlsZSBpbiAkZmlsZXM7IGRvCi0JY2FzZSAkZmlsZSBpbgotCSoubG8pIDs7Ci0JKikKLQkgIGZ1bmNfZmF0YWxfaGVscCAiXGAkZGVzdGRpcicgbXVzdCBiZSBhbiBhYnNvbHV0ZSBkaXJlY3RvcnkgbmFtZSIKLQkgIDs7Ci0JZXNhYwotICAgICAgZG9uZQotICAgICAgOzsKLSAgICBlc2FjCi0KLSAgICAjIFRoaXMgdmFyaWFibGUgdGVsbHMgd3JhcHBlciBzY3JpcHRzIGp1c3QgdG8gc2V0IHZhcmlhYmxlcyByYXRoZXIKLSAgICAjIHRoYW4gcnVubmluZyB0aGVpciBwcm9ncmFtcy4KLSAgICBsaWJ0b29sX2luc3RhbGxfbWFnaWM9IiRtYWdpYyIKLQotICAgIHN0YXRpY2xpYnM9Ci0gICAgZnV0dXJlX2xpYmRpcnM9Ci0gICAgY3VycmVudF9saWJkaXJzPQotICAgIGZvciBmaWxlIGluICRmaWxlczsgZG8KLQotICAgICAgIyBEbyBlYWNoIGluc3RhbGxhdGlvbi4KLSAgICAgIGNhc2UgJGZpbGUgaW4KLSAgICAgICouJGxpYmV4dCkKLQkjIERvIHRoZSBzdGF0aWMgbGlicmFyaWVzIGxhdGVyLgotCWZ1bmNfYXBwZW5kIHN0YXRpY2xpYnMgIiAkZmlsZSIKLQk7OwotCi0gICAgICAqLmxhKQotCWZ1bmNfcmVzb2x2ZV9zeXNyb290ICIkZmlsZSIKLQlmaWxlPSRmdW5jX3Jlc29sdmVfc3lzcm9vdF9yZXN1bHQKLQotCSMgQ2hlY2sgdG8gc2VlIHRoYXQgdGhpcyByZWFsbHkgaXMgYSBsaWJ0b29sIGFyY2hpdmUuCi0JZnVuY19sYWxpYl91bnNhZmVfcCAiJGZpbGUiIFwKLQkgIHx8IGZ1bmNfZmF0YWxfaGVscCAiXGAkZmlsZScgaXMgbm90IGEgdmFsaWQgbGlidG9vbCBhcmNoaXZlIgotCi0JbGlicmFyeV9uYW1lcz0KLQlvbGRfbGlicmFyeT0KLQlyZWxpbmtfY29tbWFuZD0KLQlmdW5jX3NvdXJjZSAiJGZpbGUiCi0KLQkjIEFkZCB0aGUgbGliZGlyIHRvIGN1cnJlbnRfbGliZGlycyBpZiBpdCBpcyB0aGUgZGVzdGluYXRpb24uCi0JaWYgdGVzdCAiWCRkZXN0ZGlyIiA9ICJYJGxpYmRpciI7IHRoZW4KLQkgIGNhc2UgIiRjdXJyZW50X2xpYmRpcnMgIiBpbgotCSAgKiIgJGxpYmRpciAiKikgOzsKLQkgICopIGZ1bmNfYXBwZW5kIGN1cnJlbnRfbGliZGlycyAiICRsaWJkaXIiIDs7Ci0JICBlc2FjCi0JZWxzZQotCSAgIyBOb3RlIHRoZSBsaWJkaXIgYXMgYSBmdXR1cmUgbGliZGlyLgotCSAgY2FzZSAiJGZ1dHVyZV9saWJkaXJzICIgaW4KLQkgICoiICRsaWJkaXIgIiopIDs7Ci0JICAqKSBmdW5jX2FwcGVuZCBmdXR1cmVfbGliZGlycyAiICRsaWJkaXIiIDs7Ci0JICBlc2FjCi0JZmkKLQotCWZ1bmNfZGlybmFtZSAiJGZpbGUiICIvIiAiIgotCWRpcj0iJGZ1bmNfZGlybmFtZV9yZXN1bHQiCi0JZnVuY19hcHBlbmQgZGlyICIkb2JqZGlyIgotCi0JaWYgdGVzdCAtbiAiJHJlbGlua19jb21tYW5kIjsgdGhlbgotCSAgIyBEZXRlcm1pbmUgdGhlIHByZWZpeCB0aGUgdXNlciBoYXMgYXBwbGllZCB0byBvdXIgZnV0dXJlIGRpci4KLQkgIGluc3RfcHJlZml4X2Rpcj1gJEVDSE8gIiRkZXN0ZGlyIiB8ICRTRUQgLWUgInMlJGxpYmRpclwkJSUiYAotCi0JICAjIERvbid0IGFsbG93IHRoZSB1c2VyIHRvIHBsYWNlIHVzIG91dHNpZGUgb2Ygb3VyIGV4cGVjdGVkCi0JICAjIGxvY2F0aW9uIGIvYyB0aGlzIHByZXZlbnRzIGZpbmRpbmcgZGVwZW5kZW50IGxpYnJhcmllcyB0aGF0Ci0JICAjIGFyZSBpbnN0YWxsZWQgdG8gdGhlIHNhbWUgcHJlZml4LgotCSAgIyBBdCBwcmVzZW50LCB0aGlzIGNoZWNrIGRvZXNuJ3QgYWZmZWN0IHdpbmRvd3MgLmRsbCdzIHRoYXQKLQkgICMgYXJlIGluc3RhbGxlZCBpbnRvICRsaWJkaXIvLi4vYmluIChjdXJyZW50bHksIHRoYXQgd29ya3MgZmluZSkKLQkgICMgYnV0IGl0J3Mgc29tZXRoaW5nIHRvIGtlZXAgYW4gZXllIG9uLgotCSAgdGVzdCAiJGluc3RfcHJlZml4X2RpciIgPSAiJGRlc3RkaXIiICYmIFwKLQkgICAgZnVuY19mYXRhbF9lcnJvciAiZXJyb3I6IGNhbm5vdCBpbnN0YWxsIFxgJGZpbGUnIHRvIGEgZGlyZWN0b3J5IG5vdCBlbmRpbmcgaW4gJGxpYmRpciIKLQotCSAgaWYgdGVzdCAtbiAiJGluc3RfcHJlZml4X2RpciI7IHRoZW4KLQkgICAgIyBTdGljayB0aGUgaW5zdF9wcmVmaXhfZGlyIGRhdGEgaW50byB0aGUgbGluayBjb21tYW5kLgotCSAgICByZWxpbmtfY29tbWFuZD1gJEVDSE8gIiRyZWxpbmtfY29tbWFuZCIgfCAkU0VEICJzJUBpbnN0X3ByZWZpeF9kaXJAJS1pbnN0LXByZWZpeC1kaXIgJGluc3RfcHJlZml4X2RpciUiYAotCSAgZWxzZQotCSAgICByZWxpbmtfY29tbWFuZD1gJEVDSE8gIiRyZWxpbmtfY29tbWFuZCIgfCAkU0VEICJzJUBpbnN0X3ByZWZpeF9kaXJAJSUiYAotCSAgZmkKLQotCSAgZnVuY193YXJuaW5nICJyZWxpbmtpbmcgXGAkZmlsZSciCi0JICBmdW5jX3Nob3dfZXZhbCAiJHJlbGlua19jb21tYW5kIiBcCi0JICAgICdmdW5jX2ZhdGFsX2Vycm9yICJlcnJvcjogcmVsaW5rIFxgJGZpbGUnXCcnIHdpdGggdGhlIGFib3ZlIGNvbW1hbmQgYmVmb3JlIGluc3RhbGxpbmcgaXQiJwotCWZpCi0KLQkjIFNlZSB0aGUgbmFtZXMgb2YgdGhlIHNoYXJlZCBsaWJyYXJ5LgotCXNldCBkdW1teSAkbGlicmFyeV9uYW1lczsgc2hpZnQKLQlpZiB0ZXN0IC1uICIkMSI7IHRoZW4KLQkgIHJlYWxuYW1lPSIkMSIKLQkgIHNoaWZ0Ci0KLQkgIHNyY25hbWU9IiRyZWFsbmFtZSIKLQkgIHRlc3QgLW4gIiRyZWxpbmtfY29tbWFuZCIgJiYgc3JjbmFtZT0iJHJlYWxuYW1lIlQKLQotCSAgIyBJbnN0YWxsIHRoZSBzaGFyZWQgbGlicmFyeSBhbmQgYnVpbGQgdGhlIHN5bWxpbmtzLgotCSAgZnVuY19zaG93X2V2YWwgIiRpbnN0YWxsX3NoYXJlZF9wcm9nICRkaXIvJHNyY25hbWUgJGRlc3RkaXIvJHJlYWxuYW1lIiBcCi0JICAgICAgJ2V4aXQgJD8nCi0JICB0c3RyaXBtZT0iJHN0cmlwbWUiCi0JICBjYXNlICRob3N0X29zIGluCi0JICBjeWd3aW4qIHwgbWluZ3cqIHwgcHczMiogfCBjZWdjYyopCi0JICAgIGNhc2UgJHJlYWxuYW1lIGluCi0JICAgICouZGxsLmEpCi0JICAgICAgdHN0cmlwbWU9IiIKLQkgICAgICA7OwotCSAgICBlc2FjCi0JICAgIDs7Ci0JICBlc2FjCi0JICBpZiB0ZXN0IC1uICIkdHN0cmlwbWUiICYmIHRlc3QgLW4gIiRzdHJpcGxpYiI7IHRoZW4KLQkgICAgZnVuY19zaG93X2V2YWwgIiRzdHJpcGxpYiAkZGVzdGRpci8kcmVhbG5hbWUiICdleGl0ICQ/JwotCSAgZmkKLQotCSAgaWYgdGVzdCAiJCMiIC1ndCAwOyB0aGVuCi0JICAgICMgRGVsZXRlIHRoZSBvbGQgc3ltbGlua3MsIGFuZCBjcmVhdGUgbmV3IG9uZXMuCi0JICAgICMgVHJ5IGBsbiAtc2YnIGZpcnN0LCBiZWNhdXNlIHRoZSBgbG4nIGJpbmFyeSBtaWdodCBkZXBlbmQgb24KLQkgICAgIyB0aGUgc3ltbGluayB3ZSByZXBsYWNlISAgU29sYXJpcyAvYmluL2xuIGRvZXMgbm90IHVuZGVyc3RhbmQgLWYsCi0JICAgICMgc28gd2UgYWxzbyBuZWVkIHRvIHRyeSBybSAmJiBsbiAtcy4KLQkgICAgZm9yIGxpbmtuYW1lCi0JICAgIGRvCi0JICAgICAgdGVzdCAiJGxpbmtuYW1lIiAhPSAiJHJlYWxuYW1lIiBcCi0JCSYmIGZ1bmNfc2hvd19ldmFsICIoY2QgJGRlc3RkaXIgJiYgeyAkTE5fUyAtZiAkcmVhbG5hbWUgJGxpbmtuYW1lIHx8IHsgJFJNICRsaW5rbmFtZSAmJiAkTE5fUyAkcmVhbG5hbWUgJGxpbmtuYW1lOyB9OyB9KSIKLQkgICAgZG9uZQotCSAgZmkKLQotCSAgIyBEbyBlYWNoIGNvbW1hbmQgaW4gdGhlIHBvc3RpbnN0YWxsIGNvbW1hbmRzLgotCSAgbGliPSIkZGVzdGRpci8kcmVhbG5hbWUiCi0JICBmdW5jX2V4ZWN1dGVfY21kcyAiJHBvc3RpbnN0YWxsX2NtZHMiICdleGl0ICQ/JwotCWZpCi0KLQkjIEluc3RhbGwgdGhlIHBzZXVkby1saWJyYXJ5IGZvciBpbmZvcm1hdGlvbiBwdXJwb3Nlcy4KLQlmdW5jX2Jhc2VuYW1lICIkZmlsZSIKLQluYW1lPSIkZnVuY19iYXNlbmFtZV9yZXN1bHQiCi0JaW5zdG5hbWU9IiRkaXIvJG5hbWUiaQotCWZ1bmNfc2hvd19ldmFsICIkaW5zdGFsbF9wcm9nICRpbnN0bmFtZSAkZGVzdGRpci8kbmFtZSIgJ2V4aXQgJD8nCi0KLQkjIE1heWJlIGluc3RhbGwgdGhlIHN0YXRpYyBsaWJyYXJ5LCB0b28uCi0JdGVzdCAtbiAiJG9sZF9saWJyYXJ5IiAmJiBmdW5jX2FwcGVuZCBzdGF0aWNsaWJzICIgJGRpci8kb2xkX2xpYnJhcnkiCi0JOzsKLQotICAgICAgKi5sbykKLQkjIEluc3RhbGwgKGkuZS4gY29weSkgYSBsaWJ0b29sIG9iamVjdC4KLQotCSMgRmlndXJlIG91dCBkZXN0aW5hdGlvbiBmaWxlIG5hbWUsIGlmIGl0IHdhc24ndCBhbHJlYWR5IHNwZWNpZmllZC4KLQlpZiB0ZXN0IC1uICIkZGVzdG5hbWUiOyB0aGVuCi0JICBkZXN0ZmlsZT0iJGRlc3RkaXIvJGRlc3RuYW1lIgotCWVsc2UKLQkgIGZ1bmNfYmFzZW5hbWUgIiRmaWxlIgotCSAgZGVzdGZpbGU9IiRmdW5jX2Jhc2VuYW1lX3Jlc3VsdCIKLQkgIGRlc3RmaWxlPSIkZGVzdGRpci8kZGVzdGZpbGUiCi0JZmkKLQotCSMgRGVkdWNlIHRoZSBuYW1lIG9mIHRoZSBkZXN0aW5hdGlvbiBvbGQtc3R5bGUgb2JqZWN0IGZpbGUuCi0JY2FzZSAkZGVzdGZpbGUgaW4KLQkqLmxvKQotCSAgZnVuY19sbzJvICIkZGVzdGZpbGUiCi0JICBzdGF0aWNkZXN0PSRmdW5jX2xvMm9fcmVzdWx0Ci0JICA7OwotCSouJG9iamV4dCkKLQkgIHN0YXRpY2Rlc3Q9IiRkZXN0ZmlsZSIKLQkgIGRlc3RmaWxlPQotCSAgOzsKLQkqKQotCSAgZnVuY19mYXRhbF9oZWxwICJjYW5ub3QgY29weSBhIGxpYnRvb2wgb2JqZWN0IHRvIFxgJGRlc3RmaWxlJyIKLQkgIDs7Ci0JZXNhYwotCi0JIyBJbnN0YWxsIHRoZSBsaWJ0b29sIG9iamVjdCBpZiByZXF1ZXN0ZWQuCi0JdGVzdCAtbiAiJGRlc3RmaWxlIiAmJiBcCi0JICBmdW5jX3Nob3dfZXZhbCAiJGluc3RhbGxfcHJvZyAkZmlsZSAkZGVzdGZpbGUiICdleGl0ICQ/JwotCi0JIyBJbnN0YWxsIHRoZSBvbGQgb2JqZWN0IGlmIGVuYWJsZWQuCi0JaWYgdGVzdCAiJGJ1aWxkX29sZF9saWJzIiA9IHllczsgdGhlbgotCSAgIyBEZWR1Y2UgdGhlIG5hbWUgb2YgdGhlIG9sZC1zdHlsZSBvYmplY3QgZmlsZS4KLQkgIGZ1bmNfbG8ybyAiJGZpbGUiCi0JICBzdGF0aWNvYmo9JGZ1bmNfbG8yb19yZXN1bHQKLQkgIGZ1bmNfc2hvd19ldmFsICIkaW5zdGFsbF9wcm9nIFwkc3RhdGljb2JqIFwkc3RhdGljZGVzdCIgJ2V4aXQgJD8nCi0JZmkKLQlleGl0ICRFWElUX1NVQ0NFU1MKLQk7OwotCi0gICAgICAqKQotCSMgRmlndXJlIG91dCBkZXN0aW5hdGlvbiBmaWxlIG5hbWUsIGlmIGl0IHdhc24ndCBhbHJlYWR5IHNwZWNpZmllZC4KLQlpZiB0ZXN0IC1uICIkZGVzdG5hbWUiOyB0aGVuCi0JICBkZXN0ZmlsZT0iJGRlc3RkaXIvJGRlc3RuYW1lIgotCWVsc2UKLQkgIGZ1bmNfYmFzZW5hbWUgIiRmaWxlIgotCSAgZGVzdGZpbGU9IiRmdW5jX2Jhc2VuYW1lX3Jlc3VsdCIKLQkgIGRlc3RmaWxlPSIkZGVzdGRpci8kZGVzdGZpbGUiCi0JZmkKLQotCSMgSWYgdGhlIGZpbGUgaXMgbWlzc2luZywgYW5kIHRoZXJlIGlzIGEgLmV4ZSBvbiB0aGUgZW5kLCBzdHJpcCBpdAotCSMgYmVjYXVzZSBpdCBpcyBtb3N0IGxpa2VseSBhIGxpYnRvb2wgc2NyaXB0IHdlIGFjdHVhbGx5IHdhbnQgdG8KLQkjIGluc3RhbGwKLQlzdHJpcHBlZF9leHQ9IiIKLQljYXNlICRmaWxlIGluCi0JICAqLmV4ZSkKLQkgICAgaWYgdGVzdCAhIC1mICIkZmlsZSI7IHRoZW4KLQkgICAgICBmdW5jX3N0cmlwbmFtZSAnJyAnLmV4ZScgIiRmaWxlIgotCSAgICAgIGZpbGU9JGZ1bmNfc3RyaXBuYW1lX3Jlc3VsdAotCSAgICAgIHN0cmlwcGVkX2V4dD0iLmV4ZSIKLQkgICAgZmkKLQkgICAgOzsKLQllc2FjCi0KLQkjIERvIGEgdGVzdCB0byBzZWUgaWYgdGhpcyBpcyByZWFsbHkgYSBsaWJ0b29sIHByb2dyYW0uCi0JY2FzZSAkaG9zdCBpbgotCSpjeWd3aW4qIHwgKm1pbmd3KikKLQkgICAgaWYgZnVuY19sdHdyYXBwZXJfZXhlY3V0YWJsZV9wICIkZmlsZSI7IHRoZW4KLQkgICAgICBmdW5jX2x0d3JhcHBlcl9zY3JpcHRuYW1lICIkZmlsZSIKLQkgICAgICB3cmFwcGVyPSRmdW5jX2x0d3JhcHBlcl9zY3JpcHRuYW1lX3Jlc3VsdAotCSAgICBlbHNlCi0JICAgICAgZnVuY19zdHJpcG5hbWUgJycgJy5leGUnICIkZmlsZSIKLQkgICAgICB3cmFwcGVyPSRmdW5jX3N0cmlwbmFtZV9yZXN1bHQKLQkgICAgZmkKLQkgICAgOzsKLQkqKQotCSAgICB3cmFwcGVyPSRmaWxlCi0JICAgIDs7Ci0JZXNhYwotCWlmIGZ1bmNfbHR3cmFwcGVyX3NjcmlwdF9wICIkd3JhcHBlciI7IHRoZW4KLQkgIG5vdGluc3RfZGVwbGlicz0KLQkgIHJlbGlua19jb21tYW5kPQotCi0JICBmdW5jX3NvdXJjZSAiJHdyYXBwZXIiCi0KLQkgICMgQ2hlY2sgdGhlIHZhcmlhYmxlcyB0aGF0IHNob3VsZCBoYXZlIGJlZW4gc2V0LgotCSAgdGVzdCAteiAiJGdlbmVyYXRlZF9ieV9saWJ0b29sX3ZlcnNpb24iICYmIFwKLQkgICAgZnVuY19mYXRhbF9lcnJvciAiaW52YWxpZCBsaWJ0b29sIHdyYXBwZXIgc2NyaXB0IFxgJHdyYXBwZXInIgotCi0JICBmaW5hbGl6ZT15ZXMKLQkgIGZvciBsaWIgaW4gJG5vdGluc3RfZGVwbGliczsgZG8KLQkgICAgIyBDaGVjayB0byBzZWUgdGhhdCBlYWNoIGxpYnJhcnkgaXMgaW5zdGFsbGVkLgotCSAgICBsaWJkaXI9Ci0JICAgIGlmIHRlc3QgLWYgIiRsaWIiOyB0aGVuCi0JICAgICAgZnVuY19zb3VyY2UgIiRsaWIiCi0JICAgIGZpCi0JICAgIGxpYmZpbGU9IiRsaWJkaXIvImAkRUNITyAiJGxpYiIgfCAkU0VEICdzJV4uKi8lJWcnYCAjIyMgdGVzdHN1aXRlOiBza2lwIG5lc3RlZCBxdW90aW5nIHRlc3QKLQkgICAgaWYgdGVzdCAtbiAiJGxpYmRpciIgJiYgdGVzdCAhIC1mICIkbGliZmlsZSI7IHRoZW4KLQkgICAgICBmdW5jX3dhcm5pbmcgIlxgJGxpYicgaGFzIG5vdCBiZWVuIGluc3RhbGxlZCBpbiBcYCRsaWJkaXInIgotCSAgICAgIGZpbmFsaXplPW5vCi0JICAgIGZpCi0JICBkb25lCi0KLQkgIHJlbGlua19jb21tYW5kPQotCSAgZnVuY19zb3VyY2UgIiR3cmFwcGVyIgotCi0JICBvdXRwdXRuYW1lPQotCSAgaWYgdGVzdCAiJGZhc3RfaW5zdGFsbCIgPSBubyAmJiB0ZXN0IC1uICIkcmVsaW5rX2NvbW1hbmQiOyB0aGVuCi0JICAgICRvcHRfZHJ5X3J1biB8fCB7Ci0JICAgICAgaWYgdGVzdCAiJGZpbmFsaXplIiA9IHllczsgdGhlbgotCSAgICAgICAgdG1wZGlyPWBmdW5jX21rdGVtcGRpcmAKLQkJZnVuY19iYXNlbmFtZSAiJGZpbGUkc3RyaXBwZWRfZXh0IgotCQlmaWxlPSIkZnVuY19iYXNlbmFtZV9yZXN1bHQiCi0JICAgICAgICBvdXRwdXRuYW1lPSIkdG1wZGlyLyRmaWxlIgotCSAgICAgICAgIyBSZXBsYWNlIHRoZSBvdXRwdXQgZmlsZSBzcGVjaWZpY2F0aW9uLgotCSAgICAgICAgcmVsaW5rX2NvbW1hbmQ9YCRFQ0hPICIkcmVsaW5rX2NvbW1hbmQiIHwgJFNFRCAncyVAT1VUUFVUQCUnIiRvdXRwdXRuYW1lIiclZydgCi0KLQkgICAgICAgICRvcHRfc2lsZW50IHx8IHsKLQkgICAgICAgICAgZnVuY19xdW90ZV9mb3JfZXhwYW5kICIkcmVsaW5rX2NvbW1hbmQiCi0JCSAgZXZhbCAiZnVuY19lY2hvICRmdW5jX3F1b3RlX2Zvcl9leHBhbmRfcmVzdWx0IgotCSAgICAgICAgfQotCSAgICAgICAgaWYgZXZhbCAiJHJlbGlua19jb21tYW5kIjsgdGhlbiA6Ci0JICAgICAgICAgIGVsc2UKLQkJICBmdW5jX2Vycm9yICJlcnJvcjogcmVsaW5rIFxgJGZpbGUnIHdpdGggdGhlIGFib3ZlIGNvbW1hbmQgYmVmb3JlIGluc3RhbGxpbmcgaXQiCi0JCSAgJG9wdF9kcnlfcnVuIHx8ICR7Uk19ciAiJHRtcGRpciIKLQkJICBjb250aW51ZQotCSAgICAgICAgZmkKLQkgICAgICAgIGZpbGU9IiRvdXRwdXRuYW1lIgotCSAgICAgIGVsc2UKLQkgICAgICAgIGZ1bmNfd2FybmluZyAiY2Fubm90IHJlbGluayBcYCRmaWxlJyIKLQkgICAgICBmaQotCSAgICB9Ci0JICBlbHNlCi0JICAgICMgSW5zdGFsbCB0aGUgYmluYXJ5IHRoYXQgd2UgY29tcGlsZWQgZWFybGllci4KLQkgICAgZmlsZT1gJEVDSE8gIiRmaWxlJHN0cmlwcGVkX2V4dCIgfCAkU0VEICJzJVwoW14vXSpcKSQlJG9iamRpci9cMSUiYAotCSAgZmkKLQlmaQotCi0JIyByZW1vdmUgLmV4ZSBzaW5jZSBjeWd3aW4gL3Vzci9iaW4vaW5zdGFsbCB3aWxsIGFwcGVuZCBhbm90aGVyCi0JIyBvbmUgYW55d2F5Ci0JY2FzZSAkaW5zdGFsbF9wcm9nLCRob3N0IGluCi0JKi91c3IvYmluL2luc3RhbGwqLCpjeWd3aW4qKQotCSAgY2FzZSAkZmlsZTokZGVzdGZpbGUgaW4KLQkgICouZXhlOiouZXhlKQotCSAgICAjIHRoaXMgaXMgb2sKLQkgICAgOzsKLQkgICouZXhlOiopCi0JICAgIGRlc3RmaWxlPSRkZXN0ZmlsZS5leGUKLQkgICAgOzsKLQkgICo6Ki5leGUpCi0JICAgIGZ1bmNfc3RyaXBuYW1lICcnICcuZXhlJyAiJGRlc3RmaWxlIgotCSAgICBkZXN0ZmlsZT0kZnVuY19zdHJpcG5hbWVfcmVzdWx0Ci0JICAgIDs7Ci0JICBlc2FjCi0JICA7OwotCWVzYWMKLQlmdW5jX3Nob3dfZXZhbCAiJGluc3RhbGxfcHJvZ1wkc3RyaXBtZSBcJGZpbGUgXCRkZXN0ZmlsZSIgJ2V4aXQgJD8nCi0JJG9wdF9kcnlfcnVuIHx8IGlmIHRlc3QgLW4gIiRvdXRwdXRuYW1lIjsgdGhlbgotCSAgJHtSTX1yICIkdG1wZGlyIgotCWZpCi0JOzsKLSAgICAgIGVzYWMKLSAgICBkb25lCi0KLSAgICBmb3IgZmlsZSBpbiAkc3RhdGljbGliczsgZG8KLSAgICAgIGZ1bmNfYmFzZW5hbWUgIiRmaWxlIgotICAgICAgbmFtZT0iJGZ1bmNfYmFzZW5hbWVfcmVzdWx0IgotCi0gICAgICAjIFNldCB1cCB0aGUgcmFubGliIHBhcmFtZXRlcnMuCi0gICAgICBvbGRsaWI9IiRkZXN0ZGlyLyRuYW1lIgotCi0gICAgICBmdW5jX3Nob3dfZXZhbCAiJGluc3RhbGxfcHJvZyBcJGZpbGUgXCRvbGRsaWIiICdleGl0ICQ/JwotCi0gICAgICBpZiB0ZXN0IC1uICIkc3RyaXBtZSIgJiYgdGVzdCAtbiAiJG9sZF9zdHJpcGxpYiI7IHRoZW4KLQlmdW5jX3Nob3dfZXZhbCAiJG9sZF9zdHJpcGxpYiAkb2xkbGliIiAnZXhpdCAkPycKLSAgICAgIGZpCi0KLSAgICAgICMgRG8gZWFjaCBjb21tYW5kIGluIHRoZSBwb3N0aW5zdGFsbCBjb21tYW5kcy4KLSAgICAgIGZ1bmNfZXhlY3V0ZV9jbWRzICIkb2xkX3Bvc3RpbnN0YWxsX2NtZHMiICdleGl0ICQ/JwotICAgIGRvbmUKLQotICAgIHRlc3QgLW4gIiRmdXR1cmVfbGliZGlycyIgJiYgXAotICAgICAgZnVuY193YXJuaW5nICJyZW1lbWJlciB0byBydW4gXGAkcHJvZ25hbWUgLS1maW5pc2gkZnV0dXJlX2xpYmRpcnMnIgotCi0gICAgaWYgdGVzdCAtbiAiJGN1cnJlbnRfbGliZGlycyI7IHRoZW4KLSAgICAgICMgTWF5YmUganVzdCBkbyBhIGRyeSBydW4uCi0gICAgICAkb3B0X2RyeV9ydW4gJiYgY3VycmVudF9saWJkaXJzPSIgLW4kY3VycmVudF9saWJkaXJzIgotICAgICAgZXhlY19jbWQ9JyRTSEVMTCAkcHJvZ3BhdGggJHByZXNlcnZlX2FyZ3MgLS1maW5pc2gkY3VycmVudF9saWJkaXJzJwotICAgIGVsc2UKLSAgICAgIGV4aXQgJEVYSVRfU1VDQ0VTUwotICAgIGZpCi19Ci0KLXRlc3QgIiRvcHRfbW9kZSIgPSBpbnN0YWxsICYmIGZ1bmNfbW9kZV9pbnN0YWxsICR7MSsiJEAifQotCi0KLSMgZnVuY19nZW5lcmF0ZV9kbHN5bXMgb3V0cHV0bmFtZSBvcmlnaW5hdG9yIHBpY19wCi0jIEV4dHJhY3Qgc3ltYm9scyBmcm9tIGRscHJlZmlsZXMgYW5kIGNyZWF0ZSAke291dHB1dG5hbWV9Uy5vIHdpdGgKLSMgYSBkbHByZW9wZW4gc3ltYm9sIHRhYmxlLgotZnVuY19nZW5lcmF0ZV9kbHN5bXMgKCkKLXsKLSAgICAkb3B0X2RlYnVnCi0gICAgbXlfb3V0cHV0bmFtZT0iJDEiCi0gICAgbXlfb3JpZ2luYXRvcj0iJDIiCi0gICAgbXlfcGljX3A9IiR7My1ub30iCi0gICAgbXlfcHJlZml4PWAkRUNITyAiJG15X29yaWdpbmF0b3IiIHwgc2VkICdzJVteYS16QS1aMC05XSVfJWcnYAotICAgIG15X2Rsc3ltcz0KLQotICAgIGlmIHRlc3QgLW4gIiRkbGZpbGVzJGRscHJlZmlsZXMiIHx8IHRlc3QgIiRkbHNlbGYiICE9IG5vOyB0aGVuCi0gICAgICBpZiB0ZXN0IC1uICIkTk0iICYmIHRlc3QgLW4gIiRnbG9iYWxfc3ltYm9sX3BpcGUiOyB0aGVuCi0JbXlfZGxzeW1zPSIke215X291dHB1dG5hbWV9Uy5jIgotICAgICAgZWxzZQotCWZ1bmNfZXJyb3IgIm5vdCBjb25maWd1cmVkIHRvIGV4dHJhY3QgZ2xvYmFsIHN5bWJvbHMgZnJvbSBkbHByZW9wZW5lZCBmaWxlcyIKLSAgICAgIGZpCi0gICAgZmkKLQotICAgIGlmIHRlc3QgLW4gIiRteV9kbHN5bXMiOyB0aGVuCi0gICAgICBjYXNlICRteV9kbHN5bXMgaW4KLSAgICAgICIiKSA7OwotICAgICAgKi5jKQotCSMgRGlzY292ZXIgdGhlIG5saXN0IG9mIGVhY2ggb2YgdGhlIGRsZmlsZXMuCi0Jbmxpc3Q9IiRvdXRwdXRfb2JqZGlyLyR7bXlfb3V0cHV0bmFtZX0ubm0iCi0KLQlmdW5jX3Nob3dfZXZhbCAiJFJNICRubGlzdCAke25saXN0fVMgJHtubGlzdH1UIgotCi0JIyBQYXJzZSB0aGUgbmFtZSBsaXN0IGludG8gYSBzb3VyY2UgZmlsZS4KLQlmdW5jX3ZlcmJvc2UgImNyZWF0aW5nICRvdXRwdXRfb2JqZGlyLyRteV9kbHN5bXMiCi0KLQkkb3B0X2RyeV9ydW4gfHwgJEVDSE8gPiAiJG91dHB1dF9vYmpkaXIvJG15X2Rsc3ltcyIgIlwKLS8qICRteV9kbHN5bXMgLSBzeW1ib2wgcmVzb2x1dGlvbiB0YWJsZSBmb3IgXGAkbXlfb3V0cHV0bmFtZScgZGxzeW0gZW11bGF0aW9uLiAqLwotLyogR2VuZXJhdGVkIGJ5ICRQUk9HUkFNIChHTlUgJFBBQ0tBR0UkVElNRVNUQU1QKSAkVkVSU0lPTiAqLwotCi0jaWZkZWYgX19jcGx1c3BsdXMKLWV4dGVybiBcIkNcIiB7Ci0jZW5kaWYKLQotI2lmIGRlZmluZWQoX19HTlVDX18pICYmICgoKF9fR05VQ19fID09IDQpICYmIChfX0dOVUNfTUlOT1JfXyA+PSA0KSkgfHwgKF9fR05VQ19fID4gNCkpCi0jcHJhZ21hIEdDQyBkaWFnbm9zdGljIGlnbm9yZWQgXCItV3N0cmljdC1wcm90b3R5cGVzXCIKLSNlbmRpZgotCi0vKiBLZWVwIHRoaXMgY29kZSBpbiBzeW5jIGJldHdlZW4gbGlidG9vbC5tNCwgbHRtYWluLCBsdF9zeXN0ZW0uaCwgYW5kIHRlc3RzLiAgKi8KLSNpZiBkZWZpbmVkKF9XSU4zMikgfHwgZGVmaW5lZChfX0NZR1dJTl9fKSB8fCBkZWZpbmVkKF9XSU4zMl9XQ0UpCi0vKiBEQVRBIGltcG9ydHMgZnJvbSBETExzIG9uIFdJTjMyIGNvbid0IGJlIGNvbnN0LCBiZWNhdXNlIHJ1bnRpbWUKLSAgIHJlbG9jYXRpb25zIGFyZSBwZXJmb3JtZWQgLS0gc2VlIGxkJ3MgZG9jdW1lbnRhdGlvbiBvbiBwc2V1ZG8tcmVsb2NzLiAgKi8KLSMgZGVmaW5lIExUX0RMU1lNX0NPTlNUCi0jZWxpZiBkZWZpbmVkKF9fb3NmX18pCi0vKiBUaGlzIHN5c3RlbSBkb2VzIG5vdCBjb3BlIHdlbGwgd2l0aCByZWxvY2F0aW9ucyBpbiBjb25zdCBkYXRhLiAgKi8KLSMgZGVmaW5lIExUX0RMU1lNX0NPTlNUCi0jZWxzZQotIyBkZWZpbmUgTFRfRExTWU1fQ09OU1QgY29uc3QKLSNlbmRpZgotCi0vKiBFeHRlcm5hbCBzeW1ib2wgZGVjbGFyYXRpb25zIGZvciB0aGUgY29tcGlsZXIuICovXAotIgotCi0JaWYgdGVzdCAiJGRsc2VsZiIgPSB5ZXM7IHRoZW4KLQkgIGZ1bmNfdmVyYm9zZSAiZ2VuZXJhdGluZyBzeW1ib2wgbGlzdCBmb3IgXGAkb3V0cHV0JyIKLQotCSAgJG9wdF9kcnlfcnVuIHx8IGVjaG8gJzogQFBST0dSQU1AICcgPiAiJG5saXN0IgotCi0JICAjIEFkZCBvdXIgb3duIHByb2dyYW0gb2JqZWN0cyB0byB0aGUgc3ltYm9sIGxpc3QuCi0JICBwcm9nZmlsZXM9YCRFQ0hPICIkb2JqcyRvbGRfZGVwbGlicyIgfCAkU1AyTkwgfCAkU0VEICIkbG8ybyIgfCAkTkwyU1BgCi0JICBmb3IgcHJvZ2ZpbGUgaW4gJHByb2dmaWxlczsgZG8KLQkgICAgZnVuY190b190b29sX2ZpbGUgIiRwcm9nZmlsZSIgZnVuY19jb252ZXJ0X2ZpbGVfbXN5c190b193MzIKLQkgICAgZnVuY192ZXJib3NlICJleHRyYWN0aW5nIGdsb2JhbCBDIHN5bWJvbHMgZnJvbSBcYCRmdW5jX3RvX3Rvb2xfZmlsZV9yZXN1bHQnIgotCSAgICAkb3B0X2RyeV9ydW4gfHwgZXZhbCAiJE5NICRmdW5jX3RvX3Rvb2xfZmlsZV9yZXN1bHQgfCAkZ2xvYmFsX3N5bWJvbF9waXBlID4+ICckbmxpc3QnIgotCSAgZG9uZQotCi0JICBpZiB0ZXN0IC1uICIkZXhjbHVkZV9leHBzeW1zIjsgdGhlbgotCSAgICAkb3B0X2RyeV9ydW4gfHwgewotCSAgICAgIGV2YWwgJyRFR1JFUCAtdiAiICgkZXhjbHVkZV9leHBzeW1zKSQiICIkbmxpc3QiID4gIiRubGlzdCJUJwotCSAgICAgIGV2YWwgJyRNViAiJG5saXN0IlQgIiRubGlzdCInCi0JICAgIH0KLQkgIGZpCi0KLQkgIGlmIHRlc3QgLW4gIiRleHBvcnRfc3ltYm9sc19yZWdleCI7IHRoZW4KLQkgICAgJG9wdF9kcnlfcnVuIHx8IHsKLQkgICAgICBldmFsICckRUdSRVAgLWUgIiRleHBvcnRfc3ltYm9sc19yZWdleCIgIiRubGlzdCIgPiAiJG5saXN0IlQnCi0JICAgICAgZXZhbCAnJE1WICIkbmxpc3QiVCAiJG5saXN0IicKLQkgICAgfQotCSAgZmkKLQotCSAgIyBQcmVwYXJlIHRoZSBsaXN0IG9mIGV4cG9ydGVkIHN5bWJvbHMKLQkgIGlmIHRlc3QgLXogIiRleHBvcnRfc3ltYm9scyI7IHRoZW4KLQkgICAgZXhwb3J0X3N5bWJvbHM9IiRvdXRwdXRfb2JqZGlyLyRvdXRwdXRuYW1lLmV4cCIKLQkgICAgJG9wdF9kcnlfcnVuIHx8IHsKLQkgICAgICAkUk0gJGV4cG9ydF9zeW1ib2xzCi0JICAgICAgZXZhbCAiJHtTRUR9IC1uIC1lICcvXjogQFBST0dSQU1AICQvZCcgLWUgJ3MvXi4qIFwoLipcKSQvXDEvcCcgIic8ICIkbmxpc3QiID4gIiRleHBvcnRfc3ltYm9scyInCi0JICAgICAgY2FzZSAkaG9zdCBpbgotCSAgICAgICpjeWd3aW4qIHwgKm1pbmd3KiB8ICpjZWdjYyogKQotICAgICAgICAgICAgICAgIGV2YWwgImVjaG8gRVhQT1JUUyAiJz4gIiRvdXRwdXRfb2JqZGlyLyRvdXRwdXRuYW1lLmRlZiInCi0gICAgICAgICAgICAgICAgZXZhbCAnY2F0ICIkZXhwb3J0X3N5bWJvbHMiID4+ICIkb3V0cHV0X29iamRpci8kb3V0cHV0bmFtZS5kZWYiJwotCSAgICAgICAgOzsKLQkgICAgICBlc2FjCi0JICAgIH0KLQkgIGVsc2UKLQkgICAgJG9wdF9kcnlfcnVuIHx8IHsKLQkgICAgICBldmFsICIke1NFRH0gLWUgJ3MvXChbXS5bKl4kXVwpL1xcXFxcMS9nJyAtZSAncy9eLyAvJyAtZSAncy8kLyQvJyInIDwgIiRleHBvcnRfc3ltYm9scyIgPiAiJG91dHB1dF9vYmpkaXIvJG91dHB1dG5hbWUuZXhwIicKLQkgICAgICBldmFsICckR1JFUCAtZiAiJG91dHB1dF9vYmpkaXIvJG91dHB1dG5hbWUuZXhwIiA8ICIkbmxpc3QiID4gIiRubGlzdCJUJwotCSAgICAgIGV2YWwgJyRNViAiJG5saXN0IlQgIiRubGlzdCInCi0JICAgICAgY2FzZSAkaG9zdCBpbgotCSAgICAgICAgKmN5Z3dpbiogfCAqbWluZ3cqIHwgKmNlZ2NjKiApCi0JICAgICAgICAgIGV2YWwgImVjaG8gRVhQT1JUUyAiJz4gIiRvdXRwdXRfb2JqZGlyLyRvdXRwdXRuYW1lLmRlZiInCi0JICAgICAgICAgIGV2YWwgJ2NhdCAiJG5saXN0IiA+PiAiJG91dHB1dF9vYmpkaXIvJG91dHB1dG5hbWUuZGVmIicKLQkgICAgICAgICAgOzsKLQkgICAgICBlc2FjCi0JICAgIH0KLQkgIGZpCi0JZmkKLQotCWZvciBkbHByZWZpbGUgaW4gJGRscHJlZmlsZXM7IGRvCi0JICBmdW5jX3ZlcmJvc2UgImV4dHJhY3RpbmcgZ2xvYmFsIEMgc3ltYm9scyBmcm9tIFxgJGRscHJlZmlsZSciCi0JICBmdW5jX2Jhc2VuYW1lICIkZGxwcmVmaWxlIgotCSAgbmFtZT0iJGZ1bmNfYmFzZW5hbWVfcmVzdWx0IgotICAgICAgICAgIGNhc2UgJGhvc3QgaW4KLQkgICAgKmN5Z3dpbiogfCAqbWluZ3cqIHwgKmNlZ2NjKiApCi0JICAgICAgIyBpZiBhbiBpbXBvcnQgbGlicmFyeSwgd2UgbmVlZCB0byBvYnRhaW4gZGxuYW1lCi0JICAgICAgaWYgZnVuY193aW4zMl9pbXBvcnRfbGliX3AgIiRkbHByZWZpbGUiOyB0aGVuCi0JICAgICAgICBmdW5jX3RyX3NoICIkZGxwcmVmaWxlIgotCSAgICAgICAgZXZhbCAiY3Vycl9sYWZpbGU9XCRsaWJmaWxlXyRmdW5jX3RyX3NoX3Jlc3VsdCIKLQkgICAgICAgIGRscHJlZmlsZV9kbGJhc2VuYW1lPSIiCi0JICAgICAgICBpZiB0ZXN0IC1uICIkY3Vycl9sYWZpbGUiICYmIGZ1bmNfbGFsaWJfcCAiJGN1cnJfbGFmaWxlIjsgdGhlbgotCSAgICAgICAgICAjIFVzZSBzdWJzaGVsbCwgdG8gYXZvaWQgY2xvYmJlcmluZyBjdXJyZW50IHZhcmlhYmxlIHZhbHVlcwotCSAgICAgICAgICBkbHByZWZpbGVfZGxuYW1lPWBzb3VyY2UgIiRjdXJyX2xhZmlsZSIgJiYgZWNobyAiJGRsbmFtZSJgCi0JICAgICAgICAgIGlmIHRlc3QgLW4gIiRkbHByZWZpbGVfZGxuYW1lIiA7IHRoZW4KLQkgICAgICAgICAgICBmdW5jX2Jhc2VuYW1lICIkZGxwcmVmaWxlX2RsbmFtZSIKLQkgICAgICAgICAgICBkbHByZWZpbGVfZGxiYXNlbmFtZT0iJGZ1bmNfYmFzZW5hbWVfcmVzdWx0IgotCSAgICAgICAgICBlbHNlCi0JICAgICAgICAgICAgIyBubyBsYWZpbGUuIHVzZXIgZXhwbGljaXRseSByZXF1ZXN0ZWQgLWRscHJlb3BlbiA8aW1wb3J0IGxpYnJhcnk+LgotCSAgICAgICAgICAgICRzaGFyZWRsaWJfZnJvbV9saW5rbGliX2NtZCAiJGRscHJlZmlsZSIKLQkgICAgICAgICAgICBkbHByZWZpbGVfZGxiYXNlbmFtZT0kc2hhcmVkbGliX2Zyb21fbGlua2xpYl9yZXN1bHQKLQkgICAgICAgICAgZmkKLQkgICAgICAgIGZpCi0JICAgICAgICAkb3B0X2RyeV9ydW4gfHwgewotCSAgICAgICAgICBpZiB0ZXN0IC1uICIkZGxwcmVmaWxlX2RsYmFzZW5hbWUiIDsgdGhlbgotCSAgICAgICAgICAgIGV2YWwgJyRFQ0hPICI6ICRkbHByZWZpbGVfZGxiYXNlbmFtZSIgPj4gIiRubGlzdCInCi0JICAgICAgICAgIGVsc2UKLQkgICAgICAgICAgICBmdW5jX3dhcm5pbmcgIkNvdWxkIG5vdCBjb21wdXRlIERMTCBuYW1lIGZyb20gJG5hbWUiCi0JICAgICAgICAgICAgZXZhbCAnJEVDSE8gIjogJG5hbWUgIiA+PiAiJG5saXN0IicKLQkgICAgICAgICAgZmkKLQkgICAgICAgICAgZnVuY190b190b29sX2ZpbGUgIiRkbHByZWZpbGUiIGZ1bmNfY29udmVydF9maWxlX21zeXNfdG9fdzMyCi0JICAgICAgICAgIGV2YWwgIiROTSBcIiRmdW5jX3RvX3Rvb2xfZmlsZV9yZXN1bHRcIiAyPi9kZXYvbnVsbCB8ICRnbG9iYWxfc3ltYm9sX3BpcGUgfAotCSAgICAgICAgICAgICRTRUQgLWUgJy9JIF9faW1wL2QnIC1lICdzL0kgX19ubV8vRCAvO3MvX25tX18vLycgPj4gJyRubGlzdCciCi0JICAgICAgICB9Ci0JICAgICAgZWxzZSAjIG5vdCBhbiBpbXBvcnQgbGliCi0JICAgICAgICAkb3B0X2RyeV9ydW4gfHwgewotCSAgICAgICAgICBldmFsICckRUNITyAiOiAkbmFtZSAiID4+ICIkbmxpc3QiJwotCSAgICAgICAgICBmdW5jX3RvX3Rvb2xfZmlsZSAiJGRscHJlZmlsZSIgZnVuY19jb252ZXJ0X2ZpbGVfbXN5c190b193MzIKLQkgICAgICAgICAgZXZhbCAiJE5NIFwiJGZ1bmNfdG9fdG9vbF9maWxlX3Jlc3VsdFwiIDI+L2Rldi9udWxsIHwgJGdsb2JhbF9zeW1ib2xfcGlwZSA+PiAnJG5saXN0JyIKLQkgICAgICAgIH0KLQkgICAgICBmaQotCSAgICA7OwotCSAgICAqKQotCSAgICAgICRvcHRfZHJ5X3J1biB8fCB7Ci0JICAgICAgICBldmFsICckRUNITyAiOiAkbmFtZSAiID4+ICIkbmxpc3QiJwotCSAgICAgICAgZnVuY190b190b29sX2ZpbGUgIiRkbHByZWZpbGUiIGZ1bmNfY29udmVydF9maWxlX21zeXNfdG9fdzMyCi0JICAgICAgICBldmFsICIkTk0gXCIkZnVuY190b190b29sX2ZpbGVfcmVzdWx0XCIgMj4vZGV2L251bGwgfCAkZ2xvYmFsX3N5bWJvbF9waXBlID4+ICckbmxpc3QnIgotCSAgICAgIH0KLQkgICAgOzsKLSAgICAgICAgICBlc2FjCi0JZG9uZQotCi0JJG9wdF9kcnlfcnVuIHx8IHsKLQkgICMgTWFrZSBzdXJlIHdlIGhhdmUgYXQgbGVhc3QgYW4gZW1wdHkgZmlsZS4KLQkgIHRlc3QgLWYgIiRubGlzdCIgfHwgOiA+ICIkbmxpc3QiCi0KLQkgIGlmIHRlc3QgLW4gIiRleGNsdWRlX2V4cHN5bXMiOyB0aGVuCi0JICAgICRFR1JFUCAtdiAiICgkZXhjbHVkZV9leHBzeW1zKSQiICIkbmxpc3QiID4gIiRubGlzdCJUCi0JICAgICRNViAiJG5saXN0IlQgIiRubGlzdCIKLQkgIGZpCi0KLQkgICMgVHJ5IHNvcnRpbmcgYW5kIHVuaXF1aWZ5aW5nIHRoZSBvdXRwdXQuCi0JICBpZiAkR1JFUCAtdiAiXjogIiA8ICIkbmxpc3QiIHwKLQkgICAgICBpZiBzb3J0IC1rIDMgPC9kZXYvbnVsbCA+L2Rldi9udWxsIDI+JjE7IHRoZW4KLQkJc29ydCAtayAzCi0JICAgICAgZWxzZQotCQlzb3J0ICsyCi0JICAgICAgZmkgfAotCSAgICAgIHVuaXEgPiAiJG5saXN0IlM7IHRoZW4KLQkgICAgOgotCSAgZWxzZQotCSAgICAkR1JFUCAtdiAiXjogIiA8ICIkbmxpc3QiID4gIiRubGlzdCJTCi0JICBmaQotCi0JICBpZiB0ZXN0IC1mICIkbmxpc3QiUzsgdGhlbgotCSAgICBldmFsICIkZ2xvYmFsX3N5bWJvbF90b19jZGVjbCInIDwgIiRubGlzdCJTID4+ICIkb3V0cHV0X29iamRpci8kbXlfZGxzeW1zIicKLQkgIGVsc2UKLQkgICAgZWNobyAnLyogTk9ORSAqLycgPj4gIiRvdXRwdXRfb2JqZGlyLyRteV9kbHN5bXMiCi0JICBmaQotCi0JICBlY2hvID4+ICIkb3V0cHV0X29iamRpci8kbXlfZGxzeW1zIiAiXAotCi0vKiBUaGUgbWFwcGluZyBiZXR3ZWVuIHN5bWJvbCBuYW1lcyBhbmQgc3ltYm9scy4gICovCi10eXBlZGVmIHN0cnVjdCB7Ci0gIGNvbnN0IGNoYXIgKm5hbWU7Ci0gIHZvaWQgKmFkZHJlc3M7Ci19IGx0X2Rsc3ltbGlzdDsKLWV4dGVybiBMVF9ETFNZTV9DT05TVCBsdF9kbHN5bWxpc3QKLWx0XyR7bXlfcHJlZml4fV9MVFhfcHJlbG9hZGVkX3N5bWJvbHNbXTsKLUxUX0RMU1lNX0NPTlNUIGx0X2Rsc3ltbGlzdAotbHRfJHtteV9wcmVmaXh9X0xUWF9wcmVsb2FkZWRfc3ltYm9sc1tdID0KLXtcCi0gIHsgXCIkbXlfb3JpZ2luYXRvclwiLCAodm9pZCAqKSAwIH0sIgotCi0JICBjYXNlICRuZWVkX2xpYl9wcmVmaXggaW4KLQkgIG5vKQotCSAgICBldmFsICIkZ2xvYmFsX3N5bWJvbF90b19jX25hbWVfYWRkcmVzcyIgPCAiJG5saXN0IiA+PiAiJG91dHB1dF9vYmpkaXIvJG15X2Rsc3ltcyIKLQkgICAgOzsKLQkgICopCi0JICAgIGV2YWwgIiRnbG9iYWxfc3ltYm9sX3RvX2NfbmFtZV9hZGRyZXNzX2xpYl9wcmVmaXgiIDwgIiRubGlzdCIgPj4gIiRvdXRwdXRfb2JqZGlyLyRteV9kbHN5bXMiCi0JICAgIDs7Ci0JICBlc2FjCi0JICBlY2hvID4+ICIkb3V0cHV0X29iamRpci8kbXlfZGxzeW1zIiAiXAotICB7MCwgKHZvaWQgKikgMH0KLX07Ci0KLS8qIFRoaXMgd29ya3MgYXJvdW5kIGEgcHJvYmxlbSBpbiBGcmVlQlNEIGxpbmtlciAqLwotI2lmZGVmIEZSRUVCU0RfV09SS0FST1VORAotc3RhdGljIGNvbnN0IHZvaWQgKmx0X3ByZWxvYWRlZF9zZXR1cCgpIHsKLSAgcmV0dXJuIGx0XyR7bXlfcHJlZml4fV9MVFhfcHJlbG9hZGVkX3N5bWJvbHM7Ci19Ci0jZW5kaWYKLQotI2lmZGVmIF9fY3BsdXNwbHVzCi19Ci0jZW5kaWZcCi0iCi0JfSAjICEkb3B0X2RyeV9ydW4KLQotCXBpY19mbGFnX2Zvcl9zeW10YWJsZT0KLQljYXNlICIkY29tcGlsZV9jb21tYW5kICIgaW4KLQkqIiAtc3RhdGljICIqKSA7OwotCSopCi0JICBjYXNlICRob3N0IGluCi0JICAjIGNvbXBpbGluZyB0aGUgc3ltYm9sIHRhYmxlIGZpbGUgd2l0aCBwaWNfZmxhZyB3b3JrcyBhcm91bmQKLQkgICMgYSBGcmVlQlNEIGJ1ZyB0aGF0IGNhdXNlcyBwcm9ncmFtcyB0byBjcmFzaCB3aGVuIC1sbSBpcwotCSAgIyBsaW5rZWQgYmVmb3JlIGFueSBvdGhlciBQSUMgb2JqZWN0LiAgQnV0IHdlIG11c3Qgbm90IHVzZQotCSAgIyBwaWNfZmxhZyB3aGVuIGxpbmtpbmcgd2l0aCAtc3RhdGljLiAgVGhlIHByb2JsZW0gZXhpc3RzIGluCi0JICAjIEZyZWVCU0QgMi4yLjYgYW5kIGlzIGZpeGVkIGluIEZyZWVCU0QgMy4xLgotCSAgKi0qLWZyZWVic2QyKnwqLSotZnJlZWJzZDMuMCp8Ki0qLWZyZWVic2RlbGYzLjAqKQotCSAgICBwaWNfZmxhZ19mb3Jfc3ltdGFibGU9IiAkcGljX2ZsYWcgLURGUkVFQlNEX1dPUktBUk9VTkQiIDs7Ci0JICAqLSotaHB1eCopCi0JICAgIHBpY19mbGFnX2Zvcl9zeW10YWJsZT0iICRwaWNfZmxhZyIgIDs7Ci0JICAqKQotCSAgICBpZiB0ZXN0ICJYJG15X3BpY19wIiAhPSBYbm87IHRoZW4KLQkgICAgICBwaWNfZmxhZ19mb3Jfc3ltdGFibGU9IiAkcGljX2ZsYWciCi0JICAgIGZpCi0JICAgIDs7Ci0JICBlc2FjCi0JICA7OwotCWVzYWMKLQlzeW10YWJfY2ZsYWdzPQotCWZvciBhcmcgaW4gJExUQ0ZMQUdTOyBkbwotCSAgY2FzZSAkYXJnIGluCi0JICAtcGllIHwgLWZwaWUgfCAtZlBJRSkgOzsKLQkgICopIGZ1bmNfYXBwZW5kIHN5bXRhYl9jZmxhZ3MgIiAkYXJnIiA7OwotCSAgZXNhYwotCWRvbmUKLQotCSMgTm93IGNvbXBpbGUgdGhlIGR5bmFtaWMgc3ltYm9sIGZpbGUuCi0JZnVuY19zaG93X2V2YWwgJyhjZCAkb3V0cHV0X29iamRpciAmJiAkTFRDQyRzeW10YWJfY2ZsYWdzIC1jJG5vX2J1aWx0aW5fZmxhZyRwaWNfZmxhZ19mb3Jfc3ltdGFibGUgIiRteV9kbHN5bXMiKScgJ2V4aXQgJD8nCi0KLQkjIENsZWFuIHVwIHRoZSBnZW5lcmF0ZWQgZmlsZXMuCi0JZnVuY19zaG93X2V2YWwgJyRSTSAiJG91dHB1dF9vYmpkaXIvJG15X2Rsc3ltcyIgIiRubGlzdCIgIiR7bmxpc3R9UyIgIiR7bmxpc3R9VCInCi0KLQkjIFRyYW5zZm9ybSB0aGUgc3ltYm9sIGZpbGUgaW50byB0aGUgY29ycmVjdCBuYW1lLgotCXN5bWZpbGVvYmo9IiRvdXRwdXRfb2JqZGlyLyR7bXlfb3V0cHV0bmFtZX1TLiRvYmpleHQiCi0JY2FzZSAkaG9zdCBpbgotCSpjeWd3aW4qIHwgKm1pbmd3KiB8ICpjZWdjYyogKQotCSAgaWYgdGVzdCAtZiAiJG91dHB1dF9vYmpkaXIvJG15X291dHB1dG5hbWUuZGVmIjsgdGhlbgotCSAgICBjb21waWxlX2NvbW1hbmQ9YCRFQ0hPICIkY29tcGlsZV9jb21tYW5kIiB8ICRTRUQgInMlQFNZTUZJTEVAJSRvdXRwdXRfb2JqZGlyLyRteV9vdXRwdXRuYW1lLmRlZiAkc3ltZmlsZW9iaiUiYAotCSAgICBmaW5hbGl6ZV9jb21tYW5kPWAkRUNITyAiJGZpbmFsaXplX2NvbW1hbmQiIHwgJFNFRCAicyVAU1lNRklMRUAlJG91dHB1dF9vYmpkaXIvJG15X291dHB1dG5hbWUuZGVmICRzeW1maWxlb2JqJSJgCi0JICBlbHNlCi0JICAgIGNvbXBpbGVfY29tbWFuZD1gJEVDSE8gIiRjb21waWxlX2NvbW1hbmQiIHwgJFNFRCAicyVAU1lNRklMRUAlJHN5bWZpbGVvYmolImAKLQkgICAgZmluYWxpemVfY29tbWFuZD1gJEVDSE8gIiRmaW5hbGl6ZV9jb21tYW5kIiB8ICRTRUQgInMlQFNZTUZJTEVAJSRzeW1maWxlb2JqJSJgCi0JICBmaQotCSAgOzsKLQkqKQotCSAgY29tcGlsZV9jb21tYW5kPWAkRUNITyAiJGNvbXBpbGVfY29tbWFuZCIgfCAkU0VEICJzJUBTWU1GSUxFQCUkc3ltZmlsZW9iaiUiYAotCSAgZmluYWxpemVfY29tbWFuZD1gJEVDSE8gIiRmaW5hbGl6ZV9jb21tYW5kIiB8ICRTRUQgInMlQFNZTUZJTEVAJSRzeW1maWxlb2JqJSJgCi0JICA7OwotCWVzYWMKLQk7OwotICAgICAgKikKLQlmdW5jX2ZhdGFsX2Vycm9yICJ1bmtub3duIHN1ZmZpeCBmb3IgXGAkbXlfZGxzeW1zJyIKLQk7OwotICAgICAgZXNhYwotICAgIGVsc2UKLSAgICAgICMgV2Uga2VlcCBnb2luZyBqdXN0IGluIGNhc2UgdGhlIHVzZXIgZGlkbid0IHJlZmVyIHRvCi0gICAgICAjIGx0X3ByZWxvYWRlZF9zeW1ib2xzLiAgVGhlIGxpbmtlciB3aWxsIGZhaWwgaWYgZ2xvYmFsX3N5bWJvbF9waXBlCi0gICAgICAjIHJlYWxseSB3YXMgcmVxdWlyZWQuCi0KLSAgICAgICMgTnVsbGlmeSB0aGUgc3ltYm9sIGZpbGUuCi0gICAgICBjb21waWxlX2NvbW1hbmQ9YCRFQ0hPICIkY29tcGlsZV9jb21tYW5kIiB8ICRTRUQgInMlIEBTWU1GSUxFQCUlImAKLSAgICAgIGZpbmFsaXplX2NvbW1hbmQ9YCRFQ0hPICIkZmluYWxpemVfY29tbWFuZCIgfCAkU0VEICJzJSBAU1lNRklMRUAlJSJgCi0gICAgZmkKLX0KLQotIyBmdW5jX3dpbjMyX2xpYmlkIGFyZwotIyByZXR1cm4gdGhlIGxpYnJhcnkgdHlwZSBvZiBmaWxlICdhcmcnCi0jCi0jIE5lZWQgYSBsb3Qgb2YgZ29vIHRvIGhhbmRsZSAqYm90aCogRExMcyBhbmQgaW1wb3J0IGxpYnMKLSMgSGFzIHRvIGJlIGEgc2hlbGwgZnVuY3Rpb24gaW4gb3JkZXIgdG8gJ2VhdCcgdGhlIGFyZ3VtZW50Ci0jIHRoYXQgaXMgc3VwcGxpZWQgd2hlbiAkZmlsZV9tYWdpY19jb21tYW5kIGlzIGNhbGxlZC4KLSMgRGVzcGl0ZSB0aGUgbmFtZSwgYWxzbyBkZWFsIHdpdGggNjQgYml0IGJpbmFyaWVzLgotZnVuY193aW4zMl9saWJpZCAoKQotewotICAkb3B0X2RlYnVnCi0gIHdpbjMyX2xpYmlkX3R5cGU9InVua25vd24iCi0gIHdpbjMyX2ZpbGVyZXM9YGZpbGUgLUwgJDEgMj4vZGV2L251bGxgCi0gIGNhc2UgJHdpbjMyX2ZpbGVyZXMgaW4KLSAgKmFyXCBhcmNoaXZlXCBpbXBvcnRcIGxpYnJhcnkqKSAjIGRlZmluaXRlbHkgaW1wb3J0Ci0gICAgd2luMzJfbGliaWRfdHlwZT0ieDg2IGFyY2hpdmUgaW1wb3J0IgotICAgIDs7Ci0gICphclwgYXJjaGl2ZSopICMgY291bGQgYmUgYW4gaW1wb3J0LCBvciBzdGF0aWMKLSAgICAjIEtlZXAgdGhlIGVncmVwIHBhdHRlcm4gaW4gc3luYyB3aXRoIHRoZSBvbmUgaW4gX0xUX0NIRUNLX01BR0lDX01FVEhPRC4KLSAgICBpZiBldmFsICRPQkpEVU1QIC1mICQxIHwgJFNFRCAtZSAnMTBxJyAyPi9kZXYvbnVsbCB8Ci0gICAgICAgJEVHUkVQICdmaWxlIGZvcm1hdCAocGVpKi1pMzg2KC4qYXJjaGl0ZWN0dXJlOiBpMzg2KT98cGUtYXJtLXdpbmNlfHBlLXg4Ni02NCknID4vZGV2L251bGw7IHRoZW4KLSAgICAgIGZ1bmNfdG9fdG9vbF9maWxlICIkMSIgZnVuY19jb252ZXJ0X2ZpbGVfbXN5c190b193MzIKLSAgICAgIHdpbjMyX25tcmVzPWBldmFsICROTSAtZiBwb3NpeCAtQSBcIiRmdW5jX3RvX3Rvb2xfZmlsZV9yZXN1bHRcIiB8Ci0JJFNFRCAtbiAtZSAnCi0JICAgIDEsMTAwewotCQkvIEkgL3sKLQkJICAgIHMsLiosaW1wb3J0LAotCQkgICAgcAotCQkgICAgcQotCQl9Ci0JICAgIH0nYAotICAgICAgY2FzZSAkd2luMzJfbm1yZXMgaW4KLSAgICAgIGltcG9ydCopICB3aW4zMl9saWJpZF90eXBlPSJ4ODYgYXJjaGl2ZSBpbXBvcnQiOzsKLSAgICAgICopICAgICAgICB3aW4zMl9saWJpZF90eXBlPSJ4ODYgYXJjaGl2ZSBzdGF0aWMiOzsKLSAgICAgIGVzYWMKLSAgICBmaQotICAgIDs7Ci0gICpETEwqKQotICAgIHdpbjMyX2xpYmlkX3R5cGU9Ing4NiBETEwiCi0gICAgOzsKLSAgKmV4ZWN1dGFibGUqKSAjIGJ1dCBzaGVsbCBzY3JpcHRzIGFyZSAiZXhlY3V0YWJsZSIgdG9vLi4uCi0gICAgY2FzZSAkd2luMzJfZmlsZXJlcyBpbgotICAgICpNU1wgV2luZG93c1wgUEVcIEludGVsKikKLSAgICAgIHdpbjMyX2xpYmlkX3R5cGU9Ing4NiBETEwiCi0gICAgICA7OwotICAgIGVzYWMKLSAgICA7OwotICBlc2FjCi0gICRFQ0hPICIkd2luMzJfbGliaWRfdHlwZSIKLX0KLQotIyBmdW5jX2N5Z21pbmdfZGxsX2Zvcl9pbXBsaWIgQVJHCi0jCi0jIFBsYXRmb3JtLXNwZWNpZmljIGZ1bmN0aW9uIHRvIGV4dHJhY3QgdGhlCi0jIG5hbWUgb2YgdGhlIERMTCBhc3NvY2lhdGVkIHdpdGggdGhlIHNwZWNpZmllZAotIyBpbXBvcnQgbGlicmFyeSBBUkcuCi0jIEludm9rZWQgYnkgZXZhbCdpbmcgdGhlIGxpYnRvb2wgdmFyaWFibGUKLSMgICAgJHNoYXJlZGxpYl9mcm9tX2xpbmtsaWJfY21kCi0jIFJlc3VsdCBpcyBhdmFpbGFibGUgaW4gdGhlIHZhcmlhYmxlCi0jICAgICRzaGFyZWRsaWJfZnJvbV9saW5rbGliX3Jlc3VsdAotZnVuY19jeWdtaW5nX2RsbF9mb3JfaW1wbGliICgpCi17Ci0gICRvcHRfZGVidWcKLSAgc2hhcmVkbGliX2Zyb21fbGlua2xpYl9yZXN1bHQ9YCRETExUT09MIC0taWRlbnRpZnktc3RyaWN0IC0taWRlbnRpZnkgIiQxImAKLX0KLQotIyBmdW5jX2N5Z21pbmdfZGxsX2Zvcl9pbXBsaWJfZmFsbGJhY2tfY29yZSBTRUNUSU9OX05BTUUgTElCTkFNRXMKLSMKLSMgVGhlIGlzIHRoZSBjb3JlIG9mIGEgZmFsbGJhY2sgaW1wbGVtZW50YXRpb24gb2YgYQotIyBwbGF0Zm9ybS1zcGVjaWZpYyBmdW5jdGlvbiB0byBleHRyYWN0IHRoZSBuYW1lIG9mIHRoZQotIyBETEwgYXNzb2NpYXRlZCB3aXRoIHRoZSBzcGVjaWZpZWQgaW1wb3J0IGxpYnJhcnkgTElCTkFNRS4KLSMKLSMgU0VDVElPTl9OQU1FIGlzIGVpdGhlciAuaWRhdGEkNiBvciAuaWRhdGEkNywgZGVwZW5kaW5nCi0jIG9uIHRoZSBwbGF0Zm9ybSBhbmQgY29tcGlsZXIgdGhhdCBjcmVhdGVkIHRoZSBpbXBsaWIuCi0jCi0jIEVjaG9zIHRoZSBuYW1lIG9mIHRoZSBETEwgYXNzb2NpYXRlZCB3aXRoIHRoZQotIyBzcGVjaWZpZWQgaW1wb3J0IGxpYnJhcnkuCi1mdW5jX2N5Z21pbmdfZGxsX2Zvcl9pbXBsaWJfZmFsbGJhY2tfY29yZSAoKQotewotICAkb3B0X2RlYnVnCi0gIG1hdGNoX2xpdGVyYWw9YCRFQ0hPICIkMSIgfCAkU0VEICIkc2VkX21ha2VfbGl0ZXJhbF9yZWdleCJgCi0gICRPQkpEVU1QIC1zIC0tc2VjdGlvbiAiJDEiICIkMiIgMj4vZGV2L251bGwgfAotICAgICRTRUQgJy9eQ29udGVudHMgb2Ygc2VjdGlvbiAnIiRtYXRjaF9saXRlcmFsIic6L3sKLSAgICAgICMgUGxhY2UgbWFya2VyIGF0IGJlZ2lubmluZyBvZiBhcmNoaXZlIG1lbWJlciBkbGxuYW1lIHNlY3Rpb24KLSAgICAgIHMvLiovPT09PU1BUks9PT09LwotICAgICAgcAotICAgICAgZAotICAgIH0KLSAgICAjIFRoZXNlIGxpbmVzIGNhbiBzb21ldGltZXMgYmUgbG9uZ2VyIHRoYW4gNDMgY2hhcmFjdGVycywgYnV0Ci0gICAgIyBhcmUgYWx3YXlzIHVuaW50ZXJlc3RpbmcKLSAgICAvOlsJIF0qZmlsZSBmb3JtYXQgcGVbaV1ceywxXH0tL2QKLSAgICAvXkluIGFyY2hpdmUgW146XSo6L2QKLSAgICAjIEVuc3VyZSBtYXJrZXIgaXMgcHJpbnRlZAotICAgIC9ePT09PU1BUks9PT09L3AKLSAgICAjIFJlbW92ZSBhbGwgbGluZXMgd2l0aCBsZXNzIHRoYW4gNDMgY2hhcmFjdGVycwotICAgIC9eLlx7NDNcfS8hZAotICAgICMgRnJvbSByZW1haW5pbmcgbGluZXMsIHJlbW92ZSBmaXJzdCA0MyBjaGFyYWN0ZXJzCi0gICAgcy9eLlx7NDNcfS8vJyB8Ci0gICAgJFNFRCAtbiAnCi0gICAgICAjIEpvaW4gbWFya2VyIGFuZCBhbGwgbGluZXMgdW50aWwgbmV4dCBtYXJrZXIgaW50byBhIHNpbmdsZSBsaW5lCi0gICAgICAvXj09PT1NQVJLPT09PS8gYiBwYXJhCi0gICAgICBICi0gICAgICAkIGIgcGFyYQotICAgICAgYgotICAgICAgOnBhcmEKLSAgICAgIHgKLSAgICAgIHMvXG4vL2cKLSAgICAgICMgUmVtb3ZlIHRoZSBtYXJrZXIKLSAgICAgIHMvXj09PT1NQVJLPT09PS8vCi0gICAgICAjIFJlbW92ZSB0cmFpbGluZyBkb3RzIGFuZCB3aGl0ZXNwYWNlCi0gICAgICBzL1tcLiBcdF0qJC8vCi0gICAgICAjIFByaW50Ci0gICAgICAvLi9wJyB8Ci0gICAgIyB3ZSBub3cgaGF2ZSBhIGxpc3QsIG9uZSBlbnRyeSBwZXIgbGluZSwgb2YgdGhlIHN0cmluZ2lmaWVkCi0gICAgIyBjb250ZW50cyBvZiB0aGUgYXBwcm9wcmlhdGUgc2VjdGlvbiBvZiBhbGwgbWVtYmVycyBvZiB0aGUKLSAgICAjIGFyY2hpdmUgd2hpY2ggcG9zc2VzcyB0aGF0IHNlY3Rpb24uIEhldXJpc3RpYzogZWxpbWluYXRlCi0gICAgIyBhbGwgdGhvc2Ugd2hpY2ggaGF2ZSBhIGZpcnN0IG9yIHNlY29uZCBjaGFyYWN0ZXIgdGhhdCBpcwotICAgICMgYSAnLicgKHRoYXQgaXMsIG9iamR1bXAncyByZXByZXNlbnRhdGlvbiBvZiBhbiB1bnByaW50YWJsZQotICAgICMgY2hhcmFjdGVyLikgVGhpcyBzaG91bGQgd29yayBmb3IgYWxsIGFyY2hpdmVzIHdpdGggbGVzcyB0aGFuCi0gICAgIyAweDMwMmYgZXhwb3J0cyAtLSBidXQgd2lsbCBmYWlsIGZvciBETExzIHdob3NlIG5hbWUgYWN0dWFsbHkKLSAgICAjIGJlZ2lucyB3aXRoIGEgbGl0ZXJhbCAnLicgb3IgYSBzaW5nbGUgY2hhcmFjdGVyIGZvbGxvd2VkIGJ5Ci0gICAgIyBhICcuJy4KLSAgICAjCi0gICAgIyBPZiB0aG9zZSB0aGF0IHJlbWFpbiwgcHJpbnQgdGhlIGZpcnN0IG9uZS4KLSAgICAkU0VEIC1lICcvXlwuL2Q7L14uXC4vZDtxJwotfQotCi0jIGZ1bmNfY3lnbWluZ19nbnVfaW1wbGliX3AgQVJHCi0jIFRoaXMgcHJlZGljYXRlIHJldHVybnMgd2l0aCB6ZXJvIHN0YXR1cyAoVFJVRSkgaWYKLSMgQVJHIGlzIGEgR05VL2JpbnV0aWxzLXN0eWxlIGltcG9ydCBsaWJyYXJ5LiBSZXR1cm5zCi0jIHdpdGggbm9uemVybyBzdGF0dXMgKEZBTFNFKSBvdGhlcndpc2UuCi1mdW5jX2N5Z21pbmdfZ251X2ltcGxpYl9wICgpCi17Ci0gICRvcHRfZGVidWcKLSAgZnVuY190b190b29sX2ZpbGUgIiQxIiBmdW5jX2NvbnZlcnRfZmlsZV9tc3lzX3RvX3czMgotICBmdW5jX2N5Z21pbmdfZ251X2ltcGxpYl90bXA9YCROTSAiJGZ1bmNfdG9fdG9vbF9maWxlX3Jlc3VsdCIgfCBldmFsICIkZ2xvYmFsX3N5bWJvbF9waXBlIiB8ICRFR1JFUCAnIChfaGVhZF9bQS1aYS16MC05X10rX1thZF1sKnxbQS1aYS16MC05X10rX1thZF1sKl9pbmFtZSkkJ2AKLSAgdGVzdCAtbiAiJGZ1bmNfY3lnbWluZ19nbnVfaW1wbGliX3RtcCIKLX0KLQotIyBmdW5jX2N5Z21pbmdfbXNfaW1wbGliX3AgQVJHCi0jIFRoaXMgcHJlZGljYXRlIHJldHVybnMgd2l0aCB6ZXJvIHN0YXR1cyAoVFJVRSkgaWYKLSMgQVJHIGlzIGFuIE1TLXN0eWxlIGltcG9ydCBsaWJyYXJ5LiBSZXR1cm5zCi0jIHdpdGggbm9uemVybyBzdGF0dXMgKEZBTFNFKSBvdGhlcndpc2UuCi1mdW5jX2N5Z21pbmdfbXNfaW1wbGliX3AgKCkKLXsKLSAgJG9wdF9kZWJ1ZwotICBmdW5jX3RvX3Rvb2xfZmlsZSAiJDEiIGZ1bmNfY29udmVydF9maWxlX21zeXNfdG9fdzMyCi0gIGZ1bmNfY3lnbWluZ19tc19pbXBsaWJfdG1wPWAkTk0gIiRmdW5jX3RvX3Rvb2xfZmlsZV9yZXN1bHQiIHwgZXZhbCAiJGdsb2JhbF9zeW1ib2xfcGlwZSIgfCAkR1JFUCAnX05VTExfSU1QT1JUX0RFU0NSSVBUT1InYAotICB0ZXN0IC1uICIkZnVuY19jeWdtaW5nX21zX2ltcGxpYl90bXAiCi19Ci0KLSMgZnVuY19jeWdtaW5nX2RsbF9mb3JfaW1wbGliX2ZhbGxiYWNrIEFSRwotIyBQbGF0Zm9ybS1zcGVjaWZpYyBmdW5jdGlvbiB0byBleHRyYWN0IHRoZQotIyBuYW1lIG9mIHRoZSBETEwgYXNzb2NpYXRlZCB3aXRoIHRoZSBzcGVjaWZpZWQKLSMgaW1wb3J0IGxpYnJhcnkgQVJHLgotIwotIyBUaGlzIGZhbGxiYWNrIGltcGxlbWVudGF0aW9uIGlzIGZvciB1c2Ugd2hlbiAkRExMVE9PTAotIyBkb2VzIG5vdCBzdXBwb3J0IHRoZSAtLWlkZW50aWZ5LXN0cmljdCBvcHRpb24uCi0jIEludm9rZWQgYnkgZXZhbCdpbmcgdGhlIGxpYnRvb2wgdmFyaWFibGUKLSMgICAgJHNoYXJlZGxpYl9mcm9tX2xpbmtsaWJfY21kCi0jIFJlc3VsdCBpcyBhdmFpbGFibGUgaW4gdGhlIHZhcmlhYmxlCi0jICAgICRzaGFyZWRsaWJfZnJvbV9saW5rbGliX3Jlc3VsdAotZnVuY19jeWdtaW5nX2RsbF9mb3JfaW1wbGliX2ZhbGxiYWNrICgpCi17Ci0gICRvcHRfZGVidWcKLSAgaWYgZnVuY19jeWdtaW5nX2dudV9pbXBsaWJfcCAiJDEiIDsgdGhlbgotICAgICMgYmludXRpbHMgaW1wb3J0IGxpYnJhcnkKLSAgICBzaGFyZWRsaWJfZnJvbV9saW5rbGliX3Jlc3VsdD1gZnVuY19jeWdtaW5nX2RsbF9mb3JfaW1wbGliX2ZhbGxiYWNrX2NvcmUgJy5pZGF0YSQ3JyAiJDEiYAotICBlbGlmIGZ1bmNfY3lnbWluZ19tc19pbXBsaWJfcCAiJDEiIDsgdGhlbgotICAgICMgbXMtZ2VuZXJhdGVkIGltcG9ydCBsaWJyYXJ5Ci0gICAgc2hhcmVkbGliX2Zyb21fbGlua2xpYl9yZXN1bHQ9YGZ1bmNfY3lnbWluZ19kbGxfZm9yX2ltcGxpYl9mYWxsYmFja19jb3JlICcuaWRhdGEkNicgIiQxImAKLSAgZWxzZQotICAgICMgdW5rbm93bgotICAgIHNoYXJlZGxpYl9mcm9tX2xpbmtsaWJfcmVzdWx0PSIiCi0gIGZpCi19Ci0KLQotIyBmdW5jX2V4dHJhY3RfYW5fYXJjaGl2ZSBkaXIgb2xkbGliCi1mdW5jX2V4dHJhY3RfYW5fYXJjaGl2ZSAoKQotewotICAgICRvcHRfZGVidWcKLSAgICBmX2V4X2FuX2FyX2Rpcj0iJDEiOyBzaGlmdAotICAgIGZfZXhfYW5fYXJfb2xkbGliPSIkMSIKLSAgICBpZiB0ZXN0ICIkbG9ja19vbGRfYXJjaGl2ZV9leHRyYWN0aW9uIiA9IHllczsgdGhlbgotICAgICAgbG9ja2ZpbGU9JGZfZXhfYW5fYXJfb2xkbGliLmxvY2sKLSAgICAgIHVudGlsICRvcHRfZHJ5X3J1biB8fCBsbiAiJHByb2dwYXRoIiAiJGxvY2tmaWxlIiAyPi9kZXYvbnVsbDsgZG8KLQlmdW5jX2VjaG8gIldhaXRpbmcgZm9yICRsb2NrZmlsZSB0byBiZSByZW1vdmVkIgotCXNsZWVwIDIKLSAgICAgIGRvbmUKLSAgICBmaQotICAgIGZ1bmNfc2hvd19ldmFsICIoY2QgXCRmX2V4X2FuX2FyX2RpciAmJiAkQVIgeCBcIlwkZl9leF9hbl9hcl9vbGRsaWJcIikiIFwKLQkJICAgJ3N0YXQ9JD87IHJtIC1mICIkbG9ja2ZpbGUiOyBleGl0ICRzdGF0JwotICAgIGlmIHRlc3QgIiRsb2NrX29sZF9hcmNoaXZlX2V4dHJhY3Rpb24iID0geWVzOyB0aGVuCi0gICAgICAkb3B0X2RyeV9ydW4gfHwgcm0gLWYgIiRsb2NrZmlsZSIKLSAgICBmaQotICAgIGlmICgkQVIgdCAiJGZfZXhfYW5fYXJfb2xkbGliIiB8IHNvcnQgfCBzb3J0IC11YyA+L2Rldi9udWxsIDI+JjEpOyB0aGVuCi0gICAgIDoKLSAgICBlbHNlCi0gICAgICBmdW5jX2ZhdGFsX2Vycm9yICJvYmplY3QgbmFtZSBjb25mbGljdHMgaW4gYXJjaGl2ZTogJGZfZXhfYW5fYXJfZGlyLyRmX2V4X2FuX2FyX29sZGxpYiIKLSAgICBmaQotfQotCi0KLSMgZnVuY19leHRyYWN0X2FyY2hpdmVzIGdlbnRvcCBvbGRsaWIgLi4uCi1mdW5jX2V4dHJhY3RfYXJjaGl2ZXMgKCkKLXsKLSAgICAkb3B0X2RlYnVnCi0gICAgbXlfZ2VudG9wPSIkMSI7IHNoaWZ0Ci0gICAgbXlfb2xkbGlicz0kezErIiRAIn0KLSAgICBteV9vbGRvYmpzPSIiCi0gICAgbXlfeGxpYj0iIgotICAgIG15X3hhYnM9IiIKLSAgICBteV94ZGlyPSIiCi0KLSAgICBmb3IgbXlfeGxpYiBpbiAkbXlfb2xkbGliczsgZG8KLSAgICAgICMgRXh0cmFjdCB0aGUgb2JqZWN0cy4KLSAgICAgIGNhc2UgJG15X3hsaWIgaW4KLQlbXFwvXSogfCBbQS1aYS16XTpbXFwvXSopIG15X3hhYnM9IiRteV94bGliIiA7OwotCSopIG15X3hhYnM9YHB3ZGAiLyRteV94bGliIiA7OwotICAgICAgZXNhYwotICAgICAgZnVuY19iYXNlbmFtZSAiJG15X3hsaWIiCi0gICAgICBteV94bGliPSIkZnVuY19iYXNlbmFtZV9yZXN1bHQiCi0gICAgICBteV94bGliX3U9JG15X3hsaWIKLSAgICAgIHdoaWxlIDo7IGRvCi0gICAgICAgIGNhc2UgIiAkZXh0cmFjdGVkX2FyY2hpdmVzICIgaW4KLQkqIiAkbXlfeGxpYl91ICIqKQotCSAgZnVuY19hcml0aCAkZXh0cmFjdGVkX3NlcmlhbCArIDEKLQkgIGV4dHJhY3RlZF9zZXJpYWw9JGZ1bmNfYXJpdGhfcmVzdWx0Ci0JICBteV94bGliX3U9bHQkZXh0cmFjdGVkX3NlcmlhbC0kbXlfeGxpYiA7OwotCSopIGJyZWFrIDs7Ci0JZXNhYwotICAgICAgZG9uZQotICAgICAgZXh0cmFjdGVkX2FyY2hpdmVzPSIkZXh0cmFjdGVkX2FyY2hpdmVzICRteV94bGliX3UiCi0gICAgICBteV94ZGlyPSIkbXlfZ2VudG9wLyRteV94bGliX3UiCi0KLSAgICAgIGZ1bmNfbWtkaXJfcCAiJG15X3hkaXIiCi0KLSAgICAgIGNhc2UgJGhvc3QgaW4KLSAgICAgICotZGFyd2luKikKLQlmdW5jX3ZlcmJvc2UgIkV4dHJhY3RpbmcgJG15X3hhYnMiCi0JIyBEbyBub3QgYm90aGVyIGRvaW5nIGFueXRoaW5nIGlmIGp1c3QgYSBkcnkgcnVuCi0JJG9wdF9kcnlfcnVuIHx8IHsKLQkgIGRhcndpbl9vcmlnX2Rpcj1gcHdkYAotCSAgY2QgJG15X3hkaXIgfHwgZXhpdCAkPwotCSAgZGFyd2luX2FyY2hpdmU9JG15X3hhYnMKLQkgIGRhcndpbl9jdXJkaXI9YHB3ZGAKLQkgIGRhcndpbl9iYXNlX2FyY2hpdmU9YGJhc2VuYW1lICIkZGFyd2luX2FyY2hpdmUiYAotCSAgZGFyd2luX2FyY2hlcz1gJExJUE8gLWluZm8gIiRkYXJ3aW5fYXJjaGl2ZSIgMj4vZGV2L251bGwgfCAkR1JFUCBBcmNoaXRlY3R1cmVzIDI+L2Rldi9udWxsIHx8IHRydWVgCi0JICBpZiB0ZXN0IC1uICIkZGFyd2luX2FyY2hlcyI7IHRoZW4KLQkgICAgZGFyd2luX2FyY2hlcz1gJEVDSE8gIiRkYXJ3aW5fYXJjaGVzIiB8ICRTRUQgLWUgJ3MvLiphcmU6Ly8nYAotCSAgICBkYXJ3aW5fYXJjaD0KLQkgICAgZnVuY192ZXJib3NlICIkZGFyd2luX2Jhc2VfYXJjaGl2ZSBoYXMgbXVsdGlwbGUgYXJjaGl0ZWN0dXJlcyAkZGFyd2luX2FyY2hlcyIKLQkgICAgZm9yIGRhcndpbl9hcmNoIGluICAkZGFyd2luX2FyY2hlcyA7IGRvCi0JICAgICAgZnVuY19ta2Rpcl9wICJ1bmZhdC0kJC8ke2Rhcndpbl9iYXNlX2FyY2hpdmV9LSR7ZGFyd2luX2FyY2h9IgotCSAgICAgICRMSVBPIC10aGluICRkYXJ3aW5fYXJjaCAtb3V0cHV0ICJ1bmZhdC0kJC8ke2Rhcndpbl9iYXNlX2FyY2hpdmV9LSR7ZGFyd2luX2FyY2h9LyR7ZGFyd2luX2Jhc2VfYXJjaGl2ZX0iICIke2Rhcndpbl9hcmNoaXZlfSIKLQkgICAgICBjZCAidW5mYXQtJCQvJHtkYXJ3aW5fYmFzZV9hcmNoaXZlfS0ke2Rhcndpbl9hcmNofSIKLQkgICAgICBmdW5jX2V4dHJhY3RfYW5fYXJjaGl2ZSAiYHB3ZGAiICIke2Rhcndpbl9iYXNlX2FyY2hpdmV9IgotCSAgICAgIGNkICIkZGFyd2luX2N1cmRpciIKLQkgICAgICAkUk0gInVuZmF0LSQkLyR7ZGFyd2luX2Jhc2VfYXJjaGl2ZX0tJHtkYXJ3aW5fYXJjaH0vJHtkYXJ3aW5fYmFzZV9hcmNoaXZlfSIKLQkgICAgZG9uZSAjICRkYXJ3aW5fYXJjaGVzCi0gICAgICAgICAgICAjIyBPa2F5IG5vdyB3ZSd2ZSBhIGJ1bmNoIG9mIHRoaW4gb2JqZWN0cywgZ290dGEgZmF0dGVuIHRoZW0gdXAgOikKLQkgICAgZGFyd2luX2ZpbGVsaXN0PWBmaW5kIHVuZmF0LSQkIC10eXBlIGYgLW5hbWUgXCoubyAtcHJpbnQgLW8gLW5hbWUgXCoubG8gLXByaW50IHwgJFNFRCAtZSAiJGJhc2VuYW1lIiB8IHNvcnQgLXVgCi0JICAgIGRhcndpbl9maWxlPQotCSAgICBkYXJ3aW5fZmlsZXM9Ci0JICAgIGZvciBkYXJ3aW5fZmlsZSBpbiAkZGFyd2luX2ZpbGVsaXN0OyBkbwotCSAgICAgIGRhcndpbl9maWxlcz1gZmluZCB1bmZhdC0kJCAtbmFtZSAkZGFyd2luX2ZpbGUgLXByaW50IHwgc29ydCB8ICROTDJTUGAKLQkgICAgICAkTElQTyAtY3JlYXRlIC1vdXRwdXQgIiRkYXJ3aW5fZmlsZSIgJGRhcndpbl9maWxlcwotCSAgICBkb25lICMgJGRhcndpbl9maWxlbGlzdAotCSAgICAkUk0gLXJmIHVuZmF0LSQkCi0JICAgIGNkICIkZGFyd2luX29yaWdfZGlyIgotCSAgZWxzZQotCSAgICBjZCAkZGFyd2luX29yaWdfZGlyCi0JICAgIGZ1bmNfZXh0cmFjdF9hbl9hcmNoaXZlICIkbXlfeGRpciIgIiRteV94YWJzIgotCSAgZmkgIyAkZGFyd2luX2FyY2hlcwotCX0gIyAhJG9wdF9kcnlfcnVuCi0JOzsKLSAgICAgICopCi0gICAgICAgIGZ1bmNfZXh0cmFjdF9hbl9hcmNoaXZlICIkbXlfeGRpciIgIiRteV94YWJzIgotCTs7Ci0gICAgICBlc2FjCi0gICAgICBteV9vbGRvYmpzPSIkbXlfb2xkb2JqcyAiYGZpbmQgJG15X3hkaXIgLW5hbWUgXCouJG9iamV4dCAtcHJpbnQgLW8gLW5hbWUgXCoubG8gLXByaW50IHwgc29ydCB8ICROTDJTUGAKLSAgICBkb25lCi0KLSAgICBmdW5jX2V4dHJhY3RfYXJjaGl2ZXNfcmVzdWx0PSIkbXlfb2xkb2JqcyIKLX0KLQotCi0jIGZ1bmNfZW1pdF93cmFwcGVyIFthcmc9bm9dCi0jCi0jIEVtaXQgYSBsaWJ0b29sIHdyYXBwZXIgc2NyaXB0IG9uIHN0ZG91dC4KLSMgRG9uJ3QgZGlyZWN0bHkgb3BlbiBhIGZpbGUgYmVjYXVzZSB3ZSBtYXkgd2FudCB0bwotIyBpbmNvcnBvcmF0ZSB0aGUgc2NyaXB0IGNvbnRlbnRzIHdpdGhpbiBhIGN5Z3dpbi9taW5ndwotIyB3cmFwcGVyIGV4ZWN1dGFibGUuICBNdXN0IE9OTFkgYmUgY2FsbGVkIGZyb20gd2l0aGluCi0jIGZ1bmNfbW9kZV9saW5rIGJlY2F1c2UgaXQgZGVwZW5kcyBvbiBhIG51bWJlciBvZiB2YXJpYWJsZXMKLSMgc2V0IHRoZXJlaW4uCi0jCi0jIEFSRyBpcyB0aGUgdmFsdWUgdGhhdCB0aGUgV1JBUFBFUl9TQ1JJUFRfQkVMT05HU19JTl9PQkpESVIKLSMgdmFyaWFibGUgd2lsbCB0YWtlLiAgSWYgJ3llcycsIHRoZW4gdGhlIGVtaXR0ZWQgc2NyaXB0Ci0jIHdpbGwgYXNzdW1lIHRoYXQgdGhlIGRpcmVjdG9yeSBpbiB3aGljaCBpdCBpcyBzdG9yZWQgaXMKLSMgdGhlICRvYmpkaXIgZGlyZWN0b3J5LiAgVGhpcyBpcyBhIGN5Z3dpbi9taW5ndy1zcGVjaWZpYwotIyBiZWhhdmlvci4KLWZ1bmNfZW1pdF93cmFwcGVyICgpCi17Ci0JZnVuY19lbWl0X3dyYXBwZXJfYXJnMT0kezEtbm99Ci0KLQkkRUNITyAiXAotIyEgJFNIRUxMCi0KLSMgJG91dHB1dCAtIHRlbXBvcmFyeSB3cmFwcGVyIHNjcmlwdCBmb3IgJG9iamRpci8kb3V0cHV0bmFtZQotIyBHZW5lcmF0ZWQgYnkgJFBST0dSQU0gKEdOVSAkUEFDS0FHRSRUSU1FU1RBTVApICRWRVJTSU9OCi0jCi0jIFRoZSAkb3V0cHV0IHByb2dyYW0gY2Fubm90IGJlIGRpcmVjdGx5IGV4ZWN1dGVkIHVudGlsIGFsbCB0aGUgbGlidG9vbAotIyBsaWJyYXJpZXMgdGhhdCBpdCBkZXBlbmRzIG9uIGFyZSBpbnN0YWxsZWQuCi0jCi0jIFRoaXMgd3JhcHBlciBzY3JpcHQgc2hvdWxkIG5ldmVyIGJlIG1vdmVkIG91dCBvZiB0aGUgYnVpbGQgZGlyZWN0b3J5LgotIyBJZiBpdCBpcywgaXQgd2lsbCBub3Qgb3BlcmF0ZSBjb3JyZWN0bHkuCi0KLSMgU2VkIHN1YnN0aXR1dGlvbiB0aGF0IGhlbHBzIHVzIGRvIHJvYnVzdCBxdW90aW5nLiAgSXQgYmFja3NsYXNoaWZpZXMKLSMgbWV0YWNoYXJhY3RlcnMgdGhhdCBhcmUgc3RpbGwgYWN0aXZlIHdpdGhpbiBkb3VibGUtcXVvdGVkIHN0cmluZ3MuCi1zZWRfcXVvdGVfc3Vic3Q9JyRzZWRfcXVvdGVfc3Vic3QnCi0KLSMgQmUgQm91cm5lIGNvbXBhdGlibGUKLWlmIHRlc3QgLW4gXCJcJHtaU0hfVkVSU0lPTitzZXR9XCIgJiYgKGVtdWxhdGUgc2gpID4vZGV2L251bGwgMj4mMTsgdGhlbgotICBlbXVsYXRlIHNoCi0gIE5VTExDTUQ9OgotICAjIFpzaCAzLnggYW5kIDQueCBwZXJmb3JtcyB3b3JkIHNwbGl0dGluZyBvbiBcJHsxK1wiXCRAXCJ9LCB3aGljaAotICAjIGlzIGNvbnRyYXJ5IHRvIG91ciB1c2FnZS4gIERpc2FibGUgdGhpcyBmZWF0dXJlLgotICBhbGlhcyAtZyAnXCR7MStcIlwkQFwifSc9J1wiXCRAXCInCi0gIHNldG9wdCBOT19HTE9CX1NVQlNUCi1lbHNlCi0gIGNhc2UgXGAoc2V0IC1vKSAyPi9kZXYvbnVsbFxgIGluICpwb3NpeCopIHNldCAtbyBwb3NpeDs7IGVzYWMKLWZpCi1CSU5fU0g9eHBnNDsgZXhwb3J0IEJJTl9TSCAjIGZvciBUcnU2NAotRFVBTENBU0U9MTsgZXhwb3J0IERVQUxDQVNFICMgZm9yIE1LUyBzaAotCi0jIFRoZSBIUC1VWCBrc2ggYW5kIFBPU0lYIHNoZWxsIHByaW50IHRoZSB0YXJnZXQgZGlyZWN0b3J5IHRvIHN0ZG91dAotIyBpZiBDRFBBVEggaXMgc2V0LgotKHVuc2V0IENEUEFUSCkgPi9kZXYvbnVsbCAyPiYxICYmIHVuc2V0IENEUEFUSAotCi1yZWxpbmtfY29tbWFuZD1cIiRyZWxpbmtfY29tbWFuZFwiCi0KLSMgVGhpcyBlbnZpcm9ubWVudCB2YXJpYWJsZSBkZXRlcm1pbmVzIG91ciBvcGVyYXRpb24gbW9kZS4KLWlmIHRlc3QgXCJcJGxpYnRvb2xfaW5zdGFsbF9tYWdpY1wiID0gXCIkbWFnaWNcIjsgdGhlbgotICAjIGluc3RhbGwgbW9kZSBuZWVkcyB0aGUgZm9sbG93aW5nIHZhcmlhYmxlczoKLSAgZ2VuZXJhdGVkX2J5X2xpYnRvb2xfdmVyc2lvbj0nJG1hY3JvX3ZlcnNpb24nCi0gIG5vdGluc3RfZGVwbGlicz0nJG5vdGluc3RfZGVwbGlicycKLWVsc2UKLSAgIyBXaGVuIHdlIGFyZSBzb3VyY2VkIGluIGV4ZWN1dGUgbW9kZSwgXCRmaWxlIGFuZCBcJEVDSE8gYXJlIGFscmVhZHkgc2V0LgotICBpZiB0ZXN0IFwiXCRsaWJ0b29sX2V4ZWN1dGVfbWFnaWNcIiAhPSBcIiRtYWdpY1wiOyB0aGVuCi0gICAgZmlsZT1cIlwkMFwiIgotCi0gICAgcUVDSE89YCRFQ0hPICIkRUNITyIgfCAkU0VEICIkc2VkX3F1b3RlX3N1YnN0ImAKLSAgICAkRUNITyAiXAotCi0jIEEgZnVuY3Rpb24gdGhhdCBpcyB1c2VkIHdoZW4gdGhlcmUgaXMgbm8gcHJpbnQgYnVpbHRpbiBvciBwcmludGYuCi1mdW5jX2ZhbGxiYWNrX2VjaG8gKCkKLXsKLSAgZXZhbCAnY2F0IDw8X0xURUNIT19FT0YKLVwkMQotX0xURUNIT19FT0YnCi19Ci0gICAgRUNITz1cIiRxRUNIT1wiCi0gIGZpCi0KLSMgVmVyeSBiYXNpYyBvcHRpb24gcGFyc2luZy4gVGhlc2Ugb3B0aW9ucyBhcmUgKGEpIHNwZWNpZmljIHRvCi0jIHRoZSBsaWJ0b29sIHdyYXBwZXIsIChiKSBhcmUgaWRlbnRpY2FsIGJldHdlZW4gdGhlIHdyYXBwZXIKLSMgL3NjcmlwdC8gYW5kIHRoZSB3cmFwcGVyIC9leGVjdXRhYmxlLyB3aGljaCBpcyB1c2VkIG9ubHkgb24KLSMgd2luZG93cyBwbGF0Zm9ybXMsIGFuZCAoYykgYWxsIGJlZ2luIHdpdGggdGhlIHN0cmluZyAiLS1sdC0iCi0jIChhcHBsaWNhdGlvbiBwcm9ncmFtcyBhcmUgdW5saWtlbHkgdG8gaGF2ZSBvcHRpb25zIHdoaWNoIG1hdGNoCi0jIHRoaXMgcGF0dGVybikuCi0jCi0jIFRoZXJlIGFyZSBvbmx5IHR3byBzdXBwb3J0ZWQgb3B0aW9uczogLS1sdC1kZWJ1ZyBhbmQKLSMgLS1sdC1kdW1wLXNjcmlwdC4gVGhlcmUgaXMsIGRlbGliZXJhdGVseSwgbm8gLS1sdC1oZWxwLgotIwotIyBUaGUgZmlyc3QgYXJndW1lbnQgdG8gdGhpcyBwYXJzaW5nIGZ1bmN0aW9uIHNob3VsZCBiZSB0aGUKLSMgc2NyaXB0J3MgJDAgdmFsdWUsIGZvbGxvd2VkIGJ5ICIkQCIuCi1sdF9vcHRpb25fZGVidWc9Ci1mdW5jX3BhcnNlX2x0X29wdGlvbnMgKCkKLXsKLSAgbHRfc2NyaXB0X2FyZzA9XCQwCi0gIHNoaWZ0Ci0gIGZvciBsdF9vcHQKLSAgZG8KLSAgICBjYXNlIFwiXCRsdF9vcHRcIiBpbgotICAgIC0tbHQtZGVidWcpIGx0X29wdGlvbl9kZWJ1Zz0xIDs7Ci0gICAgLS1sdC1kdW1wLXNjcmlwdCkKLSAgICAgICAgbHRfZHVtcF9EPVxgXCRFQ0hPIFwiWFwkbHRfc2NyaXB0X2FyZzBcIiB8ICRTRUQgLWUgJ3MvXlgvLycgLWUgJ3MlL1teL10qJCUlJ1xgCi0gICAgICAgIHRlc3QgXCJYXCRsdF9kdW1wX0RcIiA9IFwiWFwkbHRfc2NyaXB0X2FyZzBcIiAmJiBsdF9kdW1wX0Q9LgotICAgICAgICBsdF9kdW1wX0Y9XGBcJEVDSE8gXCJYXCRsdF9zY3JpcHRfYXJnMFwiIHwgJFNFRCAtZSAncy9eWC8vJyAtZSAncyVeLiovJSUnXGAKLSAgICAgICAgY2F0IFwiXCRsdF9kdW1wX0QvXCRsdF9kdW1wX0ZcIgotICAgICAgICBleGl0IDAKLSAgICAgIDs7Ci0gICAgLS1sdC0qKQotICAgICAgICBcJEVDSE8gXCJVbnJlY29nbml6ZWQgLS1sdC0gb3B0aW9uOiAnXCRsdF9vcHQnXCIgMT4mMgotICAgICAgICBleGl0IDEKLSAgICAgIDs7Ci0gICAgZXNhYwotICBkb25lCi0KLSAgIyBQcmludCB0aGUgZGVidWcgYmFubmVyIGltbWVkaWF0ZWx5OgotICBpZiB0ZXN0IC1uIFwiXCRsdF9vcHRpb25fZGVidWdcIjsgdGhlbgotICAgIGVjaG8gXCIke291dHB1dG5hbWV9OiR7b3V0cHV0fTpcJHtMSU5FTk99OiBsaWJ0b29sIHdyYXBwZXIgKEdOVSAkUEFDS0FHRSRUSU1FU1RBTVApICRWRVJTSU9OXCIgMT4mMgotICBmaQotfQotCi0jIFVzZWQgd2hlbiAtLWx0LWRlYnVnLiBQcmludHMgaXRzIGFyZ3VtZW50cyB0byBzdGRvdXQKLSMgKHJlZGlyZWN0aW9uIGlzIHRoZSByZXNwb25zaWJpbGl0eSBvZiB0aGUgY2FsbGVyKQotZnVuY19sdF9kdW1wX2FyZ3MgKCkKLXsKLSAgbHRfZHVtcF9hcmdzX049MTsKLSAgZm9yIGx0X2FyZwotICBkbwotICAgIFwkRUNITyBcIiR7b3V0cHV0bmFtZX06JHtvdXRwdXR9Olwke0xJTkVOT306IG5ld2FyZ3ZbXCRsdF9kdW1wX2FyZ3NfTl06IFwkbHRfYXJnXCIKLSAgICBsdF9kdW1wX2FyZ3NfTj1cYGV4cHIgXCRsdF9kdW1wX2FyZ3NfTiArIDFcYAotICBkb25lCi19Ci0KLSMgQ29yZSBmdW5jdGlvbiBmb3IgbGF1bmNoaW5nIHRoZSB0YXJnZXQgYXBwbGljYXRpb24KLWZ1bmNfZXhlY19wcm9ncmFtX2NvcmUgKCkKLXsKLSIKLSAgY2FzZSAkaG9zdCBpbgotICAjIEJhY2tzbGFzaGVzIHNlcGFyYXRlIGRpcmVjdG9yaWVzIG9uIHBsYWluIHdpbmRvd3MKLSAgKi0qLW1pbmd3IHwgKi0qLW9zMiogfCAqLWNlZ2NjKikKLSAgICAkRUNITyAiXAotICAgICAgaWYgdGVzdCAtbiBcIlwkbHRfb3B0aW9uX2RlYnVnXCI7IHRoZW4KLSAgICAgICAgXCRFQ0hPIFwiJHtvdXRwdXRuYW1lfToke291dHB1dH06XCR7TElORU5PfTogbmV3YXJndlswXTogXCRwcm9nZGlyXFxcXFwkcHJvZ3JhbVwiIDE+JjIKLSAgICAgICAgZnVuY19sdF9kdW1wX2FyZ3MgXCR7MStcIlwkQFwifSAxPiYyCi0gICAgICBmaQotICAgICAgZXhlYyBcIlwkcHJvZ2RpclxcXFxcJHByb2dyYW1cIiBcJHsxK1wiXCRAXCJ9Ci0iCi0gICAgOzsKLQotICAqKQotICAgICRFQ0hPICJcCi0gICAgICBpZiB0ZXN0IC1uIFwiXCRsdF9vcHRpb25fZGVidWdcIjsgdGhlbgotICAgICAgICBcJEVDSE8gXCIke291dHB1dG5hbWV9OiR7b3V0cHV0fTpcJHtMSU5FTk99OiBuZXdhcmd2WzBdOiBcJHByb2dkaXIvXCRwcm9ncmFtXCIgMT4mMgotICAgICAgICBmdW5jX2x0X2R1bXBfYXJncyBcJHsxK1wiXCRAXCJ9IDE+JjIKLSAgICAgIGZpCi0gICAgICBleGVjIFwiXCRwcm9nZGlyL1wkcHJvZ3JhbVwiIFwkezErXCJcJEBcIn0KLSIKLSAgICA7OwotICBlc2FjCi0gICRFQ0hPICJcCi0gICAgICBcJEVDSE8gXCJcJDA6IGNhbm5vdCBleGVjIFwkcHJvZ3JhbSBcJCpcIiAxPiYyCi0gICAgICBleGl0IDEKLX0KLQotIyBBIGZ1bmN0aW9uIHRvIGVuY2Fwc3VsYXRlIGxhdW5jaGluZyB0aGUgdGFyZ2V0IGFwcGxpY2F0aW9uCi0jIFN0cmlwcyBvcHRpb25zIGluIHRoZSAtLWx0LSogbmFtZXNwYWNlIGZyb20gXCRAIGFuZAotIyBsYXVuY2hlcyB0YXJnZXQgYXBwbGljYXRpb24gd2l0aCB0aGUgcmVtYWluaW5nIGFyZ3VtZW50cy4KLWZ1bmNfZXhlY19wcm9ncmFtICgpCi17Ci0gIGZvciBsdF93cl9hcmcKLSAgZG8KLSAgICBjYXNlIFwkbHRfd3JfYXJnIGluCi0gICAgLS1sdC0qKSA7OwotICAgICopIHNldCB4IFwiXCRAXCIgXCJcJGx0X3dyX2FyZ1wiOyBzaGlmdDs7Ci0gICAgZXNhYwotICAgIHNoaWZ0Ci0gIGRvbmUKLSAgZnVuY19leGVjX3Byb2dyYW1fY29yZSBcJHsxK1wiXCRAXCJ9Ci19Ci0KLSAgIyBQYXJzZSBvcHRpb25zCi0gIGZ1bmNfcGFyc2VfbHRfb3B0aW9ucyBcIlwkMFwiIFwkezErXCJcJEBcIn0KLQotICAjIEZpbmQgdGhlIGRpcmVjdG9yeSB0aGF0IHRoaXMgc2NyaXB0IGxpdmVzIGluLgotICB0aGlzZGlyPVxgXCRFQ0hPIFwiXCRmaWxlXCIgfCAkU0VEICdzJS9bXi9dKiQlJSdcYAotICB0ZXN0IFwieFwkdGhpc2RpclwiID0gXCJ4XCRmaWxlXCIgJiYgdGhpc2Rpcj0uCi0KLSAgIyBGb2xsb3cgc3ltYm9saWMgbGlua3MgdW50aWwgd2UgZ2V0IHRvIHRoZSByZWFsIHRoaXNkaXIuCi0gIGZpbGU9XGBscyAtbGQgXCJcJGZpbGVcIiB8ICRTRUQgLW4gJ3MvLiotPiAvL3AnXGAKLSAgd2hpbGUgdGVzdCAtbiBcIlwkZmlsZVwiOyBkbwotICAgIGRlc3RkaXI9XGBcJEVDSE8gXCJcJGZpbGVcIiB8ICRTRUQgJ3MlL1teL10qXCQlJSdcYAotCi0gICAgIyBJZiB0aGVyZSB3YXMgYSBkaXJlY3RvcnkgY29tcG9uZW50LCB0aGVuIGNoYW5nZSB0aGlzZGlyLgotICAgIGlmIHRlc3QgXCJ4XCRkZXN0ZGlyXCIgIT0gXCJ4XCRmaWxlXCI7IHRoZW4KLSAgICAgIGNhc2UgXCJcJGRlc3RkaXJcIiBpbgotICAgICAgW1xcXFwvXSogfCBbQS1aYS16XTpbXFxcXC9dKikgdGhpc2Rpcj1cIlwkZGVzdGRpclwiIDs7Ci0gICAgICAqKSB0aGlzZGlyPVwiXCR0aGlzZGlyL1wkZGVzdGRpclwiIDs7Ci0gICAgICBlc2FjCi0gICAgZmkKLQotICAgIGZpbGU9XGBcJEVDSE8gXCJcJGZpbGVcIiB8ICRTRUQgJ3MlXi4qLyUlJ1xgCi0gICAgZmlsZT1cYGxzIC1sZCBcIlwkdGhpc2Rpci9cJGZpbGVcIiB8ICRTRUQgLW4gJ3MvLiotPiAvL3AnXGAKLSAgZG9uZQotCi0gICMgVXN1YWxseSAnbm8nLCBleGNlcHQgb24gY3lnd2luL21pbmd3IHdoZW4gZW1iZWRkZWQgaW50bwotICAjIHRoZSBjd3JhcHBlci4KLSAgV1JBUFBFUl9TQ1JJUFRfQkVMT05HU19JTl9PQkpESVI9JGZ1bmNfZW1pdF93cmFwcGVyX2FyZzEKLSAgaWYgdGVzdCBcIlwkV1JBUFBFUl9TQ1JJUFRfQkVMT05HU19JTl9PQkpESVJcIiA9IFwieWVzXCI7IHRoZW4KLSAgICAjIHNwZWNpYWwgY2FzZSBmb3IgJy4nCi0gICAgaWYgdGVzdCBcIlwkdGhpc2RpclwiID0gXCIuXCI7IHRoZW4KLSAgICAgIHRoaXNkaXI9XGBwd2RcYAotICAgIGZpCi0gICAgIyByZW1vdmUgLmxpYnMgZnJvbSB0aGlzZGlyCi0gICAgY2FzZSBcIlwkdGhpc2RpclwiIGluCi0gICAgKltcXFxcL10kb2JqZGlyICkgdGhpc2Rpcj1cYFwkRUNITyBcIlwkdGhpc2RpclwiIHwgJFNFRCAncyVbXFxcXC9dW15cXFxcL10qJCUlJ1xgIDs7Ci0gICAgJG9iamRpciApICAgdGhpc2Rpcj0uIDs7Ci0gICAgZXNhYwotICBmaQotCi0gICMgVHJ5IHRvIGdldCB0aGUgYWJzb2x1dGUgZGlyZWN0b3J5IG5hbWUuCi0gIGFic2Rpcj1cYGNkIFwiXCR0aGlzZGlyXCIgJiYgcHdkXGAKLSAgdGVzdCAtbiBcIlwkYWJzZGlyXCIgJiYgdGhpc2Rpcj1cIlwkYWJzZGlyXCIKLSIKLQotCWlmIHRlc3QgIiRmYXN0X2luc3RhbGwiID0geWVzOyB0aGVuCi0JICAkRUNITyAiXAotICBwcm9ncmFtPWx0LSckb3V0cHV0bmFtZSckZXhlZXh0Ci0gIHByb2dkaXI9XCJcJHRoaXNkaXIvJG9iamRpclwiCi0KLSAgaWYgdGVzdCAhIC1mIFwiXCRwcm9nZGlyL1wkcHJvZ3JhbVwiIHx8Ci0gICAgIHsgZmlsZT1cYGxzIC0xZHQgXCJcJHByb2dkaXIvXCRwcm9ncmFtXCIgXCJcJHByb2dkaXIvLi4vXCRwcm9ncmFtXCIgMj4vZGV2L251bGwgfCAke1NFRH0gMXFcYDsgXFwKLSAgICAgICB0ZXN0IFwiWFwkZmlsZVwiICE9IFwiWFwkcHJvZ2Rpci9cJHByb2dyYW1cIjsgfTsgdGhlbgotCi0gICAgZmlsZT1cIlwkXCQtXCRwcm9ncmFtXCIKLQotICAgIGlmIHRlc3QgISAtZCBcIlwkcHJvZ2RpclwiOyB0aGVuCi0gICAgICAkTUtESVIgXCJcJHByb2dkaXJcIgotICAgIGVsc2UKLSAgICAgICRSTSBcIlwkcHJvZ2Rpci9cJGZpbGVcIgotICAgIGZpIgotCi0JICAkRUNITyAiXAotCi0gICAgIyByZWxpbmsgZXhlY3V0YWJsZSBpZiBuZWNlc3NhcnkKLSAgICBpZiB0ZXN0IC1uIFwiXCRyZWxpbmtfY29tbWFuZFwiOyB0aGVuCi0gICAgICBpZiByZWxpbmtfY29tbWFuZF9vdXRwdXQ9XGBldmFsIFwkcmVsaW5rX2NvbW1hbmQgMj4mMVxgOyB0aGVuIDoKLSAgICAgIGVsc2UKLQkkRUNITyBcIlwkcmVsaW5rX2NvbW1hbmRfb3V0cHV0XCIgPiYyCi0JJFJNIFwiXCRwcm9nZGlyL1wkZmlsZVwiCi0JZXhpdCAxCi0gICAgICBmaQotICAgIGZpCi0KLSAgICAkTVYgXCJcJHByb2dkaXIvXCRmaWxlXCIgXCJcJHByb2dkaXIvXCRwcm9ncmFtXCIgMj4vZGV2L251bGwgfHwKLSAgICB7ICRSTSBcIlwkcHJvZ2Rpci9cJHByb2dyYW1cIjsKLSAgICAgICRNViBcIlwkcHJvZ2Rpci9cJGZpbGVcIiBcIlwkcHJvZ2Rpci9cJHByb2dyYW1cIjsgfQotICAgICRSTSBcIlwkcHJvZ2Rpci9cJGZpbGVcIgotICBmaSIKLQllbHNlCi0JICAkRUNITyAiXAotICBwcm9ncmFtPSckb3V0cHV0bmFtZScKLSAgcHJvZ2Rpcj1cIlwkdGhpc2Rpci8kb2JqZGlyXCIKLSIKLQlmaQotCi0JJEVDSE8gIlwKLQotICBpZiB0ZXN0IC1mIFwiXCRwcm9nZGlyL1wkcHJvZ3JhbVwiOyB0aGVuIgotCi0JIyBmaXh1cCB0aGUgZGxsIHNlYXJjaHBhdGggaWYgd2UgbmVlZCB0by4KLQkjCi0JIyBGaXggdGhlIERMTCBzZWFyY2hwYXRoIGlmIHdlIG5lZWQgdG8uICBEbyB0aGlzIGJlZm9yZSBwcmVwZW5kaW5nCi0JIyB0byBzaGxpYnBhdGgsIGJlY2F1c2Ugb24gV2luZG93cywgYm90aCBhcmUgUEFUSCBhbmQgdW5pbnN0YWxsZWQKLQkjIGxpYnJhcmllcyBtdXN0IGNvbWUgZmlyc3QuCi0JaWYgdGVzdCAtbiAiJGRsbHNlYXJjaHBhdGgiOyB0aGVuCi0JICAkRUNITyAiXAotICAgICMgQWRkIHRoZSBkbGwgc2VhcmNoIHBhdGggY29tcG9uZW50cyB0byB0aGUgZXhlY3V0YWJsZSBQQVRICi0gICAgUEFUSD0kZGxsc2VhcmNocGF0aDpcJFBBVEgKLSIKLQlmaQotCi0JIyBFeHBvcnQgb3VyIHNobGlicGF0aF92YXIgaWYgd2UgaGF2ZSBvbmUuCi0JaWYgdGVzdCAiJHNobGlicGF0aF9vdmVycmlkZXNfcnVucGF0aCIgPSB5ZXMgJiYgdGVzdCAtbiAiJHNobGlicGF0aF92YXIiICYmIHRlc3QgLW4gIiR0ZW1wX3JwYXRoIjsgdGhlbgotCSAgJEVDSE8gIlwKLSAgICAjIEFkZCBvdXIgb3duIGxpYnJhcnkgcGF0aCB0byAkc2hsaWJwYXRoX3ZhcgotICAgICRzaGxpYnBhdGhfdmFyPVwiJHRlbXBfcnBhdGhcJCRzaGxpYnBhdGhfdmFyXCIKLQotICAgICMgU29tZSBzeXN0ZW1zIGNhbm5vdCBjb3BlIHdpdGggY29sb24tdGVybWluYXRlZCAkc2hsaWJwYXRoX3ZhcgotICAgICMgVGhlIHNlY29uZCBjb2xvbiBpcyBhIHdvcmthcm91bmQgZm9yIGEgYnVnIGluIEJlT1MgUjQgc2VkCi0gICAgJHNobGlicGF0aF92YXI9XGBcJEVDSE8gXCJcJCRzaGxpYnBhdGhfdmFyXCIgfCAkU0VEICdzLzo6KlwkLy8nXGAKLQotICAgIGV4cG9ydCAkc2hsaWJwYXRoX3ZhcgotIgotCWZpCi0KLQkkRUNITyAiXAotICAgIGlmIHRlc3QgXCJcJGxpYnRvb2xfZXhlY3V0ZV9tYWdpY1wiICE9IFwiJG1hZ2ljXCI7IHRoZW4KLSAgICAgICMgUnVuIHRoZSBhY3R1YWwgcHJvZ3JhbSB3aXRoIG91ciBhcmd1bWVudHMuCi0gICAgICBmdW5jX2V4ZWNfcHJvZ3JhbSBcJHsxK1wiXCRAXCJ9Ci0gICAgZmkKLSAgZWxzZQotICAgICMgVGhlIHByb2dyYW0gZG9lc24ndCBleGlzdC4KLSAgICBcJEVDSE8gXCJcJDA6IGVycm9yOiBcXFxgXCRwcm9nZGlyL1wkcHJvZ3JhbScgZG9lcyBub3QgZXhpc3RcIiAxPiYyCi0gICAgXCRFQ0hPIFwiVGhpcyBzY3JpcHQgaXMganVzdCBhIHdyYXBwZXIgZm9yIFwkcHJvZ3JhbS5cIiAxPiYyCi0gICAgXCRFQ0hPIFwiU2VlIHRoZSAkUEFDS0FHRSBkb2N1bWVudGF0aW9uIGZvciBtb3JlIGluZm9ybWF0aW9uLlwiIDE+JjIKLSAgICBleGl0IDEKLSAgZmkKLWZpXAotIgotfQotCi0KLSMgZnVuY19lbWl0X2N3cmFwcGVyZXhlX3NyYwotIyBlbWl0IHRoZSBzb3VyY2UgY29kZSBmb3IgYSB3cmFwcGVyIGV4ZWN1dGFibGUgb24gc3Rkb3V0Ci0jIE11c3QgT05MWSBiZSBjYWxsZWQgZnJvbSB3aXRoaW4gZnVuY19tb2RlX2xpbmsgYmVjYXVzZQotIyBpdCBkZXBlbmRzIG9uIGEgbnVtYmVyIG9mIHZhcmlhYmxlIHNldCB0aGVyZWluLgotZnVuY19lbWl0X2N3cmFwcGVyZXhlX3NyYyAoKQotewotCWNhdCA8PEVPRgotCi0vKiAkY3dyYXBwZXJzb3VyY2UgLSB0ZW1wb3Jhcnkgd3JhcHBlciBleGVjdXRhYmxlIGZvciAkb2JqZGlyLyRvdXRwdXRuYW1lCi0gICBHZW5lcmF0ZWQgYnkgJFBST0dSQU0gKEdOVSAkUEFDS0FHRSRUSU1FU1RBTVApICRWRVJTSU9OCi0KLSAgIFRoZSAkb3V0cHV0IHByb2dyYW0gY2Fubm90IGJlIGRpcmVjdGx5IGV4ZWN1dGVkIHVudGlsIGFsbCB0aGUgbGlidG9vbAotICAgbGlicmFyaWVzIHRoYXQgaXQgZGVwZW5kcyBvbiBhcmUgaW5zdGFsbGVkLgotCi0gICBUaGlzIHdyYXBwZXIgZXhlY3V0YWJsZSBzaG91bGQgbmV2ZXIgYmUgbW92ZWQgb3V0IG9mIHRoZSBidWlsZCBkaXJlY3RvcnkuCi0gICBJZiBpdCBpcywgaXQgd2lsbCBub3Qgb3BlcmF0ZSBjb3JyZWN0bHkuCi0qLwotRU9GCi0JICAgIGNhdCA8PCJFT0YiCi0jaWZkZWYgX01TQ19WRVIKLSMgZGVmaW5lIF9DUlRfU0VDVVJFX05PX0RFUFJFQ0FURSAxCi0jZW5kaWYKLSNpbmNsdWRlIDxzdGRpby5oPgotI2luY2x1ZGUgPHN0ZGxpYi5oPgotI2lmZGVmIF9NU0NfVkVSCi0jIGluY2x1ZGUgPGRpcmVjdC5oPgotIyBpbmNsdWRlIDxwcm9jZXNzLmg+Ci0jIGluY2x1ZGUgPGlvLmg+Ci0jZWxzZQotIyBpbmNsdWRlIDx1bmlzdGQuaD4KLSMgaW5jbHVkZSA8c3RkaW50Lmg+Ci0jIGlmZGVmIF9fQ1lHV0lOX18KLSMgIGluY2x1ZGUgPGlvLmg+Ci0jIGVuZGlmCi0jZW5kaWYKLSNpbmNsdWRlIDxtYWxsb2MuaD4KLSNpbmNsdWRlIDxzdGRhcmcuaD4KLSNpbmNsdWRlIDxhc3NlcnQuaD4KLSNpbmNsdWRlIDxzdHJpbmcuaD4KLSNpbmNsdWRlIDxjdHlwZS5oPgotI2luY2x1ZGUgPGVycm5vLmg+Ci0jaW5jbHVkZSA8ZmNudGwuaD4KLSNpbmNsdWRlIDxzeXMvc3RhdC5oPgotCi0vKiBkZWNsYXJhdGlvbnMgb2Ygbm9uLUFOU0kgZnVuY3Rpb25zICovCi0jaWYgZGVmaW5lZChfX01JTkdXMzJfXykKLSMgaWZkZWYgX19TVFJJQ1RfQU5TSV9fCi1pbnQgX3B1dGVudiAoY29uc3QgY2hhciAqKTsKLSMgZW5kaWYKLSNlbGlmIGRlZmluZWQoX19DWUdXSU5fXykKLSMgaWZkZWYgX19TVFJJQ1RfQU5TSV9fCi1jaGFyICpyZWFscGF0aCAoY29uc3QgY2hhciAqLCBjaGFyICopOwotaW50IHB1dGVudiAoY2hhciAqKTsKLWludCBzZXRlbnYgKGNvbnN0IGNoYXIgKiwgY29uc3QgY2hhciAqLCBpbnQpOwotIyBlbmRpZgotLyogI2VsaWYgZGVmaW5lZCAob3RoZXIgcGxhdGZvcm1zKSAuLi4gKi8KLSNlbmRpZgotCi0vKiBwb3J0YWJpbGl0eSBkZWZpbmVzLCBleGNsdWRpbmcgcGF0aCBoYW5kbGluZyBtYWNyb3MgKi8KLSNpZiBkZWZpbmVkKF9NU0NfVkVSKQotIyBkZWZpbmUgc2V0bW9kZSBfc2V0bW9kZQotIyBkZWZpbmUgc3RhdCAgICBfc3RhdAotIyBkZWZpbmUgY2htb2QgICBfY2htb2QKLSMgZGVmaW5lIGdldGN3ZCAgX2dldGN3ZAotIyBkZWZpbmUgcHV0ZW52ICBfcHV0ZW52Ci0jIGRlZmluZSBTX0lYVVNSIF9TX0lFWEVDCi0jIGlmbmRlZiBfSU5UUFRSX1RfREVGSU5FRAotIyAgZGVmaW5lIF9JTlRQVFJfVF9ERUZJTkVECi0jICBkZWZpbmUgaW50cHRyX3QgaW50Ci0jIGVuZGlmCi0jZWxpZiBkZWZpbmVkKF9fTUlOR1czMl9fKQotIyBkZWZpbmUgc2V0bW9kZSBfc2V0bW9kZQotIyBkZWZpbmUgc3RhdCAgICBfc3RhdAotIyBkZWZpbmUgY2htb2QgICBfY2htb2QKLSMgZGVmaW5lIGdldGN3ZCAgX2dldGN3ZAotIyBkZWZpbmUgcHV0ZW52ICBfcHV0ZW52Ci0jZWxpZiBkZWZpbmVkKF9fQ1lHV0lOX18pCi0jIGRlZmluZSBIQVZFX1NFVEVOVgotIyBkZWZpbmUgRk9QRU5fV0IgIndiIgotLyogI2VsaWYgZGVmaW5lZCAob3RoZXIgcGxhdGZvcm1zKSAuLi4gKi8KLSNlbmRpZgotCi0jaWYgZGVmaW5lZChQQVRIX01BWCkKLSMgZGVmaW5lIExUX1BBVEhNQVggUEFUSF9NQVgKLSNlbGlmIGRlZmluZWQoTUFYUEFUSExFTikKLSMgZGVmaW5lIExUX1BBVEhNQVggTUFYUEFUSExFTgotI2Vsc2UKLSMgZGVmaW5lIExUX1BBVEhNQVggMTAyNAotI2VuZGlmCi0KLSNpZm5kZWYgU19JWE9USAotIyBkZWZpbmUgU19JWE9USCAwCi0jZW5kaWYKLSNpZm5kZWYgU19JWEdSUAotIyBkZWZpbmUgU19JWEdSUCAwCi0jZW5kaWYKLQotLyogcGF0aCBoYW5kbGluZyBwb3J0YWJpbGl0eSBtYWNyb3MgKi8KLSNpZm5kZWYgRElSX1NFUEFSQVRPUgotIyBkZWZpbmUgRElSX1NFUEFSQVRPUiAnLycKLSMgZGVmaW5lIFBBVEhfU0VQQVJBVE9SICc6JwotI2VuZGlmCi0KLSNpZiBkZWZpbmVkIChfV0lOMzIpIHx8IGRlZmluZWQgKF9fTVNET1NfXykgfHwgZGVmaW5lZCAoX19ESkdQUF9fKSB8fCBcCi0gIGRlZmluZWQgKF9fT1MyX18pCi0jIGRlZmluZSBIQVZFX0RPU19CQVNFRF9GSUxFX1NZU1RFTQotIyBkZWZpbmUgRk9QRU5fV0IgIndiIgotIyBpZm5kZWYgRElSX1NFUEFSQVRPUl8yCi0jICBkZWZpbmUgRElSX1NFUEFSQVRPUl8yICdcXCcKLSMgZW5kaWYKLSMgaWZuZGVmIFBBVEhfU0VQQVJBVE9SXzIKLSMgIGRlZmluZSBQQVRIX1NFUEFSQVRPUl8yICc7JwotIyBlbmRpZgotI2VuZGlmCi0KLSNpZm5kZWYgRElSX1NFUEFSQVRPUl8yCi0jIGRlZmluZSBJU19ESVJfU0VQQVJBVE9SKGNoKSAoKGNoKSA9PSBESVJfU0VQQVJBVE9SKQotI2Vsc2UgLyogRElSX1NFUEFSQVRPUl8yICovCi0jIGRlZmluZSBJU19ESVJfU0VQQVJBVE9SKGNoKSBcCi0JKCgoY2gpID09IERJUl9TRVBBUkFUT1IpIHx8ICgoY2gpID09IERJUl9TRVBBUkFUT1JfMikpCi0jZW5kaWYgLyogRElSX1NFUEFSQVRPUl8yICovCi0KLSNpZm5kZWYgUEFUSF9TRVBBUkFUT1JfMgotIyBkZWZpbmUgSVNfUEFUSF9TRVBBUkFUT1IoY2gpICgoY2gpID09IFBBVEhfU0VQQVJBVE9SKQotI2Vsc2UgLyogUEFUSF9TRVBBUkFUT1JfMiAqLwotIyBkZWZpbmUgSVNfUEFUSF9TRVBBUkFUT1IoY2gpICgoY2gpID09IFBBVEhfU0VQQVJBVE9SXzIpCi0jZW5kaWYgLyogUEFUSF9TRVBBUkFUT1JfMiAqLwotCi0jaWZuZGVmIEZPUEVOX1dCCi0jIGRlZmluZSBGT1BFTl9XQiAidyIKLSNlbmRpZgotI2lmbmRlZiBfT19CSU5BUlkKLSMgZGVmaW5lIF9PX0JJTkFSWSAwCi0jZW5kaWYKLQotI2RlZmluZSBYTUFMTE9DKHR5cGUsIG51bSkgICAgICAoKHR5cGUgKikgeG1hbGxvYyAoKG51bSkgKiBzaXplb2YodHlwZSkpKQotI2RlZmluZSBYRlJFRShzdGFsZSkgZG8geyBcCi0gIGlmIChzdGFsZSkgeyBmcmVlICgodm9pZCAqKSBzdGFsZSk7IHN0YWxlID0gMDsgfSBcCi19IHdoaWxlICgwKQotCi0jaWYgZGVmaW5lZChMVF9ERUJVR1dSQVBQRVIpCi1zdGF0aWMgaW50IGx0X2RlYnVnID0gMTsKLSNlbHNlCi1zdGF0aWMgaW50IGx0X2RlYnVnID0gMDsKLSNlbmRpZgotCi1jb25zdCBjaGFyICpwcm9ncmFtX25hbWUgPSAibGlidG9vbC13cmFwcGVyIjsgLyogaW4gY2FzZSB4c3RyZHVwIGZhaWxzICovCi0KLXZvaWQgKnhtYWxsb2MgKHNpemVfdCBudW0pOwotY2hhciAqeHN0cmR1cCAoY29uc3QgY2hhciAqc3RyaW5nKTsKLWNvbnN0IGNoYXIgKmJhc2VfbmFtZSAoY29uc3QgY2hhciAqbmFtZSk7Ci1jaGFyICpmaW5kX2V4ZWN1dGFibGUgKGNvbnN0IGNoYXIgKndyYXBwZXIpOwotY2hhciAqY2hhc2Vfc3ltbGlua3MgKGNvbnN0IGNoYXIgKnBhdGhzcGVjKTsKLWludCBtYWtlX2V4ZWN1dGFibGUgKGNvbnN0IGNoYXIgKnBhdGgpOwotaW50IGNoZWNrX2V4ZWN1dGFibGUgKGNvbnN0IGNoYXIgKnBhdGgpOwotY2hhciAqc3RyZW5kemFwIChjaGFyICpzdHIsIGNvbnN0IGNoYXIgKnBhdCk7Ci12b2lkIGx0X2RlYnVncHJpbnRmIChjb25zdCBjaGFyICpmaWxlLCBpbnQgbGluZSwgY29uc3QgY2hhciAqZm10LCAuLi4pOwotdm9pZCBsdF9mYXRhbCAoY29uc3QgY2hhciAqZmlsZSwgaW50IGxpbmUsIGNvbnN0IGNoYXIgKm1lc3NhZ2UsIC4uLik7Ci1zdGF0aWMgY29uc3QgY2hhciAqbm9ubnVsbCAoY29uc3QgY2hhciAqcyk7Ci1zdGF0aWMgY29uc3QgY2hhciAqbm9uZW1wdHkgKGNvbnN0IGNoYXIgKnMpOwotdm9pZCBsdF9zZXRlbnYgKGNvbnN0IGNoYXIgKm5hbWUsIGNvbnN0IGNoYXIgKnZhbHVlKTsKLWNoYXIgKmx0X2V4dGVuZF9zdHIgKGNvbnN0IGNoYXIgKm9yaWdfdmFsdWUsIGNvbnN0IGNoYXIgKmFkZCwgaW50IHRvX2VuZCk7Ci12b2lkIGx0X3VwZGF0ZV9leGVfcGF0aCAoY29uc3QgY2hhciAqbmFtZSwgY29uc3QgY2hhciAqdmFsdWUpOwotdm9pZCBsdF91cGRhdGVfbGliX3BhdGggKGNvbnN0IGNoYXIgKm5hbWUsIGNvbnN0IGNoYXIgKnZhbHVlKTsKLWNoYXIgKipwcmVwYXJlX3NwYXduIChjaGFyICoqYXJndik7Ci12b2lkIGx0X2R1bXBfc2NyaXB0IChGSUxFICpmKTsKLUVPRgotCi0JICAgIGNhdCA8PEVPRgotdm9sYXRpbGUgY29uc3QgY2hhciAqIE1BR0lDX0VYRSA9ICIkbWFnaWNfZXhlIjsKLWNvbnN0IGNoYXIgKiBMSUJfUEFUSF9WQVJOQU1FID0gIiRzaGxpYnBhdGhfdmFyIjsKLUVPRgotCi0JICAgIGlmIHRlc3QgIiRzaGxpYnBhdGhfb3ZlcnJpZGVzX3J1bnBhdGgiID0geWVzICYmIHRlc3QgLW4gIiRzaGxpYnBhdGhfdmFyIiAmJiB0ZXN0IC1uICIkdGVtcF9ycGF0aCI7IHRoZW4KLSAgICAgICAgICAgICAgZnVuY190b19ob3N0X3BhdGggIiR0ZW1wX3JwYXRoIgotCSAgICAgIGNhdCA8PEVPRgotY29uc3QgY2hhciAqIExJQl9QQVRIX1ZBTFVFICAgPSAiJGZ1bmNfdG9faG9zdF9wYXRoX3Jlc3VsdCI7Ci1FT0YKLQkgICAgZWxzZQotCSAgICAgIGNhdCA8PCJFT0YiCi1jb25zdCBjaGFyICogTElCX1BBVEhfVkFMVUUgICA9ICIiOwotRU9GCi0JICAgIGZpCi0KLQkgICAgaWYgdGVzdCAtbiAiJGRsbHNlYXJjaHBhdGgiOyB0aGVuCi0gICAgICAgICAgICAgIGZ1bmNfdG9faG9zdF9wYXRoICIkZGxsc2VhcmNocGF0aDoiCi0JICAgICAgY2F0IDw8RU9GCi1jb25zdCBjaGFyICogRVhFX1BBVEhfVkFSTkFNRSA9ICJQQVRIIjsKLWNvbnN0IGNoYXIgKiBFWEVfUEFUSF9WQUxVRSAgID0gIiRmdW5jX3RvX2hvc3RfcGF0aF9yZXN1bHQiOwotRU9GCi0JICAgIGVsc2UKLQkgICAgICBjYXQgPDwiRU9GIgotY29uc3QgY2hhciAqIEVYRV9QQVRIX1ZBUk5BTUUgPSAiIjsKLWNvbnN0IGNoYXIgKiBFWEVfUEFUSF9WQUxVRSAgID0gIiI7Ci1FT0YKLQkgICAgZmkKLQotCSAgICBpZiB0ZXN0ICIkZmFzdF9pbnN0YWxsIiA9IHllczsgdGhlbgotCSAgICAgIGNhdCA8PEVPRgotY29uc3QgY2hhciAqIFRBUkdFVF9QUk9HUkFNX05BTUUgPSAibHQtJG91dHB1dG5hbWUiOyAvKiBob3BlZnVsbHksIG5vIC5leGUgKi8KLUVPRgotCSAgICBlbHNlCi0JICAgICAgY2F0IDw8RU9GCi1jb25zdCBjaGFyICogVEFSR0VUX1BST0dSQU1fTkFNRSA9ICIkb3V0cHV0bmFtZSI7IC8qIGhvcGVmdWxseSwgbm8gLmV4ZSAqLwotRU9GCi0JICAgIGZpCi0KLQotCSAgICBjYXQgPDwiRU9GIgotCi0jZGVmaW5lIExUV1JBUFBFUl9PUFRJT05fUFJFRklYICAgICAgICAgIi0tbHQtIgotCi1zdGF0aWMgY29uc3QgY2hhciAqbHR3cmFwcGVyX29wdGlvbl9wcmVmaXggPSBMVFdSQVBQRVJfT1BUSU9OX1BSRUZJWDsKLXN0YXRpYyBjb25zdCBjaGFyICpkdW1wc2NyaXB0X29wdCAgICAgICA9IExUV1JBUFBFUl9PUFRJT05fUFJFRklYICJkdW1wLXNjcmlwdCI7Ci1zdGF0aWMgY29uc3QgY2hhciAqZGVidWdfb3B0ICAgICAgICAgICAgPSBMVFdSQVBQRVJfT1BUSU9OX1BSRUZJWCAiZGVidWciOwotCi1pbnQKLW1haW4gKGludCBhcmdjLCBjaGFyICphcmd2W10pCi17Ci0gIGNoYXIgKipuZXdhcmd6OwotICBpbnQgIG5ld2FyZ2M7Ci0gIGNoYXIgKnRtcF9wYXRoc3BlYzsKLSAgY2hhciAqYWN0dWFsX2N3cmFwcGVyX3BhdGg7Ci0gIGNoYXIgKmFjdHVhbF9jd3JhcHBlcl9uYW1lOwotICBjaGFyICp0YXJnZXRfbmFtZTsKLSAgY2hhciAqbHRfYXJndl96ZXJvOwotICBpbnRwdHJfdCBydmFsID0gMTI3OwotCi0gIGludCBpOwotCi0gIHByb2dyYW1fbmFtZSA9IChjaGFyICopIHhzdHJkdXAgKGJhc2VfbmFtZSAoYXJndlswXSkpOwotICBuZXdhcmd6ID0gWE1BTExPQyAoY2hhciAqLCBhcmdjICsgMSk7Ci0KLSAgLyogdmVyeSBzaW1wbGUgYXJnIHBhcnNpbmc7IGRvbid0IHdhbnQgdG8gcmVseSBvbiBnZXRvcHQKLSAgICogYWxzbywgY29weSBhbGwgbm9uIGN3cmFwcGVyIG9wdGlvbnMgdG8gbmV3YXJneiwgZXhjZXB0Ci0gICAqIGFyZ3pbMF0sIHdoaWNoIGlzIGhhbmRsZWQgZGlmZmVyZW50bHkKLSAgICovCi0gIG5ld2FyZ2M9MDsKLSAgZm9yIChpID0gMTsgaSA8IGFyZ2M7IGkrKykKLSAgICB7Ci0gICAgICBpZiAoc3RyY21wIChhcmd2W2ldLCBkdW1wc2NyaXB0X29wdCkgPT0gMCkKLQl7Ci1FT0YKLQkgICAgY2FzZSAiJGhvc3QiIGluCi0JICAgICAgKm1pbmd3KiB8ICpjeWd3aW4qICkKLQkJIyBtYWtlIHN0ZG91dCB1c2UgInVuaXgiIGxpbmUgZW5kaW5ncwotCQllY2hvICIgICAgICAgICAgc2V0bW9kZSgxLF9PX0JJTkFSWSk7IgotCQk7OwotCSAgICAgIGVzYWMKLQotCSAgICBjYXQgPDwiRU9GIgotCSAgbHRfZHVtcF9zY3JpcHQgKHN0ZG91dCk7Ci0JICByZXR1cm4gMDsKLQl9Ci0gICAgICBpZiAoc3RyY21wIChhcmd2W2ldLCBkZWJ1Z19vcHQpID09IDApCi0JewotICAgICAgICAgIGx0X2RlYnVnID0gMTsKLSAgICAgICAgICBjb250aW51ZTsKLQl9Ci0gICAgICBpZiAoc3RyY21wIChhcmd2W2ldLCBsdHdyYXBwZXJfb3B0aW9uX3ByZWZpeCkgPT0gMCkKLSAgICAgICAgewotICAgICAgICAgIC8qIGhvd2V2ZXIsIGlmIHRoZXJlIGlzIGFuIG9wdGlvbiBpbiB0aGUgTFRXUkFQUEVSX09QVElPTl9QUkVGSVgKLSAgICAgICAgICAgICBuYW1lc3BhY2UsIGJ1dCBpdCBpcyBub3Qgb25lIG9mIHRoZSBvbmVzIHdlIGtub3cgYWJvdXQgYW5kCi0gICAgICAgICAgICAgaGF2ZSBhbHJlYWR5IGRlYWx0IHdpdGgsIGFib3ZlIChpbmx1ZGluZyBkdW1wLXNjcmlwdCksIHRoZW4KLSAgICAgICAgICAgICByZXBvcnQgYW4gZXJyb3IuIE90aGVyd2lzZSwgdGFyZ2V0cyBtaWdodCBiZWdpbiB0byBiZWxpZXZlCi0gICAgICAgICAgICAgdGhleSBhcmUgYWxsb3dlZCB0byB1c2Ugb3B0aW9ucyBpbiB0aGUgTFRXUkFQUEVSX09QVElPTl9QUkVGSVgKLSAgICAgICAgICAgICBuYW1lc3BhY2UuIFRoZSBmaXJzdCB0aW1lIGFueSB1c2VyIGNvbXBsYWlucyBhYm91dCB0aGlzLCB3ZSdsbAotICAgICAgICAgICAgIG5lZWQgdG8gbWFrZSBMVFdSQVBQRVJfT1BUSU9OX1BSRUZJWCBhIGNvbmZpZ3VyZS10aW1lIG9wdGlvbgotICAgICAgICAgICAgIG9yIGEgY29uZmlndXJlLmFjLXNldHRhYmxlIHZhbHVlLgotICAgICAgICAgICAqLwotICAgICAgICAgIGx0X2ZhdGFsIChfX0ZJTEVfXywgX19MSU5FX18sCi0JCSAgICAidW5yZWNvZ25pemVkICVzIG9wdGlvbjogJyVzJyIsCi0gICAgICAgICAgICAgICAgICAgIGx0d3JhcHBlcl9vcHRpb25fcHJlZml4LCBhcmd2W2ldKTsKLSAgICAgICAgfQotICAgICAgLyogb3RoZXJ3aXNlIC4uLiAqLwotICAgICAgbmV3YXJnelsrK25ld2FyZ2NdID0geHN0cmR1cCAoYXJndltpXSk7Ci0gICAgfQotICBuZXdhcmd6WysrbmV3YXJnY10gPSBOVUxMOwotCi1FT0YKLQkgICAgY2F0IDw8RU9GCi0gIC8qIFRoZSBHTlUgYmFubmVyIG11c3QgYmUgdGhlIGZpcnN0IG5vbi1lcnJvciBkZWJ1ZyBtZXNzYWdlICovCi0gIGx0X2RlYnVncHJpbnRmIChfX0ZJTEVfXywgX19MSU5FX18sICJsaWJ0b29sIHdyYXBwZXIgKEdOVSAkUEFDS0FHRSRUSU1FU1RBTVApICRWRVJTSU9OXG4iKTsKLUVPRgotCSAgICBjYXQgPDwiRU9GIgotICBsdF9kZWJ1Z3ByaW50ZiAoX19GSUxFX18sIF9fTElORV9fLCAiKG1haW4pIGFyZ3ZbMF06ICVzXG4iLCBhcmd2WzBdKTsKLSAgbHRfZGVidWdwcmludGYgKF9fRklMRV9fLCBfX0xJTkVfXywgIihtYWluKSBwcm9ncmFtX25hbWU6ICVzXG4iLCBwcm9ncmFtX25hbWUpOwotCi0gIHRtcF9wYXRoc3BlYyA9IGZpbmRfZXhlY3V0YWJsZSAoYXJndlswXSk7Ci0gIGlmICh0bXBfcGF0aHNwZWMgPT0gTlVMTCkKLSAgICBsdF9mYXRhbCAoX19GSUxFX18sIF9fTElORV9fLCAiY291bGRuJ3QgZmluZCAlcyIsIGFyZ3ZbMF0pOwotICBsdF9kZWJ1Z3ByaW50ZiAoX19GSUxFX18sIF9fTElORV9fLAotICAgICAgICAgICAgICAgICAgIihtYWluKSBmb3VuZCBleGUgKGJlZm9yZSBzeW1saW5rIGNoYXNlKSBhdDogJXNcbiIsCi0JCSAgdG1wX3BhdGhzcGVjKTsKLQotICBhY3R1YWxfY3dyYXBwZXJfcGF0aCA9IGNoYXNlX3N5bWxpbmtzICh0bXBfcGF0aHNwZWMpOwotICBsdF9kZWJ1Z3ByaW50ZiAoX19GSUxFX18sIF9fTElORV9fLAotICAgICAgICAgICAgICAgICAgIihtYWluKSBmb3VuZCBleGUgKGFmdGVyIHN5bWxpbmsgY2hhc2UpIGF0OiAlc1xuIiwKLQkJICBhY3R1YWxfY3dyYXBwZXJfcGF0aCk7Ci0gIFhGUkVFICh0bXBfcGF0aHNwZWMpOwotCi0gIGFjdHVhbF9jd3JhcHBlcl9uYW1lID0geHN0cmR1cCAoYmFzZV9uYW1lIChhY3R1YWxfY3dyYXBwZXJfcGF0aCkpOwotICBzdHJlbmR6YXAgKGFjdHVhbF9jd3JhcHBlcl9wYXRoLCBhY3R1YWxfY3dyYXBwZXJfbmFtZSk7Ci0KLSAgLyogd3JhcHBlciBuYW1lIHRyYW5zZm9ybXMgKi8KLSAgc3RyZW5kemFwIChhY3R1YWxfY3dyYXBwZXJfbmFtZSwgIi5leGUiKTsKLSAgdG1wX3BhdGhzcGVjID0gbHRfZXh0ZW5kX3N0ciAoYWN0dWFsX2N3cmFwcGVyX25hbWUsICIuZXhlIiwgMSk7Ci0gIFhGUkVFIChhY3R1YWxfY3dyYXBwZXJfbmFtZSk7Ci0gIGFjdHVhbF9jd3JhcHBlcl9uYW1lID0gdG1wX3BhdGhzcGVjOwotICB0bXBfcGF0aHNwZWMgPSAwOwotCi0gIC8qIHRhcmdldF9uYW1lIHRyYW5zZm9ybXMgLS0gdXNlIGFjdHVhbCB0YXJnZXQgcHJvZ3JhbSBuYW1lOyBtaWdodCBoYXZlIGx0LSBwcmVmaXggKi8KLSAgdGFyZ2V0X25hbWUgPSB4c3RyZHVwIChiYXNlX25hbWUgKFRBUkdFVF9QUk9HUkFNX05BTUUpKTsKLSAgc3RyZW5kemFwICh0YXJnZXRfbmFtZSwgIi5leGUiKTsKLSAgdG1wX3BhdGhzcGVjID0gbHRfZXh0ZW5kX3N0ciAodGFyZ2V0X25hbWUsICIuZXhlIiwgMSk7Ci0gIFhGUkVFICh0YXJnZXRfbmFtZSk7Ci0gIHRhcmdldF9uYW1lID0gdG1wX3BhdGhzcGVjOwotICB0bXBfcGF0aHNwZWMgPSAwOwotCi0gIGx0X2RlYnVncHJpbnRmIChfX0ZJTEVfXywgX19MSU5FX18sCi0JCSAgIihtYWluKSBsaWJ0b29sIHRhcmdldCBuYW1lOiAlc1xuIiwKLQkJICB0YXJnZXRfbmFtZSk7Ci1FT0YKLQotCSAgICBjYXQgPDxFT0YKLSAgbmV3YXJnelswXSA9Ci0gICAgWE1BTExPQyAoY2hhciwgKHN0cmxlbiAoYWN0dWFsX2N3cmFwcGVyX3BhdGgpICsKLQkJICAgIHN0cmxlbiAoIiRvYmpkaXIiKSArIDEgKyBzdHJsZW4gKGFjdHVhbF9jd3JhcHBlcl9uYW1lKSArIDEpKTsKLSAgc3RyY3B5IChuZXdhcmd6WzBdLCBhY3R1YWxfY3dyYXBwZXJfcGF0aCk7Ci0gIHN0cmNhdCAobmV3YXJnelswXSwgIiRvYmpkaXIiKTsKLSAgc3RyY2F0IChuZXdhcmd6WzBdLCAiLyIpOwotRU9GCi0KLQkgICAgY2F0IDw8IkVPRiIKLSAgLyogc3RvcCBoZXJlLCBhbmQgY29weSBzbyB3ZSBkb24ndCBoYXZlIHRvIGRvIHRoaXMgdHdpY2UgKi8KLSAgdG1wX3BhdGhzcGVjID0geHN0cmR1cCAobmV3YXJnelswXSk7Ci0KLSAgLyogZG8gTk9UIHdhbnQgdGhlIGx0LSBwcmVmaXggaGVyZSwgc28gdXNlIGFjdHVhbF9jd3JhcHBlcl9uYW1lICovCi0gIHN0cmNhdCAobmV3YXJnelswXSwgYWN0dWFsX2N3cmFwcGVyX25hbWUpOwotCi0gIC8qIERPIHdhbnQgdGhlIGx0LSBwcmVmaXggaGVyZSBpZiBpdCBleGlzdHMsIHNvIHVzZSB0YXJnZXRfbmFtZSAqLwotICBsdF9hcmd2X3plcm8gPSBsdF9leHRlbmRfc3RyICh0bXBfcGF0aHNwZWMsIHRhcmdldF9uYW1lLCAxKTsKLSAgWEZSRUUgKHRtcF9wYXRoc3BlYyk7Ci0gIHRtcF9wYXRoc3BlYyA9IE5VTEw7Ci1FT0YKLQotCSAgICBjYXNlICRob3N0X29zIGluCi0JICAgICAgbWluZ3cqKQotCSAgICBjYXQgPDwiRU9GIgotICB7Ci0gICAgY2hhciogcDsKLSAgICB3aGlsZSAoKHAgPSBzdHJjaHIgKG5ld2FyZ3pbMF0sICdcXCcpKSAhPSBOVUxMKQotICAgICAgewotCSpwID0gJy8nOwotICAgICAgfQotICAgIHdoaWxlICgocCA9IHN0cmNociAobHRfYXJndl96ZXJvLCAnXFwnKSkgIT0gTlVMTCkKLSAgICAgIHsKLQkqcCA9ICcvJzsKLSAgICAgIH0KLSAgfQotRU9GCi0JICAgIDs7Ci0JICAgIGVzYWMKLQotCSAgICBjYXQgPDwiRU9GIgotICBYRlJFRSAodGFyZ2V0X25hbWUpOwotICBYRlJFRSAoYWN0dWFsX2N3cmFwcGVyX3BhdGgpOwotICBYRlJFRSAoYWN0dWFsX2N3cmFwcGVyX25hbWUpOwotCi0gIGx0X3NldGVudiAoIkJJTl9TSCIsICJ4cGc0Iik7IC8qIGZvciBUcnU2NCAqLwotICBsdF9zZXRlbnYgKCJEVUFMQ0FTRSIsICIxIik7ICAvKiBmb3IgTVNLIHNoICovCi0gIC8qIFVwZGF0ZSB0aGUgRExMIHNlYXJjaHBhdGguICBFWEVfUEFUSF9WQUxVRSAoJGRsbHNlYXJjaHBhdGgpIG11c3QKLSAgICAgYmUgcHJlcGVuZGVkIGJlZm9yZSAodGhhdCBpcywgYXBwZWFyIGFmdGVyKSBMSUJfUEFUSF9WQUxVRSAoJHRlbXBfcnBhdGgpCi0gICAgIGJlY2F1c2Ugb24gV2luZG93cywgYm90aCAqX1ZBUk5BTUVzIGFyZSBQQVRIIGJ1dCB1bmluc3RhbGxlZAotICAgICBsaWJyYXJpZXMgbXVzdCBjb21lIGZpcnN0LiAqLwotICBsdF91cGRhdGVfZXhlX3BhdGggKEVYRV9QQVRIX1ZBUk5BTUUsIEVYRV9QQVRIX1ZBTFVFKTsKLSAgbHRfdXBkYXRlX2xpYl9wYXRoIChMSUJfUEFUSF9WQVJOQU1FLCBMSUJfUEFUSF9WQUxVRSk7Ci0KLSAgbHRfZGVidWdwcmludGYgKF9fRklMRV9fLCBfX0xJTkVfXywgIihtYWluKSBsdF9hcmd2X3plcm86ICVzXG4iLAotCQkgIG5vbm51bGwgKGx0X2FyZ3ZfemVybykpOwotICBmb3IgKGkgPSAwOyBpIDwgbmV3YXJnYzsgaSsrKQotICAgIHsKLSAgICAgIGx0X2RlYnVncHJpbnRmIChfX0ZJTEVfXywgX19MSU5FX18sICIobWFpbikgbmV3YXJnelslZF06ICVzXG4iLAotCQkgICAgICBpLCBub25udWxsIChuZXdhcmd6W2ldKSk7Ci0gICAgfQotCi1FT0YKLQotCSAgICBjYXNlICRob3N0X29zIGluCi0JICAgICAgbWluZ3cqKQotCQljYXQgPDwiRU9GIgotICAvKiBleGVjdiBkb2Vzbid0IGFjdHVhbGx5IHdvcmsgb24gbWluZ3cgYXMgZXhwZWN0ZWQgb24gdW5peCAqLwotICBuZXdhcmd6ID0gcHJlcGFyZV9zcGF3biAobmV3YXJneik7Ci0gIHJ2YWwgPSBfc3Bhd252IChfUF9XQUlULCBsdF9hcmd2X3plcm8sIChjb25zdCBjaGFyICogY29uc3QgKikgbmV3YXJneik7Ci0gIGlmIChydmFsID09IC0xKQotICAgIHsKLSAgICAgIC8qIGZhaWxlZCB0byBzdGFydCBwcm9jZXNzICovCi0gICAgICBsdF9kZWJ1Z3ByaW50ZiAoX19GSUxFX18sIF9fTElORV9fLAotCQkgICAgICAiKG1haW4pIGZhaWxlZCB0byBsYXVuY2ggdGFyZ2V0IFwiJXNcIjogJXNcbiIsCi0JCSAgICAgIGx0X2FyZ3ZfemVybywgbm9ubnVsbCAoc3RyZXJyb3IgKGVycm5vKSkpOwotICAgICAgcmV0dXJuIDEyNzsKLSAgICB9Ci0gIHJldHVybiBydmFsOwotRU9GCi0JCTs7Ci0JICAgICAgKikKLQkJY2F0IDw8IkVPRiIKLSAgZXhlY3YgKGx0X2FyZ3ZfemVybywgbmV3YXJneik7Ci0gIHJldHVybiBydmFsOyAvKiA9MTI3LCBidXQgYXZvaWRzIHVudXNlZCB2YXJpYWJsZSB3YXJuaW5nICovCi1FT0YKLQkJOzsKLQkgICAgZXNhYwotCi0JICAgIGNhdCA8PCJFT0YiCi19Ci0KLXZvaWQgKgoteG1hbGxvYyAoc2l6ZV90IG51bSkKLXsKLSAgdm9pZCAqcCA9ICh2b2lkICopIG1hbGxvYyAobnVtKTsKLSAgaWYgKCFwKQotICAgIGx0X2ZhdGFsIChfX0ZJTEVfXywgX19MSU5FX18sICJtZW1vcnkgZXhoYXVzdGVkIik7Ci0KLSAgcmV0dXJuIHA7Ci19Ci0KLWNoYXIgKgoteHN0cmR1cCAoY29uc3QgY2hhciAqc3RyaW5nKQotewotICByZXR1cm4gc3RyaW5nID8gc3RyY3B5ICgoY2hhciAqKSB4bWFsbG9jIChzdHJsZW4gKHN0cmluZykgKyAxKSwKLQkJCSAgc3RyaW5nKSA6IE5VTEw7Ci19Ci0KLWNvbnN0IGNoYXIgKgotYmFzZV9uYW1lIChjb25zdCBjaGFyICpuYW1lKQotewotICBjb25zdCBjaGFyICpiYXNlOwotCi0jaWYgZGVmaW5lZCAoSEFWRV9ET1NfQkFTRURfRklMRV9TWVNURU0pCi0gIC8qIFNraXAgb3ZlciB0aGUgZGlzayBuYW1lIGluIE1TRE9TIHBhdGhuYW1lcy4gKi8KLSAgaWYgKGlzYWxwaGEgKCh1bnNpZ25lZCBjaGFyKSBuYW1lWzBdKSAmJiBuYW1lWzFdID09ICc6JykKLSAgICBuYW1lICs9IDI7Ci0jZW5kaWYKLQotICBmb3IgKGJhc2UgPSBuYW1lOyAqbmFtZTsgbmFtZSsrKQotICAgIGlmIChJU19ESVJfU0VQQVJBVE9SICgqbmFtZSkpCi0gICAgICBiYXNlID0gbmFtZSArIDE7Ci0gIHJldHVybiBiYXNlOwotfQotCi1pbnQKLWNoZWNrX2V4ZWN1dGFibGUgKGNvbnN0IGNoYXIgKnBhdGgpCi17Ci0gIHN0cnVjdCBzdGF0IHN0OwotCi0gIGx0X2RlYnVncHJpbnRmIChfX0ZJTEVfXywgX19MSU5FX18sICIoY2hlY2tfZXhlY3V0YWJsZSk6ICVzXG4iLAotICAgICAgICAgICAgICAgICAgbm9uZW1wdHkgKHBhdGgpKTsKLSAgaWYgKCghcGF0aCkgfHwgKCEqcGF0aCkpCi0gICAgcmV0dXJuIDA7Ci0KLSAgaWYgKChzdGF0IChwYXRoLCAmc3QpID49IDApCi0gICAgICAmJiAoc3Quc3RfbW9kZSAmIChTX0lYVVNSIHwgU19JWEdSUCB8IFNfSVhPVEgpKSkKLSAgICByZXR1cm4gMTsKLSAgZWxzZQotICAgIHJldHVybiAwOwotfQotCi1pbnQKLW1ha2VfZXhlY3V0YWJsZSAoY29uc3QgY2hhciAqcGF0aCkKLXsKLSAgaW50IHJ2YWwgPSAwOwotICBzdHJ1Y3Qgc3RhdCBzdDsKLQotICBsdF9kZWJ1Z3ByaW50ZiAoX19GSUxFX18sIF9fTElORV9fLCAiKG1ha2VfZXhlY3V0YWJsZSk6ICVzXG4iLAotICAgICAgICAgICAgICAgICAgbm9uZW1wdHkgKHBhdGgpKTsKLSAgaWYgKCghcGF0aCkgfHwgKCEqcGF0aCkpCi0gICAgcmV0dXJuIDA7Ci0KLSAgaWYgKHN0YXQgKHBhdGgsICZzdCkgPj0gMCkKLSAgICB7Ci0gICAgICBydmFsID0gY2htb2QgKHBhdGgsIHN0LnN0X21vZGUgfCBTX0lYT1RIIHwgU19JWEdSUCB8IFNfSVhVU1IpOwotICAgIH0KLSAgcmV0dXJuIHJ2YWw7Ci19Ci0KLS8qIFNlYXJjaGVzIGZvciB0aGUgZnVsbCBwYXRoIG9mIHRoZSB3cmFwcGVyLiAgUmV0dXJucwotICAgbmV3bHkgYWxsb2NhdGVkIGZ1bGwgcGF0aCBuYW1lIGlmIGZvdW5kLCBOVUxMIG90aGVyd2lzZQotICAgRG9lcyBub3QgY2hhc2Ugc3ltbGlua3MsIGV2ZW4gb24gcGxhdGZvcm1zIHRoYXQgc3VwcG9ydCB0aGVtLgotKi8KLWNoYXIgKgotZmluZF9leGVjdXRhYmxlIChjb25zdCBjaGFyICp3cmFwcGVyKQotewotICBpbnQgaGFzX3NsYXNoID0gMDsKLSAgY29uc3QgY2hhciAqcDsKLSAgY29uc3QgY2hhciAqcF9uZXh0OwotICAvKiBzdGF0aWMgYnVmZmVyIGZvciBnZXRjd2QgKi8KLSAgY2hhciB0bXBbTFRfUEFUSE1BWCArIDFdOwotICBpbnQgdG1wX2xlbjsKLSAgY2hhciAqY29uY2F0X25hbWU7Ci0KLSAgbHRfZGVidWdwcmludGYgKF9fRklMRV9fLCBfX0xJTkVfXywgIihmaW5kX2V4ZWN1dGFibGUpOiAlc1xuIiwKLSAgICAgICAgICAgICAgICAgIG5vbmVtcHR5ICh3cmFwcGVyKSk7Ci0KLSAgaWYgKCh3cmFwcGVyID09IE5VTEwpIHx8ICgqd3JhcHBlciA9PSAnXDAnKSkKLSAgICByZXR1cm4gTlVMTDsKLQotICAvKiBBYnNvbHV0ZSBwYXRoPyAqLwotI2lmIGRlZmluZWQgKEhBVkVfRE9TX0JBU0VEX0ZJTEVfU1lTVEVNKQotICBpZiAoaXNhbHBoYSAoKHVuc2lnbmVkIGNoYXIpIHdyYXBwZXJbMF0pICYmIHdyYXBwZXJbMV0gPT0gJzonKQotICAgIHsKLSAgICAgIGNvbmNhdF9uYW1lID0geHN0cmR1cCAod3JhcHBlcik7Ci0gICAgICBpZiAoY2hlY2tfZXhlY3V0YWJsZSAoY29uY2F0X25hbWUpKQotCXJldHVybiBjb25jYXRfbmFtZTsKLSAgICAgIFhGUkVFIChjb25jYXRfbmFtZSk7Ci0gICAgfQotICBlbHNlCi0gICAgewotI2VuZGlmCi0gICAgICBpZiAoSVNfRElSX1NFUEFSQVRPUiAod3JhcHBlclswXSkpCi0JewotCSAgY29uY2F0X25hbWUgPSB4c3RyZHVwICh3cmFwcGVyKTsKLQkgIGlmIChjaGVja19leGVjdXRhYmxlIChjb25jYXRfbmFtZSkpCi0JICAgIHJldHVybiBjb25jYXRfbmFtZTsKLQkgIFhGUkVFIChjb25jYXRfbmFtZSk7Ci0JfQotI2lmIGRlZmluZWQgKEhBVkVfRE9TX0JBU0VEX0ZJTEVfU1lTVEVNKQotICAgIH0KLSNlbmRpZgotCi0gIGZvciAocCA9IHdyYXBwZXI7ICpwOyBwKyspCi0gICAgaWYgKCpwID09ICcvJykKLSAgICAgIHsKLQloYXNfc2xhc2ggPSAxOwotCWJyZWFrOwotICAgICAgfQotICBpZiAoIWhhc19zbGFzaCkKLSAgICB7Ci0gICAgICAvKiBubyBzbGFzaGVzOyBzZWFyY2ggUEFUSCAqLwotICAgICAgY29uc3QgY2hhciAqcGF0aCA9IGdldGVudiAoIlBBVEgiKTsKLSAgICAgIGlmIChwYXRoICE9IE5VTEwpCi0JewotCSAgZm9yIChwID0gcGF0aDsgKnA7IHAgPSBwX25leHQpCi0JICAgIHsKLQkgICAgICBjb25zdCBjaGFyICpxOwotCSAgICAgIHNpemVfdCBwX2xlbjsKLQkgICAgICBmb3IgKHEgPSBwOyAqcTsgcSsrKQotCQlpZiAoSVNfUEFUSF9TRVBBUkFUT1IgKCpxKSkKLQkJICBicmVhazsKLQkgICAgICBwX2xlbiA9IHEgLSBwOwotCSAgICAgIHBfbmV4dCA9ICgqcSA9PSAnXDAnID8gcSA6IHEgKyAxKTsKLQkgICAgICBpZiAocF9sZW4gPT0gMCkKLQkJewotCQkgIC8qIGVtcHR5IHBhdGg6IGN1cnJlbnQgZGlyZWN0b3J5ICovCi0JCSAgaWYgKGdldGN3ZCAodG1wLCBMVF9QQVRITUFYKSA9PSBOVUxMKQotCQkgICAgbHRfZmF0YWwgKF9fRklMRV9fLCBfX0xJTkVfXywgImdldGN3ZCBmYWlsZWQ6ICVzIiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5vbm51bGwgKHN0cmVycm9yIChlcnJubykpKTsKLQkJICB0bXBfbGVuID0gc3RybGVuICh0bXApOwotCQkgIGNvbmNhdF9uYW1lID0KLQkJICAgIFhNQUxMT0MgKGNoYXIsIHRtcF9sZW4gKyAxICsgc3RybGVuICh3cmFwcGVyKSArIDEpOwotCQkgIG1lbWNweSAoY29uY2F0X25hbWUsIHRtcCwgdG1wX2xlbik7Ci0JCSAgY29uY2F0X25hbWVbdG1wX2xlbl0gPSAnLyc7Ci0JCSAgc3RyY3B5IChjb25jYXRfbmFtZSArIHRtcF9sZW4gKyAxLCB3cmFwcGVyKTsKLQkJfQotCSAgICAgIGVsc2UKLQkJewotCQkgIGNvbmNhdF9uYW1lID0KLQkJICAgIFhNQUxMT0MgKGNoYXIsIHBfbGVuICsgMSArIHN0cmxlbiAod3JhcHBlcikgKyAxKTsKLQkJICBtZW1jcHkgKGNvbmNhdF9uYW1lLCBwLCBwX2xlbik7Ci0JCSAgY29uY2F0X25hbWVbcF9sZW5dID0gJy8nOwotCQkgIHN0cmNweSAoY29uY2F0X25hbWUgKyBwX2xlbiArIDEsIHdyYXBwZXIpOwotCQl9Ci0JICAgICAgaWYgKGNoZWNrX2V4ZWN1dGFibGUgKGNvbmNhdF9uYW1lKSkKLQkJcmV0dXJuIGNvbmNhdF9uYW1lOwotCSAgICAgIFhGUkVFIChjb25jYXRfbmFtZSk7Ci0JICAgIH0KLQl9Ci0gICAgICAvKiBub3QgZm91bmQgaW4gUEFUSDsgYXNzdW1lIGN1cmRpciAqLwotICAgIH0KLSAgLyogUmVsYXRpdmUgcGF0aCB8IG5vdCBmb3VuZCBpbiBwYXRoOiBwcmVwZW5kIGN3ZCAqLwotICBpZiAoZ2V0Y3dkICh0bXAsIExUX1BBVEhNQVgpID09IE5VTEwpCi0gICAgbHRfZmF0YWwgKF9fRklMRV9fLCBfX0xJTkVfXywgImdldGN3ZCBmYWlsZWQ6ICVzIiwKLSAgICAgICAgICAgICAgbm9ubnVsbCAoc3RyZXJyb3IgKGVycm5vKSkpOwotICB0bXBfbGVuID0gc3RybGVuICh0bXApOwotICBjb25jYXRfbmFtZSA9IFhNQUxMT0MgKGNoYXIsIHRtcF9sZW4gKyAxICsgc3RybGVuICh3cmFwcGVyKSArIDEpOwotICBtZW1jcHkgKGNvbmNhdF9uYW1lLCB0bXAsIHRtcF9sZW4pOwotICBjb25jYXRfbmFtZVt0bXBfbGVuXSA9ICcvJzsKLSAgc3RyY3B5IChjb25jYXRfbmFtZSArIHRtcF9sZW4gKyAxLCB3cmFwcGVyKTsKLQotICBpZiAoY2hlY2tfZXhlY3V0YWJsZSAoY29uY2F0X25hbWUpKQotICAgIHJldHVybiBjb25jYXRfbmFtZTsKLSAgWEZSRUUgKGNvbmNhdF9uYW1lKTsKLSAgcmV0dXJuIE5VTEw7Ci19Ci0KLWNoYXIgKgotY2hhc2Vfc3ltbGlua3MgKGNvbnN0IGNoYXIgKnBhdGhzcGVjKQotewotI2lmbmRlZiBTX0lTTE5LCi0gIHJldHVybiB4c3RyZHVwIChwYXRoc3BlYyk7Ci0jZWxzZQotICBjaGFyIGJ1ZltMVF9QQVRITUFYXTsKLSAgc3RydWN0IHN0YXQgczsKLSAgY2hhciAqdG1wX3BhdGhzcGVjID0geHN0cmR1cCAocGF0aHNwZWMpOwotICBjaGFyICpwOwotICBpbnQgaGFzX3N5bWxpbmtzID0gMDsKLSAgd2hpbGUgKHN0cmxlbiAodG1wX3BhdGhzcGVjKSAmJiAhaGFzX3N5bWxpbmtzKQotICAgIHsKLSAgICAgIGx0X2RlYnVncHJpbnRmIChfX0ZJTEVfXywgX19MSU5FX18sCi0JCSAgICAgICJjaGVja2luZyBwYXRoIGNvbXBvbmVudCBmb3Igc3ltbGlua3M6ICVzXG4iLAotCQkgICAgICB0bXBfcGF0aHNwZWMpOwotICAgICAgaWYgKGxzdGF0ICh0bXBfcGF0aHNwZWMsICZzKSA9PSAwKQotCXsKLQkgIGlmIChTX0lTTE5LIChzLnN0X21vZGUpICE9IDApCi0JICAgIHsKLQkgICAgICBoYXNfc3ltbGlua3MgPSAxOwotCSAgICAgIGJyZWFrOwotCSAgICB9Ci0KLQkgIC8qIHNlYXJjaCBiYWNrd2FyZHMgZm9yIGxhc3QgRElSX1NFUEFSQVRPUiAqLwotCSAgcCA9IHRtcF9wYXRoc3BlYyArIHN0cmxlbiAodG1wX3BhdGhzcGVjKSAtIDE7Ci0JICB3aGlsZSAoKHAgPiB0bXBfcGF0aHNwZWMpICYmICghSVNfRElSX1NFUEFSQVRPUiAoKnApKSkKLQkgICAgcC0tOwotCSAgaWYgKChwID09IHRtcF9wYXRoc3BlYykgJiYgKCFJU19ESVJfU0VQQVJBVE9SICgqcCkpKQotCSAgICB7Ci0JICAgICAgLyogbm8gbW9yZSBESVJfU0VQQVJBVE9SUyBsZWZ0ICovCi0JICAgICAgYnJlYWs7Ci0JICAgIH0KLQkgICpwID0gJ1wwJzsKLQl9Ci0gICAgICBlbHNlCi0JewotCSAgbHRfZmF0YWwgKF9fRklMRV9fLCBfX0xJTkVfXywKLQkJICAgICJlcnJvciBhY2Nlc3NpbmcgZmlsZSBcIiVzXCI6ICVzIiwKLQkJICAgIHRtcF9wYXRoc3BlYywgbm9ubnVsbCAoc3RyZXJyb3IgKGVycm5vKSkpOwotCX0KLSAgICB9Ci0gIFhGUkVFICh0bXBfcGF0aHNwZWMpOwotCi0gIGlmICghaGFzX3N5bWxpbmtzKQotICAgIHsKLSAgICAgIHJldHVybiB4c3RyZHVwIChwYXRoc3BlYyk7Ci0gICAgfQotCi0gIHRtcF9wYXRoc3BlYyA9IHJlYWxwYXRoIChwYXRoc3BlYywgYnVmKTsKLSAgaWYgKHRtcF9wYXRoc3BlYyA9PSAwKQotICAgIHsKLSAgICAgIGx0X2ZhdGFsIChfX0ZJTEVfXywgX19MSU5FX18sCi0JCSJjb3VsZCBub3QgZm9sbG93IHN5bWxpbmtzIGZvciAlcyIsIHBhdGhzcGVjKTsKLSAgICB9Ci0gIHJldHVybiB4c3RyZHVwICh0bXBfcGF0aHNwZWMpOwotI2VuZGlmCi19Ci0KLWNoYXIgKgotc3RyZW5kemFwIChjaGFyICpzdHIsIGNvbnN0IGNoYXIgKnBhdCkKLXsKLSAgc2l6ZV90IGxlbiwgcGF0bGVuOwotCi0gIGFzc2VydCAoc3RyICE9IE5VTEwpOwotICBhc3NlcnQgKHBhdCAhPSBOVUxMKTsKLQotICBsZW4gPSBzdHJsZW4gKHN0cik7Ci0gIHBhdGxlbiA9IHN0cmxlbiAocGF0KTsKLQotICBpZiAocGF0bGVuIDw9IGxlbikKLSAgICB7Ci0gICAgICBzdHIgKz0gbGVuIC0gcGF0bGVuOwotICAgICAgaWYgKHN0cmNtcCAoc3RyLCBwYXQpID09IDApCi0JKnN0ciA9ICdcMCc7Ci0gICAgfQotICByZXR1cm4gc3RyOwotfQotCi12b2lkCi1sdF9kZWJ1Z3ByaW50ZiAoY29uc3QgY2hhciAqZmlsZSwgaW50IGxpbmUsIGNvbnN0IGNoYXIgKmZtdCwgLi4uKQotewotICB2YV9saXN0IGFyZ3M7Ci0gIGlmIChsdF9kZWJ1ZykKLSAgICB7Ci0gICAgICAodm9pZCkgZnByaW50ZiAoc3RkZXJyLCAiJXM6JXM6JWQ6ICIsIHByb2dyYW1fbmFtZSwgZmlsZSwgbGluZSk7Ci0gICAgICB2YV9zdGFydCAoYXJncywgZm10KTsKLSAgICAgICh2b2lkKSB2ZnByaW50ZiAoc3RkZXJyLCBmbXQsIGFyZ3MpOwotICAgICAgdmFfZW5kIChhcmdzKTsKLSAgICB9Ci19Ci0KLXN0YXRpYyB2b2lkCi1sdF9lcnJvcl9jb3JlIChpbnQgZXhpdF9zdGF0dXMsIGNvbnN0IGNoYXIgKmZpbGUsCi0JICAgICAgIGludCBsaW5lLCBjb25zdCBjaGFyICptb2RlLAotCSAgICAgICBjb25zdCBjaGFyICptZXNzYWdlLCB2YV9saXN0IGFwKQotewotICBmcHJpbnRmIChzdGRlcnIsICIlczolczolZDogJXM6ICIsIHByb2dyYW1fbmFtZSwgZmlsZSwgbGluZSwgbW9kZSk7Ci0gIHZmcHJpbnRmIChzdGRlcnIsIG1lc3NhZ2UsIGFwKTsKLSAgZnByaW50ZiAoc3RkZXJyLCAiLlxuIik7Ci0KLSAgaWYgKGV4aXRfc3RhdHVzID49IDApCi0gICAgZXhpdCAoZXhpdF9zdGF0dXMpOwotfQotCi12b2lkCi1sdF9mYXRhbCAoY29uc3QgY2hhciAqZmlsZSwgaW50IGxpbmUsIGNvbnN0IGNoYXIgKm1lc3NhZ2UsIC4uLikKLXsKLSAgdmFfbGlzdCBhcDsKLSAgdmFfc3RhcnQgKGFwLCBtZXNzYWdlKTsKLSAgbHRfZXJyb3JfY29yZSAoRVhJVF9GQUlMVVJFLCBmaWxlLCBsaW5lLCAiRkFUQUwiLCBtZXNzYWdlLCBhcCk7Ci0gIHZhX2VuZCAoYXApOwotfQotCi1zdGF0aWMgY29uc3QgY2hhciAqCi1ub25udWxsIChjb25zdCBjaGFyICpzKQotewotICByZXR1cm4gcyA/IHMgOiAiKG51bGwpIjsKLX0KLQotc3RhdGljIGNvbnN0IGNoYXIgKgotbm9uZW1wdHkgKGNvbnN0IGNoYXIgKnMpCi17Ci0gIHJldHVybiAocyAmJiAhKnMpID8gIihlbXB0eSkiIDogbm9ubnVsbCAocyk7Ci19Ci0KLXZvaWQKLWx0X3NldGVudiAoY29uc3QgY2hhciAqbmFtZSwgY29uc3QgY2hhciAqdmFsdWUpCi17Ci0gIGx0X2RlYnVncHJpbnRmIChfX0ZJTEVfXywgX19MSU5FX18sCi0JCSAgIihsdF9zZXRlbnYpIHNldHRpbmcgJyVzJyB0byAnJXMnXG4iLAotICAgICAgICAgICAgICAgICAgbm9ubnVsbCAobmFtZSksIG5vbm51bGwgKHZhbHVlKSk7Ci0gIHsKLSNpZmRlZiBIQVZFX1NFVEVOVgotICAgIC8qIGFsd2F5cyBtYWtlIGEgY29weSwgZm9yIGNvbnNpc3RlbmN5IHdpdGggIUhBVkVfU0VURU5WICovCi0gICAgY2hhciAqc3RyID0geHN0cmR1cCAodmFsdWUpOwotICAgIHNldGVudiAobmFtZSwgc3RyLCAxKTsKLSNlbHNlCi0gICAgaW50IGxlbiA9IHN0cmxlbiAobmFtZSkgKyAxICsgc3RybGVuICh2YWx1ZSkgKyAxOwotICAgIGNoYXIgKnN0ciA9IFhNQUxMT0MgKGNoYXIsIGxlbik7Ci0gICAgc3ByaW50ZiAoc3RyLCAiJXM9JXMiLCBuYW1lLCB2YWx1ZSk7Ci0gICAgaWYgKHB1dGVudiAoc3RyKSAhPSBFWElUX1NVQ0NFU1MpCi0gICAgICB7Ci0gICAgICAgIFhGUkVFIChzdHIpOwotICAgICAgfQotI2VuZGlmCi0gIH0KLX0KLQotY2hhciAqCi1sdF9leHRlbmRfc3RyIChjb25zdCBjaGFyICpvcmlnX3ZhbHVlLCBjb25zdCBjaGFyICphZGQsIGludCB0b19lbmQpCi17Ci0gIGNoYXIgKm5ld192YWx1ZTsKLSAgaWYgKG9yaWdfdmFsdWUgJiYgKm9yaWdfdmFsdWUpCi0gICAgewotICAgICAgaW50IG9yaWdfdmFsdWVfbGVuID0gc3RybGVuIChvcmlnX3ZhbHVlKTsKLSAgICAgIGludCBhZGRfbGVuID0gc3RybGVuIChhZGQpOwotICAgICAgbmV3X3ZhbHVlID0gWE1BTExPQyAoY2hhciwgYWRkX2xlbiArIG9yaWdfdmFsdWVfbGVuICsgMSk7Ci0gICAgICBpZiAodG9fZW5kKQotICAgICAgICB7Ci0gICAgICAgICAgc3RyY3B5IChuZXdfdmFsdWUsIG9yaWdfdmFsdWUpOwotICAgICAgICAgIHN0cmNweSAobmV3X3ZhbHVlICsgb3JpZ192YWx1ZV9sZW4sIGFkZCk7Ci0gICAgICAgIH0KLSAgICAgIGVsc2UKLSAgICAgICAgewotICAgICAgICAgIHN0cmNweSAobmV3X3ZhbHVlLCBhZGQpOwotICAgICAgICAgIHN0cmNweSAobmV3X3ZhbHVlICsgYWRkX2xlbiwgb3JpZ192YWx1ZSk7Ci0gICAgICAgIH0KLSAgICB9Ci0gIGVsc2UKLSAgICB7Ci0gICAgICBuZXdfdmFsdWUgPSB4c3RyZHVwIChhZGQpOwotICAgIH0KLSAgcmV0dXJuIG5ld192YWx1ZTsKLX0KLQotdm9pZAotbHRfdXBkYXRlX2V4ZV9wYXRoIChjb25zdCBjaGFyICpuYW1lLCBjb25zdCBjaGFyICp2YWx1ZSkKLXsKLSAgbHRfZGVidWdwcmludGYgKF9fRklMRV9fLCBfX0xJTkVfXywKLQkJICAiKGx0X3VwZGF0ZV9leGVfcGF0aCkgbW9kaWZ5aW5nICclcycgYnkgcHJlcGVuZGluZyAnJXMnXG4iLAotICAgICAgICAgICAgICAgICAgbm9ubnVsbCAobmFtZSksIG5vbm51bGwgKHZhbHVlKSk7Ci0KLSAgaWYgKG5hbWUgJiYgKm5hbWUgJiYgdmFsdWUgJiYgKnZhbHVlKQotICAgIHsKLSAgICAgIGNoYXIgKm5ld192YWx1ZSA9IGx0X2V4dGVuZF9zdHIgKGdldGVudiAobmFtZSksIHZhbHVlLCAwKTsKLSAgICAgIC8qIHNvbWUgc3lzdGVtcyBjYW4ndCBjb3BlIHdpdGggYSAnOictdGVybWluYXRlZCBwYXRoICMnICovCi0gICAgICBpbnQgbGVuID0gc3RybGVuIChuZXdfdmFsdWUpOwotICAgICAgd2hpbGUgKCgobGVuID0gc3RybGVuIChuZXdfdmFsdWUpKSA+IDApICYmIElTX1BBVEhfU0VQQVJBVE9SIChuZXdfdmFsdWVbbGVuLTFdKSkKLSAgICAgICAgewotICAgICAgICAgIG5ld192YWx1ZVtsZW4tMV0gPSAnXDAnOwotICAgICAgICB9Ci0gICAgICBsdF9zZXRlbnYgKG5hbWUsIG5ld192YWx1ZSk7Ci0gICAgICBYRlJFRSAobmV3X3ZhbHVlKTsKLSAgICB9Ci19Ci0KLXZvaWQKLWx0X3VwZGF0ZV9saWJfcGF0aCAoY29uc3QgY2hhciAqbmFtZSwgY29uc3QgY2hhciAqdmFsdWUpCi17Ci0gIGx0X2RlYnVncHJpbnRmIChfX0ZJTEVfXywgX19MSU5FX18sCi0JCSAgIihsdF91cGRhdGVfbGliX3BhdGgpIG1vZGlmeWluZyAnJXMnIGJ5IHByZXBlbmRpbmcgJyVzJ1xuIiwKLSAgICAgICAgICAgICAgICAgIG5vbm51bGwgKG5hbWUpLCBub25udWxsICh2YWx1ZSkpOwotCi0gIGlmIChuYW1lICYmICpuYW1lICYmIHZhbHVlICYmICp2YWx1ZSkKLSAgICB7Ci0gICAgICBjaGFyICpuZXdfdmFsdWUgPSBsdF9leHRlbmRfc3RyIChnZXRlbnYgKG5hbWUpLCB2YWx1ZSwgMCk7Ci0gICAgICBsdF9zZXRlbnYgKG5hbWUsIG5ld192YWx1ZSk7Ci0gICAgICBYRlJFRSAobmV3X3ZhbHVlKTsKLSAgICB9Ci19Ci0KLUVPRgotCSAgICBjYXNlICRob3N0X29zIGluCi0JICAgICAgbWluZ3cqKQotCQljYXQgPDwiRU9GIgotCi0vKiBQcmVwYXJlcyBhbiBhcmd1bWVudCB2ZWN0b3IgYmVmb3JlIGNhbGxpbmcgc3Bhd24oKS4KLSAgIE5vdGUgdGhhdCBzcGF3bigpIGRvZXMgbm90IGJ5IGl0c2VsZiBjYWxsIHRoZSBjb21tYW5kIGludGVycHJldGVyCi0gICAgIChnZXRlbnYgKCJDT01TUEVDIikgIT0gTlVMTCA/IGdldGVudiAoIkNPTVNQRUMiKSA6Ci0gICAgICAoeyBPU1ZFUlNJT05JTkZPIHY7IHYuZHdPU1ZlcnNpb25JbmZvU2l6ZSA9IHNpemVvZihPU1ZFUlNJT05JTkZPKTsKLSAgICAgICAgIEdldFZlcnNpb25FeCgmdik7Ci0gICAgICAgICB2LmR3UGxhdGZvcm1JZCA9PSBWRVJfUExBVEZPUk1fV0lOMzJfTlQ7Ci0gICAgICB9KSA/ICJjbWQuZXhlIiA6ICJjb21tYW5kLmNvbSIpLgotICAgSW5zdGVhZCBpdCBzaW1wbHkgY29uY2F0ZW5hdGVzIHRoZSBhcmd1bWVudHMsIHNlcGFyYXRlZCBieSAnICcsIGFuZCBjYWxscwotICAgQ3JlYXRlUHJvY2VzcygpLiAgV2UgbXVzdCBxdW90ZSB0aGUgYXJndW1lbnRzIHNpbmNlIFdpbjMyIENyZWF0ZVByb2Nlc3MoKQotICAgaW50ZXJwcmV0cyBjaGFyYWN0ZXJzIGxpa2UgJyAnLCAnXHQnLCAnXFwnLCAnIicgKGJ1dCBub3QgJzwnIGFuZCAnPicpIGluIGEKLSAgIHNwZWNpYWwgd2F5OgotICAgLSBTcGFjZSBhbmQgdGFiIGFyZSBpbnRlcnByZXRlZCBhcyBkZWxpbWl0ZXJzLiBUaGV5IGFyZSBub3QgdHJlYXRlZCBhcwotICAgICBkZWxpbWl0ZXJzIGlmIHRoZXkgYXJlIHN1cnJvdW5kZWQgYnkgZG91YmxlIHF1b3RlczogIi4uLiIuCi0gICAtIFVuZXNjYXBlZCBkb3VibGUgcXVvdGVzIGFyZSByZW1vdmVkIGZyb20gdGhlIGlucHV0LiBUaGVpciBvbmx5IGVmZmVjdCBpcwotICAgICB0aGF0IHdpdGhpbiBkb3VibGUgcXVvdGVzLCBzcGFjZSBhbmQgdGFiIGFyZSB0cmVhdGVkIGxpa2Ugbm9ybWFsCi0gICAgIGNoYXJhY3RlcnMuCi0gICAtIEJhY2tzbGFzaGVzIG5vdCBmb2xsb3dlZCBieSBkb3VibGUgcXVvdGVzIGFyZSBub3Qgc3BlY2lhbC4KLSAgIC0gQnV0IDIqbisxIGJhY2tzbGFzaGVzIGZvbGxvd2VkIGJ5IGEgZG91YmxlIHF1b3RlIGJlY29tZQotICAgICBuIGJhY2tzbGFzaGVzIGZvbGxvd2VkIGJ5IGEgZG91YmxlIHF1b3RlIChuID49IDApOgotICAgICAgIFwiIC0+ICIKLSAgICAgICBcXFwiIC0+IFwiCi0gICAgICAgXFxcXFwiIC0+IFxcIgotICovCi0jZGVmaW5lIFNIRUxMX1NQRUNJQUxfQ0hBUlMgIlwiXFwgXDAwMVwwMDJcMDAzXDAwNFwwMDVcMDA2XDAwN1wwMTBcMDExXDAxMlwwMTNcMDE0XDAxNVwwMTZcMDE3XDAyMFwwMjFcMDIyXDAyM1wwMjRcMDI1XDAyNlwwMjdcMDMwXDAzMVwwMzJcMDMzXDAzNFwwMzVcMDM2XDAzNyIKLSNkZWZpbmUgU0hFTExfU1BBQ0VfQ0hBUlMgIiBcMDAxXDAwMlwwMDNcMDA0XDAwNVwwMDZcMDA3XDAxMFwwMTFcMDEyXDAxM1wwMTRcMDE1XDAxNlwwMTdcMDIwXDAyMVwwMjJcMDIzXDAyNFwwMjVcMDI2XDAyN1wwMzBcMDMxXDAzMlwwMzNcMDM0XDAzNVwwMzZcMDM3IgotY2hhciAqKgotcHJlcGFyZV9zcGF3biAoY2hhciAqKmFyZ3YpCi17Ci0gIHNpemVfdCBhcmdjOwotICBjaGFyICoqbmV3X2FyZ3Y7Ci0gIHNpemVfdCBpOwotCi0gIC8qIENvdW50IG51bWJlciBvZiBhcmd1bWVudHMuICAqLwotICBmb3IgKGFyZ2MgPSAwOyBhcmd2W2FyZ2NdICE9IE5VTEw7IGFyZ2MrKykKLSAgICA7Ci0KLSAgLyogQWxsb2NhdGUgbmV3IGFyZ3VtZW50IHZlY3Rvci4gICovCi0gIG5ld19hcmd2ID0gWE1BTExPQyAoY2hhciAqLCBhcmdjICsgMSk7Ci0KLSAgLyogUHV0IHF1b3RlZCBhcmd1bWVudHMgaW50byB0aGUgbmV3IGFyZ3VtZW50IHZlY3Rvci4gICovCi0gIGZvciAoaSA9IDA7IGkgPCBhcmdjOyBpKyspCi0gICAgewotICAgICAgY29uc3QgY2hhciAqc3RyaW5nID0gYXJndltpXTsKLQotICAgICAgaWYgKHN0cmluZ1swXSA9PSAnXDAnKQotCW5ld19hcmd2W2ldID0geHN0cmR1cCAoIlwiXCIiKTsKLSAgICAgIGVsc2UgaWYgKHN0cnBicmsgKHN0cmluZywgU0hFTExfU1BFQ0lBTF9DSEFSUykgIT0gTlVMTCkKLQl7Ci0JICBpbnQgcXVvdGVfYXJvdW5kID0gKHN0cnBicmsgKHN0cmluZywgU0hFTExfU1BBQ0VfQ0hBUlMpICE9IE5VTEwpOwotCSAgc2l6ZV90IGxlbmd0aDsKLQkgIHVuc2lnbmVkIGludCBiYWNrc2xhc2hlczsKLQkgIGNvbnN0IGNoYXIgKnM7Ci0JICBjaGFyICpxdW90ZWRfc3RyaW5nOwotCSAgY2hhciAqcDsKLQotCSAgbGVuZ3RoID0gMDsKLQkgIGJhY2tzbGFzaGVzID0gMDsKLQkgIGlmIChxdW90ZV9hcm91bmQpCi0JICAgIGxlbmd0aCsrOwotCSAgZm9yIChzID0gc3RyaW5nOyAqcyAhPSAnXDAnOyBzKyspCi0JICAgIHsKLQkgICAgICBjaGFyIGMgPSAqczsKLQkgICAgICBpZiAoYyA9PSAnIicpCi0JCWxlbmd0aCArPSBiYWNrc2xhc2hlcyArIDE7Ci0JICAgICAgbGVuZ3RoKys7Ci0JICAgICAgaWYgKGMgPT0gJ1xcJykKLQkJYmFja3NsYXNoZXMrKzsKLQkgICAgICBlbHNlCi0JCWJhY2tzbGFzaGVzID0gMDsKLQkgICAgfQotCSAgaWYgKHF1b3RlX2Fyb3VuZCkKLQkgICAgbGVuZ3RoICs9IGJhY2tzbGFzaGVzICsgMTsKLQotCSAgcXVvdGVkX3N0cmluZyA9IFhNQUxMT0MgKGNoYXIsIGxlbmd0aCArIDEpOwotCi0JICBwID0gcXVvdGVkX3N0cmluZzsKLQkgIGJhY2tzbGFzaGVzID0gMDsKLQkgIGlmIChxdW90ZV9hcm91bmQpCi0JICAgICpwKysgPSAnIic7Ci0JICBmb3IgKHMgPSBzdHJpbmc7ICpzICE9ICdcMCc7IHMrKykKLQkgICAgewotCSAgICAgIGNoYXIgYyA9ICpzOwotCSAgICAgIGlmIChjID09ICciJykKLQkJewotCQkgIHVuc2lnbmVkIGludCBqOwotCQkgIGZvciAoaiA9IGJhY2tzbGFzaGVzICsgMTsgaiA+IDA7IGotLSkKLQkJICAgICpwKysgPSAnXFwnOwotCQl9Ci0JICAgICAgKnArKyA9IGM7Ci0JICAgICAgaWYgKGMgPT0gJ1xcJykKLQkJYmFja3NsYXNoZXMrKzsKLQkgICAgICBlbHNlCi0JCWJhY2tzbGFzaGVzID0gMDsKLQkgICAgfQotCSAgaWYgKHF1b3RlX2Fyb3VuZCkKLQkgICAgewotCSAgICAgIHVuc2lnbmVkIGludCBqOwotCSAgICAgIGZvciAoaiA9IGJhY2tzbGFzaGVzOyBqID4gMDsgai0tKQotCQkqcCsrID0gJ1xcJzsKLQkgICAgICAqcCsrID0gJyInOwotCSAgICB9Ci0JICAqcCA9ICdcMCc7Ci0KLQkgIG5ld19hcmd2W2ldID0gcXVvdGVkX3N0cmluZzsKLQl9Ci0gICAgICBlbHNlCi0JbmV3X2FyZ3ZbaV0gPSAoY2hhciAqKSBzdHJpbmc7Ci0gICAgfQotICBuZXdfYXJndlthcmdjXSA9IE5VTEw7Ci0KLSAgcmV0dXJuIG5ld19hcmd2OwotfQotRU9GCi0JCTs7Ci0JICAgIGVzYWMKLQotICAgICAgICAgICAgY2F0IDw8IkVPRiIKLXZvaWQgbHRfZHVtcF9zY3JpcHQgKEZJTEUqIGYpCi17Ci1FT0YKLQkgICAgZnVuY19lbWl0X3dyYXBwZXIgeWVzIHwKLSAgICAgICAgICAgICAgJFNFRCAtZSAncy9cKFtcXCJdXCkvXFxcMS9nJyBcCi0JICAgICAgICAgICAtZSAncy9eLyAgZnB1dHMgKCIvJyAtZSAncy8kL1xcbiIsIGYpOy8nCi0KLSAgICAgICAgICAgIGNhdCA8PCJFT0YiCi19Ci1FT0YKLX0KLSMgZW5kOiBmdW5jX2VtaXRfY3dyYXBwZXJleGVfc3JjCi0KLSMgZnVuY193aW4zMl9pbXBvcnRfbGliX3AgQVJHCi0jIFRydWUgaWYgQVJHIGlzIGFuIGltcG9ydCBsaWIsIGFzIGluZGljYXRlZCBieSAkZmlsZV9tYWdpY19jbWQKLWZ1bmNfd2luMzJfaW1wb3J0X2xpYl9wICgpCi17Ci0gICAgJG9wdF9kZWJ1ZwotICAgIGNhc2UgYGV2YWwgJGZpbGVfbWFnaWNfY21kIFwiXCQxXCIgMj4vZGV2L251bGwgfCAkU0VEIC1lIDEwcWAgaW4KLSAgICAqaW1wb3J0KikgOiA7OwotICAgICopIGZhbHNlIDs7Ci0gICAgZXNhYwotfQotCi0jIGZ1bmNfbW9kZV9saW5rIGFyZy4uLgotZnVuY19tb2RlX2xpbmsgKCkKLXsKLSAgICAkb3B0X2RlYnVnCi0gICAgY2FzZSAkaG9zdCBpbgotICAgICotKi1jeWd3aW4qIHwgKi0qLW1pbmd3KiB8ICotKi1wdzMyKiB8ICotKi1vczIqIHwgKi1jZWdjYyopCi0gICAgICAjIEl0IGlzIGltcG9zc2libGUgdG8gbGluayBhIGRsbCB3aXRob3V0IHRoaXMgc2V0dGluZywgYW5kCi0gICAgICAjIHdlIHNob3VsZG4ndCBmb3JjZSB0aGUgbWFrZWZpbGUgbWFpbnRhaW5lciB0byBmaWd1cmUgb3V0Ci0gICAgICAjIHdoaWNoIHN5c3RlbSB3ZSBhcmUgY29tcGlsaW5nIGZvciBpbiBvcmRlciB0byBwYXNzIGFuIGV4dHJhCi0gICAgICAjIGZsYWcgZm9yIGV2ZXJ5IGxpYnRvb2wgaW52b2NhdGlvbi4KLSAgICAgICMgYWxsb3dfdW5kZWZpbmVkPW5vCi0KLSAgICAgICMgRklYTUU6IFVuZm9ydHVuYXRlbHksIHRoZXJlIGFyZSBwcm9ibGVtcyB3aXRoIHRoZSBhYm92ZSB3aGVuIHRyeWluZwotICAgICAgIyB0byBtYWtlIGEgZGxsIHdoaWNoIGhhcyB1bmRlZmluZWQgc3ltYm9scywgaW4gd2hpY2ggY2FzZSBub3QKLSAgICAgICMgZXZlbiBhIHN0YXRpYyBsaWJyYXJ5IGlzIGJ1aWx0LiAgRm9yIG5vdywgd2UgbmVlZCB0byBzcGVjaWZ5Ci0gICAgICAjIC1uby11bmRlZmluZWQgb24gdGhlIGxpYnRvb2wgbGluayBsaW5lIHdoZW4gd2UgY2FuIGJlIGNlcnRhaW4KLSAgICAgICMgdGhhdCBhbGwgc3ltYm9scyBhcmUgc2F0aXNmaWVkLCBvdGhlcndpc2Ugd2UgZ2V0IGEgc3RhdGljIGxpYnJhcnkuCi0gICAgICBhbGxvd191bmRlZmluZWQ9eWVzCi0gICAgICA7OwotICAgICopCi0gICAgICBhbGxvd191bmRlZmluZWQ9eWVzCi0gICAgICA7OwotICAgIGVzYWMKLSAgICBsaWJ0b29sX2FyZ3M9JG5vbm9wdAotICAgIGJhc2VfY29tcGlsZT0iJG5vbm9wdCAkQCIKLSAgICBjb21waWxlX2NvbW1hbmQ9JG5vbm9wdAotICAgIGZpbmFsaXplX2NvbW1hbmQ9JG5vbm9wdAotCi0gICAgY29tcGlsZV9ycGF0aD0KLSAgICBmaW5hbGl6ZV9ycGF0aD0KLSAgICBjb21waWxlX3NobGlicGF0aD0KLSAgICBmaW5hbGl6ZV9zaGxpYnBhdGg9Ci0gICAgY29udmVuaWVuY2U9Ci0gICAgb2xkX2NvbnZlbmllbmNlPQotICAgIGRlcGxpYnM9Ci0gICAgb2xkX2RlcGxpYnM9Ci0gICAgY29tcGlsZXJfZmxhZ3M9Ci0gICAgbGlua2VyX2ZsYWdzPQotICAgIGRsbHNlYXJjaHBhdGg9Ci0gICAgbGliX3NlYXJjaF9wYXRoPWBwd2RgCi0gICAgaW5zdF9wcmVmaXhfZGlyPQotICAgIG5ld19pbmhlcml0ZWRfbGlua2VyX2ZsYWdzPQotCi0gICAgYXZvaWRfdmVyc2lvbj1ubwotICAgIGJpbmRpcj0KLSAgICBkbGZpbGVzPQotICAgIGRscHJlZmlsZXM9Ci0gICAgZGxzZWxmPW5vCi0gICAgZXhwb3J0X2R5bmFtaWM9bm8KLSAgICBleHBvcnRfc3ltYm9scz0KLSAgICBleHBvcnRfc3ltYm9sc19yZWdleD0KLSAgICBnZW5lcmF0ZWQ9Ci0gICAgbGlib2Jqcz0KLSAgICBsdGxpYnM9Ci0gICAgbW9kdWxlPW5vCi0gICAgbm9faW5zdGFsbD1ubwotICAgIG9ianM9Ci0gICAgbm9uX3BpY19vYmplY3RzPQotICAgIHByZWNpb3VzX2ZpbGVzX3JlZ2V4PQotICAgIHByZWZlcl9zdGF0aWNfbGlicz1ubwotICAgIHByZWxvYWQ9bm8KLSAgICBwcmV2PQotICAgIHByZXZhcmc9Ci0gICAgcmVsZWFzZT0KLSAgICBycGF0aD0KLSAgICB4cnBhdGg9Ci0gICAgcGVybV9ycGF0aD0KLSAgICB0ZW1wX3JwYXRoPQotICAgIHRocmVhZF9zYWZlPW5vCi0gICAgdmluZm89Ci0gICAgdmluZm9fbnVtYmVyPW5vCi0gICAgd2Vha19saWJzPQotICAgIHNpbmdsZV9tb2R1bGU9IiR7d2x9LXNpbmdsZV9tb2R1bGUiCi0gICAgZnVuY19pbmZlcl90YWcgJGJhc2VfY29tcGlsZQotCi0gICAgIyBXZSBuZWVkIHRvIGtub3cgLXN0YXRpYywgdG8gZ2V0IHRoZSByaWdodCBvdXRwdXQgZmlsZW5hbWVzLgotICAgIGZvciBhcmcKLSAgICBkbwotICAgICAgY2FzZSAkYXJnIGluCi0gICAgICAtc2hhcmVkKQotCXRlc3QgIiRidWlsZF9saWJ0b29sX2xpYnMiICE9IHllcyAmJiBcCi0JICBmdW5jX2ZhdGFsX2NvbmZpZ3VyYXRpb24gImNhbiBub3QgYnVpbGQgYSBzaGFyZWQgbGlicmFyeSIKLQlidWlsZF9vbGRfbGlicz1ubwotCWJyZWFrCi0JOzsKLSAgICAgIC1hbGwtc3RhdGljIHwgLXN0YXRpYyB8IC1zdGF0aWMtbGlidG9vbC1saWJzKQotCWNhc2UgJGFyZyBpbgotCS1hbGwtc3RhdGljKQotCSAgaWYgdGVzdCAiJGJ1aWxkX2xpYnRvb2xfbGlicyIgPSB5ZXMgJiYgdGVzdCAteiAiJGxpbmtfc3RhdGljX2ZsYWciOyB0aGVuCi0JICAgIGZ1bmNfd2FybmluZyAiY29tcGxldGUgc3RhdGljIGxpbmtpbmcgaXMgaW1wb3NzaWJsZSBpbiB0aGlzIGNvbmZpZ3VyYXRpb24iCi0JICBmaQotCSAgaWYgdGVzdCAtbiAiJGxpbmtfc3RhdGljX2ZsYWciOyB0aGVuCi0JICAgIGRsb3Blbl9zZWxmPSRkbG9wZW5fc2VsZl9zdGF0aWMKLQkgIGZpCi0JICBwcmVmZXJfc3RhdGljX2xpYnM9eWVzCi0JICA7OwotCS1zdGF0aWMpCi0JICBpZiB0ZXN0IC16ICIkcGljX2ZsYWciICYmIHRlc3QgLW4gIiRsaW5rX3N0YXRpY19mbGFnIjsgdGhlbgotCSAgICBkbG9wZW5fc2VsZj0kZGxvcGVuX3NlbGZfc3RhdGljCi0JICBmaQotCSAgcHJlZmVyX3N0YXRpY19saWJzPWJ1aWx0Ci0JICA7OwotCS1zdGF0aWMtbGlidG9vbC1saWJzKQotCSAgaWYgdGVzdCAteiAiJHBpY19mbGFnIiAmJiB0ZXN0IC1uICIkbGlua19zdGF0aWNfZmxhZyI7IHRoZW4KLQkgICAgZGxvcGVuX3NlbGY9JGRsb3Blbl9zZWxmX3N0YXRpYwotCSAgZmkKLQkgIHByZWZlcl9zdGF0aWNfbGlicz15ZXMKLQkgIDs7Ci0JZXNhYwotCWJ1aWxkX2xpYnRvb2xfbGlicz1ubwotCWJ1aWxkX29sZF9saWJzPXllcwotCWJyZWFrCi0JOzsKLSAgICAgIGVzYWMKLSAgICBkb25lCi0KLSAgICAjIFNlZSBpZiBvdXIgc2hhcmVkIGFyY2hpdmVzIGRlcGVuZCBvbiBzdGF0aWMgYXJjaGl2ZXMuCi0gICAgdGVzdCAtbiAiJG9sZF9hcmNoaXZlX2Zyb21fbmV3X2NtZHMiICYmIGJ1aWxkX29sZF9saWJzPXllcwotCi0gICAgIyBHbyB0aHJvdWdoIHRoZSBhcmd1bWVudHMsIHRyYW5zZm9ybWluZyB0aGVtIG9uIHRoZSB3YXkuCi0gICAgd2hpbGUgdGVzdCAiJCMiIC1ndCAwOyBkbwotICAgICAgYXJnPSIkMSIKLSAgICAgIHNoaWZ0Ci0gICAgICBmdW5jX3F1b3RlX2Zvcl9ldmFsICIkYXJnIgotICAgICAgcWFyZz0kZnVuY19xdW90ZV9mb3JfZXZhbF91bnF1b3RlZF9yZXN1bHQKLSAgICAgIGZ1bmNfYXBwZW5kIGxpYnRvb2xfYXJncyAiICRmdW5jX3F1b3RlX2Zvcl9ldmFsX3Jlc3VsdCIKLQotICAgICAgIyBJZiB0aGUgcHJldmlvdXMgb3B0aW9uIG5lZWRzIGFuIGFyZ3VtZW50LCBhc3NpZ24gaXQuCi0gICAgICBpZiB0ZXN0IC1uICIkcHJldiI7IHRoZW4KLQljYXNlICRwcmV2IGluCi0Jb3V0cHV0KQotCSAgZnVuY19hcHBlbmQgY29tcGlsZV9jb21tYW5kICIgQE9VVFBVVEAiCi0JICBmdW5jX2FwcGVuZCBmaW5hbGl6ZV9jb21tYW5kICIgQE9VVFBVVEAiCi0JICA7OwotCWVzYWMKLQotCWNhc2UgJHByZXYgaW4KLQliaW5kaXIpCi0JICBiaW5kaXI9IiRhcmciCi0JICBwcmV2PQotCSAgY29udGludWUKLQkgIDs7Ci0JZGxmaWxlc3xkbHByZWZpbGVzKQotCSAgaWYgdGVzdCAiJHByZWxvYWQiID0gbm87IHRoZW4KLQkgICAgIyBBZGQgdGhlIHN5bWJvbCBvYmplY3QgaW50byB0aGUgbGlua2luZyBjb21tYW5kcy4KLQkgICAgZnVuY19hcHBlbmQgY29tcGlsZV9jb21tYW5kICIgQFNZTUZJTEVAIgotCSAgICBmdW5jX2FwcGVuZCBmaW5hbGl6ZV9jb21tYW5kICIgQFNZTUZJTEVAIgotCSAgICBwcmVsb2FkPXllcwotCSAgZmkKLQkgIGNhc2UgJGFyZyBpbgotCSAgKi5sYSB8ICoubG8pIDs7ICAjIFdlIGhhbmRsZSB0aGVzZSBjYXNlcyBiZWxvdy4KLQkgIGZvcmNlKQotCSAgICBpZiB0ZXN0ICIkZGxzZWxmIiA9IG5vOyB0aGVuCi0JICAgICAgZGxzZWxmPW5lZWRsZXNzCi0JICAgICAgZXhwb3J0X2R5bmFtaWM9eWVzCi0JICAgIGZpCi0JICAgIHByZXY9Ci0JICAgIGNvbnRpbnVlCi0JICAgIDs7Ci0JICBzZWxmKQotCSAgICBpZiB0ZXN0ICIkcHJldiIgPSBkbHByZWZpbGVzOyB0aGVuCi0JICAgICAgZGxzZWxmPXllcwotCSAgICBlbGlmIHRlc3QgIiRwcmV2IiA9IGRsZmlsZXMgJiYgdGVzdCAiJGRsb3Blbl9zZWxmIiAhPSB5ZXM7IHRoZW4KLQkgICAgICBkbHNlbGY9eWVzCi0JICAgIGVsc2UKLQkgICAgICBkbHNlbGY9bmVlZGxlc3MKLQkgICAgICBleHBvcnRfZHluYW1pYz15ZXMKLQkgICAgZmkKLQkgICAgcHJldj0KLQkgICAgY29udGludWUKLQkgICAgOzsKLQkgICopCi0JICAgIGlmIHRlc3QgIiRwcmV2IiA9IGRsZmlsZXM7IHRoZW4KLQkgICAgICBmdW5jX2FwcGVuZCBkbGZpbGVzICIgJGFyZyIKLQkgICAgZWxzZQotCSAgICAgIGZ1bmNfYXBwZW5kIGRscHJlZmlsZXMgIiAkYXJnIgotCSAgICBmaQotCSAgICBwcmV2PQotCSAgICBjb250aW51ZQotCSAgICA7OwotCSAgZXNhYwotCSAgOzsKLQlleHBzeW1zKQotCSAgZXhwb3J0X3N5bWJvbHM9IiRhcmciCi0JICB0ZXN0IC1mICIkYXJnIiBcCi0JICAgIHx8IGZ1bmNfZmF0YWxfZXJyb3IgInN5bWJvbCBmaWxlIFxgJGFyZycgZG9lcyBub3QgZXhpc3QiCi0JICBwcmV2PQotCSAgY29udGludWUKLQkgIDs7Ci0JZXhwc3ltc19yZWdleCkKLQkgIGV4cG9ydF9zeW1ib2xzX3JlZ2V4PSIkYXJnIgotCSAgcHJldj0KLQkgIGNvbnRpbnVlCi0JICA7OwotCWZyYW1ld29yaykKLQkgIGNhc2UgJGhvc3QgaW4KLQkgICAgKi0qLWRhcndpbiopCi0JICAgICAgY2FzZSAiJGRlcGxpYnMgIiBpbgotCQkqIiAkcWFyZy5sdGZyYW1ld29yayAiKikgOzsKLQkJKikgZnVuY19hcHBlbmQgZGVwbGlicyAiICRxYXJnLmx0ZnJhbWV3b3JrIiAjIHRoaXMgaXMgZml4ZWQgbGF0ZXIKLQkJICAgOzsKLQkgICAgICBlc2FjCi0JICAgICAgOzsKLQkgIGVzYWMKLQkgIHByZXY9Ci0JICBjb250aW51ZQotCSAgOzsKLQlpbnN0X3ByZWZpeCkKLQkgIGluc3RfcHJlZml4X2Rpcj0iJGFyZyIKLQkgIHByZXY9Ci0JICBjb250aW51ZQotCSAgOzsKLQlvYmplY3RsaXN0KQotCSAgaWYgdGVzdCAtZiAiJGFyZyI7IHRoZW4KLQkgICAgc2F2ZV9hcmc9JGFyZwotCSAgICBtb3JlYXJncz0KLQkgICAgZm9yIGZpbCBpbiBgY2F0ICIkc2F2ZV9hcmciYAotCSAgICBkbwotIwkgICAgICBmdW5jX2FwcGVuZCBtb3JlYXJncyAiICRmaWwiCi0JICAgICAgYXJnPSRmaWwKLQkgICAgICAjIEEgbGlidG9vbC1jb250cm9sbGVkIG9iamVjdC4KLQotCSAgICAgICMgQ2hlY2sgdG8gc2VlIHRoYXQgdGhpcyByZWFsbHkgaXMgYSBsaWJ0b29sIG9iamVjdC4KLQkgICAgICBpZiBmdW5jX2xhbGliX3Vuc2FmZV9wICIkYXJnIjsgdGhlbgotCQlwaWNfb2JqZWN0PQotCQlub25fcGljX29iamVjdD0KLQotCQkjIFJlYWQgdGhlIC5sbyBmaWxlCi0JCWZ1bmNfc291cmNlICIkYXJnIgotCi0JCWlmIHRlc3QgLXogIiRwaWNfb2JqZWN0IiB8fAotCQkgICB0ZXN0IC16ICIkbm9uX3BpY19vYmplY3QiIHx8Ci0JCSAgIHRlc3QgIiRwaWNfb2JqZWN0IiA9IG5vbmUgJiYKLQkJICAgdGVzdCAiJG5vbl9waWNfb2JqZWN0IiA9IG5vbmU7IHRoZW4KLQkJICBmdW5jX2ZhdGFsX2Vycm9yICJjYW5ub3QgZmluZCBuYW1lIG9mIG9iamVjdCBmb3IgXGAkYXJnJyIKLQkJZmkKLQotCQkjIEV4dHJhY3Qgc3ViZGlyZWN0b3J5IGZyb20gdGhlIGFyZ3VtZW50LgotCQlmdW5jX2Rpcm5hbWUgIiRhcmciICIvIiAiIgotCQl4ZGlyPSIkZnVuY19kaXJuYW1lX3Jlc3VsdCIKLQotCQlpZiB0ZXN0ICIkcGljX29iamVjdCIgIT0gbm9uZTsgdGhlbgotCQkgICMgUHJlcGVuZCB0aGUgc3ViZGlyZWN0b3J5IHRoZSBvYmplY3QgaXMgZm91bmQgaW4uCi0JCSAgcGljX29iamVjdD0iJHhkaXIkcGljX29iamVjdCIKLQotCQkgIGlmIHRlc3QgIiRwcmV2IiA9IGRsZmlsZXM7IHRoZW4KLQkJICAgIGlmIHRlc3QgIiRidWlsZF9saWJ0b29sX2xpYnMiID0geWVzICYmIHRlc3QgIiRkbG9wZW5fc3VwcG9ydCIgPSB5ZXM7IHRoZW4KLQkJICAgICAgZnVuY19hcHBlbmQgZGxmaWxlcyAiICRwaWNfb2JqZWN0IgotCQkgICAgICBwcmV2PQotCQkgICAgICBjb250aW51ZQotCQkgICAgZWxzZQotCQkgICAgICAjIElmIGxpYnRvb2wgb2JqZWN0cyBhcmUgdW5zdXBwb3J0ZWQsIHRoZW4gd2UgbmVlZCB0byBwcmVsb2FkLgotCQkgICAgICBwcmV2PWRscHJlZmlsZXMKLQkJICAgIGZpCi0JCSAgZmkKLQotCQkgICMgQ0hFQ0sgTUU6ICBJIHRoaW5rIEkgYnVzdGVkIHRoaXMuICAtT3NzYW1hCi0JCSAgaWYgdGVzdCAiJHByZXYiID0gZGxwcmVmaWxlczsgdGhlbgotCQkgICAgIyBQcmVsb2FkIHRoZSBvbGQtc3R5bGUgb2JqZWN0LgotCQkgICAgZnVuY19hcHBlbmQgZGxwcmVmaWxlcyAiICRwaWNfb2JqZWN0IgotCQkgICAgcHJldj0KLQkJICBmaQotCi0JCSAgIyBBIFBJQyBvYmplY3QuCi0JCSAgZnVuY19hcHBlbmQgbGlib2JqcyAiICRwaWNfb2JqZWN0IgotCQkgIGFyZz0iJHBpY19vYmplY3QiCi0JCWZpCi0KLQkJIyBOb24tUElDIG9iamVjdC4KLQkJaWYgdGVzdCAiJG5vbl9waWNfb2JqZWN0IiAhPSBub25lOyB0aGVuCi0JCSAgIyBQcmVwZW5kIHRoZSBzdWJkaXJlY3RvcnkgdGhlIG9iamVjdCBpcyBmb3VuZCBpbi4KLQkJICBub25fcGljX29iamVjdD0iJHhkaXIkbm9uX3BpY19vYmplY3QiCi0KLQkJICAjIEEgc3RhbmRhcmQgbm9uLVBJQyBvYmplY3QKLQkJICBmdW5jX2FwcGVuZCBub25fcGljX29iamVjdHMgIiAkbm9uX3BpY19vYmplY3QiCi0JCSAgaWYgdGVzdCAteiAiJHBpY19vYmplY3QiIHx8IHRlc3QgIiRwaWNfb2JqZWN0IiA9IG5vbmUgOyB0aGVuCi0JCSAgICBhcmc9IiRub25fcGljX29iamVjdCIKLQkJICBmaQotCQllbHNlCi0JCSAgIyBJZiB0aGUgUElDIG9iamVjdCBleGlzdHMsIHVzZSBpdCBpbnN0ZWFkLgotCQkgICMgJHhkaXIgd2FzIHByZXBlbmRlZCB0byAkcGljX29iamVjdCBhYm92ZS4KLQkJICBub25fcGljX29iamVjdD0iJHBpY19vYmplY3QiCi0JCSAgZnVuY19hcHBlbmQgbm9uX3BpY19vYmplY3RzICIgJG5vbl9waWNfb2JqZWN0IgotCQlmaQotCSAgICAgIGVsc2UKLQkJIyBPbmx5IGFuIGVycm9yIGlmIG5vdCBkb2luZyBhIGRyeS1ydW4uCi0JCWlmICRvcHRfZHJ5X3J1bjsgdGhlbgotCQkgICMgRXh0cmFjdCBzdWJkaXJlY3RvcnkgZnJvbSB0aGUgYXJndW1lbnQuCi0JCSAgZnVuY19kaXJuYW1lICIkYXJnIiAiLyIgIiIKLQkJICB4ZGlyPSIkZnVuY19kaXJuYW1lX3Jlc3VsdCIKLQotCQkgIGZ1bmNfbG8ybyAiJGFyZyIKLQkJICBwaWNfb2JqZWN0PSR4ZGlyJG9iamRpci8kZnVuY19sbzJvX3Jlc3VsdAotCQkgIG5vbl9waWNfb2JqZWN0PSR4ZGlyJGZ1bmNfbG8yb19yZXN1bHQKLQkJICBmdW5jX2FwcGVuZCBsaWJvYmpzICIgJHBpY19vYmplY3QiCi0JCSAgZnVuY19hcHBlbmQgbm9uX3BpY19vYmplY3RzICIgJG5vbl9waWNfb2JqZWN0IgotCSAgICAgICAgZWxzZQotCQkgIGZ1bmNfZmF0YWxfZXJyb3IgIlxgJGFyZycgaXMgbm90IGEgdmFsaWQgbGlidG9vbCBvYmplY3QiCi0JCWZpCi0JICAgICAgZmkKLQkgICAgZG9uZQotCSAgZWxzZQotCSAgICBmdW5jX2ZhdGFsX2Vycm9yICJsaW5rIGlucHV0IGZpbGUgXGAkYXJnJyBkb2VzIG5vdCBleGlzdCIKLQkgIGZpCi0JICBhcmc9JHNhdmVfYXJnCi0JICBwcmV2PQotCSAgY29udGludWUKLQkgIDs7Ci0JcHJlY2lvdXNfcmVnZXgpCi0JICBwcmVjaW91c19maWxlc19yZWdleD0iJGFyZyIKLQkgIHByZXY9Ci0JICBjb250aW51ZQotCSAgOzsKLQlyZWxlYXNlKQotCSAgcmVsZWFzZT0iLSRhcmciCi0JICBwcmV2PQotCSAgY29udGludWUKLQkgIDs7Ci0JcnBhdGggfCB4cnBhdGgpCi0JICAjIFdlIG5lZWQgYW4gYWJzb2x1dGUgcGF0aC4KLQkgIGNhc2UgJGFyZyBpbgotCSAgW1xcL10qIHwgW0EtWmEtel06W1xcL10qKSA7OwotCSAgKikKLQkgICAgZnVuY19mYXRhbF9lcnJvciAib25seSBhYnNvbHV0ZSBydW4tcGF0aHMgYXJlIGFsbG93ZWQiCi0JICAgIDs7Ci0JICBlc2FjCi0JICBpZiB0ZXN0ICIkcHJldiIgPSBycGF0aDsgdGhlbgotCSAgICBjYXNlICIkcnBhdGggIiBpbgotCSAgICAqIiAkYXJnICIqKSA7OwotCSAgICAqKSBmdW5jX2FwcGVuZCBycGF0aCAiICRhcmciIDs7Ci0JICAgIGVzYWMKLQkgIGVsc2UKLQkgICAgY2FzZSAiJHhycGF0aCAiIGluCi0JICAgICoiICRhcmcgIiopIDs7Ci0JICAgICopIGZ1bmNfYXBwZW5kIHhycGF0aCAiICRhcmciIDs7Ci0JICAgIGVzYWMKLQkgIGZpCi0JICBwcmV2PQotCSAgY29udGludWUKLQkgIDs7Ci0Jc2hyZXh0KQotCSAgc2hyZXh0X2NtZHM9IiRhcmciCi0JICBwcmV2PQotCSAgY29udGludWUKLQkgIDs7Ci0Jd2VhaykKLQkgIGZ1bmNfYXBwZW5kIHdlYWtfbGlicyAiICRhcmciCi0JICBwcmV2PQotCSAgY29udGludWUKLQkgIDs7Ci0JeGNjbGlua2VyKQotCSAgZnVuY19hcHBlbmQgbGlua2VyX2ZsYWdzICIgJHFhcmciCi0JICBmdW5jX2FwcGVuZCBjb21waWxlcl9mbGFncyAiICRxYXJnIgotCSAgcHJldj0KLQkgIGZ1bmNfYXBwZW5kIGNvbXBpbGVfY29tbWFuZCAiICRxYXJnIgotCSAgZnVuY19hcHBlbmQgZmluYWxpemVfY29tbWFuZCAiICRxYXJnIgotCSAgY29udGludWUKLQkgIDs7Ci0JeGNvbXBpbGVyKQotCSAgZnVuY19hcHBlbmQgY29tcGlsZXJfZmxhZ3MgIiAkcWFyZyIKLQkgIHByZXY9Ci0JICBmdW5jX2FwcGVuZCBjb21waWxlX2NvbW1hbmQgIiAkcWFyZyIKLQkgIGZ1bmNfYXBwZW5kIGZpbmFsaXplX2NvbW1hbmQgIiAkcWFyZyIKLQkgIGNvbnRpbnVlCi0JICA7OwotCXhsaW5rZXIpCi0JICBmdW5jX2FwcGVuZCBsaW5rZXJfZmxhZ3MgIiAkcWFyZyIKLQkgIGZ1bmNfYXBwZW5kIGNvbXBpbGVyX2ZsYWdzICIgJHdsJHFhcmciCi0JICBwcmV2PQotCSAgZnVuY19hcHBlbmQgY29tcGlsZV9jb21tYW5kICIgJHdsJHFhcmciCi0JICBmdW5jX2FwcGVuZCBmaW5hbGl6ZV9jb21tYW5kICIgJHdsJHFhcmciCi0JICBjb250aW51ZQotCSAgOzsKLQkqKQotCSAgZXZhbCAiJHByZXY9XCJcJGFyZ1wiIgotCSAgcHJldj0KLQkgIGNvbnRpbnVlCi0JICA7OwotCWVzYWMKLSAgICAgIGZpICMgdGVzdCAtbiAiJHByZXYiCi0KLSAgICAgIHByZXZhcmc9IiRhcmciCi0KLSAgICAgIGNhc2UgJGFyZyBpbgotICAgICAgLWFsbC1zdGF0aWMpCi0JaWYgdGVzdCAtbiAiJGxpbmtfc3RhdGljX2ZsYWciOyB0aGVuCi0JICAjIFNlZSBjb21tZW50IGZvciAtc3RhdGljIGZsYWcgYmVsb3csIGZvciBtb3JlIGRldGFpbHMuCi0JICBmdW5jX2FwcGVuZCBjb21waWxlX2NvbW1hbmQgIiAkbGlua19zdGF0aWNfZmxhZyIKLQkgIGZ1bmNfYXBwZW5kIGZpbmFsaXplX2NvbW1hbmQgIiAkbGlua19zdGF0aWNfZmxhZyIKLQlmaQotCWNvbnRpbnVlCi0JOzsKLQotICAgICAgLWFsbG93LXVuZGVmaW5lZCkKLQkjIEZJWE1FOiByZW1vdmUgdGhpcyBmbGFnIHNvbWV0aW1lIGluIHRoZSBmdXR1cmUuCi0JZnVuY19mYXRhbF9lcnJvciAiXGAtYWxsb3ctdW5kZWZpbmVkJyBtdXN0IG5vdCBiZSB1c2VkIGJlY2F1c2UgaXQgaXMgdGhlIGRlZmF1bHQiCi0JOzsKLQotICAgICAgLWF2b2lkLXZlcnNpb24pCi0JYXZvaWRfdmVyc2lvbj15ZXMKLQljb250aW51ZQotCTs7Ci0KLSAgICAgIC1iaW5kaXIpCi0JcHJldj1iaW5kaXIKLQljb250aW51ZQotCTs7Ci0KLSAgICAgIC1kbG9wZW4pCi0JcHJldj1kbGZpbGVzCi0JY29udGludWUKLQk7OwotCi0gICAgICAtZGxwcmVvcGVuKQotCXByZXY9ZGxwcmVmaWxlcwotCWNvbnRpbnVlCi0JOzsKLQotICAgICAgLWV4cG9ydC1keW5hbWljKQotCWV4cG9ydF9keW5hbWljPXllcwotCWNvbnRpbnVlCi0JOzsKLQotICAgICAgLWV4cG9ydC1zeW1ib2xzIHwgLWV4cG9ydC1zeW1ib2xzLXJlZ2V4KQotCWlmIHRlc3QgLW4gIiRleHBvcnRfc3ltYm9scyIgfHwgdGVzdCAtbiAiJGV4cG9ydF9zeW1ib2xzX3JlZ2V4IjsgdGhlbgotCSAgZnVuY19mYXRhbF9lcnJvciAibW9yZSB0aGFuIG9uZSAtZXhwb3J0ZWQtc3ltYm9scyBhcmd1bWVudCBpcyBub3QgYWxsb3dlZCIKLQlmaQotCWlmIHRlc3QgIlgkYXJnIiA9ICJYLWV4cG9ydC1zeW1ib2xzIjsgdGhlbgotCSAgcHJldj1leHBzeW1zCi0JZWxzZQotCSAgcHJldj1leHBzeW1zX3JlZ2V4Ci0JZmkKLQljb250aW51ZQotCTs7Ci0KLSAgICAgIC1mcmFtZXdvcmspCi0JcHJldj1mcmFtZXdvcmsKLQljb250aW51ZQotCTs7Ci0KLSAgICAgIC1pbnN0LXByZWZpeC1kaXIpCi0JcHJldj1pbnN0X3ByZWZpeAotCWNvbnRpbnVlCi0JOzsKLQotICAgICAgIyBUaGUgbmF0aXZlIElSSVggbGlua2VyIHVuZGVyc3RhbmRzIC1MQU5HOiosIC1MSVNUOiogYW5kIC1MTk86KgotICAgICAgIyBzbywgaWYgd2Ugc2VlIHRoZXNlIGZsYWdzIGJlIGNhcmVmdWwgbm90IHRvIHRyZWF0IHRoZW0gbGlrZSAtTAotICAgICAgLUxbQS1aXVtBLVpdKjoqKQotCWNhc2UgJHdpdGhfZ2NjLyRob3N0IGluCi0Jbm8vKi0qLWlyaXgqIHwgLyotKi1pcml4KikKLQkgIGZ1bmNfYXBwZW5kIGNvbXBpbGVfY29tbWFuZCAiICRhcmciCi0JICBmdW5jX2FwcGVuZCBmaW5hbGl6ZV9jb21tYW5kICIgJGFyZyIKLQkgIDs7Ci0JZXNhYwotCWNvbnRpbnVlCi0JOzsKLQotICAgICAgLUwqKQotCWZ1bmNfc3RyaXBuYW1lICItTCIgJycgIiRhcmciCi0JaWYgdGVzdCAteiAiJGZ1bmNfc3RyaXBuYW1lX3Jlc3VsdCI7IHRoZW4KLQkgIGlmIHRlc3QgIiQjIiAtZ3QgMDsgdGhlbgotCSAgICBmdW5jX2ZhdGFsX2Vycm9yICJyZXF1aXJlIG5vIHNwYWNlIGJldHdlZW4gXGAtTCcgYW5kIFxgJDEnIgotCSAgZWxzZQotCSAgICBmdW5jX2ZhdGFsX2Vycm9yICJuZWVkIHBhdGggZm9yIFxgLUwnIG9wdGlvbiIKLQkgIGZpCi0JZmkKLQlmdW5jX3Jlc29sdmVfc3lzcm9vdCAiJGZ1bmNfc3RyaXBuYW1lX3Jlc3VsdCIKLQlkaXI9JGZ1bmNfcmVzb2x2ZV9zeXNyb290X3Jlc3VsdAotCSMgV2UgbmVlZCBhbiBhYnNvbHV0ZSBwYXRoLgotCWNhc2UgJGRpciBpbgotCVtcXC9dKiB8IFtBLVphLXpdOltcXC9dKikgOzsKLQkqKQotCSAgYWJzZGlyPWBjZCAiJGRpciIgJiYgcHdkYAotCSAgdGVzdCAteiAiJGFic2RpciIgJiYgXAotCSAgICBmdW5jX2ZhdGFsX2Vycm9yICJjYW5ub3QgZGV0ZXJtaW5lIGFic29sdXRlIGRpcmVjdG9yeSBuYW1lIG9mIFxgJGRpciciCi0JICBkaXI9IiRhYnNkaXIiCi0JICA7OwotCWVzYWMKLQljYXNlICIkZGVwbGlicyAiIGluCi0JKiIgLUwkZGlyICIqIHwgKiIgJGFyZyAiKikKLQkgICMgV2lsbCBvbmx5IGhhcHBlbiBmb3IgYWJzb2x1dGUgb3Igc3lzcm9vdCBhcmd1bWVudHMKLQkgIDs7Ci0JKikKLQkgICMgUHJlc2VydmUgc3lzcm9vdCwgYnV0IG5ldmVyIGluY2x1ZGUgcmVsYXRpdmUgZGlyZWN0b3JpZXMKLQkgIGNhc2UgJGRpciBpbgotCSAgICBbXFwvXSogfCBbQS1aYS16XTpbXFwvXSogfCA9KikgZnVuY19hcHBlbmQgZGVwbGlicyAiICRhcmciIDs7Ci0JICAgICopIGZ1bmNfYXBwZW5kIGRlcGxpYnMgIiAtTCRkaXIiIDs7Ci0JICBlc2FjCi0JICBmdW5jX2FwcGVuZCBsaWJfc2VhcmNoX3BhdGggIiAkZGlyIgotCSAgOzsKLQllc2FjCi0JY2FzZSAkaG9zdCBpbgotCSotKi1jeWd3aW4qIHwgKi0qLW1pbmd3KiB8ICotKi1wdzMyKiB8ICotKi1vczIqIHwgKi1jZWdjYyopCi0JICB0ZXN0YmluZGlyPWAkRUNITyAiJGRpciIgfCAkU0VEICdzKi9saWIkKi9iaW4qJ2AKLQkgIGNhc2UgOiRkbGxzZWFyY2hwYXRoOiBpbgotCSAgKiI6JGRpcjoiKikgOzsKLQkgIDo6KSBkbGxzZWFyY2hwYXRoPSRkaXI7OwotCSAgKikgZnVuY19hcHBlbmQgZGxsc2VhcmNocGF0aCAiOiRkaXIiOzsKLQkgIGVzYWMKLQkgIGNhc2UgOiRkbGxzZWFyY2hwYXRoOiBpbgotCSAgKiI6JHRlc3RiaW5kaXI6IiopIDs7Ci0JICA6OikgZGxsc2VhcmNocGF0aD0kdGVzdGJpbmRpcjs7Ci0JICAqKSBmdW5jX2FwcGVuZCBkbGxzZWFyY2hwYXRoICI6JHRlc3RiaW5kaXIiOzsKLQkgIGVzYWMKLQkgIDs7Ci0JZXNhYwotCWNvbnRpbnVlCi0JOzsKLQotICAgICAgLWwqKQotCWlmIHRlc3QgIlgkYXJnIiA9ICJYLWxjIiB8fCB0ZXN0ICJYJGFyZyIgPSAiWC1sbSI7IHRoZW4KLQkgIGNhc2UgJGhvc3QgaW4KLQkgICotKi1jeWd3aW4qIHwgKi0qLW1pbmd3KiB8ICotKi1wdzMyKiB8ICotKi1iZW9zKiB8ICotY2VnY2MqIHwgKi0qLWhhaWt1KikKLQkgICAgIyBUaGVzZSBzeXN0ZW1zIGRvbid0IGFjdHVhbGx5IGhhdmUgYSBDIG9yIG1hdGggbGlicmFyeSAoYXMgc3VjaCkKLQkgICAgY29udGludWUKLQkgICAgOzsKLQkgICotKi1vczIqKQotCSAgICAjIFRoZXNlIHN5c3RlbXMgZG9uJ3QgYWN0dWFsbHkgaGF2ZSBhIEMgbGlicmFyeSAoYXMgc3VjaCkKLQkgICAgdGVzdCAiWCRhcmciID0gIlgtbGMiICYmIGNvbnRpbnVlCi0JICAgIDs7Ci0JICAqLSotb3BlbmJzZCogfCAqLSotZnJlZWJzZCogfCAqLSotZHJhZ29uZmx5KikKLQkgICAgIyBEbyBub3QgaW5jbHVkZSBsaWJjIGR1ZSB0byB1cyBoYXZpbmcgbGliYy9saWJjX3IuCi0JICAgIHRlc3QgIlgkYXJnIiA9ICJYLWxjIiAmJiBjb250aW51ZQotCSAgICA7OwotCSAgKi0qLXJoYXBzb2R5KiB8ICotKi1kYXJ3aW4xLlswMTJdKQotCSAgICAjIFJoYXBzb2R5IEMgYW5kIG1hdGggbGlicmFyaWVzIGFyZSBpbiB0aGUgU3lzdGVtIGZyYW1ld29yawotCSAgICBmdW5jX2FwcGVuZCBkZXBsaWJzICIgU3lzdGVtLmx0ZnJhbWV3b3JrIgotCSAgICBjb250aW51ZQotCSAgICA7OwotCSAgKi0qLXNjbzMuMnY1KiB8ICotKi1zY281djYqKQotCSAgICAjIENhdXNlcyBwcm9ibGVtcyB3aXRoIF9fY3R5cGUKLQkgICAgdGVzdCAiWCRhcmciID0gIlgtbGMiICYmIGNvbnRpbnVlCi0JICAgIDs7Ci0JICAqLSotc3lzdjQuMnV3MiogfCAqLSotc3lzdjUqIHwgKi0qLXVuaXh3YXJlKiB8ICotKi1PcGVuVU5JWCopCi0JICAgICMgQ29tcGlsZXIgaW5zZXJ0cyBsaWJjIGluIHRoZSBjb3JyZWN0IHBsYWNlIGZvciB0aHJlYWRzIHRvIHdvcmsKLQkgICAgdGVzdCAiWCRhcmciID0gIlgtbGMiICYmIGNvbnRpbnVlCi0JICAgIDs7Ci0JICBlc2FjCi0JZWxpZiB0ZXN0ICJYJGFyZyIgPSAiWC1sY19yIjsgdGhlbgotCSBjYXNlICRob3N0IGluCi0JICotKi1vcGVuYnNkKiB8ICotKi1mcmVlYnNkKiB8ICotKi1kcmFnb25mbHkqKQotCSAgICMgRG8gbm90IGluY2x1ZGUgbGliY19yIGRpcmVjdGx5LCB1c2UgLXB0aHJlYWQgZmxhZy4KLQkgICBjb250aW51ZQotCSAgIDs7Ci0JIGVzYWMKLQlmaQotCWZ1bmNfYXBwZW5kIGRlcGxpYnMgIiAkYXJnIgotCWNvbnRpbnVlCi0JOzsKLQotICAgICAgLW1vZHVsZSkKLQltb2R1bGU9eWVzCi0JY29udGludWUKLQk7OwotCi0gICAgICAjIFRydTY0IFVOSVggdXNlcyAtbW9kZWwgW2FyZ10gdG8gZGV0ZXJtaW5lIHRoZSBsYXlvdXQgb2YgQysrCi0gICAgICAjIGNsYXNzZXMsIG5hbWUgbWFuZ2xpbmcsIGFuZCBleGNlcHRpb24gaGFuZGxpbmcuCi0gICAgICAjIERhcndpbiB1c2VzIHRoZSAtYXJjaCBmbGFnIHRvIGRldGVybWluZSBvdXRwdXQgYXJjaGl0ZWN0dXJlLgotICAgICAgLW1vZGVsfC1hcmNofC1pc3lzcm9vdHwtLXN5c3Jvb3QpCi0JZnVuY19hcHBlbmQgY29tcGlsZXJfZmxhZ3MgIiAkYXJnIgotCWZ1bmNfYXBwZW5kIGNvbXBpbGVfY29tbWFuZCAiICRhcmciCi0JZnVuY19hcHBlbmQgZmluYWxpemVfY29tbWFuZCAiICRhcmciCi0JcHJldj14Y29tcGlsZXIKLQljb250aW51ZQotCTs7Ci0KLSAgICAgIC1tdHwtbXRocmVhZHN8LWt0aHJlYWR8LUt0aHJlYWR8LXB0aHJlYWR8LXB0aHJlYWRzfC0tdGhyZWFkLXNhZmV8LXRocmVhZHMpCi0JZnVuY19hcHBlbmQgY29tcGlsZXJfZmxhZ3MgIiAkYXJnIgotCWZ1bmNfYXBwZW5kIGNvbXBpbGVfY29tbWFuZCAiICRhcmciCi0JZnVuY19hcHBlbmQgZmluYWxpemVfY29tbWFuZCAiICRhcmciCi0JY2FzZSAiJG5ld19pbmhlcml0ZWRfbGlua2VyX2ZsYWdzICIgaW4KLQkgICAgKiIgJGFyZyAiKikgOzsKLQkgICAgKiApIGZ1bmNfYXBwZW5kIG5ld19pbmhlcml0ZWRfbGlua2VyX2ZsYWdzICIgJGFyZyIgOzsKLQllc2FjCi0JY29udGludWUKLQk7OwotCi0gICAgICAtbXVsdGlfbW9kdWxlKQotCXNpbmdsZV9tb2R1bGU9IiR7d2x9LW11bHRpX21vZHVsZSIKLQljb250aW51ZQotCTs7Ci0KLSAgICAgIC1uby1mYXN0LWluc3RhbGwpCi0JZmFzdF9pbnN0YWxsPW5vCi0JY29udGludWUKLQk7OwotCi0gICAgICAtbm8taW5zdGFsbCkKLQljYXNlICRob3N0IGluCi0JKi0qLWN5Z3dpbiogfCAqLSotbWluZ3cqIHwgKi0qLXB3MzIqIHwgKi0qLW9zMiogfCAqLSotZGFyd2luKiB8ICotY2VnY2MqKQotCSAgIyBUaGUgUEFUSCBoYWNrZXJ5IGluIHdyYXBwZXIgc2NyaXB0cyBpcyByZXF1aXJlZCBvbiBXaW5kb3dzCi0JICAjIGFuZCBEYXJ3aW4gaW4gb3JkZXIgZm9yIHRoZSBsb2FkZXIgdG8gZmluZCBhbnkgZGxscyBpdCBuZWVkcy4KLQkgIGZ1bmNfd2FybmluZyAiXGAtbm8taW5zdGFsbCcgaXMgaWdub3JlZCBmb3IgJGhvc3QiCi0JICBmdW5jX3dhcm5pbmcgImFzc3VtaW5nIFxgLW5vLWZhc3QtaW5zdGFsbCcgaW5zdGVhZCIKLQkgIGZhc3RfaW5zdGFsbD1ubwotCSAgOzsKLQkqKSBub19pbnN0YWxsPXllcyA7OwotCWVzYWMKLQljb250aW51ZQotCTs7Ci0KLSAgICAgIC1uby11bmRlZmluZWQpCi0JYWxsb3dfdW5kZWZpbmVkPW5vCi0JY29udGludWUKLQk7OwotCi0gICAgICAtb2JqZWN0bGlzdCkKLQlwcmV2PW9iamVjdGxpc3QKLQljb250aW51ZQotCTs7Ci0KLSAgICAgIC1vKSBwcmV2PW91dHB1dCA7OwotCi0gICAgICAtcHJlY2lvdXMtZmlsZXMtcmVnZXgpCi0JcHJldj1wcmVjaW91c19yZWdleAotCWNvbnRpbnVlCi0JOzsKLQotICAgICAgLXJlbGVhc2UpCi0JcHJldj1yZWxlYXNlCi0JY29udGludWUKLQk7OwotCi0gICAgICAtcnBhdGgpCi0JcHJldj1ycGF0aAotCWNvbnRpbnVlCi0JOzsKLQotICAgICAgLVIpCi0JcHJldj14cnBhdGgKLQljb250aW51ZQotCTs7Ci0KLSAgICAgIC1SKikKLQlmdW5jX3N0cmlwbmFtZSAnLVInICcnICIkYXJnIgotCWRpcj0kZnVuY19zdHJpcG5hbWVfcmVzdWx0Ci0JIyBXZSBuZWVkIGFuIGFic29sdXRlIHBhdGguCi0JY2FzZSAkZGlyIGluCi0JW1xcL10qIHwgW0EtWmEtel06W1xcL10qKSA7OwotCT0qKQotCSAgZnVuY19zdHJpcG5hbWUgJz0nICcnICIkZGlyIgotCSAgZGlyPSRsdF9zeXNyb290JGZ1bmNfc3RyaXBuYW1lX3Jlc3VsdAotCSAgOzsKLQkqKQotCSAgZnVuY19mYXRhbF9lcnJvciAib25seSBhYnNvbHV0ZSBydW4tcGF0aHMgYXJlIGFsbG93ZWQiCi0JICA7OwotCWVzYWMKLQljYXNlICIkeHJwYXRoICIgaW4KLQkqIiAkZGlyICIqKSA7OwotCSopIGZ1bmNfYXBwZW5kIHhycGF0aCAiICRkaXIiIDs7Ci0JZXNhYwotCWNvbnRpbnVlCi0JOzsKLQotICAgICAgLXNoYXJlZCkKLQkjIFRoZSBlZmZlY3RzIG9mIC1zaGFyZWQgYXJlIGRlZmluZWQgaW4gYSBwcmV2aW91cyBsb29wLgotCWNvbnRpbnVlCi0JOzsKLQotICAgICAgLXNocmV4dCkKLQlwcmV2PXNocmV4dAotCWNvbnRpbnVlCi0JOzsKLQotICAgICAgLXN0YXRpYyB8IC1zdGF0aWMtbGlidG9vbC1saWJzKQotCSMgVGhlIGVmZmVjdHMgb2YgLXN0YXRpYyBhcmUgZGVmaW5lZCBpbiBhIHByZXZpb3VzIGxvb3AuCi0JIyBXZSB1c2VkIHRvIGRvIHRoZSBzYW1lIGFzIC1hbGwtc3RhdGljIG9uIHBsYXRmb3JtcyB0aGF0Ci0JIyBkaWRuJ3QgaGF2ZSBhIFBJQyBmbGFnLCBidXQgdGhlIGFzc3VtcHRpb24gdGhhdCB0aGUgZWZmZWN0cwotCSMgd291bGQgYmUgZXF1aXZhbGVudCB3YXMgd3JvbmcuICBJdCB3b3VsZCBicmVhayBvbiBhdCBsZWFzdAotCSMgRGlnaXRhbCBVbml4IGFuZCBBSVguCi0JY29udGludWUKLQk7OwotCi0gICAgICAtdGhyZWFkLXNhZmUpCi0JdGhyZWFkX3NhZmU9eWVzCi0JY29udGludWUKLQk7OwotCi0gICAgICAtdmVyc2lvbi1pbmZvKQotCXByZXY9dmluZm8KLQljb250aW51ZQotCTs7Ci0KLSAgICAgIC12ZXJzaW9uLW51bWJlcikKLQlwcmV2PXZpbmZvCi0JdmluZm9fbnVtYmVyPXllcwotCWNvbnRpbnVlCi0JOzsKLQotICAgICAgLXdlYWspCi0gICAgICAgIHByZXY9d2VhawotCWNvbnRpbnVlCi0JOzsKLQotICAgICAgLVdjLCopCi0JZnVuY19zdHJpcG5hbWUgJy1XYywnICcnICIkYXJnIgotCWFyZ3M9JGZ1bmNfc3RyaXBuYW1lX3Jlc3VsdAotCWFyZz0KLQlzYXZlX2lmcz0iJElGUyI7IElGUz0nLCcKLQlmb3IgZmxhZyBpbiAkYXJnczsgZG8KLQkgIElGUz0iJHNhdmVfaWZzIgotICAgICAgICAgIGZ1bmNfcXVvdGVfZm9yX2V2YWwgIiRmbGFnIgotCSAgZnVuY19hcHBlbmQgYXJnICIgJGZ1bmNfcXVvdGVfZm9yX2V2YWxfcmVzdWx0IgotCSAgZnVuY19hcHBlbmQgY29tcGlsZXJfZmxhZ3MgIiAkZnVuY19xdW90ZV9mb3JfZXZhbF9yZXN1bHQiCi0JZG9uZQotCUlGUz0iJHNhdmVfaWZzIgotCWZ1bmNfc3RyaXBuYW1lICcgJyAnJyAiJGFyZyIKLQlhcmc9JGZ1bmNfc3RyaXBuYW1lX3Jlc3VsdAotCTs7Ci0KLSAgICAgIC1XbCwqKQotCWZ1bmNfc3RyaXBuYW1lICctV2wsJyAnJyAiJGFyZyIKLQlhcmdzPSRmdW5jX3N0cmlwbmFtZV9yZXN1bHQKLQlhcmc9Ci0Jc2F2ZV9pZnM9IiRJRlMiOyBJRlM9JywnCi0JZm9yIGZsYWcgaW4gJGFyZ3M7IGRvCi0JICBJRlM9IiRzYXZlX2lmcyIKLSAgICAgICAgICBmdW5jX3F1b3RlX2Zvcl9ldmFsICIkZmxhZyIKLQkgIGZ1bmNfYXBwZW5kIGFyZyAiICR3bCRmdW5jX3F1b3RlX2Zvcl9ldmFsX3Jlc3VsdCIKLQkgIGZ1bmNfYXBwZW5kIGNvbXBpbGVyX2ZsYWdzICIgJHdsJGZ1bmNfcXVvdGVfZm9yX2V2YWxfcmVzdWx0IgotCSAgZnVuY19hcHBlbmQgbGlua2VyX2ZsYWdzICIgJGZ1bmNfcXVvdGVfZm9yX2V2YWxfcmVzdWx0IgotCWRvbmUKLQlJRlM9IiRzYXZlX2lmcyIKLQlmdW5jX3N0cmlwbmFtZSAnICcgJycgIiRhcmciCi0JYXJnPSRmdW5jX3N0cmlwbmFtZV9yZXN1bHQKLQk7OwotCi0gICAgICAtWGNvbXBpbGVyKQotCXByZXY9eGNvbXBpbGVyCi0JY29udGludWUKLQk7OwotCi0gICAgICAtWGxpbmtlcikKLQlwcmV2PXhsaW5rZXIKLQljb250aW51ZQotCTs7Ci0KLSAgICAgIC1YQ0NsaW5rZXIpCi0JcHJldj14Y2NsaW5rZXIKLQljb250aW51ZQotCTs7Ci0KLSAgICAgICMgLW1zZ18qIGZvciBvc2YgY2MKLSAgICAgIC1tc2dfKikKLQlmdW5jX3F1b3RlX2Zvcl9ldmFsICIkYXJnIgotCWFyZz0iJGZ1bmNfcXVvdGVfZm9yX2V2YWxfcmVzdWx0IgotCTs7Ci0KLSAgICAgICMgRmxhZ3MgdG8gYmUgcGFzc2VkIHRocm91Z2ggdW5jaGFuZ2VkLCB3aXRoIHJhdGlvbmFsZToKLSAgICAgICMgLTY0LCAtbWlwc1swLTldICAgICAgZW5hYmxlIDY0LWJpdCBtb2RlIGZvciB0aGUgU0dJIGNvbXBpbGVyCi0gICAgICAjIC1yWzAtOV1bMC05XSogICAgICAgIHNwZWNpZnkgcHJvY2Vzc29yIGZvciB0aGUgU0dJIGNvbXBpbGVyCi0gICAgICAjIC14YXJjaD0qLCAteHRhcmdldD0qIGVuYWJsZSA2NC1iaXQgbW9kZSBmb3IgdGhlIFN1biBjb21waWxlcgotICAgICAgIyArREEqLCArREQqICAgICAgICAgICBlbmFibGUgNjQtYml0IG1vZGUgZm9yIHRoZSBIUCBjb21waWxlcgotICAgICAgIyAtcSogICAgICAgICAgICAgICAgICBjb21waWxlciBhcmdzIGZvciB0aGUgSUJNIGNvbXBpbGVyCi0gICAgICAjIC1tKiwgLXRbNDVdKiwgLXR4c2NhbGUqIGFyY2hpdGVjdHVyZS1zcGVjaWZpYyBmbGFncyBmb3IgR0NDCi0gICAgICAjIC1GL3BhdGggICAgICAgICAgICAgIHBhdGggdG8gdW5pbnN0YWxsZWQgZnJhbWV3b3JrcywgZ2NjIG9uIGRhcndpbgotICAgICAgIyAtcCwgLXBnLCAtLWNvdmVyYWdlLCAtZnByb2ZpbGUtKiAgcHJvZmlsaW5nIGZsYWdzIGZvciBHQ0MKLSAgICAgICMgQGZpbGUgICAgICAgICAgICAgICAgR0NDIHJlc3BvbnNlIGZpbGVzCi0gICAgICAjIC10cD0qICAgICAgICAgICAgICAgIFBvcnRsYW5kIHBnY2MgdGFyZ2V0IHByb2Nlc3NvciBzZWxlY3Rpb24KLSAgICAgICMgLS1zeXNyb290PSogICAgICAgICAgZm9yIHN5c3Jvb3Qgc3VwcG9ydAotICAgICAgIyAtTyosIC1mbHRvKiwgLWZ3aG9wciosIC1mdXNlLWxpbmtlci1wbHVnaW4gR0NDIGxpbmstdGltZSBvcHRpbWl6YXRpb24KLSAgICAgIC02NHwtbWlwc1swLTldfC1yWzAtOV1bMC05XSp8LXhhcmNoPSp8LXh0YXJnZXQ9KnwrREEqfCtERCp8LXEqfC1tKnwgXAotICAgICAgLXRbNDVdKnwtdHhzY2FsZSp8LXB8LXBnfC0tY292ZXJhZ2V8LWZwcm9maWxlLSp8LUYqfEAqfC10cD0qfC0tc3lzcm9vdD0qfCBcCi0gICAgICAtTyp8LWZsdG8qfC1md2hvcHIqfC1mdXNlLWxpbmtlci1wbHVnaW4pCi0gICAgICAgIGZ1bmNfcXVvdGVfZm9yX2V2YWwgIiRhcmciCi0JYXJnPSIkZnVuY19xdW90ZV9mb3JfZXZhbF9yZXN1bHQiCi0gICAgICAgIGZ1bmNfYXBwZW5kIGNvbXBpbGVfY29tbWFuZCAiICRhcmciCi0gICAgICAgIGZ1bmNfYXBwZW5kIGZpbmFsaXplX2NvbW1hbmQgIiAkYXJnIgotICAgICAgICBmdW5jX2FwcGVuZCBjb21waWxlcl9mbGFncyAiICRhcmciCi0gICAgICAgIGNvbnRpbnVlCi0gICAgICAgIDs7Ci0KLSAgICAgICMgU29tZSBvdGhlciBjb21waWxlciBmbGFnLgotICAgICAgLSogfCArKikKLSAgICAgICAgZnVuY19xdW90ZV9mb3JfZXZhbCAiJGFyZyIKLQlhcmc9IiRmdW5jX3F1b3RlX2Zvcl9ldmFsX3Jlc3VsdCIKLQk7OwotCi0gICAgICAqLiRvYmpleHQpCi0JIyBBIHN0YW5kYXJkIG9iamVjdC4KLQlmdW5jX2FwcGVuZCBvYmpzICIgJGFyZyIKLQk7OwotCi0gICAgICAqLmxvKQotCSMgQSBsaWJ0b29sLWNvbnRyb2xsZWQgb2JqZWN0LgotCi0JIyBDaGVjayB0byBzZWUgdGhhdCB0aGlzIHJlYWxseSBpcyBhIGxpYnRvb2wgb2JqZWN0LgotCWlmIGZ1bmNfbGFsaWJfdW5zYWZlX3AgIiRhcmciOyB0aGVuCi0JICBwaWNfb2JqZWN0PQotCSAgbm9uX3BpY19vYmplY3Q9Ci0KLQkgICMgUmVhZCB0aGUgLmxvIGZpbGUKLQkgIGZ1bmNfc291cmNlICIkYXJnIgotCi0JICBpZiB0ZXN0IC16ICIkcGljX29iamVjdCIgfHwKLQkgICAgIHRlc3QgLXogIiRub25fcGljX29iamVjdCIgfHwKLQkgICAgIHRlc3QgIiRwaWNfb2JqZWN0IiA9IG5vbmUgJiYKLQkgICAgIHRlc3QgIiRub25fcGljX29iamVjdCIgPSBub25lOyB0aGVuCi0JICAgIGZ1bmNfZmF0YWxfZXJyb3IgImNhbm5vdCBmaW5kIG5hbWUgb2Ygb2JqZWN0IGZvciBcYCRhcmcnIgotCSAgZmkKLQotCSAgIyBFeHRyYWN0IHN1YmRpcmVjdG9yeSBmcm9tIHRoZSBhcmd1bWVudC4KLQkgIGZ1bmNfZGlybmFtZSAiJGFyZyIgIi8iICIiCi0JICB4ZGlyPSIkZnVuY19kaXJuYW1lX3Jlc3VsdCIKLQotCSAgaWYgdGVzdCAiJHBpY19vYmplY3QiICE9IG5vbmU7IHRoZW4KLQkgICAgIyBQcmVwZW5kIHRoZSBzdWJkaXJlY3RvcnkgdGhlIG9iamVjdCBpcyBmb3VuZCBpbi4KLQkgICAgcGljX29iamVjdD0iJHhkaXIkcGljX29iamVjdCIKLQotCSAgICBpZiB0ZXN0ICIkcHJldiIgPSBkbGZpbGVzOyB0aGVuCi0JICAgICAgaWYgdGVzdCAiJGJ1aWxkX2xpYnRvb2xfbGlicyIgPSB5ZXMgJiYgdGVzdCAiJGRsb3Blbl9zdXBwb3J0IiA9IHllczsgdGhlbgotCQlmdW5jX2FwcGVuZCBkbGZpbGVzICIgJHBpY19vYmplY3QiCi0JCXByZXY9Ci0JCWNvbnRpbnVlCi0JICAgICAgZWxzZQotCQkjIElmIGxpYnRvb2wgb2JqZWN0cyBhcmUgdW5zdXBwb3J0ZWQsIHRoZW4gd2UgbmVlZCB0byBwcmVsb2FkLgotCQlwcmV2PWRscHJlZmlsZXMKLQkgICAgICBmaQotCSAgICBmaQotCi0JICAgICMgQ0hFQ0sgTUU6ICBJIHRoaW5rIEkgYnVzdGVkIHRoaXMuICAtT3NzYW1hCi0JICAgIGlmIHRlc3QgIiRwcmV2IiA9IGRscHJlZmlsZXM7IHRoZW4KLQkgICAgICAjIFByZWxvYWQgdGhlIG9sZC1zdHlsZSBvYmplY3QuCi0JICAgICAgZnVuY19hcHBlbmQgZGxwcmVmaWxlcyAiICRwaWNfb2JqZWN0IgotCSAgICAgIHByZXY9Ci0JICAgIGZpCi0KLQkgICAgIyBBIFBJQyBvYmplY3QuCi0JICAgIGZ1bmNfYXBwZW5kIGxpYm9ianMgIiAkcGljX29iamVjdCIKLQkgICAgYXJnPSIkcGljX29iamVjdCIKLQkgIGZpCi0KLQkgICMgTm9uLVBJQyBvYmplY3QuCi0JICBpZiB0ZXN0ICIkbm9uX3BpY19vYmplY3QiICE9IG5vbmU7IHRoZW4KLQkgICAgIyBQcmVwZW5kIHRoZSBzdWJkaXJlY3RvcnkgdGhlIG9iamVjdCBpcyBmb3VuZCBpbi4KLQkgICAgbm9uX3BpY19vYmplY3Q9IiR4ZGlyJG5vbl9waWNfb2JqZWN0IgotCi0JICAgICMgQSBzdGFuZGFyZCBub24tUElDIG9iamVjdAotCSAgICBmdW5jX2FwcGVuZCBub25fcGljX29iamVjdHMgIiAkbm9uX3BpY19vYmplY3QiCi0JICAgIGlmIHRlc3QgLXogIiRwaWNfb2JqZWN0IiB8fCB0ZXN0ICIkcGljX29iamVjdCIgPSBub25lIDsgdGhlbgotCSAgICAgIGFyZz0iJG5vbl9waWNfb2JqZWN0IgotCSAgICBmaQotCSAgZWxzZQotCSAgICAjIElmIHRoZSBQSUMgb2JqZWN0IGV4aXN0cywgdXNlIGl0IGluc3RlYWQuCi0JICAgICMgJHhkaXIgd2FzIHByZXBlbmRlZCB0byAkcGljX29iamVjdCBhYm92ZS4KLQkgICAgbm9uX3BpY19vYmplY3Q9IiRwaWNfb2JqZWN0IgotCSAgICBmdW5jX2FwcGVuZCBub25fcGljX29iamVjdHMgIiAkbm9uX3BpY19vYmplY3QiCi0JICBmaQotCWVsc2UKLQkgICMgT25seSBhbiBlcnJvciBpZiBub3QgZG9pbmcgYSBkcnktcnVuLgotCSAgaWYgJG9wdF9kcnlfcnVuOyB0aGVuCi0JICAgICMgRXh0cmFjdCBzdWJkaXJlY3RvcnkgZnJvbSB0aGUgYXJndW1lbnQuCi0JICAgIGZ1bmNfZGlybmFtZSAiJGFyZyIgIi8iICIiCi0JICAgIHhkaXI9IiRmdW5jX2Rpcm5hbWVfcmVzdWx0IgotCi0JICAgIGZ1bmNfbG8ybyAiJGFyZyIKLQkgICAgcGljX29iamVjdD0keGRpciRvYmpkaXIvJGZ1bmNfbG8yb19yZXN1bHQKLQkgICAgbm9uX3BpY19vYmplY3Q9JHhkaXIkZnVuY19sbzJvX3Jlc3VsdAotCSAgICBmdW5jX2FwcGVuZCBsaWJvYmpzICIgJHBpY19vYmplY3QiCi0JICAgIGZ1bmNfYXBwZW5kIG5vbl9waWNfb2JqZWN0cyAiICRub25fcGljX29iamVjdCIKLQkgIGVsc2UKLQkgICAgZnVuY19mYXRhbF9lcnJvciAiXGAkYXJnJyBpcyBub3QgYSB2YWxpZCBsaWJ0b29sIG9iamVjdCIKLQkgIGZpCi0JZmkKLQk7OwotCi0gICAgICAqLiRsaWJleHQpCi0JIyBBbiBhcmNoaXZlLgotCWZ1bmNfYXBwZW5kIGRlcGxpYnMgIiAkYXJnIgotCWZ1bmNfYXBwZW5kIG9sZF9kZXBsaWJzICIgJGFyZyIKLQljb250aW51ZQotCTs7Ci0KLSAgICAgICoubGEpCi0JIyBBIGxpYnRvb2wtY29udHJvbGxlZCBsaWJyYXJ5LgotCi0JZnVuY19yZXNvbHZlX3N5c3Jvb3QgIiRhcmciCi0JaWYgdGVzdCAiJHByZXYiID0gZGxmaWxlczsgdGhlbgotCSAgIyBUaGlzIGxpYnJhcnkgd2FzIHNwZWNpZmllZCB3aXRoIC1kbG9wZW4uCi0JICBmdW5jX2FwcGVuZCBkbGZpbGVzICIgJGZ1bmNfcmVzb2x2ZV9zeXNyb290X3Jlc3VsdCIKLQkgIHByZXY9Ci0JZWxpZiB0ZXN0ICIkcHJldiIgPSBkbHByZWZpbGVzOyB0aGVuCi0JICAjIFRoZSBsaWJyYXJ5IHdhcyBzcGVjaWZpZWQgd2l0aCAtZGxwcmVvcGVuLgotCSAgZnVuY19hcHBlbmQgZGxwcmVmaWxlcyAiICRmdW5jX3Jlc29sdmVfc3lzcm9vdF9yZXN1bHQiCi0JICBwcmV2PQotCWVsc2UKLQkgIGZ1bmNfYXBwZW5kIGRlcGxpYnMgIiAkZnVuY19yZXNvbHZlX3N5c3Jvb3RfcmVzdWx0IgotCWZpCi0JY29udGludWUKLQk7OwotCi0gICAgICAjIFNvbWUgb3RoZXIgY29tcGlsZXIgYXJndW1lbnQuCi0gICAgICAqKQotCSMgVW5rbm93biBhcmd1bWVudHMgaW4gYm90aCBmaW5hbGl6ZV9jb21tYW5kIGFuZCBjb21waWxlX2NvbW1hbmQgbmVlZAotCSMgdG8gYmUgYWVzdGhldGljYWxseSBxdW90ZWQgYmVjYXVzZSB0aGV5IGFyZSBldmFsZWQgbGF0ZXIuCi0JZnVuY19xdW90ZV9mb3JfZXZhbCAiJGFyZyIKLQlhcmc9IiRmdW5jX3F1b3RlX2Zvcl9ldmFsX3Jlc3VsdCIKLQk7OwotICAgICAgZXNhYyAjIGFyZwotCi0gICAgICAjIE5vdyBhY3R1YWxseSBzdWJzdGl0dXRlIHRoZSBhcmd1bWVudCBpbnRvIHRoZSBjb21tYW5kcy4KLSAgICAgIGlmIHRlc3QgLW4gIiRhcmciOyB0aGVuCi0JZnVuY19hcHBlbmQgY29tcGlsZV9jb21tYW5kICIgJGFyZyIKLQlmdW5jX2FwcGVuZCBmaW5hbGl6ZV9jb21tYW5kICIgJGFyZyIKLSAgICAgIGZpCi0gICAgZG9uZSAjIGFyZ3VtZW50IHBhcnNpbmcgbG9vcAotCi0gICAgdGVzdCAtbiAiJHByZXYiICYmIFwKLSAgICAgIGZ1bmNfZmF0YWxfaGVscCAidGhlIFxgJHByZXZhcmcnIG9wdGlvbiByZXF1aXJlcyBhbiBhcmd1bWVudCIKLQotICAgIGlmIHRlc3QgIiRleHBvcnRfZHluYW1pYyIgPSB5ZXMgJiYgdGVzdCAtbiAiJGV4cG9ydF9keW5hbWljX2ZsYWdfc3BlYyI7IHRoZW4KLSAgICAgIGV2YWwgYXJnPVwiJGV4cG9ydF9keW5hbWljX2ZsYWdfc3BlY1wiCi0gICAgICBmdW5jX2FwcGVuZCBjb21waWxlX2NvbW1hbmQgIiAkYXJnIgotICAgICAgZnVuY19hcHBlbmQgZmluYWxpemVfY29tbWFuZCAiICRhcmciCi0gICAgZmkKLQotICAgIG9sZGxpYnM9Ci0gICAgIyBjYWxjdWxhdGUgdGhlIG5hbWUgb2YgdGhlIGZpbGUsIHdpdGhvdXQgaXRzIGRpcmVjdG9yeQotICAgIGZ1bmNfYmFzZW5hbWUgIiRvdXRwdXQiCi0gICAgb3V0cHV0bmFtZT0iJGZ1bmNfYmFzZW5hbWVfcmVzdWx0IgotICAgIGxpYm9ianNfc2F2ZT0iJGxpYm9ianMiCi0KLSAgICBpZiB0ZXN0IC1uICIkc2hsaWJwYXRoX3ZhciI7IHRoZW4KLSAgICAgICMgZ2V0IHRoZSBkaXJlY3RvcmllcyBsaXN0ZWQgaW4gJHNobGlicGF0aF92YXIKLSAgICAgIGV2YWwgc2hsaWJfc2VhcmNoX3BhdGg9XGBcJEVDSE8gXCJcJHskc2hsaWJwYXRoX3Zhcn1cIiBcfCBcJFNFRCBcJ3MvOi8gL2dcJ1xgCi0gICAgZWxzZQotICAgICAgc2hsaWJfc2VhcmNoX3BhdGg9Ci0gICAgZmkKLSAgICBldmFsIHN5c19saWJfc2VhcmNoX3BhdGg9XCIkc3lzX2xpYl9zZWFyY2hfcGF0aF9zcGVjXCIKLSAgICBldmFsIHN5c19saWJfZGxzZWFyY2hfcGF0aD1cIiRzeXNfbGliX2Rsc2VhcmNoX3BhdGhfc3BlY1wiCi0KLSAgICBmdW5jX2Rpcm5hbWUgIiRvdXRwdXQiICIvIiAiIgotICAgIG91dHB1dF9vYmpkaXI9IiRmdW5jX2Rpcm5hbWVfcmVzdWx0JG9iamRpciIKLSAgICBmdW5jX3RvX3Rvb2xfZmlsZSAiJG91dHB1dF9vYmpkaXIvIgotICAgIHRvb2xfb3V0cHV0X29iamRpcj0kZnVuY190b190b29sX2ZpbGVfcmVzdWx0Ci0gICAgIyBDcmVhdGUgdGhlIG9iamVjdCBkaXJlY3RvcnkuCi0gICAgZnVuY19ta2Rpcl9wICIkb3V0cHV0X29iamRpciIKLQotICAgICMgRGV0ZXJtaW5lIHRoZSB0eXBlIG9mIG91dHB1dAotICAgIGNhc2UgJG91dHB1dCBpbgotICAgICIiKQotICAgICAgZnVuY19mYXRhbF9oZWxwICJ5b3UgbXVzdCBzcGVjaWZ5IGFuIG91dHB1dCBmaWxlIgotICAgICAgOzsKLSAgICAqLiRsaWJleHQpIGxpbmttb2RlPW9sZGxpYiA7OwotICAgICoubG8gfCAqLiRvYmpleHQpIGxpbmttb2RlPW9iaiA7OwotICAgICoubGEpIGxpbmttb2RlPWxpYiA7OwotICAgICopIGxpbmttb2RlPXByb2cgOzsgIyBBbnl0aGluZyBlbHNlIHNob3VsZCBiZSBhIHByb2dyYW0uCi0gICAgZXNhYwotCi0gICAgc3BlY2lhbGRlcGxpYnM9Ci0KLSAgICBsaWJzPQotICAgICMgRmluZCBhbGwgaW50ZXJkZXBlbmRlbnQgZGVwbGlicyBieSBzZWFyY2hpbmcgZm9yIGxpYnJhcmllcwotICAgICMgdGhhdCBhcmUgbGlua2VkIG1vcmUgdGhhbiBvbmNlIChlLmcuIC1sYSAtbGIgLWxhKQotICAgIGZvciBkZXBsaWIgaW4gJGRlcGxpYnM7IGRvCi0gICAgICBpZiAkb3B0X3ByZXNlcnZlX2R1cF9kZXBzIDsgdGhlbgotCWNhc2UgIiRsaWJzICIgaW4KLQkqIiAkZGVwbGliICIqKSBmdW5jX2FwcGVuZCBzcGVjaWFsZGVwbGlicyAiICRkZXBsaWIiIDs7Ci0JZXNhYwotICAgICAgZmkKLSAgICAgIGZ1bmNfYXBwZW5kIGxpYnMgIiAkZGVwbGliIgotICAgIGRvbmUKLQotICAgIGlmIHRlc3QgIiRsaW5rbW9kZSIgPSBsaWI7IHRoZW4KLSAgICAgIGxpYnM9IiRwcmVkZXBzICRsaWJzICRjb21waWxlcl9saWJfc2VhcmNoX3BhdGggJHBvc3RkZXBzIgotCi0gICAgICAjIENvbXB1dGUgbGlicmFyaWVzIHRoYXQgYXJlIGxpc3RlZCBtb3JlIHRoYW4gb25jZSBpbiAkcHJlZGVwcwotICAgICAgIyAkcG9zdGRlcHMgYW5kIG1hcmsgdGhlbSBhcyBzcGVjaWFsIChpLmUuLCB3aG9zZSBkdXBsaWNhdGVzIGFyZQotICAgICAgIyBub3QgdG8gYmUgZWxpbWluYXRlZCkuCi0gICAgICBwcmVfcG9zdF9kZXBzPQotICAgICAgaWYgJG9wdF9kdXBsaWNhdGVfY29tcGlsZXJfZ2VuZXJhdGVkX2RlcHM7IHRoZW4KLQlmb3IgcHJlX3Bvc3RfZGVwIGluICRwcmVkZXBzICRwb3N0ZGVwczsgZG8KLQkgIGNhc2UgIiRwcmVfcG9zdF9kZXBzICIgaW4KLQkgICoiICRwcmVfcG9zdF9kZXAgIiopIGZ1bmNfYXBwZW5kIHNwZWNpYWxkZXBsaWJzICIgJHByZV9wb3N0X2RlcHMiIDs7Ci0JICBlc2FjCi0JICBmdW5jX2FwcGVuZCBwcmVfcG9zdF9kZXBzICIgJHByZV9wb3N0X2RlcCIKLQlkb25lCi0gICAgICBmaQotICAgICAgcHJlX3Bvc3RfZGVwcz0KLSAgICBmaQotCi0gICAgZGVwbGlicz0KLSAgICBuZXdkZXBlbmRlbmN5X2xpYnM9Ci0gICAgbmV3bGliX3NlYXJjaF9wYXRoPQotICAgIG5lZWRfcmVsaW5rPW5vICMgd2hldGhlciB3ZSdyZSBsaW5raW5nIGFueSB1bmluc3RhbGxlZCBsaWJ0b29sIGxpYnJhcmllcwotICAgIG5vdGluc3RfZGVwbGlicz0gIyBub3QtaW5zdGFsbGVkIGxpYnRvb2wgbGlicmFyaWVzCi0gICAgbm90aW5zdF9wYXRoPSAjIHBhdGhzIHRoYXQgY29udGFpbiBub3QtaW5zdGFsbGVkIGxpYnRvb2wgbGlicmFyaWVzCi0KLSAgICBjYXNlICRsaW5rbW9kZSBpbgotICAgIGxpYikKLQlwYXNzZXM9ImNvbnYgZGxwcmVvcGVuIGxpbmsiCi0JZm9yIGZpbGUgaW4gJGRsZmlsZXMgJGRscHJlZmlsZXM7IGRvCi0JICBjYXNlICRmaWxlIGluCi0JICAqLmxhKSA7OwotCSAgKikKLQkgICAgZnVuY19mYXRhbF9oZWxwICJsaWJyYXJpZXMgY2FuIFxgLWRsb3Blbicgb25seSBsaWJ0b29sIGxpYnJhcmllczogJGZpbGUiCi0JICAgIDs7Ci0JICBlc2FjCi0JZG9uZQotCTs7Ci0gICAgcHJvZykKLQljb21waWxlX2RlcGxpYnM9Ci0JZmluYWxpemVfZGVwbGlicz0KLQlhbGxkZXBsaWJzPW5vCi0JbmV3ZGxmaWxlcz0KLQluZXdkbHByZWZpbGVzPQotCXBhc3Nlcz0iY29udiBzY2FuIGRsb3BlbiBkbHByZW9wZW4gbGluayIKLQk7OwotICAgICopICBwYXNzZXM9ImNvbnYiCi0JOzsKLSAgICBlc2FjCi0KLSAgICBmb3IgcGFzcyBpbiAkcGFzc2VzOyBkbwotICAgICAgIyBUaGUgcHJlb3BlbiBwYXNzIGluIGxpYiBtb2RlIHJldmVyc2VzICRkZXBsaWJzOyBwdXQgaXQgYmFjayBoZXJlCi0gICAgICAjIHNvIHRoYXQgLUwgY29tZXMgYmVmb3JlIGxpYnMgdGhhdCBuZWVkIGl0IGZvciBpbnN0YW5jZS4uLgotICAgICAgaWYgdGVzdCAiJGxpbmttb2RlLCRwYXNzIiA9ICJsaWIsbGluayI7IHRoZW4KLQkjIyBGSVhNRTogRmluZCB0aGUgcGxhY2Ugd2hlcmUgdGhlIGxpc3QgaXMgcmVidWlsdCBpbiB0aGUgd3JvbmcKLQkjIyAgICAgICAgb3JkZXIsIGFuZCBmaXggaXQgdGhlcmUgcHJvcGVybHkKLSAgICAgICAgdG1wX2RlcGxpYnM9Ci0JZm9yIGRlcGxpYiBpbiAkZGVwbGliczsgZG8KLQkgIHRtcF9kZXBsaWJzPSIkZGVwbGliICR0bXBfZGVwbGlicyIKLQlkb25lCi0JZGVwbGlicz0iJHRtcF9kZXBsaWJzIgotICAgICAgZmkKLQotICAgICAgaWYgdGVzdCAiJGxpbmttb2RlLCRwYXNzIiA9ICJsaWIsbGluayIgfHwKLQkgdGVzdCAiJGxpbmttb2RlLCRwYXNzIiA9ICJwcm9nLHNjYW4iOyB0aGVuCi0JbGlicz0iJGRlcGxpYnMiCi0JZGVwbGlicz0KLSAgICAgIGZpCi0gICAgICBpZiB0ZXN0ICIkbGlua21vZGUiID0gcHJvZzsgdGhlbgotCWNhc2UgJHBhc3MgaW4KLQlkbG9wZW4pIGxpYnM9IiRkbGZpbGVzIiA7OwotCWRscHJlb3BlbikgbGlicz0iJGRscHJlZmlsZXMiIDs7Ci0JbGluaykgbGlicz0iJGRlcGxpYnMgJURFUExJQlMlICRkZXBlbmRlbmN5X2xpYnMiIDs7Ci0JZXNhYwotICAgICAgZmkKLSAgICAgIGlmIHRlc3QgIiRsaW5rbW9kZSwkcGFzcyIgPSAibGliLGRscHJlb3BlbiI7IHRoZW4KLQkjIENvbGxlY3QgYW5kIGZvcndhcmQgZGVwbGlicyBvZiBwcmVvcGVuZWQgbGlidG9vbCBsaWJzCi0JZm9yIGxpYiBpbiAkZGxwcmVmaWxlczsgZG8KLQkgICMgSWdub3JlIG5vbi1saWJ0b29sLWxpYnMKLQkgIGRlcGVuZGVuY3lfbGlicz0KLQkgIGZ1bmNfcmVzb2x2ZV9zeXNyb290ICIkbGliIgotCSAgY2FzZSAkbGliIGluCi0JICAqLmxhKQlmdW5jX3NvdXJjZSAiJGZ1bmNfcmVzb2x2ZV9zeXNyb290X3Jlc3VsdCIgOzsKLQkgIGVzYWMKLQotCSAgIyBDb2xsZWN0IHByZW9wZW5lZCBsaWJ0b29sIGRlcGxpYnMsIGV4Y2VwdCBhbnkgdGhpcyBsaWJyYXJ5Ci0JICAjIGhhcyBkZWNsYXJlZCBhcyB3ZWFrIGxpYnMKLQkgIGZvciBkZXBsaWIgaW4gJGRlcGVuZGVuY3lfbGliczsgZG8KLQkgICAgZnVuY19iYXNlbmFtZSAiJGRlcGxpYiIKLSAgICAgICAgICAgIGRlcGxpYl9iYXNlPSRmdW5jX2Jhc2VuYW1lX3Jlc3VsdAotCSAgICBjYXNlICIgJHdlYWtfbGlicyAiIGluCi0JICAgICoiICRkZXBsaWJfYmFzZSAiKikgOzsKLQkgICAgKikgZnVuY19hcHBlbmQgZGVwbGlicyAiICRkZXBsaWIiIDs7Ci0JICAgIGVzYWMKLQkgIGRvbmUKLQlkb25lCi0JbGlicz0iJGRscHJlZmlsZXMiCi0gICAgICBmaQotICAgICAgaWYgdGVzdCAiJHBhc3MiID0gZGxvcGVuOyB0aGVuCi0JIyBDb2xsZWN0IGRscHJlb3BlbmVkIGxpYnJhcmllcwotCXNhdmVfZGVwbGlicz0iJGRlcGxpYnMiCi0JZGVwbGlicz0KLSAgICAgIGZpCi0KLSAgICAgIGZvciBkZXBsaWIgaW4gJGxpYnM7IGRvCi0JbGliPQotCWZvdW5kPW5vCi0JY2FzZSAkZGVwbGliIGluCi0JLW10fC1tdGhyZWFkc3wta3RocmVhZHwtS3RocmVhZHwtcHRocmVhZHwtcHRocmVhZHN8LS10aHJlYWQtc2FmZXwtdGhyZWFkcykKLQkgIGlmIHRlc3QgIiRsaW5rbW9kZSwkcGFzcyIgPSAicHJvZyxsaW5rIjsgdGhlbgotCSAgICBjb21waWxlX2RlcGxpYnM9IiRkZXBsaWIgJGNvbXBpbGVfZGVwbGlicyIKLQkgICAgZmluYWxpemVfZGVwbGlicz0iJGRlcGxpYiAkZmluYWxpemVfZGVwbGlicyIKLQkgIGVsc2UKLQkgICAgZnVuY19hcHBlbmQgY29tcGlsZXJfZmxhZ3MgIiAkZGVwbGliIgotCSAgICBpZiB0ZXN0ICIkbGlua21vZGUiID0gbGliIDsgdGhlbgotCQljYXNlICIkbmV3X2luaGVyaXRlZF9saW5rZXJfZmxhZ3MgIiBpbgotCQkgICAgKiIgJGRlcGxpYiAiKikgOzsKLQkJICAgICogKSBmdW5jX2FwcGVuZCBuZXdfaW5oZXJpdGVkX2xpbmtlcl9mbGFncyAiICRkZXBsaWIiIDs7Ci0JCWVzYWMKLQkgICAgZmkKLQkgIGZpCi0JICBjb250aW51ZQotCSAgOzsKLQktbCopCi0JICBpZiB0ZXN0ICIkbGlua21vZGUiICE9IGxpYiAmJiB0ZXN0ICIkbGlua21vZGUiICE9IHByb2c7IHRoZW4KLQkgICAgZnVuY193YXJuaW5nICJcYC1sJyBpcyBpZ25vcmVkIGZvciBhcmNoaXZlcy9vYmplY3RzIgotCSAgICBjb250aW51ZQotCSAgZmkKLQkgIGZ1bmNfc3RyaXBuYW1lICctbCcgJycgIiRkZXBsaWIiCi0JICBuYW1lPSRmdW5jX3N0cmlwbmFtZV9yZXN1bHQKLQkgIGlmIHRlc3QgIiRsaW5rbW9kZSIgPSBsaWI7IHRoZW4KLQkgICAgc2VhcmNoZGlycz0iJG5ld2xpYl9zZWFyY2hfcGF0aCAkbGliX3NlYXJjaF9wYXRoICRjb21waWxlcl9saWJfc2VhcmNoX2RpcnMgJHN5c19saWJfc2VhcmNoX3BhdGggJHNobGliX3NlYXJjaF9wYXRoIgotCSAgZWxzZQotCSAgICBzZWFyY2hkaXJzPSIkbmV3bGliX3NlYXJjaF9wYXRoICRsaWJfc2VhcmNoX3BhdGggJHN5c19saWJfc2VhcmNoX3BhdGggJHNobGliX3NlYXJjaF9wYXRoIgotCSAgZmkKLQkgIGZvciBzZWFyY2hkaXIgaW4gJHNlYXJjaGRpcnM7IGRvCi0JICAgIGZvciBzZWFyY2hfZXh0IGluIC5sYSAkc3RkX3NocmV4dCAuc28gLmE7IGRvCi0JICAgICAgIyBTZWFyY2ggdGhlIGxpYnRvb2wgbGlicmFyeQotCSAgICAgIGxpYj0iJHNlYXJjaGRpci9saWIke25hbWV9JHtzZWFyY2hfZXh0fSIKLQkgICAgICBpZiB0ZXN0IC1mICIkbGliIjsgdGhlbgotCQlpZiB0ZXN0ICIkc2VhcmNoX2V4dCIgPSAiLmxhIjsgdGhlbgotCQkgIGZvdW5kPXllcwotCQllbHNlCi0JCSAgZm91bmQ9bm8KLQkJZmkKLQkJYnJlYWsgMgotCSAgICAgIGZpCi0JICAgIGRvbmUKLQkgIGRvbmUKLQkgIGlmIHRlc3QgIiRmb3VuZCIgIT0geWVzOyB0aGVuCi0JICAgICMgZGVwbGliIGRvZXNuJ3Qgc2VlbSB0byBiZSBhIGxpYnRvb2wgbGlicmFyeQotCSAgICBpZiB0ZXN0ICIkbGlua21vZGUsJHBhc3MiID0gInByb2csbGluayI7IHRoZW4KLQkgICAgICBjb21waWxlX2RlcGxpYnM9IiRkZXBsaWIgJGNvbXBpbGVfZGVwbGlicyIKLQkgICAgICBmaW5hbGl6ZV9kZXBsaWJzPSIkZGVwbGliICRmaW5hbGl6ZV9kZXBsaWJzIgotCSAgICBlbHNlCi0JICAgICAgZGVwbGlicz0iJGRlcGxpYiAkZGVwbGlicyIKLQkgICAgICB0ZXN0ICIkbGlua21vZGUiID0gbGliICYmIG5ld2RlcGVuZGVuY3lfbGlicz0iJGRlcGxpYiAkbmV3ZGVwZW5kZW5jeV9saWJzIgotCSAgICBmaQotCSAgICBjb250aW51ZQotCSAgZWxzZSAjIGRlcGxpYiBpcyBhIGxpYnRvb2wgbGlicmFyeQotCSAgICAjIElmICRhbGxvd19saWJ0b29sX2xpYnNfd2l0aF9zdGF0aWNfcnVudGltZXMgJiYgJGRlcGxpYiBpcyBhIHN0ZGxpYiwKLQkgICAgIyBXZSBuZWVkIHRvIGRvIHNvbWUgc3BlY2lhbCB0aGluZ3MgaGVyZSwgYW5kIG5vdCBsYXRlci4KLQkgICAgaWYgdGVzdCAiWCRhbGxvd19saWJ0b29sX2xpYnNfd2l0aF9zdGF0aWNfcnVudGltZXMiID0gIlh5ZXMiIDsgdGhlbgotCSAgICAgIGNhc2UgIiAkcHJlZGVwcyAkcG9zdGRlcHMgIiBpbgotCSAgICAgICoiICRkZXBsaWIgIiopCi0JCWlmIGZ1bmNfbGFsaWJfcCAiJGxpYiI7IHRoZW4KLQkJICBsaWJyYXJ5X25hbWVzPQotCQkgIG9sZF9saWJyYXJ5PQotCQkgIGZ1bmNfc291cmNlICIkbGliIgotCQkgIGZvciBsIGluICRvbGRfbGlicmFyeSAkbGlicmFyeV9uYW1lczsgZG8KLQkJICAgIGxsPSIkbCIKLQkJICBkb25lCi0JCSAgaWYgdGVzdCAiWCRsbCIgPSAiWCRvbGRfbGlicmFyeSIgOyB0aGVuICMgb25seSBzdGF0aWMgdmVyc2lvbiBhdmFpbGFibGUKLQkJICAgIGZvdW5kPW5vCi0JCSAgICBmdW5jX2Rpcm5hbWUgIiRsaWIiICIiICIuIgotCQkgICAgbGFkaXI9IiRmdW5jX2Rpcm5hbWVfcmVzdWx0IgotCQkgICAgbGliPSRsYWRpci8kb2xkX2xpYnJhcnkKLQkJICAgIGlmIHRlc3QgIiRsaW5rbW9kZSwkcGFzcyIgPSAicHJvZyxsaW5rIjsgdGhlbgotCQkgICAgICBjb21waWxlX2RlcGxpYnM9IiRkZXBsaWIgJGNvbXBpbGVfZGVwbGlicyIKLQkJICAgICAgZmluYWxpemVfZGVwbGlicz0iJGRlcGxpYiAkZmluYWxpemVfZGVwbGlicyIKLQkJICAgIGVsc2UKLQkJICAgICAgZGVwbGlicz0iJGRlcGxpYiAkZGVwbGlicyIKLQkJICAgICAgdGVzdCAiJGxpbmttb2RlIiA9IGxpYiAmJiBuZXdkZXBlbmRlbmN5X2xpYnM9IiRkZXBsaWIgJG5ld2RlcGVuZGVuY3lfbGlicyIKLQkJICAgIGZpCi0JCSAgICBjb250aW51ZQotCQkgIGZpCi0JCWZpCi0JCTs7Ci0JICAgICAgKikgOzsKLQkgICAgICBlc2FjCi0JICAgIGZpCi0JICBmaQotCSAgOzsgIyAtbAotCSoubHRmcmFtZXdvcmspCi0JICBpZiB0ZXN0ICIkbGlua21vZGUsJHBhc3MiID0gInByb2csbGluayI7IHRoZW4KLQkgICAgY29tcGlsZV9kZXBsaWJzPSIkZGVwbGliICRjb21waWxlX2RlcGxpYnMiCi0JICAgIGZpbmFsaXplX2RlcGxpYnM9IiRkZXBsaWIgJGZpbmFsaXplX2RlcGxpYnMiCi0JICBlbHNlCi0JICAgIGRlcGxpYnM9IiRkZXBsaWIgJGRlcGxpYnMiCi0JICAgIGlmIHRlc3QgIiRsaW5rbW9kZSIgPSBsaWIgOyB0aGVuCi0JCWNhc2UgIiRuZXdfaW5oZXJpdGVkX2xpbmtlcl9mbGFncyAiIGluCi0JCSAgICAqIiAkZGVwbGliICIqKSA7OwotCQkgICAgKiApIGZ1bmNfYXBwZW5kIG5ld19pbmhlcml0ZWRfbGlua2VyX2ZsYWdzICIgJGRlcGxpYiIgOzsKLQkJZXNhYwotCSAgICBmaQotCSAgZmkKLQkgIGNvbnRpbnVlCi0JICA7OwotCS1MKikKLQkgIGNhc2UgJGxpbmttb2RlIGluCi0JICBsaWIpCi0JICAgIGRlcGxpYnM9IiRkZXBsaWIgJGRlcGxpYnMiCi0JICAgIHRlc3QgIiRwYXNzIiA9IGNvbnYgJiYgY29udGludWUKLQkgICAgbmV3ZGVwZW5kZW5jeV9saWJzPSIkZGVwbGliICRuZXdkZXBlbmRlbmN5X2xpYnMiCi0JICAgIGZ1bmNfc3RyaXBuYW1lICctTCcgJycgIiRkZXBsaWIiCi0JICAgIGZ1bmNfcmVzb2x2ZV9zeXNyb290ICIkZnVuY19zdHJpcG5hbWVfcmVzdWx0IgotCSAgICBmdW5jX2FwcGVuZCBuZXdsaWJfc2VhcmNoX3BhdGggIiAkZnVuY19yZXNvbHZlX3N5c3Jvb3RfcmVzdWx0IgotCSAgICA7OwotCSAgcHJvZykKLQkgICAgaWYgdGVzdCAiJHBhc3MiID0gY29udjsgdGhlbgotCSAgICAgIGRlcGxpYnM9IiRkZXBsaWIgJGRlcGxpYnMiCi0JICAgICAgY29udGludWUKLQkgICAgZmkKLQkgICAgaWYgdGVzdCAiJHBhc3MiID0gc2NhbjsgdGhlbgotCSAgICAgIGRlcGxpYnM9IiRkZXBsaWIgJGRlcGxpYnMiCi0JICAgIGVsc2UKLQkgICAgICBjb21waWxlX2RlcGxpYnM9IiRkZXBsaWIgJGNvbXBpbGVfZGVwbGlicyIKLQkgICAgICBmaW5hbGl6ZV9kZXBsaWJzPSIkZGVwbGliICRmaW5hbGl6ZV9kZXBsaWJzIgotCSAgICBmaQotCSAgICBmdW5jX3N0cmlwbmFtZSAnLUwnICcnICIkZGVwbGliIgotCSAgICBmdW5jX3Jlc29sdmVfc3lzcm9vdCAiJGZ1bmNfc3RyaXBuYW1lX3Jlc3VsdCIKLQkgICAgZnVuY19hcHBlbmQgbmV3bGliX3NlYXJjaF9wYXRoICIgJGZ1bmNfcmVzb2x2ZV9zeXNyb290X3Jlc3VsdCIKLQkgICAgOzsKLQkgICopCi0JICAgIGZ1bmNfd2FybmluZyAiXGAtTCcgaXMgaWdub3JlZCBmb3IgYXJjaGl2ZXMvb2JqZWN0cyIKLQkgICAgOzsKLQkgIGVzYWMgIyBsaW5rbW9kZQotCSAgY29udGludWUKLQkgIDs7ICMgLUwKLQktUiopCi0JICBpZiB0ZXN0ICIkcGFzcyIgPSBsaW5rOyB0aGVuCi0JICAgIGZ1bmNfc3RyaXBuYW1lICctUicgJycgIiRkZXBsaWIiCi0JICAgIGZ1bmNfcmVzb2x2ZV9zeXNyb290ICIkZnVuY19zdHJpcG5hbWVfcmVzdWx0IgotCSAgICBkaXI9JGZ1bmNfcmVzb2x2ZV9zeXNyb290X3Jlc3VsdAotCSAgICAjIE1ha2Ugc3VyZSB0aGUgeHJwYXRoIGNvbnRhaW5zIG9ubHkgdW5pcXVlIGRpcmVjdG9yaWVzLgotCSAgICBjYXNlICIkeHJwYXRoICIgaW4KLQkgICAgKiIgJGRpciAiKikgOzsKLQkgICAgKikgZnVuY19hcHBlbmQgeHJwYXRoICIgJGRpciIgOzsKLQkgICAgZXNhYwotCSAgZmkKLQkgIGRlcGxpYnM9IiRkZXBsaWIgJGRlcGxpYnMiCi0JICBjb250aW51ZQotCSAgOzsKLQkqLmxhKQotCSAgZnVuY19yZXNvbHZlX3N5c3Jvb3QgIiRkZXBsaWIiCi0JICBsaWI9JGZ1bmNfcmVzb2x2ZV9zeXNyb290X3Jlc3VsdAotCSAgOzsKLQkqLiRsaWJleHQpCi0JICBpZiB0ZXN0ICIkcGFzcyIgPSBjb252OyB0aGVuCi0JICAgIGRlcGxpYnM9IiRkZXBsaWIgJGRlcGxpYnMiCi0JICAgIGNvbnRpbnVlCi0JICBmaQotCSAgY2FzZSAkbGlua21vZGUgaW4KLQkgIGxpYikKLQkgICAgIyBMaW5raW5nIGNvbnZlbmllbmNlIG1vZHVsZXMgaW50byBzaGFyZWQgbGlicmFyaWVzIGlzIGFsbG93ZWQsCi0JICAgICMgYnV0IGxpbmtpbmcgb3RoZXIgc3RhdGljIGxpYnJhcmllcyBpcyBub24tcG9ydGFibGUuCi0JICAgIGNhc2UgIiAkZGxwcmVjb252ZW5pZW5jZWxpYnMgIiBpbgotCSAgICAqIiAkZGVwbGliICIqKSA7OwotCSAgICAqKQotCSAgICAgIHZhbGlkX2FfbGliPW5vCi0JICAgICAgY2FzZSAkZGVwbGlic19jaGVja19tZXRob2QgaW4KLQkJbWF0Y2hfcGF0dGVybiopCi0JCSAgc2V0IGR1bW15ICRkZXBsaWJzX2NoZWNrX21ldGhvZDsgc2hpZnQKLQkJICBtYXRjaF9wYXR0ZXJuX3JlZ2V4PWBleHByICIkZGVwbGlic19jaGVja19tZXRob2QiIDogIiQxIFwoLipcKSJgCi0JCSAgaWYgZXZhbCAiXCRFQ0hPIFwiJGRlcGxpYlwiIiAyPi9kZXYvbnVsbCB8ICRTRUQgMTBxIFwKLQkJICAgIHwgJEVHUkVQICIkbWF0Y2hfcGF0dGVybl9yZWdleCIgPiAvZGV2L251bGw7IHRoZW4KLQkJICAgIHZhbGlkX2FfbGliPXllcwotCQkgIGZpCi0JCTs7Ci0JCXBhc3NfYWxsKQotCQkgIHZhbGlkX2FfbGliPXllcwotCQk7OwotCSAgICAgIGVzYWMKLQkgICAgICBpZiB0ZXN0ICIkdmFsaWRfYV9saWIiICE9IHllczsgdGhlbgotCQllY2hvCi0JCSRFQ0hPICIqKiogV2FybmluZzogVHJ5aW5nIHRvIGxpbmsgd2l0aCBzdGF0aWMgbGliIGFyY2hpdmUgJGRlcGxpYi4iCi0JCWVjaG8gIioqKiBJIGhhdmUgdGhlIGNhcGFiaWxpdHkgdG8gbWFrZSB0aGF0IGxpYnJhcnkgYXV0b21hdGljYWxseSBsaW5rIGluIHdoZW4iCi0JCWVjaG8gIioqKiB5b3UgbGluayB0byB0aGlzIGxpYnJhcnkuICBCdXQgSSBjYW4gb25seSBkbyB0aGlzIGlmIHlvdSBoYXZlIGEiCi0JCWVjaG8gIioqKiBzaGFyZWQgdmVyc2lvbiBvZiB0aGUgbGlicmFyeSwgd2hpY2ggeW91IGRvIG5vdCBhcHBlYXIgdG8gaGF2ZSIKLQkJZWNobyAiKioqIGJlY2F1c2UgdGhlIGZpbGUgZXh0ZW5zaW9ucyAuJGxpYmV4dCBvZiB0aGlzIGFyZ3VtZW50IG1ha2VzIG1lIGJlbGlldmUiCi0JCWVjaG8gIioqKiB0aGF0IGl0IGlzIGp1c3QgYSBzdGF0aWMgYXJjaGl2ZSB0aGF0IEkgc2hvdWxkIG5vdCB1c2UgaGVyZS4iCi0JICAgICAgZWxzZQotCQllY2hvCi0JCSRFQ0hPICIqKiogV2FybmluZzogTGlua2luZyB0aGUgc2hhcmVkIGxpYnJhcnkgJG91dHB1dCBhZ2FpbnN0IHRoZSIKLQkJJEVDSE8gIioqKiBzdGF0aWMgbGlicmFyeSAkZGVwbGliIGlzIG5vdCBwb3J0YWJsZSEiCi0JCWRlcGxpYnM9IiRkZXBsaWIgJGRlcGxpYnMiCi0JICAgICAgZmkKLQkgICAgICA7OwotCSAgICBlc2FjCi0JICAgIGNvbnRpbnVlCi0JICAgIDs7Ci0JICBwcm9nKQotCSAgICBpZiB0ZXN0ICIkcGFzcyIgIT0gbGluazsgdGhlbgotCSAgICAgIGRlcGxpYnM9IiRkZXBsaWIgJGRlcGxpYnMiCi0JICAgIGVsc2UKLQkgICAgICBjb21waWxlX2RlcGxpYnM9IiRkZXBsaWIgJGNvbXBpbGVfZGVwbGlicyIKLQkgICAgICBmaW5hbGl6ZV9kZXBsaWJzPSIkZGVwbGliICRmaW5hbGl6ZV9kZXBsaWJzIgotCSAgICBmaQotCSAgICBjb250aW51ZQotCSAgICA7OwotCSAgZXNhYyAjIGxpbmttb2RlCi0JICA7OyAjICouJGxpYmV4dAotCSoubG8gfCAqLiRvYmpleHQpCi0JICBpZiB0ZXN0ICIkcGFzcyIgPSBjb252OyB0aGVuCi0JICAgIGRlcGxpYnM9IiRkZXBsaWIgJGRlcGxpYnMiCi0JICBlbGlmIHRlc3QgIiRsaW5rbW9kZSIgPSBwcm9nOyB0aGVuCi0JICAgIGlmIHRlc3QgIiRwYXNzIiA9IGRscHJlb3BlbiB8fCB0ZXN0ICIkZGxvcGVuX3N1cHBvcnQiICE9IHllcyB8fCB0ZXN0ICIkYnVpbGRfbGlidG9vbF9saWJzIiA9IG5vOyB0aGVuCi0JICAgICAgIyBJZiB0aGVyZSBpcyBubyBkbG9wZW4gc3VwcG9ydCBvciB3ZSdyZSBsaW5raW5nIHN0YXRpY2FsbHksCi0JICAgICAgIyB3ZSBuZWVkIHRvIHByZWxvYWQuCi0JICAgICAgZnVuY19hcHBlbmQgbmV3ZGxwcmVmaWxlcyAiICRkZXBsaWIiCi0JICAgICAgY29tcGlsZV9kZXBsaWJzPSIkZGVwbGliICRjb21waWxlX2RlcGxpYnMiCi0JICAgICAgZmluYWxpemVfZGVwbGlicz0iJGRlcGxpYiAkZmluYWxpemVfZGVwbGlicyIKLQkgICAgZWxzZQotCSAgICAgIGZ1bmNfYXBwZW5kIG5ld2RsZmlsZXMgIiAkZGVwbGliIgotCSAgICBmaQotCSAgZmkKLQkgIGNvbnRpbnVlCi0JICA7OwotCSVERVBMSUJTJSkKLQkgIGFsbGRlcGxpYnM9eWVzCi0JICBjb250aW51ZQotCSAgOzsKLQllc2FjICMgY2FzZSAkZGVwbGliCi0KLQlpZiB0ZXN0ICIkZm91bmQiID0geWVzIHx8IHRlc3QgLWYgIiRsaWIiOyB0aGVuIDoKLQllbHNlCi0JICBmdW5jX2ZhdGFsX2Vycm9yICJjYW5ub3QgZmluZCB0aGUgbGlicmFyeSBcYCRsaWInIG9yIHVuaGFuZGxlZCBhcmd1bWVudCBcYCRkZXBsaWInIgotCWZpCi0KLQkjIENoZWNrIHRvIHNlZSB0aGF0IHRoaXMgcmVhbGx5IGlzIGEgbGlidG9vbCBhcmNoaXZlLgotCWZ1bmNfbGFsaWJfdW5zYWZlX3AgIiRsaWIiIFwKLQkgIHx8IGZ1bmNfZmF0YWxfZXJyb3IgIlxgJGxpYicgaXMgbm90IGEgdmFsaWQgbGlidG9vbCBhcmNoaXZlIgotCi0JZnVuY19kaXJuYW1lICIkbGliIiAiIiAiLiIKLQlsYWRpcj0iJGZ1bmNfZGlybmFtZV9yZXN1bHQiCi0KLQlkbG5hbWU9Ci0JZGxvcGVuPQotCWRscHJlb3Blbj0KLQlsaWJkaXI9Ci0JbGlicmFyeV9uYW1lcz0KLQlvbGRfbGlicmFyeT0KLQlpbmhlcml0ZWRfbGlua2VyX2ZsYWdzPQotCSMgSWYgdGhlIGxpYnJhcnkgd2FzIGluc3RhbGxlZCB3aXRoIGFuIG9sZCByZWxlYXNlIG9mIGxpYnRvb2wsCi0JIyBpdCB3aWxsIG5vdCByZWRlZmluZSB2YXJpYWJsZXMgaW5zdGFsbGVkLCBvciBzaG91bGRub3RsaW5rCi0JaW5zdGFsbGVkPXllcwotCXNob3VsZG5vdGxpbms9bm8KLQlhdm9pZHRlbXBycGF0aD0KLQotCi0JIyBSZWFkIHRoZSAubGEgZmlsZQotCWZ1bmNfc291cmNlICIkbGliIgotCi0JIyBDb252ZXJ0ICItZnJhbWV3b3JrIGZvbyIgdG8gImZvby5sdGZyYW1ld29yayIKLQlpZiB0ZXN0IC1uICIkaW5oZXJpdGVkX2xpbmtlcl9mbGFncyI7IHRoZW4KLQkgIHRtcF9pbmhlcml0ZWRfbGlua2VyX2ZsYWdzPWAkRUNITyAiJGluaGVyaXRlZF9saW5rZXJfZmxhZ3MiIHwgJFNFRCAncy8tZnJhbWV3b3JrIFwoW14gJF0qXCkvXDEubHRmcmFtZXdvcmsvZydgCi0JICBmb3IgdG1wX2luaGVyaXRlZF9saW5rZXJfZmxhZyBpbiAkdG1wX2luaGVyaXRlZF9saW5rZXJfZmxhZ3M7IGRvCi0JICAgIGNhc2UgIiAkbmV3X2luaGVyaXRlZF9saW5rZXJfZmxhZ3MgIiBpbgotCSAgICAgICoiICR0bXBfaW5oZXJpdGVkX2xpbmtlcl9mbGFnICIqKSA7OwotCSAgICAgICopIGZ1bmNfYXBwZW5kIG5ld19pbmhlcml0ZWRfbGlua2VyX2ZsYWdzICIgJHRtcF9pbmhlcml0ZWRfbGlua2VyX2ZsYWciOzsKLQkgICAgZXNhYwotCSAgZG9uZQotCWZpCi0JZGVwZW5kZW5jeV9saWJzPWAkRUNITyAiICRkZXBlbmRlbmN5X2xpYnMiIHwgJFNFRCAncyUgXChbXiAkXSpcKS5sdGZyYW1ld29yayUgLWZyYW1ld29yayBcMSVnJ2AKLQlpZiB0ZXN0ICIkbGlua21vZGUsJHBhc3MiID0gImxpYixsaW5rIiB8fAotCSAgIHRlc3QgIiRsaW5rbW9kZSwkcGFzcyIgPSAicHJvZyxzY2FuIiB8fAotCSAgIHsgdGVzdCAiJGxpbmttb2RlIiAhPSBwcm9nICYmIHRlc3QgIiRsaW5rbW9kZSIgIT0gbGliOyB9OyB0aGVuCi0JICB0ZXN0IC1uICIkZGxvcGVuIiAmJiBmdW5jX2FwcGVuZCBkbGZpbGVzICIgJGRsb3BlbiIKLQkgIHRlc3QgLW4gIiRkbHByZW9wZW4iICYmIGZ1bmNfYXBwZW5kIGRscHJlZmlsZXMgIiAkZGxwcmVvcGVuIgotCWZpCi0KLQlpZiB0ZXN0ICIkcGFzcyIgPSBjb252OyB0aGVuCi0JICAjIE9ubHkgY2hlY2sgZm9yIGNvbnZlbmllbmNlIGxpYnJhcmllcwotCSAgZGVwbGlicz0iJGxpYiAkZGVwbGlicyIKLQkgIGlmIHRlc3QgLXogIiRsaWJkaXIiOyB0aGVuCi0JICAgIGlmIHRlc3QgLXogIiRvbGRfbGlicmFyeSI7IHRoZW4KLQkgICAgICBmdW5jX2ZhdGFsX2Vycm9yICJjYW5ub3QgZmluZCBuYW1lIG9mIGxpbmsgbGlicmFyeSBmb3IgXGAkbGliJyIKLQkgICAgZmkKLQkgICAgIyBJdCBpcyBhIGxpYnRvb2wgY29udmVuaWVuY2UgbGlicmFyeSwgc28gYWRkIGluIGl0cyBvYmplY3RzLgotCSAgICBmdW5jX2FwcGVuZCBjb252ZW5pZW5jZSAiICRsYWRpci8kb2JqZGlyLyRvbGRfbGlicmFyeSIKLQkgICAgZnVuY19hcHBlbmQgb2xkX2NvbnZlbmllbmNlICIgJGxhZGlyLyRvYmpkaXIvJG9sZF9saWJyYXJ5IgotCSAgZWxpZiB0ZXN0ICIkbGlua21vZGUiICE9IHByb2cgJiYgdGVzdCAiJGxpbmttb2RlIiAhPSBsaWI7IHRoZW4KLQkgICAgZnVuY19mYXRhbF9lcnJvciAiXGAkbGliJyBpcyBub3QgYSBjb252ZW5pZW5jZSBsaWJyYXJ5IgotCSAgZmkKLQkgIHRtcF9saWJzPQotCSAgZm9yIGRlcGxpYiBpbiAkZGVwZW5kZW5jeV9saWJzOyBkbwotCSAgICBkZXBsaWJzPSIkZGVwbGliICRkZXBsaWJzIgotCSAgICBpZiAkb3B0X3ByZXNlcnZlX2R1cF9kZXBzIDsgdGhlbgotCSAgICAgIGNhc2UgIiR0bXBfbGlicyAiIGluCi0JICAgICAgKiIgJGRlcGxpYiAiKikgZnVuY19hcHBlbmQgc3BlY2lhbGRlcGxpYnMgIiAkZGVwbGliIiA7OwotCSAgICAgIGVzYWMKLQkgICAgZmkKLQkgICAgZnVuY19hcHBlbmQgdG1wX2xpYnMgIiAkZGVwbGliIgotCSAgZG9uZQotCSAgY29udGludWUKLQlmaSAjICRwYXNzID0gY29udgotCi0KLQkjIEdldCB0aGUgbmFtZSBvZiB0aGUgbGlicmFyeSB3ZSBsaW5rIGFnYWluc3QuCi0JbGlua2xpYj0KLQlpZiB0ZXN0IC1uICIkb2xkX2xpYnJhcnkiICYmCi0JICAgeyB0ZXN0ICIkcHJlZmVyX3N0YXRpY19saWJzIiA9IHllcyB8fAotCSAgICAgdGVzdCAiJHByZWZlcl9zdGF0aWNfbGlicywkaW5zdGFsbGVkIiA9ICJidWlsdCxubyI7IH07IHRoZW4KLQkgIGxpbmtsaWI9JG9sZF9saWJyYXJ5Ci0JZWxzZQotCSAgZm9yIGwgaW4gJG9sZF9saWJyYXJ5ICRsaWJyYXJ5X25hbWVzOyBkbwotCSAgICBsaW5rbGliPSIkbCIKLQkgIGRvbmUKLQlmaQotCWlmIHRlc3QgLXogIiRsaW5rbGliIjsgdGhlbgotCSAgZnVuY19mYXRhbF9lcnJvciAiY2Fubm90IGZpbmQgbmFtZSBvZiBsaW5rIGxpYnJhcnkgZm9yIFxgJGxpYiciCi0JZmkKLQotCSMgVGhpcyBsaWJyYXJ5IHdhcyBzcGVjaWZpZWQgd2l0aCAtZGxvcGVuLgotCWlmIHRlc3QgIiRwYXNzIiA9IGRsb3BlbjsgdGhlbgotCSAgaWYgdGVzdCAteiAiJGxpYmRpciI7IHRoZW4KLQkgICAgZnVuY19mYXRhbF9lcnJvciAiY2Fubm90IC1kbG9wZW4gYSBjb252ZW5pZW5jZSBsaWJyYXJ5OiBcYCRsaWInIgotCSAgZmkKLQkgIGlmIHRlc3QgLXogIiRkbG5hbWUiIHx8Ci0JICAgICB0ZXN0ICIkZGxvcGVuX3N1cHBvcnQiICE9IHllcyB8fAotCSAgICAgdGVzdCAiJGJ1aWxkX2xpYnRvb2xfbGlicyIgPSBubzsgdGhlbgotCSAgICAjIElmIHRoZXJlIGlzIG5vIGRsbmFtZSwgbm8gZGxvcGVuIHN1cHBvcnQgb3Igd2UncmUgbGlua2luZwotCSAgICAjIHN0YXRpY2FsbHksIHdlIG5lZWQgdG8gcHJlbG9hZC4gIFdlIGFsc28gbmVlZCB0byBwcmVsb2FkIGFueQotCSAgICAjIGRlcGVuZGVudCBsaWJyYXJpZXMgc28gbGlibHRkbCdzIGRlcGxpYiBwcmVsb2FkZXIgZG9lc24ndAotCSAgICAjIGJvbWIgb3V0IGluIHRoZSBsb2FkIGRlcGxpYnMgcGhhc2UuCi0JICAgIGZ1bmNfYXBwZW5kIGRscHJlZmlsZXMgIiAkbGliICRkZXBlbmRlbmN5X2xpYnMiCi0JICBlbHNlCi0JICAgIGZ1bmNfYXBwZW5kIG5ld2RsZmlsZXMgIiAkbGliIgotCSAgZmkKLQkgIGNvbnRpbnVlCi0JZmkgIyAkcGFzcyA9IGRsb3BlbgotCi0JIyBXZSBuZWVkIGFuIGFic29sdXRlIHBhdGguCi0JY2FzZSAkbGFkaXIgaW4KLQlbXFwvXSogfCBbQS1aYS16XTpbXFwvXSopIGFic19sYWRpcj0iJGxhZGlyIiA7OwotCSopCi0JICBhYnNfbGFkaXI9YGNkICIkbGFkaXIiICYmIHB3ZGAKLQkgIGlmIHRlc3QgLXogIiRhYnNfbGFkaXIiOyB0aGVuCi0JICAgIGZ1bmNfd2FybmluZyAiY2Fubm90IGRldGVybWluZSBhYnNvbHV0ZSBkaXJlY3RvcnkgbmFtZSBvZiBcYCRsYWRpciciCi0JICAgIGZ1bmNfd2FybmluZyAicGFzc2luZyBpdCBsaXRlcmFsbHkgdG8gdGhlIGxpbmtlciwgYWx0aG91Z2ggaXQgbWlnaHQgZmFpbCIKLQkgICAgYWJzX2xhZGlyPSIkbGFkaXIiCi0JICBmaQotCSAgOzsKLQllc2FjCi0JZnVuY19iYXNlbmFtZSAiJGxpYiIKLQlsYW5hbWU9IiRmdW5jX2Jhc2VuYW1lX3Jlc3VsdCIKLQotCSMgRmluZCB0aGUgcmVsZXZhbnQgb2JqZWN0IGRpcmVjdG9yeSBhbmQgbGlicmFyeSBuYW1lLgotCWlmIHRlc3QgIlgkaW5zdGFsbGVkIiA9IFh5ZXM7IHRoZW4KLQkgIGlmIHRlc3QgISAtZiAiJGx0X3N5c3Jvb3QkbGliZGlyLyRsaW5rbGliIiAmJiB0ZXN0IC1mICIkYWJzX2xhZGlyLyRsaW5rbGliIjsgdGhlbgotCSAgICBmdW5jX3dhcm5pbmcgImxpYnJhcnkgXGAkbGliJyB3YXMgbW92ZWQuIgotCSAgICBkaXI9IiRsYWRpciIKLQkgICAgYWJzZGlyPSIkYWJzX2xhZGlyIgotCSAgICBsaWJkaXI9IiRhYnNfbGFkaXIiCi0JICBlbHNlCi0JICAgIGRpcj0iJGx0X3N5c3Jvb3QkbGliZGlyIgotCSAgICBhYnNkaXI9IiRsdF9zeXNyb290JGxpYmRpciIKLQkgIGZpCi0JICB0ZXN0ICJYJGhhcmRjb2RlX2F1dG9tYXRpYyIgPSBYeWVzICYmIGF2b2lkdGVtcHJwYXRoPXllcwotCWVsc2UKLQkgIGlmIHRlc3QgISAtZiAiJGxhZGlyLyRvYmpkaXIvJGxpbmtsaWIiICYmIHRlc3QgLWYgIiRhYnNfbGFkaXIvJGxpbmtsaWIiOyB0aGVuCi0JICAgIGRpcj0iJGxhZGlyIgotCSAgICBhYnNkaXI9IiRhYnNfbGFkaXIiCi0JICAgICMgUmVtb3ZlIHRoaXMgc2VhcmNoIHBhdGggbGF0ZXIKLQkgICAgZnVuY19hcHBlbmQgbm90aW5zdF9wYXRoICIgJGFic19sYWRpciIKLQkgIGVsc2UKLQkgICAgZGlyPSIkbGFkaXIvJG9iamRpciIKLQkgICAgYWJzZGlyPSIkYWJzX2xhZGlyLyRvYmpkaXIiCi0JICAgICMgUmVtb3ZlIHRoaXMgc2VhcmNoIHBhdGggbGF0ZXIKLQkgICAgZnVuY19hcHBlbmQgbm90aW5zdF9wYXRoICIgJGFic19sYWRpciIKLQkgIGZpCi0JZmkgIyAkaW5zdGFsbGVkID0geWVzCi0JZnVuY19zdHJpcG5hbWUgJ2xpYicgJy5sYScgIiRsYW5hbWUiCi0JbmFtZT0kZnVuY19zdHJpcG5hbWVfcmVzdWx0Ci0KLQkjIFRoaXMgbGlicmFyeSB3YXMgc3BlY2lmaWVkIHdpdGggLWRscHJlb3Blbi4KLQlpZiB0ZXN0ICIkcGFzcyIgPSBkbHByZW9wZW47IHRoZW4KLQkgIGlmIHRlc3QgLXogIiRsaWJkaXIiICYmIHRlc3QgIiRsaW5rbW9kZSIgPSBwcm9nOyB0aGVuCi0JICAgIGZ1bmNfZmF0YWxfZXJyb3IgIm9ubHkgbGlicmFyaWVzIG1heSAtZGxwcmVvcGVuIGEgY29udmVuaWVuY2UgbGlicmFyeTogXGAkbGliJyIKLQkgIGZpCi0JICBjYXNlICIkaG9zdCIgaW4KLQkgICAgIyBzcGVjaWFsIGhhbmRsaW5nIGZvciBwbGF0Zm9ybXMgd2l0aCBQRS1ETExzLgotCSAgICAqY3lnd2luKiB8ICptaW5ndyogfCAqY2VnY2MqICkKLQkgICAgICAjIExpbmtlciB3aWxsIGF1dG9tYXRpY2FsbHkgbGluayBhZ2FpbnN0IHNoYXJlZCBsaWJyYXJ5IGlmIGJvdGgKLQkgICAgICAjIHN0YXRpYyBhbmQgc2hhcmVkIGFyZSBwcmVzZW50LiAgVGhlcmVmb3JlLCBlbnN1cmUgd2UgZXh0cmFjdAotCSAgICAgICMgc3ltYm9scyBmcm9tIHRoZSBpbXBvcnQgbGlicmFyeSBpZiBhIHNoYXJlZCBsaWJyYXJ5IGlzIHByZXNlbnQKLQkgICAgICAjIChvdGhlcndpc2UsIHRoZSBkbG9wZW4gbW9kdWxlIG5hbWUgd2lsbCBiZSBpbmNvcnJlY3QpLiAgV2UgZG8KLQkgICAgICAjIHRoaXMgYnkgcHV0dGluZyB0aGUgaW1wb3J0IGxpYnJhcnkgbmFtZSBpbnRvICRuZXdkbHByZWZpbGVzLgotCSAgICAgICMgV2UgcmVjb3ZlciB0aGUgZGxvcGVuIG1vZHVsZSBuYW1lIGJ5ICdzYXZpbmcnIHRoZSBsYSBmaWxlCi0JICAgICAgIyBuYW1lIGluIGEgc3BlY2lhbCBwdXJwb3NlIHZhcmlhYmxlLCBhbmQgKGxhdGVyKSBleHRyYWN0aW5nIHRoZQotCSAgICAgICMgZGxuYW1lIGZyb20gdGhlIGxhIGZpbGUuCi0JICAgICAgaWYgdGVzdCAtbiAiJGRsbmFtZSI7IHRoZW4KLQkgICAgICAgIGZ1bmNfdHJfc2ggIiRkaXIvJGxpbmtsaWIiCi0JICAgICAgICBldmFsICJsaWJmaWxlXyRmdW5jX3RyX3NoX3Jlc3VsdD1cJGFic19sYWRpci9cJGxhbmFtZSIKLQkgICAgICAgIGZ1bmNfYXBwZW5kIG5ld2RscHJlZmlsZXMgIiAkZGlyLyRsaW5rbGliIgotCSAgICAgIGVsc2UKLQkgICAgICAgIGZ1bmNfYXBwZW5kIG5ld2RscHJlZmlsZXMgIiAkZGlyLyRvbGRfbGlicmFyeSIKLQkgICAgICAgICMgS2VlcCBhIGxpc3Qgb2YgcHJlb3BlbmVkIGNvbnZlbmllbmNlIGxpYnJhcmllcyB0byBjaGVjawotCSAgICAgICAgIyB0aGF0IHRoZXkgYXJlIGJlaW5nIHVzZWQgY29ycmVjdGx5IGluIHRoZSBsaW5rIHBhc3MuCi0JICAgICAgICB0ZXN0IC16ICIkbGliZGlyIiAmJiBcCi0JICAgICAgICAgIGZ1bmNfYXBwZW5kIGRscHJlY29udmVuaWVuY2VsaWJzICIgJGRpci8kb2xkX2xpYnJhcnkiCi0JICAgICAgZmkKLQkgICAgOzsKLQkgICAgKiApCi0JICAgICAgIyBQcmVmZXIgdXNpbmcgYSBzdGF0aWMgbGlicmFyeSAoc28gdGhhdCBubyBzaWxseSBfRFlOQU1JQyBzeW1ib2xzCi0JICAgICAgIyBhcmUgcmVxdWlyZWQgdG8gbGluaykuCi0JICAgICAgaWYgdGVzdCAtbiAiJG9sZF9saWJyYXJ5IjsgdGhlbgotCSAgICAgICAgZnVuY19hcHBlbmQgbmV3ZGxwcmVmaWxlcyAiICRkaXIvJG9sZF9saWJyYXJ5IgotCSAgICAgICAgIyBLZWVwIGEgbGlzdCBvZiBwcmVvcGVuZWQgY29udmVuaWVuY2UgbGlicmFyaWVzIHRvIGNoZWNrCi0JICAgICAgICAjIHRoYXQgdGhleSBhcmUgYmVpbmcgdXNlZCBjb3JyZWN0bHkgaW4gdGhlIGxpbmsgcGFzcy4KLQkgICAgICAgIHRlc3QgLXogIiRsaWJkaXIiICYmIFwKLQkgICAgICAgICAgZnVuY19hcHBlbmQgZGxwcmVjb252ZW5pZW5jZWxpYnMgIiAkZGlyLyRvbGRfbGlicmFyeSIKLQkgICAgICAjIE90aGVyd2lzZSwgdXNlIHRoZSBkbG5hbWUsIHNvIHRoYXQgbHRfZGxvcGVuIGZpbmRzIGl0LgotCSAgICAgIGVsaWYgdGVzdCAtbiAiJGRsbmFtZSI7IHRoZW4KLQkgICAgICAgIGZ1bmNfYXBwZW5kIG5ld2RscHJlZmlsZXMgIiAkZGlyLyRkbG5hbWUiCi0JICAgICAgZWxzZQotCSAgICAgICAgZnVuY19hcHBlbmQgbmV3ZGxwcmVmaWxlcyAiICRkaXIvJGxpbmtsaWIiCi0JICAgICAgZmkKLQkgICAgOzsKLQkgIGVzYWMKLQlmaSAjICRwYXNzID0gZGxwcmVvcGVuCi0KLQlpZiB0ZXN0IC16ICIkbGliZGlyIjsgdGhlbgotCSAgIyBMaW5rIHRoZSBjb252ZW5pZW5jZSBsaWJyYXJ5Ci0JICBpZiB0ZXN0ICIkbGlua21vZGUiID0gbGliOyB0aGVuCi0JICAgIGRlcGxpYnM9IiRkaXIvJG9sZF9saWJyYXJ5ICRkZXBsaWJzIgotCSAgZWxpZiB0ZXN0ICIkbGlua21vZGUsJHBhc3MiID0gInByb2csbGluayI7IHRoZW4KLQkgICAgY29tcGlsZV9kZXBsaWJzPSIkZGlyLyRvbGRfbGlicmFyeSAkY29tcGlsZV9kZXBsaWJzIgotCSAgICBmaW5hbGl6ZV9kZXBsaWJzPSIkZGlyLyRvbGRfbGlicmFyeSAkZmluYWxpemVfZGVwbGlicyIKLQkgIGVsc2UKLQkgICAgZGVwbGlicz0iJGxpYiAkZGVwbGlicyIgIyB1c2VkIGZvciBwcm9nLHNjYW4gcGFzcwotCSAgZmkKLQkgIGNvbnRpbnVlCi0JZmkKLQotCi0JaWYgdGVzdCAiJGxpbmttb2RlIiA9IHByb2cgJiYgdGVzdCAiJHBhc3MiICE9IGxpbms7IHRoZW4KLQkgIGZ1bmNfYXBwZW5kIG5ld2xpYl9zZWFyY2hfcGF0aCAiICRsYWRpciIKLQkgIGRlcGxpYnM9IiRsaWIgJGRlcGxpYnMiCi0KLQkgIGxpbmthbGxkZXBsaWJzPW5vCi0JICBpZiB0ZXN0ICIkbGlua19hbGxfZGVwbGlicyIgIT0gbm8gfHwgdGVzdCAteiAiJGxpYnJhcnlfbmFtZXMiIHx8Ci0JICAgICB0ZXN0ICIkYnVpbGRfbGlidG9vbF9saWJzIiA9IG5vOyB0aGVuCi0JICAgIGxpbmthbGxkZXBsaWJzPXllcwotCSAgZmkKLQotCSAgdG1wX2xpYnM9Ci0JICBmb3IgZGVwbGliIGluICRkZXBlbmRlbmN5X2xpYnM7IGRvCi0JICAgIGNhc2UgJGRlcGxpYiBpbgotCSAgICAtTCopIGZ1bmNfc3RyaXBuYW1lICctTCcgJycgIiRkZXBsaWIiCi0JICAgICAgICAgZnVuY19yZXNvbHZlX3N5c3Jvb3QgIiRmdW5jX3N0cmlwbmFtZV9yZXN1bHQiCi0JICAgICAgICAgZnVuY19hcHBlbmQgbmV3bGliX3NlYXJjaF9wYXRoICIgJGZ1bmNfcmVzb2x2ZV9zeXNyb290X3Jlc3VsdCIKLQkJIDs7Ci0JICAgIGVzYWMKLQkgICAgIyBOZWVkIHRvIGxpbmsgYWdhaW5zdCBhbGwgZGVwZW5kZW5jeV9saWJzPwotCSAgICBpZiB0ZXN0ICIkbGlua2FsbGRlcGxpYnMiID0geWVzOyB0aGVuCi0JICAgICAgZGVwbGlicz0iJGRlcGxpYiAkZGVwbGlicyIKLQkgICAgZWxzZQotCSAgICAgICMgTmVlZCB0byBoYXJkY29kZSBzaGFyZWQgbGlicmFyeSBwYXRocwotCSAgICAgICMgb3IvYW5kIGxpbmsgYWdhaW5zdCBzdGF0aWMgbGlicmFyaWVzCi0JICAgICAgbmV3ZGVwZW5kZW5jeV9saWJzPSIkZGVwbGliICRuZXdkZXBlbmRlbmN5X2xpYnMiCi0JICAgIGZpCi0JICAgIGlmICRvcHRfcHJlc2VydmVfZHVwX2RlcHMgOyB0aGVuCi0JICAgICAgY2FzZSAiJHRtcF9saWJzICIgaW4KLQkgICAgICAqIiAkZGVwbGliICIqKSBmdW5jX2FwcGVuZCBzcGVjaWFsZGVwbGlicyAiICRkZXBsaWIiIDs7Ci0JICAgICAgZXNhYwotCSAgICBmaQotCSAgICBmdW5jX2FwcGVuZCB0bXBfbGlicyAiICRkZXBsaWIiCi0JICBkb25lICMgZm9yIGRlcGxpYgotCSAgY29udGludWUKLQlmaSAjICRsaW5rbW9kZSA9IHByb2cuLi4KLQotCWlmIHRlc3QgIiRsaW5rbW9kZSwkcGFzcyIgPSAicHJvZyxsaW5rIjsgdGhlbgotCSAgaWYgdGVzdCAtbiAiJGxpYnJhcnlfbmFtZXMiICYmCi0JICAgICB7IHsgdGVzdCAiJHByZWZlcl9zdGF0aWNfbGlicyIgPSBubyB8fAotCSAgICAgICAgIHRlc3QgIiRwcmVmZXJfc3RhdGljX2xpYnMsJGluc3RhbGxlZCIgPSAiYnVpbHQseWVzIjsgfSB8fAotCSAgICAgICB0ZXN0IC16ICIkb2xkX2xpYnJhcnkiOyB9OyB0aGVuCi0JICAgICMgV2UgbmVlZCB0byBoYXJkY29kZSB0aGUgbGlicmFyeSBwYXRoCi0JICAgIGlmIHRlc3QgLW4gIiRzaGxpYnBhdGhfdmFyIiAmJiB0ZXN0IC16ICIkYXZvaWR0ZW1wcnBhdGgiIDsgdGhlbgotCSAgICAgICMgTWFrZSBzdXJlIHRoZSBycGF0aCBjb250YWlucyBvbmx5IHVuaXF1ZSBkaXJlY3Rvcmllcy4KLQkgICAgICBjYXNlICIkdGVtcF9ycGF0aDoiIGluCi0JICAgICAgKiIkYWJzZGlyOiIqKSA7OwotCSAgICAgICopIGZ1bmNfYXBwZW5kIHRlbXBfcnBhdGggIiRhYnNkaXI6IiA7OwotCSAgICAgIGVzYWMKLQkgICAgZmkKLQotCSAgICAjIEhhcmRjb2RlIHRoZSBsaWJyYXJ5IHBhdGguCi0JICAgICMgU2tpcCBkaXJlY3RvcmllcyB0aGF0IGFyZSBpbiB0aGUgc3lzdGVtIGRlZmF1bHQgcnVuLXRpbWUKLQkgICAgIyBzZWFyY2ggcGF0aC4KLQkgICAgY2FzZSAiICRzeXNfbGliX2Rsc2VhcmNoX3BhdGggIiBpbgotCSAgICAqIiAkYWJzZGlyICIqKSA7OwotCSAgICAqKQotCSAgICAgIGNhc2UgIiRjb21waWxlX3JwYXRoICIgaW4KLQkgICAgICAqIiAkYWJzZGlyICIqKSA7OwotCSAgICAgICopIGZ1bmNfYXBwZW5kIGNvbXBpbGVfcnBhdGggIiAkYWJzZGlyIiA7OwotCSAgICAgIGVzYWMKLQkgICAgICA7OwotCSAgICBlc2FjCi0JICAgIGNhc2UgIiAkc3lzX2xpYl9kbHNlYXJjaF9wYXRoICIgaW4KLQkgICAgKiIgJGxpYmRpciAiKikgOzsKLQkgICAgKikKLQkgICAgICBjYXNlICIkZmluYWxpemVfcnBhdGggIiBpbgotCSAgICAgICoiICRsaWJkaXIgIiopIDs7Ci0JICAgICAgKikgZnVuY19hcHBlbmQgZmluYWxpemVfcnBhdGggIiAkbGliZGlyIiA7OwotCSAgICAgIGVzYWMKLQkgICAgICA7OwotCSAgICBlc2FjCi0JICBmaSAjICRsaW5rbW9kZSwkcGFzcyA9IHByb2csbGluay4uLgotCi0JICBpZiB0ZXN0ICIkYWxsZGVwbGlicyIgPSB5ZXMgJiYKLQkgICAgIHsgdGVzdCAiJGRlcGxpYnNfY2hlY2tfbWV0aG9kIiA9IHBhc3NfYWxsIHx8Ci0JICAgICAgIHsgdGVzdCAiJGJ1aWxkX2xpYnRvb2xfbGlicyIgPSB5ZXMgJiYKLQkJIHRlc3QgLW4gIiRsaWJyYXJ5X25hbWVzIjsgfTsgfTsgdGhlbgotCSAgICAjIFdlIG9ubHkgbmVlZCB0byBzZWFyY2ggZm9yIHN0YXRpYyBsaWJyYXJpZXMKLQkgICAgY29udGludWUKLQkgIGZpCi0JZmkKLQotCWxpbmtfc3RhdGljPW5vICMgV2hldGhlciB0aGUgZGVwbGliIHdpbGwgYmUgbGlua2VkIHN0YXRpY2FsbHkKLQl1c2Vfc3RhdGljX2xpYnM9JHByZWZlcl9zdGF0aWNfbGlicwotCWlmIHRlc3QgIiR1c2Vfc3RhdGljX2xpYnMiID0gYnVpbHQgJiYgdGVzdCAiJGluc3RhbGxlZCIgPSB5ZXM7IHRoZW4KLQkgIHVzZV9zdGF0aWNfbGlicz1ubwotCWZpCi0JaWYgdGVzdCAtbiAiJGxpYnJhcnlfbmFtZXMiICYmCi0JICAgeyB0ZXN0ICIkdXNlX3N0YXRpY19saWJzIiA9IG5vIHx8IHRlc3QgLXogIiRvbGRfbGlicmFyeSI7IH07IHRoZW4KLQkgIGNhc2UgJGhvc3QgaW4KLQkgICpjeWd3aW4qIHwgKm1pbmd3KiB8ICpjZWdjYyopCi0JICAgICAgIyBObyBwb2ludCBpbiByZWxpbmtpbmcgRExMcyBiZWNhdXNlIHBhdGhzIGFyZSBub3QgZW5jb2RlZAotCSAgICAgIGZ1bmNfYXBwZW5kIG5vdGluc3RfZGVwbGlicyAiICRsaWIiCi0JICAgICAgbmVlZF9yZWxpbms9bm8KLQkgICAgOzsKLQkgICopCi0JICAgIGlmIHRlc3QgIiRpbnN0YWxsZWQiID0gbm87IHRoZW4KLQkgICAgICBmdW5jX2FwcGVuZCBub3RpbnN0X2RlcGxpYnMgIiAkbGliIgotCSAgICAgIG5lZWRfcmVsaW5rPXllcwotCSAgICBmaQotCSAgICA7OwotCSAgZXNhYwotCSAgIyBUaGlzIGlzIGEgc2hhcmVkIGxpYnJhcnkKLQotCSAgIyBXYXJuIGFib3V0IHBvcnRhYmlsaXR5LCBjYW4ndCBsaW5rIGFnYWluc3QgLW1vZHVsZSdzIG9uIHNvbWUKLQkgICMgc3lzdGVtcyAoZGFyd2luKS4gIERvbid0IGJsZWF0IGFib3V0IGRsb3BlbmVkIG1vZHVsZXMgdGhvdWdoIQotCSAgZGxvcGVubW9kdWxlPSIiCi0JICBmb3IgZGxwcmVtb2R1bGV0ZXN0IGluICRkbHByZWZpbGVzOyBkbwotCSAgICBpZiB0ZXN0ICJYJGRscHJlbW9kdWxldGVzdCIgPSAiWCRsaWIiOyB0aGVuCi0JICAgICAgZGxvcGVubW9kdWxlPSIkZGxwcmVtb2R1bGV0ZXN0IgotCSAgICAgIGJyZWFrCi0JICAgIGZpCi0JICBkb25lCi0JICBpZiB0ZXN0IC16ICIkZGxvcGVubW9kdWxlIiAmJiB0ZXN0ICIkc2hvdWxkbm90bGluayIgPSB5ZXMgJiYgdGVzdCAiJHBhc3MiID0gbGluazsgdGhlbgotCSAgICBlY2hvCi0JICAgIGlmIHRlc3QgIiRsaW5rbW9kZSIgPSBwcm9nOyB0aGVuCi0JICAgICAgJEVDSE8gIioqKiBXYXJuaW5nOiBMaW5raW5nIHRoZSBleGVjdXRhYmxlICRvdXRwdXQgYWdhaW5zdCB0aGUgbG9hZGFibGUgbW9kdWxlIgotCSAgICBlbHNlCi0JICAgICAgJEVDSE8gIioqKiBXYXJuaW5nOiBMaW5raW5nIHRoZSBzaGFyZWQgbGlicmFyeSAkb3V0cHV0IGFnYWluc3QgdGhlIGxvYWRhYmxlIG1vZHVsZSIKLQkgICAgZmkKLQkgICAgJEVDSE8gIioqKiAkbGlua2xpYiBpcyBub3QgcG9ydGFibGUhIgotCSAgZmkKLQkgIGlmIHRlc3QgIiRsaW5rbW9kZSIgPSBsaWIgJiYKLQkgICAgIHRlc3QgIiRoYXJkY29kZV9pbnRvX2xpYnMiID0geWVzOyB0aGVuCi0JICAgICMgSGFyZGNvZGUgdGhlIGxpYnJhcnkgcGF0aC4KLQkgICAgIyBTa2lwIGRpcmVjdG9yaWVzIHRoYXQgYXJlIGluIHRoZSBzeXN0ZW0gZGVmYXVsdCBydW4tdGltZQotCSAgICAjIHNlYXJjaCBwYXRoLgotCSAgICBjYXNlICIgJHN5c19saWJfZGxzZWFyY2hfcGF0aCAiIGluCi0JICAgICoiICRhYnNkaXIgIiopIDs7Ci0JICAgICopCi0JICAgICAgY2FzZSAiJGNvbXBpbGVfcnBhdGggIiBpbgotCSAgICAgICoiICRhYnNkaXIgIiopIDs7Ci0JICAgICAgKikgZnVuY19hcHBlbmQgY29tcGlsZV9ycGF0aCAiICRhYnNkaXIiIDs7Ci0JICAgICAgZXNhYwotCSAgICAgIDs7Ci0JICAgIGVzYWMKLQkgICAgY2FzZSAiICRzeXNfbGliX2Rsc2VhcmNoX3BhdGggIiBpbgotCSAgICAqIiAkbGliZGlyICIqKSA7OwotCSAgICAqKQotCSAgICAgIGNhc2UgIiRmaW5hbGl6ZV9ycGF0aCAiIGluCi0JICAgICAgKiIgJGxpYmRpciAiKikgOzsKLQkgICAgICAqKSBmdW5jX2FwcGVuZCBmaW5hbGl6ZV9ycGF0aCAiICRsaWJkaXIiIDs7Ci0JICAgICAgZXNhYwotCSAgICAgIDs7Ci0JICAgIGVzYWMKLQkgIGZpCi0KLQkgIGlmIHRlc3QgLW4gIiRvbGRfYXJjaGl2ZV9mcm9tX2V4cHN5bXNfY21kcyI7IHRoZW4KLQkgICAgIyBmaWd1cmUgb3V0IHRoZSBzb25hbWUKLQkgICAgc2V0IGR1bW15ICRsaWJyYXJ5X25hbWVzCi0JICAgIHNoaWZ0Ci0JICAgIHJlYWxuYW1lPSIkMSIKLQkgICAgc2hpZnQKLQkgICAgbGlibmFtZT1gZXZhbCAiXFwkRUNITyBcIiRsaWJuYW1lX3NwZWNcIiJgCi0JICAgICMgdXNlIGRsbmFtZSBpZiB3ZSBnb3QgaXQuIGl0J3MgcGVyZmVjdGx5IGdvb2QsIG5vPwotCSAgICBpZiB0ZXN0IC1uICIkZGxuYW1lIjsgdGhlbgotCSAgICAgIHNvbmFtZT0iJGRsbmFtZSIKLQkgICAgZWxpZiB0ZXN0IC1uICIkc29uYW1lX3NwZWMiOyB0aGVuCi0JICAgICAgIyBibGVoIHdpbmRvd3MKLQkgICAgICBjYXNlICRob3N0IGluCi0JICAgICAgKmN5Z3dpbiogfCBtaW5ndyogfCAqY2VnY2MqKQotCSAgICAgICAgZnVuY19hcml0aCAkY3VycmVudCAtICRhZ2UKLQkJbWFqb3I9JGZ1bmNfYXJpdGhfcmVzdWx0Ci0JCXZlcnN1ZmZpeD0iLSRtYWpvciIKLQkJOzsKLQkgICAgICBlc2FjCi0JICAgICAgZXZhbCBzb25hbWU9XCIkc29uYW1lX3NwZWNcIgotCSAgICBlbHNlCi0JICAgICAgc29uYW1lPSIkcmVhbG5hbWUiCi0JICAgIGZpCi0KLQkgICAgIyBNYWtlIGEgbmV3IG5hbWUgZm9yIHRoZSBleHRyYWN0X2V4cHN5bXNfY21kcyB0byB1c2UKLQkgICAgc29yb290PSIkc29uYW1lIgotCSAgICBmdW5jX2Jhc2VuYW1lICIkc29yb290IgotCSAgICBzb25hbWU9IiRmdW5jX2Jhc2VuYW1lX3Jlc3VsdCIKLQkgICAgZnVuY19zdHJpcG5hbWUgJ2xpYicgJy5kbGwnICIkc29uYW1lIgotCSAgICBuZXdsaWI9bGliaW1wLSRmdW5jX3N0cmlwbmFtZV9yZXN1bHQuYQotCi0JICAgICMgSWYgdGhlIGxpYnJhcnkgaGFzIG5vIGV4cG9ydCBsaXN0LCB0aGVuIGNyZWF0ZSBvbmUgbm93Ci0JICAgIGlmIHRlc3QgLWYgIiRvdXRwdXRfb2JqZGlyLyRzb25hbWUtZGVmIjsgdGhlbiA6Ci0JICAgIGVsc2UKLQkgICAgICBmdW5jX3ZlcmJvc2UgImV4dHJhY3RpbmcgZXhwb3J0ZWQgc3ltYm9sIGxpc3QgZnJvbSBcYCRzb25hbWUnIgotCSAgICAgIGZ1bmNfZXhlY3V0ZV9jbWRzICIkZXh0cmFjdF9leHBzeW1zX2NtZHMiICdleGl0ICQ/JwotCSAgICBmaQotCi0JICAgICMgQ3JlYXRlICRuZXdsaWIKLQkgICAgaWYgdGVzdCAtZiAiJG91dHB1dF9vYmpkaXIvJG5ld2xpYiI7IHRoZW4gOjsgZWxzZQotCSAgICAgIGZ1bmNfdmVyYm9zZSAiZ2VuZXJhdGluZyBpbXBvcnQgbGlicmFyeSBmb3IgXGAkc29uYW1lJyIKLQkgICAgICBmdW5jX2V4ZWN1dGVfY21kcyAiJG9sZF9hcmNoaXZlX2Zyb21fZXhwc3ltc19jbWRzIiAnZXhpdCAkPycKLQkgICAgZmkKLQkgICAgIyBtYWtlIHN1cmUgdGhlIGxpYnJhcnkgdmFyaWFibGVzIGFyZSBwb2ludGluZyB0byB0aGUgbmV3IGxpYnJhcnkKLQkgICAgZGlyPSRvdXRwdXRfb2JqZGlyCi0JICAgIGxpbmtsaWI9JG5ld2xpYgotCSAgZmkgIyB0ZXN0IC1uICIkb2xkX2FyY2hpdmVfZnJvbV9leHBzeW1zX2NtZHMiCi0KLQkgIGlmIHRlc3QgIiRsaW5rbW9kZSIgPSBwcm9nIHx8IHRlc3QgIiRvcHRfbW9kZSIgIT0gcmVsaW5rOyB0aGVuCi0JICAgIGFkZF9zaGxpYnBhdGg9Ci0JICAgIGFkZF9kaXI9Ci0JICAgIGFkZD0KLQkgICAgbGliX2xpbmtlZD15ZXMKLQkgICAgY2FzZSAkaGFyZGNvZGVfYWN0aW9uIGluCi0JICAgIGltbWVkaWF0ZSB8IHVuc3VwcG9ydGVkKQotCSAgICAgIGlmIHRlc3QgIiRoYXJkY29kZV9kaXJlY3QiID0gbm87IHRoZW4KLQkJYWRkPSIkZGlyLyRsaW5rbGliIgotCQljYXNlICRob3N0IGluCi0JCSAgKi0qLXNjbzMuMnY1LjAuWzAyNF0qKSBhZGRfZGlyPSItTCRkaXIiIDs7Ci0JCSAgKi0qLXN5c3Y0KnV3MiopIGFkZF9kaXI9Ii1MJGRpciIgOzsKLQkJICAqLSotc3lzdjVPcGVuVU5JWCogfCAqLSotc3lzdjVVbml4V2FyZTcuWzAxXS5bMTBdKiB8IFwKLQkJICAgICotKi11bml4d2FyZTcqKSBhZGRfZGlyPSItTCRkaXIiIDs7Ci0JCSAgKi0qLWRhcndpbiogKQotCQkgICAgIyBpZiB0aGUgbGliIGlzIGEgKG5vbi1kbG9wZW5lZCkgbW9kdWxlIHRoZW4gd2UgY2FuIG5vdAotCQkgICAgIyBsaW5rIGFnYWluc3QgaXQsIHNvbWVvbmUgaXMgaWdub3JpbmcgdGhlIGVhcmxpZXIgd2FybmluZ3MKLQkJICAgIGlmIC91c3IvYmluL2ZpbGUgLUwgJGFkZCAyPiAvZGV2L251bGwgfAotCQkJICRHUkVQICI6IFteOl0qIGJ1bmRsZSIgPi9kZXYvbnVsbCA7IHRoZW4KLQkJICAgICAgaWYgdGVzdCAiWCRkbG9wZW5tb2R1bGUiICE9ICJYJGxpYiI7IHRoZW4KLQkJCSRFQ0hPICIqKiogV2FybmluZzogbGliICRsaW5rbGliIGlzIGEgbW9kdWxlLCBub3QgYSBzaGFyZWQgbGlicmFyeSIKLQkJCWlmIHRlc3QgLXogIiRvbGRfbGlicmFyeSIgOyB0aGVuCi0JCQkgIGVjaG8KLQkJCSAgZWNobyAiKioqIEFuZCB0aGVyZSBkb2Vzbid0IHNlZW0gdG8gYmUgYSBzdGF0aWMgYXJjaGl2ZSBhdmFpbGFibGUiCi0JCQkgIGVjaG8gIioqKiBUaGUgbGluayB3aWxsIHByb2JhYmx5IGZhaWwsIHNvcnJ5IgotCQkJZWxzZQotCQkJICBhZGQ9IiRkaXIvJG9sZF9saWJyYXJ5IgotCQkJZmkKLQkJICAgICAgZWxpZiB0ZXN0IC1uICIkb2xkX2xpYnJhcnkiOyB0aGVuCi0JCQlhZGQ9IiRkaXIvJG9sZF9saWJyYXJ5IgotCQkgICAgICBmaQotCQkgICAgZmkKLQkJZXNhYwotCSAgICAgIGVsaWYgdGVzdCAiJGhhcmRjb2RlX21pbnVzX0wiID0gbm87IHRoZW4KLQkJY2FzZSAkaG9zdCBpbgotCQkqLSotc3Vub3MqKSBhZGRfc2hsaWJwYXRoPSIkZGlyIiA7OwotCQllc2FjCi0JCWFkZF9kaXI9Ii1MJGRpciIKLQkJYWRkPSItbCRuYW1lIgotCSAgICAgIGVsaWYgdGVzdCAiJGhhcmRjb2RlX3NobGlicGF0aF92YXIiID0gbm87IHRoZW4KLQkJYWRkX3NobGlicGF0aD0iJGRpciIKLQkJYWRkPSItbCRuYW1lIgotCSAgICAgIGVsc2UKLQkJbGliX2xpbmtlZD1ubwotCSAgICAgIGZpCi0JICAgICAgOzsKLQkgICAgcmVsaW5rKQotCSAgICAgIGlmIHRlc3QgIiRoYXJkY29kZV9kaXJlY3QiID0geWVzICYmCi0JICAgICAgICAgdGVzdCAiJGhhcmRjb2RlX2RpcmVjdF9hYnNvbHV0ZSIgPSBubzsgdGhlbgotCQlhZGQ9IiRkaXIvJGxpbmtsaWIiCi0JICAgICAgZWxpZiB0ZXN0ICIkaGFyZGNvZGVfbWludXNfTCIgPSB5ZXM7IHRoZW4KLQkJYWRkX2Rpcj0iLUwkZGlyIgotCQkjIFRyeSBsb29raW5nIGZpcnN0IGluIHRoZSBsb2NhdGlvbiB3ZSdyZSBiZWluZyBpbnN0YWxsZWQgdG8uCi0JCWlmIHRlc3QgLW4gIiRpbnN0X3ByZWZpeF9kaXIiOyB0aGVuCi0JCSAgY2FzZSAkbGliZGlyIGluCi0JCSAgICBbXFwvXSopCi0JCSAgICAgIGZ1bmNfYXBwZW5kIGFkZF9kaXIgIiAtTCRpbnN0X3ByZWZpeF9kaXIkbGliZGlyIgotCQkgICAgICA7OwotCQkgIGVzYWMKLQkJZmkKLQkJYWRkPSItbCRuYW1lIgotCSAgICAgIGVsaWYgdGVzdCAiJGhhcmRjb2RlX3NobGlicGF0aF92YXIiID0geWVzOyB0aGVuCi0JCWFkZF9zaGxpYnBhdGg9IiRkaXIiCi0JCWFkZD0iLWwkbmFtZSIKLQkgICAgICBlbHNlCi0JCWxpYl9saW5rZWQ9bm8KLQkgICAgICBmaQotCSAgICAgIDs7Ci0JICAgICopIGxpYl9saW5rZWQ9bm8gOzsKLQkgICAgZXNhYwotCi0JICAgIGlmIHRlc3QgIiRsaWJfbGlua2VkIiAhPSB5ZXM7IHRoZW4KLQkgICAgICBmdW5jX2ZhdGFsX2NvbmZpZ3VyYXRpb24gInVuc3VwcG9ydGVkIGhhcmRjb2RlIHByb3BlcnRpZXMiCi0JICAgIGZpCi0KLQkgICAgaWYgdGVzdCAtbiAiJGFkZF9zaGxpYnBhdGgiOyB0aGVuCi0JICAgICAgY2FzZSA6JGNvbXBpbGVfc2hsaWJwYXRoOiBpbgotCSAgICAgICoiOiRhZGRfc2hsaWJwYXRoOiIqKSA7OwotCSAgICAgICopIGZ1bmNfYXBwZW5kIGNvbXBpbGVfc2hsaWJwYXRoICIkYWRkX3NobGlicGF0aDoiIDs7Ci0JICAgICAgZXNhYwotCSAgICBmaQotCSAgICBpZiB0ZXN0ICIkbGlua21vZGUiID0gcHJvZzsgdGhlbgotCSAgICAgIHRlc3QgLW4gIiRhZGRfZGlyIiAmJiBjb21waWxlX2RlcGxpYnM9IiRhZGRfZGlyICRjb21waWxlX2RlcGxpYnMiCi0JICAgICAgdGVzdCAtbiAiJGFkZCIgJiYgY29tcGlsZV9kZXBsaWJzPSIkYWRkICRjb21waWxlX2RlcGxpYnMiCi0JICAgIGVsc2UKLQkgICAgICB0ZXN0IC1uICIkYWRkX2RpciIgJiYgZGVwbGlicz0iJGFkZF9kaXIgJGRlcGxpYnMiCi0JICAgICAgdGVzdCAtbiAiJGFkZCIgJiYgZGVwbGlicz0iJGFkZCAkZGVwbGlicyIKLQkgICAgICBpZiB0ZXN0ICIkaGFyZGNvZGVfZGlyZWN0IiAhPSB5ZXMgJiYKLQkJIHRlc3QgIiRoYXJkY29kZV9taW51c19MIiAhPSB5ZXMgJiYKLQkJIHRlc3QgIiRoYXJkY29kZV9zaGxpYnBhdGhfdmFyIiA9IHllczsgdGhlbgotCQljYXNlIDokZmluYWxpemVfc2hsaWJwYXRoOiBpbgotCQkqIjokbGliZGlyOiIqKSA7OwotCQkqKSBmdW5jX2FwcGVuZCBmaW5hbGl6ZV9zaGxpYnBhdGggIiRsaWJkaXI6IiA7OwotCQllc2FjCi0JICAgICAgZmkKLQkgICAgZmkKLQkgIGZpCi0KLQkgIGlmIHRlc3QgIiRsaW5rbW9kZSIgPSBwcm9nIHx8IHRlc3QgIiRvcHRfbW9kZSIgPSByZWxpbms7IHRoZW4KLQkgICAgYWRkX3NobGlicGF0aD0KLQkgICAgYWRkX2Rpcj0KLQkgICAgYWRkPQotCSAgICAjIEZpbmFsaXplIGNvbW1hbmQgZm9yIGJvdGggaXMgc2ltcGxlOiBqdXN0IGhhcmRjb2RlIGl0LgotCSAgICBpZiB0ZXN0ICIkaGFyZGNvZGVfZGlyZWN0IiA9IHllcyAmJgotCSAgICAgICB0ZXN0ICIkaGFyZGNvZGVfZGlyZWN0X2Fic29sdXRlIiA9IG5vOyB0aGVuCi0JICAgICAgYWRkPSIkbGliZGlyLyRsaW5rbGliIgotCSAgICBlbGlmIHRlc3QgIiRoYXJkY29kZV9taW51c19MIiA9IHllczsgdGhlbgotCSAgICAgIGFkZF9kaXI9Ii1MJGxpYmRpciIKLQkgICAgICBhZGQ9Ii1sJG5hbWUiCi0JICAgIGVsaWYgdGVzdCAiJGhhcmRjb2RlX3NobGlicGF0aF92YXIiID0geWVzOyB0aGVuCi0JICAgICAgY2FzZSA6JGZpbmFsaXplX3NobGlicGF0aDogaW4KLQkgICAgICAqIjokbGliZGlyOiIqKSA7OwotCSAgICAgICopIGZ1bmNfYXBwZW5kIGZpbmFsaXplX3NobGlicGF0aCAiJGxpYmRpcjoiIDs7Ci0JICAgICAgZXNhYwotCSAgICAgIGFkZD0iLWwkbmFtZSIKLQkgICAgZWxpZiB0ZXN0ICIkaGFyZGNvZGVfYXV0b21hdGljIiA9IHllczsgdGhlbgotCSAgICAgIGlmIHRlc3QgLW4gIiRpbnN0X3ByZWZpeF9kaXIiICYmCi0JCSB0ZXN0IC1mICIkaW5zdF9wcmVmaXhfZGlyJGxpYmRpci8kbGlua2xpYiIgOyB0aGVuCi0JCWFkZD0iJGluc3RfcHJlZml4X2RpciRsaWJkaXIvJGxpbmtsaWIiCi0JICAgICAgZWxzZQotCQlhZGQ9IiRsaWJkaXIvJGxpbmtsaWIiCi0JICAgICAgZmkKLQkgICAgZWxzZQotCSAgICAgICMgV2UgY2Fubm90IHNlZW0gdG8gaGFyZGNvZGUgaXQsIGd1ZXNzIHdlJ2xsIGZha2UgaXQuCi0JICAgICAgYWRkX2Rpcj0iLUwkbGliZGlyIgotCSAgICAgICMgVHJ5IGxvb2tpbmcgZmlyc3QgaW4gdGhlIGxvY2F0aW9uIHdlJ3JlIGJlaW5nIGluc3RhbGxlZCB0by4KLQkgICAgICBpZiB0ZXN0IC1uICIkaW5zdF9wcmVmaXhfZGlyIjsgdGhlbgotCQljYXNlICRsaWJkaXIgaW4KLQkJICBbXFwvXSopCi0JCSAgICBmdW5jX2FwcGVuZCBhZGRfZGlyICIgLUwkaW5zdF9wcmVmaXhfZGlyJGxpYmRpciIKLQkJICAgIDs7Ci0JCWVzYWMKLQkgICAgICBmaQotCSAgICAgIGFkZD0iLWwkbmFtZSIKLQkgICAgZmkKLQotCSAgICBpZiB0ZXN0ICIkbGlua21vZGUiID0gcHJvZzsgdGhlbgotCSAgICAgIHRlc3QgLW4gIiRhZGRfZGlyIiAmJiBmaW5hbGl6ZV9kZXBsaWJzPSIkYWRkX2RpciAkZmluYWxpemVfZGVwbGlicyIKLQkgICAgICB0ZXN0IC1uICIkYWRkIiAmJiBmaW5hbGl6ZV9kZXBsaWJzPSIkYWRkICRmaW5hbGl6ZV9kZXBsaWJzIgotCSAgICBlbHNlCi0JICAgICAgdGVzdCAtbiAiJGFkZF9kaXIiICYmIGRlcGxpYnM9IiRhZGRfZGlyICRkZXBsaWJzIgotCSAgICAgIHRlc3QgLW4gIiRhZGQiICYmIGRlcGxpYnM9IiRhZGQgJGRlcGxpYnMiCi0JICAgIGZpCi0JICBmaQotCWVsaWYgdGVzdCAiJGxpbmttb2RlIiA9IHByb2c7IHRoZW4KLQkgICMgSGVyZSB3ZSBhc3N1bWUgdGhhdCBvbmUgb2YgaGFyZGNvZGVfZGlyZWN0IG9yIGhhcmRjb2RlX21pbnVzX0wKLQkgICMgaXMgbm90IHVuc3VwcG9ydGVkLiAgVGhpcyBpcyB2YWxpZCBvbiBhbGwga25vd24gc3RhdGljIGFuZAotCSAgIyBzaGFyZWQgcGxhdGZvcm1zLgotCSAgaWYgdGVzdCAiJGhhcmRjb2RlX2RpcmVjdCIgIT0gdW5zdXBwb3J0ZWQ7IHRoZW4KLQkgICAgdGVzdCAtbiAiJG9sZF9saWJyYXJ5IiAmJiBsaW5rbGliPSIkb2xkX2xpYnJhcnkiCi0JICAgIGNvbXBpbGVfZGVwbGlicz0iJGRpci8kbGlua2xpYiAkY29tcGlsZV9kZXBsaWJzIgotCSAgICBmaW5hbGl6ZV9kZXBsaWJzPSIkZGlyLyRsaW5rbGliICRmaW5hbGl6ZV9kZXBsaWJzIgotCSAgZWxzZQotCSAgICBjb21waWxlX2RlcGxpYnM9Ii1sJG5hbWUgLUwkZGlyICRjb21waWxlX2RlcGxpYnMiCi0JICAgIGZpbmFsaXplX2RlcGxpYnM9Ii1sJG5hbWUgLUwkZGlyICRmaW5hbGl6ZV9kZXBsaWJzIgotCSAgZmkKLQllbGlmIHRlc3QgIiRidWlsZF9saWJ0b29sX2xpYnMiID0geWVzOyB0aGVuCi0JICAjIE5vdCBhIHNoYXJlZCBsaWJyYXJ5Ci0JICBpZiB0ZXN0ICIkZGVwbGlic19jaGVja19tZXRob2QiICE9IHBhc3NfYWxsOyB0aGVuCi0JICAgICMgV2UncmUgdHJ5aW5nIGxpbmsgYSBzaGFyZWQgbGlicmFyeSBhZ2FpbnN0IGEgc3RhdGljIG9uZQotCSAgICAjIGJ1dCB0aGUgc3lzdGVtIGRvZXNuJ3Qgc3VwcG9ydCBpdC4KLQotCSAgICAjIEp1c3QgcHJpbnQgYSB3YXJuaW5nIGFuZCBhZGQgdGhlIGxpYnJhcnkgdG8gZGVwZW5kZW5jeV9saWJzIHNvCi0JICAgICMgdGhhdCB0aGUgcHJvZ3JhbSBjYW4gYmUgbGlua2VkIGFnYWluc3QgdGhlIHN0YXRpYyBsaWJyYXJ5LgotCSAgICBlY2hvCi0JICAgICRFQ0hPICIqKiogV2FybmluZzogVGhpcyBzeXN0ZW0gY2FuIG5vdCBsaW5rIHRvIHN0YXRpYyBsaWIgYXJjaGl2ZSAkbGliLiIKLQkgICAgZWNobyAiKioqIEkgaGF2ZSB0aGUgY2FwYWJpbGl0eSB0byBtYWtlIHRoYXQgbGlicmFyeSBhdXRvbWF0aWNhbGx5IGxpbmsgaW4gd2hlbiIKLQkgICAgZWNobyAiKioqIHlvdSBsaW5rIHRvIHRoaXMgbGlicmFyeS4gIEJ1dCBJIGNhbiBvbmx5IGRvIHRoaXMgaWYgeW91IGhhdmUgYSIKLQkgICAgZWNobyAiKioqIHNoYXJlZCB2ZXJzaW9uIG9mIHRoZSBsaWJyYXJ5LCB3aGljaCB5b3UgZG8gbm90IGFwcGVhciB0byBoYXZlLiIKLQkgICAgaWYgdGVzdCAiJG1vZHVsZSIgPSB5ZXM7IHRoZW4KLQkgICAgICBlY2hvICIqKiogQnV0IGFzIHlvdSB0cnkgdG8gYnVpbGQgYSBtb2R1bGUgbGlicmFyeSwgbGlidG9vbCB3aWxsIHN0aWxsIGNyZWF0ZSAiCi0JICAgICAgZWNobyAiKioqIGEgc3RhdGljIG1vZHVsZSwgdGhhdCBzaG91bGQgd29yayBhcyBsb25nIGFzIHRoZSBkbG9wZW5pbmcgYXBwbGljYXRpb24iCi0JICAgICAgZWNobyAiKioqIGlzIGxpbmtlZCB3aXRoIHRoZSAtZGxvcGVuIGZsYWcgdG8gcmVzb2x2ZSBzeW1ib2xzIGF0IHJ1bnRpbWUuIgotCSAgICAgIGlmIHRlc3QgLXogIiRnbG9iYWxfc3ltYm9sX3BpcGUiOyB0aGVuCi0JCWVjaG8KLQkJZWNobyAiKioqIEhvd2V2ZXIsIHRoaXMgd291bGQgb25seSB3b3JrIGlmIGxpYnRvb2wgd2FzIGFibGUgdG8gZXh0cmFjdCBzeW1ib2wiCi0JCWVjaG8gIioqKiBsaXN0cyBmcm9tIGEgcHJvZ3JhbSwgdXNpbmcgXGBubScgb3IgZXF1aXZhbGVudCwgYnV0IGxpYnRvb2wgY291bGQiCi0JCWVjaG8gIioqKiBub3QgZmluZCBzdWNoIGEgcHJvZ3JhbS4gIFNvLCB0aGlzIG1vZHVsZSBpcyBwcm9iYWJseSB1c2VsZXNzLiIKLQkJZWNobyAiKioqIFxgbm0nIGZyb20gR05VIGJpbnV0aWxzIGFuZCBhIGZ1bGwgcmVidWlsZCBtYXkgaGVscC4iCi0JICAgICAgZmkKLQkgICAgICBpZiB0ZXN0ICIkYnVpbGRfb2xkX2xpYnMiID0gbm87IHRoZW4KLQkJYnVpbGRfbGlidG9vbF9saWJzPW1vZHVsZQotCQlidWlsZF9vbGRfbGlicz15ZXMKLQkgICAgICBlbHNlCi0JCWJ1aWxkX2xpYnRvb2xfbGlicz1ubwotCSAgICAgIGZpCi0JICAgIGZpCi0JICBlbHNlCi0JICAgIGRlcGxpYnM9IiRkaXIvJG9sZF9saWJyYXJ5ICRkZXBsaWJzIgotCSAgICBsaW5rX3N0YXRpYz15ZXMKLQkgIGZpCi0JZmkgIyBsaW5rIHNoYXJlZC9zdGF0aWMgbGlicmFyeT8KLQotCWlmIHRlc3QgIiRsaW5rbW9kZSIgPSBsaWI7IHRoZW4KLQkgIGlmIHRlc3QgLW4gIiRkZXBlbmRlbmN5X2xpYnMiICYmCi0JICAgICB7IHRlc3QgIiRoYXJkY29kZV9pbnRvX2xpYnMiICE9IHllcyB8fAotCSAgICAgICB0ZXN0ICIkYnVpbGRfb2xkX2xpYnMiID0geWVzIHx8Ci0JICAgICAgIHRlc3QgIiRsaW5rX3N0YXRpYyIgPSB5ZXM7IH07IHRoZW4KLQkgICAgIyBFeHRyYWN0IC1SIGZyb20gZGVwZW5kZW5jeV9saWJzCi0JICAgIHRlbXBfZGVwbGlicz0KLQkgICAgZm9yIGxpYmRpciBpbiAkZGVwZW5kZW5jeV9saWJzOyBkbwotCSAgICAgIGNhc2UgJGxpYmRpciBpbgotCSAgICAgIC1SKikgZnVuY19zdHJpcG5hbWUgJy1SJyAnJyAiJGxpYmRpciIKLQkgICAgICAgICAgIHRlbXBfeHJwYXRoPSRmdW5jX3N0cmlwbmFtZV9yZXN1bHQKLQkJICAgY2FzZSAiICR4cnBhdGggIiBpbgotCQkgICAqIiAkdGVtcF94cnBhdGggIiopIDs7Ci0JCSAgICopIGZ1bmNfYXBwZW5kIHhycGF0aCAiICR0ZW1wX3hycGF0aCI7OwotCQkgICBlc2FjOzsKLQkgICAgICAqKSBmdW5jX2FwcGVuZCB0ZW1wX2RlcGxpYnMgIiAkbGliZGlyIjs7Ci0JICAgICAgZXNhYwotCSAgICBkb25lCi0JICAgIGRlcGVuZGVuY3lfbGlicz0iJHRlbXBfZGVwbGlicyIKLQkgIGZpCi0KLQkgIGZ1bmNfYXBwZW5kIG5ld2xpYl9zZWFyY2hfcGF0aCAiICRhYnNkaXIiCi0JICAjIExpbmsgYWdhaW5zdCB0aGlzIGxpYnJhcnkKLQkgIHRlc3QgIiRsaW5rX3N0YXRpYyIgPSBubyAmJiBuZXdkZXBlbmRlbmN5X2xpYnM9IiRhYnNfbGFkaXIvJGxhbmFtZSAkbmV3ZGVwZW5kZW5jeV9saWJzIgotCSAgIyAuLi4gYW5kIGl0cyBkZXBlbmRlbmN5X2xpYnMKLQkgIHRtcF9saWJzPQotCSAgZm9yIGRlcGxpYiBpbiAkZGVwZW5kZW5jeV9saWJzOyBkbwotCSAgICBuZXdkZXBlbmRlbmN5X2xpYnM9IiRkZXBsaWIgJG5ld2RlcGVuZGVuY3lfbGlicyIKLQkgICAgY2FzZSAkZGVwbGliIGluCi0gICAgICAgICAgICAgIC1MKikgZnVuY19zdHJpcG5hbWUgJy1MJyAnJyAiJGRlcGxpYiIKLSAgICAgICAgICAgICAgICAgICBmdW5jX3Jlc29sdmVfc3lzcm9vdCAiJGZ1bmNfc3RyaXBuYW1lX3Jlc3VsdCI7OwotICAgICAgICAgICAgICAqKSBmdW5jX3Jlc29sdmVfc3lzcm9vdCAiJGRlcGxpYiIgOzsKLSAgICAgICAgICAgIGVzYWMKLQkgICAgaWYgJG9wdF9wcmVzZXJ2ZV9kdXBfZGVwcyA7IHRoZW4KLQkgICAgICBjYXNlICIkdG1wX2xpYnMgIiBpbgotCSAgICAgICoiICRmdW5jX3Jlc29sdmVfc3lzcm9vdF9yZXN1bHQgIiopCi0gICAgICAgICAgICAgICAgZnVuY19hcHBlbmQgc3BlY2lhbGRlcGxpYnMgIiAkZnVuY19yZXNvbHZlX3N5c3Jvb3RfcmVzdWx0IiA7OwotCSAgICAgIGVzYWMKLQkgICAgZmkKLQkgICAgZnVuY19hcHBlbmQgdG1wX2xpYnMgIiAkZnVuY19yZXNvbHZlX3N5c3Jvb3RfcmVzdWx0IgotCSAgZG9uZQotCi0JICBpZiB0ZXN0ICIkbGlua19hbGxfZGVwbGlicyIgIT0gbm87IHRoZW4KLQkgICAgIyBBZGQgdGhlIHNlYXJjaCBwYXRocyBvZiBhbGwgZGVwZW5kZW5jeSBsaWJyYXJpZXMKLQkgICAgZm9yIGRlcGxpYiBpbiAkZGVwZW5kZW5jeV9saWJzOyBkbwotCSAgICAgIHBhdGg9Ci0JICAgICAgY2FzZSAkZGVwbGliIGluCi0JICAgICAgLUwqKSBwYXRoPSIkZGVwbGliIiA7OwotCSAgICAgICoubGEpCi0JICAgICAgICBmdW5jX3Jlc29sdmVfc3lzcm9vdCAiJGRlcGxpYiIKLQkgICAgICAgIGRlcGxpYj0kZnVuY19yZXNvbHZlX3N5c3Jvb3RfcmVzdWx0Ci0JICAgICAgICBmdW5jX2Rpcm5hbWUgIiRkZXBsaWIiICIiICIuIgotCQlkaXI9JGZ1bmNfZGlybmFtZV9yZXN1bHQKLQkJIyBXZSBuZWVkIGFuIGFic29sdXRlIHBhdGguCi0JCWNhc2UgJGRpciBpbgotCQlbXFwvXSogfCBbQS1aYS16XTpbXFwvXSopIGFic2Rpcj0iJGRpciIgOzsKLQkJKikKLQkJICBhYnNkaXI9YGNkICIkZGlyIiAmJiBwd2RgCi0JCSAgaWYgdGVzdCAteiAiJGFic2RpciI7IHRoZW4KLQkJICAgIGZ1bmNfd2FybmluZyAiY2Fubm90IGRldGVybWluZSBhYnNvbHV0ZSBkaXJlY3RvcnkgbmFtZSBvZiBcYCRkaXInIgotCQkgICAgYWJzZGlyPSIkZGlyIgotCQkgIGZpCi0JCSAgOzsKLQkJZXNhYwotCQlpZiAkR1JFUCAiXmluc3RhbGxlZD1ubyIgJGRlcGxpYiA+IC9kZXYvbnVsbDsgdGhlbgotCQljYXNlICRob3N0IGluCi0JCSotKi1kYXJ3aW4qKQotCQkgIGRlcGRlcGw9Ci0JCSAgZXZhbCBkZXBsaWJyYXJ5X25hbWVzPWAke1NFRH0gLW4gLWUgJ3MvXmxpYnJhcnlfbmFtZXM9XCguKlwpJC9cMS9wJyAkZGVwbGliYAotCQkgIGlmIHRlc3QgLW4gIiRkZXBsaWJyYXJ5X25hbWVzIiA7IHRoZW4KLQkJICAgIGZvciB0bXAgaW4gJGRlcGxpYnJhcnlfbmFtZXMgOyBkbwotCQkgICAgICBkZXBkZXBsPSR0bXAKLQkJICAgIGRvbmUKLQkJICAgIGlmIHRlc3QgLWYgIiRhYnNkaXIvJG9iamRpci8kZGVwZGVwbCIgOyB0aGVuCi0JCSAgICAgIGRlcGRlcGw9IiRhYnNkaXIvJG9iamRpci8kZGVwZGVwbCIKLQkJICAgICAgZGFyd2luX2luc3RhbGxfbmFtZT1gJHtPVE9PTH0gLUwgJGRlcGRlcGwgfCBhd2sgJ3tpZiAoTlIgPT0gMikge3ByaW50ICQxO2V4aXR9fSdgCi0gICAgICAgICAgICAgICAgICAgICAgaWYgdGVzdCAteiAiJGRhcndpbl9pbnN0YWxsX25hbWUiOyB0aGVuCi0gICAgICAgICAgICAgICAgICAgICAgICAgIGRhcndpbl9pbnN0YWxsX25hbWU9YCR7T1RPT0w2NH0gLUwgJGRlcGRlcGwgIHwgYXdrICd7aWYgKE5SID09IDIpIHtwcmludCAkMTtleGl0fX0nYAotICAgICAgICAgICAgICAgICAgICAgIGZpCi0JCSAgICAgIGZ1bmNfYXBwZW5kIGNvbXBpbGVyX2ZsYWdzICIgJHt3bH0tZHlsaWJfZmlsZSAke3dsfSR7ZGFyd2luX2luc3RhbGxfbmFtZX06JHtkZXBkZXBsfSIKLQkJICAgICAgZnVuY19hcHBlbmQgbGlua2VyX2ZsYWdzICIgLWR5bGliX2ZpbGUgJHtkYXJ3aW5faW5zdGFsbF9uYW1lfToke2RlcGRlcGx9IgotCQkgICAgICBwYXRoPQotCQkgICAgZmkKLQkJICBmaQotCQkgIDs7Ci0JCSopCi0JCSAgcGF0aD0iLUwkYWJzZGlyLyRvYmpkaXIiCi0JCSAgOzsKLQkJZXNhYwotCQllbHNlCi0JCSAgZXZhbCBsaWJkaXI9YCR7U0VEfSAtbiAtZSAncy9ebGliZGlyPVwoLipcKSQvXDEvcCcgJGRlcGxpYmAKLQkJICB0ZXN0IC16ICIkbGliZGlyIiAmJiBcCi0JCSAgICBmdW5jX2ZhdGFsX2Vycm9yICJcYCRkZXBsaWInIGlzIG5vdCBhIHZhbGlkIGxpYnRvb2wgYXJjaGl2ZSIKLQkJICB0ZXN0ICIkYWJzZGlyIiAhPSAiJGxpYmRpciIgJiYgXAotCQkgICAgZnVuY193YXJuaW5nICJcYCRkZXBsaWInIHNlZW1zIHRvIGJlIG1vdmVkIgotCi0JCSAgcGF0aD0iLUwkYWJzZGlyIgotCQlmaQotCQk7OwotCSAgICAgIGVzYWMKLQkgICAgICBjYXNlICIgJGRlcGxpYnMgIiBpbgotCSAgICAgICoiICRwYXRoICIqKSA7OwotCSAgICAgICopIGRlcGxpYnM9IiRwYXRoICRkZXBsaWJzIiA7OwotCSAgICAgIGVzYWMKLQkgICAgZG9uZQotCSAgZmkgIyBsaW5rX2FsbF9kZXBsaWJzICE9IG5vCi0JZmkgIyBsaW5rbW9kZSA9IGxpYgotICAgICAgZG9uZSAjIGZvciBkZXBsaWIgaW4gJGxpYnMKLSAgICAgIGlmIHRlc3QgIiRwYXNzIiA9IGxpbms7IHRoZW4KLQlpZiB0ZXN0ICIkbGlua21vZGUiID0gInByb2ciOyB0aGVuCi0JICBjb21waWxlX2RlcGxpYnM9IiRuZXdfaW5oZXJpdGVkX2xpbmtlcl9mbGFncyAkY29tcGlsZV9kZXBsaWJzIgotCSAgZmluYWxpemVfZGVwbGlicz0iJG5ld19pbmhlcml0ZWRfbGlua2VyX2ZsYWdzICRmaW5hbGl6ZV9kZXBsaWJzIgotCWVsc2UKLQkgIGNvbXBpbGVyX2ZsYWdzPSIkY29tcGlsZXJfZmxhZ3MgImAkRUNITyAiICRuZXdfaW5oZXJpdGVkX2xpbmtlcl9mbGFncyIgfCAkU0VEICdzJSBcKFteICRdKlwpLmx0ZnJhbWV3b3JrJSAtZnJhbWV3b3JrIFwxJWcnYAotCWZpCi0gICAgICBmaQotICAgICAgZGVwZW5kZW5jeV9saWJzPSIkbmV3ZGVwZW5kZW5jeV9saWJzIgotICAgICAgaWYgdGVzdCAiJHBhc3MiID0gZGxwcmVvcGVuOyB0aGVuCi0JIyBMaW5rIHRoZSBkbHByZW9wZW5lZCBsaWJyYXJpZXMgYmVmb3JlIG90aGVyIGxpYnJhcmllcwotCWZvciBkZXBsaWIgaW4gJHNhdmVfZGVwbGliczsgZG8KLQkgIGRlcGxpYnM9IiRkZXBsaWIgJGRlcGxpYnMiCi0JZG9uZQotICAgICAgZmkKLSAgICAgIGlmIHRlc3QgIiRwYXNzIiAhPSBkbG9wZW47IHRoZW4KLQlpZiB0ZXN0ICIkcGFzcyIgIT0gY29udjsgdGhlbgotCSAgIyBNYWtlIHN1cmUgbGliX3NlYXJjaF9wYXRoIGNvbnRhaW5zIG9ubHkgdW5pcXVlIGRpcmVjdG9yaWVzLgotCSAgbGliX3NlYXJjaF9wYXRoPQotCSAgZm9yIGRpciBpbiAkbmV3bGliX3NlYXJjaF9wYXRoOyBkbwotCSAgICBjYXNlICIkbGliX3NlYXJjaF9wYXRoICIgaW4KLQkgICAgKiIgJGRpciAiKikgOzsKLQkgICAgKikgZnVuY19hcHBlbmQgbGliX3NlYXJjaF9wYXRoICIgJGRpciIgOzsKLQkgICAgZXNhYwotCSAgZG9uZQotCSAgbmV3bGliX3NlYXJjaF9wYXRoPQotCWZpCi0KLQlpZiB0ZXN0ICIkbGlua21vZGUsJHBhc3MiICE9ICJwcm9nLGxpbmsiOyB0aGVuCi0JICB2YXJzPSJkZXBsaWJzIgotCWVsc2UKLQkgIHZhcnM9ImNvbXBpbGVfZGVwbGlicyBmaW5hbGl6ZV9kZXBsaWJzIgotCWZpCi0JZm9yIHZhciBpbiAkdmFycyBkZXBlbmRlbmN5X2xpYnM7IGRvCi0JICAjIEFkZCBsaWJyYXJpZXMgdG8gJHZhciBpbiByZXZlcnNlIG9yZGVyCi0JICBldmFsIHRtcF9saWJzPVwiXCQkdmFyXCIKLQkgIG5ld19saWJzPQotCSAgZm9yIGRlcGxpYiBpbiAkdG1wX2xpYnM7IGRvCi0JICAgICMgRklYTUU6IFBlZGFudGljYWxseSwgdGhpcyBpcyB0aGUgcmlnaHQgdGhpbmcgdG8gZG8sIHNvCi0JICAgICMgICAgICAgIHRoYXQgc29tZSBuYXN0eSBkZXBlbmRlbmN5IGxvb3AgaXNuJ3QgYWNjaWRlbnRhbGx5Ci0JICAgICMgICAgICAgIGJyb2tlbjoKLQkgICAgI25ld19saWJzPSIkZGVwbGliICRuZXdfbGlicyIKLQkgICAgIyBQcmFnbWF0aWNhbGx5LCB0aGlzIHNlZW1zIHRvIGNhdXNlIHZlcnkgZmV3IHByb2JsZW1zIGluCi0JICAgICMgcHJhY3RpY2U6Ci0JICAgIGNhc2UgJGRlcGxpYiBpbgotCSAgICAtTCopIG5ld19saWJzPSIkZGVwbGliICRuZXdfbGlicyIgOzsKLQkgICAgLVIqKSA7OwotCSAgICAqKQotCSAgICAgICMgQW5kIGhlcmUgaXMgdGhlIHJlYXNvbjogd2hlbiBhIGxpYnJhcnkgYXBwZWFycyBtb3JlCi0JICAgICAgIyB0aGFuIG9uY2UgYXMgYW4gZXhwbGljaXQgZGVwZW5kZW5jZSBvZiBhIGxpYnJhcnksIG9yCi0JICAgICAgIyBpcyBpbXBsaWNpdGx5IGxpbmtlZCBpbiBtb3JlIHRoYW4gb25jZSBieSB0aGUKLQkgICAgICAjIGNvbXBpbGVyLCBpdCBpcyBjb25zaWRlcmVkIHNwZWNpYWwsIGFuZCBtdWx0aXBsZQotCSAgICAgICMgb2NjdXJyZW5jZXMgdGhlcmVvZiBhcmUgbm90IHJlbW92ZWQuICBDb21wYXJlIHRoaXMKLQkgICAgICAjIHdpdGggaGF2aW5nIHRoZSBzYW1lIGxpYnJhcnkgYmVpbmcgbGlzdGVkIGFzIGEKLQkgICAgICAjIGRlcGVuZGVuY3kgb2YgbXVsdGlwbGUgb3RoZXIgbGlicmFyaWVzOiBpbiB0aGlzIGNhc2UsCi0JICAgICAgIyB3ZSBrbm93IChwZWRhbnRpY2FsbHksIHdlIGFzc3VtZSkgdGhlIGxpYnJhcnkgZG9lcyBub3QKLQkgICAgICAjIG5lZWQgdG8gYmUgbGlzdGVkIG1vcmUgdGhhbiBvbmNlLCBzbyB3ZSBrZWVwIG9ubHkgdGhlCi0JICAgICAgIyBsYXN0IGNvcHkuICBUaGlzIGlzIG5vdCBhbHdheXMgcmlnaHQsIGJ1dCBpdCBpcyByYXJlCi0JICAgICAgIyBlbm91Z2ggdGhhdCB3ZSByZXF1aXJlIHVzZXJzIHRoYXQgcmVhbGx5IG1lYW4gdG8gcGxheQotCSAgICAgICMgc3VjaCB1bnBvcnRhYmxlIGxpbmtpbmcgdHJpY2tzIHRvIGxpbmsgdGhlIGxpYnJhcnkKLQkgICAgICAjIHVzaW5nIC1XbCwtbG5hbWUsIHNvIHRoYXQgbGlidG9vbCBkb2VzIG5vdCBjb25zaWRlciBpdAotCSAgICAgICMgZm9yIGR1cGxpY2F0ZSByZW1vdmFsLgotCSAgICAgIGNhc2UgIiAkc3BlY2lhbGRlcGxpYnMgIiBpbgotCSAgICAgICoiICRkZXBsaWIgIiopIG5ld19saWJzPSIkZGVwbGliICRuZXdfbGlicyIgOzsKLQkgICAgICAqKQotCQljYXNlICIgJG5ld19saWJzICIgaW4KLQkJKiIgJGRlcGxpYiAiKikgOzsKLQkJKikgbmV3X2xpYnM9IiRkZXBsaWIgJG5ld19saWJzIiA7OwotCQllc2FjCi0JCTs7Ci0JICAgICAgZXNhYwotCSAgICAgIDs7Ci0JICAgIGVzYWMKLQkgIGRvbmUKLQkgIHRtcF9saWJzPQotCSAgZm9yIGRlcGxpYiBpbiAkbmV3X2xpYnM7IGRvCi0JICAgIGNhc2UgJGRlcGxpYiBpbgotCSAgICAtTCopCi0JICAgICAgY2FzZSAiICR0bXBfbGlicyAiIGluCi0JICAgICAgKiIgJGRlcGxpYiAiKikgOzsKLQkgICAgICAqKSBmdW5jX2FwcGVuZCB0bXBfbGlicyAiICRkZXBsaWIiIDs7Ci0JICAgICAgZXNhYwotCSAgICAgIDs7Ci0JICAgICopIGZ1bmNfYXBwZW5kIHRtcF9saWJzICIgJGRlcGxpYiIgOzsKLQkgICAgZXNhYwotCSAgZG9uZQotCSAgZXZhbCAkdmFyPVwiJHRtcF9saWJzXCIKLQlkb25lICMgZm9yIHZhcgotICAgICAgZmkKLSAgICAgICMgTGFzdCBzdGVwOiByZW1vdmUgcnVudGltZSBsaWJzIGZyb20gZGVwZW5kZW5jeV9saWJzCi0gICAgICAjICh0aGV5IHN0YXkgaW4gZGVwbGlicykKLSAgICAgIHRtcF9saWJzPQotICAgICAgZm9yIGkgaW4gJGRlcGVuZGVuY3lfbGlicyA7IGRvCi0JY2FzZSAiICRwcmVkZXBzICRwb3N0ZGVwcyAkY29tcGlsZXJfbGliX3NlYXJjaF9wYXRoICIgaW4KLQkqIiAkaSAiKikKLQkgIGk9IiIKLQkgIDs7Ci0JZXNhYwotCWlmIHRlc3QgLW4gIiRpIiA7IHRoZW4KLQkgIGZ1bmNfYXBwZW5kIHRtcF9saWJzICIgJGkiCi0JZmkKLSAgICAgIGRvbmUKLSAgICAgIGRlcGVuZGVuY3lfbGlicz0kdG1wX2xpYnMKLSAgICBkb25lICMgZm9yIHBhc3MKLSAgICBpZiB0ZXN0ICIkbGlua21vZGUiID0gcHJvZzsgdGhlbgotICAgICAgZGxmaWxlcz0iJG5ld2RsZmlsZXMiCi0gICAgZmkKLSAgICBpZiB0ZXN0ICIkbGlua21vZGUiID0gcHJvZyB8fCB0ZXN0ICIkbGlua21vZGUiID0gbGliOyB0aGVuCi0gICAgICBkbHByZWZpbGVzPSIkbmV3ZGxwcmVmaWxlcyIKLSAgICBmaQotCi0gICAgY2FzZSAkbGlua21vZGUgaW4KLSAgICBvbGRsaWIpCi0gICAgICBpZiB0ZXN0IC1uICIkZGxmaWxlcyRkbHByZWZpbGVzIiB8fCB0ZXN0ICIkZGxzZWxmIiAhPSBubzsgdGhlbgotCWZ1bmNfd2FybmluZyAiXGAtZGxvcGVuJyBpcyBpZ25vcmVkIGZvciBhcmNoaXZlcyIKLSAgICAgIGZpCi0KLSAgICAgIGNhc2UgIiAkZGVwbGlicyIgaW4KLSAgICAgICpcIC1sKiB8ICpcIC1MKikKLQlmdW5jX3dhcm5pbmcgIlxgLWwnIGFuZCBcYC1MJyBhcmUgaWdub3JlZCBmb3IgYXJjaGl2ZXMiIDs7Ci0gICAgICBlc2FjCi0KLSAgICAgIHRlc3QgLW4gIiRycGF0aCIgJiYgXAotCWZ1bmNfd2FybmluZyAiXGAtcnBhdGgnIGlzIGlnbm9yZWQgZm9yIGFyY2hpdmVzIgotCi0gICAgICB0ZXN0IC1uICIkeHJwYXRoIiAmJiBcCi0JZnVuY193YXJuaW5nICJcYC1SJyBpcyBpZ25vcmVkIGZvciBhcmNoaXZlcyIKLQotICAgICAgdGVzdCAtbiAiJHZpbmZvIiAmJiBcCi0JZnVuY193YXJuaW5nICJcYC12ZXJzaW9uLWluZm8vLXZlcnNpb24tbnVtYmVyJyBpcyBpZ25vcmVkIGZvciBhcmNoaXZlcyIKLQotICAgICAgdGVzdCAtbiAiJHJlbGVhc2UiICYmIFwKLQlmdW5jX3dhcm5pbmcgIlxgLXJlbGVhc2UnIGlzIGlnbm9yZWQgZm9yIGFyY2hpdmVzIgotCi0gICAgICB0ZXN0IC1uICIkZXhwb3J0X3N5bWJvbHMkZXhwb3J0X3N5bWJvbHNfcmVnZXgiICYmIFwKLQlmdW5jX3dhcm5pbmcgIlxgLWV4cG9ydC1zeW1ib2xzJyBpcyBpZ25vcmVkIGZvciBhcmNoaXZlcyIKLQotICAgICAgIyBOb3cgc2V0IHRoZSB2YXJpYWJsZXMgZm9yIGJ1aWxkaW5nIG9sZCBsaWJyYXJpZXMuCi0gICAgICBidWlsZF9saWJ0b29sX2xpYnM9bm8KLSAgICAgIG9sZGxpYnM9IiRvdXRwdXQiCi0gICAgICBmdW5jX2FwcGVuZCBvYmpzICIkb2xkX2RlcGxpYnMiCi0gICAgICA7OwotCi0gICAgbGliKQotICAgICAgIyBNYWtlIHN1cmUgd2Ugb25seSBnZW5lcmF0ZSBsaWJyYXJpZXMgb2YgdGhlIGZvcm0gYGxpYk5BTUUubGEnLgotICAgICAgY2FzZSAkb3V0cHV0bmFtZSBpbgotICAgICAgbGliKikKLQlmdW5jX3N0cmlwbmFtZSAnbGliJyAnLmxhJyAiJG91dHB1dG5hbWUiCi0JbmFtZT0kZnVuY19zdHJpcG5hbWVfcmVzdWx0Ci0JZXZhbCBzaGFyZWRfZXh0PVwiJHNocmV4dF9jbWRzXCIKLQlldmFsIGxpYm5hbWU9XCIkbGlibmFtZV9zcGVjXCIKLQk7OwotICAgICAgKikKLQl0ZXN0ICIkbW9kdWxlIiA9IG5vICYmIFwKLQkgIGZ1bmNfZmF0YWxfaGVscCAibGlidG9vbCBsaWJyYXJ5IFxgJG91dHB1dCcgbXVzdCBiZWdpbiB3aXRoIFxgbGliJyIKLQotCWlmIHRlc3QgIiRuZWVkX2xpYl9wcmVmaXgiICE9IG5vOyB0aGVuCi0JICAjIEFkZCB0aGUgImxpYiIgcHJlZml4IGZvciBtb2R1bGVzIGlmIHJlcXVpcmVkCi0JICBmdW5jX3N0cmlwbmFtZSAnJyAnLmxhJyAiJG91dHB1dG5hbWUiCi0JICBuYW1lPSRmdW5jX3N0cmlwbmFtZV9yZXN1bHQKLQkgIGV2YWwgc2hhcmVkX2V4dD1cIiRzaHJleHRfY21kc1wiCi0JICBldmFsIGxpYm5hbWU9XCIkbGlibmFtZV9zcGVjXCIKLQllbHNlCi0JICBmdW5jX3N0cmlwbmFtZSAnJyAnLmxhJyAiJG91dHB1dG5hbWUiCi0JICBsaWJuYW1lPSRmdW5jX3N0cmlwbmFtZV9yZXN1bHQKLQlmaQotCTs7Ci0gICAgICBlc2FjCi0KLSAgICAgIGlmIHRlc3QgLW4gIiRvYmpzIjsgdGhlbgotCWlmIHRlc3QgIiRkZXBsaWJzX2NoZWNrX21ldGhvZCIgIT0gcGFzc19hbGw7IHRoZW4KLQkgIGZ1bmNfZmF0YWxfZXJyb3IgImNhbm5vdCBidWlsZCBsaWJ0b29sIGxpYnJhcnkgXGAkb3V0cHV0JyBmcm9tIG5vbi1saWJ0b29sIG9iamVjdHMgb24gdGhpcyBob3N0OiRvYmpzIgotCWVsc2UKLQkgIGVjaG8KLQkgICRFQ0hPICIqKiogV2FybmluZzogTGlua2luZyB0aGUgc2hhcmVkIGxpYnJhcnkgJG91dHB1dCBhZ2FpbnN0IHRoZSBub24tbGlidG9vbCIKLQkgICRFQ0hPICIqKiogb2JqZWN0cyAkb2JqcyBpcyBub3QgcG9ydGFibGUhIgotCSAgZnVuY19hcHBlbmQgbGlib2JqcyAiICRvYmpzIgotCWZpCi0gICAgICBmaQotCi0gICAgICB0ZXN0ICIkZGxzZWxmIiAhPSBubyAmJiBcCi0JZnVuY193YXJuaW5nICJcYC1kbG9wZW4gc2VsZicgaXMgaWdub3JlZCBmb3IgbGlidG9vbCBsaWJyYXJpZXMiCi0KLSAgICAgIHNldCBkdW1teSAkcnBhdGgKLSAgICAgIHNoaWZ0Ci0gICAgICB0ZXN0ICIkIyIgLWd0IDEgJiYgXAotCWZ1bmNfd2FybmluZyAiaWdub3JpbmcgbXVsdGlwbGUgXGAtcnBhdGgncyBmb3IgYSBsaWJ0b29sIGxpYnJhcnkiCi0KLSAgICAgIGluc3RhbGxfbGliZGlyPSIkMSIKLQotICAgICAgb2xkbGlicz0KLSAgICAgIGlmIHRlc3QgLXogIiRycGF0aCI7IHRoZW4KLQlpZiB0ZXN0ICIkYnVpbGRfbGlidG9vbF9saWJzIiA9IHllczsgdGhlbgotCSAgIyBCdWlsZGluZyBhIGxpYnRvb2wgY29udmVuaWVuY2UgbGlicmFyeS4KLQkgICMgU29tZSBjb21waWxlcnMgaGF2ZSBwcm9ibGVtcyB3aXRoIGEgYC5hbCcgZXh0ZW5zaW9uIHNvCi0JICAjIGNvbnZlbmllbmNlIGxpYnJhcmllcyBzaG91bGQgaGF2ZSB0aGUgc2FtZSBleHRlbnNpb24gYW4KLQkgICMgYXJjaGl2ZSBub3JtYWxseSB3b3VsZC4KLQkgIG9sZGxpYnM9IiRvdXRwdXRfb2JqZGlyLyRsaWJuYW1lLiRsaWJleHQgJG9sZGxpYnMiCi0JICBidWlsZF9saWJ0b29sX2xpYnM9Y29udmVuaWVuY2UKLQkgIGJ1aWxkX29sZF9saWJzPXllcwotCWZpCi0KLQl0ZXN0IC1uICIkdmluZm8iICYmIFwKLQkgIGZ1bmNfd2FybmluZyAiXGAtdmVyc2lvbi1pbmZvLy12ZXJzaW9uLW51bWJlcicgaXMgaWdub3JlZCBmb3IgY29udmVuaWVuY2UgbGlicmFyaWVzIgotCi0JdGVzdCAtbiAiJHJlbGVhc2UiICYmIFwKLQkgIGZ1bmNfd2FybmluZyAiXGAtcmVsZWFzZScgaXMgaWdub3JlZCBmb3IgY29udmVuaWVuY2UgbGlicmFyaWVzIgotICAgICAgZWxzZQotCi0JIyBQYXJzZSB0aGUgdmVyc2lvbiBpbmZvcm1hdGlvbiBhcmd1bWVudC4KLQlzYXZlX2lmcz0iJElGUyI7IElGUz0nOicKLQlzZXQgZHVtbXkgJHZpbmZvIDAgMCAwCi0Jc2hpZnQKLQlJRlM9IiRzYXZlX2lmcyIKLQotCXRlc3QgLW4gIiQ3IiAmJiBcCi0JICBmdW5jX2ZhdGFsX2hlbHAgInRvbyBtYW55IHBhcmFtZXRlcnMgdG8gXGAtdmVyc2lvbi1pbmZvJyIKLQotCSMgY29udmVydCBhYnNvbHV0ZSB2ZXJzaW9uIG51bWJlcnMgdG8gbGlidG9vbCBhZ2VzCi0JIyB0aGlzIHJldGFpbnMgY29tcGF0aWJpbGl0eSB3aXRoIC5sYSBmaWxlcyBhbmQgYXR0ZW1wdHMKLQkjIHRvIG1ha2UgdGhlIGNvZGUgYmVsb3cgYSBiaXQgbW9yZSBjb21wcmVoZW5zaWJsZQotCi0JY2FzZSAkdmluZm9fbnVtYmVyIGluCi0JeWVzKQotCSAgbnVtYmVyX21ham9yPSIkMSIKLQkgIG51bWJlcl9taW5vcj0iJDIiCi0JICBudW1iZXJfcmV2aXNpb249IiQzIgotCSAgIwotCSAgIyBUaGVyZSBhcmUgcmVhbGx5IG9ubHkgdHdvIGtpbmRzIC0tIHRob3NlIHRoYXQKLQkgICMgdXNlIHRoZSBjdXJyZW50IHJldmlzaW9uIGFzIHRoZSBtYWpvciB2ZXJzaW9uCi0JICAjIGFuZCB0aG9zZSB0aGF0IHN1YnRyYWN0IGFnZSBhbmQgdXNlIGFnZSBhcwotCSAgIyBhIG1pbm9yIHZlcnNpb24uICBCdXQsIHRoZW4gdGhlcmUgaXMgaXJpeAotCSAgIyB3aGljaCBoYXMgYW4gZXh0cmEgMSBhZGRlZCBqdXN0IGZvciBmdW4KLQkgICMKLQkgIGNhc2UgJHZlcnNpb25fdHlwZSBpbgotCSAgZGFyd2lufGxpbnV4fG9zZnx3aW5kb3dzfG5vbmUpCi0JICAgIGZ1bmNfYXJpdGggJG51bWJlcl9tYWpvciArICRudW1iZXJfbWlub3IKLQkgICAgY3VycmVudD0kZnVuY19hcml0aF9yZXN1bHQKLQkgICAgYWdlPSIkbnVtYmVyX21pbm9yIgotCSAgICByZXZpc2lvbj0iJG51bWJlcl9yZXZpc2lvbiIKLQkgICAgOzsKLQkgIGZyZWVic2QtYW91dHxmcmVlYnNkLWVsZnxxbnh8c3Vub3MpCi0JICAgIGN1cnJlbnQ9IiRudW1iZXJfbWFqb3IiCi0JICAgIHJldmlzaW9uPSIkbnVtYmVyX21pbm9yIgotCSAgICBhZ2U9IjAiCi0JICAgIDs7Ci0JICBpcml4fG5vbnN0b3B1eCkKLQkgICAgZnVuY19hcml0aCAkbnVtYmVyX21ham9yICsgJG51bWJlcl9taW5vcgotCSAgICBjdXJyZW50PSRmdW5jX2FyaXRoX3Jlc3VsdAotCSAgICBhZ2U9IiRudW1iZXJfbWlub3IiCi0JICAgIHJldmlzaW9uPSIkbnVtYmVyX21pbm9yIgotCSAgICBsdF9pcml4X2luY3JlbWVudD1ubwotCSAgICA7OwotCSAgZXNhYwotCSAgOzsKLQlubykKLQkgIGN1cnJlbnQ9IiQxIgotCSAgcmV2aXNpb249IiQyIgotCSAgYWdlPSIkMyIKLQkgIDs7Ci0JZXNhYwotCi0JIyBDaGVjayB0aGF0IGVhY2ggb2YgdGhlIHRoaW5ncyBhcmUgdmFsaWQgbnVtYmVycy4KLQljYXNlICRjdXJyZW50IGluCi0JMHxbMS05XXxbMS05XVswLTldfFsxLTldWzAtOV1bMC05XXxbMS05XVswLTldWzAtOV1bMC05XXxbMS05XVswLTldWzAtOV1bMC05XVswLTldKSA7OwotCSopCi0JICBmdW5jX2Vycm9yICJDVVJSRU5UIFxgJGN1cnJlbnQnIG11c3QgYmUgYSBub25uZWdhdGl2ZSBpbnRlZ2VyIgotCSAgZnVuY19mYXRhbF9lcnJvciAiXGAkdmluZm8nIGlzIG5vdCB2YWxpZCB2ZXJzaW9uIGluZm9ybWF0aW9uIgotCSAgOzsKLQllc2FjCi0KLQljYXNlICRyZXZpc2lvbiBpbgotCTB8WzEtOV18WzEtOV1bMC05XXxbMS05XVswLTldWzAtOV18WzEtOV1bMC05XVswLTldWzAtOV18WzEtOV1bMC05XVswLTldWzAtOV1bMC05XSkgOzsKLQkqKQotCSAgZnVuY19lcnJvciAiUkVWSVNJT04gXGAkcmV2aXNpb24nIG11c3QgYmUgYSBub25uZWdhdGl2ZSBpbnRlZ2VyIgotCSAgZnVuY19mYXRhbF9lcnJvciAiXGAkdmluZm8nIGlzIG5vdCB2YWxpZCB2ZXJzaW9uIGluZm9ybWF0aW9uIgotCSAgOzsKLQllc2FjCi0KLQljYXNlICRhZ2UgaW4KLQkwfFsxLTldfFsxLTldWzAtOV18WzEtOV1bMC05XVswLTldfFsxLTldWzAtOV1bMC05XVswLTldfFsxLTldWzAtOV1bMC05XVswLTldWzAtOV0pIDs7Ci0JKikKLQkgIGZ1bmNfZXJyb3IgIkFHRSBcYCRhZ2UnIG11c3QgYmUgYSBub25uZWdhdGl2ZSBpbnRlZ2VyIgotCSAgZnVuY19mYXRhbF9lcnJvciAiXGAkdmluZm8nIGlzIG5vdCB2YWxpZCB2ZXJzaW9uIGluZm9ybWF0aW9uIgotCSAgOzsKLQllc2FjCi0KLQlpZiB0ZXN0ICIkYWdlIiAtZ3QgIiRjdXJyZW50IjsgdGhlbgotCSAgZnVuY19lcnJvciAiQUdFIFxgJGFnZScgaXMgZ3JlYXRlciB0aGFuIHRoZSBjdXJyZW50IGludGVyZmFjZSBudW1iZXIgXGAkY3VycmVudCciCi0JICBmdW5jX2ZhdGFsX2Vycm9yICJcYCR2aW5mbycgaXMgbm90IHZhbGlkIHZlcnNpb24gaW5mb3JtYXRpb24iCi0JZmkKLQotCSMgQ2FsY3VsYXRlIHRoZSB2ZXJzaW9uIHZhcmlhYmxlcy4KLQltYWpvcj0KLQl2ZXJzdWZmaXg9Ci0JdmVyc3RyaW5nPQotCWNhc2UgJHZlcnNpb25fdHlwZSBpbgotCW5vbmUpIDs7Ci0KLQlkYXJ3aW4pCi0JICAjIExpa2UgTGludXgsIGJ1dCB3aXRoIHRoZSBjdXJyZW50IHZlcnNpb24gYXZhaWxhYmxlIGluCi0JICAjIHZlcnN0cmluZyBmb3IgY29kaW5nIGl0IGludG8gdGhlIGxpYnJhcnkgaGVhZGVyCi0JICBmdW5jX2FyaXRoICRjdXJyZW50IC0gJGFnZQotCSAgbWFqb3I9LiRmdW5jX2FyaXRoX3Jlc3VsdAotCSAgdmVyc3VmZml4PSIkbWFqb3IuJGFnZS4kcmV2aXNpb24iCi0JICAjIERhcndpbiBsZCBkb2Vzbid0IGxpa2UgMCBmb3IgdGhlc2Ugb3B0aW9ucy4uLgotCSAgZnVuY19hcml0aCAkY3VycmVudCArIDEKLQkgIG1pbm9yX2N1cnJlbnQ9JGZ1bmNfYXJpdGhfcmVzdWx0Ci0JICB4bGN2ZXJzdHJpbmc9IiR7d2x9LWNvbXBhdGliaWxpdHlfdmVyc2lvbiAke3dsfSRtaW5vcl9jdXJyZW50ICR7d2x9LWN1cnJlbnRfdmVyc2lvbiAke3dsfSRtaW5vcl9jdXJyZW50LiRyZXZpc2lvbiIKLQkgIHZlcnN0cmluZz0iLWNvbXBhdGliaWxpdHlfdmVyc2lvbiAkbWlub3JfY3VycmVudCAtY3VycmVudF92ZXJzaW9uICRtaW5vcl9jdXJyZW50LiRyZXZpc2lvbiIKLQkgIDs7Ci0KLQlmcmVlYnNkLWFvdXQpCi0JICBtYWpvcj0iLiRjdXJyZW50IgotCSAgdmVyc3VmZml4PSIuJGN1cnJlbnQuJHJldmlzaW9uIjsKLQkgIDs7Ci0KLQlmcmVlYnNkLWVsZikKLQkgIG1ham9yPSIuJGN1cnJlbnQiCi0JICB2ZXJzdWZmaXg9Ii4kY3VycmVudCIKLQkgIDs7Ci0KLQlpcml4IHwgbm9uc3RvcHV4KQotCSAgaWYgdGVzdCAiWCRsdF9pcml4X2luY3JlbWVudCIgPSAiWG5vIjsgdGhlbgotCSAgICBmdW5jX2FyaXRoICRjdXJyZW50IC0gJGFnZQotCSAgZWxzZQotCSAgICBmdW5jX2FyaXRoICRjdXJyZW50IC0gJGFnZSArIDEKLQkgIGZpCi0JICBtYWpvcj0kZnVuY19hcml0aF9yZXN1bHQKLQotCSAgY2FzZSAkdmVyc2lvbl90eXBlIGluCi0JICAgIG5vbnN0b3B1eCkgdmVyc3RyaW5nX3ByZWZpeD1ub25zdG9wdXggOzsKLQkgICAgKikgICAgICAgICB2ZXJzdHJpbmdfcHJlZml4PXNnaSA7OwotCSAgZXNhYwotCSAgdmVyc3RyaW5nPSIkdmVyc3RyaW5nX3ByZWZpeCRtYWpvci4kcmV2aXNpb24iCi0KLQkgICMgQWRkIGluIGFsbCB0aGUgaW50ZXJmYWNlcyB0aGF0IHdlIGFyZSBjb21wYXRpYmxlIHdpdGguCi0JICBsb29wPSRyZXZpc2lvbgotCSAgd2hpbGUgdGVzdCAiJGxvb3AiIC1uZSAwOyBkbwotCSAgICBmdW5jX2FyaXRoICRyZXZpc2lvbiAtICRsb29wCi0JICAgIGlmYWNlPSRmdW5jX2FyaXRoX3Jlc3VsdAotCSAgICBmdW5jX2FyaXRoICRsb29wIC0gMQotCSAgICBsb29wPSRmdW5jX2FyaXRoX3Jlc3VsdAotCSAgICB2ZXJzdHJpbmc9IiR2ZXJzdHJpbmdfcHJlZml4JG1ham9yLiRpZmFjZTokdmVyc3RyaW5nIgotCSAgZG9uZQotCi0JICAjIEJlZm9yZSB0aGlzIHBvaW50LCAkbWFqb3IgbXVzdCBub3QgY29udGFpbiBgLicuCi0JICBtYWpvcj0uJG1ham9yCi0JICB2ZXJzdWZmaXg9IiRtYWpvci4kcmV2aXNpb24iCi0JICA7OwotCi0JbGludXgpCi0JICBmdW5jX2FyaXRoICRjdXJyZW50IC0gJGFnZQotCSAgbWFqb3I9LiRmdW5jX2FyaXRoX3Jlc3VsdAotCSAgdmVyc3VmZml4PSIkbWFqb3IuJGFnZS4kcmV2aXNpb24iCi0JICA7OwotCi0Jb3NmKQotCSAgZnVuY19hcml0aCAkY3VycmVudCAtICRhZ2UKLQkgIG1ham9yPS4kZnVuY19hcml0aF9yZXN1bHQKLQkgIHZlcnN1ZmZpeD0iLiRjdXJyZW50LiRhZ2UuJHJldmlzaW9uIgotCSAgdmVyc3RyaW5nPSIkY3VycmVudC4kYWdlLiRyZXZpc2lvbiIKLQotCSAgIyBBZGQgaW4gYWxsIHRoZSBpbnRlcmZhY2VzIHRoYXQgd2UgYXJlIGNvbXBhdGlibGUgd2l0aC4KLQkgIGxvb3A9JGFnZQotCSAgd2hpbGUgdGVzdCAiJGxvb3AiIC1uZSAwOyBkbwotCSAgICBmdW5jX2FyaXRoICRjdXJyZW50IC0gJGxvb3AKLQkgICAgaWZhY2U9JGZ1bmNfYXJpdGhfcmVzdWx0Ci0JICAgIGZ1bmNfYXJpdGggJGxvb3AgLSAxCi0JICAgIGxvb3A9JGZ1bmNfYXJpdGhfcmVzdWx0Ci0JICAgIHZlcnN0cmluZz0iJHZlcnN0cmluZzoke2lmYWNlfS4wIgotCSAgZG9uZQotCi0JICAjIE1ha2UgZXhlY3V0YWJsZXMgZGVwZW5kIG9uIG91ciBjdXJyZW50IHZlcnNpb24uCi0JICBmdW5jX2FwcGVuZCB2ZXJzdHJpbmcgIjoke2N1cnJlbnR9LjAiCi0JICA7OwotCi0JcW54KQotCSAgbWFqb3I9Ii4kY3VycmVudCIKLQkgIHZlcnN1ZmZpeD0iLiRjdXJyZW50IgotCSAgOzsKLQotCXN1bm9zKQotCSAgbWFqb3I9Ii4kY3VycmVudCIKLQkgIHZlcnN1ZmZpeD0iLiRjdXJyZW50LiRyZXZpc2lvbiIKLQkgIDs7Ci0KLQl3aW5kb3dzKQotCSAgIyBVc2UgJy0nIHJhdGhlciB0aGFuICcuJywgc2luY2Ugd2Ugb25seSB3YW50IG9uZQotCSAgIyBleHRlbnNpb24gb24gRE9TIDguMyBmaWxlc3lzdGVtcy4KLQkgIGZ1bmNfYXJpdGggJGN1cnJlbnQgLSAkYWdlCi0JICBtYWpvcj0kZnVuY19hcml0aF9yZXN1bHQKLQkgIHZlcnN1ZmZpeD0iLSRtYWpvciIKLQkgIDs7Ci0KLQkqKQotCSAgZnVuY19mYXRhbF9jb25maWd1cmF0aW9uICJ1bmtub3duIGxpYnJhcnkgdmVyc2lvbiB0eXBlIFxgJHZlcnNpb25fdHlwZSciCi0JICA7OwotCWVzYWMKLQotCSMgQ2xlYXIgdGhlIHZlcnNpb24gaW5mbyBpZiB3ZSBkZWZhdWx0ZWQsIGFuZCB0aGV5IHNwZWNpZmllZCBhIHJlbGVhc2UuCi0JaWYgdGVzdCAteiAiJHZpbmZvIiAmJiB0ZXN0IC1uICIkcmVsZWFzZSI7IHRoZW4KLQkgIG1ham9yPQotCSAgY2FzZSAkdmVyc2lvbl90eXBlIGluCi0JICBkYXJ3aW4pCi0JICAgICMgd2UgY2FuJ3QgY2hlY2sgZm9yICIwLjAiIGluIGFyY2hpdmVfY21kcyBkdWUgdG8gcXVvdGluZwotCSAgICAjIHByb2JsZW1zLCBzbyB3ZSByZXNldCBpdCBjb21wbGV0ZWx5Ci0JICAgIHZlcnN0cmluZz0KLQkgICAgOzsKLQkgICopCi0JICAgIHZlcnN0cmluZz0iMC4wIgotCSAgICA7OwotCSAgZXNhYwotCSAgaWYgdGVzdCAiJG5lZWRfdmVyc2lvbiIgPSBubzsgdGhlbgotCSAgICB2ZXJzdWZmaXg9Ci0JICBlbHNlCi0JICAgIHZlcnN1ZmZpeD0iLjAuMCIKLQkgIGZpCi0JZmkKLQotCSMgUmVtb3ZlIHZlcnNpb24gaW5mbyBmcm9tIG5hbWUgaWYgdmVyc2lvbmluZyBzaG91bGQgYmUgYXZvaWRlZAotCWlmIHRlc3QgIiRhdm9pZF92ZXJzaW9uIiA9IHllcyAmJiB0ZXN0ICIkbmVlZF92ZXJzaW9uIiA9IG5vOyB0aGVuCi0JICBtYWpvcj0KLQkgIHZlcnN1ZmZpeD0KLQkgIHZlcnN0cmluZz0iIgotCWZpCi0KLQkjIENoZWNrIHRvIHNlZSBpZiB0aGUgYXJjaGl2ZSB3aWxsIGhhdmUgdW5kZWZpbmVkIHN5bWJvbHMuCi0JaWYgdGVzdCAiJGFsbG93X3VuZGVmaW5lZCIgPSB5ZXM7IHRoZW4KLQkgIGlmIHRlc3QgIiRhbGxvd191bmRlZmluZWRfZmxhZyIgPSB1bnN1cHBvcnRlZDsgdGhlbgotCSAgICBmdW5jX3dhcm5pbmcgInVuZGVmaW5lZCBzeW1ib2xzIG5vdCBhbGxvd2VkIGluICRob3N0IHNoYXJlZCBsaWJyYXJpZXMiCi0JICAgIGJ1aWxkX2xpYnRvb2xfbGlicz1ubwotCSAgICBidWlsZF9vbGRfbGlicz15ZXMKLQkgIGZpCi0JZWxzZQotCSAgIyBEb24ndCBhbGxvdyB1bmRlZmluZWQgc3ltYm9scy4KLQkgIGFsbG93X3VuZGVmaW5lZF9mbGFnPSIkbm9fdW5kZWZpbmVkX2ZsYWciCi0JZmkKLQotICAgICAgZmkKLQotICAgICAgZnVuY19nZW5lcmF0ZV9kbHN5bXMgIiRsaWJuYW1lIiAiJGxpYm5hbWUiICJ5ZXMiCi0gICAgICBmdW5jX2FwcGVuZCBsaWJvYmpzICIgJHN5bWZpbGVvYmoiCi0gICAgICB0ZXN0ICJYJGxpYm9ianMiID0gIlggIiAmJiBsaWJvYmpzPQotCi0gICAgICBpZiB0ZXN0ICIkb3B0X21vZGUiICE9IHJlbGluazsgdGhlbgotCSMgUmVtb3ZlIG91ciBvdXRwdXRzLCBidXQgZG9uJ3QgcmVtb3ZlIG9iamVjdCBmaWxlcyBzaW5jZSB0aGV5Ci0JIyBtYXkgaGF2ZSBiZWVuIGNyZWF0ZWQgd2hlbiBjb21waWxpbmcgUElDIG9iamVjdHMuCi0JcmVtb3ZlbGlzdD0KLQl0ZW1wcmVtb3ZlbGlzdD1gJEVDSE8gIiRvdXRwdXRfb2JqZGlyLyoiYAotCWZvciBwIGluICR0ZW1wcmVtb3ZlbGlzdDsgZG8KLQkgIGNhc2UgJHAgaW4KLQkgICAgKi4kb2JqZXh0IHwgKi5nY25vKQotCSAgICAgICA7OwotCSAgICAkb3V0cHV0X29iamRpci8kb3V0cHV0bmFtZSB8ICRvdXRwdXRfb2JqZGlyLyRsaWJuYW1lLiogfCAkb3V0cHV0X29iamRpci8ke2xpYm5hbWV9JHtyZWxlYXNlfS4qKQotCSAgICAgICBpZiB0ZXN0ICJYJHByZWNpb3VzX2ZpbGVzX3JlZ2V4IiAhPSAiWCI7IHRoZW4KLQkJIGlmICRFQ0hPICIkcCIgfCAkRUdSRVAgLWUgIiRwcmVjaW91c19maWxlc19yZWdleCIgPi9kZXYvbnVsbCAyPiYxCi0JCSB0aGVuCi0JCSAgIGNvbnRpbnVlCi0JCSBmaQotCSAgICAgICBmaQotCSAgICAgICBmdW5jX2FwcGVuZCByZW1vdmVsaXN0ICIgJHAiCi0JICAgICAgIDs7Ci0JICAgICopIDs7Ci0JICBlc2FjCi0JZG9uZQotCXRlc3QgLW4gIiRyZW1vdmVsaXN0IiAmJiBcCi0JICBmdW5jX3Nob3dfZXZhbCAiJHtSTX1yIFwkcmVtb3ZlbGlzdCIKLSAgICAgIGZpCi0KLSAgICAgICMgTm93IHNldCB0aGUgdmFyaWFibGVzIGZvciBidWlsZGluZyBvbGQgbGlicmFyaWVzLgotICAgICAgaWYgdGVzdCAiJGJ1aWxkX29sZF9saWJzIiA9IHllcyAmJiB0ZXN0ICIkYnVpbGRfbGlidG9vbF9saWJzIiAhPSBjb252ZW5pZW5jZSA7IHRoZW4KLQlmdW5jX2FwcGVuZCBvbGRsaWJzICIgJG91dHB1dF9vYmpkaXIvJGxpYm5hbWUuJGxpYmV4dCIKLQotCSMgVHJhbnNmb3JtIC5sbyBmaWxlcyB0byAubyBmaWxlcy4KLQlvbGRvYmpzPSIkb2JqcyAiYCRFQ0hPICIkbGlib2JqcyIgfCAkU1AyTkwgfCAkU0VEICIvXC4ke2xpYmV4dH0kL2Q7ICRsbzJvIiB8ICROTDJTUGAKLSAgICAgIGZpCi0KLSAgICAgICMgRWxpbWluYXRlIGFsbCB0ZW1wb3JhcnkgZGlyZWN0b3JpZXMuCi0gICAgICAjZm9yIHBhdGggaW4gJG5vdGluc3RfcGF0aDsgZG8KLSAgICAgICMJbGliX3NlYXJjaF9wYXRoPWAkRUNITyAiJGxpYl9zZWFyY2hfcGF0aCAiIHwgJFNFRCAicyUgJHBhdGggJSAlZyJgCi0gICAgICAjCWRlcGxpYnM9YCRFQ0hPICIkZGVwbGlicyAiIHwgJFNFRCAicyUgLUwkcGF0aCAlICVnImAKLSAgICAgICMJZGVwZW5kZW5jeV9saWJzPWAkRUNITyAiJGRlcGVuZGVuY3lfbGlicyAiIHwgJFNFRCAicyUgLUwkcGF0aCAlICVnImAKLSAgICAgICNkb25lCi0KLSAgICAgIGlmIHRlc3QgLW4gIiR4cnBhdGgiOyB0aGVuCi0JIyBJZiB0aGUgdXNlciBzcGVjaWZpZWQgYW55IHJwYXRoIGZsYWdzLCB0aGVuIGFkZCB0aGVtLgotCXRlbXBfeHJwYXRoPQotCWZvciBsaWJkaXIgaW4gJHhycGF0aDsgZG8KLQkgIGZ1bmNfcmVwbGFjZV9zeXNyb290ICIkbGliZGlyIgotCSAgZnVuY19hcHBlbmQgdGVtcF94cnBhdGggIiAtUiRmdW5jX3JlcGxhY2Vfc3lzcm9vdF9yZXN1bHQiCi0JICBjYXNlICIkZmluYWxpemVfcnBhdGggIiBpbgotCSAgKiIgJGxpYmRpciAiKikgOzsKLQkgICopIGZ1bmNfYXBwZW5kIGZpbmFsaXplX3JwYXRoICIgJGxpYmRpciIgOzsKLQkgIGVzYWMKLQlkb25lCi0JaWYgdGVzdCAiJGhhcmRjb2RlX2ludG9fbGlicyIgIT0geWVzIHx8IHRlc3QgIiRidWlsZF9vbGRfbGlicyIgPSB5ZXM7IHRoZW4KLQkgIGRlcGVuZGVuY3lfbGlicz0iJHRlbXBfeHJwYXRoICRkZXBlbmRlbmN5X2xpYnMiCi0JZmkKLSAgICAgIGZpCi0KLSAgICAgICMgTWFrZSBzdXJlIGRsZmlsZXMgY29udGFpbnMgb25seSB1bmlxdWUgZmlsZXMgdGhhdCB3b24ndCBiZSBkbHByZW9wZW5lZAotICAgICAgb2xkX2RsZmlsZXM9IiRkbGZpbGVzIgotICAgICAgZGxmaWxlcz0KLSAgICAgIGZvciBsaWIgaW4gJG9sZF9kbGZpbGVzOyBkbwotCWNhc2UgIiAkZGxwcmVmaWxlcyAkZGxmaWxlcyAiIGluCi0JKiIgJGxpYiAiKikgOzsKLQkqKSBmdW5jX2FwcGVuZCBkbGZpbGVzICIgJGxpYiIgOzsKLQllc2FjCi0gICAgICBkb25lCi0KLSAgICAgICMgTWFrZSBzdXJlIGRscHJlZmlsZXMgY29udGFpbnMgb25seSB1bmlxdWUgZmlsZXMKLSAgICAgIG9sZF9kbHByZWZpbGVzPSIkZGxwcmVmaWxlcyIKLSAgICAgIGRscHJlZmlsZXM9Ci0gICAgICBmb3IgbGliIGluICRvbGRfZGxwcmVmaWxlczsgZG8KLQljYXNlICIkZGxwcmVmaWxlcyAiIGluCi0JKiIgJGxpYiAiKikgOzsKLQkqKSBmdW5jX2FwcGVuZCBkbHByZWZpbGVzICIgJGxpYiIgOzsKLQllc2FjCi0gICAgICBkb25lCi0KLSAgICAgIGlmIHRlc3QgIiRidWlsZF9saWJ0b29sX2xpYnMiID0geWVzOyB0aGVuCi0JaWYgdGVzdCAtbiAiJHJwYXRoIjsgdGhlbgotCSAgY2FzZSAkaG9zdCBpbgotCSAgKi0qLWN5Z3dpbiogfCAqLSotbWluZ3cqIHwgKi0qLXB3MzIqIHwgKi0qLW9zMiogfCAqLSotYmVvcyogfCAqLWNlZ2NjKiB8ICotKi1oYWlrdSopCi0JICAgICMgdGhlc2Ugc3lzdGVtcyBkb24ndCBhY3R1YWxseSBoYXZlIGEgYyBsaWJyYXJ5IChhcyBzdWNoKSEKLQkgICAgOzsKLQkgICotKi1yaGFwc29keSogfCAqLSotZGFyd2luMS5bMDEyXSkKLQkgICAgIyBSaGFwc29keSBDIGxpYnJhcnkgaXMgaW4gdGhlIFN5c3RlbSBmcmFtZXdvcmsKLQkgICAgZnVuY19hcHBlbmQgZGVwbGlicyAiIFN5c3RlbS5sdGZyYW1ld29yayIKLQkgICAgOzsKLQkgICotKi1uZXRic2QqKQotCSAgICAjIERvbid0IGxpbmsgd2l0aCBsaWJjIHVudGlsIHRoZSBhLm91dCBsZC5zbyBpcyBmaXhlZC4KLQkgICAgOzsKLQkgICotKi1vcGVuYnNkKiB8ICotKi1mcmVlYnNkKiB8ICotKi1kcmFnb25mbHkqKQotCSAgICAjIERvIG5vdCBpbmNsdWRlIGxpYmMgZHVlIHRvIHVzIGhhdmluZyBsaWJjL2xpYmNfci4KLQkgICAgOzsKLQkgICotKi1zY28zLjJ2NSogfCAqLSotc2NvNXY2KikKLQkgICAgIyBDYXVzZXMgcHJvYmxlbXMgd2l0aCBfX2N0eXBlCi0JICAgIDs7Ci0JICAqLSotc3lzdjQuMnV3MiogfCAqLSotc3lzdjUqIHwgKi0qLXVuaXh3YXJlKiB8ICotKi1PcGVuVU5JWCopCi0JICAgICMgQ29tcGlsZXIgaW5zZXJ0cyBsaWJjIGluIHRoZSBjb3JyZWN0IHBsYWNlIGZvciB0aHJlYWRzIHRvIHdvcmsKLQkgICAgOzsKLQkgICopCi0JICAgICMgQWRkIGxpYmMgdG8gZGVwbGlicyBvbiBhbGwgb3RoZXIgc3lzdGVtcyBpZiBuZWNlc3NhcnkuCi0JICAgIGlmIHRlc3QgIiRidWlsZF9saWJ0b29sX25lZWRfbGMiID0gInllcyI7IHRoZW4KLQkgICAgICBmdW5jX2FwcGVuZCBkZXBsaWJzICIgLWxjIgotCSAgICBmaQotCSAgICA7OwotCSAgZXNhYwotCWZpCi0KLQkjIFRyYW5zZm9ybSBkZXBsaWJzIGludG8gb25seSBkZXBsaWJzIHRoYXQgY2FuIGJlIGxpbmtlZCBpbiBzaGFyZWQuCi0JbmFtZV9zYXZlPSRuYW1lCi0JbGlibmFtZV9zYXZlPSRsaWJuYW1lCi0JcmVsZWFzZV9zYXZlPSRyZWxlYXNlCi0JdmVyc3VmZml4X3NhdmU9JHZlcnN1ZmZpeAotCW1ham9yX3NhdmU9JG1ham9yCi0JIyBJJ20gbm90IHN1cmUgaWYgSSdtIHRyZWF0aW5nIHRoZSByZWxlYXNlIGNvcnJlY3RseS4gIEkgdGhpbmsKLQkjIHJlbGVhc2Ugc2hvdWxkIHNob3cgdXAgaW4gdGhlIC1sIChpZSAtbGdtcDUpIHNvIHdlIGRvbid0IHdhbnQgdG8KLQkjIGFkZCBpdCBpbiB0d2ljZS4gIElzIHRoYXQgY29ycmVjdD8KLQlyZWxlYXNlPSIiCi0JdmVyc3VmZml4PSIiCi0JbWFqb3I9IiIKLQluZXdkZXBsaWJzPQotCWRyb3BwZWRkZXBzPW5vCi0JY2FzZSAkZGVwbGlic19jaGVja19tZXRob2QgaW4KLQlwYXNzX2FsbCkKLQkgICMgRG9uJ3QgY2hlY2sgZm9yIHNoYXJlZC9zdGF0aWMuICBFdmVyeXRoaW5nIHdvcmtzLgotCSAgIyBUaGlzIG1pZ2h0IGJlIGEgbGl0dGxlIG5haXZlLiAgV2UgbWlnaHQgd2FudCB0byBjaGVjawotCSAgIyB3aGV0aGVyIHRoZSBsaWJyYXJ5IGV4aXN0cyBvciBub3QuICBCdXQgdGhpcyBpcyBvbgotCSAgIyBvc2YzICYgb3NmNCBhbmQgSSdtIG5vdCByZWFsbHkgc3VyZS4uLiBKdXN0Ci0JICAjIGltcGxlbWVudGluZyB3aGF0IHdhcyBhbHJlYWR5IHRoZSBiZWhhdmlvci4KLQkgIG5ld2RlcGxpYnM9JGRlcGxpYnMKLQkgIDs7Ci0JdGVzdF9jb21waWxlKQotCSAgIyBUaGlzIGNvZGUgc3RyZXNzZXMgdGhlICJsaWJyYXJpZXMgYXJlIHByb2dyYW1zIiBwYXJhZGlnbSB0byBpdHMKLQkgICMgbGltaXRzLiBNYXliZSBldmVuIGJyZWFrcyBpdC4gIFdlIGNvbXBpbGUgYSBwcm9ncmFtLCBsaW5raW5nIGl0Ci0JICAjIGFnYWluc3QgdGhlIGRlcGxpYnMgYXMgYSBwcm94eSBmb3IgdGhlIGxpYnJhcnkuICBUaGVuIHdlIGNhbiBjaGVjawotCSAgIyB3aGV0aGVyIHRoZXkgbGlua2VkIGluIHN0YXRpY2FsbHkgb3IgZHluYW1pY2FsbHkgd2l0aCBsZGQuCi0JICAkb3B0X2RyeV9ydW4gfHwgJFJNIGNvbmZ0ZXN0LmMKLQkgIGNhdCA+IGNvbmZ0ZXN0LmMgPDxFT0YKLQkgIGludCBtYWluKCkgeyByZXR1cm4gMDsgfQotRU9GCi0JICAkb3B0X2RyeV9ydW4gfHwgJFJNIGNvbmZ0ZXN0Ci0JICBpZiAkTFRDQyAkTFRDRkxBR1MgLW8gY29uZnRlc3QgY29uZnRlc3QuYyAkZGVwbGliczsgdGhlbgotCSAgICBsZGRfb3V0cHV0PWBsZGQgY29uZnRlc3RgCi0JICAgIGZvciBpIGluICRkZXBsaWJzOyBkbwotCSAgICAgIGNhc2UgJGkgaW4KLQkgICAgICAtbCopCi0JCWZ1bmNfc3RyaXBuYW1lIC1sICcnICIkaSIKLQkJbmFtZT0kZnVuY19zdHJpcG5hbWVfcmVzdWx0Ci0JCWlmIHRlc3QgIlgkYWxsb3dfbGlidG9vbF9saWJzX3dpdGhfc3RhdGljX3J1bnRpbWVzIiA9ICJYeWVzIiA7IHRoZW4KLQkJICBjYXNlICIgJHByZWRlcHMgJHBvc3RkZXBzICIgaW4KLQkJICAqIiAkaSAiKikKLQkJICAgIGZ1bmNfYXBwZW5kIG5ld2RlcGxpYnMgIiAkaSIKLQkJICAgIGk9IiIKLQkJICAgIDs7Ci0JCSAgZXNhYwotCQlmaQotCQlpZiB0ZXN0IC1uICIkaSIgOyB0aGVuCi0JCSAgbGlibmFtZT1gZXZhbCAiXFwkRUNITyBcIiRsaWJuYW1lX3NwZWNcIiJgCi0JCSAgZGVwbGliX21hdGNoZXM9YGV2YWwgIlxcJEVDSE8gXCIkbGlicmFyeV9uYW1lc19zcGVjXCIiYAotCQkgIHNldCBkdW1teSAkZGVwbGliX21hdGNoZXM7IHNoaWZ0Ci0JCSAgZGVwbGliX21hdGNoPSQxCi0JCSAgaWYgdGVzdCBgZXhwciAiJGxkZF9vdXRwdXQiIDogIi4qJGRlcGxpYl9tYXRjaCJgIC1uZSAwIDsgdGhlbgotCQkgICAgZnVuY19hcHBlbmQgbmV3ZGVwbGlicyAiICRpIgotCQkgIGVsc2UKLQkJICAgIGRyb3BwZWRkZXBzPXllcwotCQkgICAgZWNobwotCQkgICAgJEVDSE8gIioqKiBXYXJuaW5nOiBkeW5hbWljIGxpbmtlciBkb2VzIG5vdCBhY2NlcHQgbmVlZGVkIGxpYnJhcnkgJGkuIgotCQkgICAgZWNobyAiKioqIEkgaGF2ZSB0aGUgY2FwYWJpbGl0eSB0byBtYWtlIHRoYXQgbGlicmFyeSBhdXRvbWF0aWNhbGx5IGxpbmsgaW4gd2hlbiIKLQkJICAgIGVjaG8gIioqKiB5b3UgbGluayB0byB0aGlzIGxpYnJhcnkuICBCdXQgSSBjYW4gb25seSBkbyB0aGlzIGlmIHlvdSBoYXZlIGEiCi0JCSAgICBlY2hvICIqKiogc2hhcmVkIHZlcnNpb24gb2YgdGhlIGxpYnJhcnksIHdoaWNoIEkgYmVsaWV2ZSB5b3UgZG8gbm90IGhhdmUiCi0JCSAgICBlY2hvICIqKiogYmVjYXVzZSBhIHRlc3RfY29tcGlsZSBkaWQgcmV2ZWFsIHRoYXQgdGhlIGxpbmtlciBkaWQgbm90IHVzZSBpdCBmb3IiCi0JCSAgICBlY2hvICIqKiogaXRzIGR5bmFtaWMgZGVwZW5kZW5jeSBsaXN0IHRoYXQgcHJvZ3JhbXMgZ2V0IHJlc29sdmVkIHdpdGggYXQgcnVudGltZS4iCi0JCSAgZmkKLQkJZmkKLQkJOzsKLQkgICAgICAqKQotCQlmdW5jX2FwcGVuZCBuZXdkZXBsaWJzICIgJGkiCi0JCTs7Ci0JICAgICAgZXNhYwotCSAgICBkb25lCi0JICBlbHNlCi0JICAgICMgRXJyb3Igb2NjdXJyZWQgaW4gdGhlIGZpcnN0IGNvbXBpbGUuICBMZXQncyB0cnkgdG8gc2FsdmFnZQotCSAgICAjIHRoZSBzaXR1YXRpb246IENvbXBpbGUgYSBzZXBhcmF0ZSBwcm9ncmFtIGZvciBlYWNoIGxpYnJhcnkuCi0JICAgIGZvciBpIGluICRkZXBsaWJzOyBkbwotCSAgICAgIGNhc2UgJGkgaW4KLQkgICAgICAtbCopCi0JCWZ1bmNfc3RyaXBuYW1lIC1sICcnICIkaSIKLQkJbmFtZT0kZnVuY19zdHJpcG5hbWVfcmVzdWx0Ci0JCSRvcHRfZHJ5X3J1biB8fCAkUk0gY29uZnRlc3QKLQkJaWYgJExUQ0MgJExUQ0ZMQUdTIC1vIGNvbmZ0ZXN0IGNvbmZ0ZXN0LmMgJGk7IHRoZW4KLQkJICBsZGRfb3V0cHV0PWBsZGQgY29uZnRlc3RgCi0JCSAgaWYgdGVzdCAiWCRhbGxvd19saWJ0b29sX2xpYnNfd2l0aF9zdGF0aWNfcnVudGltZXMiID0gIlh5ZXMiIDsgdGhlbgotCQkgICAgY2FzZSAiICRwcmVkZXBzICRwb3N0ZGVwcyAiIGluCi0JCSAgICAqIiAkaSAiKikKLQkJICAgICAgZnVuY19hcHBlbmQgbmV3ZGVwbGlicyAiICRpIgotCQkgICAgICBpPSIiCi0JCSAgICAgIDs7Ci0JCSAgICBlc2FjCi0JCSAgZmkKLQkJICBpZiB0ZXN0IC1uICIkaSIgOyB0aGVuCi0JCSAgICBsaWJuYW1lPWBldmFsICJcXCRFQ0hPIFwiJGxpYm5hbWVfc3BlY1wiImAKLQkJICAgIGRlcGxpYl9tYXRjaGVzPWBldmFsICJcXCRFQ0hPIFwiJGxpYnJhcnlfbmFtZXNfc3BlY1wiImAKLQkJICAgIHNldCBkdW1teSAkZGVwbGliX21hdGNoZXM7IHNoaWZ0Ci0JCSAgICBkZXBsaWJfbWF0Y2g9JDEKLQkJICAgIGlmIHRlc3QgYGV4cHIgIiRsZGRfb3V0cHV0IiA6ICIuKiRkZXBsaWJfbWF0Y2giYCAtbmUgMCA7IHRoZW4KLQkJICAgICAgZnVuY19hcHBlbmQgbmV3ZGVwbGlicyAiICRpIgotCQkgICAgZWxzZQotCQkgICAgICBkcm9wcGVkZGVwcz15ZXMKLQkJICAgICAgZWNobwotCQkgICAgICAkRUNITyAiKioqIFdhcm5pbmc6IGR5bmFtaWMgbGlua2VyIGRvZXMgbm90IGFjY2VwdCBuZWVkZWQgbGlicmFyeSAkaS4iCi0JCSAgICAgIGVjaG8gIioqKiBJIGhhdmUgdGhlIGNhcGFiaWxpdHkgdG8gbWFrZSB0aGF0IGxpYnJhcnkgYXV0b21hdGljYWxseSBsaW5rIGluIHdoZW4iCi0JCSAgICAgIGVjaG8gIioqKiB5b3UgbGluayB0byB0aGlzIGxpYnJhcnkuICBCdXQgSSBjYW4gb25seSBkbyB0aGlzIGlmIHlvdSBoYXZlIGEiCi0JCSAgICAgIGVjaG8gIioqKiBzaGFyZWQgdmVyc2lvbiBvZiB0aGUgbGlicmFyeSwgd2hpY2ggeW91IGRvIG5vdCBhcHBlYXIgdG8gaGF2ZSIKLQkJICAgICAgZWNobyAiKioqIGJlY2F1c2UgYSB0ZXN0X2NvbXBpbGUgZGlkIHJldmVhbCB0aGF0IHRoZSBsaW5rZXIgZGlkIG5vdCB1c2UgdGhpcyBvbmUiCi0JCSAgICAgIGVjaG8gIioqKiBhcyBhIGR5bmFtaWMgZGVwZW5kZW5jeSB0aGF0IHByb2dyYW1zIGNhbiBnZXQgcmVzb2x2ZWQgd2l0aCBhdCBydW50aW1lLiIKLQkJICAgIGZpCi0JCSAgZmkKLQkJZWxzZQotCQkgIGRyb3BwZWRkZXBzPXllcwotCQkgIGVjaG8KLQkJICAkRUNITyAiKioqIFdhcm5pbmchICBMaWJyYXJ5ICRpIGlzIG5lZWRlZCBieSB0aGlzIGxpYnJhcnkgYnV0IEkgd2FzIG5vdCBhYmxlIHRvIgotCQkgIGVjaG8gIioqKiBtYWtlIGl0IGxpbmsgaW4hICBZb3Ugd2lsbCBwcm9iYWJseSBuZWVkIHRvIGluc3RhbGwgaXQgb3Igc29tZSIKLQkJICBlY2hvICIqKiogbGlicmFyeSB0aGF0IGl0IGRlcGVuZHMgb24gYmVmb3JlIHRoaXMgbGlicmFyeSB3aWxsIGJlIGZ1bGx5IgotCQkgIGVjaG8gIioqKiBmdW5jdGlvbmFsLiAgSW5zdGFsbGluZyBpdCBiZWZvcmUgY29udGludWluZyB3b3VsZCBiZSBldmVuIGJldHRlci4iCi0JCWZpCi0JCTs7Ci0JICAgICAgKikKLQkJZnVuY19hcHBlbmQgbmV3ZGVwbGlicyAiICRpIgotCQk7OwotCSAgICAgIGVzYWMKLQkgICAgZG9uZQotCSAgZmkKLQkgIDs7Ci0JZmlsZV9tYWdpYyopCi0JICBzZXQgZHVtbXkgJGRlcGxpYnNfY2hlY2tfbWV0aG9kOyBzaGlmdAotCSAgZmlsZV9tYWdpY19yZWdleD1gZXhwciAiJGRlcGxpYnNfY2hlY2tfbWV0aG9kIiA6ICIkMSBcKC4qXCkiYAotCSAgZm9yIGFfZGVwbGliIGluICRkZXBsaWJzOyBkbwotCSAgICBjYXNlICRhX2RlcGxpYiBpbgotCSAgICAtbCopCi0JICAgICAgZnVuY19zdHJpcG5hbWUgLWwgJycgIiRhX2RlcGxpYiIKLQkgICAgICBuYW1lPSRmdW5jX3N0cmlwbmFtZV9yZXN1bHQKLQkgICAgICBpZiB0ZXN0ICJYJGFsbG93X2xpYnRvb2xfbGlic193aXRoX3N0YXRpY19ydW50aW1lcyIgPSAiWHllcyIgOyB0aGVuCi0JCWNhc2UgIiAkcHJlZGVwcyAkcG9zdGRlcHMgIiBpbgotCQkqIiAkYV9kZXBsaWIgIiopCi0JCSAgZnVuY19hcHBlbmQgbmV3ZGVwbGlicyAiICRhX2RlcGxpYiIKLQkJICBhX2RlcGxpYj0iIgotCQkgIDs7Ci0JCWVzYWMKLQkgICAgICBmaQotCSAgICAgIGlmIHRlc3QgLW4gIiRhX2RlcGxpYiIgOyB0aGVuCi0JCWxpYm5hbWU9YGV2YWwgIlxcJEVDSE8gXCIkbGlibmFtZV9zcGVjXCIiYAotCQlpZiB0ZXN0IC1uICIkZmlsZV9tYWdpY19nbG9iIjsgdGhlbgotCQkgIGxpYm5hbWVnbG9iPWBmdW5jX2VjaG9fYWxsICIkbGlibmFtZSIgfCAkU0VEIC1lICRmaWxlX21hZ2ljX2dsb2JgCi0JCWVsc2UKLQkJICBsaWJuYW1lZ2xvYj0kbGlibmFtZQotCQlmaQotCQl0ZXN0ICIkd2FudF9ub2Nhc2VnbG9iIiA9IHllcyAmJiBub2Nhc2VnbG9iPWBzaG9wdCAtcCBub2Nhc2VnbG9iYAotCQlmb3IgaSBpbiAkbGliX3NlYXJjaF9wYXRoICRzeXNfbGliX3NlYXJjaF9wYXRoICRzaGxpYl9zZWFyY2hfcGF0aDsgZG8KLQkJICBpZiB0ZXN0ICIkd2FudF9ub2Nhc2VnbG9iIiA9IHllczsgdGhlbgotCQkgICAgc2hvcHQgLXMgbm9jYXNlZ2xvYgotCQkgICAgcG90ZW50aWFsX2xpYnM9YGxzICRpLyRsaWJuYW1lZ2xvYlsuLV0qIDI+L2Rldi9udWxsYAotCQkgICAgJG5vY2FzZWdsb2IKLQkJICBlbHNlCi0JCSAgICBwb3RlbnRpYWxfbGlicz1gbHMgJGkvJGxpYm5hbWVnbG9iWy4tXSogMj4vZGV2L251bGxgCi0JCSAgZmkKLQkJICBmb3IgcG90ZW50X2xpYiBpbiAkcG90ZW50aWFsX2xpYnM7IGRvCi0JCSAgICAgICMgRm9sbG93IHNvZnQgbGlua3MuCi0JCSAgICAgIGlmIGxzIC1sTGQgIiRwb3RlbnRfbGliIiAyPi9kZXYvbnVsbCB8Ci0JCQkgJEdSRVAgIiAtPiAiID4vZGV2L251bGw7IHRoZW4KLQkJCWNvbnRpbnVlCi0JCSAgICAgIGZpCi0JCSAgICAgICMgVGhlIHN0YXRlbWVudCBhYm92ZSB0cmllcyB0byBhdm9pZCBlbnRlcmluZyBhbgotCQkgICAgICAjIGVuZGxlc3MgbG9vcCBiZWxvdywgaW4gY2FzZSBvZiBjeWNsaWMgbGlua3MuCi0JCSAgICAgICMgV2UgbWlnaHQgc3RpbGwgZW50ZXIgYW4gZW5kbGVzcyBsb29wLCBzaW5jZSBhIGxpbmsKLQkJICAgICAgIyBsb29wIGNhbiBiZSBjbG9zZWQgd2hpbGUgd2UgZm9sbG93IGxpbmtzLAotCQkgICAgICAjIGJ1dCBzbyB3aGF0PwotCQkgICAgICBwb3RsaWI9IiRwb3RlbnRfbGliIgotCQkgICAgICB3aGlsZSB0ZXN0IC1oICIkcG90bGliIiAyPi9kZXYvbnVsbDsgZG8KLQkJCXBvdGxpYmxpbms9YGxzIC1sZCAkcG90bGliIHwgJHtTRUR9ICdzLy4qIC0+IC8vJ2AKLQkJCWNhc2UgJHBvdGxpYmxpbmsgaW4KLQkJCVtcXC9dKiB8IFtBLVphLXpdOltcXC9dKikgcG90bGliPSIkcG90bGlibGluayI7OwotCQkJKikgcG90bGliPWAkRUNITyAiJHBvdGxpYiIgfCAkU0VEICdzLFteL10qJCwsJ2AiJHBvdGxpYmxpbmsiOzsKLQkJCWVzYWMKLQkJICAgICAgZG9uZQotCQkgICAgICBpZiBldmFsICRmaWxlX21hZ2ljX2NtZCBcIlwkcG90bGliXCIgMj4vZGV2L251bGwgfAotCQkJICRTRUQgLWUgMTBxIHwKLQkJCSAkRUdSRVAgIiRmaWxlX21hZ2ljX3JlZ2V4IiA+IC9kZXYvbnVsbDsgdGhlbgotCQkJZnVuY19hcHBlbmQgbmV3ZGVwbGlicyAiICRhX2RlcGxpYiIKLQkJCWFfZGVwbGliPSIiCi0JCQlicmVhayAyCi0JCSAgICAgIGZpCi0JCSAgZG9uZQotCQlkb25lCi0JICAgICAgZmkKLQkgICAgICBpZiB0ZXN0IC1uICIkYV9kZXBsaWIiIDsgdGhlbgotCQlkcm9wcGVkZGVwcz15ZXMKLQkJZWNobwotCQkkRUNITyAiKioqIFdhcm5pbmc6IGxpbmtlciBwYXRoIGRvZXMgbm90IGhhdmUgcmVhbCBmaWxlIGZvciBsaWJyYXJ5ICRhX2RlcGxpYi4iCi0JCWVjaG8gIioqKiBJIGhhdmUgdGhlIGNhcGFiaWxpdHkgdG8gbWFrZSB0aGF0IGxpYnJhcnkgYXV0b21hdGljYWxseSBsaW5rIGluIHdoZW4iCi0JCWVjaG8gIioqKiB5b3UgbGluayB0byB0aGlzIGxpYnJhcnkuICBCdXQgSSBjYW4gb25seSBkbyB0aGlzIGlmIHlvdSBoYXZlIGEiCi0JCWVjaG8gIioqKiBzaGFyZWQgdmVyc2lvbiBvZiB0aGUgbGlicmFyeSwgd2hpY2ggeW91IGRvIG5vdCBhcHBlYXIgdG8gaGF2ZSIKLQkJZWNobyAiKioqIGJlY2F1c2UgSSBkaWQgY2hlY2sgdGhlIGxpbmtlciBwYXRoIGxvb2tpbmcgZm9yIGEgZmlsZSBzdGFydGluZyIKLQkJaWYgdGVzdCAteiAiJHBvdGxpYiIgOyB0aGVuCi0JCSAgJEVDSE8gIioqKiB3aXRoICRsaWJuYW1lIGJ1dCBubyBjYW5kaWRhdGVzIHdlcmUgZm91bmQuICguLi5mb3IgZmlsZSBtYWdpYyB0ZXN0KSIKLQkJZWxzZQotCQkgICRFQ0hPICIqKiogd2l0aCAkbGlibmFtZSBhbmQgbm9uZSBvZiB0aGUgY2FuZGlkYXRlcyBwYXNzZWQgYSBmaWxlIGZvcm1hdCB0ZXN0IgotCQkgICRFQ0hPICIqKiogdXNpbmcgYSBmaWxlIG1hZ2ljLiBMYXN0IGZpbGUgY2hlY2tlZDogJHBvdGxpYiIKLQkJZmkKLQkgICAgICBmaQotCSAgICAgIDs7Ci0JICAgICopCi0JICAgICAgIyBBZGQgYSAtTCBhcmd1bWVudC4KLQkgICAgICBmdW5jX2FwcGVuZCBuZXdkZXBsaWJzICIgJGFfZGVwbGliIgotCSAgICAgIDs7Ci0JICAgIGVzYWMKLQkgIGRvbmUgIyBHb25lIHRocm91Z2ggYWxsIGRlcGxpYnMuCi0JICA7OwotCW1hdGNoX3BhdHRlcm4qKQotCSAgc2V0IGR1bW15ICRkZXBsaWJzX2NoZWNrX21ldGhvZDsgc2hpZnQKLQkgIG1hdGNoX3BhdHRlcm5fcmVnZXg9YGV4cHIgIiRkZXBsaWJzX2NoZWNrX21ldGhvZCIgOiAiJDEgXCguKlwpImAKLQkgIGZvciBhX2RlcGxpYiBpbiAkZGVwbGliczsgZG8KLQkgICAgY2FzZSAkYV9kZXBsaWIgaW4KLQkgICAgLWwqKQotCSAgICAgIGZ1bmNfc3RyaXBuYW1lIC1sICcnICIkYV9kZXBsaWIiCi0JICAgICAgbmFtZT0kZnVuY19zdHJpcG5hbWVfcmVzdWx0Ci0JICAgICAgaWYgdGVzdCAiWCRhbGxvd19saWJ0b29sX2xpYnNfd2l0aF9zdGF0aWNfcnVudGltZXMiID0gIlh5ZXMiIDsgdGhlbgotCQljYXNlICIgJHByZWRlcHMgJHBvc3RkZXBzICIgaW4KLQkJKiIgJGFfZGVwbGliICIqKQotCQkgIGZ1bmNfYXBwZW5kIG5ld2RlcGxpYnMgIiAkYV9kZXBsaWIiCi0JCSAgYV9kZXBsaWI9IiIKLQkJICA7OwotCQllc2FjCi0JICAgICAgZmkKLQkgICAgICBpZiB0ZXN0IC1uICIkYV9kZXBsaWIiIDsgdGhlbgotCQlsaWJuYW1lPWBldmFsICJcXCRFQ0hPIFwiJGxpYm5hbWVfc3BlY1wiImAKLQkJZm9yIGkgaW4gJGxpYl9zZWFyY2hfcGF0aCAkc3lzX2xpYl9zZWFyY2hfcGF0aCAkc2hsaWJfc2VhcmNoX3BhdGg7IGRvCi0JCSAgcG90ZW50aWFsX2xpYnM9YGxzICRpLyRsaWJuYW1lWy4tXSogMj4vZGV2L251bGxgCi0JCSAgZm9yIHBvdGVudF9saWIgaW4gJHBvdGVudGlhbF9saWJzOyBkbwotCQkgICAgcG90bGliPSIkcG90ZW50X2xpYiIgIyBzZWUgc3ltbGluay1jaGVjayBhYm92ZSBpbiBmaWxlX21hZ2ljIHRlc3QKLQkJICAgIGlmIGV2YWwgIlwkRUNITyBcIiRwb3RlbnRfbGliXCIiIDI+L2Rldi9udWxsIHwgJFNFRCAxMHEgfCBcCi0JCSAgICAgICAkRUdSRVAgIiRtYXRjaF9wYXR0ZXJuX3JlZ2V4IiA+IC9kZXYvbnVsbDsgdGhlbgotCQkgICAgICBmdW5jX2FwcGVuZCBuZXdkZXBsaWJzICIgJGFfZGVwbGliIgotCQkgICAgICBhX2RlcGxpYj0iIgotCQkgICAgICBicmVhayAyCi0JCSAgICBmaQotCQkgIGRvbmUKLQkJZG9uZQotCSAgICAgIGZpCi0JICAgICAgaWYgdGVzdCAtbiAiJGFfZGVwbGliIiA7IHRoZW4KLQkJZHJvcHBlZGRlcHM9eWVzCi0JCWVjaG8KLQkJJEVDSE8gIioqKiBXYXJuaW5nOiBsaW5rZXIgcGF0aCBkb2VzIG5vdCBoYXZlIHJlYWwgZmlsZSBmb3IgbGlicmFyeSAkYV9kZXBsaWIuIgotCQllY2hvICIqKiogSSBoYXZlIHRoZSBjYXBhYmlsaXR5IHRvIG1ha2UgdGhhdCBsaWJyYXJ5IGF1dG9tYXRpY2FsbHkgbGluayBpbiB3aGVuIgotCQllY2hvICIqKiogeW91IGxpbmsgdG8gdGhpcyBsaWJyYXJ5LiAgQnV0IEkgY2FuIG9ubHkgZG8gdGhpcyBpZiB5b3UgaGF2ZSBhIgotCQllY2hvICIqKiogc2hhcmVkIHZlcnNpb24gb2YgdGhlIGxpYnJhcnksIHdoaWNoIHlvdSBkbyBub3QgYXBwZWFyIHRvIGhhdmUiCi0JCWVjaG8gIioqKiBiZWNhdXNlIEkgZGlkIGNoZWNrIHRoZSBsaW5rZXIgcGF0aCBsb29raW5nIGZvciBhIGZpbGUgc3RhcnRpbmciCi0JCWlmIHRlc3QgLXogIiRwb3RsaWIiIDsgdGhlbgotCQkgICRFQ0hPICIqKiogd2l0aCAkbGlibmFtZSBidXQgbm8gY2FuZGlkYXRlcyB3ZXJlIGZvdW5kLiAoLi4uZm9yIHJlZ2V4IHBhdHRlcm4gdGVzdCkiCi0JCWVsc2UKLQkJICAkRUNITyAiKioqIHdpdGggJGxpYm5hbWUgYW5kIG5vbmUgb2YgdGhlIGNhbmRpZGF0ZXMgcGFzc2VkIGEgZmlsZSBmb3JtYXQgdGVzdCIKLQkJICAkRUNITyAiKioqIHVzaW5nIGEgcmVnZXggcGF0dGVybi4gTGFzdCBmaWxlIGNoZWNrZWQ6ICRwb3RsaWIiCi0JCWZpCi0JICAgICAgZmkKLQkgICAgICA7OwotCSAgICAqKQotCSAgICAgICMgQWRkIGEgLUwgYXJndW1lbnQuCi0JICAgICAgZnVuY19hcHBlbmQgbmV3ZGVwbGlicyAiICRhX2RlcGxpYiIKLQkgICAgICA7OwotCSAgICBlc2FjCi0JICBkb25lICMgR29uZSB0aHJvdWdoIGFsbCBkZXBsaWJzLgotCSAgOzsKLQlub25lIHwgdW5rbm93biB8ICopCi0JICBuZXdkZXBsaWJzPSIiCi0JICB0bXBfZGVwbGlicz1gJEVDSE8gIiAkZGVwbGlicyIgfCAkU0VEICdzLyAtbGMkLy87IHMvIC1bTFJdW14gXSovL2cnYAotCSAgaWYgdGVzdCAiWCRhbGxvd19saWJ0b29sX2xpYnNfd2l0aF9zdGF0aWNfcnVudGltZXMiID0gIlh5ZXMiIDsgdGhlbgotCSAgICBmb3IgaSBpbiAkcHJlZGVwcyAkcG9zdGRlcHMgOyBkbwotCSAgICAgICMgY2FuJ3QgdXNlIFhzZWQgYmVsb3csIGJlY2F1c2UgJGkgbWlnaHQgY29udGFpbiAnLycKLQkgICAgICB0bXBfZGVwbGlicz1gJEVDSE8gIiAkdG1wX2RlcGxpYnMiIHwgJFNFRCAicywkaSwsImAKLQkgICAgZG9uZQotCSAgZmkKLQkgIGNhc2UgJHRtcF9kZXBsaWJzIGluCi0JICAqWyFcCVwgXSopCi0JICAgIGVjaG8KLQkgICAgaWYgdGVzdCAiWCRkZXBsaWJzX2NoZWNrX21ldGhvZCIgPSAiWG5vbmUiOyB0aGVuCi0JICAgICAgZWNobyAiKioqIFdhcm5pbmc6IGludGVyLWxpYnJhcnkgZGVwZW5kZW5jaWVzIGFyZSBub3Qgc3VwcG9ydGVkIGluIHRoaXMgcGxhdGZvcm0uIgotCSAgICBlbHNlCi0JICAgICAgZWNobyAiKioqIFdhcm5pbmc6IGludGVyLWxpYnJhcnkgZGVwZW5kZW5jaWVzIGFyZSBub3Qga25vd24gdG8gYmUgc3VwcG9ydGVkLiIKLQkgICAgZmkKLQkgICAgZWNobyAiKioqIEFsbCBkZWNsYXJlZCBpbnRlci1saWJyYXJ5IGRlcGVuZGVuY2llcyBhcmUgYmVpbmcgZHJvcHBlZC4iCi0JICAgIGRyb3BwZWRkZXBzPXllcwotCSAgICA7OwotCSAgZXNhYwotCSAgOzsKLQllc2FjCi0JdmVyc3VmZml4PSR2ZXJzdWZmaXhfc2F2ZQotCW1ham9yPSRtYWpvcl9zYXZlCi0JcmVsZWFzZT0kcmVsZWFzZV9zYXZlCi0JbGlibmFtZT0kbGlibmFtZV9zYXZlCi0JbmFtZT0kbmFtZV9zYXZlCi0KLQljYXNlICRob3N0IGluCi0JKi0qLXJoYXBzb2R5KiB8ICotKi1kYXJ3aW4xLlswMTJdKQotCSAgIyBPbiBSaGFwc29keSByZXBsYWNlIHRoZSBDIGxpYnJhcnkgd2l0aCB0aGUgU3lzdGVtIGZyYW1ld29yawotCSAgbmV3ZGVwbGlicz1gJEVDSE8gIiAkbmV3ZGVwbGlicyIgfCAkU0VEICdzLyAtbGMgLyBTeXN0ZW0ubHRmcmFtZXdvcmsgLydgCi0JICA7OwotCWVzYWMKLQotCWlmIHRlc3QgIiRkcm9wcGVkZGVwcyIgPSB5ZXM7IHRoZW4KLQkgIGlmIHRlc3QgIiRtb2R1bGUiID0geWVzOyB0aGVuCi0JICAgIGVjaG8KLQkgICAgZWNobyAiKioqIFdhcm5pbmc6IGxpYnRvb2wgY291bGQgbm90IHNhdGlzZnkgYWxsIGRlY2xhcmVkIGludGVyLWxpYnJhcnkiCi0JICAgICRFQ0hPICIqKiogZGVwZW5kZW5jaWVzIG9mIG1vZHVsZSAkbGlibmFtZS4gIFRoZXJlZm9yZSwgbGlidG9vbCB3aWxsIGNyZWF0ZSIKLQkgICAgZWNobyAiKioqIGEgc3RhdGljIG1vZHVsZSwgdGhhdCBzaG91bGQgd29yayBhcyBsb25nIGFzIHRoZSBkbG9wZW5pbmciCi0JICAgIGVjaG8gIioqKiBhcHBsaWNhdGlvbiBpcyBsaW5rZWQgd2l0aCB0aGUgLWRsb3BlbiBmbGFnLiIKLQkgICAgaWYgdGVzdCAteiAiJGdsb2JhbF9zeW1ib2xfcGlwZSI7IHRoZW4KLQkgICAgICBlY2hvCi0JICAgICAgZWNobyAiKioqIEhvd2V2ZXIsIHRoaXMgd291bGQgb25seSB3b3JrIGlmIGxpYnRvb2wgd2FzIGFibGUgdG8gZXh0cmFjdCBzeW1ib2wiCi0JICAgICAgZWNobyAiKioqIGxpc3RzIGZyb20gYSBwcm9ncmFtLCB1c2luZyBcYG5tJyBvciBlcXVpdmFsZW50LCBidXQgbGlidG9vbCBjb3VsZCIKLQkgICAgICBlY2hvICIqKiogbm90IGZpbmQgc3VjaCBhIHByb2dyYW0uICBTbywgdGhpcyBtb2R1bGUgaXMgcHJvYmFibHkgdXNlbGVzcy4iCi0JICAgICAgZWNobyAiKioqIFxgbm0nIGZyb20gR05VIGJpbnV0aWxzIGFuZCBhIGZ1bGwgcmVidWlsZCBtYXkgaGVscC4iCi0JICAgIGZpCi0JICAgIGlmIHRlc3QgIiRidWlsZF9vbGRfbGlicyIgPSBubzsgdGhlbgotCSAgICAgIG9sZGxpYnM9IiRvdXRwdXRfb2JqZGlyLyRsaWJuYW1lLiRsaWJleHQiCi0JICAgICAgYnVpbGRfbGlidG9vbF9saWJzPW1vZHVsZQotCSAgICAgIGJ1aWxkX29sZF9saWJzPXllcwotCSAgICBlbHNlCi0JICAgICAgYnVpbGRfbGlidG9vbF9saWJzPW5vCi0JICAgIGZpCi0JICBlbHNlCi0JICAgIGVjaG8gIioqKiBUaGUgaW50ZXItbGlicmFyeSBkZXBlbmRlbmNpZXMgdGhhdCBoYXZlIGJlZW4gZHJvcHBlZCBoZXJlIHdpbGwgYmUiCi0JICAgIGVjaG8gIioqKiBhdXRvbWF0aWNhbGx5IGFkZGVkIHdoZW5ldmVyIGEgcHJvZ3JhbSBpcyBsaW5rZWQgd2l0aCB0aGlzIGxpYnJhcnkiCi0JICAgIGVjaG8gIioqKiBvciBpcyBkZWNsYXJlZCB0byAtZGxvcGVuIGl0LiIKLQotCSAgICBpZiB0ZXN0ICIkYWxsb3dfdW5kZWZpbmVkIiA9IG5vOyB0aGVuCi0JICAgICAgZWNobwotCSAgICAgIGVjaG8gIioqKiBTaW5jZSB0aGlzIGxpYnJhcnkgbXVzdCBub3QgY29udGFpbiB1bmRlZmluZWQgc3ltYm9scywiCi0JICAgICAgZWNobyAiKioqIGJlY2F1c2UgZWl0aGVyIHRoZSBwbGF0Zm9ybSBkb2VzIG5vdCBzdXBwb3J0IHRoZW0gb3IiCi0JICAgICAgZWNobyAiKioqIGl0IHdhcyBleHBsaWNpdGx5IHJlcXVlc3RlZCB3aXRoIC1uby11bmRlZmluZWQsIgotCSAgICAgIGVjaG8gIioqKiBsaWJ0b29sIHdpbGwgb25seSBjcmVhdGUgYSBzdGF0aWMgdmVyc2lvbiBvZiBpdC4iCi0JICAgICAgaWYgdGVzdCAiJGJ1aWxkX29sZF9saWJzIiA9IG5vOyB0aGVuCi0JCW9sZGxpYnM9IiRvdXRwdXRfb2JqZGlyLyRsaWJuYW1lLiRsaWJleHQiCi0JCWJ1aWxkX2xpYnRvb2xfbGlicz1tb2R1bGUKLQkJYnVpbGRfb2xkX2xpYnM9eWVzCi0JICAgICAgZWxzZQotCQlidWlsZF9saWJ0b29sX2xpYnM9bm8KLQkgICAgICBmaQotCSAgICBmaQotCSAgZmkKLQlmaQotCSMgRG9uZSBjaGVja2luZyBkZXBsaWJzIQotCWRlcGxpYnM9JG5ld2RlcGxpYnMKLSAgICAgIGZpCi0gICAgICAjIFRpbWUgdG8gY2hhbmdlIGFsbCBvdXIgImZvby5sdGZyYW1ld29yayIgc3R1ZmYgYmFjayB0byAiLWZyYW1ld29yayBmb28iCi0gICAgICBjYXNlICRob3N0IGluCi0JKi0qLWRhcndpbiopCi0JICBuZXdkZXBsaWJzPWAkRUNITyAiICRuZXdkZXBsaWJzIiB8ICRTRUQgJ3MlIFwoW14gJF0qXCkubHRmcmFtZXdvcmslIC1mcmFtZXdvcmsgXDElZydgCi0JICBuZXdfaW5oZXJpdGVkX2xpbmtlcl9mbGFncz1gJEVDSE8gIiAkbmV3X2luaGVyaXRlZF9saW5rZXJfZmxhZ3MiIHwgJFNFRCAncyUgXChbXiAkXSpcKS5sdGZyYW1ld29yayUgLWZyYW1ld29yayBcMSVnJ2AKLQkgIGRlcGxpYnM9YCRFQ0hPICIgJGRlcGxpYnMiIHwgJFNFRCAncyUgXChbXiAkXSpcKS5sdGZyYW1ld29yayUgLWZyYW1ld29yayBcMSVnJ2AKLQkgIDs7Ci0gICAgICBlc2FjCi0KLSAgICAgICMgbW92ZSBsaWJyYXJ5IHNlYXJjaCBwYXRocyB0aGF0IGNvaW5jaWRlIHdpdGggcGF0aHMgdG8gbm90IHlldAotICAgICAgIyBpbnN0YWxsZWQgbGlicmFyaWVzIHRvIHRoZSBiZWdpbm5pbmcgb2YgdGhlIGxpYnJhcnkgc2VhcmNoIGxpc3QKLSAgICAgIG5ld19saWJzPQotICAgICAgZm9yIHBhdGggaW4gJG5vdGluc3RfcGF0aDsgZG8KLQljYXNlICIgJG5ld19saWJzICIgaW4KLQkqIiAtTCRwYXRoLyRvYmpkaXIgIiopIDs7Ci0JKikKLQkgIGNhc2UgIiAkZGVwbGlicyAiIGluCi0JICAqIiAtTCRwYXRoLyRvYmpkaXIgIiopCi0JICAgIGZ1bmNfYXBwZW5kIG5ld19saWJzICIgLUwkcGF0aC8kb2JqZGlyIiA7OwotCSAgZXNhYwotCSAgOzsKLQllc2FjCi0gICAgICBkb25lCi0gICAgICBmb3IgZGVwbGliIGluICRkZXBsaWJzOyBkbwotCWNhc2UgJGRlcGxpYiBpbgotCS1MKikKLQkgIGNhc2UgIiAkbmV3X2xpYnMgIiBpbgotCSAgKiIgJGRlcGxpYiAiKikgOzsKLQkgICopIGZ1bmNfYXBwZW5kIG5ld19saWJzICIgJGRlcGxpYiIgOzsKLQkgIGVzYWMKLQkgIDs7Ci0JKikgZnVuY19hcHBlbmQgbmV3X2xpYnMgIiAkZGVwbGliIiA7OwotCWVzYWMKLSAgICAgIGRvbmUKLSAgICAgIGRlcGxpYnM9IiRuZXdfbGlicyIKLQotICAgICAgIyBBbGwgdGhlIGxpYnJhcnktc3BlY2lmaWMgdmFyaWFibGVzIChpbnN0YWxsX2xpYmRpciBpcyBzZXQgYWJvdmUpLgotICAgICAgbGlicmFyeV9uYW1lcz0KLSAgICAgIG9sZF9saWJyYXJ5PQotICAgICAgZGxuYW1lPQotCi0gICAgICAjIFRlc3QgYWdhaW4sIHdlIG1heSBoYXZlIGRlY2lkZWQgbm90IHRvIGJ1aWxkIGl0IGFueSBtb3JlCi0gICAgICBpZiB0ZXN0ICIkYnVpbGRfbGlidG9vbF9saWJzIiA9IHllczsgdGhlbgotCWlmIHRlc3QgIiRoYXJkY29kZV9pbnRvX2xpYnMiID0geWVzOyB0aGVuCi0JICAjIEhhcmRjb2RlIHRoZSBsaWJyYXJ5IHBhdGhzCi0JICBoYXJkY29kZV9saWJkaXJzPQotCSAgZGVwX3JwYXRoPQotCSAgcnBhdGg9IiRmaW5hbGl6ZV9ycGF0aCIKLQkgIHRlc3QgIiRvcHRfbW9kZSIgIT0gcmVsaW5rICYmIHJwYXRoPSIkY29tcGlsZV9ycGF0aCRycGF0aCIKLQkgIGZvciBsaWJkaXIgaW4gJHJwYXRoOyBkbwotCSAgICBpZiB0ZXN0IC1uICIkaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYyI7IHRoZW4KLQkgICAgICBpZiB0ZXN0IC1uICIkaGFyZGNvZGVfbGliZGlyX3NlcGFyYXRvciI7IHRoZW4KLQkJZnVuY19yZXBsYWNlX3N5c3Jvb3QgIiRsaWJkaXIiCi0JCWxpYmRpcj0kZnVuY19yZXBsYWNlX3N5c3Jvb3RfcmVzdWx0Ci0JCWlmIHRlc3QgLXogIiRoYXJkY29kZV9saWJkaXJzIjsgdGhlbgotCQkgIGhhcmRjb2RlX2xpYmRpcnM9IiRsaWJkaXIiCi0JCWVsc2UKLQkJICAjIEp1c3QgYWNjdW11bGF0ZSB0aGUgdW5pcXVlIGxpYmRpcnMuCi0JCSAgY2FzZSAkaGFyZGNvZGVfbGliZGlyX3NlcGFyYXRvciRoYXJkY29kZV9saWJkaXJzJGhhcmRjb2RlX2xpYmRpcl9zZXBhcmF0b3IgaW4KLQkJICAqIiRoYXJkY29kZV9saWJkaXJfc2VwYXJhdG9yJGxpYmRpciRoYXJkY29kZV9saWJkaXJfc2VwYXJhdG9yIiopCi0JCSAgICA7OwotCQkgICopCi0JCSAgICBmdW5jX2FwcGVuZCBoYXJkY29kZV9saWJkaXJzICIkaGFyZGNvZGVfbGliZGlyX3NlcGFyYXRvciRsaWJkaXIiCi0JCSAgICA7OwotCQkgIGVzYWMKLQkJZmkKLQkgICAgICBlbHNlCi0JCWV2YWwgZmxhZz1cIiRoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjXCIKLQkJZnVuY19hcHBlbmQgZGVwX3JwYXRoICIgJGZsYWciCi0JICAgICAgZmkKLQkgICAgZWxpZiB0ZXN0IC1uICIkcnVucGF0aF92YXIiOyB0aGVuCi0JICAgICAgY2FzZSAiJHBlcm1fcnBhdGggIiBpbgotCSAgICAgICoiICRsaWJkaXIgIiopIDs7Ci0JICAgICAgKikgZnVuY19hcHBlZCBwZXJtX3JwYXRoICIgJGxpYmRpciIgOzsKLQkgICAgICBlc2FjCi0JICAgIGZpCi0JICBkb25lCi0JICAjIFN1YnN0aXR1dGUgdGhlIGhhcmRjb2RlZCBsaWJkaXJzIGludG8gdGhlIHJwYXRoLgotCSAgaWYgdGVzdCAtbiAiJGhhcmRjb2RlX2xpYmRpcl9zZXBhcmF0b3IiICYmCi0JICAgICB0ZXN0IC1uICIkaGFyZGNvZGVfbGliZGlycyI7IHRoZW4KLQkgICAgbGliZGlyPSIkaGFyZGNvZGVfbGliZGlycyIKLQkgICAgaWYgdGVzdCAtbiAiJGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWNfbGQiOyB0aGVuCi0JICAgICAgZXZhbCBkZXBfcnBhdGg9XCIkaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlY19sZFwiCi0JICAgIGVsc2UKLQkgICAgICBldmFsIGRlcF9ycGF0aD1cIiRoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjXCIKLQkgICAgZmkKLQkgIGZpCi0JICBpZiB0ZXN0IC1uICIkcnVucGF0aF92YXIiICYmIHRlc3QgLW4gIiRwZXJtX3JwYXRoIjsgdGhlbgotCSAgICAjIFdlIHNob3VsZCBzZXQgdGhlIHJ1bnBhdGhfdmFyLgotCSAgICBycGF0aD0KLQkgICAgZm9yIGRpciBpbiAkcGVybV9ycGF0aDsgZG8KLQkgICAgICBmdW5jX2FwcGVuZCBycGF0aCAiJGRpcjoiCi0JICAgIGRvbmUKLQkgICAgZXZhbCAiJHJ1bnBhdGhfdmFyPSckcnBhdGhcJCRydW5wYXRoX3Zhcic7IGV4cG9ydCAkcnVucGF0aF92YXIiCi0JICBmaQotCSAgdGVzdCAtbiAiJGRlcF9ycGF0aCIgJiYgZGVwbGlicz0iJGRlcF9ycGF0aCAkZGVwbGlicyIKLQlmaQotCi0Jc2hsaWJwYXRoPSIkZmluYWxpemVfc2hsaWJwYXRoIgotCXRlc3QgIiRvcHRfbW9kZSIgIT0gcmVsaW5rICYmIHNobGlicGF0aD0iJGNvbXBpbGVfc2hsaWJwYXRoJHNobGlicGF0aCIKLQlpZiB0ZXN0IC1uICIkc2hsaWJwYXRoIjsgdGhlbgotCSAgZXZhbCAiJHNobGlicGF0aF92YXI9JyRzaGxpYnBhdGhcJCRzaGxpYnBhdGhfdmFyJzsgZXhwb3J0ICRzaGxpYnBhdGhfdmFyIgotCWZpCi0KLQkjIEdldCB0aGUgcmVhbCBhbmQgbGluayBuYW1lcyBvZiB0aGUgbGlicmFyeS4KLQlldmFsIHNoYXJlZF9leHQ9XCIkc2hyZXh0X2NtZHNcIgotCWV2YWwgbGlicmFyeV9uYW1lcz1cIiRsaWJyYXJ5X25hbWVzX3NwZWNcIgotCXNldCBkdW1teSAkbGlicmFyeV9uYW1lcwotCXNoaWZ0Ci0JcmVhbG5hbWU9IiQxIgotCXNoaWZ0Ci0KLQlpZiB0ZXN0IC1uICIkc29uYW1lX3NwZWMiOyB0aGVuCi0JICBldmFsIHNvbmFtZT1cIiRzb25hbWVfc3BlY1wiCi0JZWxzZQotCSAgc29uYW1lPSIkcmVhbG5hbWUiCi0JZmkKLQlpZiB0ZXN0IC16ICIkZGxuYW1lIjsgdGhlbgotCSAgZGxuYW1lPSRzb25hbWUKLQlmaQotCi0JbGliPSIkb3V0cHV0X29iamRpci8kcmVhbG5hbWUiCi0JbGlua25hbWVzPQotCWZvciBsaW5rCi0JZG8KLQkgIGZ1bmNfYXBwZW5kIGxpbmtuYW1lcyAiICRsaW5rIgotCWRvbmUKLQotCSMgVXNlIHN0YW5kYXJkIG9iamVjdHMgaWYgdGhleSBhcmUgcGljCi0JdGVzdCAteiAiJHBpY19mbGFnIiAmJiBsaWJvYmpzPWAkRUNITyAiJGxpYm9ianMiIHwgJFNQMk5MIHwgJFNFRCAiJGxvMm8iIHwgJE5MMlNQYAotCXRlc3QgIlgkbGlib2JqcyIgPSAiWCAiICYmIGxpYm9ianM9Ci0KLQlkZWxmaWxlcz0KLQlpZiB0ZXN0IC1uICIkZXhwb3J0X3N5bWJvbHMiICYmIHRlc3QgLW4gIiRpbmNsdWRlX2V4cHN5bXMiOyB0aGVuCi0JICAkb3B0X2RyeV9ydW4gfHwgY3AgIiRleHBvcnRfc3ltYm9scyIgIiRvdXRwdXRfb2JqZGlyLyRsaWJuYW1lLnVleHAiCi0JICBleHBvcnRfc3ltYm9scz0iJG91dHB1dF9vYmpkaXIvJGxpYm5hbWUudWV4cCIKLQkgIGZ1bmNfYXBwZW5kIGRlbGZpbGVzICIgJGV4cG9ydF9zeW1ib2xzIgotCWZpCi0KLQlvcmlnX2V4cG9ydF9zeW1ib2xzPQotCWNhc2UgJGhvc3Rfb3MgaW4KLQljeWd3aW4qIHwgbWluZ3cqIHwgY2VnY2MqKQotCSAgaWYgdGVzdCAtbiAiJGV4cG9ydF9zeW1ib2xzIiAmJiB0ZXN0IC16ICIkZXhwb3J0X3N5bWJvbHNfcmVnZXgiOyB0aGVuCi0JICAgICMgZXhwb3J0aW5nIHVzaW5nIHVzZXIgc3VwcGxpZWQgc3ltZmlsZQotCSAgICBpZiB0ZXN0ICJ4YCRTRUQgMXEgJGV4cG9ydF9zeW1ib2xzYCIgIT0geEVYUE9SVFM7IHRoZW4KLQkgICAgICAjIGFuZCBpdCdzIE5PVCBhbHJlYWR5IGEgLmRlZiBmaWxlLiBNdXN0IGZpZ3VyZSBvdXQKLQkgICAgICAjIHdoaWNoIG9mIHRoZSBnaXZlbiBzeW1ib2xzIGFyZSBkYXRhIHN5bWJvbHMgYW5kIHRhZwotCSAgICAgICMgdGhlbSBhcyBzdWNoLiBTbywgdHJpZ2dlciB1c2Ugb2YgZXhwb3J0X3N5bWJvbHNfY21kcy4KLQkgICAgICAjIGV4cG9ydF9zeW1ib2xzIGdldHMgcmVhc3NpZ25lZCBpbnNpZGUgdGhlICJwcmVwYXJlCi0JICAgICAgIyB0aGUgbGlzdCBvZiBleHBvcnRlZCBzeW1ib2xzIiBpZiBzdGF0ZW1lbnQsIHNvIHRoZQotCSAgICAgICMgaW5jbHVkZV9leHBzeW1zIGxvZ2ljIHN0aWxsIHdvcmtzLgotCSAgICAgIG9yaWdfZXhwb3J0X3N5bWJvbHM9IiRleHBvcnRfc3ltYm9scyIKLQkgICAgICBleHBvcnRfc3ltYm9scz0KLQkgICAgICBhbHdheXNfZXhwb3J0X3N5bWJvbHM9eWVzCi0JICAgIGZpCi0JICBmaQotCSAgOzsKLQllc2FjCi0KLQkjIFByZXBhcmUgdGhlIGxpc3Qgb2YgZXhwb3J0ZWQgc3ltYm9scwotCWlmIHRlc3QgLXogIiRleHBvcnRfc3ltYm9scyI7IHRoZW4KLQkgIGlmIHRlc3QgIiRhbHdheXNfZXhwb3J0X3N5bWJvbHMiID0geWVzIHx8IHRlc3QgLW4gIiRleHBvcnRfc3ltYm9sc19yZWdleCI7IHRoZW4KLQkgICAgZnVuY192ZXJib3NlICJnZW5lcmF0aW5nIHN5bWJvbCBsaXN0IGZvciBcYCRsaWJuYW1lLmxhJyIKLQkgICAgZXhwb3J0X3N5bWJvbHM9IiRvdXRwdXRfb2JqZGlyLyRsaWJuYW1lLmV4cCIKLQkgICAgJG9wdF9kcnlfcnVuIHx8ICRSTSAkZXhwb3J0X3N5bWJvbHMKLQkgICAgY21kcz0kZXhwb3J0X3N5bWJvbHNfY21kcwotCSAgICBzYXZlX2lmcz0iJElGUyI7IElGUz0nficKLQkgICAgZm9yIGNtZDEgaW4gJGNtZHM7IGRvCi0JICAgICAgSUZTPSIkc2F2ZV9pZnMiCi0JICAgICAgIyBUYWtlIHRoZSBub3JtYWwgYnJhbmNoIGlmIHRoZSBubV9maWxlX2xpc3Rfc3BlYyBicmFuY2gKLQkgICAgICAjIGRvZXNuJ3Qgd29yayBvciBpZiB0b29sIGNvbnZlcnNpb24gaXMgbm90IG5lZWRlZC4KLQkgICAgICBjYXNlICRubV9maWxlX2xpc3Rfc3BlY34kdG9fdG9vbF9maWxlX2NtZCBpbgotCQkqfmZ1bmNfY29udmVydF9maWxlX25vb3AgfCAqfmZ1bmNfY29udmVydF9maWxlX21zeXNfdG9fdzMyIHwgfiopCi0JCSAgdHJ5X25vcm1hbF9icmFuY2g9eWVzCi0JCSAgZXZhbCBjbWQ9XCIkY21kMVwiCi0JCSAgZnVuY19sZW4gIiAkY21kIgotCQkgIGxlbj0kZnVuY19sZW5fcmVzdWx0Ci0JCSAgOzsKLQkJKikKLQkJICB0cnlfbm9ybWFsX2JyYW5jaD1ubwotCQkgIDs7Ci0JICAgICAgZXNhYwotCSAgICAgIGlmIHRlc3QgIiR0cnlfbm9ybWFsX2JyYW5jaCIgPSB5ZXMgXAotCQkgJiYgeyB0ZXN0ICIkbGVuIiAtbHQgIiRtYXhfY21kX2xlbiIgXAotCQkgICAgICB8fCB0ZXN0ICIkbWF4X2NtZF9sZW4iIC1sZSAtMTsgfQotCSAgICAgIHRoZW4KLQkJZnVuY19zaG93X2V2YWwgIiRjbWQiICdleGl0ICQ/JwotCQlza2lwcGVkX2V4cG9ydD1mYWxzZQotCSAgICAgIGVsaWYgdGVzdCAtbiAiJG5tX2ZpbGVfbGlzdF9zcGVjIjsgdGhlbgotCQlmdW5jX2Jhc2VuYW1lICIkb3V0cHV0IgotCQlvdXRwdXRfbGE9JGZ1bmNfYmFzZW5hbWVfcmVzdWx0Ci0JCXNhdmVfbGlib2Jqcz0kbGlib2JqcwotCQlzYXZlX291dHB1dD0kb3V0cHV0Ci0JCW91dHB1dD0ke291dHB1dF9vYmpkaXJ9LyR7b3V0cHV0X2xhfS5ubQotCQlmdW5jX3RvX3Rvb2xfZmlsZSAiJG91dHB1dCIKLQkJbGlib2Jqcz0kbm1fZmlsZV9saXN0X3NwZWMkZnVuY190b190b29sX2ZpbGVfcmVzdWx0Ci0JCWZ1bmNfYXBwZW5kIGRlbGZpbGVzICIgJG91dHB1dCIKLQkJZnVuY192ZXJib3NlICJjcmVhdGluZyAkTk0gaW5wdXQgZmlsZSBsaXN0OiAkb3V0cHV0IgotCQlmb3Igb2JqIGluICRzYXZlX2xpYm9ianM7IGRvCi0JCSAgZnVuY190b190b29sX2ZpbGUgIiRvYmoiCi0JCSAgJEVDSE8gIiRmdW5jX3RvX3Rvb2xfZmlsZV9yZXN1bHQiCi0JCWRvbmUgPiAiJG91dHB1dCIKLQkJZXZhbCBjbWQ9XCIkY21kMVwiCi0JCWZ1bmNfc2hvd19ldmFsICIkY21kIiAnZXhpdCAkPycKLQkJb3V0cHV0PSRzYXZlX291dHB1dAotCQlsaWJvYmpzPSRzYXZlX2xpYm9ianMKLQkJc2tpcHBlZF9leHBvcnQ9ZmFsc2UKLQkgICAgICBlbHNlCi0JCSMgVGhlIGNvbW1hbmQgbGluZSBpcyB0b28gbG9uZyB0byBleGVjdXRlIGluIG9uZSBzdGVwLgotCQlmdW5jX3ZlcmJvc2UgInVzaW5nIHJlbG9hZGFibGUgb2JqZWN0IGZpbGUgZm9yIGV4cG9ydCBsaXN0Li4uIgotCQlza2lwcGVkX2V4cG9ydD06Ci0JCSMgQnJlYWsgb3V0IGVhcmx5LCBvdGhlcndpc2Ugc2tpcHBlZF9leHBvcnQgbWF5IGJlCi0JCSMgc2V0IHRvIGZhbHNlIGJ5IGEgbGF0ZXIgYnV0IHNob3J0ZXIgY21kLgotCQlicmVhawotCSAgICAgIGZpCi0JICAgIGRvbmUKLQkgICAgSUZTPSIkc2F2ZV9pZnMiCi0JICAgIGlmIHRlc3QgLW4gIiRleHBvcnRfc3ltYm9sc19yZWdleCIgJiYgdGVzdCAiWCRza2lwcGVkX2V4cG9ydCIgIT0gIlg6IjsgdGhlbgotCSAgICAgIGZ1bmNfc2hvd19ldmFsICckRUdSRVAgLWUgIiRleHBvcnRfc3ltYm9sc19yZWdleCIgIiRleHBvcnRfc3ltYm9scyIgPiAiJHtleHBvcnRfc3ltYm9sc31UIicKLQkgICAgICBmdW5jX3Nob3dfZXZhbCAnJE1WICIke2V4cG9ydF9zeW1ib2xzfVQiICIkZXhwb3J0X3N5bWJvbHMiJwotCSAgICBmaQotCSAgZmkKLQlmaQotCi0JaWYgdGVzdCAtbiAiJGV4cG9ydF9zeW1ib2xzIiAmJiB0ZXN0IC1uICIkaW5jbHVkZV9leHBzeW1zIjsgdGhlbgotCSAgdG1wX2V4cG9ydF9zeW1ib2xzPSIkZXhwb3J0X3N5bWJvbHMiCi0JICB0ZXN0IC1uICIkb3JpZ19leHBvcnRfc3ltYm9scyIgJiYgdG1wX2V4cG9ydF9zeW1ib2xzPSIkb3JpZ19leHBvcnRfc3ltYm9scyIKLQkgICRvcHRfZHJ5X3J1biB8fCBldmFsICckRUNITyAiJGluY2x1ZGVfZXhwc3ltcyIgfCAkU1AyTkwgPj4gIiR0bXBfZXhwb3J0X3N5bWJvbHMiJwotCWZpCi0KLQlpZiB0ZXN0ICJYJHNraXBwZWRfZXhwb3J0IiAhPSAiWDoiICYmIHRlc3QgLW4gIiRvcmlnX2V4cG9ydF9zeW1ib2xzIjsgdGhlbgotCSAgIyBUaGUgZ2l2ZW4gZXhwb3J0c19zeW1ib2xzIGZpbGUgaGFzIHRvIGJlIGZpbHRlcmVkLCBzbyBmaWx0ZXIgaXQuCi0JICBmdW5jX3ZlcmJvc2UgImZpbHRlciBzeW1ib2wgbGlzdCBmb3IgXGAkbGlibmFtZS5sYScgdG8gdGFnIERBVEEgZXhwb3J0cyIKLQkgICMgRklYTUU6ICRvdXRwdXRfb2JqZGlyLyRsaWJuYW1lLmZpbHRlciBwb3RlbnRpYWxseSBjb250YWlucyBsb3RzIG9mCi0JICAjICdzJyBjb21tYW5kcyB3aGljaCBub3QgYWxsIHNlZHMgY2FuIGhhbmRsZS4gR05VIHNlZCBzaG91bGQgYmUgZmluZQotCSAgIyB0aG91Z2guIEFsc28sIHRoZSBmaWx0ZXIgc2NhbGVzIHN1cGVybGluZWFybHkgd2l0aCB0aGUgbnVtYmVyIG9mCi0JICAjIGdsb2JhbCB2YXJpYWJsZXMuIGpvaW4oMSkgd291bGQgYmUgbmljZSBoZXJlLCBidXQgdW5mb3J0dW5hdGVseQotCSAgIyBpc24ndCBhIGJsZXNzZWQgdG9vbC4KLQkgICRvcHRfZHJ5X3J1biB8fCAkU0VEIC1lICcvWyAsXURBVEEvIWQ7cyxcKC4qXClcKFsgXCxdLipcKSxzfF5cMSR8XDFcMnwsJyA8ICRleHBvcnRfc3ltYm9scyA+ICRvdXRwdXRfb2JqZGlyLyRsaWJuYW1lLmZpbHRlcgotCSAgZnVuY19hcHBlbmQgZGVsZmlsZXMgIiAkZXhwb3J0X3N5bWJvbHMgJG91dHB1dF9vYmpkaXIvJGxpYm5hbWUuZmlsdGVyIgotCSAgZXhwb3J0X3N5bWJvbHM9JG91dHB1dF9vYmpkaXIvJGxpYm5hbWUuZGVmCi0JICAkb3B0X2RyeV9ydW4gfHwgJFNFRCAtZiAkb3V0cHV0X29iamRpci8kbGlibmFtZS5maWx0ZXIgPCAkb3JpZ19leHBvcnRfc3ltYm9scyA+ICRleHBvcnRfc3ltYm9scwotCWZpCi0KLQl0bXBfZGVwbGlicz0KLQlmb3IgdGVzdF9kZXBsaWIgaW4gJGRlcGxpYnM7IGRvCi0JICBjYXNlICIgJGNvbnZlbmllbmNlICIgaW4KLQkgICoiICR0ZXN0X2RlcGxpYiAiKikgOzsKLQkgICopCi0JICAgIGZ1bmNfYXBwZW5kIHRtcF9kZXBsaWJzICIgJHRlc3RfZGVwbGliIgotCSAgICA7OwotCSAgZXNhYwotCWRvbmUKLQlkZXBsaWJzPSIkdG1wX2RlcGxpYnMiCi0KLQlpZiB0ZXN0IC1uICIkY29udmVuaWVuY2UiOyB0aGVuCi0JICBpZiB0ZXN0IC1uICIkd2hvbGVfYXJjaGl2ZV9mbGFnX3NwZWMiICYmCi0JICAgIHRlc3QgIiRjb21waWxlcl9uZWVkc19vYmplY3QiID0geWVzICYmCi0JICAgIHRlc3QgLXogIiRsaWJvYmpzIjsgdGhlbgotCSAgICAjIGV4dHJhY3QgdGhlIGFyY2hpdmVzLCBzbyB3ZSBoYXZlIG9iamVjdHMgdG8gbGlzdC4KLQkgICAgIyBUT0RPOiBjb3VsZCBvcHRpbWl6ZSB0aGlzIHRvIGp1c3QgZXh0cmFjdCBvbmUgYXJjaGl2ZS4KLQkgICAgd2hvbGVfYXJjaGl2ZV9mbGFnX3NwZWM9Ci0JICBmaQotCSAgaWYgdGVzdCAtbiAiJHdob2xlX2FyY2hpdmVfZmxhZ19zcGVjIjsgdGhlbgotCSAgICBzYXZlX2xpYm9ianM9JGxpYm9ianMKLQkgICAgZXZhbCBsaWJvYmpzPVwiXCRsaWJvYmpzICR3aG9sZV9hcmNoaXZlX2ZsYWdfc3BlY1wiCi0JICAgIHRlc3QgIlgkbGlib2JqcyIgPSAiWCAiICYmIGxpYm9ianM9Ci0JICBlbHNlCi0JICAgIGdlbnRvcD0iJG91dHB1dF9vYmpkaXIvJHtvdXRwdXRuYW1lfXgiCi0JICAgIGZ1bmNfYXBwZW5kIGdlbmVyYXRlZCAiICRnZW50b3AiCi0KLQkgICAgZnVuY19leHRyYWN0X2FyY2hpdmVzICRnZW50b3AgJGNvbnZlbmllbmNlCi0JICAgIGZ1bmNfYXBwZW5kIGxpYm9ianMgIiAkZnVuY19leHRyYWN0X2FyY2hpdmVzX3Jlc3VsdCIKLQkgICAgdGVzdCAiWCRsaWJvYmpzIiA9ICJYICIgJiYgbGlib2Jqcz0KLQkgIGZpCi0JZmkKLQotCWlmIHRlc3QgIiR0aHJlYWRfc2FmZSIgPSB5ZXMgJiYgdGVzdCAtbiAiJHRocmVhZF9zYWZlX2ZsYWdfc3BlYyI7IHRoZW4KLQkgIGV2YWwgZmxhZz1cIiR0aHJlYWRfc2FmZV9mbGFnX3NwZWNcIgotCSAgZnVuY19hcHBlbmQgbGlua2VyX2ZsYWdzICIgJGZsYWciCi0JZmkKLQotCSMgTWFrZSBhIGJhY2t1cCBvZiB0aGUgdW5pbnN0YWxsZWQgbGlicmFyeSB3aGVuIHJlbGlua2luZwotCWlmIHRlc3QgIiRvcHRfbW9kZSIgPSByZWxpbms7IHRoZW4KLQkgICRvcHRfZHJ5X3J1biB8fCBldmFsICcoY2QgJG91dHB1dF9vYmpkaXIgJiYgJFJNICR7cmVhbG5hbWV9VSAmJiAkTVYgJHJlYWxuYW1lICR7cmVhbG5hbWV9VSknIHx8IGV4aXQgJD8KLQlmaQotCi0JIyBEbyBlYWNoIG9mIHRoZSBhcmNoaXZlIGNvbW1hbmRzLgotCWlmIHRlc3QgIiRtb2R1bGUiID0geWVzICYmIHRlc3QgLW4gIiRtb2R1bGVfY21kcyIgOyB0aGVuCi0JICBpZiB0ZXN0IC1uICIkZXhwb3J0X3N5bWJvbHMiICYmIHRlc3QgLW4gIiRtb2R1bGVfZXhwc3ltX2NtZHMiOyB0aGVuCi0JICAgIGV2YWwgdGVzdF9jbWRzPVwiJG1vZHVsZV9leHBzeW1fY21kc1wiCi0JICAgIGNtZHM9JG1vZHVsZV9leHBzeW1fY21kcwotCSAgZWxzZQotCSAgICBldmFsIHRlc3RfY21kcz1cIiRtb2R1bGVfY21kc1wiCi0JICAgIGNtZHM9JG1vZHVsZV9jbWRzCi0JICBmaQotCWVsc2UKLQkgIGlmIHRlc3QgLW4gIiRleHBvcnRfc3ltYm9scyIgJiYgdGVzdCAtbiAiJGFyY2hpdmVfZXhwc3ltX2NtZHMiOyB0aGVuCi0JICAgIGV2YWwgdGVzdF9jbWRzPVwiJGFyY2hpdmVfZXhwc3ltX2NtZHNcIgotCSAgICBjbWRzPSRhcmNoaXZlX2V4cHN5bV9jbWRzCi0JICBlbHNlCi0JICAgIGV2YWwgdGVzdF9jbWRzPVwiJGFyY2hpdmVfY21kc1wiCi0JICAgIGNtZHM9JGFyY2hpdmVfY21kcwotCSAgZmkKLQlmaQotCi0JaWYgdGVzdCAiWCRza2lwcGVkX2V4cG9ydCIgIT0gIlg6IiAmJgotCSAgIGZ1bmNfbGVuICIgJHRlc3RfY21kcyIgJiYKLQkgICBsZW49JGZ1bmNfbGVuX3Jlc3VsdCAmJgotCSAgIHRlc3QgIiRsZW4iIC1sdCAiJG1heF9jbWRfbGVuIiB8fCB0ZXN0ICIkbWF4X2NtZF9sZW4iIC1sZSAtMTsgdGhlbgotCSAgOgotCWVsc2UKLQkgICMgVGhlIGNvbW1hbmQgbGluZSBpcyB0b28gbG9uZyB0byBsaW5rIGluIG9uZSBzdGVwLCBsaW5rIHBpZWNld2lzZQotCSAgIyBvciwgaWYgdXNpbmcgR05VIGxkIGFuZCBza2lwcGVkX2V4cG9ydCBpcyBub3QgOiwgdXNlIGEgbGlua2VyCi0JICAjIHNjcmlwdC4KLQotCSAgIyBTYXZlIHRoZSB2YWx1ZSBvZiAkb3V0cHV0IGFuZCAkbGlib2JqcyBiZWNhdXNlIHdlIHdhbnQgdG8KLQkgICMgdXNlIHRoZW0gbGF0ZXIuICBJZiB3ZSBoYXZlIHdob2xlX2FyY2hpdmVfZmxhZ19zcGVjLCB3ZQotCSAgIyB3YW50IHRvIHVzZSBzYXZlX2xpYm9ianMgYXMgaXQgd2FzIGJlZm9yZQotCSAgIyB3aG9sZV9hcmNoaXZlX2ZsYWdfc3BlYyB3YXMgZXhwYW5kZWQsIGJlY2F1c2Ugd2UgY2FuJ3QKLQkgICMgYXNzdW1lIHRoZSBsaW5rZXIgdW5kZXJzdGFuZHMgd2hvbGVfYXJjaGl2ZV9mbGFnX3NwZWMuCi0JICAjIFRoaXMgbWF5IGhhdmUgdG8gYmUgcmV2aXNpdGVkLCBpbiBjYXNlIHRvbyBtYW55Ci0JICAjIGNvbnZlbmllbmNlIGxpYnJhcmllcyBnZXQgbGlua2VkIGluIGFuZCBlbmQgdXAgZXhjZWVkaW5nCi0JICAjIHRoZSBzcGVjLgotCSAgaWYgdGVzdCAteiAiJGNvbnZlbmllbmNlIiB8fCB0ZXN0IC16ICIkd2hvbGVfYXJjaGl2ZV9mbGFnX3NwZWMiOyB0aGVuCi0JICAgIHNhdmVfbGlib2Jqcz0kbGlib2JqcwotCSAgZmkKLQkgIHNhdmVfb3V0cHV0PSRvdXRwdXQKLQkgIGZ1bmNfYmFzZW5hbWUgIiRvdXRwdXQiCi0JICBvdXRwdXRfbGE9JGZ1bmNfYmFzZW5hbWVfcmVzdWx0Ci0KLQkgICMgQ2xlYXIgdGhlIHJlbG9hZGFibGUgb2JqZWN0IGNyZWF0aW9uIGNvbW1hbmQgcXVldWUgYW5kCi0JICAjIGluaXRpYWxpemUgayB0byBvbmUuCi0JICB0ZXN0X2NtZHM9Ci0JICBjb25jYXRfY21kcz0KLQkgIG9iamxpc3Q9Ci0JICBsYXN0X3JvYmo9Ci0JICBrPTEKLQotCSAgaWYgdGVzdCAtbiAiJHNhdmVfbGlib2JqcyIgJiYgdGVzdCAiWCRza2lwcGVkX2V4cG9ydCIgIT0gIlg6IiAmJiB0ZXN0ICIkd2l0aF9nbnVfbGQiID0geWVzOyB0aGVuCi0JICAgIG91dHB1dD0ke291dHB1dF9vYmpkaXJ9LyR7b3V0cHV0X2xhfS5sbmtzY3JpcHQKLQkgICAgZnVuY192ZXJib3NlICJjcmVhdGluZyBHTlUgbGQgc2NyaXB0OiAkb3V0cHV0IgotCSAgICBlY2hvICdJTlBVVCAoJyA+ICRvdXRwdXQKLQkgICAgZm9yIG9iaiBpbiAkc2F2ZV9saWJvYmpzCi0JICAgIGRvCi0JICAgICAgZnVuY190b190b29sX2ZpbGUgIiRvYmoiCi0JICAgICAgJEVDSE8gIiRmdW5jX3RvX3Rvb2xfZmlsZV9yZXN1bHQiID4+ICRvdXRwdXQKLQkgICAgZG9uZQotCSAgICBlY2hvICcpJyA+PiAkb3V0cHV0Ci0JICAgIGZ1bmNfYXBwZW5kIGRlbGZpbGVzICIgJG91dHB1dCIKLQkgICAgZnVuY190b190b29sX2ZpbGUgIiRvdXRwdXQiCi0JICAgIG91dHB1dD0kZnVuY190b190b29sX2ZpbGVfcmVzdWx0Ci0JICBlbGlmIHRlc3QgLW4gIiRzYXZlX2xpYm9ianMiICYmIHRlc3QgIlgkc2tpcHBlZF9leHBvcnQiICE9ICJYOiIgJiYgdGVzdCAiWCRmaWxlX2xpc3Rfc3BlYyIgIT0gWDsgdGhlbgotCSAgICBvdXRwdXQ9JHtvdXRwdXRfb2JqZGlyfS8ke291dHB1dF9sYX0ubG5rCi0JICAgIGZ1bmNfdmVyYm9zZSAiY3JlYXRpbmcgbGlua2VyIGlucHV0IGZpbGUgbGlzdDogJG91dHB1dCIKLQkgICAgOiA+ICRvdXRwdXQKLQkgICAgc2V0IHggJHNhdmVfbGlib2JqcwotCSAgICBzaGlmdAotCSAgICBmaXJzdG9iaj0KLQkgICAgaWYgdGVzdCAiJGNvbXBpbGVyX25lZWRzX29iamVjdCIgPSB5ZXM7IHRoZW4KLQkgICAgICBmaXJzdG9iaj0iJDEgIgotCSAgICAgIHNoaWZ0Ci0JICAgIGZpCi0JICAgIGZvciBvYmoKLQkgICAgZG8KLQkgICAgICBmdW5jX3RvX3Rvb2xfZmlsZSAiJG9iaiIKLQkgICAgICAkRUNITyAiJGZ1bmNfdG9fdG9vbF9maWxlX3Jlc3VsdCIgPj4gJG91dHB1dAotCSAgICBkb25lCi0JICAgIGZ1bmNfYXBwZW5kIGRlbGZpbGVzICIgJG91dHB1dCIKLQkgICAgZnVuY190b190b29sX2ZpbGUgIiRvdXRwdXQiCi0JICAgIG91dHB1dD0kZmlyc3RvYmpcIiRmaWxlX2xpc3Rfc3BlYyRmdW5jX3RvX3Rvb2xfZmlsZV9yZXN1bHRcIgotCSAgZWxzZQotCSAgICBpZiB0ZXN0IC1uICIkc2F2ZV9saWJvYmpzIjsgdGhlbgotCSAgICAgIGZ1bmNfdmVyYm9zZSAiY3JlYXRpbmcgcmVsb2FkYWJsZSBvYmplY3QgZmlsZXMuLi4iCi0JICAgICAgb3V0cHV0PSRvdXRwdXRfb2JqZGlyLyRvdXRwdXRfbGEtJHtrfS4kb2JqZXh0Ci0JICAgICAgZXZhbCB0ZXN0X2NtZHM9XCIkcmVsb2FkX2NtZHNcIgotCSAgICAgIGZ1bmNfbGVuICIgJHRlc3RfY21kcyIKLQkgICAgICBsZW4wPSRmdW5jX2xlbl9yZXN1bHQKLQkgICAgICBsZW49JGxlbjAKLQotCSAgICAgICMgTG9vcCBvdmVyIHRoZSBsaXN0IG9mIG9iamVjdHMgdG8gYmUgbGlua2VkLgotCSAgICAgIGZvciBvYmogaW4gJHNhdmVfbGlib2JqcwotCSAgICAgIGRvCi0JCWZ1bmNfbGVuICIgJG9iaiIKLQkJZnVuY19hcml0aCAkbGVuICsgJGZ1bmNfbGVuX3Jlc3VsdAotCQlsZW49JGZ1bmNfYXJpdGhfcmVzdWx0Ci0JCWlmIHRlc3QgIlgkb2JqbGlzdCIgPSBYIHx8Ci0JCSAgIHRlc3QgIiRsZW4iIC1sdCAiJG1heF9jbWRfbGVuIjsgdGhlbgotCQkgIGZ1bmNfYXBwZW5kIG9iamxpc3QgIiAkb2JqIgotCQllbHNlCi0JCSAgIyBUaGUgY29tbWFuZCAkdGVzdF9jbWRzIGlzIGFsbW9zdCB0b28gbG9uZywgYWRkIGEKLQkJICAjIGNvbW1hbmQgdG8gdGhlIHF1ZXVlLgotCQkgIGlmIHRlc3QgIiRrIiAtZXEgMSA7IHRoZW4KLQkJICAgICMgVGhlIGZpcnN0IGZpbGUgZG9lc24ndCBoYXZlIGEgcHJldmlvdXMgY29tbWFuZCB0byBhZGQuCi0JCSAgICByZWxvYWRfb2Jqcz0kb2JqbGlzdAotCQkgICAgZXZhbCBjb25jYXRfY21kcz1cIiRyZWxvYWRfY21kc1wiCi0JCSAgZWxzZQotCQkgICAgIyBBbGwgc3Vic2VxdWVudCByZWxvYWRhYmxlIG9iamVjdCBmaWxlcyB3aWxsIGxpbmsgaW4KLQkJICAgICMgdGhlIGxhc3Qgb25lIGNyZWF0ZWQuCi0JCSAgICByZWxvYWRfb2Jqcz0iJG9iamxpc3QgJGxhc3Rfcm9iaiIKLQkJICAgIGV2YWwgY29uY2F0X2NtZHM9XCJcJGNvbmNhdF9jbWRzfiRyZWxvYWRfY21kc35cJFJNICRsYXN0X3JvYmpcIgotCQkgIGZpCi0JCSAgbGFzdF9yb2JqPSRvdXRwdXRfb2JqZGlyLyRvdXRwdXRfbGEtJHtrfS4kb2JqZXh0Ci0JCSAgZnVuY19hcml0aCAkayArIDEKLQkJICBrPSRmdW5jX2FyaXRoX3Jlc3VsdAotCQkgIG91dHB1dD0kb3V0cHV0X29iamRpci8kb3V0cHV0X2xhLSR7a30uJG9iamV4dAotCQkgIG9iamxpc3Q9IiAkb2JqIgotCQkgIGZ1bmNfbGVuICIgJGxhc3Rfcm9iaiIKLQkJICBmdW5jX2FyaXRoICRsZW4wICsgJGZ1bmNfbGVuX3Jlc3VsdAotCQkgIGxlbj0kZnVuY19hcml0aF9yZXN1bHQKLQkJZmkKLQkgICAgICBkb25lCi0JICAgICAgIyBIYW5kbGUgdGhlIHJlbWFpbmluZyBvYmplY3RzIGJ5IGNyZWF0aW5nIG9uZSBsYXN0Ci0JICAgICAgIyByZWxvYWRhYmxlIG9iamVjdCBmaWxlLiAgQWxsIHN1YnNlcXVlbnQgcmVsb2FkYWJsZSBvYmplY3QKLQkgICAgICAjIGZpbGVzIHdpbGwgbGluayBpbiB0aGUgbGFzdCBvbmUgY3JlYXRlZC4KLQkgICAgICB0ZXN0IC16ICIkY29uY2F0X2NtZHMiIHx8IGNvbmNhdF9jbWRzPSRjb25jYXRfY21kc34KLQkgICAgICByZWxvYWRfb2Jqcz0iJG9iamxpc3QgJGxhc3Rfcm9iaiIKLQkgICAgICBldmFsIGNvbmNhdF9jbWRzPVwiXCR7Y29uY2F0X2NtZHN9JHJlbG9hZF9jbWRzXCIKLQkgICAgICBpZiB0ZXN0IC1uICIkbGFzdF9yb2JqIjsgdGhlbgotCSAgICAgICAgZXZhbCBjb25jYXRfY21kcz1cIlwke2NvbmNhdF9jbWRzfX5cJFJNICRsYXN0X3JvYmpcIgotCSAgICAgIGZpCi0JICAgICAgZnVuY19hcHBlbmQgZGVsZmlsZXMgIiAkb3V0cHV0IgotCi0JICAgIGVsc2UKLQkgICAgICBvdXRwdXQ9Ci0JICAgIGZpCi0KLQkgICAgaWYgJHtza2lwcGVkX2V4cG9ydC1mYWxzZX07IHRoZW4KLQkgICAgICBmdW5jX3ZlcmJvc2UgImdlbmVyYXRpbmcgc3ltYm9sIGxpc3QgZm9yIFxgJGxpYm5hbWUubGEnIgotCSAgICAgIGV4cG9ydF9zeW1ib2xzPSIkb3V0cHV0X29iamRpci8kbGlibmFtZS5leHAiCi0JICAgICAgJG9wdF9kcnlfcnVuIHx8ICRSTSAkZXhwb3J0X3N5bWJvbHMKLQkgICAgICBsaWJvYmpzPSRvdXRwdXQKLQkgICAgICAjIEFwcGVuZCB0aGUgY29tbWFuZCB0byBjcmVhdGUgdGhlIGV4cG9ydCBmaWxlLgotCSAgICAgIHRlc3QgLXogIiRjb25jYXRfY21kcyIgfHwgY29uY2F0X2NtZHM9JGNvbmNhdF9jbWRzfgotCSAgICAgIGV2YWwgY29uY2F0X2NtZHM9XCJcJGNvbmNhdF9jbWRzJGV4cG9ydF9zeW1ib2xzX2NtZHNcIgotCSAgICAgIGlmIHRlc3QgLW4gIiRsYXN0X3JvYmoiOyB0aGVuCi0JCWV2YWwgY29uY2F0X2NtZHM9XCJcJGNvbmNhdF9jbWRzflwkUk0gJGxhc3Rfcm9ialwiCi0JICAgICAgZmkKLQkgICAgZmkKLQotCSAgICB0ZXN0IC1uICIkc2F2ZV9saWJvYmpzIiAmJgotCSAgICAgIGZ1bmNfdmVyYm9zZSAiY3JlYXRpbmcgYSB0ZW1wb3JhcnkgcmVsb2FkYWJsZSBvYmplY3QgZmlsZTogJG91dHB1dCIKLQotCSAgICAjIExvb3AgdGhyb3VnaCB0aGUgY29tbWFuZHMgZ2VuZXJhdGVkIGFib3ZlIGFuZCBleGVjdXRlIHRoZW0uCi0JICAgIHNhdmVfaWZzPSIkSUZTIjsgSUZTPSd+JwotCSAgICBmb3IgY21kIGluICRjb25jYXRfY21kczsgZG8KLQkgICAgICBJRlM9IiRzYXZlX2lmcyIKLQkgICAgICAkb3B0X3NpbGVudCB8fCB7Ci0JCSAgZnVuY19xdW90ZV9mb3JfZXhwYW5kICIkY21kIgotCQkgIGV2YWwgImZ1bmNfZWNobyAkZnVuY19xdW90ZV9mb3JfZXhwYW5kX3Jlc3VsdCIKLQkgICAgICB9Ci0JICAgICAgJG9wdF9kcnlfcnVuIHx8IGV2YWwgIiRjbWQiIHx8IHsKLQkJbHRfZXhpdD0kPwotCi0JCSMgUmVzdG9yZSB0aGUgdW5pbnN0YWxsZWQgbGlicmFyeSBhbmQgZXhpdAotCQlpZiB0ZXN0ICIkb3B0X21vZGUiID0gcmVsaW5rOyB0aGVuCi0JCSAgKCBjZCAiJG91dHB1dF9vYmpkaXIiICYmIFwKLQkJICAgICRSTSAiJHtyZWFsbmFtZX1UIiAmJiBcCi0JCSAgICAkTVYgIiR7cmVhbG5hbWV9VSIgIiRyZWFsbmFtZSIgKQotCQlmaQotCi0JCWV4aXQgJGx0X2V4aXQKLQkgICAgICB9Ci0JICAgIGRvbmUKLQkgICAgSUZTPSIkc2F2ZV9pZnMiCi0KLQkgICAgaWYgdGVzdCAtbiAiJGV4cG9ydF9zeW1ib2xzX3JlZ2V4IiAmJiAke3NraXBwZWRfZXhwb3J0LWZhbHNlfTsgdGhlbgotCSAgICAgIGZ1bmNfc2hvd19ldmFsICckRUdSRVAgLWUgIiRleHBvcnRfc3ltYm9sc19yZWdleCIgIiRleHBvcnRfc3ltYm9scyIgPiAiJHtleHBvcnRfc3ltYm9sc31UIicKLQkgICAgICBmdW5jX3Nob3dfZXZhbCAnJE1WICIke2V4cG9ydF9zeW1ib2xzfVQiICIkZXhwb3J0X3N5bWJvbHMiJwotCSAgICBmaQotCSAgZmkKLQotICAgICAgICAgIGlmICR7c2tpcHBlZF9leHBvcnQtZmFsc2V9OyB0aGVuCi0JICAgIGlmIHRlc3QgLW4gIiRleHBvcnRfc3ltYm9scyIgJiYgdGVzdCAtbiAiJGluY2x1ZGVfZXhwc3ltcyI7IHRoZW4KLQkgICAgICB0bXBfZXhwb3J0X3N5bWJvbHM9IiRleHBvcnRfc3ltYm9scyIKLQkgICAgICB0ZXN0IC1uICIkb3JpZ19leHBvcnRfc3ltYm9scyIgJiYgdG1wX2V4cG9ydF9zeW1ib2xzPSIkb3JpZ19leHBvcnRfc3ltYm9scyIKLQkgICAgICAkb3B0X2RyeV9ydW4gfHwgZXZhbCAnJEVDSE8gIiRpbmNsdWRlX2V4cHN5bXMiIHwgJFNQMk5MID4+ICIkdG1wX2V4cG9ydF9zeW1ib2xzIicKLQkgICAgZmkKLQotCSAgICBpZiB0ZXN0IC1uICIkb3JpZ19leHBvcnRfc3ltYm9scyI7IHRoZW4KLQkgICAgICAjIFRoZSBnaXZlbiBleHBvcnRzX3N5bWJvbHMgZmlsZSBoYXMgdG8gYmUgZmlsdGVyZWQsIHNvIGZpbHRlciBpdC4KLQkgICAgICBmdW5jX3ZlcmJvc2UgImZpbHRlciBzeW1ib2wgbGlzdCBmb3IgXGAkbGlibmFtZS5sYScgdG8gdGFnIERBVEEgZXhwb3J0cyIKLQkgICAgICAjIEZJWE1FOiAkb3V0cHV0X29iamRpci8kbGlibmFtZS5maWx0ZXIgcG90ZW50aWFsbHkgY29udGFpbnMgbG90cyBvZgotCSAgICAgICMgJ3MnIGNvbW1hbmRzIHdoaWNoIG5vdCBhbGwgc2VkcyBjYW4gaGFuZGxlLiBHTlUgc2VkIHNob3VsZCBiZSBmaW5lCi0JICAgICAgIyB0aG91Z2guIEFsc28sIHRoZSBmaWx0ZXIgc2NhbGVzIHN1cGVybGluZWFybHkgd2l0aCB0aGUgbnVtYmVyIG9mCi0JICAgICAgIyBnbG9iYWwgdmFyaWFibGVzLiBqb2luKDEpIHdvdWxkIGJlIG5pY2UgaGVyZSwgYnV0IHVuZm9ydHVuYXRlbHkKLQkgICAgICAjIGlzbid0IGEgYmxlc3NlZCB0b29sLgotCSAgICAgICRvcHRfZHJ5X3J1biB8fCAkU0VEIC1lICcvWyAsXURBVEEvIWQ7cyxcKC4qXClcKFsgXCxdLipcKSxzfF5cMSR8XDFcMnwsJyA8ICRleHBvcnRfc3ltYm9scyA+ICRvdXRwdXRfb2JqZGlyLyRsaWJuYW1lLmZpbHRlcgotCSAgICAgIGZ1bmNfYXBwZW5kIGRlbGZpbGVzICIgJGV4cG9ydF9zeW1ib2xzICRvdXRwdXRfb2JqZGlyLyRsaWJuYW1lLmZpbHRlciIKLQkgICAgICBleHBvcnRfc3ltYm9scz0kb3V0cHV0X29iamRpci8kbGlibmFtZS5kZWYKLQkgICAgICAkb3B0X2RyeV9ydW4gfHwgJFNFRCAtZiAkb3V0cHV0X29iamRpci8kbGlibmFtZS5maWx0ZXIgPCAkb3JpZ19leHBvcnRfc3ltYm9scyA+ICRleHBvcnRfc3ltYm9scwotCSAgICBmaQotCSAgZmkKLQotCSAgbGlib2Jqcz0kb3V0cHV0Ci0JICAjIFJlc3RvcmUgdGhlIHZhbHVlIG9mIG91dHB1dC4KLQkgIG91dHB1dD0kc2F2ZV9vdXRwdXQKLQotCSAgaWYgdGVzdCAtbiAiJGNvbnZlbmllbmNlIiAmJiB0ZXN0IC1uICIkd2hvbGVfYXJjaGl2ZV9mbGFnX3NwZWMiOyB0aGVuCi0JICAgIGV2YWwgbGlib2Jqcz1cIlwkbGlib2JqcyAkd2hvbGVfYXJjaGl2ZV9mbGFnX3NwZWNcIgotCSAgICB0ZXN0ICJYJGxpYm9ianMiID0gIlggIiAmJiBsaWJvYmpzPQotCSAgZmkKLQkgICMgRXhwYW5kIHRoZSBsaWJyYXJ5IGxpbmtpbmcgY29tbWFuZHMgYWdhaW4gdG8gcmVzZXQgdGhlCi0JICAjIHZhbHVlIG9mICRsaWJvYmpzIGZvciBwaWVjZXdpc2UgbGlua2luZy4KLQotCSAgIyBEbyBlYWNoIG9mIHRoZSBhcmNoaXZlIGNvbW1hbmRzLgotCSAgaWYgdGVzdCAiJG1vZHVsZSIgPSB5ZXMgJiYgdGVzdCAtbiAiJG1vZHVsZV9jbWRzIiA7IHRoZW4KLQkgICAgaWYgdGVzdCAtbiAiJGV4cG9ydF9zeW1ib2xzIiAmJiB0ZXN0IC1uICIkbW9kdWxlX2V4cHN5bV9jbWRzIjsgdGhlbgotCSAgICAgIGNtZHM9JG1vZHVsZV9leHBzeW1fY21kcwotCSAgICBlbHNlCi0JICAgICAgY21kcz0kbW9kdWxlX2NtZHMKLQkgICAgZmkKLQkgIGVsc2UKLQkgICAgaWYgdGVzdCAtbiAiJGV4cG9ydF9zeW1ib2xzIiAmJiB0ZXN0IC1uICIkYXJjaGl2ZV9leHBzeW1fY21kcyI7IHRoZW4KLQkgICAgICBjbWRzPSRhcmNoaXZlX2V4cHN5bV9jbWRzCi0JICAgIGVsc2UKLQkgICAgICBjbWRzPSRhcmNoaXZlX2NtZHMKLQkgICAgZmkKLQkgIGZpCi0JZmkKLQotCWlmIHRlc3QgLW4gIiRkZWxmaWxlcyI7IHRoZW4KLQkgICMgQXBwZW5kIHRoZSBjb21tYW5kIHRvIHJlbW92ZSB0ZW1wb3JhcnkgZmlsZXMgdG8gJGNtZHMuCi0JICBldmFsIGNtZHM9XCJcJGNtZHN+XCRSTSAkZGVsZmlsZXNcIgotCWZpCi0KLQkjIEFkZCBhbnkgb2JqZWN0cyBmcm9tIHByZWxvYWRlZCBjb252ZW5pZW5jZSBsaWJyYXJpZXMKLQlpZiB0ZXN0IC1uICIkZGxwcmVmaWxlcyI7IHRoZW4KLQkgIGdlbnRvcD0iJG91dHB1dF9vYmpkaXIvJHtvdXRwdXRuYW1lfXgiCi0JICBmdW5jX2FwcGVuZCBnZW5lcmF0ZWQgIiAkZ2VudG9wIgotCi0JICBmdW5jX2V4dHJhY3RfYXJjaGl2ZXMgJGdlbnRvcCAkZGxwcmVmaWxlcwotCSAgZnVuY19hcHBlbmQgbGlib2JqcyAiICRmdW5jX2V4dHJhY3RfYXJjaGl2ZXNfcmVzdWx0IgotCSAgdGVzdCAiWCRsaWJvYmpzIiA9ICJYICIgJiYgbGlib2Jqcz0KLQlmaQotCi0Jc2F2ZV9pZnM9IiRJRlMiOyBJRlM9J34nCi0JZm9yIGNtZCBpbiAkY21kczsgZG8KLQkgIElGUz0iJHNhdmVfaWZzIgotCSAgZXZhbCBjbWQ9XCIkY21kXCIKLQkgICRvcHRfc2lsZW50IHx8IHsKLQkgICAgZnVuY19xdW90ZV9mb3JfZXhwYW5kICIkY21kIgotCSAgICBldmFsICJmdW5jX2VjaG8gJGZ1bmNfcXVvdGVfZm9yX2V4cGFuZF9yZXN1bHQiCi0JICB9Ci0JICAkb3B0X2RyeV9ydW4gfHwgZXZhbCAiJGNtZCIgfHwgewotCSAgICBsdF9leGl0PSQ/Ci0KLQkgICAgIyBSZXN0b3JlIHRoZSB1bmluc3RhbGxlZCBsaWJyYXJ5IGFuZCBleGl0Ci0JICAgIGlmIHRlc3QgIiRvcHRfbW9kZSIgPSByZWxpbms7IHRoZW4KLQkgICAgICAoIGNkICIkb3V0cHV0X29iamRpciIgJiYgXAotCSAgICAgICAgJFJNICIke3JlYWxuYW1lfVQiICYmIFwKLQkJJE1WICIke3JlYWxuYW1lfVUiICIkcmVhbG5hbWUiICkKLQkgICAgZmkKLQotCSAgICBleGl0ICRsdF9leGl0Ci0JICB9Ci0JZG9uZQotCUlGUz0iJHNhdmVfaWZzIgotCi0JIyBSZXN0b3JlIHRoZSB1bmluc3RhbGxlZCBsaWJyYXJ5IGFuZCBleGl0Ci0JaWYgdGVzdCAiJG9wdF9tb2RlIiA9IHJlbGluazsgdGhlbgotCSAgJG9wdF9kcnlfcnVuIHx8IGV2YWwgJyhjZCAkb3V0cHV0X29iamRpciAmJiAkUk0gJHtyZWFsbmFtZX1UICYmICRNViAkcmVhbG5hbWUgJHtyZWFsbmFtZX1UICYmICRNViAke3JlYWxuYW1lfVUgJHJlYWxuYW1lKScgfHwgZXhpdCAkPwotCi0JICBpZiB0ZXN0IC1uICIkY29udmVuaWVuY2UiOyB0aGVuCi0JICAgIGlmIHRlc3QgLXogIiR3aG9sZV9hcmNoaXZlX2ZsYWdfc3BlYyI7IHRoZW4KLQkgICAgICBmdW5jX3Nob3dfZXZhbCAnJHtSTX1yICIkZ2VudG9wIicKLQkgICAgZmkKLQkgIGZpCi0KLQkgIGV4aXQgJEVYSVRfU1VDQ0VTUwotCWZpCi0KLQkjIENyZWF0ZSBsaW5rcyB0byB0aGUgcmVhbCBsaWJyYXJ5LgotCWZvciBsaW5rbmFtZSBpbiAkbGlua25hbWVzOyBkbwotCSAgaWYgdGVzdCAiJHJlYWxuYW1lIiAhPSAiJGxpbmtuYW1lIjsgdGhlbgotCSAgICBmdW5jX3Nob3dfZXZhbCAnKGNkICIkb3V0cHV0X29iamRpciIgJiYgJFJNICIkbGlua25hbWUiICYmICRMTl9TICIkcmVhbG5hbWUiICIkbGlua25hbWUiKScgJ2V4aXQgJD8nCi0JICBmaQotCWRvbmUKLQotCSMgSWYgLW1vZHVsZSBvciAtZXhwb3J0LWR5bmFtaWMgd2FzIHNwZWNpZmllZCwgc2V0IHRoZSBkbG5hbWUuCi0JaWYgdGVzdCAiJG1vZHVsZSIgPSB5ZXMgfHwgdGVzdCAiJGV4cG9ydF9keW5hbWljIiA9IHllczsgdGhlbgotCSAgIyBPbiBhbGwga25vd24gb3BlcmF0aW5nIHN5c3RlbXMsIHRoZXNlIGFyZSBpZGVudGljYWwuCi0JICBkbG5hbWU9IiRzb25hbWUiCi0JZmkKLSAgICAgIGZpCi0gICAgICA7OwotCi0gICAgb2JqKQotICAgICAgaWYgdGVzdCAtbiAiJGRsZmlsZXMkZGxwcmVmaWxlcyIgfHwgdGVzdCAiJGRsc2VsZiIgIT0gbm87IHRoZW4KLQlmdW5jX3dhcm5pbmcgIlxgLWRsb3BlbicgaXMgaWdub3JlZCBmb3Igb2JqZWN0cyIKLSAgICAgIGZpCi0KLSAgICAgIGNhc2UgIiAkZGVwbGlicyIgaW4KLSAgICAgICpcIC1sKiB8ICpcIC1MKikKLQlmdW5jX3dhcm5pbmcgIlxgLWwnIGFuZCBcYC1MJyBhcmUgaWdub3JlZCBmb3Igb2JqZWN0cyIgOzsKLSAgICAgIGVzYWMKLQotICAgICAgdGVzdCAtbiAiJHJwYXRoIiAmJiBcCi0JZnVuY193YXJuaW5nICJcYC1ycGF0aCcgaXMgaWdub3JlZCBmb3Igb2JqZWN0cyIKLQotICAgICAgdGVzdCAtbiAiJHhycGF0aCIgJiYgXAotCWZ1bmNfd2FybmluZyAiXGAtUicgaXMgaWdub3JlZCBmb3Igb2JqZWN0cyIKLQotICAgICAgdGVzdCAtbiAiJHZpbmZvIiAmJiBcCi0JZnVuY193YXJuaW5nICJcYC12ZXJzaW9uLWluZm8nIGlzIGlnbm9yZWQgZm9yIG9iamVjdHMiCi0KLSAgICAgIHRlc3QgLW4gIiRyZWxlYXNlIiAmJiBcCi0JZnVuY193YXJuaW5nICJcYC1yZWxlYXNlJyBpcyBpZ25vcmVkIGZvciBvYmplY3RzIgotCi0gICAgICBjYXNlICRvdXRwdXQgaW4KLSAgICAgICoubG8pCi0JdGVzdCAtbiAiJG9ianMkb2xkX2RlcGxpYnMiICYmIFwKLQkgIGZ1bmNfZmF0YWxfZXJyb3IgImNhbm5vdCBidWlsZCBsaWJyYXJ5IG9iamVjdCBcYCRvdXRwdXQnIGZyb20gbm9uLWxpYnRvb2wgb2JqZWN0cyIKLQotCWxpYm9iaj0kb3V0cHV0Ci0JZnVuY19sbzJvICIkbGlib2JqIgotCW9iaj0kZnVuY19sbzJvX3Jlc3VsdAotCTs7Ci0gICAgICAqKQotCWxpYm9iaj0KLQlvYmo9IiRvdXRwdXQiCi0JOzsKLSAgICAgIGVzYWMKLQotICAgICAgIyBEZWxldGUgdGhlIG9sZCBvYmplY3RzLgotICAgICAgJG9wdF9kcnlfcnVuIHx8ICRSTSAkb2JqICRsaWJvYmoKLQotICAgICAgIyBPYmplY3RzIGZyb20gY29udmVuaWVuY2UgbGlicmFyaWVzLiAgVGhpcyBhc3N1bWVzCi0gICAgICAjIHNpbmdsZS12ZXJzaW9uIGNvbnZlbmllbmNlIGxpYnJhcmllcy4gIFdoZW5ldmVyIHdlIGNyZWF0ZQotICAgICAgIyBkaWZmZXJlbnQgb25lcyBmb3IgUElDL25vbi1QSUMsIHRoaXMgd2UnbGwgaGF2ZSB0byBkdXBsaWNhdGUKLSAgICAgICMgdGhlIGV4dHJhY3Rpb24uCi0gICAgICByZWxvYWRfY29udl9vYmpzPQotICAgICAgZ2VudG9wPQotICAgICAgIyByZWxvYWRfY21kcyBydW5zICRMRCBkaXJlY3RseSwgc28gbGV0IHVzIGdldCByaWQgb2YKLSAgICAgICMgLVdsIGZyb20gd2hvbGVfYXJjaGl2ZV9mbGFnX3NwZWMgYW5kIGhvcGUgd2UgY2FuIGdldCBieSB3aXRoCi0gICAgICAjIHR1cm5pbmcgY29tbWEgaW50byBzcGFjZS4uCi0gICAgICB3bD0KLQotICAgICAgaWYgdGVzdCAtbiAiJGNvbnZlbmllbmNlIjsgdGhlbgotCWlmIHRlc3QgLW4gIiR3aG9sZV9hcmNoaXZlX2ZsYWdfc3BlYyI7IHRoZW4KLQkgIGV2YWwgdG1wX3dob2xlX2FyY2hpdmVfZmxhZ3M9XCIkd2hvbGVfYXJjaGl2ZV9mbGFnX3NwZWNcIgotCSAgcmVsb2FkX2NvbnZfb2Jqcz0kcmVsb2FkX29ianNcIGAkRUNITyAiJHRtcF93aG9sZV9hcmNoaXZlX2ZsYWdzIiB8ICRTRUQgJ3N8LHwgfGcnYAotCWVsc2UKLQkgIGdlbnRvcD0iJG91dHB1dF9vYmpkaXIvJHtvYmp9eCIKLQkgIGZ1bmNfYXBwZW5kIGdlbmVyYXRlZCAiICRnZW50b3AiCi0KLQkgIGZ1bmNfZXh0cmFjdF9hcmNoaXZlcyAkZ2VudG9wICRjb252ZW5pZW5jZQotCSAgcmVsb2FkX2NvbnZfb2Jqcz0iJHJlbG9hZF9vYmpzICRmdW5jX2V4dHJhY3RfYXJjaGl2ZXNfcmVzdWx0IgotCWZpCi0gICAgICBmaQotCi0gICAgICAjIElmIHdlJ3JlIG5vdCBidWlsZGluZyBzaGFyZWQsIHdlIG5lZWQgdG8gdXNlIG5vbl9waWNfb2JqcwotICAgICAgdGVzdCAiJGJ1aWxkX2xpYnRvb2xfbGlicyIgIT0geWVzICYmIGxpYm9ianM9IiRub25fcGljX29iamVjdHMiCi0KLSAgICAgICMgQ3JlYXRlIHRoZSBvbGQtc3R5bGUgb2JqZWN0LgotICAgICAgcmVsb2FkX29ianM9IiRvYmpzJG9sZF9kZXBsaWJzICJgJEVDSE8gIiRsaWJvYmpzIiB8ICRTUDJOTCB8ICRTRUQgIi9cLiR7bGliZXh0fSQvZDsgL1wubGliJC9kOyAkbG8ybyIgfCAkTkwyU1BgIiAkcmVsb2FkX2NvbnZfb2JqcyIgIyMjIHRlc3RzdWl0ZTogc2tpcCBuZXN0ZWQgcXVvdGluZyB0ZXN0Ci0KLSAgICAgIG91dHB1dD0iJG9iaiIKLSAgICAgIGZ1bmNfZXhlY3V0ZV9jbWRzICIkcmVsb2FkX2NtZHMiICdleGl0ICQ/JwotCi0gICAgICAjIEV4aXQgaWYgd2UgYXJlbid0IGRvaW5nIGEgbGlicmFyeSBvYmplY3QgZmlsZS4KLSAgICAgIGlmIHRlc3QgLXogIiRsaWJvYmoiOyB0aGVuCi0JaWYgdGVzdCAtbiAiJGdlbnRvcCI7IHRoZW4KLQkgIGZ1bmNfc2hvd19ldmFsICcke1JNfXIgIiRnZW50b3AiJwotCWZpCi0KLQlleGl0ICRFWElUX1NVQ0NFU1MKLSAgICAgIGZpCi0KLSAgICAgIGlmIHRlc3QgIiRidWlsZF9saWJ0b29sX2xpYnMiICE9IHllczsgdGhlbgotCWlmIHRlc3QgLW4gIiRnZW50b3AiOyB0aGVuCi0JICBmdW5jX3Nob3dfZXZhbCAnJHtSTX1yICIkZ2VudG9wIicKLQlmaQotCi0JIyBDcmVhdGUgYW4gaW52YWxpZCBsaWJ0b29sIG9iamVjdCBpZiBubyBQSUMsIHNvIHRoYXQgd2UgZG9uJ3QKLQkjIGFjY2lkZW50YWxseSBsaW5rIGl0IGludG8gYSBwcm9ncmFtLgotCSMgJHNob3cgImVjaG8gdGltZXN0YW1wID4gJGxpYm9iaiIKLQkjICRvcHRfZHJ5X3J1biB8fCBldmFsICJlY2hvIHRpbWVzdGFtcCA+ICRsaWJvYmoiIHx8IGV4aXQgJD8KLQlleGl0ICRFWElUX1NVQ0NFU1MKLSAgICAgIGZpCi0KLSAgICAgIGlmIHRlc3QgLW4gIiRwaWNfZmxhZyIgfHwgdGVzdCAiJHBpY19tb2RlIiAhPSBkZWZhdWx0OyB0aGVuCi0JIyBPbmx5IGRvIGNvbW1hbmRzIGlmIHdlIHJlYWxseSBoYXZlIGRpZmZlcmVudCBQSUMgb2JqZWN0cy4KLQlyZWxvYWRfb2Jqcz0iJGxpYm9ianMgJHJlbG9hZF9jb252X29ianMiCi0Jb3V0cHV0PSIkbGlib2JqIgotCWZ1bmNfZXhlY3V0ZV9jbWRzICIkcmVsb2FkX2NtZHMiICdleGl0ICQ/JwotICAgICAgZmkKLQotICAgICAgaWYgdGVzdCAtbiAiJGdlbnRvcCI7IHRoZW4KLQlmdW5jX3Nob3dfZXZhbCAnJHtSTX1yICIkZ2VudG9wIicKLSAgICAgIGZpCi0KLSAgICAgIGV4aXQgJEVYSVRfU1VDQ0VTUwotICAgICAgOzsKLQotICAgIHByb2cpCi0gICAgICBjYXNlICRob3N0IGluCi0JKmN5Z3dpbiopIGZ1bmNfc3RyaXBuYW1lICcnICcuZXhlJyAiJG91dHB1dCIKLQkgICAgICAgICAgb3V0cHV0PSRmdW5jX3N0cmlwbmFtZV9yZXN1bHQuZXhlOzsKLSAgICAgIGVzYWMKLSAgICAgIHRlc3QgLW4gIiR2aW5mbyIgJiYgXAotCWZ1bmNfd2FybmluZyAiXGAtdmVyc2lvbi1pbmZvJyBpcyBpZ25vcmVkIGZvciBwcm9ncmFtcyIKLQotICAgICAgdGVzdCAtbiAiJHJlbGVhc2UiICYmIFwKLQlmdW5jX3dhcm5pbmcgIlxgLXJlbGVhc2UnIGlzIGlnbm9yZWQgZm9yIHByb2dyYW1zIgotCi0gICAgICB0ZXN0ICIkcHJlbG9hZCIgPSB5ZXMgXAotICAgICAgICAmJiB0ZXN0ICIkZGxvcGVuX3N1cHBvcnQiID0gdW5rbm93biBcCi0JJiYgdGVzdCAiJGRsb3Blbl9zZWxmIiA9IHVua25vd24gXAotCSYmIHRlc3QgIiRkbG9wZW5fc2VsZl9zdGF0aWMiID0gdW5rbm93biAmJiBcCi0JICBmdW5jX3dhcm5pbmcgIlxgTFRfSU5JVChbZGxvcGVuXSknIG5vdCB1c2VkLiBBc3N1bWluZyBubyBkbG9wZW4gc3VwcG9ydC4iCi0KLSAgICAgIGNhc2UgJGhvc3QgaW4KLSAgICAgICotKi1yaGFwc29keSogfCAqLSotZGFyd2luMS5bMDEyXSkKLQkjIE9uIFJoYXBzb2R5IHJlcGxhY2UgdGhlIEMgbGlicmFyeSBpcyB0aGUgU3lzdGVtIGZyYW1ld29yawotCWNvbXBpbGVfZGVwbGlicz1gJEVDSE8gIiAkY29tcGlsZV9kZXBsaWJzIiB8ICRTRUQgJ3MvIC1sYyAvIFN5c3RlbS5sdGZyYW1ld29yayAvJ2AKLQlmaW5hbGl6ZV9kZXBsaWJzPWAkRUNITyAiICRmaW5hbGl6ZV9kZXBsaWJzIiB8ICRTRUQgJ3MvIC1sYyAvIFN5c3RlbS5sdGZyYW1ld29yayAvJ2AKLQk7OwotICAgICAgZXNhYwotCi0gICAgICBjYXNlICRob3N0IGluCi0gICAgICAqLSotZGFyd2luKikKLQkjIERvbid0IGFsbG93IGxhenkgbGlua2luZywgaXQgYnJlYWtzIEMrKyBnbG9iYWwgY29uc3RydWN0b3JzCi0JIyBCdXQgaXMgc3VwcG9zZWRseSBmaXhlZCBvbiAxMC40IG9yIGxhdGVyICh5YXkhKS4KLQlpZiB0ZXN0ICIkdGFnbmFtZSIgPSBDWFggOyB0aGVuCi0JICBjYXNlICR7TUFDT1NYX0RFUExPWU1FTlRfVEFSR0VULTEwLjB9IGluCi0JICAgIDEwLlswMTIzXSkKLQkgICAgICBmdW5jX2FwcGVuZCBjb21waWxlX2NvbW1hbmQgIiAke3dsfS1iaW5kX2F0X2xvYWQiCi0JICAgICAgZnVuY19hcHBlbmQgZmluYWxpemVfY29tbWFuZCAiICR7d2x9LWJpbmRfYXRfbG9hZCIKLQkgICAgOzsKLQkgIGVzYWMKLQlmaQotCSMgVGltZSB0byBjaGFuZ2UgYWxsIG91ciAiZm9vLmx0ZnJhbWV3b3JrIiBzdHVmZiBiYWNrIHRvICItZnJhbWV3b3JrIGZvbyIKLQljb21waWxlX2RlcGxpYnM9YCRFQ0hPICIgJGNvbXBpbGVfZGVwbGlicyIgfCAkU0VEICdzJSBcKFteICRdKlwpLmx0ZnJhbWV3b3JrJSAtZnJhbWV3b3JrIFwxJWcnYAotCWZpbmFsaXplX2RlcGxpYnM9YCRFQ0hPICIgJGZpbmFsaXplX2RlcGxpYnMiIHwgJFNFRCAncyUgXChbXiAkXSpcKS5sdGZyYW1ld29yayUgLWZyYW1ld29yayBcMSVnJ2AKLQk7OwotICAgICAgZXNhYwotCi0KLSAgICAgICMgbW92ZSBsaWJyYXJ5IHNlYXJjaCBwYXRocyB0aGF0IGNvaW5jaWRlIHdpdGggcGF0aHMgdG8gbm90IHlldAotICAgICAgIyBpbnN0YWxsZWQgbGlicmFyaWVzIHRvIHRoZSBiZWdpbm5pbmcgb2YgdGhlIGxpYnJhcnkgc2VhcmNoIGxpc3QKLSAgICAgIG5ld19saWJzPQotICAgICAgZm9yIHBhdGggaW4gJG5vdGluc3RfcGF0aDsgZG8KLQljYXNlICIgJG5ld19saWJzICIgaW4KLQkqIiAtTCRwYXRoLyRvYmpkaXIgIiopIDs7Ci0JKikKLQkgIGNhc2UgIiAkY29tcGlsZV9kZXBsaWJzICIgaW4KLQkgICoiIC1MJHBhdGgvJG9iamRpciAiKikKLQkgICAgZnVuY19hcHBlbmQgbmV3X2xpYnMgIiAtTCRwYXRoLyRvYmpkaXIiIDs7Ci0JICBlc2FjCi0JICA7OwotCWVzYWMKLSAgICAgIGRvbmUKLSAgICAgIGZvciBkZXBsaWIgaW4gJGNvbXBpbGVfZGVwbGliczsgZG8KLQljYXNlICRkZXBsaWIgaW4KLQktTCopCi0JICBjYXNlICIgJG5ld19saWJzICIgaW4KLQkgICoiICRkZXBsaWIgIiopIDs7Ci0JICAqKSBmdW5jX2FwcGVuZCBuZXdfbGlicyAiICRkZXBsaWIiIDs7Ci0JICBlc2FjCi0JICA7OwotCSopIGZ1bmNfYXBwZW5kIG5ld19saWJzICIgJGRlcGxpYiIgOzsKLQllc2FjCi0gICAgICBkb25lCi0gICAgICBjb21waWxlX2RlcGxpYnM9IiRuZXdfbGlicyIKLQotCi0gICAgICBmdW5jX2FwcGVuZCBjb21waWxlX2NvbW1hbmQgIiAkY29tcGlsZV9kZXBsaWJzIgotICAgICAgZnVuY19hcHBlbmQgZmluYWxpemVfY29tbWFuZCAiICRmaW5hbGl6ZV9kZXBsaWJzIgotCi0gICAgICBpZiB0ZXN0IC1uICIkcnBhdGgkeHJwYXRoIjsgdGhlbgotCSMgSWYgdGhlIHVzZXIgc3BlY2lmaWVkIGFueSBycGF0aCBmbGFncywgdGhlbiBhZGQgdGhlbS4KLQlmb3IgbGliZGlyIGluICRycGF0aCAkeHJwYXRoOyBkbwotCSAgIyBUaGlzIGlzIHRoZSBtYWdpYyB0byB1c2UgLXJwYXRoLgotCSAgY2FzZSAiJGZpbmFsaXplX3JwYXRoICIgaW4KLQkgICoiICRsaWJkaXIgIiopIDs7Ci0JICAqKSBmdW5jX2FwcGVuZCBmaW5hbGl6ZV9ycGF0aCAiICRsaWJkaXIiIDs7Ci0JICBlc2FjCi0JZG9uZQotICAgICAgZmkKLQotICAgICAgIyBOb3cgaGFyZGNvZGUgdGhlIGxpYnJhcnkgcGF0aHMKLSAgICAgIHJwYXRoPQotICAgICAgaGFyZGNvZGVfbGliZGlycz0KLSAgICAgIGZvciBsaWJkaXIgaW4gJGNvbXBpbGVfcnBhdGggJGZpbmFsaXplX3JwYXRoOyBkbwotCWlmIHRlc3QgLW4gIiRoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjIjsgdGhlbgotCSAgaWYgdGVzdCAtbiAiJGhhcmRjb2RlX2xpYmRpcl9zZXBhcmF0b3IiOyB0aGVuCi0JICAgIGlmIHRlc3QgLXogIiRoYXJkY29kZV9saWJkaXJzIjsgdGhlbgotCSAgICAgIGhhcmRjb2RlX2xpYmRpcnM9IiRsaWJkaXIiCi0JICAgIGVsc2UKLQkgICAgICAjIEp1c3QgYWNjdW11bGF0ZSB0aGUgdW5pcXVlIGxpYmRpcnMuCi0JICAgICAgY2FzZSAkaGFyZGNvZGVfbGliZGlyX3NlcGFyYXRvciRoYXJkY29kZV9saWJkaXJzJGhhcmRjb2RlX2xpYmRpcl9zZXBhcmF0b3IgaW4KLQkgICAgICAqIiRoYXJkY29kZV9saWJkaXJfc2VwYXJhdG9yJGxpYmRpciRoYXJkY29kZV9saWJkaXJfc2VwYXJhdG9yIiopCi0JCTs7Ci0JICAgICAgKikKLQkJZnVuY19hcHBlbmQgaGFyZGNvZGVfbGliZGlycyAiJGhhcmRjb2RlX2xpYmRpcl9zZXBhcmF0b3IkbGliZGlyIgotCQk7OwotCSAgICAgIGVzYWMKLQkgICAgZmkKLQkgIGVsc2UKLQkgICAgZXZhbCBmbGFnPVwiJGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWNcIgotCSAgICBmdW5jX2FwcGVuZCBycGF0aCAiICRmbGFnIgotCSAgZmkKLQllbGlmIHRlc3QgLW4gIiRydW5wYXRoX3ZhciI7IHRoZW4KLQkgIGNhc2UgIiRwZXJtX3JwYXRoICIgaW4KLQkgICoiICRsaWJkaXIgIiopIDs7Ci0JICAqKSBmdW5jX2FwcGVuZCBwZXJtX3JwYXRoICIgJGxpYmRpciIgOzsKLQkgIGVzYWMKLQlmaQotCWNhc2UgJGhvc3QgaW4KLQkqLSotY3lnd2luKiB8ICotKi1taW5ndyogfCAqLSotcHczMiogfCAqLSotb3MyKiB8ICotY2VnY2MqKQotCSAgdGVzdGJpbmRpcj1gJHtFQ0hPfSAiJGxpYmRpciIgfCAke1NFRH0gLWUgJ3MqL2xpYiQqL2JpbionYAotCSAgY2FzZSA6JGRsbHNlYXJjaHBhdGg6IGluCi0JICAqIjokbGliZGlyOiIqKSA7OwotCSAgOjopIGRsbHNlYXJjaHBhdGg9JGxpYmRpcjs7Ci0JICAqKSBmdW5jX2FwcGVuZCBkbGxzZWFyY2hwYXRoICI6JGxpYmRpciI7OwotCSAgZXNhYwotCSAgY2FzZSA6JGRsbHNlYXJjaHBhdGg6IGluCi0JICAqIjokdGVzdGJpbmRpcjoiKikgOzsKLQkgIDo6KSBkbGxzZWFyY2hwYXRoPSR0ZXN0YmluZGlyOzsKLQkgICopIGZ1bmNfYXBwZW5kIGRsbHNlYXJjaHBhdGggIjokdGVzdGJpbmRpciI7OwotCSAgZXNhYwotCSAgOzsKLQllc2FjCi0gICAgICBkb25lCi0gICAgICAjIFN1YnN0aXR1dGUgdGhlIGhhcmRjb2RlZCBsaWJkaXJzIGludG8gdGhlIHJwYXRoLgotICAgICAgaWYgdGVzdCAtbiAiJGhhcmRjb2RlX2xpYmRpcl9zZXBhcmF0b3IiICYmCi0JIHRlc3QgLW4gIiRoYXJkY29kZV9saWJkaXJzIjsgdGhlbgotCWxpYmRpcj0iJGhhcmRjb2RlX2xpYmRpcnMiCi0JZXZhbCBycGF0aD1cIiAkaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlY1wiCi0gICAgICBmaQotICAgICAgY29tcGlsZV9ycGF0aD0iJHJwYXRoIgotCi0gICAgICBycGF0aD0KLSAgICAgIGhhcmRjb2RlX2xpYmRpcnM9Ci0gICAgICBmb3IgbGliZGlyIGluICRmaW5hbGl6ZV9ycGF0aDsgZG8KLQlpZiB0ZXN0IC1uICIkaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYyI7IHRoZW4KLQkgIGlmIHRlc3QgLW4gIiRoYXJkY29kZV9saWJkaXJfc2VwYXJhdG9yIjsgdGhlbgotCSAgICBpZiB0ZXN0IC16ICIkaGFyZGNvZGVfbGliZGlycyI7IHRoZW4KLQkgICAgICBoYXJkY29kZV9saWJkaXJzPSIkbGliZGlyIgotCSAgICBlbHNlCi0JICAgICAgIyBKdXN0IGFjY3VtdWxhdGUgdGhlIHVuaXF1ZSBsaWJkaXJzLgotCSAgICAgIGNhc2UgJGhhcmRjb2RlX2xpYmRpcl9zZXBhcmF0b3IkaGFyZGNvZGVfbGliZGlycyRoYXJkY29kZV9saWJkaXJfc2VwYXJhdG9yIGluCi0JICAgICAgKiIkaGFyZGNvZGVfbGliZGlyX3NlcGFyYXRvciRsaWJkaXIkaGFyZGNvZGVfbGliZGlyX3NlcGFyYXRvciIqKQotCQk7OwotCSAgICAgICopCi0JCWZ1bmNfYXBwZW5kIGhhcmRjb2RlX2xpYmRpcnMgIiRoYXJkY29kZV9saWJkaXJfc2VwYXJhdG9yJGxpYmRpciIKLQkJOzsKLQkgICAgICBlc2FjCi0JICAgIGZpCi0JICBlbHNlCi0JICAgIGV2YWwgZmxhZz1cIiRoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjXCIKLQkgICAgZnVuY19hcHBlbmQgcnBhdGggIiAkZmxhZyIKLQkgIGZpCi0JZWxpZiB0ZXN0IC1uICIkcnVucGF0aF92YXIiOyB0aGVuCi0JICBjYXNlICIkZmluYWxpemVfcGVybV9ycGF0aCAiIGluCi0JICAqIiAkbGliZGlyICIqKSA7OwotCSAgKikgZnVuY19hcHBlbmQgZmluYWxpemVfcGVybV9ycGF0aCAiICRsaWJkaXIiIDs7Ci0JICBlc2FjCi0JZmkKLSAgICAgIGRvbmUKLSAgICAgICMgU3Vic3RpdHV0ZSB0aGUgaGFyZGNvZGVkIGxpYmRpcnMgaW50byB0aGUgcnBhdGguCi0gICAgICBpZiB0ZXN0IC1uICIkaGFyZGNvZGVfbGliZGlyX3NlcGFyYXRvciIgJiYKLQkgdGVzdCAtbiAiJGhhcmRjb2RlX2xpYmRpcnMiOyB0aGVuCi0JbGliZGlyPSIkaGFyZGNvZGVfbGliZGlycyIKLQlldmFsIHJwYXRoPVwiICRoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjXCIKLSAgICAgIGZpCi0gICAgICBmaW5hbGl6ZV9ycGF0aD0iJHJwYXRoIgotCi0gICAgICBpZiB0ZXN0IC1uICIkbGlib2JqcyIgJiYgdGVzdCAiJGJ1aWxkX29sZF9saWJzIiA9IHllczsgdGhlbgotCSMgVHJhbnNmb3JtIGFsbCB0aGUgbGlicmFyeSBvYmplY3RzIGludG8gc3RhbmRhcmQgb2JqZWN0cy4KLQljb21waWxlX2NvbW1hbmQ9YCRFQ0hPICIkY29tcGlsZV9jb21tYW5kIiB8ICRTUDJOTCB8ICRTRUQgIiRsbzJvIiB8ICROTDJTUGAKLQlmaW5hbGl6ZV9jb21tYW5kPWAkRUNITyAiJGZpbmFsaXplX2NvbW1hbmQiIHwgJFNQMk5MIHwgJFNFRCAiJGxvMm8iIHwgJE5MMlNQYAotICAgICAgZmkKLQotICAgICAgZnVuY19nZW5lcmF0ZV9kbHN5bXMgIiRvdXRwdXRuYW1lIiAiQFBST0dSQU1AIiAibm8iCi0KLSAgICAgICMgdGVtcGxhdGUgcHJlbGlua2luZyBzdGVwCi0gICAgICBpZiB0ZXN0IC1uICIkcHJlbGlua19jbWRzIjsgdGhlbgotCWZ1bmNfZXhlY3V0ZV9jbWRzICIkcHJlbGlua19jbWRzIiAnZXhpdCAkPycKLSAgICAgIGZpCi0KLSAgICAgIHdyYXBwZXJzX3JlcXVpcmVkPXllcwotICAgICAgY2FzZSAkaG9zdCBpbgotICAgICAgKmNlZ2NjKiB8ICptaW5ndzMyY2UqKQotICAgICAgICAjIERpc2FibGUgd3JhcHBlcnMgZm9yIGNlZ2NjIGFuZCBtaW5ndzMyY2UgaG9zdHMsIHdlIGFyZSBjcm9zcyBjb21waWxpbmcgYW55d2F5LgotICAgICAgICB3cmFwcGVyc19yZXF1aXJlZD1ubwotICAgICAgICA7OwotICAgICAgKmN5Z3dpbiogfCAqbWluZ3cqICkKLSAgICAgICAgaWYgdGVzdCAiJGJ1aWxkX2xpYnRvb2xfbGlicyIgIT0geWVzOyB0aGVuCi0gICAgICAgICAgd3JhcHBlcnNfcmVxdWlyZWQ9bm8KLSAgICAgICAgZmkKLSAgICAgICAgOzsKLSAgICAgICopCi0gICAgICAgIGlmIHRlc3QgIiRuZWVkX3JlbGluayIgPSBubyB8fCB0ZXN0ICIkYnVpbGRfbGlidG9vbF9saWJzIiAhPSB5ZXM7IHRoZW4KLSAgICAgICAgICB3cmFwcGVyc19yZXF1aXJlZD1ubwotICAgICAgICBmaQotICAgICAgICA7OwotICAgICAgZXNhYwotICAgICAgaWYgdGVzdCAiJHdyYXBwZXJzX3JlcXVpcmVkIiA9IG5vOyB0aGVuCi0JIyBSZXBsYWNlIHRoZSBvdXRwdXQgZmlsZSBzcGVjaWZpY2F0aW9uLgotCWNvbXBpbGVfY29tbWFuZD1gJEVDSE8gIiRjb21waWxlX2NvbW1hbmQiIHwgJFNFRCAncyVAT1VUUFVUQCUnIiRvdXRwdXQiJyVnJ2AKLQlsaW5rX2NvbW1hbmQ9IiRjb21waWxlX2NvbW1hbmQkY29tcGlsZV9ycGF0aCIKLQotCSMgV2UgaGF2ZSBubyB1bmluc3RhbGxlZCBsaWJyYXJ5IGRlcGVuZGVuY2llcywgc28gZmluYWxpemUgcmlnaHQgbm93LgotCWV4aXRfc3RhdHVzPTAKLQlmdW5jX3Nob3dfZXZhbCAiJGxpbmtfY29tbWFuZCIgJ2V4aXRfc3RhdHVzPSQ/JwotCi0JaWYgdGVzdCAtbiAiJHBvc3RsaW5rX2NtZHMiOyB0aGVuCi0JICBmdW5jX3RvX3Rvb2xfZmlsZSAiJG91dHB1dCIKLQkgIHBvc3RsaW5rX2NtZHM9YGZ1bmNfZWNob19hbGwgIiRwb3N0bGlua19jbWRzIiB8ICRTRUQgLWUgJ3MlQE9VVFBVVEAlJyIkb3V0cHV0IiclZycgLWUgJ3MlQFRPT0xfT1VUUFVUQCUnIiRmdW5jX3RvX3Rvb2xfZmlsZV9yZXN1bHQiJyVnJ2AKLQkgIGZ1bmNfZXhlY3V0ZV9jbWRzICIkcG9zdGxpbmtfY21kcyIgJ2V4aXQgJD8nCi0JZmkKLQotCSMgRGVsZXRlIHRoZSBnZW5lcmF0ZWQgZmlsZXMuCi0JaWYgdGVzdCAtZiAiJG91dHB1dF9vYmpkaXIvJHtvdXRwdXRuYW1lfVMuJHtvYmpleHR9IjsgdGhlbgotCSAgZnVuY19zaG93X2V2YWwgJyRSTSAiJG91dHB1dF9vYmpkaXIvJHtvdXRwdXRuYW1lfVMuJHtvYmpleHR9IicKLQlmaQotCi0JZXhpdCAkZXhpdF9zdGF0dXMKLSAgICAgIGZpCi0KLSAgICAgIGlmIHRlc3QgLW4gIiRjb21waWxlX3NobGlicGF0aCRmaW5hbGl6ZV9zaGxpYnBhdGgiOyB0aGVuCi0JY29tcGlsZV9jb21tYW5kPSIkc2hsaWJwYXRoX3Zhcj1cIiRjb21waWxlX3NobGlicGF0aCRmaW5hbGl6ZV9zaGxpYnBhdGhcJCRzaGxpYnBhdGhfdmFyXCIgJGNvbXBpbGVfY29tbWFuZCIKLSAgICAgIGZpCi0gICAgICBpZiB0ZXN0IC1uICIkZmluYWxpemVfc2hsaWJwYXRoIjsgdGhlbgotCWZpbmFsaXplX2NvbW1hbmQ9IiRzaGxpYnBhdGhfdmFyPVwiJGZpbmFsaXplX3NobGlicGF0aFwkJHNobGlicGF0aF92YXJcIiAkZmluYWxpemVfY29tbWFuZCIKLSAgICAgIGZpCi0KLSAgICAgIGNvbXBpbGVfdmFyPQotICAgICAgZmluYWxpemVfdmFyPQotICAgICAgaWYgdGVzdCAtbiAiJHJ1bnBhdGhfdmFyIjsgdGhlbgotCWlmIHRlc3QgLW4gIiRwZXJtX3JwYXRoIjsgdGhlbgotCSAgIyBXZSBzaG91bGQgc2V0IHRoZSBydW5wYXRoX3Zhci4KLQkgIHJwYXRoPQotCSAgZm9yIGRpciBpbiAkcGVybV9ycGF0aDsgZG8KLQkgICAgZnVuY19hcHBlbmQgcnBhdGggIiRkaXI6IgotCSAgZG9uZQotCSAgY29tcGlsZV92YXI9IiRydW5wYXRoX3Zhcj1cIiRycGF0aFwkJHJ1bnBhdGhfdmFyXCIgIgotCWZpCi0JaWYgdGVzdCAtbiAiJGZpbmFsaXplX3Blcm1fcnBhdGgiOyB0aGVuCi0JICAjIFdlIHNob3VsZCBzZXQgdGhlIHJ1bnBhdGhfdmFyLgotCSAgcnBhdGg9Ci0JICBmb3IgZGlyIGluICRmaW5hbGl6ZV9wZXJtX3JwYXRoOyBkbwotCSAgICBmdW5jX2FwcGVuZCBycGF0aCAiJGRpcjoiCi0JICBkb25lCi0JICBmaW5hbGl6ZV92YXI9IiRydW5wYXRoX3Zhcj1cIiRycGF0aFwkJHJ1bnBhdGhfdmFyXCIgIgotCWZpCi0gICAgICBmaQotCi0gICAgICBpZiB0ZXN0ICIkbm9faW5zdGFsbCIgPSB5ZXM7IHRoZW4KLQkjIFdlIGRvbid0IG5lZWQgdG8gY3JlYXRlIGEgd3JhcHBlciBzY3JpcHQuCi0JbGlua19jb21tYW5kPSIkY29tcGlsZV92YXIkY29tcGlsZV9jb21tYW5kJGNvbXBpbGVfcnBhdGgiCi0JIyBSZXBsYWNlIHRoZSBvdXRwdXQgZmlsZSBzcGVjaWZpY2F0aW9uLgotCWxpbmtfY29tbWFuZD1gJEVDSE8gIiRsaW5rX2NvbW1hbmQiIHwgJFNFRCAncyVAT1VUUFVUQCUnIiRvdXRwdXQiJyVnJ2AKLQkjIERlbGV0ZSB0aGUgb2xkIG91dHB1dCBmaWxlLgotCSRvcHRfZHJ5X3J1biB8fCAkUk0gJG91dHB1dAotCSMgTGluayB0aGUgZXhlY3V0YWJsZSBhbmQgZXhpdAotCWZ1bmNfc2hvd19ldmFsICIkbGlua19jb21tYW5kIiAnZXhpdCAkPycKLQotCWlmIHRlc3QgLW4gIiRwb3N0bGlua19jbWRzIjsgdGhlbgotCSAgZnVuY190b190b29sX2ZpbGUgIiRvdXRwdXQiCi0JICBwb3N0bGlua19jbWRzPWBmdW5jX2VjaG9fYWxsICIkcG9zdGxpbmtfY21kcyIgfCAkU0VEIC1lICdzJUBPVVRQVVRAJSciJG91dHB1dCInJWcnIC1lICdzJUBUT09MX09VVFBVVEAlJyIkZnVuY190b190b29sX2ZpbGVfcmVzdWx0IiclZydgCi0JICBmdW5jX2V4ZWN1dGVfY21kcyAiJHBvc3RsaW5rX2NtZHMiICdleGl0ICQ/JwotCWZpCi0KLQlleGl0ICRFWElUX1NVQ0NFU1MKLSAgICAgIGZpCi0KLSAgICAgIGlmIHRlc3QgIiRoYXJkY29kZV9hY3Rpb24iID0gcmVsaW5rOyB0aGVuCi0JIyBGYXN0IGluc3RhbGxhdGlvbiBpcyBub3Qgc3VwcG9ydGVkCi0JbGlua19jb21tYW5kPSIkY29tcGlsZV92YXIkY29tcGlsZV9jb21tYW5kJGNvbXBpbGVfcnBhdGgiCi0JcmVsaW5rX2NvbW1hbmQ9IiRmaW5hbGl6ZV92YXIkZmluYWxpemVfY29tbWFuZCRmaW5hbGl6ZV9ycGF0aCIKLQotCWZ1bmNfd2FybmluZyAidGhpcyBwbGF0Zm9ybSBkb2VzIG5vdCBsaWtlIHVuaW5zdGFsbGVkIHNoYXJlZCBsaWJyYXJpZXMiCi0JZnVuY193YXJuaW5nICJcYCRvdXRwdXQnIHdpbGwgYmUgcmVsaW5rZWQgZHVyaW5nIGluc3RhbGxhdGlvbiIKLSAgICAgIGVsc2UKLQlpZiB0ZXN0ICIkZmFzdF9pbnN0YWxsIiAhPSBubzsgdGhlbgotCSAgbGlua19jb21tYW5kPSIkZmluYWxpemVfdmFyJGNvbXBpbGVfY29tbWFuZCRmaW5hbGl6ZV9ycGF0aCIKLQkgIGlmIHRlc3QgIiRmYXN0X2luc3RhbGwiID0geWVzOyB0aGVuCi0JICAgIHJlbGlua19jb21tYW5kPWAkRUNITyAiJGNvbXBpbGVfdmFyJGNvbXBpbGVfY29tbWFuZCRjb21waWxlX3JwYXRoIiB8ICRTRUQgJ3MlQE9VVFBVVEAlXCRwcm9nZGlyL1wkZmlsZSVnJ2AKLQkgIGVsc2UKLQkgICAgIyBmYXN0X2luc3RhbGwgaXMgc2V0IHRvIG5lZWRsZXNzCi0JICAgIHJlbGlua19jb21tYW5kPQotCSAgZmkKLQllbHNlCi0JICBsaW5rX2NvbW1hbmQ9IiRjb21waWxlX3ZhciRjb21waWxlX2NvbW1hbmQkY29tcGlsZV9ycGF0aCIKLQkgIHJlbGlua19jb21tYW5kPSIkZmluYWxpemVfdmFyJGZpbmFsaXplX2NvbW1hbmQkZmluYWxpemVfcnBhdGgiCi0JZmkKLSAgICAgIGZpCi0KLSAgICAgICMgUmVwbGFjZSB0aGUgb3V0cHV0IGZpbGUgc3BlY2lmaWNhdGlvbi4KLSAgICAgIGxpbmtfY29tbWFuZD1gJEVDSE8gIiRsaW5rX2NvbW1hbmQiIHwgJFNFRCAncyVAT1VUUFVUQCUnIiRvdXRwdXRfb2JqZGlyLyRvdXRwdXRuYW1lIiclZydgCi0KLSAgICAgICMgRGVsZXRlIHRoZSBvbGQgb3V0cHV0IGZpbGVzLgotICAgICAgJG9wdF9kcnlfcnVuIHx8ICRSTSAkb3V0cHV0ICRvdXRwdXRfb2JqZGlyLyRvdXRwdXRuYW1lICRvdXRwdXRfb2JqZGlyL2x0LSRvdXRwdXRuYW1lCi0KLSAgICAgIGZ1bmNfc2hvd19ldmFsICIkbGlua19jb21tYW5kIiAnZXhpdCAkPycKLQotICAgICAgaWYgdGVzdCAtbiAiJHBvc3RsaW5rX2NtZHMiOyB0aGVuCi0JZnVuY190b190b29sX2ZpbGUgIiRvdXRwdXRfb2JqZGlyLyRvdXRwdXRuYW1lIgotCXBvc3RsaW5rX2NtZHM9YGZ1bmNfZWNob19hbGwgIiRwb3N0bGlua19jbWRzIiB8ICRTRUQgLWUgJ3MlQE9VVFBVVEAlJyIkb3V0cHV0X29iamRpci8kb3V0cHV0bmFtZSInJWcnIC1lICdzJUBUT09MX09VVFBVVEAlJyIkZnVuY190b190b29sX2ZpbGVfcmVzdWx0IiclZydgCi0JZnVuY19leGVjdXRlX2NtZHMgIiRwb3N0bGlua19jbWRzIiAnZXhpdCAkPycKLSAgICAgIGZpCi0KLSAgICAgICMgTm93IGNyZWF0ZSB0aGUgd3JhcHBlciBzY3JpcHQuCi0gICAgICBmdW5jX3ZlcmJvc2UgImNyZWF0aW5nICRvdXRwdXQiCi0KLSAgICAgICMgUXVvdGUgdGhlIHJlbGluayBjb21tYW5kIGZvciBzaGlwcGluZy4KLSAgICAgIGlmIHRlc3QgLW4gIiRyZWxpbmtfY29tbWFuZCI7IHRoZW4KLQkjIFByZXNlcnZlIGFueSB2YXJpYWJsZXMgdGhhdCBtYXkgYWZmZWN0IGNvbXBpbGVyIGJlaGF2aW9yCi0JZm9yIHZhciBpbiAkdmFyaWFibGVzX3NhdmVkX2Zvcl9yZWxpbms7IGRvCi0JICBpZiBldmFsIHRlc3QgLXogXCJcJHskdmFyK3NldH1cIjsgdGhlbgotCSAgICByZWxpbmtfY29tbWFuZD0ieyB0ZXN0IC16IFwiXCR7JHZhcitzZXR9XCIgfHwgJGx0X3Vuc2V0ICR2YXIgfHwgeyAkdmFyPTsgZXhwb3J0ICR2YXI7IH07IH07ICRyZWxpbmtfY29tbWFuZCIKLQkgIGVsaWYgZXZhbCB2YXJfdmFsdWU9XCQkdmFyOyB0ZXN0IC16ICIkdmFyX3ZhbHVlIjsgdGhlbgotCSAgICByZWxpbmtfY29tbWFuZD0iJHZhcj07IGV4cG9ydCAkdmFyOyAkcmVsaW5rX2NvbW1hbmQiCi0JICBlbHNlCi0JICAgIGZ1bmNfcXVvdGVfZm9yX2V2YWwgIiR2YXJfdmFsdWUiCi0JICAgIHJlbGlua19jb21tYW5kPSIkdmFyPSRmdW5jX3F1b3RlX2Zvcl9ldmFsX3Jlc3VsdDsgZXhwb3J0ICR2YXI7ICRyZWxpbmtfY29tbWFuZCIKLQkgIGZpCi0JZG9uZQotCXJlbGlua19jb21tYW5kPSIoY2QgYHB3ZGA7ICRyZWxpbmtfY29tbWFuZCkiCi0JcmVsaW5rX2NvbW1hbmQ9YCRFQ0hPICIkcmVsaW5rX2NvbW1hbmQiIHwgJFNFRCAiJHNlZF9xdW90ZV9zdWJzdCJgCi0gICAgICBmaQotCi0gICAgICAjIE9ubHkgYWN0dWFsbHkgZG8gdGhpbmdzIGlmIG5vdCBpbiBkcnkgcnVuIG1vZGUuCi0gICAgICAkb3B0X2RyeV9ydW4gfHwgewotCSMgd2luMzIgd2lsbCB0aGluayB0aGUgc2NyaXB0IGlzIGEgYmluYXJ5IGlmIGl0IGhhcwotCSMgYSAuZXhlIHN1ZmZpeCwgc28gd2Ugc3RyaXAgaXQgb2ZmIGhlcmUuCi0JY2FzZSAkb3V0cHV0IGluCi0JICAqLmV4ZSkgZnVuY19zdHJpcG5hbWUgJycgJy5leGUnICIkb3V0cHV0IgotCSAgICAgICAgIG91dHB1dD0kZnVuY19zdHJpcG5hbWVfcmVzdWx0IDs7Ci0JZXNhYwotCSMgdGVzdCBmb3IgY3lnd2luIGJlY2F1c2UgbXYgZmFpbHMgdy9vIC5leGUgZXh0ZW5zaW9ucwotCWNhc2UgJGhvc3QgaW4KLQkgICpjeWd3aW4qKQotCSAgICBleGVleHQ9LmV4ZQotCSAgICBmdW5jX3N0cmlwbmFtZSAnJyAnLmV4ZScgIiRvdXRwdXRuYW1lIgotCSAgICBvdXRwdXRuYW1lPSRmdW5jX3N0cmlwbmFtZV9yZXN1bHQgOzsKLQkgICopIGV4ZWV4dD0gOzsKLQllc2FjCi0JY2FzZSAkaG9zdCBpbgotCSAgKmN5Z3dpbiogfCAqbWluZ3cqICkKLQkgICAgZnVuY19kaXJuYW1lX2FuZF9iYXNlbmFtZSAiJG91dHB1dCIgIiIgIi4iCi0JICAgIG91dHB1dF9uYW1lPSRmdW5jX2Jhc2VuYW1lX3Jlc3VsdAotCSAgICBvdXRwdXRfcGF0aD0kZnVuY19kaXJuYW1lX3Jlc3VsdAotCSAgICBjd3JhcHBlcnNvdXJjZT0iJG91dHB1dF9wYXRoLyRvYmpkaXIvbHQtJG91dHB1dF9uYW1lLmMiCi0JICAgIGN3cmFwcGVyPSIkb3V0cHV0X3BhdGgvJG91dHB1dF9uYW1lLmV4ZSIKLQkgICAgJFJNICRjd3JhcHBlcnNvdXJjZSAkY3dyYXBwZXIKLQkgICAgdHJhcCAiJFJNICRjd3JhcHBlcnNvdXJjZSAkY3dyYXBwZXI7IGV4aXQgJEVYSVRfRkFJTFVSRSIgMSAyIDE1Ci0KLQkgICAgZnVuY19lbWl0X2N3cmFwcGVyZXhlX3NyYyA+ICRjd3JhcHBlcnNvdXJjZQotCi0JICAgICMgVGhlIHdyYXBwZXIgZXhlY3V0YWJsZSBpcyBidWlsdCB1c2luZyB0aGUgJGhvc3QgY29tcGlsZXIsCi0JICAgICMgYmVjYXVzZSBpdCBjb250YWlucyAkaG9zdCBwYXRocyBhbmQgZmlsZXMuIElmIGNyb3NzLQotCSAgICAjIGNvbXBpbGluZywgaXQsIGxpa2UgdGhlIHRhcmdldCBleGVjdXRhYmxlLCBtdXN0IGJlCi0JICAgICMgZXhlY3V0ZWQgb24gdGhlICRob3N0IG9yIHVuZGVyIGFuIGVtdWxhdGlvbiBlbnZpcm9ubWVudC4KLQkgICAgJG9wdF9kcnlfcnVuIHx8IHsKLQkgICAgICAkTFRDQyAkTFRDRkxBR1MgLW8gJGN3cmFwcGVyICRjd3JhcHBlcnNvdXJjZQotCSAgICAgICRTVFJJUCAkY3dyYXBwZXIKLQkgICAgfQotCi0JICAgICMgTm93LCBjcmVhdGUgdGhlIHdyYXBwZXIgc2NyaXB0IGZvciBmdW5jX3NvdXJjZSB1c2U6Ci0JICAgIGZ1bmNfbHR3cmFwcGVyX3NjcmlwdG5hbWUgJGN3cmFwcGVyCi0JICAgICRSTSAkZnVuY19sdHdyYXBwZXJfc2NyaXB0bmFtZV9yZXN1bHQKLQkgICAgdHJhcCAiJFJNICRmdW5jX2x0d3JhcHBlcl9zY3JpcHRuYW1lX3Jlc3VsdDsgZXhpdCAkRVhJVF9GQUlMVVJFIiAxIDIgMTUKLQkgICAgJG9wdF9kcnlfcnVuIHx8IHsKLQkgICAgICAjIG5vdGU6IHRoaXMgc2NyaXB0IHdpbGwgbm90IGJlIGV4ZWN1dGVkLCBzbyBkbyBub3QgY2htb2QuCi0JICAgICAgaWYgdGVzdCAieCRidWlsZCIgPSAieCRob3N0IiA7IHRoZW4KLQkJJGN3cmFwcGVyIC0tbHQtZHVtcC1zY3JpcHQgPiAkZnVuY19sdHdyYXBwZXJfc2NyaXB0bmFtZV9yZXN1bHQKLQkgICAgICBlbHNlCi0JCWZ1bmNfZW1pdF93cmFwcGVyIG5vID4gJGZ1bmNfbHR3cmFwcGVyX3NjcmlwdG5hbWVfcmVzdWx0Ci0JICAgICAgZmkKLQkgICAgfQotCSAgOzsKLQkgICogKQotCSAgICAkUk0gJG91dHB1dAotCSAgICB0cmFwICIkUk0gJG91dHB1dDsgZXhpdCAkRVhJVF9GQUlMVVJFIiAxIDIgMTUKLQotCSAgICBmdW5jX2VtaXRfd3JhcHBlciBubyA+ICRvdXRwdXQKLQkgICAgY2htb2QgK3ggJG91dHB1dAotCSAgOzsKLQllc2FjCi0gICAgICB9Ci0gICAgICBleGl0ICRFWElUX1NVQ0NFU1MKLSAgICAgIDs7Ci0gICAgZXNhYwotCi0gICAgIyBTZWUgaWYgd2UgbmVlZCB0byBidWlsZCBhbiBvbGQtZmFzaGlvbmVkIGFyY2hpdmUuCi0gICAgZm9yIG9sZGxpYiBpbiAkb2xkbGliczsgZG8KLQotICAgICAgaWYgdGVzdCAiJGJ1aWxkX2xpYnRvb2xfbGlicyIgPSBjb252ZW5pZW5jZTsgdGhlbgotCW9sZG9ianM9IiRsaWJvYmpzX3NhdmUgJHN5bWZpbGVvYmoiCi0JYWRkbGlicz0iJGNvbnZlbmllbmNlIgotCWJ1aWxkX2xpYnRvb2xfbGlicz1ubwotICAgICAgZWxzZQotCWlmIHRlc3QgIiRidWlsZF9saWJ0b29sX2xpYnMiID0gbW9kdWxlOyB0aGVuCi0JICBvbGRvYmpzPSIkbGlib2Jqc19zYXZlIgotCSAgYnVpbGRfbGlidG9vbF9saWJzPW5vCi0JZWxzZQotCSAgb2xkb2Jqcz0iJG9sZF9kZXBsaWJzICRub25fcGljX29iamVjdHMiCi0JICBpZiB0ZXN0ICIkcHJlbG9hZCIgPSB5ZXMgJiYgdGVzdCAtZiAiJHN5bWZpbGVvYmoiOyB0aGVuCi0JICAgIGZ1bmNfYXBwZW5kIG9sZG9ianMgIiAkc3ltZmlsZW9iaiIKLQkgIGZpCi0JZmkKLQlhZGRsaWJzPSIkb2xkX2NvbnZlbmllbmNlIgotICAgICAgZmkKLQotICAgICAgaWYgdGVzdCAtbiAiJGFkZGxpYnMiOyB0aGVuCi0JZ2VudG9wPSIkb3V0cHV0X29iamRpci8ke291dHB1dG5hbWV9eCIKLQlmdW5jX2FwcGVuZCBnZW5lcmF0ZWQgIiAkZ2VudG9wIgotCi0JZnVuY19leHRyYWN0X2FyY2hpdmVzICRnZW50b3AgJGFkZGxpYnMKLQlmdW5jX2FwcGVuZCBvbGRvYmpzICIgJGZ1bmNfZXh0cmFjdF9hcmNoaXZlc19yZXN1bHQiCi0gICAgICBmaQotCi0gICAgICAjIERvIGVhY2ggY29tbWFuZCBpbiB0aGUgYXJjaGl2ZSBjb21tYW5kcy4KLSAgICAgIGlmIHRlc3QgLW4gIiRvbGRfYXJjaGl2ZV9mcm9tX25ld19jbWRzIiAmJiB0ZXN0ICIkYnVpbGRfbGlidG9vbF9saWJzIiA9IHllczsgdGhlbgotCWNtZHM9JG9sZF9hcmNoaXZlX2Zyb21fbmV3X2NtZHMKLSAgICAgIGVsc2UKLQotCSMgQWRkIGFueSBvYmplY3RzIGZyb20gcHJlbG9hZGVkIGNvbnZlbmllbmNlIGxpYnJhcmllcwotCWlmIHRlc3QgLW4gIiRkbHByZWZpbGVzIjsgdGhlbgotCSAgZ2VudG9wPSIkb3V0cHV0X29iamRpci8ke291dHB1dG5hbWV9eCIKLQkgIGZ1bmNfYXBwZW5kIGdlbmVyYXRlZCAiICRnZW50b3AiCi0KLQkgIGZ1bmNfZXh0cmFjdF9hcmNoaXZlcyAkZ2VudG9wICRkbHByZWZpbGVzCi0JICBmdW5jX2FwcGVuZCBvbGRvYmpzICIgJGZ1bmNfZXh0cmFjdF9hcmNoaXZlc19yZXN1bHQiCi0JZmkKLQotCSMgUE9TSVggZGVtYW5kcyBubyBwYXRocyB0byBiZSBlbmNvZGVkIGluIGFyY2hpdmVzLiAgV2UgaGF2ZQotCSMgdG8gYXZvaWQgY3JlYXRpbmcgYXJjaGl2ZXMgd2l0aCBkdXBsaWNhdGUgYmFzZW5hbWVzIGlmIHdlCi0JIyBtaWdodCBoYXZlIHRvIGV4dHJhY3QgdGhlbSBhZnRlcndhcmRzLCBlLmcuLCB3aGVuIGNyZWF0aW5nIGEKLQkjIHN0YXRpYyBhcmNoaXZlIG91dCBvZiBhIGNvbnZlbmllbmNlIGxpYnJhcnksIG9yIHdoZW4gbGlua2luZwotCSMgdGhlIGVudGlyZXR5IG9mIGEgbGlidG9vbCBhcmNoaXZlIGludG8gYW5vdGhlciAoY3VycmVudGx5Ci0JIyBub3Qgc3VwcG9ydGVkIGJ5IGxpYnRvb2wpLgotCWlmIChmb3Igb2JqIGluICRvbGRvYmpzCi0JICAgIGRvCi0JICAgICAgZnVuY19iYXNlbmFtZSAiJG9iaiIKLQkgICAgICAkRUNITyAiJGZ1bmNfYmFzZW5hbWVfcmVzdWx0IgotCSAgICBkb25lIHwgc29ydCB8IHNvcnQgLXVjID4vZGV2L251bGwgMj4mMSk7IHRoZW4KLQkgIDoKLQllbHNlCi0JICBlY2hvICJjb3B5aW5nIHNlbGVjdGVkIG9iamVjdCBmaWxlcyB0byBhdm9pZCBiYXNlbmFtZSBjb25mbGljdHMuLi4iCi0JICBnZW50b3A9IiRvdXRwdXRfb2JqZGlyLyR7b3V0cHV0bmFtZX14IgotCSAgZnVuY19hcHBlbmQgZ2VuZXJhdGVkICIgJGdlbnRvcCIKLQkgIGZ1bmNfbWtkaXJfcCAiJGdlbnRvcCIKLQkgIHNhdmVfb2xkb2Jqcz0kb2xkb2JqcwotCSAgb2xkb2Jqcz0KLQkgIGNvdW50ZXI9MQotCSAgZm9yIG9iaiBpbiAkc2F2ZV9vbGRvYmpzCi0JICBkbwotCSAgICBmdW5jX2Jhc2VuYW1lICIkb2JqIgotCSAgICBvYmpiYXNlPSIkZnVuY19iYXNlbmFtZV9yZXN1bHQiCi0JICAgIGNhc2UgIiAkb2xkb2JqcyAiIGluCi0JICAgICIgIikgb2xkb2Jqcz0kb2JqIDs7Ci0JICAgICpbXCAvXSIkb2JqYmFzZSAiKikKLQkgICAgICB3aGlsZSA6OyBkbwotCQkjIE1ha2Ugc3VyZSB3ZSBkb24ndCBwaWNrIGFuIGFsdGVybmF0ZSBuYW1lIHRoYXQgYWxzbwotCQkjIG92ZXJsYXBzLgotCQluZXdvYmo9bHQkY291bnRlci0kb2JqYmFzZQotCQlmdW5jX2FyaXRoICRjb3VudGVyICsgMQotCQljb3VudGVyPSRmdW5jX2FyaXRoX3Jlc3VsdAotCQljYXNlICIgJG9sZG9ianMgIiBpbgotCQkqW1wgL10iJG5ld29iaiAiKikgOzsKLQkJKikgaWYgdGVzdCAhIC1mICIkZ2VudG9wLyRuZXdvYmoiOyB0aGVuIGJyZWFrOyBmaSA7OwotCQllc2FjCi0JICAgICAgZG9uZQotCSAgICAgIGZ1bmNfc2hvd19ldmFsICJsbiAkb2JqICRnZW50b3AvJG5ld29iaiB8fCBjcCAkb2JqICRnZW50b3AvJG5ld29iaiIKLQkgICAgICBmdW5jX2FwcGVuZCBvbGRvYmpzICIgJGdlbnRvcC8kbmV3b2JqIgotCSAgICAgIDs7Ci0JICAgICopIGZ1bmNfYXBwZW5kIG9sZG9ianMgIiAkb2JqIiA7OwotCSAgICBlc2FjCi0JICBkb25lCi0JZmkKLQlldmFsIGNtZHM9XCIkb2xkX2FyY2hpdmVfY21kc1wiCi0KLQlmdW5jX2xlbiAiICRjbWRzIgotCWxlbj0kZnVuY19sZW5fcmVzdWx0Ci0JaWYgdGVzdCAiJGxlbiIgLWx0ICIkbWF4X2NtZF9sZW4iIHx8IHRlc3QgIiRtYXhfY21kX2xlbiIgLWxlIC0xOyB0aGVuCi0JICBjbWRzPSRvbGRfYXJjaGl2ZV9jbWRzCi0JZWxpZiB0ZXN0IC1uICIkYXJjaGl2ZXJfbGlzdF9zcGVjIjsgdGhlbgotCSAgZnVuY192ZXJib3NlICJ1c2luZyBjb21tYW5kIGZpbGUgYXJjaGl2ZSBsaW5raW5nLi4uIgotCSAgZm9yIG9iaiBpbiAkb2xkb2JqcwotCSAgZG8KLQkgICAgZnVuY190b190b29sX2ZpbGUgIiRvYmoiCi0JICAgICRFQ0hPICIkZnVuY190b190b29sX2ZpbGVfcmVzdWx0IgotCSAgZG9uZSA+ICRvdXRwdXRfb2JqZGlyLyRsaWJuYW1lLmxpYmNtZAotCSAgZnVuY190b190b29sX2ZpbGUgIiRvdXRwdXRfb2JqZGlyLyRsaWJuYW1lLmxpYmNtZCIKLQkgIG9sZG9ianM9IiAkYXJjaGl2ZXJfbGlzdF9zcGVjJGZ1bmNfdG9fdG9vbF9maWxlX3Jlc3VsdCIKLQkgIGNtZHM9JG9sZF9hcmNoaXZlX2NtZHMKLQllbHNlCi0JICAjIHRoZSBjb21tYW5kIGxpbmUgaXMgdG9vIGxvbmcgdG8gbGluayBpbiBvbmUgc3RlcCwgbGluayBpbiBwYXJ0cwotCSAgZnVuY192ZXJib3NlICJ1c2luZyBwaWVjZXdpc2UgYXJjaGl2ZSBsaW5raW5nLi4uIgotCSAgc2F2ZV9SQU5MSUI9JFJBTkxJQgotCSAgUkFOTElCPToKLQkgIG9iamxpc3Q9Ci0JICBjb25jYXRfY21kcz0KLQkgIHNhdmVfb2xkb2Jqcz0kb2xkb2JqcwotCSAgb2xkb2Jqcz0KLQkgICMgSXMgdGhlcmUgYSBiZXR0ZXIgd2F5IG9mIGZpbmRpbmcgdGhlIGxhc3Qgb2JqZWN0IGluIHRoZSBsaXN0PwotCSAgZm9yIG9iaiBpbiAkc2F2ZV9vbGRvYmpzCi0JICBkbwotCSAgICBsYXN0X29sZG9iaj0kb2JqCi0JICBkb25lCi0JICBldmFsIHRlc3RfY21kcz1cIiRvbGRfYXJjaGl2ZV9jbWRzXCIKLQkgIGZ1bmNfbGVuICIgJHRlc3RfY21kcyIKLQkgIGxlbjA9JGZ1bmNfbGVuX3Jlc3VsdAotCSAgbGVuPSRsZW4wCi0JICBmb3Igb2JqIGluICRzYXZlX29sZG9ianMKLQkgIGRvCi0JICAgIGZ1bmNfbGVuICIgJG9iaiIKLQkgICAgZnVuY19hcml0aCAkbGVuICsgJGZ1bmNfbGVuX3Jlc3VsdAotCSAgICBsZW49JGZ1bmNfYXJpdGhfcmVzdWx0Ci0JICAgIGZ1bmNfYXBwZW5kIG9iamxpc3QgIiAkb2JqIgotCSAgICBpZiB0ZXN0ICIkbGVuIiAtbHQgIiRtYXhfY21kX2xlbiI7IHRoZW4KLQkgICAgICA6Ci0JICAgIGVsc2UKLQkgICAgICAjIHRoZSBhYm92ZSBjb21tYW5kIHNob3VsZCBiZSB1c2VkIGJlZm9yZSBpdCBnZXRzIHRvbyBsb25nCi0JICAgICAgb2xkb2Jqcz0kb2JqbGlzdAotCSAgICAgIGlmIHRlc3QgIiRvYmoiID0gIiRsYXN0X29sZG9iaiIgOyB0aGVuCi0JCVJBTkxJQj0kc2F2ZV9SQU5MSUIKLQkgICAgICBmaQotCSAgICAgIHRlc3QgLXogIiRjb25jYXRfY21kcyIgfHwgY29uY2F0X2NtZHM9JGNvbmNhdF9jbWRzfgotCSAgICAgIGV2YWwgY29uY2F0X2NtZHM9XCJcJHtjb25jYXRfY21kc30kb2xkX2FyY2hpdmVfY21kc1wiCi0JICAgICAgb2JqbGlzdD0KLQkgICAgICBsZW49JGxlbjAKLQkgICAgZmkKLQkgIGRvbmUKLQkgIFJBTkxJQj0kc2F2ZV9SQU5MSUIKLQkgIG9sZG9ianM9JG9iamxpc3QKLQkgIGlmIHRlc3QgIlgkb2xkb2JqcyIgPSAiWCIgOyB0aGVuCi0JICAgIGV2YWwgY21kcz1cIlwkY29uY2F0X2NtZHNcIgotCSAgZWxzZQotCSAgICBldmFsIGNtZHM9XCJcJGNvbmNhdF9jbWRzflwkb2xkX2FyY2hpdmVfY21kc1wiCi0JICBmaQotCWZpCi0gICAgICBmaQotICAgICAgZnVuY19leGVjdXRlX2NtZHMgIiRjbWRzIiAnZXhpdCAkPycKLSAgICBkb25lCi0KLSAgICB0ZXN0IC1uICIkZ2VuZXJhdGVkIiAmJiBcCi0gICAgICBmdW5jX3Nob3dfZXZhbCAiJHtSTX1yJGdlbmVyYXRlZCIKLQotICAgICMgTm93IGNyZWF0ZSB0aGUgbGlidG9vbCBhcmNoaXZlLgotICAgIGNhc2UgJG91dHB1dCBpbgotICAgICoubGEpCi0gICAgICBvbGRfbGlicmFyeT0KLSAgICAgIHRlc3QgIiRidWlsZF9vbGRfbGlicyIgPSB5ZXMgJiYgb2xkX2xpYnJhcnk9IiRsaWJuYW1lLiRsaWJleHQiCi0gICAgICBmdW5jX3ZlcmJvc2UgImNyZWF0aW5nICRvdXRwdXQiCi0KLSAgICAgICMgUHJlc2VydmUgYW55IHZhcmlhYmxlcyB0aGF0IG1heSBhZmZlY3QgY29tcGlsZXIgYmVoYXZpb3IKLSAgICAgIGZvciB2YXIgaW4gJHZhcmlhYmxlc19zYXZlZF9mb3JfcmVsaW5rOyBkbwotCWlmIGV2YWwgdGVzdCAteiBcIlwkeyR2YXIrc2V0fVwiOyB0aGVuCi0JICByZWxpbmtfY29tbWFuZD0ieyB0ZXN0IC16IFwiXCR7JHZhcitzZXR9XCIgfHwgJGx0X3Vuc2V0ICR2YXIgfHwgeyAkdmFyPTsgZXhwb3J0ICR2YXI7IH07IH07ICRyZWxpbmtfY29tbWFuZCIKLQllbGlmIGV2YWwgdmFyX3ZhbHVlPVwkJHZhcjsgdGVzdCAteiAiJHZhcl92YWx1ZSI7IHRoZW4KLQkgIHJlbGlua19jb21tYW5kPSIkdmFyPTsgZXhwb3J0ICR2YXI7ICRyZWxpbmtfY29tbWFuZCIKLQllbHNlCi0JICBmdW5jX3F1b3RlX2Zvcl9ldmFsICIkdmFyX3ZhbHVlIgotCSAgcmVsaW5rX2NvbW1hbmQ9IiR2YXI9JGZ1bmNfcXVvdGVfZm9yX2V2YWxfcmVzdWx0OyBleHBvcnQgJHZhcjsgJHJlbGlua19jb21tYW5kIgotCWZpCi0gICAgICBkb25lCi0gICAgICAjIFF1b3RlIHRoZSBsaW5rIGNvbW1hbmQgZm9yIHNoaXBwaW5nLgotICAgICAgcmVsaW5rX2NvbW1hbmQ9IihjZCBgcHdkYDsgJFNIRUxMICRwcm9ncGF0aCAkcHJlc2VydmVfYXJncyAtLW1vZGU9cmVsaW5rICRsaWJ0b29sX2FyZ3MgQGluc3RfcHJlZml4X2RpckApIgotICAgICAgcmVsaW5rX2NvbW1hbmQ9YCRFQ0hPICIkcmVsaW5rX2NvbW1hbmQiIHwgJFNFRCAiJHNlZF9xdW90ZV9zdWJzdCJgCi0gICAgICBpZiB0ZXN0ICIkaGFyZGNvZGVfYXV0b21hdGljIiA9IHllcyA7IHRoZW4KLQlyZWxpbmtfY29tbWFuZD0KLSAgICAgIGZpCi0KLSAgICAgICMgT25seSBjcmVhdGUgdGhlIG91dHB1dCBpZiBub3QgYSBkcnkgcnVuLgotICAgICAgJG9wdF9kcnlfcnVuIHx8IHsKLQlmb3IgaW5zdGFsbGVkIGluIG5vIHllczsgZG8KLQkgIGlmIHRlc3QgIiRpbnN0YWxsZWQiID0geWVzOyB0aGVuCi0JICAgIGlmIHRlc3QgLXogIiRpbnN0YWxsX2xpYmRpciI7IHRoZW4KLQkgICAgICBicmVhawotCSAgICBmaQotCSAgICBvdXRwdXQ9IiRvdXRwdXRfb2JqZGlyLyRvdXRwdXRuYW1lImkKLQkgICAgIyBSZXBsYWNlIGFsbCB1bmluc3RhbGxlZCBsaWJ0b29sIGxpYnJhcmllcyB3aXRoIHRoZSBpbnN0YWxsZWQgb25lcwotCSAgICBuZXdkZXBlbmRlbmN5X2xpYnM9Ci0JICAgIGZvciBkZXBsaWIgaW4gJGRlcGVuZGVuY3lfbGliczsgZG8KLQkgICAgICBjYXNlICRkZXBsaWIgaW4KLQkgICAgICAqLmxhKQotCQlmdW5jX2Jhc2VuYW1lICIkZGVwbGliIgotCQluYW1lPSIkZnVuY19iYXNlbmFtZV9yZXN1bHQiCi0JCWV2YWwgbGliZGlyPWAke1NFRH0gLW4gLWUgJ3MvXmxpYmRpcj1cKC4qXCkkL1wxL3AnICRkZXBsaWJgCi0JCXRlc3QgLXogIiRsaWJkaXIiICYmIFwKLQkJICBmdW5jX2ZhdGFsX2Vycm9yICJcYCRkZXBsaWInIGlzIG5vdCBhIHZhbGlkIGxpYnRvb2wgYXJjaGl2ZSIKLQkJZnVuY19hcHBlbmQgbmV3ZGVwZW5kZW5jeV9saWJzICIgJHtsdF9zeXNyb290Ois9fSRsaWJkaXIvJG5hbWUiCi0JCTs7Ci0JICAgICAgLUwqKQotCQlmdW5jX3N0cmlwbmFtZSAtTCAnJyAiJGRlcGxpYiIKLQkJZnVuY19yZXBsYWNlX3N5c3Jvb3QgIiRmdW5jX3N0cmlwbmFtZV9yZXN1bHQiCi0JCWZ1bmNfYXBwZW5kIG5ld2RlcGVuZGVuY3lfbGlicyAiIC1MJGZ1bmNfcmVwbGFjZV9zeXNyb290X3Jlc3VsdCIKLQkJOzsKLQkgICAgICAtUiopCi0JCWZ1bmNfc3RyaXBuYW1lIC1SICcnICIkZGVwbGliIgotCQlmdW5jX3JlcGxhY2Vfc3lzcm9vdCAiJGZ1bmNfc3RyaXBuYW1lX3Jlc3VsdCIKLQkJZnVuY19hcHBlbmQgbmV3ZGVwZW5kZW5jeV9saWJzICIgLVIkZnVuY19yZXBsYWNlX3N5c3Jvb3RfcmVzdWx0IgotCQk7OwotCSAgICAgICopIGZ1bmNfYXBwZW5kIG5ld2RlcGVuZGVuY3lfbGlicyAiICRkZXBsaWIiIDs7Ci0JICAgICAgZXNhYwotCSAgICBkb25lCi0JICAgIGRlcGVuZGVuY3lfbGlicz0iJG5ld2RlcGVuZGVuY3lfbGlicyIKLQkgICAgbmV3ZGxmaWxlcz0KLQotCSAgICBmb3IgbGliIGluICRkbGZpbGVzOyBkbwotCSAgICAgIGNhc2UgJGxpYiBpbgotCSAgICAgICoubGEpCi0JICAgICAgICBmdW5jX2Jhc2VuYW1lICIkbGliIgotCQluYW1lPSIkZnVuY19iYXNlbmFtZV9yZXN1bHQiCi0JCWV2YWwgbGliZGlyPWAke1NFRH0gLW4gLWUgJ3MvXmxpYmRpcj1cKC4qXCkkL1wxL3AnICRsaWJgCi0JCXRlc3QgLXogIiRsaWJkaXIiICYmIFwKLQkJICBmdW5jX2ZhdGFsX2Vycm9yICJcYCRsaWInIGlzIG5vdCBhIHZhbGlkIGxpYnRvb2wgYXJjaGl2ZSIKLQkJZnVuY19hcHBlbmQgbmV3ZGxmaWxlcyAiICR7bHRfc3lzcm9vdDorPX0kbGliZGlyLyRuYW1lIgotCQk7OwotCSAgICAgICopIGZ1bmNfYXBwZW5kIG5ld2RsZmlsZXMgIiAkbGliIiA7OwotCSAgICAgIGVzYWMKLQkgICAgZG9uZQotCSAgICBkbGZpbGVzPSIkbmV3ZGxmaWxlcyIKLQkgICAgbmV3ZGxwcmVmaWxlcz0KLQkgICAgZm9yIGxpYiBpbiAkZGxwcmVmaWxlczsgZG8KLQkgICAgICBjYXNlICRsaWIgaW4KLQkgICAgICAqLmxhKQotCQkjIE9ubHkgcGFzcyBwcmVvcGVuZWQgZmlsZXMgdG8gdGhlIHBzZXVkby1hcmNoaXZlIChmb3IKLQkJIyBldmVudHVhbCBsaW5raW5nIHdpdGggdGhlIGFwcC4gdGhhdCBsaW5rcyBpdCkgaWYgd2UKLQkJIyBkaWRuJ3QgYWxyZWFkeSBsaW5rIHRoZSBwcmVvcGVuZWQgb2JqZWN0cyBkaXJlY3RseSBpbnRvCi0JCSMgdGhlIGxpYnJhcnk6Ci0JCWZ1bmNfYmFzZW5hbWUgIiRsaWIiCi0JCW5hbWU9IiRmdW5jX2Jhc2VuYW1lX3Jlc3VsdCIKLQkJZXZhbCBsaWJkaXI9YCR7U0VEfSAtbiAtZSAncy9ebGliZGlyPVwoLipcKSQvXDEvcCcgJGxpYmAKLQkJdGVzdCAteiAiJGxpYmRpciIgJiYgXAotCQkgIGZ1bmNfZmF0YWxfZXJyb3IgIlxgJGxpYicgaXMgbm90IGEgdmFsaWQgbGlidG9vbCBhcmNoaXZlIgotCQlmdW5jX2FwcGVuZCBuZXdkbHByZWZpbGVzICIgJHtsdF9zeXNyb290Ois9fSRsaWJkaXIvJG5hbWUiCi0JCTs7Ci0JICAgICAgZXNhYwotCSAgICBkb25lCi0JICAgIGRscHJlZmlsZXM9IiRuZXdkbHByZWZpbGVzIgotCSAgZWxzZQotCSAgICBuZXdkbGZpbGVzPQotCSAgICBmb3IgbGliIGluICRkbGZpbGVzOyBkbwotCSAgICAgIGNhc2UgJGxpYiBpbgotCQlbXFwvXSogfCBbQS1aYS16XTpbXFwvXSopIGFicz0iJGxpYiIgOzsKLQkJKikgYWJzPWBwd2RgIi8kbGliIiA7OwotCSAgICAgIGVzYWMKLQkgICAgICBmdW5jX2FwcGVuZCBuZXdkbGZpbGVzICIgJGFicyIKLQkgICAgZG9uZQotCSAgICBkbGZpbGVzPSIkbmV3ZGxmaWxlcyIKLQkgICAgbmV3ZGxwcmVmaWxlcz0KLQkgICAgZm9yIGxpYiBpbiAkZGxwcmVmaWxlczsgZG8KLQkgICAgICBjYXNlICRsaWIgaW4KLQkJW1xcL10qIHwgW0EtWmEtel06W1xcL10qKSBhYnM9IiRsaWIiIDs7Ci0JCSopIGFicz1gcHdkYCIvJGxpYiIgOzsKLQkgICAgICBlc2FjCi0JICAgICAgZnVuY19hcHBlbmQgbmV3ZGxwcmVmaWxlcyAiICRhYnMiCi0JICAgIGRvbmUKLQkgICAgZGxwcmVmaWxlcz0iJG5ld2RscHJlZmlsZXMiCi0JICBmaQotCSAgJFJNICRvdXRwdXQKLQkgICMgcGxhY2UgZGxuYW1lIGluIGNvcnJlY3QgcG9zaXRpb24gZm9yIGN5Z3dpbgotCSAgIyBJbiBmYWN0LCBpdCB3b3VsZCBiZSBuaWNlIGlmIHdlIGNvdWxkIHVzZSB0aGlzIGNvZGUgZm9yIGFsbCB0YXJnZXQKLQkgICMgc3lzdGVtcyB0aGF0IGNhbid0IGhhcmQtY29kZSBsaWJyYXJ5IHBhdGhzIGludG8gdGhlaXIgZXhlY3V0YWJsZXMKLQkgICMgYW5kIHRoYXQgaGF2ZSBubyBzaGFyZWQgbGlicmFyeSBwYXRoIHZhcmlhYmxlIGluZGVwZW5kZW50IG9mIFBBVEgsCi0JICAjIGJ1dCBpdCB0dXJucyBvdXQgd2UgY2FuJ3QgZWFzaWx5IGRldGVybWluZSB0aGF0IGZyb20gaW5zcGVjdGluZwotCSAgIyBsaWJ0b29sIHZhcmlhYmxlcywgc28gd2UgaGF2ZSB0byBoYXJkLWNvZGUgdGhlIE9TcyB0byB3aGljaCBpdAotCSAgIyBhcHBsaWVzIGhlcmU7IGF0IHRoZSBtb21lbnQsIHRoYXQgbWVhbnMgcGxhdGZvcm1zIHRoYXQgdXNlIHRoZSBQRQotCSAgIyBvYmplY3QgZm9ybWF0IHdpdGggRExMIGZpbGVzLiAgU2VlIHRoZSBsb25nIGNvbW1lbnQgYXQgdGhlIHRvcCBvZgotCSAgIyB0ZXN0cy9iaW5kaXIuYXQgZm9yIGZ1bGwgZGV0YWlscy4KLQkgIHRkbG5hbWU9JGRsbmFtZQotCSAgY2FzZSAkaG9zdCwkb3V0cHV0LCRpbnN0YWxsZWQsJG1vZHVsZSwkZGxuYW1lIGluCi0JICAgICpjeWd3aW4qLCpsYWkseWVzLG5vLCouZGxsIHwgKm1pbmd3KiwqbGFpLHllcyxubywqLmRsbCB8ICpjZWdjYyosKmxhaSx5ZXMsbm8sKi5kbGwpCi0JICAgICAgIyBJZiBhIC1iaW5kaXIgYXJndW1lbnQgd2FzIHN1cHBsaWVkLCBwbGFjZSB0aGUgZGxsIHRoZXJlLgotCSAgICAgIGlmIHRlc3QgIngkYmluZGlyIiAhPSB4IDsKLQkgICAgICB0aGVuCi0JCWZ1bmNfcmVsYXRpdmVfcGF0aCAiJGluc3RhbGxfbGliZGlyIiAiJGJpbmRpciIKLQkJdGRsbmFtZT0kZnVuY19yZWxhdGl2ZV9wYXRoX3Jlc3VsdCRkbG5hbWUKLQkgICAgICBlbHNlCi0JCSMgT3RoZXJ3aXNlIGZhbGwgYmFjayBvbiBoZXVyaXN0aWMuCi0JCXRkbG5hbWU9Li4vYmluLyRkbG5hbWUKLQkgICAgICBmaQotCSAgICAgIDs7Ci0JICBlc2FjCi0JICAkRUNITyA+ICRvdXRwdXQgIlwKLSMgJG91dHB1dG5hbWUgLSBhIGxpYnRvb2wgbGlicmFyeSBmaWxlCi0jIEdlbmVyYXRlZCBieSAkUFJPR1JBTSAoR05VICRQQUNLQUdFJFRJTUVTVEFNUCkgJFZFUlNJT04KLSMKLSMgUGxlYXNlIERPIE5PVCBkZWxldGUgdGhpcyBmaWxlIQotIyBJdCBpcyBuZWNlc3NhcnkgZm9yIGxpbmtpbmcgdGhlIGxpYnJhcnkuCi0KLSMgVGhlIG5hbWUgdGhhdCB3ZSBjYW4gZGxvcGVuKDMpLgotZGxuYW1lPSckdGRsbmFtZScKLQotIyBOYW1lcyBvZiB0aGlzIGxpYnJhcnkuCi1saWJyYXJ5X25hbWVzPSckbGlicmFyeV9uYW1lcycKLQotIyBUaGUgbmFtZSBvZiB0aGUgc3RhdGljIGFyY2hpdmUuCi1vbGRfbGlicmFyeT0nJG9sZF9saWJyYXJ5JwotCi0jIExpbmtlciBmbGFncyB0aGF0IGNhbiBub3QgZ28gaW4gZGVwZW5kZW5jeV9saWJzLgotaW5oZXJpdGVkX2xpbmtlcl9mbGFncz0nJG5ld19pbmhlcml0ZWRfbGlua2VyX2ZsYWdzJwotCi0jIExpYnJhcmllcyB0aGF0IHRoaXMgb25lIGRlcGVuZHMgdXBvbi4KLWRlcGVuZGVuY3lfbGlicz0nJGRlcGVuZGVuY3lfbGlicycKLQotIyBOYW1lcyBvZiBhZGRpdGlvbmFsIHdlYWsgbGlicmFyaWVzIHByb3ZpZGVkIGJ5IHRoaXMgbGlicmFyeQotd2Vha19saWJyYXJ5X25hbWVzPSckd2Vha19saWJzJwotCi0jIFZlcnNpb24gaW5mb3JtYXRpb24gZm9yICRsaWJuYW1lLgotY3VycmVudD0kY3VycmVudAotYWdlPSRhZ2UKLXJldmlzaW9uPSRyZXZpc2lvbgotCi0jIElzIHRoaXMgYW4gYWxyZWFkeSBpbnN0YWxsZWQgbGlicmFyeT8KLWluc3RhbGxlZD0kaW5zdGFsbGVkCi0KLSMgU2hvdWxkIHdlIHdhcm4gYWJvdXQgcG9ydGFiaWxpdHkgd2hlbiBsaW5raW5nIGFnYWluc3QgLW1vZHVsZXM/Ci1zaG91bGRub3RsaW5rPSRtb2R1bGUKLQotIyBGaWxlcyB0byBkbG9wZW4vZGxwcmVvcGVuCi1kbG9wZW49JyRkbGZpbGVzJwotZGxwcmVvcGVuPSckZGxwcmVmaWxlcycKLQotIyBEaXJlY3RvcnkgdGhhdCB0aGlzIGxpYnJhcnkgbmVlZHMgdG8gYmUgaW5zdGFsbGVkIGluOgotbGliZGlyPSckaW5zdGFsbF9saWJkaXInIgotCSAgaWYgdGVzdCAiJGluc3RhbGxlZCIgPSBubyAmJiB0ZXN0ICIkbmVlZF9yZWxpbmsiID0geWVzOyB0aGVuCi0JICAgICRFQ0hPID4+ICRvdXRwdXQgIlwKLXJlbGlua19jb21tYW5kPVwiJHJlbGlua19jb21tYW5kXCIiCi0JICBmaQotCWRvbmUKLSAgICAgIH0KLQotICAgICAgIyBEbyBhIHN5bWJvbGljIGxpbmsgc28gdGhhdCB0aGUgbGlidG9vbCBhcmNoaXZlIGNhbiBiZSBmb3VuZCBpbgotICAgICAgIyBMRF9MSUJSQVJZX1BBVEggYmVmb3JlIHRoZSBwcm9ncmFtIGlzIGluc3RhbGxlZC4KLSAgICAgIGZ1bmNfc2hvd19ldmFsICcoIGNkICIkb3V0cHV0X29iamRpciIgJiYgJFJNICIkb3V0cHV0bmFtZSIgJiYgJExOX1MgIi4uLyRvdXRwdXRuYW1lIiAiJG91dHB1dG5hbWUiICknICdleGl0ICQ/JwotICAgICAgOzsKLSAgICBlc2FjCi0gICAgZXhpdCAkRVhJVF9TVUNDRVNTCi19Ci0KLXsgdGVzdCAiJG9wdF9tb2RlIiA9IGxpbmsgfHwgdGVzdCAiJG9wdF9tb2RlIiA9IHJlbGluazsgfSAmJgotICAgIGZ1bmNfbW9kZV9saW5rICR7MSsiJEAifQotCi0KLSMgZnVuY19tb2RlX3VuaW5zdGFsbCBhcmcuLi4KLWZ1bmNfbW9kZV91bmluc3RhbGwgKCkKLXsKLSAgICAkb3B0X2RlYnVnCi0gICAgUk09IiRub25vcHQiCi0gICAgZmlsZXM9Ci0gICAgcm1mb3JjZT0KLSAgICBleGl0X3N0YXR1cz0wCi0KLSAgICAjIFRoaXMgdmFyaWFibGUgdGVsbHMgd3JhcHBlciBzY3JpcHRzIGp1c3QgdG8gc2V0IHZhcmlhYmxlcyByYXRoZXIKLSAgICAjIHRoYW4gcnVubmluZyB0aGVpciBwcm9ncmFtcy4KLSAgICBsaWJ0b29sX2luc3RhbGxfbWFnaWM9IiRtYWdpYyIKLQotICAgIGZvciBhcmcKLSAgICBkbwotICAgICAgY2FzZSAkYXJnIGluCi0gICAgICAtZikgZnVuY19hcHBlbmQgUk0gIiAkYXJnIjsgcm1mb3JjZT15ZXMgOzsKLSAgICAgIC0qKSBmdW5jX2FwcGVuZCBSTSAiICRhcmciIDs7Ci0gICAgICAqKSBmdW5jX2FwcGVuZCBmaWxlcyAiICRhcmciIDs7Ci0gICAgICBlc2FjCi0gICAgZG9uZQotCi0gICAgdGVzdCAteiAiJFJNIiAmJiBcCi0gICAgICBmdW5jX2ZhdGFsX2hlbHAgInlvdSBtdXN0IHNwZWNpZnkgYW4gUk0gcHJvZ3JhbSIKLQotICAgIHJtZGlycz0KLQotICAgIGZvciBmaWxlIGluICRmaWxlczsgZG8KLSAgICAgIGZ1bmNfZGlybmFtZSAiJGZpbGUiICIiICIuIgotICAgICAgZGlyPSIkZnVuY19kaXJuYW1lX3Jlc3VsdCIKLSAgICAgIGlmIHRlc3QgIlgkZGlyIiA9IFguOyB0aGVuCi0Jb2Rpcj0iJG9iamRpciIKLSAgICAgIGVsc2UKLQlvZGlyPSIkZGlyLyRvYmpkaXIiCi0gICAgICBmaQotICAgICAgZnVuY19iYXNlbmFtZSAiJGZpbGUiCi0gICAgICBuYW1lPSIkZnVuY19iYXNlbmFtZV9yZXN1bHQiCi0gICAgICB0ZXN0ICIkb3B0X21vZGUiID0gdW5pbnN0YWxsICYmIG9kaXI9IiRkaXIiCi0KLSAgICAgICMgUmVtZW1iZXIgb2RpciBmb3IgcmVtb3ZhbCBsYXRlciwgYmVpbmcgY2FyZWZ1bCB0byBhdm9pZCBkdXBsaWNhdGVzCi0gICAgICBpZiB0ZXN0ICIkb3B0X21vZGUiID0gY2xlYW47IHRoZW4KLQljYXNlICIgJHJtZGlycyAiIGluCi0JICAqIiAkb2RpciAiKikgOzsKLQkgICopIGZ1bmNfYXBwZW5kIHJtZGlycyAiICRvZGlyIiA7OwotCWVzYWMKLSAgICAgIGZpCi0KLSAgICAgICMgRG9uJ3QgZXJyb3IgaWYgdGhlIGZpbGUgZG9lc24ndCBleGlzdCBhbmQgcm0gLWYgd2FzIHVzZWQuCi0gICAgICBpZiB7IHRlc3QgLUwgIiRmaWxlIjsgfSA+L2Rldi9udWxsIDI+JjEgfHwKLQkgeyB0ZXN0IC1oICIkZmlsZSI7IH0gPi9kZXYvbnVsbCAyPiYxIHx8Ci0JIHRlc3QgLWYgIiRmaWxlIjsgdGhlbgotCToKLSAgICAgIGVsaWYgdGVzdCAtZCAiJGZpbGUiOyB0aGVuCi0JZXhpdF9zdGF0dXM9MQotCWNvbnRpbnVlCi0gICAgICBlbGlmIHRlc3QgIiRybWZvcmNlIiA9IHllczsgdGhlbgotCWNvbnRpbnVlCi0gICAgICBmaQotCi0gICAgICBybWZpbGVzPSIkZmlsZSIKLQotICAgICAgY2FzZSAkbmFtZSBpbgotICAgICAgKi5sYSkKLQkjIFBvc3NpYmx5IGEgbGlidG9vbCBhcmNoaXZlLCBzbyB2ZXJpZnkgaXQuCi0JaWYgZnVuY19sYWxpYl9wICIkZmlsZSI7IHRoZW4KLQkgIGZ1bmNfc291cmNlICRkaXIvJG5hbWUKLQotCSAgIyBEZWxldGUgdGhlIGxpYnRvb2wgbGlicmFyaWVzIGFuZCBzeW1saW5rcy4KLQkgIGZvciBuIGluICRsaWJyYXJ5X25hbWVzOyBkbwotCSAgICBmdW5jX2FwcGVuZCBybWZpbGVzICIgJG9kaXIvJG4iCi0JICBkb25lCi0JICB0ZXN0IC1uICIkb2xkX2xpYnJhcnkiICYmIGZ1bmNfYXBwZW5kIHJtZmlsZXMgIiAkb2Rpci8kb2xkX2xpYnJhcnkiCi0KLQkgIGNhc2UgIiRvcHRfbW9kZSIgaW4KLQkgIGNsZWFuKQotCSAgICBjYXNlICIgJGxpYnJhcnlfbmFtZXMgIiBpbgotCSAgICAqIiAkZGxuYW1lICIqKSA7OwotCSAgICAqKSB0ZXN0IC1uICIkZGxuYW1lIiAmJiBmdW5jX2FwcGVuZCBybWZpbGVzICIgJG9kaXIvJGRsbmFtZSIgOzsKLQkgICAgZXNhYwotCSAgICB0ZXN0IC1uICIkbGliZGlyIiAmJiBmdW5jX2FwcGVuZCBybWZpbGVzICIgJG9kaXIvJG5hbWUgJG9kaXIvJHtuYW1lfWkiCi0JICAgIDs7Ci0JICB1bmluc3RhbGwpCi0JICAgIGlmIHRlc3QgLW4gIiRsaWJyYXJ5X25hbWVzIjsgdGhlbgotCSAgICAgICMgRG8gZWFjaCBjb21tYW5kIGluIHRoZSBwb3N0dW5pbnN0YWxsIGNvbW1hbmRzLgotCSAgICAgIGZ1bmNfZXhlY3V0ZV9jbWRzICIkcG9zdHVuaW5zdGFsbF9jbWRzIiAndGVzdCAiJHJtZm9yY2UiID0geWVzIHx8IGV4aXRfc3RhdHVzPTEnCi0JICAgIGZpCi0KLQkgICAgaWYgdGVzdCAtbiAiJG9sZF9saWJyYXJ5IjsgdGhlbgotCSAgICAgICMgRG8gZWFjaCBjb21tYW5kIGluIHRoZSBvbGRfcG9zdHVuaW5zdGFsbCBjb21tYW5kcy4KLQkgICAgICBmdW5jX2V4ZWN1dGVfY21kcyAiJG9sZF9wb3N0dW5pbnN0YWxsX2NtZHMiICd0ZXN0ICIkcm1mb3JjZSIgPSB5ZXMgfHwgZXhpdF9zdGF0dXM9MScKLQkgICAgZmkKLQkgICAgIyBGSVhNRTogc2hvdWxkIHJlaW5zdGFsbCB0aGUgYmVzdCByZW1haW5pbmcgc2hhcmVkIGxpYnJhcnkuCi0JICAgIDs7Ci0JICBlc2FjCi0JZmkKLQk7OwotCi0gICAgICAqLmxvKQotCSMgUG9zc2libHkgYSBsaWJ0b29sIG9iamVjdCwgc28gdmVyaWZ5IGl0LgotCWlmIGZ1bmNfbGFsaWJfcCAiJGZpbGUiOyB0aGVuCi0KLQkgICMgUmVhZCB0aGUgLmxvIGZpbGUKLQkgIGZ1bmNfc291cmNlICRkaXIvJG5hbWUKLQotCSAgIyBBZGQgUElDIG9iamVjdCB0byB0aGUgbGlzdCBvZiBmaWxlcyB0byByZW1vdmUuCi0JICBpZiB0ZXN0IC1uICIkcGljX29iamVjdCIgJiYKLQkgICAgIHRlc3QgIiRwaWNfb2JqZWN0IiAhPSBub25lOyB0aGVuCi0JICAgIGZ1bmNfYXBwZW5kIHJtZmlsZXMgIiAkZGlyLyRwaWNfb2JqZWN0IgotCSAgZmkKLQotCSAgIyBBZGQgbm9uLVBJQyBvYmplY3QgdG8gdGhlIGxpc3Qgb2YgZmlsZXMgdG8gcmVtb3ZlLgotCSAgaWYgdGVzdCAtbiAiJG5vbl9waWNfb2JqZWN0IiAmJgotCSAgICAgdGVzdCAiJG5vbl9waWNfb2JqZWN0IiAhPSBub25lOyB0aGVuCi0JICAgIGZ1bmNfYXBwZW5kIHJtZmlsZXMgIiAkZGlyLyRub25fcGljX29iamVjdCIKLQkgIGZpCi0JZmkKLQk7OwotCi0gICAgICAqKQotCWlmIHRlc3QgIiRvcHRfbW9kZSIgPSBjbGVhbiA7IHRoZW4KLQkgIG5vZXhlbmFtZT0kbmFtZQotCSAgY2FzZSAkZmlsZSBpbgotCSAgKi5leGUpCi0JICAgIGZ1bmNfc3RyaXBuYW1lICcnICcuZXhlJyAiJGZpbGUiCi0JICAgIGZpbGU9JGZ1bmNfc3RyaXBuYW1lX3Jlc3VsdAotCSAgICBmdW5jX3N0cmlwbmFtZSAnJyAnLmV4ZScgIiRuYW1lIgotCSAgICBub2V4ZW5hbWU9JGZ1bmNfc3RyaXBuYW1lX3Jlc3VsdAotCSAgICAjICRmaWxlIHdpdGggLmV4ZSBoYXMgYWxyZWFkeSBiZWVuIGFkZGVkIHRvIHJtZmlsZXMsCi0JICAgICMgYWRkICRmaWxlIHdpdGhvdXQgLmV4ZQotCSAgICBmdW5jX2FwcGVuZCBybWZpbGVzICIgJGZpbGUiCi0JICAgIDs7Ci0JICBlc2FjCi0JICAjIERvIGEgdGVzdCB0byBzZWUgaWYgdGhpcyBpcyBhIGxpYnRvb2wgcHJvZ3JhbS4KLQkgIGlmIGZ1bmNfbHR3cmFwcGVyX3AgIiRmaWxlIjsgdGhlbgotCSAgICBpZiBmdW5jX2x0d3JhcHBlcl9leGVjdXRhYmxlX3AgIiRmaWxlIjsgdGhlbgotCSAgICAgIGZ1bmNfbHR3cmFwcGVyX3NjcmlwdG5hbWUgIiRmaWxlIgotCSAgICAgIHJlbGlua19jb21tYW5kPQotCSAgICAgIGZ1bmNfc291cmNlICRmdW5jX2x0d3JhcHBlcl9zY3JpcHRuYW1lX3Jlc3VsdAotCSAgICAgIGZ1bmNfYXBwZW5kIHJtZmlsZXMgIiAkZnVuY19sdHdyYXBwZXJfc2NyaXB0bmFtZV9yZXN1bHQiCi0JICAgIGVsc2UKLQkgICAgICByZWxpbmtfY29tbWFuZD0KLQkgICAgICBmdW5jX3NvdXJjZSAkZGlyLyRub2V4ZW5hbWUKLQkgICAgZmkKLQotCSAgICAjIG5vdGUgJG5hbWUgc3RpbGwgY29udGFpbnMgLmV4ZSBpZiBpdCB3YXMgaW4gJGZpbGUgb3JpZ2luYWxseQotCSAgICAjIGFzIGRvZXMgdGhlIHZlcnNpb24gb2YgJGZpbGUgdGhhdCB3YXMgYWRkZWQgaW50byAkcm1maWxlcwotCSAgICBmdW5jX2FwcGVuZCBybWZpbGVzICIgJG9kaXIvJG5hbWUgJG9kaXIvJHtuYW1lfVMuJHtvYmpleHR9IgotCSAgICBpZiB0ZXN0ICIkZmFzdF9pbnN0YWxsIiA9IHllcyAmJiB0ZXN0IC1uICIkcmVsaW5rX2NvbW1hbmQiOyB0aGVuCi0JICAgICAgZnVuY19hcHBlbmQgcm1maWxlcyAiICRvZGlyL2x0LSRuYW1lIgotCSAgICBmaQotCSAgICBpZiB0ZXN0ICJYJG5vZXhlbmFtZSIgIT0gIlgkbmFtZSIgOyB0aGVuCi0JICAgICAgZnVuY19hcHBlbmQgcm1maWxlcyAiICRvZGlyL2x0LSR7bm9leGVuYW1lfS5jIgotCSAgICBmaQotCSAgZmkKLQlmaQotCTs7Ci0gICAgICBlc2FjCi0gICAgICBmdW5jX3Nob3dfZXZhbCAiJFJNICRybWZpbGVzIiAnZXhpdF9zdGF0dXM9MScKLSAgICBkb25lCi0KLSAgICAjIFRyeSB0byByZW1vdmUgdGhlICR7b2JqZGlyfXMgaW4gdGhlIGRpcmVjdG9yaWVzIHdoZXJlIHdlIGRlbGV0ZWQgZmlsZXMKLSAgICBmb3IgZGlyIGluICRybWRpcnM7IGRvCi0gICAgICBpZiB0ZXN0IC1kICIkZGlyIjsgdGhlbgotCWZ1bmNfc2hvd19ldmFsICJybWRpciAkZGlyID4vZGV2L251bGwgMj4mMSIKLSAgICAgIGZpCi0gICAgZG9uZQotCi0gICAgZXhpdCAkZXhpdF9zdGF0dXMKLX0KLQoteyB0ZXN0ICIkb3B0X21vZGUiID0gdW5pbnN0YWxsIHx8IHRlc3QgIiRvcHRfbW9kZSIgPSBjbGVhbjsgfSAmJgotICAgIGZ1bmNfbW9kZV91bmluc3RhbGwgJHsxKyIkQCJ9Ci0KLXRlc3QgLXogIiRvcHRfbW9kZSIgJiYgewotICBoZWxwPSIkZ2VuZXJpY19oZWxwIgotICBmdW5jX2ZhdGFsX2hlbHAgInlvdSBtdXN0IHNwZWNpZnkgYSBNT0RFIgotfQotCi10ZXN0IC16ICIkZXhlY19jbWQiICYmIFwKLSAgZnVuY19mYXRhbF9oZWxwICJpbnZhbGlkIG9wZXJhdGlvbiBtb2RlIFxgJG9wdF9tb2RlJyIKLQotaWYgdGVzdCAtbiAiJGV4ZWNfY21kIjsgdGhlbgotICBldmFsIGV4ZWMgIiRleGVjX2NtZCIKLSAgZXhpdCAkRVhJVF9GQUlMVVJFCi1maQotCi1leGl0ICRleGl0X3N0YXR1cwotCi0KLSMgVGhlIFRBR3MgYmVsb3cgYXJlIGRlZmluZWQgc3VjaCB0aGF0IHdlIG5ldmVyIGdldCBpbnRvIGEgc2l0dWF0aW9uCi0jIGluIHdoaWNoIHdlIGRpc2FibGUgYm90aCBraW5kcyBvZiBsaWJyYXJpZXMuICBHaXZlbiBjb25mbGljdGluZwotIyBjaG9pY2VzLCB3ZSBnbyBmb3IgYSBzdGF0aWMgbGlicmFyeSwgdGhhdCBpcyB0aGUgbW9zdCBwb3J0YWJsZSwKLSMgc2luY2Ugd2UgY2FuJ3QgdGVsbCB3aGV0aGVyIHNoYXJlZCBsaWJyYXJpZXMgd2VyZSBkaXNhYmxlZCBiZWNhdXNlCi0jIHRoZSB1c2VyIGFza2VkIGZvciB0aGF0IG9yIGJlY2F1c2UgdGhlIHBsYXRmb3JtIGRvZXNuJ3Qgc3VwcG9ydAotIyB0aGVtLiAgVGhpcyBpcyBwYXJ0aWN1bGFybHkgaW1wb3J0YW50IG9uIEFJWCwgYmVjYXVzZSB3ZSBkb24ndAotIyBzdXBwb3J0IGhhdmluZyBib3RoIHN0YXRpYyBhbmQgc2hhcmVkIGxpYnJhcmllcyBlbmFibGVkIGF0IHRoZSBzYW1lCi0jIHRpbWUgb24gdGhhdCBwbGF0Zm9ybSwgc28gd2UgZGVmYXVsdCB0byBhIHNoYXJlZC1vbmx5IGNvbmZpZ3VyYXRpb24uCi0jIElmIGEgZGlzYWJsZS1zaGFyZWQgdGFnIGlzIGdpdmVuLCB3ZSdsbCBmYWxsYmFjayB0byBhIHN0YXRpYy1vbmx5Ci0jIGNvbmZpZ3VyYXRpb24uICBCdXQgd2UnbGwgbmV2ZXIgZ28gZnJvbSBzdGF0aWMtb25seSB0byBzaGFyZWQtb25seS4KLQotIyAjIyMgQkVHSU4gTElCVE9PTCBUQUcgQ09ORklHOiBkaXNhYmxlLXNoYXJlZAotYnVpbGRfbGlidG9vbF9saWJzPW5vCi1idWlsZF9vbGRfbGlicz15ZXMKLSMgIyMjIEVORCBMSUJUT09MIFRBRyBDT05GSUc6IGRpc2FibGUtc2hhcmVkCi0KLSMgIyMjIEJFR0lOIExJQlRPT0wgVEFHIENPTkZJRzogZGlzYWJsZS1zdGF0aWMKLWJ1aWxkX29sZF9saWJzPWBjYXNlICRidWlsZF9saWJ0b29sX2xpYnMgaW4geWVzKSBlY2hvIG5vOzsgKikgZWNobyB5ZXM7OyBlc2FjYAotIyAjIyMgRU5EIExJQlRPT0wgVEFHIENPTkZJRzogZGlzYWJsZS1zdGF0aWMKLQotIyBMb2NhbCBWYXJpYWJsZXM6Ci0jIG1vZGU6c2hlbGwtc2NyaXB0Ci0jIHNoLWluZGVudGF0aW9uOjIKLSMgRW5kOgotIyB2aTpzdz0yCi0KZGlmZiAtLWdpdCBhL21ha2NqcGVnLnN0IGIvbWFrY2pwZWcuc3QKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDYyOGY1MzMuLjAwMDAwMDAKLS0tIGEvbWFrY2pwZWcuc3QKKysrIC9kZXYvbnVsbApAQCAtMSwzNiArMCwwIEBACi07IFByb2plY3QgZmlsZSBmb3IgSW5kZXBlbmRlbnQgSlBFRyBHcm91cCdzIHNvZnR3YXJlCi07Ci07IFRoaXMgcHJvamVjdCBmaWxlIGlzIGZvciBBdGFyaSBTVC9TVEUvVFQgc3lzdGVtcyB1c2luZyBQdXJlIEMgb3IgVHVyYm8gQy4KLTsgVGhhbmtzIHRvIEZyYW5rIE1vZWhsZSwgQi4gU2V0emVwZmFuZHQsIGFuZCBHdWlkbyBWb2xsYmVkaW5nLgotOwotOyBUbyB1c2UgdGhpcyBmaWxlLCByZW5hbWUgaXQgdG8gY2pwZWcucHJqLgotOyBJZiB5b3UgYXJlIHVzaW5nIFR1cmJvIEMsIGNoYW5nZSBmaWxlbmFtZXMgYmVnaW5uaW5nIHdpdGggInBjLi4uIiB0byAidGMuLi4iCi07IFJlYWQgaW5zdGFsbGF0aW9uIGluc3RydWN0aW9ucyBiZWZvcmUgdHJ5aW5nIHRvIG1ha2UgdGhlIHByb2dyYW0hCi07Ci07Ci07ICAgICAgKiAqICogT3V0cHV0IGZpbGUgKiAqICoKLWNqcGVnLnR0cAotOwotOyAqICogKiBDT01QSUxFUiBPUFRJT05TICogKiAqICAKLS5DWy1QXSAgICAgICAgOyBhYnNvbHV0ZSBjYWxscwotLkNbLU1dICAgICAgICA7IGFuZCBubyBzdHJpbmcgbWVyZ2luZywgZm9sa3MKLS5DWy13LWNsbl0gICAgOyBubyAiY29uc3RhbnQgaXMgbG9uZyIgd2FybmluZ3MKLS5DWy13LXBhcl0gICAgOyBubyAicGFyYW1ldGVyIHh4eHggdW51c2VkIgotLkNbLXctcmNoXSAgICA7IG5vICJ1bnJlYWNoYWJsZSBjb2RlIgotLkNbLXdzaWddICAgICA7IHdhcm4gaWYgc2lnbmlmaWNhbnQgZGlnaXRzIG1heSBiZSBsb3N0Ci09Ci07ICogKiAqICogTGlzdCBvZiBtb2R1bGVzICogKiAqICogCi1wY3N0YXJ0Lm8KLWNqcGVnLmMJCShjZGpwZWcuaCxqaW5jbHVkZS5oLGpjb25maWcuaCxqcGVnbGliLmgsam1vcmVjZmcuaCxqZXJyb3IuaCxjZGVycm9yLmgsanZlcnNpb24uaCkKLWNkanBlZy5jCShjZGpwZWcuaCxqaW5jbHVkZS5oLGpjb25maWcuaCxqcGVnbGliLmgsam1vcmVjZmcuaCxqZXJyb3IuaCxjZGVycm9yLmgpCi1yZHN3aXRjaC5jCShjZGpwZWcuaCxqaW5jbHVkZS5oLGpjb25maWcuaCxqcGVnbGliLmgsam1vcmVjZmcuaCxqZXJyb3IuaCxjZGVycm9yLmgpCi1yZHBwbS5jCQkoY2RqcGVnLmgsamluY2x1ZGUuaCxqY29uZmlnLmgsanBlZ2xpYi5oLGptb3JlY2ZnLmgsamVycm9yLmgsY2RlcnJvci5oKQotcmRnaWYuYwkJKGNkanBlZy5oLGppbmNsdWRlLmgsamNvbmZpZy5oLGpwZWdsaWIuaCxqbW9yZWNmZy5oLGplcnJvci5oLGNkZXJyb3IuaCkKLXJkdGFyZ2EuYwkoY2RqcGVnLmgsamluY2x1ZGUuaCxqY29uZmlnLmgsanBlZ2xpYi5oLGptb3JlY2ZnLmgsamVycm9yLmgsY2RlcnJvci5oKQotcmRibXAuYwkJKGNkanBlZy5oLGppbmNsdWRlLmgsamNvbmZpZy5oLGpwZWdsaWIuaCxqbW9yZWNmZy5oLGplcnJvci5oLGNkZXJyb3IuaCkKLXJkcmxlLmMJCShjZGpwZWcuaCxqaW5jbHVkZS5oLGpjb25maWcuaCxqcGVnbGliLmgsam1vcmVjZmcuaCxqZXJyb3IuaCxjZGVycm9yLmgpCi1saWJqcGVnLmxpYiAgICAgICAgOyBidWlsdCBieSBsaWJqcGVnLnByagotcGNmbHRsaWIubGliICAgICAgIDsgZmxvYXRpbmcgcG9pbnQgbGlicmFyeQotOyB0aGUgZmxvYXQgbGlicmFyeSBjYW4gYmUgb21pdHRlZCBpZiB5b3UndmUgdHVybmVkIG9mZiBEQ1RfRkxPQVRfU1VQUE9SVEVECi1wY3N0ZGxpYi5saWIgICAgICAgOyBzdGFuZGFyZCBsaWJyYXJ5Ci1wY2V4dGxpYi5saWIgICAgICAgOyBleHRlbmRlZCBsaWJyYXJ5CmRpZmYgLS1naXQgYS9tYWtkanBlZy5zdCBiL21ha2RqcGVnLnN0CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA0YjYxNDA0Li4wMDAwMDAwCi0tLSBhL21ha2RqcGVnLnN0CisrKyAvZGV2L251bGwKQEAgLTEsMzYgKzAsMCBAQAotOyBQcm9qZWN0IGZpbGUgZm9yIEluZGVwZW5kZW50IEpQRUcgR3JvdXAncyBzb2Z0d2FyZQotOwotOyBUaGlzIHByb2plY3QgZmlsZSBpcyBmb3IgQXRhcmkgU1QvU1RFL1RUIHN5c3RlbXMgdXNpbmcgUHVyZSBDIG9yIFR1cmJvIEMuCi07IFRoYW5rcyB0byBGcmFuayBNb2VobGUsIEIuIFNldHplcGZhbmR0LCBhbmQgR3VpZG8gVm9sbGJlZGluZy4KLTsKLTsgVG8gdXNlIHRoaXMgZmlsZSwgcmVuYW1lIGl0IHRvIGRqcGVnLnByai4KLTsgSWYgeW91IGFyZSB1c2luZyBUdXJibyBDLCBjaGFuZ2UgZmlsZW5hbWVzIGJlZ2lubmluZyB3aXRoICJwYy4uLiIgdG8gInRjLi4uIgotOyBSZWFkIGluc3RhbGxhdGlvbiBpbnN0cnVjdGlvbnMgYmVmb3JlIHRyeWluZyB0byBtYWtlIHRoZSBwcm9ncmFtIQotOwotOwotOyAgICAgICogKiAqIE91dHB1dCBmaWxlICogKiAqCi1kanBlZy50dHAKLTsKLTsgKiAqICogQ09NUElMRVIgT1BUSU9OUyAqICogKiAgCi0uQ1stUF0gICAgICAgIDsgYWJzb2x1dGUgY2FsbHMKLS5DWy1NXSAgICAgICAgOyBhbmQgbm8gc3RyaW5nIG1lcmdpbmcsIGZvbGtzCi0uQ1stdy1jbG5dICAgIDsgbm8gImNvbnN0YW50IGlzIGxvbmciIHdhcm5pbmdzCi0uQ1stdy1wYXJdICAgIDsgbm8gInBhcmFtZXRlciB4eHh4IHVudXNlZCIKLS5DWy13LXJjaF0gICAgOyBubyAidW5yZWFjaGFibGUgY29kZSIKLS5DWy13c2lnXSAgICAgOyB3YXJuIGlmIHNpZ25pZmljYW50IGRpZ2l0cyBtYXkgYmUgbG9zdAotPQotOyAqICogKiAqIExpc3Qgb2YgbW9kdWxlcyAqICogKiAqIAotcGNzdGFydC5vCi1kanBlZy5jCQkoY2RqcGVnLmgsamluY2x1ZGUuaCxqY29uZmlnLmgsanBlZ2xpYi5oLGptb3JlY2ZnLmgsamVycm9yLmgsY2RlcnJvci5oLGp2ZXJzaW9uLmgpCi1jZGpwZWcuYwkoY2RqcGVnLmgsamluY2x1ZGUuaCxqY29uZmlnLmgsanBlZ2xpYi5oLGptb3JlY2ZnLmgsamVycm9yLmgsY2RlcnJvci5oKQotcmRjb2xtYXAuYwkoY2RqcGVnLmgsamluY2x1ZGUuaCxqY29uZmlnLmgsanBlZ2xpYi5oLGptb3JlY2ZnLmgsamVycm9yLmgsY2RlcnJvci5oKQotd3JwcG0uYwkJKGNkanBlZy5oLGppbmNsdWRlLmgsamNvbmZpZy5oLGpwZWdsaWIuaCxqbW9yZWNmZy5oLGplcnJvci5oLGNkZXJyb3IuaCkKLXdyZ2lmLmMJCShjZGpwZWcuaCxqaW5jbHVkZS5oLGpjb25maWcuaCxqcGVnbGliLmgsam1vcmVjZmcuaCxqZXJyb3IuaCxjZGVycm9yLmgpCi13cnRhcmdhLmMJKGNkanBlZy5oLGppbmNsdWRlLmgsamNvbmZpZy5oLGpwZWdsaWIuaCxqbW9yZWNmZy5oLGplcnJvci5oLGNkZXJyb3IuaCkKLXdyYm1wLmMJCShjZGpwZWcuaCxqaW5jbHVkZS5oLGpjb25maWcuaCxqcGVnbGliLmgsam1vcmVjZmcuaCxqZXJyb3IuaCxjZGVycm9yLmgpCi13cnJsZS5jCQkoY2RqcGVnLmgsamluY2x1ZGUuaCxqY29uZmlnLmgsanBlZ2xpYi5oLGptb3JlY2ZnLmgsamVycm9yLmgsY2RlcnJvci5oKQotbGlianBlZy5saWIgICAgICAgIDsgYnVpbHQgYnkgbGlianBlZy5wcmoKLXBjZmx0bGliLmxpYiAgICAgICA7IGZsb2F0aW5nIHBvaW50IGxpYnJhcnkKLTsgdGhlIGZsb2F0IGxpYnJhcnkgY2FuIGJlIG9taXR0ZWQgaWYgeW91J3ZlIHR1cm5lZCBvZmYgRENUX0ZMT0FUX1NVUFBPUlRFRAotcGNzdGRsaWIubGliICAgICAgIDsgc3RhbmRhcmQgbGlicmFyeQotcGNleHRsaWIubGliICAgICAgIDsgZXh0ZW5kZWQgbGlicmFyeQpkaWZmIC0tZ2l0IGEvbWFrZWFkc3cudmM2IGIvbWFrZWFkc3cudmM2CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4MDQ1OWM1Li4wMDAwMDAwCi0tLSBhL21ha2VhZHN3LnZjNgorKysgL2Rldi9udWxsCkBAIC0xLDc3ICswLDAgQEAKLU1pY3Jvc29mdCBEZXZlbG9wZXIgU3R1ZGlvIFdvcmtzcGFjZSBGaWxlLCBGb3JtYXQgVmVyc2lvbiA2LjAwCi0jIFdBUk5VTkc6IERJRVNFIEFSQkVJVFNCRVJFSUNIU0RBVEVJIERBUkYgTklDSFQgQkVBUkJFSVRFVCBPREVSIEdFTJlTQ0hUIFdFUkRFTiEKLQotIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwotCi1Qcm9qZWN0OiAiY2pwZWciPSIuXGNqcGVnLmRzcCIgLSBQYWNrYWdlIE93bmVyPTw0PgotCi1QYWNrYWdlPTw1Pgote3t7Ci19fX0KLQotUGFja2FnZT08ND4KLXt7ewotfX19Ci0KLSMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKLQotUHJvamVjdDogImRqcGVnIj0iLlxkanBlZy5kc3AiIC0gUGFja2FnZSBPd25lcj08ND4KLQotUGFja2FnZT08NT4KLXt7ewotfX19Ci0KLVBhY2thZ2U9PDQ+Ci17e3sKLX19fQotCi0jIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCi0KLVByb2plY3Q6ICJqcGVndHJhbiI9Ii5canBlZ3RyYW4uZHNwIiAtIFBhY2thZ2UgT3duZXI9PDQ+Ci0KLVBhY2thZ2U9PDU+Ci17e3sKLX19fQotCi1QYWNrYWdlPTw0Pgote3t7Ci19fX0KLQotIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwotCi1Qcm9qZWN0OiAicmRqcGdjb20iPSIuXHJkanBnY29tLmRzcCIgLSBQYWNrYWdlIE93bmVyPTw0PgotCi1QYWNrYWdlPTw1Pgote3t7Ci19fX0KLQotUGFja2FnZT08ND4KLXt7ewotfX19Ci0KLSMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKLQotUHJvamVjdDogIndyanBnY29tIj0iLlx3cmpwZ2NvbS5kc3AiIC0gUGFja2FnZSBPd25lcj08ND4KLQotUGFja2FnZT08NT4KLXt7ewotfX19Ci0KLVBhY2thZ2U9PDQ+Ci17e3sKLX19fQotCi0jIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCi0KLUdsb2JhbDoKLQotUGFja2FnZT08NT4KLXt7ewotfX19Ci0KLVBhY2thZ2U9PDM+Ci17e3sKLX19fQotCi0jIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCi0KZGlmZiAtLWdpdCBhL21ha2Vhc2xuLnYxMCBiL21ha2Vhc2xuLnYxMApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNjE3ZDllOS4uMDAwMDAwMAotLS0gYS9tYWtlYXNsbi52MTAKKysrIC9kZXYvbnVsbApAQCAtMSwzMyArMCwwIEBACi2Lr6gKLU1pY3Jvc29mdCBWaXN1YWwgU3R1ZGlvIFNvbHV0aW9uIEZpbGUsIEZvcm1hdCBWZXJzaW9uIDExLjAwCi0jIFZpc3VhbCBDKysgRXhwcmVzcyAyMDEwCi1Qcm9qZWN0KCJ7OEJDOUNFQjgtOEI0QS0xMUQwLThEMTEtMDBBMEM5MUJDOTQyfSIpID0gImNqcGVnIiwgImNqcGVnLnZjeHByb2oiLCAiezJFN0ZBQUQ5LTJGNTgtNEJERS04MUYyLTFENkQzRkI4QkY1N30iCi1FbmRQcm9qZWN0Ci1Qcm9qZWN0KCJ7OEJDOUNFQjgtOEI0QS0xMUQwLThEMTEtMDBBMEM5MUJDOTQyfSIpID0gImRqcGVnIiwgImRqcGVnLnZjeHByb2oiLCAiezExMDQzMTM3LUI0NTMtNERGQS05MDEwLTREMkI5REMxNTQ1Q30iCi1FbmRQcm9qZWN0Ci1Qcm9qZWN0KCJ7OEJDOUNFQjgtOEI0QS0xMUQwLThEMTEtMDBBMEM5MUJDOTQyfSIpID0gImpwZWd0cmFuIiwgImpwZWd0cmFuLnZjeHByb2oiLCAiezAyNUJBQzUwLTUxQjUtNEZGRS1CQzQ3LTNGOTIwQkI0MDQ3RX0iCi1FbmRQcm9qZWN0Ci1Qcm9qZWN0KCJ7OEJDOUNFQjgtOEI0QS0xMUQwLThEMTEtMDBBMEM5MUJDOTQyfSIpID0gInJkanBnY29tIiwgInJkanBnY29tLnZjeHByb2oiLCAie0M4MTUxM0RCLTc4REMtNDZCQy1CQzk4LTgyRTc0NTIwMzk3Nn0iCi1FbmRQcm9qZWN0Ci1Qcm9qZWN0KCJ7OEJDOUNFQjgtOEI0QS0xMUQwLThEMTEtMDBBMEM5MUJDOTQyfSIpID0gIndyanBnY29tIiwgIndyanBnY29tLnZjeHByb2oiLCAie0I1NzA2NUQ0LUREREEtNDY2OC1CQUY1LTJENDkyNzBDOTczQ30iCi1FbmRQcm9qZWN0Ci1HbG9iYWwKLQlHbG9iYWxTZWN0aW9uKFNvbHV0aW9uQ29uZmlndXJhdGlvblBsYXRmb3JtcykgPSBwcmVTb2x1dGlvbgotCQlSZWxlYXNlfFdpbjMyID0gUmVsZWFzZXxXaW4zMgotCUVuZEdsb2JhbFNlY3Rpb24KLQlHbG9iYWxTZWN0aW9uKFByb2plY3RDb25maWd1cmF0aW9uUGxhdGZvcm1zKSA9IHBvc3RTb2x1dGlvbgotCQl7MkU3RkFBRDktMkY1OC00QkRFLTgxRjItMUQ2RDNGQjhCRjU3fS5SZWxlYXNlfFdpbjMyLkFjdGl2ZUNmZyA9IFJlbGVhc2V8V2luMzIKLQkJezJFN0ZBQUQ5LTJGNTgtNEJERS04MUYyLTFENkQzRkI4QkY1N30uUmVsZWFzZXxXaW4zMi5CdWlsZC4wID0gUmVsZWFzZXxXaW4zMgotCQl7MTEwNDMxMzctQjQ1My00REZBLTkwMTAtNEQyQjlEQzE1NDVDfS5SZWxlYXNlfFdpbjMyLkFjdGl2ZUNmZyA9IFJlbGVhc2V8V2luMzIKLQkJezExMDQzMTM3LUI0NTMtNERGQS05MDEwLTREMkI5REMxNTQ1Q30uUmVsZWFzZXxXaW4zMi5CdWlsZC4wID0gUmVsZWFzZXxXaW4zMgotCQl7MDI1QkFDNTAtNTFCNS00RkZFLUJDNDctM0Y5MjBCQjQwNDdFfS5SZWxlYXNlfFdpbjMyLkFjdGl2ZUNmZyA9IFJlbGVhc2V8V2luMzIKLQkJezAyNUJBQzUwLTUxQjUtNEZGRS1CQzQ3LTNGOTIwQkI0MDQ3RX0uUmVsZWFzZXxXaW4zMi5CdWlsZC4wID0gUmVsZWFzZXxXaW4zMgotCQl7QzgxNTEzREItNzhEQy00NkJDLUJDOTgtODJFNzQ1MjAzOTc2fS5SZWxlYXNlfFdpbjMyLkFjdGl2ZUNmZyA9IFJlbGVhc2V8V2luMzIKLQkJe0M4MTUxM0RCLTc4REMtNDZCQy1CQzk4LTgyRTc0NTIwMzk3Nn0uUmVsZWFzZXxXaW4zMi5CdWlsZC4wID0gUmVsZWFzZXxXaW4zMgotCQl7QjU3MDY1RDQtREREQS00NjY4LUJBRjUtMkQ0OTI3MEM5NzNDfS5SZWxlYXNlfFdpbjMyLkFjdGl2ZUNmZyA9IFJlbGVhc2V8V2luMzIKLQkJe0I1NzA2NUQ0LUREREEtNDY2OC1CQUY1LTJENDkyNzBDOTczQ30uUmVsZWFzZXxXaW4zMi5CdWlsZC4wID0gUmVsZWFzZXxXaW4zMgotCUVuZEdsb2JhbFNlY3Rpb24KLQlHbG9iYWxTZWN0aW9uKFNvbHV0aW9uUHJvcGVydGllcykgPSBwcmVTb2x1dGlvbgotCQlIaWRlU29sdXRpb25Ob2RlID0gRkFMU0UKLQlFbmRHbG9iYWxTZWN0aW9uCi1FbmRHbG9iYWwKZGlmZiAtLWdpdCBhL21ha2VjZGVwLnZjNiBiL21ha2VjZGVwLnZjNgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMTFkZmY3Ny4uMDAwMDAwMAotLS0gYS9tYWtlY2RlcC52YzYKKysrIC9kZXYvbnVsbApAQCAtMSw4MiArMCwwIEBACi0jIE1pY3Jvc29mdCBEZXZlbG9wZXIgU3R1ZGlvIGVyc3RlbGx0ZSBBYmiEbmdpZ2tlaXRzZGF0ZWksIGVpbmJlem9nZW4gdm9uIGNqcGVnLm1hawotCi0uXGNkanBlZy5jIDogXAotCSIuXGNkZXJyb3IuaCJcCi0JIi5cY2RqcGVnLmgiXAotCSIuXGpjb25maWcuaCJcCi0JIi5camVycm9yLmgiXAotCSIuXGppbmNsdWRlLmgiXAotCSIuXGptb3JlY2ZnLmgiXAotCSIuXGpwZWdsaWIuaCJcCi0JCi0KLS5cY2pwZWcuYyA6IFwKLQkiLlxjZGVycm9yLmgiXAotCSIuXGNkanBlZy5oIlwKLQkiLlxqY29uZmlnLmgiXAotCSIuXGplcnJvci5oIlwKLQkiLlxqaW5jbHVkZS5oIlwKLQkiLlxqbW9yZWNmZy5oIlwKLQkiLlxqcGVnbGliLmgiXAotCSIuXGp2ZXJzaW9uLmgiXAotCQotCi0uXHJkYm1wLmMgOiBcCi0JIi5cY2RlcnJvci5oIlwKLQkiLlxjZGpwZWcuaCJcCi0JIi5camNvbmZpZy5oIlwKLQkiLlxqZXJyb3IuaCJcCi0JIi5camluY2x1ZGUuaCJcCi0JIi5cam1vcmVjZmcuaCJcCi0JIi5canBlZ2xpYi5oIlwKLQkKLQotLlxyZGdpZi5jIDogXAotCSIuXGNkZXJyb3IuaCJcCi0JIi5cY2RqcGVnLmgiXAotCSIuXGpjb25maWcuaCJcCi0JIi5camVycm9yLmgiXAotCSIuXGppbmNsdWRlLmgiXAotCSIuXGptb3JlY2ZnLmgiXAotCSIuXGpwZWdsaWIuaCJcCi0JCi0KLS5ccmRwcG0uYyA6IFwKLQkiLlxjZGVycm9yLmgiXAotCSIuXGNkanBlZy5oIlwKLQkiLlxqY29uZmlnLmgiXAotCSIuXGplcnJvci5oIlwKLQkiLlxqaW5jbHVkZS5oIlwKLQkiLlxqbW9yZWNmZy5oIlwKLQkiLlxqcGVnbGliLmgiXAotCQotCi0uXHJkcmxlLmMgOiBcCi0JIi5cY2RlcnJvci5oIlwKLQkiLlxjZGpwZWcuaCJcCi0JIi5camNvbmZpZy5oIlwKLQkiLlxqZXJyb3IuaCJcCi0JIi5camluY2x1ZGUuaCJcCi0JIi5cam1vcmVjZmcuaCJcCi0JIi5canBlZ2xpYi5oIlwKLQkKLQotLlxyZHN3aXRjaC5jIDogXAotCSIuXGNkZXJyb3IuaCJcCi0JIi5cY2RqcGVnLmgiXAotCSIuXGpjb25maWcuaCJcCi0JIi5camVycm9yLmgiXAotCSIuXGppbmNsdWRlLmgiXAotCSIuXGptb3JlY2ZnLmgiXAotCSIuXGpwZWdsaWIuaCJcCi0JCi0KLS5ccmR0YXJnYS5jIDogXAotCSIuXGNkZXJyb3IuaCJcCi0JIi5cY2RqcGVnLmgiXAotCSIuXGpjb25maWcuaCJcCi0JIi5camVycm9yLmgiXAotCSIuXGppbmNsdWRlLmgiXAotCSIuXGptb3JlY2ZnLmgiXAotCSIuXGpwZWdsaWIuaCJcCi0JCmRpZmYgLS1naXQgYS9tYWtlY2RzcC52YzYgYi9tYWtlY2RzcC52YzYKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDNhYjU5NjUuLjAwMDAwMDAKLS0tIGEvbWFrZWNkc3AudmM2CisrKyAvZGV2L251bGwKQEAgLTEsMTMwICswLDAgQEAKLSMgTWljcm9zb2Z0IERldmVsb3BlciBTdHVkaW8gUHJvamVjdCBGaWxlIC0gTmFtZT0iY2pwZWciIC0gUGFja2FnZSBPd25lcj08ND4KLSMgTWljcm9zb2Z0IERldmVsb3BlciBTdHVkaW8gR2VuZXJhdGVkIEJ1aWxkIEZpbGUsIEZvcm1hdCBWZXJzaW9uIDYuMDAKLSMgKiogTklDSFQgQkVBUkJFSVRFTiAqKgotCi0jIFRBUkdUWVBFICJXaW4zMiAoeDg2KSBDb25zb2xlIEFwcGxpY2F0aW9uIiAweDAxMDMKLQotQ0ZHPWNqcGVnIC0gV2luMzIKLSFNRVNTQUdFIERpZXMgaXN0IGtlaW4gZ4FsdGlnZXMgTWFrZWZpbGUuIFp1bSBFcnN0ZWxsZW4gZGllc2VzIFByb2pla3RzIG1pdCBOTUFLRQotIU1FU1NBR0UgdmVyd2VuZGVuIFNpZSBkZW4gQmVmZWhsICJNYWtlZmlsZSBleHBvcnRpZXJlbiIgdW5kIGaBaHJlbiBTaWUgZGVuIEJlZmVobAotIU1FU1NBR0UgCi0hTUVTU0FHRSBOTUFLRSAvZiAiY2pwZWcubWFrIi4KLSFNRVNTQUdFIAotIU1FU1NBR0UgU2llIGv3bm5lbiBiZWltIEF1c2aBaHJlbiB2b24gTk1BS0UgZWluZSBLb25maWd1cmF0aW9uIGFuZ2ViZW4KLSFNRVNTQUdFIGR1cmNoIERlZmluaWVyZW4gZGVzIE1ha3JvcyBDRkcgaW4gZGVyIEJlZmVobHN6ZWlsZS4gWnVtIEJlaXNwaWVsOgotIU1FU1NBR0UgCi0hTUVTU0FHRSBOTUFLRSAvZiAiY2pwZWcubWFrIiBDRkc9ImNqcGVnIC0gV2luMzIiCi0hTUVTU0FHRSAKLSFNRVNTQUdFIEaBciBkaWUgS29uZmlndXJhdGlvbiBzdGVoZW4genVyIEF1c3dhaGw6Ci0hTUVTU0FHRSAKLSFNRVNTQUdFICJjanBlZyAtIFdpbjMyIiAoYmFzaWVyZW5kIGF1ZiAgIldpbjMyICh4ODYpIENvbnNvbGUgQXBwbGljYXRpb24iKQotIU1FU1NBR0UgCi0KLSMgQmVnaW4gUHJvamVjdAotIyBQUk9QIEFsbG93UGVyQ29uZmlnRGVwZW5kZW5jaWVzIDAKLSMgUFJPUCBTY2NfUHJvak5hbWUgIiIKLSMgUFJPUCBTY2NfTG9jYWxQYXRoICIiCi1DUFA9Y2wuZXhlCi1SU0M9cmMuZXhlCi0jIFBST1AgQkFTRSBVc2VfTUZDIDAKLSMgUFJPUCBCQVNFIFVzZV9EZWJ1Z19MaWJyYXJpZXMgMAotIyBQUk9QIEJBU0UgT3V0cHV0X0RpciAiLlxjanBlZ1xSZWxlYXNlIgotIyBQUk9QIEJBU0UgSW50ZXJtZWRpYXRlX0RpciAiLlxjanBlZ1xSZWxlYXNlIgotIyBQUk9QIEJBU0UgVGFyZ2V0X0RpciAiLlxjanBlZyIKLSMgUFJPUCBVc2VfTUZDIDAKLSMgUFJPUCBVc2VfRGVidWdfTGlicmFyaWVzIDAKLSMgUFJPUCBPdXRwdXRfRGlyICIuXGNqcGVnXFJlbGVhc2UiCi0jIFBST1AgSW50ZXJtZWRpYXRlX0RpciAiLlxjanBlZ1xSZWxlYXNlIgotIyBQUk9QIElnbm9yZV9FeHBvcnRfTGliIDAKLSMgUFJPUCBUYXJnZXRfRGlyICIuXGNqcGVnIgotIyBBREQgQkFTRSBDUFAgL25vbG9nbyAvVzMgL0dYIC9PMiAvRCAiV0lOMzIiIC9EICJOREVCVUciIC9EICJfQ09OU09MRSIgL1lYIC9jCi0jIEFERCBDUFAgL25vbG9nbyAvRzYgL01UIC9XMyAvR1ggL094IC9PYSAvT2IyIC9EICJXSU4zMiIgL0QgIk5ERUJVRyIgL0QgIl9DT05TT0xFIiAvWVggL0ZEIC9jCi0jIEFERCBCQVNFIFJTQyAvbCAweDQwOSAvZCAiTkRFQlVHIgotIyBBREQgUlNDIC9sIDB4NDA5IC9kICJOREVCVUciCi1CU0MzMj1ic2NtYWtlLmV4ZQotIyBBREQgQkFTRSBCU0MzMiAvbm9sb2dvCi0jIEFERCBCU0MzMiAvbm9sb2dvCi1MSU5LMzI9bGluay5leGUKLSMgQUREIEJBU0UgTElOSzMyIGtlcm5lbDMyLmxpYiB1c2VyMzIubGliIGdkaTMyLmxpYiB3aW5zcG9vbC5saWIgY29tZGxnMzIubGliIGFkdmFwaTMyLmxpYiBzaGVsbDMyLmxpYiBvbGUzMi5saWIgb2xlYXV0MzIubGliIHV1aWQubGliIG9kYmMzMi5saWIgb2RiY2NwMzIubGliIC9ub2xvZ28gL3N1YnN5c3RlbTpjb25zb2xlIC9tYWNoaW5lOkkzODYKLSMgQUREIExJTkszMiBSZWxlYXNlXGpwZWcubGliIGtlcm5lbDMyLmxpYiB1c2VyMzIubGliIGdkaTMyLmxpYiB3aW5zcG9vbC5saWIgY29tZGxnMzIubGliIGFkdmFwaTMyLmxpYiBzaGVsbDMyLmxpYiBvbGUzMi5saWIgb2xlYXV0MzIubGliIHV1aWQubGliIG9kYmMzMi5saWIgb2RiY2NwMzIubGliIC9ub2xvZ28gL3N1YnN5c3RlbTpjb25zb2xlIC9tYWNoaW5lOkkzODYKLSMgQmVnaW4gVGFyZ2V0Ci0KLSMgTmFtZSAiY2pwZWcgLSBXaW4zMiIKLSMgQmVnaW4gR3JvdXAgIlF1ZWxsY29kZWRhdGVpZW4iCi0KLSMgUFJPUCBEZWZhdWx0X0ZpbHRlciAiY3BwO2M7Y3h4O3JjO2RlZjtyO29kbDtpZGw7aHBqO2JhdDtmb3I7ZjkwIgotIyBCZWdpbiBTb3VyY2UgRmlsZQotCi1TT1VSQ0U9LlxjZGpwZWcuYwotIyBFbmQgU291cmNlIEZpbGUKLSMgQmVnaW4gU291cmNlIEZpbGUKLQotU09VUkNFPS5cY2pwZWcuYwotIyBFbmQgU291cmNlIEZpbGUKLSMgQmVnaW4gU291cmNlIEZpbGUKLQotU09VUkNFPS5ccmRibXAuYwotIyBFbmQgU291cmNlIEZpbGUKLSMgQmVnaW4gU291cmNlIEZpbGUKLQotU09VUkNFPS5ccmRnaWYuYwotIyBFbmQgU291cmNlIEZpbGUKLSMgQmVnaW4gU291cmNlIEZpbGUKLQotU09VUkNFPS5ccmRwcG0uYwotIyBFbmQgU291cmNlIEZpbGUKLSMgQmVnaW4gU291cmNlIEZpbGUKLQotU09VUkNFPS5ccmRybGUuYwotIyBFbmQgU291cmNlIEZpbGUKLSMgQmVnaW4gU291cmNlIEZpbGUKLQotU09VUkNFPS5ccmRzd2l0Y2guYwotIyBFbmQgU291cmNlIEZpbGUKLSMgQmVnaW4gU291cmNlIEZpbGUKLQotU09VUkNFPS5ccmR0YXJnYS5jCi0jIEVuZCBTb3VyY2UgRmlsZQotIyBFbmQgR3JvdXAKLSMgQmVnaW4gR3JvdXAgIkhlYWRlci1EYXRlaWVuIgotCi0jIFBST1AgRGVmYXVsdF9GaWx0ZXIgImg7aHBwO2h4eDtobTtpbmw7Zmk7ZmQiCi0jIEJlZ2luIFNvdXJjZSBGaWxlCi0KLVNPVVJDRT0uXGNkZXJyb3IuaAotIyBFbmQgU291cmNlIEZpbGUKLSMgQmVnaW4gU291cmNlIEZpbGUKLQotU09VUkNFPS5cY2RqcGVnLmgKLSMgRW5kIFNvdXJjZSBGaWxlCi0jIEJlZ2luIFNvdXJjZSBGaWxlCi0KLVNPVVJDRT0uXGpjb25maWcuaAotIyBFbmQgU291cmNlIEZpbGUKLSMgQmVnaW4gU291cmNlIEZpbGUKLQotU09VUkNFPS5camVycm9yLmgKLSMgRW5kIFNvdXJjZSBGaWxlCi0jIEJlZ2luIFNvdXJjZSBGaWxlCi0KLVNPVVJDRT0uXGppbmNsdWRlLmgKLSMgRW5kIFNvdXJjZSBGaWxlCi0jIEJlZ2luIFNvdXJjZSBGaWxlCi0KLVNPVVJDRT0uXGptb3JlY2ZnLmgKLSMgRW5kIFNvdXJjZSBGaWxlCi0jIEJlZ2luIFNvdXJjZSBGaWxlCi0KLVNPVVJDRT0uXGpwZWdsaWIuaAotIyBFbmQgU291cmNlIEZpbGUKLSMgQmVnaW4gU291cmNlIEZpbGUKLQotU09VUkNFPS5canZlcnNpb24uaAotIyBFbmQgU291cmNlIEZpbGUKLSMgRW5kIEdyb3VwCi0jIEJlZ2luIEdyb3VwICJSZXNzb3VyY2VuZGF0ZWllbiIKLQotIyBQUk9QIERlZmF1bHRfRmlsdGVyICJpY287Y3VyO2JtcDtkbGc7cmMyO3JjdDtiaW47Y250O3J0ZjtnaWY7anBnO2pwZWc7anBlIgotIyBFbmQgR3JvdXAKLSMgRW5kIFRhcmdldAotIyBFbmQgUHJvamVjdApkaWZmIC0tZ2l0IGEvbWFrZWNmaWwudjEwIGIvbWFrZWNmaWwudjEwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhNGY4MWFjLi4wMDAwMDAwCi0tLSBhL21ha2VjZmlsLnYxMAorKysgL2Rldi9udWxsCkBAIC0xLDY5ICswLDAgQEAKLYuvqDw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9InV0Zi04Ij8+Ci08UHJvamVjdCBUb29sc1ZlcnNpb249IjQuMCIgeG1sbnM9Imh0dHA6Ly9zY2hlbWFzLm1pY3Jvc29mdC5jb20vZGV2ZWxvcGVyL21zYnVpbGQvMjAwMyI+Ci0gIDxJdGVtR3JvdXA+Ci0gICAgPEZpbHRlciBJbmNsdWRlPSJTb3VyY2UgRmlsZXMiPgotICAgICAgPFVuaXF1ZUlkZW50aWZpZXI+ezRGQzczN0YxLUM3QTUtNDM3Ni1BMDY2LTJBMzJENzUyQTJGRn08L1VuaXF1ZUlkZW50aWZpZXI+Ci0gICAgICA8RXh0ZW5zaW9ucz5jcHA7YztjYztjeHg7ZGVmO29kbDtpZGw7aHBqO2JhdDthc207YXNteDwvRXh0ZW5zaW9ucz4KLSAgICA8L0ZpbHRlcj4KLSAgICA8RmlsdGVyIEluY2x1ZGU9IkhlYWRlciBGaWxlcyI+Ci0gICAgICA8VW5pcXVlSWRlbnRpZmllcj57OTM5OTUzODAtODlCRC00YjA0LTg4RUItNjI1RkJFNTJFQkZCfTwvVW5pcXVlSWRlbnRpZmllcj4KLSAgICAgIDxFeHRlbnNpb25zPmg7aHBwO2h4eDtobTtpbmw7aW5jO3hzZDwvRXh0ZW5zaW9ucz4KLSAgICA8L0ZpbHRlcj4KLSAgICA8RmlsdGVyIEluY2x1ZGU9IlJlc291cmNlIEZpbGVzIj4KLSAgICAgIDxVbmlxdWVJZGVudGlmaWVyPns2N0RBNkFCNi1GODAwLTRjMDgtOEI3QS04M0JCMTIxQUFEMDF9PC9VbmlxdWVJZGVudGlmaWVyPgotICAgICAgPEV4dGVuc2lvbnM+cmM7aWNvO2N1cjtibXA7ZGxnO3JjMjtyY3Q7YmluO3JncztnaWY7anBnO2pwZWc7anBlO3Jlc3g7dGlmZjt0aWY7cG5nO3dhdjttZmNyaWJib24tbXM8L0V4dGVuc2lvbnM+Ci0gICAgPC9GaWx0ZXI+Ci0gIDwvSXRlbUdyb3VwPgotICA8SXRlbUdyb3VwPgotICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iY2RlcnJvci5oIj4KLSAgICAgIDxGaWx0ZXI+SGVhZGVyIEZpbGVzPC9GaWx0ZXI+Ci0gICAgPC9DbEluY2x1ZGU+Ci0gICAgPENsSW5jbHVkZSBJbmNsdWRlPSJjZGpwZWcuaCI+Ci0gICAgICA8RmlsdGVyPkhlYWRlciBGaWxlczwvRmlsdGVyPgotICAgIDwvQ2xJbmNsdWRlPgotICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iamNvbmZpZy5oIj4KLSAgICAgIDxGaWx0ZXI+SGVhZGVyIEZpbGVzPC9GaWx0ZXI+Ci0gICAgPC9DbEluY2x1ZGU+Ci0gICAgPENsSW5jbHVkZSBJbmNsdWRlPSJqZXJyb3IuaCI+Ci0gICAgICA8RmlsdGVyPkhlYWRlciBGaWxlczwvRmlsdGVyPgotICAgIDwvQ2xJbmNsdWRlPgotICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iamluY2x1ZGUuaCI+Ci0gICAgICA8RmlsdGVyPkhlYWRlciBGaWxlczwvRmlsdGVyPgotICAgIDwvQ2xJbmNsdWRlPgotICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iam1vcmVjZmcuaCI+Ci0gICAgICA8RmlsdGVyPkhlYWRlciBGaWxlczwvRmlsdGVyPgotICAgIDwvQ2xJbmNsdWRlPgotICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0ianBlZ2xpYi5oIj4KLSAgICAgIDxGaWx0ZXI+SGVhZGVyIEZpbGVzPC9GaWx0ZXI+Ci0gICAgPC9DbEluY2x1ZGU+Ci0gICAgPENsSW5jbHVkZSBJbmNsdWRlPSJqdmVyc2lvbi5oIj4KLSAgICAgIDxGaWx0ZXI+SGVhZGVyIEZpbGVzPC9GaWx0ZXI+Ci0gICAgPC9DbEluY2x1ZGU+Ci0gIDwvSXRlbUdyb3VwPgotICA8SXRlbUdyb3VwPgotICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iY2RqcGVnLmMiPgotICAgICAgPEZpbHRlcj5Tb3VyY2UgRmlsZXM8L0ZpbHRlcj4KLSAgICA8L0NsQ29tcGlsZT4KLSAgICA8Q2xDb21waWxlIEluY2x1ZGU9ImNqcGVnLmMiPgotICAgICAgPEZpbHRlcj5Tb3VyY2UgRmlsZXM8L0ZpbHRlcj4KLSAgICA8L0NsQ29tcGlsZT4KLSAgICA8Q2xDb21waWxlIEluY2x1ZGU9InJkYm1wLmMiPgotICAgICAgPEZpbHRlcj5Tb3VyY2UgRmlsZXM8L0ZpbHRlcj4KLSAgICA8L0NsQ29tcGlsZT4KLSAgICA8Q2xDb21waWxlIEluY2x1ZGU9InJkZ2lmLmMiPgotICAgICAgPEZpbHRlcj5Tb3VyY2UgRmlsZXM8L0ZpbHRlcj4KLSAgICA8L0NsQ29tcGlsZT4KLSAgICA8Q2xDb21waWxlIEluY2x1ZGU9InJkcHBtLmMiPgotICAgICAgPEZpbHRlcj5Tb3VyY2UgRmlsZXM8L0ZpbHRlcj4KLSAgICA8L0NsQ29tcGlsZT4KLSAgICA8Q2xDb21waWxlIEluY2x1ZGU9InJkcmxlLmMiPgotICAgICAgPEZpbHRlcj5Tb3VyY2UgRmlsZXM8L0ZpbHRlcj4KLSAgICA8L0NsQ29tcGlsZT4KLSAgICA8Q2xDb21waWxlIEluY2x1ZGU9InJkc3dpdGNoLmMiPgotICAgICAgPEZpbHRlcj5Tb3VyY2UgRmlsZXM8L0ZpbHRlcj4KLSAgICA8L0NsQ29tcGlsZT4KLSAgICA8Q2xDb21waWxlIEluY2x1ZGU9InJkdGFyZ2EuYyI+Ci0gICAgICA8RmlsdGVyPlNvdXJjZSBGaWxlczwvRmlsdGVyPgotICAgIDwvQ2xDb21waWxlPgotICA8L0l0ZW1Hcm91cD4KLTwvUHJvamVjdD4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9tYWtlY21hay52YzYgYi9tYWtlY21hay52YzYKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGJlZTAzYmYuLjAwMDAwMDAKLS0tIGEvbWFrZWNtYWsudmM2CisrKyAvZGV2L251bGwKQEAgLTEsMTU5ICswLDAgQEAKLSMgTWljcm9zb2Z0IERldmVsb3BlciBTdHVkaW8gR2VuZXJhdGVkIE5NQUtFIEZpbGUsIEJhc2VkIG9uIGNqcGVnLmRzcAotIUlGICIkKENGRykiID09ICIiCi1DRkc9Y2pwZWcgLSBXaW4zMgotIU1FU1NBR0UgS2VpbmUgS29uZmlndXJhdGlvbiBhbmdlZ2ViZW4uIGNqcGVnIC0gV2luMzIgd2lyZCBhbHMgU3RhbmRhcmQgdmVyd2VuZGV0LgotIUVORElGIAotCi0hSUYgIiQoQ0ZHKSIgIT0gImNqcGVnIC0gV2luMzIiCi0hTUVTU0FHRSBVbmf8bHRpZ2UgS29uZmlndXJhdGlvbiAiJChDRkcpIiBhbmdlZ2ViZW4uCi0hTUVTU0FHRSBTaWUga/ZubmVuIGJlaW0gQXVzZvxocmVuIHZvbiBOTUFLRSBlaW5lIEtvbmZpZ3VyYXRpb24gYW5nZWJlbgotIU1FU1NBR0UgZHVyY2ggRGVmaW5pZXJlbiBkZXMgTWFrcm9zIENGRyBpbiBkZXIgQmVmZWhsc3plaWxlLiBadW0gQmVpc3BpZWw6Ci0hTUVTU0FHRSAKLSFNRVNTQUdFIE5NQUtFIC9mICJjanBlZy5tYWsiIENGRz0iY2pwZWcgLSBXaW4zMiIKLSFNRVNTQUdFIAotIU1FU1NBR0UgRvxyIGRpZSBLb25maWd1cmF0aW9uIHN0ZWhlbiB6dXIgQXVzd2FobDoKLSFNRVNTQUdFIAotIU1FU1NBR0UgImNqcGVnIC0gV2luMzIiIChiYXNpZXJlbmQgYXVmICAiV2luMzIgKHg4NikgQ29uc29sZSBBcHBsaWNhdGlvbiIpCi0hTUVTU0FHRSAKLSFFUlJPUiBFaW5lIHVuZ/xsdGlnZSBLb25maWd1cmF0aW9uIHd1cmRlIGFuZ2VnZWJlbi4KLSFFTkRJRiAKLQotIUlGICIkKE9TKSIgPT0gIldpbmRvd3NfTlQiCi1OVUxMPQotIUVMU0UgCi1OVUxMPW51bAotIUVORElGIAotCi1DUFA9Y2wuZXhlCi1SU0M9cmMuZXhlCi1PVVRESVI9LlxjanBlZ1xSZWxlYXNlCi1JTlRESVI9LlxjanBlZ1xSZWxlYXNlCi0jIEJlZ2luIEN1c3RvbSBNYWNyb3MKLU91dERpcj0uXGNqcGVnXFJlbGVhc2UKLSMgRW5kIEN1c3RvbSBNYWNyb3MKLQotQUxMIDogIiQoT1VURElSKVxjanBlZy5leGUiCi0KLQotQ0xFQU4gOgotCS1AZXJhc2UgIiQoSU5URElSKVxjZGpwZWcub2JqIgotCS1AZXJhc2UgIiQoSU5URElSKVxjanBlZy5vYmoiCi0JLUBlcmFzZSAiJChJTlRESVIpXHJkYm1wLm9iaiIKLQktQGVyYXNlICIkKElOVERJUilccmRnaWYub2JqIgotCS1AZXJhc2UgIiQoSU5URElSKVxyZHBwbS5vYmoiCi0JLUBlcmFzZSAiJChJTlRESVIpXHJkcmxlLm9iaiIKLQktQGVyYXNlICIkKElOVERJUilccmRzd2l0Y2gub2JqIgotCS1AZXJhc2UgIiQoSU5URElSKVxyZHRhcmdhLm9iaiIKLQktQGVyYXNlICIkKElOVERJUilcdmM2MC5pZGIiCi0JLUBlcmFzZSAiJChPVVRESVIpXGNqcGVnLmV4ZSIKLQotIiQoT1VURElSKSIgOgotICAgIGlmIG5vdCBleGlzdCAiJChPVVRESVIpLyQoTlVMTCkiIG1rZGlyICIkKE9VVERJUikiCi0KLUJTQzMyPWJzY21ha2UuZXhlCi1CU0MzMl9GTEFHUz0vbm9sb2dvIC9vIiQoT1VURElSKVxjanBlZy5ic2MiIAotQlNDMzJfU0JSUz0gXAotCQotTElOSzMyPWxpbmsuZXhlCi1MSU5LMzJfRkxBR1M9UmVsZWFzZVxqcGVnLmxpYiBrZXJuZWwzMi5saWIgdXNlcjMyLmxpYiBnZGkzMi5saWIgd2luc3Bvb2wubGliIGNvbWRsZzMyLmxpYiBhZHZhcGkzMi5saWIgc2hlbGwzMi5saWIgb2xlMzIubGliIG9sZWF1dDMyLmxpYiB1dWlkLmxpYiBvZGJjMzIubGliIG9kYmNjcDMyLmxpYiAvbm9sb2dvIC9zdWJzeXN0ZW06Y29uc29sZSAvaW5jcmVtZW50YWw6bm8gL3BkYjoiJChPVVRESVIpXGNqcGVnLnBkYiIgL21hY2hpbmU6STM4NiAvb3V0OiIkKE9VVERJUilcY2pwZWcuZXhlIiAKLUxJTkszMl9PQkpTPSBcCi0JIiQoSU5URElSKVxjZGpwZWcub2JqIiBcCi0JIiQoSU5URElSKVxjanBlZy5vYmoiIFwKLQkiJChJTlRESVIpXHJkYm1wLm9iaiIgXAotCSIkKElOVERJUilccmRnaWYub2JqIiBcCi0JIiQoSU5URElSKVxyZHBwbS5vYmoiIFwKLQkiJChJTlRESVIpXHJkcmxlLm9iaiIgXAotCSIkKElOVERJUilccmRzd2l0Y2gub2JqIiBcCi0JIiQoSU5URElSKVxyZHRhcmdhLm9iaiIKLQotIiQoT1VURElSKVxjanBlZy5leGUiIDogIiQoT1VURElSKSIgJChERUZfRklMRSkgJChMSU5LMzJfT0JKUykKLSAgICAkKExJTkszMikgQDw8Ci0gICQoTElOSzMyX0ZMQUdTKSAkKExJTkszMl9PQkpTKQotPDwKLQotQ1BQX1BST0o9L25vbG9nbyAvRzYgL01UIC9XMyAvR1ggL094IC9PYSAvT2IyIC9EICJXSU4zMiIgL0QgIk5ERUJVRyIgL0QgIl9DT05TT0xFIiAvRnAiJChJTlRESVIpXGNqcGVnLnBjaCIgL1lYIC9GbyIkKElOVERJUilcXCIgL0ZkIiQoSU5URElSKVxcIiAvRkQgL2MgCi0KLS5jeyQoSU5URElSKX0ub2JqOjoKLSAgICQoQ1BQKSBAPDwKLSAgICQoQ1BQX1BST0opICQ8IAotPDwKLQotLmNwcHskKElOVERJUil9Lm9iajo6Ci0gICAkKENQUCkgQDw8Ci0gICAkKENQUF9QUk9KKSAkPCAKLTw8Ci0KLS5jeHh7JChJTlRESVIpfS5vYmo6OgotICAgJChDUFApIEA8PAotICAgJChDUFBfUFJPSikgJDwgCi08PAotCi0uY3skKElOVERJUil9LnNicjo6Ci0gICAkKENQUCkgQDw8Ci0gICAkKENQUF9QUk9KKSAkPCAKLTw8Ci0KLS5jcHB7JChJTlRESVIpfS5zYnI6OgotICAgJChDUFApIEA8PAotICAgJChDUFBfUFJPSikgJDwgCi08PAotCi0uY3h4eyQoSU5URElSKX0uc2JyOjoKLSAgICQoQ1BQKSBAPDwKLSAgICQoQ1BQX1BST0opICQ8IAotPDwKLQotCi0hSUYgIiQoTk9fRVhURVJOQUxfREVQUykiICE9ICIxIgotIUlGIEVYSVNUUygiY2pwZWcuZGVwIikKLSFJTkNMVURFICJjanBlZy5kZXAiCi0hRUxTRSAKLSFNRVNTQUdFIFdhcm5pbmc6IGNhbm5vdCBmaW5kICJjanBlZy5kZXAiCi0hRU5ESUYgCi0hRU5ESUYgCi0KLQotIUlGICIkKENGRykiID09ICJjanBlZyAtIFdpbjMyIgotU09VUkNFPS5cY2RqcGVnLmMKLQotIiQoSU5URElSKVxjZGpwZWcub2JqIiA6ICQoU09VUkNFKSAiJChJTlRESVIpIgotCi0KLVNPVVJDRT0uXGNqcGVnLmMKLQotIiQoSU5URElSKVxjanBlZy5vYmoiIDogJChTT1VSQ0UpICIkKElOVERJUikiCi0KLQotU09VUkNFPS5ccmRibXAuYwotCi0iJChJTlRESVIpXHJkYm1wLm9iaiIgOiAkKFNPVVJDRSkgIiQoSU5URElSKSIKLQotCi1TT1VSQ0U9LlxyZGdpZi5jCi0KLSIkKElOVERJUilccmRnaWYub2JqIiA6ICQoU09VUkNFKSAiJChJTlRESVIpIgotCi0KLVNPVVJDRT0uXHJkcHBtLmMKLQotIiQoSU5URElSKVxyZHBwbS5vYmoiIDogJChTT1VSQ0UpICIkKElOVERJUikiCi0KLQotU09VUkNFPS5ccmRybGUuYwotCi0iJChJTlRESVIpXHJkcmxlLm9iaiIgOiAkKFNPVVJDRSkgIiQoSU5URElSKSIKLQotCi1TT1VSQ0U9LlxyZHN3aXRjaC5jCi0KLSIkKElOVERJUilccmRzd2l0Y2gub2JqIiA6ICQoU09VUkNFKSAiJChJTlRESVIpIgotCi0KLVNPVVJDRT0uXHJkdGFyZ2EuYwotCi0iJChJTlRESVIpXHJkdGFyZ2Eub2JqIiA6ICQoU09VUkNFKSAiJChJTlRESVIpIgotCi0KLQotIUVORElGIAotCmRpZmYgLS1naXQgYS9tYWtlY3ZjeC52MTAgYi9tYWtlY3ZjeC52MTAKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDVkZjVjNjguLjAwMDAwMDAKLS0tIGEvbWFrZWN2Y3gudjEwCisrKyAvZGV2L251bGwKQEAgLTEsNzYgKzAsMCBAQAoti6+oPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz4KLTxQcm9qZWN0IERlZmF1bHRUYXJnZXRzPSJCdWlsZCIgVG9vbHNWZXJzaW9uPSI0LjAiIHhtbG5zPSJodHRwOi8vc2NoZW1hcy5taWNyb3NvZnQuY29tL2RldmVsb3Blci9tc2J1aWxkLzIwMDMiPgotICA8SXRlbUdyb3VwIExhYmVsPSJQcm9qZWN0Q29uZmlndXJhdGlvbnMiPgotICAgIDxQcm9qZWN0Q29uZmlndXJhdGlvbiBJbmNsdWRlPSJSZWxlYXNlfFdpbjMyIj4KLSAgICAgIDxDb25maWd1cmF0aW9uPlJlbGVhc2U8L0NvbmZpZ3VyYXRpb24+Ci0gICAgICA8UGxhdGZvcm0+V2luMzI8L1BsYXRmb3JtPgotICAgIDwvUHJvamVjdENvbmZpZ3VyYXRpb24+Ci0gIDwvSXRlbUdyb3VwPgotICA8UHJvcGVydHlHcm91cCBMYWJlbD0iR2xvYmFscyI+Ci0gICAgPFByb2plY3RHdWlkPnsyRTdGQUFEOS0yRjU4LTRCREUtODFGMi0xRDZEM0ZCOEJGNTd9PC9Qcm9qZWN0R3VpZD4KLSAgICA8S2V5d29yZD5XaW4zMlByb2o8L0tleXdvcmQ+Ci0gICAgPFJvb3ROYW1lc3BhY2U+Y2pwZWc8L1Jvb3ROYW1lc3BhY2U+Ci0gIDwvUHJvcGVydHlHcm91cD4KLSAgPEltcG9ydCBQcm9qZWN0PSIkKFZDVGFyZ2V0c1BhdGgpXE1pY3Jvc29mdC5DcHAuRGVmYXVsdC5wcm9wcyIgLz4KLSAgPFByb3BlcnR5R3JvdXAgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdSZWxlYXNlfFdpbjMyJyIgTGFiZWw9IkNvbmZpZ3VyYXRpb24iPgotICAgIDxDb25maWd1cmF0aW9uVHlwZT5BcHBsaWNhdGlvbjwvQ29uZmlndXJhdGlvblR5cGU+Ci0gICAgPFVzZURlYnVnTGlicmFyaWVzPmZhbHNlPC9Vc2VEZWJ1Z0xpYnJhcmllcz4KLSAgICA8V2hvbGVQcm9ncmFtT3B0aW1pemF0aW9uPnRydWU8L1dob2xlUHJvZ3JhbU9wdGltaXphdGlvbj4KLSAgICA8Q2hhcmFjdGVyU2V0PlVuaWNvZGU8L0NoYXJhY3RlclNldD4KLSAgPC9Qcm9wZXJ0eUdyb3VwPgotICA8SW1wb3J0IFByb2plY3Q9IiQoVkNUYXJnZXRzUGF0aClcTWljcm9zb2Z0LkNwcC5wcm9wcyIgLz4KLSAgPEltcG9ydEdyb3VwIExhYmVsPSJFeHRlbnNpb25TZXR0aW5ncyI+Ci0gIDwvSW1wb3J0R3JvdXA+Ci0gIDxJbXBvcnRHcm91cCBMYWJlbD0iUHJvcGVydHlTaGVldHMiIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUmVsZWFzZXxXaW4zMiciPgotICAgIDxJbXBvcnQgUHJvamVjdD0iJChVc2VyUm9vdERpcilcTWljcm9zb2Z0LkNwcC4kKFBsYXRmb3JtKS51c2VyLnByb3BzIiBDb25kaXRpb249ImV4aXN0cygnJChVc2VyUm9vdERpcilcTWljcm9zb2Z0LkNwcC4kKFBsYXRmb3JtKS51c2VyLnByb3BzJykiIExhYmVsPSJMb2NhbEFwcERhdGFQbGF0Zm9ybSIgLz4KLSAgPC9JbXBvcnRHcm91cD4KLSAgPFByb3BlcnR5R3JvdXAgTGFiZWw9IlVzZXJNYWNyb3MiIC8+Ci0gIDxQcm9wZXJ0eUdyb3VwIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUmVsZWFzZXxXaW4zMiciPgotICAgIDxMaW5rSW5jcmVtZW50YWw+ZmFsc2U8L0xpbmtJbmNyZW1lbnRhbD4KLSAgICA8T3V0RGlyPiQoUHJvamVjdE5hbWUpXCQoQ29uZmlndXJhdGlvbilcPC9PdXREaXI+Ci0gICAgPEludERpcj4kKFByb2plY3ROYW1lKVwkKENvbmZpZ3VyYXRpb24pXDwvSW50RGlyPgotICA8L1Byb3BlcnR5R3JvdXA+Ci0gIDxJdGVtRGVmaW5pdGlvbkdyb3VwIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUmVsZWFzZXxXaW4zMiciPgotICAgIDxDbENvbXBpbGU+Ci0gICAgICA8V2FybmluZ0xldmVsPkxldmVsMzwvV2FybmluZ0xldmVsPgotICAgICAgPFByZWNvbXBpbGVkSGVhZGVyPk5vdFVzaW5nPC9QcmVjb21waWxlZEhlYWRlcj4KLSAgICAgIDxPcHRpbWl6YXRpb24+RnVsbDwvT3B0aW1pemF0aW9uPgotICAgICAgPEZ1bmN0aW9uTGV2ZWxMaW5raW5nPnRydWU8L0Z1bmN0aW9uTGV2ZWxMaW5raW5nPgotICAgICAgPEludHJpbnNpY0Z1bmN0aW9ucz5mYWxzZTwvSW50cmluc2ljRnVuY3Rpb25zPgotICAgICAgPFByZXByb2Nlc3NvckRlZmluaXRpb25zPldJTjMyO05ERUJVRztfQ09OU09MRTtfQ1JUX1NFQ1VSRV9OT19XQVJOSU5HUzwvUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM+Ci0gICAgICA8T21pdEZyYW1lUG9pbnRlcnM+dHJ1ZTwvT21pdEZyYW1lUG9pbnRlcnM+Ci0gICAgICA8RW5hYmxlRmliZXJTYWZlT3B0aW1pemF0aW9ucz50cnVlPC9FbmFibGVGaWJlclNhZmVPcHRpbWl6YXRpb25zPgotICAgICAgPERpc2FibGVTcGVjaWZpY1dhcm5pbmdzPjQ5OTY8L0Rpc2FibGVTcGVjaWZpY1dhcm5pbmdzPgotICAgIDwvQ2xDb21waWxlPgotICAgIDxMaW5rPgotICAgICAgPFN1YlN5c3RlbT5Db25zb2xlPC9TdWJTeXN0ZW0+Ci0gICAgICA8R2VuZXJhdGVEZWJ1Z0luZm9ybWF0aW9uPnRydWU8L0dlbmVyYXRlRGVidWdJbmZvcm1hdGlvbj4KLSAgICAgIDxFbmFibGVDT01EQVRGb2xkaW5nPnRydWU8L0VuYWJsZUNPTURBVEZvbGRpbmc+Ci0gICAgICA8T3B0aW1pemVSZWZlcmVuY2VzPnRydWU8L09wdGltaXplUmVmZXJlbmNlcz4KLSAgICAgIDxBZGRpdGlvbmFsRGVwZW5kZW5jaWVzPlJlbGVhc2VcanBlZy5saWI7a2VybmVsMzIubGliO3VzZXIzMi5saWI7Z2RpMzIubGliO3dpbnNwb29sLmxpYjtjb21kbGczMi5saWI7YWR2YXBpMzIubGliO3NoZWxsMzIubGliO29sZTMyLmxpYjtvbGVhdXQzMi5saWI7dXVpZC5saWI7b2RiYzMyLmxpYjtvZGJjY3AzMi5saWI7JShBZGRpdGlvbmFsRGVwZW5kZW5jaWVzKTwvQWRkaXRpb25hbERlcGVuZGVuY2llcz4KLSAgICA8L0xpbms+Ci0gIDwvSXRlbURlZmluaXRpb25Hcm91cD4KLSAgPEl0ZW1Hcm91cD4KLSAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9ImNkZXJyb3IuaCIgLz4KLSAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9ImNkanBlZy5oIiAvPgotICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iamNvbmZpZy5oIiAvPgotICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iamVycm9yLmgiIC8+Ci0gICAgPENsSW5jbHVkZSBJbmNsdWRlPSJqaW5jbHVkZS5oIiAvPgotICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iam1vcmVjZmcuaCIgLz4KLSAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9ImpwZWdsaWIuaCIgLz4KLSAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Imp2ZXJzaW9uLmgiIC8+Ci0gIDwvSXRlbUdyb3VwPgotICA8SXRlbUdyb3VwPgotICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iY2RqcGVnLmMiIC8+Ci0gICAgPENsQ29tcGlsZSBJbmNsdWRlPSJjanBlZy5jIiAvPgotICAgIDxDbENvbXBpbGUgSW5jbHVkZT0icmRibXAuYyIgLz4KLSAgICA8Q2xDb21waWxlIEluY2x1ZGU9InJkZ2lmLmMiIC8+Ci0gICAgPENsQ29tcGlsZSBJbmNsdWRlPSJyZHBwbS5jIiAvPgotICAgIDxDbENvbXBpbGUgSW5jbHVkZT0icmRybGUuYyIgLz4KLSAgICA8Q2xDb21waWxlIEluY2x1ZGU9InJkc3dpdGNoLmMiIC8+Ci0gICAgPENsQ29tcGlsZSBJbmNsdWRlPSJyZHRhcmdhLmMiIC8+Ci0gIDwvSXRlbUdyb3VwPgotICA8SW1wb3J0IFByb2plY3Q9IiQoVkNUYXJnZXRzUGF0aClcTWljcm9zb2Z0LkNwcC50YXJnZXRzIiAvPgotICA8SW1wb3J0R3JvdXAgTGFiZWw9IkV4dGVuc2lvblRhcmdldHMiPgotICA8L0ltcG9ydEdyb3VwPgotPC9Qcm9qZWN0PgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL21ha2VkZGVwLnZjNiBiL21ha2VkZGVwLnZjNgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZjkxMWViYS4uMDAwMDAwMAotLS0gYS9tYWtlZGRlcC52YzYKKysrIC9kZXYvbnVsbApAQCAtMSw4MiArMCwwIEBACi0jIE1pY3Jvc29mdCBEZXZlbG9wZXIgU3R1ZGlvIGVyc3RlbGx0ZSBBYmiEbmdpZ2tlaXRzZGF0ZWksIGVpbmJlem9nZW4gdm9uIGRqcGVnLm1hawotCi0uXGNkanBlZy5jIDogXAotCSIuXGNkZXJyb3IuaCJcCi0JIi5cY2RqcGVnLmgiXAotCSIuXGpjb25maWcuaCJcCi0JIi5camVycm9yLmgiXAotCSIuXGppbmNsdWRlLmgiXAotCSIuXGptb3JlY2ZnLmgiXAotCSIuXGpwZWdsaWIuaCJcCi0JCi0KLS5cZGpwZWcuYyA6IFwKLQkiLlxjZGVycm9yLmgiXAotCSIuXGNkanBlZy5oIlwKLQkiLlxqY29uZmlnLmgiXAotCSIuXGplcnJvci5oIlwKLQkiLlxqaW5jbHVkZS5oIlwKLQkiLlxqbW9yZWNmZy5oIlwKLQkiLlxqcGVnbGliLmgiXAotCSIuXGp2ZXJzaW9uLmgiXAotCQotCi0uXHJkY29sbWFwLmMgOiBcCi0JIi5cY2RlcnJvci5oIlwKLQkiLlxjZGpwZWcuaCJcCi0JIi5camNvbmZpZy5oIlwKLQkiLlxqZXJyb3IuaCJcCi0JIi5camluY2x1ZGUuaCJcCi0JIi5cam1vcmVjZmcuaCJcCi0JIi5canBlZ2xpYi5oIlwKLQkKLQotLlx3cmJtcC5jIDogXAotCSIuXGNkZXJyb3IuaCJcCi0JIi5cY2RqcGVnLmgiXAotCSIuXGpjb25maWcuaCJcCi0JIi5camVycm9yLmgiXAotCSIuXGppbmNsdWRlLmgiXAotCSIuXGptb3JlY2ZnLmgiXAotCSIuXGpwZWdsaWIuaCJcCi0JCi0KLS5cd3JnaWYuYyA6IFwKLQkiLlxjZGVycm9yLmgiXAotCSIuXGNkanBlZy5oIlwKLQkiLlxqY29uZmlnLmgiXAotCSIuXGplcnJvci5oIlwKLQkiLlxqaW5jbHVkZS5oIlwKLQkiLlxqbW9yZWNmZy5oIlwKLQkiLlxqcGVnbGliLmgiXAotCQotCi0uXHdycHBtLmMgOiBcCi0JIi5cY2RlcnJvci5oIlwKLQkiLlxjZGpwZWcuaCJcCi0JIi5camNvbmZpZy5oIlwKLQkiLlxqZXJyb3IuaCJcCi0JIi5camluY2x1ZGUuaCJcCi0JIi5cam1vcmVjZmcuaCJcCi0JIi5canBlZ2xpYi5oIlwKLQkKLQotLlx3cnJsZS5jIDogXAotCSIuXGNkZXJyb3IuaCJcCi0JIi5cY2RqcGVnLmgiXAotCSIuXGpjb25maWcuaCJcCi0JIi5camVycm9yLmgiXAotCSIuXGppbmNsdWRlLmgiXAotCSIuXGptb3JlY2ZnLmgiXAotCSIuXGpwZWdsaWIuaCJcCi0JCi0KLS5cd3J0YXJnYS5jIDogXAotCSIuXGNkZXJyb3IuaCJcCi0JIi5cY2RqcGVnLmgiXAotCSIuXGpjb25maWcuaCJcCi0JIi5camVycm9yLmgiXAotCSIuXGppbmNsdWRlLmgiXAotCSIuXGptb3JlY2ZnLmgiXAotCSIuXGpwZWdsaWIuaCJcCi0JCmRpZmYgLS1naXQgYS9tYWtlZGRzcC52YzYgYi9tYWtlZGRzcC52YzYKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGY1ODNhMGYuLjAwMDAwMDAKLS0tIGEvbWFrZWRkc3AudmM2CisrKyAvZGV2L251bGwKQEAgLTEsMTMwICswLDAgQEAKLSMgTWljcm9zb2Z0IERldmVsb3BlciBTdHVkaW8gUHJvamVjdCBGaWxlIC0gTmFtZT0iZGpwZWciIC0gUGFja2FnZSBPd25lcj08ND4KLSMgTWljcm9zb2Z0IERldmVsb3BlciBTdHVkaW8gR2VuZXJhdGVkIEJ1aWxkIEZpbGUsIEZvcm1hdCBWZXJzaW9uIDYuMDAKLSMgKiogTklDSFQgQkVBUkJFSVRFTiAqKgotCi0jIFRBUkdUWVBFICJXaW4zMiAoeDg2KSBDb25zb2xlIEFwcGxpY2F0aW9uIiAweDAxMDMKLQotQ0ZHPWRqcGVnIC0gV2luMzIKLSFNRVNTQUdFIERpZXMgaXN0IGtlaW4gZ4FsdGlnZXMgTWFrZWZpbGUuIFp1bSBFcnN0ZWxsZW4gZGllc2VzIFByb2pla3RzIG1pdCBOTUFLRQotIU1FU1NBR0UgdmVyd2VuZGVuIFNpZSBkZW4gQmVmZWhsICJNYWtlZmlsZSBleHBvcnRpZXJlbiIgdW5kIGaBaHJlbiBTaWUgZGVuIEJlZmVobAotIU1FU1NBR0UgCi0hTUVTU0FHRSBOTUFLRSAvZiAiZGpwZWcubWFrIi4KLSFNRVNTQUdFIAotIU1FU1NBR0UgU2llIGv3bm5lbiBiZWltIEF1c2aBaHJlbiB2b24gTk1BS0UgZWluZSBLb25maWd1cmF0aW9uIGFuZ2ViZW4KLSFNRVNTQUdFIGR1cmNoIERlZmluaWVyZW4gZGVzIE1ha3JvcyBDRkcgaW4gZGVyIEJlZmVobHN6ZWlsZS4gWnVtIEJlaXNwaWVsOgotIU1FU1NBR0UgCi0hTUVTU0FHRSBOTUFLRSAvZiAiZGpwZWcubWFrIiBDRkc9ImRqcGVnIC0gV2luMzIiCi0hTUVTU0FHRSAKLSFNRVNTQUdFIEaBciBkaWUgS29uZmlndXJhdGlvbiBzdGVoZW4genVyIEF1c3dhaGw6Ci0hTUVTU0FHRSAKLSFNRVNTQUdFICJkanBlZyAtIFdpbjMyIiAoYmFzaWVyZW5kIGF1ZiAgIldpbjMyICh4ODYpIENvbnNvbGUgQXBwbGljYXRpb24iKQotIU1FU1NBR0UgCi0KLSMgQmVnaW4gUHJvamVjdAotIyBQUk9QIEFsbG93UGVyQ29uZmlnRGVwZW5kZW5jaWVzIDAKLSMgUFJPUCBTY2NfUHJvak5hbWUgIiIKLSMgUFJPUCBTY2NfTG9jYWxQYXRoICIiCi1DUFA9Y2wuZXhlCi1SU0M9cmMuZXhlCi0jIFBST1AgQkFTRSBVc2VfTUZDIDAKLSMgUFJPUCBCQVNFIFVzZV9EZWJ1Z19MaWJyYXJpZXMgMAotIyBQUk9QIEJBU0UgT3V0cHV0X0RpciAiLlxkanBlZ1xSZWxlYXNlIgotIyBQUk9QIEJBU0UgSW50ZXJtZWRpYXRlX0RpciAiLlxkanBlZ1xSZWxlYXNlIgotIyBQUk9QIEJBU0UgVGFyZ2V0X0RpciAiLlxkanBlZyIKLSMgUFJPUCBVc2VfTUZDIDAKLSMgUFJPUCBVc2VfRGVidWdfTGlicmFyaWVzIDAKLSMgUFJPUCBPdXRwdXRfRGlyICIuXGRqcGVnXFJlbGVhc2UiCi0jIFBST1AgSW50ZXJtZWRpYXRlX0RpciAiLlxkanBlZ1xSZWxlYXNlIgotIyBQUk9QIElnbm9yZV9FeHBvcnRfTGliIDAKLSMgUFJPUCBUYXJnZXRfRGlyICIuXGRqcGVnIgotIyBBREQgQkFTRSBDUFAgL25vbG9nbyAvVzMgL0dYIC9PMiAvRCAiV0lOMzIiIC9EICJOREVCVUciIC9EICJfQ09OU09MRSIgL1lYIC9jCi0jIEFERCBDUFAgL25vbG9nbyAvRzYgL01UIC9XMyAvR1ggL094IC9PYSAvT2IyIC9EICJXSU4zMiIgL0QgIk5ERUJVRyIgL0QgIl9DT05TT0xFIiAvWVggL0ZEIC9jCi0jIEFERCBCQVNFIFJTQyAvbCAweDQwOSAvZCAiTkRFQlVHIgotIyBBREQgUlNDIC9sIDB4NDA5IC9kICJOREVCVUciCi1CU0MzMj1ic2NtYWtlLmV4ZQotIyBBREQgQkFTRSBCU0MzMiAvbm9sb2dvCi0jIEFERCBCU0MzMiAvbm9sb2dvCi1MSU5LMzI9bGluay5leGUKLSMgQUREIEJBU0UgTElOSzMyIGtlcm5lbDMyLmxpYiB1c2VyMzIubGliIGdkaTMyLmxpYiB3aW5zcG9vbC5saWIgY29tZGxnMzIubGliIGFkdmFwaTMyLmxpYiBzaGVsbDMyLmxpYiBvbGUzMi5saWIgb2xlYXV0MzIubGliIHV1aWQubGliIG9kYmMzMi5saWIgb2RiY2NwMzIubGliIC9ub2xvZ28gL3N1YnN5c3RlbTpjb25zb2xlIC9tYWNoaW5lOkkzODYKLSMgQUREIExJTkszMiBSZWxlYXNlXGpwZWcubGliIGtlcm5lbDMyLmxpYiB1c2VyMzIubGliIGdkaTMyLmxpYiB3aW5zcG9vbC5saWIgY29tZGxnMzIubGliIGFkdmFwaTMyLmxpYiBzaGVsbDMyLmxpYiBvbGUzMi5saWIgb2xlYXV0MzIubGliIHV1aWQubGliIG9kYmMzMi5saWIgb2RiY2NwMzIubGliIC9ub2xvZ28gL3N1YnN5c3RlbTpjb25zb2xlIC9tYWNoaW5lOkkzODYKLSMgQmVnaW4gVGFyZ2V0Ci0KLSMgTmFtZSAiZGpwZWcgLSBXaW4zMiIKLSMgQmVnaW4gR3JvdXAgIlF1ZWxsY29kZWRhdGVpZW4iCi0KLSMgUFJPUCBEZWZhdWx0X0ZpbHRlciAiY3BwO2M7Y3h4O3JjO2RlZjtyO29kbDtpZGw7aHBqO2JhdDtmb3I7ZjkwIgotIyBCZWdpbiBTb3VyY2UgRmlsZQotCi1TT1VSQ0U9LlxjZGpwZWcuYwotIyBFbmQgU291cmNlIEZpbGUKLSMgQmVnaW4gU291cmNlIEZpbGUKLQotU09VUkNFPS5cZGpwZWcuYwotIyBFbmQgU291cmNlIEZpbGUKLSMgQmVnaW4gU291cmNlIEZpbGUKLQotU09VUkNFPS5ccmRjb2xtYXAuYwotIyBFbmQgU291cmNlIEZpbGUKLSMgQmVnaW4gU291cmNlIEZpbGUKLQotU09VUkNFPS5cd3JibXAuYwotIyBFbmQgU291cmNlIEZpbGUKLSMgQmVnaW4gU291cmNlIEZpbGUKLQotU09VUkNFPS5cd3JnaWYuYwotIyBFbmQgU291cmNlIEZpbGUKLSMgQmVnaW4gU291cmNlIEZpbGUKLQotU09VUkNFPS5cd3JwcG0uYwotIyBFbmQgU291cmNlIEZpbGUKLSMgQmVnaW4gU291cmNlIEZpbGUKLQotU09VUkNFPS5cd3JybGUuYwotIyBFbmQgU291cmNlIEZpbGUKLSMgQmVnaW4gU291cmNlIEZpbGUKLQotU09VUkNFPS5cd3J0YXJnYS5jCi0jIEVuZCBTb3VyY2UgRmlsZQotIyBFbmQgR3JvdXAKLSMgQmVnaW4gR3JvdXAgIkhlYWRlci1EYXRlaWVuIgotCi0jIFBST1AgRGVmYXVsdF9GaWx0ZXIgImg7aHBwO2h4eDtobTtpbmw7Zmk7ZmQiCi0jIEJlZ2luIFNvdXJjZSBGaWxlCi0KLVNPVVJDRT0uXGNkZXJyb3IuaAotIyBFbmQgU291cmNlIEZpbGUKLSMgQmVnaW4gU291cmNlIEZpbGUKLQotU09VUkNFPS5cY2RqcGVnLmgKLSMgRW5kIFNvdXJjZSBGaWxlCi0jIEJlZ2luIFNvdXJjZSBGaWxlCi0KLVNPVVJDRT0uXGpjb25maWcuaAotIyBFbmQgU291cmNlIEZpbGUKLSMgQmVnaW4gU291cmNlIEZpbGUKLQotU09VUkNFPS5camVycm9yLmgKLSMgRW5kIFNvdXJjZSBGaWxlCi0jIEJlZ2luIFNvdXJjZSBGaWxlCi0KLVNPVVJDRT0uXGppbmNsdWRlLmgKLSMgRW5kIFNvdXJjZSBGaWxlCi0jIEJlZ2luIFNvdXJjZSBGaWxlCi0KLVNPVVJDRT0uXGptb3JlY2ZnLmgKLSMgRW5kIFNvdXJjZSBGaWxlCi0jIEJlZ2luIFNvdXJjZSBGaWxlCi0KLVNPVVJDRT0uXGpwZWdsaWIuaAotIyBFbmQgU291cmNlIEZpbGUKLSMgQmVnaW4gU291cmNlIEZpbGUKLQotU09VUkNFPS5canZlcnNpb24uaAotIyBFbmQgU291cmNlIEZpbGUKLSMgRW5kIEdyb3VwCi0jIEJlZ2luIEdyb3VwICJSZXNzb3VyY2VuZGF0ZWllbiIKLQotIyBQUk9QIERlZmF1bHRfRmlsdGVyICJpY287Y3VyO2JtcDtkbGc7cmMyO3JjdDtiaW47Y250O3J0ZjtnaWY7anBnO2pwZWc7anBlIgotIyBFbmQgR3JvdXAKLSMgRW5kIFRhcmdldAotIyBFbmQgUHJvamVjdApkaWZmIC0tZ2l0IGEvbWFrZWRmaWwudjEwIGIvbWFrZWRmaWwudjEwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiNGE4M2FiLi4wMDAwMDAwCi0tLSBhL21ha2VkZmlsLnYxMAorKysgL2Rldi9udWxsCkBAIC0xLDY5ICswLDAgQEAKLYuvqDw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9InV0Zi04Ij8+Ci08UHJvamVjdCBUb29sc1ZlcnNpb249IjQuMCIgeG1sbnM9Imh0dHA6Ly9zY2hlbWFzLm1pY3Jvc29mdC5jb20vZGV2ZWxvcGVyL21zYnVpbGQvMjAwMyI+Ci0gIDxJdGVtR3JvdXA+Ci0gICAgPEZpbHRlciBJbmNsdWRlPSJTb3VyY2UgRmlsZXMiPgotICAgICAgPFVuaXF1ZUlkZW50aWZpZXI+ezRGQzczN0YxLUM3QTUtNDM3Ni1BMDY2LTJBMzJENzUyQTJGRn08L1VuaXF1ZUlkZW50aWZpZXI+Ci0gICAgICA8RXh0ZW5zaW9ucz5jcHA7YztjYztjeHg7ZGVmO29kbDtpZGw7aHBqO2JhdDthc207YXNteDwvRXh0ZW5zaW9ucz4KLSAgICA8L0ZpbHRlcj4KLSAgICA8RmlsdGVyIEluY2x1ZGU9IkhlYWRlciBGaWxlcyI+Ci0gICAgICA8VW5pcXVlSWRlbnRpZmllcj57OTM5OTUzODAtODlCRC00YjA0LTg4RUItNjI1RkJFNTJFQkZCfTwvVW5pcXVlSWRlbnRpZmllcj4KLSAgICAgIDxFeHRlbnNpb25zPmg7aHBwO2h4eDtobTtpbmw7aW5jO3hzZDwvRXh0ZW5zaW9ucz4KLSAgICA8L0ZpbHRlcj4KLSAgICA8RmlsdGVyIEluY2x1ZGU9IlJlc291cmNlIEZpbGVzIj4KLSAgICAgIDxVbmlxdWVJZGVudGlmaWVyPns2N0RBNkFCNi1GODAwLTRjMDgtOEI3QS04M0JCMTIxQUFEMDF9PC9VbmlxdWVJZGVudGlmaWVyPgotICAgICAgPEV4dGVuc2lvbnM+cmM7aWNvO2N1cjtibXA7ZGxnO3JjMjtyY3Q7YmluO3JncztnaWY7anBnO2pwZWc7anBlO3Jlc3g7dGlmZjt0aWY7cG5nO3dhdjttZmNyaWJib24tbXM8L0V4dGVuc2lvbnM+Ci0gICAgPC9GaWx0ZXI+Ci0gIDwvSXRlbUdyb3VwPgotICA8SXRlbUdyb3VwPgotICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iY2RlcnJvci5oIj4KLSAgICAgIDxGaWx0ZXI+SGVhZGVyIEZpbGVzPC9GaWx0ZXI+Ci0gICAgPC9DbEluY2x1ZGU+Ci0gICAgPENsSW5jbHVkZSBJbmNsdWRlPSJjZGpwZWcuaCI+Ci0gICAgICA8RmlsdGVyPkhlYWRlciBGaWxlczwvRmlsdGVyPgotICAgIDwvQ2xJbmNsdWRlPgotICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iamNvbmZpZy5oIj4KLSAgICAgIDxGaWx0ZXI+SGVhZGVyIEZpbGVzPC9GaWx0ZXI+Ci0gICAgPC9DbEluY2x1ZGU+Ci0gICAgPENsSW5jbHVkZSBJbmNsdWRlPSJqZXJyb3IuaCI+Ci0gICAgICA8RmlsdGVyPkhlYWRlciBGaWxlczwvRmlsdGVyPgotICAgIDwvQ2xJbmNsdWRlPgotICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iamluY2x1ZGUuaCI+Ci0gICAgICA8RmlsdGVyPkhlYWRlciBGaWxlczwvRmlsdGVyPgotICAgIDwvQ2xJbmNsdWRlPgotICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iam1vcmVjZmcuaCI+Ci0gICAgICA8RmlsdGVyPkhlYWRlciBGaWxlczwvRmlsdGVyPgotICAgIDwvQ2xJbmNsdWRlPgotICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0ianBlZ2xpYi5oIj4KLSAgICAgIDxGaWx0ZXI+SGVhZGVyIEZpbGVzPC9GaWx0ZXI+Ci0gICAgPC9DbEluY2x1ZGU+Ci0gICAgPENsSW5jbHVkZSBJbmNsdWRlPSJqdmVyc2lvbi5oIj4KLSAgICAgIDxGaWx0ZXI+SGVhZGVyIEZpbGVzPC9GaWx0ZXI+Ci0gICAgPC9DbEluY2x1ZGU+Ci0gIDwvSXRlbUdyb3VwPgotICA8SXRlbUdyb3VwPgotICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iY2RqcGVnLmMiPgotICAgICAgPEZpbHRlcj5Tb3VyY2UgRmlsZXM8L0ZpbHRlcj4KLSAgICA8L0NsQ29tcGlsZT4KLSAgICA8Q2xDb21waWxlIEluY2x1ZGU9ImRqcGVnLmMiPgotICAgICAgPEZpbHRlcj5Tb3VyY2UgRmlsZXM8L0ZpbHRlcj4KLSAgICA8L0NsQ29tcGlsZT4KLSAgICA8Q2xDb21waWxlIEluY2x1ZGU9InJkY29sbWFwLmMiPgotICAgICAgPEZpbHRlcj5Tb3VyY2UgRmlsZXM8L0ZpbHRlcj4KLSAgICA8L0NsQ29tcGlsZT4KLSAgICA8Q2xDb21waWxlIEluY2x1ZGU9IndyYm1wLmMiPgotICAgICAgPEZpbHRlcj5Tb3VyY2UgRmlsZXM8L0ZpbHRlcj4KLSAgICA8L0NsQ29tcGlsZT4KLSAgICA8Q2xDb21waWxlIEluY2x1ZGU9IndyZ2lmLmMiPgotICAgICAgPEZpbHRlcj5Tb3VyY2UgRmlsZXM8L0ZpbHRlcj4KLSAgICA8L0NsQ29tcGlsZT4KLSAgICA8Q2xDb21waWxlIEluY2x1ZGU9IndycHBtLmMiPgotICAgICAgPEZpbHRlcj5Tb3VyY2UgRmlsZXM8L0ZpbHRlcj4KLSAgICA8L0NsQ29tcGlsZT4KLSAgICA8Q2xDb21waWxlIEluY2x1ZGU9IndycmxlLmMiPgotICAgICAgPEZpbHRlcj5Tb3VyY2UgRmlsZXM8L0ZpbHRlcj4KLSAgICA8L0NsQ29tcGlsZT4KLSAgICA8Q2xDb21waWxlIEluY2x1ZGU9IndydGFyZ2EuYyI+Ci0gICAgICA8RmlsdGVyPlNvdXJjZSBGaWxlczwvRmlsdGVyPgotICAgIDwvQ2xDb21waWxlPgotICA8L0l0ZW1Hcm91cD4KLTwvUHJvamVjdD4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9tYWtlZG1hay52YzYgYi9tYWtlZG1hay52YzYKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGUxNjQ4N2YuLjAwMDAwMDAKLS0tIGEvbWFrZWRtYWsudmM2CisrKyAvZGV2L251bGwKQEAgLTEsMTU5ICswLDAgQEAKLSMgTWljcm9zb2Z0IERldmVsb3BlciBTdHVkaW8gR2VuZXJhdGVkIE5NQUtFIEZpbGUsIEJhc2VkIG9uIGRqcGVnLmRzcAotIUlGICIkKENGRykiID09ICIiCi1DRkc9ZGpwZWcgLSBXaW4zMgotIU1FU1NBR0UgS2VpbmUgS29uZmlndXJhdGlvbiBhbmdlZ2ViZW4uIGRqcGVnIC0gV2luMzIgd2lyZCBhbHMgU3RhbmRhcmQgdmVyd2VuZGV0LgotIUVORElGIAotCi0hSUYgIiQoQ0ZHKSIgIT0gImRqcGVnIC0gV2luMzIiCi0hTUVTU0FHRSBVbmf8bHRpZ2UgS29uZmlndXJhdGlvbiAiJChDRkcpIiBhbmdlZ2ViZW4uCi0hTUVTU0FHRSBTaWUga/ZubmVuIGJlaW0gQXVzZvxocmVuIHZvbiBOTUFLRSBlaW5lIEtvbmZpZ3VyYXRpb24gYW5nZWJlbgotIU1FU1NBR0UgZHVyY2ggRGVmaW5pZXJlbiBkZXMgTWFrcm9zIENGRyBpbiBkZXIgQmVmZWhsc3plaWxlLiBadW0gQmVpc3BpZWw6Ci0hTUVTU0FHRSAKLSFNRVNTQUdFIE5NQUtFIC9mICJkanBlZy5tYWsiIENGRz0iZGpwZWcgLSBXaW4zMiIKLSFNRVNTQUdFIAotIU1FU1NBR0UgRvxyIGRpZSBLb25maWd1cmF0aW9uIHN0ZWhlbiB6dXIgQXVzd2FobDoKLSFNRVNTQUdFIAotIU1FU1NBR0UgImRqcGVnIC0gV2luMzIiIChiYXNpZXJlbmQgYXVmICAiV2luMzIgKHg4NikgQ29uc29sZSBBcHBsaWNhdGlvbiIpCi0hTUVTU0FHRSAKLSFFUlJPUiBFaW5lIHVuZ/xsdGlnZSBLb25maWd1cmF0aW9uIHd1cmRlIGFuZ2VnZWJlbi4KLSFFTkRJRiAKLQotIUlGICIkKE9TKSIgPT0gIldpbmRvd3NfTlQiCi1OVUxMPQotIUVMU0UgCi1OVUxMPW51bAotIUVORElGIAotCi1DUFA9Y2wuZXhlCi1SU0M9cmMuZXhlCi1PVVRESVI9LlxkanBlZ1xSZWxlYXNlCi1JTlRESVI9LlxkanBlZ1xSZWxlYXNlCi0jIEJlZ2luIEN1c3RvbSBNYWNyb3MKLU91dERpcj0uXGRqcGVnXFJlbGVhc2UKLSMgRW5kIEN1c3RvbSBNYWNyb3MKLQotQUxMIDogIiQoT1VURElSKVxkanBlZy5leGUiCi0KLQotQ0xFQU4gOgotCS1AZXJhc2UgIiQoSU5URElSKVxjZGpwZWcub2JqIgotCS1AZXJhc2UgIiQoSU5URElSKVxkanBlZy5vYmoiCi0JLUBlcmFzZSAiJChJTlRESVIpXHJkY29sbWFwLm9iaiIKLQktQGVyYXNlICIkKElOVERJUilcdmM2MC5pZGIiCi0JLUBlcmFzZSAiJChJTlRESVIpXHdyYm1wLm9iaiIKLQktQGVyYXNlICIkKElOVERJUilcd3JnaWYub2JqIgotCS1AZXJhc2UgIiQoSU5URElSKVx3cnBwbS5vYmoiCi0JLUBlcmFzZSAiJChJTlRESVIpXHdycmxlLm9iaiIKLQktQGVyYXNlICIkKElOVERJUilcd3J0YXJnYS5vYmoiCi0JLUBlcmFzZSAiJChPVVRESVIpXGRqcGVnLmV4ZSIKLQotIiQoT1VURElSKSIgOgotICAgIGlmIG5vdCBleGlzdCAiJChPVVRESVIpLyQoTlVMTCkiIG1rZGlyICIkKE9VVERJUikiCi0KLUJTQzMyPWJzY21ha2UuZXhlCi1CU0MzMl9GTEFHUz0vbm9sb2dvIC9vIiQoT1VURElSKVxkanBlZy5ic2MiIAotQlNDMzJfU0JSUz0gXAotCQotTElOSzMyPWxpbmsuZXhlCi1MSU5LMzJfRkxBR1M9UmVsZWFzZVxqcGVnLmxpYiBrZXJuZWwzMi5saWIgdXNlcjMyLmxpYiBnZGkzMi5saWIgd2luc3Bvb2wubGliIGNvbWRsZzMyLmxpYiBhZHZhcGkzMi5saWIgc2hlbGwzMi5saWIgb2xlMzIubGliIG9sZWF1dDMyLmxpYiB1dWlkLmxpYiBvZGJjMzIubGliIG9kYmNjcDMyLmxpYiAvbm9sb2dvIC9zdWJzeXN0ZW06Y29uc29sZSAvaW5jcmVtZW50YWw6bm8gL3BkYjoiJChPVVRESVIpXGRqcGVnLnBkYiIgL21hY2hpbmU6STM4NiAvb3V0OiIkKE9VVERJUilcZGpwZWcuZXhlIiAKLUxJTkszMl9PQkpTPSBcCi0JIiQoSU5URElSKVxjZGpwZWcub2JqIiBcCi0JIiQoSU5URElSKVxkanBlZy5vYmoiIFwKLQkiJChJTlRESVIpXHJkY29sbWFwLm9iaiIgXAotCSIkKElOVERJUilcd3JibXAub2JqIiBcCi0JIiQoSU5URElSKVx3cmdpZi5vYmoiIFwKLQkiJChJTlRESVIpXHdycHBtLm9iaiIgXAotCSIkKElOVERJUilcd3JybGUub2JqIiBcCi0JIiQoSU5URElSKVx3cnRhcmdhLm9iaiIKLQotIiQoT1VURElSKVxkanBlZy5leGUiIDogIiQoT1VURElSKSIgJChERUZfRklMRSkgJChMSU5LMzJfT0JKUykKLSAgICAkKExJTkszMikgQDw8Ci0gICQoTElOSzMyX0ZMQUdTKSAkKExJTkszMl9PQkpTKQotPDwKLQotQ1BQX1BST0o9L25vbG9nbyAvRzYgL01UIC9XMyAvR1ggL094IC9PYSAvT2IyIC9EICJXSU4zMiIgL0QgIk5ERUJVRyIgL0QgIl9DT05TT0xFIiAvRnAiJChJTlRESVIpXGRqcGVnLnBjaCIgL1lYIC9GbyIkKElOVERJUilcXCIgL0ZkIiQoSU5URElSKVxcIiAvRkQgL2MgCi0KLS5jeyQoSU5URElSKX0ub2JqOjoKLSAgICQoQ1BQKSBAPDwKLSAgICQoQ1BQX1BST0opICQ8IAotPDwKLQotLmNwcHskKElOVERJUil9Lm9iajo6Ci0gICAkKENQUCkgQDw8Ci0gICAkKENQUF9QUk9KKSAkPCAKLTw8Ci0KLS5jeHh7JChJTlRESVIpfS5vYmo6OgotICAgJChDUFApIEA8PAotICAgJChDUFBfUFJPSikgJDwgCi08PAotCi0uY3skKElOVERJUil9LnNicjo6Ci0gICAkKENQUCkgQDw8Ci0gICAkKENQUF9QUk9KKSAkPCAKLTw8Ci0KLS5jcHB7JChJTlRESVIpfS5zYnI6OgotICAgJChDUFApIEA8PAotICAgJChDUFBfUFJPSikgJDwgCi08PAotCi0uY3h4eyQoSU5URElSKX0uc2JyOjoKLSAgICQoQ1BQKSBAPDwKLSAgICQoQ1BQX1BST0opICQ8IAotPDwKLQotCi0hSUYgIiQoTk9fRVhURVJOQUxfREVQUykiICE9ICIxIgotIUlGIEVYSVNUUygiZGpwZWcuZGVwIikKLSFJTkNMVURFICJkanBlZy5kZXAiCi0hRUxTRSAKLSFNRVNTQUdFIFdhcm5pbmc6IGNhbm5vdCBmaW5kICJkanBlZy5kZXAiCi0hRU5ESUYgCi0hRU5ESUYgCi0KLQotIUlGICIkKENGRykiID09ICJkanBlZyAtIFdpbjMyIgotU09VUkNFPS5cY2RqcGVnLmMKLQotIiQoSU5URElSKVxjZGpwZWcub2JqIiA6ICQoU09VUkNFKSAiJChJTlRESVIpIgotCi0KLVNPVVJDRT0uXGRqcGVnLmMKLQotIiQoSU5URElSKVxkanBlZy5vYmoiIDogJChTT1VSQ0UpICIkKElOVERJUikiCi0KLQotU09VUkNFPS5ccmRjb2xtYXAuYwotCi0iJChJTlRESVIpXHJkY29sbWFwLm9iaiIgOiAkKFNPVVJDRSkgIiQoSU5URElSKSIKLQotCi1TT1VSQ0U9Llx3cmJtcC5jCi0KLSIkKElOVERJUilcd3JibXAub2JqIiA6ICQoU09VUkNFKSAiJChJTlRESVIpIgotCi0KLVNPVVJDRT0uXHdyZ2lmLmMKLQotIiQoSU5URElSKVx3cmdpZi5vYmoiIDogJChTT1VSQ0UpICIkKElOVERJUikiCi0KLQotU09VUkNFPS5cd3JwcG0uYwotCi0iJChJTlRESVIpXHdycHBtLm9iaiIgOiAkKFNPVVJDRSkgIiQoSU5URElSKSIKLQotCi1TT1VSQ0U9Llx3cnJsZS5jCi0KLSIkKElOVERJUilcd3JybGUub2JqIiA6ICQoU09VUkNFKSAiJChJTlRESVIpIgotCi0KLVNPVVJDRT0uXHdydGFyZ2EuYwotCi0iJChJTlRESVIpXHdydGFyZ2Eub2JqIiA6ICQoU09VUkNFKSAiJChJTlRESVIpIgotCi0KLQotIUVORElGIAotCmRpZmYgLS1naXQgYS9tYWtlZHZjeC52MTAgYi9tYWtlZHZjeC52MTAKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDlhZDJkNDEuLjAwMDAwMDAKLS0tIGEvbWFrZWR2Y3gudjEwCisrKyAvZGV2L251bGwKQEAgLTEsNzYgKzAsMCBAQAoti6+oPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz4KLTxQcm9qZWN0IERlZmF1bHRUYXJnZXRzPSJCdWlsZCIgVG9vbHNWZXJzaW9uPSI0LjAiIHhtbG5zPSJodHRwOi8vc2NoZW1hcy5taWNyb3NvZnQuY29tL2RldmVsb3Blci9tc2J1aWxkLzIwMDMiPgotICA8SXRlbUdyb3VwIExhYmVsPSJQcm9qZWN0Q29uZmlndXJhdGlvbnMiPgotICAgIDxQcm9qZWN0Q29uZmlndXJhdGlvbiBJbmNsdWRlPSJSZWxlYXNlfFdpbjMyIj4KLSAgICAgIDxDb25maWd1cmF0aW9uPlJlbGVhc2U8L0NvbmZpZ3VyYXRpb24+Ci0gICAgICA8UGxhdGZvcm0+V2luMzI8L1BsYXRmb3JtPgotICAgIDwvUHJvamVjdENvbmZpZ3VyYXRpb24+Ci0gIDwvSXRlbUdyb3VwPgotICA8UHJvcGVydHlHcm91cCBMYWJlbD0iR2xvYmFscyI+Ci0gICAgPFByb2plY3RHdWlkPnsxMTA0MzEzNy1CNDUzLTRERkEtOTAxMC00RDJCOURDMTU0NUN9PC9Qcm9qZWN0R3VpZD4KLSAgICA8S2V5d29yZD5XaW4zMlByb2o8L0tleXdvcmQ+Ci0gICAgPFJvb3ROYW1lc3BhY2U+ZGpwZWc8L1Jvb3ROYW1lc3BhY2U+Ci0gIDwvUHJvcGVydHlHcm91cD4KLSAgPEltcG9ydCBQcm9qZWN0PSIkKFZDVGFyZ2V0c1BhdGgpXE1pY3Jvc29mdC5DcHAuRGVmYXVsdC5wcm9wcyIgLz4KLSAgPFByb3BlcnR5R3JvdXAgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdSZWxlYXNlfFdpbjMyJyIgTGFiZWw9IkNvbmZpZ3VyYXRpb24iPgotICAgIDxDb25maWd1cmF0aW9uVHlwZT5BcHBsaWNhdGlvbjwvQ29uZmlndXJhdGlvblR5cGU+Ci0gICAgPFVzZURlYnVnTGlicmFyaWVzPmZhbHNlPC9Vc2VEZWJ1Z0xpYnJhcmllcz4KLSAgICA8V2hvbGVQcm9ncmFtT3B0aW1pemF0aW9uPnRydWU8L1dob2xlUHJvZ3JhbU9wdGltaXphdGlvbj4KLSAgICA8Q2hhcmFjdGVyU2V0PlVuaWNvZGU8L0NoYXJhY3RlclNldD4KLSAgPC9Qcm9wZXJ0eUdyb3VwPgotICA8SW1wb3J0IFByb2plY3Q9IiQoVkNUYXJnZXRzUGF0aClcTWljcm9zb2Z0LkNwcC5wcm9wcyIgLz4KLSAgPEltcG9ydEdyb3VwIExhYmVsPSJFeHRlbnNpb25TZXR0aW5ncyI+Ci0gIDwvSW1wb3J0R3JvdXA+Ci0gIDxJbXBvcnRHcm91cCBMYWJlbD0iUHJvcGVydHlTaGVldHMiIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUmVsZWFzZXxXaW4zMiciPgotICAgIDxJbXBvcnQgUHJvamVjdD0iJChVc2VyUm9vdERpcilcTWljcm9zb2Z0LkNwcC4kKFBsYXRmb3JtKS51c2VyLnByb3BzIiBDb25kaXRpb249ImV4aXN0cygnJChVc2VyUm9vdERpcilcTWljcm9zb2Z0LkNwcC4kKFBsYXRmb3JtKS51c2VyLnByb3BzJykiIExhYmVsPSJMb2NhbEFwcERhdGFQbGF0Zm9ybSIgLz4KLSAgPC9JbXBvcnRHcm91cD4KLSAgPFByb3BlcnR5R3JvdXAgTGFiZWw9IlVzZXJNYWNyb3MiIC8+Ci0gIDxQcm9wZXJ0eUdyb3VwIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUmVsZWFzZXxXaW4zMiciPgotICAgIDxMaW5rSW5jcmVtZW50YWw+ZmFsc2U8L0xpbmtJbmNyZW1lbnRhbD4KLSAgICA8T3V0RGlyPiQoUHJvamVjdE5hbWUpXCQoQ29uZmlndXJhdGlvbilcPC9PdXREaXI+Ci0gICAgPEludERpcj4kKFByb2plY3ROYW1lKVwkKENvbmZpZ3VyYXRpb24pXDwvSW50RGlyPgotICA8L1Byb3BlcnR5R3JvdXA+Ci0gIDxJdGVtRGVmaW5pdGlvbkdyb3VwIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUmVsZWFzZXxXaW4zMiciPgotICAgIDxDbENvbXBpbGU+Ci0gICAgICA8V2FybmluZ0xldmVsPkxldmVsMzwvV2FybmluZ0xldmVsPgotICAgICAgPFByZWNvbXBpbGVkSGVhZGVyPk5vdFVzaW5nPC9QcmVjb21waWxlZEhlYWRlcj4KLSAgICAgIDxPcHRpbWl6YXRpb24+RnVsbDwvT3B0aW1pemF0aW9uPgotICAgICAgPEZ1bmN0aW9uTGV2ZWxMaW5raW5nPnRydWU8L0Z1bmN0aW9uTGV2ZWxMaW5raW5nPgotICAgICAgPEludHJpbnNpY0Z1bmN0aW9ucz5mYWxzZTwvSW50cmluc2ljRnVuY3Rpb25zPgotICAgICAgPFByZXByb2Nlc3NvckRlZmluaXRpb25zPldJTjMyO05ERUJVRztfQ09OU09MRTtfQ1JUX1NFQ1VSRV9OT19XQVJOSU5HUzwvUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM+Ci0gICAgICA8T21pdEZyYW1lUG9pbnRlcnM+dHJ1ZTwvT21pdEZyYW1lUG9pbnRlcnM+Ci0gICAgICA8RW5hYmxlRmliZXJTYWZlT3B0aW1pemF0aW9ucz50cnVlPC9FbmFibGVGaWJlclNhZmVPcHRpbWl6YXRpb25zPgotICAgICAgPERpc2FibGVTcGVjaWZpY1dhcm5pbmdzPjQ5OTY8L0Rpc2FibGVTcGVjaWZpY1dhcm5pbmdzPgotICAgIDwvQ2xDb21waWxlPgotICAgIDxMaW5rPgotICAgICAgPFN1YlN5c3RlbT5Db25zb2xlPC9TdWJTeXN0ZW0+Ci0gICAgICA8R2VuZXJhdGVEZWJ1Z0luZm9ybWF0aW9uPnRydWU8L0dlbmVyYXRlRGVidWdJbmZvcm1hdGlvbj4KLSAgICAgIDxFbmFibGVDT01EQVRGb2xkaW5nPnRydWU8L0VuYWJsZUNPTURBVEZvbGRpbmc+Ci0gICAgICA8T3B0aW1pemVSZWZlcmVuY2VzPnRydWU8L09wdGltaXplUmVmZXJlbmNlcz4KLSAgICAgIDxBZGRpdGlvbmFsRGVwZW5kZW5jaWVzPlJlbGVhc2VcanBlZy5saWI7a2VybmVsMzIubGliO3VzZXIzMi5saWI7Z2RpMzIubGliO3dpbnNwb29sLmxpYjtjb21kbGczMi5saWI7YWR2YXBpMzIubGliO3NoZWxsMzIubGliO29sZTMyLmxpYjtvbGVhdXQzMi5saWI7dXVpZC5saWI7b2RiYzMyLmxpYjtvZGJjY3AzMi5saWI7JShBZGRpdGlvbmFsRGVwZW5kZW5jaWVzKTwvQWRkaXRpb25hbERlcGVuZGVuY2llcz4KLSAgICA8L0xpbms+Ci0gIDwvSXRlbURlZmluaXRpb25Hcm91cD4KLSAgPEl0ZW1Hcm91cD4KLSAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9ImNkZXJyb3IuaCIgLz4KLSAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9ImNkanBlZy5oIiAvPgotICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iamNvbmZpZy5oIiAvPgotICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iamVycm9yLmgiIC8+Ci0gICAgPENsSW5jbHVkZSBJbmNsdWRlPSJqaW5jbHVkZS5oIiAvPgotICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iam1vcmVjZmcuaCIgLz4KLSAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9ImpwZWdsaWIuaCIgLz4KLSAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Imp2ZXJzaW9uLmgiIC8+Ci0gIDwvSXRlbUdyb3VwPgotICA8SXRlbUdyb3VwPgotICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iY2RqcGVnLmMiIC8+Ci0gICAgPENsQ29tcGlsZSBJbmNsdWRlPSJkanBlZy5jIiAvPgotICAgIDxDbENvbXBpbGUgSW5jbHVkZT0icmRjb2xtYXAuYyIgLz4KLSAgICA8Q2xDb21waWxlIEluY2x1ZGU9IndyYm1wLmMiIC8+Ci0gICAgPENsQ29tcGlsZSBJbmNsdWRlPSJ3cmdpZi5jIiAvPgotICAgIDxDbENvbXBpbGUgSW5jbHVkZT0id3JwcG0uYyIgLz4KLSAgICA8Q2xDb21waWxlIEluY2x1ZGU9IndycmxlLmMiIC8+Ci0gICAgPENsQ29tcGlsZSBJbmNsdWRlPSJ3cnRhcmdhLmMiIC8+Ci0gIDwvSXRlbUdyb3VwPgotICA8SW1wb3J0IFByb2plY3Q9IiQoVkNUYXJnZXRzUGF0aClcTWljcm9zb2Z0LkNwcC50YXJnZXRzIiAvPgotICA8SW1wb3J0R3JvdXAgTGFiZWw9IkV4dGVuc2lvblRhcmdldHMiPgotICA8L0ltcG9ydEdyb3VwPgotPC9Qcm9qZWN0PgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL21ha2VmaWxlLmFuc2kgYi9tYWtlZmlsZS5hbnNpCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3ZDA0OTlmLi4wMDAwMDAwCi0tLSBhL21ha2VmaWxlLmFuc2kKKysrIC9kZXYvbnVsbApAQCAtMSwyMjEgKzAsMCBAQAotIyBNYWtlZmlsZSBmb3IgSW5kZXBlbmRlbnQgSlBFRyBHcm91cCdzIHNvZnR3YXJlCi0KLSMgVGhpcyBtYWtlZmlsZSBpcyBzdWl0YWJsZSBmb3IgVW5peC1saWtlIHN5c3RlbXMgd2l0aCBBTlNJLWNhcGFibGUgY29tcGlsZXJzLgotIyBJZiB5b3UgaGF2ZSBhIG5vbi1BTlNJIGNvbXBpbGVyLCBtYWtlZmlsZS51bml4IGlzIGEgYmV0dGVyIHN0YXJ0aW5nIHBvaW50LgotCi0jIFJlYWQgaW5zdGFsbGF0aW9uIGluc3RydWN0aW9ucyBiZWZvcmUgc2F5aW5nICJtYWtlIiAhIQotCi0jIFRoZSBuYW1lIG9mIHlvdXIgQyBjb21waWxlcjoKLUNDPSBjYwotCi0jIFlvdSBtYXkgbmVlZCB0byBhZGp1c3QgdGhlc2UgY2Mgb3B0aW9uczoKLUNGTEFHUz0gLU8KLSMgR2VuZXJhbGx5LCB3ZSByZWNvbW1lbmQgZGVmaW5pbmcgYW55IGNvbmZpZ3VyYXRpb24gc3ltYm9scyBpbiBqY29uZmlnLmgsCi0jIE5PVCB2aWEgLUQgc3dpdGNoZXMgaGVyZS4KLQotIyBMaW5rLXRpbWUgY2Mgb3B0aW9uczoKLUxERkxBR1M9IAotCi0jIFRvIGxpbmsgYW55IHNwZWNpYWwgbGlicmFyaWVzLCBhZGQgdGhlIG5lY2Vzc2FyeSAtbCBjb21tYW5kcyBoZXJlLgotTERMSUJTPSAKLQotIyBQdXQgaGVyZSB0aGUgb2JqZWN0IGZpbGUgbmFtZSBmb3IgdGhlIGNvcnJlY3Qgc3lzdGVtLWRlcGVuZGVudCBtZW1vcnkKLSMgbWFuYWdlciBmaWxlLiAgRm9yIFVuaXggdGhpcyBpcyB1c3VhbGx5IGptZW1ub2JzLm8sIGJ1dCB5b3UgbWF5IHdhbnQKLSMgdG8gdXNlIGptZW1hbnNpLm8gb3Igam1lbW5hbWUubyBpZiB5b3UgaGF2ZSBsaW1pdGVkIHN3YXAgc3BhY2UuCi1TWVNERVBNRU09IGptZW1ub2JzLm8KLQotIyBtaXNjZWxsYW5lb3VzIE9TLWRlcGVuZGVudCBzdHVmZgotIyBsaW5rZXIKLUxOPSAkKENDKQotIyBmaWxlIGRlbGV0aW9uIGNvbW1hbmQKLVJNPSBybSAtZgotIyBsaWJyYXJ5ICguYSkgZmlsZSBjcmVhdGlvbiBjb21tYW5kCi1BUj0gYXIgcmMKLSMgc2Vjb25kIHN0ZXAgaW4gLmEgY3JlYXRpb24gKHVzZSAidG91Y2giIGlmIG5vdCBuZWVkZWQpCi1BUjI9IHJhbmxpYgotCi0jIEVuZCBvZiBjb25maWd1cmFibGUgb3B0aW9ucy4KLQotCi0jIHNvdXJjZSBmaWxlczogSlBFRyBsaWJyYXJ5IHByb3BlcgotTElCU09VUkNFUz0gamFyaWNvbS5jIGpjYXBpbWluLmMgamNhcGlzdGQuYyBqY2FyaXRoLmMgamNjb2VmY3QuYyBqY2NvbG9yLmMgXAotICAgICAgICBqY2RjdG1nci5jIGpjaHVmZi5jIGpjaW5pdC5jIGpjbWFpbmN0LmMgamNtYXJrZXIuYyBqY21hc3Rlci5jIFwKLSAgICAgICAgamNvbWFwaS5jIGpjcGFyYW0uYyBqY3ByZXBjdC5jIGpjc2FtcGxlLmMgamN0cmFucy5jIGpkYXBpbWluLmMgXAotICAgICAgICBqZGFwaXN0ZC5jIGpkYXJpdGguYyBqZGF0YWRzdC5jIGpkYXRhc3JjLmMgamRjb2VmY3QuYyBqZGNvbG9yLmMgXAotICAgICAgICBqZGRjdG1nci5jIGpkaHVmZi5jIGpkaW5wdXQuYyBqZG1haW5jdC5jIGpkbWFya2VyLmMgamRtYXN0ZXIuYyBcCi0gICAgICAgIGpkbWVyZ2UuYyBqZHBvc3RjdC5jIGpkc2FtcGxlLmMgamR0cmFucy5jIGplcnJvci5jIGpmZGN0Zmx0LmMgXAotICAgICAgICBqZmRjdGZzdC5jIGpmZGN0aW50LmMgamlkY3RmbHQuYyBqaWRjdGZzdC5jIGppZGN0aW50LmMganF1YW50MS5jIFwKLSAgICAgICAganF1YW50Mi5jIGp1dGlscy5jIGptZW1tZ3IuYwotIyBtZW1tZ3IgYmFjayBlbmRzOiBjb21waWxlIG9ubHkgb25lIG9mIHRoZXNlIGludG8gYSB3b3JraW5nIGxpYnJhcnkKLVNZU0RFUFNPVVJDRVM9IGptZW1hbnNpLmMgam1lbW5hbWUuYyBqbWVtbm9icy5jIGptZW1kb3MuYyBqbWVtbWFjLmMKLSMgc291cmNlIGZpbGVzOiBjanBlZy9kanBlZy9qcGVndHJhbiBhcHBsaWNhdGlvbnMsIGFsc28gcmRqcGdjb20vd3JqcGdjb20KLUFQUFNPVVJDRVM9IGNqcGVnLmMgZGpwZWcuYyBqcGVndHJhbi5jIHJkanBnY29tLmMgd3JqcGdjb20uYyBjZGpwZWcuYyBcCi0gICAgICAgIHJkY29sbWFwLmMgcmRzd2l0Y2guYyB0cmFuc3VwcC5jIHJkcHBtLmMgd3JwcG0uYyByZGdpZi5jIHdyZ2lmLmMgXAotICAgICAgICByZHRhcmdhLmMgd3J0YXJnYS5jIHJkYm1wLmMgd3JibXAuYyByZHJsZS5jIHdycmxlLmMKLVNPVVJDRVM9ICQoTElCU09VUkNFUykgJChTWVNERVBTT1VSQ0VTKSAkKEFQUFNPVVJDRVMpCi0jIGZpbGVzIGluY2x1ZGVkIGJ5IHNvdXJjZSBmaWxlcwotSU5DTFVERVM9IGpkY3QuaCBqZXJyb3IuaCBqaW5jbHVkZS5oIGptZW1zeXMuaCBqbW9yZWNmZy5oIGpwZWdpbnQuaCBcCi0gICAgICAgIGpwZWdsaWIuaCBqdmVyc2lvbi5oIGNkanBlZy5oIGNkZXJyb3IuaCB0cmFuc3VwcC5oCi0jIGRvY3VtZW50YXRpb24sIHRlc3QsIGFuZCBzdXBwb3J0IGZpbGVzCi1ET0NTPSBSRUFETUUgaW5zdGFsbC50eHQgdXNhZ2UudHh0IGNqcGVnLjEgZGpwZWcuMSBqcGVndHJhbi4xIHJkanBnY29tLjEgXAotICAgICAgICB3cmpwZ2NvbS4xIHdpemFyZC50eHQgZXhhbXBsZS5jIGxpYmpwZWcudHh0IHN0cnVjdHVyZS50eHQgXAotICAgICAgICBjb2RlcnVsZXMudHh0IGZpbGVsaXN0LnR4dCBjaGFuZ2UubG9nCi1NS0ZJTEVTPSBjb25maWd1cmUgTWFrZWZpbGUuaW4gbWFrZWZpbGUuYW5zaSBtYWtlZmlsZS51bml4IG1ha2VmaWxlLmJjYyBcCi0gICAgICAgIG1ha2VmaWxlLm1jNiBtYWtlZmlsZS5kaiBtYWtlZmlsZS53YXQgbWFrZWZpbGUudmMgbWFrZWpkc3cudmM2IFwKLSAgICAgICAgbWFrZWFkc3cudmM2IG1ha2VqZGVwLnZjNiBtYWtlamRzcC52YzYgbWFrZWptYWsudmM2IG1ha2VjZGVwLnZjNiBcCi0gICAgICAgIG1ha2VjZHNwLnZjNiBtYWtlY21hay52YzYgbWFrZWRkZXAudmM2IG1ha2VkZHNwLnZjNiBtYWtlZG1hay52YzYgXAotICAgICAgICBtYWtldGRlcC52YzYgbWFrZXRkc3AudmM2IG1ha2V0bWFrLnZjNiBtYWtlcmRlcC52YzYgbWFrZXJkc3AudmM2IFwKLSAgICAgICAgbWFrZXJtYWsudmM2IG1ha2V3ZGVwLnZjNiBtYWtld2RzcC52YzYgbWFrZXdtYWsudmM2IG1ha2Vqc2xuLnYxMCBcCi0gICAgICAgIG1ha2Vhc2xuLnYxMCBtYWtlanZjeC52MTAgbWFrZWpmaWwudjEwIG1ha2VjdmN4LnYxMCBtYWtlY2ZpbC52MTAgXAotICAgICAgICBtYWtlZHZjeC52MTAgbWFrZWRmaWwudjEwIG1ha2V0dmN4LnYxMCBtYWtldGZpbC52MTAgbWFrZXJ2Y3gudjEwIFwKLSAgICAgICAgbWFrZXJmaWwudjEwIG1ha2V3dmN4LnYxMCBtYWtld2ZpbC52MTAgbWFrZXByb2oubWFjIG1ha2NqcGVnLnN0IFwKLSAgICAgICAgbWFrZGpwZWcuc3QgbWFrbGpwZWcuc3QgbWFrdGpwZWcuc3QgbWFrZWZpbGUubWFueCBtYWtlZmlsZS5zYXMgXAotICAgICAgICBtYWtlZmlsZS5tbXMgbWFrZWZpbGUudm1zIG1ha3Ztcy5vcHQKLUNPTkZJR0ZJTEVTPSBqY29uZmlnLmNmZyBqY29uZmlnLmJjYyBqY29uZmlnLm1jNiBqY29uZmlnLmRqIGpjb25maWcud2F0IFwKLSAgICAgICAgamNvbmZpZy52YyBqY29uZmlnLm1hYyBqY29uZmlnLnN0IGpjb25maWcubWFueCBqY29uZmlnLnNhcyBcCi0gICAgICAgIGpjb25maWcudm1zCi1DT05GSUdVUkVGSUxFUz0gY29uZmlnLmd1ZXNzIGNvbmZpZy5zdWIgaW5zdGFsbC1zaCBsdG1haW4uc2ggZGVwY29tcCBtaXNzaW5nCi1PVEhFUkZJTEVTPSBqY29uZmlnLnR4dCBja2NvbmZpZy5jIGFuc2kya25yLmMgYW5zaTJrbnIuMSBqbWVtZG9zYS5hc20gXAotICAgICAgICBsaWJqcGVnLm1hcAotVEVTVEZJTEVTPSB0ZXN0b3JpZy5qcGcgdGVzdGltZy5wcG0gdGVzdGltZy5ibXAgdGVzdGltZy5qcGcgdGVzdHByb2cuanBnIFwKLSAgICAgICAgdGVzdGltZ3AuanBnCi1ESVNURklMRVM9ICQoRE9DUykgJChNS0ZJTEVTKSAkKENPTkZJR0ZJTEVTKSAkKFNPVVJDRVMpICQoSU5DTFVERVMpIFwKLSAgICAgICAgJChDT05GSUdVUkVGSUxFUykgJChPVEhFUkZJTEVTKSAkKFRFU1RGSUxFUykKLSMgbGlicmFyeSBvYmplY3QgZmlsZXMgY29tbW9uIHRvIGNvbXByZXNzaW9uIGFuZCBkZWNvbXByZXNzaW9uCi1DT01PQkpFQ1RTPSBqYXJpY29tLm8gamNvbWFwaS5vIGp1dGlscy5vIGplcnJvci5vIGptZW1tZ3IubyAkKFNZU0RFUE1FTSkKLSMgY29tcHJlc3Npb24gbGlicmFyeSBvYmplY3QgZmlsZXMKLUNMSUJPQkpFQ1RTPSBqY2FwaW1pbi5vIGpjYXBpc3RkLm8gamNhcml0aC5vIGpjdHJhbnMubyBqY3BhcmFtLm8gXAotICAgICAgICBqZGF0YWRzdC5vIGpjaW5pdC5vIGpjbWFzdGVyLm8gamNtYXJrZXIubyBqY21haW5jdC5vIGpjcHJlcGN0Lm8gXAotICAgICAgICBqY2NvZWZjdC5vIGpjY29sb3IubyBqY3NhbXBsZS5vIGpjaHVmZi5vIGpjZGN0bWdyLm8gamZkY3Rmc3QubyBcCi0gICAgICAgIGpmZGN0Zmx0Lm8gamZkY3RpbnQubwotIyBkZWNvbXByZXNzaW9uIGxpYnJhcnkgb2JqZWN0IGZpbGVzCi1ETElCT0JKRUNUUz0gamRhcGltaW4ubyBqZGFwaXN0ZC5vIGpkYXJpdGgubyBqZHRyYW5zLm8gamRhdGFzcmMubyBcCi0gICAgICAgIGpkbWFzdGVyLm8gamRpbnB1dC5vIGpkbWFya2VyLm8gamRodWZmLm8gamRtYWluY3QubyBcCi0gICAgICAgIGpkY29lZmN0Lm8gamRwb3N0Y3QubyBqZGRjdG1nci5vIGppZGN0ZnN0Lm8gamlkY3RmbHQubyBcCi0gICAgICAgIGppZGN0aW50Lm8gamRzYW1wbGUubyBqZGNvbG9yLm8ganF1YW50MS5vIGpxdWFudDIubyBqZG1lcmdlLm8KLSMgVGhlc2Ugb2JqZWN0ZmlsZXMgYXJlIGluY2x1ZGVkIGluIGxpYmpwZWcuYQotTElCT0JKRUNUUz0gJChDTElCT0JKRUNUUykgJChETElCT0JKRUNUUykgJChDT01PQkpFQ1RTKQotIyBvYmplY3QgZmlsZXMgZm9yIHNhbXBsZSBhcHBsaWNhdGlvbnMgKGV4Y2x1ZGluZyBsaWJyYXJ5IGZpbGVzKQotQ09CSkVDVFM9IGNqcGVnLm8gcmRwcG0ubyByZGdpZi5vIHJkdGFyZ2EubyByZHJsZS5vIHJkYm1wLm8gcmRzd2l0Y2gubyBcCi0gICAgICAgIGNkanBlZy5vCi1ET0JKRUNUUz0gZGpwZWcubyB3cnBwbS5vIHdyZ2lmLm8gd3J0YXJnYS5vIHdycmxlLm8gd3JibXAubyByZGNvbG1hcC5vIFwKLSAgICAgICAgY2RqcGVnLm8KLVRST0JKRUNUUz0ganBlZ3RyYW4ubyByZHN3aXRjaC5vIGNkanBlZy5vIHRyYW5zdXBwLm8KLQotCi1hbGw6IGxpYmpwZWcuYSBjanBlZyBkanBlZyBqcGVndHJhbiByZGpwZ2NvbSB3cmpwZ2NvbQotCi1saWJqcGVnLmE6ICQoTElCT0JKRUNUUykKLQkkKFJNKSBsaWJqcGVnLmEKLQkkKEFSKSBsaWJqcGVnLmEgICQoTElCT0JKRUNUUykKLQkkKEFSMikgbGlianBlZy5hCi0KLWNqcGVnOiAkKENPQkpFQ1RTKSBsaWJqcGVnLmEKLQkkKExOKSAkKExERkxBR1MpIC1vIGNqcGVnICQoQ09CSkVDVFMpIGxpYmpwZWcuYSAkKExETElCUykKLQotZGpwZWc6ICQoRE9CSkVDVFMpIGxpYmpwZWcuYQotCSQoTE4pICQoTERGTEFHUykgLW8gZGpwZWcgJChET0JKRUNUUykgbGlianBlZy5hICQoTERMSUJTKQotCi1qcGVndHJhbjogJChUUk9CSkVDVFMpIGxpYmpwZWcuYQotCSQoTE4pICQoTERGTEFHUykgLW8ganBlZ3RyYW4gJChUUk9CSkVDVFMpIGxpYmpwZWcuYSAkKExETElCUykKLQotcmRqcGdjb206IHJkanBnY29tLm8KLQkkKExOKSAkKExERkxBR1MpIC1vIHJkanBnY29tIHJkanBnY29tLm8gJChMRExJQlMpCi0KLXdyanBnY29tOiB3cmpwZ2NvbS5vCi0JJChMTikgJChMREZMQUdTKSAtbyB3cmpwZ2NvbSB3cmpwZ2NvbS5vICQoTERMSUJTKQotCi1qY29uZmlnLmg6IGpjb25maWcudHh0Ci0JZWNobyBZb3UgbXVzdCBwcmVwYXJlIGEgc3lzdGVtLWRlcGVuZGVudCBqY29uZmlnLmggZmlsZS4KLQllY2hvIFBsZWFzZSByZWFkIHRoZSBpbnN0YWxsYXRpb24gZGlyZWN0aW9ucyBpbiBpbnN0YWxsLnR4dC4KLQlleGl0IDEKLQotY2xlYW46Ci0JJChSTSkgKi5vIGNqcGVnIGRqcGVnIGpwZWd0cmFuIGxpYmpwZWcuYSByZGpwZ2NvbSB3cmpwZ2NvbQotCSQoUk0pIGNvcmUgdGVzdG91dCoKLQotdGVzdDogY2pwZWcgZGpwZWcganBlZ3RyYW4KLQkkKFJNKSB0ZXN0b3V0KgotCS4vZGpwZWcgLWRjdCBpbnQgLXBwbSAtb3V0ZmlsZSB0ZXN0b3V0LnBwbSAgdGVzdG9yaWcuanBnCi0JLi9kanBlZyAtZGN0IGludCAtYm1wIC1jb2xvcnMgMjU2IC1vdXRmaWxlIHRlc3RvdXQuYm1wICB0ZXN0b3JpZy5qcGcKLQkuL2NqcGVnIC1kY3QgaW50IC1vdXRmaWxlIHRlc3RvdXQuanBnICB0ZXN0aW1nLnBwbQotCS4vZGpwZWcgLWRjdCBpbnQgLXBwbSAtb3V0ZmlsZSB0ZXN0b3V0cC5wcG0gdGVzdHByb2cuanBnCi0JLi9janBlZyAtZGN0IGludCAtcHJvZ3Jlc3NpdmUgLW9wdCAtb3V0ZmlsZSB0ZXN0b3V0cC5qcGcgdGVzdGltZy5wcG0KLQkuL2pwZWd0cmFuIC1vdXRmaWxlIHRlc3RvdXR0LmpwZyB0ZXN0cHJvZy5qcGcKLQljbXAgdGVzdGltZy5wcG0gdGVzdG91dC5wcG0KLQljbXAgdGVzdGltZy5ibXAgdGVzdG91dC5ibXAKLQljbXAgdGVzdGltZy5qcGcgdGVzdG91dC5qcGcKLQljbXAgdGVzdGltZy5wcG0gdGVzdG91dHAucHBtCi0JY21wIHRlc3RpbWdwLmpwZyB0ZXN0b3V0cC5qcGcKLQljbXAgdGVzdG9yaWcuanBnIHRlc3RvdXR0LmpwZwotCi0KLWphcmljb20ubzogamFyaWNvbS5jIGppbmNsdWRlLmggamNvbmZpZy5oIGpwZWdsaWIuaCBqbW9yZWNmZy5oIGpwZWdpbnQuaCBqZXJyb3IuaAotamNhcGltaW4ubzogamNhcGltaW4uYyBqaW5jbHVkZS5oIGpjb25maWcuaCBqcGVnbGliLmggam1vcmVjZmcuaCBqcGVnaW50LmggamVycm9yLmgKLWpjYXBpc3RkLm86IGpjYXBpc3RkLmMgamluY2x1ZGUuaCBqY29uZmlnLmgganBlZ2xpYi5oIGptb3JlY2ZnLmgganBlZ2ludC5oIGplcnJvci5oCi1qY2FyaXRoLm86IGpjYXJpdGguYyBqaW5jbHVkZS5oIGpjb25maWcuaCBqcGVnbGliLmggam1vcmVjZmcuaCBqcGVnaW50LmggamVycm9yLmgKLWpjY29lZmN0Lm86IGpjY29lZmN0LmMgamluY2x1ZGUuaCBqY29uZmlnLmgganBlZ2xpYi5oIGptb3JlY2ZnLmgganBlZ2ludC5oIGplcnJvci5oCi1qY2NvbG9yLm86IGpjY29sb3IuYyBqaW5jbHVkZS5oIGpjb25maWcuaCBqcGVnbGliLmggam1vcmVjZmcuaCBqcGVnaW50LmggamVycm9yLmgKLWpjZGN0bWdyLm86IGpjZGN0bWdyLmMgamluY2x1ZGUuaCBqY29uZmlnLmgganBlZ2xpYi5oIGptb3JlY2ZnLmgganBlZ2ludC5oIGplcnJvci5oIGpkY3QuaAotamNodWZmLm86IGpjaHVmZi5jIGppbmNsdWRlLmggamNvbmZpZy5oIGpwZWdsaWIuaCBqbW9yZWNmZy5oIGpwZWdpbnQuaCBqZXJyb3IuaAotamNpbml0Lm86IGpjaW5pdC5jIGppbmNsdWRlLmggamNvbmZpZy5oIGpwZWdsaWIuaCBqbW9yZWNmZy5oIGpwZWdpbnQuaCBqZXJyb3IuaAotamNtYWluY3QubzogamNtYWluY3QuYyBqaW5jbHVkZS5oIGpjb25maWcuaCBqcGVnbGliLmggam1vcmVjZmcuaCBqcGVnaW50LmggamVycm9yLmgKLWpjbWFya2VyLm86IGpjbWFya2VyLmMgamluY2x1ZGUuaCBqY29uZmlnLmgganBlZ2xpYi5oIGptb3JlY2ZnLmgganBlZ2ludC5oIGplcnJvci5oCi1qY21hc3Rlci5vOiBqY21hc3Rlci5jIGppbmNsdWRlLmggamNvbmZpZy5oIGpwZWdsaWIuaCBqbW9yZWNmZy5oIGpwZWdpbnQuaCBqZXJyb3IuaAotamNvbWFwaS5vOiBqY29tYXBpLmMgamluY2x1ZGUuaCBqY29uZmlnLmgganBlZ2xpYi5oIGptb3JlY2ZnLmgganBlZ2ludC5oIGplcnJvci5oCi1qY3BhcmFtLm86IGpjcGFyYW0uYyBqaW5jbHVkZS5oIGpjb25maWcuaCBqcGVnbGliLmggam1vcmVjZmcuaCBqcGVnaW50LmggamVycm9yLmgKLWpjcHJlcGN0Lm86IGpjcHJlcGN0LmMgamluY2x1ZGUuaCBqY29uZmlnLmgganBlZ2xpYi5oIGptb3JlY2ZnLmgganBlZ2ludC5oIGplcnJvci5oCi1qY3NhbXBsZS5vOiBqY3NhbXBsZS5jIGppbmNsdWRlLmggamNvbmZpZy5oIGpwZWdsaWIuaCBqbW9yZWNmZy5oIGpwZWdpbnQuaCBqZXJyb3IuaAotamN0cmFucy5vOiBqY3RyYW5zLmMgamluY2x1ZGUuaCBqY29uZmlnLmgganBlZ2xpYi5oIGptb3JlY2ZnLmgganBlZ2ludC5oIGplcnJvci5oCi1qZGFwaW1pbi5vOiBqZGFwaW1pbi5jIGppbmNsdWRlLmggamNvbmZpZy5oIGpwZWdsaWIuaCBqbW9yZWNmZy5oIGpwZWdpbnQuaCBqZXJyb3IuaAotamRhcGlzdGQubzogamRhcGlzdGQuYyBqaW5jbHVkZS5oIGpjb25maWcuaCBqcGVnbGliLmggam1vcmVjZmcuaCBqcGVnaW50LmggamVycm9yLmgKLWpkYXJpdGgubzogamRhcml0aC5jIGppbmNsdWRlLmggamNvbmZpZy5oIGpwZWdsaWIuaCBqbW9yZWNmZy5oIGpwZWdpbnQuaCBqZXJyb3IuaAotamRhdGFkc3QubzogamRhdGFkc3QuYyBqaW5jbHVkZS5oIGpjb25maWcuaCBqcGVnbGliLmggam1vcmVjZmcuaCBqZXJyb3IuaAotamRhdGFzcmMubzogamRhdGFzcmMuYyBqaW5jbHVkZS5oIGpjb25maWcuaCBqcGVnbGliLmggam1vcmVjZmcuaCBqZXJyb3IuaAotamRjb2VmY3QubzogamRjb2VmY3QuYyBqaW5jbHVkZS5oIGpjb25maWcuaCBqcGVnbGliLmggam1vcmVjZmcuaCBqcGVnaW50LmggamVycm9yLmgKLWpkY29sb3IubzogamRjb2xvci5jIGppbmNsdWRlLmggamNvbmZpZy5oIGpwZWdsaWIuaCBqbW9yZWNmZy5oIGpwZWdpbnQuaCBqZXJyb3IuaAotamRkY3RtZ3IubzogamRkY3RtZ3IuYyBqaW5jbHVkZS5oIGpjb25maWcuaCBqcGVnbGliLmggam1vcmVjZmcuaCBqcGVnaW50LmggamVycm9yLmggamRjdC5oCi1qZGh1ZmYubzogamRodWZmLmMgamluY2x1ZGUuaCBqY29uZmlnLmgganBlZ2xpYi5oIGptb3JlY2ZnLmgganBlZ2ludC5oIGplcnJvci5oCi1qZGlucHV0Lm86IGpkaW5wdXQuYyBqaW5jbHVkZS5oIGpjb25maWcuaCBqcGVnbGliLmggam1vcmVjZmcuaCBqcGVnaW50LmggamVycm9yLmgKLWpkbWFpbmN0Lm86IGpkbWFpbmN0LmMgamluY2x1ZGUuaCBqY29uZmlnLmgganBlZ2xpYi5oIGptb3JlY2ZnLmgganBlZ2ludC5oIGplcnJvci5oCi1qZG1hcmtlci5vOiBqZG1hcmtlci5jIGppbmNsdWRlLmggamNvbmZpZy5oIGpwZWdsaWIuaCBqbW9yZWNmZy5oIGpwZWdpbnQuaCBqZXJyb3IuaAotamRtYXN0ZXIubzogamRtYXN0ZXIuYyBqaW5jbHVkZS5oIGpjb25maWcuaCBqcGVnbGliLmggam1vcmVjZmcuaCBqcGVnaW50LmggamVycm9yLmgKLWpkbWVyZ2UubzogamRtZXJnZS5jIGppbmNsdWRlLmggamNvbmZpZy5oIGpwZWdsaWIuaCBqbW9yZWNmZy5oIGpwZWdpbnQuaCBqZXJyb3IuaAotamRwb3N0Y3QubzogamRwb3N0Y3QuYyBqaW5jbHVkZS5oIGpjb25maWcuaCBqcGVnbGliLmggam1vcmVjZmcuaCBqcGVnaW50LmggamVycm9yLmgKLWpkc2FtcGxlLm86IGpkc2FtcGxlLmMgamluY2x1ZGUuaCBqY29uZmlnLmgganBlZ2xpYi5oIGptb3JlY2ZnLmgganBlZ2ludC5oIGplcnJvci5oCi1qZHRyYW5zLm86IGpkdHJhbnMuYyBqaW5jbHVkZS5oIGpjb25maWcuaCBqcGVnbGliLmggam1vcmVjZmcuaCBqcGVnaW50LmggamVycm9yLmgKLWplcnJvci5vOiBqZXJyb3IuYyBqaW5jbHVkZS5oIGpjb25maWcuaCBqcGVnbGliLmggam1vcmVjZmcuaCBqdmVyc2lvbi5oIGplcnJvci5oCi1qZmRjdGZsdC5vOiBqZmRjdGZsdC5jIGppbmNsdWRlLmggamNvbmZpZy5oIGpwZWdsaWIuaCBqbW9yZWNmZy5oIGpwZWdpbnQuaCBqZXJyb3IuaCBqZGN0LmgKLWpmZGN0ZnN0Lm86IGpmZGN0ZnN0LmMgamluY2x1ZGUuaCBqY29uZmlnLmgganBlZ2xpYi5oIGptb3JlY2ZnLmgganBlZ2ludC5oIGplcnJvci5oIGpkY3QuaAotamZkY3RpbnQubzogamZkY3RpbnQuYyBqaW5jbHVkZS5oIGpjb25maWcuaCBqcGVnbGliLmggam1vcmVjZmcuaCBqcGVnaW50LmggamVycm9yLmggamRjdC5oCi1qaWRjdGZsdC5vOiBqaWRjdGZsdC5jIGppbmNsdWRlLmggamNvbmZpZy5oIGpwZWdsaWIuaCBqbW9yZWNmZy5oIGpwZWdpbnQuaCBqZXJyb3IuaCBqZGN0LmgKLWppZGN0ZnN0Lm86IGppZGN0ZnN0LmMgamluY2x1ZGUuaCBqY29uZmlnLmgganBlZ2xpYi5oIGptb3JlY2ZnLmgganBlZ2ludC5oIGplcnJvci5oIGpkY3QuaAotamlkY3RpbnQubzogamlkY3RpbnQuYyBqaW5jbHVkZS5oIGpjb25maWcuaCBqcGVnbGliLmggam1vcmVjZmcuaCBqcGVnaW50LmggamVycm9yLmggamRjdC5oCi1qcXVhbnQxLm86IGpxdWFudDEuYyBqaW5jbHVkZS5oIGpjb25maWcuaCBqcGVnbGliLmggam1vcmVjZmcuaCBqcGVnaW50LmggamVycm9yLmgKLWpxdWFudDIubzoganF1YW50Mi5jIGppbmNsdWRlLmggamNvbmZpZy5oIGpwZWdsaWIuaCBqbW9yZWNmZy5oIGpwZWdpbnQuaCBqZXJyb3IuaAotanV0aWxzLm86IGp1dGlscy5jIGppbmNsdWRlLmggamNvbmZpZy5oIGpwZWdsaWIuaCBqbW9yZWNmZy5oIGpwZWdpbnQuaCBqZXJyb3IuaAotam1lbW1nci5vOiBqbWVtbWdyLmMgamluY2x1ZGUuaCBqY29uZmlnLmgganBlZ2xpYi5oIGptb3JlY2ZnLmgganBlZ2ludC5oIGplcnJvci5oIGptZW1zeXMuaAotam1lbWFuc2kubzogam1lbWFuc2kuYyBqaW5jbHVkZS5oIGpjb25maWcuaCBqcGVnbGliLmggam1vcmVjZmcuaCBqcGVnaW50LmggamVycm9yLmggam1lbXN5cy5oCi1qbWVtbmFtZS5vOiBqbWVtbmFtZS5jIGppbmNsdWRlLmggamNvbmZpZy5oIGpwZWdsaWIuaCBqbW9yZWNmZy5oIGpwZWdpbnQuaCBqZXJyb3IuaCBqbWVtc3lzLmgKLWptZW1ub2JzLm86IGptZW1ub2JzLmMgamluY2x1ZGUuaCBqY29uZmlnLmgganBlZ2xpYi5oIGptb3JlY2ZnLmgganBlZ2ludC5oIGplcnJvci5oIGptZW1zeXMuaAotam1lbWRvcy5vOiBqbWVtZG9zLmMgamluY2x1ZGUuaCBqY29uZmlnLmgganBlZ2xpYi5oIGptb3JlY2ZnLmgganBlZ2ludC5oIGplcnJvci5oIGptZW1zeXMuaAotam1lbW1hYy5vOiBqbWVtbWFjLmMgamluY2x1ZGUuaCBqY29uZmlnLmgganBlZ2xpYi5oIGptb3JlY2ZnLmgganBlZ2ludC5oIGplcnJvci5oIGptZW1zeXMuaAotY2pwZWcubzogY2pwZWcuYyBjZGpwZWcuaCBqaW5jbHVkZS5oIGpjb25maWcuaCBqcGVnbGliLmggam1vcmVjZmcuaCBqZXJyb3IuaCBjZGVycm9yLmgganZlcnNpb24uaAotZGpwZWcubzogZGpwZWcuYyBjZGpwZWcuaCBqaW5jbHVkZS5oIGpjb25maWcuaCBqcGVnbGliLmggam1vcmVjZmcuaCBqZXJyb3IuaCBjZGVycm9yLmgganZlcnNpb24uaAotanBlZ3RyYW4ubzoganBlZ3RyYW4uYyBjZGpwZWcuaCBqaW5jbHVkZS5oIGpjb25maWcuaCBqcGVnbGliLmggam1vcmVjZmcuaCBqZXJyb3IuaCBjZGVycm9yLmggdHJhbnN1cHAuaCBqdmVyc2lvbi5oCi1yZGpwZ2NvbS5vOiByZGpwZ2NvbS5jIGppbmNsdWRlLmggamNvbmZpZy5oCi13cmpwZ2NvbS5vOiB3cmpwZ2NvbS5jIGppbmNsdWRlLmggamNvbmZpZy5oCi1jZGpwZWcubzogY2RqcGVnLmMgY2RqcGVnLmggamluY2x1ZGUuaCBqY29uZmlnLmgganBlZ2xpYi5oIGptb3JlY2ZnLmggamVycm9yLmggY2RlcnJvci5oCi1yZGNvbG1hcC5vOiByZGNvbG1hcC5jIGNkanBlZy5oIGppbmNsdWRlLmggamNvbmZpZy5oIGpwZWdsaWIuaCBqbW9yZWNmZy5oIGplcnJvci5oIGNkZXJyb3IuaAotcmRzd2l0Y2gubzogcmRzd2l0Y2guYyBjZGpwZWcuaCBqaW5jbHVkZS5oIGpjb25maWcuaCBqcGVnbGliLmggam1vcmVjZmcuaCBqZXJyb3IuaCBjZGVycm9yLmgKLXRyYW5zdXBwLm86IHRyYW5zdXBwLmMgamluY2x1ZGUuaCBqY29uZmlnLmgganBlZ2xpYi5oIGptb3JlY2ZnLmgganBlZ2ludC5oIGplcnJvci5oIHRyYW5zdXBwLmgKLXJkcHBtLm86IHJkcHBtLmMgY2RqcGVnLmggamluY2x1ZGUuaCBqY29uZmlnLmgganBlZ2xpYi5oIGptb3JlY2ZnLmggamVycm9yLmggY2RlcnJvci5oCi13cnBwbS5vOiB3cnBwbS5jIGNkanBlZy5oIGppbmNsdWRlLmggamNvbmZpZy5oIGpwZWdsaWIuaCBqbW9yZWNmZy5oIGplcnJvci5oIGNkZXJyb3IuaAotcmRnaWYubzogcmRnaWYuYyBjZGpwZWcuaCBqaW5jbHVkZS5oIGpjb25maWcuaCBqcGVnbGliLmggam1vcmVjZmcuaCBqZXJyb3IuaCBjZGVycm9yLmgKLXdyZ2lmLm86IHdyZ2lmLmMgY2RqcGVnLmggamluY2x1ZGUuaCBqY29uZmlnLmgganBlZ2xpYi5oIGptb3JlY2ZnLmggamVycm9yLmggY2RlcnJvci5oCi1yZHRhcmdhLm86IHJkdGFyZ2EuYyBjZGpwZWcuaCBqaW5jbHVkZS5oIGpjb25maWcuaCBqcGVnbGliLmggam1vcmVjZmcuaCBqZXJyb3IuaCBjZGVycm9yLmgKLXdydGFyZ2Eubzogd3J0YXJnYS5jIGNkanBlZy5oIGppbmNsdWRlLmggamNvbmZpZy5oIGpwZWdsaWIuaCBqbW9yZWNmZy5oIGplcnJvci5oIGNkZXJyb3IuaAotcmRibXAubzogcmRibXAuYyBjZGpwZWcuaCBqaW5jbHVkZS5oIGpjb25maWcuaCBqcGVnbGliLmggam1vcmVjZmcuaCBqZXJyb3IuaCBjZGVycm9yLmgKLXdyYm1wLm86IHdyYm1wLmMgY2RqcGVnLmggamluY2x1ZGUuaCBqY29uZmlnLmgganBlZ2xpYi5oIGptb3JlY2ZnLmggamVycm9yLmggY2RlcnJvci5oCi1yZHJsZS5vOiByZHJsZS5jIGNkanBlZy5oIGppbmNsdWRlLmggamNvbmZpZy5oIGpwZWdsaWIuaCBqbW9yZWNmZy5oIGplcnJvci5oIGNkZXJyb3IuaAotd3JybGUubzogd3JybGUuYyBjZGpwZWcuaCBqaW5jbHVkZS5oIGpjb25maWcuaCBqcGVnbGliLmggam1vcmVjZmcuaCBqZXJyb3IuaCBjZGVycm9yLmgKZGlmZiAtLWdpdCBhL21ha2VmaWxlLmJjYyBiL21ha2VmaWxlLmJjYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZDg5ZTA5Yi4uMDAwMDAwMAotLS0gYS9tYWtlZmlsZS5iY2MKKysrIC9kZXYvbnVsbApAQCAtMSwyOTIgKzAsMCBAQAotIyBNYWtlZmlsZSBmb3IgSW5kZXBlbmRlbnQgSlBFRyBHcm91cCdzIHNvZnR3YXJlCi0KLSMgVGhpcyBtYWtlZmlsZSBpcyBzdWl0YWJsZSBmb3IgQm9ybGFuZCBDIG9uIE1TLURPUyBvciBPUy8yLgotIyBJdCB3b3JrcyB3aXRoIEJvcmxhbmQgQysrIGZvciBET1MsIHJldmlzaW9uIDMuMCBvciBsYXRlciwKLSMgYW5kIGhhcyBiZWVuIHRlc3RlZCB3aXRoIEJvcmxhbmQgQysrIGZvciBPUy8yLgotIyBXYXRjaCBvdXQgZm9yIG9wdGltaXphdGlvbiBidWdzIGluIHRoZSBPUy8yIGNvbXBpbGVycyAtLS0gc2VlIG5vdGVzIGJlbG93IQotIyBUaGFua3MgdG8gVG9tIFdyaWdodCBhbmQgR2UnIFdlaWplcnMgKG9yaWdpbmFsIERPUykgYW5kCi0jIEtlbiBQb3J0ZXIgKE9TLzIpIGZvciB0aGlzIGZpbGUuCi0KLSMgUmVhZCBpbnN0YWxsYXRpb24gaW5zdHJ1Y3Rpb25zIGJlZm9yZSBzYXlpbmcgIm1ha2UiICEhCi0KLSMgQXJlIHdlIHVuZGVyIERPUyBvciBPUy8yPwotIWlmICEkZChET1MpICYmICEkZChPUzIpCi0haWYgJGQoX19PUzJfXykKLU9TMj0xCi0hZWxzZQotRE9TPTEKLSFlbmRpZgotIWVuZGlmCi0KLSMgVGhlIG5hbWUgb2YgeW91ciBDIGNvbXBpbGVyOgotQ0M9IGJjYwotCi0jIFlvdSBtYXkgbmVlZCB0byBhZGp1c3QgdGhlc2UgY2Mgb3B0aW9uczoKLSFpZiAkZChET1MpCi1DRkxBR1M9IC1PMiAtbW0gLXctcGFyIC13LXN0dSAtdy1jY2MgLXctcmNoCi0hZWxzZQotQ0ZMQUdTPSAtTzEgLXctcGFyIC13LXN0dSAtdy1jY2MgLXctcmNoCi0hZW5kaWYKLSMgLU8yIGVuYWJsZXMgZnVsbCBjb2RlIG9wdGltaXphdGlvbiAoZm9yIHByZS0zLjAgQm9ybGFuZCBDKyssIHVzZSAtTyAtRyAtWikuCi0jIC1PMiBpcyBidWdneSBpbiBCb3JsYW5kIE9TLzIgQysrIHJldmlzaW9uIDIuMCwgc28gdXNlIC1PMSB0aGVyZSBmb3Igbm93LgotIyBJZiB5b3UgaGF2ZSBCb3JsYW5kIE9TLzIgQysrIHJldmlzaW9uIDEuMCwgdXNlIC1PIG9yIG5vIG9wdGltaXphdGlvbiBhdCBhbGwuCi0jIC1tbSBzZWxlY3RzIG1lZGl1bSBtZW1vcnkgbW9kZWwgKG5lYXIgZGF0YSwgZmFyIGNvZGUgcG9pbnRlcnM7IERPUyBvbmx5ISkKLSMgLXctcGFyIHN1cHByZXNzZXMgd2FybmluZ3MgYWJvdXQgdW51c2VkIGZ1bmN0aW9uIHBhcmFtZXRlcnMKLSMgLXctc3R1IHN1cHByZXNzZXMgd2FybmluZ3MgYWJvdXQgaW5jb21wbGV0ZSBzdHJ1Y3R1cmVzCi0jIC13LWNjYyBzdXBwcmVzc2VzIHdhcm5pbmdzIGFib3V0IGNvbXBpbGUtdGltZS1jb25zdGFudCBjb25kaXRpb25zCi0jIC13LXJjaCBzdXBwcmVzc2VzIHdhcm5pbmdzIGFib3V0IHVucmVhY2hhYmxlIGNvZGUKLSMgR2VuZXJhbGx5LCB3ZSByZWNvbW1lbmQgZGVmaW5pbmcgYW55IGNvbmZpZ3VyYXRpb24gc3ltYm9scyBpbiBqY29uZmlnLmgsCi0jIE5PVCB2aWEgLUQgc3dpdGNoZXMgaGVyZS4KLQotIyBMaW5rLXRpbWUgY2Mgb3B0aW9uczoKLSFpZiAkZChET1MpCi1MREZMQUdTPSAtbW0KLSMgbWVtb3J5IG1vZGVsIG9wdGlvbiBoZXJlIG11c3QgbWF0Y2ggQ0ZMQUdTIQotIWVsc2UKLUxERkxBR1M9Ci0jIC1sYWkgZnVsbC1zY3JlZW4gYXBwCi0jIC1sYyBjYXNlLXNpZ25pZmljYW50IGxpbmsKLSFlbmRpZgotCi0jIFB1dCBoZXJlIHRoZSBvYmplY3QgZmlsZSBuYW1lIGZvciB0aGUgY29ycmVjdCBzeXN0ZW0tZGVwZW5kZW50IG1lbW9yeQotIyBtYW5hZ2VyIGZpbGUuCi0jIEZvciBET1MsIHdlIHJlY29tbWVuZCBqbWVtZG9zLmMgYW5kIGptZW1kb3NhLmFzbS4KLSMgRm9yIE9TLzIsIHdlIHJlY29tbWVuZCBqbWVtbm9icy5jIChmbGF0IG1lbW9yeSEpCi0jIFNZU0RFUE1FTUxJQiBtdXN0IGxpc3QgdGhlIHNhbWUgZmlsZXMgd2l0aCAiKyIgc2lnbnMgZm9yIHRoZSBsaWJyYXJpYW4uCi0haWYgJGQoRE9TKQotU1lTREVQTUVNPSBqbWVtZG9zLm9iaiBqbWVtZG9zYS5vYmoKLVNZU0RFUE1FTUxJQj0gK2ptZW1kb3Mub2JqICtqbWVtZG9zYS5vYmoKLSFlbHNlCi1TWVNERVBNRU09IGptZW1ub2JzLm9iagotU1lTREVQTUVNTElCPSAram1lbW5vYnMub2JqCi0hZW5kaWYKLQotIyBFbmQgb2YgY29uZmlndXJhYmxlIG9wdGlvbnMuCi0KLQotIyBzb3VyY2UgZmlsZXM6IEpQRUcgbGlicmFyeSBwcm9wZXIKLUxJQlNPVVJDRVM9IGphcmljb20uYyBqY2FwaW1pbi5jIGpjYXBpc3RkLmMgamNhcml0aC5jIGpjY29lZmN0LmMgamNjb2xvci5jIFwKLSAgICAgICAgamNkY3RtZ3IuYyBqY2h1ZmYuYyBqY2luaXQuYyBqY21haW5jdC5jIGpjbWFya2VyLmMgamNtYXN0ZXIuYyBcCi0gICAgICAgIGpjb21hcGkuYyBqY3BhcmFtLmMgamNwcmVwY3QuYyBqY3NhbXBsZS5jIGpjdHJhbnMuYyBqZGFwaW1pbi5jIFwKLSAgICAgICAgamRhcGlzdGQuYyBqZGFyaXRoLmMgamRhdGFkc3QuYyBqZGF0YXNyYy5jIGpkY29lZmN0LmMgamRjb2xvci5jIFwKLSAgICAgICAgamRkY3RtZ3IuYyBqZGh1ZmYuYyBqZGlucHV0LmMgamRtYWluY3QuYyBqZG1hcmtlci5jIGpkbWFzdGVyLmMgXAotICAgICAgICBqZG1lcmdlLmMgamRwb3N0Y3QuYyBqZHNhbXBsZS5jIGpkdHJhbnMuYyBqZXJyb3IuYyBqZmRjdGZsdC5jIFwKLSAgICAgICAgamZkY3Rmc3QuYyBqZmRjdGludC5jIGppZGN0Zmx0LmMgamlkY3Rmc3QuYyBqaWRjdGludC5jIGpxdWFudDEuYyBcCi0gICAgICAgIGpxdWFudDIuYyBqdXRpbHMuYyBqbWVtbWdyLmMKLSMgbWVtbWdyIGJhY2sgZW5kczogY29tcGlsZSBvbmx5IG9uZSBvZiB0aGVzZSBpbnRvIGEgd29ya2luZyBsaWJyYXJ5Ci1TWVNERVBTT1VSQ0VTPSBqbWVtYW5zaS5jIGptZW1uYW1lLmMgam1lbW5vYnMuYyBqbWVtZG9zLmMgam1lbW1hYy5jCi0jIHNvdXJjZSBmaWxlczogY2pwZWcvZGpwZWcvanBlZ3RyYW4gYXBwbGljYXRpb25zLCBhbHNvIHJkanBnY29tL3dyanBnY29tCi1BUFBTT1VSQ0VTPSBjanBlZy5jIGRqcGVnLmMganBlZ3RyYW4uYyByZGpwZ2NvbS5jIHdyanBnY29tLmMgY2RqcGVnLmMgXAotICAgICAgICByZGNvbG1hcC5jIHJkc3dpdGNoLmMgdHJhbnN1cHAuYyByZHBwbS5jIHdycHBtLmMgcmRnaWYuYyB3cmdpZi5jIFwKLSAgICAgICAgcmR0YXJnYS5jIHdydGFyZ2EuYyByZGJtcC5jIHdyYm1wLmMgcmRybGUuYyB3cnJsZS5jCi1TT1VSQ0VTPSAkKExJQlNPVVJDRVMpICQoU1lTREVQU09VUkNFUykgJChBUFBTT1VSQ0VTKQotIyBmaWxlcyBpbmNsdWRlZCBieSBzb3VyY2UgZmlsZXMKLUlOQ0xVREVTPSBqZGN0LmggamVycm9yLmggamluY2x1ZGUuaCBqbWVtc3lzLmggam1vcmVjZmcuaCBqcGVnaW50LmggXAotICAgICAgICBqcGVnbGliLmgganZlcnNpb24uaCBjZGpwZWcuaCBjZGVycm9yLmggdHJhbnN1cHAuaAotIyBkb2N1bWVudGF0aW9uLCB0ZXN0LCBhbmQgc3VwcG9ydCBmaWxlcwotRE9DUz0gUkVBRE1FIGluc3RhbGwudHh0IHVzYWdlLnR4dCBjanBlZy4xIGRqcGVnLjEganBlZ3RyYW4uMSByZGpwZ2NvbS4xIFwKLSAgICAgICAgd3JqcGdjb20uMSB3aXphcmQudHh0IGV4YW1wbGUuYyBsaWJqcGVnLnR4dCBzdHJ1Y3R1cmUudHh0IFwKLSAgICAgICAgY29kZXJ1bGVzLnR4dCBmaWxlbGlzdC50eHQgY2hhbmdlLmxvZwotTUtGSUxFUz0gY29uZmlndXJlIE1ha2VmaWxlLmluIG1ha2VmaWxlLmFuc2kgbWFrZWZpbGUudW5peCBtYWtlZmlsZS5iY2MgXAotICAgICAgICBtYWtlZmlsZS5tYzYgbWFrZWZpbGUuZGogbWFrZWZpbGUud2F0IG1ha2VmaWxlLnZjIG1ha2VqZHN3LnZjNiBcCi0gICAgICAgIG1ha2VhZHN3LnZjNiBtYWtlamRlcC52YzYgbWFrZWpkc3AudmM2IG1ha2VqbWFrLnZjNiBtYWtlY2RlcC52YzYgXAotICAgICAgICBtYWtlY2RzcC52YzYgbWFrZWNtYWsudmM2IG1ha2VkZGVwLnZjNiBtYWtlZGRzcC52YzYgbWFrZWRtYWsudmM2IFwKLSAgICAgICAgbWFrZXRkZXAudmM2IG1ha2V0ZHNwLnZjNiBtYWtldG1hay52YzYgbWFrZXJkZXAudmM2IG1ha2VyZHNwLnZjNiBcCi0gICAgICAgIG1ha2VybWFrLnZjNiBtYWtld2RlcC52YzYgbWFrZXdkc3AudmM2IG1ha2V3bWFrLnZjNiBtYWtlanNsbi52MTAgXAotICAgICAgICBtYWtlYXNsbi52MTAgbWFrZWp2Y3gudjEwIG1ha2VqZmlsLnYxMCBtYWtlY3ZjeC52MTAgbWFrZWNmaWwudjEwIFwKLSAgICAgICAgbWFrZWR2Y3gudjEwIG1ha2VkZmlsLnYxMCBtYWtldHZjeC52MTAgbWFrZXRmaWwudjEwIG1ha2VydmN4LnYxMCBcCi0gICAgICAgIG1ha2VyZmlsLnYxMCBtYWtld3ZjeC52MTAgbWFrZXdmaWwudjEwIG1ha2Vwcm9qLm1hYyBtYWtjanBlZy5zdCBcCi0gICAgICAgIG1ha2RqcGVnLnN0IG1ha2xqcGVnLnN0IG1ha3RqcGVnLnN0IG1ha2VmaWxlLm1hbnggbWFrZWZpbGUuc2FzIFwKLSAgICAgICAgbWFrZWZpbGUubW1zIG1ha2VmaWxlLnZtcyBtYWt2bXMub3B0Ci1DT05GSUdGSUxFUz0gamNvbmZpZy5jZmcgamNvbmZpZy5iY2MgamNvbmZpZy5tYzYgamNvbmZpZy5kaiBqY29uZmlnLndhdCBcCi0gICAgICAgIGpjb25maWcudmMgamNvbmZpZy5tYWMgamNvbmZpZy5zdCBqY29uZmlnLm1hbnggamNvbmZpZy5zYXMgXAotICAgICAgICBqY29uZmlnLnZtcwotQ09ORklHVVJFRklMRVM9IGNvbmZpZy5ndWVzcyBjb25maWcuc3ViIGluc3RhbGwtc2ggbHRtYWluLnNoIGRlcGNvbXAgbWlzc2luZwotT1RIRVJGSUxFUz0gamNvbmZpZy50eHQgY2tjb25maWcuYyBhbnNpMmtuci5jIGFuc2kya25yLjEgam1lbWRvc2EuYXNtIFwKLSAgICAgICAgbGlianBlZy5tYXAKLVRFU1RGSUxFUz0gdGVzdG9yaWcuanBnIHRlc3RpbWcucHBtIHRlc3RpbWcuYm1wIHRlc3RpbWcuanBnIHRlc3Rwcm9nLmpwZyBcCi0gICAgICAgIHRlc3RpbWdwLmpwZwotRElTVEZJTEVTPSAkKERPQ1MpICQoTUtGSUxFUykgJChDT05GSUdGSUxFUykgJChTT1VSQ0VTKSAkKElOQ0xVREVTKSBcCi0gICAgICAgICQoQ09ORklHVVJFRklMRVMpICQoT1RIRVJGSUxFUykgJChURVNURklMRVMpCi0jIGxpYnJhcnkgb2JqZWN0IGZpbGVzIGNvbW1vbiB0byBjb21wcmVzc2lvbiBhbmQgZGVjb21wcmVzc2lvbgotQ09NT0JKRUNUUz0gamFyaWNvbS5vYmogamNvbWFwaS5vYmoganV0aWxzLm9iaiBqZXJyb3Iub2JqIGptZW1tZ3Iub2JqICQoU1lTREVQTUVNKQotIyBjb21wcmVzc2lvbiBsaWJyYXJ5IG9iamVjdCBmaWxlcwotQ0xJQk9CSkVDVFM9IGpjYXBpbWluLm9iaiBqY2FwaXN0ZC5vYmogamNhcml0aC5vYmogamN0cmFucy5vYmogamNwYXJhbS5vYmogXAotICAgICAgICBqZGF0YWRzdC5vYmogamNpbml0Lm9iaiBqY21hc3Rlci5vYmogamNtYXJrZXIub2JqIGpjbWFpbmN0Lm9iaiBcCi0gICAgICAgIGpjcHJlcGN0Lm9iaiBqY2NvZWZjdC5vYmogamNjb2xvci5vYmogamNzYW1wbGUub2JqIGpjaHVmZi5vYmogXAotICAgICAgICBqY2RjdG1nci5vYmogamZkY3Rmc3Qub2JqIGpmZGN0Zmx0Lm9iaiBqZmRjdGludC5vYmoKLSMgZGVjb21wcmVzc2lvbiBsaWJyYXJ5IG9iamVjdCBmaWxlcwotRExJQk9CSkVDVFM9IGpkYXBpbWluLm9iaiBqZGFwaXN0ZC5vYmogamRhcml0aC5vYmogamR0cmFucy5vYmogamRhdGFzcmMub2JqIFwKLSAgICAgICAgamRtYXN0ZXIub2JqIGpkaW5wdXQub2JqIGpkbWFya2VyLm9iaiBqZGh1ZmYub2JqIGpkbWFpbmN0Lm9iaiBcCi0gICAgICAgIGpkY29lZmN0Lm9iaiBqZHBvc3RjdC5vYmogamRkY3RtZ3Iub2JqIGppZGN0ZnN0Lm9iaiBqaWRjdGZsdC5vYmogXAotICAgICAgICBqaWRjdGludC5vYmogamRzYW1wbGUub2JqIGpkY29sb3Iub2JqIGpxdWFudDEub2JqIGpxdWFudDIub2JqIFwKLSAgICAgICAgamRtZXJnZS5vYmoKLSMgVGhlc2Ugb2JqZWN0ZmlsZXMgYXJlIGluY2x1ZGVkIGluIGxpYmpwZWcubGliCi1MSUJPQkpFQ1RTPSAkKENMSUJPQkpFQ1RTKSAkKERMSUJPQkpFQ1RTKSAkKENPTU9CSkVDVFMpCi0jIG9iamVjdCBmaWxlcyBmb3Igc2FtcGxlIGFwcGxpY2F0aW9ucyAoZXhjbHVkaW5nIGxpYnJhcnkgZmlsZXMpCi1DT0JKRUNUUz0gY2pwZWcub2JqIHJkcHBtLm9iaiByZGdpZi5vYmogcmR0YXJnYS5vYmogcmRybGUub2JqIHJkYm1wLm9iaiBcCi0gICAgICAgIHJkc3dpdGNoLm9iaiBjZGpwZWcub2JqCi1ET0JKRUNUUz0gZGpwZWcub2JqIHdycHBtLm9iaiB3cmdpZi5vYmogd3J0YXJnYS5vYmogd3JybGUub2JqIHdyYm1wLm9iaiBcCi0gICAgICAgIHJkY29sbWFwLm9iaiBjZGpwZWcub2JqCi1UUk9CSkVDVFM9IGpwZWd0cmFuLm9iaiByZHN3aXRjaC5vYmogY2RqcGVnLm9iaiB0cmFuc3VwcC5vYmoKLQotCi1hbGw6IGxpYmpwZWcubGliIGNqcGVnLmV4ZSBkanBlZy5leGUganBlZ3RyYW4uZXhlIHJkanBnY29tLmV4ZSB3cmpwZ2NvbS5leGUKLQotbGlianBlZy5saWI6ICQoTElCT0JKRUNUUykKLQktIGRlbCBsaWJqcGVnLmxpYgotCXRsaWIgbGlianBlZy5saWIgL0UgL0MgQCYmfAotK2pjYXBpbWluLm9iaiAramNhcGlzdGQub2JqICtqY2FyaXRoLm9iaiAramN0cmFucy5vYmogK2pjcGFyYW0ub2JqICYKLStqZGF0YWRzdC5vYmogK2pjaW5pdC5vYmogK2pjbWFzdGVyLm9iaiAramNtYXJrZXIub2JqICtqY21haW5jdC5vYmogJgotK2pjcHJlcGN0Lm9iaiAramNjb2VmY3Qub2JqICtqY2NvbG9yLm9iaiAramNzYW1wbGUub2JqICtqY2h1ZmYub2JqICYKLStqY2RjdG1nci5vYmogK2pmZGN0ZnN0Lm9iaiAramZkY3RmbHQub2JqICtqZmRjdGludC5vYmogK2pkYXBpbWluLm9iaiAmCi0ramRhcGlzdGQub2JqICtqZGFyaXRoLm9iaiAramR0cmFucy5vYmogK2pkYXRhc3JjLm9iaiAramRtYXN0ZXIub2JqICYKLStqZGlucHV0Lm9iaiAramRtYXJrZXIub2JqICtqZGh1ZmYub2JqICtqZG1haW5jdC5vYmogK2pkY29lZmN0Lm9iaiAmCi0ramRwb3N0Y3Qub2JqICtqZGRjdG1nci5vYmogK2ppZGN0ZnN0Lm9iaiAramlkY3RmbHQub2JqICtqaWRjdGludC5vYmogJgotK2pkc2FtcGxlLm9iaiAramRjb2xvci5vYmogK2pxdWFudDEub2JqICtqcXVhbnQyLm9iaiAramRtZXJnZS5vYmogJgotK2phcmljb20ub2JqICtqY29tYXBpLm9iaiAranV0aWxzLm9iaiAramVycm9yLm9iaiAram1lbW1nci5vYmogJgotJChTWVNERVBNRU1MSUIpCi18Ci0KLWNqcGVnLmV4ZTogJChDT0JKRUNUUykgbGlianBlZy5saWIKLQkkKENDKSAkKExERkxBR1MpIC1lY2pwZWcuZXhlICQoQ09CSkVDVFMpIGxpYmpwZWcubGliCi0KLWRqcGVnLmV4ZTogJChET0JKRUNUUykgbGlianBlZy5saWIKLQkkKENDKSAkKExERkxBR1MpIC1lZGpwZWcuZXhlICQoRE9CSkVDVFMpIGxpYmpwZWcubGliCi0KLWpwZWd0cmFuLmV4ZTogJChUUk9CSkVDVFMpIGxpYmpwZWcubGliCi0JJChDQykgJChMREZMQUdTKSAtZWpwZWd0cmFuLmV4ZSAkKFRST0JKRUNUUykgbGlianBlZy5saWIKLQotcmRqcGdjb20uZXhlOiByZGpwZ2NvbS5jCi0haWYgJGQoRE9TKQotCSQoQ0MpIC1tcyAtTyByZGpwZ2NvbS5jCi0hZWxzZQotCSQoQ0MpICQoQ0ZMQUdTKSByZGpwZ2NvbS5jCi0hZW5kaWYKLQotIyBPbiBET1MsIHdyanBnY29tIG5lZWRzIGxhcmdlIG1vZGVsIHNvIGl0IGNhbiBtYWxsb2MgYSA2NEsgY2h1bmsKLXdyanBnY29tLmV4ZTogd3JqcGdjb20uYwotIWlmICRkKERPUykKLQkkKENDKSAtbWwgLU8gd3JqcGdjb20uYwotIWVsc2UKLQkkKENDKSAkKENGTEFHUykgd3JqcGdjb20uYwotIWVuZGlmCi0KLSMgVGhpcyAie30iIHN5bnRheCBhbGxvd3MgQm9ybGFuZCBNYWtlIHRvICJiYXRjaCIgc291cmNlIGZpbGVzLgotIyBJbiB0aGlzIHdheSwgZWFjaCBydW4gb2YgdGhlIGNvbXBpbGVyIGNhbiBidWlsZCBtYW55IG1vZHVsZXMuCi0uYy5vYmo6Ci0JJChDQykgJChDRkxBR1MpIC1jeyAkPH0KLQotamNvbmZpZy5oOiBqY29uZmlnLnR4dAotCWVjaG8gWW91IG11c3QgcHJlcGFyZSBhIHN5c3RlbS1kZXBlbmRlbnQgamNvbmZpZy5oIGZpbGUuCi0JZWNobyBQbGVhc2UgcmVhZCB0aGUgaW5zdGFsbGF0aW9uIGRpcmVjdGlvbnMgaW4gaW5zdGFsbC50eHQuCi0JZXhpdCAxCi0KLWNsZWFuOgotCS0gZGVsICoub2JqCi0JLSBkZWwgbGlianBlZy5saWIKLQktIGRlbCBjanBlZy5leGUKLQktIGRlbCBkanBlZy5leGUKLQktIGRlbCBqcGVndHJhbi5leGUKLQktIGRlbCByZGpwZ2NvbS5leGUKLQktIGRlbCB3cmpwZ2NvbS5leGUKLQktIGRlbCB0ZXN0b3V0Ki4qCi0KLXRlc3Q6IGNqcGVnLmV4ZSBkanBlZy5leGUganBlZ3RyYW4uZXhlCi0JLSBkZWwgdGVzdG91dCouKgotCWRqcGVnIC1kY3QgaW50IC1wcG0gLW91dGZpbGUgdGVzdG91dC5wcG0gIHRlc3RvcmlnLmpwZwotCWRqcGVnIC1kY3QgaW50IC1ibXAgLWNvbG9ycyAyNTYgLW91dGZpbGUgdGVzdG91dC5ibXAgIHRlc3RvcmlnLmpwZwotCWNqcGVnIC1kY3QgaW50IC1vdXRmaWxlIHRlc3RvdXQuanBnICB0ZXN0aW1nLnBwbQotCWRqcGVnIC1kY3QgaW50IC1wcG0gLW91dGZpbGUgdGVzdG91dHAucHBtIHRlc3Rwcm9nLmpwZwotCWNqcGVnIC1kY3QgaW50IC1wcm9ncmVzc2l2ZSAtb3B0IC1vdXRmaWxlIHRlc3RvdXRwLmpwZyB0ZXN0aW1nLnBwbQotCWpwZWd0cmFuIC1vdXRmaWxlIHRlc3RvdXR0LmpwZyB0ZXN0cHJvZy5qcGcKLSFpZiAkZChET1MpCi0JZmMgL2IgdGVzdGltZy5wcG0gdGVzdG91dC5wcG0KLQlmYyAvYiB0ZXN0aW1nLmJtcCB0ZXN0b3V0LmJtcAotCWZjIC9iIHRlc3RpbWcuanBnIHRlc3RvdXQuanBnCi0JZmMgL2IgdGVzdGltZy5wcG0gdGVzdG91dHAucHBtCi0JZmMgL2IgdGVzdGltZ3AuanBnIHRlc3RvdXRwLmpwZwotCWZjIC9iIHRlc3RvcmlnLmpwZyB0ZXN0b3V0dC5qcGcKLSFlbHNlCi0JZWNobyBuID4gbi50bXAKLQljb21wIHRlc3RpbWcucHBtIHRlc3RvdXQucHBtIDwgbi50bXAKLQljb21wIHRlc3RpbWcuYm1wIHRlc3RvdXQuYm1wIDwgbi50bXAKLQljb21wIHRlc3RpbWcuanBnIHRlc3RvdXQuanBnIDwgbi50bXAKLQljb21wIHRlc3RpbWcucHBtIHRlc3RvdXRwLnBwbSA8IG4udG1wCi0JY29tcCB0ZXN0aW1ncC5qcGcgdGVzdG91dHAuanBnIDwgbi50bXAKLQljb21wIHRlc3RvcmlnLmpwZyB0ZXN0b3V0dC5qcGcgPCBuLnRtcAotCWRlbCBuLnRtcAotIWVuZGlmCi0KLQotamFyaWNvbS5vYmo6IGphcmljb20uYyBqaW5jbHVkZS5oIGpjb25maWcuaCBqcGVnbGliLmggam1vcmVjZmcuaCBqcGVnaW50LmggamVycm9yLmgKLWpjYXBpbWluLm9iajogamNhcGltaW4uYyBqaW5jbHVkZS5oIGpjb25maWcuaCBqcGVnbGliLmggam1vcmVjZmcuaCBqcGVnaW50LmggamVycm9yLmgKLWpjYXBpc3RkLm9iajogamNhcGlzdGQuYyBqaW5jbHVkZS5oIGpjb25maWcuaCBqcGVnbGliLmggam1vcmVjZmcuaCBqcGVnaW50LmggamVycm9yLmgKLWpjYXJpdGgub2JqOiBqY2FyaXRoLmMgamluY2x1ZGUuaCBqY29uZmlnLmgganBlZ2xpYi5oIGptb3JlY2ZnLmgganBlZ2ludC5oIGplcnJvci5oCi1qY2NvZWZjdC5vYmo6IGpjY29lZmN0LmMgamluY2x1ZGUuaCBqY29uZmlnLmgganBlZ2xpYi5oIGptb3JlY2ZnLmgganBlZ2ludC5oIGplcnJvci5oCi1qY2NvbG9yLm9iajogamNjb2xvci5jIGppbmNsdWRlLmggamNvbmZpZy5oIGpwZWdsaWIuaCBqbW9yZWNmZy5oIGpwZWdpbnQuaCBqZXJyb3IuaAotamNkY3RtZ3Iub2JqOiBqY2RjdG1nci5jIGppbmNsdWRlLmggamNvbmZpZy5oIGpwZWdsaWIuaCBqbW9yZWNmZy5oIGpwZWdpbnQuaCBqZXJyb3IuaCBqZGN0LmgKLWpjaHVmZi5vYmo6IGpjaHVmZi5jIGppbmNsdWRlLmggamNvbmZpZy5oIGpwZWdsaWIuaCBqbW9yZWNmZy5oIGpwZWdpbnQuaCBqZXJyb3IuaAotamNpbml0Lm9iajogamNpbml0LmMgamluY2x1ZGUuaCBqY29uZmlnLmgganBlZ2xpYi5oIGptb3JlY2ZnLmgganBlZ2ludC5oIGplcnJvci5oCi1qY21haW5jdC5vYmo6IGpjbWFpbmN0LmMgamluY2x1ZGUuaCBqY29uZmlnLmgganBlZ2xpYi5oIGptb3JlY2ZnLmgganBlZ2ludC5oIGplcnJvci5oCi1qY21hcmtlci5vYmo6IGpjbWFya2VyLmMgamluY2x1ZGUuaCBqY29uZmlnLmgganBlZ2xpYi5oIGptb3JlY2ZnLmgganBlZ2ludC5oIGplcnJvci5oCi1qY21hc3Rlci5vYmo6IGpjbWFzdGVyLmMgamluY2x1ZGUuaCBqY29uZmlnLmgganBlZ2xpYi5oIGptb3JlY2ZnLmgganBlZ2ludC5oIGplcnJvci5oCi1qY29tYXBpLm9iajogamNvbWFwaS5jIGppbmNsdWRlLmggamNvbmZpZy5oIGpwZWdsaWIuaCBqbW9yZWNmZy5oIGpwZWdpbnQuaCBqZXJyb3IuaAotamNwYXJhbS5vYmo6IGpjcGFyYW0uYyBqaW5jbHVkZS5oIGpjb25maWcuaCBqcGVnbGliLmggam1vcmVjZmcuaCBqcGVnaW50LmggamVycm9yLmgKLWpjcHJlcGN0Lm9iajogamNwcmVwY3QuYyBqaW5jbHVkZS5oIGpjb25maWcuaCBqcGVnbGliLmggam1vcmVjZmcuaCBqcGVnaW50LmggamVycm9yLmgKLWpjc2FtcGxlLm9iajogamNzYW1wbGUuYyBqaW5jbHVkZS5oIGpjb25maWcuaCBqcGVnbGliLmggam1vcmVjZmcuaCBqcGVnaW50LmggamVycm9yLmgKLWpjdHJhbnMub2JqOiBqY3RyYW5zLmMgamluY2x1ZGUuaCBqY29uZmlnLmgganBlZ2xpYi5oIGptb3JlY2ZnLmgganBlZ2ludC5oIGplcnJvci5oCi1qZGFwaW1pbi5vYmo6IGpkYXBpbWluLmMgamluY2x1ZGUuaCBqY29uZmlnLmgganBlZ2xpYi5oIGptb3JlY2ZnLmgganBlZ2ludC5oIGplcnJvci5oCi1qZGFwaXN0ZC5vYmo6IGpkYXBpc3RkLmMgamluY2x1ZGUuaCBqY29uZmlnLmgganBlZ2xpYi5oIGptb3JlY2ZnLmgganBlZ2ludC5oIGplcnJvci5oCi1qZGFyaXRoLm9iajogamRhcml0aC5jIGppbmNsdWRlLmggamNvbmZpZy5oIGpwZWdsaWIuaCBqbW9yZWNmZy5oIGpwZWdpbnQuaCBqZXJyb3IuaAotamRhdGFkc3Qub2JqOiBqZGF0YWRzdC5jIGppbmNsdWRlLmggamNvbmZpZy5oIGpwZWdsaWIuaCBqbW9yZWNmZy5oIGplcnJvci5oCi1qZGF0YXNyYy5vYmo6IGpkYXRhc3JjLmMgamluY2x1ZGUuaCBqY29uZmlnLmgganBlZ2xpYi5oIGptb3JlY2ZnLmggamVycm9yLmgKLWpkY29lZmN0Lm9iajogamRjb2VmY3QuYyBqaW5jbHVkZS5oIGpjb25maWcuaCBqcGVnbGliLmggam1vcmVjZmcuaCBqcGVnaW50LmggamVycm9yLmgKLWpkY29sb3Iub2JqOiBqZGNvbG9yLmMgamluY2x1ZGUuaCBqY29uZmlnLmgganBlZ2xpYi5oIGptb3JlY2ZnLmgganBlZ2ludC5oIGplcnJvci5oCi1qZGRjdG1nci5vYmo6IGpkZGN0bWdyLmMgamluY2x1ZGUuaCBqY29uZmlnLmgganBlZ2xpYi5oIGptb3JlY2ZnLmgganBlZ2ludC5oIGplcnJvci5oIGpkY3QuaAotamRodWZmLm9iajogamRodWZmLmMgamluY2x1ZGUuaCBqY29uZmlnLmgganBlZ2xpYi5oIGptb3JlY2ZnLmgganBlZ2ludC5oIGplcnJvci5oCi1qZGlucHV0Lm9iajogamRpbnB1dC5jIGppbmNsdWRlLmggamNvbmZpZy5oIGpwZWdsaWIuaCBqbW9yZWNmZy5oIGpwZWdpbnQuaCBqZXJyb3IuaAotamRtYWluY3Qub2JqOiBqZG1haW5jdC5jIGppbmNsdWRlLmggamNvbmZpZy5oIGpwZWdsaWIuaCBqbW9yZWNmZy5oIGpwZWdpbnQuaCBqZXJyb3IuaAotamRtYXJrZXIub2JqOiBqZG1hcmtlci5jIGppbmNsdWRlLmggamNvbmZpZy5oIGpwZWdsaWIuaCBqbW9yZWNmZy5oIGpwZWdpbnQuaCBqZXJyb3IuaAotamRtYXN0ZXIub2JqOiBqZG1hc3Rlci5jIGppbmNsdWRlLmggamNvbmZpZy5oIGpwZWdsaWIuaCBqbW9yZWNmZy5oIGpwZWdpbnQuaCBqZXJyb3IuaAotamRtZXJnZS5vYmo6IGpkbWVyZ2UuYyBqaW5jbHVkZS5oIGpjb25maWcuaCBqcGVnbGliLmggam1vcmVjZmcuaCBqcGVnaW50LmggamVycm9yLmgKLWpkcG9zdGN0Lm9iajogamRwb3N0Y3QuYyBqaW5jbHVkZS5oIGpjb25maWcuaCBqcGVnbGliLmggam1vcmVjZmcuaCBqcGVnaW50LmggamVycm9yLmgKLWpkc2FtcGxlLm9iajogamRzYW1wbGUuYyBqaW5jbHVkZS5oIGpjb25maWcuaCBqcGVnbGliLmggam1vcmVjZmcuaCBqcGVnaW50LmggamVycm9yLmgKLWpkdHJhbnMub2JqOiBqZHRyYW5zLmMgamluY2x1ZGUuaCBqY29uZmlnLmgganBlZ2xpYi5oIGptb3JlY2ZnLmgganBlZ2ludC5oIGplcnJvci5oCi1qZXJyb3Iub2JqOiBqZXJyb3IuYyBqaW5jbHVkZS5oIGpjb25maWcuaCBqcGVnbGliLmggam1vcmVjZmcuaCBqdmVyc2lvbi5oIGplcnJvci5oCi1qZmRjdGZsdC5vYmo6IGpmZGN0Zmx0LmMgamluY2x1ZGUuaCBqY29uZmlnLmgganBlZ2xpYi5oIGptb3JlY2ZnLmgganBlZ2ludC5oIGplcnJvci5oIGpkY3QuaAotamZkY3Rmc3Qub2JqOiBqZmRjdGZzdC5jIGppbmNsdWRlLmggamNvbmZpZy5oIGpwZWdsaWIuaCBqbW9yZWNmZy5oIGpwZWdpbnQuaCBqZXJyb3IuaCBqZGN0LmgKLWpmZGN0aW50Lm9iajogamZkY3RpbnQuYyBqaW5jbHVkZS5oIGpjb25maWcuaCBqcGVnbGliLmggam1vcmVjZmcuaCBqcGVnaW50LmggamVycm9yLmggamRjdC5oCi1qaWRjdGZsdC5vYmo6IGppZGN0Zmx0LmMgamluY2x1ZGUuaCBqY29uZmlnLmgganBlZ2xpYi5oIGptb3JlY2ZnLmgganBlZ2ludC5oIGplcnJvci5oIGpkY3QuaAotamlkY3Rmc3Qub2JqOiBqaWRjdGZzdC5jIGppbmNsdWRlLmggamNvbmZpZy5oIGpwZWdsaWIuaCBqbW9yZWNmZy5oIGpwZWdpbnQuaCBqZXJyb3IuaCBqZGN0LmgKLWppZGN0aW50Lm9iajogamlkY3RpbnQuYyBqaW5jbHVkZS5oIGpjb25maWcuaCBqcGVnbGliLmggam1vcmVjZmcuaCBqcGVnaW50LmggamVycm9yLmggamRjdC5oCi1qcXVhbnQxLm9iajoganF1YW50MS5jIGppbmNsdWRlLmggamNvbmZpZy5oIGpwZWdsaWIuaCBqbW9yZWNmZy5oIGpwZWdpbnQuaCBqZXJyb3IuaAotanF1YW50Mi5vYmo6IGpxdWFudDIuYyBqaW5jbHVkZS5oIGpjb25maWcuaCBqcGVnbGliLmggam1vcmVjZmcuaCBqcGVnaW50LmggamVycm9yLmgKLWp1dGlscy5vYmo6IGp1dGlscy5jIGppbmNsdWRlLmggamNvbmZpZy5oIGpwZWdsaWIuaCBqbW9yZWNmZy5oIGpwZWdpbnQuaCBqZXJyb3IuaAotam1lbW1nci5vYmo6IGptZW1tZ3IuYyBqaW5jbHVkZS5oIGpjb25maWcuaCBqcGVnbGliLmggam1vcmVjZmcuaCBqcGVnaW50LmggamVycm9yLmggam1lbXN5cy5oCi1qbWVtYW5zaS5vYmo6IGptZW1hbnNpLmMgamluY2x1ZGUuaCBqY29uZmlnLmgganBlZ2xpYi5oIGptb3JlY2ZnLmgganBlZ2ludC5oIGplcnJvci5oIGptZW1zeXMuaAotam1lbW5hbWUub2JqOiBqbWVtbmFtZS5jIGppbmNsdWRlLmggamNvbmZpZy5oIGpwZWdsaWIuaCBqbW9yZWNmZy5oIGpwZWdpbnQuaCBqZXJyb3IuaCBqbWVtc3lzLmgKLWptZW1ub2JzLm9iajogam1lbW5vYnMuYyBqaW5jbHVkZS5oIGpjb25maWcuaCBqcGVnbGliLmggam1vcmVjZmcuaCBqcGVnaW50LmggamVycm9yLmggam1lbXN5cy5oCi1qbWVtZG9zLm9iajogam1lbWRvcy5jIGppbmNsdWRlLmggamNvbmZpZy5oIGpwZWdsaWIuaCBqbW9yZWNmZy5oIGpwZWdpbnQuaCBqZXJyb3IuaCBqbWVtc3lzLmgKLWptZW1tYWMub2JqOiBqbWVtbWFjLmMgamluY2x1ZGUuaCBqY29uZmlnLmgganBlZ2xpYi5oIGptb3JlY2ZnLmgganBlZ2ludC5oIGplcnJvci5oIGptZW1zeXMuaAotY2pwZWcub2JqOiBjanBlZy5jIGNkanBlZy5oIGppbmNsdWRlLmggamNvbmZpZy5oIGpwZWdsaWIuaCBqbW9yZWNmZy5oIGplcnJvci5oIGNkZXJyb3IuaCBqdmVyc2lvbi5oCi1kanBlZy5vYmo6IGRqcGVnLmMgY2RqcGVnLmggamluY2x1ZGUuaCBqY29uZmlnLmgganBlZ2xpYi5oIGptb3JlY2ZnLmggamVycm9yLmggY2RlcnJvci5oIGp2ZXJzaW9uLmgKLWpwZWd0cmFuLm9iajoganBlZ3RyYW4uYyBjZGpwZWcuaCBqaW5jbHVkZS5oIGpjb25maWcuaCBqcGVnbGliLmggam1vcmVjZmcuaCBqZXJyb3IuaCBjZGVycm9yLmggdHJhbnN1cHAuaCBqdmVyc2lvbi5oCi1yZGpwZ2NvbS5vYmo6IHJkanBnY29tLmMgamluY2x1ZGUuaCBqY29uZmlnLmgKLXdyanBnY29tLm9iajogd3JqcGdjb20uYyBqaW5jbHVkZS5oIGpjb25maWcuaAotY2RqcGVnLm9iajogY2RqcGVnLmMgY2RqcGVnLmggamluY2x1ZGUuaCBqY29uZmlnLmgganBlZ2xpYi5oIGptb3JlY2ZnLmggamVycm9yLmggY2RlcnJvci5oCi1yZGNvbG1hcC5vYmo6IHJkY29sbWFwLmMgY2RqcGVnLmggamluY2x1ZGUuaCBqY29uZmlnLmgganBlZ2xpYi5oIGptb3JlY2ZnLmggamVycm9yLmggY2RlcnJvci5oCi1yZHN3aXRjaC5vYmo6IHJkc3dpdGNoLmMgY2RqcGVnLmggamluY2x1ZGUuaCBqY29uZmlnLmgganBlZ2xpYi5oIGptb3JlY2ZnLmggamVycm9yLmggY2RlcnJvci5oCi10cmFuc3VwcC5vYmo6IHRyYW5zdXBwLmMgamluY2x1ZGUuaCBqY29uZmlnLmgganBlZ2xpYi5oIGptb3JlY2ZnLmgganBlZ2ludC5oIGplcnJvci5oIHRyYW5zdXBwLmgKLXJkcHBtLm9iajogcmRwcG0uYyBjZGpwZWcuaCBqaW5jbHVkZS5oIGpjb25maWcuaCBqcGVnbGliLmggam1vcmVjZmcuaCBqZXJyb3IuaCBjZGVycm9yLmgKLXdycHBtLm9iajogd3JwcG0uYyBjZGpwZWcuaCBqaW5jbHVkZS5oIGpjb25maWcuaCBqcGVnbGliLmggam1vcmVjZmcuaCBqZXJyb3IuaCBjZGVycm9yLmgKLXJkZ2lmLm9iajogcmRnaWYuYyBjZGpwZWcuaCBqaW5jbHVkZS5oIGpjb25maWcuaCBqcGVnbGliLmggam1vcmVjZmcuaCBqZXJyb3IuaCBjZGVycm9yLmgKLXdyZ2lmLm9iajogd3JnaWYuYyBjZGpwZWcuaCBqaW5jbHVkZS5oIGpjb25maWcuaCBqcGVnbGliLmggam1vcmVjZmcuaCBqZXJyb3IuaCBjZGVycm9yLmgKLXJkdGFyZ2Eub2JqOiByZHRhcmdhLmMgY2RqcGVnLmggamluY2x1ZGUuaCBqY29uZmlnLmgganBlZ2xpYi5oIGptb3JlY2ZnLmggamVycm9yLmggY2RlcnJvci5oCi13cnRhcmdhLm9iajogd3J0YXJnYS5jIGNkanBlZy5oIGppbmNsdWRlLmggamNvbmZpZy5oIGpwZWdsaWIuaCBqbW9yZWNmZy5oIGplcnJvci5oIGNkZXJyb3IuaAotcmRibXAub2JqOiByZGJtcC5jIGNkanBlZy5oIGppbmNsdWRlLmggamNvbmZpZy5oIGpwZWdsaWIuaCBqbW9yZWNmZy5oIGplcnJvci5oIGNkZXJyb3IuaAotd3JibXAub2JqOiB3cmJtcC5jIGNkanBlZy5oIGppbmNsdWRlLmggamNvbmZpZy5oIGpwZWdsaWIuaCBqbW9yZWNmZy5oIGplcnJvci5oIGNkZXJyb3IuaAotcmRybGUub2JqOiByZHJsZS5jIGNkanBlZy5oIGppbmNsdWRlLmggamNvbmZpZy5oIGpwZWdsaWIuaCBqbW9yZWNmZy5oIGplcnJvci5oIGNkZXJyb3IuaAotd3JybGUub2JqOiB3cnJsZS5jIGNkanBlZy5oIGppbmNsdWRlLmggamNvbmZpZy5oIGpwZWdsaWIuaCBqbW9yZWNmZy5oIGplcnJvci5oIGNkZXJyb3IuaAotam1lbWRvc2Eub2JqOiBqbWVtZG9zYS5hc20KLQl0YXNtIC9teCBqbWVtZG9zYS5hc20KZGlmZiAtLWdpdCBhL21ha2VmaWxlLmRqIGIvbWFrZWZpbGUuZGoKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDM3YjZlZTcuLjAwMDAwMDAKLS0tIGEvbWFrZWZpbGUuZGoKKysrIC9kZXYvbnVsbApAQCAtMSwyMjcgKzAsMCBAQAotIyBNYWtlZmlsZSBmb3IgSW5kZXBlbmRlbnQgSlBFRyBHcm91cCdzIHNvZnR3YXJlCi0KLSMgVGhpcyBtYWtlZmlsZSBpcyBmb3IgREpHUFAgKERlbG9yaWUncyBHTlUgQyBwb3J0IG9uIE1TLURPUyksIHYyLjAgb3IgbGF0ZXIuCi0jIFRoYW5rcyB0byBGcmFuayBKLiBEb25haG9lIGZvciB0aGlzIHZlcnNpb24uCi0KLSMgUmVhZCBpbnN0YWxsYXRpb24gaW5zdHJ1Y3Rpb25zIGJlZm9yZSBzYXlpbmcgIm1ha2UiICEhCi0KLSMgVGhlIG5hbWUgb2YgeW91ciBDIGNvbXBpbGVyOgotQ0M9IGdjYwotCi0jIFlvdSBtYXkgbmVlZCB0byBhZGp1c3QgdGhlc2UgY2Mgb3B0aW9uczoKLUNGTEFHUz0gLU8yIC1XYWxsIC1JLgotIyBHZW5lcmFsbHksIHdlIHJlY29tbWVuZCBkZWZpbmluZyBhbnkgY29uZmlndXJhdGlvbiBzeW1ib2xzIGluIGpjb25maWcuaCwKLSMgTk9UIHZpYSAtRCBzd2l0Y2hlcyBoZXJlLgotCi0jIExpbmstdGltZSBjYyBvcHRpb25zOgotTERGTEFHUz0gLXMKLQotIyBUbyBsaW5rIGFueSBzcGVjaWFsIGxpYnJhcmllcywgYWRkIHRoZSBuZWNlc3NhcnkgLWwgY29tbWFuZHMgaGVyZS4KLUxETElCUz0gCi0KLSMgUHV0IGhlcmUgdGhlIG9iamVjdCBmaWxlIG5hbWUgZm9yIHRoZSBjb3JyZWN0IHN5c3RlbS1kZXBlbmRlbnQgbWVtb3J5Ci0jIG1hbmFnZXIgZmlsZS4gIEZvciBESkdQUCB0aGlzIGlzIHVzdWFsbHkgam1lbW5vYnMubywgYnV0IHlvdSBjb3VsZAotIyB1c2Ugam1lbW5hbWUubyBpZiB5b3Ugd2FudCB0byB1c2UgbmFtZWQgdGVtcCBmaWxlcyBpbnN0ZWFkIG9mIHN3YXAgc3BhY2UuCi1TWVNERVBNRU09IGptZW1ub2JzLm8KLQotIyBtaXNjZWxsYW5lb3VzIE9TLWRlcGVuZGVudCBzdHVmZgotIyBsaW5rZXIKLUxOPSAkKENDKQotIyBmaWxlIGRlbGV0aW9uIGNvbW1hbmQKLVJNPSBkZWwKLSMgbGlicmFyeSAoLmEpIGZpbGUgY3JlYXRpb24gY29tbWFuZAotQVI9IGFyIHJjCi0jIHNlY29uZCBzdGVwIGluIC5hIGNyZWF0aW9uICh1c2UgInRvdWNoIiBpZiBub3QgbmVlZGVkKQotQVIyPSByYW5saWIKLQotIyBFbmQgb2YgY29uZmlndXJhYmxlIG9wdGlvbnMuCi0KLQotIyBzb3VyY2UgZmlsZXM6IEpQRUcgbGlicmFyeSBwcm9wZXIKLUxJQlNPVVJDRVM9IGphcmljb20uYyBqY2FwaW1pbi5jIGpjYXBpc3RkLmMgamNhcml0aC5jIGpjY29lZmN0LmMgamNjb2xvci5jIFwKLSAgICAgICAgamNkY3RtZ3IuYyBqY2h1ZmYuYyBqY2luaXQuYyBqY21haW5jdC5jIGpjbWFya2VyLmMgamNtYXN0ZXIuYyBcCi0gICAgICAgIGpjb21hcGkuYyBqY3BhcmFtLmMgamNwcmVwY3QuYyBqY3NhbXBsZS5jIGpjdHJhbnMuYyBqZGFwaW1pbi5jIFwKLSAgICAgICAgamRhcGlzdGQuYyBqZGFyaXRoLmMgamRhdGFkc3QuYyBqZGF0YXNyYy5jIGpkY29lZmN0LmMgamRjb2xvci5jIFwKLSAgICAgICAgamRkY3RtZ3IuYyBqZGh1ZmYuYyBqZGlucHV0LmMgamRtYWluY3QuYyBqZG1hcmtlci5jIGpkbWFzdGVyLmMgXAotICAgICAgICBqZG1lcmdlLmMgamRwb3N0Y3QuYyBqZHNhbXBsZS5jIGpkdHJhbnMuYyBqZXJyb3IuYyBqZmRjdGZsdC5jIFwKLSAgICAgICAgamZkY3Rmc3QuYyBqZmRjdGludC5jIGppZGN0Zmx0LmMgamlkY3Rmc3QuYyBqaWRjdGludC5jIGpxdWFudDEuYyBcCi0gICAgICAgIGpxdWFudDIuYyBqdXRpbHMuYyBqbWVtbWdyLmMKLSMgbWVtbWdyIGJhY2sgZW5kczogY29tcGlsZSBvbmx5IG9uZSBvZiB0aGVzZSBpbnRvIGEgd29ya2luZyBsaWJyYXJ5Ci1TWVNERVBTT1VSQ0VTPSBqbWVtYW5zaS5jIGptZW1uYW1lLmMgam1lbW5vYnMuYyBqbWVtZG9zLmMgam1lbW1hYy5jCi0jIHNvdXJjZSBmaWxlczogY2pwZWcvZGpwZWcvanBlZ3RyYW4gYXBwbGljYXRpb25zLCBhbHNvIHJkanBnY29tL3dyanBnY29tCi1BUFBTT1VSQ0VTPSBjanBlZy5jIGRqcGVnLmMganBlZ3RyYW4uYyByZGpwZ2NvbS5jIHdyanBnY29tLmMgY2RqcGVnLmMgXAotICAgICAgICByZGNvbG1hcC5jIHJkc3dpdGNoLmMgdHJhbnN1cHAuYyByZHBwbS5jIHdycHBtLmMgcmRnaWYuYyB3cmdpZi5jIFwKLSAgICAgICAgcmR0YXJnYS5jIHdydGFyZ2EuYyByZGJtcC5jIHdyYm1wLmMgcmRybGUuYyB3cnJsZS5jCi1TT1VSQ0VTPSAkKExJQlNPVVJDRVMpICQoU1lTREVQU09VUkNFUykgJChBUFBTT1VSQ0VTKQotIyBmaWxlcyBpbmNsdWRlZCBieSBzb3VyY2UgZmlsZXMKLUlOQ0xVREVTPSBqZGN0LmggamVycm9yLmggamluY2x1ZGUuaCBqbWVtc3lzLmggam1vcmVjZmcuaCBqcGVnaW50LmggXAotICAgICAgICBqcGVnbGliLmgganZlcnNpb24uaCBjZGpwZWcuaCBjZGVycm9yLmggdHJhbnN1cHAuaAotIyBkb2N1bWVudGF0aW9uLCB0ZXN0LCBhbmQgc3VwcG9ydCBmaWxlcwotRE9DUz0gUkVBRE1FIGluc3RhbGwudHh0IHVzYWdlLnR4dCBjanBlZy4xIGRqcGVnLjEganBlZ3RyYW4uMSByZGpwZ2NvbS4xIFwKLSAgICAgICAgd3JqcGdjb20uMSB3aXphcmQudHh0IGV4YW1wbGUuYyBsaWJqcGVnLnR4dCBzdHJ1Y3R1cmUudHh0IFwKLSAgICAgICAgY29kZXJ1bGVzLnR4dCBmaWxlbGlzdC50eHQgY2hhbmdlLmxvZwotTUtGSUxFUz0gY29uZmlndXJlIE1ha2VmaWxlLmluIG1ha2VmaWxlLmFuc2kgbWFrZWZpbGUudW5peCBtYWtlZmlsZS5iY2MgXAotICAgICAgICBtYWtlZmlsZS5tYzYgbWFrZWZpbGUuZGogbWFrZWZpbGUud2F0IG1ha2VmaWxlLnZjIG1ha2VqZHN3LnZjNiBcCi0gICAgICAgIG1ha2VhZHN3LnZjNiBtYWtlamRlcC52YzYgbWFrZWpkc3AudmM2IG1ha2VqbWFrLnZjNiBtYWtlY2RlcC52YzYgXAotICAgICAgICBtYWtlY2RzcC52YzYgbWFrZWNtYWsudmM2IG1ha2VkZGVwLnZjNiBtYWtlZGRzcC52YzYgbWFrZWRtYWsudmM2IFwKLSAgICAgICAgbWFrZXRkZXAudmM2IG1ha2V0ZHNwLnZjNiBtYWtldG1hay52YzYgbWFrZXJkZXAudmM2IG1ha2VyZHNwLnZjNiBcCi0gICAgICAgIG1ha2VybWFrLnZjNiBtYWtld2RlcC52YzYgbWFrZXdkc3AudmM2IG1ha2V3bWFrLnZjNiBtYWtlanNsbi52MTAgXAotICAgICAgICBtYWtlYXNsbi52MTAgbWFrZWp2Y3gudjEwIG1ha2VqZmlsLnYxMCBtYWtlY3ZjeC52MTAgbWFrZWNmaWwudjEwIFwKLSAgICAgICAgbWFrZWR2Y3gudjEwIG1ha2VkZmlsLnYxMCBtYWtldHZjeC52MTAgbWFrZXRmaWwudjEwIG1ha2VydmN4LnYxMCBcCi0gICAgICAgIG1ha2VyZmlsLnYxMCBtYWtld3ZjeC52MTAgbWFrZXdmaWwudjEwIG1ha2Vwcm9qLm1hYyBtYWtjanBlZy5zdCBcCi0gICAgICAgIG1ha2RqcGVnLnN0IG1ha2xqcGVnLnN0IG1ha3RqcGVnLnN0IG1ha2VmaWxlLm1hbnggbWFrZWZpbGUuc2FzIFwKLSAgICAgICAgbWFrZWZpbGUubW1zIG1ha2VmaWxlLnZtcyBtYWt2bXMub3B0Ci1DT05GSUdGSUxFUz0gamNvbmZpZy5jZmcgamNvbmZpZy5iY2MgamNvbmZpZy5tYzYgamNvbmZpZy5kaiBqY29uZmlnLndhdCBcCi0gICAgICAgIGpjb25maWcudmMgamNvbmZpZy5tYWMgamNvbmZpZy5zdCBqY29uZmlnLm1hbnggamNvbmZpZy5zYXMgXAotICAgICAgICBqY29uZmlnLnZtcwotQ09ORklHVVJFRklMRVM9IGNvbmZpZy5ndWVzcyBjb25maWcuc3ViIGluc3RhbGwtc2ggbHRtYWluLnNoIGRlcGNvbXAgbWlzc2luZwotT1RIRVJGSUxFUz0gamNvbmZpZy50eHQgY2tjb25maWcuYyBhbnNpMmtuci5jIGFuc2kya25yLjEgam1lbWRvc2EuYXNtIFwKLSAgICAgICAgbGlianBlZy5tYXAKLVRFU1RGSUxFUz0gdGVzdG9yaWcuanBnIHRlc3RpbWcucHBtIHRlc3RpbWcuYm1wIHRlc3RpbWcuanBnIHRlc3Rwcm9nLmpwZyBcCi0gICAgICAgIHRlc3RpbWdwLmpwZwotRElTVEZJTEVTPSAkKERPQ1MpICQoTUtGSUxFUykgJChDT05GSUdGSUxFUykgJChTT1VSQ0VTKSAkKElOQ0xVREVTKSBcCi0gICAgICAgICQoQ09ORklHVVJFRklMRVMpICQoT1RIRVJGSUxFUykgJChURVNURklMRVMpCi0jIGxpYnJhcnkgb2JqZWN0IGZpbGVzIGNvbW1vbiB0byBjb21wcmVzc2lvbiBhbmQgZGVjb21wcmVzc2lvbgotQ09NT0JKRUNUUz0gamFyaWNvbS5vIGpjb21hcGkubyBqdXRpbHMubyBqZXJyb3IubyBqbWVtbWdyLm8gJChTWVNERVBNRU0pCi0jIGNvbXByZXNzaW9uIGxpYnJhcnkgb2JqZWN0IGZpbGVzCi1DTElCT0JKRUNUUz0gamNhcGltaW4ubyBqY2FwaXN0ZC5vIGpjYXJpdGgubyBqY3RyYW5zLm8gamNwYXJhbS5vIFwKLSAgICAgICAgamRhdGFkc3QubyBqY2luaXQubyBqY21hc3Rlci5vIGpjbWFya2VyLm8gamNtYWluY3QubyBqY3ByZXBjdC5vIFwKLSAgICAgICAgamNjb2VmY3QubyBqY2NvbG9yLm8gamNzYW1wbGUubyBqY2h1ZmYubyBqY2RjdG1nci5vIGpmZGN0ZnN0Lm8gXAotICAgICAgICBqZmRjdGZsdC5vIGpmZGN0aW50Lm8KLSMgZGVjb21wcmVzc2lvbiBsaWJyYXJ5IG9iamVjdCBmaWxlcwotRExJQk9CSkVDVFM9IGpkYXBpbWluLm8gamRhcGlzdGQubyBqZGFyaXRoLm8gamR0cmFucy5vIGpkYXRhc3JjLm8gXAotICAgICAgICBqZG1hc3Rlci5vIGpkaW5wdXQubyBqZG1hcmtlci5vIGpkaHVmZi5vIGpkbWFpbmN0Lm8gXAotICAgICAgICBqZGNvZWZjdC5vIGpkcG9zdGN0Lm8gamRkY3RtZ3IubyBqaWRjdGZzdC5vIGppZGN0Zmx0Lm8gXAotICAgICAgICBqaWRjdGludC5vIGpkc2FtcGxlLm8gamRjb2xvci5vIGpxdWFudDEubyBqcXVhbnQyLm8gamRtZXJnZS5vCi0jIFRoZXNlIG9iamVjdGZpbGVzIGFyZSBpbmNsdWRlZCBpbiBsaWJqcGVnLmEKLUxJQk9CSkVDVFM9ICQoQ0xJQk9CSkVDVFMpICQoRExJQk9CSkVDVFMpICQoQ09NT0JKRUNUUykKLSMgb2JqZWN0IGZpbGVzIGZvciBzYW1wbGUgYXBwbGljYXRpb25zIChleGNsdWRpbmcgbGlicmFyeSBmaWxlcykKLUNPQkpFQ1RTPSBjanBlZy5vIHJkcHBtLm8gcmRnaWYubyByZHRhcmdhLm8gcmRybGUubyByZGJtcC5vIHJkc3dpdGNoLm8gXAotICAgICAgICBjZGpwZWcubwotRE9CSkVDVFM9IGRqcGVnLm8gd3JwcG0ubyB3cmdpZi5vIHdydGFyZ2EubyB3cnJsZS5vIHdyYm1wLm8gcmRjb2xtYXAubyBcCi0gICAgICAgIGNkanBlZy5vCi1UUk9CSkVDVFM9IGpwZWd0cmFuLm8gcmRzd2l0Y2gubyBjZGpwZWcubyB0cmFuc3VwcC5vCi0KLQotYWxsOiBsaWJqcGVnLmEgY2pwZWcuZXhlIGRqcGVnLmV4ZSBqcGVndHJhbi5leGUgcmRqcGdjb20uZXhlIHdyanBnY29tLmV4ZQotCi1saWJqcGVnLmE6ICQoTElCT0JKRUNUUykKLQkkKFJNKSBsaWJqcGVnLmEKLQkkKEFSKSBsaWJqcGVnLmEgICQoTElCT0JKRUNUUykKLQkkKEFSMikgbGlianBlZy5hCi0KLWNqcGVnLmV4ZTogJChDT0JKRUNUUykgbGlianBlZy5hCi0JJChMTikgJChMREZMQUdTKSAtbyBjanBlZy5leGUgJChDT0JKRUNUUykgbGlianBlZy5hICQoTERMSUJTKQotCi1kanBlZy5leGU6ICQoRE9CSkVDVFMpIGxpYmpwZWcuYQotCSQoTE4pICQoTERGTEFHUykgLW8gZGpwZWcuZXhlICQoRE9CSkVDVFMpIGxpYmpwZWcuYSAkKExETElCUykKLQotanBlZ3RyYW4uZXhlOiAkKFRST0JKRUNUUykgbGlianBlZy5hCi0JJChMTikgJChMREZMQUdTKSAtbyBqcGVndHJhbi5leGUgJChUUk9CSkVDVFMpIGxpYmpwZWcuYSAkKExETElCUykKLQotcmRqcGdjb20uZXhlOiByZGpwZ2NvbS5vCi0JJChMTikgJChMREZMQUdTKSAtbyByZGpwZ2NvbS5leGUgcmRqcGdjb20ubyAkKExETElCUykKLQotd3JqcGdjb20uZXhlOiB3cmpwZ2NvbS5vCi0JJChMTikgJChMREZMQUdTKSAtbyB3cmpwZ2NvbS5leGUgd3JqcGdjb20ubyAkKExETElCUykKLQotamNvbmZpZy5oOiBqY29uZmlnLnR4dAotCWVjaG8gWW91IG11c3QgcHJlcGFyZSBhIHN5c3RlbS1kZXBlbmRlbnQgamNvbmZpZy5oIGZpbGUuCi0JZWNobyBQbGVhc2UgcmVhZCB0aGUgaW5zdGFsbGF0aW9uIGRpcmVjdGlvbnMgaW4gaW5zdGFsbC50eHQuCi0JZXhpdCAxCi0KLWNsZWFuOgotCSQoUk0pICoubwotCSQoUk0pIGNqcGVnLmV4ZQotCSQoUk0pIGRqcGVnLmV4ZQotCSQoUk0pIGpwZWd0cmFuLmV4ZQotCSQoUk0pIHJkanBnY29tLmV4ZQotCSQoUk0pIHdyanBnY29tLmV4ZQotCSQoUk0pIGxpYmpwZWcuYQotCSQoUk0pIHRlc3RvdXQqLioKLQotdGVzdDogY2pwZWcuZXhlIGRqcGVnLmV4ZSBqcGVndHJhbi5leGUKLQkkKFJNKSB0ZXN0b3V0Ki4qCi0JLi9kanBlZyAtZGN0IGludCAtcHBtIC1vdXRmaWxlIHRlc3RvdXQucHBtICB0ZXN0b3JpZy5qcGcKLQkuL2RqcGVnIC1kY3QgaW50IC1ibXAgLWNvbG9ycyAyNTYgLW91dGZpbGUgdGVzdG91dC5ibXAgIHRlc3RvcmlnLmpwZwotCS4vY2pwZWcgLWRjdCBpbnQgLW91dGZpbGUgdGVzdG91dC5qcGcgIHRlc3RpbWcucHBtCi0JLi9kanBlZyAtZGN0IGludCAtcHBtIC1vdXRmaWxlIHRlc3RvdXRwLnBwbSB0ZXN0cHJvZy5qcGcKLQkuL2NqcGVnIC1kY3QgaW50IC1wcm9ncmVzc2l2ZSAtb3B0IC1vdXRmaWxlIHRlc3RvdXRwLmpwZyB0ZXN0aW1nLnBwbQotCS4vanBlZ3RyYW4gLW91dGZpbGUgdGVzdG91dHQuanBnIHRlc3Rwcm9nLmpwZwotCWZjIC9iIHRlc3RpbWcucHBtIHRlc3RvdXQucHBtCi0JZmMgL2IgdGVzdGltZy5ibXAgdGVzdG91dC5ibXAKLQlmYyAvYiB0ZXN0aW1nLmpwZyB0ZXN0b3V0LmpwZwotCWZjIC9iIHRlc3RpbWcucHBtIHRlc3RvdXRwLnBwbQotCWZjIC9iIHRlc3RpbWdwLmpwZyB0ZXN0b3V0cC5qcGcKLQlmYyAvYiB0ZXN0b3JpZy5qcGcgdGVzdG91dHQuanBnCi0KLQotamFyaWNvbS5vOiBqYXJpY29tLmMgamluY2x1ZGUuaCBqY29uZmlnLmgganBlZ2xpYi5oIGptb3JlY2ZnLmgganBlZ2ludC5oIGplcnJvci5oCi1qY2FwaW1pbi5vOiBqY2FwaW1pbi5jIGppbmNsdWRlLmggamNvbmZpZy5oIGpwZWdsaWIuaCBqbW9yZWNmZy5oIGpwZWdpbnQuaCBqZXJyb3IuaAotamNhcGlzdGQubzogamNhcGlzdGQuYyBqaW5jbHVkZS5oIGpjb25maWcuaCBqcGVnbGliLmggam1vcmVjZmcuaCBqcGVnaW50LmggamVycm9yLmgKLWpjYXJpdGgubzogamNhcml0aC5jIGppbmNsdWRlLmggamNvbmZpZy5oIGpwZWdsaWIuaCBqbW9yZWNmZy5oIGpwZWdpbnQuaCBqZXJyb3IuaAotamNjb2VmY3QubzogamNjb2VmY3QuYyBqaW5jbHVkZS5oIGpjb25maWcuaCBqcGVnbGliLmggam1vcmVjZmcuaCBqcGVnaW50LmggamVycm9yLmgKLWpjY29sb3IubzogamNjb2xvci5jIGppbmNsdWRlLmggamNvbmZpZy5oIGpwZWdsaWIuaCBqbW9yZWNmZy5oIGpwZWdpbnQuaCBqZXJyb3IuaAotamNkY3RtZ3IubzogamNkY3RtZ3IuYyBqaW5jbHVkZS5oIGpjb25maWcuaCBqcGVnbGliLmggam1vcmVjZmcuaCBqcGVnaW50LmggamVycm9yLmggamRjdC5oCi1qY2h1ZmYubzogamNodWZmLmMgamluY2x1ZGUuaCBqY29uZmlnLmgganBlZ2xpYi5oIGptb3JlY2ZnLmgganBlZ2ludC5oIGplcnJvci5oCi1qY2luaXQubzogamNpbml0LmMgamluY2x1ZGUuaCBqY29uZmlnLmgganBlZ2xpYi5oIGptb3JlY2ZnLmgganBlZ2ludC5oIGplcnJvci5oCi1qY21haW5jdC5vOiBqY21haW5jdC5jIGppbmNsdWRlLmggamNvbmZpZy5oIGpwZWdsaWIuaCBqbW9yZWNmZy5oIGpwZWdpbnQuaCBqZXJyb3IuaAotamNtYXJrZXIubzogamNtYXJrZXIuYyBqaW5jbHVkZS5oIGpjb25maWcuaCBqcGVnbGliLmggam1vcmVjZmcuaCBqcGVnaW50LmggamVycm9yLmgKLWpjbWFzdGVyLm86IGpjbWFzdGVyLmMgamluY2x1ZGUuaCBqY29uZmlnLmgganBlZ2xpYi5oIGptb3JlY2ZnLmgganBlZ2ludC5oIGplcnJvci5oCi1qY29tYXBpLm86IGpjb21hcGkuYyBqaW5jbHVkZS5oIGpjb25maWcuaCBqcGVnbGliLmggam1vcmVjZmcuaCBqcGVnaW50LmggamVycm9yLmgKLWpjcGFyYW0ubzogamNwYXJhbS5jIGppbmNsdWRlLmggamNvbmZpZy5oIGpwZWdsaWIuaCBqbW9yZWNmZy5oIGpwZWdpbnQuaCBqZXJyb3IuaAotamNwcmVwY3QubzogamNwcmVwY3QuYyBqaW5jbHVkZS5oIGpjb25maWcuaCBqcGVnbGliLmggam1vcmVjZmcuaCBqcGVnaW50LmggamVycm9yLmgKLWpjc2FtcGxlLm86IGpjc2FtcGxlLmMgamluY2x1ZGUuaCBqY29uZmlnLmgganBlZ2xpYi5oIGptb3JlY2ZnLmgganBlZ2ludC5oIGplcnJvci5oCi1qY3RyYW5zLm86IGpjdHJhbnMuYyBqaW5jbHVkZS5oIGpjb25maWcuaCBqcGVnbGliLmggam1vcmVjZmcuaCBqcGVnaW50LmggamVycm9yLmgKLWpkYXBpbWluLm86IGpkYXBpbWluLmMgamluY2x1ZGUuaCBqY29uZmlnLmgganBlZ2xpYi5oIGptb3JlY2ZnLmgganBlZ2ludC5oIGplcnJvci5oCi1qZGFwaXN0ZC5vOiBqZGFwaXN0ZC5jIGppbmNsdWRlLmggamNvbmZpZy5oIGpwZWdsaWIuaCBqbW9yZWNmZy5oIGpwZWdpbnQuaCBqZXJyb3IuaAotamRhcml0aC5vOiBqZGFyaXRoLmMgamluY2x1ZGUuaCBqY29uZmlnLmgganBlZ2xpYi5oIGptb3JlY2ZnLmgganBlZ2ludC5oIGplcnJvci5oCi1qZGF0YWRzdC5vOiBqZGF0YWRzdC5jIGppbmNsdWRlLmggamNvbmZpZy5oIGpwZWdsaWIuaCBqbW9yZWNmZy5oIGplcnJvci5oCi1qZGF0YXNyYy5vOiBqZGF0YXNyYy5jIGppbmNsdWRlLmggamNvbmZpZy5oIGpwZWdsaWIuaCBqbW9yZWNmZy5oIGplcnJvci5oCi1qZGNvZWZjdC5vOiBqZGNvZWZjdC5jIGppbmNsdWRlLmggamNvbmZpZy5oIGpwZWdsaWIuaCBqbW9yZWNmZy5oIGpwZWdpbnQuaCBqZXJyb3IuaAotamRjb2xvci5vOiBqZGNvbG9yLmMgamluY2x1ZGUuaCBqY29uZmlnLmgganBlZ2xpYi5oIGptb3JlY2ZnLmgganBlZ2ludC5oIGplcnJvci5oCi1qZGRjdG1nci5vOiBqZGRjdG1nci5jIGppbmNsdWRlLmggamNvbmZpZy5oIGpwZWdsaWIuaCBqbW9yZWNmZy5oIGpwZWdpbnQuaCBqZXJyb3IuaCBqZGN0LmgKLWpkaHVmZi5vOiBqZGh1ZmYuYyBqaW5jbHVkZS5oIGpjb25maWcuaCBqcGVnbGliLmggam1vcmVjZmcuaCBqcGVnaW50LmggamVycm9yLmgKLWpkaW5wdXQubzogamRpbnB1dC5jIGppbmNsdWRlLmggamNvbmZpZy5oIGpwZWdsaWIuaCBqbW9yZWNmZy5oIGpwZWdpbnQuaCBqZXJyb3IuaAotamRtYWluY3QubzogamRtYWluY3QuYyBqaW5jbHVkZS5oIGpjb25maWcuaCBqcGVnbGliLmggam1vcmVjZmcuaCBqcGVnaW50LmggamVycm9yLmgKLWpkbWFya2VyLm86IGpkbWFya2VyLmMgamluY2x1ZGUuaCBqY29uZmlnLmgganBlZ2xpYi5oIGptb3JlY2ZnLmgganBlZ2ludC5oIGplcnJvci5oCi1qZG1hc3Rlci5vOiBqZG1hc3Rlci5jIGppbmNsdWRlLmggamNvbmZpZy5oIGpwZWdsaWIuaCBqbW9yZWNmZy5oIGpwZWdpbnQuaCBqZXJyb3IuaAotamRtZXJnZS5vOiBqZG1lcmdlLmMgamluY2x1ZGUuaCBqY29uZmlnLmgganBlZ2xpYi5oIGptb3JlY2ZnLmgganBlZ2ludC5oIGplcnJvci5oCi1qZHBvc3RjdC5vOiBqZHBvc3RjdC5jIGppbmNsdWRlLmggamNvbmZpZy5oIGpwZWdsaWIuaCBqbW9yZWNmZy5oIGpwZWdpbnQuaCBqZXJyb3IuaAotamRzYW1wbGUubzogamRzYW1wbGUuYyBqaW5jbHVkZS5oIGpjb25maWcuaCBqcGVnbGliLmggam1vcmVjZmcuaCBqcGVnaW50LmggamVycm9yLmgKLWpkdHJhbnMubzogamR0cmFucy5jIGppbmNsdWRlLmggamNvbmZpZy5oIGpwZWdsaWIuaCBqbW9yZWNmZy5oIGpwZWdpbnQuaCBqZXJyb3IuaAotamVycm9yLm86IGplcnJvci5jIGppbmNsdWRlLmggamNvbmZpZy5oIGpwZWdsaWIuaCBqbW9yZWNmZy5oIGp2ZXJzaW9uLmggamVycm9yLmgKLWpmZGN0Zmx0Lm86IGpmZGN0Zmx0LmMgamluY2x1ZGUuaCBqY29uZmlnLmgganBlZ2xpYi5oIGptb3JlY2ZnLmgganBlZ2ludC5oIGplcnJvci5oIGpkY3QuaAotamZkY3Rmc3QubzogamZkY3Rmc3QuYyBqaW5jbHVkZS5oIGpjb25maWcuaCBqcGVnbGliLmggam1vcmVjZmcuaCBqcGVnaW50LmggamVycm9yLmggamRjdC5oCi1qZmRjdGludC5vOiBqZmRjdGludC5jIGppbmNsdWRlLmggamNvbmZpZy5oIGpwZWdsaWIuaCBqbW9yZWNmZy5oIGpwZWdpbnQuaCBqZXJyb3IuaCBqZGN0LmgKLWppZGN0Zmx0Lm86IGppZGN0Zmx0LmMgamluY2x1ZGUuaCBqY29uZmlnLmgganBlZ2xpYi5oIGptb3JlY2ZnLmgganBlZ2ludC5oIGplcnJvci5oIGpkY3QuaAotamlkY3Rmc3QubzogamlkY3Rmc3QuYyBqaW5jbHVkZS5oIGpjb25maWcuaCBqcGVnbGliLmggam1vcmVjZmcuaCBqcGVnaW50LmggamVycm9yLmggamRjdC5oCi1qaWRjdGludC5vOiBqaWRjdGludC5jIGppbmNsdWRlLmggamNvbmZpZy5oIGpwZWdsaWIuaCBqbW9yZWNmZy5oIGpwZWdpbnQuaCBqZXJyb3IuaCBqZGN0LmgKLWpxdWFudDEubzoganF1YW50MS5jIGppbmNsdWRlLmggamNvbmZpZy5oIGpwZWdsaWIuaCBqbW9yZWNmZy5oIGpwZWdpbnQuaCBqZXJyb3IuaAotanF1YW50Mi5vOiBqcXVhbnQyLmMgamluY2x1ZGUuaCBqY29uZmlnLmgganBlZ2xpYi5oIGptb3JlY2ZnLmgganBlZ2ludC5oIGplcnJvci5oCi1qdXRpbHMubzoganV0aWxzLmMgamluY2x1ZGUuaCBqY29uZmlnLmgganBlZ2xpYi5oIGptb3JlY2ZnLmgganBlZ2ludC5oIGplcnJvci5oCi1qbWVtbWdyLm86IGptZW1tZ3IuYyBqaW5jbHVkZS5oIGpjb25maWcuaCBqcGVnbGliLmggam1vcmVjZmcuaCBqcGVnaW50LmggamVycm9yLmggam1lbXN5cy5oCi1qbWVtYW5zaS5vOiBqbWVtYW5zaS5jIGppbmNsdWRlLmggamNvbmZpZy5oIGpwZWdsaWIuaCBqbW9yZWNmZy5oIGpwZWdpbnQuaCBqZXJyb3IuaCBqbWVtc3lzLmgKLWptZW1uYW1lLm86IGptZW1uYW1lLmMgamluY2x1ZGUuaCBqY29uZmlnLmgganBlZ2xpYi5oIGptb3JlY2ZnLmgganBlZ2ludC5oIGplcnJvci5oIGptZW1zeXMuaAotam1lbW5vYnMubzogam1lbW5vYnMuYyBqaW5jbHVkZS5oIGpjb25maWcuaCBqcGVnbGliLmggam1vcmVjZmcuaCBqcGVnaW50LmggamVycm9yLmggam1lbXN5cy5oCi1qbWVtZG9zLm86IGptZW1kb3MuYyBqaW5jbHVkZS5oIGpjb25maWcuaCBqcGVnbGliLmggam1vcmVjZmcuaCBqcGVnaW50LmggamVycm9yLmggam1lbXN5cy5oCi1qbWVtbWFjLm86IGptZW1tYWMuYyBqaW5jbHVkZS5oIGpjb25maWcuaCBqcGVnbGliLmggam1vcmVjZmcuaCBqcGVnaW50LmggamVycm9yLmggam1lbXN5cy5oCi1janBlZy5vOiBjanBlZy5jIGNkanBlZy5oIGppbmNsdWRlLmggamNvbmZpZy5oIGpwZWdsaWIuaCBqbW9yZWNmZy5oIGplcnJvci5oIGNkZXJyb3IuaCBqdmVyc2lvbi5oCi1kanBlZy5vOiBkanBlZy5jIGNkanBlZy5oIGppbmNsdWRlLmggamNvbmZpZy5oIGpwZWdsaWIuaCBqbW9yZWNmZy5oIGplcnJvci5oIGNkZXJyb3IuaCBqdmVyc2lvbi5oCi1qcGVndHJhbi5vOiBqcGVndHJhbi5jIGNkanBlZy5oIGppbmNsdWRlLmggamNvbmZpZy5oIGpwZWdsaWIuaCBqbW9yZWNmZy5oIGplcnJvci5oIGNkZXJyb3IuaCB0cmFuc3VwcC5oIGp2ZXJzaW9uLmgKLXJkanBnY29tLm86IHJkanBnY29tLmMgamluY2x1ZGUuaCBqY29uZmlnLmgKLXdyanBnY29tLm86IHdyanBnY29tLmMgamluY2x1ZGUuaCBqY29uZmlnLmgKLWNkanBlZy5vOiBjZGpwZWcuYyBjZGpwZWcuaCBqaW5jbHVkZS5oIGpjb25maWcuaCBqcGVnbGliLmggam1vcmVjZmcuaCBqZXJyb3IuaCBjZGVycm9yLmgKLXJkY29sbWFwLm86IHJkY29sbWFwLmMgY2RqcGVnLmggamluY2x1ZGUuaCBqY29uZmlnLmgganBlZ2xpYi5oIGptb3JlY2ZnLmggamVycm9yLmggY2RlcnJvci5oCi1yZHN3aXRjaC5vOiByZHN3aXRjaC5jIGNkanBlZy5oIGppbmNsdWRlLmggamNvbmZpZy5oIGpwZWdsaWIuaCBqbW9yZWNmZy5oIGplcnJvci5oIGNkZXJyb3IuaAotdHJhbnN1cHAubzogdHJhbnN1cHAuYyBqaW5jbHVkZS5oIGpjb25maWcuaCBqcGVnbGliLmggam1vcmVjZmcuaCBqcGVnaW50LmggamVycm9yLmggdHJhbnN1cHAuaAotcmRwcG0ubzogcmRwcG0uYyBjZGpwZWcuaCBqaW5jbHVkZS5oIGpjb25maWcuaCBqcGVnbGliLmggam1vcmVjZmcuaCBqZXJyb3IuaCBjZGVycm9yLmgKLXdycHBtLm86IHdycHBtLmMgY2RqcGVnLmggamluY2x1ZGUuaCBqY29uZmlnLmgganBlZ2xpYi5oIGptb3JlY2ZnLmggamVycm9yLmggY2RlcnJvci5oCi1yZGdpZi5vOiByZGdpZi5jIGNkanBlZy5oIGppbmNsdWRlLmggamNvbmZpZy5oIGpwZWdsaWIuaCBqbW9yZWNmZy5oIGplcnJvci5oIGNkZXJyb3IuaAotd3JnaWYubzogd3JnaWYuYyBjZGpwZWcuaCBqaW5jbHVkZS5oIGpjb25maWcuaCBqcGVnbGliLmggam1vcmVjZmcuaCBqZXJyb3IuaCBjZGVycm9yLmgKLXJkdGFyZ2EubzogcmR0YXJnYS5jIGNkanBlZy5oIGppbmNsdWRlLmggamNvbmZpZy5oIGpwZWdsaWIuaCBqbW9yZWNmZy5oIGplcnJvci5oIGNkZXJyb3IuaAotd3J0YXJnYS5vOiB3cnRhcmdhLmMgY2RqcGVnLmggamluY2x1ZGUuaCBqY29uZmlnLmgganBlZ2xpYi5oIGptb3JlY2ZnLmggamVycm9yLmggY2RlcnJvci5oCi1yZGJtcC5vOiByZGJtcC5jIGNkanBlZy5oIGppbmNsdWRlLmggamNvbmZpZy5oIGpwZWdsaWIuaCBqbW9yZWNmZy5oIGplcnJvci5oIGNkZXJyb3IuaAotd3JibXAubzogd3JibXAuYyBjZGpwZWcuaCBqaW5jbHVkZS5oIGpjb25maWcuaCBqcGVnbGliLmggam1vcmVjZmcuaCBqZXJyb3IuaCBjZGVycm9yLmgKLXJkcmxlLm86IHJkcmxlLmMgY2RqcGVnLmggamluY2x1ZGUuaCBqY29uZmlnLmgganBlZ2xpYi5oIGptb3JlY2ZnLmggamVycm9yLmggY2RlcnJvci5oCi13cnJsZS5vOiB3cnJsZS5jIGNkanBlZy5oIGppbmNsdWRlLmggamNvbmZpZy5oIGpwZWdsaWIuaCBqbW9yZWNmZy5oIGplcnJvci5oIGNkZXJyb3IuaApkaWZmIC0tZ2l0IGEvbWFrZWZpbGUubWFueCBiL21ha2VmaWxlLm1hbngKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDQ3MWY0MDguLjAwMDAwMDAKLS0tIGEvbWFrZWZpbGUubWFueAorKysgL2Rldi9udWxsCkBAIC0xLDIyMSArMCwwIEBACi0jIE1ha2VmaWxlIGZvciBJbmRlcGVuZGVudCBKUEVHIEdyb3VwJ3Mgc29mdHdhcmUKLQotIyBUaGlzIG1ha2VmaWxlIGlzIGZvciBBbWlnYSBzeXN0ZW1zIHVzaW5nIE1hbnggQXp0ZWMgQyB2ZXIgNS54LgotIyBUaGFua3MgdG8gRC5KLiBKYW1lcyAoZGpqYW1lc0BjdXAucG9ydGFsLmNvbSkgZm9yIHRoaXMgdmVyc2lvbi4KLQotIyBSZWFkIGluc3RhbGxhdGlvbiBpbnN0cnVjdGlvbnMgYmVmb3JlIHNheWluZyAibWFrZSIgISEKLQotIyBUaGUgbmFtZSBvZiB5b3VyIEMgY29tcGlsZXI6Ci1DQz0gY2MKLQotIyBZb3UgbWF5IG5lZWQgdG8gYWRqdXN0IHRoZXNlIGNjIG9wdGlvbnM6Ci0jIFVuY29tbWVudCBmb3IgZ2VuZXJpYyA2ODAwMCBjb2RlICh3aWxsIHdvcmsgb24gYW55IEFtaWdhKQotQVJDSEZMQUdTPSAtc24KLQotIyBVbmNvbW1lbnQgZm9yIDY4MDIwLzY4MDMwIGNvZGUgKGZhc3RlciwgYnV0IHdvbid0IHJ1biBvbiA2ODAwMCBDUFUpCi0jQVJDSEZMQUdTPSAtYzIKLQotQ0ZMQUdTPSAtTUMgLU1EICQoQVJDSEZMQUdTKSAtc3BmYW0gLXI0Ci0KLSMgTGluay10aW1lIGNjIG9wdGlvbnM6Ci1MREZMQUdTPSAtZwotCi0jIFRvIGxpbmsgYW55IHNwZWNpYWwgbGlicmFyaWVzLCBhZGQgdGhlIG5lY2Vzc2FyeSAtbCBjb21tYW5kcyBoZXJlLgotTERMSUJTPSAtbG1sIC1sY2wKLQotIyBQdXQgaGVyZSB0aGUgb2JqZWN0IGZpbGUgbmFtZSBmb3IgdGhlIGNvcnJlY3Qgc3lzdGVtLWRlcGVuZGVudCBtZW1vcnkKLSMgbWFuYWdlciBmaWxlLiAgRm9yIEFtaWdhIHdlIHJlY29tbWVuZCBqbWVtbmFtZS5vLgotU1lTREVQTUVNPSBqbWVtbmFtZS5vCi0KLSMgbWlzY2VsbGFuZW91cyBPUy1kZXBlbmRlbnQgc3R1ZmYKLSMgbGlua2VyCi1MTj0gbG4KLSMgZmlsZSBkZWxldGlvbiBjb21tYW5kCi1STT0gZGVsZXRlIHF1aWV0Ci0jIGxpYnJhcnkgKC5saWIpIGZpbGUgY3JlYXRpb24gY29tbWFuZAotQVI9IGxiCi0KLSMgRW5kIG9mIGNvbmZpZ3VyYWJsZSBvcHRpb25zLgotCi0KLSMgc291cmNlIGZpbGVzOiBKUEVHIGxpYnJhcnkgcHJvcGVyCi1MSUJTT1VSQ0VTPSBqYXJpY29tLmMgamNhcGltaW4uYyBqY2FwaXN0ZC5jIGpjYXJpdGguYyBqY2NvZWZjdC5jIGpjY29sb3IuYyBcCi0gICAgICAgIGpjZGN0bWdyLmMgamNodWZmLmMgamNpbml0LmMgamNtYWluY3QuYyBqY21hcmtlci5jIGpjbWFzdGVyLmMgXAotICAgICAgICBqY29tYXBpLmMgamNwYXJhbS5jIGpjcHJlcGN0LmMgamNzYW1wbGUuYyBqY3RyYW5zLmMgamRhcGltaW4uYyBcCi0gICAgICAgIGpkYXBpc3RkLmMgamRhcml0aC5jIGpkYXRhZHN0LmMgamRhdGFzcmMuYyBqZGNvZWZjdC5jIGpkY29sb3IuYyBcCi0gICAgICAgIGpkZGN0bWdyLmMgamRodWZmLmMgamRpbnB1dC5jIGpkbWFpbmN0LmMgamRtYXJrZXIuYyBqZG1hc3Rlci5jIFwKLSAgICAgICAgamRtZXJnZS5jIGpkcG9zdGN0LmMgamRzYW1wbGUuYyBqZHRyYW5zLmMgamVycm9yLmMgamZkY3RmbHQuYyBcCi0gICAgICAgIGpmZGN0ZnN0LmMgamZkY3RpbnQuYyBqaWRjdGZsdC5jIGppZGN0ZnN0LmMgamlkY3RpbnQuYyBqcXVhbnQxLmMgXAotICAgICAgICBqcXVhbnQyLmMganV0aWxzLmMgam1lbW1nci5jCi0jIG1lbW1nciBiYWNrIGVuZHM6IGNvbXBpbGUgb25seSBvbmUgb2YgdGhlc2UgaW50byBhIHdvcmtpbmcgbGlicmFyeQotU1lTREVQU09VUkNFUz0gam1lbWFuc2kuYyBqbWVtbmFtZS5jIGptZW1ub2JzLmMgam1lbWRvcy5jIGptZW1tYWMuYwotIyBzb3VyY2UgZmlsZXM6IGNqcGVnL2RqcGVnL2pwZWd0cmFuIGFwcGxpY2F0aW9ucywgYWxzbyByZGpwZ2NvbS93cmpwZ2NvbQotQVBQU09VUkNFUz0gY2pwZWcuYyBkanBlZy5jIGpwZWd0cmFuLmMgcmRqcGdjb20uYyB3cmpwZ2NvbS5jIGNkanBlZy5jIFwKLSAgICAgICAgcmRjb2xtYXAuYyByZHN3aXRjaC5jIHRyYW5zdXBwLmMgcmRwcG0uYyB3cnBwbS5jIHJkZ2lmLmMgd3JnaWYuYyBcCi0gICAgICAgIHJkdGFyZ2EuYyB3cnRhcmdhLmMgcmRibXAuYyB3cmJtcC5jIHJkcmxlLmMgd3JybGUuYwotU09VUkNFUz0gJChMSUJTT1VSQ0VTKSAkKFNZU0RFUFNPVVJDRVMpICQoQVBQU09VUkNFUykKLSMgZmlsZXMgaW5jbHVkZWQgYnkgc291cmNlIGZpbGVzCi1JTkNMVURFUz0gamRjdC5oIGplcnJvci5oIGppbmNsdWRlLmggam1lbXN5cy5oIGptb3JlY2ZnLmgganBlZ2ludC5oIFwKLSAgICAgICAganBlZ2xpYi5oIGp2ZXJzaW9uLmggY2RqcGVnLmggY2RlcnJvci5oIHRyYW5zdXBwLmgKLSMgZG9jdW1lbnRhdGlvbiwgdGVzdCwgYW5kIHN1cHBvcnQgZmlsZXMKLURPQ1M9IFJFQURNRSBpbnN0YWxsLnR4dCB1c2FnZS50eHQgY2pwZWcuMSBkanBlZy4xIGpwZWd0cmFuLjEgcmRqcGdjb20uMSBcCi0gICAgICAgIHdyanBnY29tLjEgd2l6YXJkLnR4dCBleGFtcGxlLmMgbGlianBlZy50eHQgc3RydWN0dXJlLnR4dCBcCi0gICAgICAgIGNvZGVydWxlcy50eHQgZmlsZWxpc3QudHh0IGNoYW5nZS5sb2cKLU1LRklMRVM9IGNvbmZpZ3VyZSBNYWtlZmlsZS5pbiBtYWtlZmlsZS5hbnNpIG1ha2VmaWxlLnVuaXggbWFrZWZpbGUuYmNjIFwKLSAgICAgICAgbWFrZWZpbGUubWM2IG1ha2VmaWxlLmRqIG1ha2VmaWxlLndhdCBtYWtlZmlsZS52YyBtYWtlamRzdy52YzYgXAotICAgICAgICBtYWtlYWRzdy52YzYgbWFrZWpkZXAudmM2IG1ha2VqZHNwLnZjNiBtYWtlam1hay52YzYgbWFrZWNkZXAudmM2IFwKLSAgICAgICAgbWFrZWNkc3AudmM2IG1ha2VjbWFrLnZjNiBtYWtlZGRlcC52YzYgbWFrZWRkc3AudmM2IG1ha2VkbWFrLnZjNiBcCi0gICAgICAgIG1ha2V0ZGVwLnZjNiBtYWtldGRzcC52YzYgbWFrZXRtYWsudmM2IG1ha2VyZGVwLnZjNiBtYWtlcmRzcC52YzYgXAotICAgICAgICBtYWtlcm1hay52YzYgbWFrZXdkZXAudmM2IG1ha2V3ZHNwLnZjNiBtYWtld21hay52YzYgbWFrZWpzbG4udjEwIFwKLSAgICAgICAgbWFrZWFzbG4udjEwIG1ha2VqdmN4LnYxMCBtYWtlamZpbC52MTAgbWFrZWN2Y3gudjEwIG1ha2VjZmlsLnYxMCBcCi0gICAgICAgIG1ha2VkdmN4LnYxMCBtYWtlZGZpbC52MTAgbWFrZXR2Y3gudjEwIG1ha2V0ZmlsLnYxMCBtYWtlcnZjeC52MTAgXAotICAgICAgICBtYWtlcmZpbC52MTAgbWFrZXd2Y3gudjEwIG1ha2V3ZmlsLnYxMCBtYWtlcHJvai5tYWMgbWFrY2pwZWcuc3QgXAotICAgICAgICBtYWtkanBlZy5zdCBtYWtsanBlZy5zdCBtYWt0anBlZy5zdCBtYWtlZmlsZS5tYW54IG1ha2VmaWxlLnNhcyBcCi0gICAgICAgIG1ha2VmaWxlLm1tcyBtYWtlZmlsZS52bXMgbWFrdm1zLm9wdAotQ09ORklHRklMRVM9IGpjb25maWcuY2ZnIGpjb25maWcuYmNjIGpjb25maWcubWM2IGpjb25maWcuZGogamNvbmZpZy53YXQgXAotICAgICAgICBqY29uZmlnLnZjIGpjb25maWcubWFjIGpjb25maWcuc3QgamNvbmZpZy5tYW54IGpjb25maWcuc2FzIFwKLSAgICAgICAgamNvbmZpZy52bXMKLUNPTkZJR1VSRUZJTEVTPSBjb25maWcuZ3Vlc3MgY29uZmlnLnN1YiBpbnN0YWxsLXNoIGx0bWFpbi5zaCBkZXBjb21wIG1pc3NpbmcKLU9USEVSRklMRVM9IGpjb25maWcudHh0IGNrY29uZmlnLmMgYW5zaTJrbnIuYyBhbnNpMmtuci4xIGptZW1kb3NhLmFzbSBcCi0gICAgICAgIGxpYmpwZWcubWFwCi1URVNURklMRVM9IHRlc3RvcmlnLmpwZyB0ZXN0aW1nLnBwbSB0ZXN0aW1nLmJtcCB0ZXN0aW1nLmpwZyB0ZXN0cHJvZy5qcGcgXAotICAgICAgICB0ZXN0aW1ncC5qcGcKLURJU1RGSUxFUz0gJChET0NTKSAkKE1LRklMRVMpICQoQ09ORklHRklMRVMpICQoU09VUkNFUykgJChJTkNMVURFUykgXAotICAgICAgICAkKENPTkZJR1VSRUZJTEVTKSAkKE9USEVSRklMRVMpICQoVEVTVEZJTEVTKQotIyBsaWJyYXJ5IG9iamVjdCBmaWxlcyBjb21tb24gdG8gY29tcHJlc3Npb24gYW5kIGRlY29tcHJlc3Npb24KLUNPTU9CSkVDVFM9IGphcmljb20ubyBqY29tYXBpLm8ganV0aWxzLm8gamVycm9yLm8gam1lbW1nci5vICQoU1lTREVQTUVNKQotIyBjb21wcmVzc2lvbiBsaWJyYXJ5IG9iamVjdCBmaWxlcwotQ0xJQk9CSkVDVFM9IGpjYXBpbWluLm8gamNhcGlzdGQubyBqY2FyaXRoLm8gamN0cmFucy5vIGpjcGFyYW0ubyBcCi0gICAgICAgIGpkYXRhZHN0Lm8gamNpbml0Lm8gamNtYXN0ZXIubyBqY21hcmtlci5vIGpjbWFpbmN0Lm8gamNwcmVwY3QubyBcCi0gICAgICAgIGpjY29lZmN0Lm8gamNjb2xvci5vIGpjc2FtcGxlLm8gamNodWZmLm8gamNkY3RtZ3IubyBqZmRjdGZzdC5vIFwKLSAgICAgICAgamZkY3RmbHQubyBqZmRjdGludC5vCi0jIGRlY29tcHJlc3Npb24gbGlicmFyeSBvYmplY3QgZmlsZXMKLURMSUJPQkpFQ1RTPSBqZGFwaW1pbi5vIGpkYXBpc3RkLm8gamRhcml0aC5vIGpkdHJhbnMubyBqZGF0YXNyYy5vIFwKLSAgICAgICAgamRtYXN0ZXIubyBqZGlucHV0Lm8gamRtYXJrZXIubyBqZGh1ZmYubyBqZG1haW5jdC5vIFwKLSAgICAgICAgamRjb2VmY3QubyBqZHBvc3RjdC5vIGpkZGN0bWdyLm8gamlkY3Rmc3QubyBqaWRjdGZsdC5vIFwKLSAgICAgICAgamlkY3RpbnQubyBqZHNhbXBsZS5vIGpkY29sb3IubyBqcXVhbnQxLm8ganF1YW50Mi5vIGpkbWVyZ2UubwotIyBUaGVzZSBvYmplY3RmaWxlcyBhcmUgaW5jbHVkZWQgaW4gbGlianBlZy5saWIKLUxJQk9CSkVDVFM9ICQoQ0xJQk9CSkVDVFMpICQoRExJQk9CSkVDVFMpICQoQ09NT0JKRUNUUykKLSMgb2JqZWN0IGZpbGVzIGZvciBzYW1wbGUgYXBwbGljYXRpb25zIChleGNsdWRpbmcgbGlicmFyeSBmaWxlcykKLUNPQkpFQ1RTPSBjanBlZy5vIHJkcHBtLm8gcmRnaWYubyByZHRhcmdhLm8gcmRybGUubyByZGJtcC5vIHJkc3dpdGNoLm8gXAotICAgICAgICBjZGpwZWcubwotRE9CSkVDVFM9IGRqcGVnLm8gd3JwcG0ubyB3cmdpZi5vIHdydGFyZ2EubyB3cnJsZS5vIHdyYm1wLm8gcmRjb2xtYXAubyBcCi0gICAgICAgIGNkanBlZy5vCi1UUk9CSkVDVFM9IGpwZWd0cmFuLm8gcmRzd2l0Y2gubyBjZGpwZWcubyB0cmFuc3VwcC5vCi0KLQotYWxsOiBsaWJqcGVnLmxpYiBjanBlZyBkanBlZyBqcGVndHJhbiByZGpwZ2NvbSB3cmpwZ2NvbQotCi1saWJqcGVnLmxpYjogJChMSUJPQkpFQ1RTKQotCS0kKFJNKSBsaWJqcGVnLmxpYgotCSQoQVIpIGxpYmpwZWcubGliICAkKExJQk9CSkVDVFMpCi0KLWNqcGVnOiAkKENPQkpFQ1RTKSBsaWJqcGVnLmxpYgotCSQoTE4pICQoTERGTEFHUykgLW8gY2pwZWcgJChDT0JKRUNUUykgbGlianBlZy5saWIgJChMRExJQlMpCi0KLWRqcGVnOiAkKERPQkpFQ1RTKSBsaWJqcGVnLmxpYgotCSQoTE4pICQoTERGTEFHUykgLW8gZGpwZWcgJChET0JKRUNUUykgbGlianBlZy5saWIgJChMRExJQlMpCi0KLWpwZWd0cmFuOiAkKFRST0JKRUNUUykgbGlianBlZy5saWIKLQkkKExOKSAkKExERkxBR1MpIC1vIGpwZWd0cmFuICQoVFJPQkpFQ1RTKSBsaWJqcGVnLmxpYiAkKExETElCUykKLQotcmRqcGdjb206IHJkanBnY29tLm8KLQkkKExOKSAkKExERkxBR1MpIC1vIHJkanBnY29tIHJkanBnY29tLm8gJChMRExJQlMpCi0KLXdyanBnY29tOiB3cmpwZ2NvbS5vCi0JJChMTikgJChMREZMQUdTKSAtbyB3cmpwZ2NvbSB3cmpwZ2NvbS5vICQoTERMSUJTKQotCi1qY29uZmlnLmg6IGpjb25maWcudHh0Ci0JZWNobyBZb3UgbXVzdCBwcmVwYXJlIGEgc3lzdGVtLWRlcGVuZGVudCBqY29uZmlnLmggZmlsZS4KLQllY2hvIFBsZWFzZSByZWFkIHRoZSBpbnN0YWxsYXRpb24gZGlyZWN0aW9ucyBpbiBpbnN0YWxsLnR4dC4KLQlleGl0IDEKLQotY2xlYW46Ci0JLSQoUk0pICoubyBjanBlZyBkanBlZyBqcGVndHJhbiBsaWJqcGVnLmxpYiByZGpwZ2NvbSB3cmpwZ2NvbQotCS0kKFJNKSBjb3JlIHRlc3RvdXQqLioKLQotdGVzdDogY2pwZWcgZGpwZWcganBlZ3RyYW4KLQktJChSTSkgdGVzdG91dCouKgotCWRqcGVnIC1kY3QgaW50IC1wcG0gLW91dGZpbGUgdGVzdG91dC5wcG0gIHRlc3RvcmlnLmpwZwotCWRqcGVnIC1kY3QgaW50IC1ibXAgLWNvbG9ycyAyNTYgLW91dGZpbGUgdGVzdG91dC5ibXAgIHRlc3RvcmlnLmpwZwotCWNqcGVnIC1kY3QgaW50IC1vdXRmaWxlIHRlc3RvdXQuanBnICB0ZXN0aW1nLnBwbQotCWRqcGVnIC1kY3QgaW50IC1wcG0gLW91dGZpbGUgdGVzdG91dHAucHBtIHRlc3Rwcm9nLmpwZwotCWNqcGVnIC1kY3QgaW50IC1wcm9ncmVzc2l2ZSAtb3B0IC1vdXRmaWxlIHRlc3RvdXRwLmpwZyB0ZXN0aW1nLnBwbQotCWpwZWd0cmFuIC1vdXRmaWxlIHRlc3RvdXR0LmpwZyB0ZXN0cHJvZy5qcGcKLQljbXAgdGVzdGltZy5wcG0gdGVzdG91dC5wcG0KLQljbXAgdGVzdGltZy5ibXAgdGVzdG91dC5ibXAKLQljbXAgdGVzdGltZy5qcGcgdGVzdG91dC5qcGcKLQljbXAgdGVzdGltZy5wcG0gdGVzdG91dHAucHBtCi0JY21wIHRlc3RpbWdwLmpwZyB0ZXN0b3V0cC5qcGcKLQljbXAgdGVzdG9yaWcuanBnIHRlc3RvdXR0LmpwZwotCi0KLWphcmljb20ubzogamFyaWNvbS5jIGppbmNsdWRlLmggamNvbmZpZy5oIGpwZWdsaWIuaCBqbW9yZWNmZy5oIGpwZWdpbnQuaCBqZXJyb3IuaAotamNhcGltaW4ubzogamNhcGltaW4uYyBqaW5jbHVkZS5oIGpjb25maWcuaCBqcGVnbGliLmggam1vcmVjZmcuaCBqcGVnaW50LmggamVycm9yLmgKLWpjYXBpc3RkLm86IGpjYXBpc3RkLmMgamluY2x1ZGUuaCBqY29uZmlnLmgganBlZ2xpYi5oIGptb3JlY2ZnLmgganBlZ2ludC5oIGplcnJvci5oCi1qY2FyaXRoLm86IGpjYXJpdGguYyBqaW5jbHVkZS5oIGpjb25maWcuaCBqcGVnbGliLmggam1vcmVjZmcuaCBqcGVnaW50LmggamVycm9yLmgKLWpjY29lZmN0Lm86IGpjY29lZmN0LmMgamluY2x1ZGUuaCBqY29uZmlnLmgganBlZ2xpYi5oIGptb3JlY2ZnLmgganBlZ2ludC5oIGplcnJvci5oCi1qY2NvbG9yLm86IGpjY29sb3IuYyBqaW5jbHVkZS5oIGpjb25maWcuaCBqcGVnbGliLmggam1vcmVjZmcuaCBqcGVnaW50LmggamVycm9yLmgKLWpjZGN0bWdyLm86IGpjZGN0bWdyLmMgamluY2x1ZGUuaCBqY29uZmlnLmgganBlZ2xpYi5oIGptb3JlY2ZnLmgganBlZ2ludC5oIGplcnJvci5oIGpkY3QuaAotamNodWZmLm86IGpjaHVmZi5jIGppbmNsdWRlLmggamNvbmZpZy5oIGpwZWdsaWIuaCBqbW9yZWNmZy5oIGpwZWdpbnQuaCBqZXJyb3IuaAotamNpbml0Lm86IGpjaW5pdC5jIGppbmNsdWRlLmggamNvbmZpZy5oIGpwZWdsaWIuaCBqbW9yZWNmZy5oIGpwZWdpbnQuaCBqZXJyb3IuaAotamNtYWluY3QubzogamNtYWluY3QuYyBqaW5jbHVkZS5oIGpjb25maWcuaCBqcGVnbGliLmggam1vcmVjZmcuaCBqcGVnaW50LmggamVycm9yLmgKLWpjbWFya2VyLm86IGpjbWFya2VyLmMgamluY2x1ZGUuaCBqY29uZmlnLmgganBlZ2xpYi5oIGptb3JlY2ZnLmgganBlZ2ludC5oIGplcnJvci5oCi1qY21hc3Rlci5vOiBqY21hc3Rlci5jIGppbmNsdWRlLmggamNvbmZpZy5oIGpwZWdsaWIuaCBqbW9yZWNmZy5oIGpwZWdpbnQuaCBqZXJyb3IuaAotamNvbWFwaS5vOiBqY29tYXBpLmMgamluY2x1ZGUuaCBqY29uZmlnLmgganBlZ2xpYi5oIGptb3JlY2ZnLmgganBlZ2ludC5oIGplcnJvci5oCi1qY3BhcmFtLm86IGpjcGFyYW0uYyBqaW5jbHVkZS5oIGpjb25maWcuaCBqcGVnbGliLmggam1vcmVjZmcuaCBqcGVnaW50LmggamVycm9yLmgKLWpjcHJlcGN0Lm86IGpjcHJlcGN0LmMgamluY2x1ZGUuaCBqY29uZmlnLmgganBlZ2xpYi5oIGptb3JlY2ZnLmgganBlZ2ludC5oIGplcnJvci5oCi1qY3NhbXBsZS5vOiBqY3NhbXBsZS5jIGppbmNsdWRlLmggamNvbmZpZy5oIGpwZWdsaWIuaCBqbW9yZWNmZy5oIGpwZWdpbnQuaCBqZXJyb3IuaAotamN0cmFucy5vOiBqY3RyYW5zLmMgamluY2x1ZGUuaCBqY29uZmlnLmgganBlZ2xpYi5oIGptb3JlY2ZnLmgganBlZ2ludC5oIGplcnJvci5oCi1qZGFwaW1pbi5vOiBqZGFwaW1pbi5jIGppbmNsdWRlLmggamNvbmZpZy5oIGpwZWdsaWIuaCBqbW9yZWNmZy5oIGpwZWdpbnQuaCBqZXJyb3IuaAotamRhcGlzdGQubzogamRhcGlzdGQuYyBqaW5jbHVkZS5oIGpjb25maWcuaCBqcGVnbGliLmggam1vcmVjZmcuaCBqcGVnaW50LmggamVycm9yLmgKLWpkYXJpdGgubzogamRhcml0aC5jIGppbmNsdWRlLmggamNvbmZpZy5oIGpwZWdsaWIuaCBqbW9yZWNmZy5oIGpwZWdpbnQuaCBqZXJyb3IuaAotamRhdGFkc3QubzogamRhdGFkc3QuYyBqaW5jbHVkZS5oIGpjb25maWcuaCBqcGVnbGliLmggam1vcmVjZmcuaCBqZXJyb3IuaAotamRhdGFzcmMubzogamRhdGFzcmMuYyBqaW5jbHVkZS5oIGpjb25maWcuaCBqcGVnbGliLmggam1vcmVjZmcuaCBqZXJyb3IuaAotamRjb2VmY3QubzogamRjb2VmY3QuYyBqaW5jbHVkZS5oIGpjb25maWcuaCBqcGVnbGliLmggam1vcmVjZmcuaCBqcGVnaW50LmggamVycm9yLmgKLWpkY29sb3IubzogamRjb2xvci5jIGppbmNsdWRlLmggamNvbmZpZy5oIGpwZWdsaWIuaCBqbW9yZWNmZy5oIGpwZWdpbnQuaCBqZXJyb3IuaAotamRkY3RtZ3IubzogamRkY3RtZ3IuYyBqaW5jbHVkZS5oIGpjb25maWcuaCBqcGVnbGliLmggam1vcmVjZmcuaCBqcGVnaW50LmggamVycm9yLmggamRjdC5oCi1qZGh1ZmYubzogamRodWZmLmMgamluY2x1ZGUuaCBqY29uZmlnLmgganBlZ2xpYi5oIGptb3JlY2ZnLmgganBlZ2ludC5oIGplcnJvci5oCi1qZGlucHV0Lm86IGpkaW5wdXQuYyBqaW5jbHVkZS5oIGpjb25maWcuaCBqcGVnbGliLmggam1vcmVjZmcuaCBqcGVnaW50LmggamVycm9yLmgKLWpkbWFpbmN0Lm86IGpkbWFpbmN0LmMgamluY2x1ZGUuaCBqY29uZmlnLmgganBlZ2xpYi5oIGptb3JlY2ZnLmgganBlZ2ludC5oIGplcnJvci5oCi1qZG1hcmtlci5vOiBqZG1hcmtlci5jIGppbmNsdWRlLmggamNvbmZpZy5oIGpwZWdsaWIuaCBqbW9yZWNmZy5oIGpwZWdpbnQuaCBqZXJyb3IuaAotamRtYXN0ZXIubzogamRtYXN0ZXIuYyBqaW5jbHVkZS5oIGpjb25maWcuaCBqcGVnbGliLmggam1vcmVjZmcuaCBqcGVnaW50LmggamVycm9yLmgKLWpkbWVyZ2UubzogamRtZXJnZS5jIGppbmNsdWRlLmggamNvbmZpZy5oIGpwZWdsaWIuaCBqbW9yZWNmZy5oIGpwZWdpbnQuaCBqZXJyb3IuaAotamRwb3N0Y3QubzogamRwb3N0Y3QuYyBqaW5jbHVkZS5oIGpjb25maWcuaCBqcGVnbGliLmggam1vcmVjZmcuaCBqcGVnaW50LmggamVycm9yLmgKLWpkc2FtcGxlLm86IGpkc2FtcGxlLmMgamluY2x1ZGUuaCBqY29uZmlnLmgganBlZ2xpYi5oIGptb3JlY2ZnLmgganBlZ2ludC5oIGplcnJvci5oCi1qZHRyYW5zLm86IGpkdHJhbnMuYyBqaW5jbHVkZS5oIGpjb25maWcuaCBqcGVnbGliLmggam1vcmVjZmcuaCBqcGVnaW50LmggamVycm9yLmgKLWplcnJvci5vOiBqZXJyb3IuYyBqaW5jbHVkZS5oIGpjb25maWcuaCBqcGVnbGliLmggam1vcmVjZmcuaCBqdmVyc2lvbi5oIGplcnJvci5oCi1qZmRjdGZsdC5vOiBqZmRjdGZsdC5jIGppbmNsdWRlLmggamNvbmZpZy5oIGpwZWdsaWIuaCBqbW9yZWNmZy5oIGpwZWdpbnQuaCBqZXJyb3IuaCBqZGN0LmgKLWpmZGN0ZnN0Lm86IGpmZGN0ZnN0LmMgamluY2x1ZGUuaCBqY29uZmlnLmgganBlZ2xpYi5oIGptb3JlY2ZnLmgganBlZ2ludC5oIGplcnJvci5oIGpkY3QuaAotamZkY3RpbnQubzogamZkY3RpbnQuYyBqaW5jbHVkZS5oIGpjb25maWcuaCBqcGVnbGliLmggam1vcmVjZmcuaCBqcGVnaW50LmggamVycm9yLmggamRjdC5oCi1qaWRjdGZsdC5vOiBqaWRjdGZsdC5jIGppbmNsdWRlLmggamNvbmZpZy5oIGpwZWdsaWIuaCBqbW9yZWNmZy5oIGpwZWdpbnQuaCBqZXJyb3IuaCBqZGN0LmgKLWppZGN0ZnN0Lm86IGppZGN0ZnN0LmMgamluY2x1ZGUuaCBqY29uZmlnLmgganBlZ2xpYi5oIGptb3JlY2ZnLmgganBlZ2ludC5oIGplcnJvci5oIGpkY3QuaAotamlkY3RpbnQubzogamlkY3RpbnQuYyBqaW5jbHVkZS5oIGpjb25maWcuaCBqcGVnbGliLmggam1vcmVjZmcuaCBqcGVnaW50LmggamVycm9yLmggamRjdC5oCi1qcXVhbnQxLm86IGpxdWFudDEuYyBqaW5jbHVkZS5oIGpjb25maWcuaCBqcGVnbGliLmggam1vcmVjZmcuaCBqcGVnaW50LmggamVycm9yLmgKLWpxdWFudDIubzoganF1YW50Mi5jIGppbmNsdWRlLmggamNvbmZpZy5oIGpwZWdsaWIuaCBqbW9yZWNmZy5oIGpwZWdpbnQuaCBqZXJyb3IuaAotanV0aWxzLm86IGp1dGlscy5jIGppbmNsdWRlLmggamNvbmZpZy5oIGpwZWdsaWIuaCBqbW9yZWNmZy5oIGpwZWdpbnQuaCBqZXJyb3IuaAotam1lbW1nci5vOiBqbWVtbWdyLmMgamluY2x1ZGUuaCBqY29uZmlnLmgganBlZ2xpYi5oIGptb3JlY2ZnLmgganBlZ2ludC5oIGplcnJvci5oIGptZW1zeXMuaAotam1lbWFuc2kubzogam1lbWFuc2kuYyBqaW5jbHVkZS5oIGpjb25maWcuaCBqcGVnbGliLmggam1vcmVjZmcuaCBqcGVnaW50LmggamVycm9yLmggam1lbXN5cy5oCi1qbWVtbmFtZS5vOiBqbWVtbmFtZS5jIGppbmNsdWRlLmggamNvbmZpZy5oIGpwZWdsaWIuaCBqbW9yZWNmZy5oIGpwZWdpbnQuaCBqZXJyb3IuaCBqbWVtc3lzLmgKLWptZW1ub2JzLm86IGptZW1ub2JzLmMgamluY2x1ZGUuaCBqY29uZmlnLmgganBlZ2xpYi5oIGptb3JlY2ZnLmgganBlZ2ludC5oIGplcnJvci5oIGptZW1zeXMuaAotam1lbWRvcy5vOiBqbWVtZG9zLmMgamluY2x1ZGUuaCBqY29uZmlnLmgganBlZ2xpYi5oIGptb3JlY2ZnLmgganBlZ2ludC5oIGplcnJvci5oIGptZW1zeXMuaAotam1lbW1hYy5vOiBqbWVtbWFjLmMgamluY2x1ZGUuaCBqY29uZmlnLmgganBlZ2xpYi5oIGptb3JlY2ZnLmgganBlZ2ludC5oIGplcnJvci5oIGptZW1zeXMuaAotY2pwZWcubzogY2pwZWcuYyBjZGpwZWcuaCBqaW5jbHVkZS5oIGpjb25maWcuaCBqcGVnbGliLmggam1vcmVjZmcuaCBqZXJyb3IuaCBjZGVycm9yLmgganZlcnNpb24uaAotZGpwZWcubzogZGpwZWcuYyBjZGpwZWcuaCBqaW5jbHVkZS5oIGpjb25maWcuaCBqcGVnbGliLmggam1vcmVjZmcuaCBqZXJyb3IuaCBjZGVycm9yLmgganZlcnNpb24uaAotanBlZ3RyYW4ubzoganBlZ3RyYW4uYyBjZGpwZWcuaCBqaW5jbHVkZS5oIGpjb25maWcuaCBqcGVnbGliLmggam1vcmVjZmcuaCBqZXJyb3IuaCBjZGVycm9yLmggdHJhbnN1cHAuaCBqdmVyc2lvbi5oCi1yZGpwZ2NvbS5vOiByZGpwZ2NvbS5jIGppbmNsdWRlLmggamNvbmZpZy5oCi13cmpwZ2NvbS5vOiB3cmpwZ2NvbS5jIGppbmNsdWRlLmggamNvbmZpZy5oCi1jZGpwZWcubzogY2RqcGVnLmMgY2RqcGVnLmggamluY2x1ZGUuaCBqY29uZmlnLmgganBlZ2xpYi5oIGptb3JlY2ZnLmggamVycm9yLmggY2RlcnJvci5oCi1yZGNvbG1hcC5vOiByZGNvbG1hcC5jIGNkanBlZy5oIGppbmNsdWRlLmggamNvbmZpZy5oIGpwZWdsaWIuaCBqbW9yZWNmZy5oIGplcnJvci5oIGNkZXJyb3IuaAotcmRzd2l0Y2gubzogcmRzd2l0Y2guYyBjZGpwZWcuaCBqaW5jbHVkZS5oIGpjb25maWcuaCBqcGVnbGliLmggam1vcmVjZmcuaCBqZXJyb3IuaCBjZGVycm9yLmgKLXRyYW5zdXBwLm86IHRyYW5zdXBwLmMgamluY2x1ZGUuaCBqY29uZmlnLmgganBlZ2xpYi5oIGptb3JlY2ZnLmgganBlZ2ludC5oIGplcnJvci5oIHRyYW5zdXBwLmgKLXJkcHBtLm86IHJkcHBtLmMgY2RqcGVnLmggamluY2x1ZGUuaCBqY29uZmlnLmgganBlZ2xpYi5oIGptb3JlY2ZnLmggamVycm9yLmggY2RlcnJvci5oCi13cnBwbS5vOiB3cnBwbS5jIGNkanBlZy5oIGppbmNsdWRlLmggamNvbmZpZy5oIGpwZWdsaWIuaCBqbW9yZWNmZy5oIGplcnJvci5oIGNkZXJyb3IuaAotcmRnaWYubzogcmRnaWYuYyBjZGpwZWcuaCBqaW5jbHVkZS5oIGpjb25maWcuaCBqcGVnbGliLmggam1vcmVjZmcuaCBqZXJyb3IuaCBjZGVycm9yLmgKLXdyZ2lmLm86IHdyZ2lmLmMgY2RqcGVnLmggamluY2x1ZGUuaCBqY29uZmlnLmgganBlZ2xpYi5oIGptb3JlY2ZnLmggamVycm9yLmggY2RlcnJvci5oCi1yZHRhcmdhLm86IHJkdGFyZ2EuYyBjZGpwZWcuaCBqaW5jbHVkZS5oIGpjb25maWcuaCBqcGVnbGliLmggam1vcmVjZmcuaCBqZXJyb3IuaCBjZGVycm9yLmgKLXdydGFyZ2Eubzogd3J0YXJnYS5jIGNkanBlZy5oIGppbmNsdWRlLmggamNvbmZpZy5oIGpwZWdsaWIuaCBqbW9yZWNmZy5oIGplcnJvci5oIGNkZXJyb3IuaAotcmRibXAubzogcmRibXAuYyBjZGpwZWcuaCBqaW5jbHVkZS5oIGpjb25maWcuaCBqcGVnbGliLmggam1vcmVjZmcuaCBqZXJyb3IuaCBjZGVycm9yLmgKLXdyYm1wLm86IHdyYm1wLmMgY2RqcGVnLmggamluY2x1ZGUuaCBqY29uZmlnLmgganBlZ2xpYi5oIGptb3JlY2ZnLmggamVycm9yLmggY2RlcnJvci5oCi1yZHJsZS5vOiByZHJsZS5jIGNkanBlZy5oIGppbmNsdWRlLmggamNvbmZpZy5oIGpwZWdsaWIuaCBqbW9yZWNmZy5oIGplcnJvci5oIGNkZXJyb3IuaAotd3JybGUubzogd3JybGUuYyBjZGpwZWcuaCBqaW5jbHVkZS5oIGpjb25maWcuaCBqcGVnbGliLmggam1vcmVjZmcuaCBqZXJyb3IuaCBjZGVycm9yLmgKZGlmZiAtLWdpdCBhL21ha2VmaWxlLm1jNiBiL21ha2VmaWxlLm1jNgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMWVlODNiZS4uMDAwMDAwMAotLS0gYS9tYWtlZmlsZS5tYzYKKysrIC9kZXYvbnVsbApAQCAtMSwyNTYgKzAsMCBAQAotIyBNYWtlZmlsZSBmb3IgSW5kZXBlbmRlbnQgSlBFRyBHcm91cCdzIHNvZnR3YXJlCi0KLSMgVGhpcyBtYWtlZmlsZSBpcyBmb3IgTWljcm9zb2Z0IEMgZm9yIE1TLURPUywgdmVyc2lvbiA2LjAwQSBhbmQgdXAuCi0jIFVzZSBOTUFLRSwgbm90IE1pY3Jvc29mdCdzIGJyYWluLWRhbWFnZWQgTUFLRS4KLSMgVGhhbmtzIHRvIEFsYW4gV3JpZ2h0IGFuZCBDaHJpcyBUdXJuZXIgb2YgT2xpdmV0dGkgUmVzZWFyY2ggTHRkLgotCi0jIFJlYWQgaW5zdGFsbGF0aW9uIGluc3RydWN0aW9ucyBiZWZvcmUgc2F5aW5nICJubWFrZSIgISEKLQotIyBZb3UgbWF5IG5lZWQgdG8gYWRqdXN0IHRoZXNlIGNvbXBpbGVyIG9wdGlvbnM6Ci1DRkxBR1MgPSAtQU0gLU9lY2lndCAtR3MgLVczCi0jIC1BTSBtZWRpdW0gbWVtb3J5IG1vZGVsIChvciB1c2UgLUFTIGZvciBzbWFsbCBtb2RlbCwgaWYgeW91IHJlbW92ZSBmZWF0dXJlcykKLSMgLU9lY2lndCAtR3MgIG1heGltdW0gc2FmZSBvcHRpbWlzYXRpb24gKC1PbCBoYXMgYnVncyBpbiBNU0MgNi4wMEEpCi0jIC1XMyB3YXJuaW5nIGxldmVsIDMKLSMgWW91IG1pZ2h0IGFsc28gd2FudCB0byBhZGQgLUcyIGlmIHlvdSBoYXZlIGFuIDgwMjg2LCBldGMuCi0jIEdlbmVyYWxseSwgd2UgcmVjb21tZW5kIGRlZmluaW5nIGFueSBjb25maWd1cmF0aW9uIHN5bWJvbHMgaW4gamNvbmZpZy5oLAotIyBOT1QgdmlhIC1EIHN3aXRjaGVzIGhlcmUuCi0KLSMgSmFuLUhlcm1hbiBCdWluaW5nIHN1Z2dlc3RzIHRoZSBmb2xsb3dpbmcgc3dpdGNoZXMgZm9yIE1TIEMgOC4wIGFuZCBhIDQ4NjoKLSMgQ0ZMQUdTID0gL0FNIC9mLSAvRlBpODcgL0czIC9HcyAvR3kgL09iMSAvT2MgL09lIC9PZyAvT2kgL09sIC9PbiAvT28gL090IFwKLSMgICAgICAgICAgL09WNCAvVzMKLSMgZXhjZXB0IGZvciBqcXVhbnQxLmMsIHdoaWNoIG11c3QgYmUgY29tcGlsZWQgd2l0aCAvT28tIHRvIGF2b2lkIGEgY29tcGlsZXIKLSMgY3Jhc2guCi0KLSMgSW5nYXIgU3RlaW5zbGFuZCBzdWdnZXN0cyB0aGUgZm9sbG93aW5nIHN3aXRjaGVzIHdoZW4gYnVpbGRpbmcKLSMgYSAxNi1iaXQgV2luZG93cyBETEw6Ci0jIENGTEFHUyA9IC1BTHcgLUdzdyAtWnBlIC1XMyAtTzIgLVppIC1aZAotCi0jIFB1dCBoZXJlIHRoZSBvYmplY3QgZmlsZSBuYW1lIGZvciB0aGUgY29ycmVjdCBzeXN0ZW0tZGVwZW5kZW50IG1lbW9yeQotIyBtYW5hZ2VyIGZpbGUuICBGb3IgRE9TLCB3ZSByZWNvbW1lbmQgam1lbWRvcy5jIGFuZCBqbWVtZG9zYS5hc20uCi0jIChCdXQgbm90IGZvciBXaW5kb3dzOyBzZWUgaW5zdGFsbC50eHQgaWYgeW91IHVzZSB0aGlzIG1ha2VmaWxlIGZvciBXaW5kb3dzLikKLVNZU0RFUE1FTT0gam1lbWRvcy5vYmogam1lbWRvc2Eub2JqCi0jIFNZU0RFUE1FTUxJQiBtdXN0IGxpc3QgdGhlIHNhbWUgZmlsZXMgd2l0aCAiKyIgc2lnbnMgZm9yIHRoZSBsaWJyYXJpYW4uCi1TWVNERVBNRU1MSUI9ICtqbWVtZG9zLm9iaiAram1lbWRvc2Eub2JqCi0KLSMgRW5kIG9mIGNvbmZpZ3VyYWJsZSBvcHRpb25zLgotCi0KLSMgc291cmNlIGZpbGVzOiBKUEVHIGxpYnJhcnkgcHJvcGVyCi1MSUJTT1VSQ0VTPSBqYXJpY29tLmMgamNhcGltaW4uYyBqY2FwaXN0ZC5jIGpjYXJpdGguYyBqY2NvZWZjdC5jIGpjY29sb3IuYyBcCi0gICAgICAgIGpjZGN0bWdyLmMgamNodWZmLmMgamNpbml0LmMgamNtYWluY3QuYyBqY21hcmtlci5jIGpjbWFzdGVyLmMgXAotICAgICAgICBqY29tYXBpLmMgamNwYXJhbS5jIGpjcHJlcGN0LmMgamNzYW1wbGUuYyBqY3RyYW5zLmMgamRhcGltaW4uYyBcCi0gICAgICAgIGpkYXBpc3RkLmMgamRhcml0aC5jIGpkYXRhZHN0LmMgamRhdGFzcmMuYyBqZGNvZWZjdC5jIGpkY29sb3IuYyBcCi0gICAgICAgIGpkZGN0bWdyLmMgamRodWZmLmMgamRpbnB1dC5jIGpkbWFpbmN0LmMgamRtYXJrZXIuYyBqZG1hc3Rlci5jIFwKLSAgICAgICAgamRtZXJnZS5jIGpkcG9zdGN0LmMgamRzYW1wbGUuYyBqZHRyYW5zLmMgamVycm9yLmMgamZkY3RmbHQuYyBcCi0gICAgICAgIGpmZGN0ZnN0LmMgamZkY3RpbnQuYyBqaWRjdGZsdC5jIGppZGN0ZnN0LmMgamlkY3RpbnQuYyBqcXVhbnQxLmMgXAotICAgICAgICBqcXVhbnQyLmMganV0aWxzLmMgam1lbW1nci5jCi0jIG1lbW1nciBiYWNrIGVuZHM6IGNvbXBpbGUgb25seSBvbmUgb2YgdGhlc2UgaW50byBhIHdvcmtpbmcgbGlicmFyeQotU1lTREVQU09VUkNFUz0gam1lbWFuc2kuYyBqbWVtbmFtZS5jIGptZW1ub2JzLmMgam1lbWRvcy5jIGptZW1tYWMuYwotIyBzb3VyY2UgZmlsZXM6IGNqcGVnL2RqcGVnL2pwZWd0cmFuIGFwcGxpY2F0aW9ucywgYWxzbyByZGpwZ2NvbS93cmpwZ2NvbQotQVBQU09VUkNFUz0gY2pwZWcuYyBkanBlZy5jIGpwZWd0cmFuLmMgcmRqcGdjb20uYyB3cmpwZ2NvbS5jIGNkanBlZy5jIFwKLSAgICAgICAgcmRjb2xtYXAuYyByZHN3aXRjaC5jIHRyYW5zdXBwLmMgcmRwcG0uYyB3cnBwbS5jIHJkZ2lmLmMgd3JnaWYuYyBcCi0gICAgICAgIHJkdGFyZ2EuYyB3cnRhcmdhLmMgcmRibXAuYyB3cmJtcC5jIHJkcmxlLmMgd3JybGUuYwotU09VUkNFUz0gJChMSUJTT1VSQ0VTKSAkKFNZU0RFUFNPVVJDRVMpICQoQVBQU09VUkNFUykKLSMgZmlsZXMgaW5jbHVkZWQgYnkgc291cmNlIGZpbGVzCi1JTkNMVURFUz0gamRjdC5oIGplcnJvci5oIGppbmNsdWRlLmggam1lbXN5cy5oIGptb3JlY2ZnLmgganBlZ2ludC5oIFwKLSAgICAgICAganBlZ2xpYi5oIGp2ZXJzaW9uLmggY2RqcGVnLmggY2RlcnJvci5oIHRyYW5zdXBwLmgKLSMgZG9jdW1lbnRhdGlvbiwgdGVzdCwgYW5kIHN1cHBvcnQgZmlsZXMKLURPQ1M9IFJFQURNRSBpbnN0YWxsLnR4dCB1c2FnZS50eHQgY2pwZWcuMSBkanBlZy4xIGpwZWd0cmFuLjEgcmRqcGdjb20uMSBcCi0gICAgICAgIHdyanBnY29tLjEgd2l6YXJkLnR4dCBleGFtcGxlLmMgbGlianBlZy50eHQgc3RydWN0dXJlLnR4dCBcCi0gICAgICAgIGNvZGVydWxlcy50eHQgZmlsZWxpc3QudHh0IGNoYW5nZS5sb2cKLU1LRklMRVM9IGNvbmZpZ3VyZSBNYWtlZmlsZS5pbiBtYWtlZmlsZS5hbnNpIG1ha2VmaWxlLnVuaXggbWFrZWZpbGUuYmNjIFwKLSAgICAgICAgbWFrZWZpbGUubWM2IG1ha2VmaWxlLmRqIG1ha2VmaWxlLndhdCBtYWtlZmlsZS52YyBtYWtlamRzdy52YzYgXAotICAgICAgICBtYWtlYWRzdy52YzYgbWFrZWpkZXAudmM2IG1ha2VqZHNwLnZjNiBtYWtlam1hay52YzYgbWFrZWNkZXAudmM2IFwKLSAgICAgICAgbWFrZWNkc3AudmM2IG1ha2VjbWFrLnZjNiBtYWtlZGRlcC52YzYgbWFrZWRkc3AudmM2IG1ha2VkbWFrLnZjNiBcCi0gICAgICAgIG1ha2V0ZGVwLnZjNiBtYWtldGRzcC52YzYgbWFrZXRtYWsudmM2IG1ha2VyZGVwLnZjNiBtYWtlcmRzcC52YzYgXAotICAgICAgICBtYWtlcm1hay52YzYgbWFrZXdkZXAudmM2IG1ha2V3ZHNwLnZjNiBtYWtld21hay52YzYgbWFrZWpzbG4udjEwIFwKLSAgICAgICAgbWFrZWFzbG4udjEwIG1ha2VqdmN4LnYxMCBtYWtlamZpbC52MTAgbWFrZWN2Y3gudjEwIG1ha2VjZmlsLnYxMCBcCi0gICAgICAgIG1ha2VkdmN4LnYxMCBtYWtlZGZpbC52MTAgbWFrZXR2Y3gudjEwIG1ha2V0ZmlsLnYxMCBtYWtlcnZjeC52MTAgXAotICAgICAgICBtYWtlcmZpbC52MTAgbWFrZXd2Y3gudjEwIG1ha2V3ZmlsLnYxMCBtYWtlcHJvai5tYWMgbWFrY2pwZWcuc3QgXAotICAgICAgICBtYWtkanBlZy5zdCBtYWtsanBlZy5zdCBtYWt0anBlZy5zdCBtYWtlZmlsZS5tYW54IG1ha2VmaWxlLnNhcyBcCi0gICAgICAgIG1ha2VmaWxlLm1tcyBtYWtlZmlsZS52bXMgbWFrdm1zLm9wdAotQ09ORklHRklMRVM9IGpjb25maWcuY2ZnIGpjb25maWcuYmNjIGpjb25maWcubWM2IGpjb25maWcuZGogamNvbmZpZy53YXQgXAotICAgICAgICBqY29uZmlnLnZjIGpjb25maWcubWFjIGpjb25maWcuc3QgamNvbmZpZy5tYW54IGpjb25maWcuc2FzIFwKLSAgICAgICAgamNvbmZpZy52bXMKLUNPTkZJR1VSRUZJTEVTPSBjb25maWcuZ3Vlc3MgY29uZmlnLnN1YiBpbnN0YWxsLXNoIGx0bWFpbi5zaCBkZXBjb21wIG1pc3NpbmcKLU9USEVSRklMRVM9IGpjb25maWcudHh0IGNrY29uZmlnLmMgYW5zaTJrbnIuYyBhbnNpMmtuci4xIGptZW1kb3NhLmFzbSBcCi0gICAgICAgIGxpYmpwZWcubWFwCi1URVNURklMRVM9IHRlc3RvcmlnLmpwZyB0ZXN0aW1nLnBwbSB0ZXN0aW1nLmJtcCB0ZXN0aW1nLmpwZyB0ZXN0cHJvZy5qcGcgXAotICAgICAgICB0ZXN0aW1ncC5qcGcKLURJU1RGSUxFUz0gJChET0NTKSAkKE1LRklMRVMpICQoQ09ORklHRklMRVMpICQoU09VUkNFUykgJChJTkNMVURFUykgXAotICAgICAgICAkKENPTkZJR1VSRUZJTEVTKSAkKE9USEVSRklMRVMpICQoVEVTVEZJTEVTKQotIyBsaWJyYXJ5IG9iamVjdCBmaWxlcyBjb21tb24gdG8gY29tcHJlc3Npb24gYW5kIGRlY29tcHJlc3Npb24KLUNPTU9CSkVDVFM9IGphcmljb20ub2JqIGpjb21hcGkub2JqIGp1dGlscy5vYmogamVycm9yLm9iaiBqbWVtbWdyLm9iaiAkKFNZU0RFUE1FTSkKLSMgY29tcHJlc3Npb24gbGlicmFyeSBvYmplY3QgZmlsZXMKLUNMSUJPQkpFQ1RTPSBqY2FwaW1pbi5vYmogamNhcGlzdGQub2JqIGpjYXJpdGgub2JqIGpjdHJhbnMub2JqIGpjcGFyYW0ub2JqIFwKLSAgICAgICAgamRhdGFkc3Qub2JqIGpjaW5pdC5vYmogamNtYXN0ZXIub2JqIGpjbWFya2VyLm9iaiBqY21haW5jdC5vYmogXAotICAgICAgICBqY3ByZXBjdC5vYmogamNjb2VmY3Qub2JqIGpjY29sb3Iub2JqIGpjc2FtcGxlLm9iaiBqY2h1ZmYub2JqIFwKLSAgICAgICAgamNkY3RtZ3Iub2JqIGpmZGN0ZnN0Lm9iaiBqZmRjdGZsdC5vYmogamZkY3RpbnQub2JqCi0jIGRlY29tcHJlc3Npb24gbGlicmFyeSBvYmplY3QgZmlsZXMKLURMSUJPQkpFQ1RTPSBqZGFwaW1pbi5vYmogamRhcGlzdGQub2JqIGpkYXJpdGgub2JqIGpkdHJhbnMub2JqIGpkYXRhc3JjLm9iaiBcCi0gICAgICAgIGpkbWFzdGVyLm9iaiBqZGlucHV0Lm9iaiBqZG1hcmtlci5vYmogamRodWZmLm9iaiBqZG1haW5jdC5vYmogXAotICAgICAgICBqZGNvZWZjdC5vYmogamRwb3N0Y3Qub2JqIGpkZGN0bWdyLm9iaiBqaWRjdGZzdC5vYmogamlkY3RmbHQub2JqIFwKLSAgICAgICAgamlkY3RpbnQub2JqIGpkc2FtcGxlLm9iaiBqZGNvbG9yLm9iaiBqcXVhbnQxLm9iaiBqcXVhbnQyLm9iaiBcCi0gICAgICAgIGpkbWVyZ2Uub2JqCi0jIFRoZXNlIG9iamVjdGZpbGVzIGFyZSBpbmNsdWRlZCBpbiBsaWJqcGVnLmxpYgotTElCT0JKRUNUUz0gJChDTElCT0JKRUNUUykgJChETElCT0JKRUNUUykgJChDT01PQkpFQ1RTKQotIyBvYmplY3QgZmlsZXMgZm9yIHNhbXBsZSBhcHBsaWNhdGlvbnMgKGV4Y2x1ZGluZyBsaWJyYXJ5IGZpbGVzKQotQ09CSkVDVFM9IGNqcGVnLm9iaiByZHBwbS5vYmogcmRnaWYub2JqIHJkdGFyZ2Eub2JqIHJkcmxlLm9iaiByZGJtcC5vYmogXAotICAgICAgICByZHN3aXRjaC5vYmogY2RqcGVnLm9iagotRE9CSkVDVFM9IGRqcGVnLm9iaiB3cnBwbS5vYmogd3JnaWYub2JqIHdydGFyZ2Eub2JqIHdycmxlLm9iaiB3cmJtcC5vYmogXAotICAgICAgICByZGNvbG1hcC5vYmogY2RqcGVnLm9iagotVFJPQkpFQ1RTPSBqcGVndHJhbi5vYmogcmRzd2l0Y2gub2JqIGNkanBlZy5vYmogdHJhbnN1cHAub2JqCi0KLSMgbmVlZCBsaW5rZXIgcmVzcG9uc2UgZmlsZSBiZWNhdXNlIGZpbGUgbGlzdCA+IDEyOCBjaGFycwotUkZJTEUgPSBsaWJqcGVnLmFucwotCi0KLWFsbDogbGlianBlZy5saWIgY2pwZWcuZXhlIGRqcGVnLmV4ZSBqcGVndHJhbi5leGUgcmRqcGdjb20uZXhlIHdyanBnY29tLmV4ZQotCi1saWJqcGVnLmxpYjogJChMSUJPQkpFQ1RTKSAkKFJGSUxFKQotCWRlbCBsaWJqcGVnLmxpYgotCWxpYiBAJChSRklMRSkKLQotIyBsaW5rZXIgcmVzcG9uc2UgZmlsZSBmb3IgYnVpbGRpbmcgbGlianBlZy5saWIKLSQoUkZJTEUpIDogbWFrZWZpbGUKLQlkZWwgJChSRklMRSkKLQllY2hvIGxpYmpwZWcubGliID4kKFJGSUxFKQotIyBzaWxseSB3YW50LXRvLWNyZWF0ZS1pdCBwcm9tcHQ6Ci0JZWNobyB5ID4+JChSRklMRSkKLQllY2hvICtqY2FwaW1pbi5vYmogK2pjYXBpc3RkLm9iaiAramNhcml0aC5vYmogK2pjdHJhbnMub2JqICYgPj4kKFJGSUxFKQotCWVjaG8gK2pjcGFyYW0ub2JqICtqZGF0YWRzdC5vYmogK2pjaW5pdC5vYmogK2pjbWFzdGVyLm9iaiAmID4+JChSRklMRSkKLQllY2hvICtqY21hcmtlci5vYmogK2pjbWFpbmN0Lm9iaiAramNwcmVwY3Qub2JqICYgPj4kKFJGSUxFKQotCWVjaG8gK2pjY29lZmN0Lm9iaiAramNjb2xvci5vYmogK2pjc2FtcGxlLm9iaiAramNodWZmLm9iaiAmID4+JChSRklMRSkKLQllY2hvICtqY2RjdG1nci5vYmogK2pmZGN0ZnN0Lm9iaiAramZkY3RmbHQub2JqICYgPj4kKFJGSUxFKQotCWVjaG8gK2pmZGN0aW50Lm9iaiAramRhcGltaW4ub2JqICtqZGFwaXN0ZC5vYmogJiA+PiQoUkZJTEUpCi0JZWNobyAramRhcml0aC5vYmogK2pkdHJhbnMub2JqICtqZGF0YXNyYy5vYmogK2pkbWFzdGVyLm9iaiAmID4+JChSRklMRSkKLQllY2hvICtqZGlucHV0Lm9iaiAramRtYXJrZXIub2JqICtqZGh1ZmYub2JqICtqZG1haW5jdC5vYmogJiA+PiQoUkZJTEUpCi0JZWNobyAramRjb2VmY3Qub2JqICtqZHBvc3RjdC5vYmogK2pkZGN0bWdyLm9iaiAmID4+JChSRklMRSkKLQllY2hvICtqaWRjdGZzdC5vYmogK2ppZGN0Zmx0Lm9iaiAramlkY3RpbnQub2JqICYgPj4kKFJGSUxFKQotCWVjaG8gK2pkc2FtcGxlLm9iaiAramRjb2xvci5vYmogK2pxdWFudDEub2JqICYgPj4kKFJGSUxFKQotCWVjaG8gK2pxdWFudDIub2JqICtqZG1lcmdlLm9iaiAramFyaWNvbS5vYmogK2pjb21hcGkub2JqICYgPj4kKFJGSUxFKQotCWVjaG8gK2p1dGlscy5vYmogK2plcnJvci5vYmogK2ptZW1tZ3Iub2JqICYgPj4kKFJGSUxFKQotCWVjaG8gJChTWVNERVBNRU1MSUIpIDsgPj4kKFJGSUxFKQotCi1janBlZy5leGU6ICQoQ09CSkVDVFMpIGxpYmpwZWcubGliCi0JZWNobyAkKENPQkpFQ1RTKSA+Y2pwZWcubHN0Ci0JbGluayAvU1RBQ0s6NDA5NiAvRVhFUEFDSyBAY2pwZWcubHN0LCBjanBlZy5leGUsICwgbGlianBlZy5saWIsIDsKLQlkZWwgY2pwZWcubHN0Ci0KLWRqcGVnLmV4ZTogJChET0JKRUNUUykgbGlianBlZy5saWIKLQllY2hvICQoRE9CSkVDVFMpID5kanBlZy5sc3QKLQlsaW5rIC9TVEFDSzo0MDk2IC9FWEVQQUNLIEBkanBlZy5sc3QsIGRqcGVnLmV4ZSwgLCBsaWJqcGVnLmxpYiwgOwotCWRlbCBkanBlZy5sc3QKLQotanBlZ3RyYW4uZXhlOiAkKFRST0JKRUNUUykgbGlianBlZy5saWIKLQlsaW5rIC9TVEFDSzo0MDk2IC9FWEVQQUNLICQoVFJPQkpFQ1RTKSwganBlZ3RyYW4uZXhlLCAsIGxpYmpwZWcubGliLCA7Ci0KLXJkanBnY29tLmV4ZTogcmRqcGdjb20uYwotCSQoQ0MpIC1BUyAtTyAtVzMgcmRqcGdjb20uYwotCi0jIHdyanBnY29tIG5lZWRzIGxhcmdlIG1vZGVsIHNvIGl0IGNhbiBtYWxsb2MgYSA2NEsgY2h1bmsKLXdyanBnY29tLmV4ZTogd3JqcGdjb20uYwotCSQoQ0MpIC1BTCAtTyAtVzMgd3JqcGdjb20uYwotCi1qY29uZmlnLmg6IGpjb25maWcudHh0Ci0JZWNobyBZb3UgbXVzdCBwcmVwYXJlIGEgc3lzdGVtLWRlcGVuZGVudCBqY29uZmlnLmggZmlsZS4KLQllY2hvIFBsZWFzZSByZWFkIHRoZSBpbnN0YWxsYXRpb24gZGlyZWN0aW9ucyBpbiBpbnN0YWxsLnR4dC4KLQlleGl0IDEKLQotY2xlYW46Ci0JZGVsICoub2JqCi0JZGVsIGxpYmpwZWcubGliCi0JZGVsIGNqcGVnLmV4ZQotCWRlbCBkanBlZy5leGUKLQlkZWwganBlZ3RyYW4uZXhlCi0JZGVsIHJkanBnY29tLmV4ZQotCWRlbCB3cmpwZ2NvbS5leGUKLQlkZWwgdGVzdG91dCouKgotCi10ZXN0OiBjanBlZy5leGUgZGpwZWcuZXhlIGpwZWd0cmFuLmV4ZQotCWRlbCB0ZXN0b3V0Ki4qCi0JZGpwZWcgLWRjdCBpbnQgLXBwbSAtb3V0ZmlsZSB0ZXN0b3V0LnBwbSAgdGVzdG9yaWcuanBnCi0JZGpwZWcgLWRjdCBpbnQgLWJtcCAtY29sb3JzIDI1NiAtb3V0ZmlsZSB0ZXN0b3V0LmJtcCAgdGVzdG9yaWcuanBnCi0JY2pwZWcgLWRjdCBpbnQgLW91dGZpbGUgdGVzdG91dC5qcGcgIHRlc3RpbWcucHBtCi0JZGpwZWcgLWRjdCBpbnQgLXBwbSAtb3V0ZmlsZSB0ZXN0b3V0cC5wcG0gdGVzdHByb2cuanBnCi0JY2pwZWcgLWRjdCBpbnQgLXByb2dyZXNzaXZlIC1vcHQgLW91dGZpbGUgdGVzdG91dHAuanBnIHRlc3RpbWcucHBtCi0JanBlZ3RyYW4gLW91dGZpbGUgdGVzdG91dHQuanBnIHRlc3Rwcm9nLmpwZwotCWZjIC9iIHRlc3RpbWcucHBtIHRlc3RvdXQucHBtCi0JZmMgL2IgdGVzdGltZy5ibXAgdGVzdG91dC5ibXAKLQlmYyAvYiB0ZXN0aW1nLmpwZyB0ZXN0b3V0LmpwZwotCWZjIC9iIHRlc3RpbWcucHBtIHRlc3RvdXRwLnBwbQotCWZjIC9iIHRlc3RpbWdwLmpwZyB0ZXN0b3V0cC5qcGcKLQlmYyAvYiB0ZXN0b3JpZy5qcGcgdGVzdG91dHQuanBnCi0KLQotamFyaWNvbS5vYmo6IGphcmljb20uYyBqaW5jbHVkZS5oIGpjb25maWcuaCBqcGVnbGliLmggam1vcmVjZmcuaCBqcGVnaW50LmggamVycm9yLmgKLWpjYXBpbWluLm9iajogamNhcGltaW4uYyBqaW5jbHVkZS5oIGpjb25maWcuaCBqcGVnbGliLmggam1vcmVjZmcuaCBqcGVnaW50LmggamVycm9yLmgKLWpjYXBpc3RkLm9iajogamNhcGlzdGQuYyBqaW5jbHVkZS5oIGpjb25maWcuaCBqcGVnbGliLmggam1vcmVjZmcuaCBqcGVnaW50LmggamVycm9yLmgKLWpjYXJpdGgub2JqOiBqY2FyaXRoLmMgamluY2x1ZGUuaCBqY29uZmlnLmgganBlZ2xpYi5oIGptb3JlY2ZnLmgganBlZ2ludC5oIGplcnJvci5oCi1qY2NvZWZjdC5vYmo6IGpjY29lZmN0LmMgamluY2x1ZGUuaCBqY29uZmlnLmgganBlZ2xpYi5oIGptb3JlY2ZnLmgganBlZ2ludC5oIGplcnJvci5oCi1qY2NvbG9yLm9iajogamNjb2xvci5jIGppbmNsdWRlLmggamNvbmZpZy5oIGpwZWdsaWIuaCBqbW9yZWNmZy5oIGpwZWdpbnQuaCBqZXJyb3IuaAotamNkY3RtZ3Iub2JqOiBqY2RjdG1nci5jIGppbmNsdWRlLmggamNvbmZpZy5oIGpwZWdsaWIuaCBqbW9yZWNmZy5oIGpwZWdpbnQuaCBqZXJyb3IuaCBqZGN0LmgKLWpjaHVmZi5vYmo6IGpjaHVmZi5jIGppbmNsdWRlLmggamNvbmZpZy5oIGpwZWdsaWIuaCBqbW9yZWNmZy5oIGpwZWdpbnQuaCBqZXJyb3IuaAotamNpbml0Lm9iajogamNpbml0LmMgamluY2x1ZGUuaCBqY29uZmlnLmgganBlZ2xpYi5oIGptb3JlY2ZnLmgganBlZ2ludC5oIGplcnJvci5oCi1qY21haW5jdC5vYmo6IGpjbWFpbmN0LmMgamluY2x1ZGUuaCBqY29uZmlnLmgganBlZ2xpYi5oIGptb3JlY2ZnLmgganBlZ2ludC5oIGplcnJvci5oCi1qY21hcmtlci5vYmo6IGpjbWFya2VyLmMgamluY2x1ZGUuaCBqY29uZmlnLmgganBlZ2xpYi5oIGptb3JlY2ZnLmgganBlZ2ludC5oIGplcnJvci5oCi1qY21hc3Rlci5vYmo6IGpjbWFzdGVyLmMgamluY2x1ZGUuaCBqY29uZmlnLmgganBlZ2xpYi5oIGptb3JlY2ZnLmgganBlZ2ludC5oIGplcnJvci5oCi1qY29tYXBpLm9iajogamNvbWFwaS5jIGppbmNsdWRlLmggamNvbmZpZy5oIGpwZWdsaWIuaCBqbW9yZWNmZy5oIGpwZWdpbnQuaCBqZXJyb3IuaAotamNwYXJhbS5vYmo6IGpjcGFyYW0uYyBqaW5jbHVkZS5oIGpjb25maWcuaCBqcGVnbGliLmggam1vcmVjZmcuaCBqcGVnaW50LmggamVycm9yLmgKLWpjcHJlcGN0Lm9iajogamNwcmVwY3QuYyBqaW5jbHVkZS5oIGpjb25maWcuaCBqcGVnbGliLmggam1vcmVjZmcuaCBqcGVnaW50LmggamVycm9yLmgKLWpjc2FtcGxlLm9iajogamNzYW1wbGUuYyBqaW5jbHVkZS5oIGpjb25maWcuaCBqcGVnbGliLmggam1vcmVjZmcuaCBqcGVnaW50LmggamVycm9yLmgKLWpjdHJhbnMub2JqOiBqY3RyYW5zLmMgamluY2x1ZGUuaCBqY29uZmlnLmgganBlZ2xpYi5oIGptb3JlY2ZnLmgganBlZ2ludC5oIGplcnJvci5oCi1qZGFwaW1pbi5vYmo6IGpkYXBpbWluLmMgamluY2x1ZGUuaCBqY29uZmlnLmgganBlZ2xpYi5oIGptb3JlY2ZnLmgganBlZ2ludC5oIGplcnJvci5oCi1qZGFwaXN0ZC5vYmo6IGpkYXBpc3RkLmMgamluY2x1ZGUuaCBqY29uZmlnLmgganBlZ2xpYi5oIGptb3JlY2ZnLmgganBlZ2ludC5oIGplcnJvci5oCi1qZGFyaXRoLm9iajogamRhcml0aC5jIGppbmNsdWRlLmggamNvbmZpZy5oIGpwZWdsaWIuaCBqbW9yZWNmZy5oIGpwZWdpbnQuaCBqZXJyb3IuaAotamRhdGFkc3Qub2JqOiBqZGF0YWRzdC5jIGppbmNsdWRlLmggamNvbmZpZy5oIGpwZWdsaWIuaCBqbW9yZWNmZy5oIGplcnJvci5oCi1qZGF0YXNyYy5vYmo6IGpkYXRhc3JjLmMgamluY2x1ZGUuaCBqY29uZmlnLmgganBlZ2xpYi5oIGptb3JlY2ZnLmggamVycm9yLmgKLWpkY29lZmN0Lm9iajogamRjb2VmY3QuYyBqaW5jbHVkZS5oIGpjb25maWcuaCBqcGVnbGliLmggam1vcmVjZmcuaCBqcGVnaW50LmggamVycm9yLmgKLWpkY29sb3Iub2JqOiBqZGNvbG9yLmMgamluY2x1ZGUuaCBqY29uZmlnLmgganBlZ2xpYi5oIGptb3JlY2ZnLmgganBlZ2ludC5oIGplcnJvci5oCi1qZGRjdG1nci5vYmo6IGpkZGN0bWdyLmMgamluY2x1ZGUuaCBqY29uZmlnLmgganBlZ2xpYi5oIGptb3JlY2ZnLmgganBlZ2ludC5oIGplcnJvci5oIGpkY3QuaAotamRodWZmLm9iajogamRodWZmLmMgamluY2x1ZGUuaCBqY29uZmlnLmgganBlZ2xpYi5oIGptb3JlY2ZnLmgganBlZ2ludC5oIGplcnJvci5oCi1qZGlucHV0Lm9iajogamRpbnB1dC5jIGppbmNsdWRlLmggamNvbmZpZy5oIGpwZWdsaWIuaCBqbW9yZWNmZy5oIGpwZWdpbnQuaCBqZXJyb3IuaAotamRtYWluY3Qub2JqOiBqZG1haW5jdC5jIGppbmNsdWRlLmggamNvbmZpZy5oIGpwZWdsaWIuaCBqbW9yZWNmZy5oIGpwZWdpbnQuaCBqZXJyb3IuaAotamRtYXJrZXIub2JqOiBqZG1hcmtlci5jIGppbmNsdWRlLmggamNvbmZpZy5oIGpwZWdsaWIuaCBqbW9yZWNmZy5oIGpwZWdpbnQuaCBqZXJyb3IuaAotamRtYXN0ZXIub2JqOiBqZG1hc3Rlci5jIGppbmNsdWRlLmggamNvbmZpZy5oIGpwZWdsaWIuaCBqbW9yZWNmZy5oIGpwZWdpbnQuaCBqZXJyb3IuaAotamRtZXJnZS5vYmo6IGpkbWVyZ2UuYyBqaW5jbHVkZS5oIGpjb25maWcuaCBqcGVnbGliLmggam1vcmVjZmcuaCBqcGVnaW50LmggamVycm9yLmgKLWpkcG9zdGN0Lm9iajogamRwb3N0Y3QuYyBqaW5jbHVkZS5oIGpjb25maWcuaCBqcGVnbGliLmggam1vcmVjZmcuaCBqcGVnaW50LmggamVycm9yLmgKLWpkc2FtcGxlLm9iajogamRzYW1wbGUuYyBqaW5jbHVkZS5oIGpjb25maWcuaCBqcGVnbGliLmggam1vcmVjZmcuaCBqcGVnaW50LmggamVycm9yLmgKLWpkdHJhbnMub2JqOiBqZHRyYW5zLmMgamluY2x1ZGUuaCBqY29uZmlnLmgganBlZ2xpYi5oIGptb3JlY2ZnLmgganBlZ2ludC5oIGplcnJvci5oCi1qZXJyb3Iub2JqOiBqZXJyb3IuYyBqaW5jbHVkZS5oIGpjb25maWcuaCBqcGVnbGliLmggam1vcmVjZmcuaCBqdmVyc2lvbi5oIGplcnJvci5oCi1qZmRjdGZsdC5vYmo6IGpmZGN0Zmx0LmMgamluY2x1ZGUuaCBqY29uZmlnLmgganBlZ2xpYi5oIGptb3JlY2ZnLmgganBlZ2ludC5oIGplcnJvci5oIGpkY3QuaAotamZkY3Rmc3Qub2JqOiBqZmRjdGZzdC5jIGppbmNsdWRlLmggamNvbmZpZy5oIGpwZWdsaWIuaCBqbW9yZWNmZy5oIGpwZWdpbnQuaCBqZXJyb3IuaCBqZGN0LmgKLWpmZGN0aW50Lm9iajogamZkY3RpbnQuYyBqaW5jbHVkZS5oIGpjb25maWcuaCBqcGVnbGliLmggam1vcmVjZmcuaCBqcGVnaW50LmggamVycm9yLmggamRjdC5oCi1qaWRjdGZsdC5vYmo6IGppZGN0Zmx0LmMgamluY2x1ZGUuaCBqY29uZmlnLmgganBlZ2xpYi5oIGptb3JlY2ZnLmgganBlZ2ludC5oIGplcnJvci5oIGpkY3QuaAotamlkY3Rmc3Qub2JqOiBqaWRjdGZzdC5jIGppbmNsdWRlLmggamNvbmZpZy5oIGpwZWdsaWIuaCBqbW9yZWNmZy5oIGpwZWdpbnQuaCBqZXJyb3IuaCBqZGN0LmgKLWppZGN0aW50Lm9iajogamlkY3RpbnQuYyBqaW5jbHVkZS5oIGpjb25maWcuaCBqcGVnbGliLmggam1vcmVjZmcuaCBqcGVnaW50LmggamVycm9yLmggamRjdC5oCi1qcXVhbnQxLm9iajoganF1YW50MS5jIGppbmNsdWRlLmggamNvbmZpZy5oIGpwZWdsaWIuaCBqbW9yZWNmZy5oIGpwZWdpbnQuaCBqZXJyb3IuaAotanF1YW50Mi5vYmo6IGpxdWFudDIuYyBqaW5jbHVkZS5oIGpjb25maWcuaCBqcGVnbGliLmggam1vcmVjZmcuaCBqcGVnaW50LmggamVycm9yLmgKLWp1dGlscy5vYmo6IGp1dGlscy5jIGppbmNsdWRlLmggamNvbmZpZy5oIGpwZWdsaWIuaCBqbW9yZWNmZy5oIGpwZWdpbnQuaCBqZXJyb3IuaAotam1lbW1nci5vYmo6IGptZW1tZ3IuYyBqaW5jbHVkZS5oIGpjb25maWcuaCBqcGVnbGliLmggam1vcmVjZmcuaCBqcGVnaW50LmggamVycm9yLmggam1lbXN5cy5oCi1qbWVtYW5zaS5vYmo6IGptZW1hbnNpLmMgamluY2x1ZGUuaCBqY29uZmlnLmgganBlZ2xpYi5oIGptb3JlY2ZnLmgganBlZ2ludC5oIGplcnJvci5oIGptZW1zeXMuaAotam1lbW5hbWUub2JqOiBqbWVtbmFtZS5jIGppbmNsdWRlLmggamNvbmZpZy5oIGpwZWdsaWIuaCBqbW9yZWNmZy5oIGpwZWdpbnQuaCBqZXJyb3IuaCBqbWVtc3lzLmgKLWptZW1ub2JzLm9iajogam1lbW5vYnMuYyBqaW5jbHVkZS5oIGpjb25maWcuaCBqcGVnbGliLmggam1vcmVjZmcuaCBqcGVnaW50LmggamVycm9yLmggam1lbXN5cy5oCi1qbWVtZG9zLm9iajogam1lbWRvcy5jIGppbmNsdWRlLmggamNvbmZpZy5oIGpwZWdsaWIuaCBqbW9yZWNmZy5oIGpwZWdpbnQuaCBqZXJyb3IuaCBqbWVtc3lzLmgKLWptZW1tYWMub2JqOiBqbWVtbWFjLmMgamluY2x1ZGUuaCBqY29uZmlnLmgganBlZ2xpYi5oIGptb3JlY2ZnLmgganBlZ2ludC5oIGplcnJvci5oIGptZW1zeXMuaAotY2pwZWcub2JqOiBjanBlZy5jIGNkanBlZy5oIGppbmNsdWRlLmggamNvbmZpZy5oIGpwZWdsaWIuaCBqbW9yZWNmZy5oIGplcnJvci5oIGNkZXJyb3IuaCBqdmVyc2lvbi5oCi1kanBlZy5vYmo6IGRqcGVnLmMgY2RqcGVnLmggamluY2x1ZGUuaCBqY29uZmlnLmgganBlZ2xpYi5oIGptb3JlY2ZnLmggamVycm9yLmggY2RlcnJvci5oIGp2ZXJzaW9uLmgKLWpwZWd0cmFuLm9iajoganBlZ3RyYW4uYyBjZGpwZWcuaCBqaW5jbHVkZS5oIGpjb25maWcuaCBqcGVnbGliLmggam1vcmVjZmcuaCBqZXJyb3IuaCBjZGVycm9yLmggdHJhbnN1cHAuaCBqdmVyc2lvbi5oCi1yZGpwZ2NvbS5vYmo6IHJkanBnY29tLmMgamluY2x1ZGUuaCBqY29uZmlnLmgKLXdyanBnY29tLm9iajogd3JqcGdjb20uYyBqaW5jbHVkZS5oIGpjb25maWcuaAotY2RqcGVnLm9iajogY2RqcGVnLmMgY2RqcGVnLmggamluY2x1ZGUuaCBqY29uZmlnLmgganBlZ2xpYi5oIGptb3JlY2ZnLmggamVycm9yLmggY2RlcnJvci5oCi1yZGNvbG1hcC5vYmo6IHJkY29sbWFwLmMgY2RqcGVnLmggamluY2x1ZGUuaCBqY29uZmlnLmgganBlZ2xpYi5oIGptb3JlY2ZnLmggamVycm9yLmggY2RlcnJvci5oCi1yZHN3aXRjaC5vYmo6IHJkc3dpdGNoLmMgY2RqcGVnLmggamluY2x1ZGUuaCBqY29uZmlnLmgganBlZ2xpYi5oIGptb3JlY2ZnLmggamVycm9yLmggY2RlcnJvci5oCi10cmFuc3VwcC5vYmo6IHRyYW5zdXBwLmMgamluY2x1ZGUuaCBqY29uZmlnLmgganBlZ2xpYi5oIGptb3JlY2ZnLmgganBlZ2ludC5oIGplcnJvci5oIHRyYW5zdXBwLmgKLXJkcHBtLm9iajogcmRwcG0uYyBjZGpwZWcuaCBqaW5jbHVkZS5oIGpjb25maWcuaCBqcGVnbGliLmggam1vcmVjZmcuaCBqZXJyb3IuaCBjZGVycm9yLmgKLXdycHBtLm9iajogd3JwcG0uYyBjZGpwZWcuaCBqaW5jbHVkZS5oIGpjb25maWcuaCBqcGVnbGliLmggam1vcmVjZmcuaCBqZXJyb3IuaCBjZGVycm9yLmgKLXJkZ2lmLm9iajogcmRnaWYuYyBjZGpwZWcuaCBqaW5jbHVkZS5oIGpjb25maWcuaCBqcGVnbGliLmggam1vcmVjZmcuaCBqZXJyb3IuaCBjZGVycm9yLmgKLXdyZ2lmLm9iajogd3JnaWYuYyBjZGpwZWcuaCBqaW5jbHVkZS5oIGpjb25maWcuaCBqcGVnbGliLmggam1vcmVjZmcuaCBqZXJyb3IuaCBjZGVycm9yLmgKLXJkdGFyZ2Eub2JqOiByZHRhcmdhLmMgY2RqcGVnLmggamluY2x1ZGUuaCBqY29uZmlnLmgganBlZ2xpYi5oIGptb3JlY2ZnLmggamVycm9yLmggY2RlcnJvci5oCi13cnRhcmdhLm9iajogd3J0YXJnYS5jIGNkanBlZy5oIGppbmNsdWRlLmggamNvbmZpZy5oIGpwZWdsaWIuaCBqbW9yZWNmZy5oIGplcnJvci5oIGNkZXJyb3IuaAotcmRibXAub2JqOiByZGJtcC5jIGNkanBlZy5oIGppbmNsdWRlLmggamNvbmZpZy5oIGpwZWdsaWIuaCBqbW9yZWNmZy5oIGplcnJvci5oIGNkZXJyb3IuaAotd3JibXAub2JqOiB3cmJtcC5jIGNkanBlZy5oIGppbmNsdWRlLmggamNvbmZpZy5oIGpwZWdsaWIuaCBqbW9yZWNmZy5oIGplcnJvci5oIGNkZXJyb3IuaAotcmRybGUub2JqOiByZHJsZS5jIGNkanBlZy5oIGppbmNsdWRlLmggamNvbmZpZy5oIGpwZWdsaWIuaCBqbW9yZWNmZy5oIGplcnJvci5oIGNkZXJyb3IuaAotd3JybGUub2JqOiB3cnJsZS5jIGNkanBlZy5oIGppbmNsdWRlLmggamNvbmZpZy5oIGpwZWdsaWIuaCBqbW9yZWNmZy5oIGplcnJvci5oIGNkZXJyb3IuaAotam1lbWRvc2Eub2JqIDogam1lbWRvc2EuYXNtCi0JbWFzbSAvbXggJCo7CmRpZmYgLS1naXQgYS9tYWtlZmlsZS5tbXMgYi9tYWtlZmlsZS5tbXMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDYwMTlkZmEuLjAwMDAwMDAKLS0tIGEvbWFrZWZpbGUubW1zCisrKyAvZGV2L251bGwKQEAgLTEsMjI1ICswLDAgQEAKLSMgTWFrZWZpbGUgZm9yIEluZGVwZW5kZW50IEpQRUcgR3JvdXAncyBzb2Z0d2FyZQotCi0jIFRoaXMgbWFrZWZpbGUgaXMgZm9yIHVzZSB3aXRoIE1NUyBvbiBEaWdpdGFsIFZNUyBzeXN0ZW1zLgotIyBUaGFua3MgdG8gUmljayBEeXNvbiAoZHlzb25AaW93YXNwLnBoeXNpY3MudWlvd2EuZWR1KQotIyBhbmQgVGltIEJlbGwgKHRiZWxsQG5ldGNvbS5jb20pIGZvciB0aGVpciBoZWxwLgotCi0jIFJlYWQgaW5zdGFsbGF0aW9uIGluc3RydWN0aW9ucyBiZWZvcmUgc2F5aW5nICJNTVMiICEhCi0KLSMgWW91IG1heSBuZWVkIHRvIGFkanVzdCB0aGVzZSBjYyBvcHRpb25zOgotQ0ZMQUdTPSAkKENGTEFHUykgL05vRGVidWcgL09wdGltaXplCi0jIEdlbmVyYWxseSwgd2UgcmVjb21tZW5kIGRlZmluaW5nIGFueSBjb25maWd1cmF0aW9uIHN5bWJvbHMgaW4gamNvbmZpZy5oLAotIyBOT1QgdmlhIC9EZWZpbmUgc3dpdGNoZXMgaGVyZS4KLS5pZmRlZiBBTFBIQQotT1BUPQotLmVsc2UKLU9QVD0gLFN5cyREaXNrOltdTUFLVk1TLk9QVC9PcHRpb24KLS5lbmRpZgotCi0jIFB1dCBoZXJlIHRoZSBvYmplY3QgZmlsZSBuYW1lIGZvciB0aGUgY29ycmVjdCBzeXN0ZW0tZGVwZW5kZW50IG1lbW9yeQotIyBtYW5hZ2VyIGZpbGUuICBGb3IgVW5peCB0aGlzIGlzIHVzdWFsbHkgam1lbW5vYnMubywgYnV0IHlvdSBtYXkgd2FudAotIyB0byB1c2Ugam1lbWFuc2kubyBvciBqbWVtbmFtZS5vIGlmIHlvdSBoYXZlIGxpbWl0ZWQgc3dhcCBzcGFjZS4KLVNZU0RFUE1FTT0gam1lbW5vYnMub2JqCi0KLSMgRW5kIG9mIGNvbmZpZ3VyYWJsZSBvcHRpb25zLgotCi0KLSMgc291cmNlIGZpbGVzOiBKUEVHIGxpYnJhcnkgcHJvcGVyCi1MSUJTT1VSQ0VTPSBqYXJpY29tLmMgamNhcGltaW4uYyBqY2FwaXN0ZC5jIGpjYXJpdGguYyBqY2NvZWZjdC5jIGpjY29sb3IuYyBcCi0gICAgICAgIGpjZGN0bWdyLmMgamNodWZmLmMgamNpbml0LmMgamNtYWluY3QuYyBqY21hcmtlci5jIGpjbWFzdGVyLmMgXAotICAgICAgICBqY29tYXBpLmMgamNwYXJhbS5jIGpjcHJlcGN0LmMgamNzYW1wbGUuYyBqY3RyYW5zLmMgamRhcGltaW4uYyBcCi0gICAgICAgIGpkYXBpc3RkLmMgamRhcml0aC5jIGpkYXRhZHN0LmMgamRhdGFzcmMuYyBqZGNvZWZjdC5jIGpkY29sb3IuYyBcCi0gICAgICAgIGpkZGN0bWdyLmMgamRodWZmLmMgamRpbnB1dC5jIGpkbWFpbmN0LmMgamRtYXJrZXIuYyBqZG1hc3Rlci5jIFwKLSAgICAgICAgamRtZXJnZS5jIGpkcG9zdGN0LmMgamRzYW1wbGUuYyBqZHRyYW5zLmMgamVycm9yLmMgamZkY3RmbHQuYyBcCi0gICAgICAgIGpmZGN0ZnN0LmMgamZkY3RpbnQuYyBqaWRjdGZsdC5jIGppZGN0ZnN0LmMgamlkY3RpbnQuYyBqcXVhbnQxLmMgXAotICAgICAgICBqcXVhbnQyLmMganV0aWxzLmMgam1lbW1nci5jCi0jIG1lbW1nciBiYWNrIGVuZHM6IGNvbXBpbGUgb25seSBvbmUgb2YgdGhlc2UgaW50byBhIHdvcmtpbmcgbGlicmFyeQotU1lTREVQU09VUkNFUz0gam1lbWFuc2kuYyBqbWVtbmFtZS5jIGptZW1ub2JzLmMgam1lbWRvcy5jIGptZW1tYWMuYwotIyBzb3VyY2UgZmlsZXM6IGNqcGVnL2RqcGVnL2pwZWd0cmFuIGFwcGxpY2F0aW9ucywgYWxzbyByZGpwZ2NvbS93cmpwZ2NvbQotQVBQU09VUkNFUz0gY2pwZWcuYyBkanBlZy5jIGpwZWd0cmFuLmMgcmRqcGdjb20uYyB3cmpwZ2NvbS5jIGNkanBlZy5jIFwKLSAgICAgICAgcmRjb2xtYXAuYyByZHN3aXRjaC5jIHRyYW5zdXBwLmMgcmRwcG0uYyB3cnBwbS5jIHJkZ2lmLmMgd3JnaWYuYyBcCi0gICAgICAgIHJkdGFyZ2EuYyB3cnRhcmdhLmMgcmRibXAuYyB3cmJtcC5jIHJkcmxlLmMgd3JybGUuYwotU09VUkNFUz0gJChMSUJTT1VSQ0VTKSAkKFNZU0RFUFNPVVJDRVMpICQoQVBQU09VUkNFUykKLSMgZmlsZXMgaW5jbHVkZWQgYnkgc291cmNlIGZpbGVzCi1JTkNMVURFUz0gamRjdC5oIGplcnJvci5oIGppbmNsdWRlLmggam1lbXN5cy5oIGptb3JlY2ZnLmgganBlZ2ludC5oIFwKLSAgICAgICAganBlZ2xpYi5oIGp2ZXJzaW9uLmggY2RqcGVnLmggY2RlcnJvci5oIHRyYW5zdXBwLmgKLSMgZG9jdW1lbnRhdGlvbiwgdGVzdCwgYW5kIHN1cHBvcnQgZmlsZXMKLURPQ1M9IFJFQURNRSBpbnN0YWxsLnR4dCB1c2FnZS50eHQgY2pwZWcuMSBkanBlZy4xIGpwZWd0cmFuLjEgcmRqcGdjb20uMSBcCi0gICAgICAgIHdyanBnY29tLjEgd2l6YXJkLnR4dCBleGFtcGxlLmMgbGlianBlZy50eHQgc3RydWN0dXJlLnR4dCBcCi0gICAgICAgIGNvZGVydWxlcy50eHQgZmlsZWxpc3QudHh0IGNoYW5nZS5sb2cKLU1LRklMRVM9IGNvbmZpZ3VyZSBNYWtlZmlsZS5pbiBtYWtlZmlsZS5hbnNpIG1ha2VmaWxlLnVuaXggbWFrZWZpbGUuYmNjIFwKLSAgICAgICAgbWFrZWZpbGUubWM2IG1ha2VmaWxlLmRqIG1ha2VmaWxlLndhdCBtYWtlZmlsZS52YyBtYWtlamRzdy52YzYgXAotICAgICAgICBtYWtlYWRzdy52YzYgbWFrZWpkZXAudmM2IG1ha2VqZHNwLnZjNiBtYWtlam1hay52YzYgbWFrZWNkZXAudmM2IFwKLSAgICAgICAgbWFrZWNkc3AudmM2IG1ha2VjbWFrLnZjNiBtYWtlZGRlcC52YzYgbWFrZWRkc3AudmM2IG1ha2VkbWFrLnZjNiBcCi0gICAgICAgIG1ha2V0ZGVwLnZjNiBtYWtldGRzcC52YzYgbWFrZXRtYWsudmM2IG1ha2VyZGVwLnZjNiBtYWtlcmRzcC52YzYgXAotICAgICAgICBtYWtlcm1hay52YzYgbWFrZXdkZXAudmM2IG1ha2V3ZHNwLnZjNiBtYWtld21hay52YzYgbWFrZWpzbG4udjEwIFwKLSAgICAgICAgbWFrZWFzbG4udjEwIG1ha2VqdmN4LnYxMCBtYWtlamZpbC52MTAgbWFrZWN2Y3gudjEwIG1ha2VjZmlsLnYxMCBcCi0gICAgICAgIG1ha2VkdmN4LnYxMCBtYWtlZGZpbC52MTAgbWFrZXR2Y3gudjEwIG1ha2V0ZmlsLnYxMCBtYWtlcnZjeC52MTAgXAotICAgICAgICBtYWtlcmZpbC52MTAgbWFrZXd2Y3gudjEwIG1ha2V3ZmlsLnYxMCBtYWtlcHJvai5tYWMgbWFrY2pwZWcuc3QgXAotICAgICAgICBtYWtkanBlZy5zdCBtYWtsanBlZy5zdCBtYWt0anBlZy5zdCBtYWtlZmlsZS5tYW54IG1ha2VmaWxlLnNhcyBcCi0gICAgICAgIG1ha2VmaWxlLm1tcyBtYWtlZmlsZS52bXMgbWFrdm1zLm9wdAotQ09ORklHRklMRVM9IGpjb25maWcuY2ZnIGpjb25maWcuYmNjIGpjb25maWcubWM2IGpjb25maWcuZGogamNvbmZpZy53YXQgXAotICAgICAgICBqY29uZmlnLnZjIGpjb25maWcubWFjIGpjb25maWcuc3QgamNvbmZpZy5tYW54IGpjb25maWcuc2FzIFwKLSAgICAgICAgamNvbmZpZy52bXMKLUNPTkZJR1VSRUZJTEVTPSBjb25maWcuZ3Vlc3MgY29uZmlnLnN1YiBpbnN0YWxsLXNoIGx0bWFpbi5zaCBkZXBjb21wIG1pc3NpbmcKLU9USEVSRklMRVM9IGpjb25maWcudHh0IGNrY29uZmlnLmMgYW5zaTJrbnIuYyBhbnNpMmtuci4xIGptZW1kb3NhLmFzbSBcCi0gICAgICAgIGxpYmpwZWcubWFwCi1URVNURklMRVM9IHRlc3RvcmlnLmpwZyB0ZXN0aW1nLnBwbSB0ZXN0aW1nLmJtcCB0ZXN0aW1nLmpwZyB0ZXN0cHJvZy5qcGcgXAotICAgICAgICB0ZXN0aW1ncC5qcGcKLURJU1RGSUxFUz0gJChET0NTKSAkKE1LRklMRVMpICQoQ09ORklHRklMRVMpICQoU09VUkNFUykgJChJTkNMVURFUykgXAotICAgICAgICAkKENPTkZJR1VSRUZJTEVTKSAkKE9USEVSRklMRVMpICQoVEVTVEZJTEVTKQotIyBsaWJyYXJ5IG9iamVjdCBmaWxlcyBjb21tb24gdG8gY29tcHJlc3Npb24gYW5kIGRlY29tcHJlc3Npb24KLUNPTU9CSkVDVFM9IGphcmljb20ub2JqIGpjb21hcGkub2JqIGp1dGlscy5vYmogamVycm9yLm9iaiBqbWVtbWdyLm9iaiAkKFNZU0RFUE1FTSkKLSMgY29tcHJlc3Npb24gbGlicmFyeSBvYmplY3QgZmlsZXMKLUNMSUJPQkpFQ1RTPSBqY2FwaW1pbi5vYmogamNhcGlzdGQub2JqIGpjYXJpdGgub2JqIGpjdHJhbnMub2JqIGpjcGFyYW0ub2JqIFwKLSAgICAgICAgamRhdGFkc3Qub2JqIGpjaW5pdC5vYmogamNtYXN0ZXIub2JqIGpjbWFya2VyLm9iaiBqY21haW5jdC5vYmogXAotICAgICAgICBqY3ByZXBjdC5vYmogamNjb2VmY3Qub2JqIGpjY29sb3Iub2JqIGpjc2FtcGxlLm9iaiBqY2h1ZmYub2JqIFwKLSAgICAgICAgamNkY3RtZ3Iub2JqIGpmZGN0ZnN0Lm9iaiBqZmRjdGZsdC5vYmogamZkY3RpbnQub2JqCi0jIGRlY29tcHJlc3Npb24gbGlicmFyeSBvYmplY3QgZmlsZXMKLURMSUJPQkpFQ1RTPSBqZGFwaW1pbi5vYmogamRhcGlzdGQub2JqIGpkYXJpdGgub2JqIGpkdHJhbnMub2JqIGpkYXRhc3JjLm9iaiBcCi0gICAgICAgIGpkbWFzdGVyLm9iaiBqZGlucHV0Lm9iaiBqZG1hcmtlci5vYmogamRodWZmLm9iaiBqZG1haW5jdC5vYmogXAotICAgICAgICBqZGNvZWZjdC5vYmogamRwb3N0Y3Qub2JqIGpkZGN0bWdyLm9iaiBqaWRjdGZzdC5vYmogamlkY3RmbHQub2JqIFwKLSAgICAgICAgamlkY3RpbnQub2JqIGpkc2FtcGxlLm9iaiBqZGNvbG9yLm9iaiBqcXVhbnQxLm9iaiBqcXVhbnQyLm9iaiBcCi0gICAgICAgIGpkbWVyZ2Uub2JqCi0jIFRoZXNlIG9iamVjdGZpbGVzIGFyZSBpbmNsdWRlZCBpbiBsaWJqcGVnLm9sYgotTElCT0JKRUNUUz0gJChDTElCT0JKRUNUUykgJChETElCT0JKRUNUUykgJChDT01PQkpFQ1RTKQotIyBvYmplY3QgZmlsZXMgZm9yIHNhbXBsZSBhcHBsaWNhdGlvbnMgKGV4Y2x1ZGluZyBsaWJyYXJ5IGZpbGVzKQotQ09CSkVDVFM9IGNqcGVnLm9iaiByZHBwbS5vYmogcmRnaWYub2JqIHJkdGFyZ2Eub2JqIHJkcmxlLm9iaiByZGJtcC5vYmogXAotICAgICAgICByZHN3aXRjaC5vYmogY2RqcGVnLm9iagotRE9CSkVDVFM9IGRqcGVnLm9iaiB3cnBwbS5vYmogd3JnaWYub2JqIHdydGFyZ2Eub2JqIHdycmxlLm9iaiB3cmJtcC5vYmogXAotICAgICAgICByZGNvbG1hcC5vYmogY2RqcGVnLm9iagotVFJPQkpFQ1RTPSBqcGVndHJhbi5vYmogcmRzd2l0Y2gub2JqIGNkanBlZy5vYmogdHJhbnN1cHAub2JqCi0jIG9iamVjdGZpbGUgbGlzdHMgd2l0aCBjb21tYXMgLS0tIHdoYXQgYSBjcm9jawotQ09CSkxJU1Q9IGNqcGVnLm9iaixyZHBwbS5vYmoscmRnaWYub2JqLHJkdGFyZ2Eub2JqLHJkcmxlLm9iaixyZGJtcC5vYmosXAotICAgICAgICAgIHJkc3dpdGNoLm9iaixjZGpwZWcub2JqCi1ET0JKTElTVD0gZGpwZWcub2JqLHdycHBtLm9iaix3cmdpZi5vYmosd3J0YXJnYS5vYmosd3JybGUub2JqLHdyYm1wLm9iaixcCi0gICAgICAgICAgcmRjb2xtYXAub2JqLGNkanBlZy5vYmoKLVRST0JKTElTVD0ganBlZ3RyYW4ub2JqLHJkc3dpdGNoLm9iaixjZGpwZWcub2JqLHRyYW5zdXBwLm9iagotTElCT0JKTElTVD0gamFyaWNvbS5vYmosamNhcGltaW4ub2JqLGpjYXBpc3RkLm9iaixqY2FyaXRoLm9iaixqY3RyYW5zLm9iaixcCi0gICAgICAgICAgamNwYXJhbS5vYmosamRhdGFkc3Qub2JqLGpjaW5pdC5vYmosamNtYXN0ZXIub2JqLGpjbWFya2VyLm9iaixcCi0gICAgICAgICAgamNtYWluY3Qub2JqLGpjcHJlcGN0Lm9iaixqY2NvZWZjdC5vYmosamNjb2xvci5vYmosamNzYW1wbGUub2JqLFwKLSAgICAgICAgICBqY2h1ZmYub2JqLGpjZGN0bWdyLm9iaixqZmRjdGZzdC5vYmosamZkY3RmbHQub2JqLGpmZGN0aW50Lm9iaixcCi0gICAgICAgICAgamRhcGltaW4ub2JqLGpkYXBpc3RkLm9iaixqZGFyaXRoLm9iaixqZHRyYW5zLm9iaixqZGF0YXNyYy5vYmosXAotICAgICAgICAgIGpkbWFzdGVyLm9iaixqZGlucHV0Lm9iaixqZG1hcmtlci5vYmosamRodWZmLm9iaixqZG1haW5jdC5vYmosXAotICAgICAgICAgIGpkY29lZmN0Lm9iaixqZHBvc3RjdC5vYmosamRkY3RtZ3Iub2JqLGppZGN0ZnN0Lm9iaixqaWRjdGZsdC5vYmosXAotICAgICAgICAgIGppZGN0aW50Lm9iaixqZHNhbXBsZS5vYmosamRjb2xvci5vYmosanF1YW50MS5vYmosanF1YW50Mi5vYmosXAotICAgICAgICAgIGpkbWVyZ2Uub2JqLGpjb21hcGkub2JqLGp1dGlscy5vYmosamVycm9yLm9iaixqbWVtbWdyLm9iaiwkKFNZU0RFUE1FTSkKLQotCi0uZmlyc3QKLQlALSBEZWZpbmUgL05vTG9nIFN5cyBTeXMkTGlicmFyeQotCi1BTEwgOiBsaWJqcGVnLm9sYiBjanBlZy5leGUgZGpwZWcuZXhlIGpwZWd0cmFuLmV4ZSByZGpwZ2NvbS5leGUgd3JqcGdjb20uZXhlCi0JQCBDb250aW51ZQotCi1saWJqcGVnLm9sYiA6ICQoTElCT0JKRUNUUykKLQlMaWJyYXJ5IC9DcmVhdGUgbGlianBlZy5vbGIgJChMSUJPQkpMSVNUKQotCi1janBlZy5leGUgOiAkKENPQkpFQ1RTKSBsaWJqcGVnLm9sYgotCSQoTElOSykgJChMRkxBR1MpIC9FeGVjdXRhYmxlID0gY2pwZWcuZXhlICQoQ09CSkxJU1QpLGxpYmpwZWcub2xiL0xpYnJhcnkkKE9QVCkKLQotZGpwZWcuZXhlIDogJChET0JKRUNUUykgbGlianBlZy5vbGIKLQkkKExJTkspICQoTEZMQUdTKSAvRXhlY3V0YWJsZSA9IGRqcGVnLmV4ZSAkKERPQkpMSVNUKSxsaWJqcGVnLm9sYi9MaWJyYXJ5JChPUFQpCi0KLWpwZWd0cmFuLmV4ZSA6ICQoVFJPQkpFQ1RTKSBsaWJqcGVnLm9sYgotCSQoTElOSykgJChMRkxBR1MpIC9FeGVjdXRhYmxlID0ganBlZ3RyYW4uZXhlICQoVFJPQkpMSVNUKSxsaWJqcGVnLm9sYi9MaWJyYXJ5JChPUFQpCi0KLXJkanBnY29tLmV4ZSA6IHJkanBnY29tLm9iagotCSQoTElOSykgJChMRkxBR1MpIC9FeGVjdXRhYmxlID0gcmRqcGdjb20uZXhlIHJkanBnY29tLm9iaiQoT1BUKQotCi13cmpwZ2NvbS5leGUgOiB3cmpwZ2NvbS5vYmoKLQkkKExJTkspICQoTEZMQUdTKSAvRXhlY3V0YWJsZSA9IHdyanBnY29tLmV4ZSB3cmpwZ2NvbS5vYmokKE9QVCkKLQotamNvbmZpZy5oIDogamNvbmZpZy52bXMKLQlALSBDb3B5IGpjb25maWcudm1zIGpjb25maWcuaAotCi1jbGVhbiA6Ci0JQC0gU2V0IFByb3RlY3Rpb24gPSBPd25lcjpSV0VEICouKjstMQotCUAtIFNldCBQcm90ZWN0aW9uID0gT3duZXI6UldFRCAqLk9CSgotCS0gUHVyZ2UgL05vTG9nIC9Ob0NvbmZpcm0gKi4qCi0JLSBEZWxldGUgL05vTG9nIC9Ob0NvbmZpcm0gKi5PQko7Ci0KLXRlc3QgOiBjanBlZy5leGUgZGpwZWcuZXhlIGpwZWd0cmFuLmV4ZQotCW1jciBzeXMkZGlzazpbXWRqcGVnIC1kY3QgaW50IC1wcG0gLW91dGZpbGUgdGVzdG91dC5wcG0gdGVzdG9yaWcuanBnCi0JbWNyIHN5cyRkaXNrOltdZGpwZWcgLWRjdCBpbnQgLWJtcCAtY29sb3JzIDI1NiAtb3V0ZmlsZSB0ZXN0b3V0LmJtcCB0ZXN0b3JpZy5qcGcKLQltY3Igc3lzJGRpc2s6W11janBlZyAtZGN0IGludCAgICAgIC1vdXRmaWxlIHRlc3RvdXQuanBnIHRlc3RpbWcucHBtCi0JbWNyIHN5cyRkaXNrOltdZGpwZWcgLWRjdCBpbnQgLXBwbSAtb3V0ZmlsZSB0ZXN0b3V0cC5wcG0gdGVzdHByb2cuanBnCi0JbWNyIHN5cyRkaXNrOltdY2pwZWcgLWRjdCBpbnQgLXByb2dyZXNzaXZlIC1vcHQgLW91dGZpbGUgdGVzdG91dHAuanBnIHRlc3RpbWcucHBtCi0JbWNyIHN5cyRkaXNrOltdanBlZ3RyYW4gLW91dGZpbGUgdGVzdG91dHQuanBnIHRlc3Rwcm9nLmpwZwotCS0gQmFja3VwIC9Db21wYXJlL0xvZwkgIHRlc3RpbWcucHBtIHRlc3RvdXQucHBtCi0JLSBCYWNrdXAgL0NvbXBhcmUvTG9nCSAgdGVzdGltZy5ibXAgdGVzdG91dC5ibXAKLQktIEJhY2t1cCAvQ29tcGFyZS9Mb2cJICB0ZXN0aW1nLmpwZyB0ZXN0b3V0LmpwZwotCS0gQmFja3VwIC9Db21wYXJlL0xvZwkgIHRlc3RpbWcucHBtIHRlc3RvdXRwLnBwbQotCS0gQmFja3VwIC9Db21wYXJlL0xvZwkgIHRlc3RpbWdwLmpwZyB0ZXN0b3V0cC5qcGcKLQktIEJhY2t1cCAvQ29tcGFyZS9Mb2cJICB0ZXN0b3JpZy5qcGcgdGVzdG91dHQuanBnCi0KLQotamFyaWNvbS5vYmogOiBqYXJpY29tLmMgamluY2x1ZGUuaCBqY29uZmlnLmgganBlZ2xpYi5oIGptb3JlY2ZnLmgganBlZ2ludC5oIGplcnJvci5oCi1qY2FwaW1pbi5vYmogOiBqY2FwaW1pbi5jIGppbmNsdWRlLmggamNvbmZpZy5oIGpwZWdsaWIuaCBqbW9yZWNmZy5oIGpwZWdpbnQuaCBqZXJyb3IuaAotamNhcGlzdGQub2JqIDogamNhcGlzdGQuYyBqaW5jbHVkZS5oIGpjb25maWcuaCBqcGVnbGliLmggam1vcmVjZmcuaCBqcGVnaW50LmggamVycm9yLmgKLWpjYXJpdGgub2JqIDogamNhcml0aC5jIGppbmNsdWRlLmggamNvbmZpZy5oIGpwZWdsaWIuaCBqbW9yZWNmZy5oIGpwZWdpbnQuaCBqZXJyb3IuaAotamNjb2VmY3Qub2JqIDogamNjb2VmY3QuYyBqaW5jbHVkZS5oIGpjb25maWcuaCBqcGVnbGliLmggam1vcmVjZmcuaCBqcGVnaW50LmggamVycm9yLmgKLWpjY29sb3Iub2JqIDogamNjb2xvci5jIGppbmNsdWRlLmggamNvbmZpZy5oIGpwZWdsaWIuaCBqbW9yZWNmZy5oIGpwZWdpbnQuaCBqZXJyb3IuaAotamNkY3RtZ3Iub2JqIDogamNkY3RtZ3IuYyBqaW5jbHVkZS5oIGpjb25maWcuaCBqcGVnbGliLmggam1vcmVjZmcuaCBqcGVnaW50LmggamVycm9yLmggamRjdC5oCi1qY2h1ZmYub2JqIDogamNodWZmLmMgamluY2x1ZGUuaCBqY29uZmlnLmgganBlZ2xpYi5oIGptb3JlY2ZnLmgganBlZ2ludC5oIGplcnJvci5oCi1qY2luaXQub2JqIDogamNpbml0LmMgamluY2x1ZGUuaCBqY29uZmlnLmgganBlZ2xpYi5oIGptb3JlY2ZnLmgganBlZ2ludC5oIGplcnJvci5oCi1qY21haW5jdC5vYmogOiBqY21haW5jdC5jIGppbmNsdWRlLmggamNvbmZpZy5oIGpwZWdsaWIuaCBqbW9yZWNmZy5oIGpwZWdpbnQuaCBqZXJyb3IuaAotamNtYXJrZXIub2JqIDogamNtYXJrZXIuYyBqaW5jbHVkZS5oIGpjb25maWcuaCBqcGVnbGliLmggam1vcmVjZmcuaCBqcGVnaW50LmggamVycm9yLmgKLWpjbWFzdGVyLm9iaiA6IGpjbWFzdGVyLmMgamluY2x1ZGUuaCBqY29uZmlnLmgganBlZ2xpYi5oIGptb3JlY2ZnLmgganBlZ2ludC5oIGplcnJvci5oCi1qY29tYXBpLm9iaiA6IGpjb21hcGkuYyBqaW5jbHVkZS5oIGpjb25maWcuaCBqcGVnbGliLmggam1vcmVjZmcuaCBqcGVnaW50LmggamVycm9yLmgKLWpjcGFyYW0ub2JqIDogamNwYXJhbS5jIGppbmNsdWRlLmggamNvbmZpZy5oIGpwZWdsaWIuaCBqbW9yZWNmZy5oIGpwZWdpbnQuaCBqZXJyb3IuaAotamNwcmVwY3Qub2JqIDogamNwcmVwY3QuYyBqaW5jbHVkZS5oIGpjb25maWcuaCBqcGVnbGliLmggam1vcmVjZmcuaCBqcGVnaW50LmggamVycm9yLmgKLWpjc2FtcGxlLm9iaiA6IGpjc2FtcGxlLmMgamluY2x1ZGUuaCBqY29uZmlnLmgganBlZ2xpYi5oIGptb3JlY2ZnLmgganBlZ2ludC5oIGplcnJvci5oCi1qY3RyYW5zLm9iaiA6IGpjdHJhbnMuYyBqaW5jbHVkZS5oIGpjb25maWcuaCBqcGVnbGliLmggam1vcmVjZmcuaCBqcGVnaW50LmggamVycm9yLmgKLWpkYXBpbWluLm9iaiA6IGpkYXBpbWluLmMgamluY2x1ZGUuaCBqY29uZmlnLmgganBlZ2xpYi5oIGptb3JlY2ZnLmgganBlZ2ludC5oIGplcnJvci5oCi1qZGFwaXN0ZC5vYmogOiBqZGFwaXN0ZC5jIGppbmNsdWRlLmggamNvbmZpZy5oIGpwZWdsaWIuaCBqbW9yZWNmZy5oIGpwZWdpbnQuaCBqZXJyb3IuaAotamRhcml0aC5vYmogOiBqZGFyaXRoLmMgamluY2x1ZGUuaCBqY29uZmlnLmgganBlZ2xpYi5oIGptb3JlY2ZnLmgganBlZ2ludC5oIGplcnJvci5oCi1qZGF0YWRzdC5vYmogOiBqZGF0YWRzdC5jIGppbmNsdWRlLmggamNvbmZpZy5oIGpwZWdsaWIuaCBqbW9yZWNmZy5oIGplcnJvci5oCi1qZGF0YXNyYy5vYmogOiBqZGF0YXNyYy5jIGppbmNsdWRlLmggamNvbmZpZy5oIGpwZWdsaWIuaCBqbW9yZWNmZy5oIGplcnJvci5oCi1qZGNvZWZjdC5vYmogOiBqZGNvZWZjdC5jIGppbmNsdWRlLmggamNvbmZpZy5oIGpwZWdsaWIuaCBqbW9yZWNmZy5oIGpwZWdpbnQuaCBqZXJyb3IuaAotamRjb2xvci5vYmogOiBqZGNvbG9yLmMgamluY2x1ZGUuaCBqY29uZmlnLmgganBlZ2xpYi5oIGptb3JlY2ZnLmgganBlZ2ludC5oIGplcnJvci5oCi1qZGRjdG1nci5vYmogOiBqZGRjdG1nci5jIGppbmNsdWRlLmggamNvbmZpZy5oIGpwZWdsaWIuaCBqbW9yZWNmZy5oIGpwZWdpbnQuaCBqZXJyb3IuaCBqZGN0LmgKLWpkaHVmZi5vYmogOiBqZGh1ZmYuYyBqaW5jbHVkZS5oIGpjb25maWcuaCBqcGVnbGliLmggam1vcmVjZmcuaCBqcGVnaW50LmggamVycm9yLmgKLWpkaW5wdXQub2JqIDogamRpbnB1dC5jIGppbmNsdWRlLmggamNvbmZpZy5oIGpwZWdsaWIuaCBqbW9yZWNmZy5oIGpwZWdpbnQuaCBqZXJyb3IuaAotamRtYWluY3Qub2JqIDogamRtYWluY3QuYyBqaW5jbHVkZS5oIGpjb25maWcuaCBqcGVnbGliLmggam1vcmVjZmcuaCBqcGVnaW50LmggamVycm9yLmgKLWpkbWFya2VyLm9iaiA6IGpkbWFya2VyLmMgamluY2x1ZGUuaCBqY29uZmlnLmgganBlZ2xpYi5oIGptb3JlY2ZnLmgganBlZ2ludC5oIGplcnJvci5oCi1qZG1hc3Rlci5vYmogOiBqZG1hc3Rlci5jIGppbmNsdWRlLmggamNvbmZpZy5oIGpwZWdsaWIuaCBqbW9yZWNmZy5oIGpwZWdpbnQuaCBqZXJyb3IuaAotamRtZXJnZS5vYmogOiBqZG1lcmdlLmMgamluY2x1ZGUuaCBqY29uZmlnLmgganBlZ2xpYi5oIGptb3JlY2ZnLmgganBlZ2ludC5oIGplcnJvci5oCi1qZHBvc3RjdC5vYmogOiBqZHBvc3RjdC5jIGppbmNsdWRlLmggamNvbmZpZy5oIGpwZWdsaWIuaCBqbW9yZWNmZy5oIGpwZWdpbnQuaCBqZXJyb3IuaAotamRzYW1wbGUub2JqIDogamRzYW1wbGUuYyBqaW5jbHVkZS5oIGpjb25maWcuaCBqcGVnbGliLmggam1vcmVjZmcuaCBqcGVnaW50LmggamVycm9yLmgKLWpkdHJhbnMub2JqIDogamR0cmFucy5jIGppbmNsdWRlLmggamNvbmZpZy5oIGpwZWdsaWIuaCBqbW9yZWNmZy5oIGpwZWdpbnQuaCBqZXJyb3IuaAotamVycm9yLm9iaiA6IGplcnJvci5jIGppbmNsdWRlLmggamNvbmZpZy5oIGpwZWdsaWIuaCBqbW9yZWNmZy5oIGp2ZXJzaW9uLmggamVycm9yLmgKLWpmZGN0Zmx0Lm9iaiA6IGpmZGN0Zmx0LmMgamluY2x1ZGUuaCBqY29uZmlnLmgganBlZ2xpYi5oIGptb3JlY2ZnLmgganBlZ2ludC5oIGplcnJvci5oIGpkY3QuaAotamZkY3Rmc3Qub2JqIDogamZkY3Rmc3QuYyBqaW5jbHVkZS5oIGpjb25maWcuaCBqcGVnbGliLmggam1vcmVjZmcuaCBqcGVnaW50LmggamVycm9yLmggamRjdC5oCi1qZmRjdGludC5vYmogOiBqZmRjdGludC5jIGppbmNsdWRlLmggamNvbmZpZy5oIGpwZWdsaWIuaCBqbW9yZWNmZy5oIGpwZWdpbnQuaCBqZXJyb3IuaCBqZGN0LmgKLWppZGN0Zmx0Lm9iaiA6IGppZGN0Zmx0LmMgamluY2x1ZGUuaCBqY29uZmlnLmgganBlZ2xpYi5oIGptb3JlY2ZnLmgganBlZ2ludC5oIGplcnJvci5oIGpkY3QuaAotamlkY3Rmc3Qub2JqIDogamlkY3Rmc3QuYyBqaW5jbHVkZS5oIGpjb25maWcuaCBqcGVnbGliLmggam1vcmVjZmcuaCBqcGVnaW50LmggamVycm9yLmggamRjdC5oCi1qaWRjdGludC5vYmogOiBqaWRjdGludC5jIGppbmNsdWRlLmggamNvbmZpZy5oIGpwZWdsaWIuaCBqbW9yZWNmZy5oIGpwZWdpbnQuaCBqZXJyb3IuaCBqZGN0LmgKLWpxdWFudDEub2JqIDoganF1YW50MS5jIGppbmNsdWRlLmggamNvbmZpZy5oIGpwZWdsaWIuaCBqbW9yZWNmZy5oIGpwZWdpbnQuaCBqZXJyb3IuaAotanF1YW50Mi5vYmogOiBqcXVhbnQyLmMgamluY2x1ZGUuaCBqY29uZmlnLmgganBlZ2xpYi5oIGptb3JlY2ZnLmgganBlZ2ludC5oIGplcnJvci5oCi1qdXRpbHMub2JqIDoganV0aWxzLmMgamluY2x1ZGUuaCBqY29uZmlnLmgganBlZ2xpYi5oIGptb3JlY2ZnLmgganBlZ2ludC5oIGplcnJvci5oCi1qbWVtbWdyLm9iaiA6IGptZW1tZ3IuYyBqaW5jbHVkZS5oIGpjb25maWcuaCBqcGVnbGliLmggam1vcmVjZmcuaCBqcGVnaW50LmggamVycm9yLmggam1lbXN5cy5oCi1qbWVtYW5zaS5vYmogOiBqbWVtYW5zaS5jIGppbmNsdWRlLmggamNvbmZpZy5oIGpwZWdsaWIuaCBqbW9yZWNmZy5oIGpwZWdpbnQuaCBqZXJyb3IuaCBqbWVtc3lzLmgKLWptZW1uYW1lLm9iaiA6IGptZW1uYW1lLmMgamluY2x1ZGUuaCBqY29uZmlnLmgganBlZ2xpYi5oIGptb3JlY2ZnLmgganBlZ2ludC5oIGplcnJvci5oIGptZW1zeXMuaAotam1lbW5vYnMub2JqIDogam1lbW5vYnMuYyBqaW5jbHVkZS5oIGpjb25maWcuaCBqcGVnbGliLmggam1vcmVjZmcuaCBqcGVnaW50LmggamVycm9yLmggam1lbXN5cy5oCi1qbWVtZG9zLm9iaiA6IGptZW1kb3MuYyBqaW5jbHVkZS5oIGpjb25maWcuaCBqcGVnbGliLmggam1vcmVjZmcuaCBqcGVnaW50LmggamVycm9yLmggam1lbXN5cy5oCi1qbWVtbWFjLm9iaiA6IGptZW1tYWMuYyBqaW5jbHVkZS5oIGpjb25maWcuaCBqcGVnbGliLmggam1vcmVjZmcuaCBqcGVnaW50LmggamVycm9yLmggam1lbXN5cy5oCi1janBlZy5vYmogOiBjanBlZy5jIGNkanBlZy5oIGppbmNsdWRlLmggamNvbmZpZy5oIGpwZWdsaWIuaCBqbW9yZWNmZy5oIGplcnJvci5oIGNkZXJyb3IuaCBqdmVyc2lvbi5oCi1kanBlZy5vYmogOiBkanBlZy5jIGNkanBlZy5oIGppbmNsdWRlLmggamNvbmZpZy5oIGpwZWdsaWIuaCBqbW9yZWNmZy5oIGplcnJvci5oIGNkZXJyb3IuaCBqdmVyc2lvbi5oCi1qcGVndHJhbi5vYmogOiBqcGVndHJhbi5jIGNkanBlZy5oIGppbmNsdWRlLmggamNvbmZpZy5oIGpwZWdsaWIuaCBqbW9yZWNmZy5oIGplcnJvci5oIGNkZXJyb3IuaCB0cmFuc3VwcC5oIGp2ZXJzaW9uLmgKLXJkanBnY29tLm9iaiA6IHJkanBnY29tLmMgamluY2x1ZGUuaCBqY29uZmlnLmgKLXdyanBnY29tLm9iaiA6IHdyanBnY29tLmMgamluY2x1ZGUuaCBqY29uZmlnLmgKLWNkanBlZy5vYmogOiBjZGpwZWcuYyBjZGpwZWcuaCBqaW5jbHVkZS5oIGpjb25maWcuaCBqcGVnbGliLmggam1vcmVjZmcuaCBqZXJyb3IuaCBjZGVycm9yLmgKLXJkY29sbWFwLm9iaiA6IHJkY29sbWFwLmMgY2RqcGVnLmggamluY2x1ZGUuaCBqY29uZmlnLmgganBlZ2xpYi5oIGptb3JlY2ZnLmggamVycm9yLmggY2RlcnJvci5oCi1yZHN3aXRjaC5vYmogOiByZHN3aXRjaC5jIGNkanBlZy5oIGppbmNsdWRlLmggamNvbmZpZy5oIGpwZWdsaWIuaCBqbW9yZWNmZy5oIGplcnJvci5oIGNkZXJyb3IuaAotdHJhbnN1cHAub2JqIDogdHJhbnN1cHAuYyBqaW5jbHVkZS5oIGpjb25maWcuaCBqcGVnbGliLmggam1vcmVjZmcuaCBqcGVnaW50LmggamVycm9yLmggdHJhbnN1cHAuaAotcmRwcG0ub2JqIDogcmRwcG0uYyBjZGpwZWcuaCBqaW5jbHVkZS5oIGpjb25maWcuaCBqcGVnbGliLmggam1vcmVjZmcuaCBqZXJyb3IuaCBjZGVycm9yLmgKLXdycHBtLm9iaiA6IHdycHBtLmMgY2RqcGVnLmggamluY2x1ZGUuaCBqY29uZmlnLmgganBlZ2xpYi5oIGptb3JlY2ZnLmggamVycm9yLmggY2RlcnJvci5oCi1yZGdpZi5vYmogOiByZGdpZi5jIGNkanBlZy5oIGppbmNsdWRlLmggamNvbmZpZy5oIGpwZWdsaWIuaCBqbW9yZWNmZy5oIGplcnJvci5oIGNkZXJyb3IuaAotd3JnaWYub2JqIDogd3JnaWYuYyBjZGpwZWcuaCBqaW5jbHVkZS5oIGpjb25maWcuaCBqcGVnbGliLmggam1vcmVjZmcuaCBqZXJyb3IuaCBjZGVycm9yLmgKLXJkdGFyZ2Eub2JqIDogcmR0YXJnYS5jIGNkanBlZy5oIGppbmNsdWRlLmggamNvbmZpZy5oIGpwZWdsaWIuaCBqbW9yZWNmZy5oIGplcnJvci5oIGNkZXJyb3IuaAotd3J0YXJnYS5vYmogOiB3cnRhcmdhLmMgY2RqcGVnLmggamluY2x1ZGUuaCBqY29uZmlnLmgganBlZ2xpYi5oIGptb3JlY2ZnLmggamVycm9yLmggY2RlcnJvci5oCi1yZGJtcC5vYmogOiByZGJtcC5jIGNkanBlZy5oIGppbmNsdWRlLmggamNvbmZpZy5oIGpwZWdsaWIuaCBqbW9yZWNmZy5oIGplcnJvci5oIGNkZXJyb3IuaAotd3JibXAub2JqIDogd3JibXAuYyBjZGpwZWcuaCBqaW5jbHVkZS5oIGpjb25maWcuaCBqcGVnbGliLmggam1vcmVjZmcuaCBqZXJyb3IuaCBjZGVycm9yLmgKLXJkcmxlLm9iaiA6IHJkcmxlLmMgY2RqcGVnLmggamluY2x1ZGUuaCBqY29uZmlnLmgganBlZ2xpYi5oIGptb3JlY2ZnLmggamVycm9yLmggY2RlcnJvci5oCi13cnJsZS5vYmogOiB3cnJsZS5jIGNkanBlZy5oIGppbmNsdWRlLmggamNvbmZpZy5oIGpwZWdsaWIuaCBqbW9yZWNmZy5oIGplcnJvci5oIGNkZXJyb3IuaApkaWZmIC0tZ2l0IGEvbWFrZWZpbGUuc2FzIGIvbWFrZWZpbGUuc2FzCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyNTJmOGZiLi4wMDAwMDAwCi0tLSBhL21ha2VmaWxlLnNhcworKysgL2Rldi9udWxsCkBAIC0xLDI1OSArMCwwIEBACi0jIE1ha2VmaWxlIGZvciBJbmRlcGVuZGVudCBKUEVHIEdyb3VwJ3Mgc29mdHdhcmUKLQotIyBUaGlzIG1ha2VmaWxlIGlzIGZvciBBbWlnYSBzeXN0ZW1zIHVzaW5nIFNBUyBDIDYuMCBhbmQgdXAuCi0jIFRoYW5rcyB0byBFZCBIYW53YXksIE1hcmsgUmluZnJldCwgYW5kIEppbSBaZXBlZGEuCi0KLSMgUmVhZCBpbnN0YWxsYXRpb24gaW5zdHJ1Y3Rpb25zIGJlZm9yZSBzYXlpbmcgIm1ha2UiICEhCi0KLSMgVGhlIG5hbWUgb2YgeW91ciBDIGNvbXBpbGVyOgotQ0M9IHNjCi0KLSMgWW91IG1heSBuZWVkIHRvIGFkanVzdCB0aGVzZSBjYyBvcHRpb25zOgotIyBVbmNvbW1lbnQgdGhlIGZvbGxvd2luZyBsaW5lcyBmb3IgZ2VuZXJpYyA2ODB4MCB2ZXJzaW9uCi1BUkNIRkxBR1M9IGNwdT1hbnkKLVNVRkZJWD0KLQotIyBVbmNvbW1lbnQgdGhlIGZvbGxvd2luZyBsaW5lcyBmb3IgNjgwMzAtb25seSB2ZXJzaW9uCi0jQVJDSEZMQUdTPSBjcHU9NjgwMzAKLSNTVUZGSVg9LjAzMAotCi1DRkxBR1M9IG5vc3RhY2tjaGVjayBkYXRhPW5lYXIgcGFybXM9cmVnaXN0ZXIgb3B0aW1pemUgJChBUkNIRkxBR1MpIFwKLQlpZ25vcmU9MTA0IGlnbm9yZT0zMDQgaWdub3JlPTMwNgotIyBpZ25vcmU9MTA0IGRpc2FibGVzIHdhcm5pbmdzIGZvciBtaXNtYXRjaGVkIGNvbnN0IHF1YWxpZmllcnMKLSMgaWdub3JlPTMwNCBkaXNhYmxlcyB3YXJuaW5ncyBmb3IgdmFyaWFibGVzIGJlaW5nIG9wdGltaXplZCBvdXQKLSMgaWdub3JlPTMwNiBkaXNhYmxlcyB3YXJuaW5ncyBmb3IgdGhlIGlubGluaW5nIG9mIGZ1bmN0aW9ucwotIyBHZW5lcmFsbHksIHdlIHJlY29tbWVuZCBkZWZpbmluZyBhbnkgY29uZmlndXJhdGlvbiBzeW1ib2xzIGluIGpjb25maWcuaCwKLSMgTk9UIHZpYSBkZWZpbmUgc3dpdGNoZXMgaGVyZS4KLQotIyBMaW5rLXRpbWUgY2Mgb3B0aW9uczoKLUxERkxBR1M9IFNDIFNEIE5EIEJBVENICi0KLSMgVG8gbGluayBhbnkgc3BlY2lhbCBsaWJyYXJpZXMsIGFkZCB0aGUgbmVjZXNzYXJ5IGNvbW1hbmRzIGhlcmUuCi1MRExJQlM9IExJQjpzY20ubGliIExJQjpzYy5saWIKLQotIyBQdXQgaGVyZSB0aGUgb2JqZWN0IGZpbGUgbmFtZSBmb3IgdGhlIGNvcnJlY3Qgc3lzdGVtLWRlcGVuZGVudCBtZW1vcnkKLSMgbWFuYWdlciBmaWxlLiAgRm9yIEFtaWdhIHdlIHJlY29tbWVuZCBqbWVtbmFtZS5vLgotU1lTREVQTUVNPSBqbWVtbmFtZS5vCi0KLSMgbWlzY2VsbGFuZW91cyBPUy1kZXBlbmRlbnQgc3R1ZmYKLSMgbGlua2VyCi1MTj0gc2xpbmsKLSMgZmlsZSBkZWxldGlvbiBjb21tYW5kCi1STT0gZGVsZXRlIHF1aWV0Ci0jIGxpYnJhcnkgKC5saWIpIGZpbGUgY3JlYXRpb24gY29tbWFuZAotQVI9IG9tbAotCi0jIEVuZCBvZiBjb25maWd1cmFibGUgb3B0aW9ucy4KLQotCi0jIHNvdXJjZSBmaWxlczogSlBFRyBsaWJyYXJ5IHByb3BlcgotTElCU09VUkNFUz0gamFyaWNvbS5jIGpjYXBpbWluLmMgamNhcGlzdGQuYyBqY2FyaXRoLmMgamNjb2VmY3QuYyBqY2NvbG9yLmMgXAotICAgICAgICBqY2RjdG1nci5jIGpjaHVmZi5jIGpjaW5pdC5jIGpjbWFpbmN0LmMgamNtYXJrZXIuYyBqY21hc3Rlci5jIFwKLSAgICAgICAgamNvbWFwaS5jIGpjcGFyYW0uYyBqY3ByZXBjdC5jIGpjc2FtcGxlLmMgamN0cmFucy5jIGpkYXBpbWluLmMgXAotICAgICAgICBqZGFwaXN0ZC5jIGpkYXJpdGguYyBqZGF0YWRzdC5jIGpkYXRhc3JjLmMgamRjb2VmY3QuYyBqZGNvbG9yLmMgXAotICAgICAgICBqZGRjdG1nci5jIGpkaHVmZi5jIGpkaW5wdXQuYyBqZG1haW5jdC5jIGpkbWFya2VyLmMgamRtYXN0ZXIuYyBcCi0gICAgICAgIGpkbWVyZ2UuYyBqZHBvc3RjdC5jIGpkc2FtcGxlLmMgamR0cmFucy5jIGplcnJvci5jIGpmZGN0Zmx0LmMgXAotICAgICAgICBqZmRjdGZzdC5jIGpmZGN0aW50LmMgamlkY3RmbHQuYyBqaWRjdGZzdC5jIGppZGN0aW50LmMganF1YW50MS5jIFwKLSAgICAgICAganF1YW50Mi5jIGp1dGlscy5jIGptZW1tZ3IuYwotIyBtZW1tZ3IgYmFjayBlbmRzOiBjb21waWxlIG9ubHkgb25lIG9mIHRoZXNlIGludG8gYSB3b3JraW5nIGxpYnJhcnkKLVNZU0RFUFNPVVJDRVM9IGptZW1hbnNpLmMgam1lbW5hbWUuYyBqbWVtbm9icy5jIGptZW1kb3MuYyBqbWVtbWFjLmMKLSMgc291cmNlIGZpbGVzOiBjanBlZy9kanBlZy9qcGVndHJhbiBhcHBsaWNhdGlvbnMsIGFsc28gcmRqcGdjb20vd3JqcGdjb20KLUFQUFNPVVJDRVM9IGNqcGVnLmMgZGpwZWcuYyBqcGVndHJhbi5jIHJkanBnY29tLmMgd3JqcGdjb20uYyBjZGpwZWcuYyBcCi0gICAgICAgIHJkY29sbWFwLmMgcmRzd2l0Y2guYyB0cmFuc3VwcC5jIHJkcHBtLmMgd3JwcG0uYyByZGdpZi5jIHdyZ2lmLmMgXAotICAgICAgICByZHRhcmdhLmMgd3J0YXJnYS5jIHJkYm1wLmMgd3JibXAuYyByZHJsZS5jIHdycmxlLmMKLVNPVVJDRVM9ICQoTElCU09VUkNFUykgJChTWVNERVBTT1VSQ0VTKSAkKEFQUFNPVVJDRVMpCi0jIGZpbGVzIGluY2x1ZGVkIGJ5IHNvdXJjZSBmaWxlcwotSU5DTFVERVM9IGpkY3QuaCBqZXJyb3IuaCBqaW5jbHVkZS5oIGptZW1zeXMuaCBqbW9yZWNmZy5oIGpwZWdpbnQuaCBcCi0gICAgICAgIGpwZWdsaWIuaCBqdmVyc2lvbi5oIGNkanBlZy5oIGNkZXJyb3IuaCB0cmFuc3VwcC5oCi0jIGRvY3VtZW50YXRpb24sIHRlc3QsIGFuZCBzdXBwb3J0IGZpbGVzCi1ET0NTPSBSRUFETUUgaW5zdGFsbC50eHQgdXNhZ2UudHh0IGNqcGVnLjEgZGpwZWcuMSBqcGVndHJhbi4xIHJkanBnY29tLjEgXAotICAgICAgICB3cmpwZ2NvbS4xIHdpemFyZC50eHQgZXhhbXBsZS5jIGxpYmpwZWcudHh0IHN0cnVjdHVyZS50eHQgXAotICAgICAgICBjb2RlcnVsZXMudHh0IGZpbGVsaXN0LnR4dCBjaGFuZ2UubG9nCi1NS0ZJTEVTPSBjb25maWd1cmUgTWFrZWZpbGUuaW4gbWFrZWZpbGUuYW5zaSBtYWtlZmlsZS51bml4IG1ha2VmaWxlLmJjYyBcCi0gICAgICAgIG1ha2VmaWxlLm1jNiBtYWtlZmlsZS5kaiBtYWtlZmlsZS53YXQgbWFrZWZpbGUudmMgbWFrZWpkc3cudmM2IFwKLSAgICAgICAgbWFrZWFkc3cudmM2IG1ha2VqZGVwLnZjNiBtYWtlamRzcC52YzYgbWFrZWptYWsudmM2IG1ha2VjZGVwLnZjNiBcCi0gICAgICAgIG1ha2VjZHNwLnZjNiBtYWtlY21hay52YzYgbWFrZWRkZXAudmM2IG1ha2VkZHNwLnZjNiBtYWtlZG1hay52YzYgXAotICAgICAgICBtYWtldGRlcC52YzYgbWFrZXRkc3AudmM2IG1ha2V0bWFrLnZjNiBtYWtlcmRlcC52YzYgbWFrZXJkc3AudmM2IFwKLSAgICAgICAgbWFrZXJtYWsudmM2IG1ha2V3ZGVwLnZjNiBtYWtld2RzcC52YzYgbWFrZXdtYWsudmM2IG1ha2Vqc2xuLnYxMCBcCi0gICAgICAgIG1ha2Vhc2xuLnYxMCBtYWtlanZjeC52MTAgbWFrZWpmaWwudjEwIG1ha2VjdmN4LnYxMCBtYWtlY2ZpbC52MTAgXAotICAgICAgICBtYWtlZHZjeC52MTAgbWFrZWRmaWwudjEwIG1ha2V0dmN4LnYxMCBtYWtldGZpbC52MTAgbWFrZXJ2Y3gudjEwIFwKLSAgICAgICAgbWFrZXJmaWwudjEwIG1ha2V3dmN4LnYxMCBtYWtld2ZpbC52MTAgbWFrZXByb2oubWFjIG1ha2NqcGVnLnN0IFwKLSAgICAgICAgbWFrZGpwZWcuc3QgbWFrbGpwZWcuc3QgbWFrdGpwZWcuc3QgbWFrZWZpbGUubWFueCBtYWtlZmlsZS5zYXMgXAotICAgICAgICBtYWtlZmlsZS5tbXMgbWFrZWZpbGUudm1zIG1ha3Ztcy5vcHQKLUNPTkZJR0ZJTEVTPSBqY29uZmlnLmNmZyBqY29uZmlnLmJjYyBqY29uZmlnLm1jNiBqY29uZmlnLmRqIGpjb25maWcud2F0IFwKLSAgICAgICAgamNvbmZpZy52YyBqY29uZmlnLm1hYyBqY29uZmlnLnN0IGpjb25maWcubWFueCBqY29uZmlnLnNhcyBcCi0gICAgICAgIGpjb25maWcudm1zCi1DT05GSUdVUkVGSUxFUz0gY29uZmlnLmd1ZXNzIGNvbmZpZy5zdWIgaW5zdGFsbC1zaCBsdG1haW4uc2ggZGVwY29tcCBtaXNzaW5nCi1PVEhFUkZJTEVTPSBqY29uZmlnLnR4dCBja2NvbmZpZy5jIGFuc2kya25yLmMgYW5zaTJrbnIuMSBqbWVtZG9zYS5hc20gXAotICAgICAgICBsaWJqcGVnLm1hcAotVEVTVEZJTEVTPSB0ZXN0b3JpZy5qcGcgdGVzdGltZy5wcG0gdGVzdGltZy5ibXAgdGVzdGltZy5qcGcgdGVzdHByb2cuanBnIFwKLSAgICAgICAgdGVzdGltZ3AuanBnCi1ESVNURklMRVM9ICQoRE9DUykgJChNS0ZJTEVTKSAkKENPTkZJR0ZJTEVTKSAkKFNPVVJDRVMpICQoSU5DTFVERVMpIFwKLSAgICAgICAgJChDT05GSUdVUkVGSUxFUykgJChPVEhFUkZJTEVTKSAkKFRFU1RGSUxFUykKLSMgbGlicmFyeSBvYmplY3QgZmlsZXMgY29tbW9uIHRvIGNvbXByZXNzaW9uIGFuZCBkZWNvbXByZXNzaW9uCi1DT01PQkpFQ1RTPSBqYXJpY29tLm8gamNvbWFwaS5vIGp1dGlscy5vIGplcnJvci5vIGptZW1tZ3IubyAkKFNZU0RFUE1FTSkKLSMgY29tcHJlc3Npb24gbGlicmFyeSBvYmplY3QgZmlsZXMKLUNMSUJPQkpFQ1RTPSBqY2FwaW1pbi5vIGpjYXBpc3RkLm8gamNhcml0aC5vIGpjdHJhbnMubyBqY3BhcmFtLm8gXAotICAgICAgICBqZGF0YWRzdC5vIGpjaW5pdC5vIGpjbWFzdGVyLm8gamNtYXJrZXIubyBqY21haW5jdC5vIGpjcHJlcGN0Lm8gXAotICAgICAgICBqY2NvZWZjdC5vIGpjY29sb3IubyBqY3NhbXBsZS5vIGpjaHVmZi5vIGpjZGN0bWdyLm8gamZkY3Rmc3QubyBcCi0gICAgICAgIGpmZGN0Zmx0Lm8gamZkY3RpbnQubwotIyBkZWNvbXByZXNzaW9uIGxpYnJhcnkgb2JqZWN0IGZpbGVzCi1ETElCT0JKRUNUUz0gamRhcGltaW4ubyBqZGFwaXN0ZC5vIGpkYXJpdGgubyBqZHRyYW5zLm8gamRhdGFzcmMubyBcCi0gICAgICAgIGpkbWFzdGVyLm8gamRpbnB1dC5vIGpkbWFya2VyLm8gamRodWZmLm8gamRtYWluY3QubyBcCi0gICAgICAgIGpkY29lZmN0Lm8gamRwb3N0Y3QubyBqZGRjdG1nci5vIGppZGN0ZnN0Lm8gamlkY3RmbHQubyBcCi0gICAgICAgIGppZGN0aW50Lm8gamRzYW1wbGUubyBqZGNvbG9yLm8ganF1YW50MS5vIGpxdWFudDIubyBqZG1lcmdlLm8KLSMgVGhlc2Ugb2JqZWN0ZmlsZXMgYXJlIGluY2x1ZGVkIGluIGxpYmpwZWcubGliCi1MSUJPQkpFQ1RTPSAkKENMSUJPQkpFQ1RTKSAkKERMSUJPQkpFQ1RTKSAkKENPTU9CSkVDVFMpCi0jIG9iamVjdCBmaWxlcyBmb3Igc2FtcGxlIGFwcGxpY2F0aW9ucyAoZXhjbHVkaW5nIGxpYnJhcnkgZmlsZXMpCi1DT0JKRUNUUz0gY2pwZWcubyByZHBwbS5vIHJkZ2lmLm8gcmR0YXJnYS5vIHJkcmxlLm8gcmRibXAubyByZHN3aXRjaC5vIFwKLSAgICAgICAgY2RqcGVnLm8KLURPQkpFQ1RTPSBkanBlZy5vIHdycHBtLm8gd3JnaWYubyB3cnRhcmdhLm8gd3JybGUubyB3cmJtcC5vIHJkY29sbWFwLm8gXAotICAgICAgICBjZGpwZWcubwotVFJPQkpFQ1RTPSBqcGVndHJhbi5vIHJkc3dpdGNoLm8gY2RqcGVnLm8gdHJhbnN1cHAubwotCi0KLWFsbDogbGlianBlZy5saWIgY2pwZWckKFNVRkZJWCkgZGpwZWckKFNVRkZJWCkganBlZ3RyYW4kKFNVRkZJWCkgcmRqcGdjb20kKFNVRkZJWCkgd3JqcGdjb20kKFNVRkZJWCkKLQotIyBub3RlOiBkbyBzZXZlcmFsIEFSIHN0ZXBzIHRvIGF2b2lkIGNvbW1hbmQgbGluZSBsZW5ndGggbGltaXRhdGlvbnMKLQotbGlianBlZy5saWI6ICQoTElCT0JKRUNUUykKLQktJChSTSkgbGlianBlZy5saWIKLQkkKEFSKSBsaWJqcGVnLmxpYiByICQoQ0xJQk9CSkVDVFMpCi0JJChBUikgbGlianBlZy5saWIgciAkKERMSUJPQkpFQ1RTKQotCSQoQVIpIGxpYmpwZWcubGliIHIgJChDT01PQkpFQ1RTKQotCi1janBlZyQoU1VGRklYKTogJChDT0JKRUNUUykgbGlianBlZy5saWIKLQkkKExOKSA8V0lUSCA8Ci0kKExERkxBR1MpCi1UTyBjanBlZyQoU1VGRklYKQotRlJPTSBMSUI6Yy5vICQoQ09CSkVDVFMpCi1MSUIgbGlianBlZy5saWIgJChMRExJQlMpCi08Ci0KLWRqcGVnJChTVUZGSVgpOiAkKERPQkpFQ1RTKSBsaWJqcGVnLmxpYgotCSQoTE4pIDxXSVRIIDwKLSQoTERGTEFHUykKLVRPIGRqcGVnJChTVUZGSVgpCi1GUk9NIExJQjpjLm8gJChET0JKRUNUUykKLUxJQiBsaWJqcGVnLmxpYiAkKExETElCUykKLTwKLQotanBlZ3RyYW4kKFNVRkZJWCk6ICQoVFJPQkpFQ1RTKSBsaWJqcGVnLmxpYgotCSQoTE4pIDxXSVRIIDwKLSQoTERGTEFHUykKLVRPIGpwZWd0cmFuJChTVUZGSVgpCi1GUk9NIExJQjpjLm8gJChUUk9CSkVDVFMpCi1MSUIgbGlianBlZy5saWIgJChMRExJQlMpCi08Ci0KLXJkanBnY29tJChTVUZGSVgpOiByZGpwZ2NvbS5vCi0JJChMTikgPFdJVEggPAotJChMREZMQUdTKQotVE8gcmRqcGdjb20kKFNVRkZJWCkKLUZST00gTElCOmMubyByZGpwZ2NvbS5vCi1MSUIgJChMRExJQlMpCi08Ci0KLXdyanBnY29tJChTVUZGSVgpOiB3cmpwZ2NvbS5vCi0JJChMTikgPFdJVEggPAotJChMREZMQUdTKQotVE8gd3JqcGdjb20kKFNVRkZJWCkKLUZST00gTElCOmMubyB3cmpwZ2NvbS5vCi1MSUIgJChMRExJQlMpCi08Ci0KLWpjb25maWcuaDogamNvbmZpZy50eHQKLQllY2hvIFlvdSBtdXN0IHByZXBhcmUgYSBzeXN0ZW0tZGVwZW5kZW50IGpjb25maWcuaCBmaWxlLgotCWVjaG8gUGxlYXNlIHJlYWQgdGhlIGluc3RhbGxhdGlvbiBkaXJlY3Rpb25zIGluIGluc3RhbGwudHh0LgotCWV4aXQgMQotCi1jbGVhbjoKLQktJChSTSkgKi5vIGNqcGVnIGRqcGVnIGpwZWd0cmFuIGNqcGVnLjAzMCBkanBlZy4wMzAganBlZ3RyYW4uMDMwCi0JLSQoUk0pIHJkanBnY29tIHdyanBnY29tIHJkanBnY29tLjAzMCB3cmpwZ2NvbS4wMzAKLQktJChSTSkgbGlianBlZy5saWIgY29yZSB0ZXN0b3V0Ki4qCi0KLXRlc3Q6IGNqcGVnIGRqcGVnIGpwZWd0cmFuCi0JLSQoUk0pIHRlc3RvdXQqLioKLQlkanBlZyAtZGN0IGludCAtcHBtIC1vdXRmaWxlIHRlc3RvdXQucHBtICB0ZXN0b3JpZy5qcGcKLQlkanBlZyAtZGN0IGludCAtYm1wIC1jb2xvcnMgMjU2IC1vdXRmaWxlIHRlc3RvdXQuYm1wICB0ZXN0b3JpZy5qcGcKLQljanBlZyAtZGN0IGludCAtb3V0ZmlsZSB0ZXN0b3V0LmpwZyAgdGVzdGltZy5wcG0KLQlkanBlZyAtZGN0IGludCAtcHBtIC1vdXRmaWxlIHRlc3RvdXRwLnBwbSB0ZXN0cHJvZy5qcGcKLQljanBlZyAtZGN0IGludCAtcHJvZ3Jlc3NpdmUgLW9wdCAtb3V0ZmlsZSB0ZXN0b3V0cC5qcGcgdGVzdGltZy5wcG0KLQlqcGVndHJhbiAtb3V0ZmlsZSB0ZXN0b3V0dC5qcGcgdGVzdHByb2cuanBnCi0JY21wIHRlc3RpbWcucHBtIHRlc3RvdXQucHBtCi0JY21wIHRlc3RpbWcuYm1wIHRlc3RvdXQuYm1wCi0JY21wIHRlc3RpbWcuanBnIHRlc3RvdXQuanBnCi0JY21wIHRlc3RpbWcucHBtIHRlc3RvdXRwLnBwbQotCWNtcCB0ZXN0aW1ncC5qcGcgdGVzdG91dHAuanBnCi0JY21wIHRlc3RvcmlnLmpwZyB0ZXN0b3V0dC5qcGcKLQotCi1qYXJpY29tLm86IGphcmljb20uYyBqaW5jbHVkZS5oIGpjb25maWcuaCBqcGVnbGliLmggam1vcmVjZmcuaCBqcGVnaW50LmggamVycm9yLmgKLWpjYXBpbWluLm86IGpjYXBpbWluLmMgamluY2x1ZGUuaCBqY29uZmlnLmgganBlZ2xpYi5oIGptb3JlY2ZnLmgganBlZ2ludC5oIGplcnJvci5oCi1qY2FwaXN0ZC5vOiBqY2FwaXN0ZC5jIGppbmNsdWRlLmggamNvbmZpZy5oIGpwZWdsaWIuaCBqbW9yZWNmZy5oIGpwZWdpbnQuaCBqZXJyb3IuaAotamNhcml0aC5vOiBqY2FyaXRoLmMgamluY2x1ZGUuaCBqY29uZmlnLmgganBlZ2xpYi5oIGptb3JlY2ZnLmgganBlZ2ludC5oIGplcnJvci5oCi1qY2NvZWZjdC5vOiBqY2NvZWZjdC5jIGppbmNsdWRlLmggamNvbmZpZy5oIGpwZWdsaWIuaCBqbW9yZWNmZy5oIGpwZWdpbnQuaCBqZXJyb3IuaAotamNjb2xvci5vOiBqY2NvbG9yLmMgamluY2x1ZGUuaCBqY29uZmlnLmgganBlZ2xpYi5oIGptb3JlY2ZnLmgganBlZ2ludC5oIGplcnJvci5oCi1qY2RjdG1nci5vOiBqY2RjdG1nci5jIGppbmNsdWRlLmggamNvbmZpZy5oIGpwZWdsaWIuaCBqbW9yZWNmZy5oIGpwZWdpbnQuaCBqZXJyb3IuaCBqZGN0LmgKLWpjaHVmZi5vOiBqY2h1ZmYuYyBqaW5jbHVkZS5oIGpjb25maWcuaCBqcGVnbGliLmggam1vcmVjZmcuaCBqcGVnaW50LmggamVycm9yLmgKLWpjaW5pdC5vOiBqY2luaXQuYyBqaW5jbHVkZS5oIGpjb25maWcuaCBqcGVnbGliLmggam1vcmVjZmcuaCBqcGVnaW50LmggamVycm9yLmgKLWpjbWFpbmN0Lm86IGpjbWFpbmN0LmMgamluY2x1ZGUuaCBqY29uZmlnLmgganBlZ2xpYi5oIGptb3JlY2ZnLmgganBlZ2ludC5oIGplcnJvci5oCi1qY21hcmtlci5vOiBqY21hcmtlci5jIGppbmNsdWRlLmggamNvbmZpZy5oIGpwZWdsaWIuaCBqbW9yZWNmZy5oIGpwZWdpbnQuaCBqZXJyb3IuaAotamNtYXN0ZXIubzogamNtYXN0ZXIuYyBqaW5jbHVkZS5oIGpjb25maWcuaCBqcGVnbGliLmggam1vcmVjZmcuaCBqcGVnaW50LmggamVycm9yLmgKLWpjb21hcGkubzogamNvbWFwaS5jIGppbmNsdWRlLmggamNvbmZpZy5oIGpwZWdsaWIuaCBqbW9yZWNmZy5oIGpwZWdpbnQuaCBqZXJyb3IuaAotamNwYXJhbS5vOiBqY3BhcmFtLmMgamluY2x1ZGUuaCBqY29uZmlnLmgganBlZ2xpYi5oIGptb3JlY2ZnLmgganBlZ2ludC5oIGplcnJvci5oCi1qY3ByZXBjdC5vOiBqY3ByZXBjdC5jIGppbmNsdWRlLmggamNvbmZpZy5oIGpwZWdsaWIuaCBqbW9yZWNmZy5oIGpwZWdpbnQuaCBqZXJyb3IuaAotamNzYW1wbGUubzogamNzYW1wbGUuYyBqaW5jbHVkZS5oIGpjb25maWcuaCBqcGVnbGliLmggam1vcmVjZmcuaCBqcGVnaW50LmggamVycm9yLmgKLWpjdHJhbnMubzogamN0cmFucy5jIGppbmNsdWRlLmggamNvbmZpZy5oIGpwZWdsaWIuaCBqbW9yZWNmZy5oIGpwZWdpbnQuaCBqZXJyb3IuaAotamRhcGltaW4ubzogamRhcGltaW4uYyBqaW5jbHVkZS5oIGpjb25maWcuaCBqcGVnbGliLmggam1vcmVjZmcuaCBqcGVnaW50LmggamVycm9yLmgKLWpkYXBpc3RkLm86IGpkYXBpc3RkLmMgamluY2x1ZGUuaCBqY29uZmlnLmgganBlZ2xpYi5oIGptb3JlY2ZnLmgganBlZ2ludC5oIGplcnJvci5oCi1qZGFyaXRoLm86IGpkYXJpdGguYyBqaW5jbHVkZS5oIGpjb25maWcuaCBqcGVnbGliLmggam1vcmVjZmcuaCBqcGVnaW50LmggamVycm9yLmgKLWpkYXRhZHN0Lm86IGpkYXRhZHN0LmMgamluY2x1ZGUuaCBqY29uZmlnLmgganBlZ2xpYi5oIGptb3JlY2ZnLmggamVycm9yLmgKLWpkYXRhc3JjLm86IGpkYXRhc3JjLmMgamluY2x1ZGUuaCBqY29uZmlnLmgganBlZ2xpYi5oIGptb3JlY2ZnLmggamVycm9yLmgKLWpkY29lZmN0Lm86IGpkY29lZmN0LmMgamluY2x1ZGUuaCBqY29uZmlnLmgganBlZ2xpYi5oIGptb3JlY2ZnLmgganBlZ2ludC5oIGplcnJvci5oCi1qZGNvbG9yLm86IGpkY29sb3IuYyBqaW5jbHVkZS5oIGpjb25maWcuaCBqcGVnbGliLmggam1vcmVjZmcuaCBqcGVnaW50LmggamVycm9yLmgKLWpkZGN0bWdyLm86IGpkZGN0bWdyLmMgamluY2x1ZGUuaCBqY29uZmlnLmgganBlZ2xpYi5oIGptb3JlY2ZnLmgganBlZ2ludC5oIGplcnJvci5oIGpkY3QuaAotamRodWZmLm86IGpkaHVmZi5jIGppbmNsdWRlLmggamNvbmZpZy5oIGpwZWdsaWIuaCBqbW9yZWNmZy5oIGpwZWdpbnQuaCBqZXJyb3IuaAotamRpbnB1dC5vOiBqZGlucHV0LmMgamluY2x1ZGUuaCBqY29uZmlnLmgganBlZ2xpYi5oIGptb3JlY2ZnLmgganBlZ2ludC5oIGplcnJvci5oCi1qZG1haW5jdC5vOiBqZG1haW5jdC5jIGppbmNsdWRlLmggamNvbmZpZy5oIGpwZWdsaWIuaCBqbW9yZWNmZy5oIGpwZWdpbnQuaCBqZXJyb3IuaAotamRtYXJrZXIubzogamRtYXJrZXIuYyBqaW5jbHVkZS5oIGpjb25maWcuaCBqcGVnbGliLmggam1vcmVjZmcuaCBqcGVnaW50LmggamVycm9yLmgKLWpkbWFzdGVyLm86IGpkbWFzdGVyLmMgamluY2x1ZGUuaCBqY29uZmlnLmgganBlZ2xpYi5oIGptb3JlY2ZnLmgganBlZ2ludC5oIGplcnJvci5oCi1qZG1lcmdlLm86IGpkbWVyZ2UuYyBqaW5jbHVkZS5oIGpjb25maWcuaCBqcGVnbGliLmggam1vcmVjZmcuaCBqcGVnaW50LmggamVycm9yLmgKLWpkcG9zdGN0Lm86IGpkcG9zdGN0LmMgamluY2x1ZGUuaCBqY29uZmlnLmgganBlZ2xpYi5oIGptb3JlY2ZnLmgganBlZ2ludC5oIGplcnJvci5oCi1qZHNhbXBsZS5vOiBqZHNhbXBsZS5jIGppbmNsdWRlLmggamNvbmZpZy5oIGpwZWdsaWIuaCBqbW9yZWNmZy5oIGpwZWdpbnQuaCBqZXJyb3IuaAotamR0cmFucy5vOiBqZHRyYW5zLmMgamluY2x1ZGUuaCBqY29uZmlnLmgganBlZ2xpYi5oIGptb3JlY2ZnLmgganBlZ2ludC5oIGplcnJvci5oCi1qZXJyb3IubzogamVycm9yLmMgamluY2x1ZGUuaCBqY29uZmlnLmgganBlZ2xpYi5oIGptb3JlY2ZnLmgganZlcnNpb24uaCBqZXJyb3IuaAotamZkY3RmbHQubzogamZkY3RmbHQuYyBqaW5jbHVkZS5oIGpjb25maWcuaCBqcGVnbGliLmggam1vcmVjZmcuaCBqcGVnaW50LmggamVycm9yLmggamRjdC5oCi1qZmRjdGZzdC5vOiBqZmRjdGZzdC5jIGppbmNsdWRlLmggamNvbmZpZy5oIGpwZWdsaWIuaCBqbW9yZWNmZy5oIGpwZWdpbnQuaCBqZXJyb3IuaCBqZGN0LmgKLWpmZGN0aW50Lm86IGpmZGN0aW50LmMgamluY2x1ZGUuaCBqY29uZmlnLmgganBlZ2xpYi5oIGptb3JlY2ZnLmgganBlZ2ludC5oIGplcnJvci5oIGpkY3QuaAotamlkY3RmbHQubzogamlkY3RmbHQuYyBqaW5jbHVkZS5oIGpjb25maWcuaCBqcGVnbGliLmggam1vcmVjZmcuaCBqcGVnaW50LmggamVycm9yLmggamRjdC5oCi1qaWRjdGZzdC5vOiBqaWRjdGZzdC5jIGppbmNsdWRlLmggamNvbmZpZy5oIGpwZWdsaWIuaCBqbW9yZWNmZy5oIGpwZWdpbnQuaCBqZXJyb3IuaCBqZGN0LmgKLWppZGN0aW50Lm86IGppZGN0aW50LmMgamluY2x1ZGUuaCBqY29uZmlnLmgganBlZ2xpYi5oIGptb3JlY2ZnLmgganBlZ2ludC5oIGplcnJvci5oIGpkY3QuaAotanF1YW50MS5vOiBqcXVhbnQxLmMgamluY2x1ZGUuaCBqY29uZmlnLmgganBlZ2xpYi5oIGptb3JlY2ZnLmgganBlZ2ludC5oIGplcnJvci5oCi1qcXVhbnQyLm86IGpxdWFudDIuYyBqaW5jbHVkZS5oIGpjb25maWcuaCBqcGVnbGliLmggam1vcmVjZmcuaCBqcGVnaW50LmggamVycm9yLmgKLWp1dGlscy5vOiBqdXRpbHMuYyBqaW5jbHVkZS5oIGpjb25maWcuaCBqcGVnbGliLmggam1vcmVjZmcuaCBqcGVnaW50LmggamVycm9yLmgKLWptZW1tZ3Iubzogam1lbW1nci5jIGppbmNsdWRlLmggamNvbmZpZy5oIGpwZWdsaWIuaCBqbW9yZWNmZy5oIGpwZWdpbnQuaCBqZXJyb3IuaCBqbWVtc3lzLmgKLWptZW1hbnNpLm86IGptZW1hbnNpLmMgamluY2x1ZGUuaCBqY29uZmlnLmgganBlZ2xpYi5oIGptb3JlY2ZnLmgganBlZ2ludC5oIGplcnJvci5oIGptZW1zeXMuaAotam1lbW5hbWUubzogam1lbW5hbWUuYyBqaW5jbHVkZS5oIGpjb25maWcuaCBqcGVnbGliLmggam1vcmVjZmcuaCBqcGVnaW50LmggamVycm9yLmggam1lbXN5cy5oCi1qbWVtbm9icy5vOiBqbWVtbm9icy5jIGppbmNsdWRlLmggamNvbmZpZy5oIGpwZWdsaWIuaCBqbW9yZWNmZy5oIGpwZWdpbnQuaCBqZXJyb3IuaCBqbWVtc3lzLmgKLWptZW1kb3Mubzogam1lbWRvcy5jIGppbmNsdWRlLmggamNvbmZpZy5oIGpwZWdsaWIuaCBqbW9yZWNmZy5oIGpwZWdpbnQuaCBqZXJyb3IuaCBqbWVtc3lzLmgKLWptZW1tYWMubzogam1lbW1hYy5jIGppbmNsdWRlLmggamNvbmZpZy5oIGpwZWdsaWIuaCBqbW9yZWNmZy5oIGpwZWdpbnQuaCBqZXJyb3IuaCBqbWVtc3lzLmgKLWNqcGVnLm86IGNqcGVnLmMgY2RqcGVnLmggamluY2x1ZGUuaCBqY29uZmlnLmgganBlZ2xpYi5oIGptb3JlY2ZnLmggamVycm9yLmggY2RlcnJvci5oIGp2ZXJzaW9uLmgKLWRqcGVnLm86IGRqcGVnLmMgY2RqcGVnLmggamluY2x1ZGUuaCBqY29uZmlnLmgganBlZ2xpYi5oIGptb3JlY2ZnLmggamVycm9yLmggY2RlcnJvci5oIGp2ZXJzaW9uLmgKLWpwZWd0cmFuLm86IGpwZWd0cmFuLmMgY2RqcGVnLmggamluY2x1ZGUuaCBqY29uZmlnLmgganBlZ2xpYi5oIGptb3JlY2ZnLmggamVycm9yLmggY2RlcnJvci5oIHRyYW5zdXBwLmgganZlcnNpb24uaAotcmRqcGdjb20ubzogcmRqcGdjb20uYyBqaW5jbHVkZS5oIGpjb25maWcuaAotd3JqcGdjb20ubzogd3JqcGdjb20uYyBqaW5jbHVkZS5oIGpjb25maWcuaAotY2RqcGVnLm86IGNkanBlZy5jIGNkanBlZy5oIGppbmNsdWRlLmggamNvbmZpZy5oIGpwZWdsaWIuaCBqbW9yZWNmZy5oIGplcnJvci5oIGNkZXJyb3IuaAotcmRjb2xtYXAubzogcmRjb2xtYXAuYyBjZGpwZWcuaCBqaW5jbHVkZS5oIGpjb25maWcuaCBqcGVnbGliLmggam1vcmVjZmcuaCBqZXJyb3IuaCBjZGVycm9yLmgKLXJkc3dpdGNoLm86IHJkc3dpdGNoLmMgY2RqcGVnLmggamluY2x1ZGUuaCBqY29uZmlnLmgganBlZ2xpYi5oIGptb3JlY2ZnLmggamVycm9yLmggY2RlcnJvci5oCi10cmFuc3VwcC5vOiB0cmFuc3VwcC5jIGppbmNsdWRlLmggamNvbmZpZy5oIGpwZWdsaWIuaCBqbW9yZWNmZy5oIGpwZWdpbnQuaCBqZXJyb3IuaCB0cmFuc3VwcC5oCi1yZHBwbS5vOiByZHBwbS5jIGNkanBlZy5oIGppbmNsdWRlLmggamNvbmZpZy5oIGpwZWdsaWIuaCBqbW9yZWNmZy5oIGplcnJvci5oIGNkZXJyb3IuaAotd3JwcG0ubzogd3JwcG0uYyBjZGpwZWcuaCBqaW5jbHVkZS5oIGpjb25maWcuaCBqcGVnbGliLmggam1vcmVjZmcuaCBqZXJyb3IuaCBjZGVycm9yLmgKLXJkZ2lmLm86IHJkZ2lmLmMgY2RqcGVnLmggamluY2x1ZGUuaCBqY29uZmlnLmgganBlZ2xpYi5oIGptb3JlY2ZnLmggamVycm9yLmggY2RlcnJvci5oCi13cmdpZi5vOiB3cmdpZi5jIGNkanBlZy5oIGppbmNsdWRlLmggamNvbmZpZy5oIGpwZWdsaWIuaCBqbW9yZWNmZy5oIGplcnJvci5oIGNkZXJyb3IuaAotcmR0YXJnYS5vOiByZHRhcmdhLmMgY2RqcGVnLmggamluY2x1ZGUuaCBqY29uZmlnLmgganBlZ2xpYi5oIGptb3JlY2ZnLmggamVycm9yLmggY2RlcnJvci5oCi13cnRhcmdhLm86IHdydGFyZ2EuYyBjZGpwZWcuaCBqaW5jbHVkZS5oIGpjb25maWcuaCBqcGVnbGliLmggam1vcmVjZmcuaCBqZXJyb3IuaCBjZGVycm9yLmgKLXJkYm1wLm86IHJkYm1wLmMgY2RqcGVnLmggamluY2x1ZGUuaCBqY29uZmlnLmgganBlZ2xpYi5oIGptb3JlY2ZnLmggamVycm9yLmggY2RlcnJvci5oCi13cmJtcC5vOiB3cmJtcC5jIGNkanBlZy5oIGppbmNsdWRlLmggamNvbmZpZy5oIGpwZWdsaWIuaCBqbW9yZWNmZy5oIGplcnJvci5oIGNkZXJyb3IuaAotcmRybGUubzogcmRybGUuYyBjZGpwZWcuaCBqaW5jbHVkZS5oIGpjb25maWcuaCBqcGVnbGliLmggam1vcmVjZmcuaCBqZXJyb3IuaCBjZGVycm9yLmgKLXdycmxlLm86IHdycmxlLmMgY2RqcGVnLmggamluY2x1ZGUuaCBqY29uZmlnLmgganBlZ2xpYi5oIGptb3JlY2ZnLmggamVycm9yLmggY2RlcnJvci5oCmRpZmYgLS1naXQgYS9tYWtlZmlsZS51bml4IGIvbWFrZWZpbGUudW5peApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZWFhZGZjMS4uMDAwMDAwMAotLS0gYS9tYWtlZmlsZS51bml4CisrKyAvZGV2L251bGwKQEAgLTEsMjM1ICswLDAgQEAKLSMgTWFrZWZpbGUgZm9yIEluZGVwZW5kZW50IEpQRUcgR3JvdXAncyBzb2Z0d2FyZQotCi0jIFRoaXMgbWFrZWZpbGUgaXMgc3VpdGFibGUgZm9yIFVuaXgtbGlrZSBzeXN0ZW1zIHdpdGggbm9uLUFOU0kgY29tcGlsZXJzLgotIyBJZiB5b3UgaGF2ZSBhbiBBTlNJIGNvbXBpbGVyLCBtYWtlZmlsZS5hbnNpIGlzIGEgYmV0dGVyIHN0YXJ0aW5nIHBvaW50LgotCi0jIFJlYWQgaW5zdGFsbGF0aW9uIGluc3RydWN0aW9ucyBiZWZvcmUgc2F5aW5nICJtYWtlIiAhIQotCi0jIFRoZSBuYW1lIG9mIHlvdXIgQyBjb21waWxlcjoKLUNDPSBjYwotCi0jIFlvdSBtYXkgbmVlZCB0byBhZGp1c3QgdGhlc2UgY2Mgb3B0aW9uczoKLUNGTEFHUz0gLU8KLSMgR2VuZXJhbGx5LCB3ZSByZWNvbW1lbmQgZGVmaW5pbmcgYW55IGNvbmZpZ3VyYXRpb24gc3ltYm9scyBpbiBqY29uZmlnLmgsCi0jIE5PVCB2aWEgLUQgc3dpdGNoZXMgaGVyZS4KLSMgSG93ZXZlciwgYW55IHNwZWNpYWwgZGVmaW5lcyBmb3IgYW5zaTJrbnIuYyBtYXkgYmUgaW5jbHVkZWQgaGVyZToKLUFOU0kyS05SRkxBR1M9IAotCi0jIExpbmstdGltZSBjYyBvcHRpb25zOgotTERGTEFHUz0gCi0KLSMgVG8gbGluayBhbnkgc3BlY2lhbCBsaWJyYXJpZXMsIGFkZCB0aGUgbmVjZXNzYXJ5IC1sIGNvbW1hbmRzIGhlcmUuCi1MRExJQlM9IAotCi0jIFB1dCBoZXJlIHRoZSBvYmplY3QgZmlsZSBuYW1lIGZvciB0aGUgY29ycmVjdCBzeXN0ZW0tZGVwZW5kZW50IG1lbW9yeQotIyBtYW5hZ2VyIGZpbGUuICBGb3IgVW5peCB0aGlzIGlzIHVzdWFsbHkgam1lbW5vYnMubywgYnV0IHlvdSBtYXkgd2FudAotIyB0byB1c2Ugam1lbWFuc2kubyBvciBqbWVtbmFtZS5vIGlmIHlvdSBoYXZlIGxpbWl0ZWQgc3dhcCBzcGFjZS4KLVNZU0RFUE1FTT0gam1lbW5vYnMubwotCi0jIG1pc2NlbGxhbmVvdXMgT1MtZGVwZW5kZW50IHN0dWZmCi0jIGxpbmtlcgotTE49ICQoQ0MpCi0jIGZpbGUgZGVsZXRpb24gY29tbWFuZAotUk09IHJtIC1mCi0jIGZpbGUgcmVuYW1lIGNvbW1hbmQKLU1WPSBtdgotIyBsaWJyYXJ5ICguYSkgZmlsZSBjcmVhdGlvbiBjb21tYW5kCi1BUj0gYXIgcmMKLSMgc2Vjb25kIHN0ZXAgaW4gLmEgY3JlYXRpb24gKHVzZSAidG91Y2giIGlmIG5vdCBuZWVkZWQpCi1BUjI9IHJhbmxpYgotCi0jIEVuZCBvZiBjb25maWd1cmFibGUgb3B0aW9ucy4KLQotCi0jIHNvdXJjZSBmaWxlczogSlBFRyBsaWJyYXJ5IHByb3BlcgotTElCU09VUkNFUz0gamFyaWNvbS5jIGpjYXBpbWluLmMgamNhcGlzdGQuYyBqY2FyaXRoLmMgamNjb2VmY3QuYyBqY2NvbG9yLmMgXAotICAgICAgICBqY2RjdG1nci5jIGpjaHVmZi5jIGpjaW5pdC5jIGpjbWFpbmN0LmMgamNtYXJrZXIuYyBqY21hc3Rlci5jIFwKLSAgICAgICAgamNvbWFwaS5jIGpjcGFyYW0uYyBqY3ByZXBjdC5jIGpjc2FtcGxlLmMgamN0cmFucy5jIGpkYXBpbWluLmMgXAotICAgICAgICBqZGFwaXN0ZC5jIGpkYXJpdGguYyBqZGF0YWRzdC5jIGpkYXRhc3JjLmMgamRjb2VmY3QuYyBqZGNvbG9yLmMgXAotICAgICAgICBqZGRjdG1nci5jIGpkaHVmZi5jIGpkaW5wdXQuYyBqZG1haW5jdC5jIGpkbWFya2VyLmMgamRtYXN0ZXIuYyBcCi0gICAgICAgIGpkbWVyZ2UuYyBqZHBvc3RjdC5jIGpkc2FtcGxlLmMgamR0cmFucy5jIGplcnJvci5jIGpmZGN0Zmx0LmMgXAotICAgICAgICBqZmRjdGZzdC5jIGpmZGN0aW50LmMgamlkY3RmbHQuYyBqaWRjdGZzdC5jIGppZGN0aW50LmMganF1YW50MS5jIFwKLSAgICAgICAganF1YW50Mi5jIGp1dGlscy5jIGptZW1tZ3IuYwotIyBtZW1tZ3IgYmFjayBlbmRzOiBjb21waWxlIG9ubHkgb25lIG9mIHRoZXNlIGludG8gYSB3b3JraW5nIGxpYnJhcnkKLVNZU0RFUFNPVVJDRVM9IGptZW1hbnNpLmMgam1lbW5hbWUuYyBqbWVtbm9icy5jIGptZW1kb3MuYyBqbWVtbWFjLmMKLSMgc291cmNlIGZpbGVzOiBjanBlZy9kanBlZy9qcGVndHJhbiBhcHBsaWNhdGlvbnMsIGFsc28gcmRqcGdjb20vd3JqcGdjb20KLUFQUFNPVVJDRVM9IGNqcGVnLmMgZGpwZWcuYyBqcGVndHJhbi5jIHJkanBnY29tLmMgd3JqcGdjb20uYyBjZGpwZWcuYyBcCi0gICAgICAgIHJkY29sbWFwLmMgcmRzd2l0Y2guYyB0cmFuc3VwcC5jIHJkcHBtLmMgd3JwcG0uYyByZGdpZi5jIHdyZ2lmLmMgXAotICAgICAgICByZHRhcmdhLmMgd3J0YXJnYS5jIHJkYm1wLmMgd3JibXAuYyByZHJsZS5jIHdycmxlLmMKLVNPVVJDRVM9ICQoTElCU09VUkNFUykgJChTWVNERVBTT1VSQ0VTKSAkKEFQUFNPVVJDRVMpCi0jIGZpbGVzIGluY2x1ZGVkIGJ5IHNvdXJjZSBmaWxlcwotSU5DTFVERVM9IGpkY3QuaCBqZXJyb3IuaCBqaW5jbHVkZS5oIGptZW1zeXMuaCBqbW9yZWNmZy5oIGpwZWdpbnQuaCBcCi0gICAgICAgIGpwZWdsaWIuaCBqdmVyc2lvbi5oIGNkanBlZy5oIGNkZXJyb3IuaCB0cmFuc3VwcC5oCi0jIGRvY3VtZW50YXRpb24sIHRlc3QsIGFuZCBzdXBwb3J0IGZpbGVzCi1ET0NTPSBSRUFETUUgaW5zdGFsbC50eHQgdXNhZ2UudHh0IGNqcGVnLjEgZGpwZWcuMSBqcGVndHJhbi4xIHJkanBnY29tLjEgXAotICAgICAgICB3cmpwZ2NvbS4xIHdpemFyZC50eHQgZXhhbXBsZS5jIGxpYmpwZWcudHh0IHN0cnVjdHVyZS50eHQgXAotICAgICAgICBjb2RlcnVsZXMudHh0IGZpbGVsaXN0LnR4dCBjaGFuZ2UubG9nCi1NS0ZJTEVTPSBjb25maWd1cmUgTWFrZWZpbGUuaW4gbWFrZWZpbGUuYW5zaSBtYWtlZmlsZS51bml4IG1ha2VmaWxlLmJjYyBcCi0gICAgICAgIG1ha2VmaWxlLm1jNiBtYWtlZmlsZS5kaiBtYWtlZmlsZS53YXQgbWFrZWZpbGUudmMgbWFrZWpkc3cudmM2IFwKLSAgICAgICAgbWFrZWFkc3cudmM2IG1ha2VqZGVwLnZjNiBtYWtlamRzcC52YzYgbWFrZWptYWsudmM2IG1ha2VjZGVwLnZjNiBcCi0gICAgICAgIG1ha2VjZHNwLnZjNiBtYWtlY21hay52YzYgbWFrZWRkZXAudmM2IG1ha2VkZHNwLnZjNiBtYWtlZG1hay52YzYgXAotICAgICAgICBtYWtldGRlcC52YzYgbWFrZXRkc3AudmM2IG1ha2V0bWFrLnZjNiBtYWtlcmRlcC52YzYgbWFrZXJkc3AudmM2IFwKLSAgICAgICAgbWFrZXJtYWsudmM2IG1ha2V3ZGVwLnZjNiBtYWtld2RzcC52YzYgbWFrZXdtYWsudmM2IG1ha2Vqc2xuLnYxMCBcCi0gICAgICAgIG1ha2Vhc2xuLnYxMCBtYWtlanZjeC52MTAgbWFrZWpmaWwudjEwIG1ha2VjdmN4LnYxMCBtYWtlY2ZpbC52MTAgXAotICAgICAgICBtYWtlZHZjeC52MTAgbWFrZWRmaWwudjEwIG1ha2V0dmN4LnYxMCBtYWtldGZpbC52MTAgbWFrZXJ2Y3gudjEwIFwKLSAgICAgICAgbWFrZXJmaWwudjEwIG1ha2V3dmN4LnYxMCBtYWtld2ZpbC52MTAgbWFrZXByb2oubWFjIG1ha2NqcGVnLnN0IFwKLSAgICAgICAgbWFrZGpwZWcuc3QgbWFrbGpwZWcuc3QgbWFrdGpwZWcuc3QgbWFrZWZpbGUubWFueCBtYWtlZmlsZS5zYXMgXAotICAgICAgICBtYWtlZmlsZS5tbXMgbWFrZWZpbGUudm1zIG1ha3Ztcy5vcHQKLUNPTkZJR0ZJTEVTPSBqY29uZmlnLmNmZyBqY29uZmlnLmJjYyBqY29uZmlnLm1jNiBqY29uZmlnLmRqIGpjb25maWcud2F0IFwKLSAgICAgICAgamNvbmZpZy52YyBqY29uZmlnLm1hYyBqY29uZmlnLnN0IGpjb25maWcubWFueCBqY29uZmlnLnNhcyBcCi0gICAgICAgIGpjb25maWcudm1zCi1DT05GSUdVUkVGSUxFUz0gY29uZmlnLmd1ZXNzIGNvbmZpZy5zdWIgaW5zdGFsbC1zaCBsdG1haW4uc2ggZGVwY29tcCBtaXNzaW5nCi1PVEhFUkZJTEVTPSBqY29uZmlnLnR4dCBja2NvbmZpZy5jIGFuc2kya25yLmMgYW5zaTJrbnIuMSBqbWVtZG9zYS5hc20gXAotICAgICAgICBsaWJqcGVnLm1hcAotVEVTVEZJTEVTPSB0ZXN0b3JpZy5qcGcgdGVzdGltZy5wcG0gdGVzdGltZy5ibXAgdGVzdGltZy5qcGcgdGVzdHByb2cuanBnIFwKLSAgICAgICAgdGVzdGltZ3AuanBnCi1ESVNURklMRVM9ICQoRE9DUykgJChNS0ZJTEVTKSAkKENPTkZJR0ZJTEVTKSAkKFNPVVJDRVMpICQoSU5DTFVERVMpIFwKLSAgICAgICAgJChDT05GSUdVUkVGSUxFUykgJChPVEhFUkZJTEVTKSAkKFRFU1RGSUxFUykKLSMgbGlicmFyeSBvYmplY3QgZmlsZXMgY29tbW9uIHRvIGNvbXByZXNzaW9uIGFuZCBkZWNvbXByZXNzaW9uCi1DT01PQkpFQ1RTPSBqYXJpY29tLm8gamNvbWFwaS5vIGp1dGlscy5vIGplcnJvci5vIGptZW1tZ3IubyAkKFNZU0RFUE1FTSkKLSMgY29tcHJlc3Npb24gbGlicmFyeSBvYmplY3QgZmlsZXMKLUNMSUJPQkpFQ1RTPSBqY2FwaW1pbi5vIGpjYXBpc3RkLm8gamNhcml0aC5vIGpjdHJhbnMubyBqY3BhcmFtLm8gXAotICAgICAgICBqZGF0YWRzdC5vIGpjaW5pdC5vIGpjbWFzdGVyLm8gamNtYXJrZXIubyBqY21haW5jdC5vIGpjcHJlcGN0Lm8gXAotICAgICAgICBqY2NvZWZjdC5vIGpjY29sb3IubyBqY3NhbXBsZS5vIGpjaHVmZi5vIGpjZGN0bWdyLm8gamZkY3Rmc3QubyBcCi0gICAgICAgIGpmZGN0Zmx0Lm8gamZkY3RpbnQubwotIyBkZWNvbXByZXNzaW9uIGxpYnJhcnkgb2JqZWN0IGZpbGVzCi1ETElCT0JKRUNUUz0gamRhcGltaW4ubyBqZGFwaXN0ZC5vIGpkYXJpdGgubyBqZHRyYW5zLm8gamRhdGFzcmMubyBcCi0gICAgICAgIGpkbWFzdGVyLm8gamRpbnB1dC5vIGpkbWFya2VyLm8gamRodWZmLm8gamRtYWluY3QubyBcCi0gICAgICAgIGpkY29lZmN0Lm8gamRwb3N0Y3QubyBqZGRjdG1nci5vIGppZGN0ZnN0Lm8gamlkY3RmbHQubyBcCi0gICAgICAgIGppZGN0aW50Lm8gamRzYW1wbGUubyBqZGNvbG9yLm8ganF1YW50MS5vIGpxdWFudDIubyBqZG1lcmdlLm8KLSMgVGhlc2Ugb2JqZWN0ZmlsZXMgYXJlIGluY2x1ZGVkIGluIGxpYmpwZWcuYQotTElCT0JKRUNUUz0gJChDTElCT0JKRUNUUykgJChETElCT0JKRUNUUykgJChDT01PQkpFQ1RTKQotIyBvYmplY3QgZmlsZXMgZm9yIHNhbXBsZSBhcHBsaWNhdGlvbnMgKGV4Y2x1ZGluZyBsaWJyYXJ5IGZpbGVzKQotQ09CSkVDVFM9IGNqcGVnLm8gcmRwcG0ubyByZGdpZi5vIHJkdGFyZ2EubyByZHJsZS5vIHJkYm1wLm8gcmRzd2l0Y2gubyBcCi0gICAgICAgIGNkanBlZy5vCi1ET0JKRUNUUz0gZGpwZWcubyB3cnBwbS5vIHdyZ2lmLm8gd3J0YXJnYS5vIHdycmxlLm8gd3JibXAubyByZGNvbG1hcC5vIFwKLSAgICAgICAgY2RqcGVnLm8KLVRST0JKRUNUUz0ganBlZ3RyYW4ubyByZHN3aXRjaC5vIGNkanBlZy5vIHRyYW5zdXBwLm8KLQotCi1hbGw6IGFuc2kya25yIGxpYmpwZWcuYSBjanBlZyBkanBlZyBqcGVndHJhbiByZGpwZ2NvbSB3cmpwZ2NvbQotCi0jIFRoaXMgcnVsZSBjYXVzZXMgYW5zaTJrbnIgdG8gYmUgaW52b2tlZC4KLS5jLm86Ci0JLi9hbnNpMmtuciAkKi5jIFQkKi5jCi0JJChDQykgJChDRkxBR1MpIC1jIFQkKi5jCi0JJChSTSkgVCQqLmMgJCoubwotCSQoTVYpIFQkKi5vICQqLm8KLQotYW5zaTJrbnI6IGFuc2kya25yLmMKLQkkKENDKSAkKENGTEFHUykgJChBTlNJMktOUkZMQUdTKSAtbyBhbnNpMmtuciBhbnNpMmtuci5jCi0KLWxpYmpwZWcuYTogYW5zaTJrbnIgJChMSUJPQkpFQ1RTKQotCSQoUk0pIGxpYmpwZWcuYQotCSQoQVIpIGxpYmpwZWcuYSAgJChMSUJPQkpFQ1RTKQotCSQoQVIyKSBsaWJqcGVnLmEKLQotY2pwZWc6IGFuc2kya25yICQoQ09CSkVDVFMpIGxpYmpwZWcuYQotCSQoTE4pICQoTERGTEFHUykgLW8gY2pwZWcgJChDT0JKRUNUUykgbGlianBlZy5hICQoTERMSUJTKQotCi1kanBlZzogYW5zaTJrbnIgJChET0JKRUNUUykgbGlianBlZy5hCi0JJChMTikgJChMREZMQUdTKSAtbyBkanBlZyAkKERPQkpFQ1RTKSBsaWJqcGVnLmEgJChMRExJQlMpCi0KLWpwZWd0cmFuOiBhbnNpMmtuciAkKFRST0JKRUNUUykgbGlianBlZy5hCi0JJChMTikgJChMREZMQUdTKSAtbyBqcGVndHJhbiAkKFRST0JKRUNUUykgbGlianBlZy5hICQoTERMSUJTKQotCi1yZGpwZ2NvbTogcmRqcGdjb20ubwotCSQoTE4pICQoTERGTEFHUykgLW8gcmRqcGdjb20gcmRqcGdjb20ubyAkKExETElCUykKLQotd3JqcGdjb206IHdyanBnY29tLm8KLQkkKExOKSAkKExERkxBR1MpIC1vIHdyanBnY29tIHdyanBnY29tLm8gJChMRExJQlMpCi0KLWpjb25maWcuaDogamNvbmZpZy50eHQKLQllY2hvIFlvdSBtdXN0IHByZXBhcmUgYSBzeXN0ZW0tZGVwZW5kZW50IGpjb25maWcuaCBmaWxlLgotCWVjaG8gUGxlYXNlIHJlYWQgdGhlIGluc3RhbGxhdGlvbiBkaXJlY3Rpb25zIGluIGluc3RhbGwudHh0LgotCWV4aXQgMQotCi1jbGVhbjoKLQkkKFJNKSAqLm8gY2pwZWcgZGpwZWcganBlZ3RyYW4gbGlianBlZy5hIHJkanBnY29tIHdyanBnY29tCi0JJChSTSkgYW5zaTJrbnIgY29yZSB0ZXN0b3V0KgotCi10ZXN0OiBjanBlZyBkanBlZyBqcGVndHJhbgotCSQoUk0pIHRlc3RvdXQqCi0JLi9kanBlZyAtZGN0IGludCAtcHBtIC1vdXRmaWxlIHRlc3RvdXQucHBtICB0ZXN0b3JpZy5qcGcKLQkuL2RqcGVnIC1kY3QgaW50IC1ibXAgLWNvbG9ycyAyNTYgLW91dGZpbGUgdGVzdG91dC5ibXAgIHRlc3RvcmlnLmpwZwotCS4vY2pwZWcgLWRjdCBpbnQgLW91dGZpbGUgdGVzdG91dC5qcGcgIHRlc3RpbWcucHBtCi0JLi9kanBlZyAtZGN0IGludCAtcHBtIC1vdXRmaWxlIHRlc3RvdXRwLnBwbSB0ZXN0cHJvZy5qcGcKLQkuL2NqcGVnIC1kY3QgaW50IC1wcm9ncmVzc2l2ZSAtb3B0IC1vdXRmaWxlIHRlc3RvdXRwLmpwZyB0ZXN0aW1nLnBwbQotCS4vanBlZ3RyYW4gLW91dGZpbGUgdGVzdG91dHQuanBnIHRlc3Rwcm9nLmpwZwotCWNtcCB0ZXN0aW1nLnBwbSB0ZXN0b3V0LnBwbQotCWNtcCB0ZXN0aW1nLmJtcCB0ZXN0b3V0LmJtcAotCWNtcCB0ZXN0aW1nLmpwZyB0ZXN0b3V0LmpwZwotCWNtcCB0ZXN0aW1nLnBwbSB0ZXN0b3V0cC5wcG0KLQljbXAgdGVzdGltZ3AuanBnIHRlc3RvdXRwLmpwZwotCWNtcCB0ZXN0b3JpZy5qcGcgdGVzdG91dHQuanBnCi0KLQotamFyaWNvbS5vOiBqYXJpY29tLmMgamluY2x1ZGUuaCBqY29uZmlnLmgganBlZ2xpYi5oIGptb3JlY2ZnLmgganBlZ2ludC5oIGplcnJvci5oCi1qY2FwaW1pbi5vOiBqY2FwaW1pbi5jIGppbmNsdWRlLmggamNvbmZpZy5oIGpwZWdsaWIuaCBqbW9yZWNmZy5oIGpwZWdpbnQuaCBqZXJyb3IuaAotamNhcGlzdGQubzogamNhcGlzdGQuYyBqaW5jbHVkZS5oIGpjb25maWcuaCBqcGVnbGliLmggam1vcmVjZmcuaCBqcGVnaW50LmggamVycm9yLmgKLWpjYXJpdGgubzogamNhcml0aC5jIGppbmNsdWRlLmggamNvbmZpZy5oIGpwZWdsaWIuaCBqbW9yZWNmZy5oIGpwZWdpbnQuaCBqZXJyb3IuaAotamNjb2VmY3QubzogamNjb2VmY3QuYyBqaW5jbHVkZS5oIGpjb25maWcuaCBqcGVnbGliLmggam1vcmVjZmcuaCBqcGVnaW50LmggamVycm9yLmgKLWpjY29sb3IubzogamNjb2xvci5jIGppbmNsdWRlLmggamNvbmZpZy5oIGpwZWdsaWIuaCBqbW9yZWNmZy5oIGpwZWdpbnQuaCBqZXJyb3IuaAotamNkY3RtZ3IubzogamNkY3RtZ3IuYyBqaW5jbHVkZS5oIGpjb25maWcuaCBqcGVnbGliLmggam1vcmVjZmcuaCBqcGVnaW50LmggamVycm9yLmggamRjdC5oCi1qY2h1ZmYubzogamNodWZmLmMgamluY2x1ZGUuaCBqY29uZmlnLmgganBlZ2xpYi5oIGptb3JlY2ZnLmgganBlZ2ludC5oIGplcnJvci5oCi1qY2luaXQubzogamNpbml0LmMgamluY2x1ZGUuaCBqY29uZmlnLmgganBlZ2xpYi5oIGptb3JlY2ZnLmgganBlZ2ludC5oIGplcnJvci5oCi1qY21haW5jdC5vOiBqY21haW5jdC5jIGppbmNsdWRlLmggamNvbmZpZy5oIGpwZWdsaWIuaCBqbW9yZWNmZy5oIGpwZWdpbnQuaCBqZXJyb3IuaAotamNtYXJrZXIubzogamNtYXJrZXIuYyBqaW5jbHVkZS5oIGpjb25maWcuaCBqcGVnbGliLmggam1vcmVjZmcuaCBqcGVnaW50LmggamVycm9yLmgKLWpjbWFzdGVyLm86IGpjbWFzdGVyLmMgamluY2x1ZGUuaCBqY29uZmlnLmgganBlZ2xpYi5oIGptb3JlY2ZnLmgganBlZ2ludC5oIGplcnJvci5oCi1qY29tYXBpLm86IGpjb21hcGkuYyBqaW5jbHVkZS5oIGpjb25maWcuaCBqcGVnbGliLmggam1vcmVjZmcuaCBqcGVnaW50LmggamVycm9yLmgKLWpjcGFyYW0ubzogamNwYXJhbS5jIGppbmNsdWRlLmggamNvbmZpZy5oIGpwZWdsaWIuaCBqbW9yZWNmZy5oIGpwZWdpbnQuaCBqZXJyb3IuaAotamNwcmVwY3QubzogamNwcmVwY3QuYyBqaW5jbHVkZS5oIGpjb25maWcuaCBqcGVnbGliLmggam1vcmVjZmcuaCBqcGVnaW50LmggamVycm9yLmgKLWpjc2FtcGxlLm86IGpjc2FtcGxlLmMgamluY2x1ZGUuaCBqY29uZmlnLmgganBlZ2xpYi5oIGptb3JlY2ZnLmgganBlZ2ludC5oIGplcnJvci5oCi1qY3RyYW5zLm86IGpjdHJhbnMuYyBqaW5jbHVkZS5oIGpjb25maWcuaCBqcGVnbGliLmggam1vcmVjZmcuaCBqcGVnaW50LmggamVycm9yLmgKLWpkYXBpbWluLm86IGpkYXBpbWluLmMgamluY2x1ZGUuaCBqY29uZmlnLmgganBlZ2xpYi5oIGptb3JlY2ZnLmgganBlZ2ludC5oIGplcnJvci5oCi1qZGFwaXN0ZC5vOiBqZGFwaXN0ZC5jIGppbmNsdWRlLmggamNvbmZpZy5oIGpwZWdsaWIuaCBqbW9yZWNmZy5oIGpwZWdpbnQuaCBqZXJyb3IuaAotamRhcml0aC5vOiBqZGFyaXRoLmMgamluY2x1ZGUuaCBqY29uZmlnLmgganBlZ2xpYi5oIGptb3JlY2ZnLmgganBlZ2ludC5oIGplcnJvci5oCi1qZGF0YWRzdC5vOiBqZGF0YWRzdC5jIGppbmNsdWRlLmggamNvbmZpZy5oIGpwZWdsaWIuaCBqbW9yZWNmZy5oIGplcnJvci5oCi1qZGF0YXNyYy5vOiBqZGF0YXNyYy5jIGppbmNsdWRlLmggamNvbmZpZy5oIGpwZWdsaWIuaCBqbW9yZWNmZy5oIGplcnJvci5oCi1qZGNvZWZjdC5vOiBqZGNvZWZjdC5jIGppbmNsdWRlLmggamNvbmZpZy5oIGpwZWdsaWIuaCBqbW9yZWNmZy5oIGpwZWdpbnQuaCBqZXJyb3IuaAotamRjb2xvci5vOiBqZGNvbG9yLmMgamluY2x1ZGUuaCBqY29uZmlnLmgganBlZ2xpYi5oIGptb3JlY2ZnLmgganBlZ2ludC5oIGplcnJvci5oCi1qZGRjdG1nci5vOiBqZGRjdG1nci5jIGppbmNsdWRlLmggamNvbmZpZy5oIGpwZWdsaWIuaCBqbW9yZWNmZy5oIGpwZWdpbnQuaCBqZXJyb3IuaCBqZGN0LmgKLWpkaHVmZi5vOiBqZGh1ZmYuYyBqaW5jbHVkZS5oIGpjb25maWcuaCBqcGVnbGliLmggam1vcmVjZmcuaCBqcGVnaW50LmggamVycm9yLmgKLWpkaW5wdXQubzogamRpbnB1dC5jIGppbmNsdWRlLmggamNvbmZpZy5oIGpwZWdsaWIuaCBqbW9yZWNmZy5oIGpwZWdpbnQuaCBqZXJyb3IuaAotamRtYWluY3QubzogamRtYWluY3QuYyBqaW5jbHVkZS5oIGpjb25maWcuaCBqcGVnbGliLmggam1vcmVjZmcuaCBqcGVnaW50LmggamVycm9yLmgKLWpkbWFya2VyLm86IGpkbWFya2VyLmMgamluY2x1ZGUuaCBqY29uZmlnLmgganBlZ2xpYi5oIGptb3JlY2ZnLmgganBlZ2ludC5oIGplcnJvci5oCi1qZG1hc3Rlci5vOiBqZG1hc3Rlci5jIGppbmNsdWRlLmggamNvbmZpZy5oIGpwZWdsaWIuaCBqbW9yZWNmZy5oIGpwZWdpbnQuaCBqZXJyb3IuaAotamRtZXJnZS5vOiBqZG1lcmdlLmMgamluY2x1ZGUuaCBqY29uZmlnLmgganBlZ2xpYi5oIGptb3JlY2ZnLmgganBlZ2ludC5oIGplcnJvci5oCi1qZHBvc3RjdC5vOiBqZHBvc3RjdC5jIGppbmNsdWRlLmggamNvbmZpZy5oIGpwZWdsaWIuaCBqbW9yZWNmZy5oIGpwZWdpbnQuaCBqZXJyb3IuaAotamRzYW1wbGUubzogamRzYW1wbGUuYyBqaW5jbHVkZS5oIGpjb25maWcuaCBqcGVnbGliLmggam1vcmVjZmcuaCBqcGVnaW50LmggamVycm9yLmgKLWpkdHJhbnMubzogamR0cmFucy5jIGppbmNsdWRlLmggamNvbmZpZy5oIGpwZWdsaWIuaCBqbW9yZWNmZy5oIGpwZWdpbnQuaCBqZXJyb3IuaAotamVycm9yLm86IGplcnJvci5jIGppbmNsdWRlLmggamNvbmZpZy5oIGpwZWdsaWIuaCBqbW9yZWNmZy5oIGp2ZXJzaW9uLmggamVycm9yLmgKLWpmZGN0Zmx0Lm86IGpmZGN0Zmx0LmMgamluY2x1ZGUuaCBqY29uZmlnLmgganBlZ2xpYi5oIGptb3JlY2ZnLmgganBlZ2ludC5oIGplcnJvci5oIGpkY3QuaAotamZkY3Rmc3QubzogamZkY3Rmc3QuYyBqaW5jbHVkZS5oIGpjb25maWcuaCBqcGVnbGliLmggam1vcmVjZmcuaCBqcGVnaW50LmggamVycm9yLmggamRjdC5oCi1qZmRjdGludC5vOiBqZmRjdGludC5jIGppbmNsdWRlLmggamNvbmZpZy5oIGpwZWdsaWIuaCBqbW9yZWNmZy5oIGpwZWdpbnQuaCBqZXJyb3IuaCBqZGN0LmgKLWppZGN0Zmx0Lm86IGppZGN0Zmx0LmMgamluY2x1ZGUuaCBqY29uZmlnLmgganBlZ2xpYi5oIGptb3JlY2ZnLmgganBlZ2ludC5oIGplcnJvci5oIGpkY3QuaAotamlkY3Rmc3QubzogamlkY3Rmc3QuYyBqaW5jbHVkZS5oIGpjb25maWcuaCBqcGVnbGliLmggam1vcmVjZmcuaCBqcGVnaW50LmggamVycm9yLmggamRjdC5oCi1qaWRjdGludC5vOiBqaWRjdGludC5jIGppbmNsdWRlLmggamNvbmZpZy5oIGpwZWdsaWIuaCBqbW9yZWNmZy5oIGpwZWdpbnQuaCBqZXJyb3IuaCBqZGN0LmgKLWpxdWFudDEubzoganF1YW50MS5jIGppbmNsdWRlLmggamNvbmZpZy5oIGpwZWdsaWIuaCBqbW9yZWNmZy5oIGpwZWdpbnQuaCBqZXJyb3IuaAotanF1YW50Mi5vOiBqcXVhbnQyLmMgamluY2x1ZGUuaCBqY29uZmlnLmgganBlZ2xpYi5oIGptb3JlY2ZnLmgganBlZ2ludC5oIGplcnJvci5oCi1qdXRpbHMubzoganV0aWxzLmMgamluY2x1ZGUuaCBqY29uZmlnLmgganBlZ2xpYi5oIGptb3JlY2ZnLmgganBlZ2ludC5oIGplcnJvci5oCi1qbWVtbWdyLm86IGptZW1tZ3IuYyBqaW5jbHVkZS5oIGpjb25maWcuaCBqcGVnbGliLmggam1vcmVjZmcuaCBqcGVnaW50LmggamVycm9yLmggam1lbXN5cy5oCi1qbWVtYW5zaS5vOiBqbWVtYW5zaS5jIGppbmNsdWRlLmggamNvbmZpZy5oIGpwZWdsaWIuaCBqbW9yZWNmZy5oIGpwZWdpbnQuaCBqZXJyb3IuaCBqbWVtc3lzLmgKLWptZW1uYW1lLm86IGptZW1uYW1lLmMgamluY2x1ZGUuaCBqY29uZmlnLmgganBlZ2xpYi5oIGptb3JlY2ZnLmgganBlZ2ludC5oIGplcnJvci5oIGptZW1zeXMuaAotam1lbW5vYnMubzogam1lbW5vYnMuYyBqaW5jbHVkZS5oIGpjb25maWcuaCBqcGVnbGliLmggam1vcmVjZmcuaCBqcGVnaW50LmggamVycm9yLmggam1lbXN5cy5oCi1qbWVtZG9zLm86IGptZW1kb3MuYyBqaW5jbHVkZS5oIGpjb25maWcuaCBqcGVnbGliLmggam1vcmVjZmcuaCBqcGVnaW50LmggamVycm9yLmggam1lbXN5cy5oCi1qbWVtbWFjLm86IGptZW1tYWMuYyBqaW5jbHVkZS5oIGpjb25maWcuaCBqcGVnbGliLmggam1vcmVjZmcuaCBqcGVnaW50LmggamVycm9yLmggam1lbXN5cy5oCi1janBlZy5vOiBjanBlZy5jIGNkanBlZy5oIGppbmNsdWRlLmggamNvbmZpZy5oIGpwZWdsaWIuaCBqbW9yZWNmZy5oIGplcnJvci5oIGNkZXJyb3IuaCBqdmVyc2lvbi5oCi1kanBlZy5vOiBkanBlZy5jIGNkanBlZy5oIGppbmNsdWRlLmggamNvbmZpZy5oIGpwZWdsaWIuaCBqbW9yZWNmZy5oIGplcnJvci5oIGNkZXJyb3IuaCBqdmVyc2lvbi5oCi1qcGVndHJhbi5vOiBqcGVndHJhbi5jIGNkanBlZy5oIGppbmNsdWRlLmggamNvbmZpZy5oIGpwZWdsaWIuaCBqbW9yZWNmZy5oIGplcnJvci5oIGNkZXJyb3IuaCB0cmFuc3VwcC5oIGp2ZXJzaW9uLmgKLXJkanBnY29tLm86IHJkanBnY29tLmMgamluY2x1ZGUuaCBqY29uZmlnLmgKLXdyanBnY29tLm86IHdyanBnY29tLmMgamluY2x1ZGUuaCBqY29uZmlnLmgKLWNkanBlZy5vOiBjZGpwZWcuYyBjZGpwZWcuaCBqaW5jbHVkZS5oIGpjb25maWcuaCBqcGVnbGliLmggam1vcmVjZmcuaCBqZXJyb3IuaCBjZGVycm9yLmgKLXJkY29sbWFwLm86IHJkY29sbWFwLmMgY2RqcGVnLmggamluY2x1ZGUuaCBqY29uZmlnLmgganBlZ2xpYi5oIGptb3JlY2ZnLmggamVycm9yLmggY2RlcnJvci5oCi1yZHN3aXRjaC5vOiByZHN3aXRjaC5jIGNkanBlZy5oIGppbmNsdWRlLmggamNvbmZpZy5oIGpwZWdsaWIuaCBqbW9yZWNmZy5oIGplcnJvci5oIGNkZXJyb3IuaAotdHJhbnN1cHAubzogdHJhbnN1cHAuYyBqaW5jbHVkZS5oIGpjb25maWcuaCBqcGVnbGliLmggam1vcmVjZmcuaCBqcGVnaW50LmggamVycm9yLmggdHJhbnN1cHAuaAotcmRwcG0ubzogcmRwcG0uYyBjZGpwZWcuaCBqaW5jbHVkZS5oIGpjb25maWcuaCBqcGVnbGliLmggam1vcmVjZmcuaCBqZXJyb3IuaCBjZGVycm9yLmgKLXdycHBtLm86IHdycHBtLmMgY2RqcGVnLmggamluY2x1ZGUuaCBqY29uZmlnLmgganBlZ2xpYi5oIGptb3JlY2ZnLmggamVycm9yLmggY2RlcnJvci5oCi1yZGdpZi5vOiByZGdpZi5jIGNkanBlZy5oIGppbmNsdWRlLmggamNvbmZpZy5oIGpwZWdsaWIuaCBqbW9yZWNmZy5oIGplcnJvci5oIGNkZXJyb3IuaAotd3JnaWYubzogd3JnaWYuYyBjZGpwZWcuaCBqaW5jbHVkZS5oIGpjb25maWcuaCBqcGVnbGliLmggam1vcmVjZmcuaCBqZXJyb3IuaCBjZGVycm9yLmgKLXJkdGFyZ2EubzogcmR0YXJnYS5jIGNkanBlZy5oIGppbmNsdWRlLmggamNvbmZpZy5oIGpwZWdsaWIuaCBqbW9yZWNmZy5oIGplcnJvci5oIGNkZXJyb3IuaAotd3J0YXJnYS5vOiB3cnRhcmdhLmMgY2RqcGVnLmggamluY2x1ZGUuaCBqY29uZmlnLmgganBlZ2xpYi5oIGptb3JlY2ZnLmggamVycm9yLmggY2RlcnJvci5oCi1yZGJtcC5vOiByZGJtcC5jIGNkanBlZy5oIGppbmNsdWRlLmggamNvbmZpZy5oIGpwZWdsaWIuaCBqbW9yZWNmZy5oIGplcnJvci5oIGNkZXJyb3IuaAotd3JibXAubzogd3JibXAuYyBjZGpwZWcuaCBqaW5jbHVkZS5oIGpjb25maWcuaCBqcGVnbGliLmggam1vcmVjZmcuaCBqZXJyb3IuaCBjZGVycm9yLmgKLXJkcmxlLm86IHJkcmxlLmMgY2RqcGVnLmggamluY2x1ZGUuaCBqY29uZmlnLmgganBlZ2xpYi5oIGptb3JlY2ZnLmggamVycm9yLmggY2RlcnJvci5oCi13cnJsZS5vOiB3cnJsZS5jIGNkanBlZy5oIGppbmNsdWRlLmggamNvbmZpZy5oIGpwZWdsaWIuaCBqbW9yZWNmZy5oIGplcnJvci5oIGNkZXJyb3IuaApkaWZmIC0tZ2l0IGEvbWFrZWZpbGUudmMgYi9tYWtlZmlsZS52YwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZDRkZjlkNC4uMDAwMDAwMAotLS0gYS9tYWtlZmlsZS52YworKysgL2Rldi9udWxsCkBAIC0xLDI3MyArMCwwIEBACi0jIE1ha2VmaWxlIGZvciBJbmRlcGVuZGVudCBKUEVHIEdyb3VwJ3Mgc29mdHdhcmUKLQotIyBUaGlzIG1ha2VmaWxlIGlzIGZvciBNaWNyb3NvZnQgVmlzdWFsIEMrKyBvbiBXaW5kb3dzIE5UIChhbmQgOTU/KS4KLSMgSXQgYnVpbGRzIHRoZSBJSkcgbGlicmFyeSBhcyBhIHN0YXRpY2FsbHkgbGlua2FibGUgbGlicmFyeSAoLkxJQiksCi0jIGFuZCBidWlsZHMgdGhlIHNhbXBsZSBhcHBsaWNhdGlvbnMgYXMgY29uc29sZS1tb2RlIGFwcHMuCi0jIFRoYW5rcyB0byBYaW5nb25nIENoYW5nLCBSYXltb25kIEV2ZXJseSBhbmQgb3RoZXJzLgotCi0jIFJlYWQgaW5zdGFsbGF0aW9uIGluc3RydWN0aW9ucyBiZWZvcmUgc2F5aW5nICJubWFrZSIgISEKLSMgVG8gYnVpbGQgYW4gb3B0aW1pemVkIGxpYnJhcnkgd2l0aG91dCBkZWJ1ZyBpbmZvLCBzYXkgIm5tYWtlIG5vZGVidWc9MSIuCi0KLSMgUHVsbCBpbiBzdGFuZGFyZCB2YXJpYWJsZSBkZWZpbml0aW9ucwotIWluY2x1ZGUgPHdpbjMyLm1haz4KLQotIyBZb3UgbWF5IHdhbnQgdG8gYWRqdXN0IHRoZXNlIGNvbXBpbGVyIG9wdGlvbnM6Ci1DRkxBR1M9ICQoY2ZsYWdzKSAkKGNkZWJ1ZykgJChjdmFycykgLUkuCi0jIEdlbmVyYWxseSwgd2UgcmVjb21tZW5kIGRlZmluaW5nIGFueSBjb25maWd1cmF0aW9uIHN5bWJvbHMgaW4gamNvbmZpZy5oLAotIyBOT1QgdmlhIC1EIHN3aXRjaGVzIGhlcmUuCi0KLSMgTGluay10aW1lIG9wdGlvbnM6Ci1MREZMQUdTPSAkKGxkZWJ1ZykgJChjb25sZmxhZ3MpCi0KLSMgVG8gbGluayBhbnkgc3BlY2lhbCBsaWJyYXJpZXMsIGFkZCB0aGUgbmVjZXNzYXJ5IGNvbW1hbmRzIGhlcmUuCi1MRExJQlM9ICQoY29ubGlicykKLQotIyBQdXQgaGVyZSB0aGUgb2JqZWN0IGZpbGUgbmFtZSBmb3IgdGhlIGNvcnJlY3Qgc3lzdGVtLWRlcGVuZGVudCBtZW1vcnkKLSMgbWFuYWdlciBmaWxlLiAgRm9yIE5UIHdlIHN1Z2dlc3Qgam1lbW5vYnMub2JqLCB3aGljaCBleHBlY3RzIHRoZSBPUyB0bwotIyBwcm92aWRlIGFkZXF1YXRlIHZpcnR1YWwgbWVtb3J5LgotU1lTREVQTUVNPSBqbWVtbm9icy5vYmoKLQotIyBtaXNjZWxsYW5lb3VzIE9TLWRlcGVuZGVudCBzdHVmZgotIyBmaWxlIGRlbGV0aW9uIGNvbW1hbmQKLVJNPSBkZWwKLQotIyBFbmQgb2YgY29uZmlndXJhYmxlIG9wdGlvbnMuCi0KLQotIyBzb3VyY2UgZmlsZXM6IEpQRUcgbGlicmFyeSBwcm9wZXIKLUxJQlNPVVJDRVM9IGphcmljb20uYyBqY2FwaW1pbi5jIGpjYXBpc3RkLmMgamNhcml0aC5jIGpjY29lZmN0LmMgamNjb2xvci5jIFwKLSAgICAgICAgamNkY3RtZ3IuYyBqY2h1ZmYuYyBqY2luaXQuYyBqY21haW5jdC5jIGpjbWFya2VyLmMgamNtYXN0ZXIuYyBcCi0gICAgICAgIGpjb21hcGkuYyBqY3BhcmFtLmMgamNwcmVwY3QuYyBqY3NhbXBsZS5jIGpjdHJhbnMuYyBqZGFwaW1pbi5jIFwKLSAgICAgICAgamRhcGlzdGQuYyBqZGFyaXRoLmMgamRhdGFkc3QuYyBqZGF0YXNyYy5jIGpkY29lZmN0LmMgamRjb2xvci5jIFwKLSAgICAgICAgamRkY3RtZ3IuYyBqZGh1ZmYuYyBqZGlucHV0LmMgamRtYWluY3QuYyBqZG1hcmtlci5jIGpkbWFzdGVyLmMgXAotICAgICAgICBqZG1lcmdlLmMgamRwb3N0Y3QuYyBqZHNhbXBsZS5jIGpkdHJhbnMuYyBqZXJyb3IuYyBqZmRjdGZsdC5jIFwKLSAgICAgICAgamZkY3Rmc3QuYyBqZmRjdGludC5jIGppZGN0Zmx0LmMgamlkY3Rmc3QuYyBqaWRjdGludC5jIGpxdWFudDEuYyBcCi0gICAgICAgIGpxdWFudDIuYyBqdXRpbHMuYyBqbWVtbWdyLmMKLSMgbWVtbWdyIGJhY2sgZW5kczogY29tcGlsZSBvbmx5IG9uZSBvZiB0aGVzZSBpbnRvIGEgd29ya2luZyBsaWJyYXJ5Ci1TWVNERVBTT1VSQ0VTPSBqbWVtYW5zaS5jIGptZW1uYW1lLmMgam1lbW5vYnMuYyBqbWVtZG9zLmMgam1lbW1hYy5jCi0jIHNvdXJjZSBmaWxlczogY2pwZWcvZGpwZWcvanBlZ3RyYW4gYXBwbGljYXRpb25zLCBhbHNvIHJkanBnY29tL3dyanBnY29tCi1BUFBTT1VSQ0VTPSBjanBlZy5jIGRqcGVnLmMganBlZ3RyYW4uYyByZGpwZ2NvbS5jIHdyanBnY29tLmMgY2RqcGVnLmMgXAotICAgICAgICByZGNvbG1hcC5jIHJkc3dpdGNoLmMgdHJhbnN1cHAuYyByZHBwbS5jIHdycHBtLmMgcmRnaWYuYyB3cmdpZi5jIFwKLSAgICAgICAgcmR0YXJnYS5jIHdydGFyZ2EuYyByZGJtcC5jIHdyYm1wLmMgcmRybGUuYyB3cnJsZS5jCi1TT1VSQ0VTPSAkKExJQlNPVVJDRVMpICQoU1lTREVQU09VUkNFUykgJChBUFBTT1VSQ0VTKQotIyBmaWxlcyBpbmNsdWRlZCBieSBzb3VyY2UgZmlsZXMKLUlOQ0xVREVTPSBqZGN0LmggamVycm9yLmggamluY2x1ZGUuaCBqbWVtc3lzLmggam1vcmVjZmcuaCBqcGVnaW50LmggXAotICAgICAgICBqcGVnbGliLmgganZlcnNpb24uaCBjZGpwZWcuaCBjZGVycm9yLmggdHJhbnN1cHAuaAotIyBkb2N1bWVudGF0aW9uLCB0ZXN0LCBhbmQgc3VwcG9ydCBmaWxlcwotRE9DUz0gUkVBRE1FIGluc3RhbGwudHh0IHVzYWdlLnR4dCBjanBlZy4xIGRqcGVnLjEganBlZ3RyYW4uMSByZGpwZ2NvbS4xIFwKLSAgICAgICAgd3JqcGdjb20uMSB3aXphcmQudHh0IGV4YW1wbGUuYyBsaWJqcGVnLnR4dCBzdHJ1Y3R1cmUudHh0IFwKLSAgICAgICAgY29kZXJ1bGVzLnR4dCBmaWxlbGlzdC50eHQgY2hhbmdlLmxvZwotTUtGSUxFUz0gY29uZmlndXJlIE1ha2VmaWxlLmluIG1ha2VmaWxlLmFuc2kgbWFrZWZpbGUudW5peCBtYWtlZmlsZS5iY2MgXAotICAgICAgICBtYWtlZmlsZS5tYzYgbWFrZWZpbGUuZGogbWFrZWZpbGUud2F0IG1ha2VmaWxlLnZjIG1ha2VqZHN3LnZjNiBcCi0gICAgICAgIG1ha2VhZHN3LnZjNiBtYWtlamRlcC52YzYgbWFrZWpkc3AudmM2IG1ha2VqbWFrLnZjNiBtYWtlY2RlcC52YzYgXAotICAgICAgICBtYWtlY2RzcC52YzYgbWFrZWNtYWsudmM2IG1ha2VkZGVwLnZjNiBtYWtlZGRzcC52YzYgbWFrZWRtYWsudmM2IFwKLSAgICAgICAgbWFrZXRkZXAudmM2IG1ha2V0ZHNwLnZjNiBtYWtldG1hay52YzYgbWFrZXJkZXAudmM2IG1ha2VyZHNwLnZjNiBcCi0gICAgICAgIG1ha2VybWFrLnZjNiBtYWtld2RlcC52YzYgbWFrZXdkc3AudmM2IG1ha2V3bWFrLnZjNiBtYWtlanNsbi52MTAgXAotICAgICAgICBtYWtlYXNsbi52MTAgbWFrZWp2Y3gudjEwIG1ha2VqZmlsLnYxMCBtYWtlY3ZjeC52MTAgbWFrZWNmaWwudjEwIFwKLSAgICAgICAgbWFrZWR2Y3gudjEwIG1ha2VkZmlsLnYxMCBtYWtldHZjeC52MTAgbWFrZXRmaWwudjEwIG1ha2VydmN4LnYxMCBcCi0gICAgICAgIG1ha2VyZmlsLnYxMCBtYWtld3ZjeC52MTAgbWFrZXdmaWwudjEwIG1ha2Vwcm9qLm1hYyBtYWtjanBlZy5zdCBcCi0gICAgICAgIG1ha2RqcGVnLnN0IG1ha2xqcGVnLnN0IG1ha3RqcGVnLnN0IG1ha2VmaWxlLm1hbnggbWFrZWZpbGUuc2FzIFwKLSAgICAgICAgbWFrZWZpbGUubW1zIG1ha2VmaWxlLnZtcyBtYWt2bXMub3B0Ci1DT05GSUdGSUxFUz0gamNvbmZpZy5jZmcgamNvbmZpZy5iY2MgamNvbmZpZy5tYzYgamNvbmZpZy5kaiBqY29uZmlnLndhdCBcCi0gICAgICAgIGpjb25maWcudmMgamNvbmZpZy5tYWMgamNvbmZpZy5zdCBqY29uZmlnLm1hbnggamNvbmZpZy5zYXMgXAotICAgICAgICBqY29uZmlnLnZtcwotQ09ORklHVVJFRklMRVM9IGNvbmZpZy5ndWVzcyBjb25maWcuc3ViIGluc3RhbGwtc2ggbHRtYWluLnNoIGRlcGNvbXAgbWlzc2luZwotT1RIRVJGSUxFUz0gamNvbmZpZy50eHQgY2tjb25maWcuYyBhbnNpMmtuci5jIGFuc2kya25yLjEgam1lbWRvc2EuYXNtIFwKLSAgICAgICAgbGlianBlZy5tYXAKLVRFU1RGSUxFUz0gdGVzdG9yaWcuanBnIHRlc3RpbWcucHBtIHRlc3RpbWcuYm1wIHRlc3RpbWcuanBnIHRlc3Rwcm9nLmpwZyBcCi0gICAgICAgIHRlc3RpbWdwLmpwZwotRElTVEZJTEVTPSAkKERPQ1MpICQoTUtGSUxFUykgJChDT05GSUdGSUxFUykgJChTT1VSQ0VTKSAkKElOQ0xVREVTKSBcCi0gICAgICAgICQoQ09ORklHVVJFRklMRVMpICQoT1RIRVJGSUxFUykgJChURVNURklMRVMpCi0jIGxpYnJhcnkgb2JqZWN0IGZpbGVzIGNvbW1vbiB0byBjb21wcmVzc2lvbiBhbmQgZGVjb21wcmVzc2lvbgotQ09NT0JKRUNUUz0gamFyaWNvbS5vYmogamNvbWFwaS5vYmoganV0aWxzLm9iaiBqZXJyb3Iub2JqIGptZW1tZ3Iub2JqICQoU1lTREVQTUVNKQotIyBjb21wcmVzc2lvbiBsaWJyYXJ5IG9iamVjdCBmaWxlcwotQ0xJQk9CSkVDVFM9IGpjYXBpbWluLm9iaiBqY2FwaXN0ZC5vYmogamNhcml0aC5vYmogamN0cmFucy5vYmogamNwYXJhbS5vYmogXAotICAgICAgICBqZGF0YWRzdC5vYmogamNpbml0Lm9iaiBqY21hc3Rlci5vYmogamNtYXJrZXIub2JqIGpjbWFpbmN0Lm9iaiBcCi0gICAgICAgIGpjcHJlcGN0Lm9iaiBqY2NvZWZjdC5vYmogamNjb2xvci5vYmogamNzYW1wbGUub2JqIGpjaHVmZi5vYmogXAotICAgICAgICBqY2RjdG1nci5vYmogamZkY3Rmc3Qub2JqIGpmZGN0Zmx0Lm9iaiBqZmRjdGludC5vYmoKLSMgZGVjb21wcmVzc2lvbiBsaWJyYXJ5IG9iamVjdCBmaWxlcwotRExJQk9CSkVDVFM9IGpkYXBpbWluLm9iaiBqZGFwaXN0ZC5vYmogamRhcml0aC5vYmogamR0cmFucy5vYmogamRhdGFzcmMub2JqIFwKLSAgICAgICAgamRtYXN0ZXIub2JqIGpkaW5wdXQub2JqIGpkbWFya2VyLm9iaiBqZGh1ZmYub2JqIGpkbWFpbmN0Lm9iaiBcCi0gICAgICAgIGpkY29lZmN0Lm9iaiBqZHBvc3RjdC5vYmogamRkY3RtZ3Iub2JqIGppZGN0ZnN0Lm9iaiBqaWRjdGZsdC5vYmogXAotICAgICAgICBqaWRjdGludC5vYmogamRzYW1wbGUub2JqIGpkY29sb3Iub2JqIGpxdWFudDEub2JqIGpxdWFudDIub2JqIFwKLSAgICAgICAgamRtZXJnZS5vYmoKLSMgVGhlc2Ugb2JqZWN0ZmlsZXMgYXJlIGluY2x1ZGVkIGluIGxpYmpwZWcubGliCi1MSUJPQkpFQ1RTPSAkKENMSUJPQkpFQ1RTKSAkKERMSUJPQkpFQ1RTKSAkKENPTU9CSkVDVFMpCi0jIG9iamVjdCBmaWxlcyBmb3Igc2FtcGxlIGFwcGxpY2F0aW9ucyAoZXhjbHVkaW5nIGxpYnJhcnkgZmlsZXMpCi1DT0JKRUNUUz0gY2pwZWcub2JqIHJkcHBtLm9iaiByZGdpZi5vYmogcmR0YXJnYS5vYmogcmRybGUub2JqIHJkYm1wLm9iaiBcCi0gICAgICAgIHJkc3dpdGNoLm9iaiBjZGpwZWcub2JqCi1ET0JKRUNUUz0gZGpwZWcub2JqIHdycHBtLm9iaiB3cmdpZi5vYmogd3J0YXJnYS5vYmogd3JybGUub2JqIHdyYm1wLm9iaiBcCi0gICAgICAgIHJkY29sbWFwLm9iaiBjZGpwZWcub2JqCi1UUk9CSkVDVFM9IGpwZWd0cmFuLm9iaiByZHN3aXRjaC5vYmogY2RqcGVnLm9iaiB0cmFuc3VwcC5vYmoKLQotIyBUZW1wbGF0ZSBjb21tYW5kIGZvciBjb21waWxpbmcgLmMgdG8gLm9iagotLmMub2JqOgotCSQoY2MpICQoQ0ZMQUdTKSAkKi5jCi0KLQotYWxsOiBsaWJqcGVnLmxpYiBjanBlZy5leGUgZGpwZWcuZXhlIGpwZWd0cmFuLmV4ZSByZGpwZ2NvbS5leGUgd3JqcGdjb20uZXhlCi0KLWxpYmpwZWcubGliOiAkKExJQk9CSkVDVFMpCi0JJChSTSkgbGlianBlZy5saWIKLQlsaWIgLW91dDpsaWJqcGVnLmxpYiAgJChMSUJPQkpFQ1RTKQotCi1janBlZy5leGU6ICQoQ09CSkVDVFMpIGxpYmpwZWcubGliCi0JJChsaW5rKSAkKExERkxBR1MpIC1vdXQ6Y2pwZWcuZXhlICQoQ09CSkVDVFMpIGxpYmpwZWcubGliICQoTERMSUJTKQotCi1kanBlZy5leGU6ICQoRE9CSkVDVFMpIGxpYmpwZWcubGliCi0JJChsaW5rKSAkKExERkxBR1MpIC1vdXQ6ZGpwZWcuZXhlICQoRE9CSkVDVFMpIGxpYmpwZWcubGliICQoTERMSUJTKQotCi1qcGVndHJhbi5leGU6ICQoVFJPQkpFQ1RTKSBsaWJqcGVnLmxpYgotCSQobGluaykgJChMREZMQUdTKSAtb3V0OmpwZWd0cmFuLmV4ZSAkKFRST0JKRUNUUykgbGlianBlZy5saWIgJChMRExJQlMpCi0KLXJkanBnY29tLmV4ZTogcmRqcGdjb20ub2JqCi0JJChsaW5rKSAkKExERkxBR1MpIC1vdXQ6cmRqcGdjb20uZXhlIHJkanBnY29tLm9iaiAkKExETElCUykKLQotd3JqcGdjb20uZXhlOiB3cmpwZ2NvbS5vYmoKLQkkKGxpbmspICQoTERGTEFHUykgLW91dDp3cmpwZ2NvbS5leGUgd3JqcGdjb20ub2JqICQoTERMSUJTKQotCi0KLWNsZWFuOgotCSQoUk0pICoub2JqICouZXhlIGxpYmpwZWcubGliCi0JJChSTSkgdGVzdG91dCoKLQotc2V0dXAtdmM2OgotCXJlbiBqY29uZmlnLnZjIGpjb25maWcuaAotCXJlbiBtYWtlamRzdy52YzYganBlZy5kc3cKLQlyZW4gbWFrZWFkc3cudmM2IGFwcHMuZHN3Ci0JcmVuIG1ha2VqbWFrLnZjNiBqcGVnLm1hawotCXJlbiBtYWtlamRlcC52YzYganBlZy5kZXAKLQlyZW4gbWFrZWpkc3AudmM2IGpwZWcuZHNwCi0JcmVuIG1ha2VjbWFrLnZjNiBjanBlZy5tYWsKLQlyZW4gbWFrZWNkZXAudmM2IGNqcGVnLmRlcAotCXJlbiBtYWtlY2RzcC52YzYgY2pwZWcuZHNwCi0JcmVuIG1ha2VkbWFrLnZjNiBkanBlZy5tYWsKLQlyZW4gbWFrZWRkZXAudmM2IGRqcGVnLmRlcAotCXJlbiBtYWtlZGRzcC52YzYgZGpwZWcuZHNwCi0JcmVuIG1ha2V0bWFrLnZjNiBqcGVndHJhbi5tYWsKLQlyZW4gbWFrZXRkZXAudmM2IGpwZWd0cmFuLmRlcAotCXJlbiBtYWtldGRzcC52YzYganBlZ3RyYW4uZHNwCi0JcmVuIG1ha2VybWFrLnZjNiByZGpwZ2NvbS5tYWsKLQlyZW4gbWFrZXJkZXAudmM2IHJkanBnY29tLmRlcAotCXJlbiBtYWtlcmRzcC52YzYgcmRqcGdjb20uZHNwCi0JcmVuIG1ha2V3bWFrLnZjNiB3cmpwZ2NvbS5tYWsKLQlyZW4gbWFrZXdkZXAudmM2IHdyanBnY29tLmRlcAotCXJlbiBtYWtld2RzcC52YzYgd3JqcGdjb20uZHNwCi0KLXNldHVwLXYxMDoKLQlyZW4gamNvbmZpZy52YyBqY29uZmlnLmgKLQlyZW4gbWFrZWpzbG4udjEwIGpwZWcuc2xuCi0JcmVuIG1ha2Vhc2xuLnYxMCBhcHBzLnNsbgotCXJlbiBtYWtlanZjeC52MTAganBlZy52Y3hwcm9qCi0JcmVuIG1ha2VqZmlsLnYxMCBqcGVnLnZjeHByb2ouZmlsdGVycwotCXJlbiBtYWtlY3ZjeC52MTAgY2pwZWcudmN4cHJvagotCXJlbiBtYWtlY2ZpbC52MTAgY2pwZWcudmN4cHJvai5maWx0ZXJzCi0JcmVuIG1ha2VkdmN4LnYxMCBkanBlZy52Y3hwcm9qCi0JcmVuIG1ha2VkZmlsLnYxMCBkanBlZy52Y3hwcm9qLmZpbHRlcnMKLQlyZW4gbWFrZXR2Y3gudjEwIGpwZWd0cmFuLnZjeHByb2oKLQlyZW4gbWFrZXRmaWwudjEwIGpwZWd0cmFuLnZjeHByb2ouZmlsdGVycwotCXJlbiBtYWtlcnZjeC52MTAgcmRqcGdjb20udmN4cHJvagotCXJlbiBtYWtlcmZpbC52MTAgcmRqcGdjb20udmN4cHJvai5maWx0ZXJzCi0JcmVuIG1ha2V3dmN4LnYxMCB3cmpwZ2NvbS52Y3hwcm9qCi0JcmVuIG1ha2V3ZmlsLnYxMCB3cmpwZ2NvbS52Y3hwcm9qLmZpbHRlcnMKLQotdGVzdDoKLQlJRiBFWElTVCB0ZXN0b3V0KiAkKFJNKSB0ZXN0b3V0KgotCS5cZGpwZWcgLWRjdCBpbnQgLXBwbSAtb3V0ZmlsZSB0ZXN0b3V0LnBwbSAgdGVzdG9yaWcuanBnCi0JLlxkanBlZyAtZGN0IGludCAtYm1wIC1jb2xvcnMgMjU2IC1vdXRmaWxlIHRlc3RvdXQuYm1wICB0ZXN0b3JpZy5qcGcKLQkuXGNqcGVnIC1kY3QgaW50IC1vdXRmaWxlIHRlc3RvdXQuanBnICB0ZXN0aW1nLnBwbQotCS5cZGpwZWcgLWRjdCBpbnQgLXBwbSAtb3V0ZmlsZSB0ZXN0b3V0cC5wcG0gdGVzdHByb2cuanBnCi0JLlxjanBlZyAtZGN0IGludCAtcHJvZ3Jlc3NpdmUgLW9wdCAtb3V0ZmlsZSB0ZXN0b3V0cC5qcGcgdGVzdGltZy5wcG0KLQkuXGpwZWd0cmFuIC1vdXRmaWxlIHRlc3RvdXR0LmpwZyB0ZXN0cHJvZy5qcGcKLQlmYyAvYiB0ZXN0aW1nLnBwbSB0ZXN0b3V0LnBwbQotCWZjIC9iIHRlc3RpbWcuYm1wIHRlc3RvdXQuYm1wCi0JZmMgL2IgdGVzdGltZy5qcGcgdGVzdG91dC5qcGcKLQlmYyAvYiB0ZXN0aW1nLnBwbSB0ZXN0b3V0cC5wcG0KLQlmYyAvYiB0ZXN0aW1ncC5qcGcgdGVzdG91dHAuanBnCi0JZmMgL2IgdGVzdG9yaWcuanBnIHRlc3RvdXR0LmpwZwotCi10ZXN0LWJ1aWxkOgotCUlGIEVYSVNUIHRlc3RvdXQqICQoUk0pIHRlc3RvdXQqCi0JLlxkanBlZ1xSZWxlYXNlXGRqcGVnIC1kY3QgaW50IC1wcG0gLW91dGZpbGUgdGVzdG91dC5wcG0gIHRlc3RvcmlnLmpwZwotCS5cZGpwZWdcUmVsZWFzZVxkanBlZyAtZGN0IGludCAtYm1wIC1jb2xvcnMgMjU2IC1vdXRmaWxlIHRlc3RvdXQuYm1wICB0ZXN0b3JpZy5qcGcKLQkuXGNqcGVnXFJlbGVhc2VcY2pwZWcgLWRjdCBpbnQgLW91dGZpbGUgdGVzdG91dC5qcGcgIHRlc3RpbWcucHBtCi0JLlxkanBlZ1xSZWxlYXNlXGRqcGVnIC1kY3QgaW50IC1wcG0gLW91dGZpbGUgdGVzdG91dHAucHBtIHRlc3Rwcm9nLmpwZwotCS5cY2pwZWdcUmVsZWFzZVxjanBlZyAtZGN0IGludCAtcHJvZ3Jlc3NpdmUgLW9wdCAtb3V0ZmlsZSB0ZXN0b3V0cC5qcGcgdGVzdGltZy5wcG0KLQkuXGpwZWd0cmFuXFJlbGVhc2VcanBlZ3RyYW4gLW91dGZpbGUgdGVzdG91dHQuanBnIHRlc3Rwcm9nLmpwZwotCWZjIC9iIHRlc3RpbWcucHBtIHRlc3RvdXQucHBtCi0JZmMgL2IgdGVzdGltZy5ibXAgdGVzdG91dC5ibXAKLQlmYyAvYiB0ZXN0aW1nLmpwZyB0ZXN0b3V0LmpwZwotCWZjIC9iIHRlc3RpbWcucHBtIHRlc3RvdXRwLnBwbQotCWZjIC9iIHRlc3RpbWdwLmpwZyB0ZXN0b3V0cC5qcGcKLQlmYyAvYiB0ZXN0b3JpZy5qcGcgdGVzdG91dHQuanBnCi0KLQotamFyaWNvbS5vYmo6IGphcmljb20uYyBqaW5jbHVkZS5oIGpjb25maWcuaCBqcGVnbGliLmggam1vcmVjZmcuaCBqcGVnaW50LmggamVycm9yLmgKLWpjYXBpbWluLm9iajogamNhcGltaW4uYyBqaW5jbHVkZS5oIGpjb25maWcuaCBqcGVnbGliLmggam1vcmVjZmcuaCBqcGVnaW50LmggamVycm9yLmgKLWpjYXBpc3RkLm9iajogamNhcGlzdGQuYyBqaW5jbHVkZS5oIGpjb25maWcuaCBqcGVnbGliLmggam1vcmVjZmcuaCBqcGVnaW50LmggamVycm9yLmgKLWpjYXJpdGgub2JqOiBqY2FyaXRoLmMgamluY2x1ZGUuaCBqY29uZmlnLmgganBlZ2xpYi5oIGptb3JlY2ZnLmgganBlZ2ludC5oIGplcnJvci5oCi1qY2NvZWZjdC5vYmo6IGpjY29lZmN0LmMgamluY2x1ZGUuaCBqY29uZmlnLmgganBlZ2xpYi5oIGptb3JlY2ZnLmgganBlZ2ludC5oIGplcnJvci5oCi1qY2NvbG9yLm9iajogamNjb2xvci5jIGppbmNsdWRlLmggamNvbmZpZy5oIGpwZWdsaWIuaCBqbW9yZWNmZy5oIGpwZWdpbnQuaCBqZXJyb3IuaAotamNkY3RtZ3Iub2JqOiBqY2RjdG1nci5jIGppbmNsdWRlLmggamNvbmZpZy5oIGpwZWdsaWIuaCBqbW9yZWNmZy5oIGpwZWdpbnQuaCBqZXJyb3IuaCBqZGN0LmgKLWpjaHVmZi5vYmo6IGpjaHVmZi5jIGppbmNsdWRlLmggamNvbmZpZy5oIGpwZWdsaWIuaCBqbW9yZWNmZy5oIGpwZWdpbnQuaCBqZXJyb3IuaAotamNpbml0Lm9iajogamNpbml0LmMgamluY2x1ZGUuaCBqY29uZmlnLmgganBlZ2xpYi5oIGptb3JlY2ZnLmgganBlZ2ludC5oIGplcnJvci5oCi1qY21haW5jdC5vYmo6IGpjbWFpbmN0LmMgamluY2x1ZGUuaCBqY29uZmlnLmgganBlZ2xpYi5oIGptb3JlY2ZnLmgganBlZ2ludC5oIGplcnJvci5oCi1qY21hcmtlci5vYmo6IGpjbWFya2VyLmMgamluY2x1ZGUuaCBqY29uZmlnLmgganBlZ2xpYi5oIGptb3JlY2ZnLmgganBlZ2ludC5oIGplcnJvci5oCi1qY21hc3Rlci5vYmo6IGpjbWFzdGVyLmMgamluY2x1ZGUuaCBqY29uZmlnLmgganBlZ2xpYi5oIGptb3JlY2ZnLmgganBlZ2ludC5oIGplcnJvci5oCi1qY29tYXBpLm9iajogamNvbWFwaS5jIGppbmNsdWRlLmggamNvbmZpZy5oIGpwZWdsaWIuaCBqbW9yZWNmZy5oIGpwZWdpbnQuaCBqZXJyb3IuaAotamNwYXJhbS5vYmo6IGpjcGFyYW0uYyBqaW5jbHVkZS5oIGpjb25maWcuaCBqcGVnbGliLmggam1vcmVjZmcuaCBqcGVnaW50LmggamVycm9yLmgKLWpjcHJlcGN0Lm9iajogamNwcmVwY3QuYyBqaW5jbHVkZS5oIGpjb25maWcuaCBqcGVnbGliLmggam1vcmVjZmcuaCBqcGVnaW50LmggamVycm9yLmgKLWpjc2FtcGxlLm9iajogamNzYW1wbGUuYyBqaW5jbHVkZS5oIGpjb25maWcuaCBqcGVnbGliLmggam1vcmVjZmcuaCBqcGVnaW50LmggamVycm9yLmgKLWpjdHJhbnMub2JqOiBqY3RyYW5zLmMgamluY2x1ZGUuaCBqY29uZmlnLmgganBlZ2xpYi5oIGptb3JlY2ZnLmgganBlZ2ludC5oIGplcnJvci5oCi1qZGFwaW1pbi5vYmo6IGpkYXBpbWluLmMgamluY2x1ZGUuaCBqY29uZmlnLmgganBlZ2xpYi5oIGptb3JlY2ZnLmgganBlZ2ludC5oIGplcnJvci5oCi1qZGFwaXN0ZC5vYmo6IGpkYXBpc3RkLmMgamluY2x1ZGUuaCBqY29uZmlnLmgganBlZ2xpYi5oIGptb3JlY2ZnLmgganBlZ2ludC5oIGplcnJvci5oCi1qZGFyaXRoLm9iajogamRhcml0aC5jIGppbmNsdWRlLmggamNvbmZpZy5oIGpwZWdsaWIuaCBqbW9yZWNmZy5oIGpwZWdpbnQuaCBqZXJyb3IuaAotamRhdGFkc3Qub2JqOiBqZGF0YWRzdC5jIGppbmNsdWRlLmggamNvbmZpZy5oIGpwZWdsaWIuaCBqbW9yZWNmZy5oIGplcnJvci5oCi1qZGF0YXNyYy5vYmo6IGpkYXRhc3JjLmMgamluY2x1ZGUuaCBqY29uZmlnLmgganBlZ2xpYi5oIGptb3JlY2ZnLmggamVycm9yLmgKLWpkY29lZmN0Lm9iajogamRjb2VmY3QuYyBqaW5jbHVkZS5oIGpjb25maWcuaCBqcGVnbGliLmggam1vcmVjZmcuaCBqcGVnaW50LmggamVycm9yLmgKLWpkY29sb3Iub2JqOiBqZGNvbG9yLmMgamluY2x1ZGUuaCBqY29uZmlnLmgganBlZ2xpYi5oIGptb3JlY2ZnLmgganBlZ2ludC5oIGplcnJvci5oCi1qZGRjdG1nci5vYmo6IGpkZGN0bWdyLmMgamluY2x1ZGUuaCBqY29uZmlnLmgganBlZ2xpYi5oIGptb3JlY2ZnLmgganBlZ2ludC5oIGplcnJvci5oIGpkY3QuaAotamRodWZmLm9iajogamRodWZmLmMgamluY2x1ZGUuaCBqY29uZmlnLmgganBlZ2xpYi5oIGptb3JlY2ZnLmgganBlZ2ludC5oIGplcnJvci5oCi1qZGlucHV0Lm9iajogamRpbnB1dC5jIGppbmNsdWRlLmggamNvbmZpZy5oIGpwZWdsaWIuaCBqbW9yZWNmZy5oIGpwZWdpbnQuaCBqZXJyb3IuaAotamRtYWluY3Qub2JqOiBqZG1haW5jdC5jIGppbmNsdWRlLmggamNvbmZpZy5oIGpwZWdsaWIuaCBqbW9yZWNmZy5oIGpwZWdpbnQuaCBqZXJyb3IuaAotamRtYXJrZXIub2JqOiBqZG1hcmtlci5jIGppbmNsdWRlLmggamNvbmZpZy5oIGpwZWdsaWIuaCBqbW9yZWNmZy5oIGpwZWdpbnQuaCBqZXJyb3IuaAotamRtYXN0ZXIub2JqOiBqZG1hc3Rlci5jIGppbmNsdWRlLmggamNvbmZpZy5oIGpwZWdsaWIuaCBqbW9yZWNmZy5oIGpwZWdpbnQuaCBqZXJyb3IuaAotamRtZXJnZS5vYmo6IGpkbWVyZ2UuYyBqaW5jbHVkZS5oIGpjb25maWcuaCBqcGVnbGliLmggam1vcmVjZmcuaCBqcGVnaW50LmggamVycm9yLmgKLWpkcG9zdGN0Lm9iajogamRwb3N0Y3QuYyBqaW5jbHVkZS5oIGpjb25maWcuaCBqcGVnbGliLmggam1vcmVjZmcuaCBqcGVnaW50LmggamVycm9yLmgKLWpkc2FtcGxlLm9iajogamRzYW1wbGUuYyBqaW5jbHVkZS5oIGpjb25maWcuaCBqcGVnbGliLmggam1vcmVjZmcuaCBqcGVnaW50LmggamVycm9yLmgKLWpkdHJhbnMub2JqOiBqZHRyYW5zLmMgamluY2x1ZGUuaCBqY29uZmlnLmgganBlZ2xpYi5oIGptb3JlY2ZnLmgganBlZ2ludC5oIGplcnJvci5oCi1qZXJyb3Iub2JqOiBqZXJyb3IuYyBqaW5jbHVkZS5oIGpjb25maWcuaCBqcGVnbGliLmggam1vcmVjZmcuaCBqdmVyc2lvbi5oIGplcnJvci5oCi1qZmRjdGZsdC5vYmo6IGpmZGN0Zmx0LmMgamluY2x1ZGUuaCBqY29uZmlnLmgganBlZ2xpYi5oIGptb3JlY2ZnLmgganBlZ2ludC5oIGplcnJvci5oIGpkY3QuaAotamZkY3Rmc3Qub2JqOiBqZmRjdGZzdC5jIGppbmNsdWRlLmggamNvbmZpZy5oIGpwZWdsaWIuaCBqbW9yZWNmZy5oIGpwZWdpbnQuaCBqZXJyb3IuaCBqZGN0LmgKLWpmZGN0aW50Lm9iajogamZkY3RpbnQuYyBqaW5jbHVkZS5oIGpjb25maWcuaCBqcGVnbGliLmggam1vcmVjZmcuaCBqcGVnaW50LmggamVycm9yLmggamRjdC5oCi1qaWRjdGZsdC5vYmo6IGppZGN0Zmx0LmMgamluY2x1ZGUuaCBqY29uZmlnLmgganBlZ2xpYi5oIGptb3JlY2ZnLmgganBlZ2ludC5oIGplcnJvci5oIGpkY3QuaAotamlkY3Rmc3Qub2JqOiBqaWRjdGZzdC5jIGppbmNsdWRlLmggamNvbmZpZy5oIGpwZWdsaWIuaCBqbW9yZWNmZy5oIGpwZWdpbnQuaCBqZXJyb3IuaCBqZGN0LmgKLWppZGN0aW50Lm9iajogamlkY3RpbnQuYyBqaW5jbHVkZS5oIGpjb25maWcuaCBqcGVnbGliLmggam1vcmVjZmcuaCBqcGVnaW50LmggamVycm9yLmggamRjdC5oCi1qcXVhbnQxLm9iajoganF1YW50MS5jIGppbmNsdWRlLmggamNvbmZpZy5oIGpwZWdsaWIuaCBqbW9yZWNmZy5oIGpwZWdpbnQuaCBqZXJyb3IuaAotanF1YW50Mi5vYmo6IGpxdWFudDIuYyBqaW5jbHVkZS5oIGpjb25maWcuaCBqcGVnbGliLmggam1vcmVjZmcuaCBqcGVnaW50LmggamVycm9yLmgKLWp1dGlscy5vYmo6IGp1dGlscy5jIGppbmNsdWRlLmggamNvbmZpZy5oIGpwZWdsaWIuaCBqbW9yZWNmZy5oIGpwZWdpbnQuaCBqZXJyb3IuaAotam1lbW1nci5vYmo6IGptZW1tZ3IuYyBqaW5jbHVkZS5oIGpjb25maWcuaCBqcGVnbGliLmggam1vcmVjZmcuaCBqcGVnaW50LmggamVycm9yLmggam1lbXN5cy5oCi1qbWVtYW5zaS5vYmo6IGptZW1hbnNpLmMgamluY2x1ZGUuaCBqY29uZmlnLmgganBlZ2xpYi5oIGptb3JlY2ZnLmgganBlZ2ludC5oIGplcnJvci5oIGptZW1zeXMuaAotam1lbW5hbWUub2JqOiBqbWVtbmFtZS5jIGppbmNsdWRlLmggamNvbmZpZy5oIGpwZWdsaWIuaCBqbW9yZWNmZy5oIGpwZWdpbnQuaCBqZXJyb3IuaCBqbWVtc3lzLmgKLWptZW1ub2JzLm9iajogam1lbW5vYnMuYyBqaW5jbHVkZS5oIGpjb25maWcuaCBqcGVnbGliLmggam1vcmVjZmcuaCBqcGVnaW50LmggamVycm9yLmggam1lbXN5cy5oCi1qbWVtZG9zLm9iajogam1lbWRvcy5jIGppbmNsdWRlLmggamNvbmZpZy5oIGpwZWdsaWIuaCBqbW9yZWNmZy5oIGpwZWdpbnQuaCBqZXJyb3IuaCBqbWVtc3lzLmgKLWptZW1tYWMub2JqOiBqbWVtbWFjLmMgamluY2x1ZGUuaCBqY29uZmlnLmgganBlZ2xpYi5oIGptb3JlY2ZnLmgganBlZ2ludC5oIGplcnJvci5oIGptZW1zeXMuaAotY2pwZWcub2JqOiBjanBlZy5jIGNkanBlZy5oIGppbmNsdWRlLmggamNvbmZpZy5oIGpwZWdsaWIuaCBqbW9yZWNmZy5oIGplcnJvci5oIGNkZXJyb3IuaCBqdmVyc2lvbi5oCi1kanBlZy5vYmo6IGRqcGVnLmMgY2RqcGVnLmggamluY2x1ZGUuaCBqY29uZmlnLmgganBlZ2xpYi5oIGptb3JlY2ZnLmggamVycm9yLmggY2RlcnJvci5oIGp2ZXJzaW9uLmgKLWpwZWd0cmFuLm9iajoganBlZ3RyYW4uYyBjZGpwZWcuaCBqaW5jbHVkZS5oIGpjb25maWcuaCBqcGVnbGliLmggam1vcmVjZmcuaCBqZXJyb3IuaCBjZGVycm9yLmggdHJhbnN1cHAuaCBqdmVyc2lvbi5oCi1yZGpwZ2NvbS5vYmo6IHJkanBnY29tLmMgamluY2x1ZGUuaCBqY29uZmlnLmgKLXdyanBnY29tLm9iajogd3JqcGdjb20uYyBqaW5jbHVkZS5oIGpjb25maWcuaAotY2RqcGVnLm9iajogY2RqcGVnLmMgY2RqcGVnLmggamluY2x1ZGUuaCBqY29uZmlnLmgganBlZ2xpYi5oIGptb3JlY2ZnLmggamVycm9yLmggY2RlcnJvci5oCi1yZGNvbG1hcC5vYmo6IHJkY29sbWFwLmMgY2RqcGVnLmggamluY2x1ZGUuaCBqY29uZmlnLmgganBlZ2xpYi5oIGptb3JlY2ZnLmggamVycm9yLmggY2RlcnJvci5oCi1yZHN3aXRjaC5vYmo6IHJkc3dpdGNoLmMgY2RqcGVnLmggamluY2x1ZGUuaCBqY29uZmlnLmgganBlZ2xpYi5oIGptb3JlY2ZnLmggamVycm9yLmggY2RlcnJvci5oCi10cmFuc3VwcC5vYmo6IHRyYW5zdXBwLmMgamluY2x1ZGUuaCBqY29uZmlnLmgganBlZ2xpYi5oIGptb3JlY2ZnLmgganBlZ2ludC5oIGplcnJvci5oIHRyYW5zdXBwLmgKLXJkcHBtLm9iajogcmRwcG0uYyBjZGpwZWcuaCBqaW5jbHVkZS5oIGpjb25maWcuaCBqcGVnbGliLmggam1vcmVjZmcuaCBqZXJyb3IuaCBjZGVycm9yLmgKLXdycHBtLm9iajogd3JwcG0uYyBjZGpwZWcuaCBqaW5jbHVkZS5oIGpjb25maWcuaCBqcGVnbGliLmggam1vcmVjZmcuaCBqZXJyb3IuaCBjZGVycm9yLmgKLXJkZ2lmLm9iajogcmRnaWYuYyBjZGpwZWcuaCBqaW5jbHVkZS5oIGpjb25maWcuaCBqcGVnbGliLmggam1vcmVjZmcuaCBqZXJyb3IuaCBjZGVycm9yLmgKLXdyZ2lmLm9iajogd3JnaWYuYyBjZGpwZWcuaCBqaW5jbHVkZS5oIGpjb25maWcuaCBqcGVnbGliLmggam1vcmVjZmcuaCBqZXJyb3IuaCBjZGVycm9yLmgKLXJkdGFyZ2Eub2JqOiByZHRhcmdhLmMgY2RqcGVnLmggamluY2x1ZGUuaCBqY29uZmlnLmgganBlZ2xpYi5oIGptb3JlY2ZnLmggamVycm9yLmggY2RlcnJvci5oCi13cnRhcmdhLm9iajogd3J0YXJnYS5jIGNkanBlZy5oIGppbmNsdWRlLmggamNvbmZpZy5oIGpwZWdsaWIuaCBqbW9yZWNmZy5oIGplcnJvci5oIGNkZXJyb3IuaAotcmRibXAub2JqOiByZGJtcC5jIGNkanBlZy5oIGppbmNsdWRlLmggamNvbmZpZy5oIGpwZWdsaWIuaCBqbW9yZWNmZy5oIGplcnJvci5oIGNkZXJyb3IuaAotd3JibXAub2JqOiB3cmJtcC5jIGNkanBlZy5oIGppbmNsdWRlLmggamNvbmZpZy5oIGpwZWdsaWIuaCBqbW9yZWNmZy5oIGplcnJvci5oIGNkZXJyb3IuaAotcmRybGUub2JqOiByZHJsZS5jIGNkanBlZy5oIGppbmNsdWRlLmggamNvbmZpZy5oIGpwZWdsaWIuaCBqbW9yZWNmZy5oIGplcnJvci5oIGNkZXJyb3IuaAotd3JybGUub2JqOiB3cnJsZS5jIGNkanBlZy5oIGppbmNsdWRlLmggamNvbmZpZy5oIGpwZWdsaWIuaCBqbW9yZWNmZy5oIGplcnJvci5oIGNkZXJyb3IuaApkaWZmIC0tZ2l0IGEvbWFrZWZpbGUudm1zIGIvbWFrZWZpbGUudm1zCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhMDdkMDcwLi4wMDAwMDAwCi0tLSBhL21ha2VmaWxlLnZtcworKysgL2Rldi9udWxsCkBAIC0xLDE0MiArMCwwIEBACi0kISBNYWtlZmlsZSBmb3IgSW5kZXBlbmRlbnQgSlBFRyBHcm91cCdzIHNvZnR3YXJlCi0kIQotJCEgVGhpcyBpcyBhIGNvbW1hbmQgcHJvY2VkdXJlIGZvciBEaWdpdGFsIFZNUyBzeXN0ZW1zIHRoYXQgZG8gbm90IGhhdmUgTU1TLgotJCEgSXQgYnVpbGRzIHRoZSBKUEVHIHNvZnR3YXJlIGJ5IGJydXRlIGZvcmNlLCByZWNvbXBpbGluZyBldmVyeXRoaW5nIHdoZXRoZXIKLSQhIG9yIG5vdCBpdCBpcyBuZWNlc3NhcnkuICBJdCB0aGVuIHJ1bnMgdGhlIGJhc2ljIHNlbGYtdGVzdC4KLSQhIFRoYW5rcyB0byBSaWNrIER5c29uIChkeXNvbkBpb3dhc3AucGh5c2ljcy51aW93YS5lZHUpCi0kISBhbmQgVGltIEJlbGwgKHRiZWxsQG5ldGNvbS5jb20pIGZvciB0aGVpciBoZWxwLgotJCEKLSQhIFJlYWQgaW5zdGFsbGF0aW9uIGluc3RydWN0aW9ucyBiZWZvcmUgcnVubmluZyB0aGlzISEKLSQhCi0kIElmIEYkTW9kZSAoKSAuZXFzLiAiSU5URVJBQ1RJVkUiCi0kICAgVGhlbgotJCAgICAgICBWRVJJRlkgPSBGJFZlcmlmeSAoMCkKLSQgICBFbHNlCi0kICAgICAgIFZFUklGWSA9IEYkVmVyaWZ5ICgxKQotJCBFbmRJZgotJCBPbiBDb250cm9sX1kgVGhlbiBHb1RvIEVuZAotJCBPbiBFcnJvciAgICAgVGhlbiBHb1RvIEVuZAotJAotJCBJZiBGJEdldFN5aSAoIkhXX01PREVMIikgLmd0LiAxMDIzIAotJCAgIFRoZW4KLSQgICAgICAgT1BUID0gIiIKLSQgICBFbHNlCi0kICAgICAgIE9QVCA9ICIsU3lzJERpc2s6W11tYWt2bXMub3B0L09wdGlvbiIKLSQgRW5kSWYKLSQgCi0kIERvQ29tcGlsZSA6PSBDQyAvTm9EZWJ1ZyAvT3B0aW1pemUgL05vTGlzdAotJCEKLSQgRG9Db21waWxlIGphcmljb20uYwotJCBEb0NvbXBpbGUgamNhcGltaW4uYwotJCBEb0NvbXBpbGUgamNhcGlzdGQuYwotJCBEb0NvbXBpbGUgamNhcml0aC5jCi0kIERvQ29tcGlsZSBqY3RyYW5zLmMKLSQgRG9Db21waWxlIGpjcGFyYW0uYwotJCBEb0NvbXBpbGUgamRhdGFkc3QuYwotJCBEb0NvbXBpbGUgamNpbml0LmMKLSQgRG9Db21waWxlIGpjbWFzdGVyLmMKLSQgRG9Db21waWxlIGpjbWFya2VyLmMKLSQgRG9Db21waWxlIGpjbWFpbmN0LmMKLSQgRG9Db21waWxlIGpjcHJlcGN0LmMKLSQgRG9Db21waWxlIGpjY29lZmN0LmMKLSQgRG9Db21waWxlIGpjY29sb3IuYwotJCBEb0NvbXBpbGUgamNzYW1wbGUuYwotJCBEb0NvbXBpbGUgamNodWZmLmMKLSQgRG9Db21waWxlIGpjZGN0bWdyLmMKLSQgRG9Db21waWxlIGpmZGN0ZnN0LmMKLSQgRG9Db21waWxlIGpmZGN0Zmx0LmMKLSQgRG9Db21waWxlIGpmZGN0aW50LmMKLSQgRG9Db21waWxlIGpkYXBpbWluLmMKLSQgRG9Db21waWxlIGpkYXBpc3RkLmMKLSQgRG9Db21waWxlIGpkYXJpdGguYwotJCBEb0NvbXBpbGUgamR0cmFucy5jCi0kIERvQ29tcGlsZSBqZGF0YXNyYy5jCi0kIERvQ29tcGlsZSBqZG1hc3Rlci5jCi0kIERvQ29tcGlsZSBqZGlucHV0LmMKLSQgRG9Db21waWxlIGpkbWFya2VyLmMKLSQgRG9Db21waWxlIGpkaHVmZi5jCi0kIERvQ29tcGlsZSBqZG1haW5jdC5jCi0kIERvQ29tcGlsZSBqZGNvZWZjdC5jCi0kIERvQ29tcGlsZSBqZHBvc3RjdC5jCi0kIERvQ29tcGlsZSBqZGRjdG1nci5jCi0kIERvQ29tcGlsZSBqaWRjdGZzdC5jCi0kIERvQ29tcGlsZSBqaWRjdGZsdC5jCi0kIERvQ29tcGlsZSBqaWRjdGludC5jCi0kIERvQ29tcGlsZSBqZHNhbXBsZS5jCi0kIERvQ29tcGlsZSBqZGNvbG9yLmMKLSQgRG9Db21waWxlIGpxdWFudDEuYwotJCBEb0NvbXBpbGUganF1YW50Mi5jCi0kIERvQ29tcGlsZSBqZG1lcmdlLmMKLSQgRG9Db21waWxlIGpjb21hcGkuYwotJCBEb0NvbXBpbGUganV0aWxzLmMKLSQgRG9Db21waWxlIGplcnJvci5jCi0kIERvQ29tcGlsZSBqbWVtbWdyLmMKLSQgRG9Db21waWxlIGptZW1ub2JzLmMKLSQhCi0kIExpYnJhcnkgL0NyZWF0ZSBsaWJqcGVnLm9sYiAgamFyaWNvbS5vYmosamNhcGltaW4ub2JqLGpjYXBpc3RkLm9iaiwgLQotICAgICAgICAgIGpjYXJpdGgub2JqLGpjdHJhbnMub2JqLGpjcGFyYW0ub2JqLGpkYXRhZHN0Lm9iaixqY2luaXQub2JqLCAtCi0gICAgICAgICAgamNtYXN0ZXIub2JqLGpjbWFya2VyLm9iaixqY21haW5jdC5vYmosamNwcmVwY3Qub2JqLGpjY29lZmN0Lm9iaiwgLQotICAgICAgICAgIGpjY29sb3Iub2JqLGpjc2FtcGxlLm9iaixqY2h1ZmYub2JqLGpjZGN0bWdyLm9iaixqZmRjdGZzdC5vYmosIC0KLSAgICAgICAgICBqZmRjdGZsdC5vYmosamZkY3RpbnQub2JqLGpkYXBpbWluLm9iaixqZGFwaXN0ZC5vYmosamRhcml0aC5vYmosIC0KLSAgICAgICAgICBqZHRyYW5zLm9iaixqZGF0YXNyYy5vYmosamRtYXN0ZXIub2JqLGpkaW5wdXQub2JqLGpkbWFya2VyLm9iaiwgLQotICAgICAgICAgIGpkaHVmZi5vYmosamRtYWluY3Qub2JqLGpkY29lZmN0Lm9iaixqZHBvc3RjdC5vYmosamRkY3RtZ3Iub2JqLCAtCi0gICAgICAgICAgamlkY3Rmc3Qub2JqLGppZGN0Zmx0Lm9iaixqaWRjdGludC5vYmosamRzYW1wbGUub2JqLGpkY29sb3Iub2JqLCAtCi0gICAgICAgICAganF1YW50MS5vYmosanF1YW50Mi5vYmosamRtZXJnZS5vYmosamNvbWFwaS5vYmosanV0aWxzLm9iaiwgLQotICAgICAgICAgIGplcnJvci5vYmosam1lbW1nci5vYmosam1lbW5vYnMub2JqCi0kIQotJCBEb0NvbXBpbGUgY2pwZWcuYwotJCBEb0NvbXBpbGUgcmRwcG0uYwotJCBEb0NvbXBpbGUgcmRnaWYuYwotJCBEb0NvbXBpbGUgcmR0YXJnYS5jCi0kIERvQ29tcGlsZSByZHJsZS5jCi0kIERvQ29tcGlsZSByZGJtcC5jCi0kIERvQ29tcGlsZSByZHN3aXRjaC5jCi0kIERvQ29tcGlsZSBjZGpwZWcuYwotJCEKLSQgTGluayAvTm9NYXAgL0V4ZWN1dGFibGUgPSBjanBlZy5leGUgIGNqcGVnLm9iaixyZHBwbS5vYmoscmRnaWYub2JqLCAtCi0gICAgICAgICAgcmR0YXJnYS5vYmoscmRybGUub2JqLHJkYm1wLm9iaixyZHN3aXRjaC5vYmosY2RqcGVnLm9iaixsaWJqcGVnLm9sYi9MaWJyYXJ5J09QVCcKLSQhCi0kIERvQ29tcGlsZSBkanBlZy5jCi0kIERvQ29tcGlsZSB3cnBwbS5jCi0kIERvQ29tcGlsZSB3cmdpZi5jCi0kIERvQ29tcGlsZSB3cnRhcmdhLmMKLSQgRG9Db21waWxlIHdycmxlLmMKLSQgRG9Db21waWxlIHdyYm1wLmMKLSQgRG9Db21waWxlIHJkY29sbWFwLmMKLSQgRG9Db21waWxlIGNkanBlZy5jCi0kIQotJCBMaW5rIC9Ob01hcCAvRXhlY3V0YWJsZSA9IGRqcGVnLmV4ZSAgZGpwZWcub2JqLHdycHBtLm9iaix3cmdpZi5vYmosIC0KLSAgICAgICAgICB3cnRhcmdhLm9iaix3cnJsZS5vYmosd3JibXAub2JqLHJkY29sbWFwLm9iaixjZGpwZWcub2JqLGxpYmpwZWcub2xiL0xpYnJhcnknT1BUJwotJCEKLSQgRG9Db21waWxlIGpwZWd0cmFuLmMKLSQgRG9Db21waWxlIHJkc3dpdGNoLmMKLSQgRG9Db21waWxlIGNkanBlZy5jCi0kIERvQ29tcGlsZSB0cmFuc3VwcC5jCi0kIQotJCBMaW5rIC9Ob01hcCAvRXhlY3V0YWJsZSA9IGpwZWd0cmFuLmV4ZSAganBlZ3RyYW4ub2JqLHJkc3dpdGNoLm9iaiwgLQotICAgICAgICAgIGNkanBlZy5vYmosdHJhbnN1cHAub2JqLGxpYmpwZWcub2xiL0xpYnJhcnknT1BUJwotJCEKLSQgRG9Db21waWxlIHJkanBnY29tLmMKLSQgTGluayAvTm9NYXAgL0V4ZWN1dGFibGUgPSByZGpwZ2NvbS5leGUgIHJkanBnY29tLm9iaidPUFQnCi0kIQotJCBEb0NvbXBpbGUgd3JqcGdjb20uYwotJCBMaW5rIC9Ob01hcCAvRXhlY3V0YWJsZSA9IHdyanBnY29tLmV4ZSAgd3JqcGdjb20ub2JqJ09QVCcKLSQhCi0kISBSdW4gdGhlIHNlbGYtdGVzdAotJCEKLSQgbWNyIHN5cyRkaXNrOltdZGpwZWcgLWRjdCBpbnQgLXBwbSAtb3V0ZmlsZSB0ZXN0b3V0LnBwbSB0ZXN0b3JpZy5qcGcKLSQgbWNyIHN5cyRkaXNrOltdZGpwZWcgLWRjdCBpbnQgLWJtcCAtY29sb3JzIDI1NiAtb3V0ZmlsZSB0ZXN0b3V0LmJtcCB0ZXN0b3JpZy5qcGcKLSQgbWNyIHN5cyRkaXNrOltdY2pwZWcgLWRjdCBpbnQgICAgICAtb3V0ZmlsZSB0ZXN0b3V0LmpwZyB0ZXN0aW1nLnBwbQotJCBtY3Igc3lzJGRpc2s6W11kanBlZyAtZGN0IGludCAtcHBtIC1vdXRmaWxlIHRlc3RvdXRwLnBwbSB0ZXN0cHJvZy5qcGcKLSQgbWNyIHN5cyRkaXNrOltdY2pwZWcgLWRjdCBpbnQgLXByb2dyZXNzaXZlIC1vcHQgLW91dGZpbGUgdGVzdG91dHAuanBnIHRlc3RpbWcucHBtCi0kIG1jciBzeXMkZGlzazpbXWpwZWd0cmFuIC1vdXRmaWxlIHRlc3RvdXR0LmpwZyB0ZXN0cHJvZy5qcGcKLSQgQmFja3VwIC9Db21wYXJlL0xvZyB0ZXN0aW1nLnBwbSB0ZXN0b3V0LnBwbQotJCBCYWNrdXAgL0NvbXBhcmUvTG9nIHRlc3RpbWcuYm1wIHRlc3RvdXQuYm1wCi0kIEJhY2t1cCAvQ29tcGFyZS9Mb2cgdGVzdGltZy5qcGcgdGVzdG91dC5qcGcKLSQgQmFja3VwIC9Db21wYXJlL0xvZyB0ZXN0aW1nLnBwbSB0ZXN0b3V0cC5wcG0KLSQgQmFja3VwIC9Db21wYXJlL0xvZyB0ZXN0aW1ncC5qcGcgdGVzdG91dHAuanBnCi0kIEJhY2t1cCAvQ29tcGFyZS9Mb2cgdGVzdG9yaWcuanBnIHRlc3RvdXR0LmpwZwotJCEKLSRFbmQ6Ci0kICAgSWYgVmVyaWZ5IFRoZW4gU2V0IFZlcmlmeQotJCBFeGl0CmRpZmYgLS1naXQgYS9tYWtlZmlsZS53YXQgYi9tYWtlZmlsZS53YXQKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGEzZTY1MmIuLjAwMDAwMDAKLS0tIGEvbWFrZWZpbGUud2F0CisrKyAvZGV2L251bGwKQEAgLTEsMjQwICswLDAgQEAKLSMgTWFrZWZpbGUgZm9yIEluZGVwZW5kZW50IEpQRUcgR3JvdXAncyBzb2Z0d2FyZQotCi0jIFRoaXMgbWFrZWZpbGUgaXMgc3VpdGFibGUgZm9yIFdhdGNvbSBDL0MrKyAxMC4wIG9uIE1TLURPUyAodXNpbmcKLSMgZG9zNGcgZXh0ZW5kZXIpLCBPUy8yLCBhbmQgV2luZG93cyBOVCBjb25zb2xlIG1vZGUuCi0jIFRoYW5rcyB0byBKYW5vcyBIYWlkZSwgamhhaWRlQGJ0cnZ0ZWNoLmNvbS4KLQotIyBSZWFkIGluc3RhbGxhdGlvbiBpbnN0cnVjdGlvbnMgYmVmb3JlIHNheWluZyAid21ha2UiICEhCi0KLSMgVW5jb21tZW50IGxpbmUgZm9yIGRlc2lyZWQgc3lzdGVtCi1TWVNURU09RE9TCi0jU1lTVEVNPU9TMgotI1NZU1RFTT1OVAotCi0jIFRoZSBuYW1lIG9mIHlvdXIgQyBjb21waWxlcjoKLUNDPSB3Y2wzODYKLQotIyBZb3UgbWF5IG5lZWQgdG8gYWRqdXN0IHRoZXNlIGNjIG9wdGlvbnM6Ci1DRkxBR1M9IC00ciAtb3J0IC13eCAtenEgLWJ0PSQoU1lTVEVNKQotIyBDYXV0aW9uOiBhdm9pZCAtb2wgb3IgLW94OyB0aGVzZSBnZW5lcmF0ZSBiYWQgY29kZSB3aXRoIDEwLjAgb3IgMTAuMGEuCi0jIEdlbmVyYWxseSwgd2UgcmVjb21tZW5kIGRlZmluaW5nIGFueSBjb25maWd1cmF0aW9uIHN5bWJvbHMgaW4gamNvbmZpZy5oLAotIyBOT1QgdmlhIC1EIHN3aXRjaGVzIGhlcmUuCi0KLSMgTGluay10aW1lIGNjIG9wdGlvbnM6Ci0haWZlcSBTWVNURU0gRE9TCi1MREZMQUdTPSAtenEgLWw9ZG9zNGcKLSFlbHNlIGlmZXEgU1lTVEVNIE9TMgotTERGTEFHUz0gLXpxIC1sPW9zMnYyCi0hZWxzZSBpZmVxIFNZU1RFTSBOVAotTERGTEFHUz0gLXpxIC1sPW50Ci0hZW5kaWYKLQotIyBQdXQgaGVyZSB0aGUgb2JqZWN0IGZpbGUgbmFtZSBmb3IgdGhlIGNvcnJlY3Qgc3lzdGVtLWRlcGVuZGVudCBtZW1vcnkKLSMgbWFuYWdlciBmaWxlLiAgam1lbW5vYnMgc2hvdWxkIHdvcmsgZmluZSBmb3IgZG9zNGcgb3IgT1MvMiBlbnZpcm9ubWVudC4KLVNZU0RFUE1FTT0gam1lbW5vYnMub2JqCi0KLSMgRW5kIG9mIGNvbmZpZ3VyYWJsZSBvcHRpb25zLgotCi0KLSMgc291cmNlIGZpbGVzOiBKUEVHIGxpYnJhcnkgcHJvcGVyCi1MSUJTT1VSQ0VTPSBqYXJpY29tLmMgamNhcGltaW4uYyBqY2FwaXN0ZC5jIGpjYXJpdGguYyBqY2NvZWZjdC5jIGpjY29sb3IuYyAmCi0gICAgICAgIGpjZGN0bWdyLmMgamNodWZmLmMgamNpbml0LmMgamNtYWluY3QuYyBqY21hcmtlci5jIGpjbWFzdGVyLmMgJgotICAgICAgICBqY29tYXBpLmMgamNwYXJhbS5jIGpjcHJlcGN0LmMgamNzYW1wbGUuYyBqY3RyYW5zLmMgamRhcGltaW4uYyAmCi0gICAgICAgIGpkYXBpc3RkLmMgamRhcml0aC5jIGpkYXRhZHN0LmMgamRhdGFzcmMuYyBqZGNvZWZjdC5jIGpkY29sb3IuYyAmCi0gICAgICAgIGpkZGN0bWdyLmMgamRodWZmLmMgamRpbnB1dC5jIGpkbWFpbmN0LmMgamRtYXJrZXIuYyBqZG1hc3Rlci5jICYKLSAgICAgICAgamRtZXJnZS5jIGpkcG9zdGN0LmMgamRzYW1wbGUuYyBqZHRyYW5zLmMgamVycm9yLmMgamZkY3RmbHQuYyAmCi0gICAgICAgIGpmZGN0ZnN0LmMgamZkY3RpbnQuYyBqaWRjdGZsdC5jIGppZGN0ZnN0LmMgamlkY3RpbnQuYyBqcXVhbnQxLmMgJgotICAgICAgICBqcXVhbnQyLmMganV0aWxzLmMgam1lbW1nci5jCi0jIG1lbW1nciBiYWNrIGVuZHM6IGNvbXBpbGUgb25seSBvbmUgb2YgdGhlc2UgaW50byBhIHdvcmtpbmcgbGlicmFyeQotU1lTREVQU09VUkNFUz0gam1lbWFuc2kuYyBqbWVtbmFtZS5jIGptZW1ub2JzLmMgam1lbWRvcy5jIGptZW1tYWMuYwotIyBzb3VyY2UgZmlsZXM6IGNqcGVnL2RqcGVnL2pwZWd0cmFuIGFwcGxpY2F0aW9ucywgYWxzbyByZGpwZ2NvbS93cmpwZ2NvbQotQVBQU09VUkNFUz0gY2pwZWcuYyBkanBlZy5jIGpwZWd0cmFuLmMgcmRqcGdjb20uYyB3cmpwZ2NvbS5jIGNkanBlZy5jICYKLSAgICAgICAgcmRjb2xtYXAuYyByZHN3aXRjaC5jIHRyYW5zdXBwLmMgcmRwcG0uYyB3cnBwbS5jIHJkZ2lmLmMgd3JnaWYuYyAmCi0gICAgICAgIHJkdGFyZ2EuYyB3cnRhcmdhLmMgcmRibXAuYyB3cmJtcC5jIHJkcmxlLmMgd3JybGUuYwotU09VUkNFUz0gJChMSUJTT1VSQ0VTKSAkKFNZU0RFUFNPVVJDRVMpICQoQVBQU09VUkNFUykKLSMgZmlsZXMgaW5jbHVkZWQgYnkgc291cmNlIGZpbGVzCi1JTkNMVURFUz0gamRjdC5oIGplcnJvci5oIGppbmNsdWRlLmggam1lbXN5cy5oIGptb3JlY2ZnLmgganBlZ2ludC5oICYKLSAgICAgICAganBlZ2xpYi5oIGp2ZXJzaW9uLmggY2RqcGVnLmggY2RlcnJvci5oIHRyYW5zdXBwLmgKLSMgZG9jdW1lbnRhdGlvbiwgdGVzdCwgYW5kIHN1cHBvcnQgZmlsZXMKLURPQ1M9IFJFQURNRSBpbnN0YWxsLnR4dCB1c2FnZS50eHQgY2pwZWcuMSBkanBlZy4xIGpwZWd0cmFuLjEgcmRqcGdjb20uMSAmCi0gICAgICAgIHdyanBnY29tLjEgd2l6YXJkLnR4dCBleGFtcGxlLmMgbGlianBlZy50eHQgc3RydWN0dXJlLnR4dCAmCi0gICAgICAgIGNvZGVydWxlcy50eHQgZmlsZWxpc3QudHh0IGNoYW5nZS5sb2cKLU1LRklMRVM9IGNvbmZpZ3VyZSBNYWtlZmlsZS5pbiBtYWtlZmlsZS5hbnNpIG1ha2VmaWxlLnVuaXggbWFrZWZpbGUuYmNjICYKLSAgICAgICAgbWFrZWZpbGUubWM2IG1ha2VmaWxlLmRqIG1ha2VmaWxlLndhdCBtYWtlZmlsZS52YyBtYWtlamRzdy52YzYgJgotICAgICAgICBtYWtlYWRzdy52YzYgbWFrZWpkZXAudmM2IG1ha2VqZHNwLnZjNiBtYWtlam1hay52YzYgbWFrZWNkZXAudmM2ICYKLSAgICAgICAgbWFrZWNkc3AudmM2IG1ha2VjbWFrLnZjNiBtYWtlZGRlcC52YzYgbWFrZWRkc3AudmM2IG1ha2VkbWFrLnZjNiAmCi0gICAgICAgIG1ha2V0ZGVwLnZjNiBtYWtldGRzcC52YzYgbWFrZXRtYWsudmM2IG1ha2VyZGVwLnZjNiBtYWtlcmRzcC52YzYgJgotICAgICAgICBtYWtlcm1hay52YzYgbWFrZXdkZXAudmM2IG1ha2V3ZHNwLnZjNiBtYWtld21hay52YzYgbWFrZWpzbG4udjEwICYKLSAgICAgICAgbWFrZWFzbG4udjEwIG1ha2VqdmN4LnYxMCBtYWtlamZpbC52MTAgbWFrZWN2Y3gudjEwIG1ha2VjZmlsLnYxMCAmCi0gICAgICAgIG1ha2VkdmN4LnYxMCBtYWtlZGZpbC52MTAgbWFrZXR2Y3gudjEwIG1ha2V0ZmlsLnYxMCBtYWtlcnZjeC52MTAgJgotICAgICAgICBtYWtlcmZpbC52MTAgbWFrZXd2Y3gudjEwIG1ha2V3ZmlsLnYxMCBtYWtlcHJvai5tYWMgbWFrY2pwZWcuc3QgJgotICAgICAgICBtYWtkanBlZy5zdCBtYWtsanBlZy5zdCBtYWt0anBlZy5zdCBtYWtlZmlsZS5tYW54IG1ha2VmaWxlLnNhcyAmCi0gICAgICAgIG1ha2VmaWxlLm1tcyBtYWtlZmlsZS52bXMgbWFrdm1zLm9wdAotQ09ORklHRklMRVM9IGpjb25maWcuY2ZnIGpjb25maWcuYmNjIGpjb25maWcubWM2IGpjb25maWcuZGogamNvbmZpZy53YXQgJgotICAgICAgICBqY29uZmlnLnZjIGpjb25maWcubWFjIGpjb25maWcuc3QgamNvbmZpZy5tYW54IGpjb25maWcuc2FzICYKLSAgICAgICAgamNvbmZpZy52bXMKLUNPTkZJR1VSRUZJTEVTPSBjb25maWcuZ3Vlc3MgY29uZmlnLnN1YiBpbnN0YWxsLXNoIGx0bWFpbi5zaCBkZXBjb21wIG1pc3NpbmcKLU9USEVSRklMRVM9IGpjb25maWcudHh0IGNrY29uZmlnLmMgYW5zaTJrbnIuYyBhbnNpMmtuci4xIGptZW1kb3NhLmFzbSAmCi0gICAgICAgIGxpYmpwZWcubWFwCi1URVNURklMRVM9IHRlc3RvcmlnLmpwZyB0ZXN0aW1nLnBwbSB0ZXN0aW1nLmJtcCB0ZXN0aW1nLmpwZyB0ZXN0cHJvZy5qcGcgJgotICAgICAgICB0ZXN0aW1ncC5qcGcKLURJU1RGSUxFUz0gJChET0NTKSAkKE1LRklMRVMpICQoQ09ORklHRklMRVMpICQoU09VUkNFUykgJChJTkNMVURFUykgJgotICAgICAgICAkKENPTkZJR1VSRUZJTEVTKSAkKE9USEVSRklMRVMpICQoVEVTVEZJTEVTKQotIyBsaWJyYXJ5IG9iamVjdCBmaWxlcyBjb21tb24gdG8gY29tcHJlc3Npb24gYW5kIGRlY29tcHJlc3Npb24KLUNPTU9CSkVDVFM9IGphcmljb20ub2JqIGpjb21hcGkub2JqIGp1dGlscy5vYmogamVycm9yLm9iaiBqbWVtbWdyLm9iaiAkKFNZU0RFUE1FTSkKLSMgY29tcHJlc3Npb24gbGlicmFyeSBvYmplY3QgZmlsZXMKLUNMSUJPQkpFQ1RTPSBqY2FwaW1pbi5vYmogamNhcGlzdGQub2JqIGpjYXJpdGgub2JqIGpjdHJhbnMub2JqIGpjcGFyYW0ub2JqICYKLSAgICAgICAgamRhdGFkc3Qub2JqIGpjaW5pdC5vYmogamNtYXN0ZXIub2JqIGpjbWFya2VyLm9iaiBqY21haW5jdC5vYmogJgotICAgICAgICBqY3ByZXBjdC5vYmogamNjb2VmY3Qub2JqIGpjY29sb3Iub2JqIGpjc2FtcGxlLm9iaiBqY2h1ZmYub2JqICYKLSAgICAgICAgamNkY3RtZ3Iub2JqIGpmZGN0ZnN0Lm9iaiBqZmRjdGZsdC5vYmogamZkY3RpbnQub2JqCi0jIGRlY29tcHJlc3Npb24gbGlicmFyeSBvYmplY3QgZmlsZXMKLURMSUJPQkpFQ1RTPSBqZGFwaW1pbi5vYmogamRhcGlzdGQub2JqIGpkYXJpdGgub2JqIGpkdHJhbnMub2JqIGpkYXRhc3JjLm9iaiAmCi0gICAgICAgIGpkbWFzdGVyLm9iaiBqZGlucHV0Lm9iaiBqZG1hcmtlci5vYmogamRodWZmLm9iaiBqZG1haW5jdC5vYmogJgotICAgICAgICBqZGNvZWZjdC5vYmogamRwb3N0Y3Qub2JqIGpkZGN0bWdyLm9iaiBqaWRjdGZzdC5vYmogamlkY3RmbHQub2JqICYKLSAgICAgICAgamlkY3RpbnQub2JqIGpkc2FtcGxlLm9iaiBqZGNvbG9yLm9iaiBqcXVhbnQxLm9iaiBqcXVhbnQyLm9iaiAmCi0gICAgICAgIGpkbWVyZ2Uub2JqCi0jIFRoZXNlIG9iamVjdGZpbGVzIGFyZSBpbmNsdWRlZCBpbiBsaWJqcGVnLmxpYgotTElCT0JKRUNUUz0gJChDTElCT0JKRUNUUykgJChETElCT0JKRUNUUykgJChDT01PQkpFQ1RTKQotIyBvYmplY3QgZmlsZXMgZm9yIHNhbXBsZSBhcHBsaWNhdGlvbnMgKGV4Y2x1ZGluZyBsaWJyYXJ5IGZpbGVzKQotQ09CSkVDVFM9IGNqcGVnLm9iaiByZHBwbS5vYmogcmRnaWYub2JqIHJkdGFyZ2Eub2JqIHJkcmxlLm9iaiByZGJtcC5vYmogJgotICAgICAgICByZHN3aXRjaC5vYmogY2RqcGVnLm9iagotRE9CSkVDVFM9IGRqcGVnLm9iaiB3cnBwbS5vYmogd3JnaWYub2JqIHdydGFyZ2Eub2JqIHdycmxlLm9iaiB3cmJtcC5vYmogJgotICAgICAgICByZGNvbG1hcC5vYmogY2RqcGVnLm9iagotVFJPQkpFQ1RTPSBqcGVndHJhbi5vYmogcmRzd2l0Y2gub2JqIGNkanBlZy5vYmogdHJhbnN1cHAub2JqCi0KLQotYWxsOiBsaWJqcGVnLmxpYiBjanBlZy5leGUgZGpwZWcuZXhlIGpwZWd0cmFuLmV4ZSByZGpwZ2NvbS5leGUgd3JqcGdjb20uZXhlCi0KLWxpYmpwZWcubGliOiAkKExJQk9CSkVDVFMpCi0JLSBkZWwgbGlianBlZy5saWIKLQkqIHdsaWIgLW4gbGlianBlZy5saWIgJChMSUJPQkpFQ1RTKQotCi1janBlZy5leGU6ICQoQ09CSkVDVFMpIGxpYmpwZWcubGliCi0JJChDQykgJChMREZMQUdTKSAkKENPQkpFQ1RTKSBsaWJqcGVnLmxpYgotCi1kanBlZy5leGU6ICQoRE9CSkVDVFMpIGxpYmpwZWcubGliCi0JJChDQykgJChMREZMQUdTKSAkKERPQkpFQ1RTKSBsaWJqcGVnLmxpYgotCi1qcGVndHJhbi5leGU6ICQoVFJPQkpFQ1RTKSBsaWJqcGVnLmxpYgotCSQoQ0MpICQoTERGTEFHUykgJChUUk9CSkVDVFMpIGxpYmpwZWcubGliCi0KLXJkanBnY29tLmV4ZTogcmRqcGdjb20uYwotCSQoQ0MpICQoQ0ZMQUdTKSAkKExERkxBR1MpIHJkanBnY29tLmMKLQotd3JqcGdjb20uZXhlOiB3cmpwZ2NvbS5jCi0JJChDQykgJChDRkxBR1MpICQoTERGTEFHUykgd3JqcGdjb20uYwotCi0uYy5vYmo6Ci0JJChDQykgJChDRkxBR1MpIC1jICQ8Ci0KLWpjb25maWcuaDogamNvbmZpZy50eHQKLQllY2hvIFlvdSBtdXN0IHByZXBhcmUgYSBzeXN0ZW0tZGVwZW5kZW50IGpjb25maWcuaCBmaWxlLgotCWVjaG8gUGxlYXNlIHJlYWQgdGhlIGluc3RhbGxhdGlvbiBkaXJlY3Rpb25zIGluIGluc3RhbGwudHh0LgotCWV4aXQgMQotCi1jbGVhbjogLlNZTUJPTElDCi0JLSBkZWwgKi5vYmoKLQktIGRlbCBsaWJqcGVnLmxpYgotCS0gZGVsIGNqcGVnLmV4ZQotCS0gZGVsIGRqcGVnLmV4ZQotCS0gZGVsIGpwZWd0cmFuLmV4ZQotCS0gZGVsIHJkanBnY29tLmV4ZQotCS0gZGVsIHdyanBnY29tLmV4ZQotCS0gZGVsIHRlc3RvdXQqLioKLQotdGVzdDogY2pwZWcuZXhlIGRqcGVnLmV4ZSBqcGVndHJhbi5leGUgIC5TWU1CT0xJQwotCS0gZGVsIHRlc3RvdXQqLioKLQlkanBlZyAtZGN0IGludCAtcHBtIC1vdXRmaWxlIHRlc3RvdXQucHBtICB0ZXN0b3JpZy5qcGcKLQlkanBlZyAtZGN0IGludCAtYm1wIC1jb2xvcnMgMjU2IC1vdXRmaWxlIHRlc3RvdXQuYm1wICB0ZXN0b3JpZy5qcGcKLQljanBlZyAtZGN0IGludCAtb3V0ZmlsZSB0ZXN0b3V0LmpwZyAgdGVzdGltZy5wcG0KLQlkanBlZyAtZGN0IGludCAtcHBtIC1vdXRmaWxlIHRlc3RvdXRwLnBwbSB0ZXN0cHJvZy5qcGcKLQljanBlZyAtZGN0IGludCAtcHJvZ3Jlc3NpdmUgLW9wdCAtb3V0ZmlsZSB0ZXN0b3V0cC5qcGcgdGVzdGltZy5wcG0KLQlqcGVndHJhbiAtb3V0ZmlsZSB0ZXN0b3V0dC5qcGcgdGVzdHByb2cuanBnCi0haWZlcSBTWVNURU0gRE9TCi0JZmMgL2IgdGVzdGltZy5wcG0gdGVzdG91dC5wcG0KLQlmYyAvYiB0ZXN0aW1nLmJtcCB0ZXN0b3V0LmJtcAotCWZjIC9iIHRlc3RpbWcuanBnIHRlc3RvdXQuanBnCi0JZmMgL2IgdGVzdGltZy5wcG0gdGVzdG91dHAucHBtCi0JZmMgL2IgdGVzdGltZ3AuanBnIHRlc3RvdXRwLmpwZwotCWZjIC9iIHRlc3RvcmlnLmpwZyB0ZXN0b3V0dC5qcGcKLSFlbHNlCi0JZWNobyBuID4gbi50bXAKLQljb21wIHRlc3RpbWcucHBtIHRlc3RvdXQucHBtIDwgbi50bXAKLQljb21wIHRlc3RpbWcuYm1wIHRlc3RvdXQuYm1wIDwgbi50bXAKLQljb21wIHRlc3RpbWcuanBnIHRlc3RvdXQuanBnIDwgbi50bXAKLQljb21wIHRlc3RpbWcucHBtIHRlc3RvdXRwLnBwbSA8IG4udG1wCi0JY29tcCB0ZXN0aW1ncC5qcGcgdGVzdG91dHAuanBnIDwgbi50bXAKLQljb21wIHRlc3RvcmlnLmpwZyB0ZXN0b3V0dC5qcGcgPCBuLnRtcAotCWRlbCBuLnRtcAotIWVuZGlmCi0KLQotamFyaWNvbS5vYmo6IGphcmljb20uYyBqaW5jbHVkZS5oIGpjb25maWcuaCBqcGVnbGliLmggam1vcmVjZmcuaCBqcGVnaW50LmggamVycm9yLmgKLWpjYXBpbWluLm9iajogamNhcGltaW4uYyBqaW5jbHVkZS5oIGpjb25maWcuaCBqcGVnbGliLmggam1vcmVjZmcuaCBqcGVnaW50LmggamVycm9yLmgKLWpjYXBpc3RkLm9iajogamNhcGlzdGQuYyBqaW5jbHVkZS5oIGpjb25maWcuaCBqcGVnbGliLmggam1vcmVjZmcuaCBqcGVnaW50LmggamVycm9yLmgKLWpjYXJpdGgub2JqOiBqY2FyaXRoLmMgamluY2x1ZGUuaCBqY29uZmlnLmgganBlZ2xpYi5oIGptb3JlY2ZnLmgganBlZ2ludC5oIGplcnJvci5oCi1qY2NvZWZjdC5vYmo6IGpjY29lZmN0LmMgamluY2x1ZGUuaCBqY29uZmlnLmgganBlZ2xpYi5oIGptb3JlY2ZnLmgganBlZ2ludC5oIGplcnJvci5oCi1qY2NvbG9yLm9iajogamNjb2xvci5jIGppbmNsdWRlLmggamNvbmZpZy5oIGpwZWdsaWIuaCBqbW9yZWNmZy5oIGpwZWdpbnQuaCBqZXJyb3IuaAotamNkY3RtZ3Iub2JqOiBqY2RjdG1nci5jIGppbmNsdWRlLmggamNvbmZpZy5oIGpwZWdsaWIuaCBqbW9yZWNmZy5oIGpwZWdpbnQuaCBqZXJyb3IuaCBqZGN0LmgKLWpjaHVmZi5vYmo6IGpjaHVmZi5jIGppbmNsdWRlLmggamNvbmZpZy5oIGpwZWdsaWIuaCBqbW9yZWNmZy5oIGpwZWdpbnQuaCBqZXJyb3IuaAotamNpbml0Lm9iajogamNpbml0LmMgamluY2x1ZGUuaCBqY29uZmlnLmgganBlZ2xpYi5oIGptb3JlY2ZnLmgganBlZ2ludC5oIGplcnJvci5oCi1qY21haW5jdC5vYmo6IGpjbWFpbmN0LmMgamluY2x1ZGUuaCBqY29uZmlnLmgganBlZ2xpYi5oIGptb3JlY2ZnLmgganBlZ2ludC5oIGplcnJvci5oCi1qY21hcmtlci5vYmo6IGpjbWFya2VyLmMgamluY2x1ZGUuaCBqY29uZmlnLmgganBlZ2xpYi5oIGptb3JlY2ZnLmgganBlZ2ludC5oIGplcnJvci5oCi1qY21hc3Rlci5vYmo6IGpjbWFzdGVyLmMgamluY2x1ZGUuaCBqY29uZmlnLmgganBlZ2xpYi5oIGptb3JlY2ZnLmgganBlZ2ludC5oIGplcnJvci5oCi1qY29tYXBpLm9iajogamNvbWFwaS5jIGppbmNsdWRlLmggamNvbmZpZy5oIGpwZWdsaWIuaCBqbW9yZWNmZy5oIGpwZWdpbnQuaCBqZXJyb3IuaAotamNwYXJhbS5vYmo6IGpjcGFyYW0uYyBqaW5jbHVkZS5oIGpjb25maWcuaCBqcGVnbGliLmggam1vcmVjZmcuaCBqcGVnaW50LmggamVycm9yLmgKLWpjcHJlcGN0Lm9iajogamNwcmVwY3QuYyBqaW5jbHVkZS5oIGpjb25maWcuaCBqcGVnbGliLmggam1vcmVjZmcuaCBqcGVnaW50LmggamVycm9yLmgKLWpjc2FtcGxlLm9iajogamNzYW1wbGUuYyBqaW5jbHVkZS5oIGpjb25maWcuaCBqcGVnbGliLmggam1vcmVjZmcuaCBqcGVnaW50LmggamVycm9yLmgKLWpjdHJhbnMub2JqOiBqY3RyYW5zLmMgamluY2x1ZGUuaCBqY29uZmlnLmgganBlZ2xpYi5oIGptb3JlY2ZnLmgganBlZ2ludC5oIGplcnJvci5oCi1qZGFwaW1pbi5vYmo6IGpkYXBpbWluLmMgamluY2x1ZGUuaCBqY29uZmlnLmgganBlZ2xpYi5oIGptb3JlY2ZnLmgganBlZ2ludC5oIGplcnJvci5oCi1qZGFwaXN0ZC5vYmo6IGpkYXBpc3RkLmMgamluY2x1ZGUuaCBqY29uZmlnLmgganBlZ2xpYi5oIGptb3JlY2ZnLmgganBlZ2ludC5oIGplcnJvci5oCi1qZGFyaXRoLm9iajogamRhcml0aC5jIGppbmNsdWRlLmggamNvbmZpZy5oIGpwZWdsaWIuaCBqbW9yZWNmZy5oIGpwZWdpbnQuaCBqZXJyb3IuaAotamRhdGFkc3Qub2JqOiBqZGF0YWRzdC5jIGppbmNsdWRlLmggamNvbmZpZy5oIGpwZWdsaWIuaCBqbW9yZWNmZy5oIGplcnJvci5oCi1qZGF0YXNyYy5vYmo6IGpkYXRhc3JjLmMgamluY2x1ZGUuaCBqY29uZmlnLmgganBlZ2xpYi5oIGptb3JlY2ZnLmggamVycm9yLmgKLWpkY29lZmN0Lm9iajogamRjb2VmY3QuYyBqaW5jbHVkZS5oIGpjb25maWcuaCBqcGVnbGliLmggam1vcmVjZmcuaCBqcGVnaW50LmggamVycm9yLmgKLWpkY29sb3Iub2JqOiBqZGNvbG9yLmMgamluY2x1ZGUuaCBqY29uZmlnLmgganBlZ2xpYi5oIGptb3JlY2ZnLmgganBlZ2ludC5oIGplcnJvci5oCi1qZGRjdG1nci5vYmo6IGpkZGN0bWdyLmMgamluY2x1ZGUuaCBqY29uZmlnLmgganBlZ2xpYi5oIGptb3JlY2ZnLmgganBlZ2ludC5oIGplcnJvci5oIGpkY3QuaAotamRodWZmLm9iajogamRodWZmLmMgamluY2x1ZGUuaCBqY29uZmlnLmgganBlZ2xpYi5oIGptb3JlY2ZnLmgganBlZ2ludC5oIGplcnJvci5oCi1qZGlucHV0Lm9iajogamRpbnB1dC5jIGppbmNsdWRlLmggamNvbmZpZy5oIGpwZWdsaWIuaCBqbW9yZWNmZy5oIGpwZWdpbnQuaCBqZXJyb3IuaAotamRtYWluY3Qub2JqOiBqZG1haW5jdC5jIGppbmNsdWRlLmggamNvbmZpZy5oIGpwZWdsaWIuaCBqbW9yZWNmZy5oIGpwZWdpbnQuaCBqZXJyb3IuaAotamRtYXJrZXIub2JqOiBqZG1hcmtlci5jIGppbmNsdWRlLmggamNvbmZpZy5oIGpwZWdsaWIuaCBqbW9yZWNmZy5oIGpwZWdpbnQuaCBqZXJyb3IuaAotamRtYXN0ZXIub2JqOiBqZG1hc3Rlci5jIGppbmNsdWRlLmggamNvbmZpZy5oIGpwZWdsaWIuaCBqbW9yZWNmZy5oIGpwZWdpbnQuaCBqZXJyb3IuaAotamRtZXJnZS5vYmo6IGpkbWVyZ2UuYyBqaW5jbHVkZS5oIGpjb25maWcuaCBqcGVnbGliLmggam1vcmVjZmcuaCBqcGVnaW50LmggamVycm9yLmgKLWpkcG9zdGN0Lm9iajogamRwb3N0Y3QuYyBqaW5jbHVkZS5oIGpjb25maWcuaCBqcGVnbGliLmggam1vcmVjZmcuaCBqcGVnaW50LmggamVycm9yLmgKLWpkc2FtcGxlLm9iajogamRzYW1wbGUuYyBqaW5jbHVkZS5oIGpjb25maWcuaCBqcGVnbGliLmggam1vcmVjZmcuaCBqcGVnaW50LmggamVycm9yLmgKLWpkdHJhbnMub2JqOiBqZHRyYW5zLmMgamluY2x1ZGUuaCBqY29uZmlnLmgganBlZ2xpYi5oIGptb3JlY2ZnLmgganBlZ2ludC5oIGplcnJvci5oCi1qZXJyb3Iub2JqOiBqZXJyb3IuYyBqaW5jbHVkZS5oIGpjb25maWcuaCBqcGVnbGliLmggam1vcmVjZmcuaCBqdmVyc2lvbi5oIGplcnJvci5oCi1qZmRjdGZsdC5vYmo6IGpmZGN0Zmx0LmMgamluY2x1ZGUuaCBqY29uZmlnLmgganBlZ2xpYi5oIGptb3JlY2ZnLmgganBlZ2ludC5oIGplcnJvci5oIGpkY3QuaAotamZkY3Rmc3Qub2JqOiBqZmRjdGZzdC5jIGppbmNsdWRlLmggamNvbmZpZy5oIGpwZWdsaWIuaCBqbW9yZWNmZy5oIGpwZWdpbnQuaCBqZXJyb3IuaCBqZGN0LmgKLWpmZGN0aW50Lm9iajogamZkY3RpbnQuYyBqaW5jbHVkZS5oIGpjb25maWcuaCBqcGVnbGliLmggam1vcmVjZmcuaCBqcGVnaW50LmggamVycm9yLmggamRjdC5oCi1qaWRjdGZsdC5vYmo6IGppZGN0Zmx0LmMgamluY2x1ZGUuaCBqY29uZmlnLmgganBlZ2xpYi5oIGptb3JlY2ZnLmgganBlZ2ludC5oIGplcnJvci5oIGpkY3QuaAotamlkY3Rmc3Qub2JqOiBqaWRjdGZzdC5jIGppbmNsdWRlLmggamNvbmZpZy5oIGpwZWdsaWIuaCBqbW9yZWNmZy5oIGpwZWdpbnQuaCBqZXJyb3IuaCBqZGN0LmgKLWppZGN0aW50Lm9iajogamlkY3RpbnQuYyBqaW5jbHVkZS5oIGpjb25maWcuaCBqcGVnbGliLmggam1vcmVjZmcuaCBqcGVnaW50LmggamVycm9yLmggamRjdC5oCi1qcXVhbnQxLm9iajoganF1YW50MS5jIGppbmNsdWRlLmggamNvbmZpZy5oIGpwZWdsaWIuaCBqbW9yZWNmZy5oIGpwZWdpbnQuaCBqZXJyb3IuaAotanF1YW50Mi5vYmo6IGpxdWFudDIuYyBqaW5jbHVkZS5oIGpjb25maWcuaCBqcGVnbGliLmggam1vcmVjZmcuaCBqcGVnaW50LmggamVycm9yLmgKLWp1dGlscy5vYmo6IGp1dGlscy5jIGppbmNsdWRlLmggamNvbmZpZy5oIGpwZWdsaWIuaCBqbW9yZWNmZy5oIGpwZWdpbnQuaCBqZXJyb3IuaAotam1lbW1nci5vYmo6IGptZW1tZ3IuYyBqaW5jbHVkZS5oIGpjb25maWcuaCBqcGVnbGliLmggam1vcmVjZmcuaCBqcGVnaW50LmggamVycm9yLmggam1lbXN5cy5oCi1qbWVtYW5zaS5vYmo6IGptZW1hbnNpLmMgamluY2x1ZGUuaCBqY29uZmlnLmgganBlZ2xpYi5oIGptb3JlY2ZnLmgganBlZ2ludC5oIGplcnJvci5oIGptZW1zeXMuaAotam1lbW5hbWUub2JqOiBqbWVtbmFtZS5jIGppbmNsdWRlLmggamNvbmZpZy5oIGpwZWdsaWIuaCBqbW9yZWNmZy5oIGpwZWdpbnQuaCBqZXJyb3IuaCBqbWVtc3lzLmgKLWptZW1ub2JzLm9iajogam1lbW5vYnMuYyBqaW5jbHVkZS5oIGpjb25maWcuaCBqcGVnbGliLmggam1vcmVjZmcuaCBqcGVnaW50LmggamVycm9yLmggam1lbXN5cy5oCi1qbWVtZG9zLm9iajogam1lbWRvcy5jIGppbmNsdWRlLmggamNvbmZpZy5oIGpwZWdsaWIuaCBqbW9yZWNmZy5oIGpwZWdpbnQuaCBqZXJyb3IuaCBqbWVtc3lzLmgKLWptZW1tYWMub2JqOiBqbWVtbWFjLmMgamluY2x1ZGUuaCBqY29uZmlnLmgganBlZ2xpYi5oIGptb3JlY2ZnLmgganBlZ2ludC5oIGplcnJvci5oIGptZW1zeXMuaAotY2pwZWcub2JqOiBjanBlZy5jIGNkanBlZy5oIGppbmNsdWRlLmggamNvbmZpZy5oIGpwZWdsaWIuaCBqbW9yZWNmZy5oIGplcnJvci5oIGNkZXJyb3IuaCBqdmVyc2lvbi5oCi1kanBlZy5vYmo6IGRqcGVnLmMgY2RqcGVnLmggamluY2x1ZGUuaCBqY29uZmlnLmgganBlZ2xpYi5oIGptb3JlY2ZnLmggamVycm9yLmggY2RlcnJvci5oIGp2ZXJzaW9uLmgKLWpwZWd0cmFuLm9iajoganBlZ3RyYW4uYyBjZGpwZWcuaCBqaW5jbHVkZS5oIGpjb25maWcuaCBqcGVnbGliLmggam1vcmVjZmcuaCBqZXJyb3IuaCBjZGVycm9yLmggdHJhbnN1cHAuaCBqdmVyc2lvbi5oCi1yZGpwZ2NvbS5vYmo6IHJkanBnY29tLmMgamluY2x1ZGUuaCBqY29uZmlnLmgKLXdyanBnY29tLm9iajogd3JqcGdjb20uYyBqaW5jbHVkZS5oIGpjb25maWcuaAotY2RqcGVnLm9iajogY2RqcGVnLmMgY2RqcGVnLmggamluY2x1ZGUuaCBqY29uZmlnLmgganBlZ2xpYi5oIGptb3JlY2ZnLmggamVycm9yLmggY2RlcnJvci5oCi1yZGNvbG1hcC5vYmo6IHJkY29sbWFwLmMgY2RqcGVnLmggamluY2x1ZGUuaCBqY29uZmlnLmgganBlZ2xpYi5oIGptb3JlY2ZnLmggamVycm9yLmggY2RlcnJvci5oCi1yZHN3aXRjaC5vYmo6IHJkc3dpdGNoLmMgY2RqcGVnLmggamluY2x1ZGUuaCBqY29uZmlnLmgganBlZ2xpYi5oIGptb3JlY2ZnLmggamVycm9yLmggY2RlcnJvci5oCi10cmFuc3VwcC5vYmo6IHRyYW5zdXBwLmMgamluY2x1ZGUuaCBqY29uZmlnLmgganBlZ2xpYi5oIGptb3JlY2ZnLmgganBlZ2ludC5oIGplcnJvci5oIHRyYW5zdXBwLmgKLXJkcHBtLm9iajogcmRwcG0uYyBjZGpwZWcuaCBqaW5jbHVkZS5oIGpjb25maWcuaCBqcGVnbGliLmggam1vcmVjZmcuaCBqZXJyb3IuaCBjZGVycm9yLmgKLXdycHBtLm9iajogd3JwcG0uYyBjZGpwZWcuaCBqaW5jbHVkZS5oIGpjb25maWcuaCBqcGVnbGliLmggam1vcmVjZmcuaCBqZXJyb3IuaCBjZGVycm9yLmgKLXJkZ2lmLm9iajogcmRnaWYuYyBjZGpwZWcuaCBqaW5jbHVkZS5oIGpjb25maWcuaCBqcGVnbGliLmggam1vcmVjZmcuaCBqZXJyb3IuaCBjZGVycm9yLmgKLXdyZ2lmLm9iajogd3JnaWYuYyBjZGpwZWcuaCBqaW5jbHVkZS5oIGpjb25maWcuaCBqcGVnbGliLmggam1vcmVjZmcuaCBqZXJyb3IuaCBjZGVycm9yLmgKLXJkdGFyZ2Eub2JqOiByZHRhcmdhLmMgY2RqcGVnLmggamluY2x1ZGUuaCBqY29uZmlnLmgganBlZ2xpYi5oIGptb3JlY2ZnLmggamVycm9yLmggY2RlcnJvci5oCi13cnRhcmdhLm9iajogd3J0YXJnYS5jIGNkanBlZy5oIGppbmNsdWRlLmggamNvbmZpZy5oIGpwZWdsaWIuaCBqbW9yZWNmZy5oIGplcnJvci5oIGNkZXJyb3IuaAotcmRibXAub2JqOiByZGJtcC5jIGNkanBlZy5oIGppbmNsdWRlLmggamNvbmZpZy5oIGpwZWdsaWIuaCBqbW9yZWNmZy5oIGplcnJvci5oIGNkZXJyb3IuaAotd3JibXAub2JqOiB3cmJtcC5jIGNkanBlZy5oIGppbmNsdWRlLmggamNvbmZpZy5oIGpwZWdsaWIuaCBqbW9yZWNmZy5oIGplcnJvci5oIGNkZXJyb3IuaAotcmRybGUub2JqOiByZHJsZS5jIGNkanBlZy5oIGppbmNsdWRlLmggamNvbmZpZy5oIGpwZWdsaWIuaCBqbW9yZWNmZy5oIGplcnJvci5oIGNkZXJyb3IuaAotd3JybGUub2JqOiB3cnJsZS5jIGNkanBlZy5oIGppbmNsdWRlLmggamNvbmZpZy5oIGpwZWdsaWIuaCBqbW9yZWNmZy5oIGplcnJvci5oIGNkZXJyb3IuaApkaWZmIC0tZ2l0IGEvbWFrZWpkZXAudmM2IGIvbWFrZWpkZXAudmM2CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxMDY1YjIxLi4wMDAwMDAwCi0tLSBhL21ha2VqZGVwLnZjNgorKysgL2Rldi9udWxsCkBAIC0xLDQyMyArMCwwIEBACi0jIE1pY3Jvc29mdCBEZXZlbG9wZXIgU3R1ZGlvIGVyc3RlbGx0ZSBBYmiEbmdpZ2tlaXRzZGF0ZWksIGVpbmJlem9nZW4gdm9uIGpwZWcubWFrCi0KLS5camFyaWNvbS5jIDogXAotCSIuXGpjb25maWcuaCJcCi0JIi5camVycm9yLmgiXAotCSIuXGppbmNsdWRlLmgiXAotCSIuXGptb3JlY2ZnLmgiXAotCSIuXGpwZWdpbnQuaCJcCi0JIi5canBlZ2xpYi5oIlwKLQkKLQotLlxqY2FwaW1pbi5jIDogXAotCSIuXGpjb25maWcuaCJcCi0JIi5camVycm9yLmgiXAotCSIuXGppbmNsdWRlLmgiXAotCSIuXGptb3JlY2ZnLmgiXAotCSIuXGpwZWdpbnQuaCJcCi0JIi5canBlZ2xpYi5oIlwKLQkKLQotLlxqY2FwaXN0ZC5jIDogXAotCSIuXGpjb25maWcuaCJcCi0JIi5camVycm9yLmgiXAotCSIuXGppbmNsdWRlLmgiXAotCSIuXGptb3JlY2ZnLmgiXAotCSIuXGpwZWdpbnQuaCJcCi0JIi5canBlZ2xpYi5oIlwKLQkKLQotLlxqY2FyaXRoLmMgOiBcCi0JIi5camNvbmZpZy5oIlwKLQkiLlxqZXJyb3IuaCJcCi0JIi5camluY2x1ZGUuaCJcCi0JIi5cam1vcmVjZmcuaCJcCi0JIi5canBlZ2ludC5oIlwKLQkiLlxqcGVnbGliLmgiXAotCQotCi0uXGpjY29lZmN0LmMgOiBcCi0JIi5camNvbmZpZy5oIlwKLQkiLlxqZXJyb3IuaCJcCi0JIi5camluY2x1ZGUuaCJcCi0JIi5cam1vcmVjZmcuaCJcCi0JIi5canBlZ2ludC5oIlwKLQkiLlxqcGVnbGliLmgiXAotCQotCi0uXGpjY29sb3IuYyA6IFwKLQkiLlxqY29uZmlnLmgiXAotCSIuXGplcnJvci5oIlwKLQkiLlxqaW5jbHVkZS5oIlwKLQkiLlxqbW9yZWNmZy5oIlwKLQkiLlxqcGVnaW50LmgiXAotCSIuXGpwZWdsaWIuaCJcCi0JCi0KLS5camNkY3RtZ3IuYyA6IFwKLQkiLlxqY29uZmlnLmgiXAotCSIuXGpkY3QuaCJcCi0JIi5camVycm9yLmgiXAotCSIuXGppbmNsdWRlLmgiXAotCSIuXGptb3JlY2ZnLmgiXAotCSIuXGpwZWdpbnQuaCJcCi0JIi5canBlZ2xpYi5oIlwKLQkKLQotLlxqY2h1ZmYuYyA6IFwKLQkiLlxqY29uZmlnLmgiXAotCSIuXGplcnJvci5oIlwKLQkiLlxqaW5jbHVkZS5oIlwKLQkiLlxqbW9yZWNmZy5oIlwKLQkiLlxqcGVnaW50LmgiXAotCSIuXGpwZWdsaWIuaCJcCi0JCi0KLS5camNpbml0LmMgOiBcCi0JIi5camNvbmZpZy5oIlwKLQkiLlxqZXJyb3IuaCJcCi0JIi5camluY2x1ZGUuaCJcCi0JIi5cam1vcmVjZmcuaCJcCi0JIi5canBlZ2ludC5oIlwKLQkiLlxqcGVnbGliLmgiXAotCQotCi0uXGpjbWFpbmN0LmMgOiBcCi0JIi5camNvbmZpZy5oIlwKLQkiLlxqZXJyb3IuaCJcCi0JIi5camluY2x1ZGUuaCJcCi0JIi5cam1vcmVjZmcuaCJcCi0JIi5canBlZ2ludC5oIlwKLQkiLlxqcGVnbGliLmgiXAotCQotCi0uXGpjbWFya2VyLmMgOiBcCi0JIi5camNvbmZpZy5oIlwKLQkiLlxqZXJyb3IuaCJcCi0JIi5camluY2x1ZGUuaCJcCi0JIi5cam1vcmVjZmcuaCJcCi0JIi5canBlZ2ludC5oIlwKLQkiLlxqcGVnbGliLmgiXAotCQotCi0uXGpjbWFzdGVyLmMgOiBcCi0JIi5camNvbmZpZy5oIlwKLQkiLlxqZXJyb3IuaCJcCi0JIi5camluY2x1ZGUuaCJcCi0JIi5cam1vcmVjZmcuaCJcCi0JIi5canBlZ2ludC5oIlwKLQkiLlxqcGVnbGliLmgiXAotCQotCi0uXGpjb21hcGkuYyA6IFwKLQkiLlxqY29uZmlnLmgiXAotCSIuXGplcnJvci5oIlwKLQkiLlxqaW5jbHVkZS5oIlwKLQkiLlxqbW9yZWNmZy5oIlwKLQkiLlxqcGVnaW50LmgiXAotCSIuXGpwZWdsaWIuaCJcCi0JCi0KLS5camNwYXJhbS5jIDogXAotCSIuXGpjb25maWcuaCJcCi0JIi5camVycm9yLmgiXAotCSIuXGppbmNsdWRlLmgiXAotCSIuXGptb3JlY2ZnLmgiXAotCSIuXGpwZWdpbnQuaCJcCi0JIi5canBlZ2xpYi5oIlwKLQkKLQotLlxqY3ByZXBjdC5jIDogXAotCSIuXGpjb25maWcuaCJcCi0JIi5camVycm9yLmgiXAotCSIuXGppbmNsdWRlLmgiXAotCSIuXGptb3JlY2ZnLmgiXAotCSIuXGpwZWdpbnQuaCJcCi0JIi5canBlZ2xpYi5oIlwKLQkKLQotLlxqY3NhbXBsZS5jIDogXAotCSIuXGpjb25maWcuaCJcCi0JIi5camVycm9yLmgiXAotCSIuXGppbmNsdWRlLmgiXAotCSIuXGptb3JlY2ZnLmgiXAotCSIuXGpwZWdpbnQuaCJcCi0JIi5canBlZ2xpYi5oIlwKLQkKLQotLlxqY3RyYW5zLmMgOiBcCi0JIi5camNvbmZpZy5oIlwKLQkiLlxqZXJyb3IuaCJcCi0JIi5camluY2x1ZGUuaCJcCi0JIi5cam1vcmVjZmcuaCJcCi0JIi5canBlZ2ludC5oIlwKLQkiLlxqcGVnbGliLmgiXAotCQotCi0uXGpkYXBpbWluLmMgOiBcCi0JIi5camNvbmZpZy5oIlwKLQkiLlxqZXJyb3IuaCJcCi0JIi5camluY2x1ZGUuaCJcCi0JIi5cam1vcmVjZmcuaCJcCi0JIi5canBlZ2ludC5oIlwKLQkiLlxqcGVnbGliLmgiXAotCQotCi0uXGpkYXBpc3RkLmMgOiBcCi0JIi5camNvbmZpZy5oIlwKLQkiLlxqZXJyb3IuaCJcCi0JIi5camluY2x1ZGUuaCJcCi0JIi5cam1vcmVjZmcuaCJcCi0JIi5canBlZ2ludC5oIlwKLQkiLlxqcGVnbGliLmgiXAotCQotCi0uXGpkYXJpdGguYyA6IFwKLQkiLlxqY29uZmlnLmgiXAotCSIuXGplcnJvci5oIlwKLQkiLlxqaW5jbHVkZS5oIlwKLQkiLlxqbW9yZWNmZy5oIlwKLQkiLlxqcGVnaW50LmgiXAotCSIuXGpwZWdsaWIuaCJcCi0JCi0KLS5camRhdGFkc3QuYyA6IFwKLQkiLlxqY29uZmlnLmgiXAotCSIuXGplcnJvci5oIlwKLQkiLlxqaW5jbHVkZS5oIlwKLQkiLlxqbW9yZWNmZy5oIlwKLQkiLlxqcGVnbGliLmgiXAotCQotCi0uXGpkYXRhc3JjLmMgOiBcCi0JIi5camNvbmZpZy5oIlwKLQkiLlxqZXJyb3IuaCJcCi0JIi5camluY2x1ZGUuaCJcCi0JIi5cam1vcmVjZmcuaCJcCi0JIi5canBlZ2xpYi5oIlwKLQkKLQotLlxqZGNvZWZjdC5jIDogXAotCSIuXGpjb25maWcuaCJcCi0JIi5camVycm9yLmgiXAotCSIuXGppbmNsdWRlLmgiXAotCSIuXGptb3JlY2ZnLmgiXAotCSIuXGpwZWdpbnQuaCJcCi0JIi5canBlZ2xpYi5oIlwKLQkKLQotLlxqZGNvbG9yLmMgOiBcCi0JIi5camNvbmZpZy5oIlwKLQkiLlxqZXJyb3IuaCJcCi0JIi5camluY2x1ZGUuaCJcCi0JIi5cam1vcmVjZmcuaCJcCi0JIi5canBlZ2ludC5oIlwKLQkiLlxqcGVnbGliLmgiXAotCQotCi0uXGpkZGN0bWdyLmMgOiBcCi0JIi5camNvbmZpZy5oIlwKLQkiLlxqZGN0LmgiXAotCSIuXGplcnJvci5oIlwKLQkiLlxqaW5jbHVkZS5oIlwKLQkiLlxqbW9yZWNmZy5oIlwKLQkiLlxqcGVnaW50LmgiXAotCSIuXGpwZWdsaWIuaCJcCi0JCi0KLS5camRodWZmLmMgOiBcCi0JIi5camNvbmZpZy5oIlwKLQkiLlxqZXJyb3IuaCJcCi0JIi5camluY2x1ZGUuaCJcCi0JIi5cam1vcmVjZmcuaCJcCi0JIi5canBlZ2ludC5oIlwKLQkiLlxqcGVnbGliLmgiXAotCQotCi0uXGpkaW5wdXQuYyA6IFwKLQkiLlxqY29uZmlnLmgiXAotCSIuXGplcnJvci5oIlwKLQkiLlxqaW5jbHVkZS5oIlwKLQkiLlxqbW9yZWNmZy5oIlwKLQkiLlxqcGVnaW50LmgiXAotCSIuXGpwZWdsaWIuaCJcCi0JCi0KLS5camRtYWluY3QuYyA6IFwKLQkiLlxqY29uZmlnLmgiXAotCSIuXGplcnJvci5oIlwKLQkiLlxqaW5jbHVkZS5oIlwKLQkiLlxqbW9yZWNmZy5oIlwKLQkiLlxqcGVnaW50LmgiXAotCSIuXGpwZWdsaWIuaCJcCi0JCi0KLS5camRtYXJrZXIuYyA6IFwKLQkiLlxqY29uZmlnLmgiXAotCSIuXGplcnJvci5oIlwKLQkiLlxqaW5jbHVkZS5oIlwKLQkiLlxqbW9yZWNmZy5oIlwKLQkiLlxqcGVnaW50LmgiXAotCSIuXGpwZWdsaWIuaCJcCi0JCi0KLS5camRtYXN0ZXIuYyA6IFwKLQkiLlxqY29uZmlnLmgiXAotCSIuXGplcnJvci5oIlwKLQkiLlxqaW5jbHVkZS5oIlwKLQkiLlxqbW9yZWNmZy5oIlwKLQkiLlxqcGVnaW50LmgiXAotCSIuXGpwZWdsaWIuaCJcCi0JCi0KLS5camRtZXJnZS5jIDogXAotCSIuXGpjb25maWcuaCJcCi0JIi5camVycm9yLmgiXAotCSIuXGppbmNsdWRlLmgiXAotCSIuXGptb3JlY2ZnLmgiXAotCSIuXGpwZWdpbnQuaCJcCi0JIi5canBlZ2xpYi5oIlwKLQkKLQotLlxqZHBvc3RjdC5jIDogXAotCSIuXGpjb25maWcuaCJcCi0JIi5camVycm9yLmgiXAotCSIuXGppbmNsdWRlLmgiXAotCSIuXGptb3JlY2ZnLmgiXAotCSIuXGpwZWdpbnQuaCJcCi0JIi5canBlZ2xpYi5oIlwKLQkKLQotLlxqZHNhbXBsZS5jIDogXAotCSIuXGpjb25maWcuaCJcCi0JIi5camVycm9yLmgiXAotCSIuXGppbmNsdWRlLmgiXAotCSIuXGptb3JlY2ZnLmgiXAotCSIuXGpwZWdpbnQuaCJcCi0JIi5canBlZ2xpYi5oIlwKLQkKLQotLlxqZHRyYW5zLmMgOiBcCi0JIi5camNvbmZpZy5oIlwKLQkiLlxqZXJyb3IuaCJcCi0JIi5camluY2x1ZGUuaCJcCi0JIi5cam1vcmVjZmcuaCJcCi0JIi5canBlZ2ludC5oIlwKLQkiLlxqcGVnbGliLmgiXAotCQotCi0uXGplcnJvci5jIDogXAotCSIuXGpjb25maWcuaCJcCi0JIi5camVycm9yLmgiXAotCSIuXGppbmNsdWRlLmgiXAotCSIuXGptb3JlY2ZnLmgiXAotCSIuXGpwZWdsaWIuaCJcCi0JIi5canZlcnNpb24uaCJcCi0JCi0KLS5camZkY3RmbHQuYyA6IFwKLQkiLlxqY29uZmlnLmgiXAotCSIuXGpkY3QuaCJcCi0JIi5camVycm9yLmgiXAotCSIuXGppbmNsdWRlLmgiXAotCSIuXGptb3JlY2ZnLmgiXAotCSIuXGpwZWdpbnQuaCJcCi0JIi5canBlZ2xpYi5oIlwKLQkKLQotLlxqZmRjdGZzdC5jIDogXAotCSIuXGpjb25maWcuaCJcCi0JIi5camRjdC5oIlwKLQkiLlxqZXJyb3IuaCJcCi0JIi5camluY2x1ZGUuaCJcCi0JIi5cam1vcmVjZmcuaCJcCi0JIi5canBlZ2ludC5oIlwKLQkiLlxqcGVnbGliLmgiXAotCQotCi0uXGpmZGN0aW50LmMgOiBcCi0JIi5camNvbmZpZy5oIlwKLQkiLlxqZGN0LmgiXAotCSIuXGplcnJvci5oIlwKLQkiLlxqaW5jbHVkZS5oIlwKLQkiLlxqbW9yZWNmZy5oIlwKLQkiLlxqcGVnaW50LmgiXAotCSIuXGpwZWdsaWIuaCJcCi0JCi0KLS5camlkY3RmbHQuYyA6IFwKLQkiLlxqY29uZmlnLmgiXAotCSIuXGpkY3QuaCJcCi0JIi5camVycm9yLmgiXAotCSIuXGppbmNsdWRlLmgiXAotCSIuXGptb3JlY2ZnLmgiXAotCSIuXGpwZWdpbnQuaCJcCi0JIi5canBlZ2xpYi5oIlwKLQkKLQotLlxqaWRjdGZzdC5jIDogXAotCSIuXGpjb25maWcuaCJcCi0JIi5camRjdC5oIlwKLQkiLlxqZXJyb3IuaCJcCi0JIi5camluY2x1ZGUuaCJcCi0JIi5cam1vcmVjZmcuaCJcCi0JIi5canBlZ2ludC5oIlwKLQkiLlxqcGVnbGliLmgiXAotCQotCi0uXGppZGN0aW50LmMgOiBcCi0JIi5camNvbmZpZy5oIlwKLQkiLlxqZGN0LmgiXAotCSIuXGplcnJvci5oIlwKLQkiLlxqaW5jbHVkZS5oIlwKLQkiLlxqbW9yZWNmZy5oIlwKLQkiLlxqcGVnaW50LmgiXAotCSIuXGpwZWdsaWIuaCJcCi0JCi0KLS5cam1lbW1nci5jIDogXAotCSIuXGpjb25maWcuaCJcCi0JIi5camVycm9yLmgiXAotCSIuXGppbmNsdWRlLmgiXAotCSIuXGptZW1zeXMuaCJcCi0JIi5cam1vcmVjZmcuaCJcCi0JIi5canBlZ2ludC5oIlwKLQkiLlxqcGVnbGliLmgiXAotCQotCi0uXGptZW1ub2JzLmMgOiBcCi0JIi5camNvbmZpZy5oIlwKLQkiLlxqZXJyb3IuaCJcCi0JIi5camluY2x1ZGUuaCJcCi0JIi5cam1lbXN5cy5oIlwKLQkiLlxqbW9yZWNmZy5oIlwKLQkiLlxqcGVnaW50LmgiXAotCSIuXGpwZWdsaWIuaCJcCi0JCi0KLS5canF1YW50MS5jIDogXAotCSIuXGpjb25maWcuaCJcCi0JIi5camVycm9yLmgiXAotCSIuXGppbmNsdWRlLmgiXAotCSIuXGptb3JlY2ZnLmgiXAotCSIuXGpwZWdpbnQuaCJcCi0JIi5canBlZ2xpYi5oIlwKLQkKLQotLlxqcXVhbnQyLmMgOiBcCi0JIi5camNvbmZpZy5oIlwKLQkiLlxqZXJyb3IuaCJcCi0JIi5camluY2x1ZGUuaCJcCi0JIi5cam1vcmVjZmcuaCJcCi0JIi5canBlZ2ludC5oIlwKLQkiLlxqcGVnbGliLmgiXAotCQotCi0uXGp1dGlscy5jIDogXAotCSIuXGpjb25maWcuaCJcCi0JIi5camVycm9yLmgiXAotCSIuXGppbmNsdWRlLmgiXAotCSIuXGptb3JlY2ZnLmgiXAotCSIuXGpwZWdpbnQuaCJcCi0JIi5canBlZ2xpYi5oIlwKLQkKZGlmZiAtLWdpdCBhL21ha2VqZHNwLnZjNiBiL21ha2VqZHNwLnZjNgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNzM4ZjFhYi4uMDAwMDAwMAotLS0gYS9tYWtlamRzcC52YzYKKysrIC9kZXYvbnVsbApAQCAtMSwyODUgKzAsMCBAQAotIyBNaWNyb3NvZnQgRGV2ZWxvcGVyIFN0dWRpbyBQcm9qZWN0IEZpbGUgLSBOYW1lPSJqcGVnIiAtIFBhY2thZ2UgT3duZXI9PDQ+Ci0jIE1pY3Jvc29mdCBEZXZlbG9wZXIgU3R1ZGlvIEdlbmVyYXRlZCBCdWlsZCBGaWxlLCBGb3JtYXQgVmVyc2lvbiA2LjAwCi0jICoqIE5JQ0hUIEJFQVJCRUlURU4gKioKLQotIyBUQVJHVFlQRSAiV2luMzIgKHg4NikgU3RhdGljIExpYnJhcnkiIDB4MDEwNAotCi1DRkc9anBlZyAtIFdpbjMyCi0hTUVTU0FHRSBEaWVzIGlzdCBrZWluIGeBbHRpZ2VzIE1ha2VmaWxlLiBadW0gRXJzdGVsbGVuIGRpZXNlcyBQcm9qZWt0cyBtaXQgTk1BS0UKLSFNRVNTQUdFIHZlcndlbmRlbiBTaWUgZGVuIEJlZmVobCAiTWFrZWZpbGUgZXhwb3J0aWVyZW4iIHVuZCBmgWhyZW4gU2llIGRlbiBCZWZlaGwKLSFNRVNTQUdFIAotIU1FU1NBR0UgTk1BS0UgL2YgImpwZWcubWFrIi4KLSFNRVNTQUdFIAotIU1FU1NBR0UgU2llIGv3bm5lbiBiZWltIEF1c2aBaHJlbiB2b24gTk1BS0UgZWluZSBLb25maWd1cmF0aW9uIGFuZ2ViZW4KLSFNRVNTQUdFIGR1cmNoIERlZmluaWVyZW4gZGVzIE1ha3JvcyBDRkcgaW4gZGVyIEJlZmVobHN6ZWlsZS4gWnVtIEJlaXNwaWVsOgotIU1FU1NBR0UgCi0hTUVTU0FHRSBOTUFLRSAvZiAianBlZy5tYWsiIENGRz0ianBlZyAtIFdpbjMyIgotIU1FU1NBR0UgCi0hTUVTU0FHRSBGgXIgZGllIEtvbmZpZ3VyYXRpb24gc3RlaGVuIHp1ciBBdXN3YWhsOgotIU1FU1NBR0UgCi0hTUVTU0FHRSAianBlZyAtIFdpbjMyIiAoYmFzaWVyZW5kIGF1ZiAgIldpbjMyICh4ODYpIFN0YXRpYyBMaWJyYXJ5IikKLSFNRVNTQUdFIAotCi0jIEJlZ2luIFByb2plY3QKLSMgUFJPUCBBbGxvd1BlckNvbmZpZ0RlcGVuZGVuY2llcyAwCi0jIFBST1AgU2NjX1Byb2pOYW1lICIiCi0jIFBST1AgU2NjX0xvY2FsUGF0aCAiIgotQ1BQPWNsLmV4ZQotUlNDPXJjLmV4ZQotIyBQUk9QIEJBU0UgVXNlX01GQyAwCi0jIFBST1AgQkFTRSBVc2VfRGVidWdfTGlicmFyaWVzIDAKLSMgUFJPUCBCQVNFIE91dHB1dF9EaXIgIi5cUmVsZWFzZSIKLSMgUFJPUCBCQVNFIEludGVybWVkaWF0ZV9EaXIgIi5cUmVsZWFzZSIKLSMgUFJPUCBCQVNFIFRhcmdldF9EaXIgIiIKLSMgUFJPUCBVc2VfTUZDIDAKLSMgUFJPUCBVc2VfRGVidWdfTGlicmFyaWVzIDAKLSMgUFJPUCBPdXRwdXRfRGlyICIuXFJlbGVhc2UiCi0jIFBST1AgSW50ZXJtZWRpYXRlX0RpciAiLlxSZWxlYXNlIgotIyBQUk9QIFRhcmdldF9EaXIgIiIKLSMgQUREIEJBU0UgQ1BQIC9ub2xvZ28gL1czIC9HWCAvTzIgL0QgIldJTjMyIiAvRCAiTkRFQlVHIiAvRCAiX1dJTkRPV1MiIC9ZWCAvYwotIyBBREQgQ1BQIC9ub2xvZ28gL0c2IC9NVCAvVzMgL0dYIC9PeCAvT2EgL09iMiAvRCAiV0lOMzIiIC9EICJOREVCVUciIC9EICJfV0lORE9XUyIgL1lYIC9GRCAvYwotIyBBREQgQkFTRSBSU0MgL2wgMHg0MDcKLSMgQUREIFJTQyAvbCAweDQwNwotQlNDMzI9YnNjbWFrZS5leGUKLSMgQUREIEJBU0UgQlNDMzIgL25vbG9nbwotIyBBREQgQlNDMzIgL25vbG9nbwotTElCMzI9bGluay5leGUgLWxpYgotIyBBREQgQkFTRSBMSUIzMiAvbm9sb2dvCi0jIEFERCBMSUIzMiAvbm9sb2dvCi0jIEJlZ2luIFRhcmdldAotCi0jIE5hbWUgImpwZWcgLSBXaW4zMiIKLSMgQmVnaW4gR3JvdXAgIlF1ZWxsY29kZWRhdGVpZW4iCi0KLSMgUFJPUCBEZWZhdWx0X0ZpbHRlciAiY3BwO2M7Y3h4O3JjO2RlZjtyO29kbDtpZGw7aHBqO2JhdDtmb3I7ZjkwIgotIyBCZWdpbiBTb3VyY2UgRmlsZQotCi1TT1VSQ0U9LlxqYXJpY29tLmMKLSMgRW5kIFNvdXJjZSBGaWxlCi0jIEJlZ2luIFNvdXJjZSBGaWxlCi0KLVNPVVJDRT0uXGpjYXBpbWluLmMKLSMgRW5kIFNvdXJjZSBGaWxlCi0jIEJlZ2luIFNvdXJjZSBGaWxlCi0KLVNPVVJDRT0uXGpjYXBpc3RkLmMKLSMgRW5kIFNvdXJjZSBGaWxlCi0jIEJlZ2luIFNvdXJjZSBGaWxlCi0KLVNPVVJDRT0uXGpjYXJpdGguYwotIyBFbmQgU291cmNlIEZpbGUKLSMgQmVnaW4gU291cmNlIEZpbGUKLQotU09VUkNFPS5camNjb2VmY3QuYwotIyBFbmQgU291cmNlIEZpbGUKLSMgQmVnaW4gU291cmNlIEZpbGUKLQotU09VUkNFPS5camNjb2xvci5jCi0jIEVuZCBTb3VyY2UgRmlsZQotIyBCZWdpbiBTb3VyY2UgRmlsZQotCi1TT1VSQ0U9LlxqY2RjdG1nci5jCi0jIEVuZCBTb3VyY2UgRmlsZQotIyBCZWdpbiBTb3VyY2UgRmlsZQotCi1TT1VSQ0U9LlxqY2h1ZmYuYwotIyBFbmQgU291cmNlIEZpbGUKLSMgQmVnaW4gU291cmNlIEZpbGUKLQotU09VUkNFPS5camNpbml0LmMKLSMgRW5kIFNvdXJjZSBGaWxlCi0jIEJlZ2luIFNvdXJjZSBGaWxlCi0KLVNPVVJDRT0uXGpjbWFpbmN0LmMKLSMgRW5kIFNvdXJjZSBGaWxlCi0jIEJlZ2luIFNvdXJjZSBGaWxlCi0KLVNPVVJDRT0uXGpjbWFya2VyLmMKLSMgRW5kIFNvdXJjZSBGaWxlCi0jIEJlZ2luIFNvdXJjZSBGaWxlCi0KLVNPVVJDRT0uXGpjbWFzdGVyLmMKLSMgRW5kIFNvdXJjZSBGaWxlCi0jIEJlZ2luIFNvdXJjZSBGaWxlCi0KLVNPVVJDRT0uXGpjb21hcGkuYwotIyBFbmQgU291cmNlIEZpbGUKLSMgQmVnaW4gU291cmNlIEZpbGUKLQotU09VUkNFPS5camNwYXJhbS5jCi0jIEVuZCBTb3VyY2UgRmlsZQotIyBCZWdpbiBTb3VyY2UgRmlsZQotCi1TT1VSQ0U9LlxqY3ByZXBjdC5jCi0jIEVuZCBTb3VyY2UgRmlsZQotIyBCZWdpbiBTb3VyY2UgRmlsZQotCi1TT1VSQ0U9LlxqY3NhbXBsZS5jCi0jIEVuZCBTb3VyY2UgRmlsZQotIyBCZWdpbiBTb3VyY2UgRmlsZQotCi1TT1VSQ0U9LlxqY3RyYW5zLmMKLSMgRW5kIFNvdXJjZSBGaWxlCi0jIEJlZ2luIFNvdXJjZSBGaWxlCi0KLVNPVVJDRT0uXGpkYXBpbWluLmMKLSMgRW5kIFNvdXJjZSBGaWxlCi0jIEJlZ2luIFNvdXJjZSBGaWxlCi0KLVNPVVJDRT0uXGpkYXBpc3RkLmMKLSMgRW5kIFNvdXJjZSBGaWxlCi0jIEJlZ2luIFNvdXJjZSBGaWxlCi0KLVNPVVJDRT0uXGpkYXJpdGguYwotIyBFbmQgU291cmNlIEZpbGUKLSMgQmVnaW4gU291cmNlIEZpbGUKLQotU09VUkNFPS5camRhdGFkc3QuYwotIyBFbmQgU291cmNlIEZpbGUKLSMgQmVnaW4gU291cmNlIEZpbGUKLQotU09VUkNFPS5camRhdGFzcmMuYwotIyBFbmQgU291cmNlIEZpbGUKLSMgQmVnaW4gU291cmNlIEZpbGUKLQotU09VUkNFPS5camRjb2VmY3QuYwotIyBFbmQgU291cmNlIEZpbGUKLSMgQmVnaW4gU291cmNlIEZpbGUKLQotU09VUkNFPS5camRjb2xvci5jCi0jIEVuZCBTb3VyY2UgRmlsZQotIyBCZWdpbiBTb3VyY2UgRmlsZQotCi1TT1VSQ0U9LlxqZGRjdG1nci5jCi0jIEVuZCBTb3VyY2UgRmlsZQotIyBCZWdpbiBTb3VyY2UgRmlsZQotCi1TT1VSQ0U9LlxqZGh1ZmYuYwotIyBFbmQgU291cmNlIEZpbGUKLSMgQmVnaW4gU291cmNlIEZpbGUKLQotU09VUkNFPS5camRpbnB1dC5jCi0jIEVuZCBTb3VyY2UgRmlsZQotIyBCZWdpbiBTb3VyY2UgRmlsZQotCi1TT1VSQ0U9LlxqZG1haW5jdC5jCi0jIEVuZCBTb3VyY2UgRmlsZQotIyBCZWdpbiBTb3VyY2UgRmlsZQotCi1TT1VSQ0U9LlxqZG1hcmtlci5jCi0jIEVuZCBTb3VyY2UgRmlsZQotIyBCZWdpbiBTb3VyY2UgRmlsZQotCi1TT1VSQ0U9LlxqZG1hc3Rlci5jCi0jIEVuZCBTb3VyY2UgRmlsZQotIyBCZWdpbiBTb3VyY2UgRmlsZQotCi1TT1VSQ0U9LlxqZG1lcmdlLmMKLSMgRW5kIFNvdXJjZSBGaWxlCi0jIEJlZ2luIFNvdXJjZSBGaWxlCi0KLVNPVVJDRT0uXGpkcG9zdGN0LmMKLSMgRW5kIFNvdXJjZSBGaWxlCi0jIEJlZ2luIFNvdXJjZSBGaWxlCi0KLVNPVVJDRT0uXGpkc2FtcGxlLmMKLSMgRW5kIFNvdXJjZSBGaWxlCi0jIEJlZ2luIFNvdXJjZSBGaWxlCi0KLVNPVVJDRT0uXGpkdHJhbnMuYwotIyBFbmQgU291cmNlIEZpbGUKLSMgQmVnaW4gU291cmNlIEZpbGUKLQotU09VUkNFPS5camVycm9yLmMKLSMgRW5kIFNvdXJjZSBGaWxlCi0jIEJlZ2luIFNvdXJjZSBGaWxlCi0KLVNPVVJDRT0uXGpmZGN0Zmx0LmMKLSMgRW5kIFNvdXJjZSBGaWxlCi0jIEJlZ2luIFNvdXJjZSBGaWxlCi0KLVNPVVJDRT0uXGpmZGN0ZnN0LmMKLSMgRW5kIFNvdXJjZSBGaWxlCi0jIEJlZ2luIFNvdXJjZSBGaWxlCi0KLVNPVVJDRT0uXGpmZGN0aW50LmMKLSMgRW5kIFNvdXJjZSBGaWxlCi0jIEJlZ2luIFNvdXJjZSBGaWxlCi0KLVNPVVJDRT0uXGppZGN0Zmx0LmMKLSMgRW5kIFNvdXJjZSBGaWxlCi0jIEJlZ2luIFNvdXJjZSBGaWxlCi0KLVNPVVJDRT0uXGppZGN0ZnN0LmMKLSMgRW5kIFNvdXJjZSBGaWxlCi0jIEJlZ2luIFNvdXJjZSBGaWxlCi0KLVNPVVJDRT0uXGppZGN0aW50LmMKLSMgRW5kIFNvdXJjZSBGaWxlCi0jIEJlZ2luIFNvdXJjZSBGaWxlCi0KLVNPVVJDRT0uXGptZW1tZ3IuYwotIyBFbmQgU291cmNlIEZpbGUKLSMgQmVnaW4gU291cmNlIEZpbGUKLQotU09VUkNFPS5cam1lbW5vYnMuYwotIyBFbmQgU291cmNlIEZpbGUKLSMgQmVnaW4gU291cmNlIEZpbGUKLQotU09VUkNFPS5canF1YW50MS5jCi0jIEVuZCBTb3VyY2UgRmlsZQotIyBCZWdpbiBTb3VyY2UgRmlsZQotCi1TT1VSQ0U9LlxqcXVhbnQyLmMKLSMgRW5kIFNvdXJjZSBGaWxlCi0jIEJlZ2luIFNvdXJjZSBGaWxlCi0KLVNPVVJDRT0uXGp1dGlscy5jCi0jIEVuZCBTb3VyY2UgRmlsZQotIyBFbmQgR3JvdXAKLSMgQmVnaW4gR3JvdXAgIkhlYWRlci1EYXRlaWVuIgotCi0jIFBST1AgRGVmYXVsdF9GaWx0ZXIgImg7aHBwO2h4eDtobTtpbmw7Zmk7ZmQiCi0jIEJlZ2luIFNvdXJjZSBGaWxlCi0KLVNPVVJDRT0uXGpjb25maWcuaAotIyBFbmQgU291cmNlIEZpbGUKLSMgQmVnaW4gU291cmNlIEZpbGUKLQotU09VUkNFPS5camRjdC5oCi0jIEVuZCBTb3VyY2UgRmlsZQotIyBCZWdpbiBTb3VyY2UgRmlsZQotCi1TT1VSQ0U9LlxqZXJyb3IuaAotIyBFbmQgU291cmNlIEZpbGUKLSMgQmVnaW4gU291cmNlIEZpbGUKLQotU09VUkNFPS5camluY2x1ZGUuaAotIyBFbmQgU291cmNlIEZpbGUKLSMgQmVnaW4gU291cmNlIEZpbGUKLQotU09VUkNFPS5cam1lbXN5cy5oCi0jIEVuZCBTb3VyY2UgRmlsZQotIyBCZWdpbiBTb3VyY2UgRmlsZQotCi1TT1VSQ0U9LlxqbW9yZWNmZy5oCi0jIEVuZCBTb3VyY2UgRmlsZQotIyBCZWdpbiBTb3VyY2UgRmlsZQotCi1TT1VSQ0U9LlxqcGVnaW50LmgKLSMgRW5kIFNvdXJjZSBGaWxlCi0jIEJlZ2luIFNvdXJjZSBGaWxlCi0KLVNPVVJDRT0uXGpwZWdsaWIuaAotIyBFbmQgU291cmNlIEZpbGUKLSMgQmVnaW4gU291cmNlIEZpbGUKLQotU09VUkNFPS5canZlcnNpb24uaAotIyBFbmQgU291cmNlIEZpbGUKLSMgRW5kIEdyb3VwCi0jIEJlZ2luIEdyb3VwICJSZXNzb3VyY2VuZGF0ZWllbiIKLQotIyBQUk9QIERlZmF1bHRfRmlsdGVyICJpY287Y3VyO2JtcDtkbGc7cmMyO3JjdDtiaW47Y250O3J0ZjtnaWY7anBnO2pwZWc7anBlIgotIyBFbmQgR3JvdXAKLSMgRW5kIFRhcmdldAotIyBFbmQgUHJvamVjdApkaWZmIC0tZ2l0IGEvbWFrZWpkc3cudmM2IGIvbWFrZWpkc3cudmM2CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkMTFmYWIxLi4wMDAwMDAwCi0tLSBhL21ha2VqZHN3LnZjNgorKysgL2Rldi9udWxsCkBAIC0xLDI5ICswLDAgQEAKLU1pY3Jvc29mdCBEZXZlbG9wZXIgU3R1ZGlvIFdvcmtzcGFjZSBGaWxlLCBGb3JtYXQgVmVyc2lvbiA2LjAwCi0jIFdBUk5VTkc6IERJRVNFIEFSQkVJVFNCRVJFSUNIU0RBVEVJIERBUkYgTklDSFQgQkVBUkJFSVRFVCBPREVSIEdFTJlTQ0hUIFdFUkRFTiEKLQotIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwotCi1Qcm9qZWN0OiAianBlZyI9Ii5canBlZy5kc3AiIC0gUGFja2FnZSBPd25lcj08ND4KLQotUGFja2FnZT08NT4KLXt7ewotfX19Ci0KLVBhY2thZ2U9PDQ+Ci17e3sKLX19fQotCi0jIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCi0KLUdsb2JhbDoKLQotUGFja2FnZT08NT4KLXt7ewotfX19Ci0KLVBhY2thZ2U9PDM+Ci17e3sKLX19fQotCi0jIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCi0KZGlmZiAtLWdpdCBhL21ha2VqZmlsLnYxMCBiL21ha2VqZmlsLnYxMApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNjU0YmZjMC4uMDAwMDAwMAotLS0gYS9tYWtlamZpbC52MTAKKysrIC9kZXYvbnVsbApAQCAtMSwxODYgKzAsMCBAQAoti6+oPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz4KLTxQcm9qZWN0IFRvb2xzVmVyc2lvbj0iNC4wIiB4bWxucz0iaHR0cDovL3NjaGVtYXMubWljcm9zb2Z0LmNvbS9kZXZlbG9wZXIvbXNidWlsZC8yMDAzIj4KLSAgPEl0ZW1Hcm91cD4KLSAgICA8RmlsdGVyIEluY2x1ZGU9IlNvdXJjZSBGaWxlcyI+Ci0gICAgICA8VW5pcXVlSWRlbnRpZmllcj57NEZDNzM3RjEtQzdBNS00Mzc2LUEwNjYtMkEzMkQ3NTJBMkZGfTwvVW5pcXVlSWRlbnRpZmllcj4KLSAgICAgIDxFeHRlbnNpb25zPmNwcDtjO2NjO2N4eDtkZWY7b2RsO2lkbDtocGo7YmF0O2FzbTthc214PC9FeHRlbnNpb25zPgotICAgIDwvRmlsdGVyPgotICAgIDxGaWx0ZXIgSW5jbHVkZT0iSGVhZGVyIEZpbGVzIj4KLSAgICAgIDxVbmlxdWVJZGVudGlmaWVyPns5Mzk5NTM4MC04OUJELTRiMDQtODhFQi02MjVGQkU1MkVCRkJ9PC9VbmlxdWVJZGVudGlmaWVyPgotICAgICAgPEV4dGVuc2lvbnM+aDtocHA7aHh4O2htO2lubDtpbmM7eHNkPC9FeHRlbnNpb25zPgotICAgIDwvRmlsdGVyPgotICAgIDxGaWx0ZXIgSW5jbHVkZT0iUmVzb3VyY2UgRmlsZXMiPgotICAgICAgPFVuaXF1ZUlkZW50aWZpZXI+ezY3REE2QUI2LUY4MDAtNGMwOC04QjdBLTgzQkIxMjFBQUQwMX08L1VuaXF1ZUlkZW50aWZpZXI+Ci0gICAgICA8RXh0ZW5zaW9ucz5yYztpY287Y3VyO2JtcDtkbGc7cmMyO3JjdDtiaW47cmdzO2dpZjtqcGc7anBlZztqcGU7cmVzeDt0aWZmO3RpZjtwbmc7d2F2O21mY3JpYmJvbi1tczwvRXh0ZW5zaW9ucz4KLSAgICA8L0ZpbHRlcj4KLSAgPC9JdGVtR3JvdXA+Ci0gIDxJdGVtR3JvdXA+Ci0gICAgPENsSW5jbHVkZSBJbmNsdWRlPSJqY29uZmlnLmgiPgotICAgICAgPEZpbHRlcj5IZWFkZXIgRmlsZXM8L0ZpbHRlcj4KLSAgICA8L0NsSW5jbHVkZT4KLSAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9ImpkY3QuaCI+Ci0gICAgICA8RmlsdGVyPkhlYWRlciBGaWxlczwvRmlsdGVyPgotICAgIDwvQ2xJbmNsdWRlPgotICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iamVycm9yLmgiPgotICAgICAgPEZpbHRlcj5IZWFkZXIgRmlsZXM8L0ZpbHRlcj4KLSAgICA8L0NsSW5jbHVkZT4KLSAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9ImppbmNsdWRlLmgiPgotICAgICAgPEZpbHRlcj5IZWFkZXIgRmlsZXM8L0ZpbHRlcj4KLSAgICA8L0NsSW5jbHVkZT4KLSAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9ImptZW1zeXMuaCI+Ci0gICAgICA8RmlsdGVyPkhlYWRlciBGaWxlczwvRmlsdGVyPgotICAgIDwvQ2xJbmNsdWRlPgotICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iam1vcmVjZmcuaCI+Ci0gICAgICA8RmlsdGVyPkhlYWRlciBGaWxlczwvRmlsdGVyPgotICAgIDwvQ2xJbmNsdWRlPgotICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0ianBlZ2ludC5oIj4KLSAgICAgIDxGaWx0ZXI+SGVhZGVyIEZpbGVzPC9GaWx0ZXI+Ci0gICAgPC9DbEluY2x1ZGU+Ci0gICAgPENsSW5jbHVkZSBJbmNsdWRlPSJqcGVnbGliLmgiPgotICAgICAgPEZpbHRlcj5IZWFkZXIgRmlsZXM8L0ZpbHRlcj4KLSAgICA8L0NsSW5jbHVkZT4KLSAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Imp2ZXJzaW9uLmgiPgotICAgICAgPEZpbHRlcj5IZWFkZXIgRmlsZXM8L0ZpbHRlcj4KLSAgICA8L0NsSW5jbHVkZT4KLSAgPC9JdGVtR3JvdXA+Ci0gIDxJdGVtR3JvdXA+Ci0gICAgPENsQ29tcGlsZSBJbmNsdWRlPSJqYXJpY29tLmMiPgotICAgICAgPEZpbHRlcj5Tb3VyY2UgRmlsZXM8L0ZpbHRlcj4KLSAgICA8L0NsQ29tcGlsZT4KLSAgICA8Q2xDb21waWxlIEluY2x1ZGU9ImpjYXBpbWluLmMiPgotICAgICAgPEZpbHRlcj5Tb3VyY2UgRmlsZXM8L0ZpbHRlcj4KLSAgICA8L0NsQ29tcGlsZT4KLSAgICA8Q2xDb21waWxlIEluY2x1ZGU9ImpjYXBpc3RkLmMiPgotICAgICAgPEZpbHRlcj5Tb3VyY2UgRmlsZXM8L0ZpbHRlcj4KLSAgICA8L0NsQ29tcGlsZT4KLSAgICA8Q2xDb21waWxlIEluY2x1ZGU9ImpjYXJpdGguYyI+Ci0gICAgICA8RmlsdGVyPlNvdXJjZSBGaWxlczwvRmlsdGVyPgotICAgIDwvQ2xDb21waWxlPgotICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iamNjb2VmY3QuYyI+Ci0gICAgICA8RmlsdGVyPlNvdXJjZSBGaWxlczwvRmlsdGVyPgotICAgIDwvQ2xDb21waWxlPgotICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iamNjb2xvci5jIj4KLSAgICAgIDxGaWx0ZXI+U291cmNlIEZpbGVzPC9GaWx0ZXI+Ci0gICAgPC9DbENvbXBpbGU+Ci0gICAgPENsQ29tcGlsZSBJbmNsdWRlPSJqY2RjdG1nci5jIj4KLSAgICAgIDxGaWx0ZXI+U291cmNlIEZpbGVzPC9GaWx0ZXI+Ci0gICAgPC9DbENvbXBpbGU+Ci0gICAgPENsQ29tcGlsZSBJbmNsdWRlPSJqY2h1ZmYuYyI+Ci0gICAgICA8RmlsdGVyPlNvdXJjZSBGaWxlczwvRmlsdGVyPgotICAgIDwvQ2xDb21waWxlPgotICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iamNpbml0LmMiPgotICAgICAgPEZpbHRlcj5Tb3VyY2UgRmlsZXM8L0ZpbHRlcj4KLSAgICA8L0NsQ29tcGlsZT4KLSAgICA8Q2xDb21waWxlIEluY2x1ZGU9ImpjbWFpbmN0LmMiPgotICAgICAgPEZpbHRlcj5Tb3VyY2UgRmlsZXM8L0ZpbHRlcj4KLSAgICA8L0NsQ29tcGlsZT4KLSAgICA8Q2xDb21waWxlIEluY2x1ZGU9ImpjbWFya2VyLmMiPgotICAgICAgPEZpbHRlcj5Tb3VyY2UgRmlsZXM8L0ZpbHRlcj4KLSAgICA8L0NsQ29tcGlsZT4KLSAgICA8Q2xDb21waWxlIEluY2x1ZGU9ImpjbWFzdGVyLmMiPgotICAgICAgPEZpbHRlcj5Tb3VyY2UgRmlsZXM8L0ZpbHRlcj4KLSAgICA8L0NsQ29tcGlsZT4KLSAgICA8Q2xDb21waWxlIEluY2x1ZGU9Impjb21hcGkuYyI+Ci0gICAgICA8RmlsdGVyPlNvdXJjZSBGaWxlczwvRmlsdGVyPgotICAgIDwvQ2xDb21waWxlPgotICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iamNwYXJhbS5jIj4KLSAgICAgIDxGaWx0ZXI+U291cmNlIEZpbGVzPC9GaWx0ZXI+Ci0gICAgPC9DbENvbXBpbGU+Ci0gICAgPENsQ29tcGlsZSBJbmNsdWRlPSJqY3ByZXBjdC5jIj4KLSAgICAgIDxGaWx0ZXI+U291cmNlIEZpbGVzPC9GaWx0ZXI+Ci0gICAgPC9DbENvbXBpbGU+Ci0gICAgPENsQ29tcGlsZSBJbmNsdWRlPSJqY3NhbXBsZS5jIj4KLSAgICAgIDxGaWx0ZXI+U291cmNlIEZpbGVzPC9GaWx0ZXI+Ci0gICAgPC9DbENvbXBpbGU+Ci0gICAgPENsQ29tcGlsZSBJbmNsdWRlPSJqY3RyYW5zLmMiPgotICAgICAgPEZpbHRlcj5Tb3VyY2UgRmlsZXM8L0ZpbHRlcj4KLSAgICA8L0NsQ29tcGlsZT4KLSAgICA8Q2xDb21waWxlIEluY2x1ZGU9ImpkYXBpbWluLmMiPgotICAgICAgPEZpbHRlcj5Tb3VyY2UgRmlsZXM8L0ZpbHRlcj4KLSAgICA8L0NsQ29tcGlsZT4KLSAgICA8Q2xDb21waWxlIEluY2x1ZGU9ImpkYXBpc3RkLmMiPgotICAgICAgPEZpbHRlcj5Tb3VyY2UgRmlsZXM8L0ZpbHRlcj4KLSAgICA8L0NsQ29tcGlsZT4KLSAgICA8Q2xDb21waWxlIEluY2x1ZGU9ImpkYXJpdGguYyI+Ci0gICAgICA8RmlsdGVyPlNvdXJjZSBGaWxlczwvRmlsdGVyPgotICAgIDwvQ2xDb21waWxlPgotICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iamRhdGFkc3QuYyI+Ci0gICAgICA8RmlsdGVyPlNvdXJjZSBGaWxlczwvRmlsdGVyPgotICAgIDwvQ2xDb21waWxlPgotICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iamRhdGFzcmMuYyI+Ci0gICAgICA8RmlsdGVyPlNvdXJjZSBGaWxlczwvRmlsdGVyPgotICAgIDwvQ2xDb21waWxlPgotICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iamRjb2VmY3QuYyI+Ci0gICAgICA8RmlsdGVyPlNvdXJjZSBGaWxlczwvRmlsdGVyPgotICAgIDwvQ2xDb21waWxlPgotICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iamRjb2xvci5jIj4KLSAgICAgIDxGaWx0ZXI+U291cmNlIEZpbGVzPC9GaWx0ZXI+Ci0gICAgPC9DbENvbXBpbGU+Ci0gICAgPENsQ29tcGlsZSBJbmNsdWRlPSJqZGRjdG1nci5jIj4KLSAgICAgIDxGaWx0ZXI+U291cmNlIEZpbGVzPC9GaWx0ZXI+Ci0gICAgPC9DbENvbXBpbGU+Ci0gICAgPENsQ29tcGlsZSBJbmNsdWRlPSJqZGh1ZmYuYyI+Ci0gICAgICA8RmlsdGVyPlNvdXJjZSBGaWxlczwvRmlsdGVyPgotICAgIDwvQ2xDb21waWxlPgotICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iamRpbnB1dC5jIj4KLSAgICAgIDxGaWx0ZXI+U291cmNlIEZpbGVzPC9GaWx0ZXI+Ci0gICAgPC9DbENvbXBpbGU+Ci0gICAgPENsQ29tcGlsZSBJbmNsdWRlPSJqZG1haW5jdC5jIj4KLSAgICAgIDxGaWx0ZXI+U291cmNlIEZpbGVzPC9GaWx0ZXI+Ci0gICAgPC9DbENvbXBpbGU+Ci0gICAgPENsQ29tcGlsZSBJbmNsdWRlPSJqZG1hcmtlci5jIj4KLSAgICAgIDxGaWx0ZXI+U291cmNlIEZpbGVzPC9GaWx0ZXI+Ci0gICAgPC9DbENvbXBpbGU+Ci0gICAgPENsQ29tcGlsZSBJbmNsdWRlPSJqZG1hc3Rlci5jIj4KLSAgICAgIDxGaWx0ZXI+U291cmNlIEZpbGVzPC9GaWx0ZXI+Ci0gICAgPC9DbENvbXBpbGU+Ci0gICAgPENsQ29tcGlsZSBJbmNsdWRlPSJqZG1lcmdlLmMiPgotICAgICAgPEZpbHRlcj5Tb3VyY2UgRmlsZXM8L0ZpbHRlcj4KLSAgICA8L0NsQ29tcGlsZT4KLSAgICA8Q2xDb21waWxlIEluY2x1ZGU9ImpkcG9zdGN0LmMiPgotICAgICAgPEZpbHRlcj5Tb3VyY2UgRmlsZXM8L0ZpbHRlcj4KLSAgICA8L0NsQ29tcGlsZT4KLSAgICA8Q2xDb21waWxlIEluY2x1ZGU9Impkc2FtcGxlLmMiPgotICAgICAgPEZpbHRlcj5Tb3VyY2UgRmlsZXM8L0ZpbHRlcj4KLSAgICA8L0NsQ29tcGlsZT4KLSAgICA8Q2xDb21waWxlIEluY2x1ZGU9ImpkdHJhbnMuYyI+Ci0gICAgICA8RmlsdGVyPlNvdXJjZSBGaWxlczwvRmlsdGVyPgotICAgIDwvQ2xDb21waWxlPgotICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iamVycm9yLmMiPgotICAgICAgPEZpbHRlcj5Tb3VyY2UgRmlsZXM8L0ZpbHRlcj4KLSAgICA8L0NsQ29tcGlsZT4KLSAgICA8Q2xDb21waWxlIEluY2x1ZGU9ImpmZGN0Zmx0LmMiPgotICAgICAgPEZpbHRlcj5Tb3VyY2UgRmlsZXM8L0ZpbHRlcj4KLSAgICA8L0NsQ29tcGlsZT4KLSAgICA8Q2xDb21waWxlIEluY2x1ZGU9ImpmZGN0ZnN0LmMiPgotICAgICAgPEZpbHRlcj5Tb3VyY2UgRmlsZXM8L0ZpbHRlcj4KLSAgICA8L0NsQ29tcGlsZT4KLSAgICA8Q2xDb21waWxlIEluY2x1ZGU9ImpmZGN0aW50LmMiPgotICAgICAgPEZpbHRlcj5Tb3VyY2UgRmlsZXM8L0ZpbHRlcj4KLSAgICA8L0NsQ29tcGlsZT4KLSAgICA8Q2xDb21waWxlIEluY2x1ZGU9ImppZGN0Zmx0LmMiPgotICAgICAgPEZpbHRlcj5Tb3VyY2UgRmlsZXM8L0ZpbHRlcj4KLSAgICA8L0NsQ29tcGlsZT4KLSAgICA8Q2xDb21waWxlIEluY2x1ZGU9ImppZGN0ZnN0LmMiPgotICAgICAgPEZpbHRlcj5Tb3VyY2UgRmlsZXM8L0ZpbHRlcj4KLSAgICA8L0NsQ29tcGlsZT4KLSAgICA8Q2xDb21waWxlIEluY2x1ZGU9ImppZGN0aW50LmMiPgotICAgICAgPEZpbHRlcj5Tb3VyY2UgRmlsZXM8L0ZpbHRlcj4KLSAgICA8L0NsQ29tcGlsZT4KLSAgICA8Q2xDb21waWxlIEluY2x1ZGU9ImptZW1tZ3IuYyI+Ci0gICAgICA8RmlsdGVyPlNvdXJjZSBGaWxlczwvRmlsdGVyPgotICAgIDwvQ2xDb21waWxlPgotICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iam1lbW5vYnMuYyI+Ci0gICAgICA8RmlsdGVyPlNvdXJjZSBGaWxlczwvRmlsdGVyPgotICAgIDwvQ2xDb21waWxlPgotICAgIDxDbENvbXBpbGUgSW5jbHVkZT0ianF1YW50MS5jIj4KLSAgICAgIDxGaWx0ZXI+U291cmNlIEZpbGVzPC9GaWx0ZXI+Ci0gICAgPC9DbENvbXBpbGU+Ci0gICAgPENsQ29tcGlsZSBJbmNsdWRlPSJqcXVhbnQyLmMiPgotICAgICAgPEZpbHRlcj5Tb3VyY2UgRmlsZXM8L0ZpbHRlcj4KLSAgICA8L0NsQ29tcGlsZT4KLSAgICA8Q2xDb21waWxlIEluY2x1ZGU9Imp1dGlscy5jIj4KLSAgICAgIDxGaWx0ZXI+U291cmNlIEZpbGVzPC9GaWx0ZXI+Ci0gICAgPC9DbENvbXBpbGU+Ci0gIDwvSXRlbUdyb3VwPgotPC9Qcm9qZWN0PgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL21ha2VqbWFrLnZjNiBiL21ha2VqbWFrLnZjNgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMTEwNzMzNi4uMDAwMDAwMAotLS0gYS9tYWtlam1hay52YzYKKysrIC9kZXYvbnVsbApAQCAtMSw0MjUgKzAsMCBAQAotIyBNaWNyb3NvZnQgRGV2ZWxvcGVyIFN0dWRpbyBHZW5lcmF0ZWQgTk1BS0UgRmlsZSwgQmFzZWQgb24ganBlZy5kc3AKLSFJRiAiJChDRkcpIiA9PSAiIgotQ0ZHPWpwZWcgLSBXaW4zMgotIU1FU1NBR0UgS2VpbmUgS29uZmlndXJhdGlvbiBhbmdlZ2ViZW4uIGpwZWcgLSBXaW4zMiB3aXJkIGFscyBTdGFuZGFyZCB2ZXJ3ZW5kZXQuCi0hRU5ESUYgCi0KLSFJRiAiJChDRkcpIiAhPSAianBlZyAtIFdpbjMyIgotIU1FU1NBR0UgVW5n/Gx0aWdlIEtvbmZpZ3VyYXRpb24gIiQoQ0ZHKSIgYW5nZWdlYmVuLgotIU1FU1NBR0UgU2llIGv2bm5lbiBiZWltIEF1c2b8aHJlbiB2b24gTk1BS0UgZWluZSBLb25maWd1cmF0aW9uIGFuZ2ViZW4KLSFNRVNTQUdFIGR1cmNoIERlZmluaWVyZW4gZGVzIE1ha3JvcyBDRkcgaW4gZGVyIEJlZmVobHN6ZWlsZS4gWnVtIEJlaXNwaWVsOgotIU1FU1NBR0UgCi0hTUVTU0FHRSBOTUFLRSAvZiAianBlZy5tYWsiIENGRz0ianBlZyAtIFdpbjMyIgotIU1FU1NBR0UgCi0hTUVTU0FHRSBG/HIgZGllIEtvbmZpZ3VyYXRpb24gc3RlaGVuIHp1ciBBdXN3YWhsOgotIU1FU1NBR0UgCi0hTUVTU0FHRSAianBlZyAtIFdpbjMyIiAoYmFzaWVyZW5kIGF1ZiAgIldpbjMyICh4ODYpIFN0YXRpYyBMaWJyYXJ5IikKLSFNRVNTQUdFIAotIUVSUk9SIEVpbmUgdW5n/Gx0aWdlIEtvbmZpZ3VyYXRpb24gd3VyZGUgYW5nZWdlYmVuLgotIUVORElGIAotCi0hSUYgIiQoT1MpIiA9PSAiV2luZG93c19OVCIKLU5VTEw9Ci0hRUxTRSAKLU5VTEw9bnVsCi0hRU5ESUYgCi0KLU9VVERJUj0uXFJlbGVhc2UKLUlOVERJUj0uXFJlbGVhc2UKLSMgQmVnaW4gQ3VzdG9tIE1hY3JvcwotT3V0RGlyPS5cUmVsZWFzZQotIyBFbmQgQ3VzdG9tIE1hY3JvcwotCi1BTEwgOiAiJChPVVRESVIpXGpwZWcubGliIgotCi0KLUNMRUFOIDoKLQktQGVyYXNlICIkKElOVERJUilcamFyaWNvbS5vYmoiCi0JLUBlcmFzZSAiJChJTlRESVIpXGpjYXBpbWluLm9iaiIKLQktQGVyYXNlICIkKElOVERJUilcamNhcGlzdGQub2JqIgotCS1AZXJhc2UgIiQoSU5URElSKVxqY2FyaXRoLm9iaiIKLQktQGVyYXNlICIkKElOVERJUilcamNjb2VmY3Qub2JqIgotCS1AZXJhc2UgIiQoSU5URElSKVxqY2NvbG9yLm9iaiIKLQktQGVyYXNlICIkKElOVERJUilcamNkY3RtZ3Iub2JqIgotCS1AZXJhc2UgIiQoSU5URElSKVxqY2h1ZmYub2JqIgotCS1AZXJhc2UgIiQoSU5URElSKVxqY2luaXQub2JqIgotCS1AZXJhc2UgIiQoSU5URElSKVxqY21haW5jdC5vYmoiCi0JLUBlcmFzZSAiJChJTlRESVIpXGpjbWFya2VyLm9iaiIKLQktQGVyYXNlICIkKElOVERJUilcamNtYXN0ZXIub2JqIgotCS1AZXJhc2UgIiQoSU5URElSKVxqY29tYXBpLm9iaiIKLQktQGVyYXNlICIkKElOVERJUilcamNwYXJhbS5vYmoiCi0JLUBlcmFzZSAiJChJTlRESVIpXGpjcHJlcGN0Lm9iaiIKLQktQGVyYXNlICIkKElOVERJUilcamNzYW1wbGUub2JqIgotCS1AZXJhc2UgIiQoSU5URElSKVxqY3RyYW5zLm9iaiIKLQktQGVyYXNlICIkKElOVERJUilcamRhcGltaW4ub2JqIgotCS1AZXJhc2UgIiQoSU5URElSKVxqZGFwaXN0ZC5vYmoiCi0JLUBlcmFzZSAiJChJTlRESVIpXGpkYXJpdGgub2JqIgotCS1AZXJhc2UgIiQoSU5URElSKVxqZGF0YWRzdC5vYmoiCi0JLUBlcmFzZSAiJChJTlRESVIpXGpkYXRhc3JjLm9iaiIKLQktQGVyYXNlICIkKElOVERJUilcamRjb2VmY3Qub2JqIgotCS1AZXJhc2UgIiQoSU5URElSKVxqZGNvbG9yLm9iaiIKLQktQGVyYXNlICIkKElOVERJUilcamRkY3RtZ3Iub2JqIgotCS1AZXJhc2UgIiQoSU5URElSKVxqZGh1ZmYub2JqIgotCS1AZXJhc2UgIiQoSU5URElSKVxqZGlucHV0Lm9iaiIKLQktQGVyYXNlICIkKElOVERJUilcamRtYWluY3Qub2JqIgotCS1AZXJhc2UgIiQoSU5URElSKVxqZG1hcmtlci5vYmoiCi0JLUBlcmFzZSAiJChJTlRESVIpXGpkbWFzdGVyLm9iaiIKLQktQGVyYXNlICIkKElOVERJUilcamRtZXJnZS5vYmoiCi0JLUBlcmFzZSAiJChJTlRESVIpXGpkcG9zdGN0Lm9iaiIKLQktQGVyYXNlICIkKElOVERJUilcamRzYW1wbGUub2JqIgotCS1AZXJhc2UgIiQoSU5URElSKVxqZHRyYW5zLm9iaiIKLQktQGVyYXNlICIkKElOVERJUilcamVycm9yLm9iaiIKLQktQGVyYXNlICIkKElOVERJUilcamZkY3RmbHQub2JqIgotCS1AZXJhc2UgIiQoSU5URElSKVxqZmRjdGZzdC5vYmoiCi0JLUBlcmFzZSAiJChJTlRESVIpXGpmZGN0aW50Lm9iaiIKLQktQGVyYXNlICIkKElOVERJUilcamlkY3RmbHQub2JqIgotCS1AZXJhc2UgIiQoSU5URElSKVxqaWRjdGZzdC5vYmoiCi0JLUBlcmFzZSAiJChJTlRESVIpXGppZGN0aW50Lm9iaiIKLQktQGVyYXNlICIkKElOVERJUilcam1lbW1nci5vYmoiCi0JLUBlcmFzZSAiJChJTlRESVIpXGptZW1ub2JzLm9iaiIKLQktQGVyYXNlICIkKElOVERJUilcanF1YW50MS5vYmoiCi0JLUBlcmFzZSAiJChJTlRESVIpXGpxdWFudDIub2JqIgotCS1AZXJhc2UgIiQoSU5URElSKVxqdXRpbHMub2JqIgotCS1AZXJhc2UgIiQoSU5URElSKVx2YzYwLmlkYiIKLQktQGVyYXNlICIkKE9VVERJUilcanBlZy5saWIiCi0KLSIkKE9VVERJUikiIDoKLSAgICBpZiBub3QgZXhpc3QgIiQoT1VURElSKS8kKE5VTEwpIiBta2RpciAiJChPVVRESVIpIgotCi1DUFA9Y2wuZXhlCi1DUFBfUFJPSj0vbm9sb2dvIC9HNiAvTVQgL1czIC9HWCAvT3ggL09hIC9PYjIgL0QgIldJTjMyIiAvRCAiTkRFQlVHIiAvRCAiX1dJTkRPV1MiIC9GcCIkKElOVERJUilcanBlZy5wY2giIC9ZWCAvRm8iJChJTlRESVIpXFwiIC9GZCIkKElOVERJUilcXCIgL0ZEIC9jIAotCi0uY3skKElOVERJUil9Lm9iajo6Ci0gICAkKENQUCkgQDw8Ci0gICAkKENQUF9QUk9KKSAkPCAKLTw8Ci0KLS5jcHB7JChJTlRESVIpfS5vYmo6OgotICAgJChDUFApIEA8PAotICAgJChDUFBfUFJPSikgJDwgCi08PAotCi0uY3h4eyQoSU5URElSKX0ub2JqOjoKLSAgICQoQ1BQKSBAPDwKLSAgICQoQ1BQX1BST0opICQ8IAotPDwKLQotLmN7JChJTlRESVIpfS5zYnI6OgotICAgJChDUFApIEA8PAotICAgJChDUFBfUFJPSikgJDwgCi08PAotCi0uY3BweyQoSU5URElSKX0uc2JyOjoKLSAgICQoQ1BQKSBAPDwKLSAgICQoQ1BQX1BST0opICQ8IAotPDwKLQotLmN4eHskKElOVERJUil9LnNicjo6Ci0gICAkKENQUCkgQDw8Ci0gICAkKENQUF9QUk9KKSAkPCAKLTw8Ci0KLVJTQz1yYy5leGUKLUJTQzMyPWJzY21ha2UuZXhlCi1CU0MzMl9GTEFHUz0vbm9sb2dvIC9vIiQoT1VURElSKVxqcGVnLmJzYyIgCi1CU0MzMl9TQlJTPSBcCi0JCi1MSUIzMj1saW5rLmV4ZSAtbGliCi1MSUIzMl9GTEFHUz0vbm9sb2dvIC9vdXQ6IiQoT1VURElSKVxqcGVnLmxpYiIgCi1MSUIzMl9PQkpTPSBcCi0JIiQoSU5URElSKVxqYXJpY29tLm9iaiIgXAotCSIkKElOVERJUilcamNhcGltaW4ub2JqIiBcCi0JIiQoSU5URElSKVxqY2FwaXN0ZC5vYmoiIFwKLQkiJChJTlRESVIpXGpjYXJpdGgub2JqIiBcCi0JIiQoSU5URElSKVxqY2NvZWZjdC5vYmoiIFwKLQkiJChJTlRESVIpXGpjY29sb3Iub2JqIiBcCi0JIiQoSU5URElSKVxqY2RjdG1nci5vYmoiIFwKLQkiJChJTlRESVIpXGpjaHVmZi5vYmoiIFwKLQkiJChJTlRESVIpXGpjaW5pdC5vYmoiIFwKLQkiJChJTlRESVIpXGpjbWFpbmN0Lm9iaiIgXAotCSIkKElOVERJUilcamNtYXJrZXIub2JqIiBcCi0JIiQoSU5URElSKVxqY21hc3Rlci5vYmoiIFwKLQkiJChJTlRESVIpXGpjb21hcGkub2JqIiBcCi0JIiQoSU5URElSKVxqY3BhcmFtLm9iaiIgXAotCSIkKElOVERJUilcamNwcmVwY3Qub2JqIiBcCi0JIiQoSU5URElSKVxqY3NhbXBsZS5vYmoiIFwKLQkiJChJTlRESVIpXGpjdHJhbnMub2JqIiBcCi0JIiQoSU5URElSKVxqZGFwaW1pbi5vYmoiIFwKLQkiJChJTlRESVIpXGpkYXBpc3RkLm9iaiIgXAotCSIkKElOVERJUilcamRhcml0aC5vYmoiIFwKLQkiJChJTlRESVIpXGpkYXRhZHN0Lm9iaiIgXAotCSIkKElOVERJUilcamRhdGFzcmMub2JqIiBcCi0JIiQoSU5URElSKVxqZGNvZWZjdC5vYmoiIFwKLQkiJChJTlRESVIpXGpkY29sb3Iub2JqIiBcCi0JIiQoSU5URElSKVxqZGRjdG1nci5vYmoiIFwKLQkiJChJTlRESVIpXGpkaHVmZi5vYmoiIFwKLQkiJChJTlRESVIpXGpkaW5wdXQub2JqIiBcCi0JIiQoSU5URElSKVxqZG1haW5jdC5vYmoiIFwKLQkiJChJTlRESVIpXGpkbWFya2VyLm9iaiIgXAotCSIkKElOVERJUilcamRtYXN0ZXIub2JqIiBcCi0JIiQoSU5URElSKVxqZG1lcmdlLm9iaiIgXAotCSIkKElOVERJUilcamRwb3N0Y3Qub2JqIiBcCi0JIiQoSU5URElSKVxqZHNhbXBsZS5vYmoiIFwKLQkiJChJTlRESVIpXGpkdHJhbnMub2JqIiBcCi0JIiQoSU5URElSKVxqZXJyb3Iub2JqIiBcCi0JIiQoSU5URElSKVxqZmRjdGZsdC5vYmoiIFwKLQkiJChJTlRESVIpXGpmZGN0ZnN0Lm9iaiIgXAotCSIkKElOVERJUilcamZkY3RpbnQub2JqIiBcCi0JIiQoSU5URElSKVxqaWRjdGZsdC5vYmoiIFwKLQkiJChJTlRESVIpXGppZGN0ZnN0Lm9iaiIgXAotCSIkKElOVERJUilcamlkY3RpbnQub2JqIiBcCi0JIiQoSU5URElSKVxqbWVtbWdyLm9iaiIgXAotCSIkKElOVERJUilcam1lbW5vYnMub2JqIiBcCi0JIiQoSU5URElSKVxqcXVhbnQxLm9iaiIgXAotCSIkKElOVERJUilcanF1YW50Mi5vYmoiIFwKLQkiJChJTlRESVIpXGp1dGlscy5vYmoiCi0KLSIkKE9VVERJUilcanBlZy5saWIiIDogIiQoT1VURElSKSIgJChERUZfRklMRSkgJChMSUIzMl9PQkpTKQotICAgICQoTElCMzIpIEA8PAotICAkKExJQjMyX0ZMQUdTKSAkKERFRl9GTEFHUykgJChMSUIzMl9PQkpTKQotPDwKLQotCi0hSUYgIiQoTk9fRVhURVJOQUxfREVQUykiICE9ICIxIgotIUlGIEVYSVNUUygianBlZy5kZXAiKQotIUlOQ0xVREUgImpwZWcuZGVwIgotIUVMU0UgCi0hTUVTU0FHRSBXYXJuaW5nOiBjYW5ub3QgZmluZCAianBlZy5kZXAiCi0hRU5ESUYgCi0hRU5ESUYgCi0KLQotIUlGICIkKENGRykiID09ICJqcGVnIC0gV2luMzIiCi1TT1VSQ0U9LlxqYXJpY29tLmMKLQotIiQoSU5URElSKVxqYXJpY29tLm9iaiIgOiAkKFNPVVJDRSkgIiQoSU5URElSKSIKLQotCi1TT1VSQ0U9LlxqY2FwaW1pbi5jCi0KLSIkKElOVERJUilcamNhcGltaW4ub2JqIiA6ICQoU09VUkNFKSAiJChJTlRESVIpIgotCi0KLVNPVVJDRT0uXGpjYXBpc3RkLmMKLQotIiQoSU5URElSKVxqY2FwaXN0ZC5vYmoiIDogJChTT1VSQ0UpICIkKElOVERJUikiCi0KLQotU09VUkNFPS5camNhcml0aC5jCi0KLSIkKElOVERJUilcamNhcml0aC5vYmoiIDogJChTT1VSQ0UpICIkKElOVERJUikiCi0KLQotU09VUkNFPS5camNjb2VmY3QuYwotCi0iJChJTlRESVIpXGpjY29lZmN0Lm9iaiIgOiAkKFNPVVJDRSkgIiQoSU5URElSKSIKLQotCi1TT1VSQ0U9LlxqY2NvbG9yLmMKLQotIiQoSU5URElSKVxqY2NvbG9yLm9iaiIgOiAkKFNPVVJDRSkgIiQoSU5URElSKSIKLQotCi1TT1VSQ0U9LlxqY2RjdG1nci5jCi0KLSIkKElOVERJUilcamNkY3RtZ3Iub2JqIiA6ICQoU09VUkNFKSAiJChJTlRESVIpIgotCi0KLVNPVVJDRT0uXGpjaHVmZi5jCi0KLSIkKElOVERJUilcamNodWZmLm9iaiIgOiAkKFNPVVJDRSkgIiQoSU5URElSKSIKLQotCi1TT1VSQ0U9LlxqY2luaXQuYwotCi0iJChJTlRESVIpXGpjaW5pdC5vYmoiIDogJChTT1VSQ0UpICIkKElOVERJUikiCi0KLQotU09VUkNFPS5camNtYWluY3QuYwotCi0iJChJTlRESVIpXGpjbWFpbmN0Lm9iaiIgOiAkKFNPVVJDRSkgIiQoSU5URElSKSIKLQotCi1TT1VSQ0U9LlxqY21hcmtlci5jCi0KLSIkKElOVERJUilcamNtYXJrZXIub2JqIiA6ICQoU09VUkNFKSAiJChJTlRESVIpIgotCi0KLVNPVVJDRT0uXGpjbWFzdGVyLmMKLQotIiQoSU5URElSKVxqY21hc3Rlci5vYmoiIDogJChTT1VSQ0UpICIkKElOVERJUikiCi0KLQotU09VUkNFPS5camNvbWFwaS5jCi0KLSIkKElOVERJUilcamNvbWFwaS5vYmoiIDogJChTT1VSQ0UpICIkKElOVERJUikiCi0KLQotU09VUkNFPS5camNwYXJhbS5jCi0KLSIkKElOVERJUilcamNwYXJhbS5vYmoiIDogJChTT1VSQ0UpICIkKElOVERJUikiCi0KLQotU09VUkNFPS5camNwcmVwY3QuYwotCi0iJChJTlRESVIpXGpjcHJlcGN0Lm9iaiIgOiAkKFNPVVJDRSkgIiQoSU5URElSKSIKLQotCi1TT1VSQ0U9LlxqY3NhbXBsZS5jCi0KLSIkKElOVERJUilcamNzYW1wbGUub2JqIiA6ICQoU09VUkNFKSAiJChJTlRESVIpIgotCi0KLVNPVVJDRT0uXGpjdHJhbnMuYwotCi0iJChJTlRESVIpXGpjdHJhbnMub2JqIiA6ICQoU09VUkNFKSAiJChJTlRESVIpIgotCi0KLVNPVVJDRT0uXGpkYXBpbWluLmMKLQotIiQoSU5URElSKVxqZGFwaW1pbi5vYmoiIDogJChTT1VSQ0UpICIkKElOVERJUikiCi0KLQotU09VUkNFPS5camRhcGlzdGQuYwotCi0iJChJTlRESVIpXGpkYXBpc3RkLm9iaiIgOiAkKFNPVVJDRSkgIiQoSU5URElSKSIKLQotCi1TT1VSQ0U9LlxqZGFyaXRoLmMKLQotIiQoSU5URElSKVxqZGFyaXRoLm9iaiIgOiAkKFNPVVJDRSkgIiQoSU5URElSKSIKLQotCi1TT1VSQ0U9LlxqZGF0YWRzdC5jCi0KLSIkKElOVERJUilcamRhdGFkc3Qub2JqIiA6ICQoU09VUkNFKSAiJChJTlRESVIpIgotCi0KLVNPVVJDRT0uXGpkYXRhc3JjLmMKLQotIiQoSU5URElSKVxqZGF0YXNyYy5vYmoiIDogJChTT1VSQ0UpICIkKElOVERJUikiCi0KLQotU09VUkNFPS5camRjb2VmY3QuYwotCi0iJChJTlRESVIpXGpkY29lZmN0Lm9iaiIgOiAkKFNPVVJDRSkgIiQoSU5URElSKSIKLQotCi1TT1VSQ0U9LlxqZGNvbG9yLmMKLQotIiQoSU5URElSKVxqZGNvbG9yLm9iaiIgOiAkKFNPVVJDRSkgIiQoSU5URElSKSIKLQotCi1TT1VSQ0U9LlxqZGRjdG1nci5jCi0KLSIkKElOVERJUilcamRkY3RtZ3Iub2JqIiA6ICQoU09VUkNFKSAiJChJTlRESVIpIgotCi0KLVNPVVJDRT0uXGpkaHVmZi5jCi0KLSIkKElOVERJUilcamRodWZmLm9iaiIgOiAkKFNPVVJDRSkgIiQoSU5URElSKSIKLQotCi1TT1VSQ0U9LlxqZGlucHV0LmMKLQotIiQoSU5URElSKVxqZGlucHV0Lm9iaiIgOiAkKFNPVVJDRSkgIiQoSU5URElSKSIKLQotCi1TT1VSQ0U9LlxqZG1haW5jdC5jCi0KLSIkKElOVERJUilcamRtYWluY3Qub2JqIiA6ICQoU09VUkNFKSAiJChJTlRESVIpIgotCi0KLVNPVVJDRT0uXGpkbWFya2VyLmMKLQotIiQoSU5URElSKVxqZG1hcmtlci5vYmoiIDogJChTT1VSQ0UpICIkKElOVERJUikiCi0KLQotU09VUkNFPS5camRtYXN0ZXIuYwotCi0iJChJTlRESVIpXGpkbWFzdGVyLm9iaiIgOiAkKFNPVVJDRSkgIiQoSU5URElSKSIKLQotCi1TT1VSQ0U9LlxqZG1lcmdlLmMKLQotIiQoSU5URElSKVxqZG1lcmdlLm9iaiIgOiAkKFNPVVJDRSkgIiQoSU5URElSKSIKLQotCi1TT1VSQ0U9LlxqZHBvc3RjdC5jCi0KLSIkKElOVERJUilcamRwb3N0Y3Qub2JqIiA6ICQoU09VUkNFKSAiJChJTlRESVIpIgotCi0KLVNPVVJDRT0uXGpkc2FtcGxlLmMKLQotIiQoSU5URElSKVxqZHNhbXBsZS5vYmoiIDogJChTT1VSQ0UpICIkKElOVERJUikiCi0KLQotU09VUkNFPS5camR0cmFucy5jCi0KLSIkKElOVERJUilcamR0cmFucy5vYmoiIDogJChTT1VSQ0UpICIkKElOVERJUikiCi0KLQotU09VUkNFPS5camVycm9yLmMKLQotIiQoSU5URElSKVxqZXJyb3Iub2JqIiA6ICQoU09VUkNFKSAiJChJTlRESVIpIgotCi0KLVNPVVJDRT0uXGpmZGN0Zmx0LmMKLQotIiQoSU5URElSKVxqZmRjdGZsdC5vYmoiIDogJChTT1VSQ0UpICIkKElOVERJUikiCi0KLQotU09VUkNFPS5camZkY3Rmc3QuYwotCi0iJChJTlRESVIpXGpmZGN0ZnN0Lm9iaiIgOiAkKFNPVVJDRSkgIiQoSU5URElSKSIKLQotCi1TT1VSQ0U9LlxqZmRjdGludC5jCi0KLSIkKElOVERJUilcamZkY3RpbnQub2JqIiA6ICQoU09VUkNFKSAiJChJTlRESVIpIgotCi0KLVNPVVJDRT0uXGppZGN0Zmx0LmMKLQotIiQoSU5URElSKVxqaWRjdGZsdC5vYmoiIDogJChTT1VSQ0UpICIkKElOVERJUikiCi0KLQotU09VUkNFPS5camlkY3Rmc3QuYwotCi0iJChJTlRESVIpXGppZGN0ZnN0Lm9iaiIgOiAkKFNPVVJDRSkgIiQoSU5URElSKSIKLQotCi1TT1VSQ0U9LlxqaWRjdGludC5jCi0KLSIkKElOVERJUilcamlkY3RpbnQub2JqIiA6ICQoU09VUkNFKSAiJChJTlRESVIpIgotCi0KLVNPVVJDRT0uXGptZW1tZ3IuYwotCi0iJChJTlRESVIpXGptZW1tZ3Iub2JqIiA6ICQoU09VUkNFKSAiJChJTlRESVIpIgotCi0KLVNPVVJDRT0uXGptZW1ub2JzLmMKLQotIiQoSU5URElSKVxqbWVtbm9icy5vYmoiIDogJChTT1VSQ0UpICIkKElOVERJUikiCi0KLQotU09VUkNFPS5canF1YW50MS5jCi0KLSIkKElOVERJUilcanF1YW50MS5vYmoiIDogJChTT1VSQ0UpICIkKElOVERJUikiCi0KLQotU09VUkNFPS5canF1YW50Mi5jCi0KLSIkKElOVERJUilcanF1YW50Mi5vYmoiIDogJChTT1VSQ0UpICIkKElOVERJUikiCi0KLQotU09VUkNFPS5canV0aWxzLmMKLQotIiQoSU5URElSKVxqdXRpbHMub2JqIiA6ICQoU09VUkNFKSAiJChJTlRESVIpIgotCi0KLQotIUVORElGIAotCmRpZmYgLS1naXQgYS9tYWtlanNsbi52MTAgYi9tYWtlanNsbi52MTAKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDZhNWJlZmQuLjAwMDAwMDAKLS0tIGEvbWFrZWpzbG4udjEwCisrKyAvZGV2L251bGwKQEAgLTEsMTcgKzAsMCBAQAoti6+oCi1NaWNyb3NvZnQgVmlzdWFsIFN0dWRpbyBTb2x1dGlvbiBGaWxlLCBGb3JtYXQgVmVyc2lvbiAxMS4wMAotIyBWaXN1YWwgQysrIEV4cHJlc3MgMjAxMAotUHJvamVjdCgiezhCQzlDRUI4LThCNEEtMTFEMC04RDExLTAwQTBDOTFCQzk0Mn0iKSA9ICJqcGVnIiwgImpwZWcudmN4cHJvaiIsICJ7MDE5REJEMkEtMjczRC00QkE0LUJGODYtQjVFRkUyRUQ3NkIxfSIKLUVuZFByb2plY3QKLUdsb2JhbAotCUdsb2JhbFNlY3Rpb24oU29sdXRpb25Db25maWd1cmF0aW9uUGxhdGZvcm1zKSA9IHByZVNvbHV0aW9uCi0JCVJlbGVhc2V8V2luMzIgPSBSZWxlYXNlfFdpbjMyCi0JRW5kR2xvYmFsU2VjdGlvbgotCUdsb2JhbFNlY3Rpb24oUHJvamVjdENvbmZpZ3VyYXRpb25QbGF0Zm9ybXMpID0gcG9zdFNvbHV0aW9uCi0JCXswMTlEQkQyQS0yNzNELTRCQTQtQkY4Ni1CNUVGRTJFRDc2QjF9LlJlbGVhc2V8V2luMzIuQWN0aXZlQ2ZnID0gUmVsZWFzZXxXaW4zMgotCQl7MDE5REJEMkEtMjczRC00QkE0LUJGODYtQjVFRkUyRUQ3NkIxfS5SZWxlYXNlfFdpbjMyLkJ1aWxkLjAgPSBSZWxlYXNlfFdpbjMyCi0JRW5kR2xvYmFsU2VjdGlvbgotCUdsb2JhbFNlY3Rpb24oU29sdXRpb25Qcm9wZXJ0aWVzKSA9IHByZVNvbHV0aW9uCi0JCUhpZGVTb2x1dGlvbk5vZGUgPSBGQUxTRQotCUVuZEdsb2JhbFNlY3Rpb24KLUVuZEdsb2JhbApkaWZmIC0tZ2l0IGEvbWFrZWp2Y3gudjEwIGIvbWFrZWp2Y3gudjEwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjY2VlMjg3Li4wMDAwMDAwCi0tLSBhL21ha2VqdmN4LnYxMAorKysgL2Rldi9udWxsCkBAIC0xLDExMiArMCwwIEBACi2Lr6g8P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJ1dGYtOCI/PgotPFByb2plY3QgRGVmYXVsdFRhcmdldHM9IkJ1aWxkIiBUb29sc1ZlcnNpb249IjQuMCIgeG1sbnM9Imh0dHA6Ly9zY2hlbWFzLm1pY3Jvc29mdC5jb20vZGV2ZWxvcGVyL21zYnVpbGQvMjAwMyI+Ci0gIDxJdGVtR3JvdXAgTGFiZWw9IlByb2plY3RDb25maWd1cmF0aW9ucyI+Ci0gICAgPFByb2plY3RDb25maWd1cmF0aW9uIEluY2x1ZGU9IlJlbGVhc2V8V2luMzIiPgotICAgICAgPENvbmZpZ3VyYXRpb24+UmVsZWFzZTwvQ29uZmlndXJhdGlvbj4KLSAgICAgIDxQbGF0Zm9ybT5XaW4zMjwvUGxhdGZvcm0+Ci0gICAgPC9Qcm9qZWN0Q29uZmlndXJhdGlvbj4KLSAgPC9JdGVtR3JvdXA+Ci0gIDxJdGVtR3JvdXA+Ci0gICAgPENsSW5jbHVkZSBJbmNsdWRlPSJqY29uZmlnLmgiIC8+Ci0gICAgPENsSW5jbHVkZSBJbmNsdWRlPSJqZGN0LmgiIC8+Ci0gICAgPENsSW5jbHVkZSBJbmNsdWRlPSJqZXJyb3IuaCIgLz4KLSAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9ImppbmNsdWRlLmgiIC8+Ci0gICAgPENsSW5jbHVkZSBJbmNsdWRlPSJqbWVtc3lzLmgiIC8+Ci0gICAgPENsSW5jbHVkZSBJbmNsdWRlPSJqbW9yZWNmZy5oIiAvPgotICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0ianBlZ2ludC5oIiAvPgotICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0ianBlZ2xpYi5oIiAvPgotICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0ianZlcnNpb24uaCIgLz4KLSAgPC9JdGVtR3JvdXA+Ci0gIDxJdGVtR3JvdXA+Ci0gICAgPENsQ29tcGlsZSBJbmNsdWRlPSJqYXJpY29tLmMiIC8+Ci0gICAgPENsQ29tcGlsZSBJbmNsdWRlPSJqY2FwaW1pbi5jIiAvPgotICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iamNhcGlzdGQuYyIgLz4KLSAgICA8Q2xDb21waWxlIEluY2x1ZGU9ImpjYXJpdGguYyIgLz4KLSAgICA8Q2xDb21waWxlIEluY2x1ZGU9ImpjY29lZmN0LmMiIC8+Ci0gICAgPENsQ29tcGlsZSBJbmNsdWRlPSJqY2NvbG9yLmMiIC8+Ci0gICAgPENsQ29tcGlsZSBJbmNsdWRlPSJqY2RjdG1nci5jIiAvPgotICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iamNodWZmLmMiIC8+Ci0gICAgPENsQ29tcGlsZSBJbmNsdWRlPSJqY2luaXQuYyIgLz4KLSAgICA8Q2xDb21waWxlIEluY2x1ZGU9ImpjbWFpbmN0LmMiIC8+Ci0gICAgPENsQ29tcGlsZSBJbmNsdWRlPSJqY21hcmtlci5jIiAvPgotICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iamNtYXN0ZXIuYyIgLz4KLSAgICA8Q2xDb21waWxlIEluY2x1ZGU9Impjb21hcGkuYyIgLz4KLSAgICA8Q2xDb21waWxlIEluY2x1ZGU9ImpjcGFyYW0uYyIgLz4KLSAgICA8Q2xDb21waWxlIEluY2x1ZGU9ImpjcHJlcGN0LmMiIC8+Ci0gICAgPENsQ29tcGlsZSBJbmNsdWRlPSJqY3NhbXBsZS5jIiAvPgotICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iamN0cmFucy5jIiAvPgotICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iamRhcGltaW4uYyIgLz4KLSAgICA8Q2xDb21waWxlIEluY2x1ZGU9ImpkYXBpc3RkLmMiIC8+Ci0gICAgPENsQ29tcGlsZSBJbmNsdWRlPSJqZGFyaXRoLmMiIC8+Ci0gICAgPENsQ29tcGlsZSBJbmNsdWRlPSJqZGF0YWRzdC5jIiAvPgotICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iamRhdGFzcmMuYyIgLz4KLSAgICA8Q2xDb21waWxlIEluY2x1ZGU9ImpkY29lZmN0LmMiIC8+Ci0gICAgPENsQ29tcGlsZSBJbmNsdWRlPSJqZGNvbG9yLmMiIC8+Ci0gICAgPENsQ29tcGlsZSBJbmNsdWRlPSJqZGRjdG1nci5jIiAvPgotICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iamRodWZmLmMiIC8+Ci0gICAgPENsQ29tcGlsZSBJbmNsdWRlPSJqZGlucHV0LmMiIC8+Ci0gICAgPENsQ29tcGlsZSBJbmNsdWRlPSJqZG1haW5jdC5jIiAvPgotICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iamRtYXJrZXIuYyIgLz4KLSAgICA8Q2xDb21waWxlIEluY2x1ZGU9ImpkbWFzdGVyLmMiIC8+Ci0gICAgPENsQ29tcGlsZSBJbmNsdWRlPSJqZG1lcmdlLmMiIC8+Ci0gICAgPENsQ29tcGlsZSBJbmNsdWRlPSJqZHBvc3RjdC5jIiAvPgotICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iamRzYW1wbGUuYyIgLz4KLSAgICA8Q2xDb21waWxlIEluY2x1ZGU9ImpkdHJhbnMuYyIgLz4KLSAgICA8Q2xDb21waWxlIEluY2x1ZGU9ImplcnJvci5jIiAvPgotICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iamZkY3RmbHQuYyIgLz4KLSAgICA8Q2xDb21waWxlIEluY2x1ZGU9ImpmZGN0ZnN0LmMiIC8+Ci0gICAgPENsQ29tcGlsZSBJbmNsdWRlPSJqZmRjdGludC5jIiAvPgotICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iamlkY3RmbHQuYyIgLz4KLSAgICA8Q2xDb21waWxlIEluY2x1ZGU9ImppZGN0ZnN0LmMiIC8+Ci0gICAgPENsQ29tcGlsZSBJbmNsdWRlPSJqaWRjdGludC5jIiAvPgotICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iam1lbW1nci5jIiAvPgotICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iam1lbW5vYnMuYyIgLz4KLSAgICA8Q2xDb21waWxlIEluY2x1ZGU9ImpxdWFudDEuYyIgLz4KLSAgICA8Q2xDb21waWxlIEluY2x1ZGU9ImpxdWFudDIuYyI+Ci0gICAgICA8T3B0aW1pemF0aW9uIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUmVsZWFzZXxXaW4zMiciPkRpc2FibGVkPC9PcHRpbWl6YXRpb24+Ci0gICAgICA8QnVmZmVyU2VjdXJpdHlDaGVjayBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J1JlbGVhc2V8V2luMzInIj5mYWxzZTwvQnVmZmVyU2VjdXJpdHlDaGVjaz4KLSAgICA8L0NsQ29tcGlsZT4KLSAgICA8Q2xDb21waWxlIEluY2x1ZGU9Imp1dGlscy5jIiAvPgotICA8L0l0ZW1Hcm91cD4KLSAgPFByb3BlcnR5R3JvdXAgTGFiZWw9Ikdsb2JhbHMiPgotICAgIDxQcm9qZWN0R3VpZD57MDE5REJEMkEtMjczRC00QkE0LUJGODYtQjVFRkUyRUQ3NkIxfTwvUHJvamVjdEd1aWQ+Ci0gICAgPEtleXdvcmQ+V2luMzJQcm9qPC9LZXl3b3JkPgotICAgIDxSb290TmFtZXNwYWNlPmpwZWc8L1Jvb3ROYW1lc3BhY2U+Ci0gIDwvUHJvcGVydHlHcm91cD4KLSAgPEltcG9ydCBQcm9qZWN0PSIkKFZDVGFyZ2V0c1BhdGgpXE1pY3Jvc29mdC5DcHAuRGVmYXVsdC5wcm9wcyIgLz4KLSAgPFByb3BlcnR5R3JvdXAgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdSZWxlYXNlfFdpbjMyJyIgTGFiZWw9IkNvbmZpZ3VyYXRpb24iPgotICAgIDxDb25maWd1cmF0aW9uVHlwZT5TdGF0aWNMaWJyYXJ5PC9Db25maWd1cmF0aW9uVHlwZT4KLSAgICA8VXNlRGVidWdMaWJyYXJpZXM+ZmFsc2U8L1VzZURlYnVnTGlicmFyaWVzPgotICAgIDxXaG9sZVByb2dyYW1PcHRpbWl6YXRpb24+dHJ1ZTwvV2hvbGVQcm9ncmFtT3B0aW1pemF0aW9uPgotICAgIDxDaGFyYWN0ZXJTZXQ+VW5pY29kZTwvQ2hhcmFjdGVyU2V0PgotICA8L1Byb3BlcnR5R3JvdXA+Ci0gIDxJbXBvcnQgUHJvamVjdD0iJChWQ1RhcmdldHNQYXRoKVxNaWNyb3NvZnQuQ3BwLnByb3BzIiAvPgotICA8SW1wb3J0R3JvdXAgTGFiZWw9IkV4dGVuc2lvblNldHRpbmdzIj4KLSAgPC9JbXBvcnRHcm91cD4KLSAgPEltcG9ydEdyb3VwIExhYmVsPSJQcm9wZXJ0eVNoZWV0cyIgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdSZWxlYXNlfFdpbjMyJyI+Ci0gICAgPEltcG9ydCBQcm9qZWN0PSIkKFVzZXJSb290RGlyKVxNaWNyb3NvZnQuQ3BwLiQoUGxhdGZvcm0pLnVzZXIucHJvcHMiIENvbmRpdGlvbj0iZXhpc3RzKCckKFVzZXJSb290RGlyKVxNaWNyb3NvZnQuQ3BwLiQoUGxhdGZvcm0pLnVzZXIucHJvcHMnKSIgTGFiZWw9IkxvY2FsQXBwRGF0YVBsYXRmb3JtIiAvPgotICA8L0ltcG9ydEdyb3VwPgotICA8UHJvcGVydHlHcm91cCBMYWJlbD0iVXNlck1hY3JvcyIgLz4KLSAgPFByb3BlcnR5R3JvdXAgLz4KLSAgPEl0ZW1EZWZpbml0aW9uR3JvdXAgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdSZWxlYXNlfFdpbjMyJyI+Ci0gICAgPENsQ29tcGlsZT4KLSAgICAgIDxXYXJuaW5nTGV2ZWw+TGV2ZWwzPC9XYXJuaW5nTGV2ZWw+Ci0gICAgICA8UHJlY29tcGlsZWRIZWFkZXI+Tm90VXNpbmc8L1ByZWNvbXBpbGVkSGVhZGVyPgotICAgICAgPE9wdGltaXphdGlvbj5GdWxsPC9PcHRpbWl6YXRpb24+Ci0gICAgICA8RnVuY3Rpb25MZXZlbExpbmtpbmc+dHJ1ZTwvRnVuY3Rpb25MZXZlbExpbmtpbmc+Ci0gICAgICA8SW50cmluc2ljRnVuY3Rpb25zPmZhbHNlPC9JbnRyaW5zaWNGdW5jdGlvbnM+Ci0gICAgICA8UHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM+V0lOMzI7TkRFQlVHO19MSUI7X0NSVF9TRUNVUkVfTk9fV0FSTklOR1M8L1ByZXByb2Nlc3NvckRlZmluaXRpb25zPgotICAgICAgPE9taXRGcmFtZVBvaW50ZXJzPnRydWU8L09taXRGcmFtZVBvaW50ZXJzPgotICAgICAgPEVuYWJsZUZpYmVyU2FmZU9wdGltaXphdGlvbnM+dHJ1ZTwvRW5hYmxlRmliZXJTYWZlT3B0aW1pemF0aW9ucz4KLSAgICA8L0NsQ29tcGlsZT4KLSAgICA8TGluaz4KLSAgICAgIDxTdWJTeXN0ZW0+V2luZG93czwvU3ViU3lzdGVtPgotICAgICAgPEdlbmVyYXRlRGVidWdJbmZvcm1hdGlvbj50cnVlPC9HZW5lcmF0ZURlYnVnSW5mb3JtYXRpb24+Ci0gICAgICA8RW5hYmxlQ09NREFURm9sZGluZz50cnVlPC9FbmFibGVDT01EQVRGb2xkaW5nPgotICAgICAgPE9wdGltaXplUmVmZXJlbmNlcz50cnVlPC9PcHRpbWl6ZVJlZmVyZW5jZXM+Ci0gICAgPC9MaW5rPgotICA8L0l0ZW1EZWZpbml0aW9uR3JvdXA+Ci0gIDxJbXBvcnQgUHJvamVjdD0iJChWQ1RhcmdldHNQYXRoKVxNaWNyb3NvZnQuQ3BwLnRhcmdldHMiIC8+Ci0gIDxJbXBvcnRHcm91cCBMYWJlbD0iRXh0ZW5zaW9uVGFyZ2V0cyI+Ci0gIDwvSW1wb3J0R3JvdXA+Ci08L1Byb2plY3Q+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvbWFrZXByb2oubWFjIGIvbWFrZXByb2oubWFjCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlNWI1MTAyLi4wMDAwMDAwCi0tLSBhL21ha2Vwcm9qLm1hYworKysgL2Rldi9udWxsCkBAIC0xLDIxMyArMCwwIEBACi0tLQotLS0gbWFrZXByb2oubWFjCi0tLQotLS0gVGhpcyBBcHBsZVNjcmlwdCBidWlsZHMgQ29kZSBXYXJyaW9yIFBSTyBSZWxlYXNlIDIgcHJvamVjdCBmaWxlcyBmb3IgdGhlCi0tLSBsaWJqcGVnIGxpYnJhcnkgYXMgd2VsbCBhcyB0aGUgdGVzdCBwcm9ncmFtcyAnY2pwZWcnLCAnZGpwZWcnLCAnanBlZ3RyYW4nLgotLS0gKFdlJ2QgZGlzdHJpYnV0ZSByZWFsIHByb2plY3QgZmlsZXMsIGV4Y2VwdCB0aGV5J3JlIG5vdCB0ZXh0Ci0tLSBhbmQgd291bGQgY3JlYXRlIG1haW50ZW5hbmNlIGhlYWRhY2hlcy4pCi0tLQotLS0gVGhlIHNjcmlwdCB0aGVuIGNvbXBpbGVzIGFuZCBsaW5rcyB0aGUgbGlicmFyeSBhbmQgdGhlIHRlc3QgcHJvZ3JhbXMuCi0tLSBOT1RFOiBpZiB5b3UgaGF2ZW4ndCBhbHJlYWR5IGNyZWF0ZWQgYSAnamNvbmZpZy5oJyBmaWxlLCB0aGUgc2NyaXB0Ci0tLSBhdXRvbWF0aWNhbGx5IGNvcGllcyAnamNvbmZpZy5tYWMnIHRvICdqY29uZmlnLmgnLgotLS0KLS0tIFRvIHVzZSB0aGlzIHNjcmlwdCwgeW91IG11c3QgaGF2ZSBBcHBsZVNjcmlwdCAxLjEgb3IgbGF0ZXIgaW5zdGFsbGVkCi0tLSBhbmQgYSBzdWl0YWJsZSBBcHBsZVNjcmlwdCBlZGl0b3IgbGlrZSBTY3JpcHQgRWRpdG9yIG9yIFNjcmlwdCBEZWJ1Z2dlcgotLS0gKGh0dHA6Ly93d3cubGF0ZW5pZ2h0c3cuY29tKS4gT3BlbiB0aGlzIGZpbGUgd2l0aCB5b3VyIEFwcGxlU2NyaXB0Ci0tLSBlZGl0b3IgYW5kIGV4ZWN1dGUgdGhlICJydW4iIGNvbW1hbmQgdG8gYnVpbGQgdGhlIHByb2plY3RzLgotLS0KLS0tIFRoYW5rcyB0byBEYW4gU2VhcnMgYW5kIERvbiBBZ3JvIGZvciB0aGlzIHNjcmlwdC4KLS0tIFF1ZXN0aW9ucyBhYm91dCB0aGlzIHNjcmlwdCBjYW4gYmUgYWRkcmVzc2VkIHRvIGRvZ3BhcmtAaW50ZXJsb2cuY29tCi0tLQotCi1vbiBydW4KLQotCWNob29zZSBmb2xkZXIgd2l0aCBwcm9tcHQgIj4+PiBTZWxlY3QgSUpHIHNvdXJjZSBmb2xkZXIgPDw8IgotCXNldCBpamdfZm9sZGVyIHRvIHJlc3VsdAotCi0JY2hvb3NlIGZvbGRlciB3aXRoIHByb21wdCAiPj4+IFNlbGVjdCBNZXRyb1dlcmtzIGZvbGRlciA8PDwiCi0Jc2V0IGN3X2ZvbGRlciB0byByZXN1bHQKLQotCS0tIGlmIGpjb25maWcuaCBkb2Vzbid0IGFscmVhZHkgZXhpc3QsIGNvcHkgamNvbmZpZy5tYWMKLQotCXRlbGwgYXBwbGljYXRpb24gIkZpbmRlciIKLQkJaWYgbm90IChleGlzdHMgZmlsZSAiamNvbmZpZy5oIiBvZiBpamdfZm9sZGVyKSB0aGVuCi0JCQlkdXBsaWNhdGUge2ZpbGUgImpjb25maWcubWFjIiBvZiBmb2xkZXIgaWpnX2ZvbGRlcn0KLQkJCXNlbGVjdCBmaWxlICJqY29uZmlnLm1hYyBjb3B5IiBvZiBmb2xkZXIgaWpnX2ZvbGRlcgotCQkJc2V0IG5hbWUgb2Ygc2VsZWN0aW9uIHRvICJqY29uZmlnLmgiCi0JCWVuZCBpZgotCWVuZCB0ZWxsCi0KLQl0ZWxsIGFwcGxpY2F0aW9uICJDb2RlV2FycmlvciBJREUgMi4xIgotCSAgd2l0aCB0aW1lb3V0IG9mIDEwMDAwIHNlY29uZHMKLQotCQktLSBjcmVhdGUgbGlianBlZyBwcm9qZWN0Ci0KLQkJYWN0aXZhdGUKLQkJQ3JlYXRlIFByb2plY3QgKGlqZ19mb2xkZXIgYXMgc3RyaW5nKSAmICJsaWJqcGVnLnByb2oiCi0JCVNldCBQcmVmZXJlbmNlcyBvZiBwYW5lbCAiVGFyZ2V0IFNldHRpbmdzIiB0byB7VGFyZ2V0IE5hbWU6ImxpYmpwZWcifQotCQlTZXQgUHJlZmVyZW5jZXMgb2YgcGFuZWwgIlBQQyBQcm9qZWN0IiB0byB7RmlsZSBOYW1lOiJsaWJqcGVnIn0KLQkJU2V0IFByZWZlcmVuY2VzIG9mIHBhbmVsICJUYXJnZXQgU2V0dGluZ3MiIHRvIHtMaW5rZXI6Ik1hY09TIFBQQyBMaW5rZXIifQotCQlTZXQgUHJlZmVyZW5jZXMgb2YgcGFuZWwgIlBQQyBQcm9qZWN0IiB0byB7UHJvamVjdCBUeXBlOmxpYnJhcnl9Ci0JCVNldCBQcmVmZXJlbmNlcyBvZiBwYW5lbCAiQy9DKysgQ29tcGlsZXIiIHRvIHtBTlNJIFN0cmljdDp0cnVlfQotCQlTZXQgUHJlZmVyZW5jZXMgb2YgcGFuZWwgIkMvQysrIENvbXBpbGVyIiB0byB7RW51bXMgQWx3YXlzIEludHM6dHJ1ZX0KLQkJU2V0IFByZWZlcmVuY2VzIG9mIHBhbmVsICJQUEMgQ29kZWdlbiIgdG8ge1N0cnVjdCBBbGlnbm1lbnQ6UG93ZXJQQ30KLQkJU2V0IFByZWZlcmVuY2VzIG9mIHBhbmVsICJQUEMgTGlua2VyIiB0byB7R2VuZXJhdGUgU1lNIEZpbGU6ZmFsc2V9Ci0KLQkJQWRkIEZpbGVzIChpamdfZm9sZGVyIGFzIHN0cmluZykgJiAiamFyaWNvbS5jIiBUbyBTZWdtZW50IDEKLQkJQWRkIEZpbGVzIChpamdfZm9sZGVyIGFzIHN0cmluZykgJiAiamNhcGltaW4uYyIgVG8gU2VnbWVudCAxCi0JCUFkZCBGaWxlcyAoaWpnX2ZvbGRlciBhcyBzdHJpbmcpICYgImpjYXBpc3RkLmMiIFRvIFNlZ21lbnQgMQotCQlBZGQgRmlsZXMgKGlqZ19mb2xkZXIgYXMgc3RyaW5nKSAmICJqY2FyaXRoLmMiIFRvIFNlZ21lbnQgMQotCQlBZGQgRmlsZXMgKGlqZ19mb2xkZXIgYXMgc3RyaW5nKSAmICJqY3RyYW5zLmMiIFRvIFNlZ21lbnQgMQotCQlBZGQgRmlsZXMgKGlqZ19mb2xkZXIgYXMgc3RyaW5nKSAmICJqY3BhcmFtLmMiIFRvIFNlZ21lbnQgMQotCQlBZGQgRmlsZXMgKGlqZ19mb2xkZXIgYXMgc3RyaW5nKSAmICJqZGF0YWRzdC5jIiBUbyBTZWdtZW50IDEKLQkJQWRkIEZpbGVzIChpamdfZm9sZGVyIGFzIHN0cmluZykgJiAiamNpbml0LmMiIFRvIFNlZ21lbnQgMQotCQlBZGQgRmlsZXMgKGlqZ19mb2xkZXIgYXMgc3RyaW5nKSAmICJqY21hc3Rlci5jIiBUbyBTZWdtZW50IDEKLQkJQWRkIEZpbGVzIChpamdfZm9sZGVyIGFzIHN0cmluZykgJiAiamNtYXJrZXIuYyIgVG8gU2VnbWVudCAxCi0JCUFkZCBGaWxlcyAoaWpnX2ZvbGRlciBhcyBzdHJpbmcpICYgImpjbWFpbmN0LmMiIFRvIFNlZ21lbnQgMQotCQlBZGQgRmlsZXMgKGlqZ19mb2xkZXIgYXMgc3RyaW5nKSAmICJqY3ByZXBjdC5jIiBUbyBTZWdtZW50IDEKLQkJQWRkIEZpbGVzIChpamdfZm9sZGVyIGFzIHN0cmluZykgJiAiamNjb2VmY3QuYyIgVG8gU2VnbWVudCAxCi0JCUFkZCBGaWxlcyAoaWpnX2ZvbGRlciBhcyBzdHJpbmcpICYgImpjY29sb3IuYyIgVG8gU2VnbWVudCAxCi0JCUFkZCBGaWxlcyAoaWpnX2ZvbGRlciBhcyBzdHJpbmcpICYgImpjc2FtcGxlLmMiIFRvIFNlZ21lbnQgMQotCQlBZGQgRmlsZXMgKGlqZ19mb2xkZXIgYXMgc3RyaW5nKSAmICJqY2h1ZmYuYyIgVG8gU2VnbWVudCAxCi0JCUFkZCBGaWxlcyAoaWpnX2ZvbGRlciBhcyBzdHJpbmcpICYgImpjZGN0bWdyLmMiIFRvIFNlZ21lbnQgMQotCQlBZGQgRmlsZXMgKGlqZ19mb2xkZXIgYXMgc3RyaW5nKSAmICJqZmRjdGZzdC5jIiBUbyBTZWdtZW50IDEKLQkJQWRkIEZpbGVzIChpamdfZm9sZGVyIGFzIHN0cmluZykgJiAiamZkY3RmbHQuYyIgVG8gU2VnbWVudCAxCi0JCUFkZCBGaWxlcyAoaWpnX2ZvbGRlciBhcyBzdHJpbmcpICYgImpmZGN0aW50LmMiIFRvIFNlZ21lbnQgMQotCQlBZGQgRmlsZXMgKGlqZ19mb2xkZXIgYXMgc3RyaW5nKSAmICJqZGFwaW1pbi5jIiBUbyBTZWdtZW50IDEKLQkJQWRkIEZpbGVzIChpamdfZm9sZGVyIGFzIHN0cmluZykgJiAiamRhcGlzdGQuYyIgVG8gU2VnbWVudCAxCi0JCUFkZCBGaWxlcyAoaWpnX2ZvbGRlciBhcyBzdHJpbmcpICYgImpkYXJpdGguYyIgVG8gU2VnbWVudCAxCi0JCUFkZCBGaWxlcyAoaWpnX2ZvbGRlciBhcyBzdHJpbmcpICYgImpkdHJhbnMuYyIgVG8gU2VnbWVudCAxCi0JCUFkZCBGaWxlcyAoaWpnX2ZvbGRlciBhcyBzdHJpbmcpICYgImpkYXRhc3JjLmMiIFRvIFNlZ21lbnQgMQotCQlBZGQgRmlsZXMgKGlqZ19mb2xkZXIgYXMgc3RyaW5nKSAmICJqZG1hc3Rlci5jIiBUbyBTZWdtZW50IDEKLQkJQWRkIEZpbGVzIChpamdfZm9sZGVyIGFzIHN0cmluZykgJiAiamRpbnB1dC5jIiBUbyBTZWdtZW50IDEKLQkJQWRkIEZpbGVzIChpamdfZm9sZGVyIGFzIHN0cmluZykgJiAiamRtYXJrZXIuYyIgVG8gU2VnbWVudCAxCi0JCUFkZCBGaWxlcyAoaWpnX2ZvbGRlciBhcyBzdHJpbmcpICYgImpkaHVmZi5jIiBUbyBTZWdtZW50IDEKLQkJQWRkIEZpbGVzIChpamdfZm9sZGVyIGFzIHN0cmluZykgJiAiamRtYWluY3QuYyIgVG8gU2VnbWVudCAxCi0JCUFkZCBGaWxlcyAoaWpnX2ZvbGRlciBhcyBzdHJpbmcpICYgImpkY29lZmN0LmMiIFRvIFNlZ21lbnQgMQotCQlBZGQgRmlsZXMgKGlqZ19mb2xkZXIgYXMgc3RyaW5nKSAmICJqZHBvc3RjdC5jIiBUbyBTZWdtZW50IDEKLQkJQWRkIEZpbGVzIChpamdfZm9sZGVyIGFzIHN0cmluZykgJiAiamRkY3RtZ3IuYyIgVG8gU2VnbWVudCAxCi0JCUFkZCBGaWxlcyAoaWpnX2ZvbGRlciBhcyBzdHJpbmcpICYgImppZGN0ZnN0LmMiIFRvIFNlZ21lbnQgMQotCQlBZGQgRmlsZXMgKGlqZ19mb2xkZXIgYXMgc3RyaW5nKSAmICJqaWRjdGZsdC5jIiBUbyBTZWdtZW50IDEKLQkJQWRkIEZpbGVzIChpamdfZm9sZGVyIGFzIHN0cmluZykgJiAiamlkY3RpbnQuYyIgVG8gU2VnbWVudCAxCi0JCUFkZCBGaWxlcyAoaWpnX2ZvbGRlciBhcyBzdHJpbmcpICYgImpkc2FtcGxlLmMiIFRvIFNlZ21lbnQgMQotCQlBZGQgRmlsZXMgKGlqZ19mb2xkZXIgYXMgc3RyaW5nKSAmICJqZGNvbG9yLmMiIFRvIFNlZ21lbnQgMQotCQlBZGQgRmlsZXMgKGlqZ19mb2xkZXIgYXMgc3RyaW5nKSAmICJqcXVhbnQxLmMiIFRvIFNlZ21lbnQgMQotCQlBZGQgRmlsZXMgKGlqZ19mb2xkZXIgYXMgc3RyaW5nKSAmICJqcXVhbnQyLmMiIFRvIFNlZ21lbnQgMQotCQlBZGQgRmlsZXMgKGlqZ19mb2xkZXIgYXMgc3RyaW5nKSAmICJqZG1lcmdlLmMiIFRvIFNlZ21lbnQgMQotCQlBZGQgRmlsZXMgKGlqZ19mb2xkZXIgYXMgc3RyaW5nKSAmICJqY29tYXBpLmMiIFRvIFNlZ21lbnQgMQotCQlBZGQgRmlsZXMgKGlqZ19mb2xkZXIgYXMgc3RyaW5nKSAmICJqdXRpbHMuYyIgVG8gU2VnbWVudCAxCi0JCUFkZCBGaWxlcyAoaWpnX2ZvbGRlciBhcyBzdHJpbmcpICYgImplcnJvci5jIiBUbyBTZWdtZW50IDEKLQkJQWRkIEZpbGVzIChpamdfZm9sZGVyIGFzIHN0cmluZykgJiAiam1lbW1nci5jIiBUbyBTZWdtZW50IDEKLQkJQWRkIEZpbGVzIChpamdfZm9sZGVyIGFzIHN0cmluZykgJiAiam1lbW1hYy5jIiBUbyBTZWdtZW50IDEKLQotCQktLSBjb21waWxlIGFuZCBsaW5rIHRoZSBsaWJyYXJ5Ci0KLQkJTWFrZSBQcm9qZWN0Ci0JCUNsb3NlIFByb2plY3QKLQotCQktLSBjcmVhdGUgY2pwZWcgcHJvamVjdAotCi0JCWFjdGl2YXRlCi0JCUNyZWF0ZSBQcm9qZWN0IChpamdfZm9sZGVyIGFzIHN0cmluZykgJiAiY2pwZWcucHJvaiIKLQkJU2V0IFByZWZlcmVuY2VzIG9mIHBhbmVsICJUYXJnZXQgU2V0dGluZ3MiIHRvIHtUYXJnZXQgTmFtZToiY2pwZWcifQotCQlTZXQgUHJlZmVyZW5jZXMgb2YgcGFuZWwgIlBQQyBQcm9qZWN0IiB0byB7RmlsZSBOYW1lOiJjanBlZyJ9Ci0JCVNldCBQcmVmZXJlbmNlcyBvZiBwYW5lbCAiVGFyZ2V0IFNldHRpbmdzIiB0byB7TGlua2VyOiJNYWNPUyBQUEMgTGlua2VyIn0KLQkJU2V0IFByZWZlcmVuY2VzIG9mIHBhbmVsICJDL0MrKyBDb21waWxlciIgdG8ge0FOU0kgU3RyaWN0OnRydWV9Ci0JCVNldCBQcmVmZXJlbmNlcyBvZiBwYW5lbCAiQy9DKysgQ29tcGlsZXIiIHRvIHtFbnVtcyBBbHdheXMgSW50czp0cnVlfQotCQlTZXQgUHJlZmVyZW5jZXMgb2YgcGFuZWwgIlBQQyBDb2RlZ2VuIiB0byB7U3RydWN0IEFsaWdubWVudDpQb3dlclBDfQotCQlTZXQgUHJlZmVyZW5jZXMgb2YgcGFuZWwgIlBQQyBMaW5rZXIiIHRvIHtHZW5lcmF0ZSBTWU0gRmlsZTpmYWxzZX0KLQotCQlBZGQgRmlsZXMgKGlqZ19mb2xkZXIgYXMgc3RyaW5nKSAmICJjanBlZy5jIiBUbyBTZWdtZW50IDEKLQkJQWRkIEZpbGVzIChpamdfZm9sZGVyIGFzIHN0cmluZykgJiAicmRwcG0uYyIgVG8gU2VnbWVudCAxCi0JCUFkZCBGaWxlcyAoaWpnX2ZvbGRlciBhcyBzdHJpbmcpICYgInJkZ2lmLmMiIFRvIFNlZ21lbnQgMQotCQlBZGQgRmlsZXMgKGlqZ19mb2xkZXIgYXMgc3RyaW5nKSAmICJyZHRhcmdhLmMiIFRvIFNlZ21lbnQgMQotCQlBZGQgRmlsZXMgKGlqZ19mb2xkZXIgYXMgc3RyaW5nKSAmICJyZHJsZS5jIiBUbyBTZWdtZW50IDEKLQkJQWRkIEZpbGVzIChpamdfZm9sZGVyIGFzIHN0cmluZykgJiAicmRibXAuYyIgVG8gU2VnbWVudCAxCi0JCUFkZCBGaWxlcyAoaWpnX2ZvbGRlciBhcyBzdHJpbmcpICYgInJkc3dpdGNoLmMiIFRvIFNlZ21lbnQgMQotCQlBZGQgRmlsZXMgKGlqZ19mb2xkZXIgYXMgc3RyaW5nKSAmICJjZGpwZWcuYyIgVG8gU2VnbWVudCAxCi0KLQkJQWRkIEZpbGVzIChpamdfZm9sZGVyIGFzIHN0cmluZykgJiAibGlianBlZyIgVG8gU2VnbWVudCAyCi0KLQkJQWRkIEZpbGVzIChjd19mb2xkZXIgYXMgc3RyaW5nKSAmICJNZXRyb3dlcmtzIENvZGVXYXJyaW9yOk1ldHJvd2Vya3MgU3RhbmRhcmQgTGlicmFyeTpNU0wgQzpCaW46TVNMIEMuUFBDLkxpYiIgVG8gU2VnbWVudCAzCi0JCUFkZCBGaWxlcyAoY3dfZm9sZGVyIGFzIHN0cmluZykgJiAiTWV0cm93ZXJrcyBDb2RlV2FycmlvcjpNZXRyb3dlcmtzIFN0YW5kYXJkIExpYnJhcnk6TVNMIEM6QmluOk1TTCBTSU9VWC5QUEMuTGliIiBUbyBTZWdtZW50IDMKLQkJQWRkIEZpbGVzIChjd19mb2xkZXIgYXMgc3RyaW5nKSAmICJNZXRyb3dlcmtzIENvZGVXYXJyaW9yOk1hY09TIFN1cHBvcnQ6TGlicmFyaWVzOlJ1bnRpbWU6UnVudGltZSBQUEM6TVNMIFJ1bnRpbWVQUEMuTGliIiBUbyBTZWdtZW50IDMKLQotCQlBZGQgRmlsZXMgKGN3X2ZvbGRlciBhcyBzdHJpbmcpICYgIk1ldHJvd2Vya3MgQ29kZVdhcnJpb3I6TWFjT1MgU3VwcG9ydDpMaWJyYXJpZXM6TWFjT1MgQ29tbW9uOkludGVyZmFjZUxpYiIgVG8gU2VnbWVudCA0Ci0JCUFkZCBGaWxlcyAoY3dfZm9sZGVyIGFzIHN0cmluZykgJiAiTWV0cm93ZXJrcyBDb2RlV2FycmlvcjpNYWNPUyBTdXBwb3J0OkxpYnJhcmllczpNYWNPUyBDb21tb246TWF0aExpYiIgVG8gU2VnbWVudCA0Ci0KLQkJLS0gY29tcGlsZSBhbmQgbGluayBjanBlZwotCi0JCU1ha2UgUHJvamVjdAotCQlDbG9zZSBQcm9qZWN0Ci0KLQkJLS0gY3JlYXRlIGRqcGVnIHByb2plY3QKLQotCQlhY3RpdmF0ZQotCQlDcmVhdGUgUHJvamVjdCAoaWpnX2ZvbGRlciBhcyBzdHJpbmcpICYgImRqcGVnLnByb2oiCi0JCVNldCBQcmVmZXJlbmNlcyBvZiBwYW5lbCAiVGFyZ2V0IFNldHRpbmdzIiB0byB7VGFyZ2V0IE5hbWU6ImRqcGVnIn0KLQkJU2V0IFByZWZlcmVuY2VzIG9mIHBhbmVsICJQUEMgUHJvamVjdCIgdG8ge0ZpbGUgTmFtZToiZGpwZWcifQotCQlTZXQgUHJlZmVyZW5jZXMgb2YgcGFuZWwgIlRhcmdldCBTZXR0aW5ncyIgdG8ge0xpbmtlcjoiTWFjT1MgUFBDIExpbmtlciJ9Ci0JCVNldCBQcmVmZXJlbmNlcyBvZiBwYW5lbCAiQy9DKysgQ29tcGlsZXIiIHRvIHtBTlNJIFN0cmljdDp0cnVlfQotCQlTZXQgUHJlZmVyZW5jZXMgb2YgcGFuZWwgIkMvQysrIENvbXBpbGVyIiB0byB7RW51bXMgQWx3YXlzIEludHM6dHJ1ZX0KLQkJU2V0IFByZWZlcmVuY2VzIG9mIHBhbmVsICJQUEMgQ29kZWdlbiIgdG8ge1N0cnVjdCBBbGlnbm1lbnQ6UG93ZXJQQ30KLQkJU2V0IFByZWZlcmVuY2VzIG9mIHBhbmVsICJQUEMgTGlua2VyIiB0byB7R2VuZXJhdGUgU1lNIEZpbGU6ZmFsc2V9Ci0KLQkJQWRkIEZpbGVzIChpamdfZm9sZGVyIGFzIHN0cmluZykgJiAiZGpwZWcuYyIgVG8gU2VnbWVudCAxCi0JCUFkZCBGaWxlcyAoaWpnX2ZvbGRlciBhcyBzdHJpbmcpICYgIndycHBtLmMiIFRvIFNlZ21lbnQgMQotCQlBZGQgRmlsZXMgKGlqZ19mb2xkZXIgYXMgc3RyaW5nKSAmICJ3cmdpZi5jIiBUbyBTZWdtZW50IDEKLQkJQWRkIEZpbGVzIChpamdfZm9sZGVyIGFzIHN0cmluZykgJiAid3J0YXJnYS5jIiBUbyBTZWdtZW50IDEKLQkJQWRkIEZpbGVzIChpamdfZm9sZGVyIGFzIHN0cmluZykgJiAid3JybGUuYyIgVG8gU2VnbWVudCAxCi0JCUFkZCBGaWxlcyAoaWpnX2ZvbGRlciBhcyBzdHJpbmcpICYgIndyYm1wLmMiIFRvIFNlZ21lbnQgMQotCQlBZGQgRmlsZXMgKGlqZ19mb2xkZXIgYXMgc3RyaW5nKSAmICJyZGNvbG1hcC5jIiBUbyBTZWdtZW50IDEKLQkJQWRkIEZpbGVzIChpamdfZm9sZGVyIGFzIHN0cmluZykgJiAiY2RqcGVnLmMiIFRvIFNlZ21lbnQgMQotCi0JCUFkZCBGaWxlcyAoaWpnX2ZvbGRlciBhcyBzdHJpbmcpICYgImxpYmpwZWciIFRvIFNlZ21lbnQgMgotCi0JCUFkZCBGaWxlcyAoY3dfZm9sZGVyIGFzIHN0cmluZykgJiAiTWV0cm93ZXJrcyBDb2RlV2FycmlvcjpNZXRyb3dlcmtzIFN0YW5kYXJkIExpYnJhcnk6TVNMIEM6QmluOk1TTCBDLlBQQy5MaWIiIFRvIFNlZ21lbnQgMwotCQlBZGQgRmlsZXMgKGN3X2ZvbGRlciBhcyBzdHJpbmcpICYgIk1ldHJvd2Vya3MgQ29kZVdhcnJpb3I6TWV0cm93ZXJrcyBTdGFuZGFyZCBMaWJyYXJ5Ok1TTCBDOkJpbjpNU0wgU0lPVVguUFBDLkxpYiIgVG8gU2VnbWVudCAzCi0JCUFkZCBGaWxlcyAoY3dfZm9sZGVyIGFzIHN0cmluZykgJiAiTWV0cm93ZXJrcyBDb2RlV2FycmlvcjpNYWNPUyBTdXBwb3J0OkxpYnJhcmllczpSdW50aW1lOlJ1bnRpbWUgUFBDOk1TTCBSdW50aW1lUFBDLkxpYiIgVG8gU2VnbWVudCAzCi0KLQkJQWRkIEZpbGVzIChjd19mb2xkZXIgYXMgc3RyaW5nKSAmICJNZXRyb3dlcmtzIENvZGVXYXJyaW9yOk1hY09TIFN1cHBvcnQ6TGlicmFyaWVzOk1hY09TIENvbW1vbjpJbnRlcmZhY2VMaWIiIFRvIFNlZ21lbnQgNAotCQlBZGQgRmlsZXMgKGN3X2ZvbGRlciBhcyBzdHJpbmcpICYgIk1ldHJvd2Vya3MgQ29kZVdhcnJpb3I6TWFjT1MgU3VwcG9ydDpMaWJyYXJpZXM6TWFjT1MgQ29tbW9uOk1hdGhMaWIiIFRvIFNlZ21lbnQgNAotCi0JCS0tIGNvbXBpbGUgYW5kIGxpbmsgZGpwZWcKLQotCQlNYWtlIFByb2plY3QKLQkJQ2xvc2UgUHJvamVjdAotCi0JCS0tIGNyZWF0ZSBqcGVndHJhbiBwcm9qZWN0Ci0KLQkJYWN0aXZhdGUKLQkJQ3JlYXRlIFByb2plY3QgKGlqZ19mb2xkZXIgYXMgc3RyaW5nKSAmICJqcGVndHJhbi5wcm9qIgotCQlTZXQgUHJlZmVyZW5jZXMgb2YgcGFuZWwgIlRhcmdldCBTZXR0aW5ncyIgdG8ge1RhcmdldCBOYW1lOiJqcGVndHJhbiJ9Ci0JCVNldCBQcmVmZXJlbmNlcyBvZiBwYW5lbCAiUFBDIFByb2plY3QiIHRvIHtGaWxlIE5hbWU6ImpwZWd0cmFuIn0KLQkJU2V0IFByZWZlcmVuY2VzIG9mIHBhbmVsICJUYXJnZXQgU2V0dGluZ3MiIHRvIHtMaW5rZXI6Ik1hY09TIFBQQyBMaW5rZXIifQotCQlTZXQgUHJlZmVyZW5jZXMgb2YgcGFuZWwgIkMvQysrIENvbXBpbGVyIiB0byB7QU5TSSBTdHJpY3Q6dHJ1ZX0KLQkJU2V0IFByZWZlcmVuY2VzIG9mIHBhbmVsICJDL0MrKyBDb21waWxlciIgdG8ge0VudW1zIEFsd2F5cyBJbnRzOnRydWV9Ci0JCVNldCBQcmVmZXJlbmNlcyBvZiBwYW5lbCAiUFBDIENvZGVnZW4iIHRvIHtTdHJ1Y3QgQWxpZ25tZW50OlBvd2VyUEN9Ci0JCVNldCBQcmVmZXJlbmNlcyBvZiBwYW5lbCAiUFBDIExpbmtlciIgdG8ge0dlbmVyYXRlIFNZTSBGaWxlOmZhbHNlfQotCi0JCUFkZCBGaWxlcyAoaWpnX2ZvbGRlciBhcyBzdHJpbmcpICYgImpwZWd0cmFuLmMiIFRvIFNlZ21lbnQgMQotCQlBZGQgRmlsZXMgKGlqZ19mb2xkZXIgYXMgc3RyaW5nKSAmICJyZHN3aXRjaC5jIiBUbyBTZWdtZW50IDEKLQkJQWRkIEZpbGVzIChpamdfZm9sZGVyIGFzIHN0cmluZykgJiAiY2RqcGVnLmMiIFRvIFNlZ21lbnQgMQotCQlBZGQgRmlsZXMgKGlqZ19mb2xkZXIgYXMgc3RyaW5nKSAmICJ0cmFuc3VwcC5jIiBUbyBTZWdtZW50IDEKLQotCQlBZGQgRmlsZXMgKGlqZ19mb2xkZXIgYXMgc3RyaW5nKSAmICJsaWJqcGVnIiBUbyBTZWdtZW50IDIKLQotCQlBZGQgRmlsZXMgKGN3X2ZvbGRlciBhcyBzdHJpbmcpICYgIk1ldHJvd2Vya3MgQ29kZVdhcnJpb3I6TWV0cm93ZXJrcyBTdGFuZGFyZCBMaWJyYXJ5Ok1TTCBDOkJpbjpNU0wgQy5QUEMuTGliIiBUbyBTZWdtZW50IDMKLQkJQWRkIEZpbGVzIChjd19mb2xkZXIgYXMgc3RyaW5nKSAmICJNZXRyb3dlcmtzIENvZGVXYXJyaW9yOk1ldHJvd2Vya3MgU3RhbmRhcmQgTGlicmFyeTpNU0wgQzpCaW46TVNMIFNJT1VYLlBQQy5MaWIiIFRvIFNlZ21lbnQgMwotCQlBZGQgRmlsZXMgKGN3X2ZvbGRlciBhcyBzdHJpbmcpICYgIk1ldHJvd2Vya3MgQ29kZVdhcnJpb3I6TWFjT1MgU3VwcG9ydDpMaWJyYXJpZXM6UnVudGltZTpSdW50aW1lIFBQQzpNU0wgUnVudGltZVBQQy5MaWIiIFRvIFNlZ21lbnQgMwotCi0JCUFkZCBGaWxlcyAoY3dfZm9sZGVyIGFzIHN0cmluZykgJiAiTWV0cm93ZXJrcyBDb2RlV2FycmlvcjpNYWNPUyBTdXBwb3J0OkxpYnJhcmllczpNYWNPUyBDb21tb246SW50ZXJmYWNlTGliIiBUbyBTZWdtZW50IDQKLQkJQWRkIEZpbGVzIChjd19mb2xkZXIgYXMgc3RyaW5nKSAmICJNZXRyb3dlcmtzIENvZGVXYXJyaW9yOk1hY09TIFN1cHBvcnQ6TGlicmFyaWVzOk1hY09TIENvbW1vbjpNYXRoTGliIiBUbyBTZWdtZW50IDQKLQotCQktLSBjb21waWxlIGFuZCBsaW5rIGpwZWd0cmFuCi0KLQkJTWFrZSBQcm9qZWN0Ci0JCUNsb3NlIFByb2plY3QKLQotCQlxdWl0Ci0KLQkgIGVuZCB0aW1lb3V0Ci0JZW5kIHRlbGwKLWVuZCBydW4KZGlmZiAtLWdpdCBhL21ha2VyZGVwLnZjNiBiL21ha2VyZGVwLnZjNgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOTQ3NDhkMC4uMDAwMDAwMAotLS0gYS9tYWtlcmRlcC52YzYKKysrIC9kZXYvbnVsbApAQCAtMSw2ICswLDAgQEAKLSMgTWljcm9zb2Z0IERldmVsb3BlciBTdHVkaW8gZXJzdGVsbHRlIEFiaIRuZ2lna2VpdHNkYXRlaSwgZWluYmV6b2dlbiB2b24gcmRqcGdjb20ubWFrCi0KLS5ccmRqcGdjb20uYyA6IFwKLQkiLlxqY29uZmlnLmgiXAotCSIuXGppbmNsdWRlLmgiXAotCQpkaWZmIC0tZ2l0IGEvbWFrZXJkc3AudmM2IGIvbWFrZXJkc3AudmM2CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2MGRlMDlhLi4wMDAwMDAwCi0tLSBhL21ha2VyZHNwLnZjNgorKysgL2Rldi9udWxsCkBAIC0xLDc4ICswLDAgQEAKLSMgTWljcm9zb2Z0IERldmVsb3BlciBTdHVkaW8gUHJvamVjdCBGaWxlIC0gTmFtZT0icmRqcGdjb20iIC0gUGFja2FnZSBPd25lcj08ND4KLSMgTWljcm9zb2Z0IERldmVsb3BlciBTdHVkaW8gR2VuZXJhdGVkIEJ1aWxkIEZpbGUsIEZvcm1hdCBWZXJzaW9uIDYuMDAKLSMgKiogTklDSFQgQkVBUkJFSVRFTiAqKgotCi0jIFRBUkdUWVBFICJXaW4zMiAoeDg2KSBDb25zb2xlIEFwcGxpY2F0aW9uIiAweDAxMDMKLQotQ0ZHPXJkanBnY29tIC0gV2luMzIKLSFNRVNTQUdFIERpZXMgaXN0IGtlaW4gZ4FsdGlnZXMgTWFrZWZpbGUuIFp1bSBFcnN0ZWxsZW4gZGllc2VzIFByb2pla3RzIG1pdCBOTUFLRQotIU1FU1NBR0UgdmVyd2VuZGVuIFNpZSBkZW4gQmVmZWhsICJNYWtlZmlsZSBleHBvcnRpZXJlbiIgdW5kIGaBaHJlbiBTaWUgZGVuIEJlZmVobAotIU1FU1NBR0UgCi0hTUVTU0FHRSBOTUFLRSAvZiAicmRqcGdjb20ubWFrIi4KLSFNRVNTQUdFIAotIU1FU1NBR0UgU2llIGv3bm5lbiBiZWltIEF1c2aBaHJlbiB2b24gTk1BS0UgZWluZSBLb25maWd1cmF0aW9uIGFuZ2ViZW4KLSFNRVNTQUdFIGR1cmNoIERlZmluaWVyZW4gZGVzIE1ha3JvcyBDRkcgaW4gZGVyIEJlZmVobHN6ZWlsZS4gWnVtIEJlaXNwaWVsOgotIU1FU1NBR0UgCi0hTUVTU0FHRSBOTUFLRSAvZiAicmRqcGdjb20ubWFrIiBDRkc9InJkanBnY29tIC0gV2luMzIiCi0hTUVTU0FHRSAKLSFNRVNTQUdFIEaBciBkaWUgS29uZmlndXJhdGlvbiBzdGVoZW4genVyIEF1c3dhaGw6Ci0hTUVTU0FHRSAKLSFNRVNTQUdFICJyZGpwZ2NvbSAtIFdpbjMyIiAoYmFzaWVyZW5kIGF1ZiAgIldpbjMyICh4ODYpIENvbnNvbGUgQXBwbGljYXRpb24iKQotIU1FU1NBR0UgCi0KLSMgQmVnaW4gUHJvamVjdAotIyBQUk9QIEFsbG93UGVyQ29uZmlnRGVwZW5kZW5jaWVzIDAKLSMgUFJPUCBTY2NfUHJvak5hbWUgIiIKLSMgUFJPUCBTY2NfTG9jYWxQYXRoICIiCi1DUFA9Y2wuZXhlCi1SU0M9cmMuZXhlCi0jIFBST1AgQkFTRSBVc2VfTUZDIDAKLSMgUFJPUCBCQVNFIFVzZV9EZWJ1Z19MaWJyYXJpZXMgMAotIyBQUk9QIEJBU0UgT3V0cHV0X0RpciAiLlxyZGpwZ2NvbVxSZWxlYXNlIgotIyBQUk9QIEJBU0UgSW50ZXJtZWRpYXRlX0RpciAiLlxyZGpwZ2NvbVxSZWxlYXNlIgotIyBQUk9QIEJBU0UgVGFyZ2V0X0RpciAiLlxyZGpwZ2NvbSIKLSMgUFJPUCBVc2VfTUZDIDAKLSMgUFJPUCBVc2VfRGVidWdfTGlicmFyaWVzIDAKLSMgUFJPUCBPdXRwdXRfRGlyICIuXHJkanBnY29tXFJlbGVhc2UiCi0jIFBST1AgSW50ZXJtZWRpYXRlX0RpciAiLlxyZGpwZ2NvbVxSZWxlYXNlIgotIyBQUk9QIElnbm9yZV9FeHBvcnRfTGliIDAKLSMgUFJPUCBUYXJnZXRfRGlyICIuXHJkanBnY29tIgotIyBBREQgQkFTRSBDUFAgL25vbG9nbyAvVzMgL0dYIC9PMiAvRCAiV0lOMzIiIC9EICJOREVCVUciIC9EICJfQ09OU09MRSIgL1lYIC9jCi0jIEFERCBDUFAgL25vbG9nbyAvRzYgL01UIC9XMyAvR1ggL094IC9PYSAvT2IyIC9EICJXSU4zMiIgL0QgIk5ERUJVRyIgL0QgIl9DT05TT0xFIiAvWVggL0ZEIC9jCi0jIEFERCBCQVNFIFJTQyAvbCAweDQwOSAvZCAiTkRFQlVHIgotIyBBREQgUlNDIC9sIDB4NDA5IC9kICJOREVCVUciCi1CU0MzMj1ic2NtYWtlLmV4ZQotIyBBREQgQkFTRSBCU0MzMiAvbm9sb2dvCi0jIEFERCBCU0MzMiAvbm9sb2dvCi1MSU5LMzI9bGluay5leGUKLSMgQUREIEJBU0UgTElOSzMyIGtlcm5lbDMyLmxpYiB1c2VyMzIubGliIGdkaTMyLmxpYiB3aW5zcG9vbC5saWIgY29tZGxnMzIubGliIGFkdmFwaTMyLmxpYiBzaGVsbDMyLmxpYiBvbGUzMi5saWIgb2xlYXV0MzIubGliIHV1aWQubGliIG9kYmMzMi5saWIgb2RiY2NwMzIubGliIC9ub2xvZ28gL3N1YnN5c3RlbTpjb25zb2xlIC9tYWNoaW5lOkkzODYKLSMgQUREIExJTkszMiBSZWxlYXNlXGpwZWcubGliIGtlcm5lbDMyLmxpYiB1c2VyMzIubGliIGdkaTMyLmxpYiB3aW5zcG9vbC5saWIgY29tZGxnMzIubGliIGFkdmFwaTMyLmxpYiBzaGVsbDMyLmxpYiBvbGUzMi5saWIgb2xlYXV0MzIubGliIHV1aWQubGliIG9kYmMzMi5saWIgb2RiY2NwMzIubGliIC9ub2xvZ28gL3N1YnN5c3RlbTpjb25zb2xlIC9tYWNoaW5lOkkzODYKLSMgQmVnaW4gVGFyZ2V0Ci0KLSMgTmFtZSAicmRqcGdjb20gLSBXaW4zMiIKLSMgQmVnaW4gR3JvdXAgIlF1ZWxsY29kZWRhdGVpZW4iCi0KLSMgUFJPUCBEZWZhdWx0X0ZpbHRlciAiY3BwO2M7Y3h4O3JjO2RlZjtyO29kbDtpZGw7aHBqO2JhdDtmb3I7ZjkwIgotIyBCZWdpbiBTb3VyY2UgRmlsZQotCi1TT1VSQ0U9LlxyZGpwZ2NvbS5jCi0jIEVuZCBTb3VyY2UgRmlsZQotIyBFbmQgR3JvdXAKLSMgQmVnaW4gR3JvdXAgIkhlYWRlci1EYXRlaWVuIgotCi0jIFBST1AgRGVmYXVsdF9GaWx0ZXIgImg7aHBwO2h4eDtobTtpbmw7Zmk7ZmQiCi0jIEJlZ2luIFNvdXJjZSBGaWxlCi0KLVNPVVJDRT0uXGpjb25maWcuaAotIyBFbmQgU291cmNlIEZpbGUKLSMgQmVnaW4gU291cmNlIEZpbGUKLQotU09VUkNFPS5camluY2x1ZGUuaAotIyBFbmQgU291cmNlIEZpbGUKLSMgRW5kIEdyb3VwCi0jIEJlZ2luIEdyb3VwICJSZXNzb3VyY2VuZGF0ZWllbiIKLQotIyBQUk9QIERlZmF1bHRfRmlsdGVyICJpY287Y3VyO2JtcDtkbGc7cmMyO3JjdDtiaW47Y250O3J0ZjtnaWY7anBnO2pwZWc7anBlIgotIyBFbmQgR3JvdXAKLSMgRW5kIFRhcmdldAotIyBFbmQgUHJvamVjdApkaWZmIC0tZ2l0IGEvbWFrZXJmaWwudjEwIGIvbWFrZXJmaWwudjEwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkMTQ5MTRhLi4wMDAwMDAwCi0tLSBhL21ha2VyZmlsLnYxMAorKysgL2Rldi9udWxsCkBAIC0xLDMwICswLDAgQEAKLYuvqDw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9InV0Zi04Ij8+Ci08UHJvamVjdCBUb29sc1ZlcnNpb249IjQuMCIgeG1sbnM9Imh0dHA6Ly9zY2hlbWFzLm1pY3Jvc29mdC5jb20vZGV2ZWxvcGVyL21zYnVpbGQvMjAwMyI+Ci0gIDxJdGVtR3JvdXA+Ci0gICAgPEZpbHRlciBJbmNsdWRlPSJTb3VyY2UgRmlsZXMiPgotICAgICAgPFVuaXF1ZUlkZW50aWZpZXI+ezRGQzczN0YxLUM3QTUtNDM3Ni1BMDY2LTJBMzJENzUyQTJGRn08L1VuaXF1ZUlkZW50aWZpZXI+Ci0gICAgICA8RXh0ZW5zaW9ucz5jcHA7YztjYztjeHg7ZGVmO29kbDtpZGw7aHBqO2JhdDthc207YXNteDwvRXh0ZW5zaW9ucz4KLSAgICA8L0ZpbHRlcj4KLSAgICA8RmlsdGVyIEluY2x1ZGU9IkhlYWRlciBGaWxlcyI+Ci0gICAgICA8VW5pcXVlSWRlbnRpZmllcj57OTM5OTUzODAtODlCRC00YjA0LTg4RUItNjI1RkJFNTJFQkZCfTwvVW5pcXVlSWRlbnRpZmllcj4KLSAgICAgIDxFeHRlbnNpb25zPmg7aHBwO2h4eDtobTtpbmw7aW5jO3hzZDwvRXh0ZW5zaW9ucz4KLSAgICA8L0ZpbHRlcj4KLSAgICA8RmlsdGVyIEluY2x1ZGU9IlJlc291cmNlIEZpbGVzIj4KLSAgICAgIDxVbmlxdWVJZGVudGlmaWVyPns2N0RBNkFCNi1GODAwLTRjMDgtOEI3QS04M0JCMTIxQUFEMDF9PC9VbmlxdWVJZGVudGlmaWVyPgotICAgICAgPEV4dGVuc2lvbnM+cmM7aWNvO2N1cjtibXA7ZGxnO3JjMjtyY3Q7YmluO3JncztnaWY7anBnO2pwZWc7anBlO3Jlc3g7dGlmZjt0aWY7cG5nO3dhdjttZmNyaWJib24tbXM8L0V4dGVuc2lvbnM+Ci0gICAgPC9GaWx0ZXI+Ci0gIDwvSXRlbUdyb3VwPgotICA8SXRlbUdyb3VwPgotICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iamNvbmZpZy5oIj4KLSAgICAgIDxGaWx0ZXI+SGVhZGVyIEZpbGVzPC9GaWx0ZXI+Ci0gICAgPC9DbEluY2x1ZGU+Ci0gICAgPENsSW5jbHVkZSBJbmNsdWRlPSJqaW5jbHVkZS5oIj4KLSAgICAgIDxGaWx0ZXI+SGVhZGVyIEZpbGVzPC9GaWx0ZXI+Ci0gICAgPC9DbEluY2x1ZGU+Ci0gIDwvSXRlbUdyb3VwPgotICA8SXRlbUdyb3VwPgotICAgIDxDbENvbXBpbGUgSW5jbHVkZT0icmRqcGdjb20uYyI+Ci0gICAgICA8RmlsdGVyPlNvdXJjZSBGaWxlczwvRmlsdGVyPgotICAgIDwvQ2xDb21waWxlPgotICA8L0l0ZW1Hcm91cD4KLTwvUHJvamVjdD4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9tYWtlcm1hay52YzYgYi9tYWtlcm1hay52YzYKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDZkMmQ0YzcuLjAwMDAwMDAKLS0tIGEvbWFrZXJtYWsudmM2CisrKyAvZGV2L251bGwKQEAgLTEsMTEwICswLDAgQEAKLSMgTWljcm9zb2Z0IERldmVsb3BlciBTdHVkaW8gR2VuZXJhdGVkIE5NQUtFIEZpbGUsIEJhc2VkIG9uIHJkanBnY29tLmRzcAotIUlGICIkKENGRykiID09ICIiCi1DRkc9cmRqcGdjb20gLSBXaW4zMgotIU1FU1NBR0UgS2VpbmUgS29uZmlndXJhdGlvbiBhbmdlZ2ViZW4uIHJkanBnY29tIC0gV2luMzIgd2lyZCBhbHMgU3RhbmRhcmQgdmVyd2VuZGV0LgotIUVORElGIAotCi0hSUYgIiQoQ0ZHKSIgIT0gInJkanBnY29tIC0gV2luMzIiCi0hTUVTU0FHRSBVbmf8bHRpZ2UgS29uZmlndXJhdGlvbiAiJChDRkcpIiBhbmdlZ2ViZW4uCi0hTUVTU0FHRSBTaWUga/ZubmVuIGJlaW0gQXVzZvxocmVuIHZvbiBOTUFLRSBlaW5lIEtvbmZpZ3VyYXRpb24gYW5nZWJlbgotIU1FU1NBR0UgZHVyY2ggRGVmaW5pZXJlbiBkZXMgTWFrcm9zIENGRyBpbiBkZXIgQmVmZWhsc3plaWxlLiBadW0gQmVpc3BpZWw6Ci0hTUVTU0FHRSAKLSFNRVNTQUdFIE5NQUtFIC9mICJyZGpwZ2NvbS5tYWsiIENGRz0icmRqcGdjb20gLSBXaW4zMiIKLSFNRVNTQUdFIAotIU1FU1NBR0UgRvxyIGRpZSBLb25maWd1cmF0aW9uIHN0ZWhlbiB6dXIgQXVzd2FobDoKLSFNRVNTQUdFIAotIU1FU1NBR0UgInJkanBnY29tIC0gV2luMzIiIChiYXNpZXJlbmQgYXVmICAiV2luMzIgKHg4NikgQ29uc29sZSBBcHBsaWNhdGlvbiIpCi0hTUVTU0FHRSAKLSFFUlJPUiBFaW5lIHVuZ/xsdGlnZSBLb25maWd1cmF0aW9uIHd1cmRlIGFuZ2VnZWJlbi4KLSFFTkRJRiAKLQotIUlGICIkKE9TKSIgPT0gIldpbmRvd3NfTlQiCi1OVUxMPQotIUVMU0UgCi1OVUxMPW51bAotIUVORElGIAotCi1DUFA9Y2wuZXhlCi1SU0M9cmMuZXhlCi1PVVRESVI9LlxyZGpwZ2NvbVxSZWxlYXNlCi1JTlRESVI9LlxyZGpwZ2NvbVxSZWxlYXNlCi0jIEJlZ2luIEN1c3RvbSBNYWNyb3MKLU91dERpcj0uXHJkanBnY29tXFJlbGVhc2UKLSMgRW5kIEN1c3RvbSBNYWNyb3MKLQotQUxMIDogIiQoT1VURElSKVxyZGpwZ2NvbS5leGUiCi0KLQotQ0xFQU4gOgotCS1AZXJhc2UgIiQoSU5URElSKVxyZGpwZ2NvbS5vYmoiCi0JLUBlcmFzZSAiJChJTlRESVIpXHZjNjAuaWRiIgotCS1AZXJhc2UgIiQoT1VURElSKVxyZGpwZ2NvbS5leGUiCi0KLSIkKE9VVERJUikiIDoKLSAgICBpZiBub3QgZXhpc3QgIiQoT1VURElSKS8kKE5VTEwpIiBta2RpciAiJChPVVRESVIpIgotCi1CU0MzMj1ic2NtYWtlLmV4ZQotQlNDMzJfRkxBR1M9L25vbG9nbyAvbyIkKE9VVERJUilccmRqcGdjb20uYnNjIiAKLUJTQzMyX1NCUlM9IFwKLQkKLUxJTkszMj1saW5rLmV4ZQotTElOSzMyX0ZMQUdTPVJlbGVhc2VcanBlZy5saWIga2VybmVsMzIubGliIHVzZXIzMi5saWIgZ2RpMzIubGliIHdpbnNwb29sLmxpYiBjb21kbGczMi5saWIgYWR2YXBpMzIubGliIHNoZWxsMzIubGliIG9sZTMyLmxpYiBvbGVhdXQzMi5saWIgdXVpZC5saWIgb2RiYzMyLmxpYiBvZGJjY3AzMi5saWIgL25vbG9nbyAvc3Vic3lzdGVtOmNvbnNvbGUgL2luY3JlbWVudGFsOm5vIC9wZGI6IiQoT1VURElSKVxyZGpwZ2NvbS5wZGIiIC9tYWNoaW5lOkkzODYgL291dDoiJChPVVRESVIpXHJkanBnY29tLmV4ZSIgCi1MSU5LMzJfT0JKUz0gXAotCSIkKElOVERJUilccmRqcGdjb20ub2JqIgotCi0iJChPVVRESVIpXHJkanBnY29tLmV4ZSIgOiAiJChPVVRESVIpIiAkKERFRl9GSUxFKSAkKExJTkszMl9PQkpTKQotICAgICQoTElOSzMyKSBAPDwKLSAgJChMSU5LMzJfRkxBR1MpICQoTElOSzMyX09CSlMpCi08PAotCi1DUFBfUFJPSj0vbm9sb2dvIC9HNiAvTVQgL1czIC9HWCAvT3ggL09hIC9PYjIgL0QgIldJTjMyIiAvRCAiTkRFQlVHIiAvRCAiX0NPTlNPTEUiIC9GcCIkKElOVERJUilccmRqcGdjb20ucGNoIiAvWVggL0ZvIiQoSU5URElSKVxcIiAvRmQiJChJTlRESVIpXFwiIC9GRCAvYyAKLQotLmN7JChJTlRESVIpfS5vYmo6OgotICAgJChDUFApIEA8PAotICAgJChDUFBfUFJPSikgJDwgCi08PAotCi0uY3BweyQoSU5URElSKX0ub2JqOjoKLSAgICQoQ1BQKSBAPDwKLSAgICQoQ1BQX1BST0opICQ8IAotPDwKLQotLmN4eHskKElOVERJUil9Lm9iajo6Ci0gICAkKENQUCkgQDw8Ci0gICAkKENQUF9QUk9KKSAkPCAKLTw8Ci0KLS5jeyQoSU5URElSKX0uc2JyOjoKLSAgICQoQ1BQKSBAPDwKLSAgICQoQ1BQX1BST0opICQ8IAotPDwKLQotLmNwcHskKElOVERJUil9LnNicjo6Ci0gICAkKENQUCkgQDw8Ci0gICAkKENQUF9QUk9KKSAkPCAKLTw8Ci0KLS5jeHh7JChJTlRESVIpfS5zYnI6OgotICAgJChDUFApIEA8PAotICAgJChDUFBfUFJPSikgJDwgCi08PAotCi0KLSFJRiAiJChOT19FWFRFUk5BTF9ERVBTKSIgIT0gIjEiCi0hSUYgRVhJU1RTKCJyZGpwZ2NvbS5kZXAiKQotIUlOQ0xVREUgInJkanBnY29tLmRlcCIKLSFFTFNFIAotIU1FU1NBR0UgV2FybmluZzogY2Fubm90IGZpbmQgInJkanBnY29tLmRlcCIKLSFFTkRJRiAKLSFFTkRJRiAKLQotCi0hSUYgIiQoQ0ZHKSIgPT0gInJkanBnY29tIC0gV2luMzIiCi1TT1VSQ0U9LlxyZGpwZ2NvbS5jCi0KLSIkKElOVERJUilccmRqcGdjb20ub2JqIiA6ICQoU09VUkNFKSAiJChJTlRESVIpIgotCi0KLQotIUVORElGIAotCmRpZmYgLS1naXQgYS9tYWtlcnZjeC52MTAgYi9tYWtlcnZjeC52MTAKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDM2NmQ0ZmMuLjAwMDAwMDAKLS0tIGEvbWFrZXJ2Y3gudjEwCisrKyAvZGV2L251bGwKQEAgLTEsNjIgKzAsMCBAQAoti6+oPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz4KLTxQcm9qZWN0IERlZmF1bHRUYXJnZXRzPSJCdWlsZCIgVG9vbHNWZXJzaW9uPSI0LjAiIHhtbG5zPSJodHRwOi8vc2NoZW1hcy5taWNyb3NvZnQuY29tL2RldmVsb3Blci9tc2J1aWxkLzIwMDMiPgotICA8SXRlbUdyb3VwIExhYmVsPSJQcm9qZWN0Q29uZmlndXJhdGlvbnMiPgotICAgIDxQcm9qZWN0Q29uZmlndXJhdGlvbiBJbmNsdWRlPSJSZWxlYXNlfFdpbjMyIj4KLSAgICAgIDxDb25maWd1cmF0aW9uPlJlbGVhc2U8L0NvbmZpZ3VyYXRpb24+Ci0gICAgICA8UGxhdGZvcm0+V2luMzI8L1BsYXRmb3JtPgotICAgIDwvUHJvamVjdENvbmZpZ3VyYXRpb24+Ci0gIDwvSXRlbUdyb3VwPgotICA8UHJvcGVydHlHcm91cCBMYWJlbD0iR2xvYmFscyI+Ci0gICAgPFByb2plY3RHdWlkPntDODE1MTNEQi03OERDLTQ2QkMtQkM5OC04MkU3NDUyMDM5NzZ9PC9Qcm9qZWN0R3VpZD4KLSAgICA8S2V5d29yZD5XaW4zMlByb2o8L0tleXdvcmQ+Ci0gICAgPFJvb3ROYW1lc3BhY2U+cmRqcGdjb208L1Jvb3ROYW1lc3BhY2U+Ci0gIDwvUHJvcGVydHlHcm91cD4KLSAgPEltcG9ydCBQcm9qZWN0PSIkKFZDVGFyZ2V0c1BhdGgpXE1pY3Jvc29mdC5DcHAuRGVmYXVsdC5wcm9wcyIgLz4KLSAgPFByb3BlcnR5R3JvdXAgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdSZWxlYXNlfFdpbjMyJyIgTGFiZWw9IkNvbmZpZ3VyYXRpb24iPgotICAgIDxDb25maWd1cmF0aW9uVHlwZT5BcHBsaWNhdGlvbjwvQ29uZmlndXJhdGlvblR5cGU+Ci0gICAgPFVzZURlYnVnTGlicmFyaWVzPmZhbHNlPC9Vc2VEZWJ1Z0xpYnJhcmllcz4KLSAgICA8V2hvbGVQcm9ncmFtT3B0aW1pemF0aW9uPnRydWU8L1dob2xlUHJvZ3JhbU9wdGltaXphdGlvbj4KLSAgICA8Q2hhcmFjdGVyU2V0PlVuaWNvZGU8L0NoYXJhY3RlclNldD4KLSAgPC9Qcm9wZXJ0eUdyb3VwPgotICA8SW1wb3J0IFByb2plY3Q9IiQoVkNUYXJnZXRzUGF0aClcTWljcm9zb2Z0LkNwcC5wcm9wcyIgLz4KLSAgPEltcG9ydEdyb3VwIExhYmVsPSJFeHRlbnNpb25TZXR0aW5ncyI+Ci0gIDwvSW1wb3J0R3JvdXA+Ci0gIDxJbXBvcnRHcm91cCBMYWJlbD0iUHJvcGVydHlTaGVldHMiIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUmVsZWFzZXxXaW4zMiciPgotICAgIDxJbXBvcnQgUHJvamVjdD0iJChVc2VyUm9vdERpcilcTWljcm9zb2Z0LkNwcC4kKFBsYXRmb3JtKS51c2VyLnByb3BzIiBDb25kaXRpb249ImV4aXN0cygnJChVc2VyUm9vdERpcilcTWljcm9zb2Z0LkNwcC4kKFBsYXRmb3JtKS51c2VyLnByb3BzJykiIExhYmVsPSJMb2NhbEFwcERhdGFQbGF0Zm9ybSIgLz4KLSAgPC9JbXBvcnRHcm91cD4KLSAgPFByb3BlcnR5R3JvdXAgTGFiZWw9IlVzZXJNYWNyb3MiIC8+Ci0gIDxQcm9wZXJ0eUdyb3VwIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUmVsZWFzZXxXaW4zMiciPgotICAgIDxMaW5rSW5jcmVtZW50YWw+ZmFsc2U8L0xpbmtJbmNyZW1lbnRhbD4KLSAgICA8T3V0RGlyPiQoUHJvamVjdE5hbWUpXCQoQ29uZmlndXJhdGlvbilcPC9PdXREaXI+Ci0gICAgPEludERpcj4kKFByb2plY3ROYW1lKVwkKENvbmZpZ3VyYXRpb24pXDwvSW50RGlyPgotICA8L1Byb3BlcnR5R3JvdXA+Ci0gIDxJdGVtRGVmaW5pdGlvbkdyb3VwIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUmVsZWFzZXxXaW4zMiciPgotICAgIDxDbENvbXBpbGU+Ci0gICAgICA8V2FybmluZ0xldmVsPkxldmVsMzwvV2FybmluZ0xldmVsPgotICAgICAgPFByZWNvbXBpbGVkSGVhZGVyPk5vdFVzaW5nPC9QcmVjb21waWxlZEhlYWRlcj4KLSAgICAgIDxPcHRpbWl6YXRpb24+RnVsbDwvT3B0aW1pemF0aW9uPgotICAgICAgPEZ1bmN0aW9uTGV2ZWxMaW5raW5nPnRydWU8L0Z1bmN0aW9uTGV2ZWxMaW5raW5nPgotICAgICAgPEludHJpbnNpY0Z1bmN0aW9ucz5mYWxzZTwvSW50cmluc2ljRnVuY3Rpb25zPgotICAgICAgPFByZXByb2Nlc3NvckRlZmluaXRpb25zPldJTjMyO05ERUJVRztfQ09OU09MRTtfQ1JUX1NFQ1VSRV9OT19XQVJOSU5HUzwvUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM+Ci0gICAgICA8T21pdEZyYW1lUG9pbnRlcnM+dHJ1ZTwvT21pdEZyYW1lUG9pbnRlcnM+Ci0gICAgICA8RW5hYmxlRmliZXJTYWZlT3B0aW1pemF0aW9ucz50cnVlPC9FbmFibGVGaWJlclNhZmVPcHRpbWl6YXRpb25zPgotICAgICAgPERpc2FibGVTcGVjaWZpY1dhcm5pbmdzPjQ5OTY8L0Rpc2FibGVTcGVjaWZpY1dhcm5pbmdzPgotICAgIDwvQ2xDb21waWxlPgotICAgIDxMaW5rPgotICAgICAgPFN1YlN5c3RlbT5Db25zb2xlPC9TdWJTeXN0ZW0+Ci0gICAgICA8R2VuZXJhdGVEZWJ1Z0luZm9ybWF0aW9uPnRydWU8L0dlbmVyYXRlRGVidWdJbmZvcm1hdGlvbj4KLSAgICAgIDxFbmFibGVDT01EQVRGb2xkaW5nPnRydWU8L0VuYWJsZUNPTURBVEZvbGRpbmc+Ci0gICAgICA8T3B0aW1pemVSZWZlcmVuY2VzPnRydWU8L09wdGltaXplUmVmZXJlbmNlcz4KLSAgICA8L0xpbms+Ci0gIDwvSXRlbURlZmluaXRpb25Hcm91cD4KLSAgPEl0ZW1Hcm91cD4KLSAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Impjb25maWcuaCIgLz4KLSAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9ImppbmNsdWRlLmgiIC8+Ci0gIDwvSXRlbUdyb3VwPgotICA8SXRlbUdyb3VwPgotICAgIDxDbENvbXBpbGUgSW5jbHVkZT0icmRqcGdjb20uYyIgLz4KLSAgPC9JdGVtR3JvdXA+Ci0gIDxJbXBvcnQgUHJvamVjdD0iJChWQ1RhcmdldHNQYXRoKVxNaWNyb3NvZnQuQ3BwLnRhcmdldHMiIC8+Ci0gIDxJbXBvcnRHcm91cCBMYWJlbD0iRXh0ZW5zaW9uVGFyZ2V0cyI+Ci0gIDwvSW1wb3J0R3JvdXA+Ci08L1Byb2plY3Q+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvbWFrZXRkZXAudmM2IGIvbWFrZXRkZXAudmM2CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlMTc3ZWNiLi4wMDAwMDAwCi0tLSBhL21ha2V0ZGVwLnZjNgorKysgL2Rldi9udWxsCkBAIC0xLDQzICswLDAgQEAKLSMgTWljcm9zb2Z0IERldmVsb3BlciBTdHVkaW8gZXJzdGVsbHRlIEFiaIRuZ2lna2VpdHNkYXRlaSwgZWluYmV6b2dlbiB2b24ganBlZ3RyYW4ubWFrCi0KLS5cY2RqcGVnLmMgOiBcCi0JIi5cY2RlcnJvci5oIlwKLQkiLlxjZGpwZWcuaCJcCi0JIi5camNvbmZpZy5oIlwKLQkiLlxqZXJyb3IuaCJcCi0JIi5camluY2x1ZGUuaCJcCi0JIi5cam1vcmVjZmcuaCJcCi0JIi5canBlZ2xpYi5oIlwKLQkKLQotLlxqcGVndHJhbi5jIDogXAotCSIuXGNkZXJyb3IuaCJcCi0JIi5cY2RqcGVnLmgiXAotCSIuXGpjb25maWcuaCJcCi0JIi5camVycm9yLmgiXAotCSIuXGppbmNsdWRlLmgiXAotCSIuXGptb3JlY2ZnLmgiXAotCSIuXGpwZWdsaWIuaCJcCi0JIi5canZlcnNpb24uaCJcCi0JIi5cdHJhbnN1cHAuaCJcCi0JCi0KLS5ccmRzd2l0Y2guYyA6IFwKLQkiLlxjZGVycm9yLmgiXAotCSIuXGNkanBlZy5oIlwKLQkiLlxqY29uZmlnLmgiXAotCSIuXGplcnJvci5oIlwKLQkiLlxqaW5jbHVkZS5oIlwKLQkiLlxqbW9yZWNmZy5oIlwKLQkiLlxqcGVnbGliLmgiXAotCQotCi0uXHRyYW5zdXBwLmMgOiBcCi0JIi5camNvbmZpZy5oIlwKLQkiLlxqZXJyb3IuaCJcCi0JIi5camluY2x1ZGUuaCJcCi0JIi5cam1vcmVjZmcuaCJcCi0JIi5canBlZ2ludC5oIlwKLQkiLlxqcGVnbGliLmgiXAotCSIuXHRyYW5zdXBwLmgiXAotCQpkaWZmIC0tZ2l0IGEvbWFrZXRkc3AudmM2IGIvbWFrZXRkc3AudmM2CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBmZTFhZTlhLi4wMDAwMDAwCi0tLSBhL21ha2V0ZHNwLnZjNgorKysgL2Rldi9udWxsCkBAIC0xLDEyMiArMCwwIEBACi0jIE1pY3Jvc29mdCBEZXZlbG9wZXIgU3R1ZGlvIFByb2plY3QgRmlsZSAtIE5hbWU9ImpwZWd0cmFuIiAtIFBhY2thZ2UgT3duZXI9PDQ+Ci0jIE1pY3Jvc29mdCBEZXZlbG9wZXIgU3R1ZGlvIEdlbmVyYXRlZCBCdWlsZCBGaWxlLCBGb3JtYXQgVmVyc2lvbiA2LjAwCi0jICoqIE5JQ0hUIEJFQVJCRUlURU4gKioKLQotIyBUQVJHVFlQRSAiV2luMzIgKHg4NikgQ29uc29sZSBBcHBsaWNhdGlvbiIgMHgwMTAzCi0KLUNGRz1qcGVndHJhbiAtIFdpbjMyCi0hTUVTU0FHRSBEaWVzIGlzdCBrZWluIGeBbHRpZ2VzIE1ha2VmaWxlLiBadW0gRXJzdGVsbGVuIGRpZXNlcyBQcm9qZWt0cyBtaXQgTk1BS0UKLSFNRVNTQUdFIHZlcndlbmRlbiBTaWUgZGVuIEJlZmVobCAiTWFrZWZpbGUgZXhwb3J0aWVyZW4iIHVuZCBmgWhyZW4gU2llIGRlbiBCZWZlaGwKLSFNRVNTQUdFIAotIU1FU1NBR0UgTk1BS0UgL2YgImpwZWd0cmFuLm1hayIuCi0hTUVTU0FHRSAKLSFNRVNTQUdFIFNpZSBr925uZW4gYmVpbSBBdXNmgWhyZW4gdm9uIE5NQUtFIGVpbmUgS29uZmlndXJhdGlvbiBhbmdlYmVuCi0hTUVTU0FHRSBkdXJjaCBEZWZpbmllcmVuIGRlcyBNYWtyb3MgQ0ZHIGluIGRlciBCZWZlaGxzemVpbGUuIFp1bSBCZWlzcGllbDoKLSFNRVNTQUdFIAotIU1FU1NBR0UgTk1BS0UgL2YgImpwZWd0cmFuLm1hayIgQ0ZHPSJqcGVndHJhbiAtIFdpbjMyIgotIU1FU1NBR0UgCi0hTUVTU0FHRSBGgXIgZGllIEtvbmZpZ3VyYXRpb24gc3RlaGVuIHp1ciBBdXN3YWhsOgotIU1FU1NBR0UgCi0hTUVTU0FHRSAianBlZ3RyYW4gLSBXaW4zMiIgKGJhc2llcmVuZCBhdWYgICJXaW4zMiAoeDg2KSBDb25zb2xlIEFwcGxpY2F0aW9uIikKLSFNRVNTQUdFIAotCi0jIEJlZ2luIFByb2plY3QKLSMgUFJPUCBBbGxvd1BlckNvbmZpZ0RlcGVuZGVuY2llcyAwCi0jIFBST1AgU2NjX1Byb2pOYW1lICIiCi0jIFBST1AgU2NjX0xvY2FsUGF0aCAiIgotQ1BQPWNsLmV4ZQotUlNDPXJjLmV4ZQotIyBQUk9QIEJBU0UgVXNlX01GQyAwCi0jIFBST1AgQkFTRSBVc2VfRGVidWdfTGlicmFyaWVzIDAKLSMgUFJPUCBCQVNFIE91dHB1dF9EaXIgIi5canBlZ3RyYW5cUmVsZWFzZSIKLSMgUFJPUCBCQVNFIEludGVybWVkaWF0ZV9EaXIgIi5canBlZ3RyYW5cUmVsZWFzZSIKLSMgUFJPUCBCQVNFIFRhcmdldF9EaXIgIi5canBlZ3RyYW4iCi0jIFBST1AgVXNlX01GQyAwCi0jIFBST1AgVXNlX0RlYnVnX0xpYnJhcmllcyAwCi0jIFBST1AgT3V0cHV0X0RpciAiLlxqcGVndHJhblxSZWxlYXNlIgotIyBQUk9QIEludGVybWVkaWF0ZV9EaXIgIi5canBlZ3RyYW5cUmVsZWFzZSIKLSMgUFJPUCBJZ25vcmVfRXhwb3J0X0xpYiAwCi0jIFBST1AgVGFyZ2V0X0RpciAiLlxqcGVndHJhbiIKLSMgQUREIEJBU0UgQ1BQIC9ub2xvZ28gL1czIC9HWCAvTzIgL0QgIldJTjMyIiAvRCAiTkRFQlVHIiAvRCAiX0NPTlNPTEUiIC9ZWCAvYwotIyBBREQgQ1BQIC9ub2xvZ28gL0c2IC9NVCAvVzMgL0dYIC9PeCAvT2EgL09iMiAvRCAiV0lOMzIiIC9EICJOREVCVUciIC9EICJfQ09OU09MRSIgL1lYIC9GRCAvYwotIyBBREQgQkFTRSBSU0MgL2wgMHg0MDkgL2QgIk5ERUJVRyIKLSMgQUREIFJTQyAvbCAweDQwOSAvZCAiTkRFQlVHIgotQlNDMzI9YnNjbWFrZS5leGUKLSMgQUREIEJBU0UgQlNDMzIgL25vbG9nbwotIyBBREQgQlNDMzIgL25vbG9nbwotTElOSzMyPWxpbmsuZXhlCi0jIEFERCBCQVNFIExJTkszMiBrZXJuZWwzMi5saWIgdXNlcjMyLmxpYiBnZGkzMi5saWIgd2luc3Bvb2wubGliIGNvbWRsZzMyLmxpYiBhZHZhcGkzMi5saWIgc2hlbGwzMi5saWIgb2xlMzIubGliIG9sZWF1dDMyLmxpYiB1dWlkLmxpYiBvZGJjMzIubGliIG9kYmNjcDMyLmxpYiAvbm9sb2dvIC9zdWJzeXN0ZW06Y29uc29sZSAvbWFjaGluZTpJMzg2Ci0jIEFERCBMSU5LMzIgUmVsZWFzZVxqcGVnLmxpYiBrZXJuZWwzMi5saWIgdXNlcjMyLmxpYiBnZGkzMi5saWIgd2luc3Bvb2wubGliIGNvbWRsZzMyLmxpYiBhZHZhcGkzMi5saWIgc2hlbGwzMi5saWIgb2xlMzIubGliIG9sZWF1dDMyLmxpYiB1dWlkLmxpYiBvZGJjMzIubGliIG9kYmNjcDMyLmxpYiAvbm9sb2dvIC9zdWJzeXN0ZW06Y29uc29sZSAvbWFjaGluZTpJMzg2Ci0jIEJlZ2luIFRhcmdldAotCi0jIE5hbWUgImpwZWd0cmFuIC0gV2luMzIiCi0jIEJlZ2luIEdyb3VwICJRdWVsbGNvZGVkYXRlaWVuIgotCi0jIFBST1AgRGVmYXVsdF9GaWx0ZXIgImNwcDtjO2N4eDtyYztkZWY7cjtvZGw7aWRsO2hwajtiYXQ7Zm9yO2Y5MCIKLSMgQmVnaW4gU291cmNlIEZpbGUKLQotU09VUkNFPS5cY2RqcGVnLmMKLSMgRW5kIFNvdXJjZSBGaWxlCi0jIEJlZ2luIFNvdXJjZSBGaWxlCi0KLVNPVVJDRT0uXGpwZWd0cmFuLmMKLSMgRW5kIFNvdXJjZSBGaWxlCi0jIEJlZ2luIFNvdXJjZSBGaWxlCi0KLVNPVVJDRT0uXHJkc3dpdGNoLmMKLSMgRW5kIFNvdXJjZSBGaWxlCi0jIEJlZ2luIFNvdXJjZSBGaWxlCi0KLVNPVVJDRT0uXHRyYW5zdXBwLmMKLSMgRW5kIFNvdXJjZSBGaWxlCi0jIEVuZCBHcm91cAotIyBCZWdpbiBHcm91cCAiSGVhZGVyLURhdGVpZW4iCi0KLSMgUFJPUCBEZWZhdWx0X0ZpbHRlciAiaDtocHA7aHh4O2htO2lubDtmaTtmZCIKLSMgQmVnaW4gU291cmNlIEZpbGUKLQotU09VUkNFPS5cY2RlcnJvci5oCi0jIEVuZCBTb3VyY2UgRmlsZQotIyBCZWdpbiBTb3VyY2UgRmlsZQotCi1TT1VSQ0U9LlxjZGpwZWcuaAotIyBFbmQgU291cmNlIEZpbGUKLSMgQmVnaW4gU291cmNlIEZpbGUKLQotU09VUkNFPS5camNvbmZpZy5oCi0jIEVuZCBTb3VyY2UgRmlsZQotIyBCZWdpbiBTb3VyY2UgRmlsZQotCi1TT1VSQ0U9LlxqZXJyb3IuaAotIyBFbmQgU291cmNlIEZpbGUKLSMgQmVnaW4gU291cmNlIEZpbGUKLQotU09VUkNFPS5camluY2x1ZGUuaAotIyBFbmQgU291cmNlIEZpbGUKLSMgQmVnaW4gU291cmNlIEZpbGUKLQotU09VUkNFPS5cam1vcmVjZmcuaAotIyBFbmQgU291cmNlIEZpbGUKLSMgQmVnaW4gU291cmNlIEZpbGUKLQotU09VUkNFPS5canBlZ2ludC5oCi0jIEVuZCBTb3VyY2UgRmlsZQotIyBCZWdpbiBTb3VyY2UgRmlsZQotCi1TT1VSQ0U9LlxqcGVnbGliLmgKLSMgRW5kIFNvdXJjZSBGaWxlCi0jIEJlZ2luIFNvdXJjZSBGaWxlCi0KLVNPVVJDRT0uXGp2ZXJzaW9uLmgKLSMgRW5kIFNvdXJjZSBGaWxlCi0jIEJlZ2luIFNvdXJjZSBGaWxlCi0KLVNPVVJDRT0uXHRyYW5zdXBwLmgKLSMgRW5kIFNvdXJjZSBGaWxlCi0jIEVuZCBHcm91cAotIyBCZWdpbiBHcm91cCAiUmVzc291cmNlbmRhdGVpZW4iCi0KLSMgUFJPUCBEZWZhdWx0X0ZpbHRlciAiaWNvO2N1cjtibXA7ZGxnO3JjMjtyY3Q7YmluO2NudDtydGY7Z2lmO2pwZztqcGVnO2pwZSIKLSMgRW5kIEdyb3VwCi0jIEVuZCBUYXJnZXQKLSMgRW5kIFByb2plY3QKZGlmZiAtLWdpdCBhL21ha2V0ZmlsLnYxMCBiL21ha2V0ZmlsLnYxMApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZmFlMDA5NC4uMDAwMDAwMAotLS0gYS9tYWtldGZpbC52MTAKKysrIC9kZXYvbnVsbApAQCAtMSw2MyArMCwwIEBACi2Lr6g8P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJ1dGYtOCI/PgotPFByb2plY3QgVG9vbHNWZXJzaW9uPSI0LjAiIHhtbG5zPSJodHRwOi8vc2NoZW1hcy5taWNyb3NvZnQuY29tL2RldmVsb3Blci9tc2J1aWxkLzIwMDMiPgotICA8SXRlbUdyb3VwPgotICAgIDxGaWx0ZXIgSW5jbHVkZT0iU291cmNlIEZpbGVzIj4KLSAgICAgIDxVbmlxdWVJZGVudGlmaWVyPns0RkM3MzdGMS1DN0E1LTQzNzYtQTA2Ni0yQTMyRDc1MkEyRkZ9PC9VbmlxdWVJZGVudGlmaWVyPgotICAgICAgPEV4dGVuc2lvbnM+Y3BwO2M7Y2M7Y3h4O2RlZjtvZGw7aWRsO2hwajtiYXQ7YXNtO2FzbXg8L0V4dGVuc2lvbnM+Ci0gICAgPC9GaWx0ZXI+Ci0gICAgPEZpbHRlciBJbmNsdWRlPSJIZWFkZXIgRmlsZXMiPgotICAgICAgPFVuaXF1ZUlkZW50aWZpZXI+ezkzOTk1MzgwLTg5QkQtNGIwNC04OEVCLTYyNUZCRTUyRUJGQn08L1VuaXF1ZUlkZW50aWZpZXI+Ci0gICAgICA8RXh0ZW5zaW9ucz5oO2hwcDtoeHg7aG07aW5sO2luYzt4c2Q8L0V4dGVuc2lvbnM+Ci0gICAgPC9GaWx0ZXI+Ci0gICAgPEZpbHRlciBJbmNsdWRlPSJSZXNvdXJjZSBGaWxlcyI+Ci0gICAgICA8VW5pcXVlSWRlbnRpZmllcj57NjdEQTZBQjYtRjgwMC00YzA4LThCN0EtODNCQjEyMUFBRDAxfTwvVW5pcXVlSWRlbnRpZmllcj4KLSAgICAgIDxFeHRlbnNpb25zPnJjO2ljbztjdXI7Ym1wO2RsZztyYzI7cmN0O2JpbjtyZ3M7Z2lmO2pwZztqcGVnO2pwZTtyZXN4O3RpZmY7dGlmO3BuZzt3YXY7bWZjcmliYm9uLW1zPC9FeHRlbnNpb25zPgotICAgIDwvRmlsdGVyPgotICA8L0l0ZW1Hcm91cD4KLSAgPEl0ZW1Hcm91cD4KLSAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9ImNkZXJyb3IuaCI+Ci0gICAgICA8RmlsdGVyPkhlYWRlciBGaWxlczwvRmlsdGVyPgotICAgIDwvQ2xJbmNsdWRlPgotICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iY2RqcGVnLmgiPgotICAgICAgPEZpbHRlcj5IZWFkZXIgRmlsZXM8L0ZpbHRlcj4KLSAgICA8L0NsSW5jbHVkZT4KLSAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Impjb25maWcuaCI+Ci0gICAgICA8RmlsdGVyPkhlYWRlciBGaWxlczwvRmlsdGVyPgotICAgIDwvQ2xJbmNsdWRlPgotICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iamVycm9yLmgiPgotICAgICAgPEZpbHRlcj5IZWFkZXIgRmlsZXM8L0ZpbHRlcj4KLSAgICA8L0NsSW5jbHVkZT4KLSAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9ImppbmNsdWRlLmgiPgotICAgICAgPEZpbHRlcj5IZWFkZXIgRmlsZXM8L0ZpbHRlcj4KLSAgICA8L0NsSW5jbHVkZT4KLSAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Imptb3JlY2ZnLmgiPgotICAgICAgPEZpbHRlcj5IZWFkZXIgRmlsZXM8L0ZpbHRlcj4KLSAgICA8L0NsSW5jbHVkZT4KLSAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9ImpwZWdpbnQuaCI+Ci0gICAgICA8RmlsdGVyPkhlYWRlciBGaWxlczwvRmlsdGVyPgotICAgIDwvQ2xJbmNsdWRlPgotICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0ianBlZ2xpYi5oIj4KLSAgICAgIDxGaWx0ZXI+SGVhZGVyIEZpbGVzPC9GaWx0ZXI+Ci0gICAgPC9DbEluY2x1ZGU+Ci0gICAgPENsSW5jbHVkZSBJbmNsdWRlPSJqdmVyc2lvbi5oIj4KLSAgICAgIDxGaWx0ZXI+SGVhZGVyIEZpbGVzPC9GaWx0ZXI+Ci0gICAgPC9DbEluY2x1ZGU+Ci0gICAgPENsSW5jbHVkZSBJbmNsdWRlPSJ0cmFuc3VwcC5oIj4KLSAgICAgIDxGaWx0ZXI+SGVhZGVyIEZpbGVzPC9GaWx0ZXI+Ci0gICAgPC9DbEluY2x1ZGU+Ci0gIDwvSXRlbUdyb3VwPgotICA8SXRlbUdyb3VwPgotICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iY2RqcGVnLmMiPgotICAgICAgPEZpbHRlcj5Tb3VyY2UgRmlsZXM8L0ZpbHRlcj4KLSAgICA8L0NsQ29tcGlsZT4KLSAgICA8Q2xDb21waWxlIEluY2x1ZGU9ImpwZWd0cmFuLmMiPgotICAgICAgPEZpbHRlcj5Tb3VyY2UgRmlsZXM8L0ZpbHRlcj4KLSAgICA8L0NsQ29tcGlsZT4KLSAgICA8Q2xDb21waWxlIEluY2x1ZGU9InJkc3dpdGNoLmMiPgotICAgICAgPEZpbHRlcj5Tb3VyY2UgRmlsZXM8L0ZpbHRlcj4KLSAgICA8L0NsQ29tcGlsZT4KLSAgICA8Q2xDb21waWxlIEluY2x1ZGU9InRyYW5zdXBwLmMiPgotICAgICAgPEZpbHRlcj5Tb3VyY2UgRmlsZXM8L0ZpbHRlcj4KLSAgICA8L0NsQ29tcGlsZT4KLSAgPC9JdGVtR3JvdXA+Ci08L1Byb2plY3Q+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvbWFrZXRtYWsudmM2IGIvbWFrZXRtYWsudmM2CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhMGRlMzhjLi4wMDAwMDAwCi0tLSBhL21ha2V0bWFrLnZjNgorKysgL2Rldi9udWxsCkBAIC0xLDEzMSArMCwwIEBACi0jIE1pY3Jvc29mdCBEZXZlbG9wZXIgU3R1ZGlvIEdlbmVyYXRlZCBOTUFLRSBGaWxlLCBCYXNlZCBvbiBqcGVndHJhbi5kc3AKLSFJRiAiJChDRkcpIiA9PSAiIgotQ0ZHPWpwZWd0cmFuIC0gV2luMzIKLSFNRVNTQUdFIEtlaW5lIEtvbmZpZ3VyYXRpb24gYW5nZWdlYmVuLiBqcGVndHJhbiAtIFdpbjMyIHdpcmQgYWxzIFN0YW5kYXJkIHZlcndlbmRldC4KLSFFTkRJRiAKLQotIUlGICIkKENGRykiICE9ICJqcGVndHJhbiAtIFdpbjMyIgotIU1FU1NBR0UgVW5n/Gx0aWdlIEtvbmZpZ3VyYXRpb24gIiQoQ0ZHKSIgYW5nZWdlYmVuLgotIU1FU1NBR0UgU2llIGv2bm5lbiBiZWltIEF1c2b8aHJlbiB2b24gTk1BS0UgZWluZSBLb25maWd1cmF0aW9uIGFuZ2ViZW4KLSFNRVNTQUdFIGR1cmNoIERlZmluaWVyZW4gZGVzIE1ha3JvcyBDRkcgaW4gZGVyIEJlZmVobHN6ZWlsZS4gWnVtIEJlaXNwaWVsOgotIU1FU1NBR0UgCi0hTUVTU0FHRSBOTUFLRSAvZiAianBlZ3RyYW4ubWFrIiBDRkc9ImpwZWd0cmFuIC0gV2luMzIiCi0hTUVTU0FHRSAKLSFNRVNTQUdFIEb8ciBkaWUgS29uZmlndXJhdGlvbiBzdGVoZW4genVyIEF1c3dhaGw6Ci0hTUVTU0FHRSAKLSFNRVNTQUdFICJqcGVndHJhbiAtIFdpbjMyIiAoYmFzaWVyZW5kIGF1ZiAgIldpbjMyICh4ODYpIENvbnNvbGUgQXBwbGljYXRpb24iKQotIU1FU1NBR0UgCi0hRVJST1IgRWluZSB1bmf8bHRpZ2UgS29uZmlndXJhdGlvbiB3dXJkZSBhbmdlZ2ViZW4uCi0hRU5ESUYgCi0KLSFJRiAiJChPUykiID09ICJXaW5kb3dzX05UIgotTlVMTD0KLSFFTFNFIAotTlVMTD1udWwKLSFFTkRJRiAKLQotQ1BQPWNsLmV4ZQotUlNDPXJjLmV4ZQotT1VURElSPS5canBlZ3RyYW5cUmVsZWFzZQotSU5URElSPS5canBlZ3RyYW5cUmVsZWFzZQotIyBCZWdpbiBDdXN0b20gTWFjcm9zCi1PdXREaXI9LlxqcGVndHJhblxSZWxlYXNlCi0jIEVuZCBDdXN0b20gTWFjcm9zCi0KLUFMTCA6ICIkKE9VVERJUilcanBlZ3RyYW4uZXhlIgotCi0KLUNMRUFOIDoKLQktQGVyYXNlICIkKElOVERJUilcY2RqcGVnLm9iaiIKLQktQGVyYXNlICIkKElOVERJUilcanBlZ3RyYW4ub2JqIgotCS1AZXJhc2UgIiQoSU5URElSKVxyZHN3aXRjaC5vYmoiCi0JLUBlcmFzZSAiJChJTlRESVIpXHRyYW5zdXBwLm9iaiIKLQktQGVyYXNlICIkKElOVERJUilcdmM2MC5pZGIiCi0JLUBlcmFzZSAiJChPVVRESVIpXGpwZWd0cmFuLmV4ZSIKLQotIiQoT1VURElSKSIgOgotICAgIGlmIG5vdCBleGlzdCAiJChPVVRESVIpLyQoTlVMTCkiIG1rZGlyICIkKE9VVERJUikiCi0KLUJTQzMyPWJzY21ha2UuZXhlCi1CU0MzMl9GTEFHUz0vbm9sb2dvIC9vIiQoT1VURElSKVxqcGVndHJhbi5ic2MiIAotQlNDMzJfU0JSUz0gXAotCQotTElOSzMyPWxpbmsuZXhlCi1MSU5LMzJfRkxBR1M9UmVsZWFzZVxqcGVnLmxpYiBrZXJuZWwzMi5saWIgdXNlcjMyLmxpYiBnZGkzMi5saWIgd2luc3Bvb2wubGliIGNvbWRsZzMyLmxpYiBhZHZhcGkzMi5saWIgc2hlbGwzMi5saWIgb2xlMzIubGliIG9sZWF1dDMyLmxpYiB1dWlkLmxpYiBvZGJjMzIubGliIG9kYmNjcDMyLmxpYiAvbm9sb2dvIC9zdWJzeXN0ZW06Y29uc29sZSAvaW5jcmVtZW50YWw6bm8gL3BkYjoiJChPVVRESVIpXGpwZWd0cmFuLnBkYiIgL21hY2hpbmU6STM4NiAvb3V0OiIkKE9VVERJUilcanBlZ3RyYW4uZXhlIiAKLUxJTkszMl9PQkpTPSBcCi0JIiQoSU5URElSKVxjZGpwZWcub2JqIiBcCi0JIiQoSU5URElSKVxqcGVndHJhbi5vYmoiIFwKLQkiJChJTlRESVIpXHJkc3dpdGNoLm9iaiIgXAotCSIkKElOVERJUilcdHJhbnN1cHAub2JqIgotCi0iJChPVVRESVIpXGpwZWd0cmFuLmV4ZSIgOiAiJChPVVRESVIpIiAkKERFRl9GSUxFKSAkKExJTkszMl9PQkpTKQotICAgICQoTElOSzMyKSBAPDwKLSAgJChMSU5LMzJfRkxBR1MpICQoTElOSzMyX09CSlMpCi08PAotCi1DUFBfUFJPSj0vbm9sb2dvIC9HNiAvTVQgL1czIC9HWCAvT3ggL09hIC9PYjIgL0QgIldJTjMyIiAvRCAiTkRFQlVHIiAvRCAiX0NPTlNPTEUiIC9GcCIkKElOVERJUilcanBlZ3RyYW4ucGNoIiAvWVggL0ZvIiQoSU5URElSKVxcIiAvRmQiJChJTlRESVIpXFwiIC9GRCAvYyAKLQotLmN7JChJTlRESVIpfS5vYmo6OgotICAgJChDUFApIEA8PAotICAgJChDUFBfUFJPSikgJDwgCi08PAotCi0uY3BweyQoSU5URElSKX0ub2JqOjoKLSAgICQoQ1BQKSBAPDwKLSAgICQoQ1BQX1BST0opICQ8IAotPDwKLQotLmN4eHskKElOVERJUil9Lm9iajo6Ci0gICAkKENQUCkgQDw8Ci0gICAkKENQUF9QUk9KKSAkPCAKLTw8Ci0KLS5jeyQoSU5URElSKX0uc2JyOjoKLSAgICQoQ1BQKSBAPDwKLSAgICQoQ1BQX1BST0opICQ8IAotPDwKLQotLmNwcHskKElOVERJUil9LnNicjo6Ci0gICAkKENQUCkgQDw8Ci0gICAkKENQUF9QUk9KKSAkPCAKLTw8Ci0KLS5jeHh7JChJTlRESVIpfS5zYnI6OgotICAgJChDUFApIEA8PAotICAgJChDUFBfUFJPSikgJDwgCi08PAotCi0KLSFJRiAiJChOT19FWFRFUk5BTF9ERVBTKSIgIT0gIjEiCi0hSUYgRVhJU1RTKCJqcGVndHJhbi5kZXAiKQotIUlOQ0xVREUgImpwZWd0cmFuLmRlcCIKLSFFTFNFIAotIU1FU1NBR0UgV2FybmluZzogY2Fubm90IGZpbmQgImpwZWd0cmFuLmRlcCIKLSFFTkRJRiAKLSFFTkRJRiAKLQotCi0hSUYgIiQoQ0ZHKSIgPT0gImpwZWd0cmFuIC0gV2luMzIiCi1TT1VSQ0U9LlxjZGpwZWcuYwotCi0iJChJTlRESVIpXGNkanBlZy5vYmoiIDogJChTT1VSQ0UpICIkKElOVERJUikiCi0KLQotU09VUkNFPS5canBlZ3RyYW4uYwotCi0iJChJTlRESVIpXGpwZWd0cmFuLm9iaiIgOiAkKFNPVVJDRSkgIiQoSU5URElSKSIKLQotCi1TT1VSQ0U9LlxyZHN3aXRjaC5jCi0KLSIkKElOVERJUilccmRzd2l0Y2gub2JqIiA6ICQoU09VUkNFKSAiJChJTlRESVIpIgotCi0KLVNPVVJDRT0uXHRyYW5zdXBwLmMKLQotIiQoSU5URElSKVx0cmFuc3VwcC5vYmoiIDogJChTT1VSQ0UpICIkKElOVERJUikiCi0KLQotCi0hRU5ESUYgCi0KZGlmZiAtLWdpdCBhL21ha2V0dmN4LnYxMCBiL21ha2V0dmN4LnYxMApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZTJiNGVhMy4uMDAwMDAwMAotLS0gYS9tYWtldHZjeC52MTAKKysrIC9kZXYvbnVsbApAQCAtMSw3NCArMCwwIEBACi2Lr6g8P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJ1dGYtOCI/PgotPFByb2plY3QgRGVmYXVsdFRhcmdldHM9IkJ1aWxkIiBUb29sc1ZlcnNpb249IjQuMCIgeG1sbnM9Imh0dHA6Ly9zY2hlbWFzLm1pY3Jvc29mdC5jb20vZGV2ZWxvcGVyL21zYnVpbGQvMjAwMyI+Ci0gIDxJdGVtR3JvdXAgTGFiZWw9IlByb2plY3RDb25maWd1cmF0aW9ucyI+Ci0gICAgPFByb2plY3RDb25maWd1cmF0aW9uIEluY2x1ZGU9IlJlbGVhc2V8V2luMzIiPgotICAgICAgPENvbmZpZ3VyYXRpb24+UmVsZWFzZTwvQ29uZmlndXJhdGlvbj4KLSAgICAgIDxQbGF0Zm9ybT5XaW4zMjwvUGxhdGZvcm0+Ci0gICAgPC9Qcm9qZWN0Q29uZmlndXJhdGlvbj4KLSAgPC9JdGVtR3JvdXA+Ci0gIDxQcm9wZXJ0eUdyb3VwIExhYmVsPSJHbG9iYWxzIj4KLSAgICA8UHJvamVjdEd1aWQ+ezAyNUJBQzUwLTUxQjUtNEZGRS1CQzQ3LTNGOTIwQkI0MDQ3RX08L1Byb2plY3RHdWlkPgotICAgIDxLZXl3b3JkPldpbjMyUHJvajwvS2V5d29yZD4KLSAgICA8Um9vdE5hbWVzcGFjZT5qcGVndHJhbjwvUm9vdE5hbWVzcGFjZT4KLSAgPC9Qcm9wZXJ0eUdyb3VwPgotICA8SW1wb3J0IFByb2plY3Q9IiQoVkNUYXJnZXRzUGF0aClcTWljcm9zb2Z0LkNwcC5EZWZhdWx0LnByb3BzIiAvPgotICA8UHJvcGVydHlHcm91cCBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J1JlbGVhc2V8V2luMzInIiBMYWJlbD0iQ29uZmlndXJhdGlvbiI+Ci0gICAgPENvbmZpZ3VyYXRpb25UeXBlPkFwcGxpY2F0aW9uPC9Db25maWd1cmF0aW9uVHlwZT4KLSAgICA8VXNlRGVidWdMaWJyYXJpZXM+ZmFsc2U8L1VzZURlYnVnTGlicmFyaWVzPgotICAgIDxXaG9sZVByb2dyYW1PcHRpbWl6YXRpb24+dHJ1ZTwvV2hvbGVQcm9ncmFtT3B0aW1pemF0aW9uPgotICAgIDxDaGFyYWN0ZXJTZXQ+VW5pY29kZTwvQ2hhcmFjdGVyU2V0PgotICA8L1Byb3BlcnR5R3JvdXA+Ci0gIDxJbXBvcnQgUHJvamVjdD0iJChWQ1RhcmdldHNQYXRoKVxNaWNyb3NvZnQuQ3BwLnByb3BzIiAvPgotICA8SW1wb3J0R3JvdXAgTGFiZWw9IkV4dGVuc2lvblNldHRpbmdzIj4KLSAgPC9JbXBvcnRHcm91cD4KLSAgPEltcG9ydEdyb3VwIExhYmVsPSJQcm9wZXJ0eVNoZWV0cyIgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdSZWxlYXNlfFdpbjMyJyI+Ci0gICAgPEltcG9ydCBQcm9qZWN0PSIkKFVzZXJSb290RGlyKVxNaWNyb3NvZnQuQ3BwLiQoUGxhdGZvcm0pLnVzZXIucHJvcHMiIENvbmRpdGlvbj0iZXhpc3RzKCckKFVzZXJSb290RGlyKVxNaWNyb3NvZnQuQ3BwLiQoUGxhdGZvcm0pLnVzZXIucHJvcHMnKSIgTGFiZWw9IkxvY2FsQXBwRGF0YVBsYXRmb3JtIiAvPgotICA8L0ltcG9ydEdyb3VwPgotICA8UHJvcGVydHlHcm91cCBMYWJlbD0iVXNlck1hY3JvcyIgLz4KLSAgPFByb3BlcnR5R3JvdXAgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdSZWxlYXNlfFdpbjMyJyI+Ci0gICAgPExpbmtJbmNyZW1lbnRhbD5mYWxzZTwvTGlua0luY3JlbWVudGFsPgotICAgIDxPdXREaXI+JChQcm9qZWN0TmFtZSlcJChDb25maWd1cmF0aW9uKVw8L091dERpcj4KLSAgICA8SW50RGlyPiQoUHJvamVjdE5hbWUpXCQoQ29uZmlndXJhdGlvbilcPC9JbnREaXI+Ci0gIDwvUHJvcGVydHlHcm91cD4KLSAgPEl0ZW1EZWZpbml0aW9uR3JvdXAgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdSZWxlYXNlfFdpbjMyJyI+Ci0gICAgPENsQ29tcGlsZT4KLSAgICAgIDxXYXJuaW5nTGV2ZWw+TGV2ZWwzPC9XYXJuaW5nTGV2ZWw+Ci0gICAgICA8UHJlY29tcGlsZWRIZWFkZXI+Tm90VXNpbmc8L1ByZWNvbXBpbGVkSGVhZGVyPgotICAgICAgPE9wdGltaXphdGlvbj5GdWxsPC9PcHRpbWl6YXRpb24+Ci0gICAgICA8RnVuY3Rpb25MZXZlbExpbmtpbmc+dHJ1ZTwvRnVuY3Rpb25MZXZlbExpbmtpbmc+Ci0gICAgICA8SW50cmluc2ljRnVuY3Rpb25zPmZhbHNlPC9JbnRyaW5zaWNGdW5jdGlvbnM+Ci0gICAgICA8UHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM+V0lOMzI7TkRFQlVHO19DT05TT0xFO19DUlRfU0VDVVJFX05PX1dBUk5JTkdTPC9QcmVwcm9jZXNzb3JEZWZpbml0aW9ucz4KLSAgICAgIDxPbWl0RnJhbWVQb2ludGVycz50cnVlPC9PbWl0RnJhbWVQb2ludGVycz4KLSAgICAgIDxFbmFibGVGaWJlclNhZmVPcHRpbWl6YXRpb25zPnRydWU8L0VuYWJsZUZpYmVyU2FmZU9wdGltaXphdGlvbnM+Ci0gICAgICA8RGlzYWJsZVNwZWNpZmljV2FybmluZ3M+NDk5NjwvRGlzYWJsZVNwZWNpZmljV2FybmluZ3M+Ci0gICAgPC9DbENvbXBpbGU+Ci0gICAgPExpbms+Ci0gICAgICA8U3ViU3lzdGVtPkNvbnNvbGU8L1N1YlN5c3RlbT4KLSAgICAgIDxHZW5lcmF0ZURlYnVnSW5mb3JtYXRpb24+dHJ1ZTwvR2VuZXJhdGVEZWJ1Z0luZm9ybWF0aW9uPgotICAgICAgPEVuYWJsZUNPTURBVEZvbGRpbmc+dHJ1ZTwvRW5hYmxlQ09NREFURm9sZGluZz4KLSAgICAgIDxPcHRpbWl6ZVJlZmVyZW5jZXM+dHJ1ZTwvT3B0aW1pemVSZWZlcmVuY2VzPgotICAgICAgPEFkZGl0aW9uYWxEZXBlbmRlbmNpZXM+UmVsZWFzZVxqcGVnLmxpYjtrZXJuZWwzMi5saWI7dXNlcjMyLmxpYjtnZGkzMi5saWI7d2luc3Bvb2wubGliO2NvbWRsZzMyLmxpYjthZHZhcGkzMi5saWI7c2hlbGwzMi5saWI7b2xlMzIubGliO29sZWF1dDMyLmxpYjt1dWlkLmxpYjtvZGJjMzIubGliO29kYmNjcDMyLmxpYjslKEFkZGl0aW9uYWxEZXBlbmRlbmNpZXMpPC9BZGRpdGlvbmFsRGVwZW5kZW5jaWVzPgotICAgIDwvTGluaz4KLSAgPC9JdGVtRGVmaW5pdGlvbkdyb3VwPgotICA8SXRlbUdyb3VwPgotICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iY2RlcnJvci5oIiAvPgotICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iY2RqcGVnLmgiIC8+Ci0gICAgPENsSW5jbHVkZSBJbmNsdWRlPSJqY29uZmlnLmgiIC8+Ci0gICAgPENsSW5jbHVkZSBJbmNsdWRlPSJqZXJyb3IuaCIgLz4KLSAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9ImppbmNsdWRlLmgiIC8+Ci0gICAgPENsSW5jbHVkZSBJbmNsdWRlPSJqbW9yZWNmZy5oIiAvPgotICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0ianBlZ2ludC5oIiAvPgotICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0ianBlZ2xpYi5oIiAvPgotICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0ianZlcnNpb24uaCIgLz4KLSAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9InRyYW5zdXBwLmgiIC8+Ci0gIDwvSXRlbUdyb3VwPgotICA8SXRlbUdyb3VwPgotICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iY2RqcGVnLmMiIC8+Ci0gICAgPENsQ29tcGlsZSBJbmNsdWRlPSJqcGVndHJhbi5jIiAvPgotICAgIDxDbENvbXBpbGUgSW5jbHVkZT0icmRzd2l0Y2guYyIgLz4KLSAgICA8Q2xDb21waWxlIEluY2x1ZGU9InRyYW5zdXBwLmMiIC8+Ci0gIDwvSXRlbUdyb3VwPgotICA8SW1wb3J0IFByb2plY3Q9IiQoVkNUYXJnZXRzUGF0aClcTWljcm9zb2Z0LkNwcC50YXJnZXRzIiAvPgotICA8SW1wb3J0R3JvdXAgTGFiZWw9IkV4dGVuc2lvblRhcmdldHMiPgotICA8L0ltcG9ydEdyb3VwPgotPC9Qcm9qZWN0PgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL21ha2V3ZGVwLnZjNiBiL21ha2V3ZGVwLnZjNgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMTU5MjliZi4uMDAwMDAwMAotLS0gYS9tYWtld2RlcC52YzYKKysrIC9kZXYvbnVsbApAQCAtMSw2ICswLDAgQEAKLSMgTWljcm9zb2Z0IERldmVsb3BlciBTdHVkaW8gZXJzdGVsbHRlIEFiaIRuZ2lna2VpdHNkYXRlaSwgZWluYmV6b2dlbiB2b24gd3JqcGdjb20ubWFrCi0KLS5cd3JqcGdjb20uYyA6IFwKLQkiLlxqY29uZmlnLmgiXAotCSIuXGppbmNsdWRlLmgiXAotCQpkaWZmIC0tZ2l0IGEvbWFrZXdkc3AudmM2IGIvbWFrZXdkc3AudmM2CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyMDYzYjFhLi4wMDAwMDAwCi0tLSBhL21ha2V3ZHNwLnZjNgorKysgL2Rldi9udWxsCkBAIC0xLDc4ICswLDAgQEAKLSMgTWljcm9zb2Z0IERldmVsb3BlciBTdHVkaW8gUHJvamVjdCBGaWxlIC0gTmFtZT0id3JqcGdjb20iIC0gUGFja2FnZSBPd25lcj08ND4KLSMgTWljcm9zb2Z0IERldmVsb3BlciBTdHVkaW8gR2VuZXJhdGVkIEJ1aWxkIEZpbGUsIEZvcm1hdCBWZXJzaW9uIDYuMDAKLSMgKiogTklDSFQgQkVBUkJFSVRFTiAqKgotCi0jIFRBUkdUWVBFICJXaW4zMiAoeDg2KSBDb25zb2xlIEFwcGxpY2F0aW9uIiAweDAxMDMKLQotQ0ZHPXdyanBnY29tIC0gV2luMzIKLSFNRVNTQUdFIERpZXMgaXN0IGtlaW4gZ4FsdGlnZXMgTWFrZWZpbGUuIFp1bSBFcnN0ZWxsZW4gZGllc2VzIFByb2pla3RzIG1pdCBOTUFLRQotIU1FU1NBR0UgdmVyd2VuZGVuIFNpZSBkZW4gQmVmZWhsICJNYWtlZmlsZSBleHBvcnRpZXJlbiIgdW5kIGaBaHJlbiBTaWUgZGVuIEJlZmVobAotIU1FU1NBR0UgCi0hTUVTU0FHRSBOTUFLRSAvZiAid3JqcGdjb20ubWFrIi4KLSFNRVNTQUdFIAotIU1FU1NBR0UgU2llIGv3bm5lbiBiZWltIEF1c2aBaHJlbiB2b24gTk1BS0UgZWluZSBLb25maWd1cmF0aW9uIGFuZ2ViZW4KLSFNRVNTQUdFIGR1cmNoIERlZmluaWVyZW4gZGVzIE1ha3JvcyBDRkcgaW4gZGVyIEJlZmVobHN6ZWlsZS4gWnVtIEJlaXNwaWVsOgotIU1FU1NBR0UgCi0hTUVTU0FHRSBOTUFLRSAvZiAid3JqcGdjb20ubWFrIiBDRkc9IndyanBnY29tIC0gV2luMzIiCi0hTUVTU0FHRSAKLSFNRVNTQUdFIEaBciBkaWUgS29uZmlndXJhdGlvbiBzdGVoZW4genVyIEF1c3dhaGw6Ci0hTUVTU0FHRSAKLSFNRVNTQUdFICJ3cmpwZ2NvbSAtIFdpbjMyIiAoYmFzaWVyZW5kIGF1ZiAgIldpbjMyICh4ODYpIENvbnNvbGUgQXBwbGljYXRpb24iKQotIU1FU1NBR0UgCi0KLSMgQmVnaW4gUHJvamVjdAotIyBQUk9QIEFsbG93UGVyQ29uZmlnRGVwZW5kZW5jaWVzIDAKLSMgUFJPUCBTY2NfUHJvak5hbWUgIiIKLSMgUFJPUCBTY2NfTG9jYWxQYXRoICIiCi1DUFA9Y2wuZXhlCi1SU0M9cmMuZXhlCi0jIFBST1AgQkFTRSBVc2VfTUZDIDAKLSMgUFJPUCBCQVNFIFVzZV9EZWJ1Z19MaWJyYXJpZXMgMAotIyBQUk9QIEJBU0UgT3V0cHV0X0RpciAiLlx3cmpwZ2NvbVxSZWxlYXNlIgotIyBQUk9QIEJBU0UgSW50ZXJtZWRpYXRlX0RpciAiLlx3cmpwZ2NvbVxSZWxlYXNlIgotIyBQUk9QIEJBU0UgVGFyZ2V0X0RpciAiLlx3cmpwZ2NvbSIKLSMgUFJPUCBVc2VfTUZDIDAKLSMgUFJPUCBVc2VfRGVidWdfTGlicmFyaWVzIDAKLSMgUFJPUCBPdXRwdXRfRGlyICIuXHdyanBnY29tXFJlbGVhc2UiCi0jIFBST1AgSW50ZXJtZWRpYXRlX0RpciAiLlx3cmpwZ2NvbVxSZWxlYXNlIgotIyBQUk9QIElnbm9yZV9FeHBvcnRfTGliIDAKLSMgUFJPUCBUYXJnZXRfRGlyICIuXHdyanBnY29tIgotIyBBREQgQkFTRSBDUFAgL25vbG9nbyAvVzMgL0dYIC9PMiAvRCAiV0lOMzIiIC9EICJOREVCVUciIC9EICJfQ09OU09MRSIgL1lYIC9jCi0jIEFERCBDUFAgL25vbG9nbyAvRzYgL01UIC9XMyAvR1ggL094IC9PYSAvT2IyIC9EICJXSU4zMiIgL0QgIk5ERUJVRyIgL0QgIl9DT05TT0xFIiAvWVggL0ZEIC9jCi0jIEFERCBCQVNFIFJTQyAvbCAweDQwOSAvZCAiTkRFQlVHIgotIyBBREQgUlNDIC9sIDB4NDA5IC9kICJOREVCVUciCi1CU0MzMj1ic2NtYWtlLmV4ZQotIyBBREQgQkFTRSBCU0MzMiAvbm9sb2dvCi0jIEFERCBCU0MzMiAvbm9sb2dvCi1MSU5LMzI9bGluay5leGUKLSMgQUREIEJBU0UgTElOSzMyIGtlcm5lbDMyLmxpYiB1c2VyMzIubGliIGdkaTMyLmxpYiB3aW5zcG9vbC5saWIgY29tZGxnMzIubGliIGFkdmFwaTMyLmxpYiBzaGVsbDMyLmxpYiBvbGUzMi5saWIgb2xlYXV0MzIubGliIHV1aWQubGliIG9kYmMzMi5saWIgb2RiY2NwMzIubGliIC9ub2xvZ28gL3N1YnN5c3RlbTpjb25zb2xlIC9tYWNoaW5lOkkzODYKLSMgQUREIExJTkszMiBSZWxlYXNlXGpwZWcubGliIGtlcm5lbDMyLmxpYiB1c2VyMzIubGliIGdkaTMyLmxpYiB3aW5zcG9vbC5saWIgY29tZGxnMzIubGliIGFkdmFwaTMyLmxpYiBzaGVsbDMyLmxpYiBvbGUzMi5saWIgb2xlYXV0MzIubGliIHV1aWQubGliIG9kYmMzMi5saWIgb2RiY2NwMzIubGliIC9ub2xvZ28gL3N1YnN5c3RlbTpjb25zb2xlIC9tYWNoaW5lOkkzODYKLSMgQmVnaW4gVGFyZ2V0Ci0KLSMgTmFtZSAid3JqcGdjb20gLSBXaW4zMiIKLSMgQmVnaW4gR3JvdXAgIlF1ZWxsY29kZWRhdGVpZW4iCi0KLSMgUFJPUCBEZWZhdWx0X0ZpbHRlciAiY3BwO2M7Y3h4O3JjO2RlZjtyO29kbDtpZGw7aHBqO2JhdDtmb3I7ZjkwIgotIyBCZWdpbiBTb3VyY2UgRmlsZQotCi1TT1VSQ0U9Llx3cmpwZ2NvbS5jCi0jIEVuZCBTb3VyY2UgRmlsZQotIyBFbmQgR3JvdXAKLSMgQmVnaW4gR3JvdXAgIkhlYWRlci1EYXRlaWVuIgotCi0jIFBST1AgRGVmYXVsdF9GaWx0ZXIgImg7aHBwO2h4eDtobTtpbmw7Zmk7ZmQiCi0jIEJlZ2luIFNvdXJjZSBGaWxlCi0KLVNPVVJDRT0uXGpjb25maWcuaAotIyBFbmQgU291cmNlIEZpbGUKLSMgQmVnaW4gU291cmNlIEZpbGUKLQotU09VUkNFPS5camluY2x1ZGUuaAotIyBFbmQgU291cmNlIEZpbGUKLSMgRW5kIEdyb3VwCi0jIEJlZ2luIEdyb3VwICJSZXNzb3VyY2VuZGF0ZWllbiIKLQotIyBQUk9QIERlZmF1bHRfRmlsdGVyICJpY287Y3VyO2JtcDtkbGc7cmMyO3JjdDtiaW47Y250O3J0ZjtnaWY7anBnO2pwZWc7anBlIgotIyBFbmQgR3JvdXAKLSMgRW5kIFRhcmdldAotIyBFbmQgUHJvamVjdApkaWZmIC0tZ2l0IGEvbWFrZXdmaWwudjEwIGIvbWFrZXdmaWwudjEwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3MmM1ODU2Li4wMDAwMDAwCi0tLSBhL21ha2V3ZmlsLnYxMAorKysgL2Rldi9udWxsCkBAIC0xLDMwICswLDAgQEAKLYuvqDw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9InV0Zi04Ij8+Ci08UHJvamVjdCBUb29sc1ZlcnNpb249IjQuMCIgeG1sbnM9Imh0dHA6Ly9zY2hlbWFzLm1pY3Jvc29mdC5jb20vZGV2ZWxvcGVyL21zYnVpbGQvMjAwMyI+Ci0gIDxJdGVtR3JvdXA+Ci0gICAgPEZpbHRlciBJbmNsdWRlPSJTb3VyY2UgRmlsZXMiPgotICAgICAgPFVuaXF1ZUlkZW50aWZpZXI+ezRGQzczN0YxLUM3QTUtNDM3Ni1BMDY2LTJBMzJENzUyQTJGRn08L1VuaXF1ZUlkZW50aWZpZXI+Ci0gICAgICA8RXh0ZW5zaW9ucz5jcHA7YztjYztjeHg7ZGVmO29kbDtpZGw7aHBqO2JhdDthc207YXNteDwvRXh0ZW5zaW9ucz4KLSAgICA8L0ZpbHRlcj4KLSAgICA8RmlsdGVyIEluY2x1ZGU9IkhlYWRlciBGaWxlcyI+Ci0gICAgICA8VW5pcXVlSWRlbnRpZmllcj57OTM5OTUzODAtODlCRC00YjA0LTg4RUItNjI1RkJFNTJFQkZCfTwvVW5pcXVlSWRlbnRpZmllcj4KLSAgICAgIDxFeHRlbnNpb25zPmg7aHBwO2h4eDtobTtpbmw7aW5jO3hzZDwvRXh0ZW5zaW9ucz4KLSAgICA8L0ZpbHRlcj4KLSAgICA8RmlsdGVyIEluY2x1ZGU9IlJlc291cmNlIEZpbGVzIj4KLSAgICAgIDxVbmlxdWVJZGVudGlmaWVyPns2N0RBNkFCNi1GODAwLTRjMDgtOEI3QS04M0JCMTIxQUFEMDF9PC9VbmlxdWVJZGVudGlmaWVyPgotICAgICAgPEV4dGVuc2lvbnM+cmM7aWNvO2N1cjtibXA7ZGxnO3JjMjtyY3Q7YmluO3JncztnaWY7anBnO2pwZWc7anBlO3Jlc3g7dGlmZjt0aWY7cG5nO3dhdjttZmNyaWJib24tbXM8L0V4dGVuc2lvbnM+Ci0gICAgPC9GaWx0ZXI+Ci0gIDwvSXRlbUdyb3VwPgotICA8SXRlbUdyb3VwPgotICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iamNvbmZpZy5oIj4KLSAgICAgIDxGaWx0ZXI+SGVhZGVyIEZpbGVzPC9GaWx0ZXI+Ci0gICAgPC9DbEluY2x1ZGU+Ci0gICAgPENsSW5jbHVkZSBJbmNsdWRlPSJqaW5jbHVkZS5oIj4KLSAgICAgIDxGaWx0ZXI+SGVhZGVyIEZpbGVzPC9GaWx0ZXI+Ci0gICAgPC9DbEluY2x1ZGU+Ci0gIDwvSXRlbUdyb3VwPgotICA8SXRlbUdyb3VwPgotICAgIDxDbENvbXBpbGUgSW5jbHVkZT0id3JqcGdjb20uYyI+Ci0gICAgICA8RmlsdGVyPlNvdXJjZSBGaWxlczwvRmlsdGVyPgotICAgIDwvQ2xDb21waWxlPgotICA8L0l0ZW1Hcm91cD4KLTwvUHJvamVjdD4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9tYWtld21hay52YzYgYi9tYWtld21hay52YzYKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDIyYjkwODYuLjAwMDAwMDAKLS0tIGEvbWFrZXdtYWsudmM2CisrKyAvZGV2L251bGwKQEAgLTEsMTEwICswLDAgQEAKLSMgTWljcm9zb2Z0IERldmVsb3BlciBTdHVkaW8gR2VuZXJhdGVkIE5NQUtFIEZpbGUsIEJhc2VkIG9uIHdyanBnY29tLmRzcAotIUlGICIkKENGRykiID09ICIiCi1DRkc9d3JqcGdjb20gLSBXaW4zMgotIU1FU1NBR0UgS2VpbmUgS29uZmlndXJhdGlvbiBhbmdlZ2ViZW4uIHdyanBnY29tIC0gV2luMzIgd2lyZCBhbHMgU3RhbmRhcmQgdmVyd2VuZGV0LgotIUVORElGIAotCi0hSUYgIiQoQ0ZHKSIgIT0gIndyanBnY29tIC0gV2luMzIiCi0hTUVTU0FHRSBVbmf8bHRpZ2UgS29uZmlndXJhdGlvbiAiJChDRkcpIiBhbmdlZ2ViZW4uCi0hTUVTU0FHRSBTaWUga/ZubmVuIGJlaW0gQXVzZvxocmVuIHZvbiBOTUFLRSBlaW5lIEtvbmZpZ3VyYXRpb24gYW5nZWJlbgotIU1FU1NBR0UgZHVyY2ggRGVmaW5pZXJlbiBkZXMgTWFrcm9zIENGRyBpbiBkZXIgQmVmZWhsc3plaWxlLiBadW0gQmVpc3BpZWw6Ci0hTUVTU0FHRSAKLSFNRVNTQUdFIE5NQUtFIC9mICJ3cmpwZ2NvbS5tYWsiIENGRz0id3JqcGdjb20gLSBXaW4zMiIKLSFNRVNTQUdFIAotIU1FU1NBR0UgRvxyIGRpZSBLb25maWd1cmF0aW9uIHN0ZWhlbiB6dXIgQXVzd2FobDoKLSFNRVNTQUdFIAotIU1FU1NBR0UgIndyanBnY29tIC0gV2luMzIiIChiYXNpZXJlbmQgYXVmICAiV2luMzIgKHg4NikgQ29uc29sZSBBcHBsaWNhdGlvbiIpCi0hTUVTU0FHRSAKLSFFUlJPUiBFaW5lIHVuZ/xsdGlnZSBLb25maWd1cmF0aW9uIHd1cmRlIGFuZ2VnZWJlbi4KLSFFTkRJRiAKLQotIUlGICIkKE9TKSIgPT0gIldpbmRvd3NfTlQiCi1OVUxMPQotIUVMU0UgCi1OVUxMPW51bAotIUVORElGIAotCi1DUFA9Y2wuZXhlCi1SU0M9cmMuZXhlCi1PVVRESVI9Llx3cmpwZ2NvbVxSZWxlYXNlCi1JTlRESVI9Llx3cmpwZ2NvbVxSZWxlYXNlCi0jIEJlZ2luIEN1c3RvbSBNYWNyb3MKLU91dERpcj0uXHdyanBnY29tXFJlbGVhc2UKLSMgRW5kIEN1c3RvbSBNYWNyb3MKLQotQUxMIDogIiQoT1VURElSKVx3cmpwZ2NvbS5leGUiCi0KLQotQ0xFQU4gOgotCS1AZXJhc2UgIiQoSU5URElSKVx2YzYwLmlkYiIKLQktQGVyYXNlICIkKElOVERJUilcd3JqcGdjb20ub2JqIgotCS1AZXJhc2UgIiQoT1VURElSKVx3cmpwZ2NvbS5leGUiCi0KLSIkKE9VVERJUikiIDoKLSAgICBpZiBub3QgZXhpc3QgIiQoT1VURElSKS8kKE5VTEwpIiBta2RpciAiJChPVVRESVIpIgotCi1CU0MzMj1ic2NtYWtlLmV4ZQotQlNDMzJfRkxBR1M9L25vbG9nbyAvbyIkKE9VVERJUilcd3JqcGdjb20uYnNjIiAKLUJTQzMyX1NCUlM9IFwKLQkKLUxJTkszMj1saW5rLmV4ZQotTElOSzMyX0ZMQUdTPVJlbGVhc2VcanBlZy5saWIga2VybmVsMzIubGliIHVzZXIzMi5saWIgZ2RpMzIubGliIHdpbnNwb29sLmxpYiBjb21kbGczMi5saWIgYWR2YXBpMzIubGliIHNoZWxsMzIubGliIG9sZTMyLmxpYiBvbGVhdXQzMi5saWIgdXVpZC5saWIgb2RiYzMyLmxpYiBvZGJjY3AzMi5saWIgL25vbG9nbyAvc3Vic3lzdGVtOmNvbnNvbGUgL2luY3JlbWVudGFsOm5vIC9wZGI6IiQoT1VURElSKVx3cmpwZ2NvbS5wZGIiIC9tYWNoaW5lOkkzODYgL291dDoiJChPVVRESVIpXHdyanBnY29tLmV4ZSIgCi1MSU5LMzJfT0JKUz0gXAotCSIkKElOVERJUilcd3JqcGdjb20ub2JqIgotCi0iJChPVVRESVIpXHdyanBnY29tLmV4ZSIgOiAiJChPVVRESVIpIiAkKERFRl9GSUxFKSAkKExJTkszMl9PQkpTKQotICAgICQoTElOSzMyKSBAPDwKLSAgJChMSU5LMzJfRkxBR1MpICQoTElOSzMyX09CSlMpCi08PAotCi1DUFBfUFJPSj0vbm9sb2dvIC9HNiAvTVQgL1czIC9HWCAvT3ggL09hIC9PYjIgL0QgIldJTjMyIiAvRCAiTkRFQlVHIiAvRCAiX0NPTlNPTEUiIC9GcCIkKElOVERJUilcd3JqcGdjb20ucGNoIiAvWVggL0ZvIiQoSU5URElSKVxcIiAvRmQiJChJTlRESVIpXFwiIC9GRCAvYyAKLQotLmN7JChJTlRESVIpfS5vYmo6OgotICAgJChDUFApIEA8PAotICAgJChDUFBfUFJPSikgJDwgCi08PAotCi0uY3BweyQoSU5URElSKX0ub2JqOjoKLSAgICQoQ1BQKSBAPDwKLSAgICQoQ1BQX1BST0opICQ8IAotPDwKLQotLmN4eHskKElOVERJUil9Lm9iajo6Ci0gICAkKENQUCkgQDw8Ci0gICAkKENQUF9QUk9KKSAkPCAKLTw8Ci0KLS5jeyQoSU5URElSKX0uc2JyOjoKLSAgICQoQ1BQKSBAPDwKLSAgICQoQ1BQX1BST0opICQ8IAotPDwKLQotLmNwcHskKElOVERJUil9LnNicjo6Ci0gICAkKENQUCkgQDw8Ci0gICAkKENQUF9QUk9KKSAkPCAKLTw8Ci0KLS5jeHh7JChJTlRESVIpfS5zYnI6OgotICAgJChDUFApIEA8PAotICAgJChDUFBfUFJPSikgJDwgCi08PAotCi0KLSFJRiAiJChOT19FWFRFUk5BTF9ERVBTKSIgIT0gIjEiCi0hSUYgRVhJU1RTKCJ3cmpwZ2NvbS5kZXAiKQotIUlOQ0xVREUgIndyanBnY29tLmRlcCIKLSFFTFNFIAotIU1FU1NBR0UgV2FybmluZzogY2Fubm90IGZpbmQgIndyanBnY29tLmRlcCIKLSFFTkRJRiAKLSFFTkRJRiAKLQotCi0hSUYgIiQoQ0ZHKSIgPT0gIndyanBnY29tIC0gV2luMzIiCi1TT1VSQ0U9Llx3cmpwZ2NvbS5jCi0KLSIkKElOVERJUilcd3JqcGdjb20ub2JqIiA6ICQoU09VUkNFKSAiJChJTlRESVIpIgotCi0KLQotIUVORElGIAotCmRpZmYgLS1naXQgYS9tYWtld3ZjeC52MTAgYi9tYWtld3ZjeC52MTAKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGU2YzU0NmEuLjAwMDAwMDAKLS0tIGEvbWFrZXd2Y3gudjEwCisrKyAvZGV2L251bGwKQEAgLTEsNjIgKzAsMCBAQAoti6+oPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz4KLTxQcm9qZWN0IERlZmF1bHRUYXJnZXRzPSJCdWlsZCIgVG9vbHNWZXJzaW9uPSI0LjAiIHhtbG5zPSJodHRwOi8vc2NoZW1hcy5taWNyb3NvZnQuY29tL2RldmVsb3Blci9tc2J1aWxkLzIwMDMiPgotICA8SXRlbUdyb3VwIExhYmVsPSJQcm9qZWN0Q29uZmlndXJhdGlvbnMiPgotICAgIDxQcm9qZWN0Q29uZmlndXJhdGlvbiBJbmNsdWRlPSJSZWxlYXNlfFdpbjMyIj4KLSAgICAgIDxDb25maWd1cmF0aW9uPlJlbGVhc2U8L0NvbmZpZ3VyYXRpb24+Ci0gICAgICA8UGxhdGZvcm0+V2luMzI8L1BsYXRmb3JtPgotICAgIDwvUHJvamVjdENvbmZpZ3VyYXRpb24+Ci0gIDwvSXRlbUdyb3VwPgotICA8UHJvcGVydHlHcm91cCBMYWJlbD0iR2xvYmFscyI+Ci0gICAgPFByb2plY3RHdWlkPntCNTcwNjVENC1ERERBLTQ2NjgtQkFGNS0yRDQ5MjcwQzk3M0N9PC9Qcm9qZWN0R3VpZD4KLSAgICA8S2V5d29yZD5XaW4zMlByb2o8L0tleXdvcmQ+Ci0gICAgPFJvb3ROYW1lc3BhY2U+d3JqcGdjb208L1Jvb3ROYW1lc3BhY2U+Ci0gIDwvUHJvcGVydHlHcm91cD4KLSAgPEltcG9ydCBQcm9qZWN0PSIkKFZDVGFyZ2V0c1BhdGgpXE1pY3Jvc29mdC5DcHAuRGVmYXVsdC5wcm9wcyIgLz4KLSAgPFByb3BlcnR5R3JvdXAgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdSZWxlYXNlfFdpbjMyJyIgTGFiZWw9IkNvbmZpZ3VyYXRpb24iPgotICAgIDxDb25maWd1cmF0aW9uVHlwZT5BcHBsaWNhdGlvbjwvQ29uZmlndXJhdGlvblR5cGU+Ci0gICAgPFVzZURlYnVnTGlicmFyaWVzPmZhbHNlPC9Vc2VEZWJ1Z0xpYnJhcmllcz4KLSAgICA8V2hvbGVQcm9ncmFtT3B0aW1pemF0aW9uPnRydWU8L1dob2xlUHJvZ3JhbU9wdGltaXphdGlvbj4KLSAgICA8Q2hhcmFjdGVyU2V0PlVuaWNvZGU8L0NoYXJhY3RlclNldD4KLSAgPC9Qcm9wZXJ0eUdyb3VwPgotICA8SW1wb3J0IFByb2plY3Q9IiQoVkNUYXJnZXRzUGF0aClcTWljcm9zb2Z0LkNwcC5wcm9wcyIgLz4KLSAgPEltcG9ydEdyb3VwIExhYmVsPSJFeHRlbnNpb25TZXR0aW5ncyI+Ci0gIDwvSW1wb3J0R3JvdXA+Ci0gIDxJbXBvcnRHcm91cCBMYWJlbD0iUHJvcGVydHlTaGVldHMiIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUmVsZWFzZXxXaW4zMiciPgotICAgIDxJbXBvcnQgUHJvamVjdD0iJChVc2VyUm9vdERpcilcTWljcm9zb2Z0LkNwcC4kKFBsYXRmb3JtKS51c2VyLnByb3BzIiBDb25kaXRpb249ImV4aXN0cygnJChVc2VyUm9vdERpcilcTWljcm9zb2Z0LkNwcC4kKFBsYXRmb3JtKS51c2VyLnByb3BzJykiIExhYmVsPSJMb2NhbEFwcERhdGFQbGF0Zm9ybSIgLz4KLSAgPC9JbXBvcnRHcm91cD4KLSAgPFByb3BlcnR5R3JvdXAgTGFiZWw9IlVzZXJNYWNyb3MiIC8+Ci0gIDxQcm9wZXJ0eUdyb3VwIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUmVsZWFzZXxXaW4zMiciPgotICAgIDxMaW5rSW5jcmVtZW50YWw+ZmFsc2U8L0xpbmtJbmNyZW1lbnRhbD4KLSAgICA8T3V0RGlyPiQoUHJvamVjdE5hbWUpXCQoQ29uZmlndXJhdGlvbilcPC9PdXREaXI+Ci0gICAgPEludERpcj4kKFByb2plY3ROYW1lKVwkKENvbmZpZ3VyYXRpb24pXDwvSW50RGlyPgotICA8L1Byb3BlcnR5R3JvdXA+Ci0gIDxJdGVtRGVmaW5pdGlvbkdyb3VwIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUmVsZWFzZXxXaW4zMiciPgotICAgIDxDbENvbXBpbGU+Ci0gICAgICA8V2FybmluZ0xldmVsPkxldmVsMzwvV2FybmluZ0xldmVsPgotICAgICAgPFByZWNvbXBpbGVkSGVhZGVyPk5vdFVzaW5nPC9QcmVjb21waWxlZEhlYWRlcj4KLSAgICAgIDxPcHRpbWl6YXRpb24+RnVsbDwvT3B0aW1pemF0aW9uPgotICAgICAgPEZ1bmN0aW9uTGV2ZWxMaW5raW5nPnRydWU8L0Z1bmN0aW9uTGV2ZWxMaW5raW5nPgotICAgICAgPEludHJpbnNpY0Z1bmN0aW9ucz5mYWxzZTwvSW50cmluc2ljRnVuY3Rpb25zPgotICAgICAgPFByZXByb2Nlc3NvckRlZmluaXRpb25zPldJTjMyO05ERUJVRztfQ09OU09MRTtfQ1JUX1NFQ1VSRV9OT19XQVJOSU5HUzwvUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM+Ci0gICAgICA8T21pdEZyYW1lUG9pbnRlcnM+dHJ1ZTwvT21pdEZyYW1lUG9pbnRlcnM+Ci0gICAgICA8RW5hYmxlRmliZXJTYWZlT3B0aW1pemF0aW9ucz50cnVlPC9FbmFibGVGaWJlclNhZmVPcHRpbWl6YXRpb25zPgotICAgICAgPERpc2FibGVTcGVjaWZpY1dhcm5pbmdzPjQ5OTY8L0Rpc2FibGVTcGVjaWZpY1dhcm5pbmdzPgotICAgIDwvQ2xDb21waWxlPgotICAgIDxMaW5rPgotICAgICAgPFN1YlN5c3RlbT5Db25zb2xlPC9TdWJTeXN0ZW0+Ci0gICAgICA8R2VuZXJhdGVEZWJ1Z0luZm9ybWF0aW9uPnRydWU8L0dlbmVyYXRlRGVidWdJbmZvcm1hdGlvbj4KLSAgICAgIDxFbmFibGVDT01EQVRGb2xkaW5nPnRydWU8L0VuYWJsZUNPTURBVEZvbGRpbmc+Ci0gICAgICA8T3B0aW1pemVSZWZlcmVuY2VzPnRydWU8L09wdGltaXplUmVmZXJlbmNlcz4KLSAgICA8L0xpbms+Ci0gIDwvSXRlbURlZmluaXRpb25Hcm91cD4KLSAgPEl0ZW1Hcm91cD4KLSAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Impjb25maWcuaCIgLz4KLSAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9ImppbmNsdWRlLmgiIC8+Ci0gIDwvSXRlbUdyb3VwPgotICA8SXRlbUdyb3VwPgotICAgIDxDbENvbXBpbGUgSW5jbHVkZT0id3JqcGdjb20uYyIgLz4KLSAgPC9JdGVtR3JvdXA+Ci0gIDxJbXBvcnQgUHJvamVjdD0iJChWQ1RhcmdldHNQYXRoKVxNaWNyb3NvZnQuQ3BwLnRhcmdldHMiIC8+Ci0gIDxJbXBvcnRHcm91cCBMYWJlbD0iRXh0ZW5zaW9uVGFyZ2V0cyI+Ci0gIDwvSW1wb3J0R3JvdXA+Ci08L1Byb2plY3Q+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvbWFrbGpwZWcuc3QgYi9tYWtsanBlZy5zdApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggY2MxYmEwMS4uMDAwMDAwMAotLS0gYS9tYWtsanBlZy5zdAorKysgL2Rldi9udWxsCkBAIC0xLDY4ICswLDAgQEAKLTsgUHJvamVjdCBmaWxlIGZvciBJbmRlcGVuZGVudCBKUEVHIEdyb3VwJ3Mgc29mdHdhcmUKLTsKLTsgVGhpcyBwcm9qZWN0IGZpbGUgaXMgZm9yIEF0YXJpIFNUL1NURS9UVCBzeXN0ZW1zIHVzaW5nIFB1cmUgQyBvciBUdXJibyBDLgotOyBUaGFua3MgdG8gRnJhbmsgTW9laGxlLCBCLiBTZXR6ZXBmYW5kdCwgYW5kIEd1aWRvIFZvbGxiZWRpbmcuCi07Ci07IFRvIHVzZSB0aGlzIGZpbGUsIHJlbmFtZSBpdCB0byBsaWJqcGVnLnByai4KLTsgUmVhZCBpbnN0YWxsYXRpb24gaW5zdHJ1Y3Rpb25zIGJlZm9yZSB0cnlpbmcgdG8gbWFrZSB0aGUgcHJvZ3JhbSEKLTsKLTsKLTsgICAgICAqICogKiBPdXRwdXQgZmlsZSAqICogKgotbGlianBlZy5saWIKLTsKLTsgKiAqICogQ09NUElMRVIgT1BUSU9OUyAqICogKiAgCi0uQ1stUF0gICAgICAgIDsgYWJzb2x1dGUgY2FsbHMKLS5DWy1NXSAgICAgICAgOyBhbmQgbm8gc3RyaW5nIG1lcmdpbmcsIGZvbGtzCi0uQ1stdy1jbG5dICAgIDsgbm8gImNvbnN0YW50IGlzIGxvbmciIHdhcm5pbmdzCi0uQ1stdy1wYXJdICAgIDsgbm8gInBhcmFtZXRlciB4eHh4IHVudXNlZCIKLS5DWy13LXJjaF0gICAgOyBubyAidW5yZWFjaGFibGUgY29kZSIKLS5DWy13c2lnXSAgICAgOyB3YXJuIGlmIHNpZ25pZmljYW50IGRpZ2l0cyBtYXkgYmUgbG9zdAotLkxbLUpdICAgICAgICA7IGxpbmsgbmV3IE9iai1mb3JtYXQgKHNvIHdlIGdldCBhIGxpYnJhcnkpCi09Ci07ICogKiAqICogTGlzdCBvZiBtb2R1bGVzICogKiAqICogCi1qYXJpY29tLmMJKGppbmNsdWRlLmgsamNvbmZpZy5oLGpwZWdsaWIuaCxqbW9yZWNmZy5oLGpwZWdpbnQuaCxqZXJyb3IuaCkKLWpjYXBpbWluLmMJKGppbmNsdWRlLmgsamNvbmZpZy5oLGpwZWdsaWIuaCxqbW9yZWNmZy5oLGpwZWdpbnQuaCxqZXJyb3IuaCkKLWpjYXBpc3RkLmMJKGppbmNsdWRlLmgsamNvbmZpZy5oLGpwZWdsaWIuaCxqbW9yZWNmZy5oLGpwZWdpbnQuaCxqZXJyb3IuaCkKLWpjYXJpdGguYwkoamluY2x1ZGUuaCxqY29uZmlnLmgsanBlZ2xpYi5oLGptb3JlY2ZnLmgsanBlZ2ludC5oLGplcnJvci5oKQotamNjb2VmY3QuYwkoamluY2x1ZGUuaCxqY29uZmlnLmgsanBlZ2xpYi5oLGptb3JlY2ZnLmgsanBlZ2ludC5oLGplcnJvci5oKQotamNjb2xvci5jCShqaW5jbHVkZS5oLGpjb25maWcuaCxqcGVnbGliLmgsam1vcmVjZmcuaCxqcGVnaW50LmgsamVycm9yLmgpCi1qY2RjdG1nci5jCShqaW5jbHVkZS5oLGpjb25maWcuaCxqcGVnbGliLmgsam1vcmVjZmcuaCxqcGVnaW50LmgsamVycm9yLmgsamRjdC5oKQotamNodWZmLmMJKGppbmNsdWRlLmgsamNvbmZpZy5oLGpwZWdsaWIuaCxqbW9yZWNmZy5oLGpwZWdpbnQuaCxqZXJyb3IuaCkKLWpjaW5pdC5jCShqaW5jbHVkZS5oLGpjb25maWcuaCxqcGVnbGliLmgsam1vcmVjZmcuaCxqcGVnaW50LmgsamVycm9yLmgpCi1qY21haW5jdC5jCShqaW5jbHVkZS5oLGpjb25maWcuaCxqcGVnbGliLmgsam1vcmVjZmcuaCxqcGVnaW50LmgsamVycm9yLmgpCi1qY21hcmtlci5jCShqaW5jbHVkZS5oLGpjb25maWcuaCxqcGVnbGliLmgsam1vcmVjZmcuaCxqcGVnaW50LmgsamVycm9yLmgpCi1qY21hc3Rlci5jCShqaW5jbHVkZS5oLGpjb25maWcuaCxqcGVnbGliLmgsam1vcmVjZmcuaCxqcGVnaW50LmgsamVycm9yLmgpCi1qY29tYXBpLmMJKGppbmNsdWRlLmgsamNvbmZpZy5oLGpwZWdsaWIuaCxqbW9yZWNmZy5oLGpwZWdpbnQuaCxqZXJyb3IuaCkKLWpjcGFyYW0uYwkoamluY2x1ZGUuaCxqY29uZmlnLmgsanBlZ2xpYi5oLGptb3JlY2ZnLmgsanBlZ2ludC5oLGplcnJvci5oKQotamNwcmVwY3QuYwkoamluY2x1ZGUuaCxqY29uZmlnLmgsanBlZ2xpYi5oLGptb3JlY2ZnLmgsanBlZ2ludC5oLGplcnJvci5oKQotamNzYW1wbGUuYwkoamluY2x1ZGUuaCxqY29uZmlnLmgsanBlZ2xpYi5oLGptb3JlY2ZnLmgsanBlZ2ludC5oLGplcnJvci5oKQotamN0cmFucy5jCShqaW5jbHVkZS5oLGpjb25maWcuaCxqcGVnbGliLmgsam1vcmVjZmcuaCxqcGVnaW50LmgsamVycm9yLmgpCi1qZGFwaW1pbi5jCShqaW5jbHVkZS5oLGpjb25maWcuaCxqcGVnbGliLmgsam1vcmVjZmcuaCxqcGVnaW50LmgsamVycm9yLmgpCi1qZGFwaXN0ZC5jCShqaW5jbHVkZS5oLGpjb25maWcuaCxqcGVnbGliLmgsam1vcmVjZmcuaCxqcGVnaW50LmgsamVycm9yLmgpCi1qZGFyaXRoLmMJKGppbmNsdWRlLmgsamNvbmZpZy5oLGpwZWdsaWIuaCxqbW9yZWNmZy5oLGpwZWdpbnQuaCxqZXJyb3IuaCkKLWpkYXRhZHN0LmMJKGppbmNsdWRlLmgsamNvbmZpZy5oLGpwZWdsaWIuaCxqbW9yZWNmZy5oLGplcnJvci5oKQotamRhdGFzcmMuYwkoamluY2x1ZGUuaCxqY29uZmlnLmgsanBlZ2xpYi5oLGptb3JlY2ZnLmgsamVycm9yLmgpCi1qZGNvZWZjdC5jCShqaW5jbHVkZS5oLGpjb25maWcuaCxqcGVnbGliLmgsam1vcmVjZmcuaCxqcGVnaW50LmgsamVycm9yLmgpCi1qZGNvbG9yLmMJKGppbmNsdWRlLmgsamNvbmZpZy5oLGpwZWdsaWIuaCxqbW9yZWNmZy5oLGpwZWdpbnQuaCxqZXJyb3IuaCkKLWpkZGN0bWdyLmMJKGppbmNsdWRlLmgsamNvbmZpZy5oLGpwZWdsaWIuaCxqbW9yZWNmZy5oLGpwZWdpbnQuaCxqZXJyb3IuaCxqZGN0LmgpCi1qZGh1ZmYuYwkoamluY2x1ZGUuaCxqY29uZmlnLmgsanBlZ2xpYi5oLGptb3JlY2ZnLmgsanBlZ2ludC5oLGplcnJvci5oKQotamRpbnB1dC5jCShqaW5jbHVkZS5oLGpjb25maWcuaCxqcGVnbGliLmgsam1vcmVjZmcuaCxqcGVnaW50LmgsamVycm9yLmgpCi1qZG1haW5jdC5jCShqaW5jbHVkZS5oLGpjb25maWcuaCxqcGVnbGliLmgsam1vcmVjZmcuaCxqcGVnaW50LmgsamVycm9yLmgpCi1qZG1hcmtlci5jCShqaW5jbHVkZS5oLGpjb25maWcuaCxqcGVnbGliLmgsam1vcmVjZmcuaCxqcGVnaW50LmgsamVycm9yLmgpCi1qZG1hc3Rlci5jCShqaW5jbHVkZS5oLGpjb25maWcuaCxqcGVnbGliLmgsam1vcmVjZmcuaCxqcGVnaW50LmgsamVycm9yLmgpCi1qZG1lcmdlLmMJKGppbmNsdWRlLmgsamNvbmZpZy5oLGpwZWdsaWIuaCxqbW9yZWNmZy5oLGpwZWdpbnQuaCxqZXJyb3IuaCkKLWpkcG9zdGN0LmMJKGppbmNsdWRlLmgsamNvbmZpZy5oLGpwZWdsaWIuaCxqbW9yZWNmZy5oLGpwZWdpbnQuaCxqZXJyb3IuaCkKLWpkc2FtcGxlLmMJKGppbmNsdWRlLmgsamNvbmZpZy5oLGpwZWdsaWIuaCxqbW9yZWNmZy5oLGpwZWdpbnQuaCxqZXJyb3IuaCkKLWpkdHJhbnMuYwkoamluY2x1ZGUuaCxqY29uZmlnLmgsanBlZ2xpYi5oLGptb3JlY2ZnLmgsanBlZ2ludC5oLGplcnJvci5oKQotamVycm9yLmMJKGppbmNsdWRlLmgsamNvbmZpZy5oLGpwZWdsaWIuaCxqbW9yZWNmZy5oLGp2ZXJzaW9uLmgsamVycm9yLmgpCi1qZmRjdGZsdC5jCShqaW5jbHVkZS5oLGpjb25maWcuaCxqcGVnbGliLmgsam1vcmVjZmcuaCxqcGVnaW50LmgsamVycm9yLmgsamRjdC5oKQotamZkY3Rmc3QuYwkoamluY2x1ZGUuaCxqY29uZmlnLmgsanBlZ2xpYi5oLGptb3JlY2ZnLmgsanBlZ2ludC5oLGplcnJvci5oLGpkY3QuaCkKLWpmZGN0aW50LmMJKGppbmNsdWRlLmgsamNvbmZpZy5oLGpwZWdsaWIuaCxqbW9yZWNmZy5oLGpwZWdpbnQuaCxqZXJyb3IuaCxqZGN0LmgpCi1qaWRjdGZsdC5jCShqaW5jbHVkZS5oLGpjb25maWcuaCxqcGVnbGliLmgsam1vcmVjZmcuaCxqcGVnaW50LmgsamVycm9yLmgsamRjdC5oKQotamlkY3Rmc3QuYwkoamluY2x1ZGUuaCxqY29uZmlnLmgsanBlZ2xpYi5oLGptb3JlY2ZnLmgsanBlZ2ludC5oLGplcnJvci5oLGpkY3QuaCkKLWppZGN0aW50LmMJKGppbmNsdWRlLmgsamNvbmZpZy5oLGpwZWdsaWIuaCxqbW9yZWNmZy5oLGpwZWdpbnQuaCxqZXJyb3IuaCxqZGN0LmgpCi1qcXVhbnQxLmMJKGppbmNsdWRlLmgsamNvbmZpZy5oLGpwZWdsaWIuaCxqbW9yZWNmZy5oLGpwZWdpbnQuaCxqZXJyb3IuaCkKLWpxdWFudDIuYwkoamluY2x1ZGUuaCxqY29uZmlnLmgsanBlZ2xpYi5oLGptb3JlY2ZnLmgsanBlZ2ludC5oLGplcnJvci5oKQotanV0aWxzLmMJKGppbmNsdWRlLmgsamNvbmZpZy5oLGpwZWdsaWIuaCxqbW9yZWNmZy5oLGpwZWdpbnQuaCxqZXJyb3IuaCkKLWptZW1tZ3IuYwkoamluY2x1ZGUuaCxqY29uZmlnLmgsanBlZ2xpYi5oLGptb3JlY2ZnLmgsanBlZ2ludC5oLGplcnJvci5oLGptZW1zeXMuaCkKLWptZW1hbnNpLmMJKGppbmNsdWRlLmgsamNvbmZpZy5oLGpwZWdsaWIuaCxqbW9yZWNmZy5oLGpwZWdpbnQuaCxqZXJyb3IuaCxqbWVtc3lzLmgpCmRpZmYgLS1naXQgYS9tYWt0anBlZy5zdCBiL21ha3RqcGVnLnN0CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA0M2YwNzhhLi4wMDAwMDAwCi0tLSBhL21ha3RqcGVnLnN0CisrKyAvZGV2L251bGwKQEAgLTEsMzAgKzAsMCBAQAotOyBQcm9qZWN0IGZpbGUgZm9yIEluZGVwZW5kZW50IEpQRUcgR3JvdXAncyBzb2Z0d2FyZQotOwotOyBUaGlzIHByb2plY3QgZmlsZSBpcyBmb3IgQXRhcmkgU1QvU1RFL1RUIHN5c3RlbXMgdXNpbmcgUHVyZSBDIG9yIFR1cmJvIEMuCi07IFRoYW5rcyB0byBGcmFuayBNb2VobGUsIEIuIFNldHplcGZhbmR0LCBhbmQgR3VpZG8gVm9sbGJlZGluZy4KLTsKLTsgVG8gdXNlIHRoaXMgZmlsZSwgcmVuYW1lIGl0IHRvIGpwZWd0cmFuLnByai4KLTsgSWYgeW91IGFyZSB1c2luZyBUdXJibyBDLCBjaGFuZ2UgZmlsZW5hbWVzIGJlZ2lubmluZyB3aXRoICJwYy4uLiIgdG8gInRjLi4uIgotOyBSZWFkIGluc3RhbGxhdGlvbiBpbnN0cnVjdGlvbnMgYmVmb3JlIHRyeWluZyB0byBtYWtlIHRoZSBwcm9ncmFtIQotOwotOwotOyAgICAgICogKiAqIE91dHB1dCBmaWxlICogKiAqCi1qcGVndHJhbi50dHAKLTsKLTsgKiAqICogQ09NUElMRVIgT1BUSU9OUyAqICogKiAgCi0uQ1stUF0gICAgICAgIDsgYWJzb2x1dGUgY2FsbHMKLS5DWy1NXSAgICAgICAgOyBhbmQgbm8gc3RyaW5nIG1lcmdpbmcsIGZvbGtzCi0uQ1stdy1jbG5dICAgIDsgbm8gImNvbnN0YW50IGlzIGxvbmciIHdhcm5pbmdzCi0uQ1stdy1wYXJdICAgIDsgbm8gInBhcmFtZXRlciB4eHh4IHVudXNlZCIKLS5DWy13LXJjaF0gICAgOyBubyAidW5yZWFjaGFibGUgY29kZSIKLS5DWy13c2lnXSAgICAgOyB3YXJuIGlmIHNpZ25pZmljYW50IGRpZ2l0cyBtYXkgYmUgbG9zdAotPQotOyAqICogKiAqIExpc3Qgb2YgbW9kdWxlcyAqICogKiAqIAotcGNzdGFydC5vCi1qcGVndHJhbi5jCShjZGpwZWcuaCxqaW5jbHVkZS5oLGpjb25maWcuaCxqcGVnbGliLmgsam1vcmVjZmcuaCxqZXJyb3IuaCxjZGVycm9yLmgsdHJhbnN1cHAuaCxqdmVyc2lvbi5oKQotY2RqcGVnLmMJKGNkanBlZy5oLGppbmNsdWRlLmgsamNvbmZpZy5oLGpwZWdsaWIuaCxqbW9yZWNmZy5oLGplcnJvci5oLGNkZXJyb3IuaCkKLXJkc3dpdGNoLmMJKGNkanBlZy5oLGppbmNsdWRlLmgsamNvbmZpZy5oLGpwZWdsaWIuaCxqbW9yZWNmZy5oLGplcnJvci5oLGNkZXJyb3IuaCkKLXRyYW5zdXBwLmMJKGppbmNsdWRlLmgsamNvbmZpZy5oLGpwZWdsaWIuaCxqbW9yZWNmZy5oLGpwZWdpbnQuaCxqZXJyb3IuaCx0cmFuc3VwcC5oKQotbGlianBlZy5saWIgICAgICAgIDsgYnVpbHQgYnkgbGlianBlZy5wcmoKLXBjc3RkbGliLmxpYiAgICAgICA7IHN0YW5kYXJkIGxpYnJhcnkKLXBjZXh0bGliLmxpYiAgICAgICA7IGV4dGVuZGVkIGxpYnJhcnkKZGlmZiAtLWdpdCBhL21ha3Ztcy5vcHQgYi9tYWt2bXMub3B0CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2NzVlOGZlLi4wMDAwMDAwCi0tLSBhL21ha3Ztcy5vcHQKKysrIC9kZXYvbnVsbApAQCAtMSw0ICswLDAgQEAKLSEgQSBwb2ludGVyIHRvIHRoZSBWQVgvVk1TIEMgUnVuLVRpbWUgU2hhcmVhYmxlIExpYnJhcnkuCi0hIFRoaXMgZmlsZSBpcyBuZWVkZWQgYnkgbWFrZWZpbGUubW1zIGFuZCBtYWtlZmlsZS52bXMsCi0hIGJ1dCBvbmx5IGZvciB0aGUgb2xkZXIgVkFYIEMgY29tcGlsZXIuICBERUMgQyBkb2VzIG5vdCBuZWVkIGl0LgotU3lzJExpYnJhcnk6VkFYQ1JUTC5FWEUgL1NoYXJlCmRpZmYgLS1naXQgYS9taXNzaW5nIGIvbWlzc2luZwpkZWxldGVkIGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMjgwNTVkMi4uMDAwMDAwMAotLS0gYS9taXNzaW5nCisrKyAvZGV2L251bGwKQEAgLTEsMzc2ICswLDAgQEAKLSMhIC9iaW4vc2gKLSMgQ29tbW9uIHN0dWIgZm9yIGEgZmV3IG1pc3NpbmcgR05VIHByb2dyYW1zIHdoaWxlIGluc3RhbGxpbmcuCi0KLXNjcmlwdHZlcnNpb249MjAwOS0wNC0yOC4yMTsgIyBVVEMKLQotIyBDb3B5cmlnaHQgKEMpIDE5OTYsIDE5OTcsIDE5OTksIDIwMDAsIDIwMDIsIDIwMDMsIDIwMDQsIDIwMDUsIDIwMDYsCi0jIDIwMDgsIDIwMDkgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCi0jIE9yaWdpbmFsbHkgYnkgRnJhbixjb2lzIFBpbmFyZCA8cGluYXJkQGlyby51bW9udHJlYWwuY2E+LCAxOTk2LgotCi0jIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5Ci0jIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5Ci0jIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIsIG9yIChhdCB5b3VyIG9wdGlvbikKLSMgYW55IGxhdGVyIHZlcnNpb24uCi0KLSMgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0jIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0jIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKLSMgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLQotIyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQotIyBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbS4gIElmIG5vdCwgc2VlIDxodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvPi4KLQotIyBBcyBhIHNwZWNpYWwgZXhjZXB0aW9uIHRvIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSwgaWYgeW91Ci0jIGRpc3RyaWJ1dGUgdGhpcyBmaWxlIGFzIHBhcnQgb2YgYSBwcm9ncmFtIHRoYXQgY29udGFpbnMgYQotIyBjb25maWd1cmF0aW9uIHNjcmlwdCBnZW5lcmF0ZWQgYnkgQXV0b2NvbmYsIHlvdSBtYXkgaW5jbHVkZSBpdCB1bmRlcgotIyB0aGUgc2FtZSBkaXN0cmlidXRpb24gdGVybXMgdGhhdCB5b3UgdXNlIGZvciB0aGUgcmVzdCBvZiB0aGF0IHByb2dyYW0uCi0KLWlmIHRlc3QgJCMgLWVxIDA7IHRoZW4KLSAgZWNobyAxPiYyICJUcnkgXGAkMCAtLWhlbHAnIGZvciBtb3JlIGluZm9ybWF0aW9uIgotICBleGl0IDEKLWZpCi0KLXJ1bj06Ci1zZWRfb3V0cHV0PSdzLy4qIC0tb3V0cHV0WyA9XVwoW14gXSpcKS4qL1wxL3AnCi1zZWRfbWludXNvPSdzLy4qIC1vIFwoW14gXSpcKS4qL1wxL3AnCi0KLSMgSW4gdGhlIGNhc2VzIHdoZXJlIHRoaXMgbWF0dGVycywgYG1pc3NpbmcnIGlzIGJlaW5nIHJ1biBpbiB0aGUKLSMgc3JjZGlyIGFscmVhZHkuCi1pZiB0ZXN0IC1mIGNvbmZpZ3VyZS5hYzsgdGhlbgotICBjb25maWd1cmVfYWM9Y29uZmlndXJlLmFjCi1lbHNlCi0gIGNvbmZpZ3VyZV9hYz1jb25maWd1cmUuaW4KLWZpCi0KLW1zZz0ibWlzc2luZyBvbiB5b3VyIHN5c3RlbSIKLQotY2FzZSAkMSBpbgotLS1ydW4pCi0gICMgVHJ5IHRvIHJ1biByZXF1ZXN0ZWQgcHJvZ3JhbSwgYW5kIGp1c3QgZXhpdCBpZiBpdCBzdWNjZWVkcy4KLSAgcnVuPQotICBzaGlmdAotICAiJEAiICYmIGV4aXQgMAotICAjIEV4aXQgY29kZSA2MyBtZWFucyB2ZXJzaW9uIG1pc21hdGNoLiAgVGhpcyBvZnRlbiBoYXBwZW5zCi0gICMgd2hlbiB0aGUgdXNlciB0cnkgdG8gdXNlIGFuIGFuY2llbnQgdmVyc2lvbiBvZiBhIHRvb2wgb24KLSAgIyBhIGZpbGUgdGhhdCByZXF1aXJlcyBhIG1pbmltdW0gdmVyc2lvbi4gIEluIHRoaXMgY2FzZSB3ZQotICAjIHdlIHNob3VsZCBwcm9jZWVkIGhhcyBpZiB0aGUgcHJvZ3JhbSBoYWQgYmVlbiBhYnNlbnQsIG9yCi0gICMgaWYgLS1ydW4gaGFkbid0IGJlZW4gcGFzc2VkLgotICBpZiB0ZXN0ICQ/ID0gNjM7IHRoZW4KLSAgICBydW49OgotICAgIG1zZz0icHJvYmFibHkgdG9vIG9sZCIKLSAgZmkKLSAgOzsKLQotICAtaHwtLWh8LS1oZXwtLWhlbHwtLWhlbHApCi0gICAgZWNobyAiXAotJDAgW09QVElPTl0uLi4gUFJPR1JBTSBbQVJHVU1FTlRdLi4uCi0KLUhhbmRsZSBcYFBST0dSQU0gW0FSR1VNRU5UXS4uLicgZm9yIHdoZW4gUFJPR1JBTSBpcyBtaXNzaW5nLCBvciByZXR1cm4gYW4KLWVycm9yIHN0YXR1cyBpZiB0aGVyZSBpcyBubyBrbm93biBoYW5kbGluZyBmb3IgUFJPR1JBTS4KLQotT3B0aW9uczoKLSAgLWgsIC0taGVscCAgICAgIGRpc3BsYXkgdGhpcyBoZWxwIGFuZCBleGl0Ci0gIC12LCAtLXZlcnNpb24gICBvdXRwdXQgdmVyc2lvbiBpbmZvcm1hdGlvbiBhbmQgZXhpdAotICAtLXJ1biAgICAgICAgICAgdHJ5IHRvIHJ1biB0aGUgZ2l2ZW4gY29tbWFuZCwgYW5kIGVtdWxhdGUgaXQgaWYgaXQgZmFpbHMKLQotU3VwcG9ydGVkIFBST0dSQU0gdmFsdWVzOgotICBhY2xvY2FsICAgICAgdG91Y2ggZmlsZSBcYGFjbG9jYWwubTQnCi0gIGF1dG9jb25mICAgICB0b3VjaCBmaWxlIFxgY29uZmlndXJlJwotICBhdXRvaGVhZGVyICAgdG91Y2ggZmlsZSBcYGNvbmZpZy5oLmluJwotICBhdXRvbTR0ZSAgICAgdG91Y2ggdGhlIG91dHB1dCBmaWxlLCBvciBjcmVhdGUgYSBzdHViIG9uZQotICBhdXRvbWFrZSAgICAgdG91Y2ggYWxsIFxgTWFrZWZpbGUuaW4nIGZpbGVzCi0gIGJpc29uICAgICAgICBjcmVhdGUgXGB5LnRhYi5bY2hdJywgaWYgcG9zc2libGUsIGZyb20gZXhpc3RpbmcgLltjaF0KLSAgZmxleCAgICAgICAgIGNyZWF0ZSBcYGxleC55eS5jJywgaWYgcG9zc2libGUsIGZyb20gZXhpc3RpbmcgLmMKLSAgaGVscDJtYW4gICAgIHRvdWNoIHRoZSBvdXRwdXQgZmlsZQotICBsZXggICAgICAgICAgY3JlYXRlIFxgbGV4Lnl5LmMnLCBpZiBwb3NzaWJsZSwgZnJvbSBleGlzdGluZyAuYwotICBtYWtlaW5mbyAgICAgdG91Y2ggdGhlIG91dHB1dCBmaWxlCi0gIHRhciAgICAgICAgICB0cnkgdGFyLCBnbnV0YXIsIGd0YXIsIHRoZW4gdGFyIHdpdGhvdXQgbm9uLXBvcnRhYmxlIGZsYWdzCi0gIHlhY2MgICAgICAgICBjcmVhdGUgXGB5LnRhYi5bY2hdJywgaWYgcG9zc2libGUsIGZyb20gZXhpc3RpbmcgLltjaF0KLQotVmVyc2lvbiBzdWZmaXhlcyB0byBQUk9HUkFNIGFzIHdlbGwgYXMgdGhlIHByZWZpeGVzIFxgZ251LScsIFxgZ251JywgYW5kCi1cYGcnIGFyZSBpZ25vcmVkIHdoZW4gY2hlY2tpbmcgdGhlIG5hbWUuCi0KLVNlbmQgYnVnIHJlcG9ydHMgdG8gPGJ1Zy1hdXRvbWFrZUBnbnUub3JnPi4iCi0gICAgZXhpdCAkPwotICAgIDs7Ci0KLSAgLXZ8LS12fC0tdmV8LS12ZXJ8LS12ZXJzfC0tdmVyc2l8LS12ZXJzaW98LS12ZXJzaW9uKQotICAgIGVjaG8gIm1pc3NpbmcgJHNjcmlwdHZlcnNpb24gKEdOVSBBdXRvbWFrZSkiCi0gICAgZXhpdCAkPwotICAgIDs7Ci0KLSAgLSopCi0gICAgZWNobyAxPiYyICIkMDogVW5rbm93biBcYCQxJyBvcHRpb24iCi0gICAgZWNobyAxPiYyICJUcnkgXGAkMCAtLWhlbHAnIGZvciBtb3JlIGluZm9ybWF0aW9uIgotICAgIGV4aXQgMQotICAgIDs7Ci0KLWVzYWMKLQotIyBub3JtYWxpemUgcHJvZ3JhbSBuYW1lIHRvIGNoZWNrIGZvci4KLXByb2dyYW09YGVjaG8gIiQxIiB8IHNlZCAnCi0gIHMvXmdudS0vLzsgdAotICBzL15nbnUvLzsgdAotICBzL15nLy87IHQnYAotCi0jIE5vdyBleGl0IGlmIHdlIGhhdmUgaXQsIGJ1dCBpdCBmYWlsZWQuICBBbHNvIGV4aXQgbm93IGlmIHdlCi0jIGRvbid0IGhhdmUgaXQgYW5kIC0tdmVyc2lvbiB3YXMgcGFzc2VkIChtb3N0IGxpa2VseSB0byBkZXRlY3QKLSMgdGhlIHByb2dyYW0pLiAgVGhpcyBpcyBhYm91dCBub24tR05VIHByb2dyYW1zLCBzbyB1c2UgJDEgbm90Ci0jICRwcm9ncmFtLgotY2FzZSAkMSBpbgotICBsZXgqfHlhY2MqKQotICAgICMgTm90IEdOVSBwcm9ncmFtcywgdGhleSBkb24ndCBoYXZlIC0tdmVyc2lvbi4KLSAgICA7OwotCi0gIHRhciopCi0gICAgaWYgdGVzdCAtbiAiJHJ1biI7IHRoZW4KLSAgICAgICBlY2hvIDE+JjIgIkVSUk9SOiBcYHRhcicgcmVxdWlyZXMgLS1ydW4iCi0gICAgICAgZXhpdCAxCi0gICAgZWxpZiB0ZXN0ICJ4JDIiID0gIngtLXZlcnNpb24iIHx8IHRlc3QgIngkMiIgPSAieC0taGVscCI7IHRoZW4KLSAgICAgICBleGl0IDEKLSAgICBmaQotICAgIDs7Ci0KLSAgKikKLSAgICBpZiB0ZXN0IC16ICIkcnVuIiAmJiAoJDEgLS12ZXJzaW9uKSA+IC9kZXYvbnVsbCAyPiYxOyB0aGVuCi0gICAgICAgIyBXZSBoYXZlIGl0LCBidXQgaXQgZmFpbGVkLgotICAgICAgIGV4aXQgMQotICAgIGVsaWYgdGVzdCAieCQyIiA9ICJ4LS12ZXJzaW9uIiB8fCB0ZXN0ICJ4JDIiID0gIngtLWhlbHAiOyB0aGVuCi0gICAgICAgIyBDb3VsZCBub3QgcnVuIC0tdmVyc2lvbiBvciAtLWhlbHAuICBUaGlzIGlzIHByb2JhYmx5IHNvbWVvbmUKLSAgICAgICAjIHJ1bm5pbmcgYCRUT09MIC0tdmVyc2lvbicgb3IgYCRUT09MIC0taGVscCcgdG8gY2hlY2sgd2hldGhlcgotICAgICAgICMgJFRPT0wgZXhpc3RzIGFuZCBub3Qga25vd2luZyAkVE9PTCB1c2VzIG1pc3NpbmcuCi0gICAgICAgZXhpdCAxCi0gICAgZmkKLSAgICA7OwotZXNhYwotCi0jIElmIGl0IGRvZXMgbm90IGV4aXN0LCBvciBmYWlscyB0byBydW4gKHBvc3NpYmx5IGFuIG91dGRhdGVkIHZlcnNpb24pLAotIyB0cnkgdG8gZW11bGF0ZSBpdC4KLWNhc2UgJHByb2dyYW0gaW4KLSAgYWNsb2NhbCopCi0gICAgZWNobyAxPiYyICJcCi1XQVJOSU5HOiBcYCQxJyBpcyAkbXNnLiAgWW91IHNob3VsZCBvbmx5IG5lZWQgaXQgaWYKLSAgICAgICAgIHlvdSBtb2RpZmllZCBcYGFjaW5jbHVkZS5tNCcgb3IgXGAke2NvbmZpZ3VyZV9hY30nLiAgWW91IG1pZ2h0IHdhbnQKLSAgICAgICAgIHRvIGluc3RhbGwgdGhlIFxgQXV0b21ha2UnIGFuZCBcYFBlcmwnIHBhY2thZ2VzLiAgR3JhYiB0aGVtIGZyb20KLSAgICAgICAgIGFueSBHTlUgYXJjaGl2ZSBzaXRlLiIKLSAgICB0b3VjaCBhY2xvY2FsLm00Ci0gICAgOzsKLQotICBhdXRvY29uZiopCi0gICAgZWNobyAxPiYyICJcCi1XQVJOSU5HOiBcYCQxJyBpcyAkbXNnLiAgWW91IHNob3VsZCBvbmx5IG5lZWQgaXQgaWYKLSAgICAgICAgIHlvdSBtb2RpZmllZCBcYCR7Y29uZmlndXJlX2FjfScuICBZb3UgbWlnaHQgd2FudCB0byBpbnN0YWxsIHRoZQotICAgICAgICAgXGBBdXRvY29uZicgYW5kIFxgR05VIG00JyBwYWNrYWdlcy4gIEdyYWIgdGhlbSBmcm9tIGFueSBHTlUKLSAgICAgICAgIGFyY2hpdmUgc2l0ZS4iCi0gICAgdG91Y2ggY29uZmlndXJlCi0gICAgOzsKLQotICBhdXRvaGVhZGVyKikKLSAgICBlY2hvIDE+JjIgIlwKLVdBUk5JTkc6IFxgJDEnIGlzICRtc2cuICBZb3Ugc2hvdWxkIG9ubHkgbmVlZCBpdCBpZgotICAgICAgICAgeW91IG1vZGlmaWVkIFxgYWNjb25maWcuaCcgb3IgXGAke2NvbmZpZ3VyZV9hY30nLiAgWW91IG1pZ2h0IHdhbnQKLSAgICAgICAgIHRvIGluc3RhbGwgdGhlIFxgQXV0b2NvbmYnIGFuZCBcYEdOVSBtNCcgcGFja2FnZXMuICBHcmFiIHRoZW0KLSAgICAgICAgIGZyb20gYW55IEdOVSBhcmNoaXZlIHNpdGUuIgotICAgIGZpbGVzPWBzZWQgLW4gJ3MvXlsgXSpBW0NNXV9DT05GSUdfSEVBREVSKFwoW14pXSpcKSkuKi9cMS9wJyAke2NvbmZpZ3VyZV9hY31gCi0gICAgdGVzdCAteiAiJGZpbGVzIiAmJiBmaWxlcz0iY29uZmlnLmgiCi0gICAgdG91Y2hfZmlsZXM9Ci0gICAgZm9yIGYgaW4gJGZpbGVzOyBkbwotICAgICAgY2FzZSAkZiBpbgotICAgICAgKjoqKSB0b3VjaF9maWxlcz0iJHRvdWNoX2ZpbGVzICJgZWNobyAiJGYiIHwKLQkJCQkgICAgICAgc2VkIC1lICdzL15bXjpdKjovLycgLWUgJ3MvOi4qLy8nYDs7Ci0gICAgICAqKSB0b3VjaF9maWxlcz0iJHRvdWNoX2ZpbGVzICRmLmluIjs7Ci0gICAgICBlc2FjCi0gICAgZG9uZQotICAgIHRvdWNoICR0b3VjaF9maWxlcwotICAgIDs7Ci0KLSAgYXV0b21ha2UqKQotICAgIGVjaG8gMT4mMiAiXAotV0FSTklORzogXGAkMScgaXMgJG1zZy4gIFlvdSBzaG91bGQgb25seSBuZWVkIGl0IGlmCi0gICAgICAgICB5b3UgbW9kaWZpZWQgXGBNYWtlZmlsZS5hbScsIFxgYWNpbmNsdWRlLm00JyBvciBcYCR7Y29uZmlndXJlX2FjfScuCi0gICAgICAgICBZb3UgbWlnaHQgd2FudCB0byBpbnN0YWxsIHRoZSBcYEF1dG9tYWtlJyBhbmQgXGBQZXJsJyBwYWNrYWdlcy4KLSAgICAgICAgIEdyYWIgdGhlbSBmcm9tIGFueSBHTlUgYXJjaGl2ZSBzaXRlLiIKLSAgICBmaW5kIC4gLXR5cGUgZiAtbmFtZSBNYWtlZmlsZS5hbSAtcHJpbnQgfAotCSAgIHNlZCAncy9cLmFtJC8uaW4vJyB8Ci0JICAgd2hpbGUgcmVhZCBmOyBkbyB0b3VjaCAiJGYiOyBkb25lCi0gICAgOzsKLQotICBhdXRvbTR0ZSopCi0gICAgZWNobyAxPiYyICJcCi1XQVJOSU5HOiBcYCQxJyBpcyBuZWVkZWQsIGJ1dCBpcyAkbXNnLgotICAgICAgICAgWW91IG1pZ2h0IGhhdmUgbW9kaWZpZWQgc29tZSBmaWxlcyB3aXRob3V0IGhhdmluZyB0aGUKLSAgICAgICAgIHByb3BlciB0b29scyBmb3IgZnVydGhlciBoYW5kbGluZyB0aGVtLgotICAgICAgICAgWW91IGNhbiBnZXQgXGAkMScgYXMgcGFydCBvZiBcYEF1dG9jb25mJyBmcm9tIGFueSBHTlUKLSAgICAgICAgIGFyY2hpdmUgc2l0ZS4iCi0KLSAgICBmaWxlPWBlY2hvICIkKiIgfCBzZWQgLW4gIiRzZWRfb3V0cHV0ImAKLSAgICB0ZXN0IC16ICIkZmlsZSIgJiYgZmlsZT1gZWNobyAiJCoiIHwgc2VkIC1uICIkc2VkX21pbnVzbyJgCi0gICAgaWYgdGVzdCAtZiAiJGZpbGUiOyB0aGVuCi0JdG91Y2ggJGZpbGUKLSAgICBlbHNlCi0JdGVzdCAteiAiJGZpbGUiIHx8IGV4ZWMgPiRmaWxlCi0JZWNobyAiIyEgL2Jpbi9zaCIKLQllY2hvICIjIENyZWF0ZWQgYnkgR05VIEF1dG9tYWtlIG1pc3NpbmcgYXMgYSByZXBsYWNlbWVudCBvZiIKLQllY2hvICIjICAkICRAIgotCWVjaG8gImV4aXQgMCIKLQljaG1vZCAreCAkZmlsZQotCWV4aXQgMQotICAgIGZpCi0gICAgOzsKLQotICBiaXNvbip8eWFjYyopCi0gICAgZWNobyAxPiYyICJcCi1XQVJOSU5HOiBcYCQxJyAkbXNnLiAgWW91IHNob3VsZCBvbmx5IG5lZWQgaXQgaWYKLSAgICAgICAgIHlvdSBtb2RpZmllZCBhIFxgLnknIGZpbGUuICBZb3UgbWF5IG5lZWQgdGhlIFxgQmlzb24nIHBhY2thZ2UKLSAgICAgICAgIGluIG9yZGVyIGZvciB0aG9zZSBtb2RpZmljYXRpb25zIHRvIHRha2UgZWZmZWN0LiAgWW91IGNhbiBnZXQKLSAgICAgICAgIFxgQmlzb24nIGZyb20gYW55IEdOVSBhcmNoaXZlIHNpdGUuIgotICAgIHJtIC1mIHkudGFiLmMgeS50YWIuaAotICAgIGlmIHRlc3QgJCMgLW5lIDE7IHRoZW4KLSAgICAgICAgZXZhbCBMQVNUQVJHPSJcJHskI30iCi0JY2FzZSAkTEFTVEFSRyBpbgotCSoueSkKLQkgICAgU1JDRklMRT1gZWNobyAiJExBU1RBUkciIHwgc2VkICdzL3kkL2MvJ2AKLQkgICAgaWYgdGVzdCAtZiAiJFNSQ0ZJTEUiOyB0aGVuCi0JICAgICAgICAgY3AgIiRTUkNGSUxFIiB5LnRhYi5jCi0JICAgIGZpCi0JICAgIFNSQ0ZJTEU9YGVjaG8gIiRMQVNUQVJHIiB8IHNlZCAncy95JC9oLydgCi0JICAgIGlmIHRlc3QgLWYgIiRTUkNGSUxFIjsgdGhlbgotCSAgICAgICAgIGNwICIkU1JDRklMRSIgeS50YWIuaAotCSAgICBmaQotCSAgOzsKLQllc2FjCi0gICAgZmkKLSAgICBpZiB0ZXN0ICEgLWYgeS50YWIuaDsgdGhlbgotCWVjaG8gPnkudGFiLmgKLSAgICBmaQotICAgIGlmIHRlc3QgISAtZiB5LnRhYi5jOyB0aGVuCi0JZWNobyAnbWFpbigpIHsgcmV0dXJuIDA7IH0nID55LnRhYi5jCi0gICAgZmkKLSAgICA7OwotCi0gIGxleCp8ZmxleCopCi0gICAgZWNobyAxPiYyICJcCi1XQVJOSU5HOiBcYCQxJyBpcyAkbXNnLiAgWW91IHNob3VsZCBvbmx5IG5lZWQgaXQgaWYKLSAgICAgICAgIHlvdSBtb2RpZmllZCBhIFxgLmwnIGZpbGUuICBZb3UgbWF5IG5lZWQgdGhlIFxgRmxleCcgcGFja2FnZQotICAgICAgICAgaW4gb3JkZXIgZm9yIHRob3NlIG1vZGlmaWNhdGlvbnMgdG8gdGFrZSBlZmZlY3QuICBZb3UgY2FuIGdldAotICAgICAgICAgXGBGbGV4JyBmcm9tIGFueSBHTlUgYXJjaGl2ZSBzaXRlLiIKLSAgICBybSAtZiBsZXgueXkuYwotICAgIGlmIHRlc3QgJCMgLW5lIDE7IHRoZW4KLSAgICAgICAgZXZhbCBMQVNUQVJHPSJcJHskI30iCi0JY2FzZSAkTEFTVEFSRyBpbgotCSoubCkKLQkgICAgU1JDRklMRT1gZWNobyAiJExBU1RBUkciIHwgc2VkICdzL2wkL2MvJ2AKLQkgICAgaWYgdGVzdCAtZiAiJFNSQ0ZJTEUiOyB0aGVuCi0JICAgICAgICAgY3AgIiRTUkNGSUxFIiBsZXgueXkuYwotCSAgICBmaQotCSAgOzsKLQllc2FjCi0gICAgZmkKLSAgICBpZiB0ZXN0ICEgLWYgbGV4Lnl5LmM7IHRoZW4KLQllY2hvICdtYWluKCkgeyByZXR1cm4gMDsgfScgPmxleC55eS5jCi0gICAgZmkKLSAgICA7OwotCi0gIGhlbHAybWFuKikKLSAgICBlY2hvIDE+JjIgIlwKLVdBUk5JTkc6IFxgJDEnIGlzICRtc2cuICBZb3Ugc2hvdWxkIG9ubHkgbmVlZCBpdCBpZgotCSB5b3UgbW9kaWZpZWQgYSBkZXBlbmRlbmN5IG9mIGEgbWFudWFsIHBhZ2UuICBZb3UgbWF5IG5lZWQgdGhlCi0JIFxgSGVscDJtYW4nIHBhY2thZ2UgaW4gb3JkZXIgZm9yIHRob3NlIG1vZGlmaWNhdGlvbnMgdG8gdGFrZQotCSBlZmZlY3QuICBZb3UgY2FuIGdldCBcYEhlbHAybWFuJyBmcm9tIGFueSBHTlUgYXJjaGl2ZSBzaXRlLiIKLQotICAgIGZpbGU9YGVjaG8gIiQqIiB8IHNlZCAtbiAiJHNlZF9vdXRwdXQiYAotICAgIHRlc3QgLXogIiRmaWxlIiAmJiBmaWxlPWBlY2hvICIkKiIgfCBzZWQgLW4gIiRzZWRfbWludXNvImAKLSAgICBpZiB0ZXN0IC1mICIkZmlsZSI7IHRoZW4KLQl0b3VjaCAkZmlsZQotICAgIGVsc2UKLQl0ZXN0IC16ICIkZmlsZSIgfHwgZXhlYyA+JGZpbGUKLQllY2hvICIuYWIgaGVscDJtYW4gaXMgcmVxdWlyZWQgdG8gZ2VuZXJhdGUgdGhpcyBwYWdlIgotCWV4aXQgJD8KLSAgICBmaQotICAgIDs7Ci0KLSAgbWFrZWluZm8qKQotICAgIGVjaG8gMT4mMiAiXAotV0FSTklORzogXGAkMScgaXMgJG1zZy4gIFlvdSBzaG91bGQgb25seSBuZWVkIGl0IGlmCi0gICAgICAgICB5b3UgbW9kaWZpZWQgYSBcYC50ZXhpJyBvciBcYC50ZXhpbmZvJyBmaWxlLCBvciBhbnkgb3RoZXIgZmlsZQotICAgICAgICAgaW5kaXJlY3RseSBhZmZlY3RpbmcgdGhlIGFzcGVjdCBvZiB0aGUgbWFudWFsLiAgVGhlIHNwdXJpb3VzCi0gICAgICAgICBjYWxsIG1pZ2h0IGFsc28gYmUgdGhlIGNvbnNlcXVlbmNlIG9mIHVzaW5nIGEgYnVnZ3kgXGBtYWtlJyAoQUlYLAotICAgICAgICAgRFUsIElSSVgpLiAgWW91IG1pZ2h0IHdhbnQgdG8gaW5zdGFsbCB0aGUgXGBUZXhpbmZvJyBwYWNrYWdlIG9yCi0gICAgICAgICB0aGUgXGBHTlUgbWFrZScgcGFja2FnZS4gIEdyYWIgZWl0aGVyIGZyb20gYW55IEdOVSBhcmNoaXZlIHNpdGUuIgotICAgICMgVGhlIGZpbGUgdG8gdG91Y2ggaXMgdGhhdCBzcGVjaWZpZWQgd2l0aCAtbyAuLi4KLSAgICBmaWxlPWBlY2hvICIkKiIgfCBzZWQgLW4gIiRzZWRfb3V0cHV0ImAKLSAgICB0ZXN0IC16ICIkZmlsZSIgJiYgZmlsZT1gZWNobyAiJCoiIHwgc2VkIC1uICIkc2VkX21pbnVzbyJgCi0gICAgaWYgdGVzdCAteiAiJGZpbGUiOyB0aGVuCi0gICAgICAjIC4uLiBvciBpdCBpcyB0aGUgb25lIHNwZWNpZmllZCB3aXRoIEBzZXRmaWxlbmFtZSAuLi4KLSAgICAgIGluZmlsZT1gZWNobyAiJCoiIHwgc2VkICdzLy4qIFwoW14gXSpcKSAqJC9cMS8nYAotICAgICAgZmlsZT1gc2VkIC1uICcKLQkvXkBzZXRmaWxlbmFtZS97Ci0JICBzLy4qIFwoW14gXSpcKSAqJC9cMS8KLQkgIHAKLQkgIHEKLQl9JyAkaW5maWxlYAotICAgICAgIyAuLi4gb3IgaXQgaXMgZGVyaXZlZCBmcm9tIHRoZSBzb3VyY2UgbmFtZSAoZGlyL2YudGV4aSBiZWNvbWVzIGYuaW5mbykKLSAgICAgIHRlc3QgLXogIiRmaWxlIiAmJiBmaWxlPWBlY2hvICIkaW5maWxlIiB8IHNlZCAncywuKi8sLDtzLC5bXi5dKiQsLCdgLmluZm8KLSAgICBmaQotICAgICMgSWYgdGhlIGZpbGUgZG9lcyBub3QgZXhpc3QsIHRoZSB1c2VyIHJlYWxseSBuZWVkcyBtYWtlaW5mbzsKLSAgICAjIGxldCdzIGZhaWwgd2l0aG91dCB0b3VjaGluZyBhbnl0aGluZy4KLSAgICB0ZXN0IC1mICRmaWxlIHx8IGV4aXQgMQotICAgIHRvdWNoICRmaWxlCi0gICAgOzsKLQotICB0YXIqKQotICAgIHNoaWZ0Ci0KLSAgICAjIFdlIGhhdmUgYWxyZWFkeSB0cmllZCB0YXIgaW4gdGhlIGdlbmVyaWMgcGFydC4KLSAgICAjIExvb2sgZm9yIGdudXRhci9ndGFyIGJlZm9yZSBpbnZvY2F0aW9uIHRvIGF2b2lkIHVnbHkgZXJyb3IKLSAgICAjIG1lc3NhZ2VzLgotICAgIGlmIChnbnV0YXIgLS12ZXJzaW9uID4gL2Rldi9udWxsIDI+JjEpOyB0aGVuCi0gICAgICAgZ251dGFyICIkQCIgJiYgZXhpdCAwCi0gICAgZmkKLSAgICBpZiAoZ3RhciAtLXZlcnNpb24gPiAvZGV2L251bGwgMj4mMSk7IHRoZW4KLSAgICAgICBndGFyICIkQCIgJiYgZXhpdCAwCi0gICAgZmkKLSAgICBmaXJzdGFyZz0iJDEiCi0gICAgaWYgc2hpZnQ7IHRoZW4KLQljYXNlICRmaXJzdGFyZyBpbgotCSpvKikKLQkgICAgZmlyc3Rhcmc9YGVjaG8gIiRmaXJzdGFyZyIgfCBzZWQgcy9vLy9gCi0JICAgIHRhciAiJGZpcnN0YXJnIiAiJEAiICYmIGV4aXQgMAotCSAgICA7OwotCWVzYWMKLQljYXNlICRmaXJzdGFyZyBpbgotCSpoKikKLQkgICAgZmlyc3Rhcmc9YGVjaG8gIiRmaXJzdGFyZyIgfCBzZWQgcy9oLy9gCi0JICAgIHRhciAiJGZpcnN0YXJnIiAiJEAiICYmIGV4aXQgMAotCSAgICA7OwotCWVzYWMKLSAgICBmaQotCi0gICAgZWNobyAxPiYyICJcCi1XQVJOSU5HOiBJIGNhbid0IHNlZW0gdG8gYmUgYWJsZSB0byBydW4gXGB0YXInIHdpdGggdGhlIGdpdmVuIGFyZ3VtZW50cy4KLSAgICAgICAgIFlvdSBtYXkgd2FudCB0byBpbnN0YWxsIEdOVSB0YXIgb3IgRnJlZSBwYXh1dGlscywgb3IgY2hlY2sgdGhlCi0gICAgICAgICBjb21tYW5kIGxpbmUgYXJndW1lbnRzLiIKLSAgICBleGl0IDEKLSAgICA7OwotCi0gICopCi0gICAgZWNobyAxPiYyICJcCi1XQVJOSU5HOiBcYCQxJyBpcyBuZWVkZWQsIGFuZCBpcyAkbXNnLgotICAgICAgICAgWW91IG1pZ2h0IGhhdmUgbW9kaWZpZWQgc29tZSBmaWxlcyB3aXRob3V0IGhhdmluZyB0aGUKLSAgICAgICAgIHByb3BlciB0b29scyBmb3IgZnVydGhlciBoYW5kbGluZyB0aGVtLiAgQ2hlY2sgdGhlIFxgUkVBRE1FJyBmaWxlLAotICAgICAgICAgaXQgb2Z0ZW4gdGVsbHMgeW91IGFib3V0IHRoZSBuZWVkZWQgcHJlcmVxdWlzaXRlcyBmb3IgaW5zdGFsbGluZwotICAgICAgICAgdGhpcyBwYWNrYWdlLiAgWW91IG1heSBhbHNvIHBlZWsgYXQgYW55IEdOVSBhcmNoaXZlIHNpdGUsIGluIGNhc2UKLSAgICAgICAgIHNvbWUgb3RoZXIgcGFja2FnZSB3b3VsZCBjb250YWluIHRoaXMgbWlzc2luZyBcYCQxJyBwcm9ncmFtLiIKLSAgICBleGl0IDEKLSAgICA7OwotZXNhYwotCi1leGl0IDAKLQotIyBMb2NhbCB2YXJpYWJsZXM6Ci0jIGV2YWw6IChhZGQtaG9vayAnd3JpdGUtZmlsZS1ob29rcyAndGltZS1zdGFtcCkKLSMgdGltZS1zdGFtcC1zdGFydDogInNjcmlwdHZlcnNpb249IgotIyB0aW1lLXN0YW1wLWZvcm1hdDogIiU6eS0lMDJtLSUwMmQuJTAySCIKLSMgdGltZS1zdGFtcC10aW1lLXpvbmU6ICJVVEMiCi0jIHRpbWUtc3RhbXAtZW5kOiAiOyAjIFVUQyIKLSMgRW5kOgpkaWZmIC0tZ2l0IGEvcmRzd2l0Y2guYyBiL3Jkc3dpdGNoLmMKaW5kZXggN2E4MzlhZi4uZDQwNjc1NSAxMDA2NDQKLS0tIGEvcmRzd2l0Y2guYworKysgYi9yZHN3aXRjaC5jCkBAIC0yLDYgKzIsNyBAQAogICogcmRzd2l0Y2guYwogICoKICAqIENvcHlyaWdodCAoQykgMTk5MS0xOTk2LCBUaG9tYXMgRy4gTGFuZS4KKyAqIENvcHlyaWdodCAoQykgMjAxMCwgRC4gUi4gQ29tbWFuZGVyLgogICogVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEluZGVwZW5kZW50IEpQRUcgR3JvdXAncyBzb2Z0d2FyZS4KICAqIEZvciBjb25kaXRpb25zIG9mIGRpc3RyaWJ1dGlvbiBhbmQgdXNlLCBzZWUgdGhlIGFjY29tcGFueWluZyBSRUFETUUgZmlsZS4KICAqCkBAIC03MCw2ICs3MSwxMCBAQAogfQogCiAKKyNpZiBKUEVHX0xJQl9WRVJTSU9OIDwgNzAKK3N0YXRpYyBpbnQgcV9zY2FsZV9mYWN0b3JbTlVNX1FVQU5UX1RCTFNdID0gezEwMCwgMTAwLCAxMDAsIDEwMH07CisjZW5kaWYKKwogR0xPQkFMKGJvb2xlYW4pCiByZWFkX3F1YW50X3RhYmxlcyAoal9jb21wcmVzc19wdHIgY2luZm8sIGNoYXIgKiBmaWxlbmFtZSwgYm9vbGVhbiBmb3JjZV9iYXNlbGluZSkKIC8qIFJlYWQgYSBzZXQgb2YgcXVhbnRpemF0aW9uIHRhYmxlcyBmcm9tIHRoZSBzcGVjaWZpZWQgZmlsZS4KQEAgLTEwOCw4ICsxMTMsMTMgQEAKICAgICAgIH0KICAgICAgIHRhYmxlW2ldID0gKHVuc2lnbmVkIGludCkgdmFsOwogICAgIH0KKyNpZiBKUEVHX0xJQl9WRVJTSU9OID49IDcwCiAgICAganBlZ19hZGRfcXVhbnRfdGFibGUoY2luZm8sIHRibG5vLCB0YWJsZSwgY2luZm8tPnFfc2NhbGVfZmFjdG9yW3RibG5vXSwKIAkJCSBmb3JjZV9iYXNlbGluZSk7CisjZWxzZQorICAgIGpwZWdfYWRkX3F1YW50X3RhYmxlKGNpbmZvLCB0YmxubywgdGFibGUsIHFfc2NhbGVfZmFjdG9yW3RibG5vXSwKKyAgICAgICAgICAgICAgICAgICAgICAgICBmb3JjZV9iYXNlbGluZSk7CisjZW5kaWYKICAgICB0YmxubysrOwogICB9CiAKQEAgLTI2Myw2ICsyNzMsNDQgQEAKICNlbmRpZiAvKiBDX01VTFRJU0NBTl9GSUxFU19TVVBQT1JURUQgKi8KIAogCisjaWYgSlBFR19MSUJfVkVSU0lPTiA8IDcwCisvKiBUaGVzZSBhcmUgdGhlIHNhbXBsZSBxdWFudGl6YXRpb24gdGFibGVzIGdpdmVuIGluIEpQRUcgc3BlYyBzZWN0aW9uIEsuMS4KKyAqIFRoZSBzcGVjIHNheXMgdGhhdCB0aGUgdmFsdWVzIGdpdmVuIHByb2R1Y2UgImdvb2QiIHF1YWxpdHksIGFuZAorICogd2hlbiBkaXZpZGVkIGJ5IDIsICJ2ZXJ5IGdvb2QiIHF1YWxpdHkuCisgKi8KK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBpbnQgc3RkX2x1bWluYW5jZV9xdWFudF90YmxbRENUU0laRTJdID0geworICAxNiwgIDExLCAgMTAsICAxNiwgIDI0LCAgNDAsICA1MSwgIDYxLAorICAxMiwgIDEyLCAgMTQsICAxOSwgIDI2LCAgNTgsICA2MCwgIDU1LAorICAxNCwgIDEzLCAgMTYsICAyNCwgIDQwLCAgNTcsICA2OSwgIDU2LAorICAxNCwgIDE3LCAgMjIsICAyOSwgIDUxLCAgODcsICA4MCwgIDYyLAorICAxOCwgIDIyLCAgMzcsICA1NiwgIDY4LCAxMDksIDEwMywgIDc3LAorICAyNCwgIDM1LCAgNTUsICA2NCwgIDgxLCAxMDQsIDExMywgIDkyLAorICA0OSwgIDY0LCAgNzgsICA4NywgMTAzLCAxMjEsIDEyMCwgMTAxLAorICA3MiwgIDkyLCAgOTUsICA5OCwgMTEyLCAxMDAsIDEwMywgIDk5Cit9Oworc3RhdGljIGNvbnN0IHVuc2lnbmVkIGludCBzdGRfY2hyb21pbmFuY2VfcXVhbnRfdGJsW0RDVFNJWkUyXSA9IHsKKyAgMTcsICAxOCwgIDI0LCAgNDcsICA5OSwgIDk5LCAgOTksICA5OSwKKyAgMTgsICAyMSwgIDI2LCAgNjYsICA5OSwgIDk5LCAgOTksICA5OSwKKyAgMjQsICAyNiwgIDU2LCAgOTksICA5OSwgIDk5LCAgOTksICA5OSwKKyAgNDcsICA2NiwgIDk5LCAgOTksICA5OSwgIDk5LCAgOTksICA5OSwKKyAgOTksICA5OSwgIDk5LCAgOTksICA5OSwgIDk5LCAgOTksICA5OSwKKyAgOTksICA5OSwgIDk5LCAgOTksICA5OSwgIDk5LCAgOTksICA5OSwKKyAgOTksICA5OSwgIDk5LCAgOTksICA5OSwgIDk5LCAgOTksICA5OSwKKyAgOTksICA5OSwgIDk5LCAgOTksICA5OSwgIDk5LCAgOTksICA5OQorfTsKKworCitMT0NBTCh2b2lkKQoranBlZ19kZWZhdWx0X3F0YWJsZXMgKGpfY29tcHJlc3NfcHRyIGNpbmZvLCBib29sZWFuIGZvcmNlX2Jhc2VsaW5lKQoreworICBqcGVnX2FkZF9xdWFudF90YWJsZShjaW5mbywgMCwgc3RkX2x1bWluYW5jZV9xdWFudF90YmwsCisJCSAgICAgICBxX3NjYWxlX2ZhY3RvclswXSwgZm9yY2VfYmFzZWxpbmUpOworICBqcGVnX2FkZF9xdWFudF90YWJsZShjaW5mbywgMSwgc3RkX2Nocm9taW5hbmNlX3F1YW50X3RibCwKKwkJICAgICAgIHFfc2NhbGVfZmFjdG9yWzFdLCBmb3JjZV9iYXNlbGluZSk7Cit9CisjZW5kaWYKKworCiBHTE9CQUwoYm9vbGVhbikKIHNldF9xdWFsaXR5X3JhdGluZ3MgKGpfY29tcHJlc3NfcHRyIGNpbmZvLCBjaGFyICphcmcsIGJvb2xlYW4gZm9yY2VfYmFzZWxpbmUpCiAvKiBQcm9jZXNzIGEgcXVhbGl0eS1yYXRpbmdzIHBhcmFtZXRlciBzdHJpbmcsIG9mIHRoZSBmb3JtCkBAIC0yODIsMTIgKzMzMCwyMCBAQAogICAgICAgaWYgKGNoICE9ICcsJykJCS8qIHN5bnRheCBjaGVjayAqLwogCXJldHVybiBGQUxTRTsKICAgICAgIC8qIENvbnZlcnQgdXNlciAwLTEwMCByYXRpbmcgdG8gcGVyY2VudGFnZSBzY2FsaW5nICovCisjaWYgSlBFR19MSUJfVkVSU0lPTiA+PSA3MAogICAgICAgY2luZm8tPnFfc2NhbGVfZmFjdG9yW3RibG5vXSA9IGpwZWdfcXVhbGl0eV9zY2FsaW5nKHZhbCk7CisjZWxzZQorICAgICAgcV9zY2FsZV9mYWN0b3JbdGJsbm9dID0ganBlZ19xdWFsaXR5X3NjYWxpbmcodmFsKTsKKyNlbmRpZgogICAgICAgd2hpbGUgKCphcmcgJiYgKmFyZysrICE9ICcsJykgLyogYWR2YW5jZSB0byBuZXh0IHNlZ21lbnQgb2YgYXJnIHN0cmluZyAqLwogCTsKICAgICB9IGVsc2UgewogICAgICAgLyogcmVhY2hlZCBlbmQgb2YgcGFyYW1ldGVyLCBzZXQgcmVtYWluaW5nIGZhY3RvcnMgdG8gbGFzdCB2YWx1ZSAqLworI2lmIEpQRUdfTElCX1ZFUlNJT04gPj0gNzAKICAgICAgIGNpbmZvLT5xX3NjYWxlX2ZhY3Rvclt0Ymxub10gPSBqcGVnX3F1YWxpdHlfc2NhbGluZyh2YWwpOworI2Vsc2UKKyAgICAgIHFfc2NhbGVfZmFjdG9yW3RibG5vXSA9IGpwZWdfcXVhbGl0eV9zY2FsaW5nKHZhbCk7CisjZW5kaWYKICAgICB9CiAgIH0KICAganBlZ19kZWZhdWx0X3F0YWJsZXMoY2luZm8sIGZvcmNlX2Jhc2VsaW5lKTsKZGlmZiAtLWdpdCBhL3JlbGVhc2UvRGVzY3JpcHRpb24ucGxpc3QuaW4gYi9yZWxlYXNlL0Rlc2NyaXB0aW9uLnBsaXN0LmluCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmFkY2EzZWMKLS0tIC9kZXYvbnVsbAorKysgYi9yZWxlYXNlL0Rlc2NyaXB0aW9uLnBsaXN0LmluCkBAIC0wLDAgKzEsMTIgQEAKKzw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Cis8IURPQ1RZUEUgcGxpc3QgUFVCTElDICItLy9BcHBsZS8vRFREIFBMSVNUIDEuMC8vRU4iICJodHRwOi8vd3d3LmFwcGxlLmNvbS9EVERzL1Byb3BlcnR5TGlzdC0xLjAuZHRkIj4KKzxwbGlzdCB2ZXJzaW9uPSIxLjAiPgorPGRpY3Q+CisJPGtleT5JRlBrZ0Rlc2NyaXB0aW9uRGVzY3JpcHRpb248L2tleT4KKwk8c3RyaW5nPkEgU0lNRC1hY2NlbGVyYXRlZCBKUEVHIGNvZGVjIHdoaWNoIHByb3ZpZGVzIGJvdGggdGhlIGxpYmpwZWcgYW5kIFR1cmJvSlBFRyBBUElzPC9zdHJpbmc+CisJPGtleT5JRlBrZ0Rlc2NyaXB0aW9uVGl0bGU8L2tleT4KKwk8c3RyaW5nPkBQQUNLQUdFX05BTUVAPC9zdHJpbmc+CisJPGtleT5JRlBrZ0Rlc2NyaXB0aW9uVmVyc2lvbjwva2V5PgorCTxzdHJpbmc+QFZFUlNJT05APC9zdHJpbmc+Cis8L2RpY3Q+Cis8L3BsaXN0PgpkaWZmIC0tZ2l0IGEvcmVsZWFzZS9JbmZvLnBsaXN0LmluIGIvcmVsZWFzZS9JbmZvLnBsaXN0LmluCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjA1NzUwNzkKLS0tIC9kZXYvbnVsbAorKysgYi9yZWxlYXNlL0luZm8ucGxpc3QuaW4KQEAgLTAsMCArMSw0NCBAQAorPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KKzwhRE9DVFlQRSBwbGlzdCBQVUJMSUMgIi0vL0FwcGxlIENvbXB1dGVyLy9EVEQgUExJU1QgMS4wLy9FTiIgImh0dHA6Ly93d3cuYXBwbGUuY29tL0RURHMvUHJvcGVydHlMaXN0LTEuMC5kdGQiPgorPHBsaXN0IHZlcnNpb249IjEuMCI+Cis8ZGljdD4KKwk8a2V5PkNGQnVuZGxlR2V0SW5mb1N0cmluZzwva2V5PgorCTxzdHJpbmc+QFZFUlNJT05ALCBUaGUgbGlianBlZy10dXJibyBQcm9qZWN0PC9zdHJpbmc+CisJPGtleT5DRkJ1bmRsZUlkZW50aWZpZXI8L2tleT4KKwk8c3RyaW5nPmNvbS5saWJqcGVnLXR1cmJvLmxpYmpwZWctdHVyYm88L3N0cmluZz4KKwk8a2V5PkNGQnVuZGxlU2hvcnRWZXJzaW9uU3RyaW5nPC9rZXk+CisJPHN0cmluZz5AVkVSU0lPTkA8L3N0cmluZz4KKwk8a2V5PklGTWFqb3JWZXJzaW9uPC9rZXk+CisJPGludGVnZXI+MTwvaW50ZWdlcj4KKwk8a2V5PklGTWlub3JWZXJzaW9uPC9rZXk+CisJPGludGVnZXI+QEJVSUxEQDwvaW50ZWdlcj4KKwk8a2V5PklGUGtnRmxhZ0FsbG93QmFja1Jldjwva2V5PgorCTxmYWxzZS8+CisJPGtleT5JRlBrZ0ZsYWdBdXRob3JpemF0aW9uQWN0aW9uPC9rZXk+CisJPHN0cmluZz5BZG1pbkF1dGhvcml6YXRpb248L3N0cmluZz4KKwk8a2V5PklGUGtnRmxhZ0JhY2tncm91bmRBbGlnbm1lbnQ8L2tleT4KKwk8c3RyaW5nPnRvcGxlZnQ8L3N0cmluZz4KKwk8a2V5PklGUGtnRmxhZ0JhY2tncm91bmRTY2FsaW5nPC9rZXk+CisJPHN0cmluZz5ub25lPC9zdHJpbmc+CisJPGtleT5JRlBrZ0ZsYWdEZWZhdWx0TG9jYXRpb248L2tleT4KKwk8c3RyaW5nPi88L3N0cmluZz4KKwk8a2V5PklGUGtnRmxhZ0ZvbGxvd0xpbmtzPC9rZXk+CisJPHRydWUvPgorCTxrZXk+SUZQa2dGbGFnSW5zdGFsbEZhdDwva2V5PgorCTxmYWxzZS8+CisJPGtleT5JRlBrZ0ZsYWdJc1JlcXVpcmVkPC9rZXk+CisJPGZhbHNlLz4KKwk8a2V5PklGUGtnRmxhZ092ZXJ3cml0ZVBlcm1pc3Npb25zPC9rZXk+CisJPGZhbHNlLz4KKwk8a2V5PklGUGtnRmxhZ1JlbG9jYXRhYmxlPC9rZXk+CisJPGZhbHNlLz4KKwk8a2V5PklGUGtnRmxhZ1Jlc3RhcnRBY3Rpb248L2tleT4KKwk8c3RyaW5nPk5vUmVzdGFydDwvc3RyaW5nPgorCTxrZXk+SUZQa2dGbGFnUm9vdFZvbHVtZU9ubHk8L2tleT4KKwk8dHJ1ZS8+CisJPGtleT5JRlBrZ0ZsYWdVcGRhdGVJbnN0YWxsZWRMYW5ndWFnZXM8L2tleT4KKwk8ZmFsc2UvPgorCTxrZXk+SUZQa2dGb3JtYXRWZXJzaW9uPC9rZXk+CisJPHJlYWw+MC4xMDAwMDAwMDE0OTAxMTYxMjwvcmVhbD4KKzwvZGljdD4KKzwvcGxpc3Q+CmRpZmYgLS1naXQgYS9yZWxlYXNlL0xpY2Vuc2UucnRmIGIvcmVsZWFzZS9MaWNlbnNlLnJ0ZgpuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi4zMGQxNWE1Ci0tLSAvZGV2L251bGwKKysrIGIvcmVsZWFzZS9MaWNlbnNlLnJ0ZgpAQCAtMCwwICsxLDQ2NSBAQAore1xydGYxXG1hY1xhbnNpY3BnMTAwMDBcY29jb2FydGY4MjRcY29jb2FzdWJydGY0NzAKK3tcZm9udHRibFxmMFxmc3dpc3NcZmNoYXJzZXQ3NyBIZWx2ZXRpY2E7XGYxXGZuaWxcZmNoYXJzZXQ3NyBBbmRhbGVNb25vO1xmMlxmcm9tYW5cZmNoYXJzZXQ3NyBUaW1lc05ld1JvbWFuUFNNVDsKK30KK3tcY29sb3J0Ymw7XHJlZDI1NVxncmVlbjI1NVxibHVlMjU1O30KK1xtYXJnbDE0NDBcbWFyZ3IxNDQwXHZpZXd3OTAwMFx2aWV3aDg0MDBcdmlld2tpbmQwCitcZGVmdGFiNzIwCitccGFyZFxwYXJkZWZ0YWI3MjBccWMKKworXGYwXGZzMjQgXGNmMCB3eFdpbmRvd3MgTGlicmFyeSBMaWNlbmNlLCBWZXJzaW9uIDMuMVwKK1xwYXJkXHBhcmRlZnRhYjcyMFxxbFxxbmF0dXJhbAorXGNmMCBcCitccGFyZFxwYXJkZWZ0YWI3MjBccWMKK1xjZjAgQ29weXJpZ2h0IChDKSAxOTk4LTIwMDUgSnVsaWFuIFNtYXJ0LCBSb2JlcnQgUm9lYmxpbmcgZXQgYWxcCitccGFyZFxwYXJkZWZ0YWI3MjBccWxccW5hdHVyYWwKK1xjZjAgXAorXHBhcmRccGFyZGVmdGFiNzIwXHFjCitcY2YwIEV2ZXJ5b25lIGlzIHBlcm1pdHRlZCB0byBjb3B5IGFuZCBkaXN0cmlidXRlIHZlcmJhdGltIGNvcGllcyBvZiB0aGlzIGxpY2VuY2UgZG9jdW1lbnQsIGJ1dCBjaGFuZ2luZyBpdCBpcyBub3QgYWxsb3dlZC5cCitccGFyZFxwYXJkZWZ0YWI3MjBccWxccW5hdHVyYWwKK1xjZjAgXAorXHBhcmRccGFyZGVmdGFiNzIwXHFjCitcY2YwIFdYV0lORE9XUyBMSUJSQVJZIExJQ0VOQ0VcdWMwXHU4MjMyIFRFUk1TIEFORCBDT05ESVRJT05TIEZPUiBDT1BZSU5HLFx1ODIzMiBESVNUUklCVVRJT04gQU5EIE1PRElGSUNBVElPTlwKK1xwYXJkXHBhcmRlZnRhYjcyMFxxbFxxbmF0dXJhbAorCitcZjEgXGNmMCBcCitccGFyZFxwYXJkZWZ0YWI3MjBccWxccW5hdHVyYWwKKworXGYwIFxjZjAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbmNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbmNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLlwKK1xwYXJkXHBhcmRlZnRhYjcyMFxxbFxxbmF0dXJhbAorCitcZjEgXGNmMCAgIFwKK1xwYXJkXHBhcmRlZnRhYjcyMFxxbFxxbmF0dXJhbAorCitcZjAgXGNmMCBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbmNlIGZvciBtb3JlIGRldGFpbHMuCitcZjIgXAorXHBhcmRccGFyZGVmdGFiNzIwXHFsXHFuYXR1cmFsCisKK1xmMSBcY2YwIFwKK1xwYXJkXHBhcmRlZnRhYjcyMFxxbFxxbmF0dXJhbAorCitcZjAgXGNmMCBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbmNlIGFsb25nIHdpdGggdGhpcyBzb2Z0d2FyZSwgdXN1YWxseSBpbiBhIGZpbGUgbmFtZWQgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sIE1BIDAyMTExLTEzMDcgVVNBLgorXGYxIFwKK1wKKworXGYwIEVYQ0VQVElPTiBOT1RJQ0UKK1xmMSBcCitcCisKK1xmMCAxLiBBcyBhIHNwZWNpYWwgZXhjZXB0aW9uLCB0aGUgY29weXJpZ2h0IGhvbGRlcnMgb2YgdGhpcyBsaWJyYXJ5IGdpdmUgcGVybWlzc2lvbiBmb3IgYWRkaXRpb25hbCB1c2VzIG9mIHRoZSB0ZXh0IGNvbnRhaW5lZCBpbiB0aGlzIHJlbGVhc2Ugb2YgdGhlIGxpYnJhcnkgYXMgbGljZW5jZWQgdW5kZXIgdGhlIHd4V2luZG93cyBMaWJyYXJ5IExpY2VuY2UsIGFwcGx5aW5nIGVpdGhlciB2ZXJzaW9uIDMuMSBvZiB0aGUgTGljZW5jZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbiBvZiB0aGUgTGljZW5jZSBhcyBwdWJsaXNoZWQgYnkgdGhlIGNvcHlyaWdodCBob2xkZXJzIG9mIHZlcnNpb24gMy4xIG9mIHRoZSBMaWNlbmNlIGRvY3VtZW50LlwKK1xwYXJkXHBhcmRlZnRhYjcyMFxxbFxxbmF0dXJhbAorCitcZjEgXGNmMCBcCitccGFyZFxwYXJkZWZ0YWI3MjBccWxccW5hdHVyYWwKKworXGYwIFxjZjAgMi4gVGhlIGV4Y2VwdGlvbiBpcyB0aGF0IHlvdSBtYXkgdXNlLCBjb3B5LCBsaW5rLCBtb2RpZnkgYW5kIGRpc3RyaWJ1dGUgdW5kZXIgeW91ciBvd24gdGVybXMsIGJpbmFyeSBvYmplY3QgY29kZSB2ZXJzaW9ucyBvZiB3b3JrcyBiYXNlZCBvbiB0aGUgTGlicmFyeS4KK1xmMSBcCitcCisKK1xmMCAzLiBJZiB5b3UgY29weSBjb2RlIGZyb20gZmlsZXMgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5jZSBvciB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5jZSBpbnRvIGEgY29weSBvZiB0aGlzIGxpYnJhcnksIGFzIHRoaXMgbGljZW5jZSBwZXJtaXRzLCB0aGUgZXhjZXB0aW9uIGRvZXMgbm90IGFwcGx5IHRvIHRoZSBjb2RlIHRoYXQgeW91IGFkZCBpbiB0aGlzIHdheS4gIFRvIGF2b2lkIG1pc2xlYWRpbmcgYW55b25lIGFzIHRvIHRoZSBzdGF0dXMgb2Ygc3VjaCBtb2RpZmllZCBmaWxlcywgeW91IG11c3QgZGVsZXRlIHRoaXMgZXhjZXB0aW9uIG5vdGljZSBmcm9tIHN1Y2ggY29kZSBhbmQvb3IgYWRqdXN0IHRoZSBsaWNlbnNpbmcgY29uZGl0aW9ucyBub3RpY2UgYWNjb3JkaW5nbHkuCitcZjEgXAorXAorCitcZjAgNC4gSWYgeW91IHdyaXRlIG1vZGlmaWNhdGlvbnMgb2YgeW91ciBvd24gZm9yIHRoaXMgbGlicmFyeSwgaXQgaXMgeW91ciBjaG9pY2Ugd2hldGhlciB0byBwZXJtaXQgdGhpcyBleGNlcHRpb24gdG8gYXBwbHkgdG8geW91ciBtb2RpZmljYXRpb25zLiAgSWYgeW91IGRvIG5vdCB3aXNoIHRoYXQsIHlvdSBtdXN0IGRlbGV0ZSB0aGUgZXhjZXB0aW9uIG5vdGljZSBmcm9tIHN1Y2ggY29kZSBhbmQvb3IgYWRqdXN0IHRoZSBsaWNlbnNpbmcgY29uZGl0aW9ucyBub3RpY2UgYWNjb3JkaW5nbHkuCitcZjEgXAorXAorXAorXAorXAorXAorXHBhcmRccGFyZGVmdGFiNzIwXHFjCisKK1xmMCBcY2YwIEdOVSBMRVNTRVIgR0VORVJBTCBQVUJMSUMgTElDRU5TRVx1YzBcdTgyMzIgVmVyc2lvbiAyLjEsIEZlYnJ1YXJ5IDE5OTlcCitccGFyZFxwYXJkZWZ0YWI3MjBccWxccW5hdHVyYWwKK1xjZjAgXAorXHBhcmRccGFyZGVmdGFiNzIwXHFjCitcY2YwIENvcHlyaWdodCAoQykgMTk5MSwgMTk5OSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy5cdWMwXHU4MjMyIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sIE1BICAwMjExMS0xMzA3ICBVU0FcCitccGFyZFxwYXJkZWZ0YWI3MjBccWxccW5hdHVyYWwKK1xjZjAgXAorRXZlcnlvbmUgaXMgcGVybWl0dGVkIHRvIGNvcHkgYW5kIGRpc3RyaWJ1dGUgdmVyYmF0aW0gY29waWVzIG9mIHRoaXMgbGljZW5zZSBkb2N1bWVudCwgYnV0IGNoYW5naW5nIGl0IGlzIG5vdCBhbGxvd2VkLlwKK1wKK1tUaGlzIGlzIHRoZSBmaXJzdCByZWxlYXNlZCB2ZXJzaW9uIG9mIHRoZSBMZXNzZXIgR1BMLiAgSXQgYWxzbyBjb3VudHMgYXMgdGhlIHN1Y2Nlc3NvciBvZiB0aGUgR05VIExpYnJhcnkgUHVibGljIExpY2Vuc2UsIHZlcnNpb24gMiwgaGVuY2UgdGhlIHZlcnNpb24gbnVtYmVyIDIuMS5dCitcZjEgXAorXAorXHBhcmRccGFyZGVmdGFiNzIwXHFjCisKK1xmMCBcY2YwIFByZWFtYmxlXAorXHBhcmRccGFyZGVmdGFiNzIwXHFsXHFuYXR1cmFsCisKK1xmMSBcY2YwIFwKK1xwYXJkXHBhcmRlZnRhYjcyMFxxbFxxbmF0dXJhbAorCitcZjAgXGNmMCBUaGUgbGljZW5zZXMgZm9yIG1vc3Qgc29mdHdhcmUgYXJlIGRlc2lnbmVkIHRvIHRha2UgYXdheSB5b3VyIGZyZWVkb20gdG8gc2hhcmUgYW5kIGNoYW5nZSBpdC4gIEJ5IGNvbnRyYXN0LCB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2VzIGFyZSBpbnRlbmRlZCB0byBndWFyYW50ZWUgeW91ciBmcmVlZG9tIHRvIHNoYXJlIGFuZCBjaGFuZ2UgZnJlZSBzb2Z0d2FyZS0tdG8gbWFrZSBzdXJlIHRoZSBzb2Z0d2FyZSBpcyBmcmVlIGZvciBhbGwgaXRzIHVzZXJzLlwKK1xwYXJkXHBhcmRlZnRhYjcyMFxxbFxxbmF0dXJhbAorCitcZjEgXGNmMCBcCitccGFyZFxwYXJkZWZ0YWI3MjBccWxccW5hdHVyYWwKKworXGYwIFxjZjAgVGhpcyBsaWNlbnNlLCB0aGUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UsIGFwcGxpZXMgdG8gc29tZSBzcGVjaWFsbHkgZGVzaWduYXRlZCBzb2Z0d2FyZSBwYWNrYWdlcy0tdHlwaWNhbGx5IGxpYnJhcmllcy0tb2YgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiBhbmQgb3RoZXIgYXV0aG9ycyB3aG8gZGVjaWRlIHRvIHVzZSBpdC4gIFlvdSBjYW4gdXNlIGl0IHRvbywgYnV0IHdlIHN1Z2dlc3QgeW91IGZpcnN0IHRoaW5rIGNhcmVmdWxseSBhYm91dCB3aGV0aGVyIHRoaXMgbGljZW5zZSBvciB0aGUgb3JkaW5hcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBpcyB0aGUgYmV0dGVyIHN0cmF0ZWd5IHRvIHVzZSBpbiBhbnkgcGFydGljdWxhciBjYXNlLCBiYXNlZCBvbiB0aGUgZXhwbGFuYXRpb25zIGJlbG93LgorXGYxIFwKK1wKKworXGYwIFdoZW4gd2Ugc3BlYWsgb2YgZnJlZSBzb2Z0d2FyZSwgd2UgYXJlIHJlZmVycmluZyB0byBmcmVlZG9tIG9mIHVzZSwgbm90IHByaWNlLiAgT3VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2VzIGFyZSBkZXNpZ25lZCB0byBtYWtlIHN1cmUgdGhhdCB5b3UgaGF2ZSB0aGUgZnJlZWRvbSB0byBkaXN0cmlidXRlIGNvcGllcyBvZiBmcmVlIHNvZnR3YXJlIChhbmQgY2hhcmdlIGZvciB0aGlzIHNlcnZpY2UgaWYgeW91IHdpc2gpOyB0aGF0IHlvdSByZWNlaXZlIHNvdXJjZSBjb2RlIG9yIGNhbiBnZXQgaXQgaWYgeW91IHdhbnQgaXQ7IHRoYXQgeW91IGNhbiBjaGFuZ2UgdGhlIHNvZnR3YXJlIGFuZCB1c2UgcGllY2VzIG9mIGl0IGluIG5ldyBmcmVlIHByb2dyYW1zOyBhbmQgdGhhdCB5b3UgYXJlIGluZm9ybWVkIHRoYXQgeW91IGNhbiBkbyB0aGVzZSB0aGluZ3MuCitcZjEgXAorXAorCitcZjAgVG8gcHJvdGVjdCB5b3VyIHJpZ2h0cywgd2UgbmVlZCB0byBtYWtlIHJlc3RyaWN0aW9ucyB0aGF0IGZvcmJpZCBkaXN0cmlidXRvcnMgdG8gZGVueSB5b3UgdGhlc2UgcmlnaHRzIG9yIHRvIGFzayB5b3UgdG8gc3VycmVuZGVyIHRoZXNlIHJpZ2h0cy4gIFRoZXNlIHJlc3RyaWN0aW9ucyB0cmFuc2xhdGUgdG8gY2VydGFpbiByZXNwb25zaWJpbGl0aWVzIGZvciB5b3UgaWYgeW91IGRpc3RyaWJ1dGUgY29waWVzIG9mIHRoZSBsaWJyYXJ5IG9yIGlmIHlvdSBtb2RpZnkgaXQuCitcZjEgXAorXAorCitcZjAgRm9yIGV4YW1wbGUsIGlmIHlvdSBkaXN0cmlidXRlIGNvcGllcyBvZiB0aGUgbGlicmFyeSwgd2hldGhlciBncmF0aXMgb3IgZm9yIGEgZmVlLCB5b3UgbXVzdCBnaXZlIHRoZSByZWNpcGllbnRzIGFsbCB0aGUgcmlnaHRzIHRoYXQgd2UgZ2F2ZSB5b3UuICBZb3UgbXVzdCBtYWtlIHN1cmUgdGhhdCB0aGV5LCB0b28sIHJlY2VpdmUgb3IgY2FuIGdldCB0aGUgc291cmNlIGNvZGUuICBJZiB5b3UgbGluayBvdGhlciBjb2RlIHdpdGggdGhlIGxpYnJhcnksIHlvdSBtdXN0IHByb3ZpZGUgY29tcGxldGUgb2JqZWN0IGZpbGVzIHRvIHRoZSByZWNpcGllbnRzLCBzbyB0aGF0IHRoZXkgY2FuIHJlbGluayB0aGVtIHdpdGggdGhlIGxpYnJhcnkgYWZ0ZXIgbWFraW5nIGNoYW5nZXMgdG8gdGhlIGxpYnJhcnkgYW5kIHJlY29tcGlsaW5nIGl0LiAgQW5kIHlvdSBtdXN0IHNob3cgdGhlbSB0aGVzZSB0ZXJtcyBzbyB0aGV5IGtub3cgdGhlaXIgcmlnaHRzLgorXGYxIFwKK1wKKworXGYwIFdlIHByb3RlY3QgeW91ciByaWdodHMgd2l0aCBhIHR3by1zdGVwIG1ldGhvZDogKDEpIHdlIGNvcHlyaWdodCB0aGUgbGlicmFyeSwgYW5kICgyKSB3ZSBvZmZlciB5b3UgdGhpcyBsaWNlbnNlLCB3aGljaCBnaXZlcyB5b3UgbGVnYWwgcGVybWlzc2lvbiB0byBjb3B5LCBkaXN0cmlidXRlIGFuZC9vciBtb2RpZnkgdGhlIGxpYnJhcnkuCitcZjEgXAorXAorCitcZjAgVG8gcHJvdGVjdCBlYWNoIGRpc3RyaWJ1dG9yLCB3ZSB3YW50IHRvIG1ha2UgaXQgdmVyeSBjbGVhciB0aGF0IHRoZXJlIGlzIG5vIHdhcnJhbnR5IGZvciB0aGUgZnJlZSBsaWJyYXJ5LiAgQWxzbywgaWYgdGhlIGxpYnJhcnkgaXMgbW9kaWZpZWQgYnkgc29tZW9uZSBlbHNlIGFuZCBwYXNzZWQgb24sIHRoZSByZWNpcGllbnRzIHNob3VsZCBrbm93IHRoYXQgd2hhdCB0aGV5IGhhdmUgaXMgbm90IHRoZSBvcmlnaW5hbCB2ZXJzaW9uLCBzbyB0aGF0IHRoZSBvcmlnaW5hbCBhdXRob3IncyByZXB1dGF0aW9uIHdpbGwgbm90IGJlIGFmZmVjdGVkIGJ5IHByb2JsZW1zIHRoYXQgbWlnaHQgYmUgaW50cm9kdWNlZCBieSBvdGhlcnMuCitcZjEgXAorXHBhZ2UgCitcZjAgXAorRmluYWxseSwgc29mdHdhcmUgcGF0ZW50cyBwb3NlIGEgY29uc3RhbnQgdGhyZWF0IHRvIHRoZSBleGlzdGVuY2Ugb2YgYW55IGZyZWUgcHJvZ3JhbS4gIFdlIHdpc2ggdG8gbWFrZSBzdXJlIHRoYXQgYSBjb21wYW55IGNhbm5vdCBlZmZlY3RpdmVseSByZXN0cmljdCB0aGUgdXNlcnMgb2YgYSBmcmVlIHByb2dyYW0gYnkgb2J0YWluaW5nIGEgcmVzdHJpY3RpdmUgbGljZW5zZSBmcm9tIGEgcGF0ZW50IGhvbGRlci4gIFRoZXJlZm9yZSwgd2UgaW5zaXN0IHRoYXQgYW55IHBhdGVudCBsaWNlbnNlIG9idGFpbmVkIGZvciBhIHZlcnNpb24gb2YgdGhlIGxpYnJhcnkgbXVzdCBiZSBjb25zaXN0ZW50IHdpdGggdGhlIGZ1bGwgZnJlZWRvbSBvZiB1c2Ugc3BlY2lmaWVkIGluIHRoaXMgbGljZW5zZS5cCitccGFyZFxwYXJkZWZ0YWI3MjBccWxccW5hdHVyYWwKKworXGYxIFxjZjAgXAorXHBhcmRccGFyZGVmdGFiNzIwXHFsXHFuYXR1cmFsCisKK1xmMCBcY2YwIE1vc3QgR05VIHNvZnR3YXJlLCBpbmNsdWRpbmcgc29tZSBsaWJyYXJpZXMsIGlzIGNvdmVyZWQgYnkgdGhlIG9yZGluYXJ5IEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLiAgVGhpcyBsaWNlbnNlLCB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLCBhcHBsaWVzIHRvIGNlcnRhaW4gZGVzaWduYXRlZCBsaWJyYXJpZXMsIGFuZCBpcyBxdWl0ZSBkaWZmZXJlbnQgZnJvbSB0aGUgb3JkaW5hcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZS4gIFdlIHVzZSB0aGlzIGxpY2Vuc2UgZm9yIGNlcnRhaW4gbGlicmFyaWVzIGluIG9yZGVyIHRvIHBlcm1pdCBsaW5raW5nIHRob3NlIGxpYnJhcmllcyBpbnRvIG5vbi1mcmVlIHByb2dyYW1zLgorXGYxIFwKK1wKKworXGYwIFdoZW4gYSBwcm9ncmFtIGlzIGxpbmtlZCB3aXRoIGEgbGlicmFyeSwgd2hldGhlciBzdGF0aWNhbGx5IG9yIHVzaW5nIGEgc2hhcmVkIGxpYnJhcnksIHRoZSBjb21iaW5hdGlvbiBvZiB0aGUgdHdvIGlzIGxlZ2FsbHkgc3BlYWtpbmcgYSBjb21iaW5lZCB3b3JrLCBhIGRlcml2YXRpdmUgb2YgdGhlIG9yaWdpbmFsIGxpYnJhcnkuICBUaGUgb3JkaW5hcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB0aGVyZWZvcmUgcGVybWl0cyBzdWNoIGxpbmtpbmcgb25seSBpZiB0aGUgZW50aXJlIGNvbWJpbmF0aW9uIGZpdHMgaXRzIGNyaXRlcmlhIG9mIGZyZWVkb20uICBUaGUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgcGVybWl0cyBtb3JlIGxheCBjcml0ZXJpYSBmb3IgbGlua2luZyBvdGhlciBjb2RlIHdpdGggdGhlIGxpYnJhcnkuCitcZjEgXAorXAorCitcZjAgV2UgY2FsbCB0aGlzIGxpY2Vuc2UgdGhlICJMZXNzZXIiIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYmVjYXVzZSBpdCBkb2VzIExlc3MgdG8gcHJvdGVjdCB0aGUgdXNlcidzIGZyZWVkb20gdGhhbiB0aGUgb3JkaW5hcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZS4gIEl0IGFsc28gcHJvdmlkZXMgb3RoZXIgZnJlZSBzb2Z0d2FyZSBkZXZlbG9wZXJzIExlc3Mgb2YgYW4gYWR2YW50YWdlIG92ZXIgY29tcGV0aW5nIG5vbi1mcmVlIHByb2dyYW1zLiAgVGhlc2UgZGlzYWR2YW50YWdlcyBhcmUgdGhlIHJlYXNvbiB3ZSB1c2UgdGhlIG9yZGluYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1hbnkgbGlicmFyaWVzLiAgSG93ZXZlciwgdGhlIExlc3NlciBsaWNlbnNlIHByb3ZpZGVzIGFkdmFudGFnZXMgaW4gY2VydGFpbiBzcGVjaWFsIGNpcmN1bXN0YW5jZXMuCitcZjEgXAorXAorCitcZjAgRm9yIGV4YW1wbGUsIG9uIHJhcmUgb2NjYXNpb25zLCB0aGVyZSBtYXkgYmUgYSBzcGVjaWFsIG5lZWQgdG8gZW5jb3VyYWdlIHRoZSB3aWRlc3QgcG9zc2libGUgdXNlIG9mIGEgY2VydGFpbiBsaWJyYXJ5LCBzbyB0aGF0IGl0IGJlY29tZXMgYSBkZS1mYWN0byBzdGFuZGFyZC4gIFRvIGFjaGlldmUgdGhpcywgbm9uLWZyZWUgcHJvZ3JhbXMgbXVzdCBiZSBhbGxvd2VkIHRvIHVzZSB0aGUgbGlicmFyeS4gIEEgbW9yZSBmcmVxdWVudCBjYXNlIGlzIHRoYXQgYSBmcmVlIGxpYnJhcnkgZG9lcyB0aGUgc2FtZSBqb2IgYXMgd2lkZWx5IHVzZWQgbm9uLWZyZWUgbGlicmFyaWVzLiAgSW4gdGhpcyBjYXNlLCB0aGVyZSBpcyBsaXR0bGUgdG8gZ2FpbiBieSBsaW1pdGluZyB0aGUgZnJlZSBsaWJyYXJ5IHRvIGZyZWUgc29mdHdhcmUgb25seSwgc28gd2UgdXNlIHRoZSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZS4KK1xmMSBcCitcCisKK1xmMCBJbiBvdGhlciBjYXNlcywgcGVybWlzc2lvbiB0byB1c2UgYSBwYXJ0aWN1bGFyIGxpYnJhcnkgaW4gbm9uLWZyZWUgcHJvZ3JhbXMgZW5hYmxlcyBhIGdyZWF0ZXIgbnVtYmVyIG9mIHBlb3BsZSB0byB1c2UgYSBsYXJnZSBib2R5IG9mIGZyZWUgc29mdHdhcmUuICBGb3IgZXhhbXBsZSwgcGVybWlzc2lvbiB0byB1c2UgdGhlIEdOVSBDIExpYnJhcnkgaW4gbm9uLWZyZWUgcHJvZ3JhbXMgZW5hYmxlcyBtYW55IG1vcmUgcGVvcGxlIHRvIHVzZSB0aGUgd2hvbGUgR05VIG9wZXJhdGluZyBzeXN0ZW0sIGFzIHdlbGwgYXMgaXRzIHZhcmlhbnQsIHRoZSBHTlUvTGludXggb3BlcmF0aW5nIHN5c3RlbS4KK1xmMSBcCitcCisKK1xmMCBBbHRob3VnaCB0aGUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgaXMgTGVzcyBwcm90ZWN0aXZlIG9mIHRoZSB1c2VycycgZnJlZWRvbSwgaXQgZG9lcyBlbnN1cmUgdGhhdCB0aGUgdXNlciBvZiBhIHByb2dyYW0gdGhhdCBpcyBsaW5rZWQgd2l0aCB0aGUgTGlicmFyeSBoYXMgdGhlIGZyZWVkb20gYW5kIHRoZSB3aGVyZXdpdGhhbCB0byBydW4gdGhhdCBwcm9ncmFtIHVzaW5nIGEgbW9kaWZpZWQgdmVyc2lvbiBvZiB0aGUgTGlicmFyeS4KK1xmMSBcCitcCisKK1xmMCBUaGUgcHJlY2lzZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBmb3IgY29weWluZywgZGlzdHJpYnV0aW9uIGFuZCBtb2RpZmljYXRpb24gZm9sbG93LiAgUGF5IGNsb3NlIGF0dGVudGlvbiB0byB0aGUgZGlmZmVyZW5jZSBiZXR3ZWVuIGEgIndvcmsgYmFzZWQgb24gdGhlIGxpYnJhcnkiIGFuZCBhICJ3b3JrIHRoYXQgdXNlcyB0aGUgbGlicmFyeSIuICBUaGUgZm9ybWVyIGNvbnRhaW5zIGNvZGUgZGVyaXZlZCBmcm9tIHRoZSBsaWJyYXJ5LCB3aGVyZWFzIHRoZSBsYXR0ZXIgbXVzdCBiZSBjb21iaW5lZCB3aXRoIHRoZSBsaWJyYXJ5IGluIG9yZGVyIHRvIHJ1bi4KK1xmMSBcCitccGFnZSAKK1xmMCBcCitccGFyZFxwYXJkZWZ0YWI3MjBccWMKK1xjZjAgR05VIExFU1NFUiBHRU5FUkFMIFBVQkxJQyBMSUNFTlNFXHVjMFx1ODIzMiBURVJNUyBBTkQgQ09ORElUSU9OUyBGT1IgQ09QWUlORyxcdTgyMzIgRElTVFJJQlVUSU9OIEFORCBNT0RJRklDQVRJT05cCitccGFyZFxwYXJkZWZ0YWI3MjBccWxccW5hdHVyYWwKKworXGYxIFxjZjAgXAorXHBhcmRccGFyZGVmdGFiNzIwXHFsXHFuYXR1cmFsCisKK1xmMCBcY2YwIDAuIFRoaXMgTGljZW5zZSBBZ3JlZW1lbnQgYXBwbGllcyB0byBhbnkgc29mdHdhcmUgbGlicmFyeSBvciBvdGhlciBwcm9ncmFtIHdoaWNoIGNvbnRhaW5zIGEgbm90aWNlIHBsYWNlZCBieSB0aGUgY29weXJpZ2h0IGhvbGRlciBvciBvdGhlciBhdXRob3JpemVkIHBhcnR5IHNheWluZyBpdCBtYXkgYmUgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoaXMgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgKGFsc28gY2FsbGVkICJ0aGlzIExpY2Vuc2UiKS4gRWFjaCBsaWNlbnNlZSBpcyBhZGRyZXNzZWQgYXMgInlvdSIuXAorXHBhcmRccGFyZGVmdGFiNzIwXHFsXHFuYXR1cmFsCisKK1xmMSBcY2YwIFwKK1xwYXJkXHBhcmRlZnRhYjcyMFxxbFxxbmF0dXJhbAorCitcZjAgXGNmMCBBICJsaWJyYXJ5IiBtZWFucyBhIGNvbGxlY3Rpb24gb2Ygc29mdHdhcmUgZnVuY3Rpb25zIGFuZC9vciBkYXRhIHByZXBhcmVkIHNvIGFzIHRvIGJlIGNvbnZlbmllbnRseSBsaW5rZWQgd2l0aCBhcHBsaWNhdGlvbiBwcm9ncmFtcyAod2hpY2ggdXNlIHNvbWUgb2YgdGhvc2UgZnVuY3Rpb25zIGFuZCBkYXRhKSB0byBmb3JtIGV4ZWN1dGFibGVzLgorXGYxIFwKK1wKKworXGYwIFRoZSAiTGlicmFyeSIsIGJlbG93LCByZWZlcnMgdG8gYW55IHN1Y2ggc29mdHdhcmUgbGlicmFyeSBvciB3b3JrIHdoaWNoIGhhcyBiZWVuIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZXNlIHRlcm1zLiAgQSAid29yayBiYXNlZCBvbiB0aGUgTGlicmFyeSIgbWVhbnMgZWl0aGVyIHRoZSBMaWJyYXJ5IG9yIGFueSBkZXJpdmF0aXZlIHdvcmsgdW5kZXIgY29weXJpZ2h0IGxhdzogdGhhdCBpcyB0byBzYXksIGEgd29yayBjb250YWluaW5nIHRoZSBMaWJyYXJ5IG9yIGEgcG9ydGlvbiBvZiBpdCwgZWl0aGVyIHZlcmJhdGltIG9yIHdpdGggbW9kaWZpY2F0aW9ucyBhbmQvb3IgdHJhbnNsYXRlZCBzdHJhaWdodGZvcndhcmRseSBpbnRvIGFub3RoZXIgbGFuZ3VhZ2UuICAoSGVyZWluYWZ0ZXIsIHRyYW5zbGF0aW9uIGlzIGluY2x1ZGVkIHdpdGhvdXQgbGltaXRhdGlvbiBpbiB0aGUgdGVybSAibW9kaWZpY2F0aW9uIi4pCitcZjEgXAorXAorCitcZjAgIlNvdXJjZSBjb2RlIiBmb3IgYSB3b3JrIG1lYW5zIHRoZSBwcmVmZXJyZWQgZm9ybSBvZiB0aGUgd29yayBmb3IgbWFraW5nIG1vZGlmaWNhdGlvbnMgdG8gaXQuICBGb3IgYSBsaWJyYXJ5LCBjb21wbGV0ZSBzb3VyY2UgY29kZSBtZWFucyBhbGwgdGhlIHNvdXJjZSBjb2RlIGZvciBhbGwgbW9kdWxlcyBpdCBjb250YWlucywgcGx1cyBhbnkgYXNzb2NpYXRlZCBpbnRlcmZhY2UgZGVmaW5pdGlvbiBmaWxlcywgcGx1cyB0aGUgc2NyaXB0cyB1c2VkIHRvIGNvbnRyb2wgY29tcGlsYXRpb24gYW5kIGluc3RhbGxhdGlvbiBvZiB0aGUgbGlicmFyeS4KK1xmMSBcCitcCisKK1xmMCBBY3Rpdml0aWVzIG90aGVyIHRoYW4gY29weWluZywgZGlzdHJpYnV0aW9uIGFuZCBtb2RpZmljYXRpb24gYXJlIG5vdCBjb3ZlcmVkIGJ5IHRoaXMgTGljZW5zZTsgdGhleSBhcmUgb3V0c2lkZSBpdHMgc2NvcGUuICBUaGUgYWN0IG9mIHJ1bm5pbmcgYSBwcm9ncmFtIHVzaW5nIHRoZSBMaWJyYXJ5IGlzIG5vdCByZXN0cmljdGVkLCBhbmQgb3V0cHV0IGZyb20gc3VjaCBhIHByb2dyYW0gaXMgY292ZXJlZCBvbmx5IGlmIGl0cyBjb250ZW50cyBjb25zdGl0dXRlIGEgd29yayBiYXNlZCBvbiB0aGUgTGlicmFyeSAoaW5kZXBlbmRlbnQgb2YgdGhlIHVzZSBvZiB0aGUgTGlicmFyeSBpbiBhIHRvb2wgZm9yIHdyaXRpbmcgaXQpLiAgV2hldGhlciB0aGF0IGlzIHRydWUgZGVwZW5kcyBvbiB3aGF0IHRoZSBMaWJyYXJ5IGRvZXMgYW5kIHdoYXQgdGhlIHByb2dyYW0gdGhhdCB1c2VzIHRoZSBMaWJyYXJ5IGRvZXMuCitcZjEgXAorICBcCisKK1xmMCAxLiBZb3UgbWF5IGNvcHkgYW5kIGRpc3RyaWJ1dGUgdmVyYmF0aW0gY29waWVzIG9mIHRoZSBMaWJyYXJ5J3MgY29tcGxldGUgc291cmNlIGNvZGUgYXMgeW91IHJlY2VpdmUgaXQsIGluIGFueSBtZWRpdW0sIHByb3ZpZGVkIHRoYXQgeW91IGNvbnNwaWN1b3VzbHkgYW5kIGFwcHJvcHJpYXRlbHkgcHVibGlzaCBvbiBlYWNoIGNvcHkgYW4gYXBwcm9wcmlhdGUgY29weXJpZ2h0IG5vdGljZSBhbmQgZGlzY2xhaW1lciBvZiB3YXJyYW50eTsga2VlcCBpbnRhY3QgYWxsIHRoZSBub3RpY2VzIHRoYXQgcmVmZXIgdG8gdGhpcyBMaWNlbnNlIGFuZCB0byB0aGUgYWJzZW5jZSBvZiBhbnkgd2FycmFudHk7IGFuZCBkaXN0cmlidXRlIGEgY29weSBvZiB0aGlzIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGUgTGlicmFyeS4KK1xmMiBcCitccGFyZFxwYXJkZWZ0YWI3MjBccWxccW5hdHVyYWwKKworXGYxIFxjZjAgXAorXHBhcmRccGFyZGVmdGFiNzIwXHFsXHFuYXR1cmFsCisKK1xmMCBcY2YwIFlvdSBtYXkgY2hhcmdlIGEgZmVlIGZvciB0aGUgcGh5c2ljYWwgYWN0IG9mIHRyYW5zZmVycmluZyBhIGNvcHksIGFuZCB5b3UgbWF5IGF0IHlvdXIgb3B0aW9uIG9mZmVyIHdhcnJhbnR5IHByb3RlY3Rpb24gaW4gZXhjaGFuZ2UgZm9yIGEgZmVlLgorXGYxIFwKK1xwYWdlIAorXGYwIFwKKzIuIFlvdSBtYXkgbW9kaWZ5IHlvdXIgY29weSBvciBjb3BpZXMgb2YgdGhlIExpYnJhcnkgb3IgYW55IHBvcnRpb24gb2YgaXQsIHRodXMgZm9ybWluZyBhIHdvcmsgYmFzZWQgb24gdGhlIExpYnJhcnksIGFuZCBjb3B5IGFuZCBkaXN0cmlidXRlIHN1Y2ggbW9kaWZpY2F0aW9ucyBvciB3b3JrIHVuZGVyIHRoZSB0ZXJtcyBvZiBTZWN0aW9uIDEgYWJvdmUsIHByb3ZpZGVkIHRoYXQgeW91IGFsc28gbWVldCBhbGwgb2YgdGhlc2UgY29uZGl0aW9uczpcCitccGFyZFxwYXJkZWZ0YWI3MjBccWxccW5hdHVyYWwKKworXGYxIFxjZjAgXAorXHBhcmRccGFyZGVmdGFiNzIwXGxpNzIwXHJpMFxxbFxxbmF0dXJhbAorCitcZjAgXGNmMCBhKSBUaGUgbW9kaWZpZWQgd29yayBtdXN0IGl0c2VsZiBiZSBhIHNvZnR3YXJlIGxpYnJhcnkuXAorXHBhcmRccGFyZGVmdGFiNzIwXHFsXHFuYXR1cmFsCitcY2YwIFwKK1xwYXJkXHBhcmRlZnRhYjcyMFxsaTcyMFxyaTBccWxccW5hdHVyYWwKK1xjZjAgYikgWW91IG11c3QgY2F1c2UgdGhlIGZpbGVzIG1vZGlmaWVkIHRvIGNhcnJ5IHByb21pbmVudCBub3RpY2VzIHN0YXRpbmcgdGhhdCB5b3UgY2hhbmdlZCB0aGUgZmlsZXMgYW5kIHRoZSBkYXRlIG9mIGFueSBjaGFuZ2UuXAorXHBhcmRccGFyZGVmdGFiNzIwXHFsXHFuYXR1cmFsCitcY2YwIFwKK1xwYXJkXHBhcmRlZnRhYjcyMFxsaTcyMFxyaTBccWxccW5hdHVyYWwKK1xjZjAgYykgWW91IG11c3QgY2F1c2UgdGhlIHdob2xlIG9mIHRoZSB3b3JrIHRvIGJlIGxpY2Vuc2VkIGF0IG5vIGNoYXJnZSB0byBhbGwgdGhpcmQgcGFydGllcyB1bmRlciB0aGUgdGVybXMgb2YgdGhpcyBMaWNlbnNlLlwKK1xwYXJkXHBhcmRlZnRhYjcyMFxxbFxxbmF0dXJhbAorXGNmMCBcCitccGFyZFxwYXJkZWZ0YWI3MjBcbGk3MjBccmkwXHFsXHFuYXR1cmFsCitcY2YwIGQpIElmIGEgZmFjaWxpdHkgaW4gdGhlIG1vZGlmaWVkIExpYnJhcnkgcmVmZXJzIHRvIGEgZnVuY3Rpb24gb3IgYSB0YWJsZSBvZiBkYXRhIHRvIGJlIHN1cHBsaWVkIGJ5IGFuIGFwcGxpY2F0aW9uIHByb2dyYW0gdGhhdCB1c2VzIHRoZSBmYWNpbGl0eSwgb3RoZXIgdGhhbiBhcyBhbiBhcmd1bWVudCBwYXNzZWQgd2hlbiB0aGUgZmFjaWxpdHkgaXMgaW52b2tlZCwgdGhlbiB5b3UgbXVzdCBtYWtlIGEgZ29vZCBmYWl0aCBlZmZvcnQgdG8gZW5zdXJlIHRoYXQsIGluIHRoZSBldmVudCBhbiBhcHBsaWNhdGlvbiBkb2VzIG5vdCBzdXBwbHkgc3VjaCBmdW5jdGlvbiBvciB0YWJsZSwgdGhlIGZhY2lsaXR5IHN0aWxsIG9wZXJhdGVzLCBhbmQgcGVyZm9ybXMgd2hhdGV2ZXIgcGFydCBvZiBpdHMgcHVycG9zZSByZW1haW5zIG1lYW5pbmdmdWwuXAorXHBhcmRccGFyZGVmdGFiNzIwXHFsXHFuYXR1cmFsCisKK1xmMSBcY2YwIFwKK1xwYXJkXHBhcmRlZnRhYjcyMFxxbFxxbmF0dXJhbAorCitcZjAgXGNmMCAoRm9yIGV4YW1wbGUsIGEgZnVuY3Rpb24gaW4gYSBsaWJyYXJ5IHRvIGNvbXB1dGUgc3F1YXJlIHJvb3RzIGhhcyBhIHB1cnBvc2UgdGhhdCBpcyBlbnRpcmVseSB3ZWxsLWRlZmluZWQgaW5kZXBlbmRlbnQgb2YgdGhlIGFwcGxpY2F0aW9uLiAgVGhlcmVmb3JlLCBTdWJzZWN0aW9uIDJkIHJlcXVpcmVzIHRoYXQgYW55IGFwcGxpY2F0aW9uLXN1cHBsaWVkIGZ1bmN0aW9uIG9yIHRhYmxlIHVzZWQgYnkgdGhpcyBmdW5jdGlvbiBtdXN0IGJlIG9wdGlvbmFsOiBpZiB0aGUgYXBwbGljYXRpb24gZG9lcyBub3Qgc3VwcGx5IGl0LCB0aGUgc3F1YXJlIHJvb3QgZnVuY3Rpb24gbXVzdCBzdGlsbCBjb21wdXRlIHNxdWFyZSByb290cy4pCitcZjEgXAorXAorCitcZjAgVGhlc2UgcmVxdWlyZW1lbnRzIGFwcGx5IHRvIHRoZSBtb2RpZmllZCB3b3JrIGFzIGEgd2hvbGUuICBJZiBpZGVudGlmaWFibGUgc2VjdGlvbnMgb2YgdGhhdCB3b3JrIGFyZSBub3QgZGVyaXZlZCBmcm9tIHRoZSBMaWJyYXJ5LCBhbmQgY2FuIGJlIHJlYXNvbmFibHkgY29uc2lkZXJlZCBpbmRlcGVuZGVudCBhbmQgc2VwYXJhdGUgd29ya3MgaW4gdGhlbXNlbHZlcywgdGhlbiB0aGlzIExpY2Vuc2UsIGFuZCBpdHMgdGVybXMsIGRvIG5vdCBhcHBseSB0byB0aG9zZSBzZWN0aW9ucyB3aGVuIHlvdSBkaXN0cmlidXRlIHRoZW0gYXMgc2VwYXJhdGUgd29ya3MuICBCdXQgd2hlbiB5b3UgZGlzdHJpYnV0ZSB0aGUgc2FtZSBzZWN0aW9ucyBhcyBwYXJ0IG9mIGEgd2hvbGUgd2hpY2ggaXMgYSB3b3JrIGJhc2VkIG9uIHRoZSBMaWJyYXJ5LCB0aGUgZGlzdHJpYnV0aW9uIG9mIHRoZSB3aG9sZSBtdXN0IGJlIG9uIHRoZSB0ZXJtcyBvZiB0aGlzIExpY2Vuc2UsIHdob3NlIHBlcm1pc3Npb25zIGZvciBvdGhlciBsaWNlbnNlZXMgZXh0ZW5kIHRvIHRoZSBlbnRpcmUgd2hvbGUsIGFuZCB0aHVzIHRvIGVhY2ggYW5kIGV2ZXJ5IHBhcnQgcmVnYXJkbGVzcyBvZiB3aG8gd3JvdGUgaXQuXAorXHBhcmRccGFyZGVmdGFiNzIwXHFsXHFuYXR1cmFsCisKK1xmMSBcY2YwIFwKK1xwYXJkXHBhcmRlZnRhYjcyMFxxbFxxbmF0dXJhbAorCitcZjAgXGNmMCBUaHVzLCBpdCBpcyBub3QgdGhlIGludGVudCBvZiB0aGlzIHNlY3Rpb24gdG8gY2xhaW0gcmlnaHRzIG9yIGNvbnRlc3QgeW91ciByaWdodHMgdG8gd29yayB3cml0dGVuIGVudGlyZWx5IGJ5IHlvdTsgcmF0aGVyLCB0aGUgaW50ZW50IGlzIHRvIGV4ZXJjaXNlIHRoZSByaWdodCB0byBjb250cm9sIHRoZSBkaXN0cmlidXRpb24gb2YgZGVyaXZhdGl2ZSBvciBjb2xsZWN0aXZlIHdvcmtzIGJhc2VkIG9uIHRoZSBMaWJyYXJ5LgorXGYxIFwKK1wKKworXGYwIEluIGFkZGl0aW9uLCBtZXJlIGFnZ3JlZ2F0aW9uIG9mIGFub3RoZXIgd29yayBub3QgYmFzZWQgb24gdGhlIExpYnJhcnkgd2l0aCB0aGUgTGlicmFyeSAob3Igd2l0aCBhIHdvcmsgYmFzZWQgb24gdGhlIExpYnJhcnkpIG9uIGEgdm9sdW1lIG9mIGEgc3RvcmFnZSBvciBkaXN0cmlidXRpb24gbWVkaXVtIGRvZXMgbm90IGJyaW5nIHRoZSBvdGhlciB3b3JrIHVuZGVyIHRoZSBzY29wZSBvZiB0aGlzIExpY2Vuc2UuCitcZjEgXAorXAorCitcZjAgMy4gWW91IG1heSBvcHQgdG8gYXBwbHkgdGhlIHRlcm1zIG9mIHRoZSBvcmRpbmFyeSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBpbnN0ZWFkIG9mIHRoaXMgTGljZW5zZSB0byBhIGdpdmVuIGNvcHkgb2YgdGhlIExpYnJhcnkuICBUbyBkbyB0aGlzLCB5b3UgbXVzdCBhbHRlciBhbGwgdGhlIG5vdGljZXMgdGhhdCByZWZlciB0byB0aGlzIExpY2Vuc2UsIHNvIHRoYXQgdGhleSByZWZlciB0byB0aGUgb3JkaW5hcnkgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UsIHZlcnNpb24gMiwgaW5zdGVhZCBvZiB0byB0aGlzIExpY2Vuc2UuICAoSWYgYSBuZXdlciB2ZXJzaW9uIHRoYW4gdmVyc2lvbiAyIG9mIHRoZSBvcmRpbmFyeSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBoYXMgYXBwZWFyZWQsIHRoZW4geW91IGNhbiBzcGVjaWZ5IHRoYXQgdmVyc2lvbiBpbnN0ZWFkIGlmIHlvdSB3aXNoLikgIERvIG5vdCBtYWtlIGFueSBvdGhlciBjaGFuZ2UgaW4gdGhlc2Ugbm90aWNlcy4KK1xmMSBcCitccGFnZSAKK1xmMCBcCitPbmNlIHRoaXMgY2hhbmdlIGlzIG1hZGUgaW4gYSBnaXZlbiBjb3B5LCBpdCBpcyBpcnJldmVyc2libGUgZm9yIHRoYXQgY29weSwgc28gdGhlIG9yZGluYXJ5IEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFwcGxpZXMgdG8gYWxsIHN1YnNlcXVlbnQgY29waWVzIGFuZCBkZXJpdmF0aXZlIHdvcmtzIG1hZGUgZnJvbSB0aGF0IGNvcHkuXAorXHBhcmRccGFyZGVmdGFiNzIwXHFsXHFuYXR1cmFsCisKK1xmMSBcY2YwIFwKK1xwYXJkXHBhcmRlZnRhYjcyMFxxbFxxbmF0dXJhbAorCitcZjAgXGNmMCBUaGlzIG9wdGlvbiBpcyB1c2VmdWwgd2hlbiB5b3Ugd2lzaCB0byBjb3B5IHBhcnQgb2YgdGhlIGNvZGUgb2YgdGhlIExpYnJhcnkgaW50byBhIHByb2dyYW0gdGhhdCBpcyBub3QgYSBsaWJyYXJ5LgorXGYxIFwKK1wKKworXGYwIDQuIFlvdSBtYXkgY29weSBhbmQgZGlzdHJpYnV0ZSB0aGUgTGlicmFyeSAob3IgYSBwb3J0aW9uIG9yIGRlcml2YXRpdmUgb2YgaXQsIHVuZGVyIFNlY3Rpb24gMikgaW4gb2JqZWN0IGNvZGUgb3IgZXhlY3V0YWJsZSBmb3JtIHVuZGVyIHRoZSB0ZXJtcyBvZiBTZWN0aW9ucyAxIGFuZCAyIGFib3ZlIHByb3ZpZGVkIHRoYXQgeW91IGFjY29tcGFueSBpdCB3aXRoIHRoZSBjb21wbGV0ZSBjb3JyZXNwb25kaW5nIG1hY2hpbmUtcmVhZGFibGUgc291cmNlIGNvZGUsIHdoaWNoIG11c3QgYmUgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIHRlcm1zIG9mIFNlY3Rpb25zIDEgYW5kIDIgYWJvdmUgb24gYQorXGYxIFwKKworXGYwIG1lZGl1bSBjdXN0b21hcmlseSB1c2VkIGZvciBzb2Z0d2FyZSBpbnRlcmNoYW5nZS4KK1xmMSBcCitcCisKK1xmMCBJZiBkaXN0cmlidXRpb24gb2Ygb2JqZWN0IGNvZGUgaXMgbWFkZSBieSBvZmZlcmluZyBhY2Nlc3MgdG8gY29weSBmcm9tIGEgZGVzaWduYXRlZCBwbGFjZSwgdGhlbiBvZmZlcmluZyBlcXVpdmFsZW50IGFjY2VzcyB0byBjb3B5IHRoZSBzb3VyY2UgY29kZSBmcm9tIHRoZSBzYW1lIHBsYWNlIHNhdGlzZmllcyB0aGUgcmVxdWlyZW1lbnQgdG8gZGlzdHJpYnV0ZSB0aGUgc291cmNlIGNvZGUsIGV2ZW4gdGhvdWdoIHRoaXJkIHBhcnRpZXMgYXJlIG5vdAorXGYxIFwKKworXGYwIGNvbXBlbGxlZCB0byBjb3B5IHRoZSBzb3VyY2UgYWxvbmcgd2l0aCB0aGUgb2JqZWN0IGNvZGUuCitcZjEgXAorXAorCitcZjAgNS4gQSBwcm9ncmFtIHRoYXQgY29udGFpbnMgbm8gZGVyaXZhdGl2ZSBvZiBhbnkgcG9ydGlvbiBvZiB0aGUgTGlicmFyeSwgYnV0IGlzIGRlc2lnbmVkIHRvIHdvcmsgd2l0aCB0aGUgTGlicmFyeSBieSBiZWluZyBjb21waWxlZCBvciBsaW5rZWQgd2l0aCBpdCwgaXMgY2FsbGVkIGEgIndvcmsgdGhhdCB1c2VzIHRoZSBMaWJyYXJ5Ii4gIFN1Y2ggYSB3b3JrLCBpbiBpc29sYXRpb24sIGlzIG5vdCBhIGRlcml2YXRpdmUgd29yayBvZiB0aGUgTGlicmFyeSwgYW5kIHRoZXJlZm9yZSBmYWxscyBvdXRzaWRlIHRoZSBzY29wZSBvZiB0aGlzIExpY2Vuc2UuCitcZjEgXAorXAorCitcZjAgSG93ZXZlciwgbGlua2luZyBhICJ3b3JrIHRoYXQgdXNlcyB0aGUgTGlicmFyeSIgd2l0aCB0aGUgTGlicmFyeSBjcmVhdGVzIGFuIGV4ZWN1dGFibGUgdGhhdCBpcyBhIGRlcml2YXRpdmUgb2YgdGhlIExpYnJhcnkgKGJlY2F1c2UgaXQgY29udGFpbnMgcG9ydGlvbnMgb2YgdGhlIExpYnJhcnkpLCByYXRoZXIgdGhhbiBhICJ3b3JrIHRoYXQgdXNlcyB0aGUgbGlicmFyeSIuICBUaGUgZXhlY3V0YWJsZSBpcyB0aGVyZWZvcmUgY292ZXJlZCBieSB0aGlzIExpY2Vuc2UuIFNlY3Rpb24gNiBzdGF0ZXMgdGVybXMgZm9yIGRpc3RyaWJ1dGlvbiBvZiBzdWNoIGV4ZWN1dGFibGVzLgorXGYxIFwKK1wKKworXGYwIFdoZW4gYSAid29yayB0aGF0IHVzZXMgdGhlIExpYnJhcnkiIHVzZXMgbWF0ZXJpYWwgZnJvbSBhIGhlYWRlciBmaWxlIHRoYXQgaXMgcGFydCBvZiB0aGUgTGlicmFyeSwgdGhlIG9iamVjdCBjb2RlIGZvciB0aGUgd29yayBtYXkgYmUgYSBkZXJpdmF0aXZlIHdvcmsgb2YgdGhlIExpYnJhcnkgZXZlbiB0aG91Z2ggdGhlIHNvdXJjZSBjb2RlIGlzIG5vdC4gV2hldGhlciB0aGlzIGlzIHRydWUgaXMgZXNwZWNpYWxseSBzaWduaWZpY2FudCBpZiB0aGUgd29yayBjYW4gYmUgbGlua2VkIHdpdGhvdXQgdGhlIExpYnJhcnksIG9yIGlmIHRoZSB3b3JrIGlzIGl0c2VsZiBhIGxpYnJhcnkuICBUaGUgdGhyZXNob2xkIGZvciB0aGlzIHRvIGJlIHRydWUgaXMgbm90IHByZWNpc2VseSBkZWZpbmVkIGJ5IGxhdy4KK1xmMSBcCitcCisKK1xmMCBJZiBzdWNoIGFuIG9iamVjdCBmaWxlIHVzZXMgb25seSBudW1lcmljYWwgcGFyYW1ldGVycywgZGF0YSBzdHJ1Y3R1cmUgbGF5b3V0cyBhbmQgYWNjZXNzb3JzLCBhbmQgc21hbGwgbWFjcm9zIGFuZCBzbWFsbCBpbmxpbmUgZnVuY3Rpb25zICh0ZW4gbGluZXMgb3IgbGVzcyBpbiBsZW5ndGgpLCB0aGVuIHRoZSB1c2Ugb2YgdGhlIG9iamVjdCBmaWxlIGlzIHVucmVzdHJpY3RlZCwgcmVnYXJkbGVzcyBvZiB3aGV0aGVyIGl0IGlzIGxlZ2FsbHkgYSBkZXJpdmF0aXZlCitcZjEgXAorCitcZjAgd29yay4gIChFeGVjdXRhYmxlcyBjb250YWluaW5nIHRoaXMgb2JqZWN0IGNvZGUgcGx1cyBwb3J0aW9ucyBvZiB0aGUgTGlicmFyeSB3aWxsIHN0aWxsIGZhbGwgdW5kZXIgU2VjdGlvbiA2LikKK1xmMSBcCitcCisKK1xmMCBPdGhlcndpc2UsIGlmIHRoZSB3b3JrIGlzIGEgZGVyaXZhdGl2ZSBvZiB0aGUgTGlicmFyeSwgeW91IG1heSBkaXN0cmlidXRlIHRoZSBvYmplY3QgY29kZSBmb3IgdGhlIHdvcmsgdW5kZXIgdGhlIHRlcm1zIG9mIFNlY3Rpb24gNi4gQW55IGV4ZWN1dGFibGVzIGNvbnRhaW5pbmcgdGhhdCB3b3JrIGFsc28gZmFsbCB1bmRlciBTZWN0aW9uIDYsIHdoZXRoZXIgb3Igbm90IHRoZXkgYXJlIGxpbmtlZCBkaXJlY3RseSB3aXRoIHRoZSBMaWJyYXJ5IGl0c2VsZi4KK1xmMSBcCitccGFnZSAKK1xmMCBcCis2LiBBcyBhbiBleGNlcHRpb24gdG8gdGhlIFNlY3Rpb25zIGFib3ZlLCB5b3UgbWF5IGFsc28gY29tYmluZSBvciBsaW5rIGEgIndvcmsgdGhhdCB1c2VzIHRoZSBMaWJyYXJ5IiB3aXRoIHRoZSBMaWJyYXJ5IHRvIHByb2R1Y2UgYSB3b3JrIGNvbnRhaW5pbmcgcG9ydGlvbnMgb2YgdGhlIExpYnJhcnksIGFuZCBkaXN0cmlidXRlIHRoYXQgd29yayB1bmRlciB0ZXJtcyBvZiB5b3VyIGNob2ljZSwgcHJvdmlkZWQgdGhhdCB0aGUgdGVybXMgcGVybWl0IG1vZGlmaWNhdGlvbiBvZiB0aGUgd29yayBmb3IgdGhlIGN1c3RvbWVyJ3Mgb3duIHVzZSBhbmQgcmV2ZXJzZSBlbmdpbmVlcmluZyBmb3IgZGVidWdnaW5nIHN1Y2ggbW9kaWZpY2F0aW9ucy5cCitccGFyZFxwYXJkZWZ0YWI3MjBccWxccW5hdHVyYWwKKworXGYxIFxjZjAgXAorXHBhcmRccGFyZGVmdGFiNzIwXHFsXHFuYXR1cmFsCisKK1xmMCBcY2YwIFlvdSBtdXN0IGdpdmUgcHJvbWluZW50IG5vdGljZSB3aXRoIGVhY2ggY29weSBvZiB0aGUgd29yayB0aGF0IHRoZSBMaWJyYXJ5IGlzIHVzZWQgaW4gaXQgYW5kIHRoYXQgdGhlIExpYnJhcnkgYW5kIGl0cyB1c2UgYXJlIGNvdmVyZWQgYnkgdGhpcyBMaWNlbnNlLiAgWW91IG11c3Qgc3VwcGx5IGEgY29weSBvZiB0aGlzIExpY2Vuc2UuICBJZiB0aGUgd29yayBkdXJpbmcgZXhlY3V0aW9uIGRpc3BsYXlzIGNvcHlyaWdodCBub3RpY2VzLCB5b3UgbXVzdCBpbmNsdWRlIHRoZSBjb3B5cmlnaHQgbm90aWNlIGZvciB0aGUgTGlicmFyeSBhbW9uZyB0aGVtLCBhcyB3ZWxsIGFzIGEgcmVmZXJlbmNlIGRpcmVjdGluZyB0aGUgdXNlciB0byB0aGUgY29weSBvZiB0aGlzIExpY2Vuc2UuICBBbHNvLCB5b3UgbXVzdCBkbyBvbmUgb2YgdGhlc2UgdGhpbmdzOgorXGYxIFwKK1wKK1xwYXJkXHBhcmRlZnRhYjcyMFxsaTcyMFxyaTBccWxccW5hdHVyYWwKKworXGYwIFxjZjAgYSkgQWNjb21wYW55IHRoZSB3b3JrIHdpdGggdGhlIGNvbXBsZXRlIGNvcnJlc3BvbmRpbmcgbWFjaGluZS1yZWFkYWJsZSBzb3VyY2UgY29kZSBmb3IgdGhlIExpYnJhcnkgaW5jbHVkaW5nIHdoYXRldmVyIGNoYW5nZXMgd2VyZSB1c2VkIGluIHRoZSB3b3JrICh3aGljaCBtdXN0IGJlIGRpc3RyaWJ1dGVkIHVuZGVyIFNlY3Rpb25zIDEgYW5kIDIgYWJvdmUpOyBhbmQsIGlmIHRoZSB3b3JrIGlzIGFuIGV4ZWN1dGFibGUgbGlua2VkIHdpdGggdGhlIExpYnJhcnksIHdpdGggdGhlIGNvbXBsZXRlIG1hY2hpbmUtcmVhZGFibGUgIndvcmsgdGhhdCB1c2VzIHRoZSBMaWJyYXJ5IiwgYXMgb2JqZWN0IGNvZGUgYW5kL29yIHNvdXJjZSBjb2RlLCBzbyB0aGF0IHRoZSB1c2VyIGNhbiBtb2RpZnkgdGhlIExpYnJhcnkgYW5kIHRoZW4gcmVsaW5rIHRvIHByb2R1Y2UgYSBtb2RpZmllZCBleGVjdXRhYmxlIGNvbnRhaW5pbmcgdGhlIG1vZGlmaWVkIExpYnJhcnkuICAoSXQgaXMgdW5kZXJzdG9vZCB0aGF0IHRoZSB1c2VyIHdobyBjaGFuZ2VzIHRoZSBjb250ZW50cyBvZiBkZWZpbml0aW9ucyBmaWxlcyBpbiB0aGUgTGlicmFyeSB3aWxsIG5vdCBuZWNlc3NhcmlseSBiZSBhYmxlIHRvIHJlY29tcGlsZSB0aGUgYXBwbGljYXRpb24gdG8gdXNlIHRoZSBtb2RpZmllZCBkZWZpbml0aW9ucy4pXAorXHBhcmRccGFyZGVmdGFiNzIwXHFsXHFuYXR1cmFsCitcY2YwIFwKK1xwYXJkXHBhcmRlZnRhYjcyMFxsaTcyMFxyaTBccWxccW5hdHVyYWwKK1xjZjAgYikgVXNlIGEgc3VpdGFibGUgc2hhcmVkIGxpYnJhcnkgbWVjaGFuaXNtIGZvciBsaW5raW5nIHdpdGggdGhlIExpYnJhcnkuICBBIHN1aXRhYmxlIG1lY2hhbmlzbSBpcyBvbmUgdGhhdCAoMSkgdXNlcyBhdCBydW4gdGltZSBhIGNvcHkgb2YgdGhlIGxpYnJhcnkgYWxyZWFkeSBwcmVzZW50IG9uIHRoZSB1c2VyJ3MgY29tcHV0ZXIgc3lzdGVtLCByYXRoZXIgdGhhbiBjb3B5aW5nIGxpYnJhcnkgZnVuY3Rpb25zIGludG8gdGhlIGV4ZWN1dGFibGUsIGFuZCAoMikgd2lsbCBvcGVyYXRlIHByb3Blcmx5IHdpdGggYSBtb2RpZmllZCB2ZXJzaW9uIG9mIHRoZSBsaWJyYXJ5LCBpZiB0aGUgdXNlciBpbnN0YWxscyBvbmUsIGFzIGxvbmcgYXMgdGhlIG1vZGlmaWVkIHZlcnNpb24gaXMgaW50ZXJmYWNlLWNvbXBhdGlibGUgd2l0aCB0aGUgdmVyc2lvbiB0aGF0IHRoZSB3b3JrIHdhcyBtYWRlIHdpdGguXAorXHBhcmRccGFyZGVmdGFiNzIwXHFsXHFuYXR1cmFsCitcY2YwIFwKK1xwYXJkXHBhcmRlZnRhYjcyMFxsaTcyMFxyaTBccWxccW5hdHVyYWwKK1xjZjAgYykgQWNjb21wYW55IHRoZSB3b3JrIHdpdGggYSB3cml0dGVuIG9mZmVyLCB2YWxpZCBmb3IgYXQgbGVhc3QgdGhyZWUgeWVhcnMsIHRvIGdpdmUgdGhlIHNhbWUgdXNlciB0aGUgbWF0ZXJpYWxzIHNwZWNpZmllZCBpbiBTdWJzZWN0aW9uIDZhLCBhYm92ZSwgZm9yIGEgY2hhcmdlIG5vIG1vcmUgdGhhbiB0aGUgY29zdCBvZiBwZXJmb3JtaW5nIHRoaXMgZGlzdHJpYnV0aW9uLlwKK1xwYXJkXHBhcmRlZnRhYjcyMFxxbFxxbmF0dXJhbAorXGNmMCBcCitccGFyZFxwYXJkZWZ0YWI3MjBcbGk3MjBccmkwXHFsXHFuYXR1cmFsCitcY2YwIGQpIElmIGRpc3RyaWJ1dGlvbiBvZiB0aGUgd29yayBpcyBtYWRlIGJ5IG9mZmVyaW5nIGFjY2VzcyB0byBjb3B5IGZyb20gYSBkZXNpZ25hdGVkIHBsYWNlLCBvZmZlciBlcXVpdmFsZW50IGFjY2VzcyB0byBjb3B5IHRoZSBhYm92ZSBzcGVjaWZpZWQgbWF0ZXJpYWxzIGZyb20gdGhlIHNhbWUgcGxhY2UuXAorXHBhcmRccGFyZGVmdGFiNzIwXHFsXHFuYXR1cmFsCitcY2YwIFwKK1xwYXJkXHBhcmRlZnRhYjcyMFxsaTcyMFxyaTBccWxccW5hdHVyYWwKK1xjZjAgZSkgVmVyaWZ5IHRoYXQgdGhlIHVzZXIgaGFzIGFscmVhZHkgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZXNlIG1hdGVyaWFscyBvciB0aGF0IHlvdSBoYXZlIGFscmVhZHkgc2VudCB0aGlzIHVzZXIgYSBjb3B5LlwKK1xwYXJkXHBhcmRlZnRhYjcyMFxxbFxxbmF0dXJhbAorXGNmMCBcCitGb3IgYW4gZXhlY3V0YWJsZSwgdGhlIHJlcXVpcmVkIGZvcm0gb2YgdGhlICJ3b3JrIHRoYXQgdXNlcyB0aGUgTGlicmFyeSIgbXVzdCBpbmNsdWRlIGFueSBkYXRhIGFuZCB1dGlsaXR5IHByb2dyYW1zIG5lZWRlZCBmb3IgcmVwcm9kdWNpbmcgdGhlIGV4ZWN1dGFibGUgZnJvbSBpdC4gIEhvd2V2ZXIsIGFzIGEgc3BlY2lhbCBleGNlcHRpb24sIHRoZSBtYXRlcmlhbHMgdG8gYmUgZGlzdHJpYnV0ZWQgbmVlZCBub3QgaW5jbHVkZSBhbnl0aGluZyB0aGF0IGlzIG5vcm1hbGx5IGRpc3RyaWJ1dGVkIChpbiBlaXRoZXIgc291cmNlIG9yIGJpbmFyeSBmb3JtKSB3aXRoIHRoZSBtYWpvciBjb21wb25lbnRzIChjb21waWxlciwga2VybmVsLCBhbmQgc28gb24pIG9mIHRoZSBvcGVyYXRpbmcgc3lzdGVtIG9uIHdoaWNoIHRoZSBleGVjdXRhYmxlIHJ1bnMsIHVubGVzcyB0aGF0IGNvbXBvbmVudCBpdHNlbGYgYWNjb21wYW5pZXMgdGhlIGV4ZWN1dGFibGUuCitcZjEgXAorXAorCitcZjAgSXQgbWF5IGhhcHBlbiB0aGF0IHRoaXMgcmVxdWlyZW1lbnQgY29udHJhZGljdHMgdGhlIGxpY2Vuc2UgcmVzdHJpY3Rpb25zIG9mIG90aGVyIHByb3ByaWV0YXJ5IGxpYnJhcmllcyB0aGF0IGRvIG5vdCBub3JtYWxseSBhY2NvbXBhbnkgdGhlIG9wZXJhdGluZyBzeXN0ZW0uICBTdWNoIGEgY29udHJhZGljdGlvbiBtZWFucyB5b3UgY2Fubm90IHVzZSBib3RoIHRoZW0gYW5kIHRoZSBMaWJyYXJ5IHRvZ2V0aGVyIGluIGFuIGV4ZWN1dGFibGUgdGhhdCB5b3UgZGlzdHJpYnV0ZS4KK1xmMSBcCitccGFnZSAKK1xmMCBcCis3LiBZb3UgbWF5IHBsYWNlIGxpYnJhcnkgZmFjaWxpdGllcyB0aGF0IGFyZSBhIHdvcmsgYmFzZWQgb24gdGhlIExpYnJhcnkgc2lkZS1ieS1zaWRlIGluIGEgc2luZ2xlIGxpYnJhcnkgdG9nZXRoZXIgd2l0aCBvdGhlciBsaWJyYXJ5IGZhY2lsaXRpZXMgbm90IGNvdmVyZWQgYnkgdGhpcyBMaWNlbnNlLCBhbmQgZGlzdHJpYnV0ZSBzdWNoIGEgY29tYmluZWQgbGlicmFyeSwgcHJvdmlkZWQgdGhhdCB0aGUgc2VwYXJhdGUgZGlzdHJpYnV0aW9uIG9mIHRoZSB3b3JrIGJhc2VkIG9uIHRoZSBMaWJyYXJ5IGFuZCBvZiB0aGUgb3RoZXIgbGlicmFyeSBmYWNpbGl0aWVzIGlzIG90aGVyd2lzZSBwZXJtaXR0ZWQsIGFuZCBwcm92aWRlZCB0aGF0IHlvdSBkbyB0aGVzZSB0d28gdGhpbmdzOlwKK1xwYXJkXHBhcmRlZnRhYjcyMFxxbFxxbmF0dXJhbAorCitcZjEgXGNmMCBcCitccGFyZFxwYXJkZWZ0YWI3MjBcbGk3MjBccmkwXHFsXHFuYXR1cmFsCisKK1xmMCBcY2YwIGEpIEFjY29tcGFueSB0aGUgY29tYmluZWQgbGlicmFyeSB3aXRoIGEgY29weSBvZiB0aGUgc2FtZSB3b3JrIGJhc2VkIG9uIHRoZSBMaWJyYXJ5LCB1bmNvbWJpbmVkIHdpdGggYW55IG90aGVyIGxpYnJhcnkgZmFjaWxpdGllcy4gIFRoaXMgbXVzdCBiZSBkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIFNlY3Rpb25zIGFib3ZlLlwKK1xwYXJkXHBhcmRlZnRhYjcyMFxxbFxxbmF0dXJhbAorXGNmMCBcCitccGFyZFxwYXJkZWZ0YWI3MjBcbGk3MjBccmkwXHFsXHFuYXR1cmFsCitcY2YwIGIpIEdpdmUgcHJvbWluZW50IG5vdGljZSB3aXRoIHRoZSBjb21iaW5lZCBsaWJyYXJ5IG9mIHRoZSBmYWN0IHRoYXQgcGFydCBvZiBpdCBpcyBhIHdvcmsgYmFzZWQgb24gdGhlIExpYnJhcnksIGFuZCBleHBsYWluaW5nIHdoZXJlIHRvIGZpbmQgdGhlIGFjY29tcGFueWluZyB1bmNvbWJpbmVkIGZvcm0gb2YgdGhlIHNhbWUgd29yay5cCitccGFyZFxwYXJkZWZ0YWI3MjBccWxccW5hdHVyYWwKK1xjZjAgXAorOC4gWW91IG1heSBub3QgY29weSwgbW9kaWZ5LCBzdWJsaWNlbnNlLCBsaW5rIHdpdGgsIG9yIGRpc3RyaWJ1dGUgdGhlIExpYnJhcnkgZXhjZXB0IGFzIGV4cHJlc3NseSBwcm92aWRlZCB1bmRlciB0aGlzIExpY2Vuc2UuICBBbnkgYXR0ZW1wdCBvdGhlcndpc2UgdG8gY29weSwgbW9kaWZ5LCBzdWJsaWNlbnNlLCBsaW5rIHdpdGgsIG9yIGRpc3RyaWJ1dGUgdGhlIExpYnJhcnkgaXMgdm9pZCwgYW5kIHdpbGwgYXV0b21hdGljYWxseSB0ZXJtaW5hdGUgeW91ciByaWdodHMgdW5kZXIgdGhpcyBMaWNlbnNlLiAgSG93ZXZlciwgcGFydGllcyB3aG8gaGF2ZSByZWNlaXZlZCBjb3BpZXMsIG9yIHJpZ2h0cywgZnJvbSB5b3UgdW5kZXIgdGhpcyBMaWNlbnNlIHdpbGwgbm90IGhhdmUgdGhlaXIgbGljZW5zZXMgdGVybWluYXRlZCBzbyBsb25nIGFzIHN1Y2ggcGFydGllcyByZW1haW4gaW4gZnVsbCBjb21wbGlhbmNlLgorXGYxIFwKK1wKKworXGYwIDkuIFlvdSBhcmUgbm90IHJlcXVpcmVkIHRvIGFjY2VwdCB0aGlzIExpY2Vuc2UsIHNpbmNlIHlvdSBoYXZlIG5vdCBzaWduZWQgaXQuICBIb3dldmVyLCBub3RoaW5nIGVsc2UgZ3JhbnRzIHlvdSBwZXJtaXNzaW9uIHRvIG1vZGlmeSBvciBkaXN0cmlidXRlIHRoZSBMaWJyYXJ5IG9yIGl0cyBkZXJpdmF0aXZlIHdvcmtzLiAgVGhlc2UgYWN0aW9ucyBhcmUgcHJvaGliaXRlZCBieSBsYXcgaWYgeW91IGRvIG5vdCBhY2NlcHQgdGhpcyBMaWNlbnNlLiAgVGhlcmVmb3JlLCBieSBtb2RpZnlpbmcgb3IgZGlzdHJpYnV0aW5nIHRoZSBMaWJyYXJ5IChvciBhbnkgd29yayBiYXNlZCBvbiB0aGUgTGlicmFyeSksIHlvdSBpbmRpY2F0ZSB5b3VyIGFjY2VwdGFuY2Ugb2YgdGhpcyBMaWNlbnNlIHRvIGRvIHNvLCBhbmQgYWxsIGl0cyB0ZXJtcyBhbmQgY29uZGl0aW9ucyBmb3IgY29weWluZywgZGlzdHJpYnV0aW5nIG9yIG1vZGlmeWluZyB0aGUgTGlicmFyeSBvciB3b3JrcyBiYXNlZCBvbiBpdC4KK1xmMSBcCitcCisKK1xmMCAxMC4gRWFjaCB0aW1lIHlvdSByZWRpc3RyaWJ1dGUgdGhlIExpYnJhcnkgKG9yIGFueSB3b3JrIGJhc2VkIG9uIHRoZSBMaWJyYXJ5KSwgdGhlIHJlY2lwaWVudCBhdXRvbWF0aWNhbGx5IHJlY2VpdmVzIGEgbGljZW5zZSBmcm9tIHRoZSBvcmlnaW5hbCBsaWNlbnNvciB0byBjb3B5LCBkaXN0cmlidXRlLCBsaW5rIHdpdGggb3IgbW9kaWZ5IHRoZSBMaWJyYXJ5IHN1YmplY3QgdG8gdGhlc2UgdGVybXMgYW5kIGNvbmRpdGlvbnMuICBZb3UgbWF5IG5vdCBpbXBvc2UgYW55IGZ1cnRoZXIgcmVzdHJpY3Rpb25zIG9uIHRoZSByZWNpcGllbnRzJyBleGVyY2lzZSBvZiB0aGUgcmlnaHRzIGdyYW50ZWQgaGVyZWluLiBZb3UgYXJlIG5vdCByZXNwb25zaWJsZSBmb3IgZW5mb3JjaW5nIGNvbXBsaWFuY2UgYnkgdGhpcmQgcGFydGllcyB3aXRoIHRoaXMgTGljZW5zZS4KK1xmMSBcCitccGFnZSAKK1xmMCBcCisxMS4gSWYsIGFzIGEgY29uc2VxdWVuY2Ugb2YgYSBjb3VydCBqdWRnbWVudCBvciBhbGxlZ2F0aW9uIG9mIHBhdGVudCBpbmZyaW5nZW1lbnQgb3IgZm9yIGFueSBvdGhlciByZWFzb24gKG5vdCBsaW1pdGVkIHRvIHBhdGVudCBpc3N1ZXMpLCBjb25kaXRpb25zIGFyZSBpbXBvc2VkIG9uIHlvdSAod2hldGhlciBieSBjb3VydCBvcmRlciwgYWdyZWVtZW50IG9yIG90aGVyd2lzZSkgdGhhdCBjb250cmFkaWN0IHRoZSBjb25kaXRpb25zIG9mIHRoaXMgTGljZW5zZSwgdGhleSBkbyBub3QgZXhjdXNlIHlvdSBmcm9tIHRoZSBjb25kaXRpb25zIG9mIHRoaXMgTGljZW5zZS4gIElmIHlvdSBjYW5ub3QgZGlzdHJpYnV0ZSBzbyBhcyB0byBzYXRpc2Z5IHNpbXVsdGFuZW91c2x5IHlvdXIgb2JsaWdhdGlvbnMgdW5kZXIgdGhpcyBMaWNlbnNlIGFuZCBhbnkgb3RoZXIgcGVydGluZW50IG9ibGlnYXRpb25zLCB0aGVuIGFzIGEgY29uc2VxdWVuY2UgeW91IG1heSBub3QgZGlzdHJpYnV0ZSB0aGUgTGlicmFyeSBhdCBhbGwuICBGb3IgZXhhbXBsZSwgaWYgYSBwYXRlbnQgbGljZW5zZSB3b3VsZCBub3QgcGVybWl0IHJveWFsdHktZnJlZSByZWRpc3RyaWJ1dGlvbiBvZiB0aGUgTGlicmFyeSBieSBhbGwgdGhvc2Ugd2hvIHJlY2VpdmUgY29waWVzIGRpcmVjdGx5IG9yIGluZGlyZWN0bHkgdGhyb3VnaCB5b3UsIHRoZW4gdGhlIG9ubHkgd2F5IHlvdSBjb3VsZCBzYXRpc2Z5IGJvdGggaXQgYW5kIHRoaXMgTGljZW5zZSB3b3VsZCBiZSB0byByZWZyYWluIGVudGlyZWx5IGZyb20gZGlzdHJpYnV0aW9uIG9mIHRoZSBMaWJyYXJ5LlwKK1xwYXJkXHBhcmRlZnRhYjcyMFxxbFxxbmF0dXJhbAorCitcZjEgXGNmMCBcCitccGFyZFxwYXJkZWZ0YWI3MjBccWxccW5hdHVyYWwKKworXGYwIFxjZjAgSWYgYW55IHBvcnRpb24gb2YgdGhpcyBzZWN0aW9uIGlzIGhlbGQgaW52YWxpZCBvciB1bmVuZm9yY2VhYmxlIHVuZGVyIGFueSBwYXJ0aWN1bGFyIGNpcmN1bXN0YW5jZSwgdGhlIGJhbGFuY2Ugb2YgdGhlIHNlY3Rpb24gaXMgaW50ZW5kZWQgdG8gYXBwbHksIGFuZCB0aGUgc2VjdGlvbiBhcyBhIHdob2xlIGlzIGludGVuZGVkIHRvIGFwcGx5IGluIG90aGVyIGNpcmN1bXN0YW5jZXMuCitcZjEgXAorXAorCitcZjAgSXQgaXMgbm90IHRoZSBwdXJwb3NlIG9mIHRoaXMgc2VjdGlvbiB0byBpbmR1Y2UgeW91IHRvIGluZnJpbmdlIGFueSBwYXRlbnRzIG9yIG90aGVyIHByb3BlcnR5IHJpZ2h0IGNsYWltcyBvciB0byBjb250ZXN0IHZhbGlkaXR5IG9mIGFueSBzdWNoIGNsYWltczsgdGhpcyBzZWN0aW9uIGhhcyB0aGUgc29sZSBwdXJwb3NlIG9mIHByb3RlY3RpbmcgdGhlIGludGVncml0eSBvZiB0aGUgZnJlZSBzb2Z0d2FyZSBkaXN0cmlidXRpb24gc3lzdGVtIHdoaWNoIGlzCitcZjEgXAorCitcZjAgaW1wbGVtZW50ZWQgYnkgcHVibGljIGxpY2Vuc2UgcHJhY3RpY2VzLiAgTWFueSBwZW9wbGUgaGF2ZSBtYWRlIGdlbmVyb3VzIGNvbnRyaWJ1dGlvbnMgdG8gdGhlIHdpZGUgcmFuZ2Ugb2Ygc29mdHdhcmUgZGlzdHJpYnV0ZWQgdGhyb3VnaCB0aGF0IHN5c3RlbSBpbiByZWxpYW5jZSBvbiBjb25zaXN0ZW50IGFwcGxpY2F0aW9uIG9mIHRoYXQgc3lzdGVtOyBpdCBpcyB1cCB0byB0aGUgYXV0aG9yL2Rvbm9yIHRvIGRlY2lkZSBpZiBoZSBvciBzaGUgaXMgd2lsbGluZyB0byBkaXN0cmlidXRlIHNvZnR3YXJlIHRocm91Z2ggYW55IG90aGVyIHN5c3RlbSBhbmQgYSBsaWNlbnNlZSBjYW5ub3QgaW1wb3NlIHRoYXQgY2hvaWNlLgorXGYxIFwKK1wKKworXGYwIFRoaXMgc2VjdGlvbiBpcyBpbnRlbmRlZCB0byBtYWtlIHRob3JvdWdobHkgY2xlYXIgd2hhdCBpcyBiZWxpZXZlZCB0byBiZSBhIGNvbnNlcXVlbmNlIG9mIHRoZSByZXN0IG9mIHRoaXMgTGljZW5zZS4KK1xmMSBcCitcCisKK1xmMCAxMi4gSWYgdGhlIGRpc3RyaWJ1dGlvbiBhbmQvb3IgdXNlIG9mIHRoZSBMaWJyYXJ5IGlzIHJlc3RyaWN0ZWQgaW4gY2VydGFpbiBjb3VudHJpZXMgZWl0aGVyIGJ5IHBhdGVudHMgb3IgYnkgY29weXJpZ2h0ZWQgaW50ZXJmYWNlcywgdGhlIG9yaWdpbmFsIGNvcHlyaWdodCBob2xkZXIgd2hvIHBsYWNlcyB0aGUgTGlicmFyeSB1bmRlciB0aGlzIExpY2Vuc2UgbWF5IGFkZCBhbiBleHBsaWNpdCBnZW9ncmFwaGljYWwgZGlzdHJpYnV0aW9uIGxpbWl0YXRpb24gZXhjbHVkaW5nIHRob3NlIGNvdW50cmllcywgc28gdGhhdCBkaXN0cmlidXRpb24gaXMgcGVybWl0dGVkIG9ubHkgaW4gb3IgYW1vbmcgY291bnRyaWVzIG5vdCB0aHVzIGV4Y2x1ZGVkLiAgSW4gc3VjaCBjYXNlLCB0aGlzIExpY2Vuc2UgaW5jb3Jwb3JhdGVzIHRoZSBsaW1pdGF0aW9uIGFzIGlmIHdyaXR0ZW4gaW4gdGhlIGJvZHkgb2YgdGhpcyBMaWNlbnNlLgorXGYxIFwKK1wKKworXGYwIDEzLiBUaGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIG1heSBwdWJsaXNoIHJldmlzZWQgYW5kL29yIG5ldyB2ZXJzaW9ucyBvZiB0aGUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZnJvbSB0aW1lIHRvIHRpbWUuIFN1Y2ggbmV3IHZlcnNpb25zIHdpbGwgYmUgc2ltaWxhciBpbiBzcGlyaXQgdG8gdGhlIHByZXNlbnQgdmVyc2lvbiwgYnV0IG1heSBkaWZmZXIgaW4gZGV0YWlsIHRvIGFkZHJlc3MgbmV3IHByb2JsZW1zIG9yIGNvbmNlcm5zLgorXGYxIFwKK1wKKworXGYwIEVhY2ggdmVyc2lvbiBpcyBnaXZlbiBhIGRpc3Rpbmd1aXNoaW5nIHZlcnNpb24gbnVtYmVyLiAgSWYgdGhlIExpYnJhcnkgc3BlY2lmaWVzIGEgdmVyc2lvbiBudW1iZXIgb2YgdGhpcyBMaWNlbnNlIHdoaWNoIGFwcGxpZXMgdG8gaXQgYW5kICJhbnkgbGF0ZXIgdmVyc2lvbiIsIHlvdSBoYXZlIHRoZSBvcHRpb24gb2YgZm9sbG93aW5nIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBlaXRoZXIgb2YgdGhhdCB2ZXJzaW9uIG9yIG9mIGFueSBsYXRlciB2ZXJzaW9uIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLiAgSWYgdGhlIExpYnJhcnkgZG9lcyBub3Qgc3BlY2lmeSBhIGxpY2Vuc2UgdmVyc2lvbiBudW1iZXIsIHlvdSBtYXkgY2hvb3NlIGFueSB2ZXJzaW9uIGV2ZXIgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCitcZjEgXAorXHBhZ2UgCitcZjAgXAorMTQuIElmIHlvdSB3aXNoIHRvIGluY29ycG9yYXRlIHBhcnRzIG9mIHRoZSBMaWJyYXJ5IGludG8gb3RoZXIgZnJlZSBwcm9ncmFtcyB3aG9zZSBkaXN0cmlidXRpb24gY29uZGl0aW9ucyBhcmUgaW5jb21wYXRpYmxlIHdpdGggdGhlc2UsIHdyaXRlIHRvIHRoZSBhdXRob3IgdG8gYXNrIGZvciBwZXJtaXNzaW9uLiAgRm9yIHNvZnR3YXJlIHdoaWNoIGlzIGNvcHlyaWdodGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IHdlIHNvbWV0aW1lcyBtYWtlIGV4Y2VwdGlvbnMgZm9yIHRoaXMuICBPdXIgZGVjaXNpb24gd2lsbCBiZSBndWlkZWQgYnkgdGhlIHR3byBnb2FscyBvZiBwcmVzZXJ2aW5nIHRoZSBmcmVlIHN0YXR1cyBvZiBhbGwgZGVyaXZhdGl2ZXMgb2Ygb3VyIGZyZWUgc29mdHdhcmUgYW5kIG9mIHByb21vdGluZyB0aGUgc2hhcmluZyBhbmQgcmV1c2Ugb2Ygc29mdHdhcmUgZ2VuZXJhbGx5LlwKK1xwYXJkXHBhcmRlZnRhYjcyMFxxbFxxbmF0dXJhbAorCitcZjEgXGNmMCBcCitccGFyZFxwYXJkZWZ0YWI3MjBccWMKKworXGYwIFxjZjAgTk8gV0FSUkFOVFlcCitccGFyZFxwYXJkZWZ0YWI3MjBccWxccW5hdHVyYWwKKworXGYxIFxjZjAgXAorXHBhcmRccGFyZGVmdGFiNzIwXHFsXHFuYXR1cmFsCisKK1xmMCBcY2YwIDE1LiBCRUNBVVNFIFRIRSBMSUJSQVJZIElTIExJQ0VOU0VEIEZSRUUgT0YgQ0hBUkdFLCBUSEVSRSBJUyBOTyBXQVJSQU5UWSBGT1IgVEhFIExJQlJBUlksIFRPIFRIRSBFWFRFTlQgUEVSTUlUVEVEIEJZIEFQUExJQ0FCTEUgTEFXLiBFWENFUFQgV0hFTiBPVEhFUldJU0UgU1RBVEVEIElOIFdSSVRJTkcgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORC9PUiBPVEhFUiBQQVJUSUVTIFBST1ZJREUgVEhFIExJQlJBUlkgIkFTIElTIiBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFSVRIRVIgRVhQUkVTU0VEIE9SIElNUExJRUQsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBUSEUgRU5USVJFIFJJU0sgQVMgVE8gVEhFIFFVQUxJVFkgQU5EIFBFUkZPUk1BTkNFIE9GIFRIRSBMSUJSQVJZIElTIFdJVEggWU9VLiAgU0hPVUxEIFRIRSBMSUJSQVJZIFBST1ZFIERFRkVDVElWRSwgWU9VIEFTU1VNRSBUSEUgQ09TVCBPRiBBTEwgTkVDRVNTQVJZIFNFUlZJQ0lORywgUkVQQUlSIE9SIENPUlJFQ1RJT04uXAorXHBhcmRccGFyZGVmdGFiNzIwXHFsXHFuYXR1cmFsCisKK1xmMSBcY2YwIFwKK1xwYXJkXHBhcmRlZnRhYjcyMFxxbFxxbmF0dXJhbAorCitcZjAgXGNmMCAxNi4gSU4gTk8gRVZFTlQgVU5MRVNTIFJFUVVJUkVEIEJZIEFQUExJQ0FCTEUgTEFXIE9SIEFHUkVFRCBUTyBJTiBXUklUSU5HIFdJTEwgQU5ZIENPUFlSSUdIVCBIT0xERVIsIE9SIEFOWSBPVEhFUiBQQVJUWSBXSE8gTUFZIE1PRElGWSBBTkQvT1IgUkVESVNUUklCVVRFIFRIRSBMSUJSQVJZIEFTIFBFUk1JVFRFRCBBQk9WRSwgQkUgTElBQkxFIFRPIFlPVSBGT1IgREFNQUdFUywgSU5DTFVESU5HIEFOWSBHRU5FUkFMLCBTUEVDSUFMLCBJTkNJREVOVEFMIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyBBUklTSU5HIE9VVCBPRiBUSEUgVVNFIE9SIElOQUJJTElUWSBUTyBVU0UgVEhFIExJQlJBUlkgKElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gTE9TUyBPRiBEQVRBIE9SIERBVEEgQkVJTkcgUkVOREVSRUQgSU5BQ0NVUkFURSBPUiBMT1NTRVMgU1VTVEFJTkVEIEJZIFlPVSBPUiBUSElSRCBQQVJUSUVTIE9SIEEgRkFJTFVSRSBPRiBUSEUgTElCUkFSWSBUTyBPUEVSQVRFIFdJVEggQU5ZIE9USEVSIFNPRlRXQVJFKSwgRVZFTiBJRiBTVUNIIEhPTERFUiBPUiBPVEhFUiBQQVJUWSBIQVMgQkVFTiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRVMuCitcZjEgXAorXAorXHBhcmRccGFyZGVmdGFiNzIwXHFjCisKK1xmMCBcY2YwIEVORCBPRiBURVJNUyBBTkQgQ09ORElUSU9OU1wKK1xwYWdlIFwKK0hvdyB0byBBcHBseSBUaGVzZSBUZXJtcyB0byBZb3VyIE5ldyBMaWJyYXJpZXNcCitccGFyZFxwYXJkZWZ0YWI3MjBccWxccW5hdHVyYWwKKworXGYxIFxjZjAgXAorXHBhcmRccGFyZGVmdGFiNzIwXHFsXHFuYXR1cmFsCisKK1xmMCBcY2YwIElmIHlvdSBkZXZlbG9wIGEgbmV3IGxpYnJhcnksIGFuZCB5b3Ugd2FudCBpdCB0byBiZSBvZiB0aGUgZ3JlYXRlc3QgcG9zc2libGUgdXNlIHRvIHRoZSBwdWJsaWMsIHdlIHJlY29tbWVuZCBtYWtpbmcgaXQgZnJlZSBzb2Z0d2FyZSB0aGF0IGV2ZXJ5b25lIGNhbiByZWRpc3RyaWJ1dGUgYW5kIGNoYW5nZS4gIFlvdSBjYW4gZG8gc28gYnkgcGVybWl0dGluZyByZWRpc3RyaWJ1dGlvbiB1bmRlciB0aGVzZSB0ZXJtcyAob3IsIGFsdGVybmF0aXZlbHksIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgb3JkaW5hcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSkuXAorXHBhcmRccGFyZGVmdGFiNzIwXHFsXHFuYXR1cmFsCisKK1xmMSBcY2YwIFwKK1xwYXJkXHBhcmRlZnRhYjcyMFxxbFxxbmF0dXJhbAorCitcZjAgXGNmMCBUbyBhcHBseSB0aGVzZSB0ZXJtcywgYXR0YWNoIHRoZSBmb2xsb3dpbmcgbm90aWNlcyB0byB0aGUgbGlicmFyeS4gIEl0IGlzIHNhZmVzdCB0byBhdHRhY2ggdGhlbSB0byB0aGUgc3RhcnQgb2YgZWFjaCBzb3VyY2UgZmlsZSB0byBtb3N0IGVmZmVjdGl2ZWx5IGNvbnZleSB0aGUgZXhjbHVzaW9uIG9mIHdhcnJhbnR5OyBhbmQgZWFjaCBmaWxlIHNob3VsZCBoYXZlIGF0IGxlYXN0IHRoZSAiY29weXJpZ2h0IiBsaW5lIGFuZCBhIHBvaW50ZXIgdG8gd2hlcmUgdGhlIGZ1bGwgbm90aWNlIGlzIGZvdW5kLgorXGYxIFwKK1wKK1xwYXJkXHBhcmRlZnRhYjcyMFxsaTcyMFxyaTBccWxccW5hdHVyYWwKKworXGYwIFxjZjAgPG9uZSBsaW5lIHRvIGdpdmUgdGhlIGxpYnJhcnkncyBuYW1lIGFuZCBhIGJyaWVmIGlkZWEgb2Ygd2hhdCBpdCBkb2VzLj5cdWMwXHU4MjMyIENvcHlyaWdodCAoQykgPHllYXI+ICA8bmFtZSBvZiBhdXRob3I+XAorXHBhcmRccGFyZGVmdGFiNzIwXHFsXHFuYXR1cmFsCitcY2YwIFwKK1xwYXJkXHBhcmRlZnRhYjcyMFxsaTcyMFxyaTBccWxccW5hdHVyYWwKK1xjZjAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIuMSBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi5cCitccGFyZFxwYXJkZWZ0YWI3MjBccWxccW5hdHVyYWwKK1xjZjAgXAorXHBhcmRccGFyZGVmdGFiNzIwXGxpNzIwXHJpMFxxbFxxbmF0dXJhbAorXGNmMCBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy5cCitccGFyZFxwYXJkZWZ0YWI3MjBccWxccW5hdHVyYWwKK1xjZjAgXAorXHBhcmRccGFyZGVmdGFiNzIwXGxpNzIwXHJpMFxxbFxxbmF0dXJhbAorXGNmMCBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgIDAyMTExLTEzMDcgIFVTQVwKK1xwYXJkXHBhcmRlZnRhYjcyMFxxbFxxbmF0dXJhbAorCitcZjEgXGNmMCBcCitccGFyZFxwYXJkZWZ0YWI3MjBccWxccW5hdHVyYWwKKworXGYwIFxjZjAgQWxzbyBhZGQgaW5mb3JtYXRpb24gb24gaG93IHRvIGNvbnRhY3QgeW91IGJ5IGVsZWN0cm9uaWMgYW5kIHBhcGVyIG1haWwuXAorXHBhcmRccGFyZGVmdGFiNzIwXHFsXHFuYXR1cmFsCisKK1xmMSBcY2YwIFwKK1xwYXJkXHBhcmRlZnRhYjcyMFxxbFxxbmF0dXJhbAorCitcZjAgXGNmMCBZb3Ugc2hvdWxkIGFsc28gZ2V0IHlvdXIgZW1wbG95ZXIgKGlmIHlvdSB3b3JrIGFzIGEgcHJvZ3JhbW1lcikgb3IgeW91ciBzY2hvb2wsIGlmIGFueSwgdG8gc2lnbiBhICJjb3B5cmlnaHQgZGlzY2xhaW1lciIgZm9yIHRoZSBsaWJyYXJ5LCBpZiBuZWNlc3NhcnkuICBIZXJlIGlzIGEgc2FtcGxlOyBhbHRlciB0aGUgbmFtZXM6CitcZjEgXAorXAorXHBhcmRccGFyZGVmdGFiNzIwXGxpNzIwXHJpMFxxbFxxbmF0dXJhbAorCitcZjAgXGNmMCBZb3lvZHluZSwgSW5jLiwgaGVyZWJ5IGRpc2NsYWltcyBhbGwgY29weXJpZ2h0IGludGVyZXN0IGluIHRoZSBsaWJyYXJ5IGBGcm9iJyAoYSBsaWJyYXJ5IGZvciB0d2Vha2luZyBrbm9icykgd3JpdHRlbiBieSBKYW1lcyBSYW5kb20gSGFja2VyLlwKK1xwYXJkXHBhcmRlZnRhYjcyMFxxbFxxbmF0dXJhbAorXGNmMCBcCitccGFyZFxwYXJkZWZ0YWI3MjBcbGk3MjBccmkwXHFsXHFuYXR1cmFsCitcY2YwIDxzaWduYXR1cmUgb2YgVHkgQ29vbj4sIDEgQXByaWwgMTk5MFx1YzBcdTgyMzIgVHkgQ29vbiwgUHJlc2lkZW50IG9mIFZpY2VcCitccGFyZFxwYXJkZWZ0YWI3MjBccWxccW5hdHVyYWwKK1xjZjAgXAorVGhhdCdzIGFsbCB0aGVyZSBpcyB0byBpdCEKK1xmMSBcCitcCit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvcmVsZWFzZS9SZWFkTWUucnRmIGIvcmVsZWFzZS9SZWFkTWUucnRmCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjZkMzQ0YzgKLS0tIC9kZXYvbnVsbAorKysgYi9yZWxlYXNlL1JlYWRNZS5ydGYKQEAgLTAsMCArMSwxMyBAQAore1xydGYxXGFuc2lcYW5zaWNwZzEyNTJcY29jb2FydGYxMDM4XGNvY29hc3VicnRmMzUwCit7XGZvbnR0YmxcZjBcZnN3aXNzXGZjaGFyc2V0MCBIZWx2ZXRpY2E7fQore1xjb2xvcnRibDtccmVkMjU1XGdyZWVuMjU1XGJsdWUyNTU7fQorXG1hcmdsMTQ0MFxtYXJncjE0NDBcdmlld3cxNTIwMFx2aWV3aDk2MDBcdmlld2tpbmQwCitcZGVmdGFiNzIwCitccGFyZFxwYXJkZWZ0YWI3MjBccWxccW5hdHVyYWwKKworXGYwXGZzMjQgXGNmMCBsaWJqcGVnLXR1cmJvIGlzIGEgZGVyaXZhdGl2ZSBvZiBsaWJqcGVnIHdoaWNoIHVzZXMgU0lNRCBpbnN0cnVjdGlvbnMgKE1NWCwgU1NFMiwgZXRjLikgdG8gYWNjZWxlcmF0ZSBiYXNlbGluZSBKUEVHIGNvbXByZXNzaW9uIGFuZCBkZWNvbXByZXNzaW9uIG9uIHg4NiBhbmQgeDg2LTY0IHN5c3RlbXMuICBPbiBzdWNoIHN5c3RlbXMsIGxpYmpwZWctdHVyYm8gaXMgZ2VuZXJhbGx5IDItNHggYXMgZmFzdCBhcyB0aGUgdW5tb2RpZmllZCB2ZXJzaW9uIG9mIGxpYmpwZWcsIGFsbCBlbHNlIGJlaW5nIGVxdWFsLiAgbGlianBlZy10dXJibyBhbHNvIGluY2x1ZGVzIGEgd3JhcHBlciBsaWJyYXJ5IHdoaWNoIGltcGxlbWVudHMgdGhlIFR1cmJvSlBFRyBBUEkgdXNlZCBieSBWaXJ0dWFsR0wgYW5kIFR1cmJvVk5DLlwKK1wKK2xpYmpwZWctdHVyYm8gd2FzIG9yaWdpbmFsbHkgYmFzZWQgb24gbGlianBlZy9TSU1EIGJ5IE1peWFzYWthIE1hc2FydSwgYnV0IHRoZSBUaWdlclZOQyBhbmQgVmlydHVhbEdMIHByb2plY3RzIG1hZGUgbnVtZXJvdXMgZW5oYW5jZW1lbnRzIHRvIHRoZSBjb2RlYyBpbiAyMDA5LCBpbmNsdWRpbmcgaW1wcm92ZWQgc3VwcG9ydCBmb3IgTWFjIE9TIFgsIDY0LWJpdCBzdXBwb3J0LCBzdXBwb3J0IGZvciAzMi1iaXQgYW5kIGJpZyBlbmRpYW4gcGl4ZWwgZm9ybWF0cyAoUkdCWCwgWEJHUiwgZXRjLiksIGFjY2VsZXJhdGVkIEh1ZmZtYW4gZW5jb2RpbmcvZGVjb2RpbmcsIGFuZCB2YXJpb3VzIGJ1ZyBmaXhlcy4gIFRoZSBnb2FsIHdhcyB0byBwcm9kdWNlIGEgZnVsbHkgb3BlbiBzb3VyY2UgY29kZWMgdGhhdCBjb3VsZCByZXBsYWNlIHRoZSBwYXJ0aWFsbHkgY2xvc2VkIHNvdXJjZSBUdXJib0pQRUcvSVBQIGNvZGVjIHVzZWQgYnkgVmlydHVhbEdMIGFuZCBUdXJib1ZOQy4gIGxpYmpwZWctdHVyYm8gZ2VuZXJhbGx5IHBlcmZvcm1zIGluIHRoZSByYW5nZSBvZiA4MC0xMjAlIG9mIFR1cmJvSlBFRy9JUFAuICBJdCBpcyBmYXN0ZXIgaW4gc29tZSBhcmVhcyBidXQgc2xvd2VyIGluIG90aGVycy5cCitcCitJbiBlYXJseSAyMDEwLCBsaWJqcGVnLXR1cmJvIHNwdW4gb2ZmIGludG8gaXRzIG93biBpbmRlcGVuZGVudCBwcm9qZWN0LCB3aXRoIHRoZSBnb2FsIG9mIG1ha2luZyBoaWdoLXNwZWVkIEpQRUcgY29tcHJlc3Npb24vZGVjb21wcmVzc2lvbiB0ZWNobm9sb2d5IGF2YWlsYWJsZSB0byBhIGJyb2FkZXIgcmFuZ2Ugb2YgdXNlcnMgYW5kIGRldmVsb3BlcnMuXAorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3JlbGVhc2UvV2VsY29tZS5ydGYgYi9yZWxlYXNlL1dlbGNvbWUucnRmCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLmMwNDdmMWMKLS0tIC9kZXYvbnVsbAorKysgYi9yZWxlYXNlL1dlbGNvbWUucnRmCkBAIC0wLDAgKzEsMTcgQEAKK3tccnRmMVxhbnNpXGFuc2ljcGcxMjUyXGNvY29hcnRmMTAzOFxjb2NvYXN1YnJ0ZjI1MAore1xmb250dGJsXGYwXGZzd2lzc1xmY2hhcnNldDAgSGVsdmV0aWNhO1xmMVxmbW9kZXJuXGZjaGFyc2V0MCBDb3VyaWVyTmV3UFNNVDt9Cit7XGNvbG9ydGJsO1xyZWQyNTVcZ3JlZW4yNTVcYmx1ZTI1NTt9CitcbWFyZ2wxNDQwXG1hcmdyMTQ0MFx2aWV3dzkwMDBcdmlld2g4NDAwXHZpZXdraW5kMAorXGRlZnRhYjcyMAorXHBhcmRccGFyZGVmdGFiNzIwXHFsXHFuYXR1cmFsCisKK1xmMFxmczI0IFxjZjAgVGhpcyBpbnN0YWxsZXIgd2lsbCBpbnN0YWxsIHRoZSBsaWJqcGVnLXR1cmJvIFNESyBhbmQgcnVuLXRpbWUgbGlicmFyaWVzIG9udG8geW91ciBjb21wdXRlciBzbyB0aGF0IHlvdSBjYW4gdXNlIGxpYmpwZWctdHVyYm8gdG8gYnVpbGQgbmV3IGFwcGxpY2F0aW9ucyBvciBhY2NlbGVyYXRlIGV4aXN0aW5nIG9uZXMuICBUbyByZW1vdmUgdGhlIGxpYmpwZWctdHVyYm8gcGFja2FnZSwgeW91IGNhbiBlaXRoZXIgdXNlIHRoZSAiVW5pbnN0YWxsIGxpYmpwZWctdHVyYm8iIGFwcGxpY2F0aW9uLCB3aGljaCBjYW4gYmUgZm91bmQgaW4gdGhlIHNhbWUgYXJjaGl2ZSBhcyB0aGlzIHBhY2thZ2UsIG9yIHlvdSBjYW4gcnVuXAorXAorCitcZjEgICAvb3B0L2xpYmpwZWctdHVyYm8vYmluL3VuaW5zdGFsbFwKKworXGYwIFwKK2Zyb20gdGhlIGNvbW1hbmQgbGluZS5cCitcCitJZiBUdXJib0pQRUcvSVBQIGlzIGN1cnJlbnRseSBpbnN0YWxsZWQsIHRoZW4gaXQgbXVzdCBiZSByZW1vdmVkIHByaW9yIHRvIGluc3RhbGxpbmcgbGlianBlZy10dXJiby5cCit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvcmVsZWFzZS9jb3B5cmlnaHQgYi9yZWxlYXNlL2NvcHlyaWdodApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi4xM2RiMjMxCi0tLSAvZGV2L251bGwKKysrIGIvcmVsZWFzZS9jb3B5cmlnaHQKQEAgLTAsMCArMSBAQAorVXNlIGlzIHN1YmplY3QgdG8gdGhlIHRlcm1zIG9mIHRoZSB3eFdpbmRvd3MgTGlicmFyeSBMaWNlbnNlLCB2ZXJzaW9uIDMuMQpkaWZmIC0tZ2l0IGEvcmVsZWFzZS9kZWItY29udHJvbC5pbiBiL3JlbGVhc2UvZGViLWNvbnRyb2wuaW4KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDg3Yzg1ZgotLS0gL2Rldi9udWxsCisrKyBiL3JlbGVhc2UvZGViLWNvbnRyb2wuaW4KQEAgLTAsMCArMSwyOCBAQAorUGFja2FnZTogQFBBQ0tBR0VfTkFNRUAKK1ZlcnNpb246IEBWRVJTSU9OQC1AQlVJTERACitTZWN0aW9uOiBtaXNjCitQcmlvcml0eTogb3B0aW9uYWwKK0FyY2hpdGVjdHVyZTogQERFQkFSQ0hACitFc3NlbnRpYWw6IG5vCitNYWludGFpbmVyOiBUaGUgbGlianBlZy10dXJibyBQcm9qZWN0IFtodHRwOi8vbGlianBlZy10dXJiby5WaXJ0dWFsR0wub3JnXQorRGVzY3JpcHRpb246IEEgU0lNRC1hY2NlbGVyYXRlZCBKUEVHIGNvZGVjIHdoaWNoIHByb3ZpZGVzIGJvdGggdGhlIGxpYmpwZWcgYW5kIFR1cmJvSlBFRyBBUElzCisgbGlianBlZy10dXJibyBpcyBhIGRlcml2YXRpdmUgb2YgbGlianBlZyB3aGljaCB1c2VzIFNJTUQgaW5zdHJ1Y3Rpb25zIChNTVgsCisgU1NFMiwgZXRjLikgdG8gYWNjZWxlcmF0ZSBiYXNlbGluZSBKUEVHIGNvbXByZXNzaW9uIGFuZCBkZWNvbXByZXNzaW9uIG9uIHg4NgorIGFuZCB4ODYtNjQgc3lzdGVtcy4gIE9uIHN1Y2ggc3lzdGVtcywgbGlianBlZy10dXJibyBpcyBnZW5lcmFsbHkgMi00eCBhcyBmYXN0CisgYXMgdGhlIHVubW9kaWZpZWQgdmVyc2lvbiBvZiBsaWJqcGVnLCBhbGwgZWxzZSBiZWluZyBlcXVhbC4gIGxpYmpwZWctdHVyYm8KKyBhbHNvIGluY2x1ZGVzIGEgd3JhcHBlciBsaWJyYXJ5IHdoaWNoIGltcGxlbWVudHMgdGhlIFR1cmJvSlBFRyBBUEkgdXNlZCBieQorIFZpcnR1YWxHTCBhbmQgVHVyYm9WTkMuCisgLgorIGxpYmpwZWctdHVyYm8gd2FzIG9yaWdpbmFsbHkgYmFzZWQgb24gbGlianBlZy9TSU1EIGJ5IE1peWFzYWthIE1hc2FydSwgYnV0CisgdGhlIFRpZ2VyVk5DIGFuZCBWaXJ0dWFsR0wgcHJvamVjdHMgbWFkZSBudW1lcm91cyBlbmhhbmNlbWVudHMgdG8gdGhlIGNvZGVjCisgaW4gMjAwOSwgaW5jbHVkaW5nIGltcHJvdmVkIHN1cHBvcnQgZm9yIE1hYyBPUyBYLCA2NC1iaXQgc3VwcG9ydCwgc3VwcG9ydAorIGZvciAzMi1iaXQgYW5kIGJpZyBlbmRpYW4gcGl4ZWwgZm9ybWF0cyAoUkdCWCwgWEJHUiwgZXRjLiksIGFjY2VsZXJhdGVkCisgSHVmZm1hbiBlbmNvZGluZy9kZWNvZGluZywgYW5kIHZhcmlvdXMgYnVnIGZpeGVzLiAgVGhlIGdvYWwgd2FzIHRvIHByb2R1Y2UgYQorIGZ1bGx5IG9wZW4gc291cmNlIGNvZGVjIHRoYXQgY291bGQgcmVwbGFjZSB0aGUgcGFydGlhbGx5IGNsb3NlZCBzb3VyY2UKKyBUdXJib0pQRUcvSVBQIGNvZGVjIHVzZWQgYnkgVmlydHVhbEdMIGFuZCBUdXJib1ZOQy4gIGxpYmpwZWctdHVyYm8gZ2VuZXJhbGx5CisgcGVyZm9ybXMgaW4gdGhlIHJhbmdlIG9mIDgwLTEyMCUgb2YgVHVyYm9KUEVHL0lQUC4gIEl0IGlzIGZhc3RlciBpbiBzb21lCisgYXJlYXMgYnV0IHNsb3dlciBpbiBvdGhlcnMuCisgLgorIEluIGVhcmx5IDIwMTAsIGxpYmpwZWctdHVyYm8gc3B1biBvZmYgaW50byBpdHMgb3duIGluZGVwZW5kZW50IHByb2plY3QsIHdpdGgKKyB0aGUgZ29hbCBvZiBtYWtpbmcgaGlnaC1zcGVlZCBKUEVHIGNvbXByZXNzaW9uL2RlY29tcHJlc3Npb24gdGVjaG5vbG9neQorIGF2YWlsYWJsZSB0byBhIGJyb2FkZXIgcmFuZ2Ugb2YgdXNlcnMgYW5kIGRldmVsb3BlcnMuCmRpZmYgLS1naXQgYS9yZWxlYXNlL2xpYmpwZWctdHVyYm8ubnNpLmluIGIvcmVsZWFzZS9saWJqcGVnLXR1cmJvLm5zaS5pbgpuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi42ZWI0YmFlCi0tLSAvZGV2L251bGwKKysrIGIvcmVsZWFzZS9saWJqcGVnLXR1cmJvLm5zaS5pbgpAQCAtMCwwICsxLDE0MSBAQAorIWluY2x1ZGUgeDY0Lm5zaAorTmFtZSAiQENNQUtFX1BST0pFQ1RfTkFNRUAgU0RLIGZvciBASU5TVF9QTEFURk9STUAiCitPdXRGaWxlICJAQ01BS0VfQklOQVJZX0RJUkBcJHtCVUlMRERJUn1ASU5TVF9OQU1FQC5leGUiCitJbnN0YWxsRGlyIGM6XEBJTlNUX0RJUkAKKworU2V0Q29tcHJlc3NvciBiemlwMgorCitQYWdlIGRpcmVjdG9yeQorUGFnZSBpbnN0ZmlsZXMKKworVW5pbnN0UGFnZSB1bmluc3RDb25maXJtCitVbmluc3RQYWdlIGluc3RmaWxlcworCitTZWN0aW9uICJAQ01BS0VfUFJPSkVDVF9OQU1FQCBTREsgZm9yIEBJTlNUX1BMQVRGT1JNQCAocmVxdWlyZWQpIgorIWlmZGVmIFdJTjY0CisJJHtJZn0gJHtSdW5uaW5nWDY0fQorCSR7RGlzYWJsZVg2NEZTUmVkaXJlY3Rpb259CisJJHtFbmRpZn0KKyFlbmRpZgorCVNlY3Rpb25JbiBSTworIWlmZGVmIEdDQworCUlmRmlsZUV4aXN0cyAkU1lTRElSL2xpYnR1cmJvanBlZy5kbGwgZXhpc3RzIDAKKyFlbHNlCisJSWZGaWxlRXhpc3RzICRTWVNESVIvdHVyYm9qcGVnLmRsbCBleGlzdHMgMAorIWVuZGlmCisJZ290byBub3RleGlzdHMKKwlleGlzdHM6CishaWZkZWYgR0NDCisJTWVzc2FnZUJveCBNQl9PSyAiQW4gZXhpc3RpbmcgdmVyc2lvbiBvZiB0aGUgQENNQUtFX1BST0pFQ1RfTkFNRUAgU0RLIGZvciBASU5TVF9QTEFURk9STUAgaXMgYWxyZWFkeSBpbnN0YWxsZWQuICBQbGVhc2UgdW5pbnN0YWxsIGl0IGZpcnN0LiIKKyFlbHNlCisJTWVzc2FnZUJveCBNQl9PSyAiQW4gZXhpc3RpbmcgdmVyc2lvbiBvZiB0aGUgQENNQUtFX1BST0pFQ1RfTkFNRUAgU0RLIGZvciBASU5TVF9QTEFURk9STUAgb3IgdGhlIFR1cmJvSlBFRyBTREsgaXMgYWxyZWFkeSBpbnN0YWxsZWQuICBQbGVhc2UgdW5pbnN0YWxsIGl0IGZpcnN0LiIKKyFlbmRpZgorCXF1aXQKKworCW5vdGV4aXN0czoKKwlTZXRPdXRQYXRoICRTWVNESVIKKyFpZmRlZiBHQ0MKKwlGaWxlICJAQ01BS0VfQklOQVJZX0RJUkBcbGlidHVyYm9qcGVnLmRsbCIKKyFlbHNlCisJRmlsZSAiQENNQUtFX0JJTkFSWV9ESVJAXCR7QlVJTERESVJ9dHVyYm9qcGVnLmRsbCIKKyFlbmRpZgorCVNldE91dFBhdGggJElOU1RESVJcYmluCishaWZkZWYgR0NDCisJRmlsZSAiL29uYW1lPWxpYmpwZWctQERMTF9WRVJTSU9OQC5kbGwiICJAQ01BS0VfQklOQVJZX0RJUkBcc2hhcmVkbGliXGxpYmpwZWctKi5kbGwiIAorIWVsc2UKKwlGaWxlICJAQ01BS0VfQklOQVJZX0RJUkBcc2hhcmVkbGliXCR7QlVJTERESVJ9anBlZ0BETExfVkVSU0lPTkAuZGxsIgorIWVuZGlmCisJRmlsZSAiQENNQUtFX0JJTkFSWV9ESVJAXHNoYXJlZGxpYlwke0JVSUxERElSfWNqcGVnLmV4ZSIKKwlGaWxlICJAQ01BS0VfQklOQVJZX0RJUkBcc2hhcmVkbGliXCR7QlVJTERESVJ9ZGpwZWcuZXhlIgorCUZpbGUgIkBDTUFLRV9CSU5BUllfRElSQFxzaGFyZWRsaWJcJHtCVUlMRERJUn1qcGVndHJhbi5leGUiCisJRmlsZSAiQENNQUtFX0JJTkFSWV9ESVJAXCR7QlVJTERESVJ9anBndGVzdC5leGUiCisJRmlsZSAiQENNQUtFX0JJTkFSWV9ESVJAXCR7QlVJTERESVJ9cmRqcGdjb20uZXhlIgorCUZpbGUgIkBDTUFLRV9CSU5BUllfRElSQFwke0JVSUxERElSfXdyanBnY29tLmV4ZSIKKwlTZXRPdXRQYXRoICRJTlNURElSXGxpYgorIWlmZGVmIEdDQworCUZpbGUgIkBDTUFLRV9CSU5BUllfRElSQFxsaWJ0dXJib2pwZWcuZGxsLmEiCisJRmlsZSAiQENNQUtFX0JJTkFSWV9ESVJAXGxpYnR1cmJvanBlZy5hIgorCUZpbGUgIkBDTUFLRV9CSU5BUllfRElSQFxzaGFyZWRsaWJcbGlianBlZy5kbGwuYSIKKwlGaWxlICJAQ01BS0VfQklOQVJZX0RJUkBcbGlianBlZy5hIgorIWVsc2UKKwlGaWxlICJAQ01BS0VfQklOQVJZX0RJUkBcJHtCVUlMRERJUn10dXJib2pwZWcubGliIgorCUZpbGUgIkBDTUFLRV9CSU5BUllfRElSQFwke0JVSUxERElSfXR1cmJvanBlZy1zdGF0aWMubGliIgorCUZpbGUgIkBDTUFLRV9CSU5BUllfRElSQFxzaGFyZWRsaWJcJHtCVUlMRERJUn1qcGVnLmxpYiIKKwlGaWxlICJAQ01BS0VfQklOQVJZX0RJUkBcJHtCVUlMRERJUn1qcGVnLXN0YXRpYy5saWIiCishZW5kaWYKKwlTZXRPdXRQYXRoICRJTlNURElSXGluY2x1ZGUKKwlGaWxlICJAQ01BS0VfQklOQVJZX0RJUkBcamNvbmZpZy5oIgorCUZpbGUgIkBDTUFLRV9TT1VSQ0VfRElSQFxqZXJyb3IuaCIKKwlGaWxlICJAQ01BS0VfU09VUkNFX0RJUkBcam1vcmVjZmcuaCIKKwlGaWxlICJAQ01BS0VfU09VUkNFX0RJUkBcanBlZ2xpYi5oIgorCUZpbGUgIkBDTUFLRV9TT1VSQ0VfRElSQFx0dXJib2pwZWcuaCIKKwlTZXRPdXRQYXRoICRJTlNURElSXGRvYworCUZpbGUgIkBDTUFLRV9TT1VSQ0VfRElSQFxSRUFETUUiCisJRmlsZSAiQENNQUtFX1NPVVJDRV9ESVJAXFJFQURNRS10dXJiby50eHQiCisJRmlsZSAiQENNQUtFX1NPVVJDRV9ESVJAXGxpYmpwZWcudHh0IgorCUZpbGUgIkBDTUFLRV9TT1VSQ0VfRElSQFxMR1BMLnR4dCIKKwlGaWxlICJAQ01BS0VfU09VUkNFX0RJUkBcTElDRU5TRS50eHQiCisJRmlsZSAiQENNQUtFX1NPVVJDRV9ESVJAXHVzYWdlLnR4dCIKKworCVdyaXRlUmVnU3RyIEhLTE0gIlNPRlRXQVJFXEBJTlNUX0RJUkAgQFZFUlNJT05AIiAiSW5zdGFsbF9EaXIiICIkSU5TVERJUiIKKworCVdyaXRlUmVnU3RyIEhLTE0gIlNvZnR3YXJlXE1pY3Jvc29mdFxXaW5kb3dzXEN1cnJlbnRWZXJzaW9uXFVuaW5zdGFsbFxASU5TVF9ESVJAIEBWRVJTSU9OQCIgIkRpc3BsYXlOYW1lIiAiQENNQUtFX1BST0pFQ1RfTkFNRUAgU0RLIHZAVkVSU0lPTkAgZm9yIEBJTlNUX1BMQVRGT1JNQCIKKwlXcml0ZVJlZ1N0ciBIS0xNICJTb2Z0d2FyZVxNaWNyb3NvZnRcV2luZG93c1xDdXJyZW50VmVyc2lvblxVbmluc3RhbGxcQElOU1RfRElSQCBAVkVSU0lPTkAiICJVbmluc3RhbGxTdHJpbmciICciJElOU1RESVJcdW5pbnN0YWxsX0BWRVJTSU9OQC5leGUiJworCVdyaXRlUmVnRFdPUkQgSEtMTSAiU29mdHdhcmVcTWljcm9zb2Z0XFdpbmRvd3NcQ3VycmVudFZlcnNpb25cVW5pbnN0YWxsXEBJTlNUX0RJUkAgQFZFUlNJT05AIiAiTm9Nb2RpZnkiIDEKKwlXcml0ZVJlZ0RXT1JEIEhLTE0gIlNvZnR3YXJlXE1pY3Jvc29mdFxXaW5kb3dzXEN1cnJlbnRWZXJzaW9uXFVuaW5zdGFsbFxASU5TVF9ESVJAIEBWRVJTSU9OQCIgIk5vUmVwYWlyIiAxCisJV3JpdGVVbmluc3RhbGxlciAidW5pbnN0YWxsX0BWRVJTSU9OQC5leGUiCitTZWN0aW9uRW5kCisKK1NlY3Rpb24gIlVuaW5zdGFsbCIKKyFpZmRlZiBXSU42NAorCSR7SWZ9ICR7UnVubmluZ1g2NH0KKwkke0Rpc2FibGVYNjRGU1JlZGlyZWN0aW9ufQorCSR7RW5kaWZ9CishZW5kaWYKKworCVNldFNoZWxsVmFyQ29udGV4dCBhbGwKKworCURlbGV0ZVJlZ0tleSBIS0xNICJTb2Z0d2FyZVxNaWNyb3NvZnRcV2luZG93c1xDdXJyZW50VmVyc2lvblxVbmluc3RhbGxcQElOU1RfRElSQCBAVkVSU0lPTkAiCisJRGVsZXRlUmVnS2V5IEhLTE0gIlNPRlRXQVJFXEBJTlNUX0RJUkAgQFZFUlNJT05AIgorCishaWZkZWYgR0NDCisJRGVsZXRlICRJTlNURElSXGJpblxsaWJqcGVnLUBETExfVkVSU0lPTkAuZGxsCisJRGVsZXRlICRTWVNESVJcbGlidHVyYm9qcGVnLmRsbAorCURlbGV0ZSAkSU5TVERJUlxsaWJcbGlidHVyYm9qcGVnLmRsbC5hIgorCURlbGV0ZSAkSU5TVERJUlxsaWJcbGlidHVyYm9qcGVnLmEiCisJRGVsZXRlICRJTlNURElSXGxpYlxsaWJqcGVnLmRsbC5hIgorCURlbGV0ZSAkSU5TVERJUlxsaWJcbGlianBlZy5hIgorIWVsc2UKKwlEZWxldGUgJElOU1RESVJcYmluXGpwZWdARExMX1ZFUlNJT05ALmRsbAorCURlbGV0ZSAkU1lTRElSXHR1cmJvanBlZy5kbGwKKwlEZWxldGUgJElOU1RESVJcbGliXGpwZWcubGliCisJRGVsZXRlICRJTlNURElSXGxpYlxqcGVnLXN0YXRpYy5saWIKKwlEZWxldGUgJElOU1RESVJcbGliXHR1cmJvanBlZy5saWIKKwlEZWxldGUgJElOU1RESVJcbGliXHR1cmJvanBlZy1zdGF0aWMubGliCishZW5kaWYKKwlEZWxldGUgJElOU1RESVJcYmluXGNqcGVnLmV4ZQorCURlbGV0ZSAkSU5TVERJUlxiaW5cZGpwZWcuZXhlCisJRGVsZXRlICRJTlNURElSXGJpblxqcGVndHJhbi5leGUKKwlEZWxldGUgJElOU1RESVJcYmluXGpwZ3Rlc3QuZXhlCisJRGVsZXRlICRJTlNURElSXGJpblxyZGpwZ2NvbS5leGUKKwlEZWxldGUgJElOU1RESVJcYmluXHdyanBnY29tLmV4ZQorCURlbGV0ZSAkSU5TVERJUlxpbmNsdWRlXGpjb25maWcuaCIKKwlEZWxldGUgJElOU1RESVJcaW5jbHVkZVxqZXJyb3IuaCIKKwlEZWxldGUgJElOU1RESVJcaW5jbHVkZVxqbW9yZWNmZy5oIgorCURlbGV0ZSAkSU5TVERJUlxpbmNsdWRlXGpwZWdsaWIuaCIKKwlEZWxldGUgJElOU1RESVJcaW5jbHVkZVx0dXJib2pwZWcuaCIKKwlEZWxldGUgJElOU1RESVJcdW5pbnN0YWxsX0BWRVJTSU9OQC5leGUKKwlEZWxldGUgJElOU1RESVJcZG9jXFJFQURNRQorCURlbGV0ZSAkSU5TVERJUlxkb2NcUkVBRE1FLXR1cmJvLnR4dAorCURlbGV0ZSAkSU5TVERJUlxkb2NcbGlianBlZy50eHQKKwlEZWxldGUgJElOU1RESVJcZG9jXExHUEwudHh0CisJRGVsZXRlICRJTlNURElSXGRvY1xMSUNFTlNFLnR4dAorCURlbGV0ZSAkSU5TVERJUlxkb2NcdXNhZ2UudHh0CisKKwlSTURpciAiJElOU1RESVJcaW5jbHVkZSIKKwlSTURpciAiJElOU1RESVJcbGliIgorCVJNRGlyICIkSU5TVERJUlxkb2MiCisJUk1EaXIgIiRJTlNURElSXGJpbiIKKwlSTURpciAiJElOU1RESVIiCisKK1NlY3Rpb25FbmQKZGlmZiAtLWdpdCBhL3JlbGVhc2UvbGlianBlZy10dXJiby5zcGVjLmluIGIvcmVsZWFzZS9saWJqcGVnLXR1cmJvLnNwZWMuaW4KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDhlMTYxZAotLS0gL2Rldi9udWxsCisrKyBiL3JlbGVhc2UvbGlianBlZy10dXJiby5zcGVjLmluCkBAIC0wLDAgKzEsMTA4IEBACislaWZhcmNoIHg4Nl82NAorJWRlZmluZSBfX2xpYiBsaWI2NAorJWVsc2UKKyVkZWZpbmUgX19saWIgbGliCislZW5kaWYKKworU3VtbWFyeTogQSBTSU1ELWFjY2VsZXJhdGVkIEpQRUcgY29kZWMgd2hpY2ggcHJvdmlkZXMgYm90aCB0aGUgbGlianBlZyBhbmQgVHVyYm9KUEVHIEFQSXMKK05hbWU6IEBQQUNLQUdFX05BTUVACitWZXJzaW9uOiBAVkVSU0lPTkAKK1ZlbmRvcjogVGhlIGxpYmpwZWctdHVyYm8gUHJvamVjdAorVVJMOiBodHRwOi8vbGlianBlZy10dXJiby5WaXJ0dWFsR0wub3JnCitHcm91cDogU3lzdGVtIEVudmlyb25tZW50L0xpYnJhcmllcworIy0tPlNvdXJjZTA6IGh0dHA6Ly9wcmRvd25sb2Fkcy5zb3VyY2Vmb3JnZS5uZXQvbGlianBlZy10dXJiby9saWJqcGVnLXR1cmJvLSV7dmVyc2lvbn0udGFyLmd6CitSZWxlYXNlOiBAQlVJTERACitMaWNlbnNlOiB3eFdpbmRvd3MgTGlicmFyeSBMaWNlbnNlLCB2My4xCitCdWlsZFJvb3Q6ICV7X2JsZGRpcn0vJXtuYW1lfS1idWlsZHJvb3QtJXt2ZXJzaW9ufS0le3JlbGVhc2V9CitQcmVyZXE6IC9zYmluL2xkY29uZmlnCitQcm92aWRlczogJXtuYW1lfSA9ICV7dmVyc2lvbn0tJXtyZWxlYXNlfSwgdHVyYm9qcGVnID0gMi4wMAorT2Jzb2xldGVzOiB0dXJib2pwZWcKKworJWRlc2NyaXB0aW9uCitsaWJqcGVnLXR1cmJvIGlzIGEgZGVyaXZhdGl2ZSBvZiBsaWJqcGVnIHdoaWNoIHVzZXMgU0lNRCBpbnN0cnVjdGlvbnMgKE1NWCwKK1NTRTIsIGV0Yy4pIHRvIGFjY2VsZXJhdGUgYmFzZWxpbmUgSlBFRyBjb21wcmVzc2lvbiBhbmQgZGVjb21wcmVzc2lvbiBvbiB4ODYKK2FuZCB4ODYtNjQgc3lzdGVtcy4gIE9uIHN1Y2ggc3lzdGVtcywgbGlianBlZy10dXJibyBpcyBnZW5lcmFsbHkgMi00eCBhcyBmYXN0CithcyB0aGUgdW5tb2RpZmllZCB2ZXJzaW9uIG9mIGxpYmpwZWcsIGFsbCBlbHNlIGJlaW5nIGVxdWFsLiAgbGlianBlZy10dXJibyBhbHNvCitpbmNsdWRlcyBhIHdyYXBwZXIgbGlicmFyeSB3aGljaCBpbXBsZW1lbnRzIHRoZSBUdXJib0pQRUcgQVBJIHVzZWQgYnkgVmlydHVhbEdMCithbmQgVHVyYm9WTkMuCisKK2xpYmpwZWctdHVyYm8gd2FzIG9yaWdpbmFsbHkgYmFzZWQgb24gbGlianBlZy9TSU1EIGJ5IE1peWFzYWthIE1hc2FydSwgYnV0Cit0aGUgVGlnZXJWTkMgYW5kIFZpcnR1YWxHTCBwcm9qZWN0cyBtYWRlIG51bWVyb3VzIGVuaGFuY2VtZW50cyB0byB0aGUgY29kZWMgaW4KKzIwMDksIGluY2x1ZGluZyBpbXByb3ZlZCBzdXBwb3J0IGZvciBNYWMgT1MgWCwgNjQtYml0IHN1cHBvcnQsIHN1cHBvcnQgZm9yCiszMi1iaXQgYW5kIGJpZyBlbmRpYW4gcGl4ZWwgZm9ybWF0cyAoUkdCWCwgWEJHUiwgZXRjLiksIGFjY2VsZXJhdGVkIEh1ZmZtYW4KK2VuY29kaW5nL2RlY29kaW5nLCBhbmQgdmFyaW91cyBidWcgZml4ZXMuICBUaGUgZ29hbCB3YXMgdG8gcHJvZHVjZSBhIGZ1bGx5IG9wZW4KK3NvdXJjZSBjb2RlYyB0aGF0IGNvdWxkIHJlcGxhY2UgdGhlIHBhcnRpYWxseSBjbG9zZWQgc291cmNlIFR1cmJvSlBFRy9JUFAgY29kZWMKK3VzZWQgYnkgVmlydHVhbEdMIGFuZCBUdXJib1ZOQy4gIGxpYmpwZWctdHVyYm8gZ2VuZXJhbGx5IHBlcmZvcm1zIGluIHRoZSByYW5nZQorb2YgODAtMTIwJSBvZiBUdXJib0pQRUcvSVBQLiAgSXQgaXMgZmFzdGVyIGluIHNvbWUgYXJlYXMgYnV0IHNsb3dlciBpbiBvdGhlcnMuCisKK0luIGVhcmx5IDIwMTAsIGxpYmpwZWctdHVyYm8gc3B1biBvZmYgaW50byBpdHMgb3duIGluZGVwZW5kZW50IHByb2plY3QsIHdpdGgKK3RoZSBnb2FsIG9mIG1ha2luZyBoaWdoLXNwZWVkIEpQRUcgY29tcHJlc3Npb24vZGVjb21wcmVzc2lvbiB0ZWNobm9sb2d5CithdmFpbGFibGUgdG8gYSBicm9hZGVyIHJhbmdlIG9mIHVzZXJzIGFuZCBkZXZlbG9wZXJzLgorCisjLS0+JXByZXAKKyMtLT4lc2V0dXAgLXEKKworIy0tPiVidWlsZAorIy0tPmNvbmZpZ3VyZSBsaWJkaXI9L29wdC8le25hbWV9LyV7X19saWJ9IG1hbmRpcj0vb3B0LyV7bmFtZX0vbWFuIEpQRUdfTElCX1ZFUlNJT049QEpQRUdfTElCX1ZFUlNJT05AIFNPX01BSk9SX1ZFUlNJT049QFNPX01BSk9SX1ZFUlNJT05AIFNPX01JTk9SX1ZFUlNJT049QFNPX01JTk9SX1ZFUlNJT05AIC0td2l0aC1waWMKKyMtLT5tYWtlIERFU1RESVI9JFJQTV9CVUlMRF9ST09UIGxpYmRpcj0vb3B0LyV7bmFtZX0vJXtfX2xpYn0gbWFuZGlyPS9vcHQvJXtuYW1lfS9tYW4KKworJWluc3RhbGwKKworcm0gLXJmICRSUE1fQlVJTERfUk9PVAorbWFrZSBpbnN0YWxsIERFU1RESVI9JFJQTV9CVUlMRF9ST09UIGxpYmRpcj0vb3B0LyV7bmFtZX0vJXtfX2xpYn0gbWFuZGlyPS9vcHQvJXtuYW1lfS9tYW4KK3JtIC1mICRSUE1fQlVJTERfUk9PVC9vcHQvJXtuYW1lfS8le19fbGlifS8qLmxhCitta2RpciAtcCAkUlBNX0JVSUxEX1JPT1QvdXNyLyV7X19saWJ9CittdiAkUlBNX0JVSUxEX1JPT1Qvb3B0LyV7bmFtZX0vJXtfX2xpYn0vbGlidHVyYm9qcGVnLiogJFJQTV9CVUlMRF9ST09UL3Vzci8le19fbGlifQorL3NiaW4vbGRjb25maWcgLW4gJFJQTV9CVUlMRF9ST09UL29wdC8le25hbWV9LyV7X19saWJ9Cisvc2Jpbi9sZGNvbmZpZyAtbiAkUlBNX0JVSUxEX1JPT1QvdXNyLyV7X19saWJ9Citta2RpciAtcCAkUlBNX0JVSUxEX1JPT1QvdXNyL2luY2x1ZGUKK212ICRSUE1fQlVJTERfUk9PVC9vcHQvJXtuYW1lfS9pbmNsdWRlL3R1cmJvanBlZy5oICRSUE1fQlVJTERfUk9PVC91c3IvaW5jbHVkZQorbG4gLWZzIC91c3IvaW5jbHVkZS90dXJib2pwZWcuaCAkUlBNX0JVSUxEX1JPT1Qvb3B0LyV7bmFtZX0vaW5jbHVkZS8KK2xuIC1mcyAvdXNyLyV7X19saWJ9L2xpYnR1cmJvanBlZy5hICRSUE1fQlVJTERfUk9PVC9vcHQvJXtuYW1lfS8le19fbGlifS8KKworJXBvc3QgLXAgL3NiaW4vbGRjb25maWcKKworJXBvc3R1biAtcCAvc2Jpbi9sZGNvbmZpZworCislY2xlYW4KK3JtIC1yZiAkUlBNX0JVSUxEX1JPT1QKKworJWZpbGVzCislZGVmYXR0cigtLHJvb3Qscm9vdCkKKyVkb2MgJXtfc3JjZGlyfS9SRUFETUUtdHVyYm8udHh0ICV7X3NyY2Rpcn0vUkVBRE1FICV7X3NyY2Rpcn0vbGlianBlZy50eHQgJXtfc3JjZGlyfS91c2FnZS50eHQgJXtfc3JjZGlyfS9MSUNFTlNFLnR4dCAle19zcmNkaXJ9L0xHUEwudHh0CislZGlyIC9vcHQvJXtuYW1lfQorJWRpciAvb3B0LyV7bmFtZX0vYmluCisvb3B0LyV7bmFtZX0vYmluL2NqcGVnCisvb3B0LyV7bmFtZX0vYmluL2RqcGVnCisvb3B0LyV7bmFtZX0vYmluL2pwZWd0cmFuCisvb3B0LyV7bmFtZX0vYmluL2pwZ3Rlc3QKKy9vcHQvJXtuYW1lfS9iaW4vcmRqcGdjb20KKy9vcHQvJXtuYW1lfS9iaW4vd3JqcGdjb20KKyVkaXIgL29wdC8le25hbWV9LyV7X19saWJ9CislaWZhcmNoIHg4Nl82NAorJWVsc2UKKy9vcHQvJXtuYW1lfS9saWIzMgorJWVuZGlmCisvb3B0LyV7bmFtZX0vJXtfX2xpYn0vbGlianBlZy5zby5AU09fTUFKT1JfVkVSU0lPTkAuMC5AU09fTUlOT1JfVkVSU0lPTkAKKy9vcHQvJXtuYW1lfS8le19fbGlifS9saWJqcGVnLnNvLkBTT19NQUpPUl9WRVJTSU9OQAorL29wdC8le25hbWV9LyV7X19saWJ9L2xpYmpwZWcuc28KKy9vcHQvJXtuYW1lfS8le19fbGlifS9saWJqcGVnLmEKKy9vcHQvJXtuYW1lfS8le19fbGlifS9saWJ0dXJib2pwZWcuYQorL3Vzci8le19fbGlifS9saWJ0dXJib2pwZWcuc28KKy91c3IvJXtfX2xpYn0vbGlidHVyYm9qcGVnLmEKKy91c3IvaW5jbHVkZS90dXJib2pwZWcuaAorJWRpciAvb3B0LyV7bmFtZX0vaW5jbHVkZQorL29wdC8le25hbWV9L2luY2x1ZGUvamNvbmZpZy5oCisvb3B0LyV7bmFtZX0vaW5jbHVkZS9qZXJyb3IuaAorL29wdC8le25hbWV9L2luY2x1ZGUvam1vcmVjZmcuaAorL29wdC8le25hbWV9L2luY2x1ZGUvanBlZ2xpYi5oCisvb3B0LyV7bmFtZX0vaW5jbHVkZS90dXJib2pwZWcuaAorJWRpciAvb3B0LyV7bmFtZX0vbWFuCislZGlyIC9vcHQvJXtuYW1lfS9tYW4vbWFuMQorL29wdC8le25hbWV9L21hbi9tYW4xL2NqcGVnLjEqCisvb3B0LyV7bmFtZX0vbWFuL21hbjEvZGpwZWcuMSoKKy9vcHQvJXtuYW1lfS9tYW4vbWFuMS9qcGVndHJhbi4xKgorL29wdC8le25hbWV9L21hbi9tYW4xL3JkanBnY29tLjEqCisvb3B0LyV7bmFtZX0vbWFuL21hbjEvd3JqcGdjb20uMSoKKworJWNoYW5nZWxvZwpkaWZmIC0tZ2l0IGEvcmVsZWFzZS9tYWtlY3lnd2lucGtnLmluIGIvcmVsZWFzZS9tYWtlY3lnd2lucGtnLmluCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjUxZDU4NTIKLS0tIC9kZXYvbnVsbAorKysgYi9yZWxlYXNlL21ha2VjeWd3aW5wa2cuaW4KQEAgLTAsMCArMSw0MiBAQAorIyEvYmluL3NoCisKK3NldCAtdQorc2V0IC1lCit0cmFwIG9uZXhpdCBJTlQKK3RyYXAgb25leGl0IFRFUk0KK3RyYXAgb25leGl0IEVYSVQKKworVE1QRElSPQorCitvbmV4aXQoKQoreworCWlmIFsgISAiJFRNUERJUiIgPSAiIiBdOyB0aGVuCisJCXJtIC1yZiAkVE1QRElSCisJZmkKK30KKworUEFDS0FHRV9OQU1FPUBQQUNLQUdFX05BTUVACitWRVJTSU9OPUBWRVJTSU9OQAorU1JDRElSPUBhYnNfdG9wX3NyY2RpckAKKwordW1hc2sgMDIyCitybSAtZiAkUEFDS0FHRV9OQU1FLSRWRVJTSU9OLWN5Z3dpbi50YXIuYnoyCitUTVBESVI9YG1rdGVtcCAtZCAvdG1wL2xqdGJ1aWxkLlhYWFhYWGAKK19fUFdEPWBwd2RgCittYWtlIGluc3RhbGwgREVTVERJUj0kVE1QRElSL3BrZyBtYW5kaXI9L29wdC8kUEFDS0FHRV9OQU1FL21hbgorcm0gJFRNUERJUi9wa2cvb3B0LyRQQUNLQUdFX05BTUUvbGliLyoubGEKK0RPQ0RJUj0kVE1QRElSL3BrZy91c3Ivc2hhcmUvZG9jLyRQQUNLQUdFX05BTUUtJFZFUlNJT04KK21rZGlyIC1wICRET0NESVIKK2luc3RhbGwgLW0gNjQ0ICRTUkNESVIvUkVBRE1FLXR1cmJvLnR4dCAkRE9DRElSCitpbnN0YWxsIC1tIDY0NCAkU1JDRElSL1JFQURNRSAkRE9DRElSCitpbnN0YWxsIC1tIDY0NCAkU1JDRElSL2xpYmpwZWcudHh0ICRET0NESVIKK2luc3RhbGwgLW0gNjQ0ICRTUkNESVIvdXNhZ2UudHh0ICRET0NESVIKK2luc3RhbGwgLW0gNjQ0ICRTUkNESVIvTElDRU5TRS50eHQgJERPQ0RJUgoraW5zdGFsbCAtbSA2NDQgJFNSQ0RJUi9MR1BMLnR4dCAkRE9DRElSCitsbiAtZnMgbGliICRUTVBESVIvcGtnL29wdC8kUEFDS0FHRV9OQU1FL2xpYjMyCitjZCAkVE1QRElSL3BrZwordGFyIGNmaiAuLi8kUEFDS0FHRV9OQU1FLSRWRVJTSU9OLWN5Z3dpbi50YXIuYnoyICoKK2NkICRfX1BXRAorbXYgJFRNUERJUi8qLnRhci5iejIgLgorCitleGl0IDAKZGlmZiAtLWdpdCBhL3JlbGVhc2UvbWFrZWRwa2cuaW4gYi9yZWxlYXNlL21ha2VkcGtnLmluCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjJhMDUzOWEKLS0tIC9kZXYvbnVsbAorKysgYi9yZWxlYXNlL21ha2VkcGtnLmluCkBAIC0wLDAgKzEsODUgQEAKKyMhL2Jpbi9zaAorCitzZXQgLXUKK3NldCAtZQordHJhcCBvbmV4aXQgSU5UCit0cmFwIG9uZXhpdCBURVJNCit0cmFwIG9uZXhpdCBFWElUCisKK1RNUERJUj0KKworb25leGl0KCkKK3sKKwlpZiBbICEgIiRUTVBESVIiID0gIiIgXTsgdGhlbgorCQlzdWRvIHJtIC1yZiAkVE1QRElSCisJZmkKK30KKworbWFrZWRlYigpCit7CisJU1VQUExFTUVOVD0kMQorCURJUk5BTUU9JFBBQ0tBR0VfTkFNRQorCisJaWYgWyAkU1VQUExFTUVOVCA9IDEgXTsgdGhlbgorCQlQQUNLQUdFX05BTUU9JFBBQ0tBR0VfTkFNRVwzMgorCQlERUJBUkNIPWFtZDY0CisJCV9fTElCPWxpYjMyCisJZWxzZQorCQlfX0xJQj1saWIKKwlmaQorCisJdW1hc2sgMDIyCisJcm0gLWYgJFBBQ0tBR0VfTkFNRVxfJFZFUlNJT05cXyRERUJBUkNILmRlYgorCVRNUERJUj1gbWt0ZW1wIC1kIC90bXAvJFBBQ0tBR0VfTkFNRS1idWlsZC5YWFhYWFhgCisJbWtkaXIgJFRNUERJUi9ERUJJQU4KKwljcCBwa2dzY3JpcHRzL2RlYi1jb250cm9sICRUTVBESVIvREVCSUFOL2NvbnRyb2wKKworCW1ha2UgaW5zdGFsbCBwcmVmaXg9JFRNUERJUi9vcHQvJERJUk5BTUUgbGliZGlyPSRUTVBESVIvb3B0LyRESVJOQU1FLyRfX0xJQiBtYW5kaXI9JFRNUERJUi9vcHQvJERJUk5BTUUvbWFuCisJcm0gLWYgJFRNUERJUi9vcHQvJERJUk5BTUUvJF9fTElCLyoubGEKKworCWlmIFsgJFNVUFBMRU1FTlQgPSAxIF07IHRoZW4KKwkJcm0gLXJmICRUTVBESVIvb3B0LyRESVJOQU1FL2luY2x1ZGUKKwkJcm0gLXJmICRUTVBESVIvb3B0LyRESVJOQU1FL21hbgorCQlybSAtcmYgJFRNUERJUi9vcHQvJERJUk5BTUUvYmluCisJZmkKKworCW1rZGlyIC1wICRUTVBESVIvdXNyLyRfX0xJQgorCW12ICRUTVBESVIvb3B0LyRESVJOQU1FLyRfX0xJQi9saWJ0dXJib2pwZWcuKiAkVE1QRElSL3Vzci8kX19MSUIKKwlsbiAtZnMgL3Vzci8kX19MSUIvbGlidHVyYm9qcGVnLmEgJFRNUERJUi9vcHQvJERJUk5BTUUvJF9fTElCLworCS9zYmluL2xkY29uZmlnIC1uICRUTVBESVIvb3B0LyRESVJOQU1FLyRfX0xJQgorCS9zYmluL2xkY29uZmlnIC1uICRUTVBESVIvdXNyLyRfX0xJQgorCisJaWYgWyAhICRTVVBQTEVNRU5UID0gMSBdOyB0aGVuCisJCWlmIFsgIiRERUJBUkNIIiA9ICJhbWQ2NCIgXTsgdGhlbgorCQkJbG4gLWZzIGxpYiAkVE1QRElSL29wdC8kRElSTkFNRS9saWI2NAorCQllbHNlCisJCQlpZiBbICEgIiRfX0xJQiIgPSAibGliMzIiIF07IHRoZW4KKwkJCQlsbiAtZnMgbGliICRUTVBESVIvb3B0LyRESVJOQU1FL2xpYjMyCisJCQlmaQorCQlmaQorCQlta2RpciAtcCAkVE1QRElSL3Vzci9pbmNsdWRlCisJCW12ICRUTVBESVIvb3B0LyRESVJOQU1FL2luY2x1ZGUvdHVyYm9qcGVnLmggJFRNUERJUi91c3IvaW5jbHVkZQorCQlsbiAtZnMgL3Vzci9pbmNsdWRlL3R1cmJvanBlZy5oICRUTVBESVIvb3B0LyRESVJOQU1FL2luY2x1ZGUvCisJCW1rZGlyIC1wICRUTVBESVIvdXNyL3NoYXJlL2RvYy8kRElSTkFNRS0kVkVSU0lPTgorCQlpbnN0YWxsIC1tIDY0NCAkU1JDRElSL0xJQ0VOU0UudHh0ICRUTVBESVIvdXNyL3NoYXJlL2RvYy8kRElSTkFNRS0kVkVSU0lPTgorCQlpbnN0YWxsIC1tIDY0NCAkU1JDRElSL0xHUEwudHh0ICRUTVBESVIvdXNyL3NoYXJlL2RvYy8kRElSTkFNRS0kVkVSU0lPTgorCQlpbnN0YWxsIC1tIDY0NCAkU1JDRElSL1JFQURNRS10dXJiby50eHQgJFRNUERJUi91c3Ivc2hhcmUvZG9jLyRESVJOQU1FLSRWRVJTSU9OCisJCWluc3RhbGwgLW0gNjQ0ICRTUkNESVIvUkVBRE1FICRUTVBESVIvdXNyL3NoYXJlL2RvYy8kRElSTkFNRS0kVkVSU0lPTgorCQlpbnN0YWxsIC1tIDY0NCAkU1JDRElSL2xpYmpwZWcudHh0ICRUTVBESVIvdXNyL3NoYXJlL2RvYy8kRElSTkFNRS0kVkVSU0lPTgorCQlpbnN0YWxsIC1tIDY0NCAkU1JDRElSL3VzYWdlLnR4dCAkVE1QRElSL3Vzci9zaGFyZS9kb2MvJERJUk5BTUUtJFZFUlNJT04KKwlmaQorCisJc3VkbyBjaG93biAtUmggcm9vdDpyb290ICRUTVBESVIvKgorCWRwa2cgLWIgJFRNUERJUiAkUEFDS0FHRV9OQU1FXF8kVkVSU0lPTlxfJERFQkFSQ0guZGViCit9CisKK1BBQ0tBR0VfTkFNRT1AUEFDS0FHRV9OQU1FQAorVkVSU0lPTj1AVkVSU0lPTkAKK0JVSUxEPUBCVUlMREAKK0RFQkFSQ0g9QERFQkFSQ0hACitTUkNESVI9QGFic190b3Bfc3JjZGlyQAorCittYWtlZGViIDAKK2lmIFsgIiRERUJBUkNIIiA9ICJpMzg2IiBdOyB0aGVuIG1ha2VkZWIgMTsgZmkKKworZXhpdApkaWZmIC0tZ2l0IGEvcmVsZWFzZS9tYWtlbWFjcGtnLmluIGIvcmVsZWFzZS9tYWtlbWFjcGtnLmluCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjRmZWU2YzEKLS0tIC9kZXYvbnVsbAorKysgYi9yZWxlYXNlL21ha2VtYWNwa2cuaW4KQEAgLTAsMCArMSwxNjMgQEAKKyMhL2Jpbi9zaAorCitzZXQgLXUKK3NldCAtZQordHJhcCBvbmV4aXQgSU5UCit0cmFwIG9uZXhpdCBURVJNCit0cmFwIG9uZXhpdCBFWElUCisKK1RNUERJUj0KKworb25leGl0KCkKK3sKKwlpZiBbICEgIiRUTVBESVIiID0gIiIgXTsgdGhlbgorCQlzdWRvIHJtIC1yZiAkVE1QRElSCisJZmkKK30KKwordXNhZ2UoKQoreworCWVjaG8gIiQwIFt1bml2ZXJzYWwgWzMyLWJpdCBidWlsZCBkaXJdXSIKKwlleGl0IDEKK30KKworVU5JVkVSU0FMPTAKKworUEFDS0FHRV9OQU1FPUBQQUNLQUdFX05BTUVACitWRVJTSU9OPUBWRVJTSU9OQAorQlVJTEQ9QEJVSUxEQAorU1JDRElSPUBhYnNfdG9wX3NyY2RpckAKK0JVSUxERElSMzI9QGFic190b3Bfc3JjZGlyQC9vc3h4ODYKK2lmIFsgJCMgLWd0IDAgXTsgdGhlbgorCWlmIFsgIiQxIiA9ICJ1bml2ZXJzYWwiIF07IHRoZW4KKwkJVU5JVkVSU0FMPTEKKwkJaWYgWyAkIyAtZ3QgMSBdOyB0aGVuIEJVSUxERElSMzI9JDI7IGZpCisJZmkKK2ZpCitQQUNLQUdFTUFLRVI9L0RldmVsb3Blci9BcHBsaWNhdGlvbnMvVXRpbGl0aWVzL1BhY2thZ2VNYWtlci5hcHAvQ29udGVudHMvTWFjT1MvUGFja2FnZU1ha2VyCisKK2lmIFsgLWYgJFBBQ0tBR0VfTkFNRS0kVkVSU0lPTi5kbWcgXTsgdGhlbgorCXJtIC1mICRQQUNLQUdFX05BTUUtJFZFUlNJT04uZG1nCitmaQorCit1bWFzayAwMjIKK1RNUERJUj1gbWt0ZW1wIC1kIC90bXAvJFBBQ0tBR0VfTkFNRS1idWlsZC5YWFhYWFhgCitQS0dST09UPSRUTVBESVIvcGtnL1BhY2thZ2VfUm9vdAorbWtkaXIgLXAgJFBLR1JPT1QKK21rZGlyIC1wICRQS0dST09UL29wdC8kUEFDS0FHRV9OQU1FL2JpbgorbWFrZSBpbnN0YWxsIERFU1RESVI9JFBLR1JPT1QgbWFuZGlyPS9vcHQvJFBBQ0tBR0VfTkFNRS9tYW4KK3JtIC1mICRQS0dST09UL29wdC8kUEFDS0FHRV9OQU1FL2xpYi8qLmxhCitta2RpciAtcCAkUEtHUk9PVC91c3IvbGliCittdiAkUEtHUk9PVC9vcHQvJFBBQ0tBR0VfTkFNRS9saWIvbGlidHVyYm9qcGVnLiogJFBLR1JPT1QvdXNyL2xpYgorbWtkaXIgLXAgJFBLR1JPT1QvdXNyL2luY2x1ZGUKK212ICRQS0dST09UL29wdC8kUEFDS0FHRV9OQU1FL2luY2x1ZGUvdHVyYm9qcGVnLmggJFBLR1JPT1QvdXNyL2luY2x1ZGUKKworaWYgWyAkVU5JVkVSU0FMID0gMSBdOyB0aGVuCisJaWYgWyAhIC1kICRCVUlMRERJUjMyIF07IHRoZW4KKwkJZWNobyBFUlJPUjogMzItYml0IGJ1aWxkIGRpcmVjdG9yeSAkQlVJTERESVIzMiBkb2VzIG5vdCBleGlzdAorCQlleGl0IDEKKwlmaQorCWlmIFsgISAtZiAkQlVJTERESVIzMi9NYWtlZmlsZSBdOyB0aGVuCisJCWVjaG8gRVJST1I6IDMyLWJpdCBidWlsZCBkaXJlY3RvcnkgJEJVSUxERElSMzIgaXMgbm90IGNvbmZpZ3VyZWQKKwkJZXhpdCAxCisJZmkKKwlta2RpciAtcCAkVE1QRElSL2Rpc3QueDg2CisJcHVzaGQgJEJVSUxERElSMzIKKwltYWtlIGluc3RhbGwgREVTVERJUj0kVE1QRElSL2Rpc3QueDg2CisJcG9wZAorCWlmIFsgISAtaCAkVE1QRElSL2Rpc3QueDg2L29wdC8kUEFDS0FHRV9OQU1FL2xpYi9saWJqcGVnLkBTT19NQUpPUl9WRVJTSU9OQC5keWxpYiAtYSBcCisJCSEgLWggJFBLR1JPT1Qvb3B0LyRQQUNLQUdFX05BTUUvbGliL2xpYmpwZWcuQFNPX01BSk9SX1ZFUlNJT05ALmR5bGliIF07IHRoZW4KKwkJbGlwbyAtY3JlYXRlIFwKKwkJCS1hcmNoIGkzODYgJFRNUERJUi9kaXN0Lng4Ni9vcHQvJFBBQ0tBR0VfTkFNRS9saWIvbGlianBlZy5AU09fTUFKT1JfVkVSU0lPTkAuZHlsaWIgXAorCQkJLWFyY2ggeDg2XzY0ICRQS0dST09UL29wdC8kUEFDS0FHRV9OQU1FL2xpYi9saWJqcGVnLkBTT19NQUpPUl9WRVJTSU9OQC5keWxpYiBcCisJCQktb3V0cHV0ICRQS0dST09UL29wdC8kUEFDS0FHRV9OQU1FL2xpYi9saWJqcGVnLkBTT19NQUpPUl9WRVJTSU9OQC5keWxpYgorCWVsaWYgWyAhIC1oICRUTVBESVIvZGlzdC54ODYvb3B0LyRQQUNLQUdFX05BTUUvbGliL2xpYmpwZWcuQFNPX01BSk9SX1ZFUlNJT05ALjAuQFNPX01JTk9SX1ZFUlNJT05ALmR5bGliIC1hIFwKKwkJISAtaCAkUEtHUk9PVC9vcHQvJFBBQ0tBR0VfTkFNRS9saWIvbGlianBlZy5AU09fTUFKT1JfVkVSU0lPTkAuMC5AU09fTUlOT1JfVkVSU0lPTkAuZHlsaWIgXTsgdGhlbgorCQlsaXBvIC1jcmVhdGUgXAorCQkJLWFyY2ggaTM4NiAkVE1QRElSL2Rpc3QueDg2L29wdC8kUEFDS0FHRV9OQU1FL2xpYi9saWJqcGVnLkBTT19NQUpPUl9WRVJTSU9OQC4wLkBTT19NSU5PUl9WRVJTSU9OQC5keWxpYiBcCisJCQktYXJjaCB4ODZfNjQgJFBLR1JPT1Qvb3B0LyRQQUNLQUdFX05BTUUvbGliL2xpYmpwZWcuQFNPX01BSk9SX1ZFUlNJT05ALjAuQFNPX01JTk9SX1ZFUlNJT05ALmR5bGliIFwKKwkJCS1vdXRwdXQgJFBLR1JPT1Qvb3B0LyRQQUNLQUdFX05BTUUvbGliL2xpYmpwZWcuQFNPX01BSk9SX1ZFUlNJT05ALjAuQFNPX01JTk9SX1ZFUlNJT05ALmR5bGliCisJZmkKKwlsaXBvIC1jcmVhdGUgXAorCQktYXJjaCBpMzg2ICRUTVBESVIvZGlzdC54ODYvb3B0LyRQQUNLQUdFX05BTUUvbGliL2xpYmpwZWcuYSBcCisJCS1hcmNoIHg4Nl82NCAkUEtHUk9PVC9vcHQvJFBBQ0tBR0VfTkFNRS9saWIvbGlianBlZy5hIFwKKwkJLW91dHB1dCAkUEtHUk9PVC9vcHQvJFBBQ0tBR0VfTkFNRS9saWIvbGlianBlZy5hCisJbGlwbyAtY3JlYXRlIFwKKwkJLWFyY2ggaTM4NiAkVE1QRElSL2Rpc3QueDg2L29wdC8kUEFDS0FHRV9OQU1FL2xpYi9saWJ0dXJib2pwZWcuZHlsaWIgXAorCQktYXJjaCB4ODZfNjQgJFBLR1JPT1QvdXNyL2xpYi9saWJ0dXJib2pwZWcuZHlsaWIgXAorCQktb3V0cHV0ICRQS0dST09UL3Vzci9saWIvbGlidHVyYm9qcGVnLmR5bGliCisJbGlwbyAtY3JlYXRlIFwKKwkJLWFyY2ggaTM4NiAkVE1QRElSL2Rpc3QueDg2L29wdC8kUEFDS0FHRV9OQU1FL2xpYi9saWJ0dXJib2pwZWcuYSBcCisJCS1hcmNoIHg4Nl82NCAkUEtHUk9PVC91c3IvbGliL2xpYnR1cmJvanBlZy5hIFwKKwkJLW91dHB1dCAkUEtHUk9PVC91c3IvbGliL2xpYnR1cmJvanBlZy5hCisJbGlwbyAtY3JlYXRlIFwKKwkJLWFyY2ggaTM4NiAkVE1QRElSL2Rpc3QueDg2L29wdC8kUEFDS0FHRV9OQU1FL2Jpbi9janBlZyBcCisJCS1hcmNoIHg4Nl82NCAkUEtHUk9PVC9vcHQvJFBBQ0tBR0VfTkFNRS9iaW4vY2pwZWcgXAorCQktb3V0cHV0ICRQS0dST09UL29wdC8kUEFDS0FHRV9OQU1FL2Jpbi9janBlZworCWxpcG8gLWNyZWF0ZSBcCisJCS1hcmNoIGkzODYgJFRNUERJUi9kaXN0Lng4Ni9vcHQvJFBBQ0tBR0VfTkFNRS9iaW4vZGpwZWcgXAorCQktYXJjaCB4ODZfNjQgJFBLR1JPT1Qvb3B0LyRQQUNLQUdFX05BTUUvYmluL2RqcGVnIFwKKwkJLW91dHB1dCAkUEtHUk9PVC9vcHQvJFBBQ0tBR0VfTkFNRS9iaW4vZGpwZWcKKwlsaXBvIC1jcmVhdGUgXAorCQktYXJjaCBpMzg2ICRUTVBESVIvZGlzdC54ODYvb3B0LyRQQUNLQUdFX05BTUUvYmluL2pwZWd0cmFuIFwKKwkJLWFyY2ggeDg2XzY0ICRQS0dST09UL29wdC8kUEFDS0FHRV9OQU1FL2Jpbi9qcGVndHJhbiBcCisJCS1vdXRwdXQgJFBLR1JPT1Qvb3B0LyRQQUNLQUdFX05BTUUvYmluL2pwZWd0cmFuCisJbGlwbyAtY3JlYXRlIFwKKwkJLWFyY2ggaTM4NiAkVE1QRElSL2Rpc3QueDg2L29wdC8kUEFDS0FHRV9OQU1FL2Jpbi9qcGd0ZXN0IFwKKwkJLWFyY2ggeDg2XzY0ICRQS0dST09UL29wdC8kUEFDS0FHRV9OQU1FL2Jpbi9qcGd0ZXN0IFwKKwkJLW91dHB1dCAkUEtHUk9PVC9vcHQvJFBBQ0tBR0VfTkFNRS9iaW4vanBndGVzdAorCWxpcG8gLWNyZWF0ZSBcCisJCS1hcmNoIGkzODYgJFRNUERJUi9kaXN0Lng4Ni9vcHQvJFBBQ0tBR0VfTkFNRS9iaW4vcmRqcGdjb20gXAorCQktYXJjaCB4ODZfNjQgJFBLR1JPT1Qvb3B0LyRQQUNLQUdFX05BTUUvYmluL3JkanBnY29tIFwKKwkJLW91dHB1dCAkUEtHUk9PVC9vcHQvJFBBQ0tBR0VfTkFNRS9iaW4vcmRqcGdjb20KKwlsaXBvIC1jcmVhdGUgXAorCQktYXJjaCBpMzg2ICRUTVBESVIvZGlzdC54ODYvb3B0LyRQQUNLQUdFX05BTUUvYmluL3dyanBnY29tIFwKKwkJLWFyY2ggeDg2XzY0ICRQS0dST09UL29wdC8kUEFDS0FHRV9OQU1FL2Jpbi93cmpwZ2NvbSBcCisJCS1vdXRwdXQgJFBLR1JPT1Qvb3B0LyRQQUNLQUdFX05BTUUvYmluL3dyanBnY29tCisKK2ZpCisKK2luc3RhbGxfbmFtZV90b29sIC1pZCAvb3B0LyRQQUNLQUdFX05BTUUvbGliL2xpYmpwZWcuQFNPX01BSk9SX1ZFUlNJT05ALmR5bGliICRQS0dST09UL29wdC8kUEFDS0FHRV9OQU1FL2xpYi9saWJqcGVnLkBTT19NQUpPUl9WRVJTSU9OQC5keWxpYgoraW5zdGFsbF9uYW1lX3Rvb2wgLWlkIGxpYnR1cmJvanBlZy5keWxpYiAkUEtHUk9PVC91c3IvbGliL2xpYnR1cmJvanBlZy5keWxpYgorCitsbiAtZnMgL3Vzci9pbmNsdWRlL3R1cmJvanBlZy5oICRQS0dST09UL29wdC8kUEFDS0FHRV9OQU1FL2luY2x1ZGUvCitsbiAtZnMgL3Vzci9saWIvbGlidHVyYm9qcGVnLmEgJFBLR1JPT1Qvb3B0LyRQQUNLQUdFX05BTUUvbGliLworaWYgWyAhIC1oICRQS0dST09UL29wdC8kUEFDS0FHRV9OQU1FL2xpYjMyIF07IHRoZW4KKwlsbiAtZnMgbGliICRQS0dST09UL29wdC8kUEFDS0FHRV9OQU1FL2xpYjMyCitmaQoraWYgWyAhIC1oICRQS0dST09UL29wdC8kUEFDS0FHRV9OQU1FL2xpYjY0IF07IHRoZW4KKwlsbiAtZnMgbGliICRQS0dST09UL29wdC8kUEFDS0FHRV9OQU1FL2xpYjY0CitmaQorCitta2RpciAtcCAkUEtHUk9PVC9MaWJyYXJ5L0RvY3VtZW50YXRpb24vJFBBQ0tBR0VfTkFNRQorY2htb2QgMTc3NSAkUEtHUk9PVC9MaWJyYXJ5CitjaG1vZCA3NzUgJFBLR1JPT1QvTGlicmFyeS9Eb2N1bWVudGF0aW9uIAorbWtkaXIgLXAgJFRNUERJUi9wa2cvUmVzb3VyY2VzIAorCitjcCBwa2dzY3JpcHRzL0Rlc2NyaXB0aW9uLnBsaXN0ICRUTVBESVIvcGtnLworY3AgcGtnc2NyaXB0cy9JbmZvLnBsaXN0ICRUTVBESVIvcGtnLworaW5zdGFsbCAtbSA3NTUgcGtnc2NyaXB0cy91bmluc3RhbGwgJFBLR1JPT1Qvb3B0LyRQQUNLQUdFX05BTUUvYmluLworCitpbnN0YWxsIC1tIDY0NCAkU1JDRElSL0xJQ0VOU0UudHh0ICRQS0dST09UL0xpYnJhcnkvRG9jdW1lbnRhdGlvbi8kUEFDS0FHRV9OQU1FL0xJQ0VOU0UudHh0IAoraW5zdGFsbCAtbSA2NDQgJFNSQ0RJUi9MR1BMLnR4dCAkUEtHUk9PVC9MaWJyYXJ5L0RvY3VtZW50YXRpb24vJFBBQ0tBR0VfTkFNRS9MR1BMLnR4dCAKK2luc3RhbGwgLW0gNjQ0ICRTUkNESVIvUkVBRE1FLXR1cmJvLnR4dCAkUEtHUk9PVC9MaWJyYXJ5L0RvY3VtZW50YXRpb24vJFBBQ0tBR0VfTkFNRS9SRUFETUUtdHVyYm8udHh0IAoraW5zdGFsbCAtbSA2NDQgJFNSQ0RJUi9SRUFETUUgJFBLR1JPT1QvTGlicmFyeS9Eb2N1bWVudGF0aW9uLyRQQUNLQUdFX05BTUUvUkVBRE1FIAoraW5zdGFsbCAtbSA2NDQgJFNSQ0RJUi9saWJqcGVnLnR4dCAkUEtHUk9PVC9MaWJyYXJ5L0RvY3VtZW50YXRpb24vJFBBQ0tBR0VfTkFNRS9saWJqcGVnLnR4dCAKK2luc3RhbGwgLW0gNjQ0ICRTUkNESVIvdXNhZ2UudHh0ICRQS0dST09UL0xpYnJhcnkvRG9jdW1lbnRhdGlvbi8kUEFDS0FHRV9OQU1FL3VzYWdlLnR4dCAKKworc3VkbyBjaG93biAtUiByb290OmFkbWluICRQS0dST09UIAorc3VkbyBjaG93biAtUiByb290OjAgJFBLR1JPT1QvdXNyIAorY3AgJFNSQ0RJUi9yZWxlYXNlL0xpY2Vuc2UucnRmICRTUkNESVIvcmVsZWFzZS9XZWxjb21lLnJ0ZiAkU1JDRElSL3JlbGVhc2UvUmVhZE1lLnJ0ZiAkVE1QRElSL3BrZy9SZXNvdXJjZXMvIAorCitta2RpciAkVE1QRElSL2RtZworJFBBQ0tBR0VNQUtFUiAtYnVpbGQgLXYgLXAgJFRNUERJUi9kbWcvJFBBQ0tBR0VfTkFNRS5wa2cgXAorCS1mICRQS0dST09UIC1yICRUTVBESVIvcGtnL1Jlc291cmNlcyBcCisJLWkgJFRNUERJUi9wa2cvSW5mby5wbGlzdCAtZCAkVE1QRElSL3BrZy9EZXNjcmlwdGlvbi5wbGlzdCAKK2luc3RhbGwgLW0gNjQ0ICRTUkNESVIvcmVsZWFzZS91bmluc3RhbGwuYXBwbGVzY3JpcHQgJFRNUERJUiAKK3N1ZG8gb3NhY29tcGlsZSAtdCBBUFBMIC1vICIkVE1QRElSL2RtZy9Vbmluc3RhbGwgJFBBQ0tBR0VfTkFNRS5hcHAiICRUTVBESVIvdW5pbnN0YWxsLmFwcGxlc2NyaXB0IAorc3VkbyBjaG93biAtUiAkVVNFUiAiJFRNUERJUi9kbWcvVW5pbnN0YWxsICRQQUNLQUdFX05BTUUuYXBwIiAKK2hkaXV0aWwgY3JlYXRlIC1mcyBIRlMrIC12b2xuYW1lICRQQUNLQUdFX05BTUUtJFZFUlNJT04gXAorCS1zcmNmb2xkZXIgIiRUTVBESVIvZG1nIiAkVE1QRElSLyRQQUNLQUdFX05BTUUtJFZFUlNJT04uZG1nIAorY3AgJFRNUERJUi8kUEFDS0FHRV9OQU1FLSRWRVJTSU9OLmRtZyAuIAorCitleGl0CmRpZmYgLS1naXQgYS9yZWxlYXNlL21ha2VzdW5wa2cuaW4gYi9yZWxlYXNlL21ha2VzdW5wa2cuaW4KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYWEyZTczNQotLS0gL2Rldi9udWxsCisrKyBiL3JlbGVhc2UvbWFrZXN1bnBrZy5pbgpAQCAtMCwwICsxLDEzNyBAQAorIyEvYmluL3NoCisKK3NldCAtdQorc2V0IC1lCit0cmFwIG9uZXhpdCBJTlQKK3RyYXAgb25leGl0IFRFUk0KK3RyYXAgb25leGl0IEVYSVQKKworVE1QRElSPQorCitvbmV4aXQoKQoreworCWlmIFsgISAiJFRNUERJUiIgPSAiIiBdOyB0aGVuCisJCXJtIC1yZiAkVE1QRElSCisJZmkKK30KKwordXNhZ2UoKQoreworCWVjaG8gIiQwIFtjb21iaW5lZCBbMzItYml0IGJ1aWxkIGRpci5dXSIKKwlleGl0IDEKK30KKworQ09NQklORUQ9MAorCitQQUNLQUdFX05BTUU9QFBBQ0tBR0VfTkFNRUAKK1ZFUlNJT049QFZFUlNJT05ACitCVUlMRD1AQlVJTERACitQS0dBUkNIPUBERUJBUkNIQAorU1JDRElSPUBhYnNfdG9wX3NyY2RpckAKK0JVSUxERElSMzI9QGFic190b3Bfc3JjZGlyQC9zb2x4ODYKK2lmIFsgJCMgLWd0IDAgXTsgdGhlbgorCWlmIFsgIiQxIiA9ICJjb21iaW5lZCIgXTsgdGhlbgorCQlDT01CSU5FRD0xCisJCWlmIFsgJCMgLWd0IDEgXTsgdGhlbglCVUlMRERJUjMyPSQyOyBmaQorCWZpCitmaQorCit1bWFzayAwMjIKK1RNUERJUj1gbWt0ZW1wIC1kIC90bXAvJFBBQ0tBR0VfTkFNRS1idWlsZC5YWFhYWFhgCitybSAtZiAkUEFDS0FHRV9OQU1FLnBrZy5iejIKK2NwICRTUkNESVIvcmVsZWFzZS9jb3B5cmlnaHQgJFRNUERJUgordG91Y2ggJFRNUERJUi9kZXBlbmQKK2NwIHBrZ3NjcmlwdHMvcGtnaW5mbyAkVE1QRElSL3BrZ2luZm8gCisKK2lmIFsgIiRQS0dBUkNIIiA9ICJpMzg2IiBdOyB0aGVuCisJX19MSUI9bGliCitlbHNlCisJX19MSUI9bGliLyRQS0dBUkNICitmaQorCitpZiBbICRDT01CSU5FRCA9IDEgXTsgdGhlbgorCWlmIFsgISAtZCAkQlVJTERESVIzMiBdOyB0aGVuCisJCWVjaG8gRVJST1I6IDMyLWJpdCBidWlsZCBkaXJlY3RvcnkgJEJVSUxERElSMzIgZG9lcyBub3QgZXhpc3QKKwkJZXhpdCAxCisJZmkKKwlpZiBbICEgLWYgJEJVSUxERElSMzIvTWFrZWZpbGUgXTsgdGhlbgorCQllY2hvIEVSUk9SOiAzMi1iaXQgYnVpbGQgZGlyZWN0b3J5ICRCVUlMRERJUjMyIGlzIG5vdCBjb25maWd1cmVkCisJCWV4aXQgMQorCWZpCisJUFdEPWBwd2RgCisJY2QgJEJVSUxERElSMzIKKwltYWtlIGluc3RhbGwgREVTVERJUj0kVE1QRElSIG1hbmRpcj0vb3B0LyRQQUNLQUdFX05BTUUvbWFuIEFNX01BS0VGTEFHUz0ibWFuZGlyPS9vcHQvJFBBQ0tBR0VfTkFNRS9tYW4iCisJY2QgJFBXRAorZmkKKyMgVGhpcyBtZXNzIGlzIHRvIHdvcmsgYXJvdW5kIGEgYnVnIGluIC91c3IvY2NzL2Jpbi9tYWtlCittYWtlIGluc3RhbGwgREVTVERJUj0kVE1QRElSIGxpYmRpcj0vb3B0LyRQQUNLQUdFX05BTUUvJF9fTElCIG1hbmRpcj0vb3B0LyRQQUNLQUdFX05BTUUvbWFuIEFNX01BS0VGTEFHUz0ibGliZGlyPS9vcHQvJFBBQ0tBR0VfTkFNRS8kX19MSUIgbWFuZGlyPS9vcHQvJFBBQ0tBR0VfTkFNRS9tYW4iCitybSAtZiAkVE1QRElSL29wdC8kUEFDS0FHRV9OQU1FLyRfX0xJQi8qLmxhCitta2RpciAtcCAkVE1QRElSL29wdC8kUEFDS0FHRV9OQU1FL2RvYworY3AgJFNSQ0RJUi9MSUNFTlNFLnR4dCAkU1JDRElSL0xHUEwudHh0ICRTUkNESVIvUkVBRE1FLXR1cmJvLnR4dCAkU1JDRElSL1JFQURNRSAkU1JDRElSL2xpYmpwZWcudHh0ICRTUkNESVIvdXNhZ2UudHh0ICRUTVBESVIvb3B0LyRQQUNLQUdFX05BTUUvZG9jCitjaG1vZCA2NDQgJFRNUERJUi9vcHQvJFBBQ0tBR0VfTkFNRS9kb2MvKgorCitjYXQgPiRUTVBESVIvcHJvdG8gPDxFT0YKK2kgY29weXJpZ2h0CitpIGRlcGVuZAoraSBwa2dpbmZvCitkIG5vbmUgJFBBQ0tBR0VfTkFNRSAwNzU1IHJvb3QgYmluCitkIG5vbmUgJFBBQ0tBR0VfTkFNRS9iaW4gMDc1NSByb290IGJpbgorZiBub25lICRQQUNLQUdFX05BTUUvYmluL2NqcGVnIDA3NTUgcm9vdCBiaW4KK2Ygbm9uZSAkUEFDS0FHRV9OQU1FL2Jpbi9kanBlZyAwNzU1IHJvb3QgYmluCitmIG5vbmUgJFBBQ0tBR0VfTkFNRS9iaW4vanBlZ3RyYW4gMDc1NSByb290IGJpbgorZiBub25lICRQQUNLQUdFX05BTUUvYmluL2pwZ3Rlc3QgMDc1NSByb290IGJpbgorZiBub25lICRQQUNLQUdFX05BTUUvYmluL3JkanBnY29tIDA3NTUgcm9vdCBiaW4KK2Ygbm9uZSAkUEFDS0FHRV9OQU1FL2Jpbi93cmpwZ2NvbSAwNzU1IHJvb3QgYmluCitkIG5vbmUgJFBBQ0tBR0VfTkFNRS9saWIgMDc1NSByb290IGJpbgorRU9GCitpZiBbICRDT01CSU5FRCA9IDEgXTsgdGhlbgorY2F0ID4+JFRNUERJUi9wcm90byA8PEVPRgorZiBub25lICRQQUNLQUdFX05BTUUvbGliL2xpYmpwZWcuc28uQFNPX01BSk9SX1ZFUlNJT05ALjAuQFNPX01JTk9SX1ZFUlNJT05AIDA3NTUgcm9vdCBiaW4KK3Mgbm9uZSAkUEFDS0FHRV9OQU1FL2xpYi9saWJqcGVnLnNvLkBTT19NQUpPUl9WRVJTSU9OQD1saWJqcGVnLnNvLkBTT19NQUpPUl9WRVJTSU9OQC4wLkBTT19NSU5PUl9WRVJTSU9OQAorcyBub25lICRQQUNLQUdFX05BTUUvbGliL2xpYmpwZWcuc289bGlianBlZy5zby5AU09fTUFKT1JfVkVSU0lPTkAuMC5AU09fTUlOT1JfVkVSU0lPTkAKK2Ygbm9uZSAkUEFDS0FHRV9OQU1FL2xpYi9saWJqcGVnLmEgMDY0NCByb290IGJpbgorZiBub25lICRQQUNLQUdFX05BTUUvbGliL2xpYnR1cmJvanBlZy5zbyAwNzU1IHJvb3QgYmluCitmIG5vbmUgJFBBQ0tBR0VfTkFNRS9saWIvbGlidHVyYm9qcGVnLmEgMDY0NCByb290IGJpbgorRU9GCitmaQoraWYgWyAiJHtfX0xJQn0iICE9ICJsaWIiIF07IHRoZW4KK2VjaG8gZCBub25lICRQQUNLQUdFX05BTUUvJHtfX0xJQn0gMDc1NSByb290IGJpbiA+PiRUTVBESVIvcHJvdG8KK2VjaG8gcyBub25lICRQQUNLQUdFX05BTUUvbGliNjQ9JHtfX0xJQn0gPj4kVE1QRElSL3Byb3RvCitlY2hvIHMgbm9uZSAkUEFDS0FHRV9OQU1FL2xpYi82ND0kUEtHQVJDSCA+PiRUTVBESVIvcHJvdG8KK2ZpCitjYXQgPj4kVE1QRElSL3Byb3RvIDw8RU9GCitmIG5vbmUgJFBBQ0tBR0VfTkFNRS8ke19fTElCfS9saWJqcGVnLnNvLkBTT19NQUpPUl9WRVJTSU9OQC4wLkBTT19NSU5PUl9WRVJTSU9OQCAwNzU1IHJvb3QgYmluCitzIG5vbmUgJFBBQ0tBR0VfTkFNRS8ke19fTElCfS9saWJqcGVnLnNvLkBTT19NQUpPUl9WRVJTSU9OQD1saWJqcGVnLnNvLkBTT19NQUpPUl9WRVJTSU9OQC4wLkBTT19NSU5PUl9WRVJTSU9OQAorcyBub25lICRQQUNLQUdFX05BTUUvJHtfX0xJQn0vbGlianBlZy5zbz1saWJqcGVnLnNvLkBTT19NQUpPUl9WRVJTSU9OQC4wLkBTT19NSU5PUl9WRVJTSU9OQAorZiBub25lICRQQUNLQUdFX05BTUUvJHtfX0xJQn0vbGlianBlZy5hIDA2NDQgcm9vdCBiaW4KK2Ygbm9uZSAkUEFDS0FHRV9OQU1FLyR7X19MSUJ9L2xpYnR1cmJvanBlZy5zbyAwNzU1IHJvb3QgYmluCitmIG5vbmUgJFBBQ0tBR0VfTkFNRS8ke19fTElCfS9saWJ0dXJib2pwZWcuYSAwNjQ0IHJvb3QgYmluCitzIG5vbmUgJFBBQ0tBR0VfTkFNRS9saWIzMj1saWIKK2Qgbm9uZSAkUEFDS0FHRV9OQU1FL21hbiAwNzU1IHJvb3QgYmluCitkIG5vbmUgJFBBQ0tBR0VfTkFNRS9tYW4vbWFuMSAwNzU1IHJvb3QgYmluCitkIG5vbmUgJFBBQ0tBR0VfTkFNRS9tYW4vbWFuMS9janBlZy4xIDA2NDQgcm9vdCBiaW4KK2Qgbm9uZSAkUEFDS0FHRV9OQU1FL21hbi9tYW4xL2RqcGVnLjEgMDY0NCByb290IGJpbgorZCBub25lICRQQUNLQUdFX05BTUUvbWFuL21hbjEvanBlZ3RyYW4uMSAwNjQ0IHJvb3QgYmluCitkIG5vbmUgJFBBQ0tBR0VfTkFNRS9tYW4vbWFuMS9yZGpwZ2NvbS4xIDA2NDQgcm9vdCBiaW4KK2Qgbm9uZSAkUEFDS0FHRV9OQU1FL21hbi9tYW4xL3dyanBnY29tLjEgMDY0NCByb290IGJpbgorZCBub25lICRQQUNLQUdFX05BTUUvaW5jbHVkZSAwNzU1IHJvb3QgYmluCitmIG5vbmUgJFBBQ0tBR0VfTkFNRS9pbmNsdWRlL2pjb25maWcuaCAwNjQ0IHJvb3QgYmluCitmIG5vbmUgJFBBQ0tBR0VfTkFNRS9pbmNsdWRlL2plcnJvci5oIDA2NDQgcm9vdCBiaW4KK2Ygbm9uZSAkUEFDS0FHRV9OQU1FL2luY2x1ZGUvam1vcmVjZmcuaCAwNjQ0IHJvb3QgYmluCitmIG5vbmUgJFBBQ0tBR0VfTkFNRS9pbmNsdWRlL2pwZWdsaWIuaCAwNjQ0IHJvb3QgYmluCitmIG5vbmUgJFBBQ0tBR0VfTkFNRS9pbmNsdWRlL3R1cmJvanBlZy5oIDA2NDQgcm9vdCBiaW4KK2Qgbm9uZSAkUEFDS0FHRV9OQU1FL2RvYyAwNzU1IHJvb3QgYmluCitmIG5vbmUgJFBBQ0tBR0VfTkFNRS9kb2MvTEdQTC50eHQgMDY0NCByb290IGJpbgorZiBub25lICRQQUNLQUdFX05BTUUvZG9jL2xpYmpwZWcudHh0IDA2NDQgcm9vdCBiaW4KK2Ygbm9uZSAkUEFDS0FHRV9OQU1FL2RvYy9MSUNFTlNFLnR4dCAwNjQ0IHJvb3QgYmluCitmIG5vbmUgJFBBQ0tBR0VfTkFNRS9kb2MvUkVBRE1FIDA2NDQgcm9vdCBiaW4KK2Ygbm9uZSAkUEFDS0FHRV9OQU1FL2RvYy9SRUFETUUtdHVyYm8udHh0IDA2NDQgcm9vdCBiaW4KK2Ygbm9uZSAkUEFDS0FHRV9OQU1FL2RvYy91c2FnZS50eHQgMDY0NCByb290IGJpbgorRU9GCisKK3BrZ21rIC1vIC1yICRUTVBESVIvb3B0IC1kICRUTVBESVIgLWEgaTM4NiAtZiAkVE1QRElSL3Byb3RvCitwa2d0cmFucyAtcyAkVE1QRElSICRUTVBESVIvJFBBQ0tBR0VfTkFNRS0kVkVSU0lPTi5wa2cgJFBBQ0tBR0VfTkFNRQorYnppcDIgJFRNUERJUi8kUEFDS0FHRV9OQU1FLSRWRVJTSU9OLnBrZworY3AgJFRNUERJUi8kUEFDS0FHRV9OQU1FLSRWRVJTSU9OLnBrZy5iejIgLiAKKworZXhpdApkaWZmIC0tZ2l0IGEvcmVsZWFzZS9wa2dpbmZvLmluIGIvcmVsZWFzZS9wa2dpbmZvLmluCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjljOGJkYTIKLS0tIC9kZXYvbnVsbAorKysgYi9yZWxlYXNlL3BrZ2luZm8uaW4KQEAgLTAsMCArMSwxNiBAQAorQVJDSD1pMzg2CitQS0c9QFBBQ0tBR0VfTkFNRUAKK05BTUU9QFBBQ0tBR0VfTkFNRUAgU0RLIGFuZCBydW4gdGltZSBsaWJyYXJpZXMKK1ZFUlNJT049QFZFUlNJT05ALFJFVj1AQlVJTERACitTVU5XX1BLR1ZFUlM9MS4wCitERVNDPUEgU0lNRC1hY2NlbGVyYXRlZCBKUEVHIGNvZGVjIHdoaWNoIHByb3ZpZGVzIGJvdGggdGhlIGxpYmpwZWcgYW5kIFR1cmJvSlBFRyBBUElzCitWRU5ET1I9VGhlIGxpYmpwZWctdHVyYm8gUHJvamVjdAorSE9UTElORT1odHRwOi8vbGlianBlZy10dXJiby5WaXJ0dWFsR0wub3JnCitFTUFJTD1pbmZvcm1hdGlvbkB2aXJ0dWFsZ2wub3JnCitNQVhJTlNUPTEKK0NBVEVHT1JZPWFwcGxpY2F0aW9uCitCQVNFRElSPS9vcHQKK0NMQVNTRVM9bm9uZQorU1VOV19QS0dfQUxMWk9ORVM9dHJ1ZQorU1VOV19QS0dfSE9MTE9XPWZhbHNlCitTVU5XX1BLR19USElTWk9ORT1mYWxzZQpkaWZmIC0tZ2l0IGEvcmVsZWFzZS91bmluc3RhbGwuYXBwbGVzY3JpcHQgYi9yZWxlYXNlL3VuaW5zdGFsbC5hcHBsZXNjcmlwdApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wMDJmNjgxCi0tLSAvZGV2L251bGwKKysrIGIvcmVsZWFzZS91bmluc3RhbGwuYXBwbGVzY3JpcHQKQEAgLTAsMCArMSw0NSBAQAorLS0gQ29weXJpZ2h0IChDKTIwMTAgRC4gUi4gQ29tbWFuZGVyCistLSBDb3B5cmlnaHQgKEMpMjAwOSBTdW4gTWljcm9zeXN0ZW1zLCBJbmMuCistLQorLS0gVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmUgYW5kIG1heSBiZSByZWRpc3RyaWJ1dGVkIGFuZC9vciBtb2RpZmllZCB1bmRlcgorLS0gdGhlIHRlcm1zIG9mIHRoZSB3eFdpbmRvd3MgTGlicmFyeSBMaWNlbnNlLCBWZXJzaW9uIDMuMSBvciAoYXQgeW91ciBvcHRpb24pCistLSBhbnkgbGF0ZXIgdmVyc2lvbi4gIFRoZSBmdWxsIGxpY2Vuc2UgaXMgaW4gdGhlIExJQ0VOU0UudHh0IGZpbGUgaW5jbHVkZWQKKy0tIHdpdGggdGhpcyBkaXN0cmlidXRpb24uCistLQorLS0gVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCistLSBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorLS0gTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorLS0gd3hXaW5kb3dzIExpYnJhcnkgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCitzZXQgZGlzayB0byAocGF0aCB0byBzdGFydHVwIGRpc2spIGFzIHN0cmluZworc2V0IHRtcGZpbGUgdG8gcGF0aCB0byB0ZW1wb3JhcnkgaXRlbXMgZnJvbSB1c2VyIGRvbWFpbgorc2V0IHRtcGZpbGUgdG8gUE9TSVggcGF0aCBvZiB0bXBmaWxlICYgImxpYmpwZWctdHVyYm9fdW5pbnN0YWxsLmxvZyIKK3NldCB1bmluc3RhbGxlciB0byBkaXNrICYgIm9wdDpsaWJqcGVnLXR1cmJvOmJpbjp1bmluc3RhbGwiCitzZXQgdW5pbnN0YWxsZXIgdG8gInNoICIgJiBQT1NJWCBwYXRoIG9mIHVuaW5zdGFsbGVyICYgIiAyPiYxID4iICYgdG1wZmlsZQorc2V0IHN1Y2Nlc3MgdG8gMAorCitkaXNwbGF5IGRpYWxvZyAiWW91IGFyZSBhYm91dCB0byB1bmluc3RhbGwgbGlianBlZy10dXJiby4gIFByb2NlZWQ/IiBidXR0b25zIHsiWWVzIiwgIk5vIn0gZGVmYXVsdCBidXR0b24gIk5vIgorCitpZiBidXR0b24gcmV0dXJuZWQgb2YgcmVzdWx0IGlzICJZZXMiIHRoZW4KKwl0cnkKKwkJZG8gc2hlbGwgc2NyaXB0ICh1bmluc3RhbGxlcikgd2l0aCBhZG1pbmlzdHJhdG9yIHByaXZpbGVnZXMKKwkJc2V0IHN1Y2Nlc3MgdG8gMQorCW9uIGVycm9yIGVycnN0ciBudW1iZXIgZXJybnVtCisJCWlmIGVycm51bSBpcyAtMTI4IHRoZW4KKwkJCWRpc3BsYXkgZGlhbG9nICJVbmluc3RhbGwgYWJvcnRlZC4iIGJ1dHRvbnMgeyJPSyJ9CisJCWVsc2UgaWYgZXJybnVtIGlzIDI1NSB0aGVuCisJCQlzZXQgZXJybXNnIHRvICJUaGUgdW5pbnN0YWxsIHNjcmlwdCBjb3VsZCBub3QgcmVtb3ZlIHNvbWUgb2YgdGhlIGZpbGVzIG9yIGRpcmVjdG9yaWVzIGluc3RhbGxlZCBieSB0aGUgbGlianBlZy10dXJibyBwYWNrYWdlLiAgQ29uc3VsdDoiICYgcmV0dXJuICYgcmV0dXJuICYgdG1wZmlsZSAmIHJldHVybiAmIHJldHVybiAmICJmb3IgbW9yZSBkZXRhaWxzLiIKKwkJCWRpc3BsYXkgZGlhbG9nIGVycm1zZyBidXR0b25zIHsiT0sifSBkZWZhdWx0IGJ1dHRvbiAiT0siIHdpdGggaWNvbiBjYXV0aW9uCisJCWVsc2UgaWYgZXJybnVtIGlzIDEyNyB0aGVuCisJCQlkaXNwbGF5IGRpYWxvZyAiQ291bGQgbm90IGZpbmQgdGhlIGxpYmpwZWctdHVyYm8gdW5pbnN0YWxsIHNjcmlwdC4gIFRoZSBsaWJqcGVnLXR1cmJvIHBhY2thZ2UgbWF5IGhhdmUgYWxyZWFkeSBiZWVuIHVuaW5zdGFsbGVkLiIgYnV0dG9ucyB7Ik9LIn0gZGVmYXVsdCBidXR0b24gIk9LIiB3aXRoIGljb24gc3RvcAorCQllbHNlCisJCQlzZXQgZXJybXNnIHRvICJFUlJPUiAiICYgZXJybnVtICYgIjogIiAmIGVycnN0cgorCQkJZGlzcGxheSBkaWFsb2cgZXJybXNnIGJ1dHRvbnMgeyJPSyJ9IGRlZmF1bHQgYnV0dG9uICJPSyIgd2l0aCBpY29uIHN0b3AKKwkJZW5kIGlmCisJZW5kIHRyeQorCWlmIHN1Y2Nlc3MgaXMgMSB0aGVuCisJCWRpc3BsYXkgZGlhbG9nICJsaWJqcGVnLXR1cmJvIGhhcyBiZWVuIHN1Y2Nlc3NmdWxseSB1bmluc3RhbGxlZC4iIGJ1dHRvbnMgeyJPSyJ9CisJZW5kIGlmCitlbHNlCisJZGlzcGxheSBkaWFsb2cgIlVuaW5zdGFsbCBhYm9ydGVkLiIgYnV0dG9ucyB7Ik9LIn0KK2VuZCBpZgpkaWZmIC0tZ2l0IGEvcmVsZWFzZS91bmluc3RhbGwuaW4gYi9yZWxlYXNlL3VuaW5zdGFsbC5pbgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45NGZjNGYxCi0tLSAvZGV2L251bGwKKysrIGIvcmVsZWFzZS91bmluc3RhbGwuaW4KQEAgLTAsMCArMSw3NyBAQAorIyBDb3B5cmlnaHQgKEMpMjAwOS0yMDExIEQuIFIuIENvbW1hbmRlcgorIyBDb3B5cmlnaHQgKEMpMjAwOSBTdW4gTWljcm9zeXN0ZW1zLCBJbmMuCisjCisjIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlIGFuZCBtYXkgYmUgcmVkaXN0cmlidXRlZCBhbmQvb3IgbW9kaWZpZWQgdW5kZXIKKyMgdGhlIHRlcm1zIG9mIHRoZSB3eFdpbmRvd3MgTGlicmFyeSBMaWNlbnNlLCBWZXJzaW9uIDMuMSBvciAoYXQgeW91ciBvcHRpb24pCisjIGFueSBsYXRlciB2ZXJzaW9uLiAgVGhlIGZ1bGwgbGljZW5zZSBpcyBpbiB0aGUgTElDRU5TRS50eHQgZmlsZSBpbmNsdWRlZAorIyB3aXRoIHRoaXMgZGlzdHJpYnV0aW9uLgorIworIyBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyMgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyMgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorIyB3eFdpbmRvd3MgTGlicmFyeSBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKKyMhL2Jpbi9zaAorCitlcnJvcigpCit7CisJZWNobyAkMQorCWV4aXQgLTEKK30KKworaWYgWyAhICJgaWQgLXVgIiA9ICIwIiBdOyB0aGVuCisJZXJyb3IgIlRoaXMgY29tbWFuZCBtdXN0IGJlIHJ1biBhcyByb290IgorZmkKKworUEtHTkFNRT1AUEFDS0FHRV9OQU1FQAorTUFDUEtHTkFNRT1jb20uJFBLR05BTUUuJFBLR05BTUUKK1JDUFQ9L0xpYnJhcnkvUmVjZWlwdHMvJFBLR05BTUUucGtnCisKK0xTQk9NPQoraWYgWyAtZCAkUkNQVCBdOyB0aGVuCisJTFNCT009J2xzYm9tIC1zIC1mIC1sICckUkNQVCcvQ29udGVudHMvQXJjaGl2ZS5ib20nCitlbHNlCisJTFNCT009J3BrZ3V0aWwgLS1maWxlcyAnJE1BQ1BLR05BTUUKK2ZpCisKK2VjaG8gUmVtb3ZpbmcgZmlsZXMgLi4uCiskTFNCT00gPi9kZXYvbnVsbCB8fCBlcnJvciAiQ291bGQgbm90IGxpc3QgcGFja2FnZSBjb250ZW50cyIKK1JFVENPREU9MAorUFdEPWBwd2RgCitjZCAvCiskTFNCT00gfCB3aGlsZSByZWFkIGxpbmU7IGRvCisJaWYgWyAhIC1kICIkbGluZSIgXTsgdGhlbiBybSAiJGxpbmUiIDI+JjEgfHwgUkVUQ09ERT0tMTsgZmkKK2RvbmUKK2NkICRQV0QKKworZWNobyBSZW1vdmluZyBkaXJlY3RvcmllcyAuLi4KK3JtZGlyIC9vcHQvJFBLR05BTUUvYmluIDI+JjEgfHwgUkVUQ09ERT0tMQoraWYgWyAtZCAvb3B0LyRQS0dOQU1FL2JpbiBdOyB0aGVuCisJcm1kaXIgL29wdC8kUEtHTkFNRS9iaW4gMj4mMSB8fCBSRVRDT0RFPS0xCitmaQoraWYgWyAtZCAvb3B0LyRQS0dOQU1FL2xpYiBdOyB0aGVuCisJcm1kaXIgL29wdC8kUEtHTkFNRS9saWIgMj4mMSB8fCBSRVRDT0RFPS0xCitmaQoraWYgWyAtZCAvb3B0LyRQS0dOQU1FL2luY2x1ZGUgXTsgdGhlbgorCXJtZGlyIC9vcHQvJFBLR05BTUUvaW5jbHVkZSAyPiYxIHx8IFJFVENPREU9LTEKK2ZpCitybSAvb3B0LyRQS0dOQU1FL2xpYjMyIDI+JjEgfHwgUkVUQ09ERT0tMQorcm0gL29wdC8kUEtHTkFNRS9saWI2NCAyPiYxIHx8IFJFVENPREU9LTEKK2lmIFsgLWQgL29wdC8kUEtHTkFNRS9tYW4vbWFuMSBdOyB0aGVuCisJcm1kaXIgL29wdC8kUEtHTkFNRS9tYW4vbWFuMSAyPiYxIHx8IFJFVENPREU9LTEKK2ZpCitpZiBbIC1kIC9vcHQvJFBLR05BTUUvbWFuIF07IHRoZW4KKwlybWRpciAvb3B0LyRQS0dOQU1FL21hbiAyPiYxIHx8IFJFVENPREU9LTEKK2ZpCitybWRpciAvb3B0LyRQS0dOQU1FIDI+JjEgfHwgUkVUQ09ERT0tMQorcm1kaXIgL0xpYnJhcnkvRG9jdW1lbnRhdGlvbi8kUEtHTkFNRSAyPiYxIHx8IFJFVENPREU9LTEKKworaWYgWyAtZCAkUkNQVCBdOyB0aGVuCisJZWNobyBSZW1vdmluZyBwYWNrYWdlIHJlY2VpcHQgJFJDUFQgLi4uCisJcm0gLXIgJFJDUFQgMj4mMSB8fCBSRVRDT0RFPS0xCitlbHNlCisJZWNobyBGb3JnZXR0aW5nIHBhY2thZ2UgJE1BQ1BLR05BTUUKKwlwa2d1dGlsIC0tZm9yZ2V0ICRNQUNQS0dOQU1FCitmaQorCitleGl0ICRSRVRDT0RFCmRpZmYgLS1naXQgYS9ycnRpbWVyLmggYi9ycnRpbWVyLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzAzMWVmNQotLS0gL2Rldi9udWxsCisrKyBiL3JydGltZXIuaApAQCAtMCwwICsxLDUwIEBACisvKiBDb3B5cmlnaHQgKEMpMjAwNCBMYW5kbWFyayBHcmFwaGljcyBDb3Jwb3JhdGlvbgorICogQ29weXJpZ2h0IChDKTIwMDUgU3VuIE1pY3Jvc3lzdGVtcywgSW5jLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlIGFuZCBtYXkgYmUgcmVkaXN0cmlidXRlZCBhbmQvb3IgbW9kaWZpZWQgdW5kZXIKKyAqIHRoZSB0ZXJtcyBvZiB0aGUgd3hXaW5kb3dzIExpYnJhcnkgTGljZW5zZSwgVmVyc2lvbiAzLjEgb3IgKGF0IHlvdXIgb3B0aW9uKQorICogYW55IGxhdGVyIHZlcnNpb24uICBUaGUgZnVsbCBsaWNlbnNlIGlzIGluIHRoZSBMSUNFTlNFLnR4dCBmaWxlIGluY2x1ZGVkCisgKiB3aXRoIHRoaXMgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAqIHd4V2luZG93cyBMaWJyYXJ5IExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqLworCisjaWZuZGVmIF9fUlJUSU1FUl9IX18KKyNkZWZpbmUgX19SUlRJTUVSX0hfXworCisjaWZkZWYgX1dJTjMyCisKKyNpbmNsdWRlIDx3aW5kb3dzLmg+CisKK19faW5saW5lIGRvdWJsZSBycnRpbWUodm9pZCkKK3sKKwlMQVJHRV9JTlRFR0VSIEZyZXF1ZW5jeSwgVGltZTsKKwlpZihRdWVyeVBlcmZvcm1hbmNlRnJlcXVlbmN5KCZGcmVxdWVuY3kpIT0wKQorCXsKKwkJUXVlcnlQZXJmb3JtYW5jZUNvdW50ZXIoJlRpbWUpOworCQlyZXR1cm4gKGRvdWJsZSlUaW1lLlF1YWRQYXJ0Lyhkb3VibGUpRnJlcXVlbmN5LlF1YWRQYXJ0OworCX0KKwllbHNlIHJldHVybiAoZG91YmxlKUdldFRpY2tDb3VudCgpKjAuMDAxOworfQorCisjZWxzZQorCisjaW5jbHVkZSA8c3lzL3RpbWUuaD4KKworI2lmZGVmIHN1bgorI2RlZmluZSBfX2lubGluZSBpbmxpbmUKKyNlbmRpZgorCitzdGF0aWMgX19pbmxpbmUgZG91YmxlIHJydGltZSh2b2lkKQoreworCXN0cnVjdCB0aW1ldmFsIF9fdHY7CisJZ2V0dGltZW9mZGF5KCZfX3R2LCAoc3RydWN0IHRpbWV6b25lICopTlVMTCk7CisJcmV0dXJuKChkb3VibGUpX190di50dl9zZWMrKGRvdWJsZSlfX3R2LnR2X3VzZWMqMC4wMDAwMDEpOworfQorCisjZW5kaWYKKworI2VuZGlmCmRpZmYgLS1naXQgYS9ycnV0aWwuaCBiL3JydXRpbC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjRiNjFkYmYKLS0tIC9kZXYvbnVsbAorKysgYi9ycnV0aWwuaApAQCAtMCwwICsxLDgyIEBACisvKiBDb3B5cmlnaHQgKEMpMjAwNCBMYW5kbWFyayBHcmFwaGljcyBDb3Jwb3JhdGlvbgorICogQ29weXJpZ2h0IChDKTIwMDUgU3VuIE1pY3Jvc3lzdGVtcywgSW5jLgorICogQ29weXJpZ2h0IChDKTIwMTAgRC4gUi4gQ29tbWFuZGVyCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmUgYW5kIG1heSBiZSByZWRpc3RyaWJ1dGVkIGFuZC9vciBtb2RpZmllZCB1bmRlcgorICogdGhlIHRlcm1zIG9mIHRoZSB3eFdpbmRvd3MgTGlicmFyeSBMaWNlbnNlLCBWZXJzaW9uIDMuMSBvciAoYXQgeW91ciBvcHRpb24pCisgKiBhbnkgbGF0ZXIgdmVyc2lvbi4gIFRoZSBmdWxsIGxpY2Vuc2UgaXMgaW4gdGhlIExJQ0VOU0UudHh0IGZpbGUgaW5jbHVkZWQKKyAqIHdpdGggdGhpcyBkaXN0cmlidXRpb24uCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogd3hXaW5kb3dzIExpYnJhcnkgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICovCisKKyNpZm5kZWYgX19SUlVUSUxfSF9fCisjZGVmaW5lIF9fUlJVVElMX0hfXworCisjaWZkZWYgX1dJTjMyCisJI2luY2x1ZGUgPHdpbmRvd3MuaD4KKwkjZGVmaW5lIHNsZWVwKHQpIFNsZWVwKCh0KSoxMDAwKQorCSNkZWZpbmUgdXNsZWVwKHQpIFNsZWVwKCh0KS8xMDAwKQorI2Vsc2UKKwkjaW5jbHVkZSA8dW5pc3RkLmg+CisJI2RlZmluZSBzdHJpY21wIHN0cmNhc2VjbXAKKwkjZGVmaW5lIHN0cm5pY21wIHN0cm5jYXNlY21wCisjZW5kaWYKKworI2lmbmRlZiBtaW4KKyAjZGVmaW5lIG1pbihhLGIpICgoYSk8KGIpPyhhKTooYikpCisjZW5kaWYKKworI2lmbmRlZiBtYXgKKyAjZGVmaW5lIG1heChhLGIpICgoYSk+KGIpPyhhKTooYikpCisjZW5kaWYKKworI2RlZmluZSBwb3cyKGkpICgxPDwoaSkpCisjZGVmaW5lIGlzUG93Mih4KSAoKCh4KSYoeC0xKSk9PTApCisKKyNpZmRlZiBzZ2kKKyNkZWZpbmUgX1NDX05QUk9DRVNTT1JTX0NPTkYgX1NDX05QUk9DX0NPTkYKKyNlbmRpZgorCisjaWZkZWYgc3VuCisjZGVmaW5lIF9faW5saW5lIGlubGluZQorI2VuZGlmCisKK3N0YXRpYyBfX2lubGluZSBpbnQgbnVtcHJvY3Modm9pZCkKK3sKKwkjaWZkZWYgX1dJTjMyCisJRFdPUkRfUFRSIFByb2NBZmYsIFN5c0FmZiwgaTsgIGludCBjb3VudD0wOworCWlmKCFHZXRQcm9jZXNzQWZmaW5pdHlNYXNrKEdldEN1cnJlbnRQcm9jZXNzKCksICZQcm9jQWZmLCAmU3lzQWZmKSkgcmV0dXJuKDEpOworCWZvcihpPTA7IGk8c2l6ZW9mKGxvbmcqKSo4OyBpKyspIGlmKFByb2NBZmYmKDFMTDw8aSkpIGNvdW50Kys7CisJcmV0dXJuKGNvdW50KTsKKwkjZWxpZiBkZWZpbmVkIChfX0FQUExFX18pCisJcmV0dXJuKDEpOworCSNlbHNlCisJbG9uZyBjb3VudD0xOworCWlmKChjb3VudD1zeXNjb25mKF9TQ19OUFJPQ0VTU09SU19DT05GKSkhPS0xKSByZXR1cm4oKGludCljb3VudCk7CisJZWxzZSByZXR1cm4oMSk7CisJI2VuZGlmCit9CisKKyNkZWZpbmUgYnl0ZXN3YXAoaSkgKCBcCisJKCgoaSkgJiAweGZmMDAwMDAwKSA+PiAyNCkgfCBcCisJKCgoaSkgJiAweDAwZmYwMDAwKSA+PiAgOCkgfCBcCisJKCgoaSkgJiAweDAwMDBmZjAwKSA8PCAgOCkgfCBcCisJKCgoaSkgJiAweDAwMDAwMGZmKSA8PCAyNCkgKQorCisjZGVmaW5lIGJ5dGVzd2FwMTYoaSkgKCBcCisJKCgoaSkgJiAweGZmMDApID4+IDgpIHwgXAorCSgoKGkpICYgMHgwMGZmKSA8PCA4KSApCisKK3N0YXRpYyBfX2lubGluZSBpbnQgbGl0dGxlZW5kaWFuKHZvaWQpCit7CisJdW5zaWduZWQgaW50IHZhbHVlPTE7CisJdW5zaWduZWQgY2hhciAqcHRyPSh1bnNpZ25lZCBjaGFyICopKCZ2YWx1ZSk7CisJaWYocHRyWzBdPT0xICYmIHB0clszXT09MCkgcmV0dXJuIDE7CisJZWxzZSByZXR1cm4gMDsKK30KKworI2VuZGlmCmRpZmYgLS1naXQgYS9zaGFyZWRsaWIvQ01ha2VMaXN0cy50eHQgYi9zaGFyZWRsaWIvQ01ha2VMaXN0cy50eHQKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uM2ZkN2FhZgotLS0gL2Rldi9udWxsCisrKyBiL3NoYXJlZGxpYi9DTWFrZUxpc3RzLnR4dApAQCAtMCwwICsxLDU4IEBACisjIEFueXRoaW5nIHRoYXQgbXVzdCBiZSBsaW5rZWQgYWdhaW5zdCB0aGUgc2hhcmVkIEMgbGlicmFyeSBvbiBXaW5kb3dzIG11c3QKKyMgYmUgYnVpbHQgaW4gdGhpcyBzdWJkaXJlY3RvcnksIGJlY2F1c2UgQ01ha2UgZG9lc24ndCBhbGxvdyB1cyB0byBvdmVycmlkZQorIyB0aGUgY29tcGlsZXIgZmxhZ3MgZm9yIGVhY2ggYnVpbGQgdHlwZSBleGNlcHQgYXQgZGlyZWN0b3J5IHNjb3BlLiAgTm90ZQorIyB0byBDTWFrZSBkZXZlbG9wZXJzOiAgQWRkIGEgQ09NUElMRV9GTEFHU188Q09ORklHPiB0YXJnZXQgcHJvcGVydHksIG9yCisjIGJldHRlciB5ZXQsIHByb3ZpZGUgYSBmcmllbmRseSB3YXkgb2YgY29uZmlndXJpbmcgYSBXaW5kb3dzIHRhcmdldCB0byB1c2UgdGhlCisjIHN0YXRpYyBDIGxpYnJhcnkuCisKK2lmKE1TVkMpCisgICMgQnVpbGQgYWxsIGNvbmZpZ3VyYXRpb25zIGFnYWluc3Qgc2hhcmVkIEMgbGlicmFyeQorICBmb3JlYWNoKHZhciBDTUFLRV9DX0ZMQUdTIENNQUtFX0NfRkxBR1NfREVCVUcgQ01BS0VfQ19GTEFHU19SRUxFQVNFCisgICAgQ01BS0VfQ19GTEFHU19NSU5TSVpFUkVMIENNQUtFX0NfRkxBR1NfUkVMV0lUSERFQklORk8pCisgICAgaWYoJHt2YXJ9IE1BVENIRVMgIi9NVCIpCisgICAgICBzdHJpbmcoUkVHRVggUkVQTEFDRSAiL01UIiAiL01EIiAke3Zhcn0gIiR7JHt2YXJ9fSIpCisgICAgZW5kaWYoKQorICBlbmRmb3JlYWNoKCkKK2VuZGlmKCkKKworZm9yZWFjaChzcmMgJHtKUEVHX1NPVVJDRVN9KQorICBzZXQoSlBFR19TUkNTICR7SlBFR19TUkNTfSAke0NNQUtFX1NPVVJDRV9ESVJ9LyR7c3JjfSkKK2VuZGZvcmVhY2goKQorCitpZihXSVRIX1NJTUQpCisgICMgVGhpcyB0ZWxscyBDTWFrZSB0aGF0IHRoZSAic291cmNlIiBmaWxlcyBoYXZlbid0IGJlZW4gZ2VuZXJhdGVkIHlldAorICBzZXRfc291cmNlX2ZpbGVzX3Byb3BlcnRpZXMoJHtTSU1EX09CSlN9IFBST1BFUlRJRVMgR0VORVJBVEVEIDEpCitlbmRpZigpCisKK2FkZF9saWJyYXJ5KGpwZWcgU0hBUkVEICR7SlBFR19TUkNTfSAke1NJTURfT0JKU30KKyAgJHtDTUFLRV9TT1VSQ0VfRElSfS93aW4vanBlZyR7RExMX1ZFUlNJT059LmRlZikKK3NldF90YXJnZXRfcHJvcGVydGllcyhqcGVnIFBST1BFUlRJRVMgU09WRVJTSU9OICR7RExMX1ZFUlNJT059CisgIFZFUlNJT04gJHtGVUxMVkVSU0lPTn0pCitpZihNU1ZDKQorICBzZXRfdGFyZ2V0X3Byb3BlcnRpZXMoanBlZyBQUk9QRVJUSUVTIFNVRkZJWCAke0RMTF9WRVJTSU9OfS5kbGwpCitlbHNlaWYoTUlOR1cgT1IgQ1lHV0lOKQorICBzZXRfdGFyZ2V0X3Byb3BlcnRpZXMoanBlZyBQUk9QRVJUSUVTIFNVRkZJWCAtJHtETExfVkVSU0lPTn0uZGxsKQorZW5kaWYoTVNWQykKK2lmKFdJVEhfU0lNRCkKKyAgYWRkX2RlcGVuZGVuY2llcyhqcGVnIHNpbWQpCitlbmRpZigpCisKK2FkZF9leGVjdXRhYmxlKGNqcGVnIC4uL2NqcGVnLmMgLi4vY2RqcGVnLmMgLi4vcmRibXAuYyAuLi9yZGdpZi5jIC4uL3JkcHBtLmMKKyAgLi4vcmRzd2l0Y2guYyAuLi9yZHRhcmdhLmMpCitzZXRfcHJvcGVydHkoVEFSR0VUIGNqcGVnIFBST1BFUlRZIENPTVBJTEVfRkxBR1MKKyAgIi1EQk1QX1NVUFBPUlRFRCAtREdJRl9TVVBQT1JURUQgLURQUE1fU1VQUE9SVEVEIC1EVEFSR0FfU1VQUE9SVEVEIikKK3RhcmdldF9saW5rX2xpYnJhcmllcyhjanBlZyBqcGVnKQorCithZGRfZXhlY3V0YWJsZShkanBlZyAuLi9kanBlZy5jIC4uL2NkanBlZy5jIC4uL3JkY29sbWFwLmMgLi4vcmRzd2l0Y2guYworICAuLi93cmJtcC5jIC4uL3dyZ2lmLmMgLi4vd3JwcG0uYyAuLi93cnRhcmdhLmMpCitzZXRfcHJvcGVydHkoVEFSR0VUIGRqcGVnIFBST1BFUlRZIENPTVBJTEVfRkxBR1MKKyAgIi1EQk1QX1NVUFBPUlRFRCAtREdJRl9TVVBQT1JURUQgLURQUE1fU1VQUE9SVEVEIC1EVEFSR0FfU1VQUE9SVEVEIikKK3RhcmdldF9saW5rX2xpYnJhcmllcyhkanBlZyBqcGVnKQorCithZGRfZXhlY3V0YWJsZShqcGVndHJhbiAuLi9qcGVndHJhbi5jIC4uL2NkanBlZy5jIC4uL3Jkc3dpdGNoLmMgLi4vdHJhbnN1cHAuYykKK3RhcmdldF9saW5rX2xpYnJhcmllcyhqcGVndHJhbiBqcGVnKQorCitpbnN0YWxsKFRBUkdFVFMganBlZyBjanBlZyBkanBlZyBqcGVndHJhbgorICBBUkNISVZFIERFU1RJTkFUSU9OIGxpYgorICBMSUJSQVJZIERFU1RJTkFUSU9OIGxpYgorICBSVU5USU1FIERFU1RJTkFUSU9OIGJpbikKZGlmZiAtLWdpdCBhL3NpbWQvQ01ha2VMaXN0cy50eHQgYi9zaW1kL0NNYWtlTGlzdHMudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjViZTMyNWUKLS0tIC9kZXYvbnVsbAorKysgYi9zaW1kL0NNYWtlTGlzdHMudHh0CkBAIC0wLDAgKzEsNjIgQEAKK2lmKE5PVCBERUZJTkVEIE5BU00pCisgIHNldChOQVNNIG5hc20pCitlbmRpZigpCisKK2lmKFNJTURfWDg2XzY0KQorICBzZXQoTkFGTEFHUyAtZndpbjY0IC1EV0lONjQgLURfX3g4Nl82NF9fIC1JJHtDTUFLRV9TT1VSQ0VfRElSfS93aW4vCisgICAgLUkke0NNQUtFX0NVUlJFTlRfU09VUkNFX0RJUn0vKQorZWxzZSgpCisgIHNldChOQUZMQUdTIC1md2luMzIgLURXSU4zMiAtSSR7Q01BS0VfU09VUkNFX0RJUn0vd2luLworICAgIC1JJHtDTUFLRV9DVVJSRU5UX1NPVVJDRV9ESVJ9LykKK2VuZGlmKCkKKworaWYoTVNWQykKKyAgc2V0KE5BRkxBR1MgJHtOQUZMQUdTfSAtRE1TVkMpCitlbmRpZigpCisKKyMgVGhpcyBvbmx5IHdvcmtzIGlmIGJ1aWxkaW5nIGZyb20gdGhlIGNvbW1hbmQgbGluZS4gIFRoZXJlIGlzIGN1cnJlbnRseSBubyB3YXkKKyMgdG8gc2V0IGEgdmFyaWFibGUncyB2YWx1ZSBiYXNlZCBvbiB0aGUgYnVpbGQgdHlwZSB3aGVuIHVzaW5nIHRoZSBNU1ZDIElERS4KK2lmKENNQUtFX0JVSUxEX1RZUEUgU1RSRVFVQUwgIkRlYnVnIgorICBPUiBDTUFLRV9CVUlMRF9UWVBFIFNUUkVRVUFMICJSZWxXaXRoRGViSW5mbyIpCisgIHNldChOQUZMQUdTICR7TkFGTEFHU30gLWcpCitlbmRpZigpCisKK2lmKFNJTURfWDg2XzY0KQorICBzZXQoU0lNRF9CQVNFTkFNRVMgamZzc2VmbHQtNjQgamNjb2xzczItNjQgamRjb2xzczItNjQgamNzYW1zczItNjQKKyAgICBqZHNhbXNzMi02NCBqZG1lcnNzMi02NCBqY3FudHMyaS02NCBqZnNzMmZzdC02NCBqZnNzMmludC02NCBqaXNzMnJlZC02NAorICAgIGppc3MyaW50LTY0IGppc3MyZnN0LTY0IGpjcW50czJmLTY0IGppc3MyZmx0LTY0KQorICBtZXNzYWdlKFNUQVRVUyAiQnVpbGRpbmcgeDg2XzY0IFNJTUQgZXh0ZW5zaW9ucyIpCitlbHNlKCkKKyAgc2V0KFNJTURfQkFTRU5BTUVTIGpzaW1kY3B1IGpjY29sbW14IGpkY29sbW14IGpjc2FtbW14IGpkc2FtbW14IGpkbWVybW14CisgICAgamNxbnRtbXggamZtbXhmc3QgamZtbXhpbnQgamltbXhyZWQgamltbXhpbnQgamltbXhmc3QgamNxbnQzZG4gamYzZG5mbHQKKyAgICBqaTNkbmZsdCBqY3FudHNzZSBqZnNzZWZsdCBqaXNzZWZsdCBqY2NvbHNzMiBqZGNvbHNzMiBqY3NhbXNzMiBqZHNhbXNzMgorICAgIGpkbWVyc3MyIGpjcW50czJpIGpmc3MyZnN0IGpmc3MyaW50IGppc3MycmVkIGppc3MyaW50IGppc3MyZnN0IGpjcW50czJmCisgICAgamlzczJmbHQpCisgIG1lc3NhZ2UoU1RBVFVTICJCdWlsZGluZyBpMzg2IFNJTUQgZXh0ZW5zaW9ucyIpCitlbmRpZigpCisKK2lmKE1TVkNfSURFKQorICBzZXQoT0JKRElSICIke0NNQUtFX0NVUlJFTlRfQklOQVJZX0RJUn0vJChPdXREaXIpIikKK2Vsc2UoKQorICBzZXQoT0JKRElSICR7Q01BS0VfQ1VSUkVOVF9CSU5BUllfRElSfSkKK2VuZGlmKCkKKworZm9yZWFjaChmaWxlICR7U0lNRF9CQVNFTkFNRVN9KQorICBzZXQoREVQRklMRSAiIikKKyAgc2V0KFNJTURfU1JDICR7Q01BS0VfQ1VSUkVOVF9TT1VSQ0VfRElSfS8ke2ZpbGV9LmFzbSkKKyAgaWYoJHtmaWxlfSBNQVRDSEVTIGNvbCkKKyAgICBzZXQoREVQRklMRSAke1NJTURfU1JDfSkKKyAgICBzdHJpbmcoUkVHRVggUkVQTEFDRSAiY29sIiAiY2xyIiBERVBGSUxFICR7REVQRklMRX0pCisgIGVuZGlmKCkKKyAgaWYoJHtmaWxlfSBNQVRDSEVTIG1lcikKKyAgICBzZXQoREVQRklMRSAke1NJTURfU1JDfSkKKyAgICBzdHJpbmcoUkVHRVggUkVQTEFDRSAibWVyIiAibXJnIiBERVBGSUxFICR7REVQRklMRX0pCisgIGVuZGlmKCkKKyAgc2V0KFNJTURfT0JKICR7T0JKRElSfS8ke2ZpbGV9Lm9iaikKKyAgYWRkX2N1c3RvbV9jb21tYW5kKE9VVFBVVCAke1NJTURfT0JKfSBERVBFTkRTICR7U0lNRF9TUkN9ICR7REVQRklMRX0gKi5pbmMKKyAgICBDT01NQU5EICR7TkFTTX0gJHtOQUZMQUdTfSAke1NJTURfU1JDfSAtbyR7U0lNRF9PQkp9KQorICBzZXQoU0lNRF9PQkpTICR7U0lNRF9PQkpTfSAke1NJTURfT0JKfSkKK2VuZGZvcmVhY2goKQorCitzZXQoU0lNRF9PQkpTICR7U0lNRF9PQkpTfSBQQVJFTlRfU0NPUEUpCithZGRfY3VzdG9tX3RhcmdldChzaW1kIERFUEVORFMgJHtTSU1EX09CSlN9KQpkaWZmIC0tZ2l0IGEvc2ltZC9NYWtlZmlsZS5hbSBiL3NpbWQvTWFrZWZpbGUuYW0KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODFjMjNhZgotLS0gL2Rldi9udWxsCisrKyBiL3NpbWQvTWFrZWZpbGUuYW0KQEAgLTAsMCArMSw1OCBAQAorbm9pbnN0X0xUTElCUkFSSUVTID0gbGlic2ltZC5sYQorCitCVUlMVF9TT1VSQ0VTID0ganNpbWRjZmcuaW5jCisKK0VYVFJBX0RJU1QgPSBuYXNtX2x0LnNoIGpjY2xybW14LmFzbSBqY2NscnNzMi5hc20gamRjbHJtbXguYXNtIGpkY2xyc3MyLmFzbSBcCisJamRtcmdtbXguYXNtIGpkbXJnc3MyLmFzbSBqY2NscnNzMi02NC5hc20gamRjbHJzczItNjQuYXNtIFwKKwlqZG1yZ3NzMi02NC5hc20gQ01ha2VMaXN0cy50eHQKKworaWYgU0lNRF9YODZfNjQKKworbGlic2ltZF9sYV9TT1VSQ0VTID0ganNpbWRfeDg2XzY0LmMgXAorCWpzaW1kLmgganNpbWRjZmcuaW5jLmggXAorCWpzaW1kZXh0LmluYyBqY29sc2FtcC5pbmMgamRjdC5pbmMgXAorCWpmc3NlZmx0LTY0LmFzbSBcCisJamNjb2xzczItNjQuYXNtIGpkY29sc3MyLTY0LmFzbSBcCisJamNzYW1zczItNjQuYXNtIGpkc2Ftc3MyLTY0LmFzbSBqZG1lcnNzMi02NC5hc20gXAorCWpjcW50czJpLTY0LmFzbSBqZnNzMmZzdC02NC5hc20gamZzczJpbnQtNjQuYXNtIFwKKwlqaXNzMnJlZC02NC5hc20gamlzczJpbnQtNjQuYXNtIGppc3MyZnN0LTY0LmFzbSBcCisJamNxbnRzMmYtNjQuYXNtIGppc3MyZmx0LTY0LmFzbQorCitqY2NvbHNzMi02NC5sbzogamNjbHJzczItNjQuYXNtCitqZGNvbHNzMi02NC5sbzogamRjbHJzczItNjQuYXNtCitqZG1lcnNzMi02NC5sbzogamRtcmdzczItNjQuYXNtCitlbmRpZgorCitpZiBTSU1EX0kzODYKKworbGlic2ltZF9sYV9TT1VSQ0VTID0ganNpbWRfaTM4Ni5jIFwKKwlqc2ltZC5oIGpzaW1kY2ZnLmluYy5oIFwKKwlqc2ltZGV4dC5pbmMgamNvbHNhbXAuaW5jIGpkY3QuaW5jIFwKKwlqc2ltZGNwdS5hc20gXAorCWpjY29sbW14LmFzbSBqZGNvbG1teC5hc20gXAorCWpjc2FtbW14LmFzbSBqZHNhbW1teC5hc20gamRtZXJtbXguYXNtIFwKKwlqY3FudG1teC5hc20gamZtbXhmc3QuYXNtIGpmbW14aW50LmFzbSBcCisJamltbXhyZWQuYXNtIGppbW14aW50LmFzbSBqaW1teGZzdC5hc20gXAorCWpjcW50M2RuLmFzbSBqZjNkbmZsdC5hc20gamkzZG5mbHQuYXNtIFwKKwlqY3FudHNzZS5hc20gamZzc2VmbHQuYXNtIGppc3NlZmx0LmFzbSBcCisJamNjb2xzczIuYXNtIGpkY29sc3MyLmFzbSBcCisJamNzYW1zczIuYXNtIGpkc2Ftc3MyLmFzbSBqZG1lcnNzMi5hc20gXAorCWpjcW50czJpLmFzbSBqZnNzMmZzdC5hc20gamZzczJpbnQuYXNtIFwKKwlqaXNzMnJlZC5hc20gamlzczJpbnQuYXNtIGppc3MyZnN0LmFzbSBcCisJamNxbnRzMmYuYXNtIGppc3MyZmx0LmFzbQorCitqY2NvbG1teC5sbzogamNjbHJtbXguYXNtCitqY2NvbHNzMi5sbzogamNjbHJzczIuYXNtCitqZGNvbG1teC5sbzogamRjbHJtbXguYXNtCitqZGNvbHNzMi5sbzogamRjbHJzczIuYXNtCitqZG1lcm1teC5sbzogamRtcmdtbXguYXNtCitqZG1lcnNzMi5sbzogamRtcmdzczIuYXNtCitlbmRpZgorCitBTV9DUFBGTEFHUyA9IC1JJCh0b3Bfc3JjZGlyKSAKKworLmFzbS5sbzoKKwkkKExJQlRPT0wpIC0tbW9kZT1jb21waWxlIC0tdGFnIE5BU00gJChzcmNkaXIpL25hc21fbHQuc2ggJChOQVNNKSAkKE5BRkxBR1MpIC1JJChzcmNkaXIpICQ8IC1vICRACisKK2pzaW1kY2ZnLmluYzogJChzcmNkaXIpL2pzaW1kY2ZnLmluYy5oIC4uL2pwZWdsaWIuaCAuLi9qY29uZmlnLmggLi4vam1vcmVjZmcuaAorCSQoQ1BQKSAtSSQodG9wX2J1aWxkZGlyKSAtSSQodG9wX2J1aWxkZGlyKS9zaW1kICQoc3JjZGlyKS9qc2ltZGNmZy5pbmMuaCB8ICQoRUdSRVApICJeW1w7JV18XlwgJSIgfCBzZWQgJ3MlX2NwcF9wcm90ZWN0aW9uXyUlJyB8IHNlZCAnc0AlIGRlZmluZUAlZGVmaW5lQGcnID4gJEAKZGlmZiAtLWdpdCBhL3NpbWQvamNjbHJtbXguYXNtIGIvc2ltZC9qY2Nscm1teC5hc20KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjZiODkxMgotLS0gL2Rldi9udWxsCisrKyBiL3NpbWQvamNjbHJtbXguYXNtCkBAIC0wLDAgKzEsNDc5IEBACis7Cis7IGpjY2xybW14LmFzbSAtIGNvbG9yc3BhY2UgY29udmVyc2lvbiAoTU1YKQorOworOyBDb3B5cmlnaHQgMjAwOSBQaWVycmUgT3NzbWFuIDxvc3NtYW5AY2VuZGlvLnNlPiBmb3IgQ2VuZGlvIEFCCis7Cis7IEJhc2VkIG9uCis7IHg4NiBTSU1EIGV4dGVuc2lvbiBmb3IgSUpHIEpQRUcgbGlicmFyeQorOyBDb3B5cmlnaHQgKEMpIDE5OTktMjAwNiwgTUlZQVNBS0EgTWFzYXJ1LgorOyBGb3IgY29uZGl0aW9ucyBvZiBkaXN0cmlidXRpb24gYW5kIHVzZSwgc2VlIGNvcHlyaWdodCBub3RpY2UgaW4ganNpbWRleHQuaW5jCis7Cis7IFRoaXMgZmlsZSBzaG91bGQgYmUgYXNzZW1ibGVkIHdpdGggTkFTTSAoTmV0d2lkZSBBc3NlbWJsZXIpLAorOyBjYW4gKm5vdCogYmUgYXNzZW1ibGVkIHdpdGggTWljcm9zb2Z0J3MgTUFTTSBvciBhbnkgY29tcGF0aWJsZQorOyBhc3NlbWJsZXIgKGluY2x1ZGluZyBCb3JsYW5kJ3MgVHVyYm8gQXNzZW1ibGVyKS4KKzsgTkFTTSBpcyBhdmFpbGFibGUgZnJvbSBodHRwOi8vbmFzbS5zb3VyY2Vmb3JnZS5uZXQvIG9yCis7IGh0dHA6Ly9zb3VyY2Vmb3JnZS5uZXQvcHJvamVjdC9zaG93ZmlsZXMucGhwP2dyb3VwX2lkPTYyMDgKKzsKKzsgW1RBQjhdCisKKyVpbmNsdWRlICJqY29sc2FtcC5pbmMiCisKKzsgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKwlTRUNUSU9OCVNFR19URVhUCisJQklUUwkzMgorOworOyBDb252ZXJ0IHNvbWUgcm93cyBvZiBzYW1wbGVzIHRvIHRoZSBvdXRwdXQgY29sb3JzcGFjZS4KKzsKKzsgR0xPQkFMKHZvaWQpCis7IGpzaW1kX3JnYl95Y2NfY29udmVydF9tbXggKEpESU1FTlNJT04gaW1nX3dpZHRoLAorOyAgICAgICAgICAgICAgICAgICAgICAgICAgIEpTQU1QQVJSQVkgaW5wdXRfYnVmLCBKU0FNUElNQUdFIG91dHB1dF9idWYsCis7ICAgICAgICAgICAgICAgICAgICAgICAgICAgSkRJTUVOU0lPTiBvdXRwdXRfcm93LCBpbnQgbnVtX3Jvd3MpOworOworCislZGVmaW5lIGltZ193aWR0aChiKQkoYikrOAkJCTsgSkRJTUVOU0lPTiBpbWdfd2lkdGgKKyVkZWZpbmUgaW5wdXRfYnVmKGIpCShiKSsxMgkJOyBKU0FNUEFSUkFZIGlucHV0X2J1ZgorJWRlZmluZSBvdXRwdXRfYnVmKGIpCShiKSsxNgkJOyBKU0FNUElNQUdFIG91dHB1dF9idWYKKyVkZWZpbmUgb3V0cHV0X3JvdyhiKQkoYikrMjAJCTsgSkRJTUVOU0lPTiBvdXRwdXRfcm93CislZGVmaW5lIG51bV9yb3dzKGIpCShiKSsyNAkJOyBpbnQgbnVtX3Jvd3MKKworJWRlZmluZSBvcmlnaW5hbF9lYnAJZWJwKzAKKyVkZWZpbmUgd2soaSkJCWVicC0oV0tfTlVNLShpKSkqU0laRU9GX01NV09SRAk7IG1td29yZCB3a1tXS19OVU1dCislZGVmaW5lIFdLX05VTQkJOAorJWRlZmluZSBnb3RwdHIJCXdrKDApLVNJWkVPRl9QT0lOVEVSCTsgdm9pZCAqIGdvdHB0cgorCisJYWxpZ24JMTYKKwlnbG9iYWwJRVhUTihqc2ltZF9yZ2JfeWNjX2NvbnZlcnRfbW14KQorCitFWFROKGpzaW1kX3JnYl95Y2NfY29udmVydF9tbXgpOgorCXB1c2gJZWJwCisJbW92CWVheCxlc3AJCQkJOyBlYXggPSBvcmlnaW5hbCBlYnAKKwlzdWIJZXNwLCBieXRlIDQKKwlhbmQJZXNwLCBieXRlICgtU0laRU9GX01NV09SRCkJOyBhbGlnbiB0byA2NCBiaXRzCisJbW92CVtlc3BdLGVheAorCW1vdgllYnAsZXNwCQkJCTsgZWJwID0gYWxpZ25lZCBlYnAKKwlsZWEJZXNwLCBbd2soMCldCisJcHVzaHBpYwllYXgJCTsgbWFrZSBhIHJvb20gZm9yIEdPVCBhZGRyZXNzCisJcHVzaAllYngKKzsJcHVzaAllY3gJCTsgbmVlZCBub3QgYmUgcHJlc2VydmVkCis7CXB1c2gJZWR4CQk7IG5lZWQgbm90IGJlIHByZXNlcnZlZAorCXB1c2gJZXNpCisJcHVzaAllZGkKKworCWdldF9HT1QJZWJ4CQkJOyBnZXQgR09UIGFkZHJlc3MKKwltb3ZwaWMJUE9JTlRFUiBbZ290cHRyXSwgZWJ4CTsgc2F2ZSBHT1QgYWRkcmVzcworCisJbW92CWVjeCwgSkRJTUVOU0lPTiBbaW1nX3dpZHRoKGVheCldCTsgbnVtX2NvbHMKKwl0ZXN0CWVjeCxlY3gKKwlqegluZWFyIC5yZXR1cm4KKworCXB1c2gJZWN4CisKKwltb3YJZXNpLCBKU0FNUElNQUdFIFtvdXRwdXRfYnVmKGVheCldCisJbW92CWVjeCwgSkRJTUVOU0lPTiBbb3V0cHV0X3JvdyhlYXgpXQorCW1vdgllZGksIEpTQU1QQVJSQVkgW2VzaSswKlNJWkVPRl9KU0FNUEFSUkFZXQorCW1vdgllYngsIEpTQU1QQVJSQVkgW2VzaSsxKlNJWkVPRl9KU0FNUEFSUkFZXQorCW1vdgllZHgsIEpTQU1QQVJSQVkgW2VzaSsyKlNJWkVPRl9KU0FNUEFSUkFZXQorCWxlYQllZGksIFtlZGkrZWN4KlNJWkVPRl9KU0FNUFJPV10KKwlsZWEJZWJ4LCBbZWJ4K2VjeCpTSVpFT0ZfSlNBTVBST1ddCisJbGVhCWVkeCwgW2VkeCtlY3gqU0laRU9GX0pTQU1QUk9XXQorCisJcG9wCWVjeAorCisJbW92CWVzaSwgSlNBTVBBUlJBWSBbaW5wdXRfYnVmKGVheCldCisJbW92CWVheCwgSU5UIFtudW1fcm93cyhlYXgpXQorCXRlc3QJZWF4LGVheAorCWpsZQluZWFyIC5yZXR1cm4KKwlhbGlnbngJMTYsNworLnJvd2xvb3A6CisJcHVzaHBpYwllYXgKKwlwdXNoCWVkeAorCXB1c2gJZWJ4CisJcHVzaAllZGkKKwlwdXNoCWVzaQorCXB1c2gJZWN4CQkJOyBjb2wKKworCW1vdgllc2ksIEpTQU1QUk9XIFtlc2ldCTsgaW5wdHIKKwltb3YJZWRpLCBKU0FNUFJPVyBbZWRpXQk7IG91dHB0cjAKKwltb3YJZWJ4LCBKU0FNUFJPVyBbZWJ4XQk7IG91dHB0cjEKKwltb3YJZWR4LCBKU0FNUFJPVyBbZWR4XQk7IG91dHB0cjIKKwltb3ZwaWMJZWF4LCBQT0lOVEVSIFtnb3RwdHJdCTsgbG9hZCBHT1QgYWRkcmVzcyAoZWF4KQorCisJY21wCWVjeCwgYnl0ZSBTSVpFT0ZfTU1XT1JECisJamFlCXNob3J0IC5jb2x1bW5sb29wCisJYWxpZ254CTE2LDcKKworJWlmIFJHQl9QSVhFTFNJWkUgPT0gMyA7IC0tLS0tLS0tLS0tLS0tLQorCisuY29sdW1uX2xkMToKKwlwdXNoCWVheAorCXB1c2gJZWR4CisJbGVhCWVjeCxbZWN4K2VjeCoyXQkJOyBpbXVsIGVjeCxSR0JfUElYRUxTSVpFCisJdGVzdAljbCwgU0laRU9GX0JZVEUKKwlqeglzaG9ydCAuY29sdW1uX2xkMgorCXN1YgllY3gsIGJ5dGUgU0laRU9GX0JZVEUKKwl4b3IJZWF4LGVheAorCW1vdglhbCwgQllURSBbZXNpK2VjeF0KKy5jb2x1bW5fbGQyOgorCXRlc3QJY2wsIFNJWkVPRl9XT1JECisJanoJc2hvcnQgLmNvbHVtbl9sZDQKKwlzdWIJZWN4LCBieXRlIFNJWkVPRl9XT1JECisJeG9yCWVkeCxlZHgKKwltb3YJZHgsIFdPUkQgW2VzaStlY3hdCisJc2hsCWVheCwgV09SRF9CSVQKKwlvcgllYXgsZWR4CisuY29sdW1uX2xkNDoKKwltb3ZkCW1tQSxlYXgKKwlwb3AJZWR4CisJcG9wCWVheAorCXRlc3QJY2wsIFNJWkVPRl9EV09SRAorCWp6CXNob3J0IC5jb2x1bW5fbGQ4CisJc3ViCWVjeCwgYnl0ZSBTSVpFT0ZfRFdPUkQKKwltb3ZkCW1tRywgRFdPUkQgW2VzaStlY3hdCisJcHNsbHEJbW1BLCBEV09SRF9CSVQKKwlwb3IJbW1BLG1tRworLmNvbHVtbl9sZDg6CisJdGVzdAljbCwgU0laRU9GX01NV09SRAorCWp6CXNob3J0IC5jb2x1bW5fbGQxNgorCW1vdnEJbW1HLG1tQQorCW1vdnEJbW1BLCBNTVdPUkQgW2VzaSswKlNJWkVPRl9NTVdPUkRdCisJbW92CWVjeCwgU0laRU9GX01NV09SRAorCWptcAlzaG9ydCAucmdiX3ljY19jbnYKKy5jb2x1bW5fbGQxNjoKKwl0ZXN0CWNsLCAyKlNJWkVPRl9NTVdPUkQKKwltb3YJZWN4LCBTSVpFT0ZfTU1XT1JECisJanoJc2hvcnQgLnJnYl95Y2NfY252CisJbW92cQltbUYsbW1BCisJbW92cQltbUEsIE1NV09SRCBbZXNpKzAqU0laRU9GX01NV09SRF0KKwltb3ZxCW1tRywgTU1XT1JEIFtlc2krMSpTSVpFT0ZfTU1XT1JEXQorCWptcAlzaG9ydCAucmdiX3ljY19jbnYKKwlhbGlnbngJMTYsNworCisuY29sdW1ubG9vcDoKKwltb3ZxCW1tQSwgTU1XT1JEIFtlc2krMCpTSVpFT0ZfTU1XT1JEXQorCW1vdnEJbW1HLCBNTVdPUkQgW2VzaSsxKlNJWkVPRl9NTVdPUkRdCisJbW92cQltbUYsIE1NV09SRCBbZXNpKzIqU0laRU9GX01NV09SRF0KKworLnJnYl95Y2NfY252OgorCTsgbW1BPSgwMCAxMCAyMCAwMSAxMSAyMSAwMiAxMikKKwk7IG1tRz0oMjIgMDMgMTMgMjMgMDQgMTQgMjQgMDUpCisJOyBtbUY9KDE1IDI1IDA2IDE2IDI2IDA3IDE3IDI3KQorCisJbW92cSAgICAgIG1tRCxtbUEKKwlwc2xscSAgICAgbW1BLDQqQllURV9CSVQJOyBtbUE9KC0tIC0tIC0tIC0tIDAwIDEwIDIwIDAxKQorCXBzcmxxICAgICBtbUQsNCpCWVRFX0JJVAk7IG1tRD0oMTEgMjEgMDIgMTIgLS0gLS0gLS0gLS0pCisKKwlwdW5wY2toYncgbW1BLG1tRwkJOyBtbUE9KDAwIDA0IDEwIDE0IDIwIDI0IDAxIDA1KQorCXBzbGxxICAgICBtbUcsNCpCWVRFX0JJVAk7IG1tRz0oLS0gLS0gLS0gLS0gMjIgMDMgMTMgMjMpCisKKwlwdW5wY2tsYncgbW1ELG1tRgkJOyBtbUQ9KDExIDE1IDIxIDI1IDAyIDA2IDEyIDE2KQorCXB1bnBja2hidyBtbUcsbW1GCQk7IG1tRz0oMjIgMjYgMDMgMDcgMTMgMTcgMjMgMjcpCisKKwltb3ZxICAgICAgbW1FLG1tQQorCXBzbGxxICAgICBtbUEsNCpCWVRFX0JJVAk7IG1tQT0oLS0gLS0gLS0gLS0gMDAgMDQgMTAgMTQpCisJcHNybHEgICAgIG1tRSw0KkJZVEVfQklUCTsgbW1FPSgyMCAyNCAwMSAwNSAtLSAtLSAtLSAtLSkKKworCXB1bnBja2hidyBtbUEsbW1ECQk7IG1tQT0oMDAgMDIgMDQgMDYgMTAgMTIgMTQgMTYpCisJcHNsbHEgICAgIG1tRCw0KkJZVEVfQklUCTsgbW1EPSgtLSAtLSAtLSAtLSAxMSAxNSAyMSAyNSkKKworCXB1bnBja2xidyBtbUUsbW1HCQk7IG1tRT0oMjAgMjIgMjQgMjYgMDEgMDMgMDUgMDcpCisJcHVucGNraGJ3IG1tRCxtbUcJCTsgbW1EPSgxMSAxMyAxNSAxNyAyMSAyMyAyNSAyNykKKworCXB4b3IgICAgICBtbUgsbW1ICisKKwltb3ZxICAgICAgbW1DLG1tQQorCXB1bnBja2xidyBtbUEsbW1ICQk7IG1tQT0oMDAgMDIgMDQgMDYpCisJcHVucGNraGJ3IG1tQyxtbUgJCTsgbW1DPSgxMCAxMiAxNCAxNikKKworCW1vdnEgICAgICBtbUIsbW1FCisJcHVucGNrbGJ3IG1tRSxtbUgJCTsgbW1FPSgyMCAyMiAyNCAyNikKKwlwdW5wY2toYncgbW1CLG1tSAkJOyBtbUI9KDAxIDAzIDA1IDA3KQorCisJbW92cSAgICAgIG1tRixtbUQKKwlwdW5wY2tsYncgbW1ELG1tSAkJOyBtbUQ9KDExIDEzIDE1IDE3KQorCXB1bnBja2hidyBtbUYsbW1ICQk7IG1tRj0oMjEgMjMgMjUgMjcpCisKKyVlbHNlIDsgUkdCX1BJWEVMU0laRSA9PSA0IDsgLS0tLS0tLS0tLS0KKworLmNvbHVtbl9sZDE6CisJdGVzdAljbCwgU0laRU9GX01NV09SRC84CisJanoJc2hvcnQgLmNvbHVtbl9sZDIKKwlzdWIJZWN4LCBieXRlIFNJWkVPRl9NTVdPUkQvOAorCW1vdmQJbW1BLCBEV09SRCBbZXNpK2VjeCpSR0JfUElYRUxTSVpFXQorLmNvbHVtbl9sZDI6CisJdGVzdAljbCwgU0laRU9GX01NV09SRC80CisJanoJc2hvcnQgLmNvbHVtbl9sZDQKKwlzdWIJZWN4LCBieXRlIFNJWkVPRl9NTVdPUkQvNAorCW1vdnEJbW1GLG1tQQorCW1vdnEJbW1BLCBNTVdPUkQgW2VzaStlY3gqUkdCX1BJWEVMU0laRV0KKy5jb2x1bW5fbGQ0OgorCXRlc3QJY2wsIFNJWkVPRl9NTVdPUkQvMgorCW1vdgllY3gsIFNJWkVPRl9NTVdPUkQKKwlqeglzaG9ydCAucmdiX3ljY19jbnYKKwltb3ZxCW1tRCxtbUEKKwltb3ZxCW1tQyxtbUYKKwltb3ZxCW1tQSwgTU1XT1JEIFtlc2krMCpTSVpFT0ZfTU1XT1JEXQorCW1vdnEJbW1GLCBNTVdPUkQgW2VzaSsxKlNJWkVPRl9NTVdPUkRdCisJam1wCXNob3J0IC5yZ2JfeWNjX2NudgorCWFsaWdueAkxNiw3CisKKy5jb2x1bW5sb29wOgorCW1vdnEJbW1BLCBNTVdPUkQgW2VzaSswKlNJWkVPRl9NTVdPUkRdCisJbW92cQltbUYsIE1NV09SRCBbZXNpKzEqU0laRU9GX01NV09SRF0KKwltb3ZxCW1tRCwgTU1XT1JEIFtlc2krMipTSVpFT0ZfTU1XT1JEXQorCW1vdnEJbW1DLCBNTVdPUkQgW2VzaSszKlNJWkVPRl9NTVdPUkRdCisKKy5yZ2JfeWNjX2NudjoKKwk7IG1tQT0oMDAgMTAgMjAgMzAgMDEgMTEgMjEgMzEpCisJOyBtbUY9KDAyIDEyIDIyIDMyIDAzIDEzIDIzIDMzKQorCTsgbW1EPSgwNCAxNCAyNCAzNCAwNSAxNSAyNSAzNSkKKwk7IG1tQz0oMDYgMTYgMjYgMzYgMDcgMTcgMjcgMzcpCisKKwltb3ZxICAgICAgbW1CLG1tQQorCXB1bnBja2xidyBtbUEsbW1GCQk7IG1tQT0oMDAgMDIgMTAgMTIgMjAgMjIgMzAgMzIpCisJcHVucGNraGJ3IG1tQixtbUYJCTsgbW1CPSgwMSAwMyAxMSAxMyAyMSAyMyAzMSAzMykKKworCW1vdnEgICAgICBtbUcsbW1ECisJcHVucGNrbGJ3IG1tRCxtbUMJCTsgbW1EPSgwNCAwNiAxNCAxNiAyNCAyNiAzNCAzNikKKwlwdW5wY2toYncgbW1HLG1tQwkJOyBtbUc9KDA1IDA3IDE1IDE3IDI1IDI3IDM1IDM3KQorCisJbW92cSAgICAgIG1tRSxtbUEKKwlwdW5wY2tsd2QgbW1BLG1tRAkJOyBtbUE9KDAwIDAyIDA0IDA2IDEwIDEyIDE0IDE2KQorCXB1bnBja2h3ZCBtbUUsbW1ECQk7IG1tRT0oMjAgMjIgMjQgMjYgMzAgMzIgMzQgMzYpCisKKwltb3ZxICAgICAgbW1ILG1tQgorCXB1bnBja2x3ZCBtbUIsbW1HCQk7IG1tQj0oMDEgMDMgMDUgMDcgMTEgMTMgMTUgMTcpCisJcHVucGNraHdkIG1tSCxtbUcJCTsgbW1IPSgyMSAyMyAyNSAyNyAzMSAzMyAzNSAzNykKKworCXB4b3IgICAgICBtbUYsbW1GCisKKwltb3ZxICAgICAgbW1DLG1tQQorCXB1bnBja2xidyBtbUEsbW1GCQk7IG1tQT0oMDAgMDIgMDQgMDYpCisJcHVucGNraGJ3IG1tQyxtbUYJCTsgbW1DPSgxMCAxMiAxNCAxNikKKworCW1vdnEgICAgICBtbUQsbW1CCisJcHVucGNrbGJ3IG1tQixtbUYJCTsgbW1CPSgwMSAwMyAwNSAwNykKKwlwdW5wY2toYncgbW1ELG1tRgkJOyBtbUQ9KDExIDEzIDE1IDE3KQorCisJbW92cSAgICAgIG1tRyxtbUUKKwlwdW5wY2tsYncgbW1FLG1tRgkJOyBtbUU9KDIwIDIyIDI0IDI2KQorCXB1bnBja2hidyBtbUcsbW1GCQk7IG1tRz0oMzAgMzIgMzQgMzYpCisKKwlwdW5wY2tsYncgbW1GLG1tSAorCXB1bnBja2hidyBtbUgsbW1ICisJcHNybHcgICAgIG1tRixCWVRFX0JJVAkJOyBtbUY9KDIxIDIzIDI1IDI3KQorCXBzcmx3ICAgICBtbUgsQllURV9CSVQJCTsgbW1IPSgzMSAzMyAzNSAzNykKKworJWVuZGlmIDsgUkdCX1BJWEVMU0laRSA7IC0tLS0tLS0tLS0tLS0tLQorCisJOyBtbTA9KFIwIFIyIFI0IFI2KT1SRSwgbW0yPShHMCBHMiBHNCBHNik9R0UsIG1tND0oQjAgQjIgQjQgQjYpPUJFCisJOyBtbTE9KFIxIFIzIFI1IFI3KT1STywgbW0zPShHMSBHMyBHNSBHNyk9R08sIG1tNT0oQjEgQjMgQjUgQjcpPUJPCisKKwk7IChPcmlnaW5hbCkKKwk7IFkgID0gIDAuMjk5MDAgKiBSICsgMC41ODcwMCAqIEcgKyAwLjExNDAwICogQgorCTsgQ2IgPSAtMC4xNjg3NCAqIFIgLSAwLjMzMTI2ICogRyArIDAuNTAwMDAgKiBCICsgQ0VOVEVSSlNBTVBMRQorCTsgQ3IgPSAgMC41MDAwMCAqIFIgLSAwLjQxODY5ICogRyAtIDAuMDgxMzEgKiBCICsgQ0VOVEVSSlNBTVBMRQorCTsKKwk7IChUaGlzIGltcGxlbWVudGF0aW9uKQorCTsgWSAgPSAgMC4yOTkwMCAqIFIgKyAwLjMzNzAwICogRyArIDAuMTE0MDAgKiBCICsgMC4yNTAwMCAqIEcKKwk7IENiID0gLTAuMTY4NzQgKiBSIC0gMC4zMzEyNiAqIEcgKyAwLjUwMDAwICogQiArIENFTlRFUkpTQU1QTEUKKwk7IENyID0gIDAuNTAwMDAgKiBSIC0gMC40MTg2OSAqIEcgLSAwLjA4MTMxICogQiArIENFTlRFUkpTQU1QTEUKKworCW1vdnEgICAgICBNTVdPUkQgW3drKDApXSwgbW0wCTsgd2soMCk9UkUKKwltb3ZxICAgICAgTU1XT1JEIFt3aygxKV0sIG1tMQk7IHdrKDEpPVJPCisJbW92cSAgICAgIE1NV09SRCBbd2soMildLCBtbTQJOyB3aygyKT1CRQorCW1vdnEgICAgICBNTVdPUkQgW3drKDMpXSwgbW01CTsgd2soMyk9Qk8KKworCW1vdnEgICAgICBtbTYsbW0xCisJcHVucGNrbHdkIG1tMSxtbTMKKwlwdW5wY2tod2QgbW02LG1tMworCW1vdnEgICAgICBtbTcsbW0xCisJbW92cSAgICAgIG1tNCxtbTYKKwlwbWFkZHdkICAgbW0xLFtHT1RPRkYoZWF4LFBXX0YwMjk5X0YwMzM3KV0gOyBtbTE9Uk9MKkZJWCgwLjI5OSkrR09MKkZJWCgwLjMzNykKKwlwbWFkZHdkICAgbW02LFtHT1RPRkYoZWF4LFBXX0YwMjk5X0YwMzM3KV0gOyBtbTY9Uk9IKkZJWCgwLjI5OSkrR09IKkZJWCgwLjMzNykKKwlwbWFkZHdkICAgbW03LFtHT1RPRkYoZWF4LFBXX01GMDE2X01GMDMzKV0gOyBtbTc9Uk9MKi1GSVgoMC4xNjgpK0dPTCotRklYKDAuMzMxKQorCXBtYWRkd2QgICBtbTQsW0dPVE9GRihlYXgsUFdfTUYwMTZfTUYwMzMpXSA7IG1tND1ST0gqLUZJWCgwLjE2OCkrR09IKi1GSVgoMC4zMzEpCisKKwltb3ZxICAgICAgTU1XT1JEIFt3ayg0KV0sIG1tMQk7IHdrKDQpPVJPTCpGSVgoMC4yOTkpK0dPTCpGSVgoMC4zMzcpCisJbW92cSAgICAgIE1NV09SRCBbd2soNSldLCBtbTYJOyB3ayg1KT1ST0gqRklYKDAuMjk5KStHT0gqRklYKDAuMzM3KQorCisJcHhvciAgICAgIG1tMSxtbTEKKwlweG9yICAgICAgbW02LG1tNgorCXB1bnBja2x3ZCBtbTEsbW01CQk7IG1tMT1CT0wKKwlwdW5wY2tod2QgbW02LG1tNQkJOyBtbTY9Qk9ICisJcHNybGQgICAgIG1tMSwxCQkJOyBtbTE9Qk9MKkZJWCgwLjUwMCkKKwlwc3JsZCAgICAgbW02LDEJCQk7IG1tNj1CT0gqRklYKDAuNTAwKQorCisJbW92cSAgICAgIG1tNSxbR09UT0ZGKGVheCxQRF9PTkVIQUxGTTFfQ0opXSA7IG1tNT1bUERfT05FSEFMRk0xX0NKXQorCisJcGFkZGQgICAgIG1tNyxtbTEKKwlwYWRkZCAgICAgbW00LG1tNgorCXBhZGRkICAgICBtbTcsbW01CisJcGFkZGQgICAgIG1tNCxtbTUKKwlwc3JsZCAgICAgbW03LFNDQUxFQklUUwkJOyBtbTc9Q2JPTAorCXBzcmxkICAgICBtbTQsU0NBTEVCSVRTCQk7IG1tND1DYk9ICisJcGFja3NzZHcgIG1tNyxtbTQJCTsgbW03PUNiTworCisJbW92cSAgICAgIG1tMSwgTU1XT1JEIFt3aygyKV0JOyBtbTE9QkUKKworCW1vdnEgICAgICBtbTYsbW0wCisJcHVucGNrbHdkIG1tMCxtbTIKKwlwdW5wY2tod2QgbW02LG1tMgorCW1vdnEgICAgICBtbTUsbW0wCisJbW92cSAgICAgIG1tNCxtbTYKKwlwbWFkZHdkICAgbW0wLFtHT1RPRkYoZWF4LFBXX0YwMjk5X0YwMzM3KV0gOyBtbTA9UkVMKkZJWCgwLjI5OSkrR0VMKkZJWCgwLjMzNykKKwlwbWFkZHdkICAgbW02LFtHT1RPRkYoZWF4LFBXX0YwMjk5X0YwMzM3KV0gOyBtbTY9UkVIKkZJWCgwLjI5OSkrR0VIKkZJWCgwLjMzNykKKwlwbWFkZHdkICAgbW01LFtHT1RPRkYoZWF4LFBXX01GMDE2X01GMDMzKV0gOyBtbTU9UkVMKi1GSVgoMC4xNjgpK0dFTCotRklYKDAuMzMxKQorCXBtYWRkd2QgICBtbTQsW0dPVE9GRihlYXgsUFdfTUYwMTZfTUYwMzMpXSA7IG1tND1SRUgqLUZJWCgwLjE2OCkrR0VIKi1GSVgoMC4zMzEpCisKKwltb3ZxICAgICAgTU1XT1JEIFt3ayg2KV0sIG1tMAk7IHdrKDYpPVJFTCpGSVgoMC4yOTkpK0dFTCpGSVgoMC4zMzcpCisJbW92cSAgICAgIE1NV09SRCBbd2soNyldLCBtbTYJOyB3ayg3KT1SRUgqRklYKDAuMjk5KStHRUgqRklYKDAuMzM3KQorCisJcHhvciAgICAgIG1tMCxtbTAKKwlweG9yICAgICAgbW02LG1tNgorCXB1bnBja2x3ZCBtbTAsbW0xCQk7IG1tMD1CRUwKKwlwdW5wY2tod2QgbW02LG1tMQkJOyBtbTY9QkVICisJcHNybGQgICAgIG1tMCwxCQkJOyBtbTA9QkVMKkZJWCgwLjUwMCkKKwlwc3JsZCAgICAgbW02LDEJCQk7IG1tNj1CRUgqRklYKDAuNTAwKQorCisJbW92cSAgICAgIG1tMSxbR09UT0ZGKGVheCxQRF9PTkVIQUxGTTFfQ0opXSA7IG1tMT1bUERfT05FSEFMRk0xX0NKXQorCisJcGFkZGQgICAgIG1tNSxtbTAKKwlwYWRkZCAgICAgbW00LG1tNgorCXBhZGRkICAgICBtbTUsbW0xCisJcGFkZGQgICAgIG1tNCxtbTEKKwlwc3JsZCAgICAgbW01LFNDQUxFQklUUwkJOyBtbTU9Q2JFTAorCXBzcmxkICAgICBtbTQsU0NBTEVCSVRTCQk7IG1tND1DYkVICisJcGFja3NzZHcgIG1tNSxtbTQJCTsgbW01PUNiRQorCisJcHNsbHcgICAgIG1tNyxCWVRFX0JJVAorCXBvciAgICAgICBtbTUsbW03CQk7IG1tNT1DYgorCW1vdnEgICAgICBNTVdPUkQgW2VieF0sIG1tNQk7IFNhdmUgQ2IKKworCW1vdnEgICAgICBtbTAsIE1NV09SRCBbd2soMyldCTsgbW0wPUJPCisJbW92cSAgICAgIG1tNiwgTU1XT1JEIFt3aygyKV0JOyBtbTY9QkUKKwltb3ZxICAgICAgbW0xLCBNTVdPUkQgW3drKDEpXQk7IG1tMT1STworCisJbW92cSAgICAgIG1tNCxtbTAKKwlwdW5wY2tsd2QgbW0wLG1tMworCXB1bnBja2h3ZCBtbTQsbW0zCisJbW92cSAgICAgIG1tNyxtbTAKKwltb3ZxICAgICAgbW01LG1tNAorCXBtYWRkd2QgICBtbTAsW0dPVE9GRihlYXgsUFdfRjAxMTRfRjAyNTApXSA7IG1tMD1CT0wqRklYKDAuMTE0KStHT0wqRklYKDAuMjUwKQorCXBtYWRkd2QgICBtbTQsW0dPVE9GRihlYXgsUFdfRjAxMTRfRjAyNTApXSA7IG1tND1CT0gqRklYKDAuMTE0KStHT0gqRklYKDAuMjUwKQorCXBtYWRkd2QgICBtbTcsW0dPVE9GRihlYXgsUFdfTUYwMDhfTUYwNDEpXSA7IG1tNz1CT0wqLUZJWCgwLjA4MSkrR09MKi1GSVgoMC40MTgpCisJcG1hZGR3ZCAgIG1tNSxbR09UT0ZGKGVheCxQV19NRjAwOF9NRjA0MSldIDsgbW01PUJPSCotRklYKDAuMDgxKStHT0gqLUZJWCgwLjQxOCkKKworCW1vdnEgICAgICBtbTMsW0dPVE9GRihlYXgsUERfT05FSEFMRildCTsgbW0zPVtQRF9PTkVIQUxGXQorCisJcGFkZGQgICAgIG1tMCwgTU1XT1JEIFt3ayg0KV0KKwlwYWRkZCAgICAgbW00LCBNTVdPUkQgW3drKDUpXQorCXBhZGRkICAgICBtbTAsbW0zCisJcGFkZGQgICAgIG1tNCxtbTMKKwlwc3JsZCAgICAgbW0wLFNDQUxFQklUUwkJOyBtbTA9WU9MCisJcHNybGQgICAgIG1tNCxTQ0FMRUJJVFMJCTsgbW00PVlPSAorCXBhY2tzc2R3ICBtbTAsbW00CQk7IG1tMD1ZTworCisJcHhvciAgICAgIG1tMyxtbTMKKwlweG9yICAgICAgbW00LG1tNAorCXB1bnBja2x3ZCBtbTMsbW0xCQk7IG1tMz1ST0wKKwlwdW5wY2tod2QgbW00LG1tMQkJOyBtbTQ9Uk9ICisJcHNybGQgICAgIG1tMywxCQkJOyBtbTM9Uk9MKkZJWCgwLjUwMCkKKwlwc3JsZCAgICAgbW00LDEJCQk7IG1tND1ST0gqRklYKDAuNTAwKQorCisJbW92cSAgICAgIG1tMSxbR09UT0ZGKGVheCxQRF9PTkVIQUxGTTFfQ0opXSA7IG1tMT1bUERfT05FSEFMRk0xX0NKXQorCisJcGFkZGQgICAgIG1tNyxtbTMKKwlwYWRkZCAgICAgbW01LG1tNAorCXBhZGRkICAgICBtbTcsbW0xCisJcGFkZGQgICAgIG1tNSxtbTEKKwlwc3JsZCAgICAgbW03LFNDQUxFQklUUwkJOyBtbTc9Q3JPTAorCXBzcmxkICAgICBtbTUsU0NBTEVCSVRTCQk7IG1tNT1Dck9ICisJcGFja3NzZHcgIG1tNyxtbTUJCTsgbW03PUNyTworCisJbW92cSAgICAgIG1tMywgTU1XT1JEIFt3aygwKV0JOyBtbTM9UkUKKworCW1vdnEgICAgICBtbTQsbW02CisJcHVucGNrbHdkIG1tNixtbTIKKwlwdW5wY2tod2QgbW00LG1tMgorCW1vdnEgICAgICBtbTEsbW02CisJbW92cSAgICAgIG1tNSxtbTQKKwlwbWFkZHdkICAgbW02LFtHT1RPRkYoZWF4LFBXX0YwMTE0X0YwMjUwKV0gOyBtbTY9QkVMKkZJWCgwLjExNCkrR0VMKkZJWCgwLjI1MCkKKwlwbWFkZHdkICAgbW00LFtHT1RPRkYoZWF4LFBXX0YwMTE0X0YwMjUwKV0gOyBtbTQ9QkVIKkZJWCgwLjExNCkrR0VIKkZJWCgwLjI1MCkKKwlwbWFkZHdkICAgbW0xLFtHT1RPRkYoZWF4LFBXX01GMDA4X01GMDQxKV0gOyBtbTE9QkVMKi1GSVgoMC4wODEpK0dFTCotRklYKDAuNDE4KQorCXBtYWRkd2QgICBtbTUsW0dPVE9GRihlYXgsUFdfTUYwMDhfTUYwNDEpXSA7IG1tNT1CRUgqLUZJWCgwLjA4MSkrR0VIKi1GSVgoMC40MTgpCisKKwltb3ZxICAgICAgbW0yLFtHT1RPRkYoZWF4LFBEX09ORUhBTEYpXQk7IG1tMj1bUERfT05FSEFMRl0KKworCXBhZGRkICAgICBtbTYsIE1NV09SRCBbd2soNildCisJcGFkZGQgICAgIG1tNCwgTU1XT1JEIFt3ayg3KV0KKwlwYWRkZCAgICAgbW02LG1tMgorCXBhZGRkICAgICBtbTQsbW0yCisJcHNybGQgICAgIG1tNixTQ0FMRUJJVFMJCTsgbW02PVlFTAorCXBzcmxkICAgICBtbTQsU0NBTEVCSVRTCQk7IG1tND1ZRUgKKwlwYWNrc3NkdyAgbW02LG1tNAkJOyBtbTY9WUUKKworCXBzbGx3ICAgICBtbTAsQllURV9CSVQKKwlwb3IgICAgICAgbW02LG1tMAkJOyBtbTY9WQorCW1vdnEgICAgICBNTVdPUkQgW2VkaV0sIG1tNgk7IFNhdmUgWQorCisJcHhvciAgICAgIG1tMixtbTIKKwlweG9yICAgICAgbW00LG1tNAorCXB1bnBja2x3ZCBtbTIsbW0zCQk7IG1tMj1SRUwKKwlwdW5wY2tod2QgbW00LG1tMwkJOyBtbTQ9UkVICisJcHNybGQgICAgIG1tMiwxCQkJOyBtbTI9UkVMKkZJWCgwLjUwMCkKKwlwc3JsZCAgICAgbW00LDEJCQk7IG1tND1SRUgqRklYKDAuNTAwKQorCisJbW92cSAgICAgIG1tMCxbR09UT0ZGKGVheCxQRF9PTkVIQUxGTTFfQ0opXSA7IG1tMD1bUERfT05FSEFMRk0xX0NKXQorCisJcGFkZGQgICAgIG1tMSxtbTIKKwlwYWRkZCAgICAgbW01LG1tNAorCXBhZGRkICAgICBtbTEsbW0wCisJcGFkZGQgICAgIG1tNSxtbTAKKwlwc3JsZCAgICAgbW0xLFNDQUxFQklUUwkJOyBtbTE9Q3JFTAorCXBzcmxkICAgICBtbTUsU0NBTEVCSVRTCQk7IG1tNT1DckVICisJcGFja3NzZHcgIG1tMSxtbTUJCTsgbW0xPUNyRQorCisJcHNsbHcgICAgIG1tNyxCWVRFX0JJVAorCXBvciAgICAgICBtbTEsbW03CQk7IG1tMT1DcgorCW1vdnEgICAgICBNTVdPUkQgW2VkeF0sIG1tMQk7IFNhdmUgQ3IKKworCXN1YgllY3gsIGJ5dGUgU0laRU9GX01NV09SRAorCWFkZAllc2ksIGJ5dGUgUkdCX1BJWEVMU0laRSpTSVpFT0ZfTU1XT1JECTsgaW5wdHIKKwlhZGQJZWRpLCBieXRlIFNJWkVPRl9NTVdPUkQJCQk7IG91dHB0cjAKKwlhZGQJZWJ4LCBieXRlIFNJWkVPRl9NTVdPUkQJCQk7IG91dHB0cjEKKwlhZGQJZWR4LCBieXRlIFNJWkVPRl9NTVdPUkQJCQk7IG91dHB0cjIKKwljbXAJZWN4LCBieXRlIFNJWkVPRl9NTVdPUkQKKwlqYWUJbmVhciAuY29sdW1ubG9vcAorCXRlc3QJZWN4LGVjeAorCWpuegluZWFyIC5jb2x1bW5fbGQxCisKKwlwb3AJZWN4CQkJOyBjb2wKKwlwb3AJZXNpCisJcG9wCWVkaQorCXBvcAllYngKKwlwb3AJZWR4CisJcG9wcGljCWVheAorCisJYWRkCWVzaSwgYnl0ZSBTSVpFT0ZfSlNBTVBST1cJOyBpbnB1dF9idWYKKwlhZGQJZWRpLCBieXRlIFNJWkVPRl9KU0FNUFJPVworCWFkZAllYngsIGJ5dGUgU0laRU9GX0pTQU1QUk9XCisJYWRkCWVkeCwgYnl0ZSBTSVpFT0ZfSlNBTVBST1cKKwlkZWMJZWF4CQkJCTsgbnVtX3Jvd3MKKwlqZwluZWFyIC5yb3dsb29wCisKKwllbW1zCQk7IGVtcHR5IE1NWCBzdGF0ZQorCisucmV0dXJuOgorCXBvcAllZGkKKwlwb3AJZXNpCis7CXBvcAllZHgJCTsgbmVlZCBub3QgYmUgcHJlc2VydmVkCis7CXBvcAllY3gJCTsgbmVlZCBub3QgYmUgcHJlc2VydmVkCisJcG9wCWVieAorCW1vdgllc3AsZWJwCQk7IGVzcCA8LSBhbGlnbmVkIGVicAorCXBvcAllc3AJCTsgZXNwIDwtIG9yaWdpbmFsIGVicAorCXBvcAllYnAKKwlyZXQKKworOyBGb3Igc29tZSByZWFzb24sIHRoZSBPUyBYIGxpbmtlciBkb2VzIG5vdCBob25vciB0aGUgcmVxdWVzdCB0byBhbGlnbiB0aGUKKzsgc2VnbWVudCB1bmxlc3Mgd2UgZG8gdGhpcy4KKwlhbGlnbgkxNgpkaWZmIC0tZ2l0IGEvc2ltZC9qY2NscnNzMi02NC5hc20gYi9zaW1kL2pjY2xyc3MyLTY0LmFzbQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44Y2E0N2FhCi0tLSAvZGV2L251bGwKKysrIGIvc2ltZC9qY2NscnNzMi02NC5hc20KQEAgLTAsMCArMSw0ODcgQEAKKzsKKzsgamNjbHJzczItNjQuYXNtIC0gY29sb3JzcGFjZSBjb252ZXJzaW9uICg2NC1iaXQgU1NFMikKKzsKKzsgeDg2IFNJTUQgZXh0ZW5zaW9uIGZvciBJSkcgSlBFRyBsaWJyYXJ5Cis7IENvcHlyaWdodCAoQykgMTk5OS0yMDA2LCBNSVlBU0FLQSBNYXNhcnUuCis7IENvcHlyaWdodCAoQykgMjAwOSwgRC4gUi4gQ29tbWFuZGVyLgorOyBGb3IgY29uZGl0aW9ucyBvZiBkaXN0cmlidXRpb24gYW5kIHVzZSwgc2VlIGNvcHlyaWdodCBub3RpY2UgaW4ganNpbWRleHQuaW5jCis7Cis7IFRoaXMgZmlsZSBzaG91bGQgYmUgYXNzZW1ibGVkIHdpdGggTkFTTSAoTmV0d2lkZSBBc3NlbWJsZXIpLAorOyBjYW4gKm5vdCogYmUgYXNzZW1ibGVkIHdpdGggTWljcm9zb2Z0J3MgTUFTTSBvciBhbnkgY29tcGF0aWJsZQorOyBhc3NlbWJsZXIgKGluY2x1ZGluZyBCb3JsYW5kJ3MgVHVyYm8gQXNzZW1ibGVyKS4KKzsgTkFTTSBpcyBhdmFpbGFibGUgZnJvbSBodHRwOi8vbmFzbS5zb3VyY2Vmb3JnZS5uZXQvIG9yCis7IGh0dHA6Ly9zb3VyY2Vmb3JnZS5uZXQvcHJvamVjdC9zaG93ZmlsZXMucGhwP2dyb3VwX2lkPTYyMDgKKzsKKzsgW1RBQjhdCisKKyVpbmNsdWRlICJqY29sc2FtcC5pbmMiCisKKzsgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKwlTRUNUSU9OCVNFR19URVhUCisJQklUUwk2NAorOworOyBDb252ZXJ0IHNvbWUgcm93cyBvZiBzYW1wbGVzIHRvIHRoZSBvdXRwdXQgY29sb3JzcGFjZS4KKzsKKzsgR0xPQkFMKHZvaWQpCis7IGpzaW1kX3JnYl95Y2NfY29udmVydF9zc2UyIChKRElNRU5TSU9OIGltZ193aWR0aCwKKzsgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEpTQU1QQVJSQVkgaW5wdXRfYnVmLCBKU0FNUElNQUdFIG91dHB1dF9idWYsCis7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBKRElNRU5TSU9OIG91dHB1dF9yb3csIGludCBudW1fcm93cyk7Cis7CisKKzsgcjEwID0gSkRJTUVOU0lPTiBpbWdfd2lkdGgKKzsgcjExID0gSlNBTVBBUlJBWSBpbnB1dF9idWYKKzsgcjEyID0gSlNBTVBJTUFHRSBvdXRwdXRfYnVmCis7IHIxMyA9IEpESU1FTlNJT04gb3V0cHV0X3JvdworOyByMTQgPSBpbnQgbnVtX3Jvd3MKKworJWRlZmluZSB3ayhpKQkJcmJwLShXS19OVU0tKGkpKSpTSVpFT0ZfWE1NV09SRAk7IHhtbXdvcmQgd2tbV0tfTlVNXQorJWRlZmluZSBXS19OVU0JCTgKKworCWFsaWduCTE2CisKKwlnbG9iYWwJRVhUTihqc2ltZF9yZ2JfeWNjX2NvbnZlcnRfc3NlMikKKworRVhUTihqc2ltZF9yZ2JfeWNjX2NvbnZlcnRfc3NlMik6CisJcHVzaAlyYnAKKwltb3YJcmF4LHJzcAkJCQk7IHJheCA9IG9yaWdpbmFsIHJicAorCXN1Yglyc3AsIGJ5dGUgNAorCWFuZAlyc3AsIGJ5dGUgKC1TSVpFT0ZfWE1NV09SRCkJOyBhbGlnbiB0byAxMjggYml0cworCW1vdglbcnNwXSxyYXgKKwltb3YJcmJwLHJzcAkJCQk7IHJicCA9IGFsaWduZWQgcmJwCisJbGVhCXJzcCwgW3drKDApXQorCWNvbGxlY3RfYXJncworCXB1c2gJcmJ4CisKKwltb3YJcmN4LCByMTAKKwl0ZXN0CXJjeCxyY3gKKwlqegluZWFyIC5yZXR1cm4KKworCXB1c2gJcmN4CisKKwltb3YgcnNpLCByMTIKKwltb3YgcmN4LCByMTMKKwltb3YJcmRpLCBKU0FNUEFSUkFZIFtyc2krMCpTSVpFT0ZfSlNBTVBBUlJBWV0KKwltb3YJcmJ4LCBKU0FNUEFSUkFZIFtyc2krMSpTSVpFT0ZfSlNBTVBBUlJBWV0KKwltb3YJcmR4LCBKU0FNUEFSUkFZIFtyc2krMipTSVpFT0ZfSlNBTVBBUlJBWV0KKwlsZWEJcmRpLCBbcmRpK3JjeCpTSVpFT0ZfSlNBTVBST1ddCisJbGVhCXJieCwgW3JieCtyY3gqU0laRU9GX0pTQU1QUk9XXQorCWxlYQlyZHgsIFtyZHgrcmN4KlNJWkVPRl9KU0FNUFJPV10KKworCXBvcAlyY3gKKworCW1vdiByc2ksIHIxMQorCW1vdgllYXgsIHIxNGQKKwl0ZXN0CXJheCxyYXgKKwlqbGUJbmVhciAucmV0dXJuCisucm93bG9vcDoKKwlwdXNoCXJkeAorCXB1c2gJcmJ4CisJcHVzaAlyZGkKKwlwdXNoCXJzaQorCXB1c2gJcmN4CQkJOyBjb2wKKworCW1vdglyc2ksIEpTQU1QUk9XIFtyc2ldCTsgaW5wdHIKKwltb3YJcmRpLCBKU0FNUFJPVyBbcmRpXQk7IG91dHB0cjAKKwltb3YJcmJ4LCBKU0FNUFJPVyBbcmJ4XQk7IG91dHB0cjEKKwltb3YJcmR4LCBKU0FNUFJPVyBbcmR4XQk7IG91dHB0cjIKKworCWNtcAlyY3gsIGJ5dGUgU0laRU9GX1hNTVdPUkQKKwlqYWUJbmVhciAuY29sdW1ubG9vcAorCislaWYgUkdCX1BJWEVMU0laRSA9PSAzIDsgLS0tLS0tLS0tLS0tLS0tCisKKy5jb2x1bW5fbGQxOgorCXB1c2gJcmF4CisJcHVzaAlyZHgKKwlsZWEJcmN4LFtyY3grcmN4KjJdCQk7IGltdWwgZWN4LFJHQl9QSVhFTFNJWkUKKwl0ZXN0CWNsLCBTSVpFT0ZfQllURQorCWp6CXNob3J0IC5jb2x1bW5fbGQyCisJc3ViCXJjeCwgYnl0ZSBTSVpFT0ZfQllURQorCW1vdnp4CXJheCwgQllURSBbcnNpK3JjeF0KKy5jb2x1bW5fbGQyOgorCXRlc3QJY2wsIFNJWkVPRl9XT1JECisJanoJc2hvcnQgLmNvbHVtbl9sZDQKKwlzdWIJcmN4LCBieXRlIFNJWkVPRl9XT1JECisJbW92engJcmR4LCBXT1JEIFtyc2krcmN4XQorCXNobAlyYXgsIFdPUkRfQklUCisJb3IJcmF4LHJkeAorLmNvbHVtbl9sZDQ6CisJbW92ZAl4bW1BLGVheAorCXBvcAlyZHgKKwlwb3AJcmF4CisJdGVzdAljbCwgU0laRU9GX0RXT1JECisJanoJc2hvcnQgLmNvbHVtbl9sZDgKKwlzdWIJcmN4LCBieXRlIFNJWkVPRl9EV09SRAorCW1vdmQJeG1tRiwgWE1NX0RXT1JEIFtyc2krcmN4XQorCXBzbGxkcQl4bW1BLCBTSVpFT0ZfRFdPUkQKKwlwb3IJeG1tQSx4bW1GCisuY29sdW1uX2xkODoKKwl0ZXN0CWNsLCBTSVpFT0ZfTU1XT1JECisJanoJc2hvcnQgLmNvbHVtbl9sZDE2CisJc3ViCXJjeCwgYnl0ZSBTSVpFT0ZfTU1XT1JECisJbW92cQl4bW1CLCBYTU1fTU1XT1JEIFtyc2krcmN4XQorCXBzbGxkcQl4bW1BLCBTSVpFT0ZfTU1XT1JECisJcG9yCXhtbUEseG1tQgorLmNvbHVtbl9sZDE2OgorCXRlc3QJY2wsIFNJWkVPRl9YTU1XT1JECisJanoJc2hvcnQgLmNvbHVtbl9sZDMyCisJbW92ZHFhCXhtbUYseG1tQQorCW1vdmRxdQl4bW1BLCBYTU1XT1JEIFtyc2krMCpTSVpFT0ZfWE1NV09SRF0KKwltb3YJcmN4LCBTSVpFT0ZfWE1NV09SRAorCWptcAlzaG9ydCAucmdiX3ljY19jbnYKKy5jb2x1bW5fbGQzMjoKKwl0ZXN0CWNsLCAyKlNJWkVPRl9YTU1XT1JECisJbW92CXJjeCwgU0laRU9GX1hNTVdPUkQKKwlqeglzaG9ydCAucmdiX3ljY19jbnYKKwltb3ZkcWEJeG1tQix4bW1BCisJbW92ZHF1CXhtbUEsIFhNTVdPUkQgW3JzaSswKlNJWkVPRl9YTU1XT1JEXQorCW1vdmRxdQl4bW1GLCBYTU1XT1JEIFtyc2krMSpTSVpFT0ZfWE1NV09SRF0KKwlqbXAJc2hvcnQgLnJnYl95Y2NfY252CisKKy5jb2x1bW5sb29wOgorCW1vdmRxdQl4bW1BLCBYTU1XT1JEIFtyc2krMCpTSVpFT0ZfWE1NV09SRF0KKwltb3ZkcXUJeG1tRiwgWE1NV09SRCBbcnNpKzEqU0laRU9GX1hNTVdPUkRdCisJbW92ZHF1CXhtbUIsIFhNTVdPUkQgW3JzaSsyKlNJWkVPRl9YTU1XT1JEXQorCisucmdiX3ljY19jbnY6CisJOyB4bW1BPSgwMCAxMCAyMCAwMSAxMSAyMSAwMiAxMiAyMiAwMyAxMyAyMyAwNCAxNCAyNCAwNSkKKwk7IHhtbUY9KDE1IDI1IDA2IDE2IDI2IDA3IDE3IDI3IDA4IDE4IDI4IDA5IDE5IDI5IDBBIDFBKQorCTsgeG1tQj0oMkEgMEIgMUIgMkIgMEMgMUMgMkMgMEQgMUQgMkQgMEUgMUUgMkUgMEYgMUYgMkYpCisKKwltb3ZkcWEgICAgeG1tRyx4bW1BCisJcHNsbGRxICAgIHhtbUEsOAk7IHhtbUE9KC0tIC0tIC0tIC0tIC0tIC0tIC0tIC0tIDAwIDEwIDIwIDAxIDExIDIxIDAyIDEyKQorCXBzcmxkcSAgICB4bW1HLDgJOyB4bW1HPSgyMiAwMyAxMyAyMyAwNCAxNCAyNCAwNSAtLSAtLSAtLSAtLSAtLSAtLSAtLSAtLSkKKworCXB1bnBja2hidyB4bW1BLHhtbUYJOyB4bW1BPSgwMCAwOCAxMCAxOCAyMCAyOCAwMSAwOSAxMSAxOSAyMSAyOSAwMiAwQSAxMiAxQSkKKwlwc2xsZHEgICAgeG1tRiw4CTsgeG1tRj0oLS0gLS0gLS0gLS0gLS0gLS0gLS0gLS0gMTUgMjUgMDYgMTYgMjYgMDcgMTcgMjcpCisKKwlwdW5wY2tsYncgeG1tRyx4bW1CCTsgeG1tRz0oMjIgMkEgMDMgMEIgMTMgMUIgMjMgMkIgMDQgMEMgMTQgMUMgMjQgMkMgMDUgMEQpCisJcHVucGNraGJ3IHhtbUYseG1tQgk7IHhtbUY9KDE1IDFEIDI1IDJEIDA2IDBFIDE2IDFFIDI2IDJFIDA3IDBGIDE3IDFGIDI3IDJGKQorCisJbW92ZHFhICAgIHhtbUQseG1tQQorCXBzbGxkcSAgICB4bW1BLDgJOyB4bW1BPSgtLSAtLSAtLSAtLSAtLSAtLSAtLSAtLSAwMCAwOCAxMCAxOCAyMCAyOCAwMSAwOSkKKwlwc3JsZHEgICAgeG1tRCw4CTsgeG1tRD0oMTEgMTkgMjEgMjkgMDIgMEEgMTIgMUEgLS0gLS0gLS0gLS0gLS0gLS0gLS0gLS0pCisKKwlwdW5wY2toYncgeG1tQSx4bW1HCTsgeG1tQT0oMDAgMDQgMDggMEMgMTAgMTQgMTggMUMgMjAgMjQgMjggMkMgMDEgMDUgMDkgMEQpCisJcHNsbGRxICAgIHhtbUcsOAk7IHhtbUc9KC0tIC0tIC0tIC0tIC0tIC0tIC0tIC0tIDIyIDJBIDAzIDBCIDEzIDFCIDIzIDJCKQorCisJcHVucGNrbGJ3IHhtbUQseG1tRgk7IHhtbUQ9KDExIDE1IDE5IDFEIDIxIDI1IDI5IDJEIDAyIDA2IDBBIDBFIDEyIDE2IDFBIDFFKQorCXB1bnBja2hidyB4bW1HLHhtbUYJOyB4bW1HPSgyMiAyNiAyQSAyRSAwMyAwNyAwQiAwRiAxMyAxNyAxQiAxRiAyMyAyNyAyQiAyRikKKworCW1vdmRxYSAgICB4bW1FLHhtbUEKKwlwc2xsZHEgICAgeG1tQSw4CTsgeG1tQT0oLS0gLS0gLS0gLS0gLS0gLS0gLS0gLS0gMDAgMDQgMDggMEMgMTAgMTQgMTggMUMpCisJcHNybGRxICAgIHhtbUUsOAk7IHhtbUU9KDIwIDI0IDI4IDJDIDAxIDA1IDA5IDBEIC0tIC0tIC0tIC0tIC0tIC0tIC0tIC0tKQorCisJcHVucGNraGJ3IHhtbUEseG1tRAk7IHhtbUE9KDAwIDAyIDA0IDA2IDA4IDBBIDBDIDBFIDEwIDEyIDE0IDE2IDE4IDFBIDFDIDFFKQorCXBzbGxkcSAgICB4bW1ELDgJOyB4bW1EPSgtLSAtLSAtLSAtLSAtLSAtLSAtLSAtLSAxMSAxNSAxOSAxRCAyMSAyNSAyOSAyRCkKKworCXB1bnBja2xidyB4bW1FLHhtbUcJOyB4bW1FPSgyMCAyMiAyNCAyNiAyOCAyQSAyQyAyRSAwMSAwMyAwNSAwNyAwOSAwQiAwRCAwRikKKwlwdW5wY2toYncgeG1tRCx4bW1HCTsgeG1tRD0oMTEgMTMgMTUgMTcgMTkgMUIgMUQgMUYgMjEgMjMgMjUgMjcgMjkgMkIgMkQgMkYpCisKKwlweG9yICAgICAgeG1tSCx4bW1ICisKKwltb3ZkcWEgICAgeG1tQyx4bW1BCisJcHVucGNrbGJ3IHhtbUEseG1tSAk7IHhtbUE9KDAwIDAyIDA0IDA2IDA4IDBBIDBDIDBFKQorCXB1bnBja2hidyB4bW1DLHhtbUgJOyB4bW1DPSgxMCAxMiAxNCAxNiAxOCAxQSAxQyAxRSkKKworCW1vdmRxYSAgICB4bW1CLHhtbUUKKwlwdW5wY2tsYncgeG1tRSx4bW1ICTsgeG1tRT0oMjAgMjIgMjQgMjYgMjggMkEgMkMgMkUpCisJcHVucGNraGJ3IHhtbUIseG1tSAk7IHhtbUI9KDAxIDAzIDA1IDA3IDA5IDBCIDBEIDBGKQorCisJbW92ZHFhICAgIHhtbUYseG1tRAorCXB1bnBja2xidyB4bW1ELHhtbUgJOyB4bW1EPSgxMSAxMyAxNSAxNyAxOSAxQiAxRCAxRikKKwlwdW5wY2toYncgeG1tRix4bW1ICTsgeG1tRj0oMjEgMjMgMjUgMjcgMjkgMkIgMkQgMkYpCisKKyVlbHNlIDsgUkdCX1BJWEVMU0laRSA9PSA0IDsgLS0tLS0tLS0tLS0KKworLmNvbHVtbl9sZDE6CisJdGVzdAljbCwgU0laRU9GX1hNTVdPUkQvMTYKKwlqeglzaG9ydCAuY29sdW1uX2xkMgorCXN1YglyY3gsIGJ5dGUgU0laRU9GX1hNTVdPUkQvMTYKKwltb3ZkCXhtbUEsIFhNTV9EV09SRCBbcnNpK3JjeCpSR0JfUElYRUxTSVpFXQorLmNvbHVtbl9sZDI6CisJdGVzdAljbCwgU0laRU9GX1hNTVdPUkQvOAorCWp6CXNob3J0IC5jb2x1bW5fbGQ0CisJc3ViCXJjeCwgYnl0ZSBTSVpFT0ZfWE1NV09SRC84CisJbW92cQl4bW1FLCBYTU1fTU1XT1JEIFtyc2krcmN4KlJHQl9QSVhFTFNJWkVdCisJcHNsbGRxCXhtbUEsIFNJWkVPRl9NTVdPUkQKKwlwb3IJeG1tQSx4bW1FCisuY29sdW1uX2xkNDoKKwl0ZXN0CWNsLCBTSVpFT0ZfWE1NV09SRC80CisJanoJc2hvcnQgLmNvbHVtbl9sZDgKKwlzdWIJcmN4LCBieXRlIFNJWkVPRl9YTU1XT1JELzQKKwltb3ZkcWEJeG1tRSx4bW1BCisJbW92ZHF1CXhtbUEsIFhNTVdPUkQgW3JzaStyY3gqUkdCX1BJWEVMU0laRV0KKy5jb2x1bW5fbGQ4OgorCXRlc3QJY2wsIFNJWkVPRl9YTU1XT1JELzIKKwltb3YJcmN4LCBTSVpFT0ZfWE1NV09SRAorCWp6CXNob3J0IC5yZ2JfeWNjX2NudgorCW1vdmRxYQl4bW1GLHhtbUEKKwltb3ZkcWEJeG1tSCx4bW1FCisJbW92ZHF1CXhtbUEsIFhNTVdPUkQgW3JzaSswKlNJWkVPRl9YTU1XT1JEXQorCW1vdmRxdQl4bW1FLCBYTU1XT1JEIFtyc2krMSpTSVpFT0ZfWE1NV09SRF0KKwlqbXAJc2hvcnQgLnJnYl95Y2NfY252CisKKy5jb2x1bW5sb29wOgorCW1vdmRxdQl4bW1BLCBYTU1XT1JEIFtyc2krMCpTSVpFT0ZfWE1NV09SRF0KKwltb3ZkcXUJeG1tRSwgWE1NV09SRCBbcnNpKzEqU0laRU9GX1hNTVdPUkRdCisJbW92ZHF1CXhtbUYsIFhNTVdPUkQgW3JzaSsyKlNJWkVPRl9YTU1XT1JEXQorCW1vdmRxdQl4bW1ILCBYTU1XT1JEIFtyc2krMypTSVpFT0ZfWE1NV09SRF0KKworLnJnYl95Y2NfY252OgorCTsgeG1tQT0oMDAgMTAgMjAgMzAgMDEgMTEgMjEgMzEgMDIgMTIgMjIgMzIgMDMgMTMgMjMgMzMpCisJOyB4bW1FPSgwNCAxNCAyNCAzNCAwNSAxNSAyNSAzNSAwNiAxNiAyNiAzNiAwNyAxNyAyNyAzNykKKwk7IHhtbUY9KDA4IDE4IDI4IDM4IDA5IDE5IDI5IDM5IDBBIDFBIDJBIDNBIDBCIDFCIDJCIDNCKQorCTsgeG1tSD0oMEMgMUMgMkMgM0MgMEQgMUQgMkQgM0QgMEUgMUUgMkUgM0UgMEYgMUYgMkYgM0YpCisKKwltb3ZkcWEgICAgeG1tRCx4bW1BCisJcHVucGNrbGJ3IHhtbUEseG1tRQk7IHhtbUE9KDAwIDA0IDEwIDE0IDIwIDI0IDMwIDM0IDAxIDA1IDExIDE1IDIxIDI1IDMxIDM1KQorCXB1bnBja2hidyB4bW1ELHhtbUUJOyB4bW1EPSgwMiAwNiAxMiAxNiAyMiAyNiAzMiAzNiAwMyAwNyAxMyAxNyAyMyAyNyAzMyAzNykKKworCW1vdmRxYSAgICB4bW1DLHhtbUYKKwlwdW5wY2tsYncgeG1tRix4bW1ICTsgeG1tRj0oMDggMEMgMTggMUMgMjggMkMgMzggM0MgMDkgMEQgMTkgMUQgMjkgMkQgMzkgM0QpCisJcHVucGNraGJ3IHhtbUMseG1tSAk7IHhtbUM9KDBBIDBFIDFBIDFFIDJBIDJFIDNBIDNFIDBCIDBGIDFCIDFGIDJCIDJGIDNCIDNGKQorCisJbW92ZHFhICAgIHhtbUIseG1tQQorCXB1bnBja2x3ZCB4bW1BLHhtbUYJOyB4bW1BPSgwMCAwNCAwOCAwQyAxMCAxNCAxOCAxQyAyMCAyNCAyOCAyQyAzMCAzNCAzOCAzQykKKwlwdW5wY2tod2QgeG1tQix4bW1GCTsgeG1tQj0oMDEgMDUgMDkgMEQgMTEgMTUgMTkgMUQgMjEgMjUgMjkgMkQgMzEgMzUgMzkgM0QpCisKKwltb3ZkcWEgICAgeG1tRyx4bW1ECisJcHVucGNrbHdkIHhtbUQseG1tQwk7IHhtbUQ9KDAyIDA2IDBBIDBFIDEyIDE2IDFBIDFFIDIyIDI2IDJBIDJFIDMyIDM2IDNBIDNFKQorCXB1bnBja2h3ZCB4bW1HLHhtbUMJOyB4bW1HPSgwMyAwNyAwQiAwRiAxMyAxNyAxQiAxRiAyMyAyNyAyQiAyRiAzMyAzNyAzQiAzRikKKworCW1vdmRxYSAgICB4bW1FLHhtbUEKKwlwdW5wY2tsYncgeG1tQSx4bW1ECTsgeG1tQT0oMDAgMDIgMDQgMDYgMDggMEEgMEMgMEUgMTAgMTIgMTQgMTYgMTggMUEgMUMgMUUpCisJcHVucGNraGJ3IHhtbUUseG1tRAk7IHhtbUU9KDIwIDIyIDI0IDI2IDI4IDJBIDJDIDJFIDMwIDMyIDM0IDM2IDM4IDNBIDNDIDNFKQorCisJbW92ZHFhICAgIHhtbUgseG1tQgorCXB1bnBja2xidyB4bW1CLHhtbUcJOyB4bW1CPSgwMSAwMyAwNSAwNyAwOSAwQiAwRCAwRiAxMSAxMyAxNSAxNyAxOSAxQiAxRCAxRikKKwlwdW5wY2toYncgeG1tSCx4bW1HCTsgeG1tSD0oMjEgMjMgMjUgMjcgMjkgMkIgMkQgMkYgMzEgMzMgMzUgMzcgMzkgM0IgM0QgM0YpCisKKwlweG9yICAgICAgeG1tRix4bW1GCisKKwltb3ZkcWEgICAgeG1tQyx4bW1BCisJcHVucGNrbGJ3IHhtbUEseG1tRgk7IHhtbUE9KDAwIDAyIDA0IDA2IDA4IDBBIDBDIDBFKQorCXB1bnBja2hidyB4bW1DLHhtbUYJOyB4bW1DPSgxMCAxMiAxNCAxNiAxOCAxQSAxQyAxRSkKKworCW1vdmRxYSAgICB4bW1ELHhtbUIKKwlwdW5wY2tsYncgeG1tQix4bW1GCTsgeG1tQj0oMDEgMDMgMDUgMDcgMDkgMEIgMEQgMEYpCisJcHVucGNraGJ3IHhtbUQseG1tRgk7IHhtbUQ9KDExIDEzIDE1IDE3IDE5IDFCIDFEIDFGKQorCisJbW92ZHFhICAgIHhtbUcseG1tRQorCXB1bnBja2xidyB4bW1FLHhtbUYJOyB4bW1FPSgyMCAyMiAyNCAyNiAyOCAyQSAyQyAyRSkKKwlwdW5wY2toYncgeG1tRyx4bW1GCTsgeG1tRz0oMzAgMzIgMzQgMzYgMzggM0EgM0MgM0UpCisKKwlwdW5wY2tsYncgeG1tRix4bW1ICisJcHVucGNraGJ3IHhtbUgseG1tSAorCXBzcmx3ICAgICB4bW1GLEJZVEVfQklUCTsgeG1tRj0oMjEgMjMgMjUgMjcgMjkgMkIgMkQgMkYpCisJcHNybHcgICAgIHhtbUgsQllURV9CSVQJOyB4bW1IPSgzMSAzMyAzNSAzNyAzOSAzQiAzRCAzRikKKworJWVuZGlmIDsgUkdCX1BJWEVMU0laRSA7IC0tLS0tLS0tLS0tLS0tLQorCisJOyB4bW0wPVIoMDI0NjhBQ0UpPVJFLCB4bW0yPUcoMDI0NjhBQ0UpPUdFLCB4bW00PUIoMDI0NjhBQ0UpPUJFCisJOyB4bW0xPVIoMTM1NzlCREYpPVJPLCB4bW0zPUcoMTM1NzlCREYpPUdPLCB4bW01PUIoMTM1NzlCREYpPUJPCisKKwk7IChPcmlnaW5hbCkKKwk7IFkgID0gIDAuMjk5MDAgKiBSICsgMC41ODcwMCAqIEcgKyAwLjExNDAwICogQgorCTsgQ2IgPSAtMC4xNjg3NCAqIFIgLSAwLjMzMTI2ICogRyArIDAuNTAwMDAgKiBCICsgQ0VOVEVSSlNBTVBMRQorCTsgQ3IgPSAgMC41MDAwMCAqIFIgLSAwLjQxODY5ICogRyAtIDAuMDgxMzEgKiBCICsgQ0VOVEVSSlNBTVBMRQorCTsKKwk7IChUaGlzIGltcGxlbWVudGF0aW9uKQorCTsgWSAgPSAgMC4yOTkwMCAqIFIgKyAwLjMzNzAwICogRyArIDAuMTE0MDAgKiBCICsgMC4yNTAwMCAqIEcKKwk7IENiID0gLTAuMTY4NzQgKiBSIC0gMC4zMzEyNiAqIEcgKyAwLjUwMDAwICogQiArIENFTlRFUkpTQU1QTEUKKwk7IENyID0gIDAuNTAwMDAgKiBSIC0gMC40MTg2OSAqIEcgLSAwLjA4MTMxICogQiArIENFTlRFUkpTQU1QTEUKKworCW1vdmRxYSAgICBYTU1XT1JEIFt3aygwKV0sIHhtbTAJOyB3aygwKT1SRQorCW1vdmRxYSAgICBYTU1XT1JEIFt3aygxKV0sIHhtbTEJOyB3aygxKT1STworCW1vdmRxYSAgICBYTU1XT1JEIFt3aygyKV0sIHhtbTQJOyB3aygyKT1CRQorCW1vdmRxYSAgICBYTU1XT1JEIFt3aygzKV0sIHhtbTUJOyB3aygzKT1CTworCisJbW92ZHFhICAgIHhtbTYseG1tMQorCXB1bnBja2x3ZCB4bW0xLHhtbTMKKwlwdW5wY2tod2QgeG1tNix4bW0zCisJbW92ZHFhICAgIHhtbTcseG1tMQorCW1vdmRxYSAgICB4bW00LHhtbTYKKwlwbWFkZHdkICAgeG1tMSxbcmVsIFBXX0YwMjk5X0YwMzM3XSA7IHhtbTE9Uk9MKkZJWCgwLjI5OSkrR09MKkZJWCgwLjMzNykKKwlwbWFkZHdkICAgeG1tNixbcmVsIFBXX0YwMjk5X0YwMzM3XSA7IHhtbTY9Uk9IKkZJWCgwLjI5OSkrR09IKkZJWCgwLjMzNykKKwlwbWFkZHdkICAgeG1tNyxbcmVsIFBXX01GMDE2X01GMDMzXSA7IHhtbTc9Uk9MKi1GSVgoMC4xNjgpK0dPTCotRklYKDAuMzMxKQorCXBtYWRkd2QgICB4bW00LFtyZWwgUFdfTUYwMTZfTUYwMzNdIDsgeG1tND1ST0gqLUZJWCgwLjE2OCkrR09IKi1GSVgoMC4zMzEpCisKKwltb3ZkcWEgICAgWE1NV09SRCBbd2soNCldLCB4bW0xCTsgd2soNCk9Uk9MKkZJWCgwLjI5OSkrR09MKkZJWCgwLjMzNykKKwltb3ZkcWEgICAgWE1NV09SRCBbd2soNSldLCB4bW02CTsgd2soNSk9Uk9IKkZJWCgwLjI5OSkrR09IKkZJWCgwLjMzNykKKworCXB4b3IgICAgICB4bW0xLHhtbTEKKwlweG9yICAgICAgeG1tNix4bW02CisJcHVucGNrbHdkIHhtbTEseG1tNQkJOyB4bW0xPUJPTAorCXB1bnBja2h3ZCB4bW02LHhtbTUJCTsgeG1tNj1CT0gKKwlwc3JsZCAgICAgeG1tMSwxCQk7IHhtbTE9Qk9MKkZJWCgwLjUwMCkKKwlwc3JsZCAgICAgeG1tNiwxCQk7IHhtbTY9Qk9IKkZJWCgwLjUwMCkKKworCW1vdmRxYSAgICB4bW01LFtyZWwgUERfT05FSEFMRk0xX0NKXSA7IHhtbTU9W1BEX09ORUhBTEZNMV9DSl0KKworCXBhZGRkICAgICB4bW03LHhtbTEKKwlwYWRkZCAgICAgeG1tNCx4bW02CisJcGFkZGQgICAgIHhtbTcseG1tNQorCXBhZGRkICAgICB4bW00LHhtbTUKKwlwc3JsZCAgICAgeG1tNyxTQ0FMRUJJVFMJOyB4bW03PUNiT0wKKwlwc3JsZCAgICAgeG1tNCxTQ0FMRUJJVFMJOyB4bW00PUNiT0gKKwlwYWNrc3NkdyAgeG1tNyx4bW00CQk7IHhtbTc9Q2JPCisKKwltb3ZkcWEgICAgeG1tMSwgWE1NV09SRCBbd2soMildCTsgeG1tMT1CRQorCisJbW92ZHFhICAgIHhtbTYseG1tMAorCXB1bnBja2x3ZCB4bW0wLHhtbTIKKwlwdW5wY2tod2QgeG1tNix4bW0yCisJbW92ZHFhICAgIHhtbTUseG1tMAorCW1vdmRxYSAgICB4bW00LHhtbTYKKwlwbWFkZHdkICAgeG1tMCxbcmVsIFBXX0YwMjk5X0YwMzM3XSA7IHhtbTA9UkVMKkZJWCgwLjI5OSkrR0VMKkZJWCgwLjMzNykKKwlwbWFkZHdkICAgeG1tNixbcmVsIFBXX0YwMjk5X0YwMzM3XSA7IHhtbTY9UkVIKkZJWCgwLjI5OSkrR0VIKkZJWCgwLjMzNykKKwlwbWFkZHdkICAgeG1tNSxbcmVsIFBXX01GMDE2X01GMDMzXSA7IHhtbTU9UkVMKi1GSVgoMC4xNjgpK0dFTCotRklYKDAuMzMxKQorCXBtYWRkd2QgICB4bW00LFtyZWwgUFdfTUYwMTZfTUYwMzNdIDsgeG1tND1SRUgqLUZJWCgwLjE2OCkrR0VIKi1GSVgoMC4zMzEpCisKKwltb3ZkcWEgICAgWE1NV09SRCBbd2soNildLCB4bW0wCTsgd2soNik9UkVMKkZJWCgwLjI5OSkrR0VMKkZJWCgwLjMzNykKKwltb3ZkcWEgICAgWE1NV09SRCBbd2soNyldLCB4bW02CTsgd2soNyk9UkVIKkZJWCgwLjI5OSkrR0VIKkZJWCgwLjMzNykKKworCXB4b3IgICAgICB4bW0wLHhtbTAKKwlweG9yICAgICAgeG1tNix4bW02CisJcHVucGNrbHdkIHhtbTAseG1tMQkJOyB4bW0wPUJFTAorCXB1bnBja2h3ZCB4bW02LHhtbTEJCTsgeG1tNj1CRUgKKwlwc3JsZCAgICAgeG1tMCwxCQk7IHhtbTA9QkVMKkZJWCgwLjUwMCkKKwlwc3JsZCAgICAgeG1tNiwxCQk7IHhtbTY9QkVIKkZJWCgwLjUwMCkKKworCW1vdmRxYSAgICB4bW0xLFtyZWwgUERfT05FSEFMRk0xX0NKXSA7IHhtbTE9W1BEX09ORUhBTEZNMV9DSl0KKworCXBhZGRkICAgICB4bW01LHhtbTAKKwlwYWRkZCAgICAgeG1tNCx4bW02CisJcGFkZGQgICAgIHhtbTUseG1tMQorCXBhZGRkICAgICB4bW00LHhtbTEKKwlwc3JsZCAgICAgeG1tNSxTQ0FMRUJJVFMJOyB4bW01PUNiRUwKKwlwc3JsZCAgICAgeG1tNCxTQ0FMRUJJVFMJOyB4bW00PUNiRUgKKwlwYWNrc3NkdyAgeG1tNSx4bW00CQk7IHhtbTU9Q2JFCisKKwlwc2xsdyAgICAgeG1tNyxCWVRFX0JJVAorCXBvciAgICAgICB4bW01LHhtbTcJCTsgeG1tNT1DYgorCW1vdmRxYSAgICBYTU1XT1JEIFtyYnhdLCB4bW01CTsgU2F2ZSBDYgorCisJbW92ZHFhICAgIHhtbTAsIFhNTVdPUkQgW3drKDMpXQk7IHhtbTA9Qk8KKwltb3ZkcWEgICAgeG1tNiwgWE1NV09SRCBbd2soMildCTsgeG1tNj1CRQorCW1vdmRxYSAgICB4bW0xLCBYTU1XT1JEIFt3aygxKV0JOyB4bW0xPVJPCisKKwltb3ZkcWEgICAgeG1tNCx4bW0wCisJcHVucGNrbHdkIHhtbTAseG1tMworCXB1bnBja2h3ZCB4bW00LHhtbTMKKwltb3ZkcWEgICAgeG1tNyx4bW0wCisJbW92ZHFhICAgIHhtbTUseG1tNAorCXBtYWRkd2QgICB4bW0wLFtyZWwgUFdfRjAxMTRfRjAyNTBdIDsgeG1tMD1CT0wqRklYKDAuMTE0KStHT0wqRklYKDAuMjUwKQorCXBtYWRkd2QgICB4bW00LFtyZWwgUFdfRjAxMTRfRjAyNTBdIDsgeG1tND1CT0gqRklYKDAuMTE0KStHT0gqRklYKDAuMjUwKQorCXBtYWRkd2QgICB4bW03LFtyZWwgUFdfTUYwMDhfTUYwNDFdIDsgeG1tNz1CT0wqLUZJWCgwLjA4MSkrR09MKi1GSVgoMC40MTgpCisJcG1hZGR3ZCAgIHhtbTUsW3JlbCBQV19NRjAwOF9NRjA0MV0gOyB4bW01PUJPSCotRklYKDAuMDgxKStHT0gqLUZJWCgwLjQxOCkKKworCW1vdmRxYSAgICB4bW0zLFtyZWwgUERfT05FSEFMRl0JOyB4bW0zPVtQRF9PTkVIQUxGXQorCisJcGFkZGQgICAgIHhtbTAsIFhNTVdPUkQgW3drKDQpXQorCXBhZGRkICAgICB4bW00LCBYTU1XT1JEIFt3ayg1KV0KKwlwYWRkZCAgICAgeG1tMCx4bW0zCisJcGFkZGQgICAgIHhtbTQseG1tMworCXBzcmxkICAgICB4bW0wLFNDQUxFQklUUwk7IHhtbTA9WU9MCisJcHNybGQgICAgIHhtbTQsU0NBTEVCSVRTCTsgeG1tND1ZT0gKKwlwYWNrc3NkdyAgeG1tMCx4bW00CQk7IHhtbTA9WU8KKworCXB4b3IgICAgICB4bW0zLHhtbTMKKwlweG9yICAgICAgeG1tNCx4bW00CisJcHVucGNrbHdkIHhtbTMseG1tMQkJOyB4bW0zPVJPTAorCXB1bnBja2h3ZCB4bW00LHhtbTEJCTsgeG1tND1ST0gKKwlwc3JsZCAgICAgeG1tMywxCQk7IHhtbTM9Uk9MKkZJWCgwLjUwMCkKKwlwc3JsZCAgICAgeG1tNCwxCQk7IHhtbTQ9Uk9IKkZJWCgwLjUwMCkKKworCW1vdmRxYSAgICB4bW0xLFtyZWwgUERfT05FSEFMRk0xX0NKXSA7IHhtbTE9W1BEX09ORUhBTEZNMV9DSl0KKworCXBhZGRkICAgICB4bW03LHhtbTMKKwlwYWRkZCAgICAgeG1tNSx4bW00CisJcGFkZGQgICAgIHhtbTcseG1tMQorCXBhZGRkICAgICB4bW01LHhtbTEKKwlwc3JsZCAgICAgeG1tNyxTQ0FMRUJJVFMJOyB4bW03PUNyT0wKKwlwc3JsZCAgICAgeG1tNSxTQ0FMRUJJVFMJOyB4bW01PUNyT0gKKwlwYWNrc3NkdyAgeG1tNyx4bW01CQk7IHhtbTc9Q3JPCisKKwltb3ZkcWEgICAgeG1tMywgWE1NV09SRCBbd2soMCldCTsgeG1tMz1SRQorCisJbW92ZHFhICAgIHhtbTQseG1tNgorCXB1bnBja2x3ZCB4bW02LHhtbTIKKwlwdW5wY2tod2QgeG1tNCx4bW0yCisJbW92ZHFhICAgIHhtbTEseG1tNgorCW1vdmRxYSAgICB4bW01LHhtbTQKKwlwbWFkZHdkICAgeG1tNixbcmVsIFBXX0YwMTE0X0YwMjUwXSA7IHhtbTY9QkVMKkZJWCgwLjExNCkrR0VMKkZJWCgwLjI1MCkKKwlwbWFkZHdkICAgeG1tNCxbcmVsIFBXX0YwMTE0X0YwMjUwXSA7IHhtbTQ9QkVIKkZJWCgwLjExNCkrR0VIKkZJWCgwLjI1MCkKKwlwbWFkZHdkICAgeG1tMSxbcmVsIFBXX01GMDA4X01GMDQxXSA7IHhtbTE9QkVMKi1GSVgoMC4wODEpK0dFTCotRklYKDAuNDE4KQorCXBtYWRkd2QgICB4bW01LFtyZWwgUFdfTUYwMDhfTUYwNDFdIDsgeG1tNT1CRUgqLUZJWCgwLjA4MSkrR0VIKi1GSVgoMC40MTgpCisKKwltb3ZkcWEgICAgeG1tMixbcmVsIFBEX09ORUhBTEZdCTsgeG1tMj1bUERfT05FSEFMRl0KKworCXBhZGRkICAgICB4bW02LCBYTU1XT1JEIFt3ayg2KV0KKwlwYWRkZCAgICAgeG1tNCwgWE1NV09SRCBbd2soNyldCisJcGFkZGQgICAgIHhtbTYseG1tMgorCXBhZGRkICAgICB4bW00LHhtbTIKKwlwc3JsZCAgICAgeG1tNixTQ0FMRUJJVFMJOyB4bW02PVlFTAorCXBzcmxkICAgICB4bW00LFNDQUxFQklUUwk7IHhtbTQ9WUVICisJcGFja3NzZHcgIHhtbTYseG1tNAkJOyB4bW02PVlFCisKKwlwc2xsdyAgICAgeG1tMCxCWVRFX0JJVAorCXBvciAgICAgICB4bW02LHhtbTAJCTsgeG1tNj1ZCisJbW92ZHFhICAgIFhNTVdPUkQgW3JkaV0sIHhtbTYJOyBTYXZlIFkKKworCXB4b3IgICAgICB4bW0yLHhtbTIKKwlweG9yICAgICAgeG1tNCx4bW00CisJcHVucGNrbHdkIHhtbTIseG1tMwkJOyB4bW0yPVJFTAorCXB1bnBja2h3ZCB4bW00LHhtbTMJCTsgeG1tND1SRUgKKwlwc3JsZCAgICAgeG1tMiwxCQk7IHhtbTI9UkVMKkZJWCgwLjUwMCkKKwlwc3JsZCAgICAgeG1tNCwxCQk7IHhtbTQ9UkVIKkZJWCgwLjUwMCkKKworCW1vdmRxYSAgICB4bW0wLFtyZWwgUERfT05FSEFMRk0xX0NKXSA7IHhtbTA9W1BEX09ORUhBTEZNMV9DSl0KKworCXBhZGRkICAgICB4bW0xLHhtbTIKKwlwYWRkZCAgICAgeG1tNSx4bW00CisJcGFkZGQgICAgIHhtbTEseG1tMAorCXBhZGRkICAgICB4bW01LHhtbTAKKwlwc3JsZCAgICAgeG1tMSxTQ0FMRUJJVFMJOyB4bW0xPUNyRUwKKwlwc3JsZCAgICAgeG1tNSxTQ0FMRUJJVFMJOyB4bW01PUNyRUgKKwlwYWNrc3NkdyAgeG1tMSx4bW01CQk7IHhtbTE9Q3JFCisKKwlwc2xsdyAgICAgeG1tNyxCWVRFX0JJVAorCXBvciAgICAgICB4bW0xLHhtbTcJCTsgeG1tMT1DcgorCW1vdmRxYSAgICBYTU1XT1JEIFtyZHhdLCB4bW0xCTsgU2F2ZSBDcgorCisJc3ViCXJjeCwgYnl0ZSBTSVpFT0ZfWE1NV09SRAorCWFkZAlyc2ksIGJ5dGUgUkdCX1BJWEVMU0laRSpTSVpFT0ZfWE1NV09SRAk7IGlucHRyCisJYWRkCXJkaSwgYnl0ZSBTSVpFT0ZfWE1NV09SRAkJOyBvdXRwdHIwCisJYWRkCXJieCwgYnl0ZSBTSVpFT0ZfWE1NV09SRAkJOyBvdXRwdHIxCisJYWRkCXJkeCwgYnl0ZSBTSVpFT0ZfWE1NV09SRAkJOyBvdXRwdHIyCisJY21wCXJjeCwgYnl0ZSBTSVpFT0ZfWE1NV09SRAorCWphZQluZWFyIC5jb2x1bW5sb29wCisJdGVzdAlyY3gscmN4CisJam56CW5lYXIgLmNvbHVtbl9sZDEKKworCXBvcAlyY3gJCQk7IGNvbAorCXBvcAlyc2kKKwlwb3AJcmRpCisJcG9wCXJieAorCXBvcAlyZHgKKworCWFkZAlyc2ksIGJ5dGUgU0laRU9GX0pTQU1QUk9XCTsgaW5wdXRfYnVmCisJYWRkCXJkaSwgYnl0ZSBTSVpFT0ZfSlNBTVBST1cKKwlhZGQJcmJ4LCBieXRlIFNJWkVPRl9KU0FNUFJPVworCWFkZAlyZHgsIGJ5dGUgU0laRU9GX0pTQU1QUk9XCisJZGVjCXJheAkJCQk7IG51bV9yb3dzCisJamcJbmVhciAucm93bG9vcAorCisucmV0dXJuOgorCXBvcAlyYngKKwl1bmNvbGxlY3RfYXJncworCW1vdglyc3AscmJwCQk7IHJzcCA8LSBhbGlnbmVkIHJicAorCXBvcAlyc3AJCTsgcnNwIDwtIG9yaWdpbmFsIHJicAorCXBvcAlyYnAKKwlyZXQKKworOyBGb3Igc29tZSByZWFzb24sIHRoZSBPUyBYIGxpbmtlciBkb2VzIG5vdCBob25vciB0aGUgcmVxdWVzdCB0byBhbGlnbiB0aGUKKzsgc2VnbWVudCB1bmxlc3Mgd2UgZG8gdGhpcy4KKwlhbGlnbgkxNgpkaWZmIC0tZ2l0IGEvc2ltZC9qY2NscnNzMi5hc20gYi9zaW1kL2pjY2xyc3MyLmFzbQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44ZGVmNzE4Ci0tLSAvZGV2L251bGwKKysrIGIvc2ltZC9qY2NscnNzMi5hc20KQEAgLTAsMCArMSw1MDUgQEAKKzsKKzsgamNjbHJzczIuYXNtIC0gY29sb3JzcGFjZSBjb252ZXJzaW9uIChTU0UyKQorOworOyB4ODYgU0lNRCBleHRlbnNpb24gZm9yIElKRyBKUEVHIGxpYnJhcnkKKzsgQ29weXJpZ2h0IChDKSAxOTk5LTIwMDYsIE1JWUFTQUtBIE1hc2FydS4KKzsgRm9yIGNvbmRpdGlvbnMgb2YgZGlzdHJpYnV0aW9uIGFuZCB1c2UsIHNlZSBjb3B5cmlnaHQgbm90aWNlIGluIGpzaW1kZXh0LmluYworOworOyBUaGlzIGZpbGUgc2hvdWxkIGJlIGFzc2VtYmxlZCB3aXRoIE5BU00gKE5ldHdpZGUgQXNzZW1ibGVyKSwKKzsgY2FuICpub3QqIGJlIGFzc2VtYmxlZCB3aXRoIE1pY3Jvc29mdCdzIE1BU00gb3IgYW55IGNvbXBhdGlibGUKKzsgYXNzZW1ibGVyIChpbmNsdWRpbmcgQm9ybGFuZCdzIFR1cmJvIEFzc2VtYmxlcikuCis7IE5BU00gaXMgYXZhaWxhYmxlIGZyb20gaHR0cDovL25hc20uc291cmNlZm9yZ2UubmV0LyBvcgorOyBodHRwOi8vc291cmNlZm9yZ2UubmV0L3Byb2plY3Qvc2hvd2ZpbGVzLnBocD9ncm91cF9pZD02MjA4Cis7Cis7IFtUQUI4XQorCislaW5jbHVkZSAiamNvbHNhbXAuaW5jIgorCis7IC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisJU0VDVElPTglTRUdfVEVYVAorCUJJVFMJMzIKKzsKKzsgQ29udmVydCBzb21lIHJvd3Mgb2Ygc2FtcGxlcyB0byB0aGUgb3V0cHV0IGNvbG9yc3BhY2UuCis7Cis7IEdMT0JBTCh2b2lkKQorOyBqc2ltZF9yZ2JfeWNjX2NvbnZlcnRfc3NlMiAoSkRJTUVOU0lPTiBpbWdfd2lkdGgsCis7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBKU0FNUEFSUkFZIGlucHV0X2J1ZiwgSlNBTVBJTUFHRSBvdXRwdXRfYnVmLAorOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSkRJTUVOU0lPTiBvdXRwdXRfcm93LCBpbnQgbnVtX3Jvd3MpOworOworCislZGVmaW5lIGltZ193aWR0aChiKQkoYikrOAkJCTsgSkRJTUVOU0lPTiBpbWdfd2lkdGgKKyVkZWZpbmUgaW5wdXRfYnVmKGIpCShiKSsxMgkJOyBKU0FNUEFSUkFZIGlucHV0X2J1ZgorJWRlZmluZSBvdXRwdXRfYnVmKGIpCShiKSsxNgkJOyBKU0FNUElNQUdFIG91dHB1dF9idWYKKyVkZWZpbmUgb3V0cHV0X3JvdyhiKQkoYikrMjAJCTsgSkRJTUVOU0lPTiBvdXRwdXRfcm93CislZGVmaW5lIG51bV9yb3dzKGIpCShiKSsyNAkJOyBpbnQgbnVtX3Jvd3MKKworJWRlZmluZSBvcmlnaW5hbF9lYnAJZWJwKzAKKyVkZWZpbmUgd2soaSkJCWVicC0oV0tfTlVNLShpKSkqU0laRU9GX1hNTVdPUkQJOyB4bW13b3JkIHdrW1dLX05VTV0KKyVkZWZpbmUgV0tfTlVNCQk4CislZGVmaW5lIGdvdHB0cgkJd2soMCktU0laRU9GX1BPSU5URVIJOyB2b2lkICogZ290cHRyCisKKwlhbGlnbgkxNgorCisJZ2xvYmFsCUVYVE4oanNpbWRfcmdiX3ljY19jb252ZXJ0X3NzZTIpCisKK0VYVE4oanNpbWRfcmdiX3ljY19jb252ZXJ0X3NzZTIpOgorCXB1c2gJZWJwCisJbW92CWVheCxlc3AJCQkJOyBlYXggPSBvcmlnaW5hbCBlYnAKKwlzdWIJZXNwLCBieXRlIDQKKwlhbmQJZXNwLCBieXRlICgtU0laRU9GX1hNTVdPUkQpCTsgYWxpZ24gdG8gMTI4IGJpdHMKKwltb3YJW2VzcF0sZWF4CisJbW92CWVicCxlc3AJCQkJOyBlYnAgPSBhbGlnbmVkIGVicAorCWxlYQllc3AsIFt3aygwKV0KKwlwdXNocGljCWVheAkJOyBtYWtlIGEgcm9vbSBmb3IgR09UIGFkZHJlc3MKKwlwdXNoCWVieAorOwlwdXNoCWVjeAkJOyBuZWVkIG5vdCBiZSBwcmVzZXJ2ZWQKKzsJcHVzaAllZHgJCTsgbmVlZCBub3QgYmUgcHJlc2VydmVkCisJcHVzaAllc2kKKwlwdXNoCWVkaQorCisJZ2V0X0dPVAllYngJCQk7IGdldCBHT1QgYWRkcmVzcworCW1vdnBpYwlQT0lOVEVSIFtnb3RwdHJdLCBlYngJOyBzYXZlIEdPVCBhZGRyZXNzCisKKwltb3YJZWN4LCBKRElNRU5TSU9OIFtpbWdfd2lkdGgoZWF4KV0KKwl0ZXN0CWVjeCxlY3gKKwlqegluZWFyIC5yZXR1cm4KKworCXB1c2gJZWN4CisKKwltb3YJZXNpLCBKU0FNUElNQUdFIFtvdXRwdXRfYnVmKGVheCldCisJbW92CWVjeCwgSkRJTUVOU0lPTiBbb3V0cHV0X3JvdyhlYXgpXQorCW1vdgllZGksIEpTQU1QQVJSQVkgW2VzaSswKlNJWkVPRl9KU0FNUEFSUkFZXQorCW1vdgllYngsIEpTQU1QQVJSQVkgW2VzaSsxKlNJWkVPRl9KU0FNUEFSUkFZXQorCW1vdgllZHgsIEpTQU1QQVJSQVkgW2VzaSsyKlNJWkVPRl9KU0FNUEFSUkFZXQorCWxlYQllZGksIFtlZGkrZWN4KlNJWkVPRl9KU0FNUFJPV10KKwlsZWEJZWJ4LCBbZWJ4K2VjeCpTSVpFT0ZfSlNBTVBST1ddCisJbGVhCWVkeCwgW2VkeCtlY3gqU0laRU9GX0pTQU1QUk9XXQorCisJcG9wCWVjeAorCisJbW92CWVzaSwgSlNBTVBBUlJBWSBbaW5wdXRfYnVmKGVheCldCisJbW92CWVheCwgSU5UIFtudW1fcm93cyhlYXgpXQorCXRlc3QJZWF4LGVheAorCWpsZQluZWFyIC5yZXR1cm4KKwlhbGlnbngJMTYsNworLnJvd2xvb3A6CisJcHVzaHBpYwllYXgKKwlwdXNoCWVkeAorCXB1c2gJZWJ4CisJcHVzaAllZGkKKwlwdXNoCWVzaQorCXB1c2gJZWN4CQkJOyBjb2wKKworCW1vdgllc2ksIEpTQU1QUk9XIFtlc2ldCTsgaW5wdHIKKwltb3YJZWRpLCBKU0FNUFJPVyBbZWRpXQk7IG91dHB0cjAKKwltb3YJZWJ4LCBKU0FNUFJPVyBbZWJ4XQk7IG91dHB0cjEKKwltb3YJZWR4LCBKU0FNUFJPVyBbZWR4XQk7IG91dHB0cjIKKwltb3ZwaWMJZWF4LCBQT0lOVEVSIFtnb3RwdHJdCTsgbG9hZCBHT1QgYWRkcmVzcyAoZWF4KQorCisJY21wCWVjeCwgYnl0ZSBTSVpFT0ZfWE1NV09SRAorCWphZQluZWFyIC5jb2x1bW5sb29wCisJYWxpZ254CTE2LDcKKworJWlmIFJHQl9QSVhFTFNJWkUgPT0gMyA7IC0tLS0tLS0tLS0tLS0tLQorCisuY29sdW1uX2xkMToKKwlwdXNoCWVheAorCXB1c2gJZWR4CisJbGVhCWVjeCxbZWN4K2VjeCoyXQkJOyBpbXVsIGVjeCxSR0JfUElYRUxTSVpFCisJdGVzdAljbCwgU0laRU9GX0JZVEUKKwlqeglzaG9ydCAuY29sdW1uX2xkMgorCXN1YgllY3gsIGJ5dGUgU0laRU9GX0JZVEUKKwltb3Z6eAllYXgsIEJZVEUgW2VzaStlY3hdCisuY29sdW1uX2xkMjoKKwl0ZXN0CWNsLCBTSVpFT0ZfV09SRAorCWp6CXNob3J0IC5jb2x1bW5fbGQ0CisJc3ViCWVjeCwgYnl0ZSBTSVpFT0ZfV09SRAorCW1vdnp4CWVkeCwgV09SRCBbZXNpK2VjeF0KKwlzaGwJZWF4LCBXT1JEX0JJVAorCW9yCWVheCxlZHgKKy5jb2x1bW5fbGQ0OgorCW1vdmQJeG1tQSxlYXgKKwlwb3AJZWR4CisJcG9wCWVheAorCXRlc3QJY2wsIFNJWkVPRl9EV09SRAorCWp6CXNob3J0IC5jb2x1bW5fbGQ4CisJc3ViCWVjeCwgYnl0ZSBTSVpFT0ZfRFdPUkQKKwltb3ZkCXhtbUYsIFhNTV9EV09SRCBbZXNpK2VjeF0KKwlwc2xsZHEJeG1tQSwgU0laRU9GX0RXT1JECisJcG9yCXhtbUEseG1tRgorLmNvbHVtbl9sZDg6CisJdGVzdAljbCwgU0laRU9GX01NV09SRAorCWp6CXNob3J0IC5jb2x1bW5fbGQxNgorCXN1YgllY3gsIGJ5dGUgU0laRU9GX01NV09SRAorCW1vdnEJeG1tQiwgWE1NX01NV09SRCBbZXNpK2VjeF0KKwlwc2xsZHEJeG1tQSwgU0laRU9GX01NV09SRAorCXBvcgl4bW1BLHhtbUIKKy5jb2x1bW5fbGQxNjoKKwl0ZXN0CWNsLCBTSVpFT0ZfWE1NV09SRAorCWp6CXNob3J0IC5jb2x1bW5fbGQzMgorCW1vdmRxYQl4bW1GLHhtbUEKKwltb3ZkcXUJeG1tQSwgWE1NV09SRCBbZXNpKzAqU0laRU9GX1hNTVdPUkRdCisJbW92CWVjeCwgU0laRU9GX1hNTVdPUkQKKwlqbXAJc2hvcnQgLnJnYl95Y2NfY252CisuY29sdW1uX2xkMzI6CisJdGVzdAljbCwgMipTSVpFT0ZfWE1NV09SRAorCW1vdgllY3gsIFNJWkVPRl9YTU1XT1JECisJanoJc2hvcnQgLnJnYl95Y2NfY252CisJbW92ZHFhCXhtbUIseG1tQQorCW1vdmRxdQl4bW1BLCBYTU1XT1JEIFtlc2krMCpTSVpFT0ZfWE1NV09SRF0KKwltb3ZkcXUJeG1tRiwgWE1NV09SRCBbZXNpKzEqU0laRU9GX1hNTVdPUkRdCisJam1wCXNob3J0IC5yZ2JfeWNjX2NudgorCWFsaWdueAkxNiw3CisKKy5jb2x1bW5sb29wOgorCW1vdmRxdQl4bW1BLCBYTU1XT1JEIFtlc2krMCpTSVpFT0ZfWE1NV09SRF0KKwltb3ZkcXUJeG1tRiwgWE1NV09SRCBbZXNpKzEqU0laRU9GX1hNTVdPUkRdCisJbW92ZHF1CXhtbUIsIFhNTVdPUkQgW2VzaSsyKlNJWkVPRl9YTU1XT1JEXQorCisucmdiX3ljY19jbnY6CisJOyB4bW1BPSgwMCAxMCAyMCAwMSAxMSAyMSAwMiAxMiAyMiAwMyAxMyAyMyAwNCAxNCAyNCAwNSkKKwk7IHhtbUY9KDE1IDI1IDA2IDE2IDI2IDA3IDE3IDI3IDA4IDE4IDI4IDA5IDE5IDI5IDBBIDFBKQorCTsgeG1tQj0oMkEgMEIgMUIgMkIgMEMgMUMgMkMgMEQgMUQgMkQgMEUgMUUgMkUgMEYgMUYgMkYpCisKKwltb3ZkcWEgICAgeG1tRyx4bW1BCisJcHNsbGRxICAgIHhtbUEsOAk7IHhtbUE9KC0tIC0tIC0tIC0tIC0tIC0tIC0tIC0tIDAwIDEwIDIwIDAxIDExIDIxIDAyIDEyKQorCXBzcmxkcSAgICB4bW1HLDgJOyB4bW1HPSgyMiAwMyAxMyAyMyAwNCAxNCAyNCAwNSAtLSAtLSAtLSAtLSAtLSAtLSAtLSAtLSkKKworCXB1bnBja2hidyB4bW1BLHhtbUYJOyB4bW1BPSgwMCAwOCAxMCAxOCAyMCAyOCAwMSAwOSAxMSAxOSAyMSAyOSAwMiAwQSAxMiAxQSkKKwlwc2xsZHEgICAgeG1tRiw4CTsgeG1tRj0oLS0gLS0gLS0gLS0gLS0gLS0gLS0gLS0gMTUgMjUgMDYgMTYgMjYgMDcgMTcgMjcpCisKKwlwdW5wY2tsYncgeG1tRyx4bW1CCTsgeG1tRz0oMjIgMkEgMDMgMEIgMTMgMUIgMjMgMkIgMDQgMEMgMTQgMUMgMjQgMkMgMDUgMEQpCisJcHVucGNraGJ3IHhtbUYseG1tQgk7IHhtbUY9KDE1IDFEIDI1IDJEIDA2IDBFIDE2IDFFIDI2IDJFIDA3IDBGIDE3IDFGIDI3IDJGKQorCisJbW92ZHFhICAgIHhtbUQseG1tQQorCXBzbGxkcSAgICB4bW1BLDgJOyB4bW1BPSgtLSAtLSAtLSAtLSAtLSAtLSAtLSAtLSAwMCAwOCAxMCAxOCAyMCAyOCAwMSAwOSkKKwlwc3JsZHEgICAgeG1tRCw4CTsgeG1tRD0oMTEgMTkgMjEgMjkgMDIgMEEgMTIgMUEgLS0gLS0gLS0gLS0gLS0gLS0gLS0gLS0pCisKKwlwdW5wY2toYncgeG1tQSx4bW1HCTsgeG1tQT0oMDAgMDQgMDggMEMgMTAgMTQgMTggMUMgMjAgMjQgMjggMkMgMDEgMDUgMDkgMEQpCisJcHNsbGRxICAgIHhtbUcsOAk7IHhtbUc9KC0tIC0tIC0tIC0tIC0tIC0tIC0tIC0tIDIyIDJBIDAzIDBCIDEzIDFCIDIzIDJCKQorCisJcHVucGNrbGJ3IHhtbUQseG1tRgk7IHhtbUQ9KDExIDE1IDE5IDFEIDIxIDI1IDI5IDJEIDAyIDA2IDBBIDBFIDEyIDE2IDFBIDFFKQorCXB1bnBja2hidyB4bW1HLHhtbUYJOyB4bW1HPSgyMiAyNiAyQSAyRSAwMyAwNyAwQiAwRiAxMyAxNyAxQiAxRiAyMyAyNyAyQiAyRikKKworCW1vdmRxYSAgICB4bW1FLHhtbUEKKwlwc2xsZHEgICAgeG1tQSw4CTsgeG1tQT0oLS0gLS0gLS0gLS0gLS0gLS0gLS0gLS0gMDAgMDQgMDggMEMgMTAgMTQgMTggMUMpCisJcHNybGRxICAgIHhtbUUsOAk7IHhtbUU9KDIwIDI0IDI4IDJDIDAxIDA1IDA5IDBEIC0tIC0tIC0tIC0tIC0tIC0tIC0tIC0tKQorCisJcHVucGNraGJ3IHhtbUEseG1tRAk7IHhtbUE9KDAwIDAyIDA0IDA2IDA4IDBBIDBDIDBFIDEwIDEyIDE0IDE2IDE4IDFBIDFDIDFFKQorCXBzbGxkcSAgICB4bW1ELDgJOyB4bW1EPSgtLSAtLSAtLSAtLSAtLSAtLSAtLSAtLSAxMSAxNSAxOSAxRCAyMSAyNSAyOSAyRCkKKworCXB1bnBja2xidyB4bW1FLHhtbUcJOyB4bW1FPSgyMCAyMiAyNCAyNiAyOCAyQSAyQyAyRSAwMSAwMyAwNSAwNyAwOSAwQiAwRCAwRikKKwlwdW5wY2toYncgeG1tRCx4bW1HCTsgeG1tRD0oMTEgMTMgMTUgMTcgMTkgMUIgMUQgMUYgMjEgMjMgMjUgMjcgMjkgMkIgMkQgMkYpCisKKwlweG9yICAgICAgeG1tSCx4bW1ICisKKwltb3ZkcWEgICAgeG1tQyx4bW1BCisJcHVucGNrbGJ3IHhtbUEseG1tSAk7IHhtbUE9KDAwIDAyIDA0IDA2IDA4IDBBIDBDIDBFKQorCXB1bnBja2hidyB4bW1DLHhtbUgJOyB4bW1DPSgxMCAxMiAxNCAxNiAxOCAxQSAxQyAxRSkKKworCW1vdmRxYSAgICB4bW1CLHhtbUUKKwlwdW5wY2tsYncgeG1tRSx4bW1ICTsgeG1tRT0oMjAgMjIgMjQgMjYgMjggMkEgMkMgMkUpCisJcHVucGNraGJ3IHhtbUIseG1tSAk7IHhtbUI9KDAxIDAzIDA1IDA3IDA5IDBCIDBEIDBGKQorCisJbW92ZHFhICAgIHhtbUYseG1tRAorCXB1bnBja2xidyB4bW1ELHhtbUgJOyB4bW1EPSgxMSAxMyAxNSAxNyAxOSAxQiAxRCAxRikKKwlwdW5wY2toYncgeG1tRix4bW1ICTsgeG1tRj0oMjEgMjMgMjUgMjcgMjkgMkIgMkQgMkYpCisKKyVlbHNlIDsgUkdCX1BJWEVMU0laRSA9PSA0IDsgLS0tLS0tLS0tLS0KKworLmNvbHVtbl9sZDE6CisJdGVzdAljbCwgU0laRU9GX1hNTVdPUkQvMTYKKwlqeglzaG9ydCAuY29sdW1uX2xkMgorCXN1YgllY3gsIGJ5dGUgU0laRU9GX1hNTVdPUkQvMTYKKwltb3ZkCXhtbUEsIFhNTV9EV09SRCBbZXNpK2VjeCpSR0JfUElYRUxTSVpFXQorLmNvbHVtbl9sZDI6CisJdGVzdAljbCwgU0laRU9GX1hNTVdPUkQvOAorCWp6CXNob3J0IC5jb2x1bW5fbGQ0CisJc3ViCWVjeCwgYnl0ZSBTSVpFT0ZfWE1NV09SRC84CisJbW92cQl4bW1FLCBYTU1fTU1XT1JEIFtlc2krZWN4KlJHQl9QSVhFTFNJWkVdCisJcHNsbGRxCXhtbUEsIFNJWkVPRl9NTVdPUkQKKwlwb3IJeG1tQSx4bW1FCisuY29sdW1uX2xkNDoKKwl0ZXN0CWNsLCBTSVpFT0ZfWE1NV09SRC80CisJanoJc2hvcnQgLmNvbHVtbl9sZDgKKwlzdWIJZWN4LCBieXRlIFNJWkVPRl9YTU1XT1JELzQKKwltb3ZkcWEJeG1tRSx4bW1BCisJbW92ZHF1CXhtbUEsIFhNTVdPUkQgW2VzaStlY3gqUkdCX1BJWEVMU0laRV0KKy5jb2x1bW5fbGQ4OgorCXRlc3QJY2wsIFNJWkVPRl9YTU1XT1JELzIKKwltb3YJZWN4LCBTSVpFT0ZfWE1NV09SRAorCWp6CXNob3J0IC5yZ2JfeWNjX2NudgorCW1vdmRxYQl4bW1GLHhtbUEKKwltb3ZkcWEJeG1tSCx4bW1FCisJbW92ZHF1CXhtbUEsIFhNTVdPUkQgW2VzaSswKlNJWkVPRl9YTU1XT1JEXQorCW1vdmRxdQl4bW1FLCBYTU1XT1JEIFtlc2krMSpTSVpFT0ZfWE1NV09SRF0KKwlqbXAJc2hvcnQgLnJnYl95Y2NfY252CisJYWxpZ254CTE2LDcKKworLmNvbHVtbmxvb3A6CisJbW92ZHF1CXhtbUEsIFhNTVdPUkQgW2VzaSswKlNJWkVPRl9YTU1XT1JEXQorCW1vdmRxdQl4bW1FLCBYTU1XT1JEIFtlc2krMSpTSVpFT0ZfWE1NV09SRF0KKwltb3ZkcXUJeG1tRiwgWE1NV09SRCBbZXNpKzIqU0laRU9GX1hNTVdPUkRdCisJbW92ZHF1CXhtbUgsIFhNTVdPUkQgW2VzaSszKlNJWkVPRl9YTU1XT1JEXQorCisucmdiX3ljY19jbnY6CisJOyB4bW1BPSgwMCAxMCAyMCAzMCAwMSAxMSAyMSAzMSAwMiAxMiAyMiAzMiAwMyAxMyAyMyAzMykKKwk7IHhtbUU9KDA0IDE0IDI0IDM0IDA1IDE1IDI1IDM1IDA2IDE2IDI2IDM2IDA3IDE3IDI3IDM3KQorCTsgeG1tRj0oMDggMTggMjggMzggMDkgMTkgMjkgMzkgMEEgMUEgMkEgM0EgMEIgMUIgMkIgM0IpCisJOyB4bW1IPSgwQyAxQyAyQyAzQyAwRCAxRCAyRCAzRCAwRSAxRSAyRSAzRSAwRiAxRiAyRiAzRikKKworCW1vdmRxYSAgICB4bW1ELHhtbUEKKwlwdW5wY2tsYncgeG1tQSx4bW1FCTsgeG1tQT0oMDAgMDQgMTAgMTQgMjAgMjQgMzAgMzQgMDEgMDUgMTEgMTUgMjEgMjUgMzEgMzUpCisJcHVucGNraGJ3IHhtbUQseG1tRQk7IHhtbUQ9KDAyIDA2IDEyIDE2IDIyIDI2IDMyIDM2IDAzIDA3IDEzIDE3IDIzIDI3IDMzIDM3KQorCisJbW92ZHFhICAgIHhtbUMseG1tRgorCXB1bnBja2xidyB4bW1GLHhtbUgJOyB4bW1GPSgwOCAwQyAxOCAxQyAyOCAyQyAzOCAzQyAwOSAwRCAxOSAxRCAyOSAyRCAzOSAzRCkKKwlwdW5wY2toYncgeG1tQyx4bW1ICTsgeG1tQz0oMEEgMEUgMUEgMUUgMkEgMkUgM0EgM0UgMEIgMEYgMUIgMUYgMkIgMkYgM0IgM0YpCisKKwltb3ZkcWEgICAgeG1tQix4bW1BCisJcHVucGNrbHdkIHhtbUEseG1tRgk7IHhtbUE9KDAwIDA0IDA4IDBDIDEwIDE0IDE4IDFDIDIwIDI0IDI4IDJDIDMwIDM0IDM4IDNDKQorCXB1bnBja2h3ZCB4bW1CLHhtbUYJOyB4bW1CPSgwMSAwNSAwOSAwRCAxMSAxNSAxOSAxRCAyMSAyNSAyOSAyRCAzMSAzNSAzOSAzRCkKKworCW1vdmRxYSAgICB4bW1HLHhtbUQKKwlwdW5wY2tsd2QgeG1tRCx4bW1DCTsgeG1tRD0oMDIgMDYgMEEgMEUgMTIgMTYgMUEgMUUgMjIgMjYgMkEgMkUgMzIgMzYgM0EgM0UpCisJcHVucGNraHdkIHhtbUcseG1tQwk7IHhtbUc9KDAzIDA3IDBCIDBGIDEzIDE3IDFCIDFGIDIzIDI3IDJCIDJGIDMzIDM3IDNCIDNGKQorCisJbW92ZHFhICAgIHhtbUUseG1tQQorCXB1bnBja2xidyB4bW1BLHhtbUQJOyB4bW1BPSgwMCAwMiAwNCAwNiAwOCAwQSAwQyAwRSAxMCAxMiAxNCAxNiAxOCAxQSAxQyAxRSkKKwlwdW5wY2toYncgeG1tRSx4bW1ECTsgeG1tRT0oMjAgMjIgMjQgMjYgMjggMkEgMkMgMkUgMzAgMzIgMzQgMzYgMzggM0EgM0MgM0UpCisKKwltb3ZkcWEgICAgeG1tSCx4bW1CCisJcHVucGNrbGJ3IHhtbUIseG1tRwk7IHhtbUI9KDAxIDAzIDA1IDA3IDA5IDBCIDBEIDBGIDExIDEzIDE1IDE3IDE5IDFCIDFEIDFGKQorCXB1bnBja2hidyB4bW1ILHhtbUcJOyB4bW1IPSgyMSAyMyAyNSAyNyAyOSAyQiAyRCAyRiAzMSAzMyAzNSAzNyAzOSAzQiAzRCAzRikKKworCXB4b3IgICAgICB4bW1GLHhtbUYKKworCW1vdmRxYSAgICB4bW1DLHhtbUEKKwlwdW5wY2tsYncgeG1tQSx4bW1GCTsgeG1tQT0oMDAgMDIgMDQgMDYgMDggMEEgMEMgMEUpCisJcHVucGNraGJ3IHhtbUMseG1tRgk7IHhtbUM9KDEwIDEyIDE0IDE2IDE4IDFBIDFDIDFFKQorCisJbW92ZHFhICAgIHhtbUQseG1tQgorCXB1bnBja2xidyB4bW1CLHhtbUYJOyB4bW1CPSgwMSAwMyAwNSAwNyAwOSAwQiAwRCAwRikKKwlwdW5wY2toYncgeG1tRCx4bW1GCTsgeG1tRD0oMTEgMTMgMTUgMTcgMTkgMUIgMUQgMUYpCisKKwltb3ZkcWEgICAgeG1tRyx4bW1FCisJcHVucGNrbGJ3IHhtbUUseG1tRgk7IHhtbUU9KDIwIDIyIDI0IDI2IDI4IDJBIDJDIDJFKQorCXB1bnBja2hidyB4bW1HLHhtbUYJOyB4bW1HPSgzMCAzMiAzNCAzNiAzOCAzQSAzQyAzRSkKKworCXB1bnBja2xidyB4bW1GLHhtbUgKKwlwdW5wY2toYncgeG1tSCx4bW1ICisJcHNybHcgICAgIHhtbUYsQllURV9CSVQJOyB4bW1GPSgyMSAyMyAyNSAyNyAyOSAyQiAyRCAyRikKKwlwc3JsdyAgICAgeG1tSCxCWVRFX0JJVAk7IHhtbUg9KDMxIDMzIDM1IDM3IDM5IDNCIDNEIDNGKQorCislZW5kaWYgOyBSR0JfUElYRUxTSVpFIDsgLS0tLS0tLS0tLS0tLS0tCisKKwk7IHhtbTA9UigwMjQ2OEFDRSk9UkUsIHhtbTI9RygwMjQ2OEFDRSk9R0UsIHhtbTQ9QigwMjQ2OEFDRSk9QkUKKwk7IHhtbTE9UigxMzU3OUJERik9Uk8sIHhtbTM9RygxMzU3OUJERik9R08sIHhtbTU9QigxMzU3OUJERik9Qk8KKworCTsgKE9yaWdpbmFsKQorCTsgWSAgPSAgMC4yOTkwMCAqIFIgKyAwLjU4NzAwICogRyArIDAuMTE0MDAgKiBCCisJOyBDYiA9IC0wLjE2ODc0ICogUiAtIDAuMzMxMjYgKiBHICsgMC41MDAwMCAqIEIgKyBDRU5URVJKU0FNUExFCisJOyBDciA9ICAwLjUwMDAwICogUiAtIDAuNDE4NjkgKiBHIC0gMC4wODEzMSAqIEIgKyBDRU5URVJKU0FNUExFCisJOworCTsgKFRoaXMgaW1wbGVtZW50YXRpb24pCisJOyBZICA9ICAwLjI5OTAwICogUiArIDAuMzM3MDAgKiBHICsgMC4xMTQwMCAqIEIgKyAwLjI1MDAwICogRworCTsgQ2IgPSAtMC4xNjg3NCAqIFIgLSAwLjMzMTI2ICogRyArIDAuNTAwMDAgKiBCICsgQ0VOVEVSSlNBTVBMRQorCTsgQ3IgPSAgMC41MDAwMCAqIFIgLSAwLjQxODY5ICogRyAtIDAuMDgxMzEgKiBCICsgQ0VOVEVSSlNBTVBMRQorCisJbW92ZHFhICAgIFhNTVdPUkQgW3drKDApXSwgeG1tMAk7IHdrKDApPVJFCisJbW92ZHFhICAgIFhNTVdPUkQgW3drKDEpXSwgeG1tMQk7IHdrKDEpPVJPCisJbW92ZHFhICAgIFhNTVdPUkQgW3drKDIpXSwgeG1tNAk7IHdrKDIpPUJFCisJbW92ZHFhICAgIFhNTVdPUkQgW3drKDMpXSwgeG1tNQk7IHdrKDMpPUJPCisKKwltb3ZkcWEgICAgeG1tNix4bW0xCisJcHVucGNrbHdkIHhtbTEseG1tMworCXB1bnBja2h3ZCB4bW02LHhtbTMKKwltb3ZkcWEgICAgeG1tNyx4bW0xCisJbW92ZHFhICAgIHhtbTQseG1tNgorCXBtYWRkd2QgICB4bW0xLFtHT1RPRkYoZWF4LFBXX0YwMjk5X0YwMzM3KV0gOyB4bW0xPVJPTCpGSVgoMC4yOTkpK0dPTCpGSVgoMC4zMzcpCisJcG1hZGR3ZCAgIHhtbTYsW0dPVE9GRihlYXgsUFdfRjAyOTlfRjAzMzcpXSA7IHhtbTY9Uk9IKkZJWCgwLjI5OSkrR09IKkZJWCgwLjMzNykKKwlwbWFkZHdkICAgeG1tNyxbR09UT0ZGKGVheCxQV19NRjAxNl9NRjAzMyldIDsgeG1tNz1ST0wqLUZJWCgwLjE2OCkrR09MKi1GSVgoMC4zMzEpCisJcG1hZGR3ZCAgIHhtbTQsW0dPVE9GRihlYXgsUFdfTUYwMTZfTUYwMzMpXSA7IHhtbTQ9Uk9IKi1GSVgoMC4xNjgpK0dPSCotRklYKDAuMzMxKQorCisJbW92ZHFhICAgIFhNTVdPUkQgW3drKDQpXSwgeG1tMQk7IHdrKDQpPVJPTCpGSVgoMC4yOTkpK0dPTCpGSVgoMC4zMzcpCisJbW92ZHFhICAgIFhNTVdPUkQgW3drKDUpXSwgeG1tNgk7IHdrKDUpPVJPSCpGSVgoMC4yOTkpK0dPSCpGSVgoMC4zMzcpCisKKwlweG9yICAgICAgeG1tMSx4bW0xCisJcHhvciAgICAgIHhtbTYseG1tNgorCXB1bnBja2x3ZCB4bW0xLHhtbTUJCTsgeG1tMT1CT0wKKwlwdW5wY2tod2QgeG1tNix4bW01CQk7IHhtbTY9Qk9ICisJcHNybGQgICAgIHhtbTEsMQkJOyB4bW0xPUJPTCpGSVgoMC41MDApCisJcHNybGQgICAgIHhtbTYsMQkJOyB4bW02PUJPSCpGSVgoMC41MDApCisKKwltb3ZkcWEgICAgeG1tNSxbR09UT0ZGKGVheCxQRF9PTkVIQUxGTTFfQ0opXSA7IHhtbTU9W1BEX09ORUhBTEZNMV9DSl0KKworCXBhZGRkICAgICB4bW03LHhtbTEKKwlwYWRkZCAgICAgeG1tNCx4bW02CisJcGFkZGQgICAgIHhtbTcseG1tNQorCXBhZGRkICAgICB4bW00LHhtbTUKKwlwc3JsZCAgICAgeG1tNyxTQ0FMRUJJVFMJOyB4bW03PUNiT0wKKwlwc3JsZCAgICAgeG1tNCxTQ0FMRUJJVFMJOyB4bW00PUNiT0gKKwlwYWNrc3NkdyAgeG1tNyx4bW00CQk7IHhtbTc9Q2JPCisKKwltb3ZkcWEgICAgeG1tMSwgWE1NV09SRCBbd2soMildCTsgeG1tMT1CRQorCisJbW92ZHFhICAgIHhtbTYseG1tMAorCXB1bnBja2x3ZCB4bW0wLHhtbTIKKwlwdW5wY2tod2QgeG1tNix4bW0yCisJbW92ZHFhICAgIHhtbTUseG1tMAorCW1vdmRxYSAgICB4bW00LHhtbTYKKwlwbWFkZHdkICAgeG1tMCxbR09UT0ZGKGVheCxQV19GMDI5OV9GMDMzNyldIDsgeG1tMD1SRUwqRklYKDAuMjk5KStHRUwqRklYKDAuMzM3KQorCXBtYWRkd2QgICB4bW02LFtHT1RPRkYoZWF4LFBXX0YwMjk5X0YwMzM3KV0gOyB4bW02PVJFSCpGSVgoMC4yOTkpK0dFSCpGSVgoMC4zMzcpCisJcG1hZGR3ZCAgIHhtbTUsW0dPVE9GRihlYXgsUFdfTUYwMTZfTUYwMzMpXSA7IHhtbTU9UkVMKi1GSVgoMC4xNjgpK0dFTCotRklYKDAuMzMxKQorCXBtYWRkd2QgICB4bW00LFtHT1RPRkYoZWF4LFBXX01GMDE2X01GMDMzKV0gOyB4bW00PVJFSCotRklYKDAuMTY4KStHRUgqLUZJWCgwLjMzMSkKKworCW1vdmRxYSAgICBYTU1XT1JEIFt3ayg2KV0sIHhtbTAJOyB3ayg2KT1SRUwqRklYKDAuMjk5KStHRUwqRklYKDAuMzM3KQorCW1vdmRxYSAgICBYTU1XT1JEIFt3ayg3KV0sIHhtbTYJOyB3ayg3KT1SRUgqRklYKDAuMjk5KStHRUgqRklYKDAuMzM3KQorCisJcHhvciAgICAgIHhtbTAseG1tMAorCXB4b3IgICAgICB4bW02LHhtbTYKKwlwdW5wY2tsd2QgeG1tMCx4bW0xCQk7IHhtbTA9QkVMCisJcHVucGNraHdkIHhtbTYseG1tMQkJOyB4bW02PUJFSAorCXBzcmxkICAgICB4bW0wLDEJCTsgeG1tMD1CRUwqRklYKDAuNTAwKQorCXBzcmxkICAgICB4bW02LDEJCTsgeG1tNj1CRUgqRklYKDAuNTAwKQorCisJbW92ZHFhICAgIHhtbTEsW0dPVE9GRihlYXgsUERfT05FSEFMRk0xX0NKKV0gOyB4bW0xPVtQRF9PTkVIQUxGTTFfQ0pdCisKKwlwYWRkZCAgICAgeG1tNSx4bW0wCisJcGFkZGQgICAgIHhtbTQseG1tNgorCXBhZGRkICAgICB4bW01LHhtbTEKKwlwYWRkZCAgICAgeG1tNCx4bW0xCisJcHNybGQgICAgIHhtbTUsU0NBTEVCSVRTCTsgeG1tNT1DYkVMCisJcHNybGQgICAgIHhtbTQsU0NBTEVCSVRTCTsgeG1tND1DYkVICisJcGFja3NzZHcgIHhtbTUseG1tNAkJOyB4bW01PUNiRQorCisJcHNsbHcgICAgIHhtbTcsQllURV9CSVQKKwlwb3IgICAgICAgeG1tNSx4bW03CQk7IHhtbTU9Q2IKKwltb3ZkcWEgICAgWE1NV09SRCBbZWJ4XSwgeG1tNQk7IFNhdmUgQ2IKKworCW1vdmRxYSAgICB4bW0wLCBYTU1XT1JEIFt3aygzKV0JOyB4bW0wPUJPCisJbW92ZHFhICAgIHhtbTYsIFhNTVdPUkQgW3drKDIpXQk7IHhtbTY9QkUKKwltb3ZkcWEgICAgeG1tMSwgWE1NV09SRCBbd2soMSldCTsgeG1tMT1STworCisJbW92ZHFhICAgIHhtbTQseG1tMAorCXB1bnBja2x3ZCB4bW0wLHhtbTMKKwlwdW5wY2tod2QgeG1tNCx4bW0zCisJbW92ZHFhICAgIHhtbTcseG1tMAorCW1vdmRxYSAgICB4bW01LHhtbTQKKwlwbWFkZHdkICAgeG1tMCxbR09UT0ZGKGVheCxQV19GMDExNF9GMDI1MCldIDsgeG1tMD1CT0wqRklYKDAuMTE0KStHT0wqRklYKDAuMjUwKQorCXBtYWRkd2QgICB4bW00LFtHT1RPRkYoZWF4LFBXX0YwMTE0X0YwMjUwKV0gOyB4bW00PUJPSCpGSVgoMC4xMTQpK0dPSCpGSVgoMC4yNTApCisJcG1hZGR3ZCAgIHhtbTcsW0dPVE9GRihlYXgsUFdfTUYwMDhfTUYwNDEpXSA7IHhtbTc9Qk9MKi1GSVgoMC4wODEpK0dPTCotRklYKDAuNDE4KQorCXBtYWRkd2QgICB4bW01LFtHT1RPRkYoZWF4LFBXX01GMDA4X01GMDQxKV0gOyB4bW01PUJPSCotRklYKDAuMDgxKStHT0gqLUZJWCgwLjQxOCkKKworCW1vdmRxYSAgICB4bW0zLFtHT1RPRkYoZWF4LFBEX09ORUhBTEYpXQk7IHhtbTM9W1BEX09ORUhBTEZdCisKKwlwYWRkZCAgICAgeG1tMCwgWE1NV09SRCBbd2soNCldCisJcGFkZGQgICAgIHhtbTQsIFhNTVdPUkQgW3drKDUpXQorCXBhZGRkICAgICB4bW0wLHhtbTMKKwlwYWRkZCAgICAgeG1tNCx4bW0zCisJcHNybGQgICAgIHhtbTAsU0NBTEVCSVRTCTsgeG1tMD1ZT0wKKwlwc3JsZCAgICAgeG1tNCxTQ0FMRUJJVFMJOyB4bW00PVlPSAorCXBhY2tzc2R3ICB4bW0wLHhtbTQJCTsgeG1tMD1ZTworCisJcHhvciAgICAgIHhtbTMseG1tMworCXB4b3IgICAgICB4bW00LHhtbTQKKwlwdW5wY2tsd2QgeG1tMyx4bW0xCQk7IHhtbTM9Uk9MCisJcHVucGNraHdkIHhtbTQseG1tMQkJOyB4bW00PVJPSAorCXBzcmxkICAgICB4bW0zLDEJCTsgeG1tMz1ST0wqRklYKDAuNTAwKQorCXBzcmxkICAgICB4bW00LDEJCTsgeG1tND1ST0gqRklYKDAuNTAwKQorCisJbW92ZHFhICAgIHhtbTEsW0dPVE9GRihlYXgsUERfT05FSEFMRk0xX0NKKV0gOyB4bW0xPVtQRF9PTkVIQUxGTTFfQ0pdCisKKwlwYWRkZCAgICAgeG1tNyx4bW0zCisJcGFkZGQgICAgIHhtbTUseG1tNAorCXBhZGRkICAgICB4bW03LHhtbTEKKwlwYWRkZCAgICAgeG1tNSx4bW0xCisJcHNybGQgICAgIHhtbTcsU0NBTEVCSVRTCTsgeG1tNz1Dck9MCisJcHNybGQgICAgIHhtbTUsU0NBTEVCSVRTCTsgeG1tNT1Dck9ICisJcGFja3NzZHcgIHhtbTcseG1tNQkJOyB4bW03PUNyTworCisJbW92ZHFhICAgIHhtbTMsIFhNTVdPUkQgW3drKDApXQk7IHhtbTM9UkUKKworCW1vdmRxYSAgICB4bW00LHhtbTYKKwlwdW5wY2tsd2QgeG1tNix4bW0yCisJcHVucGNraHdkIHhtbTQseG1tMgorCW1vdmRxYSAgICB4bW0xLHhtbTYKKwltb3ZkcWEgICAgeG1tNSx4bW00CisJcG1hZGR3ZCAgIHhtbTYsW0dPVE9GRihlYXgsUFdfRjAxMTRfRjAyNTApXSA7IHhtbTY9QkVMKkZJWCgwLjExNCkrR0VMKkZJWCgwLjI1MCkKKwlwbWFkZHdkICAgeG1tNCxbR09UT0ZGKGVheCxQV19GMDExNF9GMDI1MCldIDsgeG1tND1CRUgqRklYKDAuMTE0KStHRUgqRklYKDAuMjUwKQorCXBtYWRkd2QgICB4bW0xLFtHT1RPRkYoZWF4LFBXX01GMDA4X01GMDQxKV0gOyB4bW0xPUJFTCotRklYKDAuMDgxKStHRUwqLUZJWCgwLjQxOCkKKwlwbWFkZHdkICAgeG1tNSxbR09UT0ZGKGVheCxQV19NRjAwOF9NRjA0MSldIDsgeG1tNT1CRUgqLUZJWCgwLjA4MSkrR0VIKi1GSVgoMC40MTgpCisKKwltb3ZkcWEgICAgeG1tMixbR09UT0ZGKGVheCxQRF9PTkVIQUxGKV0JOyB4bW0yPVtQRF9PTkVIQUxGXQorCisJcGFkZGQgICAgIHhtbTYsIFhNTVdPUkQgW3drKDYpXQorCXBhZGRkICAgICB4bW00LCBYTU1XT1JEIFt3ayg3KV0KKwlwYWRkZCAgICAgeG1tNix4bW0yCisJcGFkZGQgICAgIHhtbTQseG1tMgorCXBzcmxkICAgICB4bW02LFNDQUxFQklUUwk7IHhtbTY9WUVMCisJcHNybGQgICAgIHhtbTQsU0NBTEVCSVRTCTsgeG1tND1ZRUgKKwlwYWNrc3NkdyAgeG1tNix4bW00CQk7IHhtbTY9WUUKKworCXBzbGx3ICAgICB4bW0wLEJZVEVfQklUCisJcG9yICAgICAgIHhtbTYseG1tMAkJOyB4bW02PVkKKwltb3ZkcWEgICAgWE1NV09SRCBbZWRpXSwgeG1tNgk7IFNhdmUgWQorCisJcHhvciAgICAgIHhtbTIseG1tMgorCXB4b3IgICAgICB4bW00LHhtbTQKKwlwdW5wY2tsd2QgeG1tMix4bW0zCQk7IHhtbTI9UkVMCisJcHVucGNraHdkIHhtbTQseG1tMwkJOyB4bW00PVJFSAorCXBzcmxkICAgICB4bW0yLDEJCTsgeG1tMj1SRUwqRklYKDAuNTAwKQorCXBzcmxkICAgICB4bW00LDEJCTsgeG1tND1SRUgqRklYKDAuNTAwKQorCisJbW92ZHFhICAgIHhtbTAsW0dPVE9GRihlYXgsUERfT05FSEFMRk0xX0NKKV0gOyB4bW0wPVtQRF9PTkVIQUxGTTFfQ0pdCisKKwlwYWRkZCAgICAgeG1tMSx4bW0yCisJcGFkZGQgICAgIHhtbTUseG1tNAorCXBhZGRkICAgICB4bW0xLHhtbTAKKwlwYWRkZCAgICAgeG1tNSx4bW0wCisJcHNybGQgICAgIHhtbTEsU0NBTEVCSVRTCTsgeG1tMT1DckVMCisJcHNybGQgICAgIHhtbTUsU0NBTEVCSVRTCTsgeG1tNT1DckVICisJcGFja3NzZHcgIHhtbTEseG1tNQkJOyB4bW0xPUNyRQorCisJcHNsbHcgICAgIHhtbTcsQllURV9CSVQKKwlwb3IgICAgICAgeG1tMSx4bW03CQk7IHhtbTE9Q3IKKwltb3ZkcWEgICAgWE1NV09SRCBbZWR4XSwgeG1tMQk7IFNhdmUgQ3IKKworCXN1YgllY3gsIGJ5dGUgU0laRU9GX1hNTVdPUkQKKwlhZGQJZXNpLCBieXRlIFJHQl9QSVhFTFNJWkUqU0laRU9GX1hNTVdPUkQJOyBpbnB0cgorCWFkZAllZGksIGJ5dGUgU0laRU9GX1hNTVdPUkQJCTsgb3V0cHRyMAorCWFkZAllYngsIGJ5dGUgU0laRU9GX1hNTVdPUkQJCTsgb3V0cHRyMQorCWFkZAllZHgsIGJ5dGUgU0laRU9GX1hNTVdPUkQJCTsgb3V0cHRyMgorCWNtcAllY3gsIGJ5dGUgU0laRU9GX1hNTVdPUkQKKwlqYWUJbmVhciAuY29sdW1ubG9vcAorCXRlc3QJZWN4LGVjeAorCWpuegluZWFyIC5jb2x1bW5fbGQxCisKKwlwb3AJZWN4CQkJOyBjb2wKKwlwb3AJZXNpCisJcG9wCWVkaQorCXBvcAllYngKKwlwb3AJZWR4CisJcG9wcGljCWVheAorCisJYWRkCWVzaSwgYnl0ZSBTSVpFT0ZfSlNBTVBST1cJOyBpbnB1dF9idWYKKwlhZGQJZWRpLCBieXRlIFNJWkVPRl9KU0FNUFJPVworCWFkZAllYngsIGJ5dGUgU0laRU9GX0pTQU1QUk9XCisJYWRkCWVkeCwgYnl0ZSBTSVpFT0ZfSlNBTVBST1cKKwlkZWMJZWF4CQkJCTsgbnVtX3Jvd3MKKwlqZwluZWFyIC5yb3dsb29wCisKKy5yZXR1cm46CisJcG9wCWVkaQorCXBvcAllc2kKKzsJcG9wCWVkeAkJOyBuZWVkIG5vdCBiZSBwcmVzZXJ2ZWQKKzsJcG9wCWVjeAkJOyBuZWVkIG5vdCBiZSBwcmVzZXJ2ZWQKKwlwb3AJZWJ4CisJbW92CWVzcCxlYnAJCTsgZXNwIDwtIGFsaWduZWQgZWJwCisJcG9wCWVzcAkJOyBlc3AgPC0gb3JpZ2luYWwgZWJwCisJcG9wCWVicAorCXJldAorCis7IEZvciBzb21lIHJlYXNvbiwgdGhlIE9TIFggbGlua2VyIGRvZXMgbm90IGhvbm9yIHRoZSByZXF1ZXN0IHRvIGFsaWduIHRoZQorOyBzZWdtZW50IHVubGVzcyB3ZSBkbyB0aGlzLgorCWFsaWduCTE2CmRpZmYgLS1naXQgYS9zaW1kL2pjY29sbW14LmFzbSBiL3NpbWQvamNjb2xtbXguYXNtCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjVlN2YzYmUKLS0tIC9kZXYvbnVsbAorKysgYi9zaW1kL2pjY29sbW14LmFzbQpAQCAtMCwwICsxLDEyMCBAQAorOworOyBqY2NvbG1teC5hc20gLSBjb2xvcnNwYWNlIGNvbnZlcnNpb24gKE1NWCkKKzsKKzsgQ29weXJpZ2h0IDIwMDkgUGllcnJlIE9zc21hbiA8b3NzbWFuQGNlbmRpby5zZT4gZm9yIENlbmRpbyBBQgorOyBDb3B5cmlnaHQgMjAwOSBELiBSLiBDb21tYW5kZXIKKzsKKzsgQmFzZWQgb24KKzsgeDg2IFNJTUQgZXh0ZW5zaW9uIGZvciBJSkcgSlBFRyBsaWJyYXJ5Cis7IENvcHlyaWdodCAoQykgMTk5OS0yMDA2LCBNSVlBU0FLQSBNYXNhcnUuCis7IEZvciBjb25kaXRpb25zIG9mIGRpc3RyaWJ1dGlvbiBhbmQgdXNlLCBzZWUgY29weXJpZ2h0IG5vdGljZSBpbiBqc2ltZGV4dC5pbmMKKzsKKzsgVGhpcyBmaWxlIHNob3VsZCBiZSBhc3NlbWJsZWQgd2l0aCBOQVNNIChOZXR3aWRlIEFzc2VtYmxlciksCis7IGNhbiAqbm90KiBiZSBhc3NlbWJsZWQgd2l0aCBNaWNyb3NvZnQncyBNQVNNIG9yIGFueSBjb21wYXRpYmxlCis7IGFzc2VtYmxlciAoaW5jbHVkaW5nIEJvcmxhbmQncyBUdXJibyBBc3NlbWJsZXIpLgorOyBOQVNNIGlzIGF2YWlsYWJsZSBmcm9tIGh0dHA6Ly9uYXNtLnNvdXJjZWZvcmdlLm5ldC8gb3IKKzsgaHR0cDovL3NvdXJjZWZvcmdlLm5ldC9wcm9qZWN0L3Nob3dmaWxlcy5waHA/Z3JvdXBfaWQ9NjIwOAorOworOyBbVEFCOF0KKworJWluY2x1ZGUgImpzaW1kZXh0LmluYyIKKworOyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCislZGVmaW5lIFNDQUxFQklUUwkxNgorCitGXzBfMDgxCWVxdQkgNTMyOQkJCTsgRklYKDAuMDgxMzEpCitGXzBfMTE0CWVxdQkgNzQ3MQkJCTsgRklYKDAuMTE0MDApCitGXzBfMTY4CWVxdQkxMTA1OQkJCTsgRklYKDAuMTY4NzQpCitGXzBfMjUwCWVxdQkxNjM4NAkJCTsgRklYKDAuMjUwMDApCitGXzBfMjk5CWVxdQkxOTU5NQkJCTsgRklYKDAuMjk5MDApCitGXzBfMzMxCWVxdQkyMTcwOQkJCTsgRklYKDAuMzMxMjYpCitGXzBfNDE4CWVxdQkyNzQzOQkJCTsgRklYKDAuNDE4NjkpCitGXzBfNTg3CWVxdQkzODQ3MAkJCTsgRklYKDAuNTg3MDApCitGXzBfMzM3CWVxdQkoRl8wXzU4NyAtIEZfMF8yNTApCTsgRklYKDAuNTg3MDApIC0gRklYKDAuMjUwMDApCisKKzsgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKwlTRUNUSU9OCVNFR19DT05TVAorCisJYWxpZ256CTE2CisJZ2xvYmFsCUVYVE4oamNvbnN0X3JnYl95Y2NfY29udmVydF9tbXgpCisKK0VYVE4oamNvbnN0X3JnYl95Y2NfY29udmVydF9tbXgpOgorCitQV19GMDI5OV9GMDMzNwl0aW1lcyAyIGR3ICBGXzBfMjk5LCBGXzBfMzM3CitQV19GMDExNF9GMDI1MAl0aW1lcyAyIGR3ICBGXzBfMTE0LCBGXzBfMjUwCitQV19NRjAxNl9NRjAzMwl0aW1lcyAyIGR3IC1GXzBfMTY4LC1GXzBfMzMxCitQV19NRjAwOF9NRjA0MQl0aW1lcyAyIGR3IC1GXzBfMDgxLC1GXzBfNDE4CitQRF9PTkVIQUxGTTFfQ0oJdGltZXMgMiBkZCAgKDEgPDwgKFNDQUxFQklUUy0xKSkgLSAxICsgKENFTlRFUkpTQU1QTEUgPDwgU0NBTEVCSVRTKQorUERfT05FSEFMRgl0aW1lcyAyIGRkICAoMSA8PCAoU0NBTEVCSVRTLTEpKQorCisJYWxpZ256CTE2CisKKzsgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyVpbmNsdWRlICJqY2Nscm1teC5hc20iCisKKyV1bmRlZiBSR0JfUkVECisldW5kZWYgUkdCX0dSRUVOCisldW5kZWYgUkdCX0JMVUUKKyV1bmRlZiBSR0JfUElYRUxTSVpFCislZGVmaW5lIFJHQl9SRUQgMAorJWRlZmluZSBSR0JfR1JFRU4gMQorJWRlZmluZSBSR0JfQkxVRSAyCislZGVmaW5lIFJHQl9QSVhFTFNJWkUgMworJWRlZmluZSBqc2ltZF9yZ2JfeWNjX2NvbnZlcnRfbW14IGpzaW1kX2V4dHJnYl95Y2NfY29udmVydF9tbXgKKyVpbmNsdWRlICJqY2Nscm1teC5hc20iCisKKyV1bmRlZiBSR0JfUkVECisldW5kZWYgUkdCX0dSRUVOCisldW5kZWYgUkdCX0JMVUUKKyV1bmRlZiBSR0JfUElYRUxTSVpFCislZGVmaW5lIFJHQl9SRUQgMAorJWRlZmluZSBSR0JfR1JFRU4gMQorJWRlZmluZSBSR0JfQkxVRSAyCislZGVmaW5lIFJHQl9QSVhFTFNJWkUgNAorJWRlZmluZSBqc2ltZF9yZ2JfeWNjX2NvbnZlcnRfbW14IGpzaW1kX2V4dHJnYnhfeWNjX2NvbnZlcnRfbW14CislaW5jbHVkZSAiamNjbHJtbXguYXNtIgorCisldW5kZWYgUkdCX1JFRAorJXVuZGVmIFJHQl9HUkVFTgorJXVuZGVmIFJHQl9CTFVFCisldW5kZWYgUkdCX1BJWEVMU0laRQorJWRlZmluZSBSR0JfUkVEIDIKKyVkZWZpbmUgUkdCX0dSRUVOIDEKKyVkZWZpbmUgUkdCX0JMVUUgMAorJWRlZmluZSBSR0JfUElYRUxTSVpFIDMKKyVkZWZpbmUganNpbWRfcmdiX3ljY19jb252ZXJ0X21teCBqc2ltZF9leHRiZ3JfeWNjX2NvbnZlcnRfbW14CislaW5jbHVkZSAiamNjbHJtbXguYXNtIgorCisldW5kZWYgUkdCX1JFRAorJXVuZGVmIFJHQl9HUkVFTgorJXVuZGVmIFJHQl9CTFVFCisldW5kZWYgUkdCX1BJWEVMU0laRQorJWRlZmluZSBSR0JfUkVEIDIKKyVkZWZpbmUgUkdCX0dSRUVOIDEKKyVkZWZpbmUgUkdCX0JMVUUgMAorJWRlZmluZSBSR0JfUElYRUxTSVpFIDQKKyVkZWZpbmUganNpbWRfcmdiX3ljY19jb252ZXJ0X21teCBqc2ltZF9leHRiZ3J4X3ljY19jb252ZXJ0X21teAorJWluY2x1ZGUgImpjY2xybW14LmFzbSIKKworJXVuZGVmIFJHQl9SRUQKKyV1bmRlZiBSR0JfR1JFRU4KKyV1bmRlZiBSR0JfQkxVRQorJXVuZGVmIFJHQl9QSVhFTFNJWkUKKyVkZWZpbmUgUkdCX1JFRCAzCislZGVmaW5lIFJHQl9HUkVFTiAyCislZGVmaW5lIFJHQl9CTFVFIDEKKyVkZWZpbmUgUkdCX1BJWEVMU0laRSA0CislZGVmaW5lIGpzaW1kX3JnYl95Y2NfY29udmVydF9tbXgganNpbWRfZXh0eGJncl95Y2NfY29udmVydF9tbXgKKyVpbmNsdWRlICJqY2Nscm1teC5hc20iCisKKyV1bmRlZiBSR0JfUkVECisldW5kZWYgUkdCX0dSRUVOCisldW5kZWYgUkdCX0JMVUUKKyV1bmRlZiBSR0JfUElYRUxTSVpFCislZGVmaW5lIFJHQl9SRUQgMQorJWRlZmluZSBSR0JfR1JFRU4gMgorJWRlZmluZSBSR0JfQkxVRSAzCislZGVmaW5lIFJHQl9QSVhFTFNJWkUgNAorJWRlZmluZSBqc2ltZF9yZ2JfeWNjX2NvbnZlcnRfbW14IGpzaW1kX2V4dHhyZ2JfeWNjX2NvbnZlcnRfbW14CislaW5jbHVkZSAiamNjbHJtbXguYXNtIgpkaWZmIC0tZ2l0IGEvc2ltZC9qY2NvbHNzMi02NC5hc20gYi9zaW1kL2pjY29sc3MyLTY0LmFzbQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42NGVlMGJhCi0tLSAvZGV2L251bGwKKysrIGIvc2ltZC9qY2NvbHNzMi02NC5hc20KQEAgLTAsMCArMSwxMTcgQEAKKzsKKzsgamNjb2xzczItNjQuYXNtIC0gY29sb3JzcGFjZSBjb252ZXJzaW9uICg2NC1iaXQgU1NFMikKKzsKKzsgeDg2IFNJTUQgZXh0ZW5zaW9uIGZvciBJSkcgSlBFRyBsaWJyYXJ5Cis7IENvcHlyaWdodCAoQykgMTk5OS0yMDA2LCBNSVlBU0FLQSBNYXNhcnUuCis7IENvcHlyaWdodCAoQykgMjAwOSwgRC4gUi4gQ29tbWFuZGVyLgorOyBGb3IgY29uZGl0aW9ucyBvZiBkaXN0cmlidXRpb24gYW5kIHVzZSwgc2VlIGNvcHlyaWdodCBub3RpY2UgaW4ganNpbWRleHQuaW5jCis7Cis7IFRoaXMgZmlsZSBzaG91bGQgYmUgYXNzZW1ibGVkIHdpdGggTkFTTSAoTmV0d2lkZSBBc3NlbWJsZXIpLAorOyBjYW4gKm5vdCogYmUgYXNzZW1ibGVkIHdpdGggTWljcm9zb2Z0J3MgTUFTTSBvciBhbnkgY29tcGF0aWJsZQorOyBhc3NlbWJsZXIgKGluY2x1ZGluZyBCb3JsYW5kJ3MgVHVyYm8gQXNzZW1ibGVyKS4KKzsgTkFTTSBpcyBhdmFpbGFibGUgZnJvbSBodHRwOi8vbmFzbS5zb3VyY2Vmb3JnZS5uZXQvIG9yCis7IGh0dHA6Ly9zb3VyY2Vmb3JnZS5uZXQvcHJvamVjdC9zaG93ZmlsZXMucGhwP2dyb3VwX2lkPTYyMDgKKzsKKzsgW1RBQjhdCisKKyVpbmNsdWRlICJqc2ltZGV4dC5pbmMiCisKKzsgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworJWRlZmluZSBTQ0FMRUJJVFMJMTYKKworRl8wXzA4MQllcXUJIDUzMjkJCQk7IEZJWCgwLjA4MTMxKQorRl8wXzExNAllcXUJIDc0NzEJCQk7IEZJWCgwLjExNDAwKQorRl8wXzE2OAllcXUJMTEwNTkJCQk7IEZJWCgwLjE2ODc0KQorRl8wXzI1MAllcXUJMTYzODQJCQk7IEZJWCgwLjI1MDAwKQorRl8wXzI5OQllcXUJMTk1OTUJCQk7IEZJWCgwLjI5OTAwKQorRl8wXzMzMQllcXUJMjE3MDkJCQk7IEZJWCgwLjMzMTI2KQorRl8wXzQxOAllcXUJMjc0MzkJCQk7IEZJWCgwLjQxODY5KQorRl8wXzU4NwllcXUJMzg0NzAJCQk7IEZJWCgwLjU4NzAwKQorRl8wXzMzNwllcXUJKEZfMF81ODcgLSBGXzBfMjUwKQk7IEZJWCgwLjU4NzAwKSAtIEZJWCgwLjI1MDAwKQorCis7IC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisJU0VDVElPTglTRUdfQ09OU1QKKworCWFsaWduegkxNgorCWdsb2JhbAlFWFROKGpjb25zdF9yZ2JfeWNjX2NvbnZlcnRfc3NlMikKKworRVhUTihqY29uc3RfcmdiX3ljY19jb252ZXJ0X3NzZTIpOgorCitQV19GMDI5OV9GMDMzNwl0aW1lcyA0IGR3ICBGXzBfMjk5LCBGXzBfMzM3CitQV19GMDExNF9GMDI1MAl0aW1lcyA0IGR3ICBGXzBfMTE0LCBGXzBfMjUwCitQV19NRjAxNl9NRjAzMwl0aW1lcyA0IGR3IC1GXzBfMTY4LC1GXzBfMzMxCitQV19NRjAwOF9NRjA0MQl0aW1lcyA0IGR3IC1GXzBfMDgxLC1GXzBfNDE4CitQRF9PTkVIQUxGTTFfQ0oJdGltZXMgNCBkZCAgKDEgPDwgKFNDQUxFQklUUy0xKSkgLSAxICsgKENFTlRFUkpTQU1QTEUgPDwgU0NBTEVCSVRTKQorUERfT05FSEFMRgl0aW1lcyA0IGRkICAoMSA8PCAoU0NBTEVCSVRTLTEpKQorCisJYWxpZ256CTE2CisKKzsgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyVpbmNsdWRlICJqY2NscnNzMi02NC5hc20iCisKKyV1bmRlZiBSR0JfUkVECisldW5kZWYgUkdCX0dSRUVOCisldW5kZWYgUkdCX0JMVUUKKyV1bmRlZiBSR0JfUElYRUxTSVpFCislZGVmaW5lIFJHQl9SRUQgMAorJWRlZmluZSBSR0JfR1JFRU4gMQorJWRlZmluZSBSR0JfQkxVRSAyCislZGVmaW5lIFJHQl9QSVhFTFNJWkUgMworJWRlZmluZSBqc2ltZF9yZ2JfeWNjX2NvbnZlcnRfc3NlMiBqc2ltZF9leHRyZ2JfeWNjX2NvbnZlcnRfc3NlMgorJWluY2x1ZGUgImpjY2xyc3MyLTY0LmFzbSIKKworJXVuZGVmIFJHQl9SRUQKKyV1bmRlZiBSR0JfR1JFRU4KKyV1bmRlZiBSR0JfQkxVRQorJXVuZGVmIFJHQl9QSVhFTFNJWkUKKyVkZWZpbmUgUkdCX1JFRCAwCislZGVmaW5lIFJHQl9HUkVFTiAxCislZGVmaW5lIFJHQl9CTFVFIDIKKyVkZWZpbmUgUkdCX1BJWEVMU0laRSA0CislZGVmaW5lIGpzaW1kX3JnYl95Y2NfY29udmVydF9zc2UyIGpzaW1kX2V4dHJnYnhfeWNjX2NvbnZlcnRfc3NlMgorJWluY2x1ZGUgImpjY2xyc3MyLTY0LmFzbSIKKworJXVuZGVmIFJHQl9SRUQKKyV1bmRlZiBSR0JfR1JFRU4KKyV1bmRlZiBSR0JfQkxVRQorJXVuZGVmIFJHQl9QSVhFTFNJWkUKKyVkZWZpbmUgUkdCX1JFRCAyCislZGVmaW5lIFJHQl9HUkVFTiAxCislZGVmaW5lIFJHQl9CTFVFIDAKKyVkZWZpbmUgUkdCX1BJWEVMU0laRSAzCislZGVmaW5lIGpzaW1kX3JnYl95Y2NfY29udmVydF9zc2UyIGpzaW1kX2V4dGJncl95Y2NfY29udmVydF9zc2UyCislaW5jbHVkZSAiamNjbHJzczItNjQuYXNtIgorCisldW5kZWYgUkdCX1JFRAorJXVuZGVmIFJHQl9HUkVFTgorJXVuZGVmIFJHQl9CTFVFCisldW5kZWYgUkdCX1BJWEVMU0laRQorJWRlZmluZSBSR0JfUkVEIDIKKyVkZWZpbmUgUkdCX0dSRUVOIDEKKyVkZWZpbmUgUkdCX0JMVUUgMAorJWRlZmluZSBSR0JfUElYRUxTSVpFIDQKKyVkZWZpbmUganNpbWRfcmdiX3ljY19jb252ZXJ0X3NzZTIganNpbWRfZXh0YmdyeF95Y2NfY29udmVydF9zc2UyCislaW5jbHVkZSAiamNjbHJzczItNjQuYXNtIgorCisldW5kZWYgUkdCX1JFRAorJXVuZGVmIFJHQl9HUkVFTgorJXVuZGVmIFJHQl9CTFVFCisldW5kZWYgUkdCX1BJWEVMU0laRQorJWRlZmluZSBSR0JfUkVEIDMKKyVkZWZpbmUgUkdCX0dSRUVOIDIKKyVkZWZpbmUgUkdCX0JMVUUgMQorJWRlZmluZSBSR0JfUElYRUxTSVpFIDQKKyVkZWZpbmUganNpbWRfcmdiX3ljY19jb252ZXJ0X3NzZTIganNpbWRfZXh0eGJncl95Y2NfY29udmVydF9zc2UyCislaW5jbHVkZSAiamNjbHJzczItNjQuYXNtIgorCisldW5kZWYgUkdCX1JFRAorJXVuZGVmIFJHQl9HUkVFTgorJXVuZGVmIFJHQl9CTFVFCisldW5kZWYgUkdCX1BJWEVMU0laRQorJWRlZmluZSBSR0JfUkVEIDEKKyVkZWZpbmUgUkdCX0dSRUVOIDIKKyVkZWZpbmUgUkdCX0JMVUUgMworJWRlZmluZSBSR0JfUElYRUxTSVpFIDQKKyVkZWZpbmUganNpbWRfcmdiX3ljY19jb252ZXJ0X3NzZTIganNpbWRfZXh0eHJnYl95Y2NfY29udmVydF9zc2UyCislaW5jbHVkZSAiamNjbHJzczItNjQuYXNtIgpkaWZmIC0tZ2l0IGEvc2ltZC9qY2NvbHNzMi5hc20gYi9zaW1kL2pjY29sc3MyLmFzbQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44ZDFmNzM0Ci0tLSAvZGV2L251bGwKKysrIGIvc2ltZC9qY2NvbHNzMi5hc20KQEAgLTAsMCArMSwxMTcgQEAKKzsKKzsgamNjb2xzczIuYXNtIC0gY29sb3JzcGFjZSBjb252ZXJzaW9uIChTU0UyKQorOworOyB4ODYgU0lNRCBleHRlbnNpb24gZm9yIElKRyBKUEVHIGxpYnJhcnkKKzsgQ29weXJpZ2h0IChDKSAxOTk5LTIwMDYsIE1JWUFTQUtBIE1hc2FydS4KKzsgQ29weXJpZ2h0IChDKSAyMDA5LCBELiBSLiBDb21tYW5kZXIuCis7IEZvciBjb25kaXRpb25zIG9mIGRpc3RyaWJ1dGlvbiBhbmQgdXNlLCBzZWUgY29weXJpZ2h0IG5vdGljZSBpbiBqc2ltZGV4dC5pbmMKKzsKKzsgVGhpcyBmaWxlIHNob3VsZCBiZSBhc3NlbWJsZWQgd2l0aCBOQVNNIChOZXR3aWRlIEFzc2VtYmxlciksCis7IGNhbiAqbm90KiBiZSBhc3NlbWJsZWQgd2l0aCBNaWNyb3NvZnQncyBNQVNNIG9yIGFueSBjb21wYXRpYmxlCis7IGFzc2VtYmxlciAoaW5jbHVkaW5nIEJvcmxhbmQncyBUdXJibyBBc3NlbWJsZXIpLgorOyBOQVNNIGlzIGF2YWlsYWJsZSBmcm9tIGh0dHA6Ly9uYXNtLnNvdXJjZWZvcmdlLm5ldC8gb3IKKzsgaHR0cDovL3NvdXJjZWZvcmdlLm5ldC9wcm9qZWN0L3Nob3dmaWxlcy5waHA/Z3JvdXBfaWQ9NjIwOAorOworOyBbVEFCOF0KKworJWluY2x1ZGUgImpzaW1kZXh0LmluYyIKKworOyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCislZGVmaW5lIFNDQUxFQklUUwkxNgorCitGXzBfMDgxCWVxdQkgNTMyOQkJCTsgRklYKDAuMDgxMzEpCitGXzBfMTE0CWVxdQkgNzQ3MQkJCTsgRklYKDAuMTE0MDApCitGXzBfMTY4CWVxdQkxMTA1OQkJCTsgRklYKDAuMTY4NzQpCitGXzBfMjUwCWVxdQkxNjM4NAkJCTsgRklYKDAuMjUwMDApCitGXzBfMjk5CWVxdQkxOTU5NQkJCTsgRklYKDAuMjk5MDApCitGXzBfMzMxCWVxdQkyMTcwOQkJCTsgRklYKDAuMzMxMjYpCitGXzBfNDE4CWVxdQkyNzQzOQkJCTsgRklYKDAuNDE4NjkpCitGXzBfNTg3CWVxdQkzODQ3MAkJCTsgRklYKDAuNTg3MDApCitGXzBfMzM3CWVxdQkoRl8wXzU4NyAtIEZfMF8yNTApCTsgRklYKDAuNTg3MDApIC0gRklYKDAuMjUwMDApCisKKzsgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKwlTRUNUSU9OCVNFR19DT05TVAorCisJYWxpZ256CTE2CisJZ2xvYmFsCUVYVE4oamNvbnN0X3JnYl95Y2NfY29udmVydF9zc2UyKQorCitFWFROKGpjb25zdF9yZ2JfeWNjX2NvbnZlcnRfc3NlMik6CisKK1BXX0YwMjk5X0YwMzM3CXRpbWVzIDQgZHcgIEZfMF8yOTksIEZfMF8zMzcKK1BXX0YwMTE0X0YwMjUwCXRpbWVzIDQgZHcgIEZfMF8xMTQsIEZfMF8yNTAKK1BXX01GMDE2X01GMDMzCXRpbWVzIDQgZHcgLUZfMF8xNjgsLUZfMF8zMzEKK1BXX01GMDA4X01GMDQxCXRpbWVzIDQgZHcgLUZfMF8wODEsLUZfMF80MTgKK1BEX09ORUhBTEZNMV9DSgl0aW1lcyA0IGRkICAoMSA8PCAoU0NBTEVCSVRTLTEpKSAtIDEgKyAoQ0VOVEVSSlNBTVBMRSA8PCBTQ0FMRUJJVFMpCitQRF9PTkVIQUxGCXRpbWVzIDQgZGQgICgxIDw8IChTQ0FMRUJJVFMtMSkpCisKKwlhbGlnbnoJMTYKKworOyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorJWluY2x1ZGUgImpjY2xyc3MyLmFzbSIKKworJXVuZGVmIFJHQl9SRUQKKyV1bmRlZiBSR0JfR1JFRU4KKyV1bmRlZiBSR0JfQkxVRQorJXVuZGVmIFJHQl9QSVhFTFNJWkUKKyVkZWZpbmUgUkdCX1JFRCAwCislZGVmaW5lIFJHQl9HUkVFTiAxCislZGVmaW5lIFJHQl9CTFVFIDIKKyVkZWZpbmUgUkdCX1BJWEVMU0laRSAzCislZGVmaW5lIGpzaW1kX3JnYl95Y2NfY29udmVydF9zc2UyIGpzaW1kX2V4dHJnYl95Y2NfY29udmVydF9zc2UyCislaW5jbHVkZSAiamNjbHJzczIuYXNtIgorCisldW5kZWYgUkdCX1JFRAorJXVuZGVmIFJHQl9HUkVFTgorJXVuZGVmIFJHQl9CTFVFCisldW5kZWYgUkdCX1BJWEVMU0laRQorJWRlZmluZSBSR0JfUkVEIDAKKyVkZWZpbmUgUkdCX0dSRUVOIDEKKyVkZWZpbmUgUkdCX0JMVUUgMgorJWRlZmluZSBSR0JfUElYRUxTSVpFIDQKKyVkZWZpbmUganNpbWRfcmdiX3ljY19jb252ZXJ0X3NzZTIganNpbWRfZXh0cmdieF95Y2NfY29udmVydF9zc2UyCislaW5jbHVkZSAiamNjbHJzczIuYXNtIgorCisldW5kZWYgUkdCX1JFRAorJXVuZGVmIFJHQl9HUkVFTgorJXVuZGVmIFJHQl9CTFVFCisldW5kZWYgUkdCX1BJWEVMU0laRQorJWRlZmluZSBSR0JfUkVEIDIKKyVkZWZpbmUgUkdCX0dSRUVOIDEKKyVkZWZpbmUgUkdCX0JMVUUgMAorJWRlZmluZSBSR0JfUElYRUxTSVpFIDMKKyVkZWZpbmUganNpbWRfcmdiX3ljY19jb252ZXJ0X3NzZTIganNpbWRfZXh0YmdyX3ljY19jb252ZXJ0X3NzZTIKKyVpbmNsdWRlICJqY2NscnNzMi5hc20iCisKKyV1bmRlZiBSR0JfUkVECisldW5kZWYgUkdCX0dSRUVOCisldW5kZWYgUkdCX0JMVUUKKyV1bmRlZiBSR0JfUElYRUxTSVpFCislZGVmaW5lIFJHQl9SRUQgMgorJWRlZmluZSBSR0JfR1JFRU4gMQorJWRlZmluZSBSR0JfQkxVRSAwCislZGVmaW5lIFJHQl9QSVhFTFNJWkUgNAorJWRlZmluZSBqc2ltZF9yZ2JfeWNjX2NvbnZlcnRfc3NlMiBqc2ltZF9leHRiZ3J4X3ljY19jb252ZXJ0X3NzZTIKKyVpbmNsdWRlICJqY2NscnNzMi5hc20iCisKKyV1bmRlZiBSR0JfUkVECisldW5kZWYgUkdCX0dSRUVOCisldW5kZWYgUkdCX0JMVUUKKyV1bmRlZiBSR0JfUElYRUxTSVpFCislZGVmaW5lIFJHQl9SRUQgMworJWRlZmluZSBSR0JfR1JFRU4gMgorJWRlZmluZSBSR0JfQkxVRSAxCislZGVmaW5lIFJHQl9QSVhFTFNJWkUgNAorJWRlZmluZSBqc2ltZF9yZ2JfeWNjX2NvbnZlcnRfc3NlMiBqc2ltZF9leHR4YmdyX3ljY19jb252ZXJ0X3NzZTIKKyVpbmNsdWRlICJqY2NscnNzMi5hc20iCisKKyV1bmRlZiBSR0JfUkVECisldW5kZWYgUkdCX0dSRUVOCisldW5kZWYgUkdCX0JMVUUKKyV1bmRlZiBSR0JfUElYRUxTSVpFCislZGVmaW5lIFJHQl9SRUQgMQorJWRlZmluZSBSR0JfR1JFRU4gMgorJWRlZmluZSBSR0JfQkxVRSAzCislZGVmaW5lIFJHQl9QSVhFTFNJWkUgNAorJWRlZmluZSBqc2ltZF9yZ2JfeWNjX2NvbnZlcnRfc3NlMiBqc2ltZF9leHR4cmdiX3ljY19jb252ZXJ0X3NzZTIKKyVpbmNsdWRlICJqY2NscnNzMi5hc20iCmRpZmYgLS1naXQgYS9zaW1kL2pjb2xzYW1wLmluYyBiL3NpbWQvamNvbHNhbXAuaW5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjc5NzUxYjcKLS0tIC9kZXYvbnVsbAorKysgYi9zaW1kL2pjb2xzYW1wLmluYwpAQCAtMCwwICsxLDEwNSBAQAorOworOyBqY29sc2FtcC5pbmMgLSBwcml2YXRlIGRlY2xhcmF0aW9ucyBmb3IgY29sb3IgY29udmVyc2lvbiAmIHVwL2Rvd25zYW1wbGluZworOworOyBDb3B5cmlnaHQgMjAwOSBQaWVycmUgT3NzbWFuIDxvc3NtYW5AY2VuZGlvLnNlPiBmb3IgQ2VuZGlvIEFCCis7Cis7IEJhc2VkIG9uCis7IHg4NiBTSU1EIGV4dGVuc2lvbiBmb3IgSUpHIEpQRUcgbGlicmFyeQorOyBDb3B5cmlnaHQgKEMpIDE5OTktMjAwNiwgTUlZQVNBS0EgTWFzYXJ1LgorOyBGb3IgY29uZGl0aW9ucyBvZiBkaXN0cmlidXRpb24gYW5kIHVzZSwgc2VlIGNvcHlyaWdodCBub3RpY2UgaW4ganNpbWRleHQuaW5jCis7Cis7IFtUQUI4XQorCis7IC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKzsgcHNldWRvLXJlc2lzdGVycyB0byBtYWtlIG9yZGVyaW5nIG9mIFJHQiBjb25maWd1cmFibGUKKzsKKyVpZiBSR0JfUkVEID09IDAKKyVkZWZpbmUgIG1tQSAgbW0wCislZGVmaW5lICBtbUIgIG1tMQorJWRlZmluZSB4bW1BIHhtbTAKKyVkZWZpbmUgeG1tQiB4bW0xCislZWxpZiBSR0JfR1JFRU4gPT0gMAorJWRlZmluZSAgbW1BICBtbTIKKyVkZWZpbmUgIG1tQiAgbW0zCislZGVmaW5lIHhtbUEgeG1tMgorJWRlZmluZSB4bW1CIHhtbTMKKyVlbGlmIFJHQl9CTFVFID09IDAKKyVkZWZpbmUgIG1tQSAgbW00CislZGVmaW5lICBtbUIgIG1tNQorJWRlZmluZSB4bW1BIHhtbTQKKyVkZWZpbmUgeG1tQiB4bW01CislZWxzZQorJWRlZmluZSAgbW1BICBtbTYKKyVkZWZpbmUgIG1tQiAgbW03CislZGVmaW5lIHhtbUEgeG1tNgorJWRlZmluZSB4bW1CIHhtbTcKKyVlbmRpZgorCislaWYgUkdCX1JFRCA9PSAxCislZGVmaW5lICBtbUMgIG1tMAorJWRlZmluZSAgbW1EICBtbTEKKyVkZWZpbmUgeG1tQyB4bW0wCislZGVmaW5lIHhtbUQgeG1tMQorJWVsaWYgUkdCX0dSRUVOID09IDEKKyVkZWZpbmUgIG1tQyAgbW0yCislZGVmaW5lICBtbUQgIG1tMworJWRlZmluZSB4bW1DIHhtbTIKKyVkZWZpbmUgeG1tRCB4bW0zCislZWxpZiBSR0JfQkxVRSA9PSAxCislZGVmaW5lICBtbUMgIG1tNAorJWRlZmluZSAgbW1EICBtbTUKKyVkZWZpbmUgeG1tQyB4bW00CislZGVmaW5lIHhtbUQgeG1tNQorJWVsc2UKKyVkZWZpbmUgIG1tQyAgbW02CislZGVmaW5lICBtbUQgIG1tNworJWRlZmluZSB4bW1DIHhtbTYKKyVkZWZpbmUgeG1tRCB4bW03CislZW5kaWYKKworJWlmIFJHQl9SRUQgPT0gMgorJWRlZmluZSAgbW1FICBtbTAKKyVkZWZpbmUgIG1tRiAgbW0xCislZGVmaW5lIHhtbUUgeG1tMAorJWRlZmluZSB4bW1GIHhtbTEKKyVlbGlmIFJHQl9HUkVFTiA9PSAyCislZGVmaW5lICBtbUUgIG1tMgorJWRlZmluZSAgbW1GICBtbTMKKyVkZWZpbmUgeG1tRSB4bW0yCislZGVmaW5lIHhtbUYgeG1tMworJWVsaWYgUkdCX0JMVUUgPT0gMgorJWRlZmluZSAgbW1FICBtbTQKKyVkZWZpbmUgIG1tRiAgbW01CislZGVmaW5lIHhtbUUgeG1tNAorJWRlZmluZSB4bW1GIHhtbTUKKyVlbHNlCislZGVmaW5lICBtbUUgIG1tNgorJWRlZmluZSAgbW1GICBtbTcKKyVkZWZpbmUgeG1tRSB4bW02CislZGVmaW5lIHhtbUYgeG1tNworJWVuZGlmCisKKyVpZiBSR0JfUkVEID09IDMKKyVkZWZpbmUgIG1tRyAgbW0wCislZGVmaW5lICBtbUggIG1tMQorJWRlZmluZSB4bW1HIHhtbTAKKyVkZWZpbmUgeG1tSCB4bW0xCislZWxpZiBSR0JfR1JFRU4gPT0gMworJWRlZmluZSAgbW1HICBtbTIKKyVkZWZpbmUgIG1tSCAgbW0zCislZGVmaW5lIHhtbUcgeG1tMgorJWRlZmluZSB4bW1IIHhtbTMKKyVlbGlmIFJHQl9CTFVFID09IDMKKyVkZWZpbmUgIG1tRyAgbW00CislZGVmaW5lICBtbUggIG1tNQorJWRlZmluZSB4bW1HIHhtbTQKKyVkZWZpbmUgeG1tSCB4bW01CislZWxzZQorJWRlZmluZSAgbW1HICBtbTYKKyVkZWZpbmUgIG1tSCAgbW03CislZGVmaW5lIHhtbUcgeG1tNgorJWRlZmluZSB4bW1IIHhtbTcKKyVlbmRpZgorCis7IC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCmRpZmYgLS1naXQgYS9zaW1kL2pjcW50M2RuLmFzbSBiL3NpbWQvamNxbnQzZG4uYXNtCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjE4MmM4NjkKLS0tIC9kZXYvbnVsbAorKysgYi9zaW1kL2pjcW50M2RuLmFzbQpAQCAtMCwwICsxLDIzMyBAQAorOworOyBqY3FudDNkbi5hc20gLSBzYW1wbGUgZGF0YSBjb252ZXJzaW9uIGFuZCBxdWFudGl6YXRpb24gKDNETm93ISAmIE1NWCkKKzsKKzsgQ29weXJpZ2h0IDIwMDkgUGllcnJlIE9zc21hbiA8b3NzbWFuQGNlbmRpby5zZT4gZm9yIENlbmRpbyBBQgorOworOyBCYXNlZCBvbgorOyB4ODYgU0lNRCBleHRlbnNpb24gZm9yIElKRyBKUEVHIGxpYnJhcnkKKzsgQ29weXJpZ2h0IChDKSAxOTk5LTIwMDYsIE1JWUFTQUtBIE1hc2FydS4KKzsgRm9yIGNvbmRpdGlvbnMgb2YgZGlzdHJpYnV0aW9uIGFuZCB1c2UsIHNlZSBjb3B5cmlnaHQgbm90aWNlIGluIGpzaW1kZXh0LmluYworOworOyBUaGlzIGZpbGUgc2hvdWxkIGJlIGFzc2VtYmxlZCB3aXRoIE5BU00gKE5ldHdpZGUgQXNzZW1ibGVyKSwKKzsgY2FuICpub3QqIGJlIGFzc2VtYmxlZCB3aXRoIE1pY3Jvc29mdCdzIE1BU00gb3IgYW55IGNvbXBhdGlibGUKKzsgYXNzZW1ibGVyIChpbmNsdWRpbmcgQm9ybGFuZCdzIFR1cmJvIEFzc2VtYmxlcikuCis7IE5BU00gaXMgYXZhaWxhYmxlIGZyb20gaHR0cDovL25hc20uc291cmNlZm9yZ2UubmV0LyBvcgorOyBodHRwOi8vc291cmNlZm9yZ2UubmV0L3Byb2plY3Qvc2hvd2ZpbGVzLnBocD9ncm91cF9pZD02MjA4Cis7Cis7IFtUQUI4XQorCislaW5jbHVkZSAianNpbWRleHQuaW5jIgorJWluY2x1ZGUgImpkY3QuaW5jIgorCis7IC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisJU0VDVElPTglTRUdfVEVYVAorCUJJVFMJMzIKKzsKKzsgTG9hZCBkYXRhIGludG8gd29ya3NwYWNlLCBhcHBseWluZyB1bnNpZ25lZC0+c2lnbmVkIGNvbnZlcnNpb24KKzsKKzsgR0xPQkFMKHZvaWQpCis7IGpzaW1kX2NvbnZzYW1wX2Zsb2F0XzNkbm93IChKU0FNUEFSUkFZIHNhbXBsZV9kYXRhLCBKRElNRU5TSU9OIHN0YXJ0X2NvbCwKKzsgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZBU1RfRkxPQVQgKiB3b3Jrc3BhY2UpOworOworCislZGVmaW5lIHNhbXBsZV9kYXRhCWVicCs4CQk7IEpTQU1QQVJSQVkgc2FtcGxlX2RhdGEKKyVkZWZpbmUgc3RhcnRfY29sCWVicCsxMgkJOyBKRElNRU5TSU9OIHN0YXJ0X2NvbAorJWRlZmluZSB3b3Jrc3BhY2UJZWJwKzE2CQk7IEZBU1RfRkxPQVQgKiB3b3Jrc3BhY2UKKworCWFsaWduCTE2CisJZ2xvYmFsCUVYVE4oanNpbWRfY29udnNhbXBfZmxvYXRfM2Rub3cpCisKK0VYVE4oanNpbWRfY29udnNhbXBfZmxvYXRfM2Rub3cpOgorCXB1c2gJZWJwCisJbW92CWVicCxlc3AKKwlwdXNoCWVieAorOwlwdXNoCWVjeAkJOyBuZWVkIG5vdCBiZSBwcmVzZXJ2ZWQKKzsJcHVzaAllZHgJCTsgbmVlZCBub3QgYmUgcHJlc2VydmVkCisJcHVzaAllc2kKKwlwdXNoCWVkaQorCisJcGNtcGVxdyAgbW03LG1tNworCXBzbGx3ICAgIG1tNyw3CisJcGFja3Nzd2IgbW03LG1tNwkJOyBtbTcgPSBQQl9DRU5URVJKU0FNUExFICgweDgwODA4MC4uKQorCisJbW92CWVzaSwgSlNBTVBBUlJBWSBbc2FtcGxlX2RhdGFdCTsgKEpTQU1QUk9XICopCisJbW92CWVheCwgSkRJTUVOU0lPTiBbc3RhcnRfY29sXQorCW1vdgllZGksIFBPSU5URVIgW3dvcmtzcGFjZV0JOyAoRENURUxFTSAqKQorCW1vdgllY3gsIERDVFNJWkUvMgorCWFsaWdueAkxNiw3CisuY29udmxvb3A6CisJbW92CWVieCwgSlNBTVBST1cgW2VzaSswKlNJWkVPRl9KU0FNUFJPV10JOyAoSlNBTVBMRSAqKQorCW1vdgllZHgsIEpTQU1QUk9XIFtlc2krMSpTSVpFT0ZfSlNBTVBST1ddCTsgKEpTQU1QTEUgKikKKworCW1vdnEJbW0wLCBNTVdPUkQgW2VieCtlYXgqU0laRU9GX0pTQU1QTEVdCisJbW92cQltbTEsIE1NV09SRCBbZWR4K2VheCpTSVpFT0ZfSlNBTVBMRV0KKworCXBzdWJiCW1tMCxtbTcJCQkJOyBtbTA9KDAxMjM0NTY3KQorCXBzdWJiCW1tMSxtbTcJCQkJOyBtbTE9KDg5QUJDREVGKQorCisJcHVucGNrbGJ3IG1tMixtbTAJCQk7IG1tMj0oKjAqMSoyKjMpCisJcHVucGNraGJ3IG1tMCxtbTAJCQk7IG1tMD0oKjQqNSo2KjcpCisJcHVucGNrbGJ3IG1tMyxtbTEJCQk7IG1tMz0oKjgqOSpBKkIpCisJcHVucGNraGJ3IG1tMSxtbTEJCQk7IG1tMT0oKkMqRCpFKkYpCisKKwlwdW5wY2tsd2QgbW00LG1tMgkJCTsgbW00PSgqKiowKioqMSkKKwlwdW5wY2tod2QgbW0yLG1tMgkJCTsgbW0yPSgqKioyKioqMykKKwlwdW5wY2tsd2QgbW01LG1tMAkJCTsgbW01PSgqKio0KioqNSkKKwlwdW5wY2tod2QgbW0wLG1tMAkJCTsgbW0wPSgqKio2KioqNykKKworCXBzcmFkCW1tNCwoRFdPUkRfQklULUJZVEVfQklUKQk7IG1tND0oMDEpCisJcHNyYWQJbW0yLChEV09SRF9CSVQtQllURV9CSVQpCTsgbW0yPSgyMykKKwlwaTJmZAltbTQsbW00CisJcGkyZmQJbW0yLG1tMgorCXBzcmFkCW1tNSwoRFdPUkRfQklULUJZVEVfQklUKQk7IG1tNT0oNDUpCisJcHNyYWQJbW0wLChEV09SRF9CSVQtQllURV9CSVQpCTsgbW0wPSg2NykKKwlwaTJmZAltbTUsbW01CisJcGkyZmQJbW0wLG1tMAorCisJbW92cQlNTVdPUkQgW01NQkxPQ0soMCwwLGVkaSxTSVpFT0ZfRkFTVF9GTE9BVCldLCBtbTQKKwltb3ZxCU1NV09SRCBbTU1CTE9DSygwLDEsZWRpLFNJWkVPRl9GQVNUX0ZMT0FUKV0sIG1tMgorCW1vdnEJTU1XT1JEIFtNTUJMT0NLKDAsMixlZGksU0laRU9GX0ZBU1RfRkxPQVQpXSwgbW01CisJbW92cQlNTVdPUkQgW01NQkxPQ0soMCwzLGVkaSxTSVpFT0ZfRkFTVF9GTE9BVCldLCBtbTAKKworCXB1bnBja2x3ZCBtbTYsbW0zCQkJOyBtbTY9KCoqKjgqKio5KQorCXB1bnBja2h3ZCBtbTMsbW0zCQkJOyBtbTM9KCoqKkEqKipCKQorCXB1bnBja2x3ZCBtbTQsbW0xCQkJOyBtbTQ9KCoqKkMqKipEKQorCXB1bnBja2h3ZCBtbTEsbW0xCQkJOyBtbTE9KCoqKkUqKipGKQorCisJcHNyYWQJbW02LChEV09SRF9CSVQtQllURV9CSVQpCTsgbW02PSg4OSkKKwlwc3JhZAltbTMsKERXT1JEX0JJVC1CWVRFX0JJVCkJOyBtbTM9KEFCKQorCXBpMmZkCW1tNixtbTYKKwlwaTJmZAltbTMsbW0zCisJcHNyYWQJbW00LChEV09SRF9CSVQtQllURV9CSVQpCTsgbW00PShDRCkKKwlwc3JhZAltbTEsKERXT1JEX0JJVC1CWVRFX0JJVCkJOyBtbTE9KEVGKQorCXBpMmZkCW1tNCxtbTQKKwlwaTJmZAltbTEsbW0xCisKKwltb3ZxCU1NV09SRCBbTU1CTE9DSygxLDAsZWRpLFNJWkVPRl9GQVNUX0ZMT0FUKV0sIG1tNgorCW1vdnEJTU1XT1JEIFtNTUJMT0NLKDEsMSxlZGksU0laRU9GX0ZBU1RfRkxPQVQpXSwgbW0zCisJbW92cQlNTVdPUkQgW01NQkxPQ0soMSwyLGVkaSxTSVpFT0ZfRkFTVF9GTE9BVCldLCBtbTQKKwltb3ZxCU1NV09SRCBbTU1CTE9DSygxLDMsZWRpLFNJWkVPRl9GQVNUX0ZMT0FUKV0sIG1tMQorCisJYWRkCWVzaSwgYnl0ZSAyKlNJWkVPRl9KU0FNUFJPVworCWFkZAllZGksIGJ5dGUgMipEQ1RTSVpFKlNJWkVPRl9GQVNUX0ZMT0FUCisJZGVjCWVjeAorCWpuegluZWFyIC5jb252bG9vcAorCisJZmVtbXMJCTsgZW1wdHkgTU1YLzNETm93ISBzdGF0ZQorCisJcG9wCWVkaQorCXBvcAllc2kKKzsJcG9wCWVkeAkJOyBuZWVkIG5vdCBiZSBwcmVzZXJ2ZWQKKzsJcG9wCWVjeAkJOyBuZWVkIG5vdCBiZSBwcmVzZXJ2ZWQKKwlwb3AJZWJ4CisJcG9wCWVicAorCXJldAorCisKKzsgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKzsKKzsgUXVhbnRpemUvZGVzY2FsZSB0aGUgY29lZmZpY2llbnRzLCBhbmQgc3RvcmUgaW50byBjb2VmX2Jsb2NrCis7Cis7IEdMT0JBTCh2b2lkKQorOyBqc2ltZF9xdWFudGl6ZV9mbG9hdF8zZG5vdyAoSkNPRUZQVFIgY29lZl9ibG9jaywgRkFTVF9GTE9BVCAqIGRpdmlzb3JzLAorOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRkFTVF9GTE9BVCAqIHdvcmtzcGFjZSk7Cis7CisKKyVkZWZpbmUgY29lZl9ibG9jawllYnArOAkJOyBKQ09FRlBUUiBjb2VmX2Jsb2NrCislZGVmaW5lIGRpdmlzb3JzCWVicCsxMgkJOyBGQVNUX0ZMT0FUICogZGl2aXNvcnMKKyVkZWZpbmUgd29ya3NwYWNlCWVicCsxNgkJOyBGQVNUX0ZMT0FUICogd29ya3NwYWNlCisKKwlhbGlnbgkxNgorCWdsb2JhbAlFWFROKGpzaW1kX3F1YW50aXplX2Zsb2F0XzNkbm93KQorCitFWFROKGpzaW1kX3F1YW50aXplX2Zsb2F0XzNkbm93KToKKwlwdXNoCWVicAorCW1vdgllYnAsZXNwCis7CXB1c2gJZWJ4CQk7IHVudXNlZAorOwlwdXNoCWVjeAkJOyB1bnVzZWQKKzsJcHVzaAllZHgJCTsgbmVlZCBub3QgYmUgcHJlc2VydmVkCisJcHVzaAllc2kKKwlwdXNoCWVkaQorCisJbW92ICAgICAgIGVheCwgMHg0QjQwMDAwMAk7IChmbG9hdCkweDAwQzAwMDAwIChybmRpbnRfbWFnaWMpCisJbW92ZCAgICAgIG1tNyxlYXgKKwlwdW5wY2tsZHEgbW03LG1tNwkJOyBtbTc9ezEyNTgyOTEyLjBGIDEyNTgyOTEyLjBGfQorCisJbW92CWVzaSwgUE9JTlRFUiBbd29ya3NwYWNlXQorCW1vdgllZHgsIFBPSU5URVIgW2Rpdmlzb3JzXQorCW1vdgllZGksIEpDT0VGUFRSIFtjb2VmX2Jsb2NrXQorCW1vdgllYXgsIERDVFNJWkUyLzE2CisJYWxpZ254CTE2LDcKKy5xdWFudGxvb3A6CisJbW92cQltbTAsIE1NV09SRCBbTU1CTE9DSygwLDAsZXNpLFNJWkVPRl9GQVNUX0ZMT0FUKV0KKwltb3ZxCW1tMSwgTU1XT1JEIFtNTUJMT0NLKDAsMSxlc2ksU0laRU9GX0ZBU1RfRkxPQVQpXQorCXBmbXVsCW1tMCwgTU1XT1JEIFtNTUJMT0NLKDAsMCxlZHgsU0laRU9GX0ZBU1RfRkxPQVQpXQorCXBmbXVsCW1tMSwgTU1XT1JEIFtNTUJMT0NLKDAsMSxlZHgsU0laRU9GX0ZBU1RfRkxPQVQpXQorCW1vdnEJbW0yLCBNTVdPUkQgW01NQkxPQ0soMCwyLGVzaSxTSVpFT0ZfRkFTVF9GTE9BVCldCisJbW92cQltbTMsIE1NV09SRCBbTU1CTE9DSygwLDMsZXNpLFNJWkVPRl9GQVNUX0ZMT0FUKV0KKwlwZm11bAltbTIsIE1NV09SRCBbTU1CTE9DSygwLDIsZWR4LFNJWkVPRl9GQVNUX0ZMT0FUKV0KKwlwZm11bAltbTMsIE1NV09SRCBbTU1CTE9DSygwLDMsZWR4LFNJWkVPRl9GQVNUX0ZMT0FUKV0KKworCXBmYWRkCW1tMCxtbTcJCQk7IG1tMD0oMDAgKiogMDEgKiopCisJcGZhZGQJbW0xLG1tNwkJCTsgbW0xPSgwMiAqKiAwMyAqKikKKwlwZmFkZAltbTIsbW03CQkJOyBtbTA9KDA0ICoqIDA1ICoqKQorCXBmYWRkCW1tMyxtbTcJCQk7IG1tMT0oMDYgKiogMDcgKiopCisKKwltb3ZxICAgICAgbW00LG1tMAorCXB1bnBja2x3ZCBtbTAsbW0xCQk7IG1tMD0oMDAgMDIgKiogKiopCisJcHVucGNraHdkIG1tNCxtbTEJCTsgbW00PSgwMSAwMyAqKiAqKikKKwltb3ZxICAgICAgbW01LG1tMgorCXB1bnBja2x3ZCBtbTIsbW0zCQk7IG1tMj0oMDQgMDYgKiogKiopCisJcHVucGNraHdkIG1tNSxtbTMJCTsgbW01PSgwNSAwNyAqKiAqKikKKworCXB1bnBja2x3ZCBtbTAsbW00CQk7IG1tMD0oMDAgMDEgMDIgMDMpCisJcHVucGNrbHdkIG1tMixtbTUJCTsgbW0yPSgwNCAwNSAwNiAwNykKKworCW1vdnEJbW02LCBNTVdPUkQgW01NQkxPQ0soMSwwLGVzaSxTSVpFT0ZfRkFTVF9GTE9BVCldCisJbW92cQltbTEsIE1NV09SRCBbTU1CTE9DSygxLDEsZXNpLFNJWkVPRl9GQVNUX0ZMT0FUKV0KKwlwZm11bAltbTYsIE1NV09SRCBbTU1CTE9DSygxLDAsZWR4LFNJWkVPRl9GQVNUX0ZMT0FUKV0KKwlwZm11bAltbTEsIE1NV09SRCBbTU1CTE9DSygxLDEsZWR4LFNJWkVPRl9GQVNUX0ZMT0FUKV0KKwltb3ZxCW1tMywgTU1XT1JEIFtNTUJMT0NLKDEsMixlc2ksU0laRU9GX0ZBU1RfRkxPQVQpXQorCW1vdnEJbW00LCBNTVdPUkQgW01NQkxPQ0soMSwzLGVzaSxTSVpFT0ZfRkFTVF9GTE9BVCldCisJcGZtdWwJbW0zLCBNTVdPUkQgW01NQkxPQ0soMSwyLGVkeCxTSVpFT0ZfRkFTVF9GTE9BVCldCisJcGZtdWwJbW00LCBNTVdPUkQgW01NQkxPQ0soMSwzLGVkeCxTSVpFT0ZfRkFTVF9GTE9BVCldCisKKwlwZmFkZAltbTYsbW03CQkJOyBtbTA9KDEwICoqIDExICoqKQorCXBmYWRkCW1tMSxtbTcJCQk7IG1tND0oMTIgKiogMTMgKiopCisJcGZhZGQJbW0zLG1tNwkJCTsgbW0wPSgxNCAqKiAxNSAqKikKKwlwZmFkZAltbTQsbW03CQkJOyBtbTQ9KDE2ICoqIDE3ICoqKQorCisJbW92cSAgICAgIG1tNSxtbTYKKwlwdW5wY2tsd2QgbW02LG1tMQkJOyBtbTY9KDEwIDEyICoqICoqKQorCXB1bnBja2h3ZCBtbTUsbW0xCQk7IG1tNT0oMTEgMTMgKiogKiopCisJbW92cSAgICAgIG1tMSxtbTMKKwlwdW5wY2tsd2QgbW0zLG1tNAkJOyBtbTM9KDE0IDE2ICoqICoqKQorCXB1bnBja2h3ZCBtbTEsbW00CQk7IG1tMT0oMTUgMTcgKiogKiopCisKKwlwdW5wY2tsd2QgbW02LG1tNQkJOyBtbTY9KDEwIDExIDEyIDEzKQorCXB1bnBja2x3ZCBtbTMsbW0xCQk7IG1tMz0oMTQgMTUgMTYgMTcpCisKKwltb3ZxCU1NV09SRCBbTU1CTE9DSygwLDAsZWRpLFNJWkVPRl9KQ09FRildLCBtbTAKKwltb3ZxCU1NV09SRCBbTU1CTE9DSygwLDEsZWRpLFNJWkVPRl9KQ09FRildLCBtbTIKKwltb3ZxCU1NV09SRCBbTU1CTE9DSygxLDAsZWRpLFNJWkVPRl9KQ09FRildLCBtbTYKKwltb3ZxCU1NV09SRCBbTU1CTE9DSygxLDEsZWRpLFNJWkVPRl9KQ09FRildLCBtbTMKKworCWFkZAllc2ksIGJ5dGUgMTYqU0laRU9GX0ZBU1RfRkxPQVQKKwlhZGQJZWR4LCBieXRlIDE2KlNJWkVPRl9GQVNUX0ZMT0FUCisJYWRkCWVkaSwgYnl0ZSAxNipTSVpFT0ZfSkNPRUYKKwlkZWMJZWF4CisJam56CW5lYXIgLnF1YW50bG9vcAorCisJZmVtbXMJCTsgZW1wdHkgTU1YLzNETm93ISBzdGF0ZQorCisJcG9wCWVkaQorCXBvcAllc2kKKzsJcG9wCWVkeAkJOyBuZWVkIG5vdCBiZSBwcmVzZXJ2ZWQKKzsJcG9wCWVjeAkJOyB1bnVzZWQKKzsJcG9wCWVieAkJOyB1bnVzZWQKKwlwb3AJZWJwCisJcmV0CisKKzsgRm9yIHNvbWUgcmVhc29uLCB0aGUgT1MgWCBsaW5rZXIgZG9lcyBub3QgaG9ub3IgdGhlIHJlcXVlc3QgdG8gYWxpZ24gdGhlCis7IHNlZ21lbnQgdW5sZXNzIHdlIGRvIHRoaXMuCisJYWxpZ24JMTYKZGlmZiAtLWdpdCBhL3NpbWQvamNxbnRtbXguYXNtIGIvc2ltZC9qY3FudG1teC5hc20KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDhiMDhiNwotLS0gL2Rldi9udWxsCisrKyBiL3NpbWQvamNxbnRtbXguYXNtCkBAIC0wLDAgKzEsMjc0IEBACis7Cis7IGpjcW50bW14LmFzbSAtIHNhbXBsZSBkYXRhIGNvbnZlcnNpb24gYW5kIHF1YW50aXphdGlvbiAoTU1YKQorOworOyBDb3B5cmlnaHQgMjAwOSBQaWVycmUgT3NzbWFuIDxvc3NtYW5AY2VuZGlvLnNlPiBmb3IgQ2VuZGlvIEFCCis7Cis7IEJhc2VkIG9uCis7IHg4NiBTSU1EIGV4dGVuc2lvbiBmb3IgSUpHIEpQRUcgbGlicmFyeQorOyBDb3B5cmlnaHQgKEMpIDE5OTktMjAwNiwgTUlZQVNBS0EgTWFzYXJ1LgorOyBGb3IgY29uZGl0aW9ucyBvZiBkaXN0cmlidXRpb24gYW5kIHVzZSwgc2VlIGNvcHlyaWdodCBub3RpY2UgaW4ganNpbWRleHQuaW5jCis7Cis7IFRoaXMgZmlsZSBzaG91bGQgYmUgYXNzZW1ibGVkIHdpdGggTkFTTSAoTmV0d2lkZSBBc3NlbWJsZXIpLAorOyBjYW4gKm5vdCogYmUgYXNzZW1ibGVkIHdpdGggTWljcm9zb2Z0J3MgTUFTTSBvciBhbnkgY29tcGF0aWJsZQorOyBhc3NlbWJsZXIgKGluY2x1ZGluZyBCb3JsYW5kJ3MgVHVyYm8gQXNzZW1ibGVyKS4KKzsgTkFTTSBpcyBhdmFpbGFibGUgZnJvbSBodHRwOi8vbmFzbS5zb3VyY2Vmb3JnZS5uZXQvIG9yCis7IGh0dHA6Ly9zb3VyY2Vmb3JnZS5uZXQvcHJvamVjdC9zaG93ZmlsZXMucGhwP2dyb3VwX2lkPTYyMDgKKzsKKzsgW1RBQjhdCisKKyVpbmNsdWRlICJqc2ltZGV4dC5pbmMiCislaW5jbHVkZSAiamRjdC5pbmMiCisKKzsgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKwlTRUNUSU9OCVNFR19URVhUCisJQklUUwkzMgorOworOyBMb2FkIGRhdGEgaW50byB3b3Jrc3BhY2UsIGFwcGx5aW5nIHVuc2lnbmVkLT5zaWduZWQgY29udmVyc2lvbgorOworOyBHTE9CQUwodm9pZCkKKzsganNpbWRfY29udnNhbXBfbW14IChKU0FNUEFSUkFZIHNhbXBsZV9kYXRhLCBKRElNRU5TSU9OIHN0YXJ0X2NvbCwKKzsgICAgICAgICAgICAgICAgICAgICBEQ1RFTEVNICogd29ya3NwYWNlKTsKKzsKKworJWRlZmluZSBzYW1wbGVfZGF0YQllYnArOAkJOyBKU0FNUEFSUkFZIHNhbXBsZV9kYXRhCislZGVmaW5lIHN0YXJ0X2NvbAllYnArMTIJCTsgSkRJTUVOU0lPTiBzdGFydF9jb2wKKyVkZWZpbmUgd29ya3NwYWNlCWVicCsxNgkJOyBEQ1RFTEVNICogd29ya3NwYWNlCisKKwlhbGlnbgkxNgorCWdsb2JhbAlFWFROKGpzaW1kX2NvbnZzYW1wX21teCkKKworRVhUTihqc2ltZF9jb252c2FtcF9tbXgpOgorCXB1c2gJZWJwCisJbW92CWVicCxlc3AKKwlwdXNoCWVieAorOwlwdXNoCWVjeAkJOyBuZWVkIG5vdCBiZSBwcmVzZXJ2ZWQKKzsJcHVzaAllZHgJCTsgbmVlZCBub3QgYmUgcHJlc2VydmVkCisJcHVzaAllc2kKKwlwdXNoCWVkaQorCisJcHhvcgltbTYsbW02CQkJOyBtbTY9KGFsbCAwJ3MpCisJcGNtcGVxdwltbTcsbW03CisJcHNsbHcJbW03LDcJCQk7IG1tNz17MHhGRjgwIDB4RkY4MCAweEZGODAgMHhGRjgwfQorCisJbW92CWVzaSwgSlNBTVBBUlJBWSBbc2FtcGxlX2RhdGFdCTsgKEpTQU1QUk9XICopCisJbW92CWVheCwgSkRJTUVOU0lPTiBbc3RhcnRfY29sXQorCW1vdgllZGksIFBPSU5URVIgW3dvcmtzcGFjZV0JOyAoRENURUxFTSAqKQorCW1vdgllY3gsIERDVFNJWkUvNAorCWFsaWdueAkxNiw3CisuY29udmxvb3A6CisJbW92CWVieCwgSlNBTVBST1cgW2VzaSswKlNJWkVPRl9KU0FNUFJPV10JOyAoSlNBTVBMRSAqKQorCW1vdgllZHgsIEpTQU1QUk9XIFtlc2krMSpTSVpFT0ZfSlNBTVBST1ddCTsgKEpTQU1QTEUgKikKKworCW1vdnEJbW0wLCBNTVdPUkQgW2VieCtlYXgqU0laRU9GX0pTQU1QTEVdCTsgbW0wPSgwMTIzNDU2NykKKwltb3ZxCW1tMSwgTU1XT1JEIFtlZHgrZWF4KlNJWkVPRl9KU0FNUExFXQk7IG1tMT0oODlBQkNERUYpCisKKwltb3YJZWJ4LCBKU0FNUFJPVyBbZXNpKzIqU0laRU9GX0pTQU1QUk9XXQk7IChKU0FNUExFICopCisJbW92CWVkeCwgSlNBTVBST1cgW2VzaSszKlNJWkVPRl9KU0FNUFJPV10JOyAoSlNBTVBMRSAqKQorCisJbW92cQltbTIsIE1NV09SRCBbZWJ4K2VheCpTSVpFT0ZfSlNBTVBMRV0JOyBtbTI9KEdISUpLTE1OKQorCW1vdnEJbW0zLCBNTVdPUkQgW2VkeCtlYXgqU0laRU9GX0pTQU1QTEVdCTsgbW0zPShPUFFSU1RVVikKKworCW1vdnEgICAgICBtbTQsbW0wCisJcHVucGNrbGJ3IG1tMCxtbTYJCTsgbW0wPSgwMTIzKQorCXB1bnBja2hidyBtbTQsbW02CQk7IG1tND0oNDU2NykKKwltb3ZxICAgICAgbW01LG1tMQorCXB1bnBja2xidyBtbTEsbW02CQk7IG1tMT0oODlBQikKKwlwdW5wY2toYncgbW01LG1tNgkJOyBtbTU9KENERUYpCisKKwlwYWRkdwltbTAsbW03CisJcGFkZHcJbW00LG1tNworCXBhZGR3CW1tMSxtbTcKKwlwYWRkdwltbTUsbW03CisKKwltb3ZxCU1NV09SRCBbTU1CTE9DSygwLDAsZWRpLFNJWkVPRl9EQ1RFTEVNKV0sIG1tMAorCW1vdnEJTU1XT1JEIFtNTUJMT0NLKDAsMSxlZGksU0laRU9GX0RDVEVMRU0pXSwgbW00CisJbW92cQlNTVdPUkQgW01NQkxPQ0soMSwwLGVkaSxTSVpFT0ZfRENURUxFTSldLCBtbTEKKwltb3ZxCU1NV09SRCBbTU1CTE9DSygxLDEsZWRpLFNJWkVPRl9EQ1RFTEVNKV0sIG1tNQorCisJbW92cSAgICAgIG1tMCxtbTIKKwlwdW5wY2tsYncgbW0yLG1tNgkJOyBtbTI9KEdISUopCisJcHVucGNraGJ3IG1tMCxtbTYJCTsgbW0wPShLTE1OKQorCW1vdnEgICAgICBtbTQsbW0zCisJcHVucGNrbGJ3IG1tMyxtbTYJCTsgbW0zPShPUFFSKQorCXB1bnBja2hidyBtbTQsbW02CQk7IG1tND0oU1RVVikKKworCXBhZGR3CW1tMixtbTcKKwlwYWRkdwltbTAsbW03CisJcGFkZHcJbW0zLG1tNworCXBhZGR3CW1tNCxtbTcKKworCW1vdnEJTU1XT1JEIFtNTUJMT0NLKDIsMCxlZGksU0laRU9GX0RDVEVMRU0pXSwgbW0yCisJbW92cQlNTVdPUkQgW01NQkxPQ0soMiwxLGVkaSxTSVpFT0ZfRENURUxFTSldLCBtbTAKKwltb3ZxCU1NV09SRCBbTU1CTE9DSygzLDAsZWRpLFNJWkVPRl9EQ1RFTEVNKV0sIG1tMworCW1vdnEJTU1XT1JEIFtNTUJMT0NLKDMsMSxlZGksU0laRU9GX0RDVEVMRU0pXSwgbW00CisKKwlhZGQJZXNpLCBieXRlIDQqU0laRU9GX0pTQU1QUk9XCisJYWRkCWVkaSwgYnl0ZSA0KkRDVFNJWkUqU0laRU9GX0RDVEVMRU0KKwlkZWMJZWN4CisJam56CXNob3J0IC5jb252bG9vcAorCisJZW1tcwkJOyBlbXB0eSBNTVggc3RhdGUKKworCXBvcAllZGkKKwlwb3AJZXNpCis7CXBvcAllZHgJCTsgbmVlZCBub3QgYmUgcHJlc2VydmVkCis7CXBvcAllY3gJCTsgbmVlZCBub3QgYmUgcHJlc2VydmVkCisJcG9wCWVieAorCXBvcAllYnAKKwlyZXQKKworOyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorOworOyBRdWFudGl6ZS9kZXNjYWxlIHRoZSBjb2VmZmljaWVudHMsIGFuZCBzdG9yZSBpbnRvIGNvZWZfYmxvY2sKKzsKKzsgVGhpcyBpbXBsZW1lbnRhdGlvbiBpcyBiYXNlZCBvbiBhbiBhbGdvcml0aG0gZGVzY3JpYmVkIGluCis7ICAgIkhvdyB0byBvcHRpbWl6ZSBmb3IgdGhlIFBlbnRpdW0gZmFtaWx5IG9mIG1pY3JvcHJvY2Vzc29ycyIKKzsgICAoaHR0cDovL3d3dy5hZ25lci5vcmcvYXNzZW0vKS4KKzsKKzsgR0xPQkFMKHZvaWQpCis7IGpzaW1kX3F1YW50aXplX21teCAoSkNPRUZQVFIgY29lZl9ibG9jaywgRENURUxFTSAqIGRpdmlzb3JzLAorOyAgICAgICAgICAgICAgICAgICAgIERDVEVMRU0gKiB3b3Jrc3BhY2UpOworOworCislZGVmaW5lIFJFQ0lQUk9DQUwobSxuLGIpIE1NQkxPQ0soRENUU0laRSowKyhtKSwobiksKGIpLFNJWkVPRl9EQ1RFTEVNKQorJWRlZmluZSBDT1JSRUNUSU9OKG0sbixiKSBNTUJMT0NLKERDVFNJWkUqMSsobSksKG4pLChiKSxTSVpFT0ZfRENURUxFTSkKKyVkZWZpbmUgU0NBTEUobSxuLGIpICAgICAgTU1CTE9DSyhEQ1RTSVpFKjIrKG0pLChuKSwoYiksU0laRU9GX0RDVEVMRU0pCislZGVmaW5lIFNISUZUKG0sbixiKSAgICAgIE1NQkxPQ0soRENUU0laRSozKyhtKSwobiksKGIpLFNJWkVPRl9EQ1RFTEVNKQorCislZGVmaW5lIGNvZWZfYmxvY2sJZWJwKzgJCTsgSkNPRUZQVFIgY29lZl9ibG9jaworJWRlZmluZSBkaXZpc29ycwllYnArMTIJCTsgRENURUxFTSAqIGRpdmlzb3JzCislZGVmaW5lIHdvcmtzcGFjZQllYnArMTYJCTsgRENURUxFTSAqIHdvcmtzcGFjZQorCisJYWxpZ24JMTYKKwlnbG9iYWwJRVhUTihqc2ltZF9xdWFudGl6ZV9tbXgpCisKK0VYVE4oanNpbWRfcXVhbnRpemVfbW14KToKKwlwdXNoCWVicAorCW1vdgllYnAsZXNwCis7CXB1c2gJZWJ4CQk7IHVudXNlZAorOwlwdXNoCWVjeAkJOyB1bnVzZWQKKzsJcHVzaAllZHgJCTsgbmVlZCBub3QgYmUgcHJlc2VydmVkCisJcHVzaAllc2kKKwlwdXNoCWVkaQorCisJbW92CWVzaSwgUE9JTlRFUiBbd29ya3NwYWNlXQorCW1vdgllZHgsIFBPSU5URVIgW2Rpdmlzb3JzXQorCW1vdgllZGksIEpDT0VGUFRSIFtjb2VmX2Jsb2NrXQorCW1vdglhaCwgMgorCWFsaWdueAkxNiw3CisucXVhbnRsb29wMToKKwltb3YJYWwsIERDVFNJWkUyLzgvMgorCWFsaWdueAkxNiw3CisucXVhbnRsb29wMjoKKwltb3ZxCW1tMiwgTU1XT1JEIFtNTUJMT0NLKDAsMCxlc2ksU0laRU9GX0RDVEVMRU0pXQorCW1vdnEJbW0zLCBNTVdPUkQgW01NQkxPQ0soMCwxLGVzaSxTSVpFT0ZfRENURUxFTSldCisKKwltb3ZxCW1tMCxtbTIKKwltb3ZxCW1tMSxtbTMKKworCXBzcmF3CW1tMiwoV09SRF9CSVQtMSkgIDsgLTEgaWYgdmFsdWUgPCAwLCAwIG90aGVyd2lzZQorCXBzcmF3CW1tMywoV09SRF9CSVQtMSkKKworCXB4b3IJbW0wLG1tMiAgIDsgdmFsID0gLXZhbAorCXB4b3IJbW0xLG1tMworCXBzdWJ3CW1tMCxtbTIKKwlwc3VidwltbTEsbW0zCisKKwk7CisJOyBNTVggaXMgYW4gYW5ub3lpbmdseSBjcmFwcHkgaW5zdHJ1Y3Rpb24gc2V0LiBJdCBoYXMgdHdvCisJOyBtaXNmZWF0dXJlcyB0aGF0IGFyZSBjYXVzaW5nIHByb2JsZW1zIGhlcmU6CisJOworCTsgLSBBbGwgbXVsdGlwbGljYXRpb25zIGFyZSBzaWduZWQuCisJOworCTsgLSBUaGUgc2Vjb25kIG9wZXJhbmQgZm9yIHRoZSBzaGlmdHMgaXMgbm90IHRyZWF0ZWQgYXMgcGFja2VkLgorCTsKKwk7CisJOyBXZSB3b3JrIGFyb3VuZCB0aGUgZmlyc3QgcHJvYmxlbSBieSBpbXBsZW1lbnRpbmcgdGhpcyBhbGdvcml0aG06CisJOworCTsgdW5zaWduZWQgbG9uZyB1bnNpZ25lZF9tdWx0aXBseSh1bnNpZ25lZCBzaG9ydCB4LCB1bnNpZ25lZCBzaG9ydCB5KQorCTsgeworCTsgICBlbnVtIHsgU0hPUlRfQklUID0gMTYgfTsKKwk7ICAgc2lnbmVkIHNob3J0IHN4ID0gKHNpZ25lZCBzaG9ydCkgeDsKKwk7ICAgc2lnbmVkIHNob3J0IHN5ID0gKHNpZ25lZCBzaG9ydCkgeTsKKwk7ICAgc2lnbmVkIGxvbmcgc3o7CisJOyAKKwk7ICAgc3ogPSAobG9uZykgc3ggKiAobG9uZykgc3k7ICAgICAvKiBzaWduZWQgbXVsdGlwbHkgKi8KKwk7IAorCTsgICBpZiAoc3ggPCAwKSBzeiArPSAobG9uZykgc3kgPDwgU0hPUlRfQklUOworCTsgICBpZiAoc3kgPCAwKSBzeiArPSAobG9uZykgc3ggPDwgU0hPUlRfQklUOworCTsgCisJOyAgIHJldHVybiAodW5zaWduZWQgbG9uZykgc3o7CisJOyB9CisJOworCTsgKG5vdGUgdGhhdCBhIG5lZ2F0aXZlIHN4IGFkZHMgX3N5XyBhbmQgdmljZSB2ZXJzYSkKKwk7CisJOyBGb3IgdGhlIHNlY29uZCBwcm9ibGVtLCB3ZSByZXBsYWNlIHRoZSBzaGlmdCBieSBhIG11bHRpcGxpY2F0aW9uLgorCTsgVW5mb3J0dW5hdGVseSB0aGF0IG1lYW5zIHdlIGhhdmUgdG8gZGVhbCB3aXRoIHRoZSBzaWduZWQgaXNzdWUgYWdhaW4uCisJOworCisJcGFkZHcJbW0wLCBNTVdPUkQgW0NPUlJFQ1RJT04oMCwwLGVkeCldICAgOyBjb3JyZWN0aW9uICsgcm91bmRmYWN0b3IKKwlwYWRkdwltbTEsIE1NV09SRCBbQ09SUkVDVElPTigwLDEsZWR4KV0KKworCW1vdnEJbW00LG1tMCAgIDsgc3RvcmUgY3VycmVudCB2YWx1ZSBmb3IgbGF0ZXIKKwltb3ZxCW1tNSxtbTEKKwlwbXVsaHcJbW0wLCBNTVdPUkQgW1JFQ0lQUk9DQUwoMCwwLGVkeCldICAgOyByZWNpcHJvY2FsCisJcG11bGh3CW1tMSwgTU1XT1JEIFtSRUNJUFJPQ0FMKDAsMSxlZHgpXQorCXBhZGR3CW1tMCxtbTQJCTsgcmVjaXByb2NhbCBpcyBhbHdheXMgbmVnYXRpdmUgKE1TQj0xKSwKKwlwYWRkdwltbTEsbW01ICAgOyBzbyB3ZSBhbHdheXMgbmVlZCB0byBhZGQgdGhlIGluaXRpYWwgdmFsdWUKKwkgICAgICAgICAgICAgICAgOyAoaW5wdXQgdmFsdWUgaXMgbmV2ZXIgbmVnYXRpdmUgYXMgd2UKKwkgICAgICAgICAgICAgICAgOyBpbnZlcnRlZCBpdCBhdCB0aGUgc3RhcnQgb2YgdGhpcyByb3V0aW5lKQorCisJOyBoZXJlIGl0IGdldHMgYSBiaXQgdHJpY2t5IGFzIGJvdGggc2NhbGUKKwk7IGFuZCBtbTAvbW0xIGNhbiBiZSBuZWdhdGl2ZQorCW1vdnEJbW02LCBNTVdPUkQgW1NDQUxFKDAsMCxlZHgpXQk7IHNjYWxlCisJbW92cQltbTcsIE1NV09SRCBbU0NBTEUoMCwxLGVkeCldCisJbW92cQltbTQsbW0wCisJbW92cQltbTUsbW0xCisJcG11bGh3CW1tMCxtbTYKKwlwbXVsaHcJbW0xLG1tNworCisJcHNyYXcJbW02LChXT1JEX0JJVC0xKSAgICA7IGRldGVybWluZSBpZiBzY2FsZSBpcyBuZWdhdGl2ZQorCXBzcmF3CW1tNywoV09SRF9CSVQtMSkKKworCXBhbmQJbW02LG1tNCAgICAgICAgICAgICA7IGFuZCBhZGQgaW5wdXQgaWYgaXQgaXMKKwlwYW5kCW1tNyxtbTUKKwlwYWRkdwltbTAsbW02CisJcGFkZHcJbW0xLG1tNworCisJcHNyYXcJbW00LChXT1JEX0JJVC0xKSAgICA7IHRoZW4gY2hlY2sgaWYgbmVnYXRpdmUgaW5wdXQgCisJcHNyYXcJbW01LChXT1JEX0JJVC0xKQorCisJcGFuZAltbTQsIE1NV09SRCBbU0NBTEUoMCwwLGVkeCldCTsgYW5kIGFkZCBzY2FsZSBpZiBpdCBpcworCXBhbmQJbW01LCBNTVdPUkQgW1NDQUxFKDAsMSxlZHgpXQorCXBhZGR3CW1tMCxtbTQKKwlwYWRkdwltbTEsbW01CisKKwlweG9yCW1tMCxtbTIgICA7IHZhbCA9IC12YWwKKwlweG9yCW1tMSxtbTMKKwlwc3VidwltbTAsbW0yCisJcHN1YncJbW0xLG1tMworCisJbW92cQlNTVdPUkQgW01NQkxPQ0soMCwwLGVkaSxTSVpFT0ZfRENURUxFTSldLCBtbTAKKwltb3ZxCU1NV09SRCBbTU1CTE9DSygwLDEsZWRpLFNJWkVPRl9EQ1RFTEVNKV0sIG1tMQorCisJYWRkCWVzaSwgYnl0ZSA4KlNJWkVPRl9EQ1RFTEVNCisJYWRkCWVkeCwgYnl0ZSA4KlNJWkVPRl9EQ1RFTEVNCisJYWRkCWVkaSwgYnl0ZSA4KlNJWkVPRl9KQ09FRgorCWRlYwlhbAorCWpuegluZWFyIC5xdWFudGxvb3AyCisJZGVjCWFoCisJam56CW5lYXIgLnF1YW50bG9vcDEJOyB0byBhdm9pZCBicmFuY2ggbWlzcHJlZGljdGlvbgorCisJZW1tcwkJOyBlbXB0eSBNTVggc3RhdGUKKworCXBvcAllZGkKKwlwb3AJZXNpCis7CXBvcAllZHgJCTsgbmVlZCBub3QgYmUgcHJlc2VydmVkCis7CXBvcAllY3gJCTsgdW51c2VkCis7CXBvcAllYngJCTsgdW51c2VkCisJcG9wCWVicAorCXJldAorCis7IEZvciBzb21lIHJlYXNvbiwgdGhlIE9TIFggbGlua2VyIGRvZXMgbm90IGhvbm9yIHRoZSByZXF1ZXN0IHRvIGFsaWduIHRoZQorOyBzZWdtZW50IHVubGVzcyB3ZSBkbyB0aGlzLgorCWFsaWduCTE2CmRpZmYgLS1naXQgYS9zaW1kL2pjcW50czJmLTY0LmFzbSBiL3NpbWQvamNxbnRzMmYtNjQuYXNtCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQwZWZhMWIKLS0tIC9kZXYvbnVsbAorKysgYi9zaW1kL2pjcW50czJmLTY0LmFzbQpAQCAtMCwwICsxLDE1OCBAQAorOworOyBqY3FudHMyZi02NC5hc20gLSBzYW1wbGUgZGF0YSBjb252ZXJzaW9uIGFuZCBxdWFudGl6YXRpb24gKDY0LWJpdCBTU0UgJiBTU0UyKQorOworOyBDb3B5cmlnaHQgMjAwOSBQaWVycmUgT3NzbWFuIDxvc3NtYW5AY2VuZGlvLnNlPiBmb3IgQ2VuZGlvIEFCCis7IENvcHlyaWdodCAyMDA5IEQuIFIuIENvbW1hbmRlcgorOworOyBCYXNlZCBvbgorOyB4ODYgU0lNRCBleHRlbnNpb24gZm9yIElKRyBKUEVHIGxpYnJhcnkKKzsgQ29weXJpZ2h0IChDKSAxOTk5LTIwMDYsIE1JWUFTQUtBIE1hc2FydS4KKzsgRm9yIGNvbmRpdGlvbnMgb2YgZGlzdHJpYnV0aW9uIGFuZCB1c2UsIHNlZSBjb3B5cmlnaHQgbm90aWNlIGluIGpzaW1kZXh0LmluYworOworOyBUaGlzIGZpbGUgc2hvdWxkIGJlIGFzc2VtYmxlZCB3aXRoIE5BU00gKE5ldHdpZGUgQXNzZW1ibGVyKSwKKzsgY2FuICpub3QqIGJlIGFzc2VtYmxlZCB3aXRoIE1pY3Jvc29mdCdzIE1BU00gb3IgYW55IGNvbXBhdGlibGUKKzsgYXNzZW1ibGVyIChpbmNsdWRpbmcgQm9ybGFuZCdzIFR1cmJvIEFzc2VtYmxlcikuCis7IE5BU00gaXMgYXZhaWxhYmxlIGZyb20gaHR0cDovL25hc20uc291cmNlZm9yZ2UubmV0LyBvcgorOyBodHRwOi8vc291cmNlZm9yZ2UubmV0L3Byb2plY3Qvc2hvd2ZpbGVzLnBocD9ncm91cF9pZD02MjA4Cis7Cis7IFtUQUI4XQorCislaW5jbHVkZSAianNpbWRleHQuaW5jIgorJWluY2x1ZGUgImpkY3QuaW5jIgorCis7IC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisJU0VDVElPTglTRUdfVEVYVAorCUJJVFMJNjQKKzsKKzsgTG9hZCBkYXRhIGludG8gd29ya3NwYWNlLCBhcHBseWluZyB1bnNpZ25lZC0+c2lnbmVkIGNvbnZlcnNpb24KKzsKKzsgR0xPQkFMKHZvaWQpCis7IGpzaW1kX2NvbnZzYW1wX2Zsb2F0X3NzZTIgKEpTQU1QQVJSQVkgc2FtcGxlX2RhdGEsIEpESU1FTlNJT04gc3RhcnRfY29sLAorOyAgICAgICAgICAgICAgICAgICAgICAgICAgICBGQVNUX0ZMT0FUICogd29ya3NwYWNlKTsKKzsKKworOyByMTAgPSBKU0FNUEFSUkFZIHNhbXBsZV9kYXRhCis7IHIxMSA9IEpESU1FTlNJT04gc3RhcnRfY29sCis7IHIxMiA9IEZBU1RfRkxPQVQgKiB3b3Jrc3BhY2UKKworCWFsaWduCTE2CisJZ2xvYmFsCUVYVE4oanNpbWRfY29udnNhbXBfZmxvYXRfc3NlMikKKworRVhUTihqc2ltZF9jb252c2FtcF9mbG9hdF9zc2UyKToKKwlwdXNoCXJicAorCW1vdglyYXgscnNwCisJbW92CXJicCxyc3AKKwljb2xsZWN0X2FyZ3MKKwlwdXNoCXJieAorCisJcGNtcGVxdyAgeG1tNyx4bW03CisJcHNsbHcgICAgeG1tNyw3CisJcGFja3Nzd2IgeG1tNyx4bW03CQk7IHhtbTcgPSBQQl9DRU5URVJKU0FNUExFICgweDgwODA4MC4uKQorCisJbW92IHJzaSwgcjEwCisJbW92CXJheCwgcjExCisJbW92IHJkaSwgcjEyCisJbW92CXJjeCwgRENUU0laRS8yCisuY29udmxvb3A6CisJbW92CXJieCwgSlNBTVBST1cgW3JzaSswKlNJWkVPRl9KU0FNUFJPV10JOyAoSlNBTVBMRSAqKQorCW1vdiByZHgsIEpTQU1QUk9XIFtyc2krMSpTSVpFT0ZfSlNBTVBST1ddCTsgKEpTQU1QTEUgKikKKworCW1vdnEJeG1tMCwgWE1NX01NV09SRCBbcmJ4K3JheCpTSVpFT0ZfSlNBTVBMRV0KKwltb3ZxCXhtbTEsIFhNTV9NTVdPUkQgW3JkeCtyYXgqU0laRU9GX0pTQU1QTEVdCisKKwlwc3ViYgl4bW0wLHhtbTcJCQk7IHhtbTA9KDAxMjM0NTY3KQorCXBzdWJiCXhtbTEseG1tNwkJCTsgeG1tMT0oODlBQkNERUYpCisKKwlwdW5wY2tsYncgeG1tMCx4bW0wCQkJOyB4bW0wPSgqMCoxKjIqMyo0KjUqNio3KQorCXB1bnBja2xidyB4bW0xLHhtbTEJCQk7IHhtbTE9KCo4KjkqQSpCKkMqRCpFKkYpCisKKwlwdW5wY2tsd2QgeG1tMix4bW0wCQkJOyB4bW0yPSgqKiowKioqMSoqKjIqKiozKQorCXB1bnBja2h3ZCB4bW0wLHhtbTAJCQk7IHhtbTA9KCoqKjQqKio1KioqNioqKjcpCisJcHVucGNrbHdkIHhtbTMseG1tMQkJCTsgeG1tMz0oKioqOCoqKjkqKipBKioqQikKKwlwdW5wY2tod2QgeG1tMSx4bW0xCQkJOyB4bW0xPSgqKipDKioqRCoqKkUqKipGKQorCisJcHNyYWQgICAgIHhtbTIsKERXT1JEX0JJVC1CWVRFX0JJVCkJOyB4bW0yPSgwMTIzKQorCXBzcmFkICAgICB4bW0wLChEV09SRF9CSVQtQllURV9CSVQpCTsgeG1tMD0oNDU2NykKKwljdnRkcTJwcyAgeG1tMix4bW0yCQkJOyB4bW0yPSgwMTIzKQorCWN2dGRxMnBzICB4bW0wLHhtbTAJCQk7IHhtbTA9KDQ1NjcpCisJcHNyYWQgICAgIHhtbTMsKERXT1JEX0JJVC1CWVRFX0JJVCkJOyB4bW0zPSg4OUFCKQorCXBzcmFkICAgICB4bW0xLChEV09SRF9CSVQtQllURV9CSVQpCTsgeG1tMT0oQ0RFRikKKwljdnRkcTJwcyAgeG1tMyx4bW0zCQkJOyB4bW0zPSg4OUFCKQorCWN2dGRxMnBzICB4bW0xLHhtbTEJCQk7IHhtbTE9KENERUYpCisKKwltb3ZhcHMJWE1NV09SRCBbWE1NQkxPQ0soMCwwLHJkaSxTSVpFT0ZfRkFTVF9GTE9BVCldLCB4bW0yCisJbW92YXBzCVhNTVdPUkQgW1hNTUJMT0NLKDAsMSxyZGksU0laRU9GX0ZBU1RfRkxPQVQpXSwgeG1tMAorCW1vdmFwcwlYTU1XT1JEIFtYTU1CTE9DSygxLDAscmRpLFNJWkVPRl9GQVNUX0ZMT0FUKV0sIHhtbTMKKwltb3ZhcHMJWE1NV09SRCBbWE1NQkxPQ0soMSwxLHJkaSxTSVpFT0ZfRkFTVF9GTE9BVCldLCB4bW0xCisKKwlhZGQJcnNpLCBieXRlIDIqU0laRU9GX0pTQU1QUk9XCisJYWRkCXJkaSwgYnl0ZSAyKkRDVFNJWkUqU0laRU9GX0ZBU1RfRkxPQVQKKwlkZWMJcmN4CisJam56CXNob3J0IC5jb252bG9vcAorCisJcG9wCXJieAorCXVuY29sbGVjdF9hcmdzCisJcG9wCXJicAorCXJldAorCisKKzsgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKzsKKzsgUXVhbnRpemUvZGVzY2FsZSB0aGUgY29lZmZpY2llbnRzLCBhbmQgc3RvcmUgaW50byBjb2VmX2Jsb2NrCis7Cis7IEdMT0JBTCh2b2lkKQorOyBqc2ltZF9xdWFudGl6ZV9mbG9hdF9zc2UyIChKQ09FRlBUUiBjb2VmX2Jsb2NrLCBGQVNUX0ZMT0FUICogZGl2aXNvcnMsCis7ICAgICAgICAgICAgICAgICAgICAgICAgIEZBU1RfRkxPQVQgKiB3b3Jrc3BhY2UpOworOworCis7IHIxMCA9IEpDT0VGUFRSIGNvZWZfYmxvY2sKKzsgcjExID0gRkFTVF9GTE9BVCAqIGRpdmlzb3JzCis7IHIxMiA9IEZBU1RfRkxPQVQgKiB3b3Jrc3BhY2UKKworCWFsaWduCTE2CisJZ2xvYmFsCUVYVE4oanNpbWRfcXVhbnRpemVfZmxvYXRfc3NlMikKKworRVhUTihqc2ltZF9xdWFudGl6ZV9mbG9hdF9zc2UyKToKKwlwdXNoCXJicAorCW1vdglyYXgscnNwCisJbW92CXJicCxyc3AKKwljb2xsZWN0X2FyZ3MKKworCW1vdiByc2ksIHIxMgorCW1vdiByZHgsIHIxMQorCW1vdiByZGksIHIxMAorCW1vdglyYXgsIERDVFNJWkUyLzE2CisucXVhbnRsb29wOgorCW1vdmFwcwl4bW0wLCBYTU1XT1JEIFtYTU1CTE9DSygwLDAscnNpLFNJWkVPRl9GQVNUX0ZMT0FUKV0KKwltb3ZhcHMJeG1tMSwgWE1NV09SRCBbWE1NQkxPQ0soMCwxLHJzaSxTSVpFT0ZfRkFTVF9GTE9BVCldCisJbXVscHMJeG1tMCwgWE1NV09SRCBbWE1NQkxPQ0soMCwwLHJkeCxTSVpFT0ZfRkFTVF9GTE9BVCldCisJbXVscHMJeG1tMSwgWE1NV09SRCBbWE1NQkxPQ0soMCwxLHJkeCxTSVpFT0ZfRkFTVF9GTE9BVCldCisJbW92YXBzCXhtbTIsIFhNTVdPUkQgW1hNTUJMT0NLKDEsMCxyc2ksU0laRU9GX0ZBU1RfRkxPQVQpXQorCW1vdmFwcwl4bW0zLCBYTU1XT1JEIFtYTU1CTE9DSygxLDEscnNpLFNJWkVPRl9GQVNUX0ZMT0FUKV0KKwltdWxwcwl4bW0yLCBYTU1XT1JEIFtYTU1CTE9DSygxLDAscmR4LFNJWkVPRl9GQVNUX0ZMT0FUKV0KKwltdWxwcwl4bW0zLCBYTU1XT1JEIFtYTU1CTE9DSygxLDEscmR4LFNJWkVPRl9GQVNUX0ZMT0FUKV0KKworCWN2dHBzMmRxIHhtbTAseG1tMAorCWN2dHBzMmRxIHhtbTEseG1tMQorCWN2dHBzMmRxIHhtbTIseG1tMgorCWN2dHBzMmRxIHhtbTMseG1tMworCisJcGFja3NzZHcgeG1tMCx4bW0xCisJcGFja3NzZHcgeG1tMix4bW0zCisKKwltb3ZkcWEJWE1NV09SRCBbWE1NQkxPQ0soMCwwLHJkaSxTSVpFT0ZfSkNPRUYpXSwgeG1tMAorCW1vdmRxYQlYTU1XT1JEIFtYTU1CTE9DSygxLDAscmRpLFNJWkVPRl9KQ09FRildLCB4bW0yCisKKwlhZGQJcnNpLCBieXRlIDE2KlNJWkVPRl9GQVNUX0ZMT0FUCisJYWRkCXJkeCwgYnl0ZSAxNipTSVpFT0ZfRkFTVF9GTE9BVAorCWFkZAlyZGksIGJ5dGUgMTYqU0laRU9GX0pDT0VGCisJZGVjCXJheAorCWpueglzaG9ydCAucXVhbnRsb29wCisKKwl1bmNvbGxlY3RfYXJncworCXBvcAlyYnAKKwlyZXQKKworOyBGb3Igc29tZSByZWFzb24sIHRoZSBPUyBYIGxpbmtlciBkb2VzIG5vdCBob25vciB0aGUgcmVxdWVzdCB0byBhbGlnbiB0aGUKKzsgc2VnbWVudCB1bmxlc3Mgd2UgZG8gdGhpcy4KKwlhbGlnbgkxNgpkaWZmIC0tZ2l0IGEvc2ltZC9qY3FudHMyZi5hc20gYi9zaW1kL2pjcW50czJmLmFzbQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kODBhZTVkCi0tLSAvZGV2L251bGwKKysrIGIvc2ltZC9qY3FudHMyZi5hc20KQEAgLTAsMCArMSwxNzEgQEAKKzsKKzsgamNxbnRzMmYuYXNtIC0gc2FtcGxlIGRhdGEgY29udmVyc2lvbiBhbmQgcXVhbnRpemF0aW9uIChTU0UgJiBTU0UyKQorOworOyBDb3B5cmlnaHQgMjAwOSBQaWVycmUgT3NzbWFuIDxvc3NtYW5AY2VuZGlvLnNlPiBmb3IgQ2VuZGlvIEFCCis7Cis7IEJhc2VkIG9uCis7IHg4NiBTSU1EIGV4dGVuc2lvbiBmb3IgSUpHIEpQRUcgbGlicmFyeQorOyBDb3B5cmlnaHQgKEMpIDE5OTktMjAwNiwgTUlZQVNBS0EgTWFzYXJ1LgorOyBGb3IgY29uZGl0aW9ucyBvZiBkaXN0cmlidXRpb24gYW5kIHVzZSwgc2VlIGNvcHlyaWdodCBub3RpY2UgaW4ganNpbWRleHQuaW5jCis7Cis7IFRoaXMgZmlsZSBzaG91bGQgYmUgYXNzZW1ibGVkIHdpdGggTkFTTSAoTmV0d2lkZSBBc3NlbWJsZXIpLAorOyBjYW4gKm5vdCogYmUgYXNzZW1ibGVkIHdpdGggTWljcm9zb2Z0J3MgTUFTTSBvciBhbnkgY29tcGF0aWJsZQorOyBhc3NlbWJsZXIgKGluY2x1ZGluZyBCb3JsYW5kJ3MgVHVyYm8gQXNzZW1ibGVyKS4KKzsgTkFTTSBpcyBhdmFpbGFibGUgZnJvbSBodHRwOi8vbmFzbS5zb3VyY2Vmb3JnZS5uZXQvIG9yCis7IGh0dHA6Ly9zb3VyY2Vmb3JnZS5uZXQvcHJvamVjdC9zaG93ZmlsZXMucGhwP2dyb3VwX2lkPTYyMDgKKzsKKzsgW1RBQjhdCisKKyVpbmNsdWRlICJqc2ltZGV4dC5pbmMiCislaW5jbHVkZSAiamRjdC5pbmMiCisKKzsgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKwlTRUNUSU9OCVNFR19URVhUCisJQklUUwkzMgorOworOyBMb2FkIGRhdGEgaW50byB3b3Jrc3BhY2UsIGFwcGx5aW5nIHVuc2lnbmVkLT5zaWduZWQgY29udmVyc2lvbgorOworOyBHTE9CQUwodm9pZCkKKzsganNpbWRfY29udnNhbXBfZmxvYXRfc3NlMiAoSlNBTVBBUlJBWSBzYW1wbGVfZGF0YSwgSkRJTUVOU0lPTiBzdGFydF9jb2wsCis7ICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZBU1RfRkxPQVQgKiB3b3Jrc3BhY2UpOworOworCislZGVmaW5lIHNhbXBsZV9kYXRhCWVicCs4CQk7IEpTQU1QQVJSQVkgc2FtcGxlX2RhdGEKKyVkZWZpbmUgc3RhcnRfY29sCWVicCsxMgkJOyBKRElNRU5TSU9OIHN0YXJ0X2NvbAorJWRlZmluZSB3b3Jrc3BhY2UJZWJwKzE2CQk7IEZBU1RfRkxPQVQgKiB3b3Jrc3BhY2UKKworCWFsaWduCTE2CisJZ2xvYmFsCUVYVE4oanNpbWRfY29udnNhbXBfZmxvYXRfc3NlMikKKworRVhUTihqc2ltZF9jb252c2FtcF9mbG9hdF9zc2UyKToKKwlwdXNoCWVicAorCW1vdgllYnAsZXNwCisJcHVzaAllYngKKzsJcHVzaAllY3gJCTsgbmVlZCBub3QgYmUgcHJlc2VydmVkCis7CXB1c2gJZWR4CQk7IG5lZWQgbm90IGJlIHByZXNlcnZlZAorCXB1c2gJZXNpCisJcHVzaAllZGkKKworCXBjbXBlcXcgIHhtbTcseG1tNworCXBzbGx3ICAgIHhtbTcsNworCXBhY2tzc3diIHhtbTcseG1tNwkJOyB4bW03ID0gUEJfQ0VOVEVSSlNBTVBMRSAoMHg4MDgwODAuLikKKworCW1vdgllc2ksIEpTQU1QQVJSQVkgW3NhbXBsZV9kYXRhXQk7IChKU0FNUFJPVyAqKQorCW1vdgllYXgsIEpESU1FTlNJT04gW3N0YXJ0X2NvbF0KKwltb3YJZWRpLCBQT0lOVEVSIFt3b3Jrc3BhY2VdCTsgKERDVEVMRU0gKikKKwltb3YJZWN4LCBEQ1RTSVpFLzIKKwlhbGlnbngJMTYsNworLmNvbnZsb29wOgorCW1vdgllYngsIEpTQU1QUk9XIFtlc2krMCpTSVpFT0ZfSlNBTVBST1ddCTsgKEpTQU1QTEUgKikKKwltb3YJZWR4LCBKU0FNUFJPVyBbZXNpKzEqU0laRU9GX0pTQU1QUk9XXQk7IChKU0FNUExFICopCisKKwltb3ZxCXhtbTAsIFhNTV9NTVdPUkQgW2VieCtlYXgqU0laRU9GX0pTQU1QTEVdCisJbW92cQl4bW0xLCBYTU1fTU1XT1JEIFtlZHgrZWF4KlNJWkVPRl9KU0FNUExFXQorCisJcHN1YmIJeG1tMCx4bW03CQkJOyB4bW0wPSgwMTIzNDU2NykKKwlwc3ViYgl4bW0xLHhtbTcJCQk7IHhtbTE9KDg5QUJDREVGKQorCisJcHVucGNrbGJ3IHhtbTAseG1tMAkJCTsgeG1tMD0oKjAqMSoyKjMqNCo1KjYqNykKKwlwdW5wY2tsYncgeG1tMSx4bW0xCQkJOyB4bW0xPSgqOCo5KkEqQipDKkQqRSpGKQorCisJcHVucGNrbHdkIHhtbTIseG1tMAkJCTsgeG1tMj0oKioqMCoqKjEqKioyKioqMykKKwlwdW5wY2tod2QgeG1tMCx4bW0wCQkJOyB4bW0wPSgqKio0KioqNSoqKjYqKio3KQorCXB1bnBja2x3ZCB4bW0zLHhtbTEJCQk7IHhtbTM9KCoqKjgqKio5KioqQSoqKkIpCisJcHVucGNraHdkIHhtbTEseG1tMQkJCTsgeG1tMT0oKioqQyoqKkQqKipFKioqRikKKworCXBzcmFkICAgICB4bW0yLChEV09SRF9CSVQtQllURV9CSVQpCTsgeG1tMj0oMDEyMykKKwlwc3JhZCAgICAgeG1tMCwoRFdPUkRfQklULUJZVEVfQklUKQk7IHhtbTA9KDQ1NjcpCisJY3Z0ZHEycHMgIHhtbTIseG1tMgkJCTsgeG1tMj0oMDEyMykKKwljdnRkcTJwcyAgeG1tMCx4bW0wCQkJOyB4bW0wPSg0NTY3KQorCXBzcmFkICAgICB4bW0zLChEV09SRF9CSVQtQllURV9CSVQpCTsgeG1tMz0oODlBQikKKwlwc3JhZCAgICAgeG1tMSwoRFdPUkRfQklULUJZVEVfQklUKQk7IHhtbTE9KENERUYpCisJY3Z0ZHEycHMgIHhtbTMseG1tMwkJCTsgeG1tMz0oODlBQikKKwljdnRkcTJwcyAgeG1tMSx4bW0xCQkJOyB4bW0xPShDREVGKQorCisJbW92YXBzCVhNTVdPUkQgW1hNTUJMT0NLKDAsMCxlZGksU0laRU9GX0ZBU1RfRkxPQVQpXSwgeG1tMgorCW1vdmFwcwlYTU1XT1JEIFtYTU1CTE9DSygwLDEsZWRpLFNJWkVPRl9GQVNUX0ZMT0FUKV0sIHhtbTAKKwltb3ZhcHMJWE1NV09SRCBbWE1NQkxPQ0soMSwwLGVkaSxTSVpFT0ZfRkFTVF9GTE9BVCldLCB4bW0zCisJbW92YXBzCVhNTVdPUkQgW1hNTUJMT0NLKDEsMSxlZGksU0laRU9GX0ZBU1RfRkxPQVQpXSwgeG1tMQorCisJYWRkCWVzaSwgYnl0ZSAyKlNJWkVPRl9KU0FNUFJPVworCWFkZAllZGksIGJ5dGUgMipEQ1RTSVpFKlNJWkVPRl9GQVNUX0ZMT0FUCisJZGVjCWVjeAorCWpueglzaG9ydCAuY29udmxvb3AKKworCXBvcAllZGkKKwlwb3AJZXNpCis7CXBvcAllZHgJCTsgbmVlZCBub3QgYmUgcHJlc2VydmVkCis7CXBvcAllY3gJCTsgbmVlZCBub3QgYmUgcHJlc2VydmVkCisJcG9wCWVieAorCXBvcAllYnAKKwlyZXQKKworCis7IC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCis7Cis7IFF1YW50aXplL2Rlc2NhbGUgdGhlIGNvZWZmaWNpZW50cywgYW5kIHN0b3JlIGludG8gY29lZl9ibG9jaworOworOyBHTE9CQUwodm9pZCkKKzsganNpbWRfcXVhbnRpemVfZmxvYXRfc3NlMiAoSkNPRUZQVFIgY29lZl9ibG9jaywgRkFTVF9GTE9BVCAqIGRpdmlzb3JzLAorOyAgICAgICAgICAgICAgICAgICAgICAgICBGQVNUX0ZMT0FUICogd29ya3NwYWNlKTsKKzsKKworJWRlZmluZSBjb2VmX2Jsb2NrCWVicCs4CQk7IEpDT0VGUFRSIGNvZWZfYmxvY2sKKyVkZWZpbmUgZGl2aXNvcnMJZWJwKzEyCQk7IEZBU1RfRkxPQVQgKiBkaXZpc29ycworJWRlZmluZSB3b3Jrc3BhY2UJZWJwKzE2CQk7IEZBU1RfRkxPQVQgKiB3b3Jrc3BhY2UKKworCWFsaWduCTE2CisJZ2xvYmFsCUVYVE4oanNpbWRfcXVhbnRpemVfZmxvYXRfc3NlMikKKworRVhUTihqc2ltZF9xdWFudGl6ZV9mbG9hdF9zc2UyKToKKwlwdXNoCWVicAorCW1vdgllYnAsZXNwCis7CXB1c2gJZWJ4CQk7IHVudXNlZAorOwlwdXNoCWVjeAkJOyB1bnVzZWQKKzsJcHVzaAllZHgJCTsgbmVlZCBub3QgYmUgcHJlc2VydmVkCisJcHVzaAllc2kKKwlwdXNoCWVkaQorCisJbW92CWVzaSwgUE9JTlRFUiBbd29ya3NwYWNlXQorCW1vdgllZHgsIFBPSU5URVIgW2Rpdmlzb3JzXQorCW1vdgllZGksIEpDT0VGUFRSIFtjb2VmX2Jsb2NrXQorCW1vdgllYXgsIERDVFNJWkUyLzE2CisJYWxpZ254CTE2LDcKKy5xdWFudGxvb3A6CisJbW92YXBzCXhtbTAsIFhNTVdPUkQgW1hNTUJMT0NLKDAsMCxlc2ksU0laRU9GX0ZBU1RfRkxPQVQpXQorCW1vdmFwcwl4bW0xLCBYTU1XT1JEIFtYTU1CTE9DSygwLDEsZXNpLFNJWkVPRl9GQVNUX0ZMT0FUKV0KKwltdWxwcwl4bW0wLCBYTU1XT1JEIFtYTU1CTE9DSygwLDAsZWR4LFNJWkVPRl9GQVNUX0ZMT0FUKV0KKwltdWxwcwl4bW0xLCBYTU1XT1JEIFtYTU1CTE9DSygwLDEsZWR4LFNJWkVPRl9GQVNUX0ZMT0FUKV0KKwltb3ZhcHMJeG1tMiwgWE1NV09SRCBbWE1NQkxPQ0soMSwwLGVzaSxTSVpFT0ZfRkFTVF9GTE9BVCldCisJbW92YXBzCXhtbTMsIFhNTVdPUkQgW1hNTUJMT0NLKDEsMSxlc2ksU0laRU9GX0ZBU1RfRkxPQVQpXQorCW11bHBzCXhtbTIsIFhNTVdPUkQgW1hNTUJMT0NLKDEsMCxlZHgsU0laRU9GX0ZBU1RfRkxPQVQpXQorCW11bHBzCXhtbTMsIFhNTVdPUkQgW1hNTUJMT0NLKDEsMSxlZHgsU0laRU9GX0ZBU1RfRkxPQVQpXQorCisJY3Z0cHMyZHEgeG1tMCx4bW0wCisJY3Z0cHMyZHEgeG1tMSx4bW0xCisJY3Z0cHMyZHEgeG1tMix4bW0yCisJY3Z0cHMyZHEgeG1tMyx4bW0zCisKKwlwYWNrc3NkdyB4bW0wLHhtbTEKKwlwYWNrc3NkdyB4bW0yLHhtbTMKKworCW1vdmRxYQlYTU1XT1JEIFtYTU1CTE9DSygwLDAsZWRpLFNJWkVPRl9KQ09FRildLCB4bW0wCisJbW92ZHFhCVhNTVdPUkQgW1hNTUJMT0NLKDEsMCxlZGksU0laRU9GX0pDT0VGKV0sIHhtbTIKKworCWFkZAllc2ksIGJ5dGUgMTYqU0laRU9GX0ZBU1RfRkxPQVQKKwlhZGQJZWR4LCBieXRlIDE2KlNJWkVPRl9GQVNUX0ZMT0FUCisJYWRkCWVkaSwgYnl0ZSAxNipTSVpFT0ZfSkNPRUYKKwlkZWMJZWF4CisJam56CXNob3J0IC5xdWFudGxvb3AKKworCXBvcAllZGkKKwlwb3AJZXNpCis7CXBvcAllZHgJCTsgbmVlZCBub3QgYmUgcHJlc2VydmVkCis7CXBvcAllY3gJCTsgdW51c2VkCis7CXBvcAllYngJCTsgdW51c2VkCisJcG9wCWVicAorCXJldAorCis7IEZvciBzb21lIHJlYXNvbiwgdGhlIE9TIFggbGlua2VyIGRvZXMgbm90IGhvbm9yIHRoZSByZXF1ZXN0IHRvIGFsaWduIHRoZQorOyBzZWdtZW50IHVubGVzcyB3ZSBkbyB0aGlzLgorCWFsaWduCTE2CmRpZmYgLS1naXQgYS9zaW1kL2pjcW50czJpLTY0LmFzbSBiL3NpbWQvamNxbnRzMmktNjQuYXNtCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmNjMzNkNTkKLS0tIC9kZXYvbnVsbAorKysgYi9zaW1kL2pjcW50czJpLTY0LmFzbQpAQCAtMCwwICsxLDE4NyBAQAorOworOyBqY3FudHMyaS02NC5hc20gLSBzYW1wbGUgZGF0YSBjb252ZXJzaW9uIGFuZCBxdWFudGl6YXRpb24gKDY0LWJpdCBTU0UyKQorOworOyBDb3B5cmlnaHQgMjAwOSBQaWVycmUgT3NzbWFuIDxvc3NtYW5AY2VuZGlvLnNlPiBmb3IgQ2VuZGlvIEFCCis7IENvcHlyaWdodCAyMDA5IEQuIFIuIENvbW1hbmRlcgorOworOyBCYXNlZCBvbgorOyB4ODYgU0lNRCBleHRlbnNpb24gZm9yIElKRyBKUEVHIGxpYnJhcnkKKzsgQ29weXJpZ2h0IChDKSAxOTk5LTIwMDYsIE1JWUFTQUtBIE1hc2FydS4KKzsgRm9yIGNvbmRpdGlvbnMgb2YgZGlzdHJpYnV0aW9uIGFuZCB1c2UsIHNlZSBjb3B5cmlnaHQgbm90aWNlIGluIGpzaW1kZXh0LmluYworOworOyBUaGlzIGZpbGUgc2hvdWxkIGJlIGFzc2VtYmxlZCB3aXRoIE5BU00gKE5ldHdpZGUgQXNzZW1ibGVyKSwKKzsgY2FuICpub3QqIGJlIGFzc2VtYmxlZCB3aXRoIE1pY3Jvc29mdCdzIE1BU00gb3IgYW55IGNvbXBhdGlibGUKKzsgYXNzZW1ibGVyIChpbmNsdWRpbmcgQm9ybGFuZCdzIFR1cmJvIEFzc2VtYmxlcikuCis7IE5BU00gaXMgYXZhaWxhYmxlIGZyb20gaHR0cDovL25hc20uc291cmNlZm9yZ2UubmV0LyBvcgorOyBodHRwOi8vc291cmNlZm9yZ2UubmV0L3Byb2plY3Qvc2hvd2ZpbGVzLnBocD9ncm91cF9pZD02MjA4Cis7Cis7IFtUQUI4XQorCislaW5jbHVkZSAianNpbWRleHQuaW5jIgorJWluY2x1ZGUgImpkY3QuaW5jIgorCis7IC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisJU0VDVElPTglTRUdfVEVYVAorCUJJVFMJNjQKKzsKKzsgTG9hZCBkYXRhIGludG8gd29ya3NwYWNlLCBhcHBseWluZyB1bnNpZ25lZC0+c2lnbmVkIGNvbnZlcnNpb24KKzsKKzsgR0xPQkFMKHZvaWQpCis7IGpzaW1kX2NvbnZzYW1wX3NzZTIgKEpTQU1QQVJSQVkgc2FtcGxlX2RhdGEsIEpESU1FTlNJT04gc3RhcnRfY29sLAorOyAgICAgICAgICAgICAgICAgICAgICBEQ1RFTEVNICogd29ya3NwYWNlKTsKKzsKKworOyByMTAgPSBKU0FNUEFSUkFZIHNhbXBsZV9kYXRhCis7IHIxMSA9IEpESU1FTlNJT04gc3RhcnRfY29sCis7IHIxMiA9IERDVEVMRU0gKiB3b3Jrc3BhY2UKKworCWFsaWduCTE2CisJZ2xvYmFsCUVYVE4oanNpbWRfY29udnNhbXBfc3NlMikKKworRVhUTihqc2ltZF9jb252c2FtcF9zc2UyKToKKwlwdXNoCXJicAorCW1vdglyYXgscnNwCisJbW92CXJicCxyc3AKKwljb2xsZWN0X2FyZ3MKKwlwdXNoCXJieAorCisJcHhvcgl4bW02LHhtbTYJCTsgeG1tNj0oYWxsIDAncykKKwlwY21wZXF3CXhtbTcseG1tNworCXBzbGx3CXhtbTcsNwkJCTsgeG1tNz17MHhGRjgwIDB4RkY4MCAweEZGODAgMHhGRjgwIC4ufQorCisJbW92IHJzaSwgcjEwCisJbW92IHJheCwgcjExCisJbW92IHJkaSwgcjEyCisJbW92CXJjeCwgRENUU0laRS80CisuY29udmxvb3A6CisJbW92CXJieCwgSlNBTVBST1cgW3JzaSswKlNJWkVPRl9KU0FNUFJPV10JOyAoSlNBTVBMRSAqKQorCW1vdiByZHgsIEpTQU1QUk9XIFtyc2krMSpTSVpFT0ZfSlNBTVBST1ddCTsgKEpTQU1QTEUgKikKKworCW1vdnEJeG1tMCwgWE1NX01NV09SRCBbcmJ4K3JheCpTSVpFT0ZfSlNBTVBMRV0JOyB4bW0wPSgwMTIzNDU2NykKKwltb3ZxCXhtbTEsIFhNTV9NTVdPUkQgW3JkeCtyYXgqU0laRU9GX0pTQU1QTEVdCTsgeG1tMT0oODlBQkNERUYpCisKKwltb3YJcmJ4LCBKU0FNUFJPVyBbcnNpKzIqU0laRU9GX0pTQU1QUk9XXQk7IChKU0FNUExFICopCisJbW92CXJkeCwgSlNBTVBST1cgW3JzaSszKlNJWkVPRl9KU0FNUFJPV10JOyAoSlNBTVBMRSAqKQorCisJbW92cQl4bW0yLCBYTU1fTU1XT1JEIFtyYngrcmF4KlNJWkVPRl9KU0FNUExFXQk7IHhtbTI9KEdISUpLTE1OKQorCW1vdnEJeG1tMywgWE1NX01NV09SRCBbcmR4K3JheCpTSVpFT0ZfSlNBTVBMRV0JOyB4bW0zPShPUFFSU1RVVikKKworCXB1bnBja2xidyB4bW0wLHhtbTYJCTsgeG1tMD0oMDEyMzQ1NjcpCisJcHVucGNrbGJ3IHhtbTEseG1tNgkJOyB4bW0xPSg4OUFCQ0RFRikKKwlwYWRkdyAgICAgeG1tMCx4bW03CisJcGFkZHcgICAgIHhtbTEseG1tNworCXB1bnBja2xidyB4bW0yLHhtbTYJCTsgeG1tMj0oR0hJSktMTU4pCisJcHVucGNrbGJ3IHhtbTMseG1tNgkJOyB4bW0zPShPUFFSU1RVVikKKwlwYWRkdyAgICAgeG1tMix4bW03CisJcGFkZHcgICAgIHhtbTMseG1tNworCisJbW92ZHFhCVhNTVdPUkQgW1hNTUJMT0NLKDAsMCxyZGksU0laRU9GX0RDVEVMRU0pXSwgeG1tMAorCW1vdmRxYQlYTU1XT1JEIFtYTU1CTE9DSygxLDAscmRpLFNJWkVPRl9EQ1RFTEVNKV0sIHhtbTEKKwltb3ZkcWEJWE1NV09SRCBbWE1NQkxPQ0soMiwwLHJkaSxTSVpFT0ZfRENURUxFTSldLCB4bW0yCisJbW92ZHFhCVhNTVdPUkQgW1hNTUJMT0NLKDMsMCxyZGksU0laRU9GX0RDVEVMRU0pXSwgeG1tMworCisJYWRkCXJzaSwgYnl0ZSA0KlNJWkVPRl9KU0FNUFJPVworCWFkZAlyZGksIGJ5dGUgNCpEQ1RTSVpFKlNJWkVPRl9EQ1RFTEVNCisJZGVjCXJjeAorCWpueglzaG9ydCAuY29udmxvb3AKKworCXBvcAlyYngKKwl1bmNvbGxlY3RfYXJncworCXBvcAlyYnAKKwlyZXQKKworOyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorOworOyBRdWFudGl6ZS9kZXNjYWxlIHRoZSBjb2VmZmljaWVudHMsIGFuZCBzdG9yZSBpbnRvIGNvZWZfYmxvY2sKKzsKKzsgVGhpcyBpbXBsZW1lbnRhdGlvbiBpcyBiYXNlZCBvbiBhbiBhbGdvcml0aG0gZGVzY3JpYmVkIGluCis7ICAgIkhvdyB0byBvcHRpbWl6ZSBmb3IgdGhlIFBlbnRpdW0gZmFtaWx5IG9mIG1pY3JvcHJvY2Vzc29ycyIKKzsgICAoaHR0cDovL3d3dy5hZ25lci5vcmcvYXNzZW0vKS4KKzsKKzsgR0xPQkFMKHZvaWQpCis7IGpzaW1kX3F1YW50aXplX3NzZTIgKEpDT0VGUFRSIGNvZWZfYmxvY2ssIERDVEVMRU0gKiBkaXZpc29ycywKKzsgICAgICAgICAgICAgICAgICAgICAgRENURUxFTSAqIHdvcmtzcGFjZSk7Cis7CisKKyVkZWZpbmUgUkVDSVBST0NBTChtLG4sYikgWE1NQkxPQ0soRENUU0laRSowKyhtKSwobiksKGIpLFNJWkVPRl9EQ1RFTEVNKQorJWRlZmluZSBDT1JSRUNUSU9OKG0sbixiKSBYTU1CTE9DSyhEQ1RTSVpFKjErKG0pLChuKSwoYiksU0laRU9GX0RDVEVMRU0pCislZGVmaW5lIFNDQUxFKG0sbixiKSAgICAgIFhNTUJMT0NLKERDVFNJWkUqMisobSksKG4pLChiKSxTSVpFT0ZfRENURUxFTSkKKworOyByMTAgPSBKQ09FRlBUUiBjb2VmX2Jsb2NrCis7IHIxMSA9IERDVEVMRU0gKiBkaXZpc29ycworOyByMTIgPSBEQ1RFTEVNICogd29ya3NwYWNlCisKKwlhbGlnbgkxNgorCWdsb2JhbAlFWFROKGpzaW1kX3F1YW50aXplX3NzZTIpCisKK0VYVE4oanNpbWRfcXVhbnRpemVfc3NlMik6CisJcHVzaAlyYnAKKwltb3YJcmF4LHJzcAorCW1vdglyYnAscnNwCisJY29sbGVjdF9hcmdzCisKKwltb3YgcnNpLCByMTIKKwltb3YgcmR4LCByMTEKKwltb3YgcmRpLCByMTAKKwltb3YJcmF4LCBEQ1RTSVpFMi8zMgorLnF1YW50bG9vcDoKKwltb3ZkcWEJeG1tNCwgWE1NV09SRCBbWE1NQkxPQ0soMCwwLHJzaSxTSVpFT0ZfRENURUxFTSldCisJbW92ZHFhCXhtbTUsIFhNTVdPUkQgW1hNTUJMT0NLKDEsMCxyc2ksU0laRU9GX0RDVEVMRU0pXQorCW1vdmRxYQl4bW02LCBYTU1XT1JEIFtYTU1CTE9DSygyLDAscnNpLFNJWkVPRl9EQ1RFTEVNKV0KKwltb3ZkcWEJeG1tNywgWE1NV09SRCBbWE1NQkxPQ0soMywwLHJzaSxTSVpFT0ZfRENURUxFTSldCisJbW92ZHFhCXhtbTAseG1tNAorCW1vdmRxYQl4bW0xLHhtbTUKKwltb3ZkcWEJeG1tMix4bW02CisJbW92ZHFhCXhtbTMseG1tNworCXBzcmF3CXhtbTQsKFdPUkRfQklULTEpCisJcHNyYXcJeG1tNSwoV09SRF9CSVQtMSkKKwlwc3Jhdwl4bW02LChXT1JEX0JJVC0xKQorCXBzcmF3CXhtbTcsKFdPUkRfQklULTEpCisJcHhvcgl4bW0wLHhtbTQKKwlweG9yCXhtbTEseG1tNQorCXB4b3IJeG1tMix4bW02CisJcHhvcgl4bW0zLHhtbTcKKwlwc3Vidwl4bW0wLHhtbTQJCTsgaWYgKHhtbTAgPCAwKSB4bW0wID0gLXhtbTA7CisJcHN1YncJeG1tMSx4bW01CQk7IGlmICh4bW0xIDwgMCkgeG1tMSA9IC14bW0xOworCXBzdWJ3CXhtbTIseG1tNgkJOyBpZiAoeG1tMiA8IDApIHhtbTIgPSAteG1tMjsKKwlwc3Vidwl4bW0zLHhtbTcJCTsgaWYgKHhtbTMgPCAwKSB4bW0zID0gLXhtbTM7CisKKwlwYWRkdwl4bW0wLCBYTU1XT1JEIFtDT1JSRUNUSU9OKDAsMCxyZHgpXSAgOyBjb3JyZWN0aW9uICsgcm91bmRmYWN0b3IKKwlwYWRkdwl4bW0xLCBYTU1XT1JEIFtDT1JSRUNUSU9OKDEsMCxyZHgpXQorCXBhZGR3CXhtbTIsIFhNTVdPUkQgW0NPUlJFQ1RJT04oMiwwLHJkeCldCisJcGFkZHcJeG1tMywgWE1NV09SRCBbQ09SUkVDVElPTigzLDAscmR4KV0KKwlwbXVsaHV3CXhtbTAsIFhNTVdPUkQgW1JFQ0lQUk9DQUwoMCwwLHJkeCldICA7IHJlY2lwcm9jYWwKKwlwbXVsaHV3CXhtbTEsIFhNTVdPUkQgW1JFQ0lQUk9DQUwoMSwwLHJkeCldCisJcG11bGh1dwl4bW0yLCBYTU1XT1JEIFtSRUNJUFJPQ0FMKDIsMCxyZHgpXQorCXBtdWxodXcJeG1tMywgWE1NV09SRCBbUkVDSVBST0NBTCgzLDAscmR4KV0KKwlwbXVsaHV3CXhtbTAsIFhNTVdPUkQgW1NDQUxFKDAsMCxyZHgpXQk7IHNjYWxlCisJcG11bGh1dwl4bW0xLCBYTU1XT1JEIFtTQ0FMRSgxLDAscmR4KV0KKwlwbXVsaHV3CXhtbTIsIFhNTVdPUkQgW1NDQUxFKDIsMCxyZHgpXQorCXBtdWxodXcJeG1tMywgWE1NV09SRCBbU0NBTEUoMywwLHJkeCldCisKKwlweG9yCXhtbTAseG1tNAorCXB4b3IJeG1tMSx4bW01CisJcHhvcgl4bW0yLHhtbTYKKwlweG9yCXhtbTMseG1tNworCXBzdWJ3CXhtbTAseG1tNAorCXBzdWJ3CXhtbTEseG1tNQorCXBzdWJ3CXhtbTIseG1tNgorCXBzdWJ3CXhtbTMseG1tNworCW1vdmRxYQlYTU1XT1JEIFtYTU1CTE9DSygwLDAscmRpLFNJWkVPRl9EQ1RFTEVNKV0sIHhtbTAKKwltb3ZkcWEJWE1NV09SRCBbWE1NQkxPQ0soMSwwLHJkaSxTSVpFT0ZfRENURUxFTSldLCB4bW0xCisJbW92ZHFhCVhNTVdPUkQgW1hNTUJMT0NLKDIsMCxyZGksU0laRU9GX0RDVEVMRU0pXSwgeG1tMgorCW1vdmRxYQlYTU1XT1JEIFtYTU1CTE9DSygzLDAscmRpLFNJWkVPRl9EQ1RFTEVNKV0sIHhtbTMKKworCWFkZAlyc2ksIGJ5dGUgMzIqU0laRU9GX0RDVEVMRU0KKwlhZGQJcmR4LCBieXRlIDMyKlNJWkVPRl9EQ1RFTEVNCisJYWRkCXJkaSwgYnl0ZSAzMipTSVpFT0ZfSkNPRUYKKwlkZWMJcmF4CisJam56CW5lYXIgLnF1YW50bG9vcAorCisJdW5jb2xsZWN0X2FyZ3MKKwlwb3AJcmJwCisJcmV0CisKKzsgRm9yIHNvbWUgcmVhc29uLCB0aGUgT1MgWCBsaW5rZXIgZG9lcyBub3QgaG9ub3IgdGhlIHJlcXVlc3QgdG8gYWxpZ24gdGhlCis7IHNlZ21lbnQgdW5sZXNzIHdlIGRvIHRoaXMuCisJYWxpZ24JMTYKZGlmZiAtLWdpdCBhL3NpbWQvamNxbnRzMmkuYXNtIGIvc2ltZC9qY3FudHMyaS5hc20KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDg2NGQ2ZQotLS0gL2Rldi9udWxsCisrKyBiL3NpbWQvamNxbnRzMmkuYXNtCkBAIC0wLDAgKzEsMjAwIEBACis7Cis7IGpjcW50czJpLmFzbSAtIHNhbXBsZSBkYXRhIGNvbnZlcnNpb24gYW5kIHF1YW50aXphdGlvbiAoU1NFMikKKzsKKzsgQ29weXJpZ2h0IDIwMDkgUGllcnJlIE9zc21hbiA8b3NzbWFuQGNlbmRpby5zZT4gZm9yIENlbmRpbyBBQgorOworOyBCYXNlZCBvbgorOyB4ODYgU0lNRCBleHRlbnNpb24gZm9yIElKRyBKUEVHIGxpYnJhcnkKKzsgQ29weXJpZ2h0IChDKSAxOTk5LTIwMDYsIE1JWUFTQUtBIE1hc2FydS4KKzsgRm9yIGNvbmRpdGlvbnMgb2YgZGlzdHJpYnV0aW9uIGFuZCB1c2UsIHNlZSBjb3B5cmlnaHQgbm90aWNlIGluIGpzaW1kZXh0LmluYworOworOyBUaGlzIGZpbGUgc2hvdWxkIGJlIGFzc2VtYmxlZCB3aXRoIE5BU00gKE5ldHdpZGUgQXNzZW1ibGVyKSwKKzsgY2FuICpub3QqIGJlIGFzc2VtYmxlZCB3aXRoIE1pY3Jvc29mdCdzIE1BU00gb3IgYW55IGNvbXBhdGlibGUKKzsgYXNzZW1ibGVyIChpbmNsdWRpbmcgQm9ybGFuZCdzIFR1cmJvIEFzc2VtYmxlcikuCis7IE5BU00gaXMgYXZhaWxhYmxlIGZyb20gaHR0cDovL25hc20uc291cmNlZm9yZ2UubmV0LyBvcgorOyBodHRwOi8vc291cmNlZm9yZ2UubmV0L3Byb2plY3Qvc2hvd2ZpbGVzLnBocD9ncm91cF9pZD02MjA4Cis7Cis7IFtUQUI4XQorCislaW5jbHVkZSAianNpbWRleHQuaW5jIgorJWluY2x1ZGUgImpkY3QuaW5jIgorCis7IC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisJU0VDVElPTglTRUdfVEVYVAorCUJJVFMJMzIKKzsKKzsgTG9hZCBkYXRhIGludG8gd29ya3NwYWNlLCBhcHBseWluZyB1bnNpZ25lZC0+c2lnbmVkIGNvbnZlcnNpb24KKzsKKzsgR0xPQkFMKHZvaWQpCis7IGpzaW1kX2NvbnZzYW1wX3NzZTIgKEpTQU1QQVJSQVkgc2FtcGxlX2RhdGEsIEpESU1FTlNJT04gc3RhcnRfY29sLAorOyAgICAgICAgICAgICAgICAgICAgICBEQ1RFTEVNICogd29ya3NwYWNlKTsKKzsKKworJWRlZmluZSBzYW1wbGVfZGF0YQllYnArOAkJOyBKU0FNUEFSUkFZIHNhbXBsZV9kYXRhCislZGVmaW5lIHN0YXJ0X2NvbAllYnArMTIJCTsgSkRJTUVOU0lPTiBzdGFydF9jb2wKKyVkZWZpbmUgd29ya3NwYWNlCWVicCsxNgkJOyBEQ1RFTEVNICogd29ya3NwYWNlCisKKwlhbGlnbgkxNgorCWdsb2JhbAlFWFROKGpzaW1kX2NvbnZzYW1wX3NzZTIpCisKK0VYVE4oanNpbWRfY29udnNhbXBfc3NlMik6CisJcHVzaAllYnAKKwltb3YJZWJwLGVzcAorCXB1c2gJZWJ4Cis7CXB1c2gJZWN4CQk7IG5lZWQgbm90IGJlIHByZXNlcnZlZAorOwlwdXNoCWVkeAkJOyBuZWVkIG5vdCBiZSBwcmVzZXJ2ZWQKKwlwdXNoCWVzaQorCXB1c2gJZWRpCisKKwlweG9yCXhtbTYseG1tNgkJOyB4bW02PShhbGwgMCdzKQorCXBjbXBlcXcJeG1tNyx4bW03CisJcHNsbHcJeG1tNyw3CQkJOyB4bW03PXsweEZGODAgMHhGRjgwIDB4RkY4MCAweEZGODAgLi59CisKKwltb3YJZXNpLCBKU0FNUEFSUkFZIFtzYW1wbGVfZGF0YV0JOyAoSlNBTVBST1cgKikKKwltb3YJZWF4LCBKRElNRU5TSU9OIFtzdGFydF9jb2xdCisJbW92CWVkaSwgUE9JTlRFUiBbd29ya3NwYWNlXQk7IChEQ1RFTEVNICopCisJbW92CWVjeCwgRENUU0laRS80CisJYWxpZ254CTE2LDcKKy5jb252bG9vcDoKKwltb3YJZWJ4LCBKU0FNUFJPVyBbZXNpKzAqU0laRU9GX0pTQU1QUk9XXQk7IChKU0FNUExFICopCisJbW92CWVkeCwgSlNBTVBST1cgW2VzaSsxKlNJWkVPRl9KU0FNUFJPV10JOyAoSlNBTVBMRSAqKQorCisJbW92cQl4bW0wLCBYTU1fTU1XT1JEIFtlYngrZWF4KlNJWkVPRl9KU0FNUExFXQk7IHhtbTA9KDAxMjM0NTY3KQorCW1vdnEJeG1tMSwgWE1NX01NV09SRCBbZWR4K2VheCpTSVpFT0ZfSlNBTVBMRV0JOyB4bW0xPSg4OUFCQ0RFRikKKworCW1vdgllYngsIEpTQU1QUk9XIFtlc2krMipTSVpFT0ZfSlNBTVBST1ddCTsgKEpTQU1QTEUgKikKKwltb3YJZWR4LCBKU0FNUFJPVyBbZXNpKzMqU0laRU9GX0pTQU1QUk9XXQk7IChKU0FNUExFICopCisKKwltb3ZxCXhtbTIsIFhNTV9NTVdPUkQgW2VieCtlYXgqU0laRU9GX0pTQU1QTEVdCTsgeG1tMj0oR0hJSktMTU4pCisJbW92cQl4bW0zLCBYTU1fTU1XT1JEIFtlZHgrZWF4KlNJWkVPRl9KU0FNUExFXQk7IHhtbTM9KE9QUVJTVFVWKQorCisJcHVucGNrbGJ3IHhtbTAseG1tNgkJOyB4bW0wPSgwMTIzNDU2NykKKwlwdW5wY2tsYncgeG1tMSx4bW02CQk7IHhtbTE9KDg5QUJDREVGKQorCXBhZGR3ICAgICB4bW0wLHhtbTcKKwlwYWRkdyAgICAgeG1tMSx4bW03CisJcHVucGNrbGJ3IHhtbTIseG1tNgkJOyB4bW0yPShHSElKS0xNTikKKwlwdW5wY2tsYncgeG1tMyx4bW02CQk7IHhtbTM9KE9QUVJTVFVWKQorCXBhZGR3ICAgICB4bW0yLHhtbTcKKwlwYWRkdyAgICAgeG1tMyx4bW03CisKKwltb3ZkcWEJWE1NV09SRCBbWE1NQkxPQ0soMCwwLGVkaSxTSVpFT0ZfRENURUxFTSldLCB4bW0wCisJbW92ZHFhCVhNTVdPUkQgW1hNTUJMT0NLKDEsMCxlZGksU0laRU9GX0RDVEVMRU0pXSwgeG1tMQorCW1vdmRxYQlYTU1XT1JEIFtYTU1CTE9DSygyLDAsZWRpLFNJWkVPRl9EQ1RFTEVNKV0sIHhtbTIKKwltb3ZkcWEJWE1NV09SRCBbWE1NQkxPQ0soMywwLGVkaSxTSVpFT0ZfRENURUxFTSldLCB4bW0zCisKKwlhZGQJZXNpLCBieXRlIDQqU0laRU9GX0pTQU1QUk9XCisJYWRkCWVkaSwgYnl0ZSA0KkRDVFNJWkUqU0laRU9GX0RDVEVMRU0KKwlkZWMJZWN4CisJam56CXNob3J0IC5jb252bG9vcAorCisJcG9wCWVkaQorCXBvcAllc2kKKzsJcG9wCWVkeAkJOyBuZWVkIG5vdCBiZSBwcmVzZXJ2ZWQKKzsJcG9wCWVjeAkJOyBuZWVkIG5vdCBiZSBwcmVzZXJ2ZWQKKwlwb3AJZWJ4CisJcG9wCWVicAorCXJldAorCis7IC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCis7Cis7IFF1YW50aXplL2Rlc2NhbGUgdGhlIGNvZWZmaWNpZW50cywgYW5kIHN0b3JlIGludG8gY29lZl9ibG9jaworOworOyBUaGlzIGltcGxlbWVudGF0aW9uIGlzIGJhc2VkIG9uIGFuIGFsZ29yaXRobSBkZXNjcmliZWQgaW4KKzsgICAiSG93IHRvIG9wdGltaXplIGZvciB0aGUgUGVudGl1bSBmYW1pbHkgb2YgbWljcm9wcm9jZXNzb3JzIgorOyAgIChodHRwOi8vd3d3LmFnbmVyLm9yZy9hc3NlbS8pLgorOworOyBHTE9CQUwodm9pZCkKKzsganNpbWRfcXVhbnRpemVfc3NlMiAoSkNPRUZQVFIgY29lZl9ibG9jaywgRENURUxFTSAqIGRpdmlzb3JzLAorOyAgICAgICAgICAgICAgICAgICAgICBEQ1RFTEVNICogd29ya3NwYWNlKTsKKzsKKworJWRlZmluZSBSRUNJUFJPQ0FMKG0sbixiKSBYTU1CTE9DSyhEQ1RTSVpFKjArKG0pLChuKSwoYiksU0laRU9GX0RDVEVMRU0pCislZGVmaW5lIENPUlJFQ1RJT04obSxuLGIpIFhNTUJMT0NLKERDVFNJWkUqMSsobSksKG4pLChiKSxTSVpFT0ZfRENURUxFTSkKKyVkZWZpbmUgU0NBTEUobSxuLGIpICAgICAgWE1NQkxPQ0soRENUU0laRSoyKyhtKSwobiksKGIpLFNJWkVPRl9EQ1RFTEVNKQorCislZGVmaW5lIGNvZWZfYmxvY2sJZWJwKzgJCTsgSkNPRUZQVFIgY29lZl9ibG9jaworJWRlZmluZSBkaXZpc29ycwllYnArMTIJCTsgRENURUxFTSAqIGRpdmlzb3JzCislZGVmaW5lIHdvcmtzcGFjZQllYnArMTYJCTsgRENURUxFTSAqIHdvcmtzcGFjZQorCisJYWxpZ24JMTYKKwlnbG9iYWwJRVhUTihqc2ltZF9xdWFudGl6ZV9zc2UyKQorCitFWFROKGpzaW1kX3F1YW50aXplX3NzZTIpOgorCXB1c2gJZWJwCisJbW92CWVicCxlc3AKKzsJcHVzaAllYngJCTsgdW51c2VkCis7CXB1c2gJZWN4CQk7IHVudXNlZAorOwlwdXNoCWVkeAkJOyBuZWVkIG5vdCBiZSBwcmVzZXJ2ZWQKKwlwdXNoCWVzaQorCXB1c2gJZWRpCisKKwltb3YJZXNpLCBQT0lOVEVSIFt3b3Jrc3BhY2VdCisJbW92CWVkeCwgUE9JTlRFUiBbZGl2aXNvcnNdCisJbW92CWVkaSwgSkNPRUZQVFIgW2NvZWZfYmxvY2tdCisJbW92CWVheCwgRENUU0laRTIvMzIKKwlhbGlnbngJMTYsNworLnF1YW50bG9vcDoKKwltb3ZkcWEJeG1tNCwgWE1NV09SRCBbWE1NQkxPQ0soMCwwLGVzaSxTSVpFT0ZfRENURUxFTSldCisJbW92ZHFhCXhtbTUsIFhNTVdPUkQgW1hNTUJMT0NLKDEsMCxlc2ksU0laRU9GX0RDVEVMRU0pXQorCW1vdmRxYQl4bW02LCBYTU1XT1JEIFtYTU1CTE9DSygyLDAsZXNpLFNJWkVPRl9EQ1RFTEVNKV0KKwltb3ZkcWEJeG1tNywgWE1NV09SRCBbWE1NQkxPQ0soMywwLGVzaSxTSVpFT0ZfRENURUxFTSldCisJbW92ZHFhCXhtbTAseG1tNAorCW1vdmRxYQl4bW0xLHhtbTUKKwltb3ZkcWEJeG1tMix4bW02CisJbW92ZHFhCXhtbTMseG1tNworCXBzcmF3CXhtbTQsKFdPUkRfQklULTEpCisJcHNyYXcJeG1tNSwoV09SRF9CSVQtMSkKKwlwc3Jhdwl4bW02LChXT1JEX0JJVC0xKQorCXBzcmF3CXhtbTcsKFdPUkRfQklULTEpCisJcHhvcgl4bW0wLHhtbTQKKwlweG9yCXhtbTEseG1tNQorCXB4b3IJeG1tMix4bW02CisJcHhvcgl4bW0zLHhtbTcKKwlwc3Vidwl4bW0wLHhtbTQJCTsgaWYgKHhtbTAgPCAwKSB4bW0wID0gLXhtbTA7CisJcHN1YncJeG1tMSx4bW01CQk7IGlmICh4bW0xIDwgMCkgeG1tMSA9IC14bW0xOworCXBzdWJ3CXhtbTIseG1tNgkJOyBpZiAoeG1tMiA8IDApIHhtbTIgPSAteG1tMjsKKwlwc3Vidwl4bW0zLHhtbTcJCTsgaWYgKHhtbTMgPCAwKSB4bW0zID0gLXhtbTM7CisKKwlwYWRkdwl4bW0wLCBYTU1XT1JEIFtDT1JSRUNUSU9OKDAsMCxlZHgpXSAgOyBjb3JyZWN0aW9uICsgcm91bmRmYWN0b3IKKwlwYWRkdwl4bW0xLCBYTU1XT1JEIFtDT1JSRUNUSU9OKDEsMCxlZHgpXQorCXBhZGR3CXhtbTIsIFhNTVdPUkQgW0NPUlJFQ1RJT04oMiwwLGVkeCldCisJcGFkZHcJeG1tMywgWE1NV09SRCBbQ09SUkVDVElPTigzLDAsZWR4KV0KKwlwbXVsaHV3CXhtbTAsIFhNTVdPUkQgW1JFQ0lQUk9DQUwoMCwwLGVkeCldICA7IHJlY2lwcm9jYWwKKwlwbXVsaHV3CXhtbTEsIFhNTVdPUkQgW1JFQ0lQUk9DQUwoMSwwLGVkeCldCisJcG11bGh1dwl4bW0yLCBYTU1XT1JEIFtSRUNJUFJPQ0FMKDIsMCxlZHgpXQorCXBtdWxodXcJeG1tMywgWE1NV09SRCBbUkVDSVBST0NBTCgzLDAsZWR4KV0KKwlwbXVsaHV3CXhtbTAsIFhNTVdPUkQgW1NDQUxFKDAsMCxlZHgpXQk7IHNjYWxlCisJcG11bGh1dwl4bW0xLCBYTU1XT1JEIFtTQ0FMRSgxLDAsZWR4KV0KKwlwbXVsaHV3CXhtbTIsIFhNTVdPUkQgW1NDQUxFKDIsMCxlZHgpXQorCXBtdWxodXcJeG1tMywgWE1NV09SRCBbU0NBTEUoMywwLGVkeCldCisKKwlweG9yCXhtbTAseG1tNAorCXB4b3IJeG1tMSx4bW01CisJcHhvcgl4bW0yLHhtbTYKKwlweG9yCXhtbTMseG1tNworCXBzdWJ3CXhtbTAseG1tNAorCXBzdWJ3CXhtbTEseG1tNQorCXBzdWJ3CXhtbTIseG1tNgorCXBzdWJ3CXhtbTMseG1tNworCW1vdmRxYQlYTU1XT1JEIFtYTU1CTE9DSygwLDAsZWRpLFNJWkVPRl9EQ1RFTEVNKV0sIHhtbTAKKwltb3ZkcWEJWE1NV09SRCBbWE1NQkxPQ0soMSwwLGVkaSxTSVpFT0ZfRENURUxFTSldLCB4bW0xCisJbW92ZHFhCVhNTVdPUkQgW1hNTUJMT0NLKDIsMCxlZGksU0laRU9GX0RDVEVMRU0pXSwgeG1tMgorCW1vdmRxYQlYTU1XT1JEIFtYTU1CTE9DSygzLDAsZWRpLFNJWkVPRl9EQ1RFTEVNKV0sIHhtbTMKKworCWFkZAllc2ksIGJ5dGUgMzIqU0laRU9GX0RDVEVMRU0KKwlhZGQJZWR4LCBieXRlIDMyKlNJWkVPRl9EQ1RFTEVNCisJYWRkCWVkaSwgYnl0ZSAzMipTSVpFT0ZfSkNPRUYKKwlkZWMJZWF4CisJam56CW5lYXIgLnF1YW50bG9vcAorCisJcG9wCWVkaQorCXBvcAllc2kKKzsJcG9wCWVkeAkJOyBuZWVkIG5vdCBiZSBwcmVzZXJ2ZWQKKzsJcG9wCWVjeAkJOyB1bnVzZWQKKzsJcG9wCWVieAkJOyB1bnVzZWQKKwlwb3AJZWJwCisJcmV0CisKKzsgRm9yIHNvbWUgcmVhc29uLCB0aGUgT1MgWCBsaW5rZXIgZG9lcyBub3QgaG9ub3IgdGhlIHJlcXVlc3QgdG8gYWxpZ24gdGhlCis7IHNlZ21lbnQgdW5sZXNzIHdlIGRvIHRoaXMuCisJYWxpZ24JMTYKZGlmZiAtLWdpdCBhL3NpbWQvamNxbnRzc2UuYXNtIGIvc2ltZC9qY3FudHNzZS5hc20KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzA2NWVjYQotLS0gL2Rldi9udWxsCisrKyBiL3NpbWQvamNxbnRzc2UuYXNtCkBAIC0wLDAgKzEsMjExIEBACis7Cis7IGpjcW50c3NlLmFzbSAtIHNhbXBsZSBkYXRhIGNvbnZlcnNpb24gYW5kIHF1YW50aXphdGlvbiAoU1NFICYgTU1YKQorOworOyBDb3B5cmlnaHQgMjAwOSBQaWVycmUgT3NzbWFuIDxvc3NtYW5AY2VuZGlvLnNlPiBmb3IgQ2VuZGlvIEFCCis7Cis7IEJhc2VkIG9uCis7IHg4NiBTSU1EIGV4dGVuc2lvbiBmb3IgSUpHIEpQRUcgbGlicmFyeQorOyBDb3B5cmlnaHQgKEMpIDE5OTktMjAwNiwgTUlZQVNBS0EgTWFzYXJ1LgorOyBGb3IgY29uZGl0aW9ucyBvZiBkaXN0cmlidXRpb24gYW5kIHVzZSwgc2VlIGNvcHlyaWdodCBub3RpY2UgaW4ganNpbWRleHQuaW5jCis7Cis7IFRoaXMgZmlsZSBzaG91bGQgYmUgYXNzZW1ibGVkIHdpdGggTkFTTSAoTmV0d2lkZSBBc3NlbWJsZXIpLAorOyBjYW4gKm5vdCogYmUgYXNzZW1ibGVkIHdpdGggTWljcm9zb2Z0J3MgTUFTTSBvciBhbnkgY29tcGF0aWJsZQorOyBhc3NlbWJsZXIgKGluY2x1ZGluZyBCb3JsYW5kJ3MgVHVyYm8gQXNzZW1ibGVyKS4KKzsgTkFTTSBpcyBhdmFpbGFibGUgZnJvbSBodHRwOi8vbmFzbS5zb3VyY2Vmb3JnZS5uZXQvIG9yCis7IGh0dHA6Ly9zb3VyY2Vmb3JnZS5uZXQvcHJvamVjdC9zaG93ZmlsZXMucGhwP2dyb3VwX2lkPTYyMDgKKzsKKzsgW1RBQjhdCisKKyVpbmNsdWRlICJqc2ltZGV4dC5pbmMiCislaW5jbHVkZSAiamRjdC5pbmMiCisKKzsgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKwlTRUNUSU9OCVNFR19URVhUCisJQklUUwkzMgorOworOyBMb2FkIGRhdGEgaW50byB3b3Jrc3BhY2UsIGFwcGx5aW5nIHVuc2lnbmVkLT5zaWduZWQgY29udmVyc2lvbgorOworOyBHTE9CQUwodm9pZCkKKzsganNpbWRfY29udnNhbXBfZmxvYXRfc3NlIChKU0FNUEFSUkFZIHNhbXBsZV9kYXRhLCBKRElNRU5TSU9OIHN0YXJ0X2NvbCwKKzsgICAgICAgICAgICAgICAgICAgICAgICAgICBGQVNUX0ZMT0FUICogd29ya3NwYWNlKTsKKzsKKworJWRlZmluZSBzYW1wbGVfZGF0YQllYnArOAkJOyBKU0FNUEFSUkFZIHNhbXBsZV9kYXRhCislZGVmaW5lIHN0YXJ0X2NvbAllYnArMTIJCTsgSkRJTUVOU0lPTiBzdGFydF9jb2wKKyVkZWZpbmUgd29ya3NwYWNlCWVicCsxNgkJOyBGQVNUX0ZMT0FUICogd29ya3NwYWNlCisKKwlhbGlnbgkxNgorCWdsb2JhbAlFWFROKGpzaW1kX2NvbnZzYW1wX2Zsb2F0X3NzZSkKKworRVhUTihqc2ltZF9jb252c2FtcF9mbG9hdF9zc2UpOgorCXB1c2gJZWJwCisJbW92CWVicCxlc3AKKwlwdXNoCWVieAorOwlwdXNoCWVjeAkJOyBuZWVkIG5vdCBiZSBwcmVzZXJ2ZWQKKzsJcHVzaAllZHgJCTsgbmVlZCBub3QgYmUgcHJlc2VydmVkCisJcHVzaAllc2kKKwlwdXNoCWVkaQorCisJcGNtcGVxdyAgbW03LG1tNworCXBzbGx3ICAgIG1tNyw3CisJcGFja3Nzd2IgbW03LG1tNwkJOyBtbTcgPSBQQl9DRU5URVJKU0FNUExFICgweDgwODA4MC4uKQorCisJbW92CWVzaSwgSlNBTVBBUlJBWSBbc2FtcGxlX2RhdGFdCTsgKEpTQU1QUk9XICopCisJbW92CWVheCwgSkRJTUVOU0lPTiBbc3RhcnRfY29sXQorCW1vdgllZGksIFBPSU5URVIgW3dvcmtzcGFjZV0JOyAoRENURUxFTSAqKQorCW1vdgllY3gsIERDVFNJWkUvMgorCWFsaWdueAkxNiw3CisuY29udmxvb3A6CisJbW92CWVieCwgSlNBTVBST1cgW2VzaSswKlNJWkVPRl9KU0FNUFJPV10JOyAoSlNBTVBMRSAqKQorCW1vdgllZHgsIEpTQU1QUk9XIFtlc2krMSpTSVpFT0ZfSlNBTVBST1ddCTsgKEpTQU1QTEUgKikKKworCW1vdnEJbW0wLCBNTVdPUkQgW2VieCtlYXgqU0laRU9GX0pTQU1QTEVdCisJbW92cQltbTEsIE1NV09SRCBbZWR4K2VheCpTSVpFT0ZfSlNBTVBMRV0KKworCXBzdWJiCW1tMCxtbTcJCQkJOyBtbTA9KDAxMjM0NTY3KQorCXBzdWJiCW1tMSxtbTcJCQkJOyBtbTE9KDg5QUJDREVGKQorCisJcHVucGNrbGJ3IG1tMixtbTAJCQk7IG1tMj0oKjAqMSoyKjMpCisJcHVucGNraGJ3IG1tMCxtbTAJCQk7IG1tMD0oKjQqNSo2KjcpCisJcHVucGNrbGJ3IG1tMyxtbTEJCQk7IG1tMz0oKjgqOSpBKkIpCisJcHVucGNraGJ3IG1tMSxtbTEJCQk7IG1tMT0oKkMqRCpFKkYpCisKKwlwdW5wY2tsd2QgbW00LG1tMgkJCTsgbW00PSgqKiowKioqMSkKKwlwdW5wY2tod2QgbW0yLG1tMgkJCTsgbW0yPSgqKioyKioqMykKKwlwdW5wY2tsd2QgbW01LG1tMAkJCTsgbW01PSgqKio0KioqNSkKKwlwdW5wY2tod2QgbW0wLG1tMAkJCTsgbW0wPSgqKio2KioqNykKKworCXBzcmFkICAgICBtbTQsKERXT1JEX0JJVC1CWVRFX0JJVCkJOyBtbTQ9KDAxKQorCXBzcmFkICAgICBtbTIsKERXT1JEX0JJVC1CWVRFX0JJVCkJOyBtbTI9KDIzKQorCWN2dHBpMnBzICB4bW0wLG1tNAkJCTsgeG1tMD0oMDEqKikKKwljdnRwaTJwcyAgeG1tMSxtbTIJCQk7IHhtbTE9KDIzKiopCisJcHNyYWQgICAgIG1tNSwoRFdPUkRfQklULUJZVEVfQklUKQk7IG1tNT0oNDUpCisJcHNyYWQgICAgIG1tMCwoRFdPUkRfQklULUJZVEVfQklUKQk7IG1tMD0oNjcpCisJY3Z0cGkycHMgIHhtbTIsbW01CQkJOyB4bW0yPSg0NSoqKQorCWN2dHBpMnBzICB4bW0zLG1tMAkJCTsgeG1tMz0oNjcqKikKKworCXB1bnBja2x3ZCBtbTYsbW0zCQkJOyBtbTY9KCoqKjgqKio5KQorCXB1bnBja2h3ZCBtbTMsbW0zCQkJOyBtbTM9KCoqKkEqKipCKQorCXB1bnBja2x3ZCBtbTQsbW0xCQkJOyBtbTQ9KCoqKkMqKipEKQorCXB1bnBja2h3ZCBtbTEsbW0xCQkJOyBtbTE9KCoqKkUqKipGKQorCisJcHNyYWQgICAgIG1tNiwoRFdPUkRfQklULUJZVEVfQklUKQk7IG1tNj0oODkpCisJcHNyYWQgICAgIG1tMywoRFdPUkRfQklULUJZVEVfQklUKQk7IG1tMz0oQUIpCisJY3Z0cGkycHMgIHhtbTQsbW02CQkJOyB4bW00PSg4OSoqKQorCWN2dHBpMnBzICB4bW01LG1tMwkJCTsgeG1tNT0oQUIqKikKKwlwc3JhZCAgICAgbW00LChEV09SRF9CSVQtQllURV9CSVQpCTsgbW00PShDRCkKKwlwc3JhZCAgICAgbW0xLChEV09SRF9CSVQtQllURV9CSVQpCTsgbW0xPShFRikKKwljdnRwaTJwcyAgeG1tNixtbTQJCQk7IHhtbTY9KENEKiopCisJY3Z0cGkycHMgIHhtbTcsbW0xCQkJOyB4bW03PShFRioqKQorCisJbW92bGhwcyAgIHhtbTAseG1tMQkJCTsgeG1tMD0oMDEyMykKKwltb3ZsaHBzICAgeG1tMix4bW0zCQkJOyB4bW0yPSg0NTY3KQorCW1vdmxocHMgICB4bW00LHhtbTUJCQk7IHhtbTQ9KDg5QUIpCisJbW92bGhwcyAgIHhtbTYseG1tNwkJCTsgeG1tNj0oQ0RFRikKKworCW1vdmFwcwlYTU1XT1JEIFtYTU1CTE9DSygwLDAsZWRpLFNJWkVPRl9GQVNUX0ZMT0FUKV0sIHhtbTAKKwltb3ZhcHMJWE1NV09SRCBbWE1NQkxPQ0soMCwxLGVkaSxTSVpFT0ZfRkFTVF9GTE9BVCldLCB4bW0yCisJbW92YXBzCVhNTVdPUkQgW1hNTUJMT0NLKDEsMCxlZGksU0laRU9GX0ZBU1RfRkxPQVQpXSwgeG1tNAorCW1vdmFwcwlYTU1XT1JEIFtYTU1CTE9DSygxLDEsZWRpLFNJWkVPRl9GQVNUX0ZMT0FUKV0sIHhtbTYKKworCWFkZAllc2ksIGJ5dGUgMipTSVpFT0ZfSlNBTVBST1cKKwlhZGQJZWRpLCBieXRlIDIqRENUU0laRSpTSVpFT0ZfRkFTVF9GTE9BVAorCWRlYwllY3gKKwlqbnoJbmVhciAuY29udmxvb3AKKworCWVtbXMJCTsgZW1wdHkgTU1YIHN0YXRlCisKKwlwb3AJZWRpCisJcG9wCWVzaQorOwlwb3AJZWR4CQk7IG5lZWQgbm90IGJlIHByZXNlcnZlZAorOwlwb3AJZWN4CQk7IG5lZWQgbm90IGJlIHByZXNlcnZlZAorCXBvcAllYngKKwlwb3AJZWJwCisJcmV0CisKKworOyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorOworOyBRdWFudGl6ZS9kZXNjYWxlIHRoZSBjb2VmZmljaWVudHMsIGFuZCBzdG9yZSBpbnRvIGNvZWZfYmxvY2sKKzsKKzsgR0xPQkFMKHZvaWQpCis7IGpzaW1kX3F1YW50aXplX2Zsb2F0X3NzZSAoSkNPRUZQVFIgY29lZl9ibG9jaywgRkFTVF9GTE9BVCAqIGRpdmlzb3JzLAorOyAgICAgICAgICAgICAgICAgICAgICAgICAgIEZBU1RfRkxPQVQgKiB3b3Jrc3BhY2UpOworOworCislZGVmaW5lIGNvZWZfYmxvY2sJZWJwKzgJCTsgSkNPRUZQVFIgY29lZl9ibG9jaworJWRlZmluZSBkaXZpc29ycwllYnArMTIJCTsgRkFTVF9GTE9BVCAqIGRpdmlzb3JzCislZGVmaW5lIHdvcmtzcGFjZQllYnArMTYJCTsgRkFTVF9GTE9BVCAqIHdvcmtzcGFjZQorCisJYWxpZ24JMTYKKwlnbG9iYWwJRVhUTihqc2ltZF9xdWFudGl6ZV9mbG9hdF9zc2UpCisKK0VYVE4oanNpbWRfcXVhbnRpemVfZmxvYXRfc3NlKToKKwlwdXNoCWVicAorCW1vdgllYnAsZXNwCis7CXB1c2gJZWJ4CQk7IHVudXNlZAorOwlwdXNoCWVjeAkJOyB1bnVzZWQKKzsJcHVzaAllZHgJCTsgbmVlZCBub3QgYmUgcHJlc2VydmVkCisJcHVzaAllc2kKKwlwdXNoCWVkaQorCisJbW92CWVzaSwgUE9JTlRFUiBbd29ya3NwYWNlXQorCW1vdgllZHgsIFBPSU5URVIgW2Rpdmlzb3JzXQorCW1vdgllZGksIEpDT0VGUFRSIFtjb2VmX2Jsb2NrXQorCW1vdgllYXgsIERDVFNJWkUyLzE2CisJYWxpZ254CTE2LDcKKy5xdWFudGxvb3A6CisJbW92YXBzCXhtbTAsIFhNTVdPUkQgW1hNTUJMT0NLKDAsMCxlc2ksU0laRU9GX0ZBU1RfRkxPQVQpXQorCW1vdmFwcwl4bW0xLCBYTU1XT1JEIFtYTU1CTE9DSygwLDEsZXNpLFNJWkVPRl9GQVNUX0ZMT0FUKV0KKwltdWxwcwl4bW0wLCBYTU1XT1JEIFtYTU1CTE9DSygwLDAsZWR4LFNJWkVPRl9GQVNUX0ZMT0FUKV0KKwltdWxwcwl4bW0xLCBYTU1XT1JEIFtYTU1CTE9DSygwLDEsZWR4LFNJWkVPRl9GQVNUX0ZMT0FUKV0KKwltb3ZhcHMJeG1tMiwgWE1NV09SRCBbWE1NQkxPQ0soMSwwLGVzaSxTSVpFT0ZfRkFTVF9GTE9BVCldCisJbW92YXBzCXhtbTMsIFhNTVdPUkQgW1hNTUJMT0NLKDEsMSxlc2ksU0laRU9GX0ZBU1RfRkxPQVQpXQorCW11bHBzCXhtbTIsIFhNTVdPUkQgW1hNTUJMT0NLKDEsMCxlZHgsU0laRU9GX0ZBU1RfRkxPQVQpXQorCW11bHBzCXhtbTMsIFhNTVdPUkQgW1hNTUJMT0NLKDEsMSxlZHgsU0laRU9GX0ZBU1RfRkxPQVQpXQorCisJbW92aGxwcyAgeG1tNCx4bW0wCisJbW92aGxwcyAgeG1tNSx4bW0xCisKKwljdnRwczJwaSBtbTAseG1tMAorCWN2dHBzMnBpIG1tMSx4bW0xCisJY3Z0cHMycGkgbW00LHhtbTQKKwljdnRwczJwaSBtbTUseG1tNQorCisJbW92aGxwcyAgeG1tNix4bW0yCisJbW92aGxwcyAgeG1tNyx4bW0zCisKKwljdnRwczJwaSBtbTIseG1tMgorCWN2dHBzMnBpIG1tMyx4bW0zCisJY3Z0cHMycGkgbW02LHhtbTYKKwljdnRwczJwaSBtbTcseG1tNworCisJcGFja3NzZHcgbW0wLG1tNAorCXBhY2tzc2R3IG1tMSxtbTUKKwlwYWNrc3NkdyBtbTIsbW02CisJcGFja3NzZHcgbW0zLG1tNworCisJbW92cQlNTVdPUkQgW01NQkxPQ0soMCwwLGVkaSxTSVpFT0ZfSkNPRUYpXSwgbW0wCisJbW92cQlNTVdPUkQgW01NQkxPQ0soMCwxLGVkaSxTSVpFT0ZfSkNPRUYpXSwgbW0xCisJbW92cQlNTVdPUkQgW01NQkxPQ0soMSwwLGVkaSxTSVpFT0ZfSkNPRUYpXSwgbW0yCisJbW92cQlNTVdPUkQgW01NQkxPQ0soMSwxLGVkaSxTSVpFT0ZfSkNPRUYpXSwgbW0zCisKKwlhZGQJZXNpLCBieXRlIDE2KlNJWkVPRl9GQVNUX0ZMT0FUCisJYWRkCWVkeCwgYnl0ZSAxNipTSVpFT0ZfRkFTVF9GTE9BVAorCWFkZAllZGksIGJ5dGUgMTYqU0laRU9GX0pDT0VGCisJZGVjCWVheAorCWpueglzaG9ydCAucXVhbnRsb29wCisKKwllbW1zCQk7IGVtcHR5IE1NWCBzdGF0ZQorCisJcG9wCWVkaQorCXBvcAllc2kKKzsJcG9wCWVkeAkJOyBuZWVkIG5vdCBiZSBwcmVzZXJ2ZWQKKzsJcG9wCWVjeAkJOyB1bnVzZWQKKzsJcG9wCWVieAkJOyB1bnVzZWQKKwlwb3AJZWJwCisJcmV0CisKKzsgRm9yIHNvbWUgcmVhc29uLCB0aGUgT1MgWCBsaW5rZXIgZG9lcyBub3QgaG9ub3IgdGhlIHJlcXVlc3QgdG8gYWxpZ24gdGhlCis7IHNlZ21lbnQgdW5sZXNzIHdlIGRvIHRoaXMuCisJYWxpZ24JMTYKZGlmZiAtLWdpdCBhL3NpbWQvamNzYW1tbXguYXNtIGIvc2ltZC9qY3NhbW1teC5hc20KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOWU0M2IyZgotLS0gL2Rldi9udWxsCisrKyBiL3NpbWQvamNzYW1tbXguYXNtCkBAIC0wLDAgKzEsMzI0IEBACis7Cis7IGpjc2FtbW14LmFzbSAtIGRvd25zYW1wbGluZyAoTU1YKQorOworOyBDb3B5cmlnaHQgMjAwOSBQaWVycmUgT3NzbWFuIDxvc3NtYW5AY2VuZGlvLnNlPiBmb3IgQ2VuZGlvIEFCCis7Cis7IEJhc2VkIG9uCis7IHg4NiBTSU1EIGV4dGVuc2lvbiBmb3IgSUpHIEpQRUcgbGlicmFyeQorOyBDb3B5cmlnaHQgKEMpIDE5OTktMjAwNiwgTUlZQVNBS0EgTWFzYXJ1LgorOyBGb3IgY29uZGl0aW9ucyBvZiBkaXN0cmlidXRpb24gYW5kIHVzZSwgc2VlIGNvcHlyaWdodCBub3RpY2UgaW4ganNpbWRleHQuaW5jCis7Cis7IFRoaXMgZmlsZSBzaG91bGQgYmUgYXNzZW1ibGVkIHdpdGggTkFTTSAoTmV0d2lkZSBBc3NlbWJsZXIpLAorOyBjYW4gKm5vdCogYmUgYXNzZW1ibGVkIHdpdGggTWljcm9zb2Z0J3MgTUFTTSBvciBhbnkgY29tcGF0aWJsZQorOyBhc3NlbWJsZXIgKGluY2x1ZGluZyBCb3JsYW5kJ3MgVHVyYm8gQXNzZW1ibGVyKS4KKzsgTkFTTSBpcyBhdmFpbGFibGUgZnJvbSBodHRwOi8vbmFzbS5zb3VyY2Vmb3JnZS5uZXQvIG9yCis7IGh0dHA6Ly9zb3VyY2Vmb3JnZS5uZXQvcHJvamVjdC9zaG93ZmlsZXMucGhwP2dyb3VwX2lkPTYyMDgKKzsKKzsgW1RBQjhdCisKKyVpbmNsdWRlICJqc2ltZGV4dC5pbmMiCisKKzsgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKwlTRUNUSU9OCVNFR19URVhUCisJQklUUwkzMgorOworOyBEb3duc2FtcGxlIHBpeGVsIHZhbHVlcyBvZiBhIHNpbmdsZSBjb21wb25lbnQuCis7IFRoaXMgdmVyc2lvbiBoYW5kbGVzIHRoZSBjb21tb24gY2FzZSBvZiAyOjEgaG9yaXpvbnRhbCBhbmQgMToxIHZlcnRpY2FsLAorOyB3aXRob3V0IHNtb290aGluZy4KKzsKKzsgR0xPQkFMKHZvaWQpCis7IGpzaW1kX2gydjFfZG93bnNhbXBsZV9tbXggKEpESU1FTlNJT04gaW1hZ2Vfd2lkdGgsIGludCBtYXhfdl9zYW1wX2ZhY3RvciwKKzsgICAgICAgICAgICAgICAgICAgICAgICAgICAgSkRJTUVOU0lPTiB2X3NhbXBfZmFjdG9yLCBKRElNRU5TSU9OIHdpZHRoX2Jsb2NrcywKKzsgICAgICAgICAgICAgICAgICAgICAgICAgICAgSlNBTVBBUlJBWSBpbnB1dF9kYXRhLCBKU0FNUEFSUkFZIG91dHB1dF9kYXRhKTsKKzsKKworJWRlZmluZSBpbWdfd2lkdGgoYikJKGIpKzgJCQk7IEpESU1FTlNJT04gaW1hZ2Vfd2lkdGgKKyVkZWZpbmUgbWF4X3Zfc2FtcChiKQkoYikrMTIJCTsgaW50IG1heF92X3NhbXBfZmFjdG9yCislZGVmaW5lIHZfc2FtcChiKQkJCShiKSsxNgkJOyBKRElNRU5TSU9OIHZfc2FtcF9mYWN0b3IKKyVkZWZpbmUgd2lkdGhfYmxrcyhiKQkoYikrMjAJCTsgSkRJTUVOU0lPTiB3aWR0aF9ibG9ja3MKKyVkZWZpbmUgaW5wdXRfZGF0YShiKQkoYikrMjQJCTsgSlNBTVBBUlJBWSBpbnB1dF9kYXRhCislZGVmaW5lIG91dHB1dF9kYXRhKGIpCShiKSsyOAk7IEpTQU1QQVJSQVkgb3V0cHV0X2RhdGEKKworCWFsaWduCTE2CisJZ2xvYmFsCUVYVE4oanNpbWRfaDJ2MV9kb3duc2FtcGxlX21teCkKKworRVhUTihqc2ltZF9oMnYxX2Rvd25zYW1wbGVfbW14KToKKwlwdXNoCWVicAorCW1vdgllYnAsZXNwCis7CXB1c2gJZWJ4CQk7IHVudXNlZAorOwlwdXNoCWVjeAkJOyBuZWVkIG5vdCBiZSBwcmVzZXJ2ZWQKKzsJcHVzaAllZHgJCTsgbmVlZCBub3QgYmUgcHJlc2VydmVkCisJcHVzaAllc2kKKwlwdXNoCWVkaQorCisJbW92CWVjeCwgSkRJTUVOU0lPTiBbd2lkdGhfYmxrcyhlYnApXQorCXNobAllY3gsMwkJCTsgaW11bCBlY3gsRENUU0laRSAoZWN4ID0gb3V0cHV0X2NvbHMpCisJanoJbmVhciAucmV0dXJuCisKKwltb3YJZWR4LCBKRElNRU5TSU9OIFtpbWdfd2lkdGgoZWJwKV0KKworCTsgLS0gZXhwYW5kX3JpZ2h0X2VkZ2UKKworCXB1c2gJZWN4CisJc2hsCWVjeCwxCQkJCTsgb3V0cHV0X2NvbHMgKiAyCisJc3ViCWVjeCxlZHgKKwlqbGUJc2hvcnQgLmV4cGFuZF9lbmQKKworCW1vdgllYXgsIElOVCBbbWF4X3Zfc2FtcChlYnApXQorCXRlc3QJZWF4LGVheAorCWpsZQlzaG9ydCAuZXhwYW5kX2VuZAorCisJY2xkCisJbW92CWVzaSwgSlNBTVBBUlJBWSBbaW5wdXRfZGF0YShlYnApXQk7IGlucHV0X2RhdGEKKwlhbGlnbngJMTYsNworLmV4cGFuZGxvb3A6CisJcHVzaAllYXgKKwlwdXNoCWVjeAorCisJbW92CWVkaSwgSlNBTVBST1cgW2VzaV0KKwlhZGQJZWRpLGVkeAorCW1vdglhbCwgSlNBTVBMRSBbZWRpLTFdCisKKwlyZXAgc3Rvc2IKKworCXBvcAllY3gKKwlwb3AJZWF4CisKKwlhZGQJZXNpLCBieXRlIFNJWkVPRl9KU0FNUFJPVworCWRlYwllYXgKKwlqZwlzaG9ydCAuZXhwYW5kbG9vcAorCisuZXhwYW5kX2VuZDoKKwlwb3AJZWN4CQkJCTsgb3V0cHV0X2NvbHMKKworCTsgLS0gaDJ2MV9kb3duc2FtcGxlCisKKwltb3YJZWF4LCBKRElNRU5TSU9OIFt2X3NhbXAoZWJwKV0JOyByb3djdHIKKwl0ZXN0CWVheCxlYXgKKwlqbGUJbmVhciAucmV0dXJuCisKKwltb3YgICAgICAgZWR4LCAweDAwMDEwMDAwCTsgYmlhcyBwYXR0ZXJuCisJbW92ZCAgICAgIG1tNyxlZHgKKwlwY21wZXF3ICAgbW02LG1tNgorCXB1bnBja2xkcSBtbTcsbW03CQk7IG1tNz17MCwgMSwgMCwgMX0KKwlwc3JsdyAgICAgbW02LEJZVEVfQklUCQk7IG1tNj17MHhGRiAweDAwIDB4RkYgMHgwMCAuLn0KKworCW1vdgllc2ksIEpTQU1QQVJSQVkgW2lucHV0X2RhdGEoZWJwKV0JOyBpbnB1dF9kYXRhCisJbW92CWVkaSwgSlNBTVBBUlJBWSBbb3V0cHV0X2RhdGEoZWJwKV0JOyBvdXRwdXRfZGF0YQorCWFsaWdueAkxNiw3Cisucm93bG9vcDoKKwlwdXNoCWVjeAorCXB1c2gJZWRpCisJcHVzaAllc2kKKworCW1vdgllc2ksIEpTQU1QUk9XIFtlc2ldCQk7IGlucHRyCisJbW92CWVkaSwgSlNBTVBST1cgW2VkaV0JCTsgb3V0cHRyCisJYWxpZ254CTE2LDcKKy5jb2x1bW5sb29wOgorCisJbW92cQltbTAsIE1NV09SRCBbZXNpKzAqU0laRU9GX01NV09SRF0KKwltb3ZxCW1tMSwgTU1XT1JEIFtlc2krMSpTSVpFT0ZfTU1XT1JEXQorCW1vdnEJbW0yLG1tMAorCW1vdnEJbW0zLG1tMQorCisJcGFuZAltbTAsbW02CisJcHNybHcJbW0yLEJZVEVfQklUCisJcGFuZAltbTEsbW02CisJcHNybHcJbW0zLEJZVEVfQklUCisKKwlwYWRkdwltbTAsbW0yCisJcGFkZHcJbW0xLG1tMworCXBhZGR3CW1tMCxtbTcKKwlwYWRkdwltbTEsbW03CisJcHNybHcJbW0wLDEKKwlwc3JsdwltbTEsMQorCisJcGFja3Vzd2IgbW0wLG1tMQorCisJbW92cQlNTVdPUkQgW2VkaSswKlNJWkVPRl9NTVdPUkRdLCBtbTAKKworCWFkZAllc2ksIGJ5dGUgMipTSVpFT0ZfTU1XT1JECTsgaW5wdHIKKwlhZGQJZWRpLCBieXRlIDEqU0laRU9GX01NV09SRAk7IG91dHB0cgorCXN1YgllY3gsIGJ5dGUgU0laRU9GX01NV09SRAkJOyBvdXRjb2wKKwlqbnoJc2hvcnQgLmNvbHVtbmxvb3AKKworCXBvcAllc2kKKwlwb3AJZWRpCisJcG9wCWVjeAorCisJYWRkCWVzaSwgYnl0ZSBTSVpFT0ZfSlNBTVBST1cJOyBpbnB1dF9kYXRhCisJYWRkCWVkaSwgYnl0ZSBTSVpFT0ZfSlNBTVBST1cJOyBvdXRwdXRfZGF0YQorCWRlYwllYXgJCQkJOyByb3djdHIKKwlqZwlzaG9ydCAucm93bG9vcAorCisJZW1tcwkJOyBlbXB0eSBNTVggc3RhdGUKKworLnJldHVybjoKKwlwb3AJZWRpCisJcG9wCWVzaQorOwlwb3AJZWR4CQk7IG5lZWQgbm90IGJlIHByZXNlcnZlZAorOwlwb3AJZWN4CQk7IG5lZWQgbm90IGJlIHByZXNlcnZlZAorOwlwb3AJZWJ4CQk7IHVudXNlZAorCXBvcAllYnAKKwlyZXQKKworOyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorOworOyBEb3duc2FtcGxlIHBpeGVsIHZhbHVlcyBvZiBhIHNpbmdsZSBjb21wb25lbnQuCis7IFRoaXMgdmVyc2lvbiBoYW5kbGVzIHRoZSBzdGFuZGFyZCBjYXNlIG9mIDI6MSBob3Jpem9udGFsIGFuZCAyOjEgdmVydGljYWwsCis7IHdpdGhvdXQgc21vb3RoaW5nLgorOworOyBHTE9CQUwodm9pZCkKKzsganNpbWRfaDJ2Ml9kb3duc2FtcGxlX21teCAoSkRJTUVOU0lPTiBpbWFnZV93aWR0aCwgaW50IG1heF92X3NhbXBfZmFjdG9yLAorOyAgICAgICAgICAgICAgICAgICAgICAgICAgICBKRElNRU5TSU9OIHZfc2FtcF9mYWN0b3IsIEpESU1FTlNJT04gd2lkdGhfYmxvY2tzLAorOyAgICAgICAgICAgICAgICAgICAgICAgICAgICBKU0FNUEFSUkFZIGlucHV0X2RhdGEsIEpTQU1QQVJSQVkgb3V0cHV0X2RhdGEpOworOworCislZGVmaW5lIGltZ193aWR0aChiKQkoYikrOAkJCTsgSkRJTUVOU0lPTiBpbWFnZV93aWR0aAorJWRlZmluZSBtYXhfdl9zYW1wKGIpCShiKSsxMgkJOyBpbnQgbWF4X3Zfc2FtcF9mYWN0b3IKKyVkZWZpbmUgdl9zYW1wKGIpCQkJKGIpKzE2CQk7IEpESU1FTlNJT04gdl9zYW1wX2ZhY3RvcgorJWRlZmluZSB3aWR0aF9ibGtzKGIpCShiKSsyMAkJOyBKRElNRU5TSU9OIHdpZHRoX2Jsb2NrcworJWRlZmluZSBpbnB1dF9kYXRhKGIpCShiKSsyNAkJOyBKU0FNUEFSUkFZIGlucHV0X2RhdGEKKyVkZWZpbmUgb3V0cHV0X2RhdGEoYikJKGIpKzI4CTsgSlNBTVBBUlJBWSBvdXRwdXRfZGF0YQorCisJYWxpZ24JMTYKKwlnbG9iYWwJRVhUTihqc2ltZF9oMnYyX2Rvd25zYW1wbGVfbW14KQorCitFWFROKGpzaW1kX2gydjJfZG93bnNhbXBsZV9tbXgpOgorCXB1c2gJZWJwCisJbW92CWVicCxlc3AKKzsJcHVzaAllYngJCTsgdW51c2VkCis7CXB1c2gJZWN4CQk7IG5lZWQgbm90IGJlIHByZXNlcnZlZAorOwlwdXNoCWVkeAkJOyBuZWVkIG5vdCBiZSBwcmVzZXJ2ZWQKKwlwdXNoCWVzaQorCXB1c2gJZWRpCisKKwltb3YJZWN4LCBKRElNRU5TSU9OIFt3aWR0aF9ibGtzKGVicCldCisJc2hsCWVjeCwzCQkJOyBpbXVsIGVjeCxEQ1RTSVpFIChlY3ggPSBvdXRwdXRfY29scykKKwlqegluZWFyIC5yZXR1cm4KKworCW1vdgllZHgsIEpESU1FTlNJT04gW2ltZ193aWR0aChlYnApXQorCisJOyAtLSBleHBhbmRfcmlnaHRfZWRnZQorCisJcHVzaAllY3gKKwlzaGwJZWN4LDEJCQkJOyBvdXRwdXRfY29scyAqIDIKKwlzdWIJZWN4LGVkeAorCWpsZQlzaG9ydCAuZXhwYW5kX2VuZAorCisJbW92CWVheCwgSU5UIFttYXhfdl9zYW1wKGVicCldCisJdGVzdAllYXgsZWF4CisJamxlCXNob3J0IC5leHBhbmRfZW5kCisKKwljbGQKKwltb3YJZXNpLCBKU0FNUEFSUkFZIFtpbnB1dF9kYXRhKGVicCldCTsgaW5wdXRfZGF0YQorCWFsaWdueAkxNiw3CisuZXhwYW5kbG9vcDoKKwlwdXNoCWVheAorCXB1c2gJZWN4CisKKwltb3YJZWRpLCBKU0FNUFJPVyBbZXNpXQorCWFkZAllZGksZWR4CisJbW92CWFsLCBKU0FNUExFIFtlZGktMV0KKworCXJlcCBzdG9zYgorCisJcG9wCWVjeAorCXBvcAllYXgKKworCWFkZAllc2ksIGJ5dGUgU0laRU9GX0pTQU1QUk9XCisJZGVjCWVheAorCWpnCXNob3J0IC5leHBhbmRsb29wCisKKy5leHBhbmRfZW5kOgorCXBvcAllY3gJCQkJOyBvdXRwdXRfY29scworCisJOyAtLSBoMnYyX2Rvd25zYW1wbGUKKworCW1vdgllYXgsIEpESU1FTlNJT04gW3Zfc2FtcChlYnApXQk7IHJvd2N0cgorCXRlc3QJZWF4LGVheAorCWpsZQluZWFyIC5yZXR1cm4KKworCW1vdiAgICAgICBlZHgsIDB4MDAwMjAwMDEJOyBiaWFzIHBhdHRlcm4KKwltb3ZkICAgICAgbW03LGVkeAorCXBjbXBlcXcgICBtbTYsbW02CisJcHVucGNrbGRxIG1tNyxtbTcJCTsgbW03PXsxLCAyLCAxLCAyfQorCXBzcmx3ICAgICBtbTYsQllURV9CSVQJCTsgbW02PXsweEZGIDB4MDAgMHhGRiAweDAwIC4ufQorCisJbW92CWVzaSwgSlNBTVBBUlJBWSBbaW5wdXRfZGF0YShlYnApXQk7IGlucHV0X2RhdGEKKwltb3YJZWRpLCBKU0FNUEFSUkFZIFtvdXRwdXRfZGF0YShlYnApXQk7IG91dHB1dF9kYXRhCisJYWxpZ254CTE2LDcKKy5yb3dsb29wOgorCXB1c2gJZWN4CisJcHVzaAllZGkKKwlwdXNoCWVzaQorCisJbW92CWVkeCwgSlNBTVBST1cgW2VzaSswKlNJWkVPRl9KU0FNUFJPV10JOyBpbnB0cjAKKwltb3YJZXNpLCBKU0FNUFJPVyBbZXNpKzEqU0laRU9GX0pTQU1QUk9XXQk7IGlucHRyMQorCW1vdgllZGksIEpTQU1QUk9XIFtlZGldCQkJOyBvdXRwdHIKKwlhbGlnbngJMTYsNworLmNvbHVtbmxvb3A6CisKKwltb3ZxCW1tMCwgTU1XT1JEIFtlZHgrMCpTSVpFT0ZfTU1XT1JEXQorCW1vdnEJbW0xLCBNTVdPUkQgW2VzaSswKlNJWkVPRl9NTVdPUkRdCisJbW92cQltbTIsIE1NV09SRCBbZWR4KzEqU0laRU9GX01NV09SRF0KKwltb3ZxCW1tMywgTU1XT1JEIFtlc2krMSpTSVpFT0ZfTU1XT1JEXQorCisJbW92cQltbTQsbW0wCisJbW92cQltbTUsbW0xCisJcGFuZAltbTAsbW02CisJcHNybHcJbW00LEJZVEVfQklUCisJcGFuZAltbTEsbW02CisJcHNybHcJbW01LEJZVEVfQklUCisJcGFkZHcJbW0wLG1tNAorCXBhZGR3CW1tMSxtbTUKKworCW1vdnEJbW00LG1tMgorCW1vdnEJbW01LG1tMworCXBhbmQJbW0yLG1tNgorCXBzcmx3CW1tNCxCWVRFX0JJVAorCXBhbmQJbW0zLG1tNgorCXBzcmx3CW1tNSxCWVRFX0JJVAorCXBhZGR3CW1tMixtbTQKKwlwYWRkdwltbTMsbW01CisKKwlwYWRkdwltbTAsbW0xCisJcGFkZHcJbW0yLG1tMworCXBhZGR3CW1tMCxtbTcKKwlwYWRkdwltbTIsbW03CisJcHNybHcJbW0wLDIKKwlwc3JsdwltbTIsMgorCisJcGFja3Vzd2IgbW0wLG1tMgorCisJbW92cQlNTVdPUkQgW2VkaSswKlNJWkVPRl9NTVdPUkRdLCBtbTAKKworCWFkZAllZHgsIGJ5dGUgMipTSVpFT0ZfTU1XT1JECTsgaW5wdHIwCisJYWRkCWVzaSwgYnl0ZSAyKlNJWkVPRl9NTVdPUkQJOyBpbnB0cjEKKwlhZGQJZWRpLCBieXRlIDEqU0laRU9GX01NV09SRAk7IG91dHB0cgorCXN1YgllY3gsIGJ5dGUgU0laRU9GX01NV09SRAkJOyBvdXRjb2wKKwlqbnoJbmVhciAuY29sdW1ubG9vcAorCisJcG9wCWVzaQorCXBvcAllZGkKKwlwb3AJZWN4CisKKwlhZGQJZXNpLCBieXRlIDIqU0laRU9GX0pTQU1QUk9XCTsgaW5wdXRfZGF0YQorCWFkZAllZGksIGJ5dGUgMSpTSVpFT0ZfSlNBTVBST1cJOyBvdXRwdXRfZGF0YQorCWRlYwllYXgJCQkJOyByb3djdHIKKwlqZwluZWFyIC5yb3dsb29wCisKKwllbW1zCQk7IGVtcHR5IE1NWCBzdGF0ZQorCisucmV0dXJuOgorCXBvcAllZGkKKwlwb3AJZXNpCis7CXBvcAllZHgJCTsgbmVlZCBub3QgYmUgcHJlc2VydmVkCis7CXBvcAllY3gJCTsgbmVlZCBub3QgYmUgcHJlc2VydmVkCis7CXBvcAllYngJCTsgdW51c2VkCisJcG9wCWVicAorCXJldAorCis7IEZvciBzb21lIHJlYXNvbiwgdGhlIE9TIFggbGlua2VyIGRvZXMgbm90IGhvbm9yIHRoZSByZXF1ZXN0IHRvIGFsaWduIHRoZQorOyBzZWdtZW50IHVubGVzcyB3ZSBkbyB0aGlzLgorCWFsaWduCTE2CmRpZmYgLS1naXQgYS9zaW1kL2pjc2Ftc3MyLTY0LmFzbSBiL3NpbWQvamNzYW1zczItNjQuYXNtCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjZhMTZkYzUKLS0tIC9kZXYvbnVsbAorKysgYi9zaW1kL2pjc2Ftc3MyLTY0LmFzbQpAQCAtMCwwICsxLDMzMCBAQAorOworOyBqY3NhbXNzMi02NC5hc20gLSBkb3duc2FtcGxpbmcgKDY0LWJpdCBTU0UyKQorOworOyBDb3B5cmlnaHQgMjAwOSBQaWVycmUgT3NzbWFuIDxvc3NtYW5AY2VuZGlvLnNlPiBmb3IgQ2VuZGlvIEFCCis7IENvcHlyaWdodCAyMDA5IEQuIFIuIENvbW1hbmRlcgorOworOyBCYXNlZCBvbgorOyB4ODYgU0lNRCBleHRlbnNpb24gZm9yIElKRyBKUEVHIGxpYnJhcnkKKzsgQ29weXJpZ2h0IChDKSAxOTk5LTIwMDYsIE1JWUFTQUtBIE1hc2FydS4KKzsgRm9yIGNvbmRpdGlvbnMgb2YgZGlzdHJpYnV0aW9uIGFuZCB1c2UsIHNlZSBjb3B5cmlnaHQgbm90aWNlIGluIGpzaW1kZXh0LmluYworOworOyBUaGlzIGZpbGUgc2hvdWxkIGJlIGFzc2VtYmxlZCB3aXRoIE5BU00gKE5ldHdpZGUgQXNzZW1ibGVyKSwKKzsgY2FuICpub3QqIGJlIGFzc2VtYmxlZCB3aXRoIE1pY3Jvc29mdCdzIE1BU00gb3IgYW55IGNvbXBhdGlibGUKKzsgYXNzZW1ibGVyIChpbmNsdWRpbmcgQm9ybGFuZCdzIFR1cmJvIEFzc2VtYmxlcikuCis7IE5BU00gaXMgYXZhaWxhYmxlIGZyb20gaHR0cDovL25hc20uc291cmNlZm9yZ2UubmV0LyBvcgorOyBodHRwOi8vc291cmNlZm9yZ2UubmV0L3Byb2plY3Qvc2hvd2ZpbGVzLnBocD9ncm91cF9pZD02MjA4Cis7Cis7IFtUQUI4XQorCislaW5jbHVkZSAianNpbWRleHQuaW5jIgorCis7IC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisJU0VDVElPTglTRUdfVEVYVAorCUJJVFMJNjQKKzsKKzsgRG93bnNhbXBsZSBwaXhlbCB2YWx1ZXMgb2YgYSBzaW5nbGUgY29tcG9uZW50LgorOyBUaGlzIHZlcnNpb24gaGFuZGxlcyB0aGUgY29tbW9uIGNhc2Ugb2YgMjoxIGhvcml6b250YWwgYW5kIDE6MSB2ZXJ0aWNhbCwKKzsgd2l0aG91dCBzbW9vdGhpbmcuCis7Cis7IEdMT0JBTCh2b2lkKQorOyBqc2ltZF9oMnYxX2Rvd25zYW1wbGVfc3NlMiAoSkRJTUVOU0lPTiBpbWFnZV93aWR0aCwgaW50IG1heF92X3NhbXBfZmFjdG9yLAorOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSkRJTUVOU0lPTiB2X3NhbXBfZmFjdG9yLCBKRElNRU5TSU9OIHdpZHRoX2Jsb2NrcywKKzsgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEpTQU1QQVJSQVkgaW5wdXRfZGF0YSwgSlNBTVBBUlJBWSBvdXRwdXRfZGF0YSk7Cis7CisKKzsgcjEwID0gSkRJTUVOU0lPTiBpbWFnZV93aWR0aAorOyByMTEgPSBpbnQgbWF4X3Zfc2FtcF9mYWN0b3IKKzsgcjEyID0gSkRJTUVOU0lPTiB2X3NhbXBfZmFjdG9yCis7IHIxMyA9IEpESU1FTlNJT04gd2lkdGhfYmxvY2tzCis7IHIxNCA9IEpTQU1QQVJSQVkgaW5wdXRfZGF0YQorOyByMTUgPSBKU0FNUEFSUkFZIG91dHB1dF9kYXRhCisKKwlhbGlnbgkxNgorCWdsb2JhbAlFWFROKGpzaW1kX2gydjFfZG93bnNhbXBsZV9zc2UyKQorCitFWFROKGpzaW1kX2gydjFfZG93bnNhbXBsZV9zc2UyKToKKwlwdXNoCXJicAorCW1vdglyYXgscnNwCisJbW92CXJicCxyc3AKKwljb2xsZWN0X2FyZ3MKKworCW1vdiByY3gsIHIxMworCXNobAlyY3gsMwkJCTsgaW11bCByY3gsRENUU0laRSAocmN4ID0gb3V0cHV0X2NvbHMpCisJanoJbmVhciAucmV0dXJuCisKKwltb3YgcmR4LCByMTAKKworCTsgLS0gZXhwYW5kX3JpZ2h0X2VkZ2UKKworCXB1c2gJcmN4CisJc2hsCXJjeCwxCQkJCTsgb3V0cHV0X2NvbHMgKiAyCisJc3ViCXJjeCxyZHgKKwlqbGUJc2hvcnQgLmV4cGFuZF9lbmQKKworCW1vdglyYXgsIHIxMQorCXRlc3QJcmF4LHJheAorCWpsZQlzaG9ydCAuZXhwYW5kX2VuZAorCisJY2xkCisJbW92CXJzaSwgcjE0CTsgaW5wdXRfZGF0YQorLmV4cGFuZGxvb3A6CisJcHVzaAlyYXgKKwlwdXNoCXJjeAorCisJbW92CXJkaSwgSlNBTVBST1cgW3JzaV0KKwlhZGQJcmRpLHJkeAorCW1vdglhbCwgSlNBTVBMRSBbcmRpLTFdCisKKwlyZXAgc3Rvc2IKKworCXBvcAlyY3gKKwlwb3AJcmF4CisKKwlhZGQJcnNpLCBieXRlIFNJWkVPRl9KU0FNUFJPVworCWRlYwlyYXgKKwlqZwlzaG9ydCAuZXhwYW5kbG9vcAorCisuZXhwYW5kX2VuZDoKKwlwb3AJcmN4CQkJCTsgb3V0cHV0X2NvbHMKKworCTsgLS0gaDJ2MV9kb3duc2FtcGxlCisKKwltb3YJcmF4LCByMTIJOyByb3djdHIKKwl0ZXN0CWVheCxlYXgKKwlqbGUJbmVhciAucmV0dXJuCisKKwltb3YJcmR4LCAweDAwMDEwMDAwCQk7IGJpYXMgcGF0dGVybgorCW1vdmQJeG1tNyxlZHgKKwlwY21wZXF3CXhtbTYseG1tNgorCXBzaHVmZAl4bW03LHhtbTcsMHgwMAkJOyB4bW03PXswLCAxLCAwLCAxLCAwLCAxLCAwLCAxfQorCXBzcmx3CXhtbTYsQllURV9CSVQJCTsgeG1tNj17MHhGRiAweDAwIDB4RkYgMHgwMCAuLn0KKworCW1vdglyc2ksIHIxNAk7IGlucHV0X2RhdGEKKwltb3YJcmRpLCByMTUJOyBvdXRwdXRfZGF0YQorLnJvd2xvb3A6CisJcHVzaAlyY3gKKwlwdXNoCXJkaQorCXB1c2gJcnNpCisKKwltb3YJcnNpLCBKU0FNUFJPVyBbcnNpXQkJOyBpbnB0cgorCW1vdiByZGksIEpTQU1QUk9XIFtyZGldCQk7IG91dHB0cgorCisJY21wCXJjeCwgYnl0ZSBTSVpFT0ZfWE1NV09SRAorCWphZQlzaG9ydCAuY29sdW1ubG9vcAorCisuY29sdW1ubG9vcF9yODoKKwltb3ZkcWEJeG1tMCwgWE1NV09SRCBbcnNpKzAqU0laRU9GX1hNTVdPUkRdCisJcHhvcgl4bW0xLHhtbTEKKwltb3YJcmN4LCBTSVpFT0ZfWE1NV09SRAorCWptcAlzaG9ydCAuZG93bnNhbXBsZQorCisuY29sdW1ubG9vcDoKKwltb3ZkcWEJeG1tMCwgWE1NV09SRCBbcnNpKzAqU0laRU9GX1hNTVdPUkRdCisJbW92ZHFhCXhtbTEsIFhNTVdPUkQgW3JzaSsxKlNJWkVPRl9YTU1XT1JEXQorCisuZG93bnNhbXBsZToKKwltb3ZkcWEJeG1tMix4bW0wCisJbW92ZHFhCXhtbTMseG1tMQorCisJcGFuZAl4bW0wLHhtbTYKKwlwc3Jsdwl4bW0yLEJZVEVfQklUCisJcGFuZAl4bW0xLHhtbTYKKwlwc3Jsdwl4bW0zLEJZVEVfQklUCisKKwlwYWRkdwl4bW0wLHhtbTIKKwlwYWRkdwl4bW0xLHhtbTMKKwlwYWRkdwl4bW0wLHhtbTcKKwlwYWRkdwl4bW0xLHhtbTcKKwlwc3Jsdwl4bW0wLDEKKwlwc3Jsdwl4bW0xLDEKKworCXBhY2t1c3diIHhtbTAseG1tMQorCisJbW92ZHFhCVhNTVdPUkQgW3JkaSswKlNJWkVPRl9YTU1XT1JEXSwgeG1tMAorCisJc3ViCXJjeCwgYnl0ZSBTSVpFT0ZfWE1NV09SRAk7IG91dGNvbAorCWFkZAlyc2ksIGJ5dGUgMipTSVpFT0ZfWE1NV09SRAk7IGlucHRyCisJYWRkCXJkaSwgYnl0ZSAxKlNJWkVPRl9YTU1XT1JECTsgb3V0cHRyCisJY21wCXJjeCwgYnl0ZSBTSVpFT0ZfWE1NV09SRAorCWphZQlzaG9ydCAuY29sdW1ubG9vcAorCXRlc3QJcmN4LHJjeAorCWpueglzaG9ydCAuY29sdW1ubG9vcF9yOAorCisJcG9wCXJzaQorCXBvcAlyZGkKKwlwb3AJcmN4CisKKwlhZGQJcnNpLCBieXRlIFNJWkVPRl9KU0FNUFJPVwk7IGlucHV0X2RhdGEKKwlhZGQJcmRpLCBieXRlIFNJWkVPRl9KU0FNUFJPVwk7IG91dHB1dF9kYXRhCisJZGVjCXJheAkJCQk7IHJvd2N0cgorCWpnCW5lYXIgLnJvd2xvb3AKKworLnJldHVybjoKKwl1bmNvbGxlY3RfYXJncworCXBvcAlyYnAKKwlyZXQKKworOyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorOworOyBEb3duc2FtcGxlIHBpeGVsIHZhbHVlcyBvZiBhIHNpbmdsZSBjb21wb25lbnQuCis7IFRoaXMgdmVyc2lvbiBoYW5kbGVzIHRoZSBzdGFuZGFyZCBjYXNlIG9mIDI6MSBob3Jpem9udGFsIGFuZCAyOjEgdmVydGljYWwsCis7IHdpdGhvdXQgc21vb3RoaW5nLgorOworOyBHTE9CQUwodm9pZCkKKzsganNpbWRfaDJ2Ml9kb3duc2FtcGxlX3NzZTIgKEpESU1FTlNJT04gaW1hZ2Vfd2lkdGgsIGludCBtYXhfdl9zYW1wX2ZhY3RvciwKKzsgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEpESU1FTlNJT04gdl9zYW1wX2ZhY3RvciwgSkRJTUVOU0lPTiB3aWR0aF9ibG9ja3MsCis7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBKU0FNUEFSUkFZIGlucHV0X2RhdGEsIEpTQU1QQVJSQVkgb3V0cHV0X2RhdGEpOworOworCis7IHIxMCA9IEpESU1FTlNJT04gaW1hZ2Vfd2lkdGgKKzsgcjExID0gaW50IG1heF92X3NhbXBfZmFjdG9yCis7IHIxMiA9IEpESU1FTlNJT04gdl9zYW1wX2ZhY3RvcgorOyByMTMgPSBKRElNRU5TSU9OIHdpZHRoX2Jsb2NrcworOyByMTQgPSBKU0FNUEFSUkFZIGlucHV0X2RhdGEKKzsgcjE1ID0gSlNBTVBBUlJBWSBvdXRwdXRfZGF0YQorCisJYWxpZ24JMTYKKwlnbG9iYWwJRVhUTihqc2ltZF9oMnYyX2Rvd25zYW1wbGVfc3NlMikKKworRVhUTihqc2ltZF9oMnYyX2Rvd25zYW1wbGVfc3NlMik6CisJcHVzaAlyYnAKKwltb3YJcmF4LHJzcAorCW1vdglyYnAscnNwCisJY29sbGVjdF9hcmdzCisKKwltb3YJcmN4LCByMTMKKwlzaGwJcmN4LDMJCQk7IGltdWwgcmN4LERDVFNJWkUgKHJjeCA9IG91dHB1dF9jb2xzKQorCWp6CW5lYXIgLnJldHVybgorCisJbW92CXJkeCwgcjEwCisKKwk7IC0tIGV4cGFuZF9yaWdodF9lZGdlCisKKwlwdXNoCXJjeAorCXNobAlyY3gsMQkJCQk7IG91dHB1dF9jb2xzICogMgorCXN1YglyY3gscmR4CisJamxlCXNob3J0IC5leHBhbmRfZW5kCisKKwltb3YJcmF4LCByMTEKKwl0ZXN0CXJheCxyYXgKKwlqbGUJc2hvcnQgLmV4cGFuZF9lbmQKKworCWNsZAorCW1vdglyc2ksIHIxNAk7IGlucHV0X2RhdGEKKy5leHBhbmRsb29wOgorCXB1c2gJcmF4CisJcHVzaAlyY3gKKworCW1vdglyZGksIEpTQU1QUk9XIFtyc2ldCisJYWRkCXJkaSxyZHgKKwltb3YJYWwsIEpTQU1QTEUgW3JkaS0xXQorCisJcmVwIHN0b3NiCisKKwlwb3AJcmN4CisJcG9wCXJheAorCisJYWRkCXJzaSwgYnl0ZSBTSVpFT0ZfSlNBTVBST1cKKwlkZWMJcmF4CisJamcJc2hvcnQgLmV4cGFuZGxvb3AKKworLmV4cGFuZF9lbmQ6CisJcG9wCXJjeAkJCQk7IG91dHB1dF9jb2xzCisKKwk7IC0tIGgydjJfZG93bnNhbXBsZQorCisJbW92CXJheCwgcjEyCTsgcm93Y3RyCisJdGVzdAlyYXgscmF4CisJamxlCW5lYXIgLnJldHVybgorCisJbW92CXJkeCwgMHgwMDAyMDAwMQkJOyBiaWFzIHBhdHRlcm4KKwltb3ZkCXhtbTcsZWR4CisJcGNtcGVxdwl4bW02LHhtbTYKKwlwc2h1ZmQJeG1tNyx4bW03LDB4MDAJCTsgeG1tNz17MSwgMiwgMSwgMiwgMSwgMiwgMSwgMn0KKwlwc3Jsdwl4bW02LEJZVEVfQklUCQk7IHhtbTY9ezB4RkYgMHgwMCAweEZGIDB4MDAgLi59CisKKwltb3YJcnNpLCByMTQJOyBpbnB1dF9kYXRhCisJbW92CXJkaSwgcjE1CTsgb3V0cHV0X2RhdGEKKy5yb3dsb29wOgorCXB1c2gJcmN4CisJcHVzaAlyZGkKKwlwdXNoCXJzaQorCisJbW92CXJkeCwgSlNBTVBST1cgW3JzaSswKlNJWkVPRl9KU0FNUFJPV10JOyBpbnB0cjAKKwltb3YJcnNpLCBKU0FNUFJPVyBbcnNpKzEqU0laRU9GX0pTQU1QUk9XXQk7IGlucHRyMQorCW1vdglyZGksIEpTQU1QUk9XIFtyZGldCQkJOyBvdXRwdHIKKworCWNtcAlyY3gsIGJ5dGUgU0laRU9GX1hNTVdPUkQKKwlqYWUJc2hvcnQgLmNvbHVtbmxvb3AKKworLmNvbHVtbmxvb3Bfcjg6CisJbW92ZHFhCXhtbTAsIFhNTVdPUkQgW3JkeCswKlNJWkVPRl9YTU1XT1JEXQorCW1vdmRxYQl4bW0xLCBYTU1XT1JEIFtyc2krMCpTSVpFT0ZfWE1NV09SRF0KKwlweG9yCXhtbTIseG1tMgorCXB4b3IJeG1tMyx4bW0zCisJbW92CXJjeCwgU0laRU9GX1hNTVdPUkQKKwlqbXAJc2hvcnQgLmRvd25zYW1wbGUKKworLmNvbHVtbmxvb3A6CisJbW92ZHFhCXhtbTAsIFhNTVdPUkQgW3JkeCswKlNJWkVPRl9YTU1XT1JEXQorCW1vdmRxYQl4bW0xLCBYTU1XT1JEIFtyc2krMCpTSVpFT0ZfWE1NV09SRF0KKwltb3ZkcWEJeG1tMiwgWE1NV09SRCBbcmR4KzEqU0laRU9GX1hNTVdPUkRdCisJbW92ZHFhCXhtbTMsIFhNTVdPUkQgW3JzaSsxKlNJWkVPRl9YTU1XT1JEXQorCisuZG93bnNhbXBsZToKKwltb3ZkcWEJeG1tNCx4bW0wCisJbW92ZHFhCXhtbTUseG1tMQorCXBhbmQJeG1tMCx4bW02CisJcHNybHcJeG1tNCxCWVRFX0JJVAorCXBhbmQJeG1tMSx4bW02CisJcHNybHcJeG1tNSxCWVRFX0JJVAorCXBhZGR3CXhtbTAseG1tNAorCXBhZGR3CXhtbTEseG1tNQorCisJbW92ZHFhCXhtbTQseG1tMgorCW1vdmRxYQl4bW01LHhtbTMKKwlwYW5kCXhtbTIseG1tNgorCXBzcmx3CXhtbTQsQllURV9CSVQKKwlwYW5kCXhtbTMseG1tNgorCXBzcmx3CXhtbTUsQllURV9CSVQKKwlwYWRkdwl4bW0yLHhtbTQKKwlwYWRkdwl4bW0zLHhtbTUKKworCXBhZGR3CXhtbTAseG1tMQorCXBhZGR3CXhtbTIseG1tMworCXBhZGR3CXhtbTAseG1tNworCXBhZGR3CXhtbTIseG1tNworCXBzcmx3CXhtbTAsMgorCXBzcmx3CXhtbTIsMgorCisJcGFja3Vzd2IgeG1tMCx4bW0yCisKKwltb3ZkcWEJWE1NV09SRCBbcmRpKzAqU0laRU9GX1hNTVdPUkRdLCB4bW0wCisKKwlzdWIJcmN4LCBieXRlIFNJWkVPRl9YTU1XT1JECTsgb3V0Y29sCisJYWRkCXJkeCwgYnl0ZSAyKlNJWkVPRl9YTU1XT1JECTsgaW5wdHIwCisJYWRkCXJzaSwgYnl0ZSAyKlNJWkVPRl9YTU1XT1JECTsgaW5wdHIxCisJYWRkCXJkaSwgYnl0ZSAxKlNJWkVPRl9YTU1XT1JECTsgb3V0cHRyCisJY21wCXJjeCwgYnl0ZSBTSVpFT0ZfWE1NV09SRAorCWphZQluZWFyIC5jb2x1bW5sb29wCisJdGVzdAlyY3gscmN4CisJam56CW5lYXIgLmNvbHVtbmxvb3BfcjgKKworCXBvcAlyc2kKKwlwb3AJcmRpCisJcG9wCXJjeAorCisJYWRkCXJzaSwgYnl0ZSAyKlNJWkVPRl9KU0FNUFJPVwk7IGlucHV0X2RhdGEKKwlhZGQJcmRpLCBieXRlIDEqU0laRU9GX0pTQU1QUk9XCTsgb3V0cHV0X2RhdGEKKwlkZWMJcmF4CQkJCTsgcm93Y3RyCisJamcJbmVhciAucm93bG9vcAorCisucmV0dXJuOgorCXVuY29sbGVjdF9hcmdzCisJcG9wCXJicAorCXJldAorCis7IEZvciBzb21lIHJlYXNvbiwgdGhlIE9TIFggbGlua2VyIGRvZXMgbm90IGhvbm9yIHRoZSByZXF1ZXN0IHRvIGFsaWduIHRoZQorOyBzZWdtZW50IHVubGVzcyB3ZSBkbyB0aGlzLgorCWFsaWduCTE2CmRpZmYgLS1naXQgYS9zaW1kL2pjc2Ftc3MyLmFzbSBiL3NpbWQvamNzYW1zczIuYXNtCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjgxOGU5MTEKLS0tIC9kZXYvbnVsbAorKysgYi9zaW1kL2pjc2Ftc3MyLmFzbQpAQCAtMCwwICsxLDM1MSBAQAorOworOyBqY3NhbXNzMi5hc20gLSBkb3duc2FtcGxpbmcgKFNTRTIpCis7Cis7IENvcHlyaWdodCAyMDA5IFBpZXJyZSBPc3NtYW4gPG9zc21hbkBjZW5kaW8uc2U+IGZvciBDZW5kaW8gQUIKKzsKKzsgQmFzZWQgb24KKzsgeDg2IFNJTUQgZXh0ZW5zaW9uIGZvciBJSkcgSlBFRyBsaWJyYXJ5Cis7IENvcHlyaWdodCAoQykgMTk5OS0yMDA2LCBNSVlBU0FLQSBNYXNhcnUuCis7IEZvciBjb25kaXRpb25zIG9mIGRpc3RyaWJ1dGlvbiBhbmQgdXNlLCBzZWUgY29weXJpZ2h0IG5vdGljZSBpbiBqc2ltZGV4dC5pbmMKKzsKKzsgVGhpcyBmaWxlIHNob3VsZCBiZSBhc3NlbWJsZWQgd2l0aCBOQVNNIChOZXR3aWRlIEFzc2VtYmxlciksCis7IGNhbiAqbm90KiBiZSBhc3NlbWJsZWQgd2l0aCBNaWNyb3NvZnQncyBNQVNNIG9yIGFueSBjb21wYXRpYmxlCis7IGFzc2VtYmxlciAoaW5jbHVkaW5nIEJvcmxhbmQncyBUdXJibyBBc3NlbWJsZXIpLgorOyBOQVNNIGlzIGF2YWlsYWJsZSBmcm9tIGh0dHA6Ly9uYXNtLnNvdXJjZWZvcmdlLm5ldC8gb3IKKzsgaHR0cDovL3NvdXJjZWZvcmdlLm5ldC9wcm9qZWN0L3Nob3dmaWxlcy5waHA/Z3JvdXBfaWQ9NjIwOAorOworOyBbVEFCOF0KKworJWluY2x1ZGUgImpzaW1kZXh0LmluYyIKKworOyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCVNFQ1RJT04JU0VHX1RFWFQKKwlCSVRTCTMyCis7Cis7IERvd25zYW1wbGUgcGl4ZWwgdmFsdWVzIG9mIGEgc2luZ2xlIGNvbXBvbmVudC4KKzsgVGhpcyB2ZXJzaW9uIGhhbmRsZXMgdGhlIGNvbW1vbiBjYXNlIG9mIDI6MSBob3Jpem9udGFsIGFuZCAxOjEgdmVydGljYWwsCis7IHdpdGhvdXQgc21vb3RoaW5nLgorOworOyBHTE9CQUwodm9pZCkKKzsganNpbWRfaDJ2MV9kb3duc2FtcGxlX3NzZTIgKEpESU1FTlNJT04gaW1hZ2Vfd2lkdGgsIGludCBtYXhfdl9zYW1wX2ZhY3RvciwKKzsgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEpESU1FTlNJT04gdl9zYW1wX2ZhY3RvciwgSkRJTUVOU0lPTiB3aWR0aF9ibG9ja3MsCis7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBKU0FNUEFSUkFZIGlucHV0X2RhdGEsIEpTQU1QQVJSQVkgb3V0cHV0X2RhdGEpOworOworCislZGVmaW5lIGltZ193aWR0aChiKQkoYikrOAkJCTsgSkRJTUVOU0lPTiBpbWFnZV93aWR0aAorJWRlZmluZSBtYXhfdl9zYW1wKGIpCShiKSsxMgkJOyBpbnQgbWF4X3Zfc2FtcF9mYWN0b3IKKyVkZWZpbmUgdl9zYW1wKGIpCQkJKGIpKzE2CQk7IEpESU1FTlNJT04gdl9zYW1wX2ZhY3RvcgorJWRlZmluZSB3aWR0aF9ibGtzKGIpCShiKSsyMAkJOyBKRElNRU5TSU9OIHdpZHRoX2Jsb2NrcworJWRlZmluZSBpbnB1dF9kYXRhKGIpCShiKSsyNAkJOyBKU0FNUEFSUkFZIGlucHV0X2RhdGEKKyVkZWZpbmUgb3V0cHV0X2RhdGEoYikJKGIpKzI4CQk7IEpTQU1QQVJSQVkgb3V0cHV0X2RhdGEKKworCWFsaWduCTE2CisJZ2xvYmFsCUVYVE4oanNpbWRfaDJ2MV9kb3duc2FtcGxlX3NzZTIpCisKK0VYVE4oanNpbWRfaDJ2MV9kb3duc2FtcGxlX3NzZTIpOgorCXB1c2gJZWJwCisJbW92CWVicCxlc3AKKzsJcHVzaAllYngJCTsgdW51c2VkCis7CXB1c2gJZWN4CQk7IG5lZWQgbm90IGJlIHByZXNlcnZlZAorOwlwdXNoCWVkeAkJOyBuZWVkIG5vdCBiZSBwcmVzZXJ2ZWQKKwlwdXNoCWVzaQorCXB1c2gJZWRpCisKKwltb3YJZWN4LCBKRElNRU5TSU9OIFt3aWR0aF9ibGtzKGVicCldCisJc2hsCWVjeCwzCQkJOyBpbXVsIGVjeCxEQ1RTSVpFIChlY3ggPSBvdXRwdXRfY29scykKKwlqegluZWFyIC5yZXR1cm4KKworCW1vdgllZHgsIEpESU1FTlNJT04gW2ltZ193aWR0aChlYnApXQorCisJOyAtLSBleHBhbmRfcmlnaHRfZWRnZQorCisJcHVzaAllY3gKKwlzaGwJZWN4LDEJCQkJOyBvdXRwdXRfY29scyAqIDIKKwlzdWIJZWN4LGVkeAorCWpsZQlzaG9ydCAuZXhwYW5kX2VuZAorCisJbW92CWVheCwgSU5UIFttYXhfdl9zYW1wKGVicCldCisJdGVzdAllYXgsZWF4CisJamxlCXNob3J0IC5leHBhbmRfZW5kCisKKwljbGQKKwltb3YJZXNpLCBKU0FNUEFSUkFZIFtpbnB1dF9kYXRhKGVicCldCTsgaW5wdXRfZGF0YQorCWFsaWdueAkxNiw3CisuZXhwYW5kbG9vcDoKKwlwdXNoCWVheAorCXB1c2gJZWN4CisKKwltb3YJZWRpLCBKU0FNUFJPVyBbZXNpXQorCWFkZAllZGksZWR4CisJbW92CWFsLCBKU0FNUExFIFtlZGktMV0KKworCXJlcCBzdG9zYgorCisJcG9wCWVjeAorCXBvcAllYXgKKworCWFkZAllc2ksIGJ5dGUgU0laRU9GX0pTQU1QUk9XCisJZGVjCWVheAorCWpnCXNob3J0IC5leHBhbmRsb29wCisKKy5leHBhbmRfZW5kOgorCXBvcAllY3gJCQkJOyBvdXRwdXRfY29scworCisJOyAtLSBoMnYxX2Rvd25zYW1wbGUKKworCW1vdgllYXgsIEpESU1FTlNJT04gW3Zfc2FtcChlYnApXQk7IHJvd2N0cgorCXRlc3QJZWF4LGVheAorCWpsZQluZWFyIC5yZXR1cm4KKworCW1vdgllZHgsIDB4MDAwMTAwMDAJCTsgYmlhcyBwYXR0ZXJuCisJbW92ZAl4bW03LGVkeAorCXBjbXBlcXcJeG1tNix4bW02CisJcHNodWZkCXhtbTcseG1tNywweDAwCQk7IHhtbTc9ezAsIDEsIDAsIDEsIDAsIDEsIDAsIDF9CisJcHNybHcJeG1tNixCWVRFX0JJVAkJOyB4bW02PXsweEZGIDB4MDAgMHhGRiAweDAwIC4ufQorCisJbW92CWVzaSwgSlNBTVBBUlJBWSBbaW5wdXRfZGF0YShlYnApXQk7IGlucHV0X2RhdGEKKwltb3YJZWRpLCBKU0FNUEFSUkFZIFtvdXRwdXRfZGF0YShlYnApXQk7IG91dHB1dF9kYXRhCisJYWxpZ254CTE2LDcKKy5yb3dsb29wOgorCXB1c2gJZWN4CisJcHVzaAllZGkKKwlwdXNoCWVzaQorCisJbW92CWVzaSwgSlNBTVBST1cgW2VzaV0JCTsgaW5wdHIKKwltb3YJZWRpLCBKU0FNUFJPVyBbZWRpXQkJOyBvdXRwdHIKKworCWNtcAllY3gsIGJ5dGUgU0laRU9GX1hNTVdPUkQKKwlqYWUJc2hvcnQgLmNvbHVtbmxvb3AKKwlhbGlnbngJMTYsNworCisuY29sdW1ubG9vcF9yODoKKwltb3ZkcWEJeG1tMCwgWE1NV09SRCBbZXNpKzAqU0laRU9GX1hNTVdPUkRdCisJcHhvcgl4bW0xLHhtbTEKKwltb3YJZWN4LCBTSVpFT0ZfWE1NV09SRAorCWptcAlzaG9ydCAuZG93bnNhbXBsZQorCWFsaWdueAkxNiw3CisKKy5jb2x1bW5sb29wOgorCW1vdmRxYQl4bW0wLCBYTU1XT1JEIFtlc2krMCpTSVpFT0ZfWE1NV09SRF0KKwltb3ZkcWEJeG1tMSwgWE1NV09SRCBbZXNpKzEqU0laRU9GX1hNTVdPUkRdCisKKy5kb3duc2FtcGxlOgorCW1vdmRxYQl4bW0yLHhtbTAKKwltb3ZkcWEJeG1tMyx4bW0xCisKKwlwYW5kCXhtbTAseG1tNgorCXBzcmx3CXhtbTIsQllURV9CSVQKKwlwYW5kCXhtbTEseG1tNgorCXBzcmx3CXhtbTMsQllURV9CSVQKKworCXBhZGR3CXhtbTAseG1tMgorCXBhZGR3CXhtbTEseG1tMworCXBhZGR3CXhtbTAseG1tNworCXBhZGR3CXhtbTEseG1tNworCXBzcmx3CXhtbTAsMQorCXBzcmx3CXhtbTEsMQorCisJcGFja3Vzd2IgeG1tMCx4bW0xCisKKwltb3ZkcWEJWE1NV09SRCBbZWRpKzAqU0laRU9GX1hNTVdPUkRdLCB4bW0wCisKKwlzdWIJZWN4LCBieXRlIFNJWkVPRl9YTU1XT1JECTsgb3V0Y29sCisJYWRkCWVzaSwgYnl0ZSAyKlNJWkVPRl9YTU1XT1JECTsgaW5wdHIKKwlhZGQJZWRpLCBieXRlIDEqU0laRU9GX1hNTVdPUkQJOyBvdXRwdHIKKwljbXAJZWN4LCBieXRlIFNJWkVPRl9YTU1XT1JECisJamFlCXNob3J0IC5jb2x1bW5sb29wCisJdGVzdAllY3gsZWN4CisJam56CXNob3J0IC5jb2x1bW5sb29wX3I4CisKKwlwb3AJZXNpCisJcG9wCWVkaQorCXBvcAllY3gKKworCWFkZAllc2ksIGJ5dGUgU0laRU9GX0pTQU1QUk9XCTsgaW5wdXRfZGF0YQorCWFkZAllZGksIGJ5dGUgU0laRU9GX0pTQU1QUk9XCTsgb3V0cHV0X2RhdGEKKwlkZWMJZWF4CQkJCTsgcm93Y3RyCisJamcJbmVhciAucm93bG9vcAorCisucmV0dXJuOgorCXBvcAllZGkKKwlwb3AJZXNpCis7CXBvcAllZHgJCTsgbmVlZCBub3QgYmUgcHJlc2VydmVkCis7CXBvcAllY3gJCTsgbmVlZCBub3QgYmUgcHJlc2VydmVkCis7CXBvcAllYngJCTsgdW51c2VkCisJcG9wCWVicAorCXJldAorCis7IC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCis7Cis7IERvd25zYW1wbGUgcGl4ZWwgdmFsdWVzIG9mIGEgc2luZ2xlIGNvbXBvbmVudC4KKzsgVGhpcyB2ZXJzaW9uIGhhbmRsZXMgdGhlIHN0YW5kYXJkIGNhc2Ugb2YgMjoxIGhvcml6b250YWwgYW5kIDI6MSB2ZXJ0aWNhbCwKKzsgd2l0aG91dCBzbW9vdGhpbmcuCis7Cis7IEdMT0JBTCh2b2lkKQorOyBqc2ltZF9oMnYyX2Rvd25zYW1wbGVfc3NlMiAoSkRJTUVOU0lPTiBpbWFnZV93aWR0aCwgaW50IG1heF92X3NhbXBfZmFjdG9yLAorOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSkRJTUVOU0lPTiB2X3NhbXBfZmFjdG9yLCBKRElNRU5TSU9OIHdpZHRoX2Jsb2NrcywKKzsgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEpTQU1QQVJSQVkgaW5wdXRfZGF0YSwgSlNBTVBBUlJBWSBvdXRwdXRfZGF0YSk7Cis7CisKKyVkZWZpbmUgaW1nX3dpZHRoKGIpCShiKSs4CQkJOyBKRElNRU5TSU9OIGltYWdlX3dpZHRoCislZGVmaW5lIG1heF92X3NhbXAoYikJKGIpKzEyCQk7IGludCBtYXhfdl9zYW1wX2ZhY3RvcgorJWRlZmluZSB2X3NhbXAoYikJCQkoYikrMTYJCTsgSkRJTUVOU0lPTiB2X3NhbXBfZmFjdG9yCislZGVmaW5lIHdpZHRoX2Jsa3MoYikJKGIpKzIwCQk7IEpESU1FTlNJT04gd2lkdGhfYmxvY2tzCislZGVmaW5lIGlucHV0X2RhdGEoYikJKGIpKzI0CQk7IEpTQU1QQVJSQVkgaW5wdXRfZGF0YQorJWRlZmluZSBvdXRwdXRfZGF0YShiKQkoYikrMjgJOyBKU0FNUEFSUkFZIG91dHB1dF9kYXRhCisKKwlhbGlnbgkxNgorCWdsb2JhbAlFWFROKGpzaW1kX2gydjJfZG93bnNhbXBsZV9zc2UyKQorCitFWFROKGpzaW1kX2gydjJfZG93bnNhbXBsZV9zc2UyKToKKwlwdXNoCWVicAorCW1vdgllYnAsZXNwCis7CXB1c2gJZWJ4CQk7IHVudXNlZAorOwlwdXNoCWVjeAkJOyBuZWVkIG5vdCBiZSBwcmVzZXJ2ZWQKKzsJcHVzaAllZHgJCTsgbmVlZCBub3QgYmUgcHJlc2VydmVkCisJcHVzaAllc2kKKwlwdXNoCWVkaQorCisJbW92CWVjeCwgSkRJTUVOU0lPTiBbd2lkdGhfYmxrcyhlYnApXQorCXNobAllY3gsMwkJCTsgaW11bCBlY3gsRENUU0laRSAoZWN4ID0gb3V0cHV0X2NvbHMpCisJanoJbmVhciAucmV0dXJuCisKKwltb3YJZWR4LCBKRElNRU5TSU9OIFtpbWdfd2lkdGgoZWJwKV0KKworCTsgLS0gZXhwYW5kX3JpZ2h0X2VkZ2UKKworCXB1c2gJZWN4CisJc2hsCWVjeCwxCQkJCTsgb3V0cHV0X2NvbHMgKiAyCisJc3ViCWVjeCxlZHgKKwlqbGUJc2hvcnQgLmV4cGFuZF9lbmQKKworCW1vdgllYXgsIElOVCBbbWF4X3Zfc2FtcChlYnApXQorCXRlc3QJZWF4LGVheAorCWpsZQlzaG9ydCAuZXhwYW5kX2VuZAorCisJY2xkCisJbW92CWVzaSwgSlNBTVBBUlJBWSBbaW5wdXRfZGF0YShlYnApXQk7IGlucHV0X2RhdGEKKwlhbGlnbngJMTYsNworLmV4cGFuZGxvb3A6CisJcHVzaAllYXgKKwlwdXNoCWVjeAorCisJbW92CWVkaSwgSlNBTVBST1cgW2VzaV0KKwlhZGQJZWRpLGVkeAorCW1vdglhbCwgSlNBTVBMRSBbZWRpLTFdCisKKwlyZXAgc3Rvc2IKKworCXBvcAllY3gKKwlwb3AJZWF4CisKKwlhZGQJZXNpLCBieXRlIFNJWkVPRl9KU0FNUFJPVworCWRlYwllYXgKKwlqZwlzaG9ydCAuZXhwYW5kbG9vcAorCisuZXhwYW5kX2VuZDoKKwlwb3AJZWN4CQkJCTsgb3V0cHV0X2NvbHMKKworCTsgLS0gaDJ2Ml9kb3duc2FtcGxlCisKKwltb3YJZWF4LCBKRElNRU5TSU9OIFt2X3NhbXAoZWJwKV0JOyByb3djdHIKKwl0ZXN0CWVheCxlYXgKKwlqbGUJbmVhciAucmV0dXJuCisKKwltb3YJZWR4LCAweDAwMDIwMDAxCQk7IGJpYXMgcGF0dGVybgorCW1vdmQJeG1tNyxlZHgKKwlwY21wZXF3CXhtbTYseG1tNgorCXBzaHVmZAl4bW03LHhtbTcsMHgwMAkJOyB4bW03PXsxLCAyLCAxLCAyLCAxLCAyLCAxLCAyfQorCXBzcmx3CXhtbTYsQllURV9CSVQJCTsgeG1tNj17MHhGRiAweDAwIDB4RkYgMHgwMCAuLn0KKworCW1vdgllc2ksIEpTQU1QQVJSQVkgW2lucHV0X2RhdGEoZWJwKV0JOyBpbnB1dF9kYXRhCisJbW92CWVkaSwgSlNBTVBBUlJBWSBbb3V0cHV0X2RhdGEoZWJwKV0JOyBvdXRwdXRfZGF0YQorCWFsaWdueAkxNiw3Cisucm93bG9vcDoKKwlwdXNoCWVjeAorCXB1c2gJZWRpCisJcHVzaAllc2kKKworCW1vdgllZHgsIEpTQU1QUk9XIFtlc2krMCpTSVpFT0ZfSlNBTVBST1ddCTsgaW5wdHIwCisJbW92CWVzaSwgSlNBTVBST1cgW2VzaSsxKlNJWkVPRl9KU0FNUFJPV10JOyBpbnB0cjEKKwltb3YJZWRpLCBKU0FNUFJPVyBbZWRpXQkJCTsgb3V0cHRyCisKKwljbXAJZWN4LCBieXRlIFNJWkVPRl9YTU1XT1JECisJamFlCXNob3J0IC5jb2x1bW5sb29wCisJYWxpZ254CTE2LDcKKworLmNvbHVtbmxvb3Bfcjg6CisJbW92ZHFhCXhtbTAsIFhNTVdPUkQgW2VkeCswKlNJWkVPRl9YTU1XT1JEXQorCW1vdmRxYQl4bW0xLCBYTU1XT1JEIFtlc2krMCpTSVpFT0ZfWE1NV09SRF0KKwlweG9yCXhtbTIseG1tMgorCXB4b3IJeG1tMyx4bW0zCisJbW92CWVjeCwgU0laRU9GX1hNTVdPUkQKKwlqbXAJc2hvcnQgLmRvd25zYW1wbGUKKwlhbGlnbngJMTYsNworCisuY29sdW1ubG9vcDoKKwltb3ZkcWEJeG1tMCwgWE1NV09SRCBbZWR4KzAqU0laRU9GX1hNTVdPUkRdCisJbW92ZHFhCXhtbTEsIFhNTVdPUkQgW2VzaSswKlNJWkVPRl9YTU1XT1JEXQorCW1vdmRxYQl4bW0yLCBYTU1XT1JEIFtlZHgrMSpTSVpFT0ZfWE1NV09SRF0KKwltb3ZkcWEJeG1tMywgWE1NV09SRCBbZXNpKzEqU0laRU9GX1hNTVdPUkRdCisKKy5kb3duc2FtcGxlOgorCW1vdmRxYQl4bW00LHhtbTAKKwltb3ZkcWEJeG1tNSx4bW0xCisJcGFuZAl4bW0wLHhtbTYKKwlwc3Jsdwl4bW00LEJZVEVfQklUCisJcGFuZAl4bW0xLHhtbTYKKwlwc3Jsdwl4bW01LEJZVEVfQklUCisJcGFkZHcJeG1tMCx4bW00CisJcGFkZHcJeG1tMSx4bW01CisKKwltb3ZkcWEJeG1tNCx4bW0yCisJbW92ZHFhCXhtbTUseG1tMworCXBhbmQJeG1tMix4bW02CisJcHNybHcJeG1tNCxCWVRFX0JJVAorCXBhbmQJeG1tMyx4bW02CisJcHNybHcJeG1tNSxCWVRFX0JJVAorCXBhZGR3CXhtbTIseG1tNAorCXBhZGR3CXhtbTMseG1tNQorCisJcGFkZHcJeG1tMCx4bW0xCisJcGFkZHcJeG1tMix4bW0zCisJcGFkZHcJeG1tMCx4bW03CisJcGFkZHcJeG1tMix4bW03CisJcHNybHcJeG1tMCwyCisJcHNybHcJeG1tMiwyCisKKwlwYWNrdXN3YiB4bW0wLHhtbTIKKworCW1vdmRxYQlYTU1XT1JEIFtlZGkrMCpTSVpFT0ZfWE1NV09SRF0sIHhtbTAKKworCXN1YgllY3gsIGJ5dGUgU0laRU9GX1hNTVdPUkQJOyBvdXRjb2wKKwlhZGQJZWR4LCBieXRlIDIqU0laRU9GX1hNTVdPUkQJOyBpbnB0cjAKKwlhZGQJZXNpLCBieXRlIDIqU0laRU9GX1hNTVdPUkQJOyBpbnB0cjEKKwlhZGQJZWRpLCBieXRlIDEqU0laRU9GX1hNTVdPUkQJOyBvdXRwdHIKKwljbXAJZWN4LCBieXRlIFNJWkVPRl9YTU1XT1JECisJamFlCW5lYXIgLmNvbHVtbmxvb3AKKwl0ZXN0CWVjeCxlY3gKKwlqbnoJbmVhciAuY29sdW1ubG9vcF9yOAorCisJcG9wCWVzaQorCXBvcAllZGkKKwlwb3AJZWN4CisKKwlhZGQJZXNpLCBieXRlIDIqU0laRU9GX0pTQU1QUk9XCTsgaW5wdXRfZGF0YQorCWFkZAllZGksIGJ5dGUgMSpTSVpFT0ZfSlNBTVBST1cJOyBvdXRwdXRfZGF0YQorCWRlYwllYXgJCQkJOyByb3djdHIKKwlqZwluZWFyIC5yb3dsb29wCisKKy5yZXR1cm46CisJcG9wCWVkaQorCXBvcAllc2kKKzsJcG9wCWVkeAkJOyBuZWVkIG5vdCBiZSBwcmVzZXJ2ZWQKKzsJcG9wCWVjeAkJOyBuZWVkIG5vdCBiZSBwcmVzZXJ2ZWQKKzsJcG9wCWVieAkJOyB1bnVzZWQKKwlwb3AJZWJwCisJcmV0CisKKzsgRm9yIHNvbWUgcmVhc29uLCB0aGUgT1MgWCBsaW5rZXIgZG9lcyBub3QgaG9ub3IgdGhlIHJlcXVlc3QgdG8gYWxpZ24gdGhlCis7IHNlZ21lbnQgdW5sZXNzIHdlIGRvIHRoaXMuCisJYWxpZ24JMTYKZGlmZiAtLWdpdCBhL3NpbWQvamRjbHJtbXguYXNtIGIvc2ltZC9qZGNscm1teC5hc20KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzk3NzJlMAotLS0gL2Rldi9udWxsCisrKyBiL3NpbWQvamRjbHJtbXguYXNtCkBAIC0wLDAgKzEsNDA3IEBACis7Cis7IGpkY2xybW14LmFzbSAtIGNvbG9yc3BhY2UgY29udmVyc2lvbiAoTU1YKQorOworOyBDb3B5cmlnaHQgMjAwOSBQaWVycmUgT3NzbWFuIDxvc3NtYW5AY2VuZGlvLnNlPiBmb3IgQ2VuZGlvIEFCCis7Cis7IEJhc2VkIG9uCis7IHg4NiBTSU1EIGV4dGVuc2lvbiBmb3IgSUpHIEpQRUcgbGlicmFyeQorOyBDb3B5cmlnaHQgKEMpIDE5OTktMjAwNiwgTUlZQVNBS0EgTWFzYXJ1LgorOyBGb3IgY29uZGl0aW9ucyBvZiBkaXN0cmlidXRpb24gYW5kIHVzZSwgc2VlIGNvcHlyaWdodCBub3RpY2UgaW4ganNpbWRleHQuaW5jCis7Cis7IFRoaXMgZmlsZSBzaG91bGQgYmUgYXNzZW1ibGVkIHdpdGggTkFTTSAoTmV0d2lkZSBBc3NlbWJsZXIpLAorOyBjYW4gKm5vdCogYmUgYXNzZW1ibGVkIHdpdGggTWljcm9zb2Z0J3MgTUFTTSBvciBhbnkgY29tcGF0aWJsZQorOyBhc3NlbWJsZXIgKGluY2x1ZGluZyBCb3JsYW5kJ3MgVHVyYm8gQXNzZW1ibGVyKS4KKzsgTkFTTSBpcyBhdmFpbGFibGUgZnJvbSBodHRwOi8vbmFzbS5zb3VyY2Vmb3JnZS5uZXQvIG9yCis7IGh0dHA6Ly9zb3VyY2Vmb3JnZS5uZXQvcHJvamVjdC9zaG93ZmlsZXMucGhwP2dyb3VwX2lkPTYyMDgKKzsKKzsgW1RBQjhdCisKKyVpbmNsdWRlICJqY29sc2FtcC5pbmMiCisKKzsgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKwlTRUNUSU9OCVNFR19URVhUCisJQklUUwkzMgorOworOyBDb252ZXJ0IHNvbWUgcm93cyBvZiBzYW1wbGVzIHRvIHRoZSBvdXRwdXQgY29sb3JzcGFjZS4KKzsKKzsgR0xPQkFMKHZvaWQpCis7IGpzaW1kX3ljY19yZ2JfY29udmVydF9tbXggKEpESU1FTlNJT04gb3V0X3dpZHRoLAorOyAgICAgICAgICAgICAgICAgICAgICAgICAgICBKU0FNUElNQUdFIGlucHV0X2J1ZiwgSkRJTUVOU0lPTiBpbnB1dF9yb3csCis7ICAgICAgICAgICAgICAgICAgICAgICAgICAgIEpTQU1QQVJSQVkgb3V0cHV0X2J1ZiwgaW50IG51bV9yb3dzKQorOworCislZGVmaW5lIG91dF93aWR0aChiKQkoYikrOAkJCTsgSkRJTUVOU0lPTiBvdXRfd2lkdGgKKyVkZWZpbmUgaW5wdXRfYnVmKGIpCShiKSsxMgkJOyBKU0FNUElNQUdFIGlucHV0X2J1ZgorJWRlZmluZSBpbnB1dF9yb3coYikJKGIpKzE2CQk7IEpESU1FTlNJT04gaW5wdXRfcm93CislZGVmaW5lIG91dHB1dF9idWYoYikJKGIpKzIwCQk7IEpTQU1QQVJSQVkgb3V0cHV0X2J1ZgorJWRlZmluZSBudW1fcm93cyhiKQkoYikrMjQJCTsgaW50IG51bV9yb3dzCisKKyVkZWZpbmUgb3JpZ2luYWxfZWJwCWVicCswCislZGVmaW5lIHdrKGkpCQllYnAtKFdLX05VTS0oaSkpKlNJWkVPRl9NTVdPUkQJOyBtbXdvcmQgd2tbV0tfTlVNXQorJWRlZmluZSBXS19OVU0JCTIKKyVkZWZpbmUgZ290cHRyCQl3aygwKS1TSVpFT0ZfUE9JTlRFUgk7IHZvaWQgKiBnb3RwdHIKKworCWFsaWduCTE2CisJZ2xvYmFsCUVYVE4oanNpbWRfeWNjX3JnYl9jb252ZXJ0X21teCkKKworRVhUTihqc2ltZF95Y2NfcmdiX2NvbnZlcnRfbW14KToKKwlwdXNoCWVicAorCW1vdgllYXgsZXNwCQkJCTsgZWF4ID0gb3JpZ2luYWwgZWJwCisJc3ViCWVzcCwgYnl0ZSA0CisJYW5kCWVzcCwgYnl0ZSAoLVNJWkVPRl9NTVdPUkQpCTsgYWxpZ24gdG8gNjQgYml0cworCW1vdglbZXNwXSxlYXgKKwltb3YJZWJwLGVzcAkJCQk7IGVicCA9IGFsaWduZWQgZWJwCisJbGVhCWVzcCwgW3drKDApXQorCXB1c2hwaWMJZWF4CQk7IG1ha2UgYSByb29tIGZvciBHT1QgYWRkcmVzcworCXB1c2gJZWJ4Cis7CXB1c2gJZWN4CQk7IG5lZWQgbm90IGJlIHByZXNlcnZlZAorOwlwdXNoCWVkeAkJOyBuZWVkIG5vdCBiZSBwcmVzZXJ2ZWQKKwlwdXNoCWVzaQorCXB1c2gJZWRpCisKKwlnZXRfR09UCWVieAkJCTsgZ2V0IEdPVCBhZGRyZXNzCisJbW92cGljCVBPSU5URVIgW2dvdHB0cl0sIGVieAk7IHNhdmUgR09UIGFkZHJlc3MKKworCW1vdgllY3gsIEpESU1FTlNJT04gW291dF93aWR0aChlYXgpXQk7IG51bV9jb2xzCisJdGVzdAllY3gsZWN4CisJanoJbmVhciAucmV0dXJuCisKKwlwdXNoCWVjeAorCisJbW92CWVkaSwgSlNBTVBJTUFHRSBbaW5wdXRfYnVmKGVheCldCisJbW92CWVjeCwgSkRJTUVOU0lPTiBbaW5wdXRfcm93KGVheCldCisJbW92CWVzaSwgSlNBTVBBUlJBWSBbZWRpKzAqU0laRU9GX0pTQU1QQVJSQVldCisJbW92CWVieCwgSlNBTVBBUlJBWSBbZWRpKzEqU0laRU9GX0pTQU1QQVJSQVldCisJbW92CWVkeCwgSlNBTVBBUlJBWSBbZWRpKzIqU0laRU9GX0pTQU1QQVJSQVldCisJbGVhCWVzaSwgW2VzaStlY3gqU0laRU9GX0pTQU1QUk9XXQorCWxlYQllYngsIFtlYngrZWN4KlNJWkVPRl9KU0FNUFJPV10KKwlsZWEJZWR4LCBbZWR4K2VjeCpTSVpFT0ZfSlNBTVBST1ddCisKKwlwb3AJZWN4CisKKwltb3YJZWRpLCBKU0FNUEFSUkFZIFtvdXRwdXRfYnVmKGVheCldCisJbW92CWVheCwgSU5UIFtudW1fcm93cyhlYXgpXQorCXRlc3QJZWF4LGVheAorCWpsZQluZWFyIC5yZXR1cm4KKwlhbGlnbngJMTYsNworLnJvd2xvb3A6CisJcHVzaAllYXgKKwlwdXNoCWVkaQorCXB1c2gJZWR4CisJcHVzaAllYngKKwlwdXNoCWVzaQorCXB1c2gJZWN4CQkJOyBjb2wKKworCW1vdgllc2ksIEpTQU1QUk9XIFtlc2ldCTsgaW5wdHIwCisJbW92CWVieCwgSlNBTVBST1cgW2VieF0JOyBpbnB0cjEKKwltb3YJZWR4LCBKU0FNUFJPVyBbZWR4XQk7IGlucHRyMgorCW1vdgllZGksIEpTQU1QUk9XIFtlZGldCTsgb3V0cHRyCisJbW92cGljCWVheCwgUE9JTlRFUiBbZ290cHRyXQk7IGxvYWQgR09UIGFkZHJlc3MgKGVheCkKKwlhbGlnbngJMTYsNworLmNvbHVtbmxvb3A6CisKKwltb3ZxCW1tNSwgTU1XT1JEIFtlYnhdCTsgbW01PUNiKDAxMjM0NTY3KQorCW1vdnEJbW0xLCBNTVdPUkQgW2VkeF0JOyBtbTE9Q3IoMDEyMzQ1NjcpCisKKwlwY21wZXF3CW1tNCxtbTQKKwlwY21wZXF3CW1tNyxtbTcKKwlwc3JsdwltbTQsQllURV9CSVQKKwlwc2xsdwltbTcsNwkJCTsgbW03PXsweEZGODAgMHhGRjgwIDB4RkY4MCAweEZGODB9CisJbW92cQltbTAsbW00CQkJOyBtbTA9bW00PXsweEZGIDB4MDAgMHhGRiAweDAwIC4ufQorCisJcGFuZAltbTQsbW01CQkJOyBtbTQ9Q2IoMDI0Nik9Q2JFCisJcHNybHcJbW01LEJZVEVfQklUCQk7IG1tNT1DYigxMzU3KT1DYk8KKwlwYW5kCW1tMCxtbTEJCQk7IG1tMD1DcigwMjQ2KT1DckUKKwlwc3JsdwltbTEsQllURV9CSVQJCTsgbW0xPUNyKDEzNTcpPUNyTworCisJcGFkZHcJbW00LG1tNworCXBhZGR3CW1tNSxtbTcKKwlwYWRkdwltbTAsbW03CisJcGFkZHcJbW0xLG1tNworCisJOyAoT3JpZ2luYWwpCisJOyBSID0gWSAgICAgICAgICAgICAgICArIDEuNDAyMDAgKiBDcgorCTsgRyA9IFkgLSAwLjM0NDE0ICogQ2IgLSAwLjcxNDE0ICogQ3IKKwk7IEIgPSBZICsgMS43NzIwMCAqIENiCisJOworCTsgKFRoaXMgaW1wbGVtZW50YXRpb24pCisJOyBSID0gWSAgICAgICAgICAgICAgICArIDAuNDAyMDAgKiBDciArIENyCisJOyBHID0gWSAtIDAuMzQ0MTQgKiBDYiArIDAuMjg1ODYgKiBDciAtIENyCisJOyBCID0gWSAtIDAuMjI4MDAgKiBDYiArIENiICsgQ2IKKworCW1vdnEJbW0yLG1tNAkJCTsgbW0yPUNiRQorCW1vdnEJbW0zLG1tNQkJCTsgbW0zPUNiTworCXBhZGR3CW1tNCxtbTQJCQk7IG1tND0yKkNiRQorCXBhZGR3CW1tNSxtbTUJCQk7IG1tNT0yKkNiTworCW1vdnEJbW02LG1tMAkJCTsgbW02PUNyRQorCW1vdnEJbW03LG1tMQkJCTsgbW03PUNyTworCXBhZGR3CW1tMCxtbTAJCQk7IG1tMD0yKkNyRQorCXBhZGR3CW1tMSxtbTEJCQk7IG1tMT0yKkNyTworCisJcG11bGh3CW1tNCxbR09UT0ZGKGVheCxQV19NRjAyMjgpXQk7IG1tND0oMipDYkUgKiAtRklYKDAuMjI4MDApKQorCXBtdWxodwltbTUsW0dPVE9GRihlYXgsUFdfTUYwMjI4KV0JOyBtbTU9KDIqQ2JPICogLUZJWCgwLjIyODAwKSkKKwlwbXVsaHcJbW0wLFtHT1RPRkYoZWF4LFBXX0YwNDAyKV0JOyBtbTA9KDIqQ3JFICogRklYKDAuNDAyMDApKQorCXBtdWxodwltbTEsW0dPVE9GRihlYXgsUFdfRjA0MDIpXQk7IG1tMT0oMipDck8gKiBGSVgoMC40MDIwMCkpCisKKwlwYWRkdwltbTQsW0dPVE9GRihlYXgsUFdfT05FKV0KKwlwYWRkdwltbTUsW0dPVE9GRihlYXgsUFdfT05FKV0KKwlwc3JhdwltbTQsMQkJCTsgbW00PShDYkUgKiAtRklYKDAuMjI4MDApKQorCXBzcmF3CW1tNSwxCQkJOyBtbTU9KENiTyAqIC1GSVgoMC4yMjgwMCkpCisJcGFkZHcJbW0wLFtHT1RPRkYoZWF4LFBXX09ORSldCisJcGFkZHcJbW0xLFtHT1RPRkYoZWF4LFBXX09ORSldCisJcHNyYXcJbW0wLDEJCQk7IG1tMD0oQ3JFICogRklYKDAuNDAyMDApKQorCXBzcmF3CW1tMSwxCQkJOyBtbTE9KENyTyAqIEZJWCgwLjQwMjAwKSkKKworCXBhZGR3CW1tNCxtbTIKKwlwYWRkdwltbTUsbW0zCisJcGFkZHcJbW00LG1tMgkJCTsgbW00PShDYkUgKiBGSVgoMS43NzIwMCkpPShCLVkpRQorCXBhZGR3CW1tNSxtbTMJCQk7IG1tNT0oQ2JPICogRklYKDEuNzcyMDApKT0oQi1ZKU8KKwlwYWRkdwltbTAsbW02CQkJOyBtbTA9KENyRSAqIEZJWCgxLjQwMjAwKSk9KFItWSlFCisJcGFkZHcJbW0xLG1tNwkJCTsgbW0xPShDck8gKiBGSVgoMS40MDIwMCkpPShSLVkpTworCisJbW92cQlNTVdPUkQgW3drKDApXSwgbW00CTsgd2soMCk9KEItWSlFCisJbW92cQlNTVdPUkQgW3drKDEpXSwgbW01CTsgd2soMSk9KEItWSlPCisKKwltb3ZxICAgICAgbW00LG1tMgorCW1vdnEgICAgICBtbTUsbW0zCisJcHVucGNrbHdkIG1tMixtbTYKKwlwdW5wY2tod2QgbW00LG1tNgorCXBtYWRkd2QgICBtbTIsW0dPVE9GRihlYXgsUFdfTUYwMzQ0X0YwMjg1KV0KKwlwbWFkZHdkICAgbW00LFtHT1RPRkYoZWF4LFBXX01GMDM0NF9GMDI4NSldCisJcHVucGNrbHdkIG1tMyxtbTcKKwlwdW5wY2tod2QgbW01LG1tNworCXBtYWRkd2QgICBtbTMsW0dPVE9GRihlYXgsUFdfTUYwMzQ0X0YwMjg1KV0KKwlwbWFkZHdkICAgbW01LFtHT1RPRkYoZWF4LFBXX01GMDM0NF9GMDI4NSldCisKKwlwYWRkZCAgICAgbW0yLFtHT1RPRkYoZWF4LFBEX09ORUhBTEYpXQorCXBhZGRkICAgICBtbTQsW0dPVE9GRihlYXgsUERfT05FSEFMRildCisJcHNyYWQgICAgIG1tMixTQ0FMRUJJVFMKKwlwc3JhZCAgICAgbW00LFNDQUxFQklUUworCXBhZGRkICAgICBtbTMsW0dPVE9GRihlYXgsUERfT05FSEFMRildCisJcGFkZGQgICAgIG1tNSxbR09UT0ZGKGVheCxQRF9PTkVIQUxGKV0KKwlwc3JhZCAgICAgbW0zLFNDQUxFQklUUworCXBzcmFkICAgICBtbTUsU0NBTEVCSVRTCisKKwlwYWNrc3NkdyAgbW0yLG1tNAk7IG1tMj1DYkUqLUZJWCgwLjM0NCkrQ3JFKkZJWCgwLjI4NSkKKwlwYWNrc3NkdyAgbW0zLG1tNQk7IG1tMz1DYk8qLUZJWCgwLjM0NCkrQ3JPKkZJWCgwLjI4NSkKKwlwc3VidyAgICAgbW0yLG1tNgk7IG1tMj1DYkUqLUZJWCgwLjM0NCkrQ3JFKi1GSVgoMC43MTQpPShHLVkpRQorCXBzdWJ3ICAgICBtbTMsbW03CTsgbW0zPUNiTyotRklYKDAuMzQ0KStDck8qLUZJWCgwLjcxNCk9KEctWSlPCisKKwltb3ZxICAgICAgbW01LCBNTVdPUkQgW2VzaV0JOyBtbTU9WSgwMTIzNDU2NykKKworCXBjbXBlcXcgICBtbTQsbW00CisJcHNybHcgICAgIG1tNCxCWVRFX0JJVAkJOyBtbTQ9ezB4RkYgMHgwMCAweEZGIDB4MDAgLi59CisJcGFuZCAgICAgIG1tNCxtbTUJCTsgbW00PVkoMDI0Nik9WUUKKwlwc3JsdyAgICAgbW01LEJZVEVfQklUCQk7IG1tNT1ZKDEzNTcpPVlPCisKKwlwYWRkdyAgICAgbW0wLG1tNAkJOyBtbTA9KChSLVkpRStZRSk9UkU9KFIwIFIyIFI0IFI2KQorCXBhZGR3ICAgICBtbTEsbW01CQk7IG1tMT0oKFItWSlPK1lPKT1STz0oUjEgUjMgUjUgUjcpCisJcGFja3Vzd2IgIG1tMCxtbTAJCTsgbW0wPShSMCBSMiBSNCBSNiAqKiAqKiAqKiAqKikKKwlwYWNrdXN3YiAgbW0xLG1tMQkJOyBtbTE9KFIxIFIzIFI1IFI3ICoqICoqICoqICoqKQorCisJcGFkZHcgICAgIG1tMixtbTQJCTsgbW0yPSgoRy1ZKUUrWUUpPUdFPShHMCBHMiBHNCBHNikKKwlwYWRkdyAgICAgbW0zLG1tNQkJOyBtbTM9KChHLVkpTytZTyk9R089KEcxIEczIEc1IEc3KQorCXBhY2t1c3diICBtbTIsbW0yCQk7IG1tMj0oRzAgRzIgRzQgRzYgKiogKiogKiogKiopCisJcGFja3Vzd2IgIG1tMyxtbTMJCTsgbW0zPShHMSBHMyBHNSBHNyAqKiAqKiAqKiAqKikKKworCXBhZGR3ICAgICBtbTQsIE1NV09SRCBbd2soMCldCTsgbW00PShZRSsoQi1ZKUUpPUJFPShCMCBCMiBCNCBCNikKKwlwYWRkdyAgICAgbW01LCBNTVdPUkQgW3drKDEpXQk7IG1tNT0oWU8rKEItWSlPKT1CTz0oQjEgQjMgQjUgQjcpCisJcGFja3Vzd2IgIG1tNCxtbTQJCTsgbW00PShCMCBCMiBCNCBCNiAqKiAqKiAqKiAqKikKKwlwYWNrdXN3YiAgbW01LG1tNQkJOyBtbTU9KEIxIEIzIEI1IEI3ICoqICoqICoqICoqKQorCislaWYgUkdCX1BJWEVMU0laRSA9PSAzIDsgLS0tLS0tLS0tLS0tLS0tCisKKwk7IG1tQT0oMDAgMDIgMDQgMDYgKiogKiogKiogKiopLCBtbUI9KDAxIDAzIDA1IDA3ICoqICoqICoqICoqKQorCTsgbW1DPSgxMCAxMiAxNCAxNiAqKiAqKiAqKiAqKiksIG1tRD0oMTEgMTMgMTUgMTcgKiogKiogKiogKiopCisJOyBtbUU9KDIwIDIyIDI0IDI2ICoqICoqICoqICoqKSwgbW1GPSgyMSAyMyAyNSAyNyAqKiAqKiAqKiAqKikKKwk7IG1tRz0oKiogKiogKiogKiogKiogKiogKiogKiopLCBtbUg9KCoqICoqICoqICoqICoqICoqICoqICoqKQorCisJcHVucGNrbGJ3IG1tQSxtbUMJCTsgbW1BPSgwMCAxMCAwMiAxMiAwNCAxNCAwNiAxNikKKwlwdW5wY2tsYncgbW1FLG1tQgkJOyBtbUU9KDIwIDAxIDIyIDAzIDI0IDA1IDI2IDA3KQorCXB1bnBja2xidyBtbUQsbW1GCQk7IG1tRD0oMTEgMjEgMTMgMjMgMTUgMjUgMTcgMjcpCisKKwltb3ZxICAgICAgbW1HLG1tQQorCW1vdnEgICAgICBtbUgsbW1BCisJcHVucGNrbHdkIG1tQSxtbUUJCTsgbW1BPSgwMCAxMCAyMCAwMSAwMiAxMiAyMiAwMykKKwlwdW5wY2tod2QgbW1HLG1tRQkJOyBtbUc9KDA0IDE0IDI0IDA1IDA2IDE2IDI2IDA3KQorCisJcHNybHEgICAgIG1tSCwyKkJZVEVfQklUCTsgbW1IPSgwMiAxMiAwNCAxNCAwNiAxNiAtLSAtLSkKKwlwc3JscSAgICAgbW1FLDIqQllURV9CSVQJOyBtbUU9KDIyIDAzIDI0IDA1IDI2IDA3IC0tIC0tKQorCisJbW92cSAgICAgIG1tQyxtbUQKKwltb3ZxICAgICAgbW1CLG1tRAorCXB1bnBja2x3ZCBtbUQsbW1ICQk7IG1tRD0oMTEgMjEgMDIgMTIgMTMgMjMgMDQgMTQpCisJcHVucGNraHdkIG1tQyxtbUgJCTsgbW1DPSgxNSAyNSAwNiAxNiAxNyAyNyAtLSAtLSkKKworCXBzcmxxICAgICBtbUIsMipCWVRFX0JJVAk7IG1tQj0oMTMgMjMgMTUgMjUgMTcgMjcgLS0gLS0pCisKKwltb3ZxICAgICAgbW1GLG1tRQorCXB1bnBja2x3ZCBtbUUsbW1CCQk7IG1tRT0oMjIgMDMgMTMgMjMgMjQgMDUgMTUgMjUpCisJcHVucGNraHdkIG1tRixtbUIJCTsgbW1GPSgyNiAwNyAxNyAyNyAtLSAtLSAtLSAtLSkKKworCXB1bnBja2xkcSBtbUEsbW1ECQk7IG1tQT0oMDAgMTAgMjAgMDEgMTEgMjEgMDIgMTIpCisJcHVucGNrbGRxIG1tRSxtbUcJCTsgbW1FPSgyMiAwMyAxMyAyMyAwNCAxNCAyNCAwNSkKKwlwdW5wY2tsZHEgbW1DLG1tRgkJOyBtbUM9KDE1IDI1IDA2IDE2IDI2IDA3IDE3IDI3KQorCisJY21wCWVjeCwgYnl0ZSBTSVpFT0ZfTU1XT1JECisJamIJc2hvcnQgLmNvbHVtbl9zdDE2CisKKwltb3ZxCU1NV09SRCBbZWRpKzAqU0laRU9GX01NV09SRF0sIG1tQQorCW1vdnEJTU1XT1JEIFtlZGkrMSpTSVpFT0ZfTU1XT1JEXSwgbW1FCisJbW92cQlNTVdPUkQgW2VkaSsyKlNJWkVPRl9NTVdPUkRdLCBtbUMKKworCXN1YgllY3gsIGJ5dGUgU0laRU9GX01NV09SRAorCWp6CXNob3J0IC5uZXh0cm93CisKKwlhZGQJZXNpLCBieXRlIFNJWkVPRl9NTVdPUkQJCQk7IGlucHRyMAorCWFkZAllYngsIGJ5dGUgU0laRU9GX01NV09SRAkJCTsgaW5wdHIxCisJYWRkCWVkeCwgYnl0ZSBTSVpFT0ZfTU1XT1JECQkJOyBpbnB0cjIKKwlhZGQJZWRpLCBieXRlIFJHQl9QSVhFTFNJWkUqU0laRU9GX01NV09SRAk7IG91dHB0cgorCWptcAluZWFyIC5jb2x1bW5sb29wCisJYWxpZ254CTE2LDcKKworLmNvbHVtbl9zdDE2OgorCWxlYQllY3gsIFtlY3grZWN4KjJdCTsgaW11bCBlY3gsIFJHQl9QSVhFTFNJWkUKKwljbXAJZWN4LCBieXRlIDIqU0laRU9GX01NV09SRAorCWpiCXNob3J0IC5jb2x1bW5fc3Q4CisJbW92cQlNTVdPUkQgW2VkaSswKlNJWkVPRl9NTVdPUkRdLCBtbUEKKwltb3ZxCU1NV09SRCBbZWRpKzEqU0laRU9GX01NV09SRF0sIG1tRQorCW1vdnEJbW1BLG1tQworCXN1YgllY3gsIGJ5dGUgMipTSVpFT0ZfTU1XT1JECisJYWRkCWVkaSwgYnl0ZSAyKlNJWkVPRl9NTVdPUkQKKwlqbXAJc2hvcnQgLmNvbHVtbl9zdDQKKy5jb2x1bW5fc3Q4OgorCWNtcAllY3gsIGJ5dGUgU0laRU9GX01NV09SRAorCWpiCXNob3J0IC5jb2x1bW5fc3Q0CisJbW92cQlNTVdPUkQgW2VkaSswKlNJWkVPRl9NTVdPUkRdLCBtbUEKKwltb3ZxCW1tQSxtbUUKKwlzdWIJZWN4LCBieXRlIFNJWkVPRl9NTVdPUkQKKwlhZGQJZWRpLCBieXRlIFNJWkVPRl9NTVdPUkQKKy5jb2x1bW5fc3Q0OgorCW1vdmQJZWF4LG1tQQorCWNtcAllY3gsIGJ5dGUgU0laRU9GX0RXT1JECisJamIJc2hvcnQgLmNvbHVtbl9zdDIKKwltb3YJRFdPUkQgW2VkaSswKlNJWkVPRl9EV09SRF0sIGVheAorCXBzcmxxCW1tQSxEV09SRF9CSVQKKwltb3ZkCWVheCxtbUEKKwlzdWIJZWN4LCBieXRlIFNJWkVPRl9EV09SRAorCWFkZAllZGksIGJ5dGUgU0laRU9GX0RXT1JECisuY29sdW1uX3N0MjoKKwljbXAJZWN4LCBieXRlIFNJWkVPRl9XT1JECisJamIJc2hvcnQgLmNvbHVtbl9zdDEKKwltb3YJV09SRCBbZWRpKzAqU0laRU9GX1dPUkRdLCBheAorCXNocgllYXgsV09SRF9CSVQKKwlzdWIJZWN4LCBieXRlIFNJWkVPRl9XT1JECisJYWRkCWVkaSwgYnl0ZSBTSVpFT0ZfV09SRAorLmNvbHVtbl9zdDE6CisJY21wCWVjeCwgYnl0ZSBTSVpFT0ZfQllURQorCWpiCXNob3J0IC5uZXh0cm93CisJbW92CUJZVEUgW2VkaSswKlNJWkVPRl9CWVRFXSwgYWwKKworJWVsc2UgOyBSR0JfUElYRUxTSVpFID09IDQgOyAtLS0tLS0tLS0tLQorCislaWZkZWYgUkdCWF9GSUxMRVJfMFhGRgorCXBjbXBlcWIgICBtbTYsbW02CQk7IG1tNj0oWDAgWDIgWDQgWDYgKiogKiogKiogKiopCisJcGNtcGVxYiAgIG1tNyxtbTcJCTsgbW03PShYMSBYMyBYNSBYNyAqKiAqKiAqKiAqKikKKyVlbHNlCisJcHhvciAgICAgIG1tNixtbTYJCTsgbW02PShYMCBYMiBYNCBYNiAqKiAqKiAqKiAqKikKKwlweG9yICAgICAgbW03LG1tNwkJOyBtbTc9KFgxIFgzIFg1IFg3ICoqICoqICoqICoqKQorJWVuZGlmCisJOyBtbUE9KDAwIDAyIDA0IDA2ICoqICoqICoqICoqKSwgbW1CPSgwMSAwMyAwNSAwNyAqKiAqKiAqKiAqKikKKwk7IG1tQz0oMTAgMTIgMTQgMTYgKiogKiogKiogKiopLCBtbUQ9KDExIDEzIDE1IDE3ICoqICoqICoqICoqKQorCTsgbW1FPSgyMCAyMiAyNCAyNiAqKiAqKiAqKiAqKiksIG1tRj0oMjEgMjMgMjUgMjcgKiogKiogKiogKiopCisJOyBtbUc9KDMwIDMyIDM0IDM2ICoqICoqICoqICoqKSwgbW1IPSgzMSAzMyAzNSAzNyAqKiAqKiAqKiAqKikKKworCXB1bnBja2xidyBtbUEsbW1DCQk7IG1tQT0oMDAgMTAgMDIgMTIgMDQgMTQgMDYgMTYpCisJcHVucGNrbGJ3IG1tRSxtbUcJCTsgbW1FPSgyMCAzMCAyMiAzMiAyNCAzNCAyNiAzNikKKwlwdW5wY2tsYncgbW1CLG1tRAkJOyBtbUI9KDAxIDExIDAzIDEzIDA1IDE1IDA3IDE3KQorCXB1bnBja2xidyBtbUYsbW1ICQk7IG1tRj0oMjEgMzEgMjMgMzMgMjUgMzUgMjcgMzcpCisKKwltb3ZxICAgICAgbW1DLG1tQQorCXB1bnBja2x3ZCBtbUEsbW1FCQk7IG1tQT0oMDAgMTAgMjAgMzAgMDIgMTIgMjIgMzIpCisJcHVucGNraHdkIG1tQyxtbUUJCTsgbW1DPSgwNCAxNCAyNCAzNCAwNiAxNiAyNiAzNikKKwltb3ZxICAgICAgbW1HLG1tQgorCXB1bnBja2x3ZCBtbUIsbW1GCQk7IG1tQj0oMDEgMTEgMjEgMzEgMDMgMTMgMjMgMzMpCisJcHVucGNraHdkIG1tRyxtbUYJCTsgbW1HPSgwNSAxNSAyNSAzNSAwNyAxNyAyNyAzNykKKworCW1vdnEgICAgICBtbUQsbW1BCisJcHVucGNrbGRxIG1tQSxtbUIJCTsgbW1BPSgwMCAxMCAyMCAzMCAwMSAxMSAyMSAzMSkKKwlwdW5wY2toZHEgbW1ELG1tQgkJOyBtbUQ9KDAyIDEyIDIyIDMyIDAzIDEzIDIzIDMzKQorCW1vdnEgICAgICBtbUgsbW1DCisJcHVucGNrbGRxIG1tQyxtbUcJCTsgbW1DPSgwNCAxNCAyNCAzNCAwNSAxNSAyNSAzNSkKKwlwdW5wY2toZHEgbW1ILG1tRwkJOyBtbUg9KDA2IDE2IDI2IDM2IDA3IDE3IDI3IDM3KQorCisJY21wCWVjeCwgYnl0ZSBTSVpFT0ZfTU1XT1JECisJamIJc2hvcnQgLmNvbHVtbl9zdDE2CisKKwltb3ZxCU1NV09SRCBbZWRpKzAqU0laRU9GX01NV09SRF0sIG1tQQorCW1vdnEJTU1XT1JEIFtlZGkrMSpTSVpFT0ZfTU1XT1JEXSwgbW1ECisJbW92cQlNTVdPUkQgW2VkaSsyKlNJWkVPRl9NTVdPUkRdLCBtbUMKKwltb3ZxCU1NV09SRCBbZWRpKzMqU0laRU9GX01NV09SRF0sIG1tSAorCisJc3ViCWVjeCwgYnl0ZSBTSVpFT0ZfTU1XT1JECisJanoJc2hvcnQgLm5leHRyb3cKKworCWFkZAllc2ksIGJ5dGUgU0laRU9GX01NV09SRAkJCTsgaW5wdHIwCisJYWRkCWVieCwgYnl0ZSBTSVpFT0ZfTU1XT1JECQkJOyBpbnB0cjEKKwlhZGQJZWR4LCBieXRlIFNJWkVPRl9NTVdPUkQJCQk7IGlucHRyMgorCWFkZAllZGksIGJ5dGUgUkdCX1BJWEVMU0laRSpTSVpFT0ZfTU1XT1JECTsgb3V0cHRyCisJam1wCW5lYXIgLmNvbHVtbmxvb3AKKwlhbGlnbngJMTYsNworCisuY29sdW1uX3N0MTY6CisJY21wCWVjeCwgYnl0ZSBTSVpFT0ZfTU1XT1JELzIKKwlqYglzaG9ydCAuY29sdW1uX3N0OAorCW1vdnEJTU1XT1JEIFtlZGkrMCpTSVpFT0ZfTU1XT1JEXSwgbW1BCisJbW92cQlNTVdPUkQgW2VkaSsxKlNJWkVPRl9NTVdPUkRdLCBtbUQKKwltb3ZxCW1tQSxtbUMKKwltb3ZxCW1tRCxtbUgKKwlzdWIJZWN4LCBieXRlIFNJWkVPRl9NTVdPUkQvMgorCWFkZAllZGksIGJ5dGUgMipTSVpFT0ZfTU1XT1JECisuY29sdW1uX3N0ODoKKwljbXAJZWN4LCBieXRlIFNJWkVPRl9NTVdPUkQvNAorCWpiCXNob3J0IC5jb2x1bW5fc3Q0CisJbW92cQlNTVdPUkQgW2VkaSswKlNJWkVPRl9NTVdPUkRdLCBtbUEKKwltb3ZxCW1tQSxtbUQKKwlzdWIJZWN4LCBieXRlIFNJWkVPRl9NTVdPUkQvNAorCWFkZAllZGksIGJ5dGUgMSpTSVpFT0ZfTU1XT1JECisuY29sdW1uX3N0NDoKKwljbXAJZWN4LCBieXRlIFNJWkVPRl9NTVdPUkQvOAorCWpiCXNob3J0IC5uZXh0cm93CisJbW92ZAlEV09SRCBbZWRpKzAqU0laRU9GX0RXT1JEXSwgbW1BCisKKyVlbmRpZiA7IFJHQl9QSVhFTFNJWkUgOyAtLS0tLS0tLS0tLS0tLS0KKworCWFsaWdueAkxNiw3CisKKy5uZXh0cm93OgorCXBvcAllY3gKKwlwb3AJZXNpCisJcG9wCWVieAorCXBvcAllZHgKKwlwb3AJZWRpCisJcG9wCWVheAorCisJYWRkCWVzaSwgYnl0ZSBTSVpFT0ZfSlNBTVBST1cKKwlhZGQJZWJ4LCBieXRlIFNJWkVPRl9KU0FNUFJPVworCWFkZAllZHgsIGJ5dGUgU0laRU9GX0pTQU1QUk9XCisJYWRkCWVkaSwgYnl0ZSBTSVpFT0ZfSlNBTVBST1cJOyBvdXRwdXRfYnVmCisJZGVjCWVheAkJCQk7IG51bV9yb3dzCisJamcJbmVhciAucm93bG9vcAorCisJZW1tcwkJOyBlbXB0eSBNTVggc3RhdGUKKworLnJldHVybjoKKwlwb3AJZWRpCisJcG9wCWVzaQorOwlwb3AJZWR4CQk7IG5lZWQgbm90IGJlIHByZXNlcnZlZAorOwlwb3AJZWN4CQk7IG5lZWQgbm90IGJlIHByZXNlcnZlZAorCXBvcAllYngKKwltb3YJZXNwLGVicAkJOyBlc3AgPC0gYWxpZ25lZCBlYnAKKwlwb3AJZXNwCQk7IGVzcCA8LSBvcmlnaW5hbCBlYnAKKwlwb3AJZWJwCisJcmV0CisKKzsgRm9yIHNvbWUgcmVhc29uLCB0aGUgT1MgWCBsaW5rZXIgZG9lcyBub3QgaG9ub3IgdGhlIHJlcXVlc3QgdG8gYWxpZ24gdGhlCis7IHNlZ21lbnQgdW5sZXNzIHdlIGRvIHRoaXMuCisJYWxpZ24JMTYKZGlmZiAtLWdpdCBhL3NpbWQvamRjbHJzczItNjQuYXNtIGIvc2ltZC9qZGNscnNzMi02NC5hc20KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDI4MmJkMgotLS0gL2Rldi9udWxsCisrKyBiL3NpbWQvamRjbHJzczItNjQuYXNtCkBAIC0wLDAgKzEsNDg3IEBACis7Cis7IGpkY2xyc3MyLTY0LmFzbSAtIGNvbG9yc3BhY2UgY29udmVyc2lvbiAoNjQtYml0IFNTRTIpCis7Cis7IENvcHlyaWdodCAyMDA5IFBpZXJyZSBPc3NtYW4gPG9zc21hbkBjZW5kaW8uc2U+IGZvciBDZW5kaW8gQUIKKzsgQ29weXJpZ2h0IDIwMDkgRC4gUi4gQ29tbWFuZGVyCis7Cis7IEJhc2VkIG9uCis7IHg4NiBTSU1EIGV4dGVuc2lvbiBmb3IgSUpHIEpQRUcgbGlicmFyeQorOyBDb3B5cmlnaHQgKEMpIDE5OTktMjAwNiwgTUlZQVNBS0EgTWFzYXJ1LgorOyBGb3IgY29uZGl0aW9ucyBvZiBkaXN0cmlidXRpb24gYW5kIHVzZSwgc2VlIGNvcHlyaWdodCBub3RpY2UgaW4ganNpbWRleHQuaW5jCis7Cis7IFRoaXMgZmlsZSBzaG91bGQgYmUgYXNzZW1ibGVkIHdpdGggTkFTTSAoTmV0d2lkZSBBc3NlbWJsZXIpLAorOyBjYW4gKm5vdCogYmUgYXNzZW1ibGVkIHdpdGggTWljcm9zb2Z0J3MgTUFTTSBvciBhbnkgY29tcGF0aWJsZQorOyBhc3NlbWJsZXIgKGluY2x1ZGluZyBCb3JsYW5kJ3MgVHVyYm8gQXNzZW1ibGVyKS4KKzsgTkFTTSBpcyBhdmFpbGFibGUgZnJvbSBodHRwOi8vbmFzbS5zb3VyY2Vmb3JnZS5uZXQvIG9yCis7IGh0dHA6Ly9zb3VyY2Vmb3JnZS5uZXQvcHJvamVjdC9zaG93ZmlsZXMucGhwP2dyb3VwX2lkPTYyMDgKKzsKKzsgW1RBQjhdCisKKyVpbmNsdWRlICJqY29sc2FtcC5pbmMiCisJCQkJCis7IC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisJU0VDVElPTglTRUdfVEVYVAorCUJJVFMJNjQKKzsKKzsgQ29udmVydCBzb21lIHJvd3Mgb2Ygc2FtcGxlcyB0byB0aGUgb3V0cHV0IGNvbG9yc3BhY2UuCis7Cis7IEdMT0JBTCh2b2lkKQorOyBqc2ltZF95Y2NfcmdiX2NvbnZlcnRfc3NlMiAoSkRJTUVOU0lPTiBvdXRfd2lkdGgsCis7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBKU0FNUElNQUdFIGlucHV0X2J1ZiwgSkRJTUVOU0lPTiBpbnB1dF9yb3csCis7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBKU0FNUEFSUkFZIG91dHB1dF9idWYsIGludCBudW1fcm93cykKKzsKKworOyByMTAgPSBKRElNRU5TSU9OIG91dF93aWR0aAorOyByMTEgPSBKU0FNUElNQUdFIGlucHV0X2J1ZgorOyByMTIgPSBKRElNRU5TSU9OIGlucHV0X3JvdworOyByMTMgPSBKU0FNUEFSUkFZIG91dHB1dF9idWYKKzsgcjE0ID0gaW50IG51bV9yb3dzCisKKyVkZWZpbmUgd2soaSkJCXJicC0oV0tfTlVNLShpKSkqU0laRU9GX1hNTVdPUkQJOyB4bW13b3JkIHdrW1dLX05VTV0KKyVkZWZpbmUgV0tfTlVNCQkyCisKKwlhbGlnbgkxNgorCWdsb2JhbAlFWFROKGpzaW1kX3ljY19yZ2JfY29udmVydF9zc2UyKQorCitFWFROKGpzaW1kX3ljY19yZ2JfY29udmVydF9zc2UyKToKKwlwdXNoCXJicAorCW1vdglyYXgscnNwCQkJCTsgcmF4ID0gb3JpZ2luYWwgcmJwCisJc3ViCXJzcCwgYnl0ZSA0CisJYW5kCXJzcCwgYnl0ZSAoLVNJWkVPRl9YTU1XT1JEKQk7IGFsaWduIHRvIDEyOCBiaXRzCisJbW92CVtyc3BdLHJheAorCW1vdglyYnAscnNwCQkJCTsgcmJwID0gYWxpZ25lZCByYnAKKwlsZWEJcnNwLCBbd2soMCldCisJY29sbGVjdF9hcmdzCisJcHVzaAlyYngKKworCW1vdglyY3gsIHIxMAk7IG51bV9jb2xzCisJdGVzdAlyY3gscmN4CisJanoJbmVhciAucmV0dXJuCisKKwlwdXNoCXJjeAorCisJbW92CXJkaSwgcjExCisJbW92CXJjeCwgcjEyCisJbW92CXJzaSwgSlNBTVBBUlJBWSBbcmRpKzAqU0laRU9GX0pTQU1QQVJSQVldCisJbW92CXJieCwgSlNBTVBBUlJBWSBbcmRpKzEqU0laRU9GX0pTQU1QQVJSQVldCisJbW92CXJkeCwgSlNBTVBBUlJBWSBbcmRpKzIqU0laRU9GX0pTQU1QQVJSQVldCisJbGVhCXJzaSwgW3JzaStyY3gqU0laRU9GX0pTQU1QUk9XXQorCWxlYQlyYngsIFtyYngrcmN4KlNJWkVPRl9KU0FNUFJPV10KKwlsZWEJcmR4LCBbcmR4K3JjeCpTSVpFT0ZfSlNBTVBST1ddCisKKwlwb3AJcmN4CisKKwltb3YJcmRpLCByMTMKKwltb3YJZWF4LCByMTRkCisJdGVzdAlyYXgscmF4CisJamxlCW5lYXIgLnJldHVybgorLnJvd2xvb3A6CisJcHVzaAlyYXgKKwlwdXNoCXJkaQorCXB1c2gJcmR4CisJcHVzaAlyYngKKwlwdXNoCXJzaQorCXB1c2gJcmN4CQkJOyBjb2wKKworCW1vdglyc2ksIEpTQU1QUk9XIFtyc2ldCTsgaW5wdHIwCisJbW92CXJieCwgSlNBTVBST1cgW3JieF0JOyBpbnB0cjEKKwltb3YJcmR4LCBKU0FNUFJPVyBbcmR4XQk7IGlucHRyMgorCW1vdglyZGksIEpTQU1QUk9XIFtyZGldCTsgb3V0cHRyCisuY29sdW1ubG9vcDoKKworCW1vdmRxYQl4bW01LCBYTU1XT1JEIFtyYnhdCTsgeG1tNT1DYigwMTIzNDU2Nzg5QUJDREVGKQorCW1vdmRxYQl4bW0xLCBYTU1XT1JEIFtyZHhdCTsgeG1tMT1DcigwMTIzNDU2Nzg5QUJDREVGKQorCisJcGNtcGVxdwl4bW00LHhtbTQKKwlwY21wZXF3CXhtbTcseG1tNworCXBzcmx3CXhtbTQsQllURV9CSVQKKwlwc2xsdwl4bW03LDcJCQk7IHhtbTc9ezB4RkY4MCAweEZGODAgMHhGRjgwIDB4RkY4MCAuLn0KKwltb3ZkcWEJeG1tMCx4bW00CQk7IHhtbTA9eG1tND17MHhGRiAweDAwIDB4RkYgMHgwMCAuLn0KKworCXBhbmQJeG1tNCx4bW01CQk7IHhtbTQ9Q2IoMDI0NjhBQ0UpPUNiRQorCXBzcmx3CXhtbTUsQllURV9CSVQJCTsgeG1tNT1DYigxMzU3OUJERik9Q2JPCisJcGFuZAl4bW0wLHhtbTEJCTsgeG1tMD1DcigwMjQ2OEFDRSk9Q3JFCisJcHNybHcJeG1tMSxCWVRFX0JJVAkJOyB4bW0xPUNyKDEzNTc5QkRGKT1Dck8KKworCXBhZGR3CXhtbTQseG1tNworCXBhZGR3CXhtbTUseG1tNworCXBhZGR3CXhtbTAseG1tNworCXBhZGR3CXhtbTEseG1tNworCisJOyAoT3JpZ2luYWwpCisJOyBSID0gWSAgICAgICAgICAgICAgICArIDEuNDAyMDAgKiBDcgorCTsgRyA9IFkgLSAwLjM0NDE0ICogQ2IgLSAwLjcxNDE0ICogQ3IKKwk7IEIgPSBZICsgMS43NzIwMCAqIENiCisJOworCTsgKFRoaXMgaW1wbGVtZW50YXRpb24pCisJOyBSID0gWSAgICAgICAgICAgICAgICArIDAuNDAyMDAgKiBDciArIENyCisJOyBHID0gWSAtIDAuMzQ0MTQgKiBDYiArIDAuMjg1ODYgKiBDciAtIENyCisJOyBCID0gWSAtIDAuMjI4MDAgKiBDYiArIENiICsgQ2IKKworCW1vdmRxYQl4bW0yLHhtbTQJCTsgeG1tMj1DYkUKKwltb3ZkcWEJeG1tMyx4bW01CQk7IHhtbTM9Q2JPCisJcGFkZHcJeG1tNCx4bW00CQk7IHhtbTQ9MipDYkUKKwlwYWRkdwl4bW01LHhtbTUJCTsgeG1tNT0yKkNiTworCW1vdmRxYQl4bW02LHhtbTAJCTsgeG1tNj1DckUKKwltb3ZkcWEJeG1tNyx4bW0xCQk7IHhtbTc9Q3JPCisJcGFkZHcJeG1tMCx4bW0wCQk7IHhtbTA9MipDckUKKwlwYWRkdwl4bW0xLHhtbTEJCTsgeG1tMT0yKkNyTworCisJcG11bGh3CXhtbTQsW3JlbCBQV19NRjAyMjhdCTsgeG1tND0oMipDYkUgKiAtRklYKDAuMjI4MDApKQorCXBtdWxodwl4bW01LFtyZWwgUFdfTUYwMjI4XQk7IHhtbTU9KDIqQ2JPICogLUZJWCgwLjIyODAwKSkKKwlwbXVsaHcJeG1tMCxbcmVsIFBXX0YwNDAyXQk7IHhtbTA9KDIqQ3JFICogRklYKDAuNDAyMDApKQorCXBtdWxodwl4bW0xLFtyZWwgUFdfRjA0MDJdCTsgeG1tMT0oMipDck8gKiBGSVgoMC40MDIwMCkpCisKKwlwYWRkdwl4bW00LFtyZWwgUFdfT05FXQorCXBhZGR3CXhtbTUsW3JlbCBQV19PTkVdCisJcHNyYXcJeG1tNCwxCQkJOyB4bW00PShDYkUgKiAtRklYKDAuMjI4MDApKQorCXBzcmF3CXhtbTUsMQkJCTsgeG1tNT0oQ2JPICogLUZJWCgwLjIyODAwKSkKKwlwYWRkdwl4bW0wLFtyZWwgUFdfT05FXQorCXBhZGR3CXhtbTEsW3JlbCBQV19PTkVdCisJcHNyYXcJeG1tMCwxCQkJOyB4bW0wPShDckUgKiBGSVgoMC40MDIwMCkpCisJcHNyYXcJeG1tMSwxCQkJOyB4bW0xPShDck8gKiBGSVgoMC40MDIwMCkpCisKKwlwYWRkdwl4bW00LHhtbTIKKwlwYWRkdwl4bW01LHhtbTMKKwlwYWRkdwl4bW00LHhtbTIJCTsgeG1tND0oQ2JFICogRklYKDEuNzcyMDApKT0oQi1ZKUUKKwlwYWRkdwl4bW01LHhtbTMJCTsgeG1tNT0oQ2JPICogRklYKDEuNzcyMDApKT0oQi1ZKU8KKwlwYWRkdwl4bW0wLHhtbTYJCTsgeG1tMD0oQ3JFICogRklYKDEuNDAyMDApKT0oUi1ZKUUKKwlwYWRkdwl4bW0xLHhtbTcJCTsgeG1tMT0oQ3JPICogRklYKDEuNDAyMDApKT0oUi1ZKU8KKworCW1vdmRxYQlYTU1XT1JEIFt3aygwKV0sIHhtbTQJOyB3aygwKT0oQi1ZKUUKKwltb3ZkcWEJWE1NV09SRCBbd2soMSldLCB4bW01CTsgd2soMSk9KEItWSlPCisKKwltb3ZkcWEgICAgeG1tNCx4bW0yCisJbW92ZHFhICAgIHhtbTUseG1tMworCXB1bnBja2x3ZCB4bW0yLHhtbTYKKwlwdW5wY2tod2QgeG1tNCx4bW02CisJcG1hZGR3ZCAgIHhtbTIsW3JlbCBQV19NRjAzNDRfRjAyODVdCisJcG1hZGR3ZCAgIHhtbTQsW3JlbCBQV19NRjAzNDRfRjAyODVdCisJcHVucGNrbHdkIHhtbTMseG1tNworCXB1bnBja2h3ZCB4bW01LHhtbTcKKwlwbWFkZHdkICAgeG1tMyxbcmVsIFBXX01GMDM0NF9GMDI4NV0KKwlwbWFkZHdkICAgeG1tNSxbcmVsIFBXX01GMDM0NF9GMDI4NV0KKworCXBhZGRkICAgICB4bW0yLFtyZWwgUERfT05FSEFMRl0KKwlwYWRkZCAgICAgeG1tNCxbcmVsIFBEX09ORUhBTEZdCisJcHNyYWQgICAgIHhtbTIsU0NBTEVCSVRTCisJcHNyYWQgICAgIHhtbTQsU0NBTEVCSVRTCisJcGFkZGQgICAgIHhtbTMsW3JlbCBQRF9PTkVIQUxGXQorCXBhZGRkICAgICB4bW01LFtyZWwgUERfT05FSEFMRl0KKwlwc3JhZCAgICAgeG1tMyxTQ0FMRUJJVFMKKwlwc3JhZCAgICAgeG1tNSxTQ0FMRUJJVFMKKworCXBhY2tzc2R3ICB4bW0yLHhtbTQJOyB4bW0yPUNiRSotRklYKDAuMzQ0KStDckUqRklYKDAuMjg1KQorCXBhY2tzc2R3ICB4bW0zLHhtbTUJOyB4bW0zPUNiTyotRklYKDAuMzQ0KStDck8qRklYKDAuMjg1KQorCXBzdWJ3ICAgICB4bW0yLHhtbTYJOyB4bW0yPUNiRSotRklYKDAuMzQ0KStDckUqLUZJWCgwLjcxNCk9KEctWSlFCisJcHN1YncgICAgIHhtbTMseG1tNwk7IHhtbTM9Q2JPKi1GSVgoMC4zNDQpK0NyTyotRklYKDAuNzE0KT0oRy1ZKU8KKworCW1vdmRxYSAgICB4bW01LCBYTU1XT1JEIFtyc2ldCTsgeG1tNT1ZKDAxMjM0NTY3ODlBQkNERUYpCisKKwlwY21wZXF3ICAgeG1tNCx4bW00CisJcHNybHcgICAgIHhtbTQsQllURV9CSVQJCTsgeG1tND17MHhGRiAweDAwIDB4RkYgMHgwMCAuLn0KKwlwYW5kICAgICAgeG1tNCx4bW01CQk7IHhtbTQ9WSgwMjQ2OEFDRSk9WUUKKwlwc3JsdyAgICAgeG1tNSxCWVRFX0JJVAkJOyB4bW01PVkoMTM1NzlCREYpPVlPCisKKwlwYWRkdyAgICAgeG1tMCx4bW00CQk7IHhtbTA9KChSLVkpRStZRSk9UkU9UigwMjQ2OEFDRSkKKwlwYWRkdyAgICAgeG1tMSx4bW01CQk7IHhtbTE9KChSLVkpTytZTyk9Uk89UigxMzU3OUJERikKKwlwYWNrdXN3YiAgeG1tMCx4bW0wCQk7IHhtbTA9UigwMjQ2OEFDRSoqKioqKioqKQorCXBhY2t1c3diICB4bW0xLHhtbTEJCTsgeG1tMT1SKDEzNTc5QkRGKioqKioqKiopCisKKwlwYWRkdyAgICAgeG1tMix4bW00CQk7IHhtbTI9KChHLVkpRStZRSk9R0U9RygwMjQ2OEFDRSkKKwlwYWRkdyAgICAgeG1tMyx4bW01CQk7IHhtbTM9KChHLVkpTytZTyk9R089RygxMzU3OUJERikKKwlwYWNrdXN3YiAgeG1tMix4bW0yCQk7IHhtbTI9RygwMjQ2OEFDRSoqKioqKioqKQorCXBhY2t1c3diICB4bW0zLHhtbTMJCTsgeG1tMz1HKDEzNTc5QkRGKioqKioqKiopCisKKwlwYWRkdyAgICAgeG1tNCwgWE1NV09SRCBbd2soMCldCTsgeG1tND0oWUUrKEItWSlFKT1CRT1CKDAyNDY4QUNFKQorCXBhZGR3ICAgICB4bW01LCBYTU1XT1JEIFt3aygxKV0JOyB4bW01PShZTysoQi1ZKU8pPUJPPUIoMTM1NzlCREYpCisJcGFja3Vzd2IgIHhtbTQseG1tNAkJOyB4bW00PUIoMDI0NjhBQ0UqKioqKioqKikKKwlwYWNrdXN3YiAgeG1tNSx4bW01CQk7IHhtbTU9QigxMzU3OUJERioqKioqKioqKQorCislaWYgUkdCX1BJWEVMU0laRSA9PSAzIDsgLS0tLS0tLS0tLS0tLS0tCisKKwk7IHhtbUE9KDAwIDAyIDA0IDA2IDA4IDBBIDBDIDBFICoqKSwgeG1tQj0oMDEgMDMgMDUgMDcgMDkgMEIgMEQgMEYgKiopCisJOyB4bW1DPSgxMCAxMiAxNCAxNiAxOCAxQSAxQyAxRSAqKiksIHhtbUQ9KDExIDEzIDE1IDE3IDE5IDFCIDFEIDFGICoqKQorCTsgeG1tRT0oMjAgMjIgMjQgMjYgMjggMkEgMkMgMkUgKiopLCB4bW1GPSgyMSAyMyAyNSAyNyAyOSAyQiAyRCAyRiAqKikKKwk7IHhtbUc9KCoqICoqICoqICoqICoqICoqICoqICoqICoqKSwgeG1tSD0oKiogKiogKiogKiogKiogKiogKiogKiogKiopCisKKwlwdW5wY2tsYncgeG1tQSx4bW1DCTsgeG1tQT0oMDAgMTAgMDIgMTIgMDQgMTQgMDYgMTYgMDggMTggMEEgMUEgMEMgMUMgMEUgMUUpCisJcHVucGNrbGJ3IHhtbUUseG1tQgk7IHhtbUU9KDIwIDAxIDIyIDAzIDI0IDA1IDI2IDA3IDI4IDA5IDJBIDBCIDJDIDBEIDJFIDBGKQorCXB1bnBja2xidyB4bW1ELHhtbUYJOyB4bW1EPSgxMSAyMSAxMyAyMyAxNSAyNSAxNyAyNyAxOSAyOSAxQiAyQiAxRCAyRCAxRiAyRikKKworCW1vdmRxYSAgICB4bW1HLHhtbUEKKwltb3ZkcWEgICAgeG1tSCx4bW1BCisJcHVucGNrbHdkIHhtbUEseG1tRQk7IHhtbUE9KDAwIDEwIDIwIDAxIDAyIDEyIDIyIDAzIDA0IDE0IDI0IDA1IDA2IDE2IDI2IDA3KQorCXB1bnBja2h3ZCB4bW1HLHhtbUUJOyB4bW1HPSgwOCAxOCAyOCAwOSAwQSAxQSAyQSAwQiAwQyAxQyAyQyAwRCAwRSAxRSAyRSAwRikKKworCXBzcmxkcSAgICB4bW1ILDIJOyB4bW1IPSgwMiAxMiAwNCAxNCAwNiAxNiAwOCAxOCAwQSAxQSAwQyAxQyAwRSAxRSAtLSAtLSkKKwlwc3JsZHEgICAgeG1tRSwyCTsgeG1tRT0oMjIgMDMgMjQgMDUgMjYgMDcgMjggMDkgMkEgMEIgMkMgMEQgMkUgMEYgLS0gLS0pCisKKwltb3ZkcWEgICAgeG1tQyx4bW1ECisJbW92ZHFhICAgIHhtbUIseG1tRAorCXB1bnBja2x3ZCB4bW1ELHhtbUgJOyB4bW1EPSgxMSAyMSAwMiAxMiAxMyAyMyAwNCAxNCAxNSAyNSAwNiAxNiAxNyAyNyAwOCAxOCkKKwlwdW5wY2tod2QgeG1tQyx4bW1ICTsgeG1tQz0oMTkgMjkgMEEgMUEgMUIgMkIgMEMgMUMgMUQgMkQgMEUgMUUgMUYgMkYgLS0gLS0pCisKKwlwc3JsZHEgICAgeG1tQiwyCTsgeG1tQj0oMTMgMjMgMTUgMjUgMTcgMjcgMTkgMjkgMUIgMkIgMUQgMkQgMUYgMkYgLS0gLS0pCisKKwltb3ZkcWEgICAgeG1tRix4bW1FCisJcHVucGNrbHdkIHhtbUUseG1tQgk7IHhtbUU9KDIyIDAzIDEzIDIzIDI0IDA1IDE1IDI1IDI2IDA3IDE3IDI3IDI4IDA5IDE5IDI5KQorCXB1bnBja2h3ZCB4bW1GLHhtbUIJOyB4bW1GPSgyQSAwQiAxQiAyQiAyQyAwRCAxRCAyRCAyRSAwRiAxRiAyRiAtLSAtLSAtLSAtLSkKKworCXBzaHVmZCAgICB4bW1ILHhtbUEsMHg0RTsgeG1tSD0oMDQgMTQgMjQgMDUgMDYgMTYgMjYgMDcgMDAgMTAgMjAgMDEgMDIgMTIgMjIgMDMpCisJbW92ZHFhICAgIHhtbUIseG1tRQorCXB1bnBja2xkcSB4bW1BLHhtbUQJOyB4bW1BPSgwMCAxMCAyMCAwMSAxMSAyMSAwMiAxMiAwMiAxMiAyMiAwMyAxMyAyMyAwNCAxNCkKKwlwdW5wY2tsZHEgeG1tRSx4bW1ICTsgeG1tRT0oMjIgMDMgMTMgMjMgMDQgMTQgMjQgMDUgMjQgMDUgMTUgMjUgMDYgMTYgMjYgMDcpCisJcHVucGNraGRxIHhtbUQseG1tQgk7IHhtbUQ9KDE1IDI1IDA2IDE2IDI2IDA3IDE3IDI3IDE3IDI3IDA4IDE4IDI4IDA5IDE5IDI5KQorCisJcHNodWZkICAgIHhtbUgseG1tRywweDRFOyB4bW1IPSgwQyAxQyAyQyAwRCAwRSAxRSAyRSAwRiAwOCAxOCAyOCAwOSAwQSAxQSAyQSAwQikKKwltb3ZkcWEgICAgeG1tQix4bW1GCisJcHVucGNrbGRxIHhtbUcseG1tQwk7IHhtbUc9KDA4IDE4IDI4IDA5IDE5IDI5IDBBIDFBIDBBIDFBIDJBIDBCIDFCIDJCIDBDIDFDKQorCXB1bnBja2xkcSB4bW1GLHhtbUgJOyB4bW1GPSgyQSAwQiAxQiAyQiAwQyAxQyAyQyAwRCAyQyAwRCAxRCAyRCAwRSAxRSAyRSAwRikKKwlwdW5wY2toZHEgeG1tQyx4bW1CCTsgeG1tQz0oMUQgMkQgMEUgMUUgMkUgMEYgMUYgMkYgMUYgMkYgLS0gLS0gLS0gLS0gLS0gLS0pCisKKwlwdW5wY2tscWRxIHhtbUEseG1tRQk7IHhtbUE9KDAwIDEwIDIwIDAxIDExIDIxIDAyIDEyIDIyIDAzIDEzIDIzIDA0IDE0IDI0IDA1KQorCXB1bnBja2xxZHEgeG1tRCx4bW1HCTsgeG1tRD0oMTUgMjUgMDYgMTYgMjYgMDcgMTcgMjcgMDggMTggMjggMDkgMTkgMjkgMEEgMUEpCisJcHVucGNrbHFkcSB4bW1GLHhtbUMJOyB4bW1GPSgyQSAwQiAxQiAyQiAwQyAxQyAyQyAwRCAxRCAyRCAwRSAxRSAyRSAwRiAxRiAyRikKKworCWNtcAlyY3gsIGJ5dGUgU0laRU9GX1hNTVdPUkQKKwlqYglzaG9ydCAuY29sdW1uX3N0MzIKKworCXRlc3QJcmRpLCBTSVpFT0ZfWE1NV09SRC0xCisJam56CXNob3J0IC5vdXQxCisJOyAtLShhbGlnbmVkKS0tLS0tLS0tLS0tLS0tLS0tLS0KKwltb3ZudGRxCVhNTVdPUkQgW3JkaSswKlNJWkVPRl9YTU1XT1JEXSwgeG1tQQorCW1vdm50ZHEJWE1NV09SRCBbcmRpKzEqU0laRU9GX1hNTVdPUkRdLCB4bW1ECisJbW92bnRkcQlYTU1XT1JEIFtyZGkrMipTSVpFT0ZfWE1NV09SRF0sIHhtbUYKKwlhZGQJcmRpLCBieXRlIFJHQl9QSVhFTFNJWkUqU0laRU9GX1hNTVdPUkQJOyBvdXRwdHIKKwlqbXAJc2hvcnQgLm91dDAKKy5vdXQxOgk7IC0tKHVuYWxpZ25lZCktLS0tLS0tLS0tLS0tLS0tLQorCXBjbXBlcWIgICAgeG1tSCx4bW1ICQkJOyB4bW1IPShhbGwgMSdzKQorCW1hc2ttb3ZkcXUgeG1tQSx4bW1ICQkJOyBtb3ZudGRxdSBYTU1XT1JEIFtyZGldLCB4bW1BCisJYWRkCXJkaSwgYnl0ZSBTSVpFT0ZfWE1NV09SRAk7IG91dHB0cgorCW1hc2ttb3ZkcXUgeG1tRCx4bW1ICQkJOyBtb3ZudGRxdSBYTU1XT1JEIFtyZGldLCB4bW1ECisJYWRkCXJkaSwgYnl0ZSBTSVpFT0ZfWE1NV09SRAk7IG91dHB0cgorCW1hc2ttb3ZkcXUgeG1tRix4bW1ICQkJOyBtb3ZudGRxdSBYTU1XT1JEIFtyZGldLCB4bW1GCisJYWRkCXJkaSwgYnl0ZSBTSVpFT0ZfWE1NV09SRAk7IG91dHB0cgorLm91dDA6CisJc3ViCXJjeCwgYnl0ZSBTSVpFT0ZfWE1NV09SRAorCWp6CW5lYXIgLm5leHRyb3cKKworCWFkZAlyc2ksIGJ5dGUgU0laRU9GX1hNTVdPUkQJOyBpbnB0cjAKKwlhZGQJcmJ4LCBieXRlIFNJWkVPRl9YTU1XT1JECTsgaW5wdHIxCisJYWRkCXJkeCwgYnl0ZSBTSVpFT0ZfWE1NV09SRAk7IGlucHRyMgorCWptcAluZWFyIC5jb2x1bW5sb29wCisKKy5jb2x1bW5fc3QzMjoKKwlwY21wZXFiCXhtbUgseG1tSAkJCTsgeG1tSD0oYWxsIDEncykKKwlsZWEJcmN4LCBbcmN4K3JjeCoyXQkJOyBpbXVsIGVjeCwgUkdCX1BJWEVMU0laRQorCWNtcAlyY3gsIGJ5dGUgMipTSVpFT0ZfWE1NV09SRAorCWpiCXNob3J0IC5jb2x1bW5fc3QxNgorCW1hc2ttb3ZkcXUgeG1tQSx4bW1ICQkJOyBtb3ZudGRxdSBYTU1XT1JEIFtyZGldLCB4bW1BCisJYWRkCXJkaSwgYnl0ZSBTSVpFT0ZfWE1NV09SRAk7IG91dHB0cgorCW1hc2ttb3ZkcXUgeG1tRCx4bW1ICQkJOyBtb3ZudGRxdSBYTU1XT1JEIFtyZGldLCB4bW1ECisJYWRkCXJkaSwgYnl0ZSBTSVpFT0ZfWE1NV09SRAk7IG91dHB0cgorCW1vdmRxYQl4bW1BLHhtbUYKKwlzdWIJcmN4LCBieXRlIDIqU0laRU9GX1hNTVdPUkQKKwlqbXAJc2hvcnQgLmNvbHVtbl9zdDE1CisuY29sdW1uX3N0MTY6CisJY21wCXJjeCwgYnl0ZSBTSVpFT0ZfWE1NV09SRAorCWpiCXNob3J0IC5jb2x1bW5fc3QxNQorCW1hc2ttb3ZkcXUgeG1tQSx4bW1ICQkJOyBtb3ZudGRxdSBYTU1XT1JEIFtyZGldLCB4bW1BCisJYWRkCXJkaSwgYnl0ZSBTSVpFT0ZfWE1NV09SRAk7IG91dHB0cgorCW1vdmRxYQl4bW1BLHhtbUQKKwlzdWIJcmN4LCBieXRlIFNJWkVPRl9YTU1XT1JECisuY29sdW1uX3N0MTU6CisJbW92CXJheCxyY3gKKwl4b3IJcmN4LCBieXRlIDB4MEYKKwlzaGwJcmN4LCAyCisJbW92ZAl4bW1CLGVjeAorCXBzcmxxCXhtbUgsNAorCXBjbXBlcWIJeG1tRSx4bW1FCisJcHNybHEJeG1tSCx4bW1CCisJcHNybHEJeG1tRSx4bW1CCisJcHVucGNrbGJ3IHhtbUUseG1tSAorCTsgLS0tLS0tLS0tLS0tLS0tLQorCW1vdglyY3gscmRpCisJYW5kCXJjeCwgYnl0ZSBTSVpFT0ZfWE1NV09SRC0xCisJanoJc2hvcnQgLmFkajAKKwlhZGQJcmF4LHJjeAorCWNtcAlyYXgsIGJ5dGUgU0laRU9GX1hNTVdPUkQKKwlqYQlzaG9ydCAuYWRqMAorCWFuZAlyZGksIGJ5dGUgKC1TSVpFT0ZfWE1NV09SRCkJOyBhbGlnbiB0byAxNi1ieXRlIGJvdW5kYXJ5CisJc2hsCXJjeCwgMwkJCTsgcHNsbGRxIHhtbUEsZWN4ICYgcHNsbGRxIHhtbUUscmN4CisJbW92ZHFhCXhtbUcseG1tQQorCW1vdmRxYQl4bW1DLHhtbUUKKwlwc2xsZHEJeG1tQSwgU0laRU9GX1hNTVdPUkQvMgorCXBzbGxkcQl4bW1FLCBTSVpFT0ZfWE1NV09SRC8yCisJbW92ZAl4bW1ELGVjeAorCXN1YglyY3gsIGJ5dGUgKFNJWkVPRl9YTU1XT1JELzIpKkJZVEVfQklUCisJamIJc2hvcnQgLmFkajEKKwltb3ZkCXhtbUYsZWN4CisJcHNsbHEJeG1tQSx4bW1GCisJcHNsbHEJeG1tRSx4bW1GCisJam1wCXNob3J0IC5hZGowCisuYWRqMToJbmVnCWVjeAorCW1vdmQJeG1tRixlY3gKKwlwc3JscQl4bW1BLHhtbUYKKwlwc3JscQl4bW1FLHhtbUYKKwlwc2xscQl4bW1HLHhtbUQKKwlwc2xscQl4bW1DLHhtbUQKKwlwb3IJeG1tQSx4bW1HCisJcG9yCXhtbUUseG1tQworLmFkajA6CTsgLS0tLS0tLS0tLS0tLS0tLQorCW1hc2ttb3ZkcXUgeG1tQSx4bW1FCQkJOyBtb3ZudGRxdSBYTU1XT1JEIFtyZGldLCB4bW1BCisKKyVlbHNlIDsgUkdCX1BJWEVMU0laRSA9PSA0IDsgLS0tLS0tLS0tLS0KKworJWlmZGVmIFJHQlhfRklMTEVSXzBYRkYKKwlwY21wZXFiICAgeG1tNix4bW02CQk7IHhtbTY9WEU9WCgwMjQ2OEFDRSoqKioqKioqKQorCXBjbXBlcWIgICB4bW03LHhtbTcJCTsgeG1tNz1YTz1YKDEzNTc5QkRGKioqKioqKiopCislZWxzZQorCXB4b3IgICAgICB4bW02LHhtbTYJCTsgeG1tNj1YRT1YKDAyNDY4QUNFKioqKioqKiopCisJcHhvciAgICAgIHhtbTcseG1tNwkJOyB4bW03PVhPPVgoMTM1NzlCREYqKioqKioqKikKKyVlbmRpZgorCTsgeG1tQT0oMDAgMDIgMDQgMDYgMDggMEEgMEMgMEUgKiopLCB4bW1CPSgwMSAwMyAwNSAwNyAwOSAwQiAwRCAwRiAqKikKKwk7IHhtbUM9KDEwIDEyIDE0IDE2IDE4IDFBIDFDIDFFICoqKSwgeG1tRD0oMTEgMTMgMTUgMTcgMTkgMUIgMUQgMUYgKiopCisJOyB4bW1FPSgyMCAyMiAyNCAyNiAyOCAyQSAyQyAyRSAqKiksIHhtbUY9KDIxIDIzIDI1IDI3IDI5IDJCIDJEIDJGICoqKQorCTsgeG1tRz0oMzAgMzIgMzQgMzYgMzggM0EgM0MgM0UgKiopLCB4bW1IPSgzMSAzMyAzNSAzNyAzOSAzQiAzRCAzRiAqKikKKworCXB1bnBja2xidyB4bW1BLHhtbUMJOyB4bW1BPSgwMCAxMCAwMiAxMiAwNCAxNCAwNiAxNiAwOCAxOCAwQSAxQSAwQyAxQyAwRSAxRSkKKwlwdW5wY2tsYncgeG1tRSx4bW1HCTsgeG1tRT0oMjAgMzAgMjIgMzIgMjQgMzQgMjYgMzYgMjggMzggMkEgM0EgMkMgM0MgMkUgM0UpCisJcHVucGNrbGJ3IHhtbUIseG1tRAk7IHhtbUI9KDAxIDExIDAzIDEzIDA1IDE1IDA3IDE3IDA5IDE5IDBCIDFCIDBEIDFEIDBGIDFGKQorCXB1bnBja2xidyB4bW1GLHhtbUgJOyB4bW1GPSgyMSAzMSAyMyAzMyAyNSAzNSAyNyAzNyAyOSAzOSAyQiAzQiAyRCAzRCAyRiAzRikKKworCW1vdmRxYSAgICB4bW1DLHhtbUEKKwlwdW5wY2tsd2QgeG1tQSx4bW1FCTsgeG1tQT0oMDAgMTAgMjAgMzAgMDIgMTIgMjIgMzIgMDQgMTQgMjQgMzQgMDYgMTYgMjYgMzYpCisJcHVucGNraHdkIHhtbUMseG1tRQk7IHhtbUM9KDA4IDE4IDI4IDM4IDBBIDFBIDJBIDNBIDBDIDFDIDJDIDNDIDBFIDFFIDJFIDNFKQorCW1vdmRxYSAgICB4bW1HLHhtbUIKKwlwdW5wY2tsd2QgeG1tQix4bW1GCTsgeG1tQj0oMDEgMTEgMjEgMzEgMDMgMTMgMjMgMzMgMDUgMTUgMjUgMzUgMDcgMTcgMjcgMzcpCisJcHVucGNraHdkIHhtbUcseG1tRgk7IHhtbUc9KDA5IDE5IDI5IDM5IDBCIDFCIDJCIDNCIDBEIDFEIDJEIDNEIDBGIDFGIDJGIDNGKQorCisJbW92ZHFhICAgIHhtbUQseG1tQQorCXB1bnBja2xkcSB4bW1BLHhtbUIJOyB4bW1BPSgwMCAxMCAyMCAzMCAwMSAxMSAyMSAzMSAwMiAxMiAyMiAzMiAwMyAxMyAyMyAzMykKKwlwdW5wY2toZHEgeG1tRCx4bW1CCTsgeG1tRD0oMDQgMTQgMjQgMzQgMDUgMTUgMjUgMzUgMDYgMTYgMjYgMzYgMDcgMTcgMjcgMzcpCisJbW92ZHFhICAgIHhtbUgseG1tQworCXB1bnBja2xkcSB4bW1DLHhtbUcJOyB4bW1DPSgwOCAxOCAyOCAzOCAwOSAxOSAyOSAzOSAwQSAxQSAyQSAzQSAwQiAxQiAyQiAzQikKKwlwdW5wY2toZHEgeG1tSCx4bW1HCTsgeG1tSD0oMEMgMUMgMkMgM0MgMEQgMUQgMkQgM0QgMEUgMUUgMkUgM0UgMEYgMUYgMkYgM0YpCisKKwljbXAJcmN4LCBieXRlIFNJWkVPRl9YTU1XT1JECisJamIJc2hvcnQgLmNvbHVtbl9zdDMyCisKKwl0ZXN0CXJkaSwgU0laRU9GX1hNTVdPUkQtMQorCWpueglzaG9ydCAub3V0MQorCTsgLS0oYWxpZ25lZCktLS0tLS0tLS0tLS0tLS0tLS0tCisJbW92bnRkcQlYTU1XT1JEIFtyZGkrMCpTSVpFT0ZfWE1NV09SRF0sIHhtbUEKKwltb3ZudGRxCVhNTVdPUkQgW3JkaSsxKlNJWkVPRl9YTU1XT1JEXSwgeG1tRAorCW1vdm50ZHEJWE1NV09SRCBbcmRpKzIqU0laRU9GX1hNTVdPUkRdLCB4bW1DCisJbW92bnRkcQlYTU1XT1JEIFtyZGkrMypTSVpFT0ZfWE1NV09SRF0sIHhtbUgKKwlhZGQJcmRpLCBieXRlIFJHQl9QSVhFTFNJWkUqU0laRU9GX1hNTVdPUkQJOyBvdXRwdHIKKwlqbXAJc2hvcnQgLm91dDAKKy5vdXQxOgk7IC0tKHVuYWxpZ25lZCktLS0tLS0tLS0tLS0tLS0tLQorCXBjbXBlcWIgICAgeG1tRSx4bW1FCQkJOyB4bW1FPShhbGwgMSdzKQorCW1hc2ttb3ZkcXUgeG1tQSx4bW1FCQkJOyBtb3ZudGRxdSBYTU1XT1JEIFtyZGldLCB4bW1BCisJYWRkCXJkaSwgYnl0ZSBTSVpFT0ZfWE1NV09SRAk7IG91dHB0cgorCW1hc2ttb3ZkcXUgeG1tRCx4bW1FCQkJOyBtb3ZudGRxdSBYTU1XT1JEIFtyZGldLCB4bW1ECisJYWRkCXJkaSwgYnl0ZSBTSVpFT0ZfWE1NV09SRAk7IG91dHB0cgorCW1hc2ttb3ZkcXUgeG1tQyx4bW1FCQkJOyBtb3ZudGRxdSBYTU1XT1JEIFtyZGldLCB4bW1DCisJYWRkCXJkaSwgYnl0ZSBTSVpFT0ZfWE1NV09SRAk7IG91dHB0cgorCW1hc2ttb3ZkcXUgeG1tSCx4bW1FCQkJOyBtb3ZudGRxdSBYTU1XT1JEIFtyZGldLCB4bW1ICisJYWRkCXJkaSwgYnl0ZSBTSVpFT0ZfWE1NV09SRAk7IG91dHB0cgorLm91dDA6CisJc3ViCXJjeCwgYnl0ZSBTSVpFT0ZfWE1NV09SRAorCWp6CW5lYXIgLm5leHRyb3cKKworCWFkZAlyc2ksIGJ5dGUgU0laRU9GX1hNTVdPUkQJOyBpbnB0cjAKKwlhZGQJcmJ4LCBieXRlIFNJWkVPRl9YTU1XT1JECTsgaW5wdHIxCisJYWRkCXJkeCwgYnl0ZSBTSVpFT0ZfWE1NV09SRAk7IGlucHRyMgorCWptcAluZWFyIC5jb2x1bW5sb29wCisKKy5jb2x1bW5fc3QzMjoKKwlwY21wZXFiCXhtbUUseG1tRQkJCTsgeG1tRT0oYWxsIDEncykKKwljbXAJcmN4LCBieXRlIFNJWkVPRl9YTU1XT1JELzIKKwlqYglzaG9ydCAuY29sdW1uX3N0MTYKKwltYXNrbW92ZHF1IHhtbUEseG1tRQkJCTsgbW92bnRkcXUgWE1NV09SRCBbcmRpXSwgeG1tQQorCWFkZAlyZGksIGJ5dGUgU0laRU9GX1hNTVdPUkQJOyBvdXRwdHIKKwltYXNrbW92ZHF1IHhtbUQseG1tRQkJCTsgbW92bnRkcXUgWE1NV09SRCBbcmRpXSwgeG1tRAorCWFkZAlyZGksIGJ5dGUgU0laRU9GX1hNTVdPUkQJOyBvdXRwdHIKKwltb3ZkcWEJeG1tQSx4bW1DCisJbW92ZHFhCXhtbUQseG1tSAorCXN1YglyY3gsIGJ5dGUgU0laRU9GX1hNTVdPUkQvMgorLmNvbHVtbl9zdDE2OgorCWNtcAlyY3gsIGJ5dGUgU0laRU9GX1hNTVdPUkQvNAorCWpiCXNob3J0IC5jb2x1bW5fc3QxNQorCW1hc2ttb3ZkcXUgeG1tQSx4bW1FCQkJOyBtb3ZudGRxdSBYTU1XT1JEIFtyZGldLCB4bW1BCisJYWRkCXJkaSwgYnl0ZSBTSVpFT0ZfWE1NV09SRAk7IG91dHB0cgorCW1vdmRxYQl4bW1BLHhtbUQKKwlzdWIJcmN4LCBieXRlIFNJWkVPRl9YTU1XT1JELzQKKy5jb2x1bW5fc3QxNToKKwljbXAJcmN4LCBieXRlIFNJWkVPRl9YTU1XT1JELzE2CisJamIJbmVhciAubmV4dHJvdworCW1vdglyYXgscmN4CisJeG9yCXJjeCwgYnl0ZSAweDAzCisJaW5jCXJjeAorCXNobAlyY3gsIDQKKwltb3ZkCXhtbUYsZWN4CisJcHNybHEJeG1tRSx4bW1GCisJcHVucGNrbGJ3IHhtbUUseG1tRQorCTsgLS0tLS0tLS0tLS0tLS0tLQorCW1vdglyY3gscmRpCisJYW5kCXJjeCwgYnl0ZSBTSVpFT0ZfWE1NV09SRC0xCisJanoJc2hvcnQgLmFkajAKKwlsZWEJcmF4LCBbcmN4K3JheCo0XQk7IFJHQl9QSVhFTFNJWkUKKwljbXAJcmF4LCBieXRlIFNJWkVPRl9YTU1XT1JECisJamEJc2hvcnQgLmFkajAKKwlhbmQJcmRpLCBieXRlICgtU0laRU9GX1hNTVdPUkQpCTsgYWxpZ24gdG8gMTYtYnl0ZSBib3VuZGFyeQorCXNobAlyY3gsIDMJCQk7IHBzbGxkcSB4bW1BLGVjeCAmIHBzbGxkcSB4bW1FLGVjeAorCW1vdmRxYQl4bW1CLHhtbUEKKwltb3ZkcWEJeG1tRyx4bW1FCisJcHNsbGRxCXhtbUEsIFNJWkVPRl9YTU1XT1JELzIKKwlwc2xsZHEJeG1tRSwgU0laRU9GX1hNTVdPUkQvMgorCW1vdmQJeG1tQyxlY3gKKwlzdWIJcmN4LCBieXRlIChTSVpFT0ZfWE1NV09SRC8yKSpCWVRFX0JJVAorCWpiCXNob3J0IC5hZGoxCisJbW92ZAl4bW1ILGVjeAorCXBzbGxxCXhtbUEseG1tSAorCXBzbGxxCXhtbUUseG1tSAorCWptcAlzaG9ydCAuYWRqMAorLmFkajE6CW5lZwlyY3gKKwltb3ZkCXhtbUgsZWN4CisJcHNybHEJeG1tQSx4bW1ICisJcHNybHEJeG1tRSx4bW1ICisJcHNsbHEJeG1tQix4bW1DCisJcHNsbHEJeG1tRyx4bW1DCisJcG9yCXhtbUEseG1tQgorCXBvcgl4bW1FLHhtbUcKKy5hZGowOgk7IC0tLS0tLS0tLS0tLS0tLS0KKwltYXNrbW92ZHF1IHhtbUEseG1tRQkJCTsgbW92bnRkcXUgWE1NV09SRCBbcmRpXSwgeG1tQQorCislZW5kaWYgOyBSR0JfUElYRUxTSVpFIDsgLS0tLS0tLS0tLS0tLS0tCisKKy5uZXh0cm93OgorCXBvcAlyY3gKKwlwb3AJcnNpCisJcG9wCXJieAorCXBvcAlyZHgKKwlwb3AJcmRpCisJcG9wCXJheAorCisJYWRkCXJzaSwgYnl0ZSBTSVpFT0ZfSlNBTVBST1cKKwlhZGQJcmJ4LCBieXRlIFNJWkVPRl9KU0FNUFJPVworCWFkZAlyZHgsIGJ5dGUgU0laRU9GX0pTQU1QUk9XCisJYWRkCXJkaSwgYnl0ZSBTSVpFT0ZfSlNBTVBST1cJOyBvdXRwdXRfYnVmCisJZGVjCXJheAkJCQk7IG51bV9yb3dzCisJamcJbmVhciAucm93bG9vcAorCisJc2ZlbmNlCQk7IGZsdXNoIHRoZSB3cml0ZSBidWZmZXIKKworLnJldHVybjoKKwlwb3AJcmJ4CisJdW5jb2xsZWN0X2FyZ3MKKwltb3YJcnNwLHJicAkJOyByc3AgPC0gYWxpZ25lZCByYnAKKwlwb3AJcnNwCQk7IHJzcCA8LSBvcmlnaW5hbCByYnAKKwlwb3AJcmJwCisJcmV0CisKKzsgRm9yIHNvbWUgcmVhc29uLCB0aGUgT1MgWCBsaW5rZXIgZG9lcyBub3QgaG9ub3IgdGhlIHJlcXVlc3QgdG8gYWxpZ24gdGhlCis7IHNlZ21lbnQgdW5sZXNzIHdlIGRvIHRoaXMuCisJYWxpZ24JMTYKZGlmZiAtLWdpdCBhL3NpbWQvamRjbHJzczIuYXNtIGIvc2ltZC9qZGNscnNzMi5hc20KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODY1ZmE4MgotLS0gL2Rldi9udWxsCisrKyBiL3NpbWQvamRjbHJzczIuYXNtCkBAIC0wLDAgKzEsNTA1IEBACis7Cis7IGpkY2xyc3MyLmFzbSAtIGNvbG9yc3BhY2UgY29udmVyc2lvbiAoU1NFMikKKzsKKzsgQ29weXJpZ2h0IDIwMDkgUGllcnJlIE9zc21hbiA8b3NzbWFuQGNlbmRpby5zZT4gZm9yIENlbmRpbyBBQgorOworOyBCYXNlZCBvbgorOyB4ODYgU0lNRCBleHRlbnNpb24gZm9yIElKRyBKUEVHIGxpYnJhcnkKKzsgQ29weXJpZ2h0IChDKSAxOTk5LTIwMDYsIE1JWUFTQUtBIE1hc2FydS4KKzsgRm9yIGNvbmRpdGlvbnMgb2YgZGlzdHJpYnV0aW9uIGFuZCB1c2UsIHNlZSBjb3B5cmlnaHQgbm90aWNlIGluIGpzaW1kZXh0LmluYworOworOyBUaGlzIGZpbGUgc2hvdWxkIGJlIGFzc2VtYmxlZCB3aXRoIE5BU00gKE5ldHdpZGUgQXNzZW1ibGVyKSwKKzsgY2FuICpub3QqIGJlIGFzc2VtYmxlZCB3aXRoIE1pY3Jvc29mdCdzIE1BU00gb3IgYW55IGNvbXBhdGlibGUKKzsgYXNzZW1ibGVyIChpbmNsdWRpbmcgQm9ybGFuZCdzIFR1cmJvIEFzc2VtYmxlcikuCis7IE5BU00gaXMgYXZhaWxhYmxlIGZyb20gaHR0cDovL25hc20uc291cmNlZm9yZ2UubmV0LyBvcgorOyBodHRwOi8vc291cmNlZm9yZ2UubmV0L3Byb2plY3Qvc2hvd2ZpbGVzLnBocD9ncm91cF9pZD02MjA4Cis7Cis7IFtUQUI4XQorCislaW5jbHVkZSAiamNvbHNhbXAuaW5jIgorCQkJCQorOyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCVNFQ1RJT04JU0VHX1RFWFQKKwlCSVRTCTMyCis7Cis7IENvbnZlcnQgc29tZSByb3dzIG9mIHNhbXBsZXMgdG8gdGhlIG91dHB1dCBjb2xvcnNwYWNlLgorOworOyBHTE9CQUwodm9pZCkKKzsganNpbWRfeWNjX3JnYl9jb252ZXJ0X3NzZTIgKEpESU1FTlNJT04gb3V0X3dpZHRoLAorOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSlNBTVBJTUFHRSBpbnB1dF9idWYsIEpESU1FTlNJT04gaW5wdXRfcm93LAorOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSlNBTVBBUlJBWSBvdXRwdXRfYnVmLCBpbnQgbnVtX3Jvd3MpCis7CisKKyVkZWZpbmUgb3V0X3dpZHRoKGIpCShiKSs4CQkJOyBKRElNRU5TSU9OIG91dF93aWR0aAorJWRlZmluZSBpbnB1dF9idWYoYikJKGIpKzEyCQk7IEpTQU1QSU1BR0UgaW5wdXRfYnVmCislZGVmaW5lIGlucHV0X3JvdyhiKQkoYikrMTYJCTsgSkRJTUVOU0lPTiBpbnB1dF9yb3cKKyVkZWZpbmUgb3V0cHV0X2J1ZihiKQkoYikrMjAJCTsgSlNBTVBBUlJBWSBvdXRwdXRfYnVmCislZGVmaW5lIG51bV9yb3dzKGIpCShiKSsyNAkJOyBpbnQgbnVtX3Jvd3MKKworJWRlZmluZSBvcmlnaW5hbF9lYnAJZWJwKzAKKyVkZWZpbmUgd2soaSkJCWVicC0oV0tfTlVNLShpKSkqU0laRU9GX1hNTVdPUkQJOyB4bW13b3JkIHdrW1dLX05VTV0KKyVkZWZpbmUgV0tfTlVNCQkyCislZGVmaW5lIGdvdHB0cgkJd2soMCktU0laRU9GX1BPSU5URVIJOyB2b2lkICogZ290cHRyCisKKwlhbGlnbgkxNgorCWdsb2JhbAlFWFROKGpzaW1kX3ljY19yZ2JfY29udmVydF9zc2UyKQorCitFWFROKGpzaW1kX3ljY19yZ2JfY29udmVydF9zc2UyKToKKwlwdXNoCWVicAorCW1vdgllYXgsZXNwCQkJCTsgZWF4ID0gb3JpZ2luYWwgZWJwCisJc3ViCWVzcCwgYnl0ZSA0CisJYW5kCWVzcCwgYnl0ZSAoLVNJWkVPRl9YTU1XT1JEKQk7IGFsaWduIHRvIDEyOCBiaXRzCisJbW92CVtlc3BdLGVheAorCW1vdgllYnAsZXNwCQkJCTsgZWJwID0gYWxpZ25lZCBlYnAKKwlsZWEJZXNwLCBbd2soMCldCisJcHVzaHBpYwllYXgJCTsgbWFrZSBhIHJvb20gZm9yIEdPVCBhZGRyZXNzCisJcHVzaAllYngKKzsJcHVzaAllY3gJCTsgbmVlZCBub3QgYmUgcHJlc2VydmVkCis7CXB1c2gJZWR4CQk7IG5lZWQgbm90IGJlIHByZXNlcnZlZAorCXB1c2gJZXNpCisJcHVzaAllZGkKKworCWdldF9HT1QJZWJ4CQkJOyBnZXQgR09UIGFkZHJlc3MKKwltb3ZwaWMJUE9JTlRFUiBbZ290cHRyXSwgZWJ4CTsgc2F2ZSBHT1QgYWRkcmVzcworCisJbW92CWVjeCwgSkRJTUVOU0lPTiBbb3V0X3dpZHRoKGVheCldCTsgbnVtX2NvbHMKKwl0ZXN0CWVjeCxlY3gKKwlqegluZWFyIC5yZXR1cm4KKworCXB1c2gJZWN4CisKKwltb3YJZWRpLCBKU0FNUElNQUdFIFtpbnB1dF9idWYoZWF4KV0KKwltb3YJZWN4LCBKRElNRU5TSU9OIFtpbnB1dF9yb3coZWF4KV0KKwltb3YJZXNpLCBKU0FNUEFSUkFZIFtlZGkrMCpTSVpFT0ZfSlNBTVBBUlJBWV0KKwltb3YJZWJ4LCBKU0FNUEFSUkFZIFtlZGkrMSpTSVpFT0ZfSlNBTVBBUlJBWV0KKwltb3YJZWR4LCBKU0FNUEFSUkFZIFtlZGkrMipTSVpFT0ZfSlNBTVBBUlJBWV0KKwlsZWEJZXNpLCBbZXNpK2VjeCpTSVpFT0ZfSlNBTVBST1ddCisJbGVhCWVieCwgW2VieCtlY3gqU0laRU9GX0pTQU1QUk9XXQorCWxlYQllZHgsIFtlZHgrZWN4KlNJWkVPRl9KU0FNUFJPV10KKworCXBvcAllY3gKKworCW1vdgllZGksIEpTQU1QQVJSQVkgW291dHB1dF9idWYoZWF4KV0KKwltb3YJZWF4LCBJTlQgW251bV9yb3dzKGVheCldCisJdGVzdAllYXgsZWF4CisJamxlCW5lYXIgLnJldHVybgorCWFsaWdueAkxNiw3Cisucm93bG9vcDoKKwlwdXNoCWVheAorCXB1c2gJZWRpCisJcHVzaAllZHgKKwlwdXNoCWVieAorCXB1c2gJZXNpCisJcHVzaAllY3gJCQk7IGNvbAorCisJbW92CWVzaSwgSlNBTVBST1cgW2VzaV0JOyBpbnB0cjAKKwltb3YJZWJ4LCBKU0FNUFJPVyBbZWJ4XQk7IGlucHRyMQorCW1vdgllZHgsIEpTQU1QUk9XIFtlZHhdCTsgaW5wdHIyCisJbW92CWVkaSwgSlNBTVBST1cgW2VkaV0JOyBvdXRwdHIKKwltb3ZwaWMJZWF4LCBQT0lOVEVSIFtnb3RwdHJdCTsgbG9hZCBHT1QgYWRkcmVzcyAoZWF4KQorCWFsaWdueAkxNiw3CisuY29sdW1ubG9vcDoKKworCW1vdmRxYQl4bW01LCBYTU1XT1JEIFtlYnhdCTsgeG1tNT1DYigwMTIzNDU2Nzg5QUJDREVGKQorCW1vdmRxYQl4bW0xLCBYTU1XT1JEIFtlZHhdCTsgeG1tMT1DcigwMTIzNDU2Nzg5QUJDREVGKQorCisJcGNtcGVxdwl4bW00LHhtbTQKKwlwY21wZXF3CXhtbTcseG1tNworCXBzcmx3CXhtbTQsQllURV9CSVQKKwlwc2xsdwl4bW03LDcJCQk7IHhtbTc9ezB4RkY4MCAweEZGODAgMHhGRjgwIDB4RkY4MCAuLn0KKwltb3ZkcWEJeG1tMCx4bW00CQk7IHhtbTA9eG1tND17MHhGRiAweDAwIDB4RkYgMHgwMCAuLn0KKworCXBhbmQJeG1tNCx4bW01CQk7IHhtbTQ9Q2IoMDI0NjhBQ0UpPUNiRQorCXBzcmx3CXhtbTUsQllURV9CSVQJCTsgeG1tNT1DYigxMzU3OUJERik9Q2JPCisJcGFuZAl4bW0wLHhtbTEJCTsgeG1tMD1DcigwMjQ2OEFDRSk9Q3JFCisJcHNybHcJeG1tMSxCWVRFX0JJVAkJOyB4bW0xPUNyKDEzNTc5QkRGKT1Dck8KKworCXBhZGR3CXhtbTQseG1tNworCXBhZGR3CXhtbTUseG1tNworCXBhZGR3CXhtbTAseG1tNworCXBhZGR3CXhtbTEseG1tNworCisJOyAoT3JpZ2luYWwpCisJOyBSID0gWSAgICAgICAgICAgICAgICArIDEuNDAyMDAgKiBDcgorCTsgRyA9IFkgLSAwLjM0NDE0ICogQ2IgLSAwLjcxNDE0ICogQ3IKKwk7IEIgPSBZICsgMS43NzIwMCAqIENiCisJOworCTsgKFRoaXMgaW1wbGVtZW50YXRpb24pCisJOyBSID0gWSAgICAgICAgICAgICAgICArIDAuNDAyMDAgKiBDciArIENyCisJOyBHID0gWSAtIDAuMzQ0MTQgKiBDYiArIDAuMjg1ODYgKiBDciAtIENyCisJOyBCID0gWSAtIDAuMjI4MDAgKiBDYiArIENiICsgQ2IKKworCW1vdmRxYQl4bW0yLHhtbTQJCTsgeG1tMj1DYkUKKwltb3ZkcWEJeG1tMyx4bW01CQk7IHhtbTM9Q2JPCisJcGFkZHcJeG1tNCx4bW00CQk7IHhtbTQ9MipDYkUKKwlwYWRkdwl4bW01LHhtbTUJCTsgeG1tNT0yKkNiTworCW1vdmRxYQl4bW02LHhtbTAJCTsgeG1tNj1DckUKKwltb3ZkcWEJeG1tNyx4bW0xCQk7IHhtbTc9Q3JPCisJcGFkZHcJeG1tMCx4bW0wCQk7IHhtbTA9MipDckUKKwlwYWRkdwl4bW0xLHhtbTEJCTsgeG1tMT0yKkNyTworCisJcG11bGh3CXhtbTQsW0dPVE9GRihlYXgsUFdfTUYwMjI4KV0JOyB4bW00PSgyKkNiRSAqIC1GSVgoMC4yMjgwMCkpCisJcG11bGh3CXhtbTUsW0dPVE9GRihlYXgsUFdfTUYwMjI4KV0JOyB4bW01PSgyKkNiTyAqIC1GSVgoMC4yMjgwMCkpCisJcG11bGh3CXhtbTAsW0dPVE9GRihlYXgsUFdfRjA0MDIpXQk7IHhtbTA9KDIqQ3JFICogRklYKDAuNDAyMDApKQorCXBtdWxodwl4bW0xLFtHT1RPRkYoZWF4LFBXX0YwNDAyKV0JOyB4bW0xPSgyKkNyTyAqIEZJWCgwLjQwMjAwKSkKKworCXBhZGR3CXhtbTQsW0dPVE9GRihlYXgsUFdfT05FKV0KKwlwYWRkdwl4bW01LFtHT1RPRkYoZWF4LFBXX09ORSldCisJcHNyYXcJeG1tNCwxCQkJOyB4bW00PShDYkUgKiAtRklYKDAuMjI4MDApKQorCXBzcmF3CXhtbTUsMQkJCTsgeG1tNT0oQ2JPICogLUZJWCgwLjIyODAwKSkKKwlwYWRkdwl4bW0wLFtHT1RPRkYoZWF4LFBXX09ORSldCisJcGFkZHcJeG1tMSxbR09UT0ZGKGVheCxQV19PTkUpXQorCXBzcmF3CXhtbTAsMQkJCTsgeG1tMD0oQ3JFICogRklYKDAuNDAyMDApKQorCXBzcmF3CXhtbTEsMQkJCTsgeG1tMT0oQ3JPICogRklYKDAuNDAyMDApKQorCisJcGFkZHcJeG1tNCx4bW0yCisJcGFkZHcJeG1tNSx4bW0zCisJcGFkZHcJeG1tNCx4bW0yCQk7IHhtbTQ9KENiRSAqIEZJWCgxLjc3MjAwKSk9KEItWSlFCisJcGFkZHcJeG1tNSx4bW0zCQk7IHhtbTU9KENiTyAqIEZJWCgxLjc3MjAwKSk9KEItWSlPCisJcGFkZHcJeG1tMCx4bW02CQk7IHhtbTA9KENyRSAqIEZJWCgxLjQwMjAwKSk9KFItWSlFCisJcGFkZHcJeG1tMSx4bW03CQk7IHhtbTE9KENyTyAqIEZJWCgxLjQwMjAwKSk9KFItWSlPCisKKwltb3ZkcWEJWE1NV09SRCBbd2soMCldLCB4bW00CTsgd2soMCk9KEItWSlFCisJbW92ZHFhCVhNTVdPUkQgW3drKDEpXSwgeG1tNQk7IHdrKDEpPShCLVkpTworCisJbW92ZHFhICAgIHhtbTQseG1tMgorCW1vdmRxYSAgICB4bW01LHhtbTMKKwlwdW5wY2tsd2QgeG1tMix4bW02CisJcHVucGNraHdkIHhtbTQseG1tNgorCXBtYWRkd2QgICB4bW0yLFtHT1RPRkYoZWF4LFBXX01GMDM0NF9GMDI4NSldCisJcG1hZGR3ZCAgIHhtbTQsW0dPVE9GRihlYXgsUFdfTUYwMzQ0X0YwMjg1KV0KKwlwdW5wY2tsd2QgeG1tMyx4bW03CisJcHVucGNraHdkIHhtbTUseG1tNworCXBtYWRkd2QgICB4bW0zLFtHT1RPRkYoZWF4LFBXX01GMDM0NF9GMDI4NSldCisJcG1hZGR3ZCAgIHhtbTUsW0dPVE9GRihlYXgsUFdfTUYwMzQ0X0YwMjg1KV0KKworCXBhZGRkICAgICB4bW0yLFtHT1RPRkYoZWF4LFBEX09ORUhBTEYpXQorCXBhZGRkICAgICB4bW00LFtHT1RPRkYoZWF4LFBEX09ORUhBTEYpXQorCXBzcmFkICAgICB4bW0yLFNDQUxFQklUUworCXBzcmFkICAgICB4bW00LFNDQUxFQklUUworCXBhZGRkICAgICB4bW0zLFtHT1RPRkYoZWF4LFBEX09ORUhBTEYpXQorCXBhZGRkICAgICB4bW01LFtHT1RPRkYoZWF4LFBEX09ORUhBTEYpXQorCXBzcmFkICAgICB4bW0zLFNDQUxFQklUUworCXBzcmFkICAgICB4bW01LFNDQUxFQklUUworCisJcGFja3NzZHcgIHhtbTIseG1tNAk7IHhtbTI9Q2JFKi1GSVgoMC4zNDQpK0NyRSpGSVgoMC4yODUpCisJcGFja3NzZHcgIHhtbTMseG1tNQk7IHhtbTM9Q2JPKi1GSVgoMC4zNDQpK0NyTypGSVgoMC4yODUpCisJcHN1YncgICAgIHhtbTIseG1tNgk7IHhtbTI9Q2JFKi1GSVgoMC4zNDQpK0NyRSotRklYKDAuNzE0KT0oRy1ZKUUKKwlwc3VidyAgICAgeG1tMyx4bW03CTsgeG1tMz1DYk8qLUZJWCgwLjM0NCkrQ3JPKi1GSVgoMC43MTQpPShHLVkpTworCisJbW92ZHFhICAgIHhtbTUsIFhNTVdPUkQgW2VzaV0JOyB4bW01PVkoMDEyMzQ1Njc4OUFCQ0RFRikKKworCXBjbXBlcXcgICB4bW00LHhtbTQKKwlwc3JsdyAgICAgeG1tNCxCWVRFX0JJVAkJOyB4bW00PXsweEZGIDB4MDAgMHhGRiAweDAwIC4ufQorCXBhbmQgICAgICB4bW00LHhtbTUJCTsgeG1tND1ZKDAyNDY4QUNFKT1ZRQorCXBzcmx3ICAgICB4bW01LEJZVEVfQklUCQk7IHhtbTU9WSgxMzU3OUJERik9WU8KKworCXBhZGR3ICAgICB4bW0wLHhtbTQJCTsgeG1tMD0oKFItWSlFK1lFKT1SRT1SKDAyNDY4QUNFKQorCXBhZGR3ICAgICB4bW0xLHhtbTUJCTsgeG1tMT0oKFItWSlPK1lPKT1STz1SKDEzNTc5QkRGKQorCXBhY2t1c3diICB4bW0wLHhtbTAJCTsgeG1tMD1SKDAyNDY4QUNFKioqKioqKiopCisJcGFja3Vzd2IgIHhtbTEseG1tMQkJOyB4bW0xPVIoMTM1NzlCREYqKioqKioqKikKKworCXBhZGR3ICAgICB4bW0yLHhtbTQJCTsgeG1tMj0oKEctWSlFK1lFKT1HRT1HKDAyNDY4QUNFKQorCXBhZGR3ICAgICB4bW0zLHhtbTUJCTsgeG1tMz0oKEctWSlPK1lPKT1HTz1HKDEzNTc5QkRGKQorCXBhY2t1c3diICB4bW0yLHhtbTIJCTsgeG1tMj1HKDAyNDY4QUNFKioqKioqKiopCisJcGFja3Vzd2IgIHhtbTMseG1tMwkJOyB4bW0zPUcoMTM1NzlCREYqKioqKioqKikKKworCXBhZGR3ICAgICB4bW00LCBYTU1XT1JEIFt3aygwKV0JOyB4bW00PShZRSsoQi1ZKUUpPUJFPUIoMDI0NjhBQ0UpCisJcGFkZHcgICAgIHhtbTUsIFhNTVdPUkQgW3drKDEpXQk7IHhtbTU9KFlPKyhCLVkpTyk9Qk89QigxMzU3OUJERikKKwlwYWNrdXN3YiAgeG1tNCx4bW00CQk7IHhtbTQ9QigwMjQ2OEFDRSoqKioqKioqKQorCXBhY2t1c3diICB4bW01LHhtbTUJCTsgeG1tNT1CKDEzNTc5QkRGKioqKioqKiopCisKKyVpZiBSR0JfUElYRUxTSVpFID09IDMgOyAtLS0tLS0tLS0tLS0tLS0KKworCTsgeG1tQT0oMDAgMDIgMDQgMDYgMDggMEEgMEMgMEUgKiopLCB4bW1CPSgwMSAwMyAwNSAwNyAwOSAwQiAwRCAwRiAqKikKKwk7IHhtbUM9KDEwIDEyIDE0IDE2IDE4IDFBIDFDIDFFICoqKSwgeG1tRD0oMTEgMTMgMTUgMTcgMTkgMUIgMUQgMUYgKiopCisJOyB4bW1FPSgyMCAyMiAyNCAyNiAyOCAyQSAyQyAyRSAqKiksIHhtbUY9KDIxIDIzIDI1IDI3IDI5IDJCIDJEIDJGICoqKQorCTsgeG1tRz0oKiogKiogKiogKiogKiogKiogKiogKiogKiopLCB4bW1IPSgqKiAqKiAqKiAqKiAqKiAqKiAqKiAqKiAqKikKKworCXB1bnBja2xidyB4bW1BLHhtbUMJOyB4bW1BPSgwMCAxMCAwMiAxMiAwNCAxNCAwNiAxNiAwOCAxOCAwQSAxQSAwQyAxQyAwRSAxRSkKKwlwdW5wY2tsYncgeG1tRSx4bW1CCTsgeG1tRT0oMjAgMDEgMjIgMDMgMjQgMDUgMjYgMDcgMjggMDkgMkEgMEIgMkMgMEQgMkUgMEYpCisJcHVucGNrbGJ3IHhtbUQseG1tRgk7IHhtbUQ9KDExIDIxIDEzIDIzIDE1IDI1IDE3IDI3IDE5IDI5IDFCIDJCIDFEIDJEIDFGIDJGKQorCisJbW92ZHFhICAgIHhtbUcseG1tQQorCW1vdmRxYSAgICB4bW1ILHhtbUEKKwlwdW5wY2tsd2QgeG1tQSx4bW1FCTsgeG1tQT0oMDAgMTAgMjAgMDEgMDIgMTIgMjIgMDMgMDQgMTQgMjQgMDUgMDYgMTYgMjYgMDcpCisJcHVucGNraHdkIHhtbUcseG1tRQk7IHhtbUc9KDA4IDE4IDI4IDA5IDBBIDFBIDJBIDBCIDBDIDFDIDJDIDBEIDBFIDFFIDJFIDBGKQorCisJcHNybGRxICAgIHhtbUgsMgk7IHhtbUg9KDAyIDEyIDA0IDE0IDA2IDE2IDA4IDE4IDBBIDFBIDBDIDFDIDBFIDFFIC0tIC0tKQorCXBzcmxkcSAgICB4bW1FLDIJOyB4bW1FPSgyMiAwMyAyNCAwNSAyNiAwNyAyOCAwOSAyQSAwQiAyQyAwRCAyRSAwRiAtLSAtLSkKKworCW1vdmRxYSAgICB4bW1DLHhtbUQKKwltb3ZkcWEgICAgeG1tQix4bW1ECisJcHVucGNrbHdkIHhtbUQseG1tSAk7IHhtbUQ9KDExIDIxIDAyIDEyIDEzIDIzIDA0IDE0IDE1IDI1IDA2IDE2IDE3IDI3IDA4IDE4KQorCXB1bnBja2h3ZCB4bW1DLHhtbUgJOyB4bW1DPSgxOSAyOSAwQSAxQSAxQiAyQiAwQyAxQyAxRCAyRCAwRSAxRSAxRiAyRiAtLSAtLSkKKworCXBzcmxkcSAgICB4bW1CLDIJOyB4bW1CPSgxMyAyMyAxNSAyNSAxNyAyNyAxOSAyOSAxQiAyQiAxRCAyRCAxRiAyRiAtLSAtLSkKKworCW1vdmRxYSAgICB4bW1GLHhtbUUKKwlwdW5wY2tsd2QgeG1tRSx4bW1CCTsgeG1tRT0oMjIgMDMgMTMgMjMgMjQgMDUgMTUgMjUgMjYgMDcgMTcgMjcgMjggMDkgMTkgMjkpCisJcHVucGNraHdkIHhtbUYseG1tQgk7IHhtbUY9KDJBIDBCIDFCIDJCIDJDIDBEIDFEIDJEIDJFIDBGIDFGIDJGIC0tIC0tIC0tIC0tKQorCisJcHNodWZkICAgIHhtbUgseG1tQSwweDRFOyB4bW1IPSgwNCAxNCAyNCAwNSAwNiAxNiAyNiAwNyAwMCAxMCAyMCAwMSAwMiAxMiAyMiAwMykKKwltb3ZkcWEgICAgeG1tQix4bW1FCisJcHVucGNrbGRxIHhtbUEseG1tRAk7IHhtbUE9KDAwIDEwIDIwIDAxIDExIDIxIDAyIDEyIDAyIDEyIDIyIDAzIDEzIDIzIDA0IDE0KQorCXB1bnBja2xkcSB4bW1FLHhtbUgJOyB4bW1FPSgyMiAwMyAxMyAyMyAwNCAxNCAyNCAwNSAyNCAwNSAxNSAyNSAwNiAxNiAyNiAwNykKKwlwdW5wY2toZHEgeG1tRCx4bW1CCTsgeG1tRD0oMTUgMjUgMDYgMTYgMjYgMDcgMTcgMjcgMTcgMjcgMDggMTggMjggMDkgMTkgMjkpCisKKwlwc2h1ZmQgICAgeG1tSCx4bW1HLDB4NEU7IHhtbUg9KDBDIDFDIDJDIDBEIDBFIDFFIDJFIDBGIDA4IDE4IDI4IDA5IDBBIDFBIDJBIDBCKQorCW1vdmRxYSAgICB4bW1CLHhtbUYKKwlwdW5wY2tsZHEgeG1tRyx4bW1DCTsgeG1tRz0oMDggMTggMjggMDkgMTkgMjkgMEEgMUEgMEEgMUEgMkEgMEIgMUIgMkIgMEMgMUMpCisJcHVucGNrbGRxIHhtbUYseG1tSAk7IHhtbUY9KDJBIDBCIDFCIDJCIDBDIDFDIDJDIDBEIDJDIDBEIDFEIDJEIDBFIDFFIDJFIDBGKQorCXB1bnBja2hkcSB4bW1DLHhtbUIJOyB4bW1DPSgxRCAyRCAwRSAxRSAyRSAwRiAxRiAyRiAxRiAyRiAtLSAtLSAtLSAtLSAtLSAtLSkKKworCXB1bnBja2xxZHEgeG1tQSx4bW1FCTsgeG1tQT0oMDAgMTAgMjAgMDEgMTEgMjEgMDIgMTIgMjIgMDMgMTMgMjMgMDQgMTQgMjQgMDUpCisJcHVucGNrbHFkcSB4bW1ELHhtbUcJOyB4bW1EPSgxNSAyNSAwNiAxNiAyNiAwNyAxNyAyNyAwOCAxOCAyOCAwOSAxOSAyOSAwQSAxQSkKKwlwdW5wY2tscWRxIHhtbUYseG1tQwk7IHhtbUY9KDJBIDBCIDFCIDJCIDBDIDFDIDJDIDBEIDFEIDJEIDBFIDFFIDJFIDBGIDFGIDJGKQorCisJY21wCWVjeCwgYnl0ZSBTSVpFT0ZfWE1NV09SRAorCWpiCXNob3J0IC5jb2x1bW5fc3QzMgorCisJdGVzdAllZGksIFNJWkVPRl9YTU1XT1JELTEKKwlqbnoJc2hvcnQgLm91dDEKKwk7IC0tKGFsaWduZWQpLS0tLS0tLS0tLS0tLS0tLS0tLQorCW1vdm50ZHEJWE1NV09SRCBbZWRpKzAqU0laRU9GX1hNTVdPUkRdLCB4bW1BCisJbW92bnRkcQlYTU1XT1JEIFtlZGkrMSpTSVpFT0ZfWE1NV09SRF0sIHhtbUQKKwltb3ZudGRxCVhNTVdPUkQgW2VkaSsyKlNJWkVPRl9YTU1XT1JEXSwgeG1tRgorCWFkZAllZGksIGJ5dGUgUkdCX1BJWEVMU0laRSpTSVpFT0ZfWE1NV09SRAk7IG91dHB0cgorCWptcAlzaG9ydCAub3V0MAorLm91dDE6CTsgLS0odW5hbGlnbmVkKS0tLS0tLS0tLS0tLS0tLS0tCisJcGNtcGVxYiAgICB4bW1ILHhtbUgJCQk7IHhtbUg9KGFsbCAxJ3MpCisJbWFza21vdmRxdSB4bW1BLHhtbUgJCQk7IG1vdm50ZHF1IFhNTVdPUkQgW2VkaV0sIHhtbUEKKwlhZGQJZWRpLCBieXRlIFNJWkVPRl9YTU1XT1JECTsgb3V0cHRyCisJbWFza21vdmRxdSB4bW1ELHhtbUgJCQk7IG1vdm50ZHF1IFhNTVdPUkQgW2VkaV0sIHhtbUQKKwlhZGQJZWRpLCBieXRlIFNJWkVPRl9YTU1XT1JECTsgb3V0cHRyCisJbWFza21vdmRxdSB4bW1GLHhtbUgJCQk7IG1vdm50ZHF1IFhNTVdPUkQgW2VkaV0sIHhtbUYKKwlhZGQJZWRpLCBieXRlIFNJWkVPRl9YTU1XT1JECTsgb3V0cHRyCisub3V0MDoKKwlzdWIJZWN4LCBieXRlIFNJWkVPRl9YTU1XT1JECisJanoJbmVhciAubmV4dHJvdworCisJYWRkCWVzaSwgYnl0ZSBTSVpFT0ZfWE1NV09SRAk7IGlucHRyMAorCWFkZAllYngsIGJ5dGUgU0laRU9GX1hNTVdPUkQJOyBpbnB0cjEKKwlhZGQJZWR4LCBieXRlIFNJWkVPRl9YTU1XT1JECTsgaW5wdHIyCisJam1wCW5lYXIgLmNvbHVtbmxvb3AKKwlhbGlnbngJMTYsNworCisuY29sdW1uX3N0MzI6CisJcGNtcGVxYgl4bW1ILHhtbUgJCQk7IHhtbUg9KGFsbCAxJ3MpCisJbGVhCWVjeCwgW2VjeCtlY3gqMl0JCTsgaW11bCBlY3gsIFJHQl9QSVhFTFNJWkUKKwljbXAJZWN4LCBieXRlIDIqU0laRU9GX1hNTVdPUkQKKwlqYglzaG9ydCAuY29sdW1uX3N0MTYKKwltYXNrbW92ZHF1IHhtbUEseG1tSAkJCTsgbW92bnRkcXUgWE1NV09SRCBbZWRpXSwgeG1tQQorCWFkZAllZGksIGJ5dGUgU0laRU9GX1hNTVdPUkQJOyBvdXRwdHIKKwltYXNrbW92ZHF1IHhtbUQseG1tSAkJCTsgbW92bnRkcXUgWE1NV09SRCBbZWRpXSwgeG1tRAorCWFkZAllZGksIGJ5dGUgU0laRU9GX1hNTVdPUkQJOyBvdXRwdHIKKwltb3ZkcWEJeG1tQSx4bW1GCisJc3ViCWVjeCwgYnl0ZSAyKlNJWkVPRl9YTU1XT1JECisJam1wCXNob3J0IC5jb2x1bW5fc3QxNQorLmNvbHVtbl9zdDE2OgorCWNtcAllY3gsIGJ5dGUgU0laRU9GX1hNTVdPUkQKKwlqYglzaG9ydCAuY29sdW1uX3N0MTUKKwltYXNrbW92ZHF1IHhtbUEseG1tSAkJCTsgbW92bnRkcXUgWE1NV09SRCBbZWRpXSwgeG1tQQorCWFkZAllZGksIGJ5dGUgU0laRU9GX1hNTVdPUkQJOyBvdXRwdHIKKwltb3ZkcWEJeG1tQSx4bW1ECisJc3ViCWVjeCwgYnl0ZSBTSVpFT0ZfWE1NV09SRAorLmNvbHVtbl9zdDE1OgorCW1vdgllYXgsZWN4CisJeG9yCWVjeCwgYnl0ZSAweDBGCisJc2hsCWVjeCwgMgorCW1vdmQJeG1tQixlY3gKKwlwc3JscQl4bW1ILDQKKwlwY21wZXFiCXhtbUUseG1tRQorCXBzcmxxCXhtbUgseG1tQgorCXBzcmxxCXhtbUUseG1tQgorCXB1bnBja2xidyB4bW1FLHhtbUgKKwk7IC0tLS0tLS0tLS0tLS0tLS0KKwltb3YJZWN4LGVkaQorCWFuZAllY3gsIGJ5dGUgU0laRU9GX1hNTVdPUkQtMQorCWp6CXNob3J0IC5hZGowCisJYWRkCWVheCxlY3gKKwljbXAJZWF4LCBieXRlIFNJWkVPRl9YTU1XT1JECisJamEJc2hvcnQgLmFkajAKKwlhbmQJZWRpLCBieXRlICgtU0laRU9GX1hNTVdPUkQpCTsgYWxpZ24gdG8gMTYtYnl0ZSBib3VuZGFyeQorCXNobAllY3gsIDMJCQk7IHBzbGxkcSB4bW1BLGVjeCAmIHBzbGxkcSB4bW1FLGVjeAorCW1vdmRxYQl4bW1HLHhtbUEKKwltb3ZkcWEJeG1tQyx4bW1FCisJcHNsbGRxCXhtbUEsIFNJWkVPRl9YTU1XT1JELzIKKwlwc2xsZHEJeG1tRSwgU0laRU9GX1hNTVdPUkQvMgorCW1vdmQJeG1tRCxlY3gKKwlzdWIJZWN4LCBieXRlIChTSVpFT0ZfWE1NV09SRC8yKSpCWVRFX0JJVAorCWpiCXNob3J0IC5hZGoxCisJbW92ZAl4bW1GLGVjeAorCXBzbGxxCXhtbUEseG1tRgorCXBzbGxxCXhtbUUseG1tRgorCWptcAlzaG9ydCAuYWRqMAorLmFkajE6CW5lZwllY3gKKwltb3ZkCXhtbUYsZWN4CisJcHNybHEJeG1tQSx4bW1GCisJcHNybHEJeG1tRSx4bW1GCisJcHNsbHEJeG1tRyx4bW1ECisJcHNsbHEJeG1tQyx4bW1ECisJcG9yCXhtbUEseG1tRworCXBvcgl4bW1FLHhtbUMKKy5hZGowOgk7IC0tLS0tLS0tLS0tLS0tLS0KKwltYXNrbW92ZHF1IHhtbUEseG1tRQkJCTsgbW92bnRkcXUgWE1NV09SRCBbZWRpXSwgeG1tQQorCislZWxzZSA7IFJHQl9QSVhFTFNJWkUgPT0gNCA7IC0tLS0tLS0tLS0tCisKKyVpZmRlZiBSR0JYX0ZJTExFUl8wWEZGCisJcGNtcGVxYiAgIHhtbTYseG1tNgkJOyB4bW02PVhFPVgoMDI0NjhBQ0UqKioqKioqKikKKwlwY21wZXFiICAgeG1tNyx4bW03CQk7IHhtbTc9WE89WCgxMzU3OUJERioqKioqKioqKQorJWVsc2UKKwlweG9yICAgICAgeG1tNix4bW02CQk7IHhtbTY9WEU9WCgwMjQ2OEFDRSoqKioqKioqKQorCXB4b3IgICAgICB4bW03LHhtbTcJCTsgeG1tNz1YTz1YKDEzNTc5QkRGKioqKioqKiopCislZW5kaWYKKwk7IHhtbUE9KDAwIDAyIDA0IDA2IDA4IDBBIDBDIDBFICoqKSwgeG1tQj0oMDEgMDMgMDUgMDcgMDkgMEIgMEQgMEYgKiopCisJOyB4bW1DPSgxMCAxMiAxNCAxNiAxOCAxQSAxQyAxRSAqKiksIHhtbUQ9KDExIDEzIDE1IDE3IDE5IDFCIDFEIDFGICoqKQorCTsgeG1tRT0oMjAgMjIgMjQgMjYgMjggMkEgMkMgMkUgKiopLCB4bW1GPSgyMSAyMyAyNSAyNyAyOSAyQiAyRCAyRiAqKikKKwk7IHhtbUc9KDMwIDMyIDM0IDM2IDM4IDNBIDNDIDNFICoqKSwgeG1tSD0oMzEgMzMgMzUgMzcgMzkgM0IgM0QgM0YgKiopCisKKwlwdW5wY2tsYncgeG1tQSx4bW1DCTsgeG1tQT0oMDAgMTAgMDIgMTIgMDQgMTQgMDYgMTYgMDggMTggMEEgMUEgMEMgMUMgMEUgMUUpCisJcHVucGNrbGJ3IHhtbUUseG1tRwk7IHhtbUU9KDIwIDMwIDIyIDMyIDI0IDM0IDI2IDM2IDI4IDM4IDJBIDNBIDJDIDNDIDJFIDNFKQorCXB1bnBja2xidyB4bW1CLHhtbUQJOyB4bW1CPSgwMSAxMSAwMyAxMyAwNSAxNSAwNyAxNyAwOSAxOSAwQiAxQiAwRCAxRCAwRiAxRikKKwlwdW5wY2tsYncgeG1tRix4bW1ICTsgeG1tRj0oMjEgMzEgMjMgMzMgMjUgMzUgMjcgMzcgMjkgMzkgMkIgM0IgMkQgM0QgMkYgM0YpCisKKwltb3ZkcWEgICAgeG1tQyx4bW1BCisJcHVucGNrbHdkIHhtbUEseG1tRQk7IHhtbUE9KDAwIDEwIDIwIDMwIDAyIDEyIDIyIDMyIDA0IDE0IDI0IDM0IDA2IDE2IDI2IDM2KQorCXB1bnBja2h3ZCB4bW1DLHhtbUUJOyB4bW1DPSgwOCAxOCAyOCAzOCAwQSAxQSAyQSAzQSAwQyAxQyAyQyAzQyAwRSAxRSAyRSAzRSkKKwltb3ZkcWEgICAgeG1tRyx4bW1CCisJcHVucGNrbHdkIHhtbUIseG1tRgk7IHhtbUI9KDAxIDExIDIxIDMxIDAzIDEzIDIzIDMzIDA1IDE1IDI1IDM1IDA3IDE3IDI3IDM3KQorCXB1bnBja2h3ZCB4bW1HLHhtbUYJOyB4bW1HPSgwOSAxOSAyOSAzOSAwQiAxQiAyQiAzQiAwRCAxRCAyRCAzRCAwRiAxRiAyRiAzRikKKworCW1vdmRxYSAgICB4bW1ELHhtbUEKKwlwdW5wY2tsZHEgeG1tQSx4bW1CCTsgeG1tQT0oMDAgMTAgMjAgMzAgMDEgMTEgMjEgMzEgMDIgMTIgMjIgMzIgMDMgMTMgMjMgMzMpCisJcHVucGNraGRxIHhtbUQseG1tQgk7IHhtbUQ9KDA0IDE0IDI0IDM0IDA1IDE1IDI1IDM1IDA2IDE2IDI2IDM2IDA3IDE3IDI3IDM3KQorCW1vdmRxYSAgICB4bW1ILHhtbUMKKwlwdW5wY2tsZHEgeG1tQyx4bW1HCTsgeG1tQz0oMDggMTggMjggMzggMDkgMTkgMjkgMzkgMEEgMUEgMkEgM0EgMEIgMUIgMkIgM0IpCisJcHVucGNraGRxIHhtbUgseG1tRwk7IHhtbUg9KDBDIDFDIDJDIDNDIDBEIDFEIDJEIDNEIDBFIDFFIDJFIDNFIDBGIDFGIDJGIDNGKQorCisJY21wCWVjeCwgYnl0ZSBTSVpFT0ZfWE1NV09SRAorCWpiCXNob3J0IC5jb2x1bW5fc3QzMgorCisJdGVzdAllZGksIFNJWkVPRl9YTU1XT1JELTEKKwlqbnoJc2hvcnQgLm91dDEKKwk7IC0tKGFsaWduZWQpLS0tLS0tLS0tLS0tLS0tLS0tLQorCW1vdm50ZHEJWE1NV09SRCBbZWRpKzAqU0laRU9GX1hNTVdPUkRdLCB4bW1BCisJbW92bnRkcQlYTU1XT1JEIFtlZGkrMSpTSVpFT0ZfWE1NV09SRF0sIHhtbUQKKwltb3ZudGRxCVhNTVdPUkQgW2VkaSsyKlNJWkVPRl9YTU1XT1JEXSwgeG1tQworCW1vdm50ZHEJWE1NV09SRCBbZWRpKzMqU0laRU9GX1hNTVdPUkRdLCB4bW1ICisJYWRkCWVkaSwgYnl0ZSBSR0JfUElYRUxTSVpFKlNJWkVPRl9YTU1XT1JECTsgb3V0cHRyCisJam1wCXNob3J0IC5vdXQwCisub3V0MToJOyAtLSh1bmFsaWduZWQpLS0tLS0tLS0tLS0tLS0tLS0KKwlwY21wZXFiICAgIHhtbUUseG1tRQkJCTsgeG1tRT0oYWxsIDEncykKKwltYXNrbW92ZHF1IHhtbUEseG1tRQkJCTsgbW92bnRkcXUgWE1NV09SRCBbZWRpXSwgeG1tQQorCWFkZAllZGksIGJ5dGUgU0laRU9GX1hNTVdPUkQJOyBvdXRwdHIKKwltYXNrbW92ZHF1IHhtbUQseG1tRQkJCTsgbW92bnRkcXUgWE1NV09SRCBbZWRpXSwgeG1tRAorCWFkZAllZGksIGJ5dGUgU0laRU9GX1hNTVdPUkQJOyBvdXRwdHIKKwltYXNrbW92ZHF1IHhtbUMseG1tRQkJCTsgbW92bnRkcXUgWE1NV09SRCBbZWRpXSwgeG1tQworCWFkZAllZGksIGJ5dGUgU0laRU9GX1hNTVdPUkQJOyBvdXRwdHIKKwltYXNrbW92ZHF1IHhtbUgseG1tRQkJCTsgbW92bnRkcXUgWE1NV09SRCBbZWRpXSwgeG1tSAorCWFkZAllZGksIGJ5dGUgU0laRU9GX1hNTVdPUkQJOyBvdXRwdHIKKy5vdXQwOgorCXN1YgllY3gsIGJ5dGUgU0laRU9GX1hNTVdPUkQKKwlqegluZWFyIC5uZXh0cm93CisKKwlhZGQJZXNpLCBieXRlIFNJWkVPRl9YTU1XT1JECTsgaW5wdHIwCisJYWRkCWVieCwgYnl0ZSBTSVpFT0ZfWE1NV09SRAk7IGlucHRyMQorCWFkZAllZHgsIGJ5dGUgU0laRU9GX1hNTVdPUkQJOyBpbnB0cjIKKwlqbXAJbmVhciAuY29sdW1ubG9vcAorCWFsaWdueAkxNiw3CisKKy5jb2x1bW5fc3QzMjoKKwlwY21wZXFiCXhtbUUseG1tRQkJCTsgeG1tRT0oYWxsIDEncykKKwljbXAJZWN4LCBieXRlIFNJWkVPRl9YTU1XT1JELzIKKwlqYglzaG9ydCAuY29sdW1uX3N0MTYKKwltYXNrbW92ZHF1IHhtbUEseG1tRQkJCTsgbW92bnRkcXUgWE1NV09SRCBbZWRpXSwgeG1tQQorCWFkZAllZGksIGJ5dGUgU0laRU9GX1hNTVdPUkQJOyBvdXRwdHIKKwltYXNrbW92ZHF1IHhtbUQseG1tRQkJCTsgbW92bnRkcXUgWE1NV09SRCBbZWRpXSwgeG1tRAorCWFkZAllZGksIGJ5dGUgU0laRU9GX1hNTVdPUkQJOyBvdXRwdHIKKwltb3ZkcWEJeG1tQSx4bW1DCisJbW92ZHFhCXhtbUQseG1tSAorCXN1YgllY3gsIGJ5dGUgU0laRU9GX1hNTVdPUkQvMgorLmNvbHVtbl9zdDE2OgorCWNtcAllY3gsIGJ5dGUgU0laRU9GX1hNTVdPUkQvNAorCWpiCXNob3J0IC5jb2x1bW5fc3QxNQorCW1hc2ttb3ZkcXUgeG1tQSx4bW1FCQkJOyBtb3ZudGRxdSBYTU1XT1JEIFtlZGldLCB4bW1BCisJYWRkCWVkaSwgYnl0ZSBTSVpFT0ZfWE1NV09SRAk7IG91dHB0cgorCW1vdmRxYQl4bW1BLHhtbUQKKwlzdWIJZWN4LCBieXRlIFNJWkVPRl9YTU1XT1JELzQKKy5jb2x1bW5fc3QxNToKKwljbXAJZWN4LCBieXRlIFNJWkVPRl9YTU1XT1JELzE2CisJamIJc2hvcnQgLm5leHRyb3cKKwltb3YJZWF4LGVjeAorCXhvcgllY3gsIGJ5dGUgMHgwMworCWluYwllY3gKKwlzaGwJZWN4LCA0CisJbW92ZAl4bW1GLGVjeAorCXBzcmxxCXhtbUUseG1tRgorCXB1bnBja2xidyB4bW1FLHhtbUUKKwk7IC0tLS0tLS0tLS0tLS0tLS0KKwltb3YJZWN4LGVkaQorCWFuZAllY3gsIGJ5dGUgU0laRU9GX1hNTVdPUkQtMQorCWp6CXNob3J0IC5hZGowCisJbGVhCWVheCwgW2VjeCtlYXgqNF0JOyBSR0JfUElYRUxTSVpFCisJY21wCWVheCwgYnl0ZSBTSVpFT0ZfWE1NV09SRAorCWphCXNob3J0IC5hZGowCisJYW5kCWVkaSwgYnl0ZSAoLVNJWkVPRl9YTU1XT1JEKQk7IGFsaWduIHRvIDE2LWJ5dGUgYm91bmRhcnkKKwlzaGwJZWN4LCAzCQkJOyBwc2xsZHEgeG1tQSxlY3ggJiBwc2xsZHEgeG1tRSxlY3gKKwltb3ZkcWEJeG1tQix4bW1BCisJbW92ZHFhCXhtbUcseG1tRQorCXBzbGxkcQl4bW1BLCBTSVpFT0ZfWE1NV09SRC8yCisJcHNsbGRxCXhtbUUsIFNJWkVPRl9YTU1XT1JELzIKKwltb3ZkCXhtbUMsZWN4CisJc3ViCWVjeCwgYnl0ZSAoU0laRU9GX1hNTVdPUkQvMikqQllURV9CSVQKKwlqYglzaG9ydCAuYWRqMQorCW1vdmQJeG1tSCxlY3gKKwlwc2xscQl4bW1BLHhtbUgKKwlwc2xscQl4bW1FLHhtbUgKKwlqbXAJc2hvcnQgLmFkajAKKy5hZGoxOgluZWcJZWN4CisJbW92ZAl4bW1ILGVjeAorCXBzcmxxCXhtbUEseG1tSAorCXBzcmxxCXhtbUUseG1tSAorCXBzbGxxCXhtbUIseG1tQworCXBzbGxxCXhtbUcseG1tQworCXBvcgl4bW1BLHhtbUIKKwlwb3IJeG1tRSx4bW1HCisuYWRqMDoJOyAtLS0tLS0tLS0tLS0tLS0tCisJbWFza21vdmRxdSB4bW1BLHhtbUUJCQk7IG1vdm50ZHF1IFhNTVdPUkQgW2VkaV0sIHhtbUEKKworJWVuZGlmIDsgUkdCX1BJWEVMU0laRSA7IC0tLS0tLS0tLS0tLS0tLQorCisJYWxpZ254CTE2LDcKKworLm5leHRyb3c6CisJcG9wCWVjeAorCXBvcAllc2kKKwlwb3AJZWJ4CisJcG9wCWVkeAorCXBvcAllZGkKKwlwb3AJZWF4CisKKwlhZGQJZXNpLCBieXRlIFNJWkVPRl9KU0FNUFJPVworCWFkZAllYngsIGJ5dGUgU0laRU9GX0pTQU1QUk9XCisJYWRkCWVkeCwgYnl0ZSBTSVpFT0ZfSlNBTVBST1cKKwlhZGQJZWRpLCBieXRlIFNJWkVPRl9KU0FNUFJPVwk7IG91dHB1dF9idWYKKwlkZWMJZWF4CQkJCTsgbnVtX3Jvd3MKKwlqZwluZWFyIC5yb3dsb29wCisKKwlzZmVuY2UJCTsgZmx1c2ggdGhlIHdyaXRlIGJ1ZmZlcgorCisucmV0dXJuOgorCXBvcAllZGkKKwlwb3AJZXNpCis7CXBvcAllZHgJCTsgbmVlZCBub3QgYmUgcHJlc2VydmVkCis7CXBvcAllY3gJCTsgbmVlZCBub3QgYmUgcHJlc2VydmVkCisJcG9wCWVieAorCW1vdgllc3AsZWJwCQk7IGVzcCA8LSBhbGlnbmVkIGVicAorCXBvcAllc3AJCTsgZXNwIDwtIG9yaWdpbmFsIGVicAorCXBvcAllYnAKKwlyZXQKKworOyBGb3Igc29tZSByZWFzb24sIHRoZSBPUyBYIGxpbmtlciBkb2VzIG5vdCBob25vciB0aGUgcmVxdWVzdCB0byBhbGlnbiB0aGUKKzsgc2VnbWVudCB1bmxlc3Mgd2UgZG8gdGhpcy4KKwlhbGlnbgkxNgpkaWZmIC0tZ2l0IGEvc2ltZC9qZGNvbG1teC5hc20gYi9zaW1kL2pkY29sbW14LmFzbQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41ODc3NWU4Ci0tLSAvZGV2L251bGwKKysrIGIvc2ltZC9qZGNvbG1teC5hc20KQEAgLTAsMCArMSwxMTcgQEAKKzsKKzsgamRjb2xtbXguYXNtIC0gY29sb3JzcGFjZSBjb252ZXJzaW9uIChNTVgpCis7Cis7IENvcHlyaWdodCAyMDA5IFBpZXJyZSBPc3NtYW4gPG9zc21hbkBjZW5kaW8uc2U+IGZvciBDZW5kaW8gQUIKKzsgQ29weXJpZ2h0IDIwMDkgRC4gUi4gQ29tbWFuZGVyCis7Cis7IEJhc2VkIG9uCis7IHg4NiBTSU1EIGV4dGVuc2lvbiBmb3IgSUpHIEpQRUcgbGlicmFyeQorOyBDb3B5cmlnaHQgKEMpIDE5OTktMjAwNiwgTUlZQVNBS0EgTWFzYXJ1LgorOyBGb3IgY29uZGl0aW9ucyBvZiBkaXN0cmlidXRpb24gYW5kIHVzZSwgc2VlIGNvcHlyaWdodCBub3RpY2UgaW4ganNpbWRleHQuaW5jCis7Cis7IFRoaXMgZmlsZSBzaG91bGQgYmUgYXNzZW1ibGVkIHdpdGggTkFTTSAoTmV0d2lkZSBBc3NlbWJsZXIpLAorOyBjYW4gKm5vdCogYmUgYXNzZW1ibGVkIHdpdGggTWljcm9zb2Z0J3MgTUFTTSBvciBhbnkgY29tcGF0aWJsZQorOyBhc3NlbWJsZXIgKGluY2x1ZGluZyBCb3JsYW5kJ3MgVHVyYm8gQXNzZW1ibGVyKS4KKzsgTkFTTSBpcyBhdmFpbGFibGUgZnJvbSBodHRwOi8vbmFzbS5zb3VyY2Vmb3JnZS5uZXQvIG9yCis7IGh0dHA6Ly9zb3VyY2Vmb3JnZS5uZXQvcHJvamVjdC9zaG93ZmlsZXMucGhwP2dyb3VwX2lkPTYyMDgKKzsKKzsgW1RBQjhdCisKKyVpbmNsdWRlICJqc2ltZGV4dC5pbmMiCisKKzsgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworJWRlZmluZSBTQ0FMRUJJVFMJMTYKKworRl8wXzM0NAllcXUJIDIyNTU0CQkJOyBGSVgoMC4zNDQxNCkKK0ZfMF83MTQJZXF1CSA0NjgwMgkJCTsgRklYKDAuNzE0MTQpCitGXzFfNDAyCWVxdQkgOTE4ODEJCQk7IEZJWCgxLjQwMjAwKQorRl8xXzc3MgllcXUJMTE2MTMwCQkJOyBGSVgoMS43NzIwMCkKK0ZfMF80MDIJZXF1CShGXzFfNDAyIC0gNjU1MzYpCTsgRklYKDEuNDAyMDApIC0gRklYKDEpCitGXzBfMjg1CWVxdQkoIDY1NTM2IC0gRl8wXzcxNCkJOyBGSVgoMSkgLSBGSVgoMC43MTQxNCkKK0ZfMF8yMjgJZXF1CSgxMzEwNzIgLSBGXzFfNzcyKQk7IEZJWCgyKSAtIEZJWCgxLjc3MjAwKQorCis7IC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisJU0VDVElPTglTRUdfQ09OU1QKKworCWFsaWduegkxNgorCWdsb2JhbAlFWFROKGpjb25zdF95Y2NfcmdiX2NvbnZlcnRfbW14KQorCitFWFROKGpjb25zdF95Y2NfcmdiX2NvbnZlcnRfbW14KToKKworUFdfRjA0MDIJdGltZXMgNCBkdyAgRl8wXzQwMgorUFdfTUYwMjI4CXRpbWVzIDQgZHcgLUZfMF8yMjgKK1BXX01GMDM0NF9GMDI4NQl0aW1lcyAyIGR3IC1GXzBfMzQ0LCBGXzBfMjg1CitQV19PTkUJCXRpbWVzIDQgZHcgIDEKK1BEX09ORUhBTEYJdGltZXMgMiBkZCAgMSA8PCAoU0NBTEVCSVRTLTEpCisKKwlhbGlnbnoJMTYKKworOyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorJWluY2x1ZGUgImpkY2xybW14LmFzbSIKKworJXVuZGVmIFJHQl9SRUQKKyV1bmRlZiBSR0JfR1JFRU4KKyV1bmRlZiBSR0JfQkxVRQorJXVuZGVmIFJHQl9QSVhFTFNJWkUKKyVkZWZpbmUgUkdCX1JFRCAwCislZGVmaW5lIFJHQl9HUkVFTiAxCislZGVmaW5lIFJHQl9CTFVFIDIKKyVkZWZpbmUgUkdCX1BJWEVMU0laRSAzCislZGVmaW5lIGpzaW1kX3ljY19yZ2JfY29udmVydF9tbXgganNpbWRfeWNjX2V4dHJnYl9jb252ZXJ0X21teAorJWluY2x1ZGUgImpkY2xybW14LmFzbSIKKworJXVuZGVmIFJHQl9SRUQKKyV1bmRlZiBSR0JfR1JFRU4KKyV1bmRlZiBSR0JfQkxVRQorJXVuZGVmIFJHQl9QSVhFTFNJWkUKKyVkZWZpbmUgUkdCX1JFRCAwCislZGVmaW5lIFJHQl9HUkVFTiAxCislZGVmaW5lIFJHQl9CTFVFIDIKKyVkZWZpbmUgUkdCX1BJWEVMU0laRSA0CislZGVmaW5lIGpzaW1kX3ljY19yZ2JfY29udmVydF9tbXgganNpbWRfeWNjX2V4dHJnYnhfY29udmVydF9tbXgKKyVpbmNsdWRlICJqZGNscm1teC5hc20iCisKKyV1bmRlZiBSR0JfUkVECisldW5kZWYgUkdCX0dSRUVOCisldW5kZWYgUkdCX0JMVUUKKyV1bmRlZiBSR0JfUElYRUxTSVpFCislZGVmaW5lIFJHQl9SRUQgMgorJWRlZmluZSBSR0JfR1JFRU4gMQorJWRlZmluZSBSR0JfQkxVRSAwCislZGVmaW5lIFJHQl9QSVhFTFNJWkUgMworJWRlZmluZSBqc2ltZF95Y2NfcmdiX2NvbnZlcnRfbW14IGpzaW1kX3ljY19leHRiZ3JfY29udmVydF9tbXgKKyVpbmNsdWRlICJqZGNscm1teC5hc20iCisKKyV1bmRlZiBSR0JfUkVECisldW5kZWYgUkdCX0dSRUVOCisldW5kZWYgUkdCX0JMVUUKKyV1bmRlZiBSR0JfUElYRUxTSVpFCislZGVmaW5lIFJHQl9SRUQgMgorJWRlZmluZSBSR0JfR1JFRU4gMQorJWRlZmluZSBSR0JfQkxVRSAwCislZGVmaW5lIFJHQl9QSVhFTFNJWkUgNAorJWRlZmluZSBqc2ltZF95Y2NfcmdiX2NvbnZlcnRfbW14IGpzaW1kX3ljY19leHRiZ3J4X2NvbnZlcnRfbW14CislaW5jbHVkZSAiamRjbHJtbXguYXNtIgorCisldW5kZWYgUkdCX1JFRAorJXVuZGVmIFJHQl9HUkVFTgorJXVuZGVmIFJHQl9CTFVFCisldW5kZWYgUkdCX1BJWEVMU0laRQorJWRlZmluZSBSR0JfUkVEIDMKKyVkZWZpbmUgUkdCX0dSRUVOIDIKKyVkZWZpbmUgUkdCX0JMVUUgMQorJWRlZmluZSBSR0JfUElYRUxTSVpFIDQKKyVkZWZpbmUganNpbWRfeWNjX3JnYl9jb252ZXJ0X21teCBqc2ltZF95Y2NfZXh0eGJncl9jb252ZXJ0X21teAorJWluY2x1ZGUgImpkY2xybW14LmFzbSIKKworJXVuZGVmIFJHQl9SRUQKKyV1bmRlZiBSR0JfR1JFRU4KKyV1bmRlZiBSR0JfQkxVRQorJXVuZGVmIFJHQl9QSVhFTFNJWkUKKyVkZWZpbmUgUkdCX1JFRCAxCislZGVmaW5lIFJHQl9HUkVFTiAyCislZGVmaW5lIFJHQl9CTFVFIDMKKyVkZWZpbmUgUkdCX1BJWEVMU0laRSA0CislZGVmaW5lIGpzaW1kX3ljY19yZ2JfY29udmVydF9tbXgganNpbWRfeWNjX2V4dHhyZ2JfY29udmVydF9tbXgKKyVpbmNsdWRlICJqZGNscm1teC5hc20iCmRpZmYgLS1naXQgYS9zaW1kL2pkY29sc3MyLTY0LmFzbSBiL3NpbWQvamRjb2xzczItNjQuYXNtCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjJlOTdkNTkKLS0tIC9kZXYvbnVsbAorKysgYi9zaW1kL2pkY29sc3MyLTY0LmFzbQpAQCAtMCwwICsxLDExNyBAQAorOworOyBqZGNvbHNzMi02NC5hc20gLSBjb2xvcnNwYWNlIGNvbnZlcnNpb24gKDY0LWJpdCBTU0UyKQorOworOyBDb3B5cmlnaHQgMjAwOSBQaWVycmUgT3NzbWFuIDxvc3NtYW5AY2VuZGlvLnNlPiBmb3IgQ2VuZGlvIEFCCis7IENvcHlyaWdodCAyMDA5IEQuIFIuIENvbW1hbmRlcgorOworOyBCYXNlZCBvbgorOyB4ODYgU0lNRCBleHRlbnNpb24gZm9yIElKRyBKUEVHIGxpYnJhcnkKKzsgQ29weXJpZ2h0IChDKSAxOTk5LTIwMDYsIE1JWUFTQUtBIE1hc2FydS4KKzsgRm9yIGNvbmRpdGlvbnMgb2YgZGlzdHJpYnV0aW9uIGFuZCB1c2UsIHNlZSBjb3B5cmlnaHQgbm90aWNlIGluIGpzaW1kZXh0LmluYworOworOyBUaGlzIGZpbGUgc2hvdWxkIGJlIGFzc2VtYmxlZCB3aXRoIE5BU00gKE5ldHdpZGUgQXNzZW1ibGVyKSwKKzsgY2FuICpub3QqIGJlIGFzc2VtYmxlZCB3aXRoIE1pY3Jvc29mdCdzIE1BU00gb3IgYW55IGNvbXBhdGlibGUKKzsgYXNzZW1ibGVyIChpbmNsdWRpbmcgQm9ybGFuZCdzIFR1cmJvIEFzc2VtYmxlcikuCis7IE5BU00gaXMgYXZhaWxhYmxlIGZyb20gaHR0cDovL25hc20uc291cmNlZm9yZ2UubmV0LyBvcgorOyBodHRwOi8vc291cmNlZm9yZ2UubmV0L3Byb2plY3Qvc2hvd2ZpbGVzLnBocD9ncm91cF9pZD02MjA4Cis7Cis7IFtUQUI4XQorCislaW5jbHVkZSAianNpbWRleHQuaW5jIgorCis7IC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKyVkZWZpbmUgU0NBTEVCSVRTCTE2CisKK0ZfMF8zNDQJZXF1CSAyMjU1NAkJCTsgRklYKDAuMzQ0MTQpCitGXzBfNzE0CWVxdQkgNDY4MDIJCQk7IEZJWCgwLjcxNDE0KQorRl8xXzQwMgllcXUJIDkxODgxCQkJOyBGSVgoMS40MDIwMCkKK0ZfMV83NzIJZXF1CTExNjEzMAkJCTsgRklYKDEuNzcyMDApCitGXzBfNDAyCWVxdQkoRl8xXzQwMiAtIDY1NTM2KQk7IEZJWCgxLjQwMjAwKSAtIEZJWCgxKQorRl8wXzI4NQllcXUJKCA2NTUzNiAtIEZfMF83MTQpCTsgRklYKDEpIC0gRklYKDAuNzE0MTQpCitGXzBfMjI4CWVxdQkoMTMxMDcyIC0gRl8xXzc3MikJOyBGSVgoMikgLSBGSVgoMS43NzIwMCkKKworOyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCVNFQ1RJT04JU0VHX0NPTlNUCisKKwlhbGlnbnoJMTYKKwlnbG9iYWwJRVhUTihqY29uc3RfeWNjX3JnYl9jb252ZXJ0X3NzZTIpCisKK0VYVE4oamNvbnN0X3ljY19yZ2JfY29udmVydF9zc2UyKToKKworUFdfRjA0MDIJdGltZXMgOCBkdyAgRl8wXzQwMgorUFdfTUYwMjI4CXRpbWVzIDggZHcgLUZfMF8yMjgKK1BXX01GMDM0NF9GMDI4NQl0aW1lcyA0IGR3IC1GXzBfMzQ0LCBGXzBfMjg1CitQV19PTkUJCXRpbWVzIDggZHcgIDEKK1BEX09ORUhBTEYJdGltZXMgNCBkZCAgMSA8PCAoU0NBTEVCSVRTLTEpCisKKwlhbGlnbnoJMTYKKworOyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorJWluY2x1ZGUgImpkY2xyc3MyLTY0LmFzbSIKKworJXVuZGVmIFJHQl9SRUQKKyV1bmRlZiBSR0JfR1JFRU4KKyV1bmRlZiBSR0JfQkxVRQorJXVuZGVmIFJHQl9QSVhFTFNJWkUKKyVkZWZpbmUgUkdCX1JFRCAwCislZGVmaW5lIFJHQl9HUkVFTiAxCislZGVmaW5lIFJHQl9CTFVFIDIKKyVkZWZpbmUgUkdCX1BJWEVMU0laRSAzCislZGVmaW5lIGpzaW1kX3ljY19yZ2JfY29udmVydF9zc2UyIGpzaW1kX3ljY19leHRyZ2JfY29udmVydF9zc2UyCislaW5jbHVkZSAiamRjbHJzczItNjQuYXNtIgorCisldW5kZWYgUkdCX1JFRAorJXVuZGVmIFJHQl9HUkVFTgorJXVuZGVmIFJHQl9CTFVFCisldW5kZWYgUkdCX1BJWEVMU0laRQorJWRlZmluZSBSR0JfUkVEIDAKKyVkZWZpbmUgUkdCX0dSRUVOIDEKKyVkZWZpbmUgUkdCX0JMVUUgMgorJWRlZmluZSBSR0JfUElYRUxTSVpFIDQKKyVkZWZpbmUganNpbWRfeWNjX3JnYl9jb252ZXJ0X3NzZTIganNpbWRfeWNjX2V4dHJnYnhfY29udmVydF9zc2UyCislaW5jbHVkZSAiamRjbHJzczItNjQuYXNtIgorCisldW5kZWYgUkdCX1JFRAorJXVuZGVmIFJHQl9HUkVFTgorJXVuZGVmIFJHQl9CTFVFCisldW5kZWYgUkdCX1BJWEVMU0laRQorJWRlZmluZSBSR0JfUkVEIDIKKyVkZWZpbmUgUkdCX0dSRUVOIDEKKyVkZWZpbmUgUkdCX0JMVUUgMAorJWRlZmluZSBSR0JfUElYRUxTSVpFIDMKKyVkZWZpbmUganNpbWRfeWNjX3JnYl9jb252ZXJ0X3NzZTIganNpbWRfeWNjX2V4dGJncl9jb252ZXJ0X3NzZTIKKyVpbmNsdWRlICJqZGNscnNzMi02NC5hc20iCisKKyV1bmRlZiBSR0JfUkVECisldW5kZWYgUkdCX0dSRUVOCisldW5kZWYgUkdCX0JMVUUKKyV1bmRlZiBSR0JfUElYRUxTSVpFCislZGVmaW5lIFJHQl9SRUQgMgorJWRlZmluZSBSR0JfR1JFRU4gMQorJWRlZmluZSBSR0JfQkxVRSAwCislZGVmaW5lIFJHQl9QSVhFTFNJWkUgNAorJWRlZmluZSBqc2ltZF95Y2NfcmdiX2NvbnZlcnRfc3NlMiBqc2ltZF95Y2NfZXh0YmdyeF9jb252ZXJ0X3NzZTIKKyVpbmNsdWRlICJqZGNscnNzMi02NC5hc20iCisKKyV1bmRlZiBSR0JfUkVECisldW5kZWYgUkdCX0dSRUVOCisldW5kZWYgUkdCX0JMVUUKKyV1bmRlZiBSR0JfUElYRUxTSVpFCislZGVmaW5lIFJHQl9SRUQgMworJWRlZmluZSBSR0JfR1JFRU4gMgorJWRlZmluZSBSR0JfQkxVRSAxCislZGVmaW5lIFJHQl9QSVhFTFNJWkUgNAorJWRlZmluZSBqc2ltZF95Y2NfcmdiX2NvbnZlcnRfc3NlMiBqc2ltZF95Y2NfZXh0eGJncl9jb252ZXJ0X3NzZTIKKyVpbmNsdWRlICJqZGNscnNzMi02NC5hc20iCisKKyV1bmRlZiBSR0JfUkVECisldW5kZWYgUkdCX0dSRUVOCisldW5kZWYgUkdCX0JMVUUKKyV1bmRlZiBSR0JfUElYRUxTSVpFCislZGVmaW5lIFJHQl9SRUQgMQorJWRlZmluZSBSR0JfR1JFRU4gMgorJWRlZmluZSBSR0JfQkxVRSAzCislZGVmaW5lIFJHQl9QSVhFTFNJWkUgNAorJWRlZmluZSBqc2ltZF95Y2NfcmdiX2NvbnZlcnRfc3NlMiBqc2ltZF95Y2NfZXh0eHJnYl9jb252ZXJ0X3NzZTIKKyVpbmNsdWRlICJqZGNscnNzMi02NC5hc20iCmRpZmYgLS1naXQgYS9zaW1kL2pkY29sc3MyLmFzbSBiL3NpbWQvamRjb2xzczIuYXNtCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjdhZTk4NWQKLS0tIC9kZXYvbnVsbAorKysgYi9zaW1kL2pkY29sc3MyLmFzbQpAQCAtMCwwICsxLDExNyBAQAorOworOyBqZGNvbHNzMi5hc20gLSBjb2xvcnNwYWNlIGNvbnZlcnNpb24gKFNTRTIpCis7Cis7IENvcHlyaWdodCAyMDA5IFBpZXJyZSBPc3NtYW4gPG9zc21hbkBjZW5kaW8uc2U+IGZvciBDZW5kaW8gQUIKKzsgQ29weXJpZ2h0IDIwMDkgRC4gUi4gQ29tbWFuZGVyCis7Cis7IEJhc2VkIG9uCis7IHg4NiBTSU1EIGV4dGVuc2lvbiBmb3IgSUpHIEpQRUcgbGlicmFyeQorOyBDb3B5cmlnaHQgKEMpIDE5OTktMjAwNiwgTUlZQVNBS0EgTWFzYXJ1LgorOyBGb3IgY29uZGl0aW9ucyBvZiBkaXN0cmlidXRpb24gYW5kIHVzZSwgc2VlIGNvcHlyaWdodCBub3RpY2UgaW4ganNpbWRleHQuaW5jCis7Cis7IFRoaXMgZmlsZSBzaG91bGQgYmUgYXNzZW1ibGVkIHdpdGggTkFTTSAoTmV0d2lkZSBBc3NlbWJsZXIpLAorOyBjYW4gKm5vdCogYmUgYXNzZW1ibGVkIHdpdGggTWljcm9zb2Z0J3MgTUFTTSBvciBhbnkgY29tcGF0aWJsZQorOyBhc3NlbWJsZXIgKGluY2x1ZGluZyBCb3JsYW5kJ3MgVHVyYm8gQXNzZW1ibGVyKS4KKzsgTkFTTSBpcyBhdmFpbGFibGUgZnJvbSBodHRwOi8vbmFzbS5zb3VyY2Vmb3JnZS5uZXQvIG9yCis7IGh0dHA6Ly9zb3VyY2Vmb3JnZS5uZXQvcHJvamVjdC9zaG93ZmlsZXMucGhwP2dyb3VwX2lkPTYyMDgKKzsKKzsgW1RBQjhdCisKKyVpbmNsdWRlICJqc2ltZGV4dC5pbmMiCisKKzsgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworJWRlZmluZSBTQ0FMRUJJVFMJMTYKKworRl8wXzM0NAllcXUJIDIyNTU0CQkJOyBGSVgoMC4zNDQxNCkKK0ZfMF83MTQJZXF1CSA0NjgwMgkJCTsgRklYKDAuNzE0MTQpCitGXzFfNDAyCWVxdQkgOTE4ODEJCQk7IEZJWCgxLjQwMjAwKQorRl8xXzc3MgllcXUJMTE2MTMwCQkJOyBGSVgoMS43NzIwMCkKK0ZfMF80MDIJZXF1CShGXzFfNDAyIC0gNjU1MzYpCTsgRklYKDEuNDAyMDApIC0gRklYKDEpCitGXzBfMjg1CWVxdQkoIDY1NTM2IC0gRl8wXzcxNCkJOyBGSVgoMSkgLSBGSVgoMC43MTQxNCkKK0ZfMF8yMjgJZXF1CSgxMzEwNzIgLSBGXzFfNzcyKQk7IEZJWCgyKSAtIEZJWCgxLjc3MjAwKQorCis7IC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisJU0VDVElPTglTRUdfQ09OU1QKKworCWFsaWduegkxNgorCWdsb2JhbAlFWFROKGpjb25zdF95Y2NfcmdiX2NvbnZlcnRfc3NlMikKKworRVhUTihqY29uc3RfeWNjX3JnYl9jb252ZXJ0X3NzZTIpOgorCitQV19GMDQwMgl0aW1lcyA4IGR3ICBGXzBfNDAyCitQV19NRjAyMjgJdGltZXMgOCBkdyAtRl8wXzIyOAorUFdfTUYwMzQ0X0YwMjg1CXRpbWVzIDQgZHcgLUZfMF8zNDQsIEZfMF8yODUKK1BXX09ORQkJdGltZXMgOCBkdyAgMQorUERfT05FSEFMRgl0aW1lcyA0IGRkICAxIDw8IChTQ0FMRUJJVFMtMSkKKworCWFsaWduegkxNgorCis7IC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCislaW5jbHVkZSAiamRjbHJzczIuYXNtIgorCisldW5kZWYgUkdCX1JFRAorJXVuZGVmIFJHQl9HUkVFTgorJXVuZGVmIFJHQl9CTFVFCisldW5kZWYgUkdCX1BJWEVMU0laRQorJWRlZmluZSBSR0JfUkVEIDAKKyVkZWZpbmUgUkdCX0dSRUVOIDEKKyVkZWZpbmUgUkdCX0JMVUUgMgorJWRlZmluZSBSR0JfUElYRUxTSVpFIDMKKyVkZWZpbmUganNpbWRfeWNjX3JnYl9jb252ZXJ0X3NzZTIganNpbWRfeWNjX2V4dHJnYl9jb252ZXJ0X3NzZTIKKyVpbmNsdWRlICJqZGNscnNzMi5hc20iCisKKyV1bmRlZiBSR0JfUkVECisldW5kZWYgUkdCX0dSRUVOCisldW5kZWYgUkdCX0JMVUUKKyV1bmRlZiBSR0JfUElYRUxTSVpFCislZGVmaW5lIFJHQl9SRUQgMAorJWRlZmluZSBSR0JfR1JFRU4gMQorJWRlZmluZSBSR0JfQkxVRSAyCislZGVmaW5lIFJHQl9QSVhFTFNJWkUgNAorJWRlZmluZSBqc2ltZF95Y2NfcmdiX2NvbnZlcnRfc3NlMiBqc2ltZF95Y2NfZXh0cmdieF9jb252ZXJ0X3NzZTIKKyVpbmNsdWRlICJqZGNscnNzMi5hc20iCisKKyV1bmRlZiBSR0JfUkVECisldW5kZWYgUkdCX0dSRUVOCisldW5kZWYgUkdCX0JMVUUKKyV1bmRlZiBSR0JfUElYRUxTSVpFCislZGVmaW5lIFJHQl9SRUQgMgorJWRlZmluZSBSR0JfR1JFRU4gMQorJWRlZmluZSBSR0JfQkxVRSAwCislZGVmaW5lIFJHQl9QSVhFTFNJWkUgMworJWRlZmluZSBqc2ltZF95Y2NfcmdiX2NvbnZlcnRfc3NlMiBqc2ltZF95Y2NfZXh0YmdyX2NvbnZlcnRfc3NlMgorJWluY2x1ZGUgImpkY2xyc3MyLmFzbSIKKworJXVuZGVmIFJHQl9SRUQKKyV1bmRlZiBSR0JfR1JFRU4KKyV1bmRlZiBSR0JfQkxVRQorJXVuZGVmIFJHQl9QSVhFTFNJWkUKKyVkZWZpbmUgUkdCX1JFRCAyCislZGVmaW5lIFJHQl9HUkVFTiAxCislZGVmaW5lIFJHQl9CTFVFIDAKKyVkZWZpbmUgUkdCX1BJWEVMU0laRSA0CislZGVmaW5lIGpzaW1kX3ljY19yZ2JfY29udmVydF9zc2UyIGpzaW1kX3ljY19leHRiZ3J4X2NvbnZlcnRfc3NlMgorJWluY2x1ZGUgImpkY2xyc3MyLmFzbSIKKworJXVuZGVmIFJHQl9SRUQKKyV1bmRlZiBSR0JfR1JFRU4KKyV1bmRlZiBSR0JfQkxVRQorJXVuZGVmIFJHQl9QSVhFTFNJWkUKKyVkZWZpbmUgUkdCX1JFRCAzCislZGVmaW5lIFJHQl9HUkVFTiAyCislZGVmaW5lIFJHQl9CTFVFIDEKKyVkZWZpbmUgUkdCX1BJWEVMU0laRSA0CislZGVmaW5lIGpzaW1kX3ljY19yZ2JfY29udmVydF9zc2UyIGpzaW1kX3ljY19leHR4YmdyX2NvbnZlcnRfc3NlMgorJWluY2x1ZGUgImpkY2xyc3MyLmFzbSIKKworJXVuZGVmIFJHQl9SRUQKKyV1bmRlZiBSR0JfR1JFRU4KKyV1bmRlZiBSR0JfQkxVRQorJXVuZGVmIFJHQl9QSVhFTFNJWkUKKyVkZWZpbmUgUkdCX1JFRCAxCislZGVmaW5lIFJHQl9HUkVFTiAyCislZGVmaW5lIFJHQl9CTFVFIDMKKyVkZWZpbmUgUkdCX1BJWEVMU0laRSA0CislZGVmaW5lIGpzaW1kX3ljY19yZ2JfY29udmVydF9zc2UyIGpzaW1kX3ljY19leHR4cmdiX2NvbnZlcnRfc3NlMgorJWluY2x1ZGUgImpkY2xyc3MyLmFzbSIKZGlmZiAtLWdpdCBhL3NpbWQvamRjdC5pbmMgYi9zaW1kL2pkY3QuaW5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmNjNjI3MDQKLS0tIC9kZXYvbnVsbAorKysgYi9zaW1kL2pkY3QuaW5jCkBAIC0wLDAgKzEsMjggQEAKKzsKKzsgamRjdC5pbmMgLSBwcml2YXRlIGRlY2xhcmF0aW9ucyBmb3IgZm9yd2FyZCAmIHJldmVyc2UgRENUIHN1YnN5c3RlbXMKKzsKKzsgQ29weXJpZ2h0IDIwMDkgUGllcnJlIE9zc21hbiA8b3NzbWFuQGNlbmRpby5zZT4gZm9yIENlbmRpbyBBQgorOworOyBCYXNlZCBvbgorOyB4ODYgU0lNRCBleHRlbnNpb24gZm9yIElKRyBKUEVHIGxpYnJhcnkKKzsgQ29weXJpZ2h0IChDKSAxOTk5LTIwMDYsIE1JWUFTQUtBIE1hc2FydS4KKzsgRm9yIGNvbmRpdGlvbnMgb2YgZGlzdHJpYnV0aW9uIGFuZCB1c2UsIHNlZSBjb3B5cmlnaHQgbm90aWNlIGluIGpzaW1kZXh0LmluYworOworOyBbVEFCOF0KKworOyBFYWNoIElEQ1Qgcm91dGluZSBpcyByZXNwb25zaWJsZSBmb3IgcmFuZ2UtbGltaXRpbmcgaXRzIHJlc3VsdHMgYW5kCis7IGNvbnZlcnRpbmcgdGhlbSB0byB1bnNpZ25lZCBmb3JtICgwLi5NQVhKU0FNUExFKS4gIFRoZSByYXcgb3V0cHV0cyBjb3VsZAorOyBiZSBxdWl0ZSBmYXIgb3V0IG9mIHJhbmdlIGlmIHRoZSBpbnB1dCBkYXRhIGlzIGNvcnJ1cHQsIHNvIGEgYnVsbGV0cHJvb2YKKzsgcmFuZ2UtbGltaXRpbmcgc3RlcCBpcyByZXF1aXJlZC4gIFdlIHVzZSBhIG1hc2stYW5kLXRhYmxlLWxvb2t1cCBtZXRob2QKKzsgdG8gZG8gdGhlIGNvbWJpbmVkIG9wZXJhdGlvbnMgcXVpY2tseS4KKzsKKyVkZWZpbmUgUkFOR0VfTUFTSyAgKE1BWEpTQU1QTEUgKiA0ICsgMykgIDsgMiBiaXRzIHdpZGVyIHRoYW4gbGVnYWwgc2FtcGxlcworCislZGVmaW5lIFJPVyhuLGIscykJCSgoYikrKG4pKihzKSkKKyVkZWZpbmUgQ09MKG4sYixzKQkJKChiKSsobikqKHMpKkRDVFNJWkUpCisKKyVkZWZpbmUgRFdCTE9DSyhtLG4sYixzKQkoKGIpKyhtKSpEQ1RTSVpFKihzKSsobikqU0laRU9GX0RXT1JEKQorJWRlZmluZSBNTUJMT0NLKG0sbixiLHMpCSgoYikrKG0pKkRDVFNJWkUqKHMpKyhuKSpTSVpFT0ZfTU1XT1JEKQorJWRlZmluZSBYTU1CTE9DSyhtLG4sYixzKQkoKGIpKyhtKSpEQ1RTSVpFKihzKSsobikqU0laRU9GX1hNTVdPUkQpCisKKzsgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KZGlmZiAtLWdpdCBhL3NpbWQvamRtZXJtbXguYXNtIGIvc2ltZC9qZG1lcm1teC5hc20KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZmQ1ODdmYgotLS0gL2Rldi9udWxsCisrKyBiL3NpbWQvamRtZXJtbXguYXNtCkBAIC0wLDAgKzEsMTIzIEBACis7Cis7IGpkbWVybW14LmFzbSAtIG1lcmdlZCB1cHNhbXBsaW5nL2NvbG9yIGNvbnZlcnNpb24gKE1NWCkKKzsKKzsgQ29weXJpZ2h0IDIwMDkgUGllcnJlIE9zc21hbiA8b3NzbWFuQGNlbmRpby5zZT4gZm9yIENlbmRpbyBBQgorOyBDb3B5cmlnaHQgMjAwOSBELiBSLiBDb21tYW5kZXIKKzsKKzsgQmFzZWQgb24KKzsgeDg2IFNJTUQgZXh0ZW5zaW9uIGZvciBJSkcgSlBFRyBsaWJyYXJ5Cis7IENvcHlyaWdodCAoQykgMTk5OS0yMDA2LCBNSVlBU0FLQSBNYXNhcnUuCis7IEZvciBjb25kaXRpb25zIG9mIGRpc3RyaWJ1dGlvbiBhbmQgdXNlLCBzZWUgY29weXJpZ2h0IG5vdGljZSBpbiBqc2ltZGV4dC5pbmMKKzsKKzsgVGhpcyBmaWxlIHNob3VsZCBiZSBhc3NlbWJsZWQgd2l0aCBOQVNNIChOZXR3aWRlIEFzc2VtYmxlciksCis7IGNhbiAqbm90KiBiZSBhc3NlbWJsZWQgd2l0aCBNaWNyb3NvZnQncyBNQVNNIG9yIGFueSBjb21wYXRpYmxlCis7IGFzc2VtYmxlciAoaW5jbHVkaW5nIEJvcmxhbmQncyBUdXJibyBBc3NlbWJsZXIpLgorOyBOQVNNIGlzIGF2YWlsYWJsZSBmcm9tIGh0dHA6Ly9uYXNtLnNvdXJjZWZvcmdlLm5ldC8gb3IKKzsgaHR0cDovL3NvdXJjZWZvcmdlLm5ldC9wcm9qZWN0L3Nob3dmaWxlcy5waHA/Z3JvdXBfaWQ9NjIwOAorOworOyBbVEFCOF0KKworJWluY2x1ZGUgImpzaW1kZXh0LmluYyIKKworOyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCislZGVmaW5lIFNDQUxFQklUUwkxNgorCitGXzBfMzQ0CWVxdQkgMjI1NTQJCQk7IEZJWCgwLjM0NDE0KQorRl8wXzcxNAllcXUJIDQ2ODAyCQkJOyBGSVgoMC43MTQxNCkKK0ZfMV80MDIJZXF1CSA5MTg4MQkJCTsgRklYKDEuNDAyMDApCitGXzFfNzcyCWVxdQkxMTYxMzAJCQk7IEZJWCgxLjc3MjAwKQorRl8wXzQwMgllcXUJKEZfMV80MDIgLSA2NTUzNikJOyBGSVgoMS40MDIwMCkgLSBGSVgoMSkKK0ZfMF8yODUJZXF1CSggNjU1MzYgLSBGXzBfNzE0KQk7IEZJWCgxKSAtIEZJWCgwLjcxNDE0KQorRl8wXzIyOAllcXUJKDEzMTA3MiAtIEZfMV83NzIpCTsgRklYKDIpIC0gRklYKDEuNzcyMDApCisKKzsgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKwlTRUNUSU9OCVNFR19DT05TVAorCisJYWxpZ256CTE2CisJZ2xvYmFsCUVYVE4oamNvbnN0X21lcmdlZF91cHNhbXBsZV9tbXgpCisKK0VYVE4oamNvbnN0X21lcmdlZF91cHNhbXBsZV9tbXgpOgorCitQV19GMDQwMgl0aW1lcyA0IGR3ICBGXzBfNDAyCitQV19NRjAyMjgJdGltZXMgNCBkdyAtRl8wXzIyOAorUFdfTUYwMzQ0X0YwMjg1CXRpbWVzIDIgZHcgLUZfMF8zNDQsIEZfMF8yODUKK1BXX09ORQkJdGltZXMgNCBkdyAgMQorUERfT05FSEFMRgl0aW1lcyAyIGRkICAxIDw8IChTQ0FMRUJJVFMtMSkKKworCWFsaWduegkxNgorCis7IC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCislaW5jbHVkZSAiamRtcmdtbXguYXNtIgorCisldW5kZWYgUkdCX1JFRAorJXVuZGVmIFJHQl9HUkVFTgorJXVuZGVmIFJHQl9CTFVFCisldW5kZWYgUkdCX1BJWEVMU0laRQorJWRlZmluZSBSR0JfUkVEIDAKKyVkZWZpbmUgUkdCX0dSRUVOIDEKKyVkZWZpbmUgUkdCX0JMVUUgMgorJWRlZmluZSBSR0JfUElYRUxTSVpFIDMKKyVkZWZpbmUganNpbWRfaDJ2MV9tZXJnZWRfdXBzYW1wbGVfbW14IGpzaW1kX2gydjFfZXh0cmdiX21lcmdlZF91cHNhbXBsZV9tbXgKKyVkZWZpbmUganNpbWRfaDJ2Ml9tZXJnZWRfdXBzYW1wbGVfbW14IGpzaW1kX2gydjJfZXh0cmdiX21lcmdlZF91cHNhbXBsZV9tbXgKKyVpbmNsdWRlICJqZG1yZ21teC5hc20iCisKKyV1bmRlZiBSR0JfUkVECisldW5kZWYgUkdCX0dSRUVOCisldW5kZWYgUkdCX0JMVUUKKyV1bmRlZiBSR0JfUElYRUxTSVpFCislZGVmaW5lIFJHQl9SRUQgMAorJWRlZmluZSBSR0JfR1JFRU4gMQorJWRlZmluZSBSR0JfQkxVRSAyCislZGVmaW5lIFJHQl9QSVhFTFNJWkUgNAorJWRlZmluZSBqc2ltZF9oMnYxX21lcmdlZF91cHNhbXBsZV9tbXgganNpbWRfaDJ2MV9leHRyZ2J4X21lcmdlZF91cHNhbXBsZV9tbXgKKyVkZWZpbmUganNpbWRfaDJ2Ml9tZXJnZWRfdXBzYW1wbGVfbW14IGpzaW1kX2gydjJfZXh0cmdieF9tZXJnZWRfdXBzYW1wbGVfbW14CislaW5jbHVkZSAiamRtcmdtbXguYXNtIgorCisldW5kZWYgUkdCX1JFRAorJXVuZGVmIFJHQl9HUkVFTgorJXVuZGVmIFJHQl9CTFVFCisldW5kZWYgUkdCX1BJWEVMU0laRQorJWRlZmluZSBSR0JfUkVEIDIKKyVkZWZpbmUgUkdCX0dSRUVOIDEKKyVkZWZpbmUgUkdCX0JMVUUgMAorJWRlZmluZSBSR0JfUElYRUxTSVpFIDMKKyVkZWZpbmUganNpbWRfaDJ2MV9tZXJnZWRfdXBzYW1wbGVfbW14IGpzaW1kX2gydjFfZXh0YmdyX21lcmdlZF91cHNhbXBsZV9tbXgKKyVkZWZpbmUganNpbWRfaDJ2Ml9tZXJnZWRfdXBzYW1wbGVfbW14IGpzaW1kX2gydjJfZXh0YmdyX21lcmdlZF91cHNhbXBsZV9tbXgKKyVpbmNsdWRlICJqZG1yZ21teC5hc20iCisKKyV1bmRlZiBSR0JfUkVECisldW5kZWYgUkdCX0dSRUVOCisldW5kZWYgUkdCX0JMVUUKKyV1bmRlZiBSR0JfUElYRUxTSVpFCislZGVmaW5lIFJHQl9SRUQgMgorJWRlZmluZSBSR0JfR1JFRU4gMQorJWRlZmluZSBSR0JfQkxVRSAwCislZGVmaW5lIFJHQl9QSVhFTFNJWkUgNAorJWRlZmluZSBqc2ltZF9oMnYxX21lcmdlZF91cHNhbXBsZV9tbXgganNpbWRfaDJ2MV9leHRiZ3J4X21lcmdlZF91cHNhbXBsZV9tbXgKKyVkZWZpbmUganNpbWRfaDJ2Ml9tZXJnZWRfdXBzYW1wbGVfbW14IGpzaW1kX2gydjJfZXh0YmdyeF9tZXJnZWRfdXBzYW1wbGVfbW14CislaW5jbHVkZSAiamRtcmdtbXguYXNtIgorCisldW5kZWYgUkdCX1JFRAorJXVuZGVmIFJHQl9HUkVFTgorJXVuZGVmIFJHQl9CTFVFCisldW5kZWYgUkdCX1BJWEVMU0laRQorJWRlZmluZSBSR0JfUkVEIDMKKyVkZWZpbmUgUkdCX0dSRUVOIDIKKyVkZWZpbmUgUkdCX0JMVUUgMQorJWRlZmluZSBSR0JfUElYRUxTSVpFIDQKKyVkZWZpbmUganNpbWRfaDJ2MV9tZXJnZWRfdXBzYW1wbGVfbW14IGpzaW1kX2gydjFfZXh0eGJncl9tZXJnZWRfdXBzYW1wbGVfbW14CislZGVmaW5lIGpzaW1kX2gydjJfbWVyZ2VkX3Vwc2FtcGxlX21teCBqc2ltZF9oMnYyX2V4dHhiZ3JfbWVyZ2VkX3Vwc2FtcGxlX21teAorJWluY2x1ZGUgImpkbXJnbW14LmFzbSIKKworJXVuZGVmIFJHQl9SRUQKKyV1bmRlZiBSR0JfR1JFRU4KKyV1bmRlZiBSR0JfQkxVRQorJXVuZGVmIFJHQl9QSVhFTFNJWkUKKyVkZWZpbmUgUkdCX1JFRCAxCislZGVmaW5lIFJHQl9HUkVFTiAyCislZGVmaW5lIFJHQl9CTFVFIDMKKyVkZWZpbmUgUkdCX1BJWEVMU0laRSA0CislZGVmaW5lIGpzaW1kX2gydjFfbWVyZ2VkX3Vwc2FtcGxlX21teCBqc2ltZF9oMnYxX2V4dHhyZ2JfbWVyZ2VkX3Vwc2FtcGxlX21teAorJWRlZmluZSBqc2ltZF9oMnYyX21lcmdlZF91cHNhbXBsZV9tbXgganNpbWRfaDJ2Ml9leHR4cmdiX21lcmdlZF91cHNhbXBsZV9tbXgKKyVpbmNsdWRlICJqZG1yZ21teC5hc20iCmRpZmYgLS1naXQgYS9zaW1kL2pkbWVyc3MyLTY0LmFzbSBiL3NpbWQvamRtZXJzczItNjQuYXNtCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjFmMGIxMGYKLS0tIC9kZXYvbnVsbAorKysgYi9zaW1kL2pkbWVyc3MyLTY0LmFzbQpAQCAtMCwwICsxLDEyMyBAQAorOworOyBqZG1lcnNzMi02NC5hc20gLSBtZXJnZWQgdXBzYW1wbGluZy9jb2xvciBjb252ZXJzaW9uICg2NC1iaXQgU1NFMikKKzsKKzsgQ29weXJpZ2h0IDIwMDkgUGllcnJlIE9zc21hbiA8b3NzbWFuQGNlbmRpby5zZT4gZm9yIENlbmRpbyBBQgorOyBDb3B5cmlnaHQgMjAwOSBELiBSLiBDb21tYW5kZXIKKzsKKzsgQmFzZWQgb24KKzsgeDg2IFNJTUQgZXh0ZW5zaW9uIGZvciBJSkcgSlBFRyBsaWJyYXJ5Cis7IENvcHlyaWdodCAoQykgMTk5OS0yMDA2LCBNSVlBU0FLQSBNYXNhcnUuCis7IEZvciBjb25kaXRpb25zIG9mIGRpc3RyaWJ1dGlvbiBhbmQgdXNlLCBzZWUgY29weXJpZ2h0IG5vdGljZSBpbiBqc2ltZGV4dC5pbmMKKzsKKzsgVGhpcyBmaWxlIHNob3VsZCBiZSBhc3NlbWJsZWQgd2l0aCBOQVNNIChOZXR3aWRlIEFzc2VtYmxlciksCis7IGNhbiAqbm90KiBiZSBhc3NlbWJsZWQgd2l0aCBNaWNyb3NvZnQncyBNQVNNIG9yIGFueSBjb21wYXRpYmxlCis7IGFzc2VtYmxlciAoaW5jbHVkaW5nIEJvcmxhbmQncyBUdXJibyBBc3NlbWJsZXIpLgorOyBOQVNNIGlzIGF2YWlsYWJsZSBmcm9tIGh0dHA6Ly9uYXNtLnNvdXJjZWZvcmdlLm5ldC8gb3IKKzsgaHR0cDovL3NvdXJjZWZvcmdlLm5ldC9wcm9qZWN0L3Nob3dmaWxlcy5waHA/Z3JvdXBfaWQ9NjIwOAorOworOyBbVEFCOF0KKworJWluY2x1ZGUgImpzaW1kZXh0LmluYyIKKworOyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCislZGVmaW5lIFNDQUxFQklUUwkxNgorCitGXzBfMzQ0CWVxdQkgMjI1NTQJCQk7IEZJWCgwLjM0NDE0KQorRl8wXzcxNAllcXUJIDQ2ODAyCQkJOyBGSVgoMC43MTQxNCkKK0ZfMV80MDIJZXF1CSA5MTg4MQkJCTsgRklYKDEuNDAyMDApCitGXzFfNzcyCWVxdQkxMTYxMzAJCQk7IEZJWCgxLjc3MjAwKQorRl8wXzQwMgllcXUJKEZfMV80MDIgLSA2NTUzNikJOyBGSVgoMS40MDIwMCkgLSBGSVgoMSkKK0ZfMF8yODUJZXF1CSggNjU1MzYgLSBGXzBfNzE0KQk7IEZJWCgxKSAtIEZJWCgwLjcxNDE0KQorRl8wXzIyOAllcXUJKDEzMTA3MiAtIEZfMV83NzIpCTsgRklYKDIpIC0gRklYKDEuNzcyMDApCisKKzsgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKwlTRUNUSU9OCVNFR19DT05TVAorCisJYWxpZ256CTE2CisJZ2xvYmFsCUVYVE4oamNvbnN0X21lcmdlZF91cHNhbXBsZV9zc2UyKQorCitFWFROKGpjb25zdF9tZXJnZWRfdXBzYW1wbGVfc3NlMik6CisKK1BXX0YwNDAyCXRpbWVzIDggZHcgIEZfMF80MDIKK1BXX01GMDIyOAl0aW1lcyA4IGR3IC1GXzBfMjI4CitQV19NRjAzNDRfRjAyODUJdGltZXMgNCBkdyAtRl8wXzM0NCwgRl8wXzI4NQorUFdfT05FCQl0aW1lcyA4IGR3ICAxCitQRF9PTkVIQUxGCXRpbWVzIDQgZGQgIDEgPDwgKFNDQUxFQklUUy0xKQorCisJYWxpZ256CTE2CisKKzsgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyVpbmNsdWRlICJqZG1yZ3NzMi02NC5hc20iCisKKyV1bmRlZiBSR0JfUkVECisldW5kZWYgUkdCX0dSRUVOCisldW5kZWYgUkdCX0JMVUUKKyV1bmRlZiBSR0JfUElYRUxTSVpFCislZGVmaW5lIFJHQl9SRUQgMAorJWRlZmluZSBSR0JfR1JFRU4gMQorJWRlZmluZSBSR0JfQkxVRSAyCislZGVmaW5lIFJHQl9QSVhFTFNJWkUgMworJWRlZmluZSBqc2ltZF9oMnYxX21lcmdlZF91cHNhbXBsZV9zc2UyIGpzaW1kX2gydjFfZXh0cmdiX21lcmdlZF91cHNhbXBsZV9zc2UyCislZGVmaW5lIGpzaW1kX2gydjJfbWVyZ2VkX3Vwc2FtcGxlX3NzZTIganNpbWRfaDJ2Ml9leHRyZ2JfbWVyZ2VkX3Vwc2FtcGxlX3NzZTIKKyVpbmNsdWRlICJqZG1yZ3NzMi02NC5hc20iCisKKyV1bmRlZiBSR0JfUkVECisldW5kZWYgUkdCX0dSRUVOCisldW5kZWYgUkdCX0JMVUUKKyV1bmRlZiBSR0JfUElYRUxTSVpFCislZGVmaW5lIFJHQl9SRUQgMAorJWRlZmluZSBSR0JfR1JFRU4gMQorJWRlZmluZSBSR0JfQkxVRSAyCislZGVmaW5lIFJHQl9QSVhFTFNJWkUgNAorJWRlZmluZSBqc2ltZF9oMnYxX21lcmdlZF91cHNhbXBsZV9zc2UyIGpzaW1kX2gydjFfZXh0cmdieF9tZXJnZWRfdXBzYW1wbGVfc3NlMgorJWRlZmluZSBqc2ltZF9oMnYyX21lcmdlZF91cHNhbXBsZV9zc2UyIGpzaW1kX2gydjJfZXh0cmdieF9tZXJnZWRfdXBzYW1wbGVfc3NlMgorJWluY2x1ZGUgImpkbXJnc3MyLTY0LmFzbSIKKworJXVuZGVmIFJHQl9SRUQKKyV1bmRlZiBSR0JfR1JFRU4KKyV1bmRlZiBSR0JfQkxVRQorJXVuZGVmIFJHQl9QSVhFTFNJWkUKKyVkZWZpbmUgUkdCX1JFRCAyCislZGVmaW5lIFJHQl9HUkVFTiAxCislZGVmaW5lIFJHQl9CTFVFIDAKKyVkZWZpbmUgUkdCX1BJWEVMU0laRSAzCislZGVmaW5lIGpzaW1kX2gydjFfbWVyZ2VkX3Vwc2FtcGxlX3NzZTIganNpbWRfaDJ2MV9leHRiZ3JfbWVyZ2VkX3Vwc2FtcGxlX3NzZTIKKyVkZWZpbmUganNpbWRfaDJ2Ml9tZXJnZWRfdXBzYW1wbGVfc3NlMiBqc2ltZF9oMnYyX2V4dGJncl9tZXJnZWRfdXBzYW1wbGVfc3NlMgorJWluY2x1ZGUgImpkbXJnc3MyLTY0LmFzbSIKKworJXVuZGVmIFJHQl9SRUQKKyV1bmRlZiBSR0JfR1JFRU4KKyV1bmRlZiBSR0JfQkxVRQorJXVuZGVmIFJHQl9QSVhFTFNJWkUKKyVkZWZpbmUgUkdCX1JFRCAyCislZGVmaW5lIFJHQl9HUkVFTiAxCislZGVmaW5lIFJHQl9CTFVFIDAKKyVkZWZpbmUgUkdCX1BJWEVMU0laRSA0CislZGVmaW5lIGpzaW1kX2gydjFfbWVyZ2VkX3Vwc2FtcGxlX3NzZTIganNpbWRfaDJ2MV9leHRiZ3J4X21lcmdlZF91cHNhbXBsZV9zc2UyCislZGVmaW5lIGpzaW1kX2gydjJfbWVyZ2VkX3Vwc2FtcGxlX3NzZTIganNpbWRfaDJ2Ml9leHRiZ3J4X21lcmdlZF91cHNhbXBsZV9zc2UyCislaW5jbHVkZSAiamRtcmdzczItNjQuYXNtIgorCisldW5kZWYgUkdCX1JFRAorJXVuZGVmIFJHQl9HUkVFTgorJXVuZGVmIFJHQl9CTFVFCisldW5kZWYgUkdCX1BJWEVMU0laRQorJWRlZmluZSBSR0JfUkVEIDMKKyVkZWZpbmUgUkdCX0dSRUVOIDIKKyVkZWZpbmUgUkdCX0JMVUUgMQorJWRlZmluZSBSR0JfUElYRUxTSVpFIDQKKyVkZWZpbmUganNpbWRfaDJ2MV9tZXJnZWRfdXBzYW1wbGVfc3NlMiBqc2ltZF9oMnYxX2V4dHhiZ3JfbWVyZ2VkX3Vwc2FtcGxlX3NzZTIKKyVkZWZpbmUganNpbWRfaDJ2Ml9tZXJnZWRfdXBzYW1wbGVfc3NlMiBqc2ltZF9oMnYyX2V4dHhiZ3JfbWVyZ2VkX3Vwc2FtcGxlX3NzZTIKKyVpbmNsdWRlICJqZG1yZ3NzMi02NC5hc20iCisKKyV1bmRlZiBSR0JfUkVECisldW5kZWYgUkdCX0dSRUVOCisldW5kZWYgUkdCX0JMVUUKKyV1bmRlZiBSR0JfUElYRUxTSVpFCislZGVmaW5lIFJHQl9SRUQgMQorJWRlZmluZSBSR0JfR1JFRU4gMgorJWRlZmluZSBSR0JfQkxVRSAzCislZGVmaW5lIFJHQl9QSVhFTFNJWkUgNAorJWRlZmluZSBqc2ltZF9oMnYxX21lcmdlZF91cHNhbXBsZV9zc2UyIGpzaW1kX2gydjFfZXh0eHJnYl9tZXJnZWRfdXBzYW1wbGVfc3NlMgorJWRlZmluZSBqc2ltZF9oMnYyX21lcmdlZF91cHNhbXBsZV9zc2UyIGpzaW1kX2gydjJfZXh0eHJnYl9tZXJnZWRfdXBzYW1wbGVfc3NlMgorJWluY2x1ZGUgImpkbXJnc3MyLTY0LmFzbSIKZGlmZiAtLWdpdCBhL3NpbWQvamRtZXJzczIuYXNtIGIvc2ltZC9qZG1lcnNzMi5hc20KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjI5NGUwZAotLS0gL2Rldi9udWxsCisrKyBiL3NpbWQvamRtZXJzczIuYXNtCkBAIC0wLDAgKzEsMTIzIEBACis7Cis7IGpkbWVyc3MyLmFzbSAtIG1lcmdlZCB1cHNhbXBsaW5nL2NvbG9yIGNvbnZlcnNpb24gKFNTRTIpCis7Cis7IENvcHlyaWdodCAyMDA5IFBpZXJyZSBPc3NtYW4gPG9zc21hbkBjZW5kaW8uc2U+IGZvciBDZW5kaW8gQUIKKzsgQ29weXJpZ2h0IDIwMDkgRC4gUi4gQ29tbWFuZGVyCis7Cis7IEJhc2VkIG9uCis7IHg4NiBTSU1EIGV4dGVuc2lvbiBmb3IgSUpHIEpQRUcgbGlicmFyeQorOyBDb3B5cmlnaHQgKEMpIDE5OTktMjAwNiwgTUlZQVNBS0EgTWFzYXJ1LgorOyBGb3IgY29uZGl0aW9ucyBvZiBkaXN0cmlidXRpb24gYW5kIHVzZSwgc2VlIGNvcHlyaWdodCBub3RpY2UgaW4ganNpbWRleHQuaW5jCis7Cis7IFRoaXMgZmlsZSBzaG91bGQgYmUgYXNzZW1ibGVkIHdpdGggTkFTTSAoTmV0d2lkZSBBc3NlbWJsZXIpLAorOyBjYW4gKm5vdCogYmUgYXNzZW1ibGVkIHdpdGggTWljcm9zb2Z0J3MgTUFTTSBvciBhbnkgY29tcGF0aWJsZQorOyBhc3NlbWJsZXIgKGluY2x1ZGluZyBCb3JsYW5kJ3MgVHVyYm8gQXNzZW1ibGVyKS4KKzsgTkFTTSBpcyBhdmFpbGFibGUgZnJvbSBodHRwOi8vbmFzbS5zb3VyY2Vmb3JnZS5uZXQvIG9yCis7IGh0dHA6Ly9zb3VyY2Vmb3JnZS5uZXQvcHJvamVjdC9zaG93ZmlsZXMucGhwP2dyb3VwX2lkPTYyMDgKKzsKKzsgW1RBQjhdCisKKyVpbmNsdWRlICJqc2ltZGV4dC5pbmMiCisKKzsgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworJWRlZmluZSBTQ0FMRUJJVFMJMTYKKworRl8wXzM0NAllcXUJIDIyNTU0CQkJOyBGSVgoMC4zNDQxNCkKK0ZfMF83MTQJZXF1CSA0NjgwMgkJCTsgRklYKDAuNzE0MTQpCitGXzFfNDAyCWVxdQkgOTE4ODEJCQk7IEZJWCgxLjQwMjAwKQorRl8xXzc3MgllcXUJMTE2MTMwCQkJOyBGSVgoMS43NzIwMCkKK0ZfMF80MDIJZXF1CShGXzFfNDAyIC0gNjU1MzYpCTsgRklYKDEuNDAyMDApIC0gRklYKDEpCitGXzBfMjg1CWVxdQkoIDY1NTM2IC0gRl8wXzcxNCkJOyBGSVgoMSkgLSBGSVgoMC43MTQxNCkKK0ZfMF8yMjgJZXF1CSgxMzEwNzIgLSBGXzFfNzcyKQk7IEZJWCgyKSAtIEZJWCgxLjc3MjAwKQorCis7IC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisJU0VDVElPTglTRUdfQ09OU1QKKworCWFsaWduegkxNgorCWdsb2JhbAlFWFROKGpjb25zdF9tZXJnZWRfdXBzYW1wbGVfc3NlMikKKworRVhUTihqY29uc3RfbWVyZ2VkX3Vwc2FtcGxlX3NzZTIpOgorCitQV19GMDQwMgl0aW1lcyA4IGR3ICBGXzBfNDAyCitQV19NRjAyMjgJdGltZXMgOCBkdyAtRl8wXzIyOAorUFdfTUYwMzQ0X0YwMjg1CXRpbWVzIDQgZHcgLUZfMF8zNDQsIEZfMF8yODUKK1BXX09ORQkJdGltZXMgOCBkdyAgMQorUERfT05FSEFMRgl0aW1lcyA0IGRkICAxIDw8IChTQ0FMRUJJVFMtMSkKKworCWFsaWduegkxNgorCis7IC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCislaW5jbHVkZSAiamRtcmdzczIuYXNtIgorCisldW5kZWYgUkdCX1JFRAorJXVuZGVmIFJHQl9HUkVFTgorJXVuZGVmIFJHQl9CTFVFCisldW5kZWYgUkdCX1BJWEVMU0laRQorJWRlZmluZSBSR0JfUkVEIDAKKyVkZWZpbmUgUkdCX0dSRUVOIDEKKyVkZWZpbmUgUkdCX0JMVUUgMgorJWRlZmluZSBSR0JfUElYRUxTSVpFIDMKKyVkZWZpbmUganNpbWRfaDJ2MV9tZXJnZWRfdXBzYW1wbGVfc3NlMiBqc2ltZF9oMnYxX2V4dHJnYl9tZXJnZWRfdXBzYW1wbGVfc3NlMgorJWRlZmluZSBqc2ltZF9oMnYyX21lcmdlZF91cHNhbXBsZV9zc2UyIGpzaW1kX2gydjJfZXh0cmdiX21lcmdlZF91cHNhbXBsZV9zc2UyCislaW5jbHVkZSAiamRtcmdzczIuYXNtIgorCisldW5kZWYgUkdCX1JFRAorJXVuZGVmIFJHQl9HUkVFTgorJXVuZGVmIFJHQl9CTFVFCisldW5kZWYgUkdCX1BJWEVMU0laRQorJWRlZmluZSBSR0JfUkVEIDAKKyVkZWZpbmUgUkdCX0dSRUVOIDEKKyVkZWZpbmUgUkdCX0JMVUUgMgorJWRlZmluZSBSR0JfUElYRUxTSVpFIDQKKyVkZWZpbmUganNpbWRfaDJ2MV9tZXJnZWRfdXBzYW1wbGVfc3NlMiBqc2ltZF9oMnYxX2V4dHJnYnhfbWVyZ2VkX3Vwc2FtcGxlX3NzZTIKKyVkZWZpbmUganNpbWRfaDJ2Ml9tZXJnZWRfdXBzYW1wbGVfc3NlMiBqc2ltZF9oMnYyX2V4dHJnYnhfbWVyZ2VkX3Vwc2FtcGxlX3NzZTIKKyVpbmNsdWRlICJqZG1yZ3NzMi5hc20iCisKKyV1bmRlZiBSR0JfUkVECisldW5kZWYgUkdCX0dSRUVOCisldW5kZWYgUkdCX0JMVUUKKyV1bmRlZiBSR0JfUElYRUxTSVpFCislZGVmaW5lIFJHQl9SRUQgMgorJWRlZmluZSBSR0JfR1JFRU4gMQorJWRlZmluZSBSR0JfQkxVRSAwCislZGVmaW5lIFJHQl9QSVhFTFNJWkUgMworJWRlZmluZSBqc2ltZF9oMnYxX21lcmdlZF91cHNhbXBsZV9zc2UyIGpzaW1kX2gydjFfZXh0YmdyX21lcmdlZF91cHNhbXBsZV9zc2UyCislZGVmaW5lIGpzaW1kX2gydjJfbWVyZ2VkX3Vwc2FtcGxlX3NzZTIganNpbWRfaDJ2Ml9leHRiZ3JfbWVyZ2VkX3Vwc2FtcGxlX3NzZTIKKyVpbmNsdWRlICJqZG1yZ3NzMi5hc20iCisKKyV1bmRlZiBSR0JfUkVECisldW5kZWYgUkdCX0dSRUVOCisldW5kZWYgUkdCX0JMVUUKKyV1bmRlZiBSR0JfUElYRUxTSVpFCislZGVmaW5lIFJHQl9SRUQgMgorJWRlZmluZSBSR0JfR1JFRU4gMQorJWRlZmluZSBSR0JfQkxVRSAwCislZGVmaW5lIFJHQl9QSVhFTFNJWkUgNAorJWRlZmluZSBqc2ltZF9oMnYxX21lcmdlZF91cHNhbXBsZV9zc2UyIGpzaW1kX2gydjFfZXh0YmdyeF9tZXJnZWRfdXBzYW1wbGVfc3NlMgorJWRlZmluZSBqc2ltZF9oMnYyX21lcmdlZF91cHNhbXBsZV9zc2UyIGpzaW1kX2gydjJfZXh0YmdyeF9tZXJnZWRfdXBzYW1wbGVfc3NlMgorJWluY2x1ZGUgImpkbXJnc3MyLmFzbSIKKworJXVuZGVmIFJHQl9SRUQKKyV1bmRlZiBSR0JfR1JFRU4KKyV1bmRlZiBSR0JfQkxVRQorJXVuZGVmIFJHQl9QSVhFTFNJWkUKKyVkZWZpbmUgUkdCX1JFRCAzCislZGVmaW5lIFJHQl9HUkVFTiAyCislZGVmaW5lIFJHQl9CTFVFIDEKKyVkZWZpbmUgUkdCX1BJWEVMU0laRSA0CislZGVmaW5lIGpzaW1kX2gydjFfbWVyZ2VkX3Vwc2FtcGxlX3NzZTIganNpbWRfaDJ2MV9leHR4YmdyX21lcmdlZF91cHNhbXBsZV9zc2UyCislZGVmaW5lIGpzaW1kX2gydjJfbWVyZ2VkX3Vwc2FtcGxlX3NzZTIganNpbWRfaDJ2Ml9leHR4YmdyX21lcmdlZF91cHNhbXBsZV9zc2UyCislaW5jbHVkZSAiamRtcmdzczIuYXNtIgorCisldW5kZWYgUkdCX1JFRAorJXVuZGVmIFJHQl9HUkVFTgorJXVuZGVmIFJHQl9CTFVFCisldW5kZWYgUkdCX1BJWEVMU0laRQorJWRlZmluZSBSR0JfUkVEIDEKKyVkZWZpbmUgUkdCX0dSRUVOIDIKKyVkZWZpbmUgUkdCX0JMVUUgMworJWRlZmluZSBSR0JfUElYRUxTSVpFIDQKKyVkZWZpbmUganNpbWRfaDJ2MV9tZXJnZWRfdXBzYW1wbGVfc3NlMiBqc2ltZF9oMnYxX2V4dHhyZ2JfbWVyZ2VkX3Vwc2FtcGxlX3NzZTIKKyVkZWZpbmUganNpbWRfaDJ2Ml9tZXJnZWRfdXBzYW1wbGVfc3NlMiBqc2ltZF9oMnYyX2V4dHhyZ2JfbWVyZ2VkX3Vwc2FtcGxlX3NzZTIKKyVpbmNsdWRlICJqZG1yZ3NzMi5hc20iCmRpZmYgLS1naXQgYS9zaW1kL2pkbXJnbW14LmFzbSBiL3NpbWQvamRtcmdtbXguYXNtCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmI1Nzc3YTMKLS0tIC9kZXYvbnVsbAorKysgYi9zaW1kL2pkbXJnbW14LmFzbQpAQCAtMCwwICsxLDQ2NiBAQAorOworOyBqZG1yZ21teC5hc20gLSBtZXJnZWQgdXBzYW1wbGluZy9jb2xvciBjb252ZXJzaW9uIChNTVgpCis7Cis7IENvcHlyaWdodCAyMDA5IFBpZXJyZSBPc3NtYW4gPG9zc21hbkBjZW5kaW8uc2U+IGZvciBDZW5kaW8gQUIKKzsKKzsgQmFzZWQgb24KKzsgeDg2IFNJTUQgZXh0ZW5zaW9uIGZvciBJSkcgSlBFRyBsaWJyYXJ5Cis7IENvcHlyaWdodCAoQykgMTk5OS0yMDA2LCBNSVlBU0FLQSBNYXNhcnUuCis7IEZvciBjb25kaXRpb25zIG9mIGRpc3RyaWJ1dGlvbiBhbmQgdXNlLCBzZWUgY29weXJpZ2h0IG5vdGljZSBpbiBqc2ltZGV4dC5pbmMKKzsKKzsgVGhpcyBmaWxlIHNob3VsZCBiZSBhc3NlbWJsZWQgd2l0aCBOQVNNIChOZXR3aWRlIEFzc2VtYmxlciksCis7IGNhbiAqbm90KiBiZSBhc3NlbWJsZWQgd2l0aCBNaWNyb3NvZnQncyBNQVNNIG9yIGFueSBjb21wYXRpYmxlCis7IGFzc2VtYmxlciAoaW5jbHVkaW5nIEJvcmxhbmQncyBUdXJibyBBc3NlbWJsZXIpLgorOyBOQVNNIGlzIGF2YWlsYWJsZSBmcm9tIGh0dHA6Ly9uYXNtLnNvdXJjZWZvcmdlLm5ldC8gb3IKKzsgaHR0cDovL3NvdXJjZWZvcmdlLm5ldC9wcm9qZWN0L3Nob3dmaWxlcy5waHA/Z3JvdXBfaWQ9NjIwOAorOworOyBbVEFCOF0KKworJWluY2x1ZGUgImpjb2xzYW1wLmluYyIKKworOyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCVNFQ1RJT04JU0VHX1RFWFQKKwlCSVRTCTMyCis7Cis7IFVwc2FtcGxlIGFuZCBjb2xvciBjb252ZXJ0IGZvciB0aGUgY2FzZSBvZiAyOjEgaG9yaXpvbnRhbCBhbmQgMToxIHZlcnRpY2FsLgorOworOyBHTE9CQUwodm9pZCkKKzsganNpbWRfaDJ2MV9tZXJnZWRfdXBzYW1wbGVfbW14IChKRElNRU5TSU9OIG91dHB1dF93aWR0aCwKKzsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBKU0FNUElNQUdFIGlucHV0X2J1ZiwKKzsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBKRElNRU5TSU9OIGluX3Jvd19ncm91cF9jdHIsCis7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSlNBTVBBUlJBWSBvdXRwdXRfYnVmKTsKKzsKKworJWRlZmluZSBvdXRwdXRfd2lkdGgoYikJKGIpKzgJCQk7IEpESU1FTlNJT04gb3V0cHV0X3dpZHRoCislZGVmaW5lIGlucHV0X2J1ZihiKQkJKGIpKzEyCQk7IEpTQU1QSU1BR0UgaW5wdXRfYnVmCislZGVmaW5lIGluX3Jvd19ncm91cF9jdHIoYikJKGIpKzE2CQk7IEpESU1FTlNJT04gaW5fcm93X2dyb3VwX2N0cgorJWRlZmluZSBvdXRwdXRfYnVmKGIpCQkoYikrMjAJCTsgSlNBTVBBUlJBWSBvdXRwdXRfYnVmCisKKyVkZWZpbmUgb3JpZ2luYWxfZWJwCWVicCswCislZGVmaW5lIHdrKGkpCQllYnAtKFdLX05VTS0oaSkpKlNJWkVPRl9NTVdPUkQJOyBtbXdvcmQgd2tbV0tfTlVNXQorJWRlZmluZSBXS19OVU0JCTMKKyVkZWZpbmUgZ290cHRyCQl3aygwKS1TSVpFT0ZfUE9JTlRFUgk7IHZvaWQgKiBnb3RwdHIKKworCWFsaWduCTE2CisJZ2xvYmFsCUVYVE4oanNpbWRfaDJ2MV9tZXJnZWRfdXBzYW1wbGVfbW14KQorCitFWFROKGpzaW1kX2gydjFfbWVyZ2VkX3Vwc2FtcGxlX21teCk6CisJcHVzaAllYnAKKwltb3YJZWF4LGVzcAkJCQk7IGVheCA9IG9yaWdpbmFsIGVicAorCXN1Ygllc3AsIGJ5dGUgNAorCWFuZAllc3AsIGJ5dGUgKC1TSVpFT0ZfTU1XT1JEKQk7IGFsaWduIHRvIDY0IGJpdHMKKwltb3YJW2VzcF0sZWF4CisJbW92CWVicCxlc3AJCQkJOyBlYnAgPSBhbGlnbmVkIGVicAorCWxlYQllc3AsIFt3aygwKV0KKwlwdXNocGljCWVheAkJOyBtYWtlIGEgcm9vbSBmb3IgR09UIGFkZHJlc3MKKwlwdXNoCWVieAorOwlwdXNoCWVjeAkJOyBuZWVkIG5vdCBiZSBwcmVzZXJ2ZWQKKzsJcHVzaAllZHgJCTsgbmVlZCBub3QgYmUgcHJlc2VydmVkCisJcHVzaAllc2kKKwlwdXNoCWVkaQorCisJZ2V0X0dPVAllYngJCQk7IGdldCBHT1QgYWRkcmVzcworCW1vdnBpYwlQT0lOVEVSIFtnb3RwdHJdLCBlYngJOyBzYXZlIEdPVCBhZGRyZXNzCisKKwltb3YJZWN4LCBKRElNRU5TSU9OIFtvdXRwdXRfd2lkdGgoZWF4KV0JOyBjb2wKKwl0ZXN0CWVjeCxlY3gKKwlqegluZWFyIC5yZXR1cm4KKworCXB1c2gJZWN4CisKKwltb3YJZWRpLCBKU0FNUElNQUdFIFtpbnB1dF9idWYoZWF4KV0KKwltb3YJZWN4LCBKRElNRU5TSU9OIFtpbl9yb3dfZ3JvdXBfY3RyKGVheCldCisJbW92CWVzaSwgSlNBTVBBUlJBWSBbZWRpKzAqU0laRU9GX0pTQU1QQVJSQVldCisJbW92CWVieCwgSlNBTVBBUlJBWSBbZWRpKzEqU0laRU9GX0pTQU1QQVJSQVldCisJbW92CWVkeCwgSlNBTVBBUlJBWSBbZWRpKzIqU0laRU9GX0pTQU1QQVJSQVldCisJbW92CWVkaSwgSlNBTVBBUlJBWSBbb3V0cHV0X2J1ZihlYXgpXQorCW1vdgllc2ksIEpTQU1QUk9XIFtlc2krZWN4KlNJWkVPRl9KU0FNUFJPV10JCTsgaW5wdHIwCisJbW92CWVieCwgSlNBTVBST1cgW2VieCtlY3gqU0laRU9GX0pTQU1QUk9XXQkJOyBpbnB0cjEKKwltb3YJZWR4LCBKU0FNUFJPVyBbZWR4K2VjeCpTSVpFT0ZfSlNBTVBST1ddCQk7IGlucHRyMgorCW1vdgllZGksIEpTQU1QUk9XIFtlZGldCQkJCTsgb3V0cHRyCisKKwlwb3AJZWN4CQkJOyBjb2wKKworCWFsaWdueAkxNiw3CisuY29sdW1ubG9vcDoKKwltb3ZwaWMJZWF4LCBQT0lOVEVSIFtnb3RwdHJdCTsgbG9hZCBHT1QgYWRkcmVzcyAoZWF4KQorCisJbW92cSAgICAgIG1tNiwgTU1XT1JEIFtlYnhdCTsgbW02PUNiKDAxMjM0NTY3KQorCW1vdnEgICAgICBtbTcsIE1NV09SRCBbZWR4XQk7IG1tNz1DcigwMTIzNDU2NykKKworCXB4b3IgICAgICBtbTEsbW0xCQk7IG1tMT0oYWxsIDAncykKKwlwY21wZXF3ICAgbW0zLG1tMworCXBzbGx3ICAgICBtbTMsNwkJCTsgbW0zPXsweEZGODAgMHhGRjgwIDB4RkY4MCAweEZGODB9CisKKwltb3ZxICAgICAgbW00LG1tNgorCXB1bnBja2hidyBtbTYsbW0xCQk7IG1tNj1DYig0NTY3KT1DYkgKKwlwdW5wY2tsYncgbW00LG1tMQkJOyBtbTQ9Q2IoMDEyMyk9Q2JMCisJbW92cSAgICAgIG1tMCxtbTcKKwlwdW5wY2toYncgbW03LG1tMQkJOyBtbTc9Q3IoNDU2Nyk9Q3JICisJcHVucGNrbGJ3IG1tMCxtbTEJCTsgbW0wPUNyKDAxMjMpPUNyTAorCisJcGFkZHcgICAgIG1tNixtbTMKKwlwYWRkdyAgICAgbW00LG1tMworCXBhZGR3ICAgICBtbTcsbW0zCisJcGFkZHcgICAgIG1tMCxtbTMKKworCTsgKE9yaWdpbmFsKQorCTsgUiA9IFkgICAgICAgICAgICAgICAgKyAxLjQwMjAwICogQ3IKKwk7IEcgPSBZIC0gMC4zNDQxNCAqIENiIC0gMC43MTQxNCAqIENyCisJOyBCID0gWSArIDEuNzcyMDAgKiBDYgorCTsKKwk7IChUaGlzIGltcGxlbWVudGF0aW9uKQorCTsgUiA9IFkgICAgICAgICAgICAgICAgKyAwLjQwMjAwICogQ3IgKyBDcgorCTsgRyA9IFkgLSAwLjM0NDE0ICogQ2IgKyAwLjI4NTg2ICogQ3IgLSBDcgorCTsgQiA9IFkgLSAwLjIyODAwICogQ2IgKyBDYiArIENiCisKKwltb3ZxCW1tNSxtbTYJCQk7IG1tNT1DYkgKKwltb3ZxCW1tMixtbTQJCQk7IG1tMj1DYkwKKwlwYWRkdwltbTYsbW02CQkJOyBtbTY9MipDYkgKKwlwYWRkdwltbTQsbW00CQkJOyBtbTQ9MipDYkwKKwltb3ZxCW1tMSxtbTcJCQk7IG1tMT1DckgKKwltb3ZxCW1tMyxtbTAJCQk7IG1tMz1DckwKKwlwYWRkdwltbTcsbW03CQkJOyBtbTc9MipDckgKKwlwYWRkdwltbTAsbW0wCQkJOyBtbTA9MipDckwKKworCXBtdWxodwltbTYsW0dPVE9GRihlYXgsUFdfTUYwMjI4KV0JOyBtbTY9KDIqQ2JIICogLUZJWCgwLjIyODAwKSkKKwlwbXVsaHcJbW00LFtHT1RPRkYoZWF4LFBXX01GMDIyOCldCTsgbW00PSgyKkNiTCAqIC1GSVgoMC4yMjgwMCkpCisJcG11bGh3CW1tNyxbR09UT0ZGKGVheCxQV19GMDQwMildCTsgbW03PSgyKkNySCAqIEZJWCgwLjQwMjAwKSkKKwlwbXVsaHcJbW0wLFtHT1RPRkYoZWF4LFBXX0YwNDAyKV0JOyBtbTA9KDIqQ3JMICogRklYKDAuNDAyMDApKQorCisJcGFkZHcJbW02LFtHT1RPRkYoZWF4LFBXX09ORSldCisJcGFkZHcJbW00LFtHT1RPRkYoZWF4LFBXX09ORSldCisJcHNyYXcJbW02LDEJCQk7IG1tNj0oQ2JIICogLUZJWCgwLjIyODAwKSkKKwlwc3JhdwltbTQsMQkJCTsgbW00PShDYkwgKiAtRklYKDAuMjI4MDApKQorCXBhZGR3CW1tNyxbR09UT0ZGKGVheCxQV19PTkUpXQorCXBhZGR3CW1tMCxbR09UT0ZGKGVheCxQV19PTkUpXQorCXBzcmF3CW1tNywxCQkJOyBtbTc9KENySCAqIEZJWCgwLjQwMjAwKSkKKwlwc3JhdwltbTAsMQkJCTsgbW0wPShDckwgKiBGSVgoMC40MDIwMCkpCisKKwlwYWRkdwltbTYsbW01CisJcGFkZHcJbW00LG1tMgorCXBhZGR3CW1tNixtbTUJCQk7IG1tNj0oQ2JIICogRklYKDEuNzcyMDApKT0oQi1ZKUgKKwlwYWRkdwltbTQsbW0yCQkJOyBtbTQ9KENiTCAqIEZJWCgxLjc3MjAwKSk9KEItWSlMCisJcGFkZHcJbW03LG1tMQkJCTsgbW03PShDckggKiBGSVgoMS40MDIwMCkpPShSLVkpSAorCXBhZGR3CW1tMCxtbTMJCQk7IG1tMD0oQ3JMICogRklYKDEuNDAyMDApKT0oUi1ZKUwKKworCW1vdnEJTU1XT1JEIFt3aygwKV0sIG1tNgk7IHdrKDApPShCLVkpSAorCW1vdnEJTU1XT1JEIFt3aygxKV0sIG1tNwk7IHdrKDEpPShSLVkpSAorCisJbW92cSAgICAgIG1tNixtbTUKKwltb3ZxICAgICAgbW03LG1tMgorCXB1bnBja2x3ZCBtbTUsbW0xCisJcHVucGNraHdkIG1tNixtbTEKKwlwbWFkZHdkICAgbW01LFtHT1RPRkYoZWF4LFBXX01GMDM0NF9GMDI4NSldCisJcG1hZGR3ZCAgIG1tNixbR09UT0ZGKGVheCxQV19NRjAzNDRfRjAyODUpXQorCXB1bnBja2x3ZCBtbTIsbW0zCisJcHVucGNraHdkIG1tNyxtbTMKKwlwbWFkZHdkICAgbW0yLFtHT1RPRkYoZWF4LFBXX01GMDM0NF9GMDI4NSldCisJcG1hZGR3ZCAgIG1tNyxbR09UT0ZGKGVheCxQV19NRjAzNDRfRjAyODUpXQorCisJcGFkZGQgICAgIG1tNSxbR09UT0ZGKGVheCxQRF9PTkVIQUxGKV0KKwlwYWRkZCAgICAgbW02LFtHT1RPRkYoZWF4LFBEX09ORUhBTEYpXQorCXBzcmFkICAgICBtbTUsU0NBTEVCSVRTCisJcHNyYWQgICAgIG1tNixTQ0FMRUJJVFMKKwlwYWRkZCAgICAgbW0yLFtHT1RPRkYoZWF4LFBEX09ORUhBTEYpXQorCXBhZGRkICAgICBtbTcsW0dPVE9GRihlYXgsUERfT05FSEFMRildCisJcHNyYWQgICAgIG1tMixTQ0FMRUJJVFMKKwlwc3JhZCAgICAgbW03LFNDQUxFQklUUworCisJcGFja3NzZHcgIG1tNSxtbTYJOyBtbTU9Q2JIKi1GSVgoMC4zNDQpK0NySCpGSVgoMC4yODUpCisJcGFja3NzZHcgIG1tMixtbTcJOyBtbTI9Q2JMKi1GSVgoMC4zNDQpK0NyTCpGSVgoMC4yODUpCisJcHN1YncgICAgIG1tNSxtbTEJOyBtbTU9Q2JIKi1GSVgoMC4zNDQpK0NySCotRklYKDAuNzE0KT0oRy1ZKUgKKwlwc3VidyAgICAgbW0yLG1tMwk7IG1tMj1DYkwqLUZJWCgwLjM0NCkrQ3JMKi1GSVgoMC43MTQpPShHLVkpTAorCisJbW92cQlNTVdPUkQgW3drKDIpXSwgbW01CTsgd2soMik9KEctWSlICisKKwltb3YJYWwsMgkJCTsgWWN0cgorCWptcAlzaG9ydCAuWWxvb3BfMXN0CisJYWxpZ254CTE2LDcKKworLllsb29wXzJuZDoKKwltb3ZxCW1tMCwgTU1XT1JEIFt3aygxKV0JOyBtbTA9KFItWSlICisJbW92cQltbTIsIE1NV09SRCBbd2soMildCTsgbW0yPShHLVkpSAorCW1vdnEJbW00LCBNTVdPUkQgW3drKDApXQk7IG1tND0oQi1ZKUgKKwlhbGlnbngJMTYsNworCisuWWxvb3BfMXN0OgorCW1vdnEJbW03LCBNTVdPUkQgW2VzaV0JOyBtbTc9WSgwMTIzNDU2NykKKworCXBjbXBlcXcJbW02LG1tNgorCXBzcmx3CW1tNixCWVRFX0JJVAkJOyBtbTY9ezB4RkYgMHgwMCAweEZGIDB4MDAgLi59CisJcGFuZAltbTYsbW03CQkJOyBtbTY9WSgwMjQ2KT1ZRQorCXBzcmx3CW1tNyxCWVRFX0JJVAkJOyBtbTc9WSgxMzU3KT1ZTworCisJbW92cQltbTEsbW0wCQkJOyBtbTE9bW0wPShSLVkpKEwvSCkKKwltb3ZxCW1tMyxtbTIJCQk7IG1tMz1tbTI9KEctWSkoTC9IKQorCW1vdnEJbW01LG1tNAkJCTsgbW01PW1tND0oQi1ZKShML0gpCisKKwlwYWRkdyAgICAgbW0wLG1tNgkJOyBtbTA9KChSLVkpK1lFKT1SRT0oUjAgUjIgUjQgUjYpCisJcGFkZHcgICAgIG1tMSxtbTcJCTsgbW0xPSgoUi1ZKStZTyk9Uk89KFIxIFIzIFI1IFI3KQorCXBhY2t1c3diICBtbTAsbW0wCQk7IG1tMD0oUjAgUjIgUjQgUjYgKiogKiogKiogKiopCisJcGFja3Vzd2IgIG1tMSxtbTEJCTsgbW0xPShSMSBSMyBSNSBSNyAqKiAqKiAqKiAqKikKKworCXBhZGR3ICAgICBtbTIsbW02CQk7IG1tMj0oKEctWSkrWUUpPUdFPShHMCBHMiBHNCBHNikKKwlwYWRkdyAgICAgbW0zLG1tNwkJOyBtbTM9KChHLVkpK1lPKT1HTz0oRzEgRzMgRzUgRzcpCisJcGFja3Vzd2IgIG1tMixtbTIJCTsgbW0yPShHMCBHMiBHNCBHNiAqKiAqKiAqKiAqKikKKwlwYWNrdXN3YiAgbW0zLG1tMwkJOyBtbTM9KEcxIEczIEc1IEc3ICoqICoqICoqICoqKQorCisJcGFkZHcgICAgIG1tNCxtbTYJCTsgbW00PSgoQi1ZKStZRSk9QkU9KEIwIEIyIEI0IEI2KQorCXBhZGR3ICAgICBtbTUsbW03CQk7IG1tNT0oKEItWSkrWU8pPUJPPShCMSBCMyBCNSBCNykKKwlwYWNrdXN3YiAgbW00LG1tNAkJOyBtbTQ9KEIwIEIyIEI0IEI2ICoqICoqICoqICoqKQorCXBhY2t1c3diICBtbTUsbW01CQk7IG1tNT0oQjEgQjMgQjUgQjcgKiogKiogKiogKiopCisKKyVpZiBSR0JfUElYRUxTSVpFID09IDMgOyAtLS0tLS0tLS0tLS0tLS0KKworCTsgbW1BPSgwMCAwMiAwNCAwNiAqKiAqKiAqKiAqKiksIG1tQj0oMDEgMDMgMDUgMDcgKiogKiogKiogKiopCisJOyBtbUM9KDEwIDEyIDE0IDE2ICoqICoqICoqICoqKSwgbW1EPSgxMSAxMyAxNSAxNyAqKiAqKiAqKiAqKikKKwk7IG1tRT0oMjAgMjIgMjQgMjYgKiogKiogKiogKiopLCBtbUY9KDIxIDIzIDI1IDI3ICoqICoqICoqICoqKQorCTsgbW1HPSgqKiAqKiAqKiAqKiAqKiAqKiAqKiAqKiksIG1tSD0oKiogKiogKiogKiogKiogKiogKiogKiopCisKKwlwdW5wY2tsYncgbW1BLG1tQwkJOyBtbUE9KDAwIDEwIDAyIDEyIDA0IDE0IDA2IDE2KQorCXB1bnBja2xidyBtbUUsbW1CCQk7IG1tRT0oMjAgMDEgMjIgMDMgMjQgMDUgMjYgMDcpCisJcHVucGNrbGJ3IG1tRCxtbUYJCTsgbW1EPSgxMSAyMSAxMyAyMyAxNSAyNSAxNyAyNykKKworCW1vdnEgICAgICBtbUcsbW1BCisJbW92cSAgICAgIG1tSCxtbUEKKwlwdW5wY2tsd2QgbW1BLG1tRQkJOyBtbUE9KDAwIDEwIDIwIDAxIDAyIDEyIDIyIDAzKQorCXB1bnBja2h3ZCBtbUcsbW1FCQk7IG1tRz0oMDQgMTQgMjQgMDUgMDYgMTYgMjYgMDcpCisKKwlwc3JscSAgICAgbW1ILDIqQllURV9CSVQJOyBtbUg9KDAyIDEyIDA0IDE0IDA2IDE2IC0tIC0tKQorCXBzcmxxICAgICBtbUUsMipCWVRFX0JJVAk7IG1tRT0oMjIgMDMgMjQgMDUgMjYgMDcgLS0gLS0pCisKKwltb3ZxICAgICAgbW1DLG1tRAorCW1vdnEgICAgICBtbUIsbW1ECisJcHVucGNrbHdkIG1tRCxtbUgJCTsgbW1EPSgxMSAyMSAwMiAxMiAxMyAyMyAwNCAxNCkKKwlwdW5wY2tod2QgbW1DLG1tSAkJOyBtbUM9KDE1IDI1IDA2IDE2IDE3IDI3IC0tIC0tKQorCisJcHNybHEgICAgIG1tQiwyKkJZVEVfQklUCTsgbW1CPSgxMyAyMyAxNSAyNSAxNyAyNyAtLSAtLSkKKworCW1vdnEgICAgICBtbUYsbW1FCisJcHVucGNrbHdkIG1tRSxtbUIJCTsgbW1FPSgyMiAwMyAxMyAyMyAyNCAwNSAxNSAyNSkKKwlwdW5wY2tod2QgbW1GLG1tQgkJOyBtbUY9KDI2IDA3IDE3IDI3IC0tIC0tIC0tIC0tKQorCisJcHVucGNrbGRxIG1tQSxtbUQJCTsgbW1BPSgwMCAxMCAyMCAwMSAxMSAyMSAwMiAxMikKKwlwdW5wY2tsZHEgbW1FLG1tRwkJOyBtbUU9KDIyIDAzIDEzIDIzIDA0IDE0IDI0IDA1KQorCXB1bnBja2xkcSBtbUMsbW1GCQk7IG1tQz0oMTUgMjUgMDYgMTYgMjYgMDcgMTcgMjcpCisKKwljbXAJZWN4LCBieXRlIFNJWkVPRl9NTVdPUkQKKwlqYglzaG9ydCAuY29sdW1uX3N0MTYKKworCW1vdnEJTU1XT1JEIFtlZGkrMCpTSVpFT0ZfTU1XT1JEXSwgbW1BCisJbW92cQlNTVdPUkQgW2VkaSsxKlNJWkVPRl9NTVdPUkRdLCBtbUUKKwltb3ZxCU1NV09SRCBbZWRpKzIqU0laRU9GX01NV09SRF0sIG1tQworCisJc3ViCWVjeCwgYnl0ZSBTSVpFT0ZfTU1XT1JECisJanoJbmVhciAuZW5kY29sdW1uCisKKwlhZGQJZWRpLCBieXRlIFJHQl9QSVhFTFNJWkUqU0laRU9GX01NV09SRAk7IG91dHB0cgorCWFkZAllc2ksIGJ5dGUgU0laRU9GX01NV09SRAkJCTsgaW5wdHIwCisJZGVjCWFsCQkJOyBZY3RyCisJam56CW5lYXIgLllsb29wXzJuZAorCisJYWRkCWVieCwgYnl0ZSBTSVpFT0ZfTU1XT1JECQkJOyBpbnB0cjEKKwlhZGQJZWR4LCBieXRlIFNJWkVPRl9NTVdPUkQJCQk7IGlucHRyMgorCWptcAluZWFyIC5jb2x1bW5sb29wCisJYWxpZ254CTE2LDcKKworLmNvbHVtbl9zdDE2OgorCWxlYQllY3gsIFtlY3grZWN4KjJdCTsgaW11bCBlY3gsIFJHQl9QSVhFTFNJWkUKKwljbXAJZWN4LCBieXRlIDIqU0laRU9GX01NV09SRAorCWpiCXNob3J0IC5jb2x1bW5fc3Q4CisJbW92cQlNTVdPUkQgW2VkaSswKlNJWkVPRl9NTVdPUkRdLCBtbUEKKwltb3ZxCU1NV09SRCBbZWRpKzEqU0laRU9GX01NV09SRF0sIG1tRQorCW1vdnEJbW1BLG1tQworCXN1YgllY3gsIGJ5dGUgMipTSVpFT0ZfTU1XT1JECisJYWRkCWVkaSwgYnl0ZSAyKlNJWkVPRl9NTVdPUkQKKwlqbXAJc2hvcnQgLmNvbHVtbl9zdDQKKy5jb2x1bW5fc3Q4OgorCWNtcAllY3gsIGJ5dGUgU0laRU9GX01NV09SRAorCWpiCXNob3J0IC5jb2x1bW5fc3Q0CisJbW92cQlNTVdPUkQgW2VkaSswKlNJWkVPRl9NTVdPUkRdLCBtbUEKKwltb3ZxCW1tQSxtbUUKKwlzdWIJZWN4LCBieXRlIFNJWkVPRl9NTVdPUkQKKwlhZGQJZWRpLCBieXRlIFNJWkVPRl9NTVdPUkQKKy5jb2x1bW5fc3Q0OgorCW1vdmQJZWF4LG1tQQorCWNtcAllY3gsIGJ5dGUgU0laRU9GX0RXT1JECisJamIJc2hvcnQgLmNvbHVtbl9zdDIKKwltb3YJRFdPUkQgW2VkaSswKlNJWkVPRl9EV09SRF0sIGVheAorCXBzcmxxCW1tQSxEV09SRF9CSVQKKwltb3ZkCWVheCxtbUEKKwlzdWIJZWN4LCBieXRlIFNJWkVPRl9EV09SRAorCWFkZAllZGksIGJ5dGUgU0laRU9GX0RXT1JECisuY29sdW1uX3N0MjoKKwljbXAJZWN4LCBieXRlIFNJWkVPRl9XT1JECisJamIJc2hvcnQgLmNvbHVtbl9zdDEKKwltb3YJV09SRCBbZWRpKzAqU0laRU9GX1dPUkRdLCBheAorCXNocgllYXgsV09SRF9CSVQKKwlzdWIJZWN4LCBieXRlIFNJWkVPRl9XT1JECisJYWRkCWVkaSwgYnl0ZSBTSVpFT0ZfV09SRAorLmNvbHVtbl9zdDE6CisJY21wCWVjeCwgYnl0ZSBTSVpFT0ZfQllURQorCWpiCXNob3J0IC5lbmRjb2x1bW4KKwltb3YJQllURSBbZWRpKzAqU0laRU9GX0JZVEVdLCBhbAorCislZWxzZSA7IFJHQl9QSVhFTFNJWkUgPT0gNCA7IC0tLS0tLS0tLS0tCisKKyVpZmRlZiBSR0JYX0ZJTExFUl8wWEZGCisJcGNtcGVxYiAgIG1tNixtbTYJCTsgbW02PShYMCBYMiBYNCBYNiAqKiAqKiAqKiAqKikKKwlwY21wZXFiICAgbW03LG1tNwkJOyBtbTc9KFgxIFgzIFg1IFg3ICoqICoqICoqICoqKQorJWVsc2UKKwlweG9yICAgICAgbW02LG1tNgkJOyBtbTY9KFgwIFgyIFg0IFg2ICoqICoqICoqICoqKQorCXB4b3IgICAgICBtbTcsbW03CQk7IG1tNz0oWDEgWDMgWDUgWDcgKiogKiogKiogKiopCislZW5kaWYKKwk7IG1tQT0oMDAgMDIgMDQgMDYgKiogKiogKiogKiopLCBtbUI9KDAxIDAzIDA1IDA3ICoqICoqICoqICoqKQorCTsgbW1DPSgxMCAxMiAxNCAxNiAqKiAqKiAqKiAqKiksIG1tRD0oMTEgMTMgMTUgMTcgKiogKiogKiogKiopCisJOyBtbUU9KDIwIDIyIDI0IDI2ICoqICoqICoqICoqKSwgbW1GPSgyMSAyMyAyNSAyNyAqKiAqKiAqKiAqKikKKwk7IG1tRz0oMzAgMzIgMzQgMzYgKiogKiogKiogKiopLCBtbUg9KDMxIDMzIDM1IDM3ICoqICoqICoqICoqKQorCisJcHVucGNrbGJ3IG1tQSxtbUMJCTsgbW1BPSgwMCAxMCAwMiAxMiAwNCAxNCAwNiAxNikKKwlwdW5wY2tsYncgbW1FLG1tRwkJOyBtbUU9KDIwIDMwIDIyIDMyIDI0IDM0IDI2IDM2KQorCXB1bnBja2xidyBtbUIsbW1ECQk7IG1tQj0oMDEgMTEgMDMgMTMgMDUgMTUgMDcgMTcpCisJcHVucGNrbGJ3IG1tRixtbUgJCTsgbW1GPSgyMSAzMSAyMyAzMyAyNSAzNSAyNyAzNykKKworCW1vdnEgICAgICBtbUMsbW1BCisJcHVucGNrbHdkIG1tQSxtbUUJCTsgbW1BPSgwMCAxMCAyMCAzMCAwMiAxMiAyMiAzMikKKwlwdW5wY2tod2QgbW1DLG1tRQkJOyBtbUM9KDA0IDE0IDI0IDM0IDA2IDE2IDI2IDM2KQorCW1vdnEgICAgICBtbUcsbW1CCisJcHVucGNrbHdkIG1tQixtbUYJCTsgbW1CPSgwMSAxMSAyMSAzMSAwMyAxMyAyMyAzMykKKwlwdW5wY2tod2QgbW1HLG1tRgkJOyBtbUc9KDA1IDE1IDI1IDM1IDA3IDE3IDI3IDM3KQorCisJbW92cSAgICAgIG1tRCxtbUEKKwlwdW5wY2tsZHEgbW1BLG1tQgkJOyBtbUE9KDAwIDEwIDIwIDMwIDAxIDExIDIxIDMxKQorCXB1bnBja2hkcSBtbUQsbW1CCQk7IG1tRD0oMDIgMTIgMjIgMzIgMDMgMTMgMjMgMzMpCisJbW92cSAgICAgIG1tSCxtbUMKKwlwdW5wY2tsZHEgbW1DLG1tRwkJOyBtbUM9KDA0IDE0IDI0IDM0IDA1IDE1IDI1IDM1KQorCXB1bnBja2hkcSBtbUgsbW1HCQk7IG1tSD0oMDYgMTYgMjYgMzYgMDcgMTcgMjcgMzcpCisKKwljbXAJZWN4LCBieXRlIFNJWkVPRl9NTVdPUkQKKwlqYglzaG9ydCAuY29sdW1uX3N0MTYKKworCW1vdnEJTU1XT1JEIFtlZGkrMCpTSVpFT0ZfTU1XT1JEXSwgbW1BCisJbW92cQlNTVdPUkQgW2VkaSsxKlNJWkVPRl9NTVdPUkRdLCBtbUQKKwltb3ZxCU1NV09SRCBbZWRpKzIqU0laRU9GX01NV09SRF0sIG1tQworCW1vdnEJTU1XT1JEIFtlZGkrMypTSVpFT0ZfTU1XT1JEXSwgbW1ICisKKwlzdWIJZWN4LCBieXRlIFNJWkVPRl9NTVdPUkQKKwlqeglzaG9ydCAuZW5kY29sdW1uCisKKwlhZGQJZWRpLCBieXRlIFJHQl9QSVhFTFNJWkUqU0laRU9GX01NV09SRAk7IG91dHB0cgorCWFkZAllc2ksIGJ5dGUgU0laRU9GX01NV09SRAkJCTsgaW5wdHIwCisJZGVjCWFsCQkJOyBZY3RyCisJam56CW5lYXIgLllsb29wXzJuZAorCisJYWRkCWVieCwgYnl0ZSBTSVpFT0ZfTU1XT1JECQkJOyBpbnB0cjEKKwlhZGQJZWR4LCBieXRlIFNJWkVPRl9NTVdPUkQJCQk7IGlucHRyMgorCWptcAluZWFyIC5jb2x1bW5sb29wCisJYWxpZ254CTE2LDcKKworLmNvbHVtbl9zdDE2OgorCWNtcAllY3gsIGJ5dGUgU0laRU9GX01NV09SRC8yCisJamIJc2hvcnQgLmNvbHVtbl9zdDgKKwltb3ZxCU1NV09SRCBbZWRpKzAqU0laRU9GX01NV09SRF0sIG1tQQorCW1vdnEJTU1XT1JEIFtlZGkrMSpTSVpFT0ZfTU1XT1JEXSwgbW1ECisJbW92cQltbUEsbW1DCisJbW92cQltbUQsbW1ICisJc3ViCWVjeCwgYnl0ZSBTSVpFT0ZfTU1XT1JELzIKKwlhZGQJZWRpLCBieXRlIDIqU0laRU9GX01NV09SRAorLmNvbHVtbl9zdDg6CisJY21wCWVjeCwgYnl0ZSBTSVpFT0ZfTU1XT1JELzQKKwlqYglzaG9ydCAuY29sdW1uX3N0NAorCW1vdnEJTU1XT1JEIFtlZGkrMCpTSVpFT0ZfTU1XT1JEXSwgbW1BCisJbW92cQltbUEsbW1ECisJc3ViCWVjeCwgYnl0ZSBTSVpFT0ZfTU1XT1JELzQKKwlhZGQJZWRpLCBieXRlIDEqU0laRU9GX01NV09SRAorLmNvbHVtbl9zdDQ6CisJY21wCWVjeCwgYnl0ZSBTSVpFT0ZfTU1XT1JELzgKKwlqYglzaG9ydCAuZW5kY29sdW1uCisJbW92ZAlEV09SRCBbZWRpKzAqU0laRU9GX0RXT1JEXSwgbW1BCisKKyVlbmRpZiA7IFJHQl9QSVhFTFNJWkUgOyAtLS0tLS0tLS0tLS0tLS0KKworLmVuZGNvbHVtbjoKKwllbW1zCQk7IGVtcHR5IE1NWCBzdGF0ZQorCisucmV0dXJuOgorCXBvcAllZGkKKwlwb3AJZXNpCis7CXBvcAllZHgJCTsgbmVlZCBub3QgYmUgcHJlc2VydmVkCis7CXBvcAllY3gJCTsgbmVlZCBub3QgYmUgcHJlc2VydmVkCisJcG9wCWVieAorCW1vdgllc3AsZWJwCQk7IGVzcCA8LSBhbGlnbmVkIGVicAorCXBvcAllc3AJCTsgZXNwIDwtIG9yaWdpbmFsIGVicAorCXBvcAllYnAKKwlyZXQKKworOyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorOworOyBVcHNhbXBsZSBhbmQgY29sb3IgY29udmVydCBmb3IgdGhlIGNhc2Ugb2YgMjoxIGhvcml6b250YWwgYW5kIDI6MSB2ZXJ0aWNhbC4KKzsKKzsgR0xPQkFMKHZvaWQpCis7IGpzaW1kX2gydjJfbWVyZ2VkX3Vwc2FtcGxlX21teCAoSkRJTUVOU0lPTiBvdXRwdXRfd2lkdGgsCis7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSlNBTVBJTUFHRSBpbnB1dF9idWYsCis7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSkRJTUVOU0lPTiBpbl9yb3dfZ3JvdXBfY3RyLAorOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEpTQU1QQVJSQVkgb3V0cHV0X2J1Zik7Cis7CisKKyVkZWZpbmUgb3V0cHV0X3dpZHRoKGIpCShiKSs4CQkJOyBKRElNRU5TSU9OIG91dHB1dF93aWR0aAorJWRlZmluZSBpbnB1dF9idWYoYikJCShiKSsxMgkJOyBKU0FNUElNQUdFIGlucHV0X2J1ZgorJWRlZmluZSBpbl9yb3dfZ3JvdXBfY3RyKGIpCShiKSsxNgkJOyBKRElNRU5TSU9OIGluX3Jvd19ncm91cF9jdHIKKyVkZWZpbmUgb3V0cHV0X2J1ZihiKQkJKGIpKzIwCQk7IEpTQU1QQVJSQVkgb3V0cHV0X2J1ZgorCisJYWxpZ24JMTYKKwlnbG9iYWwJRVhUTihqc2ltZF9oMnYyX21lcmdlZF91cHNhbXBsZV9tbXgpCisKK0VYVE4oanNpbWRfaDJ2Ml9tZXJnZWRfdXBzYW1wbGVfbW14KToKKwlwdXNoCWVicAorCW1vdgllYnAsZXNwCisJcHVzaAllYngKKzsJcHVzaAllY3gJCTsgbmVlZCBub3QgYmUgcHJlc2VydmVkCis7CXB1c2gJZWR4CQk7IG5lZWQgbm90IGJlIHByZXNlcnZlZAorCXB1c2gJZXNpCisJcHVzaAllZGkKKworCW1vdgllYXgsIEpESU1FTlNJT04gW291dHB1dF93aWR0aChlYnApXQorCisJbW92CWVkaSwgSlNBTVBJTUFHRSBbaW5wdXRfYnVmKGVicCldCisJbW92CWVjeCwgSkRJTUVOU0lPTiBbaW5fcm93X2dyb3VwX2N0cihlYnApXQorCW1vdgllc2ksIEpTQU1QQVJSQVkgW2VkaSswKlNJWkVPRl9KU0FNUEFSUkFZXQorCW1vdgllYngsIEpTQU1QQVJSQVkgW2VkaSsxKlNJWkVPRl9KU0FNUEFSUkFZXQorCW1vdgllZHgsIEpTQU1QQVJSQVkgW2VkaSsyKlNJWkVPRl9KU0FNUEFSUkFZXQorCW1vdgllZGksIEpTQU1QQVJSQVkgW291dHB1dF9idWYoZWJwKV0KKwlsZWEJZXNpLCBbZXNpK2VjeCpTSVpFT0ZfSlNBTVBST1ddCisKKwlwdXNoCWVkeAkJCTsgaW5wdHIyCisJcHVzaAllYngJCQk7IGlucHRyMQorCXB1c2gJZXNpCQkJOyBpbnB0cjAwCisJbW92CWVieCxlc3AKKworCXB1c2gJZWRpCQkJOyBvdXRwdXRfYnVmIChvdXRwdHIwKQorCXB1c2gJZWN4CQkJOyBpbl9yb3dfZ3JvdXBfY3RyCisJcHVzaAllYngJCQk7IGlucHV0X2J1ZgorCXB1c2gJZWF4CQkJOyBvdXRwdXRfd2lkdGgKKworCWNhbGwJbmVhciBFWFROKGpzaW1kX2gydjFfbWVyZ2VkX3Vwc2FtcGxlX21teCkKKworCWFkZAllc2ksIGJ5dGUgU0laRU9GX0pTQU1QUk9XCTsgaW5wdHIwMQorCWFkZAllZGksIGJ5dGUgU0laRU9GX0pTQU1QUk9XCTsgb3V0cHRyMQorCW1vdglQT0lOVEVSIFtlYngrMCpTSVpFT0ZfUE9JTlRFUl0sIGVzaQorCW1vdglQT0lOVEVSIFtlYngtMSpTSVpFT0ZfUE9JTlRFUl0sIGVkaQorCisJY2FsbAluZWFyIEVYVE4oanNpbWRfaDJ2MV9tZXJnZWRfdXBzYW1wbGVfbW14KQorCisJYWRkCWVzcCwgYnl0ZSA3KlNJWkVPRl9EV09SRAorCisJcG9wCWVkaQorCXBvcAllc2kKKzsJcG9wCWVkeAkJOyBuZWVkIG5vdCBiZSBwcmVzZXJ2ZWQKKzsJcG9wCWVjeAkJOyBuZWVkIG5vdCBiZSBwcmVzZXJ2ZWQKKwlwb3AJZWJ4CisJcG9wCWVicAorCXJldAorCis7IEZvciBzb21lIHJlYXNvbiwgdGhlIE9TIFggbGlua2VyIGRvZXMgbm90IGhvbm9yIHRoZSByZXF1ZXN0IHRvIGFsaWduIHRoZQorOyBzZWdtZW50IHVubGVzcyB3ZSBkbyB0aGlzLgorCWFsaWduCTE2CmRpZmYgLS1naXQgYS9zaW1kL2pkbXJnc3MyLTY0LmFzbSBiL3NpbWQvamRtcmdzczItNjQuYXNtCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjEyMWJiODIKLS0tIC9kZXYvbnVsbAorKysgYi9zaW1kL2pkbXJnc3MyLTY0LmFzbQpAQCAtMCwwICsxLDU4NCBAQAorOworOyBqZG1yZ3NzMi02NC5hc20gLSBtZXJnZWQgdXBzYW1wbGluZy9jb2xvciBjb252ZXJzaW9uICg2NC1iaXQgU1NFMikKKzsKKzsgQ29weXJpZ2h0IDIwMDkgUGllcnJlIE9zc21hbiA8b3NzbWFuQGNlbmRpby5zZT4gZm9yIENlbmRpbyBBQgorOyBDb3B5cmlnaHQgMjAwOSBELiBSLiBDb21tYW5kZXIKKzsKKzsgQmFzZWQgb24KKzsgeDg2IFNJTUQgZXh0ZW5zaW9uIGZvciBJSkcgSlBFRyBsaWJyYXJ5Cis7IENvcHlyaWdodCAoQykgMTk5OS0yMDA2LCBNSVlBU0FLQSBNYXNhcnUuCis7IEZvciBjb25kaXRpb25zIG9mIGRpc3RyaWJ1dGlvbiBhbmQgdXNlLCBzZWUgY29weXJpZ2h0IG5vdGljZSBpbiBqc2ltZGV4dC5pbmMKKzsKKzsgVGhpcyBmaWxlIHNob3VsZCBiZSBhc3NlbWJsZWQgd2l0aCBOQVNNIChOZXR3aWRlIEFzc2VtYmxlciksCis7IGNhbiAqbm90KiBiZSBhc3NlbWJsZWQgd2l0aCBNaWNyb3NvZnQncyBNQVNNIG9yIGFueSBjb21wYXRpYmxlCis7IGFzc2VtYmxlciAoaW5jbHVkaW5nIEJvcmxhbmQncyBUdXJibyBBc3NlbWJsZXIpLgorOyBOQVNNIGlzIGF2YWlsYWJsZSBmcm9tIGh0dHA6Ly9uYXNtLnNvdXJjZWZvcmdlLm5ldC8gZm9yCis7IGh0dHA6Ly9zb3VyY2Vmb3JnZS5uZXQvcHJvamVjdC9zaG93ZmlsZXMucGhwP2dyb3VwX2lkPTYyMDgKKzsKKzsgW1RBQjhdCisKKyVpbmNsdWRlICJqY29sc2FtcC5pbmMiCisJCQkJCis7IC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisJU0VDVElPTglTRUdfVEVYVAorCUJJVFMJNjQKKzsKKzsgVXBzYW1wbGUgYW5kIGNvbG9yIGNvbnZlcnQgZm9yIHRoZSBjYXNlIG9mIDI6MSBob3Jpem9udGFsIGFuZCAxOjEgdmVydGljYWwuCis7Cis7IEdMT0JBTCh2b2lkKQorOyBqc2ltZF9oMnYxX21lcmdlZF91cHNhbXBsZV9zc2UyIChKRElNRU5TSU9OIG91dHB1dF93aWR0aCwKKzsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSlNBTVBJTUFHRSBpbnB1dF9idWYsCis7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEpESU1FTlNJT04gaW5fcm93X2dyb3VwX2N0ciwKKzsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSlNBTVBBUlJBWSBvdXRwdXRfYnVmKTsKKzsKKworOyByMTAgPSBKRElNRU5TSU9OIG91dHB1dF93aWR0aAorOyByMTEgPSBKU0FNUElNQUdFIGlucHV0X2J1ZgorOyByMTIgPSBKRElNRU5TSU9OIGluX3Jvd19ncm91cF9jdHIKKzsgcjEzID0gSlNBTVBBUlJBWSBvdXRwdXRfYnVmCisKKyVkZWZpbmUgd2soaSkJCXJicC0oV0tfTlVNLShpKSkqU0laRU9GX1hNTVdPUkQJOyB4bW13b3JkIHdrW1dLX05VTV0KKyVkZWZpbmUgV0tfTlVNCQkzCisKKwlhbGlnbgkxNgorCWdsb2JhbAlFWFROKGpzaW1kX2gydjFfbWVyZ2VkX3Vwc2FtcGxlX3NzZTIpCisKK0VYVE4oanNpbWRfaDJ2MV9tZXJnZWRfdXBzYW1wbGVfc3NlMik6CisJcHVzaAlyYnAKKwltb3YJcmF4LHJzcAkJCQk7IHJheCA9IG9yaWdpbmFsIHJicAorCXN1Yglyc3AsIGJ5dGUgNAorCWFuZAlyc3AsIGJ5dGUgKC1TSVpFT0ZfWE1NV09SRCkJOyBhbGlnbiB0byAxMjggYml0cworCW1vdglbcnNwXSxyYXgKKwltb3YJcmJwLHJzcAkJCQk7IHJicCA9IGFsaWduZWQgcmJwCisJbGVhCXJzcCwgW3drKDApXQorCWNvbGxlY3RfYXJncworCXB1c2gJcmJ4CisKKwltb3YJcmN4LCByMTAJOyBjb2wKKwl0ZXN0CXJjeCxyY3gKKwlqegluZWFyIC5yZXR1cm4KKworCXB1c2gJcmN4CisKKwltb3YJcmRpLCByMTEKKwltb3YJcmN4LCByMTIKKwltb3YJcnNpLCBKU0FNUEFSUkFZIFtyZGkrMCpTSVpFT0ZfSlNBTVBBUlJBWV0KKwltb3YJcmJ4LCBKU0FNUEFSUkFZIFtyZGkrMSpTSVpFT0ZfSlNBTVBBUlJBWV0KKwltb3YJcmR4LCBKU0FNUEFSUkFZIFtyZGkrMipTSVpFT0ZfSlNBTVBBUlJBWV0KKwltb3YJcmRpLCByMTMKKwltb3YJcnNpLCBKU0FNUFJPVyBbcnNpK3JjeCpTSVpFT0ZfSlNBTVBST1ddCQk7IGlucHRyMAorCW1vdglyYngsIEpTQU1QUk9XIFtyYngrcmN4KlNJWkVPRl9KU0FNUFJPV10JCTsgaW5wdHIxCisJbW92CXJkeCwgSlNBTVBST1cgW3JkeCtyY3gqU0laRU9GX0pTQU1QUk9XXQkJOyBpbnB0cjIKKwltb3YJcmRpLCBKU0FNUFJPVyBbcmRpXQkJCQk7IG91dHB0cgorCisJcG9wCXJjeAkJCTsgY29sCisKKy5jb2x1bW5sb29wOgorCisJbW92ZHFhICAgIHhtbTYsIFhNTVdPUkQgW3JieF0JOyB4bW02PUNiKDAxMjM0NTY3ODlBQkNERUYpCisJbW92ZHFhICAgIHhtbTcsIFhNTVdPUkQgW3JkeF0JOyB4bW03PUNyKDAxMjM0NTY3ODlBQkNERUYpCisKKwlweG9yICAgICAgeG1tMSx4bW0xCQk7IHhtbTE9KGFsbCAwJ3MpCisJcGNtcGVxdyAgIHhtbTMseG1tMworCXBzbGx3ICAgICB4bW0zLDcJCTsgeG1tMz17MHhGRjgwIDB4RkY4MCAweEZGODAgMHhGRjgwIC4ufQorCisJbW92ZHFhICAgIHhtbTQseG1tNgorCXB1bnBja2hidyB4bW02LHhtbTEJCTsgeG1tNj1DYig4OUFCQ0RFRik9Q2JICisJcHVucGNrbGJ3IHhtbTQseG1tMQkJOyB4bW00PUNiKDAxMjM0NTY3KT1DYkwKKwltb3ZkcWEgICAgeG1tMCx4bW03CisJcHVucGNraGJ3IHhtbTcseG1tMQkJOyB4bW03PUNyKDg5QUJDREVGKT1DckgKKwlwdW5wY2tsYncgeG1tMCx4bW0xCQk7IHhtbTA9Q3IoMDEyMzQ1NjcpPUNyTAorCisJcGFkZHcgICAgIHhtbTYseG1tMworCXBhZGR3ICAgICB4bW00LHhtbTMKKwlwYWRkdyAgICAgeG1tNyx4bW0zCisJcGFkZHcgICAgIHhtbTAseG1tMworCisJOyAoT3JpZ2luYWwpCisJOyBSID0gWSAgICAgICAgICAgICAgICArIDEuNDAyMDAgKiBDcgorCTsgRyA9IFkgLSAwLjM0NDE0ICogQ2IgLSAwLjcxNDE0ICogQ3IKKwk7IEIgPSBZICsgMS43NzIwMCAqIENiCisJOworCTsgKFRoaXMgaW1wbGVtZW50YXRpb24pCisJOyBSID0gWSAgICAgICAgICAgICAgICArIDAuNDAyMDAgKiBDciArIENyCisJOyBHID0gWSAtIDAuMzQ0MTQgKiBDYiArIDAuMjg1ODYgKiBDciAtIENyCisJOyBCID0gWSAtIDAuMjI4MDAgKiBDYiArIENiICsgQ2IKKworCW1vdmRxYQl4bW01LHhtbTYJCTsgeG1tNT1DYkgKKwltb3ZkcWEJeG1tMix4bW00CQk7IHhtbTI9Q2JMCisJcGFkZHcJeG1tNix4bW02CQk7IHhtbTY9MipDYkgKKwlwYWRkdwl4bW00LHhtbTQJCTsgeG1tND0yKkNiTAorCW1vdmRxYQl4bW0xLHhtbTcJCTsgeG1tMT1DckgKKwltb3ZkcWEJeG1tMyx4bW0wCQk7IHhtbTM9Q3JMCisJcGFkZHcJeG1tNyx4bW03CQk7IHhtbTc9MipDckgKKwlwYWRkdwl4bW0wLHhtbTAJCTsgeG1tMD0yKkNyTAorCisJcG11bGh3CXhtbTYsW3JlbCBQV19NRjAyMjhdCTsgeG1tNj0oMipDYkggKiAtRklYKDAuMjI4MDApKQorCXBtdWxodwl4bW00LFtyZWwgUFdfTUYwMjI4XQk7IHhtbTQ9KDIqQ2JMICogLUZJWCgwLjIyODAwKSkKKwlwbXVsaHcJeG1tNyxbcmVsIFBXX0YwNDAyXQk7IHhtbTc9KDIqQ3JIICogRklYKDAuNDAyMDApKQorCXBtdWxodwl4bW0wLFtyZWwgUFdfRjA0MDJdCTsgeG1tMD0oMipDckwgKiBGSVgoMC40MDIwMCkpCisKKwlwYWRkdwl4bW02LFtyZWwgUFdfT05FXQorCXBhZGR3CXhtbTQsW3JlbCBQV19PTkVdCisJcHNyYXcJeG1tNiwxCQkJOyB4bW02PShDYkggKiAtRklYKDAuMjI4MDApKQorCXBzcmF3CXhtbTQsMQkJCTsgeG1tND0oQ2JMICogLUZJWCgwLjIyODAwKSkKKwlwYWRkdwl4bW03LFtyZWwgUFdfT05FXQorCXBhZGR3CXhtbTAsW3JlbCBQV19PTkVdCisJcHNyYXcJeG1tNywxCQkJOyB4bW03PShDckggKiBGSVgoMC40MDIwMCkpCisJcHNyYXcJeG1tMCwxCQkJOyB4bW0wPShDckwgKiBGSVgoMC40MDIwMCkpCisKKwlwYWRkdwl4bW02LHhtbTUKKwlwYWRkdwl4bW00LHhtbTIKKwlwYWRkdwl4bW02LHhtbTUJCTsgeG1tNj0oQ2JIICogRklYKDEuNzcyMDApKT0oQi1ZKUgKKwlwYWRkdwl4bW00LHhtbTIJCTsgeG1tND0oQ2JMICogRklYKDEuNzcyMDApKT0oQi1ZKUwKKwlwYWRkdwl4bW03LHhtbTEJCTsgeG1tNz0oQ3JIICogRklYKDEuNDAyMDApKT0oUi1ZKUgKKwlwYWRkdwl4bW0wLHhtbTMJCTsgeG1tMD0oQ3JMICogRklYKDEuNDAyMDApKT0oUi1ZKUwKKworCW1vdmRxYQlYTU1XT1JEIFt3aygwKV0sIHhtbTYJOyB3aygwKT0oQi1ZKUgKKwltb3ZkcWEJWE1NV09SRCBbd2soMSldLCB4bW03CTsgd2soMSk9KFItWSlICisKKwltb3ZkcWEgICAgeG1tNix4bW01CisJbW92ZHFhICAgIHhtbTcseG1tMgorCXB1bnBja2x3ZCB4bW01LHhtbTEKKwlwdW5wY2tod2QgeG1tNix4bW0xCisJcG1hZGR3ZCAgIHhtbTUsW3JlbCBQV19NRjAzNDRfRjAyODVdCisJcG1hZGR3ZCAgIHhtbTYsW3JlbCBQV19NRjAzNDRfRjAyODVdCisJcHVucGNrbHdkIHhtbTIseG1tMworCXB1bnBja2h3ZCB4bW03LHhtbTMKKwlwbWFkZHdkICAgeG1tMixbcmVsIFBXX01GMDM0NF9GMDI4NV0KKwlwbWFkZHdkICAgeG1tNyxbcmVsIFBXX01GMDM0NF9GMDI4NV0KKworCXBhZGRkICAgICB4bW01LFtyZWwgUERfT05FSEFMRl0KKwlwYWRkZCAgICAgeG1tNixbcmVsIFBEX09ORUhBTEZdCisJcHNyYWQgICAgIHhtbTUsU0NBTEVCSVRTCisJcHNyYWQgICAgIHhtbTYsU0NBTEVCSVRTCisJcGFkZGQgICAgIHhtbTIsW3JlbCBQRF9PTkVIQUxGXQorCXBhZGRkICAgICB4bW03LFtyZWwgUERfT05FSEFMRl0KKwlwc3JhZCAgICAgeG1tMixTQ0FMRUJJVFMKKwlwc3JhZCAgICAgeG1tNyxTQ0FMRUJJVFMKKworCXBhY2tzc2R3ICB4bW01LHhtbTYJOyB4bW01PUNiSCotRklYKDAuMzQ0KStDckgqRklYKDAuMjg1KQorCXBhY2tzc2R3ICB4bW0yLHhtbTcJOyB4bW0yPUNiTCotRklYKDAuMzQ0KStDckwqRklYKDAuMjg1KQorCXBzdWJ3ICAgICB4bW01LHhtbTEJOyB4bW01PUNiSCotRklYKDAuMzQ0KStDckgqLUZJWCgwLjcxNCk9KEctWSlICisJcHN1YncgICAgIHhtbTIseG1tMwk7IHhtbTI9Q2JMKi1GSVgoMC4zNDQpK0NyTCotRklYKDAuNzE0KT0oRy1ZKUwKKworCW1vdmRxYQlYTU1XT1JEIFt3aygyKV0sIHhtbTUJOyB3aygyKT0oRy1ZKUgKKworCW1vdglhbCwyCQkJOyBZY3RyCisJam1wCXNob3J0IC5ZbG9vcF8xc3QKKworLllsb29wXzJuZDoKKwltb3ZkcWEJeG1tMCwgWE1NV09SRCBbd2soMSldCTsgeG1tMD0oUi1ZKUgKKwltb3ZkcWEJeG1tMiwgWE1NV09SRCBbd2soMildCTsgeG1tMj0oRy1ZKUgKKwltb3ZkcWEJeG1tNCwgWE1NV09SRCBbd2soMCldCTsgeG1tND0oQi1ZKUgKKworLllsb29wXzFzdDoKKwltb3ZkcWEJeG1tNywgWE1NV09SRCBbcnNpXQk7IHhtbTc9WSgwMTIzNDU2Nzg5QUJDREVGKQorCisJcGNtcGVxdwl4bW02LHhtbTYKKwlwc3Jsdwl4bW02LEJZVEVfQklUCQk7IHhtbTY9ezB4RkYgMHgwMCAweEZGIDB4MDAgLi59CisJcGFuZAl4bW02LHhtbTcJCTsgeG1tNj1ZKDAyNDY4QUNFKT1ZRQorCXBzcmx3CXhtbTcsQllURV9CSVQJCTsgeG1tNz1ZKDEzNTc5QkRGKT1ZTworCisJbW92ZHFhCXhtbTEseG1tMAkJOyB4bW0xPXhtbTA9KFItWSkoTC9IKQorCW1vdmRxYQl4bW0zLHhtbTIJCTsgeG1tMz14bW0yPShHLVkpKEwvSCkKKwltb3ZkcWEJeG1tNSx4bW00CQk7IHhtbTU9eG1tND0oQi1ZKShML0gpCisKKwlwYWRkdyAgICAgeG1tMCx4bW02CQk7IHhtbTA9KChSLVkpK1lFKT1SRT1SKDAyNDY4QUNFKQorCXBhZGR3ICAgICB4bW0xLHhtbTcJCTsgeG1tMT0oKFItWSkrWU8pPVJPPVIoMTM1NzlCREYpCisJcGFja3Vzd2IgIHhtbTAseG1tMAkJOyB4bW0wPVIoMDI0NjhBQ0UqKioqKioqKikKKwlwYWNrdXN3YiAgeG1tMSx4bW0xCQk7IHhtbTE9UigxMzU3OUJERioqKioqKioqKQorCisJcGFkZHcgICAgIHhtbTIseG1tNgkJOyB4bW0yPSgoRy1ZKStZRSk9R0U9RygwMjQ2OEFDRSkKKwlwYWRkdyAgICAgeG1tMyx4bW03CQk7IHhtbTM9KChHLVkpK1lPKT1HTz1HKDEzNTc5QkRGKQorCXBhY2t1c3diICB4bW0yLHhtbTIJCTsgeG1tMj1HKDAyNDY4QUNFKioqKioqKiopCisJcGFja3Vzd2IgIHhtbTMseG1tMwkJOyB4bW0zPUcoMTM1NzlCREYqKioqKioqKikKKworCXBhZGR3ICAgICB4bW00LHhtbTYJCTsgeG1tND0oKEItWSkrWUUpPUJFPUIoMDI0NjhBQ0UpCisJcGFkZHcgICAgIHhtbTUseG1tNwkJOyB4bW01PSgoQi1ZKStZTyk9Qk89QigxMzU3OUJERikKKwlwYWNrdXN3YiAgeG1tNCx4bW00CQk7IHhtbTQ9QigwMjQ2OEFDRSoqKioqKioqKQorCXBhY2t1c3diICB4bW01LHhtbTUJCTsgeG1tNT1CKDEzNTc5QkRGKioqKioqKiopCisKKyVpZiBSR0JfUElYRUxTSVpFID09IDMgOyAtLS0tLS0tLS0tLS0tLS0KKworCTsgeG1tQT0oMDAgMDIgMDQgMDYgMDggMEEgMEMgMEUgKiopLCB4bW1CPSgwMSAwMyAwNSAwNyAwOSAwQiAwRCAwRiAqKikKKwk7IHhtbUM9KDEwIDEyIDE0IDE2IDE4IDFBIDFDIDFFICoqKSwgeG1tRD0oMTEgMTMgMTUgMTcgMTkgMUIgMUQgMUYgKiopCisJOyB4bW1FPSgyMCAyMiAyNCAyNiAyOCAyQSAyQyAyRSAqKiksIHhtbUY9KDIxIDIzIDI1IDI3IDI5IDJCIDJEIDJGICoqKQorCTsgeG1tRz0oKiogKiogKiogKiogKiogKiogKiogKiogKiopLCB4bW1IPSgqKiAqKiAqKiAqKiAqKiAqKiAqKiAqKiAqKikKKworCXB1bnBja2xidyB4bW1BLHhtbUMJOyB4bW1BPSgwMCAxMCAwMiAxMiAwNCAxNCAwNiAxNiAwOCAxOCAwQSAxQSAwQyAxQyAwRSAxRSkKKwlwdW5wY2tsYncgeG1tRSx4bW1CCTsgeG1tRT0oMjAgMDEgMjIgMDMgMjQgMDUgMjYgMDcgMjggMDkgMkEgMEIgMkMgMEQgMkUgMEYpCisJcHVucGNrbGJ3IHhtbUQseG1tRgk7IHhtbUQ9KDExIDIxIDEzIDIzIDE1IDI1IDE3IDI3IDE5IDI5IDFCIDJCIDFEIDJEIDFGIDJGKQorCisJbW92ZHFhICAgIHhtbUcseG1tQQorCW1vdmRxYSAgICB4bW1ILHhtbUEKKwlwdW5wY2tsd2QgeG1tQSx4bW1FCTsgeG1tQT0oMDAgMTAgMjAgMDEgMDIgMTIgMjIgMDMgMDQgMTQgMjQgMDUgMDYgMTYgMjYgMDcpCisJcHVucGNraHdkIHhtbUcseG1tRQk7IHhtbUc9KDA4IDE4IDI4IDA5IDBBIDFBIDJBIDBCIDBDIDFDIDJDIDBEIDBFIDFFIDJFIDBGKQorCisJcHNybGRxICAgIHhtbUgsMgk7IHhtbUg9KDAyIDEyIDA0IDE0IDA2IDE2IDA4IDE4IDBBIDFBIDBDIDFDIDBFIDFFIC0tIC0tKQorCXBzcmxkcSAgICB4bW1FLDIJOyB4bW1FPSgyMiAwMyAyNCAwNSAyNiAwNyAyOCAwOSAyQSAwQiAyQyAwRCAyRSAwRiAtLSAtLSkKKworCW1vdmRxYSAgICB4bW1DLHhtbUQKKwltb3ZkcWEgICAgeG1tQix4bW1ECisJcHVucGNrbHdkIHhtbUQseG1tSAk7IHhtbUQ9KDExIDIxIDAyIDEyIDEzIDIzIDA0IDE0IDE1IDI1IDA2IDE2IDE3IDI3IDA4IDE4KQorCXB1bnBja2h3ZCB4bW1DLHhtbUgJOyB4bW1DPSgxOSAyOSAwQSAxQSAxQiAyQiAwQyAxQyAxRCAyRCAwRSAxRSAxRiAyRiAtLSAtLSkKKworCXBzcmxkcSAgICB4bW1CLDIJOyB4bW1CPSgxMyAyMyAxNSAyNSAxNyAyNyAxOSAyOSAxQiAyQiAxRCAyRCAxRiAyRiAtLSAtLSkKKworCW1vdmRxYSAgICB4bW1GLHhtbUUKKwlwdW5wY2tsd2QgeG1tRSx4bW1CCTsgeG1tRT0oMjIgMDMgMTMgMjMgMjQgMDUgMTUgMjUgMjYgMDcgMTcgMjcgMjggMDkgMTkgMjkpCisJcHVucGNraHdkIHhtbUYseG1tQgk7IHhtbUY9KDJBIDBCIDFCIDJCIDJDIDBEIDFEIDJEIDJFIDBGIDFGIDJGIC0tIC0tIC0tIC0tKQorCisJcHNodWZkICAgIHhtbUgseG1tQSwweDRFOyB4bW1IPSgwNCAxNCAyNCAwNSAwNiAxNiAyNiAwNyAwMCAxMCAyMCAwMSAwMiAxMiAyMiAwMykKKwltb3ZkcWEgICAgeG1tQix4bW1FCisJcHVucGNrbGRxIHhtbUEseG1tRAk7IHhtbUE9KDAwIDEwIDIwIDAxIDExIDIxIDAyIDEyIDAyIDEyIDIyIDAzIDEzIDIzIDA0IDE0KQorCXB1bnBja2xkcSB4bW1FLHhtbUgJOyB4bW1FPSgyMiAwMyAxMyAyMyAwNCAxNCAyNCAwNSAyNCAwNSAxNSAyNSAwNiAxNiAyNiAwNykKKwlwdW5wY2toZHEgeG1tRCx4bW1CCTsgeG1tRD0oMTUgMjUgMDYgMTYgMjYgMDcgMTcgMjcgMTcgMjcgMDggMTggMjggMDkgMTkgMjkpCisKKwlwc2h1ZmQgICAgeG1tSCx4bW1HLDB4NEU7IHhtbUg9KDBDIDFDIDJDIDBEIDBFIDFFIDJFIDBGIDA4IDE4IDI4IDA5IDBBIDFBIDJBIDBCKQorCW1vdmRxYSAgICB4bW1CLHhtbUYKKwlwdW5wY2tsZHEgeG1tRyx4bW1DCTsgeG1tRz0oMDggMTggMjggMDkgMTkgMjkgMEEgMUEgMEEgMUEgMkEgMEIgMUIgMkIgMEMgMUMpCisJcHVucGNrbGRxIHhtbUYseG1tSAk7IHhtbUY9KDJBIDBCIDFCIDJCIDBDIDFDIDJDIDBEIDJDIDBEIDFEIDJEIDBFIDFFIDJFIDBGKQorCXB1bnBja2hkcSB4bW1DLHhtbUIJOyB4bW1DPSgxRCAyRCAwRSAxRSAyRSAwRiAxRiAyRiAxRiAyRiAtLSAtLSAtLSAtLSAtLSAtLSkKKworCXB1bnBja2xxZHEgeG1tQSx4bW1FCTsgeG1tQT0oMDAgMTAgMjAgMDEgMTEgMjEgMDIgMTIgMjIgMDMgMTMgMjMgMDQgMTQgMjQgMDUpCisJcHVucGNrbHFkcSB4bW1ELHhtbUcJOyB4bW1EPSgxNSAyNSAwNiAxNiAyNiAwNyAxNyAyNyAwOCAxOCAyOCAwOSAxOSAyOSAwQSAxQSkKKwlwdW5wY2tscWRxIHhtbUYseG1tQwk7IHhtbUY9KDJBIDBCIDFCIDJCIDBDIDFDIDJDIDBEIDFEIDJEIDBFIDFFIDJFIDBGIDFGIDJGKQorCisJY21wCXJjeCwgYnl0ZSBTSVpFT0ZfWE1NV09SRAorCWpiCXNob3J0IC5jb2x1bW5fc3QzMgorCisJdGVzdAlyZGksIFNJWkVPRl9YTU1XT1JELTEKKwlqbnoJc2hvcnQgLm91dDEKKwk7IC0tKGFsaWduZWQpLS0tLS0tLS0tLS0tLS0tLS0tLQorCW1vdm50ZHEJWE1NV09SRCBbcmRpKzAqU0laRU9GX1hNTVdPUkRdLCB4bW1BCisJbW92bnRkcQlYTU1XT1JEIFtyZGkrMSpTSVpFT0ZfWE1NV09SRF0sIHhtbUQKKwltb3ZudGRxCVhNTVdPUkQgW3JkaSsyKlNJWkVPRl9YTU1XT1JEXSwgeG1tRgorCWFkZAlyZGksIGJ5dGUgUkdCX1BJWEVMU0laRSpTSVpFT0ZfWE1NV09SRAk7IG91dHB0cgorCWptcAlzaG9ydCAub3V0MAorLm91dDE6CTsgLS0odW5hbGlnbmVkKS0tLS0tLS0tLS0tLS0tLS0tCisJcGNtcGVxYiAgICB4bW1ILHhtbUgJCQk7IHhtbUg9KGFsbCAxJ3MpCisJbWFza21vdmRxdSB4bW1BLHhtbUgJCQk7IG1vdm50ZHF1IFhNTVdPUkQgW3JkaV0sIHhtbUEKKwlhZGQJcmRpLCBieXRlIFNJWkVPRl9YTU1XT1JECTsgb3V0cHRyCisJbWFza21vdmRxdSB4bW1ELHhtbUgJCQk7IG1vdm50ZHF1IFhNTVdPUkQgW3JkaV0sIHhtbUQKKwlhZGQJcmRpLCBieXRlIFNJWkVPRl9YTU1XT1JECTsgb3V0cHRyCisJbWFza21vdmRxdSB4bW1GLHhtbUgJCQk7IG1vdm50ZHF1IFhNTVdPUkQgW3JkaV0sIHhtbUYKKwlhZGQJcmRpLCBieXRlIFNJWkVPRl9YTU1XT1JECTsgb3V0cHRyCisub3V0MDoKKwlzdWIJcmN4LCBieXRlIFNJWkVPRl9YTU1XT1JECisJanoJbmVhciAuZW5kY29sdW1uCisKKwlhZGQJcnNpLCBieXRlIFNJWkVPRl9YTU1XT1JECTsgaW5wdHIwCisJZGVjCWFsCQkJOyBZY3RyCisJam56CW5lYXIgLllsb29wXzJuZAorCisJYWRkCXJieCwgYnl0ZSBTSVpFT0ZfWE1NV09SRAk7IGlucHRyMQorCWFkZAlyZHgsIGJ5dGUgU0laRU9GX1hNTVdPUkQJOyBpbnB0cjIKKwlqbXAJbmVhciAuY29sdW1ubG9vcAorCisuY29sdW1uX3N0MzI6CisJcGNtcGVxYgl4bW1ILHhtbUgJCQk7IHhtbUg9KGFsbCAxJ3MpCisJbGVhCXJjeCwgW3JjeCtyY3gqMl0JCTsgaW11bCBlY3gsIFJHQl9QSVhFTFNJWkUKKwljbXAJcmN4LCBieXRlIDIqU0laRU9GX1hNTVdPUkQKKwlqYglzaG9ydCAuY29sdW1uX3N0MTYKKwltYXNrbW92ZHF1IHhtbUEseG1tSAkJCTsgbW92bnRkcXUgWE1NV09SRCBbcmRpXSwgeG1tQQorCWFkZAlyZGksIGJ5dGUgU0laRU9GX1hNTVdPUkQJOyBvdXRwdHIKKwltYXNrbW92ZHF1IHhtbUQseG1tSAkJCTsgbW92bnRkcXUgWE1NV09SRCBbcmRpXSwgeG1tRAorCWFkZAlyZGksIGJ5dGUgU0laRU9GX1hNTVdPUkQJOyBvdXRwdHIKKwltb3ZkcWEJeG1tQSx4bW1GCisJc3ViCXJjeCwgYnl0ZSAyKlNJWkVPRl9YTU1XT1JECisJam1wCXNob3J0IC5jb2x1bW5fc3QxNQorLmNvbHVtbl9zdDE2OgorCWNtcAlyY3gsIGJ5dGUgU0laRU9GX1hNTVdPUkQKKwlqYglzaG9ydCAuY29sdW1uX3N0MTUKKwltYXNrbW92ZHF1IHhtbUEseG1tSAkJCTsgbW92bnRkcXUgWE1NV09SRCBbcmRpXSwgeG1tQQorCWFkZAlyZGksIGJ5dGUgU0laRU9GX1hNTVdPUkQJOyBvdXRwdHIKKwltb3ZkcWEJeG1tQSx4bW1ECisJc3ViCXJjeCwgYnl0ZSBTSVpFT0ZfWE1NV09SRAorLmNvbHVtbl9zdDE1OgorCW1vdglyYXgscmN4CisJeG9yCXJjeCwgYnl0ZSAweDBGCisJc2hsCXJjeCwgMgorCW1vdmQJeG1tQixlY3gKKwlwc3JscQl4bW1ILDQKKwlwY21wZXFiCXhtbUUseG1tRQorCXBzcmxxCXhtbUgseG1tQgorCXBzcmxxCXhtbUUseG1tQgorCXB1bnBja2xidyB4bW1FLHhtbUgKKwk7IC0tLS0tLS0tLS0tLS0tLS0KKwltb3YJcmN4LHJkaQorCWFuZAlyY3gsIGJ5dGUgU0laRU9GX1hNTVdPUkQtMQorCWp6CXNob3J0IC5hZGowCisJYWRkCXJheCxyY3gKKwljbXAJcmF4LCBieXRlIFNJWkVPRl9YTU1XT1JECisJamEJc2hvcnQgLmFkajAKKwlhbmQJcmRpLCBieXRlICgtU0laRU9GX1hNTVdPUkQpCTsgYWxpZ24gdG8gMTYtYnl0ZSBib3VuZGFyeQorCXNobAlyY3gsIDMJCQk7IHBzbGxkcSB4bW1BLGVjeCAmIHBzbGxkcSB4bW1FLGVjeAorCW1vdmRxYQl4bW1HLHhtbUEKKwltb3ZkcWEJeG1tQyx4bW1FCisJcHNsbGRxCXhtbUEsIFNJWkVPRl9YTU1XT1JELzIKKwlwc2xsZHEJeG1tRSwgU0laRU9GX1hNTVdPUkQvMgorCW1vdmQJeG1tRCxlY3gKKwlzdWIJcmN4LCBieXRlIChTSVpFT0ZfWE1NV09SRC8yKSpCWVRFX0JJVAorCWpiCXNob3J0IC5hZGoxCisJbW92ZAl4bW1GLGVjeAorCXBzbGxxCXhtbUEseG1tRgorCXBzbGxxCXhtbUUseG1tRgorCWptcAlzaG9ydCAuYWRqMAorLmFkajE6CW5lZwlyY3gKKwltb3ZkCXhtbUYsZWN4CisJcHNybHEJeG1tQSx4bW1GCisJcHNybHEJeG1tRSx4bW1GCisJcHNsbHEJeG1tRyx4bW1ECisJcHNsbHEJeG1tQyx4bW1ECisJcG9yCXhtbUEseG1tRworCXBvcgl4bW1FLHhtbUMKKy5hZGowOgk7IC0tLS0tLS0tLS0tLS0tLS0KKwltYXNrbW92ZHF1IHhtbUEseG1tRQkJCTsgbW92bnRkcXUgWE1NV09SRCBbZWRpXSwgeG1tQQorCislZWxzZSA7IFJHQl9QSVhFTFNJWkUgPT0gNCA7IC0tLS0tLS0tLS0tCisKKyVpZmRlZiBSR0JYX0ZJTExFUl8wWEZGCisJcGNtcGVxYiAgIHhtbTYseG1tNgkJOyB4bW02PVhFPVgoMDI0NjhBQ0UqKioqKioqKikKKwlwY21wZXFiICAgeG1tNyx4bW03CQk7IHhtbTc9WE89WCgxMzU3OUJERioqKioqKioqKQorJWVsc2UKKwlweG9yICAgICAgeG1tNix4bW02CQk7IHhtbTY9WEU9WCgwMjQ2OEFDRSoqKioqKioqKQorCXB4b3IgICAgICB4bW03LHhtbTcJCTsgeG1tNz1YTz1YKDEzNTc5QkRGKioqKioqKiopCislZW5kaWYKKwk7IHhtbUE9KDAwIDAyIDA0IDA2IDA4IDBBIDBDIDBFICoqKSwgeG1tQj0oMDEgMDMgMDUgMDcgMDkgMEIgMEQgMEYgKiopCisJOyB4bW1DPSgxMCAxMiAxNCAxNiAxOCAxQSAxQyAxRSAqKiksIHhtbUQ9KDExIDEzIDE1IDE3IDE5IDFCIDFEIDFGICoqKQorCTsgeG1tRT0oMjAgMjIgMjQgMjYgMjggMkEgMkMgMkUgKiopLCB4bW1GPSgyMSAyMyAyNSAyNyAyOSAyQiAyRCAyRiAqKikKKwk7IHhtbUc9KDMwIDMyIDM0IDM2IDM4IDNBIDNDIDNFICoqKSwgeG1tSD0oMzEgMzMgMzUgMzcgMzkgM0IgM0QgM0YgKiopCisKKwlwdW5wY2tsYncgeG1tQSx4bW1DCTsgeG1tQT0oMDAgMTAgMDIgMTIgMDQgMTQgMDYgMTYgMDggMTggMEEgMUEgMEMgMUMgMEUgMUUpCisJcHVucGNrbGJ3IHhtbUUseG1tRwk7IHhtbUU9KDIwIDMwIDIyIDMyIDI0IDM0IDI2IDM2IDI4IDM4IDJBIDNBIDJDIDNDIDJFIDNFKQorCXB1bnBja2xidyB4bW1CLHhtbUQJOyB4bW1CPSgwMSAxMSAwMyAxMyAwNSAxNSAwNyAxNyAwOSAxOSAwQiAxQiAwRCAxRCAwRiAxRikKKwlwdW5wY2tsYncgeG1tRix4bW1ICTsgeG1tRj0oMjEgMzEgMjMgMzMgMjUgMzUgMjcgMzcgMjkgMzkgMkIgM0IgMkQgM0QgMkYgM0YpCisKKwltb3ZkcWEgICAgeG1tQyx4bW1BCisJcHVucGNrbHdkIHhtbUEseG1tRQk7IHhtbUE9KDAwIDEwIDIwIDMwIDAyIDEyIDIyIDMyIDA0IDE0IDI0IDM0IDA2IDE2IDI2IDM2KQorCXB1bnBja2h3ZCB4bW1DLHhtbUUJOyB4bW1DPSgwOCAxOCAyOCAzOCAwQSAxQSAyQSAzQSAwQyAxQyAyQyAzQyAwRSAxRSAyRSAzRSkKKwltb3ZkcWEgICAgeG1tRyx4bW1CCisJcHVucGNrbHdkIHhtbUIseG1tRgk7IHhtbUI9KDAxIDExIDIxIDMxIDAzIDEzIDIzIDMzIDA1IDE1IDI1IDM1IDA3IDE3IDI3IDM3KQorCXB1bnBja2h3ZCB4bW1HLHhtbUYJOyB4bW1HPSgwOSAxOSAyOSAzOSAwQiAxQiAyQiAzQiAwRCAxRCAyRCAzRCAwRiAxRiAyRiAzRikKKworCW1vdmRxYSAgICB4bW1ELHhtbUEKKwlwdW5wY2tsZHEgeG1tQSx4bW1CCTsgeG1tQT0oMDAgMTAgMjAgMzAgMDEgMTEgMjEgMzEgMDIgMTIgMjIgMzIgMDMgMTMgMjMgMzMpCisJcHVucGNraGRxIHhtbUQseG1tQgk7IHhtbUQ9KDA0IDE0IDI0IDM0IDA1IDE1IDI1IDM1IDA2IDE2IDI2IDM2IDA3IDE3IDI3IDM3KQorCW1vdmRxYSAgICB4bW1ILHhtbUMKKwlwdW5wY2tsZHEgeG1tQyx4bW1HCTsgeG1tQz0oMDggMTggMjggMzggMDkgMTkgMjkgMzkgMEEgMUEgMkEgM0EgMEIgMUIgMkIgM0IpCisJcHVucGNraGRxIHhtbUgseG1tRwk7IHhtbUg9KDBDIDFDIDJDIDNDIDBEIDFEIDJEIDNEIDBFIDFFIDJFIDNFIDBGIDFGIDJGIDNGKQorCisJY21wCXJjeCwgYnl0ZSBTSVpFT0ZfWE1NV09SRAorCWpiCXNob3J0IC5jb2x1bW5fc3QzMgorCisJdGVzdAlyZGksIFNJWkVPRl9YTU1XT1JELTEKKwlqbnoJc2hvcnQgLm91dDEKKwk7IC0tKGFsaWduZWQpLS0tLS0tLS0tLS0tLS0tLS0tLQorCW1vdm50ZHEJWE1NV09SRCBbcmRpKzAqU0laRU9GX1hNTVdPUkRdLCB4bW1BCisJbW92bnRkcQlYTU1XT1JEIFtyZGkrMSpTSVpFT0ZfWE1NV09SRF0sIHhtbUQKKwltb3ZudGRxCVhNTVdPUkQgW3JkaSsyKlNJWkVPRl9YTU1XT1JEXSwgeG1tQworCW1vdm50ZHEJWE1NV09SRCBbcmRpKzMqU0laRU9GX1hNTVdPUkRdLCB4bW1ICisJYWRkCXJkaSwgYnl0ZSBSR0JfUElYRUxTSVpFKlNJWkVPRl9YTU1XT1JECTsgb3V0cHRyCisJam1wCXNob3J0IC5vdXQwCisub3V0MToJOyAtLSh1bmFsaWduZWQpLS0tLS0tLS0tLS0tLS0tLS0KKwlwY21wZXFiICAgIHhtbUUseG1tRQkJCTsgeG1tRT0oYWxsIDEncykKKwltYXNrbW92ZHF1IHhtbUEseG1tRQkJCTsgbW92bnRkcXUgWE1NV09SRCBbcmRpXSwgeG1tQQorCWFkZAlyZGksIGJ5dGUgU0laRU9GX1hNTVdPUkQJOyBvdXRwdHIKKwltYXNrbW92ZHF1IHhtbUQseG1tRQkJCTsgbW92bnRkcXUgWE1NV09SRCBbcmRpXSwgeG1tRAorCWFkZAlyZGksIGJ5dGUgU0laRU9GX1hNTVdPUkQJOyBvdXRwdHIKKwltYXNrbW92ZHF1IHhtbUMseG1tRQkJCTsgbW92bnRkcXUgWE1NV09SRCBbcmRpXSwgeG1tQworCWFkZAlyZGksIGJ5dGUgU0laRU9GX1hNTVdPUkQJOyBvdXRwdHIKKwltYXNrbW92ZHF1IHhtbUgseG1tRQkJCTsgbW92bnRkcXUgWE1NV09SRCBbcmRpXSwgeG1tSAorCWFkZAlyZGksIGJ5dGUgU0laRU9GX1hNTVdPUkQJOyBvdXRwdHIKKy5vdXQwOgorCXN1YglyY3gsIGJ5dGUgU0laRU9GX1hNTVdPUkQKKwlqegluZWFyIC5lbmRjb2x1bW4KKworCWFkZAlyc2ksIGJ5dGUgU0laRU9GX1hNTVdPUkQJOyBpbnB0cjAKKwlkZWMJYWwJCQk7IFljdHIKKwlqbnoJbmVhciAuWWxvb3BfMm5kCisKKwlhZGQJcmJ4LCBieXRlIFNJWkVPRl9YTU1XT1JECTsgaW5wdHIxCisJYWRkCXJkeCwgYnl0ZSBTSVpFT0ZfWE1NV09SRAk7IGlucHRyMgorCWptcAluZWFyIC5jb2x1bW5sb29wCisKKy5jb2x1bW5fc3QzMjoKKwlwY21wZXFiCXhtbUUseG1tRQkJCTsgeG1tRT0oYWxsIDEncykKKwljbXAJcmN4LCBieXRlIFNJWkVPRl9YTU1XT1JELzIKKwlqYglzaG9ydCAuY29sdW1uX3N0MTYKKwltYXNrbW92ZHF1IHhtbUEseG1tRQkJCTsgbW92bnRkcXUgWE1NV09SRCBbcmRpXSwgeG1tQQorCWFkZAlyZGksIGJ5dGUgU0laRU9GX1hNTVdPUkQJOyBvdXRwdHIKKwltYXNrbW92ZHF1IHhtbUQseG1tRQkJCTsgbW92bnRkcXUgWE1NV09SRCBbcmRpXSwgeG1tRAorCWFkZAlyZGksIGJ5dGUgU0laRU9GX1hNTVdPUkQJOyBvdXRwdHIKKwltb3ZkcWEJeG1tQSx4bW1DCisJbW92ZHFhCXhtbUQseG1tSAorCXN1YglyY3gsIGJ5dGUgU0laRU9GX1hNTVdPUkQvMgorLmNvbHVtbl9zdDE2OgorCWNtcAlyY3gsIGJ5dGUgU0laRU9GX1hNTVdPUkQvNAorCWpiCXNob3J0IC5jb2x1bW5fc3QxNQorCW1hc2ttb3ZkcXUgeG1tQSx4bW1FCQkJOyBtb3ZudGRxdSBYTU1XT1JEIFtlZGldLCB4bW1BCisJYWRkCXJkaSwgYnl0ZSBTSVpFT0ZfWE1NV09SRAk7IG91dHB0cgorCW1vdmRxYQl4bW1BLHhtbUQKKwlzdWIJcmN4LCBieXRlIFNJWkVPRl9YTU1XT1JELzQKKy5jb2x1bW5fc3QxNToKKwljbXAJcmN4LCBieXRlIFNJWkVPRl9YTU1XT1JELzE2CisJamIJbmVhciAuZW5kY29sdW1uCisJbW92CXJheCxyY3gKKwl4b3IJcmN4LCBieXRlIDB4MDMKKwlpbmMJcmN4CisJc2hsCXJjeCwgNAorCW1vdmQJeG1tRixlY3gKKwlwc3JscQl4bW1FLHhtbUYKKwlwdW5wY2tsYncgeG1tRSx4bW1FCisJOyAtLS0tLS0tLS0tLS0tLS0tCisJbW92CXJjeCxyZGkKKwlhbmQJcmN4LCBieXRlIFNJWkVPRl9YTU1XT1JELTEKKwlqeglzaG9ydCAuYWRqMAorCWxlYQlyYXgsIFtyY3grcmF4KjRdCTsgUkdCX1BJWEVMU0laRQorCWNtcAlyYXgsIGJ5dGUgU0laRU9GX1hNTVdPUkQKKwlqYQlzaG9ydCAuYWRqMAorCWFuZAlyZGksIGJ5dGUgKC1TSVpFT0ZfWE1NV09SRCkJOyBhbGlnbiB0byAxNi1ieXRlIGJvdW5kYXJ5CisJc2hsCXJjeCwgMwkJCTsgcHNsbGRxIHhtbUEsZWN4ICYgcHNsbGRxIHhtbUUsZWN4CisJbW92ZHFhCXhtbUIseG1tQQorCW1vdmRxYQl4bW1HLHhtbUUKKwlwc2xsZHEJeG1tQSwgU0laRU9GX1hNTVdPUkQvMgorCXBzbGxkcQl4bW1FLCBTSVpFT0ZfWE1NV09SRC8yCisJbW92ZAl4bW1DLGVjeAorCXN1YglyY3gsIGJ5dGUgKFNJWkVPRl9YTU1XT1JELzIpKkJZVEVfQklUCisJamIJc2hvcnQgLmFkajEKKwltb3ZkCXhtbUgsZWN4CisJcHNsbHEJeG1tQSx4bW1ICisJcHNsbHEJeG1tRSx4bW1ICisJam1wCXNob3J0IC5hZGowCisuYWRqMToJbmVnCXJjeAorCW1vdmQJeG1tSCxlY3gKKwlwc3JscQl4bW1BLHhtbUgKKwlwc3JscQl4bW1FLHhtbUgKKwlwc2xscQl4bW1CLHhtbUMKKwlwc2xscQl4bW1HLHhtbUMKKwlwb3IJeG1tQSx4bW1CCisJcG9yCXhtbUUseG1tRworLmFkajA6CTsgLS0tLS0tLS0tLS0tLS0tLQorCW1hc2ttb3ZkcXUgeG1tQSx4bW1FCQkJOyBtb3ZudGRxdSBYTU1XT1JEIFtlZGldLCB4bW1BCisKKyVlbmRpZiA7IFJHQl9QSVhFTFNJWkUgOyAtLS0tLS0tLS0tLS0tLS0KKworLmVuZGNvbHVtbjoKKwlzZmVuY2UJCTsgZmx1c2ggdGhlIHdyaXRlIGJ1ZmZlcgorCisucmV0dXJuOgorCXBvcAlyYngKKwl1bmNvbGxlY3RfYXJncworCW1vdglyc3AscmJwCQk7IHJzcCA8LSBhbGlnbmVkIHJicAorCXBvcAlyc3AJCTsgcnNwIDwtIG9yaWdpbmFsIHJicAorCXBvcAlyYnAKKwlyZXQKKworOyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorOworOyBVcHNhbXBsZSBhbmQgY29sb3IgY29udmVydCBmb3IgdGhlIGNhc2Ugb2YgMjoxIGhvcml6b250YWwgYW5kIDI6MSB2ZXJ0aWNhbC4KKzsKKzsgR0xPQkFMKHZvaWQpCis7IGpzaW1kX2gydjJfbWVyZ2VkX3Vwc2FtcGxlX3NzZTIgKEpESU1FTlNJT04gb3V0cHV0X3dpZHRoLAorOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBKU0FNUElNQUdFIGlucHV0X2J1ZiwKKzsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSkRJTUVOU0lPTiBpbl9yb3dfZ3JvdXBfY3RyLAorOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBKU0FNUEFSUkFZIG91dHB1dF9idWYpOworOworCis7IHIxMCA9IEpESU1FTlNJT04gb3V0cHV0X3dpZHRoCis7IHIxMSA9IEpTQU1QSU1BR0UgaW5wdXRfYnVmCis7IHIxMiA9IEpESU1FTlNJT04gaW5fcm93X2dyb3VwX2N0cgorOyByMTMgPSBKU0FNUEFSUkFZIG91dHB1dF9idWYKKworCWFsaWduCTE2CisJZ2xvYmFsCUVYVE4oanNpbWRfaDJ2Ml9tZXJnZWRfdXBzYW1wbGVfc3NlMikKKworRVhUTihqc2ltZF9oMnYyX21lcmdlZF91cHNhbXBsZV9zc2UyKToKKwlwdXNoCXJicAorCW1vdglyYXgscnNwCisJbW92CXJicCxyc3AKKwljb2xsZWN0X2FyZ3MKKwlwdXNoCXJieAorCisJbW92CXJheCwgcjEwCisKKwltb3YJcmRpLCByMTEKKwltb3YJcmN4LCByMTIKKwltb3YJcnNpLCBKU0FNUEFSUkFZIFtyZGkrMCpTSVpFT0ZfSlNBTVBBUlJBWV0KKwltb3YJcmJ4LCBKU0FNUEFSUkFZIFtyZGkrMSpTSVpFT0ZfSlNBTVBBUlJBWV0KKwltb3YJcmR4LCBKU0FNUEFSUkFZIFtyZGkrMipTSVpFT0ZfSlNBTVBBUlJBWV0KKwltb3YJcmRpLCByMTMKKwlsZWEJcnNpLCBbcnNpK3JjeCpTSVpFT0ZfSlNBTVBST1ddCisKKwlwdXNoCXJkeAkJCTsgaW5wdHIyCisJcHVzaAlyYngJCQk7IGlucHRyMQorCXB1c2gJcnNpCQkJOyBpbnB0cjAwCisJbW92CXJieCxyc3AKKworCXB1c2gJcmRpCisJcHVzaAlyY3gKKwlwdXNoCXJheAorCisJJWlmZGVmIFdJTjY0CisJbW92IHI4LCByY3gKKwltb3YgcjksIHJkaQorCW1vdiByY3gsIHJheAorCW1vdiByZHgsIHJieAorCSVlbHNlCisJbW92IHJkeCwgcmN4CisJbW92IHJjeCwgcmRpCisJbW92CXJkaSwgcmF4CisJbW92IHJzaSwgcmJ4CisJJWVuZGlmCisKKwljYWxsCUVYVE4oanNpbWRfaDJ2MV9tZXJnZWRfdXBzYW1wbGVfc3NlMikKKworCXBvcCByYXgKKwlwb3AgcmN4CisJcG9wIHJkaQorCXBvcCByc2kKKwlwb3AgcmJ4CisJcG9wIHJkeAorCisJYWRkCXJkaSwgYnl0ZSBTSVpFT0ZfSlNBTVBST1cJOyBvdXRwdHIxCisJYWRkCXJzaSwgYnl0ZSBTSVpFT0ZfSlNBTVBST1cJOyBpbnB0cjAxCisKKwlwdXNoCXJkeAkJCTsgaW5wdHIyCisJcHVzaAlyYngJCQk7IGlucHRyMQorCXB1c2gJcnNpCQkJOyBpbnB0cjAwCisJbW92CXJieCxyc3AKKworCXB1c2gJcmRpCisJcHVzaAlyY3gKKwlwdXNoCXJheAorCisJJWlmZGVmIFdJTjY0CisJbW92IHI4LCByY3gKKwltb3YgcjksIHJkaQorCW1vdiByY3gsIHJheAorCW1vdiByZHgsIHJieAorCSVlbHNlCisJbW92IHJkeCwgcmN4CisJbW92IHJjeCwgcmRpCisJbW92CXJkaSwgcmF4CisJbW92IHJzaSwgcmJ4CisJJWVuZGlmCisKKwljYWxsCUVYVE4oanNpbWRfaDJ2MV9tZXJnZWRfdXBzYW1wbGVfc3NlMikKKworCXBvcCByYXgKKwlwb3AgcmN4CisJcG9wIHJkaQorCXBvcCByc2kKKwlwb3AgcmJ4CisJcG9wIHJkeAorCisJcG9wCXJieAorCXVuY29sbGVjdF9hcmdzCisJcG9wCXJicAorCXJldAorCis7IEZvciBzb21lIHJlYXNvbiwgdGhlIE9TIFggbGlua2VyIGRvZXMgbm90IGhvbm9yIHRoZSByZXF1ZXN0IHRvIGFsaWduIHRoZQorOyBzZWdtZW50IHVubGVzcyB3ZSBkbyB0aGlzLgorCWFsaWduCTE2CmRpZmYgLS1naXQgYS9zaW1kL2pkbXJnc3MyLmFzbSBiL3NpbWQvamRtcmdzczIuYXNtCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjk5YjdlYjkKLS0tIC9kZXYvbnVsbAorKysgYi9zaW1kL2pkbXJnc3MyLmFzbQpAQCAtMCwwICsxLDU2NCBAQAorOworOyBqZG1yZ3NzMi5hc20gLSBtZXJnZWQgdXBzYW1wbGluZy9jb2xvciBjb252ZXJzaW9uIChTU0UyKQorOworOyBDb3B5cmlnaHQgMjAwOSBQaWVycmUgT3NzbWFuIDxvc3NtYW5AY2VuZGlvLnNlPiBmb3IgQ2VuZGlvIEFCCis7Cis7IEJhc2VkIG9uCis7IHg4NiBTSU1EIGV4dGVuc2lvbiBmb3IgSUpHIEpQRUcgbGlicmFyeQorOyBDb3B5cmlnaHQgKEMpIDE5OTktMjAwNiwgTUlZQVNBS0EgTWFzYXJ1LgorOyBGb3IgY29uZGl0aW9ucyBvZiBkaXN0cmlidXRpb24gYW5kIHVzZSwgc2VlIGNvcHlyaWdodCBub3RpY2UgaW4ganNpbWRleHQuaW5jCis7Cis7IFRoaXMgZmlsZSBzaG91bGQgYmUgYXNzZW1ibGVkIHdpdGggTkFTTSAoTmV0d2lkZSBBc3NlbWJsZXIpLAorOyBjYW4gKm5vdCogYmUgYXNzZW1ibGVkIHdpdGggTWljcm9zb2Z0J3MgTUFTTSBvciBhbnkgY29tcGF0aWJsZQorOyBhc3NlbWJsZXIgKGluY2x1ZGluZyBCb3JsYW5kJ3MgVHVyYm8gQXNzZW1ibGVyKS4KKzsgTkFTTSBpcyBhdmFpbGFibGUgZnJvbSBodHRwOi8vbmFzbS5zb3VyY2Vmb3JnZS5uZXQvIG9yCis7IGh0dHA6Ly9zb3VyY2Vmb3JnZS5uZXQvcHJvamVjdC9zaG93ZmlsZXMucGhwP2dyb3VwX2lkPTYyMDgKKzsKKzsgW1RBQjhdCisKKyVpbmNsdWRlICJqY29sc2FtcC5pbmMiCisJCQkJCis7IC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisJU0VDVElPTglTRUdfVEVYVAorCUJJVFMJMzIKKzsKKzsgVXBzYW1wbGUgYW5kIGNvbG9yIGNvbnZlcnQgZm9yIHRoZSBjYXNlIG9mIDI6MSBob3Jpem9udGFsIGFuZCAxOjEgdmVydGljYWwuCis7Cis7IEdMT0JBTCh2b2lkKQorOyBqc2ltZF9oMnYxX21lcmdlZF91cHNhbXBsZV9zc2UyIChKRElNRU5TSU9OIG91dHB1dF93aWR0aCwKKzsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSlNBTVBJTUFHRSBpbnB1dF9idWYsCis7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEpESU1FTlNJT04gaW5fcm93X2dyb3VwX2N0ciwKKzsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSlNBTVBBUlJBWSBvdXRwdXRfYnVmKTsKKzsKKworJWRlZmluZSBvdXRwdXRfd2lkdGgoYikJKGIpKzgJCQk7IEpESU1FTlNJT04gb3V0cHV0X3dpZHRoCislZGVmaW5lIGlucHV0X2J1ZihiKQkJKGIpKzEyCQk7IEpTQU1QSU1BR0UgaW5wdXRfYnVmCislZGVmaW5lIGluX3Jvd19ncm91cF9jdHIoYikJKGIpKzE2CQk7IEpESU1FTlNJT04gaW5fcm93X2dyb3VwX2N0cgorJWRlZmluZSBvdXRwdXRfYnVmKGIpCQkoYikrMjAJCTsgSlNBTVBBUlJBWSBvdXRwdXRfYnVmCisKKyVkZWZpbmUgb3JpZ2luYWxfZWJwCWVicCswCislZGVmaW5lIHdrKGkpCQllYnAtKFdLX05VTS0oaSkpKlNJWkVPRl9YTU1XT1JECTsgeG1td29yZCB3a1tXS19OVU1dCislZGVmaW5lIFdLX05VTQkJMworJWRlZmluZSBnb3RwdHIJCXdrKDApLVNJWkVPRl9QT0lOVEVSCTsgdm9pZCAqIGdvdHB0cgorCisJYWxpZ24JMTYKKwlnbG9iYWwJRVhUTihqc2ltZF9oMnYxX21lcmdlZF91cHNhbXBsZV9zc2UyKQorCitFWFROKGpzaW1kX2gydjFfbWVyZ2VkX3Vwc2FtcGxlX3NzZTIpOgorCXB1c2gJZWJwCisJbW92CWVheCxlc3AJCQkJOyBlYXggPSBvcmlnaW5hbCBlYnAKKwlzdWIJZXNwLCBieXRlIDQKKwlhbmQJZXNwLCBieXRlICgtU0laRU9GX1hNTVdPUkQpCTsgYWxpZ24gdG8gMTI4IGJpdHMKKwltb3YJW2VzcF0sZWF4CisJbW92CWVicCxlc3AJCQkJOyBlYnAgPSBhbGlnbmVkIGVicAorCWxlYQllc3AsIFt3aygwKV0KKwlwdXNocGljCWVheAkJOyBtYWtlIGEgcm9vbSBmb3IgR09UIGFkZHJlc3MKKwlwdXNoCWVieAorOwlwdXNoCWVjeAkJOyBuZWVkIG5vdCBiZSBwcmVzZXJ2ZWQKKzsJcHVzaAllZHgJCTsgbmVlZCBub3QgYmUgcHJlc2VydmVkCisJcHVzaAllc2kKKwlwdXNoCWVkaQorCisJZ2V0X0dPVAllYngJCQk7IGdldCBHT1QgYWRkcmVzcworCW1vdnBpYwlQT0lOVEVSIFtnb3RwdHJdLCBlYngJOyBzYXZlIEdPVCBhZGRyZXNzCisKKwltb3YJZWN4LCBKRElNRU5TSU9OIFtvdXRwdXRfd2lkdGgoZWF4KV0JOyBjb2wKKwl0ZXN0CWVjeCxlY3gKKwlqegluZWFyIC5yZXR1cm4KKworCXB1c2gJZWN4CisKKwltb3YJZWRpLCBKU0FNUElNQUdFIFtpbnB1dF9idWYoZWF4KV0KKwltb3YJZWN4LCBKRElNRU5TSU9OIFtpbl9yb3dfZ3JvdXBfY3RyKGVheCldCisJbW92CWVzaSwgSlNBTVBBUlJBWSBbZWRpKzAqU0laRU9GX0pTQU1QQVJSQVldCisJbW92CWVieCwgSlNBTVBBUlJBWSBbZWRpKzEqU0laRU9GX0pTQU1QQVJSQVldCisJbW92CWVkeCwgSlNBTVBBUlJBWSBbZWRpKzIqU0laRU9GX0pTQU1QQVJSQVldCisJbW92CWVkaSwgSlNBTVBBUlJBWSBbb3V0cHV0X2J1ZihlYXgpXQorCW1vdgllc2ksIEpTQU1QUk9XIFtlc2krZWN4KlNJWkVPRl9KU0FNUFJPV10JCTsgaW5wdHIwCisJbW92CWVieCwgSlNBTVBST1cgW2VieCtlY3gqU0laRU9GX0pTQU1QUk9XXQkJOyBpbnB0cjEKKwltb3YJZWR4LCBKU0FNUFJPVyBbZWR4K2VjeCpTSVpFT0ZfSlNBTVBST1ddCQk7IGlucHRyMgorCW1vdgllZGksIEpTQU1QUk9XIFtlZGldCQkJCTsgb3V0cHRyCisKKwlwb3AJZWN4CQkJOyBjb2wKKworCWFsaWdueAkxNiw3CisuY29sdW1ubG9vcDoKKwltb3ZwaWMJZWF4LCBQT0lOVEVSIFtnb3RwdHJdCTsgbG9hZCBHT1QgYWRkcmVzcyAoZWF4KQorCisJbW92ZHFhICAgIHhtbTYsIFhNTVdPUkQgW2VieF0JOyB4bW02PUNiKDAxMjM0NTY3ODlBQkNERUYpCisJbW92ZHFhICAgIHhtbTcsIFhNTVdPUkQgW2VkeF0JOyB4bW03PUNyKDAxMjM0NTY3ODlBQkNERUYpCisKKwlweG9yICAgICAgeG1tMSx4bW0xCQk7IHhtbTE9KGFsbCAwJ3MpCisJcGNtcGVxdyAgIHhtbTMseG1tMworCXBzbGx3ICAgICB4bW0zLDcJCTsgeG1tMz17MHhGRjgwIDB4RkY4MCAweEZGODAgMHhGRjgwIC4ufQorCisJbW92ZHFhICAgIHhtbTQseG1tNgorCXB1bnBja2hidyB4bW02LHhtbTEJCTsgeG1tNj1DYig4OUFCQ0RFRik9Q2JICisJcHVucGNrbGJ3IHhtbTQseG1tMQkJOyB4bW00PUNiKDAxMjM0NTY3KT1DYkwKKwltb3ZkcWEgICAgeG1tMCx4bW03CisJcHVucGNraGJ3IHhtbTcseG1tMQkJOyB4bW03PUNyKDg5QUJDREVGKT1DckgKKwlwdW5wY2tsYncgeG1tMCx4bW0xCQk7IHhtbTA9Q3IoMDEyMzQ1NjcpPUNyTAorCisJcGFkZHcgICAgIHhtbTYseG1tMworCXBhZGR3ICAgICB4bW00LHhtbTMKKwlwYWRkdyAgICAgeG1tNyx4bW0zCisJcGFkZHcgICAgIHhtbTAseG1tMworCisJOyAoT3JpZ2luYWwpCisJOyBSID0gWSAgICAgICAgICAgICAgICArIDEuNDAyMDAgKiBDcgorCTsgRyA9IFkgLSAwLjM0NDE0ICogQ2IgLSAwLjcxNDE0ICogQ3IKKwk7IEIgPSBZICsgMS43NzIwMCAqIENiCisJOworCTsgKFRoaXMgaW1wbGVtZW50YXRpb24pCisJOyBSID0gWSAgICAgICAgICAgICAgICArIDAuNDAyMDAgKiBDciArIENyCisJOyBHID0gWSAtIDAuMzQ0MTQgKiBDYiArIDAuMjg1ODYgKiBDciAtIENyCisJOyBCID0gWSAtIDAuMjI4MDAgKiBDYiArIENiICsgQ2IKKworCW1vdmRxYQl4bW01LHhtbTYJCTsgeG1tNT1DYkgKKwltb3ZkcWEJeG1tMix4bW00CQk7IHhtbTI9Q2JMCisJcGFkZHcJeG1tNix4bW02CQk7IHhtbTY9MipDYkgKKwlwYWRkdwl4bW00LHhtbTQJCTsgeG1tND0yKkNiTAorCW1vdmRxYQl4bW0xLHhtbTcJCTsgeG1tMT1DckgKKwltb3ZkcWEJeG1tMyx4bW0wCQk7IHhtbTM9Q3JMCisJcGFkZHcJeG1tNyx4bW03CQk7IHhtbTc9MipDckgKKwlwYWRkdwl4bW0wLHhtbTAJCTsgeG1tMD0yKkNyTAorCisJcG11bGh3CXhtbTYsW0dPVE9GRihlYXgsUFdfTUYwMjI4KV0JOyB4bW02PSgyKkNiSCAqIC1GSVgoMC4yMjgwMCkpCisJcG11bGh3CXhtbTQsW0dPVE9GRihlYXgsUFdfTUYwMjI4KV0JOyB4bW00PSgyKkNiTCAqIC1GSVgoMC4yMjgwMCkpCisJcG11bGh3CXhtbTcsW0dPVE9GRihlYXgsUFdfRjA0MDIpXQk7IHhtbTc9KDIqQ3JIICogRklYKDAuNDAyMDApKQorCXBtdWxodwl4bW0wLFtHT1RPRkYoZWF4LFBXX0YwNDAyKV0JOyB4bW0wPSgyKkNyTCAqIEZJWCgwLjQwMjAwKSkKKworCXBhZGR3CXhtbTYsW0dPVE9GRihlYXgsUFdfT05FKV0KKwlwYWRkdwl4bW00LFtHT1RPRkYoZWF4LFBXX09ORSldCisJcHNyYXcJeG1tNiwxCQkJOyB4bW02PShDYkggKiAtRklYKDAuMjI4MDApKQorCXBzcmF3CXhtbTQsMQkJCTsgeG1tND0oQ2JMICogLUZJWCgwLjIyODAwKSkKKwlwYWRkdwl4bW03LFtHT1RPRkYoZWF4LFBXX09ORSldCisJcGFkZHcJeG1tMCxbR09UT0ZGKGVheCxQV19PTkUpXQorCXBzcmF3CXhtbTcsMQkJCTsgeG1tNz0oQ3JIICogRklYKDAuNDAyMDApKQorCXBzcmF3CXhtbTAsMQkJCTsgeG1tMD0oQ3JMICogRklYKDAuNDAyMDApKQorCisJcGFkZHcJeG1tNix4bW01CisJcGFkZHcJeG1tNCx4bW0yCisJcGFkZHcJeG1tNix4bW01CQk7IHhtbTY9KENiSCAqIEZJWCgxLjc3MjAwKSk9KEItWSlICisJcGFkZHcJeG1tNCx4bW0yCQk7IHhtbTQ9KENiTCAqIEZJWCgxLjc3MjAwKSk9KEItWSlMCisJcGFkZHcJeG1tNyx4bW0xCQk7IHhtbTc9KENySCAqIEZJWCgxLjQwMjAwKSk9KFItWSlICisJcGFkZHcJeG1tMCx4bW0zCQk7IHhtbTA9KENyTCAqIEZJWCgxLjQwMjAwKSk9KFItWSlMCisKKwltb3ZkcWEJWE1NV09SRCBbd2soMCldLCB4bW02CTsgd2soMCk9KEItWSlICisJbW92ZHFhCVhNTVdPUkQgW3drKDEpXSwgeG1tNwk7IHdrKDEpPShSLVkpSAorCisJbW92ZHFhICAgIHhtbTYseG1tNQorCW1vdmRxYSAgICB4bW03LHhtbTIKKwlwdW5wY2tsd2QgeG1tNSx4bW0xCisJcHVucGNraHdkIHhtbTYseG1tMQorCXBtYWRkd2QgICB4bW01LFtHT1RPRkYoZWF4LFBXX01GMDM0NF9GMDI4NSldCisJcG1hZGR3ZCAgIHhtbTYsW0dPVE9GRihlYXgsUFdfTUYwMzQ0X0YwMjg1KV0KKwlwdW5wY2tsd2QgeG1tMix4bW0zCisJcHVucGNraHdkIHhtbTcseG1tMworCXBtYWRkd2QgICB4bW0yLFtHT1RPRkYoZWF4LFBXX01GMDM0NF9GMDI4NSldCisJcG1hZGR3ZCAgIHhtbTcsW0dPVE9GRihlYXgsUFdfTUYwMzQ0X0YwMjg1KV0KKworCXBhZGRkICAgICB4bW01LFtHT1RPRkYoZWF4LFBEX09ORUhBTEYpXQorCXBhZGRkICAgICB4bW02LFtHT1RPRkYoZWF4LFBEX09ORUhBTEYpXQorCXBzcmFkICAgICB4bW01LFNDQUxFQklUUworCXBzcmFkICAgICB4bW02LFNDQUxFQklUUworCXBhZGRkICAgICB4bW0yLFtHT1RPRkYoZWF4LFBEX09ORUhBTEYpXQorCXBhZGRkICAgICB4bW03LFtHT1RPRkYoZWF4LFBEX09ORUhBTEYpXQorCXBzcmFkICAgICB4bW0yLFNDQUxFQklUUworCXBzcmFkICAgICB4bW03LFNDQUxFQklUUworCisJcGFja3NzZHcgIHhtbTUseG1tNgk7IHhtbTU9Q2JIKi1GSVgoMC4zNDQpK0NySCpGSVgoMC4yODUpCisJcGFja3NzZHcgIHhtbTIseG1tNwk7IHhtbTI9Q2JMKi1GSVgoMC4zNDQpK0NyTCpGSVgoMC4yODUpCisJcHN1YncgICAgIHhtbTUseG1tMQk7IHhtbTU9Q2JIKi1GSVgoMC4zNDQpK0NySCotRklYKDAuNzE0KT0oRy1ZKUgKKwlwc3VidyAgICAgeG1tMix4bW0zCTsgeG1tMj1DYkwqLUZJWCgwLjM0NCkrQ3JMKi1GSVgoMC43MTQpPShHLVkpTAorCisJbW92ZHFhCVhNTVdPUkQgW3drKDIpXSwgeG1tNQk7IHdrKDIpPShHLVkpSAorCisJbW92CWFsLDIJCQk7IFljdHIKKwlqbXAJc2hvcnQgLllsb29wXzFzdAorCWFsaWdueAkxNiw3CisKKy5ZbG9vcF8ybmQ6CisJbW92ZHFhCXhtbTAsIFhNTVdPUkQgW3drKDEpXQk7IHhtbTA9KFItWSlICisJbW92ZHFhCXhtbTIsIFhNTVdPUkQgW3drKDIpXQk7IHhtbTI9KEctWSlICisJbW92ZHFhCXhtbTQsIFhNTVdPUkQgW3drKDApXQk7IHhtbTQ9KEItWSlICisJYWxpZ254CTE2LDcKKworLllsb29wXzFzdDoKKwltb3ZkcWEJeG1tNywgWE1NV09SRCBbZXNpXQk7IHhtbTc9WSgwMTIzNDU2Nzg5QUJDREVGKQorCisJcGNtcGVxdwl4bW02LHhtbTYKKwlwc3Jsdwl4bW02LEJZVEVfQklUCQk7IHhtbTY9ezB4RkYgMHgwMCAweEZGIDB4MDAgLi59CisJcGFuZAl4bW02LHhtbTcJCTsgeG1tNj1ZKDAyNDY4QUNFKT1ZRQorCXBzcmx3CXhtbTcsQllURV9CSVQJCTsgeG1tNz1ZKDEzNTc5QkRGKT1ZTworCisJbW92ZHFhCXhtbTEseG1tMAkJOyB4bW0xPXhtbTA9KFItWSkoTC9IKQorCW1vdmRxYQl4bW0zLHhtbTIJCTsgeG1tMz14bW0yPShHLVkpKEwvSCkKKwltb3ZkcWEJeG1tNSx4bW00CQk7IHhtbTU9eG1tND0oQi1ZKShML0gpCisKKwlwYWRkdyAgICAgeG1tMCx4bW02CQk7IHhtbTA9KChSLVkpK1lFKT1SRT1SKDAyNDY4QUNFKQorCXBhZGR3ICAgICB4bW0xLHhtbTcJCTsgeG1tMT0oKFItWSkrWU8pPVJPPVIoMTM1NzlCREYpCisJcGFja3Vzd2IgIHhtbTAseG1tMAkJOyB4bW0wPVIoMDI0NjhBQ0UqKioqKioqKikKKwlwYWNrdXN3YiAgeG1tMSx4bW0xCQk7IHhtbTE9UigxMzU3OUJERioqKioqKioqKQorCisJcGFkZHcgICAgIHhtbTIseG1tNgkJOyB4bW0yPSgoRy1ZKStZRSk9R0U9RygwMjQ2OEFDRSkKKwlwYWRkdyAgICAgeG1tMyx4bW03CQk7IHhtbTM9KChHLVkpK1lPKT1HTz1HKDEzNTc5QkRGKQorCXBhY2t1c3diICB4bW0yLHhtbTIJCTsgeG1tMj1HKDAyNDY4QUNFKioqKioqKiopCisJcGFja3Vzd2IgIHhtbTMseG1tMwkJOyB4bW0zPUcoMTM1NzlCREYqKioqKioqKikKKworCXBhZGR3ICAgICB4bW00LHhtbTYJCTsgeG1tND0oKEItWSkrWUUpPUJFPUIoMDI0NjhBQ0UpCisJcGFkZHcgICAgIHhtbTUseG1tNwkJOyB4bW01PSgoQi1ZKStZTyk9Qk89QigxMzU3OUJERikKKwlwYWNrdXN3YiAgeG1tNCx4bW00CQk7IHhtbTQ9QigwMjQ2OEFDRSoqKioqKioqKQorCXBhY2t1c3diICB4bW01LHhtbTUJCTsgeG1tNT1CKDEzNTc5QkRGKioqKioqKiopCisKKyVpZiBSR0JfUElYRUxTSVpFID09IDMgOyAtLS0tLS0tLS0tLS0tLS0KKworCTsgeG1tQT0oMDAgMDIgMDQgMDYgMDggMEEgMEMgMEUgKiopLCB4bW1CPSgwMSAwMyAwNSAwNyAwOSAwQiAwRCAwRiAqKikKKwk7IHhtbUM9KDEwIDEyIDE0IDE2IDE4IDFBIDFDIDFFICoqKSwgeG1tRD0oMTEgMTMgMTUgMTcgMTkgMUIgMUQgMUYgKiopCisJOyB4bW1FPSgyMCAyMiAyNCAyNiAyOCAyQSAyQyAyRSAqKiksIHhtbUY9KDIxIDIzIDI1IDI3IDI5IDJCIDJEIDJGICoqKQorCTsgeG1tRz0oKiogKiogKiogKiogKiogKiogKiogKiogKiopLCB4bW1IPSgqKiAqKiAqKiAqKiAqKiAqKiAqKiAqKiAqKikKKworCXB1bnBja2xidyB4bW1BLHhtbUMJOyB4bW1BPSgwMCAxMCAwMiAxMiAwNCAxNCAwNiAxNiAwOCAxOCAwQSAxQSAwQyAxQyAwRSAxRSkKKwlwdW5wY2tsYncgeG1tRSx4bW1CCTsgeG1tRT0oMjAgMDEgMjIgMDMgMjQgMDUgMjYgMDcgMjggMDkgMkEgMEIgMkMgMEQgMkUgMEYpCisJcHVucGNrbGJ3IHhtbUQseG1tRgk7IHhtbUQ9KDExIDIxIDEzIDIzIDE1IDI1IDE3IDI3IDE5IDI5IDFCIDJCIDFEIDJEIDFGIDJGKQorCisJbW92ZHFhICAgIHhtbUcseG1tQQorCW1vdmRxYSAgICB4bW1ILHhtbUEKKwlwdW5wY2tsd2QgeG1tQSx4bW1FCTsgeG1tQT0oMDAgMTAgMjAgMDEgMDIgMTIgMjIgMDMgMDQgMTQgMjQgMDUgMDYgMTYgMjYgMDcpCisJcHVucGNraHdkIHhtbUcseG1tRQk7IHhtbUc9KDA4IDE4IDI4IDA5IDBBIDFBIDJBIDBCIDBDIDFDIDJDIDBEIDBFIDFFIDJFIDBGKQorCisJcHNybGRxICAgIHhtbUgsMgk7IHhtbUg9KDAyIDEyIDA0IDE0IDA2IDE2IDA4IDE4IDBBIDFBIDBDIDFDIDBFIDFFIC0tIC0tKQorCXBzcmxkcSAgICB4bW1FLDIJOyB4bW1FPSgyMiAwMyAyNCAwNSAyNiAwNyAyOCAwOSAyQSAwQiAyQyAwRCAyRSAwRiAtLSAtLSkKKworCW1vdmRxYSAgICB4bW1DLHhtbUQKKwltb3ZkcWEgICAgeG1tQix4bW1ECisJcHVucGNrbHdkIHhtbUQseG1tSAk7IHhtbUQ9KDExIDIxIDAyIDEyIDEzIDIzIDA0IDE0IDE1IDI1IDA2IDE2IDE3IDI3IDA4IDE4KQorCXB1bnBja2h3ZCB4bW1DLHhtbUgJOyB4bW1DPSgxOSAyOSAwQSAxQSAxQiAyQiAwQyAxQyAxRCAyRCAwRSAxRSAxRiAyRiAtLSAtLSkKKworCXBzcmxkcSAgICB4bW1CLDIJOyB4bW1CPSgxMyAyMyAxNSAyNSAxNyAyNyAxOSAyOSAxQiAyQiAxRCAyRCAxRiAyRiAtLSAtLSkKKworCW1vdmRxYSAgICB4bW1GLHhtbUUKKwlwdW5wY2tsd2QgeG1tRSx4bW1CCTsgeG1tRT0oMjIgMDMgMTMgMjMgMjQgMDUgMTUgMjUgMjYgMDcgMTcgMjcgMjggMDkgMTkgMjkpCisJcHVucGNraHdkIHhtbUYseG1tQgk7IHhtbUY9KDJBIDBCIDFCIDJCIDJDIDBEIDFEIDJEIDJFIDBGIDFGIDJGIC0tIC0tIC0tIC0tKQorCisJcHNodWZkICAgIHhtbUgseG1tQSwweDRFOyB4bW1IPSgwNCAxNCAyNCAwNSAwNiAxNiAyNiAwNyAwMCAxMCAyMCAwMSAwMiAxMiAyMiAwMykKKwltb3ZkcWEgICAgeG1tQix4bW1FCisJcHVucGNrbGRxIHhtbUEseG1tRAk7IHhtbUE9KDAwIDEwIDIwIDAxIDExIDIxIDAyIDEyIDAyIDEyIDIyIDAzIDEzIDIzIDA0IDE0KQorCXB1bnBja2xkcSB4bW1FLHhtbUgJOyB4bW1FPSgyMiAwMyAxMyAyMyAwNCAxNCAyNCAwNSAyNCAwNSAxNSAyNSAwNiAxNiAyNiAwNykKKwlwdW5wY2toZHEgeG1tRCx4bW1CCTsgeG1tRD0oMTUgMjUgMDYgMTYgMjYgMDcgMTcgMjcgMTcgMjcgMDggMTggMjggMDkgMTkgMjkpCisKKwlwc2h1ZmQgICAgeG1tSCx4bW1HLDB4NEU7IHhtbUg9KDBDIDFDIDJDIDBEIDBFIDFFIDJFIDBGIDA4IDE4IDI4IDA5IDBBIDFBIDJBIDBCKQorCW1vdmRxYSAgICB4bW1CLHhtbUYKKwlwdW5wY2tsZHEgeG1tRyx4bW1DCTsgeG1tRz0oMDggMTggMjggMDkgMTkgMjkgMEEgMUEgMEEgMUEgMkEgMEIgMUIgMkIgMEMgMUMpCisJcHVucGNrbGRxIHhtbUYseG1tSAk7IHhtbUY9KDJBIDBCIDFCIDJCIDBDIDFDIDJDIDBEIDJDIDBEIDFEIDJEIDBFIDFFIDJFIDBGKQorCXB1bnBja2hkcSB4bW1DLHhtbUIJOyB4bW1DPSgxRCAyRCAwRSAxRSAyRSAwRiAxRiAyRiAxRiAyRiAtLSAtLSAtLSAtLSAtLSAtLSkKKworCXB1bnBja2xxZHEgeG1tQSx4bW1FCTsgeG1tQT0oMDAgMTAgMjAgMDEgMTEgMjEgMDIgMTIgMjIgMDMgMTMgMjMgMDQgMTQgMjQgMDUpCisJcHVucGNrbHFkcSB4bW1ELHhtbUcJOyB4bW1EPSgxNSAyNSAwNiAxNiAyNiAwNyAxNyAyNyAwOCAxOCAyOCAwOSAxOSAyOSAwQSAxQSkKKwlwdW5wY2tscWRxIHhtbUYseG1tQwk7IHhtbUY9KDJBIDBCIDFCIDJCIDBDIDFDIDJDIDBEIDFEIDJEIDBFIDFFIDJFIDBGIDFGIDJGKQorCisJY21wCWVjeCwgYnl0ZSBTSVpFT0ZfWE1NV09SRAorCWpiCXNob3J0IC5jb2x1bW5fc3QzMgorCisJdGVzdAllZGksIFNJWkVPRl9YTU1XT1JELTEKKwlqbnoJc2hvcnQgLm91dDEKKwk7IC0tKGFsaWduZWQpLS0tLS0tLS0tLS0tLS0tLS0tLQorCW1vdm50ZHEJWE1NV09SRCBbZWRpKzAqU0laRU9GX1hNTVdPUkRdLCB4bW1BCisJbW92bnRkcQlYTU1XT1JEIFtlZGkrMSpTSVpFT0ZfWE1NV09SRF0sIHhtbUQKKwltb3ZudGRxCVhNTVdPUkQgW2VkaSsyKlNJWkVPRl9YTU1XT1JEXSwgeG1tRgorCWFkZAllZGksIGJ5dGUgUkdCX1BJWEVMU0laRSpTSVpFT0ZfWE1NV09SRAk7IG91dHB0cgorCWptcAlzaG9ydCAub3V0MAorLm91dDE6CTsgLS0odW5hbGlnbmVkKS0tLS0tLS0tLS0tLS0tLS0tCisJcGNtcGVxYiAgICB4bW1ILHhtbUgJCQk7IHhtbUg9KGFsbCAxJ3MpCisJbWFza21vdmRxdSB4bW1BLHhtbUgJCQk7IG1vdm50ZHF1IFhNTVdPUkQgW2VkaV0sIHhtbUEKKwlhZGQJZWRpLCBieXRlIFNJWkVPRl9YTU1XT1JECTsgb3V0cHRyCisJbWFza21vdmRxdSB4bW1ELHhtbUgJCQk7IG1vdm50ZHF1IFhNTVdPUkQgW2VkaV0sIHhtbUQKKwlhZGQJZWRpLCBieXRlIFNJWkVPRl9YTU1XT1JECTsgb3V0cHRyCisJbWFza21vdmRxdSB4bW1GLHhtbUgJCQk7IG1vdm50ZHF1IFhNTVdPUkQgW2VkaV0sIHhtbUYKKwlhZGQJZWRpLCBieXRlIFNJWkVPRl9YTU1XT1JECTsgb3V0cHRyCisub3V0MDoKKwlzdWIJZWN4LCBieXRlIFNJWkVPRl9YTU1XT1JECisJanoJbmVhciAuZW5kY29sdW1uCisKKwlhZGQJZXNpLCBieXRlIFNJWkVPRl9YTU1XT1JECTsgaW5wdHIwCisJZGVjCWFsCQkJOyBZY3RyCisJam56CW5lYXIgLllsb29wXzJuZAorCisJYWRkCWVieCwgYnl0ZSBTSVpFT0ZfWE1NV09SRAk7IGlucHRyMQorCWFkZAllZHgsIGJ5dGUgU0laRU9GX1hNTVdPUkQJOyBpbnB0cjIKKwlqbXAJbmVhciAuY29sdW1ubG9vcAorCWFsaWdueAkxNiw3CisKKy5jb2x1bW5fc3QzMjoKKwlwY21wZXFiCXhtbUgseG1tSAkJCTsgeG1tSD0oYWxsIDEncykKKwlsZWEJZWN4LCBbZWN4K2VjeCoyXQkJOyBpbXVsIGVjeCwgUkdCX1BJWEVMU0laRQorCWNtcAllY3gsIGJ5dGUgMipTSVpFT0ZfWE1NV09SRAorCWpiCXNob3J0IC5jb2x1bW5fc3QxNgorCW1hc2ttb3ZkcXUgeG1tQSx4bW1ICQkJOyBtb3ZudGRxdSBYTU1XT1JEIFtlZGldLCB4bW1BCisJYWRkCWVkaSwgYnl0ZSBTSVpFT0ZfWE1NV09SRAk7IG91dHB0cgorCW1hc2ttb3ZkcXUgeG1tRCx4bW1ICQkJOyBtb3ZudGRxdSBYTU1XT1JEIFtlZGldLCB4bW1ECisJYWRkCWVkaSwgYnl0ZSBTSVpFT0ZfWE1NV09SRAk7IG91dHB0cgorCW1vdmRxYQl4bW1BLHhtbUYKKwlzdWIJZWN4LCBieXRlIDIqU0laRU9GX1hNTVdPUkQKKwlqbXAJc2hvcnQgLmNvbHVtbl9zdDE1CisuY29sdW1uX3N0MTY6CisJY21wCWVjeCwgYnl0ZSBTSVpFT0ZfWE1NV09SRAorCWpiCXNob3J0IC5jb2x1bW5fc3QxNQorCW1hc2ttb3ZkcXUgeG1tQSx4bW1ICQkJOyBtb3ZudGRxdSBYTU1XT1JEIFtlZGldLCB4bW1BCisJYWRkCWVkaSwgYnl0ZSBTSVpFT0ZfWE1NV09SRAk7IG91dHB0cgorCW1vdmRxYQl4bW1BLHhtbUQKKwlzdWIJZWN4LCBieXRlIFNJWkVPRl9YTU1XT1JECisuY29sdW1uX3N0MTU6CisJbW92CWVheCxlY3gKKwl4b3IJZWN4LCBieXRlIDB4MEYKKwlzaGwJZWN4LCAyCisJbW92ZAl4bW1CLGVjeAorCXBzcmxxCXhtbUgsNAorCXBjbXBlcWIJeG1tRSx4bW1FCisJcHNybHEJeG1tSCx4bW1CCisJcHNybHEJeG1tRSx4bW1CCisJcHVucGNrbGJ3IHhtbUUseG1tSAorCTsgLS0tLS0tLS0tLS0tLS0tLQorCW1vdgllY3gsZWRpCisJYW5kCWVjeCwgYnl0ZSBTSVpFT0ZfWE1NV09SRC0xCisJanoJc2hvcnQgLmFkajAKKwlhZGQJZWF4LGVjeAorCWNtcAllYXgsIGJ5dGUgU0laRU9GX1hNTVdPUkQKKwlqYQlzaG9ydCAuYWRqMAorCWFuZAllZGksIGJ5dGUgKC1TSVpFT0ZfWE1NV09SRCkJOyBhbGlnbiB0byAxNi1ieXRlIGJvdW5kYXJ5CisJc2hsCWVjeCwgMwkJCTsgcHNsbGRxIHhtbUEsZWN4ICYgcHNsbGRxIHhtbUUsZWN4CisJbW92ZHFhCXhtbUcseG1tQQorCW1vdmRxYQl4bW1DLHhtbUUKKwlwc2xsZHEJeG1tQSwgU0laRU9GX1hNTVdPUkQvMgorCXBzbGxkcQl4bW1FLCBTSVpFT0ZfWE1NV09SRC8yCisJbW92ZAl4bW1ELGVjeAorCXN1YgllY3gsIGJ5dGUgKFNJWkVPRl9YTU1XT1JELzIpKkJZVEVfQklUCisJamIJc2hvcnQgLmFkajEKKwltb3ZkCXhtbUYsZWN4CisJcHNsbHEJeG1tQSx4bW1GCisJcHNsbHEJeG1tRSx4bW1GCisJam1wCXNob3J0IC5hZGowCisuYWRqMToJbmVnCWVjeAorCW1vdmQJeG1tRixlY3gKKwlwc3JscQl4bW1BLHhtbUYKKwlwc3JscQl4bW1FLHhtbUYKKwlwc2xscQl4bW1HLHhtbUQKKwlwc2xscQl4bW1DLHhtbUQKKwlwb3IJeG1tQSx4bW1HCisJcG9yCXhtbUUseG1tQworLmFkajA6CTsgLS0tLS0tLS0tLS0tLS0tLQorCW1hc2ttb3ZkcXUgeG1tQSx4bW1FCQkJOyBtb3ZudGRxdSBYTU1XT1JEIFtlZGldLCB4bW1BCisKKyVlbHNlIDsgUkdCX1BJWEVMU0laRSA9PSA0IDsgLS0tLS0tLS0tLS0KKworJWlmZGVmIFJHQlhfRklMTEVSXzBYRkYKKwlwY21wZXFiICAgeG1tNix4bW02CQk7IHhtbTY9WEU9WCgwMjQ2OEFDRSoqKioqKioqKQorCXBjbXBlcWIgICB4bW03LHhtbTcJCTsgeG1tNz1YTz1YKDEzNTc5QkRGKioqKioqKiopCislZWxzZQorCXB4b3IgICAgICB4bW02LHhtbTYJCTsgeG1tNj1YRT1YKDAyNDY4QUNFKioqKioqKiopCisJcHhvciAgICAgIHhtbTcseG1tNwkJOyB4bW03PVhPPVgoMTM1NzlCREYqKioqKioqKikKKyVlbmRpZgorCTsgeG1tQT0oMDAgMDIgMDQgMDYgMDggMEEgMEMgMEUgKiopLCB4bW1CPSgwMSAwMyAwNSAwNyAwOSAwQiAwRCAwRiAqKikKKwk7IHhtbUM9KDEwIDEyIDE0IDE2IDE4IDFBIDFDIDFFICoqKSwgeG1tRD0oMTEgMTMgMTUgMTcgMTkgMUIgMUQgMUYgKiopCisJOyB4bW1FPSgyMCAyMiAyNCAyNiAyOCAyQSAyQyAyRSAqKiksIHhtbUY9KDIxIDIzIDI1IDI3IDI5IDJCIDJEIDJGICoqKQorCTsgeG1tRz0oMzAgMzIgMzQgMzYgMzggM0EgM0MgM0UgKiopLCB4bW1IPSgzMSAzMyAzNSAzNyAzOSAzQiAzRCAzRiAqKikKKworCXB1bnBja2xidyB4bW1BLHhtbUMJOyB4bW1BPSgwMCAxMCAwMiAxMiAwNCAxNCAwNiAxNiAwOCAxOCAwQSAxQSAwQyAxQyAwRSAxRSkKKwlwdW5wY2tsYncgeG1tRSx4bW1HCTsgeG1tRT0oMjAgMzAgMjIgMzIgMjQgMzQgMjYgMzYgMjggMzggMkEgM0EgMkMgM0MgMkUgM0UpCisJcHVucGNrbGJ3IHhtbUIseG1tRAk7IHhtbUI9KDAxIDExIDAzIDEzIDA1IDE1IDA3IDE3IDA5IDE5IDBCIDFCIDBEIDFEIDBGIDFGKQorCXB1bnBja2xidyB4bW1GLHhtbUgJOyB4bW1GPSgyMSAzMSAyMyAzMyAyNSAzNSAyNyAzNyAyOSAzOSAyQiAzQiAyRCAzRCAyRiAzRikKKworCW1vdmRxYSAgICB4bW1DLHhtbUEKKwlwdW5wY2tsd2QgeG1tQSx4bW1FCTsgeG1tQT0oMDAgMTAgMjAgMzAgMDIgMTIgMjIgMzIgMDQgMTQgMjQgMzQgMDYgMTYgMjYgMzYpCisJcHVucGNraHdkIHhtbUMseG1tRQk7IHhtbUM9KDA4IDE4IDI4IDM4IDBBIDFBIDJBIDNBIDBDIDFDIDJDIDNDIDBFIDFFIDJFIDNFKQorCW1vdmRxYSAgICB4bW1HLHhtbUIKKwlwdW5wY2tsd2QgeG1tQix4bW1GCTsgeG1tQj0oMDEgMTEgMjEgMzEgMDMgMTMgMjMgMzMgMDUgMTUgMjUgMzUgMDcgMTcgMjcgMzcpCisJcHVucGNraHdkIHhtbUcseG1tRgk7IHhtbUc9KDA5IDE5IDI5IDM5IDBCIDFCIDJCIDNCIDBEIDFEIDJEIDNEIDBGIDFGIDJGIDNGKQorCisJbW92ZHFhICAgIHhtbUQseG1tQQorCXB1bnBja2xkcSB4bW1BLHhtbUIJOyB4bW1BPSgwMCAxMCAyMCAzMCAwMSAxMSAyMSAzMSAwMiAxMiAyMiAzMiAwMyAxMyAyMyAzMykKKwlwdW5wY2toZHEgeG1tRCx4bW1CCTsgeG1tRD0oMDQgMTQgMjQgMzQgMDUgMTUgMjUgMzUgMDYgMTYgMjYgMzYgMDcgMTcgMjcgMzcpCisJbW92ZHFhICAgIHhtbUgseG1tQworCXB1bnBja2xkcSB4bW1DLHhtbUcJOyB4bW1DPSgwOCAxOCAyOCAzOCAwOSAxOSAyOSAzOSAwQSAxQSAyQSAzQSAwQiAxQiAyQiAzQikKKwlwdW5wY2toZHEgeG1tSCx4bW1HCTsgeG1tSD0oMEMgMUMgMkMgM0MgMEQgMUQgMkQgM0QgMEUgMUUgMkUgM0UgMEYgMUYgMkYgM0YpCisKKwljbXAJZWN4LCBieXRlIFNJWkVPRl9YTU1XT1JECisJamIJc2hvcnQgLmNvbHVtbl9zdDMyCisKKwl0ZXN0CWVkaSwgU0laRU9GX1hNTVdPUkQtMQorCWpueglzaG9ydCAub3V0MQorCTsgLS0oYWxpZ25lZCktLS0tLS0tLS0tLS0tLS0tLS0tCisJbW92bnRkcQlYTU1XT1JEIFtlZGkrMCpTSVpFT0ZfWE1NV09SRF0sIHhtbUEKKwltb3ZudGRxCVhNTVdPUkQgW2VkaSsxKlNJWkVPRl9YTU1XT1JEXSwgeG1tRAorCW1vdm50ZHEJWE1NV09SRCBbZWRpKzIqU0laRU9GX1hNTVdPUkRdLCB4bW1DCisJbW92bnRkcQlYTU1XT1JEIFtlZGkrMypTSVpFT0ZfWE1NV09SRF0sIHhtbUgKKwlhZGQJZWRpLCBieXRlIFJHQl9QSVhFTFNJWkUqU0laRU9GX1hNTVdPUkQJOyBvdXRwdHIKKwlqbXAJc2hvcnQgLm91dDAKKy5vdXQxOgk7IC0tKHVuYWxpZ25lZCktLS0tLS0tLS0tLS0tLS0tLQorCXBjbXBlcWIgICAgeG1tRSx4bW1FCQkJOyB4bW1FPShhbGwgMSdzKQorCW1hc2ttb3ZkcXUgeG1tQSx4bW1FCQkJOyBtb3ZudGRxdSBYTU1XT1JEIFtlZGldLCB4bW1BCisJYWRkCWVkaSwgYnl0ZSBTSVpFT0ZfWE1NV09SRAk7IG91dHB0cgorCW1hc2ttb3ZkcXUgeG1tRCx4bW1FCQkJOyBtb3ZudGRxdSBYTU1XT1JEIFtlZGldLCB4bW1ECisJYWRkCWVkaSwgYnl0ZSBTSVpFT0ZfWE1NV09SRAk7IG91dHB0cgorCW1hc2ttb3ZkcXUgeG1tQyx4bW1FCQkJOyBtb3ZudGRxdSBYTU1XT1JEIFtlZGldLCB4bW1DCisJYWRkCWVkaSwgYnl0ZSBTSVpFT0ZfWE1NV09SRAk7IG91dHB0cgorCW1hc2ttb3ZkcXUgeG1tSCx4bW1FCQkJOyBtb3ZudGRxdSBYTU1XT1JEIFtlZGldLCB4bW1ICisJYWRkCWVkaSwgYnl0ZSBTSVpFT0ZfWE1NV09SRAk7IG91dHB0cgorLm91dDA6CisJc3ViCWVjeCwgYnl0ZSBTSVpFT0ZfWE1NV09SRAorCWp6CW5lYXIgLmVuZGNvbHVtbgorCisJYWRkCWVzaSwgYnl0ZSBTSVpFT0ZfWE1NV09SRAk7IGlucHRyMAorCWRlYwlhbAkJCTsgWWN0cgorCWpuegluZWFyIC5ZbG9vcF8ybmQKKworCWFkZAllYngsIGJ5dGUgU0laRU9GX1hNTVdPUkQJOyBpbnB0cjEKKwlhZGQJZWR4LCBieXRlIFNJWkVPRl9YTU1XT1JECTsgaW5wdHIyCisJam1wCW5lYXIgLmNvbHVtbmxvb3AKKwlhbGlnbngJMTYsNworCisuY29sdW1uX3N0MzI6CisJcGNtcGVxYgl4bW1FLHhtbUUJCQk7IHhtbUU9KGFsbCAxJ3MpCisJY21wCWVjeCwgYnl0ZSBTSVpFT0ZfWE1NV09SRC8yCisJamIJc2hvcnQgLmNvbHVtbl9zdDE2CisJbWFza21vdmRxdSB4bW1BLHhtbUUJCQk7IG1vdm50ZHF1IFhNTVdPUkQgW2VkaV0sIHhtbUEKKwlhZGQJZWRpLCBieXRlIFNJWkVPRl9YTU1XT1JECTsgb3V0cHRyCisJbWFza21vdmRxdSB4bW1ELHhtbUUJCQk7IG1vdm50ZHF1IFhNTVdPUkQgW2VkaV0sIHhtbUQKKwlhZGQJZWRpLCBieXRlIFNJWkVPRl9YTU1XT1JECTsgb3V0cHRyCisJbW92ZHFhCXhtbUEseG1tQworCW1vdmRxYQl4bW1ELHhtbUgKKwlzdWIJZWN4LCBieXRlIFNJWkVPRl9YTU1XT1JELzIKKy5jb2x1bW5fc3QxNjoKKwljbXAJZWN4LCBieXRlIFNJWkVPRl9YTU1XT1JELzQKKwlqYglzaG9ydCAuY29sdW1uX3N0MTUKKwltYXNrbW92ZHF1IHhtbUEseG1tRQkJCTsgbW92bnRkcXUgWE1NV09SRCBbZWRpXSwgeG1tQQorCWFkZAllZGksIGJ5dGUgU0laRU9GX1hNTVdPUkQJOyBvdXRwdHIKKwltb3ZkcWEJeG1tQSx4bW1ECisJc3ViCWVjeCwgYnl0ZSBTSVpFT0ZfWE1NV09SRC80CisuY29sdW1uX3N0MTU6CisJY21wCWVjeCwgYnl0ZSBTSVpFT0ZfWE1NV09SRC8xNgorCWpiCXNob3J0IC5lbmRjb2x1bW4KKwltb3YJZWF4LGVjeAorCXhvcgllY3gsIGJ5dGUgMHgwMworCWluYwllY3gKKwlzaGwJZWN4LCA0CisJbW92ZAl4bW1GLGVjeAorCXBzcmxxCXhtbUUseG1tRgorCXB1bnBja2xidyB4bW1FLHhtbUUKKwk7IC0tLS0tLS0tLS0tLS0tLS0KKwltb3YJZWN4LGVkaQorCWFuZAllY3gsIGJ5dGUgU0laRU9GX1hNTVdPUkQtMQorCWp6CXNob3J0IC5hZGowCisJbGVhCWVheCwgW2VjeCtlYXgqNF0JOyBSR0JfUElYRUxTSVpFCisJY21wCWVheCwgYnl0ZSBTSVpFT0ZfWE1NV09SRAorCWphCXNob3J0IC5hZGowCisJYW5kCWVkaSwgYnl0ZSAoLVNJWkVPRl9YTU1XT1JEKQk7IGFsaWduIHRvIDE2LWJ5dGUgYm91bmRhcnkKKwlzaGwJZWN4LCAzCQkJOyBwc2xsZHEgeG1tQSxlY3ggJiBwc2xsZHEgeG1tRSxlY3gKKwltb3ZkcWEJeG1tQix4bW1BCisJbW92ZHFhCXhtbUcseG1tRQorCXBzbGxkcQl4bW1BLCBTSVpFT0ZfWE1NV09SRC8yCisJcHNsbGRxCXhtbUUsIFNJWkVPRl9YTU1XT1JELzIKKwltb3ZkCXhtbUMsZWN4CisJc3ViCWVjeCwgYnl0ZSAoU0laRU9GX1hNTVdPUkQvMikqQllURV9CSVQKKwlqYglzaG9ydCAuYWRqMQorCW1vdmQJeG1tSCxlY3gKKwlwc2xscQl4bW1BLHhtbUgKKwlwc2xscQl4bW1FLHhtbUgKKwlqbXAJc2hvcnQgLmFkajAKKy5hZGoxOgluZWcJZWN4CisJbW92ZAl4bW1ILGVjeAorCXBzcmxxCXhtbUEseG1tSAorCXBzcmxxCXhtbUUseG1tSAorCXBzbGxxCXhtbUIseG1tQworCXBzbGxxCXhtbUcseG1tQworCXBvcgl4bW1BLHhtbUIKKwlwb3IJeG1tRSx4bW1HCisuYWRqMDoJOyAtLS0tLS0tLS0tLS0tLS0tCisJbWFza21vdmRxdSB4bW1BLHhtbUUJCQk7IG1vdm50ZHF1IFhNTVdPUkQgW2VkaV0sIHhtbUEKKworJWVuZGlmIDsgUkdCX1BJWEVMU0laRSA7IC0tLS0tLS0tLS0tLS0tLQorCisuZW5kY29sdW1uOgorCXNmZW5jZQkJOyBmbHVzaCB0aGUgd3JpdGUgYnVmZmVyCisKKy5yZXR1cm46CisJcG9wCWVkaQorCXBvcAllc2kKKzsJcG9wCWVkeAkJOyBuZWVkIG5vdCBiZSBwcmVzZXJ2ZWQKKzsJcG9wCWVjeAkJOyBuZWVkIG5vdCBiZSBwcmVzZXJ2ZWQKKwlwb3AJZWJ4CisJbW92CWVzcCxlYnAJCTsgZXNwIDwtIGFsaWduZWQgZWJwCisJcG9wCWVzcAkJOyBlc3AgPC0gb3JpZ2luYWwgZWJwCisJcG9wCWVicAorCXJldAorCis7IC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCis7Cis7IFVwc2FtcGxlIGFuZCBjb2xvciBjb252ZXJ0IGZvciB0aGUgY2FzZSBvZiAyOjEgaG9yaXpvbnRhbCBhbmQgMjoxIHZlcnRpY2FsLgorOworOyBHTE9CQUwodm9pZCkKKzsganNpbWRfaDJ2Ml9tZXJnZWRfdXBzYW1wbGVfc3NlMiAoSkRJTUVOU0lPTiBvdXRwdXRfd2lkdGgsCis7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEpTQU1QSU1BR0UgaW5wdXRfYnVmLAorOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBKRElNRU5TSU9OIGluX3Jvd19ncm91cF9jdHIsCis7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEpTQU1QQVJSQVkgb3V0cHV0X2J1Zik7Cis7CisKKyVkZWZpbmUgb3V0cHV0X3dpZHRoKGIpCShiKSs4CQkJOyBKRElNRU5TSU9OIG91dHB1dF93aWR0aAorJWRlZmluZSBpbnB1dF9idWYoYikJCShiKSsxMgkJOyBKU0FNUElNQUdFIGlucHV0X2J1ZgorJWRlZmluZSBpbl9yb3dfZ3JvdXBfY3RyKGIpCShiKSsxNgkJOyBKRElNRU5TSU9OIGluX3Jvd19ncm91cF9jdHIKKyVkZWZpbmUgb3V0cHV0X2J1ZihiKQkJKGIpKzIwCQk7IEpTQU1QQVJSQVkgb3V0cHV0X2J1ZgorCisJYWxpZ24JMTYKKwlnbG9iYWwJRVhUTihqc2ltZF9oMnYyX21lcmdlZF91cHNhbXBsZV9zc2UyKQorCitFWFROKGpzaW1kX2gydjJfbWVyZ2VkX3Vwc2FtcGxlX3NzZTIpOgorCXB1c2gJZWJwCisJbW92CWVicCxlc3AKKwlwdXNoCWVieAorOwlwdXNoCWVjeAkJOyBuZWVkIG5vdCBiZSBwcmVzZXJ2ZWQKKzsJcHVzaAllZHgJCTsgbmVlZCBub3QgYmUgcHJlc2VydmVkCisJcHVzaAllc2kKKwlwdXNoCWVkaQorCisJbW92CWVheCwgUE9JTlRFUiBbb3V0cHV0X3dpZHRoKGVicCldCisKKwltb3YJZWRpLCBKU0FNUElNQUdFIFtpbnB1dF9idWYoZWJwKV0KKwltb3YJZWN4LCBKRElNRU5TSU9OIFtpbl9yb3dfZ3JvdXBfY3RyKGVicCldCisJbW92CWVzaSwgSlNBTVBBUlJBWSBbZWRpKzAqU0laRU9GX0pTQU1QQVJSQVldCisJbW92CWVieCwgSlNBTVBBUlJBWSBbZWRpKzEqU0laRU9GX0pTQU1QQVJSQVldCisJbW92CWVkeCwgSlNBTVBBUlJBWSBbZWRpKzIqU0laRU9GX0pTQU1QQVJSQVldCisJbW92CWVkaSwgSlNBTVBBUlJBWSBbb3V0cHV0X2J1ZihlYnApXQorCWxlYQllc2ksIFtlc2krZWN4KlNJWkVPRl9KU0FNUFJPV10KKworCXB1c2gJZWR4CQkJOyBpbnB0cjIKKwlwdXNoCWVieAkJCTsgaW5wdHIxCisJcHVzaAllc2kJCQk7IGlucHRyMDAKKwltb3YJZWJ4LGVzcAorCisJcHVzaAllZGkJCQk7IG91dHB1dF9idWYgKG91dHB0cjApCisJcHVzaAllY3gJCQk7IGluX3Jvd19ncm91cF9jdHIKKwlwdXNoCWVieAkJCTsgaW5wdXRfYnVmCisJcHVzaAllYXgJCQk7IG91dHB1dF93aWR0aAorCisJY2FsbAluZWFyIEVYVE4oanNpbWRfaDJ2MV9tZXJnZWRfdXBzYW1wbGVfc3NlMikKKworCWFkZAllc2ksIGJ5dGUgU0laRU9GX0pTQU1QUk9XCTsgaW5wdHIwMQorCWFkZAllZGksIGJ5dGUgU0laRU9GX0pTQU1QUk9XCTsgb3V0cHRyMQorCW1vdglQT0lOVEVSIFtlYngrMCpTSVpFT0ZfUE9JTlRFUl0sIGVzaQorCW1vdglQT0lOVEVSIFtlYngtMSpTSVpFT0ZfUE9JTlRFUl0sIGVkaQorCisJY2FsbAluZWFyIEVYVE4oanNpbWRfaDJ2MV9tZXJnZWRfdXBzYW1wbGVfc3NlMikKKworCWFkZAllc3AsIGJ5dGUgNypTSVpFT0ZfRFdPUkQKKworCXBvcAllZGkKKwlwb3AJZXNpCis7CXBvcAllZHgJCTsgbmVlZCBub3QgYmUgcHJlc2VydmVkCis7CXBvcAllY3gJCTsgbmVlZCBub3QgYmUgcHJlc2VydmVkCisJcG9wCWVieAorCXBvcAllYnAKKwlyZXQKKworOyBGb3Igc29tZSByZWFzb24sIHRoZSBPUyBYIGxpbmtlciBkb2VzIG5vdCBob25vciB0aGUgcmVxdWVzdCB0byBhbGlnbiB0aGUKKzsgc2VnbWVudCB1bmxlc3Mgd2UgZG8gdGhpcy4KKwlhbGlnbgkxNgpkaWZmIC0tZ2l0IGEvc2ltZC9qZHNhbW1teC5hc20gYi9zaW1kL2pkc2FtbW14LmFzbQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jMDllNWI5Ci0tLSAvZGV2L251bGwKKysrIGIvc2ltZC9qZHNhbW1teC5hc20KQEAgLTAsMCArMSw3MzcgQEAKKzsKKzsgamRzYW1tbXguYXNtIC0gdXBzYW1wbGluZyAoTU1YKQorOworOyBDb3B5cmlnaHQgMjAwOSBQaWVycmUgT3NzbWFuIDxvc3NtYW5AY2VuZGlvLnNlPiBmb3IgQ2VuZGlvIEFCCis7Cis7IEJhc2VkIG9uCis7IHg4NiBTSU1EIGV4dGVuc2lvbiBmb3IgSUpHIEpQRUcgbGlicmFyeQorOyBDb3B5cmlnaHQgKEMpIDE5OTktMjAwNiwgTUlZQVNBS0EgTWFzYXJ1LgorOyBGb3IgY29uZGl0aW9ucyBvZiBkaXN0cmlidXRpb24gYW5kIHVzZSwgc2VlIGNvcHlyaWdodCBub3RpY2UgaW4ganNpbWRleHQuaW5jCis7Cis7IFRoaXMgZmlsZSBzaG91bGQgYmUgYXNzZW1ibGVkIHdpdGggTkFTTSAoTmV0d2lkZSBBc3NlbWJsZXIpLAorOyBjYW4gKm5vdCogYmUgYXNzZW1ibGVkIHdpdGggTWljcm9zb2Z0J3MgTUFTTSBvciBhbnkgY29tcGF0aWJsZQorOyBhc3NlbWJsZXIgKGluY2x1ZGluZyBCb3JsYW5kJ3MgVHVyYm8gQXNzZW1ibGVyKS4KKzsgTkFTTSBpcyBhdmFpbGFibGUgZnJvbSBodHRwOi8vbmFzbS5zb3VyY2Vmb3JnZS5uZXQvIG9yCis7IGh0dHA6Ly9zb3VyY2Vmb3JnZS5uZXQvcHJvamVjdC9zaG93ZmlsZXMucGhwP2dyb3VwX2lkPTYyMDgKKzsKKzsgW1RBQjhdCisKKyVpbmNsdWRlICJqc2ltZGV4dC5pbmMiCisKKzsgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKwlTRUNUSU9OCVNFR19DT05TVAorCisJYWxpZ256CTE2CisJZ2xvYmFsCUVYVE4oamNvbnN0X2ZhbmN5X3Vwc2FtcGxlX21teCkKKworRVhUTihqY29uc3RfZmFuY3lfdXBzYW1wbGVfbW14KToKKworUFdfT05FCQl0aW1lcyA0IGR3ICAxCitQV19UV08JCXRpbWVzIDQgZHcgIDIKK1BXX1RIUkVFCXRpbWVzIDQgZHcgIDMKK1BXX1NFVkVOCXRpbWVzIDQgZHcgIDcKK1BXX0VJR0hUCXRpbWVzIDQgZHcgIDgKKworCWFsaWduegkxNgorCis7IC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisJU0VDVElPTglTRUdfVEVYVAorCUJJVFMJMzIKKzsKKzsgRmFuY3kgcHJvY2Vzc2luZyBmb3IgdGhlIGNvbW1vbiBjYXNlIG9mIDI6MSBob3Jpem9udGFsIGFuZCAxOjEgdmVydGljYWwuCis7Cis7IFRoZSB1cHNhbXBsaW5nIGFsZ29yaXRobSBpcyBsaW5lYXIgaW50ZXJwb2xhdGlvbiBiZXR3ZWVuIHBpeGVsIGNlbnRlcnMsCis7IGFsc28ga25vd24gYXMgYSAidHJpYW5nbGUgZmlsdGVyIi4gIFRoaXMgaXMgYSBnb29kIGNvbXByb21pc2UgYmV0d2VlbgorOyBzcGVlZCBhbmQgdmlzdWFsIHF1YWxpdHkuICBUaGUgY2VudGVycyBvZiB0aGUgb3V0cHV0IHBpeGVscyBhcmUgMS80IGFuZCAzLzQKKzsgb2YgdGhlIHdheSBiZXR3ZWVuIGlucHV0IHBpeGVsIGNlbnRlcnMuCis7Cis7IEdMT0JBTCh2b2lkKQorOyBqc2ltZF9oMnYxX2ZhbmN5X3Vwc2FtcGxlX21teCAoaW50IG1heF92X3NhbXBfZmFjdG9yLAorOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSkRJTUVOU0lPTiBkb3duc2FtcGxlZF93aWR0aCwKKzsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEpTQU1QQVJSQVkgaW5wdXRfZGF0YSwKKzsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEpTQU1QQVJSQVkgKiBvdXRwdXRfZGF0YV9wdHIpOworOworCislZGVmaW5lIG1heF92X3NhbXAoYikJCShiKSs4CQkJOyBpbnQgbWF4X3Zfc2FtcF9mYWN0b3IKKyVkZWZpbmUgZG93bnNhbXBfd2lkdGgoYikJKGIpKzEyCTsgSkRJTUVOU0lPTiBkb3duc2FtcGxlZF93aWR0aAorJWRlZmluZSBpbnB1dF9kYXRhKGIpCQkoYikrMTYJCTsgSlNBTVBBUlJBWSBpbnB1dF9kYXRhCislZGVmaW5lIG91dHB1dF9kYXRhX3B0cihiKQkoYikrMjAJCTsgSlNBTVBBUlJBWSAqIG91dHB1dF9kYXRhX3B0cgorCisJYWxpZ24JMTYKKwlnbG9iYWwJRVhUTihqc2ltZF9oMnYxX2ZhbmN5X3Vwc2FtcGxlX21teCkKKworRVhUTihqc2ltZF9oMnYxX2ZhbmN5X3Vwc2FtcGxlX21teCk6CisJcHVzaAllYnAKKwltb3YJZWJwLGVzcAorCXB1c2hwaWMJZWJ4Cis7CXB1c2gJZWN4CQk7IG5lZWQgbm90IGJlIHByZXNlcnZlZAorOwlwdXNoCWVkeAkJOyBuZWVkIG5vdCBiZSBwcmVzZXJ2ZWQKKwlwdXNoCWVzaQorCXB1c2gJZWRpCisKKwlnZXRfR09UCWVieAkJOyBnZXQgR09UIGFkZHJlc3MKKworCW1vdgllYXgsIEpESU1FTlNJT04gW2Rvd25zYW1wX3dpZHRoKGVicCldICA7IGNvbGN0cgorCXRlc3QJZWF4LGVheAorCWp6CW5lYXIgLnJldHVybgorCisJbW92CWVjeCwgSU5UIFttYXhfdl9zYW1wKGVicCldCTsgcm93Y3RyCisJdGVzdAllY3gsZWN4CisJanoJbmVhciAucmV0dXJuCisKKwltb3YJZXNpLCBKU0FNUEFSUkFZIFtpbnB1dF9kYXRhKGVicCldCTsgaW5wdXRfZGF0YQorCW1vdgllZGksIFBPSU5URVIgW291dHB1dF9kYXRhX3B0cihlYnApXQorCW1vdgllZGksIEpTQU1QQVJSQVkgW2VkaV0JCQk7IG91dHB1dF9kYXRhCisJYWxpZ254CTE2LDcKKy5yb3dsb29wOgorCXB1c2gJZWF4CQkJOyBjb2xjdHIKKwlwdXNoCWVkaQorCXB1c2gJZXNpCisKKwltb3YJZXNpLCBKU0FNUFJPVyBbZXNpXQk7IGlucHRyCisJbW92CWVkaSwgSlNBTVBST1cgW2VkaV0JOyBvdXRwdHIKKworCXRlc3QJZWF4LCBTSVpFT0ZfTU1XT1JELTEKKwlqeglzaG9ydCAuc2tpcAorCW1vdglkbCwgSlNBTVBMRSBbZXNpKyhlYXgtMSkqU0laRU9GX0pTQU1QTEVdCisJbW92CUpTQU1QTEUgW2VzaStlYXgqU0laRU9GX0pTQU1QTEVdLCBkbAk7IGluc2VydCBhIGR1bW15IHNhbXBsZQorLnNraXA6CisJcHhvcgltbTAsbW0wCQkJOyBtbTA9KGFsbCAwJ3MpCisJcGNtcGVxYgltbTcsbW03CisJcHNybHEJbW03LChTSVpFT0ZfTU1XT1JELTEpKkJZVEVfQklUCisJcGFuZAltbTcsIE1NV09SRCBbZXNpKzAqU0laRU9GX01NV09SRF0KKworCWFkZAllYXgsIGJ5dGUgU0laRU9GX01NV09SRC0xCisJYW5kCWVheCwgYnl0ZSAtU0laRU9GX01NV09SRAorCWNtcAllYXgsIGJ5dGUgU0laRU9GX01NV09SRAorCWphCXNob3J0IC5jb2x1bW5sb29wCisJYWxpZ254CTE2LDcKKworLmNvbHVtbmxvb3BfbGFzdDoKKwlwY21wZXFiCW1tNixtbTYKKwlwc2xscQltbTYsKFNJWkVPRl9NTVdPUkQtMSkqQllURV9CSVQKKwlwYW5kCW1tNiwgTU1XT1JEIFtlc2krMCpTSVpFT0ZfTU1XT1JEXQorCWptcAlzaG9ydCAudXBzYW1wbGUKKwlhbGlnbngJMTYsNworCisuY29sdW1ubG9vcDoKKwltb3ZxCW1tNiwgTU1XT1JEIFtlc2krMSpTSVpFT0ZfTU1XT1JEXQorCXBzbGxxCW1tNiwoU0laRU9GX01NV09SRC0xKSpCWVRFX0JJVAorCisudXBzYW1wbGU6CisJbW92cQltbTEsIE1NV09SRCBbZXNpKzAqU0laRU9GX01NV09SRF0KKwltb3ZxCW1tMixtbTEKKwltb3ZxCW1tMyxtbTEJCQk7IG1tMT0oIDAgMSAyIDMgNCA1IDYgNykKKwlwc2xscQltbTIsQllURV9CSVQJCTsgbW0yPSggLSAwIDEgMiAzIDQgNSA2KQorCXBzcmxxCW1tMyxCWVRFX0JJVAkJOyBtbTM9KCAxIDIgMyA0IDUgNiA3IC0pCisKKwlwb3IJbW0yLG1tNwkJCTsgbW0yPSgtMSAwIDEgMiAzIDQgNSA2KQorCXBvcgltbTMsbW02CQkJOyBtbTM9KCAxIDIgMyA0IDUgNiA3IDgpCisKKwltb3ZxCW1tNyxtbTEKKwlwc3JscQltbTcsKFNJWkVPRl9NTVdPUkQtMSkqQllURV9CSVQJOyBtbTc9KCA3IC0gLSAtIC0gLSAtIC0pCisKKwltb3ZxICAgICAgbW00LG1tMQorCXB1bnBja2xidyBtbTEsbW0wCQk7IG1tMT0oIDAgMSAyIDMpCisJcHVucGNraGJ3IG1tNCxtbTAJCTsgbW00PSggNCA1IDYgNykKKwltb3ZxICAgICAgbW01LG1tMgorCXB1bnBja2xidyBtbTIsbW0wCQk7IG1tMj0oLTEgMCAxIDIpCisJcHVucGNraGJ3IG1tNSxtbTAJCTsgbW01PSggMyA0IDUgNikKKwltb3ZxICAgICAgbW02LG1tMworCXB1bnBja2xidyBtbTMsbW0wCQk7IG1tMz0oIDEgMiAzIDQpCisJcHVucGNraGJ3IG1tNixtbTAJCTsgbW02PSggNSA2IDcgOCkKKworCXBtdWxsdwltbTEsW0dPVE9GRihlYngsUFdfVEhSRUUpXQorCXBtdWxsdwltbTQsW0dPVE9GRihlYngsUFdfVEhSRUUpXQorCXBhZGR3CW1tMixbR09UT0ZGKGVieCxQV19PTkUpXQorCXBhZGR3CW1tNSxbR09UT0ZGKGVieCxQV19PTkUpXQorCXBhZGR3CW1tMyxbR09UT0ZGKGVieCxQV19UV08pXQorCXBhZGR3CW1tNixbR09UT0ZGKGVieCxQV19UV08pXQorCisJcGFkZHcJbW0yLG1tMQorCXBhZGR3CW1tNSxtbTQKKwlwc3JsdwltbTIsMgkJCTsgbW0yPU91dExFPSggMCAgMiAgNCAgNikKKwlwc3JsdwltbTUsMgkJCTsgbW01PU91dEhFPSggOCAxMCAxMiAxNCkKKwlwYWRkdwltbTMsbW0xCisJcGFkZHcJbW02LG1tNAorCXBzcmx3CW1tMywyCQkJOyBtbTM9T3V0TE89KCAxICAzICA1ICA3KQorCXBzcmx3CW1tNiwyCQkJOyBtbTY9T3V0SE89KCA5IDExIDEzIDE1KQorCisJcHNsbHcJbW0zLEJZVEVfQklUCisJcHNsbHcJbW02LEJZVEVfQklUCisJcG9yCW1tMixtbTMJCQk7IG1tMj1PdXRMPSggMCAgMSAgMiAgMyAgNCAgNSAgNiAgNykKKwlwb3IJbW01LG1tNgkJCTsgbW01PU91dEg9KCA4ICA5IDEwIDExIDEyIDEzIDE0IDE1KQorCisJbW92cQlNTVdPUkQgW2VkaSswKlNJWkVPRl9NTVdPUkRdLCBtbTIKKwltb3ZxCU1NV09SRCBbZWRpKzEqU0laRU9GX01NV09SRF0sIG1tNQorCisJc3ViCWVheCwgYnl0ZSBTSVpFT0ZfTU1XT1JECisJYWRkCWVzaSwgYnl0ZSAxKlNJWkVPRl9NTVdPUkQJOyBpbnB0cgorCWFkZAllZGksIGJ5dGUgMipTSVpFT0ZfTU1XT1JECTsgb3V0cHRyCisJY21wCWVheCwgYnl0ZSBTSVpFT0ZfTU1XT1JECisJamEJbmVhciAuY29sdW1ubG9vcAorCXRlc3QJZWF4LGVheAorCWpuegluZWFyIC5jb2x1bW5sb29wX2xhc3QKKworCXBvcAllc2kKKwlwb3AJZWRpCisJcG9wCWVheAorCisJYWRkCWVzaSwgYnl0ZSBTSVpFT0ZfSlNBTVBST1cJOyBpbnB1dF9kYXRhCisJYWRkCWVkaSwgYnl0ZSBTSVpFT0ZfSlNBTVBST1cJOyBvdXRwdXRfZGF0YQorCWRlYwllY3gJCQkJOyByb3djdHIKKwlqZwluZWFyIC5yb3dsb29wCisKKwllbW1zCQk7IGVtcHR5IE1NWCBzdGF0ZQorCisucmV0dXJuOgorCXBvcAllZGkKKwlwb3AJZXNpCis7CXBvcAllZHgJCTsgbmVlZCBub3QgYmUgcHJlc2VydmVkCis7CXBvcAllY3gJCTsgbmVlZCBub3QgYmUgcHJlc2VydmVkCisJcG9wcGljCWVieAorCXBvcAllYnAKKwlyZXQKKworOyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorOworOyBGYW5jeSBwcm9jZXNzaW5nIGZvciB0aGUgY29tbW9uIGNhc2Ugb2YgMjoxIGhvcml6b250YWwgYW5kIDI6MSB2ZXJ0aWNhbC4KKzsgQWdhaW4gYSB0cmlhbmdsZSBmaWx0ZXI7IHNlZSBjb21tZW50cyBmb3IgaDJ2MSBjYXNlLCBhYm92ZS4KKzsKKzsgR0xPQkFMKHZvaWQpCis7IGpzaW1kX2gydjJfZmFuY3lfdXBzYW1wbGVfbW14IChpbnQgbWF4X3Zfc2FtcF9mYWN0b3IsCis7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBKRElNRU5TSU9OIGRvd25zYW1wbGVkX3dpZHRoLAorOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSlNBTVBBUlJBWSBpbnB1dF9kYXRhLAorOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSlNBTVBBUlJBWSAqIG91dHB1dF9kYXRhX3B0cik7Cis7CisKKyVkZWZpbmUgbWF4X3Zfc2FtcChiKQkJKGIpKzgJCQk7IGludCBtYXhfdl9zYW1wX2ZhY3RvcgorJWRlZmluZSBkb3duc2FtcF93aWR0aChiKQkoYikrMTIJOyBKRElNRU5TSU9OIGRvd25zYW1wbGVkX3dpZHRoCislZGVmaW5lIGlucHV0X2RhdGEoYikJCShiKSsxNgkJOyBKU0FNUEFSUkFZIGlucHV0X2RhdGEKKyVkZWZpbmUgb3V0cHV0X2RhdGFfcHRyKGIpCShiKSsyMAkJOyBKU0FNUEFSUkFZICogb3V0cHV0X2RhdGFfcHRyCisKKyVkZWZpbmUgb3JpZ2luYWxfZWJwCWVicCswCislZGVmaW5lIHdrKGkpCQllYnAtKFdLX05VTS0oaSkpKlNJWkVPRl9NTVdPUkQJOyBtbXdvcmQgd2tbV0tfTlVNXQorJWRlZmluZSBXS19OVU0JCTQKKyVkZWZpbmUgZ290cHRyCQl3aygwKS1TSVpFT0ZfUE9JTlRFUgk7IHZvaWQgKiBnb3RwdHIKKworCWFsaWduCTE2CisJZ2xvYmFsCUVYVE4oanNpbWRfaDJ2Ml9mYW5jeV91cHNhbXBsZV9tbXgpCisKK0VYVE4oanNpbWRfaDJ2Ml9mYW5jeV91cHNhbXBsZV9tbXgpOgorCXB1c2gJZWJwCisJbW92CWVheCxlc3AJCQkJOyBlYXggPSBvcmlnaW5hbCBlYnAKKwlzdWIJZXNwLCBieXRlIDQKKwlhbmQJZXNwLCBieXRlICgtU0laRU9GX01NV09SRCkJOyBhbGlnbiB0byA2NCBiaXRzCisJbW92CVtlc3BdLGVheAorCW1vdgllYnAsZXNwCQkJCTsgZWJwID0gYWxpZ25lZCBlYnAKKwlsZWEJZXNwLCBbd2soMCldCisJcHVzaHBpYwllYXgJCTsgbWFrZSBhIHJvb20gZm9yIEdPVCBhZGRyZXNzCisJcHVzaAllYngKKzsJcHVzaAllY3gJCTsgbmVlZCBub3QgYmUgcHJlc2VydmVkCis7CXB1c2gJZWR4CQk7IG5lZWQgbm90IGJlIHByZXNlcnZlZAorCXB1c2gJZXNpCisJcHVzaAllZGkKKworCWdldF9HT1QJZWJ4CQkJOyBnZXQgR09UIGFkZHJlc3MKKwltb3ZwaWMJUE9JTlRFUiBbZ290cHRyXSwgZWJ4CTsgc2F2ZSBHT1QgYWRkcmVzcworCisJbW92CWVkeCxlYXgJCQkJOyBlZHggPSBvcmlnaW5hbCBlYnAKKwltb3YJZWF4LCBKRElNRU5TSU9OIFtkb3duc2FtcF93aWR0aChlZHgpXSAgOyBjb2xjdHIKKwl0ZXN0CWVheCxlYXgKKwlqegluZWFyIC5yZXR1cm4KKworCW1vdgllY3gsIElOVCBbbWF4X3Zfc2FtcChlZHgpXQk7IHJvd2N0cgorCXRlc3QJZWN4LGVjeAorCWp6CW5lYXIgLnJldHVybgorCisJbW92CWVzaSwgSlNBTVBBUlJBWSBbaW5wdXRfZGF0YShlZHgpXQk7IGlucHV0X2RhdGEKKwltb3YJZWRpLCBQT0lOVEVSIFtvdXRwdXRfZGF0YV9wdHIoZWR4KV0KKwltb3YJZWRpLCBKU0FNUEFSUkFZIFtlZGldCQkJOyBvdXRwdXRfZGF0YQorCWFsaWdueAkxNiw3Cisucm93bG9vcDoKKwlwdXNoCWVheAkJCQkJOyBjb2xjdHIKKwlwdXNoCWVjeAorCXB1c2gJZWRpCisJcHVzaAllc2kKKworCW1vdgllY3gsIEpTQU1QUk9XIFtlc2ktMSpTSVpFT0ZfSlNBTVBST1ddCTsgaW5wdHIxKGFib3ZlKQorCW1vdgllYngsIEpTQU1QUk9XIFtlc2krMCpTSVpFT0ZfSlNBTVBST1ddCTsgaW5wdHIwCisJbW92CWVzaSwgSlNBTVBST1cgW2VzaSsxKlNJWkVPRl9KU0FNUFJPV10JOyBpbnB0cjEoYmVsb3cpCisJbW92CWVkeCwgSlNBTVBST1cgW2VkaSswKlNJWkVPRl9KU0FNUFJPV10JOyBvdXRwdHIwCisJbW92CWVkaSwgSlNBTVBST1cgW2VkaSsxKlNJWkVPRl9KU0FNUFJPV10JOyBvdXRwdHIxCisKKwl0ZXN0CWVheCwgU0laRU9GX01NV09SRC0xCisJanoJc2hvcnQgLnNraXAKKwlwdXNoCWVkeAorCW1vdglkbCwgSlNBTVBMRSBbZWN4KyhlYXgtMSkqU0laRU9GX0pTQU1QTEVdCisJbW92CUpTQU1QTEUgW2VjeCtlYXgqU0laRU9GX0pTQU1QTEVdLCBkbAorCW1vdglkbCwgSlNBTVBMRSBbZWJ4KyhlYXgtMSkqU0laRU9GX0pTQU1QTEVdCisJbW92CUpTQU1QTEUgW2VieCtlYXgqU0laRU9GX0pTQU1QTEVdLCBkbAorCW1vdglkbCwgSlNBTVBMRSBbZXNpKyhlYXgtMSkqU0laRU9GX0pTQU1QTEVdCisJbW92CUpTQU1QTEUgW2VzaStlYXgqU0laRU9GX0pTQU1QTEVdLCBkbAk7IGluc2VydCBhIGR1bW15IHNhbXBsZQorCXBvcAllZHgKKy5za2lwOgorCTsgLS0gcHJvY2VzcyB0aGUgZmlyc3QgY29sdW1uIGJsb2NrCisKKwltb3ZxCW1tMCwgTU1XT1JEIFtlYngrMCpTSVpFT0ZfTU1XT1JEXQk7IG1tMD1yb3dbIDBdWzBdCisJbW92cQltbTEsIE1NV09SRCBbZWN4KzAqU0laRU9GX01NV09SRF0JOyBtbTE9cm93Wy0xXVswXQorCW1vdnEJbW0yLCBNTVdPUkQgW2VzaSswKlNJWkVPRl9NTVdPUkRdCTsgbW0yPXJvd1srMV1bMF0KKworCXB1c2hwaWMJZWJ4CisJbW92cGljCWVieCwgUE9JTlRFUiBbZ290cHRyXQk7IGxvYWQgR09UIGFkZHJlc3MKKworCXB4b3IgICAgICBtbTMsbW0zCQk7IG1tMz0oYWxsIDAncykKKwltb3ZxICAgICAgbW00LG1tMAorCXB1bnBja2xidyBtbTAsbW0zCQk7IG1tMD1yb3dbIDBdWzBdKCAwIDEgMiAzKQorCXB1bnBja2hidyBtbTQsbW0zCQk7IG1tND1yb3dbIDBdWzBdKCA0IDUgNiA3KQorCW1vdnEgICAgICBtbTUsbW0xCisJcHVucGNrbGJ3IG1tMSxtbTMJCTsgbW0xPXJvd1stMV1bMF0oIDAgMSAyIDMpCisJcHVucGNraGJ3IG1tNSxtbTMJCTsgbW01PXJvd1stMV1bMF0oIDQgNSA2IDcpCisJbW92cSAgICAgIG1tNixtbTIKKwlwdW5wY2tsYncgbW0yLG1tMwkJOyBtbTI9cm93WysxXVswXSggMCAxIDIgMykKKwlwdW5wY2toYncgbW02LG1tMwkJOyBtbTY9cm93WysxXVswXSggNCA1IDYgNykKKworCXBtdWxsdwltbTAsW0dPVE9GRihlYngsUFdfVEhSRUUpXQorCXBtdWxsdwltbTQsW0dPVE9GRihlYngsUFdfVEhSRUUpXQorCisJcGNtcGVxYgltbTcsbW03CisJcHNybHEJbW03LChTSVpFT0ZfTU1XT1JELTIpKkJZVEVfQklUCisKKwlwYWRkdwltbTEsbW0wCQkJOyBtbTE9SW50MEw9KCAwIDEgMiAzKQorCXBhZGR3CW1tNSxtbTQJCQk7IG1tNT1JbnQwSD0oIDQgNSA2IDcpCisJcGFkZHcJbW0yLG1tMAkJCTsgbW0yPUludDFMPSggMCAxIDIgMykKKwlwYWRkdwltbTYsbW00CQkJOyBtbTY9SW50MUg9KCA0IDUgNiA3KQorCisJbW92cQlNTVdPUkQgW2VkeCswKlNJWkVPRl9NTVdPUkRdLCBtbTEJOyB0ZW1wb3JhcmlseSBzYXZlCisJbW92cQlNTVdPUkQgW2VkeCsxKlNJWkVPRl9NTVdPUkRdLCBtbTUJOyB0aGUgaW50ZXJtZWRpYXRlIGRhdGEKKwltb3ZxCU1NV09SRCBbZWRpKzAqU0laRU9GX01NV09SRF0sIG1tMgorCW1vdnEJTU1XT1JEIFtlZGkrMSpTSVpFT0ZfTU1XT1JEXSwgbW02CisKKwlwYW5kCW1tMSxtbTcJCQk7IG1tMT0oIDAgLSAtIC0pCisJcGFuZAltbTIsbW03CQkJOyBtbTI9KCAwIC0gLSAtKQorCisJbW92cQlNTVdPUkQgW3drKDApXSwgbW0xCisJbW92cQlNTVdPUkQgW3drKDEpXSwgbW0yCisKKwlwb3BwaWMJZWJ4CisKKwlhZGQJZWF4LCBieXRlIFNJWkVPRl9NTVdPUkQtMQorCWFuZAllYXgsIGJ5dGUgLVNJWkVPRl9NTVdPUkQKKwljbXAJZWF4LCBieXRlIFNJWkVPRl9NTVdPUkQKKwlqYQlzaG9ydCAuY29sdW1ubG9vcAorCWFsaWdueAkxNiw3CisKKy5jb2x1bW5sb29wX2xhc3Q6CisJOyAtLSBwcm9jZXNzIHRoZSBsYXN0IGNvbHVtbiBibG9jaworCisJcHVzaHBpYwllYngKKwltb3ZwaWMJZWJ4LCBQT0lOVEVSIFtnb3RwdHJdCTsgbG9hZCBHT1QgYWRkcmVzcworCisJcGNtcGVxYgltbTEsbW0xCisJcHNsbHEJbW0xLChTSVpFT0ZfTU1XT1JELTIpKkJZVEVfQklUCisJbW92cQltbTIsbW0xCisKKwlwYW5kCW1tMSwgTU1XT1JEIFtlZHgrMSpTSVpFT0ZfTU1XT1JEXQk7IG1tMT0oIC0gLSAtIDcpCisJcGFuZAltbTIsIE1NV09SRCBbZWRpKzEqU0laRU9GX01NV09SRF0JOyBtbTI9KCAtIC0gLSA3KQorCisJbW92cQlNTVdPUkQgW3drKDIpXSwgbW0xCisJbW92cQlNTVdPUkQgW3drKDMpXSwgbW0yCisKKwlqbXAJc2hvcnQgLnVwc2FtcGxlCisJYWxpZ254CTE2LDcKKworLmNvbHVtbmxvb3A6CisJOyAtLSBwcm9jZXNzIHRoZSBuZXh0IGNvbHVtbiBibG9jaworCisJbW92cQltbTAsIE1NV09SRCBbZWJ4KzEqU0laRU9GX01NV09SRF0JOyBtbTA9cm93WyAwXVsxXQorCW1vdnEJbW0xLCBNTVdPUkQgW2VjeCsxKlNJWkVPRl9NTVdPUkRdCTsgbW0xPXJvd1stMV1bMV0KKwltb3ZxCW1tMiwgTU1XT1JEIFtlc2krMSpTSVpFT0ZfTU1XT1JEXQk7IG1tMj1yb3dbKzFdWzFdCisKKwlwdXNocGljCWVieAorCW1vdnBpYwllYngsIFBPSU5URVIgW2dvdHB0cl0JOyBsb2FkIEdPVCBhZGRyZXNzCisKKwlweG9yICAgICAgbW0zLG1tMwkJOyBtbTM9KGFsbCAwJ3MpCisJbW92cSAgICAgIG1tNCxtbTAKKwlwdW5wY2tsYncgbW0wLG1tMwkJOyBtbTA9cm93WyAwXVsxXSggMCAxIDIgMykKKwlwdW5wY2toYncgbW00LG1tMwkJOyBtbTQ9cm93WyAwXVsxXSggNCA1IDYgNykKKwltb3ZxICAgICAgbW01LG1tMQorCXB1bnBja2xidyBtbTEsbW0zCQk7IG1tMT1yb3dbLTFdWzFdKCAwIDEgMiAzKQorCXB1bnBja2hidyBtbTUsbW0zCQk7IG1tNT1yb3dbLTFdWzFdKCA0IDUgNiA3KQorCW1vdnEgICAgICBtbTYsbW0yCisJcHVucGNrbGJ3IG1tMixtbTMJCTsgbW0yPXJvd1srMV1bMV0oIDAgMSAyIDMpCisJcHVucGNraGJ3IG1tNixtbTMJCTsgbW02PXJvd1srMV1bMV0oIDQgNSA2IDcpCisKKwlwbXVsbHcJbW0wLFtHT1RPRkYoZWJ4LFBXX1RIUkVFKV0KKwlwbXVsbHcJbW00LFtHT1RPRkYoZWJ4LFBXX1RIUkVFKV0KKworCXBhZGR3CW1tMSxtbTAJCQk7IG1tMT1JbnQwTD0oIDAgMSAyIDMpCisJcGFkZHcJbW01LG1tNAkJCTsgbW01PUludDBIPSggNCA1IDYgNykKKwlwYWRkdwltbTIsbW0wCQkJOyBtbTI9SW50MUw9KCAwIDEgMiAzKQorCXBhZGR3CW1tNixtbTQJCQk7IG1tNj1JbnQxSD0oIDQgNSA2IDcpCisKKwltb3ZxCU1NV09SRCBbZWR4KzIqU0laRU9GX01NV09SRF0sIG1tMQk7IHRlbXBvcmFyaWx5IHNhdmUKKwltb3ZxCU1NV09SRCBbZWR4KzMqU0laRU9GX01NV09SRF0sIG1tNQk7IHRoZSBpbnRlcm1lZGlhdGUgZGF0YQorCW1vdnEJTU1XT1JEIFtlZGkrMipTSVpFT0ZfTU1XT1JEXSwgbW0yCisJbW92cQlNTVdPUkQgW2VkaSszKlNJWkVPRl9NTVdPUkRdLCBtbTYKKworCXBzbGxxCW1tMSwoU0laRU9GX01NV09SRC0yKSpCWVRFX0JJVAk7IG1tMT0oIC0gLSAtIDApCisJcHNsbHEJbW0yLChTSVpFT0ZfTU1XT1JELTIpKkJZVEVfQklUCTsgbW0yPSggLSAtIC0gMCkKKworCW1vdnEJTU1XT1JEIFt3aygyKV0sIG1tMQorCW1vdnEJTU1XT1JEIFt3aygzKV0sIG1tMgorCisudXBzYW1wbGU6CisJOyAtLSBwcm9jZXNzIHRoZSB1cHBlciByb3cKKworCW1vdnEJbW03LCBNTVdPUkQgW2VkeCswKlNJWkVPRl9NTVdPUkRdCTsgbW03PUludDBMPSggMCAxIDIgMykKKwltb3ZxCW1tMywgTU1XT1JEIFtlZHgrMSpTSVpFT0ZfTU1XT1JEXQk7IG1tMz1JbnQwSD0oIDQgNSA2IDcpCisKKwltb3ZxCW1tMCxtbTcKKwltb3ZxCW1tNCxtbTMKKwlwc3JscQltbTAsMipCWVRFX0JJVAkJCTsgbW0wPSggMSAyIDMgLSkKKwlwc2xscQltbTQsKFNJWkVPRl9NTVdPUkQtMikqQllURV9CSVQJOyBtbTQ9KCAtIC0gLSA0KQorCW1vdnEJbW01LG1tNworCW1vdnEJbW02LG1tMworCXBzcmxxCW1tNSwoU0laRU9GX01NV09SRC0yKSpCWVRFX0JJVAk7IG1tNT0oIDMgLSAtIC0pCisJcHNsbHEJbW02LDIqQllURV9CSVQJCQk7IG1tNj0oIC0gNCA1IDYpCisKKwlwb3IJbW0wLG1tNAkJCQk7IG1tMD0oIDEgMiAzIDQpCisJcG9yCW1tNSxtbTYJCQkJOyBtbTU9KCAzIDQgNSA2KQorCisJbW92cQltbTEsbW03CisJbW92cQltbTIsbW0zCisJcHNsbHEJbW0xLDIqQllURV9CSVQJCQk7IG1tMT0oIC0gMCAxIDIpCisJcHNybHEJbW0yLDIqQllURV9CSVQJCQk7IG1tMj0oIDUgNiA3IC0pCisJbW92cQltbTQsbW0zCisJcHNybHEJbW00LChTSVpFT0ZfTU1XT1JELTIpKkJZVEVfQklUCTsgbW00PSggNyAtIC0gLSkKKworCXBvcgltbTEsIE1NV09SRCBbd2soMCldCQk7IG1tMT0oLTEgMCAxIDIpCisJcG9yCW1tMiwgTU1XT1JEIFt3aygyKV0JCTsgbW0yPSggNSA2IDcgOCkKKworCW1vdnEJTU1XT1JEIFt3aygwKV0sIG1tNAorCisJcG11bGx3CW1tNyxbR09UT0ZGKGVieCxQV19USFJFRSldCisJcG11bGx3CW1tMyxbR09UT0ZGKGVieCxQV19USFJFRSldCisJcGFkZHcJbW0xLFtHT1RPRkYoZWJ4LFBXX0VJR0hUKV0KKwlwYWRkdwltbTUsW0dPVE9GRihlYngsUFdfRUlHSFQpXQorCXBhZGR3CW1tMCxbR09UT0ZGKGVieCxQV19TRVZFTildCisJcGFkZHcJbW0yLFtHT1RPRkYoZWJ4LFBXX1NFVkVOKV0KKworCXBhZGR3CW1tMSxtbTcKKwlwYWRkdwltbTUsbW0zCisJcHNybHcJbW0xLDQJCQk7IG1tMT1PdXQwTEU9KCAwICAyICA0ICA2KQorCXBzcmx3CW1tNSw0CQkJOyBtbTU9T3V0MEhFPSggOCAxMCAxMiAxNCkKKwlwYWRkdwltbTAsbW03CisJcGFkZHcJbW0yLG1tMworCXBzcmx3CW1tMCw0CQkJOyBtbTA9T3V0MExPPSggMSAgMyAgNSAgNykKKwlwc3JsdwltbTIsNAkJCTsgbW0yPU91dDBITz0oIDkgMTEgMTMgMTUpCisKKwlwc2xsdwltbTAsQllURV9CSVQKKwlwc2xsdwltbTIsQllURV9CSVQKKwlwb3IJbW0xLG1tMAkJCTsgbW0xPU91dDBMPSggMCAgMSAgMiAgMyAgNCAgNSAgNiAgNykKKwlwb3IJbW01LG1tMgkJCTsgbW01PU91dDBIPSggOCAgOSAxMCAxMSAxMiAxMyAxNCAxNSkKKworCW1vdnEJTU1XT1JEIFtlZHgrMCpTSVpFT0ZfTU1XT1JEXSwgbW0xCisJbW92cQlNTVdPUkQgW2VkeCsxKlNJWkVPRl9NTVdPUkRdLCBtbTUKKworCTsgLS0gcHJvY2VzcyB0aGUgbG93ZXIgcm93CisKKwltb3ZxCW1tNiwgTU1XT1JEIFtlZGkrMCpTSVpFT0ZfTU1XT1JEXQk7IG1tNj1JbnQxTD0oIDAgMSAyIDMpCisJbW92cQltbTQsIE1NV09SRCBbZWRpKzEqU0laRU9GX01NV09SRF0JOyBtbTQ9SW50MUg9KCA0IDUgNiA3KQorCisJbW92cQltbTcsbW02CisJbW92cQltbTMsbW00CisJcHNybHEJbW03LDIqQllURV9CSVQJCQk7IG1tNz0oIDEgMiAzIC0pCisJcHNsbHEJbW0zLChTSVpFT0ZfTU1XT1JELTIpKkJZVEVfQklUCTsgbW0zPSggLSAtIC0gNCkKKwltb3ZxCW1tMCxtbTYKKwltb3ZxCW1tMixtbTQKKwlwc3JscQltbTAsKFNJWkVPRl9NTVdPUkQtMikqQllURV9CSVQJOyBtbTA9KCAzIC0gLSAtKQorCXBzbGxxCW1tMiwyKkJZVEVfQklUCQkJOyBtbTI9KCAtIDQgNSA2KQorCisJcG9yCW1tNyxtbTMJCQkJOyBtbTc9KCAxIDIgMyA0KQorCXBvcgltbTAsbW0yCQkJCTsgbW0wPSggMyA0IDUgNikKKworCW1vdnEJbW0xLG1tNgorCW1vdnEJbW01LG1tNAorCXBzbGxxCW1tMSwyKkJZVEVfQklUCQkJOyBtbTE9KCAtIDAgMSAyKQorCXBzcmxxCW1tNSwyKkJZVEVfQklUCQkJOyBtbTU9KCA1IDYgNyAtKQorCW1vdnEJbW0zLG1tNAorCXBzcmxxCW1tMywoU0laRU9GX01NV09SRC0yKSpCWVRFX0JJVAk7IG1tMz0oIDcgLSAtIC0pCisKKwlwb3IJbW0xLCBNTVdPUkQgW3drKDEpXQkJOyBtbTE9KC0xIDAgMSAyKQorCXBvcgltbTUsIE1NV09SRCBbd2soMyldCQk7IG1tNT0oIDUgNiA3IDgpCisKKwltb3ZxCU1NV09SRCBbd2soMSldLCBtbTMKKworCXBtdWxsdwltbTYsW0dPVE9GRihlYngsUFdfVEhSRUUpXQorCXBtdWxsdwltbTQsW0dPVE9GRihlYngsUFdfVEhSRUUpXQorCXBhZGR3CW1tMSxbR09UT0ZGKGVieCxQV19FSUdIVCldCisJcGFkZHcJbW0wLFtHT1RPRkYoZWJ4LFBXX0VJR0hUKV0KKwlwYWRkdwltbTcsW0dPVE9GRihlYngsUFdfU0VWRU4pXQorCXBhZGR3CW1tNSxbR09UT0ZGKGVieCxQV19TRVZFTildCisKKwlwYWRkdwltbTEsbW02CisJcGFkZHcJbW0wLG1tNAorCXBzcmx3CW1tMSw0CQkJOyBtbTE9T3V0MUxFPSggMCAgMiAgNCAgNikKKwlwc3JsdwltbTAsNAkJCTsgbW0wPU91dDFIRT0oIDggMTAgMTIgMTQpCisJcGFkZHcJbW03LG1tNgorCXBhZGR3CW1tNSxtbTQKKwlwc3JsdwltbTcsNAkJCTsgbW03PU91dDFMTz0oIDEgIDMgIDUgIDcpCisJcHNybHcJbW01LDQJCQk7IG1tNT1PdXQxSE89KCA5IDExIDEzIDE1KQorCisJcHNsbHcJbW03LEJZVEVfQklUCisJcHNsbHcJbW01LEJZVEVfQklUCisJcG9yCW1tMSxtbTcJCQk7IG1tMT1PdXQxTD0oIDAgIDEgIDIgIDMgIDQgIDUgIDYgIDcpCisJcG9yCW1tMCxtbTUJCQk7IG1tMD1PdXQxSD0oIDggIDkgMTAgMTEgMTIgMTMgMTQgMTUpCisKKwltb3ZxCU1NV09SRCBbZWRpKzAqU0laRU9GX01NV09SRF0sIG1tMQorCW1vdnEJTU1XT1JEIFtlZGkrMSpTSVpFT0ZfTU1XT1JEXSwgbW0wCisKKwlwb3BwaWMJZWJ4CisKKwlzdWIJZWF4LCBieXRlIFNJWkVPRl9NTVdPUkQKKwlhZGQJZWN4LCBieXRlIDEqU0laRU9GX01NV09SRAk7IGlucHRyMShhYm92ZSkKKwlhZGQJZWJ4LCBieXRlIDEqU0laRU9GX01NV09SRAk7IGlucHRyMAorCWFkZAllc2ksIGJ5dGUgMSpTSVpFT0ZfTU1XT1JECTsgaW5wdHIxKGJlbG93KQorCWFkZAllZHgsIGJ5dGUgMipTSVpFT0ZfTU1XT1JECTsgb3V0cHRyMAorCWFkZAllZGksIGJ5dGUgMipTSVpFT0ZfTU1XT1JECTsgb3V0cHRyMQorCWNtcAllYXgsIGJ5dGUgU0laRU9GX01NV09SRAorCWphCW5lYXIgLmNvbHVtbmxvb3AKKwl0ZXN0CWVheCxlYXgKKwlqbnoJbmVhciAuY29sdW1ubG9vcF9sYXN0CisKKwlwb3AJZXNpCisJcG9wCWVkaQorCXBvcAllY3gKKwlwb3AJZWF4CisKKwlhZGQJZXNpLCBieXRlIDEqU0laRU9GX0pTQU1QUk9XCTsgaW5wdXRfZGF0YQorCWFkZAllZGksIGJ5dGUgMipTSVpFT0ZfSlNBTVBST1cJOyBvdXRwdXRfZGF0YQorCXN1YgllY3gsIGJ5dGUgMgkJCTsgcm93Y3RyCisJamcJbmVhciAucm93bG9vcAorCisJZW1tcwkJOyBlbXB0eSBNTVggc3RhdGUKKworLnJldHVybjoKKwlwb3AJZWRpCisJcG9wCWVzaQorOwlwb3AJZWR4CQk7IG5lZWQgbm90IGJlIHByZXNlcnZlZAorOwlwb3AJZWN4CQk7IG5lZWQgbm90IGJlIHByZXNlcnZlZAorCXBvcAllYngKKwltb3YJZXNwLGVicAkJOyBlc3AgPC0gYWxpZ25lZCBlYnAKKwlwb3AJZXNwCQk7IGVzcCA8LSBvcmlnaW5hbCBlYnAKKwlwb3AJZWJwCisJcmV0CisKKzsgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKzsKKzsgRmFzdCBwcm9jZXNzaW5nIGZvciB0aGUgY29tbW9uIGNhc2Ugb2YgMjoxIGhvcml6b250YWwgYW5kIDE6MSB2ZXJ0aWNhbC4KKzsgSXQncyBzdGlsbCBhIGJveCBmaWx0ZXIuCis7Cis7IEdMT0JBTCh2b2lkKQorOyBqc2ltZF9oMnYxX3Vwc2FtcGxlX21teCAoaW50IG1heF92X3NhbXBfZmFjdG9yLAorOyAgICAgICAgICAgICAgICAgICAgICAgICAgSkRJTUVOU0lPTiBvdXRwdXRfd2lkdGgsCis7ICAgICAgICAgICAgICAgICAgICAgICAgICBKU0FNUEFSUkFZIGlucHV0X2RhdGEsCis7ICAgICAgICAgICAgICAgICAgICAgICAgICBKU0FNUEFSUkFZICogb3V0cHV0X2RhdGFfcHRyKTsKKzsKKworJWRlZmluZSBtYXhfdl9zYW1wKGIpCQkoYikrOAkJCTsgaW50IG1heF92X3NhbXBfZmFjdG9yCislZGVmaW5lIG91dHB1dF93aWR0aChiKQkoYikrMTIJCTsgSkRJTUVOU0lPTiBvdXRwdXRfd2lkdGgKKyVkZWZpbmUgaW5wdXRfZGF0YShiKQkJKGIpKzE2CQk7IEpTQU1QQVJSQVkgaW5wdXRfZGF0YQorJWRlZmluZSBvdXRwdXRfZGF0YV9wdHIoYikJKGIpKzIwCQk7IEpTQU1QQVJSQVkgKiBvdXRwdXRfZGF0YV9wdHIKKworCWFsaWduCTE2CisJZ2xvYmFsCUVYVE4oanNpbWRfaDJ2MV91cHNhbXBsZV9tbXgpCisKK0VYVE4oanNpbWRfaDJ2MV91cHNhbXBsZV9tbXgpOgorCXB1c2gJZWJwCisJbW92CWVicCxlc3AKKzsJcHVzaAllYngJCTsgdW51c2VkCis7CXB1c2gJZWN4CQk7IG5lZWQgbm90IGJlIHByZXNlcnZlZAorOwlwdXNoCWVkeAkJOyBuZWVkIG5vdCBiZSBwcmVzZXJ2ZWQKKwlwdXNoCWVzaQorCXB1c2gJZWRpCisKKwltb3YJZWR4LCBKRElNRU5TSU9OIFtvdXRwdXRfd2lkdGgoZWJwKV0KKwlhZGQJZWR4LCBieXRlICgyKlNJWkVPRl9NTVdPUkQpLTEKKwlhbmQJZWR4LCBieXRlIC0oMipTSVpFT0ZfTU1XT1JEKQorCWp6CXNob3J0IC5yZXR1cm4KKworCW1vdgllY3gsIElOVCBbbWF4X3Zfc2FtcChlYnApXQk7IHJvd2N0cgorCXRlc3QJZWN4LGVjeAorCWp6CXNob3J0IC5yZXR1cm4KKworCW1vdgllc2ksIEpTQU1QQVJSQVkgW2lucHV0X2RhdGEoZWJwKV0JOyBpbnB1dF9kYXRhCisJbW92CWVkaSwgUE9JTlRFUiBbb3V0cHV0X2RhdGFfcHRyKGVicCldCisJbW92CWVkaSwgSlNBTVBBUlJBWSBbZWRpXQkJCTsgb3V0cHV0X2RhdGEKKwlhbGlnbngJMTYsNworLnJvd2xvb3A6CisJcHVzaAllZGkKKwlwdXNoCWVzaQorCisJbW92CWVzaSwgSlNBTVBST1cgW2VzaV0JCTsgaW5wdHIKKwltb3YJZWRpLCBKU0FNUFJPVyBbZWRpXQkJOyBvdXRwdHIKKwltb3YJZWF4LGVkeAkJCQk7IGNvbGN0cgorCWFsaWdueAkxNiw3CisuY29sdW1ubG9vcDoKKworCW1vdnEJbW0wLCBNTVdPUkQgW2VzaSswKlNJWkVPRl9NTVdPUkRdCisKKwltb3ZxICAgICAgbW0xLG1tMAorCXB1bnBja2xidyBtbTAsbW0wCisJcHVucGNraGJ3IG1tMSxtbTEKKworCW1vdnEJTU1XT1JEIFtlZGkrMCpTSVpFT0ZfTU1XT1JEXSwgbW0wCisJbW92cQlNTVdPUkQgW2VkaSsxKlNJWkVPRl9NTVdPUkRdLCBtbTEKKworCXN1YgllYXgsIGJ5dGUgMipTSVpFT0ZfTU1XT1JECisJanoJc2hvcnQgLm5leHRyb3cKKworCW1vdnEJbW0yLCBNTVdPUkQgW2VzaSsxKlNJWkVPRl9NTVdPUkRdCisKKwltb3ZxICAgICAgbW0zLG1tMgorCXB1bnBja2xidyBtbTIsbW0yCisJcHVucGNraGJ3IG1tMyxtbTMKKworCW1vdnEJTU1XT1JEIFtlZGkrMipTSVpFT0ZfTU1XT1JEXSwgbW0yCisJbW92cQlNTVdPUkQgW2VkaSszKlNJWkVPRl9NTVdPUkRdLCBtbTMKKworCXN1YgllYXgsIGJ5dGUgMipTSVpFT0ZfTU1XT1JECisJanoJc2hvcnQgLm5leHRyb3cKKworCWFkZAllc2ksIGJ5dGUgMipTSVpFT0ZfTU1XT1JECTsgaW5wdHIKKwlhZGQJZWRpLCBieXRlIDQqU0laRU9GX01NV09SRAk7IG91dHB0cgorCWptcAlzaG9ydCAuY29sdW1ubG9vcAorCWFsaWdueAkxNiw3CisKKy5uZXh0cm93OgorCXBvcAllc2kKKwlwb3AJZWRpCisKKwlhZGQJZXNpLCBieXRlIFNJWkVPRl9KU0FNUFJPVwk7IGlucHV0X2RhdGEKKwlhZGQJZWRpLCBieXRlIFNJWkVPRl9KU0FNUFJPVwk7IG91dHB1dF9kYXRhCisJZGVjCWVjeAkJCQk7IHJvd2N0cgorCWpnCXNob3J0IC5yb3dsb29wCisKKwllbW1zCQk7IGVtcHR5IE1NWCBzdGF0ZQorCisucmV0dXJuOgorCXBvcAllZGkKKwlwb3AJZXNpCis7CXBvcAllZHgJCTsgbmVlZCBub3QgYmUgcHJlc2VydmVkCis7CXBvcAllY3gJCTsgbmVlZCBub3QgYmUgcHJlc2VydmVkCis7CXBvcAllYngJCTsgdW51c2VkCisJcG9wCWVicAorCXJldAorCis7IC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCis7Cis7IEZhc3QgcHJvY2Vzc2luZyBmb3IgdGhlIGNvbW1vbiBjYXNlIG9mIDI6MSBob3Jpem9udGFsIGFuZCAyOjEgdmVydGljYWwuCis7IEl0J3Mgc3RpbGwgYSBib3ggZmlsdGVyLgorOworOyBHTE9CQUwodm9pZCkKKzsganNpbWRfaDJ2Ml91cHNhbXBsZV9tbXggKGludCBtYXhfdl9zYW1wX2ZhY3RvciwKKzsgICAgICAgICAgICAgICAgICAgICAgICAgIEpESU1FTlNJT04gb3V0cHV0X3dpZHRoLAorOyAgICAgICAgICAgICAgICAgICAgICAgICAgSlNBTVBBUlJBWSBpbnB1dF9kYXRhLAorOyAgICAgICAgICAgICAgICAgICAgICAgICAgSlNBTVBBUlJBWSAqIG91dHB1dF9kYXRhX3B0cik7Cis7CisKKyVkZWZpbmUgbWF4X3Zfc2FtcChiKQkJKGIpKzgJCQk7IGludCBtYXhfdl9zYW1wX2ZhY3RvcgorJWRlZmluZSBvdXRwdXRfd2lkdGgoYikJKGIpKzEyCQk7IEpESU1FTlNJT04gb3V0cHV0X3dpZHRoCislZGVmaW5lIGlucHV0X2RhdGEoYikJCShiKSsxNgkJOyBKU0FNUEFSUkFZIGlucHV0X2RhdGEKKyVkZWZpbmUgb3V0cHV0X2RhdGFfcHRyKGIpCShiKSsyMAkJOyBKU0FNUEFSUkFZICogb3V0cHV0X2RhdGFfcHRyCisKKwlhbGlnbgkxNgorCWdsb2JhbAlFWFROKGpzaW1kX2gydjJfdXBzYW1wbGVfbW14KQorCitFWFROKGpzaW1kX2gydjJfdXBzYW1wbGVfbW14KToKKwlwdXNoCWVicAorCW1vdgllYnAsZXNwCisJcHVzaAllYngKKzsJcHVzaAllY3gJCTsgbmVlZCBub3QgYmUgcHJlc2VydmVkCis7CXB1c2gJZWR4CQk7IG5lZWQgbm90IGJlIHByZXNlcnZlZAorCXB1c2gJZXNpCisJcHVzaAllZGkKKworCW1vdgllZHgsIEpESU1FTlNJT04gW291dHB1dF93aWR0aChlYnApXQorCWFkZAllZHgsIGJ5dGUgKDIqU0laRU9GX01NV09SRCktMQorCWFuZAllZHgsIGJ5dGUgLSgyKlNJWkVPRl9NTVdPUkQpCisJanoJbmVhciAucmV0dXJuCisKKwltb3YJZWN4LCBJTlQgW21heF92X3NhbXAoZWJwKV0JOyByb3djdHIKKwl0ZXN0CWVjeCxlY3gKKwlqeglzaG9ydCAucmV0dXJuCisKKwltb3YJZXNpLCBKU0FNUEFSUkFZIFtpbnB1dF9kYXRhKGVicCldCTsgaW5wdXRfZGF0YQorCW1vdgllZGksIFBPSU5URVIgW291dHB1dF9kYXRhX3B0cihlYnApXQorCW1vdgllZGksIEpTQU1QQVJSQVkgW2VkaV0JCQk7IG91dHB1dF9kYXRhCisJYWxpZ254CTE2LDcKKy5yb3dsb29wOgorCXB1c2gJZWRpCisJcHVzaAllc2kKKworCW1vdgllc2ksIEpTQU1QUk9XIFtlc2ldCQkJOyBpbnB0cgorCW1vdgllYngsIEpTQU1QUk9XIFtlZGkrMCpTSVpFT0ZfSlNBTVBST1ddCTsgb3V0cHRyMAorCW1vdgllZGksIEpTQU1QUk9XIFtlZGkrMSpTSVpFT0ZfSlNBTVBST1ddCTsgb3V0cHRyMQorCW1vdgllYXgsZWR4CQkJCQk7IGNvbGN0cgorCWFsaWdueAkxNiw3CisuY29sdW1ubG9vcDoKKworCW1vdnEJbW0wLCBNTVdPUkQgW2VzaSswKlNJWkVPRl9NTVdPUkRdCisKKwltb3ZxICAgICAgbW0xLG1tMAorCXB1bnBja2xidyBtbTAsbW0wCisJcHVucGNraGJ3IG1tMSxtbTEKKworCW1vdnEJTU1XT1JEIFtlYngrMCpTSVpFT0ZfTU1XT1JEXSwgbW0wCisJbW92cQlNTVdPUkQgW2VieCsxKlNJWkVPRl9NTVdPUkRdLCBtbTEKKwltb3ZxCU1NV09SRCBbZWRpKzAqU0laRU9GX01NV09SRF0sIG1tMAorCW1vdnEJTU1XT1JEIFtlZGkrMSpTSVpFT0ZfTU1XT1JEXSwgbW0xCisKKwlzdWIJZWF4LCBieXRlIDIqU0laRU9GX01NV09SRAorCWp6CXNob3J0IC5uZXh0cm93CisKKwltb3ZxCW1tMiwgTU1XT1JEIFtlc2krMSpTSVpFT0ZfTU1XT1JEXQorCisJbW92cSAgICAgIG1tMyxtbTIKKwlwdW5wY2tsYncgbW0yLG1tMgorCXB1bnBja2hidyBtbTMsbW0zCisKKwltb3ZxCU1NV09SRCBbZWJ4KzIqU0laRU9GX01NV09SRF0sIG1tMgorCW1vdnEJTU1XT1JEIFtlYngrMypTSVpFT0ZfTU1XT1JEXSwgbW0zCisJbW92cQlNTVdPUkQgW2VkaSsyKlNJWkVPRl9NTVdPUkRdLCBtbTIKKwltb3ZxCU1NV09SRCBbZWRpKzMqU0laRU9GX01NV09SRF0sIG1tMworCisJc3ViCWVheCwgYnl0ZSAyKlNJWkVPRl9NTVdPUkQKKwlqeglzaG9ydCAubmV4dHJvdworCisJYWRkCWVzaSwgYnl0ZSAyKlNJWkVPRl9NTVdPUkQJOyBpbnB0cgorCWFkZAllYngsIGJ5dGUgNCpTSVpFT0ZfTU1XT1JECTsgb3V0cHRyMAorCWFkZAllZGksIGJ5dGUgNCpTSVpFT0ZfTU1XT1JECTsgb3V0cHRyMQorCWptcAlzaG9ydCAuY29sdW1ubG9vcAorCWFsaWdueAkxNiw3CisKKy5uZXh0cm93OgorCXBvcAllc2kKKwlwb3AJZWRpCisKKwlhZGQJZXNpLCBieXRlIDEqU0laRU9GX0pTQU1QUk9XCTsgaW5wdXRfZGF0YQorCWFkZAllZGksIGJ5dGUgMipTSVpFT0ZfSlNBTVBST1cJOyBvdXRwdXRfZGF0YQorCXN1YgllY3gsIGJ5dGUgMgkJCTsgcm93Y3RyCisJamcJc2hvcnQgLnJvd2xvb3AKKworCWVtbXMJCTsgZW1wdHkgTU1YIHN0YXRlCisKKy5yZXR1cm46CisJcG9wCWVkaQorCXBvcAllc2kKKzsJcG9wCWVkeAkJOyBuZWVkIG5vdCBiZSBwcmVzZXJ2ZWQKKzsJcG9wCWVjeAkJOyBuZWVkIG5vdCBiZSBwcmVzZXJ2ZWQKKwlwb3AJZWJ4CisJcG9wCWVicAorCXJldAorCis7IEZvciBzb21lIHJlYXNvbiwgdGhlIE9TIFggbGlua2VyIGRvZXMgbm90IGhvbm9yIHRoZSByZXF1ZXN0IHRvIGFsaWduIHRoZQorOyBzZWdtZW50IHVubGVzcyB3ZSBkbyB0aGlzLgorCWFsaWduCTE2CmRpZmYgLS1naXQgYS9zaW1kL2pkc2Ftc3MyLTY0LmFzbSBiL3NpbWQvamRzYW1zczItNjQuYXNtCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmYzNmMxNTYKLS0tIC9kZXYvbnVsbAorKysgYi9zaW1kL2pkc2Ftc3MyLTY0LmFzbQpAQCAtMCwwICsxLDY3MSBAQAorOworOyBqZHNhbXNzMi02NC5hc20gLSB1cHNhbXBsaW5nICg2NC1iaXQgU1NFMikKKzsKKzsgQ29weXJpZ2h0IDIwMDkgUGllcnJlIE9zc21hbiA8b3NzbWFuQGNlbmRpby5zZT4gZm9yIENlbmRpbyBBQgorOyBDb3B5cmlnaHQgMjAwOSBELiBSLiBDb21tYW5kZXIKKzsKKzsgQmFzZWQgb24KKzsgeDg2IFNJTUQgZXh0ZW5zaW9uIGZvciBJSkcgSlBFRyBsaWJyYXJ5Cis7IENvcHlyaWdodCAoQykgMTk5OS0yMDA2LCBNSVlBU0FLQSBNYXNhcnUuCis7IEZvciBjb25kaXRpb25zIG9mIGRpc3RyaWJ1dGlvbiBhbmQgdXNlLCBzZWUgY29weXJpZ2h0IG5vdGljZSBpbiBqc2ltZGV4dC5pbmMKKzsKKzsgVGhpcyBmaWxlIHNob3VsZCBiZSBhc3NlbWJsZWQgd2l0aCBOQVNNIChOZXR3aWRlIEFzc2VtYmxlciksCis7IGNhbiAqbm90KiBiZSBhc3NlbWJsZWQgd2l0aCBNaWNyb3NvZnQncyBNQVNNIG9yIGFueSBjb21wYXRpYmxlCis7IGFzc2VtYmxlciAoaW5jbHVkaW5nIEJvcmxhbmQncyBUdXJibyBBc3NlbWJsZXIpLgorOyBOQVNNIGlzIGF2YWlsYWJsZSBmcm9tIGh0dHA6Ly9uYXNtLnNvdXJjZWZvcmdlLm5ldC8gb3IKKzsgaHR0cDovL3NvdXJjZWZvcmdlLm5ldC9wcm9qZWN0L3Nob3dmaWxlcy5waHA/Z3JvdXBfaWQ9NjIwOAorOworOyBbVEFCOF0KKworJWluY2x1ZGUgImpzaW1kZXh0LmluYyIKKworOyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCVNFQ1RJT04JU0VHX0NPTlNUCisKKwlhbGlnbnoJMTYKKwlnbG9iYWwJRVhUTihqY29uc3RfZmFuY3lfdXBzYW1wbGVfc3NlMikKKworRVhUTihqY29uc3RfZmFuY3lfdXBzYW1wbGVfc3NlMik6CisKK1BXX09ORQkJdGltZXMgOCBkdyAgMQorUFdfVFdPCQl0aW1lcyA4IGR3ICAyCitQV19USFJFRQl0aW1lcyA4IGR3ICAzCitQV19TRVZFTgl0aW1lcyA4IGR3ICA3CitQV19FSUdIVAl0aW1lcyA4IGR3ICA4CisKKwlhbGlnbnoJMTYKKworOyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCVNFQ1RJT04JU0VHX1RFWFQKKwlCSVRTCTY0Cis7Cis7IEZhbmN5IHByb2Nlc3NpbmcgZm9yIHRoZSBjb21tb24gY2FzZSBvZiAyOjEgaG9yaXpvbnRhbCBhbmQgMToxIHZlcnRpY2FsLgorOworOyBUaGUgdXBzYW1wbGluZyBhbGdvcml0aG0gaXMgbGluZWFyIGludGVycG9sYXRpb24gYmV0d2VlbiBwaXhlbCBjZW50ZXJzLAorOyBhbHNvIGtub3duIGFzIGEgInRyaWFuZ2xlIGZpbHRlciIuICBUaGlzIGlzIGEgZ29vZCBjb21wcm9taXNlIGJldHdlZW4KKzsgc3BlZWQgYW5kIHZpc3VhbCBxdWFsaXR5LiAgVGhlIGNlbnRlcnMgb2YgdGhlIG91dHB1dCBwaXhlbHMgYXJlIDEvNCBhbmQgMy80Cis7IG9mIHRoZSB3YXkgYmV0d2VlbiBpbnB1dCBwaXhlbCBjZW50ZXJzLgorOworOyBHTE9CQUwodm9pZCkKKzsganNpbWRfaDJ2MV9mYW5jeV91cHNhbXBsZV9zc2UyIChpbnQgbWF4X3Zfc2FtcF9mYWN0b3IsCis7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSkRJTUVOU0lPTiBkb3duc2FtcGxlZF93aWR0aCwKKzsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBKU0FNUEFSUkFZIGlucHV0X2RhdGEsCis7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSlNBTVBBUlJBWSAqIG91dHB1dF9kYXRhX3B0cik7Cis7CisKKzsgcjEwID0gaW50IG1heF92X3NhbXBfZmFjdG9yCis7IHIxMSA9IEpESU1FTlNJT04gZG93bnNhbXBsZWRfd2lkdGgKKzsgcjEyID0gSlNBTVBBUlJBWSBpbnB1dF9kYXRhCis7IHIxMyA9IEpTQU1QQVJSQVkgKiBvdXRwdXRfZGF0YV9wdHIKKworCWFsaWduCTE2CisJZ2xvYmFsCUVYVE4oanNpbWRfaDJ2MV9mYW5jeV91cHNhbXBsZV9zc2UyKQorCitFWFROKGpzaW1kX2gydjFfZmFuY3lfdXBzYW1wbGVfc3NlMik6CisJcHVzaAlyYnAKKwltb3YJcmF4LHJzcAorCW1vdglyYnAscnNwCisJY29sbGVjdF9hcmdzCisKKwltb3YJcmF4LCByMTEgIDsgY29sY3RyCisJdGVzdAlyYXgscmF4CisJanoJbmVhciAucmV0dXJuCisKKwltb3YJcmN4LCByMTAJOyByb3djdHIKKwl0ZXN0CXJjeCxyY3gKKwlqegluZWFyIC5yZXR1cm4KKworCW1vdglyc2ksIHIxMgk7IGlucHV0X2RhdGEKKwltb3YJcmRpLCByMTMKKwltb3YJcmRpLCBKU0FNUEFSUkFZIFtyZGldCQkJOyBvdXRwdXRfZGF0YQorLnJvd2xvb3A6CisJcHVzaAlyYXgJCQk7IGNvbGN0cgorCXB1c2gJcmRpCisJcHVzaAlyc2kKKworCW1vdglyc2ksIEpTQU1QUk9XIFtyc2ldCTsgaW5wdHIKKwltb3YJcmRpLCBKU0FNUFJPVyBbcmRpXQk7IG91dHB0cgorCisJdGVzdAlyYXgsIFNJWkVPRl9YTU1XT1JELTEKKwlqeglzaG9ydCAuc2tpcAorCW1vdglkbCwgSlNBTVBMRSBbcnNpKyhyYXgtMSkqU0laRU9GX0pTQU1QTEVdCisJbW92CUpTQU1QTEUgW3JzaStyYXgqU0laRU9GX0pTQU1QTEVdLCBkbAk7IGluc2VydCBhIGR1bW15IHNhbXBsZQorLnNraXA6CisJcHhvcgl4bW0wLHhtbTAJCTsgeG1tMD0oYWxsIDAncykKKwlwY21wZXFiCXhtbTcseG1tNworCXBzcmxkcQl4bW03LChTSVpFT0ZfWE1NV09SRC0xKQorCXBhbmQJeG1tNywgWE1NV09SRCBbcnNpKzAqU0laRU9GX1hNTVdPUkRdCisKKwlhZGQJcmF4LCBieXRlIFNJWkVPRl9YTU1XT1JELTEKKwlhbmQJcmF4LCBieXRlIC1TSVpFT0ZfWE1NV09SRAorCWNtcAlyYXgsIGJ5dGUgU0laRU9GX1hNTVdPUkQKKwlqYQlzaG9ydCAuY29sdW1ubG9vcAorCisuY29sdW1ubG9vcF9sYXN0OgorCXBjbXBlcWIJeG1tNix4bW02CisJcHNsbGRxCXhtbTYsKFNJWkVPRl9YTU1XT1JELTEpCisJcGFuZAl4bW02LCBYTU1XT1JEIFtyc2krMCpTSVpFT0ZfWE1NV09SRF0KKwlqbXAJc2hvcnQgLnVwc2FtcGxlCisKKy5jb2x1bW5sb29wOgorCW1vdmRxYQl4bW02LCBYTU1XT1JEIFtyc2krMSpTSVpFT0ZfWE1NV09SRF0KKwlwc2xsZHEJeG1tNiwoU0laRU9GX1hNTVdPUkQtMSkKKworLnVwc2FtcGxlOgorCW1vdmRxYQl4bW0xLCBYTU1XT1JEIFtyc2krMCpTSVpFT0ZfWE1NV09SRF0KKwltb3ZkcWEJeG1tMix4bW0xCisJbW92ZHFhCXhtbTMseG1tMQkJOyB4bW0xPSggMCAgMSAgMiAuLi4gMTMgMTQgMTUpCisJcHNsbGRxCXhtbTIsMQkJCTsgeG1tMj0oLS0gIDAgIDEgLi4uIDEyIDEzIDE0KQorCXBzcmxkcQl4bW0zLDEJCQk7IHhtbTM9KCAxICAyICAzIC4uLiAxNCAxNSAtLSkKKworCXBvcgl4bW0yLHhtbTcJCTsgeG1tMj0oLTEgIDAgIDEgLi4uIDEyIDEzIDE0KQorCXBvcgl4bW0zLHhtbTYJCTsgeG1tMz0oIDEgIDIgIDMgLi4uIDE0IDE1IDE2KQorCisJbW92ZHFhCXhtbTcseG1tMQorCXBzcmxkcQl4bW03LChTSVpFT0ZfWE1NV09SRC0xKQk7IHhtbTc9KDE1IC0tIC0tIC4uLiAtLSAtLSAtLSkKKworCW1vdmRxYSAgICB4bW00LHhtbTEKKwlwdW5wY2tsYncgeG1tMSx4bW0wCQk7IHhtbTE9KCAwICAxICAyICAzICA0ICA1ICA2ICA3KQorCXB1bnBja2hidyB4bW00LHhtbTAJCTsgeG1tND0oIDggIDkgMTAgMTEgMTIgMTMgMTQgMTUpCisJbW92ZHFhICAgIHhtbTUseG1tMgorCXB1bnBja2xidyB4bW0yLHhtbTAJCTsgeG1tMj0oLTEgIDAgIDEgIDIgIDMgIDQgIDUgIDYpCisJcHVucGNraGJ3IHhtbTUseG1tMAkJOyB4bW01PSggNyAgOCAgOSAxMCAxMSAxMiAxMyAxNCkKKwltb3ZkcWEgICAgeG1tNix4bW0zCisJcHVucGNrbGJ3IHhtbTMseG1tMAkJOyB4bW0zPSggMSAgMiAgMyAgNCAgNSAgNiAgNyAgOCkKKwlwdW5wY2toYncgeG1tNix4bW0wCQk7IHhtbTY9KCA5IDEwIDExIDEyIDEzIDE0IDE1IDE2KQorCisJcG11bGx3CXhtbTEsW3JlbCBQV19USFJFRV0KKwlwbXVsbHcJeG1tNCxbcmVsIFBXX1RIUkVFXQorCXBhZGR3CXhtbTIsW3JlbCBQV19PTkVdCisJcGFkZHcJeG1tNSxbcmVsIFBXX09ORV0KKwlwYWRkdwl4bW0zLFtyZWwgUFdfVFdPXQorCXBhZGR3CXhtbTYsW3JlbCBQV19UV09dCisKKwlwYWRkdwl4bW0yLHhtbTEKKwlwYWRkdwl4bW01LHhtbTQKKwlwc3Jsdwl4bW0yLDIJCQk7IHhtbTI9T3V0TEU9KCAwICAyICA0ICA2ICA4IDEwIDEyIDE0KQorCXBzcmx3CXhtbTUsMgkJCTsgeG1tNT1PdXRIRT0oMTYgMTggMjAgMjIgMjQgMjYgMjggMzApCisJcGFkZHcJeG1tMyx4bW0xCisJcGFkZHcJeG1tNix4bW00CisJcHNybHcJeG1tMywyCQkJOyB4bW0zPU91dExPPSggMSAgMyAgNSAgNyAgOSAxMSAxMyAxNSkKKwlwc3Jsdwl4bW02LDIJCQk7IHhtbTY9T3V0SE89KDE3IDE5IDIxIDIzIDI1IDI3IDI5IDMxKQorCisJcHNsbHcJeG1tMyxCWVRFX0JJVAorCXBzbGx3CXhtbTYsQllURV9CSVQKKwlwb3IJeG1tMix4bW0zCQk7IHhtbTI9T3V0TD0oIDAgIDEgIDIgLi4uIDEzIDE0IDE1KQorCXBvcgl4bW01LHhtbTYJCTsgeG1tNT1PdXRIPSgxNiAxNyAxOCAuLi4gMjkgMzAgMzEpCisKKwltb3ZkcWEJWE1NV09SRCBbcmRpKzAqU0laRU9GX1hNTVdPUkRdLCB4bW0yCisJbW92ZHFhCVhNTVdPUkQgW3JkaSsxKlNJWkVPRl9YTU1XT1JEXSwgeG1tNQorCisJc3ViCXJheCwgYnl0ZSBTSVpFT0ZfWE1NV09SRAorCWFkZAlyc2ksIGJ5dGUgMSpTSVpFT0ZfWE1NV09SRAk7IGlucHRyCisJYWRkCXJkaSwgYnl0ZSAyKlNJWkVPRl9YTU1XT1JECTsgb3V0cHRyCisJY21wCXJheCwgYnl0ZSBTSVpFT0ZfWE1NV09SRAorCWphCW5lYXIgLmNvbHVtbmxvb3AKKwl0ZXN0CWVheCxlYXgKKwlqbnoJbmVhciAuY29sdW1ubG9vcF9sYXN0CisKKwlwb3AJcnNpCisJcG9wCXJkaQorCXBvcAlyYXgKKworCWFkZAlyc2ksIGJ5dGUgU0laRU9GX0pTQU1QUk9XCTsgaW5wdXRfZGF0YQorCWFkZAlyZGksIGJ5dGUgU0laRU9GX0pTQU1QUk9XCTsgb3V0cHV0X2RhdGEKKwlkZWMJcmN4CQkJCTsgcm93Y3RyCisJamcJbmVhciAucm93bG9vcAorCisucmV0dXJuOgorCXVuY29sbGVjdF9hcmdzCisJcG9wCXJicAorCXJldAorCis7IC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCis7Cis7IEZhbmN5IHByb2Nlc3NpbmcgZm9yIHRoZSBjb21tb24gY2FzZSBvZiAyOjEgaG9yaXpvbnRhbCBhbmQgMjoxIHZlcnRpY2FsLgorOyBBZ2FpbiBhIHRyaWFuZ2xlIGZpbHRlcjsgc2VlIGNvbW1lbnRzIGZvciBoMnYxIGNhc2UsIGFib3ZlLgorOworOyBHTE9CQUwodm9pZCkKKzsganNpbWRfaDJ2Ml9mYW5jeV91cHNhbXBsZV9zc2UyIChpbnQgbWF4X3Zfc2FtcF9mYWN0b3IsCis7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSkRJTUVOU0lPTiBkb3duc2FtcGxlZF93aWR0aCwKKzsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBKU0FNUEFSUkFZIGlucHV0X2RhdGEsCis7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSlNBTVBBUlJBWSAqIG91dHB1dF9kYXRhX3B0cik7Cis7CisKKzsgcjEwID0gaW50IG1heF92X3NhbXBfZmFjdG9yCis7IHIxMSA9IEpESU1FTlNJT04gZG93bnNhbXBsZWRfd2lkdGgKKzsgcjEyID0gSlNBTVBBUlJBWSBpbnB1dF9kYXRhCis7IHIxMyA9IEpTQU1QQVJSQVkgKiBvdXRwdXRfZGF0YV9wdHIKKworJWRlZmluZSB3ayhpKQkJcmJwLShXS19OVU0tKGkpKSpTSVpFT0ZfWE1NV09SRAk7IHhtbXdvcmQgd2tbV0tfTlVNXQorJWRlZmluZSBXS19OVU0JCTQKKworCWFsaWduCTE2CisJZ2xvYmFsCUVYVE4oanNpbWRfaDJ2Ml9mYW5jeV91cHNhbXBsZV9zc2UyKQorCitFWFROKGpzaW1kX2gydjJfZmFuY3lfdXBzYW1wbGVfc3NlMik6CisJcHVzaAlyYnAKKwltb3YJcmF4LHJzcAkJCQk7IHJheCA9IG9yaWdpbmFsIHJicAorCXN1Yglyc3AsIGJ5dGUgNAorCWFuZAlyc3AsIGJ5dGUgKC1TSVpFT0ZfWE1NV09SRCkJOyBhbGlnbiB0byAxMjggYml0cworCW1vdglbcnNwXSxyYXgKKwltb3YJcmJwLHJzcAkJCQk7IHJicCA9IGFsaWduZWQgcmJwCisJbGVhCXJzcCwgW3drKDApXQorCWNvbGxlY3RfYXJncworCXB1c2gJcmJ4CisKKwltb3YJcmF4LCByMTEgIDsgY29sY3RyCisJdGVzdAlyYXgscmF4CisJanoJbmVhciAucmV0dXJuCisKKwltb3YJcmN4LCByMTAJOyByb3djdHIKKwl0ZXN0CXJjeCxyY3gKKwlqegluZWFyIC5yZXR1cm4KKworCW1vdglyc2ksIHIxMgk7IGlucHV0X2RhdGEKKwltb3YJcmRpLCByMTMKKwltb3YJcmRpLCBKU0FNUEFSUkFZIFtyZGldCQkJOyBvdXRwdXRfZGF0YQorLnJvd2xvb3A6CisJcHVzaAlyYXgJCQkJCTsgY29sY3RyCisJcHVzaAlyY3gKKwlwdXNoCXJkaQorCXB1c2gJcnNpCisKKwltb3YJcmN4LCBKU0FNUFJPVyBbcnNpLTEqU0laRU9GX0pTQU1QUk9XXQk7IGlucHRyMShhYm92ZSkKKwltb3YJcmJ4LCBKU0FNUFJPVyBbcnNpKzAqU0laRU9GX0pTQU1QUk9XXQk7IGlucHRyMAorCW1vdglyc2ksIEpTQU1QUk9XIFtyc2krMSpTSVpFT0ZfSlNBTVBST1ddCTsgaW5wdHIxKGJlbG93KQorCW1vdglyZHgsIEpTQU1QUk9XIFtyZGkrMCpTSVpFT0ZfSlNBTVBST1ddCTsgb3V0cHRyMAorCW1vdglyZGksIEpTQU1QUk9XIFtyZGkrMSpTSVpFT0ZfSlNBTVBST1ddCTsgb3V0cHRyMQorCisJdGVzdAlyYXgsIFNJWkVPRl9YTU1XT1JELTEKKwlqeglzaG9ydCAuc2tpcAorCXB1c2gJcmR4CisJbW92CWRsLCBKU0FNUExFIFtyY3grKHJheC0xKSpTSVpFT0ZfSlNBTVBMRV0KKwltb3YJSlNBTVBMRSBbcmN4K3JheCpTSVpFT0ZfSlNBTVBMRV0sIGRsCisJbW92CWRsLCBKU0FNUExFIFtyYngrKHJheC0xKSpTSVpFT0ZfSlNBTVBMRV0KKwltb3YJSlNBTVBMRSBbcmJ4K3JheCpTSVpFT0ZfSlNBTVBMRV0sIGRsCisJbW92CWRsLCBKU0FNUExFIFtyc2krKHJheC0xKSpTSVpFT0ZfSlNBTVBMRV0KKwltb3YJSlNBTVBMRSBbcnNpK3JheCpTSVpFT0ZfSlNBTVBMRV0sIGRsCTsgaW5zZXJ0IGEgZHVtbXkgc2FtcGxlCisJcG9wCXJkeAorLnNraXA6CisJOyAtLSBwcm9jZXNzIHRoZSBmaXJzdCBjb2x1bW4gYmxvY2sKKworCW1vdmRxYQl4bW0wLCBYTU1XT1JEIFtyYngrMCpTSVpFT0ZfWE1NV09SRF0JOyB4bW0wPXJvd1sgMF1bMF0KKwltb3ZkcWEJeG1tMSwgWE1NV09SRCBbcmN4KzAqU0laRU9GX1hNTVdPUkRdCTsgeG1tMT1yb3dbLTFdWzBdCisJbW92ZHFhCXhtbTIsIFhNTVdPUkQgW3JzaSswKlNJWkVPRl9YTU1XT1JEXQk7IHhtbTI9cm93WysxXVswXQorCisJcHhvciAgICAgIHhtbTMseG1tMwkJOyB4bW0zPShhbGwgMCdzKQorCW1vdmRxYSAgICB4bW00LHhtbTAKKwlwdW5wY2tsYncgeG1tMCx4bW0zCQk7IHhtbTA9cm93WyAwXSggMCAgMSAgMiAgMyAgNCAgNSAgNiAgNykKKwlwdW5wY2toYncgeG1tNCx4bW0zCQk7IHhtbTQ9cm93WyAwXSggOCAgOSAxMCAxMSAxMiAxMyAxNCAxNSkKKwltb3ZkcWEgICAgeG1tNSx4bW0xCisJcHVucGNrbGJ3IHhtbTEseG1tMwkJOyB4bW0xPXJvd1stMV0oIDAgIDEgIDIgIDMgIDQgIDUgIDYgIDcpCisJcHVucGNraGJ3IHhtbTUseG1tMwkJOyB4bW01PXJvd1stMV0oIDggIDkgMTAgMTEgMTIgMTMgMTQgMTUpCisJbW92ZHFhICAgIHhtbTYseG1tMgorCXB1bnBja2xidyB4bW0yLHhtbTMJCTsgeG1tMj1yb3dbKzFdKCAwICAxICAyICAzICA0ICA1ICA2ICA3KQorCXB1bnBja2hidyB4bW02LHhtbTMJCTsgeG1tNj1yb3dbKzFdKCA4ICA5IDEwIDExIDEyIDEzIDE0IDE1KQorCisJcG11bGx3CXhtbTAsW3JlbCBQV19USFJFRV0KKwlwbXVsbHcJeG1tNCxbcmVsIFBXX1RIUkVFXQorCisJcGNtcGVxYgl4bW03LHhtbTcKKwlwc3JsZHEJeG1tNywoU0laRU9GX1hNTVdPUkQtMikKKworCXBhZGR3CXhtbTEseG1tMAkJOyB4bW0xPUludDBMPSggMCAgMSAgMiAgMyAgNCAgNSAgNiAgNykKKwlwYWRkdwl4bW01LHhtbTQJCTsgeG1tNT1JbnQwSD0oIDggIDkgMTAgMTEgMTIgMTMgMTQgMTUpCisJcGFkZHcJeG1tMix4bW0wCQk7IHhtbTI9SW50MUw9KCAwICAxICAyICAzICA0ICA1ICA2ICA3KQorCXBhZGR3CXhtbTYseG1tNAkJOyB4bW02PUludDFIPSggOCAgOSAxMCAxMSAxMiAxMyAxNCAxNSkKKworCW1vdmRxYQlYTU1XT1JEIFtyZHgrMCpTSVpFT0ZfWE1NV09SRF0sIHhtbTEJOyB0ZW1wb3JhcmlseSBzYXZlCisJbW92ZHFhCVhNTVdPUkQgW3JkeCsxKlNJWkVPRl9YTU1XT1JEXSwgeG1tNQk7IHRoZSBpbnRlcm1lZGlhdGUgZGF0YQorCW1vdmRxYQlYTU1XT1JEIFtyZGkrMCpTSVpFT0ZfWE1NV09SRF0sIHhtbTIKKwltb3ZkcWEJWE1NV09SRCBbcmRpKzEqU0laRU9GX1hNTVdPUkRdLCB4bW02CisKKwlwYW5kCXhtbTEseG1tNwkJOyB4bW0xPSggMCAtLSAtLSAtLSAtLSAtLSAtLSAtLSkKKwlwYW5kCXhtbTIseG1tNwkJOyB4bW0yPSggMCAtLSAtLSAtLSAtLSAtLSAtLSAtLSkKKworCW1vdmRxYQlYTU1XT1JEIFt3aygwKV0sIHhtbTEKKwltb3ZkcWEJWE1NV09SRCBbd2soMSldLCB4bW0yCisKKwlhZGQJcmF4LCBieXRlIFNJWkVPRl9YTU1XT1JELTEKKwlhbmQJcmF4LCBieXRlIC1TSVpFT0ZfWE1NV09SRAorCWNtcAlyYXgsIGJ5dGUgU0laRU9GX1hNTVdPUkQKKwlqYQlzaG9ydCAuY29sdW1ubG9vcAorCisuY29sdW1ubG9vcF9sYXN0OgorCTsgLS0gcHJvY2VzcyB0aGUgbGFzdCBjb2x1bW4gYmxvY2sKKworCXBjbXBlcWIJeG1tMSx4bW0xCisJcHNsbGRxCXhtbTEsKFNJWkVPRl9YTU1XT1JELTIpCisJbW92ZHFhCXhtbTIseG1tMQorCisJcGFuZAl4bW0xLCBYTU1XT1JEIFtyZHgrMSpTSVpFT0ZfWE1NV09SRF0KKwlwYW5kCXhtbTIsIFhNTVdPUkQgW3JkaSsxKlNJWkVPRl9YTU1XT1JEXQorCisJbW92ZHFhCVhNTVdPUkQgW3drKDIpXSwgeG1tMQk7IHhtbTE9KC0tIC0tIC0tIC0tIC0tIC0tIC0tIDE1KQorCW1vdmRxYQlYTU1XT1JEIFt3aygzKV0sIHhtbTIJOyB4bW0yPSgtLSAtLSAtLSAtLSAtLSAtLSAtLSAxNSkKKworCWptcAluZWFyIC51cHNhbXBsZQorCisuY29sdW1ubG9vcDoKKwk7IC0tIHByb2Nlc3MgdGhlIG5leHQgY29sdW1uIGJsb2NrCisKKwltb3ZkcWEJeG1tMCwgWE1NV09SRCBbcmJ4KzEqU0laRU9GX1hNTVdPUkRdCTsgeG1tMD1yb3dbIDBdWzFdCisJbW92ZHFhCXhtbTEsIFhNTVdPUkQgW3JjeCsxKlNJWkVPRl9YTU1XT1JEXQk7IHhtbTE9cm93Wy0xXVsxXQorCW1vdmRxYQl4bW0yLCBYTU1XT1JEIFtyc2krMSpTSVpFT0ZfWE1NV09SRF0JOyB4bW0yPXJvd1srMV1bMV0KKworCXB4b3IgICAgICB4bW0zLHhtbTMJCTsgeG1tMz0oYWxsIDAncykKKwltb3ZkcWEgICAgeG1tNCx4bW0wCisJcHVucGNrbGJ3IHhtbTAseG1tMwkJOyB4bW0wPXJvd1sgMF0oIDAgIDEgIDIgIDMgIDQgIDUgIDYgIDcpCisJcHVucGNraGJ3IHhtbTQseG1tMwkJOyB4bW00PXJvd1sgMF0oIDggIDkgMTAgMTEgMTIgMTMgMTQgMTUpCisJbW92ZHFhICAgIHhtbTUseG1tMQorCXB1bnBja2xidyB4bW0xLHhtbTMJCTsgeG1tMT1yb3dbLTFdKCAwICAxICAyICAzICA0ICA1ICA2ICA3KQorCXB1bnBja2hidyB4bW01LHhtbTMJCTsgeG1tNT1yb3dbLTFdKCA4ICA5IDEwIDExIDEyIDEzIDE0IDE1KQorCW1vdmRxYSAgICB4bW02LHhtbTIKKwlwdW5wY2tsYncgeG1tMix4bW0zCQk7IHhtbTI9cm93WysxXSggMCAgMSAgMiAgMyAgNCAgNSAgNiAgNykKKwlwdW5wY2toYncgeG1tNix4bW0zCQk7IHhtbTY9cm93WysxXSggOCAgOSAxMCAxMSAxMiAxMyAxNCAxNSkKKworCXBtdWxsdwl4bW0wLFtyZWwgUFdfVEhSRUVdCisJcG11bGx3CXhtbTQsW3JlbCBQV19USFJFRV0KKworCXBhZGR3CXhtbTEseG1tMAkJOyB4bW0xPUludDBMPSggMCAgMSAgMiAgMyAgNCAgNSAgNiAgNykKKwlwYWRkdwl4bW01LHhtbTQJCTsgeG1tNT1JbnQwSD0oIDggIDkgMTAgMTEgMTIgMTMgMTQgMTUpCisJcGFkZHcJeG1tMix4bW0wCQk7IHhtbTI9SW50MUw9KCAwICAxICAyICAzICA0ICA1ICA2ICA3KQorCXBhZGR3CXhtbTYseG1tNAkJOyB4bW02PUludDFIPSggOCAgOSAxMCAxMSAxMiAxMyAxNCAxNSkKKworCW1vdmRxYQlYTU1XT1JEIFtyZHgrMipTSVpFT0ZfWE1NV09SRF0sIHhtbTEJOyB0ZW1wb3JhcmlseSBzYXZlCisJbW92ZHFhCVhNTVdPUkQgW3JkeCszKlNJWkVPRl9YTU1XT1JEXSwgeG1tNQk7IHRoZSBpbnRlcm1lZGlhdGUgZGF0YQorCW1vdmRxYQlYTU1XT1JEIFtyZGkrMipTSVpFT0ZfWE1NV09SRF0sIHhtbTIKKwltb3ZkcWEJWE1NV09SRCBbcmRpKzMqU0laRU9GX1hNTVdPUkRdLCB4bW02CisKKwlwc2xsZHEJeG1tMSwoU0laRU9GX1hNTVdPUkQtMikJOyB4bW0xPSgtLSAtLSAtLSAtLSAtLSAtLSAtLSAgMCkKKwlwc2xsZHEJeG1tMiwoU0laRU9GX1hNTVdPUkQtMikJOyB4bW0yPSgtLSAtLSAtLSAtLSAtLSAtLSAtLSAgMCkKKworCW1vdmRxYQlYTU1XT1JEIFt3aygyKV0sIHhtbTEKKwltb3ZkcWEJWE1NV09SRCBbd2soMyldLCB4bW0yCisKKy51cHNhbXBsZToKKwk7IC0tIHByb2Nlc3MgdGhlIHVwcGVyIHJvdworCisJbW92ZHFhCXhtbTcsIFhNTVdPUkQgW3JkeCswKlNJWkVPRl9YTU1XT1JEXQorCW1vdmRxYQl4bW0zLCBYTU1XT1JEIFtyZHgrMSpTSVpFT0ZfWE1NV09SRF0KKworCW1vdmRxYQl4bW0wLHhtbTcJCTsgeG1tNz1JbnQwTD0oIDAgIDEgIDIgIDMgIDQgIDUgIDYgIDcpCisJbW92ZHFhCXhtbTQseG1tMwkJOyB4bW0zPUludDBIPSggOCAgOSAxMCAxMSAxMiAxMyAxNCAxNSkKKwlwc3JsZHEJeG1tMCwyCQkJOyB4bW0wPSggMSAgMiAgMyAgNCAgNSAgNiAgNyAtLSkKKwlwc2xsZHEJeG1tNCwoU0laRU9GX1hNTVdPUkQtMikJOyB4bW00PSgtLSAtLSAtLSAtLSAtLSAtLSAtLSAgOCkKKwltb3ZkcWEJeG1tNSx4bW03CisJbW92ZHFhCXhtbTYseG1tMworCXBzcmxkcQl4bW01LChTSVpFT0ZfWE1NV09SRC0yKQk7IHhtbTU9KCA3IC0tIC0tIC0tIC0tIC0tIC0tIC0tKQorCXBzbGxkcQl4bW02LDIJCQk7IHhtbTY9KC0tICA4ICA5IDEwIDExIDEyIDEzIDE0KQorCisJcG9yCXhtbTAseG1tNAkJOyB4bW0wPSggMSAgMiAgMyAgNCAgNSAgNiAgNyAgOCkKKwlwb3IJeG1tNSx4bW02CQk7IHhtbTU9KCA3ICA4ICA5IDEwIDExIDEyIDEzIDE0KQorCisJbW92ZHFhCXhtbTEseG1tNworCW1vdmRxYQl4bW0yLHhtbTMKKwlwc2xsZHEJeG1tMSwyCQkJOyB4bW0xPSgtLSAgMCAgMSAgMiAgMyAgNCAgNSAgNikKKwlwc3JsZHEJeG1tMiwyCQkJOyB4bW0yPSggOSAxMCAxMSAxMiAxMyAxNCAxNSAtLSkKKwltb3ZkcWEJeG1tNCx4bW0zCisJcHNybGRxCXhtbTQsKFNJWkVPRl9YTU1XT1JELTIpCTsgeG1tND0oMTUgLS0gLS0gLS0gLS0gLS0gLS0gLS0pCisKKwlwb3IJeG1tMSwgWE1NV09SRCBbd2soMCldCTsgeG1tMT0oLTEgIDAgIDEgIDIgIDMgIDQgIDUgIDYpCisJcG9yCXhtbTIsIFhNTVdPUkQgW3drKDIpXQk7IHhtbTI9KCA5IDEwIDExIDEyIDEzIDE0IDE1IDE2KQorCisJbW92ZHFhCVhNTVdPUkQgW3drKDApXSwgeG1tNAorCisJcG11bGx3CXhtbTcsW3JlbCBQV19USFJFRV0KKwlwbXVsbHcJeG1tMyxbcmVsIFBXX1RIUkVFXQorCXBhZGR3CXhtbTEsW3JlbCBQV19FSUdIVF0KKwlwYWRkdwl4bW01LFtyZWwgUFdfRUlHSFRdCisJcGFkZHcJeG1tMCxbcmVsIFBXX1NFVkVOXQorCXBhZGR3CXhtbTIsW3JlbCBQV19TRVZFTl0KKworCXBhZGR3CXhtbTEseG1tNworCXBhZGR3CXhtbTUseG1tMworCXBzcmx3CXhtbTEsNAkJCTsgeG1tMT1PdXQwTEU9KCAwICAyICA0ICA2ICA4IDEwIDEyIDE0KQorCXBzcmx3CXhtbTUsNAkJCTsgeG1tNT1PdXQwSEU9KDE2IDE4IDIwIDIyIDI0IDI2IDI4IDMwKQorCXBhZGR3CXhtbTAseG1tNworCXBhZGR3CXhtbTIseG1tMworCXBzcmx3CXhtbTAsNAkJCTsgeG1tMD1PdXQwTE89KCAxICAzICA1ICA3ICA5IDExIDEzIDE1KQorCXBzcmx3CXhtbTIsNAkJCTsgeG1tMj1PdXQwSE89KDE3IDE5IDIxIDIzIDI1IDI3IDI5IDMxKQorCisJcHNsbHcJeG1tMCxCWVRFX0JJVAorCXBzbGx3CXhtbTIsQllURV9CSVQKKwlwb3IJeG1tMSx4bW0wCQk7IHhtbTE9T3V0MEw9KCAwICAxICAyIC4uLiAxMyAxNCAxNSkKKwlwb3IJeG1tNSx4bW0yCQk7IHhtbTU9T3V0MEg9KDE2IDE3IDE4IC4uLiAyOSAzMCAzMSkKKworCW1vdmRxYQlYTU1XT1JEIFtyZHgrMCpTSVpFT0ZfWE1NV09SRF0sIHhtbTEKKwltb3ZkcWEJWE1NV09SRCBbcmR4KzEqU0laRU9GX1hNTVdPUkRdLCB4bW01CisKKwk7IC0tIHByb2Nlc3MgdGhlIGxvd2VyIHJvdworCisJbW92ZHFhCXhtbTYsIFhNTVdPUkQgW3JkaSswKlNJWkVPRl9YTU1XT1JEXQorCW1vdmRxYQl4bW00LCBYTU1XT1JEIFtyZGkrMSpTSVpFT0ZfWE1NV09SRF0KKworCW1vdmRxYQl4bW03LHhtbTYJCTsgeG1tNj1JbnQxTD0oIDAgIDEgIDIgIDMgIDQgIDUgIDYgIDcpCisJbW92ZHFhCXhtbTMseG1tNAkJOyB4bW00PUludDFIPSggOCAgOSAxMCAxMSAxMiAxMyAxNCAxNSkKKwlwc3JsZHEJeG1tNywyCQkJOyB4bW03PSggMSAgMiAgMyAgNCAgNSAgNiAgNyAtLSkKKwlwc2xsZHEJeG1tMywoU0laRU9GX1hNTVdPUkQtMikJOyB4bW0zPSgtLSAtLSAtLSAtLSAtLSAtLSAtLSAgOCkKKwltb3ZkcWEJeG1tMCx4bW02CisJbW92ZHFhCXhtbTIseG1tNAorCXBzcmxkcQl4bW0wLChTSVpFT0ZfWE1NV09SRC0yKQk7IHhtbTA9KCA3IC0tIC0tIC0tIC0tIC0tIC0tIC0tKQorCXBzbGxkcQl4bW0yLDIJCQk7IHhtbTI9KC0tICA4ICA5IDEwIDExIDEyIDEzIDE0KQorCisJcG9yCXhtbTcseG1tMwkJOyB4bW03PSggMSAgMiAgMyAgNCAgNSAgNiAgNyAgOCkKKwlwb3IJeG1tMCx4bW0yCQk7IHhtbTA9KCA3ICA4ICA5IDEwIDExIDEyIDEzIDE0KQorCisJbW92ZHFhCXhtbTEseG1tNgorCW1vdmRxYQl4bW01LHhtbTQKKwlwc2xsZHEJeG1tMSwyCQkJOyB4bW0xPSgtLSAgMCAgMSAgMiAgMyAgNCAgNSAgNikKKwlwc3JsZHEJeG1tNSwyCQkJOyB4bW01PSggOSAxMCAxMSAxMiAxMyAxNCAxNSAtLSkKKwltb3ZkcWEJeG1tMyx4bW00CisJcHNybGRxCXhtbTMsKFNJWkVPRl9YTU1XT1JELTIpCTsgeG1tMz0oMTUgLS0gLS0gLS0gLS0gLS0gLS0gLS0pCisKKwlwb3IJeG1tMSwgWE1NV09SRCBbd2soMSldCTsgeG1tMT0oLTEgIDAgIDEgIDIgIDMgIDQgIDUgIDYpCisJcG9yCXhtbTUsIFhNTVdPUkQgW3drKDMpXQk7IHhtbTU9KCA5IDEwIDExIDEyIDEzIDE0IDE1IDE2KQorCisJbW92ZHFhCVhNTVdPUkQgW3drKDEpXSwgeG1tMworCisJcG11bGx3CXhtbTYsW3JlbCBQV19USFJFRV0KKwlwbXVsbHcJeG1tNCxbcmVsIFBXX1RIUkVFXQorCXBhZGR3CXhtbTEsW3JlbCBQV19FSUdIVF0KKwlwYWRkdwl4bW0wLFtyZWwgUFdfRUlHSFRdCisJcGFkZHcJeG1tNyxbcmVsIFBXX1NFVkVOXQorCXBhZGR3CXhtbTUsW3JlbCBQV19TRVZFTl0KKworCXBhZGR3CXhtbTEseG1tNgorCXBhZGR3CXhtbTAseG1tNAorCXBzcmx3CXhtbTEsNAkJCTsgeG1tMT1PdXQxTEU9KCAwICAyICA0ICA2ICA4IDEwIDEyIDE0KQorCXBzcmx3CXhtbTAsNAkJCTsgeG1tMD1PdXQxSEU9KDE2IDE4IDIwIDIyIDI0IDI2IDI4IDMwKQorCXBhZGR3CXhtbTcseG1tNgorCXBhZGR3CXhtbTUseG1tNAorCXBzcmx3CXhtbTcsNAkJCTsgeG1tNz1PdXQxTE89KCAxICAzICA1ICA3ICA5IDExIDEzIDE1KQorCXBzcmx3CXhtbTUsNAkJCTsgeG1tNT1PdXQxSE89KDE3IDE5IDIxIDIzIDI1IDI3IDI5IDMxKQorCisJcHNsbHcJeG1tNyxCWVRFX0JJVAorCXBzbGx3CXhtbTUsQllURV9CSVQKKwlwb3IJeG1tMSx4bW03CQk7IHhtbTE9T3V0MUw9KCAwICAxICAyIC4uLiAxMyAxNCAxNSkKKwlwb3IJeG1tMCx4bW01CQk7IHhtbTA9T3V0MUg9KDE2IDE3IDE4IC4uLiAyOSAzMCAzMSkKKworCW1vdmRxYQlYTU1XT1JEIFtyZGkrMCpTSVpFT0ZfWE1NV09SRF0sIHhtbTEKKwltb3ZkcWEJWE1NV09SRCBbcmRpKzEqU0laRU9GX1hNTVdPUkRdLCB4bW0wCisKKwlzdWIJcmF4LCBieXRlIFNJWkVPRl9YTU1XT1JECisJYWRkCXJjeCwgYnl0ZSAxKlNJWkVPRl9YTU1XT1JECTsgaW5wdHIxKGFib3ZlKQorCWFkZAlyYngsIGJ5dGUgMSpTSVpFT0ZfWE1NV09SRAk7IGlucHRyMAorCWFkZAlyc2ksIGJ5dGUgMSpTSVpFT0ZfWE1NV09SRAk7IGlucHRyMShiZWxvdykKKwlhZGQJcmR4LCBieXRlIDIqU0laRU9GX1hNTVdPUkQJOyBvdXRwdHIwCisJYWRkCXJkaSwgYnl0ZSAyKlNJWkVPRl9YTU1XT1JECTsgb3V0cHRyMQorCWNtcAlyYXgsIGJ5dGUgU0laRU9GX1hNTVdPUkQKKwlqYQluZWFyIC5jb2x1bW5sb29wCisJdGVzdAlyYXgscmF4CisJam56CW5lYXIgLmNvbHVtbmxvb3BfbGFzdAorCisJcG9wCXJzaQorCXBvcAlyZGkKKwlwb3AJcmN4CisJcG9wCXJheAorCisJYWRkCXJzaSwgYnl0ZSAxKlNJWkVPRl9KU0FNUFJPVwk7IGlucHV0X2RhdGEKKwlhZGQJcmRpLCBieXRlIDIqU0laRU9GX0pTQU1QUk9XCTsgb3V0cHV0X2RhdGEKKwlzdWIJcmN4LCBieXRlIDIJCQk7IHJvd2N0cgorCWpnCW5lYXIgLnJvd2xvb3AKKworLnJldHVybjoKKwlwb3AJcmJ4CisJdW5jb2xsZWN0X2FyZ3MKKwltb3YJcnNwLHJicAkJOyByc3AgPC0gYWxpZ25lZCByYnAKKwlwb3AJcnNwCQk7IHJzcCA8LSBvcmlnaW5hbCByYnAKKwlwb3AJcmJwCisJcmV0CisKKzsgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKzsKKzsgRmFzdCBwcm9jZXNzaW5nIGZvciB0aGUgY29tbW9uIGNhc2Ugb2YgMjoxIGhvcml6b250YWwgYW5kIDE6MSB2ZXJ0aWNhbC4KKzsgSXQncyBzdGlsbCBhIGJveCBmaWx0ZXIuCis7Cis7IEdMT0JBTCh2b2lkKQorOyBqc2ltZF9oMnYxX3Vwc2FtcGxlX3NzZTIgKGludCBtYXhfdl9zYW1wX2ZhY3RvciwKKzsgICAgICAgICAgICAgICAgICAgICAgICAgICBKRElNRU5TSU9OIG91dHB1dF93aWR0aCwKKzsgICAgICAgICAgICAgICAgICAgICAgICAgICBKU0FNUEFSUkFZIGlucHV0X2RhdGEsCis7ICAgICAgICAgICAgICAgICAgICAgICAgICAgSlNBTVBBUlJBWSAqIG91dHB1dF9kYXRhX3B0cik7Cis7CisKKzsgcjEwID0gaW50IG1heF92X3NhbXBfZmFjdG9yCis7IHIxMSA9IEpESU1FTlNJT04gb3V0cHV0X3dpZHRoCis7IHIxMiA9IEpTQU1QQVJSQVkgaW5wdXRfZGF0YQorOyByMTMgPSBKU0FNUEFSUkFZICogb3V0cHV0X2RhdGFfcHRyCisKKwlhbGlnbgkxNgorCWdsb2JhbAlFWFROKGpzaW1kX2gydjFfdXBzYW1wbGVfc3NlMikKKworRVhUTihqc2ltZF9oMnYxX3Vwc2FtcGxlX3NzZTIpOgorCXB1c2gJcmJwCisJbW92CXJheCxyc3AKKwltb3YJcmJwLHJzcAorCWNvbGxlY3RfYXJncworCisJbW92CXJkeCwgcjExCisJYWRkCXJkeCwgYnl0ZSAoMipTSVpFT0ZfWE1NV09SRCktMQorCWFuZAlyZHgsIGJ5dGUgLSgyKlNJWkVPRl9YTU1XT1JEKQorCWp6CW5lYXIgLnJldHVybgorCisJbW92CXJjeCwgcjEwCTsgcm93Y3RyCisJdGVzdAlyY3gscmN4CisJanoJc2hvcnQgLnJldHVybgorCisJbW92CXJzaSwgcjEyIDsgaW5wdXRfZGF0YQorCW1vdglyZGksIHIxMworCW1vdglyZGksIEpTQU1QQVJSQVkgW3JkaV0JCQk7IG91dHB1dF9kYXRhCisucm93bG9vcDoKKwlwdXNoCXJkaQorCXB1c2gJcnNpCisKKwltb3YJcnNpLCBKU0FNUFJPVyBbcnNpXQkJOyBpbnB0cgorCW1vdglyZGksIEpTQU1QUk9XIFtyZGldCQk7IG91dHB0cgorCW1vdglyYXgscmR4CQkJCTsgY29sY3RyCisuY29sdW1ubG9vcDoKKworCW1vdmRxYQl4bW0wLCBYTU1XT1JEIFtyc2krMCpTSVpFT0ZfWE1NV09SRF0KKworCW1vdmRxYSAgICB4bW0xLHhtbTAKKwlwdW5wY2tsYncgeG1tMCx4bW0wCisJcHVucGNraGJ3IHhtbTEseG1tMQorCisJbW92ZHFhCVhNTVdPUkQgW3JkaSswKlNJWkVPRl9YTU1XT1JEXSwgeG1tMAorCW1vdmRxYQlYTU1XT1JEIFtyZGkrMSpTSVpFT0ZfWE1NV09SRF0sIHhtbTEKKworCXN1YglyYXgsIGJ5dGUgMipTSVpFT0ZfWE1NV09SRAorCWp6CXNob3J0IC5uZXh0cm93CisKKwltb3ZkcWEJeG1tMiwgWE1NV09SRCBbcnNpKzEqU0laRU9GX1hNTVdPUkRdCisKKwltb3ZkcWEgICAgeG1tMyx4bW0yCisJcHVucGNrbGJ3IHhtbTIseG1tMgorCXB1bnBja2hidyB4bW0zLHhtbTMKKworCW1vdmRxYQlYTU1XT1JEIFtyZGkrMipTSVpFT0ZfWE1NV09SRF0sIHhtbTIKKwltb3ZkcWEJWE1NV09SRCBbcmRpKzMqU0laRU9GX1hNTVdPUkRdLCB4bW0zCisKKwlzdWIJcmF4LCBieXRlIDIqU0laRU9GX1hNTVdPUkQKKwlqeglzaG9ydCAubmV4dHJvdworCisJYWRkCXJzaSwgYnl0ZSAyKlNJWkVPRl9YTU1XT1JECTsgaW5wdHIKKwlhZGQJcmRpLCBieXRlIDQqU0laRU9GX1hNTVdPUkQJOyBvdXRwdHIKKwlqbXAJc2hvcnQgLmNvbHVtbmxvb3AKKworLm5leHRyb3c6CisJcG9wCXJzaQorCXBvcAlyZGkKKworCWFkZAlyc2ksIGJ5dGUgU0laRU9GX0pTQU1QUk9XCTsgaW5wdXRfZGF0YQorCWFkZAlyZGksIGJ5dGUgU0laRU9GX0pTQU1QUk9XCTsgb3V0cHV0X2RhdGEKKwlkZWMJcmN4CQkJCTsgcm93Y3RyCisJamcJc2hvcnQgLnJvd2xvb3AKKworLnJldHVybjoKKwl1bmNvbGxlY3RfYXJncworCXBvcAlyYnAKKwlyZXQKKworOyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorOworOyBGYXN0IHByb2Nlc3NpbmcgZm9yIHRoZSBjb21tb24gY2FzZSBvZiAyOjEgaG9yaXpvbnRhbCBhbmQgMjoxIHZlcnRpY2FsLgorOyBJdCdzIHN0aWxsIGEgYm94IGZpbHRlci4KKzsKKzsgR0xPQkFMKHZvaWQpCis7IGpzaW1kX2gydjJfdXBzYW1wbGVfc3NlMiAobnQgbWF4X3Zfc2FtcF9mYWN0b3IsCis7ICAgICAgICAgICAgICAgICAgICAgICAgICAgSkRJTUVOU0lPTiBvdXRwdXRfd2lkdGgsCis7ICAgICAgICAgICAgICAgICAgICAgICAgICAgSlNBTVBBUlJBWSBpbnB1dF9kYXRhLAorOyAgICAgICAgICAgICAgICAgICAgICAgICAgIEpTQU1QQVJSQVkgKiBvdXRwdXRfZGF0YV9wdHIpOworOworCis7IHIxMCA9IGludCBtYXhfdl9zYW1wX2ZhY3RvcgorOyByMTEgPSBKRElNRU5TSU9OIG91dHB1dF93aWR0aAorOyByMTIgPSBKU0FNUEFSUkFZIGlucHV0X2RhdGEKKzsgcjEzID0gSlNBTVBBUlJBWSAqIG91dHB1dF9kYXRhX3B0cgorCisJYWxpZ24JMTYKKwlnbG9iYWwJRVhUTihqc2ltZF9oMnYyX3Vwc2FtcGxlX3NzZTIpCisKK0VYVE4oanNpbWRfaDJ2Ml91cHNhbXBsZV9zc2UyKToKKwlwdXNoCXJicAorCW1vdglyYXgscnNwCisJbW92CXJicCxyc3AKKwljb2xsZWN0X2FyZ3MKKwlwdXNoCXJieAorCisJbW92CXJkeCwgcjExCisJYWRkCXJkeCwgYnl0ZSAoMipTSVpFT0ZfWE1NV09SRCktMQorCWFuZAlyZHgsIGJ5dGUgLSgyKlNJWkVPRl9YTU1XT1JEKQorCWp6CW5lYXIgLnJldHVybgorCisJbW92CXJjeCwgcjEwCTsgcm93Y3RyCisJdGVzdAlyY3gscmN4CisJanoJbmVhciAucmV0dXJuCisKKwltb3YJcnNpLCByMTIJOyBpbnB1dF9kYXRhCisJbW92CXJkaSwgcjEzCisJbW92CXJkaSwgSlNBTVBBUlJBWSBbcmRpXQkJCTsgb3V0cHV0X2RhdGEKKy5yb3dsb29wOgorCXB1c2gJcmRpCisJcHVzaAlyc2kKKworCW1vdglyc2ksIEpTQU1QUk9XIFtyc2ldCQkJOyBpbnB0cgorCW1vdglyYngsIEpTQU1QUk9XIFtyZGkrMCpTSVpFT0ZfSlNBTVBST1ddCTsgb3V0cHRyMAorCW1vdglyZGksIEpTQU1QUk9XIFtyZGkrMSpTSVpFT0ZfSlNBTVBST1ddCTsgb3V0cHRyMQorCW1vdglyYXgscmR4CQkJCQk7IGNvbGN0cgorLmNvbHVtbmxvb3A6CisKKwltb3ZkcWEJeG1tMCwgWE1NV09SRCBbcnNpKzAqU0laRU9GX1hNTVdPUkRdCisKKwltb3ZkcWEgICAgeG1tMSx4bW0wCisJcHVucGNrbGJ3IHhtbTAseG1tMAorCXB1bnBja2hidyB4bW0xLHhtbTEKKworCW1vdmRxYQlYTU1XT1JEIFtyYngrMCpTSVpFT0ZfWE1NV09SRF0sIHhtbTAKKwltb3ZkcWEJWE1NV09SRCBbcmJ4KzEqU0laRU9GX1hNTVdPUkRdLCB4bW0xCisJbW92ZHFhCVhNTVdPUkQgW3JkaSswKlNJWkVPRl9YTU1XT1JEXSwgeG1tMAorCW1vdmRxYQlYTU1XT1JEIFtyZGkrMSpTSVpFT0ZfWE1NV09SRF0sIHhtbTEKKworCXN1YglyYXgsIGJ5dGUgMipTSVpFT0ZfWE1NV09SRAorCWp6CXNob3J0IC5uZXh0cm93CisKKwltb3ZkcWEJeG1tMiwgWE1NV09SRCBbcnNpKzEqU0laRU9GX1hNTVdPUkRdCisKKwltb3ZkcWEgICAgeG1tMyx4bW0yCisJcHVucGNrbGJ3IHhtbTIseG1tMgorCXB1bnBja2hidyB4bW0zLHhtbTMKKworCW1vdmRxYQlYTU1XT1JEIFtyYngrMipTSVpFT0ZfWE1NV09SRF0sIHhtbTIKKwltb3ZkcWEJWE1NV09SRCBbcmJ4KzMqU0laRU9GX1hNTVdPUkRdLCB4bW0zCisJbW92ZHFhCVhNTVdPUkQgW3JkaSsyKlNJWkVPRl9YTU1XT1JEXSwgeG1tMgorCW1vdmRxYQlYTU1XT1JEIFtyZGkrMypTSVpFT0ZfWE1NV09SRF0sIHhtbTMKKworCXN1YglyYXgsIGJ5dGUgMipTSVpFT0ZfWE1NV09SRAorCWp6CXNob3J0IC5uZXh0cm93CisKKwlhZGQJcnNpLCBieXRlIDIqU0laRU9GX1hNTVdPUkQJOyBpbnB0cgorCWFkZAlyYngsIGJ5dGUgNCpTSVpFT0ZfWE1NV09SRAk7IG91dHB0cjAKKwlhZGQJcmRpLCBieXRlIDQqU0laRU9GX1hNTVdPUkQJOyBvdXRwdHIxCisJam1wCXNob3J0IC5jb2x1bW5sb29wCisKKy5uZXh0cm93OgorCXBvcAlyc2kKKwlwb3AJcmRpCisKKwlhZGQJcnNpLCBieXRlIDEqU0laRU9GX0pTQU1QUk9XCTsgaW5wdXRfZGF0YQorCWFkZAlyZGksIGJ5dGUgMipTSVpFT0ZfSlNBTVBST1cJOyBvdXRwdXRfZGF0YQorCXN1YglyY3gsIGJ5dGUgMgkJCTsgcm93Y3RyCisJamcJbmVhciAucm93bG9vcAorCisucmV0dXJuOgorCXBvcAlyYngKKwl1bmNvbGxlY3RfYXJncworCXBvcAlyYnAKKwlyZXQKKworOyBGb3Igc29tZSByZWFzb24sIHRoZSBPUyBYIGxpbmtlciBkb2VzIG5vdCBob25vciB0aGUgcmVxdWVzdCB0byBhbGlnbiB0aGUKKzsgc2VnbWVudCB1bmxlc3Mgd2UgZG8gdGhpcy4KKwlhbGlnbgkxNgpkaWZmIC0tZ2l0IGEvc2ltZC9qZHNhbXNzMi5hc20gYi9zaW1kL2pkc2Ftc3MyLmFzbQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iNWM4NjNiCi0tLSAvZGV2L251bGwKKysrIGIvc2ltZC9qZHNhbXNzMi5hc20KQEAgLTAsMCArMSw3MjkgQEAKKzsKKzsgamRzYW1zczIuYXNtIC0gdXBzYW1wbGluZyAoU1NFMikKKzsKKzsgQ29weXJpZ2h0IDIwMDkgUGllcnJlIE9zc21hbiA8b3NzbWFuQGNlbmRpby5zZT4gZm9yIENlbmRpbyBBQgorOworOyBCYXNlZCBvbgorOyB4ODYgU0lNRCBleHRlbnNpb24gZm9yIElKRyBKUEVHIGxpYnJhcnkKKzsgQ29weXJpZ2h0IChDKSAxOTk5LTIwMDYsIE1JWUFTQUtBIE1hc2FydS4KKzsgRm9yIGNvbmRpdGlvbnMgb2YgZGlzdHJpYnV0aW9uIGFuZCB1c2UsIHNlZSBjb3B5cmlnaHQgbm90aWNlIGluIGpzaW1kZXh0LmluYworOworOyBUaGlzIGZpbGUgc2hvdWxkIGJlIGFzc2VtYmxlZCB3aXRoIE5BU00gKE5ldHdpZGUgQXNzZW1ibGVyKSwKKzsgY2FuICpub3QqIGJlIGFzc2VtYmxlZCB3aXRoIE1pY3Jvc29mdCdzIE1BU00gb3IgYW55IGNvbXBhdGlibGUKKzsgYXNzZW1ibGVyIChpbmNsdWRpbmcgQm9ybGFuZCdzIFR1cmJvIEFzc2VtYmxlcikuCis7IE5BU00gaXMgYXZhaWxhYmxlIGZyb20gaHR0cDovL25hc20uc291cmNlZm9yZ2UubmV0LyBvcgorOyBodHRwOi8vc291cmNlZm9yZ2UubmV0L3Byb2plY3Qvc2hvd2ZpbGVzLnBocD9ncm91cF9pZD02MjA4Cis7Cis7IFtUQUI4XQorCislaW5jbHVkZSAianNpbWRleHQuaW5jIgorCis7IC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisJU0VDVElPTglTRUdfQ09OU1QKKworCWFsaWduegkxNgorCWdsb2JhbAlFWFROKGpjb25zdF9mYW5jeV91cHNhbXBsZV9zc2UyKQorCitFWFROKGpjb25zdF9mYW5jeV91cHNhbXBsZV9zc2UyKToKKworUFdfT05FCQl0aW1lcyA4IGR3ICAxCitQV19UV08JCXRpbWVzIDggZHcgIDIKK1BXX1RIUkVFCXRpbWVzIDggZHcgIDMKK1BXX1NFVkVOCXRpbWVzIDggZHcgIDcKK1BXX0VJR0hUCXRpbWVzIDggZHcgIDgKKworCWFsaWduegkxNgorCis7IC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisJU0VDVElPTglTRUdfVEVYVAorCUJJVFMJMzIKKzsKKzsgRmFuY3kgcHJvY2Vzc2luZyBmb3IgdGhlIGNvbW1vbiBjYXNlIG9mIDI6MSBob3Jpem9udGFsIGFuZCAxOjEgdmVydGljYWwuCis7Cis7IFRoZSB1cHNhbXBsaW5nIGFsZ29yaXRobSBpcyBsaW5lYXIgaW50ZXJwb2xhdGlvbiBiZXR3ZWVuIHBpeGVsIGNlbnRlcnMsCis7IGFsc28ga25vd24gYXMgYSAidHJpYW5nbGUgZmlsdGVyIi4gIFRoaXMgaXMgYSBnb29kIGNvbXByb21pc2UgYmV0d2VlbgorOyBzcGVlZCBhbmQgdmlzdWFsIHF1YWxpdHkuICBUaGUgY2VudGVycyBvZiB0aGUgb3V0cHV0IHBpeGVscyBhcmUgMS80IGFuZCAzLzQKKzsgb2YgdGhlIHdheSBiZXR3ZWVuIGlucHV0IHBpeGVsIGNlbnRlcnMuCis7Cis7IEdMT0JBTCh2b2lkKQorOyBqc2ltZF9oMnYxX2ZhbmN5X3Vwc2FtcGxlX3NzZTIgKGludCBtYXhfdl9zYW1wX2ZhY3RvciwKKzsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBKRElNRU5TSU9OIGRvd25zYW1wbGVkX3dpZHRoLAorOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEpTQU1QQVJSQVkgaW5wdXRfZGF0YSwKKzsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBKU0FNUEFSUkFZICogb3V0cHV0X2RhdGFfcHRyKTsKKzsKKworJWRlZmluZSBtYXhfdl9zYW1wKGIpCQkoYikrOAkJCTsgaW50IG1heF92X3NhbXBfZmFjdG9yCislZGVmaW5lIGRvd25zYW1wX3dpZHRoKGIpCShiKSsxMgk7IEpESU1FTlNJT04gZG93bnNhbXBsZWRfd2lkdGgKKyVkZWZpbmUgaW5wdXRfZGF0YShiKQkJKGIpKzE2CQk7IEpTQU1QQVJSQVkgaW5wdXRfZGF0YQorJWRlZmluZSBvdXRwdXRfZGF0YV9wdHIoYikJKGIpKzIwCQk7IEpTQU1QQVJSQVkgKiBvdXRwdXRfZGF0YV9wdHIKKworCWFsaWduCTE2CisJZ2xvYmFsCUVYVE4oanNpbWRfaDJ2MV9mYW5jeV91cHNhbXBsZV9zc2UyKQorCitFWFROKGpzaW1kX2gydjFfZmFuY3lfdXBzYW1wbGVfc3NlMik6CisJcHVzaAllYnAKKwltb3YJZWJwLGVzcAorCXB1c2hwaWMJZWJ4Cis7CXB1c2gJZWN4CQk7IG5lZWQgbm90IGJlIHByZXNlcnZlZAorOwlwdXNoCWVkeAkJOyBuZWVkIG5vdCBiZSBwcmVzZXJ2ZWQKKwlwdXNoCWVzaQorCXB1c2gJZWRpCisKKwlnZXRfR09UCWVieAkJOyBnZXQgR09UIGFkZHJlc3MKKworCW1vdgllYXgsIEpESU1FTlNJT04gW2Rvd25zYW1wX3dpZHRoKGVicCldICA7IGNvbGN0cgorCXRlc3QJZWF4LGVheAorCWp6CW5lYXIgLnJldHVybgorCisJbW92CWVjeCwgSU5UIFttYXhfdl9zYW1wKGVicCldCTsgcm93Y3RyCisJdGVzdAllY3gsZWN4CisJanoJbmVhciAucmV0dXJuCisKKwltb3YJZXNpLCBKU0FNUEFSUkFZIFtpbnB1dF9kYXRhKGVicCldCTsgaW5wdXRfZGF0YQorCW1vdgllZGksIFBPSU5URVIgW291dHB1dF9kYXRhX3B0cihlYnApXQorCW1vdgllZGksIEpTQU1QQVJSQVkgW2VkaV0JCQk7IG91dHB1dF9kYXRhCisJYWxpZ254CTE2LDcKKy5yb3dsb29wOgorCXB1c2gJZWF4CQkJOyBjb2xjdHIKKwlwdXNoCWVkaQorCXB1c2gJZXNpCisKKwltb3YJZXNpLCBKU0FNUFJPVyBbZXNpXQk7IGlucHRyCisJbW92CWVkaSwgSlNBTVBST1cgW2VkaV0JOyBvdXRwdHIKKworCXRlc3QJZWF4LCBTSVpFT0ZfWE1NV09SRC0xCisJanoJc2hvcnQgLnNraXAKKwltb3YJZGwsIEpTQU1QTEUgW2VzaSsoZWF4LTEpKlNJWkVPRl9KU0FNUExFXQorCW1vdglKU0FNUExFIFtlc2krZWF4KlNJWkVPRl9KU0FNUExFXSwgZGwJOyBpbnNlcnQgYSBkdW1teSBzYW1wbGUKKy5za2lwOgorCXB4b3IJeG1tMCx4bW0wCQk7IHhtbTA9KGFsbCAwJ3MpCisJcGNtcGVxYgl4bW03LHhtbTcKKwlwc3JsZHEJeG1tNywoU0laRU9GX1hNTVdPUkQtMSkKKwlwYW5kCXhtbTcsIFhNTVdPUkQgW2VzaSswKlNJWkVPRl9YTU1XT1JEXQorCisJYWRkCWVheCwgYnl0ZSBTSVpFT0ZfWE1NV09SRC0xCisJYW5kCWVheCwgYnl0ZSAtU0laRU9GX1hNTVdPUkQKKwljbXAJZWF4LCBieXRlIFNJWkVPRl9YTU1XT1JECisJamEJc2hvcnQgLmNvbHVtbmxvb3AKKwlhbGlnbngJMTYsNworCisuY29sdW1ubG9vcF9sYXN0OgorCXBjbXBlcWIJeG1tNix4bW02CisJcHNsbGRxCXhtbTYsKFNJWkVPRl9YTU1XT1JELTEpCisJcGFuZAl4bW02LCBYTU1XT1JEIFtlc2krMCpTSVpFT0ZfWE1NV09SRF0KKwlqbXAJc2hvcnQgLnVwc2FtcGxlCisJYWxpZ254CTE2LDcKKworLmNvbHVtbmxvb3A6CisJbW92ZHFhCXhtbTYsIFhNTVdPUkQgW2VzaSsxKlNJWkVPRl9YTU1XT1JEXQorCXBzbGxkcQl4bW02LChTSVpFT0ZfWE1NV09SRC0xKQorCisudXBzYW1wbGU6CisJbW92ZHFhCXhtbTEsIFhNTVdPUkQgW2VzaSswKlNJWkVPRl9YTU1XT1JEXQorCW1vdmRxYQl4bW0yLHhtbTEKKwltb3ZkcWEJeG1tMyx4bW0xCQk7IHhtbTE9KCAwICAxICAyIC4uLiAxMyAxNCAxNSkKKwlwc2xsZHEJeG1tMiwxCQkJOyB4bW0yPSgtLSAgMCAgMSAuLi4gMTIgMTMgMTQpCisJcHNybGRxCXhtbTMsMQkJCTsgeG1tMz0oIDEgIDIgIDMgLi4uIDE0IDE1IC0tKQorCisJcG9yCXhtbTIseG1tNwkJOyB4bW0yPSgtMSAgMCAgMSAuLi4gMTIgMTMgMTQpCisJcG9yCXhtbTMseG1tNgkJOyB4bW0zPSggMSAgMiAgMyAuLi4gMTQgMTUgMTYpCisKKwltb3ZkcWEJeG1tNyx4bW0xCisJcHNybGRxCXhtbTcsKFNJWkVPRl9YTU1XT1JELTEpCTsgeG1tNz0oMTUgLS0gLS0gLi4uIC0tIC0tIC0tKQorCisJbW92ZHFhICAgIHhtbTQseG1tMQorCXB1bnBja2xidyB4bW0xLHhtbTAJCTsgeG1tMT0oIDAgIDEgIDIgIDMgIDQgIDUgIDYgIDcpCisJcHVucGNraGJ3IHhtbTQseG1tMAkJOyB4bW00PSggOCAgOSAxMCAxMSAxMiAxMyAxNCAxNSkKKwltb3ZkcWEgICAgeG1tNSx4bW0yCisJcHVucGNrbGJ3IHhtbTIseG1tMAkJOyB4bW0yPSgtMSAgMCAgMSAgMiAgMyAgNCAgNSAgNikKKwlwdW5wY2toYncgeG1tNSx4bW0wCQk7IHhtbTU9KCA3ICA4ICA5IDEwIDExIDEyIDEzIDE0KQorCW1vdmRxYSAgICB4bW02LHhtbTMKKwlwdW5wY2tsYncgeG1tMyx4bW0wCQk7IHhtbTM9KCAxICAyICAzICA0ICA1ICA2ICA3ICA4KQorCXB1bnBja2hidyB4bW02LHhtbTAJCTsgeG1tNj0oIDkgMTAgMTEgMTIgMTMgMTQgMTUgMTYpCisKKwlwbXVsbHcJeG1tMSxbR09UT0ZGKGVieCxQV19USFJFRSldCisJcG11bGx3CXhtbTQsW0dPVE9GRihlYngsUFdfVEhSRUUpXQorCXBhZGR3CXhtbTIsW0dPVE9GRihlYngsUFdfT05FKV0KKwlwYWRkdwl4bW01LFtHT1RPRkYoZWJ4LFBXX09ORSldCisJcGFkZHcJeG1tMyxbR09UT0ZGKGVieCxQV19UV08pXQorCXBhZGR3CXhtbTYsW0dPVE9GRihlYngsUFdfVFdPKV0KKworCXBhZGR3CXhtbTIseG1tMQorCXBhZGR3CXhtbTUseG1tNAorCXBzcmx3CXhtbTIsMgkJCTsgeG1tMj1PdXRMRT0oIDAgIDIgIDQgIDYgIDggMTAgMTIgMTQpCisJcHNybHcJeG1tNSwyCQkJOyB4bW01PU91dEhFPSgxNiAxOCAyMCAyMiAyNCAyNiAyOCAzMCkKKwlwYWRkdwl4bW0zLHhtbTEKKwlwYWRkdwl4bW02LHhtbTQKKwlwc3Jsdwl4bW0zLDIJCQk7IHhtbTM9T3V0TE89KCAxICAzICA1ICA3ICA5IDExIDEzIDE1KQorCXBzcmx3CXhtbTYsMgkJCTsgeG1tNj1PdXRITz0oMTcgMTkgMjEgMjMgMjUgMjcgMjkgMzEpCisKKwlwc2xsdwl4bW0zLEJZVEVfQklUCisJcHNsbHcJeG1tNixCWVRFX0JJVAorCXBvcgl4bW0yLHhtbTMJCTsgeG1tMj1PdXRMPSggMCAgMSAgMiAuLi4gMTMgMTQgMTUpCisJcG9yCXhtbTUseG1tNgkJOyB4bW01PU91dEg9KDE2IDE3IDE4IC4uLiAyOSAzMCAzMSkKKworCW1vdmRxYQlYTU1XT1JEIFtlZGkrMCpTSVpFT0ZfWE1NV09SRF0sIHhtbTIKKwltb3ZkcWEJWE1NV09SRCBbZWRpKzEqU0laRU9GX1hNTVdPUkRdLCB4bW01CisKKwlzdWIJZWF4LCBieXRlIFNJWkVPRl9YTU1XT1JECisJYWRkCWVzaSwgYnl0ZSAxKlNJWkVPRl9YTU1XT1JECTsgaW5wdHIKKwlhZGQJZWRpLCBieXRlIDIqU0laRU9GX1hNTVdPUkQJOyBvdXRwdHIKKwljbXAJZWF4LCBieXRlIFNJWkVPRl9YTU1XT1JECisJamEJbmVhciAuY29sdW1ubG9vcAorCXRlc3QJZWF4LGVheAorCWpuegluZWFyIC5jb2x1bW5sb29wX2xhc3QKKworCXBvcAllc2kKKwlwb3AJZWRpCisJcG9wCWVheAorCisJYWRkCWVzaSwgYnl0ZSBTSVpFT0ZfSlNBTVBST1cJOyBpbnB1dF9kYXRhCisJYWRkCWVkaSwgYnl0ZSBTSVpFT0ZfSlNBTVBST1cJOyBvdXRwdXRfZGF0YQorCWRlYwllY3gJCQkJOyByb3djdHIKKwlqZwluZWFyIC5yb3dsb29wCisKKy5yZXR1cm46CisJcG9wCWVkaQorCXBvcAllc2kKKzsJcG9wCWVkeAkJOyBuZWVkIG5vdCBiZSBwcmVzZXJ2ZWQKKzsJcG9wCWVjeAkJOyBuZWVkIG5vdCBiZSBwcmVzZXJ2ZWQKKwlwb3BwaWMJZWJ4CisJcG9wCWVicAorCXJldAorCis7IC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCis7Cis7IEZhbmN5IHByb2Nlc3NpbmcgZm9yIHRoZSBjb21tb24gY2FzZSBvZiAyOjEgaG9yaXpvbnRhbCBhbmQgMjoxIHZlcnRpY2FsLgorOyBBZ2FpbiBhIHRyaWFuZ2xlIGZpbHRlcjsgc2VlIGNvbW1lbnRzIGZvciBoMnYxIGNhc2UsIGFib3ZlLgorOworOyBHTE9CQUwodm9pZCkKKzsganNpbWRfaDJ2Ml9mYW5jeV91cHNhbXBsZV9zc2UyIChpbnQgbWF4X3Zfc2FtcF9mYWN0b3IsCis7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSkRJTUVOU0lPTiBkb3duc2FtcGxlZF93aWR0aCwKKzsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBKU0FNUEFSUkFZIGlucHV0X2RhdGEsCis7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSlNBTVBBUlJBWSAqIG91dHB1dF9kYXRhX3B0cik7Cis7CisKKyVkZWZpbmUgbWF4X3Zfc2FtcChiKQkJKGIpKzgJCQk7IGludCBtYXhfdl9zYW1wX2ZhY3RvcgorJWRlZmluZSBkb3duc2FtcF93aWR0aChiKQkoYikrMTIJOyBKRElNRU5TSU9OIGRvd25zYW1wbGVkX3dpZHRoCislZGVmaW5lIGlucHV0X2RhdGEoYikJCShiKSsxNgkJOyBKU0FNUEFSUkFZIGlucHV0X2RhdGEKKyVkZWZpbmUgb3V0cHV0X2RhdGFfcHRyKGIpCShiKSsyMAkJOyBKU0FNUEFSUkFZICogb3V0cHV0X2RhdGFfcHRyCisKKyVkZWZpbmUgb3JpZ2luYWxfZWJwCWVicCswCislZGVmaW5lIHdrKGkpCQllYnAtKFdLX05VTS0oaSkpKlNJWkVPRl9YTU1XT1JECTsgeG1td29yZCB3a1tXS19OVU1dCislZGVmaW5lIFdLX05VTQkJNAorJWRlZmluZSBnb3RwdHIJCXdrKDApLVNJWkVPRl9QT0lOVEVSCTsgdm9pZCAqIGdvdHB0cgorCisJYWxpZ24JMTYKKwlnbG9iYWwJRVhUTihqc2ltZF9oMnYyX2ZhbmN5X3Vwc2FtcGxlX3NzZTIpCisKK0VYVE4oanNpbWRfaDJ2Ml9mYW5jeV91cHNhbXBsZV9zc2UyKToKKwlwdXNoCWVicAorCW1vdgllYXgsZXNwCQkJCTsgZWF4ID0gb3JpZ2luYWwgZWJwCisJc3ViCWVzcCwgYnl0ZSA0CisJYW5kCWVzcCwgYnl0ZSAoLVNJWkVPRl9YTU1XT1JEKQk7IGFsaWduIHRvIDEyOCBiaXRzCisJbW92CVtlc3BdLGVheAorCW1vdgllYnAsZXNwCQkJCTsgZWJwID0gYWxpZ25lZCBlYnAKKwlsZWEJZXNwLCBbd2soMCldCisJcHVzaHBpYwllYXgJCTsgbWFrZSBhIHJvb20gZm9yIEdPVCBhZGRyZXNzCisJcHVzaAllYngKKzsJcHVzaAllY3gJCTsgbmVlZCBub3QgYmUgcHJlc2VydmVkCis7CXB1c2gJZWR4CQk7IG5lZWQgbm90IGJlIHByZXNlcnZlZAorCXB1c2gJZXNpCisJcHVzaAllZGkKKworCWdldF9HT1QJZWJ4CQkJOyBnZXQgR09UIGFkZHJlc3MKKwltb3ZwaWMJUE9JTlRFUiBbZ290cHRyXSwgZWJ4CTsgc2F2ZSBHT1QgYWRkcmVzcworCisJbW92CWVkeCxlYXgJCQkJOyBlZHggPSBvcmlnaW5hbCBlYnAKKwltb3YJZWF4LCBKRElNRU5TSU9OIFtkb3duc2FtcF93aWR0aChlZHgpXSAgOyBjb2xjdHIKKwl0ZXN0CWVheCxlYXgKKwlqegluZWFyIC5yZXR1cm4KKworCW1vdgllY3gsIElOVCBbbWF4X3Zfc2FtcChlZHgpXQk7IHJvd2N0cgorCXRlc3QJZWN4LGVjeAorCWp6CW5lYXIgLnJldHVybgorCisJbW92CWVzaSwgSlNBTVBBUlJBWSBbaW5wdXRfZGF0YShlZHgpXQk7IGlucHV0X2RhdGEKKwltb3YJZWRpLCBQT0lOVEVSIFtvdXRwdXRfZGF0YV9wdHIoZWR4KV0KKwltb3YJZWRpLCBKU0FNUEFSUkFZIFtlZGldCQkJOyBvdXRwdXRfZGF0YQorCWFsaWdueAkxNiw3Cisucm93bG9vcDoKKwlwdXNoCWVheAkJCQkJOyBjb2xjdHIKKwlwdXNoCWVjeAorCXB1c2gJZWRpCisJcHVzaAllc2kKKworCW1vdgllY3gsIEpTQU1QUk9XIFtlc2ktMSpTSVpFT0ZfSlNBTVBST1ddCTsgaW5wdHIxKGFib3ZlKQorCW1vdgllYngsIEpTQU1QUk9XIFtlc2krMCpTSVpFT0ZfSlNBTVBST1ddCTsgaW5wdHIwCisJbW92CWVzaSwgSlNBTVBST1cgW2VzaSsxKlNJWkVPRl9KU0FNUFJPV10JOyBpbnB0cjEoYmVsb3cpCisJbW92CWVkeCwgSlNBTVBST1cgW2VkaSswKlNJWkVPRl9KU0FNUFJPV10JOyBvdXRwdHIwCisJbW92CWVkaSwgSlNBTVBST1cgW2VkaSsxKlNJWkVPRl9KU0FNUFJPV10JOyBvdXRwdHIxCisKKwl0ZXN0CWVheCwgU0laRU9GX1hNTVdPUkQtMQorCWp6CXNob3J0IC5za2lwCisJcHVzaAllZHgKKwltb3YJZGwsIEpTQU1QTEUgW2VjeCsoZWF4LTEpKlNJWkVPRl9KU0FNUExFXQorCW1vdglKU0FNUExFIFtlY3grZWF4KlNJWkVPRl9KU0FNUExFXSwgZGwKKwltb3YJZGwsIEpTQU1QTEUgW2VieCsoZWF4LTEpKlNJWkVPRl9KU0FNUExFXQorCW1vdglKU0FNUExFIFtlYngrZWF4KlNJWkVPRl9KU0FNUExFXSwgZGwKKwltb3YJZGwsIEpTQU1QTEUgW2VzaSsoZWF4LTEpKlNJWkVPRl9KU0FNUExFXQorCW1vdglKU0FNUExFIFtlc2krZWF4KlNJWkVPRl9KU0FNUExFXSwgZGwJOyBpbnNlcnQgYSBkdW1teSBzYW1wbGUKKwlwb3AJZWR4Cisuc2tpcDoKKwk7IC0tIHByb2Nlc3MgdGhlIGZpcnN0IGNvbHVtbiBibG9jaworCisJbW92ZHFhCXhtbTAsIFhNTVdPUkQgW2VieCswKlNJWkVPRl9YTU1XT1JEXQk7IHhtbTA9cm93WyAwXVswXQorCW1vdmRxYQl4bW0xLCBYTU1XT1JEIFtlY3grMCpTSVpFT0ZfWE1NV09SRF0JOyB4bW0xPXJvd1stMV1bMF0KKwltb3ZkcWEJeG1tMiwgWE1NV09SRCBbZXNpKzAqU0laRU9GX1hNTVdPUkRdCTsgeG1tMj1yb3dbKzFdWzBdCisKKwlwdXNocGljCWVieAorCW1vdnBpYwllYngsIFBPSU5URVIgW2dvdHB0cl0JOyBsb2FkIEdPVCBhZGRyZXNzCisKKwlweG9yICAgICAgeG1tMyx4bW0zCQk7IHhtbTM9KGFsbCAwJ3MpCisJbW92ZHFhICAgIHhtbTQseG1tMAorCXB1bnBja2xidyB4bW0wLHhtbTMJCTsgeG1tMD1yb3dbIDBdKCAwICAxICAyICAzICA0ICA1ICA2ICA3KQorCXB1bnBja2hidyB4bW00LHhtbTMJCTsgeG1tND1yb3dbIDBdKCA4ICA5IDEwIDExIDEyIDEzIDE0IDE1KQorCW1vdmRxYSAgICB4bW01LHhtbTEKKwlwdW5wY2tsYncgeG1tMSx4bW0zCQk7IHhtbTE9cm93Wy0xXSggMCAgMSAgMiAgMyAgNCAgNSAgNiAgNykKKwlwdW5wY2toYncgeG1tNSx4bW0zCQk7IHhtbTU9cm93Wy0xXSggOCAgOSAxMCAxMSAxMiAxMyAxNCAxNSkKKwltb3ZkcWEgICAgeG1tNix4bW0yCisJcHVucGNrbGJ3IHhtbTIseG1tMwkJOyB4bW0yPXJvd1srMV0oIDAgIDEgIDIgIDMgIDQgIDUgIDYgIDcpCisJcHVucGNraGJ3IHhtbTYseG1tMwkJOyB4bW02PXJvd1srMV0oIDggIDkgMTAgMTEgMTIgMTMgMTQgMTUpCisKKwlwbXVsbHcJeG1tMCxbR09UT0ZGKGVieCxQV19USFJFRSldCisJcG11bGx3CXhtbTQsW0dPVE9GRihlYngsUFdfVEhSRUUpXQorCisJcGNtcGVxYgl4bW03LHhtbTcKKwlwc3JsZHEJeG1tNywoU0laRU9GX1hNTVdPUkQtMikKKworCXBhZGR3CXhtbTEseG1tMAkJOyB4bW0xPUludDBMPSggMCAgMSAgMiAgMyAgNCAgNSAgNiAgNykKKwlwYWRkdwl4bW01LHhtbTQJCTsgeG1tNT1JbnQwSD0oIDggIDkgMTAgMTEgMTIgMTMgMTQgMTUpCisJcGFkZHcJeG1tMix4bW0wCQk7IHhtbTI9SW50MUw9KCAwICAxICAyICAzICA0ICA1ICA2ICA3KQorCXBhZGR3CXhtbTYseG1tNAkJOyB4bW02PUludDFIPSggOCAgOSAxMCAxMSAxMiAxMyAxNCAxNSkKKworCW1vdmRxYQlYTU1XT1JEIFtlZHgrMCpTSVpFT0ZfWE1NV09SRF0sIHhtbTEJOyB0ZW1wb3JhcmlseSBzYXZlCisJbW92ZHFhCVhNTVdPUkQgW2VkeCsxKlNJWkVPRl9YTU1XT1JEXSwgeG1tNQk7IHRoZSBpbnRlcm1lZGlhdGUgZGF0YQorCW1vdmRxYQlYTU1XT1JEIFtlZGkrMCpTSVpFT0ZfWE1NV09SRF0sIHhtbTIKKwltb3ZkcWEJWE1NV09SRCBbZWRpKzEqU0laRU9GX1hNTVdPUkRdLCB4bW02CisKKwlwYW5kCXhtbTEseG1tNwkJOyB4bW0xPSggMCAtLSAtLSAtLSAtLSAtLSAtLSAtLSkKKwlwYW5kCXhtbTIseG1tNwkJOyB4bW0yPSggMCAtLSAtLSAtLSAtLSAtLSAtLSAtLSkKKworCW1vdmRxYQlYTU1XT1JEIFt3aygwKV0sIHhtbTEKKwltb3ZkcWEJWE1NV09SRCBbd2soMSldLCB4bW0yCisKKwlwb3BwaWMJZWJ4CisKKwlhZGQJZWF4LCBieXRlIFNJWkVPRl9YTU1XT1JELTEKKwlhbmQJZWF4LCBieXRlIC1TSVpFT0ZfWE1NV09SRAorCWNtcAllYXgsIGJ5dGUgU0laRU9GX1hNTVdPUkQKKwlqYQlzaG9ydCAuY29sdW1ubG9vcAorCWFsaWdueAkxNiw3CisKKy5jb2x1bW5sb29wX2xhc3Q6CisJOyAtLSBwcm9jZXNzIHRoZSBsYXN0IGNvbHVtbiBibG9jaworCisJcHVzaHBpYwllYngKKwltb3ZwaWMJZWJ4LCBQT0lOVEVSIFtnb3RwdHJdCTsgbG9hZCBHT1QgYWRkcmVzcworCisJcGNtcGVxYgl4bW0xLHhtbTEKKwlwc2xsZHEJeG1tMSwoU0laRU9GX1hNTVdPUkQtMikKKwltb3ZkcWEJeG1tMix4bW0xCisKKwlwYW5kCXhtbTEsIFhNTVdPUkQgW2VkeCsxKlNJWkVPRl9YTU1XT1JEXQorCXBhbmQJeG1tMiwgWE1NV09SRCBbZWRpKzEqU0laRU9GX1hNTVdPUkRdCisKKwltb3ZkcWEJWE1NV09SRCBbd2soMildLCB4bW0xCTsgeG1tMT0oLS0gLS0gLS0gLS0gLS0gLS0gLS0gMTUpCisJbW92ZHFhCVhNTVdPUkQgW3drKDMpXSwgeG1tMgk7IHhtbTI9KC0tIC0tIC0tIC0tIC0tIC0tIC0tIDE1KQorCisJam1wCW5lYXIgLnVwc2FtcGxlCisJYWxpZ254CTE2LDcKKworLmNvbHVtbmxvb3A6CisJOyAtLSBwcm9jZXNzIHRoZSBuZXh0IGNvbHVtbiBibG9jaworCisJbW92ZHFhCXhtbTAsIFhNTVdPUkQgW2VieCsxKlNJWkVPRl9YTU1XT1JEXQk7IHhtbTA9cm93WyAwXVsxXQorCW1vdmRxYQl4bW0xLCBYTU1XT1JEIFtlY3grMSpTSVpFT0ZfWE1NV09SRF0JOyB4bW0xPXJvd1stMV1bMV0KKwltb3ZkcWEJeG1tMiwgWE1NV09SRCBbZXNpKzEqU0laRU9GX1hNTVdPUkRdCTsgeG1tMj1yb3dbKzFdWzFdCisKKwlwdXNocGljCWVieAorCW1vdnBpYwllYngsIFBPSU5URVIgW2dvdHB0cl0JOyBsb2FkIEdPVCBhZGRyZXNzCisKKwlweG9yICAgICAgeG1tMyx4bW0zCQk7IHhtbTM9KGFsbCAwJ3MpCisJbW92ZHFhICAgIHhtbTQseG1tMAorCXB1bnBja2xidyB4bW0wLHhtbTMJCTsgeG1tMD1yb3dbIDBdKCAwICAxICAyICAzICA0ICA1ICA2ICA3KQorCXB1bnBja2hidyB4bW00LHhtbTMJCTsgeG1tND1yb3dbIDBdKCA4ICA5IDEwIDExIDEyIDEzIDE0IDE1KQorCW1vdmRxYSAgICB4bW01LHhtbTEKKwlwdW5wY2tsYncgeG1tMSx4bW0zCQk7IHhtbTE9cm93Wy0xXSggMCAgMSAgMiAgMyAgNCAgNSAgNiAgNykKKwlwdW5wY2toYncgeG1tNSx4bW0zCQk7IHhtbTU9cm93Wy0xXSggOCAgOSAxMCAxMSAxMiAxMyAxNCAxNSkKKwltb3ZkcWEgICAgeG1tNix4bW0yCisJcHVucGNrbGJ3IHhtbTIseG1tMwkJOyB4bW0yPXJvd1srMV0oIDAgIDEgIDIgIDMgIDQgIDUgIDYgIDcpCisJcHVucGNraGJ3IHhtbTYseG1tMwkJOyB4bW02PXJvd1srMV0oIDggIDkgMTAgMTEgMTIgMTMgMTQgMTUpCisKKwlwbXVsbHcJeG1tMCxbR09UT0ZGKGVieCxQV19USFJFRSldCisJcG11bGx3CXhtbTQsW0dPVE9GRihlYngsUFdfVEhSRUUpXQorCisJcGFkZHcJeG1tMSx4bW0wCQk7IHhtbTE9SW50MEw9KCAwICAxICAyICAzICA0ICA1ICA2ICA3KQorCXBhZGR3CXhtbTUseG1tNAkJOyB4bW01PUludDBIPSggOCAgOSAxMCAxMSAxMiAxMyAxNCAxNSkKKwlwYWRkdwl4bW0yLHhtbTAJCTsgeG1tMj1JbnQxTD0oIDAgIDEgIDIgIDMgIDQgIDUgIDYgIDcpCisJcGFkZHcJeG1tNix4bW00CQk7IHhtbTY9SW50MUg9KCA4ICA5IDEwIDExIDEyIDEzIDE0IDE1KQorCisJbW92ZHFhCVhNTVdPUkQgW2VkeCsyKlNJWkVPRl9YTU1XT1JEXSwgeG1tMQk7IHRlbXBvcmFyaWx5IHNhdmUKKwltb3ZkcWEJWE1NV09SRCBbZWR4KzMqU0laRU9GX1hNTVdPUkRdLCB4bW01CTsgdGhlIGludGVybWVkaWF0ZSBkYXRhCisJbW92ZHFhCVhNTVdPUkQgW2VkaSsyKlNJWkVPRl9YTU1XT1JEXSwgeG1tMgorCW1vdmRxYQlYTU1XT1JEIFtlZGkrMypTSVpFT0ZfWE1NV09SRF0sIHhtbTYKKworCXBzbGxkcQl4bW0xLChTSVpFT0ZfWE1NV09SRC0yKQk7IHhtbTE9KC0tIC0tIC0tIC0tIC0tIC0tIC0tICAwKQorCXBzbGxkcQl4bW0yLChTSVpFT0ZfWE1NV09SRC0yKQk7IHhtbTI9KC0tIC0tIC0tIC0tIC0tIC0tIC0tICAwKQorCisJbW92ZHFhCVhNTVdPUkQgW3drKDIpXSwgeG1tMQorCW1vdmRxYQlYTU1XT1JEIFt3aygzKV0sIHhtbTIKKworLnVwc2FtcGxlOgorCTsgLS0gcHJvY2VzcyB0aGUgdXBwZXIgcm93CisKKwltb3ZkcWEJeG1tNywgWE1NV09SRCBbZWR4KzAqU0laRU9GX1hNTVdPUkRdCisJbW92ZHFhCXhtbTMsIFhNTVdPUkQgW2VkeCsxKlNJWkVPRl9YTU1XT1JEXQorCisJbW92ZHFhCXhtbTAseG1tNwkJOyB4bW03PUludDBMPSggMCAgMSAgMiAgMyAgNCAgNSAgNiAgNykKKwltb3ZkcWEJeG1tNCx4bW0zCQk7IHhtbTM9SW50MEg9KCA4ICA5IDEwIDExIDEyIDEzIDE0IDE1KQorCXBzcmxkcQl4bW0wLDIJCQk7IHhtbTA9KCAxICAyICAzICA0ICA1ICA2ICA3IC0tKQorCXBzbGxkcQl4bW00LChTSVpFT0ZfWE1NV09SRC0yKQk7IHhtbTQ9KC0tIC0tIC0tIC0tIC0tIC0tIC0tICA4KQorCW1vdmRxYQl4bW01LHhtbTcKKwltb3ZkcWEJeG1tNix4bW0zCisJcHNybGRxCXhtbTUsKFNJWkVPRl9YTU1XT1JELTIpCTsgeG1tNT0oIDcgLS0gLS0gLS0gLS0gLS0gLS0gLS0pCisJcHNsbGRxCXhtbTYsMgkJCTsgeG1tNj0oLS0gIDggIDkgMTAgMTEgMTIgMTMgMTQpCisKKwlwb3IJeG1tMCx4bW00CQk7IHhtbTA9KCAxICAyICAzICA0ICA1ICA2ICA3ICA4KQorCXBvcgl4bW01LHhtbTYJCTsgeG1tNT0oIDcgIDggIDkgMTAgMTEgMTIgMTMgMTQpCisKKwltb3ZkcWEJeG1tMSx4bW03CisJbW92ZHFhCXhtbTIseG1tMworCXBzbGxkcQl4bW0xLDIJCQk7IHhtbTE9KC0tICAwICAxICAyICAzICA0ICA1ICA2KQorCXBzcmxkcQl4bW0yLDIJCQk7IHhtbTI9KCA5IDEwIDExIDEyIDEzIDE0IDE1IC0tKQorCW1vdmRxYQl4bW00LHhtbTMKKwlwc3JsZHEJeG1tNCwoU0laRU9GX1hNTVdPUkQtMikJOyB4bW00PSgxNSAtLSAtLSAtLSAtLSAtLSAtLSAtLSkKKworCXBvcgl4bW0xLCBYTU1XT1JEIFt3aygwKV0JOyB4bW0xPSgtMSAgMCAgMSAgMiAgMyAgNCAgNSAgNikKKwlwb3IJeG1tMiwgWE1NV09SRCBbd2soMildCTsgeG1tMj0oIDkgMTAgMTEgMTIgMTMgMTQgMTUgMTYpCisKKwltb3ZkcWEJWE1NV09SRCBbd2soMCldLCB4bW00CisKKwlwbXVsbHcJeG1tNyxbR09UT0ZGKGVieCxQV19USFJFRSldCisJcG11bGx3CXhtbTMsW0dPVE9GRihlYngsUFdfVEhSRUUpXQorCXBhZGR3CXhtbTEsW0dPVE9GRihlYngsUFdfRUlHSFQpXQorCXBhZGR3CXhtbTUsW0dPVE9GRihlYngsUFdfRUlHSFQpXQorCXBhZGR3CXhtbTAsW0dPVE9GRihlYngsUFdfU0VWRU4pXQorCXBhZGR3CXhtbTIsW0dPVE9GRihlYngsUFdfU0VWRU4pXQorCisJcGFkZHcJeG1tMSx4bW03CisJcGFkZHcJeG1tNSx4bW0zCisJcHNybHcJeG1tMSw0CQkJOyB4bW0xPU91dDBMRT0oIDAgIDIgIDQgIDYgIDggMTAgMTIgMTQpCisJcHNybHcJeG1tNSw0CQkJOyB4bW01PU91dDBIRT0oMTYgMTggMjAgMjIgMjQgMjYgMjggMzApCisJcGFkZHcJeG1tMCx4bW03CisJcGFkZHcJeG1tMix4bW0zCisJcHNybHcJeG1tMCw0CQkJOyB4bW0wPU91dDBMTz0oIDEgIDMgIDUgIDcgIDkgMTEgMTMgMTUpCisJcHNybHcJeG1tMiw0CQkJOyB4bW0yPU91dDBITz0oMTcgMTkgMjEgMjMgMjUgMjcgMjkgMzEpCisKKwlwc2xsdwl4bW0wLEJZVEVfQklUCisJcHNsbHcJeG1tMixCWVRFX0JJVAorCXBvcgl4bW0xLHhtbTAJCTsgeG1tMT1PdXQwTD0oIDAgIDEgIDIgLi4uIDEzIDE0IDE1KQorCXBvcgl4bW01LHhtbTIJCTsgeG1tNT1PdXQwSD0oMTYgMTcgMTggLi4uIDI5IDMwIDMxKQorCisJbW92ZHFhCVhNTVdPUkQgW2VkeCswKlNJWkVPRl9YTU1XT1JEXSwgeG1tMQorCW1vdmRxYQlYTU1XT1JEIFtlZHgrMSpTSVpFT0ZfWE1NV09SRF0sIHhtbTUKKworCTsgLS0gcHJvY2VzcyB0aGUgbG93ZXIgcm93CisKKwltb3ZkcWEJeG1tNiwgWE1NV09SRCBbZWRpKzAqU0laRU9GX1hNTVdPUkRdCisJbW92ZHFhCXhtbTQsIFhNTVdPUkQgW2VkaSsxKlNJWkVPRl9YTU1XT1JEXQorCisJbW92ZHFhCXhtbTcseG1tNgkJOyB4bW02PUludDFMPSggMCAgMSAgMiAgMyAgNCAgNSAgNiAgNykKKwltb3ZkcWEJeG1tMyx4bW00CQk7IHhtbTQ9SW50MUg9KCA4ICA5IDEwIDExIDEyIDEzIDE0IDE1KQorCXBzcmxkcQl4bW03LDIJCQk7IHhtbTc9KCAxICAyICAzICA0ICA1ICA2ICA3IC0tKQorCXBzbGxkcQl4bW0zLChTSVpFT0ZfWE1NV09SRC0yKQk7IHhtbTM9KC0tIC0tIC0tIC0tIC0tIC0tIC0tICA4KQorCW1vdmRxYQl4bW0wLHhtbTYKKwltb3ZkcWEJeG1tMix4bW00CisJcHNybGRxCXhtbTAsKFNJWkVPRl9YTU1XT1JELTIpCTsgeG1tMD0oIDcgLS0gLS0gLS0gLS0gLS0gLS0gLS0pCisJcHNsbGRxCXhtbTIsMgkJCTsgeG1tMj0oLS0gIDggIDkgMTAgMTEgMTIgMTMgMTQpCisKKwlwb3IJeG1tNyx4bW0zCQk7IHhtbTc9KCAxICAyICAzICA0ICA1ICA2ICA3ICA4KQorCXBvcgl4bW0wLHhtbTIJCTsgeG1tMD0oIDcgIDggIDkgMTAgMTEgMTIgMTMgMTQpCisKKwltb3ZkcWEJeG1tMSx4bW02CisJbW92ZHFhCXhtbTUseG1tNAorCXBzbGxkcQl4bW0xLDIJCQk7IHhtbTE9KC0tICAwICAxICAyICAzICA0ICA1ICA2KQorCXBzcmxkcQl4bW01LDIJCQk7IHhtbTU9KCA5IDEwIDExIDEyIDEzIDE0IDE1IC0tKQorCW1vdmRxYQl4bW0zLHhtbTQKKwlwc3JsZHEJeG1tMywoU0laRU9GX1hNTVdPUkQtMikJOyB4bW0zPSgxNSAtLSAtLSAtLSAtLSAtLSAtLSAtLSkKKworCXBvcgl4bW0xLCBYTU1XT1JEIFt3aygxKV0JOyB4bW0xPSgtMSAgMCAgMSAgMiAgMyAgNCAgNSAgNikKKwlwb3IJeG1tNSwgWE1NV09SRCBbd2soMyldCTsgeG1tNT0oIDkgMTAgMTEgMTIgMTMgMTQgMTUgMTYpCisKKwltb3ZkcWEJWE1NV09SRCBbd2soMSldLCB4bW0zCisKKwlwbXVsbHcJeG1tNixbR09UT0ZGKGVieCxQV19USFJFRSldCisJcG11bGx3CXhtbTQsW0dPVE9GRihlYngsUFdfVEhSRUUpXQorCXBhZGR3CXhtbTEsW0dPVE9GRihlYngsUFdfRUlHSFQpXQorCXBhZGR3CXhtbTAsW0dPVE9GRihlYngsUFdfRUlHSFQpXQorCXBhZGR3CXhtbTcsW0dPVE9GRihlYngsUFdfU0VWRU4pXQorCXBhZGR3CXhtbTUsW0dPVE9GRihlYngsUFdfU0VWRU4pXQorCisJcGFkZHcJeG1tMSx4bW02CisJcGFkZHcJeG1tMCx4bW00CisJcHNybHcJeG1tMSw0CQkJOyB4bW0xPU91dDFMRT0oIDAgIDIgIDQgIDYgIDggMTAgMTIgMTQpCisJcHNybHcJeG1tMCw0CQkJOyB4bW0wPU91dDFIRT0oMTYgMTggMjAgMjIgMjQgMjYgMjggMzApCisJcGFkZHcJeG1tNyx4bW02CisJcGFkZHcJeG1tNSx4bW00CisJcHNybHcJeG1tNyw0CQkJOyB4bW03PU91dDFMTz0oIDEgIDMgIDUgIDcgIDkgMTEgMTMgMTUpCisJcHNybHcJeG1tNSw0CQkJOyB4bW01PU91dDFITz0oMTcgMTkgMjEgMjMgMjUgMjcgMjkgMzEpCisKKwlwc2xsdwl4bW03LEJZVEVfQklUCisJcHNsbHcJeG1tNSxCWVRFX0JJVAorCXBvcgl4bW0xLHhtbTcJCTsgeG1tMT1PdXQxTD0oIDAgIDEgIDIgLi4uIDEzIDE0IDE1KQorCXBvcgl4bW0wLHhtbTUJCTsgeG1tMD1PdXQxSD0oMTYgMTcgMTggLi4uIDI5IDMwIDMxKQorCisJbW92ZHFhCVhNTVdPUkQgW2VkaSswKlNJWkVPRl9YTU1XT1JEXSwgeG1tMQorCW1vdmRxYQlYTU1XT1JEIFtlZGkrMSpTSVpFT0ZfWE1NV09SRF0sIHhtbTAKKworCXBvcHBpYwllYngKKworCXN1YgllYXgsIGJ5dGUgU0laRU9GX1hNTVdPUkQKKwlhZGQJZWN4LCBieXRlIDEqU0laRU9GX1hNTVdPUkQJOyBpbnB0cjEoYWJvdmUpCisJYWRkCWVieCwgYnl0ZSAxKlNJWkVPRl9YTU1XT1JECTsgaW5wdHIwCisJYWRkCWVzaSwgYnl0ZSAxKlNJWkVPRl9YTU1XT1JECTsgaW5wdHIxKGJlbG93KQorCWFkZAllZHgsIGJ5dGUgMipTSVpFT0ZfWE1NV09SRAk7IG91dHB0cjAKKwlhZGQJZWRpLCBieXRlIDIqU0laRU9GX1hNTVdPUkQJOyBvdXRwdHIxCisJY21wCWVheCwgYnl0ZSBTSVpFT0ZfWE1NV09SRAorCWphCW5lYXIgLmNvbHVtbmxvb3AKKwl0ZXN0CWVheCxlYXgKKwlqbnoJbmVhciAuY29sdW1ubG9vcF9sYXN0CisKKwlwb3AJZXNpCisJcG9wCWVkaQorCXBvcAllY3gKKwlwb3AJZWF4CisKKwlhZGQJZXNpLCBieXRlIDEqU0laRU9GX0pTQU1QUk9XCTsgaW5wdXRfZGF0YQorCWFkZAllZGksIGJ5dGUgMipTSVpFT0ZfSlNBTVBST1cJOyBvdXRwdXRfZGF0YQorCXN1YgllY3gsIGJ5dGUgMgkJCTsgcm93Y3RyCisJamcJbmVhciAucm93bG9vcAorCisucmV0dXJuOgorCXBvcAllZGkKKwlwb3AJZXNpCis7CXBvcAllZHgJCTsgbmVlZCBub3QgYmUgcHJlc2VydmVkCis7CXBvcAllY3gJCTsgbmVlZCBub3QgYmUgcHJlc2VydmVkCisJcG9wCWVieAorCW1vdgllc3AsZWJwCQk7IGVzcCA8LSBhbGlnbmVkIGVicAorCXBvcAllc3AJCTsgZXNwIDwtIG9yaWdpbmFsIGVicAorCXBvcAllYnAKKwlyZXQKKworOyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorOworOyBGYXN0IHByb2Nlc3NpbmcgZm9yIHRoZSBjb21tb24gY2FzZSBvZiAyOjEgaG9yaXpvbnRhbCBhbmQgMToxIHZlcnRpY2FsLgorOyBJdCdzIHN0aWxsIGEgYm94IGZpbHRlci4KKzsKKzsgR0xPQkFMKHZvaWQpCis7IGpzaW1kX2gydjFfdXBzYW1wbGVfc3NlMiAoaW50IG1heF92X3NhbXBfZmFjdG9yLAorOyAgICAgICAgICAgICAgICAgICAgICAgICAgIEpESU1FTlNJT04gb3V0cHV0X3dpZHRoLAorOyAgICAgICAgICAgICAgICAgICAgICAgICAgIEpTQU1QQVJSQVkgaW5wdXRfZGF0YSwKKzsgICAgICAgICAgICAgICAgICAgICAgICAgICBKU0FNUEFSUkFZICogb3V0cHV0X2RhdGFfcHRyKTsKKzsKKworJWRlZmluZSBtYXhfdl9zYW1wKGIpCQkoYikrOAkJCTsgaW50IG1heF92X3NhbXBfZmFjdG9yCislZGVmaW5lIG91dHB1dF93aWR0aChiKQkoYikrMTIJCTsgSkRJTUVOU0lPTiBvdXRwdXRfd2lkdGgKKyVkZWZpbmUgaW5wdXRfZGF0YShiKQkJKGIpKzE2CQk7IEpTQU1QQVJSQVkgaW5wdXRfZGF0YQorJWRlZmluZSBvdXRwdXRfZGF0YV9wdHIoYikJKGIpKzIwCQk7IEpTQU1QQVJSQVkgKiBvdXRwdXRfZGF0YV9wdHIKKworCWFsaWduCTE2CisJZ2xvYmFsCUVYVE4oanNpbWRfaDJ2MV91cHNhbXBsZV9zc2UyKQorCitFWFROKGpzaW1kX2gydjFfdXBzYW1wbGVfc3NlMik6CisJcHVzaAllYnAKKwltb3YJZWJwLGVzcAorOwlwdXNoCWVieAkJOyB1bnVzZWQKKzsJcHVzaAllY3gJCTsgbmVlZCBub3QgYmUgcHJlc2VydmVkCis7CXB1c2gJZWR4CQk7IG5lZWQgbm90IGJlIHByZXNlcnZlZAorCXB1c2gJZXNpCisJcHVzaAllZGkKKworCW1vdgllZHgsIEpESU1FTlNJT04gW291dHB1dF93aWR0aChlYnApXQorCWFkZAllZHgsIGJ5dGUgKDIqU0laRU9GX1hNTVdPUkQpLTEKKwlhbmQJZWR4LCBieXRlIC0oMipTSVpFT0ZfWE1NV09SRCkKKwlqeglzaG9ydCAucmV0dXJuCisKKwltb3YJZWN4LCBJTlQgW21heF92X3NhbXAoZWJwKV0JOyByb3djdHIKKwl0ZXN0CWVjeCxlY3gKKwlqeglzaG9ydCAucmV0dXJuCisKKwltb3YJZXNpLCBKU0FNUEFSUkFZIFtpbnB1dF9kYXRhKGVicCldCTsgaW5wdXRfZGF0YQorCW1vdgllZGksIFBPSU5URVIgW291dHB1dF9kYXRhX3B0cihlYnApXQorCW1vdgllZGksIEpTQU1QQVJSQVkgW2VkaV0JCQk7IG91dHB1dF9kYXRhCisJYWxpZ254CTE2LDcKKy5yb3dsb29wOgorCXB1c2gJZWRpCisJcHVzaAllc2kKKworCW1vdgllc2ksIEpTQU1QUk9XIFtlc2ldCQk7IGlucHRyCisJbW92CWVkaSwgSlNBTVBST1cgW2VkaV0JCTsgb3V0cHRyCisJbW92CWVheCxlZHgJCQkJOyBjb2xjdHIKKwlhbGlnbngJMTYsNworLmNvbHVtbmxvb3A6CisKKwltb3ZkcWEJeG1tMCwgWE1NV09SRCBbZXNpKzAqU0laRU9GX1hNTVdPUkRdCisKKwltb3ZkcWEgICAgeG1tMSx4bW0wCisJcHVucGNrbGJ3IHhtbTAseG1tMAorCXB1bnBja2hidyB4bW0xLHhtbTEKKworCW1vdmRxYQlYTU1XT1JEIFtlZGkrMCpTSVpFT0ZfWE1NV09SRF0sIHhtbTAKKwltb3ZkcWEJWE1NV09SRCBbZWRpKzEqU0laRU9GX1hNTVdPUkRdLCB4bW0xCisKKwlzdWIJZWF4LCBieXRlIDIqU0laRU9GX1hNTVdPUkQKKwlqeglzaG9ydCAubmV4dHJvdworCisJbW92ZHFhCXhtbTIsIFhNTVdPUkQgW2VzaSsxKlNJWkVPRl9YTU1XT1JEXQorCisJbW92ZHFhICAgIHhtbTMseG1tMgorCXB1bnBja2xidyB4bW0yLHhtbTIKKwlwdW5wY2toYncgeG1tMyx4bW0zCisKKwltb3ZkcWEJWE1NV09SRCBbZWRpKzIqU0laRU9GX1hNTVdPUkRdLCB4bW0yCisJbW92ZHFhCVhNTVdPUkQgW2VkaSszKlNJWkVPRl9YTU1XT1JEXSwgeG1tMworCisJc3ViCWVheCwgYnl0ZSAyKlNJWkVPRl9YTU1XT1JECisJanoJc2hvcnQgLm5leHRyb3cKKworCWFkZAllc2ksIGJ5dGUgMipTSVpFT0ZfWE1NV09SRAk7IGlucHRyCisJYWRkCWVkaSwgYnl0ZSA0KlNJWkVPRl9YTU1XT1JECTsgb3V0cHRyCisJam1wCXNob3J0IC5jb2x1bW5sb29wCisJYWxpZ254CTE2LDcKKworLm5leHRyb3c6CisJcG9wCWVzaQorCXBvcAllZGkKKworCWFkZAllc2ksIGJ5dGUgU0laRU9GX0pTQU1QUk9XCTsgaW5wdXRfZGF0YQorCWFkZAllZGksIGJ5dGUgU0laRU9GX0pTQU1QUk9XCTsgb3V0cHV0X2RhdGEKKwlkZWMJZWN4CQkJCTsgcm93Y3RyCisJamcJc2hvcnQgLnJvd2xvb3AKKworLnJldHVybjoKKwlwb3AJZWRpCisJcG9wCWVzaQorOwlwb3AJZWR4CQk7IG5lZWQgbm90IGJlIHByZXNlcnZlZAorOwlwb3AJZWN4CQk7IG5lZWQgbm90IGJlIHByZXNlcnZlZAorOwlwb3AJZWJ4CQk7IHVudXNlZAorCXBvcAllYnAKKwlyZXQKKworOyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorOworOyBGYXN0IHByb2Nlc3NpbmcgZm9yIHRoZSBjb21tb24gY2FzZSBvZiAyOjEgaG9yaXpvbnRhbCBhbmQgMjoxIHZlcnRpY2FsLgorOyBJdCdzIHN0aWxsIGEgYm94IGZpbHRlci4KKzsKKzsgR0xPQkFMKHZvaWQpCis7IGpzaW1kX2gydjJfdXBzYW1wbGVfc3NlMiAobnQgbWF4X3Zfc2FtcF9mYWN0b3IsCis7ICAgICAgICAgICAgICAgICAgICAgICAgICAgSkRJTUVOU0lPTiBvdXRwdXRfd2lkdGgsCis7ICAgICAgICAgICAgICAgICAgICAgICAgICAgSlNBTVBBUlJBWSBpbnB1dF9kYXRhLAorOyAgICAgICAgICAgICAgICAgICAgICAgICAgIEpTQU1QQVJSQVkgKiBvdXRwdXRfZGF0YV9wdHIpOworOworCislZGVmaW5lIG1heF92X3NhbXAoYikJCShiKSs4CQkJOyBpbnQgbWF4X3Zfc2FtcF9mYWN0b3IKKyVkZWZpbmUgb3V0cHV0X3dpZHRoKGIpCShiKSsxMgkJOyBKRElNRU5TSU9OIG91dHB1dF93aWR0aAorJWRlZmluZSBpbnB1dF9kYXRhKGIpCQkoYikrMTYJCTsgSlNBTVBBUlJBWSBpbnB1dF9kYXRhCislZGVmaW5lIG91dHB1dF9kYXRhX3B0cihiKQkoYikrMjAJCTsgSlNBTVBBUlJBWSAqIG91dHB1dF9kYXRhX3B0cgorCisJYWxpZ24JMTYKKwlnbG9iYWwJRVhUTihqc2ltZF9oMnYyX3Vwc2FtcGxlX3NzZTIpCisKK0VYVE4oanNpbWRfaDJ2Ml91cHNhbXBsZV9zc2UyKToKKwlwdXNoCWVicAorCW1vdgllYnAsZXNwCisJcHVzaAllYngKKzsJcHVzaAllY3gJCTsgbmVlZCBub3QgYmUgcHJlc2VydmVkCis7CXB1c2gJZWR4CQk7IG5lZWQgbm90IGJlIHByZXNlcnZlZAorCXB1c2gJZXNpCisJcHVzaAllZGkKKworCW1vdgllZHgsIEpESU1FTlNJT04gW291dHB1dF93aWR0aChlYnApXQorCWFkZAllZHgsIGJ5dGUgKDIqU0laRU9GX1hNTVdPUkQpLTEKKwlhbmQJZWR4LCBieXRlIC0oMipTSVpFT0ZfWE1NV09SRCkKKwlqegluZWFyIC5yZXR1cm4KKworCW1vdgllY3gsIElOVCBbbWF4X3Zfc2FtcChlYnApXQk7IHJvd2N0cgorCXRlc3QJZWN4LGVjeAorCWp6CW5lYXIgLnJldHVybgorCisJbW92CWVzaSwgSlNBTVBBUlJBWSBbaW5wdXRfZGF0YShlYnApXQk7IGlucHV0X2RhdGEKKwltb3YJZWRpLCBQT0lOVEVSIFtvdXRwdXRfZGF0YV9wdHIoZWJwKV0KKwltb3YJZWRpLCBKU0FNUEFSUkFZIFtlZGldCQkJOyBvdXRwdXRfZGF0YQorCWFsaWdueAkxNiw3Cisucm93bG9vcDoKKwlwdXNoCWVkaQorCXB1c2gJZXNpCisKKwltb3YJZXNpLCBKU0FNUFJPVyBbZXNpXQkJCTsgaW5wdHIKKwltb3YJZWJ4LCBKU0FNUFJPVyBbZWRpKzAqU0laRU9GX0pTQU1QUk9XXQk7IG91dHB0cjAKKwltb3YJZWRpLCBKU0FNUFJPVyBbZWRpKzEqU0laRU9GX0pTQU1QUk9XXQk7IG91dHB0cjEKKwltb3YJZWF4LGVkeAkJCQkJOyBjb2xjdHIKKwlhbGlnbngJMTYsNworLmNvbHVtbmxvb3A6CisKKwltb3ZkcWEJeG1tMCwgWE1NV09SRCBbZXNpKzAqU0laRU9GX1hNTVdPUkRdCisKKwltb3ZkcWEgICAgeG1tMSx4bW0wCisJcHVucGNrbGJ3IHhtbTAseG1tMAorCXB1bnBja2hidyB4bW0xLHhtbTEKKworCW1vdmRxYQlYTU1XT1JEIFtlYngrMCpTSVpFT0ZfWE1NV09SRF0sIHhtbTAKKwltb3ZkcWEJWE1NV09SRCBbZWJ4KzEqU0laRU9GX1hNTVdPUkRdLCB4bW0xCisJbW92ZHFhCVhNTVdPUkQgW2VkaSswKlNJWkVPRl9YTU1XT1JEXSwgeG1tMAorCW1vdmRxYQlYTU1XT1JEIFtlZGkrMSpTSVpFT0ZfWE1NV09SRF0sIHhtbTEKKworCXN1YgllYXgsIGJ5dGUgMipTSVpFT0ZfWE1NV09SRAorCWp6CXNob3J0IC5uZXh0cm93CisKKwltb3ZkcWEJeG1tMiwgWE1NV09SRCBbZXNpKzEqU0laRU9GX1hNTVdPUkRdCisKKwltb3ZkcWEgICAgeG1tMyx4bW0yCisJcHVucGNrbGJ3IHhtbTIseG1tMgorCXB1bnBja2hidyB4bW0zLHhtbTMKKworCW1vdmRxYQlYTU1XT1JEIFtlYngrMipTSVpFT0ZfWE1NV09SRF0sIHhtbTIKKwltb3ZkcWEJWE1NV09SRCBbZWJ4KzMqU0laRU9GX1hNTVdPUkRdLCB4bW0zCisJbW92ZHFhCVhNTVdPUkQgW2VkaSsyKlNJWkVPRl9YTU1XT1JEXSwgeG1tMgorCW1vdmRxYQlYTU1XT1JEIFtlZGkrMypTSVpFT0ZfWE1NV09SRF0sIHhtbTMKKworCXN1YgllYXgsIGJ5dGUgMipTSVpFT0ZfWE1NV09SRAorCWp6CXNob3J0IC5uZXh0cm93CisKKwlhZGQJZXNpLCBieXRlIDIqU0laRU9GX1hNTVdPUkQJOyBpbnB0cgorCWFkZAllYngsIGJ5dGUgNCpTSVpFT0ZfWE1NV09SRAk7IG91dHB0cjAKKwlhZGQJZWRpLCBieXRlIDQqU0laRU9GX1hNTVdPUkQJOyBvdXRwdHIxCisJam1wCXNob3J0IC5jb2x1bW5sb29wCisJYWxpZ254CTE2LDcKKworLm5leHRyb3c6CisJcG9wCWVzaQorCXBvcAllZGkKKworCWFkZAllc2ksIGJ5dGUgMSpTSVpFT0ZfSlNBTVBST1cJOyBpbnB1dF9kYXRhCisJYWRkCWVkaSwgYnl0ZSAyKlNJWkVPRl9KU0FNUFJPVwk7IG91dHB1dF9kYXRhCisJc3ViCWVjeCwgYnl0ZSAyCQkJOyByb3djdHIKKwlqZwlzaG9ydCAucm93bG9vcAorCisucmV0dXJuOgorCXBvcAllZGkKKwlwb3AJZXNpCis7CXBvcAllZHgJCTsgbmVlZCBub3QgYmUgcHJlc2VydmVkCis7CXBvcAllY3gJCTsgbmVlZCBub3QgYmUgcHJlc2VydmVkCisJcG9wCWVieAorCXBvcAllYnAKKwlyZXQKKworOyBGb3Igc29tZSByZWFzb24sIHRoZSBPUyBYIGxpbmtlciBkb2VzIG5vdCBob25vciB0aGUgcmVxdWVzdCB0byBhbGlnbiB0aGUKKzsgc2VnbWVudCB1bmxlc3Mgd2UgZG8gdGhpcy4KKwlhbGlnbgkxNgpkaWZmIC0tZ2l0IGEvc2ltZC9qZjNkbmZsdC5hc20gYi9zaW1kL2pmM2RuZmx0LmFzbQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41NDI2NzJkCi0tLSAvZGV2L251bGwKKysrIGIvc2ltZC9qZjNkbmZsdC5hc20KQEAgLTAsMCArMSwzMjAgQEAKKzsKKzsgamYzZG5mbHQuYXNtIC0gZmxvYXRpbmctcG9pbnQgRkRDVCAoM0ROb3chKQorOworOyBDb3B5cmlnaHQgMjAwOSBQaWVycmUgT3NzbWFuIDxvc3NtYW5AY2VuZGlvLnNlPiBmb3IgQ2VuZGlvIEFCCis7Cis7IEJhc2VkIG9uCis7IHg4NiBTSU1EIGV4dGVuc2lvbiBmb3IgSUpHIEpQRUcgbGlicmFyeQorOyBDb3B5cmlnaHQgKEMpIDE5OTktMjAwNiwgTUlZQVNBS0EgTWFzYXJ1LgorOyBGb3IgY29uZGl0aW9ucyBvZiBkaXN0cmlidXRpb24gYW5kIHVzZSwgc2VlIGNvcHlyaWdodCBub3RpY2UgaW4ganNpbWRleHQuaW5jCis7Cis7IFRoaXMgZmlsZSBzaG91bGQgYmUgYXNzZW1ibGVkIHdpdGggTkFTTSAoTmV0d2lkZSBBc3NlbWJsZXIpLAorOyBjYW4gKm5vdCogYmUgYXNzZW1ibGVkIHdpdGggTWljcm9zb2Z0J3MgTUFTTSBvciBhbnkgY29tcGF0aWJsZQorOyBhc3NlbWJsZXIgKGluY2x1ZGluZyBCb3JsYW5kJ3MgVHVyYm8gQXNzZW1ibGVyKS4KKzsgTkFTTSBpcyBhdmFpbGFibGUgZnJvbSBodHRwOi8vbmFzbS5zb3VyY2Vmb3JnZS5uZXQvIG9yCis7IGh0dHA6Ly9zb3VyY2Vmb3JnZS5uZXQvcHJvamVjdC9zaG93ZmlsZXMucGhwP2dyb3VwX2lkPTYyMDgKKzsKKzsgVGhpcyBmaWxlIGNvbnRhaW5zIGEgZmxvYXRpbmctcG9pbnQgaW1wbGVtZW50YXRpb24gb2YgdGhlIGZvcndhcmQgRENUCis7IChEaXNjcmV0ZSBDb3NpbmUgVHJhbnNmb3JtKS4gVGhlIGZvbGxvd2luZyBjb2RlIGlzIGJhc2VkIGRpcmVjdGx5IG9uCis7IHRoZSBJSkcncyBvcmlnaW5hbCBqZmRjdGZsdC5jOyBzZWUgdGhlIGpmZGN0Zmx0LmMgZm9yIG1vcmUgZGV0YWlscy4KKzsKKzsgW1RBQjhdCisKKyVpbmNsdWRlICJqc2ltZGV4dC5pbmMiCislaW5jbHVkZSAiamRjdC5pbmMiCisKKzsgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKwlTRUNUSU9OCVNFR19DT05TVAorCisJYWxpZ256CTE2CisJZ2xvYmFsCUVYVE4oamNvbnN0X2ZkY3RfZmxvYXRfM2Rub3cpCisKK0VYVE4oamNvbnN0X2ZkY3RfZmxvYXRfM2Rub3cpOgorCitQRF8wXzM4Mgl0aW1lcyAyIGRkICAwLjM4MjY4MzQzMjM2NTA4OTc3MTcyODQ2MAorUERfMF83MDcJdGltZXMgMiBkZCAgMC43MDcxMDY3ODExODY1NDc1MjQ0MDA4NDQKK1BEXzBfNTQxCXRpbWVzIDIgZGQgIDAuNTQxMTk2MTAwMTQ2MTk2OTg0Mzk5NzIzCitQRF8xXzMwNgl0aW1lcyAyIGRkICAxLjMwNjU2Mjk2NDg3NjM3NjUyNzg1NjY0MworCisJYWxpZ256CTE2CisKKzsgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKwlTRUNUSU9OCVNFR19URVhUCisJQklUUwkzMgorOworOyBQZXJmb3JtIHRoZSBmb3J3YXJkIERDVCBvbiBvbmUgYmxvY2sgb2Ygc2FtcGxlcy4KKzsKKzsgR0xPQkFMKHZvaWQpCis7IGpzaW1kX2ZkY3RfZmxvYXRfM2Rub3cgKEZBU1RfRkxPQVQgKiBkYXRhKQorOworCislZGVmaW5lIGRhdGEoYikJCShiKSs4CQk7IEZBU1RfRkxPQVQgKiBkYXRhCisKKyVkZWZpbmUgb3JpZ2luYWxfZWJwCWVicCswCislZGVmaW5lIHdrKGkpCQllYnAtKFdLX05VTS0oaSkpKlNJWkVPRl9NTVdPUkQJOyBtbXdvcmQgd2tbV0tfTlVNXQorJWRlZmluZSBXS19OVU0JCTIKKworCWFsaWduCTE2CisJZ2xvYmFsCUVYVE4oanNpbWRfZmRjdF9mbG9hdF8zZG5vdykKKworRVhUTihqc2ltZF9mZGN0X2Zsb2F0XzNkbm93KToKKwlwdXNoCWVicAorCW1vdgllYXgsZXNwCQkJCTsgZWF4ID0gb3JpZ2luYWwgZWJwCisJc3ViCWVzcCwgYnl0ZSA0CisJYW5kCWVzcCwgYnl0ZSAoLVNJWkVPRl9NTVdPUkQpCTsgYWxpZ24gdG8gNjQgYml0cworCW1vdglbZXNwXSxlYXgKKwltb3YJZWJwLGVzcAkJCQk7IGVicCA9IGFsaWduZWQgZWJwCisJbGVhCWVzcCwgW3drKDApXQorCXB1c2hwaWMJZWJ4Cis7CXB1c2gJZWN4CQk7IG5lZWQgbm90IGJlIHByZXNlcnZlZAorOwlwdXNoCWVkeAkJOyBuZWVkIG5vdCBiZSBwcmVzZXJ2ZWQKKzsJcHVzaAllc2kJCTsgdW51c2VkCis7CXB1c2gJZWRpCQk7IHVudXNlZAorCisJZ2V0X0dPVAllYngJCTsgZ2V0IEdPVCBhZGRyZXNzCisKKwk7IC0tLS0gUGFzcyAxOiBwcm9jZXNzIHJvd3MuCisKKwltb3YJZWR4LCBQT0lOVEVSIFtkYXRhKGVheCldCTsgKEZBU1RfRkxPQVQgKikKKwltb3YJZWN4LCBEQ1RTSVpFLzIKKwlhbGlnbngJMTYsNworLnJvd2xvb3A6CisKKwltb3ZxCW1tMCwgTU1XT1JEIFtNTUJMT0NLKDAsMCxlZHgsU0laRU9GX0ZBU1RfRkxPQVQpXQorCW1vdnEJbW0xLCBNTVdPUkQgW01NQkxPQ0soMSwwLGVkeCxTSVpFT0ZfRkFTVF9GTE9BVCldCisJbW92cQltbTIsIE1NV09SRCBbTU1CTE9DSygwLDMsZWR4LFNJWkVPRl9GQVNUX0ZMT0FUKV0KKwltb3ZxCW1tMywgTU1XT1JEIFtNTUJMT0NLKDEsMyxlZHgsU0laRU9GX0ZBU1RfRkxPQVQpXQorCisJOyBtbTA9KDAwIDAxKSwgbW0xPSgxMCAxMSksIG1tMj0oMDYgMDcpLCBtbTM9KDE2IDE3KQorCisJbW92cSAgICAgIG1tNCxtbTAJCTsgdHJhbnNwb3NlIGNvZWZmaWNpZW50cworCXB1bnBja2xkcSBtbTAsbW0xCQk7IG1tMD0oMDAgMTApPWRhdGEwCisJcHVucGNraGRxIG1tNCxtbTEJCTsgbW00PSgwMSAxMSk9ZGF0YTEKKwltb3ZxICAgICAgbW01LG1tMgkJOyB0cmFuc3Bvc2UgY29lZmZpY2llbnRzCisJcHVucGNrbGRxIG1tMixtbTMJCTsgbW0yPSgwNiAxNik9ZGF0YTYKKwlwdW5wY2toZHEgbW01LG1tMwkJOyBtbTU9KDA3IDE3KT1kYXRhNworCisJbW92cQltbTYsbW00CisJbW92cQltbTcsbW0wCisJcGZzdWIJbW00LG1tMgkJCTsgbW00PWRhdGExLWRhdGE2PXRtcDYKKwlwZnN1YgltbTAsbW01CQkJOyBtbTA9ZGF0YTAtZGF0YTc9dG1wNworCXBmYWRkCW1tNixtbTIJCQk7IG1tNj1kYXRhMStkYXRhNj10bXAxCisJcGZhZGQJbW03LG1tNQkJCTsgbW03PWRhdGEwK2RhdGE3PXRtcDAKKworCW1vdnEJbW0xLCBNTVdPUkQgW01NQkxPQ0soMCwxLGVkeCxTSVpFT0ZfRkFTVF9GTE9BVCldCisJbW92cQltbTMsIE1NV09SRCBbTU1CTE9DSygxLDEsZWR4LFNJWkVPRl9GQVNUX0ZMT0FUKV0KKwltb3ZxCW1tMiwgTU1XT1JEIFtNTUJMT0NLKDAsMixlZHgsU0laRU9GX0ZBU1RfRkxPQVQpXQorCW1vdnEJbW01LCBNTVdPUkQgW01NQkxPQ0soMSwyLGVkeCxTSVpFT0ZfRkFTVF9GTE9BVCldCisKKwk7IG1tMT0oMDIgMDMpLCBtbTM9KDEyIDEzKSwgbW0yPSgwNCAwNSksIG1tNT0oMTQgMTUpCisKKwltb3ZxCU1NV09SRCBbd2soMCldLCBtbTQJOyB3aygwKT10bXA2CisJbW92cQlNTVdPUkQgW3drKDEpXSwgbW0wCTsgd2soMSk9dG1wNworCisJbW92cSAgICAgIG1tNCxtbTEJCTsgdHJhbnNwb3NlIGNvZWZmaWNpZW50cworCXB1bnBja2xkcSBtbTEsbW0zCQk7IG1tMT0oMDIgMTIpPWRhdGEyCisJcHVucGNraGRxIG1tNCxtbTMJCTsgbW00PSgwMyAxMyk9ZGF0YTMKKwltb3ZxICAgICAgbW0wLG1tMgkJOyB0cmFuc3Bvc2UgY29lZmZpY2llbnRzCisJcHVucGNrbGRxIG1tMixtbTUJCTsgbW0yPSgwNCAxNCk9ZGF0YTQKKwlwdW5wY2toZHEgbW0wLG1tNQkJOyBtbTA9KDA1IDE1KT1kYXRhNQorCisJbW92cQltbTMsbW00CisJbW92cQltbTUsbW0xCisJcGZhZGQJbW00LG1tMgkJCTsgbW00PWRhdGEzK2RhdGE0PXRtcDMKKwlwZmFkZAltbTEsbW0wCQkJOyBtbTE9ZGF0YTIrZGF0YTU9dG1wMgorCXBmc3ViCW1tMyxtbTIJCQk7IG1tMz1kYXRhMy1kYXRhND10bXA0CisJcGZzdWIJbW01LG1tMAkJCTsgbW01PWRhdGEyLWRhdGE1PXRtcDUKKworCTsgLS0gRXZlbiBwYXJ0CisKKwltb3ZxCW1tMixtbTcKKwltb3ZxCW1tMCxtbTYKKwlwZnN1YgltbTcsbW00CQkJOyBtbTc9dG1wMTMKKwlwZnN1YgltbTYsbW0xCQkJOyBtbTY9dG1wMTIKKwlwZmFkZAltbTIsbW00CQkJOyBtbTI9dG1wMTAKKwlwZmFkZAltbTAsbW0xCQkJOyBtbTA9dG1wMTEKKworCXBmYWRkCW1tNixtbTcKKwlwZm11bAltbTYsW0dPVE9GRihlYngsUERfMF83MDcpXSA7IG1tNj16MQorCisJbW92cQltbTQsbW0yCisJbW92cQltbTEsbW03CisJcGZzdWIJbW0yLG1tMAkJCTsgbW0yPWRhdGE0CisJcGZzdWIJbW03LG1tNgkJCTsgbW03PWRhdGE2CisJcGZhZGQJbW00LG1tMAkJCTsgbW00PWRhdGEwCisJcGZhZGQJbW0xLG1tNgkJCTsgbW0xPWRhdGEyCisKKwltb3ZxCU1NV09SRCBbTU1CTE9DSygwLDIsZWR4LFNJWkVPRl9GQVNUX0ZMT0FUKV0sIG1tMgorCW1vdnEJTU1XT1JEIFtNTUJMT0NLKDAsMyxlZHgsU0laRU9GX0ZBU1RfRkxPQVQpXSwgbW03CisJbW92cQlNTVdPUkQgW01NQkxPQ0soMCwwLGVkeCxTSVpFT0ZfRkFTVF9GTE9BVCldLCBtbTQKKwltb3ZxCU1NV09SRCBbTU1CTE9DSygwLDEsZWR4LFNJWkVPRl9GQVNUX0ZMT0FUKV0sIG1tMQorCisJOyAtLSBPZGQgcGFydAorCisJbW92cQltbTAsIE1NV09SRCBbd2soMCldCTsgbW0wPXRtcDYKKwltb3ZxCW1tNiwgTU1XT1JEIFt3aygxKV0JOyBtbTY9dG1wNworCisJcGZhZGQJbW0zLG1tNQkJCTsgbW0zPXRtcDEwCisJcGZhZGQJbW01LG1tMAkJCTsgbW01PXRtcDExCisJcGZhZGQJbW0wLG1tNgkJCTsgbW0wPXRtcDEyLCBtbTY9dG1wNworCisJcGZtdWwJbW01LFtHT1RPRkYoZWJ4LFBEXzBfNzA3KV0gOyBtbTU9ejMKKworCW1vdnEJbW0yLG1tMwkJCTsgbW0yPXRtcDEwCisJcGZzdWIJbW0zLG1tMAorCXBmbXVsCW1tMyxbR09UT0ZGKGVieCxQRF8wXzM4MildIDsgbW0zPXo1CisJcGZtdWwJbW0yLFtHT1RPRkYoZWJ4LFBEXzBfNTQxKV0gOyBtbTI9TVVMVElQTFkodG1wMTAsRklYXzBfNTQxMTk2MTApCisJcGZtdWwJbW0wLFtHT1RPRkYoZWJ4LFBEXzFfMzA2KV0gOyBtbTA9TVVMVElQTFkodG1wMTIsRklYXzFfMzA2NTYyOTYpCisJcGZhZGQJbW0yLG1tMwkJCTsgbW0yPXoyCisJcGZhZGQJbW0wLG1tMwkJCTsgbW0wPXo0CisKKwltb3ZxCW1tNyxtbTYKKwlwZnN1YgltbTYsbW01CQkJOyBtbTY9ejEzCisJcGZhZGQJbW03LG1tNQkJCTsgbW03PXoxMQorCisJbW92cQltbTQsbW02CisJbW92cQltbTEsbW03CisJcGZzdWIJbW02LG1tMgkJCTsgbW02PWRhdGEzCisJcGZzdWIJbW03LG1tMAkJCTsgbW03PWRhdGE3CisJcGZhZGQJbW00LG1tMgkJCTsgbW00PWRhdGE1CisJcGZhZGQJbW0xLG1tMAkJCTsgbW0xPWRhdGExCisKKwltb3ZxCU1NV09SRCBbTU1CTE9DSygxLDEsZWR4LFNJWkVPRl9GQVNUX0ZMT0FUKV0sIG1tNgorCW1vdnEJTU1XT1JEIFtNTUJMT0NLKDEsMyxlZHgsU0laRU9GX0ZBU1RfRkxPQVQpXSwgbW03CisJbW92cQlNTVdPUkQgW01NQkxPQ0soMSwyLGVkeCxTSVpFT0ZfRkFTVF9GTE9BVCldLCBtbTQKKwltb3ZxCU1NV09SRCBbTU1CTE9DSygxLDAsZWR4LFNJWkVPRl9GQVNUX0ZMT0FUKV0sIG1tMQorCisJYWRkCWVkeCwgYnl0ZSAyKkRDVFNJWkUqU0laRU9GX0ZBU1RfRkxPQVQKKwlkZWMJZWN4CisJam56CW5lYXIgLnJvd2xvb3AKKworCTsgLS0tLSBQYXNzIDI6IHByb2Nlc3MgY29sdW1ucy4KKworCW1vdgllZHgsIFBPSU5URVIgW2RhdGEoZWF4KV0JOyAoRkFTVF9GTE9BVCAqKQorCW1vdgllY3gsIERDVFNJWkUvMgorCWFsaWdueAkxNiw3CisuY29sdW1ubG9vcDoKKworCW1vdnEJbW0wLCBNTVdPUkQgW01NQkxPQ0soMCwwLGVkeCxTSVpFT0ZfRkFTVF9GTE9BVCldCisJbW92cQltbTEsIE1NV09SRCBbTU1CTE9DSygxLDAsZWR4LFNJWkVPRl9GQVNUX0ZMT0FUKV0KKwltb3ZxCW1tMiwgTU1XT1JEIFtNTUJMT0NLKDYsMCxlZHgsU0laRU9GX0ZBU1RfRkxPQVQpXQorCW1vdnEJbW0zLCBNTVdPUkQgW01NQkxPQ0soNywwLGVkeCxTSVpFT0ZfRkFTVF9GTE9BVCldCisKKwk7IG1tMD0oMDAgMTApLCBtbTE9KDAxIDExKSwgbW0yPSg2MCA3MCksIG1tMz0oNjEgNzEpCisKKwltb3ZxICAgICAgbW00LG1tMAkJOyB0cmFuc3Bvc2UgY29lZmZpY2llbnRzCisJcHVucGNrbGRxIG1tMCxtbTEJCTsgbW0wPSgwMCAwMSk9ZGF0YTAKKwlwdW5wY2toZHEgbW00LG1tMQkJOyBtbTQ9KDEwIDExKT1kYXRhMQorCW1vdnEgICAgICBtbTUsbW0yCQk7IHRyYW5zcG9zZSBjb2VmZmljaWVudHMKKwlwdW5wY2tsZHEgbW0yLG1tMwkJOyBtbTI9KDYwIDYxKT1kYXRhNgorCXB1bnBja2hkcSBtbTUsbW0zCQk7IG1tNT0oNzAgNzEpPWRhdGE3CisKKwltb3ZxCW1tNixtbTQKKwltb3ZxCW1tNyxtbTAKKwlwZnN1YgltbTQsbW0yCQkJOyBtbTQ9ZGF0YTEtZGF0YTY9dG1wNgorCXBmc3ViCW1tMCxtbTUJCQk7IG1tMD1kYXRhMC1kYXRhNz10bXA3CisJcGZhZGQJbW02LG1tMgkJCTsgbW02PWRhdGExK2RhdGE2PXRtcDEKKwlwZmFkZAltbTcsbW01CQkJOyBtbTc9ZGF0YTArZGF0YTc9dG1wMAorCisJbW92cQltbTEsIE1NV09SRCBbTU1CTE9DSygyLDAsZWR4LFNJWkVPRl9GQVNUX0ZMT0FUKV0KKwltb3ZxCW1tMywgTU1XT1JEIFtNTUJMT0NLKDMsMCxlZHgsU0laRU9GX0ZBU1RfRkxPQVQpXQorCW1vdnEJbW0yLCBNTVdPUkQgW01NQkxPQ0soNCwwLGVkeCxTSVpFT0ZfRkFTVF9GTE9BVCldCisJbW92cQltbTUsIE1NV09SRCBbTU1CTE9DSyg1LDAsZWR4LFNJWkVPRl9GQVNUX0ZMT0FUKV0KKworCTsgbW0xPSgyMCAzMCksIG1tMz0oMjEgMzEpLCBtbTI9KDQwIDUwKSwgbW01PSg0MSA1MSkKKworCW1vdnEJTU1XT1JEIFt3aygwKV0sIG1tNAk7IHdrKDApPXRtcDYKKwltb3ZxCU1NV09SRCBbd2soMSldLCBtbTAJOyB3aygxKT10bXA3CisKKwltb3ZxICAgICAgbW00LG1tMQkJOyB0cmFuc3Bvc2UgY29lZmZpY2llbnRzCisJcHVucGNrbGRxIG1tMSxtbTMJCTsgbW0xPSgyMCAyMSk9ZGF0YTIKKwlwdW5wY2toZHEgbW00LG1tMwkJOyBtbTQ9KDMwIDMxKT1kYXRhMworCW1vdnEgICAgICBtbTAsbW0yCQk7IHRyYW5zcG9zZSBjb2VmZmljaWVudHMKKwlwdW5wY2tsZHEgbW0yLG1tNQkJOyBtbTI9KDQwIDQxKT1kYXRhNAorCXB1bnBja2hkcSBtbTAsbW01CQk7IG1tMD0oNTAgNTEpPWRhdGE1CisKKwltb3ZxCW1tMyxtbTQKKwltb3ZxCW1tNSxtbTEKKwlwZmFkZAltbTQsbW0yCQkJOyBtbTQ9ZGF0YTMrZGF0YTQ9dG1wMworCXBmYWRkCW1tMSxtbTAJCQk7IG1tMT1kYXRhMitkYXRhNT10bXAyCisJcGZzdWIJbW0zLG1tMgkJCTsgbW0zPWRhdGEzLWRhdGE0PXRtcDQKKwlwZnN1YgltbTUsbW0wCQkJOyBtbTU9ZGF0YTItZGF0YTU9dG1wNQorCisJOyAtLSBFdmVuIHBhcnQKKworCW1vdnEJbW0yLG1tNworCW1vdnEJbW0wLG1tNgorCXBmc3ViCW1tNyxtbTQJCQk7IG1tNz10bXAxMworCXBmc3ViCW1tNixtbTEJCQk7IG1tNj10bXAxMgorCXBmYWRkCW1tMixtbTQJCQk7IG1tMj10bXAxMAorCXBmYWRkCW1tMCxtbTEJCQk7IG1tMD10bXAxMQorCisJcGZhZGQJbW02LG1tNworCXBmbXVsCW1tNixbR09UT0ZGKGVieCxQRF8wXzcwNyldIDsgbW02PXoxCisKKwltb3ZxCW1tNCxtbTIKKwltb3ZxCW1tMSxtbTcKKwlwZnN1YgltbTIsbW0wCQkJOyBtbTI9ZGF0YTQKKwlwZnN1YgltbTcsbW02CQkJOyBtbTc9ZGF0YTYKKwlwZmFkZAltbTQsbW0wCQkJOyBtbTQ9ZGF0YTAKKwlwZmFkZAltbTEsbW02CQkJOyBtbTE9ZGF0YTIKKworCW1vdnEJTU1XT1JEIFtNTUJMT0NLKDQsMCxlZHgsU0laRU9GX0ZBU1RfRkxPQVQpXSwgbW0yCisJbW92cQlNTVdPUkQgW01NQkxPQ0soNiwwLGVkeCxTSVpFT0ZfRkFTVF9GTE9BVCldLCBtbTcKKwltb3ZxCU1NV09SRCBbTU1CTE9DSygwLDAsZWR4LFNJWkVPRl9GQVNUX0ZMT0FUKV0sIG1tNAorCW1vdnEJTU1XT1JEIFtNTUJMT0NLKDIsMCxlZHgsU0laRU9GX0ZBU1RfRkxPQVQpXSwgbW0xCisKKwk7IC0tIE9kZCBwYXJ0CisKKwltb3ZxCW1tMCwgTU1XT1JEIFt3aygwKV0JOyBtbTA9dG1wNgorCW1vdnEJbW02LCBNTVdPUkQgW3drKDEpXQk7IG1tNj10bXA3CisKKwlwZmFkZAltbTMsbW01CQkJOyBtbTM9dG1wMTAKKwlwZmFkZAltbTUsbW0wCQkJOyBtbTU9dG1wMTEKKwlwZmFkZAltbTAsbW02CQkJOyBtbTA9dG1wMTIsIG1tNj10bXA3CisKKwlwZm11bAltbTUsW0dPVE9GRihlYngsUERfMF83MDcpXSA7IG1tNT16MworCisJbW92cQltbTIsbW0zCQkJOyBtbTI9dG1wMTAKKwlwZnN1YgltbTMsbW0wCisJcGZtdWwJbW0zLFtHT1RPRkYoZWJ4LFBEXzBfMzgyKV0gOyBtbTM9ejUKKwlwZm11bAltbTIsW0dPVE9GRihlYngsUERfMF81NDEpXSA7IG1tMj1NVUxUSVBMWSh0bXAxMCxGSVhfMF81NDExOTYxMCkKKwlwZm11bAltbTAsW0dPVE9GRihlYngsUERfMV8zMDYpXSA7IG1tMD1NVUxUSVBMWSh0bXAxMixGSVhfMV8zMDY1NjI5NikKKwlwZmFkZAltbTIsbW0zCQkJOyBtbTI9ejIKKwlwZmFkZAltbTAsbW0zCQkJOyBtbTA9ejQKKworCW1vdnEJbW03LG1tNgorCXBmc3ViCW1tNixtbTUJCQk7IG1tNj16MTMKKwlwZmFkZAltbTcsbW01CQkJOyBtbTc9ejExCisKKwltb3ZxCW1tNCxtbTYKKwltb3ZxCW1tMSxtbTcKKwlwZnN1YgltbTYsbW0yCQkJOyBtbTY9ZGF0YTMKKwlwZnN1YgltbTcsbW0wCQkJOyBtbTc9ZGF0YTcKKwlwZmFkZAltbTQsbW0yCQkJOyBtbTQ9ZGF0YTUKKwlwZmFkZAltbTEsbW0wCQkJOyBtbTE9ZGF0YTEKKworCW1vdnEJTU1XT1JEIFtNTUJMT0NLKDMsMCxlZHgsU0laRU9GX0ZBU1RfRkxPQVQpXSwgbW02CisJbW92cQlNTVdPUkQgW01NQkxPQ0soNywwLGVkeCxTSVpFT0ZfRkFTVF9GTE9BVCldLCBtbTcKKwltb3ZxCU1NV09SRCBbTU1CTE9DSyg1LDAsZWR4LFNJWkVPRl9GQVNUX0ZMT0FUKV0sIG1tNAorCW1vdnEJTU1XT1JEIFtNTUJMT0NLKDEsMCxlZHgsU0laRU9GX0ZBU1RfRkxPQVQpXSwgbW0xCisKKwlhZGQJZWR4LCBieXRlIDIqU0laRU9GX0ZBU1RfRkxPQVQKKwlkZWMJZWN4CisJam56CW5lYXIgLmNvbHVtbmxvb3AKKworCWZlbW1zCQk7IGVtcHR5IE1NWC8zRE5vdyEgc3RhdGUKKworOwlwb3AJZWRpCQk7IHVudXNlZAorOwlwb3AJZXNpCQk7IHVudXNlZAorOwlwb3AJZWR4CQk7IG5lZWQgbm90IGJlIHByZXNlcnZlZAorOwlwb3AJZWN4CQk7IG5lZWQgbm90IGJlIHByZXNlcnZlZAorCXBvcHBpYwllYngKKwltb3YJZXNwLGVicAkJOyBlc3AgPC0gYWxpZ25lZCBlYnAKKwlwb3AJZXNwCQk7IGVzcCA8LSBvcmlnaW5hbCBlYnAKKwlwb3AJZWJwCisJcmV0CisKKzsgRm9yIHNvbWUgcmVhc29uLCB0aGUgT1MgWCBsaW5rZXIgZG9lcyBub3QgaG9ub3IgdGhlIHJlcXVlc3QgdG8gYWxpZ24gdGhlCis7IHNlZ21lbnQgdW5sZXNzIHdlIGRvIHRoaXMuCisJYWxpZ24JMTYKZGlmZiAtLWdpdCBhL3NpbWQvamZtbXhmc3QuYXNtIGIvc2ltZC9qZm1teGZzdC5hc20KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDY0NzI0MgotLS0gL2Rldi9udWxsCisrKyBiL3NpbWQvamZtbXhmc3QuYXNtCkBAIC0wLDAgKzEsMzk3IEBACis7Cis7IGpmbW14ZnN0LmFzbSAtIGZhc3QgaW50ZWdlciBGRENUIChNTVgpCis7Cis7IENvcHlyaWdodCAyMDA5IFBpZXJyZSBPc3NtYW4gPG9zc21hbkBjZW5kaW8uc2U+IGZvciBDZW5kaW8gQUIKKzsKKzsgQmFzZWQgb24KKzsgeDg2IFNJTUQgZXh0ZW5zaW9uIGZvciBJSkcgSlBFRyBsaWJyYXJ5Cis7IENvcHlyaWdodCAoQykgMTk5OS0yMDA2LCBNSVlBU0FLQSBNYXNhcnUuCis7IEZvciBjb25kaXRpb25zIG9mIGRpc3RyaWJ1dGlvbiBhbmQgdXNlLCBzZWUgY29weXJpZ2h0IG5vdGljZSBpbiBqc2ltZGV4dC5pbmMKKzsKKzsgVGhpcyBmaWxlIHNob3VsZCBiZSBhc3NlbWJsZWQgd2l0aCBOQVNNIChOZXR3aWRlIEFzc2VtYmxlciksCis7IGNhbiAqbm90KiBiZSBhc3NlbWJsZWQgd2l0aCBNaWNyb3NvZnQncyBNQVNNIG9yIGFueSBjb21wYXRpYmxlCis7IGFzc2VtYmxlciAoaW5jbHVkaW5nIEJvcmxhbmQncyBUdXJibyBBc3NlbWJsZXIpLgorOyBOQVNNIGlzIGF2YWlsYWJsZSBmcm9tIGh0dHA6Ly9uYXNtLnNvdXJjZWZvcmdlLm5ldC8gb3IKKzsgaHR0cDovL3NvdXJjZWZvcmdlLm5ldC9wcm9qZWN0L3Nob3dmaWxlcy5waHA/Z3JvdXBfaWQ9NjIwOAorOworOyBUaGlzIGZpbGUgY29udGFpbnMgYSBmYXN0LCBub3Qgc28gYWNjdXJhdGUgaW50ZWdlciBpbXBsZW1lbnRhdGlvbiBvZgorOyB0aGUgZm9yd2FyZCBEQ1QgKERpc2NyZXRlIENvc2luZSBUcmFuc2Zvcm0pLiBUaGUgZm9sbG93aW5nIGNvZGUgaXMKKzsgYmFzZWQgZGlyZWN0bHkgb24gdGhlIElKRydzIG9yaWdpbmFsIGpmZGN0ZnN0LmM7IHNlZSB0aGUgamZkY3Rmc3QuYworOyBmb3IgbW9yZSBkZXRhaWxzLgorOworOyBbVEFCOF0KKworJWluY2x1ZGUgImpzaW1kZXh0LmluYyIKKyVpbmNsdWRlICJqZGN0LmluYyIKKworOyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCislZGVmaW5lIENPTlNUX0JJVFMJOAk7IDE0IGlzIGFsc28gT0suCisKKyVpZiBDT05TVF9CSVRTID09IDgKK0ZfMF8zODIJZXF1CSA5OAkJOyBGSVgoMC4zODI2ODM0MzMpCitGXzBfNTQxCWVxdQkxMzkJCTsgRklYKDAuNTQxMTk2MTAwKQorRl8wXzcwNwllcXUJMTgxCQk7IEZJWCgwLjcwNzEwNjc4MSkKK0ZfMV8zMDYJZXF1CTMzNAkJOyBGSVgoMS4zMDY1NjI5NjUpCislZWxzZQorOyBOQVNNIGNhbm5vdCBkbyBjb21waWxlLXRpbWUgYXJpdGhtZXRpYyBvbiBmbG9hdGluZy1wb2ludCBjb25zdGFudHMuCislZGVmaW5lIERFU0NBTEUoeCxuKSAgKCgoeCkrKDE8PCgobiktMSkpKT4+KG4pKQorRl8wXzM4MgllcXUJREVTQ0FMRSggNDEwOTAzMjA3LDMwLUNPTlNUX0JJVFMpCTsgRklYKDAuMzgyNjgzNDMzKQorRl8wXzU0MQllcXUJREVTQ0FMRSggNTgxMTA0ODg3LDMwLUNPTlNUX0JJVFMpCTsgRklYKDAuNTQxMTk2MTAwKQorRl8wXzcwNwllcXUJREVTQ0FMRSggNzU5MjUwMTI0LDMwLUNPTlNUX0JJVFMpCTsgRklYKDAuNzA3MTA2NzgxKQorRl8xXzMwNgllcXUJREVTQ0FMRSgxNDAyOTExMzAxLDMwLUNPTlNUX0JJVFMpCTsgRklYKDEuMzA2NTYyOTY1KQorJWVuZGlmCisKKzsgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKwlTRUNUSU9OCVNFR19DT05TVAorCis7IFBSRV9NVUxUSVBMWV9TQ0FMRV9CSVRTIDw9IDIgKHRvIGF2b2lkIG92ZXJmbG93KQorOyBDT05TVF9CSVRTICsgQ09OU1RfU0hJRlQgKyBQUkVfTVVMVElQTFlfU0NBTEVfQklUUyA9PSAxNiAoZm9yIHBtdWxodykKKworJWRlZmluZSBQUkVfTVVMVElQTFlfU0NBTEVfQklUUyAgIDIKKyVkZWZpbmUgQ09OU1RfU0hJRlQgICAgICgxNiAtIFBSRV9NVUxUSVBMWV9TQ0FMRV9CSVRTIC0gQ09OU1RfQklUUykKKworCWFsaWduegkxNgorCWdsb2JhbAlFWFROKGpjb25zdF9mZGN0X2lmYXN0X21teCkKKworRVhUTihqY29uc3RfZmRjdF9pZmFzdF9tbXgpOgorCitQV19GMDcwNwl0aW1lcyA0IGR3ICBGXzBfNzA3IDw8IENPTlNUX1NISUZUCitQV19GMDM4Mgl0aW1lcyA0IGR3ICBGXzBfMzgyIDw8IENPTlNUX1NISUZUCitQV19GMDU0MQl0aW1lcyA0IGR3ICBGXzBfNTQxIDw8IENPTlNUX1NISUZUCitQV19GMTMwNgl0aW1lcyA0IGR3ICBGXzFfMzA2IDw8IENPTlNUX1NISUZUCisKKwlhbGlnbnoJMTYKKworOyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCVNFQ1RJT04JU0VHX1RFWFQKKwlCSVRTCTMyCis7Cis7IFBlcmZvcm0gdGhlIGZvcndhcmQgRENUIG9uIG9uZSBibG9jayBvZiBzYW1wbGVzLgorOworOyBHTE9CQUwodm9pZCkKKzsganNpbWRfZmRjdF9pZmFzdF9tbXggKERDVEVMRU0gKiBkYXRhKQorOworCislZGVmaW5lIGRhdGEoYikJCShiKSs4CQk7IERDVEVMRU0gKiBkYXRhCisKKyVkZWZpbmUgb3JpZ2luYWxfZWJwCWVicCswCislZGVmaW5lIHdrKGkpCQllYnAtKFdLX05VTS0oaSkpKlNJWkVPRl9NTVdPUkQJOyBtbXdvcmQgd2tbV0tfTlVNXQorJWRlZmluZSBXS19OVU0JCTIKKworCWFsaWduCTE2CisJZ2xvYmFsCUVYVE4oanNpbWRfZmRjdF9pZmFzdF9tbXgpCisKK0VYVE4oanNpbWRfZmRjdF9pZmFzdF9tbXgpOgorCXB1c2gJZWJwCisJbW92CWVheCxlc3AJCQkJOyBlYXggPSBvcmlnaW5hbCBlYnAKKwlzdWIJZXNwLCBieXRlIDQKKwlhbmQJZXNwLCBieXRlICgtU0laRU9GX01NV09SRCkJOyBhbGlnbiB0byA2NCBiaXRzCisJbW92CVtlc3BdLGVheAorCW1vdgllYnAsZXNwCQkJCTsgZWJwID0gYWxpZ25lZCBlYnAKKwlsZWEJZXNwLCBbd2soMCldCisJcHVzaHBpYwllYngKKzsJcHVzaAllY3gJCTsgbmVlZCBub3QgYmUgcHJlc2VydmVkCis7CXB1c2gJZWR4CQk7IG5lZWQgbm90IGJlIHByZXNlcnZlZAorOwlwdXNoCWVzaQkJOyB1bnVzZWQKKzsJcHVzaAllZGkJCTsgdW51c2VkCisKKwlnZXRfR09UCWVieAkJOyBnZXQgR09UIGFkZHJlc3MKKworCTsgLS0tLSBQYXNzIDE6IHByb2Nlc3Mgcm93cy4KKworCW1vdgllZHgsIFBPSU5URVIgW2RhdGEoZWF4KV0JOyAoRENURUxFTSAqKQorCW1vdgllY3gsIERDVFNJWkUvNAorCWFsaWdueAkxNiw3Cisucm93bG9vcDoKKworCW1vdnEJbW0wLCBNTVdPUkQgW01NQkxPQ0soMiwwLGVkeCxTSVpFT0ZfRENURUxFTSldCisJbW92cQltbTEsIE1NV09SRCBbTU1CTE9DSygzLDAsZWR4LFNJWkVPRl9EQ1RFTEVNKV0KKwltb3ZxCW1tMiwgTU1XT1JEIFtNTUJMT0NLKDIsMSxlZHgsU0laRU9GX0RDVEVMRU0pXQorCW1vdnEJbW0zLCBNTVdPUkQgW01NQkxPQ0soMywxLGVkeCxTSVpFT0ZfRENURUxFTSldCisKKwk7IG1tMD0oMjAgMjEgMjIgMjMpLCBtbTI9KDI0IDI1IDI2IDI3KQorCTsgbW0xPSgzMCAzMSAzMiAzMyksIG1tMz0oMzQgMzUgMzYgMzcpCisKKwltb3ZxICAgICAgbW00LG1tMAkJOyB0cmFuc3Bvc2UgY29lZmZpY2llbnRzKHBoYXNlIDEpCisJcHVucGNrbHdkIG1tMCxtbTEJCTsgbW0wPSgyMCAzMCAyMSAzMSkKKwlwdW5wY2tod2QgbW00LG1tMQkJOyBtbTQ9KDIyIDMyIDIzIDMzKQorCW1vdnEgICAgICBtbTUsbW0yCQk7IHRyYW5zcG9zZSBjb2VmZmljaWVudHMocGhhc2UgMSkKKwlwdW5wY2tsd2QgbW0yLG1tMwkJOyBtbTI9KDI0IDM0IDI1IDM1KQorCXB1bnBja2h3ZCBtbTUsbW0zCQk7IG1tNT0oMjYgMzYgMjcgMzcpCisKKwltb3ZxCW1tNiwgTU1XT1JEIFtNTUJMT0NLKDAsMCxlZHgsU0laRU9GX0RDVEVMRU0pXQorCW1vdnEJbW03LCBNTVdPUkQgW01NQkxPQ0soMSwwLGVkeCxTSVpFT0ZfRENURUxFTSldCisJbW92cQltbTEsIE1NV09SRCBbTU1CTE9DSygwLDEsZWR4LFNJWkVPRl9EQ1RFTEVNKV0KKwltb3ZxCW1tMywgTU1XT1JEIFtNTUJMT0NLKDEsMSxlZHgsU0laRU9GX0RDVEVMRU0pXQorCisJOyBtbTY9KDAwIDAxIDAyIDAzKSwgbW0xPSgwNCAwNSAwNiAwNykKKwk7IG1tNz0oMTAgMTEgMTIgMTMpLCBtbTM9KDE0IDE1IDE2IDE3KQorCisJbW92cQlNTVdPUkQgW3drKDApXSwgbW00CTsgd2soMCk9KDIyIDMyIDIzIDMzKQorCW1vdnEJTU1XT1JEIFt3aygxKV0sIG1tMgk7IHdrKDEpPSgyNCAzNCAyNSAzNSkKKworCW1vdnEgICAgICBtbTQsbW02CQk7IHRyYW5zcG9zZSBjb2VmZmljaWVudHMocGhhc2UgMSkKKwlwdW5wY2tsd2QgbW02LG1tNwkJOyBtbTY9KDAwIDEwIDAxIDExKQorCXB1bnBja2h3ZCBtbTQsbW03CQk7IG1tND0oMDIgMTIgMDMgMTMpCisJbW92cSAgICAgIG1tMixtbTEJCTsgdHJhbnNwb3NlIGNvZWZmaWNpZW50cyhwaGFzZSAxKQorCXB1bnBja2x3ZCBtbTEsbW0zCQk7IG1tMT0oMDQgMTQgMDUgMTUpCisJcHVucGNraHdkIG1tMixtbTMJCTsgbW0yPSgwNiAxNiAwNyAxNykKKworCW1vdnEgICAgICBtbTcsbW02CQk7IHRyYW5zcG9zZSBjb2VmZmljaWVudHMocGhhc2UgMikKKwlwdW5wY2tsZHEgbW02LG1tMAkJOyBtbTY9KDAwIDEwIDIwIDMwKT1kYXRhMAorCXB1bnBja2hkcSBtbTcsbW0wCQk7IG1tNz0oMDEgMTEgMjEgMzEpPWRhdGExCisJbW92cSAgICAgIG1tMyxtbTIJCTsgdHJhbnNwb3NlIGNvZWZmaWNpZW50cyhwaGFzZSAyKQorCXB1bnBja2xkcSBtbTIsbW01CQk7IG1tMj0oMDYgMTYgMjYgMzYpPWRhdGE2CisJcHVucGNraGRxIG1tMyxtbTUJCTsgbW0zPSgwNyAxNyAyNyAzNyk9ZGF0YTcKKworCW1vdnEJbW0wLG1tNworCW1vdnEJbW01LG1tNgorCXBzdWJ3CW1tNyxtbTIJCQk7IG1tNz1kYXRhMS1kYXRhNj10bXA2CisJcHN1YncJbW02LG1tMwkJCTsgbW02PWRhdGEwLWRhdGE3PXRtcDcKKwlwYWRkdwltbTAsbW0yCQkJOyBtbTA9ZGF0YTErZGF0YTY9dG1wMQorCXBhZGR3CW1tNSxtbTMJCQk7IG1tNT1kYXRhMCtkYXRhNz10bXAwCisKKwltb3ZxCW1tMiwgTU1XT1JEIFt3aygwKV0JOyBtbTI9KDIyIDMyIDIzIDMzKQorCW1vdnEJbW0zLCBNTVdPUkQgW3drKDEpXQk7IG1tMz0oMjQgMzQgMjUgMzUpCisJbW92cQlNTVdPUkQgW3drKDApXSwgbW03CTsgd2soMCk9dG1wNgorCW1vdnEJTU1XT1JEIFt3aygxKV0sIG1tNgk7IHdrKDEpPXRtcDcKKworCW1vdnEgICAgICBtbTcsbW00CQk7IHRyYW5zcG9zZSBjb2VmZmljaWVudHMocGhhc2UgMikKKwlwdW5wY2tsZHEgbW00LG1tMgkJOyBtbTQ9KDAyIDEyIDIyIDMyKT1kYXRhMgorCXB1bnBja2hkcSBtbTcsbW0yCQk7IG1tNz0oMDMgMTMgMjMgMzMpPWRhdGEzCisJbW92cSAgICAgIG1tNixtbTEJCTsgdHJhbnNwb3NlIGNvZWZmaWNpZW50cyhwaGFzZSAyKQorCXB1bnBja2xkcSBtbTEsbW0zCQk7IG1tMT0oMDQgMTQgMjQgMzQpPWRhdGE0CisJcHVucGNraGRxIG1tNixtbTMJCTsgbW02PSgwNSAxNSAyNSAzNSk9ZGF0YTUKKworCW1vdnEJbW0yLG1tNworCW1vdnEJbW0zLG1tNAorCXBhZGR3CW1tNyxtbTEJCQk7IG1tNz1kYXRhMytkYXRhND10bXAzCisJcGFkZHcJbW00LG1tNgkJCTsgbW00PWRhdGEyK2RhdGE1PXRtcDIKKwlwc3VidwltbTIsbW0xCQkJOyBtbTI9ZGF0YTMtZGF0YTQ9dG1wNAorCXBzdWJ3CW1tMyxtbTYJCQk7IG1tMz1kYXRhMi1kYXRhNT10bXA1CisKKwk7IC0tIEV2ZW4gcGFydAorCisJbW92cQltbTEsbW01CisJbW92cQltbTYsbW0wCisJcHN1YncJbW01LG1tNwkJCTsgbW01PXRtcDEzCisJcHN1YncJbW0wLG1tNAkJCTsgbW0wPXRtcDEyCisJcGFkZHcJbW0xLG1tNwkJCTsgbW0xPXRtcDEwCisJcGFkZHcJbW02LG1tNAkJCTsgbW02PXRtcDExCisKKwlwYWRkdwltbTAsbW01CisJcHNsbHcJbW0wLFBSRV9NVUxUSVBMWV9TQ0FMRV9CSVRTCisJcG11bGh3CW1tMCxbR09UT0ZGKGVieCxQV19GMDcwNyldIDsgbW0wPXoxCisKKwltb3ZxCW1tNyxtbTEKKwltb3ZxCW1tNCxtbTUKKwlwc3VidwltbTEsbW02CQkJOyBtbTE9ZGF0YTQKKwlwc3VidwltbTUsbW0wCQkJOyBtbTU9ZGF0YTYKKwlwYWRkdwltbTcsbW02CQkJOyBtbTc9ZGF0YTAKKwlwYWRkdwltbTQsbW0wCQkJOyBtbTQ9ZGF0YTIKKworCW1vdnEJTU1XT1JEIFtNTUJMT0NLKDAsMSxlZHgsU0laRU9GX0RDVEVMRU0pXSwgbW0xCisJbW92cQlNTVdPUkQgW01NQkxPQ0soMiwxLGVkeCxTSVpFT0ZfRENURUxFTSldLCBtbTUKKwltb3ZxCU1NV09SRCBbTU1CTE9DSygwLDAsZWR4LFNJWkVPRl9EQ1RFTEVNKV0sIG1tNworCW1vdnEJTU1XT1JEIFtNTUJMT0NLKDIsMCxlZHgsU0laRU9GX0RDVEVMRU0pXSwgbW00CisKKwk7IC0tIE9kZCBwYXJ0CisKKwltb3ZxCW1tNiwgTU1XT1JEIFt3aygwKV0JOyBtbTY9dG1wNgorCW1vdnEJbW0wLCBNTVdPUkQgW3drKDEpXQk7IG1tMD10bXA3CisKKwlwYWRkdwltbTIsbW0zCQkJOyBtbTI9dG1wMTAKKwlwYWRkdwltbTMsbW02CQkJOyBtbTM9dG1wMTEKKwlwYWRkdwltbTYsbW0wCQkJOyBtbTY9dG1wMTIsIG1tMD10bXA3CisKKwlwc2xsdwltbTIsUFJFX01VTFRJUExZX1NDQUxFX0JJVFMKKwlwc2xsdwltbTYsUFJFX01VTFRJUExZX1NDQUxFX0JJVFMKKworCXBzbGx3CW1tMyxQUkVfTVVMVElQTFlfU0NBTEVfQklUUworCXBtdWxodwltbTMsW0dPVE9GRihlYngsUFdfRjA3MDcpXSA7IG1tMz16MworCisJbW92cQltbTEsbW0yCQkJOyBtbTE9dG1wMTAKKwlwc3VidwltbTIsbW02CisJcG11bGh3CW1tMixbR09UT0ZGKGVieCxQV19GMDM4MildIDsgbW0yPXo1CisJcG11bGh3CW1tMSxbR09UT0ZGKGVieCxQV19GMDU0MSldIDsgbW0xPU1VTFRJUExZKHRtcDEwLEZJWF8wXzU0MTE5NjEwKQorCXBtdWxodwltbTYsW0dPVE9GRihlYngsUFdfRjEzMDYpXSA7IG1tNj1NVUxUSVBMWSh0bXAxMixGSVhfMV8zMDY1NjI5NikKKwlwYWRkdwltbTEsbW0yCQkJOyBtbTE9ejIKKwlwYWRkdwltbTYsbW0yCQkJOyBtbTY9ejQKKworCW1vdnEJbW01LG1tMAorCXBzdWJ3CW1tMCxtbTMJCQk7IG1tMD16MTMKKwlwYWRkdwltbTUsbW0zCQkJOyBtbTU9ejExCisKKwltb3ZxCW1tNyxtbTAKKwltb3ZxCW1tNCxtbTUKKwlwc3VidwltbTAsbW0xCQkJOyBtbTA9ZGF0YTMKKwlwc3VidwltbTUsbW02CQkJOyBtbTU9ZGF0YTcKKwlwYWRkdwltbTcsbW0xCQkJOyBtbTc9ZGF0YTUKKwlwYWRkdwltbTQsbW02CQkJOyBtbTQ9ZGF0YTEKKworCW1vdnEJTU1XT1JEIFtNTUJMT0NLKDMsMCxlZHgsU0laRU9GX0RDVEVMRU0pXSwgbW0wCisJbW92cQlNTVdPUkQgW01NQkxPQ0soMywxLGVkeCxTSVpFT0ZfRENURUxFTSldLCBtbTUKKwltb3ZxCU1NV09SRCBbTU1CTE9DSygxLDEsZWR4LFNJWkVPRl9EQ1RFTEVNKV0sIG1tNworCW1vdnEJTU1XT1JEIFtNTUJMT0NLKDEsMCxlZHgsU0laRU9GX0RDVEVMRU0pXSwgbW00CisKKwlhZGQJZWR4LCBieXRlIDQqRENUU0laRSpTSVpFT0ZfRENURUxFTQorCWRlYwllY3gKKwlqbnoJbmVhciAucm93bG9vcAorCisJOyAtLS0tIFBhc3MgMjogcHJvY2VzcyBjb2x1bW5zLgorCisJbW92CWVkeCwgUE9JTlRFUiBbZGF0YShlYXgpXQk7IChEQ1RFTEVNICopCisJbW92CWVjeCwgRENUU0laRS80CisJYWxpZ254CTE2LDcKKy5jb2x1bW5sb29wOgorCisJbW92cQltbTAsIE1NV09SRCBbTU1CTE9DSygyLDAsZWR4LFNJWkVPRl9EQ1RFTEVNKV0KKwltb3ZxCW1tMSwgTU1XT1JEIFtNTUJMT0NLKDMsMCxlZHgsU0laRU9GX0RDVEVMRU0pXQorCW1vdnEJbW0yLCBNTVdPUkQgW01NQkxPQ0soNiwwLGVkeCxTSVpFT0ZfRENURUxFTSldCisJbW92cQltbTMsIE1NV09SRCBbTU1CTE9DSyg3LDAsZWR4LFNJWkVPRl9EQ1RFTEVNKV0KKworCTsgbW0wPSgwMiAxMiAyMiAzMiksIG1tMj0oNDIgNTIgNjIgNzIpCisJOyBtbTE9KDAzIDEzIDIzIDMzKSwgbW0zPSg0MyA1MyA2MyA3MykKKworCW1vdnEgICAgICBtbTQsbW0wCQk7IHRyYW5zcG9zZSBjb2VmZmljaWVudHMocGhhc2UgMSkKKwlwdW5wY2tsd2QgbW0wLG1tMQkJOyBtbTA9KDAyIDAzIDEyIDEzKQorCXB1bnBja2h3ZCBtbTQsbW0xCQk7IG1tND0oMjIgMjMgMzIgMzMpCisJbW92cSAgICAgIG1tNSxtbTIJCTsgdHJhbnNwb3NlIGNvZWZmaWNpZW50cyhwaGFzZSAxKQorCXB1bnBja2x3ZCBtbTIsbW0zCQk7IG1tMj0oNDIgNDMgNTIgNTMpCisJcHVucGNraHdkIG1tNSxtbTMJCTsgbW01PSg2MiA2MyA3MiA3MykKKworCW1vdnEJbW02LCBNTVdPUkQgW01NQkxPQ0soMCwwLGVkeCxTSVpFT0ZfRENURUxFTSldCisJbW92cQltbTcsIE1NV09SRCBbTU1CTE9DSygxLDAsZWR4LFNJWkVPRl9EQ1RFTEVNKV0KKwltb3ZxCW1tMSwgTU1XT1JEIFtNTUJMT0NLKDQsMCxlZHgsU0laRU9GX0RDVEVMRU0pXQorCW1vdnEJbW0zLCBNTVdPUkQgW01NQkxPQ0soNSwwLGVkeCxTSVpFT0ZfRENURUxFTSldCisKKwk7IG1tNj0oMDAgMTAgMjAgMzApLCBtbTE9KDQwIDUwIDYwIDcwKQorCTsgbW03PSgwMSAxMSAyMSAzMSksIG1tMz0oNDEgNTEgNjEgNzEpCisKKwltb3ZxCU1NV09SRCBbd2soMCldLCBtbTQJOyB3aygwKT0oMjIgMjMgMzIgMzMpCisJbW92cQlNTVdPUkQgW3drKDEpXSwgbW0yCTsgd2soMSk9KDQyIDQzIDUyIDUzKQorCisJbW92cSAgICAgIG1tNCxtbTYJCTsgdHJhbnNwb3NlIGNvZWZmaWNpZW50cyhwaGFzZSAxKQorCXB1bnBja2x3ZCBtbTYsbW03CQk7IG1tNj0oMDAgMDEgMTAgMTEpCisJcHVucGNraHdkIG1tNCxtbTcJCTsgbW00PSgyMCAyMSAzMCAzMSkKKwltb3ZxICAgICAgbW0yLG1tMQkJOyB0cmFuc3Bvc2UgY29lZmZpY2llbnRzKHBoYXNlIDEpCisJcHVucGNrbHdkIG1tMSxtbTMJCTsgbW0xPSg0MCA0MSA1MCA1MSkKKwlwdW5wY2tod2QgbW0yLG1tMwkJOyBtbTI9KDYwIDYxIDcwIDcxKQorCisJbW92cSAgICAgIG1tNyxtbTYJCTsgdHJhbnNwb3NlIGNvZWZmaWNpZW50cyhwaGFzZSAyKQorCXB1bnBja2xkcSBtbTYsbW0wCQk7IG1tNj0oMDAgMDEgMDIgMDMpPWRhdGEwCisJcHVucGNraGRxIG1tNyxtbTAJCTsgbW03PSgxMCAxMSAxMiAxMyk9ZGF0YTEKKwltb3ZxICAgICAgbW0zLG1tMgkJOyB0cmFuc3Bvc2UgY29lZmZpY2llbnRzKHBoYXNlIDIpCisJcHVucGNrbGRxIG1tMixtbTUJCTsgbW0yPSg2MCA2MSA2MiA2Myk9ZGF0YTYKKwlwdW5wY2toZHEgbW0zLG1tNQkJOyBtbTM9KDcwIDcxIDcyIDczKT1kYXRhNworCisJbW92cQltbTAsbW03CisJbW92cQltbTUsbW02CisJcHN1YncJbW03LG1tMgkJCTsgbW03PWRhdGExLWRhdGE2PXRtcDYKKwlwc3VidwltbTYsbW0zCQkJOyBtbTY9ZGF0YTAtZGF0YTc9dG1wNworCXBhZGR3CW1tMCxtbTIJCQk7IG1tMD1kYXRhMStkYXRhNj10bXAxCisJcGFkZHcJbW01LG1tMwkJCTsgbW01PWRhdGEwK2RhdGE3PXRtcDAKKworCW1vdnEJbW0yLCBNTVdPUkQgW3drKDApXQk7IG1tMj0oMjIgMjMgMzIgMzMpCisJbW92cQltbTMsIE1NV09SRCBbd2soMSldCTsgbW0zPSg0MiA0MyA1MiA1MykKKwltb3ZxCU1NV09SRCBbd2soMCldLCBtbTcJOyB3aygwKT10bXA2CisJbW92cQlNTVdPUkQgW3drKDEpXSwgbW02CTsgd2soMSk9dG1wNworCisJbW92cSAgICAgIG1tNyxtbTQJCTsgdHJhbnNwb3NlIGNvZWZmaWNpZW50cyhwaGFzZSAyKQorCXB1bnBja2xkcSBtbTQsbW0yCQk7IG1tND0oMjAgMjEgMjIgMjMpPWRhdGEyCisJcHVucGNraGRxIG1tNyxtbTIJCTsgbW03PSgzMCAzMSAzMiAzMyk9ZGF0YTMKKwltb3ZxICAgICAgbW02LG1tMQkJOyB0cmFuc3Bvc2UgY29lZmZpY2llbnRzKHBoYXNlIDIpCisJcHVucGNrbGRxIG1tMSxtbTMJCTsgbW0xPSg0MCA0MSA0MiA0Myk9ZGF0YTQKKwlwdW5wY2toZHEgbW02LG1tMwkJOyBtbTY9KDUwIDUxIDUyIDUzKT1kYXRhNQorCisJbW92cQltbTIsbW03CisJbW92cQltbTMsbW00CisJcGFkZHcJbW03LG1tMQkJCTsgbW03PWRhdGEzK2RhdGE0PXRtcDMKKwlwYWRkdwltbTQsbW02CQkJOyBtbTQ9ZGF0YTIrZGF0YTU9dG1wMgorCXBzdWJ3CW1tMixtbTEJCQk7IG1tMj1kYXRhMy1kYXRhND10bXA0CisJcHN1YncJbW0zLG1tNgkJCTsgbW0zPWRhdGEyLWRhdGE1PXRtcDUKKworCTsgLS0gRXZlbiBwYXJ0CisKKwltb3ZxCW1tMSxtbTUKKwltb3ZxCW1tNixtbTAKKwlwc3VidwltbTUsbW03CQkJOyBtbTU9dG1wMTMKKwlwc3VidwltbTAsbW00CQkJOyBtbTA9dG1wMTIKKwlwYWRkdwltbTEsbW03CQkJOyBtbTE9dG1wMTAKKwlwYWRkdwltbTYsbW00CQkJOyBtbTY9dG1wMTEKKworCXBhZGR3CW1tMCxtbTUKKwlwc2xsdwltbTAsUFJFX01VTFRJUExZX1NDQUxFX0JJVFMKKwlwbXVsaHcJbW0wLFtHT1RPRkYoZWJ4LFBXX0YwNzA3KV0gOyBtbTA9ejEKKworCW1vdnEJbW03LG1tMQorCW1vdnEJbW00LG1tNQorCXBzdWJ3CW1tMSxtbTYJCQk7IG1tMT1kYXRhNAorCXBzdWJ3CW1tNSxtbTAJCQk7IG1tNT1kYXRhNgorCXBhZGR3CW1tNyxtbTYJCQk7IG1tNz1kYXRhMAorCXBhZGR3CW1tNCxtbTAJCQk7IG1tND1kYXRhMgorCisJbW92cQlNTVdPUkQgW01NQkxPQ0soNCwwLGVkeCxTSVpFT0ZfRENURUxFTSldLCBtbTEKKwltb3ZxCU1NV09SRCBbTU1CTE9DSyg2LDAsZWR4LFNJWkVPRl9EQ1RFTEVNKV0sIG1tNQorCW1vdnEJTU1XT1JEIFtNTUJMT0NLKDAsMCxlZHgsU0laRU9GX0RDVEVMRU0pXSwgbW03CisJbW92cQlNTVdPUkQgW01NQkxPQ0soMiwwLGVkeCxTSVpFT0ZfRENURUxFTSldLCBtbTQKKworCTsgLS0gT2RkIHBhcnQKKworCW1vdnEJbW02LCBNTVdPUkQgW3drKDApXQk7IG1tNj10bXA2CisJbW92cQltbTAsIE1NV09SRCBbd2soMSldCTsgbW0wPXRtcDcKKworCXBhZGR3CW1tMixtbTMJCQk7IG1tMj10bXAxMAorCXBhZGR3CW1tMyxtbTYJCQk7IG1tMz10bXAxMQorCXBhZGR3CW1tNixtbTAJCQk7IG1tNj10bXAxMiwgbW0wPXRtcDcKKworCXBzbGx3CW1tMixQUkVfTVVMVElQTFlfU0NBTEVfQklUUworCXBzbGx3CW1tNixQUkVfTVVMVElQTFlfU0NBTEVfQklUUworCisJcHNsbHcJbW0zLFBSRV9NVUxUSVBMWV9TQ0FMRV9CSVRTCisJcG11bGh3CW1tMyxbR09UT0ZGKGVieCxQV19GMDcwNyldIDsgbW0zPXozCisKKwltb3ZxCW1tMSxtbTIJCQk7IG1tMT10bXAxMAorCXBzdWJ3CW1tMixtbTYKKwlwbXVsaHcJbW0yLFtHT1RPRkYoZWJ4LFBXX0YwMzgyKV0gOyBtbTI9ejUKKwlwbXVsaHcJbW0xLFtHT1RPRkYoZWJ4LFBXX0YwNTQxKV0gOyBtbTE9TVVMVElQTFkodG1wMTAsRklYXzBfNTQxMTk2MTApCisJcG11bGh3CW1tNixbR09UT0ZGKGVieCxQV19GMTMwNildIDsgbW02PU1VTFRJUExZKHRtcDEyLEZJWF8xXzMwNjU2Mjk2KQorCXBhZGR3CW1tMSxtbTIJCQk7IG1tMT16MgorCXBhZGR3CW1tNixtbTIJCQk7IG1tNj16NAorCisJbW92cQltbTUsbW0wCisJcHN1YncJbW0wLG1tMwkJCTsgbW0wPXoxMworCXBhZGR3CW1tNSxtbTMJCQk7IG1tNT16MTEKKworCW1vdnEJbW03LG1tMAorCW1vdnEJbW00LG1tNQorCXBzdWJ3CW1tMCxtbTEJCQk7IG1tMD1kYXRhMworCXBzdWJ3CW1tNSxtbTYJCQk7IG1tNT1kYXRhNworCXBhZGR3CW1tNyxtbTEJCQk7IG1tNz1kYXRhNQorCXBhZGR3CW1tNCxtbTYJCQk7IG1tND1kYXRhMQorCisJbW92cQlNTVdPUkQgW01NQkxPQ0soMywwLGVkeCxTSVpFT0ZfRENURUxFTSldLCBtbTAKKwltb3ZxCU1NV09SRCBbTU1CTE9DSyg3LDAsZWR4LFNJWkVPRl9EQ1RFTEVNKV0sIG1tNQorCW1vdnEJTU1XT1JEIFtNTUJMT0NLKDUsMCxlZHgsU0laRU9GX0RDVEVMRU0pXSwgbW03CisJbW92cQlNTVdPUkQgW01NQkxPQ0soMSwwLGVkeCxTSVpFT0ZfRENURUxFTSldLCBtbTQKKworCWFkZAllZHgsIGJ5dGUgNCpTSVpFT0ZfRENURUxFTQorCWRlYwllY3gKKwlqbnoJbmVhciAuY29sdW1ubG9vcAorCisJZW1tcwkJOyBlbXB0eSBNTVggc3RhdGUKKworOwlwb3AJZWRpCQk7IHVudXNlZAorOwlwb3AJZXNpCQk7IHVudXNlZAorOwlwb3AJZWR4CQk7IG5lZWQgbm90IGJlIHByZXNlcnZlZAorOwlwb3AJZWN4CQk7IG5lZWQgbm90IGJlIHByZXNlcnZlZAorCXBvcHBpYwllYngKKwltb3YJZXNwLGVicAkJOyBlc3AgPC0gYWxpZ25lZCBlYnAKKwlwb3AJZXNwCQk7IGVzcCA8LSBvcmlnaW5hbCBlYnAKKwlwb3AJZWJwCisJcmV0CisKKzsgRm9yIHNvbWUgcmVhc29uLCB0aGUgT1MgWCBsaW5rZXIgZG9lcyBub3QgaG9ub3IgdGhlIHJlcXVlc3QgdG8gYWxpZ24gdGhlCis7IHNlZ21lbnQgdW5sZXNzIHdlIGRvIHRoaXMuCisJYWxpZ24JMTYKZGlmZiAtLWdpdCBhL3NpbWQvamZtbXhpbnQuYXNtIGIvc2ltZC9qZm1teGludC5hc20KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTdlNzNmNwotLS0gL2Rldi9udWxsCisrKyBiL3NpbWQvamZtbXhpbnQuYXNtCkBAIC0wLDAgKzEsNjIyIEBACis7Cis7IGpmbW14aW50LmFzbSAtIGFjY3VyYXRlIGludGVnZXIgRkRDVCAoTU1YKQorOworOyBDb3B5cmlnaHQgMjAwOSBQaWVycmUgT3NzbWFuIDxvc3NtYW5AY2VuZGlvLnNlPiBmb3IgQ2VuZGlvIEFCCis7Cis7IEJhc2VkIG9uCis7IHg4NiBTSU1EIGV4dGVuc2lvbiBmb3IgSUpHIEpQRUcgbGlicmFyeQorOyBDb3B5cmlnaHQgKEMpIDE5OTktMjAwNiwgTUlZQVNBS0EgTWFzYXJ1LgorOyBGb3IgY29uZGl0aW9ucyBvZiBkaXN0cmlidXRpb24gYW5kIHVzZSwgc2VlIGNvcHlyaWdodCBub3RpY2UgaW4ganNpbWRleHQuaW5jCis7Cis7IFRoaXMgZmlsZSBzaG91bGQgYmUgYXNzZW1ibGVkIHdpdGggTkFTTSAoTmV0d2lkZSBBc3NlbWJsZXIpLAorOyBjYW4gKm5vdCogYmUgYXNzZW1ibGVkIHdpdGggTWljcm9zb2Z0J3MgTUFTTSBvciBhbnkgY29tcGF0aWJsZQorOyBhc3NlbWJsZXIgKGluY2x1ZGluZyBCb3JsYW5kJ3MgVHVyYm8gQXNzZW1ibGVyKS4KKzsgTkFTTSBpcyBhdmFpbGFibGUgZnJvbSBodHRwOi8vbmFzbS5zb3VyY2Vmb3JnZS5uZXQvIG9yCis7IGh0dHA6Ly9zb3VyY2Vmb3JnZS5uZXQvcHJvamVjdC9zaG93ZmlsZXMucGhwP2dyb3VwX2lkPTYyMDgKKzsKKzsgVGhpcyBmaWxlIGNvbnRhaW5zIGEgc2xvdy1idXQtYWNjdXJhdGUgaW50ZWdlciBpbXBsZW1lbnRhdGlvbiBvZiB0aGUKKzsgZm9yd2FyZCBEQ1QgKERpc2NyZXRlIENvc2luZSBUcmFuc2Zvcm0pLiBUaGUgZm9sbG93aW5nIGNvZGUgaXMgYmFzZWQKKzsgZGlyZWN0bHkgb24gdGhlIElKRydzIG9yaWdpbmFsIGpmZGN0aW50LmM7IHNlZSB0aGUgamZkY3RpbnQuYyBmb3IKKzsgbW9yZSBkZXRhaWxzLgorOworOyBbVEFCOF0KKworJWluY2x1ZGUgImpzaW1kZXh0LmluYyIKKyVpbmNsdWRlICJqZGN0LmluYyIKKworOyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCislZGVmaW5lIENPTlNUX0JJVFMJMTMKKyVkZWZpbmUgUEFTUzFfQklUUwkyCisKKyVkZWZpbmUgREVTQ0FMRV9QMQkoQ09OU1RfQklUUy1QQVNTMV9CSVRTKQorJWRlZmluZSBERVNDQUxFX1AyCShDT05TVF9CSVRTK1BBU1MxX0JJVFMpCisKKyVpZiBDT05TVF9CSVRTID09IDEzCitGXzBfMjk4CWVxdQkgMjQ0NgkJOyBGSVgoMC4yOTg2MzEzMzYpCitGXzBfMzkwCWVxdQkgMzE5NgkJOyBGSVgoMC4zOTAxODA2NDQpCitGXzBfNTQxCWVxdQkgNDQzMwkJOyBGSVgoMC41NDExOTYxMDApCitGXzBfNzY1CWVxdQkgNjI3MAkJOyBGSVgoMC43NjUzNjY4NjUpCitGXzBfODk5CWVxdQkgNzM3MwkJOyBGSVgoMC44OTk5NzYyMjMpCitGXzFfMTc1CWVxdQkgOTYzMwkJOyBGSVgoMS4xNzU4NzU2MDIpCitGXzFfNTAxCWVxdQkxMjI5OQkJOyBGSVgoMS41MDEzMjExMTApCitGXzFfODQ3CWVxdQkxNTEzNwkJOyBGSVgoMS44NDc3NTkwNjUpCitGXzFfOTYxCWVxdQkxNjA2OQkJOyBGSVgoMS45NjE1NzA1NjApCitGXzJfMDUzCWVxdQkxNjgxOQkJOyBGSVgoMi4wNTMxMTk4NjkpCitGXzJfNTYyCWVxdQkyMDk5NQkJOyBGSVgoMi41NjI5MTU0NDcpCitGXzNfMDcyCWVxdQkyNTE3MgkJOyBGSVgoMy4wNzI3MTEwMjYpCislZWxzZQorOyBOQVNNIGNhbm5vdCBkbyBjb21waWxlLXRpbWUgYXJpdGhtZXRpYyBvbiBmbG9hdGluZy1wb2ludCBjb25zdGFudHMuCislZGVmaW5lIERFU0NBTEUoeCxuKSAgKCgoeCkrKDE8PCgobiktMSkpKT4+KG4pKQorRl8wXzI5OAllcXUJREVTQ0FMRSggMzIwNjUyOTU1LDMwLUNPTlNUX0JJVFMpCTsgRklYKDAuMjk4NjMxMzM2KQorRl8wXzM5MAllcXUJREVTQ0FMRSggNDE4OTUzMjc2LDMwLUNPTlNUX0JJVFMpCTsgRklYKDAuMzkwMTgwNjQ0KQorRl8wXzU0MQllcXUJREVTQ0FMRSggNTgxMTA0ODg3LDMwLUNPTlNUX0JJVFMpCTsgRklYKDAuNTQxMTk2MTAwKQorRl8wXzc2NQllcXUJREVTQ0FMRSggODIxODA2NDEzLDMwLUNPTlNUX0JJVFMpCTsgRklYKDAuNzY1MzY2ODY1KQorRl8wXzg5OQllcXUJREVTQ0FMRSggOTY2MzQyMTExLDMwLUNPTlNUX0JJVFMpCTsgRklYKDAuODk5OTc2MjIzKQorRl8xXzE3NQllcXUJREVTQ0FMRSgxMjYyNTg2ODEzLDMwLUNPTlNUX0JJVFMpCTsgRklYKDEuMTc1ODc1NjAyKQorRl8xXzUwMQllcXUJREVTQ0FMRSgxNjEyMDMxMjY3LDMwLUNPTlNUX0JJVFMpCTsgRklYKDEuNTAxMzIxMTEwKQorRl8xXzg0NwllcXUJREVTQ0FMRSgxOTg0MDE2MTg4LDMwLUNPTlNUX0JJVFMpCTsgRklYKDEuODQ3NzU5MDY1KQorRl8xXzk2MQllcXUJREVTQ0FMRSgyMTA2MjIwMzUwLDMwLUNPTlNUX0JJVFMpCTsgRklYKDEuOTYxNTcwNTYwKQorRl8yXzA1MwllcXUJREVTQ0FMRSgyMjA0NTIwNjczLDMwLUNPTlNUX0JJVFMpCTsgRklYKDIuMDUzMTE5ODY5KQorRl8yXzU2MgllcXUJREVTQ0FMRSgyNzUxOTA5NTA2LDMwLUNPTlNUX0JJVFMpCTsgRklYKDIuNTYyOTE1NDQ3KQorRl8zXzA3MgllcXUJREVTQ0FMRSgzMjk5Mjk4MzQxLDMwLUNPTlNUX0JJVFMpCTsgRklYKDMuMDcyNzExMDI2KQorJWVuZGlmCisKKzsgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKwlTRUNUSU9OCVNFR19DT05TVAorCisJYWxpZ256CTE2CisJZ2xvYmFsCUVYVE4oamNvbnN0X2ZkY3RfaXNsb3dfbW14KQorCitFWFROKGpjb25zdF9mZGN0X2lzbG93X21teCk6CisKK1BXX0YxMzBfRjA1NAl0aW1lcyAyIGR3ICAoRl8wXzU0MStGXzBfNzY1KSwgRl8wXzU0MQorUFdfRjA1NF9NRjEzMAl0aW1lcyAyIGR3ICBGXzBfNTQxLCAoRl8wXzU0MS1GXzFfODQ3KQorUFdfTUYwNzhfRjExNwl0aW1lcyAyIGR3ICAoRl8xXzE3NS1GXzFfOTYxKSwgRl8xXzE3NQorUFdfRjExN19GMDc4CXRpbWVzIDIgZHcgIEZfMV8xNzUsIChGXzFfMTc1LUZfMF8zOTApCitQV19NRjA2MF9NRjA4OQl0aW1lcyAyIGR3ICAoRl8wXzI5OC1GXzBfODk5KSwtRl8wXzg5OQorUFdfTUYwODlfRjA2MAl0aW1lcyAyIGR3IC1GXzBfODk5LCAoRl8xXzUwMS1GXzBfODk5KQorUFdfTUYwNTBfTUYyNTYJdGltZXMgMiBkdyAgKEZfMl8wNTMtRl8yXzU2MiksLUZfMl81NjIKK1BXX01GMjU2X0YwNTAJdGltZXMgMiBkdyAtRl8yXzU2MiwgKEZfM18wNzItRl8yXzU2MikKK1BEX0RFU0NBTEVfUDEJdGltZXMgMiBkZCAgMSA8PCAoREVTQ0FMRV9QMS0xKQorUERfREVTQ0FMRV9QMgl0aW1lcyAyIGRkICAxIDw8IChERVNDQUxFX1AyLTEpCitQV19ERVNDQUxFX1AyWAl0aW1lcyA0IGR3ICAxIDw8IChQQVNTMV9CSVRTLTEpCisKKwlhbGlnbnoJMTYKKworOyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCVNFQ1RJT04JU0VHX1RFWFQKKwlCSVRTCTMyCis7Cis7IFBlcmZvcm0gdGhlIGZvcndhcmQgRENUIG9uIG9uZSBibG9jayBvZiBzYW1wbGVzLgorOworOyBHTE9CQUwodm9pZCkKKzsganNpbWRfZmRjdF9pc2xvd19tbXggKERDVEVMRU0gKiBkYXRhKQorOworCislZGVmaW5lIGRhdGEoYikJCShiKSs4CQk7IERDVEVMRU0gKiBkYXRhCisKKyVkZWZpbmUgb3JpZ2luYWxfZWJwCWVicCswCislZGVmaW5lIHdrKGkpCQllYnAtKFdLX05VTS0oaSkpKlNJWkVPRl9NTVdPUkQJOyBtbXdvcmQgd2tbV0tfTlVNXQorJWRlZmluZSBXS19OVU0JCTIKKworCWFsaWduCTE2CisJZ2xvYmFsCUVYVE4oanNpbWRfZmRjdF9pc2xvd19tbXgpCisKK0VYVE4oanNpbWRfZmRjdF9pc2xvd19tbXgpOgorCXB1c2gJZWJwCisJbW92CWVheCxlc3AJCQkJOyBlYXggPSBvcmlnaW5hbCBlYnAKKwlzdWIJZXNwLCBieXRlIDQKKwlhbmQJZXNwLCBieXRlICgtU0laRU9GX01NV09SRCkJOyBhbGlnbiB0byA2NCBiaXRzCisJbW92CVtlc3BdLGVheAorCW1vdgllYnAsZXNwCQkJCTsgZWJwID0gYWxpZ25lZCBlYnAKKwlsZWEJZXNwLCBbd2soMCldCisJcHVzaHBpYwllYngKKzsJcHVzaAllY3gJCTsgbmVlZCBub3QgYmUgcHJlc2VydmVkCis7CXB1c2gJZWR4CQk7IG5lZWQgbm90IGJlIHByZXNlcnZlZAorOwlwdXNoCWVzaQkJOyB1bnVzZWQKKzsJcHVzaAllZGkJCTsgdW51c2VkCisKKwlnZXRfR09UCWVieAkJOyBnZXQgR09UIGFkZHJlc3MKKworCTsgLS0tLSBQYXNzIDE6IHByb2Nlc3Mgcm93cy4KKworCW1vdgllZHgsIFBPSU5URVIgW2RhdGEoZWF4KV0JOyAoRENURUxFTSAqKQorCW1vdgllY3gsIERDVFNJWkUvNAorCWFsaWdueAkxNiw3Cisucm93bG9vcDoKKworCW1vdnEJbW0wLCBNTVdPUkQgW01NQkxPQ0soMiwwLGVkeCxTSVpFT0ZfRENURUxFTSldCisJbW92cQltbTEsIE1NV09SRCBbTU1CTE9DSygzLDAsZWR4LFNJWkVPRl9EQ1RFTEVNKV0KKwltb3ZxCW1tMiwgTU1XT1JEIFtNTUJMT0NLKDIsMSxlZHgsU0laRU9GX0RDVEVMRU0pXQorCW1vdnEJbW0zLCBNTVdPUkQgW01NQkxPQ0soMywxLGVkeCxTSVpFT0ZfRENURUxFTSldCisKKwk7IG1tMD0oMjAgMjEgMjIgMjMpLCBtbTI9KDI0IDI1IDI2IDI3KQorCTsgbW0xPSgzMCAzMSAzMiAzMyksIG1tMz0oMzQgMzUgMzYgMzcpCisKKwltb3ZxICAgICAgbW00LG1tMAkJOyB0cmFuc3Bvc2UgY29lZmZpY2llbnRzKHBoYXNlIDEpCisJcHVucGNrbHdkIG1tMCxtbTEJCTsgbW0wPSgyMCAzMCAyMSAzMSkKKwlwdW5wY2tod2QgbW00LG1tMQkJOyBtbTQ9KDIyIDMyIDIzIDMzKQorCW1vdnEgICAgICBtbTUsbW0yCQk7IHRyYW5zcG9zZSBjb2VmZmljaWVudHMocGhhc2UgMSkKKwlwdW5wY2tsd2QgbW0yLG1tMwkJOyBtbTI9KDI0IDM0IDI1IDM1KQorCXB1bnBja2h3ZCBtbTUsbW0zCQk7IG1tNT0oMjYgMzYgMjcgMzcpCisKKwltb3ZxCW1tNiwgTU1XT1JEIFtNTUJMT0NLKDAsMCxlZHgsU0laRU9GX0RDVEVMRU0pXQorCW1vdnEJbW03LCBNTVdPUkQgW01NQkxPQ0soMSwwLGVkeCxTSVpFT0ZfRENURUxFTSldCisJbW92cQltbTEsIE1NV09SRCBbTU1CTE9DSygwLDEsZWR4LFNJWkVPRl9EQ1RFTEVNKV0KKwltb3ZxCW1tMywgTU1XT1JEIFtNTUJMT0NLKDEsMSxlZHgsU0laRU9GX0RDVEVMRU0pXQorCisJOyBtbTY9KDAwIDAxIDAyIDAzKSwgbW0xPSgwNCAwNSAwNiAwNykKKwk7IG1tNz0oMTAgMTEgMTIgMTMpLCBtbTM9KDE0IDE1IDE2IDE3KQorCisJbW92cQlNTVdPUkQgW3drKDApXSwgbW00CTsgd2soMCk9KDIyIDMyIDIzIDMzKQorCW1vdnEJTU1XT1JEIFt3aygxKV0sIG1tMgk7IHdrKDEpPSgyNCAzNCAyNSAzNSkKKworCW1vdnEgICAgICBtbTQsbW02CQk7IHRyYW5zcG9zZSBjb2VmZmljaWVudHMocGhhc2UgMSkKKwlwdW5wY2tsd2QgbW02LG1tNwkJOyBtbTY9KDAwIDEwIDAxIDExKQorCXB1bnBja2h3ZCBtbTQsbW03CQk7IG1tND0oMDIgMTIgMDMgMTMpCisJbW92cSAgICAgIG1tMixtbTEJCTsgdHJhbnNwb3NlIGNvZWZmaWNpZW50cyhwaGFzZSAxKQorCXB1bnBja2x3ZCBtbTEsbW0zCQk7IG1tMT0oMDQgMTQgMDUgMTUpCisJcHVucGNraHdkIG1tMixtbTMJCTsgbW0yPSgwNiAxNiAwNyAxNykKKworCW1vdnEgICAgICBtbTcsbW02CQk7IHRyYW5zcG9zZSBjb2VmZmljaWVudHMocGhhc2UgMikKKwlwdW5wY2tsZHEgbW02LG1tMAkJOyBtbTY9KDAwIDEwIDIwIDMwKT1kYXRhMAorCXB1bnBja2hkcSBtbTcsbW0wCQk7IG1tNz0oMDEgMTEgMjEgMzEpPWRhdGExCisJbW92cSAgICAgIG1tMyxtbTIJCTsgdHJhbnNwb3NlIGNvZWZmaWNpZW50cyhwaGFzZSAyKQorCXB1bnBja2xkcSBtbTIsbW01CQk7IG1tMj0oMDYgMTYgMjYgMzYpPWRhdGE2CisJcHVucGNraGRxIG1tMyxtbTUJCTsgbW0zPSgwNyAxNyAyNyAzNyk9ZGF0YTcKKworCW1vdnEJbW0wLG1tNworCW1vdnEJbW01LG1tNgorCXBzdWJ3CW1tNyxtbTIJCQk7IG1tNz1kYXRhMS1kYXRhNj10bXA2CisJcHN1YncJbW02LG1tMwkJCTsgbW02PWRhdGEwLWRhdGE3PXRtcDcKKwlwYWRkdwltbTAsbW0yCQkJOyBtbTA9ZGF0YTErZGF0YTY9dG1wMQorCXBhZGR3CW1tNSxtbTMJCQk7IG1tNT1kYXRhMCtkYXRhNz10bXAwCisKKwltb3ZxCW1tMiwgTU1XT1JEIFt3aygwKV0JOyBtbTI9KDIyIDMyIDIzIDMzKQorCW1vdnEJbW0zLCBNTVdPUkQgW3drKDEpXQk7IG1tMz0oMjQgMzQgMjUgMzUpCisJbW92cQlNTVdPUkQgW3drKDApXSwgbW03CTsgd2soMCk9dG1wNgorCW1vdnEJTU1XT1JEIFt3aygxKV0sIG1tNgk7IHdrKDEpPXRtcDcKKworCW1vdnEgICAgICBtbTcsbW00CQk7IHRyYW5zcG9zZSBjb2VmZmljaWVudHMocGhhc2UgMikKKwlwdW5wY2tsZHEgbW00LG1tMgkJOyBtbTQ9KDAyIDEyIDIyIDMyKT1kYXRhMgorCXB1bnBja2hkcSBtbTcsbW0yCQk7IG1tNz0oMDMgMTMgMjMgMzMpPWRhdGEzCisJbW92cSAgICAgIG1tNixtbTEJCTsgdHJhbnNwb3NlIGNvZWZmaWNpZW50cyhwaGFzZSAyKQorCXB1bnBja2xkcSBtbTEsbW0zCQk7IG1tMT0oMDQgMTQgMjQgMzQpPWRhdGE0CisJcHVucGNraGRxIG1tNixtbTMJCTsgbW02PSgwNSAxNSAyNSAzNSk9ZGF0YTUKKworCW1vdnEJbW0yLG1tNworCW1vdnEJbW0zLG1tNAorCXBhZGR3CW1tNyxtbTEJCQk7IG1tNz1kYXRhMytkYXRhND10bXAzCisJcGFkZHcJbW00LG1tNgkJCTsgbW00PWRhdGEyK2RhdGE1PXRtcDIKKwlwc3VidwltbTIsbW0xCQkJOyBtbTI9ZGF0YTMtZGF0YTQ9dG1wNAorCXBzdWJ3CW1tMyxtbTYJCQk7IG1tMz1kYXRhMi1kYXRhNT10bXA1CisKKwk7IC0tIEV2ZW4gcGFydAorCisJbW92cQltbTEsbW01CisJbW92cQltbTYsbW0wCisJcGFkZHcJbW01LG1tNwkJCTsgbW01PXRtcDEwCisJcGFkZHcJbW0wLG1tNAkJCTsgbW0wPXRtcDExCisJcHN1YncJbW0xLG1tNwkJCTsgbW0xPXRtcDEzCisJcHN1YncJbW02LG1tNAkJCTsgbW02PXRtcDEyCisKKwltb3ZxCW1tNyxtbTUKKwlwYWRkdwltbTUsbW0wCQkJOyBtbTU9dG1wMTArdG1wMTEKKwlwc3VidwltbTcsbW0wCQkJOyBtbTc9dG1wMTAtdG1wMTEKKworCXBzbGx3CW1tNSxQQVNTMV9CSVRTCQk7IG1tNT1kYXRhMAorCXBzbGx3CW1tNyxQQVNTMV9CSVRTCQk7IG1tNz1kYXRhNAorCisJbW92cQlNTVdPUkQgW01NQkxPQ0soMCwwLGVkeCxTSVpFT0ZfRENURUxFTSldLCBtbTUKKwltb3ZxCU1NV09SRCBbTU1CTE9DSygwLDEsZWR4LFNJWkVPRl9EQ1RFTEVNKV0sIG1tNworCisJOyAoT3JpZ2luYWwpCisJOyB6MSA9ICh0bXAxMiArIHRtcDEzKSAqIDAuNTQxMTk2MTAwOworCTsgZGF0YTIgPSB6MSArIHRtcDEzICogMC43NjUzNjY4NjU7CisJOyBkYXRhNiA9IHoxICsgdG1wMTIgKiAtMS44NDc3NTkwNjU7CisJOworCTsgKFRoaXMgaW1wbGVtZW50YXRpb24pCisJOyBkYXRhMiA9IHRtcDEzICogKDAuNTQxMTk2MTAwICsgMC43NjUzNjY4NjUpICsgdG1wMTIgKiAwLjU0MTE5NjEwMDsKKwk7IGRhdGE2ID0gdG1wMTMgKiAwLjU0MTE5NjEwMCArIHRtcDEyICogKDAuNTQxMTk2MTAwIC0gMS44NDc3NTkwNjUpOworCisJbW92cSAgICAgIG1tNCxtbTEJCTsgbW0xPXRtcDEzCisJbW92cSAgICAgIG1tMCxtbTEKKwlwdW5wY2tsd2QgbW00LG1tNgkJOyBtbTY9dG1wMTIKKwlwdW5wY2tod2QgbW0wLG1tNgorCW1vdnEgICAgICBtbTEsbW00CisJbW92cSAgICAgIG1tNixtbTAKKwlwbWFkZHdkICAgbW00LFtHT1RPRkYoZWJ4LFBXX0YxMzBfRjA1NCldCTsgbW00PWRhdGEyTAorCXBtYWRkd2QgICBtbTAsW0dPVE9GRihlYngsUFdfRjEzMF9GMDU0KV0JOyBtbTA9ZGF0YTJICisJcG1hZGR3ZCAgIG1tMSxbR09UT0ZGKGVieCxQV19GMDU0X01GMTMwKV0JOyBtbTE9ZGF0YTZMCisJcG1hZGR3ZCAgIG1tNixbR09UT0ZGKGVieCxQV19GMDU0X01GMTMwKV0JOyBtbTY9ZGF0YTZICisKKwlwYWRkZAltbTQsW0dPVE9GRihlYngsUERfREVTQ0FMRV9QMSldCisJcGFkZGQJbW0wLFtHT1RPRkYoZWJ4LFBEX0RFU0NBTEVfUDEpXQorCXBzcmFkCW1tNCxERVNDQUxFX1AxCisJcHNyYWQJbW0wLERFU0NBTEVfUDEKKwlwYWRkZAltbTEsW0dPVE9GRihlYngsUERfREVTQ0FMRV9QMSldCisJcGFkZGQJbW02LFtHT1RPRkYoZWJ4LFBEX0RFU0NBTEVfUDEpXQorCXBzcmFkCW1tMSxERVNDQUxFX1AxCisJcHNyYWQJbW02LERFU0NBTEVfUDEKKworCXBhY2tzc2R3ICBtbTQsbW0wCQk7IG1tND1kYXRhMgorCXBhY2tzc2R3ICBtbTEsbW02CQk7IG1tMT1kYXRhNgorCisJbW92cQlNTVdPUkQgW01NQkxPQ0soMiwwLGVkeCxTSVpFT0ZfRENURUxFTSldLCBtbTQKKwltb3ZxCU1NV09SRCBbTU1CTE9DSygyLDEsZWR4LFNJWkVPRl9EQ1RFTEVNKV0sIG1tMQorCisJOyAtLSBPZGQgcGFydAorCisJbW92cQltbTUsIE1NV09SRCBbd2soMCldCTsgbW01PXRtcDYKKwltb3ZxCW1tNywgTU1XT1JEIFt3aygxKV0JOyBtbTc9dG1wNworCisJbW92cQltbTAsbW0yCQkJOyBtbTI9dG1wNAorCW1vdnEJbW02LG1tMwkJCTsgbW0zPXRtcDUKKwlwYWRkdwltbTAsbW01CQkJOyBtbTA9ejMKKwlwYWRkdwltbTYsbW03CQkJOyBtbTY9ejQKKworCTsgKE9yaWdpbmFsKQorCTsgejUgPSAoejMgKyB6NCkgKiAxLjE3NTg3NTYwMjsKKwk7IHozID0gejMgKiAtMS45NjE1NzA1NjA7ICB6NCA9IHo0ICogLTAuMzkwMTgwNjQ0OworCTsgejMgKz0gejU7ICB6NCArPSB6NTsKKwk7CisJOyAoVGhpcyBpbXBsZW1lbnRhdGlvbikKKwk7IHozID0gejMgKiAoMS4xNzU4NzU2MDIgLSAxLjk2MTU3MDU2MCkgKyB6NCAqIDEuMTc1ODc1NjAyOworCTsgejQgPSB6MyAqIDEuMTc1ODc1NjAyICsgejQgKiAoMS4xNzU4NzU2MDIgLSAwLjM5MDE4MDY0NCk7CisKKwltb3ZxICAgICAgbW00LG1tMAorCW1vdnEgICAgICBtbTEsbW0wCisJcHVucGNrbHdkIG1tNCxtbTYKKwlwdW5wY2tod2QgbW0xLG1tNgorCW1vdnEgICAgICBtbTAsbW00CisJbW92cSAgICAgIG1tNixtbTEKKwlwbWFkZHdkICAgbW00LFtHT1RPRkYoZWJ4LFBXX01GMDc4X0YxMTcpXQk7IG1tND16M0wKKwlwbWFkZHdkICAgbW0xLFtHT1RPRkYoZWJ4LFBXX01GMDc4X0YxMTcpXQk7IG1tMT16M0gKKwlwbWFkZHdkICAgbW0wLFtHT1RPRkYoZWJ4LFBXX0YxMTdfRjA3OCldCTsgbW0wPXo0TAorCXBtYWRkd2QgICBtbTYsW0dPVE9GRihlYngsUFdfRjExN19GMDc4KV0JOyBtbTY9ejRICisKKwltb3ZxCU1NV09SRCBbd2soMCldLCBtbTQJOyB3aygwKT16M0wKKwltb3ZxCU1NV09SRCBbd2soMSldLCBtbTEJOyB3aygxKT16M0gKKworCTsgKE9yaWdpbmFsKQorCTsgejEgPSB0bXA0ICsgdG1wNzsgIHoyID0gdG1wNSArIHRtcDY7CisJOyB0bXA0ID0gdG1wNCAqIDAuMjk4NjMxMzM2OyAgdG1wNSA9IHRtcDUgKiAyLjA1MzExOTg2OTsKKwk7IHRtcDYgPSB0bXA2ICogMy4wNzI3MTEwMjY7ICB0bXA3ID0gdG1wNyAqIDEuNTAxMzIxMTEwOworCTsgejEgPSB6MSAqIC0wLjg5OTk3NjIyMzsgIHoyID0gejIgKiAtMi41NjI5MTU0NDc7CisJOyBkYXRhNyA9IHRtcDQgKyB6MSArIHozOyAgZGF0YTUgPSB0bXA1ICsgejIgKyB6NDsKKwk7IGRhdGEzID0gdG1wNiArIHoyICsgejM7ICBkYXRhMSA9IHRtcDcgKyB6MSArIHo0OworCTsKKwk7IChUaGlzIGltcGxlbWVudGF0aW9uKQorCTsgdG1wNCA9IHRtcDQgKiAoMC4yOTg2MzEzMzYgLSAwLjg5OTk3NjIyMykgKyB0bXA3ICogLTAuODk5OTc2MjIzOworCTsgdG1wNSA9IHRtcDUgKiAoMi4wNTMxMTk4NjkgLSAyLjU2MjkxNTQ0NykgKyB0bXA2ICogLTIuNTYyOTE1NDQ3OworCTsgdG1wNiA9IHRtcDUgKiAtMi41NjI5MTU0NDcgKyB0bXA2ICogKDMuMDcyNzExMDI2IC0gMi41NjI5MTU0NDcpOworCTsgdG1wNyA9IHRtcDQgKiAtMC44OTk5NzYyMjMgKyB0bXA3ICogKDEuNTAxMzIxMTEwIC0gMC44OTk5NzYyMjMpOworCTsgZGF0YTcgPSB0bXA0ICsgejM7ICBkYXRhNSA9IHRtcDUgKyB6NDsKKwk7IGRhdGEzID0gdG1wNiArIHozOyAgZGF0YTEgPSB0bXA3ICsgejQ7CisKKwltb3ZxICAgICAgbW00LG1tMgorCW1vdnEgICAgICBtbTEsbW0yCisJcHVucGNrbHdkIG1tNCxtbTcKKwlwdW5wY2tod2QgbW0xLG1tNworCW1vdnEgICAgICBtbTIsbW00CisJbW92cSAgICAgIG1tNyxtbTEKKwlwbWFkZHdkICAgbW00LFtHT1RPRkYoZWJ4LFBXX01GMDYwX01GMDg5KV0JOyBtbTQ9dG1wNEwKKwlwbWFkZHdkICAgbW0xLFtHT1RPRkYoZWJ4LFBXX01GMDYwX01GMDg5KV0JOyBtbTE9dG1wNEgKKwlwbWFkZHdkICAgbW0yLFtHT1RPRkYoZWJ4LFBXX01GMDg5X0YwNjApXQk7IG1tMj10bXA3TAorCXBtYWRkd2QgICBtbTcsW0dPVE9GRihlYngsUFdfTUYwODlfRjA2MCldCTsgbW03PXRtcDdICisKKwlwYWRkZAltbTQsIE1NV09SRCBbd2soMCldCTsgbW00PWRhdGE3TAorCXBhZGRkCW1tMSwgTU1XT1JEIFt3aygxKV0JOyBtbTE9ZGF0YTdICisJcGFkZGQJbW0yLG1tMAkJCTsgbW0yPWRhdGExTAorCXBhZGRkCW1tNyxtbTYJCQk7IG1tNz1kYXRhMUgKKworCXBhZGRkCW1tNCxbR09UT0ZGKGVieCxQRF9ERVNDQUxFX1AxKV0KKwlwYWRkZAltbTEsW0dPVE9GRihlYngsUERfREVTQ0FMRV9QMSldCisJcHNyYWQJbW00LERFU0NBTEVfUDEKKwlwc3JhZAltbTEsREVTQ0FMRV9QMQorCXBhZGRkCW1tMixbR09UT0ZGKGVieCxQRF9ERVNDQUxFX1AxKV0KKwlwYWRkZAltbTcsW0dPVE9GRihlYngsUERfREVTQ0FMRV9QMSldCisJcHNyYWQJbW0yLERFU0NBTEVfUDEKKwlwc3JhZAltbTcsREVTQ0FMRV9QMQorCisJcGFja3NzZHcgIG1tNCxtbTEJCTsgbW00PWRhdGE3CisJcGFja3NzZHcgIG1tMixtbTcJCTsgbW0yPWRhdGExCisKKwltb3ZxCU1NV09SRCBbTU1CTE9DSygzLDEsZWR4LFNJWkVPRl9EQ1RFTEVNKV0sIG1tNAorCW1vdnEJTU1XT1JEIFtNTUJMT0NLKDEsMCxlZHgsU0laRU9GX0RDVEVMRU0pXSwgbW0yCisKKwltb3ZxICAgICAgbW0xLG1tMworCW1vdnEgICAgICBtbTcsbW0zCisJcHVucGNrbHdkIG1tMSxtbTUKKwlwdW5wY2tod2QgbW03LG1tNQorCW1vdnEgICAgICBtbTMsbW0xCisJbW92cSAgICAgIG1tNSxtbTcKKwlwbWFkZHdkICAgbW0xLFtHT1RPRkYoZWJ4LFBXX01GMDUwX01GMjU2KV0JOyBtbTE9dG1wNUwKKwlwbWFkZHdkICAgbW03LFtHT1RPRkYoZWJ4LFBXX01GMDUwX01GMjU2KV0JOyBtbTc9dG1wNUgKKwlwbWFkZHdkICAgbW0zLFtHT1RPRkYoZWJ4LFBXX01GMjU2X0YwNTApXQk7IG1tMz10bXA2TAorCXBtYWRkd2QgICBtbTUsW0dPVE9GRihlYngsUFdfTUYyNTZfRjA1MCldCTsgbW01PXRtcDZICisKKwlwYWRkZAltbTEsbW0wCQkJOyBtbTE9ZGF0YTVMCisJcGFkZGQJbW03LG1tNgkJCTsgbW03PWRhdGE1SAorCXBhZGRkCW1tMywgTU1XT1JEIFt3aygwKV0JOyBtbTM9ZGF0YTNMCisJcGFkZGQJbW01LCBNTVdPUkQgW3drKDEpXQk7IG1tNT1kYXRhM0gKKworCXBhZGRkCW1tMSxbR09UT0ZGKGVieCxQRF9ERVNDQUxFX1AxKV0KKwlwYWRkZAltbTcsW0dPVE9GRihlYngsUERfREVTQ0FMRV9QMSldCisJcHNyYWQJbW0xLERFU0NBTEVfUDEKKwlwc3JhZAltbTcsREVTQ0FMRV9QMQorCXBhZGRkCW1tMyxbR09UT0ZGKGVieCxQRF9ERVNDQUxFX1AxKV0KKwlwYWRkZAltbTUsW0dPVE9GRihlYngsUERfREVTQ0FMRV9QMSldCisJcHNyYWQJbW0zLERFU0NBTEVfUDEKKwlwc3JhZAltbTUsREVTQ0FMRV9QMQorCisJcGFja3NzZHcgIG1tMSxtbTcJCTsgbW0xPWRhdGE1CisJcGFja3NzZHcgIG1tMyxtbTUJCTsgbW0zPWRhdGEzCisKKwltb3ZxCU1NV09SRCBbTU1CTE9DSygxLDEsZWR4LFNJWkVPRl9EQ1RFTEVNKV0sIG1tMQorCW1vdnEJTU1XT1JEIFtNTUJMT0NLKDMsMCxlZHgsU0laRU9GX0RDVEVMRU0pXSwgbW0zCisKKwlhZGQJZWR4LCBieXRlIDQqRENUU0laRSpTSVpFT0ZfRENURUxFTQorCWRlYwllY3gKKwlqbnoJbmVhciAucm93bG9vcAorCisJOyAtLS0tIFBhc3MgMjogcHJvY2VzcyBjb2x1bW5zLgorCisJbW92CWVkeCwgUE9JTlRFUiBbZGF0YShlYXgpXQk7IChEQ1RFTEVNICopCisJbW92CWVjeCwgRENUU0laRS80CisJYWxpZ254CTE2LDcKKy5jb2x1bW5sb29wOgorCisJbW92cQltbTAsIE1NV09SRCBbTU1CTE9DSygyLDAsZWR4LFNJWkVPRl9EQ1RFTEVNKV0KKwltb3ZxCW1tMSwgTU1XT1JEIFtNTUJMT0NLKDMsMCxlZHgsU0laRU9GX0RDVEVMRU0pXQorCW1vdnEJbW0yLCBNTVdPUkQgW01NQkxPQ0soNiwwLGVkeCxTSVpFT0ZfRENURUxFTSldCisJbW92cQltbTMsIE1NV09SRCBbTU1CTE9DSyg3LDAsZWR4LFNJWkVPRl9EQ1RFTEVNKV0KKworCTsgbW0wPSgwMiAxMiAyMiAzMiksIG1tMj0oNDIgNTIgNjIgNzIpCisJOyBtbTE9KDAzIDEzIDIzIDMzKSwgbW0zPSg0MyA1MyA2MyA3MykKKworCW1vdnEgICAgICBtbTQsbW0wCQk7IHRyYW5zcG9zZSBjb2VmZmljaWVudHMocGhhc2UgMSkKKwlwdW5wY2tsd2QgbW0wLG1tMQkJOyBtbTA9KDAyIDAzIDEyIDEzKQorCXB1bnBja2h3ZCBtbTQsbW0xCQk7IG1tND0oMjIgMjMgMzIgMzMpCisJbW92cSAgICAgIG1tNSxtbTIJCTsgdHJhbnNwb3NlIGNvZWZmaWNpZW50cyhwaGFzZSAxKQorCXB1bnBja2x3ZCBtbTIsbW0zCQk7IG1tMj0oNDIgNDMgNTIgNTMpCisJcHVucGNraHdkIG1tNSxtbTMJCTsgbW01PSg2MiA2MyA3MiA3MykKKworCW1vdnEJbW02LCBNTVdPUkQgW01NQkxPQ0soMCwwLGVkeCxTSVpFT0ZfRENURUxFTSldCisJbW92cQltbTcsIE1NV09SRCBbTU1CTE9DSygxLDAsZWR4LFNJWkVPRl9EQ1RFTEVNKV0KKwltb3ZxCW1tMSwgTU1XT1JEIFtNTUJMT0NLKDQsMCxlZHgsU0laRU9GX0RDVEVMRU0pXQorCW1vdnEJbW0zLCBNTVdPUkQgW01NQkxPQ0soNSwwLGVkeCxTSVpFT0ZfRENURUxFTSldCisKKwk7IG1tNj0oMDAgMTAgMjAgMzApLCBtbTE9KDQwIDUwIDYwIDcwKQorCTsgbW03PSgwMSAxMSAyMSAzMSksIG1tMz0oNDEgNTEgNjEgNzEpCisKKwltb3ZxCU1NV09SRCBbd2soMCldLCBtbTQJOyB3aygwKT0oMjIgMjMgMzIgMzMpCisJbW92cQlNTVdPUkQgW3drKDEpXSwgbW0yCTsgd2soMSk9KDQyIDQzIDUyIDUzKQorCisJbW92cSAgICAgIG1tNCxtbTYJCTsgdHJhbnNwb3NlIGNvZWZmaWNpZW50cyhwaGFzZSAxKQorCXB1bnBja2x3ZCBtbTYsbW03CQk7IG1tNj0oMDAgMDEgMTAgMTEpCisJcHVucGNraHdkIG1tNCxtbTcJCTsgbW00PSgyMCAyMSAzMCAzMSkKKwltb3ZxICAgICAgbW0yLG1tMQkJOyB0cmFuc3Bvc2UgY29lZmZpY2llbnRzKHBoYXNlIDEpCisJcHVucGNrbHdkIG1tMSxtbTMJCTsgbW0xPSg0MCA0MSA1MCA1MSkKKwlwdW5wY2tod2QgbW0yLG1tMwkJOyBtbTI9KDYwIDYxIDcwIDcxKQorCisJbW92cSAgICAgIG1tNyxtbTYJCTsgdHJhbnNwb3NlIGNvZWZmaWNpZW50cyhwaGFzZSAyKQorCXB1bnBja2xkcSBtbTYsbW0wCQk7IG1tNj0oMDAgMDEgMDIgMDMpPWRhdGEwCisJcHVucGNraGRxIG1tNyxtbTAJCTsgbW03PSgxMCAxMSAxMiAxMyk9ZGF0YTEKKwltb3ZxICAgICAgbW0zLG1tMgkJOyB0cmFuc3Bvc2UgY29lZmZpY2llbnRzKHBoYXNlIDIpCisJcHVucGNrbGRxIG1tMixtbTUJCTsgbW0yPSg2MCA2MSA2MiA2Myk9ZGF0YTYKKwlwdW5wY2toZHEgbW0zLG1tNQkJOyBtbTM9KDcwIDcxIDcyIDczKT1kYXRhNworCisJbW92cQltbTAsbW03CisJbW92cQltbTUsbW02CisJcHN1YncJbW03LG1tMgkJCTsgbW03PWRhdGExLWRhdGE2PXRtcDYKKwlwc3VidwltbTYsbW0zCQkJOyBtbTY9ZGF0YTAtZGF0YTc9dG1wNworCXBhZGR3CW1tMCxtbTIJCQk7IG1tMD1kYXRhMStkYXRhNj10bXAxCisJcGFkZHcJbW01LG1tMwkJCTsgbW01PWRhdGEwK2RhdGE3PXRtcDAKKworCW1vdnEJbW0yLCBNTVdPUkQgW3drKDApXQk7IG1tMj0oMjIgMjMgMzIgMzMpCisJbW92cQltbTMsIE1NV09SRCBbd2soMSldCTsgbW0zPSg0MiA0MyA1MiA1MykKKwltb3ZxCU1NV09SRCBbd2soMCldLCBtbTcJOyB3aygwKT10bXA2CisJbW92cQlNTVdPUkQgW3drKDEpXSwgbW02CTsgd2soMSk9dG1wNworCisJbW92cSAgICAgIG1tNyxtbTQJCTsgdHJhbnNwb3NlIGNvZWZmaWNpZW50cyhwaGFzZSAyKQorCXB1bnBja2xkcSBtbTQsbW0yCQk7IG1tND0oMjAgMjEgMjIgMjMpPWRhdGEyCisJcHVucGNraGRxIG1tNyxtbTIJCTsgbW03PSgzMCAzMSAzMiAzMyk9ZGF0YTMKKwltb3ZxICAgICAgbW02LG1tMQkJOyB0cmFuc3Bvc2UgY29lZmZpY2llbnRzKHBoYXNlIDIpCisJcHVucGNrbGRxIG1tMSxtbTMJCTsgbW0xPSg0MCA0MSA0MiA0Myk9ZGF0YTQKKwlwdW5wY2toZHEgbW02LG1tMwkJOyBtbTY9KDUwIDUxIDUyIDUzKT1kYXRhNQorCisJbW92cQltbTIsbW03CisJbW92cQltbTMsbW00CisJcGFkZHcJbW03LG1tMQkJCTsgbW03PWRhdGEzK2RhdGE0PXRtcDMKKwlwYWRkdwltbTQsbW02CQkJOyBtbTQ9ZGF0YTIrZGF0YTU9dG1wMgorCXBzdWJ3CW1tMixtbTEJCQk7IG1tMj1kYXRhMy1kYXRhND10bXA0CisJcHN1YncJbW0zLG1tNgkJCTsgbW0zPWRhdGEyLWRhdGE1PXRtcDUKKworCTsgLS0gRXZlbiBwYXJ0CisKKwltb3ZxCW1tMSxtbTUKKwltb3ZxCW1tNixtbTAKKwlwYWRkdwltbTUsbW03CQkJOyBtbTU9dG1wMTAKKwlwYWRkdwltbTAsbW00CQkJOyBtbTA9dG1wMTEKKwlwc3VidwltbTEsbW03CQkJOyBtbTE9dG1wMTMKKwlwc3VidwltbTYsbW00CQkJOyBtbTY9dG1wMTIKKworCW1vdnEJbW03LG1tNQorCXBhZGR3CW1tNSxtbTAJCQk7IG1tNT10bXAxMCt0bXAxMQorCXBzdWJ3CW1tNyxtbTAJCQk7IG1tNz10bXAxMC10bXAxMQorCisJcGFkZHcJbW01LFtHT1RPRkYoZWJ4LFBXX0RFU0NBTEVfUDJYKV0KKwlwYWRkdwltbTcsW0dPVE9GRihlYngsUFdfREVTQ0FMRV9QMlgpXQorCXBzcmF3CW1tNSxQQVNTMV9CSVRTCQk7IG1tNT1kYXRhMAorCXBzcmF3CW1tNyxQQVNTMV9CSVRTCQk7IG1tNz1kYXRhNAorCisJbW92cQlNTVdPUkQgW01NQkxPQ0soMCwwLGVkeCxTSVpFT0ZfRENURUxFTSldLCBtbTUKKwltb3ZxCU1NV09SRCBbTU1CTE9DSyg0LDAsZWR4LFNJWkVPRl9EQ1RFTEVNKV0sIG1tNworCisJOyAoT3JpZ2luYWwpCisJOyB6MSA9ICh0bXAxMiArIHRtcDEzKSAqIDAuNTQxMTk2MTAwOworCTsgZGF0YTIgPSB6MSArIHRtcDEzICogMC43NjUzNjY4NjU7CisJOyBkYXRhNiA9IHoxICsgdG1wMTIgKiAtMS44NDc3NTkwNjU7CisJOworCTsgKFRoaXMgaW1wbGVtZW50YXRpb24pCisJOyBkYXRhMiA9IHRtcDEzICogKDAuNTQxMTk2MTAwICsgMC43NjUzNjY4NjUpICsgdG1wMTIgKiAwLjU0MTE5NjEwMDsKKwk7IGRhdGE2ID0gdG1wMTMgKiAwLjU0MTE5NjEwMCArIHRtcDEyICogKDAuNTQxMTk2MTAwIC0gMS44NDc3NTkwNjUpOworCisJbW92cSAgICAgIG1tNCxtbTEJCTsgbW0xPXRtcDEzCisJbW92cSAgICAgIG1tMCxtbTEKKwlwdW5wY2tsd2QgbW00LG1tNgkJOyBtbTY9dG1wMTIKKwlwdW5wY2tod2QgbW0wLG1tNgorCW1vdnEgICAgICBtbTEsbW00CisJbW92cSAgICAgIG1tNixtbTAKKwlwbWFkZHdkICAgbW00LFtHT1RPRkYoZWJ4LFBXX0YxMzBfRjA1NCldCTsgbW00PWRhdGEyTAorCXBtYWRkd2QgICBtbTAsW0dPVE9GRihlYngsUFdfRjEzMF9GMDU0KV0JOyBtbTA9ZGF0YTJICisJcG1hZGR3ZCAgIG1tMSxbR09UT0ZGKGVieCxQV19GMDU0X01GMTMwKV0JOyBtbTE9ZGF0YTZMCisJcG1hZGR3ZCAgIG1tNixbR09UT0ZGKGVieCxQV19GMDU0X01GMTMwKV0JOyBtbTY9ZGF0YTZICisKKwlwYWRkZAltbTQsW0dPVE9GRihlYngsUERfREVTQ0FMRV9QMildCisJcGFkZGQJbW0wLFtHT1RPRkYoZWJ4LFBEX0RFU0NBTEVfUDIpXQorCXBzcmFkCW1tNCxERVNDQUxFX1AyCisJcHNyYWQJbW0wLERFU0NBTEVfUDIKKwlwYWRkZAltbTEsW0dPVE9GRihlYngsUERfREVTQ0FMRV9QMildCisJcGFkZGQJbW02LFtHT1RPRkYoZWJ4LFBEX0RFU0NBTEVfUDIpXQorCXBzcmFkCW1tMSxERVNDQUxFX1AyCisJcHNyYWQJbW02LERFU0NBTEVfUDIKKworCXBhY2tzc2R3ICBtbTQsbW0wCQk7IG1tND1kYXRhMgorCXBhY2tzc2R3ICBtbTEsbW02CQk7IG1tMT1kYXRhNgorCisJbW92cQlNTVdPUkQgW01NQkxPQ0soMiwwLGVkeCxTSVpFT0ZfRENURUxFTSldLCBtbTQKKwltb3ZxCU1NV09SRCBbTU1CTE9DSyg2LDAsZWR4LFNJWkVPRl9EQ1RFTEVNKV0sIG1tMQorCisJOyAtLSBPZGQgcGFydAorCisJbW92cQltbTUsIE1NV09SRCBbd2soMCldCTsgbW01PXRtcDYKKwltb3ZxCW1tNywgTU1XT1JEIFt3aygxKV0JOyBtbTc9dG1wNworCisJbW92cQltbTAsbW0yCQkJOyBtbTI9dG1wNAorCW1vdnEJbW02LG1tMwkJCTsgbW0zPXRtcDUKKwlwYWRkdwltbTAsbW01CQkJOyBtbTA9ejMKKwlwYWRkdwltbTYsbW03CQkJOyBtbTY9ejQKKworCTsgKE9yaWdpbmFsKQorCTsgejUgPSAoejMgKyB6NCkgKiAxLjE3NTg3NTYwMjsKKwk7IHozID0gejMgKiAtMS45NjE1NzA1NjA7ICB6NCA9IHo0ICogLTAuMzkwMTgwNjQ0OworCTsgejMgKz0gejU7ICB6NCArPSB6NTsKKwk7CisJOyAoVGhpcyBpbXBsZW1lbnRhdGlvbikKKwk7IHozID0gejMgKiAoMS4xNzU4NzU2MDIgLSAxLjk2MTU3MDU2MCkgKyB6NCAqIDEuMTc1ODc1NjAyOworCTsgejQgPSB6MyAqIDEuMTc1ODc1NjAyICsgejQgKiAoMS4xNzU4NzU2MDIgLSAwLjM5MDE4MDY0NCk7CisKKwltb3ZxICAgICAgbW00LG1tMAorCW1vdnEgICAgICBtbTEsbW0wCisJcHVucGNrbHdkIG1tNCxtbTYKKwlwdW5wY2tod2QgbW0xLG1tNgorCW1vdnEgICAgICBtbTAsbW00CisJbW92cSAgICAgIG1tNixtbTEKKwlwbWFkZHdkICAgbW00LFtHT1RPRkYoZWJ4LFBXX01GMDc4X0YxMTcpXQk7IG1tND16M0wKKwlwbWFkZHdkICAgbW0xLFtHT1RPRkYoZWJ4LFBXX01GMDc4X0YxMTcpXQk7IG1tMT16M0gKKwlwbWFkZHdkICAgbW0wLFtHT1RPRkYoZWJ4LFBXX0YxMTdfRjA3OCldCTsgbW0wPXo0TAorCXBtYWRkd2QgICBtbTYsW0dPVE9GRihlYngsUFdfRjExN19GMDc4KV0JOyBtbTY9ejRICisKKwltb3ZxCU1NV09SRCBbd2soMCldLCBtbTQJOyB3aygwKT16M0wKKwltb3ZxCU1NV09SRCBbd2soMSldLCBtbTEJOyB3aygxKT16M0gKKworCTsgKE9yaWdpbmFsKQorCTsgejEgPSB0bXA0ICsgdG1wNzsgIHoyID0gdG1wNSArIHRtcDY7CisJOyB0bXA0ID0gdG1wNCAqIDAuMjk4NjMxMzM2OyAgdG1wNSA9IHRtcDUgKiAyLjA1MzExOTg2OTsKKwk7IHRtcDYgPSB0bXA2ICogMy4wNzI3MTEwMjY7ICB0bXA3ID0gdG1wNyAqIDEuNTAxMzIxMTEwOworCTsgejEgPSB6MSAqIC0wLjg5OTk3NjIyMzsgIHoyID0gejIgKiAtMi41NjI5MTU0NDc7CisJOyBkYXRhNyA9IHRtcDQgKyB6MSArIHozOyAgZGF0YTUgPSB0bXA1ICsgejIgKyB6NDsKKwk7IGRhdGEzID0gdG1wNiArIHoyICsgejM7ICBkYXRhMSA9IHRtcDcgKyB6MSArIHo0OworCTsKKwk7IChUaGlzIGltcGxlbWVudGF0aW9uKQorCTsgdG1wNCA9IHRtcDQgKiAoMC4yOTg2MzEzMzYgLSAwLjg5OTk3NjIyMykgKyB0bXA3ICogLTAuODk5OTc2MjIzOworCTsgdG1wNSA9IHRtcDUgKiAoMi4wNTMxMTk4NjkgLSAyLjU2MjkxNTQ0NykgKyB0bXA2ICogLTIuNTYyOTE1NDQ3OworCTsgdG1wNiA9IHRtcDUgKiAtMi41NjI5MTU0NDcgKyB0bXA2ICogKDMuMDcyNzExMDI2IC0gMi41NjI5MTU0NDcpOworCTsgdG1wNyA9IHRtcDQgKiAtMC44OTk5NzYyMjMgKyB0bXA3ICogKDEuNTAxMzIxMTEwIC0gMC44OTk5NzYyMjMpOworCTsgZGF0YTcgPSB0bXA0ICsgejM7ICBkYXRhNSA9IHRtcDUgKyB6NDsKKwk7IGRhdGEzID0gdG1wNiArIHozOyAgZGF0YTEgPSB0bXA3ICsgejQ7CisKKwltb3ZxICAgICAgbW00LG1tMgorCW1vdnEgICAgICBtbTEsbW0yCisJcHVucGNrbHdkIG1tNCxtbTcKKwlwdW5wY2tod2QgbW0xLG1tNworCW1vdnEgICAgICBtbTIsbW00CisJbW92cSAgICAgIG1tNyxtbTEKKwlwbWFkZHdkICAgbW00LFtHT1RPRkYoZWJ4LFBXX01GMDYwX01GMDg5KV0JOyBtbTQ9dG1wNEwKKwlwbWFkZHdkICAgbW0xLFtHT1RPRkYoZWJ4LFBXX01GMDYwX01GMDg5KV0JOyBtbTE9dG1wNEgKKwlwbWFkZHdkICAgbW0yLFtHT1RPRkYoZWJ4LFBXX01GMDg5X0YwNjApXQk7IG1tMj10bXA3TAorCXBtYWRkd2QgICBtbTcsW0dPVE9GRihlYngsUFdfTUYwODlfRjA2MCldCTsgbW03PXRtcDdICisKKwlwYWRkZAltbTQsIE1NV09SRCBbd2soMCldCTsgbW00PWRhdGE3TAorCXBhZGRkCW1tMSwgTU1XT1JEIFt3aygxKV0JOyBtbTE9ZGF0YTdICisJcGFkZGQJbW0yLG1tMAkJCTsgbW0yPWRhdGExTAorCXBhZGRkCW1tNyxtbTYJCQk7IG1tNz1kYXRhMUgKKworCXBhZGRkCW1tNCxbR09UT0ZGKGVieCxQRF9ERVNDQUxFX1AyKV0KKwlwYWRkZAltbTEsW0dPVE9GRihlYngsUERfREVTQ0FMRV9QMildCisJcHNyYWQJbW00LERFU0NBTEVfUDIKKwlwc3JhZAltbTEsREVTQ0FMRV9QMgorCXBhZGRkCW1tMixbR09UT0ZGKGVieCxQRF9ERVNDQUxFX1AyKV0KKwlwYWRkZAltbTcsW0dPVE9GRihlYngsUERfREVTQ0FMRV9QMildCisJcHNyYWQJbW0yLERFU0NBTEVfUDIKKwlwc3JhZAltbTcsREVTQ0FMRV9QMgorCisJcGFja3NzZHcgIG1tNCxtbTEJCTsgbW00PWRhdGE3CisJcGFja3NzZHcgIG1tMixtbTcJCTsgbW0yPWRhdGExCisKKwltb3ZxCU1NV09SRCBbTU1CTE9DSyg3LDAsZWR4LFNJWkVPRl9EQ1RFTEVNKV0sIG1tNAorCW1vdnEJTU1XT1JEIFtNTUJMT0NLKDEsMCxlZHgsU0laRU9GX0RDVEVMRU0pXSwgbW0yCisKKwltb3ZxICAgICAgbW0xLG1tMworCW1vdnEgICAgICBtbTcsbW0zCisJcHVucGNrbHdkIG1tMSxtbTUKKwlwdW5wY2tod2QgbW03LG1tNQorCW1vdnEgICAgICBtbTMsbW0xCisJbW92cSAgICAgIG1tNSxtbTcKKwlwbWFkZHdkICAgbW0xLFtHT1RPRkYoZWJ4LFBXX01GMDUwX01GMjU2KV0JOyBtbTE9dG1wNUwKKwlwbWFkZHdkICAgbW03LFtHT1RPRkYoZWJ4LFBXX01GMDUwX01GMjU2KV0JOyBtbTc9dG1wNUgKKwlwbWFkZHdkICAgbW0zLFtHT1RPRkYoZWJ4LFBXX01GMjU2X0YwNTApXQk7IG1tMz10bXA2TAorCXBtYWRkd2QgICBtbTUsW0dPVE9GRihlYngsUFdfTUYyNTZfRjA1MCldCTsgbW01PXRtcDZICisKKwlwYWRkZAltbTEsbW0wCQkJOyBtbTE9ZGF0YTVMCisJcGFkZGQJbW03LG1tNgkJCTsgbW03PWRhdGE1SAorCXBhZGRkCW1tMywgTU1XT1JEIFt3aygwKV0JOyBtbTM9ZGF0YTNMCisJcGFkZGQJbW01LCBNTVdPUkQgW3drKDEpXQk7IG1tNT1kYXRhM0gKKworCXBhZGRkCW1tMSxbR09UT0ZGKGVieCxQRF9ERVNDQUxFX1AyKV0KKwlwYWRkZAltbTcsW0dPVE9GRihlYngsUERfREVTQ0FMRV9QMildCisJcHNyYWQJbW0xLERFU0NBTEVfUDIKKwlwc3JhZAltbTcsREVTQ0FMRV9QMgorCXBhZGRkCW1tMyxbR09UT0ZGKGVieCxQRF9ERVNDQUxFX1AyKV0KKwlwYWRkZAltbTUsW0dPVE9GRihlYngsUERfREVTQ0FMRV9QMildCisJcHNyYWQJbW0zLERFU0NBTEVfUDIKKwlwc3JhZAltbTUsREVTQ0FMRV9QMgorCisJcGFja3NzZHcgIG1tMSxtbTcJCTsgbW0xPWRhdGE1CisJcGFja3NzZHcgIG1tMyxtbTUJCTsgbW0zPWRhdGEzCisKKwltb3ZxCU1NV09SRCBbTU1CTE9DSyg1LDAsZWR4LFNJWkVPRl9EQ1RFTEVNKV0sIG1tMQorCW1vdnEJTU1XT1JEIFtNTUJMT0NLKDMsMCxlZHgsU0laRU9GX0RDVEVMRU0pXSwgbW0zCisKKwlhZGQJZWR4LCBieXRlIDQqU0laRU9GX0RDVEVMRU0KKwlkZWMJZWN4CisJam56CW5lYXIgLmNvbHVtbmxvb3AKKworCWVtbXMJCTsgZW1wdHkgTU1YIHN0YXRlCisKKzsJcG9wCWVkaQkJOyB1bnVzZWQKKzsJcG9wCWVzaQkJOyB1bnVzZWQKKzsJcG9wCWVkeAkJOyBuZWVkIG5vdCBiZSBwcmVzZXJ2ZWQKKzsJcG9wCWVjeAkJOyBuZWVkIG5vdCBiZSBwcmVzZXJ2ZWQKKwlwb3BwaWMJZWJ4CisJbW92CWVzcCxlYnAJCTsgZXNwIDwtIGFsaWduZWQgZWJwCisJcG9wCWVzcAkJOyBlc3AgPC0gb3JpZ2luYWwgZWJwCisJcG9wCWVicAorCXJldAorCis7IEZvciBzb21lIHJlYXNvbiwgdGhlIE9TIFggbGlua2VyIGRvZXMgbm90IGhvbm9yIHRoZSByZXF1ZXN0IHRvIGFsaWduIHRoZQorOyBzZWdtZW50IHVubGVzcyB3ZSBkbyB0aGlzLgorCWFsaWduCTE2CmRpZmYgLS1naXQgYS9zaW1kL2pmc3MyZnN0LTY0LmFzbSBiL3NpbWQvamZzczJmc3QtNjQuYXNtCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjY5NTNjYWYKLS0tIC9kZXYvbnVsbAorKysgYi9zaW1kL2pmc3MyZnN0LTY0LmFzbQpAQCAtMCwwICsxLDM5MiBAQAorOworOyBqZnNzMmZzdC02NC5hc20gLSBmYXN0IGludGVnZXIgRkRDVCAoNjQtYml0IFNTRTIpCis7Cis7IENvcHlyaWdodCAyMDA5IFBpZXJyZSBPc3NtYW4gPG9zc21hbkBjZW5kaW8uc2U+IGZvciBDZW5kaW8gQUIKKzsgQ29weXJpZ2h0IDIwMDkgRC4gUi4gQ29tbWFuZGVyCis7Cis7IEJhc2VkIG9uCis7IHg4NiBTSU1EIGV4dGVuc2lvbiBmb3IgSUpHIEpQRUcgbGlicmFyeQorOyBDb3B5cmlnaHQgKEMpIDE5OTktMjAwNiwgTUlZQVNBS0EgTWFzYXJ1LgorOyBGb3IgY29uZGl0aW9ucyBvZiBkaXN0cmlidXRpb24gYW5kIHVzZSwgc2VlIGNvcHlyaWdodCBub3RpY2UgaW4ganNpbWRleHQuaW5jCis7Cis7IFRoaXMgZmlsZSBzaG91bGQgYmUgYXNzZW1ibGVkIHdpdGggTkFTTSAoTmV0d2lkZSBBc3NlbWJsZXIpLAorOyBjYW4gKm5vdCogYmUgYXNzZW1ibGVkIHdpdGggTWljcm9zb2Z0J3MgTUFTTSBvciBhbnkgY29tcGF0aWJsZQorOyBhc3NlbWJsZXIgKGluY2x1ZGluZyBCb3JsYW5kJ3MgVHVyYm8gQXNzZW1ibGVyKS4KKzsgTkFTTSBpcyBhdmFpbGFibGUgZnJvbSBodHRwOi8vbmFzbS5zb3VyY2Vmb3JnZS5uZXQvIG9yCis7IGh0dHA6Ly9zb3VyY2Vmb3JnZS5uZXQvcHJvamVjdC9zaG93ZmlsZXMucGhwP2dyb3VwX2lkPTYyMDgKKzsKKzsgVGhpcyBmaWxlIGNvbnRhaW5zIGEgZmFzdCwgbm90IHNvIGFjY3VyYXRlIGludGVnZXIgaW1wbGVtZW50YXRpb24gb2YKKzsgdGhlIGZvcndhcmQgRENUIChEaXNjcmV0ZSBDb3NpbmUgVHJhbnNmb3JtKS4gVGhlIGZvbGxvd2luZyBjb2RlIGlzCis7IGJhc2VkIGRpcmVjdGx5IG9uIHRoZSBJSkcncyBvcmlnaW5hbCBqZmRjdGZzdC5jOyBzZWUgdGhlIGpmZGN0ZnN0LmMKKzsgZm9yIG1vcmUgZGV0YWlscy4KKzsKKzsgW1RBQjhdCisKKyVpbmNsdWRlICJqc2ltZGV4dC5pbmMiCislaW5jbHVkZSAiamRjdC5pbmMiCisKKzsgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworJWRlZmluZSBDT05TVF9CSVRTCTgJOyAxNCBpcyBhbHNvIE9LLgorCislaWYgQ09OU1RfQklUUyA9PSA4CitGXzBfMzgyCWVxdQkgOTgJCTsgRklYKDAuMzgyNjgzNDMzKQorRl8wXzU0MQllcXUJMTM5CQk7IEZJWCgwLjU0MTE5NjEwMCkKK0ZfMF83MDcJZXF1CTE4MQkJOyBGSVgoMC43MDcxMDY3ODEpCitGXzFfMzA2CWVxdQkzMzQJCTsgRklYKDEuMzA2NTYyOTY1KQorJWVsc2UKKzsgTkFTTSBjYW5ub3QgZG8gY29tcGlsZS10aW1lIGFyaXRobWV0aWMgb24gZmxvYXRpbmctcG9pbnQgY29uc3RhbnRzLgorJWRlZmluZSBERVNDQUxFKHgsbikgICgoKHgpKygxPDwoKG4pLTEpKSk+PihuKSkKK0ZfMF8zODIJZXF1CURFU0NBTEUoIDQxMDkwMzIwNywzMC1DT05TVF9CSVRTKQk7IEZJWCgwLjM4MjY4MzQzMykKK0ZfMF81NDEJZXF1CURFU0NBTEUoIDU4MTEwNDg4NywzMC1DT05TVF9CSVRTKQk7IEZJWCgwLjU0MTE5NjEwMCkKK0ZfMF83MDcJZXF1CURFU0NBTEUoIDc1OTI1MDEyNCwzMC1DT05TVF9CSVRTKQk7IEZJWCgwLjcwNzEwNjc4MSkKK0ZfMV8zMDYJZXF1CURFU0NBTEUoMTQwMjkxMTMwMSwzMC1DT05TVF9CSVRTKQk7IEZJWCgxLjMwNjU2Mjk2NSkKKyVlbmRpZgorCis7IC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisJU0VDVElPTglTRUdfQ09OU1QKKworOyBQUkVfTVVMVElQTFlfU0NBTEVfQklUUyA8PSAyICh0byBhdm9pZCBvdmVyZmxvdykKKzsgQ09OU1RfQklUUyArIENPTlNUX1NISUZUICsgUFJFX01VTFRJUExZX1NDQUxFX0JJVFMgPT0gMTYgKGZvciBwbXVsaHcpCisKKyVkZWZpbmUgUFJFX01VTFRJUExZX1NDQUxFX0JJVFMgICAyCislZGVmaW5lIENPTlNUX1NISUZUICAgICAoMTYgLSBQUkVfTVVMVElQTFlfU0NBTEVfQklUUyAtIENPTlNUX0JJVFMpCisKKwlhbGlnbnoJMTYKKwlnbG9iYWwJRVhUTihqY29uc3RfZmRjdF9pZmFzdF9zc2UyKQorCitFWFROKGpjb25zdF9mZGN0X2lmYXN0X3NzZTIpOgorCitQV19GMDcwNwl0aW1lcyA4IGR3ICBGXzBfNzA3IDw8IENPTlNUX1NISUZUCitQV19GMDM4Mgl0aW1lcyA4IGR3ICBGXzBfMzgyIDw8IENPTlNUX1NISUZUCitQV19GMDU0MQl0aW1lcyA4IGR3ICBGXzBfNTQxIDw8IENPTlNUX1NISUZUCitQV19GMTMwNgl0aW1lcyA4IGR3ICBGXzFfMzA2IDw8IENPTlNUX1NISUZUCisKKwlhbGlnbnoJMTYKKworOyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCVNFQ1RJT04JU0VHX1RFWFQKKwlCSVRTCTY0Cis7Cis7IFBlcmZvcm0gdGhlIGZvcndhcmQgRENUIG9uIG9uZSBibG9jayBvZiBzYW1wbGVzLgorOworOyBHTE9CQUwodm9pZCkKKzsganNpbWRfZmRjdF9pZmFzdF9zc2UyIChEQ1RFTEVNICogZGF0YSkKKzsKKworOyByMTAgPSBEQ1RFTEVNICogZGF0YQorCislZGVmaW5lIHdrKGkpCQlyYnAtKFdLX05VTS0oaSkpKlNJWkVPRl9YTU1XT1JECTsgeG1td29yZCB3a1tXS19OVU1dCislZGVmaW5lIFdLX05VTQkJMgorCisJYWxpZ24JMTYKKwlnbG9iYWwJRVhUTihqc2ltZF9mZGN0X2lmYXN0X3NzZTIpCisKK0VYVE4oanNpbWRfZmRjdF9pZmFzdF9zc2UyKToKKwlwdXNoCXJicAorCW1vdglyYXgscnNwCQkJCTsgcmF4ID0gb3JpZ2luYWwgcmJwCisJc3ViCXJzcCwgYnl0ZSA0CisJYW5kCXJzcCwgYnl0ZSAoLVNJWkVPRl9YTU1XT1JEKQk7IGFsaWduIHRvIDEyOCBiaXRzCisJbW92CVtyc3BdLHJheAorCW1vdglyYnAscnNwCQkJCTsgcmJwID0gYWxpZ25lZCByYnAKKwlsZWEJcnNwLCBbd2soMCldCisJY29sbGVjdF9hcmdzCisKKwk7IC0tLS0gUGFzcyAxOiBwcm9jZXNzIHJvd3MuCisKKwltb3YJcmR4LCByMTAJOyAoRENURUxFTSAqKQorCisJbW92ZHFhCXhtbTAsIFhNTVdPUkQgW1hNTUJMT0NLKDAsMCxyZHgsU0laRU9GX0RDVEVMRU0pXQorCW1vdmRxYQl4bW0xLCBYTU1XT1JEIFtYTU1CTE9DSygxLDAscmR4LFNJWkVPRl9EQ1RFTEVNKV0KKwltb3ZkcWEJeG1tMiwgWE1NV09SRCBbWE1NQkxPQ0soMiwwLHJkeCxTSVpFT0ZfRENURUxFTSldCisJbW92ZHFhCXhtbTMsIFhNTVdPUkQgW1hNTUJMT0NLKDMsMCxyZHgsU0laRU9GX0RDVEVMRU0pXQorCisJOyB4bW0wPSgwMCAwMSAwMiAwMyAwNCAwNSAwNiAwNyksIHhtbTI9KDIwIDIxIDIyIDIzIDI0IDI1IDI2IDI3KQorCTsgeG1tMT0oMTAgMTEgMTIgMTMgMTQgMTUgMTYgMTcpLCB4bW0zPSgzMCAzMSAzMiAzMyAzNCAzNSAzNiAzNykKKworCW1vdmRxYSAgICB4bW00LHhtbTAJCTsgdHJhbnNwb3NlIGNvZWZmaWNpZW50cyhwaGFzZSAxKQorCXB1bnBja2x3ZCB4bW0wLHhtbTEJCTsgeG1tMD0oMDAgMTAgMDEgMTEgMDIgMTIgMDMgMTMpCisJcHVucGNraHdkIHhtbTQseG1tMQkJOyB4bW00PSgwNCAxNCAwNSAxNSAwNiAxNiAwNyAxNykKKwltb3ZkcWEgICAgeG1tNSx4bW0yCQk7IHRyYW5zcG9zZSBjb2VmZmljaWVudHMocGhhc2UgMSkKKwlwdW5wY2tsd2QgeG1tMix4bW0zCQk7IHhtbTI9KDIwIDMwIDIxIDMxIDIyIDMyIDIzIDMzKQorCXB1bnBja2h3ZCB4bW01LHhtbTMJCTsgeG1tNT0oMjQgMzQgMjUgMzUgMjYgMzYgMjcgMzcpCisKKwltb3ZkcWEJeG1tNiwgWE1NV09SRCBbWE1NQkxPQ0soNCwwLHJkeCxTSVpFT0ZfRENURUxFTSldCisJbW92ZHFhCXhtbTcsIFhNTVdPUkQgW1hNTUJMT0NLKDUsMCxyZHgsU0laRU9GX0RDVEVMRU0pXQorCW1vdmRxYQl4bW0xLCBYTU1XT1JEIFtYTU1CTE9DSyg2LDAscmR4LFNJWkVPRl9EQ1RFTEVNKV0KKwltb3ZkcWEJeG1tMywgWE1NV09SRCBbWE1NQkxPQ0soNywwLHJkeCxTSVpFT0ZfRENURUxFTSldCisKKwk7IHhtbTY9KCA0IDEyIDIwIDI4IDM2IDQ0IDUyIDYwKSwgeG1tMT0oIDYgMTQgMjIgMzAgMzggNDYgNTQgNjIpCisJOyB4bW03PSggNSAxMyAyMSAyOSAzNyA0NSA1MyA2MSksIHhtbTM9KCA3IDE1IDIzIDMxIDM5IDQ3IDU1IDYzKQorCisJbW92ZHFhCVhNTVdPUkQgW3drKDApXSwgeG1tMgk7IHdrKDApPSgyMCAzMCAyMSAzMSAyMiAzMiAyMyAzMykKKwltb3ZkcWEJWE1NV09SRCBbd2soMSldLCB4bW01CTsgd2soMSk9KDI0IDM0IDI1IDM1IDI2IDM2IDI3IDM3KQorCisJbW92ZHFhICAgIHhtbTIseG1tNgkJOyB0cmFuc3Bvc2UgY29lZmZpY2llbnRzKHBoYXNlIDEpCisJcHVucGNrbHdkIHhtbTYseG1tNwkJOyB4bW02PSg0MCA1MCA0MSA1MSA0MiA1MiA0MyA1MykKKwlwdW5wY2tod2QgeG1tMix4bW03CQk7IHhtbTI9KDQ0IDU0IDQ1IDU1IDQ2IDU2IDQ3IDU3KQorCW1vdmRxYSAgICB4bW01LHhtbTEJCTsgdHJhbnNwb3NlIGNvZWZmaWNpZW50cyhwaGFzZSAxKQorCXB1bnBja2x3ZCB4bW0xLHhtbTMJCTsgeG1tMT0oNjAgNzAgNjEgNzEgNjIgNzIgNjMgNzMpCisJcHVucGNraHdkIHhtbTUseG1tMwkJOyB4bW01PSg2NCA3NCA2NSA3NSA2NiA3NiA2NyA3NykKKworCW1vdmRxYSAgICB4bW03LHhtbTYJCTsgdHJhbnNwb3NlIGNvZWZmaWNpZW50cyhwaGFzZSAyKQorCXB1bnBja2xkcSB4bW02LHhtbTEJCTsgeG1tNj0oNDAgNTAgNjAgNzAgNDEgNTEgNjEgNzEpCisJcHVucGNraGRxIHhtbTcseG1tMQkJOyB4bW03PSg0MiA1MiA2MiA3MiA0MyA1MyA2MyA3MykKKwltb3ZkcWEgICAgeG1tMyx4bW0yCQk7IHRyYW5zcG9zZSBjb2VmZmljaWVudHMocGhhc2UgMikKKwlwdW5wY2tsZHEgeG1tMix4bW01CQk7IHhtbTI9KDQ0IDU0IDY0IDc0IDQ1IDU1IDY1IDc1KQorCXB1bnBja2hkcSB4bW0zLHhtbTUJCTsgeG1tMz0oNDYgNTYgNjYgNzYgNDcgNTcgNjcgNzcpCisKKwltb3ZkcWEJeG1tMSwgWE1NV09SRCBbd2soMCldCTsgeG1tMT0oMjAgMzAgMjEgMzEgMjIgMzIgMjMgMzMpCisJbW92ZHFhCXhtbTUsIFhNTVdPUkQgW3drKDEpXQk7IHhtbTU9KDI0IDM0IDI1IDM1IDI2IDM2IDI3IDM3KQorCW1vdmRxYQlYTU1XT1JEIFt3aygwKV0sIHhtbTcJOyB3aygwKT0oNDIgNTIgNjIgNzIgNDMgNTMgNjMgNzMpCisJbW92ZHFhCVhNTVdPUkQgW3drKDEpXSwgeG1tMgk7IHdrKDEpPSg0NCA1NCA2NCA3NCA0NSA1NSA2NSA3NSkKKworCW1vdmRxYSAgICB4bW03LHhtbTAJCTsgdHJhbnNwb3NlIGNvZWZmaWNpZW50cyhwaGFzZSAyKQorCXB1bnBja2xkcSB4bW0wLHhtbTEJCTsgeG1tMD0oMDAgMTAgMjAgMzAgMDEgMTEgMjEgMzEpCisJcHVucGNraGRxIHhtbTcseG1tMQkJOyB4bW03PSgwMiAxMiAyMiAzMiAwMyAxMyAyMyAzMykKKwltb3ZkcWEgICAgeG1tMix4bW00CQk7IHRyYW5zcG9zZSBjb2VmZmljaWVudHMocGhhc2UgMikKKwlwdW5wY2tsZHEgeG1tNCx4bW01CQk7IHhtbTQ9KDA0IDE0IDI0IDM0IDA1IDE1IDI1IDM1KQorCXB1bnBja2hkcSB4bW0yLHhtbTUJCTsgeG1tMj0oMDYgMTYgMjYgMzYgMDcgMTcgMjcgMzcpCisKKwltb3ZkcWEgICAgIHhtbTEseG1tMAkJOyB0cmFuc3Bvc2UgY29lZmZpY2llbnRzKHBoYXNlIDMpCisJcHVucGNrbHFkcSB4bW0wLHhtbTYJCTsgeG1tMD0oMDAgMTAgMjAgMzAgNDAgNTAgNjAgNzApPWRhdGEwCisJcHVucGNraHFkcSB4bW0xLHhtbTYJCTsgeG1tMT0oMDEgMTEgMjEgMzEgNDEgNTEgNjEgNzEpPWRhdGExCisJbW92ZHFhICAgICB4bW01LHhtbTIJCTsgdHJhbnNwb3NlIGNvZWZmaWNpZW50cyhwaGFzZSAzKQorCXB1bnBja2xxZHEgeG1tMix4bW0zCQk7IHhtbTI9KDA2IDE2IDI2IDM2IDQ2IDU2IDY2IDc2KT1kYXRhNgorCXB1bnBja2hxZHEgeG1tNSx4bW0zCQk7IHhtbTU9KDA3IDE3IDI3IDM3IDQ3IDU3IDY3IDc3KT1kYXRhNworCisJbW92ZHFhCXhtbTYseG1tMQorCW1vdmRxYQl4bW0zLHhtbTAKKwlwc3Vidwl4bW0xLHhtbTIJCTsgeG1tMT1kYXRhMS1kYXRhNj10bXA2CisJcHN1YncJeG1tMCx4bW01CQk7IHhtbTA9ZGF0YTAtZGF0YTc9dG1wNworCXBhZGR3CXhtbTYseG1tMgkJOyB4bW02PWRhdGExK2RhdGE2PXRtcDEKKwlwYWRkdwl4bW0zLHhtbTUJCTsgeG1tMz1kYXRhMCtkYXRhNz10bXAwCisKKwltb3ZkcWEJeG1tMiwgWE1NV09SRCBbd2soMCldCTsgeG1tMj0oNDIgNTIgNjIgNzIgNDMgNTMgNjMgNzMpCisJbW92ZHFhCXhtbTUsIFhNTVdPUkQgW3drKDEpXQk7IHhtbTU9KDQ0IDU0IDY0IDc0IDQ1IDU1IDY1IDc1KQorCW1vdmRxYQlYTU1XT1JEIFt3aygwKV0sIHhtbTEJOyB3aygwKT10bXA2CisJbW92ZHFhCVhNTVdPUkQgW3drKDEpXSwgeG1tMAk7IHdrKDEpPXRtcDcKKworCW1vdmRxYSAgICAgeG1tMSx4bW03CQk7IHRyYW5zcG9zZSBjb2VmZmljaWVudHMocGhhc2UgMykKKwlwdW5wY2tscWRxIHhtbTcseG1tMgkJOyB4bW03PSgwMiAxMiAyMiAzMiA0MiA1MiA2MiA3Mik9ZGF0YTIKKwlwdW5wY2tocWRxIHhtbTEseG1tMgkJOyB4bW0xPSgwMyAxMyAyMyAzMyA0MyA1MyA2MyA3Myk9ZGF0YTMKKwltb3ZkcWEgICAgIHhtbTAseG1tNAkJOyB0cmFuc3Bvc2UgY29lZmZpY2llbnRzKHBoYXNlIDMpCisJcHVucGNrbHFkcSB4bW00LHhtbTUJCTsgeG1tND0oMDQgMTQgMjQgMzQgNDQgNTQgNjQgNzQpPWRhdGE0CisJcHVucGNraHFkcSB4bW0wLHhtbTUJCTsgeG1tMD0oMDUgMTUgMjUgMzUgNDUgNTUgNjUgNzUpPWRhdGE1CisKKwltb3ZkcWEJeG1tMix4bW0xCisJbW92ZHFhCXhtbTUseG1tNworCXBhZGR3CXhtbTEseG1tNAkJOyB4bW0xPWRhdGEzK2RhdGE0PXRtcDMKKwlwYWRkdwl4bW03LHhtbTAJCTsgeG1tNz1kYXRhMitkYXRhNT10bXAyCisJcHN1YncJeG1tMix4bW00CQk7IHhtbTI9ZGF0YTMtZGF0YTQ9dG1wNAorCXBzdWJ3CXhtbTUseG1tMAkJOyB4bW01PWRhdGEyLWRhdGE1PXRtcDUKKworCTsgLS0gRXZlbiBwYXJ0CisKKwltb3ZkcWEJeG1tNCx4bW0zCisJbW92ZHFhCXhtbTAseG1tNgorCXBzdWJ3CXhtbTMseG1tMQkJOyB4bW0zPXRtcDEzCisJcHN1YncJeG1tNix4bW03CQk7IHhtbTY9dG1wMTIKKwlwYWRkdwl4bW00LHhtbTEJCTsgeG1tND10bXAxMAorCXBhZGR3CXhtbTAseG1tNwkJOyB4bW0wPXRtcDExCisKKwlwYWRkdwl4bW02LHhtbTMKKwlwc2xsdwl4bW02LFBSRV9NVUxUSVBMWV9TQ0FMRV9CSVRTCisJcG11bGh3CXhtbTYsW3JlbCBQV19GMDcwN10gOyB4bW02PXoxCisKKwltb3ZkcWEJeG1tMSx4bW00CisJbW92ZHFhCXhtbTcseG1tMworCXBzdWJ3CXhtbTQseG1tMAkJOyB4bW00PWRhdGE0CisJcHN1YncJeG1tMyx4bW02CQk7IHhtbTM9ZGF0YTYKKwlwYWRkdwl4bW0xLHhtbTAJCTsgeG1tMT1kYXRhMAorCXBhZGR3CXhtbTcseG1tNgkJOyB4bW03PWRhdGEyCisKKwltb3ZkcWEJeG1tMCwgWE1NV09SRCBbd2soMCldCTsgeG1tMD10bXA2CisJbW92ZHFhCXhtbTYsIFhNTVdPUkQgW3drKDEpXQk7IHhtbTY9dG1wNworCW1vdmRxYQlYTU1XT1JEIFt3aygwKV0sIHhtbTQJOyB3aygwKT1kYXRhNAorCW1vdmRxYQlYTU1XT1JEIFt3aygxKV0sIHhtbTMJOyB3aygxKT1kYXRhNgorCisJOyAtLSBPZGQgcGFydAorCisJcGFkZHcJeG1tMix4bW01CQk7IHhtbTI9dG1wMTAKKwlwYWRkdwl4bW01LHhtbTAJCTsgeG1tNT10bXAxMQorCXBhZGR3CXhtbTAseG1tNgkJOyB4bW0wPXRtcDEyLCB4bW02PXRtcDcKKworCXBzbGx3CXhtbTIsUFJFX01VTFRJUExZX1NDQUxFX0JJVFMKKwlwc2xsdwl4bW0wLFBSRV9NVUxUSVBMWV9TQ0FMRV9CSVRTCisKKwlwc2xsdwl4bW01LFBSRV9NVUxUSVBMWV9TQ0FMRV9CSVRTCisJcG11bGh3CXhtbTUsW3JlbCBQV19GMDcwN10gOyB4bW01PXozCisKKwltb3ZkcWEJeG1tNCx4bW0yCQk7IHhtbTQ9dG1wMTAKKwlwc3Vidwl4bW0yLHhtbTAKKwlwbXVsaHcJeG1tMixbcmVsIFBXX0YwMzgyXSA7IHhtbTI9ejUKKwlwbXVsaHcJeG1tNCxbcmVsIFBXX0YwNTQxXSA7IHhtbTQ9TVVMVElQTFkodG1wMTAsRklYXzBfNTQxMTk2KQorCXBtdWxodwl4bW0wLFtyZWwgUFdfRjEzMDZdIDsgeG1tMD1NVUxUSVBMWSh0bXAxMixGSVhfMV8zMDY1NjIpCisJcGFkZHcJeG1tNCx4bW0yCQk7IHhtbTQ9ejIKKwlwYWRkdwl4bW0wLHhtbTIJCTsgeG1tMD16NAorCisJbW92ZHFhCXhtbTMseG1tNgorCXBzdWJ3CXhtbTYseG1tNQkJOyB4bW02PXoxMworCXBhZGR3CXhtbTMseG1tNQkJOyB4bW0zPXoxMQorCisJbW92ZHFhCXhtbTIseG1tNgorCW1vdmRxYQl4bW01LHhtbTMKKwlwc3Vidwl4bW02LHhtbTQJCTsgeG1tNj1kYXRhMworCXBzdWJ3CXhtbTMseG1tMAkJOyB4bW0zPWRhdGE3CisJcGFkZHcJeG1tMix4bW00CQk7IHhtbTI9ZGF0YTUKKwlwYWRkdwl4bW01LHhtbTAJCTsgeG1tNT1kYXRhMQorCisJOyAtLS0tIFBhc3MgMjogcHJvY2VzcyBjb2x1bW5zLgorCisJOyB4bW0xPSgwMCAxMCAyMCAzMCA0MCA1MCA2MCA3MCksIHhtbTc9KDAyIDEyIDIyIDMyIDQyIDUyIDYyIDcyKQorCTsgeG1tNT0oMDEgMTEgMjEgMzEgNDEgNTEgNjEgNzEpLCB4bW02PSgwMyAxMyAyMyAzMyA0MyA1MyA2MyA3MykKKworCW1vdmRxYSAgICB4bW00LHhtbTEJCTsgdHJhbnNwb3NlIGNvZWZmaWNpZW50cyhwaGFzZSAxKQorCXB1bnBja2x3ZCB4bW0xLHhtbTUJCTsgeG1tMT0oMDAgMDEgMTAgMTEgMjAgMjEgMzAgMzEpCisJcHVucGNraHdkIHhtbTQseG1tNQkJOyB4bW00PSg0MCA0MSA1MCA1MSA2MCA2MSA3MCA3MSkKKwltb3ZkcWEgICAgeG1tMCx4bW03CQk7IHRyYW5zcG9zZSBjb2VmZmljaWVudHMocGhhc2UgMSkKKwlwdW5wY2tsd2QgeG1tNyx4bW02CQk7IHhtbTc9KDAyIDAzIDEyIDEzIDIyIDIzIDMyIDMzKQorCXB1bnBja2h3ZCB4bW0wLHhtbTYJCTsgeG1tMD0oNDIgNDMgNTIgNTMgNjIgNjMgNzIgNzMpCisKKwltb3ZkcWEJeG1tNSwgWE1NV09SRCBbd2soMCldCTsgeG1tNT1jb2w0CisJbW92ZHFhCXhtbTYsIFhNTVdPUkQgW3drKDEpXQk7IHhtbTY9Y29sNgorCisJOyB4bW01PSgwNCAxNCAyNCAzNCA0NCA1NCA2NCA3NCksIHhtbTY9KDA2IDE2IDI2IDM2IDQ2IDU2IDY2IDc2KQorCTsgeG1tMj0oMDUgMTUgMjUgMzUgNDUgNTUgNjUgNzUpLCB4bW0zPSgwNyAxNyAyNyAzNyA0NyA1NyA2NyA3NykKKworCW1vdmRxYQlYTU1XT1JEIFt3aygwKV0sIHhtbTcJOyB3aygwKT0oMDIgMDMgMTIgMTMgMjIgMjMgMzIgMzMpCisJbW92ZHFhCVhNTVdPUkQgW3drKDEpXSwgeG1tMAk7IHdrKDEpPSg0MiA0MyA1MiA1MyA2MiA2MyA3MiA3MykKKworCW1vdmRxYSAgICB4bW03LHhtbTUJCTsgdHJhbnNwb3NlIGNvZWZmaWNpZW50cyhwaGFzZSAxKQorCXB1bnBja2x3ZCB4bW01LHhtbTIJCTsgeG1tNT0oMDQgMDUgMTQgMTUgMjQgMjUgMzQgMzUpCisJcHVucGNraHdkIHhtbTcseG1tMgkJOyB4bW03PSg0NCA0NSA1NCA1NSA2NCA2NSA3NCA3NSkKKwltb3ZkcWEgICAgeG1tMCx4bW02CQk7IHRyYW5zcG9zZSBjb2VmZmljaWVudHMocGhhc2UgMSkKKwlwdW5wY2tsd2QgeG1tNix4bW0zCQk7IHhtbTY9KDA2IDA3IDE2IDE3IDI2IDI3IDM2IDM3KQorCXB1bnBja2h3ZCB4bW0wLHhtbTMJCTsgeG1tMD0oNDYgNDcgNTYgNTcgNjYgNjcgNzYgNzcpCisKKwltb3ZkcWEgICAgeG1tMix4bW01CQk7IHRyYW5zcG9zZSBjb2VmZmljaWVudHMocGhhc2UgMikKKwlwdW5wY2tsZHEgeG1tNSx4bW02CQk7IHhtbTU9KDA0IDA1IDA2IDA3IDE0IDE1IDE2IDE3KQorCXB1bnBja2hkcSB4bW0yLHhtbTYJCTsgeG1tMj0oMjQgMjUgMjYgMjcgMzQgMzUgMzYgMzcpCisJbW92ZHFhICAgIHhtbTMseG1tNwkJOyB0cmFuc3Bvc2UgY29lZmZpY2llbnRzKHBoYXNlIDIpCisJcHVucGNrbGRxIHhtbTcseG1tMAkJOyB4bW03PSg0NCA0NSA0NiA0NyA1NCA1NSA1NiA1NykKKwlwdW5wY2toZHEgeG1tMyx4bW0wCQk7IHhtbTM9KDY0IDY1IDY2IDY3IDc0IDc1IDc2IDc3KQorCisJbW92ZHFhCXhtbTYsIFhNTVdPUkQgW3drKDApXQk7IHhtbTY9KDAyIDAzIDEyIDEzIDIyIDIzIDMyIDMzKQorCW1vdmRxYQl4bW0wLCBYTU1XT1JEIFt3aygxKV0JOyB4bW0wPSg0MiA0MyA1MiA1MyA2MiA2MyA3MiA3MykKKwltb3ZkcWEJWE1NV09SRCBbd2soMCldLCB4bW0yCTsgd2soMCk9KDI0IDI1IDI2IDI3IDM0IDM1IDM2IDM3KQorCW1vdmRxYQlYTU1XT1JEIFt3aygxKV0sIHhtbTcJOyB3aygxKT0oNDQgNDUgNDYgNDcgNTQgNTUgNTYgNTcpCisKKwltb3ZkcWEgICAgeG1tMix4bW0xCQk7IHRyYW5zcG9zZSBjb2VmZmljaWVudHMocGhhc2UgMikKKwlwdW5wY2tsZHEgeG1tMSx4bW02CQk7IHhtbTE9KDAwIDAxIDAyIDAzIDEwIDExIDEyIDEzKQorCXB1bnBja2hkcSB4bW0yLHhtbTYJCTsgeG1tMj0oMjAgMjEgMjIgMjMgMzAgMzEgMzIgMzMpCisJbW92ZHFhICAgIHhtbTcseG1tNAkJOyB0cmFuc3Bvc2UgY29lZmZpY2llbnRzKHBoYXNlIDIpCisJcHVucGNrbGRxIHhtbTQseG1tMAkJOyB4bW00PSg0MCA0MSA0MiA0MyA1MCA1MSA1MiA1MykKKwlwdW5wY2toZHEgeG1tNyx4bW0wCQk7IHhtbTc9KDYwIDYxIDYyIDYzIDcwIDcxIDcyIDczKQorCisJbW92ZHFhICAgICB4bW02LHhtbTEJCTsgdHJhbnNwb3NlIGNvZWZmaWNpZW50cyhwaGFzZSAzKQorCXB1bnBja2xxZHEgeG1tMSx4bW01CQk7IHhtbTE9KDAwIDAxIDAyIDAzIDA0IDA1IDA2IDA3KT1kYXRhMAorCXB1bnBja2hxZHEgeG1tNix4bW01CQk7IHhtbTY9KDEwIDExIDEyIDEzIDE0IDE1IDE2IDE3KT1kYXRhMQorCW1vdmRxYSAgICAgeG1tMCx4bW03CQk7IHRyYW5zcG9zZSBjb2VmZmljaWVudHMocGhhc2UgMykKKwlwdW5wY2tscWRxIHhtbTcseG1tMwkJOyB4bW03PSg2MCA2MSA2MiA2MyA2NCA2NSA2NiA2Nyk9ZGF0YTYKKwlwdW5wY2tocWRxIHhtbTAseG1tMwkJOyB4bW0wPSg3MCA3MSA3MiA3MyA3NCA3NSA3NiA3Nyk9ZGF0YTcKKworCW1vdmRxYQl4bW01LHhtbTYKKwltb3ZkcWEJeG1tMyx4bW0xCisJcHN1YncJeG1tNix4bW03CQk7IHhtbTY9ZGF0YTEtZGF0YTY9dG1wNgorCXBzdWJ3CXhtbTEseG1tMAkJOyB4bW0xPWRhdGEwLWRhdGE3PXRtcDcKKwlwYWRkdwl4bW01LHhtbTcJCTsgeG1tNT1kYXRhMStkYXRhNj10bXAxCisJcGFkZHcJeG1tMyx4bW0wCQk7IHhtbTM9ZGF0YTArZGF0YTc9dG1wMAorCisJbW92ZHFhCXhtbTcsIFhNTVdPUkQgW3drKDApXQk7IHhtbTc9KDI0IDI1IDI2IDI3IDM0IDM1IDM2IDM3KQorCW1vdmRxYQl4bW0wLCBYTU1XT1JEIFt3aygxKV0JOyB4bW0wPSg0NCA0NSA0NiA0NyA1NCA1NSA1NiA1NykKKwltb3ZkcWEJWE1NV09SRCBbd2soMCldLCB4bW02CTsgd2soMCk9dG1wNgorCW1vdmRxYQlYTU1XT1JEIFt3aygxKV0sIHhtbTEJOyB3aygxKT10bXA3CisKKwltb3ZkcWEgICAgIHhtbTYseG1tMgkJOyB0cmFuc3Bvc2UgY29lZmZpY2llbnRzKHBoYXNlIDMpCisJcHVucGNrbHFkcSB4bW0yLHhtbTcJCTsgeG1tMj0oMjAgMjEgMjIgMjMgMjQgMjUgMjYgMjcpPWRhdGEyCisJcHVucGNraHFkcSB4bW02LHhtbTcJCTsgeG1tNj0oMzAgMzEgMzIgMzMgMzQgMzUgMzYgMzcpPWRhdGEzCisJbW92ZHFhICAgICB4bW0xLHhtbTQJCTsgdHJhbnNwb3NlIGNvZWZmaWNpZW50cyhwaGFzZSAzKQorCXB1bnBja2xxZHEgeG1tNCx4bW0wCQk7IHhtbTQ9KDQwIDQxIDQyIDQzIDQ0IDQ1IDQ2IDQ3KT1kYXRhNAorCXB1bnBja2hxZHEgeG1tMSx4bW0wCQk7IHhtbTE9KDUwIDUxIDUyIDUzIDU0IDU1IDU2IDU3KT1kYXRhNQorCisJbW92ZHFhCXhtbTcseG1tNgorCW1vdmRxYQl4bW0wLHhtbTIKKwlwYWRkdwl4bW02LHhtbTQJCTsgeG1tNj1kYXRhMytkYXRhND10bXAzCisJcGFkZHcJeG1tMix4bW0xCQk7IHhtbTI9ZGF0YTIrZGF0YTU9dG1wMgorCXBzdWJ3CXhtbTcseG1tNAkJOyB4bW03PWRhdGEzLWRhdGE0PXRtcDQKKwlwc3Vidwl4bW0wLHhtbTEJCTsgeG1tMD1kYXRhMi1kYXRhNT10bXA1CisKKwk7IC0tIEV2ZW4gcGFydAorCisJbW92ZHFhCXhtbTQseG1tMworCW1vdmRxYQl4bW0xLHhtbTUKKwlwc3Vidwl4bW0zLHhtbTYJCTsgeG1tMz10bXAxMworCXBzdWJ3CXhtbTUseG1tMgkJOyB4bW01PXRtcDEyCisJcGFkZHcJeG1tNCx4bW02CQk7IHhtbTQ9dG1wMTAKKwlwYWRkdwl4bW0xLHhtbTIJCTsgeG1tMT10bXAxMQorCisJcGFkZHcJeG1tNSx4bW0zCisJcHNsbHcJeG1tNSxQUkVfTVVMVElQTFlfU0NBTEVfQklUUworCXBtdWxodwl4bW01LFtyZWwgUFdfRjA3MDddIDsgeG1tNT16MQorCisJbW92ZHFhCXhtbTYseG1tNAorCW1vdmRxYQl4bW0yLHhtbTMKKwlwc3Vidwl4bW00LHhtbTEJCTsgeG1tND1kYXRhNAorCXBzdWJ3CXhtbTMseG1tNQkJOyB4bW0zPWRhdGE2CisJcGFkZHcJeG1tNix4bW0xCQk7IHhtbTY9ZGF0YTAKKwlwYWRkdwl4bW0yLHhtbTUJCTsgeG1tMj1kYXRhMgorCisJbW92ZHFhCVhNTVdPUkQgW1hNTUJMT0NLKDQsMCxyZHgsU0laRU9GX0RDVEVMRU0pXSwgeG1tNAorCW1vdmRxYQlYTU1XT1JEIFtYTU1CTE9DSyg2LDAscmR4LFNJWkVPRl9EQ1RFTEVNKV0sIHhtbTMKKwltb3ZkcWEJWE1NV09SRCBbWE1NQkxPQ0soMCwwLHJkeCxTSVpFT0ZfRENURUxFTSldLCB4bW02CisJbW92ZHFhCVhNTVdPUkQgW1hNTUJMT0NLKDIsMCxyZHgsU0laRU9GX0RDVEVMRU0pXSwgeG1tMgorCisJOyAtLSBPZGQgcGFydAorCisJbW92ZHFhCXhtbTEsIFhNTVdPUkQgW3drKDApXQk7IHhtbTE9dG1wNgorCW1vdmRxYQl4bW01LCBYTU1XT1JEIFt3aygxKV0JOyB4bW01PXRtcDcKKworCXBhZGR3CXhtbTcseG1tMAkJOyB4bW03PXRtcDEwCisJcGFkZHcJeG1tMCx4bW0xCQk7IHhtbTA9dG1wMTEKKwlwYWRkdwl4bW0xLHhtbTUJCTsgeG1tMT10bXAxMiwgeG1tNT10bXA3CisKKwlwc2xsdwl4bW03LFBSRV9NVUxUSVBMWV9TQ0FMRV9CSVRTCisJcHNsbHcJeG1tMSxQUkVfTVVMVElQTFlfU0NBTEVfQklUUworCisJcHNsbHcJeG1tMCxQUkVfTVVMVElQTFlfU0NBTEVfQklUUworCXBtdWxodwl4bW0wLFtyZWwgUFdfRjA3MDddIDsgeG1tMD16MworCisJbW92ZHFhCXhtbTQseG1tNwkJOyB4bW00PXRtcDEwCisJcHN1YncJeG1tNyx4bW0xCisJcG11bGh3CXhtbTcsW3JlbCBQV19GMDM4Ml0gOyB4bW03PXo1CisJcG11bGh3CXhtbTQsW3JlbCBQV19GMDU0MV0gOyB4bW00PU1VTFRJUExZKHRtcDEwLEZJWF8wXzU0MTE5NikKKwlwbXVsaHcJeG1tMSxbcmVsIFBXX0YxMzA2XSA7IHhtbTE9TVVMVElQTFkodG1wMTIsRklYXzFfMzA2NTYyKQorCXBhZGR3CXhtbTQseG1tNwkJOyB4bW00PXoyCisJcGFkZHcJeG1tMSx4bW03CQk7IHhtbTE9ejQKKworCW1vdmRxYQl4bW0zLHhtbTUKKwlwc3Vidwl4bW01LHhtbTAJCTsgeG1tNT16MTMKKwlwYWRkdwl4bW0zLHhtbTAJCTsgeG1tMz16MTEKKworCW1vdmRxYQl4bW02LHhtbTUKKwltb3ZkcWEJeG1tMix4bW0zCisJcHN1YncJeG1tNSx4bW00CQk7IHhtbTU9ZGF0YTMKKwlwc3Vidwl4bW0zLHhtbTEJCTsgeG1tMz1kYXRhNworCXBhZGR3CXhtbTYseG1tNAkJOyB4bW02PWRhdGE1CisJcGFkZHcJeG1tMix4bW0xCQk7IHhtbTI9ZGF0YTEKKworCW1vdmRxYQlYTU1XT1JEIFtYTU1CTE9DSygzLDAscmR4LFNJWkVPRl9EQ1RFTEVNKV0sIHhtbTUKKwltb3ZkcWEJWE1NV09SRCBbWE1NQkxPQ0soNywwLHJkeCxTSVpFT0ZfRENURUxFTSldLCB4bW0zCisJbW92ZHFhCVhNTVdPUkQgW1hNTUJMT0NLKDUsMCxyZHgsU0laRU9GX0RDVEVMRU0pXSwgeG1tNgorCW1vdmRxYQlYTU1XT1JEIFtYTU1CTE9DSygxLDAscmR4LFNJWkVPRl9EQ1RFTEVNKV0sIHhtbTIKKworCXVuY29sbGVjdF9hcmdzCisJbW92CXJzcCxyYnAJCTsgcnNwIDwtIGFsaWduZWQgcmJwCisJcG9wCXJzcAkJOyByc3AgPC0gb3JpZ2luYWwgcmJwCisJcG9wCXJicAorCXJldAorCis7IEZvciBzb21lIHJlYXNvbiwgdGhlIE9TIFggbGlua2VyIGRvZXMgbm90IGhvbm9yIHRoZSByZXF1ZXN0IHRvIGFsaWduIHRoZQorOyBzZWdtZW50IHVubGVzcyB3ZSBkbyB0aGlzLgorCWFsaWduCTE2CmRpZmYgLS1naXQgYS9zaW1kL2pmc3MyZnN0LmFzbSBiL3NpbWQvamZzczJmc3QuYXNtCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjczZmM5ZTUKLS0tIC9kZXYvbnVsbAorKysgYi9zaW1kL2pmc3MyZnN0LmFzbQpAQCAtMCwwICsxLDQwNCBAQAorOworOyBqZnNzMmZzdC5hc20gLSBmYXN0IGludGVnZXIgRkRDVCAoU1NFMikKKzsKKzsgQ29weXJpZ2h0IDIwMDkgUGllcnJlIE9zc21hbiA8b3NzbWFuQGNlbmRpby5zZT4gZm9yIENlbmRpbyBBQgorOworOyBCYXNlZCBvbgorOyB4ODYgU0lNRCBleHRlbnNpb24gZm9yIElKRyBKUEVHIGxpYnJhcnkKKzsgQ29weXJpZ2h0IChDKSAxOTk5LTIwMDYsIE1JWUFTQUtBIE1hc2FydS4KKzsgRm9yIGNvbmRpdGlvbnMgb2YgZGlzdHJpYnV0aW9uIGFuZCB1c2UsIHNlZSBjb3B5cmlnaHQgbm90aWNlIGluIGpzaW1kZXh0LmluYworOworOyBUaGlzIGZpbGUgc2hvdWxkIGJlIGFzc2VtYmxlZCB3aXRoIE5BU00gKE5ldHdpZGUgQXNzZW1ibGVyKSwKKzsgY2FuICpub3QqIGJlIGFzc2VtYmxlZCB3aXRoIE1pY3Jvc29mdCdzIE1BU00gb3IgYW55IGNvbXBhdGlibGUKKzsgYXNzZW1ibGVyIChpbmNsdWRpbmcgQm9ybGFuZCdzIFR1cmJvIEFzc2VtYmxlcikuCis7IE5BU00gaXMgYXZhaWxhYmxlIGZyb20gaHR0cDovL25hc20uc291cmNlZm9yZ2UubmV0LyBvcgorOyBodHRwOi8vc291cmNlZm9yZ2UubmV0L3Byb2plY3Qvc2hvd2ZpbGVzLnBocD9ncm91cF9pZD02MjA4Cis7Cis7IFRoaXMgZmlsZSBjb250YWlucyBhIGZhc3QsIG5vdCBzbyBhY2N1cmF0ZSBpbnRlZ2VyIGltcGxlbWVudGF0aW9uIG9mCis7IHRoZSBmb3J3YXJkIERDVCAoRGlzY3JldGUgQ29zaW5lIFRyYW5zZm9ybSkuIFRoZSBmb2xsb3dpbmcgY29kZSBpcworOyBiYXNlZCBkaXJlY3RseSBvbiB0aGUgSUpHJ3Mgb3JpZ2luYWwgamZkY3Rmc3QuYzsgc2VlIHRoZSBqZmRjdGZzdC5jCis7IGZvciBtb3JlIGRldGFpbHMuCis7Cis7IFtUQUI4XQorCislaW5jbHVkZSAianNpbWRleHQuaW5jIgorJWluY2x1ZGUgImpkY3QuaW5jIgorCis7IC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKyVkZWZpbmUgQ09OU1RfQklUUwk4CTsgMTQgaXMgYWxzbyBPSy4KKworJWlmIENPTlNUX0JJVFMgPT0gOAorRl8wXzM4MgllcXUJIDk4CQk7IEZJWCgwLjM4MjY4MzQzMykKK0ZfMF81NDEJZXF1CTEzOQkJOyBGSVgoMC41NDExOTYxMDApCitGXzBfNzA3CWVxdQkxODEJCTsgRklYKDAuNzA3MTA2NzgxKQorRl8xXzMwNgllcXUJMzM0CQk7IEZJWCgxLjMwNjU2Mjk2NSkKKyVlbHNlCis7IE5BU00gY2Fubm90IGRvIGNvbXBpbGUtdGltZSBhcml0aG1ldGljIG9uIGZsb2F0aW5nLXBvaW50IGNvbnN0YW50cy4KKyVkZWZpbmUgREVTQ0FMRSh4LG4pICAoKCh4KSsoMTw8KChuKS0xKSkpPj4obikpCitGXzBfMzgyCWVxdQlERVNDQUxFKCA0MTA5MDMyMDcsMzAtQ09OU1RfQklUUykJOyBGSVgoMC4zODI2ODM0MzMpCitGXzBfNTQxCWVxdQlERVNDQUxFKCA1ODExMDQ4ODcsMzAtQ09OU1RfQklUUykJOyBGSVgoMC41NDExOTYxMDApCitGXzBfNzA3CWVxdQlERVNDQUxFKCA3NTkyNTAxMjQsMzAtQ09OU1RfQklUUykJOyBGSVgoMC43MDcxMDY3ODEpCitGXzFfMzA2CWVxdQlERVNDQUxFKDE0MDI5MTEzMDEsMzAtQ09OU1RfQklUUykJOyBGSVgoMS4zMDY1NjI5NjUpCislZW5kaWYKKworOyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCVNFQ1RJT04JU0VHX0NPTlNUCisKKzsgUFJFX01VTFRJUExZX1NDQUxFX0JJVFMgPD0gMiAodG8gYXZvaWQgb3ZlcmZsb3cpCis7IENPTlNUX0JJVFMgKyBDT05TVF9TSElGVCArIFBSRV9NVUxUSVBMWV9TQ0FMRV9CSVRTID09IDE2IChmb3IgcG11bGh3KQorCislZGVmaW5lIFBSRV9NVUxUSVBMWV9TQ0FMRV9CSVRTICAgMgorJWRlZmluZSBDT05TVF9TSElGVCAgICAgKDE2IC0gUFJFX01VTFRJUExZX1NDQUxFX0JJVFMgLSBDT05TVF9CSVRTKQorCisJYWxpZ256CTE2CisJZ2xvYmFsCUVYVE4oamNvbnN0X2ZkY3RfaWZhc3Rfc3NlMikKKworRVhUTihqY29uc3RfZmRjdF9pZmFzdF9zc2UyKToKKworUFdfRjA3MDcJdGltZXMgOCBkdyAgRl8wXzcwNyA8PCBDT05TVF9TSElGVAorUFdfRjAzODIJdGltZXMgOCBkdyAgRl8wXzM4MiA8PCBDT05TVF9TSElGVAorUFdfRjA1NDEJdGltZXMgOCBkdyAgRl8wXzU0MSA8PCBDT05TVF9TSElGVAorUFdfRjEzMDYJdGltZXMgOCBkdyAgRl8xXzMwNiA8PCBDT05TVF9TSElGVAorCisJYWxpZ256CTE2CisKKzsgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKwlTRUNUSU9OCVNFR19URVhUCisJQklUUwkzMgorOworOyBQZXJmb3JtIHRoZSBmb3J3YXJkIERDVCBvbiBvbmUgYmxvY2sgb2Ygc2FtcGxlcy4KKzsKKzsgR0xPQkFMKHZvaWQpCis7IGpzaW1kX2ZkY3RfaWZhc3Rfc3NlMiAoRENURUxFTSAqIGRhdGEpCis7CisKKyVkZWZpbmUgZGF0YShiKQkJKGIpKzgJCTsgRENURUxFTSAqIGRhdGEKKworJWRlZmluZSBvcmlnaW5hbF9lYnAJZWJwKzAKKyVkZWZpbmUgd2soaSkJCWVicC0oV0tfTlVNLShpKSkqU0laRU9GX1hNTVdPUkQJOyB4bW13b3JkIHdrW1dLX05VTV0KKyVkZWZpbmUgV0tfTlVNCQkyCisKKwlhbGlnbgkxNgorCWdsb2JhbAlFWFROKGpzaW1kX2ZkY3RfaWZhc3Rfc3NlMikKKworRVhUTihqc2ltZF9mZGN0X2lmYXN0X3NzZTIpOgorCXB1c2gJZWJwCisJbW92CWVheCxlc3AJCQkJOyBlYXggPSBvcmlnaW5hbCBlYnAKKwlzdWIJZXNwLCBieXRlIDQKKwlhbmQJZXNwLCBieXRlICgtU0laRU9GX1hNTVdPUkQpCTsgYWxpZ24gdG8gMTI4IGJpdHMKKwltb3YJW2VzcF0sZWF4CisJbW92CWVicCxlc3AJCQkJOyBlYnAgPSBhbGlnbmVkIGVicAorCWxlYQllc3AsIFt3aygwKV0KKwlwdXNocGljCWVieAorOwlwdXNoCWVjeAkJOyB1bnVzZWQKKzsJcHVzaAllZHgJCTsgbmVlZCBub3QgYmUgcHJlc2VydmVkCis7CXB1c2gJZXNpCQk7IHVudXNlZAorOwlwdXNoCWVkaQkJOyB1bnVzZWQKKworCWdldF9HT1QJZWJ4CQk7IGdldCBHT1QgYWRkcmVzcworCisJOyAtLS0tIFBhc3MgMTogcHJvY2VzcyByb3dzLgorCisJbW92CWVkeCwgUE9JTlRFUiBbZGF0YShlYXgpXQk7IChEQ1RFTEVNICopCisKKwltb3ZkcWEJeG1tMCwgWE1NV09SRCBbWE1NQkxPQ0soMCwwLGVkeCxTSVpFT0ZfRENURUxFTSldCisJbW92ZHFhCXhtbTEsIFhNTVdPUkQgW1hNTUJMT0NLKDEsMCxlZHgsU0laRU9GX0RDVEVMRU0pXQorCW1vdmRxYQl4bW0yLCBYTU1XT1JEIFtYTU1CTE9DSygyLDAsZWR4LFNJWkVPRl9EQ1RFTEVNKV0KKwltb3ZkcWEJeG1tMywgWE1NV09SRCBbWE1NQkxPQ0soMywwLGVkeCxTSVpFT0ZfRENURUxFTSldCisKKwk7IHhtbTA9KDAwIDAxIDAyIDAzIDA0IDA1IDA2IDA3KSwgeG1tMj0oMjAgMjEgMjIgMjMgMjQgMjUgMjYgMjcpCisJOyB4bW0xPSgxMCAxMSAxMiAxMyAxNCAxNSAxNiAxNyksIHhtbTM9KDMwIDMxIDMyIDMzIDM0IDM1IDM2IDM3KQorCisJbW92ZHFhICAgIHhtbTQseG1tMAkJOyB0cmFuc3Bvc2UgY29lZmZpY2llbnRzKHBoYXNlIDEpCisJcHVucGNrbHdkIHhtbTAseG1tMQkJOyB4bW0wPSgwMCAxMCAwMSAxMSAwMiAxMiAwMyAxMykKKwlwdW5wY2tod2QgeG1tNCx4bW0xCQk7IHhtbTQ9KDA0IDE0IDA1IDE1IDA2IDE2IDA3IDE3KQorCW1vdmRxYSAgICB4bW01LHhtbTIJCTsgdHJhbnNwb3NlIGNvZWZmaWNpZW50cyhwaGFzZSAxKQorCXB1bnBja2x3ZCB4bW0yLHhtbTMJCTsgeG1tMj0oMjAgMzAgMjEgMzEgMjIgMzIgMjMgMzMpCisJcHVucGNraHdkIHhtbTUseG1tMwkJOyB4bW01PSgyNCAzNCAyNSAzNSAyNiAzNiAyNyAzNykKKworCW1vdmRxYQl4bW02LCBYTU1XT1JEIFtYTU1CTE9DSyg0LDAsZWR4LFNJWkVPRl9EQ1RFTEVNKV0KKwltb3ZkcWEJeG1tNywgWE1NV09SRCBbWE1NQkxPQ0soNSwwLGVkeCxTSVpFT0ZfRENURUxFTSldCisJbW92ZHFhCXhtbTEsIFhNTVdPUkQgW1hNTUJMT0NLKDYsMCxlZHgsU0laRU9GX0RDVEVMRU0pXQorCW1vdmRxYQl4bW0zLCBYTU1XT1JEIFtYTU1CTE9DSyg3LDAsZWR4LFNJWkVPRl9EQ1RFTEVNKV0KKworCTsgeG1tNj0oIDQgMTIgMjAgMjggMzYgNDQgNTIgNjApLCB4bW0xPSggNiAxNCAyMiAzMCAzOCA0NiA1NCA2MikKKwk7IHhtbTc9KCA1IDEzIDIxIDI5IDM3IDQ1IDUzIDYxKSwgeG1tMz0oIDcgMTUgMjMgMzEgMzkgNDcgNTUgNjMpCisKKwltb3ZkcWEJWE1NV09SRCBbd2soMCldLCB4bW0yCTsgd2soMCk9KDIwIDMwIDIxIDMxIDIyIDMyIDIzIDMzKQorCW1vdmRxYQlYTU1XT1JEIFt3aygxKV0sIHhtbTUJOyB3aygxKT0oMjQgMzQgMjUgMzUgMjYgMzYgMjcgMzcpCisKKwltb3ZkcWEgICAgeG1tMix4bW02CQk7IHRyYW5zcG9zZSBjb2VmZmljaWVudHMocGhhc2UgMSkKKwlwdW5wY2tsd2QgeG1tNix4bW03CQk7IHhtbTY9KDQwIDUwIDQxIDUxIDQyIDUyIDQzIDUzKQorCXB1bnBja2h3ZCB4bW0yLHhtbTcJCTsgeG1tMj0oNDQgNTQgNDUgNTUgNDYgNTYgNDcgNTcpCisJbW92ZHFhICAgIHhtbTUseG1tMQkJOyB0cmFuc3Bvc2UgY29lZmZpY2llbnRzKHBoYXNlIDEpCisJcHVucGNrbHdkIHhtbTEseG1tMwkJOyB4bW0xPSg2MCA3MCA2MSA3MSA2MiA3MiA2MyA3MykKKwlwdW5wY2tod2QgeG1tNSx4bW0zCQk7IHhtbTU9KDY0IDc0IDY1IDc1IDY2IDc2IDY3IDc3KQorCisJbW92ZHFhICAgIHhtbTcseG1tNgkJOyB0cmFuc3Bvc2UgY29lZmZpY2llbnRzKHBoYXNlIDIpCisJcHVucGNrbGRxIHhtbTYseG1tMQkJOyB4bW02PSg0MCA1MCA2MCA3MCA0MSA1MSA2MSA3MSkKKwlwdW5wY2toZHEgeG1tNyx4bW0xCQk7IHhtbTc9KDQyIDUyIDYyIDcyIDQzIDUzIDYzIDczKQorCW1vdmRxYSAgICB4bW0zLHhtbTIJCTsgdHJhbnNwb3NlIGNvZWZmaWNpZW50cyhwaGFzZSAyKQorCXB1bnBja2xkcSB4bW0yLHhtbTUJCTsgeG1tMj0oNDQgNTQgNjQgNzQgNDUgNTUgNjUgNzUpCisJcHVucGNraGRxIHhtbTMseG1tNQkJOyB4bW0zPSg0NiA1NiA2NiA3NiA0NyA1NyA2NyA3NykKKworCW1vdmRxYQl4bW0xLCBYTU1XT1JEIFt3aygwKV0JOyB4bW0xPSgyMCAzMCAyMSAzMSAyMiAzMiAyMyAzMykKKwltb3ZkcWEJeG1tNSwgWE1NV09SRCBbd2soMSldCTsgeG1tNT0oMjQgMzQgMjUgMzUgMjYgMzYgMjcgMzcpCisJbW92ZHFhCVhNTVdPUkQgW3drKDApXSwgeG1tNwk7IHdrKDApPSg0MiA1MiA2MiA3MiA0MyA1MyA2MyA3MykKKwltb3ZkcWEJWE1NV09SRCBbd2soMSldLCB4bW0yCTsgd2soMSk9KDQ0IDU0IDY0IDc0IDQ1IDU1IDY1IDc1KQorCisJbW92ZHFhICAgIHhtbTcseG1tMAkJOyB0cmFuc3Bvc2UgY29lZmZpY2llbnRzKHBoYXNlIDIpCisJcHVucGNrbGRxIHhtbTAseG1tMQkJOyB4bW0wPSgwMCAxMCAyMCAzMCAwMSAxMSAyMSAzMSkKKwlwdW5wY2toZHEgeG1tNyx4bW0xCQk7IHhtbTc9KDAyIDEyIDIyIDMyIDAzIDEzIDIzIDMzKQorCW1vdmRxYSAgICB4bW0yLHhtbTQJCTsgdHJhbnNwb3NlIGNvZWZmaWNpZW50cyhwaGFzZSAyKQorCXB1bnBja2xkcSB4bW00LHhtbTUJCTsgeG1tND0oMDQgMTQgMjQgMzQgMDUgMTUgMjUgMzUpCisJcHVucGNraGRxIHhtbTIseG1tNQkJOyB4bW0yPSgwNiAxNiAyNiAzNiAwNyAxNyAyNyAzNykKKworCW1vdmRxYSAgICAgeG1tMSx4bW0wCQk7IHRyYW5zcG9zZSBjb2VmZmljaWVudHMocGhhc2UgMykKKwlwdW5wY2tscWRxIHhtbTAseG1tNgkJOyB4bW0wPSgwMCAxMCAyMCAzMCA0MCA1MCA2MCA3MCk9ZGF0YTAKKwlwdW5wY2tocWRxIHhtbTEseG1tNgkJOyB4bW0xPSgwMSAxMSAyMSAzMSA0MSA1MSA2MSA3MSk9ZGF0YTEKKwltb3ZkcWEgICAgIHhtbTUseG1tMgkJOyB0cmFuc3Bvc2UgY29lZmZpY2llbnRzKHBoYXNlIDMpCisJcHVucGNrbHFkcSB4bW0yLHhtbTMJCTsgeG1tMj0oMDYgMTYgMjYgMzYgNDYgNTYgNjYgNzYpPWRhdGE2CisJcHVucGNraHFkcSB4bW01LHhtbTMJCTsgeG1tNT0oMDcgMTcgMjcgMzcgNDcgNTcgNjcgNzcpPWRhdGE3CisKKwltb3ZkcWEJeG1tNix4bW0xCisJbW92ZHFhCXhtbTMseG1tMAorCXBzdWJ3CXhtbTEseG1tMgkJOyB4bW0xPWRhdGExLWRhdGE2PXRtcDYKKwlwc3Vidwl4bW0wLHhtbTUJCTsgeG1tMD1kYXRhMC1kYXRhNz10bXA3CisJcGFkZHcJeG1tNix4bW0yCQk7IHhtbTY9ZGF0YTErZGF0YTY9dG1wMQorCXBhZGR3CXhtbTMseG1tNQkJOyB4bW0zPWRhdGEwK2RhdGE3PXRtcDAKKworCW1vdmRxYQl4bW0yLCBYTU1XT1JEIFt3aygwKV0JOyB4bW0yPSg0MiA1MiA2MiA3MiA0MyA1MyA2MyA3MykKKwltb3ZkcWEJeG1tNSwgWE1NV09SRCBbd2soMSldCTsgeG1tNT0oNDQgNTQgNjQgNzQgNDUgNTUgNjUgNzUpCisJbW92ZHFhCVhNTVdPUkQgW3drKDApXSwgeG1tMQk7IHdrKDApPXRtcDYKKwltb3ZkcWEJWE1NV09SRCBbd2soMSldLCB4bW0wCTsgd2soMSk9dG1wNworCisJbW92ZHFhICAgICB4bW0xLHhtbTcJCTsgdHJhbnNwb3NlIGNvZWZmaWNpZW50cyhwaGFzZSAzKQorCXB1bnBja2xxZHEgeG1tNyx4bW0yCQk7IHhtbTc9KDAyIDEyIDIyIDMyIDQyIDUyIDYyIDcyKT1kYXRhMgorCXB1bnBja2hxZHEgeG1tMSx4bW0yCQk7IHhtbTE9KDAzIDEzIDIzIDMzIDQzIDUzIDYzIDczKT1kYXRhMworCW1vdmRxYSAgICAgeG1tMCx4bW00CQk7IHRyYW5zcG9zZSBjb2VmZmljaWVudHMocGhhc2UgMykKKwlwdW5wY2tscWRxIHhtbTQseG1tNQkJOyB4bW00PSgwNCAxNCAyNCAzNCA0NCA1NCA2NCA3NCk9ZGF0YTQKKwlwdW5wY2tocWRxIHhtbTAseG1tNQkJOyB4bW0wPSgwNSAxNSAyNSAzNSA0NSA1NSA2NSA3NSk9ZGF0YTUKKworCW1vdmRxYQl4bW0yLHhtbTEKKwltb3ZkcWEJeG1tNSx4bW03CisJcGFkZHcJeG1tMSx4bW00CQk7IHhtbTE9ZGF0YTMrZGF0YTQ9dG1wMworCXBhZGR3CXhtbTcseG1tMAkJOyB4bW03PWRhdGEyK2RhdGE1PXRtcDIKKwlwc3Vidwl4bW0yLHhtbTQJCTsgeG1tMj1kYXRhMy1kYXRhND10bXA0CisJcHN1YncJeG1tNSx4bW0wCQk7IHhtbTU9ZGF0YTItZGF0YTU9dG1wNQorCisJOyAtLSBFdmVuIHBhcnQKKworCW1vdmRxYQl4bW00LHhtbTMKKwltb3ZkcWEJeG1tMCx4bW02CisJcHN1YncJeG1tMyx4bW0xCQk7IHhtbTM9dG1wMTMKKwlwc3Vidwl4bW02LHhtbTcJCTsgeG1tNj10bXAxMgorCXBhZGR3CXhtbTQseG1tMQkJOyB4bW00PXRtcDEwCisJcGFkZHcJeG1tMCx4bW03CQk7IHhtbTA9dG1wMTEKKworCXBhZGR3CXhtbTYseG1tMworCXBzbGx3CXhtbTYsUFJFX01VTFRJUExZX1NDQUxFX0JJVFMKKwlwbXVsaHcJeG1tNixbR09UT0ZGKGVieCxQV19GMDcwNyldIDsgeG1tNj16MQorCisJbW92ZHFhCXhtbTEseG1tNAorCW1vdmRxYQl4bW03LHhtbTMKKwlwc3Vidwl4bW00LHhtbTAJCTsgeG1tND1kYXRhNAorCXBzdWJ3CXhtbTMseG1tNgkJOyB4bW0zPWRhdGE2CisJcGFkZHcJeG1tMSx4bW0wCQk7IHhtbTE9ZGF0YTAKKwlwYWRkdwl4bW03LHhtbTYJCTsgeG1tNz1kYXRhMgorCisJbW92ZHFhCXhtbTAsIFhNTVdPUkQgW3drKDApXQk7IHhtbTA9dG1wNgorCW1vdmRxYQl4bW02LCBYTU1XT1JEIFt3aygxKV0JOyB4bW02PXRtcDcKKwltb3ZkcWEJWE1NV09SRCBbd2soMCldLCB4bW00CTsgd2soMCk9ZGF0YTQKKwltb3ZkcWEJWE1NV09SRCBbd2soMSldLCB4bW0zCTsgd2soMSk9ZGF0YTYKKworCTsgLS0gT2RkIHBhcnQKKworCXBhZGR3CXhtbTIseG1tNQkJOyB4bW0yPXRtcDEwCisJcGFkZHcJeG1tNSx4bW0wCQk7IHhtbTU9dG1wMTEKKwlwYWRkdwl4bW0wLHhtbTYJCTsgeG1tMD10bXAxMiwgeG1tNj10bXA3CisKKwlwc2xsdwl4bW0yLFBSRV9NVUxUSVBMWV9TQ0FMRV9CSVRTCisJcHNsbHcJeG1tMCxQUkVfTVVMVElQTFlfU0NBTEVfQklUUworCisJcHNsbHcJeG1tNSxQUkVfTVVMVElQTFlfU0NBTEVfQklUUworCXBtdWxodwl4bW01LFtHT1RPRkYoZWJ4LFBXX0YwNzA3KV0gOyB4bW01PXozCisKKwltb3ZkcWEJeG1tNCx4bW0yCQk7IHhtbTQ9dG1wMTAKKwlwc3Vidwl4bW0yLHhtbTAKKwlwbXVsaHcJeG1tMixbR09UT0ZGKGVieCxQV19GMDM4MildIDsgeG1tMj16NQorCXBtdWxodwl4bW00LFtHT1RPRkYoZWJ4LFBXX0YwNTQxKV0gOyB4bW00PU1VTFRJUExZKHRtcDEwLEZJWF8wXzU0MTE5NikKKwlwbXVsaHcJeG1tMCxbR09UT0ZGKGVieCxQV19GMTMwNildIDsgeG1tMD1NVUxUSVBMWSh0bXAxMixGSVhfMV8zMDY1NjIpCisJcGFkZHcJeG1tNCx4bW0yCQk7IHhtbTQ9ejIKKwlwYWRkdwl4bW0wLHhtbTIJCTsgeG1tMD16NAorCisJbW92ZHFhCXhtbTMseG1tNgorCXBzdWJ3CXhtbTYseG1tNQkJOyB4bW02PXoxMworCXBhZGR3CXhtbTMseG1tNQkJOyB4bW0zPXoxMQorCisJbW92ZHFhCXhtbTIseG1tNgorCW1vdmRxYQl4bW01LHhtbTMKKwlwc3Vidwl4bW02LHhtbTQJCTsgeG1tNj1kYXRhMworCXBzdWJ3CXhtbTMseG1tMAkJOyB4bW0zPWRhdGE3CisJcGFkZHcJeG1tMix4bW00CQk7IHhtbTI9ZGF0YTUKKwlwYWRkdwl4bW01LHhtbTAJCTsgeG1tNT1kYXRhMQorCisJOyAtLS0tIFBhc3MgMjogcHJvY2VzcyBjb2x1bW5zLgorCis7CW1vdgllZHgsIFBPSU5URVIgW2RhdGEoZWF4KV0JOyAoRENURUxFTSAqKQorCisJOyB4bW0xPSgwMCAxMCAyMCAzMCA0MCA1MCA2MCA3MCksIHhtbTc9KDAyIDEyIDIyIDMyIDQyIDUyIDYyIDcyKQorCTsgeG1tNT0oMDEgMTEgMjEgMzEgNDEgNTEgNjEgNzEpLCB4bW02PSgwMyAxMyAyMyAzMyA0MyA1MyA2MyA3MykKKworCW1vdmRxYSAgICB4bW00LHhtbTEJCTsgdHJhbnNwb3NlIGNvZWZmaWNpZW50cyhwaGFzZSAxKQorCXB1bnBja2x3ZCB4bW0xLHhtbTUJCTsgeG1tMT0oMDAgMDEgMTAgMTEgMjAgMjEgMzAgMzEpCisJcHVucGNraHdkIHhtbTQseG1tNQkJOyB4bW00PSg0MCA0MSA1MCA1MSA2MCA2MSA3MCA3MSkKKwltb3ZkcWEgICAgeG1tMCx4bW03CQk7IHRyYW5zcG9zZSBjb2VmZmljaWVudHMocGhhc2UgMSkKKwlwdW5wY2tsd2QgeG1tNyx4bW02CQk7IHhtbTc9KDAyIDAzIDEyIDEzIDIyIDIzIDMyIDMzKQorCXB1bnBja2h3ZCB4bW0wLHhtbTYJCTsgeG1tMD0oNDIgNDMgNTIgNTMgNjIgNjMgNzIgNzMpCisKKwltb3ZkcWEJeG1tNSwgWE1NV09SRCBbd2soMCldCTsgeG1tNT1jb2w0CisJbW92ZHFhCXhtbTYsIFhNTVdPUkQgW3drKDEpXQk7IHhtbTY9Y29sNgorCisJOyB4bW01PSgwNCAxNCAyNCAzNCA0NCA1NCA2NCA3NCksIHhtbTY9KDA2IDE2IDI2IDM2IDQ2IDU2IDY2IDc2KQorCTsgeG1tMj0oMDUgMTUgMjUgMzUgNDUgNTUgNjUgNzUpLCB4bW0zPSgwNyAxNyAyNyAzNyA0NyA1NyA2NyA3NykKKworCW1vdmRxYQlYTU1XT1JEIFt3aygwKV0sIHhtbTcJOyB3aygwKT0oMDIgMDMgMTIgMTMgMjIgMjMgMzIgMzMpCisJbW92ZHFhCVhNTVdPUkQgW3drKDEpXSwgeG1tMAk7IHdrKDEpPSg0MiA0MyA1MiA1MyA2MiA2MyA3MiA3MykKKworCW1vdmRxYSAgICB4bW03LHhtbTUJCTsgdHJhbnNwb3NlIGNvZWZmaWNpZW50cyhwaGFzZSAxKQorCXB1bnBja2x3ZCB4bW01LHhtbTIJCTsgeG1tNT0oMDQgMDUgMTQgMTUgMjQgMjUgMzQgMzUpCisJcHVucGNraHdkIHhtbTcseG1tMgkJOyB4bW03PSg0NCA0NSA1NCA1NSA2NCA2NSA3NCA3NSkKKwltb3ZkcWEgICAgeG1tMCx4bW02CQk7IHRyYW5zcG9zZSBjb2VmZmljaWVudHMocGhhc2UgMSkKKwlwdW5wY2tsd2QgeG1tNix4bW0zCQk7IHhtbTY9KDA2IDA3IDE2IDE3IDI2IDI3IDM2IDM3KQorCXB1bnBja2h3ZCB4bW0wLHhtbTMJCTsgeG1tMD0oNDYgNDcgNTYgNTcgNjYgNjcgNzYgNzcpCisKKwltb3ZkcWEgICAgeG1tMix4bW01CQk7IHRyYW5zcG9zZSBjb2VmZmljaWVudHMocGhhc2UgMikKKwlwdW5wY2tsZHEgeG1tNSx4bW02CQk7IHhtbTU9KDA0IDA1IDA2IDA3IDE0IDE1IDE2IDE3KQorCXB1bnBja2hkcSB4bW0yLHhtbTYJCTsgeG1tMj0oMjQgMjUgMjYgMjcgMzQgMzUgMzYgMzcpCisJbW92ZHFhICAgIHhtbTMseG1tNwkJOyB0cmFuc3Bvc2UgY29lZmZpY2llbnRzKHBoYXNlIDIpCisJcHVucGNrbGRxIHhtbTcseG1tMAkJOyB4bW03PSg0NCA0NSA0NiA0NyA1NCA1NSA1NiA1NykKKwlwdW5wY2toZHEgeG1tMyx4bW0wCQk7IHhtbTM9KDY0IDY1IDY2IDY3IDc0IDc1IDc2IDc3KQorCisJbW92ZHFhCXhtbTYsIFhNTVdPUkQgW3drKDApXQk7IHhtbTY9KDAyIDAzIDEyIDEzIDIyIDIzIDMyIDMzKQorCW1vdmRxYQl4bW0wLCBYTU1XT1JEIFt3aygxKV0JOyB4bW0wPSg0MiA0MyA1MiA1MyA2MiA2MyA3MiA3MykKKwltb3ZkcWEJWE1NV09SRCBbd2soMCldLCB4bW0yCTsgd2soMCk9KDI0IDI1IDI2IDI3IDM0IDM1IDM2IDM3KQorCW1vdmRxYQlYTU1XT1JEIFt3aygxKV0sIHhtbTcJOyB3aygxKT0oNDQgNDUgNDYgNDcgNTQgNTUgNTYgNTcpCisKKwltb3ZkcWEgICAgeG1tMix4bW0xCQk7IHRyYW5zcG9zZSBjb2VmZmljaWVudHMocGhhc2UgMikKKwlwdW5wY2tsZHEgeG1tMSx4bW02CQk7IHhtbTE9KDAwIDAxIDAyIDAzIDEwIDExIDEyIDEzKQorCXB1bnBja2hkcSB4bW0yLHhtbTYJCTsgeG1tMj0oMjAgMjEgMjIgMjMgMzAgMzEgMzIgMzMpCisJbW92ZHFhICAgIHhtbTcseG1tNAkJOyB0cmFuc3Bvc2UgY29lZmZpY2llbnRzKHBoYXNlIDIpCisJcHVucGNrbGRxIHhtbTQseG1tMAkJOyB4bW00PSg0MCA0MSA0MiA0MyA1MCA1MSA1MiA1MykKKwlwdW5wY2toZHEgeG1tNyx4bW0wCQk7IHhtbTc9KDYwIDYxIDYyIDYzIDcwIDcxIDcyIDczKQorCisJbW92ZHFhICAgICB4bW02LHhtbTEJCTsgdHJhbnNwb3NlIGNvZWZmaWNpZW50cyhwaGFzZSAzKQorCXB1bnBja2xxZHEgeG1tMSx4bW01CQk7IHhtbTE9KDAwIDAxIDAyIDAzIDA0IDA1IDA2IDA3KT1kYXRhMAorCXB1bnBja2hxZHEgeG1tNix4bW01CQk7IHhtbTY9KDEwIDExIDEyIDEzIDE0IDE1IDE2IDE3KT1kYXRhMQorCW1vdmRxYSAgICAgeG1tMCx4bW03CQk7IHRyYW5zcG9zZSBjb2VmZmljaWVudHMocGhhc2UgMykKKwlwdW5wY2tscWRxIHhtbTcseG1tMwkJOyB4bW03PSg2MCA2MSA2MiA2MyA2NCA2NSA2NiA2Nyk9ZGF0YTYKKwlwdW5wY2tocWRxIHhtbTAseG1tMwkJOyB4bW0wPSg3MCA3MSA3MiA3MyA3NCA3NSA3NiA3Nyk9ZGF0YTcKKworCW1vdmRxYQl4bW01LHhtbTYKKwltb3ZkcWEJeG1tMyx4bW0xCisJcHN1YncJeG1tNix4bW03CQk7IHhtbTY9ZGF0YTEtZGF0YTY9dG1wNgorCXBzdWJ3CXhtbTEseG1tMAkJOyB4bW0xPWRhdGEwLWRhdGE3PXRtcDcKKwlwYWRkdwl4bW01LHhtbTcJCTsgeG1tNT1kYXRhMStkYXRhNj10bXAxCisJcGFkZHcJeG1tMyx4bW0wCQk7IHhtbTM9ZGF0YTArZGF0YTc9dG1wMAorCisJbW92ZHFhCXhtbTcsIFhNTVdPUkQgW3drKDApXQk7IHhtbTc9KDI0IDI1IDI2IDI3IDM0IDM1IDM2IDM3KQorCW1vdmRxYQl4bW0wLCBYTU1XT1JEIFt3aygxKV0JOyB4bW0wPSg0NCA0NSA0NiA0NyA1NCA1NSA1NiA1NykKKwltb3ZkcWEJWE1NV09SRCBbd2soMCldLCB4bW02CTsgd2soMCk9dG1wNgorCW1vdmRxYQlYTU1XT1JEIFt3aygxKV0sIHhtbTEJOyB3aygxKT10bXA3CisKKwltb3ZkcWEgICAgIHhtbTYseG1tMgkJOyB0cmFuc3Bvc2UgY29lZmZpY2llbnRzKHBoYXNlIDMpCisJcHVucGNrbHFkcSB4bW0yLHhtbTcJCTsgeG1tMj0oMjAgMjEgMjIgMjMgMjQgMjUgMjYgMjcpPWRhdGEyCisJcHVucGNraHFkcSB4bW02LHhtbTcJCTsgeG1tNj0oMzAgMzEgMzIgMzMgMzQgMzUgMzYgMzcpPWRhdGEzCisJbW92ZHFhICAgICB4bW0xLHhtbTQJCTsgdHJhbnNwb3NlIGNvZWZmaWNpZW50cyhwaGFzZSAzKQorCXB1bnBja2xxZHEgeG1tNCx4bW0wCQk7IHhtbTQ9KDQwIDQxIDQyIDQzIDQ0IDQ1IDQ2IDQ3KT1kYXRhNAorCXB1bnBja2hxZHEgeG1tMSx4bW0wCQk7IHhtbTE9KDUwIDUxIDUyIDUzIDU0IDU1IDU2IDU3KT1kYXRhNQorCisJbW92ZHFhCXhtbTcseG1tNgorCW1vdmRxYQl4bW0wLHhtbTIKKwlwYWRkdwl4bW02LHhtbTQJCTsgeG1tNj1kYXRhMytkYXRhND10bXAzCisJcGFkZHcJeG1tMix4bW0xCQk7IHhtbTI9ZGF0YTIrZGF0YTU9dG1wMgorCXBzdWJ3CXhtbTcseG1tNAkJOyB4bW03PWRhdGEzLWRhdGE0PXRtcDQKKwlwc3Vidwl4bW0wLHhtbTEJCTsgeG1tMD1kYXRhMi1kYXRhNT10bXA1CisKKwk7IC0tIEV2ZW4gcGFydAorCisJbW92ZHFhCXhtbTQseG1tMworCW1vdmRxYQl4bW0xLHhtbTUKKwlwc3Vidwl4bW0zLHhtbTYJCTsgeG1tMz10bXAxMworCXBzdWJ3CXhtbTUseG1tMgkJOyB4bW01PXRtcDEyCisJcGFkZHcJeG1tNCx4bW02CQk7IHhtbTQ9dG1wMTAKKwlwYWRkdwl4bW0xLHhtbTIJCTsgeG1tMT10bXAxMQorCisJcGFkZHcJeG1tNSx4bW0zCisJcHNsbHcJeG1tNSxQUkVfTVVMVElQTFlfU0NBTEVfQklUUworCXBtdWxodwl4bW01LFtHT1RPRkYoZWJ4LFBXX0YwNzA3KV0gOyB4bW01PXoxCisKKwltb3ZkcWEJeG1tNix4bW00CisJbW92ZHFhCXhtbTIseG1tMworCXBzdWJ3CXhtbTQseG1tMQkJOyB4bW00PWRhdGE0CisJcHN1YncJeG1tMyx4bW01CQk7IHhtbTM9ZGF0YTYKKwlwYWRkdwl4bW02LHhtbTEJCTsgeG1tNj1kYXRhMAorCXBhZGR3CXhtbTIseG1tNQkJOyB4bW0yPWRhdGEyCisKKwltb3ZkcWEJWE1NV09SRCBbWE1NQkxPQ0soNCwwLGVkeCxTSVpFT0ZfRENURUxFTSldLCB4bW00CisJbW92ZHFhCVhNTVdPUkQgW1hNTUJMT0NLKDYsMCxlZHgsU0laRU9GX0RDVEVMRU0pXSwgeG1tMworCW1vdmRxYQlYTU1XT1JEIFtYTU1CTE9DSygwLDAsZWR4LFNJWkVPRl9EQ1RFTEVNKV0sIHhtbTYKKwltb3ZkcWEJWE1NV09SRCBbWE1NQkxPQ0soMiwwLGVkeCxTSVpFT0ZfRENURUxFTSldLCB4bW0yCisKKwk7IC0tIE9kZCBwYXJ0CisKKwltb3ZkcWEJeG1tMSwgWE1NV09SRCBbd2soMCldCTsgeG1tMT10bXA2CisJbW92ZHFhCXhtbTUsIFhNTVdPUkQgW3drKDEpXQk7IHhtbTU9dG1wNworCisJcGFkZHcJeG1tNyx4bW0wCQk7IHhtbTc9dG1wMTAKKwlwYWRkdwl4bW0wLHhtbTEJCTsgeG1tMD10bXAxMQorCXBhZGR3CXhtbTEseG1tNQkJOyB4bW0xPXRtcDEyLCB4bW01PXRtcDcKKworCXBzbGx3CXhtbTcsUFJFX01VTFRJUExZX1NDQUxFX0JJVFMKKwlwc2xsdwl4bW0xLFBSRV9NVUxUSVBMWV9TQ0FMRV9CSVRTCisKKwlwc2xsdwl4bW0wLFBSRV9NVUxUSVBMWV9TQ0FMRV9CSVRTCisJcG11bGh3CXhtbTAsW0dPVE9GRihlYngsUFdfRjA3MDcpXSA7IHhtbTA9ejMKKworCW1vdmRxYQl4bW00LHhtbTcJCTsgeG1tND10bXAxMAorCXBzdWJ3CXhtbTcseG1tMQorCXBtdWxodwl4bW03LFtHT1RPRkYoZWJ4LFBXX0YwMzgyKV0gOyB4bW03PXo1CisJcG11bGh3CXhtbTQsW0dPVE9GRihlYngsUFdfRjA1NDEpXSA7IHhtbTQ9TVVMVElQTFkodG1wMTAsRklYXzBfNTQxMTk2KQorCXBtdWxodwl4bW0xLFtHT1RPRkYoZWJ4LFBXX0YxMzA2KV0gOyB4bW0xPU1VTFRJUExZKHRtcDEyLEZJWF8xXzMwNjU2MikKKwlwYWRkdwl4bW00LHhtbTcJCTsgeG1tND16MgorCXBhZGR3CXhtbTEseG1tNwkJOyB4bW0xPXo0CisKKwltb3ZkcWEJeG1tMyx4bW01CisJcHN1YncJeG1tNSx4bW0wCQk7IHhtbTU9ejEzCisJcGFkZHcJeG1tMyx4bW0wCQk7IHhtbTM9ejExCisKKwltb3ZkcWEJeG1tNix4bW01CisJbW92ZHFhCXhtbTIseG1tMworCXBzdWJ3CXhtbTUseG1tNAkJOyB4bW01PWRhdGEzCisJcHN1YncJeG1tMyx4bW0xCQk7IHhtbTM9ZGF0YTcKKwlwYWRkdwl4bW02LHhtbTQJCTsgeG1tNj1kYXRhNQorCXBhZGR3CXhtbTIseG1tMQkJOyB4bW0yPWRhdGExCisKKwltb3ZkcWEJWE1NV09SRCBbWE1NQkxPQ0soMywwLGVkeCxTSVpFT0ZfRENURUxFTSldLCB4bW01CisJbW92ZHFhCVhNTVdPUkQgW1hNTUJMT0NLKDcsMCxlZHgsU0laRU9GX0RDVEVMRU0pXSwgeG1tMworCW1vdmRxYQlYTU1XT1JEIFtYTU1CTE9DSyg1LDAsZWR4LFNJWkVPRl9EQ1RFTEVNKV0sIHhtbTYKKwltb3ZkcWEJWE1NV09SRCBbWE1NQkxPQ0soMSwwLGVkeCxTSVpFT0ZfRENURUxFTSldLCB4bW0yCisKKzsJcG9wCWVkaQkJOyB1bnVzZWQKKzsJcG9wCWVzaQkJOyB1bnVzZWQKKzsJcG9wCWVkeAkJOyBuZWVkIG5vdCBiZSBwcmVzZXJ2ZWQKKzsJcG9wCWVjeAkJOyB1bnVzZWQKKwlwb3BwaWMJZWJ4CisJbW92CWVzcCxlYnAJCTsgZXNwIDwtIGFsaWduZWQgZWJwCisJcG9wCWVzcAkJOyBlc3AgPC0gb3JpZ2luYWwgZWJwCisJcG9wCWVicAorCXJldAorCis7IEZvciBzb21lIHJlYXNvbiwgdGhlIE9TIFggbGlua2VyIGRvZXMgbm90IGhvbm9yIHRoZSByZXF1ZXN0IHRvIGFsaWduIHRoZQorOyBzZWdtZW50IHVubGVzcyB3ZSBkbyB0aGlzLgorCWFsaWduCTE2CmRpZmYgLS1naXQgYS9zaW1kL2pmc3MyaW50LTY0LmFzbSBiL3NpbWQvamZzczJpbnQtNjQuYXNtCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmJkMWJkNDUKLS0tIC9kZXYvbnVsbAorKysgYi9zaW1kL2pmc3MyaW50LTY0LmFzbQpAQCAtMCwwICsxLDYyMiBAQAorOworOyBqZnNzMmludC02NC5hc20gLSBhY2N1cmF0ZSBpbnRlZ2VyIEZEQ1QgKDY0LWJpdCBTU0UyKQorOworOyBDb3B5cmlnaHQgMjAwOSBQaWVycmUgT3NzbWFuIDxvc3NtYW5AY2VuZGlvLnNlPiBmb3IgQ2VuZGlvIEFCCis7IENvcHlyaWdodCAyMDA5IEQuIFIuIENvbW1hbmRlcgorOworOyBCYXNlZCBvbgorOyB4ODYgU0lNRCBleHRlbnNpb24gZm9yIElKRyBKUEVHIGxpYnJhcnkKKzsgQ29weXJpZ2h0IChDKSAxOTk5LTIwMDYsIE1JWUFTQUtBIE1hc2FydS4KKzsgRm9yIGNvbmRpdGlvbnMgb2YgZGlzdHJpYnV0aW9uIGFuZCB1c2UsIHNlZSBjb3B5cmlnaHQgbm90aWNlIGluIGpzaW1kZXh0LmluYworOworOyBUaGlzIGZpbGUgc2hvdWxkIGJlIGFzc2VtYmxlZCB3aXRoIE5BU00gKE5ldHdpZGUgQXNzZW1ibGVyKSwKKzsgY2FuICpub3QqIGJlIGFzc2VtYmxlZCB3aXRoIE1pY3Jvc29mdCdzIE1BU00gb3IgYW55IGNvbXBhdGlibGUKKzsgYXNzZW1ibGVyIChpbmNsdWRpbmcgQm9ybGFuZCdzIFR1cmJvIEFzc2VtYmxlcikuCis7IE5BU00gaXMgYXZhaWxhYmxlIGZyb20gaHR0cDovL25hc20uc291cmNlZm9yZ2UubmV0LyBvcgorOyBodHRwOi8vc291cmNlZm9yZ2UubmV0L3Byb2plY3Qvc2hvd2ZpbGVzLnBocD9ncm91cF9pZD02MjA4Cis7Cis7IFRoaXMgZmlsZSBjb250YWlucyBhIHNsb3ctYnV0LWFjY3VyYXRlIGludGVnZXIgaW1wbGVtZW50YXRpb24gb2YgdGhlCis7IGZvcndhcmQgRENUIChEaXNjcmV0ZSBDb3NpbmUgVHJhbnNmb3JtKS4gVGhlIGZvbGxvd2luZyBjb2RlIGlzIGJhc2VkCis7IGRpcmVjdGx5IG9uIHRoZSBJSkcncyBvcmlnaW5hbCBqZmRjdGludC5jOyBzZWUgdGhlIGpmZGN0aW50LmMgZm9yCis7IG1vcmUgZGV0YWlscy4KKzsKKzsgW1RBQjhdCisKKyVpbmNsdWRlICJqc2ltZGV4dC5pbmMiCislaW5jbHVkZSAiamRjdC5pbmMiCisKKzsgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworJWRlZmluZSBDT05TVF9CSVRTCTEzCislZGVmaW5lIFBBU1MxX0JJVFMJMgorCislZGVmaW5lIERFU0NBTEVfUDEJKENPTlNUX0JJVFMtUEFTUzFfQklUUykKKyVkZWZpbmUgREVTQ0FMRV9QMgkoQ09OU1RfQklUUytQQVNTMV9CSVRTKQorCislaWYgQ09OU1RfQklUUyA9PSAxMworRl8wXzI5OAllcXUJIDI0NDYJCTsgRklYKDAuMjk4NjMxMzM2KQorRl8wXzM5MAllcXUJIDMxOTYJCTsgRklYKDAuMzkwMTgwNjQ0KQorRl8wXzU0MQllcXUJIDQ0MzMJCTsgRklYKDAuNTQxMTk2MTAwKQorRl8wXzc2NQllcXUJIDYyNzAJCTsgRklYKDAuNzY1MzY2ODY1KQorRl8wXzg5OQllcXUJIDczNzMJCTsgRklYKDAuODk5OTc2MjIzKQorRl8xXzE3NQllcXUJIDk2MzMJCTsgRklYKDEuMTc1ODc1NjAyKQorRl8xXzUwMQllcXUJMTIyOTkJCTsgRklYKDEuNTAxMzIxMTEwKQorRl8xXzg0NwllcXUJMTUxMzcJCTsgRklYKDEuODQ3NzU5MDY1KQorRl8xXzk2MQllcXUJMTYwNjkJCTsgRklYKDEuOTYxNTcwNTYwKQorRl8yXzA1MwllcXUJMTY4MTkJCTsgRklYKDIuMDUzMTE5ODY5KQorRl8yXzU2MgllcXUJMjA5OTUJCTsgRklYKDIuNTYyOTE1NDQ3KQorRl8zXzA3MgllcXUJMjUxNzIJCTsgRklYKDMuMDcyNzExMDI2KQorJWVsc2UKKzsgTkFTTSBjYW5ub3QgZG8gY29tcGlsZS10aW1lIGFyaXRobWV0aWMgb24gZmxvYXRpbmctcG9pbnQgY29uc3RhbnRzLgorJWRlZmluZSBERVNDQUxFKHgsbikgICgoKHgpKygxPDwoKG4pLTEpKSk+PihuKSkKK0ZfMF8yOTgJZXF1CURFU0NBTEUoIDMyMDY1Mjk1NSwzMC1DT05TVF9CSVRTKQk7IEZJWCgwLjI5ODYzMTMzNikKK0ZfMF8zOTAJZXF1CURFU0NBTEUoIDQxODk1MzI3NiwzMC1DT05TVF9CSVRTKQk7IEZJWCgwLjM5MDE4MDY0NCkKK0ZfMF81NDEJZXF1CURFU0NBTEUoIDU4MTEwNDg4NywzMC1DT05TVF9CSVRTKQk7IEZJWCgwLjU0MTE5NjEwMCkKK0ZfMF83NjUJZXF1CURFU0NBTEUoIDgyMTgwNjQxMywzMC1DT05TVF9CSVRTKQk7IEZJWCgwLjc2NTM2Njg2NSkKK0ZfMF84OTkJZXF1CURFU0NBTEUoIDk2NjM0MjExMSwzMC1DT05TVF9CSVRTKQk7IEZJWCgwLjg5OTk3NjIyMykKK0ZfMV8xNzUJZXF1CURFU0NBTEUoMTI2MjU4NjgxMywzMC1DT05TVF9CSVRTKQk7IEZJWCgxLjE3NTg3NTYwMikKK0ZfMV81MDEJZXF1CURFU0NBTEUoMTYxMjAzMTI2NywzMC1DT05TVF9CSVRTKQk7IEZJWCgxLjUwMTMyMTExMCkKK0ZfMV84NDcJZXF1CURFU0NBTEUoMTk4NDAxNjE4OCwzMC1DT05TVF9CSVRTKQk7IEZJWCgxLjg0Nzc1OTA2NSkKK0ZfMV85NjEJZXF1CURFU0NBTEUoMjEwNjIyMDM1MCwzMC1DT05TVF9CSVRTKQk7IEZJWCgxLjk2MTU3MDU2MCkKK0ZfMl8wNTMJZXF1CURFU0NBTEUoMjIwNDUyMDY3MywzMC1DT05TVF9CSVRTKQk7IEZJWCgyLjA1MzExOTg2OSkKK0ZfMl81NjIJZXF1CURFU0NBTEUoMjc1MTkwOTUwNiwzMC1DT05TVF9CSVRTKQk7IEZJWCgyLjU2MjkxNTQ0NykKK0ZfM18wNzIJZXF1CURFU0NBTEUoMzI5OTI5ODM0MSwzMC1DT05TVF9CSVRTKQk7IEZJWCgzLjA3MjcxMTAyNikKKyVlbmRpZgorCis7IC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisJU0VDVElPTglTRUdfQ09OU1QKKworCWFsaWduegkxNgorCWdsb2JhbAlFWFROKGpjb25zdF9mZGN0X2lzbG93X3NzZTIpCisKK0VYVE4oamNvbnN0X2ZkY3RfaXNsb3dfc3NlMik6CisKK1BXX0YxMzBfRjA1NAl0aW1lcyA0IGR3ICAoRl8wXzU0MStGXzBfNzY1KSwgRl8wXzU0MQorUFdfRjA1NF9NRjEzMAl0aW1lcyA0IGR3ICBGXzBfNTQxLCAoRl8wXzU0MS1GXzFfODQ3KQorUFdfTUYwNzhfRjExNwl0aW1lcyA0IGR3ICAoRl8xXzE3NS1GXzFfOTYxKSwgRl8xXzE3NQorUFdfRjExN19GMDc4CXRpbWVzIDQgZHcgIEZfMV8xNzUsIChGXzFfMTc1LUZfMF8zOTApCitQV19NRjA2MF9NRjA4OQl0aW1lcyA0IGR3ICAoRl8wXzI5OC1GXzBfODk5KSwtRl8wXzg5OQorUFdfTUYwODlfRjA2MAl0aW1lcyA0IGR3IC1GXzBfODk5LCAoRl8xXzUwMS1GXzBfODk5KQorUFdfTUYwNTBfTUYyNTYJdGltZXMgNCBkdyAgKEZfMl8wNTMtRl8yXzU2MiksLUZfMl81NjIKK1BXX01GMjU2X0YwNTAJdGltZXMgNCBkdyAtRl8yXzU2MiwgKEZfM18wNzItRl8yXzU2MikKK1BEX0RFU0NBTEVfUDEJdGltZXMgNCBkZCAgMSA8PCAoREVTQ0FMRV9QMS0xKQorUERfREVTQ0FMRV9QMgl0aW1lcyA0IGRkICAxIDw8IChERVNDQUxFX1AyLTEpCitQV19ERVNDQUxFX1AyWAl0aW1lcyA4IGR3ICAxIDw8IChQQVNTMV9CSVRTLTEpCisKKwlhbGlnbnoJMTYKKworOyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCVNFQ1RJT04JU0VHX1RFWFQKKwlCSVRTCTY0Cis7Cis7IFBlcmZvcm0gdGhlIGZvcndhcmQgRENUIG9uIG9uZSBibG9jayBvZiBzYW1wbGVzLgorOworOyBHTE9CQUwodm9pZCkKKzsganNpbWRfZmRjdF9pc2xvd19zc2UyIChEQ1RFTEVNICogZGF0YSkKKzsKKworOyByMTAgPSBEQ1RFTEVNICogZGF0YQorCislZGVmaW5lIHdrKGkpCQlyYnAtKFdLX05VTS0oaSkpKlNJWkVPRl9YTU1XT1JECTsgeG1td29yZCB3a1tXS19OVU1dCislZGVmaW5lIFdLX05VTQkJNgorCisJYWxpZ24JMTYKKwlnbG9iYWwJRVhUTihqc2ltZF9mZGN0X2lzbG93X3NzZTIpCisKK0VYVE4oanNpbWRfZmRjdF9pc2xvd19zc2UyKToKKwlwdXNoCXJicAorCW1vdglyYXgscnNwCQkJCTsgcmF4ID0gb3JpZ2luYWwgcmJwCisJc3ViCXJzcCwgYnl0ZSA0CisJYW5kCXJzcCwgYnl0ZSAoLVNJWkVPRl9YTU1XT1JEKQk7IGFsaWduIHRvIDEyOCBiaXRzCisJbW92CVtyc3BdLHJheAorCW1vdglyYnAscnNwCQkJCTsgcmJwID0gYWxpZ25lZCByYnAKKwlsZWEJcnNwLCBbd2soMCldCisJY29sbGVjdF9hcmdzCisKKwk7IC0tLS0gUGFzcyAxOiBwcm9jZXNzIHJvd3MuCisKKwltb3YJcmR4LCByMTAJOyAoRENURUxFTSAqKQorCisJbW92ZHFhCXhtbTAsIFhNTVdPUkQgW1hNTUJMT0NLKDAsMCxyZHgsU0laRU9GX0RDVEVMRU0pXQorCW1vdmRxYQl4bW0xLCBYTU1XT1JEIFtYTU1CTE9DSygxLDAscmR4LFNJWkVPRl9EQ1RFTEVNKV0KKwltb3ZkcWEJeG1tMiwgWE1NV09SRCBbWE1NQkxPQ0soMiwwLHJkeCxTSVpFT0ZfRENURUxFTSldCisJbW92ZHFhCXhtbTMsIFhNTVdPUkQgW1hNTUJMT0NLKDMsMCxyZHgsU0laRU9GX0RDVEVMRU0pXQorCisJOyB4bW0wPSgwMCAwMSAwMiAwMyAwNCAwNSAwNiAwNyksIHhtbTI9KDIwIDIxIDIyIDIzIDI0IDI1IDI2IDI3KQorCTsgeG1tMT0oMTAgMTEgMTIgMTMgMTQgMTUgMTYgMTcpLCB4bW0zPSgzMCAzMSAzMiAzMyAzNCAzNSAzNiAzNykKKworCW1vdmRxYSAgICB4bW00LHhtbTAJCTsgdHJhbnNwb3NlIGNvZWZmaWNpZW50cyhwaGFzZSAxKQorCXB1bnBja2x3ZCB4bW0wLHhtbTEJCTsgeG1tMD0oMDAgMTAgMDEgMTEgMDIgMTIgMDMgMTMpCisJcHVucGNraHdkIHhtbTQseG1tMQkJOyB4bW00PSgwNCAxNCAwNSAxNSAwNiAxNiAwNyAxNykKKwltb3ZkcWEgICAgeG1tNSx4bW0yCQk7IHRyYW5zcG9zZSBjb2VmZmljaWVudHMocGhhc2UgMSkKKwlwdW5wY2tsd2QgeG1tMix4bW0zCQk7IHhtbTI9KDIwIDMwIDIxIDMxIDIyIDMyIDIzIDMzKQorCXB1bnBja2h3ZCB4bW01LHhtbTMJCTsgeG1tNT0oMjQgMzQgMjUgMzUgMjYgMzYgMjcgMzcpCisKKwltb3ZkcWEJeG1tNiwgWE1NV09SRCBbWE1NQkxPQ0soNCwwLHJkeCxTSVpFT0ZfRENURUxFTSldCisJbW92ZHFhCXhtbTcsIFhNTVdPUkQgW1hNTUJMT0NLKDUsMCxyZHgsU0laRU9GX0RDVEVMRU0pXQorCW1vdmRxYQl4bW0xLCBYTU1XT1JEIFtYTU1CTE9DSyg2LDAscmR4LFNJWkVPRl9EQ1RFTEVNKV0KKwltb3ZkcWEJeG1tMywgWE1NV09SRCBbWE1NQkxPQ0soNywwLHJkeCxTSVpFT0ZfRENURUxFTSldCisKKwk7IHhtbTY9KCA0IDEyIDIwIDI4IDM2IDQ0IDUyIDYwKSwgeG1tMT0oIDYgMTQgMjIgMzAgMzggNDYgNTQgNjIpCisJOyB4bW03PSggNSAxMyAyMSAyOSAzNyA0NSA1MyA2MSksIHhtbTM9KCA3IDE1IDIzIDMxIDM5IDQ3IDU1IDYzKQorCisJbW92ZHFhCVhNTVdPUkQgW3drKDApXSwgeG1tMgk7IHdrKDApPSgyMCAzMCAyMSAzMSAyMiAzMiAyMyAzMykKKwltb3ZkcWEJWE1NV09SRCBbd2soMSldLCB4bW01CTsgd2soMSk9KDI0IDM0IDI1IDM1IDI2IDM2IDI3IDM3KQorCisJbW92ZHFhICAgIHhtbTIseG1tNgkJOyB0cmFuc3Bvc2UgY29lZmZpY2llbnRzKHBoYXNlIDEpCisJcHVucGNrbHdkIHhtbTYseG1tNwkJOyB4bW02PSg0MCA1MCA0MSA1MSA0MiA1MiA0MyA1MykKKwlwdW5wY2tod2QgeG1tMix4bW03CQk7IHhtbTI9KDQ0IDU0IDQ1IDU1IDQ2IDU2IDQ3IDU3KQorCW1vdmRxYSAgICB4bW01LHhtbTEJCTsgdHJhbnNwb3NlIGNvZWZmaWNpZW50cyhwaGFzZSAxKQorCXB1bnBja2x3ZCB4bW0xLHhtbTMJCTsgeG1tMT0oNjAgNzAgNjEgNzEgNjIgNzIgNjMgNzMpCisJcHVucGNraHdkIHhtbTUseG1tMwkJOyB4bW01PSg2NCA3NCA2NSA3NSA2NiA3NiA2NyA3NykKKworCW1vdmRxYSAgICB4bW03LHhtbTYJCTsgdHJhbnNwb3NlIGNvZWZmaWNpZW50cyhwaGFzZSAyKQorCXB1bnBja2xkcSB4bW02LHhtbTEJCTsgeG1tNj0oNDAgNTAgNjAgNzAgNDEgNTEgNjEgNzEpCisJcHVucGNraGRxIHhtbTcseG1tMQkJOyB4bW03PSg0MiA1MiA2MiA3MiA0MyA1MyA2MyA3MykKKwltb3ZkcWEgICAgeG1tMyx4bW0yCQk7IHRyYW5zcG9zZSBjb2VmZmljaWVudHMocGhhc2UgMikKKwlwdW5wY2tsZHEgeG1tMix4bW01CQk7IHhtbTI9KDQ0IDU0IDY0IDc0IDQ1IDU1IDY1IDc1KQorCXB1bnBja2hkcSB4bW0zLHhtbTUJCTsgeG1tMz0oNDYgNTYgNjYgNzYgNDcgNTcgNjcgNzcpCisKKwltb3ZkcWEJeG1tMSwgWE1NV09SRCBbd2soMCldCTsgeG1tMT0oMjAgMzAgMjEgMzEgMjIgMzIgMjMgMzMpCisJbW92ZHFhCXhtbTUsIFhNTVdPUkQgW3drKDEpXQk7IHhtbTU9KDI0IDM0IDI1IDM1IDI2IDM2IDI3IDM3KQorCW1vdmRxYQlYTU1XT1JEIFt3aygyKV0sIHhtbTcJOyB3aygyKT0oNDIgNTIgNjIgNzIgNDMgNTMgNjMgNzMpCisJbW92ZHFhCVhNTVdPUkQgW3drKDMpXSwgeG1tMgk7IHdrKDMpPSg0NCA1NCA2NCA3NCA0NSA1NSA2NSA3NSkKKworCW1vdmRxYSAgICB4bW03LHhtbTAJCTsgdHJhbnNwb3NlIGNvZWZmaWNpZW50cyhwaGFzZSAyKQorCXB1bnBja2xkcSB4bW0wLHhtbTEJCTsgeG1tMD0oMDAgMTAgMjAgMzAgMDEgMTEgMjEgMzEpCisJcHVucGNraGRxIHhtbTcseG1tMQkJOyB4bW03PSgwMiAxMiAyMiAzMiAwMyAxMyAyMyAzMykKKwltb3ZkcWEgICAgeG1tMix4bW00CQk7IHRyYW5zcG9zZSBjb2VmZmljaWVudHMocGhhc2UgMikKKwlwdW5wY2tsZHEgeG1tNCx4bW01CQk7IHhtbTQ9KDA0IDE0IDI0IDM0IDA1IDE1IDI1IDM1KQorCXB1bnBja2hkcSB4bW0yLHhtbTUJCTsgeG1tMj0oMDYgMTYgMjYgMzYgMDcgMTcgMjcgMzcpCisKKwltb3ZkcWEgICAgIHhtbTEseG1tMAkJOyB0cmFuc3Bvc2UgY29lZmZpY2llbnRzKHBoYXNlIDMpCisJcHVucGNrbHFkcSB4bW0wLHhtbTYJCTsgeG1tMD0oMDAgMTAgMjAgMzAgNDAgNTAgNjAgNzApPWRhdGEwCisJcHVucGNraHFkcSB4bW0xLHhtbTYJCTsgeG1tMT0oMDEgMTEgMjEgMzEgNDEgNTEgNjEgNzEpPWRhdGExCisJbW92ZHFhICAgICB4bW01LHhtbTIJCTsgdHJhbnNwb3NlIGNvZWZmaWNpZW50cyhwaGFzZSAzKQorCXB1bnBja2xxZHEgeG1tMix4bW0zCQk7IHhtbTI9KDA2IDE2IDI2IDM2IDQ2IDU2IDY2IDc2KT1kYXRhNgorCXB1bnBja2hxZHEgeG1tNSx4bW0zCQk7IHhtbTU9KDA3IDE3IDI3IDM3IDQ3IDU3IDY3IDc3KT1kYXRhNworCisJbW92ZHFhCXhtbTYseG1tMQorCW1vdmRxYQl4bW0zLHhtbTAKKwlwc3Vidwl4bW0xLHhtbTIJCTsgeG1tMT1kYXRhMS1kYXRhNj10bXA2CisJcHN1YncJeG1tMCx4bW01CQk7IHhtbTA9ZGF0YTAtZGF0YTc9dG1wNworCXBhZGR3CXhtbTYseG1tMgkJOyB4bW02PWRhdGExK2RhdGE2PXRtcDEKKwlwYWRkdwl4bW0zLHhtbTUJCTsgeG1tMz1kYXRhMCtkYXRhNz10bXAwCisKKwltb3ZkcWEJeG1tMiwgWE1NV09SRCBbd2soMildCTsgeG1tMj0oNDIgNTIgNjIgNzIgNDMgNTMgNjMgNzMpCisJbW92ZHFhCXhtbTUsIFhNTVdPUkQgW3drKDMpXQk7IHhtbTU9KDQ0IDU0IDY0IDc0IDQ1IDU1IDY1IDc1KQorCW1vdmRxYQlYTU1XT1JEIFt3aygwKV0sIHhtbTEJOyB3aygwKT10bXA2CisJbW92ZHFhCVhNTVdPUkQgW3drKDEpXSwgeG1tMAk7IHdrKDEpPXRtcDcKKworCW1vdmRxYSAgICAgeG1tMSx4bW03CQk7IHRyYW5zcG9zZSBjb2VmZmljaWVudHMocGhhc2UgMykKKwlwdW5wY2tscWRxIHhtbTcseG1tMgkJOyB4bW03PSgwMiAxMiAyMiAzMiA0MiA1MiA2MiA3Mik9ZGF0YTIKKwlwdW5wY2tocWRxIHhtbTEseG1tMgkJOyB4bW0xPSgwMyAxMyAyMyAzMyA0MyA1MyA2MyA3Myk9ZGF0YTMKKwltb3ZkcWEgICAgIHhtbTAseG1tNAkJOyB0cmFuc3Bvc2UgY29lZmZpY2llbnRzKHBoYXNlIDMpCisJcHVucGNrbHFkcSB4bW00LHhtbTUJCTsgeG1tND0oMDQgMTQgMjQgMzQgNDQgNTQgNjQgNzQpPWRhdGE0CisJcHVucGNraHFkcSB4bW0wLHhtbTUJCTsgeG1tMD0oMDUgMTUgMjUgMzUgNDUgNTUgNjUgNzUpPWRhdGE1CisKKwltb3ZkcWEJeG1tMix4bW0xCisJbW92ZHFhCXhtbTUseG1tNworCXBhZGR3CXhtbTEseG1tNAkJOyB4bW0xPWRhdGEzK2RhdGE0PXRtcDMKKwlwYWRkdwl4bW03LHhtbTAJCTsgeG1tNz1kYXRhMitkYXRhNT10bXAyCisJcHN1YncJeG1tMix4bW00CQk7IHhtbTI9ZGF0YTMtZGF0YTQ9dG1wNAorCXBzdWJ3CXhtbTUseG1tMAkJOyB4bW01PWRhdGEyLWRhdGE1PXRtcDUKKworCTsgLS0gRXZlbiBwYXJ0CisKKwltb3ZkcWEJeG1tNCx4bW0zCisJbW92ZHFhCXhtbTAseG1tNgorCXBhZGR3CXhtbTMseG1tMQkJOyB4bW0zPXRtcDEwCisJcGFkZHcJeG1tNix4bW03CQk7IHhtbTY9dG1wMTEKKwlwc3Vidwl4bW00LHhtbTEJCTsgeG1tND10bXAxMworCXBzdWJ3CXhtbTAseG1tNwkJOyB4bW0wPXRtcDEyCisKKwltb3ZkcWEJeG1tMSx4bW0zCisJcGFkZHcJeG1tMyx4bW02CQk7IHhtbTM9dG1wMTArdG1wMTEKKwlwc3Vidwl4bW0xLHhtbTYJCTsgeG1tMT10bXAxMC10bXAxMQorCisJcHNsbHcJeG1tMyxQQVNTMV9CSVRTCQk7IHhtbTM9ZGF0YTAKKwlwc2xsdwl4bW0xLFBBU1MxX0JJVFMJCTsgeG1tMT1kYXRhNAorCisJbW92ZHFhCVhNTVdPUkQgW3drKDIpXSwgeG1tMwk7IHdrKDIpPWRhdGEwCisJbW92ZHFhCVhNTVdPUkQgW3drKDMpXSwgeG1tMQk7IHdrKDMpPWRhdGE0CisKKwk7IChPcmlnaW5hbCkKKwk7IHoxID0gKHRtcDEyICsgdG1wMTMpICogMC41NDExOTYxMDA7CisJOyBkYXRhMiA9IHoxICsgdG1wMTMgKiAwLjc2NTM2Njg2NTsKKwk7IGRhdGE2ID0gejEgKyB0bXAxMiAqIC0xLjg0Nzc1OTA2NTsKKwk7CisJOyAoVGhpcyBpbXBsZW1lbnRhdGlvbikKKwk7IGRhdGEyID0gdG1wMTMgKiAoMC41NDExOTYxMDAgKyAwLjc2NTM2Njg2NSkgKyB0bXAxMiAqIDAuNTQxMTk2MTAwOworCTsgZGF0YTYgPSB0bXAxMyAqIDAuNTQxMTk2MTAwICsgdG1wMTIgKiAoMC41NDExOTYxMDAgLSAxLjg0Nzc1OTA2NSk7CisKKwltb3ZkcWEgICAgeG1tNyx4bW00CQk7IHhtbTQ9dG1wMTMKKwltb3ZkcWEgICAgeG1tNix4bW00CisJcHVucGNrbHdkIHhtbTcseG1tMAkJOyB4bW0wPXRtcDEyCisJcHVucGNraHdkIHhtbTYseG1tMAorCW1vdmRxYSAgICB4bW00LHhtbTcKKwltb3ZkcWEgICAgeG1tMCx4bW02CisJcG1hZGR3ZCAgIHhtbTcsW3JlbCBQV19GMTMwX0YwNTRdCTsgeG1tNz1kYXRhMkwKKwlwbWFkZHdkICAgeG1tNixbcmVsIFBXX0YxMzBfRjA1NF0JOyB4bW02PWRhdGEySAorCXBtYWRkd2QgICB4bW00LFtyZWwgUFdfRjA1NF9NRjEzMF0JOyB4bW00PWRhdGE2TAorCXBtYWRkd2QgICB4bW0wLFtyZWwgUFdfRjA1NF9NRjEzMF0JOyB4bW0wPWRhdGE2SAorCisJcGFkZGQJeG1tNyxbcmVsIFBEX0RFU0NBTEVfUDFdCisJcGFkZGQJeG1tNixbcmVsIFBEX0RFU0NBTEVfUDFdCisJcHNyYWQJeG1tNyxERVNDQUxFX1AxCisJcHNyYWQJeG1tNixERVNDQUxFX1AxCisJcGFkZGQJeG1tNCxbcmVsIFBEX0RFU0NBTEVfUDFdCisJcGFkZGQJeG1tMCxbcmVsIFBEX0RFU0NBTEVfUDFdCisJcHNyYWQJeG1tNCxERVNDQUxFX1AxCisJcHNyYWQJeG1tMCxERVNDQUxFX1AxCisKKwlwYWNrc3NkdyAgeG1tNyx4bW02CQk7IHhtbTc9ZGF0YTIKKwlwYWNrc3NkdyAgeG1tNCx4bW0wCQk7IHhtbTQ9ZGF0YTYKKworCW1vdmRxYQlYTU1XT1JEIFt3ayg0KV0sIHhtbTcJOyB3ayg0KT1kYXRhMgorCW1vdmRxYQlYTU1XT1JEIFt3ayg1KV0sIHhtbTQJOyB3ayg1KT1kYXRhNgorCisJOyAtLSBPZGQgcGFydAorCisJbW92ZHFhCXhtbTMsIFhNTVdPUkQgW3drKDApXQk7IHhtbTM9dG1wNgorCW1vdmRxYQl4bW0xLCBYTU1XT1JEIFt3aygxKV0JOyB4bW0xPXRtcDcKKworCW1vdmRxYQl4bW02LHhtbTIJCTsgeG1tMj10bXA0CisJbW92ZHFhCXhtbTAseG1tNQkJOyB4bW01PXRtcDUKKwlwYWRkdwl4bW02LHhtbTMJCTsgeG1tNj16MworCXBhZGR3CXhtbTAseG1tMQkJOyB4bW0wPXo0CisKKwk7IChPcmlnaW5hbCkKKwk7IHo1ID0gKHozICsgejQpICogMS4xNzU4NzU2MDI7CisJOyB6MyA9IHozICogLTEuOTYxNTcwNTYwOyAgejQgPSB6NCAqIC0wLjM5MDE4MDY0NDsKKwk7IHozICs9IHo1OyAgejQgKz0gejU7CisJOworCTsgKFRoaXMgaW1wbGVtZW50YXRpb24pCisJOyB6MyA9IHozICogKDEuMTc1ODc1NjAyIC0gMS45NjE1NzA1NjApICsgejQgKiAxLjE3NTg3NTYwMjsKKwk7IHo0ID0gejMgKiAxLjE3NTg3NTYwMiArIHo0ICogKDEuMTc1ODc1NjAyIC0gMC4zOTAxODA2NDQpOworCisJbW92ZHFhICAgIHhtbTcseG1tNgorCW1vdmRxYSAgICB4bW00LHhtbTYKKwlwdW5wY2tsd2QgeG1tNyx4bW0wCisJcHVucGNraHdkIHhtbTQseG1tMAorCW1vdmRxYSAgICB4bW02LHhtbTcKKwltb3ZkcWEgICAgeG1tMCx4bW00CisJcG1hZGR3ZCAgIHhtbTcsW3JlbCBQV19NRjA3OF9GMTE3XQk7IHhtbTc9ejNMCisJcG1hZGR3ZCAgIHhtbTQsW3JlbCBQV19NRjA3OF9GMTE3XQk7IHhtbTQ9ejNICisJcG1hZGR3ZCAgIHhtbTYsW3JlbCBQV19GMTE3X0YwNzhdCTsgeG1tNj16NEwKKwlwbWFkZHdkICAgeG1tMCxbcmVsIFBXX0YxMTdfRjA3OF0JOyB4bW0wPXo0SAorCisJbW92ZHFhCVhNTVdPUkQgW3drKDApXSwgeG1tNwk7IHdrKDApPXozTAorCW1vdmRxYQlYTU1XT1JEIFt3aygxKV0sIHhtbTQJOyB3aygxKT16M0gKKworCTsgKE9yaWdpbmFsKQorCTsgejEgPSB0bXA0ICsgdG1wNzsgIHoyID0gdG1wNSArIHRtcDY7CisJOyB0bXA0ID0gdG1wNCAqIDAuMjk4NjMxMzM2OyAgdG1wNSA9IHRtcDUgKiAyLjA1MzExOTg2OTsKKwk7IHRtcDYgPSB0bXA2ICogMy4wNzI3MTEwMjY7ICB0bXA3ID0gdG1wNyAqIDEuNTAxMzIxMTEwOworCTsgejEgPSB6MSAqIC0wLjg5OTk3NjIyMzsgIHoyID0gejIgKiAtMi41NjI5MTU0NDc7CisJOyBkYXRhNyA9IHRtcDQgKyB6MSArIHozOyAgZGF0YTUgPSB0bXA1ICsgejIgKyB6NDsKKwk7IGRhdGEzID0gdG1wNiArIHoyICsgejM7ICBkYXRhMSA9IHRtcDcgKyB6MSArIHo0OworCTsKKwk7IChUaGlzIGltcGxlbWVudGF0aW9uKQorCTsgdG1wNCA9IHRtcDQgKiAoMC4yOTg2MzEzMzYgLSAwLjg5OTk3NjIyMykgKyB0bXA3ICogLTAuODk5OTc2MjIzOworCTsgdG1wNSA9IHRtcDUgKiAoMi4wNTMxMTk4NjkgLSAyLjU2MjkxNTQ0NykgKyB0bXA2ICogLTIuNTYyOTE1NDQ3OworCTsgdG1wNiA9IHRtcDUgKiAtMi41NjI5MTU0NDcgKyB0bXA2ICogKDMuMDcyNzExMDI2IC0gMi41NjI5MTU0NDcpOworCTsgdG1wNyA9IHRtcDQgKiAtMC44OTk5NzYyMjMgKyB0bXA3ICogKDEuNTAxMzIxMTEwIC0gMC44OTk5NzYyMjMpOworCTsgZGF0YTcgPSB0bXA0ICsgejM7ICBkYXRhNSA9IHRtcDUgKyB6NDsKKwk7IGRhdGEzID0gdG1wNiArIHozOyAgZGF0YTEgPSB0bXA3ICsgejQ7CisKKwltb3ZkcWEgICAgeG1tNyx4bW0yCisJbW92ZHFhICAgIHhtbTQseG1tMgorCXB1bnBja2x3ZCB4bW03LHhtbTEKKwlwdW5wY2tod2QgeG1tNCx4bW0xCisJbW92ZHFhICAgIHhtbTIseG1tNworCW1vdmRxYSAgICB4bW0xLHhtbTQKKwlwbWFkZHdkICAgeG1tNyxbcmVsIFBXX01GMDYwX01GMDg5XQk7IHhtbTc9dG1wNEwKKwlwbWFkZHdkICAgeG1tNCxbcmVsIFBXX01GMDYwX01GMDg5XQk7IHhtbTQ9dG1wNEgKKwlwbWFkZHdkICAgeG1tMixbcmVsIFBXX01GMDg5X0YwNjBdCTsgeG1tMj10bXA3TAorCXBtYWRkd2QgICB4bW0xLFtyZWwgUFdfTUYwODlfRjA2MF0JOyB4bW0xPXRtcDdICisKKwlwYWRkZAl4bW03LCBYTU1XT1JEIFt3aygwKV0JOyB4bW03PWRhdGE3TAorCXBhZGRkCXhtbTQsIFhNTVdPUkQgW3drKDEpXQk7IHhtbTQ9ZGF0YTdICisJcGFkZGQJeG1tMix4bW02CQk7IHhtbTI9ZGF0YTFMCisJcGFkZGQJeG1tMSx4bW0wCQk7IHhtbTE9ZGF0YTFICisKKwlwYWRkZAl4bW03LFtyZWwgUERfREVTQ0FMRV9QMV0KKwlwYWRkZAl4bW00LFtyZWwgUERfREVTQ0FMRV9QMV0KKwlwc3JhZAl4bW03LERFU0NBTEVfUDEKKwlwc3JhZAl4bW00LERFU0NBTEVfUDEKKwlwYWRkZAl4bW0yLFtyZWwgUERfREVTQ0FMRV9QMV0KKwlwYWRkZAl4bW0xLFtyZWwgUERfREVTQ0FMRV9QMV0KKwlwc3JhZAl4bW0yLERFU0NBTEVfUDEKKwlwc3JhZAl4bW0xLERFU0NBTEVfUDEKKworCXBhY2tzc2R3ICB4bW03LHhtbTQJCTsgeG1tNz1kYXRhNworCXBhY2tzc2R3ICB4bW0yLHhtbTEJCTsgeG1tMj1kYXRhMQorCisJbW92ZHFhICAgIHhtbTQseG1tNQorCW1vdmRxYSAgICB4bW0xLHhtbTUKKwlwdW5wY2tsd2QgeG1tNCx4bW0zCisJcHVucGNraHdkIHhtbTEseG1tMworCW1vdmRxYSAgICB4bW01LHhtbTQKKwltb3ZkcWEgICAgeG1tMyx4bW0xCisJcG1hZGR3ZCAgIHhtbTQsW3JlbCBQV19NRjA1MF9NRjI1Nl0JOyB4bW00PXRtcDVMCisJcG1hZGR3ZCAgIHhtbTEsW3JlbCBQV19NRjA1MF9NRjI1Nl0JOyB4bW0xPXRtcDVICisJcG1hZGR3ZCAgIHhtbTUsW3JlbCBQV19NRjI1Nl9GMDUwXQk7IHhtbTU9dG1wNkwKKwlwbWFkZHdkICAgeG1tMyxbcmVsIFBXX01GMjU2X0YwNTBdCTsgeG1tMz10bXA2SAorCisJcGFkZGQJeG1tNCx4bW02CQk7IHhtbTQ9ZGF0YTVMCisJcGFkZGQJeG1tMSx4bW0wCQk7IHhtbTE9ZGF0YTVICisJcGFkZGQJeG1tNSwgWE1NV09SRCBbd2soMCldCTsgeG1tNT1kYXRhM0wKKwlwYWRkZAl4bW0zLCBYTU1XT1JEIFt3aygxKV0JOyB4bW0zPWRhdGEzSAorCisJcGFkZGQJeG1tNCxbcmVsIFBEX0RFU0NBTEVfUDFdCisJcGFkZGQJeG1tMSxbcmVsIFBEX0RFU0NBTEVfUDFdCisJcHNyYWQJeG1tNCxERVNDQUxFX1AxCisJcHNyYWQJeG1tMSxERVNDQUxFX1AxCisJcGFkZGQJeG1tNSxbcmVsIFBEX0RFU0NBTEVfUDFdCisJcGFkZGQJeG1tMyxbcmVsIFBEX0RFU0NBTEVfUDFdCisJcHNyYWQJeG1tNSxERVNDQUxFX1AxCisJcHNyYWQJeG1tMyxERVNDQUxFX1AxCisKKwlwYWNrc3NkdyAgeG1tNCx4bW0xCQk7IHhtbTQ9ZGF0YTUKKwlwYWNrc3NkdyAgeG1tNSx4bW0zCQk7IHhtbTU9ZGF0YTMKKworCTsgLS0tLSBQYXNzIDI6IHByb2Nlc3MgY29sdW1ucy4KKworCW1vdmRxYQl4bW02LCBYTU1XT1JEIFt3aygyKV0JOyB4bW02PWNvbDAKKwltb3ZkcWEJeG1tMCwgWE1NV09SRCBbd2soNCldCTsgeG1tMD1jb2wyCisKKwk7IHhtbTY9KDAwIDEwIDIwIDMwIDQwIDUwIDYwIDcwKSwgeG1tMD0oMDIgMTIgMjIgMzIgNDIgNTIgNjIgNzIpCisJOyB4bW0yPSgwMSAxMSAyMSAzMSA0MSA1MSA2MSA3MSksIHhtbTU9KDAzIDEzIDIzIDMzIDQzIDUzIDYzIDczKQorCisJbW92ZHFhICAgIHhtbTEseG1tNgkJOyB0cmFuc3Bvc2UgY29lZmZpY2llbnRzKHBoYXNlIDEpCisJcHVucGNrbHdkIHhtbTYseG1tMgkJOyB4bW02PSgwMCAwMSAxMCAxMSAyMCAyMSAzMCAzMSkKKwlwdW5wY2tod2QgeG1tMSx4bW0yCQk7IHhtbTE9KDQwIDQxIDUwIDUxIDYwIDYxIDcwIDcxKQorCW1vdmRxYSAgICB4bW0zLHhtbTAJCTsgdHJhbnNwb3NlIGNvZWZmaWNpZW50cyhwaGFzZSAxKQorCXB1bnBja2x3ZCB4bW0wLHhtbTUJCTsgeG1tMD0oMDIgMDMgMTIgMTMgMjIgMjMgMzIgMzMpCisJcHVucGNraHdkIHhtbTMseG1tNQkJOyB4bW0zPSg0MiA0MyA1MiA1MyA2MiA2MyA3MiA3MykKKworCW1vdmRxYQl4bW0yLCBYTU1XT1JEIFt3aygzKV0JOyB4bW0yPWNvbDQKKwltb3ZkcWEJeG1tNSwgWE1NV09SRCBbd2soNSldCTsgeG1tNT1jb2w2CisKKwk7IHhtbTI9KDA0IDE0IDI0IDM0IDQ0IDU0IDY0IDc0KSwgeG1tNT0oMDYgMTYgMjYgMzYgNDYgNTYgNjYgNzYpCisJOyB4bW00PSgwNSAxNSAyNSAzNSA0NSA1NSA2NSA3NSksIHhtbTc9KDA3IDE3IDI3IDM3IDQ3IDU3IDY3IDc3KQorCisJbW92ZHFhCVhNTVdPUkQgW3drKDApXSwgeG1tMAk7IHdrKDApPSgwMiAwMyAxMiAxMyAyMiAyMyAzMiAzMykKKwltb3ZkcWEJWE1NV09SRCBbd2soMSldLCB4bW0zCTsgd2soMSk9KDQyIDQzIDUyIDUzIDYyIDYzIDcyIDczKQorCisJbW92ZHFhICAgIHhtbTAseG1tMgkJOyB0cmFuc3Bvc2UgY29lZmZpY2llbnRzKHBoYXNlIDEpCisJcHVucGNrbHdkIHhtbTIseG1tNAkJOyB4bW0yPSgwNCAwNSAxNCAxNSAyNCAyNSAzNCAzNSkKKwlwdW5wY2tod2QgeG1tMCx4bW00CQk7IHhtbTA9KDQ0IDQ1IDU0IDU1IDY0IDY1IDc0IDc1KQorCW1vdmRxYSAgICB4bW0zLHhtbTUJCTsgdHJhbnNwb3NlIGNvZWZmaWNpZW50cyhwaGFzZSAxKQorCXB1bnBja2x3ZCB4bW01LHhtbTcJCTsgeG1tNT0oMDYgMDcgMTYgMTcgMjYgMjcgMzYgMzcpCisJcHVucGNraHdkIHhtbTMseG1tNwkJOyB4bW0zPSg0NiA0NyA1NiA1NyA2NiA2NyA3NiA3NykKKworCW1vdmRxYSAgICB4bW00LHhtbTIJCTsgdHJhbnNwb3NlIGNvZWZmaWNpZW50cyhwaGFzZSAyKQorCXB1bnBja2xkcSB4bW0yLHhtbTUJCTsgeG1tMj0oMDQgMDUgMDYgMDcgMTQgMTUgMTYgMTcpCisJcHVucGNraGRxIHhtbTQseG1tNQkJOyB4bW00PSgyNCAyNSAyNiAyNyAzNCAzNSAzNiAzNykKKwltb3ZkcWEgICAgeG1tNyx4bW0wCQk7IHRyYW5zcG9zZSBjb2VmZmljaWVudHMocGhhc2UgMikKKwlwdW5wY2tsZHEgeG1tMCx4bW0zCQk7IHhtbTA9KDQ0IDQ1IDQ2IDQ3IDU0IDU1IDU2IDU3KQorCXB1bnBja2hkcSB4bW03LHhtbTMJCTsgeG1tNz0oNjQgNjUgNjYgNjcgNzQgNzUgNzYgNzcpCisKKwltb3ZkcWEJeG1tNSwgWE1NV09SRCBbd2soMCldCTsgeG1tNT0oMDIgMDMgMTIgMTMgMjIgMjMgMzIgMzMpCisJbW92ZHFhCXhtbTMsIFhNTVdPUkQgW3drKDEpXQk7IHhtbTM9KDQyIDQzIDUyIDUzIDYyIDYzIDcyIDczKQorCW1vdmRxYQlYTU1XT1JEIFt3aygyKV0sIHhtbTQJOyB3aygyKT0oMjQgMjUgMjYgMjcgMzQgMzUgMzYgMzcpCisJbW92ZHFhCVhNTVdPUkQgW3drKDMpXSwgeG1tMAk7IHdrKDMpPSg0NCA0NSA0NiA0NyA1NCA1NSA1NiA1NykKKworCW1vdmRxYSAgICB4bW00LHhtbTYJCTsgdHJhbnNwb3NlIGNvZWZmaWNpZW50cyhwaGFzZSAyKQorCXB1bnBja2xkcSB4bW02LHhtbTUJCTsgeG1tNj0oMDAgMDEgMDIgMDMgMTAgMTEgMTIgMTMpCisJcHVucGNraGRxIHhtbTQseG1tNQkJOyB4bW00PSgyMCAyMSAyMiAyMyAzMCAzMSAzMiAzMykKKwltb3ZkcWEgICAgeG1tMCx4bW0xCQk7IHRyYW5zcG9zZSBjb2VmZmljaWVudHMocGhhc2UgMikKKwlwdW5wY2tsZHEgeG1tMSx4bW0zCQk7IHhtbTE9KDQwIDQxIDQyIDQzIDUwIDUxIDUyIDUzKQorCXB1bnBja2hkcSB4bW0wLHhtbTMJCTsgeG1tMD0oNjAgNjEgNjIgNjMgNzAgNzEgNzIgNzMpCisKKwltb3ZkcWEgICAgIHhtbTUseG1tNgkJOyB0cmFuc3Bvc2UgY29lZmZpY2llbnRzKHBoYXNlIDMpCisJcHVucGNrbHFkcSB4bW02LHhtbTIJCTsgeG1tNj0oMDAgMDEgMDIgMDMgMDQgMDUgMDYgMDcpPWRhdGEwCisJcHVucGNraHFkcSB4bW01LHhtbTIJCTsgeG1tNT0oMTAgMTEgMTIgMTMgMTQgMTUgMTYgMTcpPWRhdGExCisJbW92ZHFhICAgICB4bW0zLHhtbTAJCTsgdHJhbnNwb3NlIGNvZWZmaWNpZW50cyhwaGFzZSAzKQorCXB1bnBja2xxZHEgeG1tMCx4bW03CQk7IHhtbTA9KDYwIDYxIDYyIDYzIDY0IDY1IDY2IDY3KT1kYXRhNgorCXB1bnBja2hxZHEgeG1tMyx4bW03CQk7IHhtbTM9KDcwIDcxIDcyIDczIDc0IDc1IDc2IDc3KT1kYXRhNworCisJbW92ZHFhCXhtbTIseG1tNQorCW1vdmRxYQl4bW03LHhtbTYKKwlwc3Vidwl4bW01LHhtbTAJCTsgeG1tNT1kYXRhMS1kYXRhNj10bXA2CisJcHN1YncJeG1tNix4bW0zCQk7IHhtbTY9ZGF0YTAtZGF0YTc9dG1wNworCXBhZGR3CXhtbTIseG1tMAkJOyB4bW0yPWRhdGExK2RhdGE2PXRtcDEKKwlwYWRkdwl4bW03LHhtbTMJCTsgeG1tNz1kYXRhMCtkYXRhNz10bXAwCisKKwltb3ZkcWEJeG1tMCwgWE1NV09SRCBbd2soMildCTsgeG1tMD0oMjQgMjUgMjYgMjcgMzQgMzUgMzYgMzcpCisJbW92ZHFhCXhtbTMsIFhNTVdPUkQgW3drKDMpXQk7IHhtbTM9KDQ0IDQ1IDQ2IDQ3IDU0IDU1IDU2IDU3KQorCW1vdmRxYQlYTU1XT1JEIFt3aygwKV0sIHhtbTUJOyB3aygwKT10bXA2CisJbW92ZHFhCVhNTVdPUkQgW3drKDEpXSwgeG1tNgk7IHdrKDEpPXRtcDcKKworCW1vdmRxYSAgICAgeG1tNSx4bW00CQk7IHRyYW5zcG9zZSBjb2VmZmljaWVudHMocGhhc2UgMykKKwlwdW5wY2tscWRxIHhtbTQseG1tMAkJOyB4bW00PSgyMCAyMSAyMiAyMyAyNCAyNSAyNiAyNyk9ZGF0YTIKKwlwdW5wY2tocWRxIHhtbTUseG1tMAkJOyB4bW01PSgzMCAzMSAzMiAzMyAzNCAzNSAzNiAzNyk9ZGF0YTMKKwltb3ZkcWEgICAgIHhtbTYseG1tMQkJOyB0cmFuc3Bvc2UgY29lZmZpY2llbnRzKHBoYXNlIDMpCisJcHVucGNrbHFkcSB4bW0xLHhtbTMJCTsgeG1tMT0oNDAgNDEgNDIgNDMgNDQgNDUgNDYgNDcpPWRhdGE0CisJcHVucGNraHFkcSB4bW02LHhtbTMJCTsgeG1tNj0oNTAgNTEgNTIgNTMgNTQgNTUgNTYgNTcpPWRhdGE1CisKKwltb3ZkcWEJeG1tMCx4bW01CisJbW92ZHFhCXhtbTMseG1tNAorCXBhZGR3CXhtbTUseG1tMQkJOyB4bW01PWRhdGEzK2RhdGE0PXRtcDMKKwlwYWRkdwl4bW00LHhtbTYJCTsgeG1tND1kYXRhMitkYXRhNT10bXAyCisJcHN1YncJeG1tMCx4bW0xCQk7IHhtbTA9ZGF0YTMtZGF0YTQ9dG1wNAorCXBzdWJ3CXhtbTMseG1tNgkJOyB4bW0zPWRhdGEyLWRhdGE1PXRtcDUKKworCTsgLS0gRXZlbiBwYXJ0CisKKwltb3ZkcWEJeG1tMSx4bW03CisJbW92ZHFhCXhtbTYseG1tMgorCXBhZGR3CXhtbTcseG1tNQkJOyB4bW03PXRtcDEwCisJcGFkZHcJeG1tMix4bW00CQk7IHhtbTI9dG1wMTEKKwlwc3Vidwl4bW0xLHhtbTUJCTsgeG1tMT10bXAxMworCXBzdWJ3CXhtbTYseG1tNAkJOyB4bW02PXRtcDEyCisKKwltb3ZkcWEJeG1tNSx4bW03CisJcGFkZHcJeG1tNyx4bW0yCQk7IHhtbTc9dG1wMTArdG1wMTEKKwlwc3Vidwl4bW01LHhtbTIJCTsgeG1tNT10bXAxMC10bXAxMQorCisJcGFkZHcJeG1tNyxbcmVsIFBXX0RFU0NBTEVfUDJYXQorCXBhZGR3CXhtbTUsW3JlbCBQV19ERVNDQUxFX1AyWF0KKwlwc3Jhdwl4bW03LFBBU1MxX0JJVFMJCTsgeG1tNz1kYXRhMAorCXBzcmF3CXhtbTUsUEFTUzFfQklUUwkJOyB4bW01PWRhdGE0CisKKwltb3ZkcWEJWE1NV09SRCBbWE1NQkxPQ0soMCwwLHJkeCxTSVpFT0ZfRENURUxFTSldLCB4bW03CisJbW92ZHFhCVhNTVdPUkQgW1hNTUJMT0NLKDQsMCxyZHgsU0laRU9GX0RDVEVMRU0pXSwgeG1tNQorCisJOyAoT3JpZ2luYWwpCisJOyB6MSA9ICh0bXAxMiArIHRtcDEzKSAqIDAuNTQxMTk2MTAwOworCTsgZGF0YTIgPSB6MSArIHRtcDEzICogMC43NjUzNjY4NjU7CisJOyBkYXRhNiA9IHoxICsgdG1wMTIgKiAtMS44NDc3NTkwNjU7CisJOworCTsgKFRoaXMgaW1wbGVtZW50YXRpb24pCisJOyBkYXRhMiA9IHRtcDEzICogKDAuNTQxMTk2MTAwICsgMC43NjUzNjY4NjUpICsgdG1wMTIgKiAwLjU0MTE5NjEwMDsKKwk7IGRhdGE2ID0gdG1wMTMgKiAwLjU0MTE5NjEwMCArIHRtcDEyICogKDAuNTQxMTk2MTAwIC0gMS44NDc3NTkwNjUpOworCisJbW92ZHFhICAgIHhtbTQseG1tMQkJOyB4bW0xPXRtcDEzCisJbW92ZHFhICAgIHhtbTIseG1tMQorCXB1bnBja2x3ZCB4bW00LHhtbTYJCTsgeG1tNj10bXAxMgorCXB1bnBja2h3ZCB4bW0yLHhtbTYKKwltb3ZkcWEgICAgeG1tMSx4bW00CisJbW92ZHFhICAgIHhtbTYseG1tMgorCXBtYWRkd2QgICB4bW00LFtyZWwgUFdfRjEzMF9GMDU0XQk7IHhtbTQ9ZGF0YTJMCisJcG1hZGR3ZCAgIHhtbTIsW3JlbCBQV19GMTMwX0YwNTRdCTsgeG1tMj1kYXRhMkgKKwlwbWFkZHdkICAgeG1tMSxbcmVsIFBXX0YwNTRfTUYxMzBdCTsgeG1tMT1kYXRhNkwKKwlwbWFkZHdkICAgeG1tNixbcmVsIFBXX0YwNTRfTUYxMzBdCTsgeG1tNj1kYXRhNkgKKworCXBhZGRkCXhtbTQsW3JlbCBQRF9ERVNDQUxFX1AyXQorCXBhZGRkCXhtbTIsW3JlbCBQRF9ERVNDQUxFX1AyXQorCXBzcmFkCXhtbTQsREVTQ0FMRV9QMgorCXBzcmFkCXhtbTIsREVTQ0FMRV9QMgorCXBhZGRkCXhtbTEsW3JlbCBQRF9ERVNDQUxFX1AyXQorCXBhZGRkCXhtbTYsW3JlbCBQRF9ERVNDQUxFX1AyXQorCXBzcmFkCXhtbTEsREVTQ0FMRV9QMgorCXBzcmFkCXhtbTYsREVTQ0FMRV9QMgorCisJcGFja3NzZHcgIHhtbTQseG1tMgkJOyB4bW00PWRhdGEyCisJcGFja3NzZHcgIHhtbTEseG1tNgkJOyB4bW0xPWRhdGE2CisKKwltb3ZkcWEJWE1NV09SRCBbWE1NQkxPQ0soMiwwLHJkeCxTSVpFT0ZfRENURUxFTSldLCB4bW00CisJbW92ZHFhCVhNTVdPUkQgW1hNTUJMT0NLKDYsMCxyZHgsU0laRU9GX0RDVEVMRU0pXSwgeG1tMQorCisJOyAtLSBPZGQgcGFydAorCisJbW92ZHFhCXhtbTcsIFhNTVdPUkQgW3drKDApXQk7IHhtbTc9dG1wNgorCW1vdmRxYQl4bW01LCBYTU1XT1JEIFt3aygxKV0JOyB4bW01PXRtcDcKKworCW1vdmRxYQl4bW0yLHhtbTAJCTsgeG1tMD10bXA0CisJbW92ZHFhCXhtbTYseG1tMwkJOyB4bW0zPXRtcDUKKwlwYWRkdwl4bW0yLHhtbTcJCTsgeG1tMj16MworCXBhZGR3CXhtbTYseG1tNQkJOyB4bW02PXo0CisKKwk7IChPcmlnaW5hbCkKKwk7IHo1ID0gKHozICsgejQpICogMS4xNzU4NzU2MDI7CisJOyB6MyA9IHozICogLTEuOTYxNTcwNTYwOyAgejQgPSB6NCAqIC0wLjM5MDE4MDY0NDsKKwk7IHozICs9IHo1OyAgejQgKz0gejU7CisJOworCTsgKFRoaXMgaW1wbGVtZW50YXRpb24pCisJOyB6MyA9IHozICogKDEuMTc1ODc1NjAyIC0gMS45NjE1NzA1NjApICsgejQgKiAxLjE3NTg3NTYwMjsKKwk7IHo0ID0gejMgKiAxLjE3NTg3NTYwMiArIHo0ICogKDEuMTc1ODc1NjAyIC0gMC4zOTAxODA2NDQpOworCisJbW92ZHFhICAgIHhtbTQseG1tMgorCW1vdmRxYSAgICB4bW0xLHhtbTIKKwlwdW5wY2tsd2QgeG1tNCx4bW02CisJcHVucGNraHdkIHhtbTEseG1tNgorCW1vdmRxYSAgICB4bW0yLHhtbTQKKwltb3ZkcWEgICAgeG1tNix4bW0xCisJcG1hZGR3ZCAgIHhtbTQsW3JlbCBQV19NRjA3OF9GMTE3XQk7IHhtbTQ9ejNMCisJcG1hZGR3ZCAgIHhtbTEsW3JlbCBQV19NRjA3OF9GMTE3XQk7IHhtbTE9ejNICisJcG1hZGR3ZCAgIHhtbTIsW3JlbCBQV19GMTE3X0YwNzhdCTsgeG1tMj16NEwKKwlwbWFkZHdkICAgeG1tNixbcmVsIFBXX0YxMTdfRjA3OF0JOyB4bW02PXo0SAorCisJbW92ZHFhCVhNTVdPUkQgW3drKDApXSwgeG1tNAk7IHdrKDApPXozTAorCW1vdmRxYQlYTU1XT1JEIFt3aygxKV0sIHhtbTEJOyB3aygxKT16M0gKKworCTsgKE9yaWdpbmFsKQorCTsgejEgPSB0bXA0ICsgdG1wNzsgIHoyID0gdG1wNSArIHRtcDY7CisJOyB0bXA0ID0gdG1wNCAqIDAuMjk4NjMxMzM2OyAgdG1wNSA9IHRtcDUgKiAyLjA1MzExOTg2OTsKKwk7IHRtcDYgPSB0bXA2ICogMy4wNzI3MTEwMjY7ICB0bXA3ID0gdG1wNyAqIDEuNTAxMzIxMTEwOworCTsgejEgPSB6MSAqIC0wLjg5OTk3NjIyMzsgIHoyID0gejIgKiAtMi41NjI5MTU0NDc7CisJOyBkYXRhNyA9IHRtcDQgKyB6MSArIHozOyAgZGF0YTUgPSB0bXA1ICsgejIgKyB6NDsKKwk7IGRhdGEzID0gdG1wNiArIHoyICsgejM7ICBkYXRhMSA9IHRtcDcgKyB6MSArIHo0OworCTsKKwk7IChUaGlzIGltcGxlbWVudGF0aW9uKQorCTsgdG1wNCA9IHRtcDQgKiAoMC4yOTg2MzEzMzYgLSAwLjg5OTk3NjIyMykgKyB0bXA3ICogLTAuODk5OTc2MjIzOworCTsgdG1wNSA9IHRtcDUgKiAoMi4wNTMxMTk4NjkgLSAyLjU2MjkxNTQ0NykgKyB0bXA2ICogLTIuNTYyOTE1NDQ3OworCTsgdG1wNiA9IHRtcDUgKiAtMi41NjI5MTU0NDcgKyB0bXA2ICogKDMuMDcyNzExMDI2IC0gMi41NjI5MTU0NDcpOworCTsgdG1wNyA9IHRtcDQgKiAtMC44OTk5NzYyMjMgKyB0bXA3ICogKDEuNTAxMzIxMTEwIC0gMC44OTk5NzYyMjMpOworCTsgZGF0YTcgPSB0bXA0ICsgejM7ICBkYXRhNSA9IHRtcDUgKyB6NDsKKwk7IGRhdGEzID0gdG1wNiArIHozOyAgZGF0YTEgPSB0bXA3ICsgejQ7CisKKwltb3ZkcWEgICAgeG1tNCx4bW0wCisJbW92ZHFhICAgIHhtbTEseG1tMAorCXB1bnBja2x3ZCB4bW00LHhtbTUKKwlwdW5wY2tod2QgeG1tMSx4bW01CisJbW92ZHFhICAgIHhtbTAseG1tNAorCW1vdmRxYSAgICB4bW01LHhtbTEKKwlwbWFkZHdkICAgeG1tNCxbcmVsIFBXX01GMDYwX01GMDg5XQk7IHhtbTQ9dG1wNEwKKwlwbWFkZHdkICAgeG1tMSxbcmVsIFBXX01GMDYwX01GMDg5XQk7IHhtbTE9dG1wNEgKKwlwbWFkZHdkICAgeG1tMCxbcmVsIFBXX01GMDg5X0YwNjBdCTsgeG1tMD10bXA3TAorCXBtYWRkd2QgICB4bW01LFtyZWwgUFdfTUYwODlfRjA2MF0JOyB4bW01PXRtcDdICisKKwlwYWRkZAl4bW00LCBYTU1XT1JEIFt3aygwKV0JOyB4bW00PWRhdGE3TAorCXBhZGRkCXhtbTEsIFhNTVdPUkQgW3drKDEpXQk7IHhtbTE9ZGF0YTdICisJcGFkZGQJeG1tMCx4bW0yCQk7IHhtbTA9ZGF0YTFMCisJcGFkZGQJeG1tNSx4bW02CQk7IHhtbTU9ZGF0YTFICisKKwlwYWRkZAl4bW00LFtyZWwgUERfREVTQ0FMRV9QMl0KKwlwYWRkZAl4bW0xLFtyZWwgUERfREVTQ0FMRV9QMl0KKwlwc3JhZAl4bW00LERFU0NBTEVfUDIKKwlwc3JhZAl4bW0xLERFU0NBTEVfUDIKKwlwYWRkZAl4bW0wLFtyZWwgUERfREVTQ0FMRV9QMl0KKwlwYWRkZAl4bW01LFtyZWwgUERfREVTQ0FMRV9QMl0KKwlwc3JhZAl4bW0wLERFU0NBTEVfUDIKKwlwc3JhZAl4bW01LERFU0NBTEVfUDIKKworCXBhY2tzc2R3ICB4bW00LHhtbTEJCTsgeG1tND1kYXRhNworCXBhY2tzc2R3ICB4bW0wLHhtbTUJCTsgeG1tMD1kYXRhMQorCisJbW92ZHFhCVhNTVdPUkQgW1hNTUJMT0NLKDcsMCxyZHgsU0laRU9GX0RDVEVMRU0pXSwgeG1tNAorCW1vdmRxYQlYTU1XT1JEIFtYTU1CTE9DSygxLDAscmR4LFNJWkVPRl9EQ1RFTEVNKV0sIHhtbTAKKworCW1vdmRxYSAgICB4bW0xLHhtbTMKKwltb3ZkcWEgICAgeG1tNSx4bW0zCisJcHVucGNrbHdkIHhtbTEseG1tNworCXB1bnBja2h3ZCB4bW01LHhtbTcKKwltb3ZkcWEgICAgeG1tMyx4bW0xCisJbW92ZHFhICAgIHhtbTcseG1tNQorCXBtYWRkd2QgICB4bW0xLFtyZWwgUFdfTUYwNTBfTUYyNTZdCTsgeG1tMT10bXA1TAorCXBtYWRkd2QgICB4bW01LFtyZWwgUFdfTUYwNTBfTUYyNTZdCTsgeG1tNT10bXA1SAorCXBtYWRkd2QgICB4bW0zLFtyZWwgUFdfTUYyNTZfRjA1MF0JOyB4bW0zPXRtcDZMCisJcG1hZGR3ZCAgIHhtbTcsW3JlbCBQV19NRjI1Nl9GMDUwXQk7IHhtbTc9dG1wNkgKKworCXBhZGRkCXhtbTEseG1tMgkJOyB4bW0xPWRhdGE1TAorCXBhZGRkCXhtbTUseG1tNgkJOyB4bW01PWRhdGE1SAorCXBhZGRkCXhtbTMsIFhNTVdPUkQgW3drKDApXQk7IHhtbTM9ZGF0YTNMCisJcGFkZGQJeG1tNywgWE1NV09SRCBbd2soMSldCTsgeG1tNz1kYXRhM0gKKworCXBhZGRkCXhtbTEsW3JlbCBQRF9ERVNDQUxFX1AyXQorCXBhZGRkCXhtbTUsW3JlbCBQRF9ERVNDQUxFX1AyXQorCXBzcmFkCXhtbTEsREVTQ0FMRV9QMgorCXBzcmFkCXhtbTUsREVTQ0FMRV9QMgorCXBhZGRkCXhtbTMsW3JlbCBQRF9ERVNDQUxFX1AyXQorCXBhZGRkCXhtbTcsW3JlbCBQRF9ERVNDQUxFX1AyXQorCXBzcmFkCXhtbTMsREVTQ0FMRV9QMgorCXBzcmFkCXhtbTcsREVTQ0FMRV9QMgorCisJcGFja3NzZHcgIHhtbTEseG1tNQkJOyB4bW0xPWRhdGE1CisJcGFja3NzZHcgIHhtbTMseG1tNwkJOyB4bW0zPWRhdGEzCisKKwltb3ZkcWEJWE1NV09SRCBbWE1NQkxPQ0soNSwwLHJkeCxTSVpFT0ZfRENURUxFTSldLCB4bW0xCisJbW92ZHFhCVhNTVdPUkQgW1hNTUJMT0NLKDMsMCxyZHgsU0laRU9GX0RDVEVMRU0pXSwgeG1tMworCisJdW5jb2xsZWN0X2FyZ3MKKwltb3YJcnNwLHJicAkJOyByc3AgPC0gYWxpZ25lZCByYnAKKwlwb3AJcnNwCQk7IHJzcCA8LSBvcmlnaW5hbCByYnAKKwlwb3AJcmJwCisJcmV0CisKKzsgRm9yIHNvbWUgcmVhc29uLCB0aGUgT1MgWCBsaW5rZXIgZG9lcyBub3QgaG9ub3IgdGhlIHJlcXVlc3QgdG8gYWxpZ24gdGhlCis7IHNlZ21lbnQgdW5sZXNzIHdlIGRvIHRoaXMuCisJYWxpZ24JMTYKZGlmZiAtLWdpdCBhL3NpbWQvamZzczJpbnQuYXNtIGIvc2ltZC9qZnNzMmludC5hc20KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNWUzZjJhYQotLS0gL2Rldi9udWxsCisrKyBiL3NpbWQvamZzczJpbnQuYXNtCkBAIC0wLDAgKzEsNjM0IEBACis7Cis7IGpmc3MyaW50LmFzbSAtIGFjY3VyYXRlIGludGVnZXIgRkRDVCAoU1NFMikKKzsKKzsgQ29weXJpZ2h0IDIwMDkgUGllcnJlIE9zc21hbiA8b3NzbWFuQGNlbmRpby5zZT4gZm9yIENlbmRpbyBBQgorOworOyBCYXNlZCBvbgorOyB4ODYgU0lNRCBleHRlbnNpb24gZm9yIElKRyBKUEVHIGxpYnJhcnkKKzsgQ29weXJpZ2h0IChDKSAxOTk5LTIwMDYsIE1JWUFTQUtBIE1hc2FydS4KKzsgRm9yIGNvbmRpdGlvbnMgb2YgZGlzdHJpYnV0aW9uIGFuZCB1c2UsIHNlZSBjb3B5cmlnaHQgbm90aWNlIGluIGpzaW1kZXh0LmluYworOworOyBUaGlzIGZpbGUgc2hvdWxkIGJlIGFzc2VtYmxlZCB3aXRoIE5BU00gKE5ldHdpZGUgQXNzZW1ibGVyKSwKKzsgY2FuICpub3QqIGJlIGFzc2VtYmxlZCB3aXRoIE1pY3Jvc29mdCdzIE1BU00gb3IgYW55IGNvbXBhdGlibGUKKzsgYXNzZW1ibGVyIChpbmNsdWRpbmcgQm9ybGFuZCdzIFR1cmJvIEFzc2VtYmxlcikuCis7IE5BU00gaXMgYXZhaWxhYmxlIGZyb20gaHR0cDovL25hc20uc291cmNlZm9yZ2UubmV0LyBvcgorOyBodHRwOi8vc291cmNlZm9yZ2UubmV0L3Byb2plY3Qvc2hvd2ZpbGVzLnBocD9ncm91cF9pZD02MjA4Cis7Cis7IFRoaXMgZmlsZSBjb250YWlucyBhIHNsb3ctYnV0LWFjY3VyYXRlIGludGVnZXIgaW1wbGVtZW50YXRpb24gb2YgdGhlCis7IGZvcndhcmQgRENUIChEaXNjcmV0ZSBDb3NpbmUgVHJhbnNmb3JtKS4gVGhlIGZvbGxvd2luZyBjb2RlIGlzIGJhc2VkCis7IGRpcmVjdGx5IG9uIHRoZSBJSkcncyBvcmlnaW5hbCBqZmRjdGludC5jOyBzZWUgdGhlIGpmZGN0aW50LmMgZm9yCis7IG1vcmUgZGV0YWlscy4KKzsKKzsgW1RBQjhdCisKKyVpbmNsdWRlICJqc2ltZGV4dC5pbmMiCislaW5jbHVkZSAiamRjdC5pbmMiCisKKzsgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworJWRlZmluZSBDT05TVF9CSVRTCTEzCislZGVmaW5lIFBBU1MxX0JJVFMJMgorCislZGVmaW5lIERFU0NBTEVfUDEJKENPTlNUX0JJVFMtUEFTUzFfQklUUykKKyVkZWZpbmUgREVTQ0FMRV9QMgkoQ09OU1RfQklUUytQQVNTMV9CSVRTKQorCislaWYgQ09OU1RfQklUUyA9PSAxMworRl8wXzI5OAllcXUJIDI0NDYJCTsgRklYKDAuMjk4NjMxMzM2KQorRl8wXzM5MAllcXUJIDMxOTYJCTsgRklYKDAuMzkwMTgwNjQ0KQorRl8wXzU0MQllcXUJIDQ0MzMJCTsgRklYKDAuNTQxMTk2MTAwKQorRl8wXzc2NQllcXUJIDYyNzAJCTsgRklYKDAuNzY1MzY2ODY1KQorRl8wXzg5OQllcXUJIDczNzMJCTsgRklYKDAuODk5OTc2MjIzKQorRl8xXzE3NQllcXUJIDk2MzMJCTsgRklYKDEuMTc1ODc1NjAyKQorRl8xXzUwMQllcXUJMTIyOTkJCTsgRklYKDEuNTAxMzIxMTEwKQorRl8xXzg0NwllcXUJMTUxMzcJCTsgRklYKDEuODQ3NzU5MDY1KQorRl8xXzk2MQllcXUJMTYwNjkJCTsgRklYKDEuOTYxNTcwNTYwKQorRl8yXzA1MwllcXUJMTY4MTkJCTsgRklYKDIuMDUzMTE5ODY5KQorRl8yXzU2MgllcXUJMjA5OTUJCTsgRklYKDIuNTYyOTE1NDQ3KQorRl8zXzA3MgllcXUJMjUxNzIJCTsgRklYKDMuMDcyNzExMDI2KQorJWVsc2UKKzsgTkFTTSBjYW5ub3QgZG8gY29tcGlsZS10aW1lIGFyaXRobWV0aWMgb24gZmxvYXRpbmctcG9pbnQgY29uc3RhbnRzLgorJWRlZmluZSBERVNDQUxFKHgsbikgICgoKHgpKygxPDwoKG4pLTEpKSk+PihuKSkKK0ZfMF8yOTgJZXF1CURFU0NBTEUoIDMyMDY1Mjk1NSwzMC1DT05TVF9CSVRTKQk7IEZJWCgwLjI5ODYzMTMzNikKK0ZfMF8zOTAJZXF1CURFU0NBTEUoIDQxODk1MzI3NiwzMC1DT05TVF9CSVRTKQk7IEZJWCgwLjM5MDE4MDY0NCkKK0ZfMF81NDEJZXF1CURFU0NBTEUoIDU4MTEwNDg4NywzMC1DT05TVF9CSVRTKQk7IEZJWCgwLjU0MTE5NjEwMCkKK0ZfMF83NjUJZXF1CURFU0NBTEUoIDgyMTgwNjQxMywzMC1DT05TVF9CSVRTKQk7IEZJWCgwLjc2NTM2Njg2NSkKK0ZfMF84OTkJZXF1CURFU0NBTEUoIDk2NjM0MjExMSwzMC1DT05TVF9CSVRTKQk7IEZJWCgwLjg5OTk3NjIyMykKK0ZfMV8xNzUJZXF1CURFU0NBTEUoMTI2MjU4NjgxMywzMC1DT05TVF9CSVRTKQk7IEZJWCgxLjE3NTg3NTYwMikKK0ZfMV81MDEJZXF1CURFU0NBTEUoMTYxMjAzMTI2NywzMC1DT05TVF9CSVRTKQk7IEZJWCgxLjUwMTMyMTExMCkKK0ZfMV84NDcJZXF1CURFU0NBTEUoMTk4NDAxNjE4OCwzMC1DT05TVF9CSVRTKQk7IEZJWCgxLjg0Nzc1OTA2NSkKK0ZfMV85NjEJZXF1CURFU0NBTEUoMjEwNjIyMDM1MCwzMC1DT05TVF9CSVRTKQk7IEZJWCgxLjk2MTU3MDU2MCkKK0ZfMl8wNTMJZXF1CURFU0NBTEUoMjIwNDUyMDY3MywzMC1DT05TVF9CSVRTKQk7IEZJWCgyLjA1MzExOTg2OSkKK0ZfMl81NjIJZXF1CURFU0NBTEUoMjc1MTkwOTUwNiwzMC1DT05TVF9CSVRTKQk7IEZJWCgyLjU2MjkxNTQ0NykKK0ZfM18wNzIJZXF1CURFU0NBTEUoMzI5OTI5ODM0MSwzMC1DT05TVF9CSVRTKQk7IEZJWCgzLjA3MjcxMTAyNikKKyVlbmRpZgorCis7IC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisJU0VDVElPTglTRUdfQ09OU1QKKworCWFsaWduegkxNgorCWdsb2JhbAlFWFROKGpjb25zdF9mZGN0X2lzbG93X3NzZTIpCisKK0VYVE4oamNvbnN0X2ZkY3RfaXNsb3dfc3NlMik6CisKK1BXX0YxMzBfRjA1NAl0aW1lcyA0IGR3ICAoRl8wXzU0MStGXzBfNzY1KSwgRl8wXzU0MQorUFdfRjA1NF9NRjEzMAl0aW1lcyA0IGR3ICBGXzBfNTQxLCAoRl8wXzU0MS1GXzFfODQ3KQorUFdfTUYwNzhfRjExNwl0aW1lcyA0IGR3ICAoRl8xXzE3NS1GXzFfOTYxKSwgRl8xXzE3NQorUFdfRjExN19GMDc4CXRpbWVzIDQgZHcgIEZfMV8xNzUsIChGXzFfMTc1LUZfMF8zOTApCitQV19NRjA2MF9NRjA4OQl0aW1lcyA0IGR3ICAoRl8wXzI5OC1GXzBfODk5KSwtRl8wXzg5OQorUFdfTUYwODlfRjA2MAl0aW1lcyA0IGR3IC1GXzBfODk5LCAoRl8xXzUwMS1GXzBfODk5KQorUFdfTUYwNTBfTUYyNTYJdGltZXMgNCBkdyAgKEZfMl8wNTMtRl8yXzU2MiksLUZfMl81NjIKK1BXX01GMjU2X0YwNTAJdGltZXMgNCBkdyAtRl8yXzU2MiwgKEZfM18wNzItRl8yXzU2MikKK1BEX0RFU0NBTEVfUDEJdGltZXMgNCBkZCAgMSA8PCAoREVTQ0FMRV9QMS0xKQorUERfREVTQ0FMRV9QMgl0aW1lcyA0IGRkICAxIDw8IChERVNDQUxFX1AyLTEpCitQV19ERVNDQUxFX1AyWAl0aW1lcyA4IGR3ICAxIDw8IChQQVNTMV9CSVRTLTEpCisKKwlhbGlnbnoJMTYKKworOyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCVNFQ1RJT04JU0VHX1RFWFQKKwlCSVRTCTMyCis7Cis7IFBlcmZvcm0gdGhlIGZvcndhcmQgRENUIG9uIG9uZSBibG9jayBvZiBzYW1wbGVzLgorOworOyBHTE9CQUwodm9pZCkKKzsganNpbWRfZmRjdF9pc2xvd19zc2UyIChEQ1RFTEVNICogZGF0YSkKKzsKKworJWRlZmluZSBkYXRhKGIpCQkoYikrOAkJOyBEQ1RFTEVNICogZGF0YQorCislZGVmaW5lIG9yaWdpbmFsX2VicAllYnArMAorJWRlZmluZSB3ayhpKQkJZWJwLShXS19OVU0tKGkpKSpTSVpFT0ZfWE1NV09SRAk7IHhtbXdvcmQgd2tbV0tfTlVNXQorJWRlZmluZSBXS19OVU0JCTYKKworCWFsaWduCTE2CisJZ2xvYmFsCUVYVE4oanNpbWRfZmRjdF9pc2xvd19zc2UyKQorCitFWFROKGpzaW1kX2ZkY3RfaXNsb3dfc3NlMik6CisJcHVzaAllYnAKKwltb3YJZWF4LGVzcAkJCQk7IGVheCA9IG9yaWdpbmFsIGVicAorCXN1Ygllc3AsIGJ5dGUgNAorCWFuZAllc3AsIGJ5dGUgKC1TSVpFT0ZfWE1NV09SRCkJOyBhbGlnbiB0byAxMjggYml0cworCW1vdglbZXNwXSxlYXgKKwltb3YJZWJwLGVzcAkJCQk7IGVicCA9IGFsaWduZWQgZWJwCisJbGVhCWVzcCwgW3drKDApXQorCXB1c2hwaWMJZWJ4Cis7CXB1c2gJZWN4CQk7IHVudXNlZAorOwlwdXNoCWVkeAkJOyBuZWVkIG5vdCBiZSBwcmVzZXJ2ZWQKKzsJcHVzaAllc2kJCTsgdW51c2VkCis7CXB1c2gJZWRpCQk7IHVudXNlZAorCisJZ2V0X0dPVAllYngJCTsgZ2V0IEdPVCBhZGRyZXNzCisKKwk7IC0tLS0gUGFzcyAxOiBwcm9jZXNzIHJvd3MuCisKKwltb3YJZWR4LCBQT0lOVEVSIFtkYXRhKGVheCldCTsgKERDVEVMRU0gKikKKworCW1vdmRxYQl4bW0wLCBYTU1XT1JEIFtYTU1CTE9DSygwLDAsZWR4LFNJWkVPRl9EQ1RFTEVNKV0KKwltb3ZkcWEJeG1tMSwgWE1NV09SRCBbWE1NQkxPQ0soMSwwLGVkeCxTSVpFT0ZfRENURUxFTSldCisJbW92ZHFhCXhtbTIsIFhNTVdPUkQgW1hNTUJMT0NLKDIsMCxlZHgsU0laRU9GX0RDVEVMRU0pXQorCW1vdmRxYQl4bW0zLCBYTU1XT1JEIFtYTU1CTE9DSygzLDAsZWR4LFNJWkVPRl9EQ1RFTEVNKV0KKworCTsgeG1tMD0oMDAgMDEgMDIgMDMgMDQgMDUgMDYgMDcpLCB4bW0yPSgyMCAyMSAyMiAyMyAyNCAyNSAyNiAyNykKKwk7IHhtbTE9KDEwIDExIDEyIDEzIDE0IDE1IDE2IDE3KSwgeG1tMz0oMzAgMzEgMzIgMzMgMzQgMzUgMzYgMzcpCisKKwltb3ZkcWEgICAgeG1tNCx4bW0wCQk7IHRyYW5zcG9zZSBjb2VmZmljaWVudHMocGhhc2UgMSkKKwlwdW5wY2tsd2QgeG1tMCx4bW0xCQk7IHhtbTA9KDAwIDEwIDAxIDExIDAyIDEyIDAzIDEzKQorCXB1bnBja2h3ZCB4bW00LHhtbTEJCTsgeG1tND0oMDQgMTQgMDUgMTUgMDYgMTYgMDcgMTcpCisJbW92ZHFhICAgIHhtbTUseG1tMgkJOyB0cmFuc3Bvc2UgY29lZmZpY2llbnRzKHBoYXNlIDEpCisJcHVucGNrbHdkIHhtbTIseG1tMwkJOyB4bW0yPSgyMCAzMCAyMSAzMSAyMiAzMiAyMyAzMykKKwlwdW5wY2tod2QgeG1tNSx4bW0zCQk7IHhtbTU9KDI0IDM0IDI1IDM1IDI2IDM2IDI3IDM3KQorCisJbW92ZHFhCXhtbTYsIFhNTVdPUkQgW1hNTUJMT0NLKDQsMCxlZHgsU0laRU9GX0RDVEVMRU0pXQorCW1vdmRxYQl4bW03LCBYTU1XT1JEIFtYTU1CTE9DSyg1LDAsZWR4LFNJWkVPRl9EQ1RFTEVNKV0KKwltb3ZkcWEJeG1tMSwgWE1NV09SRCBbWE1NQkxPQ0soNiwwLGVkeCxTSVpFT0ZfRENURUxFTSldCisJbW92ZHFhCXhtbTMsIFhNTVdPUkQgW1hNTUJMT0NLKDcsMCxlZHgsU0laRU9GX0RDVEVMRU0pXQorCisJOyB4bW02PSggNCAxMiAyMCAyOCAzNiA0NCA1MiA2MCksIHhtbTE9KCA2IDE0IDIyIDMwIDM4IDQ2IDU0IDYyKQorCTsgeG1tNz0oIDUgMTMgMjEgMjkgMzcgNDUgNTMgNjEpLCB4bW0zPSggNyAxNSAyMyAzMSAzOSA0NyA1NSA2MykKKworCW1vdmRxYQlYTU1XT1JEIFt3aygwKV0sIHhtbTIJOyB3aygwKT0oMjAgMzAgMjEgMzEgMjIgMzIgMjMgMzMpCisJbW92ZHFhCVhNTVdPUkQgW3drKDEpXSwgeG1tNQk7IHdrKDEpPSgyNCAzNCAyNSAzNSAyNiAzNiAyNyAzNykKKworCW1vdmRxYSAgICB4bW0yLHhtbTYJCTsgdHJhbnNwb3NlIGNvZWZmaWNpZW50cyhwaGFzZSAxKQorCXB1bnBja2x3ZCB4bW02LHhtbTcJCTsgeG1tNj0oNDAgNTAgNDEgNTEgNDIgNTIgNDMgNTMpCisJcHVucGNraHdkIHhtbTIseG1tNwkJOyB4bW0yPSg0NCA1NCA0NSA1NSA0NiA1NiA0NyA1NykKKwltb3ZkcWEgICAgeG1tNSx4bW0xCQk7IHRyYW5zcG9zZSBjb2VmZmljaWVudHMocGhhc2UgMSkKKwlwdW5wY2tsd2QgeG1tMSx4bW0zCQk7IHhtbTE9KDYwIDcwIDYxIDcxIDYyIDcyIDYzIDczKQorCXB1bnBja2h3ZCB4bW01LHhtbTMJCTsgeG1tNT0oNjQgNzQgNjUgNzUgNjYgNzYgNjcgNzcpCisKKwltb3ZkcWEgICAgeG1tNyx4bW02CQk7IHRyYW5zcG9zZSBjb2VmZmljaWVudHMocGhhc2UgMikKKwlwdW5wY2tsZHEgeG1tNix4bW0xCQk7IHhtbTY9KDQwIDUwIDYwIDcwIDQxIDUxIDYxIDcxKQorCXB1bnBja2hkcSB4bW03LHhtbTEJCTsgeG1tNz0oNDIgNTIgNjIgNzIgNDMgNTMgNjMgNzMpCisJbW92ZHFhICAgIHhtbTMseG1tMgkJOyB0cmFuc3Bvc2UgY29lZmZpY2llbnRzKHBoYXNlIDIpCisJcHVucGNrbGRxIHhtbTIseG1tNQkJOyB4bW0yPSg0NCA1NCA2NCA3NCA0NSA1NSA2NSA3NSkKKwlwdW5wY2toZHEgeG1tMyx4bW01CQk7IHhtbTM9KDQ2IDU2IDY2IDc2IDQ3IDU3IDY3IDc3KQorCisJbW92ZHFhCXhtbTEsIFhNTVdPUkQgW3drKDApXQk7IHhtbTE9KDIwIDMwIDIxIDMxIDIyIDMyIDIzIDMzKQorCW1vdmRxYQl4bW01LCBYTU1XT1JEIFt3aygxKV0JOyB4bW01PSgyNCAzNCAyNSAzNSAyNiAzNiAyNyAzNykKKwltb3ZkcWEJWE1NV09SRCBbd2soMildLCB4bW03CTsgd2soMik9KDQyIDUyIDYyIDcyIDQzIDUzIDYzIDczKQorCW1vdmRxYQlYTU1XT1JEIFt3aygzKV0sIHhtbTIJOyB3aygzKT0oNDQgNTQgNjQgNzQgNDUgNTUgNjUgNzUpCisKKwltb3ZkcWEgICAgeG1tNyx4bW0wCQk7IHRyYW5zcG9zZSBjb2VmZmljaWVudHMocGhhc2UgMikKKwlwdW5wY2tsZHEgeG1tMCx4bW0xCQk7IHhtbTA9KDAwIDEwIDIwIDMwIDAxIDExIDIxIDMxKQorCXB1bnBja2hkcSB4bW03LHhtbTEJCTsgeG1tNz0oMDIgMTIgMjIgMzIgMDMgMTMgMjMgMzMpCisJbW92ZHFhICAgIHhtbTIseG1tNAkJOyB0cmFuc3Bvc2UgY29lZmZpY2llbnRzKHBoYXNlIDIpCisJcHVucGNrbGRxIHhtbTQseG1tNQkJOyB4bW00PSgwNCAxNCAyNCAzNCAwNSAxNSAyNSAzNSkKKwlwdW5wY2toZHEgeG1tMix4bW01CQk7IHhtbTI9KDA2IDE2IDI2IDM2IDA3IDE3IDI3IDM3KQorCisJbW92ZHFhICAgICB4bW0xLHhtbTAJCTsgdHJhbnNwb3NlIGNvZWZmaWNpZW50cyhwaGFzZSAzKQorCXB1bnBja2xxZHEgeG1tMCx4bW02CQk7IHhtbTA9KDAwIDEwIDIwIDMwIDQwIDUwIDYwIDcwKT1kYXRhMAorCXB1bnBja2hxZHEgeG1tMSx4bW02CQk7IHhtbTE9KDAxIDExIDIxIDMxIDQxIDUxIDYxIDcxKT1kYXRhMQorCW1vdmRxYSAgICAgeG1tNSx4bW0yCQk7IHRyYW5zcG9zZSBjb2VmZmljaWVudHMocGhhc2UgMykKKwlwdW5wY2tscWRxIHhtbTIseG1tMwkJOyB4bW0yPSgwNiAxNiAyNiAzNiA0NiA1NiA2NiA3Nik9ZGF0YTYKKwlwdW5wY2tocWRxIHhtbTUseG1tMwkJOyB4bW01PSgwNyAxNyAyNyAzNyA0NyA1NyA2NyA3Nyk9ZGF0YTcKKworCW1vdmRxYQl4bW02LHhtbTEKKwltb3ZkcWEJeG1tMyx4bW0wCisJcHN1YncJeG1tMSx4bW0yCQk7IHhtbTE9ZGF0YTEtZGF0YTY9dG1wNgorCXBzdWJ3CXhtbTAseG1tNQkJOyB4bW0wPWRhdGEwLWRhdGE3PXRtcDcKKwlwYWRkdwl4bW02LHhtbTIJCTsgeG1tNj1kYXRhMStkYXRhNj10bXAxCisJcGFkZHcJeG1tMyx4bW01CQk7IHhtbTM9ZGF0YTArZGF0YTc9dG1wMAorCisJbW92ZHFhCXhtbTIsIFhNTVdPUkQgW3drKDIpXQk7IHhtbTI9KDQyIDUyIDYyIDcyIDQzIDUzIDYzIDczKQorCW1vdmRxYQl4bW01LCBYTU1XT1JEIFt3aygzKV0JOyB4bW01PSg0NCA1NCA2NCA3NCA0NSA1NSA2NSA3NSkKKwltb3ZkcWEJWE1NV09SRCBbd2soMCldLCB4bW0xCTsgd2soMCk9dG1wNgorCW1vdmRxYQlYTU1XT1JEIFt3aygxKV0sIHhtbTAJOyB3aygxKT10bXA3CisKKwltb3ZkcWEgICAgIHhtbTEseG1tNwkJOyB0cmFuc3Bvc2UgY29lZmZpY2llbnRzKHBoYXNlIDMpCisJcHVucGNrbHFkcSB4bW03LHhtbTIJCTsgeG1tNz0oMDIgMTIgMjIgMzIgNDIgNTIgNjIgNzIpPWRhdGEyCisJcHVucGNraHFkcSB4bW0xLHhtbTIJCTsgeG1tMT0oMDMgMTMgMjMgMzMgNDMgNTMgNjMgNzMpPWRhdGEzCisJbW92ZHFhICAgICB4bW0wLHhtbTQJCTsgdHJhbnNwb3NlIGNvZWZmaWNpZW50cyhwaGFzZSAzKQorCXB1bnBja2xxZHEgeG1tNCx4bW01CQk7IHhtbTQ9KDA0IDE0IDI0IDM0IDQ0IDU0IDY0IDc0KT1kYXRhNAorCXB1bnBja2hxZHEgeG1tMCx4bW01CQk7IHhtbTA9KDA1IDE1IDI1IDM1IDQ1IDU1IDY1IDc1KT1kYXRhNQorCisJbW92ZHFhCXhtbTIseG1tMQorCW1vdmRxYQl4bW01LHhtbTcKKwlwYWRkdwl4bW0xLHhtbTQJCTsgeG1tMT1kYXRhMytkYXRhND10bXAzCisJcGFkZHcJeG1tNyx4bW0wCQk7IHhtbTc9ZGF0YTIrZGF0YTU9dG1wMgorCXBzdWJ3CXhtbTIseG1tNAkJOyB4bW0yPWRhdGEzLWRhdGE0PXRtcDQKKwlwc3Vidwl4bW01LHhtbTAJCTsgeG1tNT1kYXRhMi1kYXRhNT10bXA1CisKKwk7IC0tIEV2ZW4gcGFydAorCisJbW92ZHFhCXhtbTQseG1tMworCW1vdmRxYQl4bW0wLHhtbTYKKwlwYWRkdwl4bW0zLHhtbTEJCTsgeG1tMz10bXAxMAorCXBhZGR3CXhtbTYseG1tNwkJOyB4bW02PXRtcDExCisJcHN1YncJeG1tNCx4bW0xCQk7IHhtbTQ9dG1wMTMKKwlwc3Vidwl4bW0wLHhtbTcJCTsgeG1tMD10bXAxMgorCisJbW92ZHFhCXhtbTEseG1tMworCXBhZGR3CXhtbTMseG1tNgkJOyB4bW0zPXRtcDEwK3RtcDExCisJcHN1YncJeG1tMSx4bW02CQk7IHhtbTE9dG1wMTAtdG1wMTEKKworCXBzbGx3CXhtbTMsUEFTUzFfQklUUwkJOyB4bW0zPWRhdGEwCisJcHNsbHcJeG1tMSxQQVNTMV9CSVRTCQk7IHhtbTE9ZGF0YTQKKworCW1vdmRxYQlYTU1XT1JEIFt3aygyKV0sIHhtbTMJOyB3aygyKT1kYXRhMAorCW1vdmRxYQlYTU1XT1JEIFt3aygzKV0sIHhtbTEJOyB3aygzKT1kYXRhNAorCisJOyAoT3JpZ2luYWwpCisJOyB6MSA9ICh0bXAxMiArIHRtcDEzKSAqIDAuNTQxMTk2MTAwOworCTsgZGF0YTIgPSB6MSArIHRtcDEzICogMC43NjUzNjY4NjU7CisJOyBkYXRhNiA9IHoxICsgdG1wMTIgKiAtMS44NDc3NTkwNjU7CisJOworCTsgKFRoaXMgaW1wbGVtZW50YXRpb24pCisJOyBkYXRhMiA9IHRtcDEzICogKDAuNTQxMTk2MTAwICsgMC43NjUzNjY4NjUpICsgdG1wMTIgKiAwLjU0MTE5NjEwMDsKKwk7IGRhdGE2ID0gdG1wMTMgKiAwLjU0MTE5NjEwMCArIHRtcDEyICogKDAuNTQxMTk2MTAwIC0gMS44NDc3NTkwNjUpOworCisJbW92ZHFhICAgIHhtbTcseG1tNAkJOyB4bW00PXRtcDEzCisJbW92ZHFhICAgIHhtbTYseG1tNAorCXB1bnBja2x3ZCB4bW03LHhtbTAJCTsgeG1tMD10bXAxMgorCXB1bnBja2h3ZCB4bW02LHhtbTAKKwltb3ZkcWEgICAgeG1tNCx4bW03CisJbW92ZHFhICAgIHhtbTAseG1tNgorCXBtYWRkd2QgICB4bW03LFtHT1RPRkYoZWJ4LFBXX0YxMzBfRjA1NCldCTsgeG1tNz1kYXRhMkwKKwlwbWFkZHdkICAgeG1tNixbR09UT0ZGKGVieCxQV19GMTMwX0YwNTQpXQk7IHhtbTY9ZGF0YTJICisJcG1hZGR3ZCAgIHhtbTQsW0dPVE9GRihlYngsUFdfRjA1NF9NRjEzMCldCTsgeG1tND1kYXRhNkwKKwlwbWFkZHdkICAgeG1tMCxbR09UT0ZGKGVieCxQV19GMDU0X01GMTMwKV0JOyB4bW0wPWRhdGE2SAorCisJcGFkZGQJeG1tNyxbR09UT0ZGKGVieCxQRF9ERVNDQUxFX1AxKV0KKwlwYWRkZAl4bW02LFtHT1RPRkYoZWJ4LFBEX0RFU0NBTEVfUDEpXQorCXBzcmFkCXhtbTcsREVTQ0FMRV9QMQorCXBzcmFkCXhtbTYsREVTQ0FMRV9QMQorCXBhZGRkCXhtbTQsW0dPVE9GRihlYngsUERfREVTQ0FMRV9QMSldCisJcGFkZGQJeG1tMCxbR09UT0ZGKGVieCxQRF9ERVNDQUxFX1AxKV0KKwlwc3JhZAl4bW00LERFU0NBTEVfUDEKKwlwc3JhZAl4bW0wLERFU0NBTEVfUDEKKworCXBhY2tzc2R3ICB4bW03LHhtbTYJCTsgeG1tNz1kYXRhMgorCXBhY2tzc2R3ICB4bW00LHhtbTAJCTsgeG1tND1kYXRhNgorCisJbW92ZHFhCVhNTVdPUkQgW3drKDQpXSwgeG1tNwk7IHdrKDQpPWRhdGEyCisJbW92ZHFhCVhNTVdPUkQgW3drKDUpXSwgeG1tNAk7IHdrKDUpPWRhdGE2CisKKwk7IC0tIE9kZCBwYXJ0CisKKwltb3ZkcWEJeG1tMywgWE1NV09SRCBbd2soMCldCTsgeG1tMz10bXA2CisJbW92ZHFhCXhtbTEsIFhNTVdPUkQgW3drKDEpXQk7IHhtbTE9dG1wNworCisJbW92ZHFhCXhtbTYseG1tMgkJOyB4bW0yPXRtcDQKKwltb3ZkcWEJeG1tMCx4bW01CQk7IHhtbTU9dG1wNQorCXBhZGR3CXhtbTYseG1tMwkJOyB4bW02PXozCisJcGFkZHcJeG1tMCx4bW0xCQk7IHhtbTA9ejQKKworCTsgKE9yaWdpbmFsKQorCTsgejUgPSAoejMgKyB6NCkgKiAxLjE3NTg3NTYwMjsKKwk7IHozID0gejMgKiAtMS45NjE1NzA1NjA7ICB6NCA9IHo0ICogLTAuMzkwMTgwNjQ0OworCTsgejMgKz0gejU7ICB6NCArPSB6NTsKKwk7CisJOyAoVGhpcyBpbXBsZW1lbnRhdGlvbikKKwk7IHozID0gejMgKiAoMS4xNzU4NzU2MDIgLSAxLjk2MTU3MDU2MCkgKyB6NCAqIDEuMTc1ODc1NjAyOworCTsgejQgPSB6MyAqIDEuMTc1ODc1NjAyICsgejQgKiAoMS4xNzU4NzU2MDIgLSAwLjM5MDE4MDY0NCk7CisKKwltb3ZkcWEgICAgeG1tNyx4bW02CisJbW92ZHFhICAgIHhtbTQseG1tNgorCXB1bnBja2x3ZCB4bW03LHhtbTAKKwlwdW5wY2tod2QgeG1tNCx4bW0wCisJbW92ZHFhICAgIHhtbTYseG1tNworCW1vdmRxYSAgICB4bW0wLHhtbTQKKwlwbWFkZHdkICAgeG1tNyxbR09UT0ZGKGVieCxQV19NRjA3OF9GMTE3KV0JOyB4bW03PXozTAorCXBtYWRkd2QgICB4bW00LFtHT1RPRkYoZWJ4LFBXX01GMDc4X0YxMTcpXQk7IHhtbTQ9ejNICisJcG1hZGR3ZCAgIHhtbTYsW0dPVE9GRihlYngsUFdfRjExN19GMDc4KV0JOyB4bW02PXo0TAorCXBtYWRkd2QgICB4bW0wLFtHT1RPRkYoZWJ4LFBXX0YxMTdfRjA3OCldCTsgeG1tMD16NEgKKworCW1vdmRxYQlYTU1XT1JEIFt3aygwKV0sIHhtbTcJOyB3aygwKT16M0wKKwltb3ZkcWEJWE1NV09SRCBbd2soMSldLCB4bW00CTsgd2soMSk9ejNICisKKwk7IChPcmlnaW5hbCkKKwk7IHoxID0gdG1wNCArIHRtcDc7ICB6MiA9IHRtcDUgKyB0bXA2OworCTsgdG1wNCA9IHRtcDQgKiAwLjI5ODYzMTMzNjsgIHRtcDUgPSB0bXA1ICogMi4wNTMxMTk4Njk7CisJOyB0bXA2ID0gdG1wNiAqIDMuMDcyNzExMDI2OyAgdG1wNyA9IHRtcDcgKiAxLjUwMTMyMTExMDsKKwk7IHoxID0gejEgKiAtMC44OTk5NzYyMjM7ICB6MiA9IHoyICogLTIuNTYyOTE1NDQ3OworCTsgZGF0YTcgPSB0bXA0ICsgejEgKyB6MzsgIGRhdGE1ID0gdG1wNSArIHoyICsgejQ7CisJOyBkYXRhMyA9IHRtcDYgKyB6MiArIHozOyAgZGF0YTEgPSB0bXA3ICsgejEgKyB6NDsKKwk7CisJOyAoVGhpcyBpbXBsZW1lbnRhdGlvbikKKwk7IHRtcDQgPSB0bXA0ICogKDAuMjk4NjMxMzM2IC0gMC44OTk5NzYyMjMpICsgdG1wNyAqIC0wLjg5OTk3NjIyMzsKKwk7IHRtcDUgPSB0bXA1ICogKDIuMDUzMTE5ODY5IC0gMi41NjI5MTU0NDcpICsgdG1wNiAqIC0yLjU2MjkxNTQ0NzsKKwk7IHRtcDYgPSB0bXA1ICogLTIuNTYyOTE1NDQ3ICsgdG1wNiAqICgzLjA3MjcxMTAyNiAtIDIuNTYyOTE1NDQ3KTsKKwk7IHRtcDcgPSB0bXA0ICogLTAuODk5OTc2MjIzICsgdG1wNyAqICgxLjUwMTMyMTExMCAtIDAuODk5OTc2MjIzKTsKKwk7IGRhdGE3ID0gdG1wNCArIHozOyAgZGF0YTUgPSB0bXA1ICsgejQ7CisJOyBkYXRhMyA9IHRtcDYgKyB6MzsgIGRhdGExID0gdG1wNyArIHo0OworCisJbW92ZHFhICAgIHhtbTcseG1tMgorCW1vdmRxYSAgICB4bW00LHhtbTIKKwlwdW5wY2tsd2QgeG1tNyx4bW0xCisJcHVucGNraHdkIHhtbTQseG1tMQorCW1vdmRxYSAgICB4bW0yLHhtbTcKKwltb3ZkcWEgICAgeG1tMSx4bW00CisJcG1hZGR3ZCAgIHhtbTcsW0dPVE9GRihlYngsUFdfTUYwNjBfTUYwODkpXQk7IHhtbTc9dG1wNEwKKwlwbWFkZHdkICAgeG1tNCxbR09UT0ZGKGVieCxQV19NRjA2MF9NRjA4OSldCTsgeG1tND10bXA0SAorCXBtYWRkd2QgICB4bW0yLFtHT1RPRkYoZWJ4LFBXX01GMDg5X0YwNjApXQk7IHhtbTI9dG1wN0wKKwlwbWFkZHdkICAgeG1tMSxbR09UT0ZGKGVieCxQV19NRjA4OV9GMDYwKV0JOyB4bW0xPXRtcDdICisKKwlwYWRkZAl4bW03LCBYTU1XT1JEIFt3aygwKV0JOyB4bW03PWRhdGE3TAorCXBhZGRkCXhtbTQsIFhNTVdPUkQgW3drKDEpXQk7IHhtbTQ9ZGF0YTdICisJcGFkZGQJeG1tMix4bW02CQk7IHhtbTI9ZGF0YTFMCisJcGFkZGQJeG1tMSx4bW0wCQk7IHhtbTE9ZGF0YTFICisKKwlwYWRkZAl4bW03LFtHT1RPRkYoZWJ4LFBEX0RFU0NBTEVfUDEpXQorCXBhZGRkCXhtbTQsW0dPVE9GRihlYngsUERfREVTQ0FMRV9QMSldCisJcHNyYWQJeG1tNyxERVNDQUxFX1AxCisJcHNyYWQJeG1tNCxERVNDQUxFX1AxCisJcGFkZGQJeG1tMixbR09UT0ZGKGVieCxQRF9ERVNDQUxFX1AxKV0KKwlwYWRkZAl4bW0xLFtHT1RPRkYoZWJ4LFBEX0RFU0NBTEVfUDEpXQorCXBzcmFkCXhtbTIsREVTQ0FMRV9QMQorCXBzcmFkCXhtbTEsREVTQ0FMRV9QMQorCisJcGFja3NzZHcgIHhtbTcseG1tNAkJOyB4bW03PWRhdGE3CisJcGFja3NzZHcgIHhtbTIseG1tMQkJOyB4bW0yPWRhdGExCisKKwltb3ZkcWEgICAgeG1tNCx4bW01CisJbW92ZHFhICAgIHhtbTEseG1tNQorCXB1bnBja2x3ZCB4bW00LHhtbTMKKwlwdW5wY2tod2QgeG1tMSx4bW0zCisJbW92ZHFhICAgIHhtbTUseG1tNAorCW1vdmRxYSAgICB4bW0zLHhtbTEKKwlwbWFkZHdkICAgeG1tNCxbR09UT0ZGKGVieCxQV19NRjA1MF9NRjI1NildCTsgeG1tND10bXA1TAorCXBtYWRkd2QgICB4bW0xLFtHT1RPRkYoZWJ4LFBXX01GMDUwX01GMjU2KV0JOyB4bW0xPXRtcDVICisJcG1hZGR3ZCAgIHhtbTUsW0dPVE9GRihlYngsUFdfTUYyNTZfRjA1MCldCTsgeG1tNT10bXA2TAorCXBtYWRkd2QgICB4bW0zLFtHT1RPRkYoZWJ4LFBXX01GMjU2X0YwNTApXQk7IHhtbTM9dG1wNkgKKworCXBhZGRkCXhtbTQseG1tNgkJOyB4bW00PWRhdGE1TAorCXBhZGRkCXhtbTEseG1tMAkJOyB4bW0xPWRhdGE1SAorCXBhZGRkCXhtbTUsIFhNTVdPUkQgW3drKDApXQk7IHhtbTU9ZGF0YTNMCisJcGFkZGQJeG1tMywgWE1NV09SRCBbd2soMSldCTsgeG1tMz1kYXRhM0gKKworCXBhZGRkCXhtbTQsW0dPVE9GRihlYngsUERfREVTQ0FMRV9QMSldCisJcGFkZGQJeG1tMSxbR09UT0ZGKGVieCxQRF9ERVNDQUxFX1AxKV0KKwlwc3JhZAl4bW00LERFU0NBTEVfUDEKKwlwc3JhZAl4bW0xLERFU0NBTEVfUDEKKwlwYWRkZAl4bW01LFtHT1RPRkYoZWJ4LFBEX0RFU0NBTEVfUDEpXQorCXBhZGRkCXhtbTMsW0dPVE9GRihlYngsUERfREVTQ0FMRV9QMSldCisJcHNyYWQJeG1tNSxERVNDQUxFX1AxCisJcHNyYWQJeG1tMyxERVNDQUxFX1AxCisKKwlwYWNrc3NkdyAgeG1tNCx4bW0xCQk7IHhtbTQ9ZGF0YTUKKwlwYWNrc3NkdyAgeG1tNSx4bW0zCQk7IHhtbTU9ZGF0YTMKKworCTsgLS0tLSBQYXNzIDI6IHByb2Nlc3MgY29sdW1ucy4KKworOwltb3YJZWR4LCBQT0lOVEVSIFtkYXRhKGVheCldCTsgKERDVEVMRU0gKikKKworCW1vdmRxYQl4bW02LCBYTU1XT1JEIFt3aygyKV0JOyB4bW02PWNvbDAKKwltb3ZkcWEJeG1tMCwgWE1NV09SRCBbd2soNCldCTsgeG1tMD1jb2wyCisKKwk7IHhtbTY9KDAwIDEwIDIwIDMwIDQwIDUwIDYwIDcwKSwgeG1tMD0oMDIgMTIgMjIgMzIgNDIgNTIgNjIgNzIpCisJOyB4bW0yPSgwMSAxMSAyMSAzMSA0MSA1MSA2MSA3MSksIHhtbTU9KDAzIDEzIDIzIDMzIDQzIDUzIDYzIDczKQorCisJbW92ZHFhICAgIHhtbTEseG1tNgkJOyB0cmFuc3Bvc2UgY29lZmZpY2llbnRzKHBoYXNlIDEpCisJcHVucGNrbHdkIHhtbTYseG1tMgkJOyB4bW02PSgwMCAwMSAxMCAxMSAyMCAyMSAzMCAzMSkKKwlwdW5wY2tod2QgeG1tMSx4bW0yCQk7IHhtbTE9KDQwIDQxIDUwIDUxIDYwIDYxIDcwIDcxKQorCW1vdmRxYSAgICB4bW0zLHhtbTAJCTsgdHJhbnNwb3NlIGNvZWZmaWNpZW50cyhwaGFzZSAxKQorCXB1bnBja2x3ZCB4bW0wLHhtbTUJCTsgeG1tMD0oMDIgMDMgMTIgMTMgMjIgMjMgMzIgMzMpCisJcHVucGNraHdkIHhtbTMseG1tNQkJOyB4bW0zPSg0MiA0MyA1MiA1MyA2MiA2MyA3MiA3MykKKworCW1vdmRxYQl4bW0yLCBYTU1XT1JEIFt3aygzKV0JOyB4bW0yPWNvbDQKKwltb3ZkcWEJeG1tNSwgWE1NV09SRCBbd2soNSldCTsgeG1tNT1jb2w2CisKKwk7IHhtbTI9KDA0IDE0IDI0IDM0IDQ0IDU0IDY0IDc0KSwgeG1tNT0oMDYgMTYgMjYgMzYgNDYgNTYgNjYgNzYpCisJOyB4bW00PSgwNSAxNSAyNSAzNSA0NSA1NSA2NSA3NSksIHhtbTc9KDA3IDE3IDI3IDM3IDQ3IDU3IDY3IDc3KQorCisJbW92ZHFhCVhNTVdPUkQgW3drKDApXSwgeG1tMAk7IHdrKDApPSgwMiAwMyAxMiAxMyAyMiAyMyAzMiAzMykKKwltb3ZkcWEJWE1NV09SRCBbd2soMSldLCB4bW0zCTsgd2soMSk9KDQyIDQzIDUyIDUzIDYyIDYzIDcyIDczKQorCisJbW92ZHFhICAgIHhtbTAseG1tMgkJOyB0cmFuc3Bvc2UgY29lZmZpY2llbnRzKHBoYXNlIDEpCisJcHVucGNrbHdkIHhtbTIseG1tNAkJOyB4bW0yPSgwNCAwNSAxNCAxNSAyNCAyNSAzNCAzNSkKKwlwdW5wY2tod2QgeG1tMCx4bW00CQk7IHhtbTA9KDQ0IDQ1IDU0IDU1IDY0IDY1IDc0IDc1KQorCW1vdmRxYSAgICB4bW0zLHhtbTUJCTsgdHJhbnNwb3NlIGNvZWZmaWNpZW50cyhwaGFzZSAxKQorCXB1bnBja2x3ZCB4bW01LHhtbTcJCTsgeG1tNT0oMDYgMDcgMTYgMTcgMjYgMjcgMzYgMzcpCisJcHVucGNraHdkIHhtbTMseG1tNwkJOyB4bW0zPSg0NiA0NyA1NiA1NyA2NiA2NyA3NiA3NykKKworCW1vdmRxYSAgICB4bW00LHhtbTIJCTsgdHJhbnNwb3NlIGNvZWZmaWNpZW50cyhwaGFzZSAyKQorCXB1bnBja2xkcSB4bW0yLHhtbTUJCTsgeG1tMj0oMDQgMDUgMDYgMDcgMTQgMTUgMTYgMTcpCisJcHVucGNraGRxIHhtbTQseG1tNQkJOyB4bW00PSgyNCAyNSAyNiAyNyAzNCAzNSAzNiAzNykKKwltb3ZkcWEgICAgeG1tNyx4bW0wCQk7IHRyYW5zcG9zZSBjb2VmZmljaWVudHMocGhhc2UgMikKKwlwdW5wY2tsZHEgeG1tMCx4bW0zCQk7IHhtbTA9KDQ0IDQ1IDQ2IDQ3IDU0IDU1IDU2IDU3KQorCXB1bnBja2hkcSB4bW03LHhtbTMJCTsgeG1tNz0oNjQgNjUgNjYgNjcgNzQgNzUgNzYgNzcpCisKKwltb3ZkcWEJeG1tNSwgWE1NV09SRCBbd2soMCldCTsgeG1tNT0oMDIgMDMgMTIgMTMgMjIgMjMgMzIgMzMpCisJbW92ZHFhCXhtbTMsIFhNTVdPUkQgW3drKDEpXQk7IHhtbTM9KDQyIDQzIDUyIDUzIDYyIDYzIDcyIDczKQorCW1vdmRxYQlYTU1XT1JEIFt3aygyKV0sIHhtbTQJOyB3aygyKT0oMjQgMjUgMjYgMjcgMzQgMzUgMzYgMzcpCisJbW92ZHFhCVhNTVdPUkQgW3drKDMpXSwgeG1tMAk7IHdrKDMpPSg0NCA0NSA0NiA0NyA1NCA1NSA1NiA1NykKKworCW1vdmRxYSAgICB4bW00LHhtbTYJCTsgdHJhbnNwb3NlIGNvZWZmaWNpZW50cyhwaGFzZSAyKQorCXB1bnBja2xkcSB4bW02LHhtbTUJCTsgeG1tNj0oMDAgMDEgMDIgMDMgMTAgMTEgMTIgMTMpCisJcHVucGNraGRxIHhtbTQseG1tNQkJOyB4bW00PSgyMCAyMSAyMiAyMyAzMCAzMSAzMiAzMykKKwltb3ZkcWEgICAgeG1tMCx4bW0xCQk7IHRyYW5zcG9zZSBjb2VmZmljaWVudHMocGhhc2UgMikKKwlwdW5wY2tsZHEgeG1tMSx4bW0zCQk7IHhtbTE9KDQwIDQxIDQyIDQzIDUwIDUxIDUyIDUzKQorCXB1bnBja2hkcSB4bW0wLHhtbTMJCTsgeG1tMD0oNjAgNjEgNjIgNjMgNzAgNzEgNzIgNzMpCisKKwltb3ZkcWEgICAgIHhtbTUseG1tNgkJOyB0cmFuc3Bvc2UgY29lZmZpY2llbnRzKHBoYXNlIDMpCisJcHVucGNrbHFkcSB4bW02LHhtbTIJCTsgeG1tNj0oMDAgMDEgMDIgMDMgMDQgMDUgMDYgMDcpPWRhdGEwCisJcHVucGNraHFkcSB4bW01LHhtbTIJCTsgeG1tNT0oMTAgMTEgMTIgMTMgMTQgMTUgMTYgMTcpPWRhdGExCisJbW92ZHFhICAgICB4bW0zLHhtbTAJCTsgdHJhbnNwb3NlIGNvZWZmaWNpZW50cyhwaGFzZSAzKQorCXB1bnBja2xxZHEgeG1tMCx4bW03CQk7IHhtbTA9KDYwIDYxIDYyIDYzIDY0IDY1IDY2IDY3KT1kYXRhNgorCXB1bnBja2hxZHEgeG1tMyx4bW03CQk7IHhtbTM9KDcwIDcxIDcyIDczIDc0IDc1IDc2IDc3KT1kYXRhNworCisJbW92ZHFhCXhtbTIseG1tNQorCW1vdmRxYQl4bW03LHhtbTYKKwlwc3Vidwl4bW01LHhtbTAJCTsgeG1tNT1kYXRhMS1kYXRhNj10bXA2CisJcHN1YncJeG1tNix4bW0zCQk7IHhtbTY9ZGF0YTAtZGF0YTc9dG1wNworCXBhZGR3CXhtbTIseG1tMAkJOyB4bW0yPWRhdGExK2RhdGE2PXRtcDEKKwlwYWRkdwl4bW03LHhtbTMJCTsgeG1tNz1kYXRhMCtkYXRhNz10bXAwCisKKwltb3ZkcWEJeG1tMCwgWE1NV09SRCBbd2soMildCTsgeG1tMD0oMjQgMjUgMjYgMjcgMzQgMzUgMzYgMzcpCisJbW92ZHFhCXhtbTMsIFhNTVdPUkQgW3drKDMpXQk7IHhtbTM9KDQ0IDQ1IDQ2IDQ3IDU0IDU1IDU2IDU3KQorCW1vdmRxYQlYTU1XT1JEIFt3aygwKV0sIHhtbTUJOyB3aygwKT10bXA2CisJbW92ZHFhCVhNTVdPUkQgW3drKDEpXSwgeG1tNgk7IHdrKDEpPXRtcDcKKworCW1vdmRxYSAgICAgeG1tNSx4bW00CQk7IHRyYW5zcG9zZSBjb2VmZmljaWVudHMocGhhc2UgMykKKwlwdW5wY2tscWRxIHhtbTQseG1tMAkJOyB4bW00PSgyMCAyMSAyMiAyMyAyNCAyNSAyNiAyNyk9ZGF0YTIKKwlwdW5wY2tocWRxIHhtbTUseG1tMAkJOyB4bW01PSgzMCAzMSAzMiAzMyAzNCAzNSAzNiAzNyk9ZGF0YTMKKwltb3ZkcWEgICAgIHhtbTYseG1tMQkJOyB0cmFuc3Bvc2UgY29lZmZpY2llbnRzKHBoYXNlIDMpCisJcHVucGNrbHFkcSB4bW0xLHhtbTMJCTsgeG1tMT0oNDAgNDEgNDIgNDMgNDQgNDUgNDYgNDcpPWRhdGE0CisJcHVucGNraHFkcSB4bW02LHhtbTMJCTsgeG1tNj0oNTAgNTEgNTIgNTMgNTQgNTUgNTYgNTcpPWRhdGE1CisKKwltb3ZkcWEJeG1tMCx4bW01CisJbW92ZHFhCXhtbTMseG1tNAorCXBhZGR3CXhtbTUseG1tMQkJOyB4bW01PWRhdGEzK2RhdGE0PXRtcDMKKwlwYWRkdwl4bW00LHhtbTYJCTsgeG1tND1kYXRhMitkYXRhNT10bXAyCisJcHN1YncJeG1tMCx4bW0xCQk7IHhtbTA9ZGF0YTMtZGF0YTQ9dG1wNAorCXBzdWJ3CXhtbTMseG1tNgkJOyB4bW0zPWRhdGEyLWRhdGE1PXRtcDUKKworCTsgLS0gRXZlbiBwYXJ0CisKKwltb3ZkcWEJeG1tMSx4bW03CisJbW92ZHFhCXhtbTYseG1tMgorCXBhZGR3CXhtbTcseG1tNQkJOyB4bW03PXRtcDEwCisJcGFkZHcJeG1tMix4bW00CQk7IHhtbTI9dG1wMTEKKwlwc3Vidwl4bW0xLHhtbTUJCTsgeG1tMT10bXAxMworCXBzdWJ3CXhtbTYseG1tNAkJOyB4bW02PXRtcDEyCisKKwltb3ZkcWEJeG1tNSx4bW03CisJcGFkZHcJeG1tNyx4bW0yCQk7IHhtbTc9dG1wMTArdG1wMTEKKwlwc3Vidwl4bW01LHhtbTIJCTsgeG1tNT10bXAxMC10bXAxMQorCisJcGFkZHcJeG1tNyxbR09UT0ZGKGVieCxQV19ERVNDQUxFX1AyWCldCisJcGFkZHcJeG1tNSxbR09UT0ZGKGVieCxQV19ERVNDQUxFX1AyWCldCisJcHNyYXcJeG1tNyxQQVNTMV9CSVRTCQk7IHhtbTc9ZGF0YTAKKwlwc3Jhdwl4bW01LFBBU1MxX0JJVFMJCTsgeG1tNT1kYXRhNAorCisJbW92ZHFhCVhNTVdPUkQgW1hNTUJMT0NLKDAsMCxlZHgsU0laRU9GX0RDVEVMRU0pXSwgeG1tNworCW1vdmRxYQlYTU1XT1JEIFtYTU1CTE9DSyg0LDAsZWR4LFNJWkVPRl9EQ1RFTEVNKV0sIHhtbTUKKworCTsgKE9yaWdpbmFsKQorCTsgejEgPSAodG1wMTIgKyB0bXAxMykgKiAwLjU0MTE5NjEwMDsKKwk7IGRhdGEyID0gejEgKyB0bXAxMyAqIDAuNzY1MzY2ODY1OworCTsgZGF0YTYgPSB6MSArIHRtcDEyICogLTEuODQ3NzU5MDY1OworCTsKKwk7IChUaGlzIGltcGxlbWVudGF0aW9uKQorCTsgZGF0YTIgPSB0bXAxMyAqICgwLjU0MTE5NjEwMCArIDAuNzY1MzY2ODY1KSArIHRtcDEyICogMC41NDExOTYxMDA7CisJOyBkYXRhNiA9IHRtcDEzICogMC41NDExOTYxMDAgKyB0bXAxMiAqICgwLjU0MTE5NjEwMCAtIDEuODQ3NzU5MDY1KTsKKworCW1vdmRxYSAgICB4bW00LHhtbTEJCTsgeG1tMT10bXAxMworCW1vdmRxYSAgICB4bW0yLHhtbTEKKwlwdW5wY2tsd2QgeG1tNCx4bW02CQk7IHhtbTY9dG1wMTIKKwlwdW5wY2tod2QgeG1tMix4bW02CisJbW92ZHFhICAgIHhtbTEseG1tNAorCW1vdmRxYSAgICB4bW02LHhtbTIKKwlwbWFkZHdkICAgeG1tNCxbR09UT0ZGKGVieCxQV19GMTMwX0YwNTQpXQk7IHhtbTQ9ZGF0YTJMCisJcG1hZGR3ZCAgIHhtbTIsW0dPVE9GRihlYngsUFdfRjEzMF9GMDU0KV0JOyB4bW0yPWRhdGEySAorCXBtYWRkd2QgICB4bW0xLFtHT1RPRkYoZWJ4LFBXX0YwNTRfTUYxMzApXQk7IHhtbTE9ZGF0YTZMCisJcG1hZGR3ZCAgIHhtbTYsW0dPVE9GRihlYngsUFdfRjA1NF9NRjEzMCldCTsgeG1tNj1kYXRhNkgKKworCXBhZGRkCXhtbTQsW0dPVE9GRihlYngsUERfREVTQ0FMRV9QMildCisJcGFkZGQJeG1tMixbR09UT0ZGKGVieCxQRF9ERVNDQUxFX1AyKV0KKwlwc3JhZAl4bW00LERFU0NBTEVfUDIKKwlwc3JhZAl4bW0yLERFU0NBTEVfUDIKKwlwYWRkZAl4bW0xLFtHT1RPRkYoZWJ4LFBEX0RFU0NBTEVfUDIpXQorCXBhZGRkCXhtbTYsW0dPVE9GRihlYngsUERfREVTQ0FMRV9QMildCisJcHNyYWQJeG1tMSxERVNDQUxFX1AyCisJcHNyYWQJeG1tNixERVNDQUxFX1AyCisKKwlwYWNrc3NkdyAgeG1tNCx4bW0yCQk7IHhtbTQ9ZGF0YTIKKwlwYWNrc3NkdyAgeG1tMSx4bW02CQk7IHhtbTE9ZGF0YTYKKworCW1vdmRxYQlYTU1XT1JEIFtYTU1CTE9DSygyLDAsZWR4LFNJWkVPRl9EQ1RFTEVNKV0sIHhtbTQKKwltb3ZkcWEJWE1NV09SRCBbWE1NQkxPQ0soNiwwLGVkeCxTSVpFT0ZfRENURUxFTSldLCB4bW0xCisKKwk7IC0tIE9kZCBwYXJ0CisKKwltb3ZkcWEJeG1tNywgWE1NV09SRCBbd2soMCldCTsgeG1tNz10bXA2CisJbW92ZHFhCXhtbTUsIFhNTVdPUkQgW3drKDEpXQk7IHhtbTU9dG1wNworCisJbW92ZHFhCXhtbTIseG1tMAkJOyB4bW0wPXRtcDQKKwltb3ZkcWEJeG1tNix4bW0zCQk7IHhtbTM9dG1wNQorCXBhZGR3CXhtbTIseG1tNwkJOyB4bW0yPXozCisJcGFkZHcJeG1tNix4bW01CQk7IHhtbTY9ejQKKworCTsgKE9yaWdpbmFsKQorCTsgejUgPSAoejMgKyB6NCkgKiAxLjE3NTg3NTYwMjsKKwk7IHozID0gejMgKiAtMS45NjE1NzA1NjA7ICB6NCA9IHo0ICogLTAuMzkwMTgwNjQ0OworCTsgejMgKz0gejU7ICB6NCArPSB6NTsKKwk7CisJOyAoVGhpcyBpbXBsZW1lbnRhdGlvbikKKwk7IHozID0gejMgKiAoMS4xNzU4NzU2MDIgLSAxLjk2MTU3MDU2MCkgKyB6NCAqIDEuMTc1ODc1NjAyOworCTsgejQgPSB6MyAqIDEuMTc1ODc1NjAyICsgejQgKiAoMS4xNzU4NzU2MDIgLSAwLjM5MDE4MDY0NCk7CisKKwltb3ZkcWEgICAgeG1tNCx4bW0yCisJbW92ZHFhICAgIHhtbTEseG1tMgorCXB1bnBja2x3ZCB4bW00LHhtbTYKKwlwdW5wY2tod2QgeG1tMSx4bW02CisJbW92ZHFhICAgIHhtbTIseG1tNAorCW1vdmRxYSAgICB4bW02LHhtbTEKKwlwbWFkZHdkICAgeG1tNCxbR09UT0ZGKGVieCxQV19NRjA3OF9GMTE3KV0JOyB4bW00PXozTAorCXBtYWRkd2QgICB4bW0xLFtHT1RPRkYoZWJ4LFBXX01GMDc4X0YxMTcpXQk7IHhtbTE9ejNICisJcG1hZGR3ZCAgIHhtbTIsW0dPVE9GRihlYngsUFdfRjExN19GMDc4KV0JOyB4bW0yPXo0TAorCXBtYWRkd2QgICB4bW02LFtHT1RPRkYoZWJ4LFBXX0YxMTdfRjA3OCldCTsgeG1tNj16NEgKKworCW1vdmRxYQlYTU1XT1JEIFt3aygwKV0sIHhtbTQJOyB3aygwKT16M0wKKwltb3ZkcWEJWE1NV09SRCBbd2soMSldLCB4bW0xCTsgd2soMSk9ejNICisKKwk7IChPcmlnaW5hbCkKKwk7IHoxID0gdG1wNCArIHRtcDc7ICB6MiA9IHRtcDUgKyB0bXA2OworCTsgdG1wNCA9IHRtcDQgKiAwLjI5ODYzMTMzNjsgIHRtcDUgPSB0bXA1ICogMi4wNTMxMTk4Njk7CisJOyB0bXA2ID0gdG1wNiAqIDMuMDcyNzExMDI2OyAgdG1wNyA9IHRtcDcgKiAxLjUwMTMyMTExMDsKKwk7IHoxID0gejEgKiAtMC44OTk5NzYyMjM7ICB6MiA9IHoyICogLTIuNTYyOTE1NDQ3OworCTsgZGF0YTcgPSB0bXA0ICsgejEgKyB6MzsgIGRhdGE1ID0gdG1wNSArIHoyICsgejQ7CisJOyBkYXRhMyA9IHRtcDYgKyB6MiArIHozOyAgZGF0YTEgPSB0bXA3ICsgejEgKyB6NDsKKwk7CisJOyAoVGhpcyBpbXBsZW1lbnRhdGlvbikKKwk7IHRtcDQgPSB0bXA0ICogKDAuMjk4NjMxMzM2IC0gMC44OTk5NzYyMjMpICsgdG1wNyAqIC0wLjg5OTk3NjIyMzsKKwk7IHRtcDUgPSB0bXA1ICogKDIuMDUzMTE5ODY5IC0gMi41NjI5MTU0NDcpICsgdG1wNiAqIC0yLjU2MjkxNTQ0NzsKKwk7IHRtcDYgPSB0bXA1ICogLTIuNTYyOTE1NDQ3ICsgdG1wNiAqICgzLjA3MjcxMTAyNiAtIDIuNTYyOTE1NDQ3KTsKKwk7IHRtcDcgPSB0bXA0ICogLTAuODk5OTc2MjIzICsgdG1wNyAqICgxLjUwMTMyMTExMCAtIDAuODk5OTc2MjIzKTsKKwk7IGRhdGE3ID0gdG1wNCArIHozOyAgZGF0YTUgPSB0bXA1ICsgejQ7CisJOyBkYXRhMyA9IHRtcDYgKyB6MzsgIGRhdGExID0gdG1wNyArIHo0OworCisJbW92ZHFhICAgIHhtbTQseG1tMAorCW1vdmRxYSAgICB4bW0xLHhtbTAKKwlwdW5wY2tsd2QgeG1tNCx4bW01CisJcHVucGNraHdkIHhtbTEseG1tNQorCW1vdmRxYSAgICB4bW0wLHhtbTQKKwltb3ZkcWEgICAgeG1tNSx4bW0xCisJcG1hZGR3ZCAgIHhtbTQsW0dPVE9GRihlYngsUFdfTUYwNjBfTUYwODkpXQk7IHhtbTQ9dG1wNEwKKwlwbWFkZHdkICAgeG1tMSxbR09UT0ZGKGVieCxQV19NRjA2MF9NRjA4OSldCTsgeG1tMT10bXA0SAorCXBtYWRkd2QgICB4bW0wLFtHT1RPRkYoZWJ4LFBXX01GMDg5X0YwNjApXQk7IHhtbTA9dG1wN0wKKwlwbWFkZHdkICAgeG1tNSxbR09UT0ZGKGVieCxQV19NRjA4OV9GMDYwKV0JOyB4bW01PXRtcDdICisKKwlwYWRkZAl4bW00LCBYTU1XT1JEIFt3aygwKV0JOyB4bW00PWRhdGE3TAorCXBhZGRkCXhtbTEsIFhNTVdPUkQgW3drKDEpXQk7IHhtbTE9ZGF0YTdICisJcGFkZGQJeG1tMCx4bW0yCQk7IHhtbTA9ZGF0YTFMCisJcGFkZGQJeG1tNSx4bW02CQk7IHhtbTU9ZGF0YTFICisKKwlwYWRkZAl4bW00LFtHT1RPRkYoZWJ4LFBEX0RFU0NBTEVfUDIpXQorCXBhZGRkCXhtbTEsW0dPVE9GRihlYngsUERfREVTQ0FMRV9QMildCisJcHNyYWQJeG1tNCxERVNDQUxFX1AyCisJcHNyYWQJeG1tMSxERVNDQUxFX1AyCisJcGFkZGQJeG1tMCxbR09UT0ZGKGVieCxQRF9ERVNDQUxFX1AyKV0KKwlwYWRkZAl4bW01LFtHT1RPRkYoZWJ4LFBEX0RFU0NBTEVfUDIpXQorCXBzcmFkCXhtbTAsREVTQ0FMRV9QMgorCXBzcmFkCXhtbTUsREVTQ0FMRV9QMgorCisJcGFja3NzZHcgIHhtbTQseG1tMQkJOyB4bW00PWRhdGE3CisJcGFja3NzZHcgIHhtbTAseG1tNQkJOyB4bW0wPWRhdGExCisKKwltb3ZkcWEJWE1NV09SRCBbWE1NQkxPQ0soNywwLGVkeCxTSVpFT0ZfRENURUxFTSldLCB4bW00CisJbW92ZHFhCVhNTVdPUkQgW1hNTUJMT0NLKDEsMCxlZHgsU0laRU9GX0RDVEVMRU0pXSwgeG1tMAorCisJbW92ZHFhICAgIHhtbTEseG1tMworCW1vdmRxYSAgICB4bW01LHhtbTMKKwlwdW5wY2tsd2QgeG1tMSx4bW03CisJcHVucGNraHdkIHhtbTUseG1tNworCW1vdmRxYSAgICB4bW0zLHhtbTEKKwltb3ZkcWEgICAgeG1tNyx4bW01CisJcG1hZGR3ZCAgIHhtbTEsW0dPVE9GRihlYngsUFdfTUYwNTBfTUYyNTYpXQk7IHhtbTE9dG1wNUwKKwlwbWFkZHdkICAgeG1tNSxbR09UT0ZGKGVieCxQV19NRjA1MF9NRjI1NildCTsgeG1tNT10bXA1SAorCXBtYWRkd2QgICB4bW0zLFtHT1RPRkYoZWJ4LFBXX01GMjU2X0YwNTApXQk7IHhtbTM9dG1wNkwKKwlwbWFkZHdkICAgeG1tNyxbR09UT0ZGKGVieCxQV19NRjI1Nl9GMDUwKV0JOyB4bW03PXRtcDZICisKKwlwYWRkZAl4bW0xLHhtbTIJCTsgeG1tMT1kYXRhNUwKKwlwYWRkZAl4bW01LHhtbTYJCTsgeG1tNT1kYXRhNUgKKwlwYWRkZAl4bW0zLCBYTU1XT1JEIFt3aygwKV0JOyB4bW0zPWRhdGEzTAorCXBhZGRkCXhtbTcsIFhNTVdPUkQgW3drKDEpXQk7IHhtbTc9ZGF0YTNICisKKwlwYWRkZAl4bW0xLFtHT1RPRkYoZWJ4LFBEX0RFU0NBTEVfUDIpXQorCXBhZGRkCXhtbTUsW0dPVE9GRihlYngsUERfREVTQ0FMRV9QMildCisJcHNyYWQJeG1tMSxERVNDQUxFX1AyCisJcHNyYWQJeG1tNSxERVNDQUxFX1AyCisJcGFkZGQJeG1tMyxbR09UT0ZGKGVieCxQRF9ERVNDQUxFX1AyKV0KKwlwYWRkZAl4bW03LFtHT1RPRkYoZWJ4LFBEX0RFU0NBTEVfUDIpXQorCXBzcmFkCXhtbTMsREVTQ0FMRV9QMgorCXBzcmFkCXhtbTcsREVTQ0FMRV9QMgorCisJcGFja3NzZHcgIHhtbTEseG1tNQkJOyB4bW0xPWRhdGE1CisJcGFja3NzZHcgIHhtbTMseG1tNwkJOyB4bW0zPWRhdGEzCisKKwltb3ZkcWEJWE1NV09SRCBbWE1NQkxPQ0soNSwwLGVkeCxTSVpFT0ZfRENURUxFTSldLCB4bW0xCisJbW92ZHFhCVhNTVdPUkQgW1hNTUJMT0NLKDMsMCxlZHgsU0laRU9GX0RDVEVMRU0pXSwgeG1tMworCis7CXBvcAllZGkJCTsgdW51c2VkCis7CXBvcAllc2kJCTsgdW51c2VkCis7CXBvcAllZHgJCTsgbmVlZCBub3QgYmUgcHJlc2VydmVkCis7CXBvcAllY3gJCTsgdW51c2VkCisJcG9wcGljCWVieAorCW1vdgllc3AsZWJwCQk7IGVzcCA8LSBhbGlnbmVkIGVicAorCXBvcAllc3AJCTsgZXNwIDwtIG9yaWdpbmFsIGVicAorCXBvcAllYnAKKwlyZXQKKworOyBGb3Igc29tZSByZWFzb24sIHRoZSBPUyBYIGxpbmtlciBkb2VzIG5vdCBob25vciB0aGUgcmVxdWVzdCB0byBhbGlnbiB0aGUKKzsgc2VnbWVudCB1bmxlc3Mgd2UgZG8gdGhpcy4KKwlhbGlnbgkxNgpkaWZmIC0tZ2l0IGEvc2ltZC9qZnNzZWZsdC02NC5hc20gYi9zaW1kL2pmc3NlZmx0LTY0LmFzbQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wNzI0NWQyCi0tLSAvZGV2L251bGwKKysrIGIvc2ltZC9qZnNzZWZsdC02NC5hc20KQEAgLTAsMCArMSwzNTggQEAKKzsKKzsgamZzc2VmbHQtNjQuYXNtIC0gZmxvYXRpbmctcG9pbnQgRkRDVCAoNjQtYml0IFNTRSkKKzsKKzsgQ29weXJpZ2h0IDIwMDkgUGllcnJlIE9zc21hbiA8b3NzbWFuQGNlbmRpby5zZT4gZm9yIENlbmRpbyBBQgorOyBDb3B5cmlnaHQgMjAwOSBELiBSLiBDb21tYW5kZXIKKzsKKzsgQmFzZWQgb24KKzsgeDg2IFNJTUQgZXh0ZW5zaW9uIGZvciBJSkcgSlBFRyBsaWJyYXJ5Cis7IENvcHlyaWdodCAoQykgMTk5OS0yMDA2LCBNSVlBU0FLQSBNYXNhcnUuCis7IEZvciBjb25kaXRpb25zIG9mIGRpc3RyaWJ1dGlvbiBhbmQgdXNlLCBzZWUgY29weXJpZ2h0IG5vdGljZSBpbiBqc2ltZGV4dC5pbmMKKzsKKzsgVGhpcyBmaWxlIHNob3VsZCBiZSBhc3NlbWJsZWQgd2l0aCBOQVNNIChOZXR3aWRlIEFzc2VtYmxlciksCis7IGNhbiAqbm90KiBiZSBhc3NlbWJsZWQgd2l0aCBNaWNyb3NvZnQncyBNQVNNIG9yIGFueSBjb21wYXRpYmxlCis7IGFzc2VtYmxlciAoaW5jbHVkaW5nIEJvcmxhbmQncyBUdXJibyBBc3NlbWJsZXIpLgorOyBOQVNNIGlzIGF2YWlsYWJsZSBmcm9tIGh0dHA6Ly9uYXNtLnNvdXJjZWZvcmdlLm5ldC8gb3IKKzsgaHR0cDovL3NvdXJjZWZvcmdlLm5ldC9wcm9qZWN0L3Nob3dmaWxlcy5waHA/Z3JvdXBfaWQ9NjIwOAorOworOyBUaGlzIGZpbGUgY29udGFpbnMgYSBmbG9hdGluZy1wb2ludCBpbXBsZW1lbnRhdGlvbiBvZiB0aGUgZm9yd2FyZCBEQ1QKKzsgKERpc2NyZXRlIENvc2luZSBUcmFuc2Zvcm0pLiBUaGUgZm9sbG93aW5nIGNvZGUgaXMgYmFzZWQgZGlyZWN0bHkgb24KKzsgdGhlIElKRydzIG9yaWdpbmFsIGpmZGN0Zmx0LmM7IHNlZSB0aGUgamZkY3RmbHQuYyBmb3IgbW9yZSBkZXRhaWxzLgorOworOyBbVEFCOF0KKworJWluY2x1ZGUgImpzaW1kZXh0LmluYyIKKyVpbmNsdWRlICJqZGN0LmluYyIKKworOyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCislbWFjcm8JdW5wY2tscHMyIDIJOyAlMT0oMCAxIDIgMykgLyAlMj0oNCA1IDYgNykgPT4gJTE9KDAgMSA0IDUpCisJc2h1ZnBzCSUxLCUyLDB4NDQKKyVlbmRtYWNybworCislbWFjcm8JdW5wY2tocHMyIDIJOyAlMT0oMCAxIDIgMykgLyAlMj0oNCA1IDYgNykgPT4gJTE9KDIgMyA2IDcpCisJc2h1ZnBzCSUxLCUyLDB4RUUKKyVlbmRtYWNybworCis7IC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisJU0VDVElPTglTRUdfQ09OU1QKKworCWFsaWduegkxNgorCWdsb2JhbAlFWFROKGpjb25zdF9mZGN0X2Zsb2F0X3NzZSkKKworRVhUTihqY29uc3RfZmRjdF9mbG9hdF9zc2UpOgorCitQRF8wXzM4Mgl0aW1lcyA0IGRkICAwLjM4MjY4MzQzMjM2NTA4OTc3MTcyODQ2MAorUERfMF83MDcJdGltZXMgNCBkZCAgMC43MDcxMDY3ODExODY1NDc1MjQ0MDA4NDQKK1BEXzBfNTQxCXRpbWVzIDQgZGQgIDAuNTQxMTk2MTAwMTQ2MTk2OTg0Mzk5NzIzCitQRF8xXzMwNgl0aW1lcyA0IGRkICAxLjMwNjU2Mjk2NDg3NjM3NjUyNzg1NjY0MworCisJYWxpZ256CTE2CisKKzsgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKwlTRUNUSU9OCVNFR19URVhUCisJQklUUwk2NAorOworOyBQZXJmb3JtIHRoZSBmb3J3YXJkIERDVCBvbiBvbmUgYmxvY2sgb2Ygc2FtcGxlcy4KKzsKKzsgR0xPQkFMKHZvaWQpCis7IGpzaW1kX2ZkY3RfZmxvYXRfc3NlIChGQVNUX0ZMT0FUICogZGF0YSkKKzsKKworOyByMTAgPSBGQVNUX0ZMT0FUICogZGF0YQorCislZGVmaW5lIHdrKGkpCQlyYnAtKFdLX05VTS0oaSkpKlNJWkVPRl9YTU1XT1JECTsgeG1td29yZCB3a1tXS19OVU1dCislZGVmaW5lIFdLX05VTQkJMgorCisJYWxpZ24JMTYKKwlnbG9iYWwJRVhUTihqc2ltZF9mZGN0X2Zsb2F0X3NzZSkKKworRVhUTihqc2ltZF9mZGN0X2Zsb2F0X3NzZSk6CisJcHVzaAlyYnAKKwltb3YJcmF4LHJzcAkJCQk7IHJheCA9IG9yaWdpbmFsIHJicAorCXN1Yglyc3AsIGJ5dGUgNAorCWFuZAlyc3AsIGJ5dGUgKC1TSVpFT0ZfWE1NV09SRCkJOyBhbGlnbiB0byAxMjggYml0cworCW1vdglbcnNwXSxyYXgKKwltb3YJcmJwLHJzcAkJCQk7IHJicCA9IGFsaWduZWQgcmJwCisJbGVhCXJzcCwgW3drKDApXQorCWNvbGxlY3RfYXJncworCisJOyAtLS0tIFBhc3MgMTogcHJvY2VzcyByb3dzLgorCisJbW92CXJkeCwgcjEwCTsgKEZBU1RfRkxPQVQgKikKKwltb3YJcmN4LCBEQ1RTSVpFLzQKKy5yb3dsb29wOgorCisJbW92YXBzCXhtbTAsIFhNTVdPUkQgW1hNTUJMT0NLKDIsMCxyZHgsU0laRU9GX0ZBU1RfRkxPQVQpXQorCW1vdmFwcwl4bW0xLCBYTU1XT1JEIFtYTU1CTE9DSygzLDAscmR4LFNJWkVPRl9GQVNUX0ZMT0FUKV0KKwltb3ZhcHMJeG1tMiwgWE1NV09SRCBbWE1NQkxPQ0soMiwxLHJkeCxTSVpFT0ZfRkFTVF9GTE9BVCldCisJbW92YXBzCXhtbTMsIFhNTVdPUkQgW1hNTUJMT0NLKDMsMSxyZHgsU0laRU9GX0ZBU1RfRkxPQVQpXQorCisJOyB4bW0wPSgyMCAyMSAyMiAyMyksIHhtbTI9KDI0IDI1IDI2IDI3KQorCTsgeG1tMT0oMzAgMzEgMzIgMzMpLCB4bW0zPSgzNCAzNSAzNiAzNykKKworCW1vdmFwcyAgIHhtbTQseG1tMAkJOyB0cmFuc3Bvc2UgY29lZmZpY2llbnRzKHBoYXNlIDEpCisJdW5wY2tscHMgeG1tMCx4bW0xCQk7IHhtbTA9KDIwIDMwIDIxIDMxKQorCXVucGNraHBzIHhtbTQseG1tMQkJOyB4bW00PSgyMiAzMiAyMyAzMykKKwltb3ZhcHMgICB4bW01LHhtbTIJCTsgdHJhbnNwb3NlIGNvZWZmaWNpZW50cyhwaGFzZSAxKQorCXVucGNrbHBzIHhtbTIseG1tMwkJOyB4bW0yPSgyNCAzNCAyNSAzNSkKKwl1bnBja2hwcyB4bW01LHhtbTMJCTsgeG1tNT0oMjYgMzYgMjcgMzcpCisKKwltb3ZhcHMJeG1tNiwgWE1NV09SRCBbWE1NQkxPQ0soMCwwLHJkeCxTSVpFT0ZfRkFTVF9GTE9BVCldCisJbW92YXBzCXhtbTcsIFhNTVdPUkQgW1hNTUJMT0NLKDEsMCxyZHgsU0laRU9GX0ZBU1RfRkxPQVQpXQorCW1vdmFwcwl4bW0xLCBYTU1XT1JEIFtYTU1CTE9DSygwLDEscmR4LFNJWkVPRl9GQVNUX0ZMT0FUKV0KKwltb3ZhcHMJeG1tMywgWE1NV09SRCBbWE1NQkxPQ0soMSwxLHJkeCxTSVpFT0ZfRkFTVF9GTE9BVCldCisKKwk7IHhtbTY9KDAwIDAxIDAyIDAzKSwgeG1tMT0oMDQgMDUgMDYgMDcpCisJOyB4bW03PSgxMCAxMSAxMiAxMyksIHhtbTM9KDE0IDE1IDE2IDE3KQorCisJbW92YXBzCVhNTVdPUkQgW3drKDApXSwgeG1tNAk7IHdrKDApPSgyMiAzMiAyMyAzMykKKwltb3ZhcHMJWE1NV09SRCBbd2soMSldLCB4bW0yCTsgd2soMSk9KDI0IDM0IDI1IDM1KQorCisJbW92YXBzICAgeG1tNCx4bW02CQk7IHRyYW5zcG9zZSBjb2VmZmljaWVudHMocGhhc2UgMSkKKwl1bnBja2xwcyB4bW02LHhtbTcJCTsgeG1tNj0oMDAgMTAgMDEgMTEpCisJdW5wY2tocHMgeG1tNCx4bW03CQk7IHhtbTQ9KDAyIDEyIDAzIDEzKQorCW1vdmFwcyAgIHhtbTIseG1tMQkJOyB0cmFuc3Bvc2UgY29lZmZpY2llbnRzKHBoYXNlIDEpCisJdW5wY2tscHMgeG1tMSx4bW0zCQk7IHhtbTE9KDA0IDE0IDA1IDE1KQorCXVucGNraHBzIHhtbTIseG1tMwkJOyB4bW0yPSgwNiAxNiAwNyAxNykKKworCW1vdmFwcyAgICB4bW03LHhtbTYJCTsgdHJhbnNwb3NlIGNvZWZmaWNpZW50cyhwaGFzZSAyKQorCXVucGNrbHBzMiB4bW02LHhtbTAJCTsgeG1tNj0oMDAgMTAgMjAgMzApPWRhdGEwCisJdW5wY2tocHMyIHhtbTcseG1tMAkJOyB4bW03PSgwMSAxMSAyMSAzMSk9ZGF0YTEKKwltb3ZhcHMgICAgeG1tMyx4bW0yCQk7IHRyYW5zcG9zZSBjb2VmZmljaWVudHMocGhhc2UgMikKKwl1bnBja2xwczIgeG1tMix4bW01CQk7IHhtbTI9KDA2IDE2IDI2IDM2KT1kYXRhNgorCXVucGNraHBzMiB4bW0zLHhtbTUJCTsgeG1tMz0oMDcgMTcgMjcgMzcpPWRhdGE3CisKKwltb3ZhcHMJeG1tMCx4bW03CisJbW92YXBzCXhtbTUseG1tNgorCXN1YnBzCXhtbTcseG1tMgkJOyB4bW03PWRhdGExLWRhdGE2PXRtcDYKKwlzdWJwcwl4bW02LHhtbTMJCTsgeG1tNj1kYXRhMC1kYXRhNz10bXA3CisJYWRkcHMJeG1tMCx4bW0yCQk7IHhtbTA9ZGF0YTErZGF0YTY9dG1wMQorCWFkZHBzCXhtbTUseG1tMwkJOyB4bW01PWRhdGEwK2RhdGE3PXRtcDAKKworCW1vdmFwcwl4bW0yLCBYTU1XT1JEIFt3aygwKV0JOyB4bW0yPSgyMiAzMiAyMyAzMykKKwltb3ZhcHMJeG1tMywgWE1NV09SRCBbd2soMSldCTsgeG1tMz0oMjQgMzQgMjUgMzUpCisJbW92YXBzCVhNTVdPUkQgW3drKDApXSwgeG1tNwk7IHdrKDApPXRtcDYKKwltb3ZhcHMJWE1NV09SRCBbd2soMSldLCB4bW02CTsgd2soMSk9dG1wNworCisJbW92YXBzICAgIHhtbTcseG1tNAkJOyB0cmFuc3Bvc2UgY29lZmZpY2llbnRzKHBoYXNlIDIpCisJdW5wY2tscHMyIHhtbTQseG1tMgkJOyB4bW00PSgwMiAxMiAyMiAzMik9ZGF0YTIKKwl1bnBja2hwczIgeG1tNyx4bW0yCQk7IHhtbTc9KDAzIDEzIDIzIDMzKT1kYXRhMworCW1vdmFwcyAgICB4bW02LHhtbTEJCTsgdHJhbnNwb3NlIGNvZWZmaWNpZW50cyhwaGFzZSAyKQorCXVucGNrbHBzMiB4bW0xLHhtbTMJCTsgeG1tMT0oMDQgMTQgMjQgMzQpPWRhdGE0CisJdW5wY2tocHMyIHhtbTYseG1tMwkJOyB4bW02PSgwNSAxNSAyNSAzNSk9ZGF0YTUKKworCW1vdmFwcwl4bW0yLHhtbTcKKwltb3ZhcHMJeG1tMyx4bW00CisJYWRkcHMJeG1tNyx4bW0xCQk7IHhtbTc9ZGF0YTMrZGF0YTQ9dG1wMworCWFkZHBzCXhtbTQseG1tNgkJOyB4bW00PWRhdGEyK2RhdGE1PXRtcDIKKwlzdWJwcwl4bW0yLHhtbTEJCTsgeG1tMj1kYXRhMy1kYXRhND10bXA0CisJc3VicHMJeG1tMyx4bW02CQk7IHhtbTM9ZGF0YTItZGF0YTU9dG1wNQorCisJOyAtLSBFdmVuIHBhcnQKKworCW1vdmFwcwl4bW0xLHhtbTUKKwltb3ZhcHMJeG1tNix4bW0wCisJc3VicHMJeG1tNSx4bW03CQk7IHhtbTU9dG1wMTMKKwlzdWJwcwl4bW0wLHhtbTQJCTsgeG1tMD10bXAxMgorCWFkZHBzCXhtbTEseG1tNwkJOyB4bW0xPXRtcDEwCisJYWRkcHMJeG1tNix4bW00CQk7IHhtbTY9dG1wMTEKKworCWFkZHBzCXhtbTAseG1tNQorCW11bHBzCXhtbTAsW3JlbCBQRF8wXzcwN10gOyB4bW0wPXoxCisKKwltb3ZhcHMJeG1tNyx4bW0xCisJbW92YXBzCXhtbTQseG1tNQorCXN1YnBzCXhtbTEseG1tNgkJOyB4bW0xPWRhdGE0CisJc3VicHMJeG1tNSx4bW0wCQk7IHhtbTU9ZGF0YTYKKwlhZGRwcwl4bW03LHhtbTYJCTsgeG1tNz1kYXRhMAorCWFkZHBzCXhtbTQseG1tMAkJOyB4bW00PWRhdGEyCisKKwltb3ZhcHMJWE1NV09SRCBbWE1NQkxPQ0soMCwxLHJkeCxTSVpFT0ZfRkFTVF9GTE9BVCldLCB4bW0xCisJbW92YXBzCVhNTVdPUkQgW1hNTUJMT0NLKDIsMSxyZHgsU0laRU9GX0ZBU1RfRkxPQVQpXSwgeG1tNQorCW1vdmFwcwlYTU1XT1JEIFtYTU1CTE9DSygwLDAscmR4LFNJWkVPRl9GQVNUX0ZMT0FUKV0sIHhtbTcKKwltb3ZhcHMJWE1NV09SRCBbWE1NQkxPQ0soMiwwLHJkeCxTSVpFT0ZfRkFTVF9GTE9BVCldLCB4bW00CisKKwk7IC0tIE9kZCBwYXJ0CisKKwltb3ZhcHMJeG1tNiwgWE1NV09SRCBbd2soMCldCTsgeG1tNj10bXA2CisJbW92YXBzCXhtbTAsIFhNTVdPUkQgW3drKDEpXQk7IHhtbTA9dG1wNworCisJYWRkcHMJeG1tMix4bW0zCQk7IHhtbTI9dG1wMTAKKwlhZGRwcwl4bW0zLHhtbTYJCTsgeG1tMz10bXAxMQorCWFkZHBzCXhtbTYseG1tMAkJOyB4bW02PXRtcDEyLCB4bW0wPXRtcDcKKworCW11bHBzCXhtbTMsW3JlbCBQRF8wXzcwN10gOyB4bW0zPXozCisKKwltb3ZhcHMJeG1tMSx4bW0yCQk7IHhtbTE9dG1wMTAKKwlzdWJwcwl4bW0yLHhtbTYKKwltdWxwcwl4bW0yLFtyZWwgUERfMF8zODJdIDsgeG1tMj16NQorCW11bHBzCXhtbTEsW3JlbCBQRF8wXzU0MV0gOyB4bW0xPU1VTFRJUExZKHRtcDEwLEZJWF8wXzU0MTE5NikKKwltdWxwcwl4bW02LFtyZWwgUERfMV8zMDZdIDsgeG1tNj1NVUxUSVBMWSh0bXAxMixGSVhfMV8zMDY1NjIpCisJYWRkcHMJeG1tMSx4bW0yCQk7IHhtbTE9ejIKKwlhZGRwcwl4bW02LHhtbTIJCTsgeG1tNj16NAorCisJbW92YXBzCXhtbTUseG1tMAorCXN1YnBzCXhtbTAseG1tMwkJOyB4bW0wPXoxMworCWFkZHBzCXhtbTUseG1tMwkJOyB4bW01PXoxMQorCisJbW92YXBzCXhtbTcseG1tMAorCW1vdmFwcwl4bW00LHhtbTUKKwlzdWJwcwl4bW0wLHhtbTEJCTsgeG1tMD1kYXRhMworCXN1YnBzCXhtbTUseG1tNgkJOyB4bW01PWRhdGE3CisJYWRkcHMJeG1tNyx4bW0xCQk7IHhtbTc9ZGF0YTUKKwlhZGRwcwl4bW00LHhtbTYJCTsgeG1tND1kYXRhMQorCisJbW92YXBzCVhNTVdPUkQgW1hNTUJMT0NLKDMsMCxyZHgsU0laRU9GX0ZBU1RfRkxPQVQpXSwgeG1tMAorCW1vdmFwcwlYTU1XT1JEIFtYTU1CTE9DSygzLDEscmR4LFNJWkVPRl9GQVNUX0ZMT0FUKV0sIHhtbTUKKwltb3ZhcHMJWE1NV09SRCBbWE1NQkxPQ0soMSwxLHJkeCxTSVpFT0ZfRkFTVF9GTE9BVCldLCB4bW03CisJbW92YXBzCVhNTVdPUkQgW1hNTUJMT0NLKDEsMCxyZHgsU0laRU9GX0ZBU1RfRkxPQVQpXSwgeG1tNAorCisJYWRkCXJkeCwgNCpEQ1RTSVpFKlNJWkVPRl9GQVNUX0ZMT0FUCisJZGVjCXJjeAorCWpuegluZWFyIC5yb3dsb29wCisKKwk7IC0tLS0gUGFzcyAyOiBwcm9jZXNzIGNvbHVtbnMuCisKKwltb3YJcmR4LCByMTAJOyAoRkFTVF9GTE9BVCAqKQorCW1vdglyY3gsIERDVFNJWkUvNAorLmNvbHVtbmxvb3A6CisKKwltb3ZhcHMJeG1tMCwgWE1NV09SRCBbWE1NQkxPQ0soMiwwLHJkeCxTSVpFT0ZfRkFTVF9GTE9BVCldCisJbW92YXBzCXhtbTEsIFhNTVdPUkQgW1hNTUJMT0NLKDMsMCxyZHgsU0laRU9GX0ZBU1RfRkxPQVQpXQorCW1vdmFwcwl4bW0yLCBYTU1XT1JEIFtYTU1CTE9DSyg2LDAscmR4LFNJWkVPRl9GQVNUX0ZMT0FUKV0KKwltb3ZhcHMJeG1tMywgWE1NV09SRCBbWE1NQkxPQ0soNywwLHJkeCxTSVpFT0ZfRkFTVF9GTE9BVCldCisKKwk7IHhtbTA9KDAyIDEyIDIyIDMyKSwgeG1tMj0oNDIgNTIgNjIgNzIpCisJOyB4bW0xPSgwMyAxMyAyMyAzMyksIHhtbTM9KDQzIDUzIDYzIDczKQorCisJbW92YXBzICAgeG1tNCx4bW0wCQk7IHRyYW5zcG9zZSBjb2VmZmljaWVudHMocGhhc2UgMSkKKwl1bnBja2xwcyB4bW0wLHhtbTEJCTsgeG1tMD0oMDIgMDMgMTIgMTMpCisJdW5wY2tocHMgeG1tNCx4bW0xCQk7IHhtbTQ9KDIyIDIzIDMyIDMzKQorCW1vdmFwcyAgIHhtbTUseG1tMgkJOyB0cmFuc3Bvc2UgY29lZmZpY2llbnRzKHBoYXNlIDEpCisJdW5wY2tscHMgeG1tMix4bW0zCQk7IHhtbTI9KDQyIDQzIDUyIDUzKQorCXVucGNraHBzIHhtbTUseG1tMwkJOyB4bW01PSg2MiA2MyA3MiA3MykKKworCW1vdmFwcwl4bW02LCBYTU1XT1JEIFtYTU1CTE9DSygwLDAscmR4LFNJWkVPRl9GQVNUX0ZMT0FUKV0KKwltb3ZhcHMJeG1tNywgWE1NV09SRCBbWE1NQkxPQ0soMSwwLHJkeCxTSVpFT0ZfRkFTVF9GTE9BVCldCisJbW92YXBzCXhtbTEsIFhNTVdPUkQgW1hNTUJMT0NLKDQsMCxyZHgsU0laRU9GX0ZBU1RfRkxPQVQpXQorCW1vdmFwcwl4bW0zLCBYTU1XT1JEIFtYTU1CTE9DSyg1LDAscmR4LFNJWkVPRl9GQVNUX0ZMT0FUKV0KKworCTsgeG1tNj0oMDAgMTAgMjAgMzApLCB4bW0xPSg0MCA1MCA2MCA3MCkKKwk7IHhtbTc9KDAxIDExIDIxIDMxKSwgeG1tMz0oNDEgNTEgNjEgNzEpCisKKwltb3ZhcHMJWE1NV09SRCBbd2soMCldLCB4bW00CTsgd2soMCk9KDIyIDIzIDMyIDMzKQorCW1vdmFwcwlYTU1XT1JEIFt3aygxKV0sIHhtbTIJOyB3aygxKT0oNDIgNDMgNTIgNTMpCisKKwltb3ZhcHMgICB4bW00LHhtbTYJCTsgdHJhbnNwb3NlIGNvZWZmaWNpZW50cyhwaGFzZSAxKQorCXVucGNrbHBzIHhtbTYseG1tNwkJOyB4bW02PSgwMCAwMSAxMCAxMSkKKwl1bnBja2hwcyB4bW00LHhtbTcJCTsgeG1tND0oMjAgMjEgMzAgMzEpCisJbW92YXBzICAgeG1tMix4bW0xCQk7IHRyYW5zcG9zZSBjb2VmZmljaWVudHMocGhhc2UgMSkKKwl1bnBja2xwcyB4bW0xLHhtbTMJCTsgeG1tMT0oNDAgNDEgNTAgNTEpCisJdW5wY2tocHMgeG1tMix4bW0zCQk7IHhtbTI9KDYwIDYxIDcwIDcxKQorCisJbW92YXBzICAgIHhtbTcseG1tNgkJOyB0cmFuc3Bvc2UgY29lZmZpY2llbnRzKHBoYXNlIDIpCisJdW5wY2tscHMyIHhtbTYseG1tMAkJOyB4bW02PSgwMCAwMSAwMiAwMyk9ZGF0YTAKKwl1bnBja2hwczIgeG1tNyx4bW0wCQk7IHhtbTc9KDEwIDExIDEyIDEzKT1kYXRhMQorCW1vdmFwcyAgICB4bW0zLHhtbTIJCTsgdHJhbnNwb3NlIGNvZWZmaWNpZW50cyhwaGFzZSAyKQorCXVucGNrbHBzMiB4bW0yLHhtbTUJCTsgeG1tMj0oNjAgNjEgNjIgNjMpPWRhdGE2CisJdW5wY2tocHMyIHhtbTMseG1tNQkJOyB4bW0zPSg3MCA3MSA3MiA3Myk9ZGF0YTcKKworCW1vdmFwcwl4bW0wLHhtbTcKKwltb3ZhcHMJeG1tNSx4bW02CisJc3VicHMJeG1tNyx4bW0yCQk7IHhtbTc9ZGF0YTEtZGF0YTY9dG1wNgorCXN1YnBzCXhtbTYseG1tMwkJOyB4bW02PWRhdGEwLWRhdGE3PXRtcDcKKwlhZGRwcwl4bW0wLHhtbTIJCTsgeG1tMD1kYXRhMStkYXRhNj10bXAxCisJYWRkcHMJeG1tNSx4bW0zCQk7IHhtbTU9ZGF0YTArZGF0YTc9dG1wMAorCisJbW92YXBzCXhtbTIsIFhNTVdPUkQgW3drKDApXQk7IHhtbTI9KDIyIDIzIDMyIDMzKQorCW1vdmFwcwl4bW0zLCBYTU1XT1JEIFt3aygxKV0JOyB4bW0zPSg0MiA0MyA1MiA1MykKKwltb3ZhcHMJWE1NV09SRCBbd2soMCldLCB4bW03CTsgd2soMCk9dG1wNgorCW1vdmFwcwlYTU1XT1JEIFt3aygxKV0sIHhtbTYJOyB3aygxKT10bXA3CisKKwltb3ZhcHMgICAgeG1tNyx4bW00CQk7IHRyYW5zcG9zZSBjb2VmZmljaWVudHMocGhhc2UgMikKKwl1bnBja2xwczIgeG1tNCx4bW0yCQk7IHhtbTQ9KDIwIDIxIDIyIDIzKT1kYXRhMgorCXVucGNraHBzMiB4bW03LHhtbTIJCTsgeG1tNz0oMzAgMzEgMzIgMzMpPWRhdGEzCisJbW92YXBzICAgIHhtbTYseG1tMQkJOyB0cmFuc3Bvc2UgY29lZmZpY2llbnRzKHBoYXNlIDIpCisJdW5wY2tscHMyIHhtbTEseG1tMwkJOyB4bW0xPSg0MCA0MSA0MiA0Myk9ZGF0YTQKKwl1bnBja2hwczIgeG1tNix4bW0zCQk7IHhtbTY9KDUwIDUxIDUyIDUzKT1kYXRhNQorCisJbW92YXBzCXhtbTIseG1tNworCW1vdmFwcwl4bW0zLHhtbTQKKwlhZGRwcwl4bW03LHhtbTEJCTsgeG1tNz1kYXRhMytkYXRhND10bXAzCisJYWRkcHMJeG1tNCx4bW02CQk7IHhtbTQ9ZGF0YTIrZGF0YTU9dG1wMgorCXN1YnBzCXhtbTIseG1tMQkJOyB4bW0yPWRhdGEzLWRhdGE0PXRtcDQKKwlzdWJwcwl4bW0zLHhtbTYJCTsgeG1tMz1kYXRhMi1kYXRhNT10bXA1CisKKwk7IC0tIEV2ZW4gcGFydAorCisJbW92YXBzCXhtbTEseG1tNQorCW1vdmFwcwl4bW02LHhtbTAKKwlzdWJwcwl4bW01LHhtbTcJCTsgeG1tNT10bXAxMworCXN1YnBzCXhtbTAseG1tNAkJOyB4bW0wPXRtcDEyCisJYWRkcHMJeG1tMSx4bW03CQk7IHhtbTE9dG1wMTAKKwlhZGRwcwl4bW02LHhtbTQJCTsgeG1tNj10bXAxMQorCisJYWRkcHMJeG1tMCx4bW01CisJbXVscHMJeG1tMCxbcmVsIFBEXzBfNzA3XSA7IHhtbTA9ejEKKworCW1vdmFwcwl4bW03LHhtbTEKKwltb3ZhcHMJeG1tNCx4bW01CisJc3VicHMJeG1tMSx4bW02CQk7IHhtbTE9ZGF0YTQKKwlzdWJwcwl4bW01LHhtbTAJCTsgeG1tNT1kYXRhNgorCWFkZHBzCXhtbTcseG1tNgkJOyB4bW03PWRhdGEwCisJYWRkcHMJeG1tNCx4bW0wCQk7IHhtbTQ9ZGF0YTIKKworCW1vdmFwcwlYTU1XT1JEIFtYTU1CTE9DSyg0LDAscmR4LFNJWkVPRl9GQVNUX0ZMT0FUKV0sIHhtbTEKKwltb3ZhcHMJWE1NV09SRCBbWE1NQkxPQ0soNiwwLHJkeCxTSVpFT0ZfRkFTVF9GTE9BVCldLCB4bW01CisJbW92YXBzCVhNTVdPUkQgW1hNTUJMT0NLKDAsMCxyZHgsU0laRU9GX0ZBU1RfRkxPQVQpXSwgeG1tNworCW1vdmFwcwlYTU1XT1JEIFtYTU1CTE9DSygyLDAscmR4LFNJWkVPRl9GQVNUX0ZMT0FUKV0sIHhtbTQKKworCTsgLS0gT2RkIHBhcnQKKworCW1vdmFwcwl4bW02LCBYTU1XT1JEIFt3aygwKV0JOyB4bW02PXRtcDYKKwltb3ZhcHMJeG1tMCwgWE1NV09SRCBbd2soMSldCTsgeG1tMD10bXA3CisKKwlhZGRwcwl4bW0yLHhtbTMJCTsgeG1tMj10bXAxMAorCWFkZHBzCXhtbTMseG1tNgkJOyB4bW0zPXRtcDExCisJYWRkcHMJeG1tNix4bW0wCQk7IHhtbTY9dG1wMTIsIHhtbTA9dG1wNworCisJbXVscHMJeG1tMyxbcmVsIFBEXzBfNzA3XSA7IHhtbTM9ejMKKworCW1vdmFwcwl4bW0xLHhtbTIJCTsgeG1tMT10bXAxMAorCXN1YnBzCXhtbTIseG1tNgorCW11bHBzCXhtbTIsW3JlbCBQRF8wXzM4Ml0gOyB4bW0yPXo1CisJbXVscHMJeG1tMSxbcmVsIFBEXzBfNTQxXSA7IHhtbTE9TVVMVElQTFkodG1wMTAsRklYXzBfNTQxMTk2KQorCW11bHBzCXhtbTYsW3JlbCBQRF8xXzMwNl0gOyB4bW02PU1VTFRJUExZKHRtcDEyLEZJWF8xXzMwNjU2MikKKwlhZGRwcwl4bW0xLHhtbTIJCTsgeG1tMT16MgorCWFkZHBzCXhtbTYseG1tMgkJOyB4bW02PXo0CisKKwltb3ZhcHMJeG1tNSx4bW0wCisJc3VicHMJeG1tMCx4bW0zCQk7IHhtbTA9ejEzCisJYWRkcHMJeG1tNSx4bW0zCQk7IHhtbTU9ejExCisKKwltb3ZhcHMJeG1tNyx4bW0wCisJbW92YXBzCXhtbTQseG1tNQorCXN1YnBzCXhtbTAseG1tMQkJOyB4bW0wPWRhdGEzCisJc3VicHMJeG1tNSx4bW02CQk7IHhtbTU9ZGF0YTcKKwlhZGRwcwl4bW03LHhtbTEJCTsgeG1tNz1kYXRhNQorCWFkZHBzCXhtbTQseG1tNgkJOyB4bW00PWRhdGExCisKKwltb3ZhcHMJWE1NV09SRCBbWE1NQkxPQ0soMywwLHJkeCxTSVpFT0ZfRkFTVF9GTE9BVCldLCB4bW0wCisJbW92YXBzCVhNTVdPUkQgW1hNTUJMT0NLKDcsMCxyZHgsU0laRU9GX0ZBU1RfRkxPQVQpXSwgeG1tNQorCW1vdmFwcwlYTU1XT1JEIFtYTU1CTE9DSyg1LDAscmR4LFNJWkVPRl9GQVNUX0ZMT0FUKV0sIHhtbTcKKwltb3ZhcHMJWE1NV09SRCBbWE1NQkxPQ0soMSwwLHJkeCxTSVpFT0ZfRkFTVF9GTE9BVCldLCB4bW00CisKKwlhZGQJcmR4LCBieXRlIDQqU0laRU9GX0ZBU1RfRkxPQVQKKwlkZWMJcmN4CisJam56CW5lYXIgLmNvbHVtbmxvb3AKKworCXVuY29sbGVjdF9hcmdzCisJbW92CXJzcCxyYnAJCTsgcnNwIDwtIGFsaWduZWQgcmJwCisJcG9wCXJzcAkJOyByc3AgPC0gb3JpZ2luYWwgcmJwCisJcG9wCXJicAorCXJldAorCis7IEZvciBzb21lIHJlYXNvbiwgdGhlIE9TIFggbGlua2VyIGRvZXMgbm90IGhvbm9yIHRoZSByZXF1ZXN0IHRvIGFsaWduIHRoZQorOyBzZWdtZW50IHVubGVzcyB3ZSBkbyB0aGlzLgorCWFsaWduCTE2CmRpZmYgLS1naXQgYS9zaW1kL2pmc3NlZmx0LmFzbSBiL3NpbWQvamZzc2VmbHQuYXNtCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmJjNTRjY2MKLS0tIC9kZXYvbnVsbAorKysgYi9zaW1kL2pmc3NlZmx0LmFzbQpAQCAtMCwwICsxLDM3MCBAQAorOworOyBqZnNzZWZsdC5hc20gLSBmbG9hdGluZy1wb2ludCBGRENUIChTU0UpCis7Cis7IENvcHlyaWdodCAyMDA5IFBpZXJyZSBPc3NtYW4gPG9zc21hbkBjZW5kaW8uc2U+IGZvciBDZW5kaW8gQUIKKzsKKzsgQmFzZWQgb24KKzsgeDg2IFNJTUQgZXh0ZW5zaW9uIGZvciBJSkcgSlBFRyBsaWJyYXJ5Cis7IENvcHlyaWdodCAoQykgMTk5OS0yMDA2LCBNSVlBU0FLQSBNYXNhcnUuCis7IEZvciBjb25kaXRpb25zIG9mIGRpc3RyaWJ1dGlvbiBhbmQgdXNlLCBzZWUgY29weXJpZ2h0IG5vdGljZSBpbiBqc2ltZGV4dC5pbmMKKzsKKzsgVGhpcyBmaWxlIHNob3VsZCBiZSBhc3NlbWJsZWQgd2l0aCBOQVNNIChOZXR3aWRlIEFzc2VtYmxlciksCis7IGNhbiAqbm90KiBiZSBhc3NlbWJsZWQgd2l0aCBNaWNyb3NvZnQncyBNQVNNIG9yIGFueSBjb21wYXRpYmxlCis7IGFzc2VtYmxlciAoaW5jbHVkaW5nIEJvcmxhbmQncyBUdXJibyBBc3NlbWJsZXIpLgorOyBOQVNNIGlzIGF2YWlsYWJsZSBmcm9tIGh0dHA6Ly9uYXNtLnNvdXJjZWZvcmdlLm5ldC8gb3IKKzsgaHR0cDovL3NvdXJjZWZvcmdlLm5ldC9wcm9qZWN0L3Nob3dmaWxlcy5waHA/Z3JvdXBfaWQ9NjIwOAorOworOyBUaGlzIGZpbGUgY29udGFpbnMgYSBmbG9hdGluZy1wb2ludCBpbXBsZW1lbnRhdGlvbiBvZiB0aGUgZm9yd2FyZCBEQ1QKKzsgKERpc2NyZXRlIENvc2luZSBUcmFuc2Zvcm0pLiBUaGUgZm9sbG93aW5nIGNvZGUgaXMgYmFzZWQgZGlyZWN0bHkgb24KKzsgdGhlIElKRydzIG9yaWdpbmFsIGpmZGN0Zmx0LmM7IHNlZSB0aGUgamZkY3RmbHQuYyBmb3IgbW9yZSBkZXRhaWxzLgorOworOyBbVEFCOF0KKworJWluY2x1ZGUgImpzaW1kZXh0LmluYyIKKyVpbmNsdWRlICJqZGN0LmluYyIKKworOyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCislbWFjcm8JdW5wY2tscHMyIDIJOyAlMT0oMCAxIDIgMykgLyAlMj0oNCA1IDYgNykgPT4gJTE9KDAgMSA0IDUpCisJc2h1ZnBzCSUxLCUyLDB4NDQKKyVlbmRtYWNybworCislbWFjcm8JdW5wY2tocHMyIDIJOyAlMT0oMCAxIDIgMykgLyAlMj0oNCA1IDYgNykgPT4gJTE9KDIgMyA2IDcpCisJc2h1ZnBzCSUxLCUyLDB4RUUKKyVlbmRtYWNybworCis7IC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisJU0VDVElPTglTRUdfQ09OU1QKKworCWFsaWduegkxNgorCWdsb2JhbAlFWFROKGpjb25zdF9mZGN0X2Zsb2F0X3NzZSkKKworRVhUTihqY29uc3RfZmRjdF9mbG9hdF9zc2UpOgorCitQRF8wXzM4Mgl0aW1lcyA0IGRkICAwLjM4MjY4MzQzMjM2NTA4OTc3MTcyODQ2MAorUERfMF83MDcJdGltZXMgNCBkZCAgMC43MDcxMDY3ODExODY1NDc1MjQ0MDA4NDQKK1BEXzBfNTQxCXRpbWVzIDQgZGQgIDAuNTQxMTk2MTAwMTQ2MTk2OTg0Mzk5NzIzCitQRF8xXzMwNgl0aW1lcyA0IGRkICAxLjMwNjU2Mjk2NDg3NjM3NjUyNzg1NjY0MworCisJYWxpZ256CTE2CisKKzsgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKwlTRUNUSU9OCVNFR19URVhUCisJQklUUwkzMgorOworOyBQZXJmb3JtIHRoZSBmb3J3YXJkIERDVCBvbiBvbmUgYmxvY2sgb2Ygc2FtcGxlcy4KKzsKKzsgR0xPQkFMKHZvaWQpCis7IGpzaW1kX2ZkY3RfZmxvYXRfc3NlIChGQVNUX0ZMT0FUICogZGF0YSkKKzsKKworJWRlZmluZSBkYXRhKGIpCQkoYikrOAkJOyBGQVNUX0ZMT0FUICogZGF0YQorCislZGVmaW5lIG9yaWdpbmFsX2VicAllYnArMAorJWRlZmluZSB3ayhpKQkJZWJwLShXS19OVU0tKGkpKSpTSVpFT0ZfWE1NV09SRAk7IHhtbXdvcmQgd2tbV0tfTlVNXQorJWRlZmluZSBXS19OVU0JCTIKKworCWFsaWduCTE2CisJZ2xvYmFsCUVYVE4oanNpbWRfZmRjdF9mbG9hdF9zc2UpCisKK0VYVE4oanNpbWRfZmRjdF9mbG9hdF9zc2UpOgorCXB1c2gJZWJwCisJbW92CWVheCxlc3AJCQkJOyBlYXggPSBvcmlnaW5hbCBlYnAKKwlzdWIJZXNwLCBieXRlIDQKKwlhbmQJZXNwLCBieXRlICgtU0laRU9GX1hNTVdPUkQpCTsgYWxpZ24gdG8gMTI4IGJpdHMKKwltb3YJW2VzcF0sZWF4CisJbW92CWVicCxlc3AJCQkJOyBlYnAgPSBhbGlnbmVkIGVicAorCWxlYQllc3AsIFt3aygwKV0KKwlwdXNocGljCWVieAorOwlwdXNoCWVjeAkJOyBuZWVkIG5vdCBiZSBwcmVzZXJ2ZWQKKzsJcHVzaAllZHgJCTsgbmVlZCBub3QgYmUgcHJlc2VydmVkCis7CXB1c2gJZXNpCQk7IHVudXNlZAorOwlwdXNoCWVkaQkJOyB1bnVzZWQKKworCWdldF9HT1QJZWJ4CQk7IGdldCBHT1QgYWRkcmVzcworCisJOyAtLS0tIFBhc3MgMTogcHJvY2VzcyByb3dzLgorCisJbW92CWVkeCwgUE9JTlRFUiBbZGF0YShlYXgpXQk7IChGQVNUX0ZMT0FUICopCisJbW92CWVjeCwgRENUU0laRS80CisJYWxpZ254CTE2LDcKKy5yb3dsb29wOgorCisJbW92YXBzCXhtbTAsIFhNTVdPUkQgW1hNTUJMT0NLKDIsMCxlZHgsU0laRU9GX0ZBU1RfRkxPQVQpXQorCW1vdmFwcwl4bW0xLCBYTU1XT1JEIFtYTU1CTE9DSygzLDAsZWR4LFNJWkVPRl9GQVNUX0ZMT0FUKV0KKwltb3ZhcHMJeG1tMiwgWE1NV09SRCBbWE1NQkxPQ0soMiwxLGVkeCxTSVpFT0ZfRkFTVF9GTE9BVCldCisJbW92YXBzCXhtbTMsIFhNTVdPUkQgW1hNTUJMT0NLKDMsMSxlZHgsU0laRU9GX0ZBU1RfRkxPQVQpXQorCisJOyB4bW0wPSgyMCAyMSAyMiAyMyksIHhtbTI9KDI0IDI1IDI2IDI3KQorCTsgeG1tMT0oMzAgMzEgMzIgMzMpLCB4bW0zPSgzNCAzNSAzNiAzNykKKworCW1vdmFwcyAgIHhtbTQseG1tMAkJOyB0cmFuc3Bvc2UgY29lZmZpY2llbnRzKHBoYXNlIDEpCisJdW5wY2tscHMgeG1tMCx4bW0xCQk7IHhtbTA9KDIwIDMwIDIxIDMxKQorCXVucGNraHBzIHhtbTQseG1tMQkJOyB4bW00PSgyMiAzMiAyMyAzMykKKwltb3ZhcHMgICB4bW01LHhtbTIJCTsgdHJhbnNwb3NlIGNvZWZmaWNpZW50cyhwaGFzZSAxKQorCXVucGNrbHBzIHhtbTIseG1tMwkJOyB4bW0yPSgyNCAzNCAyNSAzNSkKKwl1bnBja2hwcyB4bW01LHhtbTMJCTsgeG1tNT0oMjYgMzYgMjcgMzcpCisKKwltb3ZhcHMJeG1tNiwgWE1NV09SRCBbWE1NQkxPQ0soMCwwLGVkeCxTSVpFT0ZfRkFTVF9GTE9BVCldCisJbW92YXBzCXhtbTcsIFhNTVdPUkQgW1hNTUJMT0NLKDEsMCxlZHgsU0laRU9GX0ZBU1RfRkxPQVQpXQorCW1vdmFwcwl4bW0xLCBYTU1XT1JEIFtYTU1CTE9DSygwLDEsZWR4LFNJWkVPRl9GQVNUX0ZMT0FUKV0KKwltb3ZhcHMJeG1tMywgWE1NV09SRCBbWE1NQkxPQ0soMSwxLGVkeCxTSVpFT0ZfRkFTVF9GTE9BVCldCisKKwk7IHhtbTY9KDAwIDAxIDAyIDAzKSwgeG1tMT0oMDQgMDUgMDYgMDcpCisJOyB4bW03PSgxMCAxMSAxMiAxMyksIHhtbTM9KDE0IDE1IDE2IDE3KQorCisJbW92YXBzCVhNTVdPUkQgW3drKDApXSwgeG1tNAk7IHdrKDApPSgyMiAzMiAyMyAzMykKKwltb3ZhcHMJWE1NV09SRCBbd2soMSldLCB4bW0yCTsgd2soMSk9KDI0IDM0IDI1IDM1KQorCisJbW92YXBzICAgeG1tNCx4bW02CQk7IHRyYW5zcG9zZSBjb2VmZmljaWVudHMocGhhc2UgMSkKKwl1bnBja2xwcyB4bW02LHhtbTcJCTsgeG1tNj0oMDAgMTAgMDEgMTEpCisJdW5wY2tocHMgeG1tNCx4bW03CQk7IHhtbTQ9KDAyIDEyIDAzIDEzKQorCW1vdmFwcyAgIHhtbTIseG1tMQkJOyB0cmFuc3Bvc2UgY29lZmZpY2llbnRzKHBoYXNlIDEpCisJdW5wY2tscHMgeG1tMSx4bW0zCQk7IHhtbTE9KDA0IDE0IDA1IDE1KQorCXVucGNraHBzIHhtbTIseG1tMwkJOyB4bW0yPSgwNiAxNiAwNyAxNykKKworCW1vdmFwcyAgICB4bW03LHhtbTYJCTsgdHJhbnNwb3NlIGNvZWZmaWNpZW50cyhwaGFzZSAyKQorCXVucGNrbHBzMiB4bW02LHhtbTAJCTsgeG1tNj0oMDAgMTAgMjAgMzApPWRhdGEwCisJdW5wY2tocHMyIHhtbTcseG1tMAkJOyB4bW03PSgwMSAxMSAyMSAzMSk9ZGF0YTEKKwltb3ZhcHMgICAgeG1tMyx4bW0yCQk7IHRyYW5zcG9zZSBjb2VmZmljaWVudHMocGhhc2UgMikKKwl1bnBja2xwczIgeG1tMix4bW01CQk7IHhtbTI9KDA2IDE2IDI2IDM2KT1kYXRhNgorCXVucGNraHBzMiB4bW0zLHhtbTUJCTsgeG1tMz0oMDcgMTcgMjcgMzcpPWRhdGE3CisKKwltb3ZhcHMJeG1tMCx4bW03CisJbW92YXBzCXhtbTUseG1tNgorCXN1YnBzCXhtbTcseG1tMgkJOyB4bW03PWRhdGExLWRhdGE2PXRtcDYKKwlzdWJwcwl4bW02LHhtbTMJCTsgeG1tNj1kYXRhMC1kYXRhNz10bXA3CisJYWRkcHMJeG1tMCx4bW0yCQk7IHhtbTA9ZGF0YTErZGF0YTY9dG1wMQorCWFkZHBzCXhtbTUseG1tMwkJOyB4bW01PWRhdGEwK2RhdGE3PXRtcDAKKworCW1vdmFwcwl4bW0yLCBYTU1XT1JEIFt3aygwKV0JOyB4bW0yPSgyMiAzMiAyMyAzMykKKwltb3ZhcHMJeG1tMywgWE1NV09SRCBbd2soMSldCTsgeG1tMz0oMjQgMzQgMjUgMzUpCisJbW92YXBzCVhNTVdPUkQgW3drKDApXSwgeG1tNwk7IHdrKDApPXRtcDYKKwltb3ZhcHMJWE1NV09SRCBbd2soMSldLCB4bW02CTsgd2soMSk9dG1wNworCisJbW92YXBzICAgIHhtbTcseG1tNAkJOyB0cmFuc3Bvc2UgY29lZmZpY2llbnRzKHBoYXNlIDIpCisJdW5wY2tscHMyIHhtbTQseG1tMgkJOyB4bW00PSgwMiAxMiAyMiAzMik9ZGF0YTIKKwl1bnBja2hwczIgeG1tNyx4bW0yCQk7IHhtbTc9KDAzIDEzIDIzIDMzKT1kYXRhMworCW1vdmFwcyAgICB4bW02LHhtbTEJCTsgdHJhbnNwb3NlIGNvZWZmaWNpZW50cyhwaGFzZSAyKQorCXVucGNrbHBzMiB4bW0xLHhtbTMJCTsgeG1tMT0oMDQgMTQgMjQgMzQpPWRhdGE0CisJdW5wY2tocHMyIHhtbTYseG1tMwkJOyB4bW02PSgwNSAxNSAyNSAzNSk9ZGF0YTUKKworCW1vdmFwcwl4bW0yLHhtbTcKKwltb3ZhcHMJeG1tMyx4bW00CisJYWRkcHMJeG1tNyx4bW0xCQk7IHhtbTc9ZGF0YTMrZGF0YTQ9dG1wMworCWFkZHBzCXhtbTQseG1tNgkJOyB4bW00PWRhdGEyK2RhdGE1PXRtcDIKKwlzdWJwcwl4bW0yLHhtbTEJCTsgeG1tMj1kYXRhMy1kYXRhND10bXA0CisJc3VicHMJeG1tMyx4bW02CQk7IHhtbTM9ZGF0YTItZGF0YTU9dG1wNQorCisJOyAtLSBFdmVuIHBhcnQKKworCW1vdmFwcwl4bW0xLHhtbTUKKwltb3ZhcHMJeG1tNix4bW0wCisJc3VicHMJeG1tNSx4bW03CQk7IHhtbTU9dG1wMTMKKwlzdWJwcwl4bW0wLHhtbTQJCTsgeG1tMD10bXAxMgorCWFkZHBzCXhtbTEseG1tNwkJOyB4bW0xPXRtcDEwCisJYWRkcHMJeG1tNix4bW00CQk7IHhtbTY9dG1wMTEKKworCWFkZHBzCXhtbTAseG1tNQorCW11bHBzCXhtbTAsW0dPVE9GRihlYngsUERfMF83MDcpXSA7IHhtbTA9ejEKKworCW1vdmFwcwl4bW03LHhtbTEKKwltb3ZhcHMJeG1tNCx4bW01CisJc3VicHMJeG1tMSx4bW02CQk7IHhtbTE9ZGF0YTQKKwlzdWJwcwl4bW01LHhtbTAJCTsgeG1tNT1kYXRhNgorCWFkZHBzCXhtbTcseG1tNgkJOyB4bW03PWRhdGEwCisJYWRkcHMJeG1tNCx4bW0wCQk7IHhtbTQ9ZGF0YTIKKworCW1vdmFwcwlYTU1XT1JEIFtYTU1CTE9DSygwLDEsZWR4LFNJWkVPRl9GQVNUX0ZMT0FUKV0sIHhtbTEKKwltb3ZhcHMJWE1NV09SRCBbWE1NQkxPQ0soMiwxLGVkeCxTSVpFT0ZfRkFTVF9GTE9BVCldLCB4bW01CisJbW92YXBzCVhNTVdPUkQgW1hNTUJMT0NLKDAsMCxlZHgsU0laRU9GX0ZBU1RfRkxPQVQpXSwgeG1tNworCW1vdmFwcwlYTU1XT1JEIFtYTU1CTE9DSygyLDAsZWR4LFNJWkVPRl9GQVNUX0ZMT0FUKV0sIHhtbTQKKworCTsgLS0gT2RkIHBhcnQKKworCW1vdmFwcwl4bW02LCBYTU1XT1JEIFt3aygwKV0JOyB4bW02PXRtcDYKKwltb3ZhcHMJeG1tMCwgWE1NV09SRCBbd2soMSldCTsgeG1tMD10bXA3CisKKwlhZGRwcwl4bW0yLHhtbTMJCTsgeG1tMj10bXAxMAorCWFkZHBzCXhtbTMseG1tNgkJOyB4bW0zPXRtcDExCisJYWRkcHMJeG1tNix4bW0wCQk7IHhtbTY9dG1wMTIsIHhtbTA9dG1wNworCisJbXVscHMJeG1tMyxbR09UT0ZGKGVieCxQRF8wXzcwNyldIDsgeG1tMz16MworCisJbW92YXBzCXhtbTEseG1tMgkJOyB4bW0xPXRtcDEwCisJc3VicHMJeG1tMix4bW02CisJbXVscHMJeG1tMixbR09UT0ZGKGVieCxQRF8wXzM4MildIDsgeG1tMj16NQorCW11bHBzCXhtbTEsW0dPVE9GRihlYngsUERfMF81NDEpXSA7IHhtbTE9TVVMVElQTFkodG1wMTAsRklYXzBfNTQxMTk2KQorCW11bHBzCXhtbTYsW0dPVE9GRihlYngsUERfMV8zMDYpXSA7IHhtbTY9TVVMVElQTFkodG1wMTIsRklYXzFfMzA2NTYyKQorCWFkZHBzCXhtbTEseG1tMgkJOyB4bW0xPXoyCisJYWRkcHMJeG1tNix4bW0yCQk7IHhtbTY9ejQKKworCW1vdmFwcwl4bW01LHhtbTAKKwlzdWJwcwl4bW0wLHhtbTMJCTsgeG1tMD16MTMKKwlhZGRwcwl4bW01LHhtbTMJCTsgeG1tNT16MTEKKworCW1vdmFwcwl4bW03LHhtbTAKKwltb3ZhcHMJeG1tNCx4bW01CisJc3VicHMJeG1tMCx4bW0xCQk7IHhtbTA9ZGF0YTMKKwlzdWJwcwl4bW01LHhtbTYJCTsgeG1tNT1kYXRhNworCWFkZHBzCXhtbTcseG1tMQkJOyB4bW03PWRhdGE1CisJYWRkcHMJeG1tNCx4bW02CQk7IHhtbTQ9ZGF0YTEKKworCW1vdmFwcwlYTU1XT1JEIFtYTU1CTE9DSygzLDAsZWR4LFNJWkVPRl9GQVNUX0ZMT0FUKV0sIHhtbTAKKwltb3ZhcHMJWE1NV09SRCBbWE1NQkxPQ0soMywxLGVkeCxTSVpFT0ZfRkFTVF9GTE9BVCldLCB4bW01CisJbW92YXBzCVhNTVdPUkQgW1hNTUJMT0NLKDEsMSxlZHgsU0laRU9GX0ZBU1RfRkxPQVQpXSwgeG1tNworCW1vdmFwcwlYTU1XT1JEIFtYTU1CTE9DSygxLDAsZWR4LFNJWkVPRl9GQVNUX0ZMT0FUKV0sIHhtbTQKKworCWFkZAllZHgsIDQqRENUU0laRSpTSVpFT0ZfRkFTVF9GTE9BVAorCWRlYwllY3gKKwlqbnoJbmVhciAucm93bG9vcAorCisJOyAtLS0tIFBhc3MgMjogcHJvY2VzcyBjb2x1bW5zLgorCisJbW92CWVkeCwgUE9JTlRFUiBbZGF0YShlYXgpXQk7IChGQVNUX0ZMT0FUICopCisJbW92CWVjeCwgRENUU0laRS80CisJYWxpZ254CTE2LDcKKy5jb2x1bW5sb29wOgorCisJbW92YXBzCXhtbTAsIFhNTVdPUkQgW1hNTUJMT0NLKDIsMCxlZHgsU0laRU9GX0ZBU1RfRkxPQVQpXQorCW1vdmFwcwl4bW0xLCBYTU1XT1JEIFtYTU1CTE9DSygzLDAsZWR4LFNJWkVPRl9GQVNUX0ZMT0FUKV0KKwltb3ZhcHMJeG1tMiwgWE1NV09SRCBbWE1NQkxPQ0soNiwwLGVkeCxTSVpFT0ZfRkFTVF9GTE9BVCldCisJbW92YXBzCXhtbTMsIFhNTVdPUkQgW1hNTUJMT0NLKDcsMCxlZHgsU0laRU9GX0ZBU1RfRkxPQVQpXQorCisJOyB4bW0wPSgwMiAxMiAyMiAzMiksIHhtbTI9KDQyIDUyIDYyIDcyKQorCTsgeG1tMT0oMDMgMTMgMjMgMzMpLCB4bW0zPSg0MyA1MyA2MyA3MykKKworCW1vdmFwcyAgIHhtbTQseG1tMAkJOyB0cmFuc3Bvc2UgY29lZmZpY2llbnRzKHBoYXNlIDEpCisJdW5wY2tscHMgeG1tMCx4bW0xCQk7IHhtbTA9KDAyIDAzIDEyIDEzKQorCXVucGNraHBzIHhtbTQseG1tMQkJOyB4bW00PSgyMiAyMyAzMiAzMykKKwltb3ZhcHMgICB4bW01LHhtbTIJCTsgdHJhbnNwb3NlIGNvZWZmaWNpZW50cyhwaGFzZSAxKQorCXVucGNrbHBzIHhtbTIseG1tMwkJOyB4bW0yPSg0MiA0MyA1MiA1MykKKwl1bnBja2hwcyB4bW01LHhtbTMJCTsgeG1tNT0oNjIgNjMgNzIgNzMpCisKKwltb3ZhcHMJeG1tNiwgWE1NV09SRCBbWE1NQkxPQ0soMCwwLGVkeCxTSVpFT0ZfRkFTVF9GTE9BVCldCisJbW92YXBzCXhtbTcsIFhNTVdPUkQgW1hNTUJMT0NLKDEsMCxlZHgsU0laRU9GX0ZBU1RfRkxPQVQpXQorCW1vdmFwcwl4bW0xLCBYTU1XT1JEIFtYTU1CTE9DSyg0LDAsZWR4LFNJWkVPRl9GQVNUX0ZMT0FUKV0KKwltb3ZhcHMJeG1tMywgWE1NV09SRCBbWE1NQkxPQ0soNSwwLGVkeCxTSVpFT0ZfRkFTVF9GTE9BVCldCisKKwk7IHhtbTY9KDAwIDEwIDIwIDMwKSwgeG1tMT0oNDAgNTAgNjAgNzApCisJOyB4bW03PSgwMSAxMSAyMSAzMSksIHhtbTM9KDQxIDUxIDYxIDcxKQorCisJbW92YXBzCVhNTVdPUkQgW3drKDApXSwgeG1tNAk7IHdrKDApPSgyMiAyMyAzMiAzMykKKwltb3ZhcHMJWE1NV09SRCBbd2soMSldLCB4bW0yCTsgd2soMSk9KDQyIDQzIDUyIDUzKQorCisJbW92YXBzICAgeG1tNCx4bW02CQk7IHRyYW5zcG9zZSBjb2VmZmljaWVudHMocGhhc2UgMSkKKwl1bnBja2xwcyB4bW02LHhtbTcJCTsgeG1tNj0oMDAgMDEgMTAgMTEpCisJdW5wY2tocHMgeG1tNCx4bW03CQk7IHhtbTQ9KDIwIDIxIDMwIDMxKQorCW1vdmFwcyAgIHhtbTIseG1tMQkJOyB0cmFuc3Bvc2UgY29lZmZpY2llbnRzKHBoYXNlIDEpCisJdW5wY2tscHMgeG1tMSx4bW0zCQk7IHhtbTE9KDQwIDQxIDUwIDUxKQorCXVucGNraHBzIHhtbTIseG1tMwkJOyB4bW0yPSg2MCA2MSA3MCA3MSkKKworCW1vdmFwcyAgICB4bW03LHhtbTYJCTsgdHJhbnNwb3NlIGNvZWZmaWNpZW50cyhwaGFzZSAyKQorCXVucGNrbHBzMiB4bW02LHhtbTAJCTsgeG1tNj0oMDAgMDEgMDIgMDMpPWRhdGEwCisJdW5wY2tocHMyIHhtbTcseG1tMAkJOyB4bW03PSgxMCAxMSAxMiAxMyk9ZGF0YTEKKwltb3ZhcHMgICAgeG1tMyx4bW0yCQk7IHRyYW5zcG9zZSBjb2VmZmljaWVudHMocGhhc2UgMikKKwl1bnBja2xwczIgeG1tMix4bW01CQk7IHhtbTI9KDYwIDYxIDYyIDYzKT1kYXRhNgorCXVucGNraHBzMiB4bW0zLHhtbTUJCTsgeG1tMz0oNzAgNzEgNzIgNzMpPWRhdGE3CisKKwltb3ZhcHMJeG1tMCx4bW03CisJbW92YXBzCXhtbTUseG1tNgorCXN1YnBzCXhtbTcseG1tMgkJOyB4bW03PWRhdGExLWRhdGE2PXRtcDYKKwlzdWJwcwl4bW02LHhtbTMJCTsgeG1tNj1kYXRhMC1kYXRhNz10bXA3CisJYWRkcHMJeG1tMCx4bW0yCQk7IHhtbTA9ZGF0YTErZGF0YTY9dG1wMQorCWFkZHBzCXhtbTUseG1tMwkJOyB4bW01PWRhdGEwK2RhdGE3PXRtcDAKKworCW1vdmFwcwl4bW0yLCBYTU1XT1JEIFt3aygwKV0JOyB4bW0yPSgyMiAyMyAzMiAzMykKKwltb3ZhcHMJeG1tMywgWE1NV09SRCBbd2soMSldCTsgeG1tMz0oNDIgNDMgNTIgNTMpCisJbW92YXBzCVhNTVdPUkQgW3drKDApXSwgeG1tNwk7IHdrKDApPXRtcDYKKwltb3ZhcHMJWE1NV09SRCBbd2soMSldLCB4bW02CTsgd2soMSk9dG1wNworCisJbW92YXBzICAgIHhtbTcseG1tNAkJOyB0cmFuc3Bvc2UgY29lZmZpY2llbnRzKHBoYXNlIDIpCisJdW5wY2tscHMyIHhtbTQseG1tMgkJOyB4bW00PSgyMCAyMSAyMiAyMyk9ZGF0YTIKKwl1bnBja2hwczIgeG1tNyx4bW0yCQk7IHhtbTc9KDMwIDMxIDMyIDMzKT1kYXRhMworCW1vdmFwcyAgICB4bW02LHhtbTEJCTsgdHJhbnNwb3NlIGNvZWZmaWNpZW50cyhwaGFzZSAyKQorCXVucGNrbHBzMiB4bW0xLHhtbTMJCTsgeG1tMT0oNDAgNDEgNDIgNDMpPWRhdGE0CisJdW5wY2tocHMyIHhtbTYseG1tMwkJOyB4bW02PSg1MCA1MSA1MiA1Myk9ZGF0YTUKKworCW1vdmFwcwl4bW0yLHhtbTcKKwltb3ZhcHMJeG1tMyx4bW00CisJYWRkcHMJeG1tNyx4bW0xCQk7IHhtbTc9ZGF0YTMrZGF0YTQ9dG1wMworCWFkZHBzCXhtbTQseG1tNgkJOyB4bW00PWRhdGEyK2RhdGE1PXRtcDIKKwlzdWJwcwl4bW0yLHhtbTEJCTsgeG1tMj1kYXRhMy1kYXRhND10bXA0CisJc3VicHMJeG1tMyx4bW02CQk7IHhtbTM9ZGF0YTItZGF0YTU9dG1wNQorCisJOyAtLSBFdmVuIHBhcnQKKworCW1vdmFwcwl4bW0xLHhtbTUKKwltb3ZhcHMJeG1tNix4bW0wCisJc3VicHMJeG1tNSx4bW03CQk7IHhtbTU9dG1wMTMKKwlzdWJwcwl4bW0wLHhtbTQJCTsgeG1tMD10bXAxMgorCWFkZHBzCXhtbTEseG1tNwkJOyB4bW0xPXRtcDEwCisJYWRkcHMJeG1tNix4bW00CQk7IHhtbTY9dG1wMTEKKworCWFkZHBzCXhtbTAseG1tNQorCW11bHBzCXhtbTAsW0dPVE9GRihlYngsUERfMF83MDcpXSA7IHhtbTA9ejEKKworCW1vdmFwcwl4bW03LHhtbTEKKwltb3ZhcHMJeG1tNCx4bW01CisJc3VicHMJeG1tMSx4bW02CQk7IHhtbTE9ZGF0YTQKKwlzdWJwcwl4bW01LHhtbTAJCTsgeG1tNT1kYXRhNgorCWFkZHBzCXhtbTcseG1tNgkJOyB4bW03PWRhdGEwCisJYWRkcHMJeG1tNCx4bW0wCQk7IHhtbTQ9ZGF0YTIKKworCW1vdmFwcwlYTU1XT1JEIFtYTU1CTE9DSyg0LDAsZWR4LFNJWkVPRl9GQVNUX0ZMT0FUKV0sIHhtbTEKKwltb3ZhcHMJWE1NV09SRCBbWE1NQkxPQ0soNiwwLGVkeCxTSVpFT0ZfRkFTVF9GTE9BVCldLCB4bW01CisJbW92YXBzCVhNTVdPUkQgW1hNTUJMT0NLKDAsMCxlZHgsU0laRU9GX0ZBU1RfRkxPQVQpXSwgeG1tNworCW1vdmFwcwlYTU1XT1JEIFtYTU1CTE9DSygyLDAsZWR4LFNJWkVPRl9GQVNUX0ZMT0FUKV0sIHhtbTQKKworCTsgLS0gT2RkIHBhcnQKKworCW1vdmFwcwl4bW02LCBYTU1XT1JEIFt3aygwKV0JOyB4bW02PXRtcDYKKwltb3ZhcHMJeG1tMCwgWE1NV09SRCBbd2soMSldCTsgeG1tMD10bXA3CisKKwlhZGRwcwl4bW0yLHhtbTMJCTsgeG1tMj10bXAxMAorCWFkZHBzCXhtbTMseG1tNgkJOyB4bW0zPXRtcDExCisJYWRkcHMJeG1tNix4bW0wCQk7IHhtbTY9dG1wMTIsIHhtbTA9dG1wNworCisJbXVscHMJeG1tMyxbR09UT0ZGKGVieCxQRF8wXzcwNyldIDsgeG1tMz16MworCisJbW92YXBzCXhtbTEseG1tMgkJOyB4bW0xPXRtcDEwCisJc3VicHMJeG1tMix4bW02CisJbXVscHMJeG1tMixbR09UT0ZGKGVieCxQRF8wXzM4MildIDsgeG1tMj16NQorCW11bHBzCXhtbTEsW0dPVE9GRihlYngsUERfMF81NDEpXSA7IHhtbTE9TVVMVElQTFkodG1wMTAsRklYXzBfNTQxMTk2KQorCW11bHBzCXhtbTYsW0dPVE9GRihlYngsUERfMV8zMDYpXSA7IHhtbTY9TVVMVElQTFkodG1wMTIsRklYXzFfMzA2NTYyKQorCWFkZHBzCXhtbTEseG1tMgkJOyB4bW0xPXoyCisJYWRkcHMJeG1tNix4bW0yCQk7IHhtbTY9ejQKKworCW1vdmFwcwl4bW01LHhtbTAKKwlzdWJwcwl4bW0wLHhtbTMJCTsgeG1tMD16MTMKKwlhZGRwcwl4bW01LHhtbTMJCTsgeG1tNT16MTEKKworCW1vdmFwcwl4bW03LHhtbTAKKwltb3ZhcHMJeG1tNCx4bW01CisJc3VicHMJeG1tMCx4bW0xCQk7IHhtbTA9ZGF0YTMKKwlzdWJwcwl4bW01LHhtbTYJCTsgeG1tNT1kYXRhNworCWFkZHBzCXhtbTcseG1tMQkJOyB4bW03PWRhdGE1CisJYWRkcHMJeG1tNCx4bW02CQk7IHhtbTQ9ZGF0YTEKKworCW1vdmFwcwlYTU1XT1JEIFtYTU1CTE9DSygzLDAsZWR4LFNJWkVPRl9GQVNUX0ZMT0FUKV0sIHhtbTAKKwltb3ZhcHMJWE1NV09SRCBbWE1NQkxPQ0soNywwLGVkeCxTSVpFT0ZfRkFTVF9GTE9BVCldLCB4bW01CisJbW92YXBzCVhNTVdPUkQgW1hNTUJMT0NLKDUsMCxlZHgsU0laRU9GX0ZBU1RfRkxPQVQpXSwgeG1tNworCW1vdmFwcwlYTU1XT1JEIFtYTU1CTE9DSygxLDAsZWR4LFNJWkVPRl9GQVNUX0ZMT0FUKV0sIHhtbTQKKworCWFkZAllZHgsIGJ5dGUgNCpTSVpFT0ZfRkFTVF9GTE9BVAorCWRlYwllY3gKKwlqbnoJbmVhciAuY29sdW1ubG9vcAorCis7CXBvcAllZGkJCTsgdW51c2VkCis7CXBvcAllc2kJCTsgdW51c2VkCis7CXBvcAllZHgJCTsgbmVlZCBub3QgYmUgcHJlc2VydmVkCis7CXBvcAllY3gJCTsgbmVlZCBub3QgYmUgcHJlc2VydmVkCisJcG9wcGljCWVieAorCW1vdgllc3AsZWJwCQk7IGVzcCA8LSBhbGlnbmVkIGVicAorCXBvcAllc3AJCTsgZXNwIDwtIG9yaWdpbmFsIGVicAorCXBvcAllYnAKKwlyZXQKKworOyBGb3Igc29tZSByZWFzb24sIHRoZSBPUyBYIGxpbmtlciBkb2VzIG5vdCBob25vciB0aGUgcmVxdWVzdCB0byBhbGlnbiB0aGUKKzsgc2VnbWVudCB1bmxlc3Mgd2UgZG8gdGhpcy4KKwlhbGlnbgkxNgpkaWZmIC0tZ2l0IGEvc2ltZC9qaTNkbmZsdC5hc20gYi9zaW1kL2ppM2RuZmx0LmFzbQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kYzIwNzZmCi0tLSAvZGV2L251bGwKKysrIGIvc2ltZC9qaTNkbmZsdC5hc20KQEAgLTAsMCArMSw0NTIgQEAKKzsKKzsgamkzZG5mbHQuYXNtIC0gZmxvYXRpbmctcG9pbnQgSURDVCAoM0ROb3chICYgTU1YKQorOworOyBDb3B5cmlnaHQgMjAwOSBQaWVycmUgT3NzbWFuIDxvc3NtYW5AY2VuZGlvLnNlPiBmb3IgQ2VuZGlvIEFCCis7Cis7IEJhc2VkIG9uCis7IHg4NiBTSU1EIGV4dGVuc2lvbiBmb3IgSUpHIEpQRUcgbGlicmFyeQorOyBDb3B5cmlnaHQgKEMpIDE5OTktMjAwNiwgTUlZQVNBS0EgTWFzYXJ1LgorOyBGb3IgY29uZGl0aW9ucyBvZiBkaXN0cmlidXRpb24gYW5kIHVzZSwgc2VlIGNvcHlyaWdodCBub3RpY2UgaW4ganNpbWRleHQuaW5jCis7Cis7IFRoaXMgZmlsZSBzaG91bGQgYmUgYXNzZW1ibGVkIHdpdGggTkFTTSAoTmV0d2lkZSBBc3NlbWJsZXIpLAorOyBjYW4gKm5vdCogYmUgYXNzZW1ibGVkIHdpdGggTWljcm9zb2Z0J3MgTUFTTSBvciBhbnkgY29tcGF0aWJsZQorOyBhc3NlbWJsZXIgKGluY2x1ZGluZyBCb3JsYW5kJ3MgVHVyYm8gQXNzZW1ibGVyKS4KKzsgTkFTTSBpcyBhdmFpbGFibGUgZnJvbSBodHRwOi8vbmFzbS5zb3VyY2Vmb3JnZS5uZXQvIG9yCis7IGh0dHA6Ly9zb3VyY2Vmb3JnZS5uZXQvcHJvamVjdC9zaG93ZmlsZXMucGhwP2dyb3VwX2lkPTYyMDgKKzsKKzsgVGhpcyBmaWxlIGNvbnRhaW5zIGEgZmxvYXRpbmctcG9pbnQgaW1wbGVtZW50YXRpb24gb2YgdGhlIGludmVyc2UgRENUCis7IChEaXNjcmV0ZSBDb3NpbmUgVHJhbnNmb3JtKS4gVGhlIGZvbGxvd2luZyBjb2RlIGlzIGJhc2VkIGRpcmVjdGx5IG9uCis7IHRoZSBJSkcncyBvcmlnaW5hbCBqaWRjdGZsdC5jOyBzZWUgdGhlIGppZGN0Zmx0LmMgZm9yIG1vcmUgZGV0YWlscy4KKzsKKzsgW1RBQjhdCisKKyVpbmNsdWRlICJqc2ltZGV4dC5pbmMiCislaW5jbHVkZSAiamRjdC5pbmMiCisKKzsgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKwlTRUNUSU9OCVNFR19DT05TVAorCisJYWxpZ256CTE2CisJZ2xvYmFsCUVYVE4oamNvbnN0X2lkY3RfZmxvYXRfM2Rub3cpCisKK0VYVE4oamNvbnN0X2lkY3RfZmxvYXRfM2Rub3cpOgorCitQRF8xXzQxNAl0aW1lcyAyIGRkICAxLjQxNDIxMzU2MjM3MzA5NTA0ODgwMTY4OQorUERfMV84NDcJdGltZXMgMiBkZCAgMS44NDc3NTkwNjUwMjI1NzM1MTIyNTYzNjYKK1BEXzFfMDgyCXRpbWVzIDIgZGQgIDEuMDgyMzkyMjAwMjkyMzkzOTY4Nzk5NDQ2CitQRF8yXzYxMwl0aW1lcyAyIGRkICAyLjYxMzEyNTkyOTc1Mjc1MzA1NTcxMzI4NgorUERfUk5ESU5UX01BR0lDCXRpbWVzIDIgZGQgIDEwMDY2MzI5Ni4wCTsgKGZsb2F0KSgweDAwQzAwMDAwIDw8IDMpCitQQl9DRU5URVJKU0FNUAl0aW1lcyA4IGRiICBDRU5URVJKU0FNUExFCisKKwlhbGlnbnoJMTYKKworOyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCVNFQ1RJT04JU0VHX1RFWFQKKwlCSVRTCTMyCis7Cis7IFBlcmZvcm0gZGVxdWFudGl6YXRpb24gYW5kIGludmVyc2UgRENUIG9uIG9uZSBibG9jayBvZiBjb2VmZmljaWVudHMuCis7Cis7IEdMT0JBTCh2b2lkKQorOyBqc2ltZF9pZGN0X2Zsb2F0XzNkbm93ICh2b2lkICogZGN0X3RhYmxlLCBKQ09FRlBUUiBjb2VmX2Jsb2NrLAorOyAgICAgICAgICAgICAgICAgICAgICAgICBKU0FNUEFSUkFZIG91dHB1dF9idWYsIEpESU1FTlNJT04gb3V0cHV0X2NvbCkKKzsKKworJWRlZmluZSBkY3RfdGFibGUoYikJKGIpKzgJCQk7IHZvaWQgKiBkY3RfdGFibGUKKyVkZWZpbmUgY29lZl9ibG9jayhiKQkoYikrMTIJCTsgSkNPRUZQVFIgY29lZl9ibG9jaworJWRlZmluZSBvdXRwdXRfYnVmKGIpCShiKSsxNgkJOyBKU0FNUEFSUkFZIG91dHB1dF9idWYKKyVkZWZpbmUgb3V0cHV0X2NvbChiKQkoYikrMjAJCTsgSkRJTUVOU0lPTiBvdXRwdXRfY29sCisKKyVkZWZpbmUgb3JpZ2luYWxfZWJwCWVicCswCislZGVmaW5lIHdrKGkpCQllYnAtKFdLX05VTS0oaSkpKlNJWkVPRl9NTVdPUkQJOyBtbXdvcmQgd2tbV0tfTlVNXQorJWRlZmluZSBXS19OVU0JCTIKKyVkZWZpbmUgd29ya3NwYWNlCXdrKDApLURDVFNJWkUyKlNJWkVPRl9GQVNUX0ZMT0FUCisJCQkJCTsgRkFTVF9GTE9BVCB3b3Jrc3BhY2VbRENUU0laRTJdCisKKwlhbGlnbgkxNgorCWdsb2JhbAlFWFROKGpzaW1kX2lkY3RfZmxvYXRfM2Rub3cpCisKK0VYVE4oanNpbWRfaWRjdF9mbG9hdF8zZG5vdyk6CisJcHVzaAllYnAKKwltb3YJZWF4LGVzcAkJCQk7IGVheCA9IG9yaWdpbmFsIGVicAorCXN1Ygllc3AsIGJ5dGUgNAorCWFuZAllc3AsIGJ5dGUgKC1TSVpFT0ZfTU1XT1JEKQk7IGFsaWduIHRvIDY0IGJpdHMKKwltb3YJW2VzcF0sZWF4CisJbW92CWVicCxlc3AJCQkJOyBlYnAgPSBhbGlnbmVkIGVicAorCWxlYQllc3AsIFt3b3Jrc3BhY2VdCisJcHVzaAllYngKKzsJcHVzaAllY3gJCTsgbmVlZCBub3QgYmUgcHJlc2VydmVkCis7CXB1c2gJZWR4CQk7IG5lZWQgbm90IGJlIHByZXNlcnZlZAorCXB1c2gJZXNpCisJcHVzaAllZGkKKworCWdldF9HT1QJZWJ4CQk7IGdldCBHT1QgYWRkcmVzcworCisJOyAtLS0tIFBhc3MgMTogcHJvY2VzcyBjb2x1bW5zIGZyb20gaW5wdXQsIHN0b3JlIGludG8gd29yayBhcnJheS4KKworOwltb3YJZWF4LCBbb3JpZ2luYWxfZWJwXQorCW1vdgllZHgsIFBPSU5URVIgW2RjdF90YWJsZShlYXgpXQk7IHF1YW50cHRyCisJbW92CWVzaSwgSkNPRUZQVFIgW2NvZWZfYmxvY2soZWF4KV0JCTsgaW5wdHIKKwlsZWEJZWRpLCBbd29ya3NwYWNlXQkJCTsgRkFTVF9GTE9BVCAqIHdzcHRyCisJbW92CWVjeCwgRENUU0laRS8yCQkJCTsgY3RyCisJYWxpZ254CTE2LDcKKy5jb2x1bW5sb29wOgorJWlmbmRlZiBOT19aRVJPX0NPTFVNTl9URVNUX0ZMT0FUXzNETk9XCisJbW92CWVheCwgRFdPUkQgW0RXQkxPQ0soMSwwLGVzaSxTSVpFT0ZfSkNPRUYpXQorCW9yCWVheCwgRFdPUkQgW0RXQkxPQ0soMiwwLGVzaSxTSVpFT0ZfSkNPRUYpXQorCWpueglzaG9ydCAuY29sdW1uRENUCisKKwlwdXNocGljCWVieAkJOyBzYXZlIEdPVCBhZGRyZXNzCisJbW92CWVieCwgRFdPUkQgW0RXQkxPQ0soMywwLGVzaSxTSVpFT0ZfSkNPRUYpXQorCW1vdgllYXgsIERXT1JEIFtEV0JMT0NLKDQsMCxlc2ksU0laRU9GX0pDT0VGKV0KKwlvcgllYngsIERXT1JEIFtEV0JMT0NLKDUsMCxlc2ksU0laRU9GX0pDT0VGKV0KKwlvcgllYXgsIERXT1JEIFtEV0JMT0NLKDYsMCxlc2ksU0laRU9GX0pDT0VGKV0KKwlvcgllYngsIERXT1JEIFtEV0JMT0NLKDcsMCxlc2ksU0laRU9GX0pDT0VGKV0KKwlvcgllYXgsZWJ4CisJcG9wcGljCWVieAkJOyByZXN0b3JlIEdPVCBhZGRyZXNzCisJam56CXNob3J0IC5jb2x1bW5EQ1QKKworCTsgLS0gQUMgdGVybXMgYWxsIHplcm8KKworCW1vdmQgICAgICBtbTAsIERXT1JEIFtEV0JMT0NLKDAsMCxlc2ksU0laRU9GX0pDT0VGKV0KKworCXB1bnBja2x3ZCBtbTAsbW0wCisJcHNyYWQgICAgIG1tMCwoRFdPUkRfQklULVdPUkRfQklUKQorCXBpMmZkICAgICBtbTAsbW0wCisKKwlwZm11bCAgICAgbW0wLCBNTVdPUkQgW01NQkxPQ0soMCwwLGVkeCxTSVpFT0ZfRkxPQVRfTVVMVF9UWVBFKV0KKworCW1vdnEgICAgICBtbTEsbW0wCisJcHVucGNrbGRxIG1tMCxtbTAKKwlwdW5wY2toZHEgbW0xLG1tMQorCisJbW92cQlNTVdPUkQgW01NQkxPQ0soMCwwLGVkaSxTSVpFT0ZfRkFTVF9GTE9BVCldLCBtbTAKKwltb3ZxCU1NV09SRCBbTU1CTE9DSygwLDEsZWRpLFNJWkVPRl9GQVNUX0ZMT0FUKV0sIG1tMAorCW1vdnEJTU1XT1JEIFtNTUJMT0NLKDAsMixlZGksU0laRU9GX0ZBU1RfRkxPQVQpXSwgbW0wCisJbW92cQlNTVdPUkQgW01NQkxPQ0soMCwzLGVkaSxTSVpFT0ZfRkFTVF9GTE9BVCldLCBtbTAKKwltb3ZxCU1NV09SRCBbTU1CTE9DSygxLDAsZWRpLFNJWkVPRl9GQVNUX0ZMT0FUKV0sIG1tMQorCW1vdnEJTU1XT1JEIFtNTUJMT0NLKDEsMSxlZGksU0laRU9GX0ZBU1RfRkxPQVQpXSwgbW0xCisJbW92cQlNTVdPUkQgW01NQkxPQ0soMSwyLGVkaSxTSVpFT0ZfRkFTVF9GTE9BVCldLCBtbTEKKwltb3ZxCU1NV09SRCBbTU1CTE9DSygxLDMsZWRpLFNJWkVPRl9GQVNUX0ZMT0FUKV0sIG1tMQorCWptcAluZWFyIC5uZXh0Y29sdW1uCisJYWxpZ254CTE2LDcKKyVlbmRpZgorLmNvbHVtbkRDVDoKKworCTsgLS0gRXZlbiBwYXJ0CisKKwltb3ZkICAgICAgbW0wLCBEV09SRCBbRFdCTE9DSygwLDAsZXNpLFNJWkVPRl9KQ09FRildCisJbW92ZCAgICAgIG1tMSwgRFdPUkQgW0RXQkxPQ0soMiwwLGVzaSxTSVpFT0ZfSkNPRUYpXQorCW1vdmQgICAgICBtbTIsIERXT1JEIFtEV0JMT0NLKDQsMCxlc2ksU0laRU9GX0pDT0VGKV0KKwltb3ZkICAgICAgbW0zLCBEV09SRCBbRFdCTE9DSyg2LDAsZXNpLFNJWkVPRl9KQ09FRildCisKKwlwdW5wY2tsd2QgbW0wLG1tMAorCXB1bnBja2x3ZCBtbTEsbW0xCisJcHNyYWQgICAgIG1tMCwoRFdPUkRfQklULVdPUkRfQklUKQorCXBzcmFkICAgICBtbTEsKERXT1JEX0JJVC1XT1JEX0JJVCkKKwlwaTJmZCAgICAgbW0wLG1tMAorCXBpMmZkICAgICBtbTEsbW0xCisKKwlwZm11bCAgICAgbW0wLCBNTVdPUkQgW01NQkxPQ0soMCwwLGVkeCxTSVpFT0ZfRkxPQVRfTVVMVF9UWVBFKV0KKwlwZm11bCAgICAgbW0xLCBNTVdPUkQgW01NQkxPQ0soMiwwLGVkeCxTSVpFT0ZfRkxPQVRfTVVMVF9UWVBFKV0KKworCXB1bnBja2x3ZCBtbTIsbW0yCisJcHVucGNrbHdkIG1tMyxtbTMKKwlwc3JhZCAgICAgbW0yLChEV09SRF9CSVQtV09SRF9CSVQpCisJcHNyYWQgICAgIG1tMywoRFdPUkRfQklULVdPUkRfQklUKQorCXBpMmZkICAgICBtbTIsbW0yCisJcGkyZmQgICAgIG1tMyxtbTMKKworCXBmbXVsICAgICBtbTIsIE1NV09SRCBbTU1CTE9DSyg0LDAsZWR4LFNJWkVPRl9GTE9BVF9NVUxUX1RZUEUpXQorCXBmbXVsICAgICBtbTMsIE1NV09SRCBbTU1CTE9DSyg2LDAsZWR4LFNJWkVPRl9GTE9BVF9NVUxUX1RZUEUpXQorCisJbW92cQltbTQsbW0wCisJbW92cQltbTUsbW0xCisJcGZzdWIJbW0wLG1tMgkJCTsgbW0wPXRtcDExCisJcGZzdWIJbW0xLG1tMworCXBmYWRkCW1tNCxtbTIJCQk7IG1tND10bXAxMAorCXBmYWRkCW1tNSxtbTMJCQk7IG1tNT10bXAxMworCisJcGZtdWwJbW0xLFtHT1RPRkYoZWJ4LFBEXzFfNDE0KV0KKwlwZnN1YgltbTEsbW01CQkJOyBtbTE9dG1wMTIKKworCW1vdnEJbW02LG1tNAorCW1vdnEJbW03LG1tMAorCXBmc3ViCW1tNCxtbTUJCQk7IG1tND10bXAzCisJcGZzdWIJbW0wLG1tMQkJCTsgbW0wPXRtcDIKKwlwZmFkZAltbTYsbW01CQkJOyBtbTY9dG1wMAorCXBmYWRkCW1tNyxtbTEJCQk7IG1tNz10bXAxCisKKwltb3ZxCU1NV09SRCBbd2soMSldLCBtbTQJOyB0bXAzCisJbW92cQlNTVdPUkQgW3drKDApXSwgbW0wCTsgdG1wMgorCisJOyAtLSBPZGQgcGFydAorCisJbW92ZCAgICAgIG1tMiwgRFdPUkQgW0RXQkxPQ0soMSwwLGVzaSxTSVpFT0ZfSkNPRUYpXQorCW1vdmQgICAgICBtbTMsIERXT1JEIFtEV0JMT0NLKDMsMCxlc2ksU0laRU9GX0pDT0VGKV0KKwltb3ZkICAgICAgbW01LCBEV09SRCBbRFdCTE9DSyg1LDAsZXNpLFNJWkVPRl9KQ09FRildCisJbW92ZCAgICAgIG1tMSwgRFdPUkQgW0RXQkxPQ0soNywwLGVzaSxTSVpFT0ZfSkNPRUYpXQorCisJcHVucGNrbHdkIG1tMixtbTIKKwlwdW5wY2tsd2QgbW0zLG1tMworCXBzcmFkICAgICBtbTIsKERXT1JEX0JJVC1XT1JEX0JJVCkKKwlwc3JhZCAgICAgbW0zLChEV09SRF9CSVQtV09SRF9CSVQpCisJcGkyZmQgICAgIG1tMixtbTIKKwlwaTJmZCAgICAgbW0zLG1tMworCisJcGZtdWwgICAgIG1tMiwgTU1XT1JEIFtNTUJMT0NLKDEsMCxlZHgsU0laRU9GX0ZMT0FUX01VTFRfVFlQRSldCisJcGZtdWwgICAgIG1tMywgTU1XT1JEIFtNTUJMT0NLKDMsMCxlZHgsU0laRU9GX0ZMT0FUX01VTFRfVFlQRSldCisKKwlwdW5wY2tsd2QgbW01LG1tNQorCXB1bnBja2x3ZCBtbTEsbW0xCisJcHNyYWQgICAgIG1tNSwoRFdPUkRfQklULVdPUkRfQklUKQorCXBzcmFkICAgICBtbTEsKERXT1JEX0JJVC1XT1JEX0JJVCkKKwlwaTJmZCAgICAgbW01LG1tNQorCXBpMmZkICAgICBtbTEsbW0xCisKKwlwZm11bCAgICAgbW01LCBNTVdPUkQgW01NQkxPQ0soNSwwLGVkeCxTSVpFT0ZfRkxPQVRfTVVMVF9UWVBFKV0KKwlwZm11bCAgICAgbW0xLCBNTVdPUkQgW01NQkxPQ0soNywwLGVkeCxTSVpFT0ZfRkxPQVRfTVVMVF9UWVBFKV0KKworCW1vdnEJbW00LG1tMgorCW1vdnEJbW0wLG1tNQorCXBmYWRkCW1tMixtbTEJCQk7IG1tMj16MTEKKwlwZmFkZAltbTUsbW0zCQkJOyBtbTU9ejEzCisJcGZzdWIJbW00LG1tMQkJCTsgbW00PXoxMgorCXBmc3ViCW1tMCxtbTMJCQk7IG1tMD16MTAKKworCW1vdnEJbW0xLG1tMgorCXBmc3ViCW1tMixtbTUKKwlwZmFkZAltbTEsbW01CQkJOyBtbTE9dG1wNworCisJcGZtdWwJbW0yLFtHT1RPRkYoZWJ4LFBEXzFfNDE0KV0JOyBtbTI9dG1wMTEKKworCW1vdnEJbW0zLG1tMAorCXBmYWRkCW1tMCxtbTQKKwlwZm11bAltbTAsW0dPVE9GRihlYngsUERfMV84NDcpXQk7IG1tMD16NQorCXBmbXVsCW1tMyxbR09UT0ZGKGVieCxQRF8yXzYxMyldCTsgbW0zPSh6MTAgKiAyLjYxMzEyNTkzMCkKKwlwZm11bAltbTQsW0dPVE9GRihlYngsUERfMV8wODIpXQk7IG1tND0oejEyICogMS4wODIzOTIyMDApCisJcGZzdWJyCW1tMyxtbTAJCQk7IG1tMz10bXAxMgorCXBmc3ViCW1tNCxtbTAJCQk7IG1tND10bXAxMAorCisJOyAtLSBGaW5hbCBvdXRwdXQgc3RhZ2UKKworCXBmc3ViCW1tMyxtbTEJCQk7IG1tMz10bXA2CisJbW92cQltbTUsbW02CisJbW92cQltbTAsbW03CisJcGZhZGQJbW02LG1tMQkJCTsgbW02PWRhdGEwPSgwMCAwMSkKKwlwZmFkZAltbTcsbW0zCQkJOyBtbTc9ZGF0YTE9KDEwIDExKQorCXBmc3ViCW1tNSxtbTEJCQk7IG1tNT1kYXRhNz0oNzAgNzEpCisJcGZzdWIJbW0wLG1tMwkJCTsgbW0wPWRhdGE2PSg2MCA2MSkKKwlwZnN1YgltbTIsbW0zCQkJOyBtbTI9dG1wNQorCisJbW92cSAgICAgIG1tMSxtbTYJCTsgdHJhbnNwb3NlIGNvZWZmaWNpZW50cworCXB1bnBja2xkcSBtbTYsbW03CQk7IG1tNj0oMDAgMTApCisJcHVucGNraGRxIG1tMSxtbTcJCTsgbW0xPSgwMSAxMSkKKwltb3ZxICAgICAgbW0zLG1tMAkJOyB0cmFuc3Bvc2UgY29lZmZpY2llbnRzCisJcHVucGNrbGRxIG1tMCxtbTUJCTsgbW0wPSg2MCA3MCkKKwlwdW5wY2toZHEgbW0zLG1tNQkJOyBtbTM9KDYxIDcxKQorCisJbW92cQlNTVdPUkQgW01NQkxPQ0soMCwwLGVkaSxTSVpFT0ZfRkFTVF9GTE9BVCldLCBtbTYKKwltb3ZxCU1NV09SRCBbTU1CTE9DSygxLDAsZWRpLFNJWkVPRl9GQVNUX0ZMT0FUKV0sIG1tMQorCW1vdnEJTU1XT1JEIFtNTUJMT0NLKDAsMyxlZGksU0laRU9GX0ZBU1RfRkxPQVQpXSwgbW0wCisJbW92cQlNTVdPUkQgW01NQkxPQ0soMSwzLGVkaSxTSVpFT0ZfRkFTVF9GTE9BVCldLCBtbTMKKworCW1vdnEJbW03LCBNTVdPUkQgW3drKDApXQk7IG1tNz10bXAyCisJbW92cQltbTUsIE1NV09SRCBbd2soMSldCTsgbW01PXRtcDMKKworCXBmYWRkCW1tNCxtbTIJCQk7IG1tND10bXA0CisJbW92cQltbTYsbW03CisJbW92cQltbTEsbW01CisJcGZhZGQJbW03LG1tMgkJCTsgbW03PWRhdGEyPSgyMCAyMSkKKwlwZmFkZAltbTUsbW00CQkJOyBtbTU9ZGF0YTQ9KDQwIDQxKQorCXBmc3ViCW1tNixtbTIJCQk7IG1tNj1kYXRhNT0oNTAgNTEpCisJcGZzdWIJbW0xLG1tNAkJCTsgbW0xPWRhdGEzPSgzMCAzMSkKKworCW1vdnEgICAgICBtbTAsbW03CQk7IHRyYW5zcG9zZSBjb2VmZmljaWVudHMKKwlwdW5wY2tsZHEgbW03LG1tMQkJOyBtbTc9KDIwIDMwKQorCXB1bnBja2hkcSBtbTAsbW0xCQk7IG1tMD0oMjEgMzEpCisJbW92cSAgICAgIG1tMyxtbTUJCTsgdHJhbnNwb3NlIGNvZWZmaWNpZW50cworCXB1bnBja2xkcSBtbTUsbW02CQk7IG1tNT0oNDAgNTApCisJcHVucGNraGRxIG1tMyxtbTYJCTsgbW0zPSg0MSA1MSkKKworCW1vdnEJTU1XT1JEIFtNTUJMT0NLKDAsMSxlZGksU0laRU9GX0ZBU1RfRkxPQVQpXSwgbW03CisJbW92cQlNTVdPUkQgW01NQkxPQ0soMSwxLGVkaSxTSVpFT0ZfRkFTVF9GTE9BVCldLCBtbTAKKwltb3ZxCU1NV09SRCBbTU1CTE9DSygwLDIsZWRpLFNJWkVPRl9GQVNUX0ZMT0FUKV0sIG1tNQorCW1vdnEJTU1XT1JEIFtNTUJMT0NLKDEsMixlZGksU0laRU9GX0ZBU1RfRkxPQVQpXSwgbW0zCisKKy5uZXh0Y29sdW1uOgorCWFkZAllc2ksIGJ5dGUgMipTSVpFT0ZfSkNPRUYJCTsgY29lZl9ibG9jaworCWFkZAllZHgsIGJ5dGUgMipTSVpFT0ZfRkxPQVRfTVVMVF9UWVBFCTsgcXVhbnRwdHIKKwlhZGQJZWRpLCBieXRlIDIqRENUU0laRSpTSVpFT0ZfRkFTVF9GTE9BVAk7IHdzcHRyCisJZGVjCWVjeAkJCQkJOyBjdHIKKwlqbnoJbmVhciAuY29sdW1ubG9vcAorCisJOyAtLSBQcmVmZXRjaCB0aGUgbmV4dCBjb2VmZmljaWVudCBibG9jaworCisJcHJlZmV0Y2ggW2VzaSArIChEQ1RTSVpFMi04KSpTSVpFT0ZfSkNPRUYgKyAwKjMyXQorCXByZWZldGNoIFtlc2kgKyAoRENUU0laRTItOCkqU0laRU9GX0pDT0VGICsgMSozMl0KKwlwcmVmZXRjaCBbZXNpICsgKERDVFNJWkUyLTgpKlNJWkVPRl9KQ09FRiArIDIqMzJdCisJcHJlZmV0Y2ggW2VzaSArIChEQ1RTSVpFMi04KSpTSVpFT0ZfSkNPRUYgKyAzKjMyXQorCisJOyAtLS0tIFBhc3MgMjogcHJvY2VzcyByb3dzIGZyb20gd29yayBhcnJheSwgc3RvcmUgaW50byBvdXRwdXQgYXJyYXkuCisKKwltb3YJZWF4LCBbb3JpZ2luYWxfZWJwXQorCWxlYQllc2ksIFt3b3Jrc3BhY2VdCQkJOyBGQVNUX0ZMT0FUICogd3NwdHIKKwltb3YJZWRpLCBKU0FNUEFSUkFZIFtvdXRwdXRfYnVmKGVheCldCTsgKEpTQU1QUk9XICopCisJbW92CWVheCwgSkRJTUVOU0lPTiBbb3V0cHV0X2NvbChlYXgpXQorCW1vdgllY3gsIERDVFNJWkUvMgkJCQk7IGN0cgorCWFsaWdueAkxNiw3Cisucm93bG9vcDoKKworCTsgLS0gRXZlbiBwYXJ0CisKKwltb3ZxCW1tMCwgTU1XT1JEIFtNTUJMT0NLKDAsMCxlc2ksU0laRU9GX0ZBU1RfRkxPQVQpXQorCW1vdnEJbW0xLCBNTVdPUkQgW01NQkxPQ0soMiwwLGVzaSxTSVpFT0ZfRkFTVF9GTE9BVCldCisJbW92cQltbTIsIE1NV09SRCBbTU1CTE9DSyg0LDAsZXNpLFNJWkVPRl9GQVNUX0ZMT0FUKV0KKwltb3ZxCW1tMywgTU1XT1JEIFtNTUJMT0NLKDYsMCxlc2ksU0laRU9GX0ZBU1RfRkxPQVQpXQorCisJbW92cQltbTQsbW0wCisJbW92cQltbTUsbW0xCisJcGZzdWIJbW0wLG1tMgkJCTsgbW0wPXRtcDExCisJcGZzdWIJbW0xLG1tMworCXBmYWRkCW1tNCxtbTIJCQk7IG1tND10bXAxMAorCXBmYWRkCW1tNSxtbTMJCQk7IG1tNT10bXAxMworCisJcGZtdWwJbW0xLFtHT1RPRkYoZWJ4LFBEXzFfNDE0KV0KKwlwZnN1YgltbTEsbW01CQkJOyBtbTE9dG1wMTIKKworCW1vdnEJbW02LG1tNAorCW1vdnEJbW03LG1tMAorCXBmc3ViCW1tNCxtbTUJCQk7IG1tND10bXAzCisJcGZzdWIJbW0wLG1tMQkJCTsgbW0wPXRtcDIKKwlwZmFkZAltbTYsbW01CQkJOyBtbTY9dG1wMAorCXBmYWRkCW1tNyxtbTEJCQk7IG1tNz10bXAxCisKKwltb3ZxCU1NV09SRCBbd2soMSldLCBtbTQJOyB0bXAzCisJbW92cQlNTVdPUkQgW3drKDApXSwgbW0wCTsgdG1wMgorCisJOyAtLSBPZGQgcGFydAorCisJbW92cQltbTIsIE1NV09SRCBbTU1CTE9DSygxLDAsZXNpLFNJWkVPRl9GQVNUX0ZMT0FUKV0KKwltb3ZxCW1tMywgTU1XT1JEIFtNTUJMT0NLKDMsMCxlc2ksU0laRU9GX0ZBU1RfRkxPQVQpXQorCW1vdnEJbW01LCBNTVdPUkQgW01NQkxPQ0soNSwwLGVzaSxTSVpFT0ZfRkFTVF9GTE9BVCldCisJbW92cQltbTEsIE1NV09SRCBbTU1CTE9DSyg3LDAsZXNpLFNJWkVPRl9GQVNUX0ZMT0FUKV0KKworCW1vdnEJbW00LG1tMgorCW1vdnEJbW0wLG1tNQorCXBmYWRkCW1tMixtbTEJCQk7IG1tMj16MTEKKwlwZmFkZAltbTUsbW0zCQkJOyBtbTU9ejEzCisJcGZzdWIJbW00LG1tMQkJCTsgbW00PXoxMgorCXBmc3ViCW1tMCxtbTMJCQk7IG1tMD16MTAKKworCW1vdnEJbW0xLG1tMgorCXBmc3ViCW1tMixtbTUKKwlwZmFkZAltbTEsbW01CQkJOyBtbTE9dG1wNworCisJcGZtdWwJbW0yLFtHT1RPRkYoZWJ4LFBEXzFfNDE0KV0JOyBtbTI9dG1wMTEKKworCW1vdnEJbW0zLG1tMAorCXBmYWRkCW1tMCxtbTQKKwlwZm11bAltbTAsW0dPVE9GRihlYngsUERfMV84NDcpXQk7IG1tMD16NQorCXBmbXVsCW1tMyxbR09UT0ZGKGVieCxQRF8yXzYxMyldCTsgbW0zPSh6MTAgKiAyLjYxMzEyNTkzMCkKKwlwZm11bAltbTQsW0dPVE9GRihlYngsUERfMV8wODIpXQk7IG1tND0oejEyICogMS4wODIzOTIyMDApCisJcGZzdWJyCW1tMyxtbTAJCQk7IG1tMz10bXAxMgorCXBmc3ViCW1tNCxtbTAJCQk7IG1tND10bXAxMAorCisJOyAtLSBGaW5hbCBvdXRwdXQgc3RhZ2UKKworCXBmc3ViCW1tMyxtbTEJCQk7IG1tMz10bXA2CisJbW92cQltbTUsbW02CisJbW92cQltbTAsbW03CisJcGZhZGQJbW02LG1tMQkJCTsgbW02PWRhdGEwPSgwMCAxMCkKKwlwZmFkZAltbTcsbW0zCQkJOyBtbTc9ZGF0YTE9KDAxIDExKQorCXBmc3ViCW1tNSxtbTEJCQk7IG1tNT1kYXRhNz0oMDcgMTcpCisJcGZzdWIJbW0wLG1tMwkJCTsgbW0wPWRhdGE2PSgwNiAxNikKKwlwZnN1YgltbTIsbW0zCQkJOyBtbTI9dG1wNQorCisJbW92cQltbTEsW0dPVE9GRihlYngsUERfUk5ESU5UX01BR0lDKV0JOyBtbTE9W1BEX1JORElOVF9NQUdJQ10KKwlwY21wZXFkCW1tMyxtbTMKKwlwc3JsZAltbTMsV09SRF9CSVQJCTsgbW0zPXsweEZGRkYgMHgwMDAwIDB4RkZGRiAweDAwMDB9CisKKwlwZmFkZAltbTYsbW0xCQkJOyBtbTY9cm91bmRpbnQoZGF0YTAvOCk9KDAwICoqIDEwICoqKQorCXBmYWRkCW1tNyxtbTEJCQk7IG1tNz1yb3VuZGludChkYXRhMS84KT0oMDEgKiogMTEgKiopCisJcGZhZGQJbW0wLG1tMQkJCTsgbW0wPXJvdW5kaW50KGRhdGE2LzgpPSgwNiAqKiAxNiAqKikKKwlwZmFkZAltbTUsbW0xCQkJOyBtbTU9cm91bmRpbnQoZGF0YTcvOCk9KDA3ICoqIDE3ICoqKQorCisJcGFuZAltbTYsbW0zCQkJOyBtbTY9KDAwIC0tIDEwIC0tKQorCXBzbGxkCW1tNyxXT1JEX0JJVAkJOyBtbTc9KC0tIDAxIC0tIDExKQorCXBhbmQJbW0wLG1tMwkJCTsgbW0wPSgwNiAtLSAxNiAtLSkKKwlwc2xsZAltbTUsV09SRF9CSVQJCTsgbW01PSgtLSAwNyAtLSAxNykKKwlwb3IJbW02LG1tNwkJCTsgbW02PSgwMCAwMSAxMCAxMSkKKwlwb3IJbW0wLG1tNQkJCTsgbW0wPSgwNiAwNyAxNiAxNykKKworCW1vdnEJbW0xLCBNTVdPUkQgW3drKDApXQk7IG1tMT10bXAyCisJbW92cQltbTMsIE1NV09SRCBbd2soMSldCTsgbW0zPXRtcDMKKworCXBmYWRkCW1tNCxtbTIJCQk7IG1tND10bXA0CisJbW92cQltbTcsbW0xCisJbW92cQltbTUsbW0zCisJcGZhZGQJbW0xLG1tMgkJCTsgbW0xPWRhdGEyPSgwMiAxMikKKwlwZmFkZAltbTMsbW00CQkJOyBtbTM9ZGF0YTQ9KDA0IDE0KQorCXBmc3ViCW1tNyxtbTIJCQk7IG1tNz1kYXRhNT0oMDUgMTUpCisJcGZzdWIJbW01LG1tNAkJCTsgbW01PWRhdGEzPSgwMyAxMykKKworCW1vdnEJbW0yLFtHT1RPRkYoZWJ4LFBEX1JORElOVF9NQUdJQyldCTsgbW0yPVtQRF9STkRJTlRfTUFHSUNdCisJcGNtcGVxZAltbTQsbW00CisJcHNybGQJbW00LFdPUkRfQklUCQk7IG1tND17MHhGRkZGIDB4MDAwMCAweEZGRkYgMHgwMDAwfQorCisJcGZhZGQJbW0zLG1tMgkJCTsgbW0zPXJvdW5kaW50KGRhdGE0LzgpPSgwNCAqKiAxNCAqKikKKwlwZmFkZAltbTcsbW0yCQkJOyBtbTc9cm91bmRpbnQoZGF0YTUvOCk9KDA1ICoqIDE1ICoqKQorCXBmYWRkCW1tMSxtbTIJCQk7IG1tMT1yb3VuZGludChkYXRhMi84KT0oMDIgKiogMTIgKiopCisJcGZhZGQJbW01LG1tMgkJCTsgbW01PXJvdW5kaW50KGRhdGEzLzgpPSgwMyAqKiAxMyAqKikKKworCXBhbmQJbW0zLG1tNAkJCTsgbW0zPSgwNCAtLSAxNCAtLSkKKwlwc2xsZAltbTcsV09SRF9CSVQJCTsgbW03PSgtLSAwNSAtLSAxNSkKKwlwYW5kCW1tMSxtbTQJCQk7IG1tMT0oMDIgLS0gMTIgLS0pCisJcHNsbGQJbW01LFdPUkRfQklUCQk7IG1tNT0oLS0gMDMgLS0gMTMpCisJcG9yCW1tMyxtbTcJCQk7IG1tMz0oMDQgMDUgMTQgMTUpCisJcG9yCW1tMSxtbTUJCQk7IG1tMT0oMDIgMDMgMTIgMTMpCisKKwltb3ZxICAgICAgbW0yLFtHT1RPRkYoZWJ4LFBCX0NFTlRFUkpTQU1QKV0JOyBtbTI9W1BCX0NFTlRFUkpTQU1QXQorCisJcGFja3Nzd2IgIG1tNixtbTMJCTsgbW02PSgwMCAwMSAxMCAxMSAwNCAwNSAxNCAxNSkKKwlwYWNrc3N3YiAgbW0xLG1tMAkJOyBtbTE9KDAyIDAzIDEyIDEzIDA2IDA3IDE2IDE3KQorCXBhZGRiICAgICBtbTYsbW0yCisJcGFkZGIgICAgIG1tMSxtbTIKKworCW1vdnEgICAgICBtbTQsbW02CQk7IHRyYW5zcG9zZSBjb2VmZmljaWVudHMocGhhc2UgMikKKwlwdW5wY2tsd2QgbW02LG1tMQkJOyBtbTY9KDAwIDAxIDAyIDAzIDEwIDExIDEyIDEzKQorCXB1bnBja2h3ZCBtbTQsbW0xCQk7IG1tND0oMDQgMDUgMDYgMDcgMTQgMTUgMTYgMTcpCisKKwltb3ZxICAgICAgbW03LG1tNgkJOyB0cmFuc3Bvc2UgY29lZmZpY2llbnRzKHBoYXNlIDMpCisJcHVucGNrbGRxIG1tNixtbTQJCTsgbW02PSgwMCAwMSAwMiAwMyAwNCAwNSAwNiAwNykKKwlwdW5wY2toZHEgbW03LG1tNAkJOyBtbTc9KDEwIDExIDEyIDEzIDE0IDE1IDE2IDE3KQorCisJcHVzaHBpYwllYngJCQk7IHNhdmUgR09UIGFkZHJlc3MKKworCW1vdgllZHgsIEpTQU1QUk9XIFtlZGkrMCpTSVpFT0ZfSlNBTVBST1ddCisJbW92CWVieCwgSlNBTVBST1cgW2VkaSsxKlNJWkVPRl9KU0FNUFJPV10KKwltb3ZxCU1NV09SRCBbZWR4K2VheCpTSVpFT0ZfSlNBTVBMRV0sIG1tNgorCW1vdnEJTU1XT1JEIFtlYngrZWF4KlNJWkVPRl9KU0FNUExFXSwgbW03CisKKwlwb3BwaWMJZWJ4CQkJOyByZXN0b3JlIEdPVCBhZGRyZXNzCisKKwlhZGQJZXNpLCBieXRlIDIqU0laRU9GX0ZBU1RfRkxPQVQJOyB3c3B0cgorCWFkZAllZGksIGJ5dGUgMipTSVpFT0ZfSlNBTVBST1cKKwlkZWMJZWN4CQkJCTsgY3RyCisJam56CW5lYXIgLnJvd2xvb3AKKworCWZlbW1zCQk7IGVtcHR5IE1NWC8zRE5vdyEgc3RhdGUKKworCXBvcAllZGkKKwlwb3AJZXNpCis7CXBvcAllZHgJCTsgbmVlZCBub3QgYmUgcHJlc2VydmVkCis7CXBvcAllY3gJCTsgbmVlZCBub3QgYmUgcHJlc2VydmVkCisJcG9wCWVieAorCW1vdgllc3AsZWJwCQk7IGVzcCA8LSBhbGlnbmVkIGVicAorCXBvcAllc3AJCTsgZXNwIDwtIG9yaWdpbmFsIGVicAorCXBvcAllYnAKKwlyZXQKKworOyBGb3Igc29tZSByZWFzb24sIHRoZSBPUyBYIGxpbmtlciBkb2VzIG5vdCBob25vciB0aGUgcmVxdWVzdCB0byBhbGlnbiB0aGUKKzsgc2VnbWVudCB1bmxlc3Mgd2UgZG8gdGhpcy4KKwlhbGlnbgkxNgpkaWZmIC0tZ2l0IGEvc2ltZC9qaW1teGZzdC5hc20gYi9zaW1kL2ppbW14ZnN0LmFzbQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zYjA1NTcyCi0tLSAvZGV2L251bGwKKysrIGIvc2ltZC9qaW1teGZzdC5hc20KQEAgLTAsMCArMSw1MDAgQEAKKzsKKzsgamltbXhmc3QuYXNtIC0gZmFzdCBpbnRlZ2VyIElEQ1QgKE1NWCkKKzsKKzsgQ29weXJpZ2h0IDIwMDkgUGllcnJlIE9zc21hbiA8b3NzbWFuQGNlbmRpby5zZT4gZm9yIENlbmRpbyBBQgorOworOyBCYXNlZCBvbgorOyB4ODYgU0lNRCBleHRlbnNpb24gZm9yIElKRyBKUEVHIGxpYnJhcnkKKzsgQ29weXJpZ2h0IChDKSAxOTk5LTIwMDYsIE1JWUFTQUtBIE1hc2FydS4KKzsgRm9yIGNvbmRpdGlvbnMgb2YgZGlzdHJpYnV0aW9uIGFuZCB1c2UsIHNlZSBjb3B5cmlnaHQgbm90aWNlIGluIGpzaW1kZXh0LmluYworOworOyBUaGlzIGZpbGUgc2hvdWxkIGJlIGFzc2VtYmxlZCB3aXRoIE5BU00gKE5ldHdpZGUgQXNzZW1ibGVyKSwKKzsgY2FuICpub3QqIGJlIGFzc2VtYmxlZCB3aXRoIE1pY3Jvc29mdCdzIE1BU00gb3IgYW55IGNvbXBhdGlibGUKKzsgYXNzZW1ibGVyIChpbmNsdWRpbmcgQm9ybGFuZCdzIFR1cmJvIEFzc2VtYmxlcikuCis7IE5BU00gaXMgYXZhaWxhYmxlIGZyb20gaHR0cDovL25hc20uc291cmNlZm9yZ2UubmV0LyBvcgorOyBodHRwOi8vc291cmNlZm9yZ2UubmV0L3Byb2plY3Qvc2hvd2ZpbGVzLnBocD9ncm91cF9pZD02MjA4Cis7Cis7IFRoaXMgZmlsZSBjb250YWlucyBhIGZhc3QsIG5vdCBzbyBhY2N1cmF0ZSBpbnRlZ2VyIGltcGxlbWVudGF0aW9uIG9mCis7IHRoZSBpbnZlcnNlIERDVCAoRGlzY3JldGUgQ29zaW5lIFRyYW5zZm9ybSkuIFRoZSBmb2xsb3dpbmcgY29kZSBpcworOyBiYXNlZCBkaXJlY3RseSBvbiB0aGUgSUpHJ3Mgb3JpZ2luYWwgamlkY3Rmc3QuYzsgc2VlIHRoZSBqaWRjdGZzdC5jCis7IGZvciBtb3JlIGRldGFpbHMuCis7Cis7IFtUQUI4XQorCislaW5jbHVkZSAianNpbWRleHQuaW5jIgorJWluY2x1ZGUgImpkY3QuaW5jIgorCis7IC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKyVkZWZpbmUgQ09OU1RfQklUUwk4CTsgMTQgaXMgYWxzbyBPSy4KKyVkZWZpbmUgUEFTUzFfQklUUwkyCisKKyVpZiBJRkFTVF9TQ0FMRV9CSVRTICE9IFBBU1MxX0JJVFMKKyVlcnJvciAiJ0lGQVNUX1NDQUxFX0JJVFMnIG11c3QgYmUgZXF1YWwgdG8gJ1BBU1MxX0JJVFMnLiIKKyVlbmRpZgorCislaWYgQ09OU1RfQklUUyA9PSA4CitGXzFfMDgyCWVxdQkyNzcJCTsgRklYKDEuMDgyMzkyMjAwKQorRl8xXzQxNAllcXUJMzYyCQk7IEZJWCgxLjQxNDIxMzU2MikKK0ZfMV84NDcJZXF1CTQ3MwkJOyBGSVgoMS44NDc3NTkwNjUpCitGXzJfNjEzCWVxdQk2NjkJCTsgRklYKDIuNjEzMTI1OTMwKQorRl8xXzYxMwllcXUJKEZfMl82MTMgLSAyNTYpCTsgRklYKDIuNjEzMTI1OTMwKSAtIEZJWCgxKQorJWVsc2UKKzsgTkFTTSBjYW5ub3QgZG8gY29tcGlsZS10aW1lIGFyaXRobWV0aWMgb24gZmxvYXRpbmctcG9pbnQgY29uc3RhbnRzLgorJWRlZmluZQlERVNDQUxFKHgsbikgICgoKHgpKygxPDwoKG4pLTEpKSk+PihuKSkKK0ZfMV8wODIJZXF1CURFU0NBTEUoMTE2MjIwOTc3NSwzMC1DT05TVF9CSVRTKQk7IEZJWCgxLjA4MjM5MjIwMCkKK0ZfMV80MTQJZXF1CURFU0NBTEUoMTUxODUwMDI0OSwzMC1DT05TVF9CSVRTKQk7IEZJWCgxLjQxNDIxMzU2MikKK0ZfMV84NDcJZXF1CURFU0NBTEUoMTk4NDAxNjE4OCwzMC1DT05TVF9CSVRTKQk7IEZJWCgxLjg0Nzc1OTA2NSkKK0ZfMl82MTMJZXF1CURFU0NBTEUoMjgwNTgyMjYwMiwzMC1DT05TVF9CSVRTKQk7IEZJWCgyLjYxMzEyNTkzMCkKK0ZfMV82MTMJZXF1CShGXzJfNjEzIC0gKDEgPDwgQ09OU1RfQklUUykpCTsgRklYKDIuNjEzMTI1OTMwKSAtIEZJWCgxKQorJWVuZGlmCisKKzsgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKwlTRUNUSU9OCVNFR19DT05TVAorCis7IFBSRV9NVUxUSVBMWV9TQ0FMRV9CSVRTIDw9IDIgKHRvIGF2b2lkIG92ZXJmbG93KQorOyBDT05TVF9CSVRTICsgQ09OU1RfU0hJRlQgKyBQUkVfTVVMVElQTFlfU0NBTEVfQklUUyA9PSAxNiAoZm9yIHBtdWxodykKKworJWRlZmluZSBQUkVfTVVMVElQTFlfU0NBTEVfQklUUyAgIDIKKyVkZWZpbmUgQ09OU1RfU0hJRlQgICAgICgxNiAtIFBSRV9NVUxUSVBMWV9TQ0FMRV9CSVRTIC0gQ09OU1RfQklUUykKKworCWFsaWduegkxNgorCWdsb2JhbAlFWFROKGpjb25zdF9pZGN0X2lmYXN0X21teCkKKworRVhUTihqY29uc3RfaWRjdF9pZmFzdF9tbXgpOgorCitQV19GMTQxNAl0aW1lcyA0IGR3ICBGXzFfNDE0IDw8IENPTlNUX1NISUZUCitQV19GMTg0Nwl0aW1lcyA0IGR3ICBGXzFfODQ3IDw8IENPTlNUX1NISUZUCitQV19NRjE2MTMJdGltZXMgNCBkdyAtRl8xXzYxMyA8PCBDT05TVF9TSElGVAorUFdfRjEwODIJdGltZXMgNCBkdyAgRl8xXzA4MiA8PCBDT05TVF9TSElGVAorUEJfQ0VOVEVSSlNBTVAJdGltZXMgOCBkYiAgQ0VOVEVSSlNBTVBMRQorCisJYWxpZ256CTE2CisKKzsgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKwlTRUNUSU9OCVNFR19URVhUCisJQklUUwkzMgorOworOyBQZXJmb3JtIGRlcXVhbnRpemF0aW9uIGFuZCBpbnZlcnNlIERDVCBvbiBvbmUgYmxvY2sgb2YgY29lZmZpY2llbnRzLgorOworOyBHTE9CQUwodm9pZCkKKzsganNpbWRfaWRjdF9pZmFzdF9tbXggKHZvaWQgKiBkY3RfdGFibGUsIEpDT0VGUFRSIGNvZWZfYmxvY2ssCis7ICAgICAgICAgICAgICAgICAgICAgICBKU0FNUEFSUkFZIG91dHB1dF9idWYsIEpESU1FTlNJT04gb3V0cHV0X2NvbCkKKzsKKworJWRlZmluZSBkY3RfdGFibGUoYikJKGIpKzgJCQk7IGpwZWdfY29tcG9uZW50X2luZm8gKiBjb21wcHRyCislZGVmaW5lIGNvZWZfYmxvY2soYikJKGIpKzEyCQk7IEpDT0VGUFRSIGNvZWZfYmxvY2sKKyVkZWZpbmUgb3V0cHV0X2J1ZihiKQkoYikrMTYJCTsgSlNBTVBBUlJBWSBvdXRwdXRfYnVmCislZGVmaW5lIG91dHB1dF9jb2woYikJKGIpKzIwCQk7IEpESU1FTlNJT04gb3V0cHV0X2NvbAorCislZGVmaW5lIG9yaWdpbmFsX2VicAllYnArMAorJWRlZmluZSB3ayhpKQkJZWJwLShXS19OVU0tKGkpKSpTSVpFT0ZfTU1XT1JECTsgbW13b3JkIHdrW1dLX05VTV0KKyVkZWZpbmUgV0tfTlVNCQkyCislZGVmaW5lIHdvcmtzcGFjZQl3aygwKS1EQ1RTSVpFMipTSVpFT0ZfSkNPRUYKKwkJCQkJOyBKQ09FRiB3b3Jrc3BhY2VbRENUU0laRTJdCisKKwlhbGlnbgkxNgorCWdsb2JhbAlFWFROKGpzaW1kX2lkY3RfaWZhc3RfbW14KQorCitFWFROKGpzaW1kX2lkY3RfaWZhc3RfbW14KToKKwlwdXNoCWVicAorCW1vdgllYXgsZXNwCQkJCTsgZWF4ID0gb3JpZ2luYWwgZWJwCisJc3ViCWVzcCwgYnl0ZSA0CisJYW5kCWVzcCwgYnl0ZSAoLVNJWkVPRl9NTVdPUkQpCTsgYWxpZ24gdG8gNjQgYml0cworCW1vdglbZXNwXSxlYXgKKwltb3YJZWJwLGVzcAkJCQk7IGVicCA9IGFsaWduZWQgZWJwCisJbGVhCWVzcCwgW3dvcmtzcGFjZV0KKwlwdXNoCWVieAorOwlwdXNoCWVjeAkJOyBuZWVkIG5vdCBiZSBwcmVzZXJ2ZWQKKzsJcHVzaAllZHgJCTsgbmVlZCBub3QgYmUgcHJlc2VydmVkCisJcHVzaAllc2kKKwlwdXNoCWVkaQorCisJZ2V0X0dPVAllYngJCTsgZ2V0IEdPVCBhZGRyZXNzCisKKwk7IC0tLS0gUGFzcyAxOiBwcm9jZXNzIGNvbHVtbnMgZnJvbSBpbnB1dCwgc3RvcmUgaW50byB3b3JrIGFycmF5LgorCis7CW1vdgllYXgsIFtvcmlnaW5hbF9lYnBdCisJbW92CWVkeCwgUE9JTlRFUiBbZGN0X3RhYmxlKGVheCldCTsgcXVhbnRwdHIKKwltb3YJZXNpLCBKQ09FRlBUUiBbY29lZl9ibG9jayhlYXgpXQkJOyBpbnB0cgorCWxlYQllZGksIFt3b3Jrc3BhY2VdCQkJOyBKQ09FRiAqIHdzcHRyCisJbW92CWVjeCwgRENUU0laRS80CQkJCTsgY3RyCisJYWxpZ254CTE2LDcKKy5jb2x1bW5sb29wOgorJWlmbmRlZiBOT19aRVJPX0NPTFVNTl9URVNUX0lGQVNUX01NWAorCW1vdgllYXgsIERXT1JEIFtEV0JMT0NLKDEsMCxlc2ksU0laRU9GX0pDT0VGKV0KKwlvcgllYXgsIERXT1JEIFtEV0JMT0NLKDIsMCxlc2ksU0laRU9GX0pDT0VGKV0KKwlqbnoJc2hvcnQgLmNvbHVtbkRDVAorCisJbW92cQltbTAsIE1NV09SRCBbTU1CTE9DSygxLDAsZXNpLFNJWkVPRl9KQ09FRildCisJbW92cQltbTEsIE1NV09SRCBbTU1CTE9DSygyLDAsZXNpLFNJWkVPRl9KQ09FRildCisJcG9yCW1tMCwgTU1XT1JEIFtNTUJMT0NLKDMsMCxlc2ksU0laRU9GX0pDT0VGKV0KKwlwb3IJbW0xLCBNTVdPUkQgW01NQkxPQ0soNCwwLGVzaSxTSVpFT0ZfSkNPRUYpXQorCXBvcgltbTAsIE1NV09SRCBbTU1CTE9DSyg1LDAsZXNpLFNJWkVPRl9KQ09FRildCisJcG9yCW1tMSwgTU1XT1JEIFtNTUJMT0NLKDYsMCxlc2ksU0laRU9GX0pDT0VGKV0KKwlwb3IJbW0wLCBNTVdPUkQgW01NQkxPQ0soNywwLGVzaSxTSVpFT0ZfSkNPRUYpXQorCXBvcgltbTEsbW0wCisJcGFja3Nzd2IgbW0xLG1tMQorCW1vdmQJZWF4LG1tMQorCXRlc3QJZWF4LGVheAorCWpueglzaG9ydCAuY29sdW1uRENUCisKKwk7IC0tIEFDIHRlcm1zIGFsbCB6ZXJvCisKKwltb3ZxCW1tMCwgTU1XT1JEIFtNTUJMT0NLKDAsMCxlc2ksU0laRU9GX0pDT0VGKV0KKwlwbXVsbHcJbW0wLCBNTVdPUkQgW01NQkxPQ0soMCwwLGVkeCxTSVpFT0ZfSUZBU1RfTVVMVF9UWVBFKV0KKworCW1vdnEgICAgICBtbTIsbW0wCQk7IG1tMD1pbjA9KDAwIDAxIDAyIDAzKQorCXB1bnBja2x3ZCBtbTAsbW0wCQk7IG1tMD0oMDAgMDAgMDEgMDEpCisJcHVucGNraHdkIG1tMixtbTIJCTsgbW0yPSgwMiAwMiAwMyAwMykKKworCW1vdnEgICAgICBtbTEsbW0wCisJcHVucGNrbGRxIG1tMCxtbTAJCTsgbW0wPSgwMCAwMCAwMCAwMCkKKwlwdW5wY2toZHEgbW0xLG1tMQkJOyBtbTE9KDAxIDAxIDAxIDAxKQorCW1vdnEgICAgICBtbTMsbW0yCisJcHVucGNrbGRxIG1tMixtbTIJCTsgbW0yPSgwMiAwMiAwMiAwMikKKwlwdW5wY2toZHEgbW0zLG1tMwkJOyBtbTM9KDAzIDAzIDAzIDAzKQorCisJbW92cQlNTVdPUkQgW01NQkxPQ0soMCwwLGVkaSxTSVpFT0ZfSkNPRUYpXSwgbW0wCisJbW92cQlNTVdPUkQgW01NQkxPQ0soMCwxLGVkaSxTSVpFT0ZfSkNPRUYpXSwgbW0wCisJbW92cQlNTVdPUkQgW01NQkxPQ0soMSwwLGVkaSxTSVpFT0ZfSkNPRUYpXSwgbW0xCisJbW92cQlNTVdPUkQgW01NQkxPQ0soMSwxLGVkaSxTSVpFT0ZfSkNPRUYpXSwgbW0xCisJbW92cQlNTVdPUkQgW01NQkxPQ0soMiwwLGVkaSxTSVpFT0ZfSkNPRUYpXSwgbW0yCisJbW92cQlNTVdPUkQgW01NQkxPQ0soMiwxLGVkaSxTSVpFT0ZfSkNPRUYpXSwgbW0yCisJbW92cQlNTVdPUkQgW01NQkxPQ0soMywwLGVkaSxTSVpFT0ZfSkNPRUYpXSwgbW0zCisJbW92cQlNTVdPUkQgW01NQkxPQ0soMywxLGVkaSxTSVpFT0ZfSkNPRUYpXSwgbW0zCisJam1wCW5lYXIgLm5leHRjb2x1bW4KKwlhbGlnbngJMTYsNworJWVuZGlmCisuY29sdW1uRENUOgorCisJOyAtLSBFdmVuIHBhcnQKKworCW1vdnEJbW0wLCBNTVdPUkQgW01NQkxPQ0soMCwwLGVzaSxTSVpFT0ZfSkNPRUYpXQorCW1vdnEJbW0xLCBNTVdPUkQgW01NQkxPQ0soMiwwLGVzaSxTSVpFT0ZfSkNPRUYpXQorCXBtdWxsdwltbTAsIE1NV09SRCBbTU1CTE9DSygwLDAsZWR4LFNJWkVPRl9JRkFTVF9NVUxUX1RZUEUpXQorCXBtdWxsdwltbTEsIE1NV09SRCBbTU1CTE9DSygyLDAsZWR4LFNJWkVPRl9JRkFTVF9NVUxUX1RZUEUpXQorCW1vdnEJbW0yLCBNTVdPUkQgW01NQkxPQ0soNCwwLGVzaSxTSVpFT0ZfSkNPRUYpXQorCW1vdnEJbW0zLCBNTVdPUkQgW01NQkxPQ0soNiwwLGVzaSxTSVpFT0ZfSkNPRUYpXQorCXBtdWxsdwltbTIsIE1NV09SRCBbTU1CTE9DSyg0LDAsZWR4LFNJWkVPRl9JRkFTVF9NVUxUX1RZUEUpXQorCXBtdWxsdwltbTMsIE1NV09SRCBbTU1CTE9DSyg2LDAsZWR4LFNJWkVPRl9JRkFTVF9NVUxUX1RZUEUpXQorCisJbW92cQltbTQsbW0wCisJbW92cQltbTUsbW0xCisJcHN1YncJbW0wLG1tMgkJCTsgbW0wPXRtcDExCisJcHN1YncJbW0xLG1tMworCXBhZGR3CW1tNCxtbTIJCQk7IG1tND10bXAxMAorCXBhZGR3CW1tNSxtbTMJCQk7IG1tNT10bXAxMworCisJcHNsbHcJbW0xLFBSRV9NVUxUSVBMWV9TQ0FMRV9CSVRTCisJcG11bGh3CW1tMSxbR09UT0ZGKGVieCxQV19GMTQxNCldCisJcHN1YncJbW0xLG1tNQkJCTsgbW0xPXRtcDEyCisKKwltb3ZxCW1tNixtbTQKKwltb3ZxCW1tNyxtbTAKKwlwc3VidwltbTQsbW01CQkJOyBtbTQ9dG1wMworCXBzdWJ3CW1tMCxtbTEJCQk7IG1tMD10bXAyCisJcGFkZHcJbW02LG1tNQkJCTsgbW02PXRtcDAKKwlwYWRkdwltbTcsbW0xCQkJOyBtbTc9dG1wMQorCisJbW92cQlNTVdPUkQgW3drKDEpXSwgbW00CTsgd2soMSk9dG1wMworCW1vdnEJTU1XT1JEIFt3aygwKV0sIG1tMAk7IHdrKDApPXRtcDIKKworCTsgLS0gT2RkIHBhcnQKKworCW1vdnEJbW0yLCBNTVdPUkQgW01NQkxPQ0soMSwwLGVzaSxTSVpFT0ZfSkNPRUYpXQorCW1vdnEJbW0zLCBNTVdPUkQgW01NQkxPQ0soMywwLGVzaSxTSVpFT0ZfSkNPRUYpXQorCXBtdWxsdwltbTIsIE1NV09SRCBbTU1CTE9DSygxLDAsZWR4LFNJWkVPRl9JRkFTVF9NVUxUX1RZUEUpXQorCXBtdWxsdwltbTMsIE1NV09SRCBbTU1CTE9DSygzLDAsZWR4LFNJWkVPRl9JRkFTVF9NVUxUX1RZUEUpXQorCW1vdnEJbW01LCBNTVdPUkQgW01NQkxPQ0soNSwwLGVzaSxTSVpFT0ZfSkNPRUYpXQorCW1vdnEJbW0xLCBNTVdPUkQgW01NQkxPQ0soNywwLGVzaSxTSVpFT0ZfSkNPRUYpXQorCXBtdWxsdwltbTUsIE1NV09SRCBbTU1CTE9DSyg1LDAsZWR4LFNJWkVPRl9JRkFTVF9NVUxUX1RZUEUpXQorCXBtdWxsdwltbTEsIE1NV09SRCBbTU1CTE9DSyg3LDAsZWR4LFNJWkVPRl9JRkFTVF9NVUxUX1RZUEUpXQorCisJbW92cQltbTQsbW0yCisJbW92cQltbTAsbW01CisJcHN1YncJbW0yLG1tMQkJCTsgbW0yPXoxMgorCXBzdWJ3CW1tNSxtbTMJCQk7IG1tNT16MTAKKwlwYWRkdwltbTQsbW0xCQkJOyBtbTQ9ejExCisJcGFkZHcJbW0wLG1tMwkJCTsgbW0wPXoxMworCisJbW92cQltbTEsbW01CQkJOyBtbTE9ejEwKHVuc2NhbGVkKQorCXBzbGx3CW1tMixQUkVfTVVMVElQTFlfU0NBTEVfQklUUworCXBzbGx3CW1tNSxQUkVfTVVMVElQTFlfU0NBTEVfQklUUworCisJbW92cQltbTMsbW00CisJcHN1YncJbW00LG1tMAorCXBhZGR3CW1tMyxtbTAJCQk7IG1tMz10bXA3CisKKwlwc2xsdwltbTQsUFJFX01VTFRJUExZX1NDQUxFX0JJVFMKKwlwbXVsaHcJbW00LFtHT1RPRkYoZWJ4LFBXX0YxNDE0KV0JOyBtbTQ9dG1wMTEKKworCTsgVG8gYXZvaWQgb3ZlcmZsb3cuLi4KKwk7CisJOyAoT3JpZ2luYWwpCisJOyB0bXAxMiA9IC0yLjYxMzEyNTkzMCAqIHoxMCArIHo1OworCTsKKwk7IChUaGlzIGltcGxlbWVudGF0aW9uKQorCTsgdG1wMTIgPSAoLTEuNjEzMTI1OTMwIC0gMSkgKiB6MTAgKyB6NTsKKwk7ICAgICAgID0gLTEuNjEzMTI1OTMwICogejEwIC0gejEwICsgejU7CisKKwltb3ZxCW1tMCxtbTUKKwlwYWRkdwltbTUsbW0yCisJcG11bGh3CW1tNSxbR09UT0ZGKGVieCxQV19GMTg0NyldCTsgbW01PXo1CisJcG11bGh3CW1tMCxbR09UT0ZGKGVieCxQV19NRjE2MTMpXQorCXBtdWxodwltbTIsW0dPVE9GRihlYngsUFdfRjEwODIpXQorCXBzdWJ3CW1tMCxtbTEKKwlwc3VidwltbTIsbW01CQkJOyBtbTI9dG1wMTAKKwlwYWRkdwltbTAsbW01CQkJOyBtbTA9dG1wMTIKKworCTsgLS0gRmluYWwgb3V0cHV0IHN0YWdlCisKKwlwc3VidwltbTAsbW0zCQkJOyBtbTA9dG1wNgorCW1vdnEJbW0xLG1tNgorCW1vdnEJbW01LG1tNworCXBhZGR3CW1tNixtbTMJCQk7IG1tNj1kYXRhMD0oMDAgMDEgMDIgMDMpCisJcGFkZHcJbW03LG1tMAkJCTsgbW03PWRhdGExPSgxMCAxMSAxMiAxMykKKwlwc3VidwltbTEsbW0zCQkJOyBtbTE9ZGF0YTc9KDcwIDcxIDcyIDczKQorCXBzdWJ3CW1tNSxtbTAJCQk7IG1tNT1kYXRhNj0oNjAgNjEgNjIgNjMpCisJcHN1YncJbW00LG1tMAkJCTsgbW00PXRtcDUKKworCW1vdnEgICAgICBtbTMsbW02CQk7IHRyYW5zcG9zZSBjb2VmZmljaWVudHMocGhhc2UgMSkKKwlwdW5wY2tsd2QgbW02LG1tNwkJOyBtbTY9KDAwIDEwIDAxIDExKQorCXB1bnBja2h3ZCBtbTMsbW03CQk7IG1tMz0oMDIgMTIgMDMgMTMpCisJbW92cSAgICAgIG1tMCxtbTUJCTsgdHJhbnNwb3NlIGNvZWZmaWNpZW50cyhwaGFzZSAxKQorCXB1bnBja2x3ZCBtbTUsbW0xCQk7IG1tNT0oNjAgNzAgNjEgNzEpCisJcHVucGNraHdkIG1tMCxtbTEJCTsgbW0wPSg2MiA3MiA2MyA3MykKKworCW1vdnEJbW03LCBNTVdPUkQgW3drKDApXQk7IG1tNz10bXAyCisJbW92cQltbTEsIE1NV09SRCBbd2soMSldCTsgbW0xPXRtcDMKKworCW1vdnEJTU1XT1JEIFt3aygwKV0sIG1tNQk7IHdrKDApPSg2MCA3MCA2MSA3MSkKKwltb3ZxCU1NV09SRCBbd2soMSldLCBtbTAJOyB3aygxKT0oNjIgNzIgNjMgNzMpCisKKwlwYWRkdwltbTIsbW00CQkJOyBtbTI9dG1wNAorCW1vdnEJbW01LG1tNworCW1vdnEJbW0wLG1tMQorCXBhZGR3CW1tNyxtbTQJCQk7IG1tNz1kYXRhMj0oMjAgMjEgMjIgMjMpCisJcGFkZHcJbW0xLG1tMgkJCTsgbW0xPWRhdGE0PSg0MCA0MSA0MiA0MykKKwlwc3VidwltbTUsbW00CQkJOyBtbTU9ZGF0YTU9KDUwIDUxIDUyIDUzKQorCXBzdWJ3CW1tMCxtbTIJCQk7IG1tMD1kYXRhMz0oMzAgMzEgMzIgMzMpCisKKwltb3ZxICAgICAgbW00LG1tNwkJOyB0cmFuc3Bvc2UgY29lZmZpY2llbnRzKHBoYXNlIDEpCisJcHVucGNrbHdkIG1tNyxtbTAJCTsgbW03PSgyMCAzMCAyMSAzMSkKKwlwdW5wY2tod2QgbW00LG1tMAkJOyBtbTQ9KDIyIDMyIDIzIDMzKQorCW1vdnEgICAgICBtbTIsbW0xCQk7IHRyYW5zcG9zZSBjb2VmZmljaWVudHMocGhhc2UgMSkKKwlwdW5wY2tsd2QgbW0xLG1tNQkJOyBtbTE9KDQwIDUwIDQxIDUxKQorCXB1bnBja2h3ZCBtbTIsbW01CQk7IG1tMj0oNDIgNTIgNDMgNTMpCisKKwltb3ZxICAgICAgbW0wLG1tNgkJOyB0cmFuc3Bvc2UgY29lZmZpY2llbnRzKHBoYXNlIDIpCisJcHVucGNrbGRxIG1tNixtbTcJCTsgbW02PSgwMCAxMCAyMCAzMCkKKwlwdW5wY2toZHEgbW0wLG1tNwkJOyBtbTA9KDAxIDExIDIxIDMxKQorCW1vdnEgICAgICBtbTUsbW0zCQk7IHRyYW5zcG9zZSBjb2VmZmljaWVudHMocGhhc2UgMikKKwlwdW5wY2tsZHEgbW0zLG1tNAkJOyBtbTM9KDAyIDEyIDIyIDMyKQorCXB1bnBja2hkcSBtbTUsbW00CQk7IG1tNT0oMDMgMTMgMjMgMzMpCisKKwltb3ZxCW1tNywgTU1XT1JEIFt3aygwKV0JOyBtbTc9KDYwIDcwIDYxIDcxKQorCW1vdnEJbW00LCBNTVdPUkQgW3drKDEpXQk7IG1tND0oNjIgNzIgNjMgNzMpCisKKwltb3ZxCU1NV09SRCBbTU1CTE9DSygwLDAsZWRpLFNJWkVPRl9KQ09FRildLCBtbTYKKwltb3ZxCU1NV09SRCBbTU1CTE9DSygxLDAsZWRpLFNJWkVPRl9KQ09FRildLCBtbTAKKwltb3ZxCU1NV09SRCBbTU1CTE9DSygyLDAsZWRpLFNJWkVPRl9KQ09FRildLCBtbTMKKwltb3ZxCU1NV09SRCBbTU1CTE9DSygzLDAsZWRpLFNJWkVPRl9KQ09FRildLCBtbTUKKworCW1vdnEgICAgICBtbTYsbW0xCQk7IHRyYW5zcG9zZSBjb2VmZmljaWVudHMocGhhc2UgMikKKwlwdW5wY2tsZHEgbW0xLG1tNwkJOyBtbTE9KDQwIDUwIDYwIDcwKQorCXB1bnBja2hkcSBtbTYsbW03CQk7IG1tNj0oNDEgNTEgNjEgNzEpCisJbW92cSAgICAgIG1tMCxtbTIJCTsgdHJhbnNwb3NlIGNvZWZmaWNpZW50cyhwaGFzZSAyKQorCXB1bnBja2xkcSBtbTIsbW00CQk7IG1tMj0oNDIgNTIgNjIgNzIpCisJcHVucGNraGRxIG1tMCxtbTQJCTsgbW0wPSg0MyA1MyA2MyA3MykKKworCW1vdnEJTU1XT1JEIFtNTUJMT0NLKDAsMSxlZGksU0laRU9GX0pDT0VGKV0sIG1tMQorCW1vdnEJTU1XT1JEIFtNTUJMT0NLKDEsMSxlZGksU0laRU9GX0pDT0VGKV0sIG1tNgorCW1vdnEJTU1XT1JEIFtNTUJMT0NLKDIsMSxlZGksU0laRU9GX0pDT0VGKV0sIG1tMgorCW1vdnEJTU1XT1JEIFtNTUJMT0NLKDMsMSxlZGksU0laRU9GX0pDT0VGKV0sIG1tMAorCisubmV4dGNvbHVtbjoKKwlhZGQJZXNpLCBieXRlIDQqU0laRU9GX0pDT0VGCQk7IGNvZWZfYmxvY2sKKwlhZGQJZWR4LCBieXRlIDQqU0laRU9GX0lGQVNUX01VTFRfVFlQRQk7IHF1YW50cHRyCisJYWRkCWVkaSwgYnl0ZSA0KkRDVFNJWkUqU0laRU9GX0pDT0VGCTsgd3NwdHIKKwlkZWMJZWN4CQkJCQk7IGN0cgorCWpuegluZWFyIC5jb2x1bW5sb29wCisKKwk7IC0tLS0gUGFzcyAyOiBwcm9jZXNzIHJvd3MgZnJvbSB3b3JrIGFycmF5LCBzdG9yZSBpbnRvIG91dHB1dCBhcnJheS4KKworCW1vdgllYXgsIFtvcmlnaW5hbF9lYnBdCisJbGVhCWVzaSwgW3dvcmtzcGFjZV0JCQk7IEpDT0VGICogd3NwdHIKKwltb3YJZWRpLCBKU0FNUEFSUkFZIFtvdXRwdXRfYnVmKGVheCldCTsgKEpTQU1QUk9XICopCisJbW92CWVheCwgSkRJTUVOU0lPTiBbb3V0cHV0X2NvbChlYXgpXQorCW1vdgllY3gsIERDVFNJWkUvNAkJCQk7IGN0cgorCWFsaWdueAkxNiw3Cisucm93bG9vcDoKKworCTsgLS0gRXZlbiBwYXJ0CisKKwltb3ZxCW1tMCwgTU1XT1JEIFtNTUJMT0NLKDAsMCxlc2ksU0laRU9GX0pDT0VGKV0KKwltb3ZxCW1tMSwgTU1XT1JEIFtNTUJMT0NLKDIsMCxlc2ksU0laRU9GX0pDT0VGKV0KKwltb3ZxCW1tMiwgTU1XT1JEIFtNTUJMT0NLKDQsMCxlc2ksU0laRU9GX0pDT0VGKV0KKwltb3ZxCW1tMywgTU1XT1JEIFtNTUJMT0NLKDYsMCxlc2ksU0laRU9GX0pDT0VGKV0KKworCW1vdnEJbW00LG1tMAorCW1vdnEJbW01LG1tMQorCXBzdWJ3CW1tMCxtbTIJCQk7IG1tMD10bXAxMQorCXBzdWJ3CW1tMSxtbTMKKwlwYWRkdwltbTQsbW0yCQkJOyBtbTQ9dG1wMTAKKwlwYWRkdwltbTUsbW0zCQkJOyBtbTU9dG1wMTMKKworCXBzbGx3CW1tMSxQUkVfTVVMVElQTFlfU0NBTEVfQklUUworCXBtdWxodwltbTEsW0dPVE9GRihlYngsUFdfRjE0MTQpXQorCXBzdWJ3CW1tMSxtbTUJCQk7IG1tMT10bXAxMgorCisJbW92cQltbTYsbW00CisJbW92cQltbTcsbW0wCisJcHN1YncJbW00LG1tNQkJCTsgbW00PXRtcDMKKwlwc3VidwltbTAsbW0xCQkJOyBtbTA9dG1wMgorCXBhZGR3CW1tNixtbTUJCQk7IG1tNj10bXAwCisJcGFkZHcJbW03LG1tMQkJCTsgbW03PXRtcDEKKworCW1vdnEJTU1XT1JEIFt3aygxKV0sIG1tNAk7IHdrKDEpPXRtcDMKKwltb3ZxCU1NV09SRCBbd2soMCldLCBtbTAJOyB3aygwKT10bXAyCisKKwk7IC0tIE9kZCBwYXJ0CisKKwltb3ZxCW1tMiwgTU1XT1JEIFtNTUJMT0NLKDEsMCxlc2ksU0laRU9GX0pDT0VGKV0KKwltb3ZxCW1tMywgTU1XT1JEIFtNTUJMT0NLKDMsMCxlc2ksU0laRU9GX0pDT0VGKV0KKwltb3ZxCW1tNSwgTU1XT1JEIFtNTUJMT0NLKDUsMCxlc2ksU0laRU9GX0pDT0VGKV0KKwltb3ZxCW1tMSwgTU1XT1JEIFtNTUJMT0NLKDcsMCxlc2ksU0laRU9GX0pDT0VGKV0KKworCW1vdnEJbW00LG1tMgorCW1vdnEJbW0wLG1tNQorCXBzdWJ3CW1tMixtbTEJCQk7IG1tMj16MTIKKwlwc3VidwltbTUsbW0zCQkJOyBtbTU9ejEwCisJcGFkZHcJbW00LG1tMQkJCTsgbW00PXoxMQorCXBhZGR3CW1tMCxtbTMJCQk7IG1tMD16MTMKKworCW1vdnEJbW0xLG1tNQkJCTsgbW0xPXoxMCh1bnNjYWxlZCkKKwlwc2xsdwltbTIsUFJFX01VTFRJUExZX1NDQUxFX0JJVFMKKwlwc2xsdwltbTUsUFJFX01VTFRJUExZX1NDQUxFX0JJVFMKKworCW1vdnEJbW0zLG1tNAorCXBzdWJ3CW1tNCxtbTAKKwlwYWRkdwltbTMsbW0wCQkJOyBtbTM9dG1wNworCisJcHNsbHcJbW00LFBSRV9NVUxUSVBMWV9TQ0FMRV9CSVRTCisJcG11bGh3CW1tNCxbR09UT0ZGKGVieCxQV19GMTQxNCldCTsgbW00PXRtcDExCisKKwk7IFRvIGF2b2lkIG92ZXJmbG93Li4uCisJOworCTsgKE9yaWdpbmFsKQorCTsgdG1wMTIgPSAtMi42MTMxMjU5MzAgKiB6MTAgKyB6NTsKKwk7CisJOyAoVGhpcyBpbXBsZW1lbnRhdGlvbikKKwk7IHRtcDEyID0gKC0xLjYxMzEyNTkzMCAtIDEpICogejEwICsgejU7CisJOyAgICAgICA9IC0xLjYxMzEyNTkzMCAqIHoxMCAtIHoxMCArIHo1OworCisJbW92cQltbTAsbW01CisJcGFkZHcJbW01LG1tMgorCXBtdWxodwltbTUsW0dPVE9GRihlYngsUFdfRjE4NDcpXQk7IG1tNT16NQorCXBtdWxodwltbTAsW0dPVE9GRihlYngsUFdfTUYxNjEzKV0KKwlwbXVsaHcJbW0yLFtHT1RPRkYoZWJ4LFBXX0YxMDgyKV0KKwlwc3VidwltbTAsbW0xCisJcHN1YncJbW0yLG1tNQkJCTsgbW0yPXRtcDEwCisJcGFkZHcJbW0wLG1tNQkJCTsgbW0wPXRtcDEyCisKKwk7IC0tIEZpbmFsIG91dHB1dCBzdGFnZQorCisJcHN1YncJbW0wLG1tMwkJCTsgbW0wPXRtcDYKKwltb3ZxCW1tMSxtbTYKKwltb3ZxCW1tNSxtbTcKKwlwYWRkdwltbTYsbW0zCQkJOyBtbTY9ZGF0YTA9KDAwIDEwIDIwIDMwKQorCXBhZGR3CW1tNyxtbTAJCQk7IG1tNz1kYXRhMT0oMDEgMTEgMjEgMzEpCisJcHNyYXcJbW02LChQQVNTMV9CSVRTKzMpCTsgZGVzY2FsZQorCXBzcmF3CW1tNywoUEFTUzFfQklUUyszKQk7IGRlc2NhbGUKKwlwc3VidwltbTEsbW0zCQkJOyBtbTE9ZGF0YTc9KDA3IDE3IDI3IDM3KQorCXBzdWJ3CW1tNSxtbTAJCQk7IG1tNT1kYXRhNj0oMDYgMTYgMjYgMzYpCisJcHNyYXcJbW0xLChQQVNTMV9CSVRTKzMpCTsgZGVzY2FsZQorCXBzcmF3CW1tNSwoUEFTUzFfQklUUyszKQk7IGRlc2NhbGUKKwlwc3VidwltbTQsbW0wCQkJOyBtbTQ9dG1wNQorCisJcGFja3Nzd2IgIG1tNixtbTUJCTsgbW02PSgwMCAxMCAyMCAzMCAwNiAxNiAyNiAzNikKKwlwYWNrc3N3YiAgbW03LG1tMQkJOyBtbTc9KDAxIDExIDIxIDMxIDA3IDE3IDI3IDM3KQorCisJbW92cQltbTMsIE1NV09SRCBbd2soMCldCTsgbW0zPXRtcDIKKwltb3ZxCW1tMCwgTU1XT1JEIFt3aygxKV0JOyBtbTA9dG1wMworCisJcGFkZHcJbW0yLG1tNAkJCTsgbW0yPXRtcDQKKwltb3ZxCW1tNSxtbTMKKwltb3ZxCW1tMSxtbTAKKwlwYWRkdwltbTMsbW00CQkJOyBtbTM9ZGF0YTI9KDAyIDEyIDIyIDMyKQorCXBhZGR3CW1tMCxtbTIJCQk7IG1tMD1kYXRhND0oMDQgMTQgMjQgMzQpCisJcHNyYXcJbW0zLChQQVNTMV9CSVRTKzMpCTsgZGVzY2FsZQorCXBzcmF3CW1tMCwoUEFTUzFfQklUUyszKQk7IGRlc2NhbGUKKwlwc3VidwltbTUsbW00CQkJOyBtbTU9ZGF0YTU9KDA1IDE1IDI1IDM1KQorCXBzdWJ3CW1tMSxtbTIJCQk7IG1tMT1kYXRhMz0oMDMgMTMgMjMgMzMpCisJcHNyYXcJbW01LChQQVNTMV9CSVRTKzMpCTsgZGVzY2FsZQorCXBzcmF3CW1tMSwoUEFTUzFfQklUUyszKQk7IGRlc2NhbGUKKworCW1vdnEgICAgICBtbTQsW0dPVE9GRihlYngsUEJfQ0VOVEVSSlNBTVApXQk7IG1tND1bUEJfQ0VOVEVSSlNBTVBdCisKKwlwYWNrc3N3YiAgbW0zLG1tMAkJOyBtbTM9KDAyIDEyIDIyIDMyIDA0IDE0IDI0IDM0KQorCXBhY2tzc3diICBtbTEsbW01CQk7IG1tMT0oMDMgMTMgMjMgMzMgMDUgMTUgMjUgMzUpCisKKwlwYWRkYiAgICAgbW02LG1tNAorCXBhZGRiICAgICBtbTcsbW00CisJcGFkZGIgICAgIG1tMyxtbTQKKwlwYWRkYiAgICAgbW0xLG1tNAorCisJbW92cSAgICAgIG1tMixtbTYJCTsgdHJhbnNwb3NlIGNvZWZmaWNpZW50cyhwaGFzZSAxKQorCXB1bnBja2xidyBtbTYsbW03CQk7IG1tNj0oMDAgMDEgMTAgMTEgMjAgMjEgMzAgMzEpCisJcHVucGNraGJ3IG1tMixtbTcJCTsgbW0yPSgwNiAwNyAxNiAxNyAyNiAyNyAzNiAzNykKKwltb3ZxICAgICAgbW0wLG1tMwkJOyB0cmFuc3Bvc2UgY29lZmZpY2llbnRzKHBoYXNlIDEpCisJcHVucGNrbGJ3IG1tMyxtbTEJCTsgbW0zPSgwMiAwMyAxMiAxMyAyMiAyMyAzMiAzMykKKwlwdW5wY2toYncgbW0wLG1tMQkJOyBtbTA9KDA0IDA1IDE0IDE1IDI0IDI1IDM0IDM1KQorCisJbW92cSAgICAgIG1tNSxtbTYJCTsgdHJhbnNwb3NlIGNvZWZmaWNpZW50cyhwaGFzZSAyKQorCXB1bnBja2x3ZCBtbTYsbW0zCQk7IG1tNj0oMDAgMDEgMDIgMDMgMTAgMTEgMTIgMTMpCisJcHVucGNraHdkIG1tNSxtbTMJCTsgbW01PSgyMCAyMSAyMiAyMyAzMCAzMSAzMiAzMykKKwltb3ZxICAgICAgbW00LG1tMAkJOyB0cmFuc3Bvc2UgY29lZmZpY2llbnRzKHBoYXNlIDIpCisJcHVucGNrbHdkIG1tMCxtbTIJCTsgbW0wPSgwNCAwNSAwNiAwNyAxNCAxNSAxNiAxNykKKwlwdW5wY2tod2QgbW00LG1tMgkJOyBtbTQ9KDI0IDI1IDI2IDI3IDM0IDM1IDM2IDM3KQorCisJbW92cSAgICAgIG1tNyxtbTYJCTsgdHJhbnNwb3NlIGNvZWZmaWNpZW50cyhwaGFzZSAzKQorCXB1bnBja2xkcSBtbTYsbW0wCQk7IG1tNj0oMDAgMDEgMDIgMDMgMDQgMDUgMDYgMDcpCisJcHVucGNraGRxIG1tNyxtbTAJCTsgbW03PSgxMCAxMSAxMiAxMyAxNCAxNSAxNiAxNykKKwltb3ZxICAgICAgbW0xLG1tNQkJOyB0cmFuc3Bvc2UgY29lZmZpY2llbnRzKHBoYXNlIDMpCisJcHVucGNrbGRxIG1tNSxtbTQJCTsgbW01PSgyMCAyMSAyMiAyMyAyNCAyNSAyNiAyNykKKwlwdW5wY2toZHEgbW0xLG1tNAkJOyBtbTE9KDMwIDMxIDMyIDMzIDM0IDM1IDM2IDM3KQorCisJcHVzaHBpYwllYngJCQk7IHNhdmUgR09UIGFkZHJlc3MKKworCW1vdgllZHgsIEpTQU1QUk9XIFtlZGkrMCpTSVpFT0ZfSlNBTVBST1ddCisJbW92CWVieCwgSlNBTVBST1cgW2VkaSsxKlNJWkVPRl9KU0FNUFJPV10KKwltb3ZxCU1NV09SRCBbZWR4K2VheCpTSVpFT0ZfSlNBTVBMRV0sIG1tNgorCW1vdnEJTU1XT1JEIFtlYngrZWF4KlNJWkVPRl9KU0FNUExFXSwgbW03CisJbW92CWVkeCwgSlNBTVBST1cgW2VkaSsyKlNJWkVPRl9KU0FNUFJPV10KKwltb3YJZWJ4LCBKU0FNUFJPVyBbZWRpKzMqU0laRU9GX0pTQU1QUk9XXQorCW1vdnEJTU1XT1JEIFtlZHgrZWF4KlNJWkVPRl9KU0FNUExFXSwgbW01CisJbW92cQlNTVdPUkQgW2VieCtlYXgqU0laRU9GX0pTQU1QTEVdLCBtbTEKKworCXBvcHBpYwllYngJCQk7IHJlc3RvcmUgR09UIGFkZHJlc3MKKworCWFkZAllc2ksIGJ5dGUgNCpTSVpFT0ZfSkNPRUYJOyB3c3B0cgorCWFkZAllZGksIGJ5dGUgNCpTSVpFT0ZfSlNBTVBST1cKKwlkZWMJZWN4CQkJCTsgY3RyCisJam56CW5lYXIgLnJvd2xvb3AKKworCWVtbXMJCTsgZW1wdHkgTU1YIHN0YXRlCisKKwlwb3AJZWRpCisJcG9wCWVzaQorOwlwb3AJZWR4CQk7IG5lZWQgbm90IGJlIHByZXNlcnZlZAorOwlwb3AJZWN4CQk7IG5lZWQgbm90IGJlIHByZXNlcnZlZAorCXBvcAllYngKKwltb3YJZXNwLGVicAkJOyBlc3AgPC0gYWxpZ25lZCBlYnAKKwlwb3AJZXNwCQk7IGVzcCA8LSBvcmlnaW5hbCBlYnAKKwlwb3AJZWJwCisJcmV0CisKKzsgRm9yIHNvbWUgcmVhc29uLCB0aGUgT1MgWCBsaW5rZXIgZG9lcyBub3QgaG9ub3IgdGhlIHJlcXVlc3QgdG8gYWxpZ24gdGhlCis7IHNlZ21lbnQgdW5sZXNzIHdlIGRvIHRoaXMuCisJYWxpZ24JMTYKZGlmZiAtLWdpdCBhL3NpbWQvamltbXhpbnQuYXNtIGIvc2ltZC9qaW1teGludC5hc20KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uN2I1MmZhZQotLS0gL2Rldi9udWxsCisrKyBiL3NpbWQvamltbXhpbnQuYXNtCkBAIC0wLDAgKzEsODUyIEBACis7Cis7IGppbW14aW50LmFzbSAtIGFjY3VyYXRlIGludGVnZXIgSURDVCAoTU1YKQorOworOyBDb3B5cmlnaHQgMjAwOSBQaWVycmUgT3NzbWFuIDxvc3NtYW5AY2VuZGlvLnNlPiBmb3IgQ2VuZGlvIEFCCis7Cis7IEJhc2VkIG9uCis7IHg4NiBTSU1EIGV4dGVuc2lvbiBmb3IgSUpHIEpQRUcgbGlicmFyeQorOyBDb3B5cmlnaHQgKEMpIDE5OTktMjAwNiwgTUlZQVNBS0EgTWFzYXJ1LgorOyBGb3IgY29uZGl0aW9ucyBvZiBkaXN0cmlidXRpb24gYW5kIHVzZSwgc2VlIGNvcHlyaWdodCBub3RpY2UgaW4ganNpbWRleHQuaW5jCis7Cis7IFRoaXMgZmlsZSBzaG91bGQgYmUgYXNzZW1ibGVkIHdpdGggTkFTTSAoTmV0d2lkZSBBc3NlbWJsZXIpLAorOyBjYW4gKm5vdCogYmUgYXNzZW1ibGVkIHdpdGggTWljcm9zb2Z0J3MgTUFTTSBvciBhbnkgY29tcGF0aWJsZQorOyBhc3NlbWJsZXIgKGluY2x1ZGluZyBCb3JsYW5kJ3MgVHVyYm8gQXNzZW1ibGVyKS4KKzsgTkFTTSBpcyBhdmFpbGFibGUgZnJvbSBodHRwOi8vbmFzbS5zb3VyY2Vmb3JnZS5uZXQvIG9yCis7IGh0dHA6Ly9zb3VyY2Vmb3JnZS5uZXQvcHJvamVjdC9zaG93ZmlsZXMucGhwP2dyb3VwX2lkPTYyMDgKKzsKKzsgVGhpcyBmaWxlIGNvbnRhaW5zIGEgc2xvdy1idXQtYWNjdXJhdGUgaW50ZWdlciBpbXBsZW1lbnRhdGlvbiBvZiB0aGUKKzsgaW52ZXJzZSBEQ1QgKERpc2NyZXRlIENvc2luZSBUcmFuc2Zvcm0pLiBUaGUgZm9sbG93aW5nIGNvZGUgaXMgYmFzZWQKKzsgZGlyZWN0bHkgb24gdGhlIElKRydzIG9yaWdpbmFsIGppZGN0aW50LmM7IHNlZSB0aGUgamlkY3RpbnQuYyBmb3IKKzsgbW9yZSBkZXRhaWxzLgorOworOyBbVEFCOF0KKworJWluY2x1ZGUgImpzaW1kZXh0LmluYyIKKyVpbmNsdWRlICJqZGN0LmluYyIKKworOyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCislZGVmaW5lIENPTlNUX0JJVFMJMTMKKyVkZWZpbmUgUEFTUzFfQklUUwkyCisKKyVkZWZpbmUgREVTQ0FMRV9QMQkoQ09OU1RfQklUUy1QQVNTMV9CSVRTKQorJWRlZmluZSBERVNDQUxFX1AyCShDT05TVF9CSVRTK1BBU1MxX0JJVFMrMykKKworJWlmIENPTlNUX0JJVFMgPT0gMTMKK0ZfMF8yOTgJZXF1CSAyNDQ2CQk7IEZJWCgwLjI5ODYzMTMzNikKK0ZfMF8zOTAJZXF1CSAzMTk2CQk7IEZJWCgwLjM5MDE4MDY0NCkKK0ZfMF81NDEJZXF1CSA0NDMzCQk7IEZJWCgwLjU0MTE5NjEwMCkKK0ZfMF83NjUJZXF1CSA2MjcwCQk7IEZJWCgwLjc2NTM2Njg2NSkKK0ZfMF84OTkJZXF1CSA3MzczCQk7IEZJWCgwLjg5OTk3NjIyMykKK0ZfMV8xNzUJZXF1CSA5NjMzCQk7IEZJWCgxLjE3NTg3NTYwMikKK0ZfMV81MDEJZXF1CTEyMjk5CQk7IEZJWCgxLjUwMTMyMTExMCkKK0ZfMV84NDcJZXF1CTE1MTM3CQk7IEZJWCgxLjg0Nzc1OTA2NSkKK0ZfMV85NjEJZXF1CTE2MDY5CQk7IEZJWCgxLjk2MTU3MDU2MCkKK0ZfMl8wNTMJZXF1CTE2ODE5CQk7IEZJWCgyLjA1MzExOTg2OSkKK0ZfMl81NjIJZXF1CTIwOTk1CQk7IEZJWCgyLjU2MjkxNTQ0NykKK0ZfM18wNzIJZXF1CTI1MTcyCQk7IEZJWCgzLjA3MjcxMTAyNikKKyVlbHNlCis7IE5BU00gY2Fubm90IGRvIGNvbXBpbGUtdGltZSBhcml0aG1ldGljIG9uIGZsb2F0aW5nLXBvaW50IGNvbnN0YW50cy4KKyVkZWZpbmUgREVTQ0FMRSh4LG4pICAoKCh4KSsoMTw8KChuKS0xKSkpPj4obikpCitGXzBfMjk4CWVxdQlERVNDQUxFKCAzMjA2NTI5NTUsMzAtQ09OU1RfQklUUykJOyBGSVgoMC4yOTg2MzEzMzYpCitGXzBfMzkwCWVxdQlERVNDQUxFKCA0MTg5NTMyNzYsMzAtQ09OU1RfQklUUykJOyBGSVgoMC4zOTAxODA2NDQpCitGXzBfNTQxCWVxdQlERVNDQUxFKCA1ODExMDQ4ODcsMzAtQ09OU1RfQklUUykJOyBGSVgoMC41NDExOTYxMDApCitGXzBfNzY1CWVxdQlERVNDQUxFKCA4MjE4MDY0MTMsMzAtQ09OU1RfQklUUykJOyBGSVgoMC43NjUzNjY4NjUpCitGXzBfODk5CWVxdQlERVNDQUxFKCA5NjYzNDIxMTEsMzAtQ09OU1RfQklUUykJOyBGSVgoMC44OTk5NzYyMjMpCitGXzFfMTc1CWVxdQlERVNDQUxFKDEyNjI1ODY4MTMsMzAtQ09OU1RfQklUUykJOyBGSVgoMS4xNzU4NzU2MDIpCitGXzFfNTAxCWVxdQlERVNDQUxFKDE2MTIwMzEyNjcsMzAtQ09OU1RfQklUUykJOyBGSVgoMS41MDEzMjExMTApCitGXzFfODQ3CWVxdQlERVNDQUxFKDE5ODQwMTYxODgsMzAtQ09OU1RfQklUUykJOyBGSVgoMS44NDc3NTkwNjUpCitGXzFfOTYxCWVxdQlERVNDQUxFKDIxMDYyMjAzNTAsMzAtQ09OU1RfQklUUykJOyBGSVgoMS45NjE1NzA1NjApCitGXzJfMDUzCWVxdQlERVNDQUxFKDIyMDQ1MjA2NzMsMzAtQ09OU1RfQklUUykJOyBGSVgoMi4wNTMxMTk4NjkpCitGXzJfNTYyCWVxdQlERVNDQUxFKDI3NTE5MDk1MDYsMzAtQ09OU1RfQklUUykJOyBGSVgoMi41NjI5MTU0NDcpCitGXzNfMDcyCWVxdQlERVNDQUxFKDMyOTkyOTgzNDEsMzAtQ09OU1RfQklUUykJOyBGSVgoMy4wNzI3MTEwMjYpCislZW5kaWYKKworOyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCVNFQ1RJT04JU0VHX0NPTlNUCisKKwlhbGlnbnoJMTYKKwlnbG9iYWwJRVhUTihqY29uc3RfaWRjdF9pc2xvd19tbXgpCisKK0VYVE4oamNvbnN0X2lkY3RfaXNsb3dfbW14KToKKworUFdfRjEzMF9GMDU0CXRpbWVzIDIgZHcgIChGXzBfNTQxK0ZfMF83NjUpLCBGXzBfNTQxCitQV19GMDU0X01GMTMwCXRpbWVzIDIgZHcgIEZfMF81NDEsIChGXzBfNTQxLUZfMV84NDcpCitQV19NRjA3OF9GMTE3CXRpbWVzIDIgZHcgIChGXzFfMTc1LUZfMV85NjEpLCBGXzFfMTc1CitQV19GMTE3X0YwNzgJdGltZXMgMiBkdyAgRl8xXzE3NSwgKEZfMV8xNzUtRl8wXzM5MCkKK1BXX01GMDYwX01GMDg5CXRpbWVzIDIgZHcgIChGXzBfMjk4LUZfMF84OTkpLC1GXzBfODk5CitQV19NRjA4OV9GMDYwCXRpbWVzIDIgZHcgLUZfMF84OTksIChGXzFfNTAxLUZfMF84OTkpCitQV19NRjA1MF9NRjI1Ngl0aW1lcyAyIGR3ICAoRl8yXzA1My1GXzJfNTYyKSwtRl8yXzU2MgorUFdfTUYyNTZfRjA1MAl0aW1lcyAyIGR3IC1GXzJfNTYyLCAoRl8zXzA3Mi1GXzJfNTYyKQorUERfREVTQ0FMRV9QMQl0aW1lcyAyIGRkICAxIDw8IChERVNDQUxFX1AxLTEpCitQRF9ERVNDQUxFX1AyCXRpbWVzIDIgZGQgIDEgPDwgKERFU0NBTEVfUDItMSkKK1BCX0NFTlRFUkpTQU1QCXRpbWVzIDggZGIgIENFTlRFUkpTQU1QTEUKKworCWFsaWduegkxNgorCis7IC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisJU0VDVElPTglTRUdfVEVYVAorCUJJVFMJMzIKKzsKKzsgUGVyZm9ybSBkZXF1YW50aXphdGlvbiBhbmQgaW52ZXJzZSBEQ1Qgb24gb25lIGJsb2NrIG9mIGNvZWZmaWNpZW50cy4KKzsKKzsgR0xPQkFMKHZvaWQpCis7IGpzaW1kX2lkY3RfaXNsb3dfbW14ICh2b2lkICogZGN0X3RhYmxlLCBKQ09FRlBUUiBjb2VmX2Jsb2NrLAorOyAgICAgICAgICAgICAgICAgICAgICAgSlNBTVBBUlJBWSBvdXRwdXRfYnVmLCBKRElNRU5TSU9OIG91dHB1dF9jb2wpCis7CisKKyVkZWZpbmUgZGN0X3RhYmxlKGIpCShiKSs4CQkJOyBqcGVnX2NvbXBvbmVudF9pbmZvICogY29tcHB0cgorJWRlZmluZSBjb2VmX2Jsb2NrKGIpCShiKSsxMgkJOyBKQ09FRlBUUiBjb2VmX2Jsb2NrCislZGVmaW5lIG91dHB1dF9idWYoYikJKGIpKzE2CQk7IEpTQU1QQVJSQVkgb3V0cHV0X2J1ZgorJWRlZmluZSBvdXRwdXRfY29sKGIpCShiKSsyMAkJOyBKRElNRU5TSU9OIG91dHB1dF9jb2wKKworJWRlZmluZSBvcmlnaW5hbF9lYnAJZWJwKzAKKyVkZWZpbmUgd2soaSkJCWVicC0oV0tfTlVNLShpKSkqU0laRU9GX01NV09SRAk7IG1td29yZCB3a1tXS19OVU1dCislZGVmaW5lIFdLX05VTQkJMTIKKyVkZWZpbmUgd29ya3NwYWNlCXdrKDApLURDVFNJWkUyKlNJWkVPRl9KQ09FRgorCQkJCQk7IEpDT0VGIHdvcmtzcGFjZVtEQ1RTSVpFMl0KKworCWFsaWduCTE2CisJZ2xvYmFsCUVYVE4oanNpbWRfaWRjdF9pc2xvd19tbXgpCisKK0VYVE4oanNpbWRfaWRjdF9pc2xvd19tbXgpOgorCXB1c2gJZWJwCisJbW92CWVheCxlc3AJCQkJOyBlYXggPSBvcmlnaW5hbCBlYnAKKwlzdWIJZXNwLCBieXRlIDQKKwlhbmQJZXNwLCBieXRlICgtU0laRU9GX01NV09SRCkJOyBhbGlnbiB0byA2NCBiaXRzCisJbW92CVtlc3BdLGVheAorCW1vdgllYnAsZXNwCQkJCTsgZWJwID0gYWxpZ25lZCBlYnAKKwlsZWEJZXNwLCBbd29ya3NwYWNlXQorCXB1c2gJZWJ4Cis7CXB1c2gJZWN4CQk7IG5lZWQgbm90IGJlIHByZXNlcnZlZAorOwlwdXNoCWVkeAkJOyBuZWVkIG5vdCBiZSBwcmVzZXJ2ZWQKKwlwdXNoCWVzaQorCXB1c2gJZWRpCisKKwlnZXRfR09UCWVieAkJOyBnZXQgR09UIGFkZHJlc3MKKworCTsgLS0tLSBQYXNzIDE6IHByb2Nlc3MgY29sdW1ucyBmcm9tIGlucHV0LCBzdG9yZSBpbnRvIHdvcmsgYXJyYXkuCisKKzsJbW92CWVheCwgW29yaWdpbmFsX2VicF0KKwltb3YJZWR4LCBQT0lOVEVSIFtkY3RfdGFibGUoZWF4KV0JOyBxdWFudHB0cgorCW1vdgllc2ksIEpDT0VGUFRSIFtjb2VmX2Jsb2NrKGVheCldCQk7IGlucHRyCisJbGVhCWVkaSwgW3dvcmtzcGFjZV0JCQk7IEpDT0VGICogd3NwdHIKKwltb3YJZWN4LCBEQ1RTSVpFLzQJCQkJOyBjdHIKKwlhbGlnbngJMTYsNworLmNvbHVtbmxvb3A6CislaWZuZGVmIE5PX1pFUk9fQ09MVU1OX1RFU1RfSVNMT1dfTU1YCisJbW92CWVheCwgRFdPUkQgW0RXQkxPQ0soMSwwLGVzaSxTSVpFT0ZfSkNPRUYpXQorCW9yCWVheCwgRFdPUkQgW0RXQkxPQ0soMiwwLGVzaSxTSVpFT0ZfSkNPRUYpXQorCWpueglzaG9ydCAuY29sdW1uRENUCisKKwltb3ZxCW1tMCwgTU1XT1JEIFtNTUJMT0NLKDEsMCxlc2ksU0laRU9GX0pDT0VGKV0KKwltb3ZxCW1tMSwgTU1XT1JEIFtNTUJMT0NLKDIsMCxlc2ksU0laRU9GX0pDT0VGKV0KKwlwb3IJbW0wLCBNTVdPUkQgW01NQkxPQ0soMywwLGVzaSxTSVpFT0ZfSkNPRUYpXQorCXBvcgltbTEsIE1NV09SRCBbTU1CTE9DSyg0LDAsZXNpLFNJWkVPRl9KQ09FRildCisJcG9yCW1tMCwgTU1XT1JEIFtNTUJMT0NLKDUsMCxlc2ksU0laRU9GX0pDT0VGKV0KKwlwb3IJbW0xLCBNTVdPUkQgW01NQkxPQ0soNiwwLGVzaSxTSVpFT0ZfSkNPRUYpXQorCXBvcgltbTAsIE1NV09SRCBbTU1CTE9DSyg3LDAsZXNpLFNJWkVPRl9KQ09FRildCisJcG9yCW1tMSxtbTAKKwlwYWNrc3N3YiBtbTEsbW0xCisJbW92ZAllYXgsbW0xCisJdGVzdAllYXgsZWF4CisJam56CXNob3J0IC5jb2x1bW5EQ1QKKworCTsgLS0gQUMgdGVybXMgYWxsIHplcm8KKworCW1vdnEJbW0wLCBNTVdPUkQgW01NQkxPQ0soMCwwLGVzaSxTSVpFT0ZfSkNPRUYpXQorCXBtdWxsdwltbTAsIE1NV09SRCBbTU1CTE9DSygwLDAsZWR4LFNJWkVPRl9JU0xPV19NVUxUX1RZUEUpXQorCisJcHNsbHcJbW0wLFBBU1MxX0JJVFMKKworCW1vdnEgICAgICBtbTIsbW0wCQk7IG1tMD1pbjA9KDAwIDAxIDAyIDAzKQorCXB1bnBja2x3ZCBtbTAsbW0wCQk7IG1tMD0oMDAgMDAgMDEgMDEpCisJcHVucGNraHdkIG1tMixtbTIJCTsgbW0yPSgwMiAwMiAwMyAwMykKKworCW1vdnEgICAgICBtbTEsbW0wCisJcHVucGNrbGRxIG1tMCxtbTAJCTsgbW0wPSgwMCAwMCAwMCAwMCkKKwlwdW5wY2toZHEgbW0xLG1tMQkJOyBtbTE9KDAxIDAxIDAxIDAxKQorCW1vdnEgICAgICBtbTMsbW0yCisJcHVucGNrbGRxIG1tMixtbTIJCTsgbW0yPSgwMiAwMiAwMiAwMikKKwlwdW5wY2toZHEgbW0zLG1tMwkJOyBtbTM9KDAzIDAzIDAzIDAzKQorCisJbW92cQlNTVdPUkQgW01NQkxPQ0soMCwwLGVkaSxTSVpFT0ZfSkNPRUYpXSwgbW0wCisJbW92cQlNTVdPUkQgW01NQkxPQ0soMCwxLGVkaSxTSVpFT0ZfSkNPRUYpXSwgbW0wCisJbW92cQlNTVdPUkQgW01NQkxPQ0soMSwwLGVkaSxTSVpFT0ZfSkNPRUYpXSwgbW0xCisJbW92cQlNTVdPUkQgW01NQkxPQ0soMSwxLGVkaSxTSVpFT0ZfSkNPRUYpXSwgbW0xCisJbW92cQlNTVdPUkQgW01NQkxPQ0soMiwwLGVkaSxTSVpFT0ZfSkNPRUYpXSwgbW0yCisJbW92cQlNTVdPUkQgW01NQkxPQ0soMiwxLGVkaSxTSVpFT0ZfSkNPRUYpXSwgbW0yCisJbW92cQlNTVdPUkQgW01NQkxPQ0soMywwLGVkaSxTSVpFT0ZfSkNPRUYpXSwgbW0zCisJbW92cQlNTVdPUkQgW01NQkxPQ0soMywxLGVkaSxTSVpFT0ZfSkNPRUYpXSwgbW0zCisJam1wCW5lYXIgLm5leHRjb2x1bW4KKwlhbGlnbngJMTYsNworJWVuZGlmCisuY29sdW1uRENUOgorCisJOyAtLSBFdmVuIHBhcnQKKworCW1vdnEJbW0wLCBNTVdPUkQgW01NQkxPQ0soMCwwLGVzaSxTSVpFT0ZfSkNPRUYpXQorCW1vdnEJbW0xLCBNTVdPUkQgW01NQkxPQ0soMiwwLGVzaSxTSVpFT0ZfSkNPRUYpXQorCXBtdWxsdwltbTAsIE1NV09SRCBbTU1CTE9DSygwLDAsZWR4LFNJWkVPRl9JU0xPV19NVUxUX1RZUEUpXQorCXBtdWxsdwltbTEsIE1NV09SRCBbTU1CTE9DSygyLDAsZWR4LFNJWkVPRl9JU0xPV19NVUxUX1RZUEUpXQorCW1vdnEJbW0yLCBNTVdPUkQgW01NQkxPQ0soNCwwLGVzaSxTSVpFT0ZfSkNPRUYpXQorCW1vdnEJbW0zLCBNTVdPUkQgW01NQkxPQ0soNiwwLGVzaSxTSVpFT0ZfSkNPRUYpXQorCXBtdWxsdwltbTIsIE1NV09SRCBbTU1CTE9DSyg0LDAsZWR4LFNJWkVPRl9JU0xPV19NVUxUX1RZUEUpXQorCXBtdWxsdwltbTMsIE1NV09SRCBbTU1CTE9DSyg2LDAsZWR4LFNJWkVPRl9JU0xPV19NVUxUX1RZUEUpXQorCisJOyAoT3JpZ2luYWwpCisJOyB6MSA9ICh6MiArIHozKSAqIDAuNTQxMTk2MTAwOworCTsgdG1wMiA9IHoxICsgejMgKiAtMS44NDc3NTkwNjU7CisJOyB0bXAzID0gejEgKyB6MiAqIDAuNzY1MzY2ODY1OworCTsKKwk7IChUaGlzIGltcGxlbWVudGF0aW9uKQorCTsgdG1wMiA9IHoyICogMC41NDExOTYxMDAgKyB6MyAqICgwLjU0MTE5NjEwMCAtIDEuODQ3NzU5MDY1KTsKKwk7IHRtcDMgPSB6MiAqICgwLjU0MTE5NjEwMCArIDAuNzY1MzY2ODY1KSArIHozICogMC41NDExOTYxMDA7CisKKwltb3ZxICAgICAgbW00LG1tMQkJOyBtbTE9aW4yPXoyCisJbW92cSAgICAgIG1tNSxtbTEKKwlwdW5wY2tsd2QgbW00LG1tMwkJOyBtbTM9aW42PXozCisJcHVucGNraHdkIG1tNSxtbTMKKwltb3ZxICAgICAgbW0xLG1tNAorCW1vdnEgICAgICBtbTMsbW01CisJcG1hZGR3ZCAgIG1tNCxbR09UT0ZGKGVieCxQV19GMTMwX0YwNTQpXQk7IG1tND10bXAzTAorCXBtYWRkd2QgICBtbTUsW0dPVE9GRihlYngsUFdfRjEzMF9GMDU0KV0JOyBtbTU9dG1wM0gKKwlwbWFkZHdkICAgbW0xLFtHT1RPRkYoZWJ4LFBXX0YwNTRfTUYxMzApXQk7IG1tMT10bXAyTAorCXBtYWRkd2QgICBtbTMsW0dPVE9GRihlYngsUFdfRjA1NF9NRjEzMCldCTsgbW0zPXRtcDJICisKKwltb3ZxICAgICAgbW02LG1tMAorCXBhZGR3ICAgICBtbTAsbW0yCQk7IG1tMD1pbjAraW40CisJcHN1YncgICAgIG1tNixtbTIJCTsgbW02PWluMC1pbjQKKworCXB4b3IgICAgICBtbTcsbW03CisJcHhvciAgICAgIG1tMixtbTIKKwlwdW5wY2tsd2QgbW03LG1tMAkJOyBtbTc9dG1wMEwKKwlwdW5wY2tod2QgbW0yLG1tMAkJOyBtbTI9dG1wMEgKKwlwc3JhZCAgICAgbW03LCgxNi1DT05TVF9CSVRTKQk7IHBzcmFkIG1tNywxNiAmIHBzbGxkIG1tNyxDT05TVF9CSVRTCisJcHNyYWQgICAgIG1tMiwoMTYtQ09OU1RfQklUUykJOyBwc3JhZCBtbTIsMTYgJiBwc2xsZCBtbTIsQ09OU1RfQklUUworCisJbW92cQltbTAsbW03CisJcGFkZGQJbW03LG1tNAkJCTsgbW03PXRtcDEwTAorCXBzdWJkCW1tMCxtbTQJCQk7IG1tMD10bXAxM0wKKwltb3ZxCW1tNCxtbTIKKwlwYWRkZAltbTIsbW01CQkJOyBtbTI9dG1wMTBICisJcHN1YmQJbW00LG1tNQkJCTsgbW00PXRtcDEzSAorCisJbW92cQlNTVdPUkQgW3drKDApXSwgbW03CTsgd2soMCk9dG1wMTBMCisJbW92cQlNTVdPUkQgW3drKDEpXSwgbW0yCTsgd2soMSk9dG1wMTBICisJbW92cQlNTVdPUkQgW3drKDIpXSwgbW0wCTsgd2soMik9dG1wMTNMCisJbW92cQlNTVdPUkQgW3drKDMpXSwgbW00CTsgd2soMyk9dG1wMTNICisKKwlweG9yICAgICAgbW01LG1tNQorCXB4b3IgICAgICBtbTcsbW03CisJcHVucGNrbHdkIG1tNSxtbTYJCTsgbW01PXRtcDFMCisJcHVucGNraHdkIG1tNyxtbTYJCTsgbW03PXRtcDFICisJcHNyYWQgICAgIG1tNSwoMTYtQ09OU1RfQklUUykJOyBwc3JhZCBtbTUsMTYgJiBwc2xsZCBtbTUsQ09OU1RfQklUUworCXBzcmFkICAgICBtbTcsKDE2LUNPTlNUX0JJVFMpCTsgcHNyYWQgbW03LDE2ICYgcHNsbGQgbW03LENPTlNUX0JJVFMKKworCW1vdnEJbW0yLG1tNQorCXBhZGRkCW1tNSxtbTEJCQk7IG1tNT10bXAxMUwKKwlwc3ViZAltbTIsbW0xCQkJOyBtbTI9dG1wMTJMCisJbW92cQltbTAsbW03CisJcGFkZGQJbW03LG1tMwkJCTsgbW03PXRtcDExSAorCXBzdWJkCW1tMCxtbTMJCQk7IG1tMD10bXAxMkgKKworCW1vdnEJTU1XT1JEIFt3ayg0KV0sIG1tNQk7IHdrKDQpPXRtcDExTAorCW1vdnEJTU1XT1JEIFt3ayg1KV0sIG1tNwk7IHdrKDUpPXRtcDExSAorCW1vdnEJTU1XT1JEIFt3ayg2KV0sIG1tMgk7IHdrKDYpPXRtcDEyTAorCW1vdnEJTU1XT1JEIFt3ayg3KV0sIG1tMAk7IHdrKDcpPXRtcDEySAorCisJOyAtLSBPZGQgcGFydAorCisJbW92cQltbTQsIE1NV09SRCBbTU1CTE9DSygxLDAsZXNpLFNJWkVPRl9KQ09FRildCisJbW92cQltbTYsIE1NV09SRCBbTU1CTE9DSygzLDAsZXNpLFNJWkVPRl9KQ09FRildCisJcG11bGx3CW1tNCwgTU1XT1JEIFtNTUJMT0NLKDEsMCxlZHgsU0laRU9GX0lTTE9XX01VTFRfVFlQRSldCisJcG11bGx3CW1tNiwgTU1XT1JEIFtNTUJMT0NLKDMsMCxlZHgsU0laRU9GX0lTTE9XX01VTFRfVFlQRSldCisJbW92cQltbTEsIE1NV09SRCBbTU1CTE9DSyg1LDAsZXNpLFNJWkVPRl9KQ09FRildCisJbW92cQltbTMsIE1NV09SRCBbTU1CTE9DSyg3LDAsZXNpLFNJWkVPRl9KQ09FRildCisJcG11bGx3CW1tMSwgTU1XT1JEIFtNTUJMT0NLKDUsMCxlZHgsU0laRU9GX0lTTE9XX01VTFRfVFlQRSldCisJcG11bGx3CW1tMywgTU1XT1JEIFtNTUJMT0NLKDcsMCxlZHgsU0laRU9GX0lTTE9XX01VTFRfVFlQRSldCisKKwltb3ZxCW1tNSxtbTYKKwltb3ZxCW1tNyxtbTQKKwlwYWRkdwltbTUsbW0zCQkJOyBtbTU9ejMKKwlwYWRkdwltbTcsbW0xCQkJOyBtbTc9ejQKKworCTsgKE9yaWdpbmFsKQorCTsgejUgPSAoejMgKyB6NCkgKiAxLjE3NTg3NTYwMjsKKwk7IHozID0gejMgKiAtMS45NjE1NzA1NjA7ICB6NCA9IHo0ICogLTAuMzkwMTgwNjQ0OworCTsgejMgKz0gejU7ICB6NCArPSB6NTsKKwk7CisJOyAoVGhpcyBpbXBsZW1lbnRhdGlvbikKKwk7IHozID0gejMgKiAoMS4xNzU4NzU2MDIgLSAxLjk2MTU3MDU2MCkgKyB6NCAqIDEuMTc1ODc1NjAyOworCTsgejQgPSB6MyAqIDEuMTc1ODc1NjAyICsgejQgKiAoMS4xNzU4NzU2MDIgLSAwLjM5MDE4MDY0NCk7CisKKwltb3ZxICAgICAgbW0yLG1tNQorCW1vdnEgICAgICBtbTAsbW01CisJcHVucGNrbHdkIG1tMixtbTcKKwlwdW5wY2tod2QgbW0wLG1tNworCW1vdnEgICAgICBtbTUsbW0yCisJbW92cSAgICAgIG1tNyxtbTAKKwlwbWFkZHdkICAgbW0yLFtHT1RPRkYoZWJ4LFBXX01GMDc4X0YxMTcpXQk7IG1tMj16M0wKKwlwbWFkZHdkICAgbW0wLFtHT1RPRkYoZWJ4LFBXX01GMDc4X0YxMTcpXQk7IG1tMD16M0gKKwlwbWFkZHdkICAgbW01LFtHT1RPRkYoZWJ4LFBXX0YxMTdfRjA3OCldCTsgbW01PXo0TAorCXBtYWRkd2QgICBtbTcsW0dPVE9GRihlYngsUFdfRjExN19GMDc4KV0JOyBtbTc9ejRICisKKwltb3ZxCU1NV09SRCBbd2soMTApXSwgbW0yCTsgd2soMTApPXozTAorCW1vdnEJTU1XT1JEIFt3aygxMSldLCBtbTAJOyB3aygxMSk9ejNICisKKwk7IChPcmlnaW5hbCkKKwk7IHoxID0gdG1wMCArIHRtcDM7ICB6MiA9IHRtcDEgKyB0bXAyOworCTsgdG1wMCA9IHRtcDAgKiAwLjI5ODYzMTMzNjsgIHRtcDEgPSB0bXAxICogMi4wNTMxMTk4Njk7CisJOyB0bXAyID0gdG1wMiAqIDMuMDcyNzExMDI2OyAgdG1wMyA9IHRtcDMgKiAxLjUwMTMyMTExMDsKKwk7IHoxID0gejEgKiAtMC44OTk5NzYyMjM7ICB6MiA9IHoyICogLTIuNTYyOTE1NDQ3OworCTsgdG1wMCArPSB6MSArIHozOyAgdG1wMSArPSB6MiArIHo0OworCTsgdG1wMiArPSB6MiArIHozOyAgdG1wMyArPSB6MSArIHo0OworCTsKKwk7IChUaGlzIGltcGxlbWVudGF0aW9uKQorCTsgdG1wMCA9IHRtcDAgKiAoMC4yOTg2MzEzMzYgLSAwLjg5OTk3NjIyMykgKyB0bXAzICogLTAuODk5OTc2MjIzOworCTsgdG1wMSA9IHRtcDEgKiAoMi4wNTMxMTk4NjkgLSAyLjU2MjkxNTQ0NykgKyB0bXAyICogLTIuNTYyOTE1NDQ3OworCTsgdG1wMiA9IHRtcDEgKiAtMi41NjI5MTU0NDcgKyB0bXAyICogKDMuMDcyNzExMDI2IC0gMi41NjI5MTU0NDcpOworCTsgdG1wMyA9IHRtcDAgKiAtMC44OTk5NzYyMjMgKyB0bXAzICogKDEuNTAxMzIxMTEwIC0gMC44OTk5NzYyMjMpOworCTsgdG1wMCArPSB6MzsgIHRtcDEgKz0gejQ7CisJOyB0bXAyICs9IHozOyAgdG1wMyArPSB6NDsKKworCW1vdnEgICAgICBtbTIsbW0zCisJbW92cSAgICAgIG1tMCxtbTMKKwlwdW5wY2tsd2QgbW0yLG1tNAorCXB1bnBja2h3ZCBtbTAsbW00CisJbW92cSAgICAgIG1tMyxtbTIKKwltb3ZxICAgICAgbW00LG1tMAorCXBtYWRkd2QgICBtbTIsW0dPVE9GRihlYngsUFdfTUYwNjBfTUYwODkpXQk7IG1tMj10bXAwTAorCXBtYWRkd2QgICBtbTAsW0dPVE9GRihlYngsUFdfTUYwNjBfTUYwODkpXQk7IG1tMD10bXAwSAorCXBtYWRkd2QgICBtbTMsW0dPVE9GRihlYngsUFdfTUYwODlfRjA2MCldCTsgbW0zPXRtcDNMCisJcG1hZGR3ZCAgIG1tNCxbR09UT0ZGKGVieCxQV19NRjA4OV9GMDYwKV0JOyBtbTQ9dG1wM0gKKworCXBhZGRkCW1tMiwgTU1XT1JEIFt3aygxMCldCTsgbW0yPXRtcDBMCisJcGFkZGQJbW0wLCBNTVdPUkQgW3drKDExKV0JOyBtbTA9dG1wMEgKKwlwYWRkZAltbTMsbW01CQkJOyBtbTM9dG1wM0wKKwlwYWRkZAltbTQsbW03CQkJOyBtbTQ9dG1wM0gKKworCW1vdnEJTU1XT1JEIFt3ayg4KV0sIG1tMgk7IHdrKDgpPXRtcDBMCisJbW92cQlNTVdPUkQgW3drKDkpXSwgbW0wCTsgd2soOSk9dG1wMEgKKworCW1vdnEgICAgICBtbTIsbW0xCisJbW92cSAgICAgIG1tMCxtbTEKKwlwdW5wY2tsd2QgbW0yLG1tNgorCXB1bnBja2h3ZCBtbTAsbW02CisJbW92cSAgICAgIG1tMSxtbTIKKwltb3ZxICAgICAgbW02LG1tMAorCXBtYWRkd2QgICBtbTIsW0dPVE9GRihlYngsUFdfTUYwNTBfTUYyNTYpXQk7IG1tMj10bXAxTAorCXBtYWRkd2QgICBtbTAsW0dPVE9GRihlYngsUFdfTUYwNTBfTUYyNTYpXQk7IG1tMD10bXAxSAorCXBtYWRkd2QgICBtbTEsW0dPVE9GRihlYngsUFdfTUYyNTZfRjA1MCldCTsgbW0xPXRtcDJMCisJcG1hZGR3ZCAgIG1tNixbR09UT0ZGKGVieCxQV19NRjI1Nl9GMDUwKV0JOyBtbTY9dG1wMkgKKworCXBhZGRkCW1tMixtbTUJCQk7IG1tMj10bXAxTAorCXBhZGRkCW1tMCxtbTcJCQk7IG1tMD10bXAxSAorCXBhZGRkCW1tMSwgTU1XT1JEIFt3aygxMCldCTsgbW0xPXRtcDJMCisJcGFkZGQJbW02LCBNTVdPUkQgW3drKDExKV0JOyBtbTY9dG1wMkgKKworCW1vdnEJTU1XT1JEIFt3aygxMCldLCBtbTIJOyB3aygxMCk9dG1wMUwKKwltb3ZxCU1NV09SRCBbd2soMTEpXSwgbW0wCTsgd2soMTEpPXRtcDFICisKKwk7IC0tIEZpbmFsIG91dHB1dCBzdGFnZQorCisJbW92cQltbTUsIE1NV09SRCBbd2soMCldCTsgbW01PXRtcDEwTAorCW1vdnEJbW03LCBNTVdPUkQgW3drKDEpXQk7IG1tNz10bXAxMEgKKworCW1vdnEJbW0yLG1tNQorCW1vdnEJbW0wLG1tNworCXBhZGRkCW1tNSxtbTMJCQk7IG1tNT1kYXRhMEwKKwlwYWRkZAltbTcsbW00CQkJOyBtbTc9ZGF0YTBICisJcHN1YmQJbW0yLG1tMwkJCTsgbW0yPWRhdGE3TAorCXBzdWJkCW1tMCxtbTQJCQk7IG1tMD1kYXRhN0gKKworCW1vdnEJbW0zLFtHT1RPRkYoZWJ4LFBEX0RFU0NBTEVfUDEpXQk7IG1tMz1bUERfREVTQ0FMRV9QMV0KKworCXBhZGRkCW1tNSxtbTMKKwlwYWRkZAltbTcsbW0zCisJcHNyYWQJbW01LERFU0NBTEVfUDEKKwlwc3JhZAltbTcsREVTQ0FMRV9QMQorCXBhZGRkCW1tMixtbTMKKwlwYWRkZAltbTAsbW0zCisJcHNyYWQJbW0yLERFU0NBTEVfUDEKKwlwc3JhZAltbTAsREVTQ0FMRV9QMQorCisJcGFja3NzZHcgIG1tNSxtbTcJCTsgbW01PWRhdGEwPSgwMCAwMSAwMiAwMykKKwlwYWNrc3NkdyAgbW0yLG1tMAkJOyBtbTI9ZGF0YTc9KDcwIDcxIDcyIDczKQorCisJbW92cQltbTQsIE1NV09SRCBbd2soNCldCTsgbW00PXRtcDExTAorCW1vdnEJbW0zLCBNTVdPUkQgW3drKDUpXQk7IG1tMz10bXAxMUgKKworCW1vdnEJbW03LG1tNAorCW1vdnEJbW0wLG1tMworCXBhZGRkCW1tNCxtbTEJCQk7IG1tND1kYXRhMUwKKwlwYWRkZAltbTMsbW02CQkJOyBtbTM9ZGF0YTFICisJcHN1YmQJbW03LG1tMQkJCTsgbW03PWRhdGE2TAorCXBzdWJkCW1tMCxtbTYJCQk7IG1tMD1kYXRhNkgKKworCW1vdnEJbW0xLFtHT1RPRkYoZWJ4LFBEX0RFU0NBTEVfUDEpXQk7IG1tMT1bUERfREVTQ0FMRV9QMV0KKworCXBhZGRkCW1tNCxtbTEKKwlwYWRkZAltbTMsbW0xCisJcHNyYWQJbW00LERFU0NBTEVfUDEKKwlwc3JhZAltbTMsREVTQ0FMRV9QMQorCXBhZGRkCW1tNyxtbTEKKwlwYWRkZAltbTAsbW0xCisJcHNyYWQJbW03LERFU0NBTEVfUDEKKwlwc3JhZAltbTAsREVTQ0FMRV9QMQorCisJcGFja3NzZHcgIG1tNCxtbTMJCTsgbW00PWRhdGExPSgxMCAxMSAxMiAxMykKKwlwYWNrc3NkdyAgbW03LG1tMAkJOyBtbTc9ZGF0YTY9KDYwIDYxIDYyIDYzKQorCisJbW92cSAgICAgIG1tNixtbTUJCTsgdHJhbnNwb3NlIGNvZWZmaWNpZW50cyhwaGFzZSAxKQorCXB1bnBja2x3ZCBtbTUsbW00CQk7IG1tNT0oMDAgMTAgMDEgMTEpCisJcHVucGNraHdkIG1tNixtbTQJCTsgbW02PSgwMiAxMiAwMyAxMykKKwltb3ZxICAgICAgbW0xLG1tNwkJOyB0cmFuc3Bvc2UgY29lZmZpY2llbnRzKHBoYXNlIDEpCisJcHVucGNrbHdkIG1tNyxtbTIJCTsgbW03PSg2MCA3MCA2MSA3MSkKKwlwdW5wY2tod2QgbW0xLG1tMgkJOyBtbTE9KDYyIDcyIDYzIDczKQorCisJbW92cQltbTMsIE1NV09SRCBbd2soNildCTsgbW0zPXRtcDEyTAorCW1vdnEJbW0wLCBNTVdPUkQgW3drKDcpXQk7IG1tMD10bXAxMkgKKwltb3ZxCW1tNCwgTU1XT1JEIFt3aygxMCldCTsgbW00PXRtcDFMCisJbW92cQltbTIsIE1NV09SRCBbd2soMTEpXQk7IG1tMj10bXAxSAorCisJbW92cQlNTVdPUkQgW3drKDApXSwgbW01CTsgd2soMCk9KDAwIDEwIDAxIDExKQorCW1vdnEJTU1XT1JEIFt3aygxKV0sIG1tNgk7IHdrKDEpPSgwMiAxMiAwMyAxMykKKwltb3ZxCU1NV09SRCBbd2soNCldLCBtbTcJOyB3ayg0KT0oNjAgNzAgNjEgNzEpCisJbW92cQlNTVdPUkQgW3drKDUpXSwgbW0xCTsgd2soNSk9KDYyIDcyIDYzIDczKQorCisJbW92cQltbTUsbW0zCisJbW92cQltbTYsbW0wCisJcGFkZGQJbW0zLG1tNAkJCTsgbW0zPWRhdGEyTAorCXBhZGRkCW1tMCxtbTIJCQk7IG1tMD1kYXRhMkgKKwlwc3ViZAltbTUsbW00CQkJOyBtbTU9ZGF0YTVMCisJcHN1YmQJbW02LG1tMgkJCTsgbW02PWRhdGE1SAorCisJbW92cQltbTcsW0dPVE9GRihlYngsUERfREVTQ0FMRV9QMSldCTsgbW03PVtQRF9ERVNDQUxFX1AxXQorCisJcGFkZGQJbW0zLG1tNworCXBhZGRkCW1tMCxtbTcKKwlwc3JhZAltbTMsREVTQ0FMRV9QMQorCXBzcmFkCW1tMCxERVNDQUxFX1AxCisJcGFkZGQJbW01LG1tNworCXBhZGRkCW1tNixtbTcKKwlwc3JhZAltbTUsREVTQ0FMRV9QMQorCXBzcmFkCW1tNixERVNDQUxFX1AxCisKKwlwYWNrc3NkdyAgbW0zLG1tMAkJOyBtbTM9ZGF0YTI9KDIwIDIxIDIyIDIzKQorCXBhY2tzc2R3ICBtbTUsbW02CQk7IG1tNT1kYXRhNT0oNTAgNTEgNTIgNTMpCisKKwltb3ZxCW1tMSwgTU1XT1JEIFt3aygyKV0JOyBtbTE9dG1wMTNMCisJbW92cQltbTQsIE1NV09SRCBbd2soMyldCTsgbW00PXRtcDEzSAorCW1vdnEJbW0yLCBNTVdPUkQgW3drKDgpXQk7IG1tMj10bXAwTAorCW1vdnEJbW03LCBNTVdPUkQgW3drKDkpXQk7IG1tNz10bXAwSAorCisJbW92cQltbTAsbW0xCisJbW92cQltbTYsbW00CisJcGFkZGQJbW0xLG1tMgkJCTsgbW0xPWRhdGEzTAorCXBhZGRkCW1tNCxtbTcJCQk7IG1tND1kYXRhM0gKKwlwc3ViZAltbTAsbW0yCQkJOyBtbTA9ZGF0YTRMCisJcHN1YmQJbW02LG1tNwkJCTsgbW02PWRhdGE0SAorCisJbW92cQltbTIsW0dPVE9GRihlYngsUERfREVTQ0FMRV9QMSldCTsgbW0yPVtQRF9ERVNDQUxFX1AxXQorCisJcGFkZGQJbW0xLG1tMgorCXBhZGRkCW1tNCxtbTIKKwlwc3JhZAltbTEsREVTQ0FMRV9QMQorCXBzcmFkCW1tNCxERVNDQUxFX1AxCisJcGFkZGQJbW0wLG1tMgorCXBhZGRkCW1tNixtbTIKKwlwc3JhZAltbTAsREVTQ0FMRV9QMQorCXBzcmFkCW1tNixERVNDQUxFX1AxCisKKwlwYWNrc3NkdyAgbW0xLG1tNAkJOyBtbTE9ZGF0YTM9KDMwIDMxIDMyIDMzKQorCXBhY2tzc2R3ICBtbTAsbW02CQk7IG1tMD1kYXRhND0oNDAgNDEgNDIgNDMpCisKKwltb3ZxCW1tNywgTU1XT1JEIFt3aygwKV0JOyBtbTc9KDAwIDEwIDAxIDExKQorCW1vdnEJbW0yLCBNTVdPUkQgW3drKDEpXQk7IG1tMj0oMDIgMTIgMDMgMTMpCisKKwltb3ZxICAgICAgbW00LG1tMwkJOyB0cmFuc3Bvc2UgY29lZmZpY2llbnRzKHBoYXNlIDEpCisJcHVucGNrbHdkIG1tMyxtbTEJCTsgbW0zPSgyMCAzMCAyMSAzMSkKKwlwdW5wY2tod2QgbW00LG1tMQkJOyBtbTQ9KDIyIDMyIDIzIDMzKQorCW1vdnEgICAgICBtbTYsbW0wCQk7IHRyYW5zcG9zZSBjb2VmZmljaWVudHMocGhhc2UgMSkKKwlwdW5wY2tsd2QgbW0wLG1tNQkJOyBtbTA9KDQwIDUwIDQxIDUxKQorCXB1bnBja2h3ZCBtbTYsbW01CQk7IG1tNj0oNDIgNTIgNDMgNTMpCisKKwltb3ZxICAgICAgbW0xLG1tNwkJOyB0cmFuc3Bvc2UgY29lZmZpY2llbnRzKHBoYXNlIDIpCisJcHVucGNrbGRxIG1tNyxtbTMJCTsgbW03PSgwMCAxMCAyMCAzMCkKKwlwdW5wY2toZHEgbW0xLG1tMwkJOyBtbTE9KDAxIDExIDIxIDMxKQorCW1vdnEgICAgICBtbTUsbW0yCQk7IHRyYW5zcG9zZSBjb2VmZmljaWVudHMocGhhc2UgMikKKwlwdW5wY2tsZHEgbW0yLG1tNAkJOyBtbTI9KDAyIDEyIDIyIDMyKQorCXB1bnBja2hkcSBtbTUsbW00CQk7IG1tNT0oMDMgMTMgMjMgMzMpCisKKwltb3ZxCW1tMywgTU1XT1JEIFt3ayg0KV0JOyBtbTM9KDYwIDcwIDYxIDcxKQorCW1vdnEJbW00LCBNTVdPUkQgW3drKDUpXQk7IG1tND0oNjIgNzIgNjMgNzMpCisKKwltb3ZxCU1NV09SRCBbTU1CTE9DSygwLDAsZWRpLFNJWkVPRl9KQ09FRildLCBtbTcKKwltb3ZxCU1NV09SRCBbTU1CTE9DSygxLDAsZWRpLFNJWkVPRl9KQ09FRildLCBtbTEKKwltb3ZxCU1NV09SRCBbTU1CTE9DSygyLDAsZWRpLFNJWkVPRl9KQ09FRildLCBtbTIKKwltb3ZxCU1NV09SRCBbTU1CTE9DSygzLDAsZWRpLFNJWkVPRl9KQ09FRildLCBtbTUKKworCW1vdnEgICAgICBtbTcsbW0wCQk7IHRyYW5zcG9zZSBjb2VmZmljaWVudHMocGhhc2UgMikKKwlwdW5wY2tsZHEgbW0wLG1tMwkJOyBtbTA9KDQwIDUwIDYwIDcwKQorCXB1bnBja2hkcSBtbTcsbW0zCQk7IG1tNz0oNDEgNTEgNjEgNzEpCisJbW92cSAgICAgIG1tMSxtbTYJCTsgdHJhbnNwb3NlIGNvZWZmaWNpZW50cyhwaGFzZSAyKQorCXB1bnBja2xkcSBtbTYsbW00CQk7IG1tNj0oNDIgNTIgNjIgNzIpCisJcHVucGNraGRxIG1tMSxtbTQJCTsgbW0xPSg0MyA1MyA2MyA3MykKKworCW1vdnEJTU1XT1JEIFtNTUJMT0NLKDAsMSxlZGksU0laRU9GX0pDT0VGKV0sIG1tMAorCW1vdnEJTU1XT1JEIFtNTUJMT0NLKDEsMSxlZGksU0laRU9GX0pDT0VGKV0sIG1tNworCW1vdnEJTU1XT1JEIFtNTUJMT0NLKDIsMSxlZGksU0laRU9GX0pDT0VGKV0sIG1tNgorCW1vdnEJTU1XT1JEIFtNTUJMT0NLKDMsMSxlZGksU0laRU9GX0pDT0VGKV0sIG1tMQorCisubmV4dGNvbHVtbjoKKwlhZGQJZXNpLCBieXRlIDQqU0laRU9GX0pDT0VGCQk7IGNvZWZfYmxvY2sKKwlhZGQJZWR4LCBieXRlIDQqU0laRU9GX0lTTE9XX01VTFRfVFlQRQk7IHF1YW50cHRyCisJYWRkCWVkaSwgYnl0ZSA0KkRDVFNJWkUqU0laRU9GX0pDT0VGCTsgd3NwdHIKKwlkZWMJZWN4CQkJCQk7IGN0cgorCWpuegluZWFyIC5jb2x1bW5sb29wCisKKwk7IC0tLS0gUGFzcyAyOiBwcm9jZXNzIHJvd3MgZnJvbSB3b3JrIGFycmF5LCBzdG9yZSBpbnRvIG91dHB1dCBhcnJheS4KKworCW1vdgllYXgsIFtvcmlnaW5hbF9lYnBdCisJbGVhCWVzaSwgW3dvcmtzcGFjZV0JCQk7IEpDT0VGICogd3NwdHIKKwltb3YJZWRpLCBKU0FNUEFSUkFZIFtvdXRwdXRfYnVmKGVheCldCTsgKEpTQU1QUk9XICopCisJbW92CWVheCwgSkRJTUVOU0lPTiBbb3V0cHV0X2NvbChlYXgpXQorCW1vdgllY3gsIERDVFNJWkUvNAkJCQk7IGN0cgorCWFsaWdueAkxNiw3Cisucm93bG9vcDoKKworCTsgLS0gRXZlbiBwYXJ0CisKKwltb3ZxCW1tMCwgTU1XT1JEIFtNTUJMT0NLKDAsMCxlc2ksU0laRU9GX0pDT0VGKV0KKwltb3ZxCW1tMSwgTU1XT1JEIFtNTUJMT0NLKDIsMCxlc2ksU0laRU9GX0pDT0VGKV0KKwltb3ZxCW1tMiwgTU1XT1JEIFtNTUJMT0NLKDQsMCxlc2ksU0laRU9GX0pDT0VGKV0KKwltb3ZxCW1tMywgTU1XT1JEIFtNTUJMT0NLKDYsMCxlc2ksU0laRU9GX0pDT0VGKV0KKworCTsgKE9yaWdpbmFsKQorCTsgejEgPSAoejIgKyB6MykgKiAwLjU0MTE5NjEwMDsKKwk7IHRtcDIgPSB6MSArIHozICogLTEuODQ3NzU5MDY1OworCTsgdG1wMyA9IHoxICsgejIgKiAwLjc2NTM2Njg2NTsKKwk7CisJOyAoVGhpcyBpbXBsZW1lbnRhdGlvbikKKwk7IHRtcDIgPSB6MiAqIDAuNTQxMTk2MTAwICsgejMgKiAoMC41NDExOTYxMDAgLSAxLjg0Nzc1OTA2NSk7CisJOyB0bXAzID0gejIgKiAoMC41NDExOTYxMDAgKyAwLjc2NTM2Njg2NSkgKyB6MyAqIDAuNTQxMTk2MTAwOworCisJbW92cSAgICAgIG1tNCxtbTEJCTsgbW0xPWluMj16MgorCW1vdnEgICAgICBtbTUsbW0xCisJcHVucGNrbHdkIG1tNCxtbTMJCTsgbW0zPWluNj16MworCXB1bnBja2h3ZCBtbTUsbW0zCisJbW92cSAgICAgIG1tMSxtbTQKKwltb3ZxICAgICAgbW0zLG1tNQorCXBtYWRkd2QgICBtbTQsW0dPVE9GRihlYngsUFdfRjEzMF9GMDU0KV0JOyBtbTQ9dG1wM0wKKwlwbWFkZHdkICAgbW01LFtHT1RPRkYoZWJ4LFBXX0YxMzBfRjA1NCldCTsgbW01PXRtcDNICisJcG1hZGR3ZCAgIG1tMSxbR09UT0ZGKGVieCxQV19GMDU0X01GMTMwKV0JOyBtbTE9dG1wMkwKKwlwbWFkZHdkICAgbW0zLFtHT1RPRkYoZWJ4LFBXX0YwNTRfTUYxMzApXQk7IG1tMz10bXAySAorCisJbW92cSAgICAgIG1tNixtbTAKKwlwYWRkdyAgICAgbW0wLG1tMgkJOyBtbTA9aW4wK2luNAorCXBzdWJ3ICAgICBtbTYsbW0yCQk7IG1tNj1pbjAtaW40CisKKwlweG9yICAgICAgbW03LG1tNworCXB4b3IgICAgICBtbTIsbW0yCisJcHVucGNrbHdkIG1tNyxtbTAJCTsgbW03PXRtcDBMCisJcHVucGNraHdkIG1tMixtbTAJCTsgbW0yPXRtcDBICisJcHNyYWQgICAgIG1tNywoMTYtQ09OU1RfQklUUykJOyBwc3JhZCBtbTcsMTYgJiBwc2xsZCBtbTcsQ09OU1RfQklUUworCXBzcmFkICAgICBtbTIsKDE2LUNPTlNUX0JJVFMpCTsgcHNyYWQgbW0yLDE2ICYgcHNsbGQgbW0yLENPTlNUX0JJVFMKKworCW1vdnEJbW0wLG1tNworCXBhZGRkCW1tNyxtbTQJCQk7IG1tNz10bXAxMEwKKwlwc3ViZAltbTAsbW00CQkJOyBtbTA9dG1wMTNMCisJbW92cQltbTQsbW0yCisJcGFkZGQJbW0yLG1tNQkJCTsgbW0yPXRtcDEwSAorCXBzdWJkCW1tNCxtbTUJCQk7IG1tND10bXAxM0gKKworCW1vdnEJTU1XT1JEIFt3aygwKV0sIG1tNwk7IHdrKDApPXRtcDEwTAorCW1vdnEJTU1XT1JEIFt3aygxKV0sIG1tMgk7IHdrKDEpPXRtcDEwSAorCW1vdnEJTU1XT1JEIFt3aygyKV0sIG1tMAk7IHdrKDIpPXRtcDEzTAorCW1vdnEJTU1XT1JEIFt3aygzKV0sIG1tNAk7IHdrKDMpPXRtcDEzSAorCisJcHhvciAgICAgIG1tNSxtbTUKKwlweG9yICAgICAgbW03LG1tNworCXB1bnBja2x3ZCBtbTUsbW02CQk7IG1tNT10bXAxTAorCXB1bnBja2h3ZCBtbTcsbW02CQk7IG1tNz10bXAxSAorCXBzcmFkICAgICBtbTUsKDE2LUNPTlNUX0JJVFMpCTsgcHNyYWQgbW01LDE2ICYgcHNsbGQgbW01LENPTlNUX0JJVFMKKwlwc3JhZCAgICAgbW03LCgxNi1DT05TVF9CSVRTKQk7IHBzcmFkIG1tNywxNiAmIHBzbGxkIG1tNyxDT05TVF9CSVRTCisKKwltb3ZxCW1tMixtbTUKKwlwYWRkZAltbTUsbW0xCQkJOyBtbTU9dG1wMTFMCisJcHN1YmQJbW0yLG1tMQkJCTsgbW0yPXRtcDEyTAorCW1vdnEJbW0wLG1tNworCXBhZGRkCW1tNyxtbTMJCQk7IG1tNz10bXAxMUgKKwlwc3ViZAltbTAsbW0zCQkJOyBtbTA9dG1wMTJICisKKwltb3ZxCU1NV09SRCBbd2soNCldLCBtbTUJOyB3ayg0KT10bXAxMUwKKwltb3ZxCU1NV09SRCBbd2soNSldLCBtbTcJOyB3ayg1KT10bXAxMUgKKwltb3ZxCU1NV09SRCBbd2soNildLCBtbTIJOyB3ayg2KT10bXAxMkwKKwltb3ZxCU1NV09SRCBbd2soNyldLCBtbTAJOyB3ayg3KT10bXAxMkgKKworCTsgLS0gT2RkIHBhcnQKKworCW1vdnEJbW00LCBNTVdPUkQgW01NQkxPQ0soMSwwLGVzaSxTSVpFT0ZfSkNPRUYpXQorCW1vdnEJbW02LCBNTVdPUkQgW01NQkxPQ0soMywwLGVzaSxTSVpFT0ZfSkNPRUYpXQorCW1vdnEJbW0xLCBNTVdPUkQgW01NQkxPQ0soNSwwLGVzaSxTSVpFT0ZfSkNPRUYpXQorCW1vdnEJbW0zLCBNTVdPUkQgW01NQkxPQ0soNywwLGVzaSxTSVpFT0ZfSkNPRUYpXQorCisJbW92cQltbTUsbW02CisJbW92cQltbTcsbW00CisJcGFkZHcJbW01LG1tMwkJCTsgbW01PXozCisJcGFkZHcJbW03LG1tMQkJCTsgbW03PXo0CisKKwk7IChPcmlnaW5hbCkKKwk7IHo1ID0gKHozICsgejQpICogMS4xNzU4NzU2MDI7CisJOyB6MyA9IHozICogLTEuOTYxNTcwNTYwOyAgejQgPSB6NCAqIC0wLjM5MDE4MDY0NDsKKwk7IHozICs9IHo1OyAgejQgKz0gejU7CisJOworCTsgKFRoaXMgaW1wbGVtZW50YXRpb24pCisJOyB6MyA9IHozICogKDEuMTc1ODc1NjAyIC0gMS45NjE1NzA1NjApICsgejQgKiAxLjE3NTg3NTYwMjsKKwk7IHo0ID0gejMgKiAxLjE3NTg3NTYwMiArIHo0ICogKDEuMTc1ODc1NjAyIC0gMC4zOTAxODA2NDQpOworCisJbW92cSAgICAgIG1tMixtbTUKKwltb3ZxICAgICAgbW0wLG1tNQorCXB1bnBja2x3ZCBtbTIsbW03CisJcHVucGNraHdkIG1tMCxtbTcKKwltb3ZxICAgICAgbW01LG1tMgorCW1vdnEgICAgICBtbTcsbW0wCisJcG1hZGR3ZCAgIG1tMixbR09UT0ZGKGVieCxQV19NRjA3OF9GMTE3KV0JOyBtbTI9ejNMCisJcG1hZGR3ZCAgIG1tMCxbR09UT0ZGKGVieCxQV19NRjA3OF9GMTE3KV0JOyBtbTA9ejNICisJcG1hZGR3ZCAgIG1tNSxbR09UT0ZGKGVieCxQV19GMTE3X0YwNzgpXQk7IG1tNT16NEwKKwlwbWFkZHdkICAgbW03LFtHT1RPRkYoZWJ4LFBXX0YxMTdfRjA3OCldCTsgbW03PXo0SAorCisJbW92cQlNTVdPUkQgW3drKDEwKV0sIG1tMgk7IHdrKDEwKT16M0wKKwltb3ZxCU1NV09SRCBbd2soMTEpXSwgbW0wCTsgd2soMTEpPXozSAorCisJOyAoT3JpZ2luYWwpCisJOyB6MSA9IHRtcDAgKyB0bXAzOyAgejIgPSB0bXAxICsgdG1wMjsKKwk7IHRtcDAgPSB0bXAwICogMC4yOTg2MzEzMzY7ICB0bXAxID0gdG1wMSAqIDIuMDUzMTE5ODY5OworCTsgdG1wMiA9IHRtcDIgKiAzLjA3MjcxMTAyNjsgIHRtcDMgPSB0bXAzICogMS41MDEzMjExMTA7CisJOyB6MSA9IHoxICogLTAuODk5OTc2MjIzOyAgejIgPSB6MiAqIC0yLjU2MjkxNTQ0NzsKKwk7IHRtcDAgKz0gejEgKyB6MzsgIHRtcDEgKz0gejIgKyB6NDsKKwk7IHRtcDIgKz0gejIgKyB6MzsgIHRtcDMgKz0gejEgKyB6NDsKKwk7CisJOyAoVGhpcyBpbXBsZW1lbnRhdGlvbikKKwk7IHRtcDAgPSB0bXAwICogKDAuMjk4NjMxMzM2IC0gMC44OTk5NzYyMjMpICsgdG1wMyAqIC0wLjg5OTk3NjIyMzsKKwk7IHRtcDEgPSB0bXAxICogKDIuMDUzMTE5ODY5IC0gMi41NjI5MTU0NDcpICsgdG1wMiAqIC0yLjU2MjkxNTQ0NzsKKwk7IHRtcDIgPSB0bXAxICogLTIuNTYyOTE1NDQ3ICsgdG1wMiAqICgzLjA3MjcxMTAyNiAtIDIuNTYyOTE1NDQ3KTsKKwk7IHRtcDMgPSB0bXAwICogLTAuODk5OTc2MjIzICsgdG1wMyAqICgxLjUwMTMyMTExMCAtIDAuODk5OTc2MjIzKTsKKwk7IHRtcDAgKz0gejM7ICB0bXAxICs9IHo0OworCTsgdG1wMiArPSB6MzsgIHRtcDMgKz0gejQ7CisKKwltb3ZxICAgICAgbW0yLG1tMworCW1vdnEgICAgICBtbTAsbW0zCisJcHVucGNrbHdkIG1tMixtbTQKKwlwdW5wY2tod2QgbW0wLG1tNAorCW1vdnEgICAgICBtbTMsbW0yCisJbW92cSAgICAgIG1tNCxtbTAKKwlwbWFkZHdkICAgbW0yLFtHT1RPRkYoZWJ4LFBXX01GMDYwX01GMDg5KV0JOyBtbTI9dG1wMEwKKwlwbWFkZHdkICAgbW0wLFtHT1RPRkYoZWJ4LFBXX01GMDYwX01GMDg5KV0JOyBtbTA9dG1wMEgKKwlwbWFkZHdkICAgbW0zLFtHT1RPRkYoZWJ4LFBXX01GMDg5X0YwNjApXQk7IG1tMz10bXAzTAorCXBtYWRkd2QgICBtbTQsW0dPVE9GRihlYngsUFdfTUYwODlfRjA2MCldCTsgbW00PXRtcDNICisKKwlwYWRkZAltbTIsIE1NV09SRCBbd2soMTApXQk7IG1tMj10bXAwTAorCXBhZGRkCW1tMCwgTU1XT1JEIFt3aygxMSldCTsgbW0wPXRtcDBICisJcGFkZGQJbW0zLG1tNQkJCTsgbW0zPXRtcDNMCisJcGFkZGQJbW00LG1tNwkJCTsgbW00PXRtcDNICisKKwltb3ZxCU1NV09SRCBbd2soOCldLCBtbTIJOyB3ayg4KT10bXAwTAorCW1vdnEJTU1XT1JEIFt3ayg5KV0sIG1tMAk7IHdrKDkpPXRtcDBICisKKwltb3ZxICAgICAgbW0yLG1tMQorCW1vdnEgICAgICBtbTAsbW0xCisJcHVucGNrbHdkIG1tMixtbTYKKwlwdW5wY2tod2QgbW0wLG1tNgorCW1vdnEgICAgICBtbTEsbW0yCisJbW92cSAgICAgIG1tNixtbTAKKwlwbWFkZHdkICAgbW0yLFtHT1RPRkYoZWJ4LFBXX01GMDUwX01GMjU2KV0JOyBtbTI9dG1wMUwKKwlwbWFkZHdkICAgbW0wLFtHT1RPRkYoZWJ4LFBXX01GMDUwX01GMjU2KV0JOyBtbTA9dG1wMUgKKwlwbWFkZHdkICAgbW0xLFtHT1RPRkYoZWJ4LFBXX01GMjU2X0YwNTApXQk7IG1tMT10bXAyTAorCXBtYWRkd2QgICBtbTYsW0dPVE9GRihlYngsUFdfTUYyNTZfRjA1MCldCTsgbW02PXRtcDJICisKKwlwYWRkZAltbTIsbW01CQkJOyBtbTI9dG1wMUwKKwlwYWRkZAltbTAsbW03CQkJOyBtbTA9dG1wMUgKKwlwYWRkZAltbTEsIE1NV09SRCBbd2soMTApXQk7IG1tMT10bXAyTAorCXBhZGRkCW1tNiwgTU1XT1JEIFt3aygxMSldCTsgbW02PXRtcDJICisKKwltb3ZxCU1NV09SRCBbd2soMTApXSwgbW0yCTsgd2soMTApPXRtcDFMCisJbW92cQlNTVdPUkQgW3drKDExKV0sIG1tMAk7IHdrKDExKT10bXAxSAorCisJOyAtLSBGaW5hbCBvdXRwdXQgc3RhZ2UKKworCW1vdnEJbW01LCBNTVdPUkQgW3drKDApXQk7IG1tNT10bXAxMEwKKwltb3ZxCW1tNywgTU1XT1JEIFt3aygxKV0JOyBtbTc9dG1wMTBICisKKwltb3ZxCW1tMixtbTUKKwltb3ZxCW1tMCxtbTcKKwlwYWRkZAltbTUsbW0zCQkJOyBtbTU9ZGF0YTBMCisJcGFkZGQJbW03LG1tNAkJCTsgbW03PWRhdGEwSAorCXBzdWJkCW1tMixtbTMJCQk7IG1tMj1kYXRhN0wKKwlwc3ViZAltbTAsbW00CQkJOyBtbTA9ZGF0YTdICisKKwltb3ZxCW1tMyxbR09UT0ZGKGVieCxQRF9ERVNDQUxFX1AyKV0JOyBtbTM9W1BEX0RFU0NBTEVfUDJdCisKKwlwYWRkZAltbTUsbW0zCisJcGFkZGQJbW03LG1tMworCXBzcmFkCW1tNSxERVNDQUxFX1AyCisJcHNyYWQJbW03LERFU0NBTEVfUDIKKwlwYWRkZAltbTIsbW0zCisJcGFkZGQJbW0wLG1tMworCXBzcmFkCW1tMixERVNDQUxFX1AyCisJcHNyYWQJbW0wLERFU0NBTEVfUDIKKworCXBhY2tzc2R3ICBtbTUsbW03CQk7IG1tNT1kYXRhMD0oMDAgMTAgMjAgMzApCisJcGFja3NzZHcgIG1tMixtbTAJCTsgbW0yPWRhdGE3PSgwNyAxNyAyNyAzNykKKworCW1vdnEJbW00LCBNTVdPUkQgW3drKDQpXQk7IG1tND10bXAxMUwKKwltb3ZxCW1tMywgTU1XT1JEIFt3ayg1KV0JOyBtbTM9dG1wMTFICisKKwltb3ZxCW1tNyxtbTQKKwltb3ZxCW1tMCxtbTMKKwlwYWRkZAltbTQsbW0xCQkJOyBtbTQ9ZGF0YTFMCisJcGFkZGQJbW0zLG1tNgkJCTsgbW0zPWRhdGExSAorCXBzdWJkCW1tNyxtbTEJCQk7IG1tNz1kYXRhNkwKKwlwc3ViZAltbTAsbW02CQkJOyBtbTA9ZGF0YTZICisKKwltb3ZxCW1tMSxbR09UT0ZGKGVieCxQRF9ERVNDQUxFX1AyKV0JOyBtbTE9W1BEX0RFU0NBTEVfUDJdCisKKwlwYWRkZAltbTQsbW0xCisJcGFkZGQJbW0zLG1tMQorCXBzcmFkCW1tNCxERVNDQUxFX1AyCisJcHNyYWQJbW0zLERFU0NBTEVfUDIKKwlwYWRkZAltbTcsbW0xCisJcGFkZGQJbW0wLG1tMQorCXBzcmFkCW1tNyxERVNDQUxFX1AyCisJcHNyYWQJbW0wLERFU0NBTEVfUDIKKworCXBhY2tzc2R3ICBtbTQsbW0zCQk7IG1tND1kYXRhMT0oMDEgMTEgMjEgMzEpCisJcGFja3NzZHcgIG1tNyxtbTAJCTsgbW03PWRhdGE2PSgwNiAxNiAyNiAzNikKKworCXBhY2tzc3diICBtbTUsbW03CQk7IG1tNT0oMDAgMTAgMjAgMzAgMDYgMTYgMjYgMzYpCisJcGFja3Nzd2IgIG1tNCxtbTIJCTsgbW00PSgwMSAxMSAyMSAzMSAwNyAxNyAyNyAzNykKKworCW1vdnEJbW02LCBNTVdPUkQgW3drKDYpXQk7IG1tNj10bXAxMkwKKwltb3ZxCW1tMSwgTU1XT1JEIFt3ayg3KV0JOyBtbTE9dG1wMTJICisJbW92cQltbTMsIE1NV09SRCBbd2soMTApXQk7IG1tMz10bXAxTAorCW1vdnEJbW0wLCBNTVdPUkQgW3drKDExKV0JOyBtbTA9dG1wMUgKKworCW1vdnEJTU1XT1JEIFt3aygwKV0sIG1tNQk7IHdrKDApPSgwMCAxMCAyMCAzMCAwNiAxNiAyNiAzNikKKwltb3ZxCU1NV09SRCBbd2soMSldLCBtbTQJOyB3aygxKT0oMDEgMTEgMjEgMzEgMDcgMTcgMjcgMzcpCisKKwltb3ZxCW1tNyxtbTYKKwltb3ZxCW1tMixtbTEKKwlwYWRkZAltbTYsbW0zCQkJOyBtbTY9ZGF0YTJMCisJcGFkZGQJbW0xLG1tMAkJCTsgbW0xPWRhdGEySAorCXBzdWJkCW1tNyxtbTMJCQk7IG1tNz1kYXRhNUwKKwlwc3ViZAltbTIsbW0wCQkJOyBtbTI9ZGF0YTVICisKKwltb3ZxCW1tNSxbR09UT0ZGKGVieCxQRF9ERVNDQUxFX1AyKV0JOyBtbTU9W1BEX0RFU0NBTEVfUDJdCisKKwlwYWRkZAltbTYsbW01CisJcGFkZGQJbW0xLG1tNQorCXBzcmFkCW1tNixERVNDQUxFX1AyCisJcHNyYWQJbW0xLERFU0NBTEVfUDIKKwlwYWRkZAltbTcsbW01CisJcGFkZGQJbW0yLG1tNQorCXBzcmFkCW1tNyxERVNDQUxFX1AyCisJcHNyYWQJbW0yLERFU0NBTEVfUDIKKworCXBhY2tzc2R3ICBtbTYsbW0xCQk7IG1tNj1kYXRhMj0oMDIgMTIgMjIgMzIpCisJcGFja3NzZHcgIG1tNyxtbTIJCTsgbW03PWRhdGE1PSgwNSAxNSAyNSAzNSkKKworCW1vdnEJbW00LCBNTVdPUkQgW3drKDIpXQk7IG1tND10bXAxM0wKKwltb3ZxCW1tMywgTU1XT1JEIFt3aygzKV0JOyBtbTM9dG1wMTNICisJbW92cQltbTAsIE1NV09SRCBbd2soOCldCTsgbW0wPXRtcDBMCisJbW92cQltbTUsIE1NV09SRCBbd2soOSldCTsgbW01PXRtcDBICisKKwltb3ZxCW1tMSxtbTQKKwltb3ZxCW1tMixtbTMKKwlwYWRkZAltbTQsbW0wCQkJOyBtbTQ9ZGF0YTNMCisJcGFkZGQJbW0zLG1tNQkJCTsgbW0zPWRhdGEzSAorCXBzdWJkCW1tMSxtbTAJCQk7IG1tMT1kYXRhNEwKKwlwc3ViZAltbTIsbW01CQkJOyBtbTI9ZGF0YTRICisKKwltb3ZxCW1tMCxbR09UT0ZGKGVieCxQRF9ERVNDQUxFX1AyKV0JOyBtbTA9W1BEX0RFU0NBTEVfUDJdCisKKwlwYWRkZAltbTQsbW0wCisJcGFkZGQJbW0zLG1tMAorCXBzcmFkCW1tNCxERVNDQUxFX1AyCisJcHNyYWQJbW0zLERFU0NBTEVfUDIKKwlwYWRkZAltbTEsbW0wCisJcGFkZGQJbW0yLG1tMAorCXBzcmFkCW1tMSxERVNDQUxFX1AyCisJcHNyYWQJbW0yLERFU0NBTEVfUDIKKworCW1vdnEgICAgICBtbTUsW0dPVE9GRihlYngsUEJfQ0VOVEVSSlNBTVApXQk7IG1tNT1bUEJfQ0VOVEVSSlNBTVBdCisKKwlwYWNrc3NkdyAgbW00LG1tMwkJOyBtbTQ9ZGF0YTM9KDAzIDEzIDIzIDMzKQorCXBhY2tzc2R3ICBtbTEsbW0yCQk7IG1tMT1kYXRhND0oMDQgMTQgMjQgMzQpCisKKwltb3ZxICAgICAgbW0wLCBNTVdPUkQgW3drKDApXQk7IG1tMD0oMDAgMTAgMjAgMzAgMDYgMTYgMjYgMzYpCisJbW92cSAgICAgIG1tMywgTU1XT1JEIFt3aygxKV0JOyBtbTM9KDAxIDExIDIxIDMxIDA3IDE3IDI3IDM3KQorCisJcGFja3Nzd2IgIG1tNixtbTEJCTsgbW02PSgwMiAxMiAyMiAzMiAwNCAxNCAyNCAzNCkKKwlwYWNrc3N3YiAgbW00LG1tNwkJOyBtbTQ9KDAzIDEzIDIzIDMzIDA1IDE1IDI1IDM1KQorCisJcGFkZGIgICAgIG1tMCxtbTUKKwlwYWRkYiAgICAgbW0zLG1tNQorCXBhZGRiICAgICBtbTYsbW01CisJcGFkZGIgICAgIG1tNCxtbTUKKworCW1vdnEgICAgICBtbTIsbW0wCQk7IHRyYW5zcG9zZSBjb2VmZmljaWVudHMocGhhc2UgMSkKKwlwdW5wY2tsYncgbW0wLG1tMwkJOyBtbTA9KDAwIDAxIDEwIDExIDIwIDIxIDMwIDMxKQorCXB1bnBja2hidyBtbTIsbW0zCQk7IG1tMj0oMDYgMDcgMTYgMTcgMjYgMjcgMzYgMzcpCisJbW92cSAgICAgIG1tMSxtbTYJCTsgdHJhbnNwb3NlIGNvZWZmaWNpZW50cyhwaGFzZSAxKQorCXB1bnBja2xidyBtbTYsbW00CQk7IG1tNj0oMDIgMDMgMTIgMTMgMjIgMjMgMzIgMzMpCisJcHVucGNraGJ3IG1tMSxtbTQJCTsgbW0xPSgwNCAwNSAxNCAxNSAyNCAyNSAzNCAzNSkKKworCW1vdnEgICAgICBtbTcsbW0wCQk7IHRyYW5zcG9zZSBjb2VmZmljaWVudHMocGhhc2UgMikKKwlwdW5wY2tsd2QgbW0wLG1tNgkJOyBtbTA9KDAwIDAxIDAyIDAzIDEwIDExIDEyIDEzKQorCXB1bnBja2h3ZCBtbTcsbW02CQk7IG1tNz0oMjAgMjEgMjIgMjMgMzAgMzEgMzIgMzMpCisJbW92cSAgICAgIG1tNSxtbTEJCTsgdHJhbnNwb3NlIGNvZWZmaWNpZW50cyhwaGFzZSAyKQorCXB1bnBja2x3ZCBtbTEsbW0yCQk7IG1tMT0oMDQgMDUgMDYgMDcgMTQgMTUgMTYgMTcpCisJcHVucGNraHdkIG1tNSxtbTIJCTsgbW01PSgyNCAyNSAyNiAyNyAzNCAzNSAzNiAzNykKKworCW1vdnEgICAgICBtbTMsbW0wCQk7IHRyYW5zcG9zZSBjb2VmZmljaWVudHMocGhhc2UgMykKKwlwdW5wY2tsZHEgbW0wLG1tMQkJOyBtbTA9KDAwIDAxIDAyIDAzIDA0IDA1IDA2IDA3KQorCXB1bnBja2hkcSBtbTMsbW0xCQk7IG1tMz0oMTAgMTEgMTIgMTMgMTQgMTUgMTYgMTcpCisJbW92cSAgICAgIG1tNCxtbTcJCTsgdHJhbnNwb3NlIGNvZWZmaWNpZW50cyhwaGFzZSAzKQorCXB1bnBja2xkcSBtbTcsbW01CQk7IG1tNz0oMjAgMjEgMjIgMjMgMjQgMjUgMjYgMjcpCisJcHVucGNraGRxIG1tNCxtbTUJCTsgbW00PSgzMCAzMSAzMiAzMyAzNCAzNSAzNiAzNykKKworCXB1c2hwaWMJZWJ4CQkJOyBzYXZlIEdPVCBhZGRyZXNzCisKKwltb3YJZWR4LCBKU0FNUFJPVyBbZWRpKzAqU0laRU9GX0pTQU1QUk9XXQorCW1vdgllYngsIEpTQU1QUk9XIFtlZGkrMSpTSVpFT0ZfSlNBTVBST1ddCisJbW92cQlNTVdPUkQgW2VkeCtlYXgqU0laRU9GX0pTQU1QTEVdLCBtbTAKKwltb3ZxCU1NV09SRCBbZWJ4K2VheCpTSVpFT0ZfSlNBTVBMRV0sIG1tMworCW1vdgllZHgsIEpTQU1QUk9XIFtlZGkrMipTSVpFT0ZfSlNBTVBST1ddCisJbW92CWVieCwgSlNBTVBST1cgW2VkaSszKlNJWkVPRl9KU0FNUFJPV10KKwltb3ZxCU1NV09SRCBbZWR4K2VheCpTSVpFT0ZfSlNBTVBMRV0sIG1tNworCW1vdnEJTU1XT1JEIFtlYngrZWF4KlNJWkVPRl9KU0FNUExFXSwgbW00CisKKwlwb3BwaWMJZWJ4CQkJOyByZXN0b3JlIEdPVCBhZGRyZXNzCisKKwlhZGQJZXNpLCBieXRlIDQqU0laRU9GX0pDT0VGCTsgd3NwdHIKKwlhZGQJZWRpLCBieXRlIDQqU0laRU9GX0pTQU1QUk9XCisJZGVjCWVjeAkJCQk7IGN0cgorCWpuegluZWFyIC5yb3dsb29wCisKKwllbW1zCQk7IGVtcHR5IE1NWCBzdGF0ZQorCisJcG9wCWVkaQorCXBvcAllc2kKKzsJcG9wCWVkeAkJOyBuZWVkIG5vdCBiZSBwcmVzZXJ2ZWQKKzsJcG9wCWVjeAkJOyBuZWVkIG5vdCBiZSBwcmVzZXJ2ZWQKKwlwb3AJZWJ4CisJbW92CWVzcCxlYnAJCTsgZXNwIDwtIGFsaWduZWQgZWJwCisJcG9wCWVzcAkJOyBlc3AgPC0gb3JpZ2luYWwgZWJwCisJcG9wCWVicAorCXJldAorCis7IEZvciBzb21lIHJlYXNvbiwgdGhlIE9TIFggbGlua2VyIGRvZXMgbm90IGhvbm9yIHRoZSByZXF1ZXN0IHRvIGFsaWduIHRoZQorOyBzZWdtZW50IHVubGVzcyB3ZSBkbyB0aGlzLgorCWFsaWduCTE2CmRpZmYgLS1naXQgYS9zaW1kL2ppbW14cmVkLmFzbSBiL3NpbWQvamltbXhyZWQuYXNtCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmEyYjcxMDMKLS0tIC9kZXYvbnVsbAorKysgYi9zaW1kL2ppbW14cmVkLmFzbQpAQCAtMCwwICsxLDcwNiBAQAorOworOyBqaW1teHJlZC5hc20gLSByZWR1Y2VkLXNpemUgSURDVCAoTU1YKQorOworOyBDb3B5cmlnaHQgMjAwOSBQaWVycmUgT3NzbWFuIDxvc3NtYW5AY2VuZGlvLnNlPiBmb3IgQ2VuZGlvIEFCCis7Cis7IEJhc2VkIG9uCis7IHg4NiBTSU1EIGV4dGVuc2lvbiBmb3IgSUpHIEpQRUcgbGlicmFyeQorOyBDb3B5cmlnaHQgKEMpIDE5OTktMjAwNiwgTUlZQVNBS0EgTWFzYXJ1LgorOyBGb3IgY29uZGl0aW9ucyBvZiBkaXN0cmlidXRpb24gYW5kIHVzZSwgc2VlIGNvcHlyaWdodCBub3RpY2UgaW4ganNpbWRleHQuaW5jCis7Cis7IFRoaXMgZmlsZSBzaG91bGQgYmUgYXNzZW1ibGVkIHdpdGggTkFTTSAoTmV0d2lkZSBBc3NlbWJsZXIpLAorOyBjYW4gKm5vdCogYmUgYXNzZW1ibGVkIHdpdGggTWljcm9zb2Z0J3MgTUFTTSBvciBhbnkgY29tcGF0aWJsZQorOyBhc3NlbWJsZXIgKGluY2x1ZGluZyBCb3JsYW5kJ3MgVHVyYm8gQXNzZW1ibGVyKS4KKzsgTkFTTSBpcyBhdmFpbGFibGUgZnJvbSBodHRwOi8vbmFzbS5zb3VyY2Vmb3JnZS5uZXQvIG9yCis7IGh0dHA6Ly9zb3VyY2Vmb3JnZS5uZXQvcHJvamVjdC9zaG93ZmlsZXMucGhwP2dyb3VwX2lkPTYyMDgKKzsKKzsgVGhpcyBmaWxlIGNvbnRhaW5zIGludmVyc2UtRENUIHJvdXRpbmVzIHRoYXQgcHJvZHVjZSByZWR1Y2VkLXNpemUKKzsgb3V0cHV0OiBlaXRoZXIgNHg0IG9yIDJ4MiBwaXhlbHMgZnJvbSBhbiA4eDggRENUIGJsb2NrLgorOyBUaGUgZm9sbG93aW5nIGNvZGUgaXMgYmFzZWQgZGlyZWN0bHkgb24gdGhlIElKRydzIG9yaWdpbmFsIGppZGN0cmVkLmM7Cis7IHNlZSB0aGUgamlkY3RyZWQuYyBmb3IgbW9yZSBkZXRhaWxzLgorOworOyBbVEFCOF0KKworJWluY2x1ZGUgImpzaW1kZXh0LmluYyIKKyVpbmNsdWRlICJqZGN0LmluYyIKKworOyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCislZGVmaW5lIENPTlNUX0JJVFMJMTMKKyVkZWZpbmUgUEFTUzFfQklUUwkyCisKKyVkZWZpbmUgREVTQ0FMRV9QMV80CShDT05TVF9CSVRTLVBBU1MxX0JJVFMrMSkKKyVkZWZpbmUgREVTQ0FMRV9QMl80CShDT05TVF9CSVRTK1BBU1MxX0JJVFMrMysxKQorJWRlZmluZSBERVNDQUxFX1AxXzIJKENPTlNUX0JJVFMtUEFTUzFfQklUUysyKQorJWRlZmluZSBERVNDQUxFX1AyXzIJKENPTlNUX0JJVFMrUEFTUzFfQklUUyszKzIpCisKKyVpZiBDT05TVF9CSVRTID09IDEzCitGXzBfMjExCWVxdQkgMTczMAkJOyBGSVgoMC4yMTExNjQyNDMpCitGXzBfNTA5CWVxdQkgNDE3NgkJOyBGSVgoMC41MDk3OTU1NzkpCitGXzBfNjAxCWVxdQkgNDkyNgkJOyBGSVgoMC42MDEzNDQ4ODcpCitGXzBfNzIwCWVxdQkgNTkwNgkJOyBGSVgoMC43MjA5NTk4MjIpCitGXzBfNzY1CWVxdQkgNjI3MAkJOyBGSVgoMC43NjUzNjY4NjUpCitGXzBfODUwCWVxdQkgNjk2NwkJOyBGSVgoMC44NTA0MzAwOTUpCitGXzBfODk5CWVxdQkgNzM3MwkJOyBGSVgoMC44OTk5NzYyMjMpCitGXzFfMDYxCWVxdQkgODY5NwkJOyBGSVgoMS4wNjE1OTQzMzcpCitGXzFfMjcyCWVxdQkxMDQyNgkJOyBGSVgoMS4yNzI3NTg1ODApCitGXzFfNDUxCWVxdQkxMTg5MwkJOyBGSVgoMS40NTE3NzQ5ODEpCitGXzFfODQ3CWVxdQkxNTEzNwkJOyBGSVgoMS44NDc3NTkwNjUpCitGXzJfMTcyCWVxdQkxNzc5OQkJOyBGSVgoMi4xNzI3MzQ4MDMpCitGXzJfNTYyCWVxdQkyMDk5NQkJOyBGSVgoMi41NjI5MTU0NDcpCitGXzNfNjI0CWVxdQkyOTY5MgkJOyBGSVgoMy42MjQ1MDk3ODUpCislZWxzZQorOyBOQVNNIGNhbm5vdCBkbyBjb21waWxlLXRpbWUgYXJpdGhtZXRpYyBvbiBmbG9hdGluZy1wb2ludCBjb25zdGFudHMuCislZGVmaW5lIERFU0NBTEUoeCxuKSAgKCgoeCkrKDE8PCgobiktMSkpKT4+KG4pKQorRl8wXzIxMQllcXUJREVTQ0FMRSggMjI2NzM1ODc5LDMwLUNPTlNUX0JJVFMpCTsgRklYKDAuMjExMTY0MjQzKQorRl8wXzUwOQllcXUJREVTQ0FMRSggNTQ3Mzg4ODM0LDMwLUNPTlNUX0JJVFMpCTsgRklYKDAuNTA5Nzk1NTc5KQorRl8wXzYwMQllcXUJREVTQ0FMRSggNjQ1Njg5MTU1LDMwLUNPTlNUX0JJVFMpCTsgRklYKDAuNjAxMzQ0ODg3KQorRl8wXzcyMAllcXUJREVTQ0FMRSggNzc0MTI0NzE0LDMwLUNPTlNUX0JJVFMpCTsgRklYKDAuNzIwOTU5ODIyKQorRl8wXzc2NQllcXUJREVTQ0FMRSggODIxODA2NDEzLDMwLUNPTlNUX0JJVFMpCTsgRklYKDAuNzY1MzY2ODY1KQorRl8wXzg1MAllcXUJREVTQ0FMRSggOTEzMTQyMzYxLDMwLUNPTlNUX0JJVFMpCTsgRklYKDAuODUwNDMwMDk1KQorRl8wXzg5OQllcXUJREVTQ0FMRSggOTY2MzQyMTExLDMwLUNPTlNUX0JJVFMpCTsgRklYKDAuODk5OTc2MjIzKQorRl8xXzA2MQllcXUJREVTQ0FMRSgxMTM5ODc4MjM5LDMwLUNPTlNUX0JJVFMpCTsgRklYKDEuMDYxNTk0MzM3KQorRl8xXzI3MgllcXUJREVTQ0FMRSgxMzY2NjE0MTE5LDMwLUNPTlNUX0JJVFMpCTsgRklYKDEuMjcyNzU4NTgwKQorRl8xXzQ1MQllcXUJREVTQ0FMRSgxNTU4ODMxNTE2LDMwLUNPTlNUX0JJVFMpCTsgRklYKDEuNDUxNzc0OTgxKQorRl8xXzg0NwllcXUJREVTQ0FMRSgxOTg0MDE2MTg4LDMwLUNPTlNUX0JJVFMpCTsgRklYKDEuODQ3NzU5MDY1KQorRl8yXzE3MgllcXUJREVTQ0FMRSgyMzMyOTU2MjMwLDMwLUNPTlNUX0JJVFMpCTsgRklYKDIuMTcyNzM0ODAzKQorRl8yXzU2MgllcXUJREVTQ0FMRSgyNzUxOTA5NTA2LDMwLUNPTlNUX0JJVFMpCTsgRklYKDIuNTYyOTE1NDQ3KQorRl8zXzYyNAllcXUJREVTQ0FMRSgzODkxNzg3NzQ3LDMwLUNPTlNUX0JJVFMpCTsgRklYKDMuNjI0NTA5Nzg1KQorJWVuZGlmCisKKzsgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKwlTRUNUSU9OCVNFR19DT05TVAorCisJYWxpZ256CTE2CisJZ2xvYmFsCUVYVE4oamNvbnN0X2lkY3RfcmVkX21teCkKKworRVhUTihqY29uc3RfaWRjdF9yZWRfbW14KToKKworUFdfRjE4NF9NRjA3Ngl0aW1lcyAyIGR3ICBGXzFfODQ3LC1GXzBfNzY1CitQV19GMjU2X0YwODkJdGltZXMgMiBkdyAgRl8yXzU2MiwgRl8wXzg5OQorUFdfRjEwNl9NRjIxNwl0aW1lcyAyIGR3ICBGXzFfMDYxLC1GXzJfMTcyCitQV19NRjA2MF9NRjA1MAl0aW1lcyAyIGR3IC1GXzBfNjAxLC1GXzBfNTA5CitQV19GMTQ1X01GMDIxCXRpbWVzIDIgZHcgIEZfMV80NTEsLUZfMF8yMTEKK1BXX0YzNjJfTUYxMjcJdGltZXMgMiBkdyAgRl8zXzYyNCwtRl8xXzI3MgorUFdfRjA4NV9NRjA3Mgl0aW1lcyAyIGR3ICBGXzBfODUwLC1GXzBfNzIwCitQRF9ERVNDQUxFX1AxXzQJdGltZXMgMiBkZCAgMSA8PCAoREVTQ0FMRV9QMV80LTEpCitQRF9ERVNDQUxFX1AyXzQJdGltZXMgMiBkZCAgMSA8PCAoREVTQ0FMRV9QMl80LTEpCitQRF9ERVNDQUxFX1AxXzIJdGltZXMgMiBkZCAgMSA8PCAoREVTQ0FMRV9QMV8yLTEpCitQRF9ERVNDQUxFX1AyXzIJdGltZXMgMiBkZCAgMSA8PCAoREVTQ0FMRV9QMl8yLTEpCitQQl9DRU5URVJKU0FNUAl0aW1lcyA4IGRiICBDRU5URVJKU0FNUExFCisKKwlhbGlnbnoJMTYKKworOyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCVNFQ1RJT04JU0VHX1RFWFQKKwlCSVRTCTMyCis7Cis7IFBlcmZvcm0gZGVxdWFudGl6YXRpb24gYW5kIGludmVyc2UgRENUIG9uIG9uZSBibG9jayBvZiBjb2VmZmljaWVudHMsCis7IHByb2R1Y2luZyBhIHJlZHVjZWQtc2l6ZSA0eDQgb3V0cHV0IGJsb2NrLgorOworOyBHTE9CQUwodm9pZCkKKzsganNpbWRfaWRjdF80eDRfbW14ICh2b2lkICogZGN0X3RhYmxlLCBKQ09FRlBUUiBjb2VmX2Jsb2NrLAorOyAgICAgICAgICAgICAgICAgICAgIEpTQU1QQVJSQVkgb3V0cHV0X2J1ZiwgSkRJTUVOU0lPTiBvdXRwdXRfY29sKQorOworCislZGVmaW5lIGRjdF90YWJsZShiKQkoYikrOAkJCTsgdm9pZCAqIGRjdF90YWJsZQorJWRlZmluZSBjb2VmX2Jsb2NrKGIpCShiKSsxMgkJOyBKQ09FRlBUUiBjb2VmX2Jsb2NrCislZGVmaW5lIG91dHB1dF9idWYoYikJKGIpKzE2CQk7IEpTQU1QQVJSQVkgb3V0cHV0X2J1ZgorJWRlZmluZSBvdXRwdXRfY29sKGIpCShiKSsyMAkJOyBKRElNRU5TSU9OIG91dHB1dF9jb2wKKworJWRlZmluZSBvcmlnaW5hbF9lYnAJZWJwKzAKKyVkZWZpbmUgd2soaSkJCWVicC0oV0tfTlVNLShpKSkqU0laRU9GX01NV09SRAk7IG1td29yZCB3a1tXS19OVU1dCislZGVmaW5lIFdLX05VTQkJMgorJWRlZmluZSB3b3Jrc3BhY2UJd2soMCktRENUU0laRTIqU0laRU9GX0pDT0VGCisJCQkJCTsgSkNPRUYgd29ya3NwYWNlW0RDVFNJWkUyXQorCisJYWxpZ24JMTYKKwlnbG9iYWwJRVhUTihqc2ltZF9pZGN0XzR4NF9tbXgpCisKK0VYVE4oanNpbWRfaWRjdF80eDRfbW14KToKKwlwdXNoCWVicAorCW1vdgllYXgsZXNwCQkJCTsgZWF4ID0gb3JpZ2luYWwgZWJwCisJc3ViCWVzcCwgYnl0ZSA0CisJYW5kCWVzcCwgYnl0ZSAoLVNJWkVPRl9NTVdPUkQpCTsgYWxpZ24gdG8gNjQgYml0cworCW1vdglbZXNwXSxlYXgKKwltb3YJZWJwLGVzcAkJCQk7IGVicCA9IGFsaWduZWQgZWJwCisJbGVhCWVzcCwgW3dvcmtzcGFjZV0KKwlwdXNocGljCWVieAorOwlwdXNoCWVjeAkJOyBuZWVkIG5vdCBiZSBwcmVzZXJ2ZWQKKzsJcHVzaAllZHgJCTsgbmVlZCBub3QgYmUgcHJlc2VydmVkCisJcHVzaAllc2kKKwlwdXNoCWVkaQorCisJZ2V0X0dPVAllYngJCTsgZ2V0IEdPVCBhZGRyZXNzCisKKwk7IC0tLS0gUGFzcyAxOiBwcm9jZXNzIGNvbHVtbnMgZnJvbSBpbnB1dCwgc3RvcmUgaW50byB3b3JrIGFycmF5LgorCis7CW1vdgllYXgsIFtvcmlnaW5hbF9lYnBdCisJbW92CWVkeCwgUE9JTlRFUiBbZGN0X3RhYmxlKGVheCldCTsgcXVhbnRwdHIKKwltb3YJZXNpLCBKQ09FRlBUUiBbY29lZl9ibG9jayhlYXgpXQkJOyBpbnB0cgorCWxlYQllZGksIFt3b3Jrc3BhY2VdCQkJOyBKQ09FRiAqIHdzcHRyCisJbW92CWVjeCwgRENUU0laRS80CQkJCTsgY3RyCisJYWxpZ254CTE2LDcKKy5jb2x1bW5sb29wOgorJWlmbmRlZiBOT19aRVJPX0NPTFVNTl9URVNUXzRYNF9NTVgKKwltb3YJZWF4LCBEV09SRCBbRFdCTE9DSygxLDAsZXNpLFNJWkVPRl9KQ09FRildCisJb3IJZWF4LCBEV09SRCBbRFdCTE9DSygyLDAsZXNpLFNJWkVPRl9KQ09FRildCisJam56CXNob3J0IC5jb2x1bW5EQ1QKKworCW1vdnEJbW0wLCBNTVdPUkQgW01NQkxPQ0soMSwwLGVzaSxTSVpFT0ZfSkNPRUYpXQorCW1vdnEJbW0xLCBNTVdPUkQgW01NQkxPQ0soMiwwLGVzaSxTSVpFT0ZfSkNPRUYpXQorCXBvcgltbTAsIE1NV09SRCBbTU1CTE9DSygzLDAsZXNpLFNJWkVPRl9KQ09FRildCisJcG9yCW1tMSwgTU1XT1JEIFtNTUJMT0NLKDUsMCxlc2ksU0laRU9GX0pDT0VGKV0KKwlwb3IJbW0wLCBNTVdPUkQgW01NQkxPQ0soNiwwLGVzaSxTSVpFT0ZfSkNPRUYpXQorCXBvcgltbTEsIE1NV09SRCBbTU1CTE9DSyg3LDAsZXNpLFNJWkVPRl9KQ09FRildCisJcG9yCW1tMCxtbTEKKwlwYWNrc3N3YiBtbTAsbW0wCisJbW92ZAllYXgsbW0wCisJdGVzdAllYXgsZWF4CisJam56CXNob3J0IC5jb2x1bW5EQ1QKKworCTsgLS0gQUMgdGVybXMgYWxsIHplcm8KKworCW1vdnEJbW0wLCBNTVdPUkQgW01NQkxPQ0soMCwwLGVzaSxTSVpFT0ZfSkNPRUYpXQorCXBtdWxsdwltbTAsIE1NV09SRCBbTU1CTE9DSygwLDAsZWR4LFNJWkVPRl9JU0xPV19NVUxUX1RZUEUpXQorCisJcHNsbHcJbW0wLFBBU1MxX0JJVFMKKworCW1vdnEgICAgICBtbTIsbW0wCQk7IG1tMD1pbjA9KDAwIDAxIDAyIDAzKQorCXB1bnBja2x3ZCBtbTAsbW0wCQk7IG1tMD0oMDAgMDAgMDEgMDEpCisJcHVucGNraHdkIG1tMixtbTIJCTsgbW0yPSgwMiAwMiAwMyAwMykKKworCW1vdnEgICAgICBtbTEsbW0wCisJcHVucGNrbGRxIG1tMCxtbTAJCTsgbW0wPSgwMCAwMCAwMCAwMCkKKwlwdW5wY2toZHEgbW0xLG1tMQkJOyBtbTE9KDAxIDAxIDAxIDAxKQorCW1vdnEgICAgICBtbTMsbW0yCisJcHVucGNrbGRxIG1tMixtbTIJCTsgbW0yPSgwMiAwMiAwMiAwMikKKwlwdW5wY2toZHEgbW0zLG1tMwkJOyBtbTM9KDAzIDAzIDAzIDAzKQorCisJbW92cQlNTVdPUkQgW01NQkxPQ0soMCwwLGVkaSxTSVpFT0ZfSkNPRUYpXSwgbW0wCisJbW92cQlNTVdPUkQgW01NQkxPQ0soMSwwLGVkaSxTSVpFT0ZfSkNPRUYpXSwgbW0xCisJbW92cQlNTVdPUkQgW01NQkxPQ0soMiwwLGVkaSxTSVpFT0ZfSkNPRUYpXSwgbW0yCisJbW92cQlNTVdPUkQgW01NQkxPQ0soMywwLGVkaSxTSVpFT0ZfSkNPRUYpXSwgbW0zCisJam1wCW5lYXIgLm5leHRjb2x1bW4KKwlhbGlnbngJMTYsNworJWVuZGlmCisuY29sdW1uRENUOgorCisJOyAtLSBPZGQgcGFydAorCisJbW92cQltbTAsIE1NV09SRCBbTU1CTE9DSygxLDAsZXNpLFNJWkVPRl9KQ09FRildCisJbW92cQltbTEsIE1NV09SRCBbTU1CTE9DSygzLDAsZXNpLFNJWkVPRl9KQ09FRildCisJcG11bGx3CW1tMCwgTU1XT1JEIFtNTUJMT0NLKDEsMCxlZHgsU0laRU9GX0lTTE9XX01VTFRfVFlQRSldCisJcG11bGx3CW1tMSwgTU1XT1JEIFtNTUJMT0NLKDMsMCxlZHgsU0laRU9GX0lTTE9XX01VTFRfVFlQRSldCisJbW92cQltbTIsIE1NV09SRCBbTU1CTE9DSyg1LDAsZXNpLFNJWkVPRl9KQ09FRildCisJbW92cQltbTMsIE1NV09SRCBbTU1CTE9DSyg3LDAsZXNpLFNJWkVPRl9KQ09FRildCisJcG11bGx3CW1tMiwgTU1XT1JEIFtNTUJMT0NLKDUsMCxlZHgsU0laRU9GX0lTTE9XX01VTFRfVFlQRSldCisJcG11bGx3CW1tMywgTU1XT1JEIFtNTUJMT0NLKDcsMCxlZHgsU0laRU9GX0lTTE9XX01VTFRfVFlQRSldCisKKwltb3ZxICAgICAgbW00LG1tMAorCW1vdnEgICAgICBtbTUsbW0wCisJcHVucGNrbHdkIG1tNCxtbTEKKwlwdW5wY2tod2QgbW01LG1tMQorCW1vdnEgICAgICBtbTAsbW00CisJbW92cSAgICAgIG1tMSxtbTUKKwlwbWFkZHdkICAgbW00LFtHT1RPRkYoZWJ4LFBXX0YyNTZfRjA4OSldCTsgbW00PSh0bXAyTCkKKwlwbWFkZHdkICAgbW01LFtHT1RPRkYoZWJ4LFBXX0YyNTZfRjA4OSldCTsgbW01PSh0bXAySCkKKwlwbWFkZHdkICAgbW0wLFtHT1RPRkYoZWJ4LFBXX0YxMDZfTUYyMTcpXQk7IG1tMD0odG1wMEwpCisJcG1hZGR3ZCAgIG1tMSxbR09UT0ZGKGVieCxQV19GMTA2X01GMjE3KV0JOyBtbTE9KHRtcDBIKQorCisJbW92cSAgICAgIG1tNixtbTIKKwltb3ZxICAgICAgbW03LG1tMgorCXB1bnBja2x3ZCBtbTYsbW0zCisJcHVucGNraHdkIG1tNyxtbTMKKwltb3ZxICAgICAgbW0yLG1tNgorCW1vdnEgICAgICBtbTMsbW03CisJcG1hZGR3ZCAgIG1tNixbR09UT0ZGKGVieCxQV19NRjA2MF9NRjA1MCldCTsgbW02PSh0bXAyTCkKKwlwbWFkZHdkICAgbW03LFtHT1RPRkYoZWJ4LFBXX01GMDYwX01GMDUwKV0JOyBtbTc9KHRtcDJIKQorCXBtYWRkd2QgICBtbTIsW0dPVE9GRihlYngsUFdfRjE0NV9NRjAyMSldCTsgbW0yPSh0bXAwTCkKKwlwbWFkZHdkICAgbW0zLFtHT1RPRkYoZWJ4LFBXX0YxNDVfTUYwMjEpXQk7IG1tMz0odG1wMEgpCisKKwlwYWRkZAltbTYsbW00CQkJOyBtbTY9dG1wMkwKKwlwYWRkZAltbTcsbW01CQkJOyBtbTc9dG1wMkgKKwlwYWRkZAltbTIsbW0wCQkJOyBtbTI9dG1wMEwKKwlwYWRkZAltbTMsbW0xCQkJOyBtbTM9dG1wMEgKKworCW1vdnEJTU1XT1JEIFt3aygwKV0sIG1tMgk7IHdrKDApPXRtcDBMCisJbW92cQlNTVdPUkQgW3drKDEpXSwgbW0zCTsgd2soMSk9dG1wMEgKKworCTsgLS0gRXZlbiBwYXJ0CisKKwltb3ZxCW1tNCwgTU1XT1JEIFtNTUJMT0NLKDAsMCxlc2ksU0laRU9GX0pDT0VGKV0KKwltb3ZxCW1tNSwgTU1XT1JEIFtNTUJMT0NLKDIsMCxlc2ksU0laRU9GX0pDT0VGKV0KKwltb3ZxCW1tMCwgTU1XT1JEIFtNTUJMT0NLKDYsMCxlc2ksU0laRU9GX0pDT0VGKV0KKwlwbXVsbHcJbW00LCBNTVdPUkQgW01NQkxPQ0soMCwwLGVkeCxTSVpFT0ZfSVNMT1dfTVVMVF9UWVBFKV0KKwlwbXVsbHcJbW01LCBNTVdPUkQgW01NQkxPQ0soMiwwLGVkeCxTSVpFT0ZfSVNMT1dfTVVMVF9UWVBFKV0KKwlwbXVsbHcJbW0wLCBNTVdPUkQgW01NQkxPQ0soNiwwLGVkeCxTSVpFT0ZfSVNMT1dfTVVMVF9UWVBFKV0KKworCXB4b3IgICAgICBtbTEsbW0xCisJcHhvciAgICAgIG1tMixtbTIKKwlwdW5wY2tsd2QgbW0xLG1tNAkJOyBtbTE9dG1wMEwKKwlwdW5wY2tod2QgbW0yLG1tNAkJOyBtbTI9dG1wMEgKKwlwc3JhZCAgICAgbW0xLCgxNi1DT05TVF9CSVRTLTEpCTsgcHNyYWQgbW0xLDE2ICYgcHNsbGQgbW0xLENPTlNUX0JJVFMrMQorCXBzcmFkICAgICBtbTIsKDE2LUNPTlNUX0JJVFMtMSkJOyBwc3JhZCBtbTIsMTYgJiBwc2xsZCBtbTIsQ09OU1RfQklUUysxCisKKwltb3ZxICAgICAgbW0zLG1tNQkJOyBtbTU9aW4yPXoyCisJcHVucGNrbHdkIG1tNSxtbTAJCTsgbW0wPWluNj16MworCXB1bnBja2h3ZCBtbTMsbW0wCisJcG1hZGR3ZCAgIG1tNSxbR09UT0ZGKGVieCxQV19GMTg0X01GMDc2KV0JOyBtbTU9dG1wMkwKKwlwbWFkZHdkICAgbW0zLFtHT1RPRkYoZWJ4LFBXX0YxODRfTUYwNzYpXQk7IG1tMz10bXAySAorCisJbW92cQltbTQsbW0xCisJbW92cQltbTAsbW0yCisJcGFkZGQJbW0xLG1tNQkJCTsgbW0xPXRtcDEwTAorCXBhZGRkCW1tMixtbTMJCQk7IG1tMj10bXAxMEgKKwlwc3ViZAltbTQsbW01CQkJOyBtbTQ9dG1wMTJMCisJcHN1YmQJbW0wLG1tMwkJCTsgbW0wPXRtcDEySAorCisJOyAtLSBGaW5hbCBvdXRwdXQgc3RhZ2UKKworCW1vdnEJbW01LG1tMQorCW1vdnEJbW0zLG1tMgorCXBhZGRkCW1tMSxtbTYJCQk7IG1tMT1kYXRhMEwKKwlwYWRkZAltbTIsbW03CQkJOyBtbTI9ZGF0YTBICisJcHN1YmQJbW01LG1tNgkJCTsgbW01PWRhdGEzTAorCXBzdWJkCW1tMyxtbTcJCQk7IG1tMz1kYXRhM0gKKworCW1vdnEJbW02LFtHT1RPRkYoZWJ4LFBEX0RFU0NBTEVfUDFfNCldCTsgbW02PVtQRF9ERVNDQUxFX1AxXzRdCisKKwlwYWRkZAltbTEsbW02CisJcGFkZGQJbW0yLG1tNgorCXBzcmFkCW1tMSxERVNDQUxFX1AxXzQKKwlwc3JhZAltbTIsREVTQ0FMRV9QMV80CisJcGFkZGQJbW01LG1tNgorCXBhZGRkCW1tMyxtbTYKKwlwc3JhZAltbTUsREVTQ0FMRV9QMV80CisJcHNyYWQJbW0zLERFU0NBTEVfUDFfNAorCisJcGFja3NzZHcgIG1tMSxtbTIJCTsgbW0xPWRhdGEwPSgwMCAwMSAwMiAwMykKKwlwYWNrc3NkdyAgbW01LG1tMwkJOyBtbTU9ZGF0YTM9KDMwIDMxIDMyIDMzKQorCisJbW92cQltbTcsIE1NV09SRCBbd2soMCldCTsgbW03PXRtcDBMCisJbW92cQltbTYsIE1NV09SRCBbd2soMSldCTsgbW02PXRtcDBICisKKwltb3ZxCW1tMixtbTQKKwltb3ZxCW1tMyxtbTAKKwlwYWRkZAltbTQsbW03CQkJOyBtbTQ9ZGF0YTFMCisJcGFkZGQJbW0wLG1tNgkJCTsgbW0wPWRhdGExSAorCXBzdWJkCW1tMixtbTcJCQk7IG1tMj1kYXRhMkwKKwlwc3ViZAltbTMsbW02CQkJOyBtbTM9ZGF0YTJICisKKwltb3ZxCW1tNyxbR09UT0ZGKGVieCxQRF9ERVNDQUxFX1AxXzQpXQk7IG1tNz1bUERfREVTQ0FMRV9QMV80XQorCisJcGFkZGQJbW00LG1tNworCXBhZGRkCW1tMCxtbTcKKwlwc3JhZAltbTQsREVTQ0FMRV9QMV80CisJcHNyYWQJbW0wLERFU0NBTEVfUDFfNAorCXBhZGRkCW1tMixtbTcKKwlwYWRkZAltbTMsbW03CisJcHNyYWQJbW0yLERFU0NBTEVfUDFfNAorCXBzcmFkCW1tMyxERVNDQUxFX1AxXzQKKworCXBhY2tzc2R3ICBtbTQsbW0wCQk7IG1tND1kYXRhMT0oMTAgMTEgMTIgMTMpCisJcGFja3NzZHcgIG1tMixtbTMJCTsgbW0yPWRhdGEyPSgyMCAyMSAyMiAyMykKKworCW1vdnEgICAgICBtbTYsbW0xCQk7IHRyYW5zcG9zZSBjb2VmZmljaWVudHMocGhhc2UgMSkKKwlwdW5wY2tsd2QgbW0xLG1tNAkJOyBtbTE9KDAwIDEwIDAxIDExKQorCXB1bnBja2h3ZCBtbTYsbW00CQk7IG1tNj0oMDIgMTIgMDMgMTMpCisJbW92cSAgICAgIG1tNyxtbTIJCTsgdHJhbnNwb3NlIGNvZWZmaWNpZW50cyhwaGFzZSAxKQorCXB1bnBja2x3ZCBtbTIsbW01CQk7IG1tMj0oMjAgMzAgMjEgMzEpCisJcHVucGNraHdkIG1tNyxtbTUJCTsgbW03PSgyMiAzMiAyMyAzMykKKworCW1vdnEgICAgICBtbTAsbW0xCQk7IHRyYW5zcG9zZSBjb2VmZmljaWVudHMocGhhc2UgMikKKwlwdW5wY2tsZHEgbW0xLG1tMgkJOyBtbTE9KDAwIDEwIDIwIDMwKQorCXB1bnBja2hkcSBtbTAsbW0yCQk7IG1tMD0oMDEgMTEgMjEgMzEpCisJbW92cSAgICAgIG1tMyxtbTYJCTsgdHJhbnNwb3NlIGNvZWZmaWNpZW50cyhwaGFzZSAyKQorCXB1bnBja2xkcSBtbTYsbW03CQk7IG1tNj0oMDIgMTIgMjIgMzIpCisJcHVucGNraGRxIG1tMyxtbTcJCTsgbW0zPSgwMyAxMyAyMyAzMykKKworCW1vdnEJTU1XT1JEIFtNTUJMT0NLKDAsMCxlZGksU0laRU9GX0pDT0VGKV0sIG1tMQorCW1vdnEJTU1XT1JEIFtNTUJMT0NLKDEsMCxlZGksU0laRU9GX0pDT0VGKV0sIG1tMAorCW1vdnEJTU1XT1JEIFtNTUJMT0NLKDIsMCxlZGksU0laRU9GX0pDT0VGKV0sIG1tNgorCW1vdnEJTU1XT1JEIFtNTUJMT0NLKDMsMCxlZGksU0laRU9GX0pDT0VGKV0sIG1tMworCisubmV4dGNvbHVtbjoKKwlhZGQJZXNpLCBieXRlIDQqU0laRU9GX0pDT0VGCQk7IGNvZWZfYmxvY2sKKwlhZGQJZWR4LCBieXRlIDQqU0laRU9GX0lTTE9XX01VTFRfVFlQRQk7IHF1YW50cHRyCisJYWRkCWVkaSwgYnl0ZSA0KkRDVFNJWkUqU0laRU9GX0pDT0VGCTsgd3NwdHIKKwlkZWMJZWN4CQkJCQk7IGN0cgorCWpuegluZWFyIC5jb2x1bW5sb29wCisKKwk7IC0tLS0gUGFzcyAyOiBwcm9jZXNzIHJvd3MgZnJvbSB3b3JrIGFycmF5LCBzdG9yZSBpbnRvIG91dHB1dCBhcnJheS4KKworCW1vdgllYXgsIFtvcmlnaW5hbF9lYnBdCisJbGVhCWVzaSwgW3dvcmtzcGFjZV0JCQk7IEpDT0VGICogd3NwdHIKKwltb3YJZWRpLCBKU0FNUEFSUkFZIFtvdXRwdXRfYnVmKGVheCldCTsgKEpTQU1QUk9XICopCisJbW92CWVheCwgSkRJTUVOU0lPTiBbb3V0cHV0X2NvbChlYXgpXQorCisJOyAtLSBPZGQgcGFydAorCisJbW92cQltbTAsIE1NV09SRCBbTU1CTE9DSygxLDAsZXNpLFNJWkVPRl9KQ09FRildCisJbW92cQltbTEsIE1NV09SRCBbTU1CTE9DSygzLDAsZXNpLFNJWkVPRl9KQ09FRildCisJbW92cQltbTIsIE1NV09SRCBbTU1CTE9DSyg1LDAsZXNpLFNJWkVPRl9KQ09FRildCisJbW92cQltbTMsIE1NV09SRCBbTU1CTE9DSyg3LDAsZXNpLFNJWkVPRl9KQ09FRildCisKKwltb3ZxICAgICAgbW00LG1tMAorCW1vdnEgICAgICBtbTUsbW0wCisJcHVucGNrbHdkIG1tNCxtbTEKKwlwdW5wY2tod2QgbW01LG1tMQorCW1vdnEgICAgICBtbTAsbW00CisJbW92cSAgICAgIG1tMSxtbTUKKwlwbWFkZHdkICAgbW00LFtHT1RPRkYoZWJ4LFBXX0YyNTZfRjA4OSldCTsgbW00PSh0bXAyTCkKKwlwbWFkZHdkICAgbW01LFtHT1RPRkYoZWJ4LFBXX0YyNTZfRjA4OSldCTsgbW01PSh0bXAySCkKKwlwbWFkZHdkICAgbW0wLFtHT1RPRkYoZWJ4LFBXX0YxMDZfTUYyMTcpXQk7IG1tMD0odG1wMEwpCisJcG1hZGR3ZCAgIG1tMSxbR09UT0ZGKGVieCxQV19GMTA2X01GMjE3KV0JOyBtbTE9KHRtcDBIKQorCisJbW92cSAgICAgIG1tNixtbTIKKwltb3ZxICAgICAgbW03LG1tMgorCXB1bnBja2x3ZCBtbTYsbW0zCisJcHVucGNraHdkIG1tNyxtbTMKKwltb3ZxICAgICAgbW0yLG1tNgorCW1vdnEgICAgICBtbTMsbW03CisJcG1hZGR3ZCAgIG1tNixbR09UT0ZGKGVieCxQV19NRjA2MF9NRjA1MCldCTsgbW02PSh0bXAyTCkKKwlwbWFkZHdkICAgbW03LFtHT1RPRkYoZWJ4LFBXX01GMDYwX01GMDUwKV0JOyBtbTc9KHRtcDJIKQorCXBtYWRkd2QgICBtbTIsW0dPVE9GRihlYngsUFdfRjE0NV9NRjAyMSldCTsgbW0yPSh0bXAwTCkKKwlwbWFkZHdkICAgbW0zLFtHT1RPRkYoZWJ4LFBXX0YxNDVfTUYwMjEpXQk7IG1tMz0odG1wMEgpCisKKwlwYWRkZAltbTYsbW00CQkJOyBtbTY9dG1wMkwKKwlwYWRkZAltbTcsbW01CQkJOyBtbTc9dG1wMkgKKwlwYWRkZAltbTIsbW0wCQkJOyBtbTI9dG1wMEwKKwlwYWRkZAltbTMsbW0xCQkJOyBtbTM9dG1wMEgKKworCW1vdnEJTU1XT1JEIFt3aygwKV0sIG1tMgk7IHdrKDApPXRtcDBMCisJbW92cQlNTVdPUkQgW3drKDEpXSwgbW0zCTsgd2soMSk9dG1wMEgKKworCTsgLS0gRXZlbiBwYXJ0CisKKwltb3ZxCW1tNCwgTU1XT1JEIFtNTUJMT0NLKDAsMCxlc2ksU0laRU9GX0pDT0VGKV0KKwltb3ZxCW1tNSwgTU1XT1JEIFtNTUJMT0NLKDIsMCxlc2ksU0laRU9GX0pDT0VGKV0KKwltb3ZxCW1tMCwgTU1XT1JEIFtNTUJMT0NLKDYsMCxlc2ksU0laRU9GX0pDT0VGKV0KKworCXB4b3IgICAgICBtbTEsbW0xCisJcHhvciAgICAgIG1tMixtbTIKKwlwdW5wY2tsd2QgbW0xLG1tNAkJOyBtbTE9dG1wMEwKKwlwdW5wY2tod2QgbW0yLG1tNAkJOyBtbTI9dG1wMEgKKwlwc3JhZCAgICAgbW0xLCgxNi1DT05TVF9CSVRTLTEpCTsgcHNyYWQgbW0xLDE2ICYgcHNsbGQgbW0xLENPTlNUX0JJVFMrMQorCXBzcmFkICAgICBtbTIsKDE2LUNPTlNUX0JJVFMtMSkJOyBwc3JhZCBtbTIsMTYgJiBwc2xsZCBtbTIsQ09OU1RfQklUUysxCisKKwltb3ZxICAgICAgbW0zLG1tNQkJOyBtbTU9aW4yPXoyCisJcHVucGNrbHdkIG1tNSxtbTAJCTsgbW0wPWluNj16MworCXB1bnBja2h3ZCBtbTMsbW0wCisJcG1hZGR3ZCAgIG1tNSxbR09UT0ZGKGVieCxQV19GMTg0X01GMDc2KV0JOyBtbTU9dG1wMkwKKwlwbWFkZHdkICAgbW0zLFtHT1RPRkYoZWJ4LFBXX0YxODRfTUYwNzYpXQk7IG1tMz10bXAySAorCisJbW92cQltbTQsbW0xCisJbW92cQltbTAsbW0yCisJcGFkZGQJbW0xLG1tNQkJCTsgbW0xPXRtcDEwTAorCXBhZGRkCW1tMixtbTMJCQk7IG1tMj10bXAxMEgKKwlwc3ViZAltbTQsbW01CQkJOyBtbTQ9dG1wMTJMCisJcHN1YmQJbW0wLG1tMwkJCTsgbW0wPXRtcDEySAorCisJOyAtLSBGaW5hbCBvdXRwdXQgc3RhZ2UKKworCW1vdnEJbW01LG1tMQorCW1vdnEJbW0zLG1tMgorCXBhZGRkCW1tMSxtbTYJCQk7IG1tMT1kYXRhMEwKKwlwYWRkZAltbTIsbW03CQkJOyBtbTI9ZGF0YTBICisJcHN1YmQJbW01LG1tNgkJCTsgbW01PWRhdGEzTAorCXBzdWJkCW1tMyxtbTcJCQk7IG1tMz1kYXRhM0gKKworCW1vdnEJbW02LFtHT1RPRkYoZWJ4LFBEX0RFU0NBTEVfUDJfNCldCTsgbW02PVtQRF9ERVNDQUxFX1AyXzRdCisKKwlwYWRkZAltbTEsbW02CisJcGFkZGQJbW0yLG1tNgorCXBzcmFkCW1tMSxERVNDQUxFX1AyXzQKKwlwc3JhZAltbTIsREVTQ0FMRV9QMl80CisJcGFkZGQJbW01LG1tNgorCXBhZGRkCW1tMyxtbTYKKwlwc3JhZAltbTUsREVTQ0FMRV9QMl80CisJcHNyYWQJbW0zLERFU0NBTEVfUDJfNAorCisJcGFja3NzZHcgIG1tMSxtbTIJCTsgbW0xPWRhdGEwPSgwMCAxMCAyMCAzMCkKKwlwYWNrc3NkdyAgbW01LG1tMwkJOyBtbTU9ZGF0YTM9KDAzIDEzIDIzIDMzKQorCisJbW92cQltbTcsIE1NV09SRCBbd2soMCldCTsgbW03PXRtcDBMCisJbW92cQltbTYsIE1NV09SRCBbd2soMSldCTsgbW02PXRtcDBICisKKwltb3ZxCW1tMixtbTQKKwltb3ZxCW1tMyxtbTAKKwlwYWRkZAltbTQsbW03CQkJOyBtbTQ9ZGF0YTFMCisJcGFkZGQJbW0wLG1tNgkJCTsgbW0wPWRhdGExSAorCXBzdWJkCW1tMixtbTcJCQk7IG1tMj1kYXRhMkwKKwlwc3ViZAltbTMsbW02CQkJOyBtbTM9ZGF0YTJICisKKwltb3ZxCW1tNyxbR09UT0ZGKGVieCxQRF9ERVNDQUxFX1AyXzQpXQk7IG1tNz1bUERfREVTQ0FMRV9QMl80XQorCisJcGFkZGQJbW00LG1tNworCXBhZGRkCW1tMCxtbTcKKwlwc3JhZAltbTQsREVTQ0FMRV9QMl80CisJcHNyYWQJbW0wLERFU0NBTEVfUDJfNAorCXBhZGRkCW1tMixtbTcKKwlwYWRkZAltbTMsbW03CisJcHNyYWQJbW0yLERFU0NBTEVfUDJfNAorCXBzcmFkCW1tMyxERVNDQUxFX1AyXzQKKworCXBhY2tzc2R3ICBtbTQsbW0wCQk7IG1tND1kYXRhMT0oMDEgMTEgMjEgMzEpCisJcGFja3NzZHcgIG1tMixtbTMJCTsgbW0yPWRhdGEyPSgwMiAxMiAyMiAzMikKKworCW1vdnEgICAgICBtbTYsW0dPVE9GRihlYngsUEJfQ0VOVEVSSlNBTVApXQk7IG1tNj1bUEJfQ0VOVEVSSlNBTVBdCisKKwlwYWNrc3N3YiAgbW0xLG1tMgkJOyBtbTE9KDAwIDEwIDIwIDMwIDAyIDEyIDIyIDMyKQorCXBhY2tzc3diICBtbTQsbW01CQk7IG1tND0oMDEgMTEgMjEgMzEgMDMgMTMgMjMgMzMpCisJcGFkZGIgICAgIG1tMSxtbTYKKwlwYWRkYiAgICAgbW00LG1tNgorCisJbW92cSAgICAgIG1tNyxtbTEJCTsgdHJhbnNwb3NlIGNvZWZmaWNpZW50cyhwaGFzZSAxKQorCXB1bnBja2xidyBtbTEsbW00CQk7IG1tMT0oMDAgMDEgMTAgMTEgMjAgMjEgMzAgMzEpCisJcHVucGNraGJ3IG1tNyxtbTQJCTsgbW03PSgwMiAwMyAxMiAxMyAyMiAyMyAzMiAzMykKKworCW1vdnEgICAgICBtbTAsbW0xCQk7IHRyYW5zcG9zZSBjb2VmZmljaWVudHMocGhhc2UgMikKKwlwdW5wY2tsd2QgbW0xLG1tNwkJOyBtbTE9KDAwIDAxIDAyIDAzIDEwIDExIDEyIDEzKQorCXB1bnBja2h3ZCBtbTAsbW03CQk7IG1tMD0oMjAgMjEgMjIgMjMgMzAgMzEgMzIgMzMpCisKKwltb3YJZWR4LCBKU0FNUFJPVyBbZWRpKzAqU0laRU9GX0pTQU1QUk9XXQorCW1vdgllc2ksIEpTQU1QUk9XIFtlZGkrMipTSVpFT0ZfSlNBTVBST1ddCisJbW92ZAlEV09SRCBbZWR4K2VheCpTSVpFT0ZfSlNBTVBMRV0sIG1tMQorCW1vdmQJRFdPUkQgW2VzaStlYXgqU0laRU9GX0pTQU1QTEVdLCBtbTAKKworCXBzcmxxCW1tMSw0KkJZVEVfQklUCisJcHNybHEJbW0wLDQqQllURV9CSVQKKworCW1vdgllZHgsIEpTQU1QUk9XIFtlZGkrMSpTSVpFT0ZfSlNBTVBST1ddCisJbW92CWVzaSwgSlNBTVBST1cgW2VkaSszKlNJWkVPRl9KU0FNUFJPV10KKwltb3ZkCURXT1JEIFtlZHgrZWF4KlNJWkVPRl9KU0FNUExFXSwgbW0xCisJbW92ZAlEV09SRCBbZXNpK2VheCpTSVpFT0ZfSlNBTVBMRV0sIG1tMAorCisJZW1tcwkJOyBlbXB0eSBNTVggc3RhdGUKKworCXBvcAllZGkKKwlwb3AJZXNpCis7CXBvcAllZHgJCTsgbmVlZCBub3QgYmUgcHJlc2VydmVkCis7CXBvcAllY3gJCTsgbmVlZCBub3QgYmUgcHJlc2VydmVkCisJcG9wcGljCWVieAorCW1vdgllc3AsZWJwCQk7IGVzcCA8LSBhbGlnbmVkIGVicAorCXBvcAllc3AJCTsgZXNwIDwtIG9yaWdpbmFsIGVicAorCXBvcAllYnAKKwlyZXQKKworCis7IC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCis7Cis7IFBlcmZvcm0gZGVxdWFudGl6YXRpb24gYW5kIGludmVyc2UgRENUIG9uIG9uZSBibG9jayBvZiBjb2VmZmljaWVudHMsCis7IHByb2R1Y2luZyBhIHJlZHVjZWQtc2l6ZSAyeDIgb3V0cHV0IGJsb2NrLgorOworOyBHTE9CQUwodm9pZCkKKzsganNpbWRfaWRjdF8yeDJfbW14ICh2b2lkICogZGN0X3RhYmxlLCBKQ09FRlBUUiBjb2VmX2Jsb2NrLAorOyAgICAgICAgICAgICAgICAgICAgIEpTQU1QQVJSQVkgb3V0cHV0X2J1ZiwgSkRJTUVOU0lPTiBvdXRwdXRfY29sKQorOworCislZGVmaW5lIGRjdF90YWJsZShiKQkoYikrOAkJCTsgdm9pZCAqIGRjdF90YWJsZQorJWRlZmluZSBjb2VmX2Jsb2NrKGIpCShiKSsxMgkJOyBKQ09FRlBUUiBjb2VmX2Jsb2NrCislZGVmaW5lIG91dHB1dF9idWYoYikJKGIpKzE2CQk7IEpTQU1QQVJSQVkgb3V0cHV0X2J1ZgorJWRlZmluZSBvdXRwdXRfY29sKGIpCShiKSsyMAkJOyBKRElNRU5TSU9OIG91dHB1dF9jb2wKKworCWFsaWduCTE2CisJZ2xvYmFsCUVYVE4oanNpbWRfaWRjdF8yeDJfbW14KQorCitFWFROKGpzaW1kX2lkY3RfMngyX21teCk6CisJcHVzaAllYnAKKwltb3YJZWJwLGVzcAorCXB1c2gJZWJ4Cis7CXB1c2gJZWN4CQk7IG5lZWQgbm90IGJlIHByZXNlcnZlZAorOwlwdXNoCWVkeAkJOyBuZWVkIG5vdCBiZSBwcmVzZXJ2ZWQKKwlwdXNoCWVzaQorCXB1c2gJZWRpCisKKwlnZXRfR09UCWVieAkJOyBnZXQgR09UIGFkZHJlc3MKKworCTsgLS0tLSBQYXNzIDE6IHByb2Nlc3MgY29sdW1ucyBmcm9tIGlucHV0LgorCisJbW92CWVkeCwgUE9JTlRFUiBbZGN0X3RhYmxlKGVicCldCTsgcXVhbnRwdHIKKwltb3YJZXNpLCBKQ09FRlBUUiBbY29lZl9ibG9jayhlYnApXQkJOyBpbnB0cgorCisJOyB8IGlucHV0OiAgICAgICAgICAgICAgICAgIHwgcmVzdWx0OiAgICAgICAgfAorCTsgfCAwMCAwMSAqKiAwMyAqKiAwNSAqKiAwNyB8ICAgICAgICAgICAgICAgIHwKKwk7IHwgMTAgMTEgKiogMTMgKiogMTUgKiogMTcgfCAgICAgICAgICAgICAgICB8CisJOyB8ICoqICoqICoqICoqICoqICoqICoqICoqIHwgICAgICAgICAgICAgICAgfAorCTsgfCAzMCAzMSAqKiAzMyAqKiAzNSAqKiAzNyB8IEEwIEExIEEzIEE1IEE3IHwKKwk7IHwgKiogKiogKiogKiogKiogKiogKiogKiogfCBCMCBCMSBCMyBCNSBCNyB8CisJOyB8IDUwIDUxICoqIDUzICoqIDU1ICoqIDU3IHwgICAgICAgICAgICAgICAgfAorCTsgfCAqKiAqKiAqKiAqKiAqKiAqKiAqKiAqKiB8ICAgICAgICAgICAgICAgIHwKKwk7IHwgNzAgNzEgKiogNzMgKiogNzUgKiogNzcgfCAgICAgICAgICAgICAgICB8CisKKwk7IC0tIE9kZCBwYXJ0CisKKwltb3ZxCW1tMCwgTU1XT1JEIFtNTUJMT0NLKDEsMCxlc2ksU0laRU9GX0pDT0VGKV0KKwltb3ZxCW1tMSwgTU1XT1JEIFtNTUJMT0NLKDMsMCxlc2ksU0laRU9GX0pDT0VGKV0KKwlwbXVsbHcJbW0wLCBNTVdPUkQgW01NQkxPQ0soMSwwLGVkeCxTSVpFT0ZfSVNMT1dfTVVMVF9UWVBFKV0KKwlwbXVsbHcJbW0xLCBNTVdPUkQgW01NQkxPQ0soMywwLGVkeCxTSVpFT0ZfSVNMT1dfTVVMVF9UWVBFKV0KKwltb3ZxCW1tMiwgTU1XT1JEIFtNTUJMT0NLKDUsMCxlc2ksU0laRU9GX0pDT0VGKV0KKwltb3ZxCW1tMywgTU1XT1JEIFtNTUJMT0NLKDcsMCxlc2ksU0laRU9GX0pDT0VGKV0KKwlwbXVsbHcJbW0yLCBNTVdPUkQgW01NQkxPQ0soNSwwLGVkeCxTSVpFT0ZfSVNMT1dfTVVMVF9UWVBFKV0KKwlwbXVsbHcJbW0zLCBNTVdPUkQgW01NQkxPQ0soNywwLGVkeCxTSVpFT0ZfSVNMT1dfTVVMVF9UWVBFKV0KKworCTsgbW0wPSgxMCAxMSAqKiAxMyksIG1tMT0oMzAgMzEgKiogMzMpCisJOyBtbTI9KDUwIDUxICoqIDUzKSwgbW0zPSg3MCA3MSAqKiA3MykKKworCXBjbXBlcWQgICBtbTcsbW03CisJcHNsbGQgICAgIG1tNyxXT1JEX0JJVAkJOyBtbTc9ezB4MDAwMCAweEZGRkYgMHgwMDAwIDB4RkZGRn0KKworCW1vdnEgICAgICBtbTQsbW0wCQk7IG1tND0oMTAgMTEgKiogMTMpCisJbW92cSAgICAgIG1tNSxtbTIJCTsgbW01PSg1MCA1MSAqKiA1MykKKwlwdW5wY2tsd2QgbW00LG1tMQkJOyBtbTQ9KDEwIDMwIDExIDMxKQorCXB1bnBja2x3ZCBtbTUsbW0zCQk7IG1tNT0oNTAgNzAgNTEgNzEpCisJcG1hZGR3ZCAgIG1tNCxbR09UT0ZGKGVieCxQV19GMzYyX01GMTI3KV0KKwlwbWFkZHdkICAgbW01LFtHT1RPRkYoZWJ4LFBXX0YwODVfTUYwNzIpXQorCisJcHNybGQJbW0wLFdPUkRfQklUCQk7IG1tMD0oMTEgLS0gMTMgLS0pCisJcGFuZAltbTEsbW03CQkJOyBtbTE9KC0tIDMxIC0tIDMzKQorCXBzcmxkCW1tMixXT1JEX0JJVAkJOyBtbTI9KDUxIC0tIDUzIC0tKQorCXBhbmQJbW0zLG1tNwkJCTsgbW0zPSgtLSA3MSAtLSA3MykKKwlwb3IJbW0wLG1tMQkJCTsgbW0wPSgxMSAzMSAxMyAzMykKKwlwb3IJbW0yLG1tMwkJCTsgbW0yPSg1MSA3MSA1MyA3MykKKwlwbWFkZHdkCW1tMCxbR09UT0ZGKGVieCxQV19GMzYyX01GMTI3KV0KKwlwbWFkZHdkCW1tMixbR09UT0ZGKGVieCxQV19GMDg1X01GMDcyKV0KKworCXBhZGRkCW1tNCxtbTUJCQk7IG1tND10bXAwW2NvbDAgY29sMV0KKworCW1vdnEJbW02LCBNTVdPUkQgW01NQkxPQ0soMSwxLGVzaSxTSVpFT0ZfSkNPRUYpXQorCW1vdnEJbW0xLCBNTVdPUkQgW01NQkxPQ0soMywxLGVzaSxTSVpFT0ZfSkNPRUYpXQorCXBtdWxsdwltbTYsIE1NV09SRCBbTU1CTE9DSygxLDEsZWR4LFNJWkVPRl9JU0xPV19NVUxUX1RZUEUpXQorCXBtdWxsdwltbTEsIE1NV09SRCBbTU1CTE9DSygzLDEsZWR4LFNJWkVPRl9JU0xPV19NVUxUX1RZUEUpXQorCW1vdnEJbW0zLCBNTVdPUkQgW01NQkxPQ0soNSwxLGVzaSxTSVpFT0ZfSkNPRUYpXQorCW1vdnEJbW01LCBNTVdPUkQgW01NQkxPQ0soNywxLGVzaSxTSVpFT0ZfSkNPRUYpXQorCXBtdWxsdwltbTMsIE1NV09SRCBbTU1CTE9DSyg1LDEsZWR4LFNJWkVPRl9JU0xPV19NVUxUX1RZUEUpXQorCXBtdWxsdwltbTUsIE1NV09SRCBbTU1CTE9DSyg3LDEsZWR4LFNJWkVPRl9JU0xPV19NVUxUX1RZUEUpXQorCisJOyBtbTY9KCoqIDE1ICoqIDE3KSwgbW0xPSgqKiAzNSAqKiAzNykKKwk7IG1tMz0oKiogNTUgKiogNTcpLCBtbTU9KCoqIDc1ICoqIDc3KQorCisJcHNybGQJbW02LFdPUkRfQklUCQk7IG1tNj0oMTUgLS0gMTcgLS0pCisJcGFuZAltbTEsbW03CQkJOyBtbTE9KC0tIDM1IC0tIDM3KQorCXBzcmxkCW1tMyxXT1JEX0JJVAkJOyBtbTM9KDU1IC0tIDU3IC0tKQorCXBhbmQJbW01LG1tNwkJCTsgbW01PSgtLSA3NSAtLSA3NykKKwlwb3IJbW02LG1tMQkJCTsgbW02PSgxNSAzNSAxNyAzNykKKwlwb3IJbW0zLG1tNQkJCTsgbW0zPSg1NSA3NSA1NyA3NykKKwlwbWFkZHdkCW1tNixbR09UT0ZGKGVieCxQV19GMzYyX01GMTI3KV0KKwlwbWFkZHdkCW1tMyxbR09UT0ZGKGVieCxQV19GMDg1X01GMDcyKV0KKworCXBhZGRkCW1tMCxtbTIJCQk7IG1tMD10bXAwW2NvbDEgY29sM10KKwlwYWRkZAltbTYsbW0zCQkJOyBtbTY9dG1wMFtjb2w1IGNvbDddCisKKwk7IC0tIEV2ZW4gcGFydAorCisJbW92cQltbTEsIE1NV09SRCBbTU1CTE9DSygwLDAsZXNpLFNJWkVPRl9KQ09FRildCisJbW92cQltbTUsIE1NV09SRCBbTU1CTE9DSygwLDEsZXNpLFNJWkVPRl9KQ09FRildCisJcG11bGx3CW1tMSwgTU1XT1JEIFtNTUJMT0NLKDAsMCxlZHgsU0laRU9GX0lTTE9XX01VTFRfVFlQRSldCisJcG11bGx3CW1tNSwgTU1XT1JEIFtNTUJMT0NLKDAsMSxlZHgsU0laRU9GX0lTTE9XX01VTFRfVFlQRSldCisKKwk7IG1tMT0oMDAgMDEgKiogMDMpLCBtbTU9KCoqIDA1ICoqIDA3KQorCisJbW92cQltbTIsbW0xCQkJCTsgbW0yPSgwMCAwMSAqKiAwMykKKwlwc2xsZAltbTEsV09SRF9CSVQJCQk7IG1tMT0oLS0gMDAgLS0gKiopCisJcHNyYWQJbW0xLChXT1JEX0JJVC1DT05TVF9CSVRTLTIpCTsgbW0xPXRtcDEwW2NvbDAgKioqKl0KKworCXBhbmQJbW0yLG1tNwkJCQk7IG1tMj0oLS0gMDEgLS0gMDMpCisJcGFuZAltbTUsbW03CQkJCTsgbW01PSgtLSAwNSAtLSAwNykKKwlwc3JhZAltbTIsKFdPUkRfQklULUNPTlNUX0JJVFMtMikJOyBtbTI9dG1wMTBbY29sMSBjb2wzXQorCXBzcmFkCW1tNSwoV09SRF9CSVQtQ09OU1RfQklUUy0yKQk7IG1tNT10bXAxMFtjb2w1IGNvbDddCisKKwk7IC0tIEZpbmFsIG91dHB1dCBzdGFnZQorCisJbW92cSAgICAgIG1tMyxtbTEKKwlwYWRkZCAgICAgbW0xLG1tNAkJOyBtbTE9ZGF0YTBbY29sMCAqKioqXT0oQTAgKiopCisJcHN1YmQgICAgIG1tMyxtbTQJCTsgbW0zPWRhdGExW2NvbDAgKioqKl09KEIwICoqKQorCXB1bnBja2xkcSBtbTEsbW0zCQk7IG1tMT0oQTAgQjApCisKKwltb3ZxCW1tNyxbR09UT0ZGKGVieCxQRF9ERVNDQUxFX1AxXzIpXQk7IG1tNz1bUERfREVTQ0FMRV9QMV8yXQorCisJbW92cQltbTQsbW0yCisJbW92cQltbTMsbW01CisJcGFkZGQJbW0yLG1tMAkJCTsgbW0yPWRhdGEwW2NvbDEgY29sM109KEExIEEzKQorCXBhZGRkCW1tNSxtbTYJCQk7IG1tNT1kYXRhMFtjb2w1IGNvbDddPShBNSBBNykKKwlwc3ViZAltbTQsbW0wCQkJOyBtbTQ9ZGF0YTFbY29sMSBjb2wzXT0oQjEgQjMpCisJcHN1YmQJbW0zLG1tNgkJCTsgbW0zPWRhdGExW2NvbDUgY29sN109KEI1IEI3KQorCisJcGFkZGQJbW0xLG1tNworCXBzcmFkCW1tMSxERVNDQUxFX1AxXzIKKworCXBhZGRkCW1tMixtbTcKKwlwYWRkZAltbTUsbW03CisJcHNyYWQJbW0yLERFU0NBTEVfUDFfMgorCXBzcmFkCW1tNSxERVNDQUxFX1AxXzIKKwlwYWRkZAltbTQsbW03CisJcGFkZGQJbW0zLG1tNworCXBzcmFkCW1tNCxERVNDQUxFX1AxXzIKKwlwc3JhZAltbTMsREVTQ0FMRV9QMV8yCisKKwk7IC0tLS0gUGFzcyAyOiBwcm9jZXNzIHJvd3MsIHN0b3JlIGludG8gb3V0cHV0IGFycmF5LgorCisJbW92CWVkaSwgSlNBTVBBUlJBWSBbb3V0cHV0X2J1ZihlYnApXQk7IChKU0FNUFJPVyAqKQorCW1vdgllYXgsIEpESU1FTlNJT04gW291dHB1dF9jb2woZWJwKV0KKworCTsgfCBpbnB1dDp8IHJlc3VsdDp8CisJOyB8IEEwIEIwIHwgICAgICAgIHwKKwk7IHwgQTEgQjEgfCBDMCBDMSAgfAorCTsgfCBBMyBCMyB8IEQwIEQxICB8CisJOyB8IEE1IEI1IHwgICAgICAgIHwKKwk7IHwgQTcgQjcgfCAgICAgICAgfAorCisJOyAtLSBPZGQgcGFydAorCisJcGFja3NzZHcgIG1tMixtbTQJCTsgbW0yPShBMSBBMyBCMSBCMykKKwlwYWNrc3NkdyAgbW01LG1tMwkJOyBtbTU9KEE1IEE3IEI1IEI3KQorCXBtYWRkd2QgICBtbTIsW0dPVE9GRihlYngsUFdfRjM2Ml9NRjEyNyldCisJcG1hZGR3ZCAgIG1tNSxbR09UT0ZGKGVieCxQV19GMDg1X01GMDcyKV0KKworCXBhZGRkICAgICBtbTIsbW01CQk7IG1tMj10bXAwW3JvdzAgcm93MV0KKworCTsgLS0gRXZlbiBwYXJ0CisKKwlwc2xsZCAgICAgbW0xLChDT05TVF9CSVRTKzIpCTsgbW0xPXRtcDEwW3JvdzAgcm93MV0KKworCTsgLS0gRmluYWwgb3V0cHV0IHN0YWdlCisKKwltb3ZxICAgICAgbW0wLFtHT1RPRkYoZWJ4LFBEX0RFU0NBTEVfUDJfMildCTsgbW0wPVtQRF9ERVNDQUxFX1AyXzJdCisKKwltb3ZxICAgICAgbW02LG1tMQorCXBhZGRkICAgICBtbTEsbW0yCQk7IG1tMT1kYXRhMFtyb3cwIHJvdzFdPShDMCBDMSkKKwlwc3ViZCAgICAgbW02LG1tMgkJOyBtbTY9ZGF0YTFbcm93MCByb3cxXT0oRDAgRDEpCisKKwlwYWRkZCAgICAgbW0xLG1tMAorCXBhZGRkICAgICBtbTYsbW0wCisJcHNyYWQgICAgIG1tMSxERVNDQUxFX1AyXzIKKwlwc3JhZCAgICAgbW02LERFU0NBTEVfUDJfMgorCisJbW92cSAgICAgIG1tNyxtbTEJCTsgdHJhbnNwb3NlIGNvZWZmaWNpZW50cworCXB1bnBja2xkcSBtbTEsbW02CQk7IG1tMT0oQzAgRDApCisJcHVucGNraGRxIG1tNyxtbTYJCTsgbW03PShDMSBEMSkKKworCXBhY2tzc2R3ICBtbTEsbW03CQk7IG1tMT0oQzAgRDAgQzEgRDEpCisJcGFja3Nzd2IgIG1tMSxtbTEJCTsgbW0xPShDMCBEMCBDMSBEMSBDMCBEMCBDMSBEMSkKKwlwYWRkYiAgICAgbW0xLFtHT1RPRkYoZWJ4LFBCX0NFTlRFUkpTQU1QKV0KKworCW1vdmQJZWN4LG1tMQorCW1vdmQJZWJ4LG1tMQkJCTsgZWJ4PShDMCBEMCBDMSBEMSkKKwlzaHIJZWN4LDIqQllURV9CSVQJCTsgZWN4PShDMSBEMSAtLSAtLSkKKworCW1vdgllZHgsIEpTQU1QUk9XIFtlZGkrMCpTSVpFT0ZfSlNBTVBST1ddCisJbW92CWVzaSwgSlNBTVBST1cgW2VkaSsxKlNJWkVPRl9KU0FNUFJPV10KKwltb3YJV09SRCBbZWR4K2VheCpTSVpFT0ZfSlNBTVBMRV0sIGJ4CisJbW92CVdPUkQgW2VzaStlYXgqU0laRU9GX0pTQU1QTEVdLCBjeAorCisJZW1tcwkJOyBlbXB0eSBNTVggc3RhdGUKKworCXBvcAllZGkKKwlwb3AJZXNpCis7CXBvcAllZHgJCTsgbmVlZCBub3QgYmUgcHJlc2VydmVkCis7CXBvcAllY3gJCTsgbmVlZCBub3QgYmUgcHJlc2VydmVkCisJcG9wCWVieAorCXBvcAllYnAKKwlyZXQKKworOyBGb3Igc29tZSByZWFzb24sIHRoZSBPUyBYIGxpbmtlciBkb2VzIG5vdCBob25vciB0aGUgcmVxdWVzdCB0byBhbGlnbiB0aGUKKzsgc2VnbWVudCB1bmxlc3Mgd2UgZG8gdGhpcy4KKwlhbGlnbgkxNgpkaWZmIC0tZ2l0IGEvc2ltZC9qaXNzMmZsdC02NC5hc20gYi9zaW1kL2ppc3MyZmx0LTY0LmFzbQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42ZTdlNmQ0Ci0tLSAvZGV2L251bGwKKysrIGIvc2ltZC9qaXNzMmZsdC02NC5hc20KQEAgLTAsMCArMSw0ODMgQEAKKzsKKzsgamlzczJmbHQtNjQuYXNtIC0gZmxvYXRpbmctcG9pbnQgSURDVCAoNjQtYml0IFNTRSAmIFNTRTIpCis7Cis7IENvcHlyaWdodCAyMDA5IFBpZXJyZSBPc3NtYW4gPG9zc21hbkBjZW5kaW8uc2U+IGZvciBDZW5kaW8gQUIKKzsgQ29weXJpZ2h0IDIwMDkgRC4gUi4gQ29tbWFuZGVyCis7Cis7IEJhc2VkIG9uCis7IHg4NiBTSU1EIGV4dGVuc2lvbiBmb3IgSUpHIEpQRUcgbGlicmFyeQorOyBDb3B5cmlnaHQgKEMpIDE5OTktMjAwNiwgTUlZQVNBS0EgTWFzYXJ1LgorOyBGb3IgY29uZGl0aW9ucyBvZiBkaXN0cmlidXRpb24gYW5kIHVzZSwgc2VlIGNvcHlyaWdodCBub3RpY2UgaW4ganNpbWRleHQuaW5jCis7Cis7IFRoaXMgZmlsZSBzaG91bGQgYmUgYXNzZW1ibGVkIHdpdGggTkFTTSAoTmV0d2lkZSBBc3NlbWJsZXIpLAorOyBjYW4gKm5vdCogYmUgYXNzZW1ibGVkIHdpdGggTWljcm9zb2Z0J3MgTUFTTSBvciBhbnkgY29tcGF0aWJsZQorOyBhc3NlbWJsZXIgKGluY2x1ZGluZyBCb3JsYW5kJ3MgVHVyYm8gQXNzZW1ibGVyKS4KKzsgTkFTTSBpcyBhdmFpbGFibGUgZnJvbSBodHRwOi8vbmFzbS5zb3VyY2Vmb3JnZS5uZXQvIG9yCis7IGh0dHA6Ly9zb3VyY2Vmb3JnZS5uZXQvcHJvamVjdC9zaG93ZmlsZXMucGhwP2dyb3VwX2lkPTYyMDgKKzsKKzsgVGhpcyBmaWxlIGNvbnRhaW5zIGEgZmxvYXRpbmctcG9pbnQgaW1wbGVtZW50YXRpb24gb2YgdGhlIGludmVyc2UgRENUCis7IChEaXNjcmV0ZSBDb3NpbmUgVHJhbnNmb3JtKS4gVGhlIGZvbGxvd2luZyBjb2RlIGlzIGJhc2VkIGRpcmVjdGx5IG9uCis7IHRoZSBJSkcncyBvcmlnaW5hbCBqaWRjdGZsdC5jOyBzZWUgdGhlIGppZGN0Zmx0LmMgZm9yIG1vcmUgZGV0YWlscy4KKzsKKzsgW1RBQjhdCisKKyVpbmNsdWRlICJqc2ltZGV4dC5pbmMiCislaW5jbHVkZSAiamRjdC5pbmMiCisKKzsgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworJW1hY3JvCXVucGNrbHBzMiAyCTsgJTE9KDAgMSAyIDMpIC8gJTI9KDQgNSA2IDcpID0+ICUxPSgwIDEgNCA1KQorCXNodWZwcwklMSwlMiwweDQ0CislZW5kbWFjcm8KKworJW1hY3JvCXVucGNraHBzMiAyCTsgJTE9KDAgMSAyIDMpIC8gJTI9KDQgNSA2IDcpID0+ICUxPSgyIDMgNiA3KQorCXNodWZwcwklMSwlMiwweEVFCislZW5kbWFjcm8KKworOyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCVNFQ1RJT04JU0VHX0NPTlNUCisKKwlhbGlnbnoJMTYKKwlnbG9iYWwJRVhUTihqY29uc3RfaWRjdF9mbG9hdF9zc2UyKQorCitFWFROKGpjb25zdF9pZGN0X2Zsb2F0X3NzZTIpOgorCitQRF8xXzQxNAl0aW1lcyA0IGRkICAxLjQxNDIxMzU2MjM3MzA5NTA0ODgwMTY4OQorUERfMV84NDcJdGltZXMgNCBkZCAgMS44NDc3NTkwNjUwMjI1NzM1MTIyNTYzNjYKK1BEXzFfMDgyCXRpbWVzIDQgZGQgIDEuMDgyMzkyMjAwMjkyMzkzOTY4Nzk5NDQ2CitQRF9NMl82MTMJdGltZXMgNCBkZCAtMi42MTMxMjU5Mjk3NTI3NTMwNTU3MTMyODYKK1BEX1JORElOVF9NQUdJQwl0aW1lcyA0IGRkICAxMDA2NjMyOTYuMAk7IChmbG9hdCkoMHgwMEMwMDAwMCA8PCAzKQorUEJfQ0VOVEVSSlNBTVAJdGltZXMgMTYgZGIgQ0VOVEVSSlNBTVBMRQorCisJYWxpZ256CTE2CisKKzsgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKwlTRUNUSU9OCVNFR19URVhUCisJQklUUwk2NAorOworOyBQZXJmb3JtIGRlcXVhbnRpemF0aW9uIGFuZCBpbnZlcnNlIERDVCBvbiBvbmUgYmxvY2sgb2YgY29lZmZpY2llbnRzLgorOworOyBHTE9CQUwodm9pZCkKKzsganNpbWRfaWRjdF9mbG9hdF9zc2UyICh2b2lkICogZGN0X3RhYmxlLCBKQ09FRlBUUiBjb2VmX2Jsb2NrLAorOyAgICAgICAgICAgICAgICAgICAgICAgIEpTQU1QQVJSQVkgb3V0cHV0X2J1ZiwgSkRJTUVOU0lPTiBvdXRwdXRfY29sKQorOworCis7IHIxMCA9IHZvaWQgKiBkY3RfdGFibGUKKzsgcjExID0gSkNPRUZQVFIgY29lZl9ibG9jaworOyByMTIgPSBKU0FNUEFSUkFZIG91dHB1dF9idWYKKzsgcjEzID0gSkRJTUVOU0lPTiBvdXRwdXRfY29sCisKKyVkZWZpbmUgb3JpZ2luYWxfcmJwCXJicCswCislZGVmaW5lIHdrKGkpCQlyYnAtKFdLX05VTS0oaSkpKlNJWkVPRl9YTU1XT1JECTsgeG1td29yZCB3a1tXS19OVU1dCislZGVmaW5lIFdLX05VTQkJMgorJWRlZmluZSB3b3Jrc3BhY2UJd2soMCktRENUU0laRTIqU0laRU9GX0ZBU1RfRkxPQVQKKwkJCQkJOyBGQVNUX0ZMT0FUIHdvcmtzcGFjZVtEQ1RTSVpFMl0KKworCWFsaWduCTE2CisJZ2xvYmFsCUVYVE4oanNpbWRfaWRjdF9mbG9hdF9zc2UyKQorCitFWFROKGpzaW1kX2lkY3RfZmxvYXRfc3NlMik6CisJcHVzaAlyYnAKKwltb3YJcmF4LHJzcAkJCQk7IHJheCA9IG9yaWdpbmFsIHJicAorCXN1Yglyc3AsIGJ5dGUgNAorCWFuZAlyc3AsIGJ5dGUgKC1TSVpFT0ZfWE1NV09SRCkJOyBhbGlnbiB0byAxMjggYml0cworCW1vdglbcnNwXSxyYXgKKwltb3YJcmJwLHJzcAkJCQk7IHJicCA9IGFsaWduZWQgcmJwCisJbGVhCXJzcCwgW3dvcmtzcGFjZV0KKwljb2xsZWN0X2FyZ3MKKwlwdXNoCXJieAorCisJOyAtLS0tIFBhc3MgMTogcHJvY2VzcyBjb2x1bW5zIGZyb20gaW5wdXQsIHN0b3JlIGludG8gd29yayBhcnJheS4KKworCW1vdglyZHgsIHIxMAk7IHF1YW50cHRyCisJbW92CXJzaSwgcjExCQk7IGlucHRyCisJbGVhCXJkaSwgW3dvcmtzcGFjZV0JCQk7IEZBU1RfRkxPQVQgKiB3c3B0cgorCW1vdglyY3gsIERDVFNJWkUvNAkJCQk7IGN0cgorLmNvbHVtbmxvb3A6CislaWZuZGVmIE5PX1pFUk9fQ09MVU1OX1RFU1RfRkxPQVRfU1NFCisJbW92CWVheCwgRFdPUkQgW0RXQkxPQ0soMSwwLHJzaSxTSVpFT0ZfSkNPRUYpXQorCW9yCWVheCwgRFdPUkQgW0RXQkxPQ0soMiwwLHJzaSxTSVpFT0ZfSkNPRUYpXQorCWpuegluZWFyIC5jb2x1bW5EQ1QKKworCW1vdnEJeG1tMSwgWE1NX01NV09SRCBbTU1CTE9DSygxLDAscnNpLFNJWkVPRl9KQ09FRildCisJbW92cQl4bW0yLCBYTU1fTU1XT1JEIFtNTUJMT0NLKDIsMCxyc2ksU0laRU9GX0pDT0VGKV0KKwltb3ZxCXhtbTMsIFhNTV9NTVdPUkQgW01NQkxPQ0soMywwLHJzaSxTSVpFT0ZfSkNPRUYpXQorCW1vdnEJeG1tNCwgWE1NX01NV09SRCBbTU1CTE9DSyg0LDAscnNpLFNJWkVPRl9KQ09FRildCisJbW92cQl4bW01LCBYTU1fTU1XT1JEIFtNTUJMT0NLKDUsMCxyc2ksU0laRU9GX0pDT0VGKV0KKwltb3ZxCXhtbTYsIFhNTV9NTVdPUkQgW01NQkxPQ0soNiwwLHJzaSxTSVpFT0ZfSkNPRUYpXQorCW1vdnEJeG1tNywgWE1NX01NV09SRCBbTU1CTE9DSyg3LDAscnNpLFNJWkVPRl9KQ09FRildCisJcG9yCXhtbTEseG1tMgorCXBvcgl4bW0zLHhtbTQKKwlwb3IJeG1tNSx4bW02CisJcG9yCXhtbTEseG1tMworCXBvcgl4bW01LHhtbTcKKwlwb3IJeG1tMSx4bW01CisJcGFja3Nzd2IgeG1tMSx4bW0xCisJbW92ZAllYXgseG1tMQorCXRlc3QJcmF4LHJheAorCWpueglzaG9ydCAuY29sdW1uRENUCisKKwk7IC0tIEFDIHRlcm1zIGFsbCB6ZXJvCisKKwltb3ZxICAgICAgeG1tMCwgWE1NX01NV09SRCBbTU1CTE9DSygwLDAscnNpLFNJWkVPRl9KQ09FRildCisKKwlwdW5wY2tsd2QgeG1tMCx4bW0wCQk7IHhtbTA9KDAwIDAwIDAxIDAxIDAyIDAyIDAzIDAzKQorCXBzcmFkICAgICB4bW0wLChEV09SRF9CSVQtV09SRF9CSVQpCTsgeG1tMD1pbjA9KDAwIDAxIDAyIDAzKQorCWN2dGRxMnBzICB4bW0wLHhtbTAJCQk7IHhtbTA9aW4wPSgwMCAwMSAwMiAwMykKKworCW11bHBzCXhtbTAsIFhNTVdPUkQgW1hNTUJMT0NLKDAsMCxyZHgsU0laRU9GX0ZMT0FUX01VTFRfVFlQRSldCisKKwltb3ZhcHMJeG1tMSx4bW0wCisJbW92YXBzCXhtbTIseG1tMAorCW1vdmFwcwl4bW0zLHhtbTAKKworCXNodWZwcwl4bW0wLHhtbTAsMHgwMAkJCTsgeG1tMD0oMDAgMDAgMDAgMDApCisJc2h1ZnBzCXhtbTEseG1tMSwweDU1CQkJOyB4bW0xPSgwMSAwMSAwMSAwMSkKKwlzaHVmcHMJeG1tMix4bW0yLDB4QUEJCQk7IHhtbTI9KDAyIDAyIDAyIDAyKQorCXNodWZwcwl4bW0zLHhtbTMsMHhGRgkJCTsgeG1tMz0oMDMgMDMgMDMgMDMpCisKKwltb3ZhcHMJWE1NV09SRCBbWE1NQkxPQ0soMCwwLHJkaSxTSVpFT0ZfRkFTVF9GTE9BVCldLCB4bW0wCisJbW92YXBzCVhNTVdPUkQgW1hNTUJMT0NLKDAsMSxyZGksU0laRU9GX0ZBU1RfRkxPQVQpXSwgeG1tMAorCW1vdmFwcwlYTU1XT1JEIFtYTU1CTE9DSygxLDAscmRpLFNJWkVPRl9GQVNUX0ZMT0FUKV0sIHhtbTEKKwltb3ZhcHMJWE1NV09SRCBbWE1NQkxPQ0soMSwxLHJkaSxTSVpFT0ZfRkFTVF9GTE9BVCldLCB4bW0xCisJbW92YXBzCVhNTVdPUkQgW1hNTUJMT0NLKDIsMCxyZGksU0laRU9GX0ZBU1RfRkxPQVQpXSwgeG1tMgorCW1vdmFwcwlYTU1XT1JEIFtYTU1CTE9DSygyLDEscmRpLFNJWkVPRl9GQVNUX0ZMT0FUKV0sIHhtbTIKKwltb3ZhcHMJWE1NV09SRCBbWE1NQkxPQ0soMywwLHJkaSxTSVpFT0ZfRkFTVF9GTE9BVCldLCB4bW0zCisJbW92YXBzCVhNTVdPUkQgW1hNTUJMT0NLKDMsMSxyZGksU0laRU9GX0ZBU1RfRkxPQVQpXSwgeG1tMworCWptcAluZWFyIC5uZXh0Y29sdW1uCislZW5kaWYKKy5jb2x1bW5EQ1Q6CisKKwk7IC0tIEV2ZW4gcGFydAorCisJbW92cSAgICAgIHhtbTAsIFhNTV9NTVdPUkQgW01NQkxPQ0soMCwwLHJzaSxTSVpFT0ZfSkNPRUYpXQorCW1vdnEgICAgICB4bW0xLCBYTU1fTU1XT1JEIFtNTUJMT0NLKDIsMCxyc2ksU0laRU9GX0pDT0VGKV0KKwltb3ZxICAgICAgeG1tMiwgWE1NX01NV09SRCBbTU1CTE9DSyg0LDAscnNpLFNJWkVPRl9KQ09FRildCisJbW92cSAgICAgIHhtbTMsIFhNTV9NTVdPUkQgW01NQkxPQ0soNiwwLHJzaSxTSVpFT0ZfSkNPRUYpXQorCisJcHVucGNrbHdkIHhtbTAseG1tMAkJOyB4bW0wPSgwMCAwMCAwMSAwMSAwMiAwMiAwMyAwMykKKwlwdW5wY2tsd2QgeG1tMSx4bW0xCQk7IHhtbTE9KDIwIDIwIDIxIDIxIDIyIDIyIDIzIDIzKQorCXBzcmFkICAgICB4bW0wLChEV09SRF9CSVQtV09SRF9CSVQpCTsgeG1tMD1pbjA9KDAwIDAxIDAyIDAzKQorCXBzcmFkICAgICB4bW0xLChEV09SRF9CSVQtV09SRF9CSVQpCTsgeG1tMT1pbjI9KDIwIDIxIDIyIDIzKQorCWN2dGRxMnBzICB4bW0wLHhtbTAJCQk7IHhtbTA9aW4wPSgwMCAwMSAwMiAwMykKKwljdnRkcTJwcyAgeG1tMSx4bW0xCQkJOyB4bW0xPWluMj0oMjAgMjEgMjIgMjMpCisKKwlwdW5wY2tsd2QgeG1tMix4bW0yCQk7IHhtbTI9KDQwIDQwIDQxIDQxIDQyIDQyIDQzIDQzKQorCXB1bnBja2x3ZCB4bW0zLHhtbTMJCTsgeG1tMz0oNjAgNjAgNjEgNjEgNjIgNjIgNjMgNjMpCisJcHNyYWQgICAgIHhtbTIsKERXT1JEX0JJVC1XT1JEX0JJVCkJOyB4bW0yPWluND0oNDAgNDEgNDIgNDMpCisJcHNyYWQgICAgIHhtbTMsKERXT1JEX0JJVC1XT1JEX0JJVCkJOyB4bW0zPWluNj0oNjAgNjEgNjIgNjMpCisJY3Z0ZHEycHMgIHhtbTIseG1tMgkJCTsgeG1tMj1pbjQ9KDQwIDQxIDQyIDQzKQorCWN2dGRxMnBzICB4bW0zLHhtbTMJCQk7IHhtbTM9aW42PSg2MCA2MSA2MiA2MykKKworCW11bHBzICAgICB4bW0wLCBYTU1XT1JEIFtYTU1CTE9DSygwLDAscmR4LFNJWkVPRl9GTE9BVF9NVUxUX1RZUEUpXQorCW11bHBzICAgICB4bW0xLCBYTU1XT1JEIFtYTU1CTE9DSygyLDAscmR4LFNJWkVPRl9GTE9BVF9NVUxUX1RZUEUpXQorCW11bHBzICAgICB4bW0yLCBYTU1XT1JEIFtYTU1CTE9DSyg0LDAscmR4LFNJWkVPRl9GTE9BVF9NVUxUX1RZUEUpXQorCW11bHBzICAgICB4bW0zLCBYTU1XT1JEIFtYTU1CTE9DSyg2LDAscmR4LFNJWkVPRl9GTE9BVF9NVUxUX1RZUEUpXQorCisJbW92YXBzCXhtbTQseG1tMAorCW1vdmFwcwl4bW01LHhtbTEKKwlzdWJwcwl4bW0wLHhtbTIJCTsgeG1tMD10bXAxMQorCXN1YnBzCXhtbTEseG1tMworCWFkZHBzCXhtbTQseG1tMgkJOyB4bW00PXRtcDEwCisJYWRkcHMJeG1tNSx4bW0zCQk7IHhtbTU9dG1wMTMKKworCW11bHBzCXhtbTEsW3JlbCBQRF8xXzQxNF0KKwlzdWJwcwl4bW0xLHhtbTUJCTsgeG1tMT10bXAxMgorCisJbW92YXBzCXhtbTYseG1tNAorCW1vdmFwcwl4bW03LHhtbTAKKwlzdWJwcwl4bW00LHhtbTUJCTsgeG1tND10bXAzCisJc3VicHMJeG1tMCx4bW0xCQk7IHhtbTA9dG1wMgorCWFkZHBzCXhtbTYseG1tNQkJOyB4bW02PXRtcDAKKwlhZGRwcwl4bW03LHhtbTEJCTsgeG1tNz10bXAxCisKKwltb3ZhcHMJWE1NV09SRCBbd2soMSldLCB4bW00CTsgdG1wMworCW1vdmFwcwlYTU1XT1JEIFt3aygwKV0sIHhtbTAJOyB0bXAyCisKKwk7IC0tIE9kZCBwYXJ0CisKKwltb3ZxICAgICAgeG1tMiwgWE1NX01NV09SRCBbTU1CTE9DSygxLDAscnNpLFNJWkVPRl9KQ09FRildCisJbW92cSAgICAgIHhtbTMsIFhNTV9NTVdPUkQgW01NQkxPQ0soMywwLHJzaSxTSVpFT0ZfSkNPRUYpXQorCW1vdnEgICAgICB4bW01LCBYTU1fTU1XT1JEIFtNTUJMT0NLKDUsMCxyc2ksU0laRU9GX0pDT0VGKV0KKwltb3ZxICAgICAgeG1tMSwgWE1NX01NV09SRCBbTU1CTE9DSyg3LDAscnNpLFNJWkVPRl9KQ09FRildCisKKwlwdW5wY2tsd2QgeG1tMix4bW0yCQk7IHhtbTI9KDEwIDEwIDExIDExIDEyIDEyIDEzIDEzKQorCXB1bnBja2x3ZCB4bW0zLHhtbTMJCTsgeG1tMz0oMzAgMzAgMzEgMzEgMzIgMzIgMzMgMzMpCisJcHNyYWQgICAgIHhtbTIsKERXT1JEX0JJVC1XT1JEX0JJVCkJOyB4bW0yPWluMT0oMTAgMTEgMTIgMTMpCisJcHNyYWQgICAgIHhtbTMsKERXT1JEX0JJVC1XT1JEX0JJVCkJOyB4bW0zPWluMz0oMzAgMzEgMzIgMzMpCisJY3Z0ZHEycHMgIHhtbTIseG1tMgkJCTsgeG1tMj1pbjE9KDEwIDExIDEyIDEzKQorCWN2dGRxMnBzICB4bW0zLHhtbTMJCQk7IHhtbTM9aW4zPSgzMCAzMSAzMiAzMykKKworCXB1bnBja2x3ZCB4bW01LHhtbTUJCTsgeG1tNT0oNTAgNTAgNTEgNTEgNTIgNTIgNTMgNTMpCisJcHVucGNrbHdkIHhtbTEseG1tMQkJOyB4bW0xPSg3MCA3MCA3MSA3MSA3MiA3MiA3MyA3MykKKwlwc3JhZCAgICAgeG1tNSwoRFdPUkRfQklULVdPUkRfQklUKQk7IHhtbTU9aW41PSg1MCA1MSA1MiA1MykKKwlwc3JhZCAgICAgeG1tMSwoRFdPUkRfQklULVdPUkRfQklUKQk7IHhtbTE9aW43PSg3MCA3MSA3MiA3MykKKwljdnRkcTJwcyAgeG1tNSx4bW01CQkJOyB4bW01PWluNT0oNTAgNTEgNTIgNTMpCisJY3Z0ZHEycHMgIHhtbTEseG1tMQkJCTsgeG1tMT1pbjc9KDcwIDcxIDcyIDczKQorCisJbXVscHMgICAgIHhtbTIsIFhNTVdPUkQgW1hNTUJMT0NLKDEsMCxyZHgsU0laRU9GX0ZMT0FUX01VTFRfVFlQRSldCisJbXVscHMgICAgIHhtbTMsIFhNTVdPUkQgW1hNTUJMT0NLKDMsMCxyZHgsU0laRU9GX0ZMT0FUX01VTFRfVFlQRSldCisJbXVscHMgICAgIHhtbTUsIFhNTVdPUkQgW1hNTUJMT0NLKDUsMCxyZHgsU0laRU9GX0ZMT0FUX01VTFRfVFlQRSldCisJbXVscHMgICAgIHhtbTEsIFhNTVdPUkQgW1hNTUJMT0NLKDcsMCxyZHgsU0laRU9GX0ZMT0FUX01VTFRfVFlQRSldCisKKwltb3ZhcHMJeG1tNCx4bW0yCisJbW92YXBzCXhtbTAseG1tNQorCWFkZHBzCXhtbTIseG1tMQkJOyB4bW0yPXoxMQorCWFkZHBzCXhtbTUseG1tMwkJOyB4bW01PXoxMworCXN1YnBzCXhtbTQseG1tMQkJOyB4bW00PXoxMgorCXN1YnBzCXhtbTAseG1tMwkJOyB4bW0wPXoxMAorCisJbW92YXBzCXhtbTEseG1tMgorCXN1YnBzCXhtbTIseG1tNQorCWFkZHBzCXhtbTEseG1tNQkJOyB4bW0xPXRtcDcKKworCW11bHBzCXhtbTIsW3JlbCBQRF8xXzQxNF0JOyB4bW0yPXRtcDExCisKKwltb3ZhcHMJeG1tMyx4bW0wCisJYWRkcHMJeG1tMCx4bW00CisJbXVscHMJeG1tMCxbcmVsIFBEXzFfODQ3XQk7IHhtbTA9ejUKKwltdWxwcwl4bW0zLFtyZWwgUERfTTJfNjEzXQk7IHhtbTM9KHoxMCAqIC0yLjYxMzEyNTkzMCkKKwltdWxwcwl4bW00LFtyZWwgUERfMV8wODJdCTsgeG1tND0oejEyICogMS4wODIzOTIyMDApCisJYWRkcHMJeG1tMyx4bW0wCQk7IHhtbTM9dG1wMTIKKwlzdWJwcwl4bW00LHhtbTAJCTsgeG1tND10bXAxMAorCisJOyAtLSBGaW5hbCBvdXRwdXQgc3RhZ2UKKworCXN1YnBzCXhtbTMseG1tMQkJOyB4bW0zPXRtcDYKKwltb3ZhcHMJeG1tNSx4bW02CisJbW92YXBzCXhtbTAseG1tNworCWFkZHBzCXhtbTYseG1tMQkJOyB4bW02PWRhdGEwPSgwMCAwMSAwMiAwMykKKwlhZGRwcwl4bW03LHhtbTMJCTsgeG1tNz1kYXRhMT0oMTAgMTEgMTIgMTMpCisJc3VicHMJeG1tNSx4bW0xCQk7IHhtbTU9ZGF0YTc9KDcwIDcxIDcyIDczKQorCXN1YnBzCXhtbTAseG1tMwkJOyB4bW0wPWRhdGE2PSg2MCA2MSA2MiA2MykKKwlzdWJwcwl4bW0yLHhtbTMJCTsgeG1tMj10bXA1CisKKwltb3ZhcHMgICAgeG1tMSx4bW02CQk7IHRyYW5zcG9zZSBjb2VmZmljaWVudHMocGhhc2UgMSkKKwl1bnBja2xwcyAgeG1tNix4bW03CQk7IHhtbTY9KDAwIDEwIDAxIDExKQorCXVucGNraHBzICB4bW0xLHhtbTcJCTsgeG1tMT0oMDIgMTIgMDMgMTMpCisJbW92YXBzICAgIHhtbTMseG1tMAkJOyB0cmFuc3Bvc2UgY29lZmZpY2llbnRzKHBoYXNlIDEpCisJdW5wY2tscHMgIHhtbTAseG1tNQkJOyB4bW0wPSg2MCA3MCA2MSA3MSkKKwl1bnBja2hwcyAgeG1tMyx4bW01CQk7IHhtbTM9KDYyIDcyIDYzIDczKQorCisJbW92YXBzCXhtbTcsIFhNTVdPUkQgW3drKDApXQk7IHhtbTc9dG1wMgorCW1vdmFwcwl4bW01LCBYTU1XT1JEIFt3aygxKV0JOyB4bW01PXRtcDMKKworCW1vdmFwcwlYTU1XT1JEIFt3aygwKV0sIHhtbTAJOyB3aygwKT0oNjAgNzAgNjEgNzEpCisJbW92YXBzCVhNTVdPUkQgW3drKDEpXSwgeG1tMwk7IHdrKDEpPSg2MiA3MiA2MyA3MykKKworCWFkZHBzCXhtbTQseG1tMgkJOyB4bW00PXRtcDQKKwltb3ZhcHMJeG1tMCx4bW03CisJbW92YXBzCXhtbTMseG1tNQorCWFkZHBzCXhtbTcseG1tMgkJOyB4bW03PWRhdGEyPSgyMCAyMSAyMiAyMykKKwlhZGRwcwl4bW01LHhtbTQJCTsgeG1tNT1kYXRhND0oNDAgNDEgNDIgNDMpCisJc3VicHMJeG1tMCx4bW0yCQk7IHhtbTA9ZGF0YTU9KDUwIDUxIDUyIDUzKQorCXN1YnBzCXhtbTMseG1tNAkJOyB4bW0zPWRhdGEzPSgzMCAzMSAzMiAzMykKKworCW1vdmFwcyAgICB4bW0yLHhtbTcJCTsgdHJhbnNwb3NlIGNvZWZmaWNpZW50cyhwaGFzZSAxKQorCXVucGNrbHBzICB4bW03LHhtbTMJCTsgeG1tNz0oMjAgMzAgMjEgMzEpCisJdW5wY2tocHMgIHhtbTIseG1tMwkJOyB4bW0yPSgyMiAzMiAyMyAzMykKKwltb3ZhcHMgICAgeG1tNCx4bW01CQk7IHRyYW5zcG9zZSBjb2VmZmljaWVudHMocGhhc2UgMSkKKwl1bnBja2xwcyAgeG1tNSx4bW0wCQk7IHhtbTU9KDQwIDUwIDQxIDUxKQorCXVucGNraHBzICB4bW00LHhtbTAJCTsgeG1tND0oNDIgNTIgNDMgNTMpCisKKwltb3ZhcHMgICAgeG1tMyx4bW02CQk7IHRyYW5zcG9zZSBjb2VmZmljaWVudHMocGhhc2UgMikKKwl1bnBja2xwczIgeG1tNix4bW03CQk7IHhtbTY9KDAwIDEwIDIwIDMwKQorCXVucGNraHBzMiB4bW0zLHhtbTcJCTsgeG1tMz0oMDEgMTEgMjEgMzEpCisJbW92YXBzICAgIHhtbTAseG1tMQkJOyB0cmFuc3Bvc2UgY29lZmZpY2llbnRzKHBoYXNlIDIpCisJdW5wY2tscHMyIHhtbTEseG1tMgkJOyB4bW0xPSgwMiAxMiAyMiAzMikKKwl1bnBja2hwczIgeG1tMCx4bW0yCQk7IHhtbTA9KDAzIDEzIDIzIDMzKQorCisJbW92YXBzCXhtbTcsIFhNTVdPUkQgW3drKDApXQk7IHhtbTc9KDYwIDcwIDYxIDcxKQorCW1vdmFwcwl4bW0yLCBYTU1XT1JEIFt3aygxKV0JOyB4bW0yPSg2MiA3MiA2MyA3MykKKworCW1vdmFwcwlYTU1XT1JEIFtYTU1CTE9DSygwLDAscmRpLFNJWkVPRl9GQVNUX0ZMT0FUKV0sIHhtbTYKKwltb3ZhcHMJWE1NV09SRCBbWE1NQkxPQ0soMSwwLHJkaSxTSVpFT0ZfRkFTVF9GTE9BVCldLCB4bW0zCisJbW92YXBzCVhNTVdPUkQgW1hNTUJMT0NLKDIsMCxyZGksU0laRU9GX0ZBU1RfRkxPQVQpXSwgeG1tMQorCW1vdmFwcwlYTU1XT1JEIFtYTU1CTE9DSygzLDAscmRpLFNJWkVPRl9GQVNUX0ZMT0FUKV0sIHhtbTAKKworCW1vdmFwcyAgICB4bW02LHhtbTUJCTsgdHJhbnNwb3NlIGNvZWZmaWNpZW50cyhwaGFzZSAyKQorCXVucGNrbHBzMiB4bW01LHhtbTcJCTsgeG1tNT0oNDAgNTAgNjAgNzApCisJdW5wY2tocHMyIHhtbTYseG1tNwkJOyB4bW02PSg0MSA1MSA2MSA3MSkKKwltb3ZhcHMgICAgeG1tMyx4bW00CQk7IHRyYW5zcG9zZSBjb2VmZmljaWVudHMocGhhc2UgMikKKwl1bnBja2xwczIgeG1tNCx4bW0yCQk7IHhtbTQ9KDQyIDUyIDYyIDcyKQorCXVucGNraHBzMiB4bW0zLHhtbTIJCTsgeG1tMz0oNDMgNTMgNjMgNzMpCisKKwltb3ZhcHMJWE1NV09SRCBbWE1NQkxPQ0soMCwxLHJkaSxTSVpFT0ZfRkFTVF9GTE9BVCldLCB4bW01CisJbW92YXBzCVhNTVdPUkQgW1hNTUJMT0NLKDEsMSxyZGksU0laRU9GX0ZBU1RfRkxPQVQpXSwgeG1tNgorCW1vdmFwcwlYTU1XT1JEIFtYTU1CTE9DSygyLDEscmRpLFNJWkVPRl9GQVNUX0ZMT0FUKV0sIHhtbTQKKwltb3ZhcHMJWE1NV09SRCBbWE1NQkxPQ0soMywxLHJkaSxTSVpFT0ZfRkFTVF9GTE9BVCldLCB4bW0zCisKKy5uZXh0Y29sdW1uOgorCWFkZAlyc2ksIGJ5dGUgNCpTSVpFT0ZfSkNPRUYJCTsgY29lZl9ibG9jaworCWFkZAlyZHgsIGJ5dGUgNCpTSVpFT0ZfRkxPQVRfTVVMVF9UWVBFCTsgcXVhbnRwdHIKKwlhZGQJcmRpLCAgICAgIDQqRENUU0laRSpTSVpFT0ZfRkFTVF9GTE9BVAk7IHdzcHRyCisJZGVjCXJjeAkJCQkJOyBjdHIKKwlqbnoJbmVhciAuY29sdW1ubG9vcAorCisJOyAtLSBQcmVmZXRjaCB0aGUgbmV4dCBjb2VmZmljaWVudCBibG9jaworCisJcHJlZmV0Y2hudGEgW3JzaSArIChEQ1RTSVpFMi04KSpTSVpFT0ZfSkNPRUYgKyAwKjMyXQorCXByZWZldGNobnRhIFtyc2kgKyAoRENUU0laRTItOCkqU0laRU9GX0pDT0VGICsgMSozMl0KKwlwcmVmZXRjaG50YSBbcnNpICsgKERDVFNJWkUyLTgpKlNJWkVPRl9KQ09FRiArIDIqMzJdCisJcHJlZmV0Y2hudGEgW3JzaSArIChEQ1RTSVpFMi04KSpTSVpFT0ZfSkNPRUYgKyAzKjMyXQorCisJOyAtLS0tIFBhc3MgMjogcHJvY2VzcyByb3dzIGZyb20gd29yayBhcnJheSwgc3RvcmUgaW50byBvdXRwdXQgYXJyYXkuCisKKwltb3YJcmF4LCBbb3JpZ2luYWxfcmJwXQorCWxlYQlyc2ksIFt3b3Jrc3BhY2VdCQkJOyBGQVNUX0ZMT0FUICogd3NwdHIKKwltb3YJcmRpLCByMTIJOyAoSlNBTVBST1cgKikKKwltb3YJcmF4LCByMTMKKwltb3YJcmN4LCBEQ1RTSVpFLzQJCQkJOyBjdHIKKy5yb3dsb29wOgorCisJOyAtLSBFdmVuIHBhcnQKKworCW1vdmFwcwl4bW0wLCBYTU1XT1JEIFtYTU1CTE9DSygwLDAscnNpLFNJWkVPRl9GQVNUX0ZMT0FUKV0KKwltb3ZhcHMJeG1tMSwgWE1NV09SRCBbWE1NQkxPQ0soMiwwLHJzaSxTSVpFT0ZfRkFTVF9GTE9BVCldCisJbW92YXBzCXhtbTIsIFhNTVdPUkQgW1hNTUJMT0NLKDQsMCxyc2ksU0laRU9GX0ZBU1RfRkxPQVQpXQorCW1vdmFwcwl4bW0zLCBYTU1XT1JEIFtYTU1CTE9DSyg2LDAscnNpLFNJWkVPRl9GQVNUX0ZMT0FUKV0KKworCW1vdmFwcwl4bW00LHhtbTAKKwltb3ZhcHMJeG1tNSx4bW0xCisJc3VicHMJeG1tMCx4bW0yCQk7IHhtbTA9dG1wMTEKKwlzdWJwcwl4bW0xLHhtbTMKKwlhZGRwcwl4bW00LHhtbTIJCTsgeG1tND10bXAxMAorCWFkZHBzCXhtbTUseG1tMwkJOyB4bW01PXRtcDEzCisKKwltdWxwcwl4bW0xLFtyZWwgUERfMV80MTRdCisJc3VicHMJeG1tMSx4bW01CQk7IHhtbTE9dG1wMTIKKworCW1vdmFwcwl4bW02LHhtbTQKKwltb3ZhcHMJeG1tNyx4bW0wCisJc3VicHMJeG1tNCx4bW01CQk7IHhtbTQ9dG1wMworCXN1YnBzCXhtbTAseG1tMQkJOyB4bW0wPXRtcDIKKwlhZGRwcwl4bW02LHhtbTUJCTsgeG1tNj10bXAwCisJYWRkcHMJeG1tNyx4bW0xCQk7IHhtbTc9dG1wMQorCisJbW92YXBzCVhNTVdPUkQgW3drKDEpXSwgeG1tNAk7IHRtcDMKKwltb3ZhcHMJWE1NV09SRCBbd2soMCldLCB4bW0wCTsgdG1wMgorCisJOyAtLSBPZGQgcGFydAorCisJbW92YXBzCXhtbTIsIFhNTVdPUkQgW1hNTUJMT0NLKDEsMCxyc2ksU0laRU9GX0ZBU1RfRkxPQVQpXQorCW1vdmFwcwl4bW0zLCBYTU1XT1JEIFtYTU1CTE9DSygzLDAscnNpLFNJWkVPRl9GQVNUX0ZMT0FUKV0KKwltb3ZhcHMJeG1tNSwgWE1NV09SRCBbWE1NQkxPQ0soNSwwLHJzaSxTSVpFT0ZfRkFTVF9GTE9BVCldCisJbW92YXBzCXhtbTEsIFhNTVdPUkQgW1hNTUJMT0NLKDcsMCxyc2ksU0laRU9GX0ZBU1RfRkxPQVQpXQorCisJbW92YXBzCXhtbTQseG1tMgorCW1vdmFwcwl4bW0wLHhtbTUKKwlhZGRwcwl4bW0yLHhtbTEJCTsgeG1tMj16MTEKKwlhZGRwcwl4bW01LHhtbTMJCTsgeG1tNT16MTMKKwlzdWJwcwl4bW00LHhtbTEJCTsgeG1tND16MTIKKwlzdWJwcwl4bW0wLHhtbTMJCTsgeG1tMD16MTAKKworCW1vdmFwcwl4bW0xLHhtbTIKKwlzdWJwcwl4bW0yLHhtbTUKKwlhZGRwcwl4bW0xLHhtbTUJCTsgeG1tMT10bXA3CisKKwltdWxwcwl4bW0yLFtyZWwgUERfMV80MTRdCTsgeG1tMj10bXAxMQorCisJbW92YXBzCXhtbTMseG1tMAorCWFkZHBzCXhtbTAseG1tNAorCW11bHBzCXhtbTAsW3JlbCBQRF8xXzg0N10JOyB4bW0wPXo1CisJbXVscHMJeG1tMyxbcmVsIFBEX00yXzYxM10JOyB4bW0zPSh6MTAgKiAtMi42MTMxMjU5MzApCisJbXVscHMJeG1tNCxbcmVsIFBEXzFfMDgyXQk7IHhtbTQ9KHoxMiAqIDEuMDgyMzkyMjAwKQorCWFkZHBzCXhtbTMseG1tMAkJOyB4bW0zPXRtcDEyCisJc3VicHMJeG1tNCx4bW0wCQk7IHhtbTQ9dG1wMTAKKworCTsgLS0gRmluYWwgb3V0cHV0IHN0YWdlCisKKwlzdWJwcwl4bW0zLHhtbTEJCTsgeG1tMz10bXA2CisJbW92YXBzCXhtbTUseG1tNgorCW1vdmFwcwl4bW0wLHhtbTcKKwlhZGRwcwl4bW02LHhtbTEJCTsgeG1tNj1kYXRhMD0oMDAgMTAgMjAgMzApCisJYWRkcHMJeG1tNyx4bW0zCQk7IHhtbTc9ZGF0YTE9KDAxIDExIDIxIDMxKQorCXN1YnBzCXhtbTUseG1tMQkJOyB4bW01PWRhdGE3PSgwNyAxNyAyNyAzNykKKwlzdWJwcwl4bW0wLHhtbTMJCTsgeG1tMD1kYXRhNj0oMDYgMTYgMjYgMzYpCisJc3VicHMJeG1tMix4bW0zCQk7IHhtbTI9dG1wNQorCisJbW92YXBzCXhtbTEsW3JlbCBQRF9STkRJTlRfTUFHSUNdCTsgeG1tMT1bcmVsIFBEX1JORElOVF9NQUdJQ10KKwlwY21wZXFkCXhtbTMseG1tMworCXBzcmxkCXhtbTMsV09SRF9CSVQJCTsgeG1tMz17MHhGRkZGIDB4MDAwMCAweEZGRkYgMHgwMDAwIC4ufQorCisJYWRkcHMJeG1tNix4bW0xCTsgeG1tNj1yb3VuZGludChkYXRhMC84KT0oMDAgKiogMTAgKiogMjAgKiogMzAgKiopCisJYWRkcHMJeG1tNyx4bW0xCTsgeG1tNz1yb3VuZGludChkYXRhMS84KT0oMDEgKiogMTEgKiogMjEgKiogMzEgKiopCisJYWRkcHMJeG1tMCx4bW0xCTsgeG1tMD1yb3VuZGludChkYXRhNi84KT0oMDYgKiogMTYgKiogMjYgKiogMzYgKiopCisJYWRkcHMJeG1tNSx4bW0xCTsgeG1tNT1yb3VuZGludChkYXRhNy84KT0oMDcgKiogMTcgKiogMjcgKiogMzcgKiopCisKKwlwYW5kCXhtbTYseG1tMwkJOyB4bW02PSgwMCAtLSAxMCAtLSAyMCAtLSAzMCAtLSkKKwlwc2xsZAl4bW03LFdPUkRfQklUCQk7IHhtbTc9KC0tIDAxIC0tIDExIC0tIDIxIC0tIDMxKQorCXBhbmQJeG1tMCx4bW0zCQk7IHhtbTA9KDA2IC0tIDE2IC0tIDI2IC0tIDM2IC0tKQorCXBzbGxkCXhtbTUsV09SRF9CSVQJCTsgeG1tNT0oLS0gMDcgLS0gMTcgLS0gMjcgLS0gMzcpCisJcG9yCXhtbTYseG1tNwkJOyB4bW02PSgwMCAwMSAxMCAxMSAyMCAyMSAzMCAzMSkKKwlwb3IJeG1tMCx4bW01CQk7IHhtbTA9KDA2IDA3IDE2IDE3IDI2IDI3IDM2IDM3KQorCisJbW92YXBzCXhtbTEsIFhNTVdPUkQgW3drKDApXQk7IHhtbTE9dG1wMgorCW1vdmFwcwl4bW0zLCBYTU1XT1JEIFt3aygxKV0JOyB4bW0zPXRtcDMKKworCWFkZHBzCXhtbTQseG1tMgkJOyB4bW00PXRtcDQKKwltb3ZhcHMJeG1tNyx4bW0xCisJbW92YXBzCXhtbTUseG1tMworCWFkZHBzCXhtbTEseG1tMgkJOyB4bW0xPWRhdGEyPSgwMiAxMiAyMiAzMikKKwlhZGRwcwl4bW0zLHhtbTQJCTsgeG1tMz1kYXRhND0oMDQgMTQgMjQgMzQpCisJc3VicHMJeG1tNyx4bW0yCQk7IHhtbTc9ZGF0YTU9KDA1IDE1IDI1IDM1KQorCXN1YnBzCXhtbTUseG1tNAkJOyB4bW01PWRhdGEzPSgwMyAxMyAyMyAzMykKKworCW1vdmFwcwl4bW0yLFtyZWwgUERfUk5ESU5UX01BR0lDXQk7IHhtbTI9W3JlbCBQRF9STkRJTlRfTUFHSUNdCisJcGNtcGVxZAl4bW00LHhtbTQKKwlwc3JsZAl4bW00LFdPUkRfQklUCQk7IHhtbTQ9ezB4RkZGRiAweDAwMDAgMHhGRkZGIDB4MDAwMCAuLn0KKworCWFkZHBzCXhtbTMseG1tMgk7IHhtbTM9cm91bmRpbnQoZGF0YTQvOCk9KDA0ICoqIDE0ICoqIDI0ICoqIDM0ICoqKQorCWFkZHBzCXhtbTcseG1tMgk7IHhtbTc9cm91bmRpbnQoZGF0YTUvOCk9KDA1ICoqIDE1ICoqIDI1ICoqIDM1ICoqKQorCWFkZHBzCXhtbTEseG1tMgk7IHhtbTE9cm91bmRpbnQoZGF0YTIvOCk9KDAyICoqIDEyICoqIDIyICoqIDMyICoqKQorCWFkZHBzCXhtbTUseG1tMgk7IHhtbTU9cm91bmRpbnQoZGF0YTMvOCk9KDAzICoqIDEzICoqIDIzICoqIDMzICoqKQorCisJcGFuZAl4bW0zLHhtbTQJCTsgeG1tMz0oMDQgLS0gMTQgLS0gMjQgLS0gMzQgLS0pCisJcHNsbGQJeG1tNyxXT1JEX0JJVAkJOyB4bW03PSgtLSAwNSAtLSAxNSAtLSAyNSAtLSAzNSkKKwlwYW5kCXhtbTEseG1tNAkJOyB4bW0xPSgwMiAtLSAxMiAtLSAyMiAtLSAzMiAtLSkKKwlwc2xsZAl4bW01LFdPUkRfQklUCQk7IHhtbTU9KC0tIDAzIC0tIDEzIC0tIDIzIC0tIDMzKQorCXBvcgl4bW0zLHhtbTcJCTsgeG1tMz0oMDQgMDUgMTQgMTUgMjQgMjUgMzQgMzUpCisJcG9yCXhtbTEseG1tNQkJOyB4bW0xPSgwMiAwMyAxMiAxMyAyMiAyMyAzMiAzMykKKworCW1vdmRxYSAgICB4bW0yLFtyZWwgUEJfQ0VOVEVSSlNBTVBdCTsgeG1tMj1bcmVsIFBCX0NFTlRFUkpTQU1QXQorCisJcGFja3Nzd2IgIHhtbTYseG1tMwk7IHhtbTY9KDAwIDAxIDEwIDExIDIwIDIxIDMwIDMxIDA0IDA1IDE0IDE1IDI0IDI1IDM0IDM1KQorCXBhY2tzc3diICB4bW0xLHhtbTAJOyB4bW0xPSgwMiAwMyAxMiAxMyAyMiAyMyAzMiAzMyAwNiAwNyAxNiAxNyAyNiAyNyAzNiAzNykKKwlwYWRkYiAgICAgeG1tNix4bW0yCisJcGFkZGIgICAgIHhtbTEseG1tMgorCisJbW92ZHFhICAgIHhtbTQseG1tNgk7IHRyYW5zcG9zZSBjb2VmZmljaWVudHMocGhhc2UgMikKKwlwdW5wY2tsd2QgeG1tNix4bW0xCTsgeG1tNj0oMDAgMDEgMDIgMDMgMTAgMTEgMTIgMTMgMjAgMjEgMjIgMjMgMzAgMzEgMzIgMzMpCisJcHVucGNraHdkIHhtbTQseG1tMQk7IHhtbTQ9KDA0IDA1IDA2IDA3IDE0IDE1IDE2IDE3IDI0IDI1IDI2IDI3IDM0IDM1IDM2IDM3KQorCisJbW92ZHFhICAgIHhtbTcseG1tNgk7IHRyYW5zcG9zZSBjb2VmZmljaWVudHMocGhhc2UgMykKKwlwdW5wY2tsZHEgeG1tNix4bW00CTsgeG1tNj0oMDAgMDEgMDIgMDMgMDQgMDUgMDYgMDcgMTAgMTEgMTIgMTMgMTQgMTUgMTYgMTcpCisJcHVucGNraGRxIHhtbTcseG1tNAk7IHhtbTc9KDIwIDIxIDIyIDIzIDI0IDI1IDI2IDI3IDMwIDMxIDMyIDMzIDM0IDM1IDM2IDM3KQorCisJcHNodWZkCXhtbTUseG1tNiwweDRFCTsgeG1tNT0oMTAgMTEgMTIgMTMgMTQgMTUgMTYgMTcgMDAgMDEgMDIgMDMgMDQgMDUgMDYgMDcpCisJcHNodWZkCXhtbTMseG1tNywweDRFCTsgeG1tMz0oMzAgMzEgMzIgMzMgMzQgMzUgMzYgMzcgMjAgMjEgMjIgMjMgMjQgMjUgMjYgMjcpCisKKwltb3YJcmR4LCBKU0FNUFJPVyBbcmRpKzAqU0laRU9GX0pTQU1QUk9XXQorCW1vdglyYngsIEpTQU1QUk9XIFtyZGkrMipTSVpFT0ZfSlNBTVBST1ddCisJbW92cQlYTU1fTU1XT1JEIFtyZHgrcmF4KlNJWkVPRl9KU0FNUExFXSwgeG1tNgorCW1vdnEJWE1NX01NV09SRCBbcmJ4K3JheCpTSVpFT0ZfSlNBTVBMRV0sIHhtbTcKKwltb3YJcmR4LCBKU0FNUFJPVyBbcmRpKzEqU0laRU9GX0pTQU1QUk9XXQorCW1vdglyYngsIEpTQU1QUk9XIFtyZGkrMypTSVpFT0ZfSlNBTVBST1ddCisJbW92cQlYTU1fTU1XT1JEIFtyZHgrcmF4KlNJWkVPRl9KU0FNUExFXSwgeG1tNQorCW1vdnEJWE1NX01NV09SRCBbcmJ4K3JheCpTSVpFT0ZfSlNBTVBMRV0sIHhtbTMKKworCWFkZAlyc2ksIGJ5dGUgNCpTSVpFT0ZfRkFTVF9GTE9BVAk7IHdzcHRyCisJYWRkCXJkaSwgYnl0ZSA0KlNJWkVPRl9KU0FNUFJPVworCWRlYwlyY3gJCQkJOyBjdHIKKwlqbnoJbmVhciAucm93bG9vcAorCisJcG9wCXJieAorCXVuY29sbGVjdF9hcmdzCisJbW92CXJzcCxyYnAJCTsgcnNwIDwtIGFsaWduZWQgcmJwCisJcG9wCXJzcAkJOyByc3AgPC0gb3JpZ2luYWwgcmJwCisJcG9wCXJicAorCXJldAorCis7IEZvciBzb21lIHJlYXNvbiwgdGhlIE9TIFggbGlua2VyIGRvZXMgbm90IGhvbm9yIHRoZSByZXF1ZXN0IHRvIGFsaWduIHRoZQorOyBzZWdtZW50IHVubGVzcyB3ZSBkbyB0aGlzLgorCWFsaWduCTE2CmRpZmYgLS1naXQgYS9zaW1kL2ppc3MyZmx0LmFzbSBiL3NpbWQvamlzczJmbHQuYXNtCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjE3YmMzNjMKLS0tIC9kZXYvbnVsbAorKysgYi9zaW1kL2ppc3MyZmx0LmFzbQpAQCAtMCwwICsxLDQ5OCBAQAorOworOyBqaXNzMmZsdC5hc20gLSBmbG9hdGluZy1wb2ludCBJRENUIChTU0UgJiBTU0UyKQorOworOyBDb3B5cmlnaHQgMjAwOSBQaWVycmUgT3NzbWFuIDxvc3NtYW5AY2VuZGlvLnNlPiBmb3IgQ2VuZGlvIEFCCis7Cis7IEJhc2VkIG9uCis7IHg4NiBTSU1EIGV4dGVuc2lvbiBmb3IgSUpHIEpQRUcgbGlicmFyeQorOyBDb3B5cmlnaHQgKEMpIDE5OTktMjAwNiwgTUlZQVNBS0EgTWFzYXJ1LgorOyBGb3IgY29uZGl0aW9ucyBvZiBkaXN0cmlidXRpb24gYW5kIHVzZSwgc2VlIGNvcHlyaWdodCBub3RpY2UgaW4ganNpbWRleHQuaW5jCis7Cis7IFRoaXMgZmlsZSBzaG91bGQgYmUgYXNzZW1ibGVkIHdpdGggTkFTTSAoTmV0d2lkZSBBc3NlbWJsZXIpLAorOyBjYW4gKm5vdCogYmUgYXNzZW1ibGVkIHdpdGggTWljcm9zb2Z0J3MgTUFTTSBvciBhbnkgY29tcGF0aWJsZQorOyBhc3NlbWJsZXIgKGluY2x1ZGluZyBCb3JsYW5kJ3MgVHVyYm8gQXNzZW1ibGVyKS4KKzsgTkFTTSBpcyBhdmFpbGFibGUgZnJvbSBodHRwOi8vbmFzbS5zb3VyY2Vmb3JnZS5uZXQvIG9yCis7IGh0dHA6Ly9zb3VyY2Vmb3JnZS5uZXQvcHJvamVjdC9zaG93ZmlsZXMucGhwP2dyb3VwX2lkPTYyMDgKKzsKKzsgVGhpcyBmaWxlIGNvbnRhaW5zIGEgZmxvYXRpbmctcG9pbnQgaW1wbGVtZW50YXRpb24gb2YgdGhlIGludmVyc2UgRENUCis7IChEaXNjcmV0ZSBDb3NpbmUgVHJhbnNmb3JtKS4gVGhlIGZvbGxvd2luZyBjb2RlIGlzIGJhc2VkIGRpcmVjdGx5IG9uCis7IHRoZSBJSkcncyBvcmlnaW5hbCBqaWRjdGZsdC5jOyBzZWUgdGhlIGppZGN0Zmx0LmMgZm9yIG1vcmUgZGV0YWlscy4KKzsKKzsgW1RBQjhdCisKKyVpbmNsdWRlICJqc2ltZGV4dC5pbmMiCislaW5jbHVkZSAiamRjdC5pbmMiCisKKzsgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworJW1hY3JvCXVucGNrbHBzMiAyCTsgJTE9KDAgMSAyIDMpIC8gJTI9KDQgNSA2IDcpID0+ICUxPSgwIDEgNCA1KQorCXNodWZwcwklMSwlMiwweDQ0CislZW5kbWFjcm8KKworJW1hY3JvCXVucGNraHBzMiAyCTsgJTE9KDAgMSAyIDMpIC8gJTI9KDQgNSA2IDcpID0+ICUxPSgyIDMgNiA3KQorCXNodWZwcwklMSwlMiwweEVFCislZW5kbWFjcm8KKworOyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCVNFQ1RJT04JU0VHX0NPTlNUCisKKwlhbGlnbnoJMTYKKwlnbG9iYWwJRVhUTihqY29uc3RfaWRjdF9mbG9hdF9zc2UyKQorCitFWFROKGpjb25zdF9pZGN0X2Zsb2F0X3NzZTIpOgorCitQRF8xXzQxNAl0aW1lcyA0IGRkICAxLjQxNDIxMzU2MjM3MzA5NTA0ODgwMTY4OQorUERfMV84NDcJdGltZXMgNCBkZCAgMS44NDc3NTkwNjUwMjI1NzM1MTIyNTYzNjYKK1BEXzFfMDgyCXRpbWVzIDQgZGQgIDEuMDgyMzkyMjAwMjkyMzkzOTY4Nzk5NDQ2CitQRF9NMl82MTMJdGltZXMgNCBkZCAtMi42MTMxMjU5Mjk3NTI3NTMwNTU3MTMyODYKK1BEX1JORElOVF9NQUdJQwl0aW1lcyA0IGRkICAxMDA2NjMyOTYuMAk7IChmbG9hdCkoMHgwMEMwMDAwMCA8PCAzKQorUEJfQ0VOVEVSSlNBTVAJdGltZXMgMTYgZGIgQ0VOVEVSSlNBTVBMRQorCisJYWxpZ256CTE2CisKKzsgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKwlTRUNUSU9OCVNFR19URVhUCisJQklUUwkzMgorOworOyBQZXJmb3JtIGRlcXVhbnRpemF0aW9uIGFuZCBpbnZlcnNlIERDVCBvbiBvbmUgYmxvY2sgb2YgY29lZmZpY2llbnRzLgorOworOyBHTE9CQUwodm9pZCkKKzsganNpbWRfaWRjdF9mbG9hdF9zc2UyICh2b2lkICogZGN0X3RhYmxlLCBKQ09FRlBUUiBjb2VmX2Jsb2NrLAorOyAgICAgICAgICAgICAgICAgICAgICAgIEpTQU1QQVJSQVkgb3V0cHV0X2J1ZiwgSkRJTUVOU0lPTiBvdXRwdXRfY29sKQorOworCislZGVmaW5lIGRjdF90YWJsZShiKQkoYikrOAkJCTsgdm9pZCAqIGRjdF90YWJsZQorJWRlZmluZSBjb2VmX2Jsb2NrKGIpCShiKSsxMgkJOyBKQ09FRlBUUiBjb2VmX2Jsb2NrCislZGVmaW5lIG91dHB1dF9idWYoYikJKGIpKzE2CQk7IEpTQU1QQVJSQVkgb3V0cHV0X2J1ZgorJWRlZmluZSBvdXRwdXRfY29sKGIpCShiKSsyMAkJOyBKRElNRU5TSU9OIG91dHB1dF9jb2wKKworJWRlZmluZSBvcmlnaW5hbF9lYnAJZWJwKzAKKyVkZWZpbmUgd2soaSkJCWVicC0oV0tfTlVNLShpKSkqU0laRU9GX1hNTVdPUkQJOyB4bW13b3JkIHdrW1dLX05VTV0KKyVkZWZpbmUgV0tfTlVNCQkyCislZGVmaW5lIHdvcmtzcGFjZQl3aygwKS1EQ1RTSVpFMipTSVpFT0ZfRkFTVF9GTE9BVAorCQkJCQk7IEZBU1RfRkxPQVQgd29ya3NwYWNlW0RDVFNJWkUyXQorCisJYWxpZ24JMTYKKwlnbG9iYWwJRVhUTihqc2ltZF9pZGN0X2Zsb2F0X3NzZTIpCisKK0VYVE4oanNpbWRfaWRjdF9mbG9hdF9zc2UyKToKKwlwdXNoCWVicAorCW1vdgllYXgsZXNwCQkJCTsgZWF4ID0gb3JpZ2luYWwgZWJwCisJc3ViCWVzcCwgYnl0ZSA0CisJYW5kCWVzcCwgYnl0ZSAoLVNJWkVPRl9YTU1XT1JEKQk7IGFsaWduIHRvIDEyOCBiaXRzCisJbW92CVtlc3BdLGVheAorCW1vdgllYnAsZXNwCQkJCTsgZWJwID0gYWxpZ25lZCBlYnAKKwlsZWEJZXNwLCBbd29ya3NwYWNlXQorCXB1c2gJZWJ4Cis7CXB1c2gJZWN4CQk7IG5lZWQgbm90IGJlIHByZXNlcnZlZAorOwlwdXNoCWVkeAkJOyBuZWVkIG5vdCBiZSBwcmVzZXJ2ZWQKKwlwdXNoCWVzaQorCXB1c2gJZWRpCisKKwlnZXRfR09UCWVieAkJOyBnZXQgR09UIGFkZHJlc3MKKworCTsgLS0tLSBQYXNzIDE6IHByb2Nlc3MgY29sdW1ucyBmcm9tIGlucHV0LCBzdG9yZSBpbnRvIHdvcmsgYXJyYXkuCisKKzsJbW92CWVheCwgW29yaWdpbmFsX2VicF0KKwltb3YJZWR4LCBQT0lOVEVSIFtkY3RfdGFibGUoZWF4KV0JOyBxdWFudHB0cgorCW1vdgllc2ksIEpDT0VGUFRSIFtjb2VmX2Jsb2NrKGVheCldCQk7IGlucHRyCisJbGVhCWVkaSwgW3dvcmtzcGFjZV0JCQk7IEZBU1RfRkxPQVQgKiB3c3B0cgorCW1vdgllY3gsIERDVFNJWkUvNAkJCQk7IGN0cgorCWFsaWdueAkxNiw3CisuY29sdW1ubG9vcDoKKyVpZm5kZWYgTk9fWkVST19DT0xVTU5fVEVTVF9GTE9BVF9TU0UKKwltb3YJZWF4LCBEV09SRCBbRFdCTE9DSygxLDAsZXNpLFNJWkVPRl9KQ09FRildCisJb3IJZWF4LCBEV09SRCBbRFdCTE9DSygyLDAsZXNpLFNJWkVPRl9KQ09FRildCisJam56CW5lYXIgLmNvbHVtbkRDVAorCisJbW92cQl4bW0xLCBYTU1fTU1XT1JEIFtNTUJMT0NLKDEsMCxlc2ksU0laRU9GX0pDT0VGKV0KKwltb3ZxCXhtbTIsIFhNTV9NTVdPUkQgW01NQkxPQ0soMiwwLGVzaSxTSVpFT0ZfSkNPRUYpXQorCW1vdnEJeG1tMywgWE1NX01NV09SRCBbTU1CTE9DSygzLDAsZXNpLFNJWkVPRl9KQ09FRildCisJbW92cQl4bW00LCBYTU1fTU1XT1JEIFtNTUJMT0NLKDQsMCxlc2ksU0laRU9GX0pDT0VGKV0KKwltb3ZxCXhtbTUsIFhNTV9NTVdPUkQgW01NQkxPQ0soNSwwLGVzaSxTSVpFT0ZfSkNPRUYpXQorCW1vdnEJeG1tNiwgWE1NX01NV09SRCBbTU1CTE9DSyg2LDAsZXNpLFNJWkVPRl9KQ09FRildCisJbW92cQl4bW03LCBYTU1fTU1XT1JEIFtNTUJMT0NLKDcsMCxlc2ksU0laRU9GX0pDT0VGKV0KKwlwb3IJeG1tMSx4bW0yCisJcG9yCXhtbTMseG1tNAorCXBvcgl4bW01LHhtbTYKKwlwb3IJeG1tMSx4bW0zCisJcG9yCXhtbTUseG1tNworCXBvcgl4bW0xLHhtbTUKKwlwYWNrc3N3YiB4bW0xLHhtbTEKKwltb3ZkCWVheCx4bW0xCisJdGVzdAllYXgsZWF4CisJam56CXNob3J0IC5jb2x1bW5EQ1QKKworCTsgLS0gQUMgdGVybXMgYWxsIHplcm8KKworCW1vdnEgICAgICB4bW0wLCBYTU1fTU1XT1JEIFtNTUJMT0NLKDAsMCxlc2ksU0laRU9GX0pDT0VGKV0KKworCXB1bnBja2x3ZCB4bW0wLHhtbTAJCTsgeG1tMD0oMDAgMDAgMDEgMDEgMDIgMDIgMDMgMDMpCisJcHNyYWQgICAgIHhtbTAsKERXT1JEX0JJVC1XT1JEX0JJVCkJOyB4bW0wPWluMD0oMDAgMDEgMDIgMDMpCisJY3Z0ZHEycHMgIHhtbTAseG1tMAkJCTsgeG1tMD1pbjA9KDAwIDAxIDAyIDAzKQorCisJbXVscHMJeG1tMCwgWE1NV09SRCBbWE1NQkxPQ0soMCwwLGVkeCxTSVpFT0ZfRkxPQVRfTVVMVF9UWVBFKV0KKworCW1vdmFwcwl4bW0xLHhtbTAKKwltb3ZhcHMJeG1tMix4bW0wCisJbW92YXBzCXhtbTMseG1tMAorCisJc2h1ZnBzCXhtbTAseG1tMCwweDAwCQkJOyB4bW0wPSgwMCAwMCAwMCAwMCkKKwlzaHVmcHMJeG1tMSx4bW0xLDB4NTUJCQk7IHhtbTE9KDAxIDAxIDAxIDAxKQorCXNodWZwcwl4bW0yLHhtbTIsMHhBQQkJCTsgeG1tMj0oMDIgMDIgMDIgMDIpCisJc2h1ZnBzCXhtbTMseG1tMywweEZGCQkJOyB4bW0zPSgwMyAwMyAwMyAwMykKKworCW1vdmFwcwlYTU1XT1JEIFtYTU1CTE9DSygwLDAsZWRpLFNJWkVPRl9GQVNUX0ZMT0FUKV0sIHhtbTAKKwltb3ZhcHMJWE1NV09SRCBbWE1NQkxPQ0soMCwxLGVkaSxTSVpFT0ZfRkFTVF9GTE9BVCldLCB4bW0wCisJbW92YXBzCVhNTVdPUkQgW1hNTUJMT0NLKDEsMCxlZGksU0laRU9GX0ZBU1RfRkxPQVQpXSwgeG1tMQorCW1vdmFwcwlYTU1XT1JEIFtYTU1CTE9DSygxLDEsZWRpLFNJWkVPRl9GQVNUX0ZMT0FUKV0sIHhtbTEKKwltb3ZhcHMJWE1NV09SRCBbWE1NQkxPQ0soMiwwLGVkaSxTSVpFT0ZfRkFTVF9GTE9BVCldLCB4bW0yCisJbW92YXBzCVhNTVdPUkQgW1hNTUJMT0NLKDIsMSxlZGksU0laRU9GX0ZBU1RfRkxPQVQpXSwgeG1tMgorCW1vdmFwcwlYTU1XT1JEIFtYTU1CTE9DSygzLDAsZWRpLFNJWkVPRl9GQVNUX0ZMT0FUKV0sIHhtbTMKKwltb3ZhcHMJWE1NV09SRCBbWE1NQkxPQ0soMywxLGVkaSxTSVpFT0ZfRkFTVF9GTE9BVCldLCB4bW0zCisJam1wCW5lYXIgLm5leHRjb2x1bW4KKwlhbGlnbngJMTYsNworJWVuZGlmCisuY29sdW1uRENUOgorCisJOyAtLSBFdmVuIHBhcnQKKworCW1vdnEgICAgICB4bW0wLCBYTU1fTU1XT1JEIFtNTUJMT0NLKDAsMCxlc2ksU0laRU9GX0pDT0VGKV0KKwltb3ZxICAgICAgeG1tMSwgWE1NX01NV09SRCBbTU1CTE9DSygyLDAsZXNpLFNJWkVPRl9KQ09FRildCisJbW92cSAgICAgIHhtbTIsIFhNTV9NTVdPUkQgW01NQkxPQ0soNCwwLGVzaSxTSVpFT0ZfSkNPRUYpXQorCW1vdnEgICAgICB4bW0zLCBYTU1fTU1XT1JEIFtNTUJMT0NLKDYsMCxlc2ksU0laRU9GX0pDT0VGKV0KKworCXB1bnBja2x3ZCB4bW0wLHhtbTAJCTsgeG1tMD0oMDAgMDAgMDEgMDEgMDIgMDIgMDMgMDMpCisJcHVucGNrbHdkIHhtbTEseG1tMQkJOyB4bW0xPSgyMCAyMCAyMSAyMSAyMiAyMiAyMyAyMykKKwlwc3JhZCAgICAgeG1tMCwoRFdPUkRfQklULVdPUkRfQklUKQk7IHhtbTA9aW4wPSgwMCAwMSAwMiAwMykKKwlwc3JhZCAgICAgeG1tMSwoRFdPUkRfQklULVdPUkRfQklUKQk7IHhtbTE9aW4yPSgyMCAyMSAyMiAyMykKKwljdnRkcTJwcyAgeG1tMCx4bW0wCQkJOyB4bW0wPWluMD0oMDAgMDEgMDIgMDMpCisJY3Z0ZHEycHMgIHhtbTEseG1tMQkJCTsgeG1tMT1pbjI9KDIwIDIxIDIyIDIzKQorCisJcHVucGNrbHdkIHhtbTIseG1tMgkJOyB4bW0yPSg0MCA0MCA0MSA0MSA0MiA0MiA0MyA0MykKKwlwdW5wY2tsd2QgeG1tMyx4bW0zCQk7IHhtbTM9KDYwIDYwIDYxIDYxIDYyIDYyIDYzIDYzKQorCXBzcmFkICAgICB4bW0yLChEV09SRF9CSVQtV09SRF9CSVQpCTsgeG1tMj1pbjQ9KDQwIDQxIDQyIDQzKQorCXBzcmFkICAgICB4bW0zLChEV09SRF9CSVQtV09SRF9CSVQpCTsgeG1tMz1pbjY9KDYwIDYxIDYyIDYzKQorCWN2dGRxMnBzICB4bW0yLHhtbTIJCQk7IHhtbTI9aW40PSg0MCA0MSA0MiA0MykKKwljdnRkcTJwcyAgeG1tMyx4bW0zCQkJOyB4bW0zPWluNj0oNjAgNjEgNjIgNjMpCisKKwltdWxwcyAgICAgeG1tMCwgWE1NV09SRCBbWE1NQkxPQ0soMCwwLGVkeCxTSVpFT0ZfRkxPQVRfTVVMVF9UWVBFKV0KKwltdWxwcyAgICAgeG1tMSwgWE1NV09SRCBbWE1NQkxPQ0soMiwwLGVkeCxTSVpFT0ZfRkxPQVRfTVVMVF9UWVBFKV0KKwltdWxwcyAgICAgeG1tMiwgWE1NV09SRCBbWE1NQkxPQ0soNCwwLGVkeCxTSVpFT0ZfRkxPQVRfTVVMVF9UWVBFKV0KKwltdWxwcyAgICAgeG1tMywgWE1NV09SRCBbWE1NQkxPQ0soNiwwLGVkeCxTSVpFT0ZfRkxPQVRfTVVMVF9UWVBFKV0KKworCW1vdmFwcwl4bW00LHhtbTAKKwltb3ZhcHMJeG1tNSx4bW0xCisJc3VicHMJeG1tMCx4bW0yCQk7IHhtbTA9dG1wMTEKKwlzdWJwcwl4bW0xLHhtbTMKKwlhZGRwcwl4bW00LHhtbTIJCTsgeG1tND10bXAxMAorCWFkZHBzCXhtbTUseG1tMwkJOyB4bW01PXRtcDEzCisKKwltdWxwcwl4bW0xLFtHT1RPRkYoZWJ4LFBEXzFfNDE0KV0KKwlzdWJwcwl4bW0xLHhtbTUJCTsgeG1tMT10bXAxMgorCisJbW92YXBzCXhtbTYseG1tNAorCW1vdmFwcwl4bW03LHhtbTAKKwlzdWJwcwl4bW00LHhtbTUJCTsgeG1tND10bXAzCisJc3VicHMJeG1tMCx4bW0xCQk7IHhtbTA9dG1wMgorCWFkZHBzCXhtbTYseG1tNQkJOyB4bW02PXRtcDAKKwlhZGRwcwl4bW03LHhtbTEJCTsgeG1tNz10bXAxCisKKwltb3ZhcHMJWE1NV09SRCBbd2soMSldLCB4bW00CTsgdG1wMworCW1vdmFwcwlYTU1XT1JEIFt3aygwKV0sIHhtbTAJOyB0bXAyCisKKwk7IC0tIE9kZCBwYXJ0CisKKwltb3ZxICAgICAgeG1tMiwgWE1NX01NV09SRCBbTU1CTE9DSygxLDAsZXNpLFNJWkVPRl9KQ09FRildCisJbW92cSAgICAgIHhtbTMsIFhNTV9NTVdPUkQgW01NQkxPQ0soMywwLGVzaSxTSVpFT0ZfSkNPRUYpXQorCW1vdnEgICAgICB4bW01LCBYTU1fTU1XT1JEIFtNTUJMT0NLKDUsMCxlc2ksU0laRU9GX0pDT0VGKV0KKwltb3ZxICAgICAgeG1tMSwgWE1NX01NV09SRCBbTU1CTE9DSyg3LDAsZXNpLFNJWkVPRl9KQ09FRildCisKKwlwdW5wY2tsd2QgeG1tMix4bW0yCQk7IHhtbTI9KDEwIDEwIDExIDExIDEyIDEyIDEzIDEzKQorCXB1bnBja2x3ZCB4bW0zLHhtbTMJCTsgeG1tMz0oMzAgMzAgMzEgMzEgMzIgMzIgMzMgMzMpCisJcHNyYWQgICAgIHhtbTIsKERXT1JEX0JJVC1XT1JEX0JJVCkJOyB4bW0yPWluMT0oMTAgMTEgMTIgMTMpCisJcHNyYWQgICAgIHhtbTMsKERXT1JEX0JJVC1XT1JEX0JJVCkJOyB4bW0zPWluMz0oMzAgMzEgMzIgMzMpCisJY3Z0ZHEycHMgIHhtbTIseG1tMgkJCTsgeG1tMj1pbjE9KDEwIDExIDEyIDEzKQorCWN2dGRxMnBzICB4bW0zLHhtbTMJCQk7IHhtbTM9aW4zPSgzMCAzMSAzMiAzMykKKworCXB1bnBja2x3ZCB4bW01LHhtbTUJCTsgeG1tNT0oNTAgNTAgNTEgNTEgNTIgNTIgNTMgNTMpCisJcHVucGNrbHdkIHhtbTEseG1tMQkJOyB4bW0xPSg3MCA3MCA3MSA3MSA3MiA3MiA3MyA3MykKKwlwc3JhZCAgICAgeG1tNSwoRFdPUkRfQklULVdPUkRfQklUKQk7IHhtbTU9aW41PSg1MCA1MSA1MiA1MykKKwlwc3JhZCAgICAgeG1tMSwoRFdPUkRfQklULVdPUkRfQklUKQk7IHhtbTE9aW43PSg3MCA3MSA3MiA3MykKKwljdnRkcTJwcyAgeG1tNSx4bW01CQkJOyB4bW01PWluNT0oNTAgNTEgNTIgNTMpCisJY3Z0ZHEycHMgIHhtbTEseG1tMQkJCTsgeG1tMT1pbjc9KDcwIDcxIDcyIDczKQorCisJbXVscHMgICAgIHhtbTIsIFhNTVdPUkQgW1hNTUJMT0NLKDEsMCxlZHgsU0laRU9GX0ZMT0FUX01VTFRfVFlQRSldCisJbXVscHMgICAgIHhtbTMsIFhNTVdPUkQgW1hNTUJMT0NLKDMsMCxlZHgsU0laRU9GX0ZMT0FUX01VTFRfVFlQRSldCisJbXVscHMgICAgIHhtbTUsIFhNTVdPUkQgW1hNTUJMT0NLKDUsMCxlZHgsU0laRU9GX0ZMT0FUX01VTFRfVFlQRSldCisJbXVscHMgICAgIHhtbTEsIFhNTVdPUkQgW1hNTUJMT0NLKDcsMCxlZHgsU0laRU9GX0ZMT0FUX01VTFRfVFlQRSldCisKKwltb3ZhcHMJeG1tNCx4bW0yCisJbW92YXBzCXhtbTAseG1tNQorCWFkZHBzCXhtbTIseG1tMQkJOyB4bW0yPXoxMQorCWFkZHBzCXhtbTUseG1tMwkJOyB4bW01PXoxMworCXN1YnBzCXhtbTQseG1tMQkJOyB4bW00PXoxMgorCXN1YnBzCXhtbTAseG1tMwkJOyB4bW0wPXoxMAorCisJbW92YXBzCXhtbTEseG1tMgorCXN1YnBzCXhtbTIseG1tNQorCWFkZHBzCXhtbTEseG1tNQkJOyB4bW0xPXRtcDcKKworCW11bHBzCXhtbTIsW0dPVE9GRihlYngsUERfMV80MTQpXQk7IHhtbTI9dG1wMTEKKworCW1vdmFwcwl4bW0zLHhtbTAKKwlhZGRwcwl4bW0wLHhtbTQKKwltdWxwcwl4bW0wLFtHT1RPRkYoZWJ4LFBEXzFfODQ3KV0JOyB4bW0wPXo1CisJbXVscHMJeG1tMyxbR09UT0ZGKGVieCxQRF9NMl82MTMpXQk7IHhtbTM9KHoxMCAqIC0yLjYxMzEyNTkzMCkKKwltdWxwcwl4bW00LFtHT1RPRkYoZWJ4LFBEXzFfMDgyKV0JOyB4bW00PSh6MTIgKiAxLjA4MjM5MjIwMCkKKwlhZGRwcwl4bW0zLHhtbTAJCTsgeG1tMz10bXAxMgorCXN1YnBzCXhtbTQseG1tMAkJOyB4bW00PXRtcDEwCisKKwk7IC0tIEZpbmFsIG91dHB1dCBzdGFnZQorCisJc3VicHMJeG1tMyx4bW0xCQk7IHhtbTM9dG1wNgorCW1vdmFwcwl4bW01LHhtbTYKKwltb3ZhcHMJeG1tMCx4bW03CisJYWRkcHMJeG1tNix4bW0xCQk7IHhtbTY9ZGF0YTA9KDAwIDAxIDAyIDAzKQorCWFkZHBzCXhtbTcseG1tMwkJOyB4bW03PWRhdGExPSgxMCAxMSAxMiAxMykKKwlzdWJwcwl4bW01LHhtbTEJCTsgeG1tNT1kYXRhNz0oNzAgNzEgNzIgNzMpCisJc3VicHMJeG1tMCx4bW0zCQk7IHhtbTA9ZGF0YTY9KDYwIDYxIDYyIDYzKQorCXN1YnBzCXhtbTIseG1tMwkJOyB4bW0yPXRtcDUKKworCW1vdmFwcyAgICB4bW0xLHhtbTYJCTsgdHJhbnNwb3NlIGNvZWZmaWNpZW50cyhwaGFzZSAxKQorCXVucGNrbHBzICB4bW02LHhtbTcJCTsgeG1tNj0oMDAgMTAgMDEgMTEpCisJdW5wY2tocHMgIHhtbTEseG1tNwkJOyB4bW0xPSgwMiAxMiAwMyAxMykKKwltb3ZhcHMgICAgeG1tMyx4bW0wCQk7IHRyYW5zcG9zZSBjb2VmZmljaWVudHMocGhhc2UgMSkKKwl1bnBja2xwcyAgeG1tMCx4bW01CQk7IHhtbTA9KDYwIDcwIDYxIDcxKQorCXVucGNraHBzICB4bW0zLHhtbTUJCTsgeG1tMz0oNjIgNzIgNjMgNzMpCisKKwltb3ZhcHMJeG1tNywgWE1NV09SRCBbd2soMCldCTsgeG1tNz10bXAyCisJbW92YXBzCXhtbTUsIFhNTVdPUkQgW3drKDEpXQk7IHhtbTU9dG1wMworCisJbW92YXBzCVhNTVdPUkQgW3drKDApXSwgeG1tMAk7IHdrKDApPSg2MCA3MCA2MSA3MSkKKwltb3ZhcHMJWE1NV09SRCBbd2soMSldLCB4bW0zCTsgd2soMSk9KDYyIDcyIDYzIDczKQorCisJYWRkcHMJeG1tNCx4bW0yCQk7IHhtbTQ9dG1wNAorCW1vdmFwcwl4bW0wLHhtbTcKKwltb3ZhcHMJeG1tMyx4bW01CisJYWRkcHMJeG1tNyx4bW0yCQk7IHhtbTc9ZGF0YTI9KDIwIDIxIDIyIDIzKQorCWFkZHBzCXhtbTUseG1tNAkJOyB4bW01PWRhdGE0PSg0MCA0MSA0MiA0MykKKwlzdWJwcwl4bW0wLHhtbTIJCTsgeG1tMD1kYXRhNT0oNTAgNTEgNTIgNTMpCisJc3VicHMJeG1tMyx4bW00CQk7IHhtbTM9ZGF0YTM9KDMwIDMxIDMyIDMzKQorCisJbW92YXBzICAgIHhtbTIseG1tNwkJOyB0cmFuc3Bvc2UgY29lZmZpY2llbnRzKHBoYXNlIDEpCisJdW5wY2tscHMgIHhtbTcseG1tMwkJOyB4bW03PSgyMCAzMCAyMSAzMSkKKwl1bnBja2hwcyAgeG1tMix4bW0zCQk7IHhtbTI9KDIyIDMyIDIzIDMzKQorCW1vdmFwcyAgICB4bW00LHhtbTUJCTsgdHJhbnNwb3NlIGNvZWZmaWNpZW50cyhwaGFzZSAxKQorCXVucGNrbHBzICB4bW01LHhtbTAJCTsgeG1tNT0oNDAgNTAgNDEgNTEpCisJdW5wY2tocHMgIHhtbTQseG1tMAkJOyB4bW00PSg0MiA1MiA0MyA1MykKKworCW1vdmFwcyAgICB4bW0zLHhtbTYJCTsgdHJhbnNwb3NlIGNvZWZmaWNpZW50cyhwaGFzZSAyKQorCXVucGNrbHBzMiB4bW02LHhtbTcJCTsgeG1tNj0oMDAgMTAgMjAgMzApCisJdW5wY2tocHMyIHhtbTMseG1tNwkJOyB4bW0zPSgwMSAxMSAyMSAzMSkKKwltb3ZhcHMgICAgeG1tMCx4bW0xCQk7IHRyYW5zcG9zZSBjb2VmZmljaWVudHMocGhhc2UgMikKKwl1bnBja2xwczIgeG1tMSx4bW0yCQk7IHhtbTE9KDAyIDEyIDIyIDMyKQorCXVucGNraHBzMiB4bW0wLHhtbTIJCTsgeG1tMD0oMDMgMTMgMjMgMzMpCisKKwltb3ZhcHMJeG1tNywgWE1NV09SRCBbd2soMCldCTsgeG1tNz0oNjAgNzAgNjEgNzEpCisJbW92YXBzCXhtbTIsIFhNTVdPUkQgW3drKDEpXQk7IHhtbTI9KDYyIDcyIDYzIDczKQorCisJbW92YXBzCVhNTVdPUkQgW1hNTUJMT0NLKDAsMCxlZGksU0laRU9GX0ZBU1RfRkxPQVQpXSwgeG1tNgorCW1vdmFwcwlYTU1XT1JEIFtYTU1CTE9DSygxLDAsZWRpLFNJWkVPRl9GQVNUX0ZMT0FUKV0sIHhtbTMKKwltb3ZhcHMJWE1NV09SRCBbWE1NQkxPQ0soMiwwLGVkaSxTSVpFT0ZfRkFTVF9GTE9BVCldLCB4bW0xCisJbW92YXBzCVhNTVdPUkQgW1hNTUJMT0NLKDMsMCxlZGksU0laRU9GX0ZBU1RfRkxPQVQpXSwgeG1tMAorCisJbW92YXBzICAgIHhtbTYseG1tNQkJOyB0cmFuc3Bvc2UgY29lZmZpY2llbnRzKHBoYXNlIDIpCisJdW5wY2tscHMyIHhtbTUseG1tNwkJOyB4bW01PSg0MCA1MCA2MCA3MCkKKwl1bnBja2hwczIgeG1tNix4bW03CQk7IHhtbTY9KDQxIDUxIDYxIDcxKQorCW1vdmFwcyAgICB4bW0zLHhtbTQJCTsgdHJhbnNwb3NlIGNvZWZmaWNpZW50cyhwaGFzZSAyKQorCXVucGNrbHBzMiB4bW00LHhtbTIJCTsgeG1tND0oNDIgNTIgNjIgNzIpCisJdW5wY2tocHMyIHhtbTMseG1tMgkJOyB4bW0zPSg0MyA1MyA2MyA3MykKKworCW1vdmFwcwlYTU1XT1JEIFtYTU1CTE9DSygwLDEsZWRpLFNJWkVPRl9GQVNUX0ZMT0FUKV0sIHhtbTUKKwltb3ZhcHMJWE1NV09SRCBbWE1NQkxPQ0soMSwxLGVkaSxTSVpFT0ZfRkFTVF9GTE9BVCldLCB4bW02CisJbW92YXBzCVhNTVdPUkQgW1hNTUJMT0NLKDIsMSxlZGksU0laRU9GX0ZBU1RfRkxPQVQpXSwgeG1tNAorCW1vdmFwcwlYTU1XT1JEIFtYTU1CTE9DSygzLDEsZWRpLFNJWkVPRl9GQVNUX0ZMT0FUKV0sIHhtbTMKKworLm5leHRjb2x1bW46CisJYWRkCWVzaSwgYnl0ZSA0KlNJWkVPRl9KQ09FRgkJOyBjb2VmX2Jsb2NrCisJYWRkCWVkeCwgYnl0ZSA0KlNJWkVPRl9GTE9BVF9NVUxUX1RZUEUJOyBxdWFudHB0cgorCWFkZAllZGksICAgICAgNCpEQ1RTSVpFKlNJWkVPRl9GQVNUX0ZMT0FUCTsgd3NwdHIKKwlkZWMJZWN4CQkJCQk7IGN0cgorCWpuegluZWFyIC5jb2x1bW5sb29wCisKKwk7IC0tIFByZWZldGNoIHRoZSBuZXh0IGNvZWZmaWNpZW50IGJsb2NrCisKKwlwcmVmZXRjaG50YSBbZXNpICsgKERDVFNJWkUyLTgpKlNJWkVPRl9KQ09FRiArIDAqMzJdCisJcHJlZmV0Y2hudGEgW2VzaSArIChEQ1RTSVpFMi04KSpTSVpFT0ZfSkNPRUYgKyAxKjMyXQorCXByZWZldGNobnRhIFtlc2kgKyAoRENUU0laRTItOCkqU0laRU9GX0pDT0VGICsgMiozMl0KKwlwcmVmZXRjaG50YSBbZXNpICsgKERDVFNJWkUyLTgpKlNJWkVPRl9KQ09FRiArIDMqMzJdCisKKwk7IC0tLS0gUGFzcyAyOiBwcm9jZXNzIHJvd3MgZnJvbSB3b3JrIGFycmF5LCBzdG9yZSBpbnRvIG91dHB1dCBhcnJheS4KKworCW1vdgllYXgsIFtvcmlnaW5hbF9lYnBdCisJbGVhCWVzaSwgW3dvcmtzcGFjZV0JCQk7IEZBU1RfRkxPQVQgKiB3c3B0cgorCW1vdgllZGksIEpTQU1QQVJSQVkgW291dHB1dF9idWYoZWF4KV0JOyAoSlNBTVBST1cgKikKKwltb3YJZWF4LCBKRElNRU5TSU9OIFtvdXRwdXRfY29sKGVheCldCisJbW92CWVjeCwgRENUU0laRS80CQkJCTsgY3RyCisJYWxpZ254CTE2LDcKKy5yb3dsb29wOgorCisJOyAtLSBFdmVuIHBhcnQKKworCW1vdmFwcwl4bW0wLCBYTU1XT1JEIFtYTU1CTE9DSygwLDAsZXNpLFNJWkVPRl9GQVNUX0ZMT0FUKV0KKwltb3ZhcHMJeG1tMSwgWE1NV09SRCBbWE1NQkxPQ0soMiwwLGVzaSxTSVpFT0ZfRkFTVF9GTE9BVCldCisJbW92YXBzCXhtbTIsIFhNTVdPUkQgW1hNTUJMT0NLKDQsMCxlc2ksU0laRU9GX0ZBU1RfRkxPQVQpXQorCW1vdmFwcwl4bW0zLCBYTU1XT1JEIFtYTU1CTE9DSyg2LDAsZXNpLFNJWkVPRl9GQVNUX0ZMT0FUKV0KKworCW1vdmFwcwl4bW00LHhtbTAKKwltb3ZhcHMJeG1tNSx4bW0xCisJc3VicHMJeG1tMCx4bW0yCQk7IHhtbTA9dG1wMTEKKwlzdWJwcwl4bW0xLHhtbTMKKwlhZGRwcwl4bW00LHhtbTIJCTsgeG1tND10bXAxMAorCWFkZHBzCXhtbTUseG1tMwkJOyB4bW01PXRtcDEzCisKKwltdWxwcwl4bW0xLFtHT1RPRkYoZWJ4LFBEXzFfNDE0KV0KKwlzdWJwcwl4bW0xLHhtbTUJCTsgeG1tMT10bXAxMgorCisJbW92YXBzCXhtbTYseG1tNAorCW1vdmFwcwl4bW03LHhtbTAKKwlzdWJwcwl4bW00LHhtbTUJCTsgeG1tND10bXAzCisJc3VicHMJeG1tMCx4bW0xCQk7IHhtbTA9dG1wMgorCWFkZHBzCXhtbTYseG1tNQkJOyB4bW02PXRtcDAKKwlhZGRwcwl4bW03LHhtbTEJCTsgeG1tNz10bXAxCisKKwltb3ZhcHMJWE1NV09SRCBbd2soMSldLCB4bW00CTsgdG1wMworCW1vdmFwcwlYTU1XT1JEIFt3aygwKV0sIHhtbTAJOyB0bXAyCisKKwk7IC0tIE9kZCBwYXJ0CisKKwltb3ZhcHMJeG1tMiwgWE1NV09SRCBbWE1NQkxPQ0soMSwwLGVzaSxTSVpFT0ZfRkFTVF9GTE9BVCldCisJbW92YXBzCXhtbTMsIFhNTVdPUkQgW1hNTUJMT0NLKDMsMCxlc2ksU0laRU9GX0ZBU1RfRkxPQVQpXQorCW1vdmFwcwl4bW01LCBYTU1XT1JEIFtYTU1CTE9DSyg1LDAsZXNpLFNJWkVPRl9GQVNUX0ZMT0FUKV0KKwltb3ZhcHMJeG1tMSwgWE1NV09SRCBbWE1NQkxPQ0soNywwLGVzaSxTSVpFT0ZfRkFTVF9GTE9BVCldCisKKwltb3ZhcHMJeG1tNCx4bW0yCisJbW92YXBzCXhtbTAseG1tNQorCWFkZHBzCXhtbTIseG1tMQkJOyB4bW0yPXoxMQorCWFkZHBzCXhtbTUseG1tMwkJOyB4bW01PXoxMworCXN1YnBzCXhtbTQseG1tMQkJOyB4bW00PXoxMgorCXN1YnBzCXhtbTAseG1tMwkJOyB4bW0wPXoxMAorCisJbW92YXBzCXhtbTEseG1tMgorCXN1YnBzCXhtbTIseG1tNQorCWFkZHBzCXhtbTEseG1tNQkJOyB4bW0xPXRtcDcKKworCW11bHBzCXhtbTIsW0dPVE9GRihlYngsUERfMV80MTQpXQk7IHhtbTI9dG1wMTEKKworCW1vdmFwcwl4bW0zLHhtbTAKKwlhZGRwcwl4bW0wLHhtbTQKKwltdWxwcwl4bW0wLFtHT1RPRkYoZWJ4LFBEXzFfODQ3KV0JOyB4bW0wPXo1CisJbXVscHMJeG1tMyxbR09UT0ZGKGVieCxQRF9NMl82MTMpXQk7IHhtbTM9KHoxMCAqIC0yLjYxMzEyNTkzMCkKKwltdWxwcwl4bW00LFtHT1RPRkYoZWJ4LFBEXzFfMDgyKV0JOyB4bW00PSh6MTIgKiAxLjA4MjM5MjIwMCkKKwlhZGRwcwl4bW0zLHhtbTAJCTsgeG1tMz10bXAxMgorCXN1YnBzCXhtbTQseG1tMAkJOyB4bW00PXRtcDEwCisKKwk7IC0tIEZpbmFsIG91dHB1dCBzdGFnZQorCisJc3VicHMJeG1tMyx4bW0xCQk7IHhtbTM9dG1wNgorCW1vdmFwcwl4bW01LHhtbTYKKwltb3ZhcHMJeG1tMCx4bW03CisJYWRkcHMJeG1tNix4bW0xCQk7IHhtbTY9ZGF0YTA9KDAwIDEwIDIwIDMwKQorCWFkZHBzCXhtbTcseG1tMwkJOyB4bW03PWRhdGExPSgwMSAxMSAyMSAzMSkKKwlzdWJwcwl4bW01LHhtbTEJCTsgeG1tNT1kYXRhNz0oMDcgMTcgMjcgMzcpCisJc3VicHMJeG1tMCx4bW0zCQk7IHhtbTA9ZGF0YTY9KDA2IDE2IDI2IDM2KQorCXN1YnBzCXhtbTIseG1tMwkJOyB4bW0yPXRtcDUKKworCW1vdmFwcwl4bW0xLFtHT1RPRkYoZWJ4LFBEX1JORElOVF9NQUdJQyldCTsgeG1tMT1bUERfUk5ESU5UX01BR0lDXQorCXBjbXBlcWQJeG1tMyx4bW0zCisJcHNybGQJeG1tMyxXT1JEX0JJVAkJOyB4bW0zPXsweEZGRkYgMHgwMDAwIDB4RkZGRiAweDAwMDAgLi59CisKKwlhZGRwcwl4bW02LHhtbTEJOyB4bW02PXJvdW5kaW50KGRhdGEwLzgpPSgwMCAqKiAxMCAqKiAyMCAqKiAzMCAqKikKKwlhZGRwcwl4bW03LHhtbTEJOyB4bW03PXJvdW5kaW50KGRhdGExLzgpPSgwMSAqKiAxMSAqKiAyMSAqKiAzMSAqKikKKwlhZGRwcwl4bW0wLHhtbTEJOyB4bW0wPXJvdW5kaW50KGRhdGE2LzgpPSgwNiAqKiAxNiAqKiAyNiAqKiAzNiAqKikKKwlhZGRwcwl4bW01LHhtbTEJOyB4bW01PXJvdW5kaW50KGRhdGE3LzgpPSgwNyAqKiAxNyAqKiAyNyAqKiAzNyAqKikKKworCXBhbmQJeG1tNix4bW0zCQk7IHhtbTY9KDAwIC0tIDEwIC0tIDIwIC0tIDMwIC0tKQorCXBzbGxkCXhtbTcsV09SRF9CSVQJCTsgeG1tNz0oLS0gMDEgLS0gMTEgLS0gMjEgLS0gMzEpCisJcGFuZAl4bW0wLHhtbTMJCTsgeG1tMD0oMDYgLS0gMTYgLS0gMjYgLS0gMzYgLS0pCisJcHNsbGQJeG1tNSxXT1JEX0JJVAkJOyB4bW01PSgtLSAwNyAtLSAxNyAtLSAyNyAtLSAzNykKKwlwb3IJeG1tNix4bW03CQk7IHhtbTY9KDAwIDAxIDEwIDExIDIwIDIxIDMwIDMxKQorCXBvcgl4bW0wLHhtbTUJCTsgeG1tMD0oMDYgMDcgMTYgMTcgMjYgMjcgMzYgMzcpCisKKwltb3ZhcHMJeG1tMSwgWE1NV09SRCBbd2soMCldCTsgeG1tMT10bXAyCisJbW92YXBzCXhtbTMsIFhNTVdPUkQgW3drKDEpXQk7IHhtbTM9dG1wMworCisJYWRkcHMJeG1tNCx4bW0yCQk7IHhtbTQ9dG1wNAorCW1vdmFwcwl4bW03LHhtbTEKKwltb3ZhcHMJeG1tNSx4bW0zCisJYWRkcHMJeG1tMSx4bW0yCQk7IHhtbTE9ZGF0YTI9KDAyIDEyIDIyIDMyKQorCWFkZHBzCXhtbTMseG1tNAkJOyB4bW0zPWRhdGE0PSgwNCAxNCAyNCAzNCkKKwlzdWJwcwl4bW03LHhtbTIJCTsgeG1tNz1kYXRhNT0oMDUgMTUgMjUgMzUpCisJc3VicHMJeG1tNSx4bW00CQk7IHhtbTU9ZGF0YTM9KDAzIDEzIDIzIDMzKQorCisJbW92YXBzCXhtbTIsW0dPVE9GRihlYngsUERfUk5ESU5UX01BR0lDKV0JOyB4bW0yPVtQRF9STkRJTlRfTUFHSUNdCisJcGNtcGVxZAl4bW00LHhtbTQKKwlwc3JsZAl4bW00LFdPUkRfQklUCQk7IHhtbTQ9ezB4RkZGRiAweDAwMDAgMHhGRkZGIDB4MDAwMCAuLn0KKworCWFkZHBzCXhtbTMseG1tMgk7IHhtbTM9cm91bmRpbnQoZGF0YTQvOCk9KDA0ICoqIDE0ICoqIDI0ICoqIDM0ICoqKQorCWFkZHBzCXhtbTcseG1tMgk7IHhtbTc9cm91bmRpbnQoZGF0YTUvOCk9KDA1ICoqIDE1ICoqIDI1ICoqIDM1ICoqKQorCWFkZHBzCXhtbTEseG1tMgk7IHhtbTE9cm91bmRpbnQoZGF0YTIvOCk9KDAyICoqIDEyICoqIDIyICoqIDMyICoqKQorCWFkZHBzCXhtbTUseG1tMgk7IHhtbTU9cm91bmRpbnQoZGF0YTMvOCk9KDAzICoqIDEzICoqIDIzICoqIDMzICoqKQorCisJcGFuZAl4bW0zLHhtbTQJCTsgeG1tMz0oMDQgLS0gMTQgLS0gMjQgLS0gMzQgLS0pCisJcHNsbGQJeG1tNyxXT1JEX0JJVAkJOyB4bW03PSgtLSAwNSAtLSAxNSAtLSAyNSAtLSAzNSkKKwlwYW5kCXhtbTEseG1tNAkJOyB4bW0xPSgwMiAtLSAxMiAtLSAyMiAtLSAzMiAtLSkKKwlwc2xsZAl4bW01LFdPUkRfQklUCQk7IHhtbTU9KC0tIDAzIC0tIDEzIC0tIDIzIC0tIDMzKQorCXBvcgl4bW0zLHhtbTcJCTsgeG1tMz0oMDQgMDUgMTQgMTUgMjQgMjUgMzQgMzUpCisJcG9yCXhtbTEseG1tNQkJOyB4bW0xPSgwMiAwMyAxMiAxMyAyMiAyMyAzMiAzMykKKworCW1vdmRxYSAgICB4bW0yLFtHT1RPRkYoZWJ4LFBCX0NFTlRFUkpTQU1QKV0JOyB4bW0yPVtQQl9DRU5URVJKU0FNUF0KKworCXBhY2tzc3diICB4bW02LHhtbTMJOyB4bW02PSgwMCAwMSAxMCAxMSAyMCAyMSAzMCAzMSAwNCAwNSAxNCAxNSAyNCAyNSAzNCAzNSkKKwlwYWNrc3N3YiAgeG1tMSx4bW0wCTsgeG1tMT0oMDIgMDMgMTIgMTMgMjIgMjMgMzIgMzMgMDYgMDcgMTYgMTcgMjYgMjcgMzYgMzcpCisJcGFkZGIgICAgIHhtbTYseG1tMgorCXBhZGRiICAgICB4bW0xLHhtbTIKKworCW1vdmRxYSAgICB4bW00LHhtbTYJOyB0cmFuc3Bvc2UgY29lZmZpY2llbnRzKHBoYXNlIDIpCisJcHVucGNrbHdkIHhtbTYseG1tMQk7IHhtbTY9KDAwIDAxIDAyIDAzIDEwIDExIDEyIDEzIDIwIDIxIDIyIDIzIDMwIDMxIDMyIDMzKQorCXB1bnBja2h3ZCB4bW00LHhtbTEJOyB4bW00PSgwNCAwNSAwNiAwNyAxNCAxNSAxNiAxNyAyNCAyNSAyNiAyNyAzNCAzNSAzNiAzNykKKworCW1vdmRxYSAgICB4bW03LHhtbTYJOyB0cmFuc3Bvc2UgY29lZmZpY2llbnRzKHBoYXNlIDMpCisJcHVucGNrbGRxIHhtbTYseG1tNAk7IHhtbTY9KDAwIDAxIDAyIDAzIDA0IDA1IDA2IDA3IDEwIDExIDEyIDEzIDE0IDE1IDE2IDE3KQorCXB1bnBja2hkcSB4bW03LHhtbTQJOyB4bW03PSgyMCAyMSAyMiAyMyAyNCAyNSAyNiAyNyAzMCAzMSAzMiAzMyAzNCAzNSAzNiAzNykKKworCXBzaHVmZAl4bW01LHhtbTYsMHg0RQk7IHhtbTU9KDEwIDExIDEyIDEzIDE0IDE1IDE2IDE3IDAwIDAxIDAyIDAzIDA0IDA1IDA2IDA3KQorCXBzaHVmZAl4bW0zLHhtbTcsMHg0RQk7IHhtbTM9KDMwIDMxIDMyIDMzIDM0IDM1IDM2IDM3IDIwIDIxIDIyIDIzIDI0IDI1IDI2IDI3KQorCisJcHVzaHBpYwllYngJCQk7IHNhdmUgR09UIGFkZHJlc3MKKworCW1vdgllZHgsIEpTQU1QUk9XIFtlZGkrMCpTSVpFT0ZfSlNBTVBST1ddCisJbW92CWVieCwgSlNBTVBST1cgW2VkaSsyKlNJWkVPRl9KU0FNUFJPV10KKwltb3ZxCVhNTV9NTVdPUkQgW2VkeCtlYXgqU0laRU9GX0pTQU1QTEVdLCB4bW02CisJbW92cQlYTU1fTU1XT1JEIFtlYngrZWF4KlNJWkVPRl9KU0FNUExFXSwgeG1tNworCW1vdgllZHgsIEpTQU1QUk9XIFtlZGkrMSpTSVpFT0ZfSlNBTVBST1ddCisJbW92CWVieCwgSlNBTVBST1cgW2VkaSszKlNJWkVPRl9KU0FNUFJPV10KKwltb3ZxCVhNTV9NTVdPUkQgW2VkeCtlYXgqU0laRU9GX0pTQU1QTEVdLCB4bW01CisJbW92cQlYTU1fTU1XT1JEIFtlYngrZWF4KlNJWkVPRl9KU0FNUExFXSwgeG1tMworCisJcG9wcGljCWVieAkJCTsgcmVzdG9yZSBHT1QgYWRkcmVzcworCisJYWRkCWVzaSwgYnl0ZSA0KlNJWkVPRl9GQVNUX0ZMT0FUCTsgd3NwdHIKKwlhZGQJZWRpLCBieXRlIDQqU0laRU9GX0pTQU1QUk9XCisJZGVjCWVjeAkJCQk7IGN0cgorCWpuegluZWFyIC5yb3dsb29wCisKKwlwb3AJZWRpCisJcG9wCWVzaQorOwlwb3AJZWR4CQk7IG5lZWQgbm90IGJlIHByZXNlcnZlZAorOwlwb3AJZWN4CQk7IG5lZWQgbm90IGJlIHByZXNlcnZlZAorCXBvcAllYngKKwltb3YJZXNwLGVicAkJOyBlc3AgPC0gYWxpZ25lZCBlYnAKKwlwb3AJZXNwCQk7IGVzcCA8LSBvcmlnaW5hbCBlYnAKKwlwb3AJZWJwCisJcmV0CisKKzsgRm9yIHNvbWUgcmVhc29uLCB0aGUgT1MgWCBsaW5rZXIgZG9lcyBub3QgaG9ub3IgdGhlIHJlcXVlc3QgdG8gYWxpZ24gdGhlCis7IHNlZ21lbnQgdW5sZXNzIHdlIGRvIHRoaXMuCisJYWxpZ24JMTYKZGlmZiAtLWdpdCBhL3NpbWQvamlzczJmc3QtNjQuYXNtIGIvc2ltZC9qaXNzMmZzdC02NC5hc20KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDg4NzUwNQotLS0gL2Rldi9udWxsCisrKyBiL3NpbWQvamlzczJmc3QtNjQuYXNtCkBAIC0wLDAgKzEsNDkyIEBACis7Cis7IGppc3MyZnN0LTY0LmFzbSAtIGZhc3QgaW50ZWdlciBJRENUICg2NC1iaXQgU1NFMikKKzsKKzsgQ29weXJpZ2h0IDIwMDkgUGllcnJlIE9zc21hbiA8b3NzbWFuQGNlbmRpby5zZT4gZm9yIENlbmRpbyBBQgorOyBDb3B5cmlnaHQgMjAwOSBELiBSLiBDb21tYW5kZXIKKzsKKzsgQmFzZWQgb24KKzsgeDg2IFNJTUQgZXh0ZW5zaW9uIGZvciBJSkcgSlBFRyBsaWJyYXJ5Cis7IENvcHlyaWdodCAoQykgMTk5OS0yMDA2LCBNSVlBU0FLQSBNYXNhcnUuCis7IEZvciBjb25kaXRpb25zIG9mIGRpc3RyaWJ1dGlvbiBhbmQgdXNlLCBzZWUgY29weXJpZ2h0IG5vdGljZSBpbiBqc2ltZGV4dC5pbmMKKzsKKzsgVGhpcyBmaWxlIHNob3VsZCBiZSBhc3NlbWJsZWQgd2l0aCBOQVNNIChOZXR3aWRlIEFzc2VtYmxlciksCis7IGNhbiAqbm90KiBiZSBhc3NlbWJsZWQgd2l0aCBNaWNyb3NvZnQncyBNQVNNIG9yIGFueSBjb21wYXRpYmxlCis7IGFzc2VtYmxlciAoaW5jbHVkaW5nIEJvcmxhbmQncyBUdXJibyBBc3NlbWJsZXIpLgorOyBOQVNNIGlzIGF2YWlsYWJsZSBmcm9tIGh0dHA6Ly9uYXNtLnNvdXJjZWZvcmdlLm5ldC8gb3IKKzsgaHR0cDovL3NvdXJjZWZvcmdlLm5ldC9wcm9qZWNwdC9zaG93ZmlsZXMucGhwP2dyb3VwX2lkPTYyMDgKKzsKKzsgVGhpcyBmaWxlIGNvbnRhaW5zIGEgZmFzdCwgbm90IHNvIGFjY3VyYXRlIGludGVnZXIgaW1wbGVtZW50YXRpb24gb2YKKzsgdGhlIGludmVyc2UgRENUIChEaXNjcmV0ZSBDb3NpbmUgVHJhbnNmb3JtKS4gVGhlIGZvbGxvd2luZyBjb2RlIGlzCis7IGJhc2VkIGRpcmVjdGx5IG9uIHRoZSBJSkcncyBvcmlnaW5hbCBqaWRjdGZzdC5jOyBzZWUgdGhlIGppZGN0ZnN0LmMKKzsgZm9yIG1vcmUgZGV0YWlscy4KKzsKKzsgW1RBQjhdCisKKyVpbmNsdWRlICJqc2ltZGV4dC5pbmMiCislaW5jbHVkZSAiamRjdC5pbmMiCisKKzsgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworJWRlZmluZSBDT05TVF9CSVRTCTgJOyAxNCBpcyBhbHNvIE9LLgorJWRlZmluZSBQQVNTMV9CSVRTCTIKKworJWlmIElGQVNUX1NDQUxFX0JJVFMgIT0gUEFTUzFfQklUUworJWVycm9yICInSUZBU1RfU0NBTEVfQklUUycgbXVzdCBiZSBlcXVhbCB0byAnUEFTUzFfQklUUycuIgorJWVuZGlmCisKKyVpZiBDT05TVF9CSVRTID09IDgKK0ZfMV8wODIJZXF1CTI3NwkJOyBGSVgoMS4wODIzOTIyMDApCitGXzFfNDE0CWVxdQkzNjIJCTsgRklYKDEuNDE0MjEzNTYyKQorRl8xXzg0NwllcXUJNDczCQk7IEZJWCgxLjg0Nzc1OTA2NSkKK0ZfMl82MTMJZXF1CTY2OQkJOyBGSVgoMi42MTMxMjU5MzApCitGXzFfNjEzCWVxdQkoRl8yXzYxMyAtIDI1NikJOyBGSVgoMi42MTMxMjU5MzApIC0gRklYKDEpCislZWxzZQorOyBOQVNNIGNhbm5vdCBkbyBjb21waWxlLXRpbWUgYXJpdGhtZXRpYyBvbiBmbG9hdGluZy1wb2ludCBjb25zdGFudHMuCislZGVmaW5lCURFU0NBTEUoeCxuKSAgKCgoeCkrKDE8PCgobiktMSkpKT4+KG4pKQorRl8xXzA4MgllcXUJREVTQ0FMRSgxMTYyMjA5Nzc1LDMwLUNPTlNUX0JJVFMpCTsgRklYKDEuMDgyMzkyMjAwKQorRl8xXzQxNAllcXUJREVTQ0FMRSgxNTE4NTAwMjQ5LDMwLUNPTlNUX0JJVFMpCTsgRklYKDEuNDE0MjEzNTYyKQorRl8xXzg0NwllcXUJREVTQ0FMRSgxOTg0MDE2MTg4LDMwLUNPTlNUX0JJVFMpCTsgRklYKDEuODQ3NzU5MDY1KQorRl8yXzYxMwllcXUJREVTQ0FMRSgyODA1ODIyNjAyLDMwLUNPTlNUX0JJVFMpCTsgRklYKDIuNjEzMTI1OTMwKQorRl8xXzYxMwllcXUJKEZfMl82MTMgLSAoMSA8PCBDT05TVF9CSVRTKSkJOyBGSVgoMi42MTMxMjU5MzApIC0gRklYKDEpCislZW5kaWYKKworOyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCVNFQ1RJT04JU0VHX0NPTlNUCisKKzsgUFJFX01VTFRJUExZX1NDQUxFX0JJVFMgPD0gMiAodG8gYXZvaWQgb3ZlcmZsb3cpCis7IENPTlNUX0JJVFMgKyBDT05TVF9TSElGVCArIFBSRV9NVUxUSVBMWV9TQ0FMRV9CSVRTID09IDE2IChmb3IgcG11bGh3KQorCislZGVmaW5lIFBSRV9NVUxUSVBMWV9TQ0FMRV9CSVRTICAgMgorJWRlZmluZSBDT05TVF9TSElGVCAgICAgKDE2IC0gUFJFX01VTFRJUExZX1NDQUxFX0JJVFMgLSBDT05TVF9CSVRTKQorCisJYWxpZ256CTE2CisJZ2xvYmFsCUVYVE4oamNvbnN0X2lkY3RfaWZhc3Rfc3NlMikKKworRVhUTihqY29uc3RfaWRjdF9pZmFzdF9zc2UyKToKKworUFdfRjE0MTQJdGltZXMgOCBkdyAgRl8xXzQxNCA8PCBDT05TVF9TSElGVAorUFdfRjE4NDcJdGltZXMgOCBkdyAgRl8xXzg0NyA8PCBDT05TVF9TSElGVAorUFdfTUYxNjEzCXRpbWVzIDggZHcgLUZfMV82MTMgPDwgQ09OU1RfU0hJRlQKK1BXX0YxMDgyCXRpbWVzIDggZHcgIEZfMV8wODIgPDwgQ09OU1RfU0hJRlQKK1BCX0NFTlRFUkpTQU1QCXRpbWVzIDE2IGRiIENFTlRFUkpTQU1QTEUKKworCWFsaWduegkxNgorCis7IC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisJU0VDVElPTglTRUdfVEVYVAorCUJJVFMJNjQKKzsKKzsgUGVyZm9ybSBkZXF1YW50aXphdGlvbiBhbmQgaW52ZXJzZSBEQ1Qgb24gb25lIGJsb2NrIG9mIGNvZWZmaWNpZW50cy4KKzsKKzsgR0xPQkFMKHZvaWQpCis7IGpzaW1kX2lkY3RfaWZhc3Rfc3NlMiAodm9pZCAqIGRjdF90YWJsZSwgSkNPRUZQVFIgY29lZl9ibG9jaywKKzsgICAgICAgICAgICAgICAgICAgICAgIEpTQU1QQVJSQVkgb3V0cHV0X2J1ZiwgSkRJTUVOU0lPTiBvdXRwdXRfY29sKQorOworCis7IHIxMCA9IGpwZWdfY29tcG9uZW50X2luZm8gKiBjb21wcHRyCis7IHIxMSA9IEpDT0VGUFRSIGNvZWZfYmxvY2sKKzsgcjEyID0gSlNBTVBBUlJBWSBvdXRwdXRfYnVmCis7IHIxMyA9IEpESU1FTlNJT04gb3V0cHV0X2NvbAorCislZGVmaW5lIG9yaWdpbmFsX3JicAlyYnArMAorJWRlZmluZSB3ayhpKQkJcmJwLShXS19OVU0tKGkpKSpTSVpFT0ZfWE1NV09SRAk7IHhtbXdvcmQgd2tbV0tfTlVNXQorJWRlZmluZSBXS19OVU0JCTIKKworCWFsaWduCTE2CisJZ2xvYmFsCUVYVE4oanNpbWRfaWRjdF9pZmFzdF9zc2UyKQorCitFWFROKGpzaW1kX2lkY3RfaWZhc3Rfc3NlMik6CisJcHVzaAlyYnAKKwltb3YJcmF4LHJzcAkJCQk7IHJheCA9IG9yaWdpbmFsIHJicAorCXN1Yglyc3AsIGJ5dGUgNAorCWFuZAlyc3AsIGJ5dGUgKC1TSVpFT0ZfWE1NV09SRCkJOyBhbGlnbiB0byAxMjggYml0cworCW1vdglbcnNwXSxyYXgKKwltb3YJcmJwLHJzcAkJCQk7IHJicCA9IGFsaWduZWQgcmJwCisJbGVhCXJzcCwgW3drKDApXQorCWNvbGxlY3RfYXJncworCisJOyAtLS0tIFBhc3MgMTogcHJvY2VzcyBjb2x1bW5zIGZyb20gaW5wdXQuCisKKwltb3YJcmR4LCByMTAJOyBxdWFudHB0cgorCW1vdglyc2ksIHIxMQkJOyBpbnB0cgorCislaWZuZGVmIE5PX1pFUk9fQ09MVU1OX1RFU1RfSUZBU1RfU1NFMgorCW1vdgllYXgsIERXT1JEIFtEV0JMT0NLKDEsMCxyc2ksU0laRU9GX0pDT0VGKV0KKwlvcgllYXgsIERXT1JEIFtEV0JMT0NLKDIsMCxyc2ksU0laRU9GX0pDT0VGKV0KKwlqbnoJbmVhciAuY29sdW1uRENUCisKKwltb3ZkcWEJeG1tMCwgWE1NV09SRCBbWE1NQkxPQ0soMSwwLHJzaSxTSVpFT0ZfSkNPRUYpXQorCW1vdmRxYQl4bW0xLCBYTU1XT1JEIFtYTU1CTE9DSygyLDAscnNpLFNJWkVPRl9KQ09FRildCisJcG9yCXhtbTAsIFhNTVdPUkQgW1hNTUJMT0NLKDMsMCxyc2ksU0laRU9GX0pDT0VGKV0KKwlwb3IJeG1tMSwgWE1NV09SRCBbWE1NQkxPQ0soNCwwLHJzaSxTSVpFT0ZfSkNPRUYpXQorCXBvcgl4bW0wLCBYTU1XT1JEIFtYTU1CTE9DSyg1LDAscnNpLFNJWkVPRl9KQ09FRildCisJcG9yCXhtbTEsIFhNTVdPUkQgW1hNTUJMT0NLKDYsMCxyc2ksU0laRU9GX0pDT0VGKV0KKwlwb3IJeG1tMCwgWE1NV09SRCBbWE1NQkxPQ0soNywwLHJzaSxTSVpFT0ZfSkNPRUYpXQorCXBvcgl4bW0xLHhtbTAKKwlwYWNrc3N3YiB4bW0xLHhtbTEKKwlwYWNrc3N3YiB4bW0xLHhtbTEKKwltb3ZkCWVheCx4bW0xCisJdGVzdAlyYXgscmF4CisJam56CXNob3J0IC5jb2x1bW5EQ1QKKworCTsgLS0gQUMgdGVybXMgYWxsIHplcm8KKworCW1vdmRxYQl4bW0wLCBYTU1XT1JEIFtYTU1CTE9DSygwLDAscnNpLFNJWkVPRl9KQ09FRildCisJcG11bGx3CXhtbTAsIFhNTVdPUkQgW1hNTUJMT0NLKDAsMCxyZHgsU0laRU9GX0lTTE9XX01VTFRfVFlQRSldCisKKwltb3ZkcWEgICAgeG1tNyx4bW0wCQk7IHhtbTA9aW4wPSgwMCAwMSAwMiAwMyAwNCAwNSAwNiAwNykKKwlwdW5wY2tsd2QgeG1tMCx4bW0wCQk7IHhtbTA9KDAwIDAwIDAxIDAxIDAyIDAyIDAzIDAzKQorCXB1bnBja2h3ZCB4bW03LHhtbTcJCTsgeG1tNz0oMDQgMDQgMDUgMDUgMDYgMDYgMDcgMDcpCisKKwlwc2h1ZmQJeG1tNix4bW0wLDB4MDAJCTsgeG1tNj1jb2wwPSgwMCAwMCAwMCAwMCAwMCAwMCAwMCAwMCkKKwlwc2h1ZmQJeG1tMix4bW0wLDB4NTUJCTsgeG1tMj1jb2wxPSgwMSAwMSAwMSAwMSAwMSAwMSAwMSAwMSkKKwlwc2h1ZmQJeG1tNSx4bW0wLDB4QUEJCTsgeG1tNT1jb2wyPSgwMiAwMiAwMiAwMiAwMiAwMiAwMiAwMikKKwlwc2h1ZmQJeG1tMCx4bW0wLDB4RkYJCTsgeG1tMD1jb2wzPSgwMyAwMyAwMyAwMyAwMyAwMyAwMyAwMykKKwlwc2h1ZmQJeG1tMSx4bW03LDB4MDAJCTsgeG1tMT1jb2w0PSgwNCAwNCAwNCAwNCAwNCAwNCAwNCAwNCkKKwlwc2h1ZmQJeG1tNCx4bW03LDB4NTUJCTsgeG1tND1jb2w1PSgwNSAwNSAwNSAwNSAwNSAwNSAwNSAwNSkKKwlwc2h1ZmQJeG1tMyx4bW03LDB4QUEJCTsgeG1tMz1jb2w2PSgwNiAwNiAwNiAwNiAwNiAwNiAwNiAwNikKKwlwc2h1ZmQJeG1tNyx4bW03LDB4RkYJCTsgeG1tNz1jb2w3PSgwNyAwNyAwNyAwNyAwNyAwNyAwNyAwNykKKworCW1vdmRxYQlYTU1XT1JEIFt3aygwKV0sIHhtbTIJOyB3aygwKT1jb2wxCisJbW92ZHFhCVhNTVdPUkQgW3drKDEpXSwgeG1tMAk7IHdrKDEpPWNvbDMKKwlqbXAJbmVhciAuY29sdW1uX2VuZAorJWVuZGlmCisuY29sdW1uRENUOgorCisJOyAtLSBFdmVuIHBhcnQKKworCW1vdmRxYQl4bW0wLCBYTU1XT1JEIFtYTU1CTE9DSygwLDAscnNpLFNJWkVPRl9KQ09FRildCisJbW92ZHFhCXhtbTEsIFhNTVdPUkQgW1hNTUJMT0NLKDIsMCxyc2ksU0laRU9GX0pDT0VGKV0KKwlwbXVsbHcJeG1tMCwgWE1NV09SRCBbWE1NQkxPQ0soMCwwLHJkeCxTSVpFT0ZfSUZBU1RfTVVMVF9UWVBFKV0KKwlwbXVsbHcJeG1tMSwgWE1NV09SRCBbWE1NQkxPQ0soMiwwLHJkeCxTSVpFT0ZfSUZBU1RfTVVMVF9UWVBFKV0KKwltb3ZkcWEJeG1tMiwgWE1NV09SRCBbWE1NQkxPQ0soNCwwLHJzaSxTSVpFT0ZfSkNPRUYpXQorCW1vdmRxYQl4bW0zLCBYTU1XT1JEIFtYTU1CTE9DSyg2LDAscnNpLFNJWkVPRl9KQ09FRildCisJcG11bGx3CXhtbTIsIFhNTVdPUkQgW1hNTUJMT0NLKDQsMCxyZHgsU0laRU9GX0lGQVNUX01VTFRfVFlQRSldCisJcG11bGx3CXhtbTMsIFhNTVdPUkQgW1hNTUJMT0NLKDYsMCxyZHgsU0laRU9GX0lGQVNUX01VTFRfVFlQRSldCisKKwltb3ZkcWEJeG1tNCx4bW0wCisJbW92ZHFhCXhtbTUseG1tMQorCXBzdWJ3CXhtbTAseG1tMgkJOyB4bW0wPXRtcDExCisJcHN1YncJeG1tMSx4bW0zCisJcGFkZHcJeG1tNCx4bW0yCQk7IHhtbTQ9dG1wMTAKKwlwYWRkdwl4bW01LHhtbTMJCTsgeG1tNT10bXAxMworCisJcHNsbHcJeG1tMSxQUkVfTVVMVElQTFlfU0NBTEVfQklUUworCXBtdWxodwl4bW0xLFtyZWwgUFdfRjE0MTRdCisJcHN1YncJeG1tMSx4bW01CQk7IHhtbTE9dG1wMTIKKworCW1vdmRxYQl4bW02LHhtbTQKKwltb3ZkcWEJeG1tNyx4bW0wCisJcHN1YncJeG1tNCx4bW01CQk7IHhtbTQ9dG1wMworCXBzdWJ3CXhtbTAseG1tMQkJOyB4bW0wPXRtcDIKKwlwYWRkdwl4bW02LHhtbTUJCTsgeG1tNj10bXAwCisJcGFkZHcJeG1tNyx4bW0xCQk7IHhtbTc9dG1wMQorCisJbW92ZHFhCVhNTVdPUkQgW3drKDEpXSwgeG1tNAk7IHdrKDEpPXRtcDMKKwltb3ZkcWEJWE1NV09SRCBbd2soMCldLCB4bW0wCTsgd2soMCk9dG1wMgorCisJOyAtLSBPZGQgcGFydAorCisJbW92ZHFhCXhtbTIsIFhNTVdPUkQgW1hNTUJMT0NLKDEsMCxyc2ksU0laRU9GX0pDT0VGKV0KKwltb3ZkcWEJeG1tMywgWE1NV09SRCBbWE1NQkxPQ0soMywwLHJzaSxTSVpFT0ZfSkNPRUYpXQorCXBtdWxsdwl4bW0yLCBYTU1XT1JEIFtYTU1CTE9DSygxLDAscmR4LFNJWkVPRl9JRkFTVF9NVUxUX1RZUEUpXQorCXBtdWxsdwl4bW0zLCBYTU1XT1JEIFtYTU1CTE9DSygzLDAscmR4LFNJWkVPRl9JRkFTVF9NVUxUX1RZUEUpXQorCW1vdmRxYQl4bW01LCBYTU1XT1JEIFtYTU1CTE9DSyg1LDAscnNpLFNJWkVPRl9KQ09FRildCisJbW92ZHFhCXhtbTEsIFhNTVdPUkQgW1hNTUJMT0NLKDcsMCxyc2ksU0laRU9GX0pDT0VGKV0KKwlwbXVsbHcJeG1tNSwgWE1NV09SRCBbWE1NQkxPQ0soNSwwLHJkeCxTSVpFT0ZfSUZBU1RfTVVMVF9UWVBFKV0KKwlwbXVsbHcJeG1tMSwgWE1NV09SRCBbWE1NQkxPQ0soNywwLHJkeCxTSVpFT0ZfSUZBU1RfTVVMVF9UWVBFKV0KKworCW1vdmRxYQl4bW00LHhtbTIKKwltb3ZkcWEJeG1tMCx4bW01CisJcHN1YncJeG1tMix4bW0xCQk7IHhtbTI9ejEyCisJcHN1YncJeG1tNSx4bW0zCQk7IHhtbTU9ejEwCisJcGFkZHcJeG1tNCx4bW0xCQk7IHhtbTQ9ejExCisJcGFkZHcJeG1tMCx4bW0zCQk7IHhtbTA9ejEzCisKKwltb3ZkcWEJeG1tMSx4bW01CQk7IHhtbTE9ejEwKHVuc2NhbGVkKQorCXBzbGx3CXhtbTIsUFJFX01VTFRJUExZX1NDQUxFX0JJVFMKKwlwc2xsdwl4bW01LFBSRV9NVUxUSVBMWV9TQ0FMRV9CSVRTCisKKwltb3ZkcWEJeG1tMyx4bW00CisJcHN1YncJeG1tNCx4bW0wCisJcGFkZHcJeG1tMyx4bW0wCQk7IHhtbTM9dG1wNworCisJcHNsbHcJeG1tNCxQUkVfTVVMVElQTFlfU0NBTEVfQklUUworCXBtdWxodwl4bW00LFtyZWwgUFdfRjE0MTRdCTsgeG1tND10bXAxMQorCisJOyBUbyBhdm9pZCBvdmVyZmxvdy4uLgorCTsKKwk7IChPcmlnaW5hbCkKKwk7IHRtcDEyID0gLTIuNjEzMTI1OTMwICogejEwICsgejU7CisJOworCTsgKFRoaXMgaW1wbGVtZW50YXRpb24pCisJOyB0bXAxMiA9ICgtMS42MTMxMjU5MzAgLSAxKSAqIHoxMCArIHo1OworCTsgICAgICAgPSAtMS42MTMxMjU5MzAgKiB6MTAgLSB6MTAgKyB6NTsKKworCW1vdmRxYQl4bW0wLHhtbTUKKwlwYWRkdwl4bW01LHhtbTIKKwlwbXVsaHcJeG1tNSxbcmVsIFBXX0YxODQ3XQk7IHhtbTU9ejUKKwlwbXVsaHcJeG1tMCxbcmVsIFBXX01GMTYxM10KKwlwbXVsaHcJeG1tMixbcmVsIFBXX0YxMDgyXQorCXBzdWJ3CXhtbTAseG1tMQorCXBzdWJ3CXhtbTIseG1tNQkJOyB4bW0yPXRtcDEwCisJcGFkZHcJeG1tMCx4bW01CQk7IHhtbTA9dG1wMTIKKworCTsgLS0gRmluYWwgb3V0cHV0IHN0YWdlCisKKwlwc3Vidwl4bW0wLHhtbTMJCTsgeG1tMD10bXA2CisJbW92ZHFhCXhtbTEseG1tNgorCW1vdmRxYQl4bW01LHhtbTcKKwlwYWRkdwl4bW02LHhtbTMJCTsgeG1tNj1kYXRhMD0oMDAgMDEgMDIgMDMgMDQgMDUgMDYgMDcpCisJcGFkZHcJeG1tNyx4bW0wCQk7IHhtbTc9ZGF0YTE9KDEwIDExIDEyIDEzIDE0IDE1IDE2IDE3KQorCXBzdWJ3CXhtbTEseG1tMwkJOyB4bW0xPWRhdGE3PSg3MCA3MSA3MiA3MyA3NCA3NSA3NiA3NykKKwlwc3Vidwl4bW01LHhtbTAJCTsgeG1tNT1kYXRhNj0oNjAgNjEgNjIgNjMgNjQgNjUgNjYgNjcpCisJcHN1YncJeG1tNCx4bW0wCQk7IHhtbTQ9dG1wNQorCisJbW92ZHFhICAgIHhtbTMseG1tNgkJOyB0cmFuc3Bvc2UgY29lZmZpY2llbnRzKHBoYXNlIDEpCisJcHVucGNrbHdkIHhtbTYseG1tNwkJOyB4bW02PSgwMCAxMCAwMSAxMSAwMiAxMiAwMyAxMykKKwlwdW5wY2tod2QgeG1tMyx4bW03CQk7IHhtbTM9KDA0IDE0IDA1IDE1IDA2IDE2IDA3IDE3KQorCW1vdmRxYSAgICB4bW0wLHhtbTUJCTsgdHJhbnNwb3NlIGNvZWZmaWNpZW50cyhwaGFzZSAxKQorCXB1bnBja2x3ZCB4bW01LHhtbTEJCTsgeG1tNT0oNjAgNzAgNjEgNzEgNjIgNzIgNjMgNzMpCisJcHVucGNraHdkIHhtbTAseG1tMQkJOyB4bW0wPSg2NCA3NCA2NSA3NSA2NiA3NiA2NyA3NykKKworCW1vdmRxYQl4bW03LCBYTU1XT1JEIFt3aygwKV0JOyB4bW03PXRtcDIKKwltb3ZkcWEJeG1tMSwgWE1NV09SRCBbd2soMSldCTsgeG1tMT10bXAzCisKKwltb3ZkcWEJWE1NV09SRCBbd2soMCldLCB4bW01CTsgd2soMCk9KDYwIDcwIDYxIDcxIDYyIDcyIDYzIDczKQorCW1vdmRxYQlYTU1XT1JEIFt3aygxKV0sIHhtbTAJOyB3aygxKT0oNjQgNzQgNjUgNzUgNjYgNzYgNjcgNzcpCisKKwlwYWRkdwl4bW0yLHhtbTQJCTsgeG1tMj10bXA0CisJbW92ZHFhCXhtbTUseG1tNworCW1vdmRxYQl4bW0wLHhtbTEKKwlwYWRkdwl4bW03LHhtbTQJCTsgeG1tNz1kYXRhMj0oMjAgMjEgMjIgMjMgMjQgMjUgMjYgMjcpCisJcGFkZHcJeG1tMSx4bW0yCQk7IHhtbTE9ZGF0YTQ9KDQwIDQxIDQyIDQzIDQ0IDQ1IDQ2IDQ3KQorCXBzdWJ3CXhtbTUseG1tNAkJOyB4bW01PWRhdGE1PSg1MCA1MSA1MiA1MyA1NCA1NSA1NiA1NykKKwlwc3Vidwl4bW0wLHhtbTIJCTsgeG1tMD1kYXRhMz0oMzAgMzEgMzIgMzMgMzQgMzUgMzYgMzcpCisKKwltb3ZkcWEgICAgeG1tNCx4bW03CQk7IHRyYW5zcG9zZSBjb2VmZmljaWVudHMocGhhc2UgMSkKKwlwdW5wY2tsd2QgeG1tNyx4bW0wCQk7IHhtbTc9KDIwIDMwIDIxIDMxIDIyIDMyIDIzIDMzKQorCXB1bnBja2h3ZCB4bW00LHhtbTAJCTsgeG1tND0oMjQgMzQgMjUgMzUgMjYgMzYgMjcgMzcpCisJbW92ZHFhICAgIHhtbTIseG1tMQkJOyB0cmFuc3Bvc2UgY29lZmZpY2llbnRzKHBoYXNlIDEpCisJcHVucGNrbHdkIHhtbTEseG1tNQkJOyB4bW0xPSg0MCA1MCA0MSA1MSA0MiA1MiA0MyA1MykKKwlwdW5wY2tod2QgeG1tMix4bW01CQk7IHhtbTI9KDQ0IDU0IDQ1IDU1IDQ2IDU2IDQ3IDU3KQorCisJbW92ZHFhICAgIHhtbTAseG1tMwkJOyB0cmFuc3Bvc2UgY29lZmZpY2llbnRzKHBoYXNlIDIpCisJcHVucGNrbGRxIHhtbTMseG1tNAkJOyB4bW0zPSgwNCAxNCAyNCAzNCAwNSAxNSAyNSAzNSkKKwlwdW5wY2toZHEgeG1tMCx4bW00CQk7IHhtbTA9KDA2IDE2IDI2IDM2IDA3IDE3IDI3IDM3KQorCW1vdmRxYSAgICB4bW01LHhtbTYJCTsgdHJhbnNwb3NlIGNvZWZmaWNpZW50cyhwaGFzZSAyKQorCXB1bnBja2xkcSB4bW02LHhtbTcJCTsgeG1tNj0oMDAgMTAgMjAgMzAgMDEgMTEgMjEgMzEpCisJcHVucGNraGRxIHhtbTUseG1tNwkJOyB4bW01PSgwMiAxMiAyMiAzMiAwMyAxMyAyMyAzMykKKworCW1vdmRxYQl4bW00LCBYTU1XT1JEIFt3aygwKV0JOyB4bW00PSg2MCA3MCA2MSA3MSA2MiA3MiA2MyA3MykKKwltb3ZkcWEJeG1tNywgWE1NV09SRCBbd2soMSldCTsgeG1tNz0oNjQgNzQgNjUgNzUgNjYgNzYgNjcgNzcpCisKKwltb3ZkcWEJWE1NV09SRCBbd2soMCldLCB4bW0zCTsgd2soMCk9KDA0IDE0IDI0IDM0IDA1IDE1IDI1IDM1KQorCW1vdmRxYQlYTU1XT1JEIFt3aygxKV0sIHhtbTAJOyB3aygxKT0oMDYgMTYgMjYgMzYgMDcgMTcgMjcgMzcpCisKKwltb3ZkcWEgICAgeG1tMyx4bW0xCQk7IHRyYW5zcG9zZSBjb2VmZmljaWVudHMocGhhc2UgMikKKwlwdW5wY2tsZHEgeG1tMSx4bW00CQk7IHhtbTE9KDQwIDUwIDYwIDcwIDQxIDUxIDYxIDcxKQorCXB1bnBja2hkcSB4bW0zLHhtbTQJCTsgeG1tMz0oNDIgNTIgNjIgNzIgNDMgNTMgNjMgNzMpCisJbW92ZHFhICAgIHhtbTAseG1tMgkJOyB0cmFuc3Bvc2UgY29lZmZpY2llbnRzKHBoYXNlIDIpCisJcHVucGNrbGRxIHhtbTIseG1tNwkJOyB4bW0yPSg0NCA1NCA2NCA3NCA0NSA1NSA2NSA3NSkKKwlwdW5wY2toZHEgeG1tMCx4bW03CQk7IHhtbTA9KDQ2IDU2IDY2IDc2IDQ3IDU3IDY3IDc3KQorCisJbW92ZHFhICAgICB4bW00LHhtbTYJCTsgdHJhbnNwb3NlIGNvZWZmaWNpZW50cyhwaGFzZSAzKQorCXB1bnBja2xxZHEgeG1tNix4bW0xCQk7IHhtbTY9Y29sMD0oMDAgMTAgMjAgMzAgNDAgNTAgNjAgNzApCisJcHVucGNraHFkcSB4bW00LHhtbTEJCTsgeG1tND1jb2wxPSgwMSAxMSAyMSAzMSA0MSA1MSA2MSA3MSkKKwltb3ZkcWEgICAgIHhtbTcseG1tNQkJOyB0cmFuc3Bvc2UgY29lZmZpY2llbnRzKHBoYXNlIDMpCisJcHVucGNrbHFkcSB4bW01LHhtbTMJCTsgeG1tNT1jb2wyPSgwMiAxMiAyMiAzMiA0MiA1MiA2MiA3MikKKwlwdW5wY2tocWRxIHhtbTcseG1tMwkJOyB4bW03PWNvbDM9KDAzIDEzIDIzIDMzIDQzIDUzIDYzIDczKQorCisJbW92ZHFhCXhtbTEsIFhNTVdPUkQgW3drKDApXQk7IHhtbTE9KDA0IDE0IDI0IDM0IDA1IDE1IDI1IDM1KQorCW1vdmRxYQl4bW0zLCBYTU1XT1JEIFt3aygxKV0JOyB4bW0zPSgwNiAxNiAyNiAzNiAwNyAxNyAyNyAzNykKKworCW1vdmRxYQlYTU1XT1JEIFt3aygwKV0sIHhtbTQJOyB3aygwKT1jb2wxCisJbW92ZHFhCVhNTVdPUkQgW3drKDEpXSwgeG1tNwk7IHdrKDEpPWNvbDMKKworCW1vdmRxYSAgICAgeG1tNCx4bW0xCQk7IHRyYW5zcG9zZSBjb2VmZmljaWVudHMocGhhc2UgMykKKwlwdW5wY2tscWRxIHhtbTEseG1tMgkJOyB4bW0xPWNvbDQ9KDA0IDE0IDI0IDM0IDQ0IDU0IDY0IDc0KQorCXB1bnBja2hxZHEgeG1tNCx4bW0yCQk7IHhtbTQ9Y29sNT0oMDUgMTUgMjUgMzUgNDUgNTUgNjUgNzUpCisJbW92ZHFhICAgICB4bW03LHhtbTMJCTsgdHJhbnNwb3NlIGNvZWZmaWNpZW50cyhwaGFzZSAzKQorCXB1bnBja2xxZHEgeG1tMyx4bW0wCQk7IHhtbTM9Y29sNj0oMDYgMTYgMjYgMzYgNDYgNTYgNjYgNzYpCisJcHVucGNraHFkcSB4bW03LHhtbTAJCTsgeG1tNz1jb2w3PSgwNyAxNyAyNyAzNyA0NyA1NyA2NyA3NykKKy5jb2x1bW5fZW5kOgorCisJOyAtLSBQcmVmZXRjaCB0aGUgbmV4dCBjb2VmZmljaWVudCBibG9jaworCisJcHJlZmV0Y2hudGEgW3JzaSArIERDVFNJWkUyKlNJWkVPRl9KQ09FRiArIDAqMzJdCisJcHJlZmV0Y2hudGEgW3JzaSArIERDVFNJWkUyKlNJWkVPRl9KQ09FRiArIDEqMzJdCisJcHJlZmV0Y2hudGEgW3JzaSArIERDVFNJWkUyKlNJWkVPRl9KQ09FRiArIDIqMzJdCisJcHJlZmV0Y2hudGEgW3JzaSArIERDVFNJWkUyKlNJWkVPRl9KQ09FRiArIDMqMzJdCisKKwk7IC0tLS0gUGFzcyAyOiBwcm9jZXNzIHJvd3MgZnJvbSB3b3JrIGFycmF5LCBzdG9yZSBpbnRvIG91dHB1dCBhcnJheS4KKworCW1vdglyYXgsIFtvcmlnaW5hbF9yYnBdCisJbW92CXJkaSwgcjEyCTsgKEpTQU1QUk9XICopCisJbW92CXJheCwgcjEzCisKKwk7IC0tIEV2ZW4gcGFydAorCisJOyB4bW02PWNvbDAsIHhtbTU9Y29sMiwgeG1tMT1jb2w0LCB4bW0zPWNvbDYKKworCW1vdmRxYQl4bW0yLHhtbTYKKwltb3ZkcWEJeG1tMCx4bW01CisJcHN1YncJeG1tNix4bW0xCQk7IHhtbTY9dG1wMTEKKwlwc3Vidwl4bW01LHhtbTMKKwlwYWRkdwl4bW0yLHhtbTEJCTsgeG1tMj10bXAxMAorCXBhZGR3CXhtbTAseG1tMwkJOyB4bW0wPXRtcDEzCisKKwlwc2xsdwl4bW01LFBSRV9NVUxUSVBMWV9TQ0FMRV9CSVRTCisJcG11bGh3CXhtbTUsW3JlbCBQV19GMTQxNF0KKwlwc3Vidwl4bW01LHhtbTAJCTsgeG1tNT10bXAxMgorCisJbW92ZHFhCXhtbTEseG1tMgorCW1vdmRxYQl4bW0zLHhtbTYKKwlwc3Vidwl4bW0yLHhtbTAJCTsgeG1tMj10bXAzCisJcHN1YncJeG1tNix4bW01CQk7IHhtbTY9dG1wMgorCXBhZGR3CXhtbTEseG1tMAkJOyB4bW0xPXRtcDAKKwlwYWRkdwl4bW0zLHhtbTUJCTsgeG1tMz10bXAxCisKKwltb3ZkcWEJeG1tMCwgWE1NV09SRCBbd2soMCldCTsgeG1tMD1jb2wxCisJbW92ZHFhCXhtbTUsIFhNTVdPUkQgW3drKDEpXQk7IHhtbTU9Y29sMworCisJbW92ZHFhCVhNTVdPUkQgW3drKDApXSwgeG1tMgk7IHdrKDApPXRtcDMKKwltb3ZkcWEJWE1NV09SRCBbd2soMSldLCB4bW02CTsgd2soMSk9dG1wMgorCisJOyAtLSBPZGQgcGFydAorCisJOyB4bW0wPWNvbDEsIHhtbTU9Y29sMywgeG1tND1jb2w1LCB4bW03PWNvbDcKKworCW1vdmRxYQl4bW0yLHhtbTAKKwltb3ZkcWEJeG1tNix4bW00CisJcHN1YncJeG1tMCx4bW03CQk7IHhtbTA9ejEyCisJcHN1YncJeG1tNCx4bW01CQk7IHhtbTQ9ejEwCisJcGFkZHcJeG1tMix4bW03CQk7IHhtbTI9ejExCisJcGFkZHcJeG1tNix4bW01CQk7IHhtbTY9ejEzCisKKwltb3ZkcWEJeG1tNyx4bW00CQk7IHhtbTc9ejEwKHVuc2NhbGVkKQorCXBzbGx3CXhtbTAsUFJFX01VTFRJUExZX1NDQUxFX0JJVFMKKwlwc2xsdwl4bW00LFBSRV9NVUxUSVBMWV9TQ0FMRV9CSVRTCisKKwltb3ZkcWEJeG1tNSx4bW0yCisJcHN1YncJeG1tMix4bW02CisJcGFkZHcJeG1tNSx4bW02CQk7IHhtbTU9dG1wNworCisJcHNsbHcJeG1tMixQUkVfTVVMVElQTFlfU0NBTEVfQklUUworCXBtdWxodwl4bW0yLFtyZWwgUFdfRjE0MTRdCTsgeG1tMj10bXAxMQorCisJOyBUbyBhdm9pZCBvdmVyZmxvdy4uLgorCTsKKwk7IChPcmlnaW5hbCkKKwk7IHRtcDEyID0gLTIuNjEzMTI1OTMwICogejEwICsgejU7CisJOworCTsgKFRoaXMgaW1wbGVtZW50YXRpb24pCisJOyB0bXAxMiA9ICgtMS42MTMxMjU5MzAgLSAxKSAqIHoxMCArIHo1OworCTsgICAgICAgPSAtMS42MTMxMjU5MzAgKiB6MTAgLSB6MTAgKyB6NTsKKworCW1vdmRxYQl4bW02LHhtbTQKKwlwYWRkdwl4bW00LHhtbTAKKwlwbXVsaHcJeG1tNCxbcmVsIFBXX0YxODQ3XQk7IHhtbTQ9ejUKKwlwbXVsaHcJeG1tNixbcmVsIFBXX01GMTYxM10KKwlwbXVsaHcJeG1tMCxbcmVsIFBXX0YxMDgyXQorCXBzdWJ3CXhtbTYseG1tNworCXBzdWJ3CXhtbTAseG1tNAkJOyB4bW0wPXRtcDEwCisJcGFkZHcJeG1tNix4bW00CQk7IHhtbTY9dG1wMTIKKworCTsgLS0gRmluYWwgb3V0cHV0IHN0YWdlCisKKwlwc3Vidwl4bW02LHhtbTUJCTsgeG1tNj10bXA2CisJbW92ZHFhCXhtbTcseG1tMQorCW1vdmRxYQl4bW00LHhtbTMKKwlwYWRkdwl4bW0xLHhtbTUJCTsgeG1tMT1kYXRhMD0oMDAgMTAgMjAgMzAgNDAgNTAgNjAgNzApCisJcGFkZHcJeG1tMyx4bW02CQk7IHhtbTM9ZGF0YTE9KDAxIDExIDIxIDMxIDQxIDUxIDYxIDcxKQorCXBzcmF3CXhtbTEsKFBBU1MxX0JJVFMrMykJOyBkZXNjYWxlCisJcHNyYXcJeG1tMywoUEFTUzFfQklUUyszKQk7IGRlc2NhbGUKKwlwc3Vidwl4bW03LHhtbTUJCTsgeG1tNz1kYXRhNz0oMDcgMTcgMjcgMzcgNDcgNTcgNjcgNzcpCisJcHN1YncJeG1tNCx4bW02CQk7IHhtbTQ9ZGF0YTY9KDA2IDE2IDI2IDM2IDQ2IDU2IDY2IDc2KQorCXBzcmF3CXhtbTcsKFBBU1MxX0JJVFMrMykJOyBkZXNjYWxlCisJcHNyYXcJeG1tNCwoUEFTUzFfQklUUyszKQk7IGRlc2NhbGUKKwlwc3Vidwl4bW0yLHhtbTYJCTsgeG1tMj10bXA1CisKKwlwYWNrc3N3YiAgeG1tMSx4bW00CTsgeG1tMT0oMDAgMTAgMjAgMzAgNDAgNTAgNjAgNzAgMDYgMTYgMjYgMzYgNDYgNTYgNjYgNzYpCisJcGFja3Nzd2IgIHhtbTMseG1tNwk7IHhtbTM9KDAxIDExIDIxIDMxIDQxIDUxIDYxIDcxIDA3IDE3IDI3IDM3IDQ3IDU3IDY3IDc3KQorCisJbW92ZHFhCXhtbTUsIFhNTVdPUkQgW3drKDEpXQk7IHhtbTU9dG1wMgorCW1vdmRxYQl4bW02LCBYTU1XT1JEIFt3aygwKV0JOyB4bW02PXRtcDMKKworCXBhZGR3CXhtbTAseG1tMgkJOyB4bW0wPXRtcDQKKwltb3ZkcWEJeG1tNCx4bW01CisJbW92ZHFhCXhtbTcseG1tNgorCXBhZGR3CXhtbTUseG1tMgkJOyB4bW01PWRhdGEyPSgwMiAxMiAyMiAzMiA0MiA1MiA2MiA3MikKKwlwYWRkdwl4bW02LHhtbTAJCTsgeG1tNj1kYXRhND0oMDQgMTQgMjQgMzQgNDQgNTQgNjQgNzQpCisJcHNyYXcJeG1tNSwoUEFTUzFfQklUUyszKQk7IGRlc2NhbGUKKwlwc3Jhdwl4bW02LChQQVNTMV9CSVRTKzMpCTsgZGVzY2FsZQorCXBzdWJ3CXhtbTQseG1tMgkJOyB4bW00PWRhdGE1PSgwNSAxNSAyNSAzNSA0NSA1NSA2NSA3NSkKKwlwc3Vidwl4bW03LHhtbTAJCTsgeG1tNz1kYXRhMz0oMDMgMTMgMjMgMzMgNDMgNTMgNjMgNzMpCisJcHNyYXcJeG1tNCwoUEFTUzFfQklUUyszKQk7IGRlc2NhbGUKKwlwc3Jhdwl4bW03LChQQVNTMV9CSVRTKzMpCTsgZGVzY2FsZQorCisJbW92ZHFhICAgIHhtbTIsW3JlbCBQQl9DRU5URVJKU0FNUF0JOyB4bW0yPVtyZWwgUEJfQ0VOVEVSSlNBTVBdCisKKwlwYWNrc3N3YiAgeG1tNSx4bW02CTsgeG1tNT0oMDIgMTIgMjIgMzIgNDIgNTIgNjIgNzIgMDQgMTQgMjQgMzQgNDQgNTQgNjQgNzQpCisJcGFja3Nzd2IgIHhtbTcseG1tNAk7IHhtbTc9KDAzIDEzIDIzIDMzIDQzIDUzIDYzIDczIDA1IDE1IDI1IDM1IDQ1IDU1IDY1IDc1KQorCisJcGFkZGIgICAgIHhtbTEseG1tMgorCXBhZGRiICAgICB4bW0zLHhtbTIKKwlwYWRkYiAgICAgeG1tNSx4bW0yCisJcGFkZGIgICAgIHhtbTcseG1tMgorCisJbW92ZHFhICAgIHhtbTAseG1tMQk7IHRyYW5zcG9zZSBjb2VmZmljaWVudHMocGhhc2UgMSkKKwlwdW5wY2tsYncgeG1tMSx4bW0zCTsgeG1tMT0oMDAgMDEgMTAgMTEgMjAgMjEgMzAgMzEgNDAgNDEgNTAgNTEgNjAgNjEgNzAgNzEpCisJcHVucGNraGJ3IHhtbTAseG1tMwk7IHhtbTA9KDA2IDA3IDE2IDE3IDI2IDI3IDM2IDM3IDQ2IDQ3IDU2IDU3IDY2IDY3IDc2IDc3KQorCW1vdmRxYSAgICB4bW02LHhtbTUJOyB0cmFuc3Bvc2UgY29lZmZpY2llbnRzKHBoYXNlIDEpCisJcHVucGNrbGJ3IHhtbTUseG1tNwk7IHhtbTU9KDAyIDAzIDEyIDEzIDIyIDIzIDMyIDMzIDQyIDQzIDUyIDUzIDYyIDYzIDcyIDczKQorCXB1bnBja2hidyB4bW02LHhtbTcJOyB4bW02PSgwNCAwNSAxNCAxNSAyNCAyNSAzNCAzNSA0NCA0NSA1NCA1NSA2NCA2NSA3NCA3NSkKKworCW1vdmRxYSAgICB4bW00LHhtbTEJOyB0cmFuc3Bvc2UgY29lZmZpY2llbnRzKHBoYXNlIDIpCisJcHVucGNrbHdkIHhtbTEseG1tNQk7IHhtbTE9KDAwIDAxIDAyIDAzIDEwIDExIDEyIDEzIDIwIDIxIDIyIDIzIDMwIDMxIDMyIDMzKQorCXB1bnBja2h3ZCB4bW00LHhtbTUJOyB4bW00PSg0MCA0MSA0MiA0MyA1MCA1MSA1MiA1MyA2MCA2MSA2MiA2MyA3MCA3MSA3MiA3MykKKwltb3ZkcWEgICAgeG1tMix4bW02CTsgdHJhbnNwb3NlIGNvZWZmaWNpZW50cyhwaGFzZSAyKQorCXB1bnBja2x3ZCB4bW02LHhtbTAJOyB4bW02PSgwNCAwNSAwNiAwNyAxNCAxNSAxNiAxNyAyNCAyNSAyNiAyNyAzNCAzNSAzNiAzNykKKwlwdW5wY2tod2QgeG1tMix4bW0wCTsgeG1tMj0oNDQgNDUgNDYgNDcgNTQgNTUgNTYgNTcgNjQgNjUgNjYgNjcgNzQgNzUgNzYgNzcpCisKKwltb3ZkcWEgICAgeG1tMyx4bW0xCTsgdHJhbnNwb3NlIGNvZWZmaWNpZW50cyhwaGFzZSAzKQorCXB1bnBja2xkcSB4bW0xLHhtbTYJOyB4bW0xPSgwMCAwMSAwMiAwMyAwNCAwNSAwNiAwNyAxMCAxMSAxMiAxMyAxNCAxNSAxNiAxNykKKwlwdW5wY2toZHEgeG1tMyx4bW02CTsgeG1tMz0oMjAgMjEgMjIgMjMgMjQgMjUgMjYgMjcgMzAgMzEgMzIgMzMgMzQgMzUgMzYgMzcpCisJbW92ZHFhICAgIHhtbTcseG1tNAk7IHRyYW5zcG9zZSBjb2VmZmljaWVudHMocGhhc2UgMykKKwlwdW5wY2tsZHEgeG1tNCx4bW0yCTsgeG1tND0oNDAgNDEgNDIgNDMgNDQgNDUgNDYgNDcgNTAgNTEgNTIgNTMgNTQgNTUgNTYgNTcpCisJcHVucGNraGRxIHhtbTcseG1tMgk7IHhtbTc9KDYwIDYxIDYyIDYzIDY0IDY1IDY2IDY3IDcwIDcxIDcyIDczIDc0IDc1IDc2IDc3KQorCisJcHNodWZkCXhtbTUseG1tMSwweDRFCTsgeG1tNT0oMTAgMTEgMTIgMTMgMTQgMTUgMTYgMTcgMDAgMDEgMDIgMDMgMDQgMDUgMDYgMDcpCisJcHNodWZkCXhtbTAseG1tMywweDRFCTsgeG1tMD0oMzAgMzEgMzIgMzMgMzQgMzUgMzYgMzcgMjAgMjEgMjIgMjMgMjQgMjUgMjYgMjcpCisJcHNodWZkCXhtbTYseG1tNCwweDRFCTsgeG1tNj0oNTAgNTEgNTIgNTMgNTQgNTUgNTYgNTcgNDAgNDEgNDIgNDMgNDQgNDUgNDYgNDcpCisJcHNodWZkCXhtbTIseG1tNywweDRFCTsgeG1tMj0oNzAgNzEgNzIgNzMgNzQgNzUgNzYgNzcgNjAgNjEgNjIgNjMgNjQgNjUgNjYgNjcpCisKKwltb3YJcmR4LCBKU0FNUFJPVyBbcmRpKzAqU0laRU9GX0pTQU1QUk9XXQorCW1vdglyc2ksIEpTQU1QUk9XIFtyZGkrMipTSVpFT0ZfSlNBTVBST1ddCisJbW92cQlYTU1fTU1XT1JEIFtyZHgrcmF4KlNJWkVPRl9KU0FNUExFXSwgeG1tMQorCW1vdnEJWE1NX01NV09SRCBbcnNpK3JheCpTSVpFT0ZfSlNBTVBMRV0sIHhtbTMKKwltb3YJcmR4LCBKU0FNUFJPVyBbcmRpKzQqU0laRU9GX0pTQU1QUk9XXQorCW1vdglyc2ksIEpTQU1QUk9XIFtyZGkrNipTSVpFT0ZfSlNBTVBST1ddCisJbW92cQlYTU1fTU1XT1JEIFtyZHgrcmF4KlNJWkVPRl9KU0FNUExFXSwgeG1tNAorCW1vdnEJWE1NX01NV09SRCBbcnNpK3JheCpTSVpFT0ZfSlNBTVBMRV0sIHhtbTcKKworCW1vdglyZHgsIEpTQU1QUk9XIFtyZGkrMSpTSVpFT0ZfSlNBTVBST1ddCisJbW92CXJzaSwgSlNBTVBST1cgW3JkaSszKlNJWkVPRl9KU0FNUFJPV10KKwltb3ZxCVhNTV9NTVdPUkQgW3JkeCtyYXgqU0laRU9GX0pTQU1QTEVdLCB4bW01CisJbW92cQlYTU1fTU1XT1JEIFtyc2krcmF4KlNJWkVPRl9KU0FNUExFXSwgeG1tMAorCW1vdglyZHgsIEpTQU1QUk9XIFtyZGkrNSpTSVpFT0ZfSlNBTVBST1ddCisJbW92CXJzaSwgSlNBTVBST1cgW3JkaSs3KlNJWkVPRl9KU0FNUFJPV10KKwltb3ZxCVhNTV9NTVdPUkQgW3JkeCtyYXgqU0laRU9GX0pTQU1QTEVdLCB4bW02CisJbW92cQlYTU1fTU1XT1JEIFtyc2krcmF4KlNJWkVPRl9KU0FNUExFXSwgeG1tMgorCisJdW5jb2xsZWN0X2FyZ3MKKwltb3YJcnNwLHJicAkJOyByc3AgPC0gYWxpZ25lZCByYnAKKwlwb3AJcnNwCQk7IHJzcCA8LSBvcmlnaW5hbCByYnAKKwlwb3AJcmJwCisJcmV0CisJcmV0CisKKzsgRm9yIHNvbWUgcmVhc29uLCB0aGUgT1MgWCBsaW5rZXIgZG9lcyBub3QgaG9ub3IgdGhlIHJlcXVlc3QgdG8gYWxpZ24gdGhlCis7IHNlZ21lbnQgdW5sZXNzIHdlIGRvIHRoaXMuCisJYWxpZ24JMTYKZGlmZiAtLWdpdCBhL3NpbWQvamlzczJmc3QuYXNtIGIvc2ltZC9qaXNzMmZzdC5hc20KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjUzNjY0ZAotLS0gL2Rldi9udWxsCisrKyBiL3NpbWQvamlzczJmc3QuYXNtCkBAIC0wLDAgKzEsNTAyIEBACis7Cis7IGppc3MyZnN0LmFzbSAtIGZhc3QgaW50ZWdlciBJRENUIChTU0UyKQorOworOyBDb3B5cmlnaHQgMjAwOSBQaWVycmUgT3NzbWFuIDxvc3NtYW5AY2VuZGlvLnNlPiBmb3IgQ2VuZGlvIEFCCis7Cis7IEJhc2VkIG9uCis7IHg4NiBTSU1EIGV4dGVuc2lvbiBmb3IgSUpHIEpQRUcgbGlicmFyeQorOyBDb3B5cmlnaHQgKEMpIDE5OTktMjAwNiwgTUlZQVNBS0EgTWFzYXJ1LgorOyBGb3IgY29uZGl0aW9ucyBvZiBkaXN0cmlidXRpb24gYW5kIHVzZSwgc2VlIGNvcHlyaWdodCBub3RpY2UgaW4ganNpbWRleHQuaW5jCis7Cis7IFRoaXMgZmlsZSBzaG91bGQgYmUgYXNzZW1ibGVkIHdpdGggTkFTTSAoTmV0d2lkZSBBc3NlbWJsZXIpLAorOyBjYW4gKm5vdCogYmUgYXNzZW1ibGVkIHdpdGggTWljcm9zb2Z0J3MgTUFTTSBvciBhbnkgY29tcGF0aWJsZQorOyBhc3NlbWJsZXIgKGluY2x1ZGluZyBCb3JsYW5kJ3MgVHVyYm8gQXNzZW1ibGVyKS4KKzsgTkFTTSBpcyBhdmFpbGFibGUgZnJvbSBodHRwOi8vbmFzbS5zb3VyY2Vmb3JnZS5uZXQvIG9yCis7IGh0dHA6Ly9zb3VyY2Vmb3JnZS5uZXQvcHJvamVjdC9zaG93ZmlsZXMucGhwP2dyb3VwX2lkPTYyMDgKKzsKKzsgVGhpcyBmaWxlIGNvbnRhaW5zIGEgZmFzdCwgbm90IHNvIGFjY3VyYXRlIGludGVnZXIgaW1wbGVtZW50YXRpb24gb2YKKzsgdGhlIGludmVyc2UgRENUIChEaXNjcmV0ZSBDb3NpbmUgVHJhbnNmb3JtKS4gVGhlIGZvbGxvd2luZyBjb2RlIGlzCis7IGJhc2VkIGRpcmVjdGx5IG9uIHRoZSBJSkcncyBvcmlnaW5hbCBqaWRjdGZzdC5jOyBzZWUgdGhlIGppZGN0ZnN0LmMKKzsgZm9yIG1vcmUgZGV0YWlscy4KKzsKKzsgW1RBQjhdCisKKyVpbmNsdWRlICJqc2ltZGV4dC5pbmMiCislaW5jbHVkZSAiamRjdC5pbmMiCisKKzsgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworJWRlZmluZSBDT05TVF9CSVRTCTgJOyAxNCBpcyBhbHNvIE9LLgorJWRlZmluZSBQQVNTMV9CSVRTCTIKKworJWlmIElGQVNUX1NDQUxFX0JJVFMgIT0gUEFTUzFfQklUUworJWVycm9yICInSUZBU1RfU0NBTEVfQklUUycgbXVzdCBiZSBlcXVhbCB0byAnUEFTUzFfQklUUycuIgorJWVuZGlmCisKKyVpZiBDT05TVF9CSVRTID09IDgKK0ZfMV8wODIJZXF1CTI3NwkJOyBGSVgoMS4wODIzOTIyMDApCitGXzFfNDE0CWVxdQkzNjIJCTsgRklYKDEuNDE0MjEzNTYyKQorRl8xXzg0NwllcXUJNDczCQk7IEZJWCgxLjg0Nzc1OTA2NSkKK0ZfMl82MTMJZXF1CTY2OQkJOyBGSVgoMi42MTMxMjU5MzApCitGXzFfNjEzCWVxdQkoRl8yXzYxMyAtIDI1NikJOyBGSVgoMi42MTMxMjU5MzApIC0gRklYKDEpCislZWxzZQorOyBOQVNNIGNhbm5vdCBkbyBjb21waWxlLXRpbWUgYXJpdGhtZXRpYyBvbiBmbG9hdGluZy1wb2ludCBjb25zdGFudHMuCislZGVmaW5lCURFU0NBTEUoeCxuKSAgKCgoeCkrKDE8PCgobiktMSkpKT4+KG4pKQorRl8xXzA4MgllcXUJREVTQ0FMRSgxMTYyMjA5Nzc1LDMwLUNPTlNUX0JJVFMpCTsgRklYKDEuMDgyMzkyMjAwKQorRl8xXzQxNAllcXUJREVTQ0FMRSgxNTE4NTAwMjQ5LDMwLUNPTlNUX0JJVFMpCTsgRklYKDEuNDE0MjEzNTYyKQorRl8xXzg0NwllcXUJREVTQ0FMRSgxOTg0MDE2MTg4LDMwLUNPTlNUX0JJVFMpCTsgRklYKDEuODQ3NzU5MDY1KQorRl8yXzYxMwllcXUJREVTQ0FMRSgyODA1ODIyNjAyLDMwLUNPTlNUX0JJVFMpCTsgRklYKDIuNjEzMTI1OTMwKQorRl8xXzYxMwllcXUJKEZfMl82MTMgLSAoMSA8PCBDT05TVF9CSVRTKSkJOyBGSVgoMi42MTMxMjU5MzApIC0gRklYKDEpCislZW5kaWYKKworOyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCVNFQ1RJT04JU0VHX0NPTlNUCisKKzsgUFJFX01VTFRJUExZX1NDQUxFX0JJVFMgPD0gMiAodG8gYXZvaWQgb3ZlcmZsb3cpCis7IENPTlNUX0JJVFMgKyBDT05TVF9TSElGVCArIFBSRV9NVUxUSVBMWV9TQ0FMRV9CSVRTID09IDE2IChmb3IgcG11bGh3KQorCislZGVmaW5lIFBSRV9NVUxUSVBMWV9TQ0FMRV9CSVRTICAgMgorJWRlZmluZSBDT05TVF9TSElGVCAgICAgKDE2IC0gUFJFX01VTFRJUExZX1NDQUxFX0JJVFMgLSBDT05TVF9CSVRTKQorCisJYWxpZ256CTE2CisJZ2xvYmFsCUVYVE4oamNvbnN0X2lkY3RfaWZhc3Rfc3NlMikKKworRVhUTihqY29uc3RfaWRjdF9pZmFzdF9zc2UyKToKKworUFdfRjE0MTQJdGltZXMgOCBkdyAgRl8xXzQxNCA8PCBDT05TVF9TSElGVAorUFdfRjE4NDcJdGltZXMgOCBkdyAgRl8xXzg0NyA8PCBDT05TVF9TSElGVAorUFdfTUYxNjEzCXRpbWVzIDggZHcgLUZfMV82MTMgPDwgQ09OU1RfU0hJRlQKK1BXX0YxMDgyCXRpbWVzIDggZHcgIEZfMV8wODIgPDwgQ09OU1RfU0hJRlQKK1BCX0NFTlRFUkpTQU1QCXRpbWVzIDE2IGRiIENFTlRFUkpTQU1QTEUKKworCWFsaWduegkxNgorCis7IC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisJU0VDVElPTglTRUdfVEVYVAorCUJJVFMJMzIKKzsKKzsgUGVyZm9ybSBkZXF1YW50aXphdGlvbiBhbmQgaW52ZXJzZSBEQ1Qgb24gb25lIGJsb2NrIG9mIGNvZWZmaWNpZW50cy4KKzsKKzsgR0xPQkFMKHZvaWQpCis7IGpzaW1kX2lkY3RfaWZhc3Rfc3NlMiAodm9pZCAqIGRjdF90YWJsZSwgSkNPRUZQVFIgY29lZl9ibG9jaywKKzsgICAgICAgICAgICAgICAgICAgICAgIEpTQU1QQVJSQVkgb3V0cHV0X2J1ZiwgSkRJTUVOU0lPTiBvdXRwdXRfY29sKQorOworCislZGVmaW5lIGRjdF90YWJsZShiKQkoYikrOAkJCTsganBlZ19jb21wb25lbnRfaW5mbyAqIGNvbXBwdHIKKyVkZWZpbmUgY29lZl9ibG9jayhiKQkoYikrMTIJCTsgSkNPRUZQVFIgY29lZl9ibG9jaworJWRlZmluZSBvdXRwdXRfYnVmKGIpCShiKSsxNgkJOyBKU0FNUEFSUkFZIG91dHB1dF9idWYKKyVkZWZpbmUgb3V0cHV0X2NvbChiKQkoYikrMjAJCTsgSkRJTUVOU0lPTiBvdXRwdXRfY29sCisKKyVkZWZpbmUgb3JpZ2luYWxfZWJwCWVicCswCislZGVmaW5lIHdrKGkpCQllYnAtKFdLX05VTS0oaSkpKlNJWkVPRl9YTU1XT1JECTsgeG1td29yZCB3a1tXS19OVU1dCislZGVmaW5lIFdLX05VTQkJMgorCisJYWxpZ24JMTYKKwlnbG9iYWwJRVhUTihqc2ltZF9pZGN0X2lmYXN0X3NzZTIpCisKK0VYVE4oanNpbWRfaWRjdF9pZmFzdF9zc2UyKToKKwlwdXNoCWVicAorCW1vdgllYXgsZXNwCQkJCTsgZWF4ID0gb3JpZ2luYWwgZWJwCisJc3ViCWVzcCwgYnl0ZSA0CisJYW5kCWVzcCwgYnl0ZSAoLVNJWkVPRl9YTU1XT1JEKQk7IGFsaWduIHRvIDEyOCBiaXRzCisJbW92CVtlc3BdLGVheAorCW1vdgllYnAsZXNwCQkJCTsgZWJwID0gYWxpZ25lZCBlYnAKKwlsZWEJZXNwLCBbd2soMCldCisJcHVzaHBpYwllYngKKzsJcHVzaAllY3gJCTsgdW51c2VkCis7CXB1c2gJZWR4CQk7IG5lZWQgbm90IGJlIHByZXNlcnZlZAorCXB1c2gJZXNpCisJcHVzaAllZGkKKworCWdldF9HT1QJZWJ4CQk7IGdldCBHT1QgYWRkcmVzcworCisJOyAtLS0tIFBhc3MgMTogcHJvY2VzcyBjb2x1bW5zIGZyb20gaW5wdXQuCisKKzsJbW92CWVheCwgW29yaWdpbmFsX2VicF0KKwltb3YJZWR4LCBQT0lOVEVSIFtkY3RfdGFibGUoZWF4KV0JOyBxdWFudHB0cgorCW1vdgllc2ksIEpDT0VGUFRSIFtjb2VmX2Jsb2NrKGVheCldCQk7IGlucHRyCisKKyVpZm5kZWYgTk9fWkVST19DT0xVTU5fVEVTVF9JRkFTVF9TU0UyCisJbW92CWVheCwgRFdPUkQgW0RXQkxPQ0soMSwwLGVzaSxTSVpFT0ZfSkNPRUYpXQorCW9yCWVheCwgRFdPUkQgW0RXQkxPQ0soMiwwLGVzaSxTSVpFT0ZfSkNPRUYpXQorCWpuegluZWFyIC5jb2x1bW5EQ1QKKworCW1vdmRxYQl4bW0wLCBYTU1XT1JEIFtYTU1CTE9DSygxLDAsZXNpLFNJWkVPRl9KQ09FRildCisJbW92ZHFhCXhtbTEsIFhNTVdPUkQgW1hNTUJMT0NLKDIsMCxlc2ksU0laRU9GX0pDT0VGKV0KKwlwb3IJeG1tMCwgWE1NV09SRCBbWE1NQkxPQ0soMywwLGVzaSxTSVpFT0ZfSkNPRUYpXQorCXBvcgl4bW0xLCBYTU1XT1JEIFtYTU1CTE9DSyg0LDAsZXNpLFNJWkVPRl9KQ09FRildCisJcG9yCXhtbTAsIFhNTVdPUkQgW1hNTUJMT0NLKDUsMCxlc2ksU0laRU9GX0pDT0VGKV0KKwlwb3IJeG1tMSwgWE1NV09SRCBbWE1NQkxPQ0soNiwwLGVzaSxTSVpFT0ZfSkNPRUYpXQorCXBvcgl4bW0wLCBYTU1XT1JEIFtYTU1CTE9DSyg3LDAsZXNpLFNJWkVPRl9KQ09FRildCisJcG9yCXhtbTEseG1tMAorCXBhY2tzc3diIHhtbTEseG1tMQorCXBhY2tzc3diIHhtbTEseG1tMQorCW1vdmQJZWF4LHhtbTEKKwl0ZXN0CWVheCxlYXgKKwlqbnoJc2hvcnQgLmNvbHVtbkRDVAorCisJOyAtLSBBQyB0ZXJtcyBhbGwgemVybworCisJbW92ZHFhCXhtbTAsIFhNTVdPUkQgW1hNTUJMT0NLKDAsMCxlc2ksU0laRU9GX0pDT0VGKV0KKwlwbXVsbHcJeG1tMCwgWE1NV09SRCBbWE1NQkxPQ0soMCwwLGVkeCxTSVpFT0ZfSVNMT1dfTVVMVF9UWVBFKV0KKworCW1vdmRxYSAgICB4bW03LHhtbTAJCTsgeG1tMD1pbjA9KDAwIDAxIDAyIDAzIDA0IDA1IDA2IDA3KQorCXB1bnBja2x3ZCB4bW0wLHhtbTAJCTsgeG1tMD0oMDAgMDAgMDEgMDEgMDIgMDIgMDMgMDMpCisJcHVucGNraHdkIHhtbTcseG1tNwkJOyB4bW03PSgwNCAwNCAwNSAwNSAwNiAwNiAwNyAwNykKKworCXBzaHVmZAl4bW02LHhtbTAsMHgwMAkJOyB4bW02PWNvbDA9KDAwIDAwIDAwIDAwIDAwIDAwIDAwIDAwKQorCXBzaHVmZAl4bW0yLHhtbTAsMHg1NQkJOyB4bW0yPWNvbDE9KDAxIDAxIDAxIDAxIDAxIDAxIDAxIDAxKQorCXBzaHVmZAl4bW01LHhtbTAsMHhBQQkJOyB4bW01PWNvbDI9KDAyIDAyIDAyIDAyIDAyIDAyIDAyIDAyKQorCXBzaHVmZAl4bW0wLHhtbTAsMHhGRgkJOyB4bW0wPWNvbDM9KDAzIDAzIDAzIDAzIDAzIDAzIDAzIDAzKQorCXBzaHVmZAl4bW0xLHhtbTcsMHgwMAkJOyB4bW0xPWNvbDQ9KDA0IDA0IDA0IDA0IDA0IDA0IDA0IDA0KQorCXBzaHVmZAl4bW00LHhtbTcsMHg1NQkJOyB4bW00PWNvbDU9KDA1IDA1IDA1IDA1IDA1IDA1IDA1IDA1KQorCXBzaHVmZAl4bW0zLHhtbTcsMHhBQQkJOyB4bW0zPWNvbDY9KDA2IDA2IDA2IDA2IDA2IDA2IDA2IDA2KQorCXBzaHVmZAl4bW03LHhtbTcsMHhGRgkJOyB4bW03PWNvbDc9KDA3IDA3IDA3IDA3IDA3IDA3IDA3IDA3KQorCisJbW92ZHFhCVhNTVdPUkQgW3drKDApXSwgeG1tMgk7IHdrKDApPWNvbDEKKwltb3ZkcWEJWE1NV09SRCBbd2soMSldLCB4bW0wCTsgd2soMSk9Y29sMworCWptcAluZWFyIC5jb2x1bW5fZW5kCisJYWxpZ254CTE2LDcKKyVlbmRpZgorLmNvbHVtbkRDVDoKKworCTsgLS0gRXZlbiBwYXJ0CisKKwltb3ZkcWEJeG1tMCwgWE1NV09SRCBbWE1NQkxPQ0soMCwwLGVzaSxTSVpFT0ZfSkNPRUYpXQorCW1vdmRxYQl4bW0xLCBYTU1XT1JEIFtYTU1CTE9DSygyLDAsZXNpLFNJWkVPRl9KQ09FRildCisJcG11bGx3CXhtbTAsIFhNTVdPUkQgW1hNTUJMT0NLKDAsMCxlZHgsU0laRU9GX0lGQVNUX01VTFRfVFlQRSldCisJcG11bGx3CXhtbTEsIFhNTVdPUkQgW1hNTUJMT0NLKDIsMCxlZHgsU0laRU9GX0lGQVNUX01VTFRfVFlQRSldCisJbW92ZHFhCXhtbTIsIFhNTVdPUkQgW1hNTUJMT0NLKDQsMCxlc2ksU0laRU9GX0pDT0VGKV0KKwltb3ZkcWEJeG1tMywgWE1NV09SRCBbWE1NQkxPQ0soNiwwLGVzaSxTSVpFT0ZfSkNPRUYpXQorCXBtdWxsdwl4bW0yLCBYTU1XT1JEIFtYTU1CTE9DSyg0LDAsZWR4LFNJWkVPRl9JRkFTVF9NVUxUX1RZUEUpXQorCXBtdWxsdwl4bW0zLCBYTU1XT1JEIFtYTU1CTE9DSyg2LDAsZWR4LFNJWkVPRl9JRkFTVF9NVUxUX1RZUEUpXQorCisJbW92ZHFhCXhtbTQseG1tMAorCW1vdmRxYQl4bW01LHhtbTEKKwlwc3Vidwl4bW0wLHhtbTIJCTsgeG1tMD10bXAxMQorCXBzdWJ3CXhtbTEseG1tMworCXBhZGR3CXhtbTQseG1tMgkJOyB4bW00PXRtcDEwCisJcGFkZHcJeG1tNSx4bW0zCQk7IHhtbTU9dG1wMTMKKworCXBzbGx3CXhtbTEsUFJFX01VTFRJUExZX1NDQUxFX0JJVFMKKwlwbXVsaHcJeG1tMSxbR09UT0ZGKGVieCxQV19GMTQxNCldCisJcHN1YncJeG1tMSx4bW01CQk7IHhtbTE9dG1wMTIKKworCW1vdmRxYQl4bW02LHhtbTQKKwltb3ZkcWEJeG1tNyx4bW0wCisJcHN1YncJeG1tNCx4bW01CQk7IHhtbTQ9dG1wMworCXBzdWJ3CXhtbTAseG1tMQkJOyB4bW0wPXRtcDIKKwlwYWRkdwl4bW02LHhtbTUJCTsgeG1tNj10bXAwCisJcGFkZHcJeG1tNyx4bW0xCQk7IHhtbTc9dG1wMQorCisJbW92ZHFhCVhNTVdPUkQgW3drKDEpXSwgeG1tNAk7IHdrKDEpPXRtcDMKKwltb3ZkcWEJWE1NV09SRCBbd2soMCldLCB4bW0wCTsgd2soMCk9dG1wMgorCisJOyAtLSBPZGQgcGFydAorCisJbW92ZHFhCXhtbTIsIFhNTVdPUkQgW1hNTUJMT0NLKDEsMCxlc2ksU0laRU9GX0pDT0VGKV0KKwltb3ZkcWEJeG1tMywgWE1NV09SRCBbWE1NQkxPQ0soMywwLGVzaSxTSVpFT0ZfSkNPRUYpXQorCXBtdWxsdwl4bW0yLCBYTU1XT1JEIFtYTU1CTE9DSygxLDAsZWR4LFNJWkVPRl9JRkFTVF9NVUxUX1RZUEUpXQorCXBtdWxsdwl4bW0zLCBYTU1XT1JEIFtYTU1CTE9DSygzLDAsZWR4LFNJWkVPRl9JRkFTVF9NVUxUX1RZUEUpXQorCW1vdmRxYQl4bW01LCBYTU1XT1JEIFtYTU1CTE9DSyg1LDAsZXNpLFNJWkVPRl9KQ09FRildCisJbW92ZHFhCXhtbTEsIFhNTVdPUkQgW1hNTUJMT0NLKDcsMCxlc2ksU0laRU9GX0pDT0VGKV0KKwlwbXVsbHcJeG1tNSwgWE1NV09SRCBbWE1NQkxPQ0soNSwwLGVkeCxTSVpFT0ZfSUZBU1RfTVVMVF9UWVBFKV0KKwlwbXVsbHcJeG1tMSwgWE1NV09SRCBbWE1NQkxPQ0soNywwLGVkeCxTSVpFT0ZfSUZBU1RfTVVMVF9UWVBFKV0KKworCW1vdmRxYQl4bW00LHhtbTIKKwltb3ZkcWEJeG1tMCx4bW01CisJcHN1YncJeG1tMix4bW0xCQk7IHhtbTI9ejEyCisJcHN1YncJeG1tNSx4bW0zCQk7IHhtbTU9ejEwCisJcGFkZHcJeG1tNCx4bW0xCQk7IHhtbTQ9ejExCisJcGFkZHcJeG1tMCx4bW0zCQk7IHhtbTA9ejEzCisKKwltb3ZkcWEJeG1tMSx4bW01CQk7IHhtbTE9ejEwKHVuc2NhbGVkKQorCXBzbGx3CXhtbTIsUFJFX01VTFRJUExZX1NDQUxFX0JJVFMKKwlwc2xsdwl4bW01LFBSRV9NVUxUSVBMWV9TQ0FMRV9CSVRTCisKKwltb3ZkcWEJeG1tMyx4bW00CisJcHN1YncJeG1tNCx4bW0wCisJcGFkZHcJeG1tMyx4bW0wCQk7IHhtbTM9dG1wNworCisJcHNsbHcJeG1tNCxQUkVfTVVMVElQTFlfU0NBTEVfQklUUworCXBtdWxodwl4bW00LFtHT1RPRkYoZWJ4LFBXX0YxNDE0KV0JOyB4bW00PXRtcDExCisKKwk7IFRvIGF2b2lkIG92ZXJmbG93Li4uCisJOworCTsgKE9yaWdpbmFsKQorCTsgdG1wMTIgPSAtMi42MTMxMjU5MzAgKiB6MTAgKyB6NTsKKwk7CisJOyAoVGhpcyBpbXBsZW1lbnRhdGlvbikKKwk7IHRtcDEyID0gKC0xLjYxMzEyNTkzMCAtIDEpICogejEwICsgejU7CisJOyAgICAgICA9IC0xLjYxMzEyNTkzMCAqIHoxMCAtIHoxMCArIHo1OworCisJbW92ZHFhCXhtbTAseG1tNQorCXBhZGR3CXhtbTUseG1tMgorCXBtdWxodwl4bW01LFtHT1RPRkYoZWJ4LFBXX0YxODQ3KV0JOyB4bW01PXo1CisJcG11bGh3CXhtbTAsW0dPVE9GRihlYngsUFdfTUYxNjEzKV0KKwlwbXVsaHcJeG1tMixbR09UT0ZGKGVieCxQV19GMTA4MildCisJcHN1YncJeG1tMCx4bW0xCisJcHN1YncJeG1tMix4bW01CQk7IHhtbTI9dG1wMTAKKwlwYWRkdwl4bW0wLHhtbTUJCTsgeG1tMD10bXAxMgorCisJOyAtLSBGaW5hbCBvdXRwdXQgc3RhZ2UKKworCXBzdWJ3CXhtbTAseG1tMwkJOyB4bW0wPXRtcDYKKwltb3ZkcWEJeG1tMSx4bW02CisJbW92ZHFhCXhtbTUseG1tNworCXBhZGR3CXhtbTYseG1tMwkJOyB4bW02PWRhdGEwPSgwMCAwMSAwMiAwMyAwNCAwNSAwNiAwNykKKwlwYWRkdwl4bW03LHhtbTAJCTsgeG1tNz1kYXRhMT0oMTAgMTEgMTIgMTMgMTQgMTUgMTYgMTcpCisJcHN1YncJeG1tMSx4bW0zCQk7IHhtbTE9ZGF0YTc9KDcwIDcxIDcyIDczIDc0IDc1IDc2IDc3KQorCXBzdWJ3CXhtbTUseG1tMAkJOyB4bW01PWRhdGE2PSg2MCA2MSA2MiA2MyA2NCA2NSA2NiA2NykKKwlwc3Vidwl4bW00LHhtbTAJCTsgeG1tND10bXA1CisKKwltb3ZkcWEgICAgeG1tMyx4bW02CQk7IHRyYW5zcG9zZSBjb2VmZmljaWVudHMocGhhc2UgMSkKKwlwdW5wY2tsd2QgeG1tNix4bW03CQk7IHhtbTY9KDAwIDEwIDAxIDExIDAyIDEyIDAzIDEzKQorCXB1bnBja2h3ZCB4bW0zLHhtbTcJCTsgeG1tMz0oMDQgMTQgMDUgMTUgMDYgMTYgMDcgMTcpCisJbW92ZHFhICAgIHhtbTAseG1tNQkJOyB0cmFuc3Bvc2UgY29lZmZpY2llbnRzKHBoYXNlIDEpCisJcHVucGNrbHdkIHhtbTUseG1tMQkJOyB4bW01PSg2MCA3MCA2MSA3MSA2MiA3MiA2MyA3MykKKwlwdW5wY2tod2QgeG1tMCx4bW0xCQk7IHhtbTA9KDY0IDc0IDY1IDc1IDY2IDc2IDY3IDc3KQorCisJbW92ZHFhCXhtbTcsIFhNTVdPUkQgW3drKDApXQk7IHhtbTc9dG1wMgorCW1vdmRxYQl4bW0xLCBYTU1XT1JEIFt3aygxKV0JOyB4bW0xPXRtcDMKKworCW1vdmRxYQlYTU1XT1JEIFt3aygwKV0sIHhtbTUJOyB3aygwKT0oNjAgNzAgNjEgNzEgNjIgNzIgNjMgNzMpCisJbW92ZHFhCVhNTVdPUkQgW3drKDEpXSwgeG1tMAk7IHdrKDEpPSg2NCA3NCA2NSA3NSA2NiA3NiA2NyA3NykKKworCXBhZGR3CXhtbTIseG1tNAkJOyB4bW0yPXRtcDQKKwltb3ZkcWEJeG1tNSx4bW03CisJbW92ZHFhCXhtbTAseG1tMQorCXBhZGR3CXhtbTcseG1tNAkJOyB4bW03PWRhdGEyPSgyMCAyMSAyMiAyMyAyNCAyNSAyNiAyNykKKwlwYWRkdwl4bW0xLHhtbTIJCTsgeG1tMT1kYXRhND0oNDAgNDEgNDIgNDMgNDQgNDUgNDYgNDcpCisJcHN1YncJeG1tNSx4bW00CQk7IHhtbTU9ZGF0YTU9KDUwIDUxIDUyIDUzIDU0IDU1IDU2IDU3KQorCXBzdWJ3CXhtbTAseG1tMgkJOyB4bW0wPWRhdGEzPSgzMCAzMSAzMiAzMyAzNCAzNSAzNiAzNykKKworCW1vdmRxYSAgICB4bW00LHhtbTcJCTsgdHJhbnNwb3NlIGNvZWZmaWNpZW50cyhwaGFzZSAxKQorCXB1bnBja2x3ZCB4bW03LHhtbTAJCTsgeG1tNz0oMjAgMzAgMjEgMzEgMjIgMzIgMjMgMzMpCisJcHVucGNraHdkIHhtbTQseG1tMAkJOyB4bW00PSgyNCAzNCAyNSAzNSAyNiAzNiAyNyAzNykKKwltb3ZkcWEgICAgeG1tMix4bW0xCQk7IHRyYW5zcG9zZSBjb2VmZmljaWVudHMocGhhc2UgMSkKKwlwdW5wY2tsd2QgeG1tMSx4bW01CQk7IHhtbTE9KDQwIDUwIDQxIDUxIDQyIDUyIDQzIDUzKQorCXB1bnBja2h3ZCB4bW0yLHhtbTUJCTsgeG1tMj0oNDQgNTQgNDUgNTUgNDYgNTYgNDcgNTcpCisKKwltb3ZkcWEgICAgeG1tMCx4bW0zCQk7IHRyYW5zcG9zZSBjb2VmZmljaWVudHMocGhhc2UgMikKKwlwdW5wY2tsZHEgeG1tMyx4bW00CQk7IHhtbTM9KDA0IDE0IDI0IDM0IDA1IDE1IDI1IDM1KQorCXB1bnBja2hkcSB4bW0wLHhtbTQJCTsgeG1tMD0oMDYgMTYgMjYgMzYgMDcgMTcgMjcgMzcpCisJbW92ZHFhICAgIHhtbTUseG1tNgkJOyB0cmFuc3Bvc2UgY29lZmZpY2llbnRzKHBoYXNlIDIpCisJcHVucGNrbGRxIHhtbTYseG1tNwkJOyB4bW02PSgwMCAxMCAyMCAzMCAwMSAxMSAyMSAzMSkKKwlwdW5wY2toZHEgeG1tNSx4bW03CQk7IHhtbTU9KDAyIDEyIDIyIDMyIDAzIDEzIDIzIDMzKQorCisJbW92ZHFhCXhtbTQsIFhNTVdPUkQgW3drKDApXQk7IHhtbTQ9KDYwIDcwIDYxIDcxIDYyIDcyIDYzIDczKQorCW1vdmRxYQl4bW03LCBYTU1XT1JEIFt3aygxKV0JOyB4bW03PSg2NCA3NCA2NSA3NSA2NiA3NiA2NyA3NykKKworCW1vdmRxYQlYTU1XT1JEIFt3aygwKV0sIHhtbTMJOyB3aygwKT0oMDQgMTQgMjQgMzQgMDUgMTUgMjUgMzUpCisJbW92ZHFhCVhNTVdPUkQgW3drKDEpXSwgeG1tMAk7IHdrKDEpPSgwNiAxNiAyNiAzNiAwNyAxNyAyNyAzNykKKworCW1vdmRxYSAgICB4bW0zLHhtbTEJCTsgdHJhbnNwb3NlIGNvZWZmaWNpZW50cyhwaGFzZSAyKQorCXB1bnBja2xkcSB4bW0xLHhtbTQJCTsgeG1tMT0oNDAgNTAgNjAgNzAgNDEgNTEgNjEgNzEpCisJcHVucGNraGRxIHhtbTMseG1tNAkJOyB4bW0zPSg0MiA1MiA2MiA3MiA0MyA1MyA2MyA3MykKKwltb3ZkcWEgICAgeG1tMCx4bW0yCQk7IHRyYW5zcG9zZSBjb2VmZmljaWVudHMocGhhc2UgMikKKwlwdW5wY2tsZHEgeG1tMix4bW03CQk7IHhtbTI9KDQ0IDU0IDY0IDc0IDQ1IDU1IDY1IDc1KQorCXB1bnBja2hkcSB4bW0wLHhtbTcJCTsgeG1tMD0oNDYgNTYgNjYgNzYgNDcgNTcgNjcgNzcpCisKKwltb3ZkcWEgICAgIHhtbTQseG1tNgkJOyB0cmFuc3Bvc2UgY29lZmZpY2llbnRzKHBoYXNlIDMpCisJcHVucGNrbHFkcSB4bW02LHhtbTEJCTsgeG1tNj1jb2wwPSgwMCAxMCAyMCAzMCA0MCA1MCA2MCA3MCkKKwlwdW5wY2tocWRxIHhtbTQseG1tMQkJOyB4bW00PWNvbDE9KDAxIDExIDIxIDMxIDQxIDUxIDYxIDcxKQorCW1vdmRxYSAgICAgeG1tNyx4bW01CQk7IHRyYW5zcG9zZSBjb2VmZmljaWVudHMocGhhc2UgMykKKwlwdW5wY2tscWRxIHhtbTUseG1tMwkJOyB4bW01PWNvbDI9KDAyIDEyIDIyIDMyIDQyIDUyIDYyIDcyKQorCXB1bnBja2hxZHEgeG1tNyx4bW0zCQk7IHhtbTc9Y29sMz0oMDMgMTMgMjMgMzMgNDMgNTMgNjMgNzMpCisKKwltb3ZkcWEJeG1tMSwgWE1NV09SRCBbd2soMCldCTsgeG1tMT0oMDQgMTQgMjQgMzQgMDUgMTUgMjUgMzUpCisJbW92ZHFhCXhtbTMsIFhNTVdPUkQgW3drKDEpXQk7IHhtbTM9KDA2IDE2IDI2IDM2IDA3IDE3IDI3IDM3KQorCisJbW92ZHFhCVhNTVdPUkQgW3drKDApXSwgeG1tNAk7IHdrKDApPWNvbDEKKwltb3ZkcWEJWE1NV09SRCBbd2soMSldLCB4bW03CTsgd2soMSk9Y29sMworCisJbW92ZHFhICAgICB4bW00LHhtbTEJCTsgdHJhbnNwb3NlIGNvZWZmaWNpZW50cyhwaGFzZSAzKQorCXB1bnBja2xxZHEgeG1tMSx4bW0yCQk7IHhtbTE9Y29sND0oMDQgMTQgMjQgMzQgNDQgNTQgNjQgNzQpCisJcHVucGNraHFkcSB4bW00LHhtbTIJCTsgeG1tND1jb2w1PSgwNSAxNSAyNSAzNSA0NSA1NSA2NSA3NSkKKwltb3ZkcWEgICAgIHhtbTcseG1tMwkJOyB0cmFuc3Bvc2UgY29lZmZpY2llbnRzKHBoYXNlIDMpCisJcHVucGNrbHFkcSB4bW0zLHhtbTAJCTsgeG1tMz1jb2w2PSgwNiAxNiAyNiAzNiA0NiA1NiA2NiA3NikKKwlwdW5wY2tocWRxIHhtbTcseG1tMAkJOyB4bW03PWNvbDc9KDA3IDE3IDI3IDM3IDQ3IDU3IDY3IDc3KQorLmNvbHVtbl9lbmQ6CisKKwk7IC0tIFByZWZldGNoIHRoZSBuZXh0IGNvZWZmaWNpZW50IGJsb2NrCisKKwlwcmVmZXRjaG50YSBbZXNpICsgRENUU0laRTIqU0laRU9GX0pDT0VGICsgMCozMl0KKwlwcmVmZXRjaG50YSBbZXNpICsgRENUU0laRTIqU0laRU9GX0pDT0VGICsgMSozMl0KKwlwcmVmZXRjaG50YSBbZXNpICsgRENUU0laRTIqU0laRU9GX0pDT0VGICsgMiozMl0KKwlwcmVmZXRjaG50YSBbZXNpICsgRENUU0laRTIqU0laRU9GX0pDT0VGICsgMyozMl0KKworCTsgLS0tLSBQYXNzIDI6IHByb2Nlc3Mgcm93cyBmcm9tIHdvcmsgYXJyYXksIHN0b3JlIGludG8gb3V0cHV0IGFycmF5LgorCisJbW92CWVheCwgW29yaWdpbmFsX2VicF0KKwltb3YJZWRpLCBKU0FNUEFSUkFZIFtvdXRwdXRfYnVmKGVheCldCTsgKEpTQU1QUk9XICopCisJbW92CWVheCwgSkRJTUVOU0lPTiBbb3V0cHV0X2NvbChlYXgpXQorCisJOyAtLSBFdmVuIHBhcnQKKworCTsgeG1tNj1jb2wwLCB4bW01PWNvbDIsIHhtbTE9Y29sNCwgeG1tMz1jb2w2CisKKwltb3ZkcWEJeG1tMix4bW02CisJbW92ZHFhCXhtbTAseG1tNQorCXBzdWJ3CXhtbTYseG1tMQkJOyB4bW02PXRtcDExCisJcHN1YncJeG1tNSx4bW0zCisJcGFkZHcJeG1tMix4bW0xCQk7IHhtbTI9dG1wMTAKKwlwYWRkdwl4bW0wLHhtbTMJCTsgeG1tMD10bXAxMworCisJcHNsbHcJeG1tNSxQUkVfTVVMVElQTFlfU0NBTEVfQklUUworCXBtdWxodwl4bW01LFtHT1RPRkYoZWJ4LFBXX0YxNDE0KV0KKwlwc3Vidwl4bW01LHhtbTAJCTsgeG1tNT10bXAxMgorCisJbW92ZHFhCXhtbTEseG1tMgorCW1vdmRxYQl4bW0zLHhtbTYKKwlwc3Vidwl4bW0yLHhtbTAJCTsgeG1tMj10bXAzCisJcHN1YncJeG1tNix4bW01CQk7IHhtbTY9dG1wMgorCXBhZGR3CXhtbTEseG1tMAkJOyB4bW0xPXRtcDAKKwlwYWRkdwl4bW0zLHhtbTUJCTsgeG1tMz10bXAxCisKKwltb3ZkcWEJeG1tMCwgWE1NV09SRCBbd2soMCldCTsgeG1tMD1jb2wxCisJbW92ZHFhCXhtbTUsIFhNTVdPUkQgW3drKDEpXQk7IHhtbTU9Y29sMworCisJbW92ZHFhCVhNTVdPUkQgW3drKDApXSwgeG1tMgk7IHdrKDApPXRtcDMKKwltb3ZkcWEJWE1NV09SRCBbd2soMSldLCB4bW02CTsgd2soMSk9dG1wMgorCisJOyAtLSBPZGQgcGFydAorCisJOyB4bW0wPWNvbDEsIHhtbTU9Y29sMywgeG1tND1jb2w1LCB4bW03PWNvbDcKKworCW1vdmRxYQl4bW0yLHhtbTAKKwltb3ZkcWEJeG1tNix4bW00CisJcHN1YncJeG1tMCx4bW03CQk7IHhtbTA9ejEyCisJcHN1YncJeG1tNCx4bW01CQk7IHhtbTQ9ejEwCisJcGFkZHcJeG1tMix4bW03CQk7IHhtbTI9ejExCisJcGFkZHcJeG1tNix4bW01CQk7IHhtbTY9ejEzCisKKwltb3ZkcWEJeG1tNyx4bW00CQk7IHhtbTc9ejEwKHVuc2NhbGVkKQorCXBzbGx3CXhtbTAsUFJFX01VTFRJUExZX1NDQUxFX0JJVFMKKwlwc2xsdwl4bW00LFBSRV9NVUxUSVBMWV9TQ0FMRV9CSVRTCisKKwltb3ZkcWEJeG1tNSx4bW0yCisJcHN1YncJeG1tMix4bW02CisJcGFkZHcJeG1tNSx4bW02CQk7IHhtbTU9dG1wNworCisJcHNsbHcJeG1tMixQUkVfTVVMVElQTFlfU0NBTEVfQklUUworCXBtdWxodwl4bW0yLFtHT1RPRkYoZWJ4LFBXX0YxNDE0KV0JOyB4bW0yPXRtcDExCisKKwk7IFRvIGF2b2lkIG92ZXJmbG93Li4uCisJOworCTsgKE9yaWdpbmFsKQorCTsgdG1wMTIgPSAtMi42MTMxMjU5MzAgKiB6MTAgKyB6NTsKKwk7CisJOyAoVGhpcyBpbXBsZW1lbnRhdGlvbikKKwk7IHRtcDEyID0gKC0xLjYxMzEyNTkzMCAtIDEpICogejEwICsgejU7CisJOyAgICAgICA9IC0xLjYxMzEyNTkzMCAqIHoxMCAtIHoxMCArIHo1OworCisJbW92ZHFhCXhtbTYseG1tNAorCXBhZGR3CXhtbTQseG1tMAorCXBtdWxodwl4bW00LFtHT1RPRkYoZWJ4LFBXX0YxODQ3KV0JOyB4bW00PXo1CisJcG11bGh3CXhtbTYsW0dPVE9GRihlYngsUFdfTUYxNjEzKV0KKwlwbXVsaHcJeG1tMCxbR09UT0ZGKGVieCxQV19GMTA4MildCisJcHN1YncJeG1tNix4bW03CisJcHN1YncJeG1tMCx4bW00CQk7IHhtbTA9dG1wMTAKKwlwYWRkdwl4bW02LHhtbTQJCTsgeG1tNj10bXAxMgorCisJOyAtLSBGaW5hbCBvdXRwdXQgc3RhZ2UKKworCXBzdWJ3CXhtbTYseG1tNQkJOyB4bW02PXRtcDYKKwltb3ZkcWEJeG1tNyx4bW0xCisJbW92ZHFhCXhtbTQseG1tMworCXBhZGR3CXhtbTEseG1tNQkJOyB4bW0xPWRhdGEwPSgwMCAxMCAyMCAzMCA0MCA1MCA2MCA3MCkKKwlwYWRkdwl4bW0zLHhtbTYJCTsgeG1tMz1kYXRhMT0oMDEgMTEgMjEgMzEgNDEgNTEgNjEgNzEpCisJcHNyYXcJeG1tMSwoUEFTUzFfQklUUyszKQk7IGRlc2NhbGUKKwlwc3Jhdwl4bW0zLChQQVNTMV9CSVRTKzMpCTsgZGVzY2FsZQorCXBzdWJ3CXhtbTcseG1tNQkJOyB4bW03PWRhdGE3PSgwNyAxNyAyNyAzNyA0NyA1NyA2NyA3NykKKwlwc3Vidwl4bW00LHhtbTYJCTsgeG1tND1kYXRhNj0oMDYgMTYgMjYgMzYgNDYgNTYgNjYgNzYpCisJcHNyYXcJeG1tNywoUEFTUzFfQklUUyszKQk7IGRlc2NhbGUKKwlwc3Jhdwl4bW00LChQQVNTMV9CSVRTKzMpCTsgZGVzY2FsZQorCXBzdWJ3CXhtbTIseG1tNgkJOyB4bW0yPXRtcDUKKworCXBhY2tzc3diICB4bW0xLHhtbTQJOyB4bW0xPSgwMCAxMCAyMCAzMCA0MCA1MCA2MCA3MCAwNiAxNiAyNiAzNiA0NiA1NiA2NiA3NikKKwlwYWNrc3N3YiAgeG1tMyx4bW03CTsgeG1tMz0oMDEgMTEgMjEgMzEgNDEgNTEgNjEgNzEgMDcgMTcgMjcgMzcgNDcgNTcgNjcgNzcpCisKKwltb3ZkcWEJeG1tNSwgWE1NV09SRCBbd2soMSldCTsgeG1tNT10bXAyCisJbW92ZHFhCXhtbTYsIFhNTVdPUkQgW3drKDApXQk7IHhtbTY9dG1wMworCisJcGFkZHcJeG1tMCx4bW0yCQk7IHhtbTA9dG1wNAorCW1vdmRxYQl4bW00LHhtbTUKKwltb3ZkcWEJeG1tNyx4bW02CisJcGFkZHcJeG1tNSx4bW0yCQk7IHhtbTU9ZGF0YTI9KDAyIDEyIDIyIDMyIDQyIDUyIDYyIDcyKQorCXBhZGR3CXhtbTYseG1tMAkJOyB4bW02PWRhdGE0PSgwNCAxNCAyNCAzNCA0NCA1NCA2NCA3NCkKKwlwc3Jhdwl4bW01LChQQVNTMV9CSVRTKzMpCTsgZGVzY2FsZQorCXBzcmF3CXhtbTYsKFBBU1MxX0JJVFMrMykJOyBkZXNjYWxlCisJcHN1YncJeG1tNCx4bW0yCQk7IHhtbTQ9ZGF0YTU9KDA1IDE1IDI1IDM1IDQ1IDU1IDY1IDc1KQorCXBzdWJ3CXhtbTcseG1tMAkJOyB4bW03PWRhdGEzPSgwMyAxMyAyMyAzMyA0MyA1MyA2MyA3MykKKwlwc3Jhdwl4bW00LChQQVNTMV9CSVRTKzMpCTsgZGVzY2FsZQorCXBzcmF3CXhtbTcsKFBBU1MxX0JJVFMrMykJOyBkZXNjYWxlCisKKwltb3ZkcWEgICAgeG1tMixbR09UT0ZGKGVieCxQQl9DRU5URVJKU0FNUCldCTsgeG1tMj1bUEJfQ0VOVEVSSlNBTVBdCisKKwlwYWNrc3N3YiAgeG1tNSx4bW02CTsgeG1tNT0oMDIgMTIgMjIgMzIgNDIgNTIgNjIgNzIgMDQgMTQgMjQgMzQgNDQgNTQgNjQgNzQpCisJcGFja3Nzd2IgIHhtbTcseG1tNAk7IHhtbTc9KDAzIDEzIDIzIDMzIDQzIDUzIDYzIDczIDA1IDE1IDI1IDM1IDQ1IDU1IDY1IDc1KQorCisJcGFkZGIgICAgIHhtbTEseG1tMgorCXBhZGRiICAgICB4bW0zLHhtbTIKKwlwYWRkYiAgICAgeG1tNSx4bW0yCisJcGFkZGIgICAgIHhtbTcseG1tMgorCisJbW92ZHFhICAgIHhtbTAseG1tMQk7IHRyYW5zcG9zZSBjb2VmZmljaWVudHMocGhhc2UgMSkKKwlwdW5wY2tsYncgeG1tMSx4bW0zCTsgeG1tMT0oMDAgMDEgMTAgMTEgMjAgMjEgMzAgMzEgNDAgNDEgNTAgNTEgNjAgNjEgNzAgNzEpCisJcHVucGNraGJ3IHhtbTAseG1tMwk7IHhtbTA9KDA2IDA3IDE2IDE3IDI2IDI3IDM2IDM3IDQ2IDQ3IDU2IDU3IDY2IDY3IDc2IDc3KQorCW1vdmRxYSAgICB4bW02LHhtbTUJOyB0cmFuc3Bvc2UgY29lZmZpY2llbnRzKHBoYXNlIDEpCisJcHVucGNrbGJ3IHhtbTUseG1tNwk7IHhtbTU9KDAyIDAzIDEyIDEzIDIyIDIzIDMyIDMzIDQyIDQzIDUyIDUzIDYyIDYzIDcyIDczKQorCXB1bnBja2hidyB4bW02LHhtbTcJOyB4bW02PSgwNCAwNSAxNCAxNSAyNCAyNSAzNCAzNSA0NCA0NSA1NCA1NSA2NCA2NSA3NCA3NSkKKworCW1vdmRxYSAgICB4bW00LHhtbTEJOyB0cmFuc3Bvc2UgY29lZmZpY2llbnRzKHBoYXNlIDIpCisJcHVucGNrbHdkIHhtbTEseG1tNQk7IHhtbTE9KDAwIDAxIDAyIDAzIDEwIDExIDEyIDEzIDIwIDIxIDIyIDIzIDMwIDMxIDMyIDMzKQorCXB1bnBja2h3ZCB4bW00LHhtbTUJOyB4bW00PSg0MCA0MSA0MiA0MyA1MCA1MSA1MiA1MyA2MCA2MSA2MiA2MyA3MCA3MSA3MiA3MykKKwltb3ZkcWEgICAgeG1tMix4bW02CTsgdHJhbnNwb3NlIGNvZWZmaWNpZW50cyhwaGFzZSAyKQorCXB1bnBja2x3ZCB4bW02LHhtbTAJOyB4bW02PSgwNCAwNSAwNiAwNyAxNCAxNSAxNiAxNyAyNCAyNSAyNiAyNyAzNCAzNSAzNiAzNykKKwlwdW5wY2tod2QgeG1tMix4bW0wCTsgeG1tMj0oNDQgNDUgNDYgNDcgNTQgNTUgNTYgNTcgNjQgNjUgNjYgNjcgNzQgNzUgNzYgNzcpCisKKwltb3ZkcWEgICAgeG1tMyx4bW0xCTsgdHJhbnNwb3NlIGNvZWZmaWNpZW50cyhwaGFzZSAzKQorCXB1bnBja2xkcSB4bW0xLHhtbTYJOyB4bW0xPSgwMCAwMSAwMiAwMyAwNCAwNSAwNiAwNyAxMCAxMSAxMiAxMyAxNCAxNSAxNiAxNykKKwlwdW5wY2toZHEgeG1tMyx4bW02CTsgeG1tMz0oMjAgMjEgMjIgMjMgMjQgMjUgMjYgMjcgMzAgMzEgMzIgMzMgMzQgMzUgMzYgMzcpCisJbW92ZHFhICAgIHhtbTcseG1tNAk7IHRyYW5zcG9zZSBjb2VmZmljaWVudHMocGhhc2UgMykKKwlwdW5wY2tsZHEgeG1tNCx4bW0yCTsgeG1tND0oNDAgNDEgNDIgNDMgNDQgNDUgNDYgNDcgNTAgNTEgNTIgNTMgNTQgNTUgNTYgNTcpCisJcHVucGNraGRxIHhtbTcseG1tMgk7IHhtbTc9KDYwIDYxIDYyIDYzIDY0IDY1IDY2IDY3IDcwIDcxIDcyIDczIDc0IDc1IDc2IDc3KQorCisJcHNodWZkCXhtbTUseG1tMSwweDRFCTsgeG1tNT0oMTAgMTEgMTIgMTMgMTQgMTUgMTYgMTcgMDAgMDEgMDIgMDMgMDQgMDUgMDYgMDcpCisJcHNodWZkCXhtbTAseG1tMywweDRFCTsgeG1tMD0oMzAgMzEgMzIgMzMgMzQgMzUgMzYgMzcgMjAgMjEgMjIgMjMgMjQgMjUgMjYgMjcpCisJcHNodWZkCXhtbTYseG1tNCwweDRFCTsgeG1tNj0oNTAgNTEgNTIgNTMgNTQgNTUgNTYgNTcgNDAgNDEgNDIgNDMgNDQgNDUgNDYgNDcpCisJcHNodWZkCXhtbTIseG1tNywweDRFCTsgeG1tMj0oNzAgNzEgNzIgNzMgNzQgNzUgNzYgNzcgNjAgNjEgNjIgNjMgNjQgNjUgNjYgNjcpCisKKwltb3YJZWR4LCBKU0FNUFJPVyBbZWRpKzAqU0laRU9GX0pTQU1QUk9XXQorCW1vdgllc2ksIEpTQU1QUk9XIFtlZGkrMipTSVpFT0ZfSlNBTVBST1ddCisJbW92cQlYTU1fTU1XT1JEIFtlZHgrZWF4KlNJWkVPRl9KU0FNUExFXSwgeG1tMQorCW1vdnEJWE1NX01NV09SRCBbZXNpK2VheCpTSVpFT0ZfSlNBTVBMRV0sIHhtbTMKKwltb3YJZWR4LCBKU0FNUFJPVyBbZWRpKzQqU0laRU9GX0pTQU1QUk9XXQorCW1vdgllc2ksIEpTQU1QUk9XIFtlZGkrNipTSVpFT0ZfSlNBTVBST1ddCisJbW92cQlYTU1fTU1XT1JEIFtlZHgrZWF4KlNJWkVPRl9KU0FNUExFXSwgeG1tNAorCW1vdnEJWE1NX01NV09SRCBbZXNpK2VheCpTSVpFT0ZfSlNBTVBMRV0sIHhtbTcKKworCW1vdgllZHgsIEpTQU1QUk9XIFtlZGkrMSpTSVpFT0ZfSlNBTVBST1ddCisJbW92CWVzaSwgSlNBTVBST1cgW2VkaSszKlNJWkVPRl9KU0FNUFJPV10KKwltb3ZxCVhNTV9NTVdPUkQgW2VkeCtlYXgqU0laRU9GX0pTQU1QTEVdLCB4bW01CisJbW92cQlYTU1fTU1XT1JEIFtlc2krZWF4KlNJWkVPRl9KU0FNUExFXSwgeG1tMAorCW1vdgllZHgsIEpTQU1QUk9XIFtlZGkrNSpTSVpFT0ZfSlNBTVBST1ddCisJbW92CWVzaSwgSlNBTVBST1cgW2VkaSs3KlNJWkVPRl9KU0FNUFJPV10KKwltb3ZxCVhNTV9NTVdPUkQgW2VkeCtlYXgqU0laRU9GX0pTQU1QTEVdLCB4bW02CisJbW92cQlYTU1fTU1XT1JEIFtlc2krZWF4KlNJWkVPRl9KU0FNUExFXSwgeG1tMgorCisJcG9wCWVkaQorCXBvcAllc2kKKzsJcG9wCWVkeAkJOyBuZWVkIG5vdCBiZSBwcmVzZXJ2ZWQKKzsJcG9wCWVjeAkJOyB1bnVzZWQKKwlwb3BwaWMJZWJ4CisJbW92CWVzcCxlYnAJCTsgZXNwIDwtIGFsaWduZWQgZWJwCisJcG9wCWVzcAkJOyBlc3AgPC0gb3JpZ2luYWwgZWJwCisJcG9wCWVicAorCXJldAorCis7IEZvciBzb21lIHJlYXNvbiwgdGhlIE9TIFggbGlua2VyIGRvZXMgbm90IGhvbm9yIHRoZSByZXF1ZXN0IHRvIGFsaWduIHRoZQorOyBzZWdtZW50IHVubGVzcyB3ZSBkbyB0aGlzLgorCWFsaWduCTE2CmRpZmYgLS1naXQgYS9zaW1kL2ppc3MyaW50LTY0LmFzbSBiL3NpbWQvamlzczJpbnQtNjQuYXNtCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjEzNzY0ZDYKLS0tIC9kZXYvbnVsbAorKysgYi9zaW1kL2ppc3MyaW50LTY0LmFzbQpAQCAtMCwwICsxLDg0OCBAQAorOworOyBqaXNzMmludC02NC5hc20gLSBhY2N1cmF0ZSBpbnRlZ2VyIElEQ1QgKDY0LWJpdCBTU0UyKQorOworOyBDb3B5cmlnaHQgMjAwOSBQaWVycmUgT3NzbWFuIDxvc3NtYW5AY2VuZGlvLnNlPiBmb3IgQ2VuZGlvIEFCCis7IENvcHlyaWdodCAyMDA5IEQuIFIuIENvbW1hbmRlcgorOworOyBCYXNlZCBvbgorOyB4ODYgU0lNRCBleHRlbnNpb24gZm9yIElKRyBKUEVHIGxpYnJhcnkKKzsgQ29weXJpZ2h0IChDKSAxOTk5LTIwMDYsIE1JWUFTQUtBIE1hc2FydS4KKzsgRm9yIGNvbmRpdGlvbnMgb2YgZGlzdHJpYnV0aW9uIGFuZCB1c2UsIHNlZSBjb3B5cmlnaHQgbm90aWNlIGluIGpzaW1kZXh0LmluYworOworOyBUaGlzIGZpbGUgc2hvdWxkIGJlIGFzc2VtYmxlZCB3aXRoIE5BU00gKE5ldHdpZGUgQXNzZW1ibGVyKSwKKzsgY2FuICpub3QqIGJlIGFzc2VtYmxlZCB3aXRoIE1pY3Jvc29mdCdzIE1BU00gb3IgYW55IGNvbXBhdGlibGUKKzsgYXNzZW1ibGVyIChpbmNsdWRpbmcgQm9ybGFuZCdzIFR1cmJvIEFzc2VtYmxlcikuCis7IE5BU00gaXMgYXZhaWxhYmxlIGZyb20gaHR0cDovL25hc20uc291cmNlZm9yZ2UubmV0LyBvcgorOyBodHRwOi8vc291cmNlZm9yZ2UubmV0L3Byb2plY3Qvc2hvd2ZpbGVzLnBocD9ncm91cF9pZD02MjA4Cis7Cis7IFRoaXMgZmlsZSBjb250YWlucyBhIHNsb3ctYnV0LWFjY3VyYXRlIGludGVnZXIgaW1wbGVtZW50YXRpb24gb2YgdGhlCis7IGludmVyc2UgRENUIChEaXNjcmV0ZSBDb3NpbmUgVHJhbnNmb3JtKS4gVGhlIGZvbGxvd2luZyBjb2RlIGlzIGJhc2VkCis7IGRpcmVjdGx5IG9uIHRoZSBJSkcncyBvcmlnaW5hbCBqaWRjdGludC5jOyBzZWUgdGhlIGppZGN0aW50LmMgZm9yCis7IG1vcmUgZGV0YWlscy4KKzsKKzsgW1RBQjhdCisKKyVpbmNsdWRlICJqc2ltZGV4dC5pbmMiCislaW5jbHVkZSAiamRjdC5pbmMiCisKKzsgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworJWRlZmluZSBDT05TVF9CSVRTCTEzCislZGVmaW5lIFBBU1MxX0JJVFMJMgorCislZGVmaW5lIERFU0NBTEVfUDEJKENPTlNUX0JJVFMtUEFTUzFfQklUUykKKyVkZWZpbmUgREVTQ0FMRV9QMgkoQ09OU1RfQklUUytQQVNTMV9CSVRTKzMpCisKKyVpZiBDT05TVF9CSVRTID09IDEzCitGXzBfMjk4CWVxdQkgMjQ0NgkJOyBGSVgoMC4yOTg2MzEzMzYpCitGXzBfMzkwCWVxdQkgMzE5NgkJOyBGSVgoMC4zOTAxODA2NDQpCitGXzBfNTQxCWVxdQkgNDQzMwkJOyBGSVgoMC41NDExOTYxMDApCitGXzBfNzY1CWVxdQkgNjI3MAkJOyBGSVgoMC43NjUzNjY4NjUpCitGXzBfODk5CWVxdQkgNzM3MwkJOyBGSVgoMC44OTk5NzYyMjMpCitGXzFfMTc1CWVxdQkgOTYzMwkJOyBGSVgoMS4xNzU4NzU2MDIpCitGXzFfNTAxCWVxdQkxMjI5OQkJOyBGSVgoMS41MDEzMjExMTApCitGXzFfODQ3CWVxdQkxNTEzNwkJOyBGSVgoMS44NDc3NTkwNjUpCitGXzFfOTYxCWVxdQkxNjA2OQkJOyBGSVgoMS45NjE1NzA1NjApCitGXzJfMDUzCWVxdQkxNjgxOQkJOyBGSVgoMi4wNTMxMTk4NjkpCitGXzJfNTYyCWVxdQkyMDk5NQkJOyBGSVgoMi41NjI5MTU0NDcpCitGXzNfMDcyCWVxdQkyNTE3MgkJOyBGSVgoMy4wNzI3MTEwMjYpCislZWxzZQorOyBOQVNNIGNhbm5vdCBkbyBjb21waWxlLXRpbWUgYXJpdGhtZXRpYyBvbiBmbG9hdGluZy1wb2ludCBjb25zdGFudHMuCislZGVmaW5lIERFU0NBTEUoeCxuKSAgKCgoeCkrKDE8PCgobiktMSkpKT4+KG4pKQorRl8wXzI5OAllcXUJREVTQ0FMRSggMzIwNjUyOTU1LDMwLUNPTlNUX0JJVFMpCTsgRklYKDAuMjk4NjMxMzM2KQorRl8wXzM5MAllcXUJREVTQ0FMRSggNDE4OTUzMjc2LDMwLUNPTlNUX0JJVFMpCTsgRklYKDAuMzkwMTgwNjQ0KQorRl8wXzU0MQllcXUJREVTQ0FMRSggNTgxMTA0ODg3LDMwLUNPTlNUX0JJVFMpCTsgRklYKDAuNTQxMTk2MTAwKQorRl8wXzc2NQllcXUJREVTQ0FMRSggODIxODA2NDEzLDMwLUNPTlNUX0JJVFMpCTsgRklYKDAuNzY1MzY2ODY1KQorRl8wXzg5OQllcXUJREVTQ0FMRSggOTY2MzQyMTExLDMwLUNPTlNUX0JJVFMpCTsgRklYKDAuODk5OTc2MjIzKQorRl8xXzE3NQllcXUJREVTQ0FMRSgxMjYyNTg2ODEzLDMwLUNPTlNUX0JJVFMpCTsgRklYKDEuMTc1ODc1NjAyKQorRl8xXzUwMQllcXUJREVTQ0FMRSgxNjEyMDMxMjY3LDMwLUNPTlNUX0JJVFMpCTsgRklYKDEuNTAxMzIxMTEwKQorRl8xXzg0NwllcXUJREVTQ0FMRSgxOTg0MDE2MTg4LDMwLUNPTlNUX0JJVFMpCTsgRklYKDEuODQ3NzU5MDY1KQorRl8xXzk2MQllcXUJREVTQ0FMRSgyMTA2MjIwMzUwLDMwLUNPTlNUX0JJVFMpCTsgRklYKDEuOTYxNTcwNTYwKQorRl8yXzA1MwllcXUJREVTQ0FMRSgyMjA0NTIwNjczLDMwLUNPTlNUX0JJVFMpCTsgRklYKDIuMDUzMTE5ODY5KQorRl8yXzU2MgllcXUJREVTQ0FMRSgyNzUxOTA5NTA2LDMwLUNPTlNUX0JJVFMpCTsgRklYKDIuNTYyOTE1NDQ3KQorRl8zXzA3MgllcXUJREVTQ0FMRSgzMjk5Mjk4MzQxLDMwLUNPTlNUX0JJVFMpCTsgRklYKDMuMDcyNzExMDI2KQorJWVuZGlmCisKKzsgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKwlTRUNUSU9OCVNFR19DT05TVAorCisJYWxpZ256CTE2CisJZ2xvYmFsCUVYVE4oamNvbnN0X2lkY3RfaXNsb3dfc3NlMikKKworRVhUTihqY29uc3RfaWRjdF9pc2xvd19zc2UyKToKKworUFdfRjEzMF9GMDU0CXRpbWVzIDQgZHcgIChGXzBfNTQxK0ZfMF83NjUpLCBGXzBfNTQxCitQV19GMDU0X01GMTMwCXRpbWVzIDQgZHcgIEZfMF81NDEsIChGXzBfNTQxLUZfMV84NDcpCitQV19NRjA3OF9GMTE3CXRpbWVzIDQgZHcgIChGXzFfMTc1LUZfMV85NjEpLCBGXzFfMTc1CitQV19GMTE3X0YwNzgJdGltZXMgNCBkdyAgRl8xXzE3NSwgKEZfMV8xNzUtRl8wXzM5MCkKK1BXX01GMDYwX01GMDg5CXRpbWVzIDQgZHcgIChGXzBfMjk4LUZfMF84OTkpLC1GXzBfODk5CitQV19NRjA4OV9GMDYwCXRpbWVzIDQgZHcgLUZfMF84OTksIChGXzFfNTAxLUZfMF84OTkpCitQV19NRjA1MF9NRjI1Ngl0aW1lcyA0IGR3ICAoRl8yXzA1My1GXzJfNTYyKSwtRl8yXzU2MgorUFdfTUYyNTZfRjA1MAl0aW1lcyA0IGR3IC1GXzJfNTYyLCAoRl8zXzA3Mi1GXzJfNTYyKQorUERfREVTQ0FMRV9QMQl0aW1lcyA0IGRkICAxIDw8IChERVNDQUxFX1AxLTEpCitQRF9ERVNDQUxFX1AyCXRpbWVzIDQgZGQgIDEgPDwgKERFU0NBTEVfUDItMSkKK1BCX0NFTlRFUkpTQU1QCXRpbWVzIDE2IGRiIENFTlRFUkpTQU1QTEUKKworCWFsaWduegkxNgorCis7IC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisJU0VDVElPTglTRUdfVEVYVAorCUJJVFMJNjQKKzsKKzsgUGVyZm9ybSBkZXF1YW50aXphdGlvbiBhbmQgaW52ZXJzZSBEQ1Qgb24gb25lIGJsb2NrIG9mIGNvZWZmaWNpZW50cy4KKzsKKzsgR0xPQkFMKHZvaWQpCis7IGpzaW1kX2lkY3RfaXNsb3dfc3NlMiAodm9pZCAqIGRjdF90YWJsZSwgSkNPRUZQVFIgY29lZl9ibG9jaywKKzsgICAgICAgICAgICAgICAgICAgICAgICBKU0FNUEFSUkFZIG91dHB1dF9idWYsIEpESU1FTlNJT04gb3V0cHV0X2NvbCkKKzsKKworOyByMTAgPSBqcGVnX2NvbXBvbmVudF9pbmZvICogY29tcHB0cgorOyByMTEgPSBKQ09FRlBUUiBjb2VmX2Jsb2NrCis7IHIxMiA9IEpTQU1QQVJSQVkgb3V0cHV0X2J1ZgorOyByMTMgPSBKRElNRU5TSU9OIG91dHB1dF9jb2wKKworJWRlZmluZSBvcmlnaW5hbF9yYnAJcmJwKzAKKyVkZWZpbmUgd2soaSkJCXJicC0oV0tfTlVNLShpKSkqU0laRU9GX1hNTVdPUkQJOyB4bW13b3JkIHdrW1dLX05VTV0KKyVkZWZpbmUgV0tfTlVNCQkxMgorCisJYWxpZ24JMTYKKwlnbG9iYWwJRVhUTihqc2ltZF9pZGN0X2lzbG93X3NzZTIpCisKK0VYVE4oanNpbWRfaWRjdF9pc2xvd19zc2UyKToKKwlwdXNoCXJicAorCW1vdglyYXgscnNwCQkJCTsgcmF4ID0gb3JpZ2luYWwgcmJwCisJc3ViCXJzcCwgYnl0ZSA0CisJYW5kCXJzcCwgYnl0ZSAoLVNJWkVPRl9YTU1XT1JEKQk7IGFsaWduIHRvIDEyOCBiaXRzCisJbW92CVtyc3BdLHJheAorCW1vdglyYnAscnNwCQkJCTsgcmJwID0gYWxpZ25lZCByYnAKKwlsZWEJcnNwLCBbd2soMCldCisJY29sbGVjdF9hcmdzCisKKwk7IC0tLS0gUGFzcyAxOiBwcm9jZXNzIGNvbHVtbnMgZnJvbSBpbnB1dC4KKworCW1vdglyZHgsIHIxMAk7IHF1YW50cHRyCisJbW92CXJzaSwgcjExCQk7IGlucHRyCisKKyVpZm5kZWYgTk9fWkVST19DT0xVTU5fVEVTVF9JU0xPV19TU0UyCisJbW92CWVheCwgRFdPUkQgW0RXQkxPQ0soMSwwLHJzaSxTSVpFT0ZfSkNPRUYpXQorCW9yCWVheCwgRFdPUkQgW0RXQkxPQ0soMiwwLHJzaSxTSVpFT0ZfSkNPRUYpXQorCWpuegluZWFyIC5jb2x1bW5EQ1QKKworCW1vdmRxYQl4bW0wLCBYTU1XT1JEIFtYTU1CTE9DSygxLDAscnNpLFNJWkVPRl9KQ09FRildCisJbW92ZHFhCXhtbTEsIFhNTVdPUkQgW1hNTUJMT0NLKDIsMCxyc2ksU0laRU9GX0pDT0VGKV0KKwlwb3IJeG1tMCwgWE1NV09SRCBbWE1NQkxPQ0soMywwLHJzaSxTSVpFT0ZfSkNPRUYpXQorCXBvcgl4bW0xLCBYTU1XT1JEIFtYTU1CTE9DSyg0LDAscnNpLFNJWkVPRl9KQ09FRildCisJcG9yCXhtbTAsIFhNTVdPUkQgW1hNTUJMT0NLKDUsMCxyc2ksU0laRU9GX0pDT0VGKV0KKwlwb3IJeG1tMSwgWE1NV09SRCBbWE1NQkxPQ0soNiwwLHJzaSxTSVpFT0ZfSkNPRUYpXQorCXBvcgl4bW0wLCBYTU1XT1JEIFtYTU1CTE9DSyg3LDAscnNpLFNJWkVPRl9KQ09FRildCisJcG9yCXhtbTEseG1tMAorCXBhY2tzc3diIHhtbTEseG1tMQorCXBhY2tzc3diIHhtbTEseG1tMQorCW1vdmQJZWF4LHhtbTEKKwl0ZXN0CXJheCxyYXgKKwlqbnoJc2hvcnQgLmNvbHVtbkRDVAorCisJOyAtLSBBQyB0ZXJtcyBhbGwgemVybworCisJbW92ZHFhCXhtbTUsIFhNTVdPUkQgW1hNTUJMT0NLKDAsMCxyc2ksU0laRU9GX0pDT0VGKV0KKwlwbXVsbHcJeG1tNSwgWE1NV09SRCBbWE1NQkxPQ0soMCwwLHJkeCxTSVpFT0ZfSVNMT1dfTVVMVF9UWVBFKV0KKworCXBzbGx3CXhtbTUsUEFTUzFfQklUUworCisJbW92ZHFhICAgIHhtbTQseG1tNQkJOyB4bW01PWluMD0oMDAgMDEgMDIgMDMgMDQgMDUgMDYgMDcpCisJcHVucGNrbHdkIHhtbTUseG1tNQkJOyB4bW01PSgwMCAwMCAwMSAwMSAwMiAwMiAwMyAwMykKKwlwdW5wY2tod2QgeG1tNCx4bW00CQk7IHhtbTQ9KDA0IDA0IDA1IDA1IDA2IDA2IDA3IDA3KQorCisJcHNodWZkCXhtbTcseG1tNSwweDAwCQk7IHhtbTc9Y29sMD0oMDAgMDAgMDAgMDAgMDAgMDAgMDAgMDApCisJcHNodWZkCXhtbTYseG1tNSwweDU1CQk7IHhtbTY9Y29sMT0oMDEgMDEgMDEgMDEgMDEgMDEgMDEgMDEpCisJcHNodWZkCXhtbTEseG1tNSwweEFBCQk7IHhtbTE9Y29sMj0oMDIgMDIgMDIgMDIgMDIgMDIgMDIgMDIpCisJcHNodWZkCXhtbTUseG1tNSwweEZGCQk7IHhtbTU9Y29sMz0oMDMgMDMgMDMgMDMgMDMgMDMgMDMgMDMpCisJcHNodWZkCXhtbTAseG1tNCwweDAwCQk7IHhtbTA9Y29sND0oMDQgMDQgMDQgMDQgMDQgMDQgMDQgMDQpCisJcHNodWZkCXhtbTMseG1tNCwweDU1CQk7IHhtbTM9Y29sNT0oMDUgMDUgMDUgMDUgMDUgMDUgMDUgMDUpCisJcHNodWZkCXhtbTIseG1tNCwweEFBCQk7IHhtbTI9Y29sNj0oMDYgMDYgMDYgMDYgMDYgMDYgMDYgMDYpCisJcHNodWZkCXhtbTQseG1tNCwweEZGCQk7IHhtbTQ9Y29sNz0oMDcgMDcgMDcgMDcgMDcgMDcgMDcgMDcpCisKKwltb3ZkcWEJWE1NV09SRCBbd2soOCldLCB4bW02CTsgd2soOCk9Y29sMQorCW1vdmRxYQlYTU1XT1JEIFt3ayg5KV0sIHhtbTUJOyB3ayg5KT1jb2wzCisJbW92ZHFhCVhNTVdPUkQgW3drKDEwKV0sIHhtbTMJOyB3aygxMCk9Y29sNQorCW1vdmRxYQlYTU1XT1JEIFt3aygxMSldLCB4bW00CTsgd2soMTEpPWNvbDcKKwlqbXAJbmVhciAuY29sdW1uX2VuZAorJWVuZGlmCisuY29sdW1uRENUOgorCisJOyAtLSBFdmVuIHBhcnQKKworCW1vdmRxYQl4bW0wLCBYTU1XT1JEIFtYTU1CTE9DSygwLDAscnNpLFNJWkVPRl9KQ09FRildCisJbW92ZHFhCXhtbTEsIFhNTVdPUkQgW1hNTUJMT0NLKDIsMCxyc2ksU0laRU9GX0pDT0VGKV0KKwlwbXVsbHcJeG1tMCwgWE1NV09SRCBbWE1NQkxPQ0soMCwwLHJkeCxTSVpFT0ZfSVNMT1dfTVVMVF9UWVBFKV0KKwlwbXVsbHcJeG1tMSwgWE1NV09SRCBbWE1NQkxPQ0soMiwwLHJkeCxTSVpFT0ZfSVNMT1dfTVVMVF9UWVBFKV0KKwltb3ZkcWEJeG1tMiwgWE1NV09SRCBbWE1NQkxPQ0soNCwwLHJzaSxTSVpFT0ZfSkNPRUYpXQorCW1vdmRxYQl4bW0zLCBYTU1XT1JEIFtYTU1CTE9DSyg2LDAscnNpLFNJWkVPRl9KQ09FRildCisJcG11bGx3CXhtbTIsIFhNTVdPUkQgW1hNTUJMT0NLKDQsMCxyZHgsU0laRU9GX0lTTE9XX01VTFRfVFlQRSldCisJcG11bGx3CXhtbTMsIFhNTVdPUkQgW1hNTUJMT0NLKDYsMCxyZHgsU0laRU9GX0lTTE9XX01VTFRfVFlQRSldCisKKwk7IChPcmlnaW5hbCkKKwk7IHoxID0gKHoyICsgejMpICogMC41NDExOTYxMDA7CisJOyB0bXAyID0gejEgKyB6MyAqIC0xLjg0Nzc1OTA2NTsKKwk7IHRtcDMgPSB6MSArIHoyICogMC43NjUzNjY4NjU7CisJOworCTsgKFRoaXMgaW1wbGVtZW50YXRpb24pCisJOyB0bXAyID0gejIgKiAwLjU0MTE5NjEwMCArIHozICogKDAuNTQxMTk2MTAwIC0gMS44NDc3NTkwNjUpOworCTsgdG1wMyA9IHoyICogKDAuNTQxMTk2MTAwICsgMC43NjUzNjY4NjUpICsgejMgKiAwLjU0MTE5NjEwMDsKKworCW1vdmRxYSAgICB4bW00LHhtbTEJCTsgeG1tMT1pbjI9ejIKKwltb3ZkcWEgICAgeG1tNSx4bW0xCisJcHVucGNrbHdkIHhtbTQseG1tMwkJOyB4bW0zPWluNj16MworCXB1bnBja2h3ZCB4bW01LHhtbTMKKwltb3ZkcWEgICAgeG1tMSx4bW00CisJbW92ZHFhICAgIHhtbTMseG1tNQorCXBtYWRkd2QgICB4bW00LFtyZWwgUFdfRjEzMF9GMDU0XQk7IHhtbTQ9dG1wM0wKKwlwbWFkZHdkICAgeG1tNSxbcmVsIFBXX0YxMzBfRjA1NF0JOyB4bW01PXRtcDNICisJcG1hZGR3ZCAgIHhtbTEsW3JlbCBQV19GMDU0X01GMTMwXQk7IHhtbTE9dG1wMkwKKwlwbWFkZHdkICAgeG1tMyxbcmVsIFBXX0YwNTRfTUYxMzBdCTsgeG1tMz10bXAySAorCisJbW92ZHFhICAgIHhtbTYseG1tMAorCXBhZGR3ICAgICB4bW0wLHhtbTIJCTsgeG1tMD1pbjAraW40CisJcHN1YncgICAgIHhtbTYseG1tMgkJOyB4bW02PWluMC1pbjQKKworCXB4b3IgICAgICB4bW03LHhtbTcKKwlweG9yICAgICAgeG1tMix4bW0yCisJcHVucGNrbHdkIHhtbTcseG1tMAkJOyB4bW03PXRtcDBMCisJcHVucGNraHdkIHhtbTIseG1tMAkJOyB4bW0yPXRtcDBICisJcHNyYWQgICAgIHhtbTcsKDE2LUNPTlNUX0JJVFMpCTsgcHNyYWQgeG1tNywxNiAmIHBzbGxkIHhtbTcsQ09OU1RfQklUUworCXBzcmFkICAgICB4bW0yLCgxNi1DT05TVF9CSVRTKQk7IHBzcmFkIHhtbTIsMTYgJiBwc2xsZCB4bW0yLENPTlNUX0JJVFMKKworCW1vdmRxYQl4bW0wLHhtbTcKKwlwYWRkZAl4bW03LHhtbTQJCTsgeG1tNz10bXAxMEwKKwlwc3ViZAl4bW0wLHhtbTQJCTsgeG1tMD10bXAxM0wKKwltb3ZkcWEJeG1tNCx4bW0yCisJcGFkZGQJeG1tMix4bW01CQk7IHhtbTI9dG1wMTBICisJcHN1YmQJeG1tNCx4bW01CQk7IHhtbTQ9dG1wMTNICisKKwltb3ZkcWEJWE1NV09SRCBbd2soMCldLCB4bW03CTsgd2soMCk9dG1wMTBMCisJbW92ZHFhCVhNTVdPUkQgW3drKDEpXSwgeG1tMgk7IHdrKDEpPXRtcDEwSAorCW1vdmRxYQlYTU1XT1JEIFt3aygyKV0sIHhtbTAJOyB3aygyKT10bXAxM0wKKwltb3ZkcWEJWE1NV09SRCBbd2soMyldLCB4bW00CTsgd2soMyk9dG1wMTNICisKKwlweG9yICAgICAgeG1tNSx4bW01CisJcHhvciAgICAgIHhtbTcseG1tNworCXB1bnBja2x3ZCB4bW01LHhtbTYJCTsgeG1tNT10bXAxTAorCXB1bnBja2h3ZCB4bW03LHhtbTYJCTsgeG1tNz10bXAxSAorCXBzcmFkICAgICB4bW01LCgxNi1DT05TVF9CSVRTKQk7IHBzcmFkIHhtbTUsMTYgJiBwc2xsZCB4bW01LENPTlNUX0JJVFMKKwlwc3JhZCAgICAgeG1tNywoMTYtQ09OU1RfQklUUykJOyBwc3JhZCB4bW03LDE2ICYgcHNsbGQgeG1tNyxDT05TVF9CSVRTCisKKwltb3ZkcWEJeG1tMix4bW01CisJcGFkZGQJeG1tNSx4bW0xCQk7IHhtbTU9dG1wMTFMCisJcHN1YmQJeG1tMix4bW0xCQk7IHhtbTI9dG1wMTJMCisJbW92ZHFhCXhtbTAseG1tNworCXBhZGRkCXhtbTcseG1tMwkJOyB4bW03PXRtcDExSAorCXBzdWJkCXhtbTAseG1tMwkJOyB4bW0wPXRtcDEySAorCisJbW92ZHFhCVhNTVdPUkQgW3drKDQpXSwgeG1tNQk7IHdrKDQpPXRtcDExTAorCW1vdmRxYQlYTU1XT1JEIFt3ayg1KV0sIHhtbTcJOyB3ayg1KT10bXAxMUgKKwltb3ZkcWEJWE1NV09SRCBbd2soNildLCB4bW0yCTsgd2soNik9dG1wMTJMCisJbW92ZHFhCVhNTVdPUkQgW3drKDcpXSwgeG1tMAk7IHdrKDcpPXRtcDEySAorCisJOyAtLSBPZGQgcGFydAorCisJbW92ZHFhCXhtbTQsIFhNTVdPUkQgW1hNTUJMT0NLKDEsMCxyc2ksU0laRU9GX0pDT0VGKV0KKwltb3ZkcWEJeG1tNiwgWE1NV09SRCBbWE1NQkxPQ0soMywwLHJzaSxTSVpFT0ZfSkNPRUYpXQorCXBtdWxsdwl4bW00LCBYTU1XT1JEIFtYTU1CTE9DSygxLDAscmR4LFNJWkVPRl9JU0xPV19NVUxUX1RZUEUpXQorCXBtdWxsdwl4bW02LCBYTU1XT1JEIFtYTU1CTE9DSygzLDAscmR4LFNJWkVPRl9JU0xPV19NVUxUX1RZUEUpXQorCW1vdmRxYQl4bW0xLCBYTU1XT1JEIFtYTU1CTE9DSyg1LDAscnNpLFNJWkVPRl9KQ09FRildCisJbW92ZHFhCXhtbTMsIFhNTVdPUkQgW1hNTUJMT0NLKDcsMCxyc2ksU0laRU9GX0pDT0VGKV0KKwlwbXVsbHcJeG1tMSwgWE1NV09SRCBbWE1NQkxPQ0soNSwwLHJkeCxTSVpFT0ZfSVNMT1dfTVVMVF9UWVBFKV0KKwlwbXVsbHcJeG1tMywgWE1NV09SRCBbWE1NQkxPQ0soNywwLHJkeCxTSVpFT0ZfSVNMT1dfTVVMVF9UWVBFKV0KKworCW1vdmRxYQl4bW01LHhtbTYKKwltb3ZkcWEJeG1tNyx4bW00CisJcGFkZHcJeG1tNSx4bW0zCQk7IHhtbTU9ejMKKwlwYWRkdwl4bW03LHhtbTEJCTsgeG1tNz16NAorCisJOyAoT3JpZ2luYWwpCisJOyB6NSA9ICh6MyArIHo0KSAqIDEuMTc1ODc1NjAyOworCTsgejMgPSB6MyAqIC0xLjk2MTU3MDU2MDsgIHo0ID0gejQgKiAtMC4zOTAxODA2NDQ7CisJOyB6MyArPSB6NTsgIHo0ICs9IHo1OworCTsKKwk7IChUaGlzIGltcGxlbWVudGF0aW9uKQorCTsgejMgPSB6MyAqICgxLjE3NTg3NTYwMiAtIDEuOTYxNTcwNTYwKSArIHo0ICogMS4xNzU4NzU2MDI7CisJOyB6NCA9IHozICogMS4xNzU4NzU2MDIgKyB6NCAqICgxLjE3NTg3NTYwMiAtIDAuMzkwMTgwNjQ0KTsKKworCW1vdmRxYSAgICB4bW0yLHhtbTUKKwltb3ZkcWEgICAgeG1tMCx4bW01CisJcHVucGNrbHdkIHhtbTIseG1tNworCXB1bnBja2h3ZCB4bW0wLHhtbTcKKwltb3ZkcWEgICAgeG1tNSx4bW0yCisJbW92ZHFhICAgIHhtbTcseG1tMAorCXBtYWRkd2QgICB4bW0yLFtyZWwgUFdfTUYwNzhfRjExN10JOyB4bW0yPXozTAorCXBtYWRkd2QgICB4bW0wLFtyZWwgUFdfTUYwNzhfRjExN10JOyB4bW0wPXozSAorCXBtYWRkd2QgICB4bW01LFtyZWwgUFdfRjExN19GMDc4XQk7IHhtbTU9ejRMCisJcG1hZGR3ZCAgIHhtbTcsW3JlbCBQV19GMTE3X0YwNzhdCTsgeG1tNz16NEgKKworCW1vdmRxYQlYTU1XT1JEIFt3aygxMCldLCB4bW0yCTsgd2soMTApPXozTAorCW1vdmRxYQlYTU1XT1JEIFt3aygxMSldLCB4bW0wCTsgd2soMTEpPXozSAorCisJOyAoT3JpZ2luYWwpCisJOyB6MSA9IHRtcDAgKyB0bXAzOyAgejIgPSB0bXAxICsgdG1wMjsKKwk7IHRtcDAgPSB0bXAwICogMC4yOTg2MzEzMzY7ICB0bXAxID0gdG1wMSAqIDIuMDUzMTE5ODY5OworCTsgdG1wMiA9IHRtcDIgKiAzLjA3MjcxMTAyNjsgIHRtcDMgPSB0bXAzICogMS41MDEzMjExMTA7CisJOyB6MSA9IHoxICogLTAuODk5OTc2MjIzOyAgejIgPSB6MiAqIC0yLjU2MjkxNTQ0NzsKKwk7IHRtcDAgKz0gejEgKyB6MzsgIHRtcDEgKz0gejIgKyB6NDsKKwk7IHRtcDIgKz0gejIgKyB6MzsgIHRtcDMgKz0gejEgKyB6NDsKKwk7CisJOyAoVGhpcyBpbXBsZW1lbnRhdGlvbikKKwk7IHRtcDAgPSB0bXAwICogKDAuMjk4NjMxMzM2IC0gMC44OTk5NzYyMjMpICsgdG1wMyAqIC0wLjg5OTk3NjIyMzsKKwk7IHRtcDEgPSB0bXAxICogKDIuMDUzMTE5ODY5IC0gMi41NjI5MTU0NDcpICsgdG1wMiAqIC0yLjU2MjkxNTQ0NzsKKwk7IHRtcDIgPSB0bXAxICogLTIuNTYyOTE1NDQ3ICsgdG1wMiAqICgzLjA3MjcxMTAyNiAtIDIuNTYyOTE1NDQ3KTsKKwk7IHRtcDMgPSB0bXAwICogLTAuODk5OTc2MjIzICsgdG1wMyAqICgxLjUwMTMyMTExMCAtIDAuODk5OTc2MjIzKTsKKwk7IHRtcDAgKz0gejM7ICB0bXAxICs9IHo0OworCTsgdG1wMiArPSB6MzsgIHRtcDMgKz0gejQ7CisKKwltb3ZkcWEgICAgeG1tMix4bW0zCisJbW92ZHFhICAgIHhtbTAseG1tMworCXB1bnBja2x3ZCB4bW0yLHhtbTQKKwlwdW5wY2tod2QgeG1tMCx4bW00CisJbW92ZHFhICAgIHhtbTMseG1tMgorCW1vdmRxYSAgICB4bW00LHhtbTAKKwlwbWFkZHdkICAgeG1tMixbcmVsIFBXX01GMDYwX01GMDg5XQk7IHhtbTI9dG1wMEwKKwlwbWFkZHdkICAgeG1tMCxbcmVsIFBXX01GMDYwX01GMDg5XQk7IHhtbTA9dG1wMEgKKwlwbWFkZHdkICAgeG1tMyxbcmVsIFBXX01GMDg5X0YwNjBdCTsgeG1tMz10bXAzTAorCXBtYWRkd2QgICB4bW00LFtyZWwgUFdfTUYwODlfRjA2MF0JOyB4bW00PXRtcDNICisKKwlwYWRkZAl4bW0yLCBYTU1XT1JEIFt3aygxMCldCTsgeG1tMj10bXAwTAorCXBhZGRkCXhtbTAsIFhNTVdPUkQgW3drKDExKV0JOyB4bW0wPXRtcDBICisJcGFkZGQJeG1tMyx4bW01CQk7IHhtbTM9dG1wM0wKKwlwYWRkZAl4bW00LHhtbTcJCTsgeG1tND10bXAzSAorCisJbW92ZHFhCVhNTVdPUkQgW3drKDgpXSwgeG1tMgk7IHdrKDgpPXRtcDBMCisJbW92ZHFhCVhNTVdPUkQgW3drKDkpXSwgeG1tMAk7IHdrKDkpPXRtcDBICisKKwltb3ZkcWEgICAgeG1tMix4bW0xCisJbW92ZHFhICAgIHhtbTAseG1tMQorCXB1bnBja2x3ZCB4bW0yLHhtbTYKKwlwdW5wY2tod2QgeG1tMCx4bW02CisJbW92ZHFhICAgIHhtbTEseG1tMgorCW1vdmRxYSAgICB4bW02LHhtbTAKKwlwbWFkZHdkICAgeG1tMixbcmVsIFBXX01GMDUwX01GMjU2XQk7IHhtbTI9dG1wMUwKKwlwbWFkZHdkICAgeG1tMCxbcmVsIFBXX01GMDUwX01GMjU2XQk7IHhtbTA9dG1wMUgKKwlwbWFkZHdkICAgeG1tMSxbcmVsIFBXX01GMjU2X0YwNTBdCTsgeG1tMT10bXAyTAorCXBtYWRkd2QgICB4bW02LFtyZWwgUFdfTUYyNTZfRjA1MF0JOyB4bW02PXRtcDJICisKKwlwYWRkZAl4bW0yLHhtbTUJCTsgeG1tMj10bXAxTAorCXBhZGRkCXhtbTAseG1tNwkJOyB4bW0wPXRtcDFICisJcGFkZGQJeG1tMSwgWE1NV09SRCBbd2soMTApXQk7IHhtbTE9dG1wMkwKKwlwYWRkZAl4bW02LCBYTU1XT1JEIFt3aygxMSldCTsgeG1tNj10bXAySAorCisJbW92ZHFhCVhNTVdPUkQgW3drKDEwKV0sIHhtbTIJOyB3aygxMCk9dG1wMUwKKwltb3ZkcWEJWE1NV09SRCBbd2soMTEpXSwgeG1tMAk7IHdrKDExKT10bXAxSAorCisJOyAtLSBGaW5hbCBvdXRwdXQgc3RhZ2UKKworCW1vdmRxYQl4bW01LCBYTU1XT1JEIFt3aygwKV0JOyB4bW01PXRtcDEwTAorCW1vdmRxYQl4bW03LCBYTU1XT1JEIFt3aygxKV0JOyB4bW03PXRtcDEwSAorCisJbW92ZHFhCXhtbTIseG1tNQorCW1vdmRxYQl4bW0wLHhtbTcKKwlwYWRkZAl4bW01LHhtbTMJCTsgeG1tNT1kYXRhMEwKKwlwYWRkZAl4bW03LHhtbTQJCTsgeG1tNz1kYXRhMEgKKwlwc3ViZAl4bW0yLHhtbTMJCTsgeG1tMj1kYXRhN0wKKwlwc3ViZAl4bW0wLHhtbTQJCTsgeG1tMD1kYXRhN0gKKworCW1vdmRxYQl4bW0zLFtyZWwgUERfREVTQ0FMRV9QMV0JOyB4bW0zPVtyZWwgUERfREVTQ0FMRV9QMV0KKworCXBhZGRkCXhtbTUseG1tMworCXBhZGRkCXhtbTcseG1tMworCXBzcmFkCXhtbTUsREVTQ0FMRV9QMQorCXBzcmFkCXhtbTcsREVTQ0FMRV9QMQorCXBhZGRkCXhtbTIseG1tMworCXBhZGRkCXhtbTAseG1tMworCXBzcmFkCXhtbTIsREVTQ0FMRV9QMQorCXBzcmFkCXhtbTAsREVTQ0FMRV9QMQorCisJcGFja3NzZHcgIHhtbTUseG1tNwkJOyB4bW01PWRhdGEwPSgwMCAwMSAwMiAwMyAwNCAwNSAwNiAwNykKKwlwYWNrc3NkdyAgeG1tMix4bW0wCQk7IHhtbTI9ZGF0YTc9KDcwIDcxIDcyIDczIDc0IDc1IDc2IDc3KQorCisJbW92ZHFhCXhtbTQsIFhNTVdPUkQgW3drKDQpXQk7IHhtbTQ9dG1wMTFMCisJbW92ZHFhCXhtbTMsIFhNTVdPUkQgW3drKDUpXQk7IHhtbTM9dG1wMTFICisKKwltb3ZkcWEJeG1tNyx4bW00CisJbW92ZHFhCXhtbTAseG1tMworCXBhZGRkCXhtbTQseG1tMQkJOyB4bW00PWRhdGExTAorCXBhZGRkCXhtbTMseG1tNgkJOyB4bW0zPWRhdGExSAorCXBzdWJkCXhtbTcseG1tMQkJOyB4bW03PWRhdGE2TAorCXBzdWJkCXhtbTAseG1tNgkJOyB4bW0wPWRhdGE2SAorCisJbW92ZHFhCXhtbTEsW3JlbCBQRF9ERVNDQUxFX1AxXQk7IHhtbTE9W3JlbCBQRF9ERVNDQUxFX1AxXQorCisJcGFkZGQJeG1tNCx4bW0xCisJcGFkZGQJeG1tMyx4bW0xCisJcHNyYWQJeG1tNCxERVNDQUxFX1AxCisJcHNyYWQJeG1tMyxERVNDQUxFX1AxCisJcGFkZGQJeG1tNyx4bW0xCisJcGFkZGQJeG1tMCx4bW0xCisJcHNyYWQJeG1tNyxERVNDQUxFX1AxCisJcHNyYWQJeG1tMCxERVNDQUxFX1AxCisKKwlwYWNrc3NkdyAgeG1tNCx4bW0zCQk7IHhtbTQ9ZGF0YTE9KDEwIDExIDEyIDEzIDE0IDE1IDE2IDE3KQorCXBhY2tzc2R3ICB4bW03LHhtbTAJCTsgeG1tNz1kYXRhNj0oNjAgNjEgNjIgNjMgNjQgNjUgNjYgNjcpCisKKwltb3ZkcWEgICAgeG1tNix4bW01CQk7IHRyYW5zcG9zZSBjb2VmZmljaWVudHMocGhhc2UgMSkKKwlwdW5wY2tsd2QgeG1tNSx4bW00CQk7IHhtbTU9KDAwIDEwIDAxIDExIDAyIDEyIDAzIDEzKQorCXB1bnBja2h3ZCB4bW02LHhtbTQJCTsgeG1tNj0oMDQgMTQgMDUgMTUgMDYgMTYgMDcgMTcpCisJbW92ZHFhICAgIHhtbTEseG1tNwkJOyB0cmFuc3Bvc2UgY29lZmZpY2llbnRzKHBoYXNlIDEpCisJcHVucGNrbHdkIHhtbTcseG1tMgkJOyB4bW03PSg2MCA3MCA2MSA3MSA2MiA3MiA2MyA3MykKKwlwdW5wY2tod2QgeG1tMSx4bW0yCQk7IHhtbTE9KDY0IDc0IDY1IDc1IDY2IDc2IDY3IDc3KQorCisJbW92ZHFhCXhtbTMsIFhNTVdPUkQgW3drKDYpXQk7IHhtbTM9dG1wMTJMCisJbW92ZHFhCXhtbTAsIFhNTVdPUkQgW3drKDcpXQk7IHhtbTA9dG1wMTJICisJbW92ZHFhCXhtbTQsIFhNTVdPUkQgW3drKDEwKV0JOyB4bW00PXRtcDFMCisJbW92ZHFhCXhtbTIsIFhNTVdPUkQgW3drKDExKV0JOyB4bW0yPXRtcDFICisKKwltb3ZkcWEJWE1NV09SRCBbd2soMCldLCB4bW01CTsgd2soMCk9KDAwIDEwIDAxIDExIDAyIDEyIDAzIDEzKQorCW1vdmRxYQlYTU1XT1JEIFt3aygxKV0sIHhtbTYJOyB3aygxKT0oMDQgMTQgMDUgMTUgMDYgMTYgMDcgMTcpCisJbW92ZHFhCVhNTVdPUkQgW3drKDQpXSwgeG1tNwk7IHdrKDQpPSg2MCA3MCA2MSA3MSA2MiA3MiA2MyA3MykKKwltb3ZkcWEJWE1NV09SRCBbd2soNSldLCB4bW0xCTsgd2soNSk9KDY0IDc0IDY1IDc1IDY2IDc2IDY3IDc3KQorCisJbW92ZHFhCXhtbTUseG1tMworCW1vdmRxYQl4bW02LHhtbTAKKwlwYWRkZAl4bW0zLHhtbTQJCTsgeG1tMz1kYXRhMkwKKwlwYWRkZAl4bW0wLHhtbTIJCTsgeG1tMD1kYXRhMkgKKwlwc3ViZAl4bW01LHhtbTQJCTsgeG1tNT1kYXRhNUwKKwlwc3ViZAl4bW02LHhtbTIJCTsgeG1tNj1kYXRhNUgKKworCW1vdmRxYQl4bW03LFtyZWwgUERfREVTQ0FMRV9QMV0JOyB4bW03PVtyZWwgUERfREVTQ0FMRV9QMV0KKworCXBhZGRkCXhtbTMseG1tNworCXBhZGRkCXhtbTAseG1tNworCXBzcmFkCXhtbTMsREVTQ0FMRV9QMQorCXBzcmFkCXhtbTAsREVTQ0FMRV9QMQorCXBhZGRkCXhtbTUseG1tNworCXBhZGRkCXhtbTYseG1tNworCXBzcmFkCXhtbTUsREVTQ0FMRV9QMQorCXBzcmFkCXhtbTYsREVTQ0FMRV9QMQorCisJcGFja3NzZHcgIHhtbTMseG1tMAkJOyB4bW0zPWRhdGEyPSgyMCAyMSAyMiAyMyAyNCAyNSAyNiAyNykKKwlwYWNrc3NkdyAgeG1tNSx4bW02CQk7IHhtbTU9ZGF0YTU9KDUwIDUxIDUyIDUzIDU0IDU1IDU2IDU3KQorCisJbW92ZHFhCXhtbTEsIFhNTVdPUkQgW3drKDIpXQk7IHhtbTE9dG1wMTNMCisJbW92ZHFhCXhtbTQsIFhNTVdPUkQgW3drKDMpXQk7IHhtbTQ9dG1wMTNICisJbW92ZHFhCXhtbTIsIFhNTVdPUkQgW3drKDgpXQk7IHhtbTI9dG1wMEwKKwltb3ZkcWEJeG1tNywgWE1NV09SRCBbd2soOSldCTsgeG1tNz10bXAwSAorCisJbW92ZHFhCXhtbTAseG1tMQorCW1vdmRxYQl4bW02LHhtbTQKKwlwYWRkZAl4bW0xLHhtbTIJCTsgeG1tMT1kYXRhM0wKKwlwYWRkZAl4bW00LHhtbTcJCTsgeG1tND1kYXRhM0gKKwlwc3ViZAl4bW0wLHhtbTIJCTsgeG1tMD1kYXRhNEwKKwlwc3ViZAl4bW02LHhtbTcJCTsgeG1tNj1kYXRhNEgKKworCW1vdmRxYQl4bW0yLFtyZWwgUERfREVTQ0FMRV9QMV0JOyB4bW0yPVtyZWwgUERfREVTQ0FMRV9QMV0KKworCXBhZGRkCXhtbTEseG1tMgorCXBhZGRkCXhtbTQseG1tMgorCXBzcmFkCXhtbTEsREVTQ0FMRV9QMQorCXBzcmFkCXhtbTQsREVTQ0FMRV9QMQorCXBhZGRkCXhtbTAseG1tMgorCXBhZGRkCXhtbTYseG1tMgorCXBzcmFkCXhtbTAsREVTQ0FMRV9QMQorCXBzcmFkCXhtbTYsREVTQ0FMRV9QMQorCisJcGFja3NzZHcgIHhtbTEseG1tNAkJOyB4bW0xPWRhdGEzPSgzMCAzMSAzMiAzMyAzNCAzNSAzNiAzNykKKwlwYWNrc3NkdyAgeG1tMCx4bW02CQk7IHhtbTA9ZGF0YTQ9KDQwIDQxIDQyIDQzIDQ0IDQ1IDQ2IDQ3KQorCisJbW92ZHFhCXhtbTcsIFhNTVdPUkQgW3drKDApXQk7IHhtbTc9KDAwIDEwIDAxIDExIDAyIDEyIDAzIDEzKQorCW1vdmRxYQl4bW0yLCBYTU1XT1JEIFt3aygxKV0JOyB4bW0yPSgwNCAxNCAwNSAxNSAwNiAxNiAwNyAxNykKKworCW1vdmRxYSAgICB4bW00LHhtbTMJCTsgdHJhbnNwb3NlIGNvZWZmaWNpZW50cyhwaGFzZSAxKQorCXB1bnBja2x3ZCB4bW0zLHhtbTEJCTsgeG1tMz0oMjAgMzAgMjEgMzEgMjIgMzIgMjMgMzMpCisJcHVucGNraHdkIHhtbTQseG1tMQkJOyB4bW00PSgyNCAzNCAyNSAzNSAyNiAzNiAyNyAzNykKKwltb3ZkcWEgICAgeG1tNix4bW0wCQk7IHRyYW5zcG9zZSBjb2VmZmljaWVudHMocGhhc2UgMSkKKwlwdW5wY2tsd2QgeG1tMCx4bW01CQk7IHhtbTA9KDQwIDUwIDQxIDUxIDQyIDUyIDQzIDUzKQorCXB1bnBja2h3ZCB4bW02LHhtbTUJCTsgeG1tNj0oNDQgNTQgNDUgNTUgNDYgNTYgNDcgNTcpCisKKwltb3ZkcWEgICAgeG1tMSx4bW03CQk7IHRyYW5zcG9zZSBjb2VmZmljaWVudHMocGhhc2UgMikKKwlwdW5wY2tsZHEgeG1tNyx4bW0zCQk7IHhtbTc9KDAwIDEwIDIwIDMwIDAxIDExIDIxIDMxKQorCXB1bnBja2hkcSB4bW0xLHhtbTMJCTsgeG1tMT0oMDIgMTIgMjIgMzIgMDMgMTMgMjMgMzMpCisJbW92ZHFhICAgIHhtbTUseG1tMgkJOyB0cmFuc3Bvc2UgY29lZmZpY2llbnRzKHBoYXNlIDIpCisJcHVucGNrbGRxIHhtbTIseG1tNAkJOyB4bW0yPSgwNCAxNCAyNCAzNCAwNSAxNSAyNSAzNSkKKwlwdW5wY2toZHEgeG1tNSx4bW00CQk7IHhtbTU9KDA2IDE2IDI2IDM2IDA3IDE3IDI3IDM3KQorCisJbW92ZHFhCXhtbTMsIFhNTVdPUkQgW3drKDQpXQk7IHhtbTM9KDYwIDcwIDYxIDcxIDYyIDcyIDYzIDczKQorCW1vdmRxYQl4bW00LCBYTU1XT1JEIFt3ayg1KV0JOyB4bW00PSg2NCA3NCA2NSA3NSA2NiA3NiA2NyA3NykKKworCW1vdmRxYQlYTU1XT1JEIFt3ayg2KV0sIHhtbTIJOyB3ayg2KT0oMDQgMTQgMjQgMzQgMDUgMTUgMjUgMzUpCisJbW92ZHFhCVhNTVdPUkQgW3drKDcpXSwgeG1tNQk7IHdrKDcpPSgwNiAxNiAyNiAzNiAwNyAxNyAyNyAzNykKKworCW1vdmRxYSAgICB4bW0yLHhtbTAJCTsgdHJhbnNwb3NlIGNvZWZmaWNpZW50cyhwaGFzZSAyKQorCXB1bnBja2xkcSB4bW0wLHhtbTMJCTsgeG1tMD0oNDAgNTAgNjAgNzAgNDEgNTEgNjEgNzEpCisJcHVucGNraGRxIHhtbTIseG1tMwkJOyB4bW0yPSg0MiA1MiA2MiA3MiA0MyA1MyA2MyA3MykKKwltb3ZkcWEgICAgeG1tNSx4bW02CQk7IHRyYW5zcG9zZSBjb2VmZmljaWVudHMocGhhc2UgMikKKwlwdW5wY2tsZHEgeG1tNix4bW00CQk7IHhtbTY9KDQ0IDU0IDY0IDc0IDQ1IDU1IDY1IDc1KQorCXB1bnBja2hkcSB4bW01LHhtbTQJCTsgeG1tNT0oNDYgNTYgNjYgNzYgNDcgNTcgNjcgNzcpCisKKwltb3ZkcWEgICAgIHhtbTMseG1tNwkJOyB0cmFuc3Bvc2UgY29lZmZpY2llbnRzKHBoYXNlIDMpCisJcHVucGNrbHFkcSB4bW03LHhtbTAJCTsgeG1tNz1jb2wwPSgwMCAxMCAyMCAzMCA0MCA1MCA2MCA3MCkKKwlwdW5wY2tocWRxIHhtbTMseG1tMAkJOyB4bW0zPWNvbDE9KDAxIDExIDIxIDMxIDQxIDUxIDYxIDcxKQorCW1vdmRxYSAgICAgeG1tNCx4bW0xCQk7IHRyYW5zcG9zZSBjb2VmZmljaWVudHMocGhhc2UgMykKKwlwdW5wY2tscWRxIHhtbTEseG1tMgkJOyB4bW0xPWNvbDI9KDAyIDEyIDIyIDMyIDQyIDUyIDYyIDcyKQorCXB1bnBja2hxZHEgeG1tNCx4bW0yCQk7IHhtbTQ9Y29sMz0oMDMgMTMgMjMgMzMgNDMgNTMgNjMgNzMpCisKKwltb3ZkcWEJeG1tMCwgWE1NV09SRCBbd2soNildCTsgeG1tMD0oMDQgMTQgMjQgMzQgMDUgMTUgMjUgMzUpCisJbW92ZHFhCXhtbTIsIFhNTVdPUkQgW3drKDcpXQk7IHhtbTI9KDA2IDE2IDI2IDM2IDA3IDE3IDI3IDM3KQorCisJbW92ZHFhCVhNTVdPUkQgW3drKDgpXSwgeG1tMwk7IHdrKDgpPWNvbDEKKwltb3ZkcWEJWE1NV09SRCBbd2soOSldLCB4bW00CTsgd2soOSk9Y29sMworCisJbW92ZHFhICAgICB4bW0zLHhtbTAJCTsgdHJhbnNwb3NlIGNvZWZmaWNpZW50cyhwaGFzZSAzKQorCXB1bnBja2xxZHEgeG1tMCx4bW02CQk7IHhtbTA9Y29sND0oMDQgMTQgMjQgMzQgNDQgNTQgNjQgNzQpCisJcHVucGNraHFkcSB4bW0zLHhtbTYJCTsgeG1tMz1jb2w1PSgwNSAxNSAyNSAzNSA0NSA1NSA2NSA3NSkKKwltb3ZkcWEgICAgIHhtbTQseG1tMgkJOyB0cmFuc3Bvc2UgY29lZmZpY2llbnRzKHBoYXNlIDMpCisJcHVucGNrbHFkcSB4bW0yLHhtbTUJCTsgeG1tMj1jb2w2PSgwNiAxNiAyNiAzNiA0NiA1NiA2NiA3NikKKwlwdW5wY2tocWRxIHhtbTQseG1tNQkJOyB4bW00PWNvbDc9KDA3IDE3IDI3IDM3IDQ3IDU3IDY3IDc3KQorCisJbW92ZHFhCVhNTVdPUkQgW3drKDEwKV0sIHhtbTMJOyB3aygxMCk9Y29sNQorCW1vdmRxYQlYTU1XT1JEIFt3aygxMSldLCB4bW00CTsgd2soMTEpPWNvbDcKKy5jb2x1bW5fZW5kOgorCisJOyAtLSBQcmVmZXRjaCB0aGUgbmV4dCBjb2VmZmljaWVudCBibG9jaworCisJcHJlZmV0Y2hudGEgW3JzaSArIERDVFNJWkUyKlNJWkVPRl9KQ09FRiArIDAqMzJdCisJcHJlZmV0Y2hudGEgW3JzaSArIERDVFNJWkUyKlNJWkVPRl9KQ09FRiArIDEqMzJdCisJcHJlZmV0Y2hudGEgW3JzaSArIERDVFNJWkUyKlNJWkVPRl9KQ09FRiArIDIqMzJdCisJcHJlZmV0Y2hudGEgW3JzaSArIERDVFNJWkUyKlNJWkVPRl9KQ09FRiArIDMqMzJdCisKKwk7IC0tLS0gUGFzcyAyOiBwcm9jZXNzIHJvd3MgZnJvbSB3b3JrIGFycmF5LCBzdG9yZSBpbnRvIG91dHB1dCBhcnJheS4KKworCW1vdglyYXgsIFtvcmlnaW5hbF9yYnBdCisJbW92CXJkaSwgcjEyCTsgKEpTQU1QUk9XICopCisJbW92CXJheCwgcjEzCisKKwk7IC0tIEV2ZW4gcGFydAorCisJOyB4bW03PWNvbDAsIHhtbTE9Y29sMiwgeG1tMD1jb2w0LCB4bW0yPWNvbDYKKworCTsgKE9yaWdpbmFsKQorCTsgejEgPSAoejIgKyB6MykgKiAwLjU0MTE5NjEwMDsKKwk7IHRtcDIgPSB6MSArIHozICogLTEuODQ3NzU5MDY1OworCTsgdG1wMyA9IHoxICsgejIgKiAwLjc2NTM2Njg2NTsKKwk7CisJOyAoVGhpcyBpbXBsZW1lbnRhdGlvbikKKwk7IHRtcDIgPSB6MiAqIDAuNTQxMTk2MTAwICsgejMgKiAoMC41NDExOTYxMDAgLSAxLjg0Nzc1OTA2NSk7CisJOyB0bXAzID0gejIgKiAoMC41NDExOTYxMDAgKyAwLjc2NTM2Njg2NSkgKyB6MyAqIDAuNTQxMTk2MTAwOworCisJbW92ZHFhICAgIHhtbTYseG1tMQkJOyB4bW0xPWluMj16MgorCW1vdmRxYSAgICB4bW01LHhtbTEKKwlwdW5wY2tsd2QgeG1tNix4bW0yCQk7IHhtbTI9aW42PXozCisJcHVucGNraHdkIHhtbTUseG1tMgorCW1vdmRxYSAgICB4bW0xLHhtbTYKKwltb3ZkcWEgICAgeG1tMix4bW01CisJcG1hZGR3ZCAgIHhtbTYsW3JlbCBQV19GMTMwX0YwNTRdCTsgeG1tNj10bXAzTAorCXBtYWRkd2QgICB4bW01LFtyZWwgUFdfRjEzMF9GMDU0XQk7IHhtbTU9dG1wM0gKKwlwbWFkZHdkICAgeG1tMSxbcmVsIFBXX0YwNTRfTUYxMzBdCTsgeG1tMT10bXAyTAorCXBtYWRkd2QgICB4bW0yLFtyZWwgUFdfRjA1NF9NRjEzMF0JOyB4bW0yPXRtcDJICisKKwltb3ZkcWEgICAgeG1tMyx4bW03CisJcGFkZHcgICAgIHhtbTcseG1tMAkJOyB4bW03PWluMCtpbjQKKwlwc3VidyAgICAgeG1tMyx4bW0wCQk7IHhtbTM9aW4wLWluNAorCisJcHhvciAgICAgIHhtbTQseG1tNAorCXB4b3IgICAgICB4bW0wLHhtbTAKKwlwdW5wY2tsd2QgeG1tNCx4bW03CQk7IHhtbTQ9dG1wMEwKKwlwdW5wY2tod2QgeG1tMCx4bW03CQk7IHhtbTA9dG1wMEgKKwlwc3JhZCAgICAgeG1tNCwoMTYtQ09OU1RfQklUUykJOyBwc3JhZCB4bW00LDE2ICYgcHNsbGQgeG1tNCxDT05TVF9CSVRTCisJcHNyYWQgICAgIHhtbTAsKDE2LUNPTlNUX0JJVFMpCTsgcHNyYWQgeG1tMCwxNiAmIHBzbGxkIHhtbTAsQ09OU1RfQklUUworCisJbW92ZHFhCXhtbTcseG1tNAorCXBhZGRkCXhtbTQseG1tNgkJOyB4bW00PXRtcDEwTAorCXBzdWJkCXhtbTcseG1tNgkJOyB4bW03PXRtcDEzTAorCW1vdmRxYQl4bW02LHhtbTAKKwlwYWRkZAl4bW0wLHhtbTUJCTsgeG1tMD10bXAxMEgKKwlwc3ViZAl4bW02LHhtbTUJCTsgeG1tNj10bXAxM0gKKworCW1vdmRxYQlYTU1XT1JEIFt3aygwKV0sIHhtbTQJOyB3aygwKT10bXAxMEwKKwltb3ZkcWEJWE1NV09SRCBbd2soMSldLCB4bW0wCTsgd2soMSk9dG1wMTBICisJbW92ZHFhCVhNTVdPUkQgW3drKDIpXSwgeG1tNwk7IHdrKDIpPXRtcDEzTAorCW1vdmRxYQlYTU1XT1JEIFt3aygzKV0sIHhtbTYJOyB3aygzKT10bXAxM0gKKworCXB4b3IgICAgICB4bW01LHhtbTUKKwlweG9yICAgICAgeG1tNCx4bW00CisJcHVucGNrbHdkIHhtbTUseG1tMwkJOyB4bW01PXRtcDFMCisJcHVucGNraHdkIHhtbTQseG1tMwkJOyB4bW00PXRtcDFICisJcHNyYWQgICAgIHhtbTUsKDE2LUNPTlNUX0JJVFMpCTsgcHNyYWQgeG1tNSwxNiAmIHBzbGxkIHhtbTUsQ09OU1RfQklUUworCXBzcmFkICAgICB4bW00LCgxNi1DT05TVF9CSVRTKQk7IHBzcmFkIHhtbTQsMTYgJiBwc2xsZCB4bW00LENPTlNUX0JJVFMKKworCW1vdmRxYQl4bW0wLHhtbTUKKwlwYWRkZAl4bW01LHhtbTEJCTsgeG1tNT10bXAxMUwKKwlwc3ViZAl4bW0wLHhtbTEJCTsgeG1tMD10bXAxMkwKKwltb3ZkcWEJeG1tNyx4bW00CisJcGFkZGQJeG1tNCx4bW0yCQk7IHhtbTQ9dG1wMTFICisJcHN1YmQJeG1tNyx4bW0yCQk7IHhtbTc9dG1wMTJICisKKwltb3ZkcWEJWE1NV09SRCBbd2soNCldLCB4bW01CTsgd2soNCk9dG1wMTFMCisJbW92ZHFhCVhNTVdPUkQgW3drKDUpXSwgeG1tNAk7IHdrKDUpPXRtcDExSAorCW1vdmRxYQlYTU1XT1JEIFt3ayg2KV0sIHhtbTAJOyB3ayg2KT10bXAxMkwKKwltb3ZkcWEJWE1NV09SRCBbd2soNyldLCB4bW03CTsgd2soNyk9dG1wMTJICisKKwk7IC0tIE9kZCBwYXJ0CisKKwltb3ZkcWEJeG1tNiwgWE1NV09SRCBbd2soOSldCTsgeG1tNj1jb2wzCisJbW92ZHFhCXhtbTMsIFhNTVdPUkQgW3drKDgpXQk7IHhtbTM9Y29sMQorCW1vdmRxYQl4bW0xLCBYTU1XT1JEIFt3aygxMSldCTsgeG1tMT1jb2w3CisJbW92ZHFhCXhtbTIsIFhNTVdPUkQgW3drKDEwKV0JOyB4bW0yPWNvbDUKKworCW1vdmRxYQl4bW01LHhtbTYKKwltb3ZkcWEJeG1tNCx4bW0zCisJcGFkZHcJeG1tNSx4bW0xCQk7IHhtbTU9ejMKKwlwYWRkdwl4bW00LHhtbTIJCTsgeG1tND16NAorCisJOyAoT3JpZ2luYWwpCisJOyB6NSA9ICh6MyArIHo0KSAqIDEuMTc1ODc1NjAyOworCTsgejMgPSB6MyAqIC0xLjk2MTU3MDU2MDsgIHo0ID0gejQgKiAtMC4zOTAxODA2NDQ7CisJOyB6MyArPSB6NTsgIHo0ICs9IHo1OworCTsKKwk7IChUaGlzIGltcGxlbWVudGF0aW9uKQorCTsgejMgPSB6MyAqICgxLjE3NTg3NTYwMiAtIDEuOTYxNTcwNTYwKSArIHo0ICogMS4xNzU4NzU2MDI7CisJOyB6NCA9IHozICogMS4xNzU4NzU2MDIgKyB6NCAqICgxLjE3NTg3NTYwMiAtIDAuMzkwMTgwNjQ0KTsKKworCW1vdmRxYSAgICB4bW0wLHhtbTUKKwltb3ZkcWEgICAgeG1tNyx4bW01CisJcHVucGNrbHdkIHhtbTAseG1tNAorCXB1bnBja2h3ZCB4bW03LHhtbTQKKwltb3ZkcWEgICAgeG1tNSx4bW0wCisJbW92ZHFhICAgIHhtbTQseG1tNworCXBtYWRkd2QgICB4bW0wLFtyZWwgUFdfTUYwNzhfRjExN10JOyB4bW0wPXozTAorCXBtYWRkd2QgICB4bW03LFtyZWwgUFdfTUYwNzhfRjExN10JOyB4bW03PXozSAorCXBtYWRkd2QgICB4bW01LFtyZWwgUFdfRjExN19GMDc4XQk7IHhtbTU9ejRMCisJcG1hZGR3ZCAgIHhtbTQsW3JlbCBQV19GMTE3X0YwNzhdCTsgeG1tND16NEgKKworCW1vdmRxYQlYTU1XT1JEIFt3aygxMCldLCB4bW0wCTsgd2soMTApPXozTAorCW1vdmRxYQlYTU1XT1JEIFt3aygxMSldLCB4bW03CTsgd2soMTEpPXozSAorCisJOyAoT3JpZ2luYWwpCisJOyB6MSA9IHRtcDAgKyB0bXAzOyAgejIgPSB0bXAxICsgdG1wMjsKKwk7IHRtcDAgPSB0bXAwICogMC4yOTg2MzEzMzY7ICB0bXAxID0gdG1wMSAqIDIuMDUzMTE5ODY5OworCTsgdG1wMiA9IHRtcDIgKiAzLjA3MjcxMTAyNjsgIHRtcDMgPSB0bXAzICogMS41MDEzMjExMTA7CisJOyB6MSA9IHoxICogLTAuODk5OTc2MjIzOyAgejIgPSB6MiAqIC0yLjU2MjkxNTQ0NzsKKwk7IHRtcDAgKz0gejEgKyB6MzsgIHRtcDEgKz0gejIgKyB6NDsKKwk7IHRtcDIgKz0gejIgKyB6MzsgIHRtcDMgKz0gejEgKyB6NDsKKwk7CisJOyAoVGhpcyBpbXBsZW1lbnRhdGlvbikKKwk7IHRtcDAgPSB0bXAwICogKDAuMjk4NjMxMzM2IC0gMC44OTk5NzYyMjMpICsgdG1wMyAqIC0wLjg5OTk3NjIyMzsKKwk7IHRtcDEgPSB0bXAxICogKDIuMDUzMTE5ODY5IC0gMi41NjI5MTU0NDcpICsgdG1wMiAqIC0yLjU2MjkxNTQ0NzsKKwk7IHRtcDIgPSB0bXAxICogLTIuNTYyOTE1NDQ3ICsgdG1wMiAqICgzLjA3MjcxMTAyNiAtIDIuNTYyOTE1NDQ3KTsKKwk7IHRtcDMgPSB0bXAwICogLTAuODk5OTc2MjIzICsgdG1wMyAqICgxLjUwMTMyMTExMCAtIDAuODk5OTc2MjIzKTsKKwk7IHRtcDAgKz0gejM7ICB0bXAxICs9IHo0OworCTsgdG1wMiArPSB6MzsgIHRtcDMgKz0gejQ7CisKKwltb3ZkcWEgICAgeG1tMCx4bW0xCisJbW92ZHFhICAgIHhtbTcseG1tMQorCXB1bnBja2x3ZCB4bW0wLHhtbTMKKwlwdW5wY2tod2QgeG1tNyx4bW0zCisJbW92ZHFhICAgIHhtbTEseG1tMAorCW1vdmRxYSAgICB4bW0zLHhtbTcKKwlwbWFkZHdkICAgeG1tMCxbcmVsIFBXX01GMDYwX01GMDg5XQk7IHhtbTA9dG1wMEwKKwlwbWFkZHdkICAgeG1tNyxbcmVsIFBXX01GMDYwX01GMDg5XQk7IHhtbTc9dG1wMEgKKwlwbWFkZHdkICAgeG1tMSxbcmVsIFBXX01GMDg5X0YwNjBdCTsgeG1tMT10bXAzTAorCXBtYWRkd2QgICB4bW0zLFtyZWwgUFdfTUYwODlfRjA2MF0JOyB4bW0zPXRtcDNICisKKwlwYWRkZAl4bW0wLCBYTU1XT1JEIFt3aygxMCldCTsgeG1tMD10bXAwTAorCXBhZGRkCXhtbTcsIFhNTVdPUkQgW3drKDExKV0JOyB4bW03PXRtcDBICisJcGFkZGQJeG1tMSx4bW01CQk7IHhtbTE9dG1wM0wKKwlwYWRkZAl4bW0zLHhtbTQJCTsgeG1tMz10bXAzSAorCisJbW92ZHFhCVhNTVdPUkQgW3drKDgpXSwgeG1tMAk7IHdrKDgpPXRtcDBMCisJbW92ZHFhCVhNTVdPUkQgW3drKDkpXSwgeG1tNwk7IHdrKDkpPXRtcDBICisKKwltb3ZkcWEgICAgeG1tMCx4bW0yCisJbW92ZHFhICAgIHhtbTcseG1tMgorCXB1bnBja2x3ZCB4bW0wLHhtbTYKKwlwdW5wY2tod2QgeG1tNyx4bW02CisJbW92ZHFhICAgIHhtbTIseG1tMAorCW1vdmRxYSAgICB4bW02LHhtbTcKKwlwbWFkZHdkICAgeG1tMCxbcmVsIFBXX01GMDUwX01GMjU2XQk7IHhtbTA9dG1wMUwKKwlwbWFkZHdkICAgeG1tNyxbcmVsIFBXX01GMDUwX01GMjU2XQk7IHhtbTc9dG1wMUgKKwlwbWFkZHdkICAgeG1tMixbcmVsIFBXX01GMjU2X0YwNTBdCTsgeG1tMj10bXAyTAorCXBtYWRkd2QgICB4bW02LFtyZWwgUFdfTUYyNTZfRjA1MF0JOyB4bW02PXRtcDJICisKKwlwYWRkZAl4bW0wLHhtbTUJCTsgeG1tMD10bXAxTAorCXBhZGRkCXhtbTcseG1tNAkJOyB4bW03PXRtcDFICisJcGFkZGQJeG1tMiwgWE1NV09SRCBbd2soMTApXQk7IHhtbTI9dG1wMkwKKwlwYWRkZAl4bW02LCBYTU1XT1JEIFt3aygxMSldCTsgeG1tNj10bXAySAorCisJbW92ZHFhCVhNTVdPUkQgW3drKDEwKV0sIHhtbTAJOyB3aygxMCk9dG1wMUwKKwltb3ZkcWEJWE1NV09SRCBbd2soMTEpXSwgeG1tNwk7IHdrKDExKT10bXAxSAorCisJOyAtLSBGaW5hbCBvdXRwdXQgc3RhZ2UKKworCW1vdmRxYQl4bW01LCBYTU1XT1JEIFt3aygwKV0JOyB4bW01PXRtcDEwTAorCW1vdmRxYQl4bW00LCBYTU1XT1JEIFt3aygxKV0JOyB4bW00PXRtcDEwSAorCisJbW92ZHFhCXhtbTAseG1tNQorCW1vdmRxYQl4bW03LHhtbTQKKwlwYWRkZAl4bW01LHhtbTEJCTsgeG1tNT1kYXRhMEwKKwlwYWRkZAl4bW00LHhtbTMJCTsgeG1tND1kYXRhMEgKKwlwc3ViZAl4bW0wLHhtbTEJCTsgeG1tMD1kYXRhN0wKKwlwc3ViZAl4bW03LHhtbTMJCTsgeG1tNz1kYXRhN0gKKworCW1vdmRxYQl4bW0xLFtyZWwgUERfREVTQ0FMRV9QMl0JOyB4bW0xPVtyZWwgUERfREVTQ0FMRV9QMl0KKworCXBhZGRkCXhtbTUseG1tMQorCXBhZGRkCXhtbTQseG1tMQorCXBzcmFkCXhtbTUsREVTQ0FMRV9QMgorCXBzcmFkCXhtbTQsREVTQ0FMRV9QMgorCXBhZGRkCXhtbTAseG1tMQorCXBhZGRkCXhtbTcseG1tMQorCXBzcmFkCXhtbTAsREVTQ0FMRV9QMgorCXBzcmFkCXhtbTcsREVTQ0FMRV9QMgorCisJcGFja3NzZHcgIHhtbTUseG1tNAkJOyB4bW01PWRhdGEwPSgwMCAxMCAyMCAzMCA0MCA1MCA2MCA3MCkKKwlwYWNrc3NkdyAgeG1tMCx4bW03CQk7IHhtbTA9ZGF0YTc9KDA3IDE3IDI3IDM3IDQ3IDU3IDY3IDc3KQorCisJbW92ZHFhCXhtbTMsIFhNTVdPUkQgW3drKDQpXQk7IHhtbTM9dG1wMTFMCisJbW92ZHFhCXhtbTEsIFhNTVdPUkQgW3drKDUpXQk7IHhtbTE9dG1wMTFICisKKwltb3ZkcWEJeG1tNCx4bW0zCisJbW92ZHFhCXhtbTcseG1tMQorCXBhZGRkCXhtbTMseG1tMgkJOyB4bW0zPWRhdGExTAorCXBhZGRkCXhtbTEseG1tNgkJOyB4bW0xPWRhdGExSAorCXBzdWJkCXhtbTQseG1tMgkJOyB4bW00PWRhdGE2TAorCXBzdWJkCXhtbTcseG1tNgkJOyB4bW03PWRhdGE2SAorCisJbW92ZHFhCXhtbTIsW3JlbCBQRF9ERVNDQUxFX1AyXQk7IHhtbTI9W3JlbCBQRF9ERVNDQUxFX1AyXQorCisJcGFkZGQJeG1tMyx4bW0yCisJcGFkZGQJeG1tMSx4bW0yCisJcHNyYWQJeG1tMyxERVNDQUxFX1AyCisJcHNyYWQJeG1tMSxERVNDQUxFX1AyCisJcGFkZGQJeG1tNCx4bW0yCisJcGFkZGQJeG1tNyx4bW0yCisJcHNyYWQJeG1tNCxERVNDQUxFX1AyCisJcHNyYWQJeG1tNyxERVNDQUxFX1AyCisKKwlwYWNrc3NkdyAgeG1tMyx4bW0xCQk7IHhtbTM9ZGF0YTE9KDAxIDExIDIxIDMxIDQxIDUxIDYxIDcxKQorCXBhY2tzc2R3ICB4bW00LHhtbTcJCTsgeG1tND1kYXRhNj0oMDYgMTYgMjYgMzYgNDYgNTYgNjYgNzYpCisKKwlwYWNrc3N3YiAgeG1tNSx4bW00CQk7IHhtbTU9KDAwIDEwIDIwIDMwIDQwIDUwIDYwIDcwIDA2IDE2IDI2IDM2IDQ2IDU2IDY2IDc2KQorCXBhY2tzc3diICB4bW0zLHhtbTAJCTsgeG1tMz0oMDEgMTEgMjEgMzEgNDEgNTEgNjEgNzEgMDcgMTcgMjcgMzcgNDcgNTcgNjcgNzcpCisKKwltb3ZkcWEJeG1tNiwgWE1NV09SRCBbd2soNildCTsgeG1tNj10bXAxMkwKKwltb3ZkcWEJeG1tMiwgWE1NV09SRCBbd2soNyldCTsgeG1tMj10bXAxMkgKKwltb3ZkcWEJeG1tMSwgWE1NV09SRCBbd2soMTApXQk7IHhtbTE9dG1wMUwKKwltb3ZkcWEJeG1tNywgWE1NV09SRCBbd2soMTEpXQk7IHhtbTc9dG1wMUgKKworCW1vdmRxYQlYTU1XT1JEIFt3aygwKV0sIHhtbTUJOyB3aygwKT0oMDAgMTAgMjAgMzAgNDAgNTAgNjAgNzAgMDYgMTYgMjYgMzYgNDYgNTYgNjYgNzYpCisJbW92ZHFhCVhNTVdPUkQgW3drKDEpXSwgeG1tMwk7IHdrKDEpPSgwMSAxMSAyMSAzMSA0MSA1MSA2MSA3MSAwNyAxNyAyNyAzNyA0NyA1NyA2NyA3NykKKworCW1vdmRxYQl4bW00LHhtbTYKKwltb3ZkcWEJeG1tMCx4bW0yCisJcGFkZGQJeG1tNix4bW0xCQk7IHhtbTY9ZGF0YTJMCisJcGFkZGQJeG1tMix4bW03CQk7IHhtbTI9ZGF0YTJICisJcHN1YmQJeG1tNCx4bW0xCQk7IHhtbTQ9ZGF0YTVMCisJcHN1YmQJeG1tMCx4bW03CQk7IHhtbTA9ZGF0YTVICisKKwltb3ZkcWEJeG1tNSxbcmVsIFBEX0RFU0NBTEVfUDJdCTsgeG1tNT1bcmVsIFBEX0RFU0NBTEVfUDJdCisKKwlwYWRkZAl4bW02LHhtbTUKKwlwYWRkZAl4bW0yLHhtbTUKKwlwc3JhZAl4bW02LERFU0NBTEVfUDIKKwlwc3JhZAl4bW0yLERFU0NBTEVfUDIKKwlwYWRkZAl4bW00LHhtbTUKKwlwYWRkZAl4bW0wLHhtbTUKKwlwc3JhZAl4bW00LERFU0NBTEVfUDIKKwlwc3JhZAl4bW0wLERFU0NBTEVfUDIKKworCXBhY2tzc2R3ICB4bW02LHhtbTIJCTsgeG1tNj1kYXRhMj0oMDIgMTIgMjIgMzIgNDIgNTIgNjIgNzIpCisJcGFja3NzZHcgIHhtbTQseG1tMAkJOyB4bW00PWRhdGE1PSgwNSAxNSAyNSAzNSA0NSA1NSA2NSA3NSkKKworCW1vdmRxYQl4bW0zLCBYTU1XT1JEIFt3aygyKV0JOyB4bW0zPXRtcDEzTAorCW1vdmRxYQl4bW0xLCBYTU1XT1JEIFt3aygzKV0JOyB4bW0xPXRtcDEzSAorCW1vdmRxYQl4bW03LCBYTU1XT1JEIFt3ayg4KV0JOyB4bW03PXRtcDBMCisJbW92ZHFhCXhtbTUsIFhNTVdPUkQgW3drKDkpXQk7IHhtbTU9dG1wMEgKKworCW1vdmRxYQl4bW0yLHhtbTMKKwltb3ZkcWEJeG1tMCx4bW0xCisJcGFkZGQJeG1tMyx4bW03CQk7IHhtbTM9ZGF0YTNMCisJcGFkZGQJeG1tMSx4bW01CQk7IHhtbTE9ZGF0YTNICisJcHN1YmQJeG1tMix4bW03CQk7IHhtbTI9ZGF0YTRMCisJcHN1YmQJeG1tMCx4bW01CQk7IHhtbTA9ZGF0YTRICisKKwltb3ZkcWEJeG1tNyxbcmVsIFBEX0RFU0NBTEVfUDJdCTsgeG1tNz1bcmVsIFBEX0RFU0NBTEVfUDJdCisKKwlwYWRkZAl4bW0zLHhtbTcKKwlwYWRkZAl4bW0xLHhtbTcKKwlwc3JhZAl4bW0zLERFU0NBTEVfUDIKKwlwc3JhZAl4bW0xLERFU0NBTEVfUDIKKwlwYWRkZAl4bW0yLHhtbTcKKwlwYWRkZAl4bW0wLHhtbTcKKwlwc3JhZAl4bW0yLERFU0NBTEVfUDIKKwlwc3JhZAl4bW0wLERFU0NBTEVfUDIKKworCW1vdmRxYSAgICB4bW01LFtyZWwgUEJfQ0VOVEVSSlNBTVBdCTsgeG1tNT1bcmVsIFBCX0NFTlRFUkpTQU1QXQorCisJcGFja3NzZHcgIHhtbTMseG1tMQkJOyB4bW0zPWRhdGEzPSgwMyAxMyAyMyAzMyA0MyA1MyA2MyA3MykKKwlwYWNrc3NkdyAgeG1tMix4bW0wCQk7IHhtbTI9ZGF0YTQ9KDA0IDE0IDI0IDM0IDQ0IDU0IDY0IDc0KQorCisJbW92ZHFhICAgIHhtbTcsIFhNTVdPUkQgW3drKDApXQk7IHhtbTc9KDAwIDEwIDIwIDMwIDQwIDUwIDYwIDcwIDA2IDE2IDI2IDM2IDQ2IDU2IDY2IDc2KQorCW1vdmRxYSAgICB4bW0xLCBYTU1XT1JEIFt3aygxKV0JOyB4bW0xPSgwMSAxMSAyMSAzMSA0MSA1MSA2MSA3MSAwNyAxNyAyNyAzNyA0NyA1NyA2NyA3NykKKworCXBhY2tzc3diICB4bW02LHhtbTIJCTsgeG1tNj0oMDIgMTIgMjIgMzIgNDIgNTIgNjIgNzIgMDQgMTQgMjQgMzQgNDQgNTQgNjQgNzQpCisJcGFja3Nzd2IgIHhtbTMseG1tNAkJOyB4bW0zPSgwMyAxMyAyMyAzMyA0MyA1MyA2MyA3MyAwNSAxNSAyNSAzNSA0NSA1NSA2NSA3NSkKKworCXBhZGRiICAgICB4bW03LHhtbTUKKwlwYWRkYiAgICAgeG1tMSx4bW01CisJcGFkZGIgICAgIHhtbTYseG1tNQorCXBhZGRiICAgICB4bW0zLHhtbTUKKworCW1vdmRxYSAgICB4bW0wLHhtbTcJOyB0cmFuc3Bvc2UgY29lZmZpY2llbnRzKHBoYXNlIDEpCisJcHVucGNrbGJ3IHhtbTcseG1tMQk7IHhtbTc9KDAwIDAxIDEwIDExIDIwIDIxIDMwIDMxIDQwIDQxIDUwIDUxIDYwIDYxIDcwIDcxKQorCXB1bnBja2hidyB4bW0wLHhtbTEJOyB4bW0wPSgwNiAwNyAxNiAxNyAyNiAyNyAzNiAzNyA0NiA0NyA1NiA1NyA2NiA2NyA3NiA3NykKKwltb3ZkcWEgICAgeG1tMix4bW02CTsgdHJhbnNwb3NlIGNvZWZmaWNpZW50cyhwaGFzZSAxKQorCXB1bnBja2xidyB4bW02LHhtbTMJOyB4bW02PSgwMiAwMyAxMiAxMyAyMiAyMyAzMiAzMyA0MiA0MyA1MiA1MyA2MiA2MyA3MiA3MykKKwlwdW5wY2toYncgeG1tMix4bW0zCTsgeG1tMj0oMDQgMDUgMTQgMTUgMjQgMjUgMzQgMzUgNDQgNDUgNTQgNTUgNjQgNjUgNzQgNzUpCisKKwltb3ZkcWEgICAgeG1tNCx4bW03CTsgdHJhbnNwb3NlIGNvZWZmaWNpZW50cyhwaGFzZSAyKQorCXB1bnBja2x3ZCB4bW03LHhtbTYJOyB4bW03PSgwMCAwMSAwMiAwMyAxMCAxMSAxMiAxMyAyMCAyMSAyMiAyMyAzMCAzMSAzMiAzMykKKwlwdW5wY2tod2QgeG1tNCx4bW02CTsgeG1tND0oNDAgNDEgNDIgNDMgNTAgNTEgNTIgNTMgNjAgNjEgNjIgNjMgNzAgNzEgNzIgNzMpCisJbW92ZHFhICAgIHhtbTUseG1tMgk7IHRyYW5zcG9zZSBjb2VmZmljaWVudHMocGhhc2UgMikKKwlwdW5wY2tsd2QgeG1tMix4bW0wCTsgeG1tMj0oMDQgMDUgMDYgMDcgMTQgMTUgMTYgMTcgMjQgMjUgMjYgMjcgMzQgMzUgMzYgMzcpCisJcHVucGNraHdkIHhtbTUseG1tMAk7IHhtbTU9KDQ0IDQ1IDQ2IDQ3IDU0IDU1IDU2IDU3IDY0IDY1IDY2IDY3IDc0IDc1IDc2IDc3KQorCisJbW92ZHFhICAgIHhtbTEseG1tNwk7IHRyYW5zcG9zZSBjb2VmZmljaWVudHMocGhhc2UgMykKKwlwdW5wY2tsZHEgeG1tNyx4bW0yCTsgeG1tNz0oMDAgMDEgMDIgMDMgMDQgMDUgMDYgMDcgMTAgMTEgMTIgMTMgMTQgMTUgMTYgMTcpCisJcHVucGNraGRxIHhtbTEseG1tMgk7IHhtbTE9KDIwIDIxIDIyIDIzIDI0IDI1IDI2IDI3IDMwIDMxIDMyIDMzIDM0IDM1IDM2IDM3KQorCW1vdmRxYSAgICB4bW0zLHhtbTQJOyB0cmFuc3Bvc2UgY29lZmZpY2llbnRzKHBoYXNlIDMpCisJcHVucGNrbGRxIHhtbTQseG1tNQk7IHhtbTQ9KDQwIDQxIDQyIDQzIDQ0IDQ1IDQ2IDQ3IDUwIDUxIDUyIDUzIDU0IDU1IDU2IDU3KQorCXB1bnBja2hkcSB4bW0zLHhtbTUJOyB4bW0zPSg2MCA2MSA2MiA2MyA2NCA2NSA2NiA2NyA3MCA3MSA3MiA3MyA3NCA3NSA3NiA3NykKKworCXBzaHVmZAl4bW02LHhtbTcsMHg0RQk7IHhtbTY9KDEwIDExIDEyIDEzIDE0IDE1IDE2IDE3IDAwIDAxIDAyIDAzIDA0IDA1IDA2IDA3KQorCXBzaHVmZAl4bW0wLHhtbTEsMHg0RQk7IHhtbTA9KDMwIDMxIDMyIDMzIDM0IDM1IDM2IDM3IDIwIDIxIDIyIDIzIDI0IDI1IDI2IDI3KQorCXBzaHVmZAl4bW0yLHhtbTQsMHg0RQk7IHhtbTI9KDUwIDUxIDUyIDUzIDU0IDU1IDU2IDU3IDQwIDQxIDQyIDQzIDQ0IDQ1IDQ2IDQ3KQorCXBzaHVmZAl4bW01LHhtbTMsMHg0RQk7IHhtbTU9KDcwIDcxIDcyIDczIDc0IDc1IDc2IDc3IDYwIDYxIDYyIDYzIDY0IDY1IDY2IDY3KQorCisJbW92CXJkeCwgSlNBTVBST1cgW3JkaSswKlNJWkVPRl9KU0FNUFJPV10KKwltb3YJcnNpLCBKU0FNUFJPVyBbcmRpKzIqU0laRU9GX0pTQU1QUk9XXQorCW1vdnEJWE1NX01NV09SRCBbcmR4K3JheCpTSVpFT0ZfSlNBTVBMRV0sIHhtbTcKKwltb3ZxCVhNTV9NTVdPUkQgW3JzaStyYXgqU0laRU9GX0pTQU1QTEVdLCB4bW0xCisJbW92CXJkeCwgSlNBTVBST1cgW3JkaSs0KlNJWkVPRl9KU0FNUFJPV10KKwltb3YJcnNpLCBKU0FNUFJPVyBbcmRpKzYqU0laRU9GX0pTQU1QUk9XXQorCW1vdnEJWE1NX01NV09SRCBbcmR4K3JheCpTSVpFT0ZfSlNBTVBMRV0sIHhtbTQKKwltb3ZxCVhNTV9NTVdPUkQgW3JzaStyYXgqU0laRU9GX0pTQU1QTEVdLCB4bW0zCisKKwltb3YJcmR4LCBKU0FNUFJPVyBbcmRpKzEqU0laRU9GX0pTQU1QUk9XXQorCW1vdglyc2ksIEpTQU1QUk9XIFtyZGkrMypTSVpFT0ZfSlNBTVBST1ddCisJbW92cQlYTU1fTU1XT1JEIFtyZHgrcmF4KlNJWkVPRl9KU0FNUExFXSwgeG1tNgorCW1vdnEJWE1NX01NV09SRCBbcnNpK3JheCpTSVpFT0ZfSlNBTVBMRV0sIHhtbTAKKwltb3YJcmR4LCBKU0FNUFJPVyBbcmRpKzUqU0laRU9GX0pTQU1QUk9XXQorCW1vdglyc2ksIEpTQU1QUk9XIFtyZGkrNypTSVpFT0ZfSlNBTVBST1ddCisJbW92cQlYTU1fTU1XT1JEIFtyZHgrcmF4KlNJWkVPRl9KU0FNUExFXSwgeG1tMgorCW1vdnEJWE1NX01NV09SRCBbcnNpK3JheCpTSVpFT0ZfSlNBTVBMRV0sIHhtbTUKKworCXVuY29sbGVjdF9hcmdzCisJbW92CXJzcCxyYnAJCTsgcnNwIDwtIGFsaWduZWQgcmJwCisJcG9wCXJzcAkJOyByc3AgPC0gb3JpZ2luYWwgcmJwCisJcG9wCXJicAorCXJldAorCis7IEZvciBzb21lIHJlYXNvbiwgdGhlIE9TIFggbGlua2VyIGRvZXMgbm90IGhvbm9yIHRoZSByZXF1ZXN0IHRvIGFsaWduIHRoZQorOyBzZWdtZW50IHVubGVzcyB3ZSBkbyB0aGlzLgorCWFsaWduCTE2CmRpZmYgLS1naXQgYS9zaW1kL2ppc3MyaW50LmFzbSBiL3NpbWQvamlzczJpbnQuYXNtCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmFkZjM5ZmIKLS0tIC9kZXYvbnVsbAorKysgYi9zaW1kL2ppc3MyaW50LmFzbQpAQCAtMCwwICsxLDg1OSBAQAorOworOyBqaXNzMmludC5hc20gLSBhY2N1cmF0ZSBpbnRlZ2VyIElEQ1QgKFNTRTIpCis7Cis7IENvcHlyaWdodCAyMDA5IFBpZXJyZSBPc3NtYW4gPG9zc21hbkBjZW5kaW8uc2U+IGZvciBDZW5kaW8gQUIKKzsKKzsgQmFzZWQgb24KKzsgeDg2IFNJTUQgZXh0ZW5zaW9uIGZvciBJSkcgSlBFRyBsaWJyYXJ5Cis7IENvcHlyaWdodCAoQykgMTk5OS0yMDA2LCBNSVlBU0FLQSBNYXNhcnUuCis7IEZvciBjb25kaXRpb25zIG9mIGRpc3RyaWJ1dGlvbiBhbmQgdXNlLCBzZWUgY29weXJpZ2h0IG5vdGljZSBpbiBqc2ltZGV4dC5pbmMKKzsKKzsgVGhpcyBmaWxlIHNob3VsZCBiZSBhc3NlbWJsZWQgd2l0aCBOQVNNIChOZXR3aWRlIEFzc2VtYmxlciksCis7IGNhbiAqbm90KiBiZSBhc3NlbWJsZWQgd2l0aCBNaWNyb3NvZnQncyBNQVNNIG9yIGFueSBjb21wYXRpYmxlCis7IGFzc2VtYmxlciAoaW5jbHVkaW5nIEJvcmxhbmQncyBUdXJibyBBc3NlbWJsZXIpLgorOyBOQVNNIGlzIGF2YWlsYWJsZSBmcm9tIGh0dHA6Ly9uYXNtLnNvdXJjZWZvcmdlLm5ldC8gb3IKKzsgaHR0cDovL3NvdXJjZWZvcmdlLm5ldC9wcm9qZWN0L3Nob3dmaWxlcy5waHA/Z3JvdXBfaWQ9NjIwOAorOworOyBUaGlzIGZpbGUgY29udGFpbnMgYSBzbG93LWJ1dC1hY2N1cmF0ZSBpbnRlZ2VyIGltcGxlbWVudGF0aW9uIG9mIHRoZQorOyBpbnZlcnNlIERDVCAoRGlzY3JldGUgQ29zaW5lIFRyYW5zZm9ybSkuIFRoZSBmb2xsb3dpbmcgY29kZSBpcyBiYXNlZAorOyBkaXJlY3RseSBvbiB0aGUgSUpHJ3Mgb3JpZ2luYWwgamlkY3RpbnQuYzsgc2VlIHRoZSBqaWRjdGludC5jIGZvcgorOyBtb3JlIGRldGFpbHMuCis7Cis7IFtUQUI4XQorCislaW5jbHVkZSAianNpbWRleHQuaW5jIgorJWluY2x1ZGUgImpkY3QuaW5jIgorCis7IC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKyVkZWZpbmUgQ09OU1RfQklUUwkxMworJWRlZmluZSBQQVNTMV9CSVRTCTIKKworJWRlZmluZSBERVNDQUxFX1AxCShDT05TVF9CSVRTLVBBU1MxX0JJVFMpCislZGVmaW5lIERFU0NBTEVfUDIJKENPTlNUX0JJVFMrUEFTUzFfQklUUyszKQorCislaWYgQ09OU1RfQklUUyA9PSAxMworRl8wXzI5OAllcXUJIDI0NDYJCTsgRklYKDAuMjk4NjMxMzM2KQorRl8wXzM5MAllcXUJIDMxOTYJCTsgRklYKDAuMzkwMTgwNjQ0KQorRl8wXzU0MQllcXUJIDQ0MzMJCTsgRklYKDAuNTQxMTk2MTAwKQorRl8wXzc2NQllcXUJIDYyNzAJCTsgRklYKDAuNzY1MzY2ODY1KQorRl8wXzg5OQllcXUJIDczNzMJCTsgRklYKDAuODk5OTc2MjIzKQorRl8xXzE3NQllcXUJIDk2MzMJCTsgRklYKDEuMTc1ODc1NjAyKQorRl8xXzUwMQllcXUJMTIyOTkJCTsgRklYKDEuNTAxMzIxMTEwKQorRl8xXzg0NwllcXUJMTUxMzcJCTsgRklYKDEuODQ3NzU5MDY1KQorRl8xXzk2MQllcXUJMTYwNjkJCTsgRklYKDEuOTYxNTcwNTYwKQorRl8yXzA1MwllcXUJMTY4MTkJCTsgRklYKDIuMDUzMTE5ODY5KQorRl8yXzU2MgllcXUJMjA5OTUJCTsgRklYKDIuNTYyOTE1NDQ3KQorRl8zXzA3MgllcXUJMjUxNzIJCTsgRklYKDMuMDcyNzExMDI2KQorJWVsc2UKKzsgTkFTTSBjYW5ub3QgZG8gY29tcGlsZS10aW1lIGFyaXRobWV0aWMgb24gZmxvYXRpbmctcG9pbnQgY29uc3RhbnRzLgorJWRlZmluZSBERVNDQUxFKHgsbikgICgoKHgpKygxPDwoKG4pLTEpKSk+PihuKSkKK0ZfMF8yOTgJZXF1CURFU0NBTEUoIDMyMDY1Mjk1NSwzMC1DT05TVF9CSVRTKQk7IEZJWCgwLjI5ODYzMTMzNikKK0ZfMF8zOTAJZXF1CURFU0NBTEUoIDQxODk1MzI3NiwzMC1DT05TVF9CSVRTKQk7IEZJWCgwLjM5MDE4MDY0NCkKK0ZfMF81NDEJZXF1CURFU0NBTEUoIDU4MTEwNDg4NywzMC1DT05TVF9CSVRTKQk7IEZJWCgwLjU0MTE5NjEwMCkKK0ZfMF83NjUJZXF1CURFU0NBTEUoIDgyMTgwNjQxMywzMC1DT05TVF9CSVRTKQk7IEZJWCgwLjc2NTM2Njg2NSkKK0ZfMF84OTkJZXF1CURFU0NBTEUoIDk2NjM0MjExMSwzMC1DT05TVF9CSVRTKQk7IEZJWCgwLjg5OTk3NjIyMykKK0ZfMV8xNzUJZXF1CURFU0NBTEUoMTI2MjU4NjgxMywzMC1DT05TVF9CSVRTKQk7IEZJWCgxLjE3NTg3NTYwMikKK0ZfMV81MDEJZXF1CURFU0NBTEUoMTYxMjAzMTI2NywzMC1DT05TVF9CSVRTKQk7IEZJWCgxLjUwMTMyMTExMCkKK0ZfMV84NDcJZXF1CURFU0NBTEUoMTk4NDAxNjE4OCwzMC1DT05TVF9CSVRTKQk7IEZJWCgxLjg0Nzc1OTA2NSkKK0ZfMV85NjEJZXF1CURFU0NBTEUoMjEwNjIyMDM1MCwzMC1DT05TVF9CSVRTKQk7IEZJWCgxLjk2MTU3MDU2MCkKK0ZfMl8wNTMJZXF1CURFU0NBTEUoMjIwNDUyMDY3MywzMC1DT05TVF9CSVRTKQk7IEZJWCgyLjA1MzExOTg2OSkKK0ZfMl81NjIJZXF1CURFU0NBTEUoMjc1MTkwOTUwNiwzMC1DT05TVF9CSVRTKQk7IEZJWCgyLjU2MjkxNTQ0NykKK0ZfM18wNzIJZXF1CURFU0NBTEUoMzI5OTI5ODM0MSwzMC1DT05TVF9CSVRTKQk7IEZJWCgzLjA3MjcxMTAyNikKKyVlbmRpZgorCis7IC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisJU0VDVElPTglTRUdfQ09OU1QKKworCWFsaWduegkxNgorCWdsb2JhbAlFWFROKGpjb25zdF9pZGN0X2lzbG93X3NzZTIpCisKK0VYVE4oamNvbnN0X2lkY3RfaXNsb3dfc3NlMik6CisKK1BXX0YxMzBfRjA1NAl0aW1lcyA0IGR3ICAoRl8wXzU0MStGXzBfNzY1KSwgRl8wXzU0MQorUFdfRjA1NF9NRjEzMAl0aW1lcyA0IGR3ICBGXzBfNTQxLCAoRl8wXzU0MS1GXzFfODQ3KQorUFdfTUYwNzhfRjExNwl0aW1lcyA0IGR3ICAoRl8xXzE3NS1GXzFfOTYxKSwgRl8xXzE3NQorUFdfRjExN19GMDc4CXRpbWVzIDQgZHcgIEZfMV8xNzUsIChGXzFfMTc1LUZfMF8zOTApCitQV19NRjA2MF9NRjA4OQl0aW1lcyA0IGR3ICAoRl8wXzI5OC1GXzBfODk5KSwtRl8wXzg5OQorUFdfTUYwODlfRjA2MAl0aW1lcyA0IGR3IC1GXzBfODk5LCAoRl8xXzUwMS1GXzBfODk5KQorUFdfTUYwNTBfTUYyNTYJdGltZXMgNCBkdyAgKEZfMl8wNTMtRl8yXzU2MiksLUZfMl81NjIKK1BXX01GMjU2X0YwNTAJdGltZXMgNCBkdyAtRl8yXzU2MiwgKEZfM18wNzItRl8yXzU2MikKK1BEX0RFU0NBTEVfUDEJdGltZXMgNCBkZCAgMSA8PCAoREVTQ0FMRV9QMS0xKQorUERfREVTQ0FMRV9QMgl0aW1lcyA0IGRkICAxIDw8IChERVNDQUxFX1AyLTEpCitQQl9DRU5URVJKU0FNUAl0aW1lcyAxNiBkYiBDRU5URVJKU0FNUExFCisKKwlhbGlnbnoJMTYKKworOyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCVNFQ1RJT04JU0VHX1RFWFQKKwlCSVRTCTMyCis7Cis7IFBlcmZvcm0gZGVxdWFudGl6YXRpb24gYW5kIGludmVyc2UgRENUIG9uIG9uZSBibG9jayBvZiBjb2VmZmljaWVudHMuCis7Cis7IEdMT0JBTCh2b2lkKQorOyBqc2ltZF9pZGN0X2lzbG93X3NzZTIgKHZvaWQgKiBkY3RfdGFibGUsIEpDT0VGUFRSIGNvZWZfYmxvY2ssCis7ICAgICAgICAgICAgICAgICAgICAgICAgSlNBTVBBUlJBWSBvdXRwdXRfYnVmLCBKRElNRU5TSU9OIG91dHB1dF9jb2wpCis7CisKKyVkZWZpbmUgZGN0X3RhYmxlKGIpCShiKSs4CQkJOyBqcGVnX2NvbXBvbmVudF9pbmZvICogY29tcHB0cgorJWRlZmluZSBjb2VmX2Jsb2NrKGIpCShiKSsxMgkJOyBKQ09FRlBUUiBjb2VmX2Jsb2NrCislZGVmaW5lIG91dHB1dF9idWYoYikJKGIpKzE2CQk7IEpTQU1QQVJSQVkgb3V0cHV0X2J1ZgorJWRlZmluZSBvdXRwdXRfY29sKGIpCShiKSsyMAkJOyBKRElNRU5TSU9OIG91dHB1dF9jb2wKKworJWRlZmluZSBvcmlnaW5hbF9lYnAJZWJwKzAKKyVkZWZpbmUgd2soaSkJCWVicC0oV0tfTlVNLShpKSkqU0laRU9GX1hNTVdPUkQJOyB4bW13b3JkIHdrW1dLX05VTV0KKyVkZWZpbmUgV0tfTlVNCQkxMgorCisJYWxpZ24JMTYKKwlnbG9iYWwJRVhUTihqc2ltZF9pZGN0X2lzbG93X3NzZTIpCisKK0VYVE4oanNpbWRfaWRjdF9pc2xvd19zc2UyKToKKwlwdXNoCWVicAorCW1vdgllYXgsZXNwCQkJCTsgZWF4ID0gb3JpZ2luYWwgZWJwCisJc3ViCWVzcCwgYnl0ZSA0CisJYW5kCWVzcCwgYnl0ZSAoLVNJWkVPRl9YTU1XT1JEKQk7IGFsaWduIHRvIDEyOCBiaXRzCisJbW92CVtlc3BdLGVheAorCW1vdgllYnAsZXNwCQkJCTsgZWJwID0gYWxpZ25lZCBlYnAKKwlsZWEJZXNwLCBbd2soMCldCisJcHVzaHBpYwllYngKKzsJcHVzaAllY3gJCTsgdW51c2VkCis7CXB1c2gJZWR4CQk7IG5lZWQgbm90IGJlIHByZXNlcnZlZAorCXB1c2gJZXNpCisJcHVzaAllZGkKKworCWdldF9HT1QJZWJ4CQk7IGdldCBHT1QgYWRkcmVzcworCisJOyAtLS0tIFBhc3MgMTogcHJvY2VzcyBjb2x1bW5zIGZyb20gaW5wdXQuCisKKzsJbW92CWVheCwgW29yaWdpbmFsX2VicF0KKwltb3YJZWR4LCBQT0lOVEVSIFtkY3RfdGFibGUoZWF4KV0JOyBxdWFudHB0cgorCW1vdgllc2ksIEpDT0VGUFRSIFtjb2VmX2Jsb2NrKGVheCldCQk7IGlucHRyCisKKyVpZm5kZWYgTk9fWkVST19DT0xVTU5fVEVTVF9JU0xPV19TU0UyCisJbW92CWVheCwgRFdPUkQgW0RXQkxPQ0soMSwwLGVzaSxTSVpFT0ZfSkNPRUYpXQorCW9yCWVheCwgRFdPUkQgW0RXQkxPQ0soMiwwLGVzaSxTSVpFT0ZfSkNPRUYpXQorCWpuegluZWFyIC5jb2x1bW5EQ1QKKworCW1vdmRxYQl4bW0wLCBYTU1XT1JEIFtYTU1CTE9DSygxLDAsZXNpLFNJWkVPRl9KQ09FRildCisJbW92ZHFhCXhtbTEsIFhNTVdPUkQgW1hNTUJMT0NLKDIsMCxlc2ksU0laRU9GX0pDT0VGKV0KKwlwb3IJeG1tMCwgWE1NV09SRCBbWE1NQkxPQ0soMywwLGVzaSxTSVpFT0ZfSkNPRUYpXQorCXBvcgl4bW0xLCBYTU1XT1JEIFtYTU1CTE9DSyg0LDAsZXNpLFNJWkVPRl9KQ09FRildCisJcG9yCXhtbTAsIFhNTVdPUkQgW1hNTUJMT0NLKDUsMCxlc2ksU0laRU9GX0pDT0VGKV0KKwlwb3IJeG1tMSwgWE1NV09SRCBbWE1NQkxPQ0soNiwwLGVzaSxTSVpFT0ZfSkNPRUYpXQorCXBvcgl4bW0wLCBYTU1XT1JEIFtYTU1CTE9DSyg3LDAsZXNpLFNJWkVPRl9KQ09FRildCisJcG9yCXhtbTEseG1tMAorCXBhY2tzc3diIHhtbTEseG1tMQorCXBhY2tzc3diIHhtbTEseG1tMQorCW1vdmQJZWF4LHhtbTEKKwl0ZXN0CWVheCxlYXgKKwlqbnoJc2hvcnQgLmNvbHVtbkRDVAorCisJOyAtLSBBQyB0ZXJtcyBhbGwgemVybworCisJbW92ZHFhCXhtbTUsIFhNTVdPUkQgW1hNTUJMT0NLKDAsMCxlc2ksU0laRU9GX0pDT0VGKV0KKwlwbXVsbHcJeG1tNSwgWE1NV09SRCBbWE1NQkxPQ0soMCwwLGVkeCxTSVpFT0ZfSVNMT1dfTVVMVF9UWVBFKV0KKworCXBzbGx3CXhtbTUsUEFTUzFfQklUUworCisJbW92ZHFhICAgIHhtbTQseG1tNQkJOyB4bW01PWluMD0oMDAgMDEgMDIgMDMgMDQgMDUgMDYgMDcpCisJcHVucGNrbHdkIHhtbTUseG1tNQkJOyB4bW01PSgwMCAwMCAwMSAwMSAwMiAwMiAwMyAwMykKKwlwdW5wY2tod2QgeG1tNCx4bW00CQk7IHhtbTQ9KDA0IDA0IDA1IDA1IDA2IDA2IDA3IDA3KQorCisJcHNodWZkCXhtbTcseG1tNSwweDAwCQk7IHhtbTc9Y29sMD0oMDAgMDAgMDAgMDAgMDAgMDAgMDAgMDApCisJcHNodWZkCXhtbTYseG1tNSwweDU1CQk7IHhtbTY9Y29sMT0oMDEgMDEgMDEgMDEgMDEgMDEgMDEgMDEpCisJcHNodWZkCXhtbTEseG1tNSwweEFBCQk7IHhtbTE9Y29sMj0oMDIgMDIgMDIgMDIgMDIgMDIgMDIgMDIpCisJcHNodWZkCXhtbTUseG1tNSwweEZGCQk7IHhtbTU9Y29sMz0oMDMgMDMgMDMgMDMgMDMgMDMgMDMgMDMpCisJcHNodWZkCXhtbTAseG1tNCwweDAwCQk7IHhtbTA9Y29sND0oMDQgMDQgMDQgMDQgMDQgMDQgMDQgMDQpCisJcHNodWZkCXhtbTMseG1tNCwweDU1CQk7IHhtbTM9Y29sNT0oMDUgMDUgMDUgMDUgMDUgMDUgMDUgMDUpCisJcHNodWZkCXhtbTIseG1tNCwweEFBCQk7IHhtbTI9Y29sNj0oMDYgMDYgMDYgMDYgMDYgMDYgMDYgMDYpCisJcHNodWZkCXhtbTQseG1tNCwweEZGCQk7IHhtbTQ9Y29sNz0oMDcgMDcgMDcgMDcgMDcgMDcgMDcgMDcpCisKKwltb3ZkcWEJWE1NV09SRCBbd2soOCldLCB4bW02CTsgd2soOCk9Y29sMQorCW1vdmRxYQlYTU1XT1JEIFt3ayg5KV0sIHhtbTUJOyB3ayg5KT1jb2wzCisJbW92ZHFhCVhNTVdPUkQgW3drKDEwKV0sIHhtbTMJOyB3aygxMCk9Y29sNQorCW1vdmRxYQlYTU1XT1JEIFt3aygxMSldLCB4bW00CTsgd2soMTEpPWNvbDcKKwlqbXAJbmVhciAuY29sdW1uX2VuZAorCWFsaWdueAkxNiw3CislZW5kaWYKKy5jb2x1bW5EQ1Q6CisKKwk7IC0tIEV2ZW4gcGFydAorCisJbW92ZHFhCXhtbTAsIFhNTVdPUkQgW1hNTUJMT0NLKDAsMCxlc2ksU0laRU9GX0pDT0VGKV0KKwltb3ZkcWEJeG1tMSwgWE1NV09SRCBbWE1NQkxPQ0soMiwwLGVzaSxTSVpFT0ZfSkNPRUYpXQorCXBtdWxsdwl4bW0wLCBYTU1XT1JEIFtYTU1CTE9DSygwLDAsZWR4LFNJWkVPRl9JU0xPV19NVUxUX1RZUEUpXQorCXBtdWxsdwl4bW0xLCBYTU1XT1JEIFtYTU1CTE9DSygyLDAsZWR4LFNJWkVPRl9JU0xPV19NVUxUX1RZUEUpXQorCW1vdmRxYQl4bW0yLCBYTU1XT1JEIFtYTU1CTE9DSyg0LDAsZXNpLFNJWkVPRl9KQ09FRildCisJbW92ZHFhCXhtbTMsIFhNTVdPUkQgW1hNTUJMT0NLKDYsMCxlc2ksU0laRU9GX0pDT0VGKV0KKwlwbXVsbHcJeG1tMiwgWE1NV09SRCBbWE1NQkxPQ0soNCwwLGVkeCxTSVpFT0ZfSVNMT1dfTVVMVF9UWVBFKV0KKwlwbXVsbHcJeG1tMywgWE1NV09SRCBbWE1NQkxPQ0soNiwwLGVkeCxTSVpFT0ZfSVNMT1dfTVVMVF9UWVBFKV0KKworCTsgKE9yaWdpbmFsKQorCTsgejEgPSAoejIgKyB6MykgKiAwLjU0MTE5NjEwMDsKKwk7IHRtcDIgPSB6MSArIHozICogLTEuODQ3NzU5MDY1OworCTsgdG1wMyA9IHoxICsgejIgKiAwLjc2NTM2Njg2NTsKKwk7CisJOyAoVGhpcyBpbXBsZW1lbnRhdGlvbikKKwk7IHRtcDIgPSB6MiAqIDAuNTQxMTk2MTAwICsgejMgKiAoMC41NDExOTYxMDAgLSAxLjg0Nzc1OTA2NSk7CisJOyB0bXAzID0gejIgKiAoMC41NDExOTYxMDAgKyAwLjc2NTM2Njg2NSkgKyB6MyAqIDAuNTQxMTk2MTAwOworCisJbW92ZHFhICAgIHhtbTQseG1tMQkJOyB4bW0xPWluMj16MgorCW1vdmRxYSAgICB4bW01LHhtbTEKKwlwdW5wY2tsd2QgeG1tNCx4bW0zCQk7IHhtbTM9aW42PXozCisJcHVucGNraHdkIHhtbTUseG1tMworCW1vdmRxYSAgICB4bW0xLHhtbTQKKwltb3ZkcWEgICAgeG1tMyx4bW01CisJcG1hZGR3ZCAgIHhtbTQsW0dPVE9GRihlYngsUFdfRjEzMF9GMDU0KV0JOyB4bW00PXRtcDNMCisJcG1hZGR3ZCAgIHhtbTUsW0dPVE9GRihlYngsUFdfRjEzMF9GMDU0KV0JOyB4bW01PXRtcDNICisJcG1hZGR3ZCAgIHhtbTEsW0dPVE9GRihlYngsUFdfRjA1NF9NRjEzMCldCTsgeG1tMT10bXAyTAorCXBtYWRkd2QgICB4bW0zLFtHT1RPRkYoZWJ4LFBXX0YwNTRfTUYxMzApXQk7IHhtbTM9dG1wMkgKKworCW1vdmRxYSAgICB4bW02LHhtbTAKKwlwYWRkdyAgICAgeG1tMCx4bW0yCQk7IHhtbTA9aW4wK2luNAorCXBzdWJ3ICAgICB4bW02LHhtbTIJCTsgeG1tNj1pbjAtaW40CisKKwlweG9yICAgICAgeG1tNyx4bW03CisJcHhvciAgICAgIHhtbTIseG1tMgorCXB1bnBja2x3ZCB4bW03LHhtbTAJCTsgeG1tNz10bXAwTAorCXB1bnBja2h3ZCB4bW0yLHhtbTAJCTsgeG1tMj10bXAwSAorCXBzcmFkICAgICB4bW03LCgxNi1DT05TVF9CSVRTKQk7IHBzcmFkIHhtbTcsMTYgJiBwc2xsZCB4bW03LENPTlNUX0JJVFMKKwlwc3JhZCAgICAgeG1tMiwoMTYtQ09OU1RfQklUUykJOyBwc3JhZCB4bW0yLDE2ICYgcHNsbGQgeG1tMixDT05TVF9CSVRTCisKKwltb3ZkcWEJeG1tMCx4bW03CisJcGFkZGQJeG1tNyx4bW00CQk7IHhtbTc9dG1wMTBMCisJcHN1YmQJeG1tMCx4bW00CQk7IHhtbTA9dG1wMTNMCisJbW92ZHFhCXhtbTQseG1tMgorCXBhZGRkCXhtbTIseG1tNQkJOyB4bW0yPXRtcDEwSAorCXBzdWJkCXhtbTQseG1tNQkJOyB4bW00PXRtcDEzSAorCisJbW92ZHFhCVhNTVdPUkQgW3drKDApXSwgeG1tNwk7IHdrKDApPXRtcDEwTAorCW1vdmRxYQlYTU1XT1JEIFt3aygxKV0sIHhtbTIJOyB3aygxKT10bXAxMEgKKwltb3ZkcWEJWE1NV09SRCBbd2soMildLCB4bW0wCTsgd2soMik9dG1wMTNMCisJbW92ZHFhCVhNTVdPUkQgW3drKDMpXSwgeG1tNAk7IHdrKDMpPXRtcDEzSAorCisJcHhvciAgICAgIHhtbTUseG1tNQorCXB4b3IgICAgICB4bW03LHhtbTcKKwlwdW5wY2tsd2QgeG1tNSx4bW02CQk7IHhtbTU9dG1wMUwKKwlwdW5wY2tod2QgeG1tNyx4bW02CQk7IHhtbTc9dG1wMUgKKwlwc3JhZCAgICAgeG1tNSwoMTYtQ09OU1RfQklUUykJOyBwc3JhZCB4bW01LDE2ICYgcHNsbGQgeG1tNSxDT05TVF9CSVRTCisJcHNyYWQgICAgIHhtbTcsKDE2LUNPTlNUX0JJVFMpCTsgcHNyYWQgeG1tNywxNiAmIHBzbGxkIHhtbTcsQ09OU1RfQklUUworCisJbW92ZHFhCXhtbTIseG1tNQorCXBhZGRkCXhtbTUseG1tMQkJOyB4bW01PXRtcDExTAorCXBzdWJkCXhtbTIseG1tMQkJOyB4bW0yPXRtcDEyTAorCW1vdmRxYQl4bW0wLHhtbTcKKwlwYWRkZAl4bW03LHhtbTMJCTsgeG1tNz10bXAxMUgKKwlwc3ViZAl4bW0wLHhtbTMJCTsgeG1tMD10bXAxMkgKKworCW1vdmRxYQlYTU1XT1JEIFt3ayg0KV0sIHhtbTUJOyB3ayg0KT10bXAxMUwKKwltb3ZkcWEJWE1NV09SRCBbd2soNSldLCB4bW03CTsgd2soNSk9dG1wMTFICisJbW92ZHFhCVhNTVdPUkQgW3drKDYpXSwgeG1tMgk7IHdrKDYpPXRtcDEyTAorCW1vdmRxYQlYTU1XT1JEIFt3ayg3KV0sIHhtbTAJOyB3ayg3KT10bXAxMkgKKworCTsgLS0gT2RkIHBhcnQKKworCW1vdmRxYQl4bW00LCBYTU1XT1JEIFtYTU1CTE9DSygxLDAsZXNpLFNJWkVPRl9KQ09FRildCisJbW92ZHFhCXhtbTYsIFhNTVdPUkQgW1hNTUJMT0NLKDMsMCxlc2ksU0laRU9GX0pDT0VGKV0KKwlwbXVsbHcJeG1tNCwgWE1NV09SRCBbWE1NQkxPQ0soMSwwLGVkeCxTSVpFT0ZfSVNMT1dfTVVMVF9UWVBFKV0KKwlwbXVsbHcJeG1tNiwgWE1NV09SRCBbWE1NQkxPQ0soMywwLGVkeCxTSVpFT0ZfSVNMT1dfTVVMVF9UWVBFKV0KKwltb3ZkcWEJeG1tMSwgWE1NV09SRCBbWE1NQkxPQ0soNSwwLGVzaSxTSVpFT0ZfSkNPRUYpXQorCW1vdmRxYQl4bW0zLCBYTU1XT1JEIFtYTU1CTE9DSyg3LDAsZXNpLFNJWkVPRl9KQ09FRildCisJcG11bGx3CXhtbTEsIFhNTVdPUkQgW1hNTUJMT0NLKDUsMCxlZHgsU0laRU9GX0lTTE9XX01VTFRfVFlQRSldCisJcG11bGx3CXhtbTMsIFhNTVdPUkQgW1hNTUJMT0NLKDcsMCxlZHgsU0laRU9GX0lTTE9XX01VTFRfVFlQRSldCisKKwltb3ZkcWEJeG1tNSx4bW02CisJbW92ZHFhCXhtbTcseG1tNAorCXBhZGR3CXhtbTUseG1tMwkJOyB4bW01PXozCisJcGFkZHcJeG1tNyx4bW0xCQk7IHhtbTc9ejQKKworCTsgKE9yaWdpbmFsKQorCTsgejUgPSAoejMgKyB6NCkgKiAxLjE3NTg3NTYwMjsKKwk7IHozID0gejMgKiAtMS45NjE1NzA1NjA7ICB6NCA9IHo0ICogLTAuMzkwMTgwNjQ0OworCTsgejMgKz0gejU7ICB6NCArPSB6NTsKKwk7CisJOyAoVGhpcyBpbXBsZW1lbnRhdGlvbikKKwk7IHozID0gejMgKiAoMS4xNzU4NzU2MDIgLSAxLjk2MTU3MDU2MCkgKyB6NCAqIDEuMTc1ODc1NjAyOworCTsgejQgPSB6MyAqIDEuMTc1ODc1NjAyICsgejQgKiAoMS4xNzU4NzU2MDIgLSAwLjM5MDE4MDY0NCk7CisKKwltb3ZkcWEgICAgeG1tMix4bW01CisJbW92ZHFhICAgIHhtbTAseG1tNQorCXB1bnBja2x3ZCB4bW0yLHhtbTcKKwlwdW5wY2tod2QgeG1tMCx4bW03CisJbW92ZHFhICAgIHhtbTUseG1tMgorCW1vdmRxYSAgICB4bW03LHhtbTAKKwlwbWFkZHdkICAgeG1tMixbR09UT0ZGKGVieCxQV19NRjA3OF9GMTE3KV0JOyB4bW0yPXozTAorCXBtYWRkd2QgICB4bW0wLFtHT1RPRkYoZWJ4LFBXX01GMDc4X0YxMTcpXQk7IHhtbTA9ejNICisJcG1hZGR3ZCAgIHhtbTUsW0dPVE9GRihlYngsUFdfRjExN19GMDc4KV0JOyB4bW01PXo0TAorCXBtYWRkd2QgICB4bW03LFtHT1RPRkYoZWJ4LFBXX0YxMTdfRjA3OCldCTsgeG1tNz16NEgKKworCW1vdmRxYQlYTU1XT1JEIFt3aygxMCldLCB4bW0yCTsgd2soMTApPXozTAorCW1vdmRxYQlYTU1XT1JEIFt3aygxMSldLCB4bW0wCTsgd2soMTEpPXozSAorCisJOyAoT3JpZ2luYWwpCisJOyB6MSA9IHRtcDAgKyB0bXAzOyAgejIgPSB0bXAxICsgdG1wMjsKKwk7IHRtcDAgPSB0bXAwICogMC4yOTg2MzEzMzY7ICB0bXAxID0gdG1wMSAqIDIuMDUzMTE5ODY5OworCTsgdG1wMiA9IHRtcDIgKiAzLjA3MjcxMTAyNjsgIHRtcDMgPSB0bXAzICogMS41MDEzMjExMTA7CisJOyB6MSA9IHoxICogLTAuODk5OTc2MjIzOyAgejIgPSB6MiAqIC0yLjU2MjkxNTQ0NzsKKwk7IHRtcDAgKz0gejEgKyB6MzsgIHRtcDEgKz0gejIgKyB6NDsKKwk7IHRtcDIgKz0gejIgKyB6MzsgIHRtcDMgKz0gejEgKyB6NDsKKwk7CisJOyAoVGhpcyBpbXBsZW1lbnRhdGlvbikKKwk7IHRtcDAgPSB0bXAwICogKDAuMjk4NjMxMzM2IC0gMC44OTk5NzYyMjMpICsgdG1wMyAqIC0wLjg5OTk3NjIyMzsKKwk7IHRtcDEgPSB0bXAxICogKDIuMDUzMTE5ODY5IC0gMi41NjI5MTU0NDcpICsgdG1wMiAqIC0yLjU2MjkxNTQ0NzsKKwk7IHRtcDIgPSB0bXAxICogLTIuNTYyOTE1NDQ3ICsgdG1wMiAqICgzLjA3MjcxMTAyNiAtIDIuNTYyOTE1NDQ3KTsKKwk7IHRtcDMgPSB0bXAwICogLTAuODk5OTc2MjIzICsgdG1wMyAqICgxLjUwMTMyMTExMCAtIDAuODk5OTc2MjIzKTsKKwk7IHRtcDAgKz0gejM7ICB0bXAxICs9IHo0OworCTsgdG1wMiArPSB6MzsgIHRtcDMgKz0gejQ7CisKKwltb3ZkcWEgICAgeG1tMix4bW0zCisJbW92ZHFhICAgIHhtbTAseG1tMworCXB1bnBja2x3ZCB4bW0yLHhtbTQKKwlwdW5wY2tod2QgeG1tMCx4bW00CisJbW92ZHFhICAgIHhtbTMseG1tMgorCW1vdmRxYSAgICB4bW00LHhtbTAKKwlwbWFkZHdkICAgeG1tMixbR09UT0ZGKGVieCxQV19NRjA2MF9NRjA4OSldCTsgeG1tMj10bXAwTAorCXBtYWRkd2QgICB4bW0wLFtHT1RPRkYoZWJ4LFBXX01GMDYwX01GMDg5KV0JOyB4bW0wPXRtcDBICisJcG1hZGR3ZCAgIHhtbTMsW0dPVE9GRihlYngsUFdfTUYwODlfRjA2MCldCTsgeG1tMz10bXAzTAorCXBtYWRkd2QgICB4bW00LFtHT1RPRkYoZWJ4LFBXX01GMDg5X0YwNjApXQk7IHhtbTQ9dG1wM0gKKworCXBhZGRkCXhtbTIsIFhNTVdPUkQgW3drKDEwKV0JOyB4bW0yPXRtcDBMCisJcGFkZGQJeG1tMCwgWE1NV09SRCBbd2soMTEpXQk7IHhtbTA9dG1wMEgKKwlwYWRkZAl4bW0zLHhtbTUJCTsgeG1tMz10bXAzTAorCXBhZGRkCXhtbTQseG1tNwkJOyB4bW00PXRtcDNICisKKwltb3ZkcWEJWE1NV09SRCBbd2soOCldLCB4bW0yCTsgd2soOCk9dG1wMEwKKwltb3ZkcWEJWE1NV09SRCBbd2soOSldLCB4bW0wCTsgd2soOSk9dG1wMEgKKworCW1vdmRxYSAgICB4bW0yLHhtbTEKKwltb3ZkcWEgICAgeG1tMCx4bW0xCisJcHVucGNrbHdkIHhtbTIseG1tNgorCXB1bnBja2h3ZCB4bW0wLHhtbTYKKwltb3ZkcWEgICAgeG1tMSx4bW0yCisJbW92ZHFhICAgIHhtbTYseG1tMAorCXBtYWRkd2QgICB4bW0yLFtHT1RPRkYoZWJ4LFBXX01GMDUwX01GMjU2KV0JOyB4bW0yPXRtcDFMCisJcG1hZGR3ZCAgIHhtbTAsW0dPVE9GRihlYngsUFdfTUYwNTBfTUYyNTYpXQk7IHhtbTA9dG1wMUgKKwlwbWFkZHdkICAgeG1tMSxbR09UT0ZGKGVieCxQV19NRjI1Nl9GMDUwKV0JOyB4bW0xPXRtcDJMCisJcG1hZGR3ZCAgIHhtbTYsW0dPVE9GRihlYngsUFdfTUYyNTZfRjA1MCldCTsgeG1tNj10bXAySAorCisJcGFkZGQJeG1tMix4bW01CQk7IHhtbTI9dG1wMUwKKwlwYWRkZAl4bW0wLHhtbTcJCTsgeG1tMD10bXAxSAorCXBhZGRkCXhtbTEsIFhNTVdPUkQgW3drKDEwKV0JOyB4bW0xPXRtcDJMCisJcGFkZGQJeG1tNiwgWE1NV09SRCBbd2soMTEpXQk7IHhtbTY9dG1wMkgKKworCW1vdmRxYQlYTU1XT1JEIFt3aygxMCldLCB4bW0yCTsgd2soMTApPXRtcDFMCisJbW92ZHFhCVhNTVdPUkQgW3drKDExKV0sIHhtbTAJOyB3aygxMSk9dG1wMUgKKworCTsgLS0gRmluYWwgb3V0cHV0IHN0YWdlCisKKwltb3ZkcWEJeG1tNSwgWE1NV09SRCBbd2soMCldCTsgeG1tNT10bXAxMEwKKwltb3ZkcWEJeG1tNywgWE1NV09SRCBbd2soMSldCTsgeG1tNz10bXAxMEgKKworCW1vdmRxYQl4bW0yLHhtbTUKKwltb3ZkcWEJeG1tMCx4bW03CisJcGFkZGQJeG1tNSx4bW0zCQk7IHhtbTU9ZGF0YTBMCisJcGFkZGQJeG1tNyx4bW00CQk7IHhtbTc9ZGF0YTBICisJcHN1YmQJeG1tMix4bW0zCQk7IHhtbTI9ZGF0YTdMCisJcHN1YmQJeG1tMCx4bW00CQk7IHhtbTA9ZGF0YTdICisKKwltb3ZkcWEJeG1tMyxbR09UT0ZGKGVieCxQRF9ERVNDQUxFX1AxKV0JOyB4bW0zPVtQRF9ERVNDQUxFX1AxXQorCisJcGFkZGQJeG1tNSx4bW0zCisJcGFkZGQJeG1tNyx4bW0zCisJcHNyYWQJeG1tNSxERVNDQUxFX1AxCisJcHNyYWQJeG1tNyxERVNDQUxFX1AxCisJcGFkZGQJeG1tMix4bW0zCisJcGFkZGQJeG1tMCx4bW0zCisJcHNyYWQJeG1tMixERVNDQUxFX1AxCisJcHNyYWQJeG1tMCxERVNDQUxFX1AxCisKKwlwYWNrc3NkdyAgeG1tNSx4bW03CQk7IHhtbTU9ZGF0YTA9KDAwIDAxIDAyIDAzIDA0IDA1IDA2IDA3KQorCXBhY2tzc2R3ICB4bW0yLHhtbTAJCTsgeG1tMj1kYXRhNz0oNzAgNzEgNzIgNzMgNzQgNzUgNzYgNzcpCisKKwltb3ZkcWEJeG1tNCwgWE1NV09SRCBbd2soNCldCTsgeG1tND10bXAxMUwKKwltb3ZkcWEJeG1tMywgWE1NV09SRCBbd2soNSldCTsgeG1tMz10bXAxMUgKKworCW1vdmRxYQl4bW03LHhtbTQKKwltb3ZkcWEJeG1tMCx4bW0zCisJcGFkZGQJeG1tNCx4bW0xCQk7IHhtbTQ9ZGF0YTFMCisJcGFkZGQJeG1tMyx4bW02CQk7IHhtbTM9ZGF0YTFICisJcHN1YmQJeG1tNyx4bW0xCQk7IHhtbTc9ZGF0YTZMCisJcHN1YmQJeG1tMCx4bW02CQk7IHhtbTA9ZGF0YTZICisKKwltb3ZkcWEJeG1tMSxbR09UT0ZGKGVieCxQRF9ERVNDQUxFX1AxKV0JOyB4bW0xPVtQRF9ERVNDQUxFX1AxXQorCisJcGFkZGQJeG1tNCx4bW0xCisJcGFkZGQJeG1tMyx4bW0xCisJcHNyYWQJeG1tNCxERVNDQUxFX1AxCisJcHNyYWQJeG1tMyxERVNDQUxFX1AxCisJcGFkZGQJeG1tNyx4bW0xCisJcGFkZGQJeG1tMCx4bW0xCisJcHNyYWQJeG1tNyxERVNDQUxFX1AxCisJcHNyYWQJeG1tMCxERVNDQUxFX1AxCisKKwlwYWNrc3NkdyAgeG1tNCx4bW0zCQk7IHhtbTQ9ZGF0YTE9KDEwIDExIDEyIDEzIDE0IDE1IDE2IDE3KQorCXBhY2tzc2R3ICB4bW03LHhtbTAJCTsgeG1tNz1kYXRhNj0oNjAgNjEgNjIgNjMgNjQgNjUgNjYgNjcpCisKKwltb3ZkcWEgICAgeG1tNix4bW01CQk7IHRyYW5zcG9zZSBjb2VmZmljaWVudHMocGhhc2UgMSkKKwlwdW5wY2tsd2QgeG1tNSx4bW00CQk7IHhtbTU9KDAwIDEwIDAxIDExIDAyIDEyIDAzIDEzKQorCXB1bnBja2h3ZCB4bW02LHhtbTQJCTsgeG1tNj0oMDQgMTQgMDUgMTUgMDYgMTYgMDcgMTcpCisJbW92ZHFhICAgIHhtbTEseG1tNwkJOyB0cmFuc3Bvc2UgY29lZmZpY2llbnRzKHBoYXNlIDEpCisJcHVucGNrbHdkIHhtbTcseG1tMgkJOyB4bW03PSg2MCA3MCA2MSA3MSA2MiA3MiA2MyA3MykKKwlwdW5wY2tod2QgeG1tMSx4bW0yCQk7IHhtbTE9KDY0IDc0IDY1IDc1IDY2IDc2IDY3IDc3KQorCisJbW92ZHFhCXhtbTMsIFhNTVdPUkQgW3drKDYpXQk7IHhtbTM9dG1wMTJMCisJbW92ZHFhCXhtbTAsIFhNTVdPUkQgW3drKDcpXQk7IHhtbTA9dG1wMTJICisJbW92ZHFhCXhtbTQsIFhNTVdPUkQgW3drKDEwKV0JOyB4bW00PXRtcDFMCisJbW92ZHFhCXhtbTIsIFhNTVdPUkQgW3drKDExKV0JOyB4bW0yPXRtcDFICisKKwltb3ZkcWEJWE1NV09SRCBbd2soMCldLCB4bW01CTsgd2soMCk9KDAwIDEwIDAxIDExIDAyIDEyIDAzIDEzKQorCW1vdmRxYQlYTU1XT1JEIFt3aygxKV0sIHhtbTYJOyB3aygxKT0oMDQgMTQgMDUgMTUgMDYgMTYgMDcgMTcpCisJbW92ZHFhCVhNTVdPUkQgW3drKDQpXSwgeG1tNwk7IHdrKDQpPSg2MCA3MCA2MSA3MSA2MiA3MiA2MyA3MykKKwltb3ZkcWEJWE1NV09SRCBbd2soNSldLCB4bW0xCTsgd2soNSk9KDY0IDc0IDY1IDc1IDY2IDc2IDY3IDc3KQorCisJbW92ZHFhCXhtbTUseG1tMworCW1vdmRxYQl4bW02LHhtbTAKKwlwYWRkZAl4bW0zLHhtbTQJCTsgeG1tMz1kYXRhMkwKKwlwYWRkZAl4bW0wLHhtbTIJCTsgeG1tMD1kYXRhMkgKKwlwc3ViZAl4bW01LHhtbTQJCTsgeG1tNT1kYXRhNUwKKwlwc3ViZAl4bW02LHhtbTIJCTsgeG1tNj1kYXRhNUgKKworCW1vdmRxYQl4bW03LFtHT1RPRkYoZWJ4LFBEX0RFU0NBTEVfUDEpXQk7IHhtbTc9W1BEX0RFU0NBTEVfUDFdCisKKwlwYWRkZAl4bW0zLHhtbTcKKwlwYWRkZAl4bW0wLHhtbTcKKwlwc3JhZAl4bW0zLERFU0NBTEVfUDEKKwlwc3JhZAl4bW0wLERFU0NBTEVfUDEKKwlwYWRkZAl4bW01LHhtbTcKKwlwYWRkZAl4bW02LHhtbTcKKwlwc3JhZAl4bW01LERFU0NBTEVfUDEKKwlwc3JhZAl4bW02LERFU0NBTEVfUDEKKworCXBhY2tzc2R3ICB4bW0zLHhtbTAJCTsgeG1tMz1kYXRhMj0oMjAgMjEgMjIgMjMgMjQgMjUgMjYgMjcpCisJcGFja3NzZHcgIHhtbTUseG1tNgkJOyB4bW01PWRhdGE1PSg1MCA1MSA1MiA1MyA1NCA1NSA1NiA1NykKKworCW1vdmRxYQl4bW0xLCBYTU1XT1JEIFt3aygyKV0JOyB4bW0xPXRtcDEzTAorCW1vdmRxYQl4bW00LCBYTU1XT1JEIFt3aygzKV0JOyB4bW00PXRtcDEzSAorCW1vdmRxYQl4bW0yLCBYTU1XT1JEIFt3ayg4KV0JOyB4bW0yPXRtcDBMCisJbW92ZHFhCXhtbTcsIFhNTVdPUkQgW3drKDkpXQk7IHhtbTc9dG1wMEgKKworCW1vdmRxYQl4bW0wLHhtbTEKKwltb3ZkcWEJeG1tNix4bW00CisJcGFkZGQJeG1tMSx4bW0yCQk7IHhtbTE9ZGF0YTNMCisJcGFkZGQJeG1tNCx4bW03CQk7IHhtbTQ9ZGF0YTNICisJcHN1YmQJeG1tMCx4bW0yCQk7IHhtbTA9ZGF0YTRMCisJcHN1YmQJeG1tNix4bW03CQk7IHhtbTY9ZGF0YTRICisKKwltb3ZkcWEJeG1tMixbR09UT0ZGKGVieCxQRF9ERVNDQUxFX1AxKV0JOyB4bW0yPVtQRF9ERVNDQUxFX1AxXQorCisJcGFkZGQJeG1tMSx4bW0yCisJcGFkZGQJeG1tNCx4bW0yCisJcHNyYWQJeG1tMSxERVNDQUxFX1AxCisJcHNyYWQJeG1tNCxERVNDQUxFX1AxCisJcGFkZGQJeG1tMCx4bW0yCisJcGFkZGQJeG1tNix4bW0yCisJcHNyYWQJeG1tMCxERVNDQUxFX1AxCisJcHNyYWQJeG1tNixERVNDQUxFX1AxCisKKwlwYWNrc3NkdyAgeG1tMSx4bW00CQk7IHhtbTE9ZGF0YTM9KDMwIDMxIDMyIDMzIDM0IDM1IDM2IDM3KQorCXBhY2tzc2R3ICB4bW0wLHhtbTYJCTsgeG1tMD1kYXRhND0oNDAgNDEgNDIgNDMgNDQgNDUgNDYgNDcpCisKKwltb3ZkcWEJeG1tNywgWE1NV09SRCBbd2soMCldCTsgeG1tNz0oMDAgMTAgMDEgMTEgMDIgMTIgMDMgMTMpCisJbW92ZHFhCXhtbTIsIFhNTVdPUkQgW3drKDEpXQk7IHhtbTI9KDA0IDE0IDA1IDE1IDA2IDE2IDA3IDE3KQorCisJbW92ZHFhICAgIHhtbTQseG1tMwkJOyB0cmFuc3Bvc2UgY29lZmZpY2llbnRzKHBoYXNlIDEpCisJcHVucGNrbHdkIHhtbTMseG1tMQkJOyB4bW0zPSgyMCAzMCAyMSAzMSAyMiAzMiAyMyAzMykKKwlwdW5wY2tod2QgeG1tNCx4bW0xCQk7IHhtbTQ9KDI0IDM0IDI1IDM1IDI2IDM2IDI3IDM3KQorCW1vdmRxYSAgICB4bW02LHhtbTAJCTsgdHJhbnNwb3NlIGNvZWZmaWNpZW50cyhwaGFzZSAxKQorCXB1bnBja2x3ZCB4bW0wLHhtbTUJCTsgeG1tMD0oNDAgNTAgNDEgNTEgNDIgNTIgNDMgNTMpCisJcHVucGNraHdkIHhtbTYseG1tNQkJOyB4bW02PSg0NCA1NCA0NSA1NSA0NiA1NiA0NyA1NykKKworCW1vdmRxYSAgICB4bW0xLHhtbTcJCTsgdHJhbnNwb3NlIGNvZWZmaWNpZW50cyhwaGFzZSAyKQorCXB1bnBja2xkcSB4bW03LHhtbTMJCTsgeG1tNz0oMDAgMTAgMjAgMzAgMDEgMTEgMjEgMzEpCisJcHVucGNraGRxIHhtbTEseG1tMwkJOyB4bW0xPSgwMiAxMiAyMiAzMiAwMyAxMyAyMyAzMykKKwltb3ZkcWEgICAgeG1tNSx4bW0yCQk7IHRyYW5zcG9zZSBjb2VmZmljaWVudHMocGhhc2UgMikKKwlwdW5wY2tsZHEgeG1tMix4bW00CQk7IHhtbTI9KDA0IDE0IDI0IDM0IDA1IDE1IDI1IDM1KQorCXB1bnBja2hkcSB4bW01LHhtbTQJCTsgeG1tNT0oMDYgMTYgMjYgMzYgMDcgMTcgMjcgMzcpCisKKwltb3ZkcWEJeG1tMywgWE1NV09SRCBbd2soNCldCTsgeG1tMz0oNjAgNzAgNjEgNzEgNjIgNzIgNjMgNzMpCisJbW92ZHFhCXhtbTQsIFhNTVdPUkQgW3drKDUpXQk7IHhtbTQ9KDY0IDc0IDY1IDc1IDY2IDc2IDY3IDc3KQorCisJbW92ZHFhCVhNTVdPUkQgW3drKDYpXSwgeG1tMgk7IHdrKDYpPSgwNCAxNCAyNCAzNCAwNSAxNSAyNSAzNSkKKwltb3ZkcWEJWE1NV09SRCBbd2soNyldLCB4bW01CTsgd2soNyk9KDA2IDE2IDI2IDM2IDA3IDE3IDI3IDM3KQorCisJbW92ZHFhICAgIHhtbTIseG1tMAkJOyB0cmFuc3Bvc2UgY29lZmZpY2llbnRzKHBoYXNlIDIpCisJcHVucGNrbGRxIHhtbTAseG1tMwkJOyB4bW0wPSg0MCA1MCA2MCA3MCA0MSA1MSA2MSA3MSkKKwlwdW5wY2toZHEgeG1tMix4bW0zCQk7IHhtbTI9KDQyIDUyIDYyIDcyIDQzIDUzIDYzIDczKQorCW1vdmRxYSAgICB4bW01LHhtbTYJCTsgdHJhbnNwb3NlIGNvZWZmaWNpZW50cyhwaGFzZSAyKQorCXB1bnBja2xkcSB4bW02LHhtbTQJCTsgeG1tNj0oNDQgNTQgNjQgNzQgNDUgNTUgNjUgNzUpCisJcHVucGNraGRxIHhtbTUseG1tNAkJOyB4bW01PSg0NiA1NiA2NiA3NiA0NyA1NyA2NyA3NykKKworCW1vdmRxYSAgICAgeG1tMyx4bW03CQk7IHRyYW5zcG9zZSBjb2VmZmljaWVudHMocGhhc2UgMykKKwlwdW5wY2tscWRxIHhtbTcseG1tMAkJOyB4bW03PWNvbDA9KDAwIDEwIDIwIDMwIDQwIDUwIDYwIDcwKQorCXB1bnBja2hxZHEgeG1tMyx4bW0wCQk7IHhtbTM9Y29sMT0oMDEgMTEgMjEgMzEgNDEgNTEgNjEgNzEpCisJbW92ZHFhICAgICB4bW00LHhtbTEJCTsgdHJhbnNwb3NlIGNvZWZmaWNpZW50cyhwaGFzZSAzKQorCXB1bnBja2xxZHEgeG1tMSx4bW0yCQk7IHhtbTE9Y29sMj0oMDIgMTIgMjIgMzIgNDIgNTIgNjIgNzIpCisJcHVucGNraHFkcSB4bW00LHhtbTIJCTsgeG1tND1jb2wzPSgwMyAxMyAyMyAzMyA0MyA1MyA2MyA3MykKKworCW1vdmRxYQl4bW0wLCBYTU1XT1JEIFt3ayg2KV0JOyB4bW0wPSgwNCAxNCAyNCAzNCAwNSAxNSAyNSAzNSkKKwltb3ZkcWEJeG1tMiwgWE1NV09SRCBbd2soNyldCTsgeG1tMj0oMDYgMTYgMjYgMzYgMDcgMTcgMjcgMzcpCisKKwltb3ZkcWEJWE1NV09SRCBbd2soOCldLCB4bW0zCTsgd2soOCk9Y29sMQorCW1vdmRxYQlYTU1XT1JEIFt3ayg5KV0sIHhtbTQJOyB3ayg5KT1jb2wzCisKKwltb3ZkcWEgICAgIHhtbTMseG1tMAkJOyB0cmFuc3Bvc2UgY29lZmZpY2llbnRzKHBoYXNlIDMpCisJcHVucGNrbHFkcSB4bW0wLHhtbTYJCTsgeG1tMD1jb2w0PSgwNCAxNCAyNCAzNCA0NCA1NCA2NCA3NCkKKwlwdW5wY2tocWRxIHhtbTMseG1tNgkJOyB4bW0zPWNvbDU9KDA1IDE1IDI1IDM1IDQ1IDU1IDY1IDc1KQorCW1vdmRxYSAgICAgeG1tNCx4bW0yCQk7IHRyYW5zcG9zZSBjb2VmZmljaWVudHMocGhhc2UgMykKKwlwdW5wY2tscWRxIHhtbTIseG1tNQkJOyB4bW0yPWNvbDY9KDA2IDE2IDI2IDM2IDQ2IDU2IDY2IDc2KQorCXB1bnBja2hxZHEgeG1tNCx4bW01CQk7IHhtbTQ9Y29sNz0oMDcgMTcgMjcgMzcgNDcgNTcgNjcgNzcpCisKKwltb3ZkcWEJWE1NV09SRCBbd2soMTApXSwgeG1tMwk7IHdrKDEwKT1jb2w1CisJbW92ZHFhCVhNTVdPUkQgW3drKDExKV0sIHhtbTQJOyB3aygxMSk9Y29sNworLmNvbHVtbl9lbmQ6CisKKwk7IC0tIFByZWZldGNoIHRoZSBuZXh0IGNvZWZmaWNpZW50IGJsb2NrCisKKwlwcmVmZXRjaG50YSBbZXNpICsgRENUU0laRTIqU0laRU9GX0pDT0VGICsgMCozMl0KKwlwcmVmZXRjaG50YSBbZXNpICsgRENUU0laRTIqU0laRU9GX0pDT0VGICsgMSozMl0KKwlwcmVmZXRjaG50YSBbZXNpICsgRENUU0laRTIqU0laRU9GX0pDT0VGICsgMiozMl0KKwlwcmVmZXRjaG50YSBbZXNpICsgRENUU0laRTIqU0laRU9GX0pDT0VGICsgMyozMl0KKworCTsgLS0tLSBQYXNzIDI6IHByb2Nlc3Mgcm93cyBmcm9tIHdvcmsgYXJyYXksIHN0b3JlIGludG8gb3V0cHV0IGFycmF5LgorCisJbW92CWVheCwgW29yaWdpbmFsX2VicF0KKwltb3YJZWRpLCBKU0FNUEFSUkFZIFtvdXRwdXRfYnVmKGVheCldCTsgKEpTQU1QUk9XICopCisJbW92CWVheCwgSkRJTUVOU0lPTiBbb3V0cHV0X2NvbChlYXgpXQorCisJOyAtLSBFdmVuIHBhcnQKKworCTsgeG1tNz1jb2wwLCB4bW0xPWNvbDIsIHhtbTA9Y29sNCwgeG1tMj1jb2w2CisKKwk7IChPcmlnaW5hbCkKKwk7IHoxID0gKHoyICsgejMpICogMC41NDExOTYxMDA7CisJOyB0bXAyID0gejEgKyB6MyAqIC0xLjg0Nzc1OTA2NTsKKwk7IHRtcDMgPSB6MSArIHoyICogMC43NjUzNjY4NjU7CisJOworCTsgKFRoaXMgaW1wbGVtZW50YXRpb24pCisJOyB0bXAyID0gejIgKiAwLjU0MTE5NjEwMCArIHozICogKDAuNTQxMTk2MTAwIC0gMS44NDc3NTkwNjUpOworCTsgdG1wMyA9IHoyICogKDAuNTQxMTk2MTAwICsgMC43NjUzNjY4NjUpICsgejMgKiAwLjU0MTE5NjEwMDsKKworCW1vdmRxYSAgICB4bW02LHhtbTEJCTsgeG1tMT1pbjI9ejIKKwltb3ZkcWEgICAgeG1tNSx4bW0xCisJcHVucGNrbHdkIHhtbTYseG1tMgkJOyB4bW0yPWluNj16MworCXB1bnBja2h3ZCB4bW01LHhtbTIKKwltb3ZkcWEgICAgeG1tMSx4bW02CisJbW92ZHFhICAgIHhtbTIseG1tNQorCXBtYWRkd2QgICB4bW02LFtHT1RPRkYoZWJ4LFBXX0YxMzBfRjA1NCldCTsgeG1tNj10bXAzTAorCXBtYWRkd2QgICB4bW01LFtHT1RPRkYoZWJ4LFBXX0YxMzBfRjA1NCldCTsgeG1tNT10bXAzSAorCXBtYWRkd2QgICB4bW0xLFtHT1RPRkYoZWJ4LFBXX0YwNTRfTUYxMzApXQk7IHhtbTE9dG1wMkwKKwlwbWFkZHdkICAgeG1tMixbR09UT0ZGKGVieCxQV19GMDU0X01GMTMwKV0JOyB4bW0yPXRtcDJICisKKwltb3ZkcWEgICAgeG1tMyx4bW03CisJcGFkZHcgICAgIHhtbTcseG1tMAkJOyB4bW03PWluMCtpbjQKKwlwc3VidyAgICAgeG1tMyx4bW0wCQk7IHhtbTM9aW4wLWluNAorCisJcHhvciAgICAgIHhtbTQseG1tNAorCXB4b3IgICAgICB4bW0wLHhtbTAKKwlwdW5wY2tsd2QgeG1tNCx4bW03CQk7IHhtbTQ9dG1wMEwKKwlwdW5wY2tod2QgeG1tMCx4bW03CQk7IHhtbTA9dG1wMEgKKwlwc3JhZCAgICAgeG1tNCwoMTYtQ09OU1RfQklUUykJOyBwc3JhZCB4bW00LDE2ICYgcHNsbGQgeG1tNCxDT05TVF9CSVRTCisJcHNyYWQgICAgIHhtbTAsKDE2LUNPTlNUX0JJVFMpCTsgcHNyYWQgeG1tMCwxNiAmIHBzbGxkIHhtbTAsQ09OU1RfQklUUworCisJbW92ZHFhCXhtbTcseG1tNAorCXBhZGRkCXhtbTQseG1tNgkJOyB4bW00PXRtcDEwTAorCXBzdWJkCXhtbTcseG1tNgkJOyB4bW03PXRtcDEzTAorCW1vdmRxYQl4bW02LHhtbTAKKwlwYWRkZAl4bW0wLHhtbTUJCTsgeG1tMD10bXAxMEgKKwlwc3ViZAl4bW02LHhtbTUJCTsgeG1tNj10bXAxM0gKKworCW1vdmRxYQlYTU1XT1JEIFt3aygwKV0sIHhtbTQJOyB3aygwKT10bXAxMEwKKwltb3ZkcWEJWE1NV09SRCBbd2soMSldLCB4bW0wCTsgd2soMSk9dG1wMTBICisJbW92ZHFhCVhNTVdPUkQgW3drKDIpXSwgeG1tNwk7IHdrKDIpPXRtcDEzTAorCW1vdmRxYQlYTU1XT1JEIFt3aygzKV0sIHhtbTYJOyB3aygzKT10bXAxM0gKKworCXB4b3IgICAgICB4bW01LHhtbTUKKwlweG9yICAgICAgeG1tNCx4bW00CisJcHVucGNrbHdkIHhtbTUseG1tMwkJOyB4bW01PXRtcDFMCisJcHVucGNraHdkIHhtbTQseG1tMwkJOyB4bW00PXRtcDFICisJcHNyYWQgICAgIHhtbTUsKDE2LUNPTlNUX0JJVFMpCTsgcHNyYWQgeG1tNSwxNiAmIHBzbGxkIHhtbTUsQ09OU1RfQklUUworCXBzcmFkICAgICB4bW00LCgxNi1DT05TVF9CSVRTKQk7IHBzcmFkIHhtbTQsMTYgJiBwc2xsZCB4bW00LENPTlNUX0JJVFMKKworCW1vdmRxYQl4bW0wLHhtbTUKKwlwYWRkZAl4bW01LHhtbTEJCTsgeG1tNT10bXAxMUwKKwlwc3ViZAl4bW0wLHhtbTEJCTsgeG1tMD10bXAxMkwKKwltb3ZkcWEJeG1tNyx4bW00CisJcGFkZGQJeG1tNCx4bW0yCQk7IHhtbTQ9dG1wMTFICisJcHN1YmQJeG1tNyx4bW0yCQk7IHhtbTc9dG1wMTJICisKKwltb3ZkcWEJWE1NV09SRCBbd2soNCldLCB4bW01CTsgd2soNCk9dG1wMTFMCisJbW92ZHFhCVhNTVdPUkQgW3drKDUpXSwgeG1tNAk7IHdrKDUpPXRtcDExSAorCW1vdmRxYQlYTU1XT1JEIFt3ayg2KV0sIHhtbTAJOyB3ayg2KT10bXAxMkwKKwltb3ZkcWEJWE1NV09SRCBbd2soNyldLCB4bW03CTsgd2soNyk9dG1wMTJICisKKwk7IC0tIE9kZCBwYXJ0CisKKwltb3ZkcWEJeG1tNiwgWE1NV09SRCBbd2soOSldCTsgeG1tNj1jb2wzCisJbW92ZHFhCXhtbTMsIFhNTVdPUkQgW3drKDgpXQk7IHhtbTM9Y29sMQorCW1vdmRxYQl4bW0xLCBYTU1XT1JEIFt3aygxMSldCTsgeG1tMT1jb2w3CisJbW92ZHFhCXhtbTIsIFhNTVdPUkQgW3drKDEwKV0JOyB4bW0yPWNvbDUKKworCW1vdmRxYQl4bW01LHhtbTYKKwltb3ZkcWEJeG1tNCx4bW0zCisJcGFkZHcJeG1tNSx4bW0xCQk7IHhtbTU9ejMKKwlwYWRkdwl4bW00LHhtbTIJCTsgeG1tND16NAorCisJOyAoT3JpZ2luYWwpCisJOyB6NSA9ICh6MyArIHo0KSAqIDEuMTc1ODc1NjAyOworCTsgejMgPSB6MyAqIC0xLjk2MTU3MDU2MDsgIHo0ID0gejQgKiAtMC4zOTAxODA2NDQ7CisJOyB6MyArPSB6NTsgIHo0ICs9IHo1OworCTsKKwk7IChUaGlzIGltcGxlbWVudGF0aW9uKQorCTsgejMgPSB6MyAqICgxLjE3NTg3NTYwMiAtIDEuOTYxNTcwNTYwKSArIHo0ICogMS4xNzU4NzU2MDI7CisJOyB6NCA9IHozICogMS4xNzU4NzU2MDIgKyB6NCAqICgxLjE3NTg3NTYwMiAtIDAuMzkwMTgwNjQ0KTsKKworCW1vdmRxYSAgICB4bW0wLHhtbTUKKwltb3ZkcWEgICAgeG1tNyx4bW01CisJcHVucGNrbHdkIHhtbTAseG1tNAorCXB1bnBja2h3ZCB4bW03LHhtbTQKKwltb3ZkcWEgICAgeG1tNSx4bW0wCisJbW92ZHFhICAgIHhtbTQseG1tNworCXBtYWRkd2QgICB4bW0wLFtHT1RPRkYoZWJ4LFBXX01GMDc4X0YxMTcpXQk7IHhtbTA9ejNMCisJcG1hZGR3ZCAgIHhtbTcsW0dPVE9GRihlYngsUFdfTUYwNzhfRjExNyldCTsgeG1tNz16M0gKKwlwbWFkZHdkICAgeG1tNSxbR09UT0ZGKGVieCxQV19GMTE3X0YwNzgpXQk7IHhtbTU9ejRMCisJcG1hZGR3ZCAgIHhtbTQsW0dPVE9GRihlYngsUFdfRjExN19GMDc4KV0JOyB4bW00PXo0SAorCisJbW92ZHFhCVhNTVdPUkQgW3drKDEwKV0sIHhtbTAJOyB3aygxMCk9ejNMCisJbW92ZHFhCVhNTVdPUkQgW3drKDExKV0sIHhtbTcJOyB3aygxMSk9ejNICisKKwk7IChPcmlnaW5hbCkKKwk7IHoxID0gdG1wMCArIHRtcDM7ICB6MiA9IHRtcDEgKyB0bXAyOworCTsgdG1wMCA9IHRtcDAgKiAwLjI5ODYzMTMzNjsgIHRtcDEgPSB0bXAxICogMi4wNTMxMTk4Njk7CisJOyB0bXAyID0gdG1wMiAqIDMuMDcyNzExMDI2OyAgdG1wMyA9IHRtcDMgKiAxLjUwMTMyMTExMDsKKwk7IHoxID0gejEgKiAtMC44OTk5NzYyMjM7ICB6MiA9IHoyICogLTIuNTYyOTE1NDQ3OworCTsgdG1wMCArPSB6MSArIHozOyAgdG1wMSArPSB6MiArIHo0OworCTsgdG1wMiArPSB6MiArIHozOyAgdG1wMyArPSB6MSArIHo0OworCTsKKwk7IChUaGlzIGltcGxlbWVudGF0aW9uKQorCTsgdG1wMCA9IHRtcDAgKiAoMC4yOTg2MzEzMzYgLSAwLjg5OTk3NjIyMykgKyB0bXAzICogLTAuODk5OTc2MjIzOworCTsgdG1wMSA9IHRtcDEgKiAoMi4wNTMxMTk4NjkgLSAyLjU2MjkxNTQ0NykgKyB0bXAyICogLTIuNTYyOTE1NDQ3OworCTsgdG1wMiA9IHRtcDEgKiAtMi41NjI5MTU0NDcgKyB0bXAyICogKDMuMDcyNzExMDI2IC0gMi41NjI5MTU0NDcpOworCTsgdG1wMyA9IHRtcDAgKiAtMC44OTk5NzYyMjMgKyB0bXAzICogKDEuNTAxMzIxMTEwIC0gMC44OTk5NzYyMjMpOworCTsgdG1wMCArPSB6MzsgIHRtcDEgKz0gejQ7CisJOyB0bXAyICs9IHozOyAgdG1wMyArPSB6NDsKKworCW1vdmRxYSAgICB4bW0wLHhtbTEKKwltb3ZkcWEgICAgeG1tNyx4bW0xCisJcHVucGNrbHdkIHhtbTAseG1tMworCXB1bnBja2h3ZCB4bW03LHhtbTMKKwltb3ZkcWEgICAgeG1tMSx4bW0wCisJbW92ZHFhICAgIHhtbTMseG1tNworCXBtYWRkd2QgICB4bW0wLFtHT1RPRkYoZWJ4LFBXX01GMDYwX01GMDg5KV0JOyB4bW0wPXRtcDBMCisJcG1hZGR3ZCAgIHhtbTcsW0dPVE9GRihlYngsUFdfTUYwNjBfTUYwODkpXQk7IHhtbTc9dG1wMEgKKwlwbWFkZHdkICAgeG1tMSxbR09UT0ZGKGVieCxQV19NRjA4OV9GMDYwKV0JOyB4bW0xPXRtcDNMCisJcG1hZGR3ZCAgIHhtbTMsW0dPVE9GRihlYngsUFdfTUYwODlfRjA2MCldCTsgeG1tMz10bXAzSAorCisJcGFkZGQJeG1tMCwgWE1NV09SRCBbd2soMTApXQk7IHhtbTA9dG1wMEwKKwlwYWRkZAl4bW03LCBYTU1XT1JEIFt3aygxMSldCTsgeG1tNz10bXAwSAorCXBhZGRkCXhtbTEseG1tNQkJOyB4bW0xPXRtcDNMCisJcGFkZGQJeG1tMyx4bW00CQk7IHhtbTM9dG1wM0gKKworCW1vdmRxYQlYTU1XT1JEIFt3ayg4KV0sIHhtbTAJOyB3ayg4KT10bXAwTAorCW1vdmRxYQlYTU1XT1JEIFt3ayg5KV0sIHhtbTcJOyB3ayg5KT10bXAwSAorCisJbW92ZHFhICAgIHhtbTAseG1tMgorCW1vdmRxYSAgICB4bW03LHhtbTIKKwlwdW5wY2tsd2QgeG1tMCx4bW02CisJcHVucGNraHdkIHhtbTcseG1tNgorCW1vdmRxYSAgICB4bW0yLHhtbTAKKwltb3ZkcWEgICAgeG1tNix4bW03CisJcG1hZGR3ZCAgIHhtbTAsW0dPVE9GRihlYngsUFdfTUYwNTBfTUYyNTYpXQk7IHhtbTA9dG1wMUwKKwlwbWFkZHdkICAgeG1tNyxbR09UT0ZGKGVieCxQV19NRjA1MF9NRjI1NildCTsgeG1tNz10bXAxSAorCXBtYWRkd2QgICB4bW0yLFtHT1RPRkYoZWJ4LFBXX01GMjU2X0YwNTApXQk7IHhtbTI9dG1wMkwKKwlwbWFkZHdkICAgeG1tNixbR09UT0ZGKGVieCxQV19NRjI1Nl9GMDUwKV0JOyB4bW02PXRtcDJICisKKwlwYWRkZAl4bW0wLHhtbTUJCTsgeG1tMD10bXAxTAorCXBhZGRkCXhtbTcseG1tNAkJOyB4bW03PXRtcDFICisJcGFkZGQJeG1tMiwgWE1NV09SRCBbd2soMTApXQk7IHhtbTI9dG1wMkwKKwlwYWRkZAl4bW02LCBYTU1XT1JEIFt3aygxMSldCTsgeG1tNj10bXAySAorCisJbW92ZHFhCVhNTVdPUkQgW3drKDEwKV0sIHhtbTAJOyB3aygxMCk9dG1wMUwKKwltb3ZkcWEJWE1NV09SRCBbd2soMTEpXSwgeG1tNwk7IHdrKDExKT10bXAxSAorCisJOyAtLSBGaW5hbCBvdXRwdXQgc3RhZ2UKKworCW1vdmRxYQl4bW01LCBYTU1XT1JEIFt3aygwKV0JOyB4bW01PXRtcDEwTAorCW1vdmRxYQl4bW00LCBYTU1XT1JEIFt3aygxKV0JOyB4bW00PXRtcDEwSAorCisJbW92ZHFhCXhtbTAseG1tNQorCW1vdmRxYQl4bW03LHhtbTQKKwlwYWRkZAl4bW01LHhtbTEJCTsgeG1tNT1kYXRhMEwKKwlwYWRkZAl4bW00LHhtbTMJCTsgeG1tND1kYXRhMEgKKwlwc3ViZAl4bW0wLHhtbTEJCTsgeG1tMD1kYXRhN0wKKwlwc3ViZAl4bW03LHhtbTMJCTsgeG1tNz1kYXRhN0gKKworCW1vdmRxYQl4bW0xLFtHT1RPRkYoZWJ4LFBEX0RFU0NBTEVfUDIpXQk7IHhtbTE9W1BEX0RFU0NBTEVfUDJdCisKKwlwYWRkZAl4bW01LHhtbTEKKwlwYWRkZAl4bW00LHhtbTEKKwlwc3JhZAl4bW01LERFU0NBTEVfUDIKKwlwc3JhZAl4bW00LERFU0NBTEVfUDIKKwlwYWRkZAl4bW0wLHhtbTEKKwlwYWRkZAl4bW03LHhtbTEKKwlwc3JhZAl4bW0wLERFU0NBTEVfUDIKKwlwc3JhZAl4bW03LERFU0NBTEVfUDIKKworCXBhY2tzc2R3ICB4bW01LHhtbTQJCTsgeG1tNT1kYXRhMD0oMDAgMTAgMjAgMzAgNDAgNTAgNjAgNzApCisJcGFja3NzZHcgIHhtbTAseG1tNwkJOyB4bW0wPWRhdGE3PSgwNyAxNyAyNyAzNyA0NyA1NyA2NyA3NykKKworCW1vdmRxYQl4bW0zLCBYTU1XT1JEIFt3ayg0KV0JOyB4bW0zPXRtcDExTAorCW1vdmRxYQl4bW0xLCBYTU1XT1JEIFt3ayg1KV0JOyB4bW0xPXRtcDExSAorCisJbW92ZHFhCXhtbTQseG1tMworCW1vdmRxYQl4bW03LHhtbTEKKwlwYWRkZAl4bW0zLHhtbTIJCTsgeG1tMz1kYXRhMUwKKwlwYWRkZAl4bW0xLHhtbTYJCTsgeG1tMT1kYXRhMUgKKwlwc3ViZAl4bW00LHhtbTIJCTsgeG1tND1kYXRhNkwKKwlwc3ViZAl4bW03LHhtbTYJCTsgeG1tNz1kYXRhNkgKKworCW1vdmRxYQl4bW0yLFtHT1RPRkYoZWJ4LFBEX0RFU0NBTEVfUDIpXQk7IHhtbTI9W1BEX0RFU0NBTEVfUDJdCisKKwlwYWRkZAl4bW0zLHhtbTIKKwlwYWRkZAl4bW0xLHhtbTIKKwlwc3JhZAl4bW0zLERFU0NBTEVfUDIKKwlwc3JhZAl4bW0xLERFU0NBTEVfUDIKKwlwYWRkZAl4bW00LHhtbTIKKwlwYWRkZAl4bW03LHhtbTIKKwlwc3JhZAl4bW00LERFU0NBTEVfUDIKKwlwc3JhZAl4bW03LERFU0NBTEVfUDIKKworCXBhY2tzc2R3ICB4bW0zLHhtbTEJCTsgeG1tMz1kYXRhMT0oMDEgMTEgMjEgMzEgNDEgNTEgNjEgNzEpCisJcGFja3NzZHcgIHhtbTQseG1tNwkJOyB4bW00PWRhdGE2PSgwNiAxNiAyNiAzNiA0NiA1NiA2NiA3NikKKworCXBhY2tzc3diICB4bW01LHhtbTQJCTsgeG1tNT0oMDAgMTAgMjAgMzAgNDAgNTAgNjAgNzAgMDYgMTYgMjYgMzYgNDYgNTYgNjYgNzYpCisJcGFja3Nzd2IgIHhtbTMseG1tMAkJOyB4bW0zPSgwMSAxMSAyMSAzMSA0MSA1MSA2MSA3MSAwNyAxNyAyNyAzNyA0NyA1NyA2NyA3NykKKworCW1vdmRxYQl4bW02LCBYTU1XT1JEIFt3ayg2KV0JOyB4bW02PXRtcDEyTAorCW1vdmRxYQl4bW0yLCBYTU1XT1JEIFt3ayg3KV0JOyB4bW0yPXRtcDEySAorCW1vdmRxYQl4bW0xLCBYTU1XT1JEIFt3aygxMCldCTsgeG1tMT10bXAxTAorCW1vdmRxYQl4bW03LCBYTU1XT1JEIFt3aygxMSldCTsgeG1tNz10bXAxSAorCisJbW92ZHFhCVhNTVdPUkQgW3drKDApXSwgeG1tNQk7IHdrKDApPSgwMCAxMCAyMCAzMCA0MCA1MCA2MCA3MCAwNiAxNiAyNiAzNiA0NiA1NiA2NiA3NikKKwltb3ZkcWEJWE1NV09SRCBbd2soMSldLCB4bW0zCTsgd2soMSk9KDAxIDExIDIxIDMxIDQxIDUxIDYxIDcxIDA3IDE3IDI3IDM3IDQ3IDU3IDY3IDc3KQorCisJbW92ZHFhCXhtbTQseG1tNgorCW1vdmRxYQl4bW0wLHhtbTIKKwlwYWRkZAl4bW02LHhtbTEJCTsgeG1tNj1kYXRhMkwKKwlwYWRkZAl4bW0yLHhtbTcJCTsgeG1tMj1kYXRhMkgKKwlwc3ViZAl4bW00LHhtbTEJCTsgeG1tND1kYXRhNUwKKwlwc3ViZAl4bW0wLHhtbTcJCTsgeG1tMD1kYXRhNUgKKworCW1vdmRxYQl4bW01LFtHT1RPRkYoZWJ4LFBEX0RFU0NBTEVfUDIpXQk7IHhtbTU9W1BEX0RFU0NBTEVfUDJdCisKKwlwYWRkZAl4bW02LHhtbTUKKwlwYWRkZAl4bW0yLHhtbTUKKwlwc3JhZAl4bW02LERFU0NBTEVfUDIKKwlwc3JhZAl4bW0yLERFU0NBTEVfUDIKKwlwYWRkZAl4bW00LHhtbTUKKwlwYWRkZAl4bW0wLHhtbTUKKwlwc3JhZAl4bW00LERFU0NBTEVfUDIKKwlwc3JhZAl4bW0wLERFU0NBTEVfUDIKKworCXBhY2tzc2R3ICB4bW02LHhtbTIJCTsgeG1tNj1kYXRhMj0oMDIgMTIgMjIgMzIgNDIgNTIgNjIgNzIpCisJcGFja3NzZHcgIHhtbTQseG1tMAkJOyB4bW00PWRhdGE1PSgwNSAxNSAyNSAzNSA0NSA1NSA2NSA3NSkKKworCW1vdmRxYQl4bW0zLCBYTU1XT1JEIFt3aygyKV0JOyB4bW0zPXRtcDEzTAorCW1vdmRxYQl4bW0xLCBYTU1XT1JEIFt3aygzKV0JOyB4bW0xPXRtcDEzSAorCW1vdmRxYQl4bW03LCBYTU1XT1JEIFt3ayg4KV0JOyB4bW03PXRtcDBMCisJbW92ZHFhCXhtbTUsIFhNTVdPUkQgW3drKDkpXQk7IHhtbTU9dG1wMEgKKworCW1vdmRxYQl4bW0yLHhtbTMKKwltb3ZkcWEJeG1tMCx4bW0xCisJcGFkZGQJeG1tMyx4bW03CQk7IHhtbTM9ZGF0YTNMCisJcGFkZGQJeG1tMSx4bW01CQk7IHhtbTE9ZGF0YTNICisJcHN1YmQJeG1tMix4bW03CQk7IHhtbTI9ZGF0YTRMCisJcHN1YmQJeG1tMCx4bW01CQk7IHhtbTA9ZGF0YTRICisKKwltb3ZkcWEJeG1tNyxbR09UT0ZGKGVieCxQRF9ERVNDQUxFX1AyKV0JOyB4bW03PVtQRF9ERVNDQUxFX1AyXQorCisJcGFkZGQJeG1tMyx4bW03CisJcGFkZGQJeG1tMSx4bW03CisJcHNyYWQJeG1tMyxERVNDQUxFX1AyCisJcHNyYWQJeG1tMSxERVNDQUxFX1AyCisJcGFkZGQJeG1tMix4bW03CisJcGFkZGQJeG1tMCx4bW03CisJcHNyYWQJeG1tMixERVNDQUxFX1AyCisJcHNyYWQJeG1tMCxERVNDQUxFX1AyCisKKwltb3ZkcWEgICAgeG1tNSxbR09UT0ZGKGVieCxQQl9DRU5URVJKU0FNUCldCTsgeG1tNT1bUEJfQ0VOVEVSSlNBTVBdCisKKwlwYWNrc3NkdyAgeG1tMyx4bW0xCQk7IHhtbTM9ZGF0YTM9KDAzIDEzIDIzIDMzIDQzIDUzIDYzIDczKQorCXBhY2tzc2R3ICB4bW0yLHhtbTAJCTsgeG1tMj1kYXRhND0oMDQgMTQgMjQgMzQgNDQgNTQgNjQgNzQpCisKKwltb3ZkcWEgICAgeG1tNywgWE1NV09SRCBbd2soMCldCTsgeG1tNz0oMDAgMTAgMjAgMzAgNDAgNTAgNjAgNzAgMDYgMTYgMjYgMzYgNDYgNTYgNjYgNzYpCisJbW92ZHFhICAgIHhtbTEsIFhNTVdPUkQgW3drKDEpXQk7IHhtbTE9KDAxIDExIDIxIDMxIDQxIDUxIDYxIDcxIDA3IDE3IDI3IDM3IDQ3IDU3IDY3IDc3KQorCisJcGFja3Nzd2IgIHhtbTYseG1tMgkJOyB4bW02PSgwMiAxMiAyMiAzMiA0MiA1MiA2MiA3MiAwNCAxNCAyNCAzNCA0NCA1NCA2NCA3NCkKKwlwYWNrc3N3YiAgeG1tMyx4bW00CQk7IHhtbTM9KDAzIDEzIDIzIDMzIDQzIDUzIDYzIDczIDA1IDE1IDI1IDM1IDQ1IDU1IDY1IDc1KQorCisJcGFkZGIgICAgIHhtbTcseG1tNQorCXBhZGRiICAgICB4bW0xLHhtbTUKKwlwYWRkYiAgICAgeG1tNix4bW01CisJcGFkZGIgICAgIHhtbTMseG1tNQorCisJbW92ZHFhICAgIHhtbTAseG1tNwk7IHRyYW5zcG9zZSBjb2VmZmljaWVudHMocGhhc2UgMSkKKwlwdW5wY2tsYncgeG1tNyx4bW0xCTsgeG1tNz0oMDAgMDEgMTAgMTEgMjAgMjEgMzAgMzEgNDAgNDEgNTAgNTEgNjAgNjEgNzAgNzEpCisJcHVucGNraGJ3IHhtbTAseG1tMQk7IHhtbTA9KDA2IDA3IDE2IDE3IDI2IDI3IDM2IDM3IDQ2IDQ3IDU2IDU3IDY2IDY3IDc2IDc3KQorCW1vdmRxYSAgICB4bW0yLHhtbTYJOyB0cmFuc3Bvc2UgY29lZmZpY2llbnRzKHBoYXNlIDEpCisJcHVucGNrbGJ3IHhtbTYseG1tMwk7IHhtbTY9KDAyIDAzIDEyIDEzIDIyIDIzIDMyIDMzIDQyIDQzIDUyIDUzIDYyIDYzIDcyIDczKQorCXB1bnBja2hidyB4bW0yLHhtbTMJOyB4bW0yPSgwNCAwNSAxNCAxNSAyNCAyNSAzNCAzNSA0NCA0NSA1NCA1NSA2NCA2NSA3NCA3NSkKKworCW1vdmRxYSAgICB4bW00LHhtbTcJOyB0cmFuc3Bvc2UgY29lZmZpY2llbnRzKHBoYXNlIDIpCisJcHVucGNrbHdkIHhtbTcseG1tNgk7IHhtbTc9KDAwIDAxIDAyIDAzIDEwIDExIDEyIDEzIDIwIDIxIDIyIDIzIDMwIDMxIDMyIDMzKQorCXB1bnBja2h3ZCB4bW00LHhtbTYJOyB4bW00PSg0MCA0MSA0MiA0MyA1MCA1MSA1MiA1MyA2MCA2MSA2MiA2MyA3MCA3MSA3MiA3MykKKwltb3ZkcWEgICAgeG1tNSx4bW0yCTsgdHJhbnNwb3NlIGNvZWZmaWNpZW50cyhwaGFzZSAyKQorCXB1bnBja2x3ZCB4bW0yLHhtbTAJOyB4bW0yPSgwNCAwNSAwNiAwNyAxNCAxNSAxNiAxNyAyNCAyNSAyNiAyNyAzNCAzNSAzNiAzNykKKwlwdW5wY2tod2QgeG1tNSx4bW0wCTsgeG1tNT0oNDQgNDUgNDYgNDcgNTQgNTUgNTYgNTcgNjQgNjUgNjYgNjcgNzQgNzUgNzYgNzcpCisKKwltb3ZkcWEgICAgeG1tMSx4bW03CTsgdHJhbnNwb3NlIGNvZWZmaWNpZW50cyhwaGFzZSAzKQorCXB1bnBja2xkcSB4bW03LHhtbTIJOyB4bW03PSgwMCAwMSAwMiAwMyAwNCAwNSAwNiAwNyAxMCAxMSAxMiAxMyAxNCAxNSAxNiAxNykKKwlwdW5wY2toZHEgeG1tMSx4bW0yCTsgeG1tMT0oMjAgMjEgMjIgMjMgMjQgMjUgMjYgMjcgMzAgMzEgMzIgMzMgMzQgMzUgMzYgMzcpCisJbW92ZHFhICAgIHhtbTMseG1tNAk7IHRyYW5zcG9zZSBjb2VmZmljaWVudHMocGhhc2UgMykKKwlwdW5wY2tsZHEgeG1tNCx4bW01CTsgeG1tND0oNDAgNDEgNDIgNDMgNDQgNDUgNDYgNDcgNTAgNTEgNTIgNTMgNTQgNTUgNTYgNTcpCisJcHVucGNraGRxIHhtbTMseG1tNQk7IHhtbTM9KDYwIDYxIDYyIDYzIDY0IDY1IDY2IDY3IDcwIDcxIDcyIDczIDc0IDc1IDc2IDc3KQorCisJcHNodWZkCXhtbTYseG1tNywweDRFCTsgeG1tNj0oMTAgMTEgMTIgMTMgMTQgMTUgMTYgMTcgMDAgMDEgMDIgMDMgMDQgMDUgMDYgMDcpCisJcHNodWZkCXhtbTAseG1tMSwweDRFCTsgeG1tMD0oMzAgMzEgMzIgMzMgMzQgMzUgMzYgMzcgMjAgMjEgMjIgMjMgMjQgMjUgMjYgMjcpCisJcHNodWZkCXhtbTIseG1tNCwweDRFCTsgeG1tMj0oNTAgNTEgNTIgNTMgNTQgNTUgNTYgNTcgNDAgNDEgNDIgNDMgNDQgNDUgNDYgNDcpCisJcHNodWZkCXhtbTUseG1tMywweDRFCTsgeG1tNT0oNzAgNzEgNzIgNzMgNzQgNzUgNzYgNzcgNjAgNjEgNjIgNjMgNjQgNjUgNjYgNjcpCisKKwltb3YJZWR4LCBKU0FNUFJPVyBbZWRpKzAqU0laRU9GX0pTQU1QUk9XXQorCW1vdgllc2ksIEpTQU1QUk9XIFtlZGkrMipTSVpFT0ZfSlNBTVBST1ddCisJbW92cQlYTU1fTU1XT1JEIFtlZHgrZWF4KlNJWkVPRl9KU0FNUExFXSwgeG1tNworCW1vdnEJWE1NX01NV09SRCBbZXNpK2VheCpTSVpFT0ZfSlNBTVBMRV0sIHhtbTEKKwltb3YJZWR4LCBKU0FNUFJPVyBbZWRpKzQqU0laRU9GX0pTQU1QUk9XXQorCW1vdgllc2ksIEpTQU1QUk9XIFtlZGkrNipTSVpFT0ZfSlNBTVBST1ddCisJbW92cQlYTU1fTU1XT1JEIFtlZHgrZWF4KlNJWkVPRl9KU0FNUExFXSwgeG1tNAorCW1vdnEJWE1NX01NV09SRCBbZXNpK2VheCpTSVpFT0ZfSlNBTVBMRV0sIHhtbTMKKworCW1vdgllZHgsIEpTQU1QUk9XIFtlZGkrMSpTSVpFT0ZfSlNBTVBST1ddCisJbW92CWVzaSwgSlNBTVBST1cgW2VkaSszKlNJWkVPRl9KU0FNUFJPV10KKwltb3ZxCVhNTV9NTVdPUkQgW2VkeCtlYXgqU0laRU9GX0pTQU1QTEVdLCB4bW02CisJbW92cQlYTU1fTU1XT1JEIFtlc2krZWF4KlNJWkVPRl9KU0FNUExFXSwgeG1tMAorCW1vdgllZHgsIEpTQU1QUk9XIFtlZGkrNSpTSVpFT0ZfSlNBTVBST1ddCisJbW92CWVzaSwgSlNBTVBST1cgW2VkaSs3KlNJWkVPRl9KU0FNUFJPV10KKwltb3ZxCVhNTV9NTVdPUkQgW2VkeCtlYXgqU0laRU9GX0pTQU1QTEVdLCB4bW0yCisJbW92cQlYTU1fTU1XT1JEIFtlc2krZWF4KlNJWkVPRl9KU0FNUExFXSwgeG1tNQorCisJcG9wCWVkaQorCXBvcAllc2kKKzsJcG9wCWVkeAkJOyBuZWVkIG5vdCBiZSBwcmVzZXJ2ZWQKKzsJcG9wCWVjeAkJOyB1bnVzZWQKKwlwb3BwaWMJZWJ4CisJbW92CWVzcCxlYnAJCTsgZXNwIDwtIGFsaWduZWQgZWJwCisJcG9wCWVzcAkJOyBlc3AgPC0gb3JpZ2luYWwgZWJwCisJcG9wCWVicAorCXJldAorCis7IEZvciBzb21lIHJlYXNvbiwgdGhlIE9TIFggbGlua2VyIGRvZXMgbm90IGhvbm9yIHRoZSByZXF1ZXN0IHRvIGFsaWduIHRoZQorOyBzZWdtZW50IHVubGVzcyB3ZSBkbyB0aGlzLgorCWFsaWduCTE2CmRpZmYgLS1naXQgYS9zaW1kL2ppc3MycmVkLTY0LmFzbSBiL3NpbWQvamlzczJyZWQtNjQuYXNtCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjY4MDdmMTcKLS0tIC9kZXYvbnVsbAorKysgYi9zaW1kL2ppc3MycmVkLTY0LmFzbQpAQCAtMCwwICsxLDU3NiBAQAorOworOyBqaXNzMnJlZC02NC5hc20gLSByZWR1Y2VkLXNpemUgSURDVCAoNjQtYml0IFNTRTIpCis7Cis7IENvcHlyaWdodCAyMDA5IFBpZXJyZSBPc3NtYW4gPG9zc21hbkBjZW5kaW8uc2U+IGZvciBDZW5kaW8gQUIKKzsgQ29weXJpZ2h0IDIwMDkgRC4gUi4gQ29tbWFuZGVyCis7Cis7IEJhc2VkIG9uCis7IHg4NiBTSU1EIGV4dGVuc2lvbiBmb3IgSUpHIEpQRUcgbGlicmFyeQorOyBDb3B5cmlnaHQgKEMpIDE5OTktMjAwNiwgTUlZQVNBS0EgTWFzYXJ1LgorOyBGb3IgY29uZGl0aW9ucyBvZiBkaXN0cmlidXRpb24gYW5kIHVzZSwgc2VlIGNvcHlyaWdodCBub3RpY2UgaW4ganNpbWRleHQuaW5jCis7Cis7IFRoaXMgZmlsZSBzaG91bGQgYmUgYXNzZW1ibGVkIHdpdGggTkFTTSAoTmV0d2lkZSBBc3NlbWJsZXIpLAorOyBjYW4gKm5vdCogYmUgYXNzZW1ibGVkIHdpdGggTWljcm9zb2Z0J3MgTUFTTSBvciBhbnkgY29tcGF0aWJsZQorOyBhc3NlbWJsZXIgKGluY2x1ZGluZyBCb3JsYW5kJ3MgVHVyYm8gQXNzZW1ibGVyKS4KKzsgTkFTTSBpcyBhdmFpbGFibGUgZnJvbSBodHRwOi8vbmFzbS5zb3VyY2Vmb3JnZS5uZXQvIG9yCis7IGh0dHA6Ly9zb3VyY2Vmb3JnZS5uZXQvcHJvamVjdC9zaG93ZmlsZXMucGhwP2dyb3VwX2lkPTYyMDgKKzsKKzsgVGhpcyBmaWxlIGNvbnRhaW5zIGludmVyc2UtRENUIHJvdXRpbmVzIHRoYXQgcHJvZHVjZSByZWR1Y2VkLXNpemUKKzsgb3V0cHV0OiBlaXRoZXIgNHg0IG9yIDJ4MiBwaXhlbHMgZnJvbSBhbiA4eDggRENUIGJsb2NrLgorOyBUaGUgZm9sbG93aW5nIGNvZGUgaXMgYmFzZWQgZGlyZWN0bHkgb24gdGhlIElKRydzIG9yaWdpbmFsIGppZGN0cmVkLmM7Cis7IHNlZSB0aGUgamlkY3RyZWQuYyBmb3IgbW9yZSBkZXRhaWxzLgorOworOyBbVEFCOF0KKworJWluY2x1ZGUgImpzaW1kZXh0LmluYyIKKyVpbmNsdWRlICJqZGN0LmluYyIKKworOyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCislZGVmaW5lIENPTlNUX0JJVFMJMTMKKyVkZWZpbmUgUEFTUzFfQklUUwkyCisKKyVkZWZpbmUgREVTQ0FMRV9QMV80CShDT05TVF9CSVRTLVBBU1MxX0JJVFMrMSkKKyVkZWZpbmUgREVTQ0FMRV9QMl80CShDT05TVF9CSVRTK1BBU1MxX0JJVFMrMysxKQorJWRlZmluZSBERVNDQUxFX1AxXzIJKENPTlNUX0JJVFMtUEFTUzFfQklUUysyKQorJWRlZmluZSBERVNDQUxFX1AyXzIJKENPTlNUX0JJVFMrUEFTUzFfQklUUyszKzIpCisKKyVpZiBDT05TVF9CSVRTID09IDEzCitGXzBfMjExCWVxdQkgMTczMAkJOyBGSVgoMC4yMTExNjQyNDMpCitGXzBfNTA5CWVxdQkgNDE3NgkJOyBGSVgoMC41MDk3OTU1NzkpCitGXzBfNjAxCWVxdQkgNDkyNgkJOyBGSVgoMC42MDEzNDQ4ODcpCitGXzBfNzIwCWVxdQkgNTkwNgkJOyBGSVgoMC43MjA5NTk4MjIpCitGXzBfNzY1CWVxdQkgNjI3MAkJOyBGSVgoMC43NjUzNjY4NjUpCitGXzBfODUwCWVxdQkgNjk2NwkJOyBGSVgoMC44NTA0MzAwOTUpCitGXzBfODk5CWVxdQkgNzM3MwkJOyBGSVgoMC44OTk5NzYyMjMpCitGXzFfMDYxCWVxdQkgODY5NwkJOyBGSVgoMS4wNjE1OTQzMzcpCitGXzFfMjcyCWVxdQkxMDQyNgkJOyBGSVgoMS4yNzI3NTg1ODApCitGXzFfNDUxCWVxdQkxMTg5MwkJOyBGSVgoMS40NTE3NzQ5ODEpCitGXzFfODQ3CWVxdQkxNTEzNwkJOyBGSVgoMS44NDc3NTkwNjUpCitGXzJfMTcyCWVxdQkxNzc5OQkJOyBGSVgoMi4xNzI3MzQ4MDMpCitGXzJfNTYyCWVxdQkyMDk5NQkJOyBGSVgoMi41NjI5MTU0NDcpCitGXzNfNjI0CWVxdQkyOTY5MgkJOyBGSVgoMy42MjQ1MDk3ODUpCislZWxzZQorOyBOQVNNIGNhbm5vdCBkbyBjb21waWxlLXRpbWUgYXJpdGhtZXRpYyBvbiBmbG9hdGluZy1wb2ludCBjb25zdGFudHMuCislZGVmaW5lIERFU0NBTEUoeCxuKSAgKCgoeCkrKDE8PCgobiktMSkpKT4+KG4pKQorRl8wXzIxMQllcXUJREVTQ0FMRSggMjI2NzM1ODc5LDMwLUNPTlNUX0JJVFMpCTsgRklYKDAuMjExMTY0MjQzKQorRl8wXzUwOQllcXUJREVTQ0FMRSggNTQ3Mzg4ODM0LDMwLUNPTlNUX0JJVFMpCTsgRklYKDAuNTA5Nzk1NTc5KQorRl8wXzYwMQllcXUJREVTQ0FMRSggNjQ1Njg5MTU1LDMwLUNPTlNUX0JJVFMpCTsgRklYKDAuNjAxMzQ0ODg3KQorRl8wXzcyMAllcXUJREVTQ0FMRSggNzc0MTI0NzE0LDMwLUNPTlNUX0JJVFMpCTsgRklYKDAuNzIwOTU5ODIyKQorRl8wXzc2NQllcXUJREVTQ0FMRSggODIxODA2NDEzLDMwLUNPTlNUX0JJVFMpCTsgRklYKDAuNzY1MzY2ODY1KQorRl8wXzg1MAllcXUJREVTQ0FMRSggOTEzMTQyMzYxLDMwLUNPTlNUX0JJVFMpCTsgRklYKDAuODUwNDMwMDk1KQorRl8wXzg5OQllcXUJREVTQ0FMRSggOTY2MzQyMTExLDMwLUNPTlNUX0JJVFMpCTsgRklYKDAuODk5OTc2MjIzKQorRl8xXzA2MQllcXUJREVTQ0FMRSgxMTM5ODc4MjM5LDMwLUNPTlNUX0JJVFMpCTsgRklYKDEuMDYxNTk0MzM3KQorRl8xXzI3MgllcXUJREVTQ0FMRSgxMzY2NjE0MTE5LDMwLUNPTlNUX0JJVFMpCTsgRklYKDEuMjcyNzU4NTgwKQorRl8xXzQ1MQllcXUJREVTQ0FMRSgxNTU4ODMxNTE2LDMwLUNPTlNUX0JJVFMpCTsgRklYKDEuNDUxNzc0OTgxKQorRl8xXzg0NwllcXUJREVTQ0FMRSgxOTg0MDE2MTg4LDMwLUNPTlNUX0JJVFMpCTsgRklYKDEuODQ3NzU5MDY1KQorRl8yXzE3MgllcXUJREVTQ0FMRSgyMzMyOTU2MjMwLDMwLUNPTlNUX0JJVFMpCTsgRklYKDIuMTcyNzM0ODAzKQorRl8yXzU2MgllcXUJREVTQ0FMRSgyNzUxOTA5NTA2LDMwLUNPTlNUX0JJVFMpCTsgRklYKDIuNTYyOTE1NDQ3KQorRl8zXzYyNAllcXUJREVTQ0FMRSgzODkxNzg3NzQ3LDMwLUNPTlNUX0JJVFMpCTsgRklYKDMuNjI0NTA5Nzg1KQorJWVuZGlmCisKKzsgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKwlTRUNUSU9OCVNFR19DT05TVAorCisJYWxpZ256CTE2CisJZ2xvYmFsCUVYVE4oamNvbnN0X2lkY3RfcmVkX3NzZTIpCisKK0VYVE4oamNvbnN0X2lkY3RfcmVkX3NzZTIpOgorCitQV19GMTg0X01GMDc2CXRpbWVzIDQgZHcgIEZfMV84NDcsLUZfMF83NjUKK1BXX0YyNTZfRjA4OQl0aW1lcyA0IGR3ICBGXzJfNTYyLCBGXzBfODk5CitQV19GMTA2X01GMjE3CXRpbWVzIDQgZHcgIEZfMV8wNjEsLUZfMl8xNzIKK1BXX01GMDYwX01GMDUwCXRpbWVzIDQgZHcgLUZfMF82MDEsLUZfMF81MDkKK1BXX0YxNDVfTUYwMjEJdGltZXMgNCBkdyAgRl8xXzQ1MSwtRl8wXzIxMQorUFdfRjM2Ml9NRjEyNwl0aW1lcyA0IGR3ICBGXzNfNjI0LC1GXzFfMjcyCitQV19GMDg1X01GMDcyCXRpbWVzIDQgZHcgIEZfMF84NTAsLUZfMF83MjAKK1BEX0RFU0NBTEVfUDFfNAl0aW1lcyA0IGRkICAxIDw8IChERVNDQUxFX1AxXzQtMSkKK1BEX0RFU0NBTEVfUDJfNAl0aW1lcyA0IGRkICAxIDw8IChERVNDQUxFX1AyXzQtMSkKK1BEX0RFU0NBTEVfUDFfMgl0aW1lcyA0IGRkICAxIDw8IChERVNDQUxFX1AxXzItMSkKK1BEX0RFU0NBTEVfUDJfMgl0aW1lcyA0IGRkICAxIDw8IChERVNDQUxFX1AyXzItMSkKK1BCX0NFTlRFUkpTQU1QCXRpbWVzIDE2IGRiIENFTlRFUkpTQU1QTEUKKworCWFsaWduegkxNgorCis7IC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisJU0VDVElPTglTRUdfVEVYVAorCUJJVFMJNjQKKzsKKzsgUGVyZm9ybSBkZXF1YW50aXphdGlvbiBhbmQgaW52ZXJzZSBEQ1Qgb24gb25lIGJsb2NrIG9mIGNvZWZmaWNpZW50cywKKzsgcHJvZHVjaW5nIGEgcmVkdWNlZC1zaXplIDR4NCBvdXRwdXQgYmxvY2suCis7Cis7IEdMT0JBTCh2b2lkKQorOyBqc2ltZF9pZGN0XzR4NF9zc2UyICh2b2lkICogZGN0X3RhYmxlLCBKQ09FRlBUUiBjb2VmX2Jsb2NrLAorOyAgICAgICAgICAgICAgICAgICAgICBKU0FNUEFSUkFZIG91dHB1dF9idWYsIEpESU1FTlNJT04gb3V0cHV0X2NvbCkKKzsKKworOyByMTAgPSB2b2lkICogZGN0X3RhYmxlCis7IHIxMSA9IEpDT0VGUFRSIGNvZWZfYmxvY2sKKzsgcjEyID0gSlNBTVBBUlJBWSBvdXRwdXRfYnVmCis7IHIxMyA9IEpESU1FTlNJT04gb3V0cHV0X2NvbAorCislZGVmaW5lIG9yaWdpbmFsX3JicAlyYnArMAorJWRlZmluZSB3ayhpKQkJcmJwLShXS19OVU0tKGkpKSpTSVpFT0ZfWE1NV09SRAk7IHhtbXdvcmQgd2tbV0tfTlVNXQorJWRlZmluZSBXS19OVU0JCTIKKworCWFsaWduCTE2CisJZ2xvYmFsCUVYVE4oanNpbWRfaWRjdF80eDRfc3NlMikKKworRVhUTihqc2ltZF9pZGN0XzR4NF9zc2UyKToKKwlwdXNoCXJicAorCW1vdglyYXgscnNwCQkJCTsgcmF4ID0gb3JpZ2luYWwgcmJwCisJc3ViCXJzcCwgYnl0ZSA0CisJYW5kCXJzcCwgYnl0ZSAoLVNJWkVPRl9YTU1XT1JEKQk7IGFsaWduIHRvIDEyOCBiaXRzCisJbW92CVtyc3BdLHJheAorCW1vdglyYnAscnNwCQkJCTsgcmJwID0gYWxpZ25lZCByYnAKKwlsZWEJcnNwLCBbd2soMCldCisJY29sbGVjdF9hcmdzCisKKwk7IC0tLS0gUGFzcyAxOiBwcm9jZXNzIGNvbHVtbnMgZnJvbSBpbnB1dC4KKworCW1vdglyZHgsIHIxMAk7IHF1YW50cHRyCisJbW92CXJzaSwgcjExCQk7IGlucHRyCisKKyVpZm5kZWYgTk9fWkVST19DT0xVTU5fVEVTVF80WDRfU1NFMgorCW1vdgllYXgsIERXT1JEIFtEV0JMT0NLKDEsMCxyc2ksU0laRU9GX0pDT0VGKV0KKwlvcgllYXgsIERXT1JEIFtEV0JMT0NLKDIsMCxyc2ksU0laRU9GX0pDT0VGKV0KKwlqbnoJc2hvcnQgLmNvbHVtbkRDVAorCisJbW92ZHFhCXhtbTAsIFhNTVdPUkQgW1hNTUJMT0NLKDEsMCxyc2ksU0laRU9GX0pDT0VGKV0KKwltb3ZkcWEJeG1tMSwgWE1NV09SRCBbWE1NQkxPQ0soMiwwLHJzaSxTSVpFT0ZfSkNPRUYpXQorCXBvcgl4bW0wLCBYTU1XT1JEIFtYTU1CTE9DSygzLDAscnNpLFNJWkVPRl9KQ09FRildCisJcG9yCXhtbTEsIFhNTVdPUkQgW1hNTUJMT0NLKDUsMCxyc2ksU0laRU9GX0pDT0VGKV0KKwlwb3IJeG1tMCwgWE1NV09SRCBbWE1NQkxPQ0soNiwwLHJzaSxTSVpFT0ZfSkNPRUYpXQorCXBvcgl4bW0xLCBYTU1XT1JEIFtYTU1CTE9DSyg3LDAscnNpLFNJWkVPRl9KQ09FRildCisJcG9yCXhtbTAseG1tMQorCXBhY2tzc3diIHhtbTAseG1tMAorCXBhY2tzc3diIHhtbTAseG1tMAorCW1vdmQJZWF4LHhtbTAKKwl0ZXN0CXJheCxyYXgKKwlqbnoJc2hvcnQgLmNvbHVtbkRDVAorCisJOyAtLSBBQyB0ZXJtcyBhbGwgemVybworCisJbW92ZHFhCXhtbTAsIFhNTVdPUkQgW1hNTUJMT0NLKDAsMCxyc2ksU0laRU9GX0pDT0VGKV0KKwlwbXVsbHcJeG1tMCwgWE1NV09SRCBbWE1NQkxPQ0soMCwwLHJkeCxTSVpFT0ZfSVNMT1dfTVVMVF9UWVBFKV0KKworCXBzbGx3CXhtbTAsUEFTUzFfQklUUworCisJbW92ZHFhICAgIHhtbTMseG1tMAk7IHhtbTA9aW4wPSgwMCAwMSAwMiAwMyAwNCAwNSAwNiAwNykKKwlwdW5wY2tsd2QgeG1tMCx4bW0wCTsgeG1tMD0oMDAgMDAgMDEgMDEgMDIgMDIgMDMgMDMpCisJcHVucGNraHdkIHhtbTMseG1tMwk7IHhtbTM9KDA0IDA0IDA1IDA1IDA2IDA2IDA3IDA3KQorCisJcHNodWZkCXhtbTEseG1tMCwweDUwCTsgeG1tMT1bY29sMCBjb2wxXT0oMDAgMDAgMDAgMDAgMDEgMDEgMDEgMDEpCisJcHNodWZkCXhtbTAseG1tMCwweEZBCTsgeG1tMD1bY29sMiBjb2wzXT0oMDIgMDIgMDIgMDIgMDMgMDMgMDMgMDMpCisJcHNodWZkCXhtbTYseG1tMywweDUwCTsgeG1tNj1bY29sNCBjb2w1XT0oMDQgMDQgMDQgMDQgMDUgMDUgMDUgMDUpCisJcHNodWZkCXhtbTMseG1tMywweEZBCTsgeG1tMz1bY29sNiBjb2w3XT0oMDYgMDYgMDYgMDYgMDcgMDcgMDcgMDcpCisKKwlqbXAJbmVhciAuY29sdW1uX2VuZAorJWVuZGlmCisuY29sdW1uRENUOgorCisJOyAtLSBPZGQgcGFydAorCisJbW92ZHFhCXhtbTAsIFhNTVdPUkQgW1hNTUJMT0NLKDEsMCxyc2ksU0laRU9GX0pDT0VGKV0KKwltb3ZkcWEJeG1tMSwgWE1NV09SRCBbWE1NQkxPQ0soMywwLHJzaSxTSVpFT0ZfSkNPRUYpXQorCXBtdWxsdwl4bW0wLCBYTU1XT1JEIFtYTU1CTE9DSygxLDAscmR4LFNJWkVPRl9JU0xPV19NVUxUX1RZUEUpXQorCXBtdWxsdwl4bW0xLCBYTU1XT1JEIFtYTU1CTE9DSygzLDAscmR4LFNJWkVPRl9JU0xPV19NVUxUX1RZUEUpXQorCW1vdmRxYQl4bW0yLCBYTU1XT1JEIFtYTU1CTE9DSyg1LDAscnNpLFNJWkVPRl9KQ09FRildCisJbW92ZHFhCXhtbTMsIFhNTVdPUkQgW1hNTUJMT0NLKDcsMCxyc2ksU0laRU9GX0pDT0VGKV0KKwlwbXVsbHcJeG1tMiwgWE1NV09SRCBbWE1NQkxPQ0soNSwwLHJkeCxTSVpFT0ZfSVNMT1dfTVVMVF9UWVBFKV0KKwlwbXVsbHcJeG1tMywgWE1NV09SRCBbWE1NQkxPQ0soNywwLHJkeCxTSVpFT0ZfSVNMT1dfTVVMVF9UWVBFKV0KKworCW1vdmRxYSAgICB4bW00LHhtbTAKKwltb3ZkcWEgICAgeG1tNSx4bW0wCisJcHVucGNrbHdkIHhtbTQseG1tMQorCXB1bnBja2h3ZCB4bW01LHhtbTEKKwltb3ZkcWEgICAgeG1tMCx4bW00CisJbW92ZHFhICAgIHhtbTEseG1tNQorCXBtYWRkd2QgICB4bW00LFtyZWwgUFdfRjI1Nl9GMDg5XQk7IHhtbTQ9KHRtcDJMKQorCXBtYWRkd2QgICB4bW01LFtyZWwgUFdfRjI1Nl9GMDg5XQk7IHhtbTU9KHRtcDJIKQorCXBtYWRkd2QgICB4bW0wLFtyZWwgUFdfRjEwNl9NRjIxN10JOyB4bW0wPSh0bXAwTCkKKwlwbWFkZHdkICAgeG1tMSxbcmVsIFBXX0YxMDZfTUYyMTddCTsgeG1tMT0odG1wMEgpCisKKwltb3ZkcWEgICAgeG1tNix4bW0yCisJbW92ZHFhICAgIHhtbTcseG1tMgorCXB1bnBja2x3ZCB4bW02LHhtbTMKKwlwdW5wY2tod2QgeG1tNyx4bW0zCisJbW92ZHFhICAgIHhtbTIseG1tNgorCW1vdmRxYSAgICB4bW0zLHhtbTcKKwlwbWFkZHdkICAgeG1tNixbcmVsIFBXX01GMDYwX01GMDUwXQk7IHhtbTY9KHRtcDJMKQorCXBtYWRkd2QgICB4bW03LFtyZWwgUFdfTUYwNjBfTUYwNTBdCTsgeG1tNz0odG1wMkgpCisJcG1hZGR3ZCAgIHhtbTIsW3JlbCBQV19GMTQ1X01GMDIxXQk7IHhtbTI9KHRtcDBMKQorCXBtYWRkd2QgICB4bW0zLFtyZWwgUFdfRjE0NV9NRjAyMV0JOyB4bW0zPSh0bXAwSCkKKworCXBhZGRkCXhtbTYseG1tNAkJOyB4bW02PXRtcDJMCisJcGFkZGQJeG1tNyx4bW01CQk7IHhtbTc9dG1wMkgKKwlwYWRkZAl4bW0yLHhtbTAJCTsgeG1tMj10bXAwTAorCXBhZGRkCXhtbTMseG1tMQkJOyB4bW0zPXRtcDBICisKKwltb3ZkcWEJWE1NV09SRCBbd2soMCldLCB4bW0yCTsgd2soMCk9dG1wMEwKKwltb3ZkcWEJWE1NV09SRCBbd2soMSldLCB4bW0zCTsgd2soMSk9dG1wMEgKKworCTsgLS0gRXZlbiBwYXJ0CisKKwltb3ZkcWEJeG1tNCwgWE1NV09SRCBbWE1NQkxPQ0soMCwwLHJzaSxTSVpFT0ZfSkNPRUYpXQorCW1vdmRxYQl4bW01LCBYTU1XT1JEIFtYTU1CTE9DSygyLDAscnNpLFNJWkVPRl9KQ09FRildCisJbW92ZHFhCXhtbTAsIFhNTVdPUkQgW1hNTUJMT0NLKDYsMCxyc2ksU0laRU9GX0pDT0VGKV0KKwlwbXVsbHcJeG1tNCwgWE1NV09SRCBbWE1NQkxPQ0soMCwwLHJkeCxTSVpFT0ZfSVNMT1dfTVVMVF9UWVBFKV0KKwlwbXVsbHcJeG1tNSwgWE1NV09SRCBbWE1NQkxPQ0soMiwwLHJkeCxTSVpFT0ZfSVNMT1dfTVVMVF9UWVBFKV0KKwlwbXVsbHcJeG1tMCwgWE1NV09SRCBbWE1NQkxPQ0soNiwwLHJkeCxTSVpFT0ZfSVNMT1dfTVVMVF9UWVBFKV0KKworCXB4b3IgICAgICB4bW0xLHhtbTEKKwlweG9yICAgICAgeG1tMix4bW0yCisJcHVucGNrbHdkIHhtbTEseG1tNAkJOyB4bW0xPXRtcDBMCisJcHVucGNraHdkIHhtbTIseG1tNAkJOyB4bW0yPXRtcDBICisJcHNyYWQgICAgIHhtbTEsKDE2LUNPTlNUX0JJVFMtMSkgOyBwc3JhZCB4bW0xLDE2ICYgcHNsbGQgeG1tMSxDT05TVF9CSVRTKzEKKwlwc3JhZCAgICAgeG1tMiwoMTYtQ09OU1RfQklUUy0xKSA7IHBzcmFkIHhtbTIsMTYgJiBwc2xsZCB4bW0yLENPTlNUX0JJVFMrMQorCisJbW92ZHFhICAgIHhtbTMseG1tNQkJOyB4bW01PWluMj16MgorCXB1bnBja2x3ZCB4bW01LHhtbTAJCTsgeG1tMD1pbjY9ejMKKwlwdW5wY2tod2QgeG1tMyx4bW0wCisJcG1hZGR3ZCAgIHhtbTUsW3JlbCBQV19GMTg0X01GMDc2XQk7IHhtbTU9dG1wMkwKKwlwbWFkZHdkICAgeG1tMyxbcmVsIFBXX0YxODRfTUYwNzZdCTsgeG1tMz10bXAySAorCisJbW92ZHFhCXhtbTQseG1tMQorCW1vdmRxYQl4bW0wLHhtbTIKKwlwYWRkZAl4bW0xLHhtbTUJCTsgeG1tMT10bXAxMEwKKwlwYWRkZAl4bW0yLHhtbTMJCTsgeG1tMj10bXAxMEgKKwlwc3ViZAl4bW00LHhtbTUJCTsgeG1tND10bXAxMkwKKwlwc3ViZAl4bW0wLHhtbTMJCTsgeG1tMD10bXAxMkgKKworCTsgLS0gRmluYWwgb3V0cHV0IHN0YWdlCisKKwltb3ZkcWEJeG1tNSx4bW0xCisJbW92ZHFhCXhtbTMseG1tMgorCXBhZGRkCXhtbTEseG1tNgkJOyB4bW0xPWRhdGEwTAorCXBhZGRkCXhtbTIseG1tNwkJOyB4bW0yPWRhdGEwSAorCXBzdWJkCXhtbTUseG1tNgkJOyB4bW01PWRhdGEzTAorCXBzdWJkCXhtbTMseG1tNwkJOyB4bW0zPWRhdGEzSAorCisJbW92ZHFhCXhtbTYsW3JlbCBQRF9ERVNDQUxFX1AxXzRdCTsgeG1tNj1bcmVsIFBEX0RFU0NBTEVfUDFfNF0KKworCXBhZGRkCXhtbTEseG1tNgorCXBhZGRkCXhtbTIseG1tNgorCXBzcmFkCXhtbTEsREVTQ0FMRV9QMV80CisJcHNyYWQJeG1tMixERVNDQUxFX1AxXzQKKwlwYWRkZAl4bW01LHhtbTYKKwlwYWRkZAl4bW0zLHhtbTYKKwlwc3JhZAl4bW01LERFU0NBTEVfUDFfNAorCXBzcmFkCXhtbTMsREVTQ0FMRV9QMV80CisKKwlwYWNrc3NkdyAgeG1tMSx4bW0yCQk7IHhtbTE9ZGF0YTA9KDAwIDAxIDAyIDAzIDA0IDA1IDA2IDA3KQorCXBhY2tzc2R3ICB4bW01LHhtbTMJCTsgeG1tNT1kYXRhMz0oMzAgMzEgMzIgMzMgMzQgMzUgMzYgMzcpCisKKwltb3ZkcWEJeG1tNywgWE1NV09SRCBbd2soMCldCTsgeG1tNz10bXAwTAorCW1vdmRxYQl4bW02LCBYTU1XT1JEIFt3aygxKV0JOyB4bW02PXRtcDBICisKKwltb3ZkcWEJeG1tMix4bW00CisJbW92ZHFhCXhtbTMseG1tMAorCXBhZGRkCXhtbTQseG1tNwkJOyB4bW00PWRhdGExTAorCXBhZGRkCXhtbTAseG1tNgkJOyB4bW0wPWRhdGExSAorCXBzdWJkCXhtbTIseG1tNwkJOyB4bW0yPWRhdGEyTAorCXBzdWJkCXhtbTMseG1tNgkJOyB4bW0zPWRhdGEySAorCisJbW92ZHFhCXhtbTcsW3JlbCBQRF9ERVNDQUxFX1AxXzRdCTsgeG1tNz1bcmVsIFBEX0RFU0NBTEVfUDFfNF0KKworCXBhZGRkCXhtbTQseG1tNworCXBhZGRkCXhtbTAseG1tNworCXBzcmFkCXhtbTQsREVTQ0FMRV9QMV80CisJcHNyYWQJeG1tMCxERVNDQUxFX1AxXzQKKwlwYWRkZAl4bW0yLHhtbTcKKwlwYWRkZAl4bW0zLHhtbTcKKwlwc3JhZAl4bW0yLERFU0NBTEVfUDFfNAorCXBzcmFkCXhtbTMsREVTQ0FMRV9QMV80CisKKwlwYWNrc3NkdyAgeG1tNCx4bW0wCQk7IHhtbTQ9ZGF0YTE9KDEwIDExIDEyIDEzIDE0IDE1IDE2IDE3KQorCXBhY2tzc2R3ICB4bW0yLHhtbTMJCTsgeG1tMj1kYXRhMj0oMjAgMjEgMjIgMjMgMjQgMjUgMjYgMjcpCisKKwltb3ZkcWEgICAgeG1tNix4bW0xCTsgdHJhbnNwb3NlIGNvZWZmaWNpZW50cyhwaGFzZSAxKQorCXB1bnBja2x3ZCB4bW0xLHhtbTQJOyB4bW0xPSgwMCAxMCAwMSAxMSAwMiAxMiAwMyAxMykKKwlwdW5wY2tod2QgeG1tNix4bW00CTsgeG1tNj0oMDQgMTQgMDUgMTUgMDYgMTYgMDcgMTcpCisJbW92ZHFhICAgIHhtbTcseG1tMgk7IHRyYW5zcG9zZSBjb2VmZmljaWVudHMocGhhc2UgMSkKKwlwdW5wY2tsd2QgeG1tMix4bW01CTsgeG1tMj0oMjAgMzAgMjEgMzEgMjIgMzIgMjMgMzMpCisJcHVucGNraHdkIHhtbTcseG1tNQk7IHhtbTc9KDI0IDM0IDI1IDM1IDI2IDM2IDI3IDM3KQorCisJbW92ZHFhICAgIHhtbTAseG1tMQk7IHRyYW5zcG9zZSBjb2VmZmljaWVudHMocGhhc2UgMikKKwlwdW5wY2tsZHEgeG1tMSx4bW0yCTsgeG1tMT1bY29sMCBjb2wxXT0oMDAgMTAgMjAgMzAgMDEgMTEgMjEgMzEpCisJcHVucGNraGRxIHhtbTAseG1tMgk7IHhtbTA9W2NvbDIgY29sM109KDAyIDEyIDIyIDMyIDAzIDEzIDIzIDMzKQorCW1vdmRxYSAgICB4bW0zLHhtbTYJOyB0cmFuc3Bvc2UgY29lZmZpY2llbnRzKHBoYXNlIDIpCisJcHVucGNrbGRxIHhtbTYseG1tNwk7IHhtbTY9W2NvbDQgY29sNV09KDA0IDE0IDI0IDM0IDA1IDE1IDI1IDM1KQorCXB1bnBja2hkcSB4bW0zLHhtbTcJOyB4bW0zPVtjb2w2IGNvbDddPSgwNiAxNiAyNiAzNiAwNyAxNyAyNyAzNykKKy5jb2x1bW5fZW5kOgorCisJOyAtLSBQcmVmZXRjaCB0aGUgbmV4dCBjb2VmZmljaWVudCBibG9jaworCisJcHJlZmV0Y2hudGEgW3JzaSArIERDVFNJWkUyKlNJWkVPRl9KQ09FRiArIDAqMzJdCisJcHJlZmV0Y2hudGEgW3JzaSArIERDVFNJWkUyKlNJWkVPRl9KQ09FRiArIDEqMzJdCisJcHJlZmV0Y2hudGEgW3JzaSArIERDVFNJWkUyKlNJWkVPRl9KQ09FRiArIDIqMzJdCisJcHJlZmV0Y2hudGEgW3JzaSArIERDVFNJWkUyKlNJWkVPRl9KQ09FRiArIDMqMzJdCisKKwk7IC0tLS0gUGFzcyAyOiBwcm9jZXNzIHJvd3MsIHN0b3JlIGludG8gb3V0cHV0IGFycmF5LgorCisJbW92CXJheCwgW29yaWdpbmFsX3JicF0KKwltb3YJcmRpLCByMTIJOyAoSlNBTVBST1cgKikKKwltb3YJcmF4LCByMTMKKworCTsgLS0gRXZlbiBwYXJ0CisKKwlweG9yICAgICAgeG1tNCx4bW00CisJcHVucGNrbHdkIHhtbTQseG1tMQkJOyB4bW00PXRtcDAKKwlwc3JhZCAgICAgeG1tNCwoMTYtQ09OU1RfQklUUy0xKSA7IHBzcmFkIHhtbTQsMTYgJiBwc2xsZCB4bW00LENPTlNUX0JJVFMrMQorCisJOyAtLSBPZGQgcGFydAorCisJcHVucGNraHdkIHhtbTEseG1tMAorCXB1bnBja2h3ZCB4bW02LHhtbTMKKwltb3ZkcWEgICAgeG1tNSx4bW0xCisJbW92ZHFhICAgIHhtbTIseG1tNgorCXBtYWRkd2QgICB4bW0xLFtyZWwgUFdfRjI1Nl9GMDg5XQk7IHhtbTE9KHRtcDIpCisJcG1hZGR3ZCAgIHhtbTYsW3JlbCBQV19NRjA2MF9NRjA1MF0JOyB4bW02PSh0bXAyKQorCXBtYWRkd2QgICB4bW01LFtyZWwgUFdfRjEwNl9NRjIxN10JOyB4bW01PSh0bXAwKQorCXBtYWRkd2QgICB4bW0yLFtyZWwgUFdfRjE0NV9NRjAyMV0JOyB4bW0yPSh0bXAwKQorCisJcGFkZGQgICAgIHhtbTYseG1tMQkJOyB4bW02PXRtcDIKKwlwYWRkZCAgICAgeG1tMix4bW01CQk7IHhtbTI9dG1wMAorCisJOyAtLSBFdmVuIHBhcnQKKworCXB1bnBja2x3ZCB4bW0wLHhtbTMKKwlwbWFkZHdkICAgeG1tMCxbcmVsIFBXX0YxODRfTUYwNzZdCTsgeG1tMD10bXAyCisKKwltb3ZkcWEgICAgeG1tNyx4bW00CisJcGFkZGQgICAgIHhtbTQseG1tMAkJOyB4bW00PXRtcDEwCisJcHN1YmQgICAgIHhtbTcseG1tMAkJOyB4bW03PXRtcDEyCisKKwk7IC0tIEZpbmFsIG91dHB1dCBzdGFnZQorCisJbW92ZHFhCXhtbTEsW3JlbCBQRF9ERVNDQUxFX1AyXzRdCTsgeG1tMT1bcmVsIFBEX0RFU0NBTEVfUDJfNF0KKworCW1vdmRxYQl4bW01LHhtbTQKKwltb3ZkcWEJeG1tMyx4bW03CisJcGFkZGQJeG1tNCx4bW02CQk7IHhtbTQ9ZGF0YTA9KDAwIDEwIDIwIDMwKQorCXBhZGRkCXhtbTcseG1tMgkJOyB4bW03PWRhdGExPSgwMSAxMSAyMSAzMSkKKwlwc3ViZAl4bW01LHhtbTYJCTsgeG1tNT1kYXRhMz0oMDMgMTMgMjMgMzMpCisJcHN1YmQJeG1tMyx4bW0yCQk7IHhtbTM9ZGF0YTI9KDAyIDEyIDIyIDMyKQorCisJcGFkZGQJeG1tNCx4bW0xCisJcGFkZGQJeG1tNyx4bW0xCisJcHNyYWQJeG1tNCxERVNDQUxFX1AyXzQKKwlwc3JhZAl4bW03LERFU0NBTEVfUDJfNAorCXBhZGRkCXhtbTUseG1tMQorCXBhZGRkCXhtbTMseG1tMQorCXBzcmFkCXhtbTUsREVTQ0FMRV9QMl80CisJcHNyYWQJeG1tMyxERVNDQUxFX1AyXzQKKworCXBhY2tzc2R3ICB4bW00LHhtbTMJCTsgeG1tND0oMDAgMTAgMjAgMzAgMDIgMTIgMjIgMzIpCisJcGFja3NzZHcgIHhtbTcseG1tNQkJOyB4bW03PSgwMSAxMSAyMSAzMSAwMyAxMyAyMyAzMykKKworCW1vdmRxYSAgICB4bW0wLHhtbTQJCTsgdHJhbnNwb3NlIGNvZWZmaWNpZW50cyhwaGFzZSAxKQorCXB1bnBja2x3ZCB4bW00LHhtbTcJCTsgeG1tND0oMDAgMDEgMTAgMTEgMjAgMjEgMzAgMzEpCisJcHVucGNraHdkIHhtbTAseG1tNwkJOyB4bW0wPSgwMiAwMyAxMiAxMyAyMiAyMyAzMiAzMykKKworCW1vdmRxYSAgICB4bW02LHhtbTQJCTsgdHJhbnNwb3NlIGNvZWZmaWNpZW50cyhwaGFzZSAyKQorCXB1bnBja2xkcSB4bW00LHhtbTAJCTsgeG1tND0oMDAgMDEgMDIgMDMgMTAgMTEgMTIgMTMpCisJcHVucGNraGRxIHhtbTYseG1tMAkJOyB4bW02PSgyMCAyMSAyMiAyMyAzMCAzMSAzMiAzMykKKworCXBhY2tzc3diICB4bW00LHhtbTYJCTsgeG1tND0oMDAgMDEgMDIgMDMgMTAgMTEgMTIgMTMgMjAgLi4pCisJcGFkZGIgICAgIHhtbTQsW3JlbCBQQl9DRU5URVJKU0FNUF0KKworCXBzaHVmZCAgICB4bW0yLHhtbTQsMHgzOQk7IHhtbTI9KDEwIDExIDEyIDEzIDIwIDIxIDIyIDIzIDMwIC4uKQorCXBzaHVmZCAgICB4bW0xLHhtbTQsMHg0RQk7IHhtbTE9KDIwIDIxIDIyIDIzIDMwIDMxIDMyIDMzIDAwIC4uKQorCXBzaHVmZCAgICB4bW0zLHhtbTQsMHg5Mwk7IHhtbTM9KDMwIDMxIDMyIDMzIDAwIDAxIDAyIDAzIDEwIC4uKQorCisJbW92CXJkeCwgSlNBTVBST1cgW3JkaSswKlNJWkVPRl9KU0FNUFJPV10KKwltb3YJcnNpLCBKU0FNUFJPVyBbcmRpKzEqU0laRU9GX0pTQU1QUk9XXQorCW1vdmQJWE1NX0RXT1JEIFtyZHgrcmF4KlNJWkVPRl9KU0FNUExFXSwgeG1tNAorCW1vdmQJWE1NX0RXT1JEIFtyc2krcmF4KlNJWkVPRl9KU0FNUExFXSwgeG1tMgorCW1vdglyZHgsIEpTQU1QUk9XIFtyZGkrMipTSVpFT0ZfSlNBTVBST1ddCisJbW92CXJzaSwgSlNBTVBST1cgW3JkaSszKlNJWkVPRl9KU0FNUFJPV10KKwltb3ZkCVhNTV9EV09SRCBbcmR4K3JheCpTSVpFT0ZfSlNBTVBMRV0sIHhtbTEKKwltb3ZkCVhNTV9EV09SRCBbcnNpK3JheCpTSVpFT0ZfSlNBTVBMRV0sIHhtbTMKKworCXVuY29sbGVjdF9hcmdzCisJbW92CXJzcCxyYnAJCTsgcnNwIDwtIGFsaWduZWQgcmJwCisJcG9wCXJzcAkJOyByc3AgPC0gb3JpZ2luYWwgcmJwCisJcG9wCXJicAorCXJldAorCisKKzsgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKzsKKzsgUGVyZm9ybSBkZXF1YW50aXphdGlvbiBhbmQgaW52ZXJzZSBEQ1Qgb24gb25lIGJsb2NrIG9mIGNvZWZmaWNpZW50cywKKzsgcHJvZHVjaW5nIGEgcmVkdWNlZC1zaXplIDJ4MiBvdXRwdXQgYmxvY2suCis7Cis7IEdMT0JBTCh2b2lkKQorOyBqc2ltZF9pZGN0XzJ4Ml9zc2UyICh2b2lkICogZGN0X3RhYmxlLCBKQ09FRlBUUiBjb2VmX2Jsb2NrLAorOyAgICAgICAgICAgICAgICAgICAgICBKU0FNUEFSUkFZIG91dHB1dF9idWYsIEpESU1FTlNJT04gb3V0cHV0X2NvbCkKKzsKKworOyByMTAgPSB2b2lkICogZGN0X3RhYmxlCis7IHIxMSA9IEpDT0VGUFRSIGNvZWZfYmxvY2sKKzsgcjEyID0gSlNBTVBBUlJBWSBvdXRwdXRfYnVmCis7IHIxMyA9IEpESU1FTlNJT04gb3V0cHV0X2NvbAorCisJYWxpZ24JMTYKKwlnbG9iYWwJRVhUTihqc2ltZF9pZGN0XzJ4Ml9zc2UyKQorCitFWFROKGpzaW1kX2lkY3RfMngyX3NzZTIpOgorCXB1c2gJcmJwCisJbW92CXJheCxyc3AKKwltb3YJcmJwLHJzcAorCWNvbGxlY3RfYXJncworCXB1c2gJcmJ4CisKKwk7IC0tLS0gUGFzcyAxOiBwcm9jZXNzIGNvbHVtbnMgZnJvbSBpbnB1dC4KKworCW1vdglyZHgsIHIxMAk7IHF1YW50cHRyCisJbW92CXJzaSwgcjExCQk7IGlucHRyCisKKwk7IHwgaW5wdXQ6ICAgICAgICAgICAgICAgICAgfCByZXN1bHQ6ICAgICAgICB8CisJOyB8IDAwIDAxICoqIDAzICoqIDA1ICoqIDA3IHwgICAgICAgICAgICAgICAgfAorCTsgfCAxMCAxMSAqKiAxMyAqKiAxNSAqKiAxNyB8ICAgICAgICAgICAgICAgIHwKKwk7IHwgKiogKiogKiogKiogKiogKiogKiogKiogfCAgICAgICAgICAgICAgICB8CisJOyB8IDMwIDMxICoqIDMzICoqIDM1ICoqIDM3IHwgQTAgQTEgQTMgQTUgQTcgfAorCTsgfCAqKiAqKiAqKiAqKiAqKiAqKiAqKiAqKiB8IEIwIEIxIEIzIEI1IEI3IHwKKwk7IHwgNTAgNTEgKiogNTMgKiogNTUgKiogNTcgfCAgICAgICAgICAgICAgICB8CisJOyB8ICoqICoqICoqICoqICoqICoqICoqICoqIHwgICAgICAgICAgICAgICAgfAorCTsgfCA3MCA3MSAqKiA3MyAqKiA3NSAqKiA3NyB8ICAgICAgICAgICAgICAgIHwKKworCTsgLS0gT2RkIHBhcnQKKworCW1vdmRxYQl4bW0wLCBYTU1XT1JEIFtYTU1CTE9DSygxLDAscnNpLFNJWkVPRl9KQ09FRildCisJbW92ZHFhCXhtbTEsIFhNTVdPUkQgW1hNTUJMT0NLKDMsMCxyc2ksU0laRU9GX0pDT0VGKV0KKwlwbXVsbHcJeG1tMCwgWE1NV09SRCBbWE1NQkxPQ0soMSwwLHJkeCxTSVpFT0ZfSVNMT1dfTVVMVF9UWVBFKV0KKwlwbXVsbHcJeG1tMSwgWE1NV09SRCBbWE1NQkxPQ0soMywwLHJkeCxTSVpFT0ZfSVNMT1dfTVVMVF9UWVBFKV0KKwltb3ZkcWEJeG1tMiwgWE1NV09SRCBbWE1NQkxPQ0soNSwwLHJzaSxTSVpFT0ZfSkNPRUYpXQorCW1vdmRxYQl4bW0zLCBYTU1XT1JEIFtYTU1CTE9DSyg3LDAscnNpLFNJWkVPRl9KQ09FRildCisJcG11bGx3CXhtbTIsIFhNTVdPUkQgW1hNTUJMT0NLKDUsMCxyZHgsU0laRU9GX0lTTE9XX01VTFRfVFlQRSldCisJcG11bGx3CXhtbTMsIFhNTVdPUkQgW1hNTUJMT0NLKDcsMCxyZHgsU0laRU9GX0lTTE9XX01VTFRfVFlQRSldCisKKwk7IHhtbTA9KDEwIDExICoqIDEzICoqIDE1ICoqIDE3KSwgeG1tMT0oMzAgMzEgKiogMzMgKiogMzUgKiogMzcpCisJOyB4bW0yPSg1MCA1MSAqKiA1MyAqKiA1NSAqKiA1NyksIHhtbTM9KDcwIDcxICoqIDczICoqIDc1ICoqIDc3KQorCisJcGNtcGVxZCAgIHhtbTcseG1tNworCXBzbGxkICAgICB4bW03LFdPUkRfQklUCQk7IHhtbTc9ezB4MDAwMCAweEZGRkYgMHgwMDAwIDB4RkZGRiAuLn0KKworCW1vdmRxYSAgICB4bW00LHhtbTAJCTsgeG1tND0oMTAgMTEgKiogMTMgKiogMTUgKiogMTcpCisJbW92ZHFhICAgIHhtbTUseG1tMgkJOyB4bW01PSg1MCA1MSAqKiA1MyAqKiA1NSAqKiA1NykKKwlwdW5wY2tsd2QgeG1tNCx4bW0xCQk7IHhtbTQ9KDEwIDMwIDExIDMxICoqICoqIDEzIDMzKQorCXB1bnBja2x3ZCB4bW01LHhtbTMJCTsgeG1tNT0oNTAgNzAgNTEgNzEgKiogKiogNTMgNzMpCisJcG1hZGR3ZCAgIHhtbTQsW3JlbCBQV19GMzYyX01GMTI3XQorCXBtYWRkd2QgICB4bW01LFtyZWwgUFdfRjA4NV9NRjA3Ml0KKworCXBzcmxkCXhtbTAsV09SRF9CSVQJCTsgeG1tMD0oMTEgLS0gMTMgLS0gMTUgLS0gMTcgLS0pCisJcGFuZAl4bW0xLHhtbTcJCTsgeG1tMT0oLS0gMzEgLS0gMzMgLS0gMzUgLS0gMzcpCisJcHNybGQJeG1tMixXT1JEX0JJVAkJOyB4bW0yPSg1MSAtLSA1MyAtLSA1NSAtLSA1NyAtLSkKKwlwYW5kCXhtbTMseG1tNwkJOyB4bW0zPSgtLSA3MSAtLSA3MyAtLSA3NSAtLSA3NykKKwlwb3IJeG1tMCx4bW0xCQk7IHhtbTA9KDExIDMxIDEzIDMzIDE1IDM1IDE3IDM3KQorCXBvcgl4bW0yLHhtbTMJCTsgeG1tMj0oNTEgNzEgNTMgNzMgNTUgNzUgNTcgNzcpCisJcG1hZGR3ZAl4bW0wLFtyZWwgUFdfRjM2Ml9NRjEyN10KKwlwbWFkZHdkCXhtbTIsW3JlbCBQV19GMDg1X01GMDcyXQorCisJcGFkZGQJeG1tNCx4bW01CQk7IHhtbTQ9dG1wMFtjb2wwIGNvbDEgKioqKiBjb2wzXQorCXBhZGRkCXhtbTAseG1tMgkJOyB4bW0wPXRtcDBbY29sMSBjb2wzIGNvbDUgY29sN10KKworCTsgLS0gRXZlbiBwYXJ0CisKKwltb3ZkcWEJeG1tNiwgWE1NV09SRCBbWE1NQkxPQ0soMCwwLHJzaSxTSVpFT0ZfSkNPRUYpXQorCXBtdWxsdwl4bW02LCBYTU1XT1JEIFtYTU1CTE9DSygwLDAscmR4LFNJWkVPRl9JU0xPV19NVUxUX1RZUEUpXQorCisJOyB4bW02PSgwMCAwMSAqKiAwMyAqKiAwNSAqKiAwNykKKworCW1vdmRxYQl4bW0xLHhtbTYJCTsgeG1tMT0oMDAgMDEgKiogMDMgKiogMDUgKiogMDcpCisJcHNsbGQJeG1tNixXT1JEX0JJVAkJOyB4bW02PSgtLSAwMCAtLSAqKiAtLSAqKiAtLSAqKikKKwlwYW5kCXhtbTEseG1tNwkJOyB4bW0xPSgtLSAwMSAtLSAwMyAtLSAwNSAtLSAwNykKKwlwc3JhZAl4bW02LChXT1JEX0JJVC1DT05TVF9CSVRTLTIpIDsgeG1tNj10bXAxMFtjb2wwICoqKiogKioqKiAqKioqXQorCXBzcmFkCXhtbTEsKFdPUkRfQklULUNPTlNUX0JJVFMtMikgOyB4bW0xPXRtcDEwW2NvbDEgY29sMyBjb2w1IGNvbDddCisKKwk7IC0tIEZpbmFsIG91dHB1dCBzdGFnZQorCisJbW92ZHFhCXhtbTMseG1tNgorCW1vdmRxYQl4bW01LHhtbTEKKwlwYWRkZAl4bW02LHhtbTQJOyB4bW02PWRhdGEwW2NvbDAgKioqKiAqKioqICoqKipdPShBMCAqKiAqKiAqKikKKwlwYWRkZAl4bW0xLHhtbTAJOyB4bW0xPWRhdGEwW2NvbDEgY29sMyBjb2w1IGNvbDddPShBMSBBMyBBNSBBNykKKwlwc3ViZAl4bW0zLHhtbTQJOyB4bW0zPWRhdGExW2NvbDAgKioqKiAqKioqICoqKipdPShCMCAqKiAqKiAqKikKKwlwc3ViZAl4bW01LHhtbTAJOyB4bW01PWRhdGExW2NvbDEgY29sMyBjb2w1IGNvbDddPShCMSBCMyBCNSBCNykKKworCW1vdmRxYQl4bW0yLFtyZWwgUERfREVTQ0FMRV9QMV8yXQk7IHhtbTI9W3JlbCBQRF9ERVNDQUxFX1AxXzJdCisKKwlwdW5wY2tsZHEgIHhtbTYseG1tMwkJOyB4bW02PShBMCBCMCAqKiAqKikKKworCW1vdmRxYSAgICAgeG1tNyx4bW0xCisJcHVucGNrbHFkcSB4bW0xLHhtbTUJCTsgeG1tMT0oQTEgQTMgQjEgQjMpCisJcHVucGNraHFkcSB4bW03LHhtbTUJCTsgeG1tNz0oQTUgQTcgQjUgQjcpCisKKwlwYWRkZAl4bW02LHhtbTIKKwlwc3JhZAl4bW02LERFU0NBTEVfUDFfMgorCisJcGFkZGQJeG1tMSx4bW0yCisJcGFkZGQJeG1tNyx4bW0yCisJcHNyYWQJeG1tMSxERVNDQUxFX1AxXzIKKwlwc3JhZAl4bW03LERFU0NBTEVfUDFfMgorCisJOyAtLSBQcmVmZXRjaCB0aGUgbmV4dCBjb2VmZmljaWVudCBibG9jaworCisJcHJlZmV0Y2hudGEgW3JzaSArIERDVFNJWkUyKlNJWkVPRl9KQ09FRiArIDAqMzJdCisJcHJlZmV0Y2hudGEgW3JzaSArIERDVFNJWkUyKlNJWkVPRl9KQ09FRiArIDEqMzJdCisJcHJlZmV0Y2hudGEgW3JzaSArIERDVFNJWkUyKlNJWkVPRl9KQ09FRiArIDIqMzJdCisJcHJlZmV0Y2hudGEgW3JzaSArIERDVFNJWkUyKlNJWkVPRl9KQ09FRiArIDMqMzJdCisKKwk7IC0tLS0gUGFzcyAyOiBwcm9jZXNzIHJvd3MsIHN0b3JlIGludG8gb3V0cHV0IGFycmF5LgorCisJbW92CXJkaSwgcjEyCTsgKEpTQU1QUk9XICopCisJbW92CXJheCwgcjEzCisKKwk7IHwgaW5wdXQ6fCByZXN1bHQ6fAorCTsgfCBBMCBCMCB8ICAgICAgICB8CisJOyB8IEExIEIxIHwgQzAgQzEgIHwKKwk7IHwgQTMgQjMgfCBEMCBEMSAgfAorCTsgfCBBNSBCNSB8ICAgICAgICB8CisJOyB8IEE3IEI3IHwgICAgICAgIHwKKworCTsgLS0gT2RkIHBhcnQKKworCXBhY2tzc2R3ICB4bW0xLHhtbTEJCTsgeG1tMT0oQTEgQTMgQjEgQjMgQTEgQTMgQjEgQjMpCisJcGFja3NzZHcgIHhtbTcseG1tNwkJOyB4bW03PShBNSBBNyBCNSBCNyBBNSBBNyBCNSBCNykKKwlwbWFkZHdkICAgeG1tMSxbcmVsIFBXX0YzNjJfTUYxMjddCisJcG1hZGR3ZCAgIHhtbTcsW3JlbCBQV19GMDg1X01GMDcyXQorCisJcGFkZGQgICAgIHhtbTEseG1tNwkJOyB4bW0xPXRtcDBbcm93MCByb3cxIHJvdzAgcm93MV0KKworCTsgLS0gRXZlbiBwYXJ0CisKKwlwc2xsZCAgICAgeG1tNiwoQ09OU1RfQklUUysyKQk7IHhtbTY9dG1wMTBbcm93MCByb3cxICoqKiogKioqKl0KKworCTsgLS0gRmluYWwgb3V0cHV0IHN0YWdlCisKKwltb3ZkcWEgICAgeG1tNCx4bW02CisJcGFkZGQgICAgIHhtbTYseG1tMQk7IHhtbTY9ZGF0YTBbcm93MCByb3cxICoqKiogKioqKl09KEMwIEMxICoqICoqKQorCXBzdWJkICAgICB4bW00LHhtbTEJOyB4bW00PWRhdGExW3JvdzAgcm93MSAqKioqICoqKipdPShEMCBEMSAqKiAqKikKKworCXB1bnBja2xkcSB4bW02LHhtbTQJOyB4bW02PShDMCBEMCBDMSBEMSkKKworCXBhZGRkICAgICB4bW02LFtyZWwgUERfREVTQ0FMRV9QMl8yXQorCXBzcmFkICAgICB4bW02LERFU0NBTEVfUDJfMgorCisJcGFja3NzZHcgIHhtbTYseG1tNgkJOyB4bW02PShDMCBEMCBDMSBEMSBDMCBEMCBDMSBEMSkKKwlwYWNrc3N3YiAgeG1tNix4bW02CQk7IHhtbTY9KEMwIEQwIEMxIEQxIEMwIEQwIEMxIEQxIC4uKQorCXBhZGRiICAgICB4bW02LFtyZWwgUEJfQ0VOVEVSSlNBTVBdCisKKwlwZXh0cncJZWJ4LHhtbTYsMHgwMAkJOyBlYng9KEMwIEQwIC0tIC0tKQorCXBleHRydwllY3gseG1tNiwweDAxCQk7IGVjeD0oQzEgRDEgLS0gLS0pCisKKwltb3YJcmR4LCBKU0FNUFJPVyBbcmRpKzAqU0laRU9GX0pTQU1QUk9XXQorCW1vdglyc2ksIEpTQU1QUk9XIFtyZGkrMSpTSVpFT0ZfSlNBTVBST1ddCisJbW92CVdPUkQgW3JkeCtyYXgqU0laRU9GX0pTQU1QTEVdLCBieAorCW1vdglXT1JEIFtyc2krcmF4KlNJWkVPRl9KU0FNUExFXSwgY3gKKworCXBvcAlyYngKKwl1bmNvbGxlY3RfYXJncworCXBvcAlyYnAKKwlyZXQKKworOyBGb3Igc29tZSByZWFzb24sIHRoZSBPUyBYIGxpbmtlciBkb2VzIG5vdCBob25vciB0aGUgcmVxdWVzdCB0byBhbGlnbiB0aGUKKzsgc2VnbWVudCB1bmxlc3Mgd2UgZG8gdGhpcy4KKwlhbGlnbgkxNgpkaWZmIC0tZ2l0IGEvc2ltZC9qaXNzMnJlZC5hc20gYi9zaW1kL2ppc3MycmVkLmFzbQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yMzhjNjFkCi0tLSAvZGV2L251bGwKKysrIGIvc2ltZC9qaXNzMnJlZC5hc20KQEAgLTAsMCArMSw1OTQgQEAKKzsKKzsgamlzczJyZWQuYXNtIC0gcmVkdWNlZC1zaXplIElEQ1QgKFNTRTIpCis7Cis7IENvcHlyaWdodCAyMDA5IFBpZXJyZSBPc3NtYW4gPG9zc21hbkBjZW5kaW8uc2U+IGZvciBDZW5kaW8gQUIKKzsKKzsgQmFzZWQgb24KKzsgeDg2IFNJTUQgZXh0ZW5zaW9uIGZvciBJSkcgSlBFRyBsaWJyYXJ5Cis7IENvcHlyaWdodCAoQykgMTk5OS0yMDA2LCBNSVlBU0FLQSBNYXNhcnUuCis7IEZvciBjb25kaXRpb25zIG9mIGRpc3RyaWJ1dGlvbiBhbmQgdXNlLCBzZWUgY29weXJpZ2h0IG5vdGljZSBpbiBqc2ltZGV4dC5pbmMKKzsKKzsgVGhpcyBmaWxlIHNob3VsZCBiZSBhc3NlbWJsZWQgd2l0aCBOQVNNIChOZXR3aWRlIEFzc2VtYmxlciksCis7IGNhbiAqbm90KiBiZSBhc3NlbWJsZWQgd2l0aCBNaWNyb3NvZnQncyBNQVNNIG9yIGFueSBjb21wYXRpYmxlCis7IGFzc2VtYmxlciAoaW5jbHVkaW5nIEJvcmxhbmQncyBUdXJibyBBc3NlbWJsZXIpLgorOyBOQVNNIGlzIGF2YWlsYWJsZSBmcm9tIGh0dHA6Ly9uYXNtLnNvdXJjZWZvcmdlLm5ldC8gb3IKKzsgaHR0cDovL3NvdXJjZWZvcmdlLm5ldC9wcm9qZWN0L3Nob3dmaWxlcy5waHA/Z3JvdXBfaWQ9NjIwOAorOworOyBUaGlzIGZpbGUgY29udGFpbnMgaW52ZXJzZS1EQ1Qgcm91dGluZXMgdGhhdCBwcm9kdWNlIHJlZHVjZWQtc2l6ZQorOyBvdXRwdXQ6IGVpdGhlciA0eDQgb3IgMngyIHBpeGVscyBmcm9tIGFuIDh4OCBEQ1QgYmxvY2suCis7IFRoZSBmb2xsb3dpbmcgY29kZSBpcyBiYXNlZCBkaXJlY3RseSBvbiB0aGUgSUpHJ3Mgb3JpZ2luYWwgamlkY3RyZWQuYzsKKzsgc2VlIHRoZSBqaWRjdHJlZC5jIGZvciBtb3JlIGRldGFpbHMuCis7Cis7IFtUQUI4XQorCislaW5jbHVkZSAianNpbWRleHQuaW5jIgorJWluY2x1ZGUgImpkY3QuaW5jIgorCis7IC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKyVkZWZpbmUgQ09OU1RfQklUUwkxMworJWRlZmluZSBQQVNTMV9CSVRTCTIKKworJWRlZmluZSBERVNDQUxFX1AxXzQJKENPTlNUX0JJVFMtUEFTUzFfQklUUysxKQorJWRlZmluZSBERVNDQUxFX1AyXzQJKENPTlNUX0JJVFMrUEFTUzFfQklUUyszKzEpCislZGVmaW5lIERFU0NBTEVfUDFfMgkoQ09OU1RfQklUUy1QQVNTMV9CSVRTKzIpCislZGVmaW5lIERFU0NBTEVfUDJfMgkoQ09OU1RfQklUUytQQVNTMV9CSVRTKzMrMikKKworJWlmIENPTlNUX0JJVFMgPT0gMTMKK0ZfMF8yMTEJZXF1CSAxNzMwCQk7IEZJWCgwLjIxMTE2NDI0MykKK0ZfMF81MDkJZXF1CSA0MTc2CQk7IEZJWCgwLjUwOTc5NTU3OSkKK0ZfMF82MDEJZXF1CSA0OTI2CQk7IEZJWCgwLjYwMTM0NDg4NykKK0ZfMF83MjAJZXF1CSA1OTA2CQk7IEZJWCgwLjcyMDk1OTgyMikKK0ZfMF83NjUJZXF1CSA2MjcwCQk7IEZJWCgwLjc2NTM2Njg2NSkKK0ZfMF84NTAJZXF1CSA2OTY3CQk7IEZJWCgwLjg1MDQzMDA5NSkKK0ZfMF84OTkJZXF1CSA3MzczCQk7IEZJWCgwLjg5OTk3NjIyMykKK0ZfMV8wNjEJZXF1CSA4Njk3CQk7IEZJWCgxLjA2MTU5NDMzNykKK0ZfMV8yNzIJZXF1CTEwNDI2CQk7IEZJWCgxLjI3Mjc1ODU4MCkKK0ZfMV80NTEJZXF1CTExODkzCQk7IEZJWCgxLjQ1MTc3NDk4MSkKK0ZfMV84NDcJZXF1CTE1MTM3CQk7IEZJWCgxLjg0Nzc1OTA2NSkKK0ZfMl8xNzIJZXF1CTE3Nzk5CQk7IEZJWCgyLjE3MjczNDgwMykKK0ZfMl81NjIJZXF1CTIwOTk1CQk7IEZJWCgyLjU2MjkxNTQ0NykKK0ZfM182MjQJZXF1CTI5NjkyCQk7IEZJWCgzLjYyNDUwOTc4NSkKKyVlbHNlCis7IE5BU00gY2Fubm90IGRvIGNvbXBpbGUtdGltZSBhcml0aG1ldGljIG9uIGZsb2F0aW5nLXBvaW50IGNvbnN0YW50cy4KKyVkZWZpbmUgREVTQ0FMRSh4LG4pICAoKCh4KSsoMTw8KChuKS0xKSkpPj4obikpCitGXzBfMjExCWVxdQlERVNDQUxFKCAyMjY3MzU4NzksMzAtQ09OU1RfQklUUykJOyBGSVgoMC4yMTExNjQyNDMpCitGXzBfNTA5CWVxdQlERVNDQUxFKCA1NDczODg4MzQsMzAtQ09OU1RfQklUUykJOyBGSVgoMC41MDk3OTU1NzkpCitGXzBfNjAxCWVxdQlERVNDQUxFKCA2NDU2ODkxNTUsMzAtQ09OU1RfQklUUykJOyBGSVgoMC42MDEzNDQ4ODcpCitGXzBfNzIwCWVxdQlERVNDQUxFKCA3NzQxMjQ3MTQsMzAtQ09OU1RfQklUUykJOyBGSVgoMC43MjA5NTk4MjIpCitGXzBfNzY1CWVxdQlERVNDQUxFKCA4MjE4MDY0MTMsMzAtQ09OU1RfQklUUykJOyBGSVgoMC43NjUzNjY4NjUpCitGXzBfODUwCWVxdQlERVNDQUxFKCA5MTMxNDIzNjEsMzAtQ09OU1RfQklUUykJOyBGSVgoMC44NTA0MzAwOTUpCitGXzBfODk5CWVxdQlERVNDQUxFKCA5NjYzNDIxMTEsMzAtQ09OU1RfQklUUykJOyBGSVgoMC44OTk5NzYyMjMpCitGXzFfMDYxCWVxdQlERVNDQUxFKDExMzk4NzgyMzksMzAtQ09OU1RfQklUUykJOyBGSVgoMS4wNjE1OTQzMzcpCitGXzFfMjcyCWVxdQlERVNDQUxFKDEzNjY2MTQxMTksMzAtQ09OU1RfQklUUykJOyBGSVgoMS4yNzI3NTg1ODApCitGXzFfNDUxCWVxdQlERVNDQUxFKDE1NTg4MzE1MTYsMzAtQ09OU1RfQklUUykJOyBGSVgoMS40NTE3NzQ5ODEpCitGXzFfODQ3CWVxdQlERVNDQUxFKDE5ODQwMTYxODgsMzAtQ09OU1RfQklUUykJOyBGSVgoMS44NDc3NTkwNjUpCitGXzJfMTcyCWVxdQlERVNDQUxFKDIzMzI5NTYyMzAsMzAtQ09OU1RfQklUUykJOyBGSVgoMi4xNzI3MzQ4MDMpCitGXzJfNTYyCWVxdQlERVNDQUxFKDI3NTE5MDk1MDYsMzAtQ09OU1RfQklUUykJOyBGSVgoMi41NjI5MTU0NDcpCitGXzNfNjI0CWVxdQlERVNDQUxFKDM4OTE3ODc3NDcsMzAtQ09OU1RfQklUUykJOyBGSVgoMy42MjQ1MDk3ODUpCislZW5kaWYKKworOyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCVNFQ1RJT04JU0VHX0NPTlNUCisKKwlhbGlnbnoJMTYKKwlnbG9iYWwJRVhUTihqY29uc3RfaWRjdF9yZWRfc3NlMikKKworRVhUTihqY29uc3RfaWRjdF9yZWRfc3NlMik6CisKK1BXX0YxODRfTUYwNzYJdGltZXMgNCBkdyAgRl8xXzg0NywtRl8wXzc2NQorUFdfRjI1Nl9GMDg5CXRpbWVzIDQgZHcgIEZfMl81NjIsIEZfMF84OTkKK1BXX0YxMDZfTUYyMTcJdGltZXMgNCBkdyAgRl8xXzA2MSwtRl8yXzE3MgorUFdfTUYwNjBfTUYwNTAJdGltZXMgNCBkdyAtRl8wXzYwMSwtRl8wXzUwOQorUFdfRjE0NV9NRjAyMQl0aW1lcyA0IGR3ICBGXzFfNDUxLC1GXzBfMjExCitQV19GMzYyX01GMTI3CXRpbWVzIDQgZHcgIEZfM182MjQsLUZfMV8yNzIKK1BXX0YwODVfTUYwNzIJdGltZXMgNCBkdyAgRl8wXzg1MCwtRl8wXzcyMAorUERfREVTQ0FMRV9QMV80CXRpbWVzIDQgZGQgIDEgPDwgKERFU0NBTEVfUDFfNC0xKQorUERfREVTQ0FMRV9QMl80CXRpbWVzIDQgZGQgIDEgPDwgKERFU0NBTEVfUDJfNC0xKQorUERfREVTQ0FMRV9QMV8yCXRpbWVzIDQgZGQgIDEgPDwgKERFU0NBTEVfUDFfMi0xKQorUERfREVTQ0FMRV9QMl8yCXRpbWVzIDQgZGQgIDEgPDwgKERFU0NBTEVfUDJfMi0xKQorUEJfQ0VOVEVSSlNBTVAJdGltZXMgMTYgZGIgQ0VOVEVSSlNBTVBMRQorCisJYWxpZ256CTE2CisKKzsgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKwlTRUNUSU9OCVNFR19URVhUCisJQklUUwkzMgorOworOyBQZXJmb3JtIGRlcXVhbnRpemF0aW9uIGFuZCBpbnZlcnNlIERDVCBvbiBvbmUgYmxvY2sgb2YgY29lZmZpY2llbnRzLAorOyBwcm9kdWNpbmcgYSByZWR1Y2VkLXNpemUgNHg0IG91dHB1dCBibG9jay4KKzsKKzsgR0xPQkFMKHZvaWQpCis7IGpzaW1kX2lkY3RfNHg0X3NzZTIgKHZvaWQgKiBkY3RfdGFibGUsIEpDT0VGUFRSIGNvZWZfYmxvY2ssCis7ICAgICAgICAgICAgICAgICAgICAgIEpTQU1QQVJSQVkgb3V0cHV0X2J1ZiwgSkRJTUVOU0lPTiBvdXRwdXRfY29sKQorOworCislZGVmaW5lIGRjdF90YWJsZShiKQkoYikrOAkJCTsgdm9pZCAqIGRjdF90YWJsZQorJWRlZmluZSBjb2VmX2Jsb2NrKGIpCShiKSsxMgkJOyBKQ09FRlBUUiBjb2VmX2Jsb2NrCislZGVmaW5lIG91dHB1dF9idWYoYikJKGIpKzE2CQk7IEpTQU1QQVJSQVkgb3V0cHV0X2J1ZgorJWRlZmluZSBvdXRwdXRfY29sKGIpCShiKSsyMAkJOyBKRElNRU5TSU9OIG91dHB1dF9jb2wKKworJWRlZmluZSBvcmlnaW5hbF9lYnAJZWJwKzAKKyVkZWZpbmUgd2soaSkJCWVicC0oV0tfTlVNLShpKSkqU0laRU9GX1hNTVdPUkQJOyB4bW13b3JkIHdrW1dLX05VTV0KKyVkZWZpbmUgV0tfTlVNCQkyCisKKwlhbGlnbgkxNgorCWdsb2JhbAlFWFROKGpzaW1kX2lkY3RfNHg0X3NzZTIpCisKK0VYVE4oanNpbWRfaWRjdF80eDRfc3NlMik6CisJcHVzaAllYnAKKwltb3YJZWF4LGVzcAkJCQk7IGVheCA9IG9yaWdpbmFsIGVicAorCXN1Ygllc3AsIGJ5dGUgNAorCWFuZAllc3AsIGJ5dGUgKC1TSVpFT0ZfWE1NV09SRCkJOyBhbGlnbiB0byAxMjggYml0cworCW1vdglbZXNwXSxlYXgKKwltb3YJZWJwLGVzcAkJCQk7IGVicCA9IGFsaWduZWQgZWJwCisJbGVhCWVzcCwgW3drKDApXQorCXB1c2hwaWMJZWJ4Cis7CXB1c2gJZWN4CQk7IHVudXNlZAorOwlwdXNoCWVkeAkJOyBuZWVkIG5vdCBiZSBwcmVzZXJ2ZWQKKwlwdXNoCWVzaQorCXB1c2gJZWRpCisKKwlnZXRfR09UCWVieAkJOyBnZXQgR09UIGFkZHJlc3MKKworCTsgLS0tLSBQYXNzIDE6IHByb2Nlc3MgY29sdW1ucyBmcm9tIGlucHV0LgorCis7CW1vdgllYXgsIFtvcmlnaW5hbF9lYnBdCisJbW92CWVkeCwgUE9JTlRFUiBbZGN0X3RhYmxlKGVheCldCTsgcXVhbnRwdHIKKwltb3YJZXNpLCBKQ09FRlBUUiBbY29lZl9ibG9jayhlYXgpXQkJOyBpbnB0cgorCislaWZuZGVmIE5PX1pFUk9fQ09MVU1OX1RFU1RfNFg0X1NTRTIKKwltb3YJZWF4LCBEV09SRCBbRFdCTE9DSygxLDAsZXNpLFNJWkVPRl9KQ09FRildCisJb3IJZWF4LCBEV09SRCBbRFdCTE9DSygyLDAsZXNpLFNJWkVPRl9KQ09FRildCisJam56CXNob3J0IC5jb2x1bW5EQ1QKKworCW1vdmRxYQl4bW0wLCBYTU1XT1JEIFtYTU1CTE9DSygxLDAsZXNpLFNJWkVPRl9KQ09FRildCisJbW92ZHFhCXhtbTEsIFhNTVdPUkQgW1hNTUJMT0NLKDIsMCxlc2ksU0laRU9GX0pDT0VGKV0KKwlwb3IJeG1tMCwgWE1NV09SRCBbWE1NQkxPQ0soMywwLGVzaSxTSVpFT0ZfSkNPRUYpXQorCXBvcgl4bW0xLCBYTU1XT1JEIFtYTU1CTE9DSyg1LDAsZXNpLFNJWkVPRl9KQ09FRildCisJcG9yCXhtbTAsIFhNTVdPUkQgW1hNTUJMT0NLKDYsMCxlc2ksU0laRU9GX0pDT0VGKV0KKwlwb3IJeG1tMSwgWE1NV09SRCBbWE1NQkxPQ0soNywwLGVzaSxTSVpFT0ZfSkNPRUYpXQorCXBvcgl4bW0wLHhtbTEKKwlwYWNrc3N3YiB4bW0wLHhtbTAKKwlwYWNrc3N3YiB4bW0wLHhtbTAKKwltb3ZkCWVheCx4bW0wCisJdGVzdAllYXgsZWF4CisJam56CXNob3J0IC5jb2x1bW5EQ1QKKworCTsgLS0gQUMgdGVybXMgYWxsIHplcm8KKworCW1vdmRxYQl4bW0wLCBYTU1XT1JEIFtYTU1CTE9DSygwLDAsZXNpLFNJWkVPRl9KQ09FRildCisJcG11bGx3CXhtbTAsIFhNTVdPUkQgW1hNTUJMT0NLKDAsMCxlZHgsU0laRU9GX0lTTE9XX01VTFRfVFlQRSldCisKKwlwc2xsdwl4bW0wLFBBU1MxX0JJVFMKKworCW1vdmRxYSAgICB4bW0zLHhtbTAJOyB4bW0wPWluMD0oMDAgMDEgMDIgMDMgMDQgMDUgMDYgMDcpCisJcHVucGNrbHdkIHhtbTAseG1tMAk7IHhtbTA9KDAwIDAwIDAxIDAxIDAyIDAyIDAzIDAzKQorCXB1bnBja2h3ZCB4bW0zLHhtbTMJOyB4bW0zPSgwNCAwNCAwNSAwNSAwNiAwNiAwNyAwNykKKworCXBzaHVmZAl4bW0xLHhtbTAsMHg1MAk7IHhtbTE9W2NvbDAgY29sMV09KDAwIDAwIDAwIDAwIDAxIDAxIDAxIDAxKQorCXBzaHVmZAl4bW0wLHhtbTAsMHhGQQk7IHhtbTA9W2NvbDIgY29sM109KDAyIDAyIDAyIDAyIDAzIDAzIDAzIDAzKQorCXBzaHVmZAl4bW02LHhtbTMsMHg1MAk7IHhtbTY9W2NvbDQgY29sNV09KDA0IDA0IDA0IDA0IDA1IDA1IDA1IDA1KQorCXBzaHVmZAl4bW0zLHhtbTMsMHhGQQk7IHhtbTM9W2NvbDYgY29sN109KDA2IDA2IDA2IDA2IDA3IDA3IDA3IDA3KQorCisJam1wCW5lYXIgLmNvbHVtbl9lbmQKKwlhbGlnbngJMTYsNworJWVuZGlmCisuY29sdW1uRENUOgorCisJOyAtLSBPZGQgcGFydAorCisJbW92ZHFhCXhtbTAsIFhNTVdPUkQgW1hNTUJMT0NLKDEsMCxlc2ksU0laRU9GX0pDT0VGKV0KKwltb3ZkcWEJeG1tMSwgWE1NV09SRCBbWE1NQkxPQ0soMywwLGVzaSxTSVpFT0ZfSkNPRUYpXQorCXBtdWxsdwl4bW0wLCBYTU1XT1JEIFtYTU1CTE9DSygxLDAsZWR4LFNJWkVPRl9JU0xPV19NVUxUX1RZUEUpXQorCXBtdWxsdwl4bW0xLCBYTU1XT1JEIFtYTU1CTE9DSygzLDAsZWR4LFNJWkVPRl9JU0xPV19NVUxUX1RZUEUpXQorCW1vdmRxYQl4bW0yLCBYTU1XT1JEIFtYTU1CTE9DSyg1LDAsZXNpLFNJWkVPRl9KQ09FRildCisJbW92ZHFhCXhtbTMsIFhNTVdPUkQgW1hNTUJMT0NLKDcsMCxlc2ksU0laRU9GX0pDT0VGKV0KKwlwbXVsbHcJeG1tMiwgWE1NV09SRCBbWE1NQkxPQ0soNSwwLGVkeCxTSVpFT0ZfSVNMT1dfTVVMVF9UWVBFKV0KKwlwbXVsbHcJeG1tMywgWE1NV09SRCBbWE1NQkxPQ0soNywwLGVkeCxTSVpFT0ZfSVNMT1dfTVVMVF9UWVBFKV0KKworCW1vdmRxYSAgICB4bW00LHhtbTAKKwltb3ZkcWEgICAgeG1tNSx4bW0wCisJcHVucGNrbHdkIHhtbTQseG1tMQorCXB1bnBja2h3ZCB4bW01LHhtbTEKKwltb3ZkcWEgICAgeG1tMCx4bW00CisJbW92ZHFhICAgIHhtbTEseG1tNQorCXBtYWRkd2QgICB4bW00LFtHT1RPRkYoZWJ4LFBXX0YyNTZfRjA4OSldCTsgeG1tND0odG1wMkwpCisJcG1hZGR3ZCAgIHhtbTUsW0dPVE9GRihlYngsUFdfRjI1Nl9GMDg5KV0JOyB4bW01PSh0bXAySCkKKwlwbWFkZHdkICAgeG1tMCxbR09UT0ZGKGVieCxQV19GMTA2X01GMjE3KV0JOyB4bW0wPSh0bXAwTCkKKwlwbWFkZHdkICAgeG1tMSxbR09UT0ZGKGVieCxQV19GMTA2X01GMjE3KV0JOyB4bW0xPSh0bXAwSCkKKworCW1vdmRxYSAgICB4bW02LHhtbTIKKwltb3ZkcWEgICAgeG1tNyx4bW0yCisJcHVucGNrbHdkIHhtbTYseG1tMworCXB1bnBja2h3ZCB4bW03LHhtbTMKKwltb3ZkcWEgICAgeG1tMix4bW02CisJbW92ZHFhICAgIHhtbTMseG1tNworCXBtYWRkd2QgICB4bW02LFtHT1RPRkYoZWJ4LFBXX01GMDYwX01GMDUwKV0JOyB4bW02PSh0bXAyTCkKKwlwbWFkZHdkICAgeG1tNyxbR09UT0ZGKGVieCxQV19NRjA2MF9NRjA1MCldCTsgeG1tNz0odG1wMkgpCisJcG1hZGR3ZCAgIHhtbTIsW0dPVE9GRihlYngsUFdfRjE0NV9NRjAyMSldCTsgeG1tMj0odG1wMEwpCisJcG1hZGR3ZCAgIHhtbTMsW0dPVE9GRihlYngsUFdfRjE0NV9NRjAyMSldCTsgeG1tMz0odG1wMEgpCisKKwlwYWRkZAl4bW02LHhtbTQJCTsgeG1tNj10bXAyTAorCXBhZGRkCXhtbTcseG1tNQkJOyB4bW03PXRtcDJICisJcGFkZGQJeG1tMix4bW0wCQk7IHhtbTI9dG1wMEwKKwlwYWRkZAl4bW0zLHhtbTEJCTsgeG1tMz10bXAwSAorCisJbW92ZHFhCVhNTVdPUkQgW3drKDApXSwgeG1tMgk7IHdrKDApPXRtcDBMCisJbW92ZHFhCVhNTVdPUkQgW3drKDEpXSwgeG1tMwk7IHdrKDEpPXRtcDBICisKKwk7IC0tIEV2ZW4gcGFydAorCisJbW92ZHFhCXhtbTQsIFhNTVdPUkQgW1hNTUJMT0NLKDAsMCxlc2ksU0laRU9GX0pDT0VGKV0KKwltb3ZkcWEJeG1tNSwgWE1NV09SRCBbWE1NQkxPQ0soMiwwLGVzaSxTSVpFT0ZfSkNPRUYpXQorCW1vdmRxYQl4bW0wLCBYTU1XT1JEIFtYTU1CTE9DSyg2LDAsZXNpLFNJWkVPRl9KQ09FRildCisJcG11bGx3CXhtbTQsIFhNTVdPUkQgW1hNTUJMT0NLKDAsMCxlZHgsU0laRU9GX0lTTE9XX01VTFRfVFlQRSldCisJcG11bGx3CXhtbTUsIFhNTVdPUkQgW1hNTUJMT0NLKDIsMCxlZHgsU0laRU9GX0lTTE9XX01VTFRfVFlQRSldCisJcG11bGx3CXhtbTAsIFhNTVdPUkQgW1hNTUJMT0NLKDYsMCxlZHgsU0laRU9GX0lTTE9XX01VTFRfVFlQRSldCisKKwlweG9yICAgICAgeG1tMSx4bW0xCisJcHhvciAgICAgIHhtbTIseG1tMgorCXB1bnBja2x3ZCB4bW0xLHhtbTQJCTsgeG1tMT10bXAwTAorCXB1bnBja2h3ZCB4bW0yLHhtbTQJCTsgeG1tMj10bXAwSAorCXBzcmFkICAgICB4bW0xLCgxNi1DT05TVF9CSVRTLTEpIDsgcHNyYWQgeG1tMSwxNiAmIHBzbGxkIHhtbTEsQ09OU1RfQklUUysxCisJcHNyYWQgICAgIHhtbTIsKDE2LUNPTlNUX0JJVFMtMSkgOyBwc3JhZCB4bW0yLDE2ICYgcHNsbGQgeG1tMixDT05TVF9CSVRTKzEKKworCW1vdmRxYSAgICB4bW0zLHhtbTUJCTsgeG1tNT1pbjI9ejIKKwlwdW5wY2tsd2QgeG1tNSx4bW0wCQk7IHhtbTA9aW42PXozCisJcHVucGNraHdkIHhtbTMseG1tMAorCXBtYWRkd2QgICB4bW01LFtHT1RPRkYoZWJ4LFBXX0YxODRfTUYwNzYpXQk7IHhtbTU9dG1wMkwKKwlwbWFkZHdkICAgeG1tMyxbR09UT0ZGKGVieCxQV19GMTg0X01GMDc2KV0JOyB4bW0zPXRtcDJICisKKwltb3ZkcWEJeG1tNCx4bW0xCisJbW92ZHFhCXhtbTAseG1tMgorCXBhZGRkCXhtbTEseG1tNQkJOyB4bW0xPXRtcDEwTAorCXBhZGRkCXhtbTIseG1tMwkJOyB4bW0yPXRtcDEwSAorCXBzdWJkCXhtbTQseG1tNQkJOyB4bW00PXRtcDEyTAorCXBzdWJkCXhtbTAseG1tMwkJOyB4bW0wPXRtcDEySAorCisJOyAtLSBGaW5hbCBvdXRwdXQgc3RhZ2UKKworCW1vdmRxYQl4bW01LHhtbTEKKwltb3ZkcWEJeG1tMyx4bW0yCisJcGFkZGQJeG1tMSx4bW02CQk7IHhtbTE9ZGF0YTBMCisJcGFkZGQJeG1tMix4bW03CQk7IHhtbTI9ZGF0YTBICisJcHN1YmQJeG1tNSx4bW02CQk7IHhtbTU9ZGF0YTNMCisJcHN1YmQJeG1tMyx4bW03CQk7IHhtbTM9ZGF0YTNICisKKwltb3ZkcWEJeG1tNixbR09UT0ZGKGVieCxQRF9ERVNDQUxFX1AxXzQpXQk7IHhtbTY9W1BEX0RFU0NBTEVfUDFfNF0KKworCXBhZGRkCXhtbTEseG1tNgorCXBhZGRkCXhtbTIseG1tNgorCXBzcmFkCXhtbTEsREVTQ0FMRV9QMV80CisJcHNyYWQJeG1tMixERVNDQUxFX1AxXzQKKwlwYWRkZAl4bW01LHhtbTYKKwlwYWRkZAl4bW0zLHhtbTYKKwlwc3JhZAl4bW01LERFU0NBTEVfUDFfNAorCXBzcmFkCXhtbTMsREVTQ0FMRV9QMV80CisKKwlwYWNrc3NkdyAgeG1tMSx4bW0yCQk7IHhtbTE9ZGF0YTA9KDAwIDAxIDAyIDAzIDA0IDA1IDA2IDA3KQorCXBhY2tzc2R3ICB4bW01LHhtbTMJCTsgeG1tNT1kYXRhMz0oMzAgMzEgMzIgMzMgMzQgMzUgMzYgMzcpCisKKwltb3ZkcWEJeG1tNywgWE1NV09SRCBbd2soMCldCTsgeG1tNz10bXAwTAorCW1vdmRxYQl4bW02LCBYTU1XT1JEIFt3aygxKV0JOyB4bW02PXRtcDBICisKKwltb3ZkcWEJeG1tMix4bW00CisJbW92ZHFhCXhtbTMseG1tMAorCXBhZGRkCXhtbTQseG1tNwkJOyB4bW00PWRhdGExTAorCXBhZGRkCXhtbTAseG1tNgkJOyB4bW0wPWRhdGExSAorCXBzdWJkCXhtbTIseG1tNwkJOyB4bW0yPWRhdGEyTAorCXBzdWJkCXhtbTMseG1tNgkJOyB4bW0zPWRhdGEySAorCisJbW92ZHFhCXhtbTcsW0dPVE9GRihlYngsUERfREVTQ0FMRV9QMV80KV0JOyB4bW03PVtQRF9ERVNDQUxFX1AxXzRdCisKKwlwYWRkZAl4bW00LHhtbTcKKwlwYWRkZAl4bW0wLHhtbTcKKwlwc3JhZAl4bW00LERFU0NBTEVfUDFfNAorCXBzcmFkCXhtbTAsREVTQ0FMRV9QMV80CisJcGFkZGQJeG1tMix4bW03CisJcGFkZGQJeG1tMyx4bW03CisJcHNyYWQJeG1tMixERVNDQUxFX1AxXzQKKwlwc3JhZAl4bW0zLERFU0NBTEVfUDFfNAorCisJcGFja3NzZHcgIHhtbTQseG1tMAkJOyB4bW00PWRhdGExPSgxMCAxMSAxMiAxMyAxNCAxNSAxNiAxNykKKwlwYWNrc3NkdyAgeG1tMix4bW0zCQk7IHhtbTI9ZGF0YTI9KDIwIDIxIDIyIDIzIDI0IDI1IDI2IDI3KQorCisJbW92ZHFhICAgIHhtbTYseG1tMQk7IHRyYW5zcG9zZSBjb2VmZmljaWVudHMocGhhc2UgMSkKKwlwdW5wY2tsd2QgeG1tMSx4bW00CTsgeG1tMT0oMDAgMTAgMDEgMTEgMDIgMTIgMDMgMTMpCisJcHVucGNraHdkIHhtbTYseG1tNAk7IHhtbTY9KDA0IDE0IDA1IDE1IDA2IDE2IDA3IDE3KQorCW1vdmRxYSAgICB4bW03LHhtbTIJOyB0cmFuc3Bvc2UgY29lZmZpY2llbnRzKHBoYXNlIDEpCisJcHVucGNrbHdkIHhtbTIseG1tNQk7IHhtbTI9KDIwIDMwIDIxIDMxIDIyIDMyIDIzIDMzKQorCXB1bnBja2h3ZCB4bW03LHhtbTUJOyB4bW03PSgyNCAzNCAyNSAzNSAyNiAzNiAyNyAzNykKKworCW1vdmRxYSAgICB4bW0wLHhtbTEJOyB0cmFuc3Bvc2UgY29lZmZpY2llbnRzKHBoYXNlIDIpCisJcHVucGNrbGRxIHhtbTEseG1tMgk7IHhtbTE9W2NvbDAgY29sMV09KDAwIDEwIDIwIDMwIDAxIDExIDIxIDMxKQorCXB1bnBja2hkcSB4bW0wLHhtbTIJOyB4bW0wPVtjb2wyIGNvbDNdPSgwMiAxMiAyMiAzMiAwMyAxMyAyMyAzMykKKwltb3ZkcWEgICAgeG1tMyx4bW02CTsgdHJhbnNwb3NlIGNvZWZmaWNpZW50cyhwaGFzZSAyKQorCXB1bnBja2xkcSB4bW02LHhtbTcJOyB4bW02PVtjb2w0IGNvbDVdPSgwNCAxNCAyNCAzNCAwNSAxNSAyNSAzNSkKKwlwdW5wY2toZHEgeG1tMyx4bW03CTsgeG1tMz1bY29sNiBjb2w3XT0oMDYgMTYgMjYgMzYgMDcgMTcgMjcgMzcpCisuY29sdW1uX2VuZDoKKworCTsgLS0gUHJlZmV0Y2ggdGhlIG5leHQgY29lZmZpY2llbnQgYmxvY2sKKworCXByZWZldGNobnRhIFtlc2kgKyBEQ1RTSVpFMipTSVpFT0ZfSkNPRUYgKyAwKjMyXQorCXByZWZldGNobnRhIFtlc2kgKyBEQ1RTSVpFMipTSVpFT0ZfSkNPRUYgKyAxKjMyXQorCXByZWZldGNobnRhIFtlc2kgKyBEQ1RTSVpFMipTSVpFT0ZfSkNPRUYgKyAyKjMyXQorCXByZWZldGNobnRhIFtlc2kgKyBEQ1RTSVpFMipTSVpFT0ZfSkNPRUYgKyAzKjMyXQorCisJOyAtLS0tIFBhc3MgMjogcHJvY2VzcyByb3dzLCBzdG9yZSBpbnRvIG91dHB1dCBhcnJheS4KKworCW1vdgllYXgsIFtvcmlnaW5hbF9lYnBdCisJbW92CWVkaSwgSlNBTVBBUlJBWSBbb3V0cHV0X2J1ZihlYXgpXQk7IChKU0FNUFJPVyAqKQorCW1vdgllYXgsIEpESU1FTlNJT04gW291dHB1dF9jb2woZWF4KV0KKworCTsgLS0gRXZlbiBwYXJ0CisKKwlweG9yICAgICAgeG1tNCx4bW00CisJcHVucGNrbHdkIHhtbTQseG1tMQkJOyB4bW00PXRtcDAKKwlwc3JhZCAgICAgeG1tNCwoMTYtQ09OU1RfQklUUy0xKSA7IHBzcmFkIHhtbTQsMTYgJiBwc2xsZCB4bW00LENPTlNUX0JJVFMrMQorCisJOyAtLSBPZGQgcGFydAorCisJcHVucGNraHdkIHhtbTEseG1tMAorCXB1bnBja2h3ZCB4bW02LHhtbTMKKwltb3ZkcWEgICAgeG1tNSx4bW0xCisJbW92ZHFhICAgIHhtbTIseG1tNgorCXBtYWRkd2QgICB4bW0xLFtHT1RPRkYoZWJ4LFBXX0YyNTZfRjA4OSldCTsgeG1tMT0odG1wMikKKwlwbWFkZHdkICAgeG1tNixbR09UT0ZGKGVieCxQV19NRjA2MF9NRjA1MCldCTsgeG1tNj0odG1wMikKKwlwbWFkZHdkICAgeG1tNSxbR09UT0ZGKGVieCxQV19GMTA2X01GMjE3KV0JOyB4bW01PSh0bXAwKQorCXBtYWRkd2QgICB4bW0yLFtHT1RPRkYoZWJ4LFBXX0YxNDVfTUYwMjEpXQk7IHhtbTI9KHRtcDApCisKKwlwYWRkZCAgICAgeG1tNix4bW0xCQk7IHhtbTY9dG1wMgorCXBhZGRkICAgICB4bW0yLHhtbTUJCTsgeG1tMj10bXAwCisKKwk7IC0tIEV2ZW4gcGFydAorCisJcHVucGNrbHdkIHhtbTAseG1tMworCXBtYWRkd2QgICB4bW0wLFtHT1RPRkYoZWJ4LFBXX0YxODRfTUYwNzYpXQk7IHhtbTA9dG1wMgorCisJbW92ZHFhICAgIHhtbTcseG1tNAorCXBhZGRkICAgICB4bW00LHhtbTAJCTsgeG1tND10bXAxMAorCXBzdWJkICAgICB4bW03LHhtbTAJCTsgeG1tNz10bXAxMgorCisJOyAtLSBGaW5hbCBvdXRwdXQgc3RhZ2UKKworCW1vdmRxYQl4bW0xLFtHT1RPRkYoZWJ4LFBEX0RFU0NBTEVfUDJfNCldCTsgeG1tMT1bUERfREVTQ0FMRV9QMl80XQorCisJbW92ZHFhCXhtbTUseG1tNAorCW1vdmRxYQl4bW0zLHhtbTcKKwlwYWRkZAl4bW00LHhtbTYJCTsgeG1tND1kYXRhMD0oMDAgMTAgMjAgMzApCisJcGFkZGQJeG1tNyx4bW0yCQk7IHhtbTc9ZGF0YTE9KDAxIDExIDIxIDMxKQorCXBzdWJkCXhtbTUseG1tNgkJOyB4bW01PWRhdGEzPSgwMyAxMyAyMyAzMykKKwlwc3ViZAl4bW0zLHhtbTIJCTsgeG1tMz1kYXRhMj0oMDIgMTIgMjIgMzIpCisKKwlwYWRkZAl4bW00LHhtbTEKKwlwYWRkZAl4bW03LHhtbTEKKwlwc3JhZAl4bW00LERFU0NBTEVfUDJfNAorCXBzcmFkCXhtbTcsREVTQ0FMRV9QMl80CisJcGFkZGQJeG1tNSx4bW0xCisJcGFkZGQJeG1tMyx4bW0xCisJcHNyYWQJeG1tNSxERVNDQUxFX1AyXzQKKwlwc3JhZAl4bW0zLERFU0NBTEVfUDJfNAorCisJcGFja3NzZHcgIHhtbTQseG1tMwkJOyB4bW00PSgwMCAxMCAyMCAzMCAwMiAxMiAyMiAzMikKKwlwYWNrc3NkdyAgeG1tNyx4bW01CQk7IHhtbTc9KDAxIDExIDIxIDMxIDAzIDEzIDIzIDMzKQorCisJbW92ZHFhICAgIHhtbTAseG1tNAkJOyB0cmFuc3Bvc2UgY29lZmZpY2llbnRzKHBoYXNlIDEpCisJcHVucGNrbHdkIHhtbTQseG1tNwkJOyB4bW00PSgwMCAwMSAxMCAxMSAyMCAyMSAzMCAzMSkKKwlwdW5wY2tod2QgeG1tMCx4bW03CQk7IHhtbTA9KDAyIDAzIDEyIDEzIDIyIDIzIDMyIDMzKQorCisJbW92ZHFhICAgIHhtbTYseG1tNAkJOyB0cmFuc3Bvc2UgY29lZmZpY2llbnRzKHBoYXNlIDIpCisJcHVucGNrbGRxIHhtbTQseG1tMAkJOyB4bW00PSgwMCAwMSAwMiAwMyAxMCAxMSAxMiAxMykKKwlwdW5wY2toZHEgeG1tNix4bW0wCQk7IHhtbTY9KDIwIDIxIDIyIDIzIDMwIDMxIDMyIDMzKQorCisJcGFja3Nzd2IgIHhtbTQseG1tNgkJOyB4bW00PSgwMCAwMSAwMiAwMyAxMCAxMSAxMiAxMyAyMCAuLikKKwlwYWRkYiAgICAgeG1tNCxbR09UT0ZGKGVieCxQQl9DRU5URVJKU0FNUCldCisKKwlwc2h1ZmQgICAgeG1tMix4bW00LDB4MzkJOyB4bW0yPSgxMCAxMSAxMiAxMyAyMCAyMSAyMiAyMyAzMCAuLikKKwlwc2h1ZmQgICAgeG1tMSx4bW00LDB4NEUJOyB4bW0xPSgyMCAyMSAyMiAyMyAzMCAzMSAzMiAzMyAwMCAuLikKKwlwc2h1ZmQgICAgeG1tMyx4bW00LDB4OTMJOyB4bW0zPSgzMCAzMSAzMiAzMyAwMCAwMSAwMiAwMyAxMCAuLikKKworCW1vdgllZHgsIEpTQU1QUk9XIFtlZGkrMCpTSVpFT0ZfSlNBTVBST1ddCisJbW92CWVzaSwgSlNBTVBST1cgW2VkaSsxKlNJWkVPRl9KU0FNUFJPV10KKwltb3ZkCVhNTV9EV09SRCBbZWR4K2VheCpTSVpFT0ZfSlNBTVBMRV0sIHhtbTQKKwltb3ZkCVhNTV9EV09SRCBbZXNpK2VheCpTSVpFT0ZfSlNBTVBMRV0sIHhtbTIKKwltb3YJZWR4LCBKU0FNUFJPVyBbZWRpKzIqU0laRU9GX0pTQU1QUk9XXQorCW1vdgllc2ksIEpTQU1QUk9XIFtlZGkrMypTSVpFT0ZfSlNBTVBST1ddCisJbW92ZAlYTU1fRFdPUkQgW2VkeCtlYXgqU0laRU9GX0pTQU1QTEVdLCB4bW0xCisJbW92ZAlYTU1fRFdPUkQgW2VzaStlYXgqU0laRU9GX0pTQU1QTEVdLCB4bW0zCisKKwlwb3AJZWRpCisJcG9wCWVzaQorOwlwb3AJZWR4CQk7IG5lZWQgbm90IGJlIHByZXNlcnZlZAorOwlwb3AJZWN4CQk7IHVudXNlZAorCXBvcHBpYwllYngKKwltb3YJZXNwLGVicAkJOyBlc3AgPC0gYWxpZ25lZCBlYnAKKwlwb3AJZXNwCQk7IGVzcCA8LSBvcmlnaW5hbCBlYnAKKwlwb3AJZWJwCisJcmV0CisKKworOyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorOworOyBQZXJmb3JtIGRlcXVhbnRpemF0aW9uIGFuZCBpbnZlcnNlIERDVCBvbiBvbmUgYmxvY2sgb2YgY29lZmZpY2llbnRzLAorOyBwcm9kdWNpbmcgYSByZWR1Y2VkLXNpemUgMngyIG91dHB1dCBibG9jay4KKzsKKzsgR0xPQkFMKHZvaWQpCis7IGpzaW1kX2lkY3RfMngyX3NzZTIgKHZvaWQgKiBkY3RfdGFibGUsIEpDT0VGUFRSIGNvZWZfYmxvY2ssCis7ICAgICAgICAgICAgICAgICAgICAgIEpTQU1QQVJSQVkgb3V0cHV0X2J1ZiwgSkRJTUVOU0lPTiBvdXRwdXRfY29sKQorOworCislZGVmaW5lIGRjdF90YWJsZShiKQkoYikrOAkJCTsgdm9pZCAqIGRjdF90YWJsZQorJWRlZmluZSBjb2VmX2Jsb2NrKGIpCShiKSsxMgkJOyBKQ09FRlBUUiBjb2VmX2Jsb2NrCislZGVmaW5lIG91dHB1dF9idWYoYikJKGIpKzE2CQk7IEpTQU1QQVJSQVkgb3V0cHV0X2J1ZgorJWRlZmluZSBvdXRwdXRfY29sKGIpCShiKSsyMAkJOyBKRElNRU5TSU9OIG91dHB1dF9jb2wKKworCWFsaWduCTE2CisJZ2xvYmFsCUVYVE4oanNpbWRfaWRjdF8yeDJfc3NlMikKKworRVhUTihqc2ltZF9pZGN0XzJ4Ml9zc2UyKToKKwlwdXNoCWVicAorCW1vdgllYnAsZXNwCisJcHVzaAllYngKKzsJcHVzaAllY3gJCTsgbmVlZCBub3QgYmUgcHJlc2VydmVkCis7CXB1c2gJZWR4CQk7IG5lZWQgbm90IGJlIHByZXNlcnZlZAorCXB1c2gJZXNpCisJcHVzaAllZGkKKworCWdldF9HT1QJZWJ4CQk7IGdldCBHT1QgYWRkcmVzcworCisJOyAtLS0tIFBhc3MgMTogcHJvY2VzcyBjb2x1bW5zIGZyb20gaW5wdXQuCisKKwltb3YJZWR4LCBQT0lOVEVSIFtkY3RfdGFibGUoZWJwKV0JOyBxdWFudHB0cgorCW1vdgllc2ksIEpDT0VGUFRSIFtjb2VmX2Jsb2NrKGVicCldCQk7IGlucHRyCisKKwk7IHwgaW5wdXQ6ICAgICAgICAgICAgICAgICAgfCByZXN1bHQ6ICAgICAgICB8CisJOyB8IDAwIDAxICoqIDAzICoqIDA1ICoqIDA3IHwgICAgICAgICAgICAgICAgfAorCTsgfCAxMCAxMSAqKiAxMyAqKiAxNSAqKiAxNyB8ICAgICAgICAgICAgICAgIHwKKwk7IHwgKiogKiogKiogKiogKiogKiogKiogKiogfCAgICAgICAgICAgICAgICB8CisJOyB8IDMwIDMxICoqIDMzICoqIDM1ICoqIDM3IHwgQTAgQTEgQTMgQTUgQTcgfAorCTsgfCAqKiAqKiAqKiAqKiAqKiAqKiAqKiAqKiB8IEIwIEIxIEIzIEI1IEI3IHwKKwk7IHwgNTAgNTEgKiogNTMgKiogNTUgKiogNTcgfCAgICAgICAgICAgICAgICB8CisJOyB8ICoqICoqICoqICoqICoqICoqICoqICoqIHwgICAgICAgICAgICAgICAgfAorCTsgfCA3MCA3MSAqKiA3MyAqKiA3NSAqKiA3NyB8ICAgICAgICAgICAgICAgIHwKKworCTsgLS0gT2RkIHBhcnQKKworCW1vdmRxYQl4bW0wLCBYTU1XT1JEIFtYTU1CTE9DSygxLDAsZXNpLFNJWkVPRl9KQ09FRildCisJbW92ZHFhCXhtbTEsIFhNTVdPUkQgW1hNTUJMT0NLKDMsMCxlc2ksU0laRU9GX0pDT0VGKV0KKwlwbXVsbHcJeG1tMCwgWE1NV09SRCBbWE1NQkxPQ0soMSwwLGVkeCxTSVpFT0ZfSVNMT1dfTVVMVF9UWVBFKV0KKwlwbXVsbHcJeG1tMSwgWE1NV09SRCBbWE1NQkxPQ0soMywwLGVkeCxTSVpFT0ZfSVNMT1dfTVVMVF9UWVBFKV0KKwltb3ZkcWEJeG1tMiwgWE1NV09SRCBbWE1NQkxPQ0soNSwwLGVzaSxTSVpFT0ZfSkNPRUYpXQorCW1vdmRxYQl4bW0zLCBYTU1XT1JEIFtYTU1CTE9DSyg3LDAsZXNpLFNJWkVPRl9KQ09FRildCisJcG11bGx3CXhtbTIsIFhNTVdPUkQgW1hNTUJMT0NLKDUsMCxlZHgsU0laRU9GX0lTTE9XX01VTFRfVFlQRSldCisJcG11bGx3CXhtbTMsIFhNTVdPUkQgW1hNTUJMT0NLKDcsMCxlZHgsU0laRU9GX0lTTE9XX01VTFRfVFlQRSldCisKKwk7IHhtbTA9KDEwIDExICoqIDEzICoqIDE1ICoqIDE3KSwgeG1tMT0oMzAgMzEgKiogMzMgKiogMzUgKiogMzcpCisJOyB4bW0yPSg1MCA1MSAqKiA1MyAqKiA1NSAqKiA1NyksIHhtbTM9KDcwIDcxICoqIDczICoqIDc1ICoqIDc3KQorCisJcGNtcGVxZCAgIHhtbTcseG1tNworCXBzbGxkICAgICB4bW03LFdPUkRfQklUCQk7IHhtbTc9ezB4MDAwMCAweEZGRkYgMHgwMDAwIDB4RkZGRiAuLn0KKworCW1vdmRxYSAgICB4bW00LHhtbTAJCTsgeG1tND0oMTAgMTEgKiogMTMgKiogMTUgKiogMTcpCisJbW92ZHFhICAgIHhtbTUseG1tMgkJOyB4bW01PSg1MCA1MSAqKiA1MyAqKiA1NSAqKiA1NykKKwlwdW5wY2tsd2QgeG1tNCx4bW0xCQk7IHhtbTQ9KDEwIDMwIDExIDMxICoqICoqIDEzIDMzKQorCXB1bnBja2x3ZCB4bW01LHhtbTMJCTsgeG1tNT0oNTAgNzAgNTEgNzEgKiogKiogNTMgNzMpCisJcG1hZGR3ZCAgIHhtbTQsW0dPVE9GRihlYngsUFdfRjM2Ml9NRjEyNyldCisJcG1hZGR3ZCAgIHhtbTUsW0dPVE9GRihlYngsUFdfRjA4NV9NRjA3MildCisKKwlwc3JsZAl4bW0wLFdPUkRfQklUCQk7IHhtbTA9KDExIC0tIDEzIC0tIDE1IC0tIDE3IC0tKQorCXBhbmQJeG1tMSx4bW03CQk7IHhtbTE9KC0tIDMxIC0tIDMzIC0tIDM1IC0tIDM3KQorCXBzcmxkCXhtbTIsV09SRF9CSVQJCTsgeG1tMj0oNTEgLS0gNTMgLS0gNTUgLS0gNTcgLS0pCisJcGFuZAl4bW0zLHhtbTcJCTsgeG1tMz0oLS0gNzEgLS0gNzMgLS0gNzUgLS0gNzcpCisJcG9yCXhtbTAseG1tMQkJOyB4bW0wPSgxMSAzMSAxMyAzMyAxNSAzNSAxNyAzNykKKwlwb3IJeG1tMix4bW0zCQk7IHhtbTI9KDUxIDcxIDUzIDczIDU1IDc1IDU3IDc3KQorCXBtYWRkd2QJeG1tMCxbR09UT0ZGKGVieCxQV19GMzYyX01GMTI3KV0KKwlwbWFkZHdkCXhtbTIsW0dPVE9GRihlYngsUFdfRjA4NV9NRjA3MildCisKKwlwYWRkZAl4bW00LHhtbTUJCTsgeG1tND10bXAwW2NvbDAgY29sMSAqKioqIGNvbDNdCisJcGFkZGQJeG1tMCx4bW0yCQk7IHhtbTA9dG1wMFtjb2wxIGNvbDMgY29sNSBjb2w3XQorCisJOyAtLSBFdmVuIHBhcnQKKworCW1vdmRxYQl4bW02LCBYTU1XT1JEIFtYTU1CTE9DSygwLDAsZXNpLFNJWkVPRl9KQ09FRildCisJcG11bGx3CXhtbTYsIFhNTVdPUkQgW1hNTUJMT0NLKDAsMCxlZHgsU0laRU9GX0lTTE9XX01VTFRfVFlQRSldCisKKwk7IHhtbTY9KDAwIDAxICoqIDAzICoqIDA1ICoqIDA3KQorCisJbW92ZHFhCXhtbTEseG1tNgkJOyB4bW0xPSgwMCAwMSAqKiAwMyAqKiAwNSAqKiAwNykKKwlwc2xsZAl4bW02LFdPUkRfQklUCQk7IHhtbTY9KC0tIDAwIC0tICoqIC0tICoqIC0tICoqKQorCXBhbmQJeG1tMSx4bW03CQk7IHhtbTE9KC0tIDAxIC0tIDAzIC0tIDA1IC0tIDA3KQorCXBzcmFkCXhtbTYsKFdPUkRfQklULUNPTlNUX0JJVFMtMikgOyB4bW02PXRtcDEwW2NvbDAgKioqKiAqKioqICoqKipdCisJcHNyYWQJeG1tMSwoV09SRF9CSVQtQ09OU1RfQklUUy0yKSA7IHhtbTE9dG1wMTBbY29sMSBjb2wzIGNvbDUgY29sN10KKworCTsgLS0gRmluYWwgb3V0cHV0IHN0YWdlCisKKwltb3ZkcWEJeG1tMyx4bW02CisJbW92ZHFhCXhtbTUseG1tMQorCXBhZGRkCXhtbTYseG1tNAk7IHhtbTY9ZGF0YTBbY29sMCAqKioqICoqKiogKioqKl09KEEwICoqICoqICoqKQorCXBhZGRkCXhtbTEseG1tMAk7IHhtbTE9ZGF0YTBbY29sMSBjb2wzIGNvbDUgY29sN109KEExIEEzIEE1IEE3KQorCXBzdWJkCXhtbTMseG1tNAk7IHhtbTM9ZGF0YTFbY29sMCAqKioqICoqKiogKioqKl09KEIwICoqICoqICoqKQorCXBzdWJkCXhtbTUseG1tMAk7IHhtbTU9ZGF0YTFbY29sMSBjb2wzIGNvbDUgY29sN109KEIxIEIzIEI1IEI3KQorCisJbW92ZHFhCXhtbTIsW0dPVE9GRihlYngsUERfREVTQ0FMRV9QMV8yKV0JOyB4bW0yPVtQRF9ERVNDQUxFX1AxXzJdCisKKwlwdW5wY2tsZHEgIHhtbTYseG1tMwkJOyB4bW02PShBMCBCMCAqKiAqKikKKworCW1vdmRxYSAgICAgeG1tNyx4bW0xCisJcHVucGNrbHFkcSB4bW0xLHhtbTUJCTsgeG1tMT0oQTEgQTMgQjEgQjMpCisJcHVucGNraHFkcSB4bW03LHhtbTUJCTsgeG1tNz0oQTUgQTcgQjUgQjcpCisKKwlwYWRkZAl4bW02LHhtbTIKKwlwc3JhZAl4bW02LERFU0NBTEVfUDFfMgorCisJcGFkZGQJeG1tMSx4bW0yCisJcGFkZGQJeG1tNyx4bW0yCisJcHNyYWQJeG1tMSxERVNDQUxFX1AxXzIKKwlwc3JhZAl4bW03LERFU0NBTEVfUDFfMgorCisJOyAtLSBQcmVmZXRjaCB0aGUgbmV4dCBjb2VmZmljaWVudCBibG9jaworCisJcHJlZmV0Y2hudGEgW2VzaSArIERDVFNJWkUyKlNJWkVPRl9KQ09FRiArIDAqMzJdCisJcHJlZmV0Y2hudGEgW2VzaSArIERDVFNJWkUyKlNJWkVPRl9KQ09FRiArIDEqMzJdCisJcHJlZmV0Y2hudGEgW2VzaSArIERDVFNJWkUyKlNJWkVPRl9KQ09FRiArIDIqMzJdCisJcHJlZmV0Y2hudGEgW2VzaSArIERDVFNJWkUyKlNJWkVPRl9KQ09FRiArIDMqMzJdCisKKwk7IC0tLS0gUGFzcyAyOiBwcm9jZXNzIHJvd3MsIHN0b3JlIGludG8gb3V0cHV0IGFycmF5LgorCisJbW92CWVkaSwgSlNBTVBBUlJBWSBbb3V0cHV0X2J1ZihlYnApXQk7IChKU0FNUFJPVyAqKQorCW1vdgllYXgsIEpESU1FTlNJT04gW291dHB1dF9jb2woZWJwKV0KKworCTsgfCBpbnB1dDp8IHJlc3VsdDp8CisJOyB8IEEwIEIwIHwgICAgICAgIHwKKwk7IHwgQTEgQjEgfCBDMCBDMSAgfAorCTsgfCBBMyBCMyB8IEQwIEQxICB8CisJOyB8IEE1IEI1IHwgICAgICAgIHwKKwk7IHwgQTcgQjcgfCAgICAgICAgfAorCisJOyAtLSBPZGQgcGFydAorCisJcGFja3NzZHcgIHhtbTEseG1tMQkJOyB4bW0xPShBMSBBMyBCMSBCMyBBMSBBMyBCMSBCMykKKwlwYWNrc3NkdyAgeG1tNyx4bW03CQk7IHhtbTc9KEE1IEE3IEI1IEI3IEE1IEE3IEI1IEI3KQorCXBtYWRkd2QgICB4bW0xLFtHT1RPRkYoZWJ4LFBXX0YzNjJfTUYxMjcpXQorCXBtYWRkd2QgICB4bW03LFtHT1RPRkYoZWJ4LFBXX0YwODVfTUYwNzIpXQorCisJcGFkZGQgICAgIHhtbTEseG1tNwkJOyB4bW0xPXRtcDBbcm93MCByb3cxIHJvdzAgcm93MV0KKworCTsgLS0gRXZlbiBwYXJ0CisKKwlwc2xsZCAgICAgeG1tNiwoQ09OU1RfQklUUysyKQk7IHhtbTY9dG1wMTBbcm93MCByb3cxICoqKiogKioqKl0KKworCTsgLS0gRmluYWwgb3V0cHV0IHN0YWdlCisKKwltb3ZkcWEgICAgeG1tNCx4bW02CisJcGFkZGQgICAgIHhtbTYseG1tMQk7IHhtbTY9ZGF0YTBbcm93MCByb3cxICoqKiogKioqKl09KEMwIEMxICoqICoqKQorCXBzdWJkICAgICB4bW00LHhtbTEJOyB4bW00PWRhdGExW3JvdzAgcm93MSAqKioqICoqKipdPShEMCBEMSAqKiAqKikKKworCXB1bnBja2xkcSB4bW02LHhtbTQJOyB4bW02PShDMCBEMCBDMSBEMSkKKworCXBhZGRkICAgICB4bW02LFtHT1RPRkYoZWJ4LFBEX0RFU0NBTEVfUDJfMildCisJcHNyYWQgICAgIHhtbTYsREVTQ0FMRV9QMl8yCisKKwlwYWNrc3NkdyAgeG1tNix4bW02CQk7IHhtbTY9KEMwIEQwIEMxIEQxIEMwIEQwIEMxIEQxKQorCXBhY2tzc3diICB4bW02LHhtbTYJCTsgeG1tNj0oQzAgRDAgQzEgRDEgQzAgRDAgQzEgRDEgLi4pCisJcGFkZGIgICAgIHhtbTYsW0dPVE9GRihlYngsUEJfQ0VOVEVSSlNBTVApXQorCisJcGV4dHJ3CWVieCx4bW02LDB4MDAJCTsgZWJ4PShDMCBEMCAtLSAtLSkKKwlwZXh0cncJZWN4LHhtbTYsMHgwMQkJOyBlY3g9KEMxIEQxIC0tIC0tKQorCisJbW92CWVkeCwgSlNBTVBST1cgW2VkaSswKlNJWkVPRl9KU0FNUFJPV10KKwltb3YJZXNpLCBKU0FNUFJPVyBbZWRpKzEqU0laRU9GX0pTQU1QUk9XXQorCW1vdglXT1JEIFtlZHgrZWF4KlNJWkVPRl9KU0FNUExFXSwgYngKKwltb3YJV09SRCBbZXNpK2VheCpTSVpFT0ZfSlNBTVBMRV0sIGN4CisKKwlwb3AJZWRpCisJcG9wCWVzaQorOwlwb3AJZWR4CQk7IG5lZWQgbm90IGJlIHByZXNlcnZlZAorOwlwb3AJZWN4CQk7IG5lZWQgbm90IGJlIHByZXNlcnZlZAorCXBvcAllYngKKwlwb3AJZWJwCisJcmV0CisKKzsgRm9yIHNvbWUgcmVhc29uLCB0aGUgT1MgWCBsaW5rZXIgZG9lcyBub3QgaG9ub3IgdGhlIHJlcXVlc3QgdG8gYWxpZ24gdGhlCis7IHNlZ21lbnQgdW5sZXNzIHdlIGRvIHRoaXMuCisJYWxpZ24JMTYKZGlmZiAtLWdpdCBhL3NpbWQvamlzc2VmbHQuYXNtIGIvc2ltZC9qaXNzZWZsdC5hc20KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDYxNDdjMQotLS0gL2Rldi9udWxsCisrKyBiL3NpbWQvamlzc2VmbHQuYXNtCkBAIC0wLDAgKzEsNTcyIEBACis7Cis7IGppc3NlZmx0LmFzbSAtIGZsb2F0aW5nLXBvaW50IElEQ1QgKFNTRSAmIE1NWCkKKzsKKzsgQ29weXJpZ2h0IDIwMDkgUGllcnJlIE9zc21hbiA8b3NzbWFuQGNlbmRpby5zZT4gZm9yIENlbmRpbyBBQgorOworOyBCYXNlZCBvbgorOyB4ODYgU0lNRCBleHRlbnNpb24gZm9yIElKRyBKUEVHIGxpYnJhcnkKKzsgQ29weXJpZ2h0IChDKSAxOTk5LTIwMDYsIE1JWUFTQUtBIE1hc2FydS4KKzsgRm9yIGNvbmRpdGlvbnMgb2YgZGlzdHJpYnV0aW9uIGFuZCB1c2UsIHNlZSBjb3B5cmlnaHQgbm90aWNlIGluIGpzaW1kZXh0LmluYworOworOyBUaGlzIGZpbGUgc2hvdWxkIGJlIGFzc2VtYmxlZCB3aXRoIE5BU00gKE5ldHdpZGUgQXNzZW1ibGVyKSwKKzsgY2FuICpub3QqIGJlIGFzc2VtYmxlZCB3aXRoIE1pY3Jvc29mdCdzIE1BU00gb3IgYW55IGNvbXBhdGlibGUKKzsgYXNzZW1ibGVyIChpbmNsdWRpbmcgQm9ybGFuZCdzIFR1cmJvIEFzc2VtYmxlcikuCis7IE5BU00gaXMgYXZhaWxhYmxlIGZyb20gaHR0cDovL25hc20uc291cmNlZm9yZ2UubmV0LyBvcgorOyBodHRwOi8vc291cmNlZm9yZ2UubmV0L3Byb2plY3Qvc2hvd2ZpbGVzLnBocD9ncm91cF9pZD02MjA4Cis7Cis7IFRoaXMgZmlsZSBjb250YWlucyBhIGZsb2F0aW5nLXBvaW50IGltcGxlbWVudGF0aW9uIG9mIHRoZSBpbnZlcnNlIERDVAorOyAoRGlzY3JldGUgQ29zaW5lIFRyYW5zZm9ybSkuIFRoZSBmb2xsb3dpbmcgY29kZSBpcyBiYXNlZCBkaXJlY3RseSBvbgorOyB0aGUgSUpHJ3Mgb3JpZ2luYWwgamlkY3RmbHQuYzsgc2VlIHRoZSBqaWRjdGZsdC5jIGZvciBtb3JlIGRldGFpbHMuCis7Cis7IFtUQUI4XQorCislaW5jbHVkZSAianNpbWRleHQuaW5jIgorJWluY2x1ZGUgImpkY3QuaW5jIgorCis7IC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKyVtYWNybwl1bnBja2xwczIgMgk7ICUxPSgwIDEgMiAzKSAvICUyPSg0IDUgNiA3KSA9PiAlMT0oMCAxIDQgNSkKKwlzaHVmcHMJJTEsJTIsMHg0NAorJWVuZG1hY3JvCisKKyVtYWNybwl1bnBja2hwczIgMgk7ICUxPSgwIDEgMiAzKSAvICUyPSg0IDUgNiA3KSA9PiAlMT0oMiAzIDYgNykKKwlzaHVmcHMJJTEsJTIsMHhFRQorJWVuZG1hY3JvCisKKzsgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKwlTRUNUSU9OCVNFR19DT05TVAorCisJYWxpZ256CTE2CisJZ2xvYmFsCUVYVE4oamNvbnN0X2lkY3RfZmxvYXRfc3NlKQorCitFWFROKGpjb25zdF9pZGN0X2Zsb2F0X3NzZSk6CisKK1BEXzFfNDE0CXRpbWVzIDQgZGQgIDEuNDE0MjEzNTYyMzczMDk1MDQ4ODAxNjg5CitQRF8xXzg0Nwl0aW1lcyA0IGRkICAxLjg0Nzc1OTA2NTAyMjU3MzUxMjI1NjM2NgorUERfMV8wODIJdGltZXMgNCBkZCAgMS4wODIzOTIyMDAyOTIzOTM5Njg3OTk0NDYKK1BEX00yXzYxMwl0aW1lcyA0IGRkIC0yLjYxMzEyNTkyOTc1Mjc1MzA1NTcxMzI4NgorUERfMF8xMjUJdGltZXMgNCBkZCAgMC4xMjUJOyAxLzgKK1BCX0NFTlRFUkpTQU1QCXRpbWVzIDggZGIgIENFTlRFUkpTQU1QTEUKKworCWFsaWduegkxNgorCis7IC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisJU0VDVElPTglTRUdfVEVYVAorCUJJVFMJMzIKKzsKKzsgUGVyZm9ybSBkZXF1YW50aXphdGlvbiBhbmQgaW52ZXJzZSBEQ1Qgb24gb25lIGJsb2NrIG9mIGNvZWZmaWNpZW50cy4KKzsKKzsgR0xPQkFMKHZvaWQpCis7IGpzaW1kX2lkY3RfZmxvYXRfc3NlICh2b2lkICogZGN0X3RhYmxlLCBKQ09FRlBUUiBjb2VmX2Jsb2NrLAorOyAgICAgICAgICAgICAgICAgICAgICAgSlNBTVBBUlJBWSBvdXRwdXRfYnVmLCBKRElNRU5TSU9OIG91dHB1dF9jb2wpCis7CisKKyVkZWZpbmUgZGN0X3RhYmxlKGIpCShiKSs4CQkJOyB2b2lkICogZGN0X3RhYmxlCislZGVmaW5lIGNvZWZfYmxvY2soYikJKGIpKzEyCQk7IEpDT0VGUFRSIGNvZWZfYmxvY2sKKyVkZWZpbmUgb3V0cHV0X2J1ZihiKQkoYikrMTYJCTsgSlNBTVBBUlJBWSBvdXRwdXRfYnVmCislZGVmaW5lIG91dHB1dF9jb2woYikJKGIpKzIwCQk7IEpESU1FTlNJT04gb3V0cHV0X2NvbAorCislZGVmaW5lIG9yaWdpbmFsX2VicAllYnArMAorJWRlZmluZSB3ayhpKQkJZWJwLShXS19OVU0tKGkpKSpTSVpFT0ZfWE1NV09SRAk7IHhtbXdvcmQgd2tbV0tfTlVNXQorJWRlZmluZSBXS19OVU0JCTIKKyVkZWZpbmUgd29ya3NwYWNlCXdrKDApLURDVFNJWkUyKlNJWkVPRl9GQVNUX0ZMT0FUCisJCQkJCTsgRkFTVF9GTE9BVCB3b3Jrc3BhY2VbRENUU0laRTJdCisKKwlhbGlnbgkxNgorCWdsb2JhbAlFWFROKGpzaW1kX2lkY3RfZmxvYXRfc3NlKQorCitFWFROKGpzaW1kX2lkY3RfZmxvYXRfc3NlKToKKwlwdXNoCWVicAorCW1vdgllYXgsZXNwCQkJCTsgZWF4ID0gb3JpZ2luYWwgZWJwCisJc3ViCWVzcCwgYnl0ZSA0CisJYW5kCWVzcCwgYnl0ZSAoLVNJWkVPRl9YTU1XT1JEKQk7IGFsaWduIHRvIDEyOCBiaXRzCisJbW92CVtlc3BdLGVheAorCW1vdgllYnAsZXNwCQkJCTsgZWJwID0gYWxpZ25lZCBlYnAKKwlsZWEJZXNwLCBbd29ya3NwYWNlXQorCXB1c2gJZWJ4Cis7CXB1c2gJZWN4CQk7IG5lZWQgbm90IGJlIHByZXNlcnZlZAorOwlwdXNoCWVkeAkJOyBuZWVkIG5vdCBiZSBwcmVzZXJ2ZWQKKwlwdXNoCWVzaQorCXB1c2gJZWRpCisKKwlnZXRfR09UCWVieAkJOyBnZXQgR09UIGFkZHJlc3MKKworCTsgLS0tLSBQYXNzIDE6IHByb2Nlc3MgY29sdW1ucyBmcm9tIGlucHV0LCBzdG9yZSBpbnRvIHdvcmsgYXJyYXkuCisKKzsJbW92CWVheCwgW29yaWdpbmFsX2VicF0KKwltb3YJZWR4LCBQT0lOVEVSIFtkY3RfdGFibGUoZWF4KV0JOyBxdWFudHB0cgorCW1vdgllc2ksIEpDT0VGUFRSIFtjb2VmX2Jsb2NrKGVheCldCQk7IGlucHRyCisJbGVhCWVkaSwgW3dvcmtzcGFjZV0JCQk7IEZBU1RfRkxPQVQgKiB3c3B0cgorCW1vdgllY3gsIERDVFNJWkUvNAkJCQk7IGN0cgorCWFsaWdueAkxNiw3CisuY29sdW1ubG9vcDoKKyVpZm5kZWYgTk9fWkVST19DT0xVTU5fVEVTVF9GTE9BVF9TU0UKKwltb3YJZWF4LCBEV09SRCBbRFdCTE9DSygxLDAsZXNpLFNJWkVPRl9KQ09FRildCisJb3IJZWF4LCBEV09SRCBbRFdCTE9DSygyLDAsZXNpLFNJWkVPRl9KQ09FRildCisJam56CW5lYXIgLmNvbHVtbkRDVAorCisJbW92cQltbTAsIE1NV09SRCBbTU1CTE9DSygxLDAsZXNpLFNJWkVPRl9KQ09FRildCisJbW92cQltbTEsIE1NV09SRCBbTU1CTE9DSygyLDAsZXNpLFNJWkVPRl9KQ09FRildCisJcG9yCW1tMCwgTU1XT1JEIFtNTUJMT0NLKDMsMCxlc2ksU0laRU9GX0pDT0VGKV0KKwlwb3IJbW0xLCBNTVdPUkQgW01NQkxPQ0soNCwwLGVzaSxTSVpFT0ZfSkNPRUYpXQorCXBvcgltbTAsIE1NV09SRCBbTU1CTE9DSyg1LDAsZXNpLFNJWkVPRl9KQ09FRildCisJcG9yCW1tMSwgTU1XT1JEIFtNTUJMT0NLKDYsMCxlc2ksU0laRU9GX0pDT0VGKV0KKwlwb3IJbW0wLCBNTVdPUkQgW01NQkxPQ0soNywwLGVzaSxTSVpFT0ZfSkNPRUYpXQorCXBvcgltbTEsbW0wCisJcGFja3Nzd2IgbW0xLG1tMQorCW1vdmQJZWF4LG1tMQorCXRlc3QJZWF4LGVheAorCWpueglzaG9ydCAuY29sdW1uRENUCisKKwk7IC0tIEFDIHRlcm1zIGFsbCB6ZXJvCisKKwltb3ZxICAgICAgbW0wLCBNTVdPUkQgW01NQkxPQ0soMCwwLGVzaSxTSVpFT0ZfSkNPRUYpXQorCisJcHVucGNraHdkIG1tMSxtbTAJCQk7IG1tMT0oKiogMDIgKiogMDMpCisJcHVucGNrbHdkIG1tMCxtbTAJCQk7IG1tMD0oMDAgMDAgMDEgMDEpCisJcHNyYWQgICAgIG1tMSwoRFdPUkRfQklULVdPUkRfQklUKQk7IG1tMT1pbjBIPSgwMiAwMykKKwlwc3JhZCAgICAgbW0wLChEV09SRF9CSVQtV09SRF9CSVQpCTsgbW0wPWluMEw9KDAwIDAxKQorCWN2dHBpMnBzICB4bW0zLG1tMQkJCTsgeG1tMz0oMDIgMDMgKiogKiopCisJY3Z0cGkycHMgIHhtbTAsbW0wCQkJOyB4bW0wPSgwMCAwMSAqKiAqKikKKwltb3ZsaHBzICAgeG1tMCx4bW0zCQkJOyB4bW0wPWluMD0oMDAgMDEgMDIgMDMpCisKKwltdWxwcwl4bW0wLCBYTU1XT1JEIFtYTU1CTE9DSygwLDAsZWR4LFNJWkVPRl9GTE9BVF9NVUxUX1RZUEUpXQorCisJbW92YXBzCXhtbTEseG1tMAorCW1vdmFwcwl4bW0yLHhtbTAKKwltb3ZhcHMJeG1tMyx4bW0wCisKKwlzaHVmcHMJeG1tMCx4bW0wLDB4MDAJCQk7IHhtbTA9KDAwIDAwIDAwIDAwKQorCXNodWZwcwl4bW0xLHhtbTEsMHg1NQkJCTsgeG1tMT0oMDEgMDEgMDEgMDEpCisJc2h1ZnBzCXhtbTIseG1tMiwweEFBCQkJOyB4bW0yPSgwMiAwMiAwMiAwMikKKwlzaHVmcHMJeG1tMyx4bW0zLDB4RkYJCQk7IHhtbTM9KDAzIDAzIDAzIDAzKQorCisJbW92YXBzCVhNTVdPUkQgW1hNTUJMT0NLKDAsMCxlZGksU0laRU9GX0ZBU1RfRkxPQVQpXSwgeG1tMAorCW1vdmFwcwlYTU1XT1JEIFtYTU1CTE9DSygwLDEsZWRpLFNJWkVPRl9GQVNUX0ZMT0FUKV0sIHhtbTAKKwltb3ZhcHMJWE1NV09SRCBbWE1NQkxPQ0soMSwwLGVkaSxTSVpFT0ZfRkFTVF9GTE9BVCldLCB4bW0xCisJbW92YXBzCVhNTVdPUkQgW1hNTUJMT0NLKDEsMSxlZGksU0laRU9GX0ZBU1RfRkxPQVQpXSwgeG1tMQorCW1vdmFwcwlYTU1XT1JEIFtYTU1CTE9DSygyLDAsZWRpLFNJWkVPRl9GQVNUX0ZMT0FUKV0sIHhtbTIKKwltb3ZhcHMJWE1NV09SRCBbWE1NQkxPQ0soMiwxLGVkaSxTSVpFT0ZfRkFTVF9GTE9BVCldLCB4bW0yCisJbW92YXBzCVhNTVdPUkQgW1hNTUJMT0NLKDMsMCxlZGksU0laRU9GX0ZBU1RfRkxPQVQpXSwgeG1tMworCW1vdmFwcwlYTU1XT1JEIFtYTU1CTE9DSygzLDEsZWRpLFNJWkVPRl9GQVNUX0ZMT0FUKV0sIHhtbTMKKwlqbXAJbmVhciAubmV4dGNvbHVtbgorCWFsaWdueAkxNiw3CislZW5kaWYKKy5jb2x1bW5EQ1Q6CisKKwk7IC0tIEV2ZW4gcGFydAorCisJbW92cSAgICAgIG1tMCwgTU1XT1JEIFtNTUJMT0NLKDAsMCxlc2ksU0laRU9GX0pDT0VGKV0KKwltb3ZxICAgICAgbW0xLCBNTVdPUkQgW01NQkxPQ0soMiwwLGVzaSxTSVpFT0ZfSkNPRUYpXQorCW1vdnEgICAgICBtbTIsIE1NV09SRCBbTU1CTE9DSyg0LDAsZXNpLFNJWkVPRl9KQ09FRildCisJbW92cSAgICAgIG1tMywgTU1XT1JEIFtNTUJMT0NLKDYsMCxlc2ksU0laRU9GX0pDT0VGKV0KKworCXB1bnBja2h3ZCBtbTQsbW0wCQkJOyBtbTQ9KCoqIDAyICoqIDAzKQorCXB1bnBja2x3ZCBtbTAsbW0wCQkJOyBtbTA9KDAwIDAwIDAxIDAxKQorCXB1bnBja2h3ZCBtbTUsbW0xCQkJOyBtbTU9KCoqIDIyICoqIDIzKQorCXB1bnBja2x3ZCBtbTEsbW0xCQkJOyBtbTE9KDIwIDIwIDIxIDIxKQorCisJcHNyYWQgICAgIG1tNCwoRFdPUkRfQklULVdPUkRfQklUKQk7IG1tND1pbjBIPSgwMiAwMykKKwlwc3JhZCAgICAgbW0wLChEV09SRF9CSVQtV09SRF9CSVQpCTsgbW0wPWluMEw9KDAwIDAxKQorCWN2dHBpMnBzICB4bW00LG1tNAkJCTsgeG1tND0oMDIgMDMgKiogKiopCisJY3Z0cGkycHMgIHhtbTAsbW0wCQkJOyB4bW0wPSgwMCAwMSAqKiAqKikKKwlwc3JhZCAgICAgbW01LChEV09SRF9CSVQtV09SRF9CSVQpCTsgbW01PWluMkg9KDIyIDIzKQorCXBzcmFkICAgICBtbTEsKERXT1JEX0JJVC1XT1JEX0JJVCkJOyBtbTE9aW4yTD0oMjAgMjEpCisJY3Z0cGkycHMgIHhtbTUsbW01CQkJOyB4bW01PSgyMiAyMyAqKiAqKikKKwljdnRwaTJwcyAgeG1tMSxtbTEJCQk7IHhtbTE9KDIwIDIxICoqICoqKQorCisJcHVucGNraHdkIG1tNixtbTIJCQk7IG1tNj0oKiogNDIgKiogNDMpCisJcHVucGNrbHdkIG1tMixtbTIJCQk7IG1tMj0oNDAgNDAgNDEgNDEpCisJcHVucGNraHdkIG1tNyxtbTMJCQk7IG1tNz0oKiogNjIgKiogNjMpCisJcHVucGNrbHdkIG1tMyxtbTMJCQk7IG1tMz0oNjAgNjAgNjEgNjEpCisKKwlwc3JhZCAgICAgbW02LChEV09SRF9CSVQtV09SRF9CSVQpCTsgbW02PWluNEg9KDQyIDQzKQorCXBzcmFkICAgICBtbTIsKERXT1JEX0JJVC1XT1JEX0JJVCkJOyBtbTI9aW40TD0oNDAgNDEpCisJY3Z0cGkycHMgIHhtbTYsbW02CQkJOyB4bW02PSg0MiA0MyAqKiAqKikKKwljdnRwaTJwcyAgeG1tMixtbTIJCQk7IHhtbTI9KDQwIDQxICoqICoqKQorCXBzcmFkICAgICBtbTcsKERXT1JEX0JJVC1XT1JEX0JJVCkJOyBtbTc9aW42SD0oNjIgNjMpCisJcHNyYWQgICAgIG1tMywoRFdPUkRfQklULVdPUkRfQklUKQk7IG1tMz1pbjZMPSg2MCA2MSkKKwljdnRwaTJwcyAgeG1tNyxtbTcJCQk7IHhtbTc9KDYyIDYzICoqICoqKQorCWN2dHBpMnBzICB4bW0zLG1tMwkJCTsgeG1tMz0oNjAgNjEgKiogKiopCisKKwltb3ZsaHBzICAgeG1tMCx4bW00CQkJOyB4bW0wPWluMD0oMDAgMDEgMDIgMDMpCisJbW92bGhwcyAgIHhtbTEseG1tNQkJCTsgeG1tMT1pbjI9KDIwIDIxIDIyIDIzKQorCW11bHBzICAgICB4bW0wLCBYTU1XT1JEIFtYTU1CTE9DSygwLDAsZWR4LFNJWkVPRl9GTE9BVF9NVUxUX1RZUEUpXQorCW11bHBzICAgICB4bW0xLCBYTU1XT1JEIFtYTU1CTE9DSygyLDAsZWR4LFNJWkVPRl9GTE9BVF9NVUxUX1RZUEUpXQorCisJbW92bGhwcyAgIHhtbTIseG1tNgkJCTsgeG1tMj1pbjQ9KDQwIDQxIDQyIDQzKQorCW1vdmxocHMgICB4bW0zLHhtbTcJCQk7IHhtbTM9aW42PSg2MCA2MSA2MiA2MykKKwltdWxwcyAgICAgeG1tMiwgWE1NV09SRCBbWE1NQkxPQ0soNCwwLGVkeCxTSVpFT0ZfRkxPQVRfTVVMVF9UWVBFKV0KKwltdWxwcyAgICAgeG1tMywgWE1NV09SRCBbWE1NQkxPQ0soNiwwLGVkeCxTSVpFT0ZfRkxPQVRfTVVMVF9UWVBFKV0KKworCW1vdmFwcwl4bW00LHhtbTAKKwltb3ZhcHMJeG1tNSx4bW0xCisJc3VicHMJeG1tMCx4bW0yCQk7IHhtbTA9dG1wMTEKKwlzdWJwcwl4bW0xLHhtbTMKKwlhZGRwcwl4bW00LHhtbTIJCTsgeG1tND10bXAxMAorCWFkZHBzCXhtbTUseG1tMwkJOyB4bW01PXRtcDEzCisKKwltdWxwcwl4bW0xLFtHT1RPRkYoZWJ4LFBEXzFfNDE0KV0KKwlzdWJwcwl4bW0xLHhtbTUJCTsgeG1tMT10bXAxMgorCisJbW92YXBzCXhtbTYseG1tNAorCW1vdmFwcwl4bW03LHhtbTAKKwlzdWJwcwl4bW00LHhtbTUJCTsgeG1tND10bXAzCisJc3VicHMJeG1tMCx4bW0xCQk7IHhtbTA9dG1wMgorCWFkZHBzCXhtbTYseG1tNQkJOyB4bW02PXRtcDAKKwlhZGRwcwl4bW03LHhtbTEJCTsgeG1tNz10bXAxCisKKwltb3ZhcHMJWE1NV09SRCBbd2soMSldLCB4bW00CTsgdG1wMworCW1vdmFwcwlYTU1XT1JEIFt3aygwKV0sIHhtbTAJOyB0bXAyCisKKwk7IC0tIE9kZCBwYXJ0CisKKwltb3ZxICAgICAgbW00LCBNTVdPUkQgW01NQkxPQ0soMSwwLGVzaSxTSVpFT0ZfSkNPRUYpXQorCW1vdnEgICAgICBtbTAsIE1NV09SRCBbTU1CTE9DSygzLDAsZXNpLFNJWkVPRl9KQ09FRildCisJbW92cSAgICAgIG1tNSwgTU1XT1JEIFtNTUJMT0NLKDUsMCxlc2ksU0laRU9GX0pDT0VGKV0KKwltb3ZxICAgICAgbW0xLCBNTVdPUkQgW01NQkxPQ0soNywwLGVzaSxTSVpFT0ZfSkNPRUYpXQorCisJcHVucGNraHdkIG1tNixtbTQJCQk7IG1tNj0oKiogMTIgKiogMTMpCisJcHVucGNrbHdkIG1tNCxtbTQJCQk7IG1tND0oMTAgMTAgMTEgMTEpCisJcHVucGNraHdkIG1tMixtbTAJCQk7IG1tMj0oKiogMzIgKiogMzMpCisJcHVucGNrbHdkIG1tMCxtbTAJCQk7IG1tMD0oMzAgMzAgMzEgMzEpCisKKwlwc3JhZCAgICAgbW02LChEV09SRF9CSVQtV09SRF9CSVQpCTsgbW02PWluMUg9KDEyIDEzKQorCXBzcmFkICAgICBtbTQsKERXT1JEX0JJVC1XT1JEX0JJVCkJOyBtbTQ9aW4xTD0oMTAgMTEpCisJY3Z0cGkycHMgIHhtbTQsbW02CQkJOyB4bW00PSgxMiAxMyAqKiAqKikKKwljdnRwaTJwcyAgeG1tMixtbTQJCQk7IHhtbTI9KDEwIDExICoqICoqKQorCXBzcmFkICAgICBtbTIsKERXT1JEX0JJVC1XT1JEX0JJVCkJOyBtbTI9aW4zSD0oMzIgMzMpCisJcHNyYWQgICAgIG1tMCwoRFdPUkRfQklULVdPUkRfQklUKQk7IG1tMD1pbjNMPSgzMCAzMSkKKwljdnRwaTJwcyAgeG1tMCxtbTIJCQk7IHhtbTA9KDMyIDMzICoqICoqKQorCWN2dHBpMnBzICB4bW0zLG1tMAkJCTsgeG1tMz0oMzAgMzEgKiogKiopCisKKwlwdW5wY2tod2QgbW03LG1tNQkJCTsgbW03PSgqKiA1MiAqKiA1MykKKwlwdW5wY2tsd2QgbW01LG1tNQkJCTsgbW01PSg1MCA1MCA1MSA1MSkKKwlwdW5wY2tod2QgbW0zLG1tMQkJCTsgbW0zPSgqKiA3MiAqKiA3MykKKwlwdW5wY2tsd2QgbW0xLG1tMQkJCTsgbW0xPSg3MCA3MCA3MSA3MSkKKworCW1vdmxocHMgICB4bW0yLHhtbTQJCQk7IHhtbTI9aW4xPSgxMCAxMSAxMiAxMykKKwltb3ZsaHBzICAgeG1tMyx4bW0wCQkJOyB4bW0zPWluMz0oMzAgMzEgMzIgMzMpCisKKwlwc3JhZCAgICAgbW03LChEV09SRF9CSVQtV09SRF9CSVQpCTsgbW03PWluNUg9KDUyIDUzKQorCXBzcmFkICAgICBtbTUsKERXT1JEX0JJVC1XT1JEX0JJVCkJOyBtbTU9aW41TD0oNTAgNTEpCisJY3Z0cGkycHMgIHhtbTQsbW03CQkJOyB4bW00PSg1MiA1MyAqKiAqKikKKwljdnRwaTJwcyAgeG1tNSxtbTUJCQk7IHhtbTU9KDUwIDUxICoqICoqKQorCXBzcmFkICAgICBtbTMsKERXT1JEX0JJVC1XT1JEX0JJVCkJOyBtbTM9aW43SD0oNzIgNzMpCisJcHNyYWQgICAgIG1tMSwoRFdPUkRfQklULVdPUkRfQklUKQk7IG1tMT1pbjdMPSg3MCA3MSkKKwljdnRwaTJwcyAgeG1tMCxtbTMJCQk7IHhtbTA9KDcyIDczICoqICoqKQorCWN2dHBpMnBzICB4bW0xLG1tMQkJCTsgeG1tMT0oNzAgNzEgKiogKiopCisKKwltdWxwcyAgICAgeG1tMiwgWE1NV09SRCBbWE1NQkxPQ0soMSwwLGVkeCxTSVpFT0ZfRkxPQVRfTVVMVF9UWVBFKV0KKwltdWxwcyAgICAgeG1tMywgWE1NV09SRCBbWE1NQkxPQ0soMywwLGVkeCxTSVpFT0ZfRkxPQVRfTVVMVF9UWVBFKV0KKworCW1vdmxocHMgICB4bW01LHhtbTQJCQk7IHhtbTU9aW41PSg1MCA1MSA1MiA1MykKKwltb3ZsaHBzICAgeG1tMSx4bW0wCQkJOyB4bW0xPWluNz0oNzAgNzEgNzIgNzMpCisJbXVscHMgICAgIHhtbTUsIFhNTVdPUkQgW1hNTUJMT0NLKDUsMCxlZHgsU0laRU9GX0ZMT0FUX01VTFRfVFlQRSldCisJbXVscHMgICAgIHhtbTEsIFhNTVdPUkQgW1hNTUJMT0NLKDcsMCxlZHgsU0laRU9GX0ZMT0FUX01VTFRfVFlQRSldCisKKwltb3ZhcHMJeG1tNCx4bW0yCisJbW92YXBzCXhtbTAseG1tNQorCWFkZHBzCXhtbTIseG1tMQkJOyB4bW0yPXoxMQorCWFkZHBzCXhtbTUseG1tMwkJOyB4bW01PXoxMworCXN1YnBzCXhtbTQseG1tMQkJOyB4bW00PXoxMgorCXN1YnBzCXhtbTAseG1tMwkJOyB4bW0wPXoxMAorCisJbW92YXBzCXhtbTEseG1tMgorCXN1YnBzCXhtbTIseG1tNQorCWFkZHBzCXhtbTEseG1tNQkJOyB4bW0xPXRtcDcKKworCW11bHBzCXhtbTIsW0dPVE9GRihlYngsUERfMV80MTQpXQk7IHhtbTI9dG1wMTEKKworCW1vdmFwcwl4bW0zLHhtbTAKKwlhZGRwcwl4bW0wLHhtbTQKKwltdWxwcwl4bW0wLFtHT1RPRkYoZWJ4LFBEXzFfODQ3KV0JOyB4bW0wPXo1CisJbXVscHMJeG1tMyxbR09UT0ZGKGVieCxQRF9NMl82MTMpXQk7IHhtbTM9KHoxMCAqIC0yLjYxMzEyNTkzMCkKKwltdWxwcwl4bW00LFtHT1RPRkYoZWJ4LFBEXzFfMDgyKV0JOyB4bW00PSh6MTIgKiAxLjA4MjM5MjIwMCkKKwlhZGRwcwl4bW0zLHhtbTAJCTsgeG1tMz10bXAxMgorCXN1YnBzCXhtbTQseG1tMAkJOyB4bW00PXRtcDEwCisKKwk7IC0tIEZpbmFsIG91dHB1dCBzdGFnZQorCisJc3VicHMJeG1tMyx4bW0xCQk7IHhtbTM9dG1wNgorCW1vdmFwcwl4bW01LHhtbTYKKwltb3ZhcHMJeG1tMCx4bW03CisJYWRkcHMJeG1tNix4bW0xCQk7IHhtbTY9ZGF0YTA9KDAwIDAxIDAyIDAzKQorCWFkZHBzCXhtbTcseG1tMwkJOyB4bW03PWRhdGExPSgxMCAxMSAxMiAxMykKKwlzdWJwcwl4bW01LHhtbTEJCTsgeG1tNT1kYXRhNz0oNzAgNzEgNzIgNzMpCisJc3VicHMJeG1tMCx4bW0zCQk7IHhtbTA9ZGF0YTY9KDYwIDYxIDYyIDYzKQorCXN1YnBzCXhtbTIseG1tMwkJOyB4bW0yPXRtcDUKKworCW1vdmFwcyAgICB4bW0xLHhtbTYJCTsgdHJhbnNwb3NlIGNvZWZmaWNpZW50cyhwaGFzZSAxKQorCXVucGNrbHBzICB4bW02LHhtbTcJCTsgeG1tNj0oMDAgMTAgMDEgMTEpCisJdW5wY2tocHMgIHhtbTEseG1tNwkJOyB4bW0xPSgwMiAxMiAwMyAxMykKKwltb3ZhcHMgICAgeG1tMyx4bW0wCQk7IHRyYW5zcG9zZSBjb2VmZmljaWVudHMocGhhc2UgMSkKKwl1bnBja2xwcyAgeG1tMCx4bW01CQk7IHhtbTA9KDYwIDcwIDYxIDcxKQorCXVucGNraHBzICB4bW0zLHhtbTUJCTsgeG1tMz0oNjIgNzIgNjMgNzMpCisKKwltb3ZhcHMJeG1tNywgWE1NV09SRCBbd2soMCldCTsgeG1tNz10bXAyCisJbW92YXBzCXhtbTUsIFhNTVdPUkQgW3drKDEpXQk7IHhtbTU9dG1wMworCisJbW92YXBzCVhNTVdPUkQgW3drKDApXSwgeG1tMAk7IHdrKDApPSg2MCA3MCA2MSA3MSkKKwltb3ZhcHMJWE1NV09SRCBbd2soMSldLCB4bW0zCTsgd2soMSk9KDYyIDcyIDYzIDczKQorCisJYWRkcHMJeG1tNCx4bW0yCQk7IHhtbTQ9dG1wNAorCW1vdmFwcwl4bW0wLHhtbTcKKwltb3ZhcHMJeG1tMyx4bW01CisJYWRkcHMJeG1tNyx4bW0yCQk7IHhtbTc9ZGF0YTI9KDIwIDIxIDIyIDIzKQorCWFkZHBzCXhtbTUseG1tNAkJOyB4bW01PWRhdGE0PSg0MCA0MSA0MiA0MykKKwlzdWJwcwl4bW0wLHhtbTIJCTsgeG1tMD1kYXRhNT0oNTAgNTEgNTIgNTMpCisJc3VicHMJeG1tMyx4bW00CQk7IHhtbTM9ZGF0YTM9KDMwIDMxIDMyIDMzKQorCisJbW92YXBzICAgIHhtbTIseG1tNwkJOyB0cmFuc3Bvc2UgY29lZmZpY2llbnRzKHBoYXNlIDEpCisJdW5wY2tscHMgIHhtbTcseG1tMwkJOyB4bW03PSgyMCAzMCAyMSAzMSkKKwl1bnBja2hwcyAgeG1tMix4bW0zCQk7IHhtbTI9KDIyIDMyIDIzIDMzKQorCW1vdmFwcyAgICB4bW00LHhtbTUJCTsgdHJhbnNwb3NlIGNvZWZmaWNpZW50cyhwaGFzZSAxKQorCXVucGNrbHBzICB4bW01LHhtbTAJCTsgeG1tNT0oNDAgNTAgNDEgNTEpCisJdW5wY2tocHMgIHhtbTQseG1tMAkJOyB4bW00PSg0MiA1MiA0MyA1MykKKworCW1vdmFwcyAgICB4bW0zLHhtbTYJCTsgdHJhbnNwb3NlIGNvZWZmaWNpZW50cyhwaGFzZSAyKQorCXVucGNrbHBzMiB4bW02LHhtbTcJCTsgeG1tNj0oMDAgMTAgMjAgMzApCisJdW5wY2tocHMyIHhtbTMseG1tNwkJOyB4bW0zPSgwMSAxMSAyMSAzMSkKKwltb3ZhcHMgICAgeG1tMCx4bW0xCQk7IHRyYW5zcG9zZSBjb2VmZmljaWVudHMocGhhc2UgMikKKwl1bnBja2xwczIgeG1tMSx4bW0yCQk7IHhtbTE9KDAyIDEyIDIyIDMyKQorCXVucGNraHBzMiB4bW0wLHhtbTIJCTsgeG1tMD0oMDMgMTMgMjMgMzMpCisKKwltb3ZhcHMJeG1tNywgWE1NV09SRCBbd2soMCldCTsgeG1tNz0oNjAgNzAgNjEgNzEpCisJbW92YXBzCXhtbTIsIFhNTVdPUkQgW3drKDEpXQk7IHhtbTI9KDYyIDcyIDYzIDczKQorCisJbW92YXBzCVhNTVdPUkQgW1hNTUJMT0NLKDAsMCxlZGksU0laRU9GX0ZBU1RfRkxPQVQpXSwgeG1tNgorCW1vdmFwcwlYTU1XT1JEIFtYTU1CTE9DSygxLDAsZWRpLFNJWkVPRl9GQVNUX0ZMT0FUKV0sIHhtbTMKKwltb3ZhcHMJWE1NV09SRCBbWE1NQkxPQ0soMiwwLGVkaSxTSVpFT0ZfRkFTVF9GTE9BVCldLCB4bW0xCisJbW92YXBzCVhNTVdPUkQgW1hNTUJMT0NLKDMsMCxlZGksU0laRU9GX0ZBU1RfRkxPQVQpXSwgeG1tMAorCisJbW92YXBzICAgIHhtbTYseG1tNQkJOyB0cmFuc3Bvc2UgY29lZmZpY2llbnRzKHBoYXNlIDIpCisJdW5wY2tscHMyIHhtbTUseG1tNwkJOyB4bW01PSg0MCA1MCA2MCA3MCkKKwl1bnBja2hwczIgeG1tNix4bW03CQk7IHhtbTY9KDQxIDUxIDYxIDcxKQorCW1vdmFwcyAgICB4bW0zLHhtbTQJCTsgdHJhbnNwb3NlIGNvZWZmaWNpZW50cyhwaGFzZSAyKQorCXVucGNrbHBzMiB4bW00LHhtbTIJCTsgeG1tND0oNDIgNTIgNjIgNzIpCisJdW5wY2tocHMyIHhtbTMseG1tMgkJOyB4bW0zPSg0MyA1MyA2MyA3MykKKworCW1vdmFwcwlYTU1XT1JEIFtYTU1CTE9DSygwLDEsZWRpLFNJWkVPRl9GQVNUX0ZMT0FUKV0sIHhtbTUKKwltb3ZhcHMJWE1NV09SRCBbWE1NQkxPQ0soMSwxLGVkaSxTSVpFT0ZfRkFTVF9GTE9BVCldLCB4bW02CisJbW92YXBzCVhNTVdPUkQgW1hNTUJMT0NLKDIsMSxlZGksU0laRU9GX0ZBU1RfRkxPQVQpXSwgeG1tNAorCW1vdmFwcwlYTU1XT1JEIFtYTU1CTE9DSygzLDEsZWRpLFNJWkVPRl9GQVNUX0ZMT0FUKV0sIHhtbTMKKworLm5leHRjb2x1bW46CisJYWRkCWVzaSwgYnl0ZSA0KlNJWkVPRl9KQ09FRgkJOyBjb2VmX2Jsb2NrCisJYWRkCWVkeCwgYnl0ZSA0KlNJWkVPRl9GTE9BVF9NVUxUX1RZUEUJOyBxdWFudHB0cgorCWFkZAllZGksICAgICAgNCpEQ1RTSVpFKlNJWkVPRl9GQVNUX0ZMT0FUCTsgd3NwdHIKKwlkZWMJZWN4CQkJCQk7IGN0cgorCWpuegluZWFyIC5jb2x1bW5sb29wCisKKwk7IC0tIFByZWZldGNoIHRoZSBuZXh0IGNvZWZmaWNpZW50IGJsb2NrCisKKwlwcmVmZXRjaG50YSBbZXNpICsgKERDVFNJWkUyLTgpKlNJWkVPRl9KQ09FRiArIDAqMzJdCisJcHJlZmV0Y2hudGEgW2VzaSArIChEQ1RTSVpFMi04KSpTSVpFT0ZfSkNPRUYgKyAxKjMyXQorCXByZWZldGNobnRhIFtlc2kgKyAoRENUU0laRTItOCkqU0laRU9GX0pDT0VGICsgMiozMl0KKwlwcmVmZXRjaG50YSBbZXNpICsgKERDVFNJWkUyLTgpKlNJWkVPRl9KQ09FRiArIDMqMzJdCisKKwk7IC0tLS0gUGFzcyAyOiBwcm9jZXNzIHJvd3MgZnJvbSB3b3JrIGFycmF5LCBzdG9yZSBpbnRvIG91dHB1dCBhcnJheS4KKworCW1vdgllYXgsIFtvcmlnaW5hbF9lYnBdCisJbGVhCWVzaSwgW3dvcmtzcGFjZV0JCQk7IEZBU1RfRkxPQVQgKiB3c3B0cgorCW1vdgllZGksIEpTQU1QQVJSQVkgW291dHB1dF9idWYoZWF4KV0JOyAoSlNBTVBST1cgKikKKwltb3YJZWF4LCBKRElNRU5TSU9OIFtvdXRwdXRfY29sKGVheCldCisJbW92CWVjeCwgRENUU0laRS80CQkJCTsgY3RyCisJYWxpZ254CTE2LDcKKy5yb3dsb29wOgorCisJOyAtLSBFdmVuIHBhcnQKKworCW1vdmFwcwl4bW0wLCBYTU1XT1JEIFtYTU1CTE9DSygwLDAsZXNpLFNJWkVPRl9GQVNUX0ZMT0FUKV0KKwltb3ZhcHMJeG1tMSwgWE1NV09SRCBbWE1NQkxPQ0soMiwwLGVzaSxTSVpFT0ZfRkFTVF9GTE9BVCldCisJbW92YXBzCXhtbTIsIFhNTVdPUkQgW1hNTUJMT0NLKDQsMCxlc2ksU0laRU9GX0ZBU1RfRkxPQVQpXQorCW1vdmFwcwl4bW0zLCBYTU1XT1JEIFtYTU1CTE9DSyg2LDAsZXNpLFNJWkVPRl9GQVNUX0ZMT0FUKV0KKworCW1vdmFwcwl4bW00LHhtbTAKKwltb3ZhcHMJeG1tNSx4bW0xCisJc3VicHMJeG1tMCx4bW0yCQk7IHhtbTA9dG1wMTEKKwlzdWJwcwl4bW0xLHhtbTMKKwlhZGRwcwl4bW00LHhtbTIJCTsgeG1tND10bXAxMAorCWFkZHBzCXhtbTUseG1tMwkJOyB4bW01PXRtcDEzCisKKwltdWxwcwl4bW0xLFtHT1RPRkYoZWJ4LFBEXzFfNDE0KV0KKwlzdWJwcwl4bW0xLHhtbTUJCTsgeG1tMT10bXAxMgorCisJbW92YXBzCXhtbTYseG1tNAorCW1vdmFwcwl4bW03LHhtbTAKKwlzdWJwcwl4bW00LHhtbTUJCTsgeG1tND10bXAzCisJc3VicHMJeG1tMCx4bW0xCQk7IHhtbTA9dG1wMgorCWFkZHBzCXhtbTYseG1tNQkJOyB4bW02PXRtcDAKKwlhZGRwcwl4bW03LHhtbTEJCTsgeG1tNz10bXAxCisKKwltb3ZhcHMJWE1NV09SRCBbd2soMSldLCB4bW00CTsgdG1wMworCW1vdmFwcwlYTU1XT1JEIFt3aygwKV0sIHhtbTAJOyB0bXAyCisKKwk7IC0tIE9kZCBwYXJ0CisKKwltb3ZhcHMJeG1tMiwgWE1NV09SRCBbWE1NQkxPQ0soMSwwLGVzaSxTSVpFT0ZfRkFTVF9GTE9BVCldCisJbW92YXBzCXhtbTMsIFhNTVdPUkQgW1hNTUJMT0NLKDMsMCxlc2ksU0laRU9GX0ZBU1RfRkxPQVQpXQorCW1vdmFwcwl4bW01LCBYTU1XT1JEIFtYTU1CTE9DSyg1LDAsZXNpLFNJWkVPRl9GQVNUX0ZMT0FUKV0KKwltb3ZhcHMJeG1tMSwgWE1NV09SRCBbWE1NQkxPQ0soNywwLGVzaSxTSVpFT0ZfRkFTVF9GTE9BVCldCisKKwltb3ZhcHMJeG1tNCx4bW0yCisJbW92YXBzCXhtbTAseG1tNQorCWFkZHBzCXhtbTIseG1tMQkJOyB4bW0yPXoxMQorCWFkZHBzCXhtbTUseG1tMwkJOyB4bW01PXoxMworCXN1YnBzCXhtbTQseG1tMQkJOyB4bW00PXoxMgorCXN1YnBzCXhtbTAseG1tMwkJOyB4bW0wPXoxMAorCisJbW92YXBzCXhtbTEseG1tMgorCXN1YnBzCXhtbTIseG1tNQorCWFkZHBzCXhtbTEseG1tNQkJOyB4bW0xPXRtcDcKKworCW11bHBzCXhtbTIsW0dPVE9GRihlYngsUERfMV80MTQpXQk7IHhtbTI9dG1wMTEKKworCW1vdmFwcwl4bW0zLHhtbTAKKwlhZGRwcwl4bW0wLHhtbTQKKwltdWxwcwl4bW0wLFtHT1RPRkYoZWJ4LFBEXzFfODQ3KV0JOyB4bW0wPXo1CisJbXVscHMJeG1tMyxbR09UT0ZGKGVieCxQRF9NMl82MTMpXQk7IHhtbTM9KHoxMCAqIC0yLjYxMzEyNTkzMCkKKwltdWxwcwl4bW00LFtHT1RPRkYoZWJ4LFBEXzFfMDgyKV0JOyB4bW00PSh6MTIgKiAxLjA4MjM5MjIwMCkKKwlhZGRwcwl4bW0zLHhtbTAJCTsgeG1tMz10bXAxMgorCXN1YnBzCXhtbTQseG1tMAkJOyB4bW00PXRtcDEwCisKKwk7IC0tIEZpbmFsIG91dHB1dCBzdGFnZQorCisJc3VicHMJeG1tMyx4bW0xCQk7IHhtbTM9dG1wNgorCW1vdmFwcwl4bW01LHhtbTYKKwltb3ZhcHMJeG1tMCx4bW03CisJYWRkcHMJeG1tNix4bW0xCQk7IHhtbTY9ZGF0YTA9KDAwIDEwIDIwIDMwKQorCWFkZHBzCXhtbTcseG1tMwkJOyB4bW03PWRhdGExPSgwMSAxMSAyMSAzMSkKKwlzdWJwcwl4bW01LHhtbTEJCTsgeG1tNT1kYXRhNz0oMDcgMTcgMjcgMzcpCisJc3VicHMJeG1tMCx4bW0zCQk7IHhtbTA9ZGF0YTY9KDA2IDE2IDI2IDM2KQorCXN1YnBzCXhtbTIseG1tMwkJOyB4bW0yPXRtcDUKKworCW1vdmFwcwl4bW0xLFtHT1RPRkYoZWJ4LFBEXzBfMTI1KV0JOyB4bW0xPVtQRF8wXzEyNV0KKworCW11bHBzCXhtbTYseG1tMQkJOyBkZXNjYWxlKDEvOCkKKwltdWxwcwl4bW03LHhtbTEJCTsgZGVzY2FsZSgxLzgpCisJbXVscHMJeG1tNSx4bW0xCQk7IGRlc2NhbGUoMS84KQorCW11bHBzCXhtbTAseG1tMQkJOyBkZXNjYWxlKDEvOCkKKworCW1vdmhscHMgICB4bW0zLHhtbTYKKwltb3ZobHBzICAgeG1tMSx4bW03CisJY3Z0cHMycGkgIG1tMCx4bW02CQk7IHJvdW5kIHRvIGludDMyLCBtbTA9ZGF0YTBMPSgwMCAxMCkKKwljdnRwczJwaSAgbW0xLHhtbTcJCTsgcm91bmQgdG8gaW50MzIsIG1tMT1kYXRhMUw9KDAxIDExKQorCWN2dHBzMnBpICBtbTIseG1tMwkJOyByb3VuZCB0byBpbnQzMiwgbW0yPWRhdGEwSD0oMjAgMzApCisJY3Z0cHMycGkgIG1tMyx4bW0xCQk7IHJvdW5kIHRvIGludDMyLCBtbTM9ZGF0YTFIPSgyMSAzMSkKKwlwYWNrc3NkdyAgbW0wLG1tMgkJOyBtbTA9ZGF0YTA9KDAwIDEwIDIwIDMwKQorCXBhY2tzc2R3ICBtbTEsbW0zCQk7IG1tMT1kYXRhMT0oMDEgMTEgMjEgMzEpCisKKwltb3ZobHBzICAgeG1tNix4bW01CisJbW92aGxwcyAgIHhtbTcseG1tMAorCWN2dHBzMnBpICBtbTQseG1tNQkJOyByb3VuZCB0byBpbnQzMiwgbW00PWRhdGE3TD0oMDcgMTcpCisJY3Z0cHMycGkgIG1tNSx4bW0wCQk7IHJvdW5kIHRvIGludDMyLCBtbTU9ZGF0YTZMPSgwNiAxNikKKwljdnRwczJwaSAgbW02LHhtbTYJCTsgcm91bmQgdG8gaW50MzIsIG1tNj1kYXRhN0g9KDI3IDM3KQorCWN2dHBzMnBpICBtbTcseG1tNwkJOyByb3VuZCB0byBpbnQzMiwgbW03PWRhdGE2SD0oMjYgMzYpCisJcGFja3NzZHcgIG1tNCxtbTYJCTsgbW00PWRhdGE3PSgwNyAxNyAyNyAzNykKKwlwYWNrc3NkdyAgbW01LG1tNwkJOyBtbTU9ZGF0YTY9KDA2IDE2IDI2IDM2KQorCisJcGFja3Nzd2IgIG1tMCxtbTUJCTsgbW0wPSgwMCAxMCAyMCAzMCAwNiAxNiAyNiAzNikKKwlwYWNrc3N3YiAgbW0xLG1tNAkJOyBtbTE9KDAxIDExIDIxIDMxIDA3IDE3IDI3IDM3KQorCisJbW92YXBzCXhtbTMsIFhNTVdPUkQgW3drKDApXQk7IHhtbTM9dG1wMgorCW1vdmFwcwl4bW0xLCBYTU1XT1JEIFt3aygxKV0JOyB4bW0xPXRtcDMKKworCW1vdmFwcwl4bW02LFtHT1RPRkYoZWJ4LFBEXzBfMTI1KV0JOyB4bW02PVtQRF8wXzEyNV0KKworCWFkZHBzCXhtbTQseG1tMgkJOyB4bW00PXRtcDQKKwltb3ZhcHMJeG1tNSx4bW0zCisJbW92YXBzCXhtbTAseG1tMQorCWFkZHBzCXhtbTMseG1tMgkJOyB4bW0zPWRhdGEyPSgwMiAxMiAyMiAzMikKKwlhZGRwcwl4bW0xLHhtbTQJCTsgeG1tMT1kYXRhND0oMDQgMTQgMjQgMzQpCisJc3VicHMJeG1tNSx4bW0yCQk7IHhtbTU9ZGF0YTU9KDA1IDE1IDI1IDM1KQorCXN1YnBzCXhtbTAseG1tNAkJOyB4bW0wPWRhdGEzPSgwMyAxMyAyMyAzMykKKworCW11bHBzCXhtbTMseG1tNgkJOyBkZXNjYWxlKDEvOCkKKwltdWxwcwl4bW0xLHhtbTYJCTsgZGVzY2FsZSgxLzgpCisJbXVscHMJeG1tNSx4bW02CQk7IGRlc2NhbGUoMS84KQorCW11bHBzCXhtbTAseG1tNgkJOyBkZXNjYWxlKDEvOCkKKworCW1vdmhscHMgICB4bW03LHhtbTMKKwltb3ZobHBzICAgeG1tMix4bW0xCisJY3Z0cHMycGkgIG1tMix4bW0zCQk7IHJvdW5kIHRvIGludDMyLCBtbTI9ZGF0YTJMPSgwMiAxMikKKwljdnRwczJwaSAgbW0zLHhtbTEJCTsgcm91bmQgdG8gaW50MzIsIG1tMz1kYXRhNEw9KDA0IDE0KQorCWN2dHBzMnBpICBtbTYseG1tNwkJOyByb3VuZCB0byBpbnQzMiwgbW02PWRhdGEySD0oMjIgMzIpCisJY3Z0cHMycGkgIG1tNyx4bW0yCQk7IHJvdW5kIHRvIGludDMyLCBtbTc9ZGF0YTRIPSgyNCAzNCkKKwlwYWNrc3NkdyAgbW0yLG1tNgkJOyBtbTI9ZGF0YTI9KDAyIDEyIDIyIDMyKQorCXBhY2tzc2R3ICBtbTMsbW03CQk7IG1tMz1kYXRhND0oMDQgMTQgMjQgMzQpCisKKwltb3ZobHBzICAgeG1tNCx4bW01CisJbW92aGxwcyAgIHhtbTYseG1tMAorCWN2dHBzMnBpICBtbTUseG1tNQkJOyByb3VuZCB0byBpbnQzMiwgbW01PWRhdGE1TD0oMDUgMTUpCisJY3Z0cHMycGkgIG1tNCx4bW0wCQk7IHJvdW5kIHRvIGludDMyLCBtbTQ9ZGF0YTNMPSgwMyAxMykKKwljdnRwczJwaSAgbW02LHhtbTQJCTsgcm91bmQgdG8gaW50MzIsIG1tNj1kYXRhNUg9KDI1IDM1KQorCWN2dHBzMnBpICBtbTcseG1tNgkJOyByb3VuZCB0byBpbnQzMiwgbW03PWRhdGEzSD0oMjMgMzMpCisJcGFja3NzZHcgIG1tNSxtbTYJCTsgbW01PWRhdGE1PSgwNSAxNSAyNSAzNSkKKwlwYWNrc3NkdyAgbW00LG1tNwkJOyBtbTQ9ZGF0YTM9KDAzIDEzIDIzIDMzKQorCisJbW92cSAgICAgIG1tNixbR09UT0ZGKGVieCxQQl9DRU5URVJKU0FNUCldCTsgbW02PVtQQl9DRU5URVJKU0FNUF0KKworCXBhY2tzc3diICBtbTIsbW0zCQk7IG1tMj0oMDIgMTIgMjIgMzIgMDQgMTQgMjQgMzQpCisJcGFja3Nzd2IgIG1tNCxtbTUJCTsgbW00PSgwMyAxMyAyMyAzMyAwNSAxNSAyNSAzNSkKKworCXBhZGRiICAgICBtbTAsbW02CisJcGFkZGIgICAgIG1tMSxtbTYKKwlwYWRkYiAgICAgbW0yLG1tNgorCXBhZGRiICAgICBtbTQsbW02CisKKwltb3ZxICAgICAgbW03LG1tMAkJOyB0cmFuc3Bvc2UgY29lZmZpY2llbnRzKHBoYXNlIDEpCisJcHVucGNrbGJ3IG1tMCxtbTEJCTsgbW0wPSgwMCAwMSAxMCAxMSAyMCAyMSAzMCAzMSkKKwlwdW5wY2toYncgbW03LG1tMQkJOyBtbTc9KDA2IDA3IDE2IDE3IDI2IDI3IDM2IDM3KQorCW1vdnEgICAgICBtbTMsbW0yCQk7IHRyYW5zcG9zZSBjb2VmZmljaWVudHMocGhhc2UgMSkKKwlwdW5wY2tsYncgbW0yLG1tNAkJOyBtbTI9KDAyIDAzIDEyIDEzIDIyIDIzIDMyIDMzKQorCXB1bnBja2hidyBtbTMsbW00CQk7IG1tMz0oMDQgMDUgMTQgMTUgMjQgMjUgMzQgMzUpCisKKwltb3ZxICAgICAgbW01LG1tMAkJOyB0cmFuc3Bvc2UgY29lZmZpY2llbnRzKHBoYXNlIDIpCisJcHVucGNrbHdkIG1tMCxtbTIJCTsgbW0wPSgwMCAwMSAwMiAwMyAxMCAxMSAxMiAxMykKKwlwdW5wY2tod2QgbW01LG1tMgkJOyBtbTU9KDIwIDIxIDIyIDIzIDMwIDMxIDMyIDMzKQorCW1vdnEgICAgICBtbTYsbW0zCQk7IHRyYW5zcG9zZSBjb2VmZmljaWVudHMocGhhc2UgMikKKwlwdW5wY2tsd2QgbW0zLG1tNwkJOyBtbTM9KDA0IDA1IDA2IDA3IDE0IDE1IDE2IDE3KQorCXB1bnBja2h3ZCBtbTYsbW03CQk7IG1tNj0oMjQgMjUgMjYgMjcgMzQgMzUgMzYgMzcpCisKKwltb3ZxICAgICAgbW0xLG1tMAkJOyB0cmFuc3Bvc2UgY29lZmZpY2llbnRzKHBoYXNlIDMpCisJcHVucGNrbGRxIG1tMCxtbTMJCTsgbW0wPSgwMCAwMSAwMiAwMyAwNCAwNSAwNiAwNykKKwlwdW5wY2toZHEgbW0xLG1tMwkJOyBtbTE9KDEwIDExIDEyIDEzIDE0IDE1IDE2IDE3KQorCW1vdnEgICAgICBtbTQsbW01CQk7IHRyYW5zcG9zZSBjb2VmZmljaWVudHMocGhhc2UgMykKKwlwdW5wY2tsZHEgbW01LG1tNgkJOyBtbTU9KDIwIDIxIDIyIDIzIDI0IDI1IDI2IDI3KQorCXB1bnBja2hkcSBtbTQsbW02CQk7IG1tND0oMzAgMzEgMzIgMzMgMzQgMzUgMzYgMzcpCisKKwlwdXNocGljCWVieAkJCTsgc2F2ZSBHT1QgYWRkcmVzcworCisJbW92CWVkeCwgSlNBTVBST1cgW2VkaSswKlNJWkVPRl9KU0FNUFJPV10KKwltb3YJZWJ4LCBKU0FNUFJPVyBbZWRpKzEqU0laRU9GX0pTQU1QUk9XXQorCW1vdnEJTU1XT1JEIFtlZHgrZWF4KlNJWkVPRl9KU0FNUExFXSwgbW0wCisJbW92cQlNTVdPUkQgW2VieCtlYXgqU0laRU9GX0pTQU1QTEVdLCBtbTEKKwltb3YJZWR4LCBKU0FNUFJPVyBbZWRpKzIqU0laRU9GX0pTQU1QUk9XXQorCW1vdgllYngsIEpTQU1QUk9XIFtlZGkrMypTSVpFT0ZfSlNBTVBST1ddCisJbW92cQlNTVdPUkQgW2VkeCtlYXgqU0laRU9GX0pTQU1QTEVdLCBtbTUKKwltb3ZxCU1NV09SRCBbZWJ4K2VheCpTSVpFT0ZfSlNBTVBMRV0sIG1tNAorCisJcG9wcGljCWVieAkJCTsgcmVzdG9yZSBHT1QgYWRkcmVzcworCisJYWRkCWVzaSwgYnl0ZSA0KlNJWkVPRl9GQVNUX0ZMT0FUCTsgd3NwdHIKKwlhZGQJZWRpLCBieXRlIDQqU0laRU9GX0pTQU1QUk9XCisJZGVjCWVjeAkJCQk7IGN0cgorCWpuegluZWFyIC5yb3dsb29wCisKKwllbW1zCQk7IGVtcHR5IE1NWCBzdGF0ZQorCisJcG9wCWVkaQorCXBvcAllc2kKKzsJcG9wCWVkeAkJOyBuZWVkIG5vdCBiZSBwcmVzZXJ2ZWQKKzsJcG9wCWVjeAkJOyBuZWVkIG5vdCBiZSBwcmVzZXJ2ZWQKKwlwb3AJZWJ4CisJbW92CWVzcCxlYnAJCTsgZXNwIDwtIGFsaWduZWQgZWJwCisJcG9wCWVzcAkJOyBlc3AgPC0gb3JpZ2luYWwgZWJwCisJcG9wCWVicAorCXJldAorCis7IEZvciBzb21lIHJlYXNvbiwgdGhlIE9TIFggbGlua2VyIGRvZXMgbm90IGhvbm9yIHRoZSByZXF1ZXN0IHRvIGFsaWduIHRoZQorOyBzZWdtZW50IHVubGVzcyB3ZSBkbyB0aGlzLgorCWFsaWduCTE2CmRpZmYgLS1naXQgYS9zaW1kL2pzaW1kLmggYi9zaW1kL2pzaW1kLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODlhYzFiNwotLS0gL2Rldi9udWxsCisrKyBiL3NpbWQvanNpbWQuaApAQCAtMCwwICsxLDUwNCBAQAorLyoKKyAqIHNpbWQvanNpbWQuaAorICoKKyAqIENvcHlyaWdodCAyMDA5IFBpZXJyZSBPc3NtYW4gPG9zc21hbkBjZW5kaW8uc2U+IGZvciBDZW5kaW8gQUIKKyAqIAorICogQmFzZWQgb24gdGhlIHg4NiBTSU1EIGV4dGVuc2lvbiBmb3IgSUpHIEpQRUcgbGlicmFyeSwKKyAqIENvcHlyaWdodCAoQykgMTk5OS0yMDA2LCBNSVlBU0FLQSBNYXNhcnUuCisgKiBGb3IgY29uZGl0aW9ucyBvZiBkaXN0cmlidXRpb24gYW5kIHVzZSwgc2VlIGNvcHlyaWdodCBub3RpY2UgaW4ganNpbWRleHQuaW5jCisgKgorICovCisKKy8qIEJpdG1hc2sgZm9yIHN1cHBvcnRlZCBhY2NlbGVyYXRpb24gbWV0aG9kcyAqLworCisjZGVmaW5lIEpTSU1EX05PTkUgICAgMHgwMAorI2RlZmluZSBKU0lNRF9NTVggICAgIDB4MDEKKyNkZWZpbmUgSlNJTURfM0ROT1cgICAweDAyCisjZGVmaW5lIEpTSU1EX1NTRSAgICAgMHgwNAorI2RlZmluZSBKU0lNRF9TU0UyICAgIDB4MDgKKworLyogU2hvcnQgZm9ybXMgb2YgZXh0ZXJuYWwgbmFtZXMgZm9yIHN5c3RlbXMgd2l0aCBicmFpbi1kYW1hZ2VkIGxpbmtlcnMuICovCisKKyNpZmRlZiBORUVEX1NIT1JUX0VYVEVSTkFMX05BTUVTCisjZGVmaW5lIGpwZWdfc2ltZF9jcHVfc3VwcG9ydCAgICAgICAgICAgICAgICAgalNpQ3B1U3VwcG9ydAorI2RlZmluZSBqc2ltZF9yZ2JfeWNjX2NvbnZlcnRfbW14ICAgICAgICAgICAgIGpTUkdCWUNDTQorI2RlZmluZSBqc2ltZF9leHRyZ2JfeWNjX2NvbnZlcnRfbW14ICAgICAgICAgIGpTRVhUUkdCWUNDTQorI2RlZmluZSBqc2ltZF9leHRyZ2J4X3ljY19jb252ZXJ0X21teCAgICAgICAgIGpTRVhUUkdCWFlDQ00KKyNkZWZpbmUganNpbWRfZXh0YmdyX3ljY19jb252ZXJ0X21teCAgICAgICAgICBqU0VYVEJHUllDQ00KKyNkZWZpbmUganNpbWRfZXh0YmdyeF95Y2NfY29udmVydF9tbXggICAgICAgICBqU0VYVEJHUlhZQ0NNCisjZGVmaW5lIGpzaW1kX2V4dHhiZ3JfeWNjX2NvbnZlcnRfbW14ICAgICAgICAgalNFWFRYQkdSWUNDTQorI2RlZmluZSBqc2ltZF9leHR4cmdiX3ljY19jb252ZXJ0X21teCAgICAgICAgIGpTRVhUWFJHQllDQ00KKyNkZWZpbmUganNpbWRfeWNjX3JnYl9jb252ZXJ0X21teCAgICAgICAgICAgICBqU1lDQ1JHQk0KKyNkZWZpbmUganNpbWRfeWNjX2V4dHJnYl9jb252ZXJ0X21teCAgICAgICAgICBqU1lDQ0VYVFJHQk0KKyNkZWZpbmUganNpbWRfeWNjX2V4dHJnYnhfY29udmVydF9tbXggICAgICAgICBqU1lDQ0VYVFJHQlhNCisjZGVmaW5lIGpzaW1kX3ljY19leHRiZ3JfY29udmVydF9tbXggICAgICAgICAgalNZQ0NFWFRCR1JNCisjZGVmaW5lIGpzaW1kX3ljY19leHRiZ3J4X2NvbnZlcnRfbW14ICAgICAgICAgalNZQ0NFWFRCR1JYTQorI2RlZmluZSBqc2ltZF95Y2NfZXh0eGJncl9jb252ZXJ0X21teCAgICAgICAgIGpTWUNDRVhUWEJHUk0KKyNkZWZpbmUganNpbWRfeWNjX2V4dHhyZ2JfY29udmVydF9tbXggICAgICAgICBqU1lDQ0VYVFhSR0JNCisjZGVmaW5lIGpjb25zdF9yZ2JfeWNjX2NvbnZlcnRfc3NlMiAgICAgICAgICAgalNDUkdCWUNDUzIKKyNkZWZpbmUganNpbWRfcmdiX3ljY19jb252ZXJ0X3NzZTIgICAgICAgICAgICBqU1JHQllDQ1MyCisjZGVmaW5lIGpzaW1kX2V4dHJnYl95Y2NfY29udmVydF9zc2UyICAgICAgICAgalNFWFRSR0JZQ0NTMgorI2RlZmluZSBqc2ltZF9leHRyZ2J4X3ljY19jb252ZXJ0X3NzZTIgICAgICAgIGpTRVhUUkdCWFlDQ1MyCisjZGVmaW5lIGpzaW1kX2V4dGJncl95Y2NfY29udmVydF9zc2UyICAgICAgICAgalNFWFRCR1JZQ0NTMgorI2RlZmluZSBqc2ltZF9leHRiZ3J4X3ljY19jb252ZXJ0X3NzZTIgICAgICAgIGpTRVhUQkdSWFlDQ1MyCisjZGVmaW5lIGpzaW1kX2V4dHhiZ3JfeWNjX2NvbnZlcnRfc3NlMiAgICAgICAgalNFWFRYQkdSWUNDUzIKKyNkZWZpbmUganNpbWRfZXh0eHJnYl95Y2NfY29udmVydF9zc2UyICAgICAgICBqU0VYVFhSR0JZQ0NTMgorI2RlZmluZSBqY29uc3RfeWNjX3JnYl9jb252ZXJ0X3NzZTIgICAgICAgICAgIGpTQ1lDQ1JHQlMyCisjZGVmaW5lIGpzaW1kX3ljY19yZ2JfY29udmVydF9zc2UyICAgICAgICAgICAgalNZQ0NSR0JTMgorI2RlZmluZSBqc2ltZF95Y2NfZXh0cmdiX2NvbnZlcnRfc3NlMiAgICAgICAgIGpTWUNDRVhUUkdCUzIKKyNkZWZpbmUganNpbWRfeWNjX2V4dHJnYnhfY29udmVydF9zc2UyICAgICAgICBqU1lDQ0VYVFJHQlhTMgorI2RlZmluZSBqc2ltZF95Y2NfZXh0YmdyX2NvbnZlcnRfc3NlMiAgICAgICAgIGpTWUNDRVhUQkdSUzIKKyNkZWZpbmUganNpbWRfeWNjX2V4dGJncnhfY29udmVydF9zc2UyICAgICAgICBqU1lDQ0VYVEJHUlhTMgorI2RlZmluZSBqc2ltZF95Y2NfZXh0eGJncl9jb252ZXJ0X3NzZTIgICAgICAgIGpTWUNDRVhUWEJHUlMyCisjZGVmaW5lIGpzaW1kX3ljY19leHR4cmdiX2NvbnZlcnRfc3NlMiAgICAgICAgalNZQ0NFWFRYUkdCUzIKKyNkZWZpbmUganNpbWRfaDJ2Ml9kb3duc2FtcGxlX21teCAgICAgICAgICAgICBqU0RuSDJWMk0KKyNkZWZpbmUganNpbWRfaDJ2MV9kb3duc2FtcGxlX21teCAgICAgICAgICAgICBqU0RuSDJWMU0KKyNkZWZpbmUganNpbWRfaDJ2Ml9kb3duc2FtcGxlX3NzZTIgICAgICAgICAgICBqU0RuSDJWMlMyCisjZGVmaW5lIGpzaW1kX2gydjFfZG93bnNhbXBsZV9zc2UyICAgICAgICAgICAgalNEbkgyVjFTMgorI2RlZmluZSBqc2ltZF9oMnYyX3Vwc2FtcGxlX21teCAgICAgICAgICAgICAgIGpTVXBIMlYyTQorI2RlZmluZSBqc2ltZF9oMnYxX3Vwc2FtcGxlX21teCAgICAgICAgICAgICAgIGpTVXBIMlYxTQorI2RlZmluZSBqc2ltZF9oMnYyX2ZhbmN5X3Vwc2FtcGxlX21teCAgICAgICAgIGpTRlVwSDJWMk0KKyNkZWZpbmUganNpbWRfaDJ2MV9mYW5jeV91cHNhbXBsZV9tbXggICAgICAgICBqU0ZVcEgyVjFNCisjZGVmaW5lIGpzaW1kX2gydjJfbWVyZ2VkX3Vwc2FtcGxlX21teCAgICAgICAgalNNVXBIMlYyTQorI2RlZmluZSBqc2ltZF9oMnYyX2V4dHJnYl9tZXJnZWRfdXBzYW1wbGVfbW14IGpTTVVwSDJWMkVYVFJHQk0KKyNkZWZpbmUganNpbWRfaDJ2Ml9leHRyZ2J4X21lcmdlZF91cHNhbXBsZV9tbXggalNNVXBIMlYyRVhUUkdCWE0KKyNkZWZpbmUganNpbWRfaDJ2Ml9leHRiZ3JfbWVyZ2VkX3Vwc2FtcGxlX21teCBqU01VcEgyVjJFWFRCR1JNCisjZGVmaW5lIGpzaW1kX2gydjJfZXh0YmdyeF9tZXJnZWRfdXBzYW1wbGVfbW14IGpTTVVwSDJWMkVYVEJHUlhNCisjZGVmaW5lIGpzaW1kX2gydjJfZXh0eGJncl9tZXJnZWRfdXBzYW1wbGVfbW14IGpTTVVwSDJWMkVYVFhCR1JNCisjZGVmaW5lIGpzaW1kX2gydjJfZXh0eHJnYl9tZXJnZWRfdXBzYW1wbGVfbW14IGpTTVVwSDJWMkVYVFhSR0JNCisjZGVmaW5lIGpzaW1kX2gydjFfbWVyZ2VkX3Vwc2FtcGxlX21teCAgICAgICAgalNNVXBIMlYxTQorI2RlZmluZSBqc2ltZF9oMnYxX2V4dHJnYl9tZXJnZWRfdXBzYW1wbGVfbW14IGpTTVVwSDJWMUVYVFJHQk0KKyNkZWZpbmUganNpbWRfaDJ2MV9leHRyZ2J4X21lcmdlZF91cHNhbXBsZV9tbXggalNNVXBIMlYxRVhUUkdCWE0KKyNkZWZpbmUganNpbWRfaDJ2MV9leHRiZ3JfbWVyZ2VkX3Vwc2FtcGxlX21teCBqU01VcEgyVjFFWFRCR1JNCisjZGVmaW5lIGpzaW1kX2gydjFfZXh0YmdyeF9tZXJnZWRfdXBzYW1wbGVfbW14IGpTTVVwSDJWMUVYVEJHUlhNCisjZGVmaW5lIGpzaW1kX2gydjFfZXh0eGJncl9tZXJnZWRfdXBzYW1wbGVfbW14IGpTTVVwSDJWMUVYVFhCR1JNCisjZGVmaW5lIGpzaW1kX2gydjFfZXh0eHJnYl9tZXJnZWRfdXBzYW1wbGVfbW14IGpTTVVwSDJWMUVYVFhSR0JNCisjZGVmaW5lIGpzaW1kX2gydjJfdXBzYW1wbGVfc3NlMiAgICAgICAgICAgICAgalNVcEgyVjJTMgorI2RlZmluZSBqc2ltZF9oMnYxX3Vwc2FtcGxlX3NzZTIgICAgICAgICAgICAgIGpTVXBIMlYxUzIKKyNkZWZpbmUgamNvbnN0X2ZhbmN5X3Vwc2FtcGxlX3NzZTIgICAgICAgICAgICBqU0NGVXBTMgorI2RlZmluZSBqc2ltZF9oMnYyX2ZhbmN5X3Vwc2FtcGxlX3NzZTIgICAgICAgIGpTRlVwSDJWMlMyCisjZGVmaW5lIGpzaW1kX2gydjFfZmFuY3lfdXBzYW1wbGVfc3NlMiAgICAgICAgalNGVXBIMlYxUzIKKyNkZWZpbmUgamNvbnN0X21lcmdlZF91cHNhbXBsZV9zc2UyICAgICAgICAgICBqU0NNVXBTMgorI2RlZmluZSBqc2ltZF9oMnYyX21lcmdlZF91cHNhbXBsZV9zc2UyICAgICAgIGpTTVVwSDJWMlMyCisjZGVmaW5lIGpzaW1kX2gydjJfZXh0cmdiX21lcmdlZF91cHNhbXBsZV9zc2UyIGpTTVVwSDJWMkVYVFJHQlMyCisjZGVmaW5lIGpzaW1kX2gydjJfZXh0cmdieF9tZXJnZWRfdXBzYW1wbGVfc3NlMiBqU01VcEgyVjJFWFRSR0JYUzIKKyNkZWZpbmUganNpbWRfaDJ2Ml9leHRiZ3JfbWVyZ2VkX3Vwc2FtcGxlX3NzZTIgalNNVXBIMlYyRVhUQkdSUzIKKyNkZWZpbmUganNpbWRfaDJ2Ml9leHRiZ3J4X21lcmdlZF91cHNhbXBsZV9zc2UyIGpTTVVwSDJWMkVYVEJHUlhTMgorI2RlZmluZSBqc2ltZF9oMnYyX2V4dHhiZ3JfbWVyZ2VkX3Vwc2FtcGxlX3NzZTIgalNNVXBIMlYyRVhUWEJHUlMyCisjZGVmaW5lIGpzaW1kX2gydjJfZXh0eHJnYl9tZXJnZWRfdXBzYW1wbGVfc3NlMiBqU01VcEgyVjJFWFRYUkdCUzIKKyNkZWZpbmUganNpbWRfaDJ2MV9tZXJnZWRfdXBzYW1wbGVfc3NlMiAgICAgICBqU01VcEgyVjFTMgorI2RlZmluZSBqc2ltZF9oMnYxX2V4dHJnYl9tZXJnZWRfdXBzYW1wbGVfc3NlMiBqU01VcEgyVjFFWFRSR0JTMgorI2RlZmluZSBqc2ltZF9oMnYxX2V4dHJnYnhfbWVyZ2VkX3Vwc2FtcGxlX3NzZTIgalNNVXBIMlYxRVhUUkdCWFMyCisjZGVmaW5lIGpzaW1kX2gydjFfZXh0YmdyX21lcmdlZF91cHNhbXBsZV9zc2UyIGpTTVVwSDJWMUVYVEJHUlMyCisjZGVmaW5lIGpzaW1kX2gydjFfZXh0YmdyeF9tZXJnZWRfdXBzYW1wbGVfc3NlMiBqU01VcEgyVjFFWFRCR1JYUzIKKyNkZWZpbmUganNpbWRfaDJ2MV9leHR4YmdyX21lcmdlZF91cHNhbXBsZV9zc2UyIGpTTVVwSDJWMUVYVFhCR1JTMgorI2RlZmluZSBqc2ltZF9oMnYxX2V4dHhyZ2JfbWVyZ2VkX3Vwc2FtcGxlX3NzZTIgalNNVXBIMlYxRVhUWFJHQlMyCisjZGVmaW5lIGpzaW1kX2NvbnZzYW1wX21teCAgICAgICAgICAgICAgICAgICAgalNDb252TQorI2RlZmluZSBqc2ltZF9jb252c2FtcF9zc2UyICAgICAgICAgICAgICAgICAgIGpTQ29udlMyCisjZGVmaW5lIGpzaW1kX2NvbnZzYW1wX2Zsb2F0XzNkbm93ICAgICAgICAgICAgalNDb252RjNECisjZGVmaW5lIGpzaW1kX2NvbnZzYW1wX2Zsb2F0X3NzZSAgICAgICAgICAgICAgalNDb252RlMKKyNkZWZpbmUganNpbWRfY29udnNhbXBfZmxvYXRfc3NlMiAgICAgICAgICAgICBqU0NvbnZGUzIKKyNkZWZpbmUganNpbWRfZmRjdF9pc2xvd19tbXggICAgICAgICAgICAgICAgICBqU0ZETUlTCisjZGVmaW5lIGpzaW1kX2ZkY3RfaWZhc3RfbW14ICAgICAgICAgICAgICAgICAgalNGRE1JRgorI2RlZmluZSBqY29uc3RfZmRjdF9pc2xvd19zc2UyICAgICAgICAgICAgICAgIGpTQ0ZEUzJJUworI2RlZmluZSBqc2ltZF9mZGN0X2lzbG93X3NzZTIgICAgICAgICAgICAgICAgIGpTRkRTMklTCisjZGVmaW5lIGpjb25zdF9mZGN0X2lmYXN0X3NzZTIgICAgICAgICAgICAgICAgalNDRkRTMklGCisjZGVmaW5lIGpzaW1kX2ZkY3RfaWZhc3Rfc3NlMiAgICAgICAgICAgICAgICAgalNGRFMySUYKKyNkZWZpbmUganNpbWRfZmRjdF9mbG9hdF8zZG5vdyAgICAgICAgICAgICAgICBqU0ZEM0RGCisjZGVmaW5lIGpjb25zdF9mZGN0X2Zsb2F0X3NzZSAgICAgICAgICAgICAgICAgalNDRkRTRgorI2RlZmluZSBqc2ltZF9mZGN0X2Zsb2F0X3NzZSAgICAgICAgICAgICAgICAgIGpTRkRTRgorI2RlZmluZSBqc2ltZF9xdWFudGl6ZV9tbXggICAgICAgICAgICAgICAgICAgIGpTUXVhbnRNCisjZGVmaW5lIGpzaW1kX3F1YW50aXplX3NzZTIgICAgICAgICAgICAgICAgICAgalNRdWFudFMyCisjZGVmaW5lIGpzaW1kX3F1YW50aXplX2Zsb2F0XzNkbm93ICAgICAgICAgICAgalNRdWFudEYzRAorI2RlZmluZSBqc2ltZF9xdWFudGl6ZV9mbG9hdF9zc2UgICAgICAgICAgICAgIGpTUXVhbnRGUworI2RlZmluZSBqc2ltZF9xdWFudGl6ZV9mbG9hdF9zc2UyICAgICAgICAgICAgIGpTUXVhbnRGUzIKKyNkZWZpbmUganNpbWRfaWRjdF8yeDJfbW14ICAgICAgICAgICAgICAgICAgICBqU0lETTIyCisjZGVmaW5lIGpzaW1kX2lkY3RfNHg0X21teCAgICAgICAgICAgICAgICAgICAgalNJRE00NAorI2RlZmluZSBqY29uc3RfaWRjdF9yZWRfc3NlMiAgICAgICAgICAgICAgICAgIGpTQ0lEUzJSCisjZGVmaW5lIGpzaW1kX2lkY3RfMngyX3NzZTIgICAgICAgICAgICAgICAgICAgalNJRFMyMjIKKyNkZWZpbmUganNpbWRfaWRjdF80eDRfc3NlMiAgICAgICAgICAgICAgICAgICBqU0lEUzI0NAorI2RlZmluZSBqc2ltZF9pZGN0X2lzbG93X21teCAgICAgICAgICAgICAgICAgIGpTSURNSVMKKyNkZWZpbmUganNpbWRfaWRjdF9pZmFzdF9tbXggICAgICAgICAgICAgICAgICBqU0lETUlGCisjZGVmaW5lIGpjb25zdF9pZGN0X2lzbG93X3NzZTIgICAgICAgICAgICAgICAgalNDSURTMklTCisjZGVmaW5lIGpzaW1kX2lkY3RfaXNsb3dfc3NlMiAgICAgICAgICAgICAgICAgalNJRFMySVMKKyNkZWZpbmUgamNvbnN0X2lkY3RfaWZhc3Rfc3NlMiAgICAgICAgICAgICAgICBqU0NJRFMySUYKKyNkZWZpbmUganNpbWRfaWRjdF9pZmFzdF9zc2UyICAgICAgICAgICAgICAgICBqU0lEUzJJRgorI2RlZmluZSBqc2ltZF9pZGN0X2Zsb2F0XzNkbm93ICAgICAgICAgICAgICAgIGpTSUQzREYKKyNkZWZpbmUgamNvbnN0X2ZkY3RfZmxvYXRfc3NlICAgICAgICAgICAgICAgICBqU0NJRFNGCisjZGVmaW5lIGpzaW1kX2lkY3RfZmxvYXRfc3NlICAgICAgICAgICAgICAgICAgalNJRFNGCisjZGVmaW5lIGpjb25zdF9mZGN0X2Zsb2F0X3NzZTIgICAgICAgICAgICAgICAgalNDSURTMkYKKyNkZWZpbmUganNpbWRfaWRjdF9mbG9hdF9zc2UyICAgICAgICAgICAgICAgICBqU0lEUzJGCisjZW5kaWYgLyogTkVFRF9TSE9SVF9FWFRFUk5BTF9OQU1FUyAqLworCisvKiBTSU1EIEV4dDogcmV0cmlldmUgU0lNRC9DUFUgaW5mb3JtYXRpb24gKi8KK0VYVEVSTih1bnNpZ25lZCBpbnQpIGpwZWdfc2ltZF9jcHVfc3VwcG9ydCBKUFAoKHZvaWQpKTsKKworLyogU0lNRCBDb2xvciBTcGFjZSBDb252ZXJzaW9uICovCitFWFRFUk4odm9pZCkganNpbWRfcmdiX3ljY19jb252ZXJ0X21teAorICAgICAgICBKUFAoKEpESU1FTlNJT04gaW1nX3dpZHRoLAorICAgICAgICAgICAgIEpTQU1QQVJSQVkgaW5wdXRfYnVmLCBKU0FNUElNQUdFIG91dHB1dF9idWYsCisgICAgICAgICAgICAgSkRJTUVOU0lPTiBvdXRwdXRfcm93LCBpbnQgbnVtX3Jvd3MpKTsKK0VYVEVSTih2b2lkKSBqc2ltZF9leHRyZ2JfeWNjX2NvbnZlcnRfbW14CisgICAgICAgIEpQUCgoSkRJTUVOU0lPTiBpbWdfd2lkdGgsCisgICAgICAgICAgICAgSlNBTVBBUlJBWSBpbnB1dF9idWYsIEpTQU1QSU1BR0Ugb3V0cHV0X2J1ZiwKKyAgICAgICAgICAgICBKRElNRU5TSU9OIG91dHB1dF9yb3csIGludCBudW1fcm93cykpOworRVhURVJOKHZvaWQpIGpzaW1kX2V4dHJnYnhfeWNjX2NvbnZlcnRfbW14CisgICAgICAgIEpQUCgoSkRJTUVOU0lPTiBpbWdfd2lkdGgsCisgICAgICAgICAgICAgSlNBTVBBUlJBWSBpbnB1dF9idWYsIEpTQU1QSU1BR0Ugb3V0cHV0X2J1ZiwKKyAgICAgICAgICAgICBKRElNRU5TSU9OIG91dHB1dF9yb3csIGludCBudW1fcm93cykpOworRVhURVJOKHZvaWQpIGpzaW1kX2V4dGJncl95Y2NfY29udmVydF9tbXgKKyAgICAgICAgSlBQKChKRElNRU5TSU9OIGltZ193aWR0aCwKKyAgICAgICAgICAgICBKU0FNUEFSUkFZIGlucHV0X2J1ZiwgSlNBTVBJTUFHRSBvdXRwdXRfYnVmLAorICAgICAgICAgICAgIEpESU1FTlNJT04gb3V0cHV0X3JvdywgaW50IG51bV9yb3dzKSk7CitFWFRFUk4odm9pZCkganNpbWRfZXh0YmdyeF95Y2NfY29udmVydF9tbXgKKyAgICAgICAgSlBQKChKRElNRU5TSU9OIGltZ193aWR0aCwKKyAgICAgICAgICAgICBKU0FNUEFSUkFZIGlucHV0X2J1ZiwgSlNBTVBJTUFHRSBvdXRwdXRfYnVmLAorICAgICAgICAgICAgIEpESU1FTlNJT04gb3V0cHV0X3JvdywgaW50IG51bV9yb3dzKSk7CitFWFRFUk4odm9pZCkganNpbWRfZXh0eGJncl95Y2NfY29udmVydF9tbXgKKyAgICAgICAgSlBQKChKRElNRU5TSU9OIGltZ193aWR0aCwKKyAgICAgICAgICAgICBKU0FNUEFSUkFZIGlucHV0X2J1ZiwgSlNBTVBJTUFHRSBvdXRwdXRfYnVmLAorICAgICAgICAgICAgIEpESU1FTlNJT04gb3V0cHV0X3JvdywgaW50IG51bV9yb3dzKSk7CitFWFRFUk4odm9pZCkganNpbWRfZXh0eHJnYl95Y2NfY29udmVydF9tbXgKKyAgICAgICAgSlBQKChKRElNRU5TSU9OIGltZ193aWR0aCwKKyAgICAgICAgICAgICBKU0FNUEFSUkFZIGlucHV0X2J1ZiwgSlNBTVBJTUFHRSBvdXRwdXRfYnVmLAorICAgICAgICAgICAgIEpESU1FTlNJT04gb3V0cHV0X3JvdywgaW50IG51bV9yb3dzKSk7CisKK0VYVEVSTih2b2lkKSBqc2ltZF95Y2NfcmdiX2NvbnZlcnRfbW14CisgICAgICAgIEpQUCgoSkRJTUVOU0lPTiBvdXRfd2lkdGgsCisgICAgICAgICAgICAgSlNBTVBJTUFHRSBpbnB1dF9idWYsIEpESU1FTlNJT04gaW5wdXRfcm93LAorICAgICAgICAgICAgIEpTQU1QQVJSQVkgb3V0cHV0X2J1ZiwgaW50IG51bV9yb3dzKSk7CitFWFRFUk4odm9pZCkganNpbWRfeWNjX2V4dHJnYl9jb252ZXJ0X21teAorICAgICAgICBKUFAoKEpESU1FTlNJT04gb3V0X3dpZHRoLAorICAgICAgICAgICAgIEpTQU1QSU1BR0UgaW5wdXRfYnVmLCBKRElNRU5TSU9OIGlucHV0X3JvdywKKyAgICAgICAgICAgICBKU0FNUEFSUkFZIG91dHB1dF9idWYsIGludCBudW1fcm93cykpOworRVhURVJOKHZvaWQpIGpzaW1kX3ljY19leHRyZ2J4X2NvbnZlcnRfbW14CisgICAgICAgIEpQUCgoSkRJTUVOU0lPTiBvdXRfd2lkdGgsCisgICAgICAgICAgICAgSlNBTVBJTUFHRSBpbnB1dF9idWYsIEpESU1FTlNJT04gaW5wdXRfcm93LAorICAgICAgICAgICAgIEpTQU1QQVJSQVkgb3V0cHV0X2J1ZiwgaW50IG51bV9yb3dzKSk7CitFWFRFUk4odm9pZCkganNpbWRfeWNjX2V4dGJncl9jb252ZXJ0X21teAorICAgICAgICBKUFAoKEpESU1FTlNJT04gb3V0X3dpZHRoLAorICAgICAgICAgICAgIEpTQU1QSU1BR0UgaW5wdXRfYnVmLCBKRElNRU5TSU9OIGlucHV0X3JvdywKKyAgICAgICAgICAgICBKU0FNUEFSUkFZIG91dHB1dF9idWYsIGludCBudW1fcm93cykpOworRVhURVJOKHZvaWQpIGpzaW1kX3ljY19leHRiZ3J4X2NvbnZlcnRfbW14CisgICAgICAgIEpQUCgoSkRJTUVOU0lPTiBvdXRfd2lkdGgsCisgICAgICAgICAgICAgSlNBTVBJTUFHRSBpbnB1dF9idWYsIEpESU1FTlNJT04gaW5wdXRfcm93LAorICAgICAgICAgICAgIEpTQU1QQVJSQVkgb3V0cHV0X2J1ZiwgaW50IG51bV9yb3dzKSk7CitFWFRFUk4odm9pZCkganNpbWRfeWNjX2V4dHhiZ3JfY29udmVydF9tbXgKKyAgICAgICAgSlBQKChKRElNRU5TSU9OIG91dF93aWR0aCwKKyAgICAgICAgICAgICBKU0FNUElNQUdFIGlucHV0X2J1ZiwgSkRJTUVOU0lPTiBpbnB1dF9yb3csCisgICAgICAgICAgICAgSlNBTVBBUlJBWSBvdXRwdXRfYnVmLCBpbnQgbnVtX3Jvd3MpKTsKK0VYVEVSTih2b2lkKSBqc2ltZF95Y2NfZXh0eHJnYl9jb252ZXJ0X21teAorICAgICAgICBKUFAoKEpESU1FTlNJT04gb3V0X3dpZHRoLAorICAgICAgICAgICAgIEpTQU1QSU1BR0UgaW5wdXRfYnVmLCBKRElNRU5TSU9OIGlucHV0X3JvdywKKyAgICAgICAgICAgICBKU0FNUEFSUkFZIG91dHB1dF9idWYsIGludCBudW1fcm93cykpOworCitleHRlcm4gY29uc3QgaW50IGpjb25zdF9yZ2JfeWNjX2NvbnZlcnRfc3NlMltdOworRVhURVJOKHZvaWQpIGpzaW1kX3JnYl95Y2NfY29udmVydF9zc2UyCisgICAgICAgIEpQUCgoSkRJTUVOU0lPTiBpbWdfd2lkdGgsCisgICAgICAgICAgICAgSlNBTVBBUlJBWSBpbnB1dF9idWYsIEpTQU1QSU1BR0Ugb3V0cHV0X2J1ZiwKKyAgICAgICAgICAgICBKRElNRU5TSU9OIG91dHB1dF9yb3csIGludCBudW1fcm93cykpOworRVhURVJOKHZvaWQpIGpzaW1kX2V4dHJnYl95Y2NfY29udmVydF9zc2UyCisgICAgICAgIEpQUCgoSkRJTUVOU0lPTiBpbWdfd2lkdGgsCisgICAgICAgICAgICAgSlNBTVBBUlJBWSBpbnB1dF9idWYsIEpTQU1QSU1BR0Ugb3V0cHV0X2J1ZiwKKyAgICAgICAgICAgICBKRElNRU5TSU9OIG91dHB1dF9yb3csIGludCBudW1fcm93cykpOworRVhURVJOKHZvaWQpIGpzaW1kX2V4dHJnYnhfeWNjX2NvbnZlcnRfc3NlMgorICAgICAgICBKUFAoKEpESU1FTlNJT04gaW1nX3dpZHRoLAorICAgICAgICAgICAgIEpTQU1QQVJSQVkgaW5wdXRfYnVmLCBKU0FNUElNQUdFIG91dHB1dF9idWYsCisgICAgICAgICAgICAgSkRJTUVOU0lPTiBvdXRwdXRfcm93LCBpbnQgbnVtX3Jvd3MpKTsKK0VYVEVSTih2b2lkKSBqc2ltZF9leHRiZ3JfeWNjX2NvbnZlcnRfc3NlMgorICAgICAgICBKUFAoKEpESU1FTlNJT04gaW1nX3dpZHRoLAorICAgICAgICAgICAgIEpTQU1QQVJSQVkgaW5wdXRfYnVmLCBKU0FNUElNQUdFIG91dHB1dF9idWYsCisgICAgICAgICAgICAgSkRJTUVOU0lPTiBvdXRwdXRfcm93LCBpbnQgbnVtX3Jvd3MpKTsKK0VYVEVSTih2b2lkKSBqc2ltZF9leHRiZ3J4X3ljY19jb252ZXJ0X3NzZTIKKyAgICAgICAgSlBQKChKRElNRU5TSU9OIGltZ193aWR0aCwKKyAgICAgICAgICAgICBKU0FNUEFSUkFZIGlucHV0X2J1ZiwgSlNBTVBJTUFHRSBvdXRwdXRfYnVmLAorICAgICAgICAgICAgIEpESU1FTlNJT04gb3V0cHV0X3JvdywgaW50IG51bV9yb3dzKSk7CitFWFRFUk4odm9pZCkganNpbWRfZXh0eGJncl95Y2NfY29udmVydF9zc2UyCisgICAgICAgIEpQUCgoSkRJTUVOU0lPTiBpbWdfd2lkdGgsCisgICAgICAgICAgICAgSlNBTVBBUlJBWSBpbnB1dF9idWYsIEpTQU1QSU1BR0Ugb3V0cHV0X2J1ZiwKKyAgICAgICAgICAgICBKRElNRU5TSU9OIG91dHB1dF9yb3csIGludCBudW1fcm93cykpOworRVhURVJOKHZvaWQpIGpzaW1kX2V4dHhyZ2JfeWNjX2NvbnZlcnRfc3NlMgorICAgICAgICBKUFAoKEpESU1FTlNJT04gaW1nX3dpZHRoLAorICAgICAgICAgICAgIEpTQU1QQVJSQVkgaW5wdXRfYnVmLCBKU0FNUElNQUdFIG91dHB1dF9idWYsCisgICAgICAgICAgICAgSkRJTUVOU0lPTiBvdXRwdXRfcm93LCBpbnQgbnVtX3Jvd3MpKTsKKworZXh0ZXJuIGNvbnN0IGludCBqY29uc3RfeWNjX3JnYl9jb252ZXJ0X3NzZTJbXTsKK0VYVEVSTih2b2lkKSBqc2ltZF95Y2NfcmdiX2NvbnZlcnRfc3NlMgorICAgICAgICBKUFAoKEpESU1FTlNJT04gb3V0X3dpZHRoLAorICAgICAgICAgICAgIEpTQU1QSU1BR0UgaW5wdXRfYnVmLCBKRElNRU5TSU9OIGlucHV0X3JvdywKKyAgICAgICAgICAgICBKU0FNUEFSUkFZIG91dHB1dF9idWYsIGludCBudW1fcm93cykpOworRVhURVJOKHZvaWQpIGpzaW1kX3ljY19leHRyZ2JfY29udmVydF9zc2UyCisgICAgICAgIEpQUCgoSkRJTUVOU0lPTiBvdXRfd2lkdGgsCisgICAgICAgICAgICAgSlNBTVBJTUFHRSBpbnB1dF9idWYsIEpESU1FTlNJT04gaW5wdXRfcm93LAorICAgICAgICAgICAgIEpTQU1QQVJSQVkgb3V0cHV0X2J1ZiwgaW50IG51bV9yb3dzKSk7CitFWFRFUk4odm9pZCkganNpbWRfeWNjX2V4dHJnYnhfY29udmVydF9zc2UyCisgICAgICAgIEpQUCgoSkRJTUVOU0lPTiBvdXRfd2lkdGgsCisgICAgICAgICAgICAgSlNBTVBJTUFHRSBpbnB1dF9idWYsIEpESU1FTlNJT04gaW5wdXRfcm93LAorICAgICAgICAgICAgIEpTQU1QQVJSQVkgb3V0cHV0X2J1ZiwgaW50IG51bV9yb3dzKSk7CitFWFRFUk4odm9pZCkganNpbWRfeWNjX2V4dGJncl9jb252ZXJ0X3NzZTIKKyAgICAgICAgSlBQKChKRElNRU5TSU9OIG91dF93aWR0aCwKKyAgICAgICAgICAgICBKU0FNUElNQUdFIGlucHV0X2J1ZiwgSkRJTUVOU0lPTiBpbnB1dF9yb3csCisgICAgICAgICAgICAgSlNBTVBBUlJBWSBvdXRwdXRfYnVmLCBpbnQgbnVtX3Jvd3MpKTsKK0VYVEVSTih2b2lkKSBqc2ltZF95Y2NfZXh0YmdyeF9jb252ZXJ0X3NzZTIKKyAgICAgICAgSlBQKChKRElNRU5TSU9OIG91dF93aWR0aCwKKyAgICAgICAgICAgICBKU0FNUElNQUdFIGlucHV0X2J1ZiwgSkRJTUVOU0lPTiBpbnB1dF9yb3csCisgICAgICAgICAgICAgSlNBTVBBUlJBWSBvdXRwdXRfYnVmLCBpbnQgbnVtX3Jvd3MpKTsKK0VYVEVSTih2b2lkKSBqc2ltZF95Y2NfZXh0eGJncl9jb252ZXJ0X3NzZTIKKyAgICAgICAgSlBQKChKRElNRU5TSU9OIG91dF93aWR0aCwKKyAgICAgICAgICAgICBKU0FNUElNQUdFIGlucHV0X2J1ZiwgSkRJTUVOU0lPTiBpbnB1dF9yb3csCisgICAgICAgICAgICAgSlNBTVBBUlJBWSBvdXRwdXRfYnVmLCBpbnQgbnVtX3Jvd3MpKTsKK0VYVEVSTih2b2lkKSBqc2ltZF95Y2NfZXh0eHJnYl9jb252ZXJ0X3NzZTIKKyAgICAgICAgSlBQKChKRElNRU5TSU9OIG91dF93aWR0aCwKKyAgICAgICAgICAgICBKU0FNUElNQUdFIGlucHV0X2J1ZiwgSkRJTUVOU0lPTiBpbnB1dF9yb3csCisgICAgICAgICAgICAgSlNBTVBBUlJBWSBvdXRwdXRfYnVmLCBpbnQgbnVtX3Jvd3MpKTsKKworLyogU0lNRCBEb3duc2FtcGxlICovCitFWFRFUk4odm9pZCkganNpbWRfaDJ2Ml9kb3duc2FtcGxlX21teAorICAgICAgICBKUFAoKEpESU1FTlNJT04gaW1hZ2Vfd2lkdGgsIGludCBtYXhfdl9zYW1wX2ZhY3RvciwKKyAgICAgICAgICAgICBKRElNRU5TSU9OIHZfc2FtcF9mYWN0b3IsIEpESU1FTlNJT04gd2lkdGhfYmxvY2tzLAorICAgICAgICAgICAgIEpTQU1QQVJSQVkgaW5wdXRfZGF0YSwgSlNBTVBBUlJBWSBvdXRwdXRfZGF0YSkpOworRVhURVJOKHZvaWQpIGpzaW1kX2gydjFfZG93bnNhbXBsZV9tbXgKKyAgICAgICAgSlBQKChKRElNRU5TSU9OIGltYWdlX3dpZHRoLCBpbnQgbWF4X3Zfc2FtcF9mYWN0b3IsCisgICAgICAgICAgICAgSkRJTUVOU0lPTiB2X3NhbXBfZmFjdG9yLCBKRElNRU5TSU9OIHdpZHRoX2Jsb2NrcywKKyAgICAgICAgICAgICBKU0FNUEFSUkFZIGlucHV0X2RhdGEsIEpTQU1QQVJSQVkgb3V0cHV0X2RhdGEpKTsKKworRVhURVJOKHZvaWQpIGpzaW1kX2gydjJfZG93bnNhbXBsZV9zc2UyCisgICAgICAgIEpQUCgoSkRJTUVOU0lPTiBpbWFnZV93aWR0aCwgaW50IG1heF92X3NhbXBfZmFjdG9yLAorICAgICAgICAgICAgIEpESU1FTlNJT04gdl9zYW1wX2ZhY3RvciwgSkRJTUVOU0lPTiB3aWR0aF9ibG9ja3MsCisgICAgICAgICAgICAgSlNBTVBBUlJBWSBpbnB1dF9kYXRhLCBKU0FNUEFSUkFZIG91dHB1dF9kYXRhKSk7CitFWFRFUk4odm9pZCkganNpbWRfaDJ2MV9kb3duc2FtcGxlX3NzZTIKKyAgICAgICAgSlBQKChKRElNRU5TSU9OIGltYWdlX3dpZHRoLCBpbnQgbWF4X3Zfc2FtcF9mYWN0b3IsCisgICAgICAgICAgICAgSkRJTUVOU0lPTiB2X3NhbXBfZmFjdG9yLCBKRElNRU5TSU9OIHdpZHRoX2Jsb2NrcywKKyAgICAgICAgICAgICBKU0FNUEFSUkFZIGlucHV0X2RhdGEsIEpTQU1QQVJSQVkgb3V0cHV0X2RhdGEpKTsKKworLyogU0lNRCBVcHNhbXBsZSAqLworRVhURVJOKHZvaWQpIGpzaW1kX2gydjJfdXBzYW1wbGVfbW14CisgICAgICAgIEpQUCgoaW50IG1heF92X3NhbXBfZmFjdG9yLCBKRElNRU5TSU9OIG91dHB1dF93aWR0aCwKKyAgICAgICAgICAgICBKU0FNUEFSUkFZIGlucHV0X2RhdGEsIEpTQU1QQVJSQVkgKiBvdXRwdXRfZGF0YV9wdHIpKTsKK0VYVEVSTih2b2lkKSBqc2ltZF9oMnYxX3Vwc2FtcGxlX21teAorICAgICAgICBKUFAoKGludCBtYXhfdl9zYW1wX2ZhY3RvciwgSkRJTUVOU0lPTiBvdXRwdXRfd2lkdGgsCisgICAgICAgICAgICAgSlNBTVBBUlJBWSBpbnB1dF9kYXRhLCBKU0FNUEFSUkFZICogb3V0cHV0X2RhdGFfcHRyKSk7CisKK0VYVEVSTih2b2lkKSBqc2ltZF9oMnYyX2ZhbmN5X3Vwc2FtcGxlX21teAorICAgICAgICBKUFAoKGludCBtYXhfdl9zYW1wX2ZhY3RvciwgSkRJTUVOU0lPTiBkb3duc2FtcGxlZF93aWR0aCwKKyAgICAgICAgICAgICBKU0FNUEFSUkFZIGlucHV0X2RhdGEsIEpTQU1QQVJSQVkgKiBvdXRwdXRfZGF0YV9wdHIpKTsKK0VYVEVSTih2b2lkKSBqc2ltZF9oMnYxX2ZhbmN5X3Vwc2FtcGxlX21teAorICAgICAgICBKUFAoKGludCBtYXhfdl9zYW1wX2ZhY3RvciwgSkRJTUVOU0lPTiBkb3duc2FtcGxlZF93aWR0aCwKKyAgICAgICAgICAgICBKU0FNUEFSUkFZIGlucHV0X2RhdGEsIEpTQU1QQVJSQVkgKiBvdXRwdXRfZGF0YV9wdHIpKTsKKworRVhURVJOKHZvaWQpIGpzaW1kX2gydjJfbWVyZ2VkX3Vwc2FtcGxlX21teAorICAgICAgICBKUFAoKEpESU1FTlNJT04gb3V0cHV0X3dpZHRoLCBKU0FNUElNQUdFIGlucHV0X2J1ZiwKKyAgICAgICAgICAgICBKRElNRU5TSU9OIGluX3Jvd19ncm91cF9jdHIsIEpTQU1QQVJSQVkgb3V0cHV0X2J1ZikpOworRVhURVJOKHZvaWQpIGpzaW1kX2gydjJfZXh0cmdiX21lcmdlZF91cHNhbXBsZV9tbXgKKyAgICAgICAgSlBQKChKRElNRU5TSU9OIG91dHB1dF93aWR0aCwgSlNBTVBJTUFHRSBpbnB1dF9idWYsCisgICAgICAgICAgICAgSkRJTUVOU0lPTiBpbl9yb3dfZ3JvdXBfY3RyLCBKU0FNUEFSUkFZIG91dHB1dF9idWYpKTsKK0VYVEVSTih2b2lkKSBqc2ltZF9oMnYyX2V4dHJnYnhfbWVyZ2VkX3Vwc2FtcGxlX21teAorICAgICAgICBKUFAoKEpESU1FTlNJT04gb3V0cHV0X3dpZHRoLCBKU0FNUElNQUdFIGlucHV0X2J1ZiwKKyAgICAgICAgICAgICBKRElNRU5TSU9OIGluX3Jvd19ncm91cF9jdHIsIEpTQU1QQVJSQVkgb3V0cHV0X2J1ZikpOworRVhURVJOKHZvaWQpIGpzaW1kX2gydjJfZXh0YmdyX21lcmdlZF91cHNhbXBsZV9tbXgKKyAgICAgICAgSlBQKChKRElNRU5TSU9OIG91dHB1dF93aWR0aCwgSlNBTVBJTUFHRSBpbnB1dF9idWYsCisgICAgICAgICAgICAgSkRJTUVOU0lPTiBpbl9yb3dfZ3JvdXBfY3RyLCBKU0FNUEFSUkFZIG91dHB1dF9idWYpKTsKK0VYVEVSTih2b2lkKSBqc2ltZF9oMnYyX2V4dGJncnhfbWVyZ2VkX3Vwc2FtcGxlX21teAorICAgICAgICBKUFAoKEpESU1FTlNJT04gb3V0cHV0X3dpZHRoLCBKU0FNUElNQUdFIGlucHV0X2J1ZiwKKyAgICAgICAgICAgICBKRElNRU5TSU9OIGluX3Jvd19ncm91cF9jdHIsIEpTQU1QQVJSQVkgb3V0cHV0X2J1ZikpOworRVhURVJOKHZvaWQpIGpzaW1kX2gydjJfZXh0eGJncl9tZXJnZWRfdXBzYW1wbGVfbW14CisgICAgICAgIEpQUCgoSkRJTUVOU0lPTiBvdXRwdXRfd2lkdGgsIEpTQU1QSU1BR0UgaW5wdXRfYnVmLAorICAgICAgICAgICAgIEpESU1FTlNJT04gaW5fcm93X2dyb3VwX2N0ciwgSlNBTVBBUlJBWSBvdXRwdXRfYnVmKSk7CitFWFRFUk4odm9pZCkganNpbWRfaDJ2Ml9leHR4cmdiX21lcmdlZF91cHNhbXBsZV9tbXgKKyAgICAgICAgSlBQKChKRElNRU5TSU9OIG91dHB1dF93aWR0aCwgSlNBTVBJTUFHRSBpbnB1dF9idWYsCisgICAgICAgICAgICAgSkRJTUVOU0lPTiBpbl9yb3dfZ3JvdXBfY3RyLCBKU0FNUEFSUkFZIG91dHB1dF9idWYpKTsKK0VYVEVSTih2b2lkKSBqc2ltZF9oMnYxX21lcmdlZF91cHNhbXBsZV9tbXgKKyAgICAgICAgSlBQKChKRElNRU5TSU9OIG91dHB1dF93aWR0aCwgSlNBTVBJTUFHRSBpbnB1dF9idWYsCisgICAgICAgICAgICAgSkRJTUVOU0lPTiBpbl9yb3dfZ3JvdXBfY3RyLCBKU0FNUEFSUkFZIG91dHB1dF9idWYpKTsKK0VYVEVSTih2b2lkKSBqc2ltZF9oMnYxX2V4dHJnYl9tZXJnZWRfdXBzYW1wbGVfbW14CisgICAgICAgIEpQUCgoSkRJTUVOU0lPTiBvdXRwdXRfd2lkdGgsIEpTQU1QSU1BR0UgaW5wdXRfYnVmLAorICAgICAgICAgICAgIEpESU1FTlNJT04gaW5fcm93X2dyb3VwX2N0ciwgSlNBTVBBUlJBWSBvdXRwdXRfYnVmKSk7CitFWFRFUk4odm9pZCkganNpbWRfaDJ2MV9leHRyZ2J4X21lcmdlZF91cHNhbXBsZV9tbXgKKyAgICAgICAgSlBQKChKRElNRU5TSU9OIG91dHB1dF93aWR0aCwgSlNBTVBJTUFHRSBpbnB1dF9idWYsCisgICAgICAgICAgICAgSkRJTUVOU0lPTiBpbl9yb3dfZ3JvdXBfY3RyLCBKU0FNUEFSUkFZIG91dHB1dF9idWYpKTsKK0VYVEVSTih2b2lkKSBqc2ltZF9oMnYxX2V4dGJncl9tZXJnZWRfdXBzYW1wbGVfbW14CisgICAgICAgIEpQUCgoSkRJTUVOU0lPTiBvdXRwdXRfd2lkdGgsIEpTQU1QSU1BR0UgaW5wdXRfYnVmLAorICAgICAgICAgICAgIEpESU1FTlNJT04gaW5fcm93X2dyb3VwX2N0ciwgSlNBTVBBUlJBWSBvdXRwdXRfYnVmKSk7CitFWFRFUk4odm9pZCkganNpbWRfaDJ2MV9leHRiZ3J4X21lcmdlZF91cHNhbXBsZV9tbXgKKyAgICAgICAgSlBQKChKRElNRU5TSU9OIG91dHB1dF93aWR0aCwgSlNBTVBJTUFHRSBpbnB1dF9idWYsCisgICAgICAgICAgICAgSkRJTUVOU0lPTiBpbl9yb3dfZ3JvdXBfY3RyLCBKU0FNUEFSUkFZIG91dHB1dF9idWYpKTsKK0VYVEVSTih2b2lkKSBqc2ltZF9oMnYxX2V4dHhiZ3JfbWVyZ2VkX3Vwc2FtcGxlX21teAorICAgICAgICBKUFAoKEpESU1FTlNJT04gb3V0cHV0X3dpZHRoLCBKU0FNUElNQUdFIGlucHV0X2J1ZiwKKyAgICAgICAgICAgICBKRElNRU5TSU9OIGluX3Jvd19ncm91cF9jdHIsIEpTQU1QQVJSQVkgb3V0cHV0X2J1ZikpOworRVhURVJOKHZvaWQpIGpzaW1kX2gydjFfZXh0eHJnYl9tZXJnZWRfdXBzYW1wbGVfbW14CisgICAgICAgIEpQUCgoSkRJTUVOU0lPTiBvdXRwdXRfd2lkdGgsIEpTQU1QSU1BR0UgaW5wdXRfYnVmLAorICAgICAgICAgICAgIEpESU1FTlNJT04gaW5fcm93X2dyb3VwX2N0ciwgSlNBTVBBUlJBWSBvdXRwdXRfYnVmKSk7CisKK0VYVEVSTih2b2lkKSBqc2ltZF9oMnYyX3Vwc2FtcGxlX3NzZTIKKyAgICAgICAgSlBQKChpbnQgbWF4X3Zfc2FtcF9mYWN0b3IsIEpESU1FTlNJT04gb3V0cHV0X3dpZHRoLAorICAgICAgICAgICAgIEpTQU1QQVJSQVkgaW5wdXRfZGF0YSwgSlNBTVBBUlJBWSAqIG91dHB1dF9kYXRhX3B0cikpOworRVhURVJOKHZvaWQpIGpzaW1kX2gydjFfdXBzYW1wbGVfc3NlMgorICAgICAgICBKUFAoKGludCBtYXhfdl9zYW1wX2ZhY3RvciwgSkRJTUVOU0lPTiBvdXRwdXRfd2lkdGgsCisgICAgICAgICAgICAgSlNBTVBBUlJBWSBpbnB1dF9kYXRhLCBKU0FNUEFSUkFZICogb3V0cHV0X2RhdGFfcHRyKSk7CisKK2V4dGVybiBjb25zdCBpbnQgamNvbnN0X2ZhbmN5X3Vwc2FtcGxlX3NzZTJbXTsKK0VYVEVSTih2b2lkKSBqc2ltZF9oMnYyX2ZhbmN5X3Vwc2FtcGxlX3NzZTIKKyAgICAgICAgSlBQKChpbnQgbWF4X3Zfc2FtcF9mYWN0b3IsIEpESU1FTlNJT04gZG93bnNhbXBsZWRfd2lkdGgsCisgICAgICAgICAgICAgSlNBTVBBUlJBWSBpbnB1dF9kYXRhLCBKU0FNUEFSUkFZICogb3V0cHV0X2RhdGFfcHRyKSk7CitFWFRFUk4odm9pZCkganNpbWRfaDJ2MV9mYW5jeV91cHNhbXBsZV9zc2UyCisgICAgICAgIEpQUCgoaW50IG1heF92X3NhbXBfZmFjdG9yLCBKRElNRU5TSU9OIGRvd25zYW1wbGVkX3dpZHRoLAorICAgICAgICAgICAgIEpTQU1QQVJSQVkgaW5wdXRfZGF0YSwgSlNBTVBBUlJBWSAqIG91dHB1dF9kYXRhX3B0cikpOworCitleHRlcm4gY29uc3QgaW50IGpjb25zdF9tZXJnZWRfdXBzYW1wbGVfc3NlMltdOworRVhURVJOKHZvaWQpIGpzaW1kX2gydjJfbWVyZ2VkX3Vwc2FtcGxlX3NzZTIKKyAgICAgICAgSlBQKChKRElNRU5TSU9OIG91dHB1dF93aWR0aCwgSlNBTVBJTUFHRSBpbnB1dF9idWYsCisgICAgICAgICAgICAgSkRJTUVOU0lPTiBpbl9yb3dfZ3JvdXBfY3RyLCBKU0FNUEFSUkFZIG91dHB1dF9idWYpKTsKK0VYVEVSTih2b2lkKSBqc2ltZF9oMnYyX2V4dHJnYl9tZXJnZWRfdXBzYW1wbGVfc3NlMgorICAgICAgICBKUFAoKEpESU1FTlNJT04gb3V0cHV0X3dpZHRoLCBKU0FNUElNQUdFIGlucHV0X2J1ZiwKKyAgICAgICAgICAgICBKRElNRU5TSU9OIGluX3Jvd19ncm91cF9jdHIsIEpTQU1QQVJSQVkgb3V0cHV0X2J1ZikpOworRVhURVJOKHZvaWQpIGpzaW1kX2gydjJfZXh0cmdieF9tZXJnZWRfdXBzYW1wbGVfc3NlMgorICAgICAgICBKUFAoKEpESU1FTlNJT04gb3V0cHV0X3dpZHRoLCBKU0FNUElNQUdFIGlucHV0X2J1ZiwKKyAgICAgICAgICAgICBKRElNRU5TSU9OIGluX3Jvd19ncm91cF9jdHIsIEpTQU1QQVJSQVkgb3V0cHV0X2J1ZikpOworRVhURVJOKHZvaWQpIGpzaW1kX2gydjJfZXh0YmdyX21lcmdlZF91cHNhbXBsZV9zc2UyCisgICAgICAgIEpQUCgoSkRJTUVOU0lPTiBvdXRwdXRfd2lkdGgsIEpTQU1QSU1BR0UgaW5wdXRfYnVmLAorICAgICAgICAgICAgIEpESU1FTlNJT04gaW5fcm93X2dyb3VwX2N0ciwgSlNBTVBBUlJBWSBvdXRwdXRfYnVmKSk7CitFWFRFUk4odm9pZCkganNpbWRfaDJ2Ml9leHRiZ3J4X21lcmdlZF91cHNhbXBsZV9zc2UyCisgICAgICAgIEpQUCgoSkRJTUVOU0lPTiBvdXRwdXRfd2lkdGgsIEpTQU1QSU1BR0UgaW5wdXRfYnVmLAorICAgICAgICAgICAgIEpESU1FTlNJT04gaW5fcm93X2dyb3VwX2N0ciwgSlNBTVBBUlJBWSBvdXRwdXRfYnVmKSk7CitFWFRFUk4odm9pZCkganNpbWRfaDJ2Ml9leHR4YmdyX21lcmdlZF91cHNhbXBsZV9zc2UyCisgICAgICAgIEpQUCgoSkRJTUVOU0lPTiBvdXRwdXRfd2lkdGgsIEpTQU1QSU1BR0UgaW5wdXRfYnVmLAorICAgICAgICAgICAgIEpESU1FTlNJT04gaW5fcm93X2dyb3VwX2N0ciwgSlNBTVBBUlJBWSBvdXRwdXRfYnVmKSk7CitFWFRFUk4odm9pZCkganNpbWRfaDJ2Ml9leHR4cmdiX21lcmdlZF91cHNhbXBsZV9zc2UyCisgICAgICAgIEpQUCgoSkRJTUVOU0lPTiBvdXRwdXRfd2lkdGgsIEpTQU1QSU1BR0UgaW5wdXRfYnVmLAorICAgICAgICAgICAgIEpESU1FTlNJT04gaW5fcm93X2dyb3VwX2N0ciwgSlNBTVBBUlJBWSBvdXRwdXRfYnVmKSk7CitFWFRFUk4odm9pZCkganNpbWRfaDJ2MV9tZXJnZWRfdXBzYW1wbGVfc3NlMgorICAgICAgICBKUFAoKEpESU1FTlNJT04gb3V0cHV0X3dpZHRoLCBKU0FNUElNQUdFIGlucHV0X2J1ZiwKKyAgICAgICAgICAgICBKRElNRU5TSU9OIGluX3Jvd19ncm91cF9jdHIsIEpTQU1QQVJSQVkgb3V0cHV0X2J1ZikpOworRVhURVJOKHZvaWQpIGpzaW1kX2gydjFfZXh0cmdiX21lcmdlZF91cHNhbXBsZV9zc2UyCisgICAgICAgIEpQUCgoSkRJTUVOU0lPTiBvdXRwdXRfd2lkdGgsIEpTQU1QSU1BR0UgaW5wdXRfYnVmLAorICAgICAgICAgICAgIEpESU1FTlNJT04gaW5fcm93X2dyb3VwX2N0ciwgSlNBTVBBUlJBWSBvdXRwdXRfYnVmKSk7CitFWFRFUk4odm9pZCkganNpbWRfaDJ2MV9leHRyZ2J4X21lcmdlZF91cHNhbXBsZV9zc2UyCisgICAgICAgIEpQUCgoSkRJTUVOU0lPTiBvdXRwdXRfd2lkdGgsIEpTQU1QSU1BR0UgaW5wdXRfYnVmLAorICAgICAgICAgICAgIEpESU1FTlNJT04gaW5fcm93X2dyb3VwX2N0ciwgSlNBTVBBUlJBWSBvdXRwdXRfYnVmKSk7CitFWFRFUk4odm9pZCkganNpbWRfaDJ2MV9leHRiZ3JfbWVyZ2VkX3Vwc2FtcGxlX3NzZTIKKyAgICAgICAgSlBQKChKRElNRU5TSU9OIG91dHB1dF93aWR0aCwgSlNBTVBJTUFHRSBpbnB1dF9idWYsCisgICAgICAgICAgICAgSkRJTUVOU0lPTiBpbl9yb3dfZ3JvdXBfY3RyLCBKU0FNUEFSUkFZIG91dHB1dF9idWYpKTsKK0VYVEVSTih2b2lkKSBqc2ltZF9oMnYxX2V4dGJncnhfbWVyZ2VkX3Vwc2FtcGxlX3NzZTIKKyAgICAgICAgSlBQKChKRElNRU5TSU9OIG91dHB1dF93aWR0aCwgSlNBTVBJTUFHRSBpbnB1dF9idWYsCisgICAgICAgICAgICAgSkRJTUVOU0lPTiBpbl9yb3dfZ3JvdXBfY3RyLCBKU0FNUEFSUkFZIG91dHB1dF9idWYpKTsKK0VYVEVSTih2b2lkKSBqc2ltZF9oMnYxX2V4dHhiZ3JfbWVyZ2VkX3Vwc2FtcGxlX3NzZTIKKyAgICAgICAgSlBQKChKRElNRU5TSU9OIG91dHB1dF93aWR0aCwgSlNBTVBJTUFHRSBpbnB1dF9idWYsCisgICAgICAgICAgICAgSkRJTUVOU0lPTiBpbl9yb3dfZ3JvdXBfY3RyLCBKU0FNUEFSUkFZIG91dHB1dF9idWYpKTsKK0VYVEVSTih2b2lkKSBqc2ltZF9oMnYxX2V4dHhyZ2JfbWVyZ2VkX3Vwc2FtcGxlX3NzZTIKKyAgICAgICAgSlBQKChKRElNRU5TSU9OIG91dHB1dF93aWR0aCwgSlNBTVBJTUFHRSBpbnB1dF9idWYsCisgICAgICAgICAgICAgSkRJTUVOU0lPTiBpbl9yb3dfZ3JvdXBfY3RyLCBKU0FNUEFSUkFZIG91dHB1dF9idWYpKTsKKworLyogU0lNRCBTYW1wbGUgQ29udmVyc2lvbiAqLworRVhURVJOKHZvaWQpIGpzaW1kX2NvbnZzYW1wX21teCBKUFAoKEpTQU1QQVJSQVkgc2FtcGxlX2RhdGEsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSkRJTUVOU0lPTiBzdGFydF9jb2wsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRENURUxFTSAqIHdvcmtzcGFjZSkpOworCitFWFRFUk4odm9pZCkganNpbWRfY29udnNhbXBfc3NlMiBKUFAoKEpTQU1QQVJSQVkgc2FtcGxlX2RhdGEsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEpESU1FTlNJT04gc3RhcnRfY29sLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBEQ1RFTEVNICogd29ya3NwYWNlKSk7CisKK0VYVEVSTih2b2lkKSBqc2ltZF9jb252c2FtcF9mbG9hdF8zZG5vdyBKUFAoKEpTQU1QQVJSQVkgc2FtcGxlX2RhdGEsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBKRElNRU5TSU9OIHN0YXJ0X2NvbCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZBU1RfRkxPQVQgKiB3b3Jrc3BhY2UpKTsKKworRVhURVJOKHZvaWQpIGpzaW1kX2NvbnZzYW1wX2Zsb2F0X3NzZSBKUFAoKEpTQU1QQVJSQVkgc2FtcGxlX2RhdGEsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSkRJTUVOU0lPTiBzdGFydF9jb2wsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRkFTVF9GTE9BVCAqIHdvcmtzcGFjZSkpOworCitFWFRFUk4odm9pZCkganNpbWRfY29udnNhbXBfZmxvYXRfc3NlMiBKUFAoKEpTQU1QQVJSQVkgc2FtcGxlX2RhdGEsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEpESU1FTlNJT04gc3RhcnRfY29sLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGQVNUX0ZMT0FUICogd29ya3NwYWNlKSk7CisKKy8qIFNJTUQgRm9yd2FyZCBEQ1QgKi8KK0VYVEVSTih2b2lkKSBqc2ltZF9mZGN0X2lzbG93X21teCBKUFAoKERDVEVMRU0gKiBkYXRhKSk7CitFWFRFUk4odm9pZCkganNpbWRfZmRjdF9pZmFzdF9tbXggSlBQKChEQ1RFTEVNICogZGF0YSkpOworCitleHRlcm4gY29uc3QgaW50IGpjb25zdF9mZGN0X2lmYXN0X3NzZTJbXTsKK0VYVEVSTih2b2lkKSBqc2ltZF9mZGN0X2lzbG93X3NzZTIgSlBQKChEQ1RFTEVNICogZGF0YSkpOworZXh0ZXJuIGNvbnN0IGludCBqY29uc3RfZmRjdF9pc2xvd19zc2UyW107CitFWFRFUk4odm9pZCkganNpbWRfZmRjdF9pZmFzdF9zc2UyIEpQUCgoRENURUxFTSAqIGRhdGEpKTsKKworRVhURVJOKHZvaWQpIGpzaW1kX2ZkY3RfZmxvYXRfM2Rub3cgSlBQKChGQVNUX0ZMT0FUICogZGF0YSkpOworCitleHRlcm4gY29uc3QgaW50IGpjb25zdF9mZGN0X2Zsb2F0X3NzZVtdOworRVhURVJOKHZvaWQpIGpzaW1kX2ZkY3RfZmxvYXRfc3NlIEpQUCgoRkFTVF9GTE9BVCAqIGRhdGEpKTsKKworLyogU0lNRCBRdWFudGl6YXRpb24gKi8KK0VYVEVSTih2b2lkKSBqc2ltZF9xdWFudGl6ZV9tbXggSlBQKChKQ09FRlBUUiBjb2VmX2Jsb2NrLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIERDVEVMRU0gKiBkaXZpc29ycywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBEQ1RFTEVNICogd29ya3NwYWNlKSk7CisKK0VYVEVSTih2b2lkKSBqc2ltZF9xdWFudGl6ZV9zc2UyIEpQUCgoSkNPRUZQVFIgY29lZl9ibG9jaywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRENURUxFTSAqIGRpdmlzb3JzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBEQ1RFTEVNICogd29ya3NwYWNlKSk7CisKK0VYVEVSTih2b2lkKSBqc2ltZF9xdWFudGl6ZV9mbG9hdF8zZG5vdyBKUFAoKEpDT0VGUFRSIGNvZWZfYmxvY2ssCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGQVNUX0ZMT0FUICogZGl2aXNvcnMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGQVNUX0ZMT0FUICogd29ya3NwYWNlKSk7CisKK0VYVEVSTih2b2lkKSBqc2ltZF9xdWFudGl6ZV9mbG9hdF9zc2UgSlBQKChKQ09FRlBUUiBjb2VmX2Jsb2NrLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZBU1RfRkxPQVQgKiBkaXZpc29ycywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGQVNUX0ZMT0FUICogd29ya3NwYWNlKSk7CisKK0VYVEVSTih2b2lkKSBqc2ltZF9xdWFudGl6ZV9mbG9hdF9zc2UyIEpQUCgoSkNPRUZQVFIgY29lZl9ibG9jaywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRkFTVF9GTE9BVCAqIGRpdmlzb3JzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGQVNUX0ZMT0FUICogd29ya3NwYWNlKSk7CisKKy8qIFNJTUQgUmVkdWNlZCBJbnZlcnNlIERDVCAqLworRVhURVJOKHZvaWQpIGpzaW1kX2lkY3RfMngyX21teCBKUFAoKHZvaWQgKiBkY3RfdGFibGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSkNPRUZQVFIgY29lZl9ibG9jaywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBKU0FNUEFSUkFZIG91dHB1dF9idWYsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSkRJTUVOU0lPTiBvdXRwdXRfY29sKSk7CitFWFRFUk4odm9pZCkganNpbWRfaWRjdF80eDRfbW14IEpQUCgodm9pZCAqIGRjdF90YWJsZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBKQ09FRlBUUiBjb2VmX2Jsb2NrLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEpTQU1QQVJSQVkgb3V0cHV0X2J1ZiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBKRElNRU5TSU9OIG91dHB1dF9jb2wpKTsKKworZXh0ZXJuIGNvbnN0IGludCBqY29uc3RfaWRjdF9yZWRfc3NlMltdOworRVhURVJOKHZvaWQpIGpzaW1kX2lkY3RfMngyX3NzZTIgSlBQKCh2b2lkICogZGN0X3RhYmxlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBKQ09FRlBUUiBjb2VmX2Jsb2NrLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBKU0FNUEFSUkFZIG91dHB1dF9idWYsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEpESU1FTlNJT04gb3V0cHV0X2NvbCkpOworRVhURVJOKHZvaWQpIGpzaW1kX2lkY3RfNHg0X3NzZTIgSlBQKCh2b2lkICogZGN0X3RhYmxlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBKQ09FRlBUUiBjb2VmX2Jsb2NrLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBKU0FNUEFSUkFZIG91dHB1dF9idWYsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEpESU1FTlNJT04gb3V0cHV0X2NvbCkpOworCisvKiBTSU1EIEludmVyc2UgRENUICovCitFWFRFUk4odm9pZCkganNpbWRfaWRjdF9pc2xvd19tbXggSlBQKCh2b2lkICogZGN0X3RhYmxlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSkNPRUZQVFIgY29lZl9ibG9jaywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEpTQU1QQVJSQVkgb3V0cHV0X2J1ZiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEpESU1FTlNJT04gb3V0cHV0X2NvbCkpOworRVhURVJOKHZvaWQpIGpzaW1kX2lkY3RfaWZhc3RfbW14IEpQUCgodm9pZCAqIGRjdF90YWJsZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEpDT0VGUFRSIGNvZWZfYmxvY2ssCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBKU0FNUEFSUkFZIG91dHB1dF9idWYsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBKRElNRU5TSU9OIG91dHB1dF9jb2wpKTsKKworZXh0ZXJuIGNvbnN0IGludCBqY29uc3RfaWRjdF9pc2xvd19zc2UyW107CitFWFRFUk4odm9pZCkganNpbWRfaWRjdF9pc2xvd19zc2UyIEpQUCgodm9pZCAqIGRjdF90YWJsZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBKQ09FRlBUUiBjb2VmX2Jsb2NrLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEpTQU1QQVJSQVkgb3V0cHV0X2J1ZiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBKRElNRU5TSU9OIG91dHB1dF9jb2wpKTsKK2V4dGVybiBjb25zdCBpbnQgamNvbnN0X2lkY3RfaWZhc3Rfc3NlMltdOworRVhURVJOKHZvaWQpIGpzaW1kX2lkY3RfaWZhc3Rfc3NlMiBKUFAoKHZvaWQgKiBkY3RfdGFibGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSkNPRUZQVFIgY29lZl9ibG9jaywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBKU0FNUEFSUkFZIG91dHB1dF9idWYsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSkRJTUVOU0lPTiBvdXRwdXRfY29sKSk7CisKK0VYVEVSTih2b2lkKSBqc2ltZF9pZGN0X2Zsb2F0XzNkbm93IEpQUCgodm9pZCAqIGRjdF90YWJsZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSkNPRUZQVFIgY29lZl9ibG9jaywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSlNBTVBBUlJBWSBvdXRwdXRfYnVmLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBKRElNRU5TSU9OIG91dHB1dF9jb2wpKTsKKworZXh0ZXJuIGNvbnN0IGludCBqY29uc3RfaWRjdF9mbG9hdF9zc2VbXTsKK0VYVEVSTih2b2lkKSBqc2ltZF9pZGN0X2Zsb2F0X3NzZSBKUFAoKHZvaWQgKiBkY3RfdGFibGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBKQ09FRlBUUiBjb2VmX2Jsb2NrLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSlNBTVBBUlJBWSBvdXRwdXRfYnVmLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSkRJTUVOU0lPTiBvdXRwdXRfY29sKSk7CisKK2V4dGVybiBjb25zdCBpbnQgamNvbnN0X2lkY3RfZmxvYXRfc3NlMltdOworRVhURVJOKHZvaWQpIGpzaW1kX2lkY3RfZmxvYXRfc3NlMiBKUFAoKHZvaWQgKiBkY3RfdGFibGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSkNPRUZQVFIgY29lZl9ibG9jaywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBKU0FNUEFSUkFZIG91dHB1dF9idWYsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSkRJTUVOU0lPTiBvdXRwdXRfY29sKSk7CisKZGlmZiAtLWdpdCBhL3NpbWQvanNpbWRfaTM4Ni5jIGIvc2ltZC9qc2ltZF9pMzg2LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDliYjc3NAotLS0gL2Rldi9udWxsCisrKyBiL3NpbWQvanNpbWRfaTM4Ni5jCkBAIC0wLDAgKzEsOTU3IEBACisvKgorICoganNpbWRfaTM4Ni5jCisgKgorICogQ29weXJpZ2h0IDIwMDkgUGllcnJlIE9zc21hbiA8b3NzbWFuQGNlbmRpby5zZT4gZm9yIENlbmRpbyBBQgorICogQ29weXJpZ2h0IDIwMDkgRC4gUi4gQ29tbWFuZGVyCisgKiAKKyAqIEJhc2VkIG9uIHRoZSB4ODYgU0lNRCBleHRlbnNpb24gZm9yIElKRyBKUEVHIGxpYnJhcnksCisgKiBDb3B5cmlnaHQgKEMpIDE5OTktMjAwNiwgTUlZQVNBS0EgTWFzYXJ1LgorICogRm9yIGNvbmRpdGlvbnMgb2YgZGlzdHJpYnV0aW9uIGFuZCB1c2UsIHNlZSBjb3B5cmlnaHQgbm90aWNlIGluIGpzaW1kZXh0LmluYworICoKKyAqIFRoaXMgZmlsZSBjb250YWlucyB0aGUgaW50ZXJmYWNlIGJldHdlZW4gdGhlICJub3JtYWwiIHBvcnRpb25zCisgKiBvZiB0aGUgbGlicmFyeSBhbmQgdGhlIFNJTUQgaW1wbGVtZW50YXRpb25zIHdoZW4gcnVubmluZyBvbiBhCisgKiAzMi1iaXQgeDg2IGFyY2hpdGVjdHVyZS4KKyAqLworCisjZGVmaW5lIEpQRUdfSU5URVJOQUxTCisjaW5jbHVkZSAiLi4vamluY2x1ZGUuaCIKKyNpbmNsdWRlICIuLi9qcGVnbGliLmgiCisjaW5jbHVkZSAiLi4vanNpbWQuaCIKKyNpbmNsdWRlICIuLi9qZGN0LmgiCisjaW5jbHVkZSAiLi4vanNpbWRkY3QuaCIKKyNpbmNsdWRlICJqc2ltZC5oIgorCisvKgorICogSW4gdGhlIFBJQyBjYXNlcywgd2UgaGF2ZSBubyBndWFyYW50ZWUgdGhhdCBjb25zdGFudHMgd2lsbCBrZWVwCisgKiB0aGVpciBhbGlnbm1lbnQuIFRoaXMgbWFjcm8gYWxsb3dzIHVzIHRvIHZlcmlmeSBpdCBhdCBydW50aW1lLgorICovCisjZGVmaW5lIElTX0FMSUdORUQocHRyLCBvcmRlcikgKCgodW5zaWduZWQpcHRyICYgKCgxIDw8IG9yZGVyKSAtIDEpKSA9PSAwKQorCisjZGVmaW5lIElTX0FMSUdORURfU1NFKHB0cikgKElTX0FMSUdORUQocHRyLCA0KSkgLyogMTYgYnl0ZSBhbGlnbm1lbnQgKi8KKworc3RhdGljIHVuc2lnbmVkIGludCBzaW1kX3N1cHBvcnQgPSB+MDsKKworLyoKKyAqIENoZWNrIHdoYXQgU0lNRCBhY2NlbGVyYXRpb25zIGFyZSBzdXBwb3J0ZWQuCisgKgorICogRklYTUU6IFRoaXMgY29kZSBpcyByYWN5IHVuZGVyIGEgbXVsdGktdGhyZWFkZWQgZW52aXJvbm1lbnQuCisgKi8KK0xPQ0FMKHZvaWQpCitpbml0X3NpbWQgKHZvaWQpCit7CisgIGNoYXIgKmVudiA9IE5VTEw7CisKKyAgaWYgKHNpbWRfc3VwcG9ydCAhPSB+MCkKKyAgICByZXR1cm47CisKKyAgc2ltZF9zdXBwb3J0ID0ganBlZ19zaW1kX2NwdV9zdXBwb3J0KCk7CisKKyAgLyogRm9yY2UgZGlmZmVyZW50IHNldHRpbmdzIHRocm91Z2ggZW52aXJvbm1lbnQgdmFyaWFibGVzICovCisgIGVudiA9IGdldGVudigiSlNJTURfRk9SQ0VNTVgiKTsKKyAgaWYgKChlbnYgIT0gTlVMTCkgJiYgKHN0cmNtcChlbnYsICIxIikgPT0gMCkpCisgICAgc2ltZF9zdXBwb3J0ICY9IEpTSU1EX01NWDsKKyAgZW52ID0gZ2V0ZW52KCJKU0lNRF9GT1JDRTNETk9XIik7CisgIGlmICgoZW52ICE9IE5VTEwpICYmIChzdHJjbXAoZW52LCAiMSIpID09IDApKQorICAgIHNpbWRfc3VwcG9ydCAmPSBKU0lNRF8zRE5PV3xKU0lNRF9NTVg7CisgIGVudiA9IGdldGVudigiSlNJTURfRk9SQ0VTU0UiKTsKKyAgaWYgKChlbnYgIT0gTlVMTCkgJiYgKHN0cmNtcChlbnYsICIxIikgPT0gMCkpCisgICAgc2ltZF9zdXBwb3J0ICY9IEpTSU1EX1NTRXxKU0lNRF9NTVg7CisgIGVudiA9IGdldGVudigiSlNJTURfRk9SQ0VTU0UyIik7CisgIGlmICgoZW52ICE9IE5VTEwpICYmIChzdHJjbXAoZW52LCAiMSIpID09IDApKQorICAgIHNpbWRfc3VwcG9ydCAmPSBKU0lNRF9TU0UyOworfQorCitHTE9CQUwoaW50KQoranNpbWRfY2FuX3JnYl95Y2MgKHZvaWQpCit7CisgIGluaXRfc2ltZCgpOworCisgIC8qIFRoZSBjb2RlIGlzIG9wdGltaXNlZCBmb3IgdGhlc2UgdmFsdWVzIG9ubHkgKi8KKyAgaWYgKEJJVFNfSU5fSlNBTVBMRSAhPSA4KQorICAgIHJldHVybiAwOworICBpZiAoc2l6ZW9mKEpESU1FTlNJT04pICE9IDQpCisgICAgcmV0dXJuIDA7CisgIGlmICgoUkdCX1BJWEVMU0laRSAhPSAzKSAmJiAoUkdCX1BJWEVMU0laRSAhPSA0KSkKKyAgICByZXR1cm4gMDsKKworICBpZiAoKHNpbWRfc3VwcG9ydCAmIEpTSU1EX1NTRTIpICYmCisgICAgICBJU19BTElHTkVEX1NTRShqY29uc3RfcmdiX3ljY19jb252ZXJ0X3NzZTIpKQorICAgIHJldHVybiAxOworICBpZiAoc2ltZF9zdXBwb3J0ICYgSlNJTURfTU1YKQorICAgIHJldHVybiAxOworCisgIHJldHVybiAwOworfQorCitHTE9CQUwoaW50KQoranNpbWRfY2FuX3ljY19yZ2IgKHZvaWQpCit7CisgIGluaXRfc2ltZCgpOworCisgIC8qIFRoZSBjb2RlIGlzIG9wdGltaXNlZCBmb3IgdGhlc2UgdmFsdWVzIG9ubHkgKi8KKyAgaWYgKEJJVFNfSU5fSlNBTVBMRSAhPSA4KQorICAgIHJldHVybiAwOworICBpZiAoc2l6ZW9mKEpESU1FTlNJT04pICE9IDQpCisgICAgcmV0dXJuIDA7CisgIGlmICgoUkdCX1BJWEVMU0laRSAhPSAzKSAmJiAoUkdCX1BJWEVMU0laRSAhPSA0KSkKKyAgICByZXR1cm4gMDsKKworICBpZiAoKHNpbWRfc3VwcG9ydCAmIEpTSU1EX1NTRTIpICYmCisgICAgICBJU19BTElHTkVEX1NTRShqY29uc3RfeWNjX3JnYl9jb252ZXJ0X3NzZTIpKQorICAgIHJldHVybiAxOworICBpZiAoc2ltZF9zdXBwb3J0ICYgSlNJTURfTU1YKQorICAgIHJldHVybiAxOworCisgIHJldHVybiAwOworfQorCitHTE9CQUwodm9pZCkKK2pzaW1kX3JnYl95Y2NfY29udmVydCAoal9jb21wcmVzc19wdHIgY2luZm8sCisgICAgICAgICAgICAgICAgICAgICAgIEpTQU1QQVJSQVkgaW5wdXRfYnVmLCBKU0FNUElNQUdFIG91dHB1dF9idWYsCisgICAgICAgICAgICAgICAgICAgICAgIEpESU1FTlNJT04gb3V0cHV0X3JvdywgaW50IG51bV9yb3dzKQoreworICB2b2lkICgqc3NlMmZjdCkoSkRJTUVOU0lPTiwgSlNBTVBBUlJBWSwgSlNBTVBJTUFHRSwgSkRJTUVOU0lPTiwgaW50KTsKKyAgdm9pZCAoKm1teGZjdCkoSkRJTUVOU0lPTiwgSlNBTVBBUlJBWSwgSlNBTVBJTUFHRSwgSkRJTUVOU0lPTiwgaW50KTsKKworICBzd2l0Y2goY2luZm8tPmluX2NvbG9yX3NwYWNlKQorICB7CisgICAgY2FzZSBKQ1NfRVhUX1JHQjoKKyAgICAgIHNzZTJmY3Q9anNpbWRfZXh0cmdiX3ljY19jb252ZXJ0X3NzZTI7CisgICAgICBtbXhmY3Q9anNpbWRfZXh0cmdiX3ljY19jb252ZXJ0X21teDsKKyAgICAgIGJyZWFrOworICAgIGNhc2UgSkNTX0VYVF9SR0JYOgorICAgICAgc3NlMmZjdD1qc2ltZF9leHRyZ2J4X3ljY19jb252ZXJ0X3NzZTI7CisgICAgICBtbXhmY3Q9anNpbWRfZXh0cmdieF95Y2NfY29udmVydF9tbXg7CisgICAgICBicmVhazsKKyAgICBjYXNlIEpDU19FWFRfQkdSOgorICAgICAgc3NlMmZjdD1qc2ltZF9leHRiZ3JfeWNjX2NvbnZlcnRfc3NlMjsKKyAgICAgIG1teGZjdD1qc2ltZF9leHRiZ3JfeWNjX2NvbnZlcnRfbW14OworICAgICAgYnJlYWs7CisgICAgY2FzZSBKQ1NfRVhUX0JHUlg6CisgICAgICBzc2UyZmN0PWpzaW1kX2V4dGJncnhfeWNjX2NvbnZlcnRfc3NlMjsKKyAgICAgIG1teGZjdD1qc2ltZF9leHRiZ3J4X3ljY19jb252ZXJ0X21teDsKKyAgICAgIGJyZWFrOworICAgIGNhc2UgSkNTX0VYVF9YQkdSOgorICAgICAgc3NlMmZjdD1qc2ltZF9leHR4YmdyX3ljY19jb252ZXJ0X3NzZTI7CisgICAgICBtbXhmY3Q9anNpbWRfZXh0eGJncl95Y2NfY29udmVydF9tbXg7CisgICAgICBicmVhazsKKyAgICBjYXNlIEpDU19FWFRfWFJHQjoKKyAgICAgIHNzZTJmY3Q9anNpbWRfZXh0eHJnYl95Y2NfY29udmVydF9zc2UyOworICAgICAgbW14ZmN0PWpzaW1kX2V4dHhyZ2JfeWNjX2NvbnZlcnRfbW14OworICAgICAgYnJlYWs7CisgICAgZGVmYXVsdDoKKyAgICAgIHNzZTJmY3Q9anNpbWRfcmdiX3ljY19jb252ZXJ0X3NzZTI7CisgICAgICBtbXhmY3Q9anNpbWRfcmdiX3ljY19jb252ZXJ0X21teDsKKyAgICAgIGJyZWFrOworICB9CisKKyAgaWYgKChzaW1kX3N1cHBvcnQgJiBKU0lNRF9TU0UyKSAmJgorICAgICAgSVNfQUxJR05FRF9TU0UoamNvbnN0X3JnYl95Y2NfY29udmVydF9zc2UyKSkKKyAgICBzc2UyZmN0KGNpbmZvLT5pbWFnZV93aWR0aCwgaW5wdXRfYnVmLAorICAgICAgICBvdXRwdXRfYnVmLCBvdXRwdXRfcm93LCBudW1fcm93cyk7CisgIGVsc2UgaWYgKHNpbWRfc3VwcG9ydCAmIEpTSU1EX01NWCkKKyAgICBtbXhmY3QoY2luZm8tPmltYWdlX3dpZHRoLCBpbnB1dF9idWYsCisgICAgICAgIG91dHB1dF9idWYsIG91dHB1dF9yb3csIG51bV9yb3dzKTsKK30KKworR0xPQkFMKHZvaWQpCitqc2ltZF95Y2NfcmdiX2NvbnZlcnQgKGpfZGVjb21wcmVzc19wdHIgY2luZm8sCisgICAgICAgICAgICAgICAgICAgICAgIEpTQU1QSU1BR0UgaW5wdXRfYnVmLCBKRElNRU5TSU9OIGlucHV0X3JvdywKKyAgICAgICAgICAgICAgICAgICAgICAgSlNBTVBBUlJBWSBvdXRwdXRfYnVmLCBpbnQgbnVtX3Jvd3MpCit7CisgIHZvaWQgKCpzc2UyZmN0KShKRElNRU5TSU9OLCBKU0FNUElNQUdFLCBKRElNRU5TSU9OLCBKU0FNUEFSUkFZLCBpbnQpOworICB2b2lkICgqbW14ZmN0KShKRElNRU5TSU9OLCBKU0FNUElNQUdFLCBKRElNRU5TSU9OLCBKU0FNUEFSUkFZLCBpbnQpOworCisgIHN3aXRjaChjaW5mby0+b3V0X2NvbG9yX3NwYWNlKQorICB7CisgICAgY2FzZSBKQ1NfRVhUX1JHQjoKKyAgICAgIHNzZTJmY3Q9anNpbWRfeWNjX2V4dHJnYl9jb252ZXJ0X3NzZTI7CisgICAgICBtbXhmY3Q9anNpbWRfeWNjX2V4dHJnYl9jb252ZXJ0X21teDsKKyAgICAgIGJyZWFrOworICAgIGNhc2UgSkNTX0VYVF9SR0JYOgorICAgICAgc3NlMmZjdD1qc2ltZF95Y2NfZXh0cmdieF9jb252ZXJ0X3NzZTI7CisgICAgICBtbXhmY3Q9anNpbWRfeWNjX2V4dHJnYnhfY29udmVydF9tbXg7CisgICAgICBicmVhazsKKyAgICBjYXNlIEpDU19FWFRfQkdSOgorICAgICAgc3NlMmZjdD1qc2ltZF95Y2NfZXh0YmdyX2NvbnZlcnRfc3NlMjsKKyAgICAgIG1teGZjdD1qc2ltZF95Y2NfZXh0YmdyX2NvbnZlcnRfbW14OworICAgICAgYnJlYWs7CisgICAgY2FzZSBKQ1NfRVhUX0JHUlg6CisgICAgICBzc2UyZmN0PWpzaW1kX3ljY19leHRiZ3J4X2NvbnZlcnRfc3NlMjsKKyAgICAgIG1teGZjdD1qc2ltZF95Y2NfZXh0YmdyeF9jb252ZXJ0X21teDsKKyAgICAgIGJyZWFrOworICAgIGNhc2UgSkNTX0VYVF9YQkdSOgorICAgICAgc3NlMmZjdD1qc2ltZF95Y2NfZXh0eGJncl9jb252ZXJ0X3NzZTI7CisgICAgICBtbXhmY3Q9anNpbWRfeWNjX2V4dHhiZ3JfY29udmVydF9tbXg7CisgICAgICBicmVhazsKKyAgICBjYXNlIEpDU19FWFRfWFJHQjoKKyAgICAgIHNzZTJmY3Q9anNpbWRfeWNjX2V4dHhyZ2JfY29udmVydF9zc2UyOworICAgICAgbW14ZmN0PWpzaW1kX3ljY19leHR4cmdiX2NvbnZlcnRfbW14OworICAgICAgYnJlYWs7CisgICAgZGVmYXVsdDoKKyAgICAgIHNzZTJmY3Q9anNpbWRfeWNjX3JnYl9jb252ZXJ0X3NzZTI7CisgICAgICBtbXhmY3Q9anNpbWRfeWNjX3JnYl9jb252ZXJ0X21teDsKKyAgICAgIGJyZWFrOworICB9CisKKyAgaWYgKChzaW1kX3N1cHBvcnQgJiBKU0lNRF9TU0UyKSAmJgorICAgICAgSVNfQUxJR05FRF9TU0UoamNvbnN0X3ljY19yZ2JfY29udmVydF9zc2UyKSkKKyAgICBzc2UyZmN0KGNpbmZvLT5vdXRwdXRfd2lkdGgsIGlucHV0X2J1ZiwKKyAgICAgICAgaW5wdXRfcm93LCBvdXRwdXRfYnVmLCBudW1fcm93cyk7CisgIGVsc2UgaWYgKHNpbWRfc3VwcG9ydCAmIEpTSU1EX01NWCkKKyAgICBtbXhmY3QoY2luZm8tPm91dHB1dF93aWR0aCwgaW5wdXRfYnVmLAorICAgICAgICBpbnB1dF9yb3csIG91dHB1dF9idWYsIG51bV9yb3dzKTsKK30KKworR0xPQkFMKGludCkKK2pzaW1kX2Nhbl9oMnYyX2Rvd25zYW1wbGUgKHZvaWQpCit7CisgIGluaXRfc2ltZCgpOworCisgIC8qIFRoZSBjb2RlIGlzIG9wdGltaXNlZCBmb3IgdGhlc2UgdmFsdWVzIG9ubHkgKi8KKyAgaWYgKEJJVFNfSU5fSlNBTVBMRSAhPSA4KQorICAgIHJldHVybiAwOworICBpZiAoc2l6ZW9mKEpESU1FTlNJT04pICE9IDQpCisgICAgcmV0dXJuIDA7CisKKyAgaWYgKHNpbWRfc3VwcG9ydCAmIEpTSU1EX1NTRTIpCisgICAgcmV0dXJuIDE7CisgIGlmIChzaW1kX3N1cHBvcnQgJiBKU0lNRF9NTVgpCisgICAgcmV0dXJuIDE7CisKKyAgcmV0dXJuIDA7Cit9CisKK0dMT0JBTChpbnQpCitqc2ltZF9jYW5faDJ2MV9kb3duc2FtcGxlICh2b2lkKQoreworICBpbml0X3NpbWQoKTsKKworICAvKiBUaGUgY29kZSBpcyBvcHRpbWlzZWQgZm9yIHRoZXNlIHZhbHVlcyBvbmx5ICovCisgIGlmIChCSVRTX0lOX0pTQU1QTEUgIT0gOCkKKyAgICByZXR1cm4gMDsKKyAgaWYgKHNpemVvZihKRElNRU5TSU9OKSAhPSA0KQorICAgIHJldHVybiAwOworCisgIGlmIChzaW1kX3N1cHBvcnQgJiBKU0lNRF9TU0UyKQorICAgIHJldHVybiAxOworICBpZiAoc2ltZF9zdXBwb3J0ICYgSlNJTURfTU1YKQorICAgIHJldHVybiAxOworCisgIHJldHVybiAwOworfQorCitHTE9CQUwodm9pZCkKK2pzaW1kX2gydjJfZG93bnNhbXBsZSAoal9jb21wcmVzc19wdHIgY2luZm8sIGpwZWdfY29tcG9uZW50X2luZm8gKiBjb21wcHRyLAorICAgICAgICAgICAgICAgICAgICAgICBKU0FNUEFSUkFZIGlucHV0X2RhdGEsIEpTQU1QQVJSQVkgb3V0cHV0X2RhdGEpCit7CisgIGlmIChzaW1kX3N1cHBvcnQgJiBKU0lNRF9TU0UyKQorICAgIGpzaW1kX2gydjJfZG93bnNhbXBsZV9zc2UyKGNpbmZvLT5pbWFnZV93aWR0aCwgY2luZm8tPm1heF92X3NhbXBfZmFjdG9yLAorICAgICAgICBjb21wcHRyLT52X3NhbXBfZmFjdG9yLCBjb21wcHRyLT53aWR0aF9pbl9ibG9ja3MsCisgICAgICAgIGlucHV0X2RhdGEsIG91dHB1dF9kYXRhKTsKKyAgZWxzZSBpZiAoc2ltZF9zdXBwb3J0ICYgSlNJTURfTU1YKQorICAgIGpzaW1kX2gydjJfZG93bnNhbXBsZV9tbXgoY2luZm8tPmltYWdlX3dpZHRoLCBjaW5mby0+bWF4X3Zfc2FtcF9mYWN0b3IsCisgICAgICAgIGNvbXBwdHItPnZfc2FtcF9mYWN0b3IsIGNvbXBwdHItPndpZHRoX2luX2Jsb2NrcywKKyAgICAgICAgaW5wdXRfZGF0YSwgb3V0cHV0X2RhdGEpOworfQorCitHTE9CQUwodm9pZCkKK2pzaW1kX2gydjFfZG93bnNhbXBsZSAoal9jb21wcmVzc19wdHIgY2luZm8sIGpwZWdfY29tcG9uZW50X2luZm8gKiBjb21wcHRyLAorICAgICAgICAgICAgICAgICAgICAgICBKU0FNUEFSUkFZIGlucHV0X2RhdGEsIEpTQU1QQVJSQVkgb3V0cHV0X2RhdGEpCit7CisgIGlmIChzaW1kX3N1cHBvcnQgJiBKU0lNRF9TU0UyKQorICAgIGpzaW1kX2gydjFfZG93bnNhbXBsZV9zc2UyKGNpbmZvLT5pbWFnZV93aWR0aCwgY2luZm8tPm1heF92X3NhbXBfZmFjdG9yLAorICAgICAgICBjb21wcHRyLT52X3NhbXBfZmFjdG9yLCBjb21wcHRyLT53aWR0aF9pbl9ibG9ja3MsCisgICAgICAgIGlucHV0X2RhdGEsIG91dHB1dF9kYXRhKTsKKyAgZWxzZSBpZiAoc2ltZF9zdXBwb3J0ICYgSlNJTURfTU1YKQorICAgIGpzaW1kX2gydjFfZG93bnNhbXBsZV9tbXgoY2luZm8tPmltYWdlX3dpZHRoLCBjaW5mby0+bWF4X3Zfc2FtcF9mYWN0b3IsCisgICAgICAgIGNvbXBwdHItPnZfc2FtcF9mYWN0b3IsIGNvbXBwdHItPndpZHRoX2luX2Jsb2NrcywKKyAgICAgICAgaW5wdXRfZGF0YSwgb3V0cHV0X2RhdGEpOworfQorCitHTE9CQUwoaW50KQoranNpbWRfY2FuX2gydjJfdXBzYW1wbGUgKHZvaWQpCit7CisgIGluaXRfc2ltZCgpOworCisgIC8qIFRoZSBjb2RlIGlzIG9wdGltaXNlZCBmb3IgdGhlc2UgdmFsdWVzIG9ubHkgKi8KKyAgaWYgKEJJVFNfSU5fSlNBTVBMRSAhPSA4KQorICAgIHJldHVybiAwOworICBpZiAoc2l6ZW9mKEpESU1FTlNJT04pICE9IDQpCisgICAgcmV0dXJuIDA7CisKKyAgaWYgKHNpbWRfc3VwcG9ydCAmIEpTSU1EX1NTRTIpCisgICAgcmV0dXJuIDE7CisgIGlmIChzaW1kX3N1cHBvcnQgJiBKU0lNRF9NTVgpCisgICAgcmV0dXJuIDE7CisKKyAgcmV0dXJuIDA7Cit9CisKK0dMT0JBTChpbnQpCitqc2ltZF9jYW5faDJ2MV91cHNhbXBsZSAodm9pZCkKK3sKKyAgaW5pdF9zaW1kKCk7CisKKyAgLyogVGhlIGNvZGUgaXMgb3B0aW1pc2VkIGZvciB0aGVzZSB2YWx1ZXMgb25seSAqLworICBpZiAoQklUU19JTl9KU0FNUExFICE9IDgpCisgICAgcmV0dXJuIDA7CisgIGlmIChzaXplb2YoSkRJTUVOU0lPTikgIT0gNCkKKyAgICByZXR1cm4gMDsKKworICBpZiAoc2ltZF9zdXBwb3J0ICYgSlNJTURfU1NFMikKKyAgICByZXR1cm4gMTsKKyAgaWYgKHNpbWRfc3VwcG9ydCAmIEpTSU1EX01NWCkKKyAgICByZXR1cm4gMTsKKworICByZXR1cm4gMDsKK30KKworR0xPQkFMKHZvaWQpCitqc2ltZF9oMnYyX3Vwc2FtcGxlIChqX2RlY29tcHJlc3NfcHRyIGNpbmZvLAorICAgICAgICAgICAgICAgICAgICAganBlZ19jb21wb25lbnRfaW5mbyAqIGNvbXBwdHIsIAorICAgICAgICAgICAgICAgICAgICAgSlNBTVBBUlJBWSBpbnB1dF9kYXRhLAorICAgICAgICAgICAgICAgICAgICAgSlNBTVBBUlJBWSAqIG91dHB1dF9kYXRhX3B0cikKK3sKKyAgaWYgKHNpbWRfc3VwcG9ydCAmIEpTSU1EX1NTRTIpCisgICAganNpbWRfaDJ2Ml91cHNhbXBsZV9zc2UyKGNpbmZvLT5tYXhfdl9zYW1wX2ZhY3RvciwKKyAgICAgICAgY2luZm8tPm91dHB1dF93aWR0aCwgaW5wdXRfZGF0YSwgb3V0cHV0X2RhdGFfcHRyKTsKKyAgZWxzZSBpZiAoc2ltZF9zdXBwb3J0ICYgSlNJTURfTU1YKQorICAgIGpzaW1kX2gydjJfdXBzYW1wbGVfbW14KGNpbmZvLT5tYXhfdl9zYW1wX2ZhY3RvciwKKyAgICAgICAgY2luZm8tPm91dHB1dF93aWR0aCwgaW5wdXRfZGF0YSwgb3V0cHV0X2RhdGFfcHRyKTsKK30KKworR0xPQkFMKHZvaWQpCitqc2ltZF9oMnYxX3Vwc2FtcGxlIChqX2RlY29tcHJlc3NfcHRyIGNpbmZvLAorICAgICAgICAgICAgICAgICAgICAganBlZ19jb21wb25lbnRfaW5mbyAqIGNvbXBwdHIsIAorICAgICAgICAgICAgICAgICAgICAgSlNBTVBBUlJBWSBpbnB1dF9kYXRhLAorICAgICAgICAgICAgICAgICAgICAgSlNBTVBBUlJBWSAqIG91dHB1dF9kYXRhX3B0cikKK3sKKyAgaWYgKHNpbWRfc3VwcG9ydCAmIEpTSU1EX1NTRTIpCisgICAganNpbWRfaDJ2MV91cHNhbXBsZV9zc2UyKGNpbmZvLT5tYXhfdl9zYW1wX2ZhY3RvciwKKyAgICAgICAgY2luZm8tPm91dHB1dF93aWR0aCwgaW5wdXRfZGF0YSwgb3V0cHV0X2RhdGFfcHRyKTsKKyAgZWxzZSBpZiAoc2ltZF9zdXBwb3J0ICYgSlNJTURfTU1YKQorICAgIGpzaW1kX2gydjFfdXBzYW1wbGVfbW14KGNpbmZvLT5tYXhfdl9zYW1wX2ZhY3RvciwKKyAgICAgICAgY2luZm8tPm91dHB1dF93aWR0aCwgaW5wdXRfZGF0YSwgb3V0cHV0X2RhdGFfcHRyKTsKK30KKworR0xPQkFMKGludCkKK2pzaW1kX2Nhbl9oMnYyX2ZhbmN5X3Vwc2FtcGxlICh2b2lkKQoreworICBpbml0X3NpbWQoKTsKKworICAvKiBUaGUgY29kZSBpcyBvcHRpbWlzZWQgZm9yIHRoZXNlIHZhbHVlcyBvbmx5ICovCisgIGlmIChCSVRTX0lOX0pTQU1QTEUgIT0gOCkKKyAgICByZXR1cm4gMDsKKyAgaWYgKHNpemVvZihKRElNRU5TSU9OKSAhPSA0KQorICAgIHJldHVybiAwOworCisgIGlmICgoc2ltZF9zdXBwb3J0ICYgSlNJTURfU1NFMikgJiYKKyAgICAgIElTX0FMSUdORURfU1NFKGpjb25zdF9mYW5jeV91cHNhbXBsZV9zc2UyKSkKKyAgICByZXR1cm4gMTsKKyAgaWYgKHNpbWRfc3VwcG9ydCAmIEpTSU1EX01NWCkKKyAgICByZXR1cm4gMTsKKworICByZXR1cm4gMDsKK30KKworR0xPQkFMKGludCkKK2pzaW1kX2Nhbl9oMnYxX2ZhbmN5X3Vwc2FtcGxlICh2b2lkKQoreworICBpbml0X3NpbWQoKTsKKworICAvKiBUaGUgY29kZSBpcyBvcHRpbWlzZWQgZm9yIHRoZXNlIHZhbHVlcyBvbmx5ICovCisgIGlmIChCSVRTX0lOX0pTQU1QTEUgIT0gOCkKKyAgICByZXR1cm4gMDsKKyAgaWYgKHNpemVvZihKRElNRU5TSU9OKSAhPSA0KQorICAgIHJldHVybiAwOworCisgIGlmICgoc2ltZF9zdXBwb3J0ICYgSlNJTURfU1NFMikgJiYKKyAgICAgIElTX0FMSUdORURfU1NFKGpjb25zdF9mYW5jeV91cHNhbXBsZV9zc2UyKSkKKyAgICByZXR1cm4gMTsKKyAgaWYgKHNpbWRfc3VwcG9ydCAmIEpTSU1EX01NWCkKKyAgICByZXR1cm4gMTsKKworICByZXR1cm4gMDsKK30KKworR0xPQkFMKHZvaWQpCitqc2ltZF9oMnYyX2ZhbmN5X3Vwc2FtcGxlIChqX2RlY29tcHJlc3NfcHRyIGNpbmZvLAorICAgICAgICAgICAgICAgICAgICAgICAgICAganBlZ19jb21wb25lbnRfaW5mbyAqIGNvbXBwdHIsIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgSlNBTVBBUlJBWSBpbnB1dF9kYXRhLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgSlNBTVBBUlJBWSAqIG91dHB1dF9kYXRhX3B0cikKK3sKKyAgaWYgKChzaW1kX3N1cHBvcnQgJiBKU0lNRF9TU0UyKSAmJgorICAgICAgSVNfQUxJR05FRF9TU0UoamNvbnN0X2ZhbmN5X3Vwc2FtcGxlX3NzZTIpKQorICAgIGpzaW1kX2gydjJfZmFuY3lfdXBzYW1wbGVfc3NlMihjaW5mby0+bWF4X3Zfc2FtcF9mYWN0b3IsCisgICAgICAgIGNvbXBwdHItPmRvd25zYW1wbGVkX3dpZHRoLCBpbnB1dF9kYXRhLCBvdXRwdXRfZGF0YV9wdHIpOworICBlbHNlIGlmIChzaW1kX3N1cHBvcnQgJiBKU0lNRF9NTVgpCisgICAganNpbWRfaDJ2Ml9mYW5jeV91cHNhbXBsZV9tbXgoY2luZm8tPm1heF92X3NhbXBfZmFjdG9yLAorICAgICAgICBjb21wcHRyLT5kb3duc2FtcGxlZF93aWR0aCwgaW5wdXRfZGF0YSwgb3V0cHV0X2RhdGFfcHRyKTsKK30KKworR0xPQkFMKHZvaWQpCitqc2ltZF9oMnYxX2ZhbmN5X3Vwc2FtcGxlIChqX2RlY29tcHJlc3NfcHRyIGNpbmZvLAorICAgICAgICAgICAgICAgICAgICAgICAgICAganBlZ19jb21wb25lbnRfaW5mbyAqIGNvbXBwdHIsIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgSlNBTVBBUlJBWSBpbnB1dF9kYXRhLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgSlNBTVBBUlJBWSAqIG91dHB1dF9kYXRhX3B0cikKK3sKKyAgaWYgKChzaW1kX3N1cHBvcnQgJiBKU0lNRF9TU0UyKSAmJgorICAgICAgSVNfQUxJR05FRF9TU0UoamNvbnN0X2ZhbmN5X3Vwc2FtcGxlX3NzZTIpKQorICAgIGpzaW1kX2gydjFfZmFuY3lfdXBzYW1wbGVfc3NlMihjaW5mby0+bWF4X3Zfc2FtcF9mYWN0b3IsCisgICAgICAgIGNvbXBwdHItPmRvd25zYW1wbGVkX3dpZHRoLCBpbnB1dF9kYXRhLCBvdXRwdXRfZGF0YV9wdHIpOworICBlbHNlIGlmIChzaW1kX3N1cHBvcnQgJiBKU0lNRF9NTVgpCisgICAganNpbWRfaDJ2MV9mYW5jeV91cHNhbXBsZV9tbXgoY2luZm8tPm1heF92X3NhbXBfZmFjdG9yLAorICAgICAgICBjb21wcHRyLT5kb3duc2FtcGxlZF93aWR0aCwgaW5wdXRfZGF0YSwgb3V0cHV0X2RhdGFfcHRyKTsKK30KKworR0xPQkFMKGludCkKK2pzaW1kX2Nhbl9oMnYyX21lcmdlZF91cHNhbXBsZSAodm9pZCkKK3sKKyAgaW5pdF9zaW1kKCk7CisKKyAgLyogVGhlIGNvZGUgaXMgb3B0aW1pc2VkIGZvciB0aGVzZSB2YWx1ZXMgb25seSAqLworICBpZiAoQklUU19JTl9KU0FNUExFICE9IDgpCisgICAgcmV0dXJuIDA7CisgIGlmIChzaXplb2YoSkRJTUVOU0lPTikgIT0gNCkKKyAgICByZXR1cm4gMDsKKworICBpZiAoKHNpbWRfc3VwcG9ydCAmIEpTSU1EX1NTRTIpICYmCisgICAgICBJU19BTElHTkVEX1NTRShqY29uc3RfbWVyZ2VkX3Vwc2FtcGxlX3NzZTIpKQorICAgIHJldHVybiAxOworICBpZiAoc2ltZF9zdXBwb3J0ICYgSlNJTURfTU1YKQorICAgIHJldHVybiAxOworCisgIHJldHVybiAwOworfQorCitHTE9CQUwoaW50KQoranNpbWRfY2FuX2gydjFfbWVyZ2VkX3Vwc2FtcGxlICh2b2lkKQoreworICBpbml0X3NpbWQoKTsKKworICAvKiBUaGUgY29kZSBpcyBvcHRpbWlzZWQgZm9yIHRoZXNlIHZhbHVlcyBvbmx5ICovCisgIGlmIChCSVRTX0lOX0pTQU1QTEUgIT0gOCkKKyAgICByZXR1cm4gMDsKKyAgaWYgKHNpemVvZihKRElNRU5TSU9OKSAhPSA0KQorICAgIHJldHVybiAwOworCisgIGlmICgoc2ltZF9zdXBwb3J0ICYgSlNJTURfU1NFMikgJiYKKyAgICAgIElTX0FMSUdORURfU1NFKGpjb25zdF9tZXJnZWRfdXBzYW1wbGVfc3NlMikpCisgICAgcmV0dXJuIDE7CisgIGlmIChzaW1kX3N1cHBvcnQgJiBKU0lNRF9NTVgpCisgICAgcmV0dXJuIDE7CisKKyAgcmV0dXJuIDA7Cit9CisKK0dMT0JBTCh2b2lkKQoranNpbWRfaDJ2Ml9tZXJnZWRfdXBzYW1wbGUgKGpfZGVjb21wcmVzc19wdHIgY2luZm8sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgSlNBTVBJTUFHRSBpbnB1dF9idWYsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgSkRJTUVOU0lPTiBpbl9yb3dfZ3JvdXBfY3RyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIEpTQU1QQVJSQVkgb3V0cHV0X2J1ZikKK3sKKyAgdm9pZCAoKnNzZTJmY3QpKEpESU1FTlNJT04sIEpTQU1QSU1BR0UsIEpESU1FTlNJT04sIEpTQU1QQVJSQVkpOworICB2b2lkICgqbW14ZmN0KShKRElNRU5TSU9OLCBKU0FNUElNQUdFLCBKRElNRU5TSU9OLCBKU0FNUEFSUkFZKTsKKworICBzd2l0Y2goY2luZm8tPm91dF9jb2xvcl9zcGFjZSkKKyAgeworICAgIGNhc2UgSkNTX0VYVF9SR0I6CisgICAgICBzc2UyZmN0PWpzaW1kX2gydjJfZXh0cmdiX21lcmdlZF91cHNhbXBsZV9zc2UyOworICAgICAgbW14ZmN0PWpzaW1kX2gydjJfZXh0cmdiX21lcmdlZF91cHNhbXBsZV9tbXg7CisgICAgICBicmVhazsKKyAgICBjYXNlIEpDU19FWFRfUkdCWDoKKyAgICAgIHNzZTJmY3Q9anNpbWRfaDJ2Ml9leHRyZ2J4X21lcmdlZF91cHNhbXBsZV9zc2UyOworICAgICAgbW14ZmN0PWpzaW1kX2gydjJfZXh0cmdieF9tZXJnZWRfdXBzYW1wbGVfbW14OworICAgICAgYnJlYWs7CisgICAgY2FzZSBKQ1NfRVhUX0JHUjoKKyAgICAgIHNzZTJmY3Q9anNpbWRfaDJ2Ml9leHRiZ3JfbWVyZ2VkX3Vwc2FtcGxlX3NzZTI7CisgICAgICBtbXhmY3Q9anNpbWRfaDJ2Ml9leHRiZ3JfbWVyZ2VkX3Vwc2FtcGxlX21teDsKKyAgICAgIGJyZWFrOworICAgIGNhc2UgSkNTX0VYVF9CR1JYOgorICAgICAgc3NlMmZjdD1qc2ltZF9oMnYyX2V4dGJncnhfbWVyZ2VkX3Vwc2FtcGxlX3NzZTI7CisgICAgICBtbXhmY3Q9anNpbWRfaDJ2Ml9leHRiZ3J4X21lcmdlZF91cHNhbXBsZV9tbXg7CisgICAgICBicmVhazsKKyAgICBjYXNlIEpDU19FWFRfWEJHUjoKKyAgICAgIHNzZTJmY3Q9anNpbWRfaDJ2Ml9leHR4YmdyX21lcmdlZF91cHNhbXBsZV9zc2UyOworICAgICAgbW14ZmN0PWpzaW1kX2gydjJfZXh0eGJncl9tZXJnZWRfdXBzYW1wbGVfbW14OworICAgICAgYnJlYWs7CisgICAgY2FzZSBKQ1NfRVhUX1hSR0I6CisgICAgICBzc2UyZmN0PWpzaW1kX2gydjJfZXh0eHJnYl9tZXJnZWRfdXBzYW1wbGVfc3NlMjsKKyAgICAgIG1teGZjdD1qc2ltZF9oMnYyX2V4dHhyZ2JfbWVyZ2VkX3Vwc2FtcGxlX21teDsKKyAgICAgIGJyZWFrOworICAgIGRlZmF1bHQ6CisgICAgICBzc2UyZmN0PWpzaW1kX2gydjJfbWVyZ2VkX3Vwc2FtcGxlX3NzZTI7CisgICAgICBtbXhmY3Q9anNpbWRfaDJ2Ml9tZXJnZWRfdXBzYW1wbGVfbW14OworICAgICAgYnJlYWs7CisgIH0KKworICBpZiAoKHNpbWRfc3VwcG9ydCAmIEpTSU1EX1NTRTIpICYmCisgICAgICBJU19BTElHTkVEX1NTRShqY29uc3RfbWVyZ2VkX3Vwc2FtcGxlX3NzZTIpKQorICAgIHNzZTJmY3QoY2luZm8tPm91dHB1dF93aWR0aCwgaW5wdXRfYnVmLAorICAgICAgICBpbl9yb3dfZ3JvdXBfY3RyLCBvdXRwdXRfYnVmKTsKKyAgZWxzZSBpZiAoc2ltZF9zdXBwb3J0ICYgSlNJTURfTU1YKQorICAgIG1teGZjdChjaW5mby0+b3V0cHV0X3dpZHRoLCBpbnB1dF9idWYsCisgICAgICAgIGluX3Jvd19ncm91cF9jdHIsIG91dHB1dF9idWYpOworfQorCitHTE9CQUwodm9pZCkKK2pzaW1kX2gydjFfbWVyZ2VkX3Vwc2FtcGxlIChqX2RlY29tcHJlc3NfcHRyIGNpbmZvLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIEpTQU1QSU1BR0UgaW5wdXRfYnVmLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIEpESU1FTlNJT04gaW5fcm93X2dyb3VwX2N0ciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBKU0FNUEFSUkFZIG91dHB1dF9idWYpCit7CisgIHZvaWQgKCpzc2UyZmN0KShKRElNRU5TSU9OLCBKU0FNUElNQUdFLCBKRElNRU5TSU9OLCBKU0FNUEFSUkFZKTsKKyAgdm9pZCAoKm1teGZjdCkoSkRJTUVOU0lPTiwgSlNBTVBJTUFHRSwgSkRJTUVOU0lPTiwgSlNBTVBBUlJBWSk7CisKKyAgc3dpdGNoKGNpbmZvLT5vdXRfY29sb3Jfc3BhY2UpCisgIHsKKyAgICBjYXNlIEpDU19FWFRfUkdCOgorICAgICAgc3NlMmZjdD1qc2ltZF9oMnYxX2V4dHJnYl9tZXJnZWRfdXBzYW1wbGVfc3NlMjsKKyAgICAgIG1teGZjdD1qc2ltZF9oMnYxX2V4dHJnYl9tZXJnZWRfdXBzYW1wbGVfbW14OworICAgICAgYnJlYWs7CisgICAgY2FzZSBKQ1NfRVhUX1JHQlg6CisgICAgICBzc2UyZmN0PWpzaW1kX2gydjFfZXh0cmdieF9tZXJnZWRfdXBzYW1wbGVfc3NlMjsKKyAgICAgIG1teGZjdD1qc2ltZF9oMnYxX2V4dHJnYnhfbWVyZ2VkX3Vwc2FtcGxlX21teDsKKyAgICAgIGJyZWFrOworICAgIGNhc2UgSkNTX0VYVF9CR1I6CisgICAgICBzc2UyZmN0PWpzaW1kX2gydjFfZXh0YmdyX21lcmdlZF91cHNhbXBsZV9zc2UyOworICAgICAgbW14ZmN0PWpzaW1kX2gydjFfZXh0YmdyX21lcmdlZF91cHNhbXBsZV9tbXg7CisgICAgICBicmVhazsKKyAgICBjYXNlIEpDU19FWFRfQkdSWDoKKyAgICAgIHNzZTJmY3Q9anNpbWRfaDJ2MV9leHRiZ3J4X21lcmdlZF91cHNhbXBsZV9zc2UyOworICAgICAgbW14ZmN0PWpzaW1kX2gydjFfZXh0YmdyeF9tZXJnZWRfdXBzYW1wbGVfbW14OworICAgICAgYnJlYWs7CisgICAgY2FzZSBKQ1NfRVhUX1hCR1I6CisgICAgICBzc2UyZmN0PWpzaW1kX2gydjFfZXh0eGJncl9tZXJnZWRfdXBzYW1wbGVfc3NlMjsKKyAgICAgIG1teGZjdD1qc2ltZF9oMnYxX2V4dHhiZ3JfbWVyZ2VkX3Vwc2FtcGxlX21teDsKKyAgICAgIGJyZWFrOworICAgIGNhc2UgSkNTX0VYVF9YUkdCOgorICAgICAgc3NlMmZjdD1qc2ltZF9oMnYxX2V4dHhyZ2JfbWVyZ2VkX3Vwc2FtcGxlX3NzZTI7CisgICAgICBtbXhmY3Q9anNpbWRfaDJ2MV9leHR4cmdiX21lcmdlZF91cHNhbXBsZV9tbXg7CisgICAgICBicmVhazsKKyAgICBkZWZhdWx0OgorICAgICAgc3NlMmZjdD1qc2ltZF9oMnYxX21lcmdlZF91cHNhbXBsZV9zc2UyOworICAgICAgbW14ZmN0PWpzaW1kX2gydjFfbWVyZ2VkX3Vwc2FtcGxlX21teDsKKyAgICAgIGJyZWFrOworICB9CisKKyAgaWYgKChzaW1kX3N1cHBvcnQgJiBKU0lNRF9TU0UyKSAmJgorICAgICAgSVNfQUxJR05FRF9TU0UoamNvbnN0X21lcmdlZF91cHNhbXBsZV9zc2UyKSkKKyAgICBzc2UyZmN0KGNpbmZvLT5vdXRwdXRfd2lkdGgsIGlucHV0X2J1ZiwKKyAgICAgICAgaW5fcm93X2dyb3VwX2N0ciwgb3V0cHV0X2J1Zik7CisgIGVsc2UgaWYgKHNpbWRfc3VwcG9ydCAmIEpTSU1EX01NWCkKKyAgICBtbXhmY3QoY2luZm8tPm91dHB1dF93aWR0aCwgaW5wdXRfYnVmLAorICAgICAgICBpbl9yb3dfZ3JvdXBfY3RyLCBvdXRwdXRfYnVmKTsKK30KKworR0xPQkFMKGludCkKK2pzaW1kX2Nhbl9jb252c2FtcCAodm9pZCkKK3sKKyAgaW5pdF9zaW1kKCk7CisKKyAgLyogVGhlIGNvZGUgaXMgb3B0aW1pc2VkIGZvciB0aGVzZSB2YWx1ZXMgb25seSAqLworICBpZiAoRENUU0laRSAhPSA4KQorICAgIHJldHVybiAwOworICBpZiAoQklUU19JTl9KU0FNUExFICE9IDgpCisgICAgcmV0dXJuIDA7CisgIGlmIChzaXplb2YoSkRJTUVOU0lPTikgIT0gNCkKKyAgICByZXR1cm4gMDsKKyAgaWYgKHNpemVvZihEQ1RFTEVNKSAhPSAyKQorICAgIHJldHVybiAwOworCisgIGlmIChzaW1kX3N1cHBvcnQgJiBKU0lNRF9TU0UyKQorICAgIHJldHVybiAxOworICBpZiAoc2ltZF9zdXBwb3J0ICYgSlNJTURfTU1YKQorICAgIHJldHVybiAxOworCisgIHJldHVybiAwOworfQorCitHTE9CQUwoaW50KQoranNpbWRfY2FuX2NvbnZzYW1wX2Zsb2F0ICh2b2lkKQoreworICBpbml0X3NpbWQoKTsKKworICAvKiBUaGUgY29kZSBpcyBvcHRpbWlzZWQgZm9yIHRoZXNlIHZhbHVlcyBvbmx5ICovCisgIGlmIChEQ1RTSVpFICE9IDgpCisgICAgcmV0dXJuIDA7CisgIGlmIChCSVRTX0lOX0pTQU1QTEUgIT0gOCkKKyAgICByZXR1cm4gMDsKKyAgaWYgKHNpemVvZihKRElNRU5TSU9OKSAhPSA0KQorICAgIHJldHVybiAwOworICBpZiAoc2l6ZW9mKEZBU1RfRkxPQVQpICE9IDQpCisgICAgcmV0dXJuIDA7CisKKyAgaWYgKHNpbWRfc3VwcG9ydCAmIEpTSU1EX1NTRTIpCisgICAgcmV0dXJuIDE7CisgIGlmIChzaW1kX3N1cHBvcnQgJiBKU0lNRF9TU0UpCisgICAgcmV0dXJuIDE7CisgIGlmIChzaW1kX3N1cHBvcnQgJiBKU0lNRF8zRE5PVykKKyAgICByZXR1cm4gMTsKKworICByZXR1cm4gMDsKK30KKworR0xPQkFMKHZvaWQpCitqc2ltZF9jb252c2FtcCAoSlNBTVBBUlJBWSBzYW1wbGVfZGF0YSwgSkRJTUVOU0lPTiBzdGFydF9jb2wsCisgICAgICAgICAgICAgICAgRENURUxFTSAqIHdvcmtzcGFjZSkKK3sKKyAgaWYgKHNpbWRfc3VwcG9ydCAmIEpTSU1EX1NTRTIpCisgICAganNpbWRfY29udnNhbXBfc3NlMihzYW1wbGVfZGF0YSwgc3RhcnRfY29sLCB3b3Jrc3BhY2UpOworICBlbHNlIGlmIChzaW1kX3N1cHBvcnQgJiBKU0lNRF9NTVgpCisgICAganNpbWRfY29udnNhbXBfbW14KHNhbXBsZV9kYXRhLCBzdGFydF9jb2wsIHdvcmtzcGFjZSk7Cit9CisKK0dMT0JBTCh2b2lkKQoranNpbWRfY29udnNhbXBfZmxvYXQgKEpTQU1QQVJSQVkgc2FtcGxlX2RhdGEsIEpESU1FTlNJT04gc3RhcnRfY29sLAorICAgICAgICAgICAgICAgICAgICAgIEZBU1RfRkxPQVQgKiB3b3Jrc3BhY2UpCit7CisgIGlmIChzaW1kX3N1cHBvcnQgJiBKU0lNRF9TU0UyKQorICAgIGpzaW1kX2NvbnZzYW1wX2Zsb2F0X3NzZTIoc2FtcGxlX2RhdGEsIHN0YXJ0X2NvbCwgd29ya3NwYWNlKTsKKyAgZWxzZSBpZiAoc2ltZF9zdXBwb3J0ICYgSlNJTURfU1NFKQorICAgIGpzaW1kX2NvbnZzYW1wX2Zsb2F0X3NzZShzYW1wbGVfZGF0YSwgc3RhcnRfY29sLCB3b3Jrc3BhY2UpOworICBlbHNlIGlmIChzaW1kX3N1cHBvcnQgJiBKU0lNRF8zRE5PVykKKyAgICBqc2ltZF9jb252c2FtcF9mbG9hdF8zZG5vdyhzYW1wbGVfZGF0YSwgc3RhcnRfY29sLCB3b3Jrc3BhY2UpOworfQorCitHTE9CQUwoaW50KQoranNpbWRfY2FuX2ZkY3RfaXNsb3cgKHZvaWQpCit7CisgIGluaXRfc2ltZCgpOworCisgIC8qIFRoZSBjb2RlIGlzIG9wdGltaXNlZCBmb3IgdGhlc2UgdmFsdWVzIG9ubHkgKi8KKyAgaWYgKERDVFNJWkUgIT0gOCkKKyAgICByZXR1cm4gMDsKKyAgaWYgKHNpemVvZihEQ1RFTEVNKSAhPSAyKQorICAgIHJldHVybiAwOworCisgIGlmICgoc2ltZF9zdXBwb3J0ICYgSlNJTURfU1NFMikgJiYgSVNfQUxJR05FRF9TU0UoamNvbnN0X2ZkY3RfaXNsb3dfc3NlMikpCisgICAgcmV0dXJuIDE7CisgIGlmIChzaW1kX3N1cHBvcnQgJiBKU0lNRF9NTVgpCisgICAgcmV0dXJuIDE7CisKKyAgcmV0dXJuIDA7Cit9CisKK0dMT0JBTChpbnQpCitqc2ltZF9jYW5fZmRjdF9pZmFzdCAodm9pZCkKK3sKKyAgaW5pdF9zaW1kKCk7CisKKyAgLyogVGhlIGNvZGUgaXMgb3B0aW1pc2VkIGZvciB0aGVzZSB2YWx1ZXMgb25seSAqLworICBpZiAoRENUU0laRSAhPSA4KQorICAgIHJldHVybiAwOworICBpZiAoc2l6ZW9mKERDVEVMRU0pICE9IDIpCisgICAgcmV0dXJuIDA7CisKKyAgaWYgKChzaW1kX3N1cHBvcnQgJiBKU0lNRF9TU0UyKSAmJiBJU19BTElHTkVEX1NTRShqY29uc3RfZmRjdF9pZmFzdF9zc2UyKSkKKyAgICByZXR1cm4gMTsKKyAgaWYgKHNpbWRfc3VwcG9ydCAmIEpTSU1EX01NWCkKKyAgICByZXR1cm4gMTsKKworICByZXR1cm4gMDsKK30KKworR0xPQkFMKGludCkKK2pzaW1kX2Nhbl9mZGN0X2Zsb2F0ICh2b2lkKQoreworICBpbml0X3NpbWQoKTsKKworICAvKiBUaGUgY29kZSBpcyBvcHRpbWlzZWQgZm9yIHRoZXNlIHZhbHVlcyBvbmx5ICovCisgIGlmIChEQ1RTSVpFICE9IDgpCisgICAgcmV0dXJuIDA7CisgIGlmIChzaXplb2YoRkFTVF9GTE9BVCkgIT0gNCkKKyAgICByZXR1cm4gMDsKKworICBpZiAoKHNpbWRfc3VwcG9ydCAmIEpTSU1EX1NTRSkgJiYgSVNfQUxJR05FRF9TU0UoamNvbnN0X2ZkY3RfZmxvYXRfc3NlKSkKKyAgICByZXR1cm4gMTsKKyAgaWYgKHNpbWRfc3VwcG9ydCAmIEpTSU1EXzNETk9XKQorICAgIHJldHVybiAxOworCisgIHJldHVybiAwOworfQorCitHTE9CQUwodm9pZCkKK2pzaW1kX2ZkY3RfaXNsb3cgKERDVEVMRU0gKiBkYXRhKQoreworICBpZiAoKHNpbWRfc3VwcG9ydCAmIEpTSU1EX1NTRTIpICYmIElTX0FMSUdORURfU1NFKGpjb25zdF9mZGN0X2lzbG93X3NzZTIpKQorICAgIGpzaW1kX2ZkY3RfaXNsb3dfc3NlMihkYXRhKTsKKyAgZWxzZSBpZiAoc2ltZF9zdXBwb3J0ICYgSlNJTURfTU1YKQorICAgIGpzaW1kX2ZkY3RfaXNsb3dfbW14KGRhdGEpOworfQorCitHTE9CQUwodm9pZCkKK2pzaW1kX2ZkY3RfaWZhc3QgKERDVEVMRU0gKiBkYXRhKQoreworICBpZiAoKHNpbWRfc3VwcG9ydCAmIEpTSU1EX1NTRTIpICYmIElTX0FMSUdORURfU1NFKGpjb25zdF9mZGN0X2lzbG93X3NzZTIpKQorICAgIGpzaW1kX2ZkY3RfaWZhc3Rfc3NlMihkYXRhKTsKKyAgZWxzZSBpZiAoc2ltZF9zdXBwb3J0ICYgSlNJTURfTU1YKQorICAgIGpzaW1kX2ZkY3RfaWZhc3RfbW14KGRhdGEpOworfQorCitHTE9CQUwodm9pZCkKK2pzaW1kX2ZkY3RfZmxvYXQgKEZBU1RfRkxPQVQgKiBkYXRhKQoreworICBpZiAoKHNpbWRfc3VwcG9ydCAmIEpTSU1EX1NTRSkgJiYgSVNfQUxJR05FRF9TU0UoamNvbnN0X2ZkY3RfZmxvYXRfc3NlKSkKKyAgICBqc2ltZF9mZGN0X2Zsb2F0X3NzZShkYXRhKTsKKyAgZWxzZSBpZiAoc2ltZF9zdXBwb3J0ICYgSlNJTURfM0ROT1cpCisgICAganNpbWRfZmRjdF9mbG9hdF8zZG5vdyhkYXRhKTsKK30KKworR0xPQkFMKGludCkKK2pzaW1kX2Nhbl9xdWFudGl6ZSAodm9pZCkKK3sKKyAgaW5pdF9zaW1kKCk7CisKKyAgLyogVGhlIGNvZGUgaXMgb3B0aW1pc2VkIGZvciB0aGVzZSB2YWx1ZXMgb25seSAqLworICBpZiAoRENUU0laRSAhPSA4KQorICAgIHJldHVybiAwOworICBpZiAoc2l6ZW9mKEpDT0VGKSAhPSAyKQorICAgIHJldHVybiAwOworICBpZiAoc2l6ZW9mKERDVEVMRU0pICE9IDIpCisgICAgcmV0dXJuIDA7CisKKyAgaWYgKHNpbWRfc3VwcG9ydCAmIEpTSU1EX1NTRTIpCisgICAgcmV0dXJuIDE7CisgIGlmIChzaW1kX3N1cHBvcnQgJiBKU0lNRF9NTVgpCisgICAgcmV0dXJuIDE7CisKKyAgcmV0dXJuIDA7Cit9CisKK0dMT0JBTChpbnQpCitqc2ltZF9jYW5fcXVhbnRpemVfZmxvYXQgKHZvaWQpCit7CisgIGluaXRfc2ltZCgpOworCisgIC8qIFRoZSBjb2RlIGlzIG9wdGltaXNlZCBmb3IgdGhlc2UgdmFsdWVzIG9ubHkgKi8KKyAgaWYgKERDVFNJWkUgIT0gOCkKKyAgICByZXR1cm4gMDsKKyAgaWYgKHNpemVvZihKQ09FRikgIT0gMikKKyAgICByZXR1cm4gMDsKKyAgaWYgKHNpemVvZihGQVNUX0ZMT0FUKSAhPSA0KQorICAgIHJldHVybiAwOworCisgIGlmIChzaW1kX3N1cHBvcnQgJiBKU0lNRF9TU0UyKQorICAgIHJldHVybiAxOworICBpZiAoc2ltZF9zdXBwb3J0ICYgSlNJTURfU1NFKQorICAgIHJldHVybiAxOworICBpZiAoc2ltZF9zdXBwb3J0ICYgSlNJTURfM0ROT1cpCisgICAgcmV0dXJuIDE7CisKKyAgcmV0dXJuIDA7Cit9CisKK0dMT0JBTCh2b2lkKQoranNpbWRfcXVhbnRpemUgKEpDT0VGUFRSIGNvZWZfYmxvY2ssIERDVEVMRU0gKiBkaXZpc29ycywKKyAgICAgICAgICAgICAgICBEQ1RFTEVNICogd29ya3NwYWNlKQoreworICBpZiAoc2ltZF9zdXBwb3J0ICYgSlNJTURfU1NFMikKKyAgICBqc2ltZF9xdWFudGl6ZV9zc2UyKGNvZWZfYmxvY2ssIGRpdmlzb3JzLCB3b3Jrc3BhY2UpOworICBlbHNlIGlmIChzaW1kX3N1cHBvcnQgJiBKU0lNRF9NTVgpCisgICAganNpbWRfcXVhbnRpemVfbW14KGNvZWZfYmxvY2ssIGRpdmlzb3JzLCB3b3Jrc3BhY2UpOworfQorCitHTE9CQUwodm9pZCkKK2pzaW1kX3F1YW50aXplX2Zsb2F0IChKQ09FRlBUUiBjb2VmX2Jsb2NrLCBGQVNUX0ZMT0FUICogZGl2aXNvcnMsCisgICAgICAgICAgICAgICAgICAgICAgRkFTVF9GTE9BVCAqIHdvcmtzcGFjZSkKK3sKKyAgaWYgKHNpbWRfc3VwcG9ydCAmIEpTSU1EX1NTRTIpCisgICAganNpbWRfcXVhbnRpemVfZmxvYXRfc3NlMihjb2VmX2Jsb2NrLCBkaXZpc29ycywgd29ya3NwYWNlKTsKKyAgZWxzZSBpZiAoc2ltZF9zdXBwb3J0ICYgSlNJTURfU1NFKQorICAgIGpzaW1kX3F1YW50aXplX2Zsb2F0X3NzZShjb2VmX2Jsb2NrLCBkaXZpc29ycywgd29ya3NwYWNlKTsKKyAgZWxzZSBpZiAoc2ltZF9zdXBwb3J0ICYgSlNJTURfM0ROT1cpCisgICAganNpbWRfcXVhbnRpemVfZmxvYXRfM2Rub3coY29lZl9ibG9jaywgZGl2aXNvcnMsIHdvcmtzcGFjZSk7Cit9CisKK0dMT0JBTChpbnQpCitqc2ltZF9jYW5faWRjdF8yeDIgKHZvaWQpCit7CisgIGluaXRfc2ltZCgpOworCisgIC8qIFRoZSBjb2RlIGlzIG9wdGltaXNlZCBmb3IgdGhlc2UgdmFsdWVzIG9ubHkgKi8KKyAgaWYgKERDVFNJWkUgIT0gOCkKKyAgICByZXR1cm4gMDsKKyAgaWYgKHNpemVvZihKQ09FRikgIT0gMikKKyAgICByZXR1cm4gMDsKKyAgaWYgKEJJVFNfSU5fSlNBTVBMRSAhPSA4KQorICAgIHJldHVybiAwOworICBpZiAoc2l6ZW9mKEpESU1FTlNJT04pICE9IDQpCisgICAgcmV0dXJuIDA7CisgIGlmIChzaXplb2YoSVNMT1dfTVVMVF9UWVBFKSAhPSAyKQorICAgIHJldHVybiAwOworCisgIGlmICgoc2ltZF9zdXBwb3J0ICYgSlNJTURfU1NFMikgJiYgSVNfQUxJR05FRF9TU0UoamNvbnN0X2lkY3RfcmVkX3NzZTIpKQorICAgIHJldHVybiAxOworICBpZiAoc2ltZF9zdXBwb3J0ICYgSlNJTURfTU1YKQorICAgIHJldHVybiAxOworCisgIHJldHVybiAwOworfQorCitHTE9CQUwoaW50KQoranNpbWRfY2FuX2lkY3RfNHg0ICh2b2lkKQoreworICBpbml0X3NpbWQoKTsKKworICAvKiBUaGUgY29kZSBpcyBvcHRpbWlzZWQgZm9yIHRoZXNlIHZhbHVlcyBvbmx5ICovCisgIGlmIChEQ1RTSVpFICE9IDgpCisgICAgcmV0dXJuIDA7CisgIGlmIChzaXplb2YoSkNPRUYpICE9IDIpCisgICAgcmV0dXJuIDA7CisgIGlmIChCSVRTX0lOX0pTQU1QTEUgIT0gOCkKKyAgICByZXR1cm4gMDsKKyAgaWYgKHNpemVvZihKRElNRU5TSU9OKSAhPSA0KQorICAgIHJldHVybiAwOworICBpZiAoc2l6ZW9mKElTTE9XX01VTFRfVFlQRSkgIT0gMikKKyAgICByZXR1cm4gMDsKKworICBpZiAoKHNpbWRfc3VwcG9ydCAmIEpTSU1EX1NTRTIpICYmIElTX0FMSUdORURfU1NFKGpjb25zdF9pZGN0X3JlZF9zc2UyKSkKKyAgICByZXR1cm4gMTsKKyAgaWYgKHNpbWRfc3VwcG9ydCAmIEpTSU1EX01NWCkKKyAgICByZXR1cm4gMTsKKworICByZXR1cm4gMDsKK30KKworR0xPQkFMKHZvaWQpCitqc2ltZF9pZGN0XzJ4MiAoal9kZWNvbXByZXNzX3B0ciBjaW5mbywganBlZ19jb21wb25lbnRfaW5mbyAqIGNvbXBwdHIsCisgICAgICAgICAgICAgICAgSkNPRUZQVFIgY29lZl9ibG9jaywgSlNBTVBBUlJBWSBvdXRwdXRfYnVmLAorICAgICAgICAgICAgICAgIEpESU1FTlNJT04gb3V0cHV0X2NvbCkKK3sKKyAgaWYgKChzaW1kX3N1cHBvcnQgJiBKU0lNRF9TU0UyKSAmJiBJU19BTElHTkVEX1NTRShqY29uc3RfaWRjdF9yZWRfc3NlMikpCisgICAganNpbWRfaWRjdF8yeDJfc3NlMihjb21wcHRyLT5kY3RfdGFibGUsIGNvZWZfYmxvY2ssIG91dHB1dF9idWYsIG91dHB1dF9jb2wpOworICBlbHNlIGlmIChzaW1kX3N1cHBvcnQgJiBKU0lNRF9NTVgpCisgICAganNpbWRfaWRjdF8yeDJfbW14KGNvbXBwdHItPmRjdF90YWJsZSwgY29lZl9ibG9jaywgb3V0cHV0X2J1Ziwgb3V0cHV0X2NvbCk7Cit9CisKK0dMT0JBTCh2b2lkKQoranNpbWRfaWRjdF80eDQgKGpfZGVjb21wcmVzc19wdHIgY2luZm8sIGpwZWdfY29tcG9uZW50X2luZm8gKiBjb21wcHRyLAorICAgICAgICAgICAgICAgIEpDT0VGUFRSIGNvZWZfYmxvY2ssIEpTQU1QQVJSQVkgb3V0cHV0X2J1ZiwKKyAgICAgICAgICAgICAgICBKRElNRU5TSU9OIG91dHB1dF9jb2wpCit7CisgIGlmICgoc2ltZF9zdXBwb3J0ICYgSlNJTURfU1NFMikgJiYgSVNfQUxJR05FRF9TU0UoamNvbnN0X2lkY3RfcmVkX3NzZTIpKQorICAgIGpzaW1kX2lkY3RfNHg0X3NzZTIoY29tcHB0ci0+ZGN0X3RhYmxlLCBjb2VmX2Jsb2NrLCBvdXRwdXRfYnVmLCBvdXRwdXRfY29sKTsKKyAgZWxzZSBpZiAoc2ltZF9zdXBwb3J0ICYgSlNJTURfTU1YKQorICAgIGpzaW1kX2lkY3RfNHg0X21teChjb21wcHRyLT5kY3RfdGFibGUsIGNvZWZfYmxvY2ssIG91dHB1dF9idWYsIG91dHB1dF9jb2wpOworfQorCitHTE9CQUwoaW50KQoranNpbWRfY2FuX2lkY3RfaXNsb3cgKHZvaWQpCit7CisgIGluaXRfc2ltZCgpOworCisgIC8qIFRoZSBjb2RlIGlzIG9wdGltaXNlZCBmb3IgdGhlc2UgdmFsdWVzIG9ubHkgKi8KKyAgaWYgKERDVFNJWkUgIT0gOCkKKyAgICByZXR1cm4gMDsKKyAgaWYgKHNpemVvZihKQ09FRikgIT0gMikKKyAgICByZXR1cm4gMDsKKyAgaWYgKEJJVFNfSU5fSlNBTVBMRSAhPSA4KQorICAgIHJldHVybiAwOworICBpZiAoc2l6ZW9mKEpESU1FTlNJT04pICE9IDQpCisgICAgcmV0dXJuIDA7CisgIGlmIChzaXplb2YoSVNMT1dfTVVMVF9UWVBFKSAhPSAyKQorICAgIHJldHVybiAwOworCisgIGlmICgoc2ltZF9zdXBwb3J0ICYgSlNJTURfU1NFMikgJiYgSVNfQUxJR05FRF9TU0UoamNvbnN0X2lkY3RfaXNsb3dfc3NlMikpCisgICAgcmV0dXJuIDE7CisgIGlmIChzaW1kX3N1cHBvcnQgJiBKU0lNRF9NTVgpCisgICAgcmV0dXJuIDE7CisKKyAgcmV0dXJuIDA7Cit9CisKK0dMT0JBTChpbnQpCitqc2ltZF9jYW5faWRjdF9pZmFzdCAodm9pZCkKK3sKKyAgaW5pdF9zaW1kKCk7CisKKyAgLyogVGhlIGNvZGUgaXMgb3B0aW1pc2VkIGZvciB0aGVzZSB2YWx1ZXMgb25seSAqLworICBpZiAoRENUU0laRSAhPSA4KQorICAgIHJldHVybiAwOworICBpZiAoc2l6ZW9mKEpDT0VGKSAhPSAyKQorICAgIHJldHVybiAwOworICBpZiAoQklUU19JTl9KU0FNUExFICE9IDgpCisgICAgcmV0dXJuIDA7CisgIGlmIChzaXplb2YoSkRJTUVOU0lPTikgIT0gNCkKKyAgICByZXR1cm4gMDsKKyAgaWYgKHNpemVvZihJRkFTVF9NVUxUX1RZUEUpICE9IDIpCisgICAgcmV0dXJuIDA7CisgIGlmIChJRkFTVF9TQ0FMRV9CSVRTICE9IDIpCisgICAgcmV0dXJuIDA7CisKKyAgaWYgKChzaW1kX3N1cHBvcnQgJiBKU0lNRF9TU0UyKSAmJiBJU19BTElHTkVEX1NTRShqY29uc3RfaWRjdF9pZmFzdF9zc2UyKSkKKyAgICByZXR1cm4gMTsKKyAgaWYgKHNpbWRfc3VwcG9ydCAmIEpTSU1EX01NWCkKKyAgICByZXR1cm4gMTsKKworICByZXR1cm4gMDsKK30KKworR0xPQkFMKGludCkKK2pzaW1kX2Nhbl9pZGN0X2Zsb2F0ICh2b2lkKQoreworICBpbml0X3NpbWQoKTsKKworICBpZiAoRENUU0laRSAhPSA4KQorICAgIHJldHVybiAwOworICBpZiAoc2l6ZW9mKEpDT0VGKSAhPSAyKQorICAgIHJldHVybiAwOworICBpZiAoQklUU19JTl9KU0FNUExFICE9IDgpCisgICAgcmV0dXJuIDA7CisgIGlmIChzaXplb2YoSkRJTUVOU0lPTikgIT0gNCkKKyAgICByZXR1cm4gMDsKKyAgaWYgKHNpemVvZihGQVNUX0ZMT0FUKSAhPSA0KQorICAgIHJldHVybiAwOworICBpZiAoc2l6ZW9mKEZMT0FUX01VTFRfVFlQRSkgIT0gNCkKKyAgICByZXR1cm4gMDsKKworICBpZiAoKHNpbWRfc3VwcG9ydCAmIEpTSU1EX1NTRTIpICYmIElTX0FMSUdORURfU1NFKGpjb25zdF9pZGN0X2Zsb2F0X3NzZTIpKQorICAgIHJldHVybiAxOworICBpZiAoKHNpbWRfc3VwcG9ydCAmIEpTSU1EX1NTRSkgJiYgSVNfQUxJR05FRF9TU0UoamNvbnN0X2lkY3RfZmxvYXRfc3NlKSkKKyAgICByZXR1cm4gMTsKKyAgaWYgKHNpbWRfc3VwcG9ydCAmIEpTSU1EXzNETk9XKQorICAgIHJldHVybiAxOworCisgIHJldHVybiAwOworfQorCitHTE9CQUwodm9pZCkKK2pzaW1kX2lkY3RfaXNsb3cgKGpfZGVjb21wcmVzc19wdHIgY2luZm8sIGpwZWdfY29tcG9uZW50X2luZm8gKiBjb21wcHRyLAorICAgICAgICAgICAgICAgIEpDT0VGUFRSIGNvZWZfYmxvY2ssIEpTQU1QQVJSQVkgb3V0cHV0X2J1ZiwKKyAgICAgICAgICAgICAgICBKRElNRU5TSU9OIG91dHB1dF9jb2wpCit7CisgIGlmICgoc2ltZF9zdXBwb3J0ICYgSlNJTURfU1NFMikgJiYgSVNfQUxJR05FRF9TU0UoamNvbnN0X2lkY3RfaXNsb3dfc3NlMikpCisgICAganNpbWRfaWRjdF9pc2xvd19zc2UyKGNvbXBwdHItPmRjdF90YWJsZSwgY29lZl9ibG9jaywgb3V0cHV0X2J1Ziwgb3V0cHV0X2NvbCk7CisgIGVsc2UgaWYgKHNpbWRfc3VwcG9ydCAmIEpTSU1EX01NWCkKKyAgICBqc2ltZF9pZGN0X2lzbG93X21teChjb21wcHRyLT5kY3RfdGFibGUsIGNvZWZfYmxvY2ssIG91dHB1dF9idWYsIG91dHB1dF9jb2wpOworfQorCitHTE9CQUwodm9pZCkKK2pzaW1kX2lkY3RfaWZhc3QgKGpfZGVjb21wcmVzc19wdHIgY2luZm8sIGpwZWdfY29tcG9uZW50X2luZm8gKiBjb21wcHRyLAorICAgICAgICAgICAgICAgIEpDT0VGUFRSIGNvZWZfYmxvY2ssIEpTQU1QQVJSQVkgb3V0cHV0X2J1ZiwKKyAgICAgICAgICAgICAgICBKRElNRU5TSU9OIG91dHB1dF9jb2wpCit7CisgIGlmICgoc2ltZF9zdXBwb3J0ICYgSlNJTURfU1NFMikgJiYgSVNfQUxJR05FRF9TU0UoamNvbnN0X2lkY3RfaWZhc3Rfc3NlMikpCisgICAganNpbWRfaWRjdF9pZmFzdF9zc2UyKGNvbXBwdHItPmRjdF90YWJsZSwgY29lZl9ibG9jaywgb3V0cHV0X2J1Ziwgb3V0cHV0X2NvbCk7CisgIGVsc2UgaWYgKHNpbWRfc3VwcG9ydCAmIEpTSU1EX01NWCkKKyAgICBqc2ltZF9pZGN0X2lmYXN0X21teChjb21wcHRyLT5kY3RfdGFibGUsIGNvZWZfYmxvY2ssIG91dHB1dF9idWYsIG91dHB1dF9jb2wpOworfQorCitHTE9CQUwodm9pZCkKK2pzaW1kX2lkY3RfZmxvYXQgKGpfZGVjb21wcmVzc19wdHIgY2luZm8sIGpwZWdfY29tcG9uZW50X2luZm8gKiBjb21wcHRyLAorICAgICAgICAgICAgICAgIEpDT0VGUFRSIGNvZWZfYmxvY2ssIEpTQU1QQVJSQVkgb3V0cHV0X2J1ZiwKKyAgICAgICAgICAgICAgICBKRElNRU5TSU9OIG91dHB1dF9jb2wpCit7CisgIGlmICgoc2ltZF9zdXBwb3J0ICYgSlNJTURfU1NFMikgJiYgSVNfQUxJR05FRF9TU0UoamNvbnN0X2lkY3RfZmxvYXRfc3NlMikpCisgICAganNpbWRfaWRjdF9mbG9hdF9zc2UyKGNvbXBwdHItPmRjdF90YWJsZSwgY29lZl9ibG9jaywKKyAgICAgICAgb3V0cHV0X2J1Ziwgb3V0cHV0X2NvbCk7CisgIGVsc2UgaWYgKChzaW1kX3N1cHBvcnQgJiBKU0lNRF9TU0UpICYmIElTX0FMSUdORURfU1NFKGpjb25zdF9pZGN0X2Zsb2F0X3NzZSkpCisgICAganNpbWRfaWRjdF9mbG9hdF9zc2UoY29tcHB0ci0+ZGN0X3RhYmxlLCBjb2VmX2Jsb2NrLAorICAgICAgICBvdXRwdXRfYnVmLCBvdXRwdXRfY29sKTsKKyAgZWxzZSBpZiAoc2ltZF9zdXBwb3J0ICYgSlNJTURfM0ROT1cpCisgICAganNpbWRfaWRjdF9mbG9hdF8zZG5vdyhjb21wcHRyLT5kY3RfdGFibGUsIGNvZWZfYmxvY2ssCisgICAgICAgIG91dHB1dF9idWYsIG91dHB1dF9jb2wpOworfQorCmRpZmYgLS1naXQgYS9zaW1kL2pzaW1kX3g4Nl82NC5jIGIvc2ltZC9qc2ltZF94ODZfNjQuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43NjU5MjQ5Ci0tLSAvZGV2L251bGwKKysrIGIvc2ltZC9qc2ltZF94ODZfNjQuYwpAQCAtMCwwICsxLDY4MSBAQAorLyoKKyAqIGpzaW1kX3g4Nl82NC5jCisgKgorICogQ29weXJpZ2h0IDIwMDkgUGllcnJlIE9zc21hbiA8b3NzbWFuQGNlbmRpby5zZT4gZm9yIENlbmRpbyBBQgorICogQ29weXJpZ2h0IDIwMDkgRC4gUi4gQ29tbWFuZGVyCisgKiAKKyAqIEJhc2VkIG9uIHRoZSB4ODYgU0lNRCBleHRlbnNpb24gZm9yIElKRyBKUEVHIGxpYnJhcnksCisgKiBDb3B5cmlnaHQgKEMpIDE5OTktMjAwNiwgTUlZQVNBS0EgTWFzYXJ1LgorICogRm9yIGNvbmRpdGlvbnMgb2YgZGlzdHJpYnV0aW9uIGFuZCB1c2UsIHNlZSBjb3B5cmlnaHQgbm90aWNlIGluIGpzaW1kZXh0LmluYworICoKKyAqIFRoaXMgZmlsZSBjb250YWlucyB0aGUgaW50ZXJmYWNlIGJldHdlZW4gdGhlICJub3JtYWwiIHBvcnRpb25zCisgKiBvZiB0aGUgbGlicmFyeSBhbmQgdGhlIFNJTUQgaW1wbGVtZW50YXRpb25zIHdoZW4gcnVubmluZyBvbiBhCisgKiB4ODZfNjQgYXJjaGl0ZWN0dXJlLgorICovCisKKyNkZWZpbmUgSlBFR19JTlRFUk5BTFMKKyNpbmNsdWRlICIuLi9qaW5jbHVkZS5oIgorI2luY2x1ZGUgIi4uL2pwZWdsaWIuaCIKKyNpbmNsdWRlICIuLi9qc2ltZC5oIgorI2luY2x1ZGUgIi4uL2pkY3QuaCIKKyNpbmNsdWRlICIuLi9qc2ltZGRjdC5oIgorI2luY2x1ZGUgImpzaW1kLmgiCisKKy8qCisgKiBJbiB0aGUgUElDIGNhc2VzLCB3ZSBoYXZlIG5vIGd1YXJhbnRlZSB0aGF0IGNvbnN0YW50cyB3aWxsIGtlZXAKKyAqIHRoZWlyIGFsaWdubWVudC4gVGhpcyBtYWNybyBhbGxvd3MgdXMgdG8gdmVyaWZ5IGl0IGF0IHJ1bnRpbWUuCisgKi8KKyNkZWZpbmUgSVNfQUxJR05FRChwdHIsIG9yZGVyKSAoKChzaXplX3QpcHRyICYgKCgxIDw8IG9yZGVyKSAtIDEpKSA9PSAwKQorCisjZGVmaW5lIElTX0FMSUdORURfU1NFKHB0cikgKElTX0FMSUdORUQocHRyLCA0KSkgLyogMTYgYnl0ZSBhbGlnbm1lbnQgKi8KKworR0xPQkFMKGludCkKK2pzaW1kX2Nhbl9yZ2JfeWNjICh2b2lkKQoreworICAvKiBUaGUgY29kZSBpcyBvcHRpbWlzZWQgZm9yIHRoZXNlIHZhbHVlcyBvbmx5ICovCisgIGlmIChCSVRTX0lOX0pTQU1QTEUgIT0gOCkKKyAgICByZXR1cm4gMDsKKyAgaWYgKHNpemVvZihKRElNRU5TSU9OKSAhPSA0KQorICAgIHJldHVybiAwOworICBpZiAoKFJHQl9QSVhFTFNJWkUgIT0gMykgJiYgKFJHQl9QSVhFTFNJWkUgIT0gNCkpCisgICAgcmV0dXJuIDA7CisKKyAgaWYgKCFJU19BTElHTkVEX1NTRShqY29uc3RfcmdiX3ljY19jb252ZXJ0X3NzZTIpKQorICAgIHJldHVybiAwOworCisgIHJldHVybiAxOworfQorCitHTE9CQUwoaW50KQoranNpbWRfY2FuX3ljY19yZ2IgKHZvaWQpCit7CisgIC8qIFRoZSBjb2RlIGlzIG9wdGltaXNlZCBmb3IgdGhlc2UgdmFsdWVzIG9ubHkgKi8KKyAgaWYgKEJJVFNfSU5fSlNBTVBMRSAhPSA4KQorICAgIHJldHVybiAwOworICBpZiAoc2l6ZW9mKEpESU1FTlNJT04pICE9IDQpCisgICAgcmV0dXJuIDA7CisgIGlmICgoUkdCX1BJWEVMU0laRSAhPSAzKSAmJiAoUkdCX1BJWEVMU0laRSAhPSA0KSkKKyAgICByZXR1cm4gMDsKKworICBpZiAoIUlTX0FMSUdORURfU1NFKGpjb25zdF95Y2NfcmdiX2NvbnZlcnRfc3NlMikpCisgICAgcmV0dXJuIDA7CisKKyAgcmV0dXJuIDE7Cit9CisKK0dMT0JBTCh2b2lkKQoranNpbWRfcmdiX3ljY19jb252ZXJ0IChqX2NvbXByZXNzX3B0ciBjaW5mbywKKyAgICAgICAgICAgICAgICAgICAgICAgSlNBTVBBUlJBWSBpbnB1dF9idWYsIEpTQU1QSU1BR0Ugb3V0cHV0X2J1ZiwKKyAgICAgICAgICAgICAgICAgICAgICAgSkRJTUVOU0lPTiBvdXRwdXRfcm93LCBpbnQgbnVtX3Jvd3MpCit7CisgIHZvaWQgKCpzc2UyZmN0KShKRElNRU5TSU9OLCBKU0FNUEFSUkFZLCBKU0FNUElNQUdFLCBKRElNRU5TSU9OLCBpbnQpOworCisgIHN3aXRjaChjaW5mby0+aW5fY29sb3Jfc3BhY2UpCisgIHsKKyAgICBjYXNlIEpDU19FWFRfUkdCOgorICAgICAgc3NlMmZjdD1qc2ltZF9leHRyZ2JfeWNjX2NvbnZlcnRfc3NlMjsKKyAgICAgIGJyZWFrOworICAgIGNhc2UgSkNTX0VYVF9SR0JYOgorICAgICAgc3NlMmZjdD1qc2ltZF9leHRyZ2J4X3ljY19jb252ZXJ0X3NzZTI7CisgICAgICBicmVhazsKKyAgICBjYXNlIEpDU19FWFRfQkdSOgorICAgICAgc3NlMmZjdD1qc2ltZF9leHRiZ3JfeWNjX2NvbnZlcnRfc3NlMjsKKyAgICAgIGJyZWFrOworICAgIGNhc2UgSkNTX0VYVF9CR1JYOgorICAgICAgc3NlMmZjdD1qc2ltZF9leHRiZ3J4X3ljY19jb252ZXJ0X3NzZTI7CisgICAgICBicmVhazsKKyAgICBjYXNlIEpDU19FWFRfWEJHUjoKKyAgICAgIHNzZTJmY3Q9anNpbWRfZXh0eGJncl95Y2NfY29udmVydF9zc2UyOworICAgICAgYnJlYWs7CisgICAgY2FzZSBKQ1NfRVhUX1hSR0I6CisgICAgICBzc2UyZmN0PWpzaW1kX2V4dHhyZ2JfeWNjX2NvbnZlcnRfc3NlMjsKKyAgICAgIGJyZWFrOworICAgIGRlZmF1bHQ6CisgICAgICBzc2UyZmN0PWpzaW1kX3JnYl95Y2NfY29udmVydF9zc2UyOworICAgICAgYnJlYWs7CisgIH0KKworICBzc2UyZmN0KGNpbmZvLT5pbWFnZV93aWR0aCwgaW5wdXRfYnVmLCBvdXRwdXRfYnVmLCBvdXRwdXRfcm93LCBudW1fcm93cyk7Cit9CisKK0dMT0JBTCh2b2lkKQoranNpbWRfeWNjX3JnYl9jb252ZXJ0IChqX2RlY29tcHJlc3NfcHRyIGNpbmZvLAorICAgICAgICAgICAgICAgICAgICAgICBKU0FNUElNQUdFIGlucHV0X2J1ZiwgSkRJTUVOU0lPTiBpbnB1dF9yb3csCisgICAgICAgICAgICAgICAgICAgICAgIEpTQU1QQVJSQVkgb3V0cHV0X2J1ZiwgaW50IG51bV9yb3dzKQoreworICB2b2lkICgqc3NlMmZjdCkoSkRJTUVOU0lPTiwgSlNBTVBJTUFHRSwgSkRJTUVOU0lPTiwgSlNBTVBBUlJBWSwgaW50KTsKKworICBzd2l0Y2goY2luZm8tPm91dF9jb2xvcl9zcGFjZSkKKyAgeworICAgIGNhc2UgSkNTX0VYVF9SR0I6CisgICAgICBzc2UyZmN0PWpzaW1kX3ljY19leHRyZ2JfY29udmVydF9zc2UyOworICAgICAgYnJlYWs7CisgICAgY2FzZSBKQ1NfRVhUX1JHQlg6CisgICAgICBzc2UyZmN0PWpzaW1kX3ljY19leHRyZ2J4X2NvbnZlcnRfc3NlMjsKKyAgICAgIGJyZWFrOworICAgIGNhc2UgSkNTX0VYVF9CR1I6CisgICAgICBzc2UyZmN0PWpzaW1kX3ljY19leHRiZ3JfY29udmVydF9zc2UyOworICAgICAgYnJlYWs7CisgICAgY2FzZSBKQ1NfRVhUX0JHUlg6CisgICAgICBzc2UyZmN0PWpzaW1kX3ljY19leHRiZ3J4X2NvbnZlcnRfc3NlMjsKKyAgICAgIGJyZWFrOworICAgIGNhc2UgSkNTX0VYVF9YQkdSOgorICAgICAgc3NlMmZjdD1qc2ltZF95Y2NfZXh0eGJncl9jb252ZXJ0X3NzZTI7CisgICAgICBicmVhazsKKyAgICBjYXNlIEpDU19FWFRfWFJHQjoKKyAgICAgIHNzZTJmY3Q9anNpbWRfeWNjX2V4dHhyZ2JfY29udmVydF9zc2UyOworICAgICAgYnJlYWs7CisgICAgZGVmYXVsdDoKKyAgICAgIHNzZTJmY3Q9anNpbWRfeWNjX3JnYl9jb252ZXJ0X3NzZTI7CisgICAgICBicmVhazsKKyAgfQorCisgIHNzZTJmY3QoY2luZm8tPm91dHB1dF93aWR0aCwgaW5wdXRfYnVmLCBpbnB1dF9yb3csIG91dHB1dF9idWYsIG51bV9yb3dzKTsKK30KKworR0xPQkFMKGludCkKK2pzaW1kX2Nhbl9oMnYyX2Rvd25zYW1wbGUgKHZvaWQpCit7CisgIC8qIFRoZSBjb2RlIGlzIG9wdGltaXNlZCBmb3IgdGhlc2UgdmFsdWVzIG9ubHkgKi8KKyAgaWYgKEJJVFNfSU5fSlNBTVBMRSAhPSA4KQorICAgIHJldHVybiAwOworICBpZiAoc2l6ZW9mKEpESU1FTlNJT04pICE9IDQpCisgICAgcmV0dXJuIDA7CisKKyAgcmV0dXJuIDE7Cit9CisKK0dMT0JBTChpbnQpCitqc2ltZF9jYW5faDJ2MV9kb3duc2FtcGxlICh2b2lkKQoreworICAvKiBUaGUgY29kZSBpcyBvcHRpbWlzZWQgZm9yIHRoZXNlIHZhbHVlcyBvbmx5ICovCisgIGlmIChCSVRTX0lOX0pTQU1QTEUgIT0gOCkKKyAgICByZXR1cm4gMDsKKyAgaWYgKHNpemVvZihKRElNRU5TSU9OKSAhPSA0KQorICAgIHJldHVybiAwOworCisgIHJldHVybiAxOworfQorCitHTE9CQUwodm9pZCkKK2pzaW1kX2gydjJfZG93bnNhbXBsZSAoal9jb21wcmVzc19wdHIgY2luZm8sIGpwZWdfY29tcG9uZW50X2luZm8gKiBjb21wcHRyLAorICAgICAgICAgICAgICAgICAgICAgICBKU0FNUEFSUkFZIGlucHV0X2RhdGEsIEpTQU1QQVJSQVkgb3V0cHV0X2RhdGEpCit7CisgIGpzaW1kX2gydjJfZG93bnNhbXBsZV9zc2UyKGNpbmZvLT5pbWFnZV93aWR0aCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2luZm8tPm1heF92X3NhbXBfZmFjdG9yLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb21wcHRyLT52X3NhbXBfZmFjdG9yLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb21wcHRyLT53aWR0aF9pbl9ibG9ja3MsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlucHV0X2RhdGEsIG91dHB1dF9kYXRhKTsKK30KKworR0xPQkFMKHZvaWQpCitqc2ltZF9oMnYxX2Rvd25zYW1wbGUgKGpfY29tcHJlc3NfcHRyIGNpbmZvLCBqcGVnX2NvbXBvbmVudF9pbmZvICogY29tcHB0ciwKKyAgICAgICAgICAgICAgICAgICAgICAgSlNBTVBBUlJBWSBpbnB1dF9kYXRhLCBKU0FNUEFSUkFZIG91dHB1dF9kYXRhKQoreworICBqc2ltZF9oMnYxX2Rvd25zYW1wbGVfc3NlMihjaW5mby0+aW1hZ2Vfd2lkdGgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNpbmZvLT5tYXhfdl9zYW1wX2ZhY3RvciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29tcHB0ci0+dl9zYW1wX2ZhY3RvciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29tcHB0ci0+d2lkdGhfaW5fYmxvY2tzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnB1dF9kYXRhLCBvdXRwdXRfZGF0YSk7Cit9CisKK0dMT0JBTChpbnQpCitqc2ltZF9jYW5faDJ2Ml91cHNhbXBsZSAodm9pZCkKK3sKKyAgLyogVGhlIGNvZGUgaXMgb3B0aW1pc2VkIGZvciB0aGVzZSB2YWx1ZXMgb25seSAqLworICBpZiAoQklUU19JTl9KU0FNUExFICE9IDgpCisgICAgcmV0dXJuIDA7CisgIGlmIChzaXplb2YoSkRJTUVOU0lPTikgIT0gNCkKKyAgICByZXR1cm4gMDsKKworICByZXR1cm4gMTsKK30KKworR0xPQkFMKGludCkKK2pzaW1kX2Nhbl9oMnYxX3Vwc2FtcGxlICh2b2lkKQoreworICAvKiBUaGUgY29kZSBpcyBvcHRpbWlzZWQgZm9yIHRoZXNlIHZhbHVlcyBvbmx5ICovCisgIGlmIChCSVRTX0lOX0pTQU1QTEUgIT0gOCkKKyAgICByZXR1cm4gMDsKKyAgaWYgKHNpemVvZihKRElNRU5TSU9OKSAhPSA0KQorICAgIHJldHVybiAwOworCisgIHJldHVybiAxOworfQorCitHTE9CQUwodm9pZCkKK2pzaW1kX2gydjJfdXBzYW1wbGUgKGpfZGVjb21wcmVzc19wdHIgY2luZm8sCisgICAgICAgICAgICAgICAgICAgICBqcGVnX2NvbXBvbmVudF9pbmZvICogY29tcHB0ciwgCisgICAgICAgICAgICAgICAgICAgICBKU0FNUEFSUkFZIGlucHV0X2RhdGEsCisgICAgICAgICAgICAgICAgICAgICBKU0FNUEFSUkFZICogb3V0cHV0X2RhdGFfcHRyKQoreworICBqc2ltZF9oMnYyX3Vwc2FtcGxlX3NzZTIoY2luZm8tPm1heF92X3NhbXBfZmFjdG9yLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgY2luZm8tPm91dHB1dF93aWR0aCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIGlucHV0X2RhdGEsIG91dHB1dF9kYXRhX3B0cik7Cit9CisKK0dMT0JBTCh2b2lkKQoranNpbWRfaDJ2MV91cHNhbXBsZSAoal9kZWNvbXByZXNzX3B0ciBjaW5mbywKKyAgICAgICAgICAgICAgICAgICAgIGpwZWdfY29tcG9uZW50X2luZm8gKiBjb21wcHRyLCAKKyAgICAgICAgICAgICAgICAgICAgIEpTQU1QQVJSQVkgaW5wdXRfZGF0YSwKKyAgICAgICAgICAgICAgICAgICAgIEpTQU1QQVJSQVkgKiBvdXRwdXRfZGF0YV9wdHIpCit7CisgIGpzaW1kX2gydjFfdXBzYW1wbGVfc3NlMihjaW5mby0+bWF4X3Zfc2FtcF9mYWN0b3IsCisgICAgICAgICAgICAgICAgICAgICAgICAgICBjaW5mby0+b3V0cHV0X3dpZHRoLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgaW5wdXRfZGF0YSwgb3V0cHV0X2RhdGFfcHRyKTsKK30KKworR0xPQkFMKGludCkKK2pzaW1kX2Nhbl9oMnYyX2ZhbmN5X3Vwc2FtcGxlICh2b2lkKQoreworICAvKiBUaGUgY29kZSBpcyBvcHRpbWlzZWQgZm9yIHRoZXNlIHZhbHVlcyBvbmx5ICovCisgIGlmIChCSVRTX0lOX0pTQU1QTEUgIT0gOCkKKyAgICByZXR1cm4gMDsKKyAgaWYgKHNpemVvZihKRElNRU5TSU9OKSAhPSA0KQorICAgIHJldHVybiAwOworCisgIGlmICghSVNfQUxJR05FRF9TU0UoamNvbnN0X2ZhbmN5X3Vwc2FtcGxlX3NzZTIpKQorICAgIHJldHVybiAwOworCisgIHJldHVybiAxOworfQorCitHTE9CQUwoaW50KQoranNpbWRfY2FuX2gydjFfZmFuY3lfdXBzYW1wbGUgKHZvaWQpCit7CisgIC8qIFRoZSBjb2RlIGlzIG9wdGltaXNlZCBmb3IgdGhlc2UgdmFsdWVzIG9ubHkgKi8KKyAgaWYgKEJJVFNfSU5fSlNBTVBMRSAhPSA4KQorICAgIHJldHVybiAwOworICBpZiAoc2l6ZW9mKEpESU1FTlNJT04pICE9IDQpCisgICAgcmV0dXJuIDA7CisKKyAgaWYgKCFJU19BTElHTkVEX1NTRShqY29uc3RfZmFuY3lfdXBzYW1wbGVfc3NlMikpCisgICAgcmV0dXJuIDA7CisKKyAgcmV0dXJuIDE7Cit9CisKK0dMT0JBTCh2b2lkKQoranNpbWRfaDJ2Ml9mYW5jeV91cHNhbXBsZSAoal9kZWNvbXByZXNzX3B0ciBjaW5mbywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIGpwZWdfY29tcG9uZW50X2luZm8gKiBjb21wcHRyLCAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIEpTQU1QQVJSQVkgaW5wdXRfZGF0YSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIEpTQU1QQVJSQVkgKiBvdXRwdXRfZGF0YV9wdHIpCit7CisgIGpzaW1kX2gydjJfZmFuY3lfdXBzYW1wbGVfc3NlMihjaW5mby0+bWF4X3Zfc2FtcF9mYWN0b3IsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb21wcHRyLT5kb3duc2FtcGxlZF93aWR0aCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlucHV0X2RhdGEsIG91dHB1dF9kYXRhX3B0cik7Cit9CisKK0dMT0JBTCh2b2lkKQoranNpbWRfaDJ2MV9mYW5jeV91cHNhbXBsZSAoal9kZWNvbXByZXNzX3B0ciBjaW5mbywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIGpwZWdfY29tcG9uZW50X2luZm8gKiBjb21wcHRyLCAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIEpTQU1QQVJSQVkgaW5wdXRfZGF0YSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIEpTQU1QQVJSQVkgKiBvdXRwdXRfZGF0YV9wdHIpCit7CisgIGpzaW1kX2gydjFfZmFuY3lfdXBzYW1wbGVfc3NlMihjaW5mby0+bWF4X3Zfc2FtcF9mYWN0b3IsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb21wcHRyLT5kb3duc2FtcGxlZF93aWR0aCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlucHV0X2RhdGEsIG91dHB1dF9kYXRhX3B0cik7Cit9CisKK0dMT0JBTChpbnQpCitqc2ltZF9jYW5faDJ2Ml9tZXJnZWRfdXBzYW1wbGUgKHZvaWQpCit7CisgIC8qIFRoZSBjb2RlIGlzIG9wdGltaXNlZCBmb3IgdGhlc2UgdmFsdWVzIG9ubHkgKi8KKyAgaWYgKEJJVFNfSU5fSlNBTVBMRSAhPSA4KQorICAgIHJldHVybiAwOworICBpZiAoc2l6ZW9mKEpESU1FTlNJT04pICE9IDQpCisgICAgcmV0dXJuIDA7CisKKyAgaWYgKCFJU19BTElHTkVEX1NTRShqY29uc3RfbWVyZ2VkX3Vwc2FtcGxlX3NzZTIpKQorICAgIHJldHVybiAwOworCisgIHJldHVybiAxOworfQorCitHTE9CQUwoaW50KQoranNpbWRfY2FuX2gydjFfbWVyZ2VkX3Vwc2FtcGxlICh2b2lkKQoreworICAvKiBUaGUgY29kZSBpcyBvcHRpbWlzZWQgZm9yIHRoZXNlIHZhbHVlcyBvbmx5ICovCisgIGlmIChCSVRTX0lOX0pTQU1QTEUgIT0gOCkKKyAgICByZXR1cm4gMDsKKyAgaWYgKHNpemVvZihKRElNRU5TSU9OKSAhPSA0KQorICAgIHJldHVybiAwOworCisgIGlmICghSVNfQUxJR05FRF9TU0UoamNvbnN0X21lcmdlZF91cHNhbXBsZV9zc2UyKSkKKyAgICByZXR1cm4gMDsKKworICByZXR1cm4gMTsKK30KKworR0xPQkFMKHZvaWQpCitqc2ltZF9oMnYyX21lcmdlZF91cHNhbXBsZSAoal9kZWNvbXByZXNzX3B0ciBjaW5mbywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBKU0FNUElNQUdFIGlucHV0X2J1ZiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBKRElNRU5TSU9OIGluX3Jvd19ncm91cF9jdHIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgSlNBTVBBUlJBWSBvdXRwdXRfYnVmKQoreworICB2b2lkICgqc3NlMmZjdCkoSkRJTUVOU0lPTiwgSlNBTVBJTUFHRSwgSkRJTUVOU0lPTiwgSlNBTVBBUlJBWSk7CisKKyAgc3dpdGNoKGNpbmZvLT5vdXRfY29sb3Jfc3BhY2UpCisgIHsKKyAgICBjYXNlIEpDU19FWFRfUkdCOgorICAgICAgc3NlMmZjdD1qc2ltZF9oMnYyX2V4dHJnYl9tZXJnZWRfdXBzYW1wbGVfc3NlMjsKKyAgICAgIGJyZWFrOworICAgIGNhc2UgSkNTX0VYVF9SR0JYOgorICAgICAgc3NlMmZjdD1qc2ltZF9oMnYyX2V4dHJnYnhfbWVyZ2VkX3Vwc2FtcGxlX3NzZTI7CisgICAgICBicmVhazsKKyAgICBjYXNlIEpDU19FWFRfQkdSOgorICAgICAgc3NlMmZjdD1qc2ltZF9oMnYyX2V4dGJncl9tZXJnZWRfdXBzYW1wbGVfc3NlMjsKKyAgICAgIGJyZWFrOworICAgIGNhc2UgSkNTX0VYVF9CR1JYOgorICAgICAgc3NlMmZjdD1qc2ltZF9oMnYyX2V4dGJncnhfbWVyZ2VkX3Vwc2FtcGxlX3NzZTI7CisgICAgICBicmVhazsKKyAgICBjYXNlIEpDU19FWFRfWEJHUjoKKyAgICAgIHNzZTJmY3Q9anNpbWRfaDJ2Ml9leHR4YmdyX21lcmdlZF91cHNhbXBsZV9zc2UyOworICAgICAgYnJlYWs7CisgICAgY2FzZSBKQ1NfRVhUX1hSR0I6CisgICAgICBzc2UyZmN0PWpzaW1kX2gydjJfZXh0eHJnYl9tZXJnZWRfdXBzYW1wbGVfc3NlMjsKKyAgICAgIGJyZWFrOworICAgIGRlZmF1bHQ6CisgICAgICBzc2UyZmN0PWpzaW1kX2gydjJfbWVyZ2VkX3Vwc2FtcGxlX3NzZTI7CisgICAgICBicmVhazsKKyAgfQorCisgIHNzZTJmY3QoY2luZm8tPm91dHB1dF93aWR0aCwgaW5wdXRfYnVmLCBpbl9yb3dfZ3JvdXBfY3RyLCBvdXRwdXRfYnVmKTsKK30KKworR0xPQkFMKHZvaWQpCitqc2ltZF9oMnYxX21lcmdlZF91cHNhbXBsZSAoal9kZWNvbXByZXNzX3B0ciBjaW5mbywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBKU0FNUElNQUdFIGlucHV0X2J1ZiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBKRElNRU5TSU9OIGluX3Jvd19ncm91cF9jdHIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgSlNBTVBBUlJBWSBvdXRwdXRfYnVmKQoreworICB2b2lkICgqc3NlMmZjdCkoSkRJTUVOU0lPTiwgSlNBTVBJTUFHRSwgSkRJTUVOU0lPTiwgSlNBTVBBUlJBWSk7CisKKyAgc3dpdGNoKGNpbmZvLT5vdXRfY29sb3Jfc3BhY2UpCisgIHsKKyAgICBjYXNlIEpDU19FWFRfUkdCOgorICAgICAgc3NlMmZjdD1qc2ltZF9oMnYxX2V4dHJnYl9tZXJnZWRfdXBzYW1wbGVfc3NlMjsKKyAgICAgIGJyZWFrOworICAgIGNhc2UgSkNTX0VYVF9SR0JYOgorICAgICAgc3NlMmZjdD1qc2ltZF9oMnYxX2V4dHJnYnhfbWVyZ2VkX3Vwc2FtcGxlX3NzZTI7CisgICAgICBicmVhazsKKyAgICBjYXNlIEpDU19FWFRfQkdSOgorICAgICAgc3NlMmZjdD1qc2ltZF9oMnYxX2V4dGJncl9tZXJnZWRfdXBzYW1wbGVfc3NlMjsKKyAgICAgIGJyZWFrOworICAgIGNhc2UgSkNTX0VYVF9CR1JYOgorICAgICAgc3NlMmZjdD1qc2ltZF9oMnYxX2V4dGJncnhfbWVyZ2VkX3Vwc2FtcGxlX3NzZTI7CisgICAgICBicmVhazsKKyAgICBjYXNlIEpDU19FWFRfWEJHUjoKKyAgICAgIHNzZTJmY3Q9anNpbWRfaDJ2MV9leHR4YmdyX21lcmdlZF91cHNhbXBsZV9zc2UyOworICAgICAgYnJlYWs7CisgICAgY2FzZSBKQ1NfRVhUX1hSR0I6CisgICAgICBzc2UyZmN0PWpzaW1kX2gydjFfZXh0eHJnYl9tZXJnZWRfdXBzYW1wbGVfc3NlMjsKKyAgICAgIGJyZWFrOworICAgIGRlZmF1bHQ6CisgICAgICBzc2UyZmN0PWpzaW1kX2gydjFfbWVyZ2VkX3Vwc2FtcGxlX3NzZTI7CisgICAgICBicmVhazsKKyAgfQorCisgIHNzZTJmY3QoY2luZm8tPm91dHB1dF93aWR0aCwgaW5wdXRfYnVmLCBpbl9yb3dfZ3JvdXBfY3RyLCBvdXRwdXRfYnVmKTsKK30KKworR0xPQkFMKGludCkKK2pzaW1kX2Nhbl9jb252c2FtcCAodm9pZCkKK3sKKyAgLyogVGhlIGNvZGUgaXMgb3B0aW1pc2VkIGZvciB0aGVzZSB2YWx1ZXMgb25seSAqLworICBpZiAoRENUU0laRSAhPSA4KQorICAgIHJldHVybiAwOworICBpZiAoQklUU19JTl9KU0FNUExFICE9IDgpCisgICAgcmV0dXJuIDA7CisgIGlmIChzaXplb2YoSkRJTUVOU0lPTikgIT0gNCkKKyAgICByZXR1cm4gMDsKKyAgaWYgKHNpemVvZihEQ1RFTEVNKSAhPSAyKQorICAgIHJldHVybiAwOworCisgIHJldHVybiAxOworfQorCitHTE9CQUwoaW50KQoranNpbWRfY2FuX2NvbnZzYW1wX2Zsb2F0ICh2b2lkKQoreworICAvKiBUaGUgY29kZSBpcyBvcHRpbWlzZWQgZm9yIHRoZXNlIHZhbHVlcyBvbmx5ICovCisgIGlmIChEQ1RTSVpFICE9IDgpCisgICAgcmV0dXJuIDA7CisgIGlmIChCSVRTX0lOX0pTQU1QTEUgIT0gOCkKKyAgICByZXR1cm4gMDsKKyAgaWYgKHNpemVvZihKRElNRU5TSU9OKSAhPSA0KQorICAgIHJldHVybiAwOworICBpZiAoc2l6ZW9mKEZBU1RfRkxPQVQpICE9IDQpCisgICAgcmV0dXJuIDA7CisKKyAgcmV0dXJuIDE7Cit9CisKK0dMT0JBTCh2b2lkKQoranNpbWRfY29udnNhbXAgKEpTQU1QQVJSQVkgc2FtcGxlX2RhdGEsIEpESU1FTlNJT04gc3RhcnRfY29sLAorICAgICAgICAgICAgICAgIERDVEVMRU0gKiB3b3Jrc3BhY2UpCit7CisgIGpzaW1kX2NvbnZzYW1wX3NzZTIoc2FtcGxlX2RhdGEsIHN0YXJ0X2NvbCwgd29ya3NwYWNlKTsKK30KKworR0xPQkFMKHZvaWQpCitqc2ltZF9jb252c2FtcF9mbG9hdCAoSlNBTVBBUlJBWSBzYW1wbGVfZGF0YSwgSkRJTUVOU0lPTiBzdGFydF9jb2wsCisgICAgICAgICAgICAgICAgICAgICAgRkFTVF9GTE9BVCAqIHdvcmtzcGFjZSkKK3sKKyAganNpbWRfY29udnNhbXBfZmxvYXRfc3NlMihzYW1wbGVfZGF0YSwgc3RhcnRfY29sLCB3b3Jrc3BhY2UpOworfQorCitHTE9CQUwoaW50KQoranNpbWRfY2FuX2ZkY3RfaXNsb3cgKHZvaWQpCit7CisgIC8qIFRoZSBjb2RlIGlzIG9wdGltaXNlZCBmb3IgdGhlc2UgdmFsdWVzIG9ubHkgKi8KKyAgaWYgKERDVFNJWkUgIT0gOCkKKyAgICByZXR1cm4gMDsKKyAgaWYgKHNpemVvZihEQ1RFTEVNKSAhPSAyKQorICAgIHJldHVybiAwOworCisgIGlmICghSVNfQUxJR05FRF9TU0UoamNvbnN0X2ZkY3RfaXNsb3dfc3NlMikpCisgICAgcmV0dXJuIDA7CisKKyAgcmV0dXJuIDE7Cit9CisKK0dMT0JBTChpbnQpCitqc2ltZF9jYW5fZmRjdF9pZmFzdCAodm9pZCkKK3sKKyAgLyogVGhlIGNvZGUgaXMgb3B0aW1pc2VkIGZvciB0aGVzZSB2YWx1ZXMgb25seSAqLworICBpZiAoRENUU0laRSAhPSA4KQorICAgIHJldHVybiAwOworICBpZiAoc2l6ZW9mKERDVEVMRU0pICE9IDIpCisgICAgcmV0dXJuIDA7CisKKyAgaWYgKCFJU19BTElHTkVEX1NTRShqY29uc3RfZmRjdF9pZmFzdF9zc2UyKSkKKyAgICByZXR1cm4gMDsKKworICByZXR1cm4gMTsKK30KKworR0xPQkFMKGludCkKK2pzaW1kX2Nhbl9mZGN0X2Zsb2F0ICh2b2lkKQoreworICAvKiBUaGUgY29kZSBpcyBvcHRpbWlzZWQgZm9yIHRoZXNlIHZhbHVlcyBvbmx5ICovCisgIGlmIChEQ1RTSVpFICE9IDgpCisgICAgcmV0dXJuIDA7CisgIGlmIChzaXplb2YoRkFTVF9GTE9BVCkgIT0gNCkKKyAgICByZXR1cm4gMDsKKworICBpZiAoIUlTX0FMSUdORURfU1NFKGpjb25zdF9mZGN0X2Zsb2F0X3NzZSkpCisgICAgcmV0dXJuIDA7CisKKyAgcmV0dXJuIDE7Cit9CisKK0dMT0JBTCh2b2lkKQoranNpbWRfZmRjdF9pc2xvdyAoRENURUxFTSAqIGRhdGEpCit7CisgIGpzaW1kX2ZkY3RfaXNsb3dfc3NlMihkYXRhKTsKK30KKworR0xPQkFMKHZvaWQpCitqc2ltZF9mZGN0X2lmYXN0IChEQ1RFTEVNICogZGF0YSkKK3sKKyAganNpbWRfZmRjdF9pZmFzdF9zc2UyKGRhdGEpOworfQorCitHTE9CQUwodm9pZCkKK2pzaW1kX2ZkY3RfZmxvYXQgKEZBU1RfRkxPQVQgKiBkYXRhKQoreworICBqc2ltZF9mZGN0X2Zsb2F0X3NzZShkYXRhKTsKK30KKworR0xPQkFMKGludCkKK2pzaW1kX2Nhbl9xdWFudGl6ZSAodm9pZCkKK3sKKyAgLyogVGhlIGNvZGUgaXMgb3B0aW1pc2VkIGZvciB0aGVzZSB2YWx1ZXMgb25seSAqLworICBpZiAoRENUU0laRSAhPSA4KQorICAgIHJldHVybiAwOworICBpZiAoc2l6ZW9mKEpDT0VGKSAhPSAyKQorICAgIHJldHVybiAwOworICBpZiAoc2l6ZW9mKERDVEVMRU0pICE9IDIpCisgICAgcmV0dXJuIDA7CisKKyAgcmV0dXJuIDE7Cit9CisKK0dMT0JBTChpbnQpCitqc2ltZF9jYW5fcXVhbnRpemVfZmxvYXQgKHZvaWQpCit7CisgIC8qIFRoZSBjb2RlIGlzIG9wdGltaXNlZCBmb3IgdGhlc2UgdmFsdWVzIG9ubHkgKi8KKyAgaWYgKERDVFNJWkUgIT0gOCkKKyAgICByZXR1cm4gMDsKKyAgaWYgKHNpemVvZihKQ09FRikgIT0gMikKKyAgICByZXR1cm4gMDsKKyAgaWYgKHNpemVvZihGQVNUX0ZMT0FUKSAhPSA0KQorICAgIHJldHVybiAwOworCisgIHJldHVybiAxOworfQorCitHTE9CQUwodm9pZCkKK2pzaW1kX3F1YW50aXplIChKQ09FRlBUUiBjb2VmX2Jsb2NrLCBEQ1RFTEVNICogZGl2aXNvcnMsCisgICAgICAgICAgICAgICAgRENURUxFTSAqIHdvcmtzcGFjZSkKK3sKKyAganNpbWRfcXVhbnRpemVfc3NlMihjb2VmX2Jsb2NrLCBkaXZpc29ycywgd29ya3NwYWNlKTsKK30KKworR0xPQkFMKHZvaWQpCitqc2ltZF9xdWFudGl6ZV9mbG9hdCAoSkNPRUZQVFIgY29lZl9ibG9jaywgRkFTVF9GTE9BVCAqIGRpdmlzb3JzLAorICAgICAgICAgICAgICAgICAgICAgIEZBU1RfRkxPQVQgKiB3b3Jrc3BhY2UpCit7CisgIGpzaW1kX3F1YW50aXplX2Zsb2F0X3NzZTIoY29lZl9ibG9jaywgZGl2aXNvcnMsIHdvcmtzcGFjZSk7Cit9CisKK0dMT0JBTChpbnQpCitqc2ltZF9jYW5faWRjdF8yeDIgKHZvaWQpCit7CisgIC8qIFRoZSBjb2RlIGlzIG9wdGltaXNlZCBmb3IgdGhlc2UgdmFsdWVzIG9ubHkgKi8KKyAgaWYgKERDVFNJWkUgIT0gOCkKKyAgICByZXR1cm4gMDsKKyAgaWYgKHNpemVvZihKQ09FRikgIT0gMikKKyAgICByZXR1cm4gMDsKKyAgaWYgKEJJVFNfSU5fSlNBTVBMRSAhPSA4KQorICAgIHJldHVybiAwOworICBpZiAoc2l6ZW9mKEpESU1FTlNJT04pICE9IDQpCisgICAgcmV0dXJuIDA7CisgIGlmIChzaXplb2YoSVNMT1dfTVVMVF9UWVBFKSAhPSAyKQorICAgIHJldHVybiAwOworCisgIGlmICghSVNfQUxJR05FRF9TU0UoamNvbnN0X2lkY3RfcmVkX3NzZTIpKQorICAgIHJldHVybiAwOworCisgIHJldHVybiAxOworfQorCitHTE9CQUwoaW50KQoranNpbWRfY2FuX2lkY3RfNHg0ICh2b2lkKQoreworICAvKiBUaGUgY29kZSBpcyBvcHRpbWlzZWQgZm9yIHRoZXNlIHZhbHVlcyBvbmx5ICovCisgIGlmIChEQ1RTSVpFICE9IDgpCisgICAgcmV0dXJuIDA7CisgIGlmIChzaXplb2YoSkNPRUYpICE9IDIpCisgICAgcmV0dXJuIDA7CisgIGlmIChCSVRTX0lOX0pTQU1QTEUgIT0gOCkKKyAgICByZXR1cm4gMDsKKyAgaWYgKHNpemVvZihKRElNRU5TSU9OKSAhPSA0KQorICAgIHJldHVybiAwOworICBpZiAoc2l6ZW9mKElTTE9XX01VTFRfVFlQRSkgIT0gMikKKyAgICByZXR1cm4gMDsKKworICBpZiAoIUlTX0FMSUdORURfU1NFKGpjb25zdF9pZGN0X3JlZF9zc2UyKSkKKyAgICByZXR1cm4gMDsKKworICByZXR1cm4gMTsKK30KKworR0xPQkFMKHZvaWQpCitqc2ltZF9pZGN0XzJ4MiAoal9kZWNvbXByZXNzX3B0ciBjaW5mbywganBlZ19jb21wb25lbnRfaW5mbyAqIGNvbXBwdHIsCisgICAgICAgICAgICAgICAgSkNPRUZQVFIgY29lZl9ibG9jaywgSlNBTVBBUlJBWSBvdXRwdXRfYnVmLAorICAgICAgICAgICAgICAgIEpESU1FTlNJT04gb3V0cHV0X2NvbCkKK3sKKyAganNpbWRfaWRjdF8yeDJfc3NlMihjb21wcHRyLT5kY3RfdGFibGUsIGNvZWZfYmxvY2ssIG91dHB1dF9idWYsIG91dHB1dF9jb2wpOworfQorCitHTE9CQUwodm9pZCkKK2pzaW1kX2lkY3RfNHg0IChqX2RlY29tcHJlc3NfcHRyIGNpbmZvLCBqcGVnX2NvbXBvbmVudF9pbmZvICogY29tcHB0ciwKKyAgICAgICAgICAgICAgICBKQ09FRlBUUiBjb2VmX2Jsb2NrLCBKU0FNUEFSUkFZIG91dHB1dF9idWYsCisgICAgICAgICAgICAgICAgSkRJTUVOU0lPTiBvdXRwdXRfY29sKQoreworICBqc2ltZF9pZGN0XzR4NF9zc2UyKGNvbXBwdHItPmRjdF90YWJsZSwgY29lZl9ibG9jaywgb3V0cHV0X2J1Ziwgb3V0cHV0X2NvbCk7Cit9CisKK0dMT0JBTChpbnQpCitqc2ltZF9jYW5faWRjdF9pc2xvdyAodm9pZCkKK3sKKyAgLyogVGhlIGNvZGUgaXMgb3B0aW1pc2VkIGZvciB0aGVzZSB2YWx1ZXMgb25seSAqLworICBpZiAoRENUU0laRSAhPSA4KQorICAgIHJldHVybiAwOworICBpZiAoc2l6ZW9mKEpDT0VGKSAhPSAyKQorICAgIHJldHVybiAwOworICBpZiAoQklUU19JTl9KU0FNUExFICE9IDgpCisgICAgcmV0dXJuIDA7CisgIGlmIChzaXplb2YoSkRJTUVOU0lPTikgIT0gNCkKKyAgICByZXR1cm4gMDsKKyAgaWYgKHNpemVvZihJU0xPV19NVUxUX1RZUEUpICE9IDIpCisgICAgcmV0dXJuIDA7CisKKyAgaWYgKCFJU19BTElHTkVEX1NTRShqY29uc3RfaWRjdF9pc2xvd19zc2UyKSkKKyAgICByZXR1cm4gMDsKKworICByZXR1cm4gMTsKK30KKworR0xPQkFMKGludCkKK2pzaW1kX2Nhbl9pZGN0X2lmYXN0ICh2b2lkKQoreworICAvKiBUaGUgY29kZSBpcyBvcHRpbWlzZWQgZm9yIHRoZXNlIHZhbHVlcyBvbmx5ICovCisgIGlmIChEQ1RTSVpFICE9IDgpCisgICAgcmV0dXJuIDA7CisgIGlmIChzaXplb2YoSkNPRUYpICE9IDIpCisgICAgcmV0dXJuIDA7CisgIGlmIChCSVRTX0lOX0pTQU1QTEUgIT0gOCkKKyAgICByZXR1cm4gMDsKKyAgaWYgKHNpemVvZihKRElNRU5TSU9OKSAhPSA0KQorICAgIHJldHVybiAwOworICBpZiAoc2l6ZW9mKElGQVNUX01VTFRfVFlQRSkgIT0gMikKKyAgICByZXR1cm4gMDsKKyAgaWYgKElGQVNUX1NDQUxFX0JJVFMgIT0gMikKKyAgICByZXR1cm4gMDsKKworICBpZiAoIUlTX0FMSUdORURfU1NFKGpjb25zdF9pZGN0X2lmYXN0X3NzZTIpKQorICAgIHJldHVybiAwOworCisgIHJldHVybiAxOworfQorCitHTE9CQUwoaW50KQoranNpbWRfY2FuX2lkY3RfZmxvYXQgKHZvaWQpCit7CisgIGlmIChEQ1RTSVpFICE9IDgpCisgICAgcmV0dXJuIDA7CisgIGlmIChzaXplb2YoSkNPRUYpICE9IDIpCisgICAgcmV0dXJuIDA7CisgIGlmIChCSVRTX0lOX0pTQU1QTEUgIT0gOCkKKyAgICByZXR1cm4gMDsKKyAgaWYgKHNpemVvZihKRElNRU5TSU9OKSAhPSA0KQorICAgIHJldHVybiAwOworICBpZiAoc2l6ZW9mKEZBU1RfRkxPQVQpICE9IDQpCisgICAgcmV0dXJuIDA7CisgIGlmIChzaXplb2YoRkxPQVRfTVVMVF9UWVBFKSAhPSA0KQorICAgIHJldHVybiAwOworCisgIGlmICghSVNfQUxJR05FRF9TU0UoamNvbnN0X2lkY3RfZmxvYXRfc3NlMikpCisgICAgcmV0dXJuIDA7CisKKyAgcmV0dXJuIDE7Cit9CisKK0dMT0JBTCh2b2lkKQoranNpbWRfaWRjdF9pc2xvdyAoal9kZWNvbXByZXNzX3B0ciBjaW5mbywganBlZ19jb21wb25lbnRfaW5mbyAqIGNvbXBwdHIsCisgICAgICAgICAgICAgICAgSkNPRUZQVFIgY29lZl9ibG9jaywgSlNBTVBBUlJBWSBvdXRwdXRfYnVmLAorICAgICAgICAgICAgICAgIEpESU1FTlNJT04gb3V0cHV0X2NvbCkKK3sKKyAganNpbWRfaWRjdF9pc2xvd19zc2UyKGNvbXBwdHItPmRjdF90YWJsZSwgY29lZl9ibG9jaywgb3V0cHV0X2J1Ziwgb3V0cHV0X2NvbCk7Cit9CisKK0dMT0JBTCh2b2lkKQoranNpbWRfaWRjdF9pZmFzdCAoal9kZWNvbXByZXNzX3B0ciBjaW5mbywganBlZ19jb21wb25lbnRfaW5mbyAqIGNvbXBwdHIsCisgICAgICAgICAgICAgICAgSkNPRUZQVFIgY29lZl9ibG9jaywgSlNBTVBBUlJBWSBvdXRwdXRfYnVmLAorICAgICAgICAgICAgICAgIEpESU1FTlNJT04gb3V0cHV0X2NvbCkKK3sKKyAganNpbWRfaWRjdF9pZmFzdF9zc2UyKGNvbXBwdHItPmRjdF90YWJsZSwgY29lZl9ibG9jaywgb3V0cHV0X2J1Ziwgb3V0cHV0X2NvbCk7Cit9CisKK0dMT0JBTCh2b2lkKQoranNpbWRfaWRjdF9mbG9hdCAoal9kZWNvbXByZXNzX3B0ciBjaW5mbywganBlZ19jb21wb25lbnRfaW5mbyAqIGNvbXBwdHIsCisgICAgICAgICAgICAgICAgSkNPRUZQVFIgY29lZl9ibG9jaywgSlNBTVBBUlJBWSBvdXRwdXRfYnVmLAorICAgICAgICAgICAgICAgIEpESU1FTlNJT04gb3V0cHV0X2NvbCkKK3sKKyAganNpbWRfaWRjdF9mbG9hdF9zc2UyKGNvbXBwdHItPmRjdF90YWJsZSwgY29lZl9ibG9jaywKKyAgICAgICAgICAgICAgICAgICAgICAgIG91dHB1dF9idWYsIG91dHB1dF9jb2wpOworfQorCmRpZmYgLS1naXQgYS9zaW1kL2pzaW1kY2ZnLmluYy5oIGIvc2ltZC9qc2ltZGNmZy5pbmMuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40ODc2MDM4Ci0tLSAvZGV2L251bGwKKysrIGIvc2ltZC9qc2ltZGNmZy5pbmMuaApAQCAtMCwwICsxLDE2OCBAQAorLy8gVGhpcyBmaWxlIGdlbmVyYXRlcyB0aGUgaW5jbHVkZSBmaWxlIGZvciB0aGUgYXNzZW1ibHkKKy8vIGltcGxlbWVudGF0aW9ucyBieSBhYnVzaW5nIHRoZSBDIHByZXByb2Nlc3Nvci4KKy8vCisvLyBOb3RlOiBTb21lIHRoaW5ncyBhcmUgbWFudWFsbHkgZGVmaW5lZCBhcyB0aGV5IG5lZWQgdG8KKy8vIGJlIG1hcHBlZCB0byBOQVNNIHR5cGVzLgorCis7Cis7IEF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGluY2x1ZGUgZmlsZSBmcm9tIGpzaW1kY2ZnLmluYy5oCis7CisKKyNkZWZpbmUgSlBFR19JTlRFUk5BTFMKKworI2luY2x1ZGUgIi4uL2pwZWdsaWIuaCIKKyNpbmNsdWRlICIuLi9qY29uZmlnLmgiCisjaW5jbHVkZSAiLi4vam1vcmVjZmcuaCIKKyNpbmNsdWRlICJqc2ltZC5oIgorCisjZGVmaW5lIGRlZmluZSh2YXIpICVkZWZpbmUgX2NwcF9wcm90ZWN0aW9uXyMjdmFyCisjZGVmaW5lIGRlZmluZXYodmFyKSAlZGVmaW5lIF9jcHBfcHJvdGVjdGlvbl8jI3ZhciB2YXIKKworOworOyAtLSBqcGVnbGliLmgKKzsKKworZGVmaW5ldihEQ1RTSVpFKQorZGVmaW5ldihEQ1RTSVpFMikKKworOworOyAtLSBqbW9yZWNmZy5oCis7CisKK2RlZmluZXYoUkdCX1JFRCkKK2RlZmluZXYoUkdCX0dSRUVOKQorZGVmaW5ldihSR0JfQkxVRSkKKworZGVmaW5ldihSR0JfUElYRUxTSVpFKQorCis7IFJlcHJlc2VudGF0aW9uIG9mIGEgc2luZ2xlIHNhbXBsZSAocGl4ZWwgZWxlbWVudCB2YWx1ZSkuCis7IE9uIHRoaXMgU0lNRCBpbXBsZW1lbnRhdGlvbiwgdGhpcyBtdXN0IGJlICd1bnNpZ25lZCBjaGFyJy4KKzsKKworJWRlZmluZSBKU0FNUExFICAgICAgICAgICAgICAgICBieXRlICAgICAgICAgIDsgdW5zaWduZWQgY2hhcgorJWRlZmluZSBTSVpFT0ZfSlNBTVBMRSAgICAgICAgICBTSVpFT0ZfQllURSAgIDsgc2l6ZW9mKEpTQU1QTEUpCisKK2RlZmluZXYoQ0VOVEVSSlNBTVBMRSkKKworOyBSZXByZXNlbnRhdGlvbiBvZiBhIERDVCBmcmVxdWVuY3kgY29lZmZpY2llbnQuCis7IE9uIHRoaXMgU0lNRCBpbXBsZW1lbnRhdGlvbiwgdGhpcyBtdXN0IGJlICdzaG9ydCcuCis7CislZGVmaW5lIEpDT0VGICAgICAgICAgICAgICAgICAgIHdvcmQgICAgICAgICAgOyBzaG9ydAorJWRlZmluZSBTSVpFT0ZfSkNPRUYgICAgICAgICAgICBTSVpFT0ZfV09SRCAgIDsgc2l6ZW9mKEpDT0VGKQorCis7IERhdGF0eXBlIHVzZWQgZm9yIGltYWdlIGRpbWVuc2lvbnMuCis7IE9uIHRoaXMgU0lNRCBpbXBsZW1lbnRhdGlvbiwgdGhpcyBtdXN0IGJlICd1bnNpZ25lZCBpbnQnLgorOworJWRlZmluZSBKRElNRU5TSU9OICAgICAgICAgICAgICBkd29yZCAgICAgICAgIDsgdW5zaWduZWQgaW50CislZGVmaW5lIFNJWkVPRl9KRElNRU5TSU9OICAgICAgIFNJWkVPRl9EV09SRCAgOyBzaXplb2YoSkRJTUVOU0lPTikKKworJWRlZmluZSBKU0FNUFJPVyAgICAgICAgICAgICAgICBQT0lOVEVSICAgICAgIDsgSlNBTVBMRSBGQVIgKiAoanBlZ2xpYi5oKQorJWRlZmluZSBKU0FNUEFSUkFZICAgICAgICAgICAgICBQT0lOVEVSICAgICAgIDsgSlNBTVBST1cgKiAgICAoanBlZ2xpYi5oKQorJWRlZmluZSBKU0FNUElNQUdFICAgICAgICAgICAgICBQT0lOVEVSICAgICAgIDsgSlNBTVBBUlJBWSAqICAoanBlZ2xpYi5oKQorJWRlZmluZSBKQ09FRlBUUiAgICAgICAgICAgICAgICBQT0lOVEVSICAgICAgIDsgSkNPRUYgRkFSICogICAoanBlZ2xpYi5oKQorJWRlZmluZSBTSVpFT0ZfSlNBTVBST1cgICAgICAgICBTSVpFT0ZfUE9JTlRFUiAgOyBzaXplb2YoSlNBTVBST1cpCislZGVmaW5lIFNJWkVPRl9KU0FNUEFSUkFZICAgICAgIFNJWkVPRl9QT0lOVEVSICA7IHNpemVvZihKU0FNUEFSUkFZKQorJWRlZmluZSBTSVpFT0ZfSlNBTVBJTUFHRSAgICAgICBTSVpFT0ZfUE9JTlRFUiAgOyBzaXplb2YoSlNBTVBJTUFHRSkKKyVkZWZpbmUgU0laRU9GX0pDT0VGUFRSICAgICAgICAgU0laRU9GX1BPSU5URVIgIDsgc2l6ZW9mKEpDT0VGUFRSKQorCis7Cis7IC0tIGpkY3QuaAorOworCis7IEEgZm9yd2FyZCBEQ1Qgcm91dGluZSBpcyBnaXZlbiBhIHBvaW50ZXIgdG8gYSB3b3JrIGFyZWEgb2YgdHlwZSBEQ1RFTEVNW107Cis7IHRoZSBEQ1QgaXMgdG8gYmUgcGVyZm9ybWVkIGluLXBsYWNlIGluIHRoYXQgYnVmZmVyLgorOyBUbyBtYXhpbWl6ZSBwYXJhbGxlbGlzbSwgVHlwZSBEQ1RFTEVNIGlzIGNoYW5nZWQgdG8gc2hvcnQgKG9yaWdpbmFsbHksIGludCkuCis7CislZGVmaW5lIERDVEVMRU0gICAgICAgICAgICAgICAgIHdvcmQgICAgICAgICAgOyBzaG9ydAorJWRlZmluZSBTSVpFT0ZfRENURUxFTSAgICAgICAgICBTSVpFT0ZfV09SRCAgIDsgc2l6ZW9mKERDVEVMRU0pCisKKyVkZWZpbmUgRkFTVF9GTE9BVCAgICAgICAgICAgICAgRlAzMiAgICAgICAgICAgIDsgZmxvYXQKKyVkZWZpbmUgU0laRU9GX0ZBU1RfRkxPQVQgICAgICAgU0laRU9GX0ZQMzIgICAgIDsgc2l6ZW9mKEZBU1RfRkxPQVQpCisKKzsgVG8gbWF4aW1pemUgcGFyYWxsZWxpc20sIFR5cGUgTVVMVElQTElFUiBpcyBjaGFuZ2VkIHRvIHNob3J0LgorOworJWRlZmluZSBJU0xPV19NVUxUX1RZUEUgICAgICAgICB3b3JkICAgICAgICAgIDsgbXVzdCBiZSBzaG9ydAorJWRlZmluZSBTSVpFT0ZfSVNMT1dfTVVMVF9UWVBFICBTSVpFT0ZfV09SRCAgIDsgc2l6ZW9mKElTTE9XX01VTFRfVFlQRSkKKworJWRlZmluZSBJRkFTVF9NVUxUX1RZUEUgICAgICAgICB3b3JkICAgICAgICAgIDsgbXVzdCBiZSBzaG9ydAorJWRlZmluZSBTSVpFT0ZfSUZBU1RfTVVMVF9UWVBFICBTSVpFT0ZfV09SRCAgIDsgc2l6ZW9mKElGQVNUX01VTFRfVFlQRSkKKyVkZWZpbmUgSUZBU1RfU0NBTEVfQklUUyAgICAgICAgMiAgICAgICAgICAgICA7IGZyYWN0aW9uYWwgYml0cyBpbiBzY2FsZSBmYWN0b3JzCisKKyVkZWZpbmUgRkxPQVRfTVVMVF9UWVBFICAgICAgICAgRlAzMiAgICAgICAgICA7IG11c3QgYmUgZmxvYXQKKyVkZWZpbmUgU0laRU9GX0ZMT0FUX01VTFRfVFlQRSAgU0laRU9GX0ZQMzIgICA7IHNpemVvZihGTE9BVF9NVUxUX1RZUEUpCisKKzsKKzsgLS0ganNpbWQuaAorOworCitkZWZpbmV2KEpTSU1EX05PTkUpCitkZWZpbmV2KEpTSU1EX01NWCkKK2RlZmluZXYoSlNJTURfM0ROT1cpCitkZWZpbmV2KEpTSU1EX1NTRSkKK2RlZmluZXYoSlNJTURfU1NFMikKKworOyBTaG9ydCBmb3JtcyBvZiBleHRlcm5hbCBuYW1lcyBmb3Igc3lzdGVtcyB3aXRoIGJyYWluLWRhbWFnZWQgbGlua2Vycy4KKzsKKyNpZmRlZiBORUVEX1NIT1JUX0VYVEVSTkFMX05BTUVTCitkZWZpbmV2KGpwZWdfc2ltZF9jcHVfc3VwcG9ydCkKK2RlZmluZXYoanNpbWRfcmdiX3ljY19jb252ZXJ0X21teCkKK2RlZmluZXYoanNpbWRfeWNjX3JnYl9jb252ZXJ0X21teCkKK2RlZmluZXYoamNvbnN0X3JnYl95Y2NfY29udmVydF9zc2UyKQorZGVmaW5ldihqc2ltZF9yZ2JfeWNjX2NvbnZlcnRfc3NlMikKK2RlZmluZXYoamNvbnN0X3ljY19yZ2JfY29udmVydF9zc2UyKQorZGVmaW5ldihqc2ltZF95Y2NfcmdiX2NvbnZlcnRfc3NlMikKK2RlZmluZXYoanNpbWRfaDJ2Ml9kb3duc2FtcGxlX21teCkKK2RlZmluZXYoanNpbWRfaDJ2MV9kb3duc2FtcGxlX21teCkKK2RlZmluZXYoanNpbWRfaDJ2Ml9kb3duc2FtcGxlX3NzZTIpCitkZWZpbmV2KGpzaW1kX2gydjFfZG93bnNhbXBsZV9zc2UyKQorZGVmaW5ldihqc2ltZF9oMnYyX3Vwc2FtcGxlX21teCkKK2RlZmluZXYoanNpbWRfaDJ2MV91cHNhbXBsZV9tbXgpCitkZWZpbmV2KGpzaW1kX2gydjFfZmFuY3lfdXBzYW1wbGVfbW14KQorZGVmaW5ldihqc2ltZF9oMnYyX2ZhbmN5X3Vwc2FtcGxlX21teCkKK2RlZmluZXYoanNpbWRfaDJ2MV9tZXJnZWRfdXBzYW1wbGVfbW14KQorZGVmaW5ldihqc2ltZF9oMnYyX21lcmdlZF91cHNhbXBsZV9tbXgpCitkZWZpbmV2KGpzaW1kX2gydjJfdXBzYW1wbGVfc3NlMikKK2RlZmluZXYoanNpbWRfaDJ2MV91cHNhbXBsZV9zc2UyKQorZGVmaW5ldihqY29uc3RfZmFuY3lfdXBzYW1wbGVfc3NlMikKK2RlZmluZXYoanNpbWRfaDJ2MV9mYW5jeV91cHNhbXBsZV9zc2UyKQorZGVmaW5ldihqc2ltZF9oMnYyX2ZhbmN5X3Vwc2FtcGxlX3NzZTIpCitkZWZpbmV2KGpjb25zdF9tZXJnZWRfdXBzYW1wbGVfc3NlMikKK2RlZmluZXYoanNpbWRfaDJ2MV9tZXJnZWRfdXBzYW1wbGVfc3NlMikKK2RlZmluZXYoanNpbWRfaDJ2Ml9tZXJnZWRfdXBzYW1wbGVfc3NlMikKK2RlZmluZXYoanNpbWRfY29udnNhbXBfbW14KQorZGVmaW5ldihqc2ltZF9jb252c2FtcF9zc2UyKQorZGVmaW5ldihqc2ltZF9jb252c2FtcF9mbG9hdF8zZG5vdykKK2RlZmluZXYoanNpbWRfY29udnNhbXBfZmxvYXRfc3NlKQorZGVmaW5ldihqc2ltZF9jb252c2FtcF9mbG9hdF9zc2UyKQorZGVmaW5ldihqc2ltZF9mZGN0X2lzbG93X21teCkKK2RlZmluZXYoanNpbWRfZmRjdF9pZmFzdF9tbXgpCitkZWZpbmV2KGpjb25zdF9mZGN0X2lzbG93X3NzZTIpCitkZWZpbmV2KGpzaW1kX2ZkY3RfaXNsb3dfc3NlMikKK2RlZmluZXYoamNvbnN0X2ZkY3RfaWZhc3Rfc3NlMikKK2RlZmluZXYoanNpbWRfZmRjdF9pZmFzdF9zc2UyKQorZGVmaW5ldihqc2ltZF9mZGN0X2Zsb2F0XzNkbm93KQorZGVmaW5ldihqY29uc3RfZmRjdF9mbG9hdF9zc2UpCitkZWZpbmV2KGpzaW1kX2ZkY3RfZmxvYXRfc3NlKQorZGVmaW5ldihqc2ltZF9xdWFudGl6ZV9tbXgpCitkZWZpbmV2KGpzaW1kX3F1YW50aXplX3NzZTIpCitkZWZpbmV2KGpzaW1kX3F1YW50aXplX2Zsb2F0XzNkbm93KQorZGVmaW5ldihqc2ltZF9xdWFudGl6ZV9mbG9hdF9zc2UpCitkZWZpbmV2KGpzaW1kX3F1YW50aXplX2Zsb2F0X3NzZTIpCitkZWZpbmV2KGpzaW1kX2lkY3RfMngyX21teCkKK2RlZmluZXYoanNpbWRfaWRjdF80eDRfbW14KQorZGVmaW5ldihqY29uc3RfaWRjdF9yZWRfc3NlMikKK2RlZmluZXYoanNpbWRfaWRjdF8yeDJfc3NlMikKK2RlZmluZXYoanNpbWRfaWRjdF80eDRfc3NlMikKK2RlZmluZXYoanNpbWRfaWRjdF9pc2xvd19tbXgpCitkZWZpbmV2KGpzaW1kX2lkY3RfaWZhc3RfbW14KQorZGVmaW5ldihqY29uc3RfaWRjdF9pc2xvd19zc2UyKQorZGVmaW5ldihqc2ltZF9pZGN0X2lzbG93X3NzZTIpCitkZWZpbmV2KGpjb25zdF9pZGN0X2lmYXN0X3NzZTIpCitkZWZpbmV2KGpzaW1kX2lkY3RfaWZhc3Rfc3NlMikKK2RlZmluZXYoanNpbWRfaWRjdF9mbG9hdF8zZG5vdykKK2RlZmluZXYoamNvbnN0X2lkY3RfZmxvYXRfc3NlKQorZGVmaW5ldihqc2ltZF9pZGN0X2Zsb2F0X3NzZSkKK2RlZmluZXYoamNvbnN0X2lkY3RfZmxvYXRfc3NlMikKK2RlZmluZXYoanNpbWRfaWRjdF9mbG9hdF9zc2UyKQorI2VuZGlmIC8qIE5FRURfU0hPUlRfRVhURVJOQUxfTkFNRVMgKi8KKwpkaWZmIC0tZ2l0IGEvc2ltZC9qc2ltZGNwdS5hc20gYi9zaW1kL2pzaW1kY3B1LmFzbQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iZGJjYzIzCi0tLSAvZGV2L251bGwKKysrIGIvc2ltZC9qc2ltZGNwdS5hc20KQEAgLTAsMCArMSwxMDUgQEAKKzsKKzsganNpbWRjcHUuYXNtIC0gU0lNRCBpbnN0cnVjdGlvbiBzdXBwb3J0IGNoZWNrCis7Cis7IENvcHlyaWdodCAyMDA5IFBpZXJyZSBPc3NtYW4gPG9zc21hbkBjZW5kaW8uc2U+IGZvciBDZW5kaW8gQUIKKzsKKzsgQmFzZWQgb24KKzsgeDg2IFNJTUQgZXh0ZW5zaW9uIGZvciBJSkcgSlBFRyBsaWJyYXJ5Cis7IENvcHlyaWdodCAoQykgMTk5OS0yMDA2LCBNSVlBU0FLQSBNYXNhcnUuCis7IEZvciBjb25kaXRpb25zIG9mIGRpc3RyaWJ1dGlvbiBhbmQgdXNlLCBzZWUgY29weXJpZ2h0IG5vdGljZSBpbiBqc2ltZGV4dC5pbmMKKzsKKzsgVGhpcyBmaWxlIHNob3VsZCBiZSBhc3NlbWJsZWQgd2l0aCBOQVNNIChOZXR3aWRlIEFzc2VtYmxlciksCis7IGNhbiAqbm90KiBiZSBhc3NlbWJsZWQgd2l0aCBNaWNyb3NvZnQncyBNQVNNIG9yIGFueSBjb21wYXRpYmxlCis7IGFzc2VtYmxlciAoaW5jbHVkaW5nIEJvcmxhbmQncyBUdXJibyBBc3NlbWJsZXIpLgorOyBOQVNNIGlzIGF2YWlsYWJsZSBmcm9tIGh0dHA6Ly9uYXNtLnNvdXJjZWZvcmdlLm5ldC8gb3IKKzsgaHR0cDovL3NvdXJjZWZvcmdlLm5ldC9wcm9qZWN0L3Nob3dmaWxlcy5waHA/Z3JvdXBfaWQ9NjIwOAorOworOyBbVEFCOF0KKworJWluY2x1ZGUgImpzaW1kZXh0LmluYyIKKworOyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCVNFQ1RJT04JU0VHX1RFWFQKKwlCSVRTCTMyCis7Cis7IENoZWNrIGlmIHRoZSBDUFUgc3VwcG9ydHMgU0lNRCBpbnN0cnVjdGlvbnMKKzsKKzsgR0xPQkFMKHVuc2lnbmVkIGludCkKKzsganBlZ19zaW1kX2NwdV9zdXBwb3J0ICh2b2lkKQorOworCisJYWxpZ24JMTYKKwlnbG9iYWwJRVhUTihqcGVnX3NpbWRfY3B1X3N1cHBvcnQpCisKK0VYVE4oanBlZ19zaW1kX2NwdV9zdXBwb3J0KToKKwlwdXNoCWVieAorOwlwdXNoCWVjeAkJOyBuZWVkIG5vdCBiZSBwcmVzZXJ2ZWQKKzsJcHVzaAllZHgJCTsgbmVlZCBub3QgYmUgcHJlc2VydmVkCis7CXB1c2gJZXNpCQk7IHVudXNlZAorCXB1c2gJZWRpCisKKwl4b3IJZWRpLGVkaQkJCTsgc2ltZCBzdXBwb3J0IGZsYWcKKworCXB1c2hmZAorCXBvcAllYXgKKwltb3YJZWR4LGVheAorCXhvcgllYXgsIDE8PDIxCQk7IGZsaXAgSUQgYml0IGluIEVGTEFHUworCXB1c2gJZWF4CisJcG9wZmQKKwlwdXNoZmQKKwlwb3AJZWF4CisJeG9yCWVheCxlZHgKKwlqeglzaG9ydCAucmV0dXJuCQk7IENQVUlEIGlzIG5vdCBzdXBwb3J0ZWQKKworCTsgQ2hlY2sgZm9yIE1NWCBpbnN0cnVjdGlvbiBzdXBwb3J0CisJeG9yCWVheCxlYXgKKwljcHVpZAorCXRlc3QJZWF4LGVheAorCWp6CXNob3J0IC5yZXR1cm4KKworCXhvcgllYXgsZWF4CisJaW5jCWVheAorCWNwdWlkCisJbW92CWVheCxlZHgJCQk7IGVheCA9IFN0YW5kYXJkIGZlYXR1cmUgZmxhZ3MKKworCXRlc3QJZWF4LCAxPDwyMwkJOyBiaXQyMzpNTVgKKwlqeglzaG9ydCAubm9fbW14CisJb3IJZWRpLCBieXRlIEpTSU1EX01NWAorLm5vX21teDoKKwl0ZXN0CWVheCwgMTw8MjUJCTsgYml0MjU6U1NFCisJanoJc2hvcnQgLm5vX3NzZQorCW9yCWVkaSwgYnl0ZSBKU0lNRF9TU0UKKy5ub19zc2U6CisJdGVzdAllYXgsIDE8PDI2CQk7IGJpdDI2OlNTRTIKKwlqeglzaG9ydCAubm9fc3NlMgorCW9yCWVkaSwgYnl0ZSBKU0lNRF9TU0UyCisubm9fc3NlMjoKKworCTsgQ2hlY2sgZm9yIDNETm93ISBpbnN0cnVjdGlvbiBzdXBwb3J0CisJbW92CWVheCwgMHg4MDAwMDAwMAorCWNwdWlkCisJY21wCWVheCwgMHg4MDAwMDAwMAorCWpiZQlzaG9ydCAucmV0dXJuCisKKwltb3YJZWF4LCAweDgwMDAwMDAxCisJY3B1aWQKKwltb3YJZWF4LGVkeAkJCTsgZWF4ID0gRXh0ZW5kZWQgZmVhdHVyZSBmbGFncworCisJdGVzdAllYXgsIDE8PDMxCQk7IGJpdDMxOjNETm93ISh2ZW5kb3IgaW5kZXBlbmRlbnQpCisJanoJc2hvcnQgLm5vXzNkbm93CisJb3IJZWRpLCBieXRlIEpTSU1EXzNETk9XCisubm9fM2Rub3c6CisKKy5yZXR1cm46CisJbW92CWVheCxlZGkKKworCXBvcAllZGkKKzsJcG9wCWVzaQkJOyB1bnVzZWQKKzsJcG9wCWVkeAkJOyBuZWVkIG5vdCBiZSBwcmVzZXJ2ZWQKKzsJcG9wCWVjeAkJOyBuZWVkIG5vdCBiZSBwcmVzZXJ2ZWQKKwlwb3AJZWJ4CisJcmV0CisKKzsgRm9yIHNvbWUgcmVhc29uLCB0aGUgT1MgWCBsaW5rZXIgZG9lcyBub3QgaG9ub3IgdGhlIHJlcXVlc3QgdG8gYWxpZ24gdGhlCis7IHNlZ21lbnQgdW5sZXNzIHdlIGRvIHRoaXMuCisJYWxpZ24JMTYKZGlmZiAtLWdpdCBhL3NpbWQvanNpbWRleHQuaW5jIGIvc2ltZC9qc2ltZGV4dC5pbmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzQyOTdmOQotLS0gL2Rldi9udWxsCisrKyBiL3NpbWQvanNpbWRleHQuaW5jCkBAIC0wLDAgKzEsMzcwIEBACis7Cis7IGpzaW1kZXh0LmluYyAtIGNvbW1vbiBkZWNsYXJhdGlvbnMKKzsKKzsgQ29weXJpZ2h0IDIwMDkgUGllcnJlIE9zc21hbiA8b3NzbWFuQGNlbmRpby5zZT4gZm9yIENlbmRpbyBBQgorOyBDb3B5cmlnaHQgMjAxMCBELiBSLiBDb21tYW5kZXIKKzsKKzsgQmFzZWQgb24KKzsgeDg2IFNJTUQgZXh0ZW5zaW9uIGZvciBJSkcgSlBFRyBsaWJyYXJ5IC0gdmVyc2lvbiAxLjAyCis7Cis7IENvcHlyaWdodCAoQykgMTk5OS0yMDA2LCBNSVlBU0FLQSBNYXNhcnUuCis7Cis7IFRoaXMgc29mdHdhcmUgaXMgcHJvdmlkZWQgJ2FzLWlzJywgd2l0aG91dCBhbnkgZXhwcmVzcyBvciBpbXBsaWVkCis7IHdhcnJhbnR5LiAgSW4gbm8gZXZlbnQgd2lsbCB0aGUgYXV0aG9ycyBiZSBoZWxkIGxpYWJsZSBmb3IgYW55IGRhbWFnZXMKKzsgYXJpc2luZyBmcm9tIHRoZSB1c2Ugb2YgdGhpcyBzb2Z0d2FyZS4KKzsKKzsgUGVybWlzc2lvbiBpcyBncmFudGVkIHRvIGFueW9uZSB0byB1c2UgdGhpcyBzb2Z0d2FyZSBmb3IgYW55IHB1cnBvc2UsCis7IGluY2x1ZGluZyBjb21tZXJjaWFsIGFwcGxpY2F0aW9ucywgYW5kIHRvIGFsdGVyIGl0IGFuZCByZWRpc3RyaWJ1dGUgaXQKKzsgZnJlZWx5LCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgcmVzdHJpY3Rpb25zOgorOworOyAxLiBUaGUgb3JpZ2luIG9mIHRoaXMgc29mdHdhcmUgbXVzdCBub3QgYmUgbWlzcmVwcmVzZW50ZWQ7IHlvdSBtdXN0IG5vdAorOyAgICBjbGFpbSB0aGF0IHlvdSB3cm90ZSB0aGUgb3JpZ2luYWwgc29mdHdhcmUuIElmIHlvdSB1c2UgdGhpcyBzb2Z0d2FyZQorOyAgICBpbiBhIHByb2R1Y3QsIGFuIGFja25vd2xlZGdtZW50IGluIHRoZSBwcm9kdWN0IGRvY3VtZW50YXRpb24gd291bGQgYmUKKzsgICAgYXBwcmVjaWF0ZWQgYnV0IGlzIG5vdCByZXF1aXJlZC4KKzsgMi4gQWx0ZXJlZCBzb3VyY2UgdmVyc2lvbnMgbXVzdCBiZSBwbGFpbmx5IG1hcmtlZCBhcyBzdWNoLCBhbmQgbXVzdCBub3QgYmUKKzsgICAgbWlzcmVwcmVzZW50ZWQgYXMgYmVpbmcgdGhlIG9yaWdpbmFsIHNvZnR3YXJlLgorOyAzLiBUaGlzIG5vdGljZSBtYXkgbm90IGJlIHJlbW92ZWQgb3IgYWx0ZXJlZCBmcm9tIGFueSBzb3VyY2UgZGlzdHJpYnV0aW9uLgorOworOyBbVEFCOF0KKworOyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorOyAgU3lzdGVtLWRlcGVuZGVudCBjb25maWd1cmF0aW9ucworCislaWZkZWYgV0lOMzIJOyAtLS0tKG5hc20gLWZ3aW4zMiAtRFdJTjMyIC4uLiktLS0tLS0tLQorOyAqIE1pY3Jvc29mdCBWaXN1YWwgQysrCis7ICogTWluR1cgKE1pbmltYWxpc3QgR05VIGZvciBXaW5kb3dzKQorOyAqIEN5Z1dpbgorOyAqIExDQy1XaW4zMgorCis7IC0tIHNlZ21lbnQgZGVmaW5pdGlvbiAtLQorOworJWRlZmluZSBTRUdfVEVYVCAgICAudGV4dCAgYWxpZ249MTYgcHVibGljIHVzZTMyIGNsYXNzPUNPREUKKyVkZWZpbmUgU0VHX0NPTlNUICAgLnJkYXRhIGFsaWduPTE2IHB1YmxpYyB1c2UzMiBjbGFzcz1DT05TVAorCislZWxpZmRlZiBXSU42NAk7IC0tLS0obmFzbSAtZndpbjY0IC1EV0lONjQgLi4uKS0tLS0tLS0tCis7ICogTWljcm9zb2Z0IFZpc3VhbCBDKysKKworOyAtLSBzZWdtZW50IGRlZmluaXRpb24gLS0KKzsKKyVkZWZpbmUgU0VHX1RFWFQgICAgLnRleHQgIGFsaWduPTE2IHB1YmxpYyB1c2U2NCBjbGFzcz1DT0RFCislZGVmaW5lIFNFR19DT05TVCAgIC5yZGF0YSBhbGlnbj0xNiBwdWJsaWMgdXNlNjQgY2xhc3M9Q09OU1QKKyVkZWZpbmUgRVhUTihuYW1lKSAgbmFtZQkJCTsgZm9vKCkgLT4gZm9vCisKKyVlbGlmZGVmIE9CSjMyCTsgLS0tLShuYXNtIC1mb2JqIC1ET0JKMzIgLi4uKS0tLS0tLS0tLS0KKzsgKiBCb3JsYW5kIEMrKyAoV2luMzIpCisKKzsgLS0gc2VnbWVudCBkZWZpbml0aW9uIC0tCis7CislZGVmaW5lIFNFR19URVhUICAgIC50ZXh0ICBhbGlnbj0xNiBwdWJsaWMgdXNlMzIgY2xhc3M9Q09ERQorJWRlZmluZSBTRUdfQ09OU1QgICAuZGF0YSAgYWxpZ249MTYgcHVibGljIHVzZTMyIGNsYXNzPURBVEEKKworJWVsaWZkZWYgRUxGCTsgLS0tLShuYXNtIC1mZWxmWzY0XSAtREVMRiAuLi4pLS0tLS0tLS0tLS0tCis7ICogTGludXgKKzsgKiAqQlNEIGZhbWlseSBVbml4IHVzaW5nIGVsZiBmb3JtYXQKKzsgKiBVbml4IFN5c3RlbSBWLCBpbmNsdWRpbmcgU29sYXJpcyB4ODYsIFVuaXhXYXJlIGFuZCBTQ08gVW5peAorCis7IG1hcmsgc3RhY2sgYXMgbm9uLWV4ZWN1dGFibGUKK3NlY3Rpb24gLm5vdGUuR05VLXN0YWNrIG5vYWxsb2Mgbm9leGVjIG5vd3JpdGUgcHJvZ2JpdHMKKworOyAtLSBzZWdtZW50IGRlZmluaXRpb24gLS0KKzsKKyVpZmRlZiBfX3g4Nl82NF9fCislZGVmaW5lIFNFR19URVhUICAgIC50ZXh0ICAgcHJvZ2JpdHMgYWxpZ249MTYKKyVkZWZpbmUgU0VHX0NPTlNUICAgLnJvZGF0YSBwcm9nYml0cyBhbGlnbj0xNgorJWVsc2UKKyVkZWZpbmUgU0VHX1RFWFQgICAgLnRleHQgICBwcm9nYml0cyBhbGxvYyBleGVjICAgbm93cml0ZSBhbGlnbj0xNgorJWRlZmluZSBTRUdfQ09OU1QgICAucm9kYXRhIHByb2diaXRzIGFsbG9jIG5vZXhlYyBub3dyaXRlIGFsaWduPTE2CislZW5kaWYKKworOyBUbyBtYWtlIHRoZSBjb2RlIHBvc2l0aW9uLWluZGVwZW5kZW50LCBhcHBlbmQgLURQSUMgdG8gdGhlIGNvbW1hbmRsaW5lCis7CislZGVmaW5lIEdPVF9TWU1CT0wgIF9HTE9CQUxfT0ZGU0VUX1RBQkxFXwk7IEVMRiBzdXBwb3J0cyBQSUMKKyVkZWZpbmUgRVhUTihuYW1lKSAgbmFtZQkJCTsgZm9vKCkgLT4gZm9vCisKKyVlbGlmZGVmIEFPVVQJOyAtLS0tKG5hc20gLWZhb3V0Yi9hb3V0IC1EQU9VVCAuLi4pLS0tLQorOyAqIE9sZGVyIExpbnV4IHVzaW5nIGEub3V0IGZvcm1hdCAgKG5hc20gLWYgYW91dCAtREFPVVQgLi4uKQorOyAqICpCU0QgZmFtaWx5IFVuaXggdXNpbmcgYS5vdXQgZm9ybWF0ICAobmFzbSAtZiBhb3V0YiAtREFPVVQgLi4uKQorCis7IC0tIHNlZ21lbnQgZGVmaW5pdGlvbiAtLQorOworJWRlZmluZSBTRUdfVEVYVCAgICAudGV4dAorJWRlZmluZSBTRUdfQ09OU1QgICAuZGF0YQorCis7IFRvIG1ha2UgdGhlIGNvZGUgcG9zaXRpb24taW5kZXBlbmRlbnQsIGFwcGVuZCAtRFBJQyB0byB0aGUgY29tbWFuZGxpbmUKKzsKKyVkZWZpbmUgR09UX1NZTUJPTCAgX19HTE9CQUxfT0ZGU0VUX1RBQkxFXwk7IEJTRC1zdHlsZSBhLm91dCBzdXBwb3J0cyBQSUMKKworJWVsaWZkZWYgTUFDSE8JOyAtLS0tKG5hc20gLWZtYWNobyAtRE1BQ0hPIC4uLiktLS0tLS0tLQorOyAqIE5lWFRzdGVwL09wZW5TdGVwL1JoYXBzb2R5L0Rhcndpbi9NYWNPUyBYIChNYWNoLU8gZm9ybWF0KQorCis7IC0tIHNlZ21lbnQgZGVmaW5pdGlvbiAtLQorOworJWRlZmluZSBTRUdfVEVYVCAgICAudGV4dCAgO2FsaWduPTE2CTsgbmFzbSBkb2Vzbid0IGFjY2VwdCBhbGlnbj0xNi4gd2h5PworJWRlZmluZSBTRUdfQ09OU1QgICAucm9kYXRhIGFsaWduPTE2CisKKzsgVGhlIGdlbmVyYXRpb24gb2YgcG9zaXRpb24taW5kZXBlbmRlbnQgY29kZSAoUElDKSBpcyB0aGUgZGVmYXVsdCBvbiBEYXJ3aW4uCis7CislZGVmaW5lIFBJQworJWRlZmluZSBHT1RfU1lNQk9MICBfTUFDSE9fUElDXwkJOyBNYWNoLU8gc3R5bGUgY29kZS1yZWxhdGl2ZSBhZGRyZXNzaW5nCisKKyVlbHNlCQk7IC0tLS0oT3RoZXIgY2FzZSktLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKzsgLS0gc2VnbWVudCBkZWZpbml0aW9uIC0tCis7CislZGVmaW5lIFNFR19URVhUICAgIC50ZXh0CislZGVmaW5lIFNFR19DT05TVCAgIC5kYXRhCisKKyVlbmRpZgk7IC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworOyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorCis7IC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCis7ICBDb21tb24gdHlwZXMKKzsKKyVpZmRlZiBfX3g4Nl82NF9fCislZGVmaW5lIFBPSU5URVIgICAgICAgICAgICAgICAgIHF3b3JkICAgICAgICAgICA7IGdlbmVyYWwgcG9pbnRlciB0eXBlCislZGVmaW5lIFNJWkVPRl9QT0lOVEVSICAgICAgICAgIFNJWkVPRl9RV09SRCAgICA7IHNpemVvZihQT0lOVEVSKQorJWRlZmluZSBQT0lOVEVSX0JJVCAgICAgICAgICAgICBRV09SRF9CSVQgICAgICAgOyBzaXplb2YoUE9JTlRFUikqQllURV9CSVQKKyVlbHNlCislZGVmaW5lIFBPSU5URVIgICAgICAgICAgICAgICAgIGR3b3JkICAgICAgICAgICA7IGdlbmVyYWwgcG9pbnRlciB0eXBlCislZGVmaW5lIFNJWkVPRl9QT0lOVEVSICAgICAgICAgIFNJWkVPRl9EV09SRCAgICA7IHNpemVvZihQT0lOVEVSKQorJWRlZmluZSBQT0lOVEVSX0JJVCAgICAgICAgICAgICBEV09SRF9CSVQgICAgICAgOyBzaXplb2YoUE9JTlRFUikqQllURV9CSVQKKyVlbmRpZgorCislZGVmaW5lIElOVCAgICAgICAgICAgICAgICAgICAgIGR3b3JkICAgICAgICAgICA7IHNpZ25lZCBpbnRlZ2VyIHR5cGUKKyVkZWZpbmUgU0laRU9GX0lOVCAgICAgICAgICAgICAgU0laRU9GX0RXT1JEICAgIDsgc2l6ZW9mKElOVCkKKyVkZWZpbmUgSU5UX0JJVCAgICAgICAgICAgICAgICAgRFdPUkRfQklUICAgICAgIDsgc2l6ZW9mKElOVCkqQllURV9CSVQKKworJWRlZmluZSBGUDMyICAgICAgICAgICAgICAgICAgICBkd29yZCAgICAgICAgICAgOyBJRUVFNzU0IHNpbmdsZQorJWRlZmluZSBTSVpFT0ZfRlAzMiAgICAgICAgICAgICBTSVpFT0ZfRFdPUkQgICAgOyBzaXplb2YoRlAzMikKKyVkZWZpbmUgRlAzMl9CSVQgICAgICAgICAgICAgICAgRFdPUkRfQklUICAgICAgIDsgc2l6ZW9mKEZQMzIpKkJZVEVfQklUCisKKyVkZWZpbmUgTU1XT1JEICAgICAgICAgICAgICAgICAgcXdvcmQgICAgICAgICAgIDsgaW50NjQgIChNTVggcmVnaXN0ZXIpCislZGVmaW5lIFNJWkVPRl9NTVdPUkQgICAgICAgICAgIFNJWkVPRl9RV09SRCAgICA7IHNpemVvZihNTVdPUkQpCislZGVmaW5lIE1NV09SRF9CSVQgICAgICAgICAgICAgIFFXT1JEX0JJVCAgICAgICA7IHNpemVvZihNTVdPUkQpKkJZVEVfQklUCisKKzsgTkFTTSBpcyBidWdneSBhbmQgZG9lc24ndCBwcm9wZXJseSBoYW5kbGUgb3BlcmFuZCBzaXplcyBmb3IgU1NFCis7IGluc3RydWN0aW9ucywgc28gZm9yIG5vdyB3ZSBoYXZlIHRvIGRlZmluZSBYTU1XT1JEIGFzIGJsYW5rLgorJWRlZmluZSBYTU1XT1JEICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOyBpbnQxMjggKFNTRSByZWdpc3RlcikKKyVkZWZpbmUgU0laRU9GX1hNTVdPUkQgICAgICAgICAgU0laRU9GX09XT1JEICAgIDsgc2l6ZW9mKFhNTVdPUkQpCislZGVmaW5lIFhNTVdPUkRfQklUICAgICAgICAgICAgIE9XT1JEX0JJVCAgICAgICA7IHNpemVvZihYTU1XT1JEKSpCWVRFX0JJVAorCis7IFNpbWlsYXIgaGFja3MgZm9yIHdoZW4gd2UgbG9hZCBhIGR3b3JkIG9yIE1NV09SRCBpbnRvIGFuIHhtbSMgcmVnaXN0ZXIKKyVkZWZpbmUgWE1NX0RXT1JECislZGVmaW5lIFhNTV9NTVdPUkQKKworJWRlZmluZSBTSVpFT0ZfQllURSAgICAgICAgICAgICAxICAgICAgICAgICAgICAgOyBzaXplb2YoQllURSkKKyVkZWZpbmUgU0laRU9GX1dPUkQgICAgICAgICAgICAgMiAgICAgICAgICAgICAgIDsgc2l6ZW9mKFdPUkQpCislZGVmaW5lIFNJWkVPRl9EV09SRCAgICAgICAgICAgIDQgICAgICAgICAgICAgICA7IHNpemVvZihEV09SRCkKKyVkZWZpbmUgU0laRU9GX1FXT1JEICAgICAgICAgICAgOCAgICAgICAgICAgICAgIDsgc2l6ZW9mKFFXT1JEKQorJWRlZmluZSBTSVpFT0ZfT1dPUkQgICAgICAgICAgICAxNiAgICAgICAgICAgICAgOyBzaXplb2YoT1dPUkQpCisKKyVkZWZpbmUgQllURV9CSVQgICAgICAgICAgICAgICAgOCAgICAgICAgICAgICAgIDsgQ0hBUl9CSVQgaW4gQworJWRlZmluZSBXT1JEX0JJVCAgICAgICAgICAgICAgICAxNiAgICAgICAgICAgICAgOyBzaXplb2YoV09SRCkqQllURV9CSVQKKyVkZWZpbmUgRFdPUkRfQklUICAgICAgICAgICAgICAgMzIgICAgICAgICAgICAgIDsgc2l6ZW9mKERXT1JEKSpCWVRFX0JJVAorJWRlZmluZSBRV09SRF9CSVQgICAgICAgICAgICAgICA2NCAgICAgICAgICAgICAgOyBzaXplb2YoUVdPUkQpKkJZVEVfQklUCislZGVmaW5lIE9XT1JEX0JJVCAgICAgICAgICAgICAgIDEyOCAgICAgICAgICAgICA7IHNpemVvZihPV09SRCkqQllURV9CSVQKKworOyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorOyAgRXh0ZXJuYWwgU3ltYm9sIE5hbWUKKzsKKyVpZm5kZWYgRVhUTgorJWRlZmluZSBFWFROKG5hbWUpICAgXyAlKyBuYW1lCQk7IGZvbygpIC0+IF9mb28KKyVlbmRpZgorCis7IC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCis7ICBNYWNyb3MgZm9yIHBvc2l0aW9uLWluZGVwZW5kZW50IGNvZGUgKFBJQykgc3VwcG9ydAorOworJWlmbmRlZiBHT1RfU1lNQk9MCisldW5kZWYgUElDCislZW5kaWYKKworJWlmZGVmIFBJQyA7IC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworJWlmaWRuIEdPVF9TWU1CT0wsX01BQ0hPX1BJQ18gOyAtLS0tLS0tLS0tLS0tLS0tLS0tLQorCis7IEF0IHByZXNlbnQsIG5hc20gZG9lc24ndCBzZWVtIHRvIHN1cHBvcnQgUElDIGdlbmVyYXRpb24gZm9yIE1hY2gtTy4KKzsgVGhlIFBJQyBzdXBwb3J0IGNvZGUgYmVsb3cgaXMgYSBsaXR0bGUgdHJpY2t5LgorCisJU0VDVElPTglTRUdfQ09OU1QKK2NvbnN0X2Jhc2U6CisKKyVkZWZpbmUgR09UT0ZGKGdvdCxzeW0pIChnb3QpICsgKHN5bSkgLSBjb25zdF9iYXNlCisKKyVpbWFjcm8gZ2V0X0dPVAkxCisJOyBOT1RFOiB0aGlzIG1hY3JvIGRlc3Ryb3lzIGVjeCByZXNpc3Rlci4KKwljYWxsCSUlZ2V0ZWlwCisJYWRkCWVjeCwgYnl0ZSAoJSVyZWYgLSAkKQorCWptcAlzaG9ydCAlJWFkanVzdAorJSVnZXRlaXA6CisJbW92CWVjeCwgUE9JTlRFUiBbZXNwXQorCXJldAorJSVhZGp1c3Q6CisJcHVzaAllYnAKKwl4b3IJZWJwLGVicAkJOyBlYnAgPSAwCislaWZpZG5pICUxLGVieAk7ICglMSA9PSBlYngpCisJOyBkYiAweDhELDB4OUMgKyBqbXAgbmVhciBjb25zdF9iYXNlID0KKwk7ICAgbGVhIGVieCwgW2VjeCtlYnAqOCsoY29uc3RfYmFzZS0lJXJlZildIDsgOEQsOUMsRTksKG9mZnNldDMyKQorCWRiCTB4OEQsMHg5QwkJOyA4RCw5QworCWptcAluZWFyIGNvbnN0X2Jhc2UJCTsgRTksKGNvbnN0X2Jhc2UtJSVyZWYpCislJXJlZjoKKyVlbHNlICA7ICglMSAhPSBlYngpCisJOyBkYiAweDhELDB4OEMgKyBqbXAgbmVhciBjb25zdF9iYXNlID0KKwk7ICAgbGVhIGVjeCwgW2VjeCtlYnAqOCsoY29uc3RfYmFzZS0lJXJlZildIDsgOEQsOEMsRTksKG9mZnNldDMyKQorCWRiCTB4OEQsMHg4QwkJOyA4RCw4QworCWptcAluZWFyIGNvbnN0X2Jhc2UJCTsgRTksKGNvbnN0X2Jhc2UtJSVyZWYpCislJXJlZjoJbW92CSUxLCBlY3gKKyVlbmRpZiA7ICglMSA9PSBlYngpCisJcG9wCWVicAorJWVuZG1hY3JvCisKKyVlbHNlCTsgR09UX1NZTUJPTCAhPSBfTUFDSE9fUElDXyAtLS0tLS0tLS0tLS0tLS0tCisKKyVkZWZpbmUgR09UT0ZGKGdvdCxzeW0pIChnb3QpICsgKHN5bSkgd3J0IC4uZ290b2ZmCisKKyVpbWFjcm8gZ2V0X0dPVAkxCisJZXh0ZXJuCUdPVF9TWU1CT0wKKwljYWxsCSUlZ2V0ZWlwCisJYWRkCSUxLCBHT1RfU1lNQk9MICsgJCQgLSAkIHdydCAuLmdvdHBjCisJam1wCXNob3J0ICUlZG9uZQorJSVnZXRlaXA6CisJbW92CSUxLCBQT0lOVEVSIFtlc3BdCisJcmV0CislJWRvbmU6CislZW5kbWFjcm8KKworJWVuZGlmCTsgR09UX1NZTUJPTCA9PSBfTUFDSE9fUElDXyAtLS0tLS0tLS0tLS0tLS0tCisKKyVpbWFjcm8gcHVzaHBpYwkxLm5vbGlzdAorCXB1c2gJJTEKKyVlbmRtYWNybworJWltYWNybyBwb3BwaWMJMS5ub2xpc3QKKwlwb3AJJTEKKyVlbmRtYWNybworJWltYWNybyBtb3ZwaWMJMi5ub2xpc3QKKwltb3YJJTEsJTIKKyVlbmRtYWNybworCislZWxzZQk7ICFQSUMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworJWRlZmluZSBHT1RPRkYoZ290LHN5bSkgKHN5bSkKKworJWltYWNybyBnZXRfR09UCTEubm9saXN0CislZW5kbWFjcm8KKyVpbWFjcm8gcHVzaHBpYwkxLm5vbGlzdAorJWVuZG1hY3JvCislaW1hY3JvIHBvcHBpYwkxLm5vbGlzdAorJWVuZG1hY3JvCislaW1hY3JvIG1vdnBpYwkyLm5vbGlzdAorJWVuZG1hY3JvCisKKyVlbmRpZgk7ICBQSUMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworOyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorOyAgQWxpZ24gdGhlIG5leHQgaW5zdHJ1Y3Rpb24gb24gezIsNCw4LDE2LC4ufS1ieXRlIGJvdW5kYXJ5LgorOyAgIi5iYWxpZ24gbiwsbSIgaW4gR05VIGFzCis7CislZGVmaW5lIE1TS0xFKHgseSkgICh+KCgoeSkgJiAweEZGRkYpIC0gKCh4KSAmIDB4RkZGRikpID4+IDE2KQorJWRlZmluZSBGSUxMQihiLG4pICAoKCQkLShiKSkgJiAoKG4pLTEpKQorCislaW1hY3JvIGFsaWdueCAxLTIubm9saXN0IDB4RkZGRgorJSViczoJdGltZXMgTVNLTEUoRklMTEIoJSVicywlMSksJTIpICYgTVNLTEUoMTYsRklMTEIoJCwlMSkpICYgRklMTEIoJCwlMSkgXAorCSAgICAgICBkYiAweDkwICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsgbm9wCisJdGltZXMgTVNLTEUoRklMTEIoJSVicywlMSksJTIpICYgRklMTEIoJCwlMSkvOSBcCisJICAgICAgIGRiIDB4OEQsMHg5QywweDIzLDB4MDAsMHgwMCwweDAwLDB4MDAgOyBsZWEgZWJ4LFtlYngrMHgwMDAwMDAwMF0KKwl0aW1lcyBNU0tMRShGSUxMQiglJWJzLCUxKSwlMikgJiBGSUxMQigkLCUxKS83IFwKKwkgICAgICAgZGIgMHg4RCwweEFDLDB4MjUsMHgwMCwweDAwLDB4MDAsMHgwMCA7IGxlYSBlYnAsW2VicCsweDAwMDAwMDAwXQorCXRpbWVzIE1TS0xFKEZJTExCKCUlYnMsJTEpLCUyKSAmIEZJTExCKCQsJTEpLzYgXAorCSAgICAgICBkYiAweDhELDB4QUQsMHgwMCwweDAwLDB4MDAsMHgwMCAgICAgIDsgbGVhIGVicCxbZWJwKzB4MDAwMDAwMDBdCisJdGltZXMgTVNLTEUoRklMTEIoJSVicywlMSksJTIpICYgRklMTEIoJCwlMSkvNCBcCisJICAgICAgIGRiIDB4OEQsMHg2QywweDI1LDB4MDAgICAgICAgICAgICAgICAgOyBsZWEgZWJwLFtlYnArMHgwMF0KKwl0aW1lcyBNU0tMRShGSUxMQiglJWJzLCUxKSwlMikgJiBGSUxMQigkLCUxKS8zIFwKKwkgICAgICAgZGIgMHg4RCwweDZELDB4MDAgICAgICAgICAgICAgICAgICAgICA7IGxlYSBlYnAsW2VicCsweDAwXQorCXRpbWVzIE1TS0xFKEZJTExCKCUlYnMsJTEpLCUyKSAmIEZJTExCKCQsJTEpLzIgXAorCSAgICAgICBkYiAweDhCLDB4RUQgICAgICAgICAgICAgICAgICAgICAgICAgIDsgbW92IGVicCxlYnAKKwl0aW1lcyBNU0tMRShGSUxMQiglJWJzLCUxKSwlMikgJiBGSUxMQigkLCUxKS8xIFwKKwkgICAgICAgZGIgMHg5MCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7IG5vcAorJWVuZG1hY3JvCisKKzsgQWxpZ24gdGhlIG5leHQgZGF0YSBvbiB7Miw0LDgsMTYsLi59LWJ5dGUgYm91bmRhcnkuCis7CislaW1hY3JvIGFsaWdueiAxLm5vbGlzdAorCWFsaWduICUxLCBkYiAwCQk7IGZpbGxpbmcgemVyb3MKKyVlbmRtYWNybworCislaWZkZWYgX194ODZfNjRfXworCislaWZkZWYgV0lONjQKKworJWltYWNybyBjb2xsZWN0X2FyZ3MgMAorCXB1c2ggcjEwCisJcHVzaCByMTEKKwlwdXNoIHIxMgorCXB1c2ggcjEzCisJcHVzaCByMTQKKwlwdXNoIHIxNQorCW1vdiByMTAsIHJjeAorCW1vdiByMTEsIHJkeAorCW1vdiByMTIsIHI4CisJbW92IHIxMywgcjkKKwltb3YgcjE0LCBbcmF4KzQ4XQorCW1vdiByMTUsIFtyYXgrNTZdCisJcHVzaCByc2kKKwlwdXNoIHJkaQorCXN1YiAgICAgcnNwLCBTSVpFT0ZfWE1NV09SRAorCW1vdmxwZCAgWE1NV09SRCBbcnNwXSwgeG1tNgorCXN1YiAgICAgcnNwLCBTSVpFT0ZfWE1NV09SRAorCW1vdmxwZCAgWE1NV09SRCBbcnNwXSwgeG1tNworJWVuZG1hY3JvCisKKyVpbWFjcm8gdW5jb2xsZWN0X2FyZ3MgMAorCW1vdmxwZCAgeG1tNywgWE1NV09SRCBbcnNwXQorCWFkZCAgICAgcnNwLCBTSVpFT0ZfWE1NV09SRAorCW1vdmxwZCAgeG1tNiwgWE1NV09SRCBbcnNwXQorCWFkZCAgICAgcnNwLCBTSVpFT0ZfWE1NV09SRAorCXBvcCByZGkKKwlwb3AgcnNpCisJcG9wIHIxNQorCXBvcCByMTQKKwlwb3AgcjEzCisJcG9wIHIxMgorCXBvcCByMTEKKwlwb3AgcjEwCislZW5kbWFjcm8KKworJWVsc2UKKworJWltYWNybyBjb2xsZWN0X2FyZ3MgMAorCXB1c2ggcjEwCisJcHVzaCByMTEKKwlwdXNoIHIxMgorCXB1c2ggcjEzCisJcHVzaCByMTQKKwlwdXNoIHIxNQorCW1vdiByMTAsIHJkaQorCW1vdiByMTEsIHJzaQorCW1vdiByMTIsIHJkeAorCW1vdiByMTMsIHJjeAorCW1vdiByMTQsIHI4CisJbW92IHIxNSwgcjkKKyVlbmRtYWNybworCislaW1hY3JvIHVuY29sbGVjdF9hcmdzIDAKKwlwb3AgcjE1CisJcG9wIHIxNAorCXBvcCByMTMKKwlwb3AgcjEyCisJcG9wIHIxMQorCXBvcCByMTAKKyVlbmRtYWNybworCislZW5kaWYKKworJWVuZGlmCisKKzsgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKzsgIERlZmluZXMgcGlja2VkIHVwIGZyb20gdGhlIEMgaGVhZGVycworOworJWluY2x1ZGUgImpzaW1kY2ZnLmluYyIKKworOyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQpkaWZmIC0tZ2l0IGEvc2ltZC9uYXNtX2x0LnNoIGIvc2ltZC9uYXNtX2x0LnNoCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjZjZDczMjkKLS0tIC9kZXYvbnVsbAorKysgYi9zaW1kL25hc21fbHQuc2gKQEAgLTAsMCArMSw1NyBAQAorIyEgL2Jpbi9zaAorY29tbWFuZD0iIgoraW5maWxlPSIiCitvX29wdD1ubworcGljPW5vCit3aGlsZSBbICQjIC1ndCAwIF07IGRvCisgICAgY2FzZSAiJDEiIGluCisgICAgICAgIC1EUElDfC1mUElDfC1mcGljfC1LcGljfC1LUElDKQorICAgICAgICAgICAgaWYgWyAiJHBpYyIgIT0gInllcyIgXSA7IHRoZW4KKyAgICAgICAgICAgICAgICBjb21tYW5kPSIkY29tbWFuZCAtRFBJQyIKKyAgICAgICAgICAgICAgICBwaWM9eWVzCisgICAgICAgICAgICBmaQorICAgICAgICAgICAgOzsKKyAgICAgICAgLWZ8LWZiaW58LWZhb3V0fC1mYW91dGJ8LWZjb2ZmfC1mZWxmfC1mZWxmNjR8LWZhczg2fCBcCisgICAgICAgIC1mb2JqfC1md2luMzJ8LWZ3aW42NHwtZnJkZnwtZmllZWV8LWZtYWNob3wtZm1hY2hvNjQpCisgICAgICAgICAgICAjIGl0J3MgYSBmaWxlIGZvcm1hdCBzcGVjaWZpZXIgZm9yIG5hc20uCisgICAgICAgICAgICBjb21tYW5kPSIkY29tbWFuZCAkMSIKKyAgICAgICAgICAgIDs7CisgICAgICAgIC1mKikKKyAgICAgICAgICAgICMgbWF5YmUgYSBjb2RlLWdlbmVyYXRpb24gZmxhZyBmb3IgZ2NjLgorICAgICAgICAgICAgOzsKKyAgICAgICAgLVtJaV0qKQorICAgICAgICAgICAgaW5jZGlyPWBlY2hvICIkMSIgfCBzZWQgJ3MvXi1bSWldLy8nYAorICAgICAgICAgICAgaWYgWyAieCRpbmNkaXIiID0geCAtYSAieCQyIiAhPSB4IF0gOyB0aGVuCisgICAgICAgICAgICAgICAgY2FzZSAiJDIiIGluCisgICAgICAgICAgICAgICAgICAgIC0qKSA7OworICAgICAgICAgICAgICAgICAgICAqKSBpbmNkaXI9IiQyIjsgc2hpZnQ7OworICAgICAgICAgICAgICAgIGVzYWMKKyAgICAgICAgICAgIGZpCisgICAgICAgICAgICBpZiBbICJ4JGluY2RpciIgIT0geCBdIDsgdGhlbgorICAgICAgICAgICAgICAgICMgSW4gdGhlIGNhc2Ugb2YgTkFTTSwgdGhlIHRyYWlsaW5nIHNsYXNoIGlzIG5lY2Vzc2FyeS4KKyAgICAgICAgICAgICAgICBpbmNkaXI9YGVjaG8gIiRpbmNkaXIiIHwgc2VkICdzJS8qJCUvJSdgCisgICAgICAgICAgICAgICAgY29tbWFuZD0iJGNvbW1hbmQgLUkkaW5jZGlyIgorICAgICAgICAgICAgZmkKKyAgICAgICAgICAgIDs7CisgICAgICAgIC1vKikKKyAgICAgICAgICAgIG9fb3B0PXllcworICAgICAgICAgICAgY29tbWFuZD0iJGNvbW1hbmQgJDEiCisgICAgICAgICAgICA7OworICAgICAgICAqLmFzbSkKKyAgICAgICAgICAgIGluZmlsZT0kMQorICAgICAgICAgICAgY29tbWFuZD0iJGNvbW1hbmQgJDEiCisgICAgICAgICAgICA7OworICAgICAgICAqKQorICAgICAgICAgICAgY29tbWFuZD0iJGNvbW1hbmQgJDEiCisgICAgICAgICAgICA7OworICAgIGVzYWMKKyAgICBzaGlmdAorZG9uZQoraWYgWyAiJG9fb3B0IiAhPSB5ZXMgXSA7IHRoZW4KKyAgICAjIEJ5IGRlZmF1bHQsIE5BU00gY3JlYXRlcyBhbiBvdXRwdXQgZmlsZQorICAgICMgaW4gdGhlIHNhbWUgZGlyZWN0b3J5IGFzIHRoZSBpbnB1dCBmaWxlLgorICAgIG91dGZpbGU9Ii1vIGBlY2hvICRpbmZpbGUgfCBzZWQgLWUgJ3MlXi4qLyUlJyAtZSAncyVcLlteLl0qJCUlJ2AubyIKKyAgICBjb21tYW5kPSIkY29tbWFuZCAkb3V0ZmlsZSIKK2ZpCitlY2hvICRjb21tYW5kCitleGVjICRjb21tYW5kCmRpZmYgLS1naXQgYS9zdHJ1Y3R1cmUudHh0IGIvc3RydWN0dXJlLnR4dAppbmRleCBmZTg4NzAxLi43NzkyMzNhIDEwMDY0NAotLS0gYS9zdHJ1Y3R1cmUudHh0CisrKyBiL3N0cnVjdHVyZS50eHQKQEAgLTQ1NCw4ICs0NTQsOCBAQAogICBidWZmZXJlZCBieSB0aGUgY29lZmZpY2llbnQgY29udHJvbGxlciBoYXZlIE5PVCBiZWVuIGRlcXVhbnRpemVkOyB3ZQogICBtZXJnZSBkZXF1YW50aXphdGlvbiBhbmQgaW52ZXJzZSBEQ1QgaW50byBhIHNpbmdsZSBzdGVwIGZvciBzcGVlZCByZWFzb25zLgogICBXaGVuIHNjYWxlZC1kb3duIG91dHB1dCBpcyBhc2tlZCBmb3IsIHNpbXBsaWZpZWQgRENUIGFsZ29yaXRobXMgbWF5IGJlIHVzZWQKLSAgdGhhdCBuZWVkIGZld2VyIGNvZWZmaWNpZW50cyBhbmQgZW1pdCBmZXdlciBzYW1wbGVzIHBlciBEQ1QgYmxvY2ssIG5vdCB0aGUKLSAgZnVsbCA4eDguICBXb3JrcyBvbiBvbmUgRENUIGJsb2NrIGF0IGEgdGltZS4KKyAgdGhhdCBlbWl0IG9ubHkgMXgxLCAyeDIsIG9yIDR4NCBzYW1wbGVzIHBlciBEQ1QgYmxvY2ssIG5vdCB0aGUgZnVsbCA4eDguCisgIFdvcmtzIG9uIG9uZSBEQ1QgYmxvY2sgYXQgYSB0aW1lLgogCiAqIFBvc3Rwcm9jZXNzaW5nIGNvbnRyb2xsZXI6IGJ1ZmZlciBjb250cm9sbGVyIGZvciB0aGUgY29sb3IgcXVhbnRpemF0aW9uCiAgIGlucHV0IGJ1ZmZlciwgd2hlbiBxdWFudGl6YXRpb24gaXMgaW4gdXNlLiAgKFdpdGhvdXQgcXVhbnRpemF0aW9uLCB0aGlzCkBAIC01ODYsNyArNTg2LDggQEAKIFdpdGggdGhlc2UgY29udmVudGlvbnMsIEpTQU1QTEUgdmFsdWVzIGNhbiBiZSBhc3N1bWVkIHRvIGJlID49IDAuICBUaGlzIGhlbHBzCiBzaW1wbGlmeSBjb3JyZWN0IHJvdW5kaW5nIGR1cmluZyBkb3duc2FtcGxpbmcsIGV0Yy4gIFRoZSBKUEVHIHN0YW5kYXJkJ3MKIHNwZWNpZmljYXRpb24gdGhhdCBzYW1wbGUgdmFsdWVzIHJ1biBmcm9tIC0xMjguLjEyNyBpcyBhY2NvbW1vZGF0ZWQgYnkKLXN1YnRyYWN0aW5nIDEyOCBmcm9tIHRoZSBzYW1wbGUgdmFsdWUgaW4gdGhlIERDVCBzdGVwLiAgU2ltaWxhcmx5LCBkdXJpbmcKK3N1YnRyYWN0aW5nIDEyOCBqdXN0IGFzIHRoZSBzYW1wbGUgdmFsdWUgaXMgY29waWVkIGludG8gdGhlIHNvdXJjZSBhcnJheSBmb3IKK3RoZSBEQ1Qgc3RlcCAodGhpcyB3aWxsIGJlIGFuIGFycmF5IG9mIHNpZ25lZCBpbnRzKS4gIFNpbWlsYXJseSwgZHVyaW5nCiBkZWNvbXByZXNzaW9uIHRoZSBvdXRwdXQgb2YgdGhlIElEQ1Qgc3RlcCB3aWxsIGJlIGltbWVkaWF0ZWx5IHNoaWZ0ZWQgYmFjayB0bwogMC4uMjU1LiAgKE5COiBkaWZmZXJlbnQgdmFsdWVzIGFyZSByZXF1aXJlZCB3aGVuIDEyLWJpdCBzYW1wbGVzIGFyZSBpbiB1c2UuCiBUaGUgY29kZSBpcyB3cml0dGVuIGluIHRlcm1zIG9mIE1BWEpTQU1QTEUgYW5kIENFTlRFUkpTQU1QTEUsIHdoaWNoIHdpbGwgYmUKZGlmZiAtLWdpdCBhL3Rlc3RpbWcuYm1wIGIvdGVzdGltZy5ibXAKaW5kZXggMDEyMjIzZS4uODYwM2QxNSAxMDA2NDQKLS0tIGEvdGVzdGltZy5ibXAKKysrIGIvdGVzdGltZy5ibXAKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvdGVzdGltZy5qcGcgYi90ZXN0aW1nLmpwZwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYTAyNmU0OC4uMDAwMDAwMAotLS0gYS90ZXN0aW1nLmpwZworKysgL2Rldi9udWxsCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3Rlc3RpbWcucHBtIGIvdGVzdGltZy5wcG0KZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGJkNzhlZjguLjAwMDAwMDAKLS0tIGEvdGVzdGltZy5wcG0KKysrIC9kZXYvbnVsbApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS90ZXN0aW1nYXJpLmpwZyBiL3Rlc3RpbWdhcmkuanBnCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjg5NjY0ODcKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0aW1nYXJpLmpwZwpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS90ZXN0aW1nYXJpLnBwbSBiL3Rlc3RpbWdhcmkucHBtCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQ3YjM4ZjIKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0aW1nYXJpLnBwbQpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS90ZXN0aW1nY3JvcC5qcGcgYi90ZXN0aW1nY3JvcC5qcGcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMThmYTBiMQotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RpbWdjcm9wLmpwZwpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS90ZXN0aW1nZmx0LW5vc2ltZC5qcGcgYi90ZXN0aW1nZmx0LW5vc2ltZC5qcGcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDYyZjM5YgotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RpbWdmbHQtbm9zaW1kLmpwZwpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS90ZXN0aW1nZmx0LmpwZyBiL3Rlc3RpbWdmbHQuanBnCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjgzMmY0Y2MKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0aW1nZmx0LmpwZwpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS90ZXN0aW1nZmx0LnBwbSBiL3Rlc3RpbWdmbHQucHBtCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjc4OTQ1YjYKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0aW1nZmx0LnBwbQpAQCAtMCwwICsxLDQgQEAKK1A2CisyMjcgMTQ5CisyNTUKKzAvLTAvLTEwLjIxLzQwLTUxLjYyLzYyLzgzLzgzLzozLTozLTozLTozLTozLTozLToyLzkxLjkxLjgwLTgwLTkxLjkxLjoyLzgwLTgwLTgwLTgwLTgwLTgwLTgwLTgwLTYuKzYuKzYuKzUtKjUtKjQsKTQsKTQsKTQsKTQsKTQsKTQsKTQsKTQsKTQsKTItKS8qJC8sJS8sJTAtJjEuJzIvKDMwKTMwKTYzLDYzLDc0LTg1Ljg1Ljk2Lzo3MDo3LkE6MEI8MEQ+MkZANElBNEpCNUtDNktDNk1ENU1ENU9DM05CMk9DM09DM1BENFJFNVI/MVk/MmJANG5CNX1FNotIOJlHOaNGN69HOrhHOb5FOsVHO8dHPspHP8tIQNBFQOdGTO1DTOtES+tFSe5DSe9CRPE+QvQ9Qfg7Qfc6QPQ6P/A8P+k/QOJAPtc/PMtBN7s9L7VALrVALrQ/LbQ/LbI/LLI/La9ALa1ALKpBLKZBLaJCLJ9AKptBKZhAKpZBLJQ+LZI/L5I/L5E+LpE+LJA9K5I8K5I8K5Q/K5Q/K5Q9KpQ9KpQ9KpU+K5Y/LJZAL5Y/NpU+NZc9Mp8/MalCM7NEM7xENL9ENLk/MLVBMqxGOJ5IO4dIOW9BMlQ4KkMzJj01Mjk1NDk1NDczMjcxMTYwMDUwLTUwLTcyLzcyLzcyLzYxLjYxLTUwLDUwLDQxLC8vLS4wLS8vLS8vLTAvLTAvLTIuLTIuLTQrLDQrLDQqKzMpKjcoKz0uMUU2OVA6PGpCQ3xJSI1NTZVPT55WWqpkbqpvg590kJR7o4d/roCGun6IvXN5rWBhkVRLdlFFaVNKZ09HXk1IXlRRYmZkb3x9go2RkJmemKOpn6Komp6gk4+SgXt8bGZnVVhXRVFORVVSW1VRYlVRYjAvLTAvLTEwLjEwLjQwLTUxLjYyLzYyLzgzLzgzLzozLTozLTozLTozLTozLTozLTkxLjkxLjgwLTgwLTgwLTgwLTkxLjkxLjgwLTgwLTgwLTgwLTgwLTgwLTgwLTgwLTYuKzYuKzUtKjUtKjUtKjQsKTQsKTQsKTUtKjUtKjUtKjUtKjUtKjUtKjUtKjMuKjArJTAtJjAtJjEuJzIvKDMwKTQxKjQxKjYzLDYzLDc0LTc0LTg1Ljk2Lzo3MDo3LkA5L0E7L0M9MUU/M0hAM0lBNEpCNUpCNUxDNExDNE1BMU1BMU1BMU5CMk9DM1FENFA+MFU/MV5BM2pDNHhENoRFNJJFNZxDM6dDNK9BNLVBNLxCN8BEOsRFPMVGPc1DQOFFSedCSehDSepESO1ER+9CRPNAQ/Y/Q/g7Qfc6QPQ6P/A8P+k/QOBBPtVAPMpANrk+L7VALrQ/LbQ/LbQ/LbI/LLA/La9ALa1ALKlAK6ZBLaFBK59AKptBKZhAKpZBLJQ+LZI/L5E+LpE+LpE+LJA9K5I8K5I8K5Q/K5M+KpQ9KpQ9KpQ9KpU+K5Y/LJZAL5RANZU+NZg+M6A+MatBM7VENL1DNL9ENbtBMrdDNqxGOJxJO4VHOmxAM1M5KkI0KT42Mzo2NTk1NDg0MzgyMjcxMTYxLjYxLjcyLzcyLzcyLzYxLjYxLTUwLDUwLDQxLC8vLS4wLS8vLS8vLTAvLTAvLTIuLTIuLTMtLTUsLTUrLDMpKjUpKzwtMEM0N044OmQ+PXZFQYZKSY9OTJpUVqRhaqVsfZ1yjpF7ooaArn+FuXuEu291qVtbjVFIdU9DaU9GZU9HX1BIX1JOX1tZZm5vdIOHiJSZlZmel5qglJmdj4+Rg35/b2prWV1bTFZTSlhTWlZSYVhRYS8uLC8uLDAvLTEwLjQwLTQwLTUxLjUxLjcyLjcyLjcyLjcyLjkyLDkyLDkyLDkyLDkxLjgwLjcvLTcvLTcvLTcvLTgwLjkxLzgwLjgwLjgwLjgwLjgwLjgwLjgwLjgwLjYuLDUtKzUtKzUtKzQsKjQsKjQsKjQsKjUtKzUtKzUtKzUtKzUtKzUtKzUtKzMuKjItJzEuJzIvKDMwKTMwKTQxKjQxKjUyKzYzLDYzLDYzLDc0LTg1Ljk2Lzk2Lzo3Lj84LkA6LkI8MEQ+Mkc/NEhANUhAM0hAM0lAMUlAMUs/MUs/MUs/L0xAME1BMU5CMk1BMVFBMVlCMmRDMnFDM3xDModCMpJBMJg8LaA6K6c7Lq89MrVANrpEOr9GPcVEPtlDReFARuNCR+dCRupERvBDRfRBRPg/RPo7QPk6P/U7QPA9QOhAQNxBPdFAO8ZANbc9LrNALbNALbI/LLI/LbA/La8+LK1ALKo/LadALaVALKFBK51BLJo/KphAKpVAK5Q+LZE+LpE+LpE+LpA9K5A9K5A9K5A9K5E+LJE+LJI8K5I8K5M9LJM9LJQ/K5U/LpVBNpY/NZo+M6M+Mq9BNLlDNb9ENcFDNcBEOLhGO65JPZlKPYFHO2hANFE6LEI1LD83ND03Nzw2Njs1NTk0MTgzMDcyLzcyLzYyLzYyLzYyLzUxLjUyLTQxLDQxLDIxLC4wLSwxLS4wLS4wLS8vLS8vLTAvLTIuLTUvLzQuLjUsLTQqKzQqKzktLz4yNEk1Nls5N2w/OXxFQIZJRJBPTZhbYJtmdpRtiIx3noN9rX2CuXV+t2ZtpFRWiU1FdkxBa01BZU9GY1FIY01IXk5LXFtbZXF0eYWJiIeMhoqPiI2QhYaKfHh6bGZpWFpbTVZTTFpVW1pUYFtTYC4tKy8uLC8uLDAvLTMvLDQwLTQwLTQwLTYxLTYxLTYxLTYxLTgxKzgxKzgxKzgxKzcvLTcvLTYuLDYuLDYuLDYuLDcvLTcvLTgwLjgwLjgwLjgwLjgwLjgwLjgwLjgwLjUtKzUtKzUtKzQsKjQsKjQsKjMrKTMrKTYuLDYuLDYuLDYuLDYuLDYuLDYuLDQvLDMwKzMwKTMwKTQxKjQxKjUyKzUyKzUyKzUyKzUyKzYzLDc0LTg1Ljg1Ljk2Lzk2LT43LT85LUA6LkI8MEU9MkU9MkY+MUY+MUc9MUc+L0g8Lkk9L0k9L0o+LkxAMEpBMExFM05FNFVENF5EM2lEMnNCMX5BL4Y/LYw5KZQ5J505KqM8LaxAM7NFOLhIPMFGPtJEQ9pBQ95CQ+JEQ+dDROxCQ/NAQ/c/Qfo7QPk6P/U7QO4+QOVBQNpCPc1AOcJAM7U9LbBALLBALLBALK8+LK4/LK4/LKw/K6lALaY/LKNAK6BAKpxAK5hAKpZAKZQ/KpE+LJE+LpE+LpA9LZA9K5A9K488Ko88KpA9K5A9K488Ko88KpI8K5E+LJQ+LZI/LZVBNpY/NZw+MqZANLJCNrxDOMFDN8JCN8JGPLlJPqxMQJdLPnxGOmJANEw6LkE3LUA4NT45Nj03Nzw3NDo1Mjk0MTgzMDgzMDYyLzYyLzYyLzMyLjUyLTIxLDIxLDEyLS0yLi0yLi8xLi8xLjAwLjAwLjEwLjEwLjUxMDYwMDUvLzUsLTQrLDYsLTowMUQyMlQ3MWM7M3FBN3tFO4JIRIlSVY1fbItpgoNzmH15q3h9tW93tWBmolFSi0xFeUxAcExAaFBFZ1FGZkxDXkdCVk1MWl5eZmpucXV5eHl+eHqAdnd6b2tvYWBiVFdZTFRUTF1XWV1WXV1WXi0tLS0tLS4tKy8uLDAvLTEwLjMvLDQwLTMvLDMvLDQvKzQvKzQvKzQvKzYvKTYvKTQvLDQvLDMuKzMuKzMuKzMuKzQvLDQvLDUwLTUwLTUwLTUwLTUwLTUwLTUwLTUwLTMuKzMuKzItKjItKjItKjEsKTEsKTEsKTQvLDQvLDQvLDQvLDQvLDQvLDQvLDQvLDQxLDQxLDQxLDQxLDUyLTUyLTUyLTUyLTUyLTUyLTYzLjYzLjc0Lzg1MDk2MTk2Lzw1LT02LD84LkA5L0I6L0M7MEM7MEM7LkQ6LkQ6LkY6Lkc7LUg8Lkk9L0o+MElAMUpHNk1INVJHNVlGNWJFM2pEMXVCL3w/LII7KYs6KZM6Kpo9LKNCMqxGOLJKPbtJP8xHQtREQ9hEQtxEQeJCQulBQfA9QPQ8Pvk6P/g6PPQ8Pu0/PuFCPtNDOsVBNbk/MLI/La4/LK4/LK4/LK0+Law+Law+Lao/Lag+LqQ/LaA/LJ4/K5o/LJc/K5U+KpM+KpE+LJA/Lo8+LY8+LY8+LY49LI49LI49LI49LI49LI49LI49LI88LI8+LZE+LpA/LpRCNJdBNJ1AMahAM7ZBN79DOcVCOMRBN75DO7dIP6ZMQ5BKQHRFO1o+MkU5LTw1K0A5M0A4NT83NT42Mz01Mjw0MTk0MDgzLzYyLzQzLzQzLzIzLjMyLjEyLTEyLTAyLS0yLiwyLi0yLi0yLi8xLi8xLjAwLjEwLjMyMDUxMDUxMDQuLjIsLDQrLDcuLz0vLk41Llk5LmU9MW5AM3NCO3lLS4BaZYNngH9wl3p4qnV7t2tztF9kplRUlE9Hg0xCd05BbU5CaE1BZUpBYEdCWUdGWEtLV01QVV1jY2BmYmJpYWBmXFpgVFdbTVVYTVhYUF5ZVmBXWGBXWiwsLCwsLC4tKy4tKy8uLDAvLTMvLDMvLDIuKzIuKzMuKjMuKjMuKjMuKjUuKDUtKjMuKzMuKzItKjEsKTEsKTItKjMuKzMuKzMuKzMuKzMuKzMuKzMuKzMuKzMuKzMuKzItKjItKjItKjItKjEsKTEsKTEsKTArKDMuKzMuKzMuKzMuKzMuKzMuKzMuKzMuKzQxLDQxLDQxLDQxLDQxLDQxLDQxLDQxLDQxLDUyLTUyLTYzLjc0Lzg1MDg1MDg1Ljs0LDw1Kz02LD43LUA3LkE5LkE5LkE5LkM5L0M5LUU5LUY6Lkc7L0g8Lko+MEhBMUpHNklINk5HNVZGNlxFM2RDMmxBMHQ/LXs8K4I7KYw7KpQ9LJxAMaNGNapKOrRKPcRIQMxFQdFGQdZFQN5DQeRAPuw+P/E6PPc7PPQ6O/A8PelAPdxDPc1DOL5AMrE+LK4/LKtALKo/K6o/K6o/Lak+LKk+LKg/LKU+LaI/LKA/LJs+LJc/K5U+KpM+KZE/Ko8+K48+LY8+LY8+LY49LI49LI49LI08K449LIs8K408K4s8K4s8LYw9LI0+L44/MJRCNJdBMqBAMqxCNblDOcJDOsVCOsJBO7pBObFJQKNOR41ORW9HPVM/NEE7Lzk2LUA5M0E3NT83ND42Mzw0MTk0MDgzLzc0LzQzLzQzLzM0LzIzLjIzLjAyLTAyLS4zLS0zLy0zLy4zLy4zLzAyLzAyLzExLzExLzIxLzMyMDMyMDQwLzIuLTEtLDQuLjguLEc0LU80KVg4K2A8MGU/Nm1HRnlZZIJrhYB1n3x8snd8vG51u2Ror1tboVJNj0xCfk9BckxAaEk9Y0g+YEhCXkVDWEBCTztARkJHSkRNSkpRSkpRSUlRRktRRU9VSVZXT15ZU2BZU2BYVSsrKysrKywsLC0tLS8uLC8uLDAvLTAvLTEtKjEtKjEtKjEtKjItKTItKTItKTItKTItKjIsLDErKzErKzErKzErKzIsLDIsLDErKzErKzErKzErKzErKzErKzErKzErKzIsLDIsLDIsLDErKzErKzErKzAqKjAqKjMtLTMtLTMtLTMtLTMtLTMtLTMtLTMuKzQxLDQxLDQxLDMwKzMwKzMwKzMwKzMwKzQxLDQxLDUyLTYzLjc0Lzc0Lzg1MDg1LjozKzs0LDw1LT02Lj82Lz82LT82LT83LEI4LkI4LkU4L0U5LUc7L0g8MEo+MkhAM0hFNkdFNktFNVFENFhDMl9CMmY/Lm49LHY9LHw6KoU5KYw7KpM9LptCMqJGN6xGOLxHPcJGPslGPtBFPtlEQOJDP+k/P/A+PvI6OvE7Ouw8PORBPNZDO8ZENrVAL6o9Kao/LalALalALag/LKg+Lqg+Lqc9LaU+LaM9LqA/Lp4/LZo/LZY/LJM+KpE/Ko8+KY8+K40+LY0+LYw9LIw9Low9Los8LYs8LYs8LYo9LYo7LIk8LIo8L4o9LYs9MIw/L5JDNJhCM6FBM65CNrxDOsJDPMRDPcBDPblGQbJRSqVYUo9YUXNSSVdJPkNDNzw/Nj45M0A3Mj43MT02MDo1Lzk0LjgzLzYzLjQzLjQzLjM0LzEzLjEzLi4zLS4zLS4zLS0zLy0zLy0zLy0zLy4zLy4zLzAyLzAyLzAwLjExLzIyMDIxLzAvLS8uLDIuLTQvLD8wK0QwKUszKVQ4LVo8NGRGRnVdaoNzjYmAq4WEvn6Dx3R6xm1wvWNlr1ZTmkxDgks/cUk8Z0c7Y0U+X0ZCXURCVz9BTjs/SDpCRT5IR0RNSEdRSUdRSEpSR05WS1VYTV5aT2FZTmFYTysrKysrKywsLC0tLS4sLS8uLDAvLTAvLTEtKjEtKjEtKjEtKjItKTItKTItKTItKjIsLDErKzErKzAqKjAqKjErKzErKzIsLDAqKjAqKjAqKjAqKjAqKjAqKjAqKjAqKjIsLDIsLDIsLDErKzErKzAqKjAqKjAqKjIsLDIsLDIsLDIsLDIsLDIsLDIsLDIsLDMvLDMwKzMwKzMwKzMwKzMwKzMwKzIvKjQxLDQxLDUyLTYzLjYzLjc0Lzg1MDg1MDkyLDozKzs0LDw1LT41Lj41Lj41Lj41LEI4L0I4LkU4L0U4L0c6MUk9MUo+Mkk/M0ZCNkZCNkpCNU9BNFRBMlxAMmI+MGo8LXE8Lnc5Kn04KYU4KIw6LJU9L5tCNKRCNbJGOrpFO8FGPspHP9RHQN5GQedDQe5CQO07O+s7O+c+O99CO9FEOr9ENK9ALaQ+KKZBLaZBLaZBLaVALqVALqQ/LaQ/LaQ+L6I+Lp9ALpw/Lpg/LZU+K5E/Ko8+KY8+K40+LY0+LY0+LYw9LIw9Los8LYs8LYo9LYo9LYg8Log8Log8Log8L4c+L4g+MYs/MZFENJZDM6JCNK1DNrpDO8FEPsFEPrtFQblQTLJbVKVlXJFmXXVfVFtVSUdNQUNJPzw5Mj84Mj43MTs2MDk0Ljc0LTYzLjQzLjQzLjM0LjI0LzEzLi80Li4zLS4zLS4zLS0zLy0zLy0zLy0zLy4zLy4zLzAyLzAyLy8vLTAwLjIyMDIyMDEwLi8uLDAvLTMvLDgsLDssKUMwKks3MFM8Nl5JSHRibod6lJCKtoyNxoSIz3qAzHJ4xmlrtldXn0lEhEU9bkc8ZEQ8YUM+XkNBWUBDVkBEUD5FS0dRUktXVVFeV1VgWFNfVVJeVFReU1lfU15bTGFaSmFaSiwtLywtLywtLywuLS0tLS0tLS4tKy4tKy8uLC8uLDEtKjAsKTAsKTAsKS8rKC8rKC8rKi8rKi8rKi8rKi8rKi8rKi8rKjAsKy8rKi8rKi8rKi8rKi8rKi8rKi8rKi8rKi8rKi8rKi8rKjAsKzAsKzEtLDEtLDIuLTEtLDEtLDEtLDEtLDEtLDEtLDEtLDEtLDAsKTEtKjIuKzMvLDMvLDMvLDMvLDMvLDMvLDMvLDMvLDMvLDQwLTUxLjYyLzc0LzgwLTkyLDozLTs0Lj00Lz41Lj41Lj41Lj80Lj81LEI1LUM2LkQ3L0Y5MEc6MUY8Mkc+NUhANUpANlA/NVQ+M1g8MV45MGI2K205LnQ4LXw4K4M5LI07L5M9MJg/MZ4+MKdBM61BNLVDOL5FOspHPdRHPt5FP+VDQOhAP+pCQeZEQdpFPshEOLdCMapBLqJCLKJBLqFALaI/LKI+LqE9LaE9LaI+LqA/L5w8LJo9LJg8LZQ9LJM9LJA9K449Kow+Kos8K4s8K4o9LYk8LIk8LIg7K4g6LYc7LYk9L4Y8L4Y8L4c9MIg+M4hAMolBNYtBNJFFNZdENKNFObFJPrpHQLtEPrtFQbhNR7RaUq9mX6NxZpFzaH5yZGpqXlZeU0lRRkxMQkpGPUI+NTw4Lzk1LDc0KzYzLDMzKzQzLjM0LjE0LTE0LTAyLS8xLCwxKywxKy0yLi0yLi0yLi0yLi8xLi8xLi8xLi8xLjAyLzAyLzExLzExLzExLzExLzExLzQwLzQrMDsvM0EzMkM0L0o7Nl1PT3lteYuFn5OQu5SWz5CV2YOJ03R6xmput19ip1pblExJdEhCZEE+XT4+WD9CVUFJVkxVXFVgYmJxbm59eHaGfHJ/dWx5b2d1aF9rX1dfUF1cSGJcRmNdRywtLywtLywtLywtLy0tLS0tLS4sLS4tKy8uLC4tKzAsKTAsKS8rKC8rKC8rKC8rKC4qKS4qKS4qKS4qKS8rKi8rKi8rKi8rKi8rKi8rKi8rKi8rKi8rKi8rKi8rKi8rKi8rKi8rKi8rKjAsKzAsKzAsKzEtLDEtLDEtLDEtLDEtLDEtLDEtLDEtLDEtLDEtLDAsKzAsKTEtKjIuKzMvLDMvLDIuKzIuKzIuKzIuKzIuKzIuKzMvLDQwLTUxLjYyLzgwLjkxLjoyLzs0Lj00Lz41MD41MD00LT80Lj80LkE0LkI1LUM2LkU4MEc6Mkg7M0g+NUg+NUw9Nk8+NlE9NFY7Mlo5MF83L2g3MHA3Lnc3LYE5LYk5LpA8MZY8MZs9MaJAM6dBM61DNrREOL5FOslGPNRFPdtEPd9EQOBFQN5GQdRHPsRGOLJDMqVCLZ5CLZ9DLp5CLZ9ALp4/LZ4/LZ4/LZ4+Lp4+Lpo9LJk+LJY9LZQ9LJA9K48+K4w+Kow9LIs8K4o9K4k8LIk8LIk8LIc7K4c7LYU8LYY8L4U9L4U9MYM9MYQ+MoZANodBN4hCNpNHOZhGOKNHPK9KQLhJQrhHQbdMRrNUTrFkXKpxZp9+b5B/b398bW1zZVpmWk5YTUxOQUtJPUVDN0A9ND06MTg4LjQ0LDExKTIzLTIzLTAzLC8yKy8xLC4wKy4wKy4wKy8xLi0yLi8xLi8xLi8xLi8xLi8xLi8xLjAyLzAyLzExLzExLzExLzExLzExLzIwMTUrNDktNzwyMz81M0g/Ol5WVHhyfIqInpOTuZSXypCW1ISLz3mBwnF5uGt0rWhunlxfgFhacVNValJXalReaFpnbWZ2dnKCf3SIf36Sh4OViX6OgXeHenKAcWZ0ZVplVFtaRWBaQGJcRCwtLywtLywtLywtLywtLywuLS0tLS0tLS4tKy4tKy4tKy0sKi8rKC4qJy4qJy4qJywrKSwqKywqKywqKyspKispKispKispKi0rLC0rLC0rLC0rLC0rLC0rLC0rLC0rLCwqKywqKy0rLC0rLC0rLC4sLS4sLS4sLS4sLS4sLS4sLS8tLi8tLi8tLi8tLi8uLDAsKzAsKzEtLDIuLTIuLTIuLTIuLTEtLDEtLDEtLDEtLDEtLDIuLTMvLjQwLzUxLjgwLjkxLjoyLzszMD0zMT00Lz00Lz00Lz80MD80LkE0LkE0LkM2MEQ3MUY5M0Y5M0g7NUo7Nks8N049NlA7NlM6NVY3Mls2LmM2MGs2LnQ1LH03L4c5L407MJQ8MJY8MZ0/M6BANKJAM6hAM7FDNrpEOMVFOs1EOtVGQNZHP9RJQsxJP75FOq5DM6FCLpxBLp1CL5xBLpw/Lps+LZs+LZs+LZs+L5s/MJg8LZY9LZQ8LpM9Lo8+LYw9LIs8K4o9K4k8Kok8Kok8LIc7K4c7LYU8LYQ6LYM7LYQ8MII8MII8MoI+M4M/NIVBOIdDOohEOZRKPZdIO6BIPqtKQ7JLRrNMR7JTTa5gVq1zZ6aBcZ2MepGOe4KJd3OAb2NxYlhjVU5SRE1OQEhJO0REOEBANDk7LjQ2Ky8xJjAxKTAxKS8wKi8wKi4vKi4vKi8vLS8vLS8vLS4wLS8vLS8vLS8vLS8vLS8vLS8vLTAwLjAwLjAwLjAwLjAwLjAwLjAwLjEvMjYrOTcrOTgvNDs2M0hFPl9eWXp6fIuNmpCUsZKXv4+Vx4SOw32Ju3uJtnyLsn2Mq32ImneDj3F+h259gm5+fnCDf3mOhYOZjYuhlJGomJCllIidioOWg3yNe2p7aVxoVFhYQF1ZPF9bQC0uMC0uMC0uMC0uMC0uMC0uMC4uLi4uLi4sLS4tKy0sKi0sKi4qJy4qJy4qJy4qKSwqKyspKispKispKispKiooKSooKSooKSwqKywqKywqKywqKywqKywqKywqKywqKywqKywqKywqKywqKywqKy0rLC0rLC0rLC0rLC4sLS4sLS4sLS4sLS8tLi8tLi8tLi8rKjAsKzEtLDEtLDEtLDEtLDAsKzAsKzAsKzAsKzAsKzAsKzEtLDIuLTMvLjQwLzkxLzoyMDszMTw0MT0zMT0zMT0zMT00Lz4zLz4zL0AyL0AzLUE0LkM2MEQ3MUU4MkY5M0g5NEk6NUo7Nkw6Nk45NFE4M1Q1MF43MmU2MG82L3g4L4I5MIo6L5A8MZQ+MZk/NJs/NJs/Mp8/MaVBMq5CNbhEN79FOsdHPstIQMpKQcNJPrZGOqpCNZ5BMJlALplBLZlBLZg/LZc+LJc+LJk+LJk9Lpc+LpU8LJQ9LJM9LpA9LY49LIo9K4o9LYk8LIg7KYg7KYc7K4c7K4Q7LIQ7LIM7LYA7LIE7L4A8MYA8MYE+NYNAN4NDOodEPIhFPJRMQJZIPJ5HPqdKQ65MSa5RTK1dVqpqXqeAb6GPeZqago+bg4aVgHqLeG17amJtXVNaSlFVRktPQEVJOkBENjs9MDU3LDEzKDAxKS8wKC4vKS4tKC4tKS4tKS8uLDAvLS8uLC8uLC8uLC8uLC8uLC4uLC8uLC4uLDAvLS8vLTAvLS8vLS8vLS8vLS8vLTItMTcsOjYqODMtMTk2MUhKP2JmWHuAeouQk42To4+WsIyVtoOQsoGQr4WZso2ktpKos5Ooq5Cko4ygnoeemIKZj32YiYGci4ijkJSwmpixm5Stl4ujjYWbhH6Re2t8aVhmT1NWO1pWOV5aPSsvMisvMisvMisvMi0uMC0uMC0uMC0vLi0tLS0tLS4tKy0sKi0sKiwrKSwrKSwrKSwqKywqKywqKyspKispKiooKSooKSooKSwqKywqKywqKywqKywqKywqKywqKywqKywqKywqKywqKywqKywqKyspKispKispKiwqKy0rLC0rLC4sLS4sLS8tLi8tLi8tLi8rKi8rKjAsKzAsKzAsKzAsKy8rKi4qKS8rKi8rKi8rKi8rKjAsKzEtLDMvLjQwLzkwMToyMDszMTw0Mj0zMj0zMTwyMDwyMD0yMD0yLj8xLj8xLkAyL0EzMEI1L0M2MEQ2M0M4NEQ5NUU6Nkc5Nkg5NEs4NE41MFg3Ml82MGk3MHI3L306MYY8MYw+MpA+MpdANpc/NZc/NZc/M5xAM6NDNatDNrNFOLpFO71HPb5IPrlHPbBEOKVANJs/MJdAL5dALZdALZY/LpU+LZQ9LJU8LJY9L5Y9L5U8LpM7LZI8L448Los8LYk8LIk8LIg8LIc7K4Y6KoY6KoY6KoM6K4M6K4I6LIA6LoA6MIA8MYA9NH8/NoJCOYNEPYdGQIhIP5FLQZJIPZpHP6NMRahQTKhYUalmXaZ2aKKMd5uZgJWkh4yjh4adg36RfXSCcWp1ZVxlUlZfTE5VQ0VMOj9GNjxAMjc6LzU4LTAxKS8wKC4tKC8sJy8rKC8rKjEtLDIuLTEtLDEtLDEtLDEtLDEtLC8uLDEtLC8uLDIuLTAvLTIuLTAvLTAvLTAvLTAvLTItMTgsOjUpNTErKzY2LEdMOGBoUXqDcIiSh42Xlo+aoI2ZpYaWo4ebopCqqZu5saDAs5i3qJq2p5u3qJi3pZGxnImrkomrkJCxlJKzlpW0lZCtj4iihYSbgXuSeGd6ZFRiSVFUOVZVOVhXOywwMywwMywwMywwMy4vMS4vMS4vMS4vMS4uLi4uLi8uLC4tKy4tKy4tKy0sKi0sKi0rLC0rLC0rLCwqKyspKiooKSooKSooKSspKispKispKispKispKispKispKispKiwqKywqKyspKispKispKiooKSooKSooKSwqKywqKywqKy0rLC4sLS4sLS8tLi8tLi8rKi8rKjAsKzAsKy8rKi8rKi4qKS0pKDAsKzAsKy8rKjAsKzEtLDIuLTMvLjQwLzoxMjoxMjszMTw0Mj0zMjwyMTwyMDsxLz0yMDwxLz4wLT4wLT8xLkAyL0E0Lj80LkA1MUA3MkA5M0E6NEI5NEM4NEY3NEg1L1E1MVg1L2E2L2w4LXU5LoA8L4Y+MIs9MZM/NZU+NZM/NZM/NJVCNJpCNKBDNKVENKxCNbBEOLRFOrFFO6pCN6E/NJo+MZY+MJU/LpQ/K5M9LJM9LJM8K5M8K5Q8LpQ8LpM7LZI8LY88Lo07LYo7LIk8LIc7K4c7K4Y6KoY6KoU5KYM6KYM6K4E5Kn85LX85LYA8MX88M34+NYBBOIJDPIVGP4hJQopJQ45KQZBHPpdIQ59OSqdWUqdgWqlwZaSDcpyUfZahg4+oioiniIOghH6WfnmIdXB7amRwXF1pU1JeSkpTQEJLOj5FNTpAMjk8MTM0LDIyKjEuKS8sJy8pKTAqKjErKzIsLDErKzErKzErKzErKzErKzAsKzAsKzAsKzEtLDEtLDEtLDEtLC8uLC8uLC8uLDIsLjgqNzUoMTMrKDU2JkVLMVxnR3WCZIaTeY6bipGelJCfmouemI2ll5e0nqLFpanOraXJrabKsKfLsaTIrJe+n4uzkYiwjY2ykI6yjpCyj42sioShgoCZe3eOcmR4XVFfRU5SN1FRNVNSNiwwMywwMywwMywwMy4vMS4vMS4vMS4vMS8vLy8vLy8vLy8vLy8uLC8uLC4tKy4tKy8tLi4sLS4sLS0rLCwqKyspKispKiooKSspKispKispKispKispKispKispKispKispKispKispKiooKSooKSooKSknKCknKCspKispKiwqKy0rLC4sLS4sLS8tLi8tLi8rKi8rKi8rKi8rKi8rKi4qKS0pKCwoJzAsKzAsKzAsKzAsKzEtLDIuLTQwLzQwLzoxMjsyMzsyMzwzND0zMjwyMTwyMTsxMDwxLzwxLz4wLz0vLj4wLT8xLj8xLj4zLz02MDs2MDs4Mzw5ND06NT45M0A3MkM2MEc0Lk80K1k0K2Q1K244LHg6LX87LoU7Lo88NJE8NZA+M49AM5BBMpNCMZdBMplAMKA+MaZANKpCN6pCOaVANp8+NZc9MpU/MpI/LZI/LZE+LJA9K5E7KpE7KpI8LZI8LZE7LpE7Lo47LY07LYo7Log6LYY6LIQ7LIU5KYU5KYM6KYI5KII5KoE5Kn44LH44LIA8MYA9NIBAN4FCOYRFPoVJQYhLRoxNRoxJQY5IQJhKRqFTT6hdWKloYql7bqSOeZmcgZKnhomsi4KqiIChhH+ZgH6Ld3iBbmp4YWRyW1poUVFdSUlUQ0NMOz5ENjw/NDY3LzQ0LDMwKzArJzEoKTEoKTIpKjQrLDIpKjIpKjIpKjIpKjIpKjAqKjAqKjAqKjErKzErKzAsKzAsKzAsKzAsKzAsKzErLTYpMjUpLTQtJTQ2IUFIJldjO3GAV4KSbY2cfZCghpCijIuhio2oiZW4jqDIlKTQnanTq6jSrqfRraHLpZO9l4Wvh4KshIewhoiuhYyxiIurhoGfe3uUdHGIa19zV01dQklPM0pNMEtLLy4vMSwwMS4vMS4vMS4wLy4wLy4wLy8vLzAwLjAwLjAwLjAvLTAvLTAvKy8uLDEtLDIuLTEtLDEtLDAsKy8rLCwqKyspKispKispKispKispKispKispKispKispLCspKispLCspKi0oLCooKSwoKSknKCknKCgmJyooKSspKiwqKywrKS0rLC4tKy8uLC8uLC0sKi0sKi8rKi8rKi4qKS0pKCwoJywoJzEtLDItKjItKjItKjMuKzQvLDUwLTYxLjszMTszMTw0Mjw0Mj0zMTwyMDsxLzsxLzwxLzwxLz0vLj0vLj0vLD4wLT8xLj0yLj00LT02Ljs4MTk5MTk6Mjk6Mjs4MT82L0MyK0oxLFQyKV4zKmc3K285LXU9Lno8L4c9NIs9M4s/MoxAMo5AM49AMZI/MZU9L5g8L5w+MqJCNqFDN55CN5k/NJY+MpQ+MZQ+L5M9LpA9LY88LI49LIw9LIw9Lo0+L448Lo48Los8L4o7Lok7Log6LYY6LIQ7LII6K4I6K4A7K347Kn47K3w6Kn05LHw6LoA+MoE+NYBANoJDOoNHPYVKQodORYtPR4xJQ45JRJNQSphcVJ1oYJ11aZ6HdZ6YgJShhY+qiYmsi4Ooh4ChhH6bf3qQeXSIb2p+Y2J5XVxwVVVnT09cSEdSQUFIOD1BMzg4Ljg1LjcvLDMrKTIoKTIoKTMpKjQqKzAqLC8rKjAqLDAqKjAqLDAqLDIpLDIpLDMqLTErLTErLTErLTAsLTAsLTAsLTErLzQpLzQqKzQtJTQ2IT9GJVRgOG18UYGQZ4mZdI2eeo2hfoiheoqne5G2gpvEiJ/LkJ/JmZ7HnZ3GmpjBlYy3ioKtgIWugoy1iYSrf4muhYmpgn6ceHaPb2yDZlpuU0paP0dNM0ZKMURGLi8wKy4wKy8wKzAxLDAxLDAxLDEyLTIxLTMyLjQzLzQzLzYyLzUxLjQxLDMvLDQvLDUwLTUwLTQvLDMuKzIsLDEtLDAsKzAsKy4sLS4sLS0tLy0tLywsLisrLSopLikpKy4pLy4pLS8oLy4pLS8pLS4pLS4qKy4qKy8rKi8rKi0sKi4tKS0tKy0uKS4vKi4vKi0tLS0tLS4sLS8tLi8uLDAvLTIuKzIuKzItKjQsKTUtKjYuKzgvKjoxLDoxKjsyKz00LT00LT41MD41MD41MD00LzwzLjsyLT0yLjwxLTwxLzswLj0vLj4wLz4wL0AxLkEwKUAyKTs0Kjc3LTM5LTE5LjQ3LjgzLT8tKUYqJ0wpJ1MqJlovKGA1LGQ8MGtAMHlBMn9AL4ZBMotCM49AM5M9MJM7L5I4LZM7L5M9LpRBMZVCMpRDMpJBMJE+LpE7LJc7MJc6MpI7MYw9MIg/MIQ/L4I/LoM+LohAMYg/MIo+MYo8MIk7L4g6LoY6LYM7LXs5K35AM3c8LnE3KXc+LXc+LXY7LX0/Mns7L4JANIdFOYlJP4hMQYZNQoRQQ4dORZFLSZdTUJRiWZFwYYp9aoeJcYmWeoqfgI2kh42miY6nio2njIekiH6fgnWae2+XdWmNaWKEX1t6WFpzVVpuU1dlTlBXRUpLPUM/NkA5MzswLjYqKjMnKTMnKzMnKzAnKisrLSkrKioqLCooKSwnKy4oLDEoLTInLTMoLjMoLjMoMDIoMDApMDApMC8qMS8qMC8pLTErKzAtKC8vIzw/KlZcQHB6WH+LZ42cdYudc4yhdoymd4qodomqdY60e5m/hp/Bj52+j5a6io+zg4iufYWrfIOqe4WqfoOofYOmfoCefHmUdXKJbWh8Y1lrVU1aRklRPENIND9CLy8wKjAxKzAxKzAxKzEyLDEyLDIxLDMyLTQzLjQzLjc0Lzc0LzYzLjUyLTUwLDUwLDcvLDcvLDYuLDYuLDMuKzItKjAsKzAsKy4sLS8tLi8tMC0tLy0sMSsqLykqLikoLS4pLy8oLy8oLy8oLy8pLS8pLS4qKy4qKy8rKi8rKi4tKS4tKS4vKi4vKi4vKS4vKi4uLi4uMC4uLi4uLi8uLC8uLDEtKjMuKzUtKjUuKDcuKTgvKDovKTswKjwyKT0zKj41LD41LD41Lj41Lj41Lj00LTwzLjwzLj0yLjwxLTswLjswLj0vLj0vLj4wL0AxLkMwKkMwKUEyKz40Kzo2LTk1LDozLTwxLT8tK0QqKUkqKE4rJ1QvKVo1LV86MWU9MXBBMXhAL4BBMIhAMo8/NJE9M5M6MpM7MY05Los8L4s+LoxAMI1BMY1BMY5BL5E/MZU7MpU7MpA8Mos9MIY+MINAL4E/L4I/LoVAMYY+L4k9MIg8Loc7LoQ7LII6LIA7LHg4LHg8MXM5LW45K3M+LnM+LnI4KnU6LH09MYNBNYlFOotJPYlLQIZOQYRQQ4dORZFKSJdTUpJmXYx3ZoOHcH+Td4Cff4SmhYiniI2nipCni5CnjYqkiYGfg3ecfW+YdmWSaWCLYFmCWll7WFx3WFpuU1NhSk5VQ0ZIO0NANzw3MzcvLTMqKzIpKjEoKy4oKisrKykqLCspLCspLC0oLC8pLTIoMDIoMDMoMDIoMDIoMTApMS8qMS0qMS0qMy0qMTItMTIuLTAsKS0tJTg6LFNYQm94XYCLaYeWb4aZbIaeboijcIakcISlcIqtd5O2gJm5h5a2hJOzgY2vfIareIKod4KoeYOofIOmfIKkf3+de3iSdXGIbmh7ZVlqV01aSEVMPEBENTs9LzEyLDEyLDEyLDEyLDIzLTIzLTQzLjQzLjU0LzU0Lzg1MDg1MDg1MDc0LzcyLjYxLTgwLTgwLTcvLDYuKzQvLDMuKzEtLDEtLDEtLi8tLjAuMS8tMC0tLywsLisqLyspLi8oLzEnLy8pLS8pLS8pLS8pLS4qKy4qKzAsKzAsKy8uKi8uKi8uKTAvKi8wKi8wKy8vLS8vLzAuLzAuLy8uLC8uLDEtKjItKjYuKzcwKjkwKzoxKjwxKz0zKj40Kz81LD82LT82LUA3LkA3Lj82Lz41Lj00LT00LT0yLjwxLTswLjswLjswLjswLjwxLz8xLkMyK0UwK0gvK0stLUwsL0srLkkqL0UrLkEtLEAuKkEuKEUuKE0uKVgxKmIzLWc1Lmo6LG87LXc7MIE9NIc8Now8NY06NI06NIo8Moc9MoY+MoU/M4ZBMolBM4xCNY9DNY4/Mo89L4w+MYo+Loc+L4U+LIY9Log8LIk7Lok8LIg6LYY6KoM7LH88KX49K3s8K309MXo8MXY6L3U7L3hAMXhAMXY8LnY7LX8/NYJCOIlGPYtIP4lKQYdLQYdOQ4pORpFKSJhUUZZmXJB2ZYeFboGRdH+de4GlgYWoh4iqiY2qi5CpjI6liYifg4GafXmYeGmWbWGSZVyLYVyGYF2CYFt8XVVyVlBoUEZZRUJQPzpEOTM6Mi4zLCovKSosKSoqKC4oKDEmKjEmKjEmKjAnKjEoKzIpLjErLy8qLi0rLiwrMCssMCktMCgtMCgtMSktMDEvMjMvLi8rKCoqIjU3KlBVQW11XXyKaYCQa36Tan+ZaoOfboCgbn6gbYClcYeseI2vfIuteoiqd4SpdYGndH+ndX+md3+meX+keYCifX2beXeRdHCHbWh8Y1lrVU1aSERIOT0/Mjk5LTIzLTIzLTM0LjM0LjM0LjQ1LzU0LzU0LzY1MDc2MTk2MTo3Mjo3Mjk2MTk0MDk0MDoyLzkxLjkxLjgwLTUwLTQvLDMvLjMvLjMvMDMvMDEvMDEvMjAuMS4uMC0tLy0rLjApMDIpLjAqLjAqLjAqLjAqLC8rLC8rKjEtLDEtLDAvKzAvKzEwKzEwKzAxKzAxLDExLzExMTEvMDEwLjEwLjIuKzMuKzMuKjkyLDkyLDsyKzwzKj40K0A2LUA2LUE3LkI4L0E4L0I5MEE4L0E4MT82Lz41Lj41Lj0yLj0yLjwxLzswLjswLjwxLz0yMD0yLkIzLkUyLkwuLlIrMFYnL1UmLlAnL0kpLkMvLjwxKzsyKT8yKUgxKVIvKV8uKmQvKWk5L2s7L3U8M308NoU7OIk7OYo7N4g6Nok+OIZAOIZCOYVCOYVDN4ZCN4dBN4lBNYhAMYhBL4dALodALoc+LYg8LIg7K4k6K4o4Kog5Koc6KoM6KX88KXs9KHg+KHg+KoI+MXs3Lno3Lno8MXY7LXc9L3xBM3tAMoBCN4NFOoZIPYhKP4dLQYdNQohPRIpRSI5TS5BcUY5oW4t0YoV/Z4CLbX6Wdn+efIOng4SqhYeqiYuqioumh4eggoOafn2YeXGVb2mUaWaPZ2aMZWeLZ2SGZV9+X1p3W1BoUEteSkJQPzhENjI6Ly40KiwvKCsqJTImJjUlKDQlKDImKDEnKC8pKy8rLC4sLSsrKyorLSorLSgsLSgsLycsLycsLyorLS4qKzErKzArJy4rIjg4LFBVQWlxWXaDZXuMaHmPaHyWaX+cbH2fbXmea3qgbX+lcoKndIClcX2kb32jcH2lc36ldn6leH2keHyheH2fenqZd3WQcW6HamV8YlhsU05bR0RGOT89MTo4LDQ1LzQ1LzQ1LzU2MDU2MDU2MDc2MTc2MTg3Mjg3Mjs4Mzw5NDw5NDw5NDw3Mzw3Mzw0MTw0MTszMDszMDgzMDcyLzYxLjYxLjUxMDYyMTYyMTMxMjMxMjEvMDAuLzEtLjIsMDQrLjQrLjQrLjIsLjIsLDIsLDIsLDMvLjMvLDMvLDMvLDIxLDIxLDMyLTMyLjIyMDIyMDMyMDMyMDUxMDUxLjYxLjYxLTs0Ljw1Lz00LT82LUE3LkI4LkU4L0M5L0Q6MUQ6MUU7MkQ6MUM5MEI4L0A1L0A1Lz4zLz4zLz0yLj0yLj0yMD0yMD4zMT4zMUA1MUUzMU0wMlQsNFgpM1coMlIpMUssMUIzMDo2LTc3Kzo2KkI0KU0yKVgvKV4vKWY6MWo7M3M8N3o9OoI8OoY8O4c7O4Y6OoE6NoE+OIFBOIFCOYNDOoNDOoVAOYRAN4JDMoJDMYNCMIQ/L4Y9Log8Lok6LYs5LYk3K4c4K4U5K4I6K349K3g+KnY/Kng+KoE5LXwvJ4I4L4Q+NHc0K3M1Kn1BNn1DN39FOoBHPIJJPoNKP4RLQoZNRIdRR4VXSn1gTntpUYBwWYF1XYJ8YoOGaYaTdYidfIOjfoGngIKqhYKshoGphH+lgHuefXqZd3qScHqQbHiNbHeMa3WNbXKJbG2EZ2t/ZGByWFtpUlJbSEhMPUBANDs3LDcwJjUqJDYoJzUnJzMnJzEnJi4pJisqKCsrKSstKicsKCcrKikrKikrKioqLCspLCspLC0pKiwjJDIqJzUwKjg2KkJDNVVaRmZwV259XnSIZXGKYnWQZXiYaXaaanOZaHSaaXefa3qibnigbHefa3igbnmjcXuldXuld3yjd3medXqcd3eWdHOOb22GaGR7X1drUE5bR0NDNz46MTk1LDU2MDU2MDY3MTY3MTc4Mjc4Mjg3Mjg3Mjk4Mzo5ND06NT47Nj47Nj47Nj45NT45NT83ND83ND42Mz01Mjs2Mzo1Mjk0MTk0MTg0MTg0Mzk1NDg0MzczMjQzMTUxMjQwLzYtMDYtLjYtMDYtLjQuLjQuLjQuLjQvLDQwLTQwLTQwLTUxLjMyLTMyLTQzLjQzLjQzLzMzMTU0MjU0MDg0MTg1MDk0MDo1Lz02MD43L0A3LkE5LkM5L0Q6MEc6MUg7MkY8M0Y8M0Y8M0Y8M0U7MkM5MEI3MUE2MEA1MUA1MT80MD4zLz4zMT80MkA1Mz81M0A3MkM1MkkzNVAxNlQvNlMuNVAwNUoyMkM1Mj05MDw6LT06K0M3KUk2KFEzKVcyKV0yK2QzLGw1MHY2NH03N4I4N4M3N4I2Nn43NX06NH08Nn0+NYA/OYNAOIY/OYVBOIBCM4BDMYFCMYNAMIU9L4c7Log6Loc5LYU5LIM5LII6LH88LHw9LHk+LHg/LHw9LIc1KosyLKFMRahYUYtBOHw5MIJGO4BLPXlIOnpKPHtNPnxOP31PQoFRRYdVSoJfTHJrT29zUnx1WIZ2XI95Yph/aZ+Lc6CUepaWeo+dfIujf4iogYWngoCkfnufeX6ZdoORcIWOb4OOcICPcH+QcHuOcHeMbXOHa2p+YmZ2XF9oU1ZbR09NPkdBM0A2Kj0wJzssJzkrKDYrJzMrKC8sJywtJysuJykuKCkuKCstKC0sKi8rKjMpKjQoKjcnKjcnKDMoJDwzLEU+NElHOlFSQF1iS2dxVmp5Wm6CXWuEXGyJXXCRYnGVZW+VZG+XZXKaZnWfbXKcanGbaXSebniicnqkdnmidnmfdnaadHeZdnWUcm+Na2qFZmN8XlVsT05cRUNDN0A5MTs0LDY3MTc4Mjc4Mjc4Mjg5Mzg5Mzk4Mzo5NDo5NDs6NT47Nj88Nz88Nz88N0A7N0A7N0I6N0I6N0E5NkA4NT04ND04NDw3Mzw3Mzw3Mzw3NDw3NDw3NDs2Mzk1MjkzMzgzMDgvMDkvLjgvMDgwLjgwLjgwLjYxLjYxLTYxLTYxLTUyLTUyLTYzLjYzLjc0LzU0LzU0MDU0MDg0MTk1Mjo2Mzw5ND04NEA5M0A3MEE4L0M5MEQ6MEc6MUg8MEk9MUk9MUo9NEo9NEo9NEk8M0Y8M0Q6MUI4L0E3LkE4MUA3MEA3Mj82MT82MUA3MkA3MkE4Mz83NEA4NUI4NkQ5N0c5Nkg5Nkg5Nkg5NEU4MEU4L0U5LUU5K0c5LEk5Kks5K1E3KlovJmQvJ24zLXo2M4M5OIk7OYs7Oos9O4tBPodAOoI9Nn88M386M4I8NIg9N4lAN4NBNYFCM4JAMoM/MoM9MYQ8MIE7L4A8L348Lnw9Lns9Lnw+L3w+L30+L389L4Y5L5AxK6M7OM5rZtt+ea1aVIxDPIhMQX9OQHRKPHFNPXBRP3FSQHRTQHpXRIJbSn5lT21zT297VYR5W5h1X6lvY7ZtZr5xa713b7uCd7GMeqeXfp6fgJahgY2hfoWdeYWZdoiRcouQcoiRcoSTcoCWcnyWc3iTcHSScG2LaWmEZWR4XF1rUVZeR01QO0VEMEI7K0AzKz8yLDswKjcwKjMwKTAwKC4vJy4vKS8wKjIvKjYsKzoqKz4oK0MmK0UkK0MmKEY1LUxDNFZQQFtYRWBiTGdtUWl3Vmp7V2yCW2eCV2aGV2yOXG+UYW6UYW6WYnKaZnOda2+bam+ZaXKcbnafc3mieHied3WbdnOXc3WXdnOScm6LbGmEY2J7W1RtTU1dQ0dIOkU8NUA3MDc4Mjc4Mjg5Mzg5Mzg5Mzk6NDo5NDo5NDs6NTw7Nj88N0A9OEA9OEA9OEE8OEE8OEM7OEM7OEM7OEI6Nz86Nj45NT45NT04ND45NT45NT45NT45NT04NTw3Mzo1MTszMDowLjowLjkxLjkxLjkxLzkxLjkxLjcyLjYxLTYxLTYzLjYzLjYzLjc0Lzc0Lzc0LzU0MDY1MTk1Mjs4Mzw5ND86NEI7NUI7M0E4L0I6L0M5L0U7L0g8MEk9MUo+Mko+Mks+NUs+NUo9NEo9NEY8M0U7MkM5MEI4L0I5MkI5MkE4M0A3MkA3MkE4M0I5NEE6ND84MkA5M0I7NUQ9N0Y9Nkc8Nks8NU47NE02Lk42LFE2K1E2K1E3KlA5K1A5KVY2J2Y2KnI2LH47M4lAOZVEQJtIRJ9KR59MRqBRSplMRI5EO4U7MIQ3LYU3LYw5MY09NIg+NYc+N4Y9NoU8NYU8NYE9NH09M3o+M3hAM3ZBM3hAM3o+M388M4M6M4g3M5I0MpgoJrM9O+17ev6VksVoY5ZHQIlLQHhIOm5NPGpRPWZUPmhWPmxYQHRbRX9gTIBoUHlzUYR3VZ50XLRsXslfX9NWXNlRW9dUXORvddl6eMyGfMCPfrWVgKuVfaOSeJ+PdpyKcpyKdJmNdZWPdZGRdYuSc4aRc4KRcnyLbnmGanV7YW1vV2diTl9UQlVFNVI8L080LU0xLUkwLEQvKj4vKDkvJjcuJzYvJzgxKTovKT0uK0EsK0YpK0goK0snK0gpJ1RCNFlRPGReSGdlTGlsT251Vm17WGx+WGuEWmeEVmeHVm2PXXCVYnGWYnKZZHWdaXSbbG+Za2+WanKZbXeddnmfeHeaeXSWdXOUdXWUdXOQcW+Ka2mEZWF8W1RtTU1dQk1OQEtCOUY9Njk6NDk6NDk6NDk6NDk6NDo7NT08Nz08Nz08Nz08N0A9OEA9OEE+OUI/OkQ/O0Q/O0VAPEVAPEVAOkQ/OUQ/OUM+OEU+OEQ9N0I7NUI7NUI7NUI7NUI6N0I7NUE6NEE6NEE4M0E4M0E4M0A3MkA2ND43MT43MT43MTw3MTw3MTs2MDo1Lzk2Lzg1Ljc0Lzc0Lzk2MTk2MTk2MTo3MDw3MT04MkE6MkI7MUM6MUQ8MUY8Mko+Mks/M0xAMk5AM05ANU5AN05AN0w/Nks+NUk8M0g7MkU7MkU7MkI5MEE4L0A5MT84MD84MD84MEA5M0A5Mzw1L01EPU1AOks6M1RAOVI2Mk8wK2E8NlwzLWA1LmA0K14vJV4vJWY2LG09MXE9MIpKPo9HO5dJP59LQZ9GPps+N5s+N55EO6ZORKRQRahWSqtZS6VPQplBNZc7MJs+NpM5OJE5OIw2NYY1MoY4NIQ/OHxANnI+MXJCNG9BMnE9MHY6MII3Mow0M5ItMZonLMhISehiYcVFRM1XVeF5dqtWT4ZGPIRWRm1SPWlbQWliRmplSGpgRW5eRHxkTI1qVJJiTLJtXdFuaNtYXeA7TOctRfIrSPUwTPZAWexJXORbZeVucuJ7fNuAfduDf9iJgsN/dr2Bd7qEeLaGeLKIeK2Kd6iLeaWMeJqAb5l+bZh4aZNvYY1iWYRVTXtJQnhBPnU6PGkuMmQwNGEwM1AmJ0clI0wwLU01MUc0LkUyLEQxLUYxLkYuLEYqKUstLVE2L1lINGBXOmZfQmdkRWtvTnV8WnWEXW+BWWyDV2yHWnCNXXKSYXOVYnWXZHeZZnabaHGVaXOYb3OXcXGVb3OVdHeZeHqYfHmWeniVeXONcm2HamuEZmmCZGF6WlRtTU9fRE5PP1NLQFBHPjk6NDk6NDk6NDk6NDo7NTs8Nj49OD8+OT49OD49OEE+OUE+OUI/OkNAO0Q/O0Q/O0ZBPUVAPEVAOkVAOkQ/OUQ/OUU+OEU+OEU+OEU+OEU+OEQ9NUM8NkM8NEQ7NEM6MUI5MkI5MkI5MkI5MkI5NEE4M0A5M0A5Mz43MTw3MTs2MDs2MDk2Lzg1Ljc0Lzc0Lzk2MTk2Lzk2Lzo3MDw3MT46MUE6MEI8MEM7MEU7L0k9MUo+MExAMkxAMk5AM05AM05ANU5AN00/Nks+NUk8M0g7MkU7MkU7MkM6MUI5MEA5MUA5MUA5MUA5MUE6NEI5MkQ5M0o3MUwvK1YuLGo3NnU5OXs7O4VFQ4NEP4RIQIVJP4ZIPY5KQZlOSKFQTKJPR5NEN5RCNJpCNp9DOKA+M5w3LZw3LZ89MKNDNZs/MJlAMKBFM6RHNqdGNq5IOrZORbRMTa9ITKVARJk5O5E5OI0+OoNAOHg+M28+MHpJO4VMQYQ/OIQsK5IpLrM5RNJMV9xLTt9NTco+PcBAP9BgXLNZUYRANYJURHlhSWVbQF9eQGloSXNsT3ZnSn5kS5ZjTrxkWNZfW+ZVWutBTvIsRf4lRP8mSP8nSf8uTvkzTvI8UvBJWutQXuVRXeNTXeBYYttiadVmbNRqbtJtcc9xcs11dMl4d8d5d8p8fMl5esh2eMdxdMZrcsVmbsVha8Nfa8VgbrNTX6VLV5pHUY1ES4ZFSW02OUgcG1QxLU0wKkgxK0o2L0s4MUs6Mk8+NlVFOFtPNWNaOWdhQWlmRW5yT3qCXXqJYnSGXnKJX3CJX3CLYHGOYHWSZHeUZHeUZHeUZnOSaXiWcnqXeHmWeH6YfYOdhIWdh4ObhYGZg3qSenKJb22EaGiBZGB5W1RtTU5hRVJTQVZQQlVPQzg5Mzg5Mzg5Mzk6NDs8Njw9Nz8+OUA/OkA/OkA/OkNAO0NAO0NAO0NAO0Q/O0Q/O0ZBO0ZBO0ZBO0VAOkVAOkVAOkdAOEY/N0pBOklAOUg/OEc+NUY9NkU8M0Y8M0U7MUQ6MUQ6MUQ6MUQ6MUQ7NEQ7NEQ7NEM8ND84MD84MDw3MTs2MDo1Lzo1Lzk0Ljk0Ljk2Lzk2Lzo1Lzs3Lj43L0A5L0I5MEM7MEU7MUY8MEk9MUs/MU0/Mk1AMFBAMU8/MFA/NU0/NEw+M0s9Mkk8M0g7MkU7MUQ6MEM6MUM6MUE6MEE6MD87MkA8M0A8M0Q7NFVEPFQzLmoyM45BR61MV8NVYstdZsZfY5tCPpdJP5ZMQZxOQqxSSr5VUsxPU8RMS6VANJ1CMKBAMKU/MaU7LqM3K6Q4K6c9L6tFNqE+K5g3JJ06J6U+LaxBL7JDMrZEOqcwMq86QrlETL1MUrpNUq1LTJZBPoI3MXs4L3Y2LHgyKoQxLZwzN7k9R9VHV+hNW+JGSc81M9A6Ob0zMchOS8ZjXZRKP4xbSn1jTGpfQ2dkRXRvT39wUYFoSo1oTrBoWeRiYvVRWvREUfY3Sf0xSv8yTv8vTf8rSf8yT/wwS/cxSvU1TPI0TfAyS/MzTPM3UPJAWO9DW+5GXe1JYetOY+pRZehVaOhWa+VTauRSaeNPaeROaedObOtQb/JTc/NWdf5ohfFhfOVbddVVbM1ZbMlkcqhSXXItMl4mJ1kwLFc6NFE/NUI6LTo4KT5CMUxOOVZPM2FWNmVfP2hlRHF1VH+GZX6MaXeIZHiMaXWLZXKLZHKLY3aMZXmPaHqQaXqQaoCVdoSbfoqehY2gipKjkJeolpipmZammZGikoeYhnqNeXCDbWd+Yl53WVRtTVBjR1NYRFhVRFlWRzc4Mjc4Mjg5Mzk6NDs8Nj0+OEA/OkFAO0JBPEJBPERBPERBPERBPERBPEVAPEVAPEdCPEdCPEdCPEZBO0ZBO0ZCOUhBOUhBOUxDPEtCOUpBOElAN0g+NUc9M0Y8MkU7MUQ6MEQ6MEU7MUU7MkQ7MkU8M0U8NUU8NUA5MT84MD04Mjw3MTs2MDo1Lzo1Lzo1Lzk2Lzk2LTs3Ljs3LD84LkA6LkM7MEQ8L0Y8MEY9Lko+MEs/L01AME1AME8/L08/ME8/Mk8+NEw+M0s9Mko8M0c6MUU7MUQ6MEQ7MkQ7MkI7MUA8MUA8M0E9NEI+NUc9NFM4MVsqJok6P75UYNlUZeZUZ+NVY8tKT58zMJY6L5E+MJlBM65GPcVJR9VCSM0+QLFCN6dGNalCM6xAM68/M7A+M7NCNLRENrJHNalCL6M8KaQ7KKk8KKs6KK42Jq0zKLY5N7o5Pb03Prw3PL88QsZKTMRUU75YU5k/N4w0KoksJZ02McNIS9xPV+JBUdszQN46Oc0uKtM4NMg3NMZFQMhdValXS5BXRndXQHZlSX5wU39wUYRmSpBkS6lvW9V1ae5TV/xEUPc7Svg5Sf49Tv9AUf86Tvk0SP8/U/45Tfs0S/0zS/0xSv8vSf8wTv82U/8zVP00Vv02V/o3V/g5Wvg9XPc+XvVAYfhDZvZAZvU/ZfU/Z/g/aPxDbf9Fcv9Jc/9Pdf9Rdf5VdvJTcedUbuVheNZmdrdXYn0xNWowL1kyK1A4LEc+Lz5BLjtELz9HL1BLLl9UOGdgQ29rTnx8YIiOcoeRdn2LcXqNcXyPc3yPc3qNb3qKbX2Mb4OSdYiXepWjipyplaOunaaxoay0p7G5rrC3sKu1raGropWhlYORgnOEcWh8Y110WFNsTlBkSFJaQ1dZRFlaSDY3MTY3MTc4Mjg5Mzo7NTw9Nz8+OUA/OkJBPEJBPERBPERBPEVCPUVCPUZBPUZBPUZDPEZDPEdCPEhDPUhEO0hEO0pDO0pDOUxDOktCOUtBOEpANko9NEk9MUg8MEc7L0U7L0U7L0U7L0U7MUU7MUU7MUQ7MkQ7MkA5L0A5L0A5MT84MDw3MTs2MDs2MDo1Lzs3Ljs3Ljs3Ljw4LT84LkE7L0M7MEQ8L0c9MUc+L0s/MU1AME1AME5BME8/L08/ME8/Mk4+MU49M0o8MUk7MEc7L0Q6MEQ6MEQ8MUQ8MUI7MUA8MUE9MkE/M0I/Nko8M1w1LnczMq1MU9tdaeZNX+U/U9c2RbcmK6gxK503KJI6Jpc8KaxAM8NEPdQ+P807O7E/NahCNKpAMq0/MrJANbhDObxIO7tKPKw+L6o/L6g9K6Y7Kao5KbA6LLc7L7w8McpGQc5EQdA+P9A3OdY3PN5CReJMTt1ST8RDPsZLQ81UTNRTTdlLSts/QuA1PuEyN9s0Lto3LtAxK886NL84NLNAObVbUJZVQ3tOOYJiSYZrUIRgRpFaRa1mVMtyZOdtaOpFS/I6ROo5Q+c8ROdCSOdGS+hHTepGTfRKU/NBTfM4SfY1SPkyR/0vRv8yTP84Uv85Vv85WP86WP06Wv47Xf89X/9AYv9BZf9Daf5Ea/5EbfxDbfxDb/xDb/xCcf5DcP9HcP9AaP9Hbf9NcPJJaOlPa+Vbctljc71ZY44/RGAmJFErIlZAM1ZPPUlMN0BELVJKM2VZQ3VqVoB7Z46NeZici5SdjIeUg4KOgImXiI+bjYyZiIeSgoqTgpeejqSombK2p7i8rr/BtsDBucLDvcXGwcPDw76+vrC1saKpoo2XjHmHdml7ZVxzWVRtT1JmSlFbQlVaQ1dcRjU2MDU2MDY3MTc4Mjg5Mzo7NT08Nz49OEA/OkA/OkNAO0RBPEVCPUVCPUdCPkdCPkdEPUdEPUhDPUlEPklFPElFPEtEOkxFO0xDOktDOExCOEtBNUxANEs/M0o+Mkk9MUc9MUc9MUY8MEY8MEU7MUU7MUQ7MkM6MUE6MEE6MEA5MUA5MT04Mjw3MTs2MDs2MDs3Ljs3Ljs3LDw4LT85LUE7L0Q8L0U9MEg/MEo+MEw/L01AME5BME5BME8/L08/L08/ME4+MU08Mkw7MUk7MEc7L0Y5MEM5L0M7MEI8MEI7MUA8MUA+MkE/M0I/Nk47NG04NJdGRcRZX9tXYt9DUd44RtQzO70rK60xJ6E4JZg6IZc5IKQ7JrY+LsM6Mr43Mac3LKI6LaU5Lac3LK86MbhCOLpFO7dFOq4+Mq0/MKc8LKQ2J6o2KbY+MMNEO8pHPb44Lc5ANuFEP+xCQvQ9QfM5PusyN94uMNs3NeJHQuhTTOVOR9w9OdkxMOMvMuo2N9kxKN48L80sItA3Mb4zLLA3L8lnXLhsXI5XQ4daQ4NWP4lSPalcTM5sYeFnYuRUVPBFS/E9RuQ7QNk9PtJBPtJHRN1PTetXV+1OU+9ETfI5R/Y1RvgxRvguRPsxR/43Tv44U/04VP04Vv45V/87XP8+Yf9BZf9Da/47Zf08aP0+av0/bfo+bvg+b/Q9bfY6av9Icv87Yf8/ZP9Lbv9LbvdObe9Vb+NabuhygsRgapdIS3Q6OFw2LVA5K1BDMlVNOl5RQXJlVYh8bpWNgp+dkaann6Cnn5SdmJWem56npKavrKasqKKno6aoo7W0sMLBvMzJwNHOxdXQzNXQzdTOztXP0dHLz8vGyr+9wLCyr5ifmICMfm1+a2B0W1duUlZqTlNgRlZgRVhgSDU2MDU2MDU2MDU2MDY3MTg5Mzo5NDs6NT08Nz49OEE+OUNAO0RBPEZDPkhDP0hDP0dEPUhFPklEPklEPkpGPUpGPU1GPE1GPE1FOkxEOU1DOU1DN05CNk1BM05AM01BM0pBMkpBMklAMUg/MEc9MUY8MEQ8MUM7MEM6MUM6MUE6MkA5MT84Mj84Mjw3MTw3MTw4Lzw4LTw4LTw4LUA6LkE7L0Q8L0U9MEg/MEs/MU1AME5BMFBAMFBAME9ALU8/L089L089MU09MEw8L0g6L0Y6LkU4L0M5L0I6L0E7L0E6MD87MD89MUA+MkBANFA5MXIxL6hKS8BSVbs+RL0wNsIwM8EvL7oxKakxIaM5I5w9IZk7H5s8IKE9I6U7JaQ2JZ42KaA4LaI2LKU0LK04MbdAOrhDPLJANrFCN61BNKg8L6Y4K686MLxDOMNEPcVAN8M+Lc8+Ldk1K+EqJu0iJfolK/8qMf8uNO0pKucuK+EzLN80LOAzLOMyLOkwLecyK9oyJdY2JtAyJs83LMU2Lr0+N8hgVdJ/caZlU49WQopNOqNXSchmW99kX+dSVOhDSfVGTe1ARN8/P9RAPMlAOMY/OdFGQeNNTO9KUPRAS/k5SP03SPw1SPgzRfc2R/o7Tfo4UPw3Uvs2Uv02Vf82WP85Xf87Yf88Z/8+a/8/bf9Acf9CdP9Cdf5CdfxCdPlCcP9GbfpBYf5FZf9Lav5La/9WdP9fevVddPJqfuZwftNudq9dYYNDQWc2L2hCN3NVSnllXIx9dqOWkK2jobKuq7a2trK2uaiws7C3vba9xb3BysDDysTDy8nGzdXO1t3X2+La2Ofd2+nd3eba3OXY3+TX4ODU3tnP2MrFy7q6uqKno4iSh3SCcWV4YlxzV1tvU1tqTVxpS11nTDU2MTU2MTU2MTU2MDU2MTY3MTg3Mjk4Mzw7Nj08N0A9OEI/OkRBPEZDPEdEPUhFPkhFPkhFPkhFPEpGPUpGO0tHO0tHO05IOk1HO01HO01FOk1EO01EO01EPU5DP05DPU1DN01ENUtCM0pBMkg+Mkc9MUU9MkQ7MkM6MUM6M0E6MkA5M0A5Mz83NDw3Mzw3MT43Lz43Lzw4Lz05MD46MUE6MkM8MkQ9M0hANUk/M0xAMk1BMU5BMFBAME9ALU9ALUw/L0w+MU09MEw7MUo5MUk4MUU4MEM5MEA5Lz46Lzs7Lzw8MD0+MD4/MUE/MFM4LYc8N8RcW8paWa44NqsuKrEwKq4uJa0yI6w5JqxCKqpGLKZEJ6NBJqNBJqI8I585I6A5KqM7MKY6MKY3Lq08NLZDPLdFO7BANas9MKg8L6k7Lqw8MLtFOcZMQcVFPLw4LL82JM06KN07LuYzLPErKvkoK/0mK/slJ/gqKvUuK+8yLOs0LOgzKuUzKeQyKOAzJeA6KtEyH9w/MM42Kcc3LMI/NbNBNtFsYL9nWaVSQqhPQctjWudoYuZSUupBRvNCSus+ROA6PNY8PM1AOcE+NLY4LLk2LsQ5NOJISOlARfA6RvY6SPo6Sfg4R/c7Sfs/Tv5BVf8/Vv48VP45VP84Vf85Wv86Xv87Y/8+af8+bP8+b/8+cP4/cvpAcvhAdPdBcfdDav9Nbf9Tc/dKaOxBYf1Uc/9nhf9lgvddd+9feOhne9xwfcZxeKdnZ41eWHtaUZd+d6qZkr6wrcS8usbCw8jHzMfHz8PDz8vK2MzK2NHK2tfO39/U5Obb6erg6+3j6+/l5vLo5vTo6PDk5u7h6O3g6erd5+TY4tHK0cG/wqurqZGWj3qGeGx7aGJ1X2ByWGJwVmJvU2NtVDIxLzMyMDQzMTY1MTg3NTk4NDk4NDk4NDs6NTw7Nj09NT8/N0FBOUNDOUVFO0VFO0hIQEhIPkhIPEpIO0tKOExLN01MOE5LOE5LOkpGOkdEO0pGQ05JTU5JUEdET0Q/RU5FPkxDNEpANEtBNU1DOUxCOEY9NEI5MEU8NUM6NUA5Mz83NEA4NT83NTw3NDw0MkM6NUI5NEE5Nj45NT45Nj46Nz87OEA8OUI/OkRAN0dANkpANExAME9ALU9AK0w/LEdALkY/L0k7MEs4MU01M0w3Nko4OEY7OUI/OjY5MDQ8LzlENDpBLzY5JD89KGJDMbxqXrlKQaY3LKU1Kac3K6U1J6U3Jqg9K6M4JKU8JqpAKq1AKaw9Kaw5Jq42Jas2JaQ2J6E3KaI4KqY8LqpAMqxCNKxCMqxBMak+LKs9LK08LLM9L71DNMRGOMA+MboyJsc5K8w4KtA4K9Y4Lds3LeI1LukzL+4xLfEuLPQuLfMwLPExLOo1KuM3Kd06Kds6KNw5JtQzH9AzIM84J8Y3J742KMJCNc9TSchNRc9TS+FcV+5dWvBQUu0+Q/I5P/c/R+pBRt9DRNVBQcg/Obs8M7E7L7A8L7I8MMpLQtRLQ9xGReE+P+s8Qfc/R/0/Sfk7R/5EUfxDUf5EUv9EVf1AVvw8Vf88Wv9CZP9Ga/9Bavo7Z/U6Z/Y8bflDc/1Jef9Lev9Nef9NdPhQc/BPcOdNaepNavxZeP9niP9fg/VHbPdWd+hfecNebr17f4dhXo94cKeRhLunnNHEu93W0N3c2tzb4N7c5+Lb6+bX7OvY7vHZ8fbd8/fi8/fn9PXr9PTu8vn08fn08Pnx7/bt7vPo7O7j6ene5Obd4tbQ1M3Jyru6uKOloIuQiXmDeHJ9b3B7a32Gc3iBbHZ9azAuLzEvMDMyMDU0MjY1Mzc2Mjg3Mzg3Mjo5NDs6NT09NT8/N0FBN0NDOUREOEVFO0hIPkhIPkhIPEpIOUtKNkxLNk1NNU5NOEtKOEtJPUtKRVBQUldVYFlYalZUalJPYE9JS01EP0g/OkY9OEc+OUg/OkY9OEI7NUQ6OEE5Nj83ND83NEA4NUA4NT04NTs2Mj00Lz00Lz01Mjw3ND05Nj46OT08Oj49OUI/OkQ/OUdANkpANE1AME9ALVA/K0xAKkI/LEI/LkY8MEg6MUo2NUk1NkYzNUA2NUA8OTo9Njs+NUBANEU8LUo5KV5CNIBMPq5RQqs7LaAyI6E2JqM6J543JJ45JaM+KqE7Jac8KK4/K7NALbY9LLc5Krk3KbU3Kao5KaU6KqU6KqU7K6g+LqtBMatCL6tALq4/LKs6KLE8K79FNsZIOcE/Mbw4K8A2Kcs3K883LNA5LtE7LdQ8L9g6LuA4L+c0Le4xLfQuK/QuK/EwK+o0KeE3KNc6J9U6JN48J9k2I9U4JdQ9Ksw7KsE1JsQ6L89GPNFGP9pJRulPTfNQUfRHSfA7QPU6QfhDSOVCRdpEQ9JCQcU+OLc7Ma46Lao8Las9LrZFNcZMP9RORdxHQ+M/Pu8/Qvo/Rv0/SfhDSvdDTPpEUP9GVP1CU/k+U/w+WP9CYf9Haf9Dafw/aflAavlCcPxGdv5Kev9Le/9Kev9IdPVLcPFRc/Vcevlfe/pXdvxOcf1Fa/pEbO9FadpLZ8hfcLFudWtMSZB+dLCWicyypeTTyezj3Ovn5urp7urn8u3i8/bj+fvh+v/i/f/n///s///x/f/2/v/5+/769/369fz39Pr18vjv8PTr7vHo7e/m6+bd4NzW2MrGxbSzr56hmo6TjImPhYePgo+Vh4mQgIaMfi8uLDAvLTEwLjIxLzQzLzU0MDc2Mjc2MTo5NDo6Mjw8ND4+NkBANkJCOENDOUREOklGPUlHO0pIO0xJOE1KN05MN05MN09MOUtJOk5LQlRSU19eZmloeG1thWxrimtog2BZaVlRXE9HUkhAS0g+R0c9RUU8QUA6PEM6Oz86Nzw3NDw3Mz04Mj45Mz46MT05MDgzLTk0Ljs2MDw5Mj06Mz47ND88NUA8M0U+NEc/NEk/M0xAME8/MFA/L1A/LUw/LDw7Jjo9KD88K0E7LUI3MUE2Mj40MjszMD04NEI7NUg5NE4yLlksKWwvLoc7PaFGRaM7MKIyJJ8xIKQ5J6U8KZ43JJ44IqI8JqQ7Jqo9KbFBLbZBL7k+Lrs8Lb46Lb48L7I8Lqw8Lqk5K6k5K6s8K60+La0+La08LLI/LbA4KLk+LstMPctHOrw2KroyJsk5LtA2LNQ2K9Q4LNY6Ltg6L9w4LuM2L+gzLPAwLfQuK/QuK/AxKecyJ902JtQ4ItI3Id04JNw1I9o5J9o+L9M9Lsg2KcU5LMtBN8k8Nc0+ONlFQeVLSepKSulDQ+w/QetDQ95DQdVEP81CPcI9NLY6Lq44Kqs6Kqw7K6w4KcBEONRORd1JReI/QOo9QfdCSf9IUPRBR/RASflDT/1HVP5FVfpAVfs/WP5BX/9FZ/9Daf9Da/9GcP9Jd/9Le/9MfP9Kev9GeP9Id/9LdPtPdf9afP9hgP1VdvFDZPtJa/9Udtw/XM1JYNh7hbh8fGFDO498bq6OgdWzp/Pb0fvs5fry8Pn3+vf0/fTs+/rr///q///s///u///z///3///7///9/P/++//9+f/6+P/49v/19v3z9Pvw9Pnw8/Dn6uXf4dPPzr69ua2uqKKlnp2jmZ2jl6Ornp6ml5ujli8uLC8uLDAvLTEwLDIxLTMyLjU0LzY1MDg4MDk5MTs7Mz09NT8/NUFBN0JCOENDOUhFPEpGO0tIOU1KOVBLOE9NOFFMOE9MO0xKPlFQTF5dYm1senp6koGCoYCCqICApnt1l3JrimVfe1lTbVRMZE1FWkdAUEI8SEQ/RkA7Pzw4Nzs2Mzs2MDw4Lz05Ljs4Lzo3MDk5MTs7Mz47Mj89MUA8MT87L0E7LUY/L0g/Lks/L01AL08/ME8/L1A+MEw/L0A9Kj8+LEA9Lj87Lz87Mj45Mz06NTo5NDw5NEQ5NU01MVYtK2opLYYxOJ45Qaw+QaY3LqU3KKU6KKo/Lag/LKA5JqE4I6Q7JqU6Jqs8KbM+LLlAL70+L8E9MMU9McQ+Mr0/M7Y9MrI5Lq44Kq85K7A6LLI6LLM5KrY7LLk7LcRCNMtFOcg+M74xJ8AyKM05L9Y1K9g0Kto2Lds3Ld43LuE2LOYzLOwxKvMwLPQuK/QvKe8wKOQyJts0JNI2INA1H9cyHtowH9o0JNw8LtY9L9A5Ls09MtJEOsQ1LcU2MMo7NdhEQOJNSeVLSd5DP9Y9ONNAOc5BOMc+NL48L7U6K7A4Kq85K7E7Law0Jr0/M9FIQNhHQt9BQOZARPRHTf1OVfA/RfA/RfZCTf5IVf5IV/xCV/pAWPxBXv9BY/9DZv9Gbf9Jcv9Nef9PfP9Me/9Jef9Edv9Ofv9Sff5LcvhNb/9Wdf9VdfdNavBGY+9LZtI+VuFkdP6fp9OPjmQ5MmxKPqV5btClnPXUy//p4//08v/9///8//nz//zv///v///w///y///0///3///7/f/8+//9+v/8+P/6+P/59//29//19v/0+P7z9/br7+zj5NrV0snGwbq5tLO0rLG0qbC2qra+s7C4ray0qTEwLDEwLDAvKzAvKzEwLDIxLDQzLjU0Lzc3Lzg4MDk5MTs7Mz09Mz8/NUFBN0RBOElFOkxGOk5IOlBKOlJLOVJNOlNMOlFLPU9KRFZUVWZkcXd4jYeHqY2QuY+Tw4+Qxo6LwIeDtnt3qXBtmmlkjV9bflVQbk5KYUtHWEVCTT89Qjs3ODk1Mjk2Lzg1LDg1LDY3MTc4Mzg5MTs7MT48Lz88K0I9KkM8KUc/LEo/K0tALExBL01AME0/MkxANEs+NUw/Nks+NUY8M0I5Mj04Mjo5NDY7NDY9NTc8NT46MUg0LVkyLXc3OJQ/RKY+Rak4Oqo7MKo8K6tALqxBL6lALaU8KaY7J6s+Kqc4JK06J7U8K7w9LsE8LcU7Lso8MMo9M8U/Nr4+M7o6L7c3LLc3LLg4K7o4K7k3Krs3K8dBNc1DOMY5L8ExJsYzKcs3Lc81K9s0K98zKeE0LeI2LOM1LOc1K+wxKvAvKvUvLPYvKvIvKewwJ+IyI9k0IdA1H880HtYxHtkvHtgyItg2Kdc5LdQ6MNY/NthFPdZGPs1AN8k8NctAOdZLRNlOR9JFPsU7McU9McI8MMA8L7o7LLc5KrQ6K7Y8Lbk/MLU5Lb88MslAOtJDP9tDQuNESO1KT/ZPVuw/Re0+Q/JCTPtJVf9KWf1GWPpDWftDXftAX/tCYv9Fav9Kc/9Oev9PfP9Mef5Jdv9Kd/9Ugf9Uff1KcflJbf9TdP9WdPhOaetEXuRGXepYa/+Wov+1vPOdno5IRmsuKaZrY82Wj/PIwf/j3v/x8P/8/f/9//z3/v72///2///4///4///6///8///9/f/9+v/8+P/7+P/5+P/49//2+P/19//0+P/0+P3x8/Pp6uTc2tbRzc3Kw8nJv8rKwMrNwsnQyL7Iv7jCuTY1MTQzLjMyLjEwKzEwKzIxLDMyLTQzLjY2Ljc3Lzg4MDo6Mjw8Mj4+NEBANkJANEpEOE1FOE9IOFJLO1RLOlRNO1NMPFJLQVFMSVlWXWxpfH9+nYyPuJaZzJme2Jqe3pmY2pSR1IyKyYaFv4F+tXh2p25rlmZlh11ad1ZUaU1LWURBSj48Pzs6ODs3NDc2MjU1NTQ1NzY2NDg3Mjw6Lj88K0M+KkZAKkc/KkhAK0lBLElCMElBNEhCNkhBOUdAOks9PEk7O0M5Oj03Nzg3NTM4NC84My45MTY9NTc0K0MxJ104MH5DPZZHQ54+P500MKc7L6o8K6o/Lao/Lak+LKk+Kqw/K7A/Las4JbI5KLk6K785LcM5LMg6Ls06MM88Mss+NcY7NMI5McE4LsE4LsI5L8I4LsM2LMU3LdFDOdBAN8MwJsMsI9A3L9Y8NNMyKuAzLOQxKucyK+gzKuozK+0yK/AvKvMtKvYvKvUuKfIvKewxKOE0JNo1ItE2INA1H9g3I9kzI9YzJNUzJtU1KdQ4LNQ8MdY/NuxZUeFSStNIQcxDO8pFPMxJP8hFO8A+Mbw6Krw7KLw6Krk6Kbc6KLg6K7w+ML9BM8FBNsE8M8Y9N89BPddFRd1HSORJTetMUOhCRupAQ/BDSflLVP5OWfxKWvxGXPxGXfhBXflCYf1Faf9KcP9Od/9Pev9OeP9Mdv9Re/9Sef5Pdv1Pcv9Wd/9de/9Tb+5EXvpUbO5RZPdkdP+Snv+LlfSDicdgZKdNTbVqZ86Piu+8uP/e2f/v7v/6+f/8/v37//36//77///7///7///8///7/f/7+//7+P/7+P/8+f/7+v/7+v/4+v/2+P/z9/3x8/nt7/Lm5ufd29/Y0tvXzt3bz+De0t/h1tzj28/Y08XOyTw5NDs4MTg1MDUyKzQxKjQxKjUyKzYzLDc0LTg1Ljk2Lzs4MT06MT88M0E+NUM/NEpCN01DN1BHOFNKO1dLO1VMPVVLP1NKQ1NKS11XY25sgoKCppGVxZqg2p+m6qKp8aGl756g65mb5ZWY3ZSV1pCRyomJvYKDsXp5oXJxkWZjflhWa1BOXElHUkZDTENCSj8/Sz09Rzs6QDs5Ojw5ND87L0M9LUVALEZAKkZBK0VCL0VDNENDN0JDO0FDPkBBQ0I8RkQ+TENBTkVFT0NITkFJTD5IST1IRENIQUE9Mkw6LmdGN4NPQY1JPI4/MpQ4KaU+L6k+LKs+Kqw/K61ALK9ALbA/LbI9K7E4J7Y4Kb05KsM5LMg4Lcw4LtI6L9Q7M886NM06M8s4Mcs4Mcw5Ms06Msw3MMs2L9M8NdU+NdI5McwyKM40Ktg7Mto8M9czKuQxKukxKewxKu4yKfAxKfIvKfQtKPYsKPctKfUuKfEwKeoyKOI1J9k2JdM3Ic83INQ5JdU4JdM2JdE0JdI0KNM3K9I4LtA3L+NOR+hYUOdaU9pRScxHPsREOb9AN7k+L7k8Krk8Jrk8KLk6J7g5KLo7KsA+MMNBNMlEO8ZAN8lAOtFGQ9VJSNZIR9hHSt9JS+ZGSOhCRO1ESfVMU/xRWvtPXftMXftLYPZEXvdEYflGZv1JbP9Odf9PeP9PeP9QefdVevNVdvRUdvxZeP9de/9ad/tRa/JJYP1Xa/ZVZ+pNXvZebeJLWuZUYeVUYddYYcFlZsiDfuWrp//U0f/r6P/z8v/4+f/+//v8//v8//v8//z7//z6/f35+v339/z39P/69//7+P/8+//7+v/4+P/z8/3u8frr7vDh5Ond3eTZ1eLZ0ubf1evn2/Ht4fHx5ezz7Nvm4s7Z1UA9Nj06Mzo3MDc0LTUyKzUyKzUyKzYzLDc0LTc0LTk2Lzs4MT06MT88M0A9NEI+M0pCN01DN1JGOFZKOldLO1hMPFdLP1RJQ1NKTV5YZnBtiIKEq5GXy5yk46Ot9aew/aqx/6as+qGn86Ck7p+j6p2h4Zmb1pWWzJKSxImItHl5n2ppi2BdfFhVcFJQaE9NZU5KY0tHXkZCU0A9SD86Pj86NkA8MUE+L0NAL0NCMEJDM0JENz9EPT5EQDxFRDtCSj5DVkNJYUxSaFVcblxicmBkb2JiamRgYWZYV2FKRGxHPoNTRZVYRpNKN5FAK5k+K6hBLq5AL65BLa9ALbBBLrRBL7I9K7A3JrU3KLw4K8I4K8g4Lc02LdE3L9U4L9g7NNI3MtA3MtA3MtE4MtQ5NNQ5NNI3MtM2L95BOtU4L9EzKtY4L9w+Nd49Ndo5Mdw1LecyK+swKe8wKPEwKfQvKfctKfcsKPcsKPctKfQvKfAxKeo0KeE1J9o3JtQ3JNA4I843Is84Jc43JM82JtA3KdI5K9E3K840Kss0K+NOR/NkXOtgWdVPRsRBN7o7MrU5Lbg+Kbg+J7k8Jrk7Jbo5Jr05KsA8L8Q+MspEOcpBOc5FP9VLSNNMSc5HRM1FRdZIR+NJSeZDROhFSPJNU/hTWvlSXPdPXvpPYfRIXvVHYPhHZPtJaf9Ocv9ReP9Sef9UevBVde9aePleff1efPlVcPVNZ/lPaf9Zbv9bbf9jdPBNXvhVZvRPYPxVZ/VMX+RSX8BeX7t2cdecmPrJxf/l4//t6//09P///fz///v///v///v///39/f38+v759v349f/49f/59v/6+f/6+f/29vzw8Pjp7PTm5uvd3eja2eTZ0+je1fDo3fnz5f/67P7+8vT69uLs69Pd3EI+NUE9NEA8Mz46MTw4Lzo2LTg0KzczKjYyKTYyKTczKjg0Kzs2MD45M0E8NkU+NklAN01DN1JGOFVJOVdKOlhLO1pMQVtOSFRJTVhSYGdkgXx+p42Sypeg456q9qWw/6qz/6uy/6y0/6yy/Kqx+aqv86is7Kmr6J+h2pma0o2NwYF/sXRyoWhlkl1ah1hSflhRe1lReFZPcE1IX0M/TT86QD87OkI/OD4+NEBCNUJFOj9EPTxCPjpDQj5GSD9MVUVXb1Fmg2FyjmlzjnR2jYF4jYRvgIBebIpbY5JXWZ5XVaZWTaZNP59ALpw5JKA6JKg9Kaw9Kq4/LLFALrNALbQ/LbY9LLk7LLo2J742KMQ2Kss3LdE3LdY4L9o5Mdo4M9c4NNg5Ndk6Ntg5M9g2Mdg2Mdo4M906M+ZDPOA9Nto3MONAN/5bUv9sY/9dVOc/NuQyKO0yKfEyKvQvKfQqJvUoJfgoJvgrKPctK/MwLO0yK+MxJ9owI9QxItQ0JNM6KMw7Jso8KM08Kc88KtI6LNI5K9I4LNE3LdpAOM84MdxHQfRjXuVYUctCPMVAO7c0Krc6JrY8JLk8Jro8Jr06KL86K8Q8MMY+Msc+NMxDO9lQSt9YUtRPSsM/OsA/Os9IRN5IR+JHReZKS+9QVPFSV+9OVu1LWPFMXPlSZvhPZvdLZfdKZvxNbP9Rc/9Sdv1SdvRXdu5YdfVYdftbd/9ceP9ac/9Xbv9Wa/9idf1WZ/9cbf9bbPFGWPREWP9RZe5WZcZmZ6ppZcqPi+e2svjSz//r5/3v7vz49/n9/Pn///n///r//vz+/f/+/P/7+P729P759f/79//59v/29P/29v/19fbo6ObY2OPV1N7QzeHW0PHn3vz05/746P/86f//8/r/+ejx8Njh4EM/NkI+M0E9ND87Mj05MDs3Ljo2LTk1LDczKjczKjczKjg0Kzo1Lz04MkA7NUQ9NUg/NkxCNk9GN1RIOFZJOFdKOVlLPlpNRVVKTldRX2Vif3l7pIqPyZSd4pum9aKv/qu0/6y1/662/6+3/7C3/6+2/K+0+K+y9amq66Kj45iY2IyKyYB/u3VxrmpmoWRfmWBXjmBWil1Uf1ZQdE1JYkZDVEJBSUFBQzw8OkFCPUZFQUNEP0E/QERCRU9NUldWZGNohnF1mn99ood9n5J9nKB8mKVwiqRgdaxZabZWYbpRVbhIRrBANKw7Kaw8Jq09J6g4JKg3Jas4Jq45KLE5KLI5KLU3KLg2KLszJcI0KMo3LdM6Mtk8M949Nd88Nd88NeE+Od88N988N+E+OeVCPehDPedCPOZBO+VAOuZCOeRAN9w4L9QxKNg2K+tJPv9bT/FANu42LOorI+4pI/gtKf8vLf4sK/YoKPowLvU0L+82Mec2Lt4zKdYyJtQyJc82Jss6J8g7J8o8KM06KM85KtA3KdE1KdA0KNM5L881LdQ9NuVQSuVUUdtMSM1CP7cxKLw7KLs9Jr08J747J745KMA4KMI6LMQ6L8g+NMtCONVPRtxXUNJSScNEPb9DO8xIQ9tMSN9KRuVNTOtTUu1UV+tQVulOVuxPWvdWZvhVaPlTafpSa/5Rbf9Tcf9TdP9SdfJNbfhVdP9cev9fe/9cdv9Vb/tSaftSZfxVZvdSYv9aaP9aaPNOXvhTY/5Zad9TXrZgX5deV7aBfdmppe7Ixf3h3vnp6f349fr8+fn///j///f//fr+/f///f/7+//39f349P759f759f728//39v/19fbq6urc2+TW093Qyt/VzO/l2/z15f/55//96f//7/r/+Ojx7tvh30VBNkVBNUM/NEE9Mj87MD05Ljw4LTs3LDg0Kzg0Kzg0Kzg0Kzo1Lz04Mj86NEE9NEY/NUpCN05EOFJGNlRHNldHN1dKOlhLQldLS1hQXWJeeXN1nIWKwpCZ3Jik8J+s+qqz/qy2/q+3/7G5/7O6/7S7/7W5/7W5/6+y+ays9KOj65mX4I6N04OAx3h1vHNts2tgpGldm2NakV1XhVZSd05LaEVEVkBATDg1PEE8QEtBQkxAQlE+QlpFSnBXXYJjc5dzl6R7p65/q7J7o7h2nMBwk8Jjg8BUbsJHXNBLXNFIUMQ8PLo1Lrg5KrU8J7A8JbA7J7A7KbI6KbQ7Krc8LLs8LcA8LcQ8LsQ2Kss4LtM8Mdk/Nd9BOOE+N+A8M986NNw3Mdk0LtgzLd45M+ZBO+xFP+lCPOQ9NeM8NNs0LNg0K9s3LdQyJ8wsINY2KulHOvVLPvJANu80LfAtKfYsKvosLPwsLPgqLPAqKewvK+gyLuM1Ltw0K9gxKNUxJ9EzJ803KMs6Kc06KNA6KdI7KtM6KtQ4K9Q4LNE0K9Y8NNU6NdU8N+VPTu1ZV9lFRcIzL8A7LL88KMA7Kr86KcE5KcA4KMA4KsA4LMY9M8dBNs9KQdhVS9JSR8ZHPsBEOsdHPtZLRNhJQ91MSeRTUOVTVOJQU+JNU+VOV/JYZPZaaP1bcP5acv1VbvtRbP1QbP9RcP1Hbf9Qdv9aff9be/9Wcv1Ua/5Xa/9cbftZaPhaaPthbfZga+1dZ+9mbuxmbclcX6BdV3tPRphtZsGYlN26tvDU0fTg3//19Pn59/n//fn///f//fr+/f/////9///4+fz59Pz58vz59P349P/59v/49vnu7O/k4uXa1tvQytzSyO7k2P325P/76P/95///7fr99Orw7N7j30lFOUhEOEZCNkRANEI+M0A8MT87MD46Lzo2LTk1LDk1LDk1LDo1Lzw3MT45M0A7NUM/NkhBN0xEN09GNVJFNFVGM1VIN1ZKPlhNS1hOV15acXBwloCGuoyW1JWh6Z2p9aex+amx+ay0/bC3/7G3/7K5/7S4/7S4/6+x/Kut+KWn8p+e6peW4oyL14KBzX15xXVttnBnqmZgnl9akFlYhFFRdUdHY0E+UT01REg4QlQ9Q2BARW5DSoBPVZZdZKpneL1rj8lumstvmMlpj8hgg8lXeMZJZ8Q7VcYySNlBUOBFTdE7PMY3McQ/ML1ALLE6JK02Iq01JK41JLM1JrY3KLw4K8M7Lcc7LtNANtdAN9pANtw/Nt49Nd45M902Lts0LNMuKNItJ9MuKNgzLeE6NOM8NOE4Mdw1Ldw1LdAsIs0pH9k3LOJCNtw/MNA0JcsuH+lGN/NJPP1IP/w8N/QtKvEjJfUnKfsvMvEtLusvLuQyLt4zLNoxKtcwKtYvKdMwJ9M3KtI5K9Y6K9g8Ldo+L9s/MNxAM9xAM9I2KuZMQuVKRc41MN9HRvNaXN9JS9VBP8g8L8Q7K8M6KsM6KsI6KsI6KsE5K745KsI8MMI+MshGOc9PQs5QRMZIPL9DN8FDN85IP9FGP9VKRdtQS91ST9lNTNpLTd1MUetYYPNbZ/xhcf9hdftYbfVPZ/VNZ/9Oa/9Pdf9Sef9Vd/9UcfxUbf1bcP9jdf9qeP9ndfpib/Vhbe1kbONmbNloas5naLVmYY1eVGVHPH9eVamIgc2rqebIxu/a2f/z8/n49vn9/Pj///f///v////+///8///5+v779vv78/v69f779v/9+f/7+P708vjt6erf2d7Uy93Tye3m1v/45f/+6P//5v//6/j67+rv6OPm305IOk1HOUxGOEpENkhCNkZANEQ9M0M8Mj84MD43Lz02Lj02Lj02MD43MUA5Mz86NEM+OEVBOEtDOE5FNlFEM1JFMlZHNFZIO1pNR1ZNUltXaGxri36CsYqTzpKf45qm7qau96mv+aux/a+z/bCz/7C0/rCz/6+z/auu+6ir+KSn9KCi75qc6ZOV4oqM2YaF0YN/yXt1u21rrGRlnl9hkllbhFJRc05IYldGWV9DUW1CTIFFT5hMVqxVXbxbZMpaaNlScOJSdd9UddlQbNJKYs1CV8c4SsUuP9Q4ReNDS+VGStg+Ps0+NsxGOsNINrY/K7c+Lbg9Lbo8Lb0+L8M/MMpCNNBEN9VFOtlFOdpCN9s+Ndk7Mtk2Ldk1LNozK9kyKtUwKtc0Lds3Lt05MN84MN43L902Ltw1LNYvJtk1K9c3K88yI84yI9I5KdU+LdQ7Kdg8LedDN/hKQf1EP/k2NPUqLfYqLfYuMfc2N+01NeIzMNoxLNcwKtcvLNkwLdkwK+M4MeQ5MeI6MeI7MuA8MN89MNw/MNo+MdE3K+9XTPhhWtM7NtE7OuZQUdxGSOZQUc88NMo6L8Y4LMU5LMQ6LcQ8LsM7LcA7LL46Lb48LsNBM8dIOcdJO8JENr5AMrw+MMlGPMpFPM5JQtVQSddSTdVOS9NLS9dMT+laYPBeaPxmcv9oePxdcfNQZfNNZf1Oa/9Wev9UeP9ScvhUbfZdcftoePtqd/dlcvxldPNfbexga+prct9ydcNqZqpkXJ5sYX1mVlhIOWtYSpR8cr2gnN7Cwe7W1v7u7/v19fv7+/v///n///3+///+///7///6/f/++fv+9fv89v/++f//+v/++v/79f/38vHo4eTc0eHZzPDp1//65P//5v/+5f//6vf56+3w5+jp4VFLPVBKPE9JO01HOUtFOUlDN0dANkdANkI7M0E6MkA5MT84MD84Mj84MkE6NEA7NUI/OEVCOUtFOU1GNlBFM1JFMlVGM1VIN1lMQ1VLTFpTY2lphXyBq4mTyJOe3pqk66as+Kms+6yt/a2w/66x/66x/q2w/a2w/ams+aeq96So8qKm8J+j7Zuf6ZWZ45GV3pKS2omJz3yAwHN4sm91qW1wnWlnjmpffXlfeIJXao5QX6JOW7tTXs1UXdZQV9tIUuVAUeg/UuRDUtxEUNZDS89ARMo5PMk0NuRKTOdJSuFBQdU3NM45Nc5BOMhEOL4+McNFNsNFNsVGN8lFOM5GONFHOtdHPNpHPdY+M9U7MdY4L9U0LNYzKtg0K9s0LNo2Lds4Md47NOA9NOA8M905MNw1Ldw1LNs3LdIuJN07MNo9Ls0xIsYtHc43JtI9Kc06Js44J9Q4KeI6L/M9Of9AQP88Pv4zN/MsL+osLuErKtgqKdQrKNcvLN40NOQ4OOk5Oe83NfA3NO43M+g3MeM3Ldw2Ktc1KNE1Js01KOdQRf9tY9tIQcg0MtdDQ9M+QupWVtlBPNI+NMs4LsY2K8Y6LcY8L8M+L8E9Lrs5K7s8Lb4/MMBBMr9BMr1ALrw9Lrs8LcREN8REOchIP9BQR9NSTNBPSdJOTNVPTudfY+5hZ/tpdP9uev9kdfVWavVRaf9Vb/9Xdv9WdPpYcPFecPRuefZ3gO1rc95YYfFgbfFgbexib+9zfeyIisyBfKp0aJl5anNrWE9OOl9WR4NxZ6+WktzAv+/V2Pzp6/709f37/P3+//r+//79///9///7///5/v//+/n/9fr99v//+v//+v//+P/99//+9vnw5+3l2unh1PTv3P/75f/+5f//4///6Pn66vL05+7w5VNNPVJMPFFLPU9JO01HOUtFN0pEOElDN0U+NEQ9M0I7M0E6MkA5M0E6NEE5NkA7N0FAO0NDO0lFOU1HN09HMlJGMFVGMVVINVdLP1JIRlhSXmpngn2Bp4mTxJKe2pii56Sn9qan+qup/Kus/qyt/62u/qyu+6yu+6is9qaq9KSo8aOn8KGo7qCn7Z2k6Jui5pee4pKa24uT0oaPyoONwoSIt4OBqIh5mo9tiJpjeqlYabtRX89NWeBJUuhBSeo9Qek9O+M+ON1DOdZIOs5JOMVGM8JDMMVAMeRUSeBHP9o7N9g2NNg4ONg6O9E5OMg3NMA6L748Lr87LsA6LsI4K8M3KsY0J8YyJs40KtAzKtEzKNQzKdYzKtk1LNw1Ldw4L949M908Mts6MNs4L9s3Ldo2LNg0KtczKdUzJtMzJdA0Jc82JtI9KdE+Kso5JMAyHMg6Jso0JdUxJ+c1Mfo8PP89QP83PfczN+otMeEtLtktLdcvLtw0M+M5Ouk7PfA5PfYyNvgwM/QwMe0xL+QxKt4yKNUxJc8zJMkxJNE9MfpqX+RUTMg5NdBAP8s6PeRSU+RKSNxDPdE6M8k2LsY4LsU7MMI8ML89L7o7Krw/Lb1ALrw/Lbo7Kro7KL07K748LLw+MLw+MsBEOMhMQsxQSMpORsxMSdBOTOdgZOxhZvhocv9ve/9oePdaa/dVav5acv9Zc/tddO5hcuZqdOt9gPGHieh3edpfZPFndP5tfPNldetsd/aRleyin8SUiqKNfGhqVUhRPFdVRnRoXKSMiNu/vvLV2fnj5v/z9v/6/P7+//z9//77///8///6///4/f//+/n/9ff98/3/9///+P/99v/99///9v/57/Xv4fLs3Pr14f/95//95P/+4v//5/3+7Pn67Pf361ZPP1ROPlNLPlBKPE9HOkxGOExEN0pEOEhANUZANEU8M0I7MUI5MkE6MkM6M0E8NkNAOUREOkpGOk1HN09HMlFGMFRIMlVINVVJPVFHRVdRXWpogH6CqIyUxZOd2Jmi55+g8qOg96aj+qen/aiq/6mr/qms/aet+6Wr9aOq8qOn7qKn66Sp7aap7qWo7aOn7pig6JSh5ZSf35Sf15WbzZqVvqCMr6qDoKVlf7RdcMJRY9BJV9xCTuU+Rus8Qew8POo/OONBNNxFNNRJNMpJM8JGLr9CLMI/LeJTRd5EPN05N+Y+PupERuVARNk4Pc42Nc1CO8hEOMlDOMdBNcY+MsM5LMI2KcIyJ8YyKMszKM40KtM1LNg1Ltk0Lts0Lts0LORCN909Mdk3LNo2LN85Ld85Lds1KdUxJdg4KM0yIMoxIc85KM44J8c0Iso3JdRDMMg3Js44Ktc2LN41LuYzL+41M/Y6Ofs/Pv9MS/pIRvJCQuw+Peo8Pec3OuUyNuYsMfQrMfgpL/QsLu8vLugxK+A0Ktk1KdM3KMYwIcAuH/RkWetdU89AOtREQ8s7O99NTepSUeBIRdM7Nsk2L8Y4LsY5L8M7Lb46K707K8FALcBBLrs8Kbc4Jbg5Jr08Kb4/LrU3KbM3K7g+McFHOsVLQMVJQcZKQstKReVhX+ZeYPFkav5ud/5rdfNdafBYZfhdbfpec/VidOhkb+Nscux+f/mNi/aGhelxc/hyef95hvVhceBYZvaIkf+0tNCuoqCbh11qUERSOVFUP2piVZyJgtrAv/LY2fbg4//09//6/f/+//38//78///9///7//75/fv/+vT/8vL+8vn/9Pz/9vv98v/99P//9P//8/v15/fx4f755f/95/784/794f//6v//8fz+8/z88lhPQFdQQFdOP1VOPlRLPFJLO1JJOlBIO01DN0tDNktBNUhAM0g+Mkc/Mkg+MkZANEZCOUdFOUpHOE5JNlJKNVVKNFVKNFZLOVhORFVNS1pUYmtog3t+p4mPw5GZ15if56Ok9qWi+aKi/KGi/KGl/6Ko/6Or/6St/KGq9aGp8aGo7KWo7aqp762p87Gp9qyp+KCp+Jen8pKh4paf1qajzraevrmFnLhner9MXdFFUt8+Tec7R+c8ROY9QuBAQOBAQOI+P988Pd1FQsk6NMpEOcpGOroxKdtKRedJSOlDReo9Qeg7P+Y8P+E9Pto8PdQ8O89CO8c+NspEO9FNQc1LPr89MLg2Kbw4K783K8M2LMg1LcsyKtEvKtQvK9syL941LudBNd85K9kxJN0zJuU5K+c7Ld84JtUyH88yH8w0H8o1Icc0Isc0Iso0Jc01J881KcowJs0zKdE1KdI2KtI0KNUzJtczJ9w0KeAyKeYzLus1MuszM+kvMuctMugtNO0uNfYtM/YrL+8rLOwvLeo1LuM5LNk3KNA0JcMtHMQzIudYSOlZTss7M99OScU0MdpISOFPUNxKStRDQMw7Nsg4MMY4LMc5K8g8K8U8KsI7KL45Jrw7KLs8Kbo9Kbo9K7c8LLQ4LLU7MLk9Mbs/M7s/M75ANMBANcRBN+9qYfVwaepjX/RtavtxcexhZPRnbf9wef9sevtoePBkb+liaetkau5sbu5xb+5xb/t5e/99hflabPxjd99icPusr7aqmn2RdV1yUUpZOkxSOHNuWqWViMu3sO3V0//u8P/29//3+/34/Pz8/v/////+///+//v//vD/9OX+6eb76u//7vj/9vz/9P7/8//+8f/98f/77v/66v/55v/54//54f/54fz65f//9f7/+///+1lQQVhPQFhPQFZNPlVMPVRLPFNKO1JJOk5FNk1ENUxDNEtCM0pBMkpBMkpBMklBNEdDOEhEOUxGOE9INlJKNVNLNFZLN1RLOlhORFVMTVlVY2tog3t9poaMwI2V05aa4Z+e7KCe8p6e9J6f+Z2i/Z+m/6Cq/6Gs+6Cs9KCr7Z+n6KKl6KWk6qmj7aug7qSf76Cn95qm8Jyh4aOc0LGYwL+NqsJxhMRUYtFDT+I8Ruw4Qe83P+o6PeU8P9xAQdtBQ+A8Q9o5P9pBRMs7O8xCP8pAPcEzMeVPUOZDRug/ROo7Quc4P+I4O9s4OdU6OM87N9RFP8Y9NcU8NMxHPsxMQcFDNbg6LLc5K7k3Kr83K8Y2Lcs0LdEyLtgzL+E1M+Q4NOQ+MuE7Ld42Kd81JuE1J+E1J9o1ItM0H9E5JMs5Isc5Jcc6Jsk8K8s8LMw4LM40KtM0LtY1LdM3K883Kcs1Jsc0Iss0Ic80ItgyJN4yJuMwK+YuLOYsLeYsL+YtMuguM+wrLu0sLewwLugyLuA0Kts1J9U4J9I5J9U/LrsqGdZENdA+MdlGPutWUNpCP9hCQedVVuJSUtxLSNRDPs09Nck5Lsg5K8c4KMg7KcQ7KL86J708Kb0+K7o/LblAL7Y+LrI6LLQ7MLc9MLg+Mbo/ML0/McFCM8VDNetpXPJtZOdiW/BrZvVvbOhiYfFrbPx0eP9xfv9vfPZpcu1dZupZYPFiZvdxcP56ePt2d/94fvlSZP5bcORdbvamqammk2qMa1p0T05fO1JZOnVzXKmdjdbEuPbh3P/18f/6+v/6+//7/Pz8/Pz+/fv//vr+//X/+u3/8+H/6eH95un/6/P/8fj/8v3/8v//8f/97//97f/66f/25fvz4Pry3fz03/z35Pv78/z8+v///VxQQltPQVtPQVlNP1hMPldLPVZKPFZKPFNHOVJGOFFFN09DNU9DNU9DNU9DNU1DN0pDOUpGO01HOVBJN1NLNlZLNVZLN1RLOldNQ1ZOTFpXYmtpgXl7oYWJuYuRy5GW1piY3pmZ45iZ6Zqd7pug9J2j95+n+KCp9KCq752o6Jyk45yi4J6f4J6d4Z2Z45uZ4pab35qa2qSV0LGMwL+CrMdyk8lZccdCU9dBTN8+ROM9P+U9PeU8P+M9P+E+QeE+Q+A8Q9c4PdU/Qc5AP8pDP8M8OMQ5NulXV+BCQ+Q+Qug7P+M5PNw2ONY2NtE5Nsw7NtVIQcQ7Mb41K8VBNc1LPsZIOrs9L7c4Kbo2Kb83Kcc3LM82Ltc1MN43MeY5Nek9OdczKtc1Kto2Ktw2Kt01Kt03Kdo6Ktc+LMU0Ib80H7k0Ibk2Irw4Kb04Kb0zKMAtJeNAO+U+ON49M9U8Ls44Kcg3JMg3Isw3I9I3JdUzJNcvJtkuJ9suKt0vLtsvL9wuL9ssKd8wK+A1Ldw1LNUzJtA0JdA5JtE+KtRBL8IxIOdTRdI7MNpBO95DP+hKSfBUVe1VVOdTUeNPTd1KQ9ZDO888Mso4K8U2JsQ3JsA3Jbw3Jrk6J7k8Krc+LbU9LLI9LLA6LLE7L7Q8LrU9L7c9Lrk/ML5DNMNFN9xcUepnXeRhWfBsZ/Zwb+dhYuxmZ/NqceBSXu9ea/VocfJlbfFgZ/Vmavlxcf54d/p0df9udfNKXfhSaORbbfGcoaOcimGAYFVvSE9kPVdgQXd3Xa2lkuHRwv/u5v/48f/8+P/++v7/+vv//Pv//fv//fn/+/P/9uj/7tz+49r43uH54en85u/86Pb96/3+7P366f/66v/45/rx4PTo2PLn1fbr2fjx4f768f38+P//+1xQQlxQQltPQVpOQFlNP1lNP1hMPlhMPlVJO1RIOlNHOVJGOFJGOFJGOFJGOFBGOkxFO0tHPE9JO1JLOVRMN1dMNldMOFdLO1ZMQlVNS1xWYGpofnl5m4KFsoqNwo+UzpOV0pWU1pWV25aY45ib6Jie7Jqi7Zuj65yl6Jii35af2pWb1ZSY1ZOX1pKT1pGQ0oWEvZGDtqV9sbdzoshmj9NXe9VHYdQ8S95BSuBCQ95DQeBCP+FBQeQ/Q+c+Rec9RuM/RtY6PtE/QNBEQ8ZBPLo2McU+OupaWd1BQuNAQ+Y9QOM6Pds4OdM5N9A8OM5BOM9FO8I6LrsyKMA8L8dFN8RFNr0+L7g5KL04KcI5Kcs4LtI6L9k4MOA5Meg7N+s+ONgxK9kyKtwzLN01LOA1Ld83Lts5LtY9L8k3KMY6KcE8K748LL87LsE7MMU8Ns45NetDQO1APORAN9o8Mc85Ksk4Jcg6Jsk7Jc88KNA3J88xJdExJdQxKNYzLNQxLNEvKtMyKtM1LNM3K9A3Kc01J8o3Jcs6J8w+Ksw7KM88LPReUOBGPNIzL9IuLOZAQPtXWP91c/9yb/9qZ/ZeWedQR9VBNcc1KL0uHsQ4J8A4KLs4Jrg7Kbc8LLU9LbI9LLA8La87Lq08LrA8L7A8LbE7LbY+LrxCM8BGN8tNQd9gV+JhW/RwbPhzdOZfY+RdYeZdZNZIVOdZZfNncvRnb/ZlbPxrcP5zdv52dvtwc/tlbvFEWPRLYuVYa+uSlqCVg196WVFsQ1NoP1xnRXl8X7CqlOfcyv/16P/58P/78f7+9P3/9/v/+vn/+vb/+PL88+r769r43s7z0srrzM/sztfu0uDw1unz2/L34fb14fv24/z14/Xs2+3h0endze3h0fHo2fz17fz38f7581xQQlxQQltPQVtPQVpOQFlNP1lNP1lNP1dLPVZKPFVJO1VJO1RIOlVJO1VJO1NJPU9HPE9JPVFJPFNMOlVNOFhNN1lMOVhMPFVLQVVLSVxVXWhleHV0k3x+pYWHt4yPwo6Qw4+QyJCSz5CU1JKV3JOX4JSY35Wa3pWd3JKb1oyVzoeQx4WLxYGHw32DwX5/uH10n45wlKhnj8FchNZOduJBY+g6Veo5S+ZBR+BFQ9xHQdtHQ99FReZBR+48Su09SuZCSdc+QNBAP9BJRcA/ObMyLMhDPOBVUNxEQ+FBQ+M/QOE+P9o/PdRAPNFEO89GPMc9MsA4Kr01Kb05Kr89Lb89Lb07K708KcI6Ksc7Ks87L9U7L9s4L+A4L+c4M+k6NeY5NeQ1MuQyMOYyMeczMuY0MN0yK9QwJ8sxJ8s3Lcg6MMQ3LsE0LcM0MMw6O90/QOs4O+03NuQ3Mdg1LMw0JsY1IsQ3I8U6Jcs9Kcs4Jsw0Js41J9Q4LNQ6MNM5L9A4LdA+Mco7LcU4J8Q3JcY5J8c8Kcc8Kcc6KM0+Lc06Ktg+MuFDOtQvLeQ6Ot8xM981Ntc1M9Y7Nt5DPuVLQ+pRSepTSOhUSORVR8s/MMQ/Lr48LLg9Lbc+LbQ/LrA/L64+MKw8Lqw8Lqw8Lqw9LK08LLE9LrdBM7pENsZMQd1jWOBjXe9vbPRycuVgY+VgZedgZ/drdvtvevdrdu1gaPBfZv1scf95fP95fPptc/heavNBV/RDXehVaOaHjaOTg2d/XVl0SV51SWh3UIGIZrOylujizP/66f/97f/+7/3/8vv/9Pj/9PT/8e376uTy4dju18Xox7vkvLreur/evMfgwM3iw9jmzOPr0+zu2PPw3ffy3/Pq2ezg0ujazercz+/h1vLo3/Ho4fLp4ltPQVtPQVtPQVpOQFpOQFlNP1lNP1lNP1hMPlhMPldLPVZKPFZKPFdLPVdLPVhMPlFJPlFJPlNLPlVMO1hNOVhNN1lMOVlMO1dLP1VMR1lTV2Vebm5qg3V0ln59pYSFsYaJtIeJuYqLwYuNyI2Oz46O1I+P1Y+Q05CU04uQyoOKwXuCuHV8sm92rWlvq2xqnIBsiJNjea5ZdstQb+NCZPA3VvY0TPc4SO9AReVGQt1KQ9tKReFHR+hDSvI9TvA+TORDSddDQ8xBPs5JRLo7NLA0LMlJQNVMRthCQdo/Pds7O9o8O9hAPdRFP81HPMtHOsA4KsE4KMA4Kr45KLw5J7s4Jr06KMA7KMQ7Kco9LNI8Ltc7Ltw4LuE2LuQ2L+g1MOkzMuguL+ksMO4wMvU0N/U3N+40NeYyMdouKtc0L9U2MtEzMs8vMdIvNNs2Peo6RO0wNu4wMuYzL9wzLNE1Kco3J8g5KMk8KMY4JMk2JM42KNM6LNo+Mt1BNd1BNdhBNtNHOMlBMcI7KMA5JsM8KcY9KsU8KsU4Jsw6K803Kc0wJ+ZDPNsyL+8/QeMvMtoqLNUxL9I1LtU4MdY5MNI4Lsw1KsYyJsAxI85FNcZBMrw9LrU6KrE5Ka85K6s6LKo6LKs7L6s9MKw+L6w8Lqs8K608LLI+L7VBMslTR+BnXt9kX+hrae5ub+ZjaPBqcfVvePpxe/xzffZtde5ia/Zkbv9yev94fv9xdfppcPhXZvlBWfRAW+pRZuF+g6yXhnmPa22IXW+JWnmKYI2Xcra3mN/ewvn03vz65f//7/v/7/X/7+//6+f65Nzv2dDjzcXewbDWrajTpqrQp7DTq7bUrrzWscfautLfweDmzOjq1PLt2vPq2e7i1Ozb0erZz+zb0+na0+bZ0eTXz1tOPltOPltOPltOPlpNPVpNPVpNPVpNPVlMPFlMPFhLO1hLO1hLO1lMPFlMPFlNP1NJP1RKPlVMPVhMPFlOOlpNOlpNOlpNPFlNP1ZLRVhPUl9XYmRfc2pmgXNvkHl5nXx+pH6AqYGCsoOEvIaGxoiHy4mIzImIyoiIyIODv3x9tXZ3rXBxp2tspGZnoGxgjoJgcZVWXrNOXtJKXuxAWPc2S/4zRv45Q/M/QulEQOFIQt5JQ+JGSelCSvI9Tu8+Tt1BRdRGRMhBPclIQrQ6L7E3LM5PRslCPM49ONA2NM8xMNA1MdM+ONFEO8hGOcNENcA4KMM6KMI6Kr86J704Jb45Jr86J8E6JsQ5Jss6KdM6LNk5K903K+E1K+QzK+ozLesqK/EqLfgtM/wvNP8xN/8zN/8zOP01OPk4O/U4PPI5PvI5QfQ5RPc3Rvs2SP41RfMqNPQtMu0xMuM0L9k2LdA4Ks47K849LMs1JtE4Ktk7L989MuI+NOQ9NOU+Nd9BNtlKPM9HN8lBMcQ8LMI5KcI5J8Y4Ksg5KckyJ9M5L+FAOOtEPt4wL+AuLus0Nug2NtgzLdU3Ltc5MNc6MdU7MdI7MM06MMk7L9ZMP8xGOr9AMbQ5KrA2Kaw2KKs3Kqk4Kqw7La09L64+MK09L6s8K6s8K608LrE9MMBLQdpkWt5jXuhrafBvc+ppbvVyevx2f+5mcPdveflyefZqc/5sdv93f/91fPlob/ljbvdSYv5CW/c8WepLYd10e7WaiY2een2Ya3uXZoKVaJGddayyjsvMreDgxOns0e723uXz2dnt0c/mycXewLzVt7TLrqrIpJrBlJbCj5nDk6HImafLnazLobXOp8HSsM7Zu9ndxOXjzuzl1e/h1uva0ufSzePQyuDPyNrMw9XHvltOPlpNPVpNPVpNPVpNPVpNPVlMPFlMPFpNPVlMPFlMPFhLO1hLO1lMPFpNPVpMP1ZKPlZKPlhMPllOPFpNPFpNOlpNOlpNPFtPQVdNRFdNTFxSWl5YZmJdcWpmf3NwjXd2lnh4nHx7p4F+tYR/v4WCxYiCyImEx4J9v395t3p1rXhxp3VupHNqoXBnoHphi4RRWplIRbNFSNNIT+5CTvg6Rv42Qf45QPU9Pe5BPeZEP+NFQuRDSOhBS+49Tes/Tdg/QtFHRMVBPMNHP7I5LrM6L9FVS8M+Nck4M8cvLMUqJsgvKs06M81DOcNDNrw+L8A7KsQ7KcM8KcE6J8I7KMM8KcI7J8M4JcQ1JMo3JdQ4Kdk3Kt01KuEzKuUzKeoyKvUzM/81OP84PP80Ov8tMv8oLf8oLf4rMfwtM/YpMPImMfcpNv8sP/8qQfwgOfMaL/YiMPMoLu0sMeYwL9oxLNQzK9E1KdA2KtQ2K905MOY9Nus+N+s6NOg3Meg1MOI5Mt9IPddLPNNFN8s9L8Q2KMIzJcg2Kc84Lc40KtQ2LeZDPOA5M+AyMdIgIOw4OeU2M9UxKNI0KdI0Kc81Kc42K8o2Ksg1K8U3K+NZTthSRspIO75AMrc7L7U7LrU8MbU8Ma85LbE7L7E9MLE9Lq87LK05Kq05LK46LbE8MtBZUdxiXexwcPR2ee5tcvVxfPZyff96g/9/if95gPRocfdlcP9xfP91f/9rdPheavZPYf9BXvc4V+lHXttudLqdi5mphIKebn2ZZoCWZ42ccaGpgrS6lsjNrdXcvczZu8HUtLLMqafCn568mJq2kJayjJCxhomzgYa1fo25hJXAi5zCj5/EkajFmbLIob7OqsnStdrZxObfzere0unWz+HMydvGw9TBu869tci3sFpNPVpNPVpNPVpNPVpNPVpNPVpNPVpNPVhLO1hLO1hLO1lMPFlMPFpNPVpNPVpNPVpMP1pMP1pNPVtOPV1NPV5PPFxPPFxPPllNPVlMQ1dMSFhOT1pQWF1VYmBZaWFccmpmgW9rjnNwm3Zxp3t1s4N+wYqDyYqDx4h/wIp+vIh5soNyqIZyp410q4dso4ZchJBITKRCObZBOs1DQN5AP+g6O/Q8Pv9ERfc+PPM9POw+PepAQetCSepDTetBTuNBTNA+PsVAOb4/Nrc+M7A8L7I8MMBEONJNRMc2MdQ7Ns0yLswzLtZDO8g+M7U2J7s+LLs2JcE6J8M8KcI7KMA5JcI5JsY7KMc6KMs6J9A5KNY2KNgyJNouIuAvJew3LvU9NfU4Mvc0MPcwLfgqKvsmKPslJ/slJ/slJ/smKvchKfgiLv8nN/8oPv8hO/8YNv0XMf8nOO8jLOYjK+MrLd0tLdQrKNItKdw0MeI2Mug2NO42NvI2NfIxMu8uL+4sLOUvLNw5MtE6MdI5MexTS7wjG8QrI99GPsguJs0uKN48N+hFQOI6N9gvKtouKuI1MeU8N98+NNU8Ls81KcszJsw1Ks07Lss7MMU4LuxiWOBaT8hDOrk2LLo6L7g4LbEzJ7Q2KrAwJbAyJq4yJq80JbA2J7I6KrQ8LrM9MbA6MLpDO9ZcV+xwcPFzdvZ4fPt5g/VxfP98hP13gPp0ffxze/9yfv9yff9teP9nc/xgbvRJXP8+XP8+W+RBVtRla7SVgJKheoOdbX2ZZn6UY4eXapSfd56mgaCog5yohJKjf4qjfICfdnqacXmab3ydcoGgdoOkdYKtd4OzeYu4f5G8hJO+hpe+h5y+jKK9kKe8k6+9mr7Cp8/Mud/Tx+PSytzHxNS/vMy6tsGyq7mqpVpNPVpNPVpNPVpNPVpNPVpNPVpNPVpNPVhLO1hLO1hLO1lMPFlMPFpNPVpNPVpNPVpMP1pNPVxMPV1NPV1OO15PPFxPPFxPPl1QQFtPQ1tORllOSlpQUVxTWF9VXl9XZmRcdGlig25nkXFqnXhwrIB5vIeAxIqBxI+Bv5B+uo10q4xuopdxpKF1qJpqnplXe509Qao1K7E1K8I8M9NAON0+OOg/OvNBPfU9O/U7PPQ7QPE+Qu5ASehBSeJAS9pBRsc8Obw8M7Y8MbE7L6s6LK46K71BNdBKQdpHQNxBPdQ2M9A1MdVAOc1DOLs5K7I1I704J8I7KMQ9KsQ9KsQ7KMY7KMc6KMo5KM85KM82JtQyI9oyJeM1Kuo4Lu84MPA5MecxJucvJeouJe8sJvYrJ/srKf4sK/8tLvwqLfolK/okLv8nN/8kO/8cN/8UM/wTMPUeMPYuOfUzPOUqMdsoLNwuMN4wMtsrLvE6PvQ3Pfc0OvYyNvYvNPgwM/kyNfQ4N9syLdo7Ndc4MuRFP+RFP84vK9EyLsEiHtQ1MeE/OuhFQOA9ONgzLdkyLN02MN06MdQ6Ls85Ksk1J8c1KMg5K8o8MMo8MsY5L+1jWeFYTslAOLo0K8I5McM6ML82LMI5L781K740Kr00Krs1Kbg2KbU1KLI3KLA2KbQ7MLtCOdNZVOhsau9xdPZ4fP58hPh2gP58hPx5gfl2fv51f/9zf/9wff9rd/xkcf1fbvZJXf8+XP8+XOlDWdNlaK6Od4mYb3qVYnWSXHiOXX+QY4qVa42YcIuVcIWUbXCHXWyJXWiJXGeNXmyQYHGVZXmbaXqfa4GsdISxdoq3fI27fZC8f5O8gpa9hpu7iZu1hqGzi622l769qM/Gt9jHv9bBvM+8uMa3tLutqrKko1xMPFxMPFxMPFxMPFxMPFxMPFxMPFxMPFpKOlpKOlpKOltLO1tLO1xMPFxMPFxMPFxMPVxMPV1LPV1NPV1OO15PPF5PPFxPPF9SQV1RQVxQRFtORlpPS1tQTl1RU11SWl9TZ2NYdmhdhWtikXNrpH92tYZ9vol9u5eFv5mAt5t2qZ5wnq51orp2pbVpmLBSdLg8RL41Lbo0K8A8MMtDN9NFOdtDOOQ/OfE9PPc6Pvk6QfY9Re9AR+ZBSNlARc9AQsA7Nrg5MLE5K605Kqk4KK05Krs/M89GPNlEPtc5Ntk3NNo7N9xDPd1PRc5IPLUzI745KME6J8Q7KcY9K8k9LMg8K8k6Kcw5Kc84J88yI9MvI980Ku49M/Q/NvE5Mek0K+A0Jt40JeIyJeUvJOssJO4rJfErKPIrKPMrLfAoK/ImL/goNf4lOPwcNPwWM/gYM/QlN/IwO/M1P/I5QfA7RPA8Rek1PuQsNvAyPPMvO/YuOfYtN/UuM/UuMfMvMe00MtsvK+I9Odo2NN87Of9tauVDQdEvLc4vLNk6N99APOBBO9s8NtU3LtY1LdU0KtI2Ksg2J8M2JcI2J8Q4KcU7LsY8McY8McU7MetgWeFUTck8M78wKMs7M9E+Ns47M9I9Ntg9ONc8N9Q9Ns88Msk7McI6Lrs3KrY2Kbk7L7xANs9UTeNnZe1vcvh6fv+BiPt8g/t8g/t5gft4gP93gf9zgf9uff9ndvtgcPxbbfVHXv88Wv8+XOxGWs5gYZ5+ZXaFWmmEUWiFT22DUnSFWHuIXX2IXniEXHGCWGB6TV9/UGGFVWWNWW6VYHWcZ32gan6jbYOscoSydIi2eIu5eYu5eY25epG6fpS6gZOxf5WsgJuphqmtkrq1ose5rsu4ssi2tLisrKqhoqCXmltLO1tLO1tLO1tLO1tLO1tLO1tLO1tLO1pKOlpKOlpKOltLO1tLO1xMPFxMPFxMPF1LPV1LPV1MPF5NPV5NO15PPF5PPF5PPF5RQF5RQF1PQltPQ1xORVxPR1xPSV1PT15QX2JUbWRZe2leiXBnnHx0rYV7t4h7s5mFuKWFtK+Aqrh6ocZ4n9F1nMpkjMZNbNxGUt9BQNVBPc9FO8xIO81HO9NFOd5BOu5AQfU8Qfo9RPg/R/BBSOJBRtJAQcY/PL8/NrY8Ma85K6s6Kqo5Ka44Krw+MM5EOtU8N9UzMeA7OeVBP+FEP+hTTN9VSr86K8E5Kb43JMA3JcQ7Kck9LMo9LMs5Ks44Kc41J9IyJNkzJ+U5L/E+N/U+NvA1LuQvJuA2Kd42KeA0KuMxJ+cuKeotKewqKOwqKuopLOgnLOsnMfIqN/YnO/chOfwfPvslQfs2SOQoNucvO/9QW/9gbP9QXPI8SfM5R+gpOO0qOPEtOfQwOvEyN+owMeErKtcoJdgwLdo3MtQyL+VDQP9zcPVWU90+O+VHRNs9Oto8OdU6NdI4MNE3LdA2Ks00JsYzI741I7k2JLs4Jr87LMA8L785LcA6L8U8MuVYUdxNR8o3MMcwKdc8N95BOto7Nd88Nec+Oek9OeY/OeFAONk/Nc88Msg6LsE5Lbs5LLs9MctOSOBjX+xub/p8f/+EiP1+hfh5gPh5gPx5gf94gv90gv9uff1ldPlebvdWaPNFXP04Vv88Wu5IXMdZWopsUmNyR1x0Qlx5Q2R6SWx9UHSBVnaDWHOCWW+BV22HWmyOXG+VYnWdaHukbIGob4SqcYWrcIWtcYWxdIi0dYm3dom3dom3dou4d4+5epG0fI+re5KkfJukha2rlr6ypMi3r8e4tbSrrqGepZeSmVtLO1tLO1tLO1tLO1tLO1tLO1tLO1tLO1pKOlpKOlpKOltLO1tLO1xMPFxMPFxMPF1MPF5LPF5LPF5NPV5NO19OPF5PPF5PPF5PPF5OPl5OPlxPP15OQV1PQl5QRV5PSmJOWWJRZGNUcWRafWxlkXhyon93qIN2pJR9p6yGq8KJqc6Cntp3lOFsidtYd9pEX/NCVPpEUO9KUOFJSNBFPstFPNBGPNlEPuhCQvBAQ/VAR/VCSO1ER99DRM9BPcI/N79AN7U9L646K6s6Kqo5Ka44Krs7Lsw/NuFGQeI9O+5CQutBQd47NuNKQuZYTNVLPshAMr83J7wzI8E4KMg8Lck6Kss3KdA4K84wJdczKeA4L+k7NO06Ne02MOswK+UsJ+MwLOMxLecxMOwzMfMyNfYzN/c0OPc2O+wtNeosNu0uPfEwQ/MtRvUoRv0rTv8zUvQ5TOUzP/BATf9fbP9ref9XZvVDU/U+UO4zRO0zQe0zPuk2POM5Ods4M840KscvJMsyKscuKNA3MvJZVPZcWvJYVttBP+JIRtxCQNQ8N843MM02Lc84Lc85K8o3J8I1I7k4I7M5JLU6KLg9Lbk7LLY2Kbw3LsY9NdtOR9lFQc41MNAxLeE+OedAOuM4Mec1MesyMO4yMes1Muc4M+E6Mtg6L9A5Lsg6Lr42Kro4K8hJQtxfWetubPt9gP+Fif1/g/V2ffZ3fvx5gf94gv9zg/9rff1kdvlecPRTZfRGXf04Vv49Wu9MXcBUUnpfQldoPFlxP1t2Q2Z5S25+UXSBVniFWnmIX3eMYXmVZXiaaHqgbXyncYGqcoSrcoWrcIapb4etcoiwdImzdIi1dIe1dIW3com4dIu4d5C2e46seI6jeJmkgq2tlcC5p87AtdLEwby5wKiqtpycqFpKOlpKOlpKOlpKOlpKOlpKOlpKOlpKOlpKOlpKOlpKOltLO1tLO1xMPFxMPF1MPF5LPF5LPF5LPF9MPV5NO19OPF5PPF5PPF1OO11OO15PPF9PP19PP2BQQGFRQWJQRmJOUGNOXV9QZWBVc2dhhXRvl3t0nX1xl492lq6Dn8yLoduCluZyhetkdelQZOk7UvkzTP88UftFUulES9U/QM5APtFDP9ZFQuNFRuhCRO5BRe1DRudERdpFQctCOr8/NLs/M7E7Lak4KKg5KKo5KbA4Krw6Lco7M+hJRek/P+s9PuU3ONoyL95BOu5aUPRoW9pQQ8lBM741JcI2J8c5K8g5K8s3K9I4LNEwJto2LeY7NOk7NOo0MOgvLOotK+stLfM0OfUzO/gzPfwzPf8xPv4wPf0xPfkxPvUwQfIxQvQ0S/U1TvUwTvYtT/8xWP8+X+YzSPlPXP9hbv9fbv9XZvtQYPREWOk4SvNBUeo6R90yOtIvMsoyLcI4Lb07K7w6KsQ6L8AyKNlKQvprY91MR+FQS887Oc87OeBMStRAPMo3MMo3Lc48L808K8s6KcQ7KLQ7Jq06Ja88KbM+LbE5Ka8zJ7o6L8pEO9ZHQdhDPdQ3MtcyLuc7N+w6NugyLu0yLfIsLfQsLPIuL+8zMeg3MeI6Mdo8MdI+MsI2Kbo0KcVCOtdYUudqaPp8ff+Gif6AhPV2ffd4f/16gv94gv9xgf9pe/tidPhdb/JRY/dJYP86WP0/W/BPX7pRTnFYOlNmOF11RWF8SW6BU3aGWXuIXX6LYIGQZ4KXbICcbH2fbXykb32ocICpb4KqboOpbIWpbIircYiucYiwcoazcoSzb4O1cIW3com4dIu1domsdI6ld5qohLC0mcjDr9jMvtvSzcLCzKuxwZuhsVpLOFpLOFpLOFpLOFpLOFpLOFpLOFpLOFpLOFpLOFpLOFtMOVtMOVxNOlxNOl1MOl5LPGBKPF5LPF9MPV5NO19OPF5PPF5PPF5POl9QO2BPO2FQPmFQPmFQPmFQPGJPQWVNTWRNV2BPX2FVbWdigHVxknx2mIBzkY91jq2AlM6GlN9+h+5xefljbPpQW/o7Tf8qRv8yUf88U/E8TeA8RddARdVDRNRCQ9xDReBCQ+RBROJCRN5EQtRDPslAOL4+M7g+Ma85K6g3J6k6Ka08KrQ8LME9Mc8/N989OuU5OeMwM+IvMuA0Mts5NOZNRfxsYfJoW9lRQ8Y8L8Y6Lcg6Lsk3Ks02K9U4L9U0LN43L+Y5M+g2MukxL+gvLO4xL/UxNf8yQ/8wRf8tRv8qQv8lQP8jPfwgOvYgOvcnQfUrRfUuTfUvUPMrUPQpVP8yYP9BaPNDWP9gbf9odfhWZe1LWvFMXOtCVdoyQ+tAUN03Q8ktMbooKLEuJKs4JqU/JqhAJ7g/Lrw6LN1ZTeFdUcxGPc1EPsE2M8k7N+RVUdVGQMk5Mcc3LMk6LMg5KMg5KMQ9KbE/J6Y8Jqg7Jqw9Kqs3KKwzKLw9NNNMRtZHQd1FQNs5NtwzMOk3M+w1MeswK/QxLf0sL/8rLfouL/QxL+00L+Y4Md87Mdg+Msk5Lr0zKMA7Ms9OSOFhXvd5ev+Iiv+Dh/l6gft8g/97hv94hP9ufv5ld/decPVabOtMYPVJYfw5V/s9We5NXbJKR2hRMVFkNlx0RGZ+TnWIW3+OY4SQaIaSaoiXbomec4ikdISmdH+ncn2ocH+oboGpbYOpbIWpbIWoboerboWtb4Wvb4GwbICya4K2boW3coezdIetdI2nd5yshbK5msjGr9fOvdnSzLu/yqSsv5KarVtKOFpLOFtKOFpLOFtKOFpLOFtKOFpLOFtKOFpLOFtKOFtMOVxLOVxNOl1MOl1MOl5LPF5LPF5LPF5NPV5NPV5PPF5PPFxPPGBRPmFSPWFSP2JRP2JRP2FQPmFPO2JMPmhPS2dOUmJQXGNXa2pmf3V2lH18nIF4l5F6lquBlcaEktp9hfB1ev1rbP9ZW/1ETP4vSf81Uv88VfM8Tuk/TONDS91CSNY9QNtBQ9xAQd5AQdtBP9hDP9BBOcc+NL09MLU/Maw7K6k4KK08LLQ/LrtAMcpBN9hDPdk3NOE4Nd4uLuIzMOY6NtMwJ9E1KetVR/93autbUNFDN8o8MMs7MMk3Ks02K9Q6MNo3MN84MuU2M+czMuowMe0xMvQzNv00PP4lNv8jOf8iOf8iOf8hOP8fNv0dNfgeNu8bMu4fOfAlQu8oR+4mSvEnTf8zXP9FaP9idf9gbPdXY/FRXfJQXe9NWuJATdQyPdo9RMw3ObsvLq4vKKY1J6I7KJs/Jpw+Jao5J7I4K9FVSbs7MsQ/OL40Mb0yL85DQOVXU9VIQcg5McQ2KsU2KMQ1JcY1JMM6KLE8KKc6Jqg3Ja05Kqw0Jq8xJcI/NdtSStlJQeFIQt47Nt4yLuo0Me0xL+8tK/wyMv4sL/0rLvkrLfMrK+0tKuYxKt80LNY4LNE9Mb8yKLw3LshJQtlcWPN3d/+Ji/+HivuAhf5/hv99iP92hP9qfP5fc/dYbPZUaepEXPVEXvU2VfE6VuBMWqVIQ15LLU1jNVVvP2J9SnSMXICWZ4eYbIibboqgcouldoyseoard4Gqcn6nbXylaX2lZ4GlZ4KmaYKla4KobYOrbYKsbH+uaH6waYGzaoS2b4m2c4mvco6seJmwhK27mL/FqcvKtcvNwra9xZ6quouXp11LN1xLN11LN1xLN11LN1xLN11LN1xLN15MOF1MOF5MOF1MOF5MOF1MOF5MOF1MOl1KPF1LPV5MPlxMPFxMPFtOPV1QP15TQWBTQl9SP2BQQGJRQWNSQmRRQmROQWRMQmpNSWhLTWRQWWZbbG5rhnd7noCFrYmIso+DqaWHqb6IoNCCkuJ5fvBzcfpqYv9hXvlKV/E+Ues6TO4/Tu9DUepAS+Y8R+U+RuE8Qt88P9o8PdY8Os8+Oco9NME7MLg6LKc2Jq9BMK08LKw2KL9BNcxGPcw9NdA3Mto4Ndw3Md41Lt42Ld44Kt08Ktk6J9M2Jdk7MPBTTPJaT9lFOcc4Ks0+LtRCM9I6LdQzK/BHQuEvL+41OvM2Pe4sN/9CTfEnM/omMv8pMv8oMvkdJ/0iKv8nL/4nL/AdJvAeKfkrN+ogLuwmN/EtQecjO/9YcuctRP9dbP9faf5aY/lVXPVQV+tITd0/QM45Ncs+N8RBN7c/MaY3JpkyIZk2I5o7J588Kac4La43L8JFP787N70zMcQ2NMU1NNREQ9tMSNpLRdFEO8g6MMQ0Kcc1KMs0KcU1Krw8L7M5LK0vI6soHrMtJMM5L9JDO9hIP+RQRt9FPdo3MN0wKucwLPIyMfkxM/0xNPcvMfYwMfYwMfMwLvIwLu0yLeY1Ld05L9U9ML4yJcA+Mbk9M9ZfWelzcf+Pj/uEhvuHiv+EjP94iP9off9fd/9bdf9Vb/hMZvhFY/E6WfQ7W+Y/WdtdaYtAO1ZGLUxeNll1QmeGTXeWXX2cY3+dZ4ChaoOmboKob4Cnbn+mbX6lbH2laXykaH2jZn+jZX+jZn6ka3+mbYGrbH+sa36tZ3+uZoGxZ4OzaYe1bYu0co2wdo6ufJm0iae9mbHBpLLBrqaysI2YnnqFi11LN11LN11LN11LN11LN11LN11LN11LN15MOF5MOF5MOF5MOF5MOF5MOF5MOF5LOlxLO15MPl9NP15OPltOPVtOPVxRP15SQl9TQ11RQV1PQl9PQmBORGJQRmNPSGVOSGlNSmdOUWRSXmdfdG5ukHl+qICHu4eKwZ6VyqOLu6t/o7l4kNN5g+p8e/R2avZpYPhdYfNPWuxGUvJIU/hJVvVFUO8/Sus7ReQ5P+A6PNo6OtU9OM4/N8c+NMA8L7c8LKs8K6o/Lak4KLI6LMFBNsU8NMc2MdQ8N9I1MNY1Ldc1Ktg0KNo3Jts6Jts7Jdo5J902LuZBO+tNROFJPNA+L8c4KMo4KdM7Lt47NPZKRuQwMfA2O/Y2QfEuPP9ATu8nNPMkLPclKPspLP0rLPwqK/goKPYoKPcrLO8kJ+0lKOsmLf07RNkbJ/A0Q/xBUtgmNv9qdf9iav5aYfxXXfRPU+VCQ9c8ONE+Nr44LL9ENblINqk+LJkvH5ApGo8oGZIoG54tJbA6NtFUUM5IR8M1NMY0NdE9PetXVddGQdZHP9BBOcc5L8YzKco2LNA3L843MMc9M8I5McI1LsMyLck0LtE4M9g/Od5FPeRKQN5BONo2Ld0wKucwLPIyMfswM/swM/QwMvMxMvQwMfMvMPMwLu4xLec0Ld85Ldc9Mb8zJL48L7c9MtNeV+l2c/+QkPmFiPiFiv+Civ90hf9mfP9cdv9YdP9Rb/5JaPxAYfM6WvE/X+FJYMFTXHs/N1JGLk1fOVp2Q2WHS3OVWXicX3edYnuhZn2laX2manylaXylaXykaHujZXuhZHuhZH2hY36iZXyjan2mbH2pbH2qaXyrZX2tY3+vY4KxY4WwaIeya4ivcIirc4urfJCshJCqh4yii3iHgGRwcFJeXl1MOF1MOF1MOF1MOF1MOF1MOF1MOF1MOF1MOF1MOF1MOF1MOF1MOF1MOF1MOF1MOF5LOl9OPmFQQGBQQF1QP1xPPltPP1tSQ1tRRVtRR1xPR1xPSV9QTWNRT2ZUVGdVVWdVVWdWXGhdbmxphnN2o3yDuoKKy4qN1JiR16CKyqqCtLl9n8+Ak+SEhu5/dvNzavxmaPdTXO1HUfBGT/ZIUvdFUfJBS+49ReQ3PeA3Otk5OdQ8N81AN8VBNL4/MLY+La0+Lao8K6s6LLhCNsdIP8A7MrswKco6Ms02L9A2LtU3LNg4LNk3KNk4Jtw5JuA6Kt00Lds0LuJBOelPQ95IOsg1JcgyI9lAMuI+NfVIROgxM/I1O/k3QPg0QP9FU/gyP/ApMOsjJuwkJ/kxM/UtL+4mJuwmJfUxMuspKvY4OugrMeIpMeszPf9SXu89S/9caf5eZvFWXO5PVPBNUupFSd06O9U3NNQ/OcA2LMA+MbxCNbM9Maw3LaUzKaEsI5wnIJolHqkvKsdFQ8I6OrwsLMgzNddBQvReXdFAO9JDO9BBOcs9M8w5L9Q9NNpAONtAO9tAPNg9O90+O+NBP+Q+PuA6OuM/PetJROBCOd08NNk1LN0yK+cxLfAzMfUxMvgwMvQwMvQwMvQwMfMvMPMwLu4xLec0Ld85Ldg+MsA0Jbo4K7U7MNBbVO16d/+TkvuHivqDif1+if9ygv9kef9bdP9Ucf9Obf9GZ/s9X/Q9XO5FYt9UZ6JCRnA8MVFJMlBiPF14RWaHTnKTWnWYXnSaX3ieY3ujZ3ykaHmiZnmiZnmhY3igYnmfYnmgYXygYnqgY3qiZnukaHunaHuoZXupYXupYH2rYH+uYIeyaoq1bouyc4msdIamd4KedXmTbm+GbFNlWUFQTTJBPl5NOV5NOV5NOV5NOV5NOV5NOV5NOV5NOV5NOV5NOV5NOV5NOV5NOV5NOV5NOV5NOV5MOGBOOmFQPGBRPl1QP1pOPllPQ1hQRVhPSFtRT19VVGJYWWVYX2lZY2xcZmteZ2xhaWxkcW9rgnJ0mnl+tX+GyoWM2oyO4Y6H15+L062KxLOAqb15jsx7gd6BevKCd/9zcv9jZ/lVXPRNVPVHUPRDTfI+R+88QuU2O+A4ONs5N9Q8N81ANsVBNLxBMbc/Lqs6Kq0+LbE9MLxGOsxSR8dIP7o1LroxKcg5Mc04MdM7MNk9Mds7Ldk2J9w2JuA4K+A1LdsyK+A9NOxOQuNLPdI6LNE4KuBCNt83LvA+OukvMPAxNvc0PPw4Qv9OWv9MVf0+RfIzOOIkJu0vMeosLPAyMugqKusvLvI6OtEaHOYzN90sMug5QPBFTv9YY/JOV9g9Q9pBROFCRuE+Qd45Pdw4Odg4ONM5N8k4M8I5Mb06MsBBOs1OSNZWU9BOTsNDQLI3MrY5Nc9LSdlNTONRUu9ZWupSUfFZVsk1Mc4+NtJCOdBAN9M/NdlCOeBDPOJAPek/QOc4Pew5PfI/Q+86P+g1OOw+PfZNSt45M9s2MNozK94zLOU0LuwzMPIyMfQwMfQwMvYvMvYwMfUvMPUvLvAwLek0LeA4Ldk/M8I2J7c1KLM5LstWT+98ef+TkvyIi/2Bif56h/1vf/xjd/9Ycf9PbP9GaP9AY/k6XPQ/XulLZNhaaIU0M2Y8LlZQOFdnQ2F7S2qJUHOSWXSVXHWYXnedYnmhZXqiZnegZHagYXefYXaeYHifYHifYHufYXqgY3qiZnqjZ3qnZnqnYnqoYHqoXXyrXX6tX4ayZ4u0boyzdIqtc4amdYCdcXSOaWmAZFFjVURTTDhHQF5NO15NO15NO15NO15NO15NO15NO15NO15NO15NO15NO15NO15NO15NO15NO15NOV1LNV9NNWBQOV9QO1xPPlpOQFhPRlhRS1lQUWBXXGdgaG5mc3NoeXNne3NnfXFofW9sfXBxhnJ3l3Z9q3qCwX+H0oSK4IuM5pON452M2qCEv551n6Bsgqxucbx2bNJ2afJzbf9sbP9naf5eYPtSV/VGTe88Quo3PeY1O+E3ON05ONY9N85BN8ZCNb1CMLhAL603KbRAM686MLA7MchSSNVcUclNQ7s7ML45MME3Lcw5L9Y+M9s9Mdo2Ktw0J+I2KuAzLOI3MOQ9NeVFOeJGOd5CM95BMuI+MtswJuo3MuwwL+8uMfEuNPo3P/9QWP9dZP9aX/9PU+EuMeMwM+AsLfdFReg2NtwsLNstLus+QNwyNdkzN/9iaOA8Q8sqMsotNMEmKtU7PeFARds2OtkzN985Pdw3O80vMMw0M807O9VHRt5SU+xgY/VpbPRla+peYcRAPsZFQOVeW/hoZ/9vcP9qauVLS9c9O8k0MNE+N9dEPNZDO9U+NdU8NNg6Mdw0Me41O/EtOfAsNvIuOO8sNOssM/M5PP5KS98zL9wzLtozK9wzLOM1Luo0MO80L/IyMfQwMvYvMvcvMfYuMPUvLvAwLeozLeI3Ldk/M8Y4KrQyJbI4LcNOR+98ef+Skf+IjP9/if93hfpsfPhhdPtUbv1IZ/8+Yv86X/o2XPNBYeBOY8JXX3AvK18/MFtXPl5sSWV9TWuJU3SSXHWWX3aZX3ieY3mhY3igYnWfYHWfYHWdX3aeX3eeX3ifYHufYXqhYnqiZHulZXymZHynYHmnXnmoWnuqXH2sXoCsYYWvZ4eubYeqcIWlc4OgcnuVbnKKamV4ZVtrXlJiVV9OPF9OPF9OPF9OPF9OPF9OPF9OPF9OPF9OPF9OPF9OPF9OPF9OPF9OPF9OPF9OOl5MNF9ONGBOOF5POltOPllPRVpTTVpUVF9aYWhicHJtgXp1jHt1kXtxk3pwk3ZwknBzknJ4mnR9qHeBtnqDxH6Gz4SJ2ouM3paP3JmKzZuFtqKDo6qEkat+eZ9sW5pRPrxNQtRRSeJXUutXVfFTUvFLTe0+Q+U0Ouk5POY5O+A7Odg9ONNAOMpCNsBBMLo/L7M5LLpBNqs1K6MuJL5JP9lnXNlkWstVSbg8Mrg2KcAzKc46MNk7MNo2LN4zKeQ2Ld8xKuQ3MeM7Mt05L94+MONGNeRCM944Kt8xKOk0LfAzMe8tLu0qLvQxN/9FSv9WW/9dYv9cYeI5POM5PNUrLPRKS+I4OdcvL9s1N8woKcwnK/hYWt0+QtY6PtE2OrofI8QoK9w8PuZBRd00OdksMt4xN9kwNc0oLtIzN+RLTvZhZftobvljbPdgafpgbPhia9ZMTNVOSupcWupWVOdNTeNIRs80Ms4zL9lBPOBLRORPSN9KQ9lAONc6M9c2LtwuLfUxO/stOvgqN/UnNPUpNPgwOv8+Q/9KSuAxLt4zLNwzLN01LOE0Lec0L+wzLvAzL/QwMvcvMvkuMfgtMPYuLvEvLesyLeI3Ldk9Mck7LbMxJLE3LLpDPex5dv+Njf+Ijf98iP9xgfZoePZfcvlSbPlEY/85Xv82Xfk3XPBGY9FOXqJJS2U1K1ZEMFtZQF5sSWV8TmuIUnSRW3eVX3iZYHueZHqgY3aeYHObXXKcXHObXHScXXadXneeX3ufYXqhYnmhYnqkYnynYnumX3imW3inWXqpWXuqWn6qX4OtZYWsa4epbYmnc4mldYSdc3yUcnWJcG5/bGZ3ZV9QPV9QPV9QPV9QPV9QPV9QPV9QPV9QPV5PPF5PPF5PPF5PPF5PPF5PPF5PPF9OOmFQNmFQNmFPOV5PPFtPQVtSS1xWVl9aYWtndnNvhn16l4J+oYF8pX13o3t1pXh2p3N5qXN9sHiBuHuEv36GxISJyY2OzpSTzZqTx6CVvaubtbymssmtqcWmlKqIbZxmSpxFMq9BNLZANMJCOddJRehOTu5KS+w/Q+s9P+k7PeQ8O989Otg/N9BANcg+McE9ML06MLxANq80LKcxJ7tJP9FjVtZoW9VlV8NPQro+Mro0Kcc3LNY5MNk1LN8yK+c2MOIwLOM0L+I3L943LuA+MeVDNOQ+MN40JeY0KukwK/AzL/AuLu8tLvIxNPM3OPZCRfZNUvxZXulGS/ZRV9gzN+tGSt04POZBRdo3Os4uMNEwNeRIS9I3O9A3OrkjJdU7Pds4O+U7Pus8Qec2POItNt0pMuExO+c8RPBMU/1dZf9rc/9qc/pgavZaZ/lYaPdbZvRkZOhaVuhXVNhAPc8xMNQ0NNMzM+FDQONKRelSS+pTTOFKQdk/N9g5M9s4MeMzM/MuN/8wPv8wPvoqN/wuOv87Rf9DSPtBQuMxL980Ld00Ld01LOI0LeYzLO00L/E0MPQwMvcvMvkuMfgtMPYuLvEvLesyLeM3Ldg6L80+MLUxJbE3LLI7Nelzcf+Kiv+Hjf92hv5pffNhdPNbcPdQavpDYv84YP84Yfk7X+xMZr9PW344Nl09ME5GMVZYQFplRWN4TWqFUnKOW3aUXnmaYXueZHieYXObXXCYWXCZV3GaWHGaWHSbXHWcXXmdX3ifYHihX3miXnqlXnmkXHikWXikV3mlVnunWH+pX4KsZISraIaobIelb4aicYCabXiRanGFaWt/ZGJ2XV9QPV9QPV9QPV9QPV9QPV9QPV9QPV9QPV5PPF5PPF5PPF5PPF5PPF5PPF5PPF9OOmNROWNROWFQPF1QQFpQR1xUUl9aYWFfbXRyinl4mIGAqIOBsH19r3l5r3l1sHd3tXd8vniAwX2FxIKIxIWKwY2Pv5eWvqCdvKynu7astb6zsci4q9C+ptbBotG7ltCsiK9vVK5cR6RHNag+MMJHP+BXUe9XVvFOT+lAQ+o9P+Y8PeI9O989Otc9NdE6Mck5MME4MMA9Nbk6M7c+NcFPRcdYTcddT9FlWNNjVcJMPrw6LcU4LtI5Mdc0Ld8yLOc2MOY0MOEyLeA1LuM8M+dDN+ZDNOI6Ld8zJeo1LOYuJvAwLe8vLPAzMfE1NOctLuIyNOdCRvdYXfZXXP9vdeVESutITeA8Q/5bYP9vdd49Qv99gv9tcepRVNQ+QMYwMtY6PfJIS+45PvA3P/g9RvI3QugtOPQ+Sv9dZ/9td/9qcv9jbvddZ/pea/9hb/9dbvlZZfJcXeNQSeJKR9U3NNIvMNk1NNIwLtg5Nd9EP+NKROJJQdlAONM2L9Y0L9w3Mek3N+onL/wwPP4yPfcrNvkwOv8+Rf0/Qew0NOIzLuA1Lt42Ld80LOEzKugzLO80L/Q0MfYwMfcvMvkuMfgtMPguLvIvLesyLeM3Ldc5LtE/MrYwJbI2LK81MOdvbv+HiP+Gjv9wgvxjePFccPRYbvdPaftCYv85Yf88ZPZBYuRSZ7BRV2QvJ1dEM0dHL1JUPFVeP2J0TGmBUXGLW3aSX3qYYnydZHicX3KZWm6XVW6XVW6XVW+YVnKZWnSbXHebXXeeXXeeW3ihW3mjW3ejWHaiV3aiVXejVHmlWHqkWn6mX4GmY3+hZH6cZnuXZnKMXWmCWGB2UlpvUFJnSFxMPF5OPmBQQGBQQF9PP19PP19PP2FRQWJSQl9PP11NPV1NPWFRQWNTQ2JSQmBRPmRTP2FQPl1QQF5RSVtRUFpTWmVhcHNxiXl4mnp8pX6AsYCBuX1/unh6t3JztGxvtnR3yHZ7zICDyouNxpaXw6SkvrKwu7y5tMvGs9PMsNnPrNvPp9zPo93Qo9nLnNnCmNGoiLiAZ6BeSMt6Z9Z0Z71IP9dRTvdjY+lLTOU/QeI4OeQ6OuI6Odw3Ndk2MdY7Nss4McA1LsdCO7k9M79JP8ZYS7lPQc5kVtFjVMxYScVHOcQ6L802Ldg3L+E2L+M0L98wLd8yLOA3MOQ9NOA8MN03Kd81KOU3LOQvJOovJuwvKe4xLe4yMOs0MOg1MeI2NNc3OeZKTvVZXe1OU9c4Pdc2PPlYYP9+hP9+hv9vdf9nb/9pcP9mbPVcYfFYW/taX/9VWv9ES/w4Qvs3QfczP+4rOewwPvE9SP9TX/9gaf9ncv9lcP5ibf9jbv9gb/1dZ+1TU99GQNY4NdY0MdcxMdcvLtgzMds5NOFEPdxCOtk/N9Y8NNc5MNs4MeA5M+Y2NvE3PPM0O/UzO/Y0PPc2O/I1OeszM+MxL94zLN41Lt83LuA1K+QzK+kyLO8yLPUyMPcxMvgwM/ovMvkuMfkvL/MwLuwzLuU3LuA/Ncw4LL82LK8vJrg7N9JYV/+Ymv57g/9tgP9lfPhccvBQaPRHZfxDZf87Yvk5XvVObNNSZIk9P1EtIUM7JkNHLktNNVpgRFpqRWN4TXGIWniSYniWYHSVXHKWWXGYWWyVU22WUm6XU2+YVHKZWHSbWnWcXXWcW3SbWHSdV3agWHehV3aiV3aiVXWhVHSgU3ulW3ujXXqeXnWXW22LVWJ+TVhyQ1NqPkFXMD9VLzxSLFtLO15OPmBQQGBQQGBQQF9PP2BQQGFRQWNTQ2BQQF9PP2BQQGJSQmNTQ2JSQmBQQGZWR19RRlxPR15UU2FaYWRgb21rg3Z3lnd5ont9rn1/uHh8uXF1tWtwtGxvtm5xvnV20Hx+1YmJ05iYzqinx7i2wcnFutPOsdvXquLbpefepebdouTbpOLYo9vRoNTHm9O8mrucgKl8ZcWLd8p9bbRWStJhW/ZycOxaW+dLTOM/QOc9Pus+QOc7O+I2Nts2NNY9OMk4M8o/OLk2Lrg+M71LQLZIO8hdTd1vYNRgUcZIOr01KcUxJ9Q2Ldw1LdswKeI1MeU5NeQ9N+A8M9w4Lts1Kd80KuM1Kuw3Lu01K+0yK+swK+cwLOMyLOE0Lt01MtY4N9g+QORKTPNXW/peYvxcZP5dZf9hafRTW+9OVvFRWf9fZ/9qcf9mbPVaYPNOVO00OvEsNfQqNvctOfEnNeUhLeYnNu03Q/5QWv9aZP9ibP9kbf9lbv9jbf1baPVRWuVFRd48N9s2NN42M981NdwzMNoyL9s2MuA+Ods+N9g7NNc6M9s4Md84MuU5Nec6Nuo3Ous3Ou02Ou83Oe83Oew2NeUzMd8yLNwzLN02Ld83LOI2LOUyK+oyKvIxLPUyMPcxMvcwM/ovMvkuMfcvL/MwLuwzLuU3Lt88M9Q9MsI4LrYxKrc3NNhaW/+Qk/tzff9mev9edvlXb/dPaflGZvs/Yvw8YfRBYeVPaLlLVng7OEwyIzw6IzxCKEVHL09TOFZkQWBySm6DWHWPX3aTXXSTWHGTVnCUVGuST2uUUGyVUW2WUnCXVnKZWHOaW3OaWXWcWXWdV3WfV3WfV3SeVHKeUXGdUnCcUW6YUGyUTmiMTGKBRlh1P05pNkZdL0BXK0BXLUBXLUFYLllMPFtOPl5RQV5RQV5RQV5RQV9SQmBTQ2FURGBTQ19SQmBTQ2FURGFURGBTQ15QQ2JVTVxRTVtRUmNZYmtkdHFthHZ1lXp8pXl7rHl+tnh8u25ztWVpsGBnr2puuHJ1xn1914eE3ZeU26mn2Lu5z8vKyNzYv+XhtOnkqu3opvDppe3lpOfhp+Lbp9fPocvDnLivkKmbgZuDa6iDcKdvYJxSR7pdVd1tafd1de9fX+RKTOVAROtBROw+QOg4OuI2Nt89OtQ7NtRBOsI3MLc3LLc+M649L7ZGONtqXN9pW9lbTcpCNsUyKNE0K9k2LdkyLN41MulBPuxHQ+A9NtUyKdUxJ9oyJ94wJeY0KugxKecuKeYvKeMyLOI3L+E9NOBCOcYtKMo0M9xEQ/BWWPpeYvdaYfNTW/FRW+hGUepIU+9PWfxcZv9tdv9udPRZX+M+ROkuNfQtNPsyPPwyPvUrOe0nNPY2Rf9LV/dJU/VQV/hXX/5eZv9ja/9gafdSWelCSd45N943MeM3Nek8OOs7O+Y5NeE1Md02MN06M9k7Mtc5MNc5MNw3MeE4M+c6Nuk8OOM5OeM5OeY4N+g4OOg4OOY3NOE0MNsyK9o2Lds3Ld44LOI2LOcyKeswKfMwLPcxLvUxMvUxM/gwMvcvMfcvL/IwLu4zLuc2Lt05MNxEOcc4MLs0LrUvLuRfYv+DiPhsd/5ieP5Xc/pQbf5MbP9DZvY6XfM7X+xJZtRTZ51ESmw7NE8+LD08Jzo/KEVEL0ZIMFFcPFlrRWd8UXKJW3SPWnGQVW2PUmuPT2mQTWmRS2mSTGuUUG2WVG6XVXCXWHGYV3WcWXWdV3ScVXKcVHCaUm2XTWuVTWqUTGWNR2GIRVt/QVV0O0xpM0VgLUFYKj5VJ0JcL0VfMkljNldKOlpNPVxPP15RQV5RQV5RQV9SQmFURGBTQ2BTQ2BTQ2FURGFURGBTQ19SQlxQRFpPTVpRVmJYY2pjc3FthnZ1lXh6o3p8rXd8tHN5t21ytGJpr11krGFnsWxyvnh7yomJ35WR5aSh5La14cfE2dXRzuHdxOfkuevmr+7qre7orOniq+PbqtrTqcvCobu2maWljZuZhJOIdpiBcZlyY5tiV7NpYM9ybfuLifV1dOpbXeZMTuhDR+1AROw8P+k7PN86ONs8ON5FP9NDO8M6MLo6L7A2KacxI79JO9thUuprXNtTRck6LMw0J9Q2K9c0Ldk0MvFNS/5aWO1LRto5MdYzKts0K94yKN8uJuEsJeEsJd4tJdwxKdo2LNk7MNc/NMIvJ8Q0LM46NtlDQt9GSOBFSeRHTupNVvFRXfZWYvhYYvlcZf9ncP9tdfRZYd47QOoxN/EuNPItNvIqNOslMuwoNPs9Sf9TX+0/SehBSepHTPRRVv9ZYP9YXfRHTeQ2OOE1M+Q3M+o7OPJAPvRAP+89O+Y5NeA3Mt04Mto5Mdk4MNk4MNw3MeM3M+g5Nuk6N+I6N+A7OeM6N+Y6OOc6NuU4NOA1LtozK9o2LNs3Ld44LOI2LOcyKeswKfIvKfYwLfQyMvQyM/cxMvYwMfYwL/IwLu4zLuc2Ltw4L+BGPMk5Mb4zLrYsLO5mav95gPhndP9ief1Ucf5La/9Hav8+Y/I2Wes9XuNRaMRYZYhCQmdDN1tOO0dGMUFDLUpIM0VFLUxVNlNjPmJ0TGyDVXCLWG6NUmuNUGmOS2ePSWiQSmiRS2qTTWuUUG2WVG+WV3CXVnSbWHObVXGZU2+XUGqTTWeQSmWOSGSNR2CHRF2BQVd5PVJxOE1pNkxmNk5lN09mOExmN09pOVNtPlVIOFdKOltOPlxPP1xPP11QQF9SQmFURF9SQmBTQ2FURGFURGBTQ19SQl9SQl5RSVZNUl9YaG5me3RwiXh0l3h3oXh6q3l7tHN5t2pys2BnrVtjq19nsGpyu3Z8xoCEzpOV4J6e5K2u57u95svJ39TT2N3bzuHfxuXhvubivOTfueDXttrQtc7Gsb61pq2nm5iajIyOgImFeYp8cZF2a5tzaahtZbpvaeaJhO6BfvNzcvFlZPFXWfBNTu5ERexAQOM6N+A7N+RCPd5FP8w8M8Y9M8RCNa8xI64wIsdJO9xYS9ZOQMw9L844KtE3K9EzKtY0MvVVVf9raPpdWONEPtw7M987MuM4MOI0LeMyLOIxK90wKdQwJ80vJMYvJMIwI8U5LMA0J8EzKcs6NddDQdtFR9tCR9pASN9DTutPWvJWYfJWYfpeaf9nb/NZYeFCR+o6PO01N+8yOO8yOPIyPfc5Q/9IU/9WX+Q2P900O982O+tBRPlKT/xJTfQ7QekxM+g1Mes5NfA9OfI8OfM7OfA6N+k3M+I3MN87Mtw7Mds6MNw5MN84MuQ3M+g2NOk3NeY6OOQ7OOY6OOg6Oeg7N+Y5NeE2L9wzLNs3Ldw4Lt85LeE3KuUzKekxKfEwKfQxLfMzMvEzM/QyMvQwMfQxL/IwLu4zLuc2Lt43L+BDOso3MMAxLcAxM/hrcf9xevpmdPtddPpQbf9DZv89ZP85Y/U4XuZFZNlabatWW3dFPmRKPWFZRlRPO0tJNFBJNkdFLkZPMkxcOFpsRmZ8Tm2FU22KUmyMTWiNSmaOSGePSGeRSWmSTGqTT2yVU26VVm+WVXSZVnOYVW6VUmqSTGaPS2OMSGGKRl+IRlqBQlh8P1N0O1BuOE9rOlJsPVduQFpxQ1VvP1ZxPldxQVJFNVVIOFhLO1pNPVtOPlxPP15RQWBTQ2BTQ2FURGFURGFURGBTQ2BTQ2JVRWFWUF5WY2plfHl1kH15mnp5oXh5qXZ5sHN3tGpys2NqsFtjq11lrmhwuXZ+x4GH0YiM05md3aOl4K+z47u/5cbH48/O3tTT2NfW0dnXy9nWx9fRxdLJwMzDvsW5ubSorKOanYqLhnh7dHl2cXVsZX9sZY1vZ45hW51gW8Bzbdh5dfB/e/x8ef9ycP1jY/ZTVPBIR+9DP+o+OuE8NuBBO9E6MdNDOt1USsI+Mrg2Kb05LMI9Lsg/L89CMddDNdZAMdE3LdAyL+pMTfpfXfJXU99EP9k6NNs4MeA3MOY5M+c5Muc5MuI6Mdo5L9E5LMo4K8U5KrAoGLgzIshAMtNJPtJEQMs7Osw3O886QNE3QeJIUu1WX/BZYvVeZ/dgaepVW9xBReVAPuw/O/NAQ/tHSv9MVP9RWf9UXf9WXuE0OtovNdwvM+c3OvQ9Qfg7P/c0OPMxMu00Mu85NfA4Nu00MusyMOoyMOc0MOE0LuM8NOA9NN88M947MuE4M+Q3M+g0M+g0M+g4OOc5OOg4OOs5Oes5N+k3NeI1L94zLNs3Ldw4LN06K983KuMyKOcwKO8wKPIxLPE0MvA0M/MzMvMxMfMxL/ExLuwzLuc2LuA5Mdk8M8w3McEwLdFAQ/9udf1rdflicfBSafVIZv87Yf80Xv82Yvs+ZOROacpcaYtHRmpGOl1MPF1WQ1hRPlJKN09HNElELkRKLkdVMlNjPl5zSGd/TWqHT2qKS2eMR2eMRmaOR2aQSGeQSmmSTmuUUm2UVW2UVXGVVXCVUmqRTmeOS2OMSGCJRV+IRl6GR1yCRVt+RFd4QVZyP1VvQFlwQl1yR151R1tzQ1l0QVhzQE5CMlFFNVVJOVdLO1hMPFpOPlxQQF5SQmFVRWJWRmJWRmFVRV9TQ2FVRWZaSmhdWW5nd3Vwjnx4mXt5oHd4pnZ3rXB1r2pvr2ForF5mrl9nsGVttnB4wH2FzYmQ2I+X2Jmg1qGo1qqx27S537q/38DB3cPD28fG2MbD1MXB0MG7ybyzxLuwwbWovKaYr5aLnIiFjHFxcXRwb3BmZXdoZYZuaoRfWZVkX5taVLlmYNlzbvB6dv97d/93c/9oZvxaV/5STvVIQuY9NudEPdg7NNtHPepcUsU7MMQ8MLw2Kr42KMc+LtFEM9RCM9RBMddBM9I4Ntg+Pt1DQ9xCQNY9N9U4Mdg3L943L+U6M+Y5M+U6M+I7M9s+NdVBNdFFOMxHNq4tGLw7Jc1KONFMPcY9NbovKsAwMMo5PtdBSuFLVOtVYPBaZfBdZexZYd9MUtQ+QM80L9g3L+A7OepAQPJDSPVESvFCSe4/RuI1O98yNuMzNu84PPU3OfgxNPsvMvwxNO8yMPA5NfA3NOwwLugsKucwLOYzLuAzLOQ9NeA9NOA9NOA8M+M6NeY5Neo2New2New1N+w1N+01N+42OO42Nus1NOQyLt4xK943Lt05Ld06K983KuE0JuYxJu0xKPExLPA0Mu41M/E0MvIyMfMxL/ExLuwzLuc2LuI7M9I0K9I6NcYyMOhWWf9wePljbvJaaedJYPNGZP84Yv8vXf81Yv9CaNxMZbFQWWo1L15HN1hLOlVOO1tQPlZJOE1AMEpDMEBGLEFPLktbNlhqQGJ4R2aBSmiISWaLRmWKRGOLQmONRWWOSGeQTGiRT2mRUmuSU26SUmyQUGiPTmSLSmGKSF+IRl+HSF+HSF+FSF+CSF1+R115Rl13SGB3S2N4T2N6Tl11Q1t2QVp1QEpDM01GNlFIOVRLPFdLPVlNP1xPP15RQWRXRmVYR2RYSGJWRl9VSWFXTWdeVWxjZndyiXl1mnh2nnRzn3JypHR1rWxwr2JnqVphqV9lr2ZsuG1zv3Z8yIGH04+T3Zec3puh1aCn06mt2q6z3bG03bK027S02ra027Wx1rOt0a6nyauhxKqewqWZvZmLr4h+mXx4hmRiZ2llZmNZWmpbWHtjX3lWUJJjXYpORqJVTb1gWNZrY/F3cv9/ev96d/9uav5hXPdUT+lHQu5PSd1CPd5HQOpXT7osIr4xJ740J8c+LtFFNss+LcEyIso3J9tFN95FP9M5N8wzLs01MNQ7Ndc9Nd08NOE9NOQ7NOQ5Mt41Ltc0K881Kco4K8U8LMI/LdRTPshHMr08Kb46LcM9MsQ7NcI3NMI0M9xLTt5NUuFQVeVUWehZXeVWWNxNT9NEQMk1K9E3K9k4MN01MuIyNOUyNuYxOOYuNuw0PuwzO/M1P/s5Qv00PvorNf8oM/8vOfgtM/k1N/k1OfAuL+sqK+kwLug1MeI1L+M8NOA9NOA9NOE9NOQ7Nuc6Nus3Nu42Nuw0NuszNewyNe0zNO01Neo0MeMxLdswKN44LN06K906K944KOA0JuMzJOkzJuw0Ku41MO41MvA0MvAzL/IyL+8yLOw0LOc2LuQ9NM0vJtc+OcwzNfliZ/9vefdbafBOY+pDXflGZv86Zf8wXf82YfZHaMlKXZNDRlIsI1ZJOFNMOk9INltPP1VJOUY/LUhGMT5CJ0BKKElVMVNkOl9yRWV9SWeESmWISGOIQ2GJQmKKQ2ONRWWOSGaPTWiPUGmQUWyQUGuQTWaNSmOKSWGIR2CHRmCHSGCGSV6BR15/Rl99R2B8SWF7S2R7TWZ8TmZ+Tl14Q116QF57Q0NBNUZEOEpGO1BHPlJIPldJPl1NPl9PP2BRPmFSP2BTQl9WR2JZUmdiX29qbnNvfndxk3p0oHx5qHl3qXBwpmdno2BholxfpGBirWZotW9wwHl6zISC1o2L35aS55yZ5qCe3aGh16Oj2aSk2qaj2KWi16Wh1KSg06We0aOdzaKayaKZyJ+Ww5mNu46CsIN8nnJufWlnbGReYGZaWmtZVXJXUH1XToxXT5VSSahaULVYUMFaU9hrZOx5cvmCfP+Lhvl1cf91c+1fXd9QTNlFQe9aVMw3McUyKsQ2KsM3KMA3J8M3JsY5KMo7K9A8LtU/MdI4LtY8Mtc/NNM7MM01KM0zJ9g6L+JANeA5MOE5MN43Ltc3K883Kck6KsY/LMRBL8I9LsZANMtFOs1HPMxDO8U8NLsyLLYrJsc8N9BFQtlPTOBWU+NZVuFYUthPSdBDOsw7KtM6KNw4LOI1LuguL+wqMvAoM/QnNvotPvorP/sqP/0pP/8oP/8mP/8kPP8kPP8kOP8nOf8rPP4sOfMrNe0uNeg0Nec7Od04NN06M947NOA7NeM6NeY5Nek3M+s1NOszNew0Nus1NOk1NOc1M+I1L901LNs1Kdw4LNs5Ktw5KN45Jt84JuI3JeM2JeY0Juw1Le00L/A1MPE0LvE1LO01K+o1KuU3LOA5MNg3L9U6Nts/Qv9td/9ic/tTavVJY/9LavY3Wf82X/88Z/g+Y+dOaq9JVl0jIUQsID86J0hFNFBNPFBJOUVCMT5DLz9HL0JIJkVLJUtTLlNdOFtrRGF2S2R+TmSDSmKGRmCIQmGJQGOLQmWNRmiQSmyQUG2RUWyRTGmOSGeMR2aLSGaKSmWJSWOFSGGDR2SDSmSBSWJ/R2N+R2R/SmR/SGV+R2F9Q1t7PFx/PV+CQj0/ND9BNkZDPEpFP1BFP1RHPltLPl1NPWBPO2BRPF5TQV5WSWNbWGhjaW5seXNvhnRwlXZwnnRwonBtomdmn2Fhn11eoVxcpGVksGtqunRyxX17z4aC2Y2J4JSO5piT5ZuW2ZyY1Z2Z1p6a156Y1p2X1ZyW1JuV0Z6W0ZyUzZyTypuSx5qQxJOJu4h/roJ4nXRrfG1kaWZdXmZbWWlaU29XTXtVSopWS5pWS7BcUrpZUsFYUtNmYeBxauN2b+1+d/2Hhf+Hhfd1c+5nZONVU+taVccyLMIvJcU3KcM3JsA3JcE4JsQ4J8g7Ks87LdM9L9U5LNU5LNM6LNI6LNE5K9E5K9Q4K9g4LN87MeA5MNw4LtY4LM85Ksg5KME6Jr45Jr42KsE4MMY9NclAOMpBOcg/N8U8NMI5Mb80Lcc+NtFIQNhPR9pRSddORsxDO8M3Kss4JtM4JN03KeU0LO0vL/QrM/kpN/0oOv8rQP8qQf8pQf8mQf8jQP8hPP8ePf8dOv8fOv8gOf8lO/8pO/ctOfAxOeo3OuU7O9w5NNw6Nd47NOA7NeM6NeY5Nek3M+s1NOszNew0Nus1NOg2NOQ3Md82L9w1LNk1Kds5Kts5Ktw5KNw5Jt45Jt84JeE4JeM2Jec1K+ozK+s0LOs1Kus1Kuo2KOQ3KeE3Kt87MdU0LNM1NPNUWf9lc/9bcPVHYv9JaP9BZP87YP0zW/k7YfJNbc1MYok4P1MqJEE1JzY5KDs8LEJAMURBMEA/LT1CLj5HLD1DHUtQJ1xiPGVvSmh2UmV6UWR+T2SCTGGDRmGGQWGJQGOMQGeNRGmOSGuQTWyRTmyRS2qQR2iNSGaLRmeKSmaJSWaFSmSDSGaDS2SBSWR/SGSARmWBR2WBR2Z/RWJ+QV2APl+EP2KHQjY5Ljo8MT8/N0RBOktCO09FPFZIPVlMPF5PPFxPPFxTQl5XTWNdXWhlbG9te3NxiXNvlHFrmWpmmGNglVxblFpamFxdoFxfpmhqtW5vv3d4yn+A0oaE2IqI3I+L4JGO3ZOQ05OR0JOR0JOR0JSP0ZOO0JOMz5KLzpWMzZOLx5SLxJSLwJOLvoyEs4N6pYBylXxld3VeZmlbW2RbVmRbUmZYS3JWSIRUSKJZUL1gWclcWc9ZV9tjYuFrad9va+N2cfuKhP+Khv+Fgf99efduaO5hWMQ0K8AyJsQ4KcE6J8A5JsA5JcI5JsU6J8w6K9A6LNY6LdM1Kc41J9A4KtQ+L9Q+L842KMsvIto6Lto4Ldk3LNY4LNA6K8k6KcI5Jr43JL01KcA2LMI4LsQ6MMc9M8pANstBN8xCOMc6McpANs9FO9BGPNJIPtFHPcpANsU3K8w2JdY2Jt83LOc0L/EwM/YtNfsrOf8qPPwnO/wnPfslPfkjO/shOvoeN/wcN/4bNv8eOP8fNv8kOP0qO/cyPPE2Pes4O+Q6Otw5NNw6Nd47NOA7NeU5Nec4Nek3Nes1NO0zNu40N+01Neo2NeU2MeE2L9w1LNg0KNo4Kdk5Kdo5J9s4Jd04Jd43JOA3JOE2JeE1J+I0KeM1KuM2KOM2KOE3KN42Kds3K908MtAxK9g4OP9rcv9dbv5QafE8W/9IbP83Xf8+Zfk1W+4+YuZWcao/UWEjKEwvKTs3KzA3JzM3Jjk8KUA9KkE8KEA+KUJCJj9GHVhhNHN+VICMZHeHYGh/U2F9TGGAR2CDQ2CFP2GJQGOMQGiORWqPSmuQTWyRTm6TTWuRSGiNSGeMR2iLS2iLS2iHTGeGS2WES2SDSmOARmSBR2aCSGaCR2WBRmKAQmOGRGWKRWiNSDI1KjU4LTs8NEE+N0dAOktCO1JFPFZKPFhMPFlNPVlRRF5XT2NeYmlncm9ugHJvjHJtlWpnlGBej1dXi1RVjldYmFxfomFjrWxuu3Jzw3t8zoKD1YiG2YqI24yI3I2K14+O0o+Nzo+Mz46Lzo+Jz46I0I6Gz42Fzo+Fyo6Fxo+FwZCHvI+HtomCrIB4nX9vjIBfcHxZYGxYWWRbVF5fUV9cSWpXRn1TRZ5VTL5cWdBZW9lYXORjZ+dra+FwbOV4c+x9du16c/6Dfv+Ggf+Be/VrYck8MsQ4KcI7KL86J787Jr46JcE6JsU6J8g5Kc44Ktg6LtQ2Ks41J844KdE+LtE+Lss4KMcvIdI2KdM1KdI0KNI2KdE5K808K8g9KsQ7KcQ6LcQ6L8Y5MMY5L8c6Mcg7Mck8M8s9M9NEPNNFO9BBOcs9M8s8NM9BN89AOM47Mc41J9k1KeI1LuszMfIvNfcrNvkpN/wpOvkmOfcmO/cmO/gnPPsmPP0lOv8kOv8jOv8iN/4jN/olN/ksO/c1PvI5P+g4OuA4N9w5NNw6Nd47NOA7NeU5Nec4Nek3Nes1NO40N+40N+42Nuo2NeY3MuE2L9w1LNc1Ktg4Ktg4KNg4KNk4Jto3Jtw3JN02JN02JNs1Jdw2KN03J9w5KNw5KNs6KNk5Kdc6K9c6MdAzLutIS/9vef9WavhEX/g8X/9BZ/8zXP84Yvg+Y+hNbMVPZYAwPUodIEMxLTExJy42JzQ9LD1CLkJAK0I8JEU+JEhFJFVcMHB+TY+fcpeofIOYbWqEV197Sl1+RV+DQ2GGQGKKQWaPQ2uQSmyRTG2ST22ST2+UTmySSWmOSWiNSGmMTGmMTGqJTmmITWaFTGSDSmSBR2WCSGeDSGiESWaCR2SCRGeKSGmOSWyRTC0zJzM2Kzg5MTw7NkI9OUdAOk1EPVFHPVNJPVNLPlVORFpVUWFeZWlndW1rgWxrimpokGJgj1hWiFBQhlFRjVhZmmBjqmZqtG9ywXV4yXx/0IKF1oaH2YeI2IqJ2YuK1ouMz4uKzIqJzYmH0ImF0YiE0YqD0YmC0IyEz4uEyI2FwY2Guo2GsIeBpX53ln9thYRZaoBTWm5WVGNcUlphT1pfSGVaRHhVQpJMRLhUUtBTV9tSWeVeZOhlauNrbOZ1ceR1buJvaPd+dv+Ce/+HfvRsYMk/MsE4KMA7KL89J789J8A8J8I7J8U6J8c4KM03Kdg6L9g3LdI4LM85K8w6K8k6Ksg5Kck3KM85K9E3K9I4LNE3K883Ksw4Kss8LMs+Lco8MMk9MMo8Msk7L8g6MMc5LcU3LcU1KtBAN9BANc09NMk5Lss4MM47Mc06Msw1LNAvJdkwKeQyMOwyNfQvOPktOfsrO/wsPPwtP/suP/wvQPwvQP4vQf8vP/8tP/8uQP8pOfwpOPcrN/UwOvE2Pe04PeM3N9w0M9w5NNw6Nd47NuI6N+U5Nec4Neo2New0NPE0OPE0OO81Nu03NuY3MuE2L9o2LNc1Ktg4KtY5KNY5KNg5Jtg5Jtk4Jto3Jtk4JtU4JdU6JtY7J9U9KNQ9KNQ9KtQ9LNQ8LtE3L9o7OP9eZf9hcf9Qafc8W/9Baf80X/80YPsxWfRLbNtZcZU+TlolLUMpLDoyLy0wKTA4KzdALzxBKzw8IkE8HlVIKGBbNXuFU5CjbKq+i6i+jY6ld2+LW2F/S15/RmCERGOIQmWNRGqTR2+UTnCVUG+TU2+TU2+UTmySSWmOSWeMR2mMTGmMTGmLT2iKTmeGS2WESWSDSGWESWeFSWiGSGeFR2WFRGmOSWmRS2yUTisxJS40KjQ3MDg5Mz46N0I9OkhBO0tEPE5IPE5HPU9KRFdTUl9eZmZldWdnf2dmhmJhiVtZilFRhU5Ph1JTk1teo2Vps2xvvnV3ynp80X+B1oOF2IaH2YaH14iH1YmJ04eIy4aHyIaFy4WDzoWA0IWA0od/0oeA0I2F0oyFy42FwYyFuIuFq4R/nXt2jXxqeoRWY4FQVm5VUWReUFtlTVhiSWJeRXNYQ49PRbRXUtBVWtpTWudcY+hhZ+Vnauhwb+x5cuZxaPd8dPNzav54beZcUcQ7K741I8I7J8E9KME9KMM8KMQ7KMc6KMs5Ks83KtY1K9g3LdQ6Ls46LMc6KcQ4J8Y6Kco9LM89LtZAMtlBNNY+Mc44Ksg0Jso4Kcs8LMk6LMg6LMk7L8k7Lco6L8g5K8g1K8c1KMo2LM87L9I+NNM/M9Y/NtU+M843LsksI9IrJdwtKucwMvAzOfYxO/owPP0wP/0wP/kwQPcxQPcxQPYwPfcvPPctOfkrOPoqN/wwPPkvO/QwOvE0O+02O+Y2Od81Ndk0Mtw5NN06Nd86NuI6N+U5Nec4Neo2New0NPI1OfI1OfA2N+03NuY3NN82L9o2LdY2KtU3K9Q4KdQ4KdQ5J9U4J9U4Jdc3J9Q5JdA5JM48Jc89Js8/J85AKM5AKtA/LtI7MNE2MetISf9mcv9PZP9IZvs3W/9Bbf0vXf83YfI0WONQarxVZm0xOUUoKkU2OTczMjU0MDY5MDY9LTM7IzM4GENDHWphOoWBVJ+ud6nBh7XOl6/Hk5KufXaUYmWGUWCCRmCFQmOIQmePRm2WSnKYT3KXUnGVVXCUVG+UTmyRS2iNSGaLRmiLS2mMTGmLTmmLT2eGS2aFSmWESWaFSWiISWmJSGmHR2aGQ2qPSmuTTW6WUCgwIysxJy80LTM1MDc2NDw4NUA9OEM+OElFPEhFPEtIQ1JQUVtbZWFidGJifGBggl9eiFpYilRUilRUkFxdoGdps3BzxHZ4zXt/2H6C24OE3oSG3YSF2IOE1oWE1IaF0YOGy4KFyIODy4KBzYOA0YWA1IiA1YiA042F0ouEyIuDvouDsomCpIF8k3dwgHZlb35VW3xQUW5VTmZfT11lTVpkSWFhR3FdRYlURq1dVMhaW9RWWuJbYeZdZOlhZe5sbPV6c+1yavd4b95ZUOVbUNJEOMM1J8c6KcU6J8Q8JsU9J8g9KMo7Ks06KtA4KtQ2KtMwJ9QzKdI4LM07LMc7KsI7KMA7KMM8Kcg7KtVDNOFLPd5IOtM9L8o0Jsk1J807LMg5Kcg5Kcg5K8g5Kco4K8o4Kcs3K8s3Kc02K9I8Ltc/NNhAM9pANttBNdc6MdIxKdwwLuUxNO40OfU2Pvk0PvkxPvowQPgvP/IuPO8vPO0vOe0wN+8tNe8sMvIrMvEqMfUyOvM0O/I1O+w1OeU1N+E1Nd42Ndw3Ndw4Nt05N986NuM6N+Y4N+k3N+o2N+w0NvQ1OvQ1OvE3Ou44N+Y3NOA3MNo2LdQ2KtM3KtE4KtA4KtA5KNA5KNA5JtE4KNA5Jss5Isg6Isg+JMc/JchAKMhAKsw9Lc87Mdc5NvxVXP9ecf9HY/8/Yf86Yf83Z/4zYPs5Xu1GYsVOYYlASVMxMkE2NEA6PDo0Nj81Nj43MTc5KzQ9IjlDHlNaLoKCUKKncbHFiq/LjrDMkqbDjZKufXuZZWeIUV+BRV6DQGOJQGmPRG+VSnOZUHOYU3GVVW+TU26TTmuQSmeMR2WKRWeKSmiLS2mLTmmLTmaIS2SGSWSGSWWISGeKSmiLSWmJSGaJRWqSTGyWTm+ZUSYuISgwJS0yKzEzLjMzMTc2NDo5NT08N0dEPUREPEdGQk9PUVpaZF9hcF9helxcfmBfiVxajFlYkVxcmmdnrXFzwHp80X+A3IGE4YKF5IWG44SF4YOD24GC1YOC0oOCzoSHzIOGyYSEzIOCzoWC04eC1oqC14yD1I2F0IyDxIuCt4qCq4aAnH94iHNudXFiZXZXVXRTTGpWS2ZfTWJmT19lSWNiRnBeRnpRP51bTbdaU8VTUtdWWuJXXOpZYPJjZfdybfBtZfdxaNFEO9RBN8UxJcg0JtRDMsc5Jcc6Jsk7J808KdA6K9M6LNg4LNk3LM8sI84wJc42Kcs8LMdALcE+Kr47J7w3JMA0I9FCMuNPQeROQNhCNMs3Kcs3KdA+L8o7K8k6Ksc4KMY3J8g2J8o2KM44KtA4K9M7LtU7L9U5LdI2KtU3LNo8Md08Mtw3Meg4OPE4Pfc6Qfs5Qvo0QfUvPPIsO+8sOu0vO+oxOeozOOs0OO01N/E1NvQzNvM1N/AzN+82O+05POk2OeI0Nd0zM983NuA7Od04Nt45N+E5NuM6N+Y4N+k3N+o2N+w0NvQ1OvQ1OvE3Ouw4OeY5Nd84Mtg3L9M3K9A4K806Ks05K8w7Ks06Ks06KM06Ksw7KMU5IsI6IsM9JMI+JcM/KMY/K8o8LtA5Mt88P/9cZv9RaP9JZv85Xf89aPkuXf08aOk7XOVccKZMVl4uLkc4M0JDPjw4OT80OEUyNkM0MT06KT5FJkZVKmJzP5CbYa29f7HLjKvJi6bDi526hI6senuZZWaHUFp8QF6BP2GHPmiOQ2+VSnKYT3KXUnCUVG6SUm6TTmqPSWaLRmSJRGaJSWiLS2mLTmmLTmaIS2WHSmSHR2WIRmeKSGiLR2iLR2WKRGuTTG2XT3CaUigwIycvJCgtJikuKC4wLTMzMTc4Mzk6ND09NT9AOERFQEpMS09SWVZYZVpcc11efVlYgltZi15dlmVlo25utnd4yH+B2ISF4oyM7oyM8IqK7IaH5IKC3ICA1oKA04OCzoCDyIGEx4ODy4SEzoaD0IiD04uE0oyEz4qAxYqAvImAr4d9n4B4jXdvemtlZ2ZdWG1bUW1bTWlcTGZeS2RfSWVhSGhhR29fRm9QO4VVQaVdT79hWdFZWN1RVO5TW/hcYPloZeZZUNREPM43MNE3L9c6MdY9L9Q7K885KM06Js85KNE6KdQ4Kdg4Ktw1LNw1LNAvJc0zKcw4LMo+L8VAL8FALb49Krw5J8I5Kb4wIulXSt9LP8MvI9E9Mc48L8c4KMo7K8k6Kcg5KMc4J8g3Jsk2Jss1Jsw0JtA3Kdc7Ltw+Mtw8MNk3LNo4LeI+NOxDPPVCRfI5P/AyPPY0P/YyQPEtO+0tOu0yPew3PuY1O+Q2OOU3OOs5OfA6OfE3OO83N/I7Pe48POo6OuY4N+E4Nd83NNw3Ndw3Nd45N+E5OOM5OeY6Ouk5O+w5PO05PO84PPQ3O/M2OvA4Ou05Ouc7OeA7Ndc5MM83LMo4K8g5Kcc5K8Y6Kcc6Kcc6KMg7Ksc8KcE5I8Q9J746I7Y0Hrw5JclEM88/NsoxLP9eZf9WZ/9JYv88XPgxWPcwWfs2Y/VCaedZb6xGUW8zM04zLEI/Nj5DPEA3OEAtMUwvM0syLkE5JkRKKFpuPX6aX564d6jFgqvJi5++gpi2gJSyfoKgbmaEUlh2Qll7P12APmOHQWmPRG6USW2VTGyUTmuST2yRTmmOSWaKRGOGQmOGQmaJSWiLS2aKTGSISmeLTWiMTmeLS2aLSGWKRWaLRWqPSWuTSnGbUXKeU3SgVSowJCkvIykuJykuKC0vLDEzMDU2MTc4Mjs8ND4/N0FEPUhKR09QVFNVYVhZa1pcdVxaf15diWRilGtqpHV0un9+zoeH34uM6Y2N74yM8ImJ64WE4oCA2IB+0oB/z4GBy4WGyYaHyIeIy4mIzouIz4yGzo2GzI6FyIqAvIl/sYZ8oYJ4kXtzgHRrbmxiYGVdUmVgTWVeS2ZeS2ZeS2hdSWpeSGtfR25eRXdfR39bQ5JZRq1aTMdWUN5SU/VRWP9YX/BVU+NMRdk+OdU2MNk2L9w5MNs5LNY5KNM4JtE4JtE4KNQ4Kdc3Kdw2Kt80LN01LM4wJ8k1Kcg5K8Y9LcRBL8FALb88Kr45KMQ4Kcs8LuRSRdxIPMg0KMs5LMg6LMI0Jso9LMs8K8o7Kso7Kss6Kcw5Kc44Kc82KNM3KtY4LNk3LNczKdUxJ9gxKN43Luc8NfhER/E4Pu0vOe8vOvAwPe4uO+sxPOs2P+Q1OtwzNtgyMt86OO5FQvhJRvhEQ/M/Puk6N+c5OOU5N+I5NuE4NeA4NeE5OOE5OOA4N+I4OOU5Oec5Ouk5O+w5PO05PO43O/M2OvI1Oe42OOo4OOQ7ONw6NdI4Lss3K8Y4KsM6KsI6KsA7KsA7KsE8KcE8K8E8Kb05JME/Kbs6JbM1H7k6J8E7L8o6Mtg8Pf9eZ/9QZP9BW/k4V/Y2W/U7YPQ+ZONJZas/TIM/Pl86Mkc7Lzo+MDg+MkY8OlI+PU4wLlM4L1ZLNWNpRXiPW42wcJ3CfaHGgZq5fZq5gJq2g42peHKOXll1RVRwPVx7Ql9/QGKGQGmNQ22TSGyUS2uTTGmQTWmQTWeMR2WJQ2OGQmOGRGeKSmmMTGiMTmeLTWmNT2mNTWmOS2iNSGeMRmaORWySSW2VTHCcUW+dUnSgVS0xIy0xIywvJiwuKS8vLTExLzM0LzQ1LTk7MDw+MUBCN0VIQUtNTFFSV1ZWYlZXaVxZdF5df2ZkjHBuoHp4t4WDzo2L35CQ6pCO746M7YqJ54eE34F/0398y399yIB/xYaFx4iIxoqKyoyKyYyKyYyIxYyEv4uCt4mArYZ8oYB2j3twgHVqcG5kYmlfVmNdTV9hTF9hS2NeSmdcSmxbSW5cSG9dR3FdRXdhSXhYP4dTPaNWRMdYT+NVU/hPVP5NU+I+PN48N904NN43MeE2L+E2Lt03K9o3KNQ3JtM4JNM4JtU4J9g2Kd01KuAzLN01LMszKMQ2KMI5KcE8K8I/LcI/LcE8K8A4KMM1J9tJPNpGOtVBNc48L8Q2KMQ7K742JsY6Kcc6Kcc6Kck6Kso4Kcs3Kcw2KM0zJ9U5LdU3LNYzKtczKtozK982L+U6M+k8OPA8Pe00OeswN+wxOO4zPO00POs3QOo9Q903O+FBQexOS/hZVf1aVfpRTO9CPuU4NOI2MuA3MuA3MuA3MuE4NeI5NuQ7OOQ7OOE3N+Q4OOY4Oug4O+s4POs4POs4POw4O+81OO40N+w1N+c3N+I6N9k6NM84L8c3LMI4K786K707K7s8K7s8K7s8Kbs8K7s8Kbg5Jr1AKrM5JLE2JLY7K7UwJ8M0MOxQVP9baf9KYPU6VfA3VvFAXe9IZudIZM1OYYI4OWU/NlJAMkRBMDk9LDU3KT42K0w6MEUtI1I9LGddQoGIX5KrdJe7e5bBepa/e5SzeJy4hZq0hYCabVx1S0hiNU5oOFt4Ql99P2ODQGiMRGySR2qSSWiSSmeQTGaPS2SJRGSHQ2OGRGWIRmiLS2uOTmuPT2qOTmmQT2mQT2mQTWePSWePSGiSSGyUS2+ZTXOhVnOjV3akWTI0JjA0JjAxKTAxKzEyLTIzLjM0LjQ2Kzk7LTs+LT9BM0RGOUlKRE1PTlJRV1NTXVhWZFxab2Rhfm5slHp3rISCw4yJ1pGP45SR6pOQ646L4omF2YJ/zH98w398v4B+v4SCwYaFwYmIwo2Kw4uIv4mFuId/roV9pIV7nYB2jnlufnJnbW1hYWteVmlbUGNcSl1gS11hSmNeSmhbSm1aS3FaSnRaSXZbRnNXQXhSO4pRPapZRs1bUONUUPBGSfE+QdsyL9w1L+E1MeM2MOM1LuE1K+A2Kds4KdY3JNM4JNE4JtQ5J9g2Kdw2KuAzLNo2Lcg2Kb83J7w3Jr06KL8+K8I/LcM7K8Q4KcY0J+lVSdM8Mcw4LNFCNL41JcA9K8A9K8A4KMQ4J8U5KMc6Kcg5Kcs3Kcw2KM0zJ9I2KtQzKdUyKds0LOI5Muk+N+w/Oew9Oug0New1Oe82O+41O+oyOuUyOOQ3PeI8QPNVVvxiYv9tav9pZPNWUeRBPN82M900L982Md43Md43Md84MuE4NeI5NuU5N+Y6OOU3OOY4Oeg4O+k5POs4POs4POs4POw3PO41Ou42OOo2N+U5N988N9Y8NMw5L8U5LL45Kro7KrY7KbU8KbU8K7Q9KbM7KrM8KLM6J7dALK04Jq04J7M7LasrIsM1NP1gZ/9UZPpHXPA8Ves9WOdHX+FPZNJPX7RTWnZHQVhIOUtEMkZFMUJFMD0/Kjo4IzszHj8zHVBHKm5rSIqTZpWsdJG0dI63c5G6eJ67haG4ipCnfWyCW0tfOkFXMExjN1dyP197QGSDQGmKQ2uRRmmRSGeRR2SPSGWOSmKHQmOGQmSHRWeKSGqNTWyPT22RUW6SUmqRUGqRTmqSTGiSSmeRR2mTR22XS3CcT3alV3amWnioXDc4KDY4KjY2LDU2LjU2MDU2MDY3LzY4Kzs+LT1ALUBDLkRHNElLPk1ORlFQTlJSUlZVU1lYXWFfbGtpgXVzm4B9soiGx4yK05WS4ZSR4pCN3IuH04SBxIF9un98tX98s4F+t4SBuoeEuYmFt4qEsoZ/qIF6m4B4kH9zh3puenJmam1fXmpbVGlbUGpaS2ZaSmJfTGJfTGVeTGlcS25bTHJbS3dcS3taR35VQYZSPZtSQbZWRs5SSNpHQOI4OOUzM90xLd8zL+I1L+M1LuEzLN8zKd01KNw5KNM4JNA5JM86JtE6J9U4Kdk3Kt01LNg3LcY6K7s5KbU2Jbc4J707K8I9Lsc7Lsc3LNA5MPVcVNY9Nck1K89BNbgzJLc6KLw/K786KcM6KsY6K8g6LMo7Lcw6Lc84LdE3LdAzKtIxKdYxK943MeU8N+o+Oug7N+Y3NOk3Ne87PPA8P+o2OeQxNeQ1OuhCRu1NT/94d/9xbvFgW91KQ9E4M9EyLtw3M+c/POA5M+A5M+A3MuA3MuI2MuM3M+U3NuU3NuY2OOc3Oeo3O+s4POs4Pus4Pug3Peo3O+43O+43Oeo3OuQ6Ot89OtY9N8s7MsM7L7o4KrU6KrM7Kq88Ka88Kqw8KKw7Kaw7Kao7KKw9KqY4J6c5Kqo4LawvKctAQ/9ocvRNXvNIW+1EWeVIW9lPXslUXbdUV5xYVWRNP09MOUxHNEpFMUZELT9CJz1EIz5II0tWLlxnPHiBVIuZZpGkbY2pbo+ycpe5fZ+2iJKngHWGZFJjQz9QMEJTMU9hOVZsPWJ7QmWCQmmKQ2qQRWmSRmWRRmKQSGOOR2KHQmaGQ2eKSGmMSmuOTm2QUG6SUm+TU2qRTmuST2qTTWmTS2mTSWqWSW6aS3KeT3alV3anWHeoWT89Lj0+Lj09MT09Mz09NTs8NDs9Mjs9Lz9CL0BELUNHLkZKM0tMOk5PQVFRSVJSSFlXSlpaTl9eXGdlcnFuiXt5oYOAt4eFxI+M0Y+M042Kz4qFx4N/un55r3p3pnl2pXt2rHx5roB8roN9qYN9o394l3x0i3pygXZrc3JmZm1fXGpcU2tbTmxaTGxbS2tbS2ldTWdeTWldTWpdTW5dTXNeTXlcTIFaSZNgT5tWR6dOQLhKPcVAN882LtgxK94xK+E1MeE2L+I1LuI0LeAyKd40J9w2Jto7KNE5JM07JMw7Js47J9E6KdY5Ktk3LNM5LcI9LLU6KLA1I7I1I7s5KcQ8Lsk7L8s3Ldk/N/hbVONJQc46MMxAM7g2JqwzILU8Kbw5J783J8A3J8M3KMU3Kck3Ks43LNE3Ldk8M9s6Mt45M+U8N+o+Ouo9Oec4NeM0Meg5Nus8Oew6Oug4Ouw+QPhQUP9iY/9wcPloZeJUUMo9NsAxK8k0MNY7N989OuA7N+I7NeE6NOI5NOE4M+M3M+Q3M+U1NeY2Nuk2Oek2Oeo3O+s4POs4Puo3Peg3Pek2Ou84POw4Oeg4OuM7Ot0+OtM+N8k8MsA8L7Y4KbI6Ka47Kao7KKk8KKg7J6U6JqU6KKU8KaA5KKA7KaA5KqI2KrU+ONtUWPtlcO5LXO9JXelKXNtNW8lRWrRWVqBaUopgUlBJN0hNOU5JNUhAKzs1GzY3Fz5PJUxmNmyKVHeUXISbZYmaZI2bZpCja5StdJiwfIOVbW59XFFgQzxKMDlGLEFQMU9fO1dqPWN6RGWCQmqLRGuRRmmSRmWRRmGPRmOOR2OIQ2mJRmqNS2yPTWyPT2yPT22RUW6SUm2UUW2VT22WUGyWTGuXSm2ZSnKfTnOiUXusXXusXXqrXERBMERCM0RCNkNDOUNDO0NDO0JCNkJDM0RGMEVILUdKLUpNMk9OOVJRP1RSRVVTRFxaQ1xcRFxdT2FhYWloeHJxkHt6poF+tYaCv4iDw4iEwYSBun97rnlzoXRvl29tlXBsnnJuoXZwnndymndyknRvhXNrenJpbm1iYGxfV2pcUWtbTG1cTG9cTW9cS3FbTXFbTm9cTm1dTmxfT21gT3NgT3pfToZaTZ9fU6RQRa5COLo7MsY2Lc4xKNYyKd01LOI3MOE2L+E0LeAzLOA0Kt01KNg3JdQ5Jc86Iso9Isk9JMo+J808KdI7KtU5LM87Lb9ALbA7J6w1Ia4zIbo4KMQ8Lso6L841Ldg5M/BOSfFUTdlCOcxCNb4/LqYxHbM8KL48LME5K8E3KsI2KcU3K8k5Ls87MdQ7M+FEPeNBPOQ/O+c+O+k9O+k7Oug4OOc4Nec4NeY5NeY3NOk7OvRKSv9cW/9kY/hjX8w9OcE4Mr00LsM4MdVBPd5FQN89O9k0MuI7NeI7M+I5NOI5NOQ4NOU4NOc3N+k3N+o2Oes3Ous2O+s4POs4Pug3Peg3Pek2Ous3Ouk2OeY4OeA7Ods+OdE+NsY8Mb48LrM4Ka47Kao7KKY7J6Q7KKM6J6E6J586JqE+K5U2JJw9K5o5KZoyJ8NQS+1rbe5cZuxQXulKXN9IV81LU7lSU6RbUpJjUYBqVUpNOERMN0pCL0g5JEI3G0ZII1VwPWeTVn6zb4KzcYOlaH2SWYONWY6WY4mXZHyMX1hmQ0dUODlFLTZCKjpELD1KMEpYN1doPmV8RmiCQ2yLRWyQRmiSRmORRmGRR2GPR2aLRmyMSW2QTm6RT2yPT2uOTmuPT22RUXCXVHGZU3CZU3CaUG+bTnGdTnSjUnemVXytXnqtXnmsXUlDM0pENklFOUlFOklHO0lHO0hGOUhHNUlIM0pKMkxMMk5ONFJQO1RRPlhSRFlUQV1ZPltaPlxZSF5bVGRhaG5rfnhzk314oIF7p4N9q4V/rYN8pn13nXVuj29phWtngmlliGpmi21oiG1pgm1ofGxmcmtiZ2pgXmddVGhcTmhbS2tcSW5dS3FfS3FfS3BdTHBdTnBdT3BdTnNdT3ddTn5dTodcTJJYTKFVSKRGPKs5L7o3Lco3L9M2Ldo2Ld42Ld82L980Ld80LN80LN83LN03Kdg2J9E2JM86JMw8JMo8Jss9J847KdE7KtM6LM48Lb5BL688J6gzIawzILY5J8E9Lsk7L8w4LswyKuBBO/hbVOBJQNBEN8pGN6syH7k+LMpGN8xCNcpAM8s/Ms0/M9RBN9xFPONGP+JAO+I9OeM6N+I2NOM1NOQ2NeU5N+U8OeQ/OeA9Ntw6Nd9AOupNSOpRTNNAObgpI7gtJr41Lck+N9FAO9Y+Odo7OOM7O+c9PeI5NuI5NuI5NuQ4NuU5Nec6Nuk5Oeo6Ouo4OOo4OOs4O+s4O+k5POg4O+c3Ouc3Ouk2OuY2OOI4ON46ONY9OMw9NcI8Mbk7La45KKo7KqY7KaI7KKA7J547KJ47KJo7J5g/LYw1Ipk9Lpg4KpcvJs1cWPd5fN9YX+ZYZNpRW8pLUrlMT6lWUJ1fVJBnVYBuVlBXOD9KKjw7HEM9G1VRK2x2RIOiZpTBfoe8doa4c3yeYW6CTXV+UYKHXnV9VltiQDtEKTQ8JTU9KD1EMjxFMjlDK0NQMlVlPmd7SGmDRmyLR22RR2qTR2aSR2KQR2OOR2iNSmyPTW+SUG6TUGyPTWmOS2qPSmqSTHObVHOdVXOdU3KeUXKeT3OiUnemVXqrWnamWnWlW3OjWVJLO1JLO1JKPVJKPVJKPVJKPVJKPVJLO1VOPFZPPVdQPlhRP1lSQFtURFxVRVxVRWJbSGJbSWFZTGJZUmVdW2thaXFmdHVqe3puhHxwiH9zi39ziXxwhHVqe21icmVdamNga2BfZ19cY19aXl5aWV5ZVWFaUmJaT2VbT2dbS2lcS2tcSWtcR21dRm1dRmpeSGljTXFmVHFaSnVPQotXSpxcUKNZTKxaTKVOPaZFNKc8LLE3KMI4LdE4MNw0Md0xLd82L943Lt43Lt43Lt43Lts3K9g2Kdc3KdU4KdQ4KdI5KdI5KdI5K9I5K9Q4K807LL07K7Y+La45KKkxIKsyIbc5KsA8L8M5Lsg1K841LdQ6MNtDON1LPtRIOcI9LLcyI91QRthKQNNFO9REO9pHP95HQOBDPuA8OuA3NOY4N+w6Ouw6Ouc3N+I2NOA5M9w9N9lGPs9COcQ6L7w0KLcxJrk1Kb87L8M/M8M6MMo9NNI/N9o/OuI9O+c7Oew4Oe05Ouc3OuU4OuU4OuU5OeU5N+U5N+U5NeU5NeA0MOE1MeQ2NeU3NuY4Oec5Ouc5OuY4Ous7PuY5O985Odw9OtZBPc1CO8FBNrc/Mak6KaM8K6A9Kps8KJk6JpY5J5U4JpA5JpBBMIs8LYcvI5EvJrxMSuRtb+dsb81WWr1MTrVOT6pRTaJVT5tYT5ddUpVhVIpqU1daLzpNFjdGD1RhKX6OUJuwb5+8eZy9eJK1c36dYWiATFxtQ1lkQlRdQkhQOT9EMDo9LEBDMjxAMTo+MDxDMzpDMEFOMlJkPl1zQmeDSHCPS2+TS2ySR2qSSWmTS2eQSmyQUG2RU2+TU2yTUG2STWuTSm2WSm2YSXGcTHGeTXKfTnKhUHSjUnanVXmqWXqqXnmmY22ZWmKOT1dOP1dOP1dOP1dOP1dOP1dOP1dOP1dOP1hPQFlQQVlQQVtSQ1xTRF1URV5VRl9WR2RbSmNaSWNZTWNZT2ZbVWpfXW5iZHBkaHJlbHRncHZpcnZpcnNmbW1gZ2dbX2JYWV5bVlpaUllWT1dUS1hUSVhUSFxWSF5XR2NaS2NaSWZbSWdcSGldR2peRmtfR2hgSWNiTW5nVHZcTYFTRppWTatWT7BSSLdRRa9IOaxDMKw9LLE5Kb44LMs4MNU2Mtk0MN02Ltw4Ltw4Ltw4Lts3Ldo4Ldk3LNc3K9c3K9U3K9U3K9U3K9Q4K9Q4K9Q4K846LL48LrY+Lq45KKYxIKcyILI6Kbk+Lr48LsY6Lcc0Kss0KdI7MNxFOuFPQt9RQ91PQ9tGP9hAO9M8NdI7NNY9N9o9ONw4Nt0zM+c3N+s3OO43Oes3OOc3N+U5N+I9OdtCOspBN78/NLg6LLE2J681JrI4Kbg9Lb9AMcVBNM1ANtdAN989OOM6N+k3N+81NvA2Oek2Ouc2POc3OuY4OeY4N+U5NeU5NeM6NeI5MuM6M+M6NeQ7NuQ7OOQ7OOU5OeU5OeQ6O+M7O988Pdk/PdBBO8Q/Nrc9Mqw7LaU7K6A9Kpw9K5c8KZY7KJI6JpE4Jow5J4A5J4A4KYk1Kp08Nb9RUNdlZdFeYbdNTaxOTKRUTZ1ZUJhcUZdeU5deU5hfVoxmUWBfL1NnKl5yM3qQT5mvbqW+fJmycIigYmqCSGF1QlRlO0pYN0ZQNz9INTk/MTU4LTo8L0FCND0/NDo9Mj1BMzpDMEBNM1JkPl50RWeDSHGQTXCUTG6SSGuUSGuTTGiRS2uSUW6SVG2UU22UUWuTTGuUSGyXSG2YSHCdSnCdSnCgTHOiUXWmVHipWHipWHioXm2XWGKLUVmCSF1URV1URV1URV1URV1URV1URV1URV1URVtSQ1xTRF1URV5VRl9WR2BXSGFYSWFYR2VdSmVdSGRbSmRbTGVbUWZbVWhdWWhdW2ldXWpeXmtfX2tfX2leXGZbWWJXU19WUVpWTVdUS1VRSFJOQ1FNQlNPQ1dRQ1hSQl5XR15XRWFZRmNbRmdcSGleSGtgSmhiTGJhTW5nVXlfUIhYTqJcVLFWUbJJRbhFQLlAN7g+Mbc7L7g4K7w4K8M5LMk7L9E6L9k4Lts3Lds3Lds5Lto4Ldk3LNk3LNc3K9c3K9U3K9U3K9Q4K9Q4K9Q4K9I5K807LMA+MLY+Lqw5J6MyIKMzH6o6JrM+LLk+LsQ/MMQ4K8UyKMg0KtA8MNhGOdxNP+JORNk6Ntg0M9QyMNY0Mts5N+E9POY8POk7PO05PO41OusyN+ozN+g1OOU5OeE8OtlAOr44LbU6K7E2J640Ja01JbA4KLU8K7s9LshENc9DNtZCONw9N+I5NOg2NO01Ne83Oeo2Oek2Oek2Oec3N+c3N+Y5NeU5NeU6M+M6M+Q7NOQ7NuM8NuM7OOI6OeE5Od44ON05Otw8PNpAPtNCPcg/Obk6Ma03K6Q2J6E7LJ08K5k8K5Q7KZM6KJA5Jo84JYo5Jno2I3k2JYg5LKBGPblTT8BXVLhQT6tJRqJNSJxTTJlZUJdeU5dhV5dhV5hfVotlUHNyRnqNVpOmbqS5gKvAh56ze3yQW1tvPD9SJEFTK0FQLz9MMjpDMDY8LjY5MDU4Lzk7LkBBMz0/NDk8MT1BMzlCL0BNM1FjPWB2R2mFSnOST3KWTnCUSm2WSm2VTmuUTm6VVG+WVW+WU26WUGyUS2yVSWyXSG6ZSXCdTHCdTHCfTnWkU3ipWHmqW3WmV3GgWF+JSlZ/RU94PmFYSWFYSWFYSWFYSWFYSWFYSWFYSWFYSV9WR2BXSGBXSGFYSWJZSmNaS2RbTGRbSmVdSGZeR2ZeSWdfTGdeT2ZcUGZcUmZcU2hdV2hdV2hdV2heVWddVGVbUWRaUGNbTl1ZTVpWSlZSRlJOQlBMQFBNPlROQFVPP1dRQVlUQVtWQ11YRGFaR2RdSmZfTGZhTWRjUWxlVXZcT4pbUaliXLhbVrZGRLk8OsM8OMY7NsQ6MMI4Lb04Kbw6Kr4/Lsc/L9M5Ldk3LNo4Ldk5Ldo4Ldg4LNg4LNU3K9U3K9Q4K9Q4K9Q4K9Q4K9Q4K9I5K807LME/Mbc/L606KKIzIJ0zHaI4Iqw9KbVALrw/Lb86K8M3KsU1Kss3K846Ls48L9M6Mt42NeAyNNsxMt0zNOA4OOU7POo9P+w8Pu43POwzOOkwNuYyNeU1OOE3N9o2Nc42Mbc1KK83J642Jqw3Jqw3Jq45KLI6KbU6KsNBMcpCNNRBN9w/OOI7NeY5Nes3Nu44N+02OOs3OOs3OOo4Nuo4Nug5NOc6NOY7NOI5MuE6Mt86NOA7N946ONw6ONs5N9k5OdY8OtVAPNJDPcpBO7s7Mq82K6Q2J543KJw7Kpg7KZQ7KZI7KI86Jo04JIw3I4c5JYA9KnY1I4E1J5lFOqpQSKxNR6lMR6ZRTJ1QSphVTJRaT5ReUpVhVpVhVpdhV41nVImFX5mpeK29jqa4iJChdHOGWU5gOC9BGy0+HDNCJTpGLj1GMztBMzo9Mjo9NDw9NTk5LT9AMjw+Mzk8MTxAMjlCLz9MMlBiPGF3SGqGS3STUHOXT3KWTG+YTG+XUG2XT3CXVHGYVXCYUm+XUG2WSm2WSG6ZSnCbS3GeTXKfTnSjU3moWHusXXenW22dU2WSTVuFRlN8Qk53PWNaS2NaS2NaS2NaS2NaS2NaS2NaS2NaS2NaS2NaS2RbTGRbTGVcTWZdTmZdTmZdTGZeR2dfSGhgSWlhTGlhTmlgT2hfUGdeT2pgVGlgUWlgUWhfTmhfTmhgTWhgTWhhTmReTmBaTFtVR1ZQQlBNPk5LOk5LOk5LOlBNPFJPPlRRQFZTQFhXQ1taRl1cSF5dS2JgUWZeUW1XSoZbUqxpY75jYMFNTchCQ9A7PdQ4OdM4NMw3MME5K7o9KbVDK7xCK847K9c3Kdg4Ktc6K9k5K9Y5KtY5KtQ4KdQ4KdQ4KdQ4KdI5KdI5KdI5KdI5Kc07LME/MbY+MKs6KKE2Ipo0Hps3IKM9Jq9CLbM7Kro7LMI6LMc5Lcs4Ls46MNA8MNk6NOk5POw0POYzOeMyOOIzOOE0OOIzOOIyNek2POk0Oec0Ouc3OuM5PNs3NtAyMcAwKLQ2KK06KK06KKs6KKs6KKs6KKw5Jq83Jrg6K8E7L84+M9g/N+A9OOQ7OOg5Nuw4N+42Nu42Nu42Nu03NOo4NOg6M+c6M+Q8M+E6Mt87Mt88Ndw9N9s9Otk+PNc9O9Q+Pc5APMlCPMVCOrk9Na03LaM1KJ43KJo6KpY7KZM8KZE7Ko06KIo5Jok4JYg3JIM4JYNALXU0InszJZNHOqRRSaFORp5OR6FXTphVTJJYTJBaTo1cTo9dUpRgVZdhV49oV42JZpilep2pgYCOal1rSERTNDJAJiQyGS06JjA7KjU9Ljk/Mzw/ND0/NDo7Mzo6MDk5LT4/MTs9Mjg7MDs/MThBLj5LMVBiPGJ4SWuHTHWUUXSYUHOXTXGaTnGZUm+ZUXKaU3KaU3KaUXCZTW2XS22YSXCbTHOeT3SgUXaiU3inWXupXnqoX3GfVmORSVmGQ12GSlZ/R1F6QmVcTWVcTWVcTWVcTWVcTWVcTWVcTWVcTWVcTWZdTmZdTmZdTmdeT2deT2hfUGhfTmdfSmhgSWlhTGpiTWpiT2piT2phUGphUGphUGlhTmhgTWhgS2hgS2hgSWlhSmpiS2ZfTWJdSl5YSFhSQlNNPU1KOUtIN0lINktKOExLOUxNO05PPVBRP1FUQVNWRVNWRVtZTF5WSWNRRXpYTqFoYbZlYcRWVdZRUtlAQ986Ptw4N9Q3MMc7Lrw/K7FDKrVBKMo7KtQ3KNU4KdU5KtY5KtU5KtU5KtQ4KdQ4KdI5KdI5KdI5KdI5KdI5KdI5Kc07LME/MbU9L6s8KaI5JJk2H5U1HZs7IqdBKrJCLrlAL787LMM3KsUyKMs0K9I7MN89OOo1Ou4zPOs2Pek4Puc6PuQ7PuM6PeI5PN81OOE3OuI5PuE9Pts9PtE5NsMyL7YwJ685K6s+Kqs+Kqk+Kqo9Kak8KKk6J6s4Ja82Jbk3KcU7MNA9M9k8Nd88N+Q7OOk6N+44N+83Ne83Ne44Nes6NOk7NOc8NOQ9NOI+NeA/N95BOtpBO9lBPtVBP9FAPc1CP8FAOrtAOLM9M6o4LaE1KJs1J5g4KJU8KpE8KI08KYo8KIg6JoY5J4Q3JYM2JH82JX06KXQzIX45KpdPQaNZTpxSR5VPRZhWSpVZTpBbTY5aTYxbTY5cUZNfVJlgV5FnV354WHmDXnJ8WlVgQjtFLC87JTA7KjA8LjM9MjQ8MTY8Mjw/NkBBOT9BNjw8MDc3Kzg5Kz4/MTo8MTc6Lzo+MDdALT1KME9hO2J4SWuHTHWUUXWZUXSYTnGaTnKaU3CaUnObUnOcUHKbT3CZS26ZSnCbTHOeT3ahUnmlWHunWnqoXXimXXGfV2eUT12KRVaDQl+ITliBSVJ7Q2deT2deT2deT2deT2deT2deT2deT2deT2deT2deT2deT2hfUGhfUGhfUGhfUGlgT2phUGpiT2piT2piT2lgT2lgT2lhTmlhTmlhTmhgS2hgS2hgSWhgSWhhR2hhR2hhR2ZfTGVeS2JbSVxXRFdSP1BNOkxJOElINklINkdINkdKOUdLOkhMO0lNPEhPP0pOP1BRQ1hSRltPQ2lSRINZTZZWTLBTTNRaWdtJSuI/QuE5Odo3Ms87McI/LbRCKrM8JMk6KdM3KNQ4KdM6KtU5KtM6KtM6KtM6KtI5KdE6KdE6KdE6KdE6KdE6KdE6Kc07LME9MLU9L6w9LKM8KZg4IJA0G5U5IKFBKa1DLbZBL789L8A2K8IvJccwJ9A2Lt46OOg1Oe42Puw7QepAQ+ZBReBCQ9xAQdk/P80xMtA2NtM6PNE9O8k7Ob43MbU0Lq00Kao8LaU+K6U+K6VALKU+K6Q+KKY7J6k6J6o3JbI3J7s3KsU4Lsw3MNQ6Mt48N+Y/Oes5N+w5New5Nes6NOk7NOg7NOU9NOI+NOBCN91DOdpDPNVCO89BPco/PMc9O78+ObE8M6k6L6I4K5w2KJg3J5Q4KZE6KY06KIs9KYk8Koc8KYM6J4I5KIA3Jn82JX02JHgzI3g1JYVCMphVRZ1XS5RQQ5BQRJVaTJNZTZBaTpBcUZBcUZJbVJVcVZhbVo5iVWtiRVZgPUpTND1HLDY/KjI9LDQ+MzU/NjY9Njg/OD1CO0NGPUVHPENENkA+Lzs5Kjc4Kj0+MDo8MTc6Lzo+MDY/LD1KME5gOmF3SGuHTHWUUXWZUXSYTnKbT3KaU3CaUHGbT3KdTnGcTXCbTG+aS3KdTnWhVHmlWH+rYH6pYXqlXXGcVWaRTF+JR12HRV6ISWKJUFmASVN6Q2hfUGhfUGhfUGhfUGhfUGhfUGhfUGhfUGhfUGhfUGhfUGhfUGhfUGhfUGlgUWlgUW1kVWxjVGphUmlgUWhfUGdeT2deTWhgTWlhTmlhTGlhTGlhTGlhSmhgSWhhR2hgSWdhS2ZfTGVeS2FaR1xXRFVSP1BNPE1MOkVGNERHNERIN0RIN0JJOUJLOkJLOkNKOklLPlNRRFNQQVhMPGVLOnRFNZVIPsJZU9lST+BEReA6Otw3NdU7M8o+L7o9KbU4Isk6Kc84J9A5KNE6KdI7KtI7KtI7KtI7KtE6KdE6KdE6KdE6KdE6KdE6KdE6Kc07LME7MLY6Lq08LKc+K5k5I48zGpM3Hp8/J6I5I688KcA+MMY8Mcw4LtA3L9k8NeM/Pew9Qu4/ROlDReJEQ9hAP8o7N8A1MLsxLrkvLLw1Mb46Nrs8NrM6Mqo4LqQ4LKE6K6E9LZ8+K6A/LKFALaFALaFBK6M+KqY9Kqk7Kq06KLI3KLk1Kb81K8k5MNY/OOBDPOU8N+g7Neg7Nec8NOU8NeQ9NOE+Nd5ANdxEOdhEOtJDO8pBOcQ/Orw7Nrg4NbA5M6I3LZk4KJU1J5M2J5E6KY88Kos6KYU4Jog9KoU8K4M8KoA8KX46J3w4JXs2Jns2JnkxI4A4KoxHOJZTQ5JQQotMPZBSRZlfU5FXTJJZTpRbUpZdVJZdVpdcVpZZVIxeUWFYO0VNKDZAHjhBJj5HMjxFNDM9Mi03LjE4MTc+NkJFPEdKP0hJO0JDMT8+Kjs6Jjc4KD0+MDk7MDY5Ljo+MDY/LDxJL05gOmF3SGqGS3WUUXSYUHSYTnKbT3KaU3CaUHGcTXGcTHGcTHCbS3CbTHOeT3ejVnunXIKtZYCrZHijXGqVUF2HRVmDQV6ISGWPUGOKUVqBSlN6Q2lgUWlgUWlgUWlgUWlgUWlgUWlgUWlgUWlgUWlgUWlgUWlgUWlgUWlgUWlgUWlfU2pgV2pgV2pgV2pgV2pgVmpgVmpgVGphUmphUmphUGphUGpiT2piT2piT2piTWpiTWdfSmdfSmZeSWVfSWJdSVpYQ1NQPU1MOkhJN0VIN0FFNkBENT9FNz9HOD9HOD5GN0dLPUlLPUFFNEtKNlxRO2FFL4NKOcBqXdxnYONVU+RGReVBQOBBPdU+Nck9MMY9LcY0Jcs1Jsw2J803KM03KM44KdE7LNM9LtI8LdI8LdI8LdI8LdE7LNE7LNE7LM48LbsyKLY3LrE7L6g6KZo3IpQ1H5U3Hpw5IqxBLbE8K7o2KcE0Ks02L9c8N+JDP+lHROhERehFSN1DQ8k6Nrs2MbQ4MK44Lqk0K6s5L6k5LqQ4LqA4LZs5LJY6K5M8K5I8K5Y9K5g9Kpk+K5o/LJtALZ1BLKBBLaNALaI7KqU6KKs3KLA2KbY2K744LcQ7Mcw8M9o9NuA9NuI/OOJBN+JBOd5CNtpANtdANdhIPdJFO8dBOLs7MrI1L6ozLaYxKp8yK5k5LZI7KpE5K406Kos6KYg7KYc7K4U8K4A5J345KXw5KHw5KHw5KHs4J3k2JngzJHctIItBNJdPQ5NNQY5MQJFRRZNVSo5SR5hcUphcUpFVTZBUTJdaVZVYU5RXVJNnWl1UNUlRKkFLKEJLLD5ILzdAKzI9LTQ/MTQ8MUhQQ1peUFdbSk1POkRGLkFBJz09JTo7KT4/MTs9Mjo9Mjs/MTQ9KjtILlBiPGN5SmyITXWUUXOXT3KWTHCZTXKaU3GbUXGeTXGeS3KfTnKfTnOfUHaiVXunXH+qYoKtZnijXmqTT2CJR16HRWGJSmaOUGiQVGSJU1uATFR5RWlgUWlgUWlgUWlgUWlgUWlgUWlgUWlgUWlgUWlgUWlgUWlgUWlgUWlgUWlgUWlfU2pfWWpfW2pfW2pfWWpfWWpgV2pgVmpgVGpgVGphUmphUmphUmphUmphUmphUGphUGhgTWhgS2dfSmdfSmRdSl5ZRVVSP09OOklKOkVIN0JENkBENT9FNz5GNz5GNz1FNkBGOD5FNT5GMUhMNU1JMFU/J39ROrxzYstjWOBfWutVVOdHR+JAPuBBPtg/Oc46MM05K808K889Ls8+Lc87Lc47K805K806Ks46LNA6K9A6LNA6K9A6LNA6K9A6LM07Lsk/NcVCOrxCN649L6A3JJYxHZYxHZsyHaY1I7I3KMM7L9FBON5FP+ZJROlKRupLSN5DQdtFRNBCPrw8M685L6k9MKU/MZ89MJ8/MZw+Mpc+MJQ+L48+LYo+LodALog/LI49KpE7KpI8K5M9LJQ/K5Y/LJc+LJk+LJ9ALqE9LaQ6LKg4LKw4K7E4LbY6MLw5L8o8MtA8MtM/NdVBN9dDOdZDOdREOdFFOMpCNsNBNLk9M7A6MKk2L6I1Lp80LJk3LJE7Lo49LIo7LIg7K4Y6KoQ7KoM8KoE8LH47Knw7KXs5KXk6KXg5KHc4J3U2J3c0JIA0J5BEN5hOQ5FLP4xKPo9RRJJUSZBSR5NTSphYT5ZVT5dWUJxdWJRXUo5TT4pjVF1XNVhjOV9qQlpmQklUNjZDKTRAKjxINE9YR1liUV9mVFdcRkpON0JFKj8/Izw8Ijk6KD0+MDo8MTk8MTxAMjU+KztILlBiPGR6S2yITXWUUXSYUHKWTHGaTnKaU3GbUXOgT3KfTHCdTHGeTXSgUXikV3ynX3+qY3umYW+aVWOMSl2GRGCISWWNTmWNTmOLT2SJU1uATFR5RWlgUWlgUWlgUWlgUWlgUWlgUWlgUWlgUWlgUWlgUWlgUWlgUWlgUWlgUWlgUWlfVWpfW2peXmpeXmpfXWpfWWpgV2pgVmpgVGpgVGpgVGpgVGpgVGpgVGpgVGpgVmpgVGxhT2tgTGlhTmlhTmZfTGFcSFlWQ1NSPk1LPEhJOURGOEFFNkFFNj9GNj5ENjxENT1GNTdALUBIMUlLM0Y/JVc/J4daQ7dzYLZWStliWvBlYuxUU+ZGSOtHSOZDRNg6N8s3Lck6Ksk6LMk6Kss5LMo4Kcg2Kcg2J8o4K8s3Kcs3K8s3Kcs3K8w4Ksw4LMs4LsIzLb41L7Y2La0zKKEwIp4vHqAxIKczJLxBMsdDN9ZHP+FMRudMR+lKRuVGQt9EQNdDQc9EQcFAOrE7MaQ8L6FBMZxFNJhFM5NEM5FENI9CMopBMIVBLoJBL35BLn9ALoY6Kos5K4s6KYo7Kos8K408K449Ko88KpY/LpY9LZs7K505KqA4K6U5Lag6La45L7g6Lr45MME7MMQ+M8U/M8VBNMNBM8FBNLY7LLI6LKo4LaM3K542K5k3LJg3LpM7L4s8L4g8LIc7LYQ7LII6K4A7K4A7K388LH07K3o7Kno7LHc5KnY4KXU3KHQ2KXY0Jog7MZRGPJZOQo5KPYhIPI1PQpFTSJJSSZJPSZlUT5lTUZhXU5pdWpNZVY1bVI1sW4F9WH6JXoCLYWx4UkxYNDZEIz1KLkxaQGVxWWVvV11lTVBVPkVJMD9DKD1AIzo8JDg5Jzs8Ljg6Lzk8MT1BMzY/LDxJL1BiPGR6S22JTnaVUnSYUHOXTXGaTnKaU3CaUHWiUXCgTG6dTHCfT3WkVnmnXH2oYHynYHCZVWaPTVyERVyERWWMTWmQUWaNTmCGSWOIUlp/TFN4RWlgUWlgUWlgUWlgUWlgUWlgUWlgUWlgUWphUmphUmphUmphUmphUmphUmphUmpgVmtgXGtfX2tgXmtgXGtgWmthWGthV2thVWthVWthVWthVWthVWthV2thV2thWGthV25iUm1iUGpiT2piT2hhTmVeS19aR1lWRVJPPk1LPEdIOkRGOENFN0JENkBENTxDMzxINDlCLUZKM0xGME86JXFMOZpjT6peTqFBNcZTTOdjX/BeXu1TVetKT+lESuFBQcw5Mcc5LcU3K8U3K8g4Lco6L8s7MM06MNE+NNE+NNI+NNI+NNM/NdM/NdM/NdM+N9M/O9FCPstEPsZGPcJGPMNJPsdNQM5QRNlTSt1QR+JNR+RJReRHQuJDP+BBPdtCPdVGQslEP7o/N6s9MJ8+LppDMJVHM5RJNo1GNIxFM4hDM4VCMYBBL31ALnpBLnw/LYI6LIY4LIU5K4Y6LIY6LIc7LYc7K4g7K4k6K4s6KY44KZA4KpU5LJk7L509L6I8MKo6L604Lq85L7A6LrA6LrA6LK85K644Kqg3KaU3KJ42KZs2KpU3K5I4LZA5L448MIg8LoU8LYQ7LIE5Kn86Kn45Kn06Kn07K3w6LHo7LHk7LHc5KnM4KnE2KHI3KXU1KYxEOJJIPZFLP4pIOodJPItPRJNUS5dUTJZRTJtUUJdRT5RTT5ZcWJBfWJBoXpd+apSUcIWSZnWCV1loP0NSKz9PKlBgPGNyUWV0VVxpS05YPUNMMT9FKz5CKT1BKDs9Jzc4KDo7LTc5Ljk8MT1BMzdALTxJL09hO2J4SWyITXaVUnWZUXSYTnKbT3KaU2+bUHGgT2+eTW+eTXOiUnqoXXyqYXmkXXSfWmOMSl6HRVuDRF+HSGeOT2qRUGaNTGCHSGKHUVl+S1J3RGlgUWlgUWlgUWlgUWlgUWlgUWlgUWlgUWphUmphUmphUmphUmphUmphUmphUmpgVGtgWmtgXGtgWmthWGthV2thVWtiU2tiU2tiU2tiU2tiU2thVWthV2thV2thWGthV29jVW5iUmtiUWtiUWtiUWhhT2RdTWBaSlhSQlJPPk5LPElHOEdFNkRFNUJDMz5CMT1JMT9HL0xHMVM+K2c9LZVaTK1fU5w+NJ4zK7Y/OdhYVfNpZ/ZkZetSVeZKTuhOUNpJRNNGPM1ANss+NM5ANtJEOtVHPddHPtpKQdpKQd1KQt1KQt5LQ95LQ99KQ+BLRetTUuhUVONTUtxST9hTTNhTTNtUTuBVTuBMSOFJRuNFQuJDQORCQOJDQONEQeBGRNlKRspFQLk+N6w9MqE/MphCMZJFM5BHNIxFM4hDM4dCM4NAMIE/L34/MHo/L3w+L4A6LoM5LoM5LoM5LoM7LYM7LYM7LYM7LYE5KoM6K4U5K4c6Kok6K407LY88LpM7L5o6Lp45LZ85LaA6LKE5LKI4K6I4KqI4Kp84KZw4KZg4KJQ4KY85Kow6LIk6LYc7LYQ6LYI6LIE5K4A4Kn04KX03K3w4K3s5K3o4LHk5LXg6LXY4K3E1Km81KXE3K3Q5K4xIO41JPIlJPYRJO4VLP4xSRpNXTZhYT5hRTZxVUZdTUJNWUZJgWYhiV4NnW4Z6ZG5yUVppQEpZMEFSKElaMFdpP2R2Tmp8VlhpRUxbOj9MLjpEKTxELD5DLTxBLTo9LDg5Kzo7LTY4LTg7MD5CNDdALTtILkxeOF91RmmFSnSTUHSYUHSYTnKbT3ObVHCcUW6dTW2eTHChUHeoWXyqYXqoYHKdWGmTUVqDQVyERWGISWWMTWeOTWeOS2aNSmSLTGOGUFl7SVJ0QmlgUWlgUWlgUWlgUWlgUWlgUWlgUWlgUWtiU2tiU2tiU2tiU2tiU2tiU2tiU2thVWxiWWxiWWxiWWxiVmxiVmxjUmxjUmxkUWxkUWxkUWxjUmxjVGxiVmxiWGxiWGxiWG9jVW5iUmtiUWxjUmxjUmtiUWdgUGRdTV5XR1lTQ1NNP01KO0tIOUdFNkVCMz9CLztILj9ILU9DLWE9LYNFOqtYUrROSp4sK7I6Obk9O9NTUvJwbv52dvFlZutYXvBeX+NVUdpQRtRHQNBDOtFEPdRHPtZHQdZHP9lIQ9pKQtxIRN1KQ95KRt5LROBLR+BLR+JISOFHSdxISNlHR9ZIRNdIRNhHRNtFROBCQeRBQuZCQehCQudDQuRCQN9BPttBP9tKR8pDP7k8Nq4+M6JAM5hBMJBBMI1EM4pBMohAMYc/MYU9L4I8MIA8L389MX89MYE7MYE7MYM6M4E7MYE7MYA8L4A8MX89L4A8L4A9LYE8LYA7LII6LIE5KoI4K4M3KYw6Lo84LpE5LZQ6L5c7Lpo9Lp48L58+Lpk5KZY5KJM6KpA6K4o7LIc7K4Q7LII6K4I6LIE5K383KX42KHs1KXs1KXs1KXo2KXg2Kng4LHc5LHM4KnA0KW81KXI6LXY8MItNQIlLPIRKPIJNPYVRQ4tWSJJYTZdXTpNOSZlUT5dWUpZdVpBlXHteUGZWRmBeR0VPLT5OKT9PKEpcMl9yRWt+UWV4S1hqQE1fN0BRLTZFJjdEKj1GMT1ENDo+MDc7LTg6LDo7LTY4LTg7MD5CNDdALTlGLElbNVtxQmWBRnKRTnOXT3SYTnKbT3ObVHCcUW2cTG+gT3OkVXioXHqoYHOgW2mTUWCKSFmBQl6GR2WMTWeOTWaNSmWNR2WNR2aNTGGETlh6SFFzQWlgUWlgUWlgUWlgUWlgUWlgUWlgUWlgUWtiU2tiU2tiU2tiU2tiU2tiU2tiU2tiU2xiWGxiVmxiVmxjUmxjUmxkT2xkT2xkTWxkTWxkTWxkT2xkUWxjUmxjVGxiVmxiVm9jVW5iVGtiU2xjVG1kVWxjVGlgUWZfT2JbS15XR1hRQVJMPE9JOUpHNklDM0FDLjpHK0BGKlVAK3hHOaNQTLRISLY4PLozOchBRcQ/QMpKSd9iYPFxcPBubudiZeJaWttRTtVMRM9EP81CO89EP9BFPtBCPs1AOdJDP9JDPdRDQNVEP9dDQdhEQNlFQ9pEQ91BRN1BRN5ERt1HSN9JSOBKSeJISOVHSOdBQ+pBROxCRexCRedBQeJAPts9OtU9OtpGRsk9PLk4M7A7MqZANJg/MZA+MI5BMYo8L4o8MIk7MYg6MIc4MYY5MYU6NIQ7NIE7M4A8M4E6NIA8M388M309MX09M3w8MHw8MHw9Lnw9Lns8LXw6LHs5KXo4Kns3KoI6LoM5Loc5LYk5Lo05LpE7LpU8LpY9LZI5KZE6KY06Koo7Koc7K4M8KoA7K347KoA4KoA4LH42Kn01KXw0KHo0KHo0Knk1KnUyKXY2LHY4LXI2K28zKW81KnM6L3hAM4tRQ4ZOP4FOPYJRQIVWRolYSY5VSpFSSZJPSZdUTpNUT5FcVopmWm5bSlBLN0VLMUFOMEtaOVdnQ2BySmd5T2R6TFZsPkddL0FWLTdIJDFAITZCKj1GNTxEOTg9Njc6Mzk7Ljs8LjY4LTk8MT9DNTdALTdEKkZYMlZsPWF9Qm+OS3GVTXOXTXKbT3ScVXGdUm+eUHGiUXWmV3amWnOhWWqXUmKMSluFRV6GSGCISWOKS2WMS2aNSmaOSGaLRmWJSWCDTVd5R1ByQGlgUWlgUWlgUWlgUWlgUWlgUWlgUWlgUWtiU2tiU2tiU2tiU2tiU2tiU2tiU2tiU2xiVmxjVGxjVGxjUmxkUWxkT2xkT2xkTWxkTWxkT2xkT2xkUWxjUmxjVGxjVGxjVG5iVG1hU21hU21hU21kVWxjVGphUmdgUGRdTV9ZSVpTQ1ROPlBLOE1INUlEMURDLkBGKkREKFtCLIhUR69cWKs+QawvM85JTsY/RcA7Prs7PMRGR9haW+NlZttZW8xHSNFKR9BFQs1CP9BCPtRGQtRGQtBCPsk+N89EPc9EPdJEQNRFQdZFQtlFQ9pERd1ERt4/Q99ARN5CRd9FReFHR+BGRuBCQ+E+P+hCROlAQ+g+Qec9PuQ+PuNBP+FDQN9FQ9ZCQsU5OLY1MLA7NKY/Npo+M489L40/Mog8L4c6MIc6MIc4MYc4MYc4MYg5NIg7NYI5MoA6MoA6Mn87Mn48MH48MHw8MHw8MHg4LHk5LXo6Lno6Lns8LXs8LXo7LHo7LH07L385L4A3LoE3LIQ2KoU1KoY3KoY3KIo4Kog5Kog7K4U8LYQ8LYA9LH48LH07K305LH03LXw2LHk1Kno0Kng0KXg0KXg1LHIyKHU1K3Y4LXI2K240KW41KnQ7MHhCNopVR4RQQoBPQIRTRIhXSYxWSoxSR41OR5VUTpRVTotSS4RYTX9kU2VaREdLMj1KLElYOVprSWh5VWN4UVluRVNoPU5jOEpfNDpMJjA/Hiw5HTU+KT1DNTxCODo8Nzk8NTs9Mjs9MDc5Ljk8MT9DNTg/LThCKUVVMVVoO2F6Q26KTXKTTnKWTnKaUXOdU3GdUnKgVXWjWHakW3SiWm+aVWaQTl6ISFuDRGSMTmGJS2CHSGKJSGaNSmeOS2WKRWGFRWCDTVd5R1ByQGlgUWlgUWlgUWphUmphUmtiU2tiU2tiU2phUmphUmphUmphUmphUmphUmphUmphUmtiU2tiU2tiU2tiU2tiUWtiUWtiUWtiUWxjUmxjUmxjUmxjUmxjVGxjVGxjVG5iVGtdUHBgUXRkV3JkV25iVmpgVGhgU2hiVGdhU2ViUWNdTVtWQ1ZRPVNOOE5IMkdBKUtHLEk/JGJJM5FnV7Z4bbtsZbhZV7lPT7ZCRb1CRcJER8hGSM1IS9BKS9JMTdNLS89FRdBERdNFRNZGRdVGQtJDPc9EPc9GPMhEOMlFOcpFPMxFP9JEQNdDQ9pBRNs/Q+FCRuJCROFDROBEReBEReFGRONFRORERONDQ+RCQORAP+M/PuM/PuJAPeJAPd5DP9NCP8U+OrY5M6o3MJ86MJc9Mo4+M4Y+MoM/MoE/M4E9MoE7M4Q5M4c4M4g4MYk5MoU7MIQ8LoQ8LoM7LYE7L4A6LoA6LoA6Ln46LX46LX46LX46LX07L307L307L307L305MH05MH44MH44LoA3LoA3LoA3Ln44LIA4LH44LH05LHw4LXs5LXo4LHg4LHg4LHg4Lng4Lnc3LXU3LHY2LHQ2K3M1KnE1K20xJ3I2LG40KW0zKG82K200KXE4LX9JPYVTSIVTSoZSR4hSSItQSJBRSpRRS5VSTJNUTY1US4lbToJjUW9fSFlVOk1WN09fO2p+WWJ4UVlvSFVqQ1JnQE1iO0lZNUNSMTdEJjQ+IzI6IzY7Jzw+MEBCNUBANjw+MzU4LTM5LTQ6Ljc6Lzk9Lzs/Lj1CLDxFKFNfO2FyRm6GUnORVXKVUXKaU3OdU3KdVXWeWn6nZX6nZXCYWWKKS16GR16GSF6ER2CGSWKIS2SKTWaNTmWMTWOKS2CHSF6ER1+CTFR2REttO2lgUWlgUWlgUWphUmphUmtiU2tiU2tiU2phUmphUmphUmphUmphUmphUmphUmphUmtiU2tiU2tiU2tiU2tiU2tiU2tiU2tiU2xjVGxjVGxjVGxjVGxjVGxjVGxjVG5iVHJiU3FhUnJiVXJkV3JmWm9nWm1lWGpkVmdjV2toWW1qWWpnVGhjT2NeSFtVPVJMNFBKMEg+JVE/KWtQPX9YR4ROQohFPZNEP7FXVrhUVLtRUcBQT8BOTcFNTcJMSsNLStBUVMhIR8I9PsQ9OtBCQNNFQc9CO8c+NMpEOclFOctGPc1HPtRGQthERNxBRd1BReFCRuFDROFDROJEReJEQ+FGROFGROFGROBFQd9EQOBCP99BPuBBPeBBPeBBPd5DP9RFP8hDPLo+Nqw6MKA5MJQ6L4o8MII8MIBBMn5AM34+NH88M4M6M4Y5MYg4MYk5MIc7LoU8LYQ7LIQ7LIM7LYI6LII6LII6LH85LX85LX85LX85LX46L346L346L346L305MH05MH05MH05MH05MH05MHw5MHw5MHw5MHo6MHo6MHk5L3k5L3k5L3c5Lnc5Lnc4L3c4L3Q4LnM3LXI2LHI2LHA2K3A2K2sxJnE3LG00KWwzKG82K2wzKHA3LH5IPoRSSYVTTIhRSotQSpBRTJRQTZVRTpRTT4pPR4VTSIBbS3tlUHNpUGhrTGZxUWd4VF50TVhuR1BmP0xhOktfOktcOkdWN0NQNDtFLDhAKTY7Jzc6KTw9Lz9AMj4+Mjs9MDQ6MDM7MDU7MTY8MDo8Lzw/Lj5BLD5EKlFbOV5tRGuBUnCMUnCTU3GZUnOdU3OeVnifXnyiZXieYWuRVGCGSV2DRl2DRlyCRWCGSWGHSmOJTGWLTmSKTWKIS2CGSV6ESV1/TFJ0QklrOWlgUWlgUWlgUWphUmphUmtiU2tiU2tiU2phUmphUmphUmphUmphUmphUmphUmphUmtiU2tiU2tiU2tiU2tiU2tiU2tiU2tiU2xjVGxjVGxjVGxjVGxjVGxjVGxjVG5iVHFkVG9fUG1dUG1fUnFlWW9nXGxkWWhiVmZiV3FtYXt4aX57aoB6anp1YnBpVmVgSlRUPEZGLkM+KE1CLlNAL1U4KF03Kmw9M243MHU5MX47NYdAOpJJQptQSqVYUK1aUrteWbpTTrdHRbxCP8hEQtFGQ9NEQM9AOtBBO9BDPNJFPtRHQNZHQ9pGRttFRt5ERt9DRN9DRN9DRN9DROBERd9FRd9FQ99FQ95FQN5FQNxEP9tDPtxDPdxDPdxDPdtDPtZFQM5FP8NCPLM+NaI6MZQ4LYg5LIM7LYJAMn9AMX4+Mn89MYM6MYY5MYg4MYk5MIc7LoQ7LIQ7LIQ7LII6LII6LII6LII6LH85LX85LX46L346L346L346L346L346L305MH05MH05MH05MHw5MHs4L3s4L3s4L3s7MXs7MXo6MHk7MHg6L3g6L3g6L3g6L3Q4LnQ4LnM3LXM3LXI2LHE1K281Km81KmoxJm82K200KWsyJ2w2KmkzJ203K31HPYdQSYdQSYtQSo5RTJFSTZJTTpRVUJFWUIxXT4dbUH5eT3RiTm9pUW9yVWx3WWZ3VVFlQktfOkVZNkRVM0VWNkdWOUdUOEVSOD9JMDxELTk+Kjc7Kjo8Ljw+MDs9Lzk7LjY8MjU9MjY8MjY8MDo8Lzw+MD1ALT1DKU1XNVppQGZ8TWyITm6RUXGZUnWfVXSfV3qhYHedYG6UV2OJTFyCRVyCRVyCRVqAQ1+FSGGHSmKIS2SKTWOJTGGHSl+FSF2DSFt9SlByQEdpN2lgUWlgUWlgUWphUmphUmtiU2tiU2tiU2phUmphUmphUmphUmphUmphUmphUmphUmtiU2tiU2tiU2tiU2tiU2tiU2tiU2tiU2xjVGxjVGxjVGxjVGxjVGxjVGxjVG5iVHJkV29hVG1fUmtfU2thV2xjWmxlW2pmXWpmXXh0aYiEeJGNgZWPgZKMfomCcn16Z2BjTk9UPkRHMkZFMUhDMEY9LEw8LFZDNFA5K1I2KlY0Klk1KVw2K2E5L2U9MW09MYpLQpxSSa5VT7ZOS7xGRMZBQtJEQ9hGRtRAPtVBP9ZCPtZFQNlFQ9pGRNtFRN1FRN5ERN9DRN9DRN5ERN5ERN1FRN1FQt1FQttGQtpFP9lEPthFPtdEPNdEPNlEPdhFPtREPNJFPslGPrpBOKc7MZg4LIw5K4U8LYNAMH9AMX4/MH89L4M6MYQ6L4c5L4g6LoQ6LYQ7LIQ7LIM6K4I6LII6LIE5K386K385LX85LX46L346L346L346L346L346L305MHw5MH05MHs4L3s4L3s4L3s4L3g4Lns7MXk7MHk7MHk7MHg6L3g6L3g6L3Y6L3M3LXM3LXM3LXI2LHE1K281Km81Km00KWoxJm82K2wzKGgyJms1KWgyJmw2KnxGPIpPR4xPSo1QS49STZBTTpFWUJBXUIxaUYldUoVhVXlfUGlaR2RfSWRoT1xmS05dQEVVOEFRND1NMDxLLj9NM0NRN0ZSOkdTO0JMND5HMjpBLzk9LDk9Ljk9Ljg8LTc7LTc9MzY9NTY7NDY8Mjo8MTs9Lzw/LDxBKkpTNFZlPmJ4SWqGTG6RUXObVHehV3iiWnuiYXKYW2WLTlyCRVqAQ1yCRVyCRVqAQ1+FSGCGSWGHSmKIS2GHSmCGSV6ER12DSFl7SE5wPkVnNWhhUWhhUWhhUWliUmliUmpjU2pjU2pjU2liUmliUmliUmliUmliUmliUmliUmliUmtiU2tiU2tiU2tiU2tiU2tiU2tiU2tiU2xjVGxjVGxjVGxjVGxjVGxjVGxjVGxjVHJmWHRoXHNnW21jWWphWGxlXXNuaHp3cIF+d5CNhqCdlKilnKunnKikmaOdkZmWh3p7a2NmU09SP0dKN0VINUJFMkJFMkVINUtMPEpIOUdENUQ+MEE5LEE3K0A2KkY0KFM1KnFCOIxQSJ9QS69JR79HScxFSdNCRdZAQtlAQtpCQdtDQtpFQdpFQdxEQdxEQd5ERN5ERt5ERt5ERt5ERN1FRN1FRNtGQtpGQtdGQdZGPtRFPdRFPdNGPdRFPdVGPtRBOtNDO85FPcFCOa4+M545LZE7Loo8L4Q/MIE/L4A+LoA9LYE7L4Q6LYY6LYc7LoQ6LYM7LYI6LII6LII6LIE5K385LX85LX85L346L346L346L306MX06MX06MX06MXw5MHo6MHw5MHk5L3k5L3g4Lng4LnY4LXk7MHk7MHg6L3Y6L3Y6L3U5LnU5LnQ6LnI4LXE2LnE2LnA1LW80LG4zK24zK200K2oxKG03LWo0KmgyKGo0KmYyJ2o2K31EO41OR49OSJBRSpBUTJBVT45XUIpZUoNbUXtZTXZcT2taSl1VQllYRFleSE9ZQT9LMzpILzdFLjRCKzVBKzhELj1JM0NMN0VOOUJLNj9INTxFMjpBLzg/Lzc+LjU8LDQ6LDU8NDU8NTY7NTY7NDk7MDo8Lzs+LTtAKUdQMVJhOmB2R2mFS2+SUnWdVnmjWXmjW3ifYG6RV2CDSVp9Q1t+RF6BR16BR12ARmCDSWGESmKFS2KFS2GESmCDSV+CSF6BSVd8SUxwQEJmNmhhUWhhUWhhUWliUmliUmpjU2pjU2pjU2liUmliUmliUmliUmliUmliUmliUmliUmtiU2tiU2tiU2tiU2tiU2tiU2tiU2tiU2xjVGxjVGxjVGxjVGxjVGxjVGxjVGxjVGthVW5kWnBmXGxjWmtkXHJtZ4SBfJGQjKejoLWxrsTBvMnGwcnEvsXAusC5sbmyqKScj4iCcmZjVFBRP0ZJOD5FMztEMTpGMjhFMzhFMzhDMjpCMzxCNEBDOENFOkdFOT40KFA6L2U/NoBFQaFQT79YW8pRVspDSdVGStdFRtpGRttFRN1FQt5EQt1EP95DQd5ERN5ERt5ERt5ERtxEQ9xEQ9xEQ9pEQ9lFQddGQdVGQNNGPdJFPNBGPNFHPdRFPdQ/ONVAOdBDOsZDObZBN6U9MJY9L4w9LoY+L4I/L4E+LoA9LYE8LYM7LYQ6LYU7LoI6LII6LII6LII6LIE5K386K385LX44LH46L346L346L346L306MX06MX06MX06MXo6MHo6MHk5L3k5L3g4LnY4LXY4LXQ4LXc5LnU5LnU5LnQ6LnQ4LXM5LXI4LHI4LXE2LnE2LnA1LW80LG4zK200K2wzKmo0KmgyKGw2LGkzKWYyJ2g0KWUxJmk1KntCOY5NR5JNSJFQSo9UTI1WT4dYToFZT3xcUXNcTmtbTGBXRlZTQlBTQkpRP0BJNjRALDM8KzI7KjA5KDA5KDI7KjU+LTlCMTxFND9INz9INT5HNDpGMjpDMjVALzM+LTE8LDM6MzM5NTQ5NTQ5Mjg5MTk7Ljs+LTtAKkNML09eN11zRGmETXCTU3efWXmjWXehWXGYWWaJT1p9Q1h7QVx/RV2ARl2ARl6BR2CDSWCDSWCDSWCDSWCDSV+CSF6BR12ASlZ7SEpuQEFlN2hhUWhhUWhhUWliUmliUmpjU2pjU2pjU2liUmliUmliUmliUmliUmliUmliUmliUmtiU2tiU2tiU2tiU2tiU2tiU2tiU2tiU2xjVGxjVGxjVGxjVGxjVGxjVGxjVGxiVmpgVmphWGtkWmtnXnVwaoiFgJ+emrCwrsPCwNPS0OLh3+fm5Ofj4OLf2tzX09jPyM68srill5eHenltXV9ZSUtMOkBFMTtELz5KNj1INz1GNTtDNDs+NTo7Mzk4Mzg4MD09M0M8Mk43MWE4NIhISK9dX8VgZMpXWs1RU9NOT9dNS9tLSt5IR+FGRONEQeJCQt9DRN5ERt5ERt1DRd1DRdxCRNxCQttDQtpEQ9hEQNVEP9NGP9JFPNBGPNBHPdRFPdlAOtlAOtFCOshDOrxDOqxANJk7L4w5K4k9L4M+LoE+LYA9LIE8LIM7LIM7LIQ8LYI6LII6LII6LIE5K385LX85LX44Ln05Ln46L346L306MX06MX06MX06MX06MX06MXo6MXk6MXg5MHg5MHc4L3Q4LnM3LXI4LXQ4LnM5LnI4LXE4LXI4LXA3LHA3LHA3LG82LW82LW41LG41LG00K2wzKmsyKWkzKWcxJ2s3LGg0KWUxJmg0KWIwJWY0KXpBOJBNR5JNSJFQSo5VTIhYToFZT3haT3JcTmteTl5XR1JQQUtOPUNKOjlCMTI6KzA4KTE3KzE3LTA2LC81Ky81KTA4KzI6KzQ8LTlENDtGNT1INzxJNztGNTZDMTNALDE+LS44MDA2MjE2MjI3MTc4Mjk7MDo8Ljo/KT9IK0tZNVtxQ2iDTHGTVneeW3ehWXOcVmeNUF6BSVV4QFd6Qlt+Rlt+Rlt+Rl2ASF+CSl+CSl+CSl+CSl6BSV6BSV2ASF2ASlV2R0prQEBhNmhhUWhhUWhhUWliUmliUmpjU2pjU2pjU2liUmliUmliUmliUmliUmliUmliUmliUmtiU2tiU2tiU2tiU2tiU2tiU2tiU2tiU2xjVGxjVGxjVGxjVGxjVGxjVGxjVGxiVnBnXm5nX2xnYXRxaoeEf6GgnLy8us3Pzs/Pz+Dg4PLy8vr4+fv39vfz8PHs6e7j3+jQxt3BtcGrnaKRgX11Yl5cR0tNN0NIMkFJMkFJNEBHNUJEN0FBN0I9OUM5Nz86Njk8NT4/N0I3MUouK2Q2No9RUrNnacZubcBcXMdaV9BWU9dRTtxMS+JISOZDROVCQ99DRt1ERt1ERt1DRd1DRdxCRNxCQtxCQtxEQ9lDQtdDP9NEPtJFPtBGPNBGPNRFPdxDPdtBOdJCOspEO79FOrBBNpw6LYs1Joo8L4U9LoI9LYA9LIE8LIE8LIM8KoQ8LYI6LII6LII6LH86K385LX44LH05Ln05Ln46L346L306MX06MX06MX06MX06MXs7MXk6MXc7MXg5MHU5L3Q4LnM5LnI4LXE3LHI4LXE4LXA3LG44LHA3LG03K282K282K282LW82LW41LG00K200K2o0KmkzKWg0KWYyJ2s3LGg0KWMxJmUzKGIwJWUzKHhCOI5NR5JPSY5SSopVTYRYT3paT3FbTWldTVpURElKOj9DND5ENjlBMjA4Ky83KjY8MjQ3MDU4MTU3MjQ3MDI1LjA2LDA4LTE5LDZBMzpFNT1KOT5LOTxJNzZFMjJBLDE+LSw2Li40MDA1MTE2MDY3MTg6Lzo8Ljo/KzxFKklXNFlvQWeCTXCSVnadXHWeWHCZVWCGSVh7Q1N2Pld6Qlt+Rll8RFl8RFx/R1+CSl+CSl6BSV6BSV6BSV2ASF2ASF1/TFN0R0hoPz9dN2ljU2ljU2ljU2ljU2ljU2ljU2ljU2ljU2ljU2ljU2ljU2ljU2ljU2ljU2ljU2pjU2tiU2tiU2tiU2xjVGxjVG1kVW1kVW1kVW1kVW1kVW1kVW1kVW1kVW1kVW1kVWxkV2liWmdkXXZzbpOSjq+vrcTGxdrc2+ru7/P09vb3+fz8/v///////f/7+vz39P3y7Pfh1PLYx+DKtca2n6qgh4iEaWJiRkVILURIL0NHMEZFMUdENUY8M0M2MEY0Mkg6OT49OT4/OkI6N0k3NWNHRpJqasWTkuitqdKLh8d0bsBdWMZTUNVPTt9KTOdGS+lGS99FR99JS9pERtQ7Ptg+QOFHSeBER9Y6PdpAQNpAQNlBQNZCPtRDPtFCPNBBO9FBOd5DPttBOdNAOclAOL5COLBANZ86LpA4Kow9MIc+L4M+LoE+LYA9LH88K4E9KoE8LH86K385LX85LX44LH44Lnw4LXw4LXw4LXs4L3w5MHw5MHw5MHo6MXo6MXo6MXo6MXk9NXc8NHc7M3U6MnQ5MXE4L3A3LnA3Lm82LW03LW03LWw4LW03LWw4LW03LW03LWkyK202L3A5Mm84MWs0LWcyKmcyKmgzK2UwKGk3LmQyKV0tI2AwJl8vJWIyKHM+NoxPSo9QS4hRSoFSSn1ZTXheUWhYSVROPkRFNT5FNTpDMjVAMDQ8LzM7MDQ6MDQ6MDY4Mzc4MzY2NDQ2MTM1MDA1Li82Li42Ky45KzI9LTZDMjpHNjpJNjhHNDRDLjE/Lio0KywyLi0yLi4zLTQ1Lzc5Ljo8Lzo/KzY+JkRSMVdsQ2iCUnOUXXeeX3KbV2uUUlt+RFh5RFR1QFR1QFd4Q1p7Rlt8R1p7Rl5/SmKDTmKDTl5/Slx9SF+AS2CBTF5+TVRzSkZkQDxXNGljU2ljU2ljU2ljU2ljU2ljU2ljU2ljU2ljU2ljU2ljU2ljU2ljU2ljU2ljU2ljU2tiU2tiU2tiU2xjVGxjVG1kVW1kVW1kVW1kVW1kVW1kVW1kVW1kVW1kVW1kVWxkWWdkXW9uaoaFg6SkosHDwtba2+ru7/f7/Pf7/vj8//z9//7+/v///f/++v/8+f/68//w4Pvr1O3fxdfNssC7naSjhIKDY2dqS0xRM0dKL0VDLkdCL0g+Mkk6M0w5NUs8OT86N0JBP01IRV1SUHlqZ6OOi86yrujFv//X0euyqc2CfMBjXspWVthSU99ITdpBRNZERdVFRdhISNxKS9tFRtU8PtY8PttBQ9k/P9k/P9lBQNdBQNZCPtNCPdJBPNNAOdxBPNtAO9NAOctCOr9DO7FBNqA7MZI4LYw9MIc+L4M+LoE+LYA9LH88K4E8LIE8LH86K385LX85LX44LH05Lnw4LXw4LXw4LXw5MHw5MHw5MHw5MHo6MXs7Mns7Mno7Mnc8NHU8M3U6MnM6MXI5MG44Lm82LW03LW03LWw4LWw4LWw4LWw4LWo4LWw4LWw4LWs2Lm43MG84MW45MWw3L2k0LGcyKmUzKmMxKGQ0Kl8vJV4uJGIyKF4uJGAwJnA+NYFKRYdSTIdYUn5YT3JWS2RSRFJJOj4/LzpBMTZBMDVAMDM+MDQ8MTQ8MTU7MTc6Mzc5NDc3NTc3NTU3MjQ2MTE2Ly82Li83LC45KzE8LjRBMDhFNDlINThHNDRFMjRCMS44Ly41Li4zLS0yKzIzKzQ2Kzg6LTk9LDc/KERRM1dsRWiCVXSVYHedYnCYWWePUFl8RFd4Q1R1QFR1QFZ3Qll6RVl6RVl6RVt8R1+AS2CBTFx9SFt8R15/Sl5/Sl57TVNuS0ZfQTlSNGljU2ljU2ljU2ljU2ljU2ljU2ljU2ljU2ljU2ljU2ljU2ljU2ljU2ljU2ljU2ljU2tiU2tiU2tiU2xjVGxjVG1kVW1kVW1kVW1kVW1kVW1kVW1kVW1kVW5lVm5lVmxmWmVkX3l7eJeZmLK2t83R0uTp7PT5/Pr///v///z///3+//7+/v/+/P//+///+v//9P785/r53e/w0eHlxNLYtL3FoKCog4eRbGBnRVFYN0VILURDLkpENExEN0tBOEk+OkM7OVNKS2lhX4F3dpySkL6zr9nOyOrc0/7o3f/z6f/k2/Cpo8NlY7VCRcdESdpSVttVVNFNS8pEQc1DQdRGRddFRthERNlDRNY9P9c+QNhAP9ZAP9ZCQNNCP9NCPdRBOtlAOtlAOtJCOstFPMBEPLJCN6E8MpM5Lo48MIk9MIM+L4E+Ln89LX48LIA9LYA9LX85LX85LX46L305Ln05Lnw4LXs4L3s4L306MX06MXs7Mns7Mns7Mns7Mno7NHg8NHQ7MnE7MXI5MG85L244Lmw4LWw2LGs3LGw4LWo4LWo4LWo4LWo4LWk5LWo4LWo4LW45MW04MG04MG04MG04MGk3LmY0K2MxKGQyKWExJ10tI18wJmM0KlwtI18wJnNEPH1QSoFWUH5ZUXBUSV5KP09DNz88LTQ2KDI7KjA7KzE8LjI9LzQ8MTU7MTc6MTc6Mzc5NDc5NjY4MzU3MjU3MjI3MDA3LzA4LS45KzA7LTI/LjVCMTdFNDhHNDhHNDlGNTQ+MzM6Mi80LSwyKC8wKDEzKDU3KjY6KTY+J0VSNlltSmuEWneXZnecZmyTWl+HS1d4Q1d1Q1RyQFRyQFZ0Qlh2RFl3RVl3RVp4Rl17SV99S117SV17SV99S158Slp3S1BnSkFXQDNJMmljU2ljU2ljU2ljU2ljU2ljU2ljU2ljU2ljU2ljU2ljU2ljU2ljU2ljU2ljU2ljU2pjU2tiU2tiU2xjVGxjVG1kVW1kVW1kVW1kVW1kVW1kVW5lVm5lVm5lVm5lVm1nW2prZoOHiKOnqLm+wdDV2OXt7/P7/fX9//v///v///z///z++/3++f79+P/+9///8/j95vT93u732Obyzt3pw87atLbBmaGrhoCHZWZtTE1SNEZIMEhKNUtJOkhEOURAN09HRGpgX4uBgKSambevrMvGwt7b1Orm3frx6P/78f/37f/d1fu2seWPjspjZLBAP8NQS8lUTclQSMNGQMhHQtRNStZLSNBAP9I+PtM/P9U/PtVBP9VBP9NCP9NCPdNCPdY+OdVAOtJDPcxFP8BFPrJBOaI9NZU7Mo48MYk9MIM+L4E+Ln89L348LIA9LYA9LX85LX85LX46L305Ln05Lnw4LXs4L3s4L347Mn47Mnw8M3w8M3s7Mns7Mno7NHg8NHI5MG85L285L205Lmw4LWs3LGo2K2g2K2k3LGk3LGk3LGg4LGg4LGg4LGg4LGg4LG07Mmw3L2o1LWk3Lmo4L2o4L2Y0K2ExJ2Q0KmEyKF0uJGEyKGIzKVkqIGEyKHlORYFcVnZXUmlOR1dDOkk8M0A6Ljo7LTg8LjA4KS86KjM7LjQ8LzY8MjU7MTY5MDY5MDc5NDY4MzY4MzQ5MjM4MTM5LzE5LjE5Li45Ky86LDA9LDI/LjVCMTdFNDtINjxJODlDODc/NDI4Li0zJy4wJS8xJDI0JjQ4JzQ8J0VSOF1wUHKLZHuabnecaWaNWFV8RVNzQVRyQFNxP1NxP1RyQFVzQVZ0QlZ0Qld1Q1t5R117SVx6SF58Sl99S1x6SFdySUpeRTxNOy4/LWdkU2dkU2dkU2dkU2dkU2dkU2dkU2dkU2dkU2dkU2dkU2dkU2dkU2dkU2dkU2ljU2pjU2tiU2tiU2xjVGxjVG1kVW1kVW1kVW1kVW1kVW1kVW5lVm5lVm9mV29mV25nXXFxb4eMj6SprLe/ws3V2OPt7/L8/vT+//j///v///v//P3/+vz99fr88fj47Pb46vb/6PP/5PD94e752en00t7oxcrSrba+mZ2jgX2CYlldQkdMNUZLN0ZKOUNHOUFDOGNeWIV9equhn8G3tczCwdfPzebh3fHu6fr38Pz16//x6P/y6f/07P/l3+mopLdoY6ZMQbVQRMFZTsdbUcZRSL9EPcJBPMtEQctAPc5APtBAP9FBQNJDP9FDP9FDP9JDPdM/O9JBPNBFQMlFQL1DPq9AOaA+NZU9M448MYk8MoM9MYE9MH89MX48Ln89L389L346L346L346L305Lnw5MHs4L3s4L3s4L3w8M3w8M3w8M3s7Mno7NHk6M3k6M3c7M243MG04MGw3L2w3L2s2Lmg2LWg2LWg2LWk3Lmg4Lmg4Lmc4Lmc4Lmc4Lmc4Lmg4Lms5Mmg2L2Y0LWc1Lmk3MGg3MGU0LWIxKmMyK2IzK18wKF0xKF0xKFYqIWI2LXtVTHRZUmFOSE4/OEE3Lj02LDs5LTk7Ljk8MTM5LTM7LjU7LzY8MDY8MDc6LzY4LTQ3LjY5MDQ5MjM4MTI6LzI6LzI6LzE5LjE5LC45Ky45Ky86LDA7LTM+LjZDMjpFNTxHNz1FODpCNTU7LzA2KDAyJS8xJDEzJTE1JDI6JUdTO2J1V3ePa3ybcnGVZ1yCUUpwPU9vPlFuPlFuPlFuPlFuPlFuPlNwQFNwQFd0RFt4SF16Sl16Sl98TF98TFp3R1JsRUNVPzZENyg2KWdkU2dkU2dkU2dkU2dkU2dkU2dkU2dkU2dkU2dkU2dkU2dkU2dkU2dkU2dkU2ljU2pjU2tiU2tiU2xjVGxjVG1kVW1kVW1kVW1kVW1kVW5lVm5lVm9mV3BnWHBnWG5nXWxubXqChZOaoKu1t8TO0Nzm6O33+fT+//X+/fb//Pr/+vv/+fv+8/j67fX26PH04/T96vT96PT85fP53/L22+nszdjXucXEpbGwko+OcmVnT01QO0dLOkZNPUdPQktRR3t7c5+alMW+uNjOzN/T0+fb2/Pr6fz39PDv6vz89P//9v/99P/57//z6v/n3v/Xy9iTg7hlU6NKOrRURr1XSbVGO7dAOMhLRcdDPspDP8xCP85DQM5DPs5DPs1EPs1CPdBBO9JDP85EQcVEP7hBPao9OJ47NZU8NI47M4k8MoM9M4E9Mn89MX48MH89MX89L346L346L346L305Lnw5MHs4L3s4L3s4L3w8M3s7Mns7Mno6MXk6M3g5Mnc4MXU5MW43MGw3L2w3L2o4L2k3Lmk3Lmg2LWc3LWc3LWc3LWY3LWY3LWY3LWY3LWY3LWY3LWg3MGg2L2c1Lmc1Lmc2L2g3MGc2L2Y1LmEyKmU2Ll4yKVwwJ2A0K2E1LGk9NHVTSlhHQEU+Njw1Lzk1LDs4Lzg6LzU3LDM2KzY5LjU7Lzc6LzY5LjY5LjU4LTU3LDM2KzI4LDE5LDE5LjE5LDE5LjE5LDE5LDE5LC45Ky45Ky45Ky86LDA7KzM+LjZBMTdCMjxENTpDMjg/LzU7LTU3KjI0JzEzJTA0JTE4JkhUPmV4XHWNbXSSbGaJX1J3S0JoOUtrPE5rO1BtPVBtPU5rO05rO09sPFFuPlZzQ1p3R116Sl57S198TF98TFZzQ05nQDxKOS86MiQuJmdkU2dkU2dkU2dkU2dkU2dkU2dkU2dkU2dkU2dkU2dkU2dkU2dkU2dkU2dkU2ljU2pjU2tiU2tiU2xjVGxjVG1kVW1kVW1kVW1kVW1kVW5lVm5lVm9mV3BnWHFoWW9oXmhpa210eoWMlKOssb/IzdPe4uXw8vD8/PL8+/X++fj/9/r/9vz/8vr97Pj55/b35/b26vf36/r36Pz25v314vfs1ufYw9XGr8Cxmp6TfXVuW1pXRlBRQ1NWS1tiWmVsZJWYjbKyqNXOxujd2fPj4/rq6//x9P/3+f/++/79+fn69Pj58fz88P//8///8f/76v/m0fGqlLxvW6lWRK5SQ7VQRLtMQb9KQcJHP8ZFP8lFQMpFQMpFPslEPchDPMlCPNFDP9BFQMxFQcJDPbM9OaY7NZw7NZU8Now8M4c9NIU8NYE9NH88M348MH89MX89MX46L346L346L305Lnw5MHs4L3s4L3s4L3s7Mns7Mnk6M3g5Mnc4MXY3MHY3MHM3L243MGo4L2o4L2o4L2o4L2g4Lmg4Lmg4Lmc3LWY3LWY3LWY3LWQ4LWQ4LWQ4LWY3LWc2L2g3MGk4MWk4MWg3MGk4MWo7M2w9NWc4MGs8NGI2LWE1LG9DOnhMQ3RJQG5NREM5MDU2LjQ1Lzg5MTg7MjQ3LjE0KzI1LDU4LTU4LTU3LDQ2KzQ2KzQ2KzQ2KTM3KS83KC04KC45Ky45KS45Ky45KTA4KTA4KTE5KjA4KTA4KzA4KzA4KzE5LDM7LjQ8LTlCMTpDMDtCMDpBMTo8LjY4KjI0Ji8zJDI5J0lVP2N1W22EZ2aEYld5VEluRT9kOEhnO0xpO05rPU5rPUxpO0xpO01qPE9sPlVyRFl2SFt4Sl16TF57TVx5S1FuQEdfOzZCNCs0LyMpJWdkU2dkU2dkU2dkU2dkU2dkU2dkU2dkU2dkU2dkU2dkU2dkU2dkU2dkU2dkU2ljU2pjU2pjU2piVWxiVmxiVm1jV21kVW1kVW1kVWxlVW1mVm5nV29nWm5oXG9oXm1qZWtvcm10eoOKkKWus8PM0dXf4ebu8fT8/vT9+vf9+fn+9/r/9Pz/8vz/8fz/7v3+8Pv47/768f/57//67f/56f/y3+/gy93Ot8Gym6KXgXx1YmJfTlhaTF1jV213bnyGfaasor7AtdrVz+7k4vzu7v/09P/09/709f74+Pv6+Pv9+Pz/+vj/9fT88ff98f//8f/56P/04//Mu71/cJtRRKlTRrVTSLJDOsBKQMRIQMdHPslGPshFPcdEPMZDO8ZDO81HPsxHPsdHPrxDO60+NZ86Mpc6M5E+Noo9NYY9NIM9NYE9NIA8M387MIE7MYE7MX46L346L346MX05MHw5MHs4L3s4L3s4L3o6MXo6MXg5Mnc4MXY3MHU2L3U2L3E2Lm04MGs5MGo4L2o4L2k5L2k5L2k5L2g4Lmc3LWY3LWc3LWY3LWY3LWY3LWY3LWY3LWY1Lmo4MW07NGs6M2o5Mmo6MG0+NG9DOGxANW9EO2Q8MmM9MnpWSoZkWnlXTWJMQT46MTM4MTQ5Mjc8NTQ6MC81KzI1LDk8MzM2KzI1KjI0KTAzKDEzKDI1KjQ2KzQ3LC42KSw3KS83Ki04Ki83Ki83Ki83Ki83KjE5LDA4KzA4LS83LC83LC83LDA4LTA4Kzc/MDlCMTxFND1ENDtBMzg8LjI2Jy00JDI7KkpWQmNyW2h8YV12WE9tS0ZmQUFhOkhkO0toPE5rP05rP0toPEpnOUxpPU5rPVRxRVd0SFp3S1t4TF16Tlp2TU5qQUNbOzI+NCowMCEnJ2hlVmhlVmhlVmhlVmhlVmhlVmhlVmhlVmhlVmhlVmhlVmhlVmhlVmhlVmhlVmhlVmpkVmpkVmpkWGxkWWxjWm1lWm1lWG1mVmdgTmplUm5rWG9sXWhlXGZlYXNxcoGChoqPk5aeoauztsPIy9jd4Oru7/b3+fn7+vz+/f7+/P//+v3+9vr98vn88fr98vv+8/n68vr68vn57fz66/785/n33unlytXUtrq5m5iYfHBzWF9kTWJrWHJ9bISQgpGbkLS5ssvMx+Pi3vLu6/fz8vv39v35+Pz49//+/P7+/P7+/P3/+v3/+v3/+v3/+v3/+vr89///+v/79v/q5dinoKNgWJtEPbVORb9NQ8JGPMREOcpFPM5JQM5LQctIQMdHPMZHOMNIOL1KOLNIOKZFNZpCNJFCNYtDNYZCNYRCNoJANII+M4I8MoQ6MYY5MYY5MX85MX46MXw5MXs4MHo3L3o3L3c3LnY2LXc3Lnc3Lnc4L3c4L3Y3LnU2LXE1K24zK2w3L2k4MWk4MWg3MGg3MGc2L2c2L2c2L2Y1Lmc2L2k3MGk4MWg3MGc2L2U0LWUzLGgzLWo1L204MGs5MGo6MGk7Lmk9MGtBM2dCMmpJOmRIOnZfT35rXIp4aox/b1JKPTc5LjQ6MDQ6MDM5LzM5LzM5LzI4LjI4LjE3LTE3LTM2LTA2LDI1LC81KzE0Ky81Ky80LS41LS80LS41LS80LS80LS80LS80LTA1Li80LS80LS4zLC4zLC80LS80LS82LjE7MjM9MjZANThCNzlENjdCNDVAMDM+LTQ/LkRRPVdlTltrUVBiSEVYPEBUOEJXNkljPktlPktmPUtmPUplPEplOkxnPk9qP1VwR1l0S1x2T113UF13UldxTkhiPztPNiYxKyYrLiQpLGhlVmhlVmhlVmhlVmhlVmhlVmhlVmhlVmhlVmhlVmhlVmhlVmhlVmhlVmhlVmhlVmhlVmhlVmpjWWtkWmxjXG1kW21lWm1mVmlkUWpoU21qV2prW2dnX2xsbH5/hJCTmqivtbjCxNHW2eLn6vLz9fv8/v/+///+//79+//++v//+v7/+fv89Pj78vb88vf98/f68fj67/j67ff66fn75fL12t/iw8zQr7S4l5GWdmtxVVlhSV9rVXSBb4yYip2nnL/BvNPT0efn5fPz8ff39fv7+fz8+vv7+f7+/P7+/P7+/P7+/P7+/P7+/P7+/Pv//vX///X///7////7+v/t6vC/usJ+dZ9LQa9NQLlLPsJMQMVLPsNFObw9NL4/NsNFOcRGN8NKN71MOrNKN6ZGNplDNJFDNo1FN4VDN4JCOIFBN4E+NYI8NIM6M4Y5MYQ5M345Mn06Mno6MXo6MXk5MHg4L3Y3LnY3LnU2LXY3LnQ4LnQ4LnQ4LnI2LG81Km00K2w3L2k4MWo4MWg3MGk3MGg3MGc2L2c2L2UzLGUzLGc1Lmg2L2o4MWo4MWo4MWo4MWs2MGw3MWs5MGs7MWs7L2o+MWpAMGhDMWdINmtQPWdSQXVmU4F1ZYuGc4aDcktMPDY5LjM5LzM5LzM5LzI4LjI4LjI4LjE3LTE3LTE3LTE3LTA2LDA2LC81Ky81Ky81Ky80Li80Li80Li80Li80Li80Li80Li80LjA1Ly80Li4zLS4zLS4zLS4zLS80Li82Ly44MC86MjE9MzRANjZCNjZCNjZCNDVCMTZDMUNQPlBdSVJgSUlXQEFPNkJQN0ZWO0piQEpkP0tlQEtlPkljPEhjOklkO0plPFNuRVhyS1x2UV13VFt0VFRtT0NcPjZJNSYxLScsMCQpLWhlVmhlVmhlVmhlVmhlVmhlVmhlVmhlVmhlVmhlVmhlVmhlVmhlVmhlVmhlVmhlVmhlVmhlVmpjWWtkWmxjXG1kW21lWm1mVm1oVWtpVG1qV2prW2trY3d3d5GSl6essr/GzNLc3uzx9Pf8//7///7////+///+//79+//++v//+v3++Pr78/X47/H36/H36/T37PX56/b46vX45fX34e7u1Nvbv8nKq7CxkpOWeXV5YGtwWnR7aYiQgZ+nnK61rc3Pyt7e3O/v7fj49vv7+f7+/P7+/P39+/7+/P7+/P7+/P7+/P7+/P7+/P7+/P3//vv///v///7+/v/7+f/69P/37f3RxtiekJRMPaVSQqlMO6dAMbdHO89ZTc9VSrxANMNDNsZIOsNLPblJO6pCN50/NZdAN5NEPYlAOYRBOYFBOH8/Nn4+NX09NH88NH09NHo7NHg8NHc7M3c7M3U6MnQ5MXQ5MXQ5MXI5MHI5MHI5MHI5MG85L244Lmw2LGs1K2w3L2o4MWw3MWo4MWs2MGk3MGk3MGg2L2c1Lmc1LmY1Lmc2L2g3MGk4MWs6M2s6M2w7NGo7M2k6MGg8MWs/MmpDNGlEMmZFMmdKOGxWQWpZR3VqVoZ/bZGOe4B/bURHNjU4LTI4LjI4LjI4LjE3LTE3LTE3LTA2LDE3LTE3LTE3LTA2LDA2LC81Ky81Ky81Ky80Li80Li80Li80Li80Li80Li80Li80Li80Li80Li4zLS0yLC0yLC4zLS80Li41Lis1LSs2Li05Ly87MTI+MjRANDZCNDdEMzhFMz9MOkVSPkNROjtJMjhGLT5MM0RUOUpfQEpiQExkQktjP0lhPUdgOUZfOEdgOVJrRFhwTF11U152VlpxVFBnSz1UOC5BLiYxLScsMCUqLmhlVmhlVmhlVmhlVmhlVmhlVmhlVmhlVmhlVmhlVmhlVmhlVmhlVmhlVmhlVmhlVmhlVmhlVmpjWWtkWmxjXG1kW21lWm1mVm5pVmxqVWxrV2xtXXBxaYCCgZ6hprm+xMTL0dvl5/X6/fv///z9//z9//78/fz7+f/+/P//+//++fv89PX27u7x5unv4+ft3+3x4vD05fH04/H03/Lx3Orq0NjYvMfHq7KxlaGhiZGTfZCTgJyekaqtora7tMDFv9zc2unp5/b29Pv7+f39+////f///f39+/7+/P7+/P7+/P7+/P7+/P7+/P7+/P7+/vv7/f/+///+//fy7/zz7P/88//77f/05OzDsbmBcJVQQKJPP7hYSrdNP7VFOcBHPMFBNshFO8VJP71HPa9AOaE7Npo9OJZBPo0/O4dAPIFAOn1AO3o/OXlAOXg/OHg/OHY9NHY9NHY9NHU8M3M9M3I8MnI8MnE7MW87MG87MG87MG46L2s5Lmo4LWo4LWk3Lm04Mm43Mm02MWw3MWw3MWs2MGk3MGk3MGw6M2o5Mmg3MGY3L2Y3L2Y3L2g5MWY6MWo/NmY+NGU9MWY+MmhDM2lFNWZHM2NHMmNKNmhWQGlcSXNrVoWCb42Pem9yXzk9LDI4LDI4LjE3LTE3LTE3LTA2LDA2LDA2LDE3LTE3LTE3LTA2LDA2LC81Ky81Ky81Ky4zLS4zLS4zLS4zLS4zLS4zLS4zLS4zLS4zLS4zLS0yLC0yLC0yLC0yLC4zLS00LSo0LCk0LCo2LCs3LS46LjE9MTRAMjZCNDZDMjpHNTxJNzhFMTI/KzJAKThGLz5ONERYPEVdPUtgQUpiQEtgP0dfO0heOkZeOlNpRVhwTmB1Vl51WFpuU0xjSTlNNCk6KCUuKyUqLiQpLWhlVmhlVmhlVmhlVmhlVmhlVmhlVmhlVmhlVmhlVmhlVmhlVmhlVmhlVmhlVmhlVmhlVmhlVmpjWWtkWmxjXG1kW21lWm1mVmxnVGtpVG5tWW9wYHN2bYOHhqSnrL/Eys7V2+bw8vv///v///v8/v3+///+//79+////f//+/79+Pf48O/w6Ofq3+Dm2t7l1efr2urv2+3w2+zw2e7u1ujo0NrYv8zKscK9p7e1oLGunba0p8G+tcnIw9LTztnZ1+jo5vLy8Pr6+Pz8+v39+////f///fz8+v7+/P7+/P7+/P7+/P7+/P7+/P7+/P/+/P/8///8///7+vz79/3/+f7/+P7/9P//7f/+7Pjfy8Wcip1iUJZKOqVMPLRQQLxMPr9AN8ZDO8VGP79EPbE+O6Y6N546OJk+PZE9O4o/PIRAPX1APXhBPHRCO3JDO3JDO3E/NnM+NnM+NnI9NXI9NXI9NXA+NW89NG4+NG09M2w8Mms7MWo7MWk6MGk6MGo6MG43MnA2MnA2Mm02MW02MWw3MWk3MGk3MGw7NGs6M2g5MWU5MGU5MGU5MGU6MWQ8MmZCNmNBNWNDNGRENWRHNWRJNmJJM19JMl5MNmVWP2piTXJtV4SDb4SHcltgTDM6KDI4LDI4LjE3LTE3LTE3LTA2LDA2LDA2LDE3LTE3LTE3LTA2LDA2LC81Ky81Ky81Ky4zLS4zLS4zLS4zLS4zLS4zLS4zLS4zLS0yLC0yLCwxKywxKywxKywxKy0yLCwzLCw2Lis1LSo0Kyo0Kys1LC44LTA7LTI9LzI9LTVALzZBMDVBLTE9KTE9KTVBLThGLz1PNUBUOEZZPUhcQEpdP0lePUtePktgP1RnR1twUWN2WmB0WVlrU0pdRzZHNCY0JSQtKiQpLCInKmhlVmhlVmhlVmhlVmhlVmhlVmhlVmhlVmhlVmhlVmhlVmhlVmhlVmhlVmhlVmhlVmhlVmhlVmpjWWtkWmxjXG1kW21lWmxmVmpnVGtqVWxuWW9yYXN2bYCGhJ+kqLi/x9bf5O33+fv///v///v8//7////+//79+///+///+vz89PP16uvt4uPn2d3j1dzj0ePo0ufs1ent1urs1Ovr0+jmz9/axNPOuNPOuszGtsvDuNDJwdfSzuDb2Orm5fDv7fPy8Pn59/39+/39+/39+////f7+/Pz8+v7+/P7+/P7+/P7+/P7+/P7+/P7+/P/9/P/7/P/4+f/+/f7//fn//fT/+O//9ff/9vD35///7f/u282nlKRrWKJbR6pXRa1MO7lEOsBEPMBFPrxFP7RBPqo9OqI6OZo7OZU9PI0/PYU/PX1AO3dCPHJDO29EO29EO3A/OHE/NnE/NnE/NnE/NnA+NW8/NW8/NW9ANm4/NW0+NGs8Mmg8MWg8MWg8MWw8Mm84M3E2MnA2MnA2Mm02MWw3MWo4MWk4MWg3MGc4MGU5MGU6MWQ8MmU/NGZANWRCNl5CNGFHOGNMOmRNO2NNOGBLNl1LM11NNF1ROWJYP21oUnNzW4CDbnZ7ZUZPOjQ9KjM5LTI4LjI4LjI4LjE3LTE3LTE3LTA2LDE3LTE3LTE3LTA2LDA2LC81Ky81Ky81Ky0yLC0yLC0yLC0yLC0yLC0yLC0yLC0yLC0yLCwxKyswKiswKiswKiswKiwxKywzLC41Liw2Lio0Kyo0Kyo0Kys1LC03LC45Ky04KjA7KzQ/LzVALzQ/LjM/KzM+LTNALDdGLzlLM0BPOEJUOkdXPEhbP01dQk1gRFVlSlxvU2R0WmByWlhnUkZXRDRCMSQyJSQtKiQpLCInKmhlVmhlVmhlVmhlVmhlVmhlVmhlVmhlVmhlVmhlVmhlVmhlVmhlVmhlVmhlVmhlVmpkVmpkVmpjWWtkWmxjXG1kW2xmWmxmVmxpVmxrVmttWGpuXWxyaHl/fZWdoK63vtLb4Orz+Pv///n+//n6/v7////+//r59///+/79+Pn58fHz6Onr3uPn2N/m1uDo0+Tp0uft0+js0+fp0ejo0OflzuDbx9fQvtrTw9nRxt7Uy+bd2O7k4/Pp6vrx9P/5+/r59/7+/P///f39+/39+////f///fz8+v7+/P7+/P7+/P7+/P7+/P7+/P7+/P/9/P/5+P/6+f/+/fz//ff//u7/+fH///L//fX/+vP56//97f/66PTOu6t3Yo9ROqlbR7JOPrhKPblJPrhJQLRHQK9EPqU9Opw6N5Y9OY8+Oog/OYBBOnhBOnREOnBGOnBFPHA/OHE/OHE/OHE/OHE/OHE/OHA/OHA/OHFCOnBBOW4/N2w9NWk9NGo+NWo+NW49Nm84M3I3M3A2MnA2Mm43Mmw3MWo4MWk4MWQ4L2Q5MGM7MWQ+M2RANGNBNWNBNV9DNVpFNF9OPGdWQmhXQ2NTPF5POFtPNVxSN11WPF1ZPm5sVXR2XnyBa2NtVTI+KDZCLjM7LjM5LzM5LzM5LzI4LjI4LjI4LjE3LTE3LTE3LTE3LTA2LDA2LC81Ky81Ky81Ky0yLC0yLC0yLC0yLC0yLC0yLC0yLC0yLCwxKywxKyswKiovKSovKSswKiwxKysyKy00LSs1LSo0LCo0LCs1LCs1LCw2Ky03LCw2Ky86LDI9LzZBMTdCMjdCMTVAMDQ/LjI/LTRDLjpHMz1MNUFPOERUOkpYP0xcQlRiSVxrVGNxWl5tWFViUERSQTI+MCMvJSYvLCYsLCQqKmhlVmhlVmhlVmhlVmhlVmhlVmhlVmhlVmhlVmhlVmhlVmhlVmhlVmhlVmhlVmhlVmpkVmpkVmpjWWtkWmxjXG1kW2xmWmxmVm9sWW1sV2psV2drWmZsYnJ7eI6YmqixuMrT2OPs8fj9//f8//r7//7////+//r59f//+v399fj47vDy5enr3eXp2OPq2OXt1ubs0unt0urt0ujozujmz+jjz+HayNjQw9jOxN3SzOne2vjt6//09v/1+f/1+//5/P/9/v///f///f7+/P7+/P///f///f39+/7+/P7+/P7+/P7+/P7+/P7+/P7+/P/++v/9+//9+/38+vn9/Pj///X///P//+39+vP/+/v/+v//9P/25v/z3//jzdetlalvWahXRK5RQKxPPq9PQbFPQq1LQKRDPJk8NZU+N48/Nog/OIFBN3tCN3VENnFFOHFFOHA/OHE/OHM+OHE/OHE/OHE/OHE/OHA/OHNCO3FCOnA/OG0+Nmw9NWo+NW0+Nm8+N284M3E3M284M204Mm04Mmk4MWg5MWY6MWY7MmQ+M2RANGJCNWBDNV1BM1xAMldCMVRHNFtTPmZeR2leSGJYP1pTOVpTN1xXOlpWO1hXO2ttVXN3XnV9ZlVhSSYyHDhEMDM7LjQ6MDQ6MDM5LzM5LzM5LzI4LjI4LjE3LTE3LTE3LTA2LDA2LC81Ky81Ky81Ky0yLC0yLC0yLC0yLC0yLC0yLC0yLC0yLCwxKyswKiswKiovKSovKSswKiswKiwxKysyKykzKyo0LCs1LSs1LCw2LS03Li03LCw2Ky44LTI8MTZBMzlENjlENDdCNDZBMTA7KzI/LTVCMDlGMjxJNUBON0ZUPUpYP1JgSVtoVGFuWlxpV1FeTUJOQC87LyIsIysxLSguLCYsLGhlVmhlVmhlVmhlVmhlVmhlVmhlVmhlVmlmV2lmV2lmV2lmV2lmV2lmV2lmV2lmV2tlV2tlV2tkWmxlW21kXW5lXG1nW21nV3FuW2ttV2tuWWtyYGpyZ3B5doeRk5+qsLvEydDZ3urv8/b7/vz9//7////+//79+f//+v7+9vr68Pb46/T26PD04+rx3+fv2PD22u3y1Ovu0ezs0ujm0eHcyd3VyN7UyuHUzuja2fLk5Prr7v7y9P/3+//5///8///9/v7+/P7+/P7+/P7+/P7+/P7+/P7+/P7+/P7+/P7+/P7+/P7+/P7+/P7+/P7/+v/++v/++v7+/P3//vv///r///r///v///7//////f/79f/78f/87P/75f/z2//q0bqCaaZiS5dPOZ9UP6haRqNSQZ5LO6BNP448MIs9MIY+Mn89L3g9L3Q/L3NCM3RENnI9NXI9N3Q9OHM+OHVAOnVAOnQ/OXE/OHNBOnFAOXJAOXFAOXA/OG4/N28+N28+N2s5Mm04Mmw6M2w7NGw7NGg8M2c8M2M9MmM/M14+MWRHOWNHOVQ9LU45KE04J0AxHldRO1BON0tJME9LMl1ZPmllSmVhRFZVN1hYPF1gQ29zWnqAZmRsVT5KMi05IzI+KjQ8LzU7MTQ6MDQ6MDQ6MDM5LzM5LzM5LzM5LzM5LzM5LzI4LjE3LTE3LTA2LDA2LDE2MDE2MDA1LzA1Ly80Li80Li80Li80LiwxKywxKywxKywxKywxKywxKyswKiswKi41Li00LS00LSwzLC00LS00LC41LS41LSsyKi00LDA3LzU9MjlBNj1FOD9HPD9KPDdCMjVALzM+LTE9KTI+KjlFL0JOOElVP09bR1ZiTl1oV1lkVExXSTxGOy85LikzKikvKyguKictK2hlVmhlVmhlVmhlVmhlVmhlVmhlVmhlVmlmV2lmV2lmV2lmV2lmV2lmV2lmV2lmV2tlV2tlV2tkWmxlW21kXW5lXG1nW2toV29uWmpsVmtuWWtyYGp0aXF8eImUlqOutL7HzNLb4Ovw9Pf8//3+//7////+/P79+f//+v7+9Pv77/f56/T35vD14ery3ejt1urv0ebry+TnyubmzOPhzN/Zyd7Uyt/UzufZ2O3f3/bn6vvv8//0+P/3+//6/v/8///+/P7+/P7+/P7+/P7+/P7+/P7+/P7+/P7+/P7+/P7+/P7+/P7+/P7+/P7+/P3//Pv/+vv/+v3//P3+//79///8///8///7///8///8///7+f/89f/+8f//7f/75f/y2f/r0eCxl6d1XJFbQ5ZaQppZQ5pWQ5lSQI5HNYtGNohFNINEM3xDMndCMHNAL28+L3VAOHQ/OXU+OXVAOnQ/OW89NnA+N3NBOnE/OHA/OHA/OG8+N28+N20+Nm49Nm0+Nms8NGw9NW0+Nms/Nmo/NmdBNmVBNWJCNWRHOVtBMl5HN15JOE49K0Y3JEc4JT83IkxMNEdLMkRHLEJFKk1NMVtbP2JhQ2BhQllZPWRnSnN3XnN5X1hgSTpELC87JTdDLzY+MTY8MjY8MjY8MjU7MTU7MTU7MTU7MTU7MTU7MTU7MTQ6MDQ6MDM5LzM5LzM5LzI3MTI3MTI3MTE2MDE2MDE2MDA1LzA1Ly4zLS4zLS0yLC0yLCwxKyswKiswKiswKioxKioxKikwKSkwKSkwKSoxKisyKiwzKy41LS00LC41LTA3LzQ7MzlBNj9GPkJKPztGODpFNTdCMTQ/LjM/KzZCLjxIMkBMNkxYRFNfS1lkVFdiUktVSj1HPDE7Mis1LCsyKyowLCkvK2hlVmhlVmhlVmhlVmhlVmhlVmhlVmhlVmlmV2lmV2lmV2lmV2lmV2lmV2lmV2lmV2tlV2tlV2xjWm1kW21kXW5lXG1nW2toV21sWGltVmpvWWt0YWl1aXF9eYqYmaWyuL/K0NTd4u3y9vf8//z9//3//v/+/P79+P//9/398/r77ff66fT35O/03ufv2OXr0eLnyd7hwt3dwd7ext7byN3Xy+DVz+TZ1+7i4vPn6/ru8v/0+P/3+//5/P/6/f/9/f/+/P7+/P7+/P7+/P7+/P7+/P7+/P7+/P7+/P7+/P7+/P7+/P7+/P7+/P7+/P3//Pj//Pj//Pv//v7+/v/8///6///5///4///5///6///6+v/9+P//9v//8/3/7//65v/z2//44P/s0+O/p6yCaodZQoVRO5JbRpddSY1TP39GMnU+KXI+KXNAK3REMHZFNHE/NG48M3E8NHRCOXNBOG8/NXFBN3hIPm4+NG0+NG0+NG0+NGw9M2o+M2w9M2o+M2c/NWdBNmdBNmdDN2VDN2NDNmBDNV5ENWJLO1VCMVpJN2BTQFJHM0M7JkU9KEZBK0FFLEJILkFFKjxAJT9CJUxPMl9gQWlqS2BgRG5xVHZ6YWdtU0pPOTQ8JTQ9KD1GMzg+Mjg+NDg+NDg+NDc9Mzc9Mzc9MzY8Mjg+NDg+NDc9Mzc9Mzc9MzY8MjY8MjY8MjU6NDQ5MzQ5MzQ5MzM4MjM4MjM4MjI3MTA1LzA1Ly80Li4zLS0yLCwxKyswKiswKikuKCkuKCkuKCkuKCkuKCovKSswKiwxKzE2MC80LiwxKywxKy80LjY7ND1CPEFIQEBLPT5LOjxJNzhFMzRBLTI/KzNBKjVDLERRPUtYRFFeTVFeTUhUSDxIPDI+NC44Ly00LS00LSwzLGdkVWdkVWhlVmhlVmhlVmhlVmlmV2lmV2lmV2lmV2lmV2lmV2lmV2lmV2lmV2lmV2tlV2tlV2xjWm1kW21kXW1mXG1nW2ppV2ttWGltVmpvWWpzYGh0aG18d4iYmKazub/K0NPc4+vw9vb7//z9//3//v///f/++f7+9v398fr77ff65/T34u7z3OXt1eLoztvgwNfau9bWvNnXwt3Xx97XzeXb2ezg4Pjs8Pvw9v/1+//5/v/6/f/7+//7+//9/P/+/P7+/P7+/P7+/P7+/P7+/P7+/P7+/P7+/P7+/P7+/P7+/P7+/P7+/P7+/P3//Pj//vj//vv//v7+/v/8/v/6///5///4/v/6/f/5/P/5+f/9+v//+P//+Pv/9fz+8P//7f/86f/x3//w3f/v2vHSvbSQenlTPnNJM3VIM3ZJNHpNOH5PO3lMN25BLmU3J3tNQHNEOnFCOHNEOm9DOGc7MGQ4LWc9MWk/M2k/M2k/M2c/M2Y+MmY+MmY+MmU/MmJANGJCNWBDNV9DNV9DNVtENFlEM1dEM1hJNk9CL1xUP29pU2NeSE1LNElHMElLMz5EKj9ILUBGKjxCJjxBI0VKLFhZOmRlRm1tUXh4XHR2XltfRkBDLjY7JThAKzxDMTk/Mzk/NTk/NTg+NDg+NDc9Mzc9Mzc9Mzg+NDg+NDg+NDg+NDg+NDg+NDg+NDg+NDc8Njc8Njc8NjY7NTY7NTY7NTU6NDU6NDM4MjM4MjE2MDA1Ly80Li0yLCwxKywxKyswKiswKiovKSovKSswKiwxKy0yLC0yLDA1Ly4zLSswKiswKi0yLjI3MTg9OTtCOkBLPUBNO0BNOz1KNjhFMTNALDE/KDA+JzxJNUJPO0hVQ0lWRURQQjtHOzI+NC46MCw2Li41Li00LWdkVWdkVWdkVWhlVmhlVmlmV2lmV2lmV2lmV2lmV2lmV2lmV2lmV2lmV2lmV2lmV2tlV2xkV2xjWm1kW21kXW1mXG1nW2ppV2ttWGluV2lxWmdzX2RyZWp5dIWVlaOyt73IztLb4urv9fT5/fv8//3//v///f//+v//+P//8/7/8fv+6/f65fD13ubu1uLozNncv9XVudLQudTRvtrUyODZ0erg3/Tp7f7z+f/3/P/7///9///+///+/P/++v/++v7+/P7+/P7+/P7+/P7+/P7+/P7+/P7+/P7+/P7+/P7+/P7+/P7+/P7+/P7+/P3//vr///r///v///7+/v/9/v/8/P/7/P/7+v/6+P/59//69//9+P//+///+/3/+v3++fn07v/+9v/99P/88//77v/35/vm1enSwM+0obaahZR1YXdWQ2xJNm1INnJNO3VQPm1GN2lCM2dCMmpFNW5JOW5KOm9LO29LO2VBMWNCMWNCMWNCMWNCMWNCMWJDMWBDM11GNlxHNlxHNlpHNlpHNldINVRHNFJHM1BIM05IMmZkTX5+ZnJyWlZYQEpMNEdNMzxFKjxGKz9IK0FHK0FGKENIKk1OL1RVNnh3W3t6Xm5uVlVVPUNCLj9BLD5BLjo+LTs+Mzk/NTk/NTg+NDg+NDc9Mzc9Mzc9Mzg+NDg+NDg+NDg+NDg+NDg+NDg+NDg+NDk+ODk+ODk+ODg9Nzg9Nzg9Nzc8Njc8NjY7NTU6NDQ5MzM4MjI3MTA1Ly80Li80Li0yLi0yLiwxLSswLCswLCwxLS0yLi0yLiwxLSwxLSwxLSwxLS4yMTA1MTM3NjM6MztHOT1MOUBPPEBPOjxLNjdGLzRDLDJBKjZFLjpJNEBPPEJQPz9NPjhGNzE/Mi05LSw2LS00LCwzK2ZjVGZjVGdkVWhlVmhlVmlmV2pnWGpnWGlmV2lmV2lmV2lmV2lmV2lmV2lmV2lmV2xkV2xkV2xjWm1kW21kXW1mXG1nW2ppV2ttWGluV2lxWmdzX2JwY2d4coKUlKOyt8DL0dTd5Ovw9vX6/vv8//3//v///f//+v//+P//9P//8///7/r96PL34Ofw1eLozNfavdHRtc3LtM7LutbPxd7X0ezi4/fu8//2/v/6///9///+/////f7/+v7/+f7/+v7/+v7+/P7+/P7+/P7+/P7+/P7+/P7+/P7+/P7+/P7+/P7+/P7+/P7+/P7+/P7+/v3+//3+//3+//3//v3//P7/+v7/+f//9/398/399f79+P79+f/+/P7+/v/9///+//75///8///7/Pv28//48v/99P/+8f/+7f/66f/z4Pfk0+fSv9S6qbqfjp+Ec49yYnxdS31eTHRVQ2FEMlc6KFk8Kls+LFg9KmBFMmBFMmBFMl9GMmBHM2BHM2BHM11IM1xLN1xNOlxNOllMOVhNOVVNOFJMNlFMNk5MNVFROWlrU3yAZ21xWFNZP0ZMMj5HLDxGKzxGKz9IK0RKLkVKLERHKkhJKkxNLnh3W3RzV2ZkTVRSO0xJNktKNkZFMzw9LTw/NDk/NTk/NTk/NTg+NDg+NDg+NDg+NDc9Mzc9Mzg+NDg+NDg+NDg+NDk/NTk/NTo/OTo/OTo/OTo/OTk+ODk+ODk+ODg9Nzg9Nzg9Nzc8NjY7NTU6NDQ5MzM4MjM4Mi80MC4zLy0yLiwxLSswLCswLCswLCswLCswLCwxLS0xMC4yMS8zMi8zMi8zMi00LTM/MTdGMz1MN0BPOj9ONzxLNDlIMThHMDVELThHMDxLNj5NOjxKOTdFNjE/Mi05LSs1LC00LCwzK2ZjVGZjVGdkVWhlVmhlVmlmV2pnWGpnWGlmV2lmV2lmV2lmV2lmV2lmV2lmV2lmV2xkV2xkV2xjWm1kW21kXW1mXG1nW2ppV2psV2htVmhyWmZzX2NxZGh5c4WXl6W3u8fS2Nrj6vD1+/j9//z9//3//v///f/++f//9f//8v//8Pz/7Pj75u/03eLr0N3jx9XVuc7Ms8nEsMrEtNDJv9rSz+ng4/bt8v/3///6///9///+/////f3/+vz/+Pz/+P3/+v7+/P7+/P7+/P7+/P7+/P7+/P7+/P7+/P7+/P7+/P7+/P7+/P7+/P7+/P7+/v/8///8//79//3//vr/+vj/+fj/9fj/8/j/8/j/9fz/+P3/+v/9/v/8///8///7//33///6///8///9///+//79+/v78/r47P//8f//7///7f/+7f/97f/25//u4P3q2/rj0f/m0OPKtKWPeHReR2VPOGJMNVxIMF5KMlxKMlxKMl1LM11LM15MNF5MNFxNNllOOFdPOlhQO1ZQOlVPOVNOOFBON05ONk1PN1BUO2BmTGZvVFVeQ0VPNEFLMDxGKz9JLj9JLkNML0hOMkhNL0ZJLE9QMVlYOnFtUmpmS2FcRltWQFlUQVRRPk1KOUJDMz1ANTtBNztBNztBNzpANjpANjpANjk/NTg+NDg+NDg+NDk/NTk/NTpANjpANjpANjtAOjtAOjtAOjo/OTo/OTk+ODk+ODk+ODo/OTo/OTk+ODk+ODg9Nzg9Nzc8Njc8NjQ5NTI3MzE2Mi80MC0yLiwxLSsvLisvLiwwLywwLy0xMC4yMS4yMy4yMy0xMisxLSs5Ki9ALTZIMjtNNz1PNzxONDpMMjpMMjVHLzdJMTpMNjxNOjtMOjZHNzBAMy07Liw2LS00LCwzK2NkUmNkUmRlU2VmVGdlVmhmV2lnWGlnWGhmV2lmV2lmV2lmV2lmV2lmV2lmV2tlV2tlV2tlV2xkWWxlW21kXW1mXGtnW2ppV2lrVmhtV2hyWmd0YGRxZ2p7dYmbnaq8wM3Y3uDn7fT5//r///v///3//P7/+v7+9vr67vr77fr76fj65fP24eru19/jytncwdPRuMzHscW+rMa+sczDvNbOy+bd4PTq8v73///6///+//////7+/v3/+vz/+vz/+v3//P7+/P7+/P7+/P7+/P7+/P7+/P7+/P7+/P7+/P7+/P7+/P/+/P/+/P/+/P/9/v/8///8///9//3//vv//Pj/+ff/9/f/9fj/9vn/9vz/+P//+//+/f/8///7///6///6///7///8///+//79//v9/Pz++/7/+vn68vr88f377/767v/57P/77P/97//97P/w2//74uzcw56OdWBQN1JCKVhIL1hILltNM1tNM1pONFpONFtPNVtPNVxQNltROFVPN1RPOVRPOVFPOFBON05ONktNNUlNNEpONUxSOFNcQVBZPEBJLDtGKEFMLj9KLERNMEVOMUpRMk1SNEpNMExMMFlZPWtqTmhkSWJeRV5aQV9aRGBbR1pVQVFPOktKOEFCNEBCNUBCNT5BNj5BNj5BNj1ANz1ANzk/NTk/NTk/NTpANjpANjpCNzpCNzpCNztAOTtAOTtAOjo/ODo/OTk+Nzk+ODk+NztAOjtAOTtAOjtAOTo/OTo/ODo/OTo/OTg/ODc9OTQ7NDM4MjE2MC80Li4zLy4zLy4yMS4yMSwyLiwyLisyKysyKiw0KSk2JSQ2Hik9ITJGKzhMMTtPNjtNNTtNNTtNNThKMjlLMztNNTxONjxOODdINTFCMC48LS03LC41LS00LF1lTl5mT19nUGBoUWRpVWZpVmdqV2lqWGZnVWhnVWhlVmhlVmpkVmtlV2tlWWxmWGxmWGtoWW1nW2tnXG1mXmpmW2llWWdlVmdoVmZrVWVuWWJvXWRxaHODgJaorLjHztLb4uLp7/L3+/f8//j8+/z++fz/9vz+8ff46vn66vj35fLx3e7t2evq1uDfytfSvtfPvMvArr20pb2zqcK3sczCwdvS1+rg6Prz+/z2//77///+//79//z9//z+/fz+/f7+/v7+/v7+/v7+/v7+/v7+/v/+/P/+/P/+/P/+/P79+f79+f/8+f/9+v/++//++//+///9/v/8/f/9/v////7//f3//Pv9+P//+/z99//9+P/++v/9+P/69v/39P/5+f/6///8///9//////////3//P3//vz+/f7////////+/P/++f/+8//+7v/96v/95vr03P/64Ofgxo+IbFVOMldOMVRLLlNKK1dOMVdOMVVOMVVOMVRPMlRPMlRONFNPNFFNMlJONVFPNlBQNk1PN0tPNkhNNkdMNUpQNkZPNEFKLT1GJz5IJkRLKkZNK0VMKlBWNFBUM0tOL0hLLFRUOGJiRmNjSVpaQFtZQFxaQV1bQl1bQltZQFhWPVVTOlNROEhGMUdEMURBMEE/MEA+MT4+Mj8/NT5ANTs+NTk/NTk/NTlBNjlBNDhDNThDNThDNTpCNzlBNjlAODhANTg/NzlBNjlAODpCNzpBOTpCNzlAODpCNztCOjxEOT1EPD5FPThCOjhCOjdBODhANTY+MTQ8LzM5LzI3MS40MC81MS03Ly05LS47KTBAJjZHJzdNJztWKzpXKztVMDtUNDtSOD1QOj5PPD5QOjpMNkBSOEVXPUZZPURYPUBUOzVIMis8KSw2KywzKysyKlpnTVtoTlxoUF1pUWJqU2NrVGZrV2hrWGdoVmdoVmlmV2lmV2tlV2xmWG1lWm1nWW1nWWtoWWtnW2tnXGpmXWpmW2hmWmVmVmhpV2dsVmZvXGVyYWp3bnqKiZyrsrrI0dDZ4OHp7PL3+/j+/vn++vr/+Pv+8/n97/j56/f45vX04u3s2Onm0+Xiz9zXxNLLucq/rcG0pLmtobyvpsG2ssvBwNvQ1ubf5vvz/v33//77///+//79//z9//z9//z9//7+/v7+/v7+/v7+/v7+/v7+/v/+/P/+/P/+/P/+/P/9+v/8+f/8+f/9+v/9+f/++v/+/f/9/P/8/f/9/v/+///+///9/v37/P/+/f/++//8+v/48/jt5/Ll3fbo3/vw6v/6/f/8///9/v///f//+/3//P3//vz9//3+//3+///9///+/P/+9f//7v/+6P//5Pr23f374uTgx4uHbFJNMFNOMFFLK1FLK1VPL1VPL1RPMVRPMVNPMlNPMlFQNFFQNFFNMlBPM1BONU5RNk1PN0pQNkhNNkVNNUhRNkVOMUJLLj9JJ0JJKEZNK0pQLEtRLU5SL1BUMVZaN15iQV9iQ1lcP1RXPFRUPFZWPldVPlhWPVlXPllXPlhXO1ZVOVhUOVFLM09JM0xHNElEMURBMkJAM0E/Mz5ANTw9NTk/NTk/NTlBNjdCNDhDNTdEMzdEMzpCNzlBNjlBNjhANThANTlBNjlBNjpCNzpCNzpCNzpCNzpCNztDODxEOT1FOjxGOz1HPzxIPjxGOztGNjxENTpCMzk/Mzg9Njc+NzQ+NjM9NDA+LTNDKTlNKkJZL0dhMU9wO0xuO0xpPUZhPkJZPzxSPTxNOzpLOD1POURWPEteQk1gQkxgREhcQDpRNzFELis1KisyKikwKFpnTVtoTlxoUF5qUmJqU2RsVWdsWGlsWWlqWGlqWGtoWWtoWWxmWG1nWW5mW25oWm1nWWtoWWtnW2pmW2pmXWllWmhmWmZnV2hpV2VqVGRtWmd0Y298c3+Pjp2ss7bEzc3W3d7m6fH2+vj+/vr+/fn++Pj78vT46vP05vDx3+rp1+HgzNzZxtfUwdDLuMfArr+zo72woLywpMO2rsvAvNXLyuPY3uvk6/z0//33//77///+//79//z9//z9//3//v7+/v7+/v7+/v7+/v7+/v7+/v/+/P/+/P/+/P/+/P/9+v/9+v/8+f/8+f/8+P/8+P/9/P/8+//7/P/8/f/+///+///9/v78/f/+/f/++//9+/zz7urf2eLVzevd1Pfs5v/6/f/8///9/v///f//+/3//P3//vz9//3+//3+///+/////f/+9f/+7f/95//+4/v33v784+PfxomFalBLLlFMLlFLK1FLK1ROLlVPL1RPMVVQMlRQM1NPMlFQNFBPM1FNMk9OMlBONU1QNU1PN0pQNklON0dPN0hRNkZPMkNML0NNK0ZNLEpRL09VMVNZNVFZMldfOGpwSnl/W3F2VlleQEtPNE1QNVFROVFROVJQOVNROFRSOVVUOFlVOlpWO1hSOlZQOlJNOk5JNkhFNkRCNUJAND9BNjw9NTk/NTpANjlBNjdCNDdCNDdEMzdEMzpCNzpCNzlBNjlBNjlBNjlBNjpCNzpCNzpCNzpCNzpCNzpCNztDODxEOT5GOzxGOz9JQT5KQD9JPj5JOT9HOD5GNz5EOD1COz5FPjlDOzZANzRCMTlJL0JWM1BnPVhyQl5/Slt9Slh1SU1oRUNaQDlPOjZHNTRFMjxOOEVXPU5hRVNmSFNnS05iRkBXPTZJMy85Li82Li00LFpnTVtoTlxoUF5qUmJsVGVtVmhtWWluWmtsWmtsWmxqW2xpWm5oWm5oWm9nXG9pW2xpWmtoWWpmWmpmW2llXGllWmhmWmZnV2ZnVWJnUWFqV2VyYW98c36OjZalrKu5wsfQ19rh5+7z9/b8/Pj8+/X69PP27e7y5Onq3OPk0tzbydPSvs7LuMnGs8O+q722pMO3p8e5rM3BtdbJwd/U0Oje3fPo7vjx+P31//74///8//79//38//z9//z+/f3//v7+/v7+/v7+/v7+/v7+/v7+/v/+/P/+/P79+//+/P/9+v/9+v/9+v/8+f/79//79//9/P/8+/76+//7/P/9/v/+///9/v78/f/8+//++//9+/307+3i3ObZ0fDi2fzx6//6/f/8///9/v///f//+/3/+v3//vz9//3+//3+///+/////f/+9f/+7f/85v/84f754//+5+TfyYqGbVBKMFJNMFNML1NNLVROLlVPL1VQMlVQMlRQM1NPMlBPM09OMlBMMU5NMU9NNExPNExONkpQNkpPOEhQOEpTOEdQM0dQM0lTMU1UM09WNFZcOFxkPWdySHSBVYeSaJCbc4WPbG51VFphQlJWO0xONk5ONk1NNU5MNU9NNlJQN1dTOllVPFpUPlhSPFRPPFFMOUtIOUdFOEVDN0BCNz0+NjpANjpANjlBNjdCNDdCNDZDMjZDMjtDODpCNzlBNjlBNjlBNjlBNjpCNztDODtDODpCNzpCNztDODtDOD1FOj5GOz1HPD1HPzxIPj5IPT5JOT9HOD5GNz5EOD1COz1EPTlDOzZANzRCMTlJL0RYNVJpP1t1RVp7Rld5RlRxRUlkQT1UOjJIMy9ALi0+KzZIMkBSOExfQ1JlR1NnS09jR0BXPTZJMzE7MDA3Ly00LFlnTVpoTlxoUF5qUmJsVGVtVmluWmpvW21uXGxtW21rXG1qW25oWm5oWm9pXW9pW2xpWmtoWWpmWmllWmllXGllWmlnW2doWGdoVmNoUmFqV2VyYW98c3uLipCfpqKwucHL1NTd5Onx9PL6/PT6+PH28O3w5+js3uLj1drbydLRv8zJtsnEscO+q7+4pryzosq+rtPFuNzQxObZ0e3i4Pbs7f/0+v/5///3///6///8//79//38//v8/vz+/f7///7+/v7+/v7+/v7+/v7+/v7+/v/+/P/+/P79+/79+//9+v/9+v/9+v/8+f/69v759f/9/P/7+v35+v76+/78/f/9/v/+///9/v/8+//9+v/8+v/48/fs5vLl3fjq4f/07v/6/f/8///9/v///f//+/3/+v3//vz9//z9//3+///+/////f/+9f/97P/74/763//85v//6efizIyIb1JMMlRPMlRNMFVOMVROLlVPL1ZRM1ZRM1VRNFNPMk9OMk5NMVBMMU5NMU5MM0tOM0xONktRN0tQOUpSOkxVOklSNUpTNk9ZN1NaOVRbOV1jP2ZuR4KSY5Kmc5+xgZuqf5KheoiUcHJ7XFxiRkxQN0tNNUxLNkxKNUxKNVBLNVROOFZQOldRO1ZQOlNOO1FMOUxJOklHOkdFOUNFOj0+NjpANjpANjlBNjdCNDdCNDZDMjZDMjtDODtDODpCNzlBNjlBNjpCNztDODtDODtDODtDODtDODtDODxEOT1FOj5GOz1HPD1HPzxIPj1HPD1IOD5GNz1FNj1DNz1COzpBOjdBOTU/NjRCMTlJL0JWM05lO1VvP1R1QFJ0QVBtQUVgPTlQNi1DLis8Kis8KTFDLTxONEhbP1BjRVJmSk5iRkBXPTVIMiw2KysyKicuJgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RpbWdmc3QuanBnIGIvdGVzdGltZ2ZzdC5qcGcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTU4NjA0NwotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RpbWdmc3QuanBnCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3Rlc3RpbWdmc3QucHBtIGIvdGVzdGltZ2ZzdC5wcG0KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTE1OGJkMQotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RpbWdmc3QucHBtCkBAIC0wLDAgKzEsNCBAQAorUDYKKzIyNyAxNDkKKzI1NQorMC8rMC8rMC8rMTAsMjEtMzIuNTItNjMuODMvODMvODMtODMtOjMtOjMtOjMrOjMrNzIuNzIuNjEtNjEtNjEtNjEtNzIuNzIuNTAsNTAsNTAsNTAsNTAsNTAsNTAsNTAsNC8rMy4qMy4qMy4qMi0pMi0pMi0pMi0pMSwoMSwoMSwoMSwoMSwoMSwoMSwoMSwoLiskLiskLywlMC0mMS4nMi8oMi8oMzApNTIrNjMsNjMsNzQtODUuOTYvOTYvOjcuQDouQTstQz0vRkAyR0EzSUM1SkMzSkMzTEUzTEUzTEMyTEMyTEQxTUUyUEUzUUQzUD8vVj8vYEAxbUMzfUU2ikc3mEc2okU0r0g5tkY4vkY4wkY6xkg8yEg9ykc/0EVA5UZL60RM60RL60VJ7UJI7kFD8T5C8zxA9Ts+9Do98zk+7js+6D4/30A91j47ykA2uz0utD8rtD8rtD8rsj8ssj8ssEAsr0AsrUAsqUArpUAsoUErnUEqmUEpmEAolUEpkkArkD8skT4skT4skD0rkD0rkD4pkD4pkz4qkz4qkz4qkz4qlD0plT4qlj8rlT8ulEA1kz81lz0ynj4wqEEws0QxuUQyvUQxtz8vs0IyqkY3nEk7hkg5bUIyVDkoQzMmPDUvOTU0ODQzNzMyNjIvNTEuNDAtMy8sNjMuNTItNTItNTItNDEsNDEsNDEsMTArLS8qKzAqLS8qLS8qLi8qLi8qMS0qMS0qMi0qMSwpMykoMignNSkpOi4uRDY2Tzo5aUFCfElIi05NlFBPnlZZqWNrqG+AnHSOknyihX+rf4a6fIi8cnqrXmGOVEt2T0VoUklmTUheS0hbU1FfZGRue3yBjZGQmJ2XoqieoaeZnaGSjpKBentpZWZUWFdFUU5FVFFaVFBhVFBhLy4qLy4qMC8rMTAsMjEtMjEtNTItNTItNzIuNzIuNzIsNzIsOTIsOTIsOTIqOTIqNzIuNjEtNjEtNTAsNTAsNjEtNjEtNzIuNjEtNjEtNjEtNjEtNjEtNjEtNjEtNjEtMy4qMy4qMy4qMy4qMi0pMi0pMi0pMSwoMi0pMi0pMi0pMi0pMi0pMi0pMi0pMi0pLywlLywlMC0mMS4nMi8oMi8oMzApMzApNTIrNjMsNjMsNzQtODUuOTYvOTYvOTYtQDouQTstQz0vRT8xRkAySEI0SUIySUIySkMzSkMxS0IxSkEwS0MwTEQxT0QyUEMyTz8vVUAvXUAwaUIxd0QzhEU0kUQ0m0IypkIyrEExs0I0ukI0vkQ3wUU5xUY9ykM930VH50JI6ENJ6kRI7ENG70JE80BD9T5C9jw/9zo+8zo/7zw/5z8/3kA91D87yUA2uD0ts0ArtD8rsj8qsj8ssEAsrz8rrj8rrD8rqUArpUAsoUErnUEqmEAol0EolUEpkT8qkD8skT4skT4skD0rkD0rkD4pjz0okz4qkz4qkj0pkj0pkz4plT4qlT4qlT8ulEA1kz81lz0ynz8xq0Exs0QxvEQzvUQzukAxtEM1q0c4mkg6gkc5akAwUzkqQTMmPTYwOjY1OTU0ODQzNzMwNTEuNTEuNDAtNjMuNTItNTItNTItNDEsNDEsNDEsMTArLjArLDErLjArLjArLzArLzArMC8rMi4rMy4rMi0qMyspMykoNSkpOS0tQTU1TTg3ZD49dkVBhktHjk1LmVNTo2Bnomx8mnKMj3ughX+tfoW5eYS6bXSoWlyMUEl1TkRpTkVkTUhfTklfUE1eWlpmbW5zg4eIk5iSmJ2WmZ+TmJyNjZGAfH9uaWpYXVxKVVJJVVJZVVFgVVFgLi4sLi4sMC8rMC8rMTAsMjEtNDEsNTItNTItNTItNjErNjErNjErNjErODEpODEpNjEtNjEtNTAsNC8rNC8rNTAsNjEtNjEtNjEtNjEtNjEtNjEtNjEtNjEtNjEtNjEtMy4qMy4qMy4qMi0pMi0pMi0pMSwoMSwoMy4qMy4qMy4qMy4qMy4qMy4qMy4qMy4qMS4nMS4nMS4nMi8oMzApMzApNDEqNDEqNTIrNTIrNjMsNzQtNzQtODUuOTYvOTYtPzguQDouQjwwRD4yRT8xRkAyRz8ySEExSEExSEExSD8uSD8uSUAvSkEwTUExTUExTEAwUUExWUIyYkMxbkMye0Myh0IykUAvlzwqnzsrpjwsrj4ws0I0uEQ3vEY6xEQ710ND30BE4kFG5kNG6UNF70JE9EFE+EBC+Ds/9zo+9Dw+7z095kE/3EE80EA4xUE1tj4tsUEtsj8ssEAssEAsrz8rrz4srUAsqj8rpkAqo0Arn0Aqm0EpmEAolkAplUArkT8qkD8skD8sjz4rjz4rjz4rjzwqjzwqkD4pkD4pkD4pkD4pkD4pkz4qlD8rlT8ulEEzkz80mD8xoUAwrUIyt0QyvkMzwEIzvkQ1uEc5q0k8mUo9gEY6ZkExUDosQjYqPzgyPDc0OzYzOjUyOTQxODMwNjIvNTEuNjMuNTItMzItMzItMjEsMjEsMjEsMDErLjArLDErLDErLDErLjArLzArMC8rMC8rMy8sNC8sNS0rMyspNCopNy0sPTMyRzUzWzo1a0A5e0Y+hUpCj09Nl1tdmWdzkm+HiXicgX6re4K4c362Zm2jVFaJTUV2TEFrS0FjT0ZhT0phTElcTEtZWlpkcXV4hImFhYyFiZGGipCChYl6d3lrZmlYWltLU1NJWVRaWVNfWVNfLS0rLS0rLy4qMC8rMC8rMTAsNDEsNDEsNDEsNDEsNTAqNTAqNTAqNTAqNzAoNzAqNTAsNC8rNC8rMy4qMy4qNC8rNC8rNTAsNTAsNTAsNTAsNTAsNTAsNTAsNTAsNTAsMy4qMy4qMi0pMi0pMi0pMSwoMSwoMSwoNC8rNC8rNC8rNC8rNC8rNC8rNC8rNC8rMi8oMi8oMzApMzApNDEqNDEqNTIrNTIrNTIrNTIrNjMsNjMsNzQtODUuODUuOTYtPTYsPjgsQDouQjwwQz0vRD4wRT0wRT0wRT4uRT4uRj0uRj0sRz4tSD8uSz8vSkEwS0QyTUQzVUQyXUQwZ0QxckMvfEEvhj8tizonkTgmmjkooj0rqkAwsEU1tkg5v0Y70kRC2kFD3UND4UNC50NC7EJC8kBA9j5A+Ds/9zo+9Dw+7T8+5UE/2UI7y0E3vz8ysz4sr0Asrz8rrj8rrz8rrT4qrT4rrD8rqD8qpT8po0Arnj8pmkAolkAnlEAokkAqkD8qkD8sjz4rjz4rjz4rjj0qjzwqjzwqkD4pjz0ojz0ojz0ojzwqkD4pkT4skj8tk0EzlkAzmz8wpEAxsEIzu0M1wUM1wUM1wEY5uUk9rExAl0s+e0c6YEAzTDosPzcqQDkzPTg1PDc0OzYzOjUyOTQxNzMwNjIvNjMuMzItMzItMzItMjEsMTIsMjEsMDErLDErLDErLDErLDErLjArLjArLzArMC8rMjEtNDAtNC8sNCwqMyspNS0rOTEvQTIvUjcuYjwxcEI1eUU6gklCiFJSi2BqiWmAgnKXfHmod361bXeyX2WfUVKKTEV5TEBwTEBmT0RkT0ZjSURbRkNWTExYW15jaW1uc3l1d352eX91dHpsa29hX2FTVlhKU1NJW1dYW1ZcXFVcLCwqLCwqLS0rLi4sMC8rMC8rMTAsMTAsMzArMzArMzArMzArNC8pNC8pNC8pNC8pNC8rMy4rMy4rMi0qMi0qMy4rMy4rNC8sNC8sNC8sNC8sNC8sNC8sNC8sNC8sNC8sMi0qMi0qMi0qMi0qMSwpMSwpMCsoMCsoNC8sNC8sNC8sNC8sNC8sNC8sNC8sNC8rMzApMzApMzApNDEqNDEqNDEqNTIrNTIrNDEqNTIrNTIrNjMsNzQtODUuODUuODUsPDUrPTYsPjgsQDouQTsvQTsvQzsuQzsuQzsuQzwsRDssRDssRTwtRz4vSj4wSUAxSkc2Skc0UEg1V0YyYEUyakQvdEEufD8sgjsniDomkTonmT4roUIwqkY2sEo7uko+ykZB00NC2ERC3ERB4kNA6EA/7z098zs7+Do89zs88z086z894EM+00M6xEAzuUAvrz8rrUArrj8srD8rrT4rrD8rqz0sqT4spT4rpD8roD8snEArmEAqlT8olD8qkT8pjz4pjz4rjz4rjz4rjj0qjj0qjTwpjTwpjj0qjj0qjTwpjTwpjj0sjj0qjz4tkD8ulEMylkAxnUAxqEEytEM1vUM2wkI3wkI3vEM6tEg+pUtCkEpAdEU7WT8yRTkrOjYqPjkzPzc0Pzc0PTUyOjUxOTQwNzQvNzQvNDMuMzItMzItMjMtMTIsMDMsMTIsLzIrLTIsLDMsLDMsLDMsLTIsLzEsLzEsMDEsMTItMzIuNDAtMy4rMi0qMi0qNTAtOzAsTTcsVzosYz0wbEAzckM5eEtIf1pigWh+fm+WeXepdHq2anO0XGSjU1WSTUeDS0F2TkFtTkJmS0FjR0FdRUJXRkVVSUxVTVBVXWNhYGdgYWhgYGZcWV9TVlpMVVlLVlhNXFlUXVdXX1ZXKyspLCwqLCwqLS0rLy4qMC8rMC8rMC8rMi8qMi8qMi8qMi8qMy4oMy4oMy4oMy4qMy4rMi0qMSwpMSwpMSwpMSwpMi0qMy4rMi0qMi0qMi0qMi0qMi0qMi0qMi0qMi0qMi0qMi0qMi0qMSwpMSwpMCsoMCsoMCsoMy4rMy4rMy4rMy4rMy4rMy4rMy4rMy4rMzArMzApNDEqNDEqNDEqNDEqNDEqNDEqNDEqNDEqNTIrNjMsNjMsNzQtODUuODUuOzQsOzQqPTYsPjgsPzktPzktQDgtQDgrQjotQjotQzktQzorRDssRj0uST0vR0AwSUg2SUg2TUg1U0YzW0QyZEMwbEEucz8qezwqgjsniTsnkj0pmkEvoUYzqks5sks8w0hAzEU/0EVA1UU93UQ/5EE86z088Ts69jo79Do78Dw750A62kM8y0M3u0AwsT4rrD8qqj8rqj8rqj8rqT4qqT4qqD0rpz4roz4qoj8qnj8rmz8qlz8plD8qkT8pjz4pjz4rjz4rjz4rjj0qjj0qiz0pjTwpiz0pjTwpizwrijsqijsqizwrjD0sjT4vjT4tkkMyl0EwoEAwq0EzuEI2v0M3w0M6wUI5uEE5r0g/oU9EjE5Db0c9U0AyQDouNzcrPjkzPzc0PjYzPTUyOjUxOTQwNzQvNzQvNDMuMjMtMjMtMTQtMDMsMDMsMDMsLTIrLDMsLDMsLDMsLDMsLTIsLTIsLzEsLzEsMDEsMTItMzIuMTAsMS0qMS0qMi4rOC8qRjUrTTUpVjkrYDwuZT82akdDd1ljgWuCf3Sce3uvd3y8bHW6YmmvW1yfUk2PTEN8TUFvSz9lSD5hRj9eRkJbRURWP0FOO0BGQkdKRE1ISVBJSlFJSVFGSlJFTlZJVVhNXlpRYFlRYFlTKiwrKiwrLCwqLCwqLS0rLi4sMC8rMC8rLy4qLy4qMS4pMS4pMS4pMS4pMi0pMi0pMS0qMCwpMCwpLysoLysoMCwpMCwpMS0qLysoLysoLysoLysoLysoLysoLysoLysoMS0qMS0qMCwpMCwpLysoLysoLysoLysoMS0qMS0qMS0qMS0qMS0qMS0qMS0qMS0qMzArMzArMzArMzArMzArMzArMzArMzArNDEsNDEsNDEsNTItNjMuNzQvNzQvODUuOTIqOjMrOzQsPTYsPTYsPjctPjUsPjYrQTkuQTksQjgsQzktRDouRjwwSj4ySEAzRkQ1R0Y0S0YzUEUzVkMyXUIvZUAubD0rdT0sfDspgjkoiTopkz0smUIvoUY0qkY3uUc8wUU7x0c+z0Y82EU+4EM86UA97z078jo68Do56zw540A51kM7xUM1tEEuqD4oqUArp0AtqD8sqD8sqD8spT4rpT4tpD8toj8snz4rnD8tmT4rlT4qkz4qkD4pjz4pjz4rjT4tjD0sjD0sizwrij0rizwrij0rizwriTwsiTwsiTwsiTwsij0tiz0wjD8vkkMyl0EwoUExrEI1uUM5wEQ6w0I8v0M7uEc/r1FJo1lQjlpPcFJHVkg7QkI2PD80PDkwPjcxPjcxPDUvOTQuODMtNjMsNjMsNDMuMjMtMjMtMTQtMDMsLjMsLjMsLDMrLDMsLDMsLDMsLDMsLDMsLDMsLTIsLTIsLjArMTItMjMuMTItMC8rLy4qMC8rNC8rPjErQzEnSzMnUzksWTw0Y0dEc11pg3ONh4Cqg4S8foPHc3vEa3G7Y2WvVlOaSUOBSz9vST1lRjxhRT5dRUFaRENVPkJOOD9FOkJEPUhERE1IRlBHR1FGSFJHTFZLVVhNXlpOYVlMYVlOKSsqKiwrKyspLCwqLS0rLi4sLy4sMC8rLi0pLi0pMC0oMC0oMC0oMC0oMSwoMC0oMCwpMCwpLysoLysoLysoLysoMCwpMCwpLionLionLionLionLionLionLionLionMS0qMCwpMCwpMCwpLysoLysoLysoLionMCwpMCwpMCwpMCwpMCwpMCwpMCwpMCwpMy8sMzArMzArMi8qMi8qMi8qMi8qMi8qMzArNDEsNDEsNTItNjMuNzQvNzQvODUwOTIsOjMrOzQsPDUtPDUtPTYsPTQrPTQrQTgvQTkuQjguQzktRDouRjwwSj4yST8zRUIzRkM0SkMzTkIyU0IyWkAxYD8wZzwscDwudToqfDkphDgojDsqlD4tmkMyo0MzsUc6t0U6v0Y7yEg90kg+3UY/50Q/7UE96zw56js45z453kE6z0U6v0Q0rkEsoj4npUAspEEspUAspUAspD8rpD8rpD8toj8soD8snj8tmj8slz8rlD8rkT8qjz4pjD4qjT4tjD0sjD0siz4sij0rij0rij0riD0qiTwsiDwsiDwshTwthj0uhz4viD4xij4wkUQylkMxoUEzrUM2ukM7v0Q9wEM9ukU+t1BJsFxSpGZbkGZadV9SW1VHR00/Qko9OzgvPjcvPTYuOjUvOTQuNzQtNjMsMzMrMzQuMjMtMTQtMTQtLjMsLjMsLTQsLDMrLTQtLTQtLTQtLTQtLTQtLTQtLjMtLjMtLS8qLzEsMjMuMTItLzArLi8qLy4qMi4rNy0rOiwpQjEpSjYtUT02XUlIc2NuhXuUjYq1iozFhInNeX/LcXfDaGy2V1efSESBRT1sRT1iRD1fQj9cQkBWQENUPkRQPUZLR1FSS1dTUV5VU2BWUmBTUl5SU19TWV9RXVpJYFlHYFlHKy0sKy0sKy0sKy0sKy0sKy0qLCwqLCwqLy4qLi0pLi0pLi0pLywnLywnLywnLywnLionLCspLCspLSwqLSwqLSwqLSwqLSwqLSwqLSwqLSwqLSwqLSwqLSwqLSwqLSwqLCspLCspLSwqLSwqLi0rLi0rLy4sLy4sLy4sLy4sLy4sLy4sLi0rLi0rLi0rLi0pLysoMCwpMS0qMi4rMy8sMy8sMi4rMi4rMi4rMi4rMi4rMy8sMy8sNTEuNjIvNzQvNzAqODErOTIsOzQsPDUtPDUtPTQtPTQrPjUsPjUsPzUsQDYsQTctQzkvRzoxRjwyRz80Rz8yST8zTT8yUj4zVz0wWzktYTcpazoscjgqezkrgzksijsskT4ulj4wmz4vpkIzrEI0s0M1vkY4yUc600Y83UQ+5UM+6EA96UE+5UM+2UQ9yEQ3tkMxp0EroUEroUEroUAtoD8snz4roT4rnz4rnz4tnj8tnD0rmTwrlj0rlD0qkD0rjj0qjj0qjD4qizwriTwqiTwqiTwqiDsrhzsrhzsrhTwriDwuhj0uhj0uhT0vhj4wiEAyiUE1ikI0kEQ0lUQxo0Y3sUk+uUY/ukM9ukU+uE1FtFpRrWddoXFjkHRmfXFjaWtdVF9RR1JETExCSUU6Qj4zOzgvODUsNzQrNjMqMzMpMzQsMzQsMTQtMDMsLTIsLDErLDErLDErLTIsLTIsLTIsLTIsLTIsLTIsLTIsLTIsMDItMDItMDItMDItMTItMTItMTItMjEvNCsuOi8zQTMyQjUvSDs1Wk5Od214ioWckpG7k5bNkJXXg4nTdHrEZ260XmOlWluUTEpyRkNiQD1aPT9WP0JVQUlUSlVbU2FiYXBtbn12dYV7cIB1aXlsZ3VoXmxdV2BPXVxIYVtFYlxGLC4tLC4tLC4tLC4tLC4tLC4tLS0rLS0rLi0rLi0pLi0pLSwoLywnLywnLismLionLCspLCspLCspLCspLCspLCspLCspLCspLCspLCspLCspLCspLCspLCspLCspLCspLCspLCspLSwqLSwqLSwqLi0rLi0rLi0rLy4sLi0rLi0rLi0rLi0rLi0rLi0rLi0rLysoMCwpMS0qMi4rMi4rMi4rMi4rMi4rMi4rMS0qMS0qMi4rMi4rNDAtNTEuNjIvNy8sODErOjMtOzQuPDUvPDUtPTQtPTQtPjUuPjUsPzUsQDYtQTcuQzkvRjkwRzoxRz0zSD40Sz41TD4zUT00VDwyWTgvXTcsZzgubTcrdzctgDgsiDotjzwulT0xmT0woUEzpUEyqkM0skQ1vUU3yEY50kU82UQ93kM+30Q/3kdA00Y9wUY3sUMyo0MtnUItnkItnUEsnEArmz8qnT4qnT4snj8tnD8tmTwrmD0rlD0qkz4qjz4rjD4qjD4qij0piTwqiTwqiTwqhzwphzsrhTwrhDsqhDsshTwthDwuhDwugz0xhD4yhEAzhkI3iEM0kUg5lUY1oUg6r0pAuElCt0hBtktFslRMr2VaqHNlnn1sj39vfXtsbHRlWmZYTVlLS01ASkg8RUM3Pj4yPToxNzctNDQqMTEnMjMrMTIqMDMsLzIrLjArLDErLjArLDErLjArLDErLjArLDErLjArLDErLjArLjArLzEsLzEsLzEsLzEsMDEsMDEsMDEsMTAuMyw0OC42PDIzPjQyR0A6W1ZTdnN6ioidkJO2k5fHkJbShIzNeILAcHq3anOqZ2+dXF9+WFpxUVZpUVhoVF5oWWZsZXV1cYF+c4d+fZGFgZaHfI6AdYd3cIFxZHVlWmZSWllEX1k/YVtDKi4vKi4vKi4vKi4vLC4tLC4tLC4tLC4rLCwqLCwqLSwoLSwoLCsnLCsnLCsnKyomKyooKyooKyooKyooKyooKyooKyooKyooLCspLCspLCspLCspLCspLCspLCspLCspLCspLCspLCspLSwqLSwqLSwqLSwqLi0rLi0rLi0rLi0rLi0rLi0rLi0rLi0rLi0rLysoMCwpMS0qMS0qMi4rMi4rMS0qMS0qMCwpMCwpMCwpMCwpMS0qMy8sNDAtNTEuODAtOTEuOjIvOzMwPDQxPDUvPTQvPTQtPTQtPTQtPjMtPzUsQDYtQjgvRTgwRjkxSDszSDszSTw0TTw0Tjs0Ujk0VTgyWzYuYjcwaDYtcjYsezcshTksjTsvkjwvlj0vnEAznUAxoUEzp0EzsEI1uUM3xEQ5zEM51EU91kc/00k/y0g+vEY4rUMzn0MumUEtnEEum0Atm0Atmj8smj0rmj0smz4tmj8tmDwtlTwskz0skD0rjj0sjD0sij0riT4riD0qiD0qhzwphzwphzsrhDsqhDssgzssgzstgTsvgjwwgT0ygz80hEI2hUI5h0M2k0s9lkk5oEg8q0pBsktEsUtGsVRNrV9VrHJkpoFvnYx4j456gYp3coBvY3FiV2NVS1JCS00/R0k7Q0U3Pz8zOTsuMzUqLzEmMDEpLzAoLzAqLi8pLi8qLS8qLi8qLjArLzArLjArLzArLjArLzArLjArLzArLzArMDEsMDEsMDEsMDEsMDEsMDEsMDEsMS8wNCw3Niw3OC8yOzYySEU+XV5WeHl7iY2YjpSuj5e8jZXEhI7BfYm5e4q1fIywfIuofImad4SNcX6Gbn2AbH5+boN+eI2EgpqNiqKSj6iVj6aSh5yJgJWCeo16antpXGhSV1c/XFg7X1tAKi4vKi4vKi4vKi4vLC4tLC4tLC4tLC4tLCwqLCwqLSwoLCsnLCsnLCsnKyomKyomKyooKyooKyooKyooKiknKiknKiknKiknLCspLCspLCspLCspLCspLCspLCspLCspLCspLCspLCspLCspLCspLCspLCspLCspLSwqLSwqLSwqLi0rLi0rLi0rLi0rLi0rLysqLysoMCwpMS0qMS0qMCwpMCwpLysoLysoLysoLysoLysoMCwpMS0qMy8sMy8sODAuOTEuOjIvOzMwPDQxPDQxPDMuPDMuPTQvPDMsPTIsPjMtPzQuQDYtQzYuRDcvRjkzRjkzRzo0STozTDo2TTgzUDcyVDUwXTYvYzcubDUudjgtfzkviTsvjz0xkz0wmEA0mUAymD8xnUAxpEAxrUE0t0M2vkQ3x0c8ykc9yUk+wkg9tkY4qEIznEEvl0AtmEEtl0Aslj8rlj4qlj0rlj0rmT4slz4slTwslD0skD0rjj0qjD0sij0riD0qiD0qhzwphzwphjsohDsohDsqgjspgjorgDssgDoufzsugDwxgD4ygj82gkI4hEQ6hUU7kUs/lUk8nEg+pUtDq0xGrFJKq11TqWtep4FuoI54mpqCjpqChJaAeIt3bHppYW5dUltITlVDSk4/REg5P0M1Oj4wNTcsMTMoLzAoLi8nLS4oLC0nLC0oLi0pLy4qMC8rLy4qLi8qLy4qLi8qLy4qLi8qLy4qLi8qLzArLzArLzArLzArLzArLzArLzArMC4vNS04NSs2My0vOTYxSEo9YWVXeYB4iJGQjJShjJavipWzg5CwgJGthZmxjKOzkKmwk6ipj6Ohi6Cbh56WgJqNfZiJgJ2Lh6SOk7GZlrKZk62Ui6OLhJyEfJJ7aXxmWGZPU1Y7WFc5XVk8Ky8wKy8wKy8wKy8wKy8wKy8wLS8uLS8uLS0rLCwqLCwqLCwqLCsnLCsnLCsnLCsnKyspKioqKioqKioqKSkpKSkpKCgoKCgoKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKysrKysrLCwsLCwsLS0tLS0tLS0tLy4sLysqLysqMCwrMCwrMCwrLysqLysqLiopLysqLysqLysqLysqMCwrMS0sMi4tMy8sOTEvOTEvOjIwOzMxOzMwOzMwPDIwOzItPDMuPDMuPTIuPTIsPTIsPzQuQjUvQzYwQjczQjczQzg0RDkzRzk2RzgzSjcxTTYwVjgwXTcuZzYvcTgtejowhDwwiz0wkD4ylj81lj81lT8ylz8xnEAxokIyq0Q1skQ1uUU4vEY6vkg8uUc8r0U4o0IymUAwlT8ulkEtlUAslD8rlD0qlD0slD0slTwslT4tkzstkjwtjzwsjj0sizwtiTwshzsrhTwrhjsohjsohDsqgzopgzorgjorgTkrfzorfzsufjwwfzwzfz81gUE4g0Q7hUY9hkc+j0tAkUk9mEg/oEtEp1BJqFhRp2dbpHZmoY11mZl9lKOGi6SHhJyCfJJ9c4JvanVkWmZSVV5JTFVCRE06PkU1OUAwNzstNDcsMDEpLzAoLi0oLCsmLCsnLysoMCwrMS0sMCwpLi0pMCwpLi0pMCwpLi0pMCwpLi0pLy4qLy4qLy4qLy4qLy4qLy4qLy4qMS0uNy04NSkzMSwpNjYqR0w4X2lRd4NthpKEi5eTjZqgi5mkhpehh5yhj6mombmuoMCxmLeol7ammLelmLijkLKaiauSiauQjrGTkrOUkrOUj6yOiKKFg5uBe5J4Z3tiVGJJUFQ5VFU2WFc5Ky8wKy8wKy8wKy8wKy8wKy8wLS8uLS8uLi4sLS0rLS0rLS0rLSwoLSwoLSwoLSwoLCwsLCwsKysrKioqKioqKSkpKCgoKCgoKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKSkpKSkpKSkpKSkpKCgoKioqKioqKysrLCwsLCwsLS0tLi4uLi4uLiopLysqLysqLysqLysqLiopLSkoLSkoLysqLysqLysqLysqMCwrMS0sMy8uMy8uOjIwOjIwOzMxOzMxOzMwOzMwOzEvOzEvOzItOzItPDEtPDEtPDErPTIsQDMtPzQuPzYxPjcxPzgyQDkzQjk0Qjk0RDcxRzYvTzYvVjUsXjYsaTcsdDoufjwuhT0viz0wkz81kj40kj4zk0AylEExmUIxn0QypEMyqkM0r0M2s0U4r0U4qUM3oEAymD8xlT8wk0AukkArkz4qkj0pkzwrkzwrkzwrkz0skTssjzwsjj0sizwriTwshzsrhTwrhDsqhTonhTongzopgzopgTkqgTkqfjkqfTksfjwwfT0xfj40f0E2gkM6g0c9hUlBiUpDjUpBjUc9l0hDn09IplVRpmBYpnFjooNvm5V7lKGDjqmIhaaHgZ+DfpZ+eId0cHxoY29ZW2lSUF1JR1M/QEs6PEU0OT8xOT0vMjQpMDEpLy4pLismLSkmLyonMSsrMiwsMCsoLysoMCsoLysoLysoLysoLysoLysoMCwpLi0pLi0pLi0pLi0pLi0pLi0pMSstNio0NCkxMSwmNTYmQ0wvWmhFc4JhhJJ4jZyJj5+Uj56Xip6ViqWWlbWeocalp8+sosmspcmvpMuuocipl7+di7OQh6+KjbOOjLKLjrKMjKuJg6F/fpl6do9yY3dcUGBFTFI2UVIzUVIzKy8yKy8yKy8wKy8wKy8wKy8wLS8uLS8uLjAvLjAvLi4sLi4sLi4sLS0rLi0pLi0pLS0tLS0tLCwsKysrKioqKioqKSkpKSkpKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKSkpKSkpKSkpKCgoKCgoKCgoKSkpKioqKioqKysrLCwsLS0tLi4uLi4uLiopLiopLysqLysqLiopLSkoLCgnLCgnMCwrMCwrMCwrMCwrMS0sMi4tMy8uNDAvOjEyOjEyOzMxOzMxOzMxOzMxOzEvOzEvOzEvOzEvOzAsOzAsOzAsPDEtPzIsPjMtPDUvOzYwOzgzPDk0PDk0PTgyPzgyQDUvRzQtTjMqVzUrYjYrbTgqeDorfzwshTwtjz0ykDwyjj4zj0AzkEEykUIxlUIwmUAunj4upT8xqUE0qUM3o0E0nD4ylj4ylD4vkj8tkD8qkD0rjzwqkTsqkTsqkTsskjwtkTssjzwsjTstijssiDsrhzsrhDsqhDsqgzongzongjkogjkogTkqgDgpfjkqfTksfz0xfj4yfz81gEE4g0Q9hUlBh0pFiU1FikpBjkhAlUpFoVROp1xXqWlgp3xso455l5x+j6eFh62IgKmHfqGDfph9fYp2d4BtaXdgYnJYWGdQT11GSFRAQ0w7PkQ2PEAyNTcsMzQsMC8qLywnLikmMSknMikqMyorMiooMCsoMiooMCsoMCsoMCsoMCsoLysoMCwpMCwpMCwpMCwpMCwpMCwpMCwpMSsrNikyNSktMS0iNDYgP0kmVWQ5b4BUgJJqi5x8jqCGj6GLiqGHi6mHlLeNnsmUotGbptOqpdGtpNCsnsukkL2Ugq+EgayBhbCDha6CirGFiKuDf596eZRzcIlpX3NXTV1CSU8zSk0wSUwvLDAxLDAvLDAvLDAvLDAvLjAvLjAtLjAtLzEuMDAuLzArLzArMC8rLy4qLy4qLy4qLy4sLy4sLi0rLSwqLCspKykqKykqKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkrKSkpKyksKykqKigrKigpKScoKCgoKCYnJycnKSkpKSkpKioqKyspLCwqLS0rLi4sLi4sLCspLCspLSwqLysqLiopLSkoLCgnKycmMCwpMCwpMCwpMSwpMi0qNC8sNTAtNjEuOjIwOzMxOzMwOzMwOzMwOzMwOzEvOjAuOzEvOjAuOzAsOzAsOzAsOzAsPjAtPTIsPTQtPDUtOjcwOTkxODkxODkxOTkxPjcvQDEqSTApUjEoXDQqZjYqbzosdDwtejwthj4yiT0wiz8yjEAyjkExj0AxkUAvkz0slj0tnD8wn0IzoEM0nUE0mUAylT8wkj8vkz0skz0skD0tjj0sjTwrjD0sjD0sjD0sjD0uizwtij0tiTwshzsrhjoqhDsqgzopgToofzoqfzoqfjsqfTopfDoqfDoseTorfj4yfj4ygEA2gUI5gkY8hUpCh05Fik9HiklDjUhDkk9JmFxUnGhdnHVmnYh1nZmAk6KFjKqIiK2LgamHfqGDfZp+eY94c4duZ35iYXpcWnFVVGZMTVxFRlI+QEk4PUEzNzkuNTUtNC8rMCsoMCgmMScoMykqMyorLykpLionLiopLiopLykpLykpLykpLykpMCoqMCoqMCoqMCoqLysqLysqLysqMCosNCkvNCorMi4jMzUfPEYjUWA3bH1Rf5Bmh5lzip55i6F9iKF6h6d4kLV/msOHncqPnMiXnMecm8aZlsGUi7aIgax+g66AirWHgqx+h66ChqmBfJx3dZBvbIRkWm5TSVk+RE0yRUkwQ0cuLS8qLjEqLjEqLjEqLzIrMDErMDErMDErMjMtMzItNDMuMzItNTItNDEsMzArMi8qNTAsNC8sNC8sMy4rMS0qMCwrMCwrLSwqLiwtLiwtLS0vLS0vKywuKistKCktKSkrLikvLiktLikvLiktLiktLCotLiorLCorLCspLSwqLCwqLC0oLS4pLS4pLS4pLS4pLCwqLCwsLS0tLiwtLy4sLy4sMi4rMi4rMSwoMi0pMy4oNi8pNzAoODEpOjEqOjEqOzQsPDUtPDUtPDUtPTQvPDMuPDMuOzItOzItOzItOzAsOzAsOzAuOzAuPDEvPjAtQTApPzEoOzQqNTcqMjgsMTkuMzYtODMtPy0pRSkmSygkUiklWS4nYDUsZDwwa0AweEAvf0AuhUAwikEyj0AxkT4wkTsukTkrkjoskz0uk0AwlEMyk0IvkkEujz4rjzwslTswljovkjwvjD0uhz4tgz8sgj8sgT4rhUAwhz8whz4viDwuhzsthjoshDssgjorejgqfkAxdzwscTgndz4tdz4tdTwre0AwezwtgT8zh0U5iUk/h0tAhk1Cg09Ch05FkExJlFNPlGJZkXBhiX1nholuh5Z5h59/i6SGi6aHjaeKiqeJhaOHfJ+BdJl6bpZ0Z41oYIReWXtYWXRTWm5SVmZMTldESUs9QT8zPTgyOS8tNCopMycpMycrMiYqMCcqKioqJywoKCopKSkpKigpLSkqLigqMSgrMikuMikuMigwMigwMCkwLyowLyowLyouLyktMSsrMC0oLzAiOz4pU1w/bnlXfItki5t0iZ5zi6J0i6d2iadzh6pyjrR7l76FnMGNmr+MlbmJjrSDiK59g6t5gql6g6p9gqd7gqV9f596dpN0cIlsZn1hWWtVTVpGSFE8Q0g0PkMvLjEoLjEoLjEoLzIpMDEpMTIqMTIqMTIqNDQsNDQsNjMsNjMsNjMsNTIrNDEqMzApNy8sNi4rNi4rNS0qMi0qMi0qMCwrMCwrLiwtLiwtLS0vLS0vKywwKisvKSouKSgtLSguLicuLicuLigsLSgsLSkqLSkqLSkoLSwqLSwqLC0oLS4pLS4oLS4oLi8pLi8qLC4rLC4tLS0tLi4sLy4sLy4qMS0qMS4pMi0nMy4oNi8nNzAoOTAnOjEoPDIpOzIpPTQrPDUrPTYsPTYsPjUuPTQtPDMsOzIrOzItOzItOzAsOzAsOzAuOzAuPDEvPjAtQi8oQzEnPzIpPDMqOTUsOTUsODMtOjEsPy0pQysnRyknTisnVC8pWTQsXzoxZD0ub0Aud0Asf0AviEAyjj8ykT0ykjsxkTowjDosijssij4uiUAvikEui0IvjkEvkT8xkzsvlDoxkDwxij4whD8vgUAuf0AugD8tg0AvhD8vhj0uhTwthDssgzssgjorfzwsdzcreDwxcjorbjkpcz4scj0rcTkodDsqfD0ugkAyiEY6iUk9h0tAhU1Ag09Ch05Fj0lHlFNRkmZdjHdmgoZtfpN0f55+gqWEiKeHiqeJj6iLjqeKiKWHf6CDdJt8bZl2ZJNpXotgWIJaWHxWWXdVWG9SUmFKTVZDREg6QEA2OjcyNC8sMSsrMikqLykrLSkqKioqKSsqKSkpKSkpKyksLSgsLyktMCouMigwMCkwMCkwLyoxLyoxLSoxLCsxLCswMi0xMi4tLysoLCwkODosU1hCbndafYtnhZVug5lrhp5shqJvhaNvgqVth6x2kLV/mLmElreCkbOAiq97hap3gqh1gqh5gqd7gqV7gaR8fp17d5Jzb4hraHxjWWtVTVpIRE08PUQ0Oj4vLzIpLzIpMDMqMDMqMTIqMjMrMjMrMjMrNTUtNTUtNzQtODUuNzQtNjMsNjMsNTIrODErNzAqNTAsNC8rMy4qMi0pMS0qMCwpLy4sLy4sLi4uLi4uLS0vLCwuKSosKiosLiktLyktLyktLyktLiktLiorLiorLiopLi0rLi0pLi0pLy4qLi8pLi8pLzAqLzArLy8tLy8vLi4sLi4sLy4sLy4qMS0qMS4pNC8pNC8pNzAoODEpOzIpPDMqPjQqPTUqPzYtPjctPzYtPzYtPzYtPjUsPTQtPDMsOzItOzItOzAsOi8rOi8tOzAuPDEvPjAtQDEqRDEqRy8rSi4rSyssSiotRyosQysrQS4qPS4nQC8oQy8mTS8nVzApYjMtZTUraTkrbjosdjwufz0xhz00izs0jToyijoxiTwyhz0yhD8wg0AwhkEyh0Izi0E0jkI0jT4xjT4viz4uhz4thj8tgz8shD0rhTwriDwshzsrhzsrhjoqgjspfzwpez0oej0qfD4vejwvdTosdTstdz8wdz8wdT0udjstfkAzgkI2iEU8iUk/iUtAh0tAhk1CiE1FkUpIlVRQlmZckHZlh4VsgZJyf517gKSAhamFhqmIi6qKjqmKjKWHhp+CgJl8eJd3Z5ZsX5NlWopgWodeW4NeWXxbU3FVUGhQRllFQFE/OEQ2MDovLDMrKTApKC0pKSsoLigoMCcoLyYnLyYnLigqLykrMCosMCwtLSsuLCwuKywuKS0wKS0wKC0wJi4wKC0wMS8yMy8uLionKioiNTcpUFU/bHVae4lmf5FrfZRof5lqgZ9tf59tfaBqgKVxh6x2iq95ia54hqt3gql0gKZzfqZyfqV2f6Z5f6R5f6J6fJt5dpFyb4hrZ3tiWGpSTVpGQkk5PEAxODosMTQrMTQrMTQrMjUsMzQsMzQsNDUtNDUtNjYuNjYuOTYvOTYvOTYvOTYvODUuNzQtOTIsOTIsNjEtNjEtNTAsNC8rMi4rMi4rMC8tMTAuMS8wLy8vLy8vLS0tLCwuKysrLyouMCosMCouMCosLyssLysqLysqLysqLy4qLy4qLy4qMC8rLzAqMDErMDErMDErMDAuMDAuMDAuMDEsMC8rMC8qMi8qMi8oNjErNzMqOjMrOzQqPTQrPjUsQDYsQDYsQTgvQDkvQTgvQTgvQDcuPzYtPjUuPTQtPDMuOzItOzAsOzAsOzAuOzAuPDEvPTIuQTQuRTIsTC4sUisuVSgvVSYuUCctSCosQS8rOzIpOjMpPDImRzEmUjAnXi8pYjApZzguajoudDswfD00gzw2iTs3iTo1iDs1iD84hUE4hEI2gkI2hUM3hkI3h0E3iUE1iEAxh0Auh0Auhj8thT4shj0shzsriDsriDkqiDkqhjkpgzopfjsoez0odj4ndz0pgT8xejYreDgseTsudTosdjwuekAyekAyfkM1g0U6hkg9h0k+hko/hkxAh05DiVBFjFNKjVtQjmlZinRfg39mf4psfpZ0f596gqaCg6mEh6uHiKqHiaaHhqGCgZp8fJd4cJZvaJNoZI5mZI1lZYtmY4djXX5fWndbT2dPSF5JP1A+NkQzMDstLDQpKS4nKislMScmMyUlMSUnMCYnLyYnLigoLiopLCwsKSsqJysqJyssJiwsJiwsJC0sJisuJyssLiorMSwpLyomLisiNzkrUFVBaHJXdINie41neZBmepVof5xsfJ5seJ1peaBrfqVwgKdyfqVufaRve6NvfKRwfaVzfaR1faR3e6B1fJ93eZh2cpBubYZoZXxgV2tQTVtEQkY3PD0vNzgqMjUsMjUsMzYtMzYtNTYuNTYuNTYuNTYuNzcvODgwOzgxOzgxOzgxOzgxOjcwOjcwPDUvOzQuOTQwODMvNzIuNjEtNTEuNTEuNTEuMzIuMzIwMzIwMjEvMTAuMC4vLy4sMSstMyorMSstMSsrMSsrMSsrMCwrMCwpMi4rMi4rMTArMTArMTArMjEsMTIqMTIsMjIwMjIwMjIwMTItMjEtMjEsNDEsNTAqOzQuOzQsPTQtPjUsQDYtQTctQjguQzkvQzswQzswQzswQzswQjkwQDcuPzYtPjUsPTQtPDMsPDMuOzItOzItPDMuPDMuPTQvQDUxRTMvTDAvUywxWCkxVygyUikvSSwuQTItOjYrNjYqOTcoQjQnTDEmVjAnWy4oZDkwaDwzcTw0ej04gjw6hTs6hjs4hDo3gTo2gD03gEA3gUI5g0M6gkI5hUE4hEA1gUIwgUMug0Iug0AthT4shzsriDsriDkqiTcphzgphTkpfzsoez0oeD4odEAodj0pgDgqey4kgDgsgz8ydjQoczUofEA1fUM3fUU4f0Y7gkk+g0o/gkxAhE5Ch1FFhVdIfGFMeWlQfnBWgHZbgHxhg4ZphZNyh515gqJ9gaeAgKqCgK2EgKqEfKR/eZ96epl3epJweY9rd41pdY1pdIxqcopqbYRna39kX3FXWWhRT1tHRk07P0EzOjgrNDAlNCskNScmNScmMiYmMCgmLikmKyomKywnKiwpJywoJywoJysqKSsqKSsqKioqKyksLSkqKiUiMCsnNTAqODYqQEMyUlpDY3BUbH1bdIhjcYpgc5Bidpdodppqc5lmc5tnd59qeaFsdaBqdJ9qdqFseaNxe6V1eqR0e6J1eJ1yeZx0d5Z0cI5sbIVnZHteVWxPTFtEQkQ2PTsvODYqNDcuNDcuNDcuNTgvNjcvNjcvNzgwNzgwOTkxOTkxPDkyPTozPTozPTozPTozPDkyPTgyPjcxPDczOzYyOjUxOTQwODQxNzMwODQxODQxNjUxNjUxNTQyNDMvMjEvNDAtMy0tNS0rMy0tMy4rMy0tMy4rMi4rMi4rMy8sMzArMjEsMjEsMjEsMzItMjMrMjMtMzQvMzQvMzQvNDUvNTQvODUuOTQuOTUsPTYuPTYsPzYtQDgtQzkvRDowRTsxRTsxRjwyRT0yRT0yRDwxQzoxQjkwQDcuPzYtPzYvPjUuPTQvPTQvPTQvPTQvPjUwPzYxPzYxQzUySTQzTzEzUy41Uy8zTy8ySjIwQzYwPDgtOzksPDkqQTgpSDYoUDInVjEoWzMpYjMrazQvdDcyfTc1gTc2gjY2gTc0fjczfTo0fDs1fT41fz82gj83hT44hEA1gEMxfkQwgEEvgUAugz4uhTwthjoshzkshTkrgzorgDsrfj0rej0qeD4qdj8qezwqhDQpiTIpn0xEplhOiUA3ezktgkY7f0o8eUg6eEo7ekw9eU4+fU9AgFJDhVVHgV5KcmtOb3NQe3ZYhXdcjXlgloBonopyoJR6lZZ3jpx5i6N/iKiBhKmAf6V8eqB5fJp2gZBvhI1ugo1tf45tfo9veo9udotscYhraX1hZXVaXGhQU1tETE07RUIxPzcqOjAmOi0nOSsoNSomMislLiskKywmKi0mKC0mKS4oKy0oLSwoLysoMikqMykqNicqNigoMSgjOjMpRD4ySEY3T1I9W2NLZHFTaHlXbYNcaYRZaopbbZFhcJRkbpRhbpZib5pldJ9qcp1ocJxncp5rd6NyeaR2eaN1eJ9zdZpxdphzdJNxboxqaoVmYntdVWxPTFxCQUM1PTkuOjMpNTgvNTgvNTgvNjkwNzgwODkxODkxODkxOjoyOzszPjs0Pjs0Pzw1Pzw1Pzw1Pjs0Pzo0Pzo0PjkzPjkzPTgyPDcxPDczOzYyOjcyOzgzOzgzOjcyOjYzODUwNzMwNjMuNTAtNy8sNy8tNy8sNTAtNTAsNTAsNTAsNDEsNDEsNTItNTIrMzMrNDQsNDQsNDMuNDMvNTQwNjUxNzYxOjcyOzgxPTgyPTkwPzgwPzguQTgvQjovRDowRjwwSDwwRz0xRz0zRz0zRz0zRz0zRTsxRDowQTgvQDcuQDcwQDcwPzYvPzYvPjcxPjcxPzgyPzgyPzgyQDkzQjk0RDk1Rzk2SDk2SDk0RzoyQzkwQzkvQzktRTkrRjkpRzopSjkpUTcoWjAkZC8nbTIsdzYwgjg1hjs4ijw6iD04i0I8hkE6gT42fjsyfzsygTszhzw2iD82g0EzgEEygEEygT8xgT0wgTsvgDwvgDwvfjwuez0uez0ueT4uez0uez0ufD0ugzksjzEpoTs2zGtl2X93qlpRjEM6iExBfk0+dEo6cU47b1A8blI9c1RAeldEgVxJfWVNbXNNbnpShHlblnZfp29gs21ju3Bqu3duu4N2sYx5ppZ9nZ5/lKJ/i6F7hJ55hJp2iJJwiZBvhpFvhJRwgJZye5VydZNvcpFva4poaINiYXhbW2tQVF5FTFA5REMvQDoqPjQrPTIsOjEqNTEoMi8mLi8nLTAnLC8mLzAqMi8qNiwqOSsqPSkrQSYrRCUrQScoQzUsS0Q0VlE+W1lEXmJJZW5RaHhUZ3xVaYJYZYJUZoZXao9cbpNgbZRfbpZhb5plc55pb5tobZlmcJxrdqByeKF1eJ51dJpzc5dxdJZzc5JwbYtpaYRjYXxbVG1NTFxBR0g4RD0zQDcuNjkwNjkwNjkwNjkwODkxODkxOToyOToyOjoyOzszPjs0Pzw1QD02QD02QD02Pzw1QTw2QTw2QDs1Pzo0PjkzPjkzPTg0PTg0PDk0PDkyPDk0PDkyPDczOjcwOjUxOTQuOTEuOTIsOTEuOTIsOTEuNzIsNzIuNzIuNjEtNTItNTIrNTIrNDQsNDQsNDQsNTUtNTQvNTQvNzYxODgwPDkyPToxPzsyQDwxQDkvQDouQjovQzsuRTsvRj0uST0vSj4wSD4ySD40SD40Rz0zRjwyRDowQTgvQDcuQjkyQTgxQDcwPzgwPzgyPzgyQDkzQTo0PTgyPjkzQTo0Qzw0RTw1Rz00Sjs0TDszSzcuTTcsTjYqTzgqTzgoTzgoTzonVDcnZjYocTUqfToxiUA5k0Q/mUlCnUpEnExFn1BJlkxBjEQ4hDwwgzYshTcrjDovjT00iD41hj00hj02gz0zgjw0gDwxfT0zeT4wdz8ydUAwdUAyeT8xfT0zgTsxhzgzjzQvlSgjsD047Hx6/ZaRw2lhlUg+iEo9d0g4bUw5Z1E6ZVU8ZlY9bFhAdFxEfGBKf2dNeHJOg3ZTnXNbtGxex19c0lVZ11Fa1lNb43Bz2Hl1y4V7wI9+tJR9qpV6opJ4npB1m4lxm4tymIxylZBzjpF0iZJzhJJxgZBxe4xsd4Znc3xhbW9XZ2JMXlM/VUYzTzwuTDMsTTEtSDErQi8oPS4nOS8mNi8lNS4kODEpOTApPS4pQC0pRCorRykrSicrRyknUkIzWVE6ZF5GZmVJZ2xMa3VTa3tWaX5Va4VYZ4RUZoZVbI5bb5RgcJdicplkdJxocpxqb5lpbZdpcJpsd510eZ92d5t3cpZycpRzdZR0cpFxbIpoaYRjYXxbVG5LS15CTU4+S0I5Rj00ODsyNzoxNzoxNzoxOToyOjszOzw0PD01PDw0PDw0Pzw1QD02QT43Qj84Qj84Q0A5RUA6RUA6RD85RD85Qz44Qz44Qj03Qj03QDs1QDwzQDs1PzsyQTo0PzsyQTo0QToyQDkzQDcwQDcyPzgwPjcxPjcvPTYwOzYwPDcxOzYwOjcwOTYvODUuNzQtNzQtNjMsNjYuNjYuODUuOTYvOzYwPTkwQDkxQTowQjkwQzswRjwySD4ySz8zTEAyTEAyTEAyTUE1TEA0Sz8zSj4yRz0zRjwyRTsxRDowQjkwQTgvPzguPzguPjcvPTkwPTkwPjoxOzQsTUQ9S0A6SjkyUz84UjcwTi8qXjs1WjMsXjYuXjMqWy8kXDAjZTcqaz0wcT0wiEo9jEc4lUk8nkxBnkc+mD41mj01nUM6pE1DpFFDqFZIqlhKpU9CmEAylzsumz80kjk1jzo3jDY1hTQwhTczgz82fEA2cj4wckI0bkAwbz4wdjovgTgyiTQxkC0wmCcpx0dG52NfwkVDy1hV4Hp1q1dNhUU5hFZGbVI9Z1tBaGNGaGRHaGFEbV9EemRMi2tSkGJKsm5b0W5o2lld4DtL5ixD8CtH8jBL9kBX6klZ5Ftl429y4nx62oF72IN+1omBwX51vIJ2uYR2tod3r4h3q4p3p4t2pIt3l4FsmH9rlXhok29hjGJWg1RKekg/d0A9dDk7Zy8yZDAyXzExTiYkRyYhSjEsSzcwRzQuRDMsRDErRTIsRi4sRCopSi4tTzYvWEk0YFc6ZWBCZWVDaW9Lc31Yc4NcbYJXaoRXa4hYbo5dcZNgdJZjc5hidZpkdptocZZqcpltc5hvcZZtcpRxd5l2epl6eJd4d5R2cY5waodpaYRlZ4JhYHtaU25LTWBETk8/UUs/T0k9NzoxNzoxNzoxNzoxOToyOzw0PD01PT42Pj42Pj42QD02QT43QT43Qj84Qj84Q0A5RUA6RUA6RUA6RD85RD85Qz44Qz44Qz82Qz82Qj41RD01RD01Qzw0QjsxQjszQjsxQjkyQTgvQTgxQTgxQDkxQDkxQDkxQDkxPDcxOzYwOjcwOTYvODUuODUuNzQtNzQtNjYuNjYuOTYvOTYtOzcuPTkuQTowQjwwQzswQzsuRjwwSD8wSz8xTEAwTEAwTEAwTEAyTEA0Sz8zSj4ySTwzRjwyRTsxRDowQjkwQjkwQDkvPzguPTkwPjoxPjoxQToyQzoxSTgxSi4qVS0raTY1dDg4ezs7hERCgUQ/g0hAhEo/hEg9jUpBmE9Gn1BLn09GkUM2kUIzmEIznUQ2nz8zmTcsnDcrnjwvoEM0m0AumUAun0Qyo0Y1p0Y2rkg5tU1CskxKrUlLpEBCmDg5kTk3jD04gj82dj4xbj0ueUg5hEw/hEA3gi0qkSotsjpD0kxV2kxL3k9LyD47wEA9z2BZs1lQhEAzglVCeGBIY1w/XV4/aGlJcm1PdWdKfWVLk2NNumRX1V9b5FVZ6EBN8ixD/CZC/yVH/yZI/y1L+DJL8D1S7klZ6FBc41Fb4lJc31dh22Jp1WZs02lt0W1vzXFyynRzyHd0xnh0x3x5yHp4xnZ3xnF0xWpvxWZsxGBqw19pxF9ts1NfpUtVmUhPjUVJhEZJazg3Rh0ZVDEtSzApSDEpSTctSjkxSzoyTT82U0Y2W081Y1o5ZmI/Z2dDbnJNeIJdeolicodeb4lcbolcb4xecY5ec5NidZVjdZVjdZVmcpJpdpZxeph2eZZ3fph7g52ChJ6Fg5uDgZmBeZF5cYlva4RnZ4JjX3pZU25LTmFDUFNAVFFCUk5CNjkwNjkwNzoxODsyOjszPD01Pj83P0A4QEA4QEA4Qj84Qj84Q0A5Q0A5Q0A5Q0A5RUI7REE6REE6REE6RUE4REA3REA3REA3SEE5SEE3SD82Rz41Rj00RT0yRDsyRDwxQzoxQzswQzoxQzoxQzoxQzoxQjsxQjsxPDgvPDgvPDgvOzcuOTYvODUuODUuNzQtOTYtOTYtOTYtOjcuPDgvPTkuQTowQjwwQzswRDwvRz4vSj4uTD8vTUAvTUAvTUAwTT8yTT8yTD4zSj4yST0xRzsvRTsxRDowQzswQzswQTowPzswPzswPzswPzwzQjsxVUQ8UjMuaTMzjUBGrEtUwlRfy15kxV5hmkI+lkg+lEw+mk5BqlFJvVRQyk9SxExLo0E0m0IwnkEwoz8wpTstojYpojgqpD0uq0Y0oD0qmDcknDkkpD0qq0AuskMytkQ5pTExrjk/uURKvEtPuE5QrUtKlkE8gDcueTktdTcqdzMohDErnDQ1uDxE00dU5U1Z4UdHzzYxzjo2vTMwx01IxmRblEo9i1tHfWNKaWBBZWRFc3BPfnFRgGlKjGhOsGhZ4mJh81Ja80NQ9TZI/TJI/zFL/y9M/ytI/zFM+y9I9TFJ9DRL8jVL7zJI8jJL8zdP8kBY70Nb7UVc7Ele605j6VJl51Rn51Vo41Ro4lNn4lBn4k5o505q61Ft8lNz81Z1/WeE8WF841tz1FZry1tryWRypVJaci0wXCYmVzArVjsyTz8yQTstODkpPUEwS084Vk8yYFg0ZV89ZmZCcHRRfIZjfoxpdodjd41nc4xlcotkcYxjdI1ldo9ld5Bmd5BofZVzg5p9iJ+DiqGHkKONlqmVl6qXlaaWkKGPhpmGeYx4boVrZn9iXndXU25LT2RFU1hCV1ZEWFZHNTgvNTgvNjkwNzoxOjszPD01Pj83QEE5QUE5QUE5Q0A5Q0A5REE6REE6REE6REE6RUI7RUI7RUI7RUI7RkI5RkI5RkI5RkI3SkM5SUI4SUA3SEA1Rz80RT0yRDwxRDwvQzswQzswQzswQzswRDwxRDsyQzwyQzwyPzgwPTkwPDgvPDgvOjcwOTYvODUuODUuOTYtOTYtOTYtOjgsPDgtPjouQTsvQjwuRDwvRj0uST0tSz8vTUAvTUAvTUAvTUAvTUAwTD4xSz0ySjwxSDwwRzsvRDowRDowRDwxQjwwQDwxQDwxQDwxQD4yQD00RjwzUTkvWislhzs9vVVe2VVj5lVm4lRgyklOnzMwljovkD8ul0EwrUY9xEpF1EFHyz9AsUI3pUY0qEIzq0Ezrj4wrz8xsUEzs0U2sUg1qEEuoz0npDsmqDsnqjknqzYlrTMotjk3ujk9vDc8uzY7vj1BxElLxFRSvlhTmT82ijMphiwjnTYxwkdJ3E9X4EJQ2TM93Tk4zS4o0TgyxzgyxUQ+x1xSpldIj1hEdlY9dmVHe3BQf3BRgmdKjmRLqW9b0nRo7FNW+0NP9jxJ+DlI/j1O/0BR/jtM9zRF/z9T/jlN+jVJ/DJI/DBJ/i5I/y9L/zVS/zJR/TRU+zZU+jdX+DlY9zxb9T5d9D9e9kNj9UFk8z9k8z9m+D9o+0Js/0Vw/0hx/091/1Fy/lV28lNx5lNt42J21mZ0tVhifDE1ZzAtVzIqTjgrRT4sPUArOEQuPkYuUEsuXVQ1Zl9CbmpNeXxfh41xhJF1fIpweYxweo5ye49zeY5veItte4xsgZJyh5Z5laOKm6mSoq+dpbKhqrWnrritrrivqrSrn6uflKCSgZKAcYRwZXxiXHVXUm1MUGVGUFpCVVhDV1pFNDcuNTgvNTgvNzoxOToyPD01Pj83P0A4QUE5QUE5Q0A5REE6REE6REE6REE6RUI7RkM8RkM8RkM6RkM6R0M6R0M6SUI4SUI4S0I5S0M4SkI3SEAzSD4yRz0xRjwwRTwtRDouRDouRDouRDouQzsuRDwxRDwxQz0xQDkvQDkvPTkwPDgvPDgvOzcuOjUvOjUvOTYtOTcrOzcsOzcsPjctQDouQzswRDwvRjwwRz4vSj4uS0AuTUAvTUAvTUAtTUAvTj4vTj4xSz0wSjwvSDwwRzsvRDouQzktQzswQjwwQDwwQDwwPz0xQD4yQT8zSTwzXDUudTQwrExQ2l5o5U1c40BR1jZCtiUoqDEpmzcnkjomljsmqkAywUU71D4/yzs6sD4zp0MzqkAyrD4xsT80uEM5u0c6uUk7qj8tqD8spj0qpTooqTgmsDsqtzwtujwwykc/zkRBzz09zzY41Dg73UFE4ExM3VJPw0Q9xktDzFNK01RN2UtJ2z9C4DU94DE22jMt2TguzzIpzjkyvjcxs0E3tFxOlVRCeE42gGJGhWpNhGFFj1tDrWZSynFj5G1n6EVK7zpD6DlA5j1C5kNI5kVK50ZL6kdM8ktT8UFM8jlH9jVG+DFG/S9G/zJK/zhS/zlV/jlV/jlV/TpY/Txb/T5f/T9h/UFk/0Np/kRr/ENs/ENt/ENt/ENv/ENv/UJt/0dw/0Fm/0dt/01w8Upo6E5o5Vxw2GJyu1pjiz9BXickTyohVEEyVE87SUw3P0MsUUszY1hCc2tWf3pmi414l5yIk5yLhpOCgY9+iJaFjZuKi5iHhpGBiZKBlp2NoqmXsbWmuLytvcC1v8K5wsO9xMXAwcPAvL67r7Suoaigi5eLeIZ1aHtlXHNXU2xMUGhITltBVVpDV1xFNDcuNDcuNDcuNTgvODkxOjszOzw0PD01Pz83QEA4Qj84Q0A5REE6RUI7RkM8RkM8RkM8R0Q9R0Q7R0Q7SEQ7SUU8S0Q6S0Q6S0M4S0M4SkI1SUE0ST8zSD8wRz4vRz4vRj0uRj0uRjwwRTsvRDwvQzsuQzswQzswQTowQDkvPjoxPTkwPDgvPDgvOzYwOzcuOjcuOjgsOzcsPDgtPzktQTsvQzsuRD0tRz4vSD8uS0AuTEEvTUAvTUAvTUAtTUAvTj4vTj4xSz0wSjwvSDovRjouQzktQjotQzswQTsvPzsvPzsvPz0xQD4yQEA0TDsxazkylUZCw1ld2ldf3UNP3DhD0jM4vCsorDAkoDcilTkglTkgojwmtD8uwzowvjgvpzcroTstpDgspzcrrzoxtkE3ukU7t0Y4rD4vqj8vpjsrozUkqTUmtT0vw0U5ykg7vDgrzkA230Q/60FB8T1A8Tg96jM33C4v2zc14UZB51JL5U5H3D052DAv4i8y6jY12DAn3TsuyiwhzzgvvTMprzYtx2dbtm1cjVZBh1tCglY9iVM7qVxKzWte3mdh41VU70ZL7j1D4jw+2D4+0kE+0UZB3U9L6lZW7U5S7URL8DpH9TRF9zJE+C9C+zJF/jdM/jhR/ThU+zlU/DpV/zpb/z1g/0Bk/0No/jtl/Txo/T5q/D5s+j9s9z1s8zxs9Tpn/0dx/jpg/j5j/0xu/kxs9U5q71Vv4llt53F/wWBplUlLcTo1WzUqTzgqT0IxVU06XFBAcWVVhXxtk42BnJyQpKeen6aek52Vk56YnKehpK+ppK2ooaaipaeitLWwwsG8y8i/0M3E1NHK09DL1M7O1M7Q0MvPyMbJvb29r7Gul56Wf4t9bH1qXnVZVm9RVGxMUmFEVV9EVmBFNDcuNDcuNDcuNDcuNjcvNzgwOToyOjszPT01Pj42QT43Qj84REE6RUI7RkM8R0Q9R0Q9R0Q9R0Q7SEU8SUU8SkY9TEU7TEU7TEQ5TEQ3TUM3TEI2TkI0TUEzTUEzTEAwSkEwSUAvSUAxRz4vRT0wRDwvQzsuQzswQTowQTowQDkxQDkxPTkwPDgvPDcxOzcuOjcuOjgsOzcrPDgsPzktQTsvQzsuRD0tSD8wSD8uS0AuTEEvTUAtTUAtT0AtTj4uTj4vTT0wTDwvSTsuSDotRjosQzktQjotQTkuQDouPjouPzsvPz0xQD4yPz8zTjoxcDEspktKv1JVuj1BvC81wS8yvzAsuDInqTEgozkhnD0hljscmTsfnz0ipTsjozYinTYnnzcsojYspDQpqzgxtkE4t0I5sUE1sEI1rUE0pzsupTcorjotu0I3w0Q7w0E0wj0qzD4q2TUp4Ckj7CIi+SQo/yov/y4x7Ckn5i0o4DIp3zQq4DQq4zIq5zAq5jEq2jMj1TUl0DImzjYrxDcuuz81xmBU0H5wpmVTj1ZCiE46oVhHx2Va3mNe5VNU50RJ9EdL60FC3T880UA7yD83xD820UY/4kxL7klN8z9I+DhH/DZH+zVG+DNE9jZF+jtL+jlO+TdR+zZS+zZS/jdY/zld/zth/z1l/z5q/z9t/0Fv/0Jx/0J1/kJ0/EJ0+UJw/0Vs+kFh/UZl/0pp/Uxp/1Zx/1558l1z8Wp75W990m52rV1eg0Q/ZjUuZ0E2cVVJd2Vbin11oJWPq6Ser66qtLa1sbW2p6+xsLi7tbzCvcLIv8LHw8LIyMbL087U3NbY4dnW5t3Y593c5dvc5Nfe49jg3tTc1s/WycTKubm5oaagiJKHdINwZXlgXHNXWXFRWWlMW2hKW2hKNDcwMzYvMzYvMzYvNTYwNjcvNzgwODkxOzszPDw0Pj42Pz83Q0A5Q0M5R0Q9RUU9R0Q9R0Q7SEU8SEY6SUc7SkY6S0c7TUc5TEY4TEY4TUU6TUQ7TUQ7TEM8TEM8TEM6TUQ1TEMyS0IzSUAxRz8yRT0wRDwvRDwxQjsxQTowQToyQDkxPTkwPDcxPDcxPDcxOzcuOzcsOzcsPDgtPTkuPzswQjsxQz0xRkAySEAzSkEySkEwTEEvTUAtT0AtTj8sTD8vSj4wTDwvSzowSjkvSTgwRTgvQTgvPjovPTsvOzsvOjwuPD0vPT4wQT8wUzkshTw1wlxYx1pXrTczqi0psDEqrS8jrDMiqjokq0EnqkcqpEUnoUIkokAjoT4hnjghnzkqozswpDotpjcsrDwxtUU6tUU5r0E0qDwvqDwvqTssrDwuukQ4xkxBw0Q7uzcrvTYizDsm3Dor5jQq8Sso+Cgo/CYo+SQm+Coq9S4p7jIp6jQp5jQo5DIm4zEl4DMl4Dso0DEe2z4tzjYpxjgswEA1sUE1z21gvmhZpVJCpk5AymRY5Whi5lJS6UBF80JK6j1B3zs61Dw5y0A5wD0ztjgsuTYswzgx4khI6D9E7zpD9jtG+TtH9zlF9jtG+j5M/kJT/z9U/DxT/DpU/zhV/zlY/zpe/zpi/z5o/z5s/z5s/z9u/T5x+kBy+EBy90Fx9kJp/kxs/1Rz9Epn6kFe+1Rw/2iD/2V/9lx27l515md423F9xXB1p2dljF1Xe1pRln93p5iRvLGrw7u4w8HCxsfLxMfOwMPMysrWzMrY0cvZ1c/d3dXi49vm6OHp7OPo7uTj8efl8ujn7uTl7eDn7N/m6N3l4tjg0MnQwL7Bqauoj5aOeYV3a3pnYnZdYHJYYnBWYm9TYG1RMDEsMTItMzQvNTYxNjcyNzgyODkzODkzOToyOjszPD4zPkA1QUE3QkQ3REQ6REY7SEg+R0c9R0g6R0g4SEk3S0o2TEs2Tkw3Tks4Skc4R0U5SUZBTUlKTklPR0RNRD9DTkU8TEM0SkEyS0IzTEQ3S0M2Rj4zQjovRD0zQjszQDkzPzgyPjkzPTg0OzYyOjUxQjk0Qjk0QDkzPjkzPTo1Pjo3PTw4PTw3QEA4Qj82REA1SEAzSkEwTD8sTj8qTEAqR0AtRT8vSTswSjcwSzYxSzYzSjg4RDo4QD86NDowMTwuOUQzOUIvNTgjPz0oYkMvvGpctko+pTcqpDYppjgpozUkpDYlqD0poTgipDslqD8prD8orD4nrDkkqzYiqjckojcnnzgpoDkqozwtqT8vrEIyrEIyqkAwqD0rqz0srTwqsz4tvUM0xEY4wD4xtzElxjgqyzcp0Dgq1Tks2zct4TYu6DMs7TAs8S4s8y0q8i8r7zIs6jUq4zcp3Dko2jso2zom0zQfzzIfzTcmxjcnuzYnwEI0zlRHx05DzlNL31tW7V5a7lBR6z5C8Tg+9j9E6UBD3kNB00I/xj85ujsysTsvrzsssTstyUs/1EtD20ZC4D0+6TxA9z9H/D5I+DpE/UNO+0NP/ENR/0RV/UBW+ztU/zxa/0Ni/0Zr/0Fo+Txm9Dlk9D1r+EJy/Eh4/0t6/055/k509lFz71Bu5Uxo501n+1h1/2aF/1+D8kdp9ld35mB5wl1rvHp+h2Fej3lup5GEu6ec0MO629bQ29vZ29zg3dzk4tzq5djs6tft8dnv9N3x9+Lx9ejy9Ory8+3v+fTx+PPv9vHu9O7u8ejp7OPm6N/k493h1dDUy8nKurq4o6WgipGJeIN1cX1vb3xqfYZzd4BrdH1oLy8tMDAuMTEvMzMxNTYxNjcyNzgyNzgyOToyOjszOz0yPT80P0E0QUM2QkQ3Q0U4Rkg9R0c7R0g6SEk3SEo1TEs2TEw0TU01S0o2S0k8S0tDUFBQV1VgWFdnVVNpUk9gTkhKTEM8Rz43Rj02Rj83R0A4RT42QjszQzw2Pzo0PzgyPDcxPTgyPjk1PDczOzYwPDMuPTQvPTYwPDczPDk0PDs3PTw4Pj05QD86Qj84REA1SEAzTEAwTD8sTz4qTEAqQT8qQD8rRDwvSDoxSjczRzUzRDQ1PjY0Pj05Nzw1OT8zP0EzQzwsSTkpXEIzf0w7rVFCqjsqnzEgnzYjoTonnTgknTkioz8onzskpj0orUArsj8stDwrtDkptjcmszgoqDkoozkpozkpozwrqD8sqkEuqkEuqj8rrD8rqjknsTwqv0Y1xUc4wT8xuzcqvzUoyzcrzjYpzTkrzzst0jwu1zsu3jcu5jMs7TAs8S4q9C4r8DEp6DMo3zgo1Tom0zsk3Dwm2DYh1Dck0zwpyzopwDQlwjoszEY60EU+2ElD509M8VFR8khJ7zxA9Do/90JH5UJD2kVB0EI+wz43tzsxrjotqTsqqjwrtUQ0xUs+1E5D2kdA4kA+7j5B+j9G/UBH+ENK9kNJ+kVO/EZS/ENT+T5T+z1W/0Je/0Zo/0Np+kBn9kBp+ENu+0d0/Et5/0t6/0t6/kl080tv8VJy9Ft39156+ld2+01u+0Vr+UVq7UVo2Upmxl9wsG5yaktGj39ysJaJzLKl49PG7OPa6ejk6Onr6ebv6uLx9eL4++H6/+P7/+f9/+39//L8//f8/fn4/fn2/Pn0+/f0+PTx9vDw8uzs7+nr7efp5N7g2tbVyMfFsrOunaCZjpSKiJCFiJCDjZaFiZB+ho19LS0rLi4sLzArMTItMjMuNDUwNTYwNjcxODkxOToyOjwxPD4zPkAzQEI1QkQ3QkQ3R0c7SUc7Skg7Skk3S0o2TUs2Tkw3Tks4S0k6TktCVFNRX15kaWh4bGyEa2yKaWmDXlppWVFcT0hQSEFJRT5FRT9DQz0/QDo6QTs7Pjo3PDczOzYwPTgyPjoxPjoxPTkuODQrOTUsOzcuPDkwPToxPjsyPjsyPjwwQz80RT8zRz8ySz8vTUAwTj4uTz4sTD8sOjwkOT4nPTwqQTstQTgvPzYvPDQxOTQwPDk0QDs1Rzo0TDMuVysoay8uhjw9oEdDozswoDIhnTIgojkmojwmnTkinDghoT0mpDslqD4or0AstUAuuT4suzwrvjoruzwtsT4sqzwrqTopqDopqjsqrD0srD0qrD0qsT4srTgmuD8uyUs8ykg4uzYnujIkyDouzjYp0jYp0jkr0zos1jot2zks4jYs6DMs8DAt9C4r8i8r7TEo5TMn2zYj0zgi0Dgh2zkk2jUh2jkn2j8t0jwtyDYpxTksy0E2xjs0zD842ERA5EpI6UpH6UND7EBA60NC3EM+1EQ8zEE6wj00tTktrTcpqTopqjsqqzcowEQ41E5F20pF4EBA6D5B9kFI/0dP9EFH8kFH90NM/UdT/kVV+UBS+j5W/kFd/0Vl/0Rn/kRr/EZv/kl0/0t4/k17/0p6/0Z3/0d2/0pz+k9z/1p6/2GA/VZ070Vi+Upr/VRz2kBaykld2HuFt3t7X0I6j3xur4+C1bOn89vP+uzj9/Lu+Pb59/T98+v6+er9/+r//+v//+7///T///j///z+//38//36//34//v3/vn2/fT1+/Lz+vH0+fDz7+bn5N7e08/Ovr25rK+ooKacnaOZnKSXo6ucnaaVmqKTLS0rLS4pLi8qLzArMDEsMjMtMzQuNDUvNzgwODkxOTswOz0yPT8yP0E0QEI1QkI2SEY6SkY6S0g5TEk4TUo3Tkw3T004T0w7S0k9UVBLXVxhbWx6eXmRgIGgf4GnfX+leXWWcWqJZF56WVRrUUxiS0dYREBOQD1IQT5FPTs+OTg2OTUyOjcwPDgvPDgtOzktODguOTkxOjowPjsyPjwwPjwvPjssPjsqRT8vRj8tSD8uS0AuTUAwTj4uTj4uS0AuPz0oPD4pPj0rPjwvPTsvPDkwOjoyOTo0OjoyQzozSjUwVCwqZykqgzE1nTlBqj1ApDgsojclpTooqD8spz4pnzkjnjgipDsmpDokqzwosj8suD8uvT4twDwtxDwuwj4xu0Axsz0vrzkrrjgqrjgqrzoprzopsTkptDsquTsswUIzykY5xj4wvDIlwDImzTkt0zUq2DQq2DYr2jgr3Dgs3zcs5jMs6jIq8TAr9C8p8S4o7DAn4zEj2TQh0DUfzTUe1TMe1zAe2DUk2zsr1j0v0DoszT0y0kQ6wzYtwzYvyjs12ERA4k1H5EtG3kM+1Tw20EA3y0E2xT80vjwvtDkqsDgqrjorsDwtqzMlvT8zzkg/2EdC3EE/5EBB80ZM/E1S7j9E7z5E9ENL/EhT/khV+kNV+kBX/EFc/kNi/URm/kZs/0py/014/057/0x5/0l3/0V0/098/1J9/Upx90xu/1Z1/1Zz901o8EZh7kxk0D5T4WRy/p+l0ZCOZDkya0k9pHpu0KWc9dTL/+nj/vPv//z+//v/+PL++u///e///+////L///X///j+//r6//v4//75//34//v3/vn1//b3/vX2/vP3/vT19uzt6+Ph2tXSyMXAubqysrWqsbSpsLaqtr6xr7eqq7OmMTAsMC8qMC8qMC8qMC8qMjEsMzItNDQsNzcvODgwOTkvOzsxPT0zPz81QEA0QUE1SEQ4S0U5TUc5T0k5UEs4UUw4UUw5T0w9TktCVlRVZWVvd3iNhIeojI+4jpLCjpHEjIy+hoK0enemb2yXZmSLXFt7U1BtTEpgSUZXREJNPTxBOTc4NzYyODUuODYqNTUrNTYuNTgxODkxOjouPTsuPzwrQTwoQjwmRz8qRz8qSj8rS0AuTEAwSz8xSz8xSz8zTEA0SD40RTsyQDkxPDkyODkxNTw0NTw0Nz0zPDouRjMsVzIsdTg3kkBCpT1Epjg5pzsvqD0rqj8rq0ItqD8qpDsmpDslqD4opzgkrTontTwpuj0rvzsswzstyDwvyD4zxEA0vT0wuTkstzcqtzcquDgruDgrtzgpuTcpxkA0y0M1xTksvzElxTIoyjgrzzUp2jMq3zMp3zQq4DYp4zUq5jQq6jIq7zAo8i8p9C8p8S4o6zEl4jIj2TQh0DUfzDQd1DEe1i8d1TIh2DYn1jkq1Dou0z811UU81EU9zUA3yDsyy0E31UtB2U9F0EY8xDovxDwwwj0uvjwuujsstDkpszkqtT0tuD4vtTktvDwxyD850UI+2EJB4ERF7ElO9U9T6kBD7T5D8kNK+klT/UtX+0ZX+UJW+kJa+UFd+kNi/UVp/0tx/053/096/013/kl0/0p3/1N+/1R9/Elw+Ult/1N0/1Zx909o6UVd40dc51lp/5ah/7W68p6cjUhDaS4mpmtjzJeP8cnB/+Ld//Lu//z7//3/+fb9/ff///f///f///j///r///v+//z8//36//z4//v1//r3//n2//f4//b3//T2/vT1/PLz8enn5Nza1dDMzcrDyMi+ycu+yc2/yNDFvce+t8G4NTQvNDMuMjEsMTArMTArMTEpMzMrNDQsNjYuNjYuODguOjowPDwyPj40Pz8zQkA0SUM3TEQ3T0g4UUo4VEw5U0w6U0w8UUs/UEtHWVdca2p6fX6ci463k5nLl53XmJ7cl5jYkpLSjIrJhYS9fn6ydXakbGuTZWWHW1t3VVNoS0pYQ0JKPT0/Ojk3ODczNzYyNDY1MjY1NTYxNzcvOzksPzwrQz4qRT8nRz8oRz8oSEArSEEvSEIyR0E1R0A2R0A4SD07SDo6Qzk4PTg1NjY0MTczLjkxLjowNT0yNzUpQTEkWjgufkM9lEZCnT48nTQwpjwuqD0rqD8qqUArqD8qqT4qrD8qr0AsqjcksTgnuDspvjorwzksxzktzDkvzDwxyT80xTwywjkvwDctwTguwTktwDgswDYrxDct0UM30EA1wzAmwywjzzgt1Dwx0TMo3zMp5DIo5TMp6DMq6TIq7DEq7zAo8S4o9S4p9C8p8C8m6zEl4DMj1zQh0DUfzTUe1zYi1zQh1TQi1DQk0zYn1Dgs1Dwx0z8161hQ4VJK00k/y0I4ykY6zEo9xUU4vT4vvDoqujsoujsotzootjkntjsruj8vv0EzwUE2wTwzxTw2zkA81kRE3EhI40pM60xQ6EJG6kBD8ENJ+EpT/U1Y+0tY+UZZ+kdd9UFc90Ng+kVm/kpt/051/094/052/Et1/1F7/1J5/lB1/E5x/1Z3/117/lRu7UVc91Rp7lFi92Vy/5Kc/4uT8oSHx2BjpkxLtGtlzJCI7r22/97Y//Ds//n4//v9/Pr//Pv//fr///v///v///v9//v7//v4//z3//z2//z2//z5//v4//n4//b3/vL0/fHx+Ozs8Obk5tza3tfR2tbN3NrO3d7Q3eHT2+LaztjQxM3IOjoyODgwNTUtMzMrMjIqMjIqMzMrMzMpNTUrNjYsNzctOTkvOzsxPT0zPj40QT8zSUM3TUM3UEc4U0o5Vks5VUw7VEs8U0pBUUtLW1hhbG2Cf4KlkJTEmZ/ZnqbnoKjwoKTunKDpmJvilJfak5TUjpDJh4m8gYSveHqgcHGQY2N9WFZrTk1bSUdSRURMQkFJPj5IOj1EOzo/Ojk3PDkyPjouQz4rRD8pRUAqRUAqREEuREMxQ0M3QUI6QEM8QEJBPzxFQT5JQ0FMQkVMQkdNP0lLPUlHPUhCQ0k/QDwwSzkrZkY3gk5AjEo8jj8ykzcooz4sqD0pqT4qqT4qqkAqrkEsrj8rsD0qsDcktjknvTkqwjgrxjgqyjgr0Dku0jsyzjszyjoxyTkwyTkwzDkxzDkxyzgwyTYs0T0z1D0y0TkuyzEnzjQq2Dww2Tsw1zMp4zIo5zEm6TEn7DEo7zAo8S4o8y4o8ywn9y4n9C8n8DEn6TMm4DUk2DUi0jchzjgg1Dkl1Dck0TYk0DUj0TUm0zcr0Tctzzgv405H51dO5llQ2lFHzEc+w0M4vUE1uD8utjwntjwltjwltzomtzomuTopvT4vw0E0yEM6xT82yUA60UZB1ElG1UdG1khH3kpK5UVH50FD7ENI9UxT+1BZ+k5a+ktc+kpe9kRc9kNg+EVl+0lr/05y/1B3/1B3/VF39lZ48VZ29FV1+1h3/1x4/1t1+lJp8Upe/Vdr9VRk6U1b9V1q30tZ5lRh5VRh1llhwGZlx4R+5aun/9PO/+zo//Px//j2//3++vv9+Pz/+/z/+vv9+/v7+/r4+/f0+/jz//v1//z2//z5//z5//j3//Pz/O7u+evr7+Hh6N3b4tnU4drS5d7U6+fb7+3e7/Hj6/Lr2uXfzdjUPT01OzsxODgwNDQqMjIqMjIoMzMpMzMpNDQqNTUrNjYsODguOjowPDwyPj40QT8zSkI3TUQ1UkY4VUk5V0w6V0s7Vko8U0pBUUtNW1dlbW2HgYOqkJbKm6Pioqz0pq/8qbD+pKv5oKbynaTsnqPnnKDflpvVlJfMkJLCh4myeXmfammJXl56V1RvUlBmT01jTUthSUdcREFSQD1GPDo7PTozPzsvQD0sQkEtQEItQUIyQEQ1P0U7PUQ9O0RBOkNIPURUQkheTFNmVVxuXGJwX2NuYWJnZGBhZlhVYUpCaUc9g1NFlFdFkks3kD8qmD0op0Iuq0Asq0AsrUAssEEtskIusD0qrzcmtTgmuzcowjgrxjgsyzcrzzcs0zkv1Tsx0Tgwzzgx0Dcx0Tgy0zo00zoy0jgw0DYs3EI41DcuzzIp1Tcs2z0y3Twy2jkv3DUs5DIo6zAn7TEo8C8o8y4o9C0o9iwo9Ssn9y4n9C8n7jIn6DQm4DYl2Dcj0zgkzzgjzTgizTgizjckzTYj0Dcn0jkr0TcrzTUqyzQr4k1G82Rc62FX1E5Fw0A2uTsvtDkqtj0otz0ltz0muDsluDkmuzonwDwtxD4yyUM4yEI5zEU/00xG00xIzUZDzEVC1UdF4khI5kNE6EVI8UxQ+FNa+FFb909c+U5g9Ehe9EZf9UZj+Upp/k9w/1F1/1N3/1V57lVz7Vp29156/F15+VVw801l+FBn/1ps/1tt/2Nz701c91Vk805e/FVn9Ete5FJfwF5fu3Zx15yW+crE/+Xg/+3q/vTy///9+//++v//+P//+v/++/36+/v5/fn2/Pn0/fjy//r0//r3//r3//b1++/v9+np8+Xk6tzb59nW49jS5t3U7+fc+PLk/frp/f/x8/rz4Ovn0t3ZQD00QD4yPjsyPDouOjcuODUsNzQrNjMqNTIpNTIpNTIpNzQrOTYtPToxQD00Qz80SEA1TEM0UkY4VEg4Vkk4Vko6WU0/WU9GUklMVVFfZWWBen2mjJPKlp/inan1o7D/qLT/qrP+q7P8qrL6qrH3p6/wp6zspqrnn6HamJnPjI6/f4Cwc3KeaGWQXVqFVlR8WFF6WFJ2Vk9uTUhfQz9NPTtAPTw4QEA4PT8yP0M1QkY4P0U7O0I7OkNAPkZIPktURFZsUWaBYHGLaHSMc3WMf3iKgW9/f19qiVpikldZnFdSpVVMpEw+n0AunDkinzkipzwoqj0prD8qr0AssUEttD8ttj0quDspujYnvjYoxDYoyTcqzzcs1Tgv1zku2jkx1jcx1zoz2Dkz1zgy1jcx1Tcu2jkx3Dsz5UQ83j0z2Dct4UA2/FtR/21i/11S5z805DIo7DEo8TIq8i8p9Com8ygk9ikm9ywo9S4p8i8p7DEo4zEl2DEh0jEf0jUk0TonyzolyjwmzDsmzjsn0Dop0Tkr0Tcr0Tct2UE2zjcu3EdA9GRc5FdQykE5xUA5tTUotzomtjwkuT0lujwmvDsovjspwTwtxT0xxj0zykQ71k9J3VhR009KwD85wD86z0hE3khH4UZE5kpL7lBR8FFW7k1V7UtW8Uxa+FFj9k9j9Utl9Epl+k1r/1Fy/1N0/FN08ld27lh181l1+1t1/1x1/1lw/1ds/VZo/2Jz/Vdl/11r/1tq8UZW8URX/1Fl7lZjxmZnqmljyZCJ5baw9tPP/+rm+u/r+vbz+Pz7+f//+P//9//9+f76/v78//v4+/by/frz//r0//j1/vbz//f1//b09ujn5tjX49XU3tDN4NbN7+fc/PXl/fjl//zp///x+v/45/Dt2OHeQkA0QT8zPz0xPjwwPDouOjgsODUsNzQrNTIpNTIpNTIpNzQrOTYtPDkwPzwzQj41Rz80S0E1T0Y3U0c3VUg3Vkk4WEw+V01EVEtMV1FdZWJ9d3qjiZDHkpzhmqf1oa79qbX/qrb+rbf/rrj/rrf8rbb7rbT4rrP1pqrqoaLilpjVi4vHf364c3KsZ2afY16WX1aLYFaIXVR/VU9xTUliRUJTQkFJQEJBPD04QUI8RUZAQ0Q+Pz89Q0FCTkxRV1djYmeEcHSXf36ghn2ckXybnnyXpHCHo190q1hotlZhulJTtklEsEA0rDspqzsjrD4lpjcjpzglqTklrDkmrjknsTgntDcltzUluzMlwTUoyTcq0Tov2Twz2z003zwz3jsy4D023jw33Ts24D025EE650Q950I85UE45EA35UE44j822zku0zEm1zUq6Uk9/1tP8UA27TUr6isj7Ckj+C0p/TAt/Cwq9ikm9zAt8zMu7TYu5DYr3DQn1DIj0zMlzzYkyDokyDwlyTslyzolzjgnzjcmzjUnzjQo0zkvzzUr1D025VBK5VRP20xGzEE8tjAlvDsoujwluz0mvDsmvToovjkowTkrwjosxj4yyUM4005F21hQ0lJJwEQ8vkI6y0dC20xG3klF5ExL61NS7FNV6VBT6U5U605X9lVk91Rl+VNp+lJr/FJt/1Nx/1Nx/lNz8k1t91Rz/1t5/197/1t0/VVs+lNn+lNl+1Zm91Jg/Vto/Vto8U9c9lRj/Vho31NetmFell1UtYB61qmj7MnF+uHd+Onm+/bz+fv4+P/++P//9v/9+f76/v78//z7/fj1/Pn0/frz/fj0/vbz//j1//b09ero6dvY5NbT29DK3tTK7ubZ/PXj//rm//3o///v+f735/Dr2eLfRUE1REA0Qz8zQT0xPzsvPTktOzcsOzcsNzMoNzMoNzMqODQrOjYtPDgvPzo0QDwzRT40SUE2TkU2UkY2U0Y1VUg3V0o6WEtCVkxLVlBaYV93c3WchInAj5jblqTvnqv5qLT8q7X8rrj/sLr/srv/srv/s7r/tLj/rrL5qazxoKPomJjejY3TgoHHd3a8cm2waWChZ12ZY1qRXVeFVFJ3TExmQ0RWPz9JNzY7QT0+SkJATEBATj4/WkZIb1ZcgGRzlnKWo3qmrX6osXqht3WbvXCSwWKAwFRuwUdczktZ0ElQxD06uTYstjkntT0lsDwjrjsmrjsosDspszsqtTwpuj0rvjwswTwtwzcoyDkr0jsw2T813kA14T414Dwz3jox2zgx2DUu1zQt3jkz5kE76kY96UI64zw04jsz2TUr1zUq2Tcq0jIkyysd0zYn6Uc69Us+8kA07DQs7i0o9iwq+iws+ysr9iop7yko6y4q6DMs4TUr2zUp1jIm1DIn0DQlyzgmyDomyzonzjsp0Dop0Top0jkr1Dgr0DQo1jwy0zo00zs25E9L7FhW10VFwDMswDssvzwovjsnvzonvzopwDgowDgqvzcpxD4yxkA1z0s/1VVK0VNHw0c9v0M5xkY71ktE2ElB3UxH41JP5VNT4U9Q4k1R405U8lhk9lpo+ltt/Vpv/FZu+VFr+lBr/1Bv/Ehr/1F0/1t7/1t4/1dx/FRr/FZq/lts+llo91ln+mBs82Bq615m7mdu6mdtyV1doF1Ve09EmG1kv5iR27q179PQ8uDe/fXz+fn3+f/79//+9v/9+v79//////z+/vj4+vn0+vry+/jx/fjy//n2//f1+O/q7uPf5drU29HI3NLG7OXV/fbj//zm//7n///s9/3z6fDp3ePfSEQ4R0M3RkI2REA0Qj4yQDwwPzswPjovOjYrOTUqODQrOTUsOjYtPDgvPjkzPzo0Qj41R0E1S0M2TkU0UUY0U0YzVUg3Vko+V01LVk9XXltwbXCTf4W5i5XTlKDom6n0prD4qLL3rLT8rrf8sLj/sLj/sbj/sbj/rrL7qq73pKbwnZ/plJbhjIvXgYDMfHrFdG2zbWapZV+bXluQVleDUFByRkZgQT5RPDZCRjlAUzxCXz9EbENHf05SlV5kqWZ3vWuPyG2Yy2+YyGiNyGCDyFZ3xkpmxDxUxjNG2EBP3kRM0Ts8xTgvw0Auu0EqsDkhqzYiqzYkrjUksDUltTgmuzkpwDssxTsu0EEz1EA02EA13D823j0z3Tkw3DUt2DQr0i8o0C0m0y4o2DQr4Dkx4jsz3zgw2zQr3DUszyshzCod1zcp30Iz2j4v0DQlyS4c50U280k8+kg++Tw28ywp8CQl9CYo+S8v7y0r6TAt4zIs3TIr2DEp1DAn0y8m0jAl0zcq0jkp1Dsr1j0t2j4v2z8w2z8y2z8y0TUp5kxC40pCzTUw30dE8FpZ3kpK00I/xzsuwzwpwjoqwTkpwjoqwTkpwDgqvTgpwTsvwT0wyEY4zk5BzU9Bw0g5vkM0wEI0zkg9z0Y81ElC2lFJ3FFO2U5L10tM20xQ6ldf8lxn/GFv/2By+lht9E5m9Exl/E1q/09y/1J2/1Z1/1Rv+1Vr/Ftt/2Vz/2l3/2Zz+mJu9GJs7GVs4WZp12lqy2dltGdfjV9SZUg6fl5TqYh/yqum5MjF7dnY/fLw+Pf1+P359//99v/8+v79//7///3///r6+/r1+vvz+vry/frz//z4//z2/fbw9+7n6uDX3dXK3NTH6+bT/fjk///m//7l/v/q9/vt6fDo4OXeS0g5Skc4SUY3R0Q1RUIzQ0AxQj4yQT0xPDgtPDgtOzcuOjYtOzYwPDcxPjkzPzo0Qj41RUE2SkQ2TUY0UEUxUkYwVEc0VUg4WE1HVk1SWVZna2yLfYGwiJLNkZ7imaXtpq73p6/3qrD6rLP7rrT+rrT+r7P9r7P9qq74qKz2o6fxn6PtmZ3nkpTfiozXhobQgYDGeXa5bGyqYmWcXWGRV1qDUlFxTklgV0ZZX0NRbUJMf0ZNlk1UrFVdu1phyVln2VJw4lJ131Rz2VBq0kpgy0JUxjhIwi481DhF40NL40dK1j47yz41y0c4wkgztj8ptj0stj0suj0rvT4twkAwx0IzzkU100U310U42UI32D4y2Tsw2TYt2DQr2TIp1zMp1DEo1TQq2TYt2zgv3Dgv2zct3DUs3DUs0y8l2DYp1zcpzzIjzTIg0Ton1D0q0jso1Twq5kQ39kpA/EU/+TY09Sot9Sks9i4w9jY17TUz4jMu2jEs1zAq1TAq2C8q2TAr4zgw4Tkw4jov4jww4D0u3z0u2z4v2j4x0DYq71dM+GFY0Ds10Ds35FBO20dH5FBOzT00yDosxjgsxDgrxDotxDwuwTwtvjorvDoquzwrwEEwxUc4xkg5wkQ1vT8wvD4vyUc6yEY5zUg/01BG1lFM005J0kxL1U1P51pg711n/GZy/2d3/F1v8U9k8kxi/U9q/1Z3/1N1/1Nw91Nr9Vxu+Wh1+2t19mZw+WVx8V9q619o6Wpx3HJ0wWllqWVcnGxefmdVWUk5a1hKlHxyvJ+b3cHA69bV/e3t+/X1+/v5+f/9+P7+/P3///7///z///n8/v/5+v30+fzz/f72///4//74//r0//jw8Ofe49vO4NnJ7unV//rk///m///j/f/n9fnq6/Hl5uneTks6Tks6TEk6Skc4SEU2RkM0RUE1REA0QDwxPzswPTkwPDgvPDcxPTgyPjkzPzo0Qj84REI2SEU2TUY0TkYxUEUvVUYxVUg3WUxDVEtMWFRiaGmFfIGriJLHkp3dl6Tqpa32p635q677q7H9rrH+rbH7rbH7rLD6qKz2pqr0o6fwoaXunqLrmp7nlZnikZXcj5LXhonMeoC+cniybXSoa2+caWeMaV58eF91gFdpjlBfoVBZulJbzVRd1U9W20hS5UBR50BR4UNR3EVO1ENIzj9ByTk5yDQ040lJ50lK30FA0zg0zDkyzkE3x0M2vT8wwkQ1wkQ1xEU0x0U1y0Y30EY51Uc510g61T4z1Dwx1Dgs1TQq1TIp1zMq2zQr2jYs2jcu3Dsx3zwz3zwz3Dgu2TUr2TUr2jYs0S8i2zst2j0uzTEixS4bzTgk0D0pzDklzDkn0jkp4Dou8T43/0A//zw+/DQ28S0v6Ssr3ysq1yom0yso1y8s3DQx5Dg46Dg47zc18Dc07Tgx6Dcv4jYq3DYo1jQn0TUmzTUn5k9E/2xi2kdAxjUw1EJC0T9A6lZW10I80T0zyjctxjYrxjotxT0vwj0uvz0tuTopuj0rvUAuv0Iwv0IwvUAuuz4suj0rwkQ1wkQ2x0k9zlBE0VJJz1BJz05J009N519h7WJn+mhy/256/2V19FVn9FFm/lVs/1h1/1dz+lhv8V5u82129XZ9621x3Flf72Jr72Ft62Js7nJ664eJzIF8qHRnlnlnc21XT046X1ZHg3FnrpWR27++7dXV++jq/vT1/Pr7/P3/+f3+/f3///3///v///n+///7+f/1+P70/f/3///4///4//71//70+PHn7ObY6OLS8vDb/vzl///j/v/g/v/m+Pvo8PTl7vDjUU49UE08Tks6TUo5S0g5SUY3R0M3RkI2Qz80Qj4zQDwzPjoxPjkzPjkzPzo0Pzw1QEA4Q0M5SUU5TEY2TkYxUEUvVUYvVUg1V0s/UUlGVVJbaGiAfYGniJLDkZ3Zl6Hmoqj0paj5qKn7qaz9rK39q677q677qq74p6v1panyoajuoKftoKfrn6bqnaTom6Lmlp7fkZnaipTRhZDIgoy/gYi0goCnh3qYjW2FmGN3plhoulJdz01X30hR50BI6TxA6Dw64z823EQ31Ug3zEk1xUcxwkQuxD8u4lRI30g/2Ds21TYz1zg11js50Tk2xjcxvjotuzwrvTsrvjorwDgqwjYpwzQmxDIlzTUozjQo0TMo0zIo1jQp2DQq2jYs2jgt3j0z2z0y2zsv2jou2jgt2DYr1zUo1TMm1TMm0zMlzzQizzYk0Two0D8qxzkhvzEbxzklyjQl0zEm5DYv+Ts7/z5A/zg79TI26i4v3y0t2S0r1y8u3DQz4jg46Do87zg69DIz9zEy8jAu7TIt5DIo3TEl1TIjzjIjyDIjzz0u+mpf41RMxzgy0EA/yzs741FR4kpF20I80DkyyDUtxjguxTswwT0uvjwsuTwquj8tu0Esuz4quTwoujsouzwpvD0quj8vuj8wv0M3x0s/y09Fyk5GzE1Hzk5L5mFi6WFl92dw/256/2l491pr9lVn/Vpv/lpy+V1y62Fw5Gty6X1974eG5nh3119h8Ghy/G568WVy6mx39pGV7KKfw5WIoYx5aGxVSFI6V1ZEdGhcoo2I2b++8NbX9+Pl//T2//r8/v7/+/z//fz///3///r///j9/v/79//09/3z/P/2///4/f31//30///0/vrv8/Dh7+zZ+Pbf//3k/f3h/f7f///l/f/q9/rp9vfpVE4+U009Ukw8UEo6Tkg6TEY4SkQ2SkQ4R0E1RT8zQzwyQjsxQToyQToyQjszQDwzQUE5Q0M5SEY5TEY2TkYxUUYwU0cvVUg1U0k9UEhFVFFaZ2h9fYGni5PEkpzXmKHmnqHwoaL1pKT6pqb8p6n8qKr9p6z9pqz4pKr0oqnvoKfroqfpo6jqpKnrpajtoajulqDlk6DkkqDdk57WlJzLmJa+no2vqISgo2V8s1xtwlJiz0lU20FL4z5E6jtA6zs76j834kAx2kUx00gxyUkwwkYsvkIqwj8r4VNF3EM73Do34z096UNF5UFC2Tk7zDY1y0I4x0U3x0M2xkA0xj4ywzkswTUowDIkxTMmyTInzTMp0zUq1zQr2TUs2TUs2TUs5EI33T0x2DYp2TUp3Dgs3Tkt2TYn0zEi2DgozTIgyjEfzjklzDklxTQfyTgj0UMvxTYlyzgo1Tcr3DUs5TQu7TUz9Ds5+UA+/0xL+khG8EJB6z896Ts85zc65DE15Ssw8ysu9iot8y0s7y8s6DEp4DQo2TYn0zgmxjAfvS4d8mRW6l1TzkE600VByTs5301N6FNP30dC0Tw2yTYvxTctxjkvwjosvjspvTwpv0AtvkEtuj0ptzgltzgluzwpvD8rszgosjgpuD4xwUc6xUs+xUk/xUk/yktE5GBc5V9e8GVo/m91/Wp0811p8Fhl+F1r915w82Jx52Vv4Gxv6399946K84aD6HJy93F4/3uE9GFx3ldl9ImR/rSzz6+inZuEXWxPQ1M4UVQ/amJVm4iB2MC+8NjY9d/h//T3//r9//3//Pv//fz///7///r//fj8+f/68v/x8f3x9v/z+v/2+fzx/f3z///0///z+fbn9/Lf/Prl//7l/fzg/v3f///n///x+/3w/PzwV1BAVk8/VU4+VE09U0w8UUo6UEk5UEg7S0M2S0M2SUE0SEAzRz8yRj4xRj4xRkA0RUI5REQ4SEY3TUg1UEo0UkozVUo0U0s4Vk5DUk1KWFVgaGiAen2miI7CkJjWl57ko6T0pKH4oqL6oaL8oKT/oaf/oqr/oaz7oavzoKnuoKjppKfqqqntrarxr6j1qqn3nqn4lafxkqHilZ/UpaPLs569toWbtmh4vExa0ERP3j5K5TtE5jtB4z0/3z8/3kA94T0+3z073EQ/yToyykQ5yUU5ujEn2ktD5UpG6ERD6D5B6Ds/5Ts+4Dw92jw70j05zkE6xT80yEQ40U1BzEo9vjwuuDYovDgrvDYqwDYpxzQqyzIqzi8p0zAp2TIs3DUt5UE13Tor2TIi3TMk4zko5jwr3Tgl0zIezjMdyjQcxzUexjUgxzQiyDUlzDYnzjYoyTEkzDImzzUp0Dcp0TUo1DQm1zMn2zMm4DIp5TQu6zUy6zMz6C4x5iwx5ywz7C009S4z8yst7iwq6zAr6DYs4jgr2Dcl0DUjwy4awTMf5llI6FpMyjwy3U5GwzQu2ElF4FBP2ktH0kM/yzw2xjcvxTcrxzkryDwrxTwqwDsovTomuzolujsouj0ptz0otTwpsjgptDwuuD4vuT8wu0AxvT8xwEAzw0A27mth9G9o6WJe9G1q+nBw62Bj9Ghr/3F3/214+Wh17mVt6GNo6mVo7W1s7nFv7nFt+nh4/32D91tp+2R33WNw+Kyus6uYepF0W3NRSVo4TFI4cG5Zo5WIybav6tXS/+7t//b3//f4/Pj5+/v9/f7//v///v3/+f/97f/z5f7p5Pvp7f/t+P/2+//0/f/y//3w//3u//vr//ro//jl/vji/fng/fng+/rl/v70/v/6///6WE9AWE9AV04/Vk0+VEs8U0o7Ukk6Ukk6TkU2TUQ1TEM0SkEySUAxSUAxSUAxSEAzRkQ4R0U5Skc4Tkk2UUs1U0s0U0s0U0s4Vk5DU05LWFVgaGiCenyjhYu/jZXTk5ren57qn53wnZ3zm5/4naL9nqX9n6n+oaz7n6vzn6rsn6fmoaXlpaToqKLqqKDto6Dvnqf2mafumaHfopvOsZi/vYypwnGEwlRh0URN4T1E6jk/7Tg96Ts94z0/3EE/20FB3TxB2jk/2kFDyzs6zEI/x0A8wDIu5FBO5ERG6D9E6To/5jc84Dc62zg50zk3zjo20kU+xj01wz00y0k8zEw/wUM1tjsstjgpuTcpvDYqxDYsyTUr0DMs1jMu3jUy4jky4j4y3jss3TYm3zUm4TYl4DYl2jUi0zQfzzkhyjogxTkixTolyTwqyjsryzcrzDQp0jQr0zUs0TcrzTcoyDUjxzQgyjMgzzQg2DIk3TEl4zAp5i8r5iwt5S0v5i0y5y4z6Sst6y0t6TAt5TIr4DQo2zUn1Dck0Dkk0j8ruCoW00Qzzj8x2EU76ldP10I+1kJA5VVU4FJQ2ktH0kM9zT00yTkuxzgqxjkoxzwpwzonvzsmvTwnvD0quj8tt0AstD8trzkrsTsttj4wuD4vuT4vvD4vwEEywkM062lc8W5k5WJa8Gtm9W9s52Fg8Gpp/HR4/3F7/2959mly615k6Vpe7mJj9nBt+3p1+HZ0/3d7+FNk/Fpv4l1u9aapp6aSaYxrWnRPTmA6UFk6dHRap56N1MS38+Da//Pv//r5//n4/vr5+/v5+v79+f/9+f388//36v/y4P/o4Pzl6P/q8v/w9//x/P/x///w//3s//zs//ro/vXk+fLf+PLc+vTe+vfk+vry+/z3/v78WVBBWVBBWE9AV04/Vk0+VUw9VEs8VEs8UEc4T0Y3TkU2TUQ1TEM0TEM0TEM0S0M2SEQ4SEY5S0g3T0o2UUs1U0s0Vks1VEw5Vk5BU05LWldiaWmBeXuhhIi4ipDKkJXVlpncmJjgmJrnl5ztmaDxm6P0nqf2oKn0n6nunajmm6Phm6HdnKDfnp3hnZrhmpjhk5remZraopXNroy+voGqxnGQxllwxkNR1UJM3z5D4z0/5T095Tw/4j4/4T5B3z5D4D1C1jc71T9AzkA+yUI+wTw3wzgz6VhV30FC5D5C5Ts+4jg72zc41DY1zjkzyzw01Ec+xDsxvDYrxEI0y0w9xUc4uz0utTgmuDYmvDcoxTcrzTYr1DYt2zYw5Tk15j021jQp1zUo2TUp3DYq3DYo2jco2jso1T4pwzUfvTUduDYguDcivDknvDgpvDQovi4j4T864j033D4z1DstzDknyDciyDcizDch0jcl1DIj1jAk2S4m2y4q2y8t2y8t2i4s2i0p3jEr3jYt2jYq1DQkzzQizzgl0D0p00IvwDIe5lVEzzsv2UA43UI96EpJ71VT61VU5VRR4VBL2kpC1kM7zzwyyDkrxDcmwzcmvzgluzgkuDkmuTwotz4rsz4ssD0rrjorsDwtsjwusj0stT0tuD4vvUIzwkQ221tQ52dc4mJZ8Gxn9HBs5WFf6mVm8mtv4FNc7l5o9Whx8mVr8WBl9GVn+XJv/Xl1+HRy/2518klc+FJo41ps7pygoZyIYH9dVW9IUGU+VmE/dXhbq6SR39LC/u3l//fw//z4//35/f74+//6+//9+f/9+f/78f/25v/t2/3i2ffd3/ng6Pvl7vvn9fzq/P/s/Pvp//vo//jm+fDf8urX7+fU8+vY9vDg/Pnw/fz3//76WlFCWVBBWVBBWE9AV04/Vk0+Vk0+VUw9U0o7Ukk6UUg5UEc4T0Y3T0Y3UEc4T0g4SkY6S0c7Tkg4UUo3U0s2VEw1Vks1VEw5VkxAVU1KWldgamh9eHiagYSxh43BjZPNkJXPk5TUk5bZlJjhlZvnl5/qmaHqm6Prm6TlmKLflZ7XkpvUk5nVkpbVkpPWj5DQhYS9kIS2o32utnSix2aP0Fd400dh1DxL3EFH30FC3UJA30E+4EBA4z5C5j1E5j1E4j9E1Do80D4+z0VCxkE8ujYxxD036VpW3EJC4j9C5j1A4Ts92Tk50zk3zT01y0E3zkQ6wTktuTMnvzssxUY3w0Y0vD0stzgluzcowTkpyTos0Dos2Tgw4Dkx5jo26T432DEp1zMq2jMr3TUs3jYt3Tcr2jos1TwsxzgnwzonvzwqvjwsvTstvzsvwjwzzToz60NA7UA64z822DwvzTooxzklxjojyTsjzzwozjckzjEi0DAk1DEo1TIr0jEpzjAn0TMo0jQp0DcpzjYoyzUkyDciyTslzD4oyjwozj0s811P30c80TIs0S8s5T8/+VZX/3Ry/3Ju/2tl9F9Y5VFH1EI1xDUlvC8exDgnvzgluzgmtzootTwptT0ssT4srTwsrDstrDwurj0trzsssTwrtD8uu0Eyv0U2yU1B3l9W4WJb8XBr9XNx5F9g4l1g5F1j1UlS5lli82dw9Gdt9mVs+mtv+3Nz/HZ1+XFz+mRt8ENX80ph5Vhr65KWnZWCXHpYUWxDUmk/WmhEd3xcrqqR5tvJ//Tn//jv//vx/f3z/P/2+f/4+f/69v/48f3z6fvr2PnezfLRyuvMzuvN1+7S3e/V6PLa8fbg8/Xg+fbj+/Ti9Ova6uHQ6NzM7eHR8ejZ/PXt/Pfx/vnzXFBAW08/W08/Wk4+WU09WU09WEw8WEw8Vko6Vko6VUk5VEg4VEg4VEg4VUk5U0o7TUc7TEk6UEo6Uks4VU04V0w2V0w2VU06VUs/VE1HW1ZcaGV2dHSQfH6lg4e2iY/BjZDDjpHGkJLNkJTUkpXak5felJjfk5relZ3ckZrVi5TLh5HGg4zDgYfBfYPBfn+3fXSfjnCUpmiPv12E1U524UFj5jpU6DlI5kFH4EVD3EdB20hB30VD5kFF7jxI7T1I40JH1D4/zkA+zklEvz82sjMqx0I74FVQ2kVB4EJB4j9A4D0+2T461EE6zkQ6zEY7xT0xvzcpuzYnvDknvz0tvT4rvTwpvDsmwDsqxzsqzjwt0zst2zgv4Dgv5Tgy5zo05jk14zYy4TIv5DIu5zQw4zUu2zMq0i8myzEnyTcqxzowwjguwDMswjQwyzs620A+6Tk77DYz4zYw1zUqyzUkxDYiwzghxTojyT0myTgjyjQjzTYl0jkr1Dou0zktzzkrzz0uyDsqxTgnwzglxTonxT0nxzwnxzomzT4tzDkp1z0x4EI51C8r4zk53zEy3zU21DUy1js23UQ+5EtD6FFI6FRI51VG41ZFyUAwwz4tvjwstzwqtj4ts0AusD8trj8uqjwtqz0urD0sqzwrrDsrrz4utkAyukQ2xUxB3GJX4GRc73Bq83Fx4mBi5WBl5l9m9mp1+2949mpz62Bl8F9m/Wxx/3l5/3p6+m5x911p8kBW9ENd6FVo5IiNo5SBZoBdWXRJXHZHZ3hOgYhmsrGV5+HL//rn//zs//7v/P/x+//09//09P/x6/zq4/Hg2O7XxejHu+S8ud+4vd+6xeC/y+PD2ObM4evS6+/Y8vHc9/Lf8+rZ69/P59nM6tzP7uLW8efe8ejh8uniW08/W08/Wk4+Wk4+WU09WU09WU09WEw8WEw8V0s7Vko6Vko6Vko6Vko6V0s7VUw9T0k7UEo8Uks7VU06WE05WE03WE03WE05VUw9VE1FWFRVY19tbWuBc3STe32kg4axhom0hoq3iYu+i43GjI3OjI/SjI/UjZDTjpTSiY/Jgom/e4K2dXyyb3ataW+pbGqbgGyIk2N5rVp0yVBv4kNj7zZV9jRM9zhH7UBC5EVB3ElB2kpC30dE50JI8TxL7z1L4kNH1EJCy0E+zUlEuDwyrjQpyUlA1EtF1kI+2D482jw72jw72EA700Q8zEg8ykg6vzcpwDgovjkovTgnuzgmujkkvDsmwDsoxDspyTwq0D0t1zss2zct3jYr4zUu5zYw6DIx5y8v6S0u7S8v8zU18zc27TUz5DIu1y4p1jMu1TYy0TMwzi4w0i802zY96TxC7TA27jAy5TIu2jMq0DQnyDckxjklxzwlxDcjyDckzTcm0jsq2T0w3EAz3UE12EI00kY1yUIvwDsovjkmwDsoxD0pxDsoxTgmzDsqzTcozDAk5kM82jEu7T8+4i8y2Skr1DEs0jUu1Dcw0zkv0TkuzDUqxDIjvjEgzUQ0xkEyuzwrtDkprjkorTooqzoqqTopqjwtqz0uqz0sqz0sqzwrrD0ssD8vtUEyyVNH32Zd32Rd6Gtn7m5v5WJn7Wpw9G51+XB6/HN99m117mNq9mVs/3N4/3h8/3F1+mlw9Vdl+EBY8z9a6FBl4X6Dq5aDeI5obYhbbopZeItejJhws7eW3t3B+PPd+/nk///t+//v9f/v7v/r5fvk2vHX0OPNxd7BsNatqNOmqNGlrtOotdWuvNaxx9q60eDB4ObM5+nT7+3Y8erY7uLU6dvQ6tnP69rS6NvS5NrQ5NfPWk4+Wk4+WU09WU09WU09WEw8WEw8WEw8WEw8V0s7V0s7Vko6Vko6V0s7WEw8Vk0+UUk8Uko9U0w8Vk47WE05WU44WU03WE05V04/VUxDVlBQXllgY2BxaWd/cXCQeXmdfH+ifYGngYKyg4S6hobEiIfJiYjMiInKhojFgoS9e36zdXircHGna2yiZWaebGGMgWBxlVZesE5b0Upb7EBW9zZL/TJF/jlD8j4/6EM930hB3ElC4EZG50JI8TxL7j5L3UFE1EZCx0I7x0g/szovsDcszlBEyEM6zj04zjYzzTIuzzYx0T43z0U7xkc4wkM0vjkowTonwDsovjkmvDklvDokvTslwTomxDkmyzon0jsq1zop3DYq3zUo5DMr6DMs6Coq7ios9S0w+zAz/zI2/zQ3/zQ3/DU4+Dc69Tg88Tg98Tg+8zhD9zdG+jVH+zVE8yo08ywx6zIw4TQu2DUs0Dgqzjsrzj0qyDUlzzcp2Dou3j4y4T0z4j404j4030E22Es6zUg3yUExwzwpwTonwjknxTkoxzgoxjIk0jgs4D836kM93TEv3S0t6TU25jY22DMt1Tcu1jgv1zsv1Tsv0TstzTsuyDos1Ew+y0c4vj8wtDkqrjYmqzcoqTgqqDgqqzstrDwurT4trT4tqzwrqjsqrD0srj0twEw/2WNZ3WRc52xn7nBx6Whs9HF3/HZ/7Wdw9295+HF482px/m10/3d//3V8+Whv+WNs9VNi/kJb9DxY6Uxh3HV5tJuHjJ54fZlpe5dkgJZnj55zrLKOysur39/D5+rP7fbb5PPW2e3RzebIxN/Au9a1s8yuqsikmMKUk8KOmMSRocmXp8udrMuftc6mvtKtztm5193B5OPO7OXT7eHT69rQ5tPM49DJ3c/G2MzA1ce+WU09WU09WU09WEw8WEw8WEw8WEw8WEw8WEw8V0s7V0s7V0s7V0s7V0s7WEw8WU09U0o7VEs8VUw7WE07WU46WU44Wk44WUw5W08/V01DVk5LWlRYXFlkYF1waWd9cHCKdneVeHicfHunfn6ygoG9hYPEhoPIhoPGf328fnq1eXardnKldW6ic2qfcGeeemGJhFFamElFskZG0kdO7UNO+DpG/jZA/jo+9T097UE95kQ/4UZC5ERG50JJ7j5L6z9L1T9A0EdBwkI5wkg9rzktsDou0FRIwz41xzgyxi4pwyolxi4pyzszy0I4wUM0vD8tvzwqwzwpwDsovzonvzsmwT0owDwnwDgixDYiyTYk0Tgm2Dgo3TUo4DQo5TMp6TIq9TMx/jY4/zk6/zU4/y0x/Sgs/Sgs/Sow+ywy9Sow8iYv9ig0/yw9/yo//CA58xov9SEv8Cct6y0v4y8u2jEs0zIo0DQozzUp0zUq3Dov5j416j026Ts06Dcx5zYw4Tkw3Uk91ko70kY3yz0vwzUnwTQjxTYozTkrzTUq0zYt5kM83zgy3jIwzx8f6zk54zYy1DEo0TMo0DQozjQozTUoyjYoxjcpwzco4VlL1lJFykg7vT8xtjwvtDwusjwwsz0xrzktrzsssT0usDwtrDsrqzoqqzoqqzoqsDwv0FpQ22Ja6nBt83d3621x83F59XJ6/XqC/3+I/3mA8mlx92Vv/3B5/3R8/2x0+F5o9k9g/0Jc9jlV6Udc2W9zup6JmKiDgp5tfJpkf5dli5xvoKiBs7mVx8ys0du5y9m4wNSxscuopMKcnbuVmLaQlrKMkLGGibR/hrV+i7qDlcCKm8OPnsOQqMWXsMmfvs6pydKz2NrC5N/M6N/Q59bO4M3H2sfB08K6y720xbeuWk08Wk08Wk08Wk08Wk08Wk08Wk08Wk08V0o5WEs6WEs6WEs6WUw7WUw7WUw7WU09WEw+WU0/WU09Wk08W047W085W085XE88WU09V01BVk1GV05PWFFYW1VhXlppX1xvaGWAbWyOcm+adHKkenazgn2/iILIioPHh369iX+7h3qwg3KmhnKnjHSoh2yjhlyCkEhMokI2tEE6ykM/3T8+6Do79Dw8/0RD9j078T087D496kBB6EJG6UJK6kBL40JKzz8+w0A4uz81tD4yrj0tsDwtvkQ30UxDxjcv0zs2zDEtyzIs00M6xz8zszUmuz4suTYiwDklwzwowTomwDklwDklwzslxjsmyzon0Dkm1Dcm1TIj2C4f3jEj6zYr9D4z9Dcx9TQv9zAr9ywo+Scm+iYl+yUn+yUn+yYq9SIo+CIs/yc1/yg7/yI5/xg0/Rgv/yc47yMs5CMo4yst3Cws0yon0i0p3DUv4TUx5zUx7jY08TU08jIx7y8u7S0s5C4q2zoy0Dku0Dkw6lNKuiMawisg3kU9yC4kyy4n3D4150Q94Ds11i8p2S0p4jUx5Ds03D4z1TwuzTUoyTMlyjYqzTsuyTsvxTks6mJW31lNx0M3uTcqujovtzktsTMnszUprzElrzEjrjMkrjQlrzcnrzopsTwrsj4vsDouuUM51l1V6nBt8HR29Xd7+niA83F7/nyE+3iA93R6+3R7/3N9/3J9/214/mhz/GBt8kpb/z5Z/D5a40BV02RqtJWAkqF6gZ1qe5ljfZVjhZZpk6B1nqZ/nqiDmaeDkqN/iaJ7gJ91eJxwd5tveZ1vf6BzgKVygq11g7N3ibl9j7yBkr2Fl76HnL6LoL2NpruSrryZvcOnzs243dTF4NLJ3MfC0767yru0v7KquKujWUw7WUw7WUw7WUw7WUw7WUw7WUw7WUw7V0o5WEs6WEs6WEs6WUw7WUw7WUw7Wk08WUw8Wk09Wk08Wk08W047W085W085XE88W1A+W09BWE5FWE9KWVBRXFNYXVZdXlhkYVxzZ2KCbGePbmqcdW+rf3q6hn/DiYDDjYG/j323jXWpi22fl3GkoHSnmmqcmFZ6nT1BpzUqsDYpwT0x0EA33D825z438kA89Dw68zs78js/8D1B7UBG6EFI4UBI2EFGxTs4vDwztDswrzsuqjkprjorvEI1zko+10c/20I91Dcy0DUw1EE5zEI3uTorsTQiuzgkwTomxD0pwzwowzwoxDsoxjsmyDomzjgnzjUj0zMj2TMl4TUn6Tks7jku7zku5TAl5jAl6i4j7iwj9Csk+Csm/Ssq/y0u+iks9yQq+SMt/yY0/yU5/x01/xMw/BQu9R4u9i459DI75Csx2icr3C4w3jAx2yst8Dk78zY69TQ39TEz9i8y9y8x+DIz8zc22jEs2jwz1jcx40Q+4kU+zTApzzItwSIc0zQu3j855kQ/4D021jMs1jIp3TYu3Dkw0joszDkpyDYnxzUmyDkryjwwyDwvxDov7GJX4FhMyD81uTMowDovwTswvDYrwTguvjQqvjQpvTUpujQotzUntDYnsTYmrzcntDwuu0I301pS521q7XFz9Xh8+3yD93V//nyE+niA+XZ8/HV8/3N+/3B7/2p1/GRw+19s9Elc/z1Z/z5b6UNZ0mRnrY12iJdueJRhdJJcdo5cfZFgiJVpjJluipZug5NscIdda4hcaIlcZoxbapBfcJZjdptoeaBpga1ygrJ0h7d5jbt9j71/kb2AlbyDmr2HmrSFobOLrLeXvL6mzca01ce81MG7zru3xLazuK2psKWjWUw7WUw7WUw7WUw7WUw7WUw7WUw7WUw7V0o5WEs6WEs6WEs6WUw7WUw7WUw7Wk08WUw8XEw9XEw8XEw8XU47XU47W085XE88X1JBXVFBXFBEWU9FWU5KWU9NW1FQW1FZXFNmYll2Zl6FamKRcGujfXezhn2+iH67l4W/mIC0mnamnnCerXShunejtGiWsFJ0uDxEuzUsuTUpvzsuyEM00kQ42kI35D858D489Ts+9zpA9TxC70BH5UBG2UBDzkA/vzoztjourzkrqzoqqDkorDgpu0AxzUc810Q91To11zg02Tw320Q73U9DzUk6szQjvjkmwDkmwjsoxT4rxz4ryD0qyTopyjkmzzgnzzIj0zAh3zUo6z0y8kA28Dkx6DMq3jQl3jQl4TEi5S8i6S0k7Swl8Con8Sso8iwr7icq8iYv9yc0/CU3+x00+xcy9xcx8yQ28S868TY/8DhA7ztE7TxE6TY84i007zI58jA58y439S419C0y9S4x8y8w7DMx2y8r4D042TUz3zs5/2xp5EI/0S8tzi8r2To23j854EE72jwz1Tcu0zUq0zUqzzYoxTYlwjckwjYlwjkpxDotxDwuxTswxTsx6mBW3lRKyDsyvzAoyToyzz82zjsz0T0z1j011z011D00zzwyyTsvwTkruzcotTcotzsvu0E2z1RN42hj629v9nl9/4CH+nuC+3yD+3mB+3iA/nd+/3R//257/mZz+l9t+Vtq9Edb/ztX/z5Z7EZazV9gnX9ldoVaaIRRZoRObIRSc4dWeYlce4hddYRbb4FXYHpNX39QYIRUZY1ZbJRfdJtkep9pfKNqga1wg7Fxh7V1irh4i7l5jLp6jrp9krmAkrB8lKt9mqiEqKyRubSgxbmryrmxyLa0tqyrp6GhnZeZWUw7WUw7WUw7WUw7WUw7WUw7WUw7WUw7V0o5WEs6WEs6WEs6WUw7WUw7WUw7XEw8W0s8XEw8XEw8XEw8XU47XU47W085XFA6XlE+XVA/W08/Wk5AWk1EW05GXE9JWk5OXlBfYFRsZFl7Zl6Hb2ibenWtg3u0hXqymIS3pISzr4Cqt3mgxnmd0HSZymSLxk5q2UVR3UJA00M7zUQ6y0c6zEY600U53EI67EA+9D1B+TxD9z5G70JG4kJE0kBAxj87vj41tTsurjorqzoqqToprTkqvD4wzEM51D020zQw3zs55UE/30U951RK3lZIvjorvzopvjckvjckxDspyT0syTwqyzopzjgpzTQm0TEj2DIm5Dgs8D818z417TUt4y4l3zUo3DYo3zMn4zEn5i4m6Swo6yso6ysq6ikq6Ccs6iYw8io39Sc79iI5+iA7+iQ++zZH4ig15S87/1Bb/2Bs/09b8T1I8TlF6Co27Ss28C438zE58DE26S8w4Sso1ikj1TAq2DYx0zEu5EI//3Nw9VZT3D065UdE2jw52Tw31Doy0jgu0DgtzzcqzDQmxDMivDUhuTYiuzgmvjorvzssvjotwDovxDsx41lP2k1EyjcwxTAp1Tw23EI62Tw13js05j045z435EA34D812D4yzz0wxzssvzoruTksujwwy09H32Rf629v+Hx+/4SI/H2E93h/93h/+niA/3iC/3R//216/WVy+V5s9lVl8kVZ/ThU/jxX7UdbxVlZimxSYnNHWnVCW3hCYnpIa39OcYFUc4JXcYJWbIFWa4ZZa41bbpRhdJxne6Rsf6hugqlwg6tvhK5vhLBxiLV0iLZ1hrd1hrd1irh3jrh5kLN7j6t6kaN7mqOEq6uTvLOixbeuxbe0sautoJ6jlZKZWks4Wks4Wks4Wks4Wks4Wks4Wks4Wks4WUo3Wks4Wks4Wks4W0w5W0w5W0w5XE06XEs7XUw8XUw8XUw6XU47XU47XU45Xk86XE88W047W049W049XE8/XU9CXU9CXk9KYE9ZYlFkYVRuY1l7amWOdXKhfniogXWjlH2nq4WqwompzoKe2XaS3myG2ll12UVd8kNU+UVQ70pO3khHz0Y+ykQ7z0U72UQ+50NC70FD9D9E9UJI60VH3kRCzUI9wj83vEA0tT0vrDsrqjsqqTonrTgnujotyz414EVA4Dw660I/6UE+3Do140pC5lhM00s9yEAwvTgnujIiwDclxzsqyToqyzcpzzcpzTEk1TMo3zcu6Tsy7Toz7TYw6i8q5Csm4TAq4DEs5zEu6zIw8jEy9TI29jM39jU66yw06iw27C088C9A8y1E9ClG/CtL/zRR8zhJ5DI+70FL/2Bq/2t3/1dk9ERR9D9O7TRC7DRA7DQ+5zY84jg42jcyzTMpxi8kyjMqxS4lzzgx8VpT9l1Y8VdV20E/4EhF20NA0zs2zTYvzTYrzTktzTkryTYmwjUjtjgisTgjszoluD0rtjsrtTcpuzksxD412U9F10c/zTYvzjEs3z425UE44Tgx5TYx6jEv6zIv6zUx5jgx4Dkw2DovzjosxzssvDYqujgryElA3F9Z6m5s+X19/4aI+36C83Z89nd++niA/3iC/3OA/2x7/GRz+V5u8VJk80Vc/ThU/j1Y7ktcvlVSel9CVmc6V3I/W3ZDZHpJbH5OcoJVdYRZeIldd41fd5RkdZpneKBre6Zuf6twgqtvg6tvhKptha1vh69xh7Rzh7V0hLZxhbdyhrhzi7h3jrZ6jK14jaR2lqSAqq2SvrmlzcG1z8TAu7m+qKu0mZunWks4Wks4Wks4Wks4Wks4Wks4Wks4Wks4WUo3Wks4Wks4Wks4W0w5W0w5W0w5XE06XUo7Xks8XUw6XUw6Xk07XU47XU45Xk86Wk06W047W047XE88X1A9YFE+YFBAYE9FYk5QYk5aX1BjX1VwZ2GFcW+WeXScfHKXjXWVrYKdyoug2oGT43OD6mN051Bj6D1Q+DRK/ztQ+0VS6ENK1EBAy0A9z0Q/1kVA4kRD6EJE7kFF7UNG5UVF2URAykE5vz80uT8ysDosqTgoqDkoqDkmrTgnuzksyToy50pF6EA/6jw74zc12DMv3kE67VpQ9Ghb2VFBxkEwvTUlwDcnxzkrxzgoyjYo0DgrzzEm2TUr5Toy6Ts06TMv5y4p6C0o6y4s8jQ29TQ5+DM8+zI8/TE8/jA9/DA8+TE+9C9A8jFC8zNI9DRN9TBO9C1O/jJX/z1e5TJF+E5Z/2Fr/19r/lZj+VFg8kZW5zhH8UBQ6DlG2zI50DAyyDMtwjgtvTsrujsowjosvzMm2EtB+Wpi20xG4VBLzDs2zTw330tH1EE6yjcvyjgrzTsszTwryzonwzontDwkqzslrDwmsT4rrzoprjQluTkuyUQ71EdA10Q90TYx1jMu5Tw36jw15jMu7DEs8Ssq8ysr8S8t7DMu6Dcv4Dkw2Dwv0T0vwjYpujQpw0M611hR5mll+Hx6/4aG/ICC9Hd79nl/+3mB/3iC/3F+/2l4+mJx+F1t71Bi9Ulf/TtW/T9Z8E9fuVJNb1g4UmU3XHRCYXxJbIJRdIVYeodcfItggJFlgJdpfptre6BsfKRvfKhtfqptgatsgqpsg6lshatuhq5wh7FxhbJvhLNvgrRthLZvhrhzirR1h610i6V1mKiBr7aXxcOu1s2+2tHMwcHJq7G/mqCuWks4Wks4Wks4Wks4Wks4Wks4Wks4Wks4WUo3Wks4Wks4Wks4W0w5W0w5W0w5XE06XUo5Xks6Xks6XUw6Xk07Xk07XU45Xk86Xk86Xk86X1A7YFE8YVA8YVA8YVA8YE5AY05LY05VYFBdXlVqZ2N+cnGReneWfXOOjnaMrYGSzIaR336H7nF5+GJr91Ba9ztK/ilF/zJO/ztS8TxN3j1F1UBE00ND00FB3ENF4EJD4UFB4UNC3EQ/0kM7xkA1vj4xtz0wrTkqpzglqTonqzwpszsrwDwvzj413z065Dg44zEx3y8v3jUy2zk05U5D+21f8Wda11JDxT0vwzoqyDosyTcqzDUq0zkt1TQq2zcu5Toz6Dcx6DEt5y4r7DAu9TEz/zNB/zBC/y1D/ypB/yY+/yI6/CA59iA49ydB9CpE9S5L9S9Q8ytQ9ClU/zJg/0Jo8URX/19q/2hy91dj7EpZ8Etb6kNU2DFC6EBP2zdCxywwuCgnry8kqzglpT8mqEAnt0AsuTop3FpM4FxQzEY9zEM7wDcxxjs24lVO1EU9yDowxzgqyToqyDkoxzklxD0nsD4mpjwkpjwmqj0pqTgmqzMluzwz0UxD1EdA2kU/2Dk12jMt5zgz6zUx6i8o8zAs/Cws/Sss+i4t9DEt7TUt5jgv3jwx1z8yyTkuvDQovzwyzk9G32Jc9nl3/4eH/4OF+Ht/+XyC/XuD/3eB/25+/WR29l1v9Flr60xe9Ehe+zlU+jxW601bsUtGZlIxT2U0XHRCZn5MdYhafY5hg5BlhZJnh5hsh55wh6R0gqdzf6dyfKhtfalsf6lqgalrg6prhalshKptha1ugq9sgbBsgLJrgbVthLhwh7Rzhq5yjKh3mqyEsrmax8Wu1s282NHLu7/KpKy/kpqtWUo3WUo3WUo3WUo3WUo3WUo3WUo3WUo3WUo3Wks4Wks4Wks4W0w5W0w5W0w5XUw6XEs5Xks6XUw8XUw6Xk07XU47XU47XFA6XlI8YFE8YVI9YVI9YVA8YE87X046YE0+Z05JZ05SYlFbYFdoaWd/dXaUe3ybf3mVj3uUqYKVxoSQ2n2F73R3/Wts/Vla+0NL/DFH/zRR/zxU8zxO5z9M40NL3UJG1j0/20FD2z9A20A+20E/1kM8z0I5xT80vD4wtD4wqzoqqDkmqzwps0Auu0AxyUE110I72DYz4Dc03i8s4TIv5Ds00zAnzjUn6VVH/3dp6VtP0EI2yjwuyjstyTcqyjYq1Dou2Tgu3jcv4zYy5jIx6S8w7DAx8jQ2+zQ7/SY2/yI2/yI5/yM3/yA1/x41/R4z+B807xsy7R447yRB7yhH7SVJ8ChN/TNb/0Zo/2Jz/WBp9Fdg8FBa8FBc7kxZ4T9M0jI82T5EyzY4ujAtri8mpTYloT0mmz8mnD4kqDkmsjgp0VVJujovwz43uzQuuzIszUI941hR1Ug/xjkvxDYqxDcmwzQjxTQhwjsnsTwopjkkpzglqjknrDQkrTElwj8121JK2ElB30hB3Ts22zIt5zQw7DEs7i0o+TIv/Cws/Cot+Cos8ywp6y4o4zEn3DQp1Tcr0D4xvTMmuzksx0g/2F1W8Xd0/4mI/4aI+4CF/YCG/32F/3aB/2p8/l9z91hs9VNo6kRa9ENd9TdT8TtU301aokhAXEwrTGIzVG88YXxHdIxagJZlhplrh5psiKBwiaV0i6t5hax3gKlxe6dsfKZnfKZmf6Znf6ZngKZpgalrgatsgK1sfq1nfrBngLRqg7VsiLdxiLBxi6x3mbCErLqXv8Wpy8q1yszBtL3Enqq6i5enW0o2W0o2W0o2W0o2W0o2W0o2W0o2W0o2XEs3XEs3XEs3XEs3XEs3XEs3XEs3XEs5W0o6XEs7XEw9Wk08WUw7WU46XFE9XlM/XlM/X1I/XlE+YVI/Y1JCYlFBYk9AYkw/aU1JZkxNZFBZZltsa2uFdnubgIWrh4mwjoSnooemvIifzoKP4nl+8HNv+Wth/2Bc9ktU8D1Q6TpJ6z9N7UNQ50BK5D1F4z5E4TxC3Dw+2jw71T06zz83yD4zwDwvtjsrpzYkrUIuqzwpqzgmvUIzykY6zD40zzYw2Tcy2zYw3TYu3DYq3Dkq3Dsp1zsl0zYl2Tsw71JJ8VpP10U4xjcpzD0t00Ey0jot1DMp8EdC4C4u7jU68jU77iw1/0FM7ycy+SYv/ygw/ycx+R4m+yIq/yYu/icu8B0k7h8p9ys26SEu7CY38S1B5CI6/1dx5y1E/15s/l5o/Ftj+VVc81BV6UhN2j4/zTg0yT43xEI1tz8vpTgkmTIflzchmjsnnDsopzksrjcvwkU/vzs3vDIvxDY0xDUx00RA20xG2EtC0UQ6xzktwzMoxzUoyTUnxDYoujwtsTkprS8hqSkcsiwhwTkt0EM510c+41BG3UQ82Tgw2zAp5S8r8TEw+TEx+zEx9y8x9S8w9S8w8zAu8DAr6zMr5DYr2zks1D4wvjIjvj8wtz0w1V5W6HJu/46M+ISE+4eK/4SM/3iF/2h6/193/1t1/lRu+Exm90Rh8DlX8zpZ5T9X2lxnij85VUcsTF40WHU/Z4ZLd5ZdfZxjfJ1mgKFqgqVtgaduf6ZtfqdtfKVpe6Vme6NlfKNkfKNkfaRlfaVpfqdtfqprf6xrfq1nfq5kfrFkgrJmhrRribRvirB1jq58mLOIp72ZscGkssGupLOwi5ied4SKXEs3XEs3XEs3XEs3XEs3XEs3XEs3XEs3XUw4XUw4XUw4XUw4XUw4XUw4XUw4XUw6XEs7XUw8Xk4+XE8+Wk89Wk89WlI/W1NAXFRBXVFBXFBAXE5BX05EYE9FYlBGY09IZ05KZk1QY1NdZl5zbm+Odn2nfYe4hYu/nJXJoYu5qn6huHeN03mC6n169HZq9Whe+F1h8E5Z60VR70hS9kpW9EZQ7T9I6j1D4zo/3jo72Ts61Dw3zkA2xz8zvz0vtj0sqTwoqT4qqDkmrzopv0Ezwz0yxjcv1D020jUu1TQq1zUq1zUm2Dcl2jkl2zsl2jkl3DUs5kE76UxD4Eo80D4vxjcmyjko0zst3Dsx9UlF5DAx8DY79TY+8C45/z9N7iYx8yQq9iUo+igr/Cws+ysr9Scn9igo9ysq7iMm7CUo6iUs/TtE2Rsn7jRC+0BR1yU1/2p1/2Nq/Fth+1hd805S5UJD1zw40T42vTcrvkMzuUk1qT4qlzAdjyoYjigZkigbnC0ksDs00FNPzEhEwTU0xjQ00Dw66lZU10ZB1UY+z0E3xjguxTIoyTUrzzcszDguxjwywjkxwTQrwzMryDMszzgx10A33kU94ko/3UA32TYt3DEq5jAs8TEw+DAw+jAw9DAy8jAx8y8w8zAu8S8t7TIr5zUr3jgs1j4wvjIjvD0utT0v015V6XZx/5GN94WF94SH/YGJ/3WD/2Z5/1x2/1h0/1Fu/Ulm+z9g8zpa8UBd4UlewFJbez83UkYuTF42WXZAZYdKcpZZdZted51ieaFlfKVpfaZqfKVpe6RoeqRleaNke6Jje6JjfaFhe6JjeqNneqZrfKhpfapnfKtjfKxgfq9ggLFigrBlhrFqh69whqxziap7jq2Ej6mGjKOJdod/YW9vT11dXEs3XEs3XEs3XEs3XEs3XEs3XEs3XEs3XUw4XUw4XUw4XUw4XUw4XUw4XUw4XUw4XUw6X048YFE+XlFAW1A+Wk89WVA/WlFCW1JDW1FFWlBHXE9JXU9MYFFOZVNTZ1VVZ1VVZldcZl5ta2iDcneheYK5gYrLiI3RlpHUn4vIqYKxuX2fz4GR5ISG7X518XJp+mVn9VRc7UdR70VO9khS9kZQ8kFL7T5F4jc93jg62Do50j03zD81xEAzvUAutj4trT4rqD0rqTopt0M0xUk9vjwvujEnyDowyzct0DYs0zcr1Tgp2DYn2Dcj2jok3Top3DUs2TQu30E2509C20c5xzQkyDIj2D8x4T809UhC5zEw8jU5+DY/9zM//0RQ+DM97ygt6iQl6yMl9zEw9C4t7Scm6yUk9DAx6igp9Tc55Ssw4Cgw6TQ9/1Je7jxK/1tm/V1l8VZa7k9U7k1S6EVI3Dk61Tc00z44wDYswD4xvEIzsj4vqTgqpTMony0jmyYfmiUepzAqxUVCwTs4uy0sxTMz1kJA819d0D860UI60EI4yjwyzDkv1D002kA220E520A72D053T4740E/4j483jo440A760lE4EI53Dsz2DUs2jEq5DEs7jIw9TIw9jAv8zEy8jAx8y8w8zAu8S8t7TIr5zUr3jgs1z8xwDQluDkqtDwuzlxS63p0/5OP+YeH+YKG+36G/nJ//2V3/1t0/1Rx/05s/0Zl+jxe8zxb7kVi31RnoUFFcDwxUUowUGI6XXhDZohMcJRXcphbdJpfd59jeaJmeqNneaNkeKJjd6Fid6FieJ9geaBhe59heaBheqJmeqNneqdme6hjealfeqpefK1efq9ghLJnibRtirJzhqxzhKZ0gJ91eJJtb4ZsUmRYQE9MMkE+XUw4XUw4XUw4XUw4XUw4XUw4XUw4XUw4XUw4XUw4XUw4XUw4XUw4XUw4XUw4XUw4XEw1Xk43YE87YFE+XE8+Wk4+WE9AWFBFWE9GWlNNXlRTYVdYZVldZ1pha1tla15nbGFpa2VvbmyCcnSad360fofKhIvZi47fjIfXnIvRq4rBs4GnvHiNy3qA3IJ58IF2/nJx/2Nm9lVb80xT80hQ80RL8j5H7TxC5DU63zc32Dk20j02y0E2xEI0vEEvtUAuqzoorT4trz4uu0c4y1NFxUk9uTYstzEmxjkvzDkv0jwu2T0w2joq2Dcl2TYj3jgo3TUs2TIq3z406k5B40s90Tsq0Dcn30Iz3TYt7kA56DAu7zEz9TM7+zdB/05Y/0tU/T5D8DQ14SUk6y8u6S0s7jIx5iop6C8t8Tk50Roc5TI23C0y5jk/70ZN/1hg8U1U1zxA2kFD3kJF3j5A3jo73Dg52Dk20jk0yTkxwTgwvDkvwEE4y09H1VZQ0E5Mw0NAsjcytDkyzUxH2E5L4lJR7lpY6FJR71pWyDUuzT000UE4zz800j402EE43UM54kA76D4+5zk77Dk98T5C7js+6DU46z089k1I3Tgy2TYt2DQr2zMq4jQt6zQw8DMv8jAu8zEy8y8x9S8w9S8u8i8t7jEr6TQr3zcs2UAywjYntDUmsjosyFZM7n13/5OP+4eI/IGG/HqE+298+2J0/lhw/09s/0Zm/0Bi+Dlb8z5d6Utk11pohDMyZTstVU81VmhCYXxJaYhNcZNXc5dacphddp5ieaFleKJjdqBhdqBhdZ9gdp5gd55feJ9ge59heaBheaFjeqRleqdkeqdieKheeapbeqtafK1chLNlibRsi7Ryiq1zhaVzf5xwc41maH9iUGJUQ1JLN0Y/XU45XU45XU45XU45XU45XU45XU45XU45XU45XU45XU45XU45XU45XU45XU45Xk43XEwzXU0zX082Xk86W049V04/V09EV1BIVlFOXVdZZ2BobmZzcGh3cGd4cmZ6cWh7b2x9b3GGcneXdXyqeYHAf4fShIreiozjk47imozXoIS/m3Wen2x/rG5xvHZs0XVo8XJs/2xq/2dp/l5g+lFW9UZL7zxC6TY65jY54Tc32zk21D02zUA2xUMzvEEvtz8urDgptEAzrzsusDwvxlJF011Rx01CuTsvvDotwDgsyTos1T8x2z4v2DYn2jQm4DYp3zIr4TYv4j414kQ44UU43EMz3UAx4T8w2zAm6TYx6jEu7y4v8C0x+TY8/1BY/1xi/1pe/09S4S4x4i8y3iws9kRE5zU12ysr2y0s6j4+2zMz1zM0/2Nm3j1Cyiswyi4ywCcp1Do64EJD2jc62DI03zk73Dg5zS8uyzMwzTw50kdE3VNR62Fh9Wls9GVr6V5hwkE8xUY/415Z92ln/3Bw/2tq40tK1j47xzQtzj411UU800M40z811T0y1zox2zMw7jU68Cw28Cw28S037yw06ywz8jo8/UtJ3jIu2jMr2DQr2zQr4TQt5zQt7DMu8TEu9DAy9S4x9i4w9i4u9C4t8DAr6TQr3zcs2D8xxjgqtDIksTkrwE5E7Xx2/5KO/oeJ/3+J/naE+Gt7+GF0+1Vt/Ulm/z1h/zpf+DZZ8UJf3U5iwVZecC8pXD8tWVc+XW1IZX1Na4pRcZJZc5Zcc5led59jeaFjeKBidJ5fdJ5edZ1edZ1ed55feJ9ge59heqFieaFieqRkeqdieqhgeadceahae6pafKtbf6teg65mhq9rhqpthaZxg6ByepVscYlpZHdjWmpdUWFUXk86Xk86Xk86Xk86Xk86Xk86Xk86Xk86XU45XU45XU45XU45XU45XU45XU45XU43Xk0zX04yX082XU45Wk4+WE5CWVJMWVNTXllfZWJtcm5/eXSLe3WReXKRd3CRdHCRcHOScHmadH2odoC1eYLDfYXOg4jZiovbk4/Zl4vLmYa0oIOhqYOOq355nmtamlE+uk5B01BI4VZR61dV8FJR8EpM7T9B5TU46Dg65Tk53jo42D040UE2yEM0wEEwuj8vszksuUA1qzUpoi4hvEo/12db1mVXyVVItz0wtTUovjQnzTsu2Dwv2DYp3DQp4jYs3jAp5Dcw4jsy3Dot3D8w4kU040Mz3jgq3zEm6TQt7zIu7i4t7Cor8zI1/0VK/1Va/15g/1te4Tg74Tg71Cws8kpK4jg51y8v2jQ0zCgnyico9lhZ2j5B1Do80Dc6uB8hxCgp2zs75kFF3TQ31iwv2zE02TAzzCcr0TM040pM9GJj+Whr9mNp9V9o+V9r92Fq1E1K005H51xZ51ZT5k5N4UdFzjMxzTQv1kE63ktD41BG3UpA2EE21Tsx1DYt2i4s9DE5+iw5+Co39Scz9Cgz9zA3/D5A/0pJ3zAr2zIr2zQr2zQr4TUr5jUt7DMu8DMv9DAx9i4x+C0w+C4u9S0t8TAr6jMr4TYs2T0wyTstszEjsTcquUQ76nlz/4+L/4iK/3uH/nCA9Wd39V5x+FJq+UVi/zle/zdd+Tda70dhz09eoUhKZDQoVkQuWlpAXmxJZXxOa4hSc5FbdJVcd5pgeJ5jeKBidZ1ecpxccpxcc5tcc5tcdZxdd55fep5geaBheaFieqRie6ZfeadeeKZbeKdXeahXe6pZfalcgqxihaxphqpsh6hxiKV1g55zfJRwdYlwbX5rZXZkXk88Xk88Xk88Xk88Xk88Xk88Xk88Xk88XU47XU47XU47XU47XU47XU47XU47XU43YE81YVA0YFA3XE88WVBBWlFKXFZWX1phaWd1cW+EfHmWf36gfnyjeneieHWidXakcniocn6wd4G2eoO8fYXDg4jIio7NkpPMl5PFoJa7q5yzu6avya2pxKWTqohsmWZJnEUxrEExtkA0wkI51klC6E5M7UlI6kBB6jw96Dw84zs63z0610A3z0E1xj4wwDwvujovuz81rjUspjEnuko+zmJV02da02VWw09AuD4vuDQnxjgs0zkt1zUq3jMr5DYv4DIr4jUu3zcu3Dgs4D4x5UM04j8w3TMk5TUo6DAo7zIu7y0t7S0s8TAx8jY39kJF9k1Q+1hb6UZJ9FFU1zQ36UZJ3Dg55EFC2jc4zi4wzzEy4khK0Tg6zTc4tyIk1Ds92zg54zs76TxA5zY84C0z3Sow4TI55zxC70xR+l5i/2xx/2lw+V9p9Fpm91ln9lxm82Ni6FtU51ZT1z88zDEv0jQx0TMw3kM+4ktE5lJI6FRK30tB2EA11zox2Tgw4TMy8y43/zA9/y88+io3+y05/zpC/0JF+kJC4DEs3DMs3DUs3TUs4DQq5TQs7DQs8TQw9DAx9i4x+C0w+C4u9S0t8TAr6jMr4TYs1zsuzT4wtTEksTcqsjsz53Rv/YqH/4aK/3aD/Gl78mFy8ltu91Bq+UJh/zhe/zhf+Ttf6kxlvk5afjg2XT0uTEYuVVg9WmVDY3lLaIRRco5bdpRed5pgeZ9kd59hcppbb5lZb5lXcJlXcZpYcptZdJ1bd55feJ9gd6BeeKNeeaRdeaVadqVXdaRUd6ZVeKdWfalcgqxihKtohKhqhKVuhaNxf5pteJFpcIRoan5jYnZdX1A9X1A9X1A9X1A9X1A9X1A9X1A9X1A9Xk88Xk88Xk88Xk88Xk88Xk88Xk88Xk86YlI5YVE3YFE8W08/WlBHXFRSX1phYF5sc3GHeXiXgICmgYKufX2veHiud3avdnizdHy7d4DBe4XCf4jBhYrBjJC/lZe+nZ25q6e4tK20vrOvxrmp0L6m1cGg0buU0KyIr29TrlxGpEc1qD4wwUc831ZQ71dU8E5M6EBA5z095jw84j073T461j01zzsxxzkvwTgwwD01tjoytz41wFBExVlMxV5Pz2VX0mRVwkw+ujotwzks0Dku1jMq3TIr5DYv5DYv4DMs3jYt4z0x5kI25UIz4Toq3jIk6TQp5S0j7TAq7y8s7zIw8DQy5i4s4jIy5kJD9Fhb81da/29z40RI6EdM3j1C+1pf/3B03T5C/32A/25w6lFT0z0+xTAy1Ts98khL7To+7zg99z5E8jdA5y429D9I/11n/2x0/2py/mNr911l+V1o/mBu/l1s9lli8lxd4k9I4UlG0jcz0DEu1zUy0jAt2Dkz3kQ84UpB4UpB10A30jUs1TQs3Dcx5jc06CYu+TA6/jI99ys0+TA4/z5C/T9B6zUy4DMt3jYt3TYt3TUq4TMq5TIr7DQs9DQx9jAx9i4x+C0w+C4u9S0t8i8r6zMr4jYs1zktzj8xtTEksTUprzYu53Bs/YeF/4eL/29//GN38Vxv8llt909p+0Ji/zlf/zxh9UBh5FJnsFFXZC8nVkUxRkYsUVU6VF8/YnRKZ4FRcYtbdpJfeJliep5hdp1ecJlXbZZUbJZUbpdVb5hWcJlXcptZdZxddp1cdp9bd6Bad6Jad6NYdKNVc6JSdaRUdqVVeKRXfaddfqVifqBjfZtlepZjcoxdaIFXYHZSWm9QUmdIWUw7W049XlFAXlFAXVA/XE8+XVA/XlFAX1JBXE8+Wk08W049XlFAYFNCX1JBYFE+Y1Q/X1A7XVBAXFJIWlBOWlNaZGBvcnCGd3iXeXuifoCwgIG3fX+6d3m2cXKybG+0cnjGdnzKf4TIiI3FlZjBpKS8sbC4vLmyysWy0cyu18+q2M+k29Ci3NCg2cua2MGV0aiItoBmoF5Gynlm1XRkvEc+1lFM9mJg6EpJ4z8+4Tk54jo54Ds52jY02DYx1To1yTkxvzYuxUI6uDwyvkk/xFhLtk9AzGVWz2RUyVhIw0g5wzsvyjYs1zYs3zYv4TQu3jEr3TIr3zcu4z0x4Dww2jco3DUl4zcp5C8k5y8l7C8p7jEr7jMu6zQw5zQv4jYy1jY25UtN81hc609T1zg91TY7+Fdd/36E/36D/3B1/2hs/2lt/2dq811f71lb+ltf/1Za/0NK+jhA+jZA9jI+7Cw36zA78DxH/VNc/2Bo/2hw/2Vt/WFs/2Jt/2Bs/Fxk7FJS3kU/1Tc01TMw1jEv1C8r1zIu2zk04EM820M41z801Dwx1zkw2jcw3zgy5Dcz7zY78jU78zQ59jU69DU68TU26jIy4zEt3jMs3DUs3TYt4DUr4zIq6DEp7zIs9DIw9zEy9y8y+S4x+S8v9i4u8zAs7DQs4zct3kA0yzksvDYqrjAktzw10lhV/5iX/nuB/2x//2R79l1y8FBo9Edj+0Ji/zti+Tle9E1r0lFjiT09UCweQjolQkguSU00V2BBWmpDYXhKb4lZd5Ngd5Vfc5VZcJdYb5hWbJVTbJVRbZZSb5hUcZpYcptZdJtcdZxbcptVc51VdJ9XdaFWdqJVdaFUdKBTc59SeqRYeaNbd55bdJZZbItSYn5LV3FCUWs+P1gwPVYvOlMsWUw7W049XVA/XlFAXVA/XVA/XVA/X1JBYFNCXlFAXE8+XVA/YFNCYVRDYFNCXlFAZFdGX1FEXE9GXlRSYFpeY19tbWuBdXaVdnmieX2tfYC3eHy5cXW1a3CybG+0bXG7dXfOe33Sh4rRlpjLp6bFuLe/x8W40s+w2tap4Nuk5N6k492h5Nui4tmi29Ge1Mea0ruZu5yApnxjxIt3yX1ts1VJ0WBY9XFt7Fpa5kpL4j4/5j4+6T9A5Ts74DY22zY01Tw3yDcyyj84tzcutj0yvEw+tEg7xlxM2m9f0mFRxEk6ujQowzAm0zUs3DUt2i8o4DQw4jk05D014Dwy2zct2TUp3TUo4jUn6zYr7DQq7DEq6TEp5jEq4zIq4DMs2jUv0zg21z5A40pM8ldb+V1h+1xh/Fxk/2Bo8lJa7U1V71JZ/F9m/2pw/2dq81pd8U5T7DM48Csy8ys19S037yc05CAs5SY17DZC+1BZ/lpj/2Nq/2Vt/2Vt/2Js/Fpl9VFY5EVC3D032TUz3TUy3zYz2zIv2jIv2TYv3T822D401jwy1Dow2Tgw3Tgy4jk05zo26Dg46TY56zc47TY47jg36jY15TMv3jEr3DQr3DUs3Tcr4DUr4zIo6TEp8DAr9TIw9TEy9i8y9y8x9y8v9i4u8zAs7DQs5DYt3j4y0j4ywjgttTIotjcx2FtZ/4+Q+nN6/mV5/111+FZu9k9p+UZk+UBg+jxg80Fh5E5nuUtWeDs2SzEgOzkiOkMoRUcvT1M4VmRAXnNIbINVdI9cdpNdcZNXb5NVbZRRaZJOapNPa5RQbZZSbpdVcJlXcplac5pZc5xWc51VdJ5Wc59Uc59Ucp5RcJxPb5tQbZdNa5NNaIxMYIJFV3Y9TGg1RF4uPlgpPVYsPlctP1guWEs6W049XVA/XlFAXVA/XVA/XlFAYFNCYFNCX1JBX1JBYFNCYVRDYVRDX1JBXVBAYlVMW1BMW1FQYFlgamRycW2EdnWVeXukd3ureH20dny4bnOzZGmtYGetaW22cnXEfH7VhYXblpXZp6jYu7nPy8rG2de+5OG06OOp7eim7uml6+ak5+Gl4dqk18+gy8OctrCQp5uBmYNrp4Ntp29em1FEul1V3Gxo93Vz7mBe5EpK5EFC6UFB6z8/6Dg64jY23z060zs20kI6wTgwtzcstz8xrTwutkc22WpZ3mpb2VtNx0E1xTIozzUr2TYt2DEr3TUy50I+6kdA3zwz1TMo1TEl2jIn3DAk5jQq6DEp5i8p5C8o4zIs4jcv4T0030E4xS0oyTMy2UNC7lVX+F1h91tf81Nb8FBa50dR6EhS7k5Y+l1k/21z/25081he4j1D6C808i00+TE7/DM98ys47Cg09DVE/0pW9ElS9FBX91hd+19j/2Rp/2Bm9lFY6EJG3Tg23Dcx4Tg16Dw46j055jk14DQw3DUt2zow1zsv1jou1Tkt2jcu4Dkx5js06Tw44zo34jk25Dg25jg35zo25Tg04DUu2jEq2TUr2jYs3jgs4DYp5DIo6zAp8TAp9jAt9DIy8zEy9jAx9jAv9S8u8jEs7DQs5DYt3Dov2kM4xjkvujQrtDAs4V9f/4SG92t0/mJ3/VZw+lBt/Utr/ENl9Dtd8Txf6Ull01JknENHazw0Tz4sPT0lOT8lRUUtRkkuUVw6WWtDZ31PcYlZco9ZcI9UbI9PaZBNZ5BKaJFLaZJMapNNbJVRbpdVb5dYb5hWdJtYc51VcpxUcZtRbppPbJhNapZLaZRMZI1HYIdEW39BUnQ4S2kzRGAtP1kpPlUnQlwtRF4vSWM0V0o5WUw7XE8+XVA/XVA/XVA/X1JBYFNCX1JBX1JBYFNCYVRDYVRDYFNCXlFAXFBEWU5MWlFWX1hgZ2NycW2EdXSUeHqhenytdnuyc3m1anKzYmmtXGOrYGevbHK8dnzIiIrdlJPjo6PjtbTgxsXX09LO393E5+S56eav7ems7Oir5+Kq4tyq2dKoy8OfurWXpKSMmZiDk4h0l4BumHFim2NWsmhfz3Jr+oqG9HRx6lxb5UtL50RF6kBB7Dw/6Do73zo42js13UY/0kI6wDovuDourzUopzEjvkg62mJS6Wpb21NFyTosyzMm1DYr1zQt1zMx8U1L/FpV601E1zku1jQp2zQr3TIo3i0l3y0j3isk3i0l2zAo2TUr2Dov1j4zwS4mwzMrzjo22ERC3EZH3kVI40ZN6UxV7lFa81Zf9Vhh+Ftk/2hw/25z8lle3To/6TI28C8y8S408Cs06iYw6yk0+D1I/1Ne60BI5kFH50ZL8lFW/1pe/1dc80ZM4zY44TUz4zgx6js48T878kA+7jw45jkz4Dcw2zgv2Dov1zku1zku2zgv4Tgx5jkz6Ds14jo33zo24Tk24zo15jo25Dky3jUu2TIp2jYs2jgr3Dkq4DYp5DIo6zAp8i8p9DEt8zMy8jEy9DAx9jAv9S8u8jEs7DQs5DYt2jgt30c8yDgvvjMstC0q7GZn/3l99mly/2N4/FRu/Upq/0hq/j5j8jZZ6D1d4VFowlhih0E/ZUM3WU46R0cvQUMrSkgxREQqS1UzU2M+YnRKa4NTb4pVbo1Sao1NaI1IZ49IZpBIZ5BKaZJMa5RQbJVRbZVWbpdVdJtYc5tVcJpSbZdPapRMZpFJY45GY4xGX4ZDWoFAVng8UXA3TWk2TGY2TmU3TmU3S2U1Tmk2U209U0c3Vko6WU09W08/W08/XFBAXVFBX1NDXlJCXlJCX1NDX1NDXlJCXlJCXlJCXFJIVUxRXlhma2d4dHCJeHSVeHefeHqqdnuyc3m1aXGyYGerWmKqXmauaXG6dX3FfYTMkpbgnp7kra7mu73kycrf09LX2tvN4N7F5OG+5uK85N+53ti22NG1zsavvrWkraeZl5mLjI6AiYZ3iXtukHVqmnJoqG1luW5o5ImE7YB98XRw8GRj8FhX70xN7kRF6z8/4jk24Ds14UI83UY9yz0zwz0yw0E0rzEjqzAhx0k62lhK1U0/yz0vzDgq0DYqzzIp1DUx9VZT/2pn+l1Y4kU83Dsx3jow4Tku4TMq4jEp3zEq2zAo0y8mzS8kxS4jvzAixTksvTMmvzIoyjsz1URB2UVF20JH2kBI30RM609a8VVg8Vdf+V9n/mdu8Vpf4EFF6Do77DY17TM27TM48DM69TpD/0hS/1Ze4jc92zU53DY66UBD+EtN/ElN8zxA5zAy5zUx6Ts07zw48jw48Ts47To25zgz4jcw3zsy3Dsx2Tsw2jkv3Dgv4jcw5TYx5jcy5Ds44jo35Tk15zo26Ds35jkz3zYv2jMq2jYs2jgr3Dkq3jYp4zMm6DAm8C8o8jEs8TQy8DIy8zEx9DEv8zAu8TEs7DQs5DYt3Dgu3UM5yTYuvjEqvTEw9mtu/3J4+Wdy+15z+U9s/kJl/z5k/zlg9Dhb5kZi2FtrqlVadkQ9Yks7X1lDUU86S0k0UEk2RkQtRk8wTFw4WmxEZXtNbYVRbIlPa4tKZ4xHZo5HZpBGZ5FJaJFLapNPbJVRbZVWbZZUcplWcJhSbZVPaZJMZY5IYotFYIlDX4hEWoFAVn0+U3Q7UG44T2s4UWs7V25AWXBCVXA9VXI8VnI/UEQ0U0c3V0s7WU09WU09Wk4+XVFBXlJCXlJCX1NDYFREX1NDXlJCXlJCYVVFYVZQXlZhamV7eHSPfXmaenmhd3imdXitcni0aXGwYmmtW2OrXGSsZ2+4dX3FgIjQho3Rl5zcoKXdr7Pju7/lxMjhzM7b0tPX1tfR2dfL2dbH1tDE0Mm/zMO8w7m3s6mqo5qbiYqFd3pzdnZudWxjf2xljW9njmJZm2BYv3Js1nly7397+3t4/3Fv/WNj9VJT70dG70M/5z433zw130I5zzsx0UM53VVJwT0wtzUnvDoqwj0uxj4uz0Ix1kU01T8wzzcqzjMv6E1L+l9d8ldT30U92Dox2zgv3zgv5Dkx5Tkv5Tgx4Dkw2jkv0TksyDkrwjkpsCkWtzIhyEAy0kg90kU+yzs6yTc4zzo+zzhB30hR7FVe8Fli9F1k9mFn6VRa2kFD4z896z878UFB+khI/01S/1FW/1Vb/1de3jM52S8y2jAz5jg69D1B+Ds/9TQ38TAx7DUx7Dk08Dk17DUx6jEu6TMv5TMv4TQu4zw03zwz3Twy3Dsx4Dkx4zgx5zUx5zUx5zk45jg36Dk26jg26zk15zgz4jUu2zMq2zcr2zks3Tor3jYp4zMm5zEm7zAo8TEs8DQy7TQy8jIx8zEv8jAu8TEs7DQs5jUt4Dkw2DsyzDcwwC8q0EJB/m9z/Gty9mJu71Fo9Uhm/Ttg/zVe/zVf+z9i401mylxni0dGaUU5XE06XFdBV1I+UUo3T0c0SUQuREouRlYyU2M8XXNFZ39LaYZMaYlIZotFZY1GZI5EZY9HZ5FJaZJOapNPa5NUbJVTb5ZTbZVPapJMZ49JYotFYIlFXodDXodFW4JDWn5BVndAVHI+VHA/VnBBXHNHXnVHWXRBV3Q+VnM9TkIyUUU1VEg4V0s7WEw8WU09W08/XVFBYVVFYVVFYlZGYFREX1NDYVVFZlpKZ15ZbWZ2dHGMenmZeXmfdneldXeqcHWvam+vYGerXmauX2evZW22cHjAfYXNiJDYjZfVl6HUn6fVqbLbsrrfub/fvcHcwsTbxMXXxcLTxMDPwbvJu7XDuK/AtKm6pZmtlIybiIaLcXFxcnFtbmZjd2hjhm9pgmBXlGNcm1tStmZd1nNt7Xp1/3t3/3Zy/2hl+1lW/VFN9EdA5T425kU91jwy2kY86lxQxDotwTwtvDcovjYoxz4uz0My0UIx00Ix1UEz0Dgz1j493ERB2kI91Tw21Dcw1zYu3Dgv4zsy5Toy4zoz3zsy2z411UE10EQ1zEc0ri0XuzokzUo20Es8xj0zui8qvzEwyjk81UJK30xU61Ve7Vpi71xk61pf3k1S0z5AzjMu1zYu4Ds36EA98ENF80VH8UJH7D9D4jU53zI24zM27jc79Tc59TEz+i4x+jI07jMu7zgy8Dcy6TAr5ysp5zAs5TIt4DMs4zwz4D4z3j0z3zwz4jky5Tgy6TYy6zUy6jY36zQ27DQ07TU17jY06zUy4jQt3DEp3Tcr3Dgs3Tor3zcq4TQm5jEm6zEl7jIp7jUy7DQy8DMx8jIv8jAu8TEs7DQs5jUt4jsy0TMq0js0xjIu51VW/3F29mNr8Fpm5Ulf8kVj/zlg/zBb/zRh/0Jo201jsE9WajUvXUY2V0w4VE85WVE+VEk3TEEvSUQuQEYqQE8uS1s2VWs9YHhEZYJIZ4dGZYpEYopDY4tCY41FZY9HZo9LaJFNaZFSapNRbJNQapFOZ45LZItIYYpGX4hGXodFXoZHX4VIXoFHXH1GXHpGXHhHXnhJYXhMY3pMWnVCWXZAWXZASUIyTEU1UUg5U0o7V0s9WEw+W08/XVJAZFdGY1hGY1hGX1ZFXlVGYVdNZl1UaWNld3KIeXWYd3Wcc3KecnKkcnWsa2+uYWaoWmGnXmSuZmy4bXO/dnzIgIbQjJLclpvdmqHVn6jTpq3XrbLcr7TcsLTasbPZtLTasrDVsq7RrafJqKHDqJ7Ao5m7louth3+Xe3iDY2FkaGRlYlpYaVtYemNdd1ZNj2NaiU1DoVRKumBX1mtj73hy/4B6/3p3/25p/WBb9VNO5kdB7E9I3EI63UY96VZMuSsfvjIlvjUlxj4uz0Y0yj8swTIhyDck2UU33UY/0jo1yjItzTYv0zoy1jwy3Dsz4T005Dwz4Tkw3TYt1TQqzzUpyDkpxTwqwj8r1FM+x0YxvTwpvjorwjwxwzo0wTYzwDQz20xO3E1P4E9U5VRX51hc5VZY2U1O00RAyTUr0DYq2Dct3DUv4DIx5DE05TA15i427DQ87DM78TY/+jhB/DM9+is1/ykz/zA39yww+DQ2+DQ28C4v6yor6TAu5zQw4jUv4jsz3zwz3z404D005Ds05zo06jg07Tc06zMz6zMz7DIz7TQy7DQy5zQv4DIr2TEm3jgs3Dkq3Tor3jgo4DQm4zMk6DIl6zMp7TYw7DUx7zMx8DMv8TEs7zMq6zQs5DYr4zwzzC4l1z44zDQz+WNl/2949lxo7k9h6ERc+EVl/ztj/zFb/zZh9kdoyEtbk0NGUiwhVkk4Uk05Tkk1WVE+U0s4Rj8tR0cvPUQlP0snR1UxUmQ6XXNEY35JZYRIZYhGYodCYYlCYopBY41FZI1HZo9LZ5BOaI9OapFOaJBKZY1HY4pHYYhFYIdGYIdIYIdIXoFHXYBGX31HX3tIYHtIYXtLZX1NZn5MW3hAW3o/XHtCQUI0RkQ3SkY7Tkc9Ukg+Vko+Wk09XVA9YFE8XlI8XlM/XVZEYVpQZ2JfbmltcnB+dnGRenWee3ileXeocHCmZ2ejYGGhW16jX2GrZGe0b3DAeXrMhILVjYvflZPnm5jln5/dn6DWoqLYo6PZo6PXpaLXo6HTpKDTpJ3QopzMoJrIoJjHnZbCl465jIOug3ydcG57aGZpY19eZVtZa1lVcVZPfFZNiVdMklJIqFpQs1lQv1pS2Gtk6nlx94J7/4qF93Zx/XZz62Bd31BM2ERA71pUyzgwwzMoxDYowjYlwDclwDckxDkmyjsqzz4t1D4v0Dgr1Tsv1z8y0zsuzTUnzTQm1zkt4kA14Dou3zkt2zcr1TcrzzcpyDspxT4qxEEtwDwtxT8zykQ5zUc8zEM7xDszuzIstSwmxTw2z0ZA2U9M31ZQ41lW4VhS105IzUM5zDso0zsm2jgp4TUr5y8t6yov8Cgy8ig2+Sw9+Ss/+is/+yo//Sg+/yY+/yQ8/yQ6/yQ4/yg5/ys6+ys48ys16y405zU15Ds43Tgy2zoy3Dsz3js04zoz5Tgy6DYy6TYy6zMz6zMz6zU06TYy5zUx4jUu3TUs2DQo2zkq2zoo2zoo3Dkm3zgl4jcl4zYl5jQm6jUs7DUv7zQt8DUs8DQr7TUp6DYq4zcp3jou1jgv1To12j4//2x2/2Jx+lRo9Ehg/0to9TZY/zVc/z1k9j5i5U9orkpUXSMhQy0fPTonR0YyT046T0o3REMvPUIuPkcsQkgkRUwjSFItUl44WmtBYXdJZH9MZINKYYVFYIhBYYlAY4xAZY1EZ49IapFOa5JPaZFKZ49GZY1GY4tFY4pHZIhIYoZIYIRGYoNKYoFIYYBHYn9HZH9IZH9IY35HYX1DW3s8XH89X4JCOz8xPkI0REQ6SUU8TkU+UUc9WEo9W049X1A7XVE5XFQ/XldHYFtVZWNmbWt4cW+Fc2+Uc3CddHGgb22fZ2afYGCcXF2eWl2iY2WwaWu4dHLFfXvPhYHWjIjfk43ll5LkmJXYmZjSnJjTnZnWnZnWnJjVnJbSm5XRnZXQm5PMmpPJmZLGmJDBkYm4hn+rf3iac2t6bGNmZV1bZFtWaFlSbVdMelZKiVVImlZLr11SullSwFlS0WZe3XBp4XZu6353+oeE/4eE9nZz7WZj4lRS61pVxjMrvzAixDYowzcmwDckwDckxDkmxzoozTwr0jwt0jkp1Dgp0zoq0Top0Top0Dko1Dgp1zcp3Tsu3Tkt2zks1jkqzzkoxzomwTokvTomvjYqwTguxTw0yD81yUA4xz40xDszwDovvTQsxD4z0UhA1U9E2lFJ1U9Ey0I6wTcqyTgj0Tki2zgn5TQq7TAu8yow+Sk2/Sg6/ys//ytB/yhA/yc//yM9/yE8/x87/x45/x45/yE5/yU6/ik79S047zI55zc55Ts73Dk02zk03Dsz3js04zoz5Tgy5jcy6TYy6zMz6zMz6zUy6DYy5Dcx3zcu2jYq1zUo2Tkp2Ton2jkl2jkl3Tgk3jgi4Dci4TYk5TQq6TQr6jQp6zUq6zUo5zUn4zYm3zgo3jwv0jQr0zUy81RY/2Vz/1pt9Udg/0ln/0Bi/zpe/TNZ+Ttf8U5ry0xfiDk+UiskQDQmNjkmOTwpQEEvREEuQD8rOkIrPkcqPUQbSlElWmI7ZHBKZnZPZXpRZH5PZIJMYYNGYYZBYIk9Yos9ZY1EZ49Ia5BLbJFMapJJaJBHZY1GZIxFZotIZYpHZIZJYoRHZINIY4JJYn9FYn9FZIBGZYFGY39EYX9BXYA+X4Q/YodCNDosOT0vPz81REE4SUI6TkQ7VEg8V0s7XE88W1A8W1JBXVdLYl5bZ2Zrbm17cHCIcW+UbmuYameWY2GTXFuUWlqWW1ydXF+kaGq0bXC9d3jIfn/RhoTXiojcjorfkI3ckZDSkZHNk5LOk5HQkpDRkY/QkYzOkYzMkozKkYvHkorDkou/koq7jIWxgnulfnOTemV2c15jZltZY1xUYlxQZVlJcldGg1NFollQu2FZyVxZz1lX2mRg3mtm3G9o4ndv+ouE/4mF/4WA/3x39m1n7mFYwzUrvzMkwjkpwDkmvjolvTkkwTglxTonyTopzToq1Dst0jYpzjUn0Dgq0z0u0z0uzjYoyi4h2Tkt2Dgs1zcr1Dgr0DoryTopwTglvjckvTUnvzUqwTctxDovxz0zyT80y0E3y0M3xTsxyUE1zkQ6z0c70Uc90Eg8ykA2xDYozDYl1Dck3jYp5zQt8C8w9Sw0+io3/So7+yg7+ic6+iU7+SQ6+SE4+R83+x02/Rsz/x82/yA2/iQ1+io49zI88Dc96Tk74zs63Dk02zk03Toz3zo04zoz5Tgy6DYy6zUy7DQ07DQ06zU06DYy5Dcx3zcu2TUp1zUo2Tkp2Ton2Tol2jkl2zkk3Tgk3jck4DYl3zUm4TUp4jUn4zYo4jcm4Tcm3Tcn2Tco2z0xzjEo1jg3/2tx/11r/VFn8D1a/0lq/zdb/z1k9zVa7T9g5FZwqUBPXyMlSi8oOjcoMDclMTkkOTwnQD4pPz0mPj4mP0IjP0YcV2Axc35UfYxjdoheaH9TYX1MYYBHYINDYIU/YIk9Y4w+ZY1EZ49Ia5BNa5BNa5NMaZFIaI1HZ4xGZ4xJZotIZohLZIZJZYRJY4JHY4BGY4BGZIJGZYNHZIBFYoBCYodEYopEZY1HMDYoMzktOjszPj42RD85S0I7UEY8U0o7Vk08V049WFFBW1dMYV9gaGdvbG1/b2+Lb22UaWiUYF6PVlaKU1SMVliVW16hYGSra2+5cXTBenvLgYLSh4XYiYfajInajYrXjo3Pjo7MjY3NjovOjYrPi4jPjIbOjIbMjIXJi4XFjYXAjoe7joa1iIGqf3mdfnCKgF9weVlealhWY1xSXV5OXltIalhEfVNDnlVMvVxW0Fpa2Vla4mRl5Wto33Bp5Hdw6Xx17Htz/YR8/4eA/4F79Wthxz0ywjkpwjsovzsmvTslvjolwDklxDkmxjknyzgo1zsu1DYqzjUnzjgp0D0tzz4tyjcnxjAh0TUo0TUo0jQo0DcpzzkqzDsqxzwpxDspwzkswzkswzkuwzksxjkvyDwvyTwyyj4x0kU70kY5zkE3yT0wyj0zzkI1zUA2zD0vzjUl1zUm4jYs6zQw8S4y9Sw0+Co3+io69yY59yY59yY59yY5+SY5+yY6/iU6/yQ4/yI3/SI2+iY1+S059jQ98Dk+5zk63zc23Dk02zk03Toz3zo04zoz5Tgy6DYy6zUy7jQ17jQ17DY16Tc15Dcx3zYv2TUr1zUo2Dgq1jko2Dkm2Dkk2Tgk2jgj3Dcj3Dck2TYl2TYl2jcm2zgn2zgl2Ton1zon1Tkq1jou0DMs6UlL/295/1Zo90Vf9j1d/0Fm/zNb/zhf9z9j501pxVBjfy86Rx0fQDEqMDIlLDcmND0qPUIsQEAoQDwhQz4hSEUiVFwtb31Kj59wlql8gphqaYNUX3tIXX5FXoNAYYZAYos/Zo9BaJBHapJLbJFObJFObJRNapJJaI1HZ4xGZ4xJZ4xJZ4lMZohLZYRJZINIZIFHZIJGZoRIZoRGZoJFY4FBZotGZo5IapJMLDQnMDYqNjkwOzw2QT45RUA6S0Q6T0c8Uko9UUs9U09DWVZPYF9kZ2dzamuAa2yKaWiQYmCPVlaIT1CGT1GMVVmYX2KnZWmyb3K/cnjGfH/QgoXWhofXh4jYiYjWiorUiovMiovLiYrLiYjOh4XQh4TRh4PQiYLPjITNioPGjITAjYa6jYawh4GjfXiWf22Dg1lngFNYbVVRY11RWmJNV19HYlpDeFVCkkxCt1RPz1RW2lNX5V5i5mZn4Wtp5XZv43Rr4HBl9n11/4J5/4d+9GxgyEAywDgowDsovz0nvjwmvjwkwTomxDkmxzgnzDYn1zkt2Dgs0TgqzzkqyTopyDspxzooxzgnzjgp0Dgq0Tgq0DcpzTcoyzgoyTwqyj4tyDwtyDwtyDwvyDwtxzktxjgqxTcrxDYozkA0z0EzzT0yyDkryjctzjwvzDkvyzQp0C8l2TEo5DIu7DIz8y419i03+iw5+is7+y4/+y4/+S8/+jA+/S4+/y89/y49/y49/Sk4+yg39ys39TA68Tc86zg74Tc32TQy3Dk02zk03Toz4To05Tk15jc06DY06zU07jQ18TU27jY26jY15Dcx3zYv2TUr1jYo1Tgp1Dkn1Tgn1Tgl1zgl2Dcj2Dcj2Dcj1Tgl1Dkl0zsm0z0l1D0o0z4o0j0p0jwt0DYs2Ts4/15k/2Fu/09o9Dta/0Jn/jVf/zVe+jBW80xq2lpxlT9MWSYrQioqODMvKzEnLjkrNUEtOkIqOTwhPzwdUkcnX1oye4VRkKNsqb2Kpr6Mi6V1b4taYX9JXoBEX4RBYIg/ZY5CaZJEbJRLbZVOb5RRbpNQb5RObJJJaI1HZ4xGZ4xJaI1KaYtOaIpNZIZKY4VJZINHZINHZoVJZ4dIZ4VHZIRDaI1IaZFKbJRNKjIlLTUoMjcwNzozOzo1QD04RUE4SEQ5Tkg8TEg8TktCVFNPXV5jY2V0ZWd+ZWaFYWCIWVqKUFKFTE+GUlOTW16jZWmyanC8c3jJd3zOf4HUg4XYhYbYhYbWiIfViYnThofKhYbHhITKg4PLg4DPg4DRhYDShYDQjYXSi4TIjITAjIW4i4WrhH+deXaLe2t4gVZgflBTblVQZF5QWmRMVmNJX11EcldCjU9CtFdQzlZY2lNZ5Fxg6GFl5GZn6HFt63lv43Fm9ntz8nJp/nht5V1RxDsrvTYjwDwnwDwnvz0lwT0mxDsoxzooyjkozjYo1jYq2Dgs1DstzToqxjknwjkmxDsoyT4rzD0s00Aw2UEz1T0vzjgpyDUlxzgnyj0sxzopxzsqyTstyTwryDosyDkpxjcpxzUmyDYpzTss0j4y0j4w1T4z1D4wzTYrxy0h0Csl2i0p5zEw7zI29jE6+S87/C8++zE/+TBA9zE+9TE99DA69i459y44+Ss3+Ss3+y86+C469DA68DM67DU55Tc43TU02DQy3Dk03Dk03jkz4To05Tk15jc06DY06zU08TU28jY37zc36zc25Tgy3zYv2TUs1jYq0zcq0Tgo0Tgo0Tgm0zgm1Dck1jck0zgkzzgjzTskzT0jzD4mzT8nzT8pzT8r0Dwu0DUw6kdI/2dw/1Bi/0hl+Tda/0Fq+i9a/zdf8DRV4VFqulVlbTE5RSgqQzc3NTQwMzQvMzkvND0qMjoiMTgXQUMcaGA5hIJSn653qMCGtc6XrMeSkq57dpRgZIVOX4NFXYU/YYlAZ5BEbJVHb5dOcJhRcZZTb5RRb5ROa5FIZ4xGZotFZotIaI1KaYtOaYtOZYdLY4VIZINHZYVGZ4dIaIhHZ4dGZIdDao9JaZNLbZVOJTAiKjIlLzQtMzYvNjcyOjk1Pzw3Qj84SUU8SEU8SUhDUVFRW1tjYGFzYWN8XWCBXF6HV1eJUlOJU1WQXF2gZmiycHPCc3jKen7VfILagITbgYbagoTXgoXWg4XSg4XPg4bJgoXIgYTLgoLMg4DRg3/ThYDUhoHTjYXSi4TIi4O+iYOxh4Gjf3yRdXF/dWZtfVZZelFPbFZLZF9MXWVNWmRJYGBEcFxDh1RDrFxRx1tZ01VY4Vpe5l5i52Bk7Wtr83py63Jn9ndu3VhP5FpP0EQ3wzYlxjsowzonwjslwzwmxT0nyjwozToo0Dgq0zcq0TAm1DMp0TkszTssxTwqwjsowDsowzwpxzsq00Q03ko83Uc50jwuyDQmyDYnyzwsxjkoxjknyDkpyDkoyDkpyjkoyjgpyzgozTcp0Tss1j4x1z8x2kA02kEz1jou0TAm2y8r5DIy7TU39DU8+DM9+TE++DA99jA/8C457i457S857C827C007ywy8Sox8Sox9TI68zQ78jU77DU55DQ24DQ02zYy2zgz3Dk03Dk03jk14jk25jg35jY26DY26zQ28jU58jU58DY36zc25Tg03zYv2DUs0zUp0Tgq0Dkozzkozzko0Dko0Dkm0Tgm0DkkyTkhxzsixz0jxz8lxz8nyEAqyz4tzzsv1zk2+1Rb/15u/0hg/z9h/zph/zdk/TRg+zle6kZhw05giD9GUTEyQDY0QDo6OTU2PjY0OzYwNzopMzwhN0MdUVotgIJQoKdxsMSHrsqNr8ySpMKMka97eJliZ4hPXYFDXIQ+YIg/Z5BEbZZIcJhPcJhRbpVSbZRRbpNNapBHZotFZIlDZYpHZ4xJaIxOaIxOZYdKZIZJY4VIZIdHZolHZ4pGZolFZIlDaZFKapVNbphQIy4gKDAjLDIoLjMsMjQxNTUzOTg0PDs2RkM8REQ8RkdBTlBPV1phXmBvXmB3Wl1+XV+IWlqMV1iQW12aZmascXPAenzPfIDZgITfgYbig4figobfgYPYf4LTgIHRgYPNhIfKg4bJgoXMg4PNhIHQhoPUiIPVi4TUjITPjIPEiYK2iIGqhICZfHiHcG5zbmJidVhUclRKaVdJZWBMYWVMXmRIY2JGbl5EelE9nVtLtFpSxFRS11dY4lda6Vhd72Nk9XFs7m5j9nBn0EM60UE2xDIlxzQk1EMwxzklxjklyDsnyjwozjsp0jkp1Tcr1zcrzi0jzTElzTcpyzwsxj8swT4qvTomuzYjvTQi0EMy4k5A5E5A10EzyzcpyjgpzT4uyDspxzooxzgnxTYlyDcmyjcnyzgozzkq0jos1Dst0jkr0TUo1Tcr2jww3T0x2zcu5zg18Dk79TtA+DlB+DRA9S888S077Cw56i846TE56TI36jM37DQ27jQ18jQ28jQ27jQ37zY77Dg76TY54jQ13TMz3Dcz3js23Dk03Tg04Dg14jk25jg35jY26TU26zQ28jU58zY68DY36zc25Tg03jcx1zYs0DYqzjgqzDkpyzopyzonyzopyzonzDknyzolxDghwjogwjwhwj4lwkAoxT4qyDwtzTgx3js+/11m/1Jm/0ll/jhc/z5o+C1a/T1m5z1a41xto0xUXS0tRjkzQkM+PDg3PjU2QzM0QTQuPDspPEUmRVYqYHM8jZtgrb1/sMqLqsiKpMOIm7mDi6x3eJlkZodOWX0/XIE8X4c+Zo9DbJVHcJhPcJhRbpVSbJNQbZJMapBHZotFZIlEZYpHZ4xJaIxMaIxOZYdKZIdHY4ZGZIdFZ4pGZ4xGZ4tFZYpEapRMa5ZObplRKDAhJy8iKC4kKS4nLjAtMjIwNjcyOTo0PT01P0A4REU/SUtIT1JXVVdkWVtwXF17WViAWVqKXV6UY2WibW21dnfHfoDXgYThiYzriYztiYnphYbigoLaf4DTgoHRg4PNgIPGgITEg4PJg4PLhYLPhoPQiITRioTOh4DDiIC7h4CshH2egHmLdXB3amZlZV5WbFxPa1tLaF1LZV9JYmBJY2FIZmBGbV9EbFA4hFY/pV1Pv2FX0FlV21FR7VJY91xg+Gll5llQ1EQ7zjcu0Tct1zsv1j0v0zwrzjgnzTomzTomzzom0jkp1zcp2TUr2jYszS8kyzMmyzkqyT0sxUAtwUArvj0ovDklwTgmvjEg6VdI30s9wi4gzz0uzD0txTgnyDspyDspxzgnxjcmxzYlyDUlyjQlzDQm0Dcp1zsu2z0x3Dww2Tcs2Tcs4j407EM89UND8Tg98DM68zQ89TM+8C456y057DI96jc95DU64zU35DY36Tk57jo58Dg27jY07zs86zs76Tk55jg34Tg13zc03Dcz3Dcz3Tg03jk14jg45jo66Do76Tk77Dg77jc78zY68zY67zc37Dg35zs33zo01TgvzzcqyTcoxzgoxjkoxjsoxjopxjsoxzooxjsowDggwj4lvTshtTUcuzokyUQxzT8zyTAr/15l/1Zm/0li/jtb+DJW9TFZ+jdh80Nn5VpvqkZObTMySzIrQEA2PkM8Pjk2Pi4vSjAzSjIuQDkmQkknWG49fZtfm7h2p8SBqsiInbyAl7Z9k7F7gZ9tZIRSVndAWHo9XYA8YYc+aI5DbZNGbJRLa5NMaZJOapFOaI1IZYpEYYZBYYZBZIlGZotIZopKZIhIZ4tLZ4tLZ4tLZYpHZYpFZIxFao9Ja5NKb5tQb51ScqBVKS8hKS8hKC4kKS4nLS8qMDIvNDUwNzgyOz0yPT80QUQ7R0lETFBTU1ZfV1hqWVt0W1p8XVyGYmKUamukdHS6fX/MhobeiovojIzsi4vtiIjohYThgIDWf33QgH/NgYHJhIXGg4fGhofIiYjMiYjOiofOi4XLi4XFiIC7h3+whHyhgHiPe3N+dGtsamNdZF5SZF9MZF9LZF5IZV1IaF1HaF5FaV9GbV9EdF9EflpAkVhEq1lLx1ZO3FJQ9VJX/lhc7lVQ40xF2D421Tcu2TYt2zku2jos1jko0Dcl0Dkm0Dkm0Tgm1Tgp2TUp3DQr3DUszTElyDQmxjkoxT4rw0AswUArvj0ovTglwTgmyjsr41FC3Eg6xzUmyToqxjopwTUkyj0ryTwqyjsqyTopyzopyzgozTcozzYo0jYp1Tcr2Dgs1jQp1DAm2DEo3jcu5js090NE8Tg97TA37TA37y867S856TE76TU+4zY62zI12DIy3zo47kVC90pG90VB8T875zo25Tk35Dg24Tg14Dg14Dg14Dg14Dg13zc04Dg15Tk55zk66Tk76Tk76zg77jc78DY57zU47Tc26Dk24zo13Dsz0jguyjYqxjgqwzoowjoqwDsowDsqvzwowDsqwDsovDokwEAnuDojsjYeuDsnvzssyDkx1z09/11m/1Bj/kBa+ThX9TdZ9Dtd8z9k40llqj9Jgz8+XTsyRTsvOD4wNz8yRTw3UT46TjAuUTkvVks1YmpDdo5ajLBwnMF7oMV/l7p6mbh/mLaAjKp4co5eV3REU3E9XHtAXn49YoY+aI5DbJJFa5NKaZNLaJFNaJFNZotGY4hCYYZBYodCZYpHZ4xJZ4tLZopKaIxMaY5LaI1KZY1HZIxFZo5FaZFIbJZMb5tQb51ScZ9ULTEiLDAiLC8mLC8oLS8qLzEsMjUuMzYtODwuOj4wP0M1RUg/S01KUVJWVVVhVVZoXFl0Xl19ZWSMbm6geXm3g4PLi4zekJDqj47sjo3rionmhITcgH7RfnvKf33Gf4DDhYbGhojFiorIi4vJi4nIi4fEiYS+ioO3iH+shXugf3WOem9/dGltbmVgaF5UYlxMXWBLXWFKY15IZ1xIa1pGbVtFblxGb15Ed2JHeFk9hVM6olVDxldM4FVQ905R/U9R4j483D032zgx3TYu3zcu3zcs3Tcr2DYn0zYl0Tkk0Tgm0zgm1zcp2zUp3jMr3DUsyjQmxDYowDgowD0rwUAtwUAtvzwqwDgowjQm20k82kY600E0zD0vwzcowjoqvjckxTonxTonxzooyDkoyjkoyjcnyzUmzTQm1Tks1DYq1jQp1jIo2jMq3jYt4zsy6Ds17zs87TQ56TA27DE47TQ87DQ86Dc/5zxC2zc44EBA7E5L91hU/VpV+FFL7kM85Dcx4Dcy4Dcy4Dcy3zgy4Dkz4To04jo35Ds44Tc35Dg45Tk55zk66Tk86Tk86zg87Dg77jY47TU36TU25jg34Tk22DkzzzgvxjYrwjgrvjspvTsruj0puTwquTwouTwquTwotzoku0EqsjkkrzYhtjsrszEkwzQu609S/1pm/0pd9TtT7zdT8UBc70hk5klkzU5fgTc4ZD4zUT8xREEwNj0rNDgnPjYrSzkvRS0hUj0qZV5Bf4hdkapzlbx7lcB5lcB5kbN3m7eEmLSDf5ptXHVLR2I1TWk4W3hAX30/Y4Q/aIxCa5FEapJJaJJKZZBJZo9LY4hDY4dBY4ZCZIdDZ4xJaY5Lao5Oao5OaI9MaZBNaI9MZo9JZY9HZ5FHa5VJbZlMcqFTc6RVdaZXMTMlMDQlLzInLzIpLzEsMDItMTQrMjUqODwtOj4tPkIxQ0c4SEtCTU9MUVJWU1NdWFZkW1luYmJ+bW2Td3ergoLCi4vVkI7hlJHqkJDojovih4XYgn/Mf3zDf3y/f3+9goK+hYa/iInCionCi4i9iIS2hX+tg32jhHqcf3WNeG19cWZsbWJga15VaVtOYltJXWFKXWFKY15IZ1xIbVpJcVpIclxHdV1Fclg/d1I4iVM7qllEzVxO4lNN70VG8T5B2jEu2TQu3jUu4TYu4TUr4DYp3TUo2Tgm0zYj0Tkk0Tgm0Tgm1zcp2TUp3jMr2TcsyDYnvTgnuzgmuzonvT4rwD8swTwrxDgpxjQn6FRI0T0xyzksz0EzvTQkvzwqvzwqwDkmxDkmxTkoxzooyDkpyTgnyzUnzTQm0jYq0zMn1DEo2zQr4jky5z826j846j035zU16TU47TY67TY76DM44zI44TY84TxA8VZU+2Ng/21o/2hj8lVQ40E83jcx3TQv3jcx3TYw3jcx3jcx3zgy4Tgz4zo35jo44zc35Tc45jg55zk66Tk86Tk86jc76zY77jU67DU36Tc35Tk33js21jw0zDkvwjgrvDgpuToptjsptD0pszwosTwoszwoszwosTomtD8rrDkmqzglsjosqysiwjQy+2Bm/lRh+Edb7zxS6z1W50he4U9i0U5es1JZc0c+V0c3SkMwRUQvQUQvOz8oOTciOzMePjIaT0Ypa2tFiJRmlax0kbR0jLdyj7l3nLqEnriJkKd9a4FaSmA6QFYvTGM3V3I9X3tAYoM+Z4tBapBDaJJGZZFGYpBIY45HYYZBY4dBZIdDZolFaI1Ka5BNbZFRa5JRaZBNaZBNaJFLZ5FJZ5FHaZNHbZhJb5tMdaRWdaZXd6hZNzgoNTgnNTcqNTYuNTYwNTYwNTcsNjgqOz4rPD8qP0MsREc0SEo8TE1FT09NUVFRVlVTWVlbYGBsaGiAdHSafn6wh4XGjIrTlJHgkpHhkI3aiYfQg4DDgHy5f3y1f3yzf3+1gYG3hIS4iIa3h4SvhYGmgXqbf3ePfXSHeW96cmZqbV9calxTaFpNalpKZltJYV9KYV9KZF1KaFtIbFtJcVxJdVxIeltHfFY/hVM8mlM/tFdFzVNG2kc/4jk24jMw3DAs3TQt4jUv4jUu4TMq3zMn3DYo2zoo0jcj0Doizzok0Dkk1Dkn1zcn2zUp1jgswzoouDkmtDcjtTgkuzwpwT4sxTwsxjcpzzgt9FxR1j4zyDQozUEyuDMitjklvD8rvzopwzooxDsrxjopyTosyzkqzjcszzcqzzIp0jEn1DEq3TYu5Tw36j846Ds35Dcz5zg17Ts77zs86TY54jI14zY450NE601M/3l1/3Fs8WBb3UpD0Dcx0DMs2zgz50A63jkz3Tkw3zgw3jcv4Dcy4jYy4zc15Tc25Tc45jY45zc66Dg76Dg76Dg76Dc96TY67jc76zc46Dg45Ds43jw31Tw0yjwywDouuDkqtDsqsDsprzwprDwoqzwoqzsnqjsnqjsnqz4qpDknpjgnqjgtqi8oykBA/2dv9E5c80ha7URX5Eda2E5dyFNbtlNWmVhSY049Tk04SkgzSEYvRkQrP0IlPUQjPkgjS1YuXGc8doJSiphlj6Rsjaluj7Jyl7l9nbeHkaZ9c4diUGRBPk8vQVIwTWI5Vmw7X3tBY4I/aYtBapBDZ5FFZZFGYY9HYo1GYYZBZIdDZolFaItHaY5La5BNa5JRbZRTapFOapNPapNNaZNLaJRHapZHbppLb55OdaZXc6ZXdKdYPD0rPD0tPDwwOz0yOzw0Ozw0Oz0wOz4tPkEsQEQrQkYtRkoxSUw5TU9BUFBIUlJIV1hKWlpOXl5cZmZwbm6GeXigg4C1hoTDj4zRjo3TjIvPiIbFg4C5fHqsenemeXaleniqenquf32ugX6pgX2gfnqVfHSJeXGAdGpycGZlbWBaalxRalpLbFtLbFtJa1xJaF1LZl5LaF1Lal1MbV1NcV5NeF1MgFtJkWFNmVZFpk8+tUo6xUE1zjcu1zAo3TAp4DUu4TYu4jUu4TMq4DIn3TMk3DYm2Ton0DghzTsizDwkzTsk0Ton1Dkn2DYp0joswD0pszolrjUgsDYhuTonwj0syDosyjYq2D4091pR40k/zTktzEAxtzYjqzQetD0nuzonvzcnwDcnwDcnxDYoyTcqyzcrzzcs2Twz2zoy3Toz4zw25z456T055Tg04TQw5zo26js46jo65jg36j4+9U9P/2Nj/3Bt+Whj4lVOxzw1vzAqyTQu1js23z064Ds34Ds13zsy4Dkx4Dcw4jYy4zYy5DY15TU15zc55zc56Dg76Dg76Dg76Dg75zY85zc67Dg76jg45zk44zs43D030z81yTwyvzsuszgorzoorDwoqjsnqDsmpjwmpTslpDsmoz0nnzomnzoonzkqoTUptT442lRV+mRt7Uta7kla6Elb201Zx1JYtFZUn1lRiGFQT0g1Rk43S0kyRkAoOzYZNDgVPU4iS2c2aotUdpVcg5piiJtjiptkj6Jqk6xyl7B5g5Vrbn1cUF9APEsuOEcqQVAxT186V2o8YntCZYJCaYpDapBDZ5FFY5FGYJBGYI5GYYlDZolFao1Ja45Kao9Ma5BNapFQbJNQa5RQbJVPbJZOapZLapZJbZlKcZ5NcqFQeqtaeKtceKtcQ0IwQUIyQkM1QkI4QkI6QkI4QUM1QEMwQ0cwREgtR0otSk0yTU83T1E8U1FEVVNEW1tDWVtDXF1PYWFfaGd1cXGNenmjfn6yhIO/hYPChYTAhIG4fXusd3Sfc26Wb22Ub22ccW+gdHGedXOadXKPc3CDcWt3b2ltbGJgamBXalxRalpLbVxKb1xLb11JcVxLcFpMbltNbV1Oa15NbGFPcWBOel9OhVtLnmBRpFBFrUI4tzsxxDYszDIo1DIn3DQp4Dgv4TYu4TQt4DQq4DQo3TYm2Dcl0zgizjkhyj0iyT0kyT0kzTwn0Dsn1Dgpzzwsv0AtsDsnqTQgrDMgtzgnwzstyjovzjUt1zgy7U5I8VRN1kI4y0E0vT4tpjEdsTwovD0svzorvzcpwDYpxDYqyDgtzzsx1Dsz4UQ940E840A75T065j066Dw65zk45Tg05jk15jkz5Tg06Dw69EpK/1xb/2Ri9mJeyz05wDcxvDMrwzgx0kI63UY/3D051zQv4Ds13zsy4Toy4Tgx4zcz5Tg05jY26Tc36TY56TY56jc76jc76Dc96Dc95jc85zc66zc66Tc35Tc24Ds32j040D01xjwxvTstsTgnrTonqTonpjsnpDsmozoloDoknzsknj0qkzYkmTwqmTkpmTMnwVBK7Gps7Vtl609c6Exa3UlXzUtTt1NRpFxQkGNQfmpSSU02Q0s0SEIsRTkhQDcYREkhVHA9Z5NWfbJugbNugqVlfJFWgY5YjZdiiJZhe4tcV2VBR1Q4OUYsNkMpOEUrPUouSlg1V2g8ZHtFZoNDaotEa5FGaJJGY5FGYJBGYI5FY4tFaYxIbZBMbZBMa5BNao9MaZBNapFOb5hUcJlTb5pSbppPb5tOb55Oc6JRd6ZVfK1ceaxdeKtcR0QzR0Q1R0U4SEY6SEY6SEY6Rkc5RUY0RkgyR0kxS0sxTk40UFA4U1I+VlNEV1RBW1o+W1o+WllFXltSZGJnbWp7dnOQfHidfnumgH2qhH6qgn2mfHaadG+NbmqFamaBaGSFZ2aIa2iHbGqCa2h5aWZvaWNlaGFbZl1UZ1tNZ1pJa1xJbl1JcF9LcV9LcF5Kb1xNb1xOb1xNcF1OdV5OfF1LhltLkVdJn1ZHokY5qjovtzcsyDgv0Tct2DYr3TYt3TYt3TUs3jMp3zQq3jYp3Tcp1zgl0TYizjkjzDwkyjwmyjwmzTwn0Dop0jkpzj0svkEtrzwnqDMfqjMftjknwDwtyDwvyzctzDIq30I79VtT3Uk/0EQ3yEY2qzIftz4ryUU2zEI1yT8yyj4xzT8z1EE320Q74EY+4T864j054Tk24Dc04TUz4jY05Tk35Tw54j843j012zk03j856E1I6FFK0EA4tikiti0lvjUtyD40z0A41T042Tw34Tw65j474Tk24To04Tgz5Dg05Dg05jk16Dk26Tk56Tc36jg46Dg66Dg66Dg75zk75jg65Tc56DU45TU14Tc33Tk31j03zD40wTswtzwtrTooqDsnpTwnojsooDsnnjsmnTolmjsnl0AsijUhlz4uljkqli8mzVxY9nh731hf5Fhh2VFbyEtRtkxOqFVPm2BSjmhTgG9VT1Y1P0ooPDwaQj4ZVFIpanZEgqFlk8J+h7x0hbdwe51ga4JKc39PgYhcdHxTWGI9O0QnMjwjND0oPEUwPEUwOUMqQ1EwVWY8ZXxIZ4NGa4xHbJJHaJJGZZFEYpBHYY9GZYxJao9Mb5JObpNOa5BLZ49JZ49JaJJKcpxUcZ1Scp5Rb55OcJ9PcqFQd6ZVeapZdaVZcqVacqJYUUs7UUs7UUs9UUs9UUs9UUs9UUs9UUs7VE88VE88VVA9VlE+WFNAWVNDWlREW1VFYVxIYFtHX1lLYVpQZV1baWNnb2d0c2p7d26DeXCFfHOIfXSHeXCBcmp5amJvZV1oYl9oYF9lXl1iXVtcXVlYXllVXlpRYVtPZF1NZV1KZ1xIaFxGaV1Ha1xFbFxFal5GaWNNcWZUcFlJc08/ilZJnFxQo1lMqVpLpU49pEUzpjsrsDgowDgszzgv2TQw2zIt3TYu3TYt3jcu3jcu2zcr2Tcq1zcp1Dco1Dgp0jkp0Top0Top0Top0Tkr0jkrzTssujsqtT0srjknpjEfqjIhtToqwDwtwjgryDUrzDUs0zsw2kM43Eo91Eg5wj0stjEg3FBD2EpA00U71EQ72UY+3kdA3UM73z043zYz5jg36js46To35Tg04Dcy4Dkz3D0310c+zUM4xDovuzMntzEluTUovjwuwz8ywDouxz0y0j832kA44D045jo46jg47Dg55Tc45Dc55Dg45Dg45Dg25Dg05Dg05Dg04DQw4TUx4jYy5Dg05Tk35Tk35Tk55jg56Ts85jo63zk52zw51UA6zEI4wEA1tT8xqDopojsonzwnmjsnlzsmlTkklDgjkDklj0IuiTwqhS8ikC8muk1I4m5u5GxuzFVZvEtNtE1OqlFNoVROm1hPll5RlWFTiWlQVlksOUwUNkUMUWAle41Pma9unrt4nL14kbRwfp5faIBMWm1AV2VBVF1ASFA4PkMvOT4qPkMvPEAxOD8vOkMyOEQuP04xUmQ+XHRAZoJFb5BLbZNIaZJGaJJGZ5JKZ5BKaZBPa5JRbpNQbJROa5NMapRKa5VJbJhJcJ1Mbp1McKBMcaNOc6VQdaZUeKlXeqped6ZibJpaYo5PVk8/Vk8/Vk8/Vk8/Vk8/Vk8/Vk8/Vk8/V1BAV1BAWFFBWVJCW1REXFVFXVZGXVZGY1xKYltJYVpKYlpPZFtUaF5cbGJjb2RocGVrcmdtdGlvdGlvcWZsbGFlZltfYFhWXVpTWVlPV1dNV1VJV1NIWFRIW1VHXFZGYVpIY1tIY1tGZltFaF1HaV9Gal5GaGFHYmJKbmdUdlxLflNDmVdLqlhNrlJHtlFFrUc4rEMwqzwpsTkovTksyTkw1Dcy1zQv2zcu2zct2zct2jgt2jgt2Dgs1zcr1DYq1Tcr1Tcr1Dgr1Dgr0jkr0jkr0jkrzTssvTsrtT0srTgmpTIfpjMgrzoouT4svTsrxTksxTUqyTUp0Tov2kY63k9B3VFA3E5A20c910A50js00js01D022D042zk03DQx5zc36zc47TY46jY15jc04jk04Tw220I6yUE1vkAytzkrsDUmrjUksTgntz4tvkAxxEAxzEAz1j823D034zo16Tc17jY27zc56TY65jg65jg65Tk55Tk34zo14zoz4zoz4Tgx4jky4zoz4zoz5Ds24zo34zo34jg44zk64Do63jw62D860EE7xD82tz0wrDsrojsqnTwpmT0olzwnkzsnkTomkTklizolfzgkfjoniTUqmz01vVFO1WVkz15gt01Nq01Lo1NMnFhPl1tQll1SlV9Tl15Ti2VOX14uUmYnXXIxeY9Ol7Bso757l7JvhqBfaYFHX3ZAU2Y5SVk1Q1A2P0g1OD4wNTkrOTstP0IxPT8yOD4wO0EzN0MvP00zT2Q9XXVDZoRGcJFMbpRJbJJHapNHaZNLaJFLa5JRbJNUbZRRbJROapRKapRIapZHbJlIbZ1JbZ1HbqBJcaNOdadSd6hWdqpYeKheapZXX4tQVoJHW1REW1REW1REW1REW1REW1REW1REW1REWlNDWlNDW1REXFVFXVZGX1hIX1hIYFlHZF1KY11HY1xJY1xMZFxPZVxTZl1YZ11baF5caV9eamBfamBeaF5cZFtWYFdSXVZOWVVMVlRIU1FFUU9CUU1BUk9AVFFCWFJCXFdEXldEX1hFYlpFZV1IZ19Ial9JaGJKYmFMbWZTeF5PhlhLoFxTr1ZQsUpDtkU9t0E3uD4xtjssuDkqvDgrwjosyTsvzjou1jgs2Tcq2jgr2jgr2jgr2Dgq1zcp1Dco1Tgp1Dgp1Dgp1Dgp0jkp0jkp0jkpzTssvT4ttD8urDkmoTIeoTIeqTklsz4quT4swz4vxDgrwjMlxzMnzjwv1kc520494E5B2Dkz2DQy0jMv0zQw2To24Dw65T086Do77Dg77TU36zM16TI05zU15Tk34Tw42D83vjgsszkqsDYnrDQkrTUksDgntTwruz0uyEQ1zUM21UE13D414To05TYz7DY17zc56jY56TY56TY55zc35jk15Toz5Toz4zsy4zsy4jsz4zw04Tw24Ds33zo23jk33Tk43Dg32z082kA+0kE8yD83uTsvrTcrojcnoDspmzwolzwpkzwokTomjzoljjckiDomejYheDUihzksnkY8tlNOvlZTtlBOqUpGok1InFNKmFpPl19SlWFUlWFUlV9ViWVPcnFFeo1Vk6Zuo7h/qr+GnLR6eZBYWG85P1IkQFIoQVEtPUwvOEQuND0sMzktNTgtOTstP0IxPD4xNz0vOkAyN0MvPkwyT2Q9XnZEaIZIcpNOcJZLbpRJbJVJbJZOapNNbZRRbpVSb5dRbZVOa5VLapRIa5dIbZpJbZ1JbZ1JcKBMdKNSeKlXeKlYdKVWcJ9XXYlKVX5ETnc9YFlJYFlJYFlJYFlJYFlJYFlJYFlJYFlJXldHXldHX1hIYFlJYVpKYltLYltLY1xKZF5IZF5GZV9JZV5LZV5MZV1QZFxRZFtSZ15VZ15VZl1UZl1UZV1SZFxRY1tOYVtNXFhMWFZJVFJFUE4/T0w9T0w9UU49Uk8+VVI/WFNAWlVBXVhEYFtHYl1HZmBKZmFLY2JOa2RSdF1Ph1tQp2JbtVpVtkZEuTw4wTw3xTozxDowwjgtvTgpvDsovT4rxD8s0Tkr2Dgq2Tcq2Tkr2Dgq1jkq1Tgp1Dgp1Dgp1Dgp1Dgp0jkp0jkp0jkp0jkpzTwrvj8utD8uqjomoTQfnDMdojgirD4ntD8ruz4svzorwjYnxTYoyTcqzDotzD0t0jov3TU03jIy2jAw2zMy3jk35Dw76T096zs96zc66jM36TA15jIz5TU34Tg12TUzzjcwtjQnrjYmrDcmqzYlqzglrDkmsTkoszopw0ExyUEz00E02kA24Ds15Dg06jY17Tc27DU36jY36jY36Tc15zgz5jkz5Toy4zsy4Dkw3jox3js03js23Ts22js32To31zk41Ts51EA80kM9x0E4ujwwrDYqozUmnTYlmjsnlzwpkzwokDsmjTslizkkijgjhTgkgD0qdjUhfzYnl0U5qU9Hqk1GpktGpVBJm1FIl1VJk1tOkl5QkmFTlWFUlmBWi2ZTiIZfmKh3rb2OpriIkKF0coVXTmA2LkAYLD0ZMkEiOEYsOkYwOUIxNz0vOTwxOz0yOTosPkEwOz0wNjwuOkAyNkIuPUsxTmM8YHhGaYdJc5RPcphNcJZLb5hMbphQbZdPcJhScJhScJhRbpZNa5VJa5ZHbJhJbptKbp1Mb55Nc6JReKdXeqtadqdYbJxQZJNLWoRFUntBTXY8YltLYltLYltLYltLYltLYltLYltLYltLYVpKYltLYltLY1xMY1xMZF1NZV5OZV5MZF5GZV9HZmBIZ2FLaGFOZ2BNZl9NZl9PaWJSaGFRZ2BOZ2BOZl9MZl9MZ2FLZmFNYV5NXltMWFVGU1A/T0w7Tks6TEs5TUw6T046UE87UlE9VVRAWFdDWllEXVxHXl1JYmFPZl9PbFZIhVtPqmphvWRev01Mx0FCzzs70zk30TgzyzYvwTkruTwotEIqu0MqzDso1Tgn2Dgo1jko1jko1jko1Tgn1Dkn1Dkn0jkn0jkn0jkn0jkn0Ton0TonyzwrwT8vtD8uqjsooDcimTUdmTceojwlrEIssTwouDspwTkrxzktyzkszTkt0Dww2Dsy6Dg66zQ55jM34jQ24TQ23zU24DM14TM16DU56DM45zQ45jY44zk62zc1zzEuwDAotDYorTooqzooqzooqTomqTomrDkmrTgmtzoowDwtzT8z10A33z424zw26Dk26zc27Tc27Tc27Tc26zg06jg06Doz5zoz5Dwz3jox3jsy3Tw02z432T451z451z070z08zkA8yUI8xUI6uT0zrDgrozUonDYnmjspljsokTwojjwnjDsmiDokhjgkhzYjgzgjgkEtcjMheDMjk0c5olJHoE5DnE5EoFZLllZKklhKjlpMjVxOj11Sk19Ul2FXjmdWjYlmlqV6m6qBf49oXGxIRFMyMkEkJDIZLDojLjsnMj0tNz8wOkA0Oz4zOjwxOTktODkrPUAvOz0wNTstOT8xNUEtPUsxTWI7YHhGaohKdJVQc5lOcphNcJlNb5lRbphQcJpScZtRcJpQbphMbZdLbZhJb5tMcZ1OcaBQdKNTeKdXe6pceadccJ5VYpJIWIdBXYdIVX5EUHk/ZF1NZF1NZF1NZF1NZF1NZF1NZF1NZF1NZF1NZF1NZF1NZV5OZV5OZl9PZl9PZl9NZmBKZ2FJaGJKaGJMaWNNaWNNaGFOaGFOaGFOaGJMZ2FLZmBIZmBIZ2FHaGJIaGJKZWBMYF1KW1hFVlNAUU47TUo5SUg2SEc1S0o2Skw3S004TE88T1I/UVRBUlVCU1ZDWFlJXVdJYlBCelhMoGdetWVew1VU1lFS2UBC3To72zc21Dcwxzsuuz4qsEQos0EmyTsn0zgm1Dkn1Too1Too1Too1Dkn0jkn0jkn0jkn0jkn0Ton0Ton0Ton0TonyzwrwD4usz4tqjsooDoklzcelDYcmTshpkIqsUMsuD8svzsswjYpxTMmyzQp0jsw3z046DU57TQ66zY76Do85Ts84zs74Ts74Do63zU44DY34jk84Dw92z080Dg1wzIttS8mrzopqj0pqj0pqD0pqD0ppjwmpzolqDgkrTUktzgnxDwuzzwy1z013Tw04zw26Ds36zg07Tc07Tc06zgz6jkz5zoz5jsz4zwz4T413kA320E52UI71kE71EA80UA9zEE8wUA6ukA1sz0zqTktoDYomjYmljknlTwqkDsnjTwnijwohzomhDkkgzgjgzYkfzYjezomcTIgfDkolE8/o1lMnFJFlU9DmFZIlFpMkFtNjFtNjFtNjVtQkl5TmF9WjmdWfXdXeIRecHxYU2FAOUYqLjwjLzwoMD0sMT0vMjwxNT0yOT81PkE4P0E2OzsvNzgqNzgoPD8uOjwvNTstOD4wNEAsPEowTGE6YHhGaohKdJVQc5lOcphNcZpOcJpSb5lRcZtRcZtPcZtPb5pLbplKb5pLcp5PdaFSd6ZWeKdZeqlbd6VacZ9WZpRMW4pCVoNAX4hMV4BGUntBZV5OZV5OZV5OZV5OZV5OZV5OZV5OZV5OZV5OZV5OZl9PZl9PZl9PZ2BQZ2BQZ2BOaWJPaWNNaGJMaGFOaGFOaGFOaGFOaGFOZ2FLZ2FLZ2FLZmBIZmBGZ2JFZ2JFZ2FHZmBKY15KYFtHXFdDVVM+UE06S0o2SUg0Rkc1Rkk2Rkk2R0s6SEw7SU08R048Sk4/TlBCVVFFWE9AaFJEgVpLllZKr1JL01lW20lJ4EBA3jg42TcyzjsxwUAtsUInsT4jyDsn0Dcl0Tgm0jkn0zoo0zoo0jkn0Ton0Ton0Ton0Ton0Ton0Ton0Dsn0Dsnyzwrvz0vtDwuqzwpoz0nlzkgjzUbkzkeoEAnrUMttkEvvD0swDYpwi8lxi8m0DYu3To15zQ47TU97DtB6UBD5EFC30FA20A+2T89zDIyzzUz0jo50Dw6xzw3vTgxtDUsqzUppzwqpD0qpT4rpEAppEAppD4opTwnpzolqjcksDcmujgqwjgryzgu0zoy2zw24z446Dk06jkz6jkz6Doz5zoz5jsx4zwz4D4z4EI33EI410M50kI5zkE6yD85xD05vz44sDsypzsuoTcqnDYolzcnlDknkDsnjDsoiTwoiD0ohDsogzongDklfzgkfzYlfTYkdjMidzYkhUIyl1REnFhLlFBDkFBElFlLklpNj1tNj1tOkFxPklxSlVxTl1xWjWNVa2JDVmA7SVMxPEcpNEAoMj4qND8xNT80ND41NkA4PEM7QUc9REc8QkQ2PT4uOzooNzgoPD8uOTsuNDosNz0vNEAsO0kvTGE6YHhGaYdJdJVQc5lOcphNcZpOcZtTcJpQcJxPcJxNcJxNbptKbptKcJxNdKBReKRXfqpdfqpfeKZdb51VZJFMXIlEW4hDXIlIYIlNWYBJUnlCZ2BQZ2BQZ2BQZ2BQZ2BQZ2BQZ2BQZ2BQZl9PZl9PZl9PZl9PZ2BQZ2BQZ2BQZ2BQa2RUamNTaWJSZ2BOZl9NZl9NZl9NZl9MZ2BNZ2FLZ2FLZ2FJZ2FHZ2FHZ2FHZmBGZ2FJZmBKZF5IYFtFXFdDVVM+T046Skw3RUY0REc0Q0c2Qkk3Qkk5QUo5Qks6Q0o6SEw+UFFDUlBBWE07ZEs3c0Q0lUk8wVhS11FO3kRC3jo52zc11Dszyj4vuD4ptDchyDomzzgl0Dko0Dsn0jsq0Two0Top0Dsn0Top0Dsn0Top0Dsn0Dop0Dsn0DopyzwrvzsutTsurTwqpD4omDohjjQakjgenkAmoTgirzwpvj8uxjwvyjctzzYu2Ds04j486z5A7j9E6UNF4kRD1UA8yTo0vzQvuDErtzAqujUwvTk0ujs0sDkxqDgtozksoDornj0qnj8roD8sn0AqoEAqoEAqoj8qpD4oqDsnrToosjcotzUnvzUqyDow0z4330I75D015zw05zw05T005D004j404EA03UE120M41kM50UM5ykE3wz43vDs1tjkzrzoxojctmDcnkjUmkjclkTopjjspiTsnhDkmhj0qhD0pgT0ofzsofTonezglezckejUldzIifjkpjEc4lVJCklBCiks8j1FEmV9RkFhLj1pMklxQlVxRll1UlltTlllUil5RYVg5RU0mNT8cN0IkPUcvOkYyMz4wLTcsLzkwNT82QEY8RUs/R0k7QUQxPj0pOzomNjclOz4tOTsuNDosNz0vNEAsO0kvS2A5X3dFaYdJc5RPc5lOcphNcZpOcZtTcJpQcJxNcJ1Mb5xLbptKbptKcZ1OdqJVeqZbgq5jf6pidqRcaJVQWodEVoNAXIlGZY9PY4pRWYBJUnlCaGFRaGFRaGFRaGFRaGFRaGFRaGFRaGFRZ2BQZ2BQZ2BQZ2BQZ2BQZ2BQZ2BQZ19SaGBVaF9WaF9WaGBVaGBVaGBTaGBTaGFRaGFPaGFOaGFOaGFOaGJMaGJMaGJMaGJMZ19IZV9HZV9JY15IYVxIWlhDUlE9S004SEk3REc0QEQzPUQ0PkU1Pkc2PkY3PUU2RUw8SEw7QUYySkk0W1E4YUUvgUo2vWpc3Gde4FVQ4kdF40E+30A61T41yT0wxj0txjUkyjQjzDYnyjclzTcozDkn0Dor0D0r0Tsszzwq0Tss0Tsq0Tss0Tsq0TsszD0tujImtjgssDwtpToomjcikTUckzcenDkirEIssTwquDYowDMpyjYs1Tw04UQ950hE50NE5kZI20NCyTo2ujUutDgurjgupjQpqTktpzgtozksnjgqmjgrljorkTsqkTsqlj0rlj4qmT4rmEAqmj8qm0ArnUEsoEAqoDsnpDknqDcnrjYmtTcpvTktxDsxyzsy2j003j0z4D814kE34EI320E12EAz1EA010g60EY5xkA1uzswsDUtqTIqpDEqnjMpmTktkjsqkDorjDkniDkohzoohDsogzwqfjonfDkmejklejknejknejkndzYkdzQkdy0gikAzl09Bk04/jkw+kVJDk1VIjVJEl1tQl1tRkFRMkFRMl1pVlFdSk1ZRk2hYXFMySFAnQUsmQEspPkgtNUErMTwrMz4uMTwuRVBCWF5QVVxKTE86Q0cuQEAmPDwkOTooPD8uOjwvNz0vOT8xMj4qOUctTmM8YnpIaohKc5RPcZdMcJZLcJlNcJpScJpQcJ1Mb59Lb59Lb55NcJ9Oc6JSeqZZfqpfgq1ld6JbaZRPX4lHXIZEYIpKZI5OZ5FSY4pTWoFMU3pFaGFRaGFRaGFRaGFRaGFRaGFRaGFRaGFRaGFRaGFRaGFRaGFRaGFRaGFRaGFRaGBTaWBZaWBbaWBbaWBZaWBZaWBXaWFWaWFUaWJSaWJQaWJSaWJQaWJQaWJQaWJQaWJPaGBLZ19IZmBKZV9JY15KXllFVVI/T046SUo4RUg1QUU0PkU1PkU1Pkc2PkY3PUY1P0g3PUYzPUcvRkwyTUkuUz8mfVA5u3JhyWNV3l9Y6VVR5UdE30A830A82D85zTkvzTkrzTwrzjwtzj0szTsszDsqzTkrzToqzjoszjsrzjoszToqzzkrzzkqzzkrzDotyT81xEE3vEI1rj0tnTYjlTIdlTIbmzIdpTQisTYmwTsv0EI43UY95EpC6EtE6EtG3UJA2kRDzUI9uzsyrzktqT0woz8vnT0tnUAvmj4vlj8ukz0ujT4tij8shEAthj8rjTwpkTsqkTwokj0pkz4qlD8rlj8rlz8rnUAunz4tojsqpjgpqTgqsTgttDotvDotyTsxzzsx0j401UE11UM21EU30kQ4zkQ3x0E1wkAyuT0xrzktpzcsoTUrnTUsmTcskTssizwriTwqiDsphjsogzopgT0qgD0qfDsneTooeTooeDkneDkodjkndDcldjQkfTMmkEQ3l09BkUw9jEo8jlBBkVNGj1FGklJJl1dOlVROlldQm1xXk1ZRjVRNiWJRXVczWGM4Xmk/WmZCR1U0NkMnNEAoPEg0TFhEV2NPXWZRVFxFSE40QUUqPUAjOzshODolOz4tOTsuNz0vOT8xMj4qOkguTmM8YnpIa4lLdJVQcphNcZdMcJlNcJpSb5tOcJ9Ob59Jbp5Kbp1McaBQdaRWfKhdfqlhe6Zfb5pVYYtJXIZEX4lJY41NZI5OYoxNYolSWYBLUnlEaGFRaGFRaGFRaGFRaGFRaGFRaGFRaGFRaGFRaGFRaGFRaGFRaGFRaGFRaGFRaGBVaWBbaV9daV9daWBbaWBZaWBXaWFWaWFUaWFUaWJSaWFUaWJSaWJSaWJSaWFUaWJSamJPaWFMaGBLZ2FLZWBMYVxIWVZDU1I+S0w6R0o3Q0Y1QEQzP0Y2P0Y2PkU1PEU0O0czNUErPkgwR0syRD4kVUAlhVtDtXJfs1ZH2GNZ7mVf61NQ5UdG6UdF5kRC2Ds2yzcryDkpyTosyToqyDkrxzgoyDYpxzUmyjgryjgpyjgryjgpyzcryzcpyzcryjctwTIqvjUvtjYtrDMooTAgnS8enzEgpjMhu0Axx0M31Ec94EtE5k1H50pF5UZC3kM/1kI+zkM+wUA6sTsxozwtnkEwmkUxlkUyk0UxkEMxjkMwiEEvhEEuf0EsfEIufkArhDsqiDkoiTopiTopijwoiz0pjTwpjzwqlUAslj0rmDsqmzoqnjgpozkrpjotqzosuDouvDotwDwwwj4yxEAzxEAzw0EzwUIztTorrzkrqjkrozcqnTcrmTcsljgskjouizwtiDwshTwrgzopgjspfzoqfjsqfj0rfDspejsqeTopdzoodTcocjcncTYmdDUmhjwxk0Y8lU1BjUk8iEg8jE5BkVNIkVFHkU5GmFNMl1ROl1ZQmVxXkVpTjFpTjWxZgH5YfYpcfotfaXhPSlg0NUUhO0orTFs+Y3FXYm9VW2VMTVY7Q0ktP0QmPUAhOj0iNzkkOj0sODotNz0vOkAyMz8rOkguTWI7YnpIa4lLdZZRc5lOcphNcJlNcJpSb5tOcqFQbqBJbJ5Jbp9NdKNTeahaeqhfeqhgb5pVZI5MW4RCW4RCY4xKaJFPZI1LXoZIYodRWX5KUndDaGFRaGFRaGFRaGFRaGFRaGFRaGFRaGFRaGFRaGFRaGFRaGFRaGFRaGFRaGFRaGBVaWBbaV9daV9daWBbaWBZaWBXaWFWaWFUaWFUaWJSaWJSaWFUaWFUaWFUaWFWaWFUa2NQamJNamJNamJPaGFOZF9LX1pHWVZDUE89S0w6R0g4Q0Y1QUU0QUU2P0M0PEMxPEgyN0MrREkyS0cuTTsjb0w2mGRPp15NoEAyxVNJ52Ne72Bc61NS6UtM6EVI30FAyzgwxTkqxTcrxTcpxjgsyTosyjovyjst0D0z0D4x0T400T8y0j400j4y0z810j830z870UI+y0Q+xUU8wEY5wUk7x01AzlBE2FJH3VBH4UxF40pE40ZB4UQ/4EE92kE81EU/yEM8uj83qjwvnz4umEMvlUczkUg1jUYyikYziEQxg0IwfkEue0AueEEtekAsfzoqhDgqhTkrhTkrhjoqhjoqhjoqhzsriDspizopjDkpkDgqkzoqlzssmj0uoT0uqDkuqzkurjkvrzsusDosrzkrrjgqrDgppzYmpDYnnjcomjYnlDcokDgqkDotjTsthzsrgzwqgjorfzoqfjkpfTopfDspfDoqejsqejsqeDordDkpcjcncDcmcDcmdDYniUM3kUk9j0s+iEk6hkg7i1BCk1VKl1RLlVBJm1ROl1JNlFNNlVxVj19Vj2ddlX9qkpRtg5NkcoJVWGk9QlMpPk4nT186Y3NPZHNSWmlKTFk7QUwuPEUoPUMnPEAlOz0lNzgmOTwrNzksNjwuO0EzNEAsOkguTGE6YXlHaohKdJVQc5lOcphNcZpOcZtTb5tQcaBPbZ9KbZ5McqNSeahae6led6Vdcp9aYYtJXIZEW4RCXodFZY5MaJFPZI1LX4dIYYZQWH1JUXZCaGFRaGFRaGFRaGFRaGFRaGFRaGFRaGFRaWJSaWJSaWJSaWJSaWJSaWJSaWJSaWFUamFaamFcamFaamFYamJXamJVamNTamNRamNRamNRamNRamNTamJVamJVamJXamJVbGNSa2NQa2NQa2JRamNRZ2JPYl1KXVpHVVJBUVA+TEs5R0g2RUY0QkU0QEMyPUIuPEoxPUcsS0cuUz4pZD4rk1pJq19Smj4znjMrtj8311hS8Wpm9WVk6VNU5ElN505Q2ElB0EY5zD81yj4xzUA20kQ41EY81Uc72kpB2ko/2kpB20tA3UpC3ktB3ktD30pD6VRQ51NR41RQ3FNN11JL11JL2lRL31RN3U1F4UlE40VC4kNA4UI+4kM/4kVA30dC2ElFyUQ/uT43qzwxnz8xlkMxkkUzj0g0iUUyiEMzhkExg0Awfj8ufD4veT4uez0ufzktgjgrgjosgjosgDssgTwtgTwsgTwsgTkqgjkqhTkphzoqiTorijssjj0skjwtmDoumzksnjktnzkroDkqojgqojgooTcnnjcmmzcnlzcnkzcojzkqizopiTorhzstgzssgDsrfzorfTgpfTgpezgoejgoejgqeDkqeToreDotdDkrcTYobzUncTcpdDkri0k7jEo8iEo7hEk5hUs9jFJEklZLl1dOllFMmlVQl1NQklVQkWBZiGJXgmhZhnpibXNPWmk+SVgtQVImSFktV2k/ZHZMaXtTWGpETFw4PUwrOEUnOkQrPEQsO0AsOTwpNzgoODsqNjgrNjwuPEI0NUEtOUctSl84XnZEaIZIc5RPc5lOcphNcZpOcZtTb5tQbp1NbZ5McKFPdqdWfKpfeadecJ1YZ5RRWYNBW4VFYIlHY4xKZ45LZ45LZYxJZItMYIVPV3xJUHVCaGFRaGFRaGFRaGFRaGFRaGFRaGFRaGFRaWJSaWJSaWJSaWJSaWJSaWJSaWJSaWFUamFYamFYamJXamJVamNTamNRamNQamNQamROamROamNQamNRamNTamJVamJVamJVbGNSa2JRa2JRa2JRa2RSaWJQZl9NY15LXFZGVlNCUU49TEs5SUg2R0Y0REMxP0IvOkguP0grTkIqYD0qg0U6q1hQtE5KnCwosjs3uT450lJP8XBr/HZ18WVm6llc7l5e4lVO2U9E0Uc9zUM40UQ71Ec91kc/1kg+2UlB2UlA2kpC2kpB3UpD3ktD3ktE4EtF4UdH4EZG3EhG2EdE1khE1UdD10ZB2kVB3UI+40E/5kJB6EJC5kJA4kM/30I92UE82klGyUI+uTw2rD0yokAzl0Ewj0IwjUQziUEyhkExhj4whT0vgDwvfz0vfT0xfz0xgDowgDowgDowfzsugDwxfz0vfz0vfz0tfz0vfz0tfzwsgDsrfzorfzoqgDgpgTgpiTotjTkukDotkjoslzssmTwrnT0tnT4smDgoljkokjkpjTooiTophjoqgzorgjorfzorfjkqfTgpfDcoezYnejcnejYpeTcpdTYndjgpdzksczgqbzUnbTUmcTksdjwuikw/hks7hEs6gUw6hFFAi1ZIkVdMllZNk05JmVRPllVRk1xVj2Rbel5QZFdEYF5FRU8sPk4nPk8lSlwyXnFEaX9RY3lLVmw+TV81QFIsNkUkNUQnOkYuPEUyOD4wNjosNzkrOTwrNjgrNjwuPEI0NUEtN0UrRls0WXE/ZIJEcJFMcZdMcphNcptPcpxUcJxRbZxMbp9Oc6RTeKlaeqhfc6FZZ5RRXYpHWIJCXIZGY4xKZo9NZo1KZY1HZY1HZo1MX4ROVntIT3RBaGFRaGFRaGFRaGFRaGFRaGFRaGFRaGFRaWJSaWJSaWJSaWJSaWJSaWJSaWJSaWJSamJVamJVamNTamNRamNQamROamRMamRMamRMamRMamROamROamNRamNTamJVamJVbGNUa2JTamFSa2JTbGNUamNTaGFRZl9PYVpIXFdEVlE+T0w5TEk2SUYzRkMwQUMuOkcrQEYqVUArd0Y3ok9JskhItDc7uDM2yEJDwz4/ykpJ32Je73Jw7m5t5mFi4lpa2lFL1EtBzkU9zEM5z0Q90EY80EM8zUA30UI80kM700I91EQ810M/2EU+2ERA2kVB3EBB3UFE3UND3EZF30lI30lI4khG5EZF5kJD6UBD60FC60FC5kBA4T892T451Dw32kZEyD06uTgzrjwypkA0mD8vkD8ujUAwiT0viDwuiDouhjkvhjkxhDoxgzozhDs0gDoyfzsyfzsyfjwwfjsyfDwwfDwwfD0uez0wez0uez0uezwrejsseTopejgoeTcnfzktgjouhTkshzksjDoskTsskzwrlTwqkTgokDkojTooijsqhzsrgzwqgDsrfjsqfjkqfzcpfjYoezYnejQoeTUoeTUqeDYqczMndDYpdjgtcjYrbjQobTUoczsueEAxiVFCg048gE08gFE/hVZGiFdIjVRJkVJJkk9JllNNkVRPjlxTh2VZbFtJTkw1REouQE4tSlo2V2dCX3FJZXpPYnlLVW09RVwuQVYrNUojL0AgNEIoO0czO0M2Nzw1NzozOTsuOj0sNjgrNjwuPEI0NEAsNkQqQ1gxVW07YH5AbY5JcJZLcZdMcptPcpxUcJxRbp9Qb6NRcqVWdKdacaFXaZhQX4xJWYZFXYdHX4lJYotJZI1LZo1KZY1HZIxFY4pHXoRLVXpHTnNAaGFRaGFRaGFRaGFRaGFRaGFRaGFRaGFRamNTamNTamNTamNTamNTamNTamNTamNTa2RUa2RUa2RSa2RRa2VPa2VPa2VNa2VNa2VNa2VNa2VPa2RRa2RSa2RUa2RUa2RUbmJUbWFTbGBSa2JTbGNUbGNUaWJSZ2BQZF1NXllGWFNAU047T0o2TEczSUQwQ0MrPkcqREQoW0IsiFRGrV1WqD4+qi8yy0hNxD9CvTs9ujo5w0ZE2FtZ4mVj21lZy0dF0ElFzkU/zEE8zkM80UY/0kdA0EM8yT81zkM8z0Q90UQ900Q+1UQ/2ERC2kRD3ERD3j9D3kBB3kJD30VF4EZG30VD30FA3j4+50FD6EBA5z0+5T094z094kA+4UQ/30ZB1kJAxTo3tjUvrzoxpkA0lz4wjz0viz8xhTwthTsuhjkvhjkxhjkxhzgxiDk0hzo0gjkyfzsyfzswfzswfjwwfTsvezsvezwtdzksdzkqeDoreTsseTsseTsseTssejssfTsvfTkufjgsfzcpgjYohDYphjcohjcmiDkqiDkqhzoqhTwrgTwsgD0sfjwsfTsrfDgrezcqezUpeTUoeDQndzUpdzUpdTUpcDIlczUoczcscTcrbTUobjYpcj0veEM1iFVEglFAf1BAglNDiFdJi1VJjFJHjU5FlFNNk1RNiFJIg1lNfWNSY1tER0swPEkrSFc2WWpGZXpTY3hPWW5DUWg8TWI3SV4zOkwmL0AeKzodMz8nPEU0PEI2Oj02OTw1OjwvOT0uNTkrNjwuPEI0Nj8sNUIoRFQwU2k6YXpBbYtLcJROcZdOcppRcpxScZ1ScZ9Uc6NXdaVbcqFZbJpSY5BLXYdFWYNDYoxMYIhJX4hGYYpIZo1KZ49JY4tFXoVEXoRLVHlGTXI/aF9QaWBRaWBRaWBRamFSamFSamFSa2JTamFSamFSamFSamFSamFSamFSamFSamFSamNTamNTamNTamNRamNRamNRamNRamNRa2RSa2RSa2RSa2RSa2RUa2RUa2RUbGNUa15OcGBRcWRUcGRUbGNUaWBRaGBTaGJSZ2FRZWJPYV5LWVdCVlE7VE85T0kxR0MoSkYpST8kYkoykWhWtHhtum1lt1lXuU9PtUNDukJDwUNExkZFzEdI0EpJ0UtK00tLzkRCz0NC00VD1EZC00Y/0EM8zkQ6zkY6x0M3x0U4ykU8zEY90kRA1kJC2UBD2z9D4EFF4EJD4UNE30RC4EVD4EVD4UZE40VC4kNA5EJA40E/4z894kA94kA94EE93EM+0kM9xD84tTkxqDgtnzoulT0vjD4xhD8wgT8xfz8zgD4ygDwxgzoxhjkxiDgxhzgxhTswgzstgzstgTwtgDssgDssfzwsfzwsfjotfjotfTstfTstfTstfTstfTstfTsvezktfDgtfDgtfTcrfjgsfjgsfjgsfjkqfTcrfTcrfDgrezkrejgqeDkqeDkqdjgpeDgsdjgrdzcrdTcqdDYpczUqczUqcTUqazElcDYqbjQoazMmbzcqajUnbjkrfUk7g1NFg1NHhFJHh1FHi1BIj1BJkVBKklFLklNMilRKhlpNf2JQbV5HVlU5S1Y0TV46an9YYXhOWXBGU2pAUWY9TWI7R1g0QlEwNkMlMj8jMDoiMzsmOz8uP0EzPz8zPD4zMzkrMjorMzkrNTstNz4uOUEsO0MsO0YoUWA5X3JEbodQcpBScZRQcZlScpxScp5TdZ5YfaZifaZkcJlXYotJXYZEXYVGXIRFXoZHYYhJZItMZYxNZYxLYolIX4ZFXYRFXoFLU3VCS207aF9QaWBRaWBRaWBRamFSamFSamFSa2JTamFSamFSamFSamFSamFSamFSamFSamFSamNTamNTamNTamNTamNTamNTamNTamNTa2RUa2RUa2RUa2RUa2RUa2RUa2RUbGNUcWFScWFRb2JScGRUcGdYb2hYbGZYZ2RVZ2RVa2hXbWpXamhTaGNNY19GW1U9UkwyUEsuRj8jUEAna1A7f1hHg09ChkY8kkU/sFdTtlRRulFOvVBNv05KwE1KwkxIw0xIz1NRx0dGwT07xD06zkNA0UY/zEI4xj0zyEQ3yEY5ykY6zUc+00VB1kRE20JF3UFF3kJF4EJD4UNC30RC4EVD30VD4EVB4UZC30RA30RA4EM+30I93kE83kE84EE93EM90kU8x0I5uj40qzsvnzoukzstiT0vgT4uf0AxfEEzfT8yfz0xgTsxhjkxiDgxiDgvhjothDssgzssgzssgjorgjorgDssfzorfzorfzorfjotfjotfjotfjotfTsvfTsvfDgtfDgtfDgtfDgtezktezktfDouejouejouejoueTkteDoteDotdzksdzksdzksdDgtdDgtczcsczcscjYrcDYqcDYqbzUpajIlbzcqbTUoazMmbDcpajUnbjkrfUk8g1NHg1NJhlFJi1BKj1BLk09MlFFLklNMiU5Gg1NHf1tLemRNcWpQaGtMY3FOZnhSXXRKVW5ET2U+S2E6Sl45Sls3RlU2QlE0O0UsNkAoMzsmNjsnOz4tP0AwPj8xOz0wMzsuMTwuNDouNTstOT0uO0AsPEErO0QpUVs5Xm1Ea4FQcIxSb5JQcJhRc51Tcp5Td55be6JjeJ9ga5JTYIdIXYRFXYRFXINEX4ZHYYhJY4pLZItMZItMYolKX4ZHXYNGXH9JUXNASWs5Z2BQaGFRaGFRaGFRaWJSaWJSaWJSamNTaWJSaWJSaWJSaWJSaWJSaWJSaWJSaWJSamNTamNTamNTamNTamNTamNTamNTamNTa2RUa2RUa2RUa2RUa2RUa2RUa2RUbGNUcGNTb19Qa11QbGBSbmRYb2daa2VZZWFVZmJWb21eendofntqf3pnenVhb2pWY2FKUlU6REcsQD4lTEErU0EtUzgnXTcqbD4xbjgudDgufjszh0E5kUg/m1FIpFdNrFlRu15XulNOt0dDukM/xUNBz0VC0UM/zj85z0I50EM6z0U700Y/1UZA10ZD2kRD3ENF3kJD3kJD30NE3kRE3kRC3kZD30VD3kZD3UVA3EQ/20Q92kM82kM82kM83EM92UQ91EU9zEY9wUI5sj0zoTkukTgqhzksgTwtf0AxfkAxfj8wfz0vgTsvhDovhzkvhzkvhDotgzssgzssgjorgjorgjorfzorfzorfjotfjotfjotfjotfTsvfTsvfTsvfTsvezgvezgvezgvezgvezgvezgveTkveTkvejoweTsweTsweDoveDovdjovdTkudTkudDguczctcjgtcTcscDYrcDYrbzUqbjUqajEmbzYrajQoaTMnbDYqaTMnbTcrfUc7hlJHhlJHilFIjFFJkVJLklNMk1RNkVZOiVdOhlxQfl5Pc2FLb2lRbnNVa3ZWZXZUUGQ/SV85RFgzQlYxQlYzRlc3RVQ3RFI4P0kwOkQsNj4pNzwoOT0sOz4tOz0vODwuNT0yMjwxNjwyNjwwOT0uOj4tPEErOkMoTVc1WWg/ZnxLbIhObZBOcJhRdJ5SdKBVeqFed55fbpVWYolKXINEW4JDXINEWoFCX4ZHYIdIYolKY4pLY4pLYYhJXoVGXYNGWH1HTXI/RGk2Z2BQaGFRaGFRaGFRaWJSaWJSaWJSamNTaWJSaWJSaWJSaWJSaWJSaWJSaWJSaWJSamNTamNTamNTamNTamNTamNTamNTamNTa2RUa2RUa2RUa2RUa2RUa2RUa2RUbGNUcWRUb2FUbGBSaV9TaWFUamRYaWVaaGZaaWdbd3VpiIR4kI1+lY+Bkox8iINwe3pmXmNMTFQ8Q0cwREYwRkQvRT0qTDwsVUIzTzgoUjYoVDQnVjQoXDYpYDgsZDwwbT0xikxBnFJJrVZPtU9Lu0VDw0FB0ERD10dG0UA71EA81EQ81UU92UVB2UVB20ZC3UVE3UND3UND3kRE3kRE3UVC3UVC3UVC20ZC20ZA2UY/2EU910Q810Q810Q810Q81UU81EQ80EY8yEU7ukE2pjwvlTgpizkrhDwtgT8vf0Axfj8wfz0vgTsvhDothzkvhzkthDssgzssgjorgjorgjorgTkqfzorfzorfjotfjotfjotfjotfTsvfTsvfTsvfTsvezgvezgvezgvezgvezgveDgueDgudzkueTsweTsweTswdjovdjovdTkudTkudTkuczctczctcTcscDYrcDYrbzUqbTQpbTQpajEmbTcrajQoaDImazUpaDImazUpe0U5iE9Gik9HjFFJjlJKkFRMkFVNkFdOi1lOiF5Sg2JTdl9NaVpHY15IZGhPXGZLTl1ARVU4QFExPEwvO0suPk4xQlA2RVM5R1M7QEw0PkcyOUItNz8qNz4sNz4sODwtNDosNT0yMz00Njs0NjwyOT0vOj4tO0AqOUInSVMxVWQ7YnhHaYVLbZBOcppTdqBUdqJXeqFecZhZZItMW4JDWYBBW4JDXINEWoFCXoVGX4ZHYYhJYYhJYYhJX4ZHXYRFXIJHV3xITHE+Q2g1Z2BQaGFRaGFRaGFRaWJSaWJSaWJSamNTaWJSaWJSaWJSaWJSaWJSaWJSaWJSaWJSamNTamNTamNTamNTamNTamNTamNTamNTa2RUa2RUa2RUa2RUa2RUa2RUa2RUbGNUcmZYc2dZcWdbbGRZaGFXaWVacm5lendugH12jY2Fn5yTp6WZqqabqKSYopyOmJWGeHtoYmdRTVI8RUo0Q0g0QEUxQUQxREc0S0w6SEk3RUQyQT4tQDosPzcqQDYqRjQmUjUnb0M4i1BInk9KrUlHvUZIykVI0UJE1UFB1kA/2EM/2URA2kU/2kU/3EQ/3ERB3kRE3kRE3UND3ERD3ERD3ERD2kVB2UVB2UY/1kY+1UY+1EU90kU70kU700Y81EY800A400M7y0U6v0M3rT8ynDotkTssiT0tgz4ugT8vfj8ufz0tgD0tgzsshjothjosgzorgjorgjorgjorfzorfzorfjkqfjkqfjotfjotfTsvfTsvfTsvfTsvfTsvfTsvejoweTkveTkveTkveDgudzkudjgtdjgteDovdjovdjovdTkudTkudDouczktczktcTcscTcscDYrcDYrbjUqbTQpbDMobDMoZzElbDYqaTMnZjIlaTUoZjIlaTUofEM4ik5EjU5Fj1BJj1NLjlVMjFhNiVlPg1tPeVlMdF1NaVpHXFVCWVhDWV5HTlhAP0szOUcuN0UsNEIrNEIrN0UuPEgyQEw2Q085QEw2PUk1OUUxOUIvN0AtNT4rND0qMjorMz00Mjw0NTozNTsxODswOT0uOj8rOUInR1EvUmE4X3VEaIRKb5JQdZ1WeKJWd6NYeJ9ea5FUXYNGV31AWX9CXIJFXIJFW4FEXoRHXoRHX4VIX4VIX4VIXoRHXYNGXIJHVntHS28/QmY2Z2BQaGFRaGFRaGFRaWJSaWJSaWJSamNTaWJSaWJSaWJSaWJSaWJSaWJSaWJSaWJSamNTamNTamNTamNTamNTamNTamNTamNTa2RUa2RUa2RUa2RUa2RUa2RUa2RUa2RUa2JTbmRYbmZbamNZaGRbcG1mg4B5kI+KpKOfsrGswcC7yMW+x8S7xMC3v7iuuLKmopyOhYJxZWRST1A+REk1PEUwOEQuOEUxOEUxN0QwN0QyOEMzO0M0PkQ4QkU6R0U5PDQnTTosZD82fkU+oVBPv1hZylFWyURH0kZH1kZG2UVD2kZC3UVC3UVA3UQ/3EM+3kRE3kRE3ERD3ERD3ERD20NC2URA2ERA2UVB1kY+1EU90kU80EY70EY7z0c700Y80z431UA5zkQ6xEQ5s0E2pD4wlTwsizwrhT4sgj8ugD4ufz4sgD0sgTwshDsshDssgjorgjorgjorgTkqfzorfjkqfjkqfToqfjotfjotfTsvfTsvfTsvfTsvfTsvezsvejoweDoveTkvdzkudzkudjgtdTcsczcsdTkudDoudDgtczktczktcTkscjgscjgscDYrcDYrcDYrbjUqbTQpbDMobDMoaTMnZzElazcqaDQnZjIlaDQnZTEkaDQne0I3jU1EkU5GkVBKjlNLi1dMh1hOgFpNeVxOc1xMa1tLX1hGVVRAUFNASlI9QEk2NEAsMzwrMTopMDkoLjkoMDsqMz4tN0IxOUQzPUg3PEg0PEg0OkYyOEQwNEEtMj4qMDsrMDoxMDk0MzgyNDkyNzoxODwuOT0sOEAoQ0wtT143XXNEaINMcJNTdp5XeKJWd6FXcJdYY4lMV31CVnw/WX9EW4FEW4FGW4FEXYNIXYNGXoRJXoRHXYNIXIJFXIJHW4FIVXpHSm4+QGQ2ZmBQZ2FRZ2FRZ2FRaGJSaGJSaGJSaWNTaGJSaGJSaGJSaGJSaGJSaGJSaGJSaGJSamNTamNTamNTamNTamNTamNTamNTamNTa2RUa2RUa2RUa2RUa2RUa2RUa2RUa2RUaWFUaWNXamNZa2dec3BphYR/np2Zr7CrwcG/0dHP4ODe5uXh5uPe4d7Z29bQ187HzLuxtqSWloZ3dm1cX1pHS004PkYvO0QvPUo2PEk1O0Y1O0M0Oz4zOjszOTgzODgwPD4xQT0xTDgvXzgxhklIr15dxWBkyFdZzVFT0U9P101L2UtJ3klF30ZB4UNA4UI/30NE3kRG3UNF3UNF3EJC20NC20NC2EM/2UVB1kVA1EU90kU80EY80EY8z0Y80kU710A510A30UM5yEQ4ukQ4q0EzmDwtizophj0sgz8sgD8tfz4sgD0sgT0qgzwqgzssgjorgDssfzorfzorfjkqfjkqfTksfTksfjovfTsvfTsvfTsvezsxezsxezsxezsxeToxdzsxeDkwdTkvdDguczctczctcTcscjgtcTgtcjgtcDcscDcsbjgsbzYrbzYrbzYtbzYtbjUsazUrajQqajQqaTMpaDQpZjInazcsaDQpYzEmZTMoYjAlZTMoekE4kE1Fkk1GkVBKjVRLh1dNf1lMd1pMb1xNa15OXVhFUlE/S047Qkk3OUIvMjsqMDgpMDYqMDYsMDYqLjYpLjYnLzcoMjorNDwtOUQ0OkU0PEk3PEk3OkczNUQvMj8rMD0sLTcvLTYxMTYwMjcwNTgvNzovOT0uOEApP0grS1k1W3FCZ4JLcJNTdp5YdqBWc51VZ41QXYBGVXhAV3pAW35GW35EW35GXYBGX4JKX4JIX4JKXoFHXoFJXYBGXYBIXYBKU3dHR2s9PmI2ZmBQZ2FRZ2FRZ2FRaGJSaGJSaGJSaWNTaGJSaGJSaGJSaGJSaGJSaGJSaGJSaGJSamNTamNTamNTamNTamNTamNTamNTamNTa2RUa2RUa2RUa2RUa2RUa2RUa2RUa2NWb2lda2dcbGhfc3BphIN+n6CbvLy6zc/Ozc/O3uDf8fHx+Pj2+Pf19vLv8Ovo7eLc5tDF28G0wayboJF+fXVgXlxFSk43QUkxQEoyQEk0QEc1QkQ3QUE3Qj03Qjo3Pjs2Nz0zPUA1QjcxSC8qYzc0jlJRs2dnxm5tv1tbxllWzVZS1VFN201L4EhF5EVC5UJD30NE3URG3ENF3UNF3EJC3EJC20FB2kJB2URA2ERA1UQ/00Q80UQ70EY8z0Y80kU720I82UA40kI5ykQ5v0U4rUE0mjoqiTYkiDwsgz8sgT4tfz4sgD0qgD0qgT0qgT0qgDssfzorfzorfzorfjkqfToqfTksfDgrfTsvfTsvfTsvfTsvezsxezsxezsxejwxdzsxdjwxdjowdDovdDgucjgtcTcscDcscDcscDcscDcsbTcrbTcrbTcrbDYqbDYqbTctbDYsbDYsazUrajQqaDQpaDQpZzMoZjInaTcsZTMoYzEmZTMoYS8kZTMod0E3jk1HkU5IjlJKilVNg1lNelpNcVtNaFxMV1RDSEk5P0MyPUQ0OUIxMDgpLzcoNjwwNDcwNDcwNTgxMTctMDYsLzcqMDgrMTksNkEzOEU0PEk3PUw5Okk0NkUwMkEsMD4tKjUtLDUwLzQuMTYvNDcwNzovOT0uOEArPEUqSVc0WW9BZoFMcJJVdZxZdJ1Xb5hUYIZJWHtDUnU9VnlBWn1FWXxEWXxEW35GXoFJXoFJXoFJXoFJXYBIXYBIXYBIXH5LU3RHRWg+Pl41aWNTaWNTaWNTaWNTaWNTaWNTaWNTaWNTaWNTaWNTaWNTaWNTaWNTaWNTaWNTaWNTaWJSamNTamNTamNTa2RUa2RUa2RUbGVVbGVVbGVVbGVVbGVVa2RUa2RUa2RUamRWaGRZZWVddHRskZKMrq+qw8XC2dva6e3u8fX29Pj3+/38///9///9/fz4+vbz+/Lr9+HU8tjH3sm0xbWeqZ+EiIRnYmJGRUgtREgvQkYvRkUxR0Q1RTwzQzYwRDUyRjs5Pj86PkE6Qjo3RzgzYkZDkGpnxJOP56ym0YqEx3Ruv15XxVRO1FBO3kxM50dJ6kdK3URG3klL2kRF1Ds92D5A4EZI30VF1Ts72T8/2UE+10I+1kI+00I90UI8z0I50EA33EM92kA40j83yUA2vUE1rkAznTwsjjgnij0thj8tgj0tgD0sfj0pfzwpfzwpgDwpfzorfjkqfTksfTksfDgrfDgrfDgtejgsezktezkteTkveTkveTkvejowejoxeToxdz0ydj0ydjwxczovczkucTgtcDcsbTcrbTcrbTcrbTcrbDgrbDgrbDgrbDgrbDgrZzMoazcsbzswbjovajYrZzMoZjInZTMoYzEmaDYrYzEmXS0hXy8jXi4iYjImcT80i09HjVBLh1BJgVJKelhMdV5QZVhIU009QkUyPUQyOUIxND8vMj0tMzsuMjotMzkvNjgzNTcyNTcyMjcwMTYvMDYsLjYrLjYpLTgqMD0sNkMxOUg1Okk0NUcxMUMtMD4tKDQqKTItLTIsLjMsMjUuNTgtODwtOEArNj8kRFIvV2xBZ4JPcpNadp1ccptXapNRWH5DVnlDU3ZAU3ZAVnlDWXxGWXxGWHtFXYBKYINNYINNXH9JW35IXYBKX4JMXX9NUnJJRGQ/OVczaWNTaWNTaWNTaWNTaWNTaWNTaWNTaWNTaWNTaWNTaWNTaWNTaWNTaWNTaWNTaWNTaWJSamNTamNTamNTa2RUa2RUa2RUbGVVbGVVbGVVbGVVbGVVbGVVbGVVbGVVamRWZWVdbm9phYaBo6WgwMK/1dnY6e3u9fv79vr79/v8+f38/f/8/v78//76//z5//vz//Dg+urR7N7E186xwLudpKOEgIRjZmxKTFEzRkkuQ0MrR0IvSD4yRzoySjg0Sjw5Pjo3Q0I+TklGXFJQeWplo46JzbKr58W8/9fO67KnzYN6wGNcyVhU11JT3klL2kFE1ERE00VE2EhH3EpK2kZG0z0+1T0820FB2D4+2EA/1kE91kE91UE90kE80EE50UE520I82UA40UE4ykE3vkI4sEA0njwvkDgqizwthj8tgj0tgD0sfj0rfj0pfzwpfzwrfzorfjkqfTksfTksfDgrfDgrezktejgsfDoufDouejowejowejowejowejoxeToxdjwxdDswdDswcDoucTgtbjgsbTcrazcqbDYqazcqazcqaTgqazcqaTgqaTgqaTgqajYrbDgtbjovbjovazcsZjQpZTMoZDInYjAlYzMnXi4iXS0hYjImXS8iXzEkbz81f0pChlFLhldRfVdOcVVKZFJEUEk5Pj8vOUAuNUAvM0AvMj8uMj0vMzsuNDowNjkyNjgzNjg1NTcyNDYxMTYvMTYvLzcsLzcsLTgqLzstNEEwN0YzOUg1NkgyM0UvM0EwLDguLDYuLTIsLTIrMDMqMzYrNjorNj4pNj4mRFIxVmtCaIJTc5RddpxfcJhZZo5PVnxDVXhCUnU/UnU/VXhCV3pEWHtFV3pEWn1HXYBKXoFLW35IWn1HXH9JXYBKW3tMUG5KRF9AN1IzZ2RTZ2RTZ2RTZ2RTZ2RTZ2RTZ2RTZ2RTZ2RTZ2RTZ2RTZ2RTZ2RTZ2RTZ2RTaWNTaWJSamNTamNTamNTa2RUa2RUa2RUbGVVbGVVbGVVbGVVbGVVbGVVbGVVbGVVaWVZZGVfeXt4l5mWsra1y9HR4+np8/j79///+///+///+//+/P77/v/6///6///6///0/fvk+fja7/DR4OTD0dezvcWenqmBh5JqXmhFUFc2Q0csREMuSEU0TEQ3SkA3SD84Qzs4UUxJaWFff3d0nJKQvbKs2M7F6dvQ/Onb//Tn/+TZ76uiwWZhtERDxkVJ2VNU2lZUzk1IyUNAy0RB0UZD1UVE1UND2EJD1j491j491T8+1kA/1UE900I90UI80kI62EE610A50UI6ykQ7v0Q8sEE2oTwwkjosizwthz4vgj0ugD0sfj0rfj0rfj0rfj0rfjsrfTksfTksfTksezktezktezktejgsezsxezsxezsxezsxejsyejsyeToxdzsxczoxcTsxcDowbjovbjgubDgtazcsaDYrazcsaTcsaTcsaDgsaTcsaDgsaDgsaDgsazkwazkwajgvajgvajgvaTcuZTMqYjIoYzMpYDEnWywiXzAmYzQqWS0iXDAlcEQ5fVBKf1dPfVhQb1NIXko/T0M3PzwtNDYoMTopMDsrMD0sMT0vMjwxNDwxNTsxNjkyNjgzNjgzNjgzMzgyMjcwMjcwMDgtMDgtLTgqLjosMj8uNEMwN0YzOEc0Nkc0OEY1Mj4yMDoxLzQtLDIoLTAnMDMoMzcoNDspNj4nRFEzWGxHa4RadpZkd51kbJRYX4dLVXhCVHRCUnJAUnJAVHRCVnZEVnZEVnZEV3dFW3tJXHxKWnpIWnpIXX1LW3tJWHdLTmdHP1c9MUkxZ2RTZ2RTZ2RTZ2RTZ2RTZ2RTZ2RTZ2RTZ2RTZ2RTZ2RTZ2RTZ2RTZ2RTZ2RTZ2RTaWJSamNTamNTamNTa2RUa2RUa2RUbGVVbGVVbGVVbGVVbGVVbGVVbWZWbWZWamZaaWtmgoiIo6eoub+/zdXX5e3v8vr89Pz++f//+f//+v/8+v/5/P/4/f72///1///z9/3j8/zd7vjW5fHN3enDztqytcGZoKyEfYdiZm1LTFM0REgvSEo1S0k6R0U5REA3T0dEaWFeioKAopqXt6+sy8bA3drR6eXa+fPn//zv//fs/93V+rex5ZCNx2NjrkA/wVBKyFNKx1BIwkdAx0ZA0k1I1UpH0EA/zz470j480z891EA+00I900I90kM90kE81D851EE60UQ7ykU8vkU8sEE4oD4zlDovizwvhz0wgj0ugD0tfjwsfj0rfjwsfjwsfjotfTksfTksfTksezktezktezktejgsfDwyfDwyezsxezsxejsyeToxeToxdzsxcTgvbjovbTkubDgtazcsaDYraDYrZzUqaTcsaDgsaDgsaDgsaDgsZzksaDgsaDgsazsxaTcuZzUsaDYtajgvaDguZDQqYDAmYzQqYDEnXS4kYDEnYDQpViofXjIndk5EflxTdVhQZ05HV0M6SDwwQDouOjstNzssLzcoLjkpMDstMj0vNDwxNTsxNjkwNTgvNjkyNDkyNDkyMzgxMzgxMTkuMTkuMTksLTgqLjkrLzwrMj8uNUIwN0YzOUg1Okg3OEQ2ND8xMTcrLDImLC8kLTEjMTUmMTgmNDwlRVI4XXBQcYpje5tsdptoZYxXVHtEUXNAUXE/UHA+UHA+UXE/U3NBU3NBVHRCVXVDWXlHW3tJWnpIW3tJXX1LWXlHVnNHSF9DOk05LD8sZ2RTZ2RTZ2RTZ2RTZ2RTZ2RTZ2RTZ2RTZ2RTZ2RTZ2RTZ2RTZ2RTZ2RTZ2RTZ2RTaWJSamNTamNTamNTa2RUa2RUa2RUbGVVa2RUbGVVbGVVbGVVbWZWbWZWbmdXa2dccHJvhY2PpKmst7/BzNTX4+3v8fv88/3+9///+P/++v/6+v/4+/7z+fvu+Pnr9vno9f/n8//k8P3f7fjY6PPR3ujFytKttr6Zm6N+e4JhWF5CR0w1Rks3REs5QEY4QEI3Yl1XhX54q6GfwLi1ysK/1dDM5OHa7u7m+fbt+/Tq/vDl//Pp//Ts/+Xf6aiktmljpUtAslBDv1lLx1tPw1FHvkU9wUA6ykVAykA9zEE+z0E90EI+0EI+0UM/0EM80UI80j840kI6z0Q9x0c+u0Q8rUE3nz00lDwyizswhz0ygjwwgDwvfjwufjwsfjwufjwufjotfTksfDoufDouezktezkteTkveDgufDwyfDwyejsyejsyeToxeToxeDkydjoybjguazkuajgtaTcsaTcsaDYrZzUqZjYqZzcrZjgrZjgrZjgrZjgrZDgrZjgrZjgrajowZzctZTUrZTUraDguaDguZDQqYDEnYTIoYjMpXDAlXDAlXDAlViofYTcrelZKcVhRX05GTD82QDYsPDYqOjgsOTsuOT0vMTksMjotNDwvNDwvNTsvNjkuNTgtNDcuMzkvMjovMjovMjovMTkuMTksMTksLzosLTgqLTgoLjkpLzwrMj8uNUIxOEU0Okc2O0Y2N0IyNDosLzUnLjIkLjIkMDQlLzYkMTkkRlI6YnVXdo5qe5pxcZVnXIJRSnA9TW89Tm49T28+T28+T28+T28+UHA/UXFAVHRDWHhHWnpJW3tKXX1MXX1MV3dGUW1EQVQ+M0M2JjYpZ2RTZ2RTZ2RTZ2RTZ2RTZ2RTZ2RTZ2RTZ2RTZ2RTZ2RTZ2RTZ2RTZ2RTZ2RTZ2RTaGJSamNTamNTamNTa2RUa2RUa2RUbGVVa2RUbGVVbGVVbWZWbWZWbmdXb2hYbGhdam5teoKFk5ueq7W3w83P2uXn6/f38v788/769f/6+f/5+f/2+v7w9/vs9fbm8fTh8/zn8/zn8/vk8/nf8fXa6ezN19a3xMOksK+RjY1xZGZOTVA7REs5RU49RVBCSVFGe3txnpqRxL23187J3dPR5dvZ8Ovn+vfy7+7p+/vz///2//7z//ju//Pp/+bd/9fL15KCt2RSoks4sVRDvVdJtEU6tkA2yExExEM9yEM+ykM9zUQ+zUQ+zUQ+zEM7zUI70EE70UI8zEU/xEU+tkE6qT42nTw1lTw0izsyhz0ygjwwgDwvfjwufjwufjwufjwufjotfTksfDoufDouezktezkteTkveDguezsxezsxeToxeToxeDkwdzgvdzgxdDkxbDgtajgtajgtaTcsaTcsZzcrZzcrZzcrZjgrZjgrZjgrZjgrZDgrZDgrZDgrZDgraDguZjYsZTUrZjYsZzctZzctZjctZDUrYTIoZDUrXjInWy8kYDQpYDQpZz0xdFRJVUc+Qz82OTUsODYqOTkvNzksNDgqMzcpNDouNDouNDouNDouNTgtNDcsNDYrMzYrMjgsMTksMTksMDgrMDgrMDgrLjkrLjkrLjkpLTgoLTgoLjkpLzwrMj8uNEEwNkMyOkU0OEMyOD8vNDsrMzcpMTUnMDQlLTQkMDclSFQ+ZHdbdIxsc5FrZYheUndLQmg5SWo7TGw7TW08TW08TGw7TGw7TW08Tm49VHRDWHhHWnpJW3tKXX1MXHxLU3NCTGY/Oks4LjsxIy4mZmVTZmVTZmVTZmVTZmVTZmVTZmVTZmVTZmVTZmVTZmVTZmVTZmVTZmVTZmVTZ2RTaGJSamNTamNTamNTa2RUa2RUa2RUbGVVa2RUa2RUbGVVbWZWbmdXb2hYb2hYbWleZmppbHV6hI2SoaywvcjM0t3f5PDw7/v58v358/72+P/3+f/0+//w+f3s+Pnn9vfl9fbo9vfp+fbn+/bj/PTh9uvV5tfA1MasvbGZm5N8dG1aWFdFTlBCUVdLWWNaY21ilZiNsbGl08/G597Z8ePi+Ojo//Hx//b1//36/Pv39/rz9vnu+vzv///z///x//vq/+XQ7qqTum9ap1ZDrFNBtVFCuExAv0pBwkc/xUY/yEU9yUY+yUQ9yUQ9yEM8yEI50EM8z0Q9ykU+v0M7sz43pToymzozlD00izsyhz00gjwygDwxfjwwfjwwfjwwfjwwfTsvfDoufDoufDouezktezkteTkveDguejoxejoxeDkweDkwdzgxdjcwczcvcjcvbDgtajgtaTktaDgsaDgsaDgsaDgsZjgrZjgrZjgrZDgrZDgrZDgrZDgrZDgrZDgrZjYsZzYvaDcwaDcwZzgwZzgwaToyazw0ZDgvaT00YjYtYDQrbkM6dktCc0g/a01DQjkwNDcuMjUsNzovODsyNDcsMTQpMjUqNTgtNDcsMzcpMzcpMzUoMzUoNDYpMzcpLzcoLTgoLTgoLTgoLTgoLTgoLTgoLTgoLjkpLjkpLTgoLTgoLjkpLzoqMDsrMTwrN0MvN0MvOkEvOUAuOT0uNTkqMTUmLDMjMTgmSVU/Y3VbbYRnZYNfV3pSSG1EPmM3R2c4TGk5Tms7Tms7TGk5S2g4TWo6T2w8VXJCWHVFW3hIXHlJXntLXHlJUW4+RmA5NUMyKTQsICkkZmVTZmVTZmVTZmVTZmVTZmVTZmVTZmVTZmVTZmVTZmVTZmVTZmVTZmVTZmVTZ2RTaGJSaWNTaWNVamJVa2NWa2NWa2RUbGVVa2RUa2RSa2VVbGZWbWdZbmhcbWleamlkanBwbHZ4gYqPpK6wwszO1N7g4+3u8fv68/z39v329/72+f/z/P/y+//w/P/u/P3t+vjs/fnu//nt//rq//jo//Lf7t/I3c63vrKan5eAenVhYF9LVlpLXGRXa3drfIZ7pqygvb+02dbN7OXf+O3r//Ly//Pz/PLz/ff3+fr1+P33+v/59f/08/vu9f3u///x//no//Tj/Mu6un9vmlJDp1RGtFRIsEQ4vkk/w0c9x0c+yUY8yEU9x0Q8xkM7xUI4zEY7zEg8xkg8uUM5qj4ynzowlTsykD4ziTwyhD40gT00gDwxfzswfzswgDowfzswfTsvfDoufDoufDouezktezkteTkveDguejoxeTkweDkwdzgvdjcudTYtcjYucTYubDgtaTktaTktaTktaTktaDgsZzksZzksZTcqZTcqZTcqZTcqZTcqZTcqZTcqZTYsZjUuajgxbDozazozaTkvaTowbD0zbkI3a0E1bUU5Yz0yYj4yeFZKhWNXd1dMYkxBPDkwMjovMjovNT0yNDowLjQqMDYqNjwwMjUqMjUqMDQmMDQmMDQmMTUnMzcpMjgqLjYpLDcpLDcpLDcpLDcpLTgqLTgqLTgqLjkrLjkrLTgqLTgqLDcpLTgqLTgqLTgoND8uNkEwO0QzPEU0O0IyNj0tMDcnLDMjMjsoSlZCYnFaZ3tgXXZWT21JRWVAQGA5RWQ4S2g6TWo8TWo8S2g6Smc5S2g6Tms9VHFDV3RGWXZIW3hKXXpOWndLTWo+Qlo4MT8yJzAtHyglaGVWaGVWaGVWaGVWaGVWaGVWaGVWaGVWaGVWaGVWaGVWaGVWaGVWaGVWaGVWaGVWZ2RTaGVWaGRYamRYa2Raa2VZbGRXbWZWZWBNamVRbmtYbWtcaGZaZWRfcXFvgIGDiJCSlZ+gqrS2wcnL19zf6O7u8/f4+Pr5/P77/f/6/f/5/P/2+v3y+Pvw+f3v+v7w+Prv+Prv+Pjs+/nq/vzn+Pbd6OTH1NO1u7qcmJl6cHRZXWVNYmtWcX5sg5GCkJyQtLmyy8zG4+Ld7+7p9/Pw+/f0/Pj1+/f0//76/v/6/f/6/f/6/f/5/f/5/f/5/f/5+fv2///6//z2/+rk16igoGBWmUU7s05Ev01CwkY8xEQ5ykg7zktBzktByUk+xkg6xUg2wkk2uko2sUg1pUY0mkMykEMzi0M1hEI0gUIzgEA0gD4ygTsxgzkuhTgugzkwfjovfToxfDkwezgveDgudzctdjYsdjYsdTcsdjgtdjgtdzkudDgtcjYrcDQqbTQpajgtZzguZzguZzguZjctZjctZzctZjYsZjYsZjYsaDguaDguaDguZzctZTUrZTMqZzIsajUvbDcvazkwaTktaTsuaT0waEEyZUExaUo4ZEk4dV5OfGtZiHhoi35uUUs9NzksMzsuMjotMjotMTksMTksMTksMTksMTcrMDYqMDYqMDYqLzUpLzUpLzUpLTUoLjYrLjYrLjYrLjYrLjYrLjYrLjYrLjYrLjYrLjYrLTUqLTUqLTUqLTUqLjYrLDYrMDovMj4yNkA1OEM1OEM1N0IyND8vMz4tMz8rRFE9V2VOW2tRUGNHRFc5QFU2QFg2SWM+SWU9SmY9SWU8SGU5SWY6S2g8TWo+U3BEV3RIWnZNXHhQXHhSVnJMRmE+OVA2JDEoJCwuISkraGVWaGVWaGVWaGVWaGVWaGVWaGVWaGVWaGVWaGVWaGVWaGVWaGVWaGVWaGVWaGVWZmVTZ2VWaGRYaGRZa2Rca2RabGRZbGZWaWRQamhRbGtXamtbZmhdamxpe3+CjpOZqLCzuMLDztbY3+fp7/P0+Pz9///////9/fz4/v35/v/5/f72+v30+Pvy9vzw9vzw9vnu9vnu9/nr9/rn+Prk8fTZ3+LDzNCvtLiXkZZ2aXJVWGJHX2tVdIFti5mIm6ebvMG60tPO5+jj8vPu9/jz+vv2+/z3+vv2/v/6/v/6/v/6/v/6/v/6/v/6/v/6+v/+9P//8///+//+//z6/+7o78C4wX51nkxArkw/uUs+wkxAxUs+wUU5uz8zvkA0wUY3wkc1wUo0u0w4sUo3o0Y0mEIxkEQ0i0Y3g0Q1gUM2gEA2gD00gDwxgzoxgzkwgjkwfToxezsxejoweTkvdzkudjgtdjgtdTcsczcsczcsdDgtdDgtcjgscTcrbzUpbTQpajgtaDguaDguZzguZzctZzctZzctZzctYzMpZDQqZTUrZzctaDguaTkvajgvajgvaTcwaTcwazkwajouajwvaT4uaEEwZ0QxZkczalE7ZlE+dWZRfnZjioVxhINxSUw7MzkrMjotMjotMTksMTksMDgrMDgrMDgrMDgrLzcqLzcqLzcqLjYpLjYpLjYpLTUoLTQsLTQsLTQsLTQsLTQsLTQsLTQsLTQsLjUtLjUtLTQsLDMrLDMrLTQsLjUtLDYtLTcuLjowMT0zNEA2NUE1NkI0NUIxNEEwNUIwQk87UF5HUV9ISFY9QU81QlA2RVU4SWE/SWU/S2VASWU9SGI7RmI5SGM6SGQ7Um1EVnJKW3VOW3dRW3RUUm1OQls9NEo1JDEqJCwvIiotaGVWaGVWaGVWaGVWaGVWaGVWaGVWaGVWaGVWaGVWaGVWaGVWaGVWaGVWaGVWaGVWZmVTZ2VWaGRYaGRZa2Rca2Raa2VZbGZWbWhUa2lSa2pWaWpaamxhdXd0jpKVp6yyvsbJ0tze6vL09f3//P///P///////v78/fz4//76///6/f72+Pvy9fjt8ffr8ffr8/br9Pjq9fjn9Pfi9Pbe7O/U29y9xsmqrrGSkpd5dXlga3BZdHtpiJGAnaiarLarzM/I3t/a7/Dr9/jz+/z3/f75/v/6/P34/v/6/v/6/v/6/v/6/v/6/v/6/v/6/f/8+f//+f///f/+//z5//r0//ft/dHE15+Qkk09o1JBqEs6pT8wt0c5zlpLz1VIvEEyw0Q1xUc4w0s9uEg6qUM1nT8zlUE2kUQ6h0E5hEE4gEA3fj82fj41fT00fT00fT00ejsydzsxdjwxdTswdTswdDovcjkucjkucTgtcTgtbzktbzktbjgsbTcrbDYqazUpbDgtajgvajgvaDguaTcuaDYtaDYtaDYtZTUrZTUrZTUrZjYsZzctaDkvajowajsxazw0aToyaTowaDwvaT8xaUIxaUQyZUYyZUo1alY+aVhEdWpUhX5rkY96fn9tQ0Y1MjgqMTksMTksMDgrMDgrLzcqLzcqLzcqMDgrLzcqLzcqLzcqLjYpLjYpLjYpLTUoLTQsLTQsLTQsLTQsLTQsLTQsLTQsLTQsLjUtLTQsLDMrLDMrLDMrLDMrLTQsLDYtKjQrKjYsLDguLzsxMj4yNEAyNkMyN0QzN0QyP0w4RVM8QlA5O0kwOEYtPUsyQ1M4SV4/SGI9S2M/SmQ9SGE6RV84Rl84RV84UWpDVnBJXHRQXHZTWnJSTmdJPVQ4LkEtJTAqJCwuIiosaGVWaGVWaGVWaGVWaGVWaGVWaGVWaGVWaGVWaGVWaGVWaGVWaGVWaGVWaGVWaGVWZmVTZ2VWaGRYaGRZa2Rca2Raa2VZbGZWa2lUa2tTbGtXa25dbnFmfoN/nqKlub7ExMzP2+Xn8/v9+f//+v7/+v79/Pz8+vr4/v35//75/v/3+vzx9Pfs7vHm6O7i5+3f7fHi7/Pi8fTh8PPe8PLa6OvQ2Ni8x8ersbGVnqGGkJJ8kJOAm5+Qqa2ftryyv8S9293Y6erl9vfy+/z3/P34/v/6/v/6/P34/v/6/v/6/v/6/v/6/v/6/v/6/v/6/v78+vr6//////7/9fHu+/Ts//3x//vt//Tk68KwtoJtk1A9oE88tVhHtU4/tEQ2wEg6wEAzx0U4xUk/vEY8rj82oTw0mD42lUI8ij86hUA7gUA6fEA4ej85eD82eD84eD82dj00dTwxcz0zcz0xcjwycjwwcDwxcDwvbzswbzsubDovbDstazkuajkraTcsaTcsbDcvbDcvbDcvbDcvazYuaTcuaDYtaDYtazsxajowaDguZjctZTYsZDgtZTkuZjovaj82Zj40Yz0wZUAwaEMzaUYzZUYyYUYxYUs0aFY+aV1HcmpThYNujY95b3JfOT0sMTcpMDgrMDgrMDgrLzcqLzcqLzcqLjYpMDgrLzcqLzcqLzcqLjYpLjYpLjYpLTUoLTQsLTQsLTQsLTQsLTQsLTQsLTQsLTQsLTQsLDMrLDMrKzIqKzIqLDMrLDMrKzUsKjQrKTUrKTUrKzctLTktMDwwMz8xNUIxNUIxOUY0O0g0N0UuMkApMT8mN0UsPU0zRFk6RV07Sl8+SWE9SmA8Rl46SF46Rl46UmhEV29LYHVUXnZWWm5SS2JGOU00KDknJC8pIystISkraGVWaGVWaGVWaGVWaGVWaGVWaGVWaGVWaGVWaGVWaGVWaGVWaGVWaGVWaGVWaGVWZ2RTaGVWaGRYaGRZa2Rca2Raa2VZbGZWamhTampSbWxYbnFgc3Zrg4iEoqeqvMPJzdfZ5e/x+f//+f//+f3++v79/////f37///7///6/P319/nu7vHm5urc4ObY3uXV5urZ6e7a7O/a7PDZ7O7W6OjO2ti/y8mwv72mtrSfsa6btbOkvr6yyMjA0dLN2drV6Onk8fLt+vv2/P34/P34/v/6/v/6/P34/v/6/v/6/v/6/v/6/v/6/v/6/v/6//76//39//v+/vr5+vv2/P/4/P/2/v/z///t//7q9d/IxJuHm2JOk0o3pE06tFBAu0s9vkA0xUI6xUY/vkM8sT45pTk2nTk3mD06kT07ij88gz88fD86d0A7dEI5cUI6cUI4cD41cj4zcj01cj4zcD41bz0ybz00bz0ybT0zbT0xazwyajwvaTowaDotaDkvaTkvbjcwcDcwbzYvbTYvbTYvazYuaTcuaTcuazsxaTowaDkvZDgtYzktZDouZTsvZDwwY0E1YkI1YkIzYkUzY0Y0Y0gzYUgyXUkxXU00YlY8aWFKcm5VgoRug4hxWWFMMjknMDgpMDgrMDgrMDgrLzcqLzcqLzcqLjYpMDgrLzcqLzcqLzcqLjYpLjYpLjYpLTUoLDMrLDMrLDMrLDMrLDMrLDMrLDMrLDMrLDMrKzIqKzIqKjEpKjEpKzIqKzIqKjQrKzUsKjYsKTUrKTUrKjYqLDgsLzstMT4tMD0sM0AuNUIwM0AsMD0pLz0mM0EqNkYsPU81P1M3RVg8SF0+SVw+SV49Sl09Sl8+U2ZGWm9QYnVZYHRZWWtTSVxGNUcxJDUlIi0nISopICkoaGVWaGVWaGVWaGVWaGVWaGVWaGVWaGVWaGVWaGVWaGVWaGVWaGVWaGVWaGVWaGVWZ2RTaGVWaGRYaGRZa2Rca2Raa2VZbGZWaWdSampSbG5ZbnFgcHZqgIaCnKSmt77E1d/h7ff5+f//+f//+Pz9/P///////f75///6///3+vzx8/Xo6e3f4ubX3OPT2+LQ4+jS5uvU6e3W6evT6+vT6ObN3NrD0s230s25zMa2ycO1zcm+1tHL3tvW6eXk7+7s8vPu+Pn0/f75/P34/P34/v/6/v/6+/z3/v/6/v/6/v/6/v/6/v/6/v/6/v/6//36//v6//f4//38/v/9+P/78v/37v/y9P/17/bk///s/+3Yy6eRomtXoVpGqlhDrUw7uEQ3v0M5wEU9u0Q8s0A7qj06ojo3mjs5lDw7jD48hT89fUA7d0I6ckM5b0Q7b0U5bz81cD41cD41cD41bz81bz81bz81bz81bj81bT40aj4zaT0yaDwxaDwxaDwxazsxbjcwcTYwcDcwbzYvbTYvbDcvaTcuaDguZjctZDgtZDouYjouZDwwZD4xZT8yY0IzXkI0Xkc3Yks5ZE45YUw3YEw0XUszXEwzXVE3YFk9bGhPc3NZgIRtdHxkRU45Mj4qMTkqMTksMTksMDgrMDgrLzcqLzcqLzcqMDgrLzcqLzcqLzcqLjYpLjYpLjYpLTUoLDMrLDMrLDMrLDMrLDMrLDMrLDMrLDMrKzIqKzIqKjEpKjEpKjEpKjEpKzIqKzIqLDYtKjYsKTUrKDQqKTUpKjYqKzcrLTkrLDgqLzwrMj8uM0AuM0AuMj8rMj8rM0EqNkUuOEowPlA2QlU5RVg8R1o8Sl0/TF9BUmVHW25SYnRaX3FZVmhSRldEMkMwIzEiIy4oIisqICkoaGVWaGVWaGVWaGVWaGVWaGVWaGVWaGVWaGVWaGVWaGVWaGVWaGVWaGVWaGVWaGVWZ2RTaGVWamRYamNZa2Rca2Raa2VZbGZWbGpVa2tTam1Yam5da3FleX97lJyerba70dvd6fP1+f//9///9vr7/P//////+Pn0///6/v72+Prv8PLl6Oze4+fY3+bW3+fS5OrQ5uzQ6OzR5+nR6OjQ5uTN4NvH19C+2dLC2NDD3NPK5dzX7ePh8unq+fDx/Pj3+vn1/f75///7/f75/P34///7///7/P34/v/6/v/6/v/6/v/6/v/6/v/6/v/6//36//j3//n4//79/P/99f/96/748P/98f/79f/48fjo//zq//vo9M65qndijlA5qVtFsU09uEo7t0k8tUk9tEdArEM9pD45mTo0lTw4jj05iD85f0A5eEI4ckQ3b0U5b0U5bz81cD43cD43cD43bz43bz43cD84cD84cEE5b0A4az82aj41aT00aT00aj41bTw1bjcwcTYwcDcwcDcwbTYvbDcvaTkvZzguYzktYTktYjwvYj4wZEAyYkEyYUEyXkMyV0QzXU47ZVZBZldAYlM8W081W081XFI3XFc6Wlk7bW1TcnZbeYFpY21UMT8oNUIuMDsrMjotMjotMTksMTksMDgrMDgrMDgrMDgrLzcqLzcqLzcqLjYpLjYpLjYpLTUoLDMrLDMrLDMrLDMrLDMrLDMrLDMrLDMrKzIqKjEpKTAoKTAoKTAoKTAoKjEpKzIqKzUtKjQsKjQrKjQrKjQrKzUqLDYrLDcpLDcpLjkpMj0tNUAwN0IyNkEwNUAvM0AsMD8qNEMsOUgxPU0zQFA2RFQ5SFg9S1tAUmJHW2tRYXBZXm1YU2JPRFJBMT8uIS8iJTAqJC0qIisoaGVWaGVWaGVWaGVWaGVWaGVWaGVWaGVWaGVWaGVWaGVWaGVWaGVWaGVWaGVWaGVWZ2RTaGVWamRYamNZa2Rca2Raa2VZamdWbWxXa21VaWxXZWxaZW1gcXp1jZeYp7C1ytTW4uzu9f3/9Pz+9/v8/P/////9+Pn0//75/f3z9/ns7/Hj6Ozd5enY4+rY5e3W5uzQ6O/Q6O3P5unO5ubO5ePO4drI2NHB183B3NLJ6d7a+O3r//P1//X2//T4/vj4/v37///7///7/v/6/f75///7///7/f75/v/6/v/6/v/6/v/6/v/6/v/6/v/6//76//76//76/Pv3+Pz7+P//9P//8P//6/767/73+//4///z//Xl//Le/+PM162VqHBXplhCrFE+q048rE8+r09BrExAoUM5mTw0lD00jj41iD82gEA2ekE2c0M1cEU1b0U3bz81cD43cD43cD43cT84cD84cD84cD84ckE6cEE5bj83az82bD01aj41az82bj02bzgxcDcwbjcwbTgwajgvaTkvaDkvZTsvZDwwYz8xYkEyYUEyX0IyXUIxW0AvVkEuU0YzWlQ+Zl5HZ2BGYFk/WVI2WFM2W1c6WFc5V1g5aW1ScXdbdX1lVWJIJTMcNkMvMTwsMzsuMjotMjotMTksMTksMTksMTksMDgrLzcqLzcqLzcqLjYpLjYpLjYpLTUoKzIqKzIqKzIqKzIqKzIqKzIqKzIqKzIqKjEpKjEpKTAoKTAoKTAoKTAoKjEpKjEpKDIqKTMrKTMqKjQrKzUsLDYtLDYrLDYrLDYrLjkrMj0vNkExOEM1OUQ0N0IyNUAvLjspMD8qNEMuN0YvO0ozP081RFQ6SFg+UWFHWWhRX25ZW2pXUF5NQU9ALjwtIS0jKDEsJi8sIywpaGVWaGVWaGVWaGVWZ2RVZ2RVZ2RVZ2RVaWZXaWZXaWZXaWZXaWZXaWZXaWZXaWZXamRUa2VXa2VZa2RabGVdbGVbamZaa2hXcG9aam5VaW5YanFfaHNlbnlzhZGRnqmtu8TJz9nb5+/y8/v9+v7/+//+/v78/f75///6/f3z+Prt9ffp8vbl7/Tg6vLd5+/X7/bX6/LR6u/R6ezR5ubO3tvI3NXF3NTJ39XM59nW8ePi+Ozs/vL0//b6//n9//z9//78/v/6/v/6/v/6/v/6/v/6/v/6/v/6/v/6/v/6/v/6/v/6/v/6/v/6/v/6/v/6//75/v/5/v/6/f/++///+v//+P//+v///P///v/6//zz//vv//3s//vk//Pb/+nOuYFmpWJIlU82n1Q9qFpGo1JBnks7oE0/jz0xiz8xhj4wfj8udz4tc0Atc0QydEY2cD41cj03cz44cz44dUA6c0E6ckA5cT84ckA5cUA5cUA5b0A4cD84bj83bj83bj02ajgvbTgwazkwazsxajsxZz0xZDwwYj4wYD8wXj4vYkc2YUc2VD0rTjkmTDckQDEcV1E7T083S0kwTUwwW1o+Z2ZIYmFDVVQ2V1g5XWBBb3NYd4BjY21UPUowLDojMT4qMTwsMzsuMzsuMzsuMjotMjotMjotMTksMjotMTksMTksMDgrMDgrLzcqLzcqLzcqLzYuLzYuLzYuLjUtLjUtLjUtLTQsLTQsKzIqKzIqKzIqKzIqKjEpKjEpKjEpKjEpKzUtKzUtKjQsKjQsKjQrKzUsKzUsLDYtKDIpKjQpLjgtMj0vN0E2OkU3PUg6Pkk7NUIwNEEvMT4sLzwoMT8oN0UuQU84SFY/TlxFVWNMW2hUWGVTS1hHOkY4LjouKDQqJi8qJS4pJS4paGVWaGVWaGVWaGVWZ2RVZ2RVZ2RVZ2RVaWZXaWZXaWZXaWZXaWZXaWZXaWZXaWZXamRUa2VXa2VZa2RabGVdbGVbamZaamlXbm1YaW1Uam9ZanNgaXRmb3x1hpSUoK6xvcjM0tvg6fH09Pz++v7/+//+/v78/P33///4/f3z+fvu9vno8/jk8PXf6fHa5u/U6fDP5erK5OfK5ubM4+HM3tjI3NTJ3tXM5drW7d/e9efn++/x//T2//f7//n9//39//76/v/6/v/6/v/6/v/6/v/6/v/6/v/6/v/6/v/6/v/6/v/6/v/6/v/6/v/6/f/6+//5+//5/f/8/f/+/v7///3///3///z///3///39//v4//3z///x///s//ri//LY/+zQ37KVp3VakVtBllpCm1pEmlZBmlNBjkc1i0c0h0Y0gkUyfUQxd0MucUEtcD8uckA1cT84dD85c0E6dD85bz02cD43ckE6cD84cD84bz43bj83bT42bT42bT42bD01azwyazwyaj4zakA0aEA0ZUEzY0IzYUEyY0g3W0EwXEc0XEo2Tj0pRTYhRjciPjYfS0szR0syQ0csQkUoSk0wWls8YWJDX2BBV1o7Y2ZHc3dccnhcV2FIN0QqLzslN0MvNT0uNT0wNT0wNDwvNDwvNDwvMzsuMzsuNDwvNDwvMzsuMzsuMjotMjotMjotMTksMTgwMDcvMDcvMDcvLzYuLzYuLzYuLzYuLDMrLDMrLDMrKzIqKzIqKjEpKjEpKTAoKDIqJzEpJzEpJzEpJzEoKDIpKTMqKTMqKzUsKzUsLDYtLjgtMjwzN0E2PEY9P0k+OUY1OEUzNUIwMj8rMT4qNEIrOkgxP002SlhBUV9IV2RSVWJQSlZIO0c5MDwyKjYsKDIqKDEsJzArZ2RVZ2RVZ2RVZ2RVaGVWaGVWaGVWaGVWaWZXaWZXaWZXaWZXaWZXaWZXaWZXaWZXamRUa2VXa2VZa2RabGVdbGVbamZaamlXbWxXaGxTaHBZaXVhaXVncX53iZeXpbO2v8rO1N3i6vL19f3/+v7/+//+/v78/P33///3/Pzw+fvt9vno8vfj7vPd5+/Y4+zR4OfG3OHB297B3t7G3tvI3dfJ39bN49rV7uLi8+fp+u7w/vT1//f4//j5//r7//z8//76/v/6/v/6/v/6/v/6/v/6/v/6/v/6/v/6/v/6/v/6/v/6/v/6/v/6/v/6/f/6+P/6+P/8+//8/f/+//z///v///n///n///r///v9//r4//74///0///x/P/s/Prj//Pb//jg/+3T4sCnq4Nqh1lBhVM8kltGll1JjFM/f0YydT4pcj4pc0ArdEQudkU0cD4zbDwybz00c0M5c0E4bj40cUE3d0g+bT40bT40bD0zaj4zaj4zaT0yaT0yaD4yZz8zZkAzZkI0ZEM0Y0M0YUQ0X0QzW0QyYUw5VEIuWUo1X1M9UkcxQzskRDwlRUEoQUUsQEkuP0UpOkEiPUIkTE8wXF9AZmlKXmFCbXBRdXleZmxQSFA4Mz0kND0oPUYzNz8wNz8yNz8yNj4xNj4xNT0wNT0wNT0wNj4xNj4xNj4xNj4xNT0wNT0wNT0wNT0wMzoyMzoyMzoyMjkxMjkxMTgwMTgwMTgwLzYuLjUtLjUtLDMrKzIqKjEpKjEpKTAoKC8oJy4nJy4nJy4nKC8oKTApKjEqKjEqLzYvLTQtKzIrKzIqLjUuNDszPEM8Pkg/Pko8PUs6Okk2NkUwMkEsMD8oMkEqM0IrQ1I7SVhBUF9MT15LR1VGOkg5MT40LDguKzUtKjQsKTMrZ2RVZ2RVZ2RVZ2RVaGVWaGVWaGVWaGVWaWZXaWZXaWZXaWZXaWZXaWZXaWZXaWZXamRUa2VXa2VZa2RabGVdbGVbamZaamlXa21XaW1UaHBZaHRgZ3NlbXx1h5eWpLO2vsnN09zh6fH08/v9+f3/+v79/v78/f74/v72/Pzw+fvt9/rn8vfh7fLb5e3V4ujM2+DA1tm61ta819bB3NbG3tfN5NvW6+Hf9+3u+/D0//X5//n8//r6//r6//z5//76//76/v/6/v/6/v/6/v/6/v/6/v/6/v/6/v/6/v/6/v/6/v/6/v/6/v/6/v/6/f/6+P/8+P/++v/+/f/+//3+//v+//r+//n+//n8//n5//r5//35///4/v/2+v/z+v7v///t//zp//Hd//Db//Da8dK9s5B6eFI7ckkzckgwdUgxeUw1fE86eEs2bkEsZDckeE09cEQ3bkI3cUU4bkI3ZjotYzktZz0vaD4yZj8wZj4yZj8wZj4yZUAwZT8yZEAyYUEyX0IyX0QzXkQzXkQzWkUyV0UxVUQwV0gzTkIsXFQ9bmhQYl5FTEoxSUcuSUwxO0QpPUcsPkcqOUIjO0AiREkpVVg5YWRFam1OdXhZdHdcWl5DP0QtNDwkOEArPEMxOEAxNz8yNz8yNz8yNj4xNj4xNj4xNj4xNz8yNz8yNz8yNz8yNz8yNz8yNz8yNz8yNj01Nj01NTw0NTw0NDszNDszNDszNDszMjkxMTgwMDcvLzYuLTQsLDMrKzIqKjEpKjEqKTApKTApKTApKTApKjEqKzIrLDMsLjUuLDMsKjEqKTApLDMsMTgxNz43OUM6P0s9P047P047PEs2N0YvMkEqMD8oLz4nO0ozQVA5R1ZBSFdEQlA/OUc4MT8yLDkvKzYuKzUtKjQsZmNUZmNUZ2RVZ2RVaGVWaGVWaWZXaWZXaWZXaWZXaWZXaWZXaWZXaWZXaWZXaWZXamRUa2VXa2VZa2RabGVdbGVbamZaamlXa21XaG5UaHJaZnNfY3FiaXhxgpWTorG0vcjM0drf6PDz8vr8+Pz/+v79///9/v/5///2///y/P/u+v3q9vvl7/Td5e7T4ujM2N290tW20dG309K92tTG39jQ6eHe8unq/fT3//f8//v///7///78/v35/f74/v/5/v/6/v/6/v/6/v/6/v/6/v/6/v/6/v/6/v/6/v/6/v/6/v/6/v/6/v/6/v/6/f/8+v/++v//+//+/f/+//78//36//z6//z5//n3//r3//v3//34//76/v/7+//6/P/49/Tt//72//30//3x//vr//fn+efT6dO+zbSetZmDk3RfdlZBaUg1a0g1cE06c1A9a0Y0Z0IwZkExakUzbEg4bks4bko6bUw5YkEwYkEuYkEwYUIuYUIwYkMvYkMxYEMxXEUzW0YzWkg0WUg0WEczVEgyUkcxUEgxTkgwTUkwZWNKfn5kcHNYVFg9SU0yRkwwO0UqPEYrPkcqPkcoQEUnQkcnSk0uU1Q1dndYeXpbbm5UUlU6QEIsPkIrPkEuOT0sOD4wNz8yNz8yNz8yNj4xNj4xNj4xNT0wNj4xNj4xNj4xNz8yNz8yNz8yNz8yNz8yOD83OD83Nz42Nz42Nj01Nj01Nj01Nj01NDszNDszMzoyMjkxMDcvLzYuLjUtLTQsKzIrKzIrKjEqKjEqKjEqKjEqKzEtLDIuKzEtKzEtKjAsKzEtLTMvLzUxMTczMTsyOkg5O0w5Pk88PU85Okw0NUcvMUMpMEIoM0UtOEoyPU85P1A9PE07NUY2Lj4xLDotKjYsKzUsKjQrZmNUZmNUZmNUZ2RVaGVWaWZXaWZXaWZXaWZXaWZXaWZXaWZXaWZXaWZXaWZXaWZXamRUa2VXa2VZa2RabGVdbGVbamZaamlXa21XaG5UaHJaZXJeYW9gZndvgpWToLK0wMvP09zh6fH08vr8+Pz/+//+///9///6///2///z///x/v/s+f7n8vje5u/S4ujM1dq8z9K1zMy0zsu41c/D3tfR6+Ph9u3w//f8//r+//3///7////9/P/4/f/3/f/3/v/5/v/6/v/6/v/6/v/6/v/6/v/6/v/6/v/6/v/6/v/6/v/6/v/6/v/6/v/6/v78/f7/+////f7//f/+/f/6/v/5/v/3/v/1/P7z/P31/f31/P33/f37/v7+/v7//v7/+/n+//v//vr7+vXy/fjy//70//7x//7t//ro//Ld9OPP5tG+0bqouJ6NnYNyjXJheFxHel5JcVVAYUUwVzsmVzwnWj8qWD0oX0QvXkUvX0YwX0YwX0YwXkgxXkgxXUkxXEw1WU03WU03WE03VU02U001UU00TkwzTUsyT1I3aWxRfIBlbHJWUVo9RE0wPUgqOUYqOUYqP0grQkssREkrQ0YnR0gpTE0ueHdZc3JUZWNKU1M5S0o1SEo0REUzOj0sOT8xOEAzOEAzNz8yNz8yNj4xNj4xNj4xNj4xNj4xNj4xNj4xNz8yNz8yNz8yNz8yOUA4OUA4OUA4OD83OD83Nz42Nz42Nz42Nz42Nj01Nj01NTw0NDszMzoyMjkxMTgwLTQtLTQtKzIrKjEqKTApKTApKS8rKS8rKS8rKjAsLDIuLTMvLjQwLjQwLTMvKzUtMkAvNUcxO003PU83PU83OUsxN0kvNUctMkQsNUcvOUs1O003Oks5NEUzLj8vLDotKjYsKjQrKTMqZWJTZmNUZmNUZ2RVaGVWaWZXaWZXamdYaWZXaWZXaWZXaWZXaWZXaWZXaWZXaWZXamRUa2VXa2VZa2RabGVdbGVbamZaamlXamxWaG5UaHJaZnNfYHFhaHlxhJeVpbe5xtHX2uPo7fX49f3/+f3/+//+///7/v/3///1///y/f/v/P/q9/zl7vTa4uvO3ePH09a5zMyyx8Wwx8Szz8i+2tLP6eDh9u3y/vf+//n///3///7//f/6+v/4+v/1/P/2/f/5/v/6/v/6/v/6/v/6/v/6/v/6/v/6/v/6/v/6/v/6/v/6/v/6/v/6/v/6/v78//3//v3//f7/+//++v/6+P/39//z9//z9v/y+P/z+v/3+//5/f37//3///z///v/+/X//fn///3///3///3//P34+vry9/jq///x///v///t//7t//zs//Xm/+3f/OnY+OPO/ObO4MqypI52dF5GZFA3YU00XEgvXUkwW0owXEsxXEsxXUwyXEwyXEwyXE40WU82VlA4VlA4VlA4VFA3UE41Tk40S04zTE80TlQ4YGZKZW5RU15ARE8xQEstOUYoPUouPEktQksuRk8wR0wuRkkqTk8wWVg6cW1QamZJYFxDWFY9VlQ/U1I9S0o4QkMzO0EzOkI1OkI1OUE0OUE0OEAzOEAzOEAzNj4xNj4xNz8yNz8yOEAzOEAzOEAzOUE0OUA4OUA4OUA4OUA4OD83OD83OD83Nz42OD83OD83OD83Nz42Nz42Nj01Nj01Nj01MzgyMjcxMDUvLjMtLDEtKzAsKzAsKzAsKzAsLDEtLTEwLTEwLjIxLTEwLDAvKTMrKjgnLUAqNUgyOk41O082Ok4zOU0yOEwwNEgtNUkwOEs1Ok03OUw5NUg1LkAwKzwsKjYqKzUqKjQpYmNRYmNRY2RSZGVTZWZUaGdVaWdYaWdYaGZXaWZXaWZXaWZXaWZXaWZXaWZXa2VXamRUa2VXa2VZa2RabGVdamZbamZaamlXaGpUZ2xVaHJaZ3RgYXFkaHxziJqaqbu/zdje3+jt8vr9+P//+v//+//8/f/5/f/0+fnt+frs+fro9/rl8vbf6u7V3uTK19vA0tK4zMexxL+sxL6wysO71c3K5t3g8+rv/vf///r///3//////f/8+v/5+v/3+//4/f/6/v/6/v78/v/6/v/6/v/6/v/6/v/6/v/6/v/6/v/6/v/6//76/v/6//76//78//z///3//v7//f/++v/6+P/39//19v/1+P/2+f/2+//4/v/6//76//z+//v///r///z///z//vz//v3//P3/+fv6+f74/P/69/rx+fvw+vru/fnt//nr//rr//3t//7q/PDY//vh6tzCnY90XlA1UEInV0kuV0kuWkwxW00yWU4yWk8zWk8zWlE0WlE0WFE1U080U082U082UU82T081S04zSk0ySEwxSU8zSVI1Uls+T1o8PkkpO0YmQEsrP0oqQ04wRE0wSFEyS1IzSU4wSk0uWVo7amlLZWRIX15CXVlAXVtCXVtEWFY/UE45S0o2QEMyPkIzPkIzPEI0O0EzO0EzO0E1O0E1OD4yNz8yOEAzOEAzOUE0OUE0OkI1OkI1OkI3OUE2OUA4OUE2OD83OEA1OD83Nz80OUA4OUE2OUA4OUE2OUA4OUE2OUA4OD83Nz42Nj02NDszMTgwMDUuLzQuLjMtLTIsLjMvLTIuLDIuKzIrKzIrKzIqKTMoKDUkIzccJz4hL0YpNk0xOE8zOk4zOU0yOU0yNkovN0swOU00O082Ok03Nkk1MEMwLD0rKzcrLDYrKzUqXGZOXGZOXmZPYGhRYWlSZWpUZ2pXZ2pXZmdVZ2ZUaGVUZ2RTamRWamRWa2VXbGZYbGZWamdYamZaamZbamZdaWVaaGRYZWZUZWhTZGxVZW5ZYW5cYXFmcYSAlaertsfO0dzg4ens7/f59P389/35+f74/P/2+//x9ffp+Pnn9vfl8fDc7u3Z6+rV4N/K1NK91s+8ycGuvbSlvLKowrexy8HA29LV6uHm+fL6/Pf+/vv//v3//f7/+f38+f76+v/7/f/8/f/8/f/+/f/8/v78/v78/v78/v78//76/v35/v35/v35//34/v34//75//77//38//z7/vz9/v78/v/9/v/9+v/5+P33/f/6+/z2/f31//74//74//r1//jy//r4//r//vv//v3//v7+/f/+/f/8+v/7+v/7/f/+/v7+//78//75//3y//3t//3q//7m+PTb/vrf5d/FjolsVE0wV04xVEssU0orVk0uVk0uVE4uVE0wVE8xU08yU08yUVA0T04yT04yUE8zUFA2TVA1Sk41R00zRE0ySFE2RU4xQUotPUYnPUclQUsoRUwqRU0oUFY0T1UzSk8vSEssUlU4YmJGYmJGWlo+WVk/WlpAXFpBW1tBWlo+V1c7VVQ4U1E4RkUwRUQwQ0IuP0AuPj8vPT8xPT8yPUEzOj0yOD4yOEAzOEAzN0I0N0I0OEMzOEM1N0I0N0I0NkA1NkEzNkA1NkEzN0E2N0I0N0E2N0I0N0E2N0I0OEI3OUQ2O0U6O0U6OEI5OEI5N0E2NkEzNj4xNDwvMjovMDcvLTQtLjUuLTcuLDgqLTooMEAmM0YmNkwmOVYqOFcrOlYuOVQzOlM2OlA5PE85PVA6OUszQFI4RFg8RVk9Qlk8PVQ4MkkvKTwoKjYoKjQpKTMoWWdNWWdNW2hOXWpQYGpSYmxUZmtVZ2xWZ2hWZmdVaGdVaGVUa2VXa2VXbWVYbGZYamdWamdWamZaamZaamZdaWVaZ2VYZWZUZ2pXZW1WZm9cZXJhaHhud4qImqywt8jP0Nne4Ojr7/f59f77+P76+P/3+/7z+Pzt9vno9vnm9PPf7OvX6ebT5eLP2tfE0Mu4yb6swbSkua2fu66lwbayy8HA2s/T5d/j+vP7+vf+/vv//v3//P3/+/z++f38+v79/f/+/f/+/f/+/f/+/v78/v78/v78/v78//76/v35//z5//z5//34//34//75//75//36//z5/fz6/v37/////////f39+/v7//79//77//z5//jw9+zm7+Xb9efe+/Ho//v9/vz//v7+/v78/f/6/f/6+v79+v7//f7//f7///3///78//71//7t//7o///j9vTb+/vh4eDEiYhqUUwvUk0vUkwsUUsrVE4sVE4sVE8vU1AvU08yUVAyUFA0T08zT04yT04yT08zTVAzTU83SU81SE40RU4zRlA1RE8xQUotPkgmQUgnRU0oSU8rSlAqTVMtTlQwVVs3XGJAX2JDWVw/VFc6VFQ6VVU7VlY8V1c9V1c9V1c7Vlc4VlU3VVQ2UEwzTkkzSUcyRkMwQ0IwP0AwPz8zPkAzOj0yOD4yOT8zOEAzN0I0N0I0N0QzN0QzN0I0N0I0NkEzNkEzNkEzNkEzN0I0N0I0N0I0N0I0N0I0N0I0OEM1OkU3O0Y4PEc5O0c9O0c7O0c5Okc2O0QzOUIxOEAzNz80Nj01ND41MjwzMD4tM0MpN00pQVguRWEwTm86TG47SWg8RGI+QFk8O1M7Ok06OUw4PE42RFc7SV1BTGFCSmJCRVw/OVI1LkQtKTUnKDInJzEmWWdNWWdNW2hOXWpQYWtTYmxUZ2xWZ2xWaWpYaGlXamlXamdWbGZYbGZYbWdZbWdZamdWamdWamZaamZaaWVcaWVaaGZZZWZUZ2pXY2tUZG1aZnNibX1zfI+Nmqyws8TLzNXc3ubp7/f59v/++P769/729/rv9Pjp8fTj7vHe6ejU4N/L3NnG19TBz8q3x8Cuv7SivbCgvLCiw7aty8C81cvK4tfb6uTo+/T8+/j//vv//v3//P3/+/z++v79+v79/f/+/f/+/f/+/f/+/v78/v78/v78/v78/v35/v35//z5//z5//34//34//34//34//36//z5/fz6/fz6/v7+/////v7+/Pz8//79//77//36+vPr6t/Z4NbM693U9uzj//v9/vz//v7+/v78/f/6/f/6+v79+v7//f7//f7///3///78//71//7t//7l//7i+Pbd+/vh4N/Dh4ZoT0otUUwuUkwsUkwsVE4uVE4uVE8vU1AvU08yUVAyT08zT08zTk0xT04yTk4yTVAzTE42SlA2SU81Rk80RlA1RE8xQ0wvQkwqRk0sSVEsT1UxUlgyUVkwV182aXFKeIBbcHZUWF09S1AyTVA1TlE2TlA4UVE5UVE3VFI5VVQ4VlU5V1Y6VlI5VE85T004S0g1R0Y0QkMzQEA0PkAzOz4zOT8zOT8zOEAzN0I0N0I0NkMyNkMyOEM1N0I0N0I0NkEzNkEzN0I0N0I0OEM1OEM1N0I0N0I0OEM1OEM1OkU3O0Y4PEc5PUk/PUk9PUk7PUo5P0g3Pkc2PEQ3O0M4PUQ8OUM6NkA3M0EwOEguQVczT2Y8VnJBXn9KWnxJVXRIS2lFQls+OFA4NUg1MkUxPE42RVg8TWFFUWZHUGhITGNGP1g7M0kyLjosLDYrKjQpWGZMWWdNXGlPXWpQYWtTY21VZm5XaG1Xam1aamtZa2pYa2pYa2hZbmhabmhabmhaa2hXa2hXamZaaWVZaWVcaWVaaGZZZmdVZWhVYGhRYWpXZXJhbX1ze46MlKaqqLnAxtHX2eDm7PT39P389vz49Pvz8vXq7fHi5+rZ4eTR29rG0tG9zcq3yMWywr2qvbakw7imx7qqzMC01snA3tPP6N7d8+js+PL2/fb+/Pn//vv//v3//P3/+/z++v79+//+/f/+/f/+/f/+/f/+/v78/v78/v78/v78/v35/v35//z5//z5//34//z3//z3/vv2//36//v4/Pv5/Pv5/f39/v7+/v7+/f39//v6//77//36/PXt7eLc49nP8OLZ/PLp//v7/vz//v7+/v/6/f/6/f/6+v/7+v7//P3//f7///3///78//71//3s//3k/v3h+vjf/v7k4d/Gh4ZqUEsuUk0vU0wvU00tVE4uVU8vVVAwVFEwVFAzUVAyTk4yTU0xTk0xTk0xTU0xTE8yTE42SlA2SlA2SFE2SFI3RlEzRk8ySFIwTFMyT1cyVlw4XGQ7Z3JHc4BUhpNoj5tzhI5pa3VSWWA/Ulc5S080S001TEw0TEw0T002UU82VFI5VlQ7WFM9VlE7UlA7Tks4Skk3REU1QkI2QEI1Oz4zOT8zOT8zOEAzN0I0N0I0NkMyNkMyOEM1OEM1N0I0N0I0N0I0N0I0OEM1OEM1OEM1OEM1OEM1OEM1OUQ2OkU3O0Y4PEc5PEg+PEg8PEg6PEk4Pkc2PUY1PEQ3PEQ5PUQ8OEI5NkA3M0EwOUkvQ1k1Umk/WnZFWntGV3lGUnFFR2VBPFU4MUkxLkEuLD8rNkgwQFM3Sl5CUWZHUWlJTWRHP1g7M0kyLzstLjgtKzUqWGZMWWdNW2lPXmtRYmxUZG5WZm5XaW5Ya25ba2xabGtZa2pYbGlabGlabmhab2lbbGlYa2hXamZaaWVZaGRbaGRZaGZZZ2hWZmlWYGhRYWpXZXJhbHxyeIuJjZ+jn7C3wczS1N3i5/Hz8fn78/n38Pfw7fDn5+vd4OLU2NvI0dC8y8q2x8Www76qvbikurOgyr6u08a23NDE5tnR7eLe9evq/vP3//r+/vf//fr///z//v3//P3/+/z++v79+//8/f/+/f/+/f/+/f/+/v78/v78/v78/v78/fz4/v35//36//36//34//z3/vv2/fr1//z5/vr3+/r4+/r4/Pz8/v7+/v7+/v7+//v6//z5//v4//jw9+zm8Obc+Orh//Xs//v7/vz9/v78/v/6/f/6/f/6+v/7+v7//P3//P3///3////7//7z//3q//zj/Pvf/fvk///o5OLJioltUk0wVE8xVU4xVU4xVE4uVU8vVVAwVVIxVFAzUVAyTk8wTE0uTUwwTUwwTU0xS04xTE42SlA2S1E3SVI3S1U6SFM1SlM2Tlg2Ulk4VFw3XGI+ZW1EgZFikqZznrKBmqt+kqF4hpVucXxaWmNES080S001S0o1Skk0TEo1UEs1U044VVA6VVA6VE85UU86T0w5S0o4Rkc3REQ4QkQ3PD80OkA0OkA0OUE0NkEzNkEzNUIxNUIxOUQ2OEM1N0I0N0I0N0I0N0I0OEM1OUQ2OEM1OEM1OEM1OUQ2OUQ2O0Y4PEc5PUg6O0c9O0c7PEg6PEk4Pkc2PUY1PEQ3O0M4OkE5NkA3NT82NEIxOUkvQVczTmU7VHA/U3Q/UnRBTm1BQ2E9N1AzLEQsKj0qKTwoMUMrO04yR1s/T2RFUGhITGNGPlc6M0kyKjYoKDInJS8kClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdGltZ2ZzdDEwMC5qcGcgYi90ZXN0aW1nZnN0MTAwLmpwZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zNmQ5Yjc1Ci0tLSAvZGV2L251bGwKKysrIGIvdGVzdGltZ2ZzdDEwMC5qcGcKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvdGVzdGltZ2ludC5qcGcgYi90ZXN0aW1naW50LmpwZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yNTAxYzYxCi0tLSAvZGV2L251bGwKKysrIGIvdGVzdGltZ2ludC5qcGcKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvdGVzdGltZ2ludC5wcG0gYi90ZXN0aW1naW50LnBwbQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41OWM1MGE4Ci0tLSAvZGV2L251bGwKKysrIGIvdGVzdGltZ2ludC5wcG0KQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvdGVzdGltZ3AuanBnIGIvdGVzdGltZ3AuanBnCmluZGV4IGNhNmFjYWQuLjk2OGE5MGUgMTAwNjQ0Ci0tLSBhL3Rlc3RpbWdwLmpwZworKysgYi90ZXN0aW1ncC5qcGcKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvdGVzdG9yaWcucHBtIGIvdGVzdG9yaWcucHBtCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjJhNWQxZTkKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0b3JpZy5wcG0KQEAgLTAsMCArMSw0IEBACitQNgorMjI3IDE0OQorMjU1CiswLy0wLy0xMC4yMS81MS41MS42Mi82Mi84My84My86Mi86Mi86My06My06My06My06Mi86Mi85MS44MC04MC05MS46Mi86Mi84MC04MC04MC04MC04MC04MC04MC04MC02Lis2Lis2Lis1LSo1LSo1LSo0LCk0LCk0LCk0LCk0LCk0LCk0LCk0LCk0LCkyLSkvKiQvLCUwLSYwLSYxLicyLygzMCkzMCk2Myw2Myw3NC04NS45Ni85Ni86NzA6Ny5BOjBCPDBEPjJGQDRJQTRKQjVLQzZLQzZORTZNRDVPQzNOQjJPQzNPQzNQRDRSRTVSPzFZPzJiQDRuQjV9RTaLSDiZRzmjRjewSDu4Rju/RjvFRj3HRz7LSEDLSEDQRULnRkztQ0zsRU3rRUnuQ0nvQkTyP0P0PUH4O0H3OkD0Oj/wPD/pP0LiP0DXPzzLQTe7PS+1QC61QC60Py20Py2zQC2yPy2vQC2tPy6qQS6mQS2iQiygQS2bQCuZQSuWQSyUPi2SPy+SPy+RPi6RPiyRPiySPCuSPCuUPi2UPi2UPSqUPSqVPiuVPiuWPyyWQC+WPzaVPjWXPTSfPzOpQjOzRDO8RDS/RDS5PzC2QjOsRjqeSDuHRztvQTJVOStDMyY9NTI6NjU5NTQ4NDM3MTE2MDA1Ly81Ly83Mi83Mi83Mi82MS42MS02MS01MCw0MSwvLy0uMC0vLy0vLy0wLy0wLy0yLi0yLi01LC00Kyw0KiszKSo3KCs9LjFFNjlQOjxqQUV8SEqOTk+VT1GfV1uqZG6qb4OfdJCUe6OHf66Ahrp+iL10eq5gYZFUS3ZRRWlTSmdQSF9NSF5UUWJmZG98fYKNkZCZnpijqZ+iqJqeoJOPkYN7fGxmZ1dZWEZRTkVVUltVUWJVUWIwLy0wLy0xMC4xMC40MC01MS42Mi82Mi84My84My86Mi86Mi86My06My06My06My06Mi85MS44MC04MC04MC04MC05MS46Mi84MC04MC04MC04MC04MC04MC04MC04MC02Lis2Lis2Lis1LSo1LSo0LCk0LCk0LCk1LSo1LSo1LSo1LSo1LSo1LSo1LSozLioxLCgwLSYwLSYxLicyLygzMCk0MSo0MSo2Myw2Myw3NC04NS44NS45Ni86NzA6Ny5AOS9CPDBDPTFFPzNIQDNJQTRKQjVKQjVMQzRMQzRNQTNNQTFNQTFOQjJPQzNRRDRQPjBVPzFeQTNqQzR4RDaFRjWSRTWcQzOnQzSvQTS1QDa8QjfARDrERTzFRj3NQ0DhRUnnQknoQ0nqREjtREfwQ0XzQEP2P0P4O0H3OkD0Oj/wPD/pP0DgQEDVQDzKQDa5Pi+1QC60Py20Py20Py2yPyywPy2vQC2tPy6qQS6mQS2iQiyfQCybQCuYQCqWQSyUPi2SPy+SPy+RPi6RPiyQPSuSPCuSPCuUPi2TPSyUPSqUPSqUPSqVPiuWPyyWQDGVQTaWPzaYPjWhPzSrQTO1RDS9QzS/RDW7QTK3QzasRjqcSD2FRzpsQDNTOSpCNCk+NjM6NjU6NjU4NDM4MjI3MTE2MDA2MDA3Mi83Mi83Mi82MS42MS02MS01MCw0MSwvLy0uMC0vLy0vLy0wLy0wLy0yLi0yLi00Li41LC01KywzKSo1KSs8LTBDNDdOODpkPT52REOGSkmPTU6aVFakYWqlbH2dco6Re6KGgK5/hbl7hLtvdalbW41SSXZPQ2lPRmVQSGBQSF9STl9bWWZub3SFhoiUmZWZnpeaoJSZnY+PkYN+f3Fqa1tdW0xWU0pYU1pWUmFYUWEvLiwwLy0wLy0xMC40MC80MC81MS41MS43Mi43Mi43Mi43Mi45Miw5Miw5Miw5Miw5MS44MC44MC43Ly03Ly04MC44MC45MS84MC44MC44MC44MC44MC44MC44MC44MC42Liw2Liw1LSs1LSs1LSs0LCo0LCo0LCo2Liw2Liw2Liw2Liw2Liw2Liw2Liw0LysyLSkxLikyLyozMCszMCs0MSw1Mi01Mi02My42My43NC83NC84NTA5NjE5NjE6NzA/OC5AOi5CPDBEPjJHPzRIQDVIQDNIQDNKQDRJQDFLPzFLPzFLPzFMQDJNQTFOQjJNQTNRQTJZQjRkQzRxQzR8QzKHQjKSQTCYPC2hOyynOy6vPTK1QDa6RDq/Rj3FRD7ZQ0XhQEbjQkfoQ0fqREbwQ0X0QUT4P0T6O0D5Oj/1O0DwPUDoQEDdQj7RQDvGQDW3PS6zQC2zQC2zQC2yPy2wPy2vPiytQCyqPy2nQC2lQC6hQC2dQSybQCuYQCqVQCuUPi2SPy+RPi6RPi6RPi6QPS2QPSuQPSuRPiyRPiySPCuSPCuTPSyUPi2VPy6VPzCVQTaWPzWaPjOkPzOvQTS5QzW/RDXBQzXARDi5RzyuST2ZSj2BRztoQDRROixCNSw/NzQ9Nzc8NjY7NTU5NDE4MzA3Mi83Mi82Mi82Mi82Mi81MS41Mi01Mi00MSwyMSwvMS4tMi4vMS4vMS4wMC4wMC4xMC4zLy41Ly80Li41LC00Kis0Kis5LS8+MjRJNTZbOTdsPzp9RkGGSUSQT02YW2CbZnaVbomMd56Dfa19grl1frdnbKRVVYlNRXZMQWtNQWVPRmNRSGNOSV9OS1xbW2VzdHmHiYiHjIaKj4iNkIWGinx4emxmaFpaW01WU0xaVVtaVGBbU2AuLSsvLiwvLiwwLy0zLy40MC80MC01MS42MS02MS02MS02MS04MSs4MSs4MSs4MC04MC43Ly02Liw2Liw2Liw2Liw3Ly04MC44MC44MC44MC44MC44MC44MC44MC44MC41LSs1LSs1LSs1LSs0LCo0LCozKykzKyk2Liw2Liw2Liw2Liw2Liw2Liw2Liw0LywzMCszMCszMCs0MSw0MSw1Mi01Mi01Mi01Mi02My42My43NC84NTA5NjE5NjE5Ni8+Ny0/OS1BOy9CPDBFPTJFPTJGPjNGPjFHPTFHPTFIPC5JPS9JPS9KPjBMQDBKQTBMRTVORTRWRTVeRDNpRDJzQjF+QS+GPy2MOSmUOSedOSqkPS6sQDOzRTi4SDzBRj7SREPaQUPeQkXiREXoREXsQkPzQEP3P0H6O0D5Oj/2PEHuPkDlQUDaQj3NQDnCQDO2Pi6wQCywQCywQCyvPiyuPyyuPyysPyupQC2mPyyjQC2gPyycQCuYQCqWQCmUPyqRPiyRPi6RPi6RPi6QPS2QPS2PPCqPPCqQPSuQPSuQPSuQPSuSPCuRPiyUPi2SPy+VQTaXQDacPjKmQDSyQja8QzjBQzfCQjfCRjy6Sj+sS0KXSkB8RjpiQDRMOi5BNy1AODU+ODg9Nzc8NjY6NTI5NDE4MzA4MzA2Mi82Mi82Mi8zMi41Mi0zMi0yMSwxMi0tMi4tMi4vMS4vMS4wMC4wMC4xMC4xMC41MTA2MDA1Ly81LC00Kyw2LC06MDFEMjJUNzFjOzNyQjh7RTuDSUWJUlWNX2yLaYKDc5h9eat4fbVvd7VhZaJTUoxNRHlMQHBMQGhQRWdRRmZMQ15IQ1dOTFpeXmZqbnF1eXh5fnh6gHZ3em9rb2FgYlVXWUxUVExdV1ldVl1dVl4tLS0tLS0vLiwvLiwwLy0xMC4zLyw0MC00MC00MC01MCw1MCw1MCw1MCw3Lyw3Lyw0Lyw0LywzLiszLiszLiszLis0Lyw0Lyw1MC01MC01MC01MC01MC01MC01MC01MC0zLiszLiszLisyLSoyLSoxLCkxLCkxLCk0Lyw0Lyw0Lyw0Lyw0Lyw0Lyw0Lyw0Lyw0MSw0MSw0MSw0MSw1Mi01Mi01Mi01Mi01Mi01Mi02My43NC83NC84NTA5NjE5Ni88NS09Niw/OC5AOS9COTBDOzBDOzBDOzBFOy9EOi5GOi5HOy9IPC5JPS9KPjBJQDFKRzZNSDVSRzVZRjViRTNqRDF1Qi98PyyCOymLOimTOiqaPSyjQjKsRjiySj28SkDMR0LUREPYRETdRUTjQ0PpQUHwPUD0PD75Oj/5Oz30PD7tPz7hQj7TQzrFQTW5PzCyPy2vQC2uPyyuPyyuPy6sPi2sPi2qPy2oPi6kPy2gPyyePyuaPyyXPyuVPiqUPyuRPiyQPy6QPy6PPi2PPi2OPSyOPSyOPSyOPSyOPSyOPSyOPSyPPCyPPi2RPi6RQC+UQjSXQTSeQDSoQDO2QTe/QznFQjrEQTm+Qzu3SD+mTEORS0N0RTtaPjJFOS09NixBOTZAODY/NzU+NjQ9NTM8NDI5NDE4MzA2Mi80My80My8yMy4zMi4yMy4xMi0wMi0tMi4sMi4tMi4tMi4vMS4vMS4wMC4xMC4zMjA1MTA1MTA0Li4yLCw1LC03Li8+MC9ONS5ZOS5lPTFvQTR0Qzx5S0uAWmWEaIF/cJd6eKp1e7dsdLVfZKZUVJRPR4NMQndOQW1OQmhNQWVKQWBHQllIRVhLS1dNUFVeYmNgZmJiaWFgZlxaYFZXWk9VWE1YWFBeWVZgV1hgV1osLCwsLCwuLSsvLiwvLiwwLy0zLy4zLywyLisyLiszLiozLiozLiozLio1LSo1LSozLiszLisyLSoyLSoyLSoyLSozLiszLiszLiszLiszLiszLiszLiszLiszLiszLiszLisyLSoyLSoyLSoxLCkxLCkxLCkwKyg0Lyw0Lyw0Lyw0Lyw0Lyw0Lyw0Lyw0Lyw0MC00MSw0MSw0MSw0MSw0MSw0MSw0MSw0MSw1Mi01Mi02My43NC84NTA4NTA5Ni87NCw8NSs9Niw/OC5ANy5BOC9BOC9BOS5DOS9DOS1FOS1GOi5HOy9JPS9KPjBIQTFKRzZKSTdORzVWRjZcRTNkQzJsQTB0Py18PSyDPCqMOyqUPSycQDGjRjWqSjq0Sj3ESEDMRUHRRkHWRUDeQ0HlQT/sPj/yOz33Ozz0OjvwPD3pQD3cQz3NQzi+QDKyPy2uPyyrQCyrQCyqPyuqPy2pPiypPiyoPyylPi2jQC2gPyycPy2XPyuVPiqTPimRPyqQPyyPPi2PPi2PPi2OPSyOPSyOPSyNPCuOPSyLPCuNPCuLPCuLPC2MPSyNPi+OPzCUQjSYQjOhQTOsQjW5QznCQzrFQjrDQjy7QjqxSEKjTkeNTkVwSD5UQDVBOy85Ni1AODVBNzU/NzU+NjM9NTM5NDE5NDE3MzA0My80My8zNC8yMy4yMy4xMy4wMi0uMy0tMy8tMy8uMy8uMy8wMi8wMi8xMS8xMS8yMS8zMjAzMjA0MC8yLi0xLSw0Li44LixHNC1PNClYOCtgPDBlPzZtR0Z5WWSCa4WAdZ98fLJ3fLxudbtkaK9bW6FTTI9MQn5PQXJMQGhJPWNIPmBIQl5FQ1hAQk88QUdDSEtETUpKUUpKUUlJUEhLUUdPVUtWV09eWVNgWVNgWFUrKyssLCwsLCwtLS0vLS4wLy0wLy0wLy0xLSoxLSoxLSoxLSoyLSkyLSkyLSkyLSkyLSoyLCwxKysxKysxKysxKysyLCwyLCwxKysxKysxKysxKysxKysxKysxKysxKysyLCwyLCwyLCwxKysxKysxKyswKiowKiozLS0zLS0zLS0zLS0zLS0zLS0zLS0zLis0MC00MC00MC00MC0zLywzLywzLywzLyw0MC00MC01MS42Mi83MzA3MzA4NDE4NTA6My07NCw8NS09Ni4/Ni8/Ni0/Ni0/Ni1DOTBDOS9FOC9GOTBHOjFJPTFKPjJIQDNIRTZHRTZLRTVRRDRZRDNfQjJnQC9uPSx2PSx8OiqFOSuMOiyTPS6bQjKiRjesRji8Rz3CRj7JRj7QRT7ZREDiQz/qQEDwPj7yOjrxOzrsPDzkQTzWQzvGRDa1QC+qPSmqPy2pQC2pQC2pQC2oPi6oPi6nPS2lPi2jPS6gPy6ePy2aPy2WPyyUPyuRPyqPPimPPiuNPi2NPi2MPSyMPS6MPS6LPC2LPC2LPC2KPS2KOyyJPCyKPC+LPi6MPjGMPy+SQzSYQjOhQTOuQja8QzrDRD3EQz3AQz26R0KyUUumWVOPWFFzUklXST5DQzc8PzY+OTNANzI+NjM9NjA6NTE5NDA4My82My40My40My4zNC8yMy4xMy4xMy4wMi0uMy0tMy8tMy8uMy8uMy8uMy8uMy8wMi8wMi8wMC4xMS8yMjAyMS8xMC4vLiwyLi00Lyw/MCtEMClLMylUOC1aPDRlR0d1XWqDc42JgKuFhL5+g8d0esZtcL1lZa9WU5pMQ4JLP3FKPWhHO2NFPl9GQl1EQlc/QU47P0g6QkU+SEdETUhHUUlHUUhKUkdOVktVWE1eWk9hWU5hWE8rKysrKyssLCwtLS0uLC0vLS4wLy0wLy0xLSwxLSoxLSoxLSoyLSkyLSkyLSkyLSoyLCwxKysxKyswKiowKioxKysxKysyLCwwKiowKiowKiowKiowKiowKiowKiowKioyLCwyLCwyLCwxKysxKyswKiowKiowKioyLCwyLCwyLCwyLCwyLCwyLCwyLCwyLCwzLywzLywzLywzLywzLywzLywzLywzLyw0MC00MC01MS42Mi82Mi83MzA4NDE4NTA5Miw6Mys7NCw8NS0+NS4+NS4+NS4+NSxCOC9COC9FODBGOTBHOjFJPDNKPTRJPzVGQjZGQjZKQjVPQTRVQjNcQDJjPzFqPC1xPC53OSp9OCmFNyqMOiyWPjCbQjSkQjWyRjq6RTvBRj7KRz/UR0DeRkHnQ0HuQkDtOzvrOzvnPjvfQjvRRDq/RDSwQS6kPiimQS2mQS2mQS2lQC6lQC6kPy2kPy2kPi+iPi6fQC6cPy6YPy2VPiuRPyqPPimPPiuNPi2NPi2NPi2MPSyMPS6LPC2LPC2KPS2KPS2JPS+IPC6IPC6IPC+HPTCIPjGLPzGRRDSWQzOiQjStQza6QzvBRD7BREC7RUG5UEyyW1SmZl2RZl11X1RbVUlITkJDST88OTI/ODI+NzE7NjA5NC43NC02My40My40My40My4zNC8yMy4xMy4xMy4uMy0uMy0uMy8tMy8uMy8uMy8uMy8uMy8wMi8wMi8vLy0xMS8yMjAyMjAxMC4wLy0wLy0zLyw4LCw8LSpDMCpLNzBTPDZeSEp0Ym6HepSQiraMjcaEiM96gMx0d8ZqbLdZV6BJRIRFPW5HPGREPGFDPl5DQVlAQ1ZARFA+RUtHUVJLV1VRXldVYFhUYFZTXVRUXlNZX1NeW0xhWkphWkosLS8sLS8tLS8tLS8tLS0tLS0uLC0uLSsvLiwvLiwxLSowLCkwLCkwLCkvKygvKygvKyovKyovKyovKyovKyovKyowLCswLCsvKyovKyovKyovKyovKyovKyovKyovKyovKyovKyovKyowLCswLCsxLSwxLSwyLi0yLi0yLi0xLSwxLSwxLSwxLSwxLSwxLSwwLCkxLSoyLiszLywzLywzLywzLywzLywzLywzLywzLywzLyw0MC01MS42Mi83MzA4MC05Miw6My07NC49NC8+NS4+NS4+NS5ANS9ANi1CNS1DNi5ENy9GOTFIOzNHPTRHPjVIQDVKQDZQPzVUPjNYPDFeOTBjNyxtOS50OC18OC2DOS6NOy+TPTCYPzGePjCnQTOtQTS1Qzi+RTrKRz3URz7eRT/lQ0DoQD/qQkHmREHaRT7IRDi3QjGqQS6iQiyiQS6hQC2iPyyiPi6hPS2hPS2iPi6gPy+cPCyaPSyYPC2VPi2TPSyQPSuOPSqMPSyLPCuLPCuKPS2JPCyJPCyJPCyIOi2HOy2JPS+HPTCHPTCHPTCIPjOIQDSJQTWLQTSRRTWXRDSjRTmxST66R0C7RD67RUG4TUe1W1OvZl+jcWaRc2h+cmRqal5WXlNKUkdMTEJKRj1CPjU9OTA6Ni03NCs2MywzMys1NC8zNC4zNC8yMy4wMi0vMSwuMC0sMS0tMi4tMi4tMi4tMi4vMS4vMS4vMS4vMS4wMi8wMi8xMS8xMS8xMS8xMS8xMS80MC80KzA7LzNBMzJDNDFKOzhdTlF5bXuLhZ+TkLuUls+QldmDidN0esZqbrdgY6haW5RMSXRIQmRBPl0+Plg/QlVBSVZMVVxVYGJicW5vfnl2hnxzgHZseW9odGhfa19XX1BeXUliXEZjXUcsLS8sLS8tLS8tLS8tLS0tLS0uLC0uLC0vLiwvLiwwLCswLCkwLCkvKygvKygvKyguKikuKikuKikvKyovKyovKyovKyovKyovKyovKyovKyovKyovKyovKyovKyovKyovKyovKyovKyowLCswLCsxLSwxLSwxLSwxLSwxLSwxLSwxLSwxLSwxLSwxLSwxLSwwLCsxLSoyLisyLiszLywzLywzLywyLisyLisyLisyLisyLiszLyw0MC02Mi82Mi84MC45MS46Mi87NC49NC8+NTA+NTA+NS4/NC4/NC5CNS9CNS1ENy9FODBHOjJIOzNIPjVIPjVMPTZPPjZSPjVWOzJaOTBfNy9pODFwNy54OC6BOC+KOi+QPDGWPDGbPTGiQDOnQTOtQza0RDi+RTrJRjzURT3bQz7fREDgRUHfR0LURz7ERjqzRDOlQi+eQi2fQy6eQS+fQC6ePy2ePy2ePy2ePi6fPy+aPSyZPiyWPS2UPSyQPSuPPiuMPSyMPSyLPCuKPSuJPCyJPCyJPCyHOyuHOy2FPC2GPC+FPS+FPTGDPTGFPzOGQDaIQjiIQjaTRzmYRjijRzyvSkK4SES4R0O3S0izVE6xZFyqcWaffm+Qf29/fG1tc2VaZlpOWE1MTkNLST1FQzdBPjU9OjE4OC40NCwxMSkyMy0yMy0xMi0wMSwvMSwvMSwuMC0uMC0vMS4tMi4vMS4vMS4vMS4vMS4vMS4vMS4wMi8wMi8xMS8xMS8xMS8xMS8xMS8yMDE1KzQ5LTc8MTU/NTRJPz1eVVZ5c32KiJ6Tk7mUl8qQltSEi895gcJxebhrdK1obp5dYIFYWnFTVWpSV2pUXmhaZ21mdnZygn90iH9+koeDlYl+joF3h3pygHFmdGdaZVRbWkVgWkJiXEQtLjAtLjAtLjAtLjAtLjAtLjAuLi4uLi4uLC0uLSsuLSstLCovKyouKikuKicuKicsKyksKissKissKissKissKisrKSorKSotKywtKywtKywtKywtKywtKywtKywtKywsKistKywtKywtKywtKywuLC0uLC0uLC0uLC0vLS4vLS4vLS4vLS4vLS4vLS4vLiwwLCswLCsxLSwyLi0yLi0yLi0yLi0xLSwxLSwxLSwxLSwxLSwyLi0zLy40MC81MS44MC45MS86MjA8NDE9MzE+NDI9MzE9NC8/NDA/NC5BNC5BNC5DNjBENzFGOTNHOjRIOzVKOzZLPDdOPTZQOzZTOjVXODNbNi5jNjBrNi50NSx9Ny+HOS+NOzCUPDKXPTKeQDagQDSiQDOoQDOxQza6RDjFRTzNRDzVRkDXSELUSULMST++RTquQzOhQjCcQS6dQi+cQS+cPy6bPi2bPi2bPi2bPi+bPzCYPC2WPS2UPC6TPS6PPi2MPSyMPS6KPS2JPCyJPCyJPCyIPCyHOy2FPC2EOi2DOy2EPDCCPDCCPDKCPjODPzSFQTiHQzqIRDmUSj2XSDugSD6sS0SyS0azTEeyU02uYFatc2emgXGdjHqRjnuCiXdzgG9jcWJYY1VOUkRNTkBISTtERDhAQDQ6PC80NisvMSYxMiowMSsvMCsvMCsuLyovMCsvLy0vLy0vLy0uMC0vLy0vLy0vLy0vLy0vLy0vLy0wMC4wMC4wMC4wMC4wMC4wMC4wMC4xLzI2Kzk4LDo4LzQ7NjNIRUBfXll6eX6LjZqQlLGSl7+PlceEjsN9ibt7ibZ8i7J9jKt9iJp5g49xfodvfoNufn5wg395joWDmY2LoZSRqJiQpZSInYyDlYV8jXtqe2tcaFRYWEBdWT5fW0AtLjAtLjAtLjAtLjAtLjAtLjAuLi4uLi4uLC0uLC0tLCotLCovKyouKikuKicuKiksKissKisrKSorKSorKSorKSoqKCkqKCksKissKissKissKissKissKissKissKissKissKissKissKistKywtKywtKywtKywuLC0uLC0uLC0uLC0uLC0vLS4vLS4vLS4vKyowLCsxLSwxLSwxLSwxLSwwLCswLCswLCswLCswLCswLCsxLSwyLi0zLy40MC85MS86MjA7MzE8NDI9MzE9MzE9MzE9MzE+My8+My9AMi9AMy1BNC5DNjBENzFFODJGOTNIOTRJOjVKOzZMOjZOOTRRODNUNTBeNzJlNjBvNi94OC+COTCLOzKQPDKUPTOaQDebPzSbPzKfPzGlQTKuQjW4Qzm/RTrISD/LSEDKSkHDSEC2RjqqQjWeQTCZQC6aQS+ZQC6YPy2XPiyXPiyZPiyZPS6YPy+WPS2UPSyTPS6QPS2OPSyKPSuKPS2JPCyJPCyIOyuHOyuHOyuEOyyEOyyDOy2AOyyBOy+APDGBPTKBPjWDQDeDQzqHRDyIRTyUS0KWSD6eR0CnSkWuTEmuUUytXVaqal6ngG+hj3mamoKPm4OGlYB6i3hte2xibV9TWkpRVUZLT0BFSTpARDY7PTA1NywxMygwMSkvMCguLyouLSkuLSkvLiowLy0wLy0wLy0wLy0wLy0wLy0wLy0vLy0wLy0vLy0xMC4wMC4xMC4wMC4wMC4wMC4wMC4zLjI3LDo2KjgzLTE5NjFISj9iZlh7gHqLkJONk6OPlrCMlbaDkLKBkK+FmbKNpLaSqLOUp6uRo6OMoJ6HnpiCmY99mImBnIuIo5CUsJqYsZuUrZeLo42Fm4Z+kX1rfGlYZk9TVT1aVjteWj8rLzIrLzItLjItLjItLjAtLjAuLjAuLjAtLS0tLS0uLSstLCotLCotLCosKyksKyksKissKissKisrKSorKSoqKCkqKCkqKCksKissKissKissKissKissKissKissKissKissKissKissKissKissKisrKSorKSotKywtKywtKywuLC0uLC0vLS4vLS4vLS4vKyowLCswLCsxLSwwLCswLCsvKyovKyowLCsvKyovKyowLCswLCsyLi0zLy40MC86MTI6MTI7MzE8NDI9MzI9MzI8MjA8MjA+MzE9Mi4/MS4/MS5AMi9BMzBCNDFDNTJENjNDODREOTVFOjZHOTZIOTRLODRONTBYNzJfNjBpNzBzODB9OjGGPDGMPjKQPjKXQDaXPzWXPzWXPzOcQDOjQzWrQzazRTi6RTu9Rz2+SD65Rz2wRDimQTWcQDGXQC+XQC2XQC2WPy6VPi2UPSyWPS2WPS+WPS+VPC6TOy2SPC+OPC6LPC2KPS2JOy6IPC6HOyuHOyuGOiqGOiqEOyyDOiuCOiyAOi6AOjCAPDGAPTR/PzaCQjmDRD2HRkCISD+RS0OSSD+aR0GjS0eoUEypWVKpZl2mdmiijHebmYCVpIeMo4eGnYN+kX10gnFqdWVcZVRWX0xOVUNFTDo/RjY8QDI3Oi81OC0xMiovMCguLSkvKygvKyowLCsxLSwyLi0xLSwxLSwxLSwxLSwxLSwvLiwxLSwvLiwyLi0wLy0yLi0wLy0wLy0wLy0wLy0yLTE4LDo1KTUxKys2NixHTDhhaVJ6g3CIkoeNl5aPmqCNmaWIlqOHm6KQqqmbubGhv7Oatqiatqebt6iYt6WRsZyJq5KJq5CQsZSSs5aVtJWQrY+IooWEm4F7knhnemRUYklRVDlWVTlZWDwsMDMsMDMuLzMuLzMuLzEuLzEvLzEvLzEuLi4uLi4vLiwuLSsuLSsuLSstLCotLCouLC0tKywtKywsKisrKSorKSoqKCkqKCksKissKissKissKissKissKissKissKissKissKisrKSorKSorKSoqKCkqKCkqKCksKissKissKistKywuLC0vLS4vLS4vLS4vKyovKyowLCswLCswLCsvKyouKiktKSgwLCswLCswLCswLCsxLSwyLi0zLy40MC86MTI7MjM7MzE8NDI9MzI9MzI8MjE8MjA9MjA9MjA+MC0+MC0/MS5AMi9BMzA/NDBANTFANzJAOTNBOjRCOTRDODRGNzRINS9RNTFYNS9hNi9sOC12Oi+APC+GPjCLPTGTPzWVPjWTPzWTPzSVQjSaQjSgQzSlRDSsQjWwRDi0RTqxRTuqQjeiQDWaPjGWPjCVPy6VQCyUPi2TPSyTPCuTPCuUPC6UPC6TOy2SPC2PPC6NOy2LPC2JPCyHOy2HOy2GOiqGOiqGOiqDOimDOiuBOSt/OS1/OS2APDF/PDN/PzaAQTiCQzyFRj+ISUKKSUOOSUKQR0CXSESgT0unVlOnYFqpcGWkg3KclH2WoIWPqIqIp4iDoIR+ln56h3VxfGtkcFxdaVVSXkpKU0BCSzo+RTU8QDI5PDEzNCwyMioxLSovKygvKSkwKioxKysyLCwxKysxKysxKysxKysxKyswLCswLCswLCsxLSwxLSwxLSwxLSwvLiwvLiwvLiwyLC44Kjc1KDEzKyg1NiZFSzFcZ0d1gmSGk3mOm4qRnpSSnpqNnpiNpZeXtJ6ixaWpzq2lya2nybCny7GkyKyXvp+Ls5GIsI2NspCOso6Qso+NrIqEoYKAmXt3jnJkeF1SYEZOUjdRUTVTUjYsMDMsMDMsMDMsMDMuLzEuLzEuLzEuLzEwMDAvLy8vLy8vLy8vLiwvLiwvLiwuLSsvLS4vLS4uLC0tKywsKisrKSorKSoqKCkrKSorKSorKSorKSorKSorKSorKSorKSosKisrKSorKSorKSoqKCkqKCkpJygpJygrKSorKSosKistKywuLC0vLS4vLS4wLi8vKyovKyovKyovKyovKyouKiktKSgsKCcwLCswLCswLCswLCsxLSwzLy40MC81MTA6MTI7MjM8MzQ8MzQ9MzQ8MjE8MjE7MTA8MS88MS8+MC89Ly4+MC0/MS5AMi8+My89NTI7NjI7ODM8OTQ9OjU+OTNANzJDNjBHNC5PNC1ZNCxkNStuOCx4Oi1/Oy6FOy6PPDSRPDWQPjOPQDOQQTKTQjGXQTKaQTGgPjGmQDSqQjeqQjmmQTefPjWYPjOVPzKSPy2SPy2RPiyQPSuROyySPC2SPC2SPC2ROy6ROy6PPC6NOy2KOy6IOi2HOy2EOyyFOSmFOSmDOimDOimCOSqBOSt+OCx+OCyBPTKAPTSAQDeBQjmERT6FSEOIS0aMTUaMSUOOR0GYSkihU0+oXVqpaGKpe26kjnmZnIGSp4iJrIuCqoiAoYSAmIB+i3d4gW5qd2NkcltaZ1NRXUlLVENFTDxARDY8PzQ2Ny80NCwzLywxLCkxKCkxKCkzKis0KywyKSoyKSoyKSoyKSoyKSowKiowKiowKioxKysxKyswLCswLCswLCswLCswLCsxKy02KTI1KS00LSU0NiFCSSdXYztxgFeCkm2NnH2QoIaSoYyNoIqNqImVuI6gyJSk0J2p06uo0q6n0a2hy6WTvZeFr4eCrISHsIaIroWMsYiLq4aBn3t7lHRxiGtfc1dNXUJJTzNKTTBLSy8uLzEsMDEuLzEuLzEuMC8uMC8uMC8vLy8wMC4wMC4wMC4xMC4wLy0wLysvLiwxLSwyLi0xLSwxLSwwLCsvKywsKisrKSorKSorKSorKSorKSorKSorKSorKSorKSwrKSorKSwrKSotKCwqKCksKCkpJygpJygpJygrKSorKSosKistLCouLC0uLSsvLiwwLy0tLCotLCovKyovKyovKyouKiksKCcsKCcxLSwyLSoyLSoyLSozLis0Lyw1MC02MS47MzE7MzE8NDI8NDI9MzI8MjE7MTA7MS88MS88MS89Ly49Ly49Lyw+MC0/MS49Mi49NC89NjA7ODE6OjI5OjQ5OjQ7ODE/NjFDMitKMSxUMSteMyxnNy1vOS11PS57PTCHPTSLPTOLPzKMQDKOQDOPQDGSPzGVPS+YPC+cPjKiQjahQzeeQjeZPzSWPjKVPzKUPi+TPS6QPS2PPCyOPC6MPS6MPS6NPi+OPC6OPC6LPC+KOy6JOy6IOi2GOiyEOyyCOiuCOiuAOyt+Oyt+Oyt8Oix9OSx8Oi6APjKBPjWAQDeCQzqDRz+GS0OIT0iLT0eMSEWOSEaTT0yYW1aeZ2CddWmeh3WemICUoYWPqouJrIuDqIeAoYR+m398j3l0iG9qfmNjel5dcVhXZk9PXEhJUkFBSDg+QDM5OS84NS43LywzKykyKCkyKCkzKSo0KiswKiwvKyowKiwwKiowKiwwKiwyKSwyKSwzKi0xKy0xKy0xKy0wLC0wLC0wLC0xKy81KjA1Kyw0LSU0NiE/RiVUYDhufVKBkGeJmXSNnnqNoX6IoXqKp3uRtoKbxIify5CfyZmex52dxpqYwZWMt4qCrYCFroKMtYmEq3+JroWJqYJ+nHh2j29sg2ZablNKWkBHTTNGSjFERi4vMCsuMCsvMCswMSwwMSwxMi0xMi0yMS00My80My80My82Mi81MS40MSwzLyw0Lyw1MC01MC00LywzLiszLS0xLSwwLCswLCsuLC0uLC0uLjAtLS8sLC4rKy0qKS4pKSsuKS8uKS0vKC8uKS0vKS0uKS0uKisuKisvKyovKyotLCouLSktLSsuLyouLyouLyotLS0tLS0uLC0vLS4vLiwwLy0yLisyLisyLSo0LCk1LSo2Lis5MCs6MSw7Mis7Mis9NC09NC0+NTA+NTA+NTA9NC88My48My49Mi48MS08MS87MC49Ly4+MC8+MC9AMS5BMClAMSo7NCo3Ny0zOS8zOS81NjA6My0/LStGKidMKSdTKiZaLyhgNSxkPDBrQDB5QTKAQTCGQTKLQjOPQDOTPTCTOy+SOC2TOy+UPi+UQTGVQjKUQzKSQTCRPi6ROy6XOjKXOjKSOzGNPjGIPzCEPy+CPy6DPi6IQDGIPzCKPjGKPDCJOy+IOi6GOi2DOy17OSt+QDN3PC5xNyl3PS93PS92Oy19PzJ7Oy+CQDSIRTyKSkGITEKGTUKEUEWHTkWRS0mXU1KUYluRb2OMfWqJiXGJlnyKnoKNpIeNpomOp4qNp4yHpIh+n4J1mntvl3VpjWlihF9belhac1VbbVNXZU5QV0VKSz1DPzZAOTM7MC42Kio0KCozJyszJysxJiosKi0pKyoqKiwqKCksJysuKCwxKC0yJy0zKC4zKC4zKDAyKDAwKTAwKTAvKjEvKjAvKS0xKyswLSgvLyM8PyxWXEJwelh/i2eNnHWLnXOMoXaMpneKqHaJqnWOtHuZv4afwY+dvo+WuoqPs4OIrn2Fq3yDqnuFqn6DqH2Dpn6Annx5lHVyiW1ofGNZa1VOW0dJUD5DSDQ/Qi8wMSswMSswMSswMSsxMiwxMiwyMSwzMi00My40My43NC83NC82My41Mi01MCw1MCw3Lyw3Lyw2Liw2LiwzLisyLSoxLSwwLCsvLS4vLS4vLTAuLjAtLDErKi8pKi4pKC0uKS8vKC8vKC8vKC8vKS0vKS0uKisuKisvKyowLCsuLSkuLSkuLyouLyouLykvMCsuLi4uLjAuLi4uLi4vLiwvLiwyLiszLis1LSo1LSo3Lik4Lyg6Lyk8MSs8Mik9Myo+NSw+NSw+NS4/Ni8+NS49NC09NC88My49Mi48MS08MS87MC49Ly4+MC8+MDBAMS5DMCpDMClBMis+My06NS85NC46Mi88MS8/LStEKilJKihOKydULylaNS1gOzJlPTFwQTF4QC+AQTCIQDKPPzSSPjSUOzOTOzGNOS6LPC+LPTCMQDCNQTGNQTGPQjKSQDKVOzKVOzKQPDKLPTCHPzGDQC+BPy+CPy6FQDGGPi+JPTCIPC6HOy6EOyyDOy2AOyx4OCx4PDF0Oi5uOSt0Py9zPi5yOCp1Oix9PTGDQTWJRTyLSD+KS0KGTUKEUEOIT0aRSkiXU1KSZl2Nd2mEhnCAk3eBnn+EpYaIp4iNp4qQp42Qp42KpImBn4N3nH1vmHZlkmlhjGFag1tZe1hcd1hablNTYUpOVUNGSDtDQDc8NzM3Ly0zKisyKSoxKCsuKCosKi0qKiwrKSwrKSwtKCwvKS0yKDAyKDA0KTEzKTEzKTIxKjIwKzIuKzIuKzQuKzIyLTEzLy4wLCktLSU4Oi1TWERveF2Ai2mHlm+GmWyGnm6Io3CGpHCEpXCKrXeTtoCZuYeWtoSTs4GNr3yGq3iCqHeCqHmDqHyDpnyEpH9/nXt4knVxiG5oe2VZaldOW0lFTDxARDU7PS8xMiwxMiwxMiwyMy0yMy0yMy00My40My41NC82NTA4NTA4NTA4NTA3NC83Mi43Mi44MC04MC03Lyw3Lyw0LywzLisxLSwxLSwxLS4wLi8wLjEvLTAuLjAsLC4rKi8rKS4vKC8xJy8vKS0vKS0vKS0vKS0uKisuKiswLCswLCsvLiovLiowLyowLyovMCovMCsvLy0vLy8wLi8wLi8wLy0vLiwxLSoyLSo2Lis3Lyw5MCs6MSo8MSs9Myo+NCs/NSw/Ni1ANy5ANy5ANy4/Ni8+NS49NC89NC89Mi48MS08MS87MC47MC48MS88MS8/MS5DMitFMCtILytLLS1MLC9LKy5JKi9FKy5BLSxALipBLihGLylOLypYMSpiMy1nNS5qOixvOy14PDGBPTSHPDaMPDWNOjSNOjSKOzSHPTKGPjKFPzOGQDSKQjaMQjWPQzaOPzKPPS+MPjGKPi6HPi+GPy2GPS6IPCyJOy6JPCyIOi2HOyuDOyx/PCl+PSt7PCt9PTF6PDF2Oi92PDB4QDF4QDF2PC52Oy1/PzWDQzmJRj2LSD+JSkGITEKHTkWKTkaSS0mYVFGWZlyRd2iHhW6CkXR/nXuBpIOFqIeIqomNqoyQqYyOpYmIn4OBmn15mHhplm1hkmVci2FchmBeg2FbfF1VclZRZ1BIWUdCUEE6RDkzOjIuMywrMCoqLCkqKigxKCsxJioxJioxJiowJyoxKCsyKS4xKy8vKi4tKy4sKzArLDApLTAoLTAoLTEpLTAxLzIzLy4vKygqKiI1NypRVkJtdV18immAkGt+k2p/mWyDn2+AoG9+oG2CpHGJq3iNr3yLrXqIqniEqXaCpnaApnWApneApXmAo3mCon19m3l3kXRwh21oe2VZa1VOW0lESDk+QDM5OS0yMy0yMy0zNC4zNC40NS80NS81NC81NC83NjE3NjE6NzI6NzI6NzI5NjE6NTE5NDA6Mi86Mi85MS44MC01MC01MC0zLy4zLy4zLzAzLzAxLzAxLzIwLjEuLjAtLS8tKy4wKTAyKS4wKi4wKi4wKi4wKiwvKywvKyoxLSwyLi0wLyswLysxMCsxMCswMSsxMi0xMS8xMTExLzAxMC4xMC4yLiszLiszLio5MS45Miw7Mis8Myw/NSxANi1BNy5BNy5COC9BOC9COTBBOC9BODFANzA+NTA+NTA9Mi49Mi48MS88MS88MS88MS89MjA9Mi5CMy5FMi5NLy9SKzBXKDBVJi5QJy9JKS5DLy48MSs7Mis/MilIMSlTMCpfLipkLylpOS9rOy91PDN9PDaGPDmJOzmKOzeIOjaJPjmGPzmGQjmFQjmFQjmGQjmHQTeKQjaIQDGIQS+IQS+HQC6HPi2IPCyJPCyJOiuLOSuIOSqHOiqDOil/PCl7PSh4Pih4PiqCPjN7Ny56Ny56PDF2Oy13PS98QTN7QDKAQjeDRTqGSD2ISUCHS0GHTUKIT0aKUUiOU0uQXFGOaFuLdGKFf2eAi21+lnZ/nnyDp4OEqYeIqomLqoqLpoeHoIKDmn59mHlxlW9qk2lmj2dmjGVni2dkhmVffl9cdltQaFJLXktCUEE4RDYyOi8uNCosLygrKiUyJig1JSg0JSgyJigxJiovKSsvKywuLC0rKy0qKy0qKy0oLC0oLC8nLC8nLC8qKy0vKywxKyswKygvLCU5OS1QVENpcVl2g2V7jGh5j2h8lWt/nG59nm95nmt7oG2ApXKCp3SApXF9o3B9o3B+pHN+pXZ+pXh9pHh8oXh9n3p6mXd1kHFuh2plfGJYbFNOW0dERjk/PTE6OCw0NS80NS80NS81NjA1NjA2NzE3NjE3NjE4NzI5ODM7ODM8OTQ8OTQ8OTQ8NzM8NzM8NDE8NDE7MzA7MzA4MzA3Mi82MS42MS41MTA2MjE2MjEzMTIzMTIxLzAwLi8xLS4yLDA0Ky40Ky40Ky4yLC4yLCwyLCwyLCwzLy4zLywzLyw0MC0yMSwyMSwzMi0zMi4yMjAyMjAzMjAzMjA1MTA1MS42MS42MS07MzA8NS8+NS4/Ni1BNy5COC9FOC9DOS9FOzJFOzJFOzJEOjFDOTBCOC9BNjBANS8+My8+My89Mi49Mi49MjA9MjA+MzE+MzFANTFGNDJNMDJULDRYKTNXKDJSKTFLLDFCMzA6Ni03Ny06NipCNClNMilYLyleLylmOjFqOzNzPDd6PTqCPDqGPDuHOzuGOjqCOzeBPjiBQDqCQzyDQzqDQzqFQDmEQDeCQzKCQzGDQjCEPy+HPi+IPC6JOi2LOS2KOCyHOCuFOSuCOit+PSt4Pip2Pyp4PSuBOS18LyeCOC+EPjR3NCt0Nit9QTZ9Qzd/RTqARzyCST6ES0KES0KGTUSIUkiFV0p9YE57aVGAcFmBdV2CfGKDhmmGk3WInXyEon6CpoKCqoWCrIaBqYR/pYB7nn16mXd6knB7j2x5jGx3jGt1jW1zim1thGdrf2RgclpbaFRSW0pJTT5AQDQ7Nyw3MCY1KiQ2KCc1JyczJycxJyYuKCgsKykrKykrLSooLCsoLCsqLCsqLCsrKy0sKi0sKi0uKissIyQzKyg1MCo4NSxCQzVVWkZmcFdufV50iGVximJ1kGV4mGl2mmpzmWh0mml3n2t6om54oGx3n214oG57onN7pXV7pXd8o3d5nnV6nHd3lnRzjm9thmhke19Xa1BOW0dDQzc+OjE5NSw1NjA2NzE2NzE2NzE3ODI3ODI4NzI5ODM5ODM6OTQ9OjU+OzY+OzY+OzY+OTU+OTU/NzQ/NzQ+NjM+NjM7NjM6NTI5NDE5NDE4NDE5NTQ5NTQ4NDM4NDM0MzE1MTI0MC82LTA2LS42LTA2LS40Li40Li40Li40Lyw0MC00MC00MC01MS4zMi0zMi00My40My40My80NDI1NDI1NDA4NDE4NTA6NTE6NS8+NzE+Ny9ANy5BOC9DOTBEOjBHOjFIOzJHPTRHPTRGPDNGPDNFOzJDOTBCNzFBNjBANTFANTE/NDA/NDA/NDI/NDJANTM/NTNANzJENjNJMzVQMTZULzZTLjVQMDVKMjJDNTI9OTA8Oi49OS1DNylJNihRMylXMildMitkMyxsNTB2NjR9NzeCODeDNzeDNzd+NzV9OjR9PDZ+PziAPzmDQDiGPzuFQTiBQzSAQzGBQjGDQDCFPS+HOy6IOi6HOS2FOSyDOSyCOix/PCx8PSx5Pix4Pyx8PSyHNCyLMiyhTEWoWFGLQTh8OTCCRjuASz15SDp6Sjx7TUB8TkF9T0KBUUWHVUqCX0xya09wdFN8dViHd12PeWKYf2mfi3OglHqXlnqRnHyLo3+IqIOFp4KApH57n3l+mXaDkXCFjm+EjXCBjnB/j3J7jnB3jG10iGxqfmNmdlxfaFNWW0dPTT5HQTNBNys9MCc7LCc5Kyg2KykzKygvLCcsLScrLSgpLigpLigrLSgtLCovKyozKSo0KCo3Jyo3JygzKCQ8MyxFPjRJRzpRUkBeY01ncVZqeVpvg15rhFxsiV1wkWJxlWVvlWRvl2VymmZ1n21ynGpxm2l0nm54onJ6pHZ5onZ5n3Z2mnR3mXZ1lHJvjWtrhGZjfF5VbE9OXEVDQzdAOTE7NCw3ODI3ODI3ODI3ODI4OTM4OTM6OTQ6OTQ6OTQ7OjU+OzY/PDdAPThAPThAOzdAOzdCOjdCOjdBOTZAODU9ODQ9ODQ8NzM8NzM8NzM8NzQ8NzQ8NzQ7NjM5NTI5MzM4MzA4LzA5Ly44LzA4MC44MC44MC42MS42MS02MS02MS01Mi02My42My42My43NC81NC81NDA2NTE4NDE5NTI7NzQ8OTQ9ODRAOTNANzBBOC9DOTBEOjBHOjFIPDBJPTFKPjJKPTRKPTRKPTRJPDNGPDNEOjFDOTBCOC9BODFBODFANzI/NjE/NjFANzJBODNBODM/NzRAODVCODZFOjhHOTZJOjdIOTZIOTRFODBFOC9FOS1FOStHOSxJOSpLOStRNypaLyZkLyduMy16NjODOTiJOzmLOzqLPTuLQT6HQDqDPjd/PDR/OjOCPDSIPTiJQDmDQTWBQjOCQDKDPzKDPTGEPDCBOy+APC9/PS99Pi98Pi98Pi98Pi99Pi9/PS+GOS+QMSujOzjOa2bbfnmtWlSNRD2ITEF/TkB0SjxyTj5wUT9xUkB0U0J7V0eCW0p+ZU9tc09welWEeVuYdV+pb2O2bWa+cWu9d2+7gnexjHqnl36enoKWoYGNoX6FnXmFmXaIkXKLkHKIkXKFk3KBlHR9lXN4k3B0knBti2lphGVkeF1da1JWXkdNUDtFRDBCOytAMys/Miw7MCw3MCozMCkwMCguLykuLykwMSszMCs3LSw7Kyw/KSxEJyxGJSxEJytGNS1MQzRWUEBbWEVgYkxnbVNqeFdqe1dsgltngldnhlpsjV5vk2NulGFulmJymmZznWtwmmpvmWlynG52n3N5onh4nnd2mnZzl3N1l3ZzknJui2xrhGRie1tVbU1OXENHSDpFPDVANzA3ODI3ODI4OTM4OTM4OTM5OjQ6OTQ6OTQ7OjU8OzY/PDdAPThAPThAPThBPDhBPDhEPDlDOzhDOzhCOjc/OjY+OTU+OTU9ODQ+OTU+OTU+OTU+OTU9ODU8NzM6NTI8NDE6MC86MC45MS85MS45MS85MS45MS43Mi42MS02MS02My42My42My43NC83NC83NC81NDA2NTE5NTI7ODM8OTQ/OjRCOzVDPDRBOC9COi9EOjBFOy9IPDBJPTFKPjJKPjJLPjVLPjVLPjVKPTRGPDNFOzJDOTBCOC9COTJCOTJBODNBODNBODNBODNCOTRBOjRAODVBOTZCOzVEPTdGPThHPDZLPDVOOzRNNi5PNy1RNitRNitSOCtQOStQOSlXNyhmNipyNix+OzOJQDmVRECbSESfSkefTEagUUqZTESORDuGPDGENy2GOC6MOTGNPTaIPjWHPjeGPTaFPDWFPDWBPTR9PTN6PjN4QDN2QTN4QDN6PjN/PDODOjOJODSSNDKYKCazPTvte3r+lZLFaGOWR0CJS0B4SDpuTTxqUT1mVD5oVkBsV0J0W0V/YEyAaFB7clGFdlWedFy0bF7JX1/TVlzZUVvXVFzkb3XZenjMhn7Aj4C1lYCrlX2jknifj3acinKcinSZjXWVj3WRkXWLkXWGkXOCkXJ8i255hmp1e2FucFpnYk5fVEJVRTVSPC9PNC1OMi5JMCxELyo+Lyg5LyY3Lic2Lyc5Mio7MCo+LyxCLSxHKixJKSxMJy5JKSpUQjZZUTxkXkhnZUxpbE9udVZte1hsflhuhVtog1Znh1htj11wlWJxlmJymWR2nGl0m2xxmGtvlmpymW13nXZ6nnh4mnl0lnV1lHV1lHVzkHJvimtqg2Vie1tVbU1NXUJNTkBLQjtGPTY5OjQ5OjQ5OjQ5OjQ6OzU7PDY9PDc9PDc9PDc9PDdAPThAPThBPjlCPzpEPztEPztFQDxFQDxFQDxEPztEPzlDPjhFPjhFPjhCOzVCOzVCOzVCOzVCOjdCOzVCOjdBOjRBNzVBODNBNzVANzJANjQ+NzE+NzE+NzE8NzE8NzE7NjA6NS85NjE4NTA3NC83NC85NjE5NjE5NjE6NzI8NzM+OTNBOjJCOzFDOjFEPDFGPDJKPjJMQDRMQDJOQDNOQDVOQDdOQDdMPzZLPjVKPTRIOzJGPDNFOzJCOTBCOTBAOTE/ODA/ODI/ODJAOTNAOTM8NS9NRD9NQDpLOjNUPzpTNzNPMCthPDZcMy1gNS5gNCteLydeLyVmNixtPTFxPTCKSj6PRzuXST+fS0GfRj6bPjebPjeeRDumTkSlUUapV0urWUulT0KZQTWXOzCbPjaTOTiSOjmMNjWGNTKGODSEPzh8QDZyPjFyQjRvQTJxPTB3OzGCNzKMNDOSLTGaJyzISEnoYmHFRUTNV1XheXarVk+GRjyEVkZuUz5pW0FpYkZqZUhqYEVuXkR8ZEyNalSSYky0bF3RbmjbWF3gO0znLUXyK0j1MEz2QFnsSVzkW2XlbnLie3zbgH3bg3/YiYLDfne9gXe6hHi2hniyiHitiXmoi3mljHiagG+Zfm2YeGmTb2ONYlmEVU17SUJ4QT51OjxpLjJkMDRiMTRQJidHJSNMMC1NNTFHNC5FMixEMS1GMS5GLixHKypLLS9RNTFZSDZgVjtmX0NnZEVrb051fFp1hF1vgVlsg1dsh1pwjV9ykmF0lGN1l2R3mWZ4mmhxlWlzmG90lnFylG91lHR5mHh7mHx5lnp4lXlzjXJth2xrhGdpgmRhelpUbU1PX0ROT0FTSkFRSD85OjQ5OjQ5OjQ5OjQ6OzU7PDY+PTg/Pjk+PTg+PThBPjlBPjlCPzpDQDtEPztEPztGQT1GQT1FQDxFQDxEPzlEPzlFPjhFPjhFPjhFPjhFPjhEPTVEPTdDPDREOzRDOjNCOTJCOTJCOTJCOTJCOTRBODNAOTNAOTM+NzE8NzE8NzE7NjA5NjE4NTA4NTA3NC85NjE5NjE5NjE6NzA8NzE+OjFBOjBCPDBDOzBFOy9JPTFKPjBMQDJMQDJOQDNOQDNOQDVOQDdNPzZLPjVJPDNIOzJFOzJFOzJDOjFCOTBBOjJAOTFAOTNAOTNBOjRCOTRFOjRKNzFMLixWLi5qNjh1OTt7OzuFRUOERUCFSUGFSUGHSD+OSUKZTkihUEyiT0eTRDeUQjSaQjagRDmgPjOcNy2cNy2fPTKjQzWcQDGZQDCgRDWkRzanRjauSDq2TkW0TE2vSEylQESZOTuROTiNPjqDQDh4PjNvPjB6STuFTEGEPziFLSySKS6zOUTSTFfcS07fTU3KPj3AQD/QYFyzWVGEQDWDVUV5YUllW0BfXkBpaElzbE92Z0p+ZEuWY068ZFjWX1vmVVrrQU7yLEX/JkX/Jkj/J0n/Lk75M07yPFLwSVvrUF7lUV3jU13gWGLbYmvVZmzUaW/SbXHPcXLNdXTJeHfHeXfKfHzJeXrIdnjHcXTGa3LFZm7FYWvDX2vFYG6zU2GmTFiaR1GORUyGRUltNjlIHBtUMS1NMCpJMixKNi9MOTJLOjJPPjdVRThbTzdjWjtoYkJpZkVuck97g156iWJ0hl5yiV9wiV9wi2ByjWB1kmR3lGR3lGR3lGZzkWt4lnR8l3h7lXh/l32EnISFnYeDm4WBmYN6knxyiHFthGpogWRgeVtUbU1QYEVSU0NWUERVT0M4OTM4OTM4OTM5OjQ7PDY9Pjg/PjlAPzpAPzpAPzpDQDtDQDtDQDtDQDtFQDxFQDxGQTtGQTtGQTtGQTtFQDpFQDpHQDhHQDhKQTpJQDlJQDlIPzZGPTZFPDNGPDNFOzJEOjFEOjFEOjFEOjFEOzREOzREOzRDPDQ/ODA/ODA8NzE7NjA7NjA6NS85NC45NC45Ni85Ni86NS87Ny4+Ny9AOS9DOjFDOzBFOzFGPDBJPTFLPzFNPzJOQTFQQDFQQDNQPzVNPzRMPjNLPTJJPDNIOzJFOzFFOzFEOzJDOjFCOzFBOjA/OzJAPDNBPTREOzRWRT5VNC9qMjWOQUetTFfDVWLLXWbGX2ObQj6XST+WTEGcTkSsUUy+VVLMT1PETE2lQDadQjCgQDClPzGlOy6jNyukOCunPS+rRTahPS2YNySdOielPi2sQTGyQzK3RTunMDKvOkK5REy9TFK6TVKtS0yWQT6CNzF7OC92Nix4MiqEMS2cMze5PUfVR1foTVviRknPNTPQOjm9MzHITkvGY12VS0CMW0p9Y0xrYERnZEV0b09/cFOBZ0yNaE6waFnkYmL1UVr0RFH2N0n+Mkv/Mk7/L03/K0n/Mk/8MEv3MUr1NU7zNU7wMkvzM0z0OFHyQFrvQ1vuRl/tSWHrTmPqUWboVGroVmvlU2rkUmnkUGrkTmnnTmzrUG/yU3PzVnX+Z4bxYH3lW3XVVWzOWm3JZHKoUl1yLTJeJidZMCxXOjRRPzVDOy46OCk+QjNMTjlWTzNhVjZlXz9oZURxdVR/hmWAi2l4iGR4jGl1i2V0imRyi2N2jGV5j2h6kGl6kGqAlXaEm3+KnoWNoIqSo5CXqJaYqZmWppmRopKHmIZ6jXlwg21of2NfdllUbU1QY0dUV0RZVkdZVkc3ODI3ODI4OTM5OjQ7PDY9PjhAPzpBQDtCQTxCQTxEQTxEQTxEQTxEQTxFQDxFQDxHQjxHQjxHQjxHQjxGQTtGQTtIQTlIQTlMQzxLQjlKQThJQDdIPjVHPTNGPDJFOzFEOjBEOjBFOzFFOzJEOzJFPDNFPDVFPDVAOTE/ODA9ODI8NzE7NjA7NjA6NS86NS86NzA6NzA7Ny47Ny4/OC5AOS9DOzBEPC9GPDBHPi9KPjBLPy9NQDBOQTFQQDFPPzBPPzJPPjRMPjNLPTJKPDNIOzJFOzFEOjBEOzJEOzJCOzFAPDFAPDNBPTRCPjVHPTRTODFbKiaKO0C+VGDZVGXmVGfjVWPLSk+gNDGXOzCSPzGZQTOuRj3FSUfVQkjOP0OxQjenRjWpQjOsQDOvPzOwPjOzQjS1RTeyRzepQjGjPCmkOyipOyqrOiquNiatMyi2OTe6OT29Nz68Nzy/PELGSkzEVFO+WFOZPzeMNCqJLCWdNjHDSEvcT1fjQlLbM0DeOjnNLirTODTINzTGRUDIXVWpV0uRWEd3V0B2ZUl+cFOAcVKEZkyQY0ypb1vVdWnuU1f8RFD3O0r5Okr+PU7/QFH/O0/5NEj/P1P/OVD7NEv9M0v9MUr/L0n/ME7/NlP/M1T9NFb9Nlf6N1f5Olv4PVz3PmD1QGH4Q2b3QWf1P2X1P2f4P2j8Q23/RXL/SXP/T3f/UXX+VXbyU3HnVHDlYXjWZna3V2J+MTdqMC9ZMitQOCxHPi8+QS47RC8/Ry9RTC9fVDhnYENva058fGCIjnKHkXZ+i3F8jHF8jnR8j3N6jXF6im19jG+DknWIlnyVo4ycqZWjrp2msaGstKmxuLCwt7Crta2hq6KVoZWDkYJzhHFofGNddFhTbE5RZEhSWkNXWURZWkg2NzE2NzE3ODI4OTM6OzU8PTc/PjlAPzpCQTxCQTxEQTxEQTxFQj1FQj1GQT1GQT1GQzxHRD1IQz1IQz1IRDtIRDtKQztKQztMQzpLQjlLQThKQDZLPjVJPTFIPDBIPDBFOy9FOy9FOy9FOzFFOzFFOzFEOzJEOzJBOjJAOTFAOTE/ODA8NzE7NjA7NjA6NS87Ny47Ny47Ny48OC8/OC5BOjBDOzBEPC9HPTFHPi9LPzFNQDBOQTFOQTBQQDBPPzBPPzJPPjROPTNLPTJJOzBHOy9EOjBEOjBEPDFEPDFCOzFAPDFBPTJBPzNCPzZLPTRcNTB3MzKtTFPbXWnmTV/lP1PXNkW3JiuoMSudNyiTOyeXPCmsQDPDRD3UPj/NOzyxPzWoQjSqQDOtPjOyQDW4Qzm8Rz27ST6sPi+qPy+oPSumOymqOSmwOiy3Oy+8PDHKRkHPRULQPj/QNznWNzzeQkXiTE7eU1DEQz7HTETNVEzUU03ZS0rcQEPgNT7hMjfbNC7aNy7QMSvPOjS/ODSzQDm1W1CWVER7TjmCYkmGa1CFYUeSW0auZ1XLcmTnbWjqRUvyOkTqOUPnPETnQkjnRkvoR03qRk31S1TzQU/zOEn2NUj5Mkf+MEf/M03/OFL/OVb/OVj/Olj9Olr+O13/PV//P2T/QWX/Q2n+RGv+RG38Q238Q2/8Q2/9Q3L+Q3D/R3D/QGj/R23/TXDySWrpT2vlW3LZY3O9WWWOP0RgJiRRKyJWQDNWTz1JTDdARC1SSjNlWUN2a1eAe2eOjXmZnIuVnIyIk4OCjoCKloiPm42MmIqHkoKKk4KXno6kqJmytqi4vK6/wbbAwbnCw77FxcPDw8O+vr6wtbGiqaKNl4x5h3Zpe2Vcc1lUbU9SZkpRW0JVWkNXXEY1NjA2NzE2NzE3ODI4OTM6OzU9PDc+PThAPzpAPzpDQDtEQTxFQj1FQj1HQj5HQj5HRD1HRD1IQz1JRD5JRTxJRTxMRT1MRTtMQzpMRDlMQjhLQTVMQDRLPzNKPjJKPjJHPTFHPTFGPDBGPDBFOzFFOzFEOzJDOjFBOjJBOjJAOTFAOTE9ODI8NzE8NzE7NjA7Ny47Ny48OC88OC1AOS9BOy9EPC9FPTBIPzBKPjBMPy9NQDBOQTBOQTBPPy9PPy9PPzJOPTNNPDJMOzFJOzBHOy9GOTBDOS9DOzBCPDBCOzFAPDFAPjJBPzNCPzZOOzRuOTWXRkXEWV/bV2LfQ1HeOEbUMzu9KyutMSehOCWYOiGXOSCkOya2Pi7DOjK+NzGnNyyiOi2lOS+nNyyvOjG4QTm6RTy3RTquPjKtPzCnPCykNieqNim2PjDDRDvKRz2+OC3OQDbiRUDsQkL0PUHzOT7rMjfeLjDbNzXiR0LoU0zlTkfcPTnZMTDjLzLqNjfZMSjePC/NLCLQNzG+MyywNy/JZ1y4bF6OV0OHWkODVj+JUj2pXEzObGHhZ2LlVVXwRUvxPUbkO0DZPT7SQT7SR0TdT03rV1ftTlPvRE3yOUf2NUb4MUb4LkT7MUf+N07+OFP9OFT+OVf/Olj/O1z/PmH/QWX/Q2v/PGb9PGj9Pmr9P236Pm74Pm/0PW32Omr/SHL/O2H/P2T/SnD/S273Tm3vVW/jWXDocoLEYGqYSU50OjhcNi1QOStQQzJVTTpeUUFyZVWIfG6VjYKfnZGmp5+hpp+WnJiVnpuep6Smr6ymrKqip6OmqKO1tLDCwb3MycLRzsfV0MzV0M3UztDVz9PRy8/Lxsq/vcCwsq+Yn5iAjH5tfmthdVxYb1NWak5TYEZWYEVYYEg1NjA1NjA1NjA2NzE3ODI4OTM6OTQ7OjU+PTg+PThBPjlDQDtEQTxGQz5IQz9IQz9IRT5IRT5JRD5KRT9KRj1KRj1NRjxNRjxNRDtNRTpNQzlNQzdOQjZOQjROQDNNQTNKQTJKQTJJQDFIPzBHPTFGPDBEPDFEPDFDOjFDOjFBOjJAOTE/ODI/ODI8NzE8NzE8OC88OC08OC09OS5AOS9BOy9EPC9FPTBIPzBLPzFNQDBOQTFQQDBQQDBPQC1PPy9PPTFPPTFNPDJMOzFJOzBGOi5GOTBDOS9COi9BOy9BOjA/OzA/PTFAPjJAQDRROjJyMS+pS0zBUli7PkS9MDbCMDPBLy+6MSmqMiKjOSOdPiKZOx+bPCChPSOlOyWkNiWeNimgOC2jNi+lNCyuOTK3QDq4QzyyQDaxQjetQTSoPC+mOCuvOjC8QzjERT7FQDfDPi3PPi3ZNSvhKibtIiX6JSv/KzL/LjTtKSrnLivhMyzfNCzgMyzkMy3pMC3nMivaMiXWNibQMibPNyzFNi69PjfIYFXSf3GmZVOPVkKKTTqjV0nIZlvfZF/nUlToQ0n1Rk3uQUXfPz/UQDzJQDjGPznRRkHjTUzvSlD0QEv5OUj9N0j8NUj4M0X3Nkf6O037OVH8N1L7NlL9NlX/Nlj/OV3/O2H/PGf/Pmv/P23/QHH/QnT/QnX+QnX8QnT5QnD/Rm36QWH+RWX/Smz+S2v/VnT/X3r1XXbyan7mcH7TbXivXWGDQ0FnNi9oQjdzVUp5ZVyMfXajlpCto6Gyrqu2traytrmqr7Owt722vcW+wcrCwsrEw8vJxs3Vztbd19vi2tjn3dvp3d3m2tzl2N/k1+Dg1N7Zz9jKxcu6urqip6OIkod0gnFleGJcc1lbb1Nbak1caUtdZ0w1NjE1NjE1NjE1NjA1NjE2NzE5ODM5ODM8OzY9PDdAPThCPzpEQTxGQzxHRD9IRT5IRT5IRT5IRTxKRj1LRzxLRztLRztOSDpNRztNRztORjtNRDtNRDtNRD1OQz9OQz1NQzdNRDVMQzRKQTJIPjJHPTFFPTJEOzJDOjFDOjNBOjJBOjRAOTM/NzQ8NzM8NzE+Ny8+Ny88OC89OTA+OjFCOzNDPDJEPTNIQDVJPzNMQDJNQTFOQTFQQDBPQC1PQC1MPy9MPjFNPDJMOzFKOTFJODFFODBDOTBAOS8+Oi87Oy88PDA9PjA+PzFBPzBTOC2HPDfEXFvKWlmuODarLiqyMSuvLyatMiOsOSasQiqqRiymRCmjQSajQSajPSSfOSOhOiujOzCmOjCmNy6tPDS2Qzy3RTuxQTarPTCpPTCpOy6tPTG7RTnHTULFRTy8OCy/NiTOOyndOy7mMyzxKyr5KCv9Jiv7JSf4Kir1LivvMizrNCzoMyrlMynkMijgMyXgOirRMh/cPzDPNyrIOC3CPzWzQTbRbGC/Z1mlUkKoTkPLY1rnaGLmUlLqQUb0Q0vrPkThOz3WPDzNQDnBPjS2OCy5Ni7EOTTiSEjpQEXwOkb3O0n6Okn4OEf3O0n7P07+QVX/P1b+PFT+OVT/OFX/OVr/Ol7/O2P/Pmn/P23/Pm//PnD+P3L6QHL4QHT3QXH3Q2r/TW3/U3P3SmjsQWH9VHP/Z4X/ZYL3XXfvX3joZ3vccH/GcXinZ2eNXlh7WlGXfneqmZK+sK3EvLrGwsPIx8zHx8/Dw8/LytjNydjRytrXzt/f1OTm2+nq4Ovt4+vv5eby6Ob06Ojw5Obu4ejt4Onq3efk2OLRytHBv8Krq6mRlo96hnhsemlidV9gclpjcVdjcFRjbVQyMS8zMjA1NDI2NTE4NzU5ODQ5ODQ5ODQ7OjU8OzY9PTU/PzdBQTlDQzlFRT1FRT1ISEBISD5ISDxKSDtLSjhMSzdNTDhPTDlOSzpKRjpIRTxKRkNOSU1OSVBJQ09FPkVORT5MQzRKQDRLQTVNQzlMQjhGPTRCOTBFPDVDOjVAOTNAODVAODVAODY8NzQ8NDJDOTdCOTRBOTY+OTU/Ojc+Ojc/OzhAPDlCPzpEQDdHQDZKQDRMQDBPQC1PQCtMPyxHQC5HQDBJOzBLODFNNTNMNzZKODhGOzlDQDs2OTA0PC85RDQ6QS82OSQ/PShiQzG8al65SkGmNyylNSmnNyulNSelNyaoPSujOCSlPCaqQCqtQCusPSmtOieuNiWrNiWkNiehNymjOSumPC6qQDKsQjSsQjKsQTGpPi6rPS6tPCyzPS++RDfFRzvBPzK6MibHOSvMOCrQOCvWOC3cOC7iNS7pMy/uMS3yLy30Li3zMCzxMSzqNSzkOCzdOinbOijcOSbUMx/QMyLPOCfGNye+NijCQjXPU0nITUXQVEzhW1juXFzwUFLtPkPyOT/3P0fqQUbfQ0TWQkLIPzm7PDOxOy+wPC+yPDDKS0LUS0PcRkXhPj/rPEH3P0f9P0n5O0f+RFH8Q1H+RFL/RFX9QFb8PFX/PFr/QmT/Rmv/QWr6O2f1Omf3PW75Q3T9SHv/S3v/TXn/TXT4UHPwT3DnTWnqTWr8WXj/Z4j/X4P1R2z3VnjoX3vDXm69eoGHYV6PeHCnkYS7p5zRxLvd1tDd3Nrc2+De3Ofi2+vm1+zr2O7y2PH23fP34vP35/T16/T07vL59PH59PD58e/27e7z6Ozu4+np3uTm3eLW0NTNycq7urijpaCLkIl5g3hyfW9we2t9hnN4gWx2fWswLi8xLzAzMjA1NDI2NTM4NzM4NzM5ODQ7OjU7OjU9PTU/PzdBQTdDQzlERDpFRTtISEBISD5ISDxKSDlLSjZMSzZNTDdOTThMSzlLST1LSkVQUFJXVWBZWGpWVGpTT2BRSEtNRD9IPzpGPThHPjlIPzpGPThCOzVEOjhBOTY/NzQ/NzRAODVAODU9ODU8NzM9MzE9MzE9NTI9ODU9OTY+Ojk+PTs+PTlCPzpEPzlHQDZKQDRNQDBPQC1QPytMQCpCPyxCPy5GPDBIOjFKNjVJNTZGMzVANjVBPTo6PTY7PjVAQDRFPC1KOSleQjSATD6uUUKrOy2gMiOhNiajOieeNySeOSWjPiqhOyWnPCiuPyyzQC62PSy3OSq5Nym2OCqqOSmlOiqlOiqmPCypPy+rQTGrQi+rQC6uPy6rOiqyPSzARjfGSDrBPzK8OCvANinLNyvPNyzQOS7ROy3UPC/YOi7gOC/nNC3uMS30Li31LyzyMSzqMyvhNyrXOifVOibeOyjZNiPVOCXUPSzMOyrBNSbEOi/PRjzRRj/aSUbpT0/zUFH0R0vxPEH1OkH4Q0jlQkXbRUTSQkHFPji3OzGuOi2qPC2rPS62RTXGTD/UTkXcR0PkQEHvP0L7QEn+QEr5RE33Q0z6RFD/RlT+Q1T6P1T8Plj/QmH/R2n/Q2n8P2n5QGr5QnD8Rnb+Snr/S3z/Snr/SHT1S3DxUXP1XHr5X3v6V3b8TnH9RWv6RGzvRWraS2nIXnKxbnVrTEmQfnSwlonMsqXk08ns49zr5+bq6e7q5/Lt4vP24/n74fr/4v3/5///7P//8f3/9v7/+fv++vf9+vX89/T69fL47/L06+7x6O3v5uvm3eDc1tjKxsW0s7GeoJuOk4yJj4WHj4KPlYeJkICGjH4vLiwwLy0xMC4yMS80My82NTE3NjI3NjE6OTQ6OTQ8PDQ+PjZAQDZCQjhDQzlERDpJRj1KSDxKSDtMSTpNSjdOSzhPTDlPTDlLSTpOS0JUUlNfXmZpaHhtbYVsa4praINgWWlZUVxPR1JIQEtIPkdHPUVFPEFBOz1EOzw/Ojc9ODU8NzM9ODI+OTM+OjE+OjE5NC46NS87NjA8OTI+OzQ/PDU/PDVAPDNFPjRHPzRJPzNMQDJPPzBQPy9QPy1MPyw8OyY6PSg/PCtBOy1CNzFBNjI+NDI7MzA9ODRCOzVIOTROMi5ZLClsLy6IPD6iR0ajOzCiMiSfMSKkOSmlPCmfOCWeNySiOyikOyarPiqxQS22QS+5Pi68PS6+Oi2+PC+yPC6sPC6qOiypOSurPCutPi2tPi2tPCyyPy2wOCi5Pi/LSz7LRzq8Niq6MibJOS7QNizUNivUOCzWOi7YOi/dOS/jNi/pNC3wMC30Liv0LivwMCvnMifdNibUNyTSNyPdOCXcNSPaOSfaPi/TPS7INinFOSzLQTfJPDXOPznZRUHlS0nqSkrpQ0PtQELrQ0PeQ0HVRD/NQj3CPTS2Oi6uOCqrOiqsOyusOCnARDjVTkjeSkjiP0LqPUH3Qkv/SFL0QEn0QEn5Q0/9R1T+RVX6QFX7P1j+QV//RWf/Q2n/Q2v/RnD/SXf/S3v/THz/Snr/Rnj/SHf/S3T7T3X/Wnz/YYD9VXbxQ2T7SWv/VHbcP1zNSWDYe4a4fHxhQzuPe3CujoHVs6fz29H77OX68vD59/r39P307Pv66///6v//7P//7v//8///9///+////fz//vv//fn/+vj/+Pb/9Pj98vb78PT58PPw5+rl3+HTz86+vbutrqmipZ6do5mdo5ejq56eppebo5YvLiwvLiwwLy0xMCwyMS00My81NC82NTA5ODM5ODM7OzM9PTU/PzVBQTdCQjhDQzlJRj1KRjtMSTpNSjlQSzhPTDlRTDlPTD1MSj5RUExeXWJtbHp6epKBgqGAgqiAgKZ7dZdya4plX3tZU21UTGRNRVpHQFBCPEhEP0ZAOz88ODc7NjM8NzE9OTA9OTA7OC86NzA5OTE7OzM+OzI/PTFAPDE/Oy9BOy1GPy9IPzBLPzFNQDBPPzBPPy9QPjBMPy9APSo/PixAPS4/Oy8/OzI+OTM9OjU6OTQ8OTRFOjZNNTFWLStqKS2GMTieOEOsPUOnOC+lNyilOiqqPy+oPyygOSahOCWkOyalOiarPCm0Py25QC++PzDBPTDFPTHEPjK9PzO2PTKyOS6uOCqvOSuwOiyyOiyzOSq2Oyy6PC7EQjXLRTnIPjO/MijAMijNOS/WNSvZNSvaNi3bNy3eNy7iNy3nNC3sMSrzMCz1Lyz0LivvMCjkMibbNCTSNSLQNSHXMh/aMB/aNCbcPC7WPS/ROi/NPTLSRDrENS3FNjDKOzXZRUHjTkrlS0neQz/WPTjTQDnOQTjIPzW/PTC1OS2xOSuvOSuxOy2sNCa9PzPRSELZSEXfQULmQET0R039TlXwP0fwP0f2Qk3+SFX+SFf8Qlf6QFj8QV7/QWP/Q2b/Rm3/SXL/TXn/T3z/THv/SXn/RHb/Tn7/Un3+S3L4TW//VnX/VXX3TWrxR2TwTGfSPlbhZHT+n6fTj45kOTJsSkCleXDQpZz11Mv/6eP/9PL//f///P/58//87///7///8P//8v//9P//9///+/3//Pv//fr//Pj/+vj/+ff/9vf/9Pj/9Pj+8/f26+/s4+Ta1NTJxcK6ubSztKyxtKmwtqq2vrOwuK2stKkxMCwxMCwwLyswLysxMCwyMSw0My41NC83Ny84ODA6OjI7OzM+PjQ/PzVBQTdEQThJRTpMRjpOSDpQSjpSSzlSTTpTTDxSTEBPSkRWVFVmZHF3eI2Hh6mNkLmPk8OPkMaOi8CHg7Z7d6lwbZppZI1fW35VUG5OSmFLR1hGQ04/PUI8ODk5NTI5Ni84NSw4NS42NzE3ODM4OTE7OzE+PC9APSxCPSpDPClHPyxKPy1LQC5MQDBNQDBNPzJMQDRLPjVNQDdLPjVGPDNCOTI9ODI6OTQ2OzQ3PDU5PDU+OjFINC1ZMi14ODmUP0SmPkWpODyqOzCrPSyrQC6sQS+pQC2lPCmmOyerPiqnOCWuOyi2PSy8PS7BPC3FOy7KPDDKPTPFPza+PjO6Oi+3Nyy4OC24OCu6OCu6OCu7NyvHQTXNQzjGOS/BMSjGMynMOC7PNSvbNCvfMynhNC3iNizkNi3nNC3tMi3wLyr1Lyz2LyryLyntMSjjMybZNCHQNR/PNB7XMh/ZLx7YMiTYNinXOS3VOzHWPzbYRT3WRj7NQDfJPDXLQDnWS0TZTkfSRT7FOzHFPTHDPTHAPC+6Oyy3OSu0Oiu2PC25PzC1OS2/PDLJQDrSQz/bQkTjREjtSk/2T1btQEbtPkXyQkz7SVX/Sln9Rlj6Q1n7Q137QF/7QmT/RWz/SnP/Tnr/T3z/THn+SXb/Snf/VIH/VH39SnH5SW3/U3T/VnT4TmnrRF7kRl3qWGv/lqL/tbzznZ6OSEZrLimma2XNlo/zyMH/497/8fD//P3//f/89/7+9v//9v//+P//+P//+v///P///f///fz//Pn/+/j/+fj/+Pf/9vj/9ff/9Pj/9Pj98fPz6erk3NrW0c3NysPJyb/KysDKzcLJ0Mi+yL+4wrk2NTE1NC8zMi4yMSwxMCsyMSwzMi00My42Ni43Ny84ODA6OjI8PDI+PjRAQDZDQTVKRDhNRThPSDhSSztUSzpUTT1TSz5SS0FRTElaV15saXx/fp2Nj7iWmcyZntiant6ZmNqUkdSMismGhb+BfrV4dqdua5ZmZYdeW3hXVGlNS1lEQUo+PD87Ojg7NzY4NzU1NTc0NTc2NjQ4NzI8Oi4/PCtDPipGQCpHPypIQCtJQS5JQjBJQTRIQjZIQTlHQDpLPTxJOztDOTo9Nzc4NzUzODQvODMvOTE3PDU3NCtDMSddODB+Qz2WR0OePj+eNTKoPDCqPCuqPy2qPy2qPy2pPiqsPyuwPy2rOCWyOSi5Oiu/OS3DOSzIOi7NOjDPPDTLPjXGOzTCOTHBOC7BOC7COS/COC7DNizGOC7RQznRQTjDMCbDLCPQNy/WPDTTMirgMyzkMSrnMivoMyzqMy3tMivwLyrzLSr2Lyr2LyryLynsMSjhNCTaNSLRNiDQNR/YNyPZMyPWMyTVMybVNSnUOCzUPDHWPzbsWVHhUkrUSULMQzvLRj3NSkDIRTvAPjG8Oiq9Oyu8Oiq5Oim3OSq5Oyy8PjC/QTPBQTbCPTTGPTfPQT3XRUXdR0jkSU3sTVHoQkbqQEPwQkv5S1T+Tlv8Slr8Rlz8Rl/4QV/5QmH9RWn/SnD/Tnf/T3r/Tnj/THb/UXv/Unv+T3b9T3T/Vnn/XXv/U2/uRF76VGzuUWT3ZHT/kp7/i5X0g4nHYGSnTU21amfOj4rvvLj/3tn/7+7/+vr//P79+//9+v/++///+///+////P//+/3/+/v/+/j/+/j//Pn/+/r/+/r/+Pr/9vj/8/f98fP57e/y5ubn3dvf2NLb187d28/g3tLf4dbc49vP2NPFzsk9OjU7ODE4NTA2Myw0MSo0MSo1Mis2Myw3NC04NS46NzA7ODE+OzI/PDNBPjVDPzRLQzhNQzdQRzhTSjtXSztVTD1VSz9TSkNTSktdV2NvbYOCgqaSlMWboNqfpuqiqfGhpe+eoOuZm+WVmN2UldaQkcqJib2Cg7F6eaFycZFmY35aV2xQTlxJR1JGQ05DQUw/P0s9PUc7OkA7OTo9OjU/Oy9DPS1FQCxGQCpGQStFQi9FQzRDQzdCQztBQz5AQUNCPEZEPkxEQE5FRU9DSE5BSUw/SUo/SEVDSEFBPTJMOi5nRjeDT0GOSj2PPzSUOCulPi+pPiyrPSysPi2tQCyvQC2wPy2yPSuxOCe2OCm9OSrDOSzIOC3MOC7SOTHUOzXPOjTNOjPLODHLODHMOTLNOjLMNzDLNi/UPTbVPjXSOTHMMijONCrZPDPaPDPYNCvkMSrpMSnsMSruMSvwMCvyLyn0LSj2LCj4Lir2LyrxMCnqMijiNSfZNiXTNiPPNyLUOSXVOCXTNiXSNSbSNCjTNyvSOC7QNy/jTkfoWFDnWlPaUUnMRz7ERDm/QDe5Pi+5PCq5PCi5PCi5Oie4OSi6OyrAPjDDQTTJRDvGQDfJQDrRRkPVSUjWSEfYR0rfSUvmRkjoQkTtREv1TFP8UFz7T137TF37S2D2RF73RGH5Rmb9SWz/TnX/T3j/T3j/UHn3VXrzVXj0VHb8WXj/XXv/Wnf7UWvySWD9V2v2VWfqTV72Xm3iS1rmVGHlVGPXWGPBZWbIg37lq6f/1NH/6+n/8/T/+Pn//v/7/P/7/P/7/P/8+//8+v39+fr99/f89/T/+vf/+/j//Pv/+/r/+Pr/8/X97vH66+7w4eTp3d3k2dfi2dTm39Xr59vx7eHx8eXt8uzc5eLP2NVAPTY+OzQ6NzA3NC01Mis1Mis1Mis2Myw3NC04NS45Ni87ODE9OjE/PDNAPTRCPjNKQjdNQzdTRzlWSjxXSztYTD5XSz9USUNTSk1eWGZwbYiEg6uTlsucpOOkrPWnsP2rsP+mrPqhp/OgpO6fo+qdoeGZm9aVlsySksSJiLR6eJ9qaYtgXXxYVXBSUGhPTWVPS2RLR15GQlNAPUg/Oj4/OjZAPDFBPi9DQC9DQjBCQzNCRDc/RD0+REA8RUQ7Qko+Q1ZESGFNUmhWW25cYnJgZG9iYmplYGRmWFdhSkRsRz6EVEaVWEaTSjeRQC2ZPiuoQTCuQC+uQC+vQC2wQS60QS+yPSuxOCe1Nyi8OCvCOCvIOC3NNi3RNy/VODHYOzTSNzLRODPQNzLSOTPUOTTUOTTTODPTNi/eQTrVOC/RMyrWOC/cPjXePTXaOTHdNi7nMivrMCnvLyrxMCv0Lyn3LSn3LCj3LCj3LSn0LynwMSnqNCnhNSfaNybUNyTQOCPONyLPOCXPOCfPNibQNynSOSvRNyvPNSvMNSzjTkfzZFzrYFnVT0bEQTe6OzK1OS24Pim4Pie6PSe5OyW6OSa9OSrAPC/EPjLKRDvKQTnORT/VS0jUTUrOR0TNRUXWSEfjSUnmQ0TpRknyTVP4U1r5Ulz3T176T2H0SF71R2D4R2T7SWn/TnL/UXj/Unn/VHrwVXXvWnj5Xn39Xnz5VHL1TWf5T2n/WW7/W23/Y3TwTV74VWb0T2D8VWf1TF/kUl/AXl+7dnHXnJj6ycX/5eP/7e3/9PT///38///7///7///7///9/f39+/z++Pj9+PX/+PX/+fb/+vn/+vn/9vj88PL46ez05ubr3d3o2tnk2dXo3dfw6N358+X/+uz+/vL1+vbj7OvU3dxCPjVBPTRAPDM+OjE8OC86Ni04NCs4NCs2Mik2Mik3Miw4My07NjA+OTNBPDZFPjZJQDdNQzdSRjhVSTtXSjpYSztaTEFbTkhUSU1YUmBnZIF8fqeNksqXoOOgqfalsP+qs/+rsv+stP+ssvyqsfmqr/OorOypq+ifodqZmtKNjcGBf7F1cqFoZZJdWodYUn5YUXtZUXhWT3BOSWBDP00/OkA/OzpCPzg+PjRBQzZCRTo/RD08Qj46Q0I+Rkg/TFVFV29TZoRicY5pc450do2BeI2Eb4CBX22KW2OTWFqeV1WmVk2mTT+fQC6dOiWgOiSoPSmsPSquPyyxQC6zQC60Py22PSy5Oyy6Nie/NynENirLNy3RNy3WOC/aOTHaODPXODTYOTXZOjbYOTPYNjHYNjHaODPeOzTnRD3gPTbaNzDjQDf+W1L/bGP/XVTnPzblMyntMinxMir0Lyn0Kib1KCX4KCj4Kir3LSvzMCztMivjMSfaMCPUMSLUNCTTOijMOybKPCjNPCnPPCrSOizSOSvSOCzRNy3aQDjPODHcR0H0Y17lWFHLQjzGQTy3NCq3Oia2PCS5PCa6PCa9Oii/OivEPDDGPjLHPjbMQzvZUErfWFTUTkvDPzvAPzrPSETfSUjiR0XmSkvvUFTxUlfvTlbuTFnxTFz5Umb4T2b3Smb3Smj8TW7/UXX/Unb9Unb0V3buWHX1WHf7W3f/XHj/WnP/V27/Vmv/YnX9Vmf/XG3/W2zxRlj0RFj/UWXuVmXGZmeqaWXKj4vntrL40s//6un97+78+Pf5/fz5///5///6//78/v3//f7/+vr+9vT++fX/+/f/+fb/9vT/9vb/9fX26Ojm2Njj1dTe0M3h1tDx59789Of++Oj//On///P6//no8fDY4eBDPzZCPjNBPTQ/OzI9OTA7Ny46Ni05NSw3Myo3Myo3Miw4My06NS8+OTNBPDZEPTVIPzZMQjhPRTlUSDhWSThXSjpZS0BaTUdVSk5YUF9mYX95e6SKj8mUneKbpvWjrv6rtP+stf+utv+vt/+wt/+vtvyvtPivsvWpquuio+OYmNiMismAf7t1ca5qZqFkX5lgV45gVopdVH9WUHRNSWJGQ1RCQUlBQUM8PDpBQj1GRUFDRD9BP0BEQkVPTVJXVmRjaIZxdZp/faKIfZ+UfJygfJilcIqkYHWsWWm2VmG6UVW4SEawQDSsOymsPCauPiioOCSoNyWsOSeuOSixOSiyOSi1Nyi4Nii7MyXCNCjKNy3TOjLZPDPePTXfPDXfPDXhPjnfPDffPDfhPjnlQj3oQz3oQz3mQTvlQDrmQjnkQDfcOC/UMSjYNSzrSD//WlHxQDbuNizrLCTuKSP4LSn/Ly/+LC32KCj6MC71NC/vNjHnNi7eMynWMibUMiXPNibLOifIOyfKPCjNOijPOSrQNynRNSnRNSnUOjDPNS3UPTblUErlVFHbTEjNQj+3MSi8Oyi7PSa9PCe+Oye+OSjBOSvCOi7EOi/IPjTLQjrVTkjdWFHTUkzDRD2/QzvMSEPbTEjfSkblTUzrU1LtVFfrUFbpTlbsT1r3Vmb4VWj5U2v6Umz+UW//UnP/U3T/UnXyTW34VXT/XHz/X33/XHb/VW/7Umn7UmX8VWf3UmL/Wmr/WmrzTl74U2P+WWnfU162YF+XXle2gX3ZqaXuyMX94d756en9+PX6/Pn5///4///3//36/v3/////+/v/9vf9+PX++fX++fX+9vP/9/b/9fX26urq3Nvk1tPd0Mrf1czv5dv89eX/+ef//en//+/6//jo8e7b4d9GQjdFQTVDPzRBPTI/OzA9OS48OC07Nyw4NCs4NCs4My04My06NS89ODI/OjRBPTRGPzVKQjdORDhSRjZURzZXRzdXSTxYS0NXS0tYUF1iXnlzdZyFisKQmdyYpPCgq/qqs/6ttf6vt/+xuf+zuv+0u/+1uf+1uf+vsvmsrPSjo+uZl+COjdODgMd4dbxzbbNrYKRpXZtjWpFdV4VWUndOS2hFRFZAQEw4NTxBPEBLQUJMQEJRPkJbRktwV12CY3WXc5eke6euf6uye6O4dpzAcJPCY4PAU3DCRl7QS1zRSFLEPDy6NS64OSq1PCewPCWwOymwOyqyOim0Oyq3PCy7PC3APC3EPC7ENirLOC7TPDHZPzXfQTjhPjfhPTTfOjTdODTZNDDZNDDeOTPnQjzsRT/pQjzkPTXjPDTcNS3YNCvbNy3UMifMLCDWNirpRzr1Sz7yQDbvNC3wLSn2LCr7LS/8Ky74KizwKinsLyvpMy/jNS7cNCvZMinVMSfRMyfNNyjLOinNOijQOinSOyrTOirUOCvUOCzRNCvWPDTVOjXVPDflT07tWVfZRUXCMy/BPC2/PCjAOyrAOyrBOSvBOSvAOCzAOCzGPTPHQTbPSkHYVUvTU0rGRz7ARDrHRz7WS0TZSkTdTEnkU1DlU1TiUFPiTVPlTlfyWGT2Wmj9W3D+WnL9VW/7UW79UG7/UXL9R23/UHb/Wn3/W3v/VnL9U23+Vm3/XG37WGn4Wmj7YG72YGztXWfvZm7sZm3JXF+gXVd7T0aYbWbBmJTdurjw1NP04N//9fT5+ff5//35///3///6/v3//////f//+Pn8+PX8+fT8+fT9+PT/+fb/+Pb57uzv5OLl2tbb0Mrc0sju5Nj99uT/++j//ef//+36/fTq8Oze499JRTlIRDhGQjZFQTVCPjNBPTI/OzA+Oi86Ni06Ni05NC45NC46NS88NzE/OjRAOzVDPzZIQTdMRDdPRjVTRjVVRTVVSDhWSj5ZTkxYTldeWnFwcJaAhrqMltSVoemdqfWosPmpsfmts/2wt/+xt/+yuf+0uP+0uP+vsfyrrfilp/KfnuqXluKMi9eDgM19ecV1bbZwZ6pmYJ5fWpBZWIRRUXVHR2NCP1I9NURIOEJUPUNgQEVuQ0qAT1WXXmeqZ3i9a4/JbprLb5jJaY/IYIPJV3jGSWfEO1XGMkjZQVDgRE/ROz3HODLEPzC9QCyxOiStNSStNSWvNiWzNSa2Nyi9OSzDOy3IPC/TQDbXQDfaQDbdQDfePTXeOTPdNi7bNCzTLijSLSfTLijYMy3hOjTjPDThODHcNS3cNS3QLCLOKiDZNyziQjbcPjLRNSbLLh/pRjfzSTz9SD/8PDn0LCzxIyX1Jyn7LzLxLS7sMC/kMi7eMyzaMSrXMCrWLynTMCfTNyvSOSvWOi3YPC3aPi/bPzDcQDPcQDPSNirmTELlSkXONTDfR0bzWlzfSUvVQT/IPC/EOyvDOirDOirCOizCOizBOS2+OCzCPDHCPjLIRjnPT0LOUETGSDy/QzfBQzfOSD/RRj/VSkXbUEvdUk/ZTUzaS03dTFHrWGDzW2f8YXH/YXX7V2/1Tmj1TWf/TW3/T3X/Unn/VXf/VHH8VG39W3D/Y3X/aXr/Z3X6Ym/1YW3tZG7jZmzZaGrOZ2i1ZmGNXlRlRzx/XlWpiIHNq6nmyMjv2tn/8/P5+Pb5/fz4///3///7/////v///P//+fz++vf7+vX7+vX++/b//fn/+/j+9PL47enq39ne1Mvd08nt5tb/+Ob//uj//+b//+v4+u/q7+jj5t9OSDpNRzlMRjhKRDZIQjZGQDREPTNEPTM/ODA+Ny89NjA9NjA9NjA/ODJAODU/OjRDPjhFQThMRDlORTZSRTRSRTJWRjZWSDtaTUdWTVJbV2hsa4t+grGKk86UnuOcpu6nrfepr/mtsP2vs/2ws/+wtP6ws/+vs/2rrvuoq/ikp/Sgou+anOmTleKMi9mGhdGDf8l8drxta6xkZZ5fYZJZW4RSUXNOSGJXRllfQ1FtQkyCRlCYTFasVV68W2TKWmjZUnDiUnXfVHXZUGzSSmLNQlfHOErFLj/UOEXjQ03mR0zYPj7NPjjMRjrDSDa3QCy3Pi24PS26PC29Pi/DPzDKQjTQRDfVRTrZRTnaQjfbPjXZOzLZNi3ZNSzaMyvZMirVMCrXNC3bNjDdOTDfODDeNy/dNi7dNi3WLybaNizYOCzPMiPOMiPSOSnVPi3UOyvYPC3oRDj4SkH9REH5NTb1Ki32Ki33LzL3NjftNTXjNDHaMSzXMCrXLyzZMC3aMS7jODHkOTHjOzLiOzLhPTHfPTDcPzDaPjHRNyvvV0z4YVrTOzbROzrmUFHcRkjmUFHPPDTKOi/GOCzFOSzEOi3EPC7EPDDAOi6+Oi2+PC7DQTPHSDnHSTvCRDa+QDK8PjDJRjzKRTzOSULVUEnXUk3VTkvUTEzXTE/pWmDwXmj8ZXT/aHr8XXHzT2fzTWX9Tmv/Vnr/VHj/UnL4VG32XXH7aHj7anf3ZXL8ZXTzX23sYGvqa3TfcnXDamaqZFyebGF9ZlZZSTprWEqUe3S9oJzewsHu1dj+7u/79fX7+/v7///5///9/v///v//+///+v3//vr7/vX7/Pb//vn///r//vr/+/X/9/Lx6OHk3NHh2czw6df/+eb//uj//uX//+r3+evt8Ofo6eFRSz1QSjxPSTtNRzlLRTlJQzdHQDZHQDZCOzNBOjJAOTM/ODI/ODJAOTNBOTZAOzdCPzhFQjlLRTlNRjZQRTNSRTJWRzRVSDdZTERVS0xaU2NpaYV8gauJk8iTnt6apOumrPiprPusrf2tsP+usf+usf6tsP2tsP2prPmnqvekqPKipvCfo+2bn+mWmOOSlN6SktqJic98gMB0ebNvdaltcJ1pZ45qX315X3iCV2qOUF+jT1y7U17NVF3WUFfbSFLlQFHoP1LkQ1LcRFDWQ0vPQETKOTzJNDbkSkznSUrhQUHWODfOOTXOQTjIRDi+PjHDRTbDRTbFRjfJRTjORjjRRzrXRzzaRz3WPjPVOzHWOC/WNS3WMyrYNCvbNCzbNy7bODHeOzTgPTTgPDPdOTDcNS3cNSzbNy3SLiTdOzDaPS7NMSLHLh7ONybSPCvNOijOOCfUOCniOjHzPTn/QED/PD7+MzfzLC/qLC7hKyrYKinUKyjXLyzeNDTkODjpOTvwODjwNzXuNzPoNzHjNy3cNirXNSjRNSbNNSjnUEX/bWPbSEHINDLXQ0PUP0PqVlbZQTzSPjTLODDHNyzGOi3GPC/DPTHBPTC8Oiy7PC2+PzDAQTK/QTK9QC68PS67PC3ERDfERDnISD/QUEfTUkzRUErSTkzVT07nX2PuYWn7aXT/bXz/ZHf1Vmr1UWn/VW//V3b/VnT6WHDxXnD0bnn2d4Dta3PeWGHxYG3xYG3sYm/vc33siIrMgXyqdGiZeWpza1hPTjxfVkeEcmivlpLcwL/v1dj86ev+8/f9+/z9/v/6/v/+/f///f//+///+f7///v5//X6/fb///r///r///r//ff//vb58Oft5drp4dT079z/++f//uX//+P//+j5+ury9Ofu8OVTTT1TTT1RSz1PSTtNRztLRTlKQzlJQjhFPjZEPTVCOzVBOjRAOTNBOjRCOjdAOzdBQDtDQztJRTpNRzdPRzRSRjBWRzJVSDVXSkFTSUhYUl5qZ4J9gaeLk8SSntqYouekp/amp/qrqfyrrP6srf+trv6srvusrvuorPamqvSkqPGjp/Cjp+6gp+2fpOidouaZnuKUmduLk9KGj8qDjcKEiLeDgaiIeZqPbYiaY3qpWGm7UV/QTlrgSVLoQUnqPUHpPTvkPzndQznWSDrOSTjGRzTCQzDFQDHkVEngRz/aOzfYNjTYODjZOzzROTjINzTAOi++PC6/Oy7AOi7COCvDNyrGMynGMijPNSvQMyrRMyjUMynWMyrZNSzdNi7cOC/fPjTdPDLcOzHbOC/bNy7aNi3YNCrXMynVMybTMyXQNCXQNyfSPSnRPirKOSTAMh7IOibKNCXVMSjnNTH6PDz/PUD/OD73MzfqLTHhLS7ZLS3YMC/cNDPjOTrpOz3wOT32Mjb4MDP0MDHtMS/lMiveMijVMSXPMyTJMSTRPTH6al/kVEzIOTXQQD/LOj3kUlPkSkjcQz3ROTTJNi7HOS/FOzDCPDC/PS+6Oyq8Py2+QS+8Py26Oyq6Oyi9Oyu+PCy8PjC8PjLARDrITELMUEjKTkbMTEnQTkznYGTsYWj4aHL/b3v/aHj3Wmv3VWr+WnL/WXP7XXTuYXLmanTrfYDxh4nod3naX2TxZ3T+bXzzZXXrbHf2kZXsop/ElIqijXxpa1ZIUTxXVUZ0Z16kjIjbvsDy1dn54+b/8/j/+vz+/v/8/f/++////P//+v//+P3///v5//X3/PX9//n///r//fj//ff///b/+e/17+Hy7Nz69eH//ef//eT//uL//+f9/uz5+uz39+tWTz9UTj5TSz5QSjxPRzxNRztMRDlKQzlIPzZGPzVFPDVCOzNCOTJBOjJDOjVBPDZDQDlERDpKRjtNRzdPRzJRRjBUSDJVSDVVSD9RR0ZXUV1qaIB+gqiMlMWTndiZouefoPKjoPemo/qnp/2oqv+pq/6prP2nrfulq/WjqvKjp+6ip+ukqe2mqe6lqO2jp+6YoOiWoOWUn9+Un9eVm82alb6gjK+qg6ClZX+0XXDDUmTQSVfcQk7lPkbrPEHsPDzrQDnjQTTcRTTUSTTKSTPCRi6/QizCPy3iU0XeRDzdOTfmPj7qREblQETZOD3ONjXNQjvJRTnJQzjHQTXGPjLDOS7CNSvCMifGMijLMyjONCrTNSzYNS7ZNC7bNC7bNCzkQTjePjLZNyzaNizfOC/gOi7bNSnVMSXYOCjNMiDKMSHPOSjPOSjHNCLKNyXUQzDINybOOCrYNy3eNS7nNDDuNTP2Ojn7Pz7/TEv6SEbyQkLsPj/qPD3oODvlMjbmKzL0KzH4KS/0LC7vLy7oMSvgNCrZNSnTNyjGMCHALh/0ZFnrXVPPQDrUREPLOzvfTU3qUlHgSEXUPDnJNi/GOC7GOS/DOy++Oiu+PCzBQC3AQS68PSq3OCW4OSa9PCm+Py61Nym0OCy4PjPBRzzFS0DFSUHGSkLLSkXlYV/mXmDxZGr+bnf+a3XzXWnwWGX4XW36XnP1YnToZHHjbHLsfn/5jYv2hoXpcXP4cnn/eYb1YXHgWGb2iJH/tLTQrqKgm4ddalBEUjlRVEFqYlWciYLawL/y2Nv24OP/9Pf/+v3//v/9/P/+/P///f//+//++f37//r0//Ty/vL5//b8//b7/PT//fb///b///P79ef38eH++eX//ef+/OP+/eH//+r///H9/fP8/PJYTkJXT0JXTUFVTUBUSj5SSj1SSDxQSD1NQzlLQzhLQTdIQDVIPjRHPzRIPjRGPzVHQzpHRTlKRjpOSTZSSjVVSjRWSzVWSzlYTkVVTE1aVGJraIN7fqeJj8ORmdeYn+ejpPalovmkofyhovyhpf+iqP+jq/+krfyhqvWhqfGhqOylqO2qqe+tqfOxqfasqfigqfiXp/KSoeKWn9amo862nr65hZy4Z3q/TF3RRVLfPk3nO0fnPETmPULgQEDgQEDiPj/fPD3dRULJOjTKRDvKRTy6MSncS0boSknpQ0XrPkLpPEDmPD/hPT7aPD3UPDvPQjvIPzfKRDvRTUHNSz6/PTC4Nim9OSy/NyvDNizINS3LMirRLyrVMCzbMi/eNTDnQDffOS3aMiXdMyblOSvnOy3fOCjVMh/PMh/MNB/KNSHHNCLHNCLKNCXNNSjPNSnKMCbNMynRNSnSNirTNSnVMybXMyfcNCngMinmMy7rNTLrMzPpLzLnLTLoLTTtLjX2LTP2Ky/vKyztMC7qNS7jOSzZNyjQNCXDLRzEMyLnWEjpWU7LOzPfTknFNDHaSEjhT1DcSkrUQkLNPDfIODDGOC7IOi7IPC3GPSvCOyi+OSa8Oyi7PCm7Piy6PSu3PCy0OCy1OzC5PTG7PzO7PzO+QDTAQDXEQTfvamH1cGnqY1/0bWr7cXHsYWT0Z23/cHn/bHr7aHjwZG/pYmnrZGrubG7ucW/ucW/7eXv/fYX5Wmz8Y3ffYnD7rK+2qpp9kXVdclFKWTpMUjhzblqllYjLt7Dt1dP/7vD/9vn/9/v9+Pz8/P7//////v///v/7//7w//Tl/uvm++rv//D4//b8//T+//P//vH//fH/++7/+ur/+eb/+eP/+eH/+eH8+uX///X///v///tZT0NZT0NYTkJWTEBVSz9USj5TST1SSDxORDhORDhMQjZLQTVKQDRKQDRKQDRJQTZHQzhIRDlMRjhPSDZSSjVTSzRWSzdUSzpYTkVVTE1ZVWNraIN7faaGjMCNldOWmuGfnuygnvKgnfSen/mdov2fpv+gqv+hrPugrPSgq+2fp+iipeilpOqpo+2roO6kn++gp/eapvCcoeGjnNCxmMC/jarCcYTEVGLRQ0/iPEbsOEHvNz/qOj3lPD/cQEHbQUPgPEPbOkDaQUTMPDzNQ0HKQD7BMzHlT1DnREfpQEXqO0LnOD/iODvcOTrVOjjPOzfURT/GPTXGPTXMRz7MTEHCRDa4Oiy3OSu5Nyq/NyvGNi3MNS7SMy/YMy/hNTXkODTlPjXhOy3eNinfNSbiNijhNSfbNiPTNB/ROSTLOSLHOSXHOibJPCvLPCzMOC7ONCzTNC7WNS3TNi3PNynLNSbINSPLNCHPNCLYMiTeMijjMCvmLizmLC3mLC/mLTLpLzTsKy7tLC3sMC/oMi7hNSvbNSfVOCfSOSfVPy67KhnWRDXRPzLZRj7rVlDaQj/YQkHnVVbiUlLcSkrUQ0DOPjbKOi/IOC3HOCrJPCvEOyi/Oie9PCm9Pi26Py25QC+2Pi6yOiy0OzC3PTC4PjG6PjK9PzHBQTTFQzXraVzybWTnYlvwa2b1b2zoYmHxa2z8dHj/cX7/b3z2aHTtXWbqWWDxYmb3cXD+enj7dnf/eH75UmT+W3DkXW72pqmpppNqjGtbc09PXztTWjt1c1ypnY3WxLr24dz/9PP/+vv/+vv/+/z8/Pz8/v37///6/v/1//rt//Ph/+nh/ebp/+vz//H4//L9//L///H//e///e3/+un/9uX78+D68t389N/89+T9+vP8/Pr///1cUEJbT0FbT0FaTkBYTD5XSz1XSz1WSjxTRzlSRjhRRTdQRDZPQzVPQzVPQzVNQzdLRDpKRjtNRzlQSTdTSzZWSzVWSzdUSzpXTUNWTU5aV2JraYF6fKKFibmLkcuRltaYmN6ZmeOamemane6boPSdo/efp/igqfSgqu+ep+icpOOcouCen+CeneGfmeOcmOKWm9+amtqkldCxjMC/gqzHcpPJWXHIQ1TXQUzfPkTjPT/lPT3lPD/jPT/hPkPhPUTgPEPXOD3WQELPQUDKQz/DPDjEOTbpV1fgQkPkPkLoO0HjOD7cNjjWNjbROTbNPDfVSEHEOzG+NSvFQTXNSz7GSDq7PS+3OCm6Nim/NynHNyzPNi7XNTDeNzHmODfpPTnXMyrXNSraNizcNirdNSrdNynaOirXPizFNCG/NB+5NCG6NyO8OCm+OSq+NCrALSXjPz3lPjjfPjbVPC7OOCnINyTINyLNOCTSNyXVMybXLybZLifcLyvdLy7bLy/cLi/bLCnfMCvgNS7cNSzVMybQNCXQOSbRPirUQS/CMSDnU0XSOzDaQTveQz/pS0rwVFXtVFboVFTjT03dSUXWQzzPPDLKNy3FNijFOCfANyW8Nya5Oie6PSu3Pi21PS2yPSywOiyxOy+1PDG1PS+3PTC5PzC+QzTDRTfcXFHqZ13kYVnwbGf2cG/nYWLsZmfzanHgUl7vXmv1Z3PyZW3xYGf1Zmr5cXH+eHf6dHX/bnXzSl34UmjkW23xnKGjnIpif2BWb0hSZD5XYEF4eF6tpZLh0cT/7ub/+PH//Pj//vr//vr9//z7//37///5//3z//fo/+7c/uPa+N7h+eHp/Obv/Oj2/ev9/u79+uv/+ur/+Of68eD06Njy59X269n48eH++vH9/Pj//vtcUEJcUEJbT0FbT0FaTkBZTT9YTD5YTD5VSTtUSDpTRzlSRjhSRjhSRjhSRjhRRztMRTtLRzxPSTtSSzlUTDdXTDZXTDhXSztWTEJVTUtcVmBqaH55eZuChbKKjcKPlM6TldKVlNaVlduWmOOYm+iYnuyaou2bo+ucpeiZod+Wn9qVm9WUmNWVltaSk9aRkNKFhL2Rg7alfbG3c6LIZo/TV3vVR2HUPEveQUrgQkPeQ0HgQj/hQUHkP0PnPUbnPUbjP0bWOj7RP0DRRUTGQTy6NjHFPjrqWlndQULjQEPmPULjOj/bODnTOTfQPDjOQTjPRTvCOi67MijAPC/HRTjERTa9Pi+4OSi9OCnCOSnMOS/SOi/aOTHgOTHoOzfrPjjZMizZMircMyzdNSzgNS3fNy7cOi/WPS/JNyjGOinBPCu+PCy/Oy/BOzDFPDbOOTXrQ0LuQT3kQDfaPDHPOSrJOCXIOibJOyXQPSnQNyfPMSXRMSXUMSjWMyzUMSzRLyrTMirTNSzTNyvQNirNNSfKNyXMOyjMPirMOyjPPCz0XlDgRjzSMy/TLy3mQED7V1j/dHX/cnH/amf2XlnnUEnVQTfHNSi9LiDEOCfAOCi7OCa4Oym3PCy1PS2yPSywPC2vOy6uPS+wPC+wPC+xOy22PjC8QjPARjnLTUHfYFfiYVv0cGz4c3TmX2PkXWHmXWTWSFTnWWXzZ3L0Z2/2ZWz8a3D+c3b+dnb7cHP7ZW7xRFj0S2LlWGvrkpaglYNfellSa0NTaD9cZ0V5fF+wqpTn3Mr/9ej/+fD/+/H//fT9//f7//r5//r2//jy/PTq+u3a+N7O89LK68zP7M7X7tTg79jp8t3y9+P29eP79uP89eP17Nvt4dHp3c3t4dHx6Nn89e389/H++fNcUEJcUEJbT0FbT0FaTkBZTT9ZTT9ZTT9XSz1WSjxWSjxVSTtVSTtVSTtVSTtUSj5PRzxPST1RSTxTTDpVTTpYTTlZTDlYTDxVS0FWTEpcVV1oZXh1dJN8fqWFh7eMj8KOkMOPkMiQks+Sk9SSldyUluCUmN+Vmt6XnNyUmtaOlM6JkMeFi8WBh8N9g8F+f7h9dJ+OcJSoZ4/BXITWTnbiQWPoOlXqOUvmQUfgRUPcR0HbR0PfRUXmQUfuPErtPUrmQknXPkHQQD/QSUXAPzm0My3IQzzgVVDcREPhQUPkQEHhPj/aPz3UQDzRRDvPRjzHPTLAOCq9NSm9OSrAPjC/PS29Oyu9PCnCOirHOyrPOy/VOy/bOC/hOTDnODPpOjXnOjblNjPkMjDmMjHoNDPmNDDdMivUMCfMMijLNy3JOzHFOC/BMy/DNDDNOzzdP0DrODvtNzbkNzHYNSzMNCbGNSLENyPFOiXLPSnLOCbMNCbONSfUOCzVOzHTOS/QOC3QPjHKOy3FOCfFOCfHOijHPCnHPCnIOynNPi3NOirYPjLhQzrULy3kOjrgMjTgNjfXNTPWOzfeQz/mS0bqUUnrVEnoVEjkVUfLPzDEPy6+PCy4PS23PS60PjCwPy+uPjCsPC6sPDCtPS+sPC6tPCyxPS63QTO6RDbHTULdYlrgY13vb2z0cnLlYGPlYGXnYGf3a3b7b3r3a3btYGjwX2b9bHH/eXz/eXz6bXP4XmrzQVf1RF7oVWjmh42kk4NogF5bdEpfdkpod1CCiGazspbo4sz/+un//e3//u/+//L7//T4//T0//Ht++rl8ePa7dnG6Me75Ly63rq/3rzH4MDN4sPY5szj69Ps7tjz8N338t/z6tvs4NLo2s3q3M/v4dby6N/x6OHy6eJbT0FbT0FbT0FaTkBaTkBZTT9ZTT9ZTT9YTD5YTD5XSz1WSjxWSjxXSz1XSz1YTD5RST5SSj9TSz5VTDtYTTtZTjpaTTpZTDtYTEBVTEdZU1dlXm5uaoN1dJZ+faWEhbGGibSHibmKi8GLjciOjc+OjtSPj9WPkNOQlNOLkMqEicF8gbh1fLJvdq1pb6tsapyAa4qUZHquWXbLUG/jQmTwN1b2NEz4OUnvQEXlRkLdSkPbSkXhR0foQ0ryPU7wPk7kQ0nXQkTMQT7OSUS7PDWwNCzKSkHVTEbYQkHaPj/bOzvbPTzZQT7URT/NRzzLRzrAOCrBNyrAOCq+OSi8OCm8OSe9OijAOyjEOynKPSzSPC7XOy7cOC7hNi7kNi/oNTDpMzLoLi/qLTHuMDL1NDf1NznuNDXmMjHaLizXNC/VNjPRMzLPLzHSLzTcNz7qOkTtMDbuMDLmMjHcMyzRNSnKNyfIOSjJPCjGOCTJNiTPNynUOy3aPjLdQTXdQDfZQjfTRzjJQTHDPCnBOifDPCnGPSrFPCrFOCbMOivOOCrNMCfmQzzbMi/vP0HjLjPaKizVMS/TNi/VODPWOTLSOC7MNSrGMibAMSPORTXGQTK8PS61OiuxOSuvOSurOiyqOiysPDCrPTCsPi+sPC6rPCuuPS2zPzC1QTTJU0ngZ1/fZF/oa2nubm/mY2jwanH1b3j6cH38c332bXfuYmv2ZG7/cnr/eH7/cXX6aXD4V2b5QVn0QFvqUWbifYOtloZ6jmtuh11viVp5imCNl3K2t5jf3sL59N78+uX//+/7/+/1/+/v/+vn+uTc79nR483F3sGx1a+o06aq0Kew06u21K681rHJ2rrS38Hg5szo6tTy7drz6tvu4tbs29Hq2dHs29Pp2tPm2dHk189bTj5bTj5bTj5bTj5aTT1aTT1aTT1aTT1aTT1ZTDxZTDxYSztYSztZTDxZTDxZTT9TST9USj5VTD1YTDxZTjxaTTpaTTpaTTxaTkBWS0VYT1JfV2JkX3NqZoFzb5B6ep58fqR+gKmBgrKDhLyHhcaIh8uJiMyJiMqIiMiDg798fbV2d61xcqhrbKRmZ6BsYI6CX3OVVl+zTl7SSl7sQFj4N0z+M0b+OUPzP0LpREDhSELeSUPiRknpQkryPU7vPk7dQUXURkTIQT3JSEK0Oi+xNyzPUEfKQz3PPjnQNjTQMjHQNTPTPjjSRTzJRzrDRDXAOCrDOirCOiq/Oie9OCe+OSa/OifBOibFOifLOinTOizZOSvdNyvhNSvlNCzqMy3rKivxKi34LTP8LzT/MTf/Mzn/NDn9NTj5ODv1ODzyOT/yOUH0OUT4OEf7Nkj+NUf0KzX0LTLtMTLjNC/ZNi3QOCvOOizOPSzLNSbROCrZOy/gPjPiPjTkPTTlPjbfQTbZSjzQSDjJQTHEPCzDOirCOSfGOCrIOSnJMifTOS/hQDjrRD7eMC/gLi7sNTnoNTjYMy/VNy7XODLXOjHVOzHSOzDNOjDJOy/WTD/MRjq/QDG0OSqwNimsNiqrNyqpOCqsOy2tPS+uPjCtPS+sPSyrPCutPC6xPTDBTELaY1veY17oa2nwb3PqaW71cnr8doHuZnL3b3n5cXv2anP+bHb/d3//dXz5aG/5Y273UmL+Qlv3PFnqS2HddHu1momNnnp9mGt7l2aClWiRnXWsspDLzK3g4MTp7NHu9t7l89nZ7dHP5snF3sC81be0y66sx6SawZSWwpGZw5OhyJmny52sy6G3zafB0rDO2bvZ3cTl4s/s5dXv4dbr2tLn0s3j0Mrgz8jazMPVx75bTj5bTj5aTT1aTT1aTT1aTT1ZTDxZTDxaTT1ZTDxZTDxYSztYSztZTDxaTT1aTD9WSj5WSj5YTD5ZTjxaTTxbTjtaTTpaTTxbT0FXTURXTUxcUlpeWGZiXXFqZn9zcI13dpZ4eJx8e6eBfrWEf7+HgsWIgsiJhMeCfb9/ebd6da14cad2b6V0a6JwZ6B6YYuEUFyZSEezRUjTSE/uQk74Okb+NkH/OkH1PT3uQT3mREHjRULkQ0joQUvuPU3rP03YP0LRR0TFQTzESECyOS6zOi/RVUvDPjfJODPHLyzFKijILyrOOzTNQznDQza8Pi/BPC3EOyvDPCnBOifCOyjDPCnCOyfDOCXENSTKNyXUOCnZNyreNivhMyrlMynrMyv1MzP/NTj/ODz/NDr/LTL/KC3/KC/+KzH8LTP2KTDyJjH3KTb/LD//KkH9ITrzGi/2IjHzJzDtLDHmMC/bMi3UMyvRNCvQNirUNivdOTDmPTbrPjfrOjToNzHoNTHiOTLfSD3XSzzTRTfLPS/ENijCMyXINSvPOC3ONCzUNi3mQzzgOTPgMjHSICDsODnlNTXVMCrSNCvSNCvPNSvONivKNirINSvFNyvjWU7YUkbKSDu+QDS3Oy+1OzC1PDG1PDGvOS2xOy+yPjGxPS6vOyytOSqtOSyuOi2xPDLQWVHcYl3scHD0dnnubXL1cXz2cn3/eoX/f4n/eIL0aHH3ZXD/cXz/dX//a3b4Xmr2T2H/QV73OFfpR17bbnS6nYuZqYWCnm59mWaAlmeNnHGhqYS0upjIza3V3L3M2bvB1LSyzKmnwp+evJiatpCWsoyQsIeJs4GGtX+NuYSVwIucwo+hw5GoxZmyyKG+zqrL0bXa2cTm383q3tLp1s/hzMnbxsPUwbvOvbXIt7BaTT1aTT1aTT1aTT1aTT1aTT1aTT1aTT1YSztYSztZTDxZTDxZTDxaTT1aTT1aTD9aTEFaTEFbTUBbTj1dTT1eTzxcTzxcTz5ZTT1ZTENYTUlYTk9bUVldVWJgWWlhXHJqZoFva45zcJt2cad7dbOEfcGKg8mMgseIf8CKfryIebKDcqiHc6iNdKuHbKOGXISQR06kQjm2QDzNQ0DeQD/oOjv1PT//REX3Pjz0Pj3tP0DqQEPrQknqQ03rQU7jQUzRPz/FQDm+Pza3PjOwPC+yPDDARDjSTUTINzLUOjjNMi7MMy7WQzzJPzS1Nie7Piy7NiXBOifDPCnCOyjAOSXCOSbGOyjHOijLOifQOSjWNijYMiTaLiLhMCbsNy71PTX1ODL3NDD3MC34Kir7Jij7JSf7JSf7JCn7Jiz3ISn4Ii7/Jzf/KD7/ITv/GTf9FzH/JzjvIy7mIyvjKy3dLS3UKyjTLircNDHiNjToNjTvNzfyNjXzMjPvLi/uLCzlLyzcOTLROjHSOTHsU0u8IxvEKyPfRkDILibNLirePDfoRUDiOjfYLyraLiriNTHlPDffPjTVOy/PNSnLMybMNSrNOy7LOzDFOC7sYljgWk/IQzq5Niy6Oi+4OC2xMye0NiqxMSawMiauMiawNSawNieyOiq0PC6zPTGwOjC6QzvWXFfscHDxc3b2eHz7eYP1cXz/fIT9d4D6dH38c3v/cn7/cn7/bXn/Z3T8YG70SVz/Plz/Pl3kQFjUZWy1lIGSoHyDnW19mWZ+lGOHl2qUn3eepoGgp4Wcp4WSo3+Ko3yAn3Z6mnF5mm98nXKBoHaDpHWCrXeDs3mLuH+RvISVvoaXvoecvoyivZCnvJOxvJq+wqfPzLnf08fj0srcx8TUv7zMurbBsqu5qqVaTT1aTT1aTT1aTT1aTT1aTT1aTT1aTT1YSztYSztZTDxZTDxZTDxaTT1aTT1aTT1aTD9aTD9dTT5dTT1dTjteTzxcTzxcTz5dUEBbT0NbTkZZTkpaUFFcU1hfVV5fV2ZkXHRpYoNuZ5Fxap14cKyAebyJf8SLgMSPgb+QfrqNdKuMbqKXcaShdaiba5+ZV32dPEOqNSuyNizCPDPTQDjdPjjoPzrzQT31PTv1Ozz0O0DxPkTuQEnoQUniQEvbQkfHPDm9PTS2PDGxOy+rOiyuOi29QTXQSkHaRkLcQT3UNjPQNTHWQTrNQzi8OiyyNSO9OCfCOyjEPSrEPSrEOyjGOyjIOynLOinPOSjPNibUMiXaMiXjNSrqOC7wOTHwOTHnMSboMCbqLiXvLCb2Kyf7Kyn+LCv/LS78KS/6JCz6JDD/Jzf/JDv/HTj/FDP8EzD1HjD2Ljn1MzzmKzLbKCzcLjDeMDLbKy7xOj70Nz33NDr2Mjb3MDX4MDP5MjX0ODfbMi3aOzXXODLkRT/kRUHOLyvRMi7BIh7UNTHhPzzoRUDgPTjYMy3ZMizdNjDdOjHUOi7POSrJNSfHNSjIOSvKPDDKPDLGOS/tY1nhWE7JQDi6NCvCOTHDOjC/NizCOS+/NSu/NSu9NCq7NSm4Nim1NSiyNyiwNim0OzC8QzrTWVTobGrvcXT2eHz+fIT4doD+fIT8eYH5dn7+dX//c3//cH3/a3f8ZHH9X272SV3/Plz/PlzqRFrTZGqujnmLl3F6lGR1klx4jl1/kGOKlWuNmHCLlXCFlG1yh2BtiF1pil1njV5skGJxlWV5m2l6n2uBrHSEsXaKt3yNu32QvH+TvIKXvIabu4mbtYiiso2ttpe+vajPxrfYx7/WwbzPvLjGt7S7raqypKNcTDxcTDxcTDxcTDxcTDxcTDxcTDxcTDxaSjpaSjpbSztbSztbSztcTDxcTDxcTD1cTD1cTD1eTD5dTT1dTjteTzxeTzxcTzxfUkFdUUFcUERbTkZaT0tbUE5dUVNdUlpfU2djWHZoXYVrYpFza6R/drWHfL6JfbuXhb+ZgLebdqmecJ6udaK6dqW1aZiwUna4PES+NS+6NCvAPDDLQzfTRTnbQzjkPznxPTz3Oj75OkH2PUXvQEfmQUjZQEXPQELAOza4OTCxOC2tOSyqOSmtOSq7PzPPRj7ZRD7YOjfZNzXaOzfcQz3eUEbOSDy1MyO+OSjBOifEOynGPSvJPSzIPCvJOinMOSnPNynQMyTTLyPgNSvuPTX1QDnyOjLpNCvgNCbfNSbiMiXlLyTsLSXuKyXxKyjzLCnzKy3wKCvyJi/4KDb+JTr9HTf8FjP4GDP0JTfyMDvzNUHyOEPxPEXwPEXqNj/kLDbwMjzzLzv2Ljn2LTf1LjP1LjHzLzHtNDLcMCziPTnaNjTfOzn/bWvlQ0HSMC7OLyzaOzjfQDzgQTvbPDbVNy7WNS3WNSvSNirINifENybCNifEOCnFOy7GPDHGPDHFOzHrYFnhVE3JPDO/MCjLOzPRPjbOOzPSPTbYPTjXPDfVPjfQPTPKPDLCOi67Nyq2Nim5Oy+8QDbPVE3jZ2Xtb3L4en7/gYj7fIP7fIP7eYH7eID/d4H/c4H/bn3/Z3b7YHD8W231R17/PFr/PlzsRlrOYGOefmd5hV1phFFohU9tg1J0hVh8iV59iGB4hFxxglhhelBff1BhhVVmjlpulGF1nGd9oGp+o22DrHKEsnSItniLuXmLuXmNuXqRun6UuoGTsX+VrICbqYaprZS6taLHua7LuLLItrS4rKyqoaKgl5pbSztbSztbSztbSztbSztbSztbSztbSztaSjpaSjpbSztbSztbSztcTDxcTDxcTDxdSz1dSz1eTT1eTT1eTTteTzxeTzxeTzxeUUBeUUBdT0JbT0NcTkVcT0ddUEpdT09eUF9iVG1kWXtpXolwZ5x9da6Fe7eIe7OZhbilhbSvgKq4eqHGeJ/RdZzKZIzGTWzcRlLfQUDVQT3PRTvMSDvNRzvTRTneQTruQEH1PEH6PUT4P0fxQknjQkfSQEHGPzy/Pza2PDGwOi6sOy2qOSmvOSu8PjLORDrVPDfVMzHgOznlQT/hRD/oU0zfVUq/OivCOiq/OCXANyXEOynJPSzKPSzLOSrOOCnONSfSMibZMinlOS/xPjf1PjjwNTDkLybgNSveNingNCrjMSfnLinqLSntKyntKyvqKSzoJyzrJzHyKTn3Jz34Ijz8Hz77JUH7NkjkKDbnLjz/UFz/YGz/UFzyPEnzOUfoKTjtKjjyLjr0MDrxMjfqMDHhKyrYKSbYMC3aNzLUMi/lQ0D/c3D1VlPdPT3lR0bbPTzaPDnVOjXSODDRNy3QNirNNCbGMyO+NSO5NiS7OCa/OyzAPC+/OS7AOi/FPDTlWFHcTUfKNzDHMCnXPDfeQTrbPDbfPDXnPjnpPTnmPznhQDjZPzXPPDLIOi7BOS27OSy7PDPMT0ngY1/sbm/6fH//hIj9foX4eYD4eYD8eYH/eIL/dIL/bn39ZXT5Xm73VmjzRVz9OFb/PFruSFzHWVqLbVNjckdddUNceUNkekltflF0gVZ2g1hzgllvgVdth1psjlxvlWJ1nWh7o26BqHGEqnGFq3CFrXGFsXSItHWJt3aJt3aJt3aLt3iPuHyRtH6Pq3uSpH6bpIetq5a+sqTIt6/HuLW0q7ChnqWXkplbSztbSztbSztbSztbSztbSztbSztbSztaSjpaSjpbSztbSztbSztcTDxcTDxcTDxdSz1eSz1fTD1eTT1eTTtfTjxeTzxeTzxeTzxeTj5eTj5cTz9fT0JdT0JeUEVeT0piTlljUmVjVHFkWn1sZZF4cqJ/d6iDdqSUfaeshqvCianOgp7ad5ThbInbWHfaRF/0Q1X7RVHvSlDhSUjRRj/LRTzQRT7aRUHpQ0PwQEP1QEf1QkjtREnfQ0TPQT/DQDi/QDe1PS+uOiurOiqqOSmuOCq7Oy7MPzbhRkLiPTvuQkLrQUHeOzbkS0PmWEzVSz7JQTPAOCi8MyPBOCjIPC3JOirLNynQOCvOMCXXMyngOC/pOzTtOjXtNjLrLy3lLCnjMCzjMS3nMTDsMzHzMjX2Mzf3NDj3NjvsLTXqLDbtLj3xMEPzLUb2KUj9K07/M1L0OUzlMz/wQE3/X2z/a3n/V2b1Q1P1PlDuM0TtM0HtM0DqNz3jOTnbODPONCrHLyTLMirHLijQNzLyWVT2XFryWFbbQUHiSEbcQkDUPDfONzDNNi3QOS7POSvKNyfCNSO5OCWzOCa1Oii5Pi65Oy22Niu8Ny7HPjbbTkfZRUHONTDQMS3hPjnnQDrjODHnNTHrMjDuMjHrNTLnODPhOjLYOi/QOS7IOi6+NSu6Ny3ISULcX1nrbmz7fYD/hYn9f4P1dn32d378eYH/eIL/c4P/a339ZHb5XnD0Umf0Rl/9OFb+PVrvTF3AVFJ7YENXaDxZcT9bdkNmeUtuflF0gVZ4hVp5iF93jGF5lWV4mmh6oG18p3GBqnKEq3KFq3CGqW+HrXKIsHSJs3SItXSHtXSFt3KJt3aLuHeQtnuOrHiOo3iZpIKtrZXAuafOwLXSxMG8ucCoqracnKhbSztbSztbSztbSztbSztbSztbSztbSztaSjpaSjpbSztbSztbSztcTDxcTDxdTDxeSz1eSz1fTD1fTD1eTTtfTjxeTzxeTzxdTjtdTjteTzxfTz9gUEBgUEBhUUFiUEZiTlBjTl1fUGVgVXNnYYV0b5d7dJ1+cpiPdpaug5/Mi6HbgpbmcoXrZHXpUGTpO1L5M0z/PFH7RVLpREvVP0DOQD7RQ0HWRULjRUboQkTuQUXtQ0bnREfaREPLQjzAQDW7PzOxOy2pOCipOimqOSmwOCq8Oi3KOzPoSUXqQEDrPT7lNzjaMi/fQjvuWlD0aFvbUUTJQTO+NCfCNifIOizIOSvLNyvSOCzRMCbaNi3mOzTpOzTqNDDoLyzqLSvrLS3zNDn1Mzv4Mz38Mz3/MT7/MT79MT35MT71MEHyMUT0NEv1NU71L1D2LVH/Mln/Pl/mM0j5T1z/YW7/X27/V2b7UGD0RFjpOErzQVHqOkfdMjvSLzLKMi3COC29Oyu9OyvEOi/AMijZSkL6a2PdTEfhUEvPOznPOzngTErUQDzLODHKNy3OPC/OPSzLOinEOyi0OyauOyavPCmzPi2xOSuvMye6OjHKQz3WR0HZRD7UNzLXMi7nOzfsOjboMi7tMi3yLC30LCzzLzDvMzHoNzHiOjHaPDHSPjLDNiy6NCnFQjrYWVPnamj6fH3/hon+gIT1dn33eH/9eoL/eIL/cYH/aXv7YnT4XW/yUGX3SWL/Olj+QFzwT1+6UU5xWDpTZjhddUVhfElugVN2hll7iF1+i2CBkGeCl2yAnGx9n218pG99qHCAqW+Cqm6DqWyFqWyIq3GIrnGIsHKGs3KEs2+DtXCFt3KJuHSLtXaJrHSOpXeaqISwtJnIw6/YzMDb0c/CwsyrscGbobFaSzhaSzhaSzhaSzhaSzhaSzhaSzhaSzhaSzhaSzhbTDlbTDlbTDlcTTpcTTpdTDpeSzxgSjxfTD1fTD1eTT1fTj5eTzxeTzxeTzxfUD1hUD5hUD5hUD5hUD5hUD5iT0FlTU1kTVdgT19hVW1nYoB1cZJ8dpiAc5GPdY6tgJTOhpTffofucXn5Y2z6UFv6O03/Kkb/MlH/PFPxPE3gPEXXQEXVQ0TUQkPcQ0XgQkPkQUTjQ0XeRELUQz7JQDi+PjO4PjGvOSuoNyepOimtPCq0PCzBPTHPPzfgPjvlOTnjMDPiLzLgNDLbOTTnTkb8bGHyaF3ZUUPGPC/GOi3IOi7JNyrNNivVOC/VNCzeNy/mOTPpNzPpMS/oLy3uMS/1MTX/MkP/MEX/LUb/KkL/JkH/Iz38IDr2IDr3JkP1Kkf1Lk31L1DzK1L0KVT/MmD/QWjzQ1j/YG3/aHX4VmXtS1rxTFzrQlXaMkPrQFLdN0PJLDO6KCixLiSrOCalPyaoQCe4Py68OizdWU3hXVHNRz7NRD7BNjPJOzfkVVHVRkDJOTHIOC3KOy3JOinIOSjEPSmxPimmPCaoOyesPSqrNyisMyi8PTTTTEbWR0HdRUDbOTbcMzDpNzPtNjLrMCv0MS39LC//Ky36Li/0MS/tNC/mODHfOzHYPjLJOS69MyjAOzLPTkjhYV73eXr/iIr/g4f5eoH7fIP/e4b/eIT/bn7+ZXf3XnD1WmzrTGD1SWH8OVf7PVnuTV2zS0hoUTFRZDZcdERmfk52h1t/jmOEkGiGkmqIl26JnnOIpHSEpnR/p3J9qHB/qG6BqW2DqWyFqWyFqG6Hq26FrW+Fr2+BsGyAsmuCtm6Ft3KHs3SHrXSNp3ecrIWyuZrIxq/Xzr/Z0sy7v8qkrL+Smq1bSjhaSzhbSjhaSzhbSjhaSzhbSjhaSzhbSjhaSzhcSzlbTDlcSzlcTTpdTDpdTDpeSzxeSzxfTD1eTT1eTT1eTj5eTj5cTzxhUj9hUj9hUj9iUT9iUT9hUD5hTj1iTD9oT0tnTlJiUFxjV2tqZn93dpV9fJyBeJeRepargZXGhJLafYXwdXr9a2z/WVv9REz/MEr/NVT/PFX0PVHpP0zjQ03dQkjWPUDbQUPcQEPeQEHbQT/YQz/QQTnHPjS9PTC1PzGsOyupOCitPCy0Py67QDHKQTfYQz3ZNzThODXfLy/iMzDnOzfTMCfRNSnrVUf/dmzrW1DRQzfKPDDLOzDKOCvNNivUOjDaNzDfODLlNjPnMzLqMDHtMTL0Mzb9NDz/Jjf/Izn/Ijn/Ijn/ITj/Hzj+Hjb4HjbvGzTuHznwJULwKUjuJkrxJ03/M17/RWj/YnX/YGz3V2PxUV3yUF3vTVriQE3UMj3aPUbMNzu7Ly6uLyimNSeiOyicQCecPiWqOSeyOCvSVkq7OzLEPzi+NDG9Mi/OQ0DlV1PVSEHIOTHENizGNynENSXGNSTDOiixPCinOiaoNyWtOSqsNCavMSXCPzXbUkraSUThSEPeOzbeMi7qNDHtMS/vLSv8MjL+LC/9Ky75Ky3zKyvtLSrmMSrfNCzWOCzRPTG/Mii8Ny7ISULZXFjzd3f/iYv/h4r7gIX+f4j/fYj/doT/anz+X3P3WGz2VGnrRV31RF71NlXxOlbgTFqlSENeSy1NYzVXbz9ifUp1i1yClWeHmGyIm26KoHKLpXaMrHqGq3eBqnJ+p218pWl9pWeBpWiCpmmCpWuCqG2Dq22CrGx/rmh+sGmBs2qEtm+JtnOJr3KOrHiZsIStu5i/xanLyrXLzcK2vcWeqrqLl6ddSzdcSzddSzdcSzddSzdcSzddSzdcSzdeTDhdTDheTDhdTDheTDhdTDheTDhdTDpdSjxdSz1eTD5dTT5cTD1bTj1dUD9eU0FgU0JfUkFgUEBiUUFjUkJkUUJkTkFkTEJqTUloS01kUFlmW2xua4Z4e56BhK2JiLKPg6mlh6m+iKDQgpLieX7wc3H6amL/YV75SlfxPlHrOkzuP1DvQ1HqQE3nPUjlPkbiPUPfPEHaPD3WPDrPPjnKPTTBOzC5Oy2oNyevQTCtPCysNii/QTXMRj3NPjbQNzLaODXcNzHeNS7eNi3eOCrdPCrZOifTNiXZOzLwU0zyWVHZRTnHOCrNPi7UQjPSOi3UMyvwR0LhLy/uNTrzNj3uLDf/Qk3xJzP6JjL/KTL/KDL5HSf9ISv/JzD/KDDxHifwHin5KzfqIC7sJjfxLUPnIzv/WHPoLkX/XWz/X2n+WmP5VVz1UFfrSE3dP0DOOTXLPjfEQTe3PzGmNyaaMyKZNiOaOyefPCmnOC2vODDCRT+/Oze9MzHFNzXFNTTUREPbTEjaS0XRRDvIOjDENCnHNSjMNSrFNSq8PC+zOSytLyOrKB6zLSTDOS/SQzvYSD/kT0jfRT3aNzDdMCrnLy3yMjH6MjT9MTT3LzL2LzL2MDHzMC7yMC7uMy7mNS3dOS/VPTC+MiXAPjG5PTPWX1npc3H/j4/7hIb7hoz/g47/eIj/aH3/X3f/W3X/VW/4TGb4RWPxOln0O1vmP1nbXWmLQDtWRi1MXjZadUJoh053ll19nGN/nWeAoWqDpnCCp3GAp25/pm1+pWx9pWl9o2h/o2Z/o2Z/o2Z+pGt/pm2Bqm5/rGt+rWd/rmaBsWeDs2mHtW2LtHKNsHaQrnyas4movJmxwaSywa6msrCNmJ56hYtdSzddSzddSzddSzddSzddSzddSzddSzdeTDheTDheTDheTDheTDheTDheTDheSzpdSz1eTD5gTkBeTj9bTj5bTj5cUEBeUkJfU0NdUUNdT0JfTkRhT0ViUEZjT0hlTkhpTUpnTlFlU19oX3RvbpB5fqiAh7uHisGelcqji7urf6O5eJDTeYPqfHv0dmr2aWD4XWHzT1rsRlLySFX5Sln2RlPvP0rrO0XkOUHgOj7aOjrVPTjOPzfIPzXAPC+3PCyrPCuqPy2qOSmyOizBQTbGPTXINzLUPDfSNTDWNS3XNSrZNSnaNybbOibbOyXaOSfdNi7mQTvrTUTiSj3RPzDHOCjLOSrUPC/eOzT2SkblMTLwNjv2NkHxLjz/QE7vJzTzJCz3JSj7KSz9Ky79Ky74KCj2KCr3KyzvJCftJSjrJi3+PEXZGinwNEP8QVTYJjb/anX/Ymr+WmH8V130T1PlQkPYPTnRPja+OCy/RDW5SDapPiyZLx+QKRqPKBmSKBueLSWxOzfRVFLOSEfDNTTHNTbRPT3rV1XYR0LWR0HQQTnHOS/GMynKNizQNy/PODHHPTPCOTHCNS7EMy7JNC7RODPYPznfRkDkSkLeQTjaNi3dMCrnLy3yMTL7MDP7MDP0MDTzMTL0MDLzLzDzMC7vMi7nNC3fOS3XPTG/MyS+PC+3PTLTXlfpdnP/kJD5hYj4hYr/gYz/dIX/Znz/XHb/WHT/UW/+SWj9QWLzOlrxP1/iSmHBU1x8QDhTRzFNXzlbdkNnhktzlVl4nF93nWJ7oWZ9pGt9pmx8pWl8pWl8pGh7o2d7oWR9oWR+oGN+omV8o2p9pm59qWx9qml8q2V9rWN/r2OCsGWFsGiHsmuIr3CIq3OLq3yQrISQqoeMoot4h4BkcHBSXl5dTDpdTDpdTDpdTDpdTDpdTDpdTDpdTDpeTTteTTteTTteTTteTTteTTteTTteTTteSzxfTj5hUEBgUEBdUD9cTz9cUEBbUkNcUkZbUUdcT0dcT0lfUE1jUU9mVFRnVVVoVlZoV11oXW5taIZzdqN8g7qCisuKjdSYkdegisqqgrS5fZ/PgJPkhIbuf3bzc2r8Zmj3U1ztR1HwRlH2R1T3RVHyQEzuPUflOD7gNzrZOTnUPDfNQDfFQTS+PzC2Pi2tPi2qPCurOiy4QjbHSD/AOzK8MSrKOjLNNi/QNi7VNyzYOCzZNyjZOCbcOSbgOirdNC3bNC7iQTnpT0PeSDrINSXJMyTZQDLiPjX1SEToMTPyNTv5N0D4NED/RVP4Mj/wKTDrIybsJCf5MTP1LS/vJyfsJif1MTLrKSr2ODroKzHiKTHsNED/Ul7vPU3/XGn+XmbxVlzuT1TxTlPqRUndOjvVNzTUPznANizBPzK8QjWzPTGsNy2lMymhLCWcJyCaJR6qMCvHRUPCOjq9LS3IMzXXQUL0Xl3RQDvSQz3QQTnLPTPMOS/UPTTbQTnbQDvbQDzYPTvdPT3jQEHkPj7gOjrjPz3sSkfgQTvdPDTZNSzdMivnMS3wMzH1MTL4MDL0MDT0MDL0MDLzLzDzMC7vMi7nNC3fOS3YPjLANCW6OCu1OzDQW1Ttenf/k5L7h4r6g4n9fon/coL/ZHn/W3T/VHH/Tm3/Rmf7PWH0PF7vRmPfVGeiQUhwOzNTSDJRYTxeeUZoh05yk1p1mF50ml94nmN7o2d8pGh5omZ5omZ5oWN4oGJ5n2J7n2J9n2J8oGN6oWh7pGp7p2h7qGV7qWF7qWB9q2B/rWKHsmqKtW6LsnOJrHSGpneCnnV5k25wh21UZFlDT000QD5eTTteTTteTTteTTteTTteTTteTTteTTteTTteTTteTTteTTteTTteTTteTTteTTteTDhgTjphUDxgUT5dUD9aTj5ZT0NYUEVYT0hbUU9fVVRiWFllWF9pWWNsXGZrXmdsYWltZXJva4J0dJp5frV/hsqGjNqNjuGOh9efi9OtisSzgKm9eY7Me4HegXrygnf/c3L/Y2f5VVz0TVT1R1H0Q03yPknvO0TlNjvgODjbOTfUPDfNQDbGQjW8QTG3Py6rOiqtPi2xPTC8RjrNU0jHSD+6NS66MSnIOTHNODHUPDHZPTHbOy3ZNifcNibgOCvgNS3bMivhPjXsTkLkTD7SOizROCrgQjbfNy7wPjrpLzDwMTb3NDz8OEL/Tlr/TFX9PkXyMzjiJCbtLzHqLCzwMjLoKirrLy7yOjrSGx3mMzfdLDLoOELwRU7/WGPyTlfYPUPbQkXhQkfhPkPfOj7dODzYODjTOTfJODPCOTG9OjLAQTrNTkjWVlPQTk7DQ0KyNzK2OTXPS0nZTUzkUlPvWVrrU1LxWVbJNTHOPjbSQjnQQDfTPzXZQjngQzzjQT7pP0DnOD3sOT/yP0PwO0DoNTjsPj/2TUreOTPbNjDaMyveMyzlNC7tNDHyMjH0MDH0MDL2LzL2LzL1LzD1Ly7xMS7pNC3gOC3ZPzPCNie3NSi0Oi/LVk/vfHn/k5L8iIv9gYn+eof9b3/8Y3f/WHH/T2z/Rmj/QGP5OV70P2DpS2TYWmiFMzVnOzBXTzhYaERhe0tqiVBzkll0lVx1mF53nWJ5oWV6omZ3oGR2oGF3n2F2nmB4nmF4nmF7n2F8oGN6omZ6o2d8pmZ6p2R6qGB6qF18q11+rV+GsmeLtG6Ms3SKrXOGpnWAnXF0jmlpgGRSYlVGU0w6R0BfTjxfTjxfTjxfTjxfTjxfTjxfTjxfTjxeTTteTTteTTteTTteTTteTTteTTteTTldSzVfTTVgUDlfUDtcTz9aTkJYT0ZYUUtZUFFgV1xnYGhuZnNzaHlzZ3tzZ31yaX5wbX5wcYZzdpd4fKt8gcGAhtKFieCMjOaVjeOdjNqghL+edZ+gbIKsbnG8dmzSdmnyc23/bGz/Z2n+XmD7Uln1Rk3vO0TqNz3nNjziODndOTjWPTfOQTfGQjW9QjC4QC+tNym1QTSwOzGwOzHIUkjVXFPJTUW7OzK+OTDBNy3MOS/XPzTbPTHaNircNCfiNirgMyziNzDkPTXlRTniRjneQjPeQTLiPjLbMCbqNzLsMC/vLjHxLjT6Nz//UFj/XWT/Wl//T1PhLjHjMDPgLC/3REfoNjbcLCzbLS7rPkDdMzbZMzf/YmjgPEPLKjLKLTTBJirVOz3hQEXbNjrZMzffOT3cNzvNLzDMNDPNOzvVR0beUlPsYGP1aG70ZWvqXWPEQD7GRUDlXlv4aGf/b3D/amrlS0vXPTvJNDDRPjfYRT3WQzvVPjXVPDTYOTPcNDPvNjzxLTnwLDbyLjjwLDbrLDPzOT7+SkvfMy/cMy7aMyvcMyzjNS7qNDDvNC/yMjH0MDL2LzL3LzL2LjD1Ly7xMS7qMy3iNy3ZPzPGOCq0MiWyOC3DTkfvfHn/kpH/iIz/f4n/d4X6bHz4YXT7VG79SGf/PmL/Ol/6Nlz0QmLgTmXCV2FxMCxfPzBbVz5ebElmfk5riVN0klx1ll92mV94nmN5oWV4oGR2nmB2nmB1nV92nl93nl94n2B7n2F8oGJ6omR7pWV8pmR8p2J5p155p1x7qlx9rF6ArGGFr2eHrm2HqnCFpXODoHJ7lW5yimpmd2Vba15SYlVfTjxfTjxfTjxfTjxfTjxfTjxfTjxfTjxfTjxfTjxfTjxfTjxfTjxfTjxfTjxfTjpeTDRfTjRgTjheTzxbTj5ZT0VaU01aVFRfWmFoYnBybYF6dYx9dJF7cZN6cJN2cJJxdJNyeJp1fKh5gLZ7g8R/hc+GidqNi96Wj9yZis2bhbaig6OqhJGrfnmfbFubUj+8TULUUUniV1LrV1XxU1TxS0/tPkPmNTvpOTzmOTvgOznZPjnTQDjKQjbBQjG6Py+0Oi26QTarNSujLiS+ST/ZZ1zZZFrLVUu5PTO4NSvAMynOOjDZOzDaNizeMynkNi3fMSrlODLjOzLdOS/ePjDjRjfkQjXfOS3fMSjqNS7wMzHwLi/tKi70MTf/RUr/Vlv/XWL/XGHiOTzjOTzVKy70Sk3iODnYMDDbNTfMKCnMJyv4V1zdPkPWOj7SNz26HyPFKSzcPD7nQkbdNDnZLDLeMTfaMTbNKC7SMzfkS072YWX7aG75Y2z3X2v6YGz4YmvWTEzVTkrqXFrqVlTnTU3jSEbPNDLOMy/ZQTzgS0TkT0jfSkPZQDjXOjPXNTDcLi31MTv7LDz4Kjf1JzT1KTT4MDr/PkP/SkzgMS7eMyzcMyzdNSzhNC3nNC/tNC/xNDL0MDL3LzL5LjL4LTD2Li7yMC7rMi3iNy3ZPTHJOy20MiWxNyy7RD7seXb/jY3/iI3/fIj/cYH2aHj2X3L5Umz5RGP/OV7/Nl36OF3xR2TRTmCiSU1lNStWRDBbWUBebEllfE5riFJ0kVt3lV94mWB7nmR6oGV2nmBzm11zm1xzm1x0nF12nV53nl97n2F6oWJ6oWJ7pGJ8p2J7pl94plt4p1l6qVl7qlp+ql+DrWWFrGuHqW2Jp3OJpXWEnXV8lHJ2iHBuf2xmd2VfTz9fTz9fTz9fTz9fTz9fTz9fTz9fTz9eTj5eTj5eTj5eTj5eTj5eTj5eTj5fTjphTzdhUDZhTzleTzxbT0NbUktcVlZfWmFrZ3Zzb4Z9epeCfqGBfKV9d6N7daV4dqdzealzfbB6gbh9g7+AhsSFicmNjs6Uk82ak8eglb2rm7W8prLJranFppSqiG2cZkqcRTKvQTS3QTXDQzrXSUXpT0/uSkvsP0PrPT/pOz3kPDvfPTrZQDrQQDfIPjHBPTC9OjK8QDivNCynMSe8SkDRYlfWZ1zVZVnDT0K6PjK6NCnHNy7WOTDZNSzfMivnNjDjMS3kNTDiNy/fOC/gPjHmRDfkPjDeNCfmNCrpMCvwMy/wLi7vLS7yMTTzNzj2QkX2TVL8WV7pRkv2UVfZNDjrRkrdODzmQUXaNzrPLzHRMDXkSEvTODzQNzq5IyXVOj7bODvlOz7rPEHoNz3iLTbdKTLhMTvnPETwTFP9XWX/a3P/anP6YGz2Wmj5WGj3W2j0ZGToWlboV1TYQD3PMTDUNDTTMzPhQ0DjSkXpUkvqU0zhSkHZPzfYOTPbODHjMzPzLjj/MD7/MD76Kjj8Ljr/O0X/Q0j7QUTjMS/fNC3dNC3dNSziNC3mMyztNC/yNTP0MDL3LzL5LjL4LTD2Li7yMC7rMi3jNy3YOi/NPjC1MSWxNyyyOzXpc3H/ior/h43/dob+aX3zYXTzW3D3UGr6Q2L/OGD/OGH5O2HsTGi/T1t+ODZdPTBORjFWWEBaZUVjeE1qhVJyjlt2lF55mmF7nmR4nmF0ml1wmFpwmFlxmVpxmlh0m1x1nF15nV94n2B5oF95ol56pV55pFx4pFl4pFd5pVZ7p1h/qV+CrGSEq2iGqGyHpW+GonGAmW94kWpyhWlsfmRkdl5fTz9fTz9fTz9fTz9fTz9fTz9fTz9fTz9eTj5eTj5eTj5eTj5eTj5eTj5eTj5fTjxjUTljUTlhUDxdUEBaUEdcVFJfWmFhX210cop6eZmBgKiDgbB/fa97eK96drF3d7V3fL54gMF9hcSCiMSHisGNj7+Xlr6gnbysp7u2rLW+s7HIuKvQvqbWwaLRu5bQrIivb1SvXUilSDaoPjDCRz/gV1HvV1bxTk/pQEPqPT/mPD3jPjzfPTrYPTjROjHJOTDBODDAPDe5OjO3PjXCUEbHWE3HXVDRZVjTY1XDTT+8OS/FOC7SOTHXNC3fMiznNjDmNDDiMy7gNS7jPDPnQzfmQjbiOi3fMyfqNSzmLibwMC3wMC3wMzHxNTTnLS7jMzXnQkb3WF32V1z/b3XlRErrSE3hPUT+W2D/b3XfPkP/fYL/bXHqUVTUPkDGMDLWOj3zSUzuOUDxOED4PUbyN0LoLTj0Pkr/XWj/bXf/anL/Y273XWf6Xmv/YXD/XW75WWXyXF3jT0viSkfVNzTTMDHZNTTSMC7YOTXfRD/jSkTjSkLZQDjTNi/WNC/cNzHpNzfqJy/8MDz+Mj74LDf5MDr/PkX9PkPsNDTiMy7gNS7eNi3fNCzhMyroMyzvNC/0NDP2LzL3LzL5LjL4LTD4Li7zMC7rMi3jNy3XOS7RPzK2MCWyNiywNjHnb27/h4j/ho7/cIL8Y3jxXHD0WG73T2n7QmL/OWH/PGT2QWTkUmmwUVdkLydXRDNHRy9SVDxVXj9jdU1pgVFxi1t2kl96mGJ8nWR4nF9ymVpulldul1Vul1VvmFZymVp0m1x3m113nl13nlt4oVt5o1t3o1h2old2olV3o1R5pVh6pFp+pl+BpmN/oWR+nGZ7l2ZyjF9rgVpgdlJbblBTZkhcTDxeTj5gUEBgUEBfTz9fTz9gUEBhUUFiUkJfTz9dTT1eTj5hUUFjU0NiUkJgUT5kUz9hUD5dUEBeUUlbUVBaU1plYXBzcYl5eJp6fKV+gLGAgbl+frp5ebdzcrRubrZ0d8h2e8yAg8qLjcaWl8OkpL6ysLu8ubTLxrPTzLDZz6zbz6fcz6Pd0KPZy5zZwpjRqIi4gGehX0nLemfWdGe9SD/XUU73Y2PpS0zlP0HiODnkOjviOjncNzXZNTPWOzbLNzPANTDHQju5PTO/ST/GWEu5T0HOZFbRY1TMWEnFRzvEOi/NNi3YNy/hNi/jNC/fMC3fMizgNzDkPTThPTHdNyvfNSjlNyzlMCfqLyjsLyvuMS3uMjDrNDDoNTHjNzXXNznmSk71WV3uT1TXOD3XNjz5WGD/foT/fob/b3X/Z2//aXD/Zmz1XGHxWFv7Wl//VVz/REz8OEL7N0P3M0HvLDrsMD7xPUn/U1//YGn/Z3L/ZXD+Ym3/YnD/YG/9XWftU1PfRkHWODXWNDHXMTHXLy7YMzHbOTThRD3cQjrZPzfWPDTXOTDbODHgOTPmNjbxNzz0NTz2NDz2NDz3NT3yNTnrMzXjMS/eMyzeNS7fNy7hNi7kMyvpMizvMiz2MzH3MDP4MDP6LzP5LjH5Ly/0MS/sMy7lNy7gPzXMOCy/NiyvLya4OzfSWFf/mJr+e4P/bYD/ZXz4XHTwUGr1SGb8Q2X/O2T5OWD1TmzTUmSJPT9SLCFDOyZDRy5LTTVaYERaakVjeE1xiFp4kmJ4lmB0lVxylllxmFlslVNtllJul1NvmFRymVh0m1p1nF11nFt0m1h0nVd2oFh3oVd2old2olV1oVR0oFN7pVt7o116nl51l1tti1Vifk1YckNTaj5BVzA/VS88UixcTDxeTj5gUEBhUUFgUEBfTz9gUEBhUUFjU0NgUEBfTz9gUEBiUkJjU0NiUkJgUEBmVkdfUUZdUEheVFNhWmFkYG9ta4N2d5Z4eqN7fa59f7h4fLlydrZsb7RtcLdvcb51dtB8ftWJidOYmM6op8e5tsHJxbrTzrHb16ri26Xn3qXm3aLk26Ti2KPb0aDUx5vTvJy7nICpfGXFi3fKfW20VkrSYVv2cnDsWlvnS0zjP0DoPj/rPkDoPDziNjbbNTXWPTjJODPKPzi5Ni64PjO+TEG2SDvIXU3db2DUYFHGSDq9NSnFMSfUNi3cNS3bMCniNTHlOTXkPTfgPDPcOC7bNSnfNCrjNSrsNy7tNS3tMi3rMCvnMCzjMizhNC7dNTLWODfYPkDlSk7zV1v6XWT8XGT+XWX/YWn0U1vvTlbxUVv/X2f/anH/Zmz1WmDzTlTtNDrxLDX0Kjb3LTnxJzXlIS/mJzbtN0T+T1z/WmT/Ymz/ZG3/ZW7/Y239W2j1UVrlRUXePDfbNjTeNjPfNTXcMzDaMi/bNjLgPjnbPjfZPDXXOjPbODHfODLlOTXnOjbrODvrNzrtNjrvNjvvNznsNTflMzHfMizdNC3dNi3fNy7iNizlMivqMSzyMSz1MjD3MDP3MDP6LzP5LjH3Ly/0MS/sMy7lNy7fPDPUPTLCOC62MSq3NzTYWlv/kJP7c33/Znr/Xnb5VnH3Tmv6R2f8QGP8PGP1QWTlT2i6TFd5PDlMMiM8OiM8QihFRy9QVDlWZEFgckpug1h1j192kl90k1pxk1dwlFRrkk9rlFBslVFtllJwl1ZymVhzmltzmll1nFl1nVd1n1d1n1d0nlRynlFxnVJxm1Fvl1BslE5pjExigUZYdT9OaTZGXS9AVytAVy1BWC5BWC5ZTDxbTj5eUUFeUUFeUUFeUUFfUkJgU0NhVERgU0NfUkJgU0NiVUViVUVgU0NeUENiVU1cUU1bUVJjWWJrZHRxbYR2dZV6fKV5e6x5frZ4fLtvdLZlabBiZq9qbrhydcZ9fdeHhN2XlNupp9i7uc/Nycjc2L/l4bTp5Krt6Kbw6aXt5aTn4afi26fXz6HLw564r5Kpm4Gbgmyog3Cnb2CcUke6XVXdbWn3dXXvX1/kSkzmQUXrQUTsPkDoODvjNjjfPTvUOzbUQTrDODG3Nyy3PjOuPS+3RznbalzfaVvaXE7KQjbGMynRNCvZNi3ZMizeNTLpQT7sR0PgPTbVMinVMSfbMyjeMCfnNC3oMSvnLinmLynjMizjODDhPTTgQjnGLSjKNDPcQ0XwVlj6XmL3WmHzU1vxUVvpR1LqSFPvT1v8XGb/bXb/bnT0WV/jPkTpLjX0LTT7Mjz8Mj71KzntJzb2NkX/S1f3SVP1UFf4V1/+Xmb/Y2v/YGn3UlnpQkneOTfeNzHjNzXpPDjsPDzmOTXhNTHdNjDdOjPZOzLXOTDXOTDcNzHiOTToOzfpPDjjOTnjOTnmODfoODjoODjmNjbhNDDbMivaNi3bNy3eNy7iNiznMivrMCnzMCz3MTD1MTP1MTP4MDP3LzH3Ly/zMS/uMy7nNi7eOjHcRDnIOTG7NC61Ly7kX2L/g4j4bHf+Ynj+V3P6UG3+TGz/Qmj3OmD0PGDsSWbUU2edREptPDVPPiw9PCc6PyhFRC9GSDBRXDxZa0VnfFFyiVt0j1xxkFdtj1JskFBpkE1pkUtqk01rlFBulVRvllVwl1hxmFl1nFl1nVd0nFZynFRwmlJtl01rlU1qlExmjkhhiEVcfkFVdDtMaTNFYC1BWCo+VSdEWy9FXzJJYzZXSjpaTT1dUEBeUUFeUUFeUUFfUkJhVERgU0NgU0NhVERhVERhVERhVERfUkJdUUVaT01bUldiWGNqY3NxbYZ2dZV4eqN6fK13fLRzebdtcrRkaK9dZKxhZ7Fscr54e8qJid+VkeWkoeS3tOHHxNnV0c7h3cTn5Lnr5q/u6q3u6Kzp4qvj26ra06nLwqG7tpmlpY2bmIWTiHaYgXGZcmObYlezaWDPcm37i4n1dXTqW13mTE7pREjtQETsO0HpOz3fOjjbPDjfRkDTQzvDOjC6Oi+wNimnMSO/STvbYVLqal3bU0fKOi/MNCnUNivXNC3ZNDLxTUv+WljtS0baOTHXNCvbNCveMijfLibiLSbhLCXeLSXcMSnaNizZOzDXPzTCLyfENCzOOjjZQ0LfRkjgRUnkR07qTVbxUV32VmL4WGT5XGf/Z3L/bXX0WWHeO0DrMjjxLjTzLjfyKjTrJTLtKTX7PEv/U1/tP0noQUnqR0z0UVb/WWD/WF30R03lNznhNTPlODTrPDnyQD70QD/vPTvmOTXgNzLdODLaOTHZODDZODDcNzHkODToOTbqOzjiOjfgOznjOjfmOjjnOTjlODTgNS7aMyvaNizcOC7eOCziNiznMinrMCnyLyv2MC/0MjP0MjP3MDP2MDH2MC/zMS/uMy7nNi7cOC/gRjzJOTG/NC+2LCzuZmr/eYD4Z3T/Ynn9VHH+S2v/R2r/PWXzNlzrPV7jUWjEWGWIQkJnQzdbTjtHRjFBQy1KSDNFRS1MVTZTYz5idExsg1Vwi1hvjFRtjFBpjktpjklokEpokUtqk01sk1JulVRvlVhwl1h0m1hzm1VxmVNvl1FrlE5okUtljkhkjUdgh0RdgUFXeT1ScThNaTZMZjZPZTdPZjhOZTdPaTlTbT5VSDhYSztbTj5cTz9dUEBdUEBfUkJhVERfUkJgU0NhVERhVERgU0NgU0NfUkJeUUlWTVJfWGhuZnt1cYp4dJd4d6F4eqt5e7R0eLdscbNiZq1cY6tgZrBrcbt2fMaAhM6TleCfnuSuree9vObLyd/U09jd287h38bl4b7m4rzk37ng17ba0LXOxrG+taatp5uZmY2MjoGLhXmKfHGRdmubc2mobWW6b2nmiYTugX7zc3LxZWTxV1nwTU7uREfsP0HjOjfgOzfkQj3eRT/MPDPGPTPEQjWwMiSuMCLISjzcWEvWTkDMPS/ONyzRNyvRMyrWNDL1VVX/a2j6XVjjRD7cOzPfOzLjODDiNC3jMiziMSvdMCnUMCfNLyTGLyTCMCPFOSzANCfBMirMOzbXQ0HbRUfbQkfaQEjgRE/sUFvyVmPyVmH6Xmn/Z2/zWWHhQkfqOjztNTfvMjjvMjjyMj33OUP/SFX/VmHlN0DdNDvfNjvrQUT5Sk/8SU31PELpMTPpNTTrOTXwPTnzPTrzOznwOjfpNzPjODHfOzLcOzHbOjLcOTLfODLkNzPoNjTpNzXmOjjkOzjmOjjoOjnoOzfmOTXhNi/cMyzbNy3cOC7fOS3hNizlMynpMSnxMCn0MS3zMjPxMzP0MjP0MDH0MS/zMS/uMy7nNi7eNy/gQzrKNzDAMS3AMTP4a3H/cXr6ZnT7XXT6UG3/Qmj/Pmf/OWP1OF7mRWTZWm2rVlt3RT5kSj1hWUZUTztLSTRQSTdHRTBHUDNNXTlabEZme1BthVNtilJsjE1ojUppjklnj0hnkEppkkxrlFJslVNulFdvlld0mFhzmFVulVJrkk9mj0tjjEhhikZfiEZbgkNZfUBTdDtQbjhPazpSbD1YbkBacUNXbz9WcT5XcUFSRTVVSDhYSztaTT1bTj5cTz9eUUFgU0NgU0NhVERhVERhVERgU0NgU0NiVUViV1FeVmNrZn15dZB+ept6eaF4eal2ebB0eLVscbNjarBcY6teZK5pb7l3fceBh9GIjNOZnd2jpeCwsuO8vuXGx+PPzt7U09jX1tHZ18vZ1sfY0MXSycDMw77Fubm0qKyjmp2Ki4Z5enR5dnF1bGV/bGWOcGiOYVudYFvAc23YeXXwfn38fHn/cnH9Y2P2U1TwSEjwRELqPjrhPDbhQjzROjPTQzreVUvCPjK4Nim9OSzCPS7IPy/QQjTXQzXWQDHRNy3RMzDqTE36X13yV1PfRD/ZOjTbODHhODHmOTPnOTLnOTLiOjHbOjDROSzKOCvFOSqxKRm4MyLIQDLTST7SREDLOzrMNzvPOkDSOELiSFLtVWHwWGT1Xmf3YGnqVVvcQUXlQD7sPzvzQEP7R0r/TFT/UVn/VF3/VmDhMzzaLzXdMDToODv1PkL4Oz/3NDjzMDTtNDLvOTbxOTfuNTPrMjDqMjDnNDDhNC7jPDTgPTTfPDXeOzThODPkNzPoNDPoNDPpOTnnOTjoODjrOTnrOTfpNzXiNS/eMyzcOC7dOS3dOS3fNyrkMynoMSnvMCjyMSzxMzPwNDPzMjPzMTHzMS/yMi/sMy7nNi7gOTHZPDPMNzHBMC3RQEP/bnX9a3X5YnHwUmn1SGb/O2P/NWH/NmL8P2XkTmnLXWqLR0ZqRjpeTT1eV0RZUj9SSjdPRjVJRDBESi5HVTJTYz5ec0hnf01qh09qiktnjEdnjEZmjkdmj0lokUtpkk5rlFJtk1ZtlFVxlVVwlVJrkk9njktjjEhgiUVfiEZfhkdegkVbfkRZd0FWcj9Vb0BZcEJdckdedUdbc0NZdEFYc0BOQjJRRTVVSTlXSztYTDxaTj5cUEBeUkJhVUViVkZiVkZhVUVgVERhVUVmWkppXlpuZ3d1cI58eJl7eaB3eKZ2d61wda9qb69jaKxgZ69gZrBlbbZxeMB+hc2JkNiPl9iZoNahqNaqsdu0ud+6v9/Awd3Dw9vHxtjGw9TFwdDCusm8s8S7sMG1qLymmK+Wi5yIhYxxcXF1cXBwZmV3aGWGbmqEX1mVZF+bWlS5ZmDZc2/wenb/e3n/dnX/aGj8Wlj+Uk71SELmPTjoRT7ZPDXbRz3qXFLFOzDEPDC9Nyu/NynHPi7RQzXUQjPUQTHYQjTSODbYPj7dQ0PcQkDWPTfVODHYNy/eNy/lOjPmOTPlOjPiOzPbPjXWQjbRRTjMRzauLRi8OyXNSjjRTD3GPTW7MCvAMDDKOT7XQUriTFfrVWDwWmXwXWXsWWHfTFTUPkDPNC/YNy/gOznqQEDyQ0j1RErxQknuP0biNTvfMjbjMzbvODz2ODr4MTT7LzL8MTTvMjDwOTXxODXsMC7oLCrnMCzmMy/hNC7kPTXhPjXgPTTgPDPjOjXmOTXqNjXsNjXsNTfsNTftNTfuNjjuNjbrNTTkMi7eMSveNy7dOS3dOS3fNyrhMyjmMSbtMSjxMSzwNDPuNTPxMzPyMjHzMS/yMi/sMy7nNi7iOzPSNCvSOjXGMjDoVln/cHj5Y27yWmnnSWDzRWb/OGL/MF7/NWL/QmjcTGWxUFlrNjBeRzdYSzpVTjtbTz9WSTlNQDBKQzBARixBTy5MXDdYakBieEdmgUpoiElmi0ZlikRji0JkjkZljkhnkExokU9qkFNrklNuklJtkVFoj05ljEtiiUhhiEdgh0hgh0hhhUhfgkhffUldeUhdd0hgd0tjeE9jek5ddUNbdkFbdkFKQzNNRjZSSTpUSzxXSz1ZTT9cTz9eUUFkV0ZlWEdkWEhiVkZfVUliWE5nXlVsY2Z3col6dpt6dZ50c59zc6V0da1scK9iZ6lcYKlhZa9mbLhudMB4e8iDhtOPk92XnN6bodWgp9Oprdqus92xtN2ytNu0tNq2tNu1sdazrdGup8mrocSqnsKlmb2Zi6+Ifpl8eIZkYmdpZWZkWltqW1h7Y195VlCSY12KTkaiVU29YFnWa2Xxd3L/f3v/enf/bmr+YVz3VE/pR0TuT0vdQj3eR0DqV0+6LCK+MSe+NCfIPy/RRTbLPi3BMiLKNyfbRTfeRT/TOTfMMy7ONjHUOzXXPTXdPDThPTTkOzTkOTLeNS7XNCvPNSnKOCvFPCzCPy3VVD/IRzK9PCm/Oy7DPTLEOzXCNzTCMzXcS1DeTVLhUFXlVFnoWV3lVljcTVHTQ0LJNSvRNyvZODDdNTLiMjTlMjbmMTjnLznsND7sMzvzNT/7OUL9ND76KzX/KDP/MDr4LTP5NTn5NTnwLi/rKivqMS/oNDPiNTHjPDbgPTTgPTThPTTkOzbnOjbsODfvNzfsNDbrMzXsMjXtMzTtNTXqNDHjMS3bMCjeOCzdOivdOiveOCjgNCbjMyTpMybsNCzuNTLuNTPwNDLwMy/yMi/wMy3sMy7nNi7kPTTNLybXPjnMMzX5Ymf/b3n3W2nwTmPqQ135RWj/OmX/MF3/NmH2RmrJSl2TQkhTLSRXSjlTTDpPSDZbTz9VSTlGPy9IRjE+QidASihJVTFTZDpfckVlfUtnhEpliEhjiENhiUJji0RjjUVljkpnjk1oj1BpkFFskFBrkE1mjUpjiklhiEdihkZihkhjh0pfgEdef0hffUlgfEthe0tke01mfE5mfk5deENdekBee0NEQjZGRDhLRzxQRz5SSD5YSj9dTT5gUEBgUT5hUj9gU0JfVkdjWlNnYl9vam5zb353cZN6dKB+eKh5d6lwcKZnZ6NgYaJcX6RgYq1maLVvcMB5esyEgtaOit+Wkuecmeagnt2hodejo9mkpNqmo9imodelodSmn9OlntGknM2imsmimciflsOZjbuOgrCDfJ5ybn1pZ2xkXmBnW1trWVVyV1B9V06MV0+VUkmpW1G1WFDBWlPYa2TseXL5gnz/i4b5dXH/dXPtX13gUU3ZRUPvWlTMNzHFMirFNyvDNyjANyfDNybGOSjKOyvRPS/VPzHSOC7WPDLYQDXUPDHNNSjONCjYOi/jQTbgOTDhOTDeNy7XNyvPNynJOirGPyzEQS/CPS7GQDTLRTrNRzzMQzvFPDS8My22KybHPDnQRULaUE3gVlPjWVbhWFLYTkvQQzrMOyrTOijcOCziNS7oLi/sKjLwKDP0Jzj6LT77LED7Kj/9KT//KD//Jj//JT3/JT3/Izr/Jzr/Kzz+LDn0LDbtLjXoNDXnOzndODTdOjPeOzTgOzXjOjXmOTXpNzPrNTTrMzXsNDbrNTTpNTTnNTPiNS/dNSzbNSncOCzbOSrcOSjeOSbfOCbiNyXjNiXmNCbsNS/tNDHwNTDxNC7xNC7tNSvrNi3lNyzgOTDYNy/VOjbbP0L/bXf/YnP7U2r1SWP/S2r2Nlv/Nl//PGf4PmPnTmqvSVZeJCNFLSE/OidIRTRQTTxQSTlFQjE+QjE/Ry9CSCZFSyVLUy5TXThba0Rhdktkfk5kg0pjhkZgiEJhiUBji0JljUZqj0pskFBuklJskUxqj0lnjEdmi0hmikpmiUljhUhhg0dlhEtkgUlif0lkf0pnf0tngEllfkdhfUNcfD1cfz1fgkI9PzRAQjdGQzxKRT9QRT9URz5bSz5eTj5hUD5gUTxeU0FeVkljW1hoY2lubHlzb4Z1b5V2cJ50cKJwbaJnZp9hYZ9dXqFdXaVlZLBrarp1c8Z9e8+GgtmOiOCUjuaYk+WbltmcmNWdmdaemteemNadl9WeldSdldGeltGclM2ck8qbkseakMSTibuIf66CeJ10a3xtZGlmXV5mW1lpWlNvV017VUqKVkuaVkuxXVO7WlPBWFLTZmHgcWrjdm/tfnf9h4X/h4X3dXXuZ2TjVVPrWlXHMizCLyXFNynDNybBOCbBOCbEOCfIOyrPOy3TPS/VOSzVOSzTOizSOizROSvROSvUOCvYOCzfOzHgOTDcOC7WOCzPOSrIOSjBOia+OSa+NirBODDGPTXJQDjKQTnIPzfFPDTDOjK/NC3HPjbSSUHYT0faUUnXTkbMQzvDNyrLOCbTOCTdNynlNCztLy/0KzP5KTf+KTv/K0L/KkH/KUH/J0L/I0D/ITz/Hj3/Hjv/Hzr/IDv/JTv/KTv3LTnwMTnqNzrlOzvcOTTcOjXeOzTgOzXjOjXmOTXpNzPrNTTsNDbsNDbsNjXoNjTkNzHfNi/cNSzZNSnbOSrbOSrcOSjcOSbeOSbfOCXhOCXjNibnNSvqMy3rNCzrNCzrNSrqNSrkNyniOCvgPDLVMy7TNTTzVFn/ZXP/W3D2SGP/SWj/QWT/O2D+NFz6PGLyTW3NTGKJOD9TKiZBNSk3Oik7PCxCQDFGQDBAPy09Qi4/SC09Qx1LUCdcYjxmcEtodlJme1JmfVFlgU5hg0ZhhkFhiUBjjEBnjEZqj0prkE1tkk9tkkxqkEdojUhnjEdnikpnikpmhUplhElmg0tkgUlkf0hkf0hngEdngEdmf0VifkFegT9fhD9ih0I3Oi87PTJAQDhFQjtLQj1PRTxWSD1ZTDxeTj5dUD9cU0ReV01jXV1pZm1vbXtzcYlzb5Rxa5lqZphjYJVcW5RaWphcXaBcX6ZoarVub793eMqBf9KHg9iLh9yQiuCSjd2TkNOTkdCTkdCTkdCUj9GTjtCTjM+Si86VjM2Ti8eUi8SUi8CTi76MhLODeqWAcpV8ZXd1XmZpW1tlXFdkW1JnWUxyVkiEVEijWlG9YFnJXFnQWljbY2Lha2nfb2vjdnH7iob/iob/hYP/fXn3bmjuYVjFNSzAMibFOSrBOifAOSbAOSXCOSfGOinMOivQOizWOi3UNirONSfQOCrUPi/UPi/PNynLLyLaOi7aOC3ZNyzWOCzQOivJOinCOSa+NyS+NirANizCOC7FOzHHPTPKQDbLQTfMQjjHOjHLQTfPRTvQRjzSSD7RRz3KQDbFNyvMNiXWNibfNyzoNTDxMDP2LTf7Kzn/Kjz8Jz38Jz37JT35Izv7ITr6Hjf8HDf+Gzb/Hjj/Hzb/JDj9Kjv3MjzxNj3rODvkOjrcOTTcOjXeOzbgOzflOTXnODXpNzXrNTTtMzbuNDftNTXqNjXmNzLhNi/cNSzZNSnaOCnZOSnaOSfbOCXdOCXeNyTgNyThNiXhNSniNCnjNSrjNijkNynhNyjfNyrbNyvdPDLQMSvYODj/a3L/XW7+UGnxPFv/SGz/N13/PmX5NVvuPmLmVnGqP1FhIyhMLys7NysxOCgzNyY6OylCPSpBPChAPilCQiY/Rh1YYTRzflSAjGR3h2BpgFRifE1hf0lggkVghUBhiUBkjUFojUdqj0prkE1skU5uk01rkUhpjklnjEdoi0toi0toh0xnhktmg0tlgkpjgEhkgUlmgkhmgkhlgUZigEJjhkRlikVojUgyNSo2OS47PDRBPjdHQDpLQj1TRj5WSj5YTD5ZTT9ZUUReV09jXmJpZ3JvboByb4xybZVqZ5RhX5BXV4tUVY5XWJhcX6JhY61sbrtyc8N7fM6Cg9WIhtmLh9uMiNyNiteQjdKPjc6PjM+Oi86Pic+OiNCOhs+Nhc6PhcqOhcaPhcGQh7yPh7aJgqyAeJ1/b4yAX3B8WWBsWFlkW1ReX1FfXElqV0Z9U0WeVUy+XFnRWlzZWFzkY2fna2vhcGzleHPsfHjtenX+g37/hoH/gXv1a2HJPDLEOCnCOyjAOyi/Oya+OiXBOifFOSjIOSnOOCrZOy/UNirONSfPOSrRPi7RPi7LOCjHLyHSNinTNSnTNSnTNyrROSvNPCvIPSrEOynEOi3EOi/GOTDGOS/HOjHIOzHJPDPLPTPURT3TRTvQQTnLPTPMPTXPQTfPQDjOOzHPNijZNSnjNi/rMzHyLzX3Kzb6Kjr8KTz5Jjn3Jjv4Jzz4Jzz7Jjz9JTr/JDr/Izr/Izj+Izf7Jjj5LDv3NT7yOT/oODrgODfcOTTcOjXeOzbgOzflOTXnODXpNzXrNTTuNDfvNTjuNjbqNjXmNzLhNi/cNSzXNSrZOSvZOSnZOSnaOSfbOCfdOCXeNyXeNyXbNSXcNijdNyfcOSjcOSjbOijZOSnXOivXOjHRNC/sSUz/b3n/Vmr5RWD4PF//QWf/M1z/OGL4PmPoTWzFT2WAMD1KHSBDMS0xMScvNyg1PCw+QS5CQCtCPCRFPiRJRiVVXDBwfk2Pn3KXqHyDmG1qhFdfe0pdfkVfg0NhhkFji0Jmj0NrkEptkk1tkk9tkk9vlE5skUtpjklojUhpjExpjExqiU5piE1nhExlgkpkgUllgkhng0lohElng0hkgkRnikhpjklskUwuNCgzNis4OTE8OzZCPTlIQD1NRD1RRz1TST1TSz5VTkRaVVFhXmVpZ3Vta4Fsa4praZFiYI9YVohQUIZRUY1YWZpgY6pmarRvcsF1eMl8f9CDhNaGh9mJiNiKidmLitaMi8+LisyKic2Jh9CJhdGIhNGKg9GJgtCMhM+LhMiNhcGNhrqNhrCHgaV+d5Z/bYWEWWqAU1puVlRjXFJaYU9aX0hlWkR4VUKTTUW4VFLQU1fbUlnlXmToZWrja2zmdXHkdW7ib2j3fnb/gnv/h370bGDJPzLBOCjAOyi/PCi/PSfAPCfCOyfFOifIOSnNNynYOi/ZOC7SOCzPOSvMOivJOirIOSnJNyjPOSvRNyvSOCzRNyvPNyrMOCrLPCzLPi3KPDDJPTDKPDLJOy/IOjDHOS3FNy3FNSrQQDfQQDXNPTTJOS7LODDOOzHNOjLMNSzQLyXZMCnkMjDsMjX0Lzj5LTn7Kzv8Kz78LT/8L0D8L0D8L0D+L0H/Lz//LkD/LkD/KTn8KTj4LDj1MDrxNj3tOD3jNzfcNDPcODbcOjfeOzbiOjflOTfnNzfqNjXsNDTxNDjxNDjwNjftNzbmNzThNi/aNizXNSrYOCrWOSjWOSjYOSbYOSbZOCbaNybZOCbVOCXVOibWOyfVPSjUPSjUPSrUPSzUPC7RNy/bPDn/XmX/YXH/UGn3PFv/QWn/NF//NWH7MVn0S2zbWXGVPk5aJS1DKSw6MjAuMSowOC04QTA9Qiw8PCJBPB5VSChgWzV8hlSQom6qvo2ovo+OpXdvi1thf0tef0ZghERjiEJnjURskkdvlE5wlVBvk1Nvk1NvlE9skUtpjklnjEdpjExpjExpi09oik5nhktlhElkg0hlhElohkpohkhnhUdlhUZpjktpkUtslE4rMSUuNCo0NzA4OTQ+OjdCPTpIQTtLRDxORz1ORz1QS0VXU1JfXmZmZXVnZ39nZoZiYYlbWYpSUoZOT4dSU5NbXqNlabNsb751d8p6fNF/gdaDhdiGh9mGh9eIh9WJidOHiMuGh8iGhcuFg86FgNCFgNKHf9KHgNCNhdKMhcuNhcGMhbiLhauEf517do19a3uEVmOBUFZuVVFkXlBbZU1ZY0piXkVzWEOPT0W0V1LQVVrbVFvnXGPoYWflZ2rocG/seXLmcWj3fHTzc2r+eG3mXFHEOyu+NSPDPCnBPSjBPSjDPCjEOyjIOynLOSrPNyrXNizYNy3UOi7OOizHOinEOCfHOyrKPSzPPS7WQDLZQTTWPjHOOCrJNSfKOCnLPCzJOizIOizJOy/KPC7KOi/IOSvINSvHNSjKNizPOy/SPjTTPzPWPzbVPjPONy7JLCPSKyXcLSrnMDLwMzn2MTv6MD79MEH+MUL6MUH3MUD3MUD2MD33Lzz3LTn6LDn6Kjf8MDz5Lzv0MDrxNDvtNjvmNjnfNTXaNTPcODbdOTffOjbiOjflOTfnNzfqNjXsNDTyNTnyNTnwNjftNzbmNzTgNzLaNi3WNirVNyvUOCnUOCnUOSfVOCfVOCXXNyfUOSXQOSTOPCXPPSbPPyfOQCjOQCrQPy7TPDHRNjHrSEn/ZnL/T2T/SGb7N1v/QW39L13/N2HyNFjkUWu8VWZtMTlFKCxFNjk3MzI1NDI2OTI2PS01OiMzOBhDQx9qYTqFgVSfrnepwYe1zZmvx5WSrn12lGJlhlFggkZghUJjiEJpj0ZvlUpymE9yl1JxlVVwlFRvlE9skUtojUhmi0Zoi0tpjExqjE9pi09nhktmhUplhElmhUlph0lqiEpph0lnh0Zqj0prk01ullAoMCMrMScxNC01NjE3NjQ8ODdAPDlDPjhJRTxIRTxLSENSUFFcWmVjYnRiYnxgYIJfXohaWIpUVIpUVJBcXaBnabNwc8R2eM17f9h+gtuDhN6Eht2EhdiDhNaFhNSGhdGDhsuChciDg8uCgc2DgNGFgNSIgNWIgNONhdKLhMiLg76Lg7KJgqSBfJN3cIB3ZnB+VVt8UFFuVU5mX09eZk5aZElhYUdxXUWJVEatXVTIWlvUVlriW2HmXWTpYWXubGz1enPtcmr3eG/eWVDlW1DSRDjDNSfHOinFOSjEOyjFPCnIPSjKOyrOOyvROSzUNivTMCfVNCrSOCzNOyzHOyrCOyjAOyjDPCnIOyrVQzThSz3eSDrTPS/LNSfKNijNOyzIOSnIOSnIOSvIOSnKOCvLOSrMOCzLNynNNivSPC7XPzTYQDPbQTfbQTXXOjHSMSncMC7lMTTvNTr1Nj75ND76Mj/6MED5MEDyLjzvLzztLzntMDfvLTXvLDLyKzLyKzL2MzvzNDvyNTvtNjrlNTfhNTXeNjXcNzXcODbdOTffOjjjOTnmODfpNzfqNjfsNDb0NTr0NTrxNzruNznnODXgNzLaNi3UNivTNyvROCrQOCrQOSjQOSjQOSbROCjQOSbLOSLIOiLIPSbHPyfIQCjIQCrMPS3POzHXOTb8VVz/XnH/R2P/P2H/O2L/N2f+M2L7OGDtRmTFTmGJQElUMTVBNTVAOjw6NDY/NTY+NjM4OSs2PCI5Qx5TWi6CgVGip3GxxYqvy46wy5Smw42Srn17mWVoiVJfgUVeg0BjiUBpj0RvlUpzmVBzmFNxlVVvk1Nvkk5skEpoi0dmiUVnikppjExpi05pi05miEtkhklkhkllh0ppiUpqiklpiUhmiUVqkkxslk5vmVEmLiEpLyUtMisxMy4zMzM3NjQ6OTc9PDdHRD1ERDxIR0NQUFJaWmRfYXBgYHpcXH5gX4ldW41ZWJFdXZtnZ61ydMF6fNF/gNyBhOGCheSFhuOEheGDg9uBgtWDgtKDgs6Eh8yDhsmEhMyDgs6FgtOHgtaKgteMg9SNhdCMg8SLgreKgquGgJx/eIhzbnVxYmV3WFZ0U0xqVktnYE5iZk9fZUljYUhwXkZ7UkCeXE63WlPGVFPXVlriV1zqWWDyY2X3cW7wbWX3cWjRRDvUQTfFMSXINCbUQzLHOCfHOijJOyfNPCnROyzTOizYNy3ZNi3PLCPPMSbONinLPCzHQC3CPyu+Oye8NyTANCPRQjLjT0HlT0HYQjTLNynLNynQPi/KOyvJOirHOCjGNyfINifKNijOOCrQOCvTOy7VOy/VOS3SNirVNyzaPDHdPDLcNzHoODjxOD34O0L7OUL6NEH2MD3yLDvvLDrtLzvqMTnqMjrrNDjtNDnxNDj0MzbzNTfwMzfvNjvtOTzpNjniNDXeNDTfNzbgOzndODbeOTfhOTjjOTnmODfpNzfqNjfsNDb0NTr0NTrxNzrsODnmOTXfODLYNy/TNyvQOCvNOSvNOSvMOyrNOirNOijNOirMOyjFOSLDOyPDPSTCPifDPyjGPyzKPC7QOTLfPD//XGb/UWj/SWb/OV3/PWj5Ll39PGjpO1zlXHCmTFZeLTBHODVCQz48ODk/NDhGMzdDNDE9Oik+RChHVi1icz+Qm2GtvX+xy4yryYumw4uduoSOrHp7mWVmh1BafEBegT9hhz5pj0RvlUpymE9yl1JwlFRuklJvkk5skEpnikZliERmiUloi0tpi05pi05miEtlh0pkhklliEhnikhoi0dqikdni0Vrk0xtl09wmlIpLyMpLyUoLSYrLSgvLy8zMzE3NzU5OjQ9PTU/QDhERUBLS0tRUVlWWGVbW3NeXX1ZWIJbWYteXZZlZaNubrZ3eMh/gdiEheKMjO6MjPCKiuyGh+SCgtyAgNaCgNODgs6CgsiDhMeDg8uEhM6Gg9CIg9OLhNKMhM+KgMWKgLyJgK+HfZ+AeI13b3prZWdmXVhtW1FtW01pXExmXktkX0llYUhoYElvX0ZvUDuFVUGmXlDAYlrRWVjdUVTuU1v4XGD5Z2fmWVLURDzONzDRNy/XOjHWPDDUOy3POSrNOijQOinROinUOCvYOCzcNSzcNS3QLyXNMynMOCzKPi/FQC/CQS6+PSq9OijCOSm+MCLpV0rgTEDDLyPRPTHOPC/HOCjKOyvJOinIOSjHOCfINybJNibLNSbMNCbQNynXOy7cPjLcPDDZNyzaOC3iPjTsQzz1QkXyOT/xMz32ND/2MkDxLTvtLTrtMj3sN0DmNTvkNTrlNzjrODvwOTvyODnvNzfyOz3uPDzqOjrmODfhNzffNzbcNzXcNzXeOTfhOTjjOTnmOjrpOTvsOTztOTzvODz0NzvzNjrwODrtOTrnOzngOzXXOTDPNyzKOCvIOSvHOSvGOinHOinIOynIOyrHPCnBOSPEPSe+OiO2NB68OSXJRDPPPzbKMC7/XmX/Vmf/SWL/PFz4MVj3MFn7NmP1QmnnWW+sRlFvMzNOMyxCPzY+QzxBODlALTFMLzNLMi5COShESSlabT9+ml+euHeoxYKryYufvoKYtoCUsn6CoG5mhFJZd0NZez9egT9jh0Fpj0ZulEltlUxslE5rklFskFBqjUlmikRjhkJjhkJmiUloi0tniUxmiEtojE5ojE5ni0tmi0hlikdnjEdrj0ltkkxxm1NynVV0n1cqMCQpLyMpLicsLikvLy0yMjA1NjE3ODI7PDQ+PzdDRD5JSUdPUFRTVWFYWWtbW3VcWn9eXYlkYpRraqR1dLp/fs6Hh9+LjOmNje+MjPCJieuFhOKAgNiAftKAf8+BgcuFhsmGh8iHiMuJiM6LiM+Mhs6NhsyOhciKgLyJf7GGfKGCeJF7c4B0a25sYmBlXVJlX09lXkxmXktmXktoXUlqXkhrX0lvX0Z3X0d/W0OSWUatWkzHVlDeUlP1UVj/WF/wVVPjS0bZPjnVNjDZNi/cOTDbOS7WOSrTNyjROCjSOSnUOCnXNyvcNSzfNCzdNC3OMCfJNSnIOSvHPi7EQS/BQC2/PCq+OSjEOCnLPC7kUkXcSDzINCjMOi3IOizCNCbKPSzLPCvKOyrKOyrLOinMOSnOOCnQNynTNyrWOCzZNyzYNCrVMSfYMSjeNy7nPDX4REfxOD7tLznvLzrwMD3uLjvrMTzrNj/lNj3cMzbYMjTfOjjuRET5SUn4REPzPz7pOjfnOTjlOTfiOTbhNzfgODfhOTjhOTjgODfiODjlOTnnOTrpOTvsOTztOTzvODzzNjryNTnuNjjqODjkOzjcOjXTOS/LNyvGOCrDOirCOirAOyrBPCvBPCnBPCvBPCm9OSTCQCq7OiWzNR+6OyjBOy/KOTTYPD//XWn/UGT/QVv5OFf2Nlv1O2D0PmTjSWWrP0yDPz5gOzNHOy86PjA4PjJGPDpSPj1OMC5TOC9WSzdjaUV4j1uNsHCdwn2hxoGauX2auYCatoONqXhyjl5ZdUVUcD1ce0Jff0BihkBpjUVtk0hslEtrk01qkVBpkE9njEdliUNjhkJkh0VnikppjExpi05oik1pjU9pjU1pjktojUhnjEdojUdskkltlUxwm1NxnFR0n1ctMSMtMSMsLyYsLikvLy0xMS8zNC81Ni46PDE8PjFAQjdGR0FLTUxRUldWVmJYV2lcWXReXX9mZIxwbqB6eLeFg86Ni9+QkOqQju+OjO2KieeHhN+Bf9N/fMt/fciAf8WGhceIiMaKisqMismOicmNh8WMhL+LgreJgK2GfKGAdo97cIB1anBvZWNpX1ZjXU1fYUxfYUtjXkpnXEpsW0luXEhvXUlyXkZ3YUl4WD+HUz2jVkTHWE/jVVP4T1T+TVPiPj3ePDfdODTeNzHhNi/iNy/dNyvaNyjUNybTOCbUOSfVOCfYNindNSrgMyzdNC3LMyjENirCOCvBPC3CPi/CPi/BPC3AOCrDNSncST/aRjzVQTfPPDLENirEOi2+NibGOinHOinIOyrJOirLOSrLNynMNijONCjVOS3VNyzXNCvXMyraMyvfNi/lOjPpPDjwPD3tNDnrMDftMjnuMzztNDzrN0DqPUPdNzvhQUHsTk34WVX9WVf6UU7vQj7lODTiNjLgNzLgNzTgNzThODXiOTbkOjrkOjrhNzfkODjmODrpOTzrODzsOT3rODzsODvvNTjvNTjsNTfnNzfiOjfZOjTPOC/HNyzCOCu/Oiu9Oyu7PCu7PCu7PCm7PCu7PCm4OSa9QCqzOSSxNiS2Oyu1MCfDNDDsUFT/W2n/SmD1OlXwN1bxQF3vSGbnSGTNTmGCODllPzZSQDJEQTA5PSw1Nyk/NyxMOjBGLiRSPSxnXUKBiF+TqnSXu3uWwXqWv3uUs3qcuIeatIWAmm1ddkxIYjVOaDhcd0JffT9jg0BojERskkdrk0ppkUpnkExnkE5kiURkh0NjhkRliEZoi0trjk5rj09rj09rj09rj09pkE1okEpnj0hpkUhslEtvmU11oVZ0old2pFkyNCYwNCYxMiowMSsxMi0yMy4zNC40Nis5Oy07Pi0/QTNERjlKS0VOUE9SUVdUVF5YVmRcWm9kYX5ubJR6d6yEgsOMidaRj+OUkeqTkOuOi+KJhdmCf8x/fMN/fL+Afr+EgsGGhcGJiMKNisOMh7+LhLiHf66FfaSFe52Ado55bn5yZ21tYWFrXlZpW1BjXEpeYUxdYUpjXkpoW0ptWktxWkp0Wkl2W0ZzV0F4UjuKUT2rWkfNW1DjVFDwRknxPkHbMi/cNS/hNTHjNjDjNS7hNSvgNinbOCnWNibTOCbSOSfUOSfYNincNirgMyzaNi3JNyrAOCq8Nyi9OSq/PS3CPi/DOy3EOCvGMynpVUvUPTTMOC7RQTa+NCfAPC3APC3AOCjEOCfFOSjHOinIOSnLNynMNijNMyfSNirUMynVMincNS3jOjPpPjfsPznsPTroNDXsNTnvNjzuNTvqMjrmMznkNz3iPEDzVVb8YmL/bWr/aWTzVlHkQTzfNjPeNTDfNjHeNzHeNjPfNzThODXiOTblOTnmOjrlNzjmODnoODvpOTzrODzrODzrODzsNzzvNjvuNjjqNjflOTffPDfWPDTMOS/FOSy+OSq6Oyq3PCq1PCm1PCu0PSm0PCuzPCizOie3QCytOCatOCezOy2rKyLDNTT9YGn/VGT6R13wPFXrPVjoSGDhT2TST1+0U1p2R0FYSDlLRDJGRTFCRTA9Pyo6OCM7Mx4/Mx1QRypua0iKk2aXq3aTs3SOt3ORunieuoehuIyQpn9sgltLXzpCVzBNYjdZcT9gfEFkg0BpikNskEZpkUhnkUllkEtljkpih0JjhkJkh0VnikhqjU1sj09tkVFuklJskFBqkU5qkkxpkUppkUhpk0dtl0twnE92pFl3pVp5p1w3OCg2OCo3Ny01NjA1NjE2NzI2Ny82OCs7Pi09QC1AQy5ERzRJSz5NTkZRUE5SUlJWVVNZWF1hX2xraYF1c5uAfbKIhseMitOVkuGUkeKQjdyLh9OEgcSBfbp/fLV/fLOBfreEgbqHhLmJhbeKhLKGf6iBepuAeJCAdIh6bnpyZmptX15qW1RpW1BqWktmWkpiX0xiX0xlXkxpXEtuW0xyW0t3XEt8W0h/VkKHUz6bUkG2VkbPU0naR0DiODjlMzPdMS3fMy/iNTHjNC/hMyzfMyneNincOSjTOCTQOSTQOyfROifVOCnZNyrdNSzYNy3GOiu7OSm1NiW3OCe9OyvDPi/HOy7HNyzQOTD1XFTWPTXJNSvPQTW5NCW3Oii8Py3AOyrDOirGOivIOizKOy3MOi3POC3RNy3QMyrSMSnWMSveNzHlPDfqPjrpPDjmNzTpNzfvOzzwPD/rNjvlMjjkNTroQkbtTU//eHf/cW7xYFvdSkPRODPRMi7cNzXnPzzgOTPgOTPgNzLgNzLiNjTjNzXlNzblNzbnNznnNznqNzvrODzrOD7rOD7oNz3qNzvvODzuNzvqNzrkOjrfPTrWPTfLOzLDOy+6OCq1OiqzOyqvPCmvPCqsPCisOymsOymrPCmtPiunOSinOSqqOC2sLynLQEP/aHL0TV7zSFvuRVrlSFvZT17JVF23VFecWFVkTT9QTTpMRzRLRjJGRC1AQyg+RSQ/SSRLVi5cZzx4gVSMmGiRpG2PqG6PsnKXuX2ftoiSp4B1hmRSY0M/UDBCUzFPYTlXbT5ie0JlgkJpikNrj0VpkUhmkEhikEhjjkdih0JmhkNnikhpjEprjk5tkFBuklJvk1Nrkk9rkk9rk01pk0tpk0lrlUlvmU1ynlF2pFl2plp3p1s/PS49PjA9PTM9PTU9PDc8PTc7PTI7PS8/Qi9ARC1DRy5GSjNLTDpOT0FRUUlSUkhZV0paWk5gX11nZXJxbol7eaGDgLeHhcSPjNGPjNONis+KhceDf7p+ea96d6Z5dqV7dqx8ea6AfK6DfamDfaN/eJd8dIt6coF2a3NyZmZuYF1qXFNrW05sWkxsW0trW0tpXU1nXk1pXU1qXU1vXk5zXk16XU2CW0qTYE+bVkenTkC4Sj3FQDfPNjDYMSveMSvhNTHiNzDiNS/iNC3gMineNCfcNibaOyjROSTNOyTNPCfOOyfROinWOSrZNyzTOS3CPSy1OiiwNSOzNiS7OSnEPC7JOy/LNy3ZPzf4W1TjSUHOOjDMQDO4NiasMyC1PCm9Oii/NyfANyfDNyjFNynJNyrONyzRNy3ZPDPcOzPfOjTlPDfqPjrrPjrnODXjNDHoOTbrOzvsOjroODrsPkD4T1L/YmX/cHD5aGXjVVHKPTbAMSvJNDDWOzffPTvgOzniOzXiOzXiOTThODPjNzXkNjXlNTXmNjbpNjnqNzrqNzvrODzrOD7rOD7oNz3qNz3vOD3sODvoODrjOzrdPjrTPjfKPTPAPC+2OCmyOimuOymrPCmpPCioOyemOyelOiilPCmgOSigOymgOSqiNiq1PjjbVFj7ZXDuS1zvSV3pSl7bTVvJUVq0VlagWlKKYFJQSTdJTjpOSTVIQCs7NRs3OBg+TyVMZjZsilR3lFyEm2WJmmSNm2aRomyVrHSYsHyDlW1ufVxRYEM8SjA5RixBUDFPXztXaj1ke0Vmg0NrikRskEZpkUhlkUZhj0ZjjkdjiENpiUZqjUtsj01sj09sj09tkVFuklJtlFFtlU9tllBslkxslkxumExynk9zolJ7rF17q196ql5FQjFEQjNEQjZDQztDQztDQztCQjZCQzNERjBFSC1HSi1KTTJPTjlSUT9UUkVVU0RcWkNcXERcXU9hYWFpaHhycZB7eqaBfrWGgr+Ig8OIhMGEgbp/e655c6F0b5dxbJVxbZ9ybqF2cJ53cpp3cpJ0b4Vza3pyaW5tYmBsX1dqXFFrW0xtXExvXE1wXUxxW01xW05vW1BtXU5sX09tYE9zYE97YE+GWk2fX1OlUUeuQTq6OzTGNi7OMSrWMindNSziNzDhNi/hNC7hNC3gNCrdNSjZOCbUOSXPOiLKPSLKPiXKPifNPCnSOyrVOSzPOy2/QC2xPCisNSGuMyG6OCjEPC7KOi/ONS3YOTPwTknxVE3ZQjnMQjW+Py6mMR20PSm/PS3BOSvBNyrDNyrFNyvJOS7POzHVPDTiRT7jQTzkPzvnPjvpPTvpOzroODjnODXoOTbmOTXmNjbpOzz0Skv/XF3/ZGX4YmHMPTnBODK9NC7EOTLVQT3eRUDfPTvZNDLiOzXiOzPiOTTiOTTkODTlODTnNzfqODjqNjnrNzrsNzzrODzrOD7oNz3oNz/pNjzrNjvqNzrmODngOznbPjnRPjbGPDK+PC+zOCmuOymqOyimOyekOyijOiehOiefOiahPiuWNyWcPSuaOSmaMifDUEvta23uXGbsUF7pSlzfSFnOTFa5UlOkW1KSY1GAalVKTThETDdKQi9IOSRCNxtGSCNVcD1nk1Z+snCCs3GDpWh9klmDjVmOlmOKlmR8jF9YZkNIVTk6Ri43Qys6RCw9SjBKWDdXaD5lfEZpg0Rsi0VtkUdpk0dkkkdhkUdhj0dmi0ZsjEltkE5ukU9sj09rjk5rj09tkVFwl1RxmVNwmVNwmlBvm1BxnVB2olN3plZ8rV56rV55rF1JQzNKRDZJRTlKRjtJRj1JRztIRjlIRzVJSDNKSjJMTDJOTjRSUDtUUT5YUkRZVEFdWT5bWj5cWUhfXFVkYWhua354c5N9eKCBe6eDfauFf62DfKZ9d512b5BvaYVsZoJpZYhqZottaIhtaYJtaHxsZnJrYmdqYF5nXVRoXE5oW0trXElvXkxxX0txXk1xXk1wXU9wXU9wXU9zXU93XU5+XU6HXEySWEyiVkmkRjyrOS+6Ny/KNy/UNy7aNi3eNi3fNi/gNS7fNCzgNS3fNyzeOCrYNifRNiTPOiTMPCTLPSfLPSfOOynROyrTOizOPC2+QS+vPCepNCKsMyC2OSfBPS7JOy/MOC7NMyvgQTv4W1TgSUDQRDfKRjerMh+5PizKRjfMQjXKQDXLPzLOQDTUQTfcRTzjRj/iQDviPTnjOjfjNzXjNTTkNjXmOjjlPDnkPzngPTjcOjXfQDzqTEnqUUzTPzu4KSO4LSa/Ni7JPjfRQDvWPjnaOzjjOzvnPT3iOTbiOTbiOTbkODblOTXnOjbpOTnqOjrqODjqODjrODvrODvpOTzoODvnNjznNjzpNjrmNjjiODneOjjWPTjNPjbCPDG5Oy2uOCqqOyqmOymiOyigOyefPCmeOyiaOyeYPy2MNSKZPS6YOCqXLybNXFj3eXzfWF/mWGTbUV7KS1S5TE+pVlKeYFWRaFaAblZQVzg/Sio8OxxDPRtVUStsdkSEomaUwX6HvHaGuHN8nmJugk12f1KCh151fVZbYkA7RCk0PCU1PSg9RDI8RTI5QytDUDJWZj9ne0hpg0ZtjEhtkUdqk0dmkkdikEdjjkdojUpsj01vklBvklBsj01pjktqj0pqkkxzm1VznVVznVNynlFynlFzolJ5pVZ7qlp2plp1pVtzo1lSSztSSztSSj1SSj1SSj1SSj1SSj1SSztVTjxWTz1XUD5YUT9ZUkBbVERcVUVcVUVjXEliW0lhWUxiWVJlXVtrYWlxZnR1ant6boR8cIh/c4t/c4l8cIR1anttYnJmXmtjYGtgX2dfXGNfWl5eWlleWVVhWlJiWk9lW09nW0tpXEtrXElsXUhtXUZtXEhqXkhpYk9xZlRxWkp1T0KLV0qcXFCkWk2sWkylTT+mRTWnPCyxNyjCOC3RODDcNDHdMS3fNi/eNy7eNy7eNy7eNy7bNyvZNyrXNynVOCnUOCnSOSnSOSnSOSvSOSvUOCvNOyy9Oyu2Pi2uOSipMSCrMiG4OivAPC/DOS7JNizONS3UOjLbQjrdSz7USDnCPSy3MiPdUEbZS0HURT3VRTzaRz/eR0DgQz7hPTvgNzTmODftOzvsOjrnNzfjNzXgODXcPTfZRj7PQjnEOjC8Mym3MSa6Niq/Oy/EQDTDOjDKPTTTQDjbQDviPTvnOzvsODvtOTznNzrlODrlODrlOTnlOTflOTflOTXlOTXhNTHhNTHkNjXlNzbmODnnOTrnOTvnOTvrOz7mOTvfOTvcPTrWQT3NQjvBQTa3PzGpOSujPCugPSqbPCiZOiaWOSeVOCaQOSaQQTCLPC2HLyOSMCe8TErkbW/nbG/NVlq9TE61Tk+qUE+iVU+bWFCXXVKVYVSKalNXWi86TRY3Rg9UYSl+jlCbsG+hvHmdvHmStXN+nWFogE5cbUNZZEJUXUJIUDk/RDA6PSxAQzI9QTI7PzE8QzM6QzBBTjJSZD5dc0Jng0hwj0tvk0tskkdqkklpk0tnkExskFBtkVNvk1Nuk1Btkk1rk0ptlkptmElxnE1xnU5yn05yoVB0o1J2p1Z6qVl7qV55pmNtmVpjj1BXTj9XTj9XTj9XTj9XTj9XTj9XTj9XTj9YT0BZUEFaUUJbUkNcU0RdVEVeVUZfVkdkW0pkW0xjWU1jWU9mW1VqX11uYmRwZGhyZWx0Z3B2aXJ2aXJzZm1tYGdnW19iWFleW1ZaWlJaV1BYVUxYVElYVEhcVkheV0djWktjWklmW0lnXEhpXUdqXkZrX0lpYUpjYk1uZ1R2XE2BU0abV06rVk+wUkq4UkavRzqsQjKsPSyxOSm+OCzLODDVNjLZNDDdNi7cOC7cOC7cOC7cOC7aOC3ZNyzXNyvXNyvVNyvVNyvVNyvUOCvUOCvUOCvOOiy+PC62Pi6uOSimMSCnMiCyOim5Pi6+PC7GOi3INSvLNCvSOzLcRTrhT0LfUUPdT0PbRj/YQDvTOzbSOjXWPTfaPTjcODbeNDToODrrNzjuNznrNzjnNzflOTfiPTnbQjzKQTfAQDW4OiyxNievNSayOCm4PS2/QDHFQTTNQDbXQDffPTjjOjfpNzfvNTjxNzzpNjznNjznNzrmODnmODflOTXlOTXjOjXiOTLjOjPjOjXkOzbkOzjkOzjmOjrlODrkOj3jOj3fPD3ZPz3QQTvFQDe3PTKtPC6lOyugPSqcPSuXPCmWOyiSOiaROCaMOSeAOSeAOCmJNSqdPDW/UVDXZWXRXmG4Tk6sTkykU0+dWFGYXFKXXlOYX1SYX1aMZlFgXy9TZypecjN6kE+Zr26lvnyZsnCIoGJqgkhidkNUZTtLWThGUDdASTY5PzE1OC06PC9BQjQ9PzQ6PTI+QjQ6QzBATTNSZD5edEVohElxkE1wlExukkhtk0prk0xqkU5tkVNuklRvk1NvlFFslE1rlEhsl0htmEhwnUpwnUpwoExzolF1plR4qVh4qVh4qF5tl1hii1FZgkhdVEVdVEVdVEVdVEVdVEVdVEVdVEVdVEVcU0RcU0RdVEVeVUZfVkdgV0hhWElhWEdlXUplXUpkW0plW09lW1FmW1VoXVlpXlxqXl5qXmBrX2FrX19pXlxmW1liV1VfVlFaVU9XVEtVUUhSTkNRTUJTT0NXUUNYUkJeV0dfWEZhWUZjW0ZnXEhpXkhrYExpY01iYU1uZ1V5X1CIWE6iW1WxVlGySUW4RUC5QDi4PjO3Oy+4OCu8OCvDOS7JOy/ROi/ZOC7bNy3cOC7bOS7aOC3aOC3ZNyzXNyvXNyvVNyvVNyvUOCvUOCvUOCvSOSvNOyzAPjC3Py+tOiijMiCjMiCqOSezPiy6Py/EPzDEOCvFMijINCrQPDDYRjndTkDiTkTZOjbYNDPUMjDWNDLbOTfhPTzmPD3pOzztOTzuNTrrMjfqMzfoNTjlOTnhPDrZQDq+OC21OiuxNieuNCWtNSWwOCi1PCu7PS7IRDfQQznWQjjdPjjiOTboNjbuNjbvNznrNjvqNzvqNzroODjoODjnOjbmOjbmOzTjOjPkOzTkOzbjPDbjOzjiOjnhOTneODjdOTrcPDzaQD7TQj3IPzm6OzKtNyulNyihOyydPCuZPCuUOymTOiiQOSaPOCWKOSZ6NiN5NiWIOSygRj25U0/AV1S4UE+rSUaiTUicU0yaWlGXXlOXYVeXYVeYX1aLZVBzckZ6jVaTpm6kuYCrwIees3t8kFtbbzxAUyVBUytCUTA/TDI6QzA2PC42OTA1OC85Oy5AQTM9PzQ6PTI9QTM6QzBATTNRYz1gdkdphUpzkk9ylk5wlEpvlUxtlU5sk1BwlFRxlVVvllNullBslE1slUlsl0humUlwnUxwnUxwn051pFN4qVh5qlt1pldxoFhfiUpWf0dPeEBhWElhWElhWElhWElhWElhWElhWElhWElfVkdgV0hgV0hhWEliWUpjWktkW0xkW0plXUhmXklmXktnXk1nXk9mXFBmXFJmXFNoXVdoXVdoXVdoXVdnXVRmXFJkWlBjW1BdWU5aVktWUkZSTkJQTEBQTT5UTkBVTz9YUkJZVEFbVkNdWERhWkdkXUpmX0xmYU1kY1FsZVV2XE+KW1GpYly4Wli2RkS5PDrDPDnGOzbEOTLCOC2+OCy9Oyu+Py7HPy/TOS3ZNyzaOC3ZOS3aOC3ZOS3YOCzVNyvVNyvUOCvUOCvUOCvUOCvUOCvSOSvNOyzBPzG3Py+tOiiiMyCeMx+iNyOsPSm1QC68Py2/OivDNyrFNSrLNyvOOi7OPC/TOjLeNjbgMjTbMTLdMzTgODjmPD3qPT/sPD/uNzzsMzjpMDbmMjXlNTjhNzfaNjXONjG3NSivNyeuNiasNyasNyauOSiyOim1OirDQTPKQjbUQTfcPzjjOzjmODfrNzbuNzntNjrrNzrrNzjqODbqODboOTTnOjTmOzTiOTLhOjLfOjTgOzfeOjjdOzncOjjZOTnWPDrWQT3SQz/KQTu8PDOvNiukNieeNyicOyqYOymUOymSOyiPOiaOOSWMNyOHOSWAPSp3NiSBNSeZRTqqUEisTUepTEemUUydUEqYVUyUWk+UXlKVYVaWYleXYVeNZ1SJhV+ZqXqtvY6muIiQoXRzhllOYDgvQRstPhw0QyY6Ri49RjM7QTM6PTI6PTQ8PTU6Oi4/QDI8PjM5PDE8QDI5Qi8/TDJRYz1hd0hqhkt0k1Bzl09ylkxxl05vl1BullByl1RzmFVwmFJvl1BtlUxtlkpumUpwm0txnk1ynk90o1N5qFh8q113p1ttnVNlkk1bhEhTfEROdz9kW0xkW0xkW0xkW0xkW0xkW0xkW0xkW0xjWktjWktkW0xkW0xlXE1mXU5mXU5nXk1mXklnX0hoYElpYUxpYU5pYE9oX1BoX1BqYFRqYFRpYFFoX1BoX05oX05oYE1oYU9kXk5gWkxbVUdWUEJQTT5OSzpOSzpOSzpRTj1STz5UUUBWU0BYV0NbWkZdXEheXUtiYFFmXlFtV0qGW1KtamS+Y2DBTU3IQkPQOz3UODnTODTMNzDBOS26PSu1Qi28QivOOyvXNynYOCrXOivZOSvWOSrWOSrUOCnUOCnUOCnUOCnSOSnSOSnSOSnSOSnNOyzBPzG2PjCrOiihNiKaNB6bNyCjPSavQi2zOyq6OyzCOizHOS3LOC7OOjDRPTPaOzXpOTzsNDzmMznjMjjiMzjiNTniMzjiMTfpNjzpNDnnNDrnNzrjOTzbNzbQMjHALyq0NiqtOSqtOiirOiirOiirOiisOSavNya4OivBOy/OPjPYPzfhPjnkOzjoOTbsODfuNjjuNjbuNjbtNzTqODToOjPnOjPkPDPhOjLfOzLfPDXcPTfbPTrZPjzXPTvUPj3OQDzKQz3FQTy6PjatNy2jNSieNyiaOiqWOymTPCmROyqNOiiKOSaJOCWINySDOCWDQC11NCJ7MyWTRzqlUkqhTkaeTkehV06ZVk2TWU2QWk6OXU+PXVKUYFWXYFmPaFeNiGiYpHydqYOAjmpda0hEUzQyQCYkMhktOiYwOyo1PS45PzM8PzQ9PjY7PDQ6OjA5OS0/QDI7PTI4OzA7PzE4QS4+SzFQYjxieElrh0x1lFF0mFBzl01zmVBxmVJwmFJymlNymlNymlNwmE9tl01tl0twm0xznk90oFF2olV6pll7qV56qF9xn1Zkkkpah0RdhkpXfkdSeUJlXE1lXE1lXE1lXE1lXE1lXE1lXE1lXE1lXE1mXU5mXU5mXU5nXk9nXk9oX1BoX05oYEtoYElpYUxqYk1qYk9qYk9qYVBqYVBqYVBpYU5oYE1oYEtoYEtoYElpYUpqYktmX01jXkteWEhYUkJTTT1NSjlLSDdJSDZMSzlMSzlMTTtOTz1QUT9RVENTVkVUVUVbWUxeVkljUUV6WE6haGG2ZWHEVlXXUlPZQEPfOj7cODfVODPHOy68Py2xQyq1QSjKOyrVOCnVOCnVOSrXOivVOSrVOSrVOSrUOCnSOSnSOSnSOSnSOSnSOSnSOSnNOyzBPzG2PjCrPCmjOiWZNh+VNR2bOyOnQSqyQi65QC+/OyzDNyrFMijLNCvSOzLfPTrqNTruMzzrNj3pOD7nOj7kOz7jOj3iOTzfNTjhNzriOT7hPT7bPT7ROTbDMi+2MCevOSurPSyrPSypPiqqPSmpPCipOierOCWvNiW5NynFOzDQPTPZPDXfPDfkOzjpOjfuODfvNzXvNzXuODXrOjTpOzTnPDTkPTTiPjXgPzfeQTrbQjzZQT7VQT/SQT7NQj/BQDq7QDizPTOqOC2hNSibNSeZOSmVPCqROyqNPCmKPCiJOyeGOSeENyWDNiSANyZ9Oil0MyF+OSqXT0GjWU6cUkeVT0WZV0uVWU6QW02OWk2MW02OXFGTX1SZYFmRZ1l+d1p5g2ByfFpWYUM7RSwvOyUwOyowPC4zPTI1PTI3PTM8PzZAQTk/QTY8PDI3Nys4OSs+PzE6PDE3Oi87PzE3QC0+SzFPYTtieElrh0x1lFF1mVF0mE5zmVBymlNxmVJzm1JznFBym09wmU1umExwmk5znk92oFR5pVh7p1x8qF16pV1xn1dnlE9dikVYgkJhiE9ZgElTekNnXk9nXk9nXk9nXk9nXk9nXk9nXk9nXk9nXk9nXk9nXk9oX1BoX1BoX1BpYFFpYE9qYVBqYk9qYk9qYk9pYE9pYE9pYU5pYU5pYU5oYEtoYEtoYEloYEloYUdoYUdoYUdnYE1lXktiW0lcV0RXUj9QTTpNSjlJSDZJRzhHSDhHSjlHSzpITDtJTT5KTj9LTT9QUERYUkZbT0NpUkSEWk6WVkywU0zUWlnbSUriP0LhOTnbNzXPOzHDQC60QiqzPCTJOinTNyjUOCnTOirVOSrTOirTOirTOirSOSnROinROinROinROinROinROinNOyzBPTC1PS+sPSyjPCmYOCKQNBuVOSChQSmtQy22QS+/PS/ANivCLyXHMCfQNi7eOjjoNTnuNj7sO0PqP0XmQUXgQkPcQEHaQEDNMTLQNjbTOjzRPTvJOzm/ODK1NC6tNCmqPC2lPiumPyylQCylPiulPymnPCipOieqNyWyNye8OCvFOC7MNzDUOTTePDnmPjvrOTfsOTXsOTXrOjTpOzToOzTlPTTiPjTgQjfdQznaQzzVQjvPQT3KPzzHPTu/PjmxPDOpOi+iOCucNiiYNyeUOCmROimNOiiLPCuJPCqHPCmDOieCOSiANyZ/NiV9NiR4MyN4NSWGQzOYVUWdV0uUUEOQUESVWkyTWU2QWk6QXFGQXFGSW1SVXFWZXFeOYlVrYkVXYT5KUzQ9Ryw2PyozPi00PjM1PzY2PTY5QDk9QjtDRj1FRzxERTdAPi87OSo3OCo9PjA6PDE3Oi86PjA3QC09SjBOYDphd0hrh0x1lFF1mVF0mE50mlFymlNxmVJxm09ynU5xnE1wm0xvmktynU51oVR5pVh/q2B+qWF6pV5xnFdmkUxfiUddh0VeiEliiVBZgEtTekVoX1BoX1BoX1BoX1BoX1BoX1BoX1BoX1BoX1BoX1BoX1BoX1BoX1BpYFFpYFFpYFFtZFVsY1RqYFRpYFFoX1BnXk9oX05oYE1pYU5pYUxpYUxpYUxpYUpoYEloYUdoYElnYUtnYE1lXktiW0hcV0RVUj9RTj1NTDpFRjZFSDdESDdESDdDSjpDSjpDSTtFSTtJSz5TUURTUEFZTT1lSzp0RDaWST/CWVPZUVHgREXgOjrdODbWPDTKPi+6PSm1OCLJOinQOSjROinSOyrSOyrSOyrSOyrSOyrROinROinROinROinROinROinROinNOyzBOzC2Oi6tPCynPiuZOSOPMxyTNx6fPyeiOSSvPCnAPjDHPTLMOC7QNy/ZPDXjPz3sPULuP0TqREjiREXYQD/KOzfANTC7MS65Lyy8NTG+Oja7PDazOjKqOC6kOCyiOyyhPS2fPiugPyyhQC2hQC2hQSukPyumPSqpOyqtOiiyNyi5NSm/NSvJOTDWPjngQz7lPDfoOzXoOzXnPDTlPDXkPTThPjXeQDXcRDnYRDrSQzvLQjrEPzq9PDe4ODWwOTOiNy2ZOCiVNSeTNieROimPPCyLOimFOCaIPSqFPCuDPCqAPCl+OSl9OSZ7NiZ7NiZ6MiSAOCqMRziWU0OTUUOLTD2QUkWZX1ORV0ySWU6UW1KWXVSXXleXXFaXWlWNX1JhWDtFTSg2QB44QSY+RzI9RjUzPTItNy4xODE3PjZDRj9HSj9ISTtCQzE/Pio7OiY3OCg9PjA5OzA2OS46PjA2Pyw9SjBOYDphd0hqhkt1lFF0mFB0mE50mlFymlNxmVJxnE1xnExxnExwm0twm0xznVF3o1Z7p1yCrWWAq2R4o15qlVBdh0VZg0FeiEhlj1BjilNagUxTekVpYFFpYFFpYFFpYFFpYFFpYFFpYFFpYFFpYFFpYFFpYFFpYFFpYFFpYFFpYFFpX1NqYFdqYFdqX1lqYFdqYFZqYFZqYFRqYVJqYVJqYVBqYVBqYk9qYk9qYk9qYk1qYk1nX0pnX0pmXkllX0liXUlaWENTUD1NTDpISTlFSDdBRTZARDU/RTc/Rzg/Rzo/RTlHSz1JSz1CRjVLSjZcUTthRTCDSjnAal3cZ2DjVVPkRkXlQUDgQT3VPjXJPTDGPS3GNCXLNSbMNifNNyjNNyjPOSrROyzTPS7SPC3SPC3SPC3SPC3SPC3ROyzROyzOPC27Mii2Ny6xOy+oOiuaNyKUNR+WNyGcOSKsQS2yPSy6NinBNCrNNi/XPDfiQz/qSEXoREXpRkndQ0XJOTi7NjG0ODCuOC6pNCurOS+pOS6lOS+gOC2bOSyWOiuTPCuSPCuWPSuYPSqZPiuaPyybQC2dQC6gQS+jQC2iOyqlOiirNyiwNim3Nyy+OC3EOzPMPDTaPTbgPTbiPzjiQTfiQTneQjbaQDbXQDXYSD3SRTvHQTi7OzKyNS+qMy2mMCyfMiuZOS2SOyqROSuNOiqLOimIOyuHOyuFPCuBOih+OSl8OSh8OSh8OSl7OCd5NiZ4MyR3LSCLQTaYUESTTUGPTUGSUkaTVUqOUkeYXFKYXFKRVU2QVEyXWlWVWFOUV1STZ1pdVDVJUSpCTClCSyw+SC83QCsyPS00PzE0PDFIUENaXVJYXE1NTzpERi5BQSc9PSU6Oyk+PzE7PTI6PTI8QDI0PSo7SC5QYjxjeUpsiE11lFFzl09ylkxymE9ymlNymlNynU5xnktyn05yn05zn1B2olV7p1x/qmKCrWZ4o15qk09giUdehkdhiUpmjlBpkVVkiVNbgExUeUVpYFFpYFFpYFFpYFFpYFFpYFFpYFFpYFFpYFFpYFFpYFFpYFFpYFFpYFFpYFFpX1NqX1lqX11qX11qX1tqX1lqYFdqYFZqYFRqYFRqYVJqYVJqYVJqYVJqYVJqYVBqYVBoYE1oYEtnX0pnX0pkXUpeWUVVUj9PTjxJSjpGSThCRDZARDU/RTc/Rzg+Rjk9RTZARjg+RTU+RjFITDVNSTBVPyh/UDy8c2TLY1jgX1rrVVTnR0fiQD7gQT7YPznOOjDNOS3OPC3PPS7PPS7POy3OOizOOizOOizOOizQOizQOizQOizQOizQOizQOizNOy7JPzXFQjq8QjeuPS+gNySXMh6WMR2bMh+mNSOyNyjDOjDRQTjfRkDmSUTpSkbqS0jeQ0HbRUTQQkC8OzWvOS+pPTClPzGfPTCfPzGcPjKYPzGUPi+PPS+KPi6HQC6IPyyOPSqROyqSPCuTPSyUPi2WPyyXPiyaPy2fQC6hPS2kOiyoOCysOCuxOC22OjC8OS/KOzPQOzTTPzXWQjjXQznWQznURDnRRTjKQjbDQTS5PTOwOjCpNi+iNS6gNS+ZNy6SPC+OPSyKOyyIOyuGOiqEOyqDOyyBPCx+Oyp8Oip7OSl5Oil4OSh3OCd2Nyh3MyaAMymQQzmYTkOSTECNSz+PUUSSVEmQUkeTU0qYWE+WVU+YV1GcXViUV1KOU0+KY1RdVzVYYzlfakJaZkJJVDY2Qyk0QCo8SDRPWEdZYlFfZlRXXEhKTjdCRSo/PyM8PCI5Oig9PjA6PDE6PTI8QDI1Pis7SC5QYjxkektsiE11lFF0mFBylkxzmVBymlNxm1Fzn1Byn0xwnUxxnU50oFN4pFl8p19/qmN7pmFvmlVjjEpdhkRhiUpljU5ljU5ji09kiVNbgExUeUVpYFFpYFFpYFFpYFFpYFFpYFFpYFFpYFFqYVJqYVJqYVJqYVJqYVJqYVJqYVJqYFZrYFxrX19rX19rYF5rYFxrYFprYVhrYVdrYVdrYVVrYVVrYVVrYVVrYVVrYVdrYVVsYU9rYExpYU5pYU5mX01hXElZVkVTUkBOTD1JSjpERjhBRTZBRTY/RjY+RDY8RDU9RjU3QC1ASDFJSzNGPyVXPyeHWkW3cmK2VkrZYlrwZWLsVFPmRkjrR0jmQ0TYOjfLNy3JOizJOizJOizLOSzKOCvJNyrINinKOCvLNyvLNyvMOCzMOCzMOCzMOCzLOC7CMy2+NS+2Ni2tMyihMCKeLiChMiGnMyS8QDTHQzfWRz/hTEboTUnpSkflRkLfREDXQ0HPREHBQDqxOzGkPC+hQTGcRTSYRTOTRDORRDSPQjKKQTCFQDCCQS9+QS5/QC6GOiqLOSuLOimKOyqLPCuNPCuOPSyPPCqWPy6XPi6bOyudOSqgOCulOS2pOi+uOS+4OTC+OTDBOzDEPjPFPzTFQTXEQjTBQTS2Oi6yOS6qOC2jNyueNiuaOC2ZOC+TOzGLPC+JPS2HOy2EOyyCOiuAOyuAOyx/PCx9Oyt7PC16Oyx3OSp2OCl1Nyh0Nil2NCaJPDKVRz2WTUSOSj+ISDyNT0KSVEmSUkmST0mZVE+ZU1GYV1OaXVqTWVWNW1SNbFuBfVh+iV6Ai2FseFJMWDQ2RCM9Si5MWkBlcVllb1ddZU1QVT5FSTA/Qyg9QCM6PCQ4OSc7PC45OzA5PDE9QTM2Pyw8SS9QYjxkekttiU52lVJ0mFBzl01zmVBymlNwmlB1oVJwoExunUxwn093o1Z7p1x9qGF8p2JwmVVmj01chEVchEVljE1qkVJmjU5ghkljiFJaf0xTeEVpYFFpYFFpYFFpYFFpYFFpYFFpYFFpYFFqYVJqYVJqYVJqYVJqYVJqYVJqYVJqYFZrYFxrX19rYF5rYFxrYFxrYVhrYVhrYVdrYVVrYVVrYVVrYVVrYVdrYVdrYVhrYVduYlJtYlBqYk9qYk9pYlBlXkxfWUlZVkVST0BOTD1HSDpERjhDRTdCRDZARDU8QzM8SDQ6Qy5GSjNNRzFQOyZxTDmaYlGqXlChQTXGU0znY1/wXl7tU1XrSk/pRErhQUPMOTLHOS3FNy3FNyvIOC/KOi/LOzLNOjDRPjbRPjTSPTbSPjTTPjfTPzXTPjfTPjfUQDzRQj7LRD7GRj3CRjzDST7HTUDPUUXZU0reUUriTUfkSUXkRkPiQ0DgQT3bQj3VRkLJRD+6PzerPTCgPy+aQzKWSDSUSTaORzWMRTOIQzOFQjKAQTB+QS96QTB9QC6COiyGOCyFOSuGOiyGOiyHOy2HOyuIOyuJOiuLOSuPOSqROSuVOSyZOy+dPTGiPDCqOi+uOS+wOjCwOi6wOi6wOi6vOSuuOCqoNymlNyqeNimbNiqVNyuSOC2QOS+OPDCIPC6FPC2EOyyCOit/Oit+OSp+Oyt9Oyt8Oix6Oyx5Oyx3OSxzOCpxNihyNyl1NSmMQzqTST6RS0GKSDyHSTyLT0STVEuXVEyWUUybVFCXUU+UU0+WXFiQX1iQaF6XfmqUlHCFkmZ1gldZaD9DUis/TypQYDxjclFldFVcaUtPWT5DTDE/RSs/Qyo9QSg7PSc3OCg6Oy03OS45PDE9QTM3QC08SS9PYTtieElsiE12lVJ1mVF0mE50mlFymlNwmlJzn1Bvnk1vnk1zolJ8qF1+qWF5pF90n1pjjEpeh0Vbg0Rfh0hnjk9qkVBmjUxgh0hih1FZfktSd0RpYFFpYFFpYFFpYFFpYFFpYFFpYFFpYFFqYVJqYVJqYVJqYVJqYVJqYVJqYVJqYFRrYFprYFxrYFprYVhrYVhrYVVrYVVrYlNrYlNrYlNrYlNrYVVrYVdrYVdrYVhrYVdvY1VuYlJrYlFsY1JrYlNoYVFkXU1gWkpYUkJTUD9OSzxJRzhHRTZERTVCQzM+QjE9STE/Ry9MRzFTPitnPS2VWkytX1OcPjaeMyu2PznYWFXzaWf2ZGXrUlXmSk7pT1HaSUTTRjzNQDfLPjTOPzfSRDrVRj7XRz7aSkLaSkHdSkPdSkLeS0TeS0PgS0XgS0XrU1LoVFTjU1LdU1DYU0zYU0zbVE7gVVDgTEjhSUbjRULiQ0DkQkDiQ0DkRULhR0XZSUjKREG6PzisPTKhPzKYQjGSRTOQRzaMRTOJRDSHQjOEQTGBPzF+PzB6PzF8Pi+AOi6DOS6DOS6EOi+DOy2DOy2DOy2DOy2BOSqDOiuFOSuHOSyKOyyNOy2PPC6TOy+bOjGeOS+fOS2gOi6hOSyjOSyiOCqiOCqfOCmcOCmYOCiUOCmPOSqMOiyJOi2HOy2EOi2COiyBOSuAOCp9Nyt9Nyt8OCt7OSt7OS15OS14Oi12OC1xNSpvNSlxNyt1OiyMSD2OSj+JST2ESTuGTECMUkaTV02YWE+YUU2cVVGXU1CTVlGSYFmIYleDZ1uHe2VuclFaaUBKWTBCUylJWjBXaUFkdk5qfFZYaUVMWzo/TC46RCk8RCw+Qy08QS06PSw4OSs6Oy03OS45PDE+QjQ3QC07SC5MXjhfdUZphUp0k1B0mFB0mE50mlFzm1Rxm1NunU1tnkxwoVB3qFl8qmF6qGBynVhqlFJagkNchEVhiElljE1njk1njktojUpni01jhlBafEpSdEJpYFFpYFFpYFFpYFFpYFFpYFFpYFFpYFFrYlNrYlNrYlNrYlNrYlNrYlNrYlNrYVVsYllsYllsYllsYlZsYlZsY1JsY1JsZFFsZFFsZFFsY1JsY1RsYlZsYlhsYlhsYlhvY1VuYlJrYlFsY1JsY1RrYlNnYFBkXU1eV0dZU0NUTkBNSjtLSDlHRTZGQzRAQzA7SC5ASS5PQy1hPS2ERjusWVO0TkqeLCuyOjm5PTvTU1LycG7+dnbxZWjrWF7wXl/jVVHaUEbUR0DQQzrRRD3URz7WR0HWRz/ZSEPaSkLcSETdSkPeSkbeS0TgS0fgS0fiSEjhR0ncSEjZR0fWSETXSETYR0TbRUTgQkHkQULmQkHoQkLnQ0LkQkDfQT7bQT/bSUnKQ0C5PDauPjOiQDOYQDKRQjONRDOKQTKIQDGHPzGFPTGCPDKAPDF/PTF/PTGBOzGBOzGDOjOBOzGBOzGAPC+APDF/PS+APC+APS2BOy+AOyyCOiyBOSqCOCuDNyqMOi+POC6ROS2UOi+XOy6aPS6ePC+fPi6ZOSuXOiuTOiqQOiuKOyyHOyuEOyyCOiuCOiyBOSuAOCp+Nih8Nip7NSl7NSl7Nyp4Nip4OCx4Oi9zNyxwNClvNSlyOi13PTGLTUCJSz6ESjyCTT2FUUOLVkiSWE2XV06TTkmZVE+XVlKWXVaQZVx8X1FnV0dhX0hFTy0+Tik/TyhKXDRfcUdrfVNld01YakBOYDhAUS02RSY3RCo9RjE9RDQ6PjA3Oy04Oiw6Oy02OC05PDE/QzU3QC05RixJWzVbcUJlgUZykU5zl090mE50mlFzm1Rxm1NtnExvoE9zpFV4qFx6qGBzoFtpk1FgikhZgUJehkdljE1njk1njktljUdnjEdojExhhE5YekhRc0FpYFFpYFFpYFFpYFFpYFFpYFFpYFFpYFFrYlNrYlNrYlNrYlNrYlNrYlNrYlNrYlNsYlhsYlZsYlZsY1JsY1JsZE9sZE9sZE1sZE1sZE1sZE9sZFFsY1RsYlZsYlZsYlZvY1VuYlRrYlNsY1RtZFVsY1RqYVJmX09iW0teV0dYUUFSTDxPSTlKRzZJQzNBQy46RytBRytVQCt4RzmjUEy1SUm2ODy6MznIQUXEP0DKSknfYmDxcXDwbnDnYmXiWlzbUU7VTETQRUDNQjvPRD/QRT7QQj7OQTrSQz/SQz3UQ0DVRD/YRELYREDZRUPaREPdQUTdQUTeREbdR0jfSUjgSknjSUnlR0jnQUPqQUTsQkXsQkXnQUHiQD7bPTrVPTraRkbJPTy5ODOxPDOmQDSYPzGQPjCOQTGLPTCKPDCJOzGIOjCHODGGOTOFOjSEOzSBOzOAPDOBOjSAPDN/PDN9PTF9PTN9PTF8PDB8PS58PDB8PS59Oy17OSl6OCp7NyqCOi6DOS6HOS2JOS6NOS6ROy6VPC6WPS2SOSuROSuOOyuKOyqHOyuDPCqAOyt/PCuAOCqAOCx+Nip9NSl8Myp6NCp6NCp5NSp1Mil2Nix3OS5zNyxwNCpvNSpzOi94QDOLUUOGTj+BTj2CUUCFVkaJWEmOVUqSU0qTUEqXU1CUVFKRXFaKZVxuW0xQSzdFSzFBTjBLWjlXZ0NgckxneVFkeU5XbT9HXDFBVi03SCQxQCE2Qio9RjU8RDk4PTY3OjM6PC87PC43OS45PDE/QzU3QC03RCpGWDJWbD1ifkNvjktxlU1zl010mlF0nFVynFRvnlBxolF1pld2plpzoVlql1JijEpbhUVehkhgiElki0xmjUxojUpojUhmi0ZliUlhhE5YekhQckBpYFFpYFFpYFFpYFFpYFFpYFFpYFFpYFFrYlNrYlNrYlNrYlNrYlNrYlNrYlNrYlNsYlZsY1RsY1RsY1JsZFFsZE9sZE9sZE1sZE1sZE9sZE9sZFFsY1JsY1RsYlZsY1RuYlRtYVNtYVNtYVNtZFVsY1RqYVJnYFBkXU1fWUlaU0NUTj5QSzhNSDVJRDFEQy5ARipERChbQiyIVEevXFirPkGsLzXOSE/GP0XAOz67OzzERkfYWlvjZWbbWVvMR0jRSkfQRULNQj/QQj7URkLURkLQQj7KPzjPRD/PRD/SREDURUHWRULZRUPaREXdREbfQETfQETeQkXfRUfhR0fgRkbgQkPhPj/oQkTpQEPoPkHnPT7kPj7jQT/hQ0DfRUPXQ0PFOTi2NTCwOzSmPzaaPjOPPS+NPzKIPC+HOjCHOjCHODGHODOIOTSIOTSIOzWDOjOBOzOAOjJ/OzJ+PDB+PDB8PDB8PDB4OCx5OS16Oi56Oi57PC17PC17PC16Oyx9Oy9/OS+ANy6BNyyENiqFNSqGNyqHOCmKOCyIOSqIOi2FPC2EPC2APSx+PCx+PCx9OSx9Ny18Nix6Nit6NCp4NCl5NSx4NSxyMih1NSt2OC1yNituNCluNSp0OzB4QjaKVUeEUEKAT0CEU0SIV0mMVkqMUkeNTkeVVE6UVVCLUkuEWE9/Y1VmW0dHSzI9SixJWDlaa0loeVVjeFFab0ZTaD9QYjpMXjY7TScwPx4sOR01Pik9QzU8Qjg6PDc5PDU7PTI7PTA3OS45PDE/QzU4Py04QilFVTFVaDthekNuik1yk05yllB0mlF0nFVynFR0oFV1o1h2pFt0olpvmlVmkE5eiEhbg0RkjE5hiUtgh0hjiklojUppjktlikVhhUVgg01XeUdQckBpYFFpYFFqYVJqYVJqYVJrYlNrYlNrYlNqYVJqYVJqYVJqYVJqYVJqYVJqYVJqYVJrYlNrYlNrYlNrYlNrYlFrYlFrYlFrYlFsY1JsY1JsY1JsY1JsY1RsY1RsY1RuYlRrXVBxYVJ0ZFdyZFduYlZqYFRpYVRoYlRnYVNlYlFjXU1bVkNWUT1UTzlOSDJHQSlLRyxJPyRiSTORZ1e2d267bGe4WVe6UFK2QkW9QkXCREfIRkjNSEvQSkvSTE3TS03PRUXQREXTRUTWRkXVRkLSQz/PRD3PRjzIQzrJRDvKRTzMRT/SREDXQ0PaQUTcQEThQkbiQkThQ0TgREXgREXhRUbjRUTlRUXjQ0PkQkDkQD/kQD/jPz7iQD3jQT7eQz/TQj/GPzu2OTOqNzCfOjCXPTKOPjOGPjKDPzSBPzOBPTKCPDSEOTOHODOJOTKJOTKFOzCEPC6EPC6DOy2BOy+BOy+AOi6AOi5+Oi1+Oi1+Oi9+Oi99Oy99Oy99Oy99Oy99OTB9OTB+ODB+OC6ANy6ANy6BOC9/OS2ANy5+OCx9OS58OC17OS16OCx4OCx4OCx4OC54OC53Ny12OC12Nix0NitzNCtxNSttMSdyNixuNCltMyhvNittNClxOC1/ST2FU0iFU0qHUkqIUUqMUUmQUUqUUUuVUkyTVE2NVEuJW06CY1FvX0hZVTpNVjdPXztqfllieFFacElVakNSZ0BQYT1JWTVEUjE3RCY0PiMyOiM2Oyc8PjBAQjVAQDY8PjM1OC0zOS00Oi43Oi85PS87Py49Qiw9RilTXzthckZvhlJ0kFV0lFN0mVNznVNznVV1nlp+p2V+p2VwmFliiktehkdehkhehEdghkliiEtkik1mjU5ljE1jiktgh0hehEdfgkxUdkRLbTtpYFFpYFFqYVJqYVJqYVJrYlNrYlNrYlNqYVJqYVJqYVJqYVJqYVJqYVJqYVJqYVJrYlNrYlNrYlNrYlNrYlNrYlNrYlNrYlNsY1RsY1RsY1RsY1RsY1RsY1RsY1RuYlRyYlNxYVJyYlVyZFdyZlpvZ1ptZVhqZFZnY1dsaVptallqZ1RoY09jXkhbVT1STDRQSjBJPyZRPylrUD1/WEmETkSIRT2URUGxV1a4VFS7UVHAUE/ATk3BTU3DTUvDS0rQVFTISEnCPT7EPTrQQkDTRUHPQjvHPjTKRDnKRjrLRj3OSD/URkLYRETcQUXdQUXhQkbhQ0ThQ0TiREXiREXhRUbhRkThRkTgRUHfREDgQj/fQT7gQT3gQT3gQT3eQz/URT/IQzy6PjatOzGgOTCUOi+KPDCDPTGAQDR+QDV+PjSAPTSDOjOGOTGJOTKJOTCHOy6FPC2FPC2EOyyDOy2COiyCOiyCOix/OS1/OS1/OS9/OS9+Oi9+Oi9+Oi9+Oi99OTB9OTB9OTB9OTB9OTB9OTB8OTB8OTB8OTB6OjB6OjB6OjB5OS95OS94Oi93OS53OC93OC90OC5zNy1yNixyNixwNitwNitsMidxNyxtNClsMyhvNitsMyhwNyx+SD6FU0qFU0yIUUyMUU2QUUyUUE2VUU6UU0+KT0eFU0iAW0t7ZVBzaVBpbE1mcVFneFRedE1YbkdQZkBNYTxNXjxMWzpIVTdDUDQ8Ri04QCk2Oyc3Oik8PS8/QDI+PjI7PTA0OjA0PDE1OzE2PDA6PC88Py4+QSw+RCpRWzlebURugVNzjFVyklNzmFNznVNznlZ4n158omV4nmFrkVRghkldg0Zdg0ZcgkVghklhh0pkik1li05li05iiEtghklehEldf0xSdEJJazlpYFFpYFFqYVJqYVJqYVJrYlNrYlNrYlNqYVJqYVJqYVJqYVJqYVJqYVJqYVJqYVJrYlNrYlNrYlNrYlNrYlNrYlNrYlNrYlNsY1RsY1RsY1RsY1RsY1RsY1RsY1RuYlRxY1ZvX1JtXFJtX1RxZFtvZ1xsZFloYlZmYldxbWF7eGl+e2qAemp7dmNxaldlYEpUVDxGRi5DPihNQi5TQC9VOCpdNyptPjRuNzB1OTF+OzWHQDqSSUKbUEqlWFCtWlS7Xlm6Uk+3R0W8Qj/IRELRRUTTREDPQDrQQTvQQzzSRT7UR0DWR0PaRkbbRUbeREbfQ0TfQ0TfQ0TgREXgREXfRUXfRUPgRkTfRUPeRELcRD/bQz7cQz7cQz7cQz3bQz7WRUDPRkDDQjyzPjWiOjGUOC2JOS6DOy+CQDJ/PzN+PjKAPjKDOjGGOTGJOTKJOTCHOy6FPC2EOi2EOi2DOy2COiyCOi6COi5/OS1/OS1+Oi9+Oi9+Oi9+Oi9+Oi9+Oi99OTB9OTB9OTB9OTB8OTB8OTB8OTB7OC97OzF7OzF6OjB5OzB5OzB4Oi94Oi94Oi90OC50OC5zNy1zNy1yNixxNStwNitvNSpqMSZwNyxtNClrMidsNippMydtNyt9Rz2HUEmIUUqMUUuOUUyRUk2TVE+UVVCRVlCMV0+HW1B+Xk90Yk5vaVFvclVsd1lmd1VRZUJLXzpFWTZEVTNFVjZHVjlHVDhFUjhASjI8RC85Pio3Oyo6PC48PjA7PS85Oy42PDI1PTI2PDI2PDA6PC88PjA9QC09QylNVzVaaUBoe01uh1BwkFFzmFJ1n1V0n1d6oWB3nWBulFdjiUxcgkVcgkVcgkVbgURfhUhhh0pjiUxkik1jiUxhh0pfhUhdg0hbfUpQckBHaDlpYFFpYFFqYVJqYVJqYVJrYlNrYlNrYlNqYVJqYVJqYVJqYVJqYVJqYVJqYVJqYVJrYlNrYlNrYlNrYlNrYlNrYlNrYlNrYlNsY1RsY1RsY1RsY1RsY1RsY1RsY1RuYlRyZFdwYlVtX1RsX1ZrYVdsY1psZVtqZl1qZl15dWqIhHiRjYGVj4GSjH6JgnJ9emdgY05PVD5ERzJHRjJIQzBGPSxMPCxWQzRQOStSNipWNCpZNCtcNithOS9lPTNuPjSKS0KdUkyuVVG3T0y8RkbGQULSREPZR0fUQD7VQT/WQj7WRUDZRUPaRkTbRUTdRUTeRETfQ0TfQ0TeRETeRETdRUTeRkPeRkPbRkLbRkLaRT/YRT7XRD3XRD3ZRD3YRT7URDzTRj/JRj66QTinOzGYOCyMOC2FOy6DQDB/QDF+PzCAPjCDOjGEOi+IOjCIOi6EOi2EOyyEOi2EOi2COiyCOiyBOS1/OS1/OS1/OS1+Oi9+Oi9+Oi9+Oi9+Oi9+Oi99OTB8OTB9OTB7OC97OC97OC97OC95OS97OzF6PDF5OzB5OzB4Oi94Oi94Oi92Oi90OC5zNy1zNy1yNixxNStvNSpvNSptNClqMSZvNitsMyhoMiZrNSloMiZsNip8RjyKT0eMT0qNUEuPUk2RVE+RVlCQV1CMWlGJXVKFYVV5X1BqW0hkX0lkaE9cZktOXUBFVThBUTQ+TTA9TC8/TTNEUTdGUjpHUztCSzY+RzI6QS85PSw5PS45PS44PC03Oy03PTM2PTU2OzQ3PTM6PDE7PS88Pyw8QSpKUzRWZT5kd0lshUxwkFF1mlR3oVd4olp7omFymFtli05cgkVagENcgkVcgkVagENfhUhghklhh0piiEthh0pghklehEddg0hafElOcD5FZjdoYVFoYVFpYlJpYlJpYlJqY1NqY1NqY1NpYlJpYlJpYlJpYlJpYlJpYlJpYlJpYlJrYlNrYlNrYlNrYlNrYlNrYlNrYlNrYlNsY1RsY1RsY1RsY1RsY1RsY1RsY1RsY1RyZlp0aFxzZl1uZFpqYVhsZV1zbmh7eHGBfneQjYagnZSopZyrp5yopJmjnZGZlod6e2tkZ1RPUj9HSjdFSDVCRTJCRTJFSDVLTDxKSDlHRDVEPjBCOi1BNytANipHNSlTNSpxQjiMUEifUEuvSEm/R0nMRUnTQkXWQELZQELaQkHcREPaRUHbRkLdRULcREHeRETeREbeREbeREbeRETdRUTdRUTbRUTaRkLXRkHWRj7URT3URT3TRj3URT3VRj7UQTrTQzvORT3BQjmuPjOfOi6ROy6LPTCEPzCBPy+APi6BPi6BOy+EOi2HOy6HOy6EOi2DOy2DOy2COiyCOiyBOSt/OS1/OS1/OS9+Oi9+Oi9+Oi99OjF9OjF9OjF9OjF8OTF6OjF8OTF5OTB5OTB4OC94OC93OC95OjF5OjF4OTB2OjB2OjB1OS91OS90Oi9yNy9xNi5xNi5wNS1vNCxvNCxuMyttNCtqMShtNy1qNCpoMihqNCpmMidqNit9RDuNTkePTkiQUUqQVEyQVU+OV1CKWVKEXFJ7WU13XVBrWkpdVUJZWERZXkhPWUE/SzM6SC83RS41QSs1QSs4RC4/SDNDTDdFTjlCSzhASTY8RTQ6QTE5QDA3Pi41PCw0Oiw1PDQ1PDU2OzU2OzQ5OzA6PC87Pi07QClHUDFTYjtidUdrhEtxkVJ3nFZ5o1l5o1t4n2BukVdgg0lafUNcf0VegUdegUddgEZgg0lhhEpihUtihUtihUtgg0lfgkhegUlZe0lOb0BFZjloYVFoYVFpYlJpYlJpYlJqY1NqY1NqY1NpYlJpYlJpYlJpYlJpYlJpYlJpYlJpYlJrYlNrYlNrYlNrYlNrYlNrYlNrYlNrYlNsY1RsY1RsY1RsY1RsY1RsY1RsY1RsY1RrYVVvZVtwZlxsY1prZFxybWeEgXyRkIyno6C1sa7EwbzJxsHJxL7FwLrAubG5sqiknI+IgnJnZFVQUT9GSTg+RTM7RDE6RjI4RTM4RTM4QzM6QjM8QjZAQzhDRDxIRTw+NCpQOi9lPzaARUGhUE+/WFvLUlfKQ0nVRkrXRUbaRkbcRkXeRkPeRELeRUDeQ0HeRETeREbeREbeREbcREPcREPcREPaREPZRUHXRkHVRkDTRj3TRj3RRz3RRz3URT3UPzjVQDnQQzrGQzm2QTelPTCWPS+MPS6GPi+CPy+BPi6BPi6BPC2DOy2FOy6FOy6DOy2COiyCOiyCOiyBOSt/Oit/OS1+OCx+Oi9+Oi9+Oi9+Oi99OjF9OjF9OjF9OjF6OjF6OjF6OjF5OTB4OC92Ny52Ny50OC53OC91OS91OS90Oi90OC5zOS5zOS5yOC1xNi5xNi5wNS1vNCxvNCxtNCtsMypqNCpoMihtNy1pMylmMidpNSplMSZpNSp7QjmOTUeSTUiRUEqPVEyNVk+HWE6CWlB8XFFzXE5sXE1gV0ZWU0JRUkJKUT9ASTY0QCwzPCsyOyowOSgwOSgyOyo1Pi05QjE8RTQ/SDc/SDc+RzY7RjU6QzI1QC8zPi0xPCwzOjMzOTU0OTU0OTI4OTE5Oy47Pi07QCpDTC9PXjdgc0VrhE1yklN5nll5o1l3oVlxmFlmiU9afUNYe0Fcf0VegUdegUdegUdgg0lgg0lgg0lgg0lgg0lfgkhegUdegUtYekhMbUBDZDdoYVFoYVFpYlJpYlJpYlJqY1NqY1NqY1NpYlJpYlJpYlJpYlJpYlJpYlJpYlJpYlJrYlNrYlNrYlNrYlNrYlNrYlNrYlNrYlNsY1RsY1RsY1RsY1RsY1RsY1RsY1RsYlZqYFZqYVhrZFpsaF91cGyIhIGfnpqwsK7DwsDT0tDi4d/n5uTn4+Di3tvc19PYz8jOvLK4pZeXh3p5bV1fWUlLTDpBRjI8RTA/Szc+STg+Rjc7QzY7PjU6OzM5ODM4NzI9PTNDPDJONzFhODSISEivXV/FYGTKV1rNUVPTTk/XTUvbS0reSEfhRkTjREHiQkLfQ0beQ0feREbdQ0XdQ0XdQ0XcQkLbQ0LaREPYREDVRD/TRj/SRT7QRT7QRz3URT3ZQDrZQDrRQjrJRDu8QzqsQDSZOy+MOSuJPS+DPi6BPi2BPi2BPCyDOyyEPC2EPC2COiyCOiyCOi6BOS1/OS1/OS1+OC59OS5+Oi9+Oi99OjF9OjF9OjF9OjF9OjJ9OjJ7OzJ5OjF5OjF4OTB3OC90OC5zNy1yOC10OC5zOS5yOC1xOC1yOC1wNyxwNyxwNyxvNi1vNi1vNi1uNSxtNCtsMypsMyppMyloMihrNyxoNClmMidoNCliMCVmNCl6QTiQTUeTTkmRUEqOVUyIWE6BWU94Wk9yXE5rXk5fWEhSUEFLTj1FSTo5QjEzOywwOCkxNysxNy0wNiwwNiwwNioxNysyOis0PC05RDQ7RjU9SDc8STc7RjU2QzEzQCwxPi0uODAwNjIxNjIyNzE3ODI5OzA6PC46Pyk/SCtMWjZdcENqg0xzklZ5nlt3oVlznFZnjVBegUlWeUFYe0NbfkZbfkZbfkZdgEhfgkpfgkpfgkpfgkpfgkpegUldgEhdgEpVdklKa0BBYjdoYVFoYVFpYlJpYlJpYlJqY1NqY1NqY1NpYlJpYlJpYlJpYlJpYlJpYlJpYlJpYlJrYlNrYlNrYlNrYlNrYlNrYlNrYlNrYlNsY1RsY1RsY1RsY1RsY1RsY1RsY1RsYlZxaF9uZ19taGJ0cWqHg4ChoJ68vLrNz87Pz8/g4ODy8vL6+Pn79/j38/Lx6+vu49/o0MbdwbXBq52ikYF9dWJeXEdLTTdDSDJBSTJBSDZARzdCRDlCQjpCPTlDOTc/OjY6PTY+PzdDODJKLitlNzePUVK0aGrGbm3AXFzHWlfQVlPXUU7dTUziSEjmQ0TlQkXgREfdREfdREbdQ0XdQ0XcQkTcQkLcQkLcREPZQ0LXQz/TRD7SRT7QRT7RRz3URT3cQz3bQTnSQjrKRDu/RTqwQTacOi2MNieKPC+FPS6CPS2BPi2BPCyBPCyEPC2EPC2COiyCOiyCOi5/OS1/OS1+OCx9OS59OS5+Oi9+Oi99OjF9OjF9OjF9OjF9OjJ7OzJ6OzJ3OzF4OTB2OjB1OS9zOS5yOC1yOC1yOC1xOC1wNyxuOCxwNyxtNytvNitvNitvNi1vNi1uNSxtNCttNCtqNCppMyloNClmMidrNyxoNCljMSZmNCliMCVlMyh4QjiPTkiST0mPUk2LVk6EWE96Wk9xW01qXU1aVERJSjpARDU+RDY5QTIxOSwvNyo2PDI0NzA1ODE1NzI0NzAyNS4wNiwwOC0yOi02QTM6RTU9Sjk+Szk8STc3RjMzQi0xPi0sNi4uNDAwNTExNjA2NzE4Oi86PC46Pys8RSpJVzRbbkFpgU1ykVZ4nFx1nlhwmVVghklYe0NTdj5XekJbfkZafUVZfERcf0dfgkpfgkpfgkpegUlegUldgEhdgEhdf0xTdElIaEFAXjhpY1NpY1NpY1NpY1NpY1NpY1NpY1NpY1NpY1NpY1NpY1NpY1NpY1NpY1NpY1NqY1NrYlNrYlNsY1RsY1RsY1RtZFVtZFVtZFVtZFVtZFVtZFVtZFVtZFVtZFVtZFVsZFdqY1tnZF12c26Tko6vr63ExsXa3Nvq7u/z9Pb29/n8/P7//////v//+/r89vb98u734dTy2MfgybfGtaGqoIeIhGliYkZFSC1FSTBDRzBGRTNHQzdGPDNDNjBHNTNJOzo+PTk+PzpCOjdJNzVjR0aSamrFk5LoranSi4fHdG7AXVjGU1DVT07gS03nRkvpRkvfREjfSUvbRUfVPD/YPkDhR0ngREfWOj3aQEDaQEDZQUDWQkDUQz7SQz3QQTvRQTneQz7bQTnTQDnKQTm+QjiwQDWfOi6QOCqMPTCHPi+DPi6BPi2APSyAPSyBPCyBPCx/Oit/OS1/OS1+OCx+OC59OS58OC18OC18OTB8OTB8OTB8OTB6OjF6OjF6OjF6OjF5PTV3PDR3OzN1OjJ0OTFxOC9wNy5wNy5vNi1tNy1tNy1sOC1tNy1sOC1tNy1tNy1pMittNi9wOTJwOTJsNS5nMipnMipoMytlMChpNy5kMileLiRgMCZfLyViMihzPjaMT0qQUUyIUUyBUkp9WE94XVJoWElUTj5ERTVARDU6QjM3PzI0PC8zOzA0OjA0OTI3OTQ3ODM2NjQ1NzI0NjExNi8vNi4vNywuOSsyPS02QzI6RzY6STY4RzQ0Qy4xPy4qNCssMi4tMi4vNC40NS83OS46PC86Pys2PiZFUzJZa0NqglJ1k115nV9ym1lrlFJbfkRYeURUdUBUdUBYeURae0ZbfEdae0Zef0pig05ig05ef0pcfUhfgEtggUxff05Uc0pGZEA8VzZpY1NpY1NpY1NpY1NpY1NpY1NpY1NpY1NpY1NpY1NpY1NpY1NpY1NpY1NpY1NpY1NrYlNrYlNsY1RsY1RsY1RtZFVtZFVtZFVtZFVtZFVtZFVtZFVtZFVtZFVtZFVsZFlnZF1vbmqGhYOkpKLBw8LW2tvq7u/3+/z3+/74/P/8/f/+/v7//v///vz//Pv/+vP/8OD86tTt3sfXzbLAu56ko4SCg2NnaktMUTNHSi9FQy5HQTFIPjRJOjNMOTVLPDk/OjdDQkBOSUZdUlB5amejjovOsq7oxb//19HrsqnNgnzAY17KVlbYUlPfSE3aQUTWREXVRUXYSEjcSkvbRUbVPD7WPD7bQUPZPz/ZPz/ZQUDXQUDWQj7TQj3SQTzUQTrcQTzbQDvUQTrLQjq/QzuxQTagOzGSOC2MPTCHPi+DPi6BPi2APSyAPSyBPCyBPC1/OS1/OS1/OS1+OCx9OS59OS58OC18OC18OTB8OTB8OTB8OTB7OzJ7OzJ7OzJ6OzJ3PDR1PDN1OjJzOjFyOTBuOC5wNy5tNy1tNy1sOC1sOC1sOC1sOC1qOC1sOC1sOC1rNi5uNzBwOTJuOTFsNy9pNCxnMiplMypjMShkNCpfLyVeLiRiMiheLiRgMCZwPjeCS0aHUk6HWFJ+WE9yVktkUkZSSTpBPzA8QDE4QDE1QDIzPjA0PDE0PDE1OjM3OjM3OTY3NzU3NzU1NzI0NjExNi8wNy8vNywuOSsxPC41QjE5RjU5SDU4RzQ0RTI0QjEuOC8vNi8uMy0tMisyMys0Nis4Oi05PSw3PyhEUTNZa0VqgVV2lGB5nGJwmFpnj1FZfERXeENUdEJUdUBWdkRZekVZeUdZekVbe0lfgEtggE5cfUhbe0lef0pefkxee01TbktGX0E5UjVpY1NpY1NpY1NpY1NpY1NpY1NpY1NpY1NpY1NpY1NpY1NpY1NpY1NpY1NpY1NpY1NrYlNrYlNsY1RsY1RsY1RtZFVtZFVtZFVtZFVtZFVtZFVtZFVuZVZuZVZuZVZsZlplZF95e3iXmZiytrfN0dLk6ez0+fz6///7///8///9/v/+/v7//vz///v///r///T+/Of6+d3w79Hh5cTS2LS9xaCgqIOHkWxgZ0VRWDlFSC1EQy5KRDRMRDlLQThKPztDOzlTSktpYV+Bd3ackpC+s6/Zzsjq3NP+6N3/8+n/5NvwqaPDZWO1QkXHREnaUlbbVVTRTUvKREHNQ0HURkXXRUbYRETZQ0TWPT/XPkDYQD/WQD/WQkDTQj/TQj/VQT3ZQDvZQDrTQzvLRTzARDyyQjehPDKTOS6OPDCJPTCDPi+BPi5/PS1/PS2APS2APS1/OS1/OS9+Oi99OS59OS59OS57OC97OC99OjF9OjF7OzJ7OzJ7OzJ7OzJ6OzR4PDR0OzJxOzFyOTBvOS9uOC5sOC1sNixrNyxsOC1qOC1qOC1qOC1qOC1pOS1qOC1qOC1uOTFtODJtODJtODJtODJpNzBmNC1jMSplMyxhMCldLCVfMChjNCxcLSVfMChzRDx9UEuBVlB+WVFwU0teSj9PQzdAPS40NigzOioxPCwxPC4yPS81PTI2PDI3OjM3OjM3OTY3OTY2ODM2ODM1NzIyNzAxODAwOC0uOSswOy0yPy42QzI3RTQ4RzQ5SDU5RjU0PjMzOjIwNS4sMigvMCgxMyg1Nyo3Oyo2PidFUjZbbEpthFp5lmZ5nGZsk1pgh05Xd0VXdUNVckJVc0FXdERYdkRZdkZZd0Vad0defEpffExde0ldekpffUtee0tad0tQZ0pBV0AzSTJpY1NpY1NpY1NpY1NpY1NpY1NpY1NpY1NpY1NpY1NpY1NpY1NpY1NpY1NpY1NpY1NqY1NrYlNsY1RsY1RsY1RtZFVtZFVtZFVtZFVtZFVtZFVuZVZuZVZuZVZvZldtZ1tqa2aDh4ijp6i5vsHQ1djl7e/z+/31/f/7///7///8///8/vv9/vn+/fj//vf///P5/eb2/d7u99jn8c7e6MPO2rS2wJuhq4aAh2VmbUxOUjdGSDBKSTdLSTxIRDlEQDdPR0RqYF+LgYCkmpm3r6zLxsLe29Tq5t368ej/+/H/9+3/3dX7tbPlj47KY2awQD/DUEvJVE3JUEjER0HIR0LUTUrWS0jQQD/SPj7TPz/VPz7VQT/VQT/UQ0DTQj/TQj3WPjnVQDrSQz3MRT/ART6yQTmiPTWVOzKOPDGJPTCDPi+BPi5/PS9/PS2APS2APC9/OS9/OS9+Oi99OS59OS59OS57OC97OC9+OzJ+OzJ8PDN8PDN7OzJ7OzJ6OzR4PDRyOTBvOS9vOS9tOS5sOC1rNyxqNitoNitpNyxpNyxpNyxoOCxoOCxoOCxoOCxoOC5tOzRsNzFqNS9pNzBqODFqODFmNC1hMCllNC1hMipdLiZhMipiMytZKiJhMip5TkeBXFZ2V1JqT0hYRDtJPDNAOi46Oy04PC4wOCkvOiozOy40PC82PDI2PDI3OjE2OTI3OTQ3OTQ2ODM0OTIzODEzOS8xOS4xOS4uOSsvOiwxPCwyPy41QjE3RTQ7SDY8STg5Qzg3PzQyOC4tMycuLycvMSYyNCc0OCc0PCdFUjhfcFB0imR9mm55m2lmjVhVfEdTc0JUcUFTcEBTcEBUcUFVckJWc0NWc0NYdUVbeEhdekpdekpee0tffExceUlXcklLX0Y8TTsuPy1nZFNnZFNnZFNnZFNnZFNnZFNnZFNnZFNnZFNnZFNnZFNnZFNnZFNnZFNnZFNpY1NqY1NrYlNsY1RsY1RsY1RtZFVtZFVtZFVtZFVtZFVuZVZuZVZvZldvZldvZlduZ11xcW+HjI+kqay3v8LN1djj7e/y/P70/v/4///7///7//z9//r8/fX6/PH4+Oz2+Or3/+jz/+Ty/OHu+dnq9NLe6MXK0a+2vZudo4F9gmJZXUJJTTZHSjlGSjtDRjtBQjpjXliFfXqroZ/Bt7XMwsHXz83m4d3x7un69/D89e3/8ej/8un/8+3/5d/pqKS4aWSnTUK1UETBWU7IXFLGUUi/RD3CQTzLREHMQT7OQD7QQD/RQUDSQz/RQz/RQz/SQz/TPzvSQTzQRUDJRUC9Qz6vQDmgPTeVPDSOPDGJPDKDPTGBPTB/PTF/PS9/PS9/PS9+Oi9+Oi9+Oi99OS58OTB8OTB7OC97OC98PDN8PDN8PDN7OzJ6OzR5OjN5OjN3OzNuNzBtODBtODBsNy9rNi5pNy5oNi1oNi1pNy5oOC5oOC5nOC5nOC5nOC5nOC5oOC5rOTJoNi9mNC1nNS5pNzBoNzBlNC1iMSpjMitjNCxfMChdMShdMShXKyJjNy57VUx0WFRhTkhOPzhBNy49Niw7OS05Oy45PDEzOS0zOy41Oy82PDA2PDA3Oi82OC00Ny42OTA0OTIzODEzOS8zOS8yOi8xOS4xOSwwOCsuOSsvOiwxPC4zPi42QzI6RTU8Rzc9RTg6QjU1Oy8wNigwMicwMiUxMyUyNiUyOiVHUztkdFd5j2t+mnJzlGddg1JKcD9Pbz5Rbj5Rbj5Rbj5Rbj5Sbz9TcEBUcUFXdERbeEhdekpdekpffExgfU1ad0dTbUZDVT82RDcoNilnZFNnZFNnZFNnZFNnZFNnZFNnZFNnZFNnZFNnZFNnZFNnZFNnZFNnZFNnZFNpY1NqY1NrYlNsY1RsY1RsY1RtZFVtZFVtZFVtZFVtZFVuZVZuZVZvZldwZ1hwZ1hvaF5sbm16goWTmqCrtbfEztDc5ujt9/n0/v/1/v32//z6//r7//n7/vP4+u319ujx9OP1/Or0/ej0/OXz+d/y9tvp7M/Y17nFxKaxsJKPjnJnZ09OUDtHSzpGTD5IUEVLUUd7e3OfmpTFvrjYzszf09Pn29vz6+n89/Tw7+v8+/b///b//fT/+PH/8+r/597/18vYk4O4ZVOkSzu0VEa9V0m1Rju3QDjIS0XHQz7KQz/NQ0DOQ0DOQz7OQz7NRD7NQj3RQjzSQz/OREHFRD+4QT2qPTieOzaVPDaOOzOJPDSDPTOBPTJ/PTF/PTF/PTF/PS9+Oi9+Oi9+Oi99OS58OTB8OTB7OC97OC98PDN8PDN7OzJ6OjF5OjN4OTJ3ODF1OTFuNzBtODBsNy9qOC9pNy5pNy5oNi1nNy1oOC5oOC5nOC5nOC5nOC5nOC5nOC5nOC5oNzBoNi9nNS5nNS5oNzBoNzBnNi9mNS5hMiplNi5eMilcMCdgNCthNSxpPTR1U0pYR0BFPjY8NS86Ni07ODE5OS81NywzNis3Oi81Oy83Oi83Oi82OS41OC01NywzNisyOCwxOSwyOC4xOSwxOS4xOSwxOSwxOSwwOCswOCsuOSsvOiwwOyszPi42QTE4QzM8RDU6QzI4PjA1Oy01NyozNSgxMyUwNCUxOCZIVD5nd1x3jG12kmxoiF9Sd0tCaDlLazxOaztQbT1QbT1PbDxOaztQbT1Rbj5XdERad0ddekpee0tgfU1ffExWc0NOZ0A8SjkwOzMlLydnZFNnZFNnZFNnZFNnZFNnZFNnZFNnZFNnZFNnZFNnZFNnZFNnZFNnZFNnZFNpY1NqY1NrYlNsY1RsY1RsY1RtZFVtZFVtZFVtZFVtZFVuZVZvZldvZldwZ1hxaFlvaF5oaWttdHqFjJSjrLG/yM3T3uLl8PLw/Pzy/Pv1/vn4//f6//b8//L6/O74+ef29+f29ur59+v69+j89ub99eL37Njn2MPVxq/AsZqek312bltaV0ZQUUNTVktcY1tmbWWVmI2ysqjVzsjo3dvz4+T66uv/8fT/9/n//f3+/fn5+vT4+fH8/PL///P///H/++r/5tHxqpS8b1upVkSuUkO1UES7TEG/SkHCR0DGRUDJRUDKRUDKRT7JRD3IQzzJQjzRQz/QRUDMRUHCQz2zPTmmOzWcOzWVPDaMPDWHPDaFPDWBPTR/PDN/PTF/PTF/PTF+Oi9+Oi9+Oi99OS58OTB8OTB7ODB7ODB7OzJ7OzJ5OjN4OTJ3ODF2NzB2NzB0ODBuNzBrOTBqOC9qOC9qOC9oOC5oOC5oOC5nNy1mNy1mNy1mNy1kOC1kOC1kOC1mNy1nNi9oNzBpODFpODFoNzBpODFqOzNsPTVnODBsPTVjNy5hNSxvQzp4TEN0SUBuTUREOjE2Ny80NS84OTE6OzU1Ni4xNCsyNSw1OC81OC81Nyw0Nis0Nis0Nis0Nik0OCowOCkuOSkwOCswOCkwOCswOCkwOCkwOCkxOSwwOCswOCswOCswOCsyOi0zOy40PC05QjE6QzA7QjI6QTE6PC42OCozNScvMyQyOSdJVT9ldVtvg2dog2JZeVRJbkU/ZDhIZztMaTtPbD5Oaz1NajxMaTtNajxPbD5VckRZdkhbeEpdekxee01ceUtRbkBHXzs2QjQrNC8jKSVnZFNnZFNnZFNnZFNnZFNnZFNnZFNnZFNnZFNnZFNnZFNnZFNnZFNnZFNnZFNpY1NqY1NqY1NrY1ZsYlZsYlZtY1dtZFVtZFVtZFVsZVVtZlZuZ1dvZ1pvaV1vaF5tamVrb3JtdHqDipClrrPDzNHV3+Hm7vH0/P70/fr3/fn5/vf6//b9//L9//H8/+79/vD7+O/++vH/+e//+u3/+en/8t/v4MvdzrfBspuil4F8dWJiX05YWkxeZFhtd258hn2mrKK+v7fa1c/u5OL87u7/9PT/9Pf+9PX++Pj7+vj7/fj8//r4//X0/PH3/fH///H/+ej/9OP/zLu9f3CcUkWpU0a2VEmyQzrASUHESEDHRkDJRj7JRj7IRT3GQzvGQzvNRz7MRz7HRz68QzutPjWgOzOYOzSRPjaKPTWGPTaDPTWBPTSAPDOAPDGBOzGBOzF+Oi9+Oi9+OjF9OTB8OTB8OTB7ODB7ODB6OjF6OjF4OTJ3ODF2NzB2NzB1Ni9xNi5tODBrOTBrOTBqOC9pOS9pOS9pOS9pOS9nNy1mNy1nNy1mNy1mNy1mNy1mNy1mNy1mNS5qODFtOzRrOjNqOTJqOjBtPjRvQzhtQTZvRDtlPTNkPjN6VkqGZFp5V01iTEE+OjEzODE0OTI3PDU2OTIxNC0yNSw5PDMzNi0yNSwyNCkwMygxMygyNSo0Nis0NywvNyotOCovNyovNyovNyovNyovNyovNyoxOS4wOC0wOC0vNywvNywvNywwOC0wOCs3PzA5QjE8RTQ9RDQ7QTM4PC4yNictNCQyOypKVkJjcltpe2FedVhSbUxHZUFBYTpIZDtLaDxOaz9Oaz9LaDxKZzlMaT1Oaz1UcUVYdUlad0tbeExdek5adk1OakFDWzsyPjQqMDAhJydoZVZoZVZoZVZoZVZoZVZoZVZoZVZoZVZoZVZoZVZoZVZoZVZoZVZoZVZoZVZoZVZqZFZqZFZrZVlsZFlsY1ptZVptZVhtZlZnYE5rZlNua1hvbF1oZVxmZWFzcXKBgoaKj5OWnqGrs7bDyMvY3eDq7u/29/n5+/r8/v3+/vz///r9/vb7/PT6/PH7/fL8/vP5+vL6+vL5+e38+uv+/Of59+Dp5crV1La6uZuYmHxxdFlfZE1ka1lyfWyEkIKRm5C0ubLLzMfj4t7y7uv38/L79/b9+fj8+Pf//vz+/vz+/vz9//r9//r9//r9//r9//r6/Pf///r/+/b/6uXYp6CjYFicRT61Tke/TUPCRj7ERDnLRj3OSUDOS0HLSEDHRzzGRzjDSDi9SjizSDimRTWaQjSRQjWLQzWGQjeEQjaDQTWCPjOCPDKEOjGGOTGGOTGAOjJ+OjF8OTF8OTF7ODB6Ny93Ny53Ny53Ny53Ny53OC93OC92Ny51Ni1xNStvNCxsNy9pODFpODFoNzBoNzBnNi9nNi9nNi9mNS5nNi9pNzBpODFpODFnNi9mNS5lMyxoMy1qNS9tODBrOTBqOjBpOy5qPjFrQTNnQjJqSTpkSDp2X09+a1yKeGqMf29SSj03OS40OjA0OjAzOS8zOS8zOS8yOC4yOC4xNy0xNy0zNi0wNiwyNSwwNiwxNCsvNSsvNC0uNS0vNC0vNC0vNC0vNC0vNC0vNC0wNS4wNS4vNC0uMywuMywvNC0wNS4vNi4xOzIzPTI2QDU5Qzg5RDY3QjQ1QDAzPi00Py5EUT1YZk9ba1FSYkhFWDxCVTlCVzZKZD9LZT5LZT5LZT5KZTxKZTpNaD9Paj9VcEdZdEtcdk9dd1Bdd1JXcU5IYUE7TjgmMSsmKy4kKSxoZVZoZVZoZVZoZVZoZVZoZVZoZVZoZVZoZVZoZVZoZVZoZVZoZVZoZVZoZVZoZVZoZVZoZVZrZFprZFpsY1xtZFttZVptZlZpZFFqaFNtaldqa1tnZ19sbGx+f4SQk5qor7W4wsTR1tni5+ry8/X7/P7//v///v/+/fv//vr///r//vn7/PT5+vL4+/L5/PP4+fH4+fH4+u33+un5++Xy9drf4sXMz7C0t5iRlnZrcVVaYkpia1Z1gG+MmIqdp5y/wbzT09Hn5+Xz8/H39/X7+/n8/Pr7+/n+/vz+/vz+/vz+/vz+/vz+/vz+/vz7//71///1///+////+/r/7erwv7rCfnWfS0GvTUK5Sj/CTEDFSz7DRTm8PTS+PzbDRTnERjfDSje9TDqzSTmmRjaZQzSRQzaNRTeFQzeCQjiBQTeBPjWCPDSDOjOGOTGEOTN/OjN9OjJ7OzJ6OjF5OTB4OC92Ny52Ny52Ny52Ny51OS91OS90OC5yNixwNittNCtsNy9pODFqODFoNzBpNzBoNzBnNi9nNi9lMyxmNC1nNS5oNi9qODFqODFrOTJrOTJrNjBsNzFrOTBrOzFsPDBqPjFqQDBpRDJnSDZsUT5nUkF2Z1SBdWWLhnOGg3JLTDw2OS4zOS8zOS8zOS8yOC4yOC4yOC4yOC4xNy0xNy0xNy0wNiwwNiwwNiwvNSsvNSsvNC4vNC4vNC4vNC4vNC4vNC4vNC4vNC4wNS8vNC4vNC4uMy0uMy0vNC4vNC4vNi8uODAvOjIyPjQ0QDY2QjY2QjY2QjQ1QjE2QzFDUD5QXUlSYElJV0BBTzZCUDdGVjtKYkBLZUBMZkFLZUBJYzxIYzpJZDtKZTxTbkVYcktcdlFdd1RcdVVUbU9DXD82STUmMS0nLDAlKi5oZVZoZVZoZVZoZVZoZVZoZVZoZVZoZVZoZVZoZVZoZVZoZVZoZVZoZVZoZVZoZVZoZVZoZVZrZFprZFpsY1xtZFttZVptZlZtaFVsalVtaldqa1tra2N3d3eRkpenrLK/xszS3N7s8fT3/P/+///+/////v///v/+/fv//vr///r+/fj6+/P29+/z9uvz9uv19+z2+O32+Or1+OX19+Hu7tTb27/JyquwsZKTlnl1eWBrcFp0e2mIkIGfp5yuta3Nz8re3tzv7+34+Pb7+/n+/vz+/vz9/fv+/vz+/vz+/vz+/vz+/vz+/vz+/vz9//77///7///+/v7/+/n/+vT/9+390cbYnpCVTT+lUkSpTD2nQDG3RzvPWU3PVUq8QDTERDfGSDrES0C5ST2rQzidPzWXQDeTRD2JQDmFQjqBQDp/Pjh+PjV9PTR/PDR9PTR6OzR4PDR4PDR3OzN1OjJ0OTF0OTF0OTFyOTByOTByOTByOTBvOS9uOC5sNixrNSttODBqODFsNzFqODFrNjBpNzBpNzBoNi9nNS5nNS5mNS5nNi9oNzBpODFrOjNsOzRsOzRqOzNpOjBoPDFrPzJqQzRpRDJmRTJnSjhsVkFqWUd1alaGf22RjnuAf21ERzY1OC0zOS8yOC4yOC4xNy0xNy0xNy0xNy0xNy0xNy0xNy0wNiwwNiwwNiwvNSsvNSsvNC4vNC4vNC4vNC4vNC4vNC4vNC4vNC4vNC4vNC4uMy0tMiwtMiwuMy0vNC4uNS4rNS0rNi4tOS8vOzEyPjI1QTU2QjQ3RDM4RTM/TDpFUj5DUTo7STI4Ri0+TDNEVDlKX0BKYkBMZEJLYz9JYT1HYDlGXzhHYDlSa0RYcExddVNedlZacVRQZ0s9VDguQS4mMS0nLDAlKi5oZVZoZVZoZVZoZVZoZVZoZVZoZVZoZVZoZVZoZVZoZVZoZVZoZVZoZVZoZVZoZVZoZVZoZVZrZFprZFpsY1xtZFttZVptZlZuaVZsalVsa1dsbV1wcWmAgoGeoaa5vsTEy9Hb5ef1+v37///8/f/8/f/+/P38+/n//vz///v//vn8/PT19u7v8ebr7uPp7OHu8OPx8+Xx9OPx9N/y8dzq6tDY2LzHx6uysZWhoYmRk32Qk4CcnpGqraK2u7TAxb/c3Nrp6ef29vT7+/n9/fv///3///39/fv+/vz+/vz+/vz+/vz+/vz+/vz+/vz+/v77+/3//v///v/38u/88+z//PP/+u3/9OTswrK5gXCVUECiTz+4WEq3TT+1RTnARzzBQTbIRTvFSUG9Rj6vQDmhOzaaPTiXQj+NPzuHQDyBQDx9QDt6Pzl5QDl5QDl5QDl2PTR2PTR2PTR1PDNzPTNyPDJyPDJyPDJvOzBvOzBvOzBuOi9rOS5rOS5qOC1pNy5tODJuNzJuNzJsNzFsNzFrNjBpNzBpNzBsOjNqOTJoNzBmNy9mNy9nODBoOTFnOzJqPzZmPjRlPTFmPjJoQzNpRTVmRzNjRzJjSjZoVkBpXElza1aFgm+Nj3pvcl85PSwyOCwyOC4yOC4xNy0xNy0wNiwwNiwwNiwxNy0xNy0xNy0wNiwwNiwwNiwvNSsvNSsuMy0uMy0uMy0uMy0uMy0uMy0uMy0uMy0uMy0uMy0tMiwtMiwtMiwtMiwuMy0tNC0qNCwpNCwqNiwrNy0uOjAxPTE0QDQ2QjQ2QzI6RzU8STc4RTEyPysyQCk4Ri8+TjREWDxFXT1LYEFKYkBLYD9HXztIXjpGXjpTaEdYcE5gdVZedVhbb1RMY0k5TTQpOiglLislKi4kKS1oZVZoZVZoZVZoZVZoZVZoZVZoZVZoZVZoZVZoZVZoZVZoZVZoZVZoZVZoZVZoZVZoZVZoZVZrZFprZFpsY1xtZFttZVptZlZsZ1RsalVubVlvcGB0dW2Fh4akp6y/xMrO1dvm8PL7///7///7/P79/v///v/+/fv///3///v+/fj4+PDv8Ojo6t/i5drg5Nbn69zq79vt8Nvs8Nnu7tbo6NDa2L/MyrHCvae3taCxrp22tKfBvrXJyMPS087Z2dfo6Oby8vD6+vj8/Pr9/fv///3///38/Pr+/vz+/vz+/vz+/vz+/vz+/vz+/vz//vz//P///P//+/r8+/f9//n+//j///T//u3//uz438vFnIqdYlCWSjqlTDy1UUG8TD6/QDfGQzvFRkC/RD+xPjumOjieOjqZPj2RPTuKPzyEQD19QD14QTx0QjtyQztyQztxPzZzPjZzPjZyPTVyPTVyPTVwPjVwPjVuPjRtPTNsPDJrOzFqOzFpOjBpOjBqOjBuNzJwNjJwNjJuNzJtNjFsNzFpNzBpNzBsOzRrOjNoOTFlOTBlOTBlOTBmOzJkPDJmQjZkQjZjQzRkRDVkRzVkSTZiSTNfSTJeTDZlVj9qYk1ybVeEg2+Eh3JcYU0zOigyOCwyOC4yOC4xNy0xNy0wNiwwNiwwNiwxNy0xNy0xNy0wNiwwNiwwNiwvNSsvNSsuMy0uMy0uMy0uMy0uMy0uMy0uMy0uMy0uMy0tMiwsMSssMSssMSssMSstMiwtNC0sNi4rNS0qNCwqNCssNi0uOC0wOi8yPS8yPS01QC83QjE1QS0yPioxPSk1QS04Ri89TzdAVDlGWD5IXEBKXT9JXj1LXj5LYD9UZ0lbb1NjdlphdVpabFRKXUc2RzQnNSYkLSokKSwiJypoZVZoZVZoZVZoZVZoZVZoZVZoZVZoZVZoZVZoZVZoZVZoZVZoZVZoZVZoZVZoZVZoZVZoZVZrZFprZFpsY1xtZFttZVpsZlZqZ1RralVsbllvcmFzdm2BhYSfpKi4v8fW3+Tt9/n7///7///7/P/+/////v/+/fv///v///r8/PT09Orr7eLk5tnf49Xe4tPj6NTn7Nbp7dbq7NTr69Po5s/f2sTTzrjTzrrMxrbLw7jQycHX0s7g29jq5uXw7+3z8vD5+ff9/fv9/fv9/fv///3+/vz8/Pr+/vz+/vz+/vz+/vz+/vz+/vz+/vz//fz/+/z/+Pn//v3+//35//30//jw//X3//bw9+f//+3/7tvNp5Ska1iiW0eqV0WtTDu5RDrARDzART68RT+0QT6qPTqiOjmaOjuVPTyNPz2FPz1+QTx3QjxzRDxvRDtvRDtwPzhxPzZxPzhxPzZxPzhxPzZwPzhvPzVvQDhuPzVtPjZrPDJpPTRoPDFoPDNsOzRvODNyNzNwNjJwNjJuNzJsNzFqODFpODFoNzBnODBlOTBlOjFkPDJlPzRmQDVkQjZfQzVhRzhjTDpkTTtjTThgSzZeTDRdTTReUjpiWD9taFJzc1uAg252e2VGTzo0PSozOS0zOS8yOC4yOC4xNy0xNy0xNy0xNy0xNy0xNy0xNy0wNiwwNiwwNiwvNSsvNSsuMy0uMy0uMy0uMy0uMy0uMy0uMy0uMy0tMiwsMSssMSsrMCorMCosMSssMSssMywvNi8sNi4rNS0qNCwqNCsrNSwtNywuOC0tOCowOys0Py81QC80Py4zPys0Py4zQCw3RjE5SzNATzhDVTtHVzxIWz9NXUJNYERVZUpcblRkdFpgclpYZ1JHWEU0QjEkMiUkLSokKSwiJypoZVZoZVZoZVZoZVZoZVZoZVZoZVZoZVZoZVZoZVZoZVZoZVZoZVZoZVZoZVZoZVZqZFZqZFZrZFprZFpsY1xtZFtsZlpsZlZsaVZsa1ZrbVhsb15scmh6gH6VnaCut77S2+Dq8/j7///5/v/5+v7+/////v/6+ff///v+/fj5+fHy8ujp697k5tjh5dbi59Pk6dLn7dPo7NPn6dHo6NDn5c7g28fX0L7a08PZ0cbe1Mvm3dju5OPz6er68fT/+fv6+ff+/vz///39/fv9/fv///3///38/Pr+/vz+/vz+/vz+/vz+/vz+/vz+/vz//fz/+fj/+vn//v38//33//7u//nx///y//33//r1+ev//e3/+uj0zrurd2KPUTqqXEiyTj64Sj25ST64SUC0R0CvRD6lPTqcOjeWPTmPPjqIPzmAQTp5Qjt0RDpwRjpwRTxwPzhxPzhxPjpxPzhxPjpxPzhwPzpwPzhxQjxwQTluPzlsPTVqPTdqPjVqPTduPTZvODNyNzNxNzNwNjJuNzJsNzFqODFpODFkOC9kOTBkPDJkPjNkQDRjQTVjQTVfQzVaRTRfTjxnVkJoV0NjUzxeTzhbTzVcUjddVjxdWT5ubFV0dl58gWtjbVUyPig2Qi4zOy4zOS8zOS8zOS8yOC4yOC4yOC4yOC4xNy0xNy0xNy0wNiwwNiwwNiwvNSsvNSstMiwtMiwtMiwtMiwtMiwtMiwtMiwtMiwsMSssMSsrMCorMCorMCorMCosMSsrMistNC0rNS0qNCwqNCwrNSwrNSwsNi0tNywsNisvOiwyPS82QTE3QjI3QjE1QDA0Py4yPy00Qy46RzM9TDVBTzhEVDpKWD9MXEJUYklca1RjcFxebVpVYlFEUkMyPjAjLyUnMC0mLCwkKipoZVZoZVZoZVZoZVZoZVZoZVZoZVZoZVZoZVZoZVZoZVZoZVZoZVZoZVZoZVZoZVZqZFZqZFZrZFprZFpsY1xtZFtsZlpsZlZvbFltbFdqbFdna1pnbWNye3iOmJqosbjK09jj7PH4/f/3/P/6+//+/////v/6+fX///r9/fX4+O7x8eXp693m6djl6djn7Nbm7NLp7dLq7dLo6M7o5s/o48/h2sjY0MPYzsTd0szp3tr47ev/9Pb/9fn/9fv/+fz//f7///3///3+/vz+/vz///3///39/fv+/vz+/vz+/vz+/vz+/vz+/vz+/vz//vr//fv//fv9/Pr5/fz4///1///z///t/frz//v8//r///T/9ub/89//483XrZWpb1moV0SuUUCsTz6vT0GxT0KtS0CkQzyZPDWVPjePPzaJQDmBQTd7Qjd1RDZxRThxRTpwPzhxPjpzPjpxPjpxPjpxPjpyPztxQDtzQj1xQjxwPzptPjhsPTdrPjhtPjhvPjlvODNxNzNvODNtODJtODJqOTJoOTFmOjFmOzJkPjNkQDRiQjVgQzVdQTNcQDJXQjFURzRcVD9mXkdqX0liWD9aUzlaUzdcVzpbVzxYVztrbVVzd151fWZVYUkmMhw4RDAzOy40OjA0OjAzOS8zOS8zOS8yOC4yOC4xNy0xNy0xNy0wNiwwNiwwNiwvNSsvNSstMiwtMiwtMiwtMiwtMiwtMiwtMiwtMiwsMSsrMCorMCoqLykqLykrMCorMCosMSsrMispMysqNCwrNS0sNi0sNi0tNy4tNy4tNy4vOS4yPDE2QTM5RDY5RDQ3QjQ2QTEwOysyPy02QzE5RjI8STVBTzhGVD1KWD9SYElbaFRhblxdallRXU9CTkAwPDAiLCMrMS8oLi4mLCxpZldoZVZoZVZoZVZoZVZoZVZoZVZoZVZpZldpZldpZldpZldpZldpZldpZldpZldrZVdrZVdsZVtsZVttZF1uZVxtZ1ttZ1dxbltrbVdrbllrcmBrc2hweXaHkZOfqrC7xMnQ2d7q7/P2+/78/f/+/////v/+/fn///r+/vb6+vD39+v09ujx9OPs8N/p7tjx9drt8tTr7tPs7NTo5tHh3Mnd1cje1Mvh1M7o2tny5OT66+7+8vT/9/v/+f///P///f7+/vz+/vz+/vz+/vz+/vz+/vz+/vz+/vz+/vz+/vz+/vz+/vz+/vz+/vz+//r//vr//vr+/vz9//77///6///6///7///+//////3/+/X/+/H//Oz/++X/89v/6tG6gmmmYkuXTzmfVD+oWkajUkGeSzugTT+OPDCLPTCGPjJ/PS94PS90Py9zQjN1RTdyPTdzPjp0PTp0Pzt1QDx1QDx0PztxPjpzQDxyQTxyPztxQDtwPzpvQDpvPjlvPjlrOTJtODJsOjNsOzRsOzRoPDNnPDNkPjNjPzNePjFkRzljRzlUPS1OOShNOCdAMR5YUjxQTjdLSTBPSzJdWT5pZUplYURWVTdYWDxeYURwdFt6gGZkbFU+SjItOSMyPio0PC81OzE1OzE0OjA0OjAzOS8zOS8zOS8zOS8zOS8zOS8yOC4yOC4xNy0xNy0wNiwxNjAxNjAwNS8wNS8wNS8vNC4vNC4vNC4sMSssMSssMSssMSssMSssMSssMSsrMCouNS4uNS4tNC0tNC0tNC0tNC0uNS4vNi4rMiotNCwxODA1PTI5QTY9RThASD0/Sjw3QjI2QTAzPi0xPSkzPys5RS9CTjhJVT9PW0dXY09daFdaZVVMV0k8RjsvOTApMyspLysoLiwnLStoZVZoZVZoZVZoZVZoZVZoZVZoZVZoZVZpZldpZldpZldpZldpZldpZldpZldpZldrZVdrZVdsZVtsZVttZF1uZVxtZ1traFdvblpqbFZrbllsc2FqdGlxfHiJlJajrrS+x8zS2+Dr8PT3/P/9/v/+/////f7+/fn///r+/vT7++/4+ev09+bx9OHs8d3o7dbq79Hm68vk58rm5s7j4M3f2cve1Mvf1M7n2djt39/25+r77/P/9Pj/9/v/+v7//P///vz+/vz+/vz+/vz+/vz+/vz+/vz+/vz+/vz+/vz+/vz+/vz+/vz+/vz+/vz+/vz9//r9//r9//z9/v/+/f///P///P//+////P///P//+/n//PX//vH//+3/++X/8tn/69HgsZendVySXESWWkKaWUOaVkOaU0GORzWLRjaIRTSDRDN8QzJ3QjBzQC9vPi91QDh0Pzl1Pjt1QDp0PztwPjdwPTl0QjtxPjpwPzhwPzpvPjdvPjltPjZuPThtPjZrPDRsPTVtPjZrPzZqPzZnQTZlQTViQjVkRzlbQTJeRzdfSjlPPixGNyRHOCU/NyJMTDRITDNERyxDRitNTTFbWz9iYUNgYUJaWj5kZ0pzd15zeV9YYEk6RCwvOyU3Qy82PjE3PTM2PDI2PDI2PDI1OzE1OzE1OzE1OzE1OzE1OzE0OjA0OjA0OjAzOS8zOS8yNzEyNzEyNzExNjAxNjAxNjAwNS8wNS8uMy0uMy0tMiwtMiwsMSssMSsrMCorMCoqMSoqMSopMCkpMCkqMSoqMSorMissMywuNS4uNS0uNS0wNy80OzM6Qjc/Rj5CSj87Rjg6RTU3QjE0Py4zPys2Qi48SDJATDZMWERTX0tZZFRXYlJMVks9RzwxOzIrNS0rMS0qMCwpLy1oZVZoZVZoZVZoZVZoZVZoZVZoZVZoZVZpZldpZldpZldpZldpZldpZldpZldpZldrZVdrZVdtZFttZFttZF1uZVxtZ1traFdubVlpbVZqb1lrdGFpdWlxfXmKmJmlsri/ytDU3eLt8vb3/P/8/f/9//7//f7+/fn///f9/fP6+u74+ev09+Tw897p7tjl69Hi58ne4cLd3cHe3sbe28jd18vg1c/k2dfu4uTz5+v67vL/9Pj/9/v/+fz/+v3//f3//vz+/vz+/vz+/vz+/vz+/vz+/vz+/vz+/vz+/vz+/vz+/vz+/vz+/vz+/vz9//z6//z6//z7//7+/v7//P//+v//+f//+P//+f//+v//+vr//fj///b///P9/+//+ub/893/+OD/7NXjv6esgmqHWUKGUjySW0aXXUmNUz9/RjJ1PilyPil0QSx0RDB2RTZxPzRuPDNxPDZ0Qjl0QjtvPzVxQDl4SD5uPTZtPjRtPjZtPjRsPTVqPjNsPTVqPjVnPzVnQTZoQjdnQzdlQzdjQzZhRDZeRDViSztVQjFaSTdgU0BSRzNEPCdFPShGQStCRi1CSC5BRSo8QCU/QiVMTzJfYEFpakthYUVucVR2emFnbVNKTzk1PSY1PSg9RjM5PzM4PjQ4PjQ4PjQ3PTM3PTM3PTM3PTM4PjQ4PjQ4PjQ3PTM3PTM3PTM2PDI2PDI1OjQ1OjQ0OTM0OTMzODIzODIzODIzODIwNS8wNS8vNC4uMy0tMiwsMSsrMCorMCopLiopLiopLiopLiopLioqLysrMCwsMS0xNjIvNC4sMSssMSswNS82OzQ9QjxBSEBASz0+Szo8STc4RTM0QS0yPyszQSo1QyxEUT1LWERRXk1RXk1IVEg8SDwyPjQuOC8tNC0tNC0sMi5nZFVnZFVoZVZoZVZoZVZpZldpZldpZldpZldpZldpZldpZldpZldpZldpZldpZldrZVdrZVdtZFttZFttZF1tZlxtZ1tqaVdrbVhpbVZqb1lqc2BodGhufXiImJims7m/ytDT3OPr8Pb2+//8/f/9//7///3//vr+/vb9/fH6++34+en09+Tv89zn7NXj587c38DX2rvW1rzZ18Ld18fe183l29ns4OD47PD78Pb/9fv/+f7/+v3/+/v/+/v//fz//vz+/vz+/vz+/vz+/vz+/vz+/vz+/vz+/vz+/vz+/vz+/vz+/vz+/vz+/vz9//z6//74//77//7+/v7//P7/+v//+f//+P7/+v3/+fz/+fn//fr///r///j7//X8/vD//+//++v/8d//8N3/79rx0r20kHp5Uz50SjR1SDN2STR6TTh+Tzt5TDduQS5lNyd7TUB0RTtxQjhzRDpvQzhnOzBkOC1nPTFpPzNpPzNpPzNnPzNnPzNmPjJmPjJlPzJjQTViQjVgQzVgRDZfQzVbRDRaRTRXRDNYSTZPQi9cVD9vaVNjXkhNSzRJRzBJSzM+RCo/SC1ARio8QiY8QSNFSixYWTpkZUZtbVF4eFx0dl5bX0ZBRC82OyU6Pys+QjE5PzM5PzU5PzU4PjQ4PjQ4PjQ3PTM3PTM5PzU5PzU4PjQ4PjQ4PjQ4PjQ4PjQ4PjQ3PDY3PDY3PDY2OzU2OzU2OzU1OjQ1OjQzODIzODIyNzEwNS8vNC4tMiwsMSssMSsrMCwrMCwrMCwrMCwrMCwsMS0tMi4tMi4wNTEuMy8rMCwrMCotMi4zODI4PTk7QjpBTD5ATTtATTs9SjY4RTE0QS0xPygxPyg9SjZCTztJVkRKV0ZEUEI7RzsyPjQuOjAsNi4uNS4tNC1nZFVnZFVnZFVoZVZoZVZpZldpZldpZldpZldpZldpZldpZldpZldpZldpZldpZldrZVdsZFdtZFttZFttZF1tZlxtZ1tqaVdsbllpbldpcVpnc19kcmVqeXSFlZWjsre9yM7S2+Lq7/X0+f37/P/9//7///3///r///j///P+//H8/ev3+uXx9d7o7dbj58zZ3L/V1bnS0LnU0b7a1Mjg2dHq4N/06e3+8/n/9/z/+////f///v///vz//vr//vr+/vz+/vz+/vz+/vz+/vz+/vz+/vz+/vz+/vz+/vz+/vz+/vz+/vz+/vz+/vz9//76///6///7///+/v7//f7//Pz/+/z/+/r/+vj/+ff/+vj//Pn///v///v9//r9/vn59O7//vb//fT//PP/++7/9+f75tXp0sDPtKG2moWUdWF3VkNsSTZtSDZyTT11UEBtRjdqQzRnQjJrRjZuSTluSjpvSztwTDxlQTFjQjFjQjFjQjFjQjFjQjFiQzFgQzNdRjZcRzZdSDdaRzZaRzZXSDVURzRSRzNQSDNPSTNmZE1+fmZyclpWWEBKTDRHTTM8RSo8Ris/SCtBRytBRihDSCpNTi9UVTZ4d1t7el5ublZVVT1DQi4/QSw/QC47Pi07PjM5PzU5PzU4PjQ4PjQ3PTM3PTM3PTM4PjQ4PjQ4PjQ4PjQ4PjQ4PjQ4PjQ4PjQ5Pjg5Pjg5Pjg5Pjg4PTc4PTc3PDY3PDY2OzU2OzU1OjQzODIyNzEwNS8vNC4vNC4tMi4tMi4sMS0sMS0sMS0sMS0tMi4tMi4tMTAsMC8sMC8tMi4uMjExNjIzNzY0OzQ7Rzk9TDlATzxATzo8SzY3Ri80QywyQSo2RS46STRATzxCUD8/TT44RjcxPzItOS0sNi0tNCwsMytmY1RnZFVnZFVoZVZoZVZpZldqZ1hqZ1hpZldpZldpZldpZldpZldpZldpZldpZldsZFdsZFdtZFttZFttZF1tZlxtZ1tqaVdrbVhpbldpcVpnc19icGNneHKClJSjsrfAy9HU3eTr8Pb1+v77/P/9//7///3///r///j///T///P//+/6/ejz9+Dp79Xj58zX2r3R0bXNy7TOy7rWz8Xe19Hs4uP37vP/9v7/+v///f///v////3+//r+//n+//r+//r+/vz+/vz+/vz+/vz+/vz+/vz+/vz+/vz+/vz+/vz+/vz+/vz+/vz+/vz+/v79/v/9/v/9/v/9//79//z+//r+//n///f9/fP9/fX+/fj+/fn//vz+/v7//f///v/++f///P//+/z79vP/+PL//fT//vH//u3/+un/8+D35NPn0r/Uuqm6n46fg3WPcmR8XUt9Xkx0VUNiRTNYOylZPCpbPixYPSpgRTJgRTJgRTJgRzNgRzNgRzNgRzNeSTRcSzdcTTpcTTpaTTpYTTlVTThTTTdRTDZOTDVRUTlqbFR8gGdtcVhTWT9GTDI+Ryw8Ris8Ris/SCtESi5FSixERypISSpMTS55eFx0c1dmZE1UUjtMSTZLSjZGRTM8PS08PzQ6QDY5PzU5PzU4PjQ4PjQ4PjQ4PjQ3PTM3PTM4PjQ4PjQ4PjQ5PzU5PzU5PzU7QDo6Pzk6Pzk6Pzk5Pjg5Pjg5Pjg5Pjg5Pjg4PTc3PDY2OzU1OjQ0OTMzODIzODIvNDAuMy8tMi4sMS0rMCwrMCwrMCwrMCwrLy4sMC8tMTAuMjEvMzIvMzIvMzIuNS40QDI3RjM9TDdATzo/Tjc8SzQ5SDE4RzA1RC04RzA8SzY+TTo8Sjk3RTYxPzItOS0rNSwtNCwsMytmY1RmY1RnZFVoZVZpZldpZldqZ1hqZ1hpZldpZldpZldpZldpZldpZldpZldpZldsZFdsZFdtZFttZFttZF1tZlxtZ1tqaVdqbFdobVZoclpmc19jcWRoeXOFl5elt7vH0tja4+rw9fv4/f/8/f/9//7///3//vn///f///P///D9/uz4++bw9N3k6tDe4sfV1bnOzLPJxLDKxLTQyb/a0s/p4OP27fL/9///+v///f///v////39//r8//j8//j9//r+/vz+/vz+/vz+/vz+/vz+/vz+/vz+/vz+/vz+/vz+/vz+/vz+/vz+/vz+/v7//P///P/+/f/9//76//r4//n4//X4//P4//P4//X8//j9//r//f7//P///P//+//99///+v///P///f///v/+/fv7+/P6+Oz///H//+///+///u3//e3/9uf/7uL96tv649H/5tDjyrSlj3h0XkdlTzhjTTZcSDBeSjJcSjJcSjJdSzNdSzNeTDReTDRcTTZZTjhYUDtYUDtWUDpVTzlTTjhQTjdOTjZNTzdQVDtgZkxmb1RVXkNFTzRBSzA8Ris/SS4/SS5DTC9ITjJITS9HSi1PUDFZWDpxbVJrZ0xhXEZbVkBZVEFUUT5NSjlCQzM+QTY7QTc7QTc7QTc6QDY6QDY6QDY5PzU4PjQ4PjQ4PjQ5PzU5PzU6QDY6QDY6QDY7QDo7QDo7QDo6Pzk6Pzk5Pjg5Pjg5Pjg6Pzk6Pzk6Pzk5Pjg4PTc4PTc4PTc3PDY0OTUzODQxNjIvNDAtMi4sMS0sMC8rLy4sMC8tMTAtMTAuMjEuMjMuMjMtMTIsMi4rOSovQC02SDI8Tjg9Tzc8TjY6TDI6TDI1Ry83STE6TDY8TTo7TDo2RzcwQDMtOy4sNi0tNCwsMytjZFRjZFJkZVVnZlRoZldpZ1hpZ1hqaFloZldpZldpZldpZldpZldpZldpZldrZVdrZVdrZVdtZVpsZVttZF1tZlxrZ1tqaVdpa1ZobVdpc1tndGBkcWdrfHaJm52su8DN2N7g5+30+f/6///7///9//z+//r+/vb6+vD6++36++v4+ef09uHr7dff48rZ3MHT0bjMx7HFvqzGvrHMw7zWzsvm3eD06vL+9///+v///v///v/+/v79//r8//r8//r9//z+/vz+/vz+/vz+/vz+/vz+/vz+/vz+/vz+/vz+/vz+/vz//vz//vz//vz//f7//P///P///f/9//77//z4//n3//f3//X4//b5//b8//j///v//v3//P//+///+v//+v//+////P///f/+/f/7/fz8/vv+//r5+vL7+/H9+vH++u//+ez/++z//e///ez/8Nv/++Ls3MOejnVgUDdSQilYSC9YSC5bTTNbTTNaTjRaTjRbTzVbTzVcUDZbUThVTzdUTzlUTzlRTzhQTjdOTjZLTTVJTTRKTjVMUjhTXEFQWT5ASSw8RShBTC4/SixETTBFTjFKUDRNUjRLTjFMTDBZWT1rak5oZEliXkVeWkFfWkRgW0daVUFRTzpLSjhBQjRAQjVAQjU+QTY+QTY+QTY9QDc9QDc5PzU5PzU5PzU6QDY6QDY6Qjc6Qjc7Qzg7QDk7QDk7QDo6Pzg6Pzk6Pzg5Pjg5Pjc7QDo7QDk7QDo7QDk6Pzk6Pzg6Pzk6Pzk4Pzg3PTk0OzQzODIxNjAvNC4uMy8uMy8uMjEuMjEtMi4sMi4sMywsMyssMyspNiUkNh4qPiIyRis4TDM7TzY8TjY7TTU7TTU4SjI5SzM7TTU9Tzc8Tjg3SDUxQjAuPC0tNy4uNS0tNCxdZVBeZk9fZ1JiZ1FkaVVmaVZnaldpalhmZ1VoZ1VoZVZoZVZqZFZrZVdsZlpsZlhsZlhraFltZ1trZ1xtZl5qZl1pZVpnZVZnaFZma1Vlbllib11kcWh0hIGWqKy4x87S2+Lk6e/y9/v3/P/4/Pv8/vn8//j8/vP39+v5+ur49+Xy8d/u7dnr6tbh38rX0r7Xz7zLwK69tKW9s6nCt7HMwsHb0tfq4Oj68/v89v/++////f/+/f/8/f/8/v38/v3+/v7+/v7+/v7+/v7+/v7+/v7//vz//vz//vz//vz+/fn+/fn//Pn//fr//vv//vv//v///f7//P3//f7////+//39//z7/fj///v8/ff//fj//vr//fj/+vb/9/T/+fn/+v///P///f///v/////+/vz9//78/v3//////////vz//vn//vX//vD//er//eb69Nz/+uDn4MaPiG5VTjJXTTJUSy5TSitXTjFXTjFVTjFVTjFUTzJUTzJUTjRTTzRRTTRSTjVRTzZQUDZNTzdLTzZITTZHTDVKUDZGTzRBSi09RilARyhESypGTStFTCpQVjRQUzRLTi9JTC9UVDhiYkZjY0laWkBbWUBcWkFdW0JdW0JbWUBYVj1VUzpTUThIRjFHRDFFQjFCQDFBPzI+PjI/PzU+QDU7PjU5PzU5PzU5QTY5QTQ4QzU4QzU5Qzg6Qjc5QTY5QDg4QDU4Pzc5QTY5QDg6Qjc6QTk6Qjc6QTk6Qjc7Qjo8RDk9RDw+RT04Qjo4Qjo4Qjk4QDU2PjE0PC8zOS8yNzEuNDAvNTEwNzAuOC0uOykwQCY2Rik3TSc7Vis6Vys7VTA7VDQ7Ujg9UDw+Tzw+Tzw6TDZAUjhFVz1GWT1EWD1AVDs1SDIrPCosNistNCwrMipaZk5bZ09eaFBfaVFialNja1RnbFhoa1hoaVdnaFZpZldpZldrZVdsZlhtZVptZ1ltZ1lraFlrZ1trZ1xqZV9qZl1oZlpmZ1doaVdnbFZmb1xlcmFqd256iomcq7K6yNHQ2eDj6Ozy9/v4/v75/vr6//j7/vX5/e/4+ev3+Oj19OLt7Nrp5tPl4s/c18TSy7nKv63BtKS5raG8r6bBtrLLwcDb0Nbm3+b78/799//++////f/+/f/9/P/8/f/8/f/+/v7+/v7+/v7+/v7+/v7+/v7//vz//vz//vz//vz//fr//Pn//Pn//fr//fn//vr//v3//fz//P3//f7//v///v///f79+/z//v3//vv//Pr/+PP47efy5d326N/78Or/+v3//P///f////3///3+/vz9//78/f/+/f/+/f///f///vz//ff///D//uj//+T69t39++Lk4MeLh2xSTTBTTjFSSy5RSytVTy9VTy9UTzFUTzFTTzJTTzJRUDRRTzZRTTJQTzNQTjVOUTZNTzdKUDZITTZFTTVIUTZGTzRCSy4/SClDSChHTStKUCxLUS1PUzBQVDFWWjleYUJfYkNaXUBWVjxVVT1WVj5XVT5YVj1ZVz5ZVz5YVztXVjpYVDlRSzNQSjRMRzRJRDFEQTJCQDNBPzM+QDU8PTU5PzU5PzU5QTY3QjQ4QzU3QzU3QzU6Qjc6Qjc5QTY4QDU4QDU5QTY6Qjc6Qjc6Qjc6Qjc6Qjc6Qjc7Qzg8RDk9RTo8Rjs9Rz88SD48Rjs7RjY8RDU6QjM5PzM4PTY3Pjc2PTYzPTUyPjA0Qyw5TCxCWS9HYTFRbztNbTtMaT1GYT5CWT88Uj08TT06Szk9TzlEVjxLXkJOYUNMYERIXEE6UTcxRDArNSorMiopMChaZk5bZ09caFBgalJialNkbFVnbFhpbFlpalhpalhraFlraFltZ1ltZ1lvZ1xuaFptZ1lraFlrZ1tqZltqZV9qZl1oZlpmZ1doaVdlalRkbVpndGNvfHN/j46drLO2xM3N1t3e5unx9vr4/v76/v35/vj4+/L0+Orz9Obw8eHq6dfh4M7c2cbX1MHQy7jHwK6/s6O9sKC8sKTDtq7LwL7Vy8zj2N7r5Ov89P/99//++////f/+/f/9/P/8/f/9//7+/v7+/v7+/v7+/v7+/v7+/v7//vz//vz//vz//vz//fr//fr//Pn//Pn//Pj//Pj//fz//Pv/+/z//P3//v///v///f7+/P3//v3//vv//fv88+7q39ni1c3r3dT37Ob/+v3//P///f////3///3+/vz9//78/f/+/f/+/f///v////3//vX//u3//ef//uP7997+/OPj38aJhWpQSy5STTBRSi1RSi1VTy9VTy9VUDJVUDJUUDNTTzJRUDRQTzNRTTJPTjJQTjVNUDVNTzdKUDZJTjdHTzdIUTZGTzRDTC9DTC1HTCxLUS9PVTFTWTVRWTJYYDlqcEx5f11xdlZZXkBMTzRNUDVRUTlRUTlSUDlTUThUUjlWVDtZVTxaVj1YUjxWUDpSTTpOSTZIRTZEQjVDQTU/QTY8PTU5PzU6QDY5QTY3QjQ4QzU3QzU3QzU6Qjc6Qjc5QTY5QTY5QTY5QTY6Qjc6Qjc6Qjc6Qjc6Qjc6Qjc7Qzg8RDk+Rjs8Rjs/SUE+SkA/ST4/SjpASDk+Rjc+RDg9Qjs+RT48Qzw3QTk1QTM5SDFCVTVQZz1YckJgfkpcfEpYdUlOaUZEW0E5Tzo2Rzc0RTM8TjhFVz1OYUVTZkhTZ0tOYkdAVz02STUvOS4vNi4tNCxaZk5bZ09caFBealJibFRlbVZobVlpblprbFprbFpsaltsaVpuaFpuaFpwaF1vaVtsaVpraFlrZ1tqZltpZF5pZVxoZlpnaFhmZ1ViZ1FhaldlcmFvfHN+jo2WpayrucLH0Nfa4efu8/f2/Pz4/Pv1+vTz9u3u8uTp6tzj5NTc28nT0sDOy7jJxrPDvqu9tqTDt6fHuazNwbXWycHf1NLo3t/z6O748fj99f/++P///P///P/9/P/9/f/8/v39//7+/v7+/v7+/v7+/v7+/v7+/v7//vz//vz+/fv//vz//fr//fr//fr//Pn/+/f/+/f//fz//Pv++vv/+/z//f7//v///f7+/P3//Pv//vv//fv99O/t4tzm2dHw4tn88ev/+v3//P///f7///3///v+//r9//78/f/+/f/+/f///v////3//vX//u3//Ob//OP++eP//ufk38mKhm1QSjBSTTBTTC9TTC9VTy9VTy9VUDJWUTNUUDNTTzJQTzNPTjJQTDFPTjJPTTRMTzRNTzdLUTdKTzhIUDhKUzhHUDVHUDNJUjNOUzNQVjRXXTlcZD1nckh0gVWHkmqQmnWHjmxudVRaYUJTVzxNTzdOTjZNTTVOTDVPTTZSUDlXUjxZVD5aVD5YUjxUTzxRTDlLSDlHRThFQzdBQzg9PjY6QDY6QDY5QTY3QjQ3QjQ2QjQ2QjQ7Qzg6Qjc6Qjc5QTY5QTY6Qjc6Qjc7Qzg7Qzg6Qjc6Qjc7Qzg8RDk9RTo+Rjs9Rzw9Rz89ST8+SD0+STk/Rzg+Rjc+RDg9Qjs9RD07Qjs2QDg1QTM6STJEVzdSaT9bdUVcekZYeEZUcUVJZEE+VTsySDMvQDAuPy02SDJAUjhMX0NSZUdTZ0tPY0hAVz02STUxOzAwNy8tNCxZZ05aaE9caFBealJibFRlbVZpblpqb1ttblxsbVtta1xtaltvaVtvaVtvaV1vaVtsaVpraFlqZlppZVppZF5pZVxpZ1tnaFhnaFZjaFJhaldlcmFvfHN7i4qQn6aisLnBy9TU3eTp8fTy+vz0+vrx9vLt8Ofo7N7i49Xa28vS0b/MybjJxLHDvqu/uKa8s6LKvq7Txbjc0MTm2dHt4uD27O3/9Pr/+f//9///+v///P///P/9/P/8/P78/v3+///+/v7+/v7+/v7+/v7+/v7+/v7//vz//vz+/fv+/fv//fr//fr//fr//Pn/+vb++fX//fz/+/r9+fr++vv+/P3//f7//v///f7//Pv//fr//Pr/+PP37Oby5d346uH/9O7/+v3//P///f7///3///v+//r9//78/f/9/P/+/f///v////3//vX//ez/++X++uH//Ob//+nn4syMiG9STDJUTzJUTTBVTjFVTy9VTy9WUTNWUTNVUTRTTzJPTjJOTTFQTDFOTTFOTDNLTjNMTjZLUTdMUTpKUjpMVTpJUjdKUzZPWDlUWTlVWzldYz9mbkeCkmOSpnOfsIObqn+UoHqIlHBye1xcYkZMUDdMTjZMSzZMSjVMSjVRTDhUTTpWUDpXUTtWUDpTTjtRTDlNSjtJRzpHRTlDRTo9PjY6QDY6QDY5QTY3QjQ3QjQ2QjQ2QjQ7Qzg7Qzg6Qjc6Qjc6Qjc6Qjc7Qzg7Qzg7Qzg7Qzg7Qzg7Qzg8RDk9RTo+Rjs9Rzw9Rz88SD49Rzw9SDg/Rzg9RTY9Qzc9Qjs6QTo5QDk2QDg1QTM5SDFCVTVOZTtWcEBWdEBTc0FQbUFFYD05UDYtQy4rPCwrPCoxQy08TjRIWz9QY0VSZkpOYkdAVz01SDQsNisrMionLiYKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cHJvZy5qcGcgYi90ZXN0cHJvZy5qcGcKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDkyMGZlZTIuLjAwMDAwMDAKLS0tIGEvdGVzdHByb2cuanBnCisrKyAvZGV2L251bGwKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvdHJhbnN1cHAuYyBiL3RyYW5zdXBwLmMKaW5kZXggNDA2MDU0NC4uNWMzMTQxNiAxMDA2NDQKLS0tIGEvdHJhbnN1cHAuYworKysgYi90cmFuc3VwcC5jCkBAIC0yLDYgKzIsNyBAQAogICogdHJhbnN1cHAuYwogICoKICAqIENvcHlyaWdodCAoQykgMTk5Ny0yMDA5LCBUaG9tYXMgRy4gTGFuZSwgR3VpZG8gVm9sbGJlZGluZy4KKyAqIENvcHlyaWdodCAoQykgMjAxMCwgRC4gUi4gQ29tbWFuZGVyLgogICogVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEluZGVwZW5kZW50IEpQRUcgR3JvdXAncyBzb2Z0d2FyZS4KICAqIEZvciBjb25kaXRpb25zIG9mIGRpc3RyaWJ1dGlvbiBhbmQgdXNlLCBzZWUgdGhlIGFjY29tcGFueWluZyBSRUFETUUgZmlsZS4KICAqCkBAIC0yMCw5ICsyMSwxOSBAQAogI2luY2x1ZGUgImppbmNsdWRlLmgiCiAjaW5jbHVkZSAianBlZ2xpYi5oIgogI2luY2x1ZGUgInRyYW5zdXBwLmgiCQkvKiBNeSBvd24gZXh0ZXJuYWwgaW50ZXJmYWNlICovCisjaW5jbHVkZSAianBlZ2NvbXAuaCIKICNpbmNsdWRlIDxjdHlwZS5oPgkJLyogdG8gZGVjbGFyZSBpc2RpZ2l0KCkgKi8KIAogCisjaWYgSlBFR19MSUJfVkVSU0lPTiA+PSA3MAorI2RlZmluZSBkc3RpbmZvX21pbl9EQ1RfaF9zY2FsZWRfc2l6ZSBkc3RpbmZvLT5taW5fRENUX2hfc2NhbGVkX3NpemUKKyNkZWZpbmUgZHN0aW5mb19taW5fRENUX3Zfc2NhbGVkX3NpemUgZHN0aW5mby0+bWluX0RDVF92X3NjYWxlZF9zaXplCisjZWxzZQorI2RlZmluZSBkc3RpbmZvX21pbl9EQ1RfaF9zY2FsZWRfc2l6ZSBEQ1RTSVpFCisjZGVmaW5lIGRzdGluZm9fbWluX0RDVF92X3NjYWxlZF9zaXplIERDVFNJWkUKKyNlbmRpZgorCisKICNpZiBUUkFOU0ZPUk1TX1NVUFBPUlRFRAogCiAvKgpAQCAtMTM0LDcgKzE0NSw3IEBACiAgICAqIFBhcnRpYWwgaU1DVXMgYXQgdGhlIHJpZ2h0IGVkZ2UgYXJlIGxlZnQgdW50b3VjaGVkLgogICAgKi8KICAgTUNVX2NvbHMgPSBzcmNpbmZvLT5vdXRwdXRfd2lkdGggLwotICAgIChkc3RpbmZvLT5tYXhfaF9zYW1wX2ZhY3RvciAqIGRzdGluZm8tPm1pbl9EQ1RfaF9zY2FsZWRfc2l6ZSk7CisgICAgKGRzdGluZm8tPm1heF9oX3NhbXBfZmFjdG9yICogZHN0aW5mb19taW5fRENUX2hfc2NhbGVkX3NpemUpOwogCiAgIGZvciAoY2kgPSAwOyBjaSA8IGRzdGluZm8tPm51bV9jb21wb25lbnRzOyBjaSsrKSB7CiAgICAgY29tcHB0ciA9IGRzdGluZm8tPmNvbXBfaW5mbyArIGNpOwpAQCAtMjAwLDcgKzIxMSw3IEBACiAgICAqIHRoaXMgaXMgZXNzZW50aWFsbHkgdGhlIHNhbWUgYXMgdGhlIHJvdXRpbmUgYWJvdmUuCiAgICAqLwogICBNQ1VfY29scyA9IHNyY2luZm8tPm91dHB1dF93aWR0aCAvCi0gICAgKGRzdGluZm8tPm1heF9oX3NhbXBfZmFjdG9yICogZHN0aW5mby0+bWluX0RDVF9oX3NjYWxlZF9zaXplKTsKKyAgICAoZHN0aW5mby0+bWF4X2hfc2FtcF9mYWN0b3IgKiBkc3RpbmZvX21pbl9EQ1RfaF9zY2FsZWRfc2l6ZSk7CiAKICAgZm9yIChjaSA9IDA7IGNpIDwgZHN0aW5mby0+bnVtX2NvbXBvbmVudHM7IGNpKyspIHsKICAgICBjb21wcHRyID0gZHN0aW5mby0+Y29tcF9pbmZvICsgY2k7CkBAIC0yNjUsNyArMjc2LDcgQEAKICAgICogUGFydGlhbCBpTUNVcyBhdCB0aGUgYm90dG9tIGVkZ2UgYXJlIGNvcGllZCB2ZXJiYXRpbS4KICAgICovCiAgIE1DVV9yb3dzID0gc3JjaW5mby0+b3V0cHV0X2hlaWdodCAvCi0gICAgKGRzdGluZm8tPm1heF92X3NhbXBfZmFjdG9yICogZHN0aW5mby0+bWluX0RDVF92X3NjYWxlZF9zaXplKTsKKyAgICAoZHN0aW5mby0+bWF4X3Zfc2FtcF9mYWN0b3IgKiBkc3RpbmZvX21pbl9EQ1Rfdl9zY2FsZWRfc2l6ZSk7CiAKICAgZm9yIChjaSA9IDA7IGNpIDwgZHN0aW5mby0+bnVtX2NvbXBvbmVudHM7IGNpKyspIHsKICAgICBjb21wcHRyID0gZHN0aW5mby0+Y29tcF9pbmZvICsgY2k7CkBAIC0zOTMsNyArNDA0LDcgQEAKICAgICogbm90IG1pcnJvcmVkLgogICAgKi8KICAgTUNVX2NvbHMgPSBzcmNpbmZvLT5vdXRwdXRfaGVpZ2h0IC8KLSAgICAoZHN0aW5mby0+bWF4X2hfc2FtcF9mYWN0b3IgKiBkc3RpbmZvLT5taW5fRENUX2hfc2NhbGVkX3NpemUpOworICAgIChkc3RpbmZvLT5tYXhfaF9zYW1wX2ZhY3RvciAqIGRzdGluZm9fbWluX0RDVF9oX3NjYWxlZF9zaXplKTsKIAogICBmb3IgKGNpID0gMDsgY2kgPCBkc3RpbmZvLT5udW1fY29tcG9uZW50czsgY2krKykgewogICAgIGNvbXBwdHIgPSBkc3RpbmZvLT5jb21wX2luZm8gKyBjaTsKQEAgLTQ3NCw3ICs0ODUsNyBAQAogICAgKiBub3QgbWlycm9yZWQuCiAgICAqLwogICBNQ1Vfcm93cyA9IHNyY2luZm8tPm91dHB1dF93aWR0aCAvCi0gICAgKGRzdGluZm8tPm1heF92X3NhbXBfZmFjdG9yICogZHN0aW5mby0+bWluX0RDVF92X3NjYWxlZF9zaXplKTsKKyAgICAoZHN0aW5mby0+bWF4X3Zfc2FtcF9mYWN0b3IgKiBkc3RpbmZvX21pbl9EQ1Rfdl9zY2FsZWRfc2l6ZSk7CiAKICAgZm9yIChjaSA9IDA7IGNpIDwgZHN0aW5mby0+bnVtX2NvbXBvbmVudHM7IGNpKyspIHsKICAgICBjb21wcHRyID0gZHN0aW5mby0+Y29tcF9pbmZvICsgY2k7CkBAIC01NDIsOSArNTUzLDkgQEAKICAganBlZ19jb21wb25lbnRfaW5mbyAqY29tcHB0cjsKIAogICBNQ1VfY29scyA9IHNyY2luZm8tPm91dHB1dF93aWR0aCAvCi0gICAgKGRzdGluZm8tPm1heF9oX3NhbXBfZmFjdG9yICogZHN0aW5mby0+bWluX0RDVF9oX3NjYWxlZF9zaXplKTsKKyAgICAoZHN0aW5mby0+bWF4X2hfc2FtcF9mYWN0b3IgKiBkc3RpbmZvX21pbl9EQ1RfaF9zY2FsZWRfc2l6ZSk7CiAgIE1DVV9yb3dzID0gc3JjaW5mby0+b3V0cHV0X2hlaWdodCAvCi0gICAgKGRzdGluZm8tPm1heF92X3NhbXBfZmFjdG9yICogZHN0aW5mby0+bWluX0RDVF92X3NjYWxlZF9zaXplKTsKKyAgICAoZHN0aW5mby0+bWF4X3Zfc2FtcF9mYWN0b3IgKiBkc3RpbmZvX21pbl9EQ1Rfdl9zY2FsZWRfc2l6ZSk7CiAKICAgZm9yIChjaSA9IDA7IGNpIDwgZHN0aW5mby0+bnVtX2NvbXBvbmVudHM7IGNpKyspIHsKICAgICBjb21wcHRyID0gZHN0aW5mby0+Y29tcF9pbmZvICsgY2k7CkBAIC02NTMsOSArNjY0LDkgQEAKICAganBlZ19jb21wb25lbnRfaW5mbyAqY29tcHB0cjsKIAogICBNQ1VfY29scyA9IHNyY2luZm8tPm91dHB1dF9oZWlnaHQgLwotICAgIChkc3RpbmZvLT5tYXhfaF9zYW1wX2ZhY3RvciAqIGRzdGluZm8tPm1pbl9EQ1RfaF9zY2FsZWRfc2l6ZSk7CisgICAgKGRzdGluZm8tPm1heF9oX3NhbXBfZmFjdG9yICogZHN0aW5mb19taW5fRENUX2hfc2NhbGVkX3NpemUpOwogICBNQ1Vfcm93cyA9IHNyY2luZm8tPm91dHB1dF93aWR0aCAvCi0gICAgKGRzdGluZm8tPm1heF92X3NhbXBfZmFjdG9yICogZHN0aW5mby0+bWluX0RDVF92X3NjYWxlZF9zaXplKTsKKyAgICAoZHN0aW5mby0+bWF4X3Zfc2FtcF9mYWN0b3IgKiBkc3RpbmZvX21pbl9EQ1Rfdl9zY2FsZWRfc2l6ZSk7CiAKICAgZm9yIChjaSA9IDA7IGNpIDwgZHN0aW5mby0+bnVtX2NvbXBvbmVudHM7IGNpKyspIHsKICAgICBjb21wcHRyID0gZHN0aW5mby0+Y29tcF9pbmZvICsgY2k7CkBAIC04ODksNyArOTAwLDEyIEBACiAgICAgaW5mby0+bnVtX2NvbXBvbmVudHMgPSBzcmNpbmZvLT5udW1fY29tcG9uZW50czsKIAogICAvKiBDb21wdXRlIG91dHB1dCBpbWFnZSBkaW1lbnNpb25zIGFuZCByZWxhdGVkIHZhbHVlcy4gKi8KKyNpZiBKUEVHX0xJQl9WRVJTSU9OID49IDgwCiAgIGpwZWdfY29yZV9vdXRwdXRfZGltZW5zaW9ucyhzcmNpbmZvKTsKKyNlbHNlCisgIHNyY2luZm8tPm91dHB1dF93aWR0aCA9IHNyY2luZm8tPmltYWdlX3dpZHRoOworICBzcmNpbmZvLT5vdXRwdXRfaGVpZ2h0ID0gc3JjaW5mby0+aW1hZ2VfaGVpZ2h0OworI2VuZGlmCiAKICAgLyogUmV0dXJuIHJpZ2h0IGF3YXkgaWYgLXBlcmZlY3QgaXMgZ2l2ZW4gYW5kIHRyYW5zZm9ybWF0aW9uIGlzIG5vdCBwZXJmZWN0LgogICAgKi8KQEAgLTg5NywxNSArOTEzLDE1IEBACiAgICAgaWYgKGluZm8tPm51bV9jb21wb25lbnRzID09IDEpIHsKICAgICAgIGlmICghanRyYW5zZm9ybV9wZXJmZWN0X3RyYW5zZm9ybShzcmNpbmZvLT5vdXRwdXRfd2lkdGgsCiAJICBzcmNpbmZvLT5vdXRwdXRfaGVpZ2h0LAotCSAgc3JjaW5mby0+bWluX0RDVF9oX3NjYWxlZF9zaXplLAotCSAgc3JjaW5mby0+bWluX0RDVF92X3NjYWxlZF9zaXplLAorCSAgc3JjaW5mby0+X21pbl9EQ1RfaF9zY2FsZWRfc2l6ZSwKKwkgIHNyY2luZm8tPl9taW5fRENUX3Zfc2NhbGVkX3NpemUsCiAJICBpbmZvLT50cmFuc2Zvcm0pKQogCXJldHVybiBGQUxTRTsKICAgICB9IGVsc2UgewogICAgICAgaWYgKCFqdHJhbnNmb3JtX3BlcmZlY3RfdHJhbnNmb3JtKHNyY2luZm8tPm91dHB1dF93aWR0aCwKIAkgIHNyY2luZm8tPm91dHB1dF9oZWlnaHQsCi0JICBzcmNpbmZvLT5tYXhfaF9zYW1wX2ZhY3RvciAqIHNyY2luZm8tPm1pbl9EQ1RfaF9zY2FsZWRfc2l6ZSwKLQkgIHNyY2luZm8tPm1heF92X3NhbXBfZmFjdG9yICogc3JjaW5mby0+bWluX0RDVF92X3NjYWxlZF9zaXplLAorCSAgc3JjaW5mby0+bWF4X2hfc2FtcF9mYWN0b3IgKiBzcmNpbmZvLT5fbWluX0RDVF9oX3NjYWxlZF9zaXplLAorCSAgc3JjaW5mby0+bWF4X3Zfc2FtcF9mYWN0b3IgKiBzcmNpbmZvLT5fbWluX0RDVF92X3NjYWxlZF9zaXplLAogCSAgaW5mby0+dHJhbnNmb3JtKSkKIAlyZXR1cm4gRkFMU0U7CiAgICAgfQpAQCAtOTI0LDI2ICs5NDAsMjYgQEAKICAgICBpbmZvLT5vdXRwdXRfd2lkdGggPSBzcmNpbmZvLT5vdXRwdXRfaGVpZ2h0OwogICAgIGluZm8tPm91dHB1dF9oZWlnaHQgPSBzcmNpbmZvLT5vdXRwdXRfd2lkdGg7CiAgICAgaWYgKGluZm8tPm51bV9jb21wb25lbnRzID09IDEpIHsKLSAgICAgIGluZm8tPmlNQ1Vfc2FtcGxlX3dpZHRoID0gc3JjaW5mby0+bWluX0RDVF92X3NjYWxlZF9zaXplOwotICAgICAgaW5mby0+aU1DVV9zYW1wbGVfaGVpZ2h0ID0gc3JjaW5mby0+bWluX0RDVF9oX3NjYWxlZF9zaXplOworICAgICAgaW5mby0+aU1DVV9zYW1wbGVfd2lkdGggPSBzcmNpbmZvLT5fbWluX0RDVF92X3NjYWxlZF9zaXplOworICAgICAgaW5mby0+aU1DVV9zYW1wbGVfaGVpZ2h0ID0gc3JjaW5mby0+X21pbl9EQ1RfaF9zY2FsZWRfc2l6ZTsKICAgICB9IGVsc2UgewogICAgICAgaW5mby0+aU1DVV9zYW1wbGVfd2lkdGggPQotCXNyY2luZm8tPm1heF92X3NhbXBfZmFjdG9yICogc3JjaW5mby0+bWluX0RDVF92X3NjYWxlZF9zaXplOworCXNyY2luZm8tPm1heF92X3NhbXBfZmFjdG9yICogc3JjaW5mby0+X21pbl9EQ1Rfdl9zY2FsZWRfc2l6ZTsKICAgICAgIGluZm8tPmlNQ1Vfc2FtcGxlX2hlaWdodCA9Ci0Jc3JjaW5mby0+bWF4X2hfc2FtcF9mYWN0b3IgKiBzcmNpbmZvLT5taW5fRENUX2hfc2NhbGVkX3NpemU7CisJc3JjaW5mby0+bWF4X2hfc2FtcF9mYWN0b3IgKiBzcmNpbmZvLT5fbWluX0RDVF9oX3NjYWxlZF9zaXplOwogICAgIH0KICAgICBicmVhazsKICAgZGVmYXVsdDoKICAgICBpbmZvLT5vdXRwdXRfd2lkdGggPSBzcmNpbmZvLT5vdXRwdXRfd2lkdGg7CiAgICAgaW5mby0+b3V0cHV0X2hlaWdodCA9IHNyY2luZm8tPm91dHB1dF9oZWlnaHQ7CiAgICAgaWYgKGluZm8tPm51bV9jb21wb25lbnRzID09IDEpIHsKLSAgICAgIGluZm8tPmlNQ1Vfc2FtcGxlX3dpZHRoID0gc3JjaW5mby0+bWluX0RDVF9oX3NjYWxlZF9zaXplOwotICAgICAgaW5mby0+aU1DVV9zYW1wbGVfaGVpZ2h0ID0gc3JjaW5mby0+bWluX0RDVF92X3NjYWxlZF9zaXplOworICAgICAgaW5mby0+aU1DVV9zYW1wbGVfd2lkdGggPSBzcmNpbmZvLT5fbWluX0RDVF9oX3NjYWxlZF9zaXplOworICAgICAgaW5mby0+aU1DVV9zYW1wbGVfaGVpZ2h0ID0gc3JjaW5mby0+X21pbl9EQ1Rfdl9zY2FsZWRfc2l6ZTsKICAgICB9IGVsc2UgewogICAgICAgaW5mby0+aU1DVV9zYW1wbGVfd2lkdGggPQotCXNyY2luZm8tPm1heF9oX3NhbXBfZmFjdG9yICogc3JjaW5mby0+bWluX0RDVF9oX3NjYWxlZF9zaXplOworCXNyY2luZm8tPm1heF9oX3NhbXBfZmFjdG9yICogc3JjaW5mby0+X21pbl9EQ1RfaF9zY2FsZWRfc2l6ZTsKICAgICAgIGluZm8tPmlNQ1Vfc2FtcGxlX2hlaWdodCA9Ci0Jc3JjaW5mby0+bWF4X3Zfc2FtcF9mYWN0b3IgKiBzcmNpbmZvLT5taW5fRENUX3Zfc2NhbGVkX3NpemU7CisJc3JjaW5mby0+bWF4X3Zfc2FtcF9mYWN0b3IgKiBzcmNpbmZvLT5fbWluX0RDVF92X3NjYWxlZF9zaXplOwogICAgIH0KICAgICBicmVhazsKICAgfQpAQCAtMTExMCw5ICsxMTI2LDExIEBACiAgIGp0ZW1wID0gZHN0aW5mby0+aW1hZ2Vfd2lkdGg7CiAgIGRzdGluZm8tPmltYWdlX3dpZHRoID0gZHN0aW5mby0+aW1hZ2VfaGVpZ2h0OwogICBkc3RpbmZvLT5pbWFnZV9oZWlnaHQgPSBqdGVtcDsKKyNpZiBKUEVHX0xJQl9WRVJTSU9OID49IDcwCiAgIGl0ZW1wID0gZHN0aW5mby0+bWluX0RDVF9oX3NjYWxlZF9zaXplOwogICBkc3RpbmZvLT5taW5fRENUX2hfc2NhbGVkX3NpemUgPSBkc3RpbmZvLT5taW5fRENUX3Zfc2NhbGVkX3NpemU7CiAgIGRzdGluZm8tPm1pbl9EQ1Rfdl9zY2FsZWRfc2l6ZSA9IGl0ZW1wOworI2VuZGlmCiAKICAgLyogVHJhbnNwb3NlIHNhbXBsaW5nIGZhY3RvcnMgKi8KICAgZm9yIChjaSA9IDA7IGNpIDwgZHN0aW5mby0+bnVtX2NvbXBvbmVudHM7IGNpKyspIHsKQEAgLTEzNDgsOCArMTM2NiwxMCBAQAogICAvKiBDb3JyZWN0IHRoZSBkZXN0aW5hdGlvbidzIGltYWdlIGRpbWVuc2lvbnMgYXMgbmVjZXNzYXJ5CiAgICAqIGZvciByb3RhdGUvZmxpcCwgcmVzaXplLCBhbmQgY3JvcCBvcGVyYXRpb25zLgogICAgKi8KKyNpZiBKUEVHX0xJQl9WRVJTSU9OID49IDcwCiAgIGRzdGluZm8tPmpwZWdfd2lkdGggPSBpbmZvLT5vdXRwdXRfd2lkdGg7CiAgIGRzdGluZm8tPmpwZWdfaGVpZ2h0ID0gaW5mby0+b3V0cHV0X2hlaWdodDsKKyNlbmRpZgogCiAgIC8qIFRyYW5zcG9zZSBkZXN0aW5hdGlvbiBpbWFnZSBwYXJhbWV0ZXJzICovCiAgIHN3aXRjaCAoaW5mby0+dHJhbnNmb3JtKSB7CkBAIC0xMzU3LDkgKzEzNzcsMTcgQEAKICAgY2FzZSBKWEZPUk1fVFJBTlNWRVJTRToKICAgY2FzZSBKWEZPUk1fUk9UXzkwOgogICBjYXNlIEpYRk9STV9ST1RfMjcwOgorI2lmIEpQRUdfTElCX1ZFUlNJT04gPCA3MAorICAgIGRzdGluZm8tPmltYWdlX3dpZHRoID0gaW5mby0+b3V0cHV0X2hlaWdodDsKKyAgICBkc3RpbmZvLT5pbWFnZV9oZWlnaHQgPSBpbmZvLT5vdXRwdXRfd2lkdGg7CisjZW5kaWYKICAgICB0cmFuc3Bvc2VfY3JpdGljYWxfcGFyYW1ldGVycyhkc3RpbmZvKTsKICAgICBicmVhazsKICAgZGVmYXVsdDoKKyNpZiBKUEVHX0xJQl9WRVJTSU9OIDwgNzAKKyAgICBkc3RpbmZvLT5pbWFnZV93aWR0aCA9IGluZm8tPm91dHB1dF93aWR0aDsKKyAgICBkc3RpbmZvLT5pbWFnZV9oZWlnaHQgPSBpbmZvLT5vdXRwdXRfaGVpZ2h0OworI2VuZGlmCiAgICAgYnJlYWs7CiAgIH0KIApAQCAtMTM3NSw2ICsxNDAzLDcgQEAKICAgICAgIEdFVEpPQ1RFVChzcmNpbmZvLT5tYXJrZXJfbGlzdC0+ZGF0YVs1XSkgPT0gMCkgewogICAgIC8qIFN1cHByZXNzIG91dHB1dCBvZiBKRklGIG1hcmtlciAqLwogICAgIGRzdGluZm8tPndyaXRlX0pGSUZfaGVhZGVyID0gRkFMU0U7CisjaWYgSlBFR19MSUJfVkVSU0lPTiA+PSA3MAogICAgIC8qIEFkanVzdCBFeGlmIGltYWdlIHBhcmFtZXRlcnMgKi8KICAgICBpZiAoZHN0aW5mby0+anBlZ193aWR0aCAhPSBzcmNpbmZvLT5pbWFnZV93aWR0aCB8fAogCWRzdGluZm8tPmpwZWdfaGVpZ2h0ICE9IHNyY2luZm8tPmltYWdlX2hlaWdodCkKQEAgLTEzODIsNiArMTQxMSw3IEBACiAgICAgICBhZGp1c3RfZXhpZl9wYXJhbWV0ZXJzKHNyY2luZm8tPm1hcmtlcl9saXN0LT5kYXRhICsgNiwKIAlzcmNpbmZvLT5tYXJrZXJfbGlzdC0+ZGF0YV9sZW5ndGggLSA2LAogCWRzdGluZm8tPmpwZWdfd2lkdGgsIGRzdGluZm8tPmpwZWdfaGVpZ2h0KTsKKyNlbmRpZgogICB9CiAKICAgLyogUmV0dXJuIHRoZSBhcHByb3ByaWF0ZSBvdXRwdXQgZGF0YSBzZXQgKi8KZGlmZiAtLWdpdCBhL3R1cmJvanBlZy1tYXBmaWxlIGIvdHVyYm9qcGVnLW1hcGZpbGUKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uYWEwYjY1OAotLS0gL2Rldi9udWxsCisrKyBiL3R1cmJvanBlZy1tYXBmaWxlCkBAIC0wLDAgKzEsMjMgQEAKK1RVUkJPSlBFR18xLjAKK3sKKwlnbG9iYWw6CisJCXRqSW5pdENvbXByZXNzOworCQl0akNvbXByZXNzOworCQlUSkJVRlNJWkU7CisJCXRqSW5pdERlY29tcHJlc3M7CisJCXRqRGVjb21wcmVzc0hlYWRlcjsKKwkJdGpEZWNvbXByZXNzOworCQl0akRlc3Ryb3k7CisJCXRqR2V0RXJyb3JTdHI7CisJbG9jYWw6CisJCSo7Cit9OworCitUVVJCT0pQRUdfMS4xCit7CisJZ2xvYmFsOgorCQlUSkJVRlNJWkVZVVY7CisJCXRqRGVjb21wcmVzc0hlYWRlcjI7CisJCXRqRGVjb21wcmVzc1RvWVVWOworCQl0akVuY29kZVlVVjsKK30gVFVSQk9KUEVHXzEuMDsKZGlmZiAtLWdpdCBhL3R1cmJvanBlZy5oIGIvdHVyYm9qcGVnLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjQ4MTZkNwotLS0gL2Rldi9udWxsCisrKyBiL3R1cmJvanBlZy5oCkBAIC0wLDAgKzEsMzQxIEBACisvKiBDb3B5cmlnaHQgKEMpMjAwNCBMYW5kbWFyayBHcmFwaGljcyBDb3Jwb3JhdGlvbgorICogQ29weXJpZ2h0IChDKTIwMDUsIDIwMDYgU3VuIE1pY3Jvc3lzdGVtcywgSW5jLgorICogQ29weXJpZ2h0IChDKTIwMDktMjAxMSBELiBSLiBDb21tYW5kZXIKKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZSBhbmQgbWF5IGJlIHJlZGlzdHJpYnV0ZWQgYW5kL29yIG1vZGlmaWVkIHVuZGVyCisgKiB0aGUgdGVybXMgb2YgdGhlIHd4V2luZG93cyBMaWJyYXJ5IExpY2Vuc2UsIFZlcnNpb24gMy4xIG9yIChhdCB5b3VyIG9wdGlvbikKKyAqIGFueSBsYXRlciB2ZXJzaW9uLiAgVGhlIGZ1bGwgbGljZW5zZSBpcyBpbiB0aGUgTElDRU5TRS50eHQgZmlsZSBpbmNsdWRlZAorICogd2l0aCB0aGlzIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgKiB3eFdpbmRvd3MgTGlicmFyeSBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKi8KKworI2lmIChkZWZpbmVkKF9NU0NfVkVSKSB8fCBkZWZpbmVkKF9fQ1lHV0lOX18pIHx8IGRlZmluZWQoX19NSU5HVzMyX18pKSAmJiBkZWZpbmVkKF9XSU4zMikgJiYgZGVmaW5lZChETExERUZJTkUpCisjZGVmaW5lIERMTEVYUE9SVCBfX2RlY2xzcGVjKGRsbGV4cG9ydCkKKyNlbHNlCisjZGVmaW5lIERMTEVYUE9SVAorI2VuZGlmCisKKyNkZWZpbmUgRExMQ0FMTAorCisvKiBTdWJzYW1wbGluZyAqLworI2RlZmluZSBOVU1TVUJPUFQgNAorCitlbnVtIHtUSl80NDQ9MCwgVEpfNDIyLCBUSl80MjAsIFRKX0dSQVlTQ0FMRX07CisjZGVmaW5lIFRKXzQxMSBUSl80MjAgIC8qIGZvciBiYWNrd2FyZCBjb21wYXRpYmlsaXR5IHdpdGggVmlydHVhbEdMIDw9IDIuMS54LAorICAgICAgICAgICAgICAgICAgICAgICAgICBUdXJib1ZOQyA8PSAwLjYsIGFuZCBUdXJib0pQRUcvSVBQICovCisKKy8qIEZsYWdzICovCisjZGVmaW5lIFRKX0JHUiAgICAgICAgICAgICAxCisgIC8qIFRoZSBjb21wb25lbnRzIG9mIGVhY2ggcGl4ZWwgaW4gdGhlIHNvdXJjZS9kZXN0aW5hdGlvbiBiaXRtYXAgYXJlIHN0b3JlZAorICAgICBpbiBCLEcsUiBvcmRlciwgbm90IFIsRyxCICovCisjZGVmaW5lIFRKX0JPVFRPTVVQICAgICAgICAyCisgIC8qIFRoZSBzb3VyY2UvZGVzdGluYXRpb24gYml0bWFwIGlzIHN0b3JlZCBpbiBib3R0b20tdXAgKFdpbmRvd3MsIE9wZW5HTCkKKyAgICAgb3JkZXIsIG5vdCB0b3AtZG93biAoWDExKSBvcmRlciAqLworI2RlZmluZSBUSl9GT1JDRU1NWCAgICAgICAgOAorICAvKiBUdXJuIG9mZiBDUFUgYXV0by1kZXRlY3Rpb24gYW5kIGZvcmNlIFR1cmJvSlBFRyB0byB1c2UgTU1YIGNvZGUKKyAgICAgKElQUCBhbmQgMzItYml0IGxpYmpwZWctdHVyYm8gdmVyc2lvbnMgb25seSkgKi8KKyNkZWZpbmUgVEpfRk9SQ0VTU0UgICAgICAgMTYKKyAgLyogVHVybiBvZmYgQ1BVIGF1dG8tZGV0ZWN0aW9uIGFuZCBmb3JjZSBUdXJib0pQRUcgdG8gdXNlIFNTRSBjb2RlCisgICAgICgzMi1iaXQgSVBQIGFuZCAzMi1iaXQgbGlianBlZy10dXJibyB2ZXJzaW9ucyBvbmx5KSAqLworI2RlZmluZSBUSl9GT1JDRVNTRTIgICAgICAzMgorICAvKiBUdXJuIG9mZiBDUFUgYXV0by1kZXRlY3Rpb24gYW5kIGZvcmNlIFR1cmJvSlBFRyB0byB1c2UgU1NFMiBjb2RlCisgICAgICgzMi1iaXQgSVBQIGFuZCAzMi1iaXQgbGlianBlZy10dXJibyB2ZXJzaW9ucyBvbmx5KSAqLworI2RlZmluZSBUSl9BTFBIQUZJUlNUICAgICA2NAorICAvKiBJZiB0aGUgc291cmNlL2Rlc3RpbmF0aW9uIGJpdG1hcCBpcyAzMiBicHAsIGFzc3VtZSB0aGF0IGVhY2ggcGl4ZWwgaXMKKyAgICAgQVJHQi9YUkdCIChvciBBQkdSL1hCR1IgaWYgVEpfQkdSIGlzIGFsc28gc3BlY2lmaWVkKSAqLworI2RlZmluZSBUSl9GT1JDRVNTRTMgICAgIDEyOAorICAvKiBUdXJuIG9mZiBDUFUgYXV0by1kZXRlY3Rpb24gYW5kIGZvcmNlIFR1cmJvSlBFRyB0byB1c2UgU1NFMyBjb2RlCisgICAgICg2NC1iaXQgSVBQIHZlcnNpb24gb25seSkgKi8KKyNkZWZpbmUgVEpfRkFTVFVQU0FNUExFICAyNTYKKyAgLyogVXNlIGZhc3QsIGluYWNjdXJhdGUgNDoyOjIgYW5kIDQ6MjowIFlVViB1cHNhbXBsaW5nIHJvdXRpbmVzCisgICAgIChsaWJqcGVnIGFuZCBsaWJqcGVnLXR1cmJvIHZlcnNpb25zIG9ubHkpICovCisjZGVmaW5lIFRKX1lVViAgICAgICAgICAgNTEyCisgIC8qIE5vdGhpbmcgdG8gc2VlIGhlcmUuICBQYXkgbm8gYXR0ZW50aW9uIHRvIHRoZSBtYW4gYmVoaW5kIHRoZSBjdXJ0YWluLiAqLworCit0eXBlZGVmIHZvaWQqIHRqaGFuZGxlOworCisjZGVmaW5lIFRKUEFEKHApICgoKHApKzMpJih+MykpCisjaWZuZGVmIG1heAorICNkZWZpbmUgbWF4KGEsYikgKChhKT4oYik/KGEpOihiKSkKKyNlbmRpZgorCisjaWZkZWYgX19jcGx1c3BsdXMKK2V4dGVybiAiQyIgeworI2VuZGlmCisKKy8qIEFQSSBmb2xsb3dzICovCisKKworLyoKKyAgdGpoYW5kbGUgdGpJbml0Q29tcHJlc3Modm9pZCkKKworICBDcmVhdGVzIGEgbmV3IEpQRUcgY29tcHJlc3NvciBpbnN0YW5jZSwgYWxsb2NhdGVzIG1lbW9yeSBmb3IgdGhlIHN0cnVjdHVyZXMsCisgIGFuZCByZXR1cm5zIGEgaGFuZGxlIHRvIHRoZSBpbnN0YW5jZS4gIE1vc3QgYXBwbGljYXRpb25zIHdpbGwgb25seQorICBuZWVkIHRvIGNhbGwgdGhpcyBvbmNlIGF0IHRoZSBiZWdpbm5pbmcgb2YgdGhlIHByb2dyYW0gb3Igb25jZSBmb3IgZWFjaAorICBjb25jdXJyZW50IHRocmVhZC4gIERvbid0IHRyeSB0byBjcmVhdGUgYSBuZXcgaW5zdGFuY2UgZXZlcnkgdGltZSB5b3UKKyAgY29tcHJlc3MgYW4gaW1hZ2UsIGJlY2F1c2UgdGhpcyBtYXkgY2F1c2UgcGVyZm9ybWFuY2UgdG8gc3VmZmVyIGluIHNvbWUKKyAgVHVyYm9KUEVHIGltcGxlbWVudGF0aW9ucy4KKworICBSRVRVUk5TOiBOVUxMIG9uIGVycm9yCisqLworRExMRVhQT1JUIHRqaGFuZGxlIERMTENBTEwgdGpJbml0Q29tcHJlc3Modm9pZCk7CisKKworLyoKKyAgaW50IHRqQ29tcHJlc3ModGpoYW5kbGUgaiwKKyAgICAgdW5zaWduZWQgY2hhciAqc3JjYnVmLCBpbnQgd2lkdGgsIGludCBwaXRjaCwgaW50IGhlaWdodCwgaW50IHBpeGVsc2l6ZSwKKyAgICAgdW5zaWduZWQgY2hhciAqZHN0YnVmLCB1bnNpZ25lZCBsb25nICpzaXplLAorICAgICBpbnQganBlZ3N1YnNhbXAsIGludCBqcGVncXVhbCwgaW50IGZsYWdzKQorCisgIFtJTlBVVF0gaiA9IGluc3RhbmNlIGhhbmRsZSBwcmV2aW91c2x5IHJldHVybmVkIGZyb20gYSBjYWxsIHRvCisgICAgIHRqSW5pdENvbXByZXNzKCkKKyAgW0lOUFVUXSBzcmNidWYgPSBwb2ludGVyIHRvIHVzZXItYWxsb2NhdGVkIGltYWdlIGJ1ZmZlciBjb250YWluaW5nIFJHQiBvcgorICAgICBncmF5c2NhbGUgcGl4ZWxzIHRvIGJlIGNvbXByZXNzZWQKKyAgW0lOUFVUXSB3aWR0aCA9IHdpZHRoIChpbiBwaXhlbHMpIG9mIHRoZSBzb3VyY2UgaW1hZ2UKKyAgW0lOUFVUXSBwaXRjaCA9IGJ5dGVzIHBlciBsaW5lIG9mIHRoZSBzb3VyY2UgaW1hZ2UgKHdpZHRoKnBpeGVsc2l6ZSBpZiB0aGUKKyAgICAgYml0bWFwIGlzIHVucGFkZGVkLCBlbHNlIFRKUEFEKHdpZHRoKnBpeGVsc2l6ZSkgaWYgZWFjaCBsaW5lIG9mIHRoZSBiaXRtYXAKKyAgICAgaXMgcGFkZGVkIHRvIHRoZSBuZWFyZXN0IDMyLWJpdCBib3VuZGFyeSwgc3VjaCBhcyBpcyB0aGUgY2FzZSBmb3IgV2luZG93cworICAgICBiaXRtYXBzLiAgWW91IGNhbiBhbHNvIGJlIGNsZXZlciBhbmQgdXNlIHRoaXMgcGFyYW1ldGVyIHRvIHNraXAgbGluZXMsCisgICAgIGV0Yy4gIFNldHRpbmcgdGhpcyBwYXJhbWV0ZXIgdG8gMCBpcyB0aGUgZXF1aXZhbGVudCBvZiBzZXR0aW5nIGl0IHRvCisgICAgIHdpZHRoKnBpeGVsc2l6ZS4KKyAgW0lOUFVUXSBoZWlnaHQgPSBoZWlnaHQgKGluIHBpeGVscykgb2YgdGhlIHNvdXJjZSBpbWFnZQorICBbSU5QVVRdIHBpeGVsc2l6ZSA9IHNpemUgKGluIGJ5dGVzKSBvZiBlYWNoIHBpeGVsIGluIHRoZSBzb3VyY2UgaW1hZ2UKKyAgICAgUkdCWC9CR1JYL1hSR0IvWEJHUjogNCwgUkdCL0JHUjogMywgR3JheXNjYWxlOiAxCisgIFtJTlBVVF0gZHN0YnVmID0gcG9pbnRlciB0byB1c2VyLWFsbG9jYXRlZCBpbWFnZSBidWZmZXIgd2hpY2ggd2lsbCByZWNlaXZlCisgICAgIHRoZSBKUEVHIGltYWdlLiAgVXNlIHRoZSBUSkJVRlNJWkUod2lkdGgsIGhlaWdodCkgZnVuY3Rpb24gdG8gZGV0ZXJtaW5lCisgICAgIHRoZSBhcHByb3ByaWF0ZSBzaXplIGZvciB0aGlzIGJ1ZmZlciBiYXNlZCBvbiB0aGUgaW1hZ2Ugd2lkdGggYW5kIGhlaWdodC4KKyAgW09VVFBVVF0gc2l6ZSA9IHBvaW50ZXIgdG8gdW5zaWduZWQgbG9uZyB3aGljaCByZWNlaXZlcyB0aGUgc2l6ZSAoaW4gYnl0ZXMpCisgICAgIG9mIHRoZSBjb21wcmVzc2VkIGltYWdlCisgIFtJTlBVVF0ganBlZ3N1YnNhbXAgPSBTcGVjaWZpZXMgZWl0aGVyIDQ6MjowLCA0OjI6MiwgNDo0OjQsIG9yIGdyYXlzY2FsZQorICAgICBzdWJzYW1wbGluZy4gIFdoZW4gdGhlIGltYWdlIGlzIGNvbnZlcnRlZCBmcm9tIHRoZSBSR0IgdG8gWUNiQ3IgY29sb3JzcGFjZQorICAgICBhcyBwYXJ0IG9mIHRoZSBKUEVHIGNvbXByZXNzaW9uIHByb2Nlc3MsIGV2ZXJ5IG90aGVyIENiIGFuZCBDcgorICAgICAoY2hyb21pbmFuY2UpIHBpeGVsIGNhbiBiZSBkaXNjYXJkZWQgdG8gcHJvZHVjZSBhIHNtYWxsZXIgaW1hZ2Ugd2l0aAorICAgICBsaXR0bGUgcGVyY2VwdGlibGUgbG9zcyBvZiBpbWFnZSBjbGFyaXR5ICh0aGUgaHVtYW4gZXllIGlzIG1vcmUgc2Vuc2l0aXZlCisgICAgIHRvIHNtYWxsIGNoYW5nZXMgaW4gYnJpZ2h0bmVzcyB0aGFuIHNtYWxsIGNoYW5nZXMgaW4gY29sb3IuKQorCisgICAgIFRKXzQyMDogNDoyOjAgc3Vic2FtcGxpbmcuICBEaXNjYXJkcyBldmVyeSBvdGhlciBDYiwgQ3IgcGl4ZWwgaW4gYm90aAorICAgICAgICBob3Jpem9udGFsIGFuZCB2ZXJ0aWNhbCBkaXJlY3Rpb25zCisgICAgIFRKXzQyMjogNDoyOjIgc3Vic2FtcGxpbmcuICBEaXNjYXJkcyBldmVyeSBvdGhlciBDYiwgQ3IgcGl4ZWwgb25seSBpbgorICAgICAgICB0aGUgaG9yaXpvbnRhbCBkaXJlY3Rpb24KKyAgICAgVEpfNDQ0OiBubyBzdWJzYW1wbGluZworICAgICBUSl9HUkFZU0NBTEU6IEdlbmVyYXRlIGdyYXlzY2FsZSBKUEVHIGltYWdlCisKKyAgW0lOUFVUXSBqcGVncXVhbCA9IEpQRUcgcXVhbGl0eSAoYW4gaW50ZWdlciBiZXR3ZWVuIDAgYW5kIDEwMCBpbmNsdXNpdmUpCisgIFtJTlBVVF0gZmxhZ3MgPSB0aGUgYml0d2lzZSBPUiBvZiBvbmUgb3IgbW9yZSBvZiB0aGUgZmxhZ3MgZGVzY3JpYmVkIGluIHRoZQorICAgICAiRmxhZ3MiIHNlY3Rpb24gYWJvdmUKKworICBSRVRVUk5TOiAwIG9uIHN1Y2Nlc3MsIC0xIG9uIGVycm9yCisqLworRExMRVhQT1JUIGludCBETExDQUxMIHRqQ29tcHJlc3ModGpoYW5kbGUgaiwKKwl1bnNpZ25lZCBjaGFyICpzcmNidWYsIGludCB3aWR0aCwgaW50IHBpdGNoLCBpbnQgaGVpZ2h0LCBpbnQgcGl4ZWxzaXplLAorCXVuc2lnbmVkIGNoYXIgKmRzdGJ1ZiwgdW5zaWduZWQgbG9uZyAqc2l6ZSwKKwlpbnQganBlZ3N1YnNhbXAsIGludCBqcGVncXVhbCwgaW50IGZsYWdzKTsKKworCisvKgorICB1bnNpZ25lZCBsb25nIFRKQlVGU0laRShpbnQgd2lkdGgsIGludCBoZWlnaHQpCisKKyAgQ29udmVuaWVuY2UgZnVuY3Rpb24gd2hpY2ggcmV0dXJucyB0aGUgbWF4aW11bSBzaXplIG9mIHRoZSBidWZmZXIgcmVxdWlyZWQgdG8KKyAgaG9sZCBhIEpQRUcgaW1hZ2Ugd2l0aCB0aGUgZ2l2ZW4gd2lkdGggYW5kIGhlaWdodAorCisgIFJFVFVSTlM6IC0xIGlmIGFyZ3VtZW50cyBhcmUgb3V0IG9mIGJvdW5kcworKi8KK0RMTEVYUE9SVCB1bnNpZ25lZCBsb25nIERMTENBTEwgVEpCVUZTSVpFKGludCB3aWR0aCwgaW50IGhlaWdodCk7CisKKworLyoKKyAgdW5zaWduZWQgbG9uZyBUSkJVRlNJWkVZVVYoaW50IHdpZHRoLCBpbnQgaGVpZ2h0LCBpbnQgc3Vic2FtcCkKKworICBDb252ZW5pZW5jZSBmdW5jdGlvbiB3aGljaCByZXR1cm5zIHRoZSBzaXplIG9mIHRoZSBidWZmZXIgcmVxdWlyZWQgdG8KKyAgaG9sZCBhIFlVViBwbGFuYXIgaW1hZ2Ugd2l0aCB0aGUgZ2l2ZW4gd2lkdGgsIGhlaWdodCwgYW5kIGxldmVsIG9mCisgIGNocm9taW5hbmNlIHN1YnNhbXBsaW5nCisKKyAgUkVUVVJOUzogLTEgaWYgYXJndW1lbnRzIGFyZSBvdXQgb2YgYm91bmRzCisqLworRExMRVhQT1JUIHVuc2lnbmVkIGxvbmcgRExMQ0FMTCBUSkJVRlNJWkVZVVYoaW50IHdpZHRoLCBpbnQgaGVpZ2h0LAorICBpbnQgc3Vic2FtcCk7CisKKworLyoKKyAgaW50IHRqRW5jb2RlWVVWKHRqaGFuZGxlIGosCisgICAgIHVuc2lnbmVkIGNoYXIgKnNyY2J1ZiwgaW50IHdpZHRoLCBpbnQgcGl0Y2gsIGludCBoZWlnaHQsIGludCBwaXhlbHNpemUsCisgICAgIHVuc2lnbmVkIGNoYXIgKmRzdGJ1ZiwgaW50IHN1YnNhbXAsIGludCBmbGFncykKKworICBUaGlzIGZ1bmN0aW9uIHVzZXMgdGhlIGFjY2VsZXJhdGVkIGNvbG9yIGNvbnZlcnNpb24gcm91dGluZXMgaW4gVHVyYm9KUEVHJ3MKKyAgdW5kZXJseWluZyBjb2RlYyB0byBwcm9kdWNlIGEgcGxhbmFyIFlVViBpbWFnZSB0aGF0IGlzIHN1aXRhYmxlIGZvciBYIFZpZGVvLgorICBTcGVjaWZpY2FsbHksIGlmIHRoZSBjaHJvbWluYW5jZSBjb21wb25lbnRzIGFyZSBzdWJzYW1wbGVkIGFsb25nIHRoZQorICBob3Jpem9udGFsIGRpbWVuc2lvbiwgdGhlbiB0aGUgd2lkdGggb2YgdGhlIGx1bWluYW5jZSBwbGFuZSBpcyBwYWRkZWQgdG8gMiBpbgorICB0aGUgb3V0cHV0IGltYWdlIChzYW1lIGdvZXMgZm9yIHRoZSBoZWlnaHQgb2YgdGhlIGx1bWluYW5jZSBwbGFuZSwgaWYgdGhlCisgIGNocm9taW5hbmNlIGNvbXBvbmVudHMgYXJlIHN1YnNhbXBsZWQgYWxvbmcgdGhlIHZlcnRpY2FsIGRpbWVuc2lvbi4pICBBbHNvLAorICBlYWNoIGxpbmUgb2YgZWFjaCBwbGFuZSBpbiB0aGUgb3V0cHV0IGltYWdlIGlzIHBhZGRlZCB0byA0IGJ5dGVzLiAgQWx0aG91Z2gKKyAgdGhpcyB3aWxsIHdvcmsgd2l0aCBhbnkgc3Vic2FtcGxpbmcgb3B0aW9uLCBpdCBpcyByZWFsbHkgb25seSB1c2VmdWwgaW4KKyAgY29tYmluYXRpb24gd2l0aCBUSl80MjAsIHdoaWNoIHByb2R1Y2VzIGFuIGltYWdlIGNvbXBhdGlibGUgd2l0aCB0aGUgSTQyMAorICAoQUtBICJZVVY0MjBQIikgZm9ybWF0LgorCisgIFtJTlBVVF0gaiA9IGluc3RhbmNlIGhhbmRsZSBwcmV2aW91c2x5IHJldHVybmVkIGZyb20gYSBjYWxsIHRvCisgICAgIHRqSW5pdENvbXByZXNzKCkKKyAgW0lOUFVUXSBzcmNidWYgPSBwb2ludGVyIHRvIHVzZXItYWxsb2NhdGVkIGltYWdlIGJ1ZmZlciBjb250YWluaW5nIFJHQiBvcgorICAgICBncmF5c2NhbGUgcGl4ZWxzIHRvIGJlIGVuY29kZWQKKyAgW0lOUFVUXSB3aWR0aCA9IHdpZHRoIChpbiBwaXhlbHMpIG9mIHRoZSBzb3VyY2UgaW1hZ2UKKyAgW0lOUFVUXSBwaXRjaCA9IGJ5dGVzIHBlciBsaW5lIG9mIHRoZSBzb3VyY2UgaW1hZ2UgKHdpZHRoKnBpeGVsc2l6ZSBpZiB0aGUKKyAgICAgYml0bWFwIGlzIHVucGFkZGVkLCBlbHNlIFRKUEFEKHdpZHRoKnBpeGVsc2l6ZSkgaWYgZWFjaCBsaW5lIG9mIHRoZSBiaXRtYXAKKyAgICAgaXMgcGFkZGVkIHRvIHRoZSBuZWFyZXN0IDMyLWJpdCBib3VuZGFyeSwgc3VjaCBhcyBpcyB0aGUgY2FzZSBmb3IgV2luZG93cworICAgICBiaXRtYXBzLiAgWW91IGNhbiBhbHNvIGJlIGNsZXZlciBhbmQgdXNlIHRoaXMgcGFyYW1ldGVyIHRvIHNraXAgbGluZXMsCisgICAgIGV0Yy4gIFNldHRpbmcgdGhpcyBwYXJhbWV0ZXIgdG8gMCBpcyB0aGUgZXF1aXZhbGVudCBvZiBzZXR0aW5nIGl0IHRvCisgICAgIHdpZHRoKnBpeGVsc2l6ZS4KKyAgW0lOUFVUXSBoZWlnaHQgPSBoZWlnaHQgKGluIHBpeGVscykgb2YgdGhlIHNvdXJjZSBpbWFnZQorICBbSU5QVVRdIHBpeGVsc2l6ZSA9IHNpemUgKGluIGJ5dGVzKSBvZiBlYWNoIHBpeGVsIGluIHRoZSBzb3VyY2UgaW1hZ2UKKyAgICAgUkdCWC9CR1JYL1hSR0IvWEJHUjogNCwgUkdCL0JHUjogMywgR3JheXNjYWxlOiAxCisgIFtJTlBVVF0gZHN0YnVmID0gcG9pbnRlciB0byB1c2VyLWFsbG9jYXRlZCBpbWFnZSBidWZmZXIgd2hpY2ggd2lsbCByZWNlaXZlCisgICAgIHRoZSBZVVYgaW1hZ2UuICBVc2UgdGhlIFRKQlVGU0laRVlVVih3aWR0aCwgaGVpZ2h0LCBzdWJzYW1wKSBmdW5jdGlvbiB0bworICAgICBkZXRlcm1pbmUgdGhlIGFwcHJvcHJpYXRlIHNpemUgZm9yIHRoaXMgYnVmZmVyIGJhc2VkIG9uIHRoZSBpbWFnZSB3aWR0aCwKKyAgICAgaGVpZ2h0LCBhbmQgbGV2ZWwgb2Ygc3Vic2FtcGxpbmcuCisgIFtJTlBVVF0gc3Vic2FtcCA9IFNwZWNpZmllcyBlaXRoZXIgNDoyOjAsIDQ6MjoyLCA0OjQ6NCwgb3IgZ3JheXNjYWxlCisgICAgIHN1YnNhbXBsaW5nIChzZWUgZGVzY3JpcHRpb24gdW5kZXIgdGpDb21wcmVzcygpKQorICBbSU5QVVRdIGZsYWdzID0gdGhlIGJpdHdpc2UgT1Igb2Ygb25lIG9yIG1vcmUgb2YgdGhlIGZsYWdzIGRlc2NyaWJlZCBpbiB0aGUKKyAgICAgIkZsYWdzIiBzZWN0aW9uIGFib3ZlCisKKyAgUkVUVVJOUzogMCBvbiBzdWNjZXNzLCAtMSBvbiBlcnJvcgorKi8KK0RMTEVYUE9SVCBpbnQgRExMQ0FMTCB0akVuY29kZVlVVih0amhhbmRsZSBqLAorCXVuc2lnbmVkIGNoYXIgKnNyY2J1ZiwgaW50IHdpZHRoLCBpbnQgcGl0Y2gsIGludCBoZWlnaHQsIGludCBwaXhlbHNpemUsCisJdW5zaWduZWQgY2hhciAqZHN0YnVmLCBpbnQgc3Vic2FtcCwgaW50IGZsYWdzKTsKKworCisvKgorICB0amhhbmRsZSB0akluaXREZWNvbXByZXNzKHZvaWQpCisKKyAgQ3JlYXRlcyBhIG5ldyBKUEVHIGRlY29tcHJlc3NvciBpbnN0YW5jZSwgYWxsb2NhdGVzIG1lbW9yeSBmb3IgdGhlCisgIHN0cnVjdHVyZXMsIGFuZCByZXR1cm5zIGEgaGFuZGxlIHRvIHRoZSBpbnN0YW5jZS4gIE1vc3QgYXBwbGljYXRpb25zIHdpbGwKKyAgb25seSBuZWVkIHRvIGNhbGwgdGhpcyBvbmNlIGF0IHRoZSBiZWdpbm5pbmcgb2YgdGhlIHByb2dyYW0gb3Igb25jZSBmb3IgZWFjaAorICBjb25jdXJyZW50IHRocmVhZC4gIERvbid0IHRyeSB0byBjcmVhdGUgYSBuZXcgaW5zdGFuY2UgZXZlcnkgdGltZSB5b3UKKyAgZGVjb21wcmVzcyBhbiBpbWFnZSwgYmVjYXVzZSB0aGlzIG1heSBjYXVzZSBwZXJmb3JtYW5jZSB0byBzdWZmZXIgaW4gc29tZQorICBUdXJib0pQRUcgaW1wbGVtZW50YXRpb25zLgorCisgIFJFVFVSTlM6IE5VTEwgb24gZXJyb3IKKyovCitETExFWFBPUlQgdGpoYW5kbGUgRExMQ0FMTCB0akluaXREZWNvbXByZXNzKHZvaWQpOworCisKKy8qCisgIGludCB0akRlY29tcHJlc3NIZWFkZXIyKHRqaGFuZGxlIGosCisgICAgIHVuc2lnbmVkIGNoYXIgKnNyY2J1ZiwgdW5zaWduZWQgbG9uZyBzaXplLAorICAgICBpbnQgKndpZHRoLCBpbnQgKmhlaWdodCwgaW50ICpqcGVnc3Vic2FtcCkKKworICBbSU5QVVRdIGogPSBpbnN0YW5jZSBoYW5kbGUgcHJldmlvdXNseSByZXR1cm5lZCBmcm9tIGEgY2FsbCB0bworICAgICB0akluaXREZWNvbXByZXNzKCkKKyAgW0lOUFVUXSBzcmNidWYgPSBwb2ludGVyIHRvIGEgdXNlci1hbGxvY2F0ZWQgYnVmZmVyIGNvbnRhaW5pbmcgYSBKUEVHIGltYWdlCisgIFtJTlBVVF0gc2l6ZSA9IHNpemUgb2YgdGhlIEpQRUcgaW1hZ2UgYnVmZmVyIChpbiBieXRlcykKKyAgW09VVFBVVF0gd2lkdGggPSB3aWR0aCAoaW4gcGl4ZWxzKSBvZiB0aGUgSlBFRyBpbWFnZQorICBbT1VUUFVUXSBoZWlnaHQgPSBoZWlnaHQgKGluIHBpeGVscykgb2YgdGhlIEpQRUcgaW1hZ2UKKyAgW09VVFBVVF0ganBlZ3N1YnNhbXAgPSB0eXBlIG9mIGNocm9taW5hbmNlIHN1YnNhbXBsaW5nIHVzZWQgd2hlbiBjb21wcmVzc2luZworICAgICB0aGUgSlBFRyBpbWFnZQorCisgIFJFVFVSTlM6IDAgb24gc3VjY2VzcywgLTEgb24gZXJyb3IKKyovCitETExFWFBPUlQgaW50IERMTENBTEwgdGpEZWNvbXByZXNzSGVhZGVyMih0amhhbmRsZSBqLAorCXVuc2lnbmVkIGNoYXIgKnNyY2J1ZiwgdW5zaWduZWQgbG9uZyBzaXplLAorCWludCAqd2lkdGgsIGludCAqaGVpZ2h0LCBpbnQgKmpwZWdzdWJzYW1wKTsKKworLyoKKyAgTGVnYWN5IHZlcnNpb24gb2YgdGhlIGFib3ZlIGZ1bmN0aW9uCisqLworRExMRVhQT1JUIGludCBETExDQUxMIHRqRGVjb21wcmVzc0hlYWRlcih0amhhbmRsZSBqLAorCXVuc2lnbmVkIGNoYXIgKnNyY2J1ZiwgdW5zaWduZWQgbG9uZyBzaXplLAorCWludCAqd2lkdGgsIGludCAqaGVpZ2h0KTsKKworCisvKgorICBpbnQgdGpEZWNvbXByZXNzKHRqaGFuZGxlIGosCisgICAgIHVuc2lnbmVkIGNoYXIgKnNyY2J1ZiwgdW5zaWduZWQgbG9uZyBzaXplLAorICAgICB1bnNpZ25lZCBjaGFyICpkc3RidWYsIGludCB3aWR0aCwgaW50IHBpdGNoLCBpbnQgaGVpZ2h0LCBpbnQgcGl4ZWxzaXplLAorICAgICBpbnQgZmxhZ3MpCisKKyAgW0lOUFVUXSBqID0gaW5zdGFuY2UgaGFuZGxlIHByZXZpb3VzbHkgcmV0dXJuZWQgZnJvbSBhIGNhbGwgdG8KKyAgICAgdGpJbml0RGVjb21wcmVzcygpCisgIFtJTlBVVF0gc3JjYnVmID0gcG9pbnRlciB0byBhIHVzZXItYWxsb2NhdGVkIGJ1ZmZlciBjb250YWluaW5nIHRoZSBKUEVHIGltYWdlCisgICAgIHRvIGRlY29tcHJlc3MKKyAgW0lOUFVUXSBzaXplID0gc2l6ZSBvZiB0aGUgSlBFRyBpbWFnZSBidWZmZXIgKGluIGJ5dGVzKQorICBbSU5QVVRdIGRzdGJ1ZiA9IHBvaW50ZXIgdG8gdXNlci1hbGxvY2F0ZWQgaW1hZ2UgYnVmZmVyIHdoaWNoIHdpbGwgcmVjZWl2ZQorICAgICB0aGUgYml0bWFwIGltYWdlLiAgVGhpcyBidWZmZXIgc2hvdWxkIG5vcm1hbGx5IGJlIHBpdGNoKmhlaWdodAorICAgICBieXRlcyBpbiBzaXplLCBhbHRob3VnaCB0aGlzIHBvaW50ZXIgbWF5IGFsc28gYmUgdXNlZCB0byBkZWNvbXByZXNzIGludG8KKyAgICAgYSBzcGVjaWZpYyByZWdpb24gb2YgYSBsYXJnZXIgYnVmZmVyLgorICBbSU5QVVRdIHdpZHRoID0gd2lkdGggKGluIHBpeGVscykgb2YgdGhlIGRlc3RpbmF0aW9uIGltYWdlCisgIFtJTlBVVF0gcGl0Y2ggPSBieXRlcyBwZXIgbGluZSBvZiB0aGUgZGVzdGluYXRpb24gaW1hZ2UgKHdpZHRoKnBpeGVsc2l6ZSBpZgorICAgICB0aGUgYml0bWFwIGlzIHVucGFkZGVkLCBlbHNlIFRKUEFEKHdpZHRoKnBpeGVsc2l6ZSkgaWYgZWFjaCBsaW5lIG9mIHRoZQorICAgICBiaXRtYXAgaXMgcGFkZGVkIHRvIHRoZSBuZWFyZXN0IDMyLWJpdCBib3VuZGFyeSwgc3VjaCBhcyBpcyB0aGUgY2FzZSBmb3IKKyAgICAgV2luZG93cyBiaXRtYXBzLiAgWW91IGNhbiBhbHNvIGJlIGNsZXZlciBhbmQgdXNlIHRoaXMgcGFyYW1ldGVyIHRvIHNraXAKKyAgICAgbGluZXMsIGV0Yy4gIFNldHRpbmcgdGhpcyBwYXJhbWV0ZXIgdG8gMCBpcyB0aGUgZXF1aXZhbGVudCBvZiBzZXR0aW5nIGl0CisgICAgIHRvIHdpZHRoKnBpeGVsc2l6ZS4KKyAgW0lOUFVUXSBoZWlnaHQgPSBoZWlnaHQgKGluIHBpeGVscykgb2YgdGhlIGRlc3RpbmF0aW9uIGltYWdlCisgIFtJTlBVVF0gcGl4ZWxzaXplID0gc2l6ZSAoaW4gYnl0ZXMpIG9mIGVhY2ggcGl4ZWwgaW4gdGhlIGRlc3RpbmF0aW9uIGltYWdlCisgICAgIFJHQlgvQkdSWC9YUkdCL1hCR1I6IDQsIFJHQi9CR1I6IDMsIEdyYXlzY2FsZTogMQorICBbSU5QVVRdIGZsYWdzID0gdGhlIGJpdHdpc2UgT1Igb2Ygb25lIG9yIG1vcmUgb2YgdGhlIGZsYWdzIGRlc2NyaWJlZCBpbiB0aGUKKyAgICAgIkZsYWdzIiBzZWN0aW9uIGFib3ZlLgorCisgIFJFVFVSTlM6IDAgb24gc3VjY2VzcywgLTEgb24gZXJyb3IKKyovCitETExFWFBPUlQgaW50IERMTENBTEwgdGpEZWNvbXByZXNzKHRqaGFuZGxlIGosCisJdW5zaWduZWQgY2hhciAqc3JjYnVmLCB1bnNpZ25lZCBsb25nIHNpemUsCisJdW5zaWduZWQgY2hhciAqZHN0YnVmLCBpbnQgd2lkdGgsIGludCBwaXRjaCwgaW50IGhlaWdodCwgaW50IHBpeGVsc2l6ZSwKKwlpbnQgZmxhZ3MpOworCisKKy8qCisgIGludCB0akRlY29tcHJlc3NUb1lVVih0amhhbmRsZSBqLAorICAgICB1bnNpZ25lZCBjaGFyICpzcmNidWYsIHVuc2lnbmVkIGxvbmcgc2l6ZSwKKyAgICAgdW5zaWduZWQgY2hhciAqZHN0YnVmLCBpbnQgZmxhZ3MpCisKKyAgVGhpcyBmdW5jdGlvbiBwZXJmb3JtcyBKUEVHIGRlY29tcHJlc3Npb24gYnV0IGxlYXZlcyBvdXQgdGhlIGNvbG9yIGNvbnZlcnNpb24KKyAgc3RlcCwgc28gYSBwbGFuYXIgWVVWIGltYWdlIGlzIGdlbmVyYXRlZCBpbnN0ZWFkIG9mIGFuIFJHQiBpbWFnZS4gIFRoZQorICBwYWRkaW5nIG9mIHRoZSBwbGFuZXMgaW4gdGhpcyBpbWFnZSBpcyB0aGUgc2FtZSBhcyBpbiB0akVuY29kZVlVVigpLgorICBOb3RlIHRoYXQsIGlmIHRoZSB3aWR0aCBvciBoZWlnaHQgb2YgdGhlIG91dHB1dCBpbWFnZSBpcyBub3QgYSBtdWx0aXBsZSBvZiA4CisgIChvciBhIG11bHRpcGxlIG9mIDE2IGFsb25nIGFueSBkaW1lbnNpb24gaW4gd2hpY2ggY2hyb21pbmFuY2Ugc3Vic2FtcGxpbmcgaXMKKyAgdXNlZCksIHRoZW4gYW4gaW50ZXJtZWRpYXRlIGJ1ZmZlciBjb3B5IHdpbGwgYmUgcGVyZm9ybWVkIHdpdGhpbiBUdXJib0pQRUcuCisKKyAgW0lOUFVUXSBqID0gaW5zdGFuY2UgaGFuZGxlIHByZXZpb3VzbHkgcmV0dXJuZWQgZnJvbSBhIGNhbGwgdG8KKyAgICAgdGpJbml0RGVjb21wcmVzcygpCisgIFtJTlBVVF0gc3JjYnVmID0gcG9pbnRlciB0byBhIHVzZXItYWxsb2NhdGVkIGJ1ZmZlciBjb250YWluaW5nIHRoZSBKUEVHIGltYWdlCisgICAgIHRvIGRlY29tcHJlc3MKKyAgW0lOUFVUXSBzaXplID0gc2l6ZSBvZiB0aGUgSlBFRyBpbWFnZSBidWZmZXIgKGluIGJ5dGVzKQorICBbSU5QVVRdIGRzdGJ1ZiA9IHBvaW50ZXIgdG8gdXNlci1hbGxvY2F0ZWQgaW1hZ2UgYnVmZmVyIHdoaWNoIHdpbGwgcmVjZWl2ZQorICAgICB0aGUgWVVWIGltYWdlLiAgVXNlIHRoZSBUSkJVRlNJWkVZVVYod2lkdGgsIGhlaWdodCwgc3Vic2FtcCkgZnVuY3Rpb24gdG8KKyAgICAgZGV0ZXJtaW5lIHRoZSBhcHByb3ByaWF0ZSBzaXplIGZvciB0aGlzIGJ1ZmZlciBiYXNlZCBvbiB0aGUgaW1hZ2Ugd2lkdGgsCisgICAgIGhlaWdodCwgYW5kIGxldmVsIG9mIHN1YnNhbXBsaW5nLgorICBbSU5QVVRdIGZsYWdzID0gdGhlIGJpdHdpc2UgT1Igb2Ygb25lIG9yIG1vcmUgb2YgdGhlIGZsYWdzIGRlc2NyaWJlZCBpbiB0aGUKKyAgICAgIkZsYWdzIiBzZWN0aW9uIGFib3ZlLgorCisgIFJFVFVSTlM6IDAgb24gc3VjY2VzcywgLTEgb24gZXJyb3IKKyovCitETExFWFBPUlQgaW50IERMTENBTEwgdGpEZWNvbXByZXNzVG9ZVVYodGpoYW5kbGUgaiwKKwl1bnNpZ25lZCBjaGFyICpzcmNidWYsIHVuc2lnbmVkIGxvbmcgc2l6ZSwKKwl1bnNpZ25lZCBjaGFyICpkc3RidWYsIGludCBmbGFncyk7CisKKworLyoKKyAgaW50IHRqRGVzdHJveSh0amhhbmRsZSBoKQorCisgIEZyZWVzIHN0cnVjdHVyZXMgYXNzb2NpYXRlZCB3aXRoIGEgY29tcHJlc3Npb24gb3IgZGVjb21wcmVzc2lvbiBpbnN0YW5jZQorICAKKyAgW0lOUFVUXSBoID0gaW5zdGFuY2UgaGFuZGxlIChyZXR1cm5lZCBmcm9tIGEgcHJldmlvdXMgY2FsbCB0bworICAgICB0akluaXRDb21wcmVzcygpIG9yIHRqSW5pdERlY29tcHJlc3MoKQorCisgIFJFVFVSTlM6IDAgb24gc3VjY2VzcywgLTEgb24gZXJyb3IKKyovCitETExFWFBPUlQgaW50IERMTENBTEwgdGpEZXN0cm95KHRqaGFuZGxlIGgpOworCisKKy8qCisgIGNoYXIgKnRqR2V0RXJyb3JTdHIodm9pZCkKKyAgCisgIFJldHVybnMgYSBkZXNjcmlwdGl2ZSBlcnJvciBtZXNzYWdlIGV4cGxhaW5pbmcgd2h5IHRoZSBsYXN0IGNvbW1hbmQgZmFpbGVkCisqLworRExMRVhQT1JUIGNoYXIqIERMTENBTEwgdGpHZXRFcnJvclN0cih2b2lkKTsKKworI2lmZGVmIF9fY3BsdXNwbHVzCit9CisjZW5kaWYKZGlmZiAtLWdpdCBhL3R1cmJvanBlZ2wuYyBiL3R1cmJvanBlZ2wuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41Y2M1NDM3Ci0tLSAvZGV2L251bGwKKysrIGIvdHVyYm9qcGVnbC5jCkBAIC0wLDAgKzEsNjUxIEBACisvKiBDb3B5cmlnaHQgKEMpMjAwNCBMYW5kbWFyayBHcmFwaGljcyBDb3Jwb3JhdGlvbgorICogQ29weXJpZ2h0IChDKTIwMDUgU3VuIE1pY3Jvc3lzdGVtcywgSW5jLgorICogQ29weXJpZ2h0IChDKTIwMDktMjAxMSBELiBSLiBDb21tYW5kZXIKKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZSBhbmQgbWF5IGJlIHJlZGlzdHJpYnV0ZWQgYW5kL29yIG1vZGlmaWVkIHVuZGVyCisgKiB0aGUgdGVybXMgb2YgdGhlIHd4V2luZG93cyBMaWJyYXJ5IExpY2Vuc2UsIFZlcnNpb24gMy4xIG9yIChhdCB5b3VyIG9wdGlvbikKKyAqIGFueSBsYXRlciB2ZXJzaW9uLiAgVGhlIGZ1bGwgbGljZW5zZSBpcyBpbiB0aGUgTElDRU5TRS50eHQgZmlsZSBpbmNsdWRlZAorICogd2l0aCB0aGlzIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgKiB3eFdpbmRvd3MgTGlicmFyeSBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKi8KKworLy8gVGhpcyBpbXBsZW1lbnRzIGEgSlBFRyBjb21wcmVzc29yL2RlY29tcHJlc3NvciB1c2luZyB0aGUgbGlianBlZyBBUEkKKworI2luY2x1ZGUgPHN0ZGlvLmg+CisjaW5jbHVkZSA8c3RkbGliLmg+CisjaW5jbHVkZSA8c3RyaW5nLmg+CisjZGVmaW5lIEpQRUdfSU5URVJOQUxTCisjaW5jbHVkZSA8anBlZ2xpYi5oPgorI2luY2x1ZGUgPGplcnJvci5oPgorI2luY2x1ZGUgPHNldGptcC5oPgorI2luY2x1ZGUgIi4vdHVyYm9qcGVnLmgiCisKKyNpZm5kZWYgbWluCisgI2RlZmluZSBtaW4oYSxiKSAoKGEpPChiKT8oYSk6KGIpKQorI2VuZGlmCisKKyNkZWZpbmUgUEFEKHYsIHApICgodisocCktMSkmKH4oKHApLTEpKSkKKworCisvLyBFcnJvciBoYW5kbGluZworCitzdGF0aWMgY2hhciBsYXN0ZXJyb3JbSk1TR19MRU5HVEhfTUFYXT0iTm8gZXJyb3IiOworCit0eXBlZGVmIHN0cnVjdCBfZXJyb3JfbWdyCit7CisJc3RydWN0IGpwZWdfZXJyb3JfbWdyIHB1YjsKKwlqbXBfYnVmIGpiOworfSBlcnJvcl9tZ3I7CisKK3N0YXRpYyB2b2lkIG15X2Vycm9yX2V4aXQoal9jb21tb25fcHRyIGNpbmZvKQoreworCWVycm9yX21nciAqbXllcnIgPSAoZXJyb3JfbWdyICopY2luZm8tPmVycjsKKwkoKmNpbmZvLT5lcnItPm91dHB1dF9tZXNzYWdlKShjaW5mbyk7CisJbG9uZ2ptcChteWVyci0+amIsIDEpOworfQorCitzdGF0aWMgdm9pZCBteV9vdXRwdXRfbWVzc2FnZShqX2NvbW1vbl9wdHIgY2luZm8pCit7CisJKCpjaW5mby0+ZXJyLT5mb3JtYXRfbWVzc2FnZSkoY2luZm8sIGxhc3RlcnJvcik7Cit9CisKKworLy8gR2xvYmFsIHN0cnVjdHVyZXMsIG1hY3JvcywgZXRjLgorCit0eXBlZGVmIHN0cnVjdCBfanBnc3RydWN0Cit7CisJc3RydWN0IGpwZWdfY29tcHJlc3Nfc3RydWN0IGNpbmZvOworCXN0cnVjdCBqcGVnX2RlY29tcHJlc3Nfc3RydWN0IGRpbmZvOworCXN0cnVjdCBqcGVnX2Rlc3RpbmF0aW9uX21nciBqZG1zOworCXN0cnVjdCBqcGVnX3NvdXJjZV9tZ3IganNtczsKKwllcnJvcl9tZ3IgamVycjsKKwlpbnQgaW5pdGMsIGluaXRkOworfSBqcGdzdHJ1Y3Q7CisKK3N0YXRpYyBjb25zdCBpbnQgaHNhbXBmYWN0b3JbTlVNU1VCT1BUXT17MSwgMiwgMiwgMX07CitzdGF0aWMgY29uc3QgaW50IHZzYW1wZmFjdG9yW05VTVNVQk9QVF09ezEsIDEsIDIsIDF9Oworc3RhdGljIGNvbnN0IGludCBwaXhlbHNpemVbTlVNU1VCT1BUXT17MywgMywgMywgMX07CisKKyNkZWZpbmUgX3Rocm93KGMpIHtzcHJpbnRmKGxhc3RlcnJvciwgIiVzIiwgYyk7ICByZXR2YWw9LTE7ICBnb3RvIGJhaWxvdXQ7fQorI2RlZmluZSBjaGVja2hhbmRsZShoKSBqcGdzdHJ1Y3QgKmo9KGpwZ3N0cnVjdCAqKWg7IFwKKwlpZighaikge3NwcmludGYobGFzdGVycm9yLCAiSW52YWxpZCBoYW5kbGUiKTsgIHJldHVybiAtMTt9CisKKworLy8gQ08KKworc3RhdGljIGJvb2xlYW4gZW1wdHlfb3V0cHV0X2J1ZmZlcihzdHJ1Y3QganBlZ19jb21wcmVzc19zdHJ1Y3QgKmNpbmZvKQoreworCUVSUkVYSVQoY2luZm8sIEpFUlJfQlVGRkVSX1NJWkUpOworCXJldHVybiBUUlVFOworfQorCitzdGF0aWMgdm9pZCBkZXN0aW5hdGlvbl9ub29wKHN0cnVjdCBqcGVnX2NvbXByZXNzX3N0cnVjdCAqY2luZm8pCit7Cit9CisKK0RMTEVYUE9SVCB0amhhbmRsZSBETExDQUxMIHRqSW5pdENvbXByZXNzKHZvaWQpCit7CisJanBnc3RydWN0ICpqPU5VTEw7CisJaWYoKGo9KGpwZ3N0cnVjdCAqKW1hbGxvYyhzaXplb2YoanBnc3RydWN0KSkpPT1OVUxMKQorCQl7c3ByaW50ZihsYXN0ZXJyb3IsICJNZW1vcnkgYWxsb2NhdGlvbiBmYWlsdXJlIik7ICByZXR1cm4gTlVMTDt9CisJbWVtc2V0KGosIDAsIHNpemVvZihqcGdzdHJ1Y3QpKTsKKwlqLT5jaW5mby5lcnI9anBlZ19zdGRfZXJyb3IoJmotPmplcnIucHViKTsKKwlqLT5qZXJyLnB1Yi5lcnJvcl9leGl0PW15X2Vycm9yX2V4aXQ7CisJai0+amVyci5wdWIub3V0cHV0X21lc3NhZ2U9bXlfb3V0cHV0X21lc3NhZ2U7CisKKwlpZihzZXRqbXAoai0+amVyci5qYikpCisJeyAvLyB0aGlzIHdpbGwgZXhlY3V0ZSBpZiBMSUJKUEVHIGhhcyBhbiBlcnJvcgorCQlpZihqKSBmcmVlKGopOyAgcmV0dXJuIE5VTEw7CisJfQorCisJanBlZ19jcmVhdGVfY29tcHJlc3MoJmotPmNpbmZvKTsKKwlqLT5jaW5mby5kZXN0PSZqLT5qZG1zOworCWotPmpkbXMuaW5pdF9kZXN0aW5hdGlvbj1kZXN0aW5hdGlvbl9ub29wOworCWotPmpkbXMuZW1wdHlfb3V0cHV0X2J1ZmZlcj1lbXB0eV9vdXRwdXRfYnVmZmVyOworCWotPmpkbXMudGVybV9kZXN0aW5hdGlvbj1kZXN0aW5hdGlvbl9ub29wOworCisJai0+aW5pdGM9MTsKKwlyZXR1cm4gKHRqaGFuZGxlKWo7Cit9CisKKworRExMRVhQT1JUIHVuc2lnbmVkIGxvbmcgRExMQ0FMTCBUSkJVRlNJWkUoaW50IHdpZHRoLCBpbnQgaGVpZ2h0KQoreworCXVuc2lnbmVkIGxvbmcgcmV0dmFsPTA7CisJaWYod2lkdGg8MSB8fCBoZWlnaHQ8MSkKKwkJX3Rocm93KCJJbnZhbGlkIGFyZ3VtZW50IGluIFRKQlVGU0laRSgpIik7CisKKwkvLyBUaGlzIGFsbG93cyBmb3IgcmFyZSBjb3JuZXIgY2FzZXMgaW4gd2hpY2ggYSBKUEVHIGltYWdlIGNhbiBhY3R1YWxseSBiZQorCS8vIGxhcmdlciB0aGFuIHRoZSB1bmNvbXByZXNzZWQgaW5wdXQgKHdlIHdvdWxkbid0IG1lbnRpb24gaXQgaWYgaXQgaGFkbid0CisJLy8gaGFwcGVuZWQgYmVmb3JlLikKKwlyZXR2YWw9KCh3aWR0aCsxNSkmKH4xNSkpICogKChoZWlnaHQrMTUpJih+MTUpKSAqIDYgKyAyMDQ4OworCisJYmFpbG91dDoKKwlyZXR1cm4gcmV0dmFsOworfQorCisKK0RMTEVYUE9SVCB1bnNpZ25lZCBsb25nIERMTENBTEwgVEpCVUZTSVpFWVVWKGludCB3aWR0aCwgaW50IGhlaWdodCwKKwlpbnQgc3Vic2FtcCkKK3sKKwl1bnNpZ25lZCBsb25nIHJldHZhbD0wOworCWludCBwdywgcGgsIGN3LCBjaDsKKwlpZih3aWR0aDwxIHx8IGhlaWdodDwxIHx8IHN1YnNhbXA8MCB8fCBzdWJzYW1wPj1OVU1TVUJPUFQpCisJCV90aHJvdygiSW52YWxpZCBhcmd1bWVudCBpbiBUSkJVRlNJWkVZVVYoKSIpOworCXB3PVBBRCh3aWR0aCwgaHNhbXBmYWN0b3Jbc3Vic2FtcF0pOworCXBoPVBBRChoZWlnaHQsIHZzYW1wZmFjdG9yW3N1YnNhbXBdKTsKKwljdz1wdy9oc2FtcGZhY3RvcltzdWJzYW1wXTsgIGNoPXBoL3ZzYW1wZmFjdG9yW3N1YnNhbXBdOworCXJldHZhbD1QQUQocHcsIDQpKnBoICsgKHN1YnNhbXA9PVRKX0dSQVlTQ0FMRT8gMDpQQUQoY3csIDQpKmNoKjIpOworCisJYmFpbG91dDoKKwlyZXR1cm4gcmV0dmFsOworfQorCisKK0RMTEVYUE9SVCBpbnQgRExMQ0FMTCB0akNvbXByZXNzKHRqaGFuZGxlIGgsCisJdW5zaWduZWQgY2hhciAqc3JjYnVmLCBpbnQgd2lkdGgsIGludCBwaXRjaCwgaW50IGhlaWdodCwgaW50IHBzLAorCXVuc2lnbmVkIGNoYXIgKmRzdGJ1ZiwgdW5zaWduZWQgbG9uZyAqc2l6ZSwKKwlpbnQganBlZ3N1YiwgaW50IHF1YWwsIGludCBmbGFncykKK3sKKwlpbnQgaSwgcmV0dmFsPTA7ICBKU0FNUFJPVyAqcm93X3BvaW50ZXI9TlVMTDsKKwlKU0FNUExFICpfdG1wYnVmW01BWF9DT01QT05FTlRTXSwgKl90bXBidWYyW01BWF9DT01QT05FTlRTXTsKKwlKU0FNUFJPVyAqdG1wYnVmW01BWF9DT01QT05FTlRTXSwgKnRtcGJ1ZjJbTUFYX0NPTVBPTkVOVFNdOworCUpTQU1QUk9XICpvdXRidWZbTUFYX0NPTVBPTkVOVFNdOworCisJY2hlY2toYW5kbGUoaCk7CisKKwlmb3IoaT0wOyBpPE1BWF9DT01QT05FTlRTOyBpKyspCisJeworCQl0bXBidWZbaV09TlVMTDsgIF90bXBidWZbaV09TlVMTDsKKwkJdG1wYnVmMltpXT1OVUxMOyAgX3RtcGJ1ZjJbaV09TlVMTDsgIG91dGJ1ZltpXT1OVUxMOworCX0KKworCWlmKHNyY2J1Zj09TlVMTCB8fCB3aWR0aDw9MCB8fCBwaXRjaDwwIHx8IGhlaWdodDw9MAorCQl8fCBkc3RidWY9PU5VTEwgfHwgc2l6ZT09TlVMTAorCQl8fCBqcGVnc3ViPDAgfHwganBlZ3N1Yj49TlVNU1VCT1BUIHx8IHF1YWw8MCB8fCBxdWFsPjEwMCkKKwkJX3Rocm93KCJJbnZhbGlkIGFyZ3VtZW50IGluIHRqQ29tcHJlc3MoKSIpOworCWlmKHBzIT0zICYmIHBzIT00ICYmIHBzIT0xKQorCQlfdGhyb3coIlRoaXMgY29tcHJlc3NvciBjYW4gb25seSBoYW5kbGUgMjQtYml0IGFuZCAzMi1iaXQgUkdCIG9yIDgtYml0IGdyYXlzY2FsZSBpbnB1dCIpOworCWlmKCFqLT5pbml0YykgX3Rocm93KCJJbnN0YW5jZSBoYXMgbm90IGJlZW4gaW5pdGlhbGl6ZWQgZm9yIGNvbXByZXNzaW9uIik7CisKKwlpZihwaXRjaD09MCkgcGl0Y2g9d2lkdGgqcHM7CisKKwlqLT5jaW5mby5pbWFnZV93aWR0aCA9IHdpZHRoOworCWotPmNpbmZvLmltYWdlX2hlaWdodCA9IGhlaWdodDsKKwlqLT5jaW5mby5pbnB1dF9jb21wb25lbnRzID0gcHM7CisKKwlpZihwcz09MSkgai0+Y2luZm8uaW5fY29sb3Jfc3BhY2UgPSBKQ1NfR1JBWVNDQUxFOworCSNpZiBKQ1NfRVhURU5TSU9OUz09MQorCWVsc2Ugai0+Y2luZm8uaW5fY29sb3Jfc3BhY2UgPSBKQ1NfRVhUX1JHQjsKKwlpZihwcz09MyAmJiAoZmxhZ3MmVEpfQkdSKSkKKwkJai0+Y2luZm8uaW5fY29sb3Jfc3BhY2UgPSBKQ1NfRVhUX0JHUjsKKwllbHNlIGlmKHBzPT00ICYmICEoZmxhZ3MmVEpfQkdSKSAmJiAhKGZsYWdzJlRKX0FMUEhBRklSU1QpKQorCQlqLT5jaW5mby5pbl9jb2xvcl9zcGFjZSA9IEpDU19FWFRfUkdCWDsKKwllbHNlIGlmKHBzPT00ICYmIChmbGFncyZUSl9CR1IpICYmICEoZmxhZ3MmVEpfQUxQSEFGSVJTVCkpCisJCWotPmNpbmZvLmluX2NvbG9yX3NwYWNlID0gSkNTX0VYVF9CR1JYOworCWVsc2UgaWYocHM9PTQgJiYgKGZsYWdzJlRKX0JHUikgJiYgKGZsYWdzJlRKX0FMUEhBRklSU1QpKQorCQlqLT5jaW5mby5pbl9jb2xvcl9zcGFjZSA9IEpDU19FWFRfWEJHUjsKKwllbHNlIGlmKHBzPT00ICYmICEoZmxhZ3MmVEpfQkdSKSAmJiAoZmxhZ3MmVEpfQUxQSEFGSVJTVCkpCisJCWotPmNpbmZvLmluX2NvbG9yX3NwYWNlID0gSkNTX0VYVF9YUkdCOworCSNlbHNlCisJI2Vycm9yICJUdXJib0pQRUcgcmVxdWlyZXMgSlBFRyBjb2xvcnNwYWNlIGV4dGVuc2lvbnMiCisJI2VuZGlmCisKKwlpZihmbGFncyZUSl9GT1JDRU1NWCkgcHV0ZW52KCJKU0lNRF9GT1JDRU1NWD0xIik7CisJZWxzZSBpZihmbGFncyZUSl9GT1JDRVNTRSkgcHV0ZW52KCJKU0lNRF9GT1JDRVNTRT0xIik7CisJZWxzZSBpZihmbGFncyZUSl9GT1JDRVNTRTIpIHB1dGVudigiSlNJTURfRk9SQ0VTU0UyPTEiKTsKKworCWlmKHNldGptcChqLT5qZXJyLmpiKSkKKwl7ICAvLyB0aGlzIHdpbGwgZXhlY3V0ZSBpZiBMSUJKUEVHIGhhcyBhbiBlcnJvcgorCQlyZXR2YWw9LTE7CisJCWdvdG8gYmFpbG91dDsKKwl9CisKKwlqcGVnX3NldF9kZWZhdWx0cygmai0+Y2luZm8pOworCisJanBlZ19zZXRfcXVhbGl0eSgmai0+Y2luZm8sIHF1YWwsIFRSVUUpOworCWlmKGpwZWdzdWI9PVRKX0dSQVlTQ0FMRSkKKwkJanBlZ19zZXRfY29sb3JzcGFjZSgmai0+Y2luZm8sIEpDU19HUkFZU0NBTEUpOworCWVsc2UKKwkJanBlZ19zZXRfY29sb3JzcGFjZSgmai0+Y2luZm8sIEpDU19ZQ2JDcik7CisJaWYocXVhbD49OTYpIGotPmNpbmZvLmRjdF9tZXRob2Q9SkRDVF9JU0xPVzsKKwllbHNlIGotPmNpbmZvLmRjdF9tZXRob2Q9SkRDVF9GQVNURVNUOworCisJai0+Y2luZm8uY29tcF9pbmZvWzBdLmhfc2FtcF9mYWN0b3I9aHNhbXBmYWN0b3JbanBlZ3N1Yl07CisJai0+Y2luZm8uY29tcF9pbmZvWzFdLmhfc2FtcF9mYWN0b3I9MTsKKwlqLT5jaW5mby5jb21wX2luZm9bMl0uaF9zYW1wX2ZhY3Rvcj0xOworCWotPmNpbmZvLmNvbXBfaW5mb1swXS52X3NhbXBfZmFjdG9yPXZzYW1wZmFjdG9yW2pwZWdzdWJdOworCWotPmNpbmZvLmNvbXBfaW5mb1sxXS52X3NhbXBfZmFjdG9yPTE7CisJai0+Y2luZm8uY29tcF9pbmZvWzJdLnZfc2FtcF9mYWN0b3I9MTsKKworCWotPmpkbXMubmV4dF9vdXRwdXRfYnl0ZSA9IGRzdGJ1ZjsKKwlqLT5qZG1zLmZyZWVfaW5fYnVmZmVyID0gVEpCVUZTSVpFKGotPmNpbmZvLmltYWdlX3dpZHRoLCBqLT5jaW5mby5pbWFnZV9oZWlnaHQpOworCisJanBlZ19zdGFydF9jb21wcmVzcygmai0+Y2luZm8sIFRSVUUpOworCWlmKGZsYWdzJlRKX1lVVikKKwl7CisJCWpfY29tcHJlc3NfcHRyIGNpbmZvPSZqLT5jaW5mbzsKKwkJaW50IHJvdzsKKwkJaW50IHB3PVBBRCh3aWR0aCwgY2luZm8tPm1heF9oX3NhbXBfZmFjdG9yKTsKKwkJaW50IHBoPVBBRChoZWlnaHQsIGNpbmZvLT5tYXhfdl9zYW1wX2ZhY3Rvcik7CisJCWludCBjd1tNQVhfQ09NUE9ORU5UU10sIGNoW01BWF9DT01QT05FTlRTXTsKKwkJanBlZ19jb21wb25lbnRfaW5mbyAqY29tcHB0cjsKKwkJSlNBTVBMRSAqcHRyPWRzdGJ1ZjsgIHVuc2lnbmVkIGxvbmcgeXV2c2l6ZT0wOworCisJCWlmKChyb3dfcG9pbnRlcj0oSlNBTVBST1cgKiltYWxsb2Moc2l6ZW9mKEpTQU1QUk9XKSpwaCkpPT1OVUxMKQorCQkJX3Rocm93KCJNZW1vcnkgYWxsb2NhdGlvbiBmYWlsZWQgaW4gdGpDb21wcmVzcygpIik7CisJCWZvcihpPTA7IGk8aGVpZ2h0OyBpKyspCisJCXsKKwkJCWlmKGZsYWdzJlRKX0JPVFRPTVVQKSByb3dfcG9pbnRlcltpXT0gJnNyY2J1ZlsoaGVpZ2h0LWktMSkqcGl0Y2hdOworCQkJZWxzZSByb3dfcG9pbnRlcltpXT0gJnNyY2J1ZltpKnBpdGNoXTsKKwkJfQorCQlpZihoZWlnaHQ8cGgpCisJCQlmb3IoaT1oZWlnaHQ7IGk8cGg7IGkrKykgcm93X3BvaW50ZXJbaV09cm93X3BvaW50ZXJbaGVpZ2h0LTFdOworCisJCWZvcihpPTA7IGk8Y2luZm8tPm51bV9jb21wb25lbnRzOyBpKyspCisJCXsKKwkJCWNvbXBwdHI9JmNpbmZvLT5jb21wX2luZm9baV07CisJCQlfdG1wYnVmW2ldPShKU0FNUExFICopbWFsbG9jKAorCQkJCVBBRCgoY29tcHB0ci0+d2lkdGhfaW5fYmxvY2tzKmNpbmZvLT5tYXhfaF9zYW1wX2ZhY3RvcipEQ1RTSVpFKQorCQkJCQkvY29tcHB0ci0+aF9zYW1wX2ZhY3RvciwgMTYpICogY2luZm8tPm1heF92X3NhbXBfZmFjdG9yICsgMTYpOworCQkJaWYoIV90bXBidWZbaV0pIF90aHJvdygiTWVtb3J5IGFsbG9jYXRpb24gZmFpbHVyZSIpOworCQkJdG1wYnVmW2ldPShKU0FNUFJPVyAqKW1hbGxvYyhzaXplb2YoSlNBTVBST1cpKmNpbmZvLT5tYXhfdl9zYW1wX2ZhY3Rvcik7CisJCQlpZighdG1wYnVmW2ldKSBfdGhyb3coIk1lbW9yeSBhbGxvY2F0aW9uIGZhaWx1cmUiKTsKKwkJCWZvcihyb3c9MDsgcm93PGNpbmZvLT5tYXhfdl9zYW1wX2ZhY3Rvcjsgcm93KyspCisJCQl7CisJCQkJdW5zaWduZWQgY2hhciAqX3RtcGJ1Zl9hbGlnbmVkPQorCQkJCQkodW5zaWduZWQgY2hhciAqKVBBRCgoc2l6ZV90KV90bXBidWZbaV0sIDE2KTsKKwkJCQl0bXBidWZbaV1bcm93XT0mX3RtcGJ1Zl9hbGlnbmVkWworCQkJCQlQQUQoKGNvbXBwdHItPndpZHRoX2luX2Jsb2NrcypjaW5mby0+bWF4X2hfc2FtcF9mYWN0b3IqRENUU0laRSkKKwkJCQkJCS9jb21wcHRyLT5oX3NhbXBfZmFjdG9yLCAxNikgKiByb3ddOworCQkJfQorCQkJX3RtcGJ1ZjJbaV09KEpTQU1QTEUgKiltYWxsb2MoUEFEKGNvbXBwdHItPndpZHRoX2luX2Jsb2NrcypEQ1RTSVpFLCAxNikKKwkJCQkqIGNvbXBwdHItPnZfc2FtcF9mYWN0b3IgKyAxNik7CisJCQlpZighX3RtcGJ1ZjJbaV0pIF90aHJvdygiTWVtb3J5IGFsbG9jYXRpb24gZmFpbHVyZSIpOworCQkJdG1wYnVmMltpXT0oSlNBTVBST1cgKiltYWxsb2Moc2l6ZW9mKEpTQU1QUk9XKSpjb21wcHRyLT52X3NhbXBfZmFjdG9yKTsKKwkJCWlmKCF0bXBidWYyW2ldKSBfdGhyb3coIk1lbW9yeSBhbGxvY2F0aW9uIGZhaWx1cmUiKTsKKwkJCWZvcihyb3c9MDsgcm93PGNvbXBwdHItPnZfc2FtcF9mYWN0b3I7IHJvdysrKQorCQkJeworCQkJCXVuc2lnbmVkIGNoYXIgKl90bXBidWYyX2FsaWduZWQ9CisJCQkJCSh1bnNpZ25lZCBjaGFyICopUEFEKChzaXplX3QpX3RtcGJ1ZjJbaV0sIDE2KTsKKwkJCQl0bXBidWYyW2ldW3Jvd109Jl90bXBidWYyX2FsaWduZWRbCisJCQkJCVBBRChjb21wcHRyLT53aWR0aF9pbl9ibG9ja3MqRENUU0laRSwgMTYpICogcm93XTsKKwkJCX0KKwkJCWN3W2ldPXB3KmNvbXBwdHItPmhfc2FtcF9mYWN0b3IvY2luZm8tPm1heF9oX3NhbXBfZmFjdG9yOworCQkJY2hbaV09cGgqY29tcHB0ci0+dl9zYW1wX2ZhY3Rvci9jaW5mby0+bWF4X3Zfc2FtcF9mYWN0b3I7CisJCQlvdXRidWZbaV09KEpTQU1QUk9XICopbWFsbG9jKHNpemVvZihKU0FNUFJPVykqY2hbaV0pOworCQkJaWYoIW91dGJ1ZltpXSkgX3Rocm93KCJNZW1vcnkgYWxsb2NhdGlvbiBmYWlsdXJlIik7CisJCQlmb3Iocm93PTA7IHJvdzxjaFtpXTsgcm93KyspCisJCQl7CisJCQkJb3V0YnVmW2ldW3Jvd109cHRyOworCQkJCXB0cis9UEFEKGN3W2ldLCA0KTsKKwkJCX0KKwkJfQorCQl5dXZzaXplPSh1bnNpZ25lZCBsb25nKShwdHItZHN0YnVmKTsKKworCQlmb3Iocm93PTA7IHJvdzxwaDsgcm93Kz1jaW5mby0+bWF4X3Zfc2FtcF9mYWN0b3IpCisJCXsKKwkJCSgqY2luZm8tPmNjb252ZXJ0LT5jb2xvcl9jb252ZXJ0KShjaW5mbywgJnJvd19wb2ludGVyW3Jvd10sIHRtcGJ1ZiwKKwkJCQkwLCBjaW5mby0+bWF4X3Zfc2FtcF9mYWN0b3IpOworCQkJKGNpbmZvLT5kb3duc2FtcGxlLT5kb3duc2FtcGxlKShjaW5mbywgdG1wYnVmLCAwLCB0bXBidWYyLCAwKTsKKwkJCWZvcihpPTAsIGNvbXBwdHI9Y2luZm8tPmNvbXBfaW5mbzsgaTxjaW5mby0+bnVtX2NvbXBvbmVudHM7CisJCQkJaSsrLCBjb21wcHRyKyspCisJCQkJamNvcHlfc2FtcGxlX3Jvd3ModG1wYnVmMltpXSwgMCwgb3V0YnVmW2ldLAorCQkJCQlyb3cqY29tcHB0ci0+dl9zYW1wX2ZhY3Rvci9jaW5mby0+bWF4X3Zfc2FtcF9mYWN0b3IsCisJCQkJCWNvbXBwdHItPnZfc2FtcF9mYWN0b3IsIGN3W2ldKTsKKwkJfQorCQkqc2l6ZT15dXZzaXplOworCQljaW5mby0+bmV4dF9zY2FubGluZSs9aGVpZ2h0OworCQlqcGVnX2Fib3J0X2NvbXByZXNzKCZqLT5jaW5mbyk7CisJfQorCWVsc2UKKwl7CisJCWlmKChyb3dfcG9pbnRlcj0oSlNBTVBST1cgKiltYWxsb2Moc2l6ZW9mKEpTQU1QUk9XKSpoZWlnaHQpKT09TlVMTCkKKwkJCV90aHJvdygiTWVtb3J5IGFsbG9jYXRpb24gZmFpbGVkIGluIHRqQ29tcHJlc3MoKSIpOworCQlmb3IoaT0wOyBpPGhlaWdodDsgaSsrKQorCQl7CisJCQlpZihmbGFncyZUSl9CT1RUT01VUCkgcm93X3BvaW50ZXJbaV09ICZzcmNidWZbKGhlaWdodC1pLTEpKnBpdGNoXTsKKwkJCWVsc2Ugcm93X3BvaW50ZXJbaV09ICZzcmNidWZbaSpwaXRjaF07CisJCX0KKwkJd2hpbGUoai0+Y2luZm8ubmV4dF9zY2FubGluZTxqLT5jaW5mby5pbWFnZV9oZWlnaHQpCisJCXsKKwkJCWpwZWdfd3JpdGVfc2NhbmxpbmVzKCZqLT5jaW5mbywgJnJvd19wb2ludGVyW2otPmNpbmZvLm5leHRfc2NhbmxpbmVdLAorCQkJCWotPmNpbmZvLmltYWdlX2hlaWdodC1qLT5jaW5mby5uZXh0X3NjYW5saW5lKTsKKwkJfQorCQlqcGVnX2ZpbmlzaF9jb21wcmVzcygmai0+Y2luZm8pOworCQkqc2l6ZT1USkJVRlNJWkUoai0+Y2luZm8uaW1hZ2Vfd2lkdGgsIGotPmNpbmZvLmltYWdlX2hlaWdodCkKKwkJCS0odW5zaWduZWQgbG9uZykoai0+amRtcy5mcmVlX2luX2J1ZmZlcik7CisJfQorCisJYmFpbG91dDoKKwlpZihqLT5jaW5mby5nbG9iYWxfc3RhdGU+Q1NUQVRFX1NUQVJUKSBqcGVnX2Fib3J0X2NvbXByZXNzKCZqLT5jaW5mbyk7CisJaWYocm93X3BvaW50ZXIpIGZyZWUocm93X3BvaW50ZXIpOworCWZvcihpPTA7IGk8TUFYX0NPTVBPTkVOVFM7IGkrKykKKwl7CisJCWlmKHRtcGJ1ZltpXSE9TlVMTCkgZnJlZSh0bXBidWZbaV0pOworCQlpZihfdG1wYnVmW2ldIT1OVUxMKSBmcmVlKF90bXBidWZbaV0pOworCQlpZih0bXBidWYyW2ldIT1OVUxMKSBmcmVlKHRtcGJ1ZjJbaV0pOworCQlpZihfdG1wYnVmMltpXSE9TlVMTCkgZnJlZShfdG1wYnVmMltpXSk7CisJCWlmKG91dGJ1ZltpXSE9TlVMTCkgZnJlZShvdXRidWZbaV0pOworCX0KKwlyZXR1cm4gcmV0dmFsOworfQorCisKK0RMTEVYUE9SVCBpbnQgRExMQ0FMTCB0akVuY29kZVlVVih0amhhbmRsZSBoLAorCXVuc2lnbmVkIGNoYXIgKnNyY2J1ZiwgaW50IHdpZHRoLCBpbnQgcGl0Y2gsIGludCBoZWlnaHQsIGludCBwcywKKwl1bnNpZ25lZCBjaGFyICpkc3RidWYsIGludCBzdWJzYW1wLCBpbnQgZmxhZ3MpCit7CisJdW5zaWduZWQgbG9uZyBzaXplOworCXJldHVybiB0akNvbXByZXNzKGgsIHNyY2J1Ziwgd2lkdGgsIHBpdGNoLCBoZWlnaHQsIHBzLCBkc3RidWYsICZzaXplLAorCQlzdWJzYW1wLCAwLCBmbGFnc3xUSl9ZVVYpOworfQorCisKKy8vIERFQworCitzdGF0aWMgYm9vbGVhbiBmaWxsX2lucHV0X2J1ZmZlciAoc3RydWN0IGpwZWdfZGVjb21wcmVzc19zdHJ1Y3QgKmRpbmZvKQoreworCUVSUkVYSVQoZGluZm8sIEpFUlJfQlVGRkVSX1NJWkUpOworCXJldHVybiBUUlVFOworfQorCitzdGF0aWMgdm9pZCBza2lwX2lucHV0X2RhdGEgKHN0cnVjdCBqcGVnX2RlY29tcHJlc3Nfc3RydWN0ICpkaW5mbywgbG9uZyBudW1fYnl0ZXMpCit7CisJZGluZm8tPnNyYy0+bmV4dF9pbnB1dF9ieXRlICs9IChzaXplX3QpIG51bV9ieXRlczsKKwlkaW5mby0+c3JjLT5ieXRlc19pbl9idWZmZXIgLT0gKHNpemVfdCkgbnVtX2J5dGVzOworfQorCitzdGF0aWMgdm9pZCBzb3VyY2Vfbm9vcCAoc3RydWN0IGpwZWdfZGVjb21wcmVzc19zdHJ1Y3QgKmRpbmZvKQoreworfQorCitETExFWFBPUlQgdGpoYW5kbGUgRExMQ0FMTCB0akluaXREZWNvbXByZXNzKHZvaWQpCit7CisJanBnc3RydWN0ICpqOworCWlmKChqPShqcGdzdHJ1Y3QgKiltYWxsb2Moc2l6ZW9mKGpwZ3N0cnVjdCkpKT09TlVMTCkKKwkJe3NwcmludGYobGFzdGVycm9yLCAiTWVtb3J5IGFsbG9jYXRpb24gZmFpbHVyZSIpOyAgcmV0dXJuIE5VTEw7fQorCW1lbXNldChqLCAwLCBzaXplb2YoanBnc3RydWN0KSk7CisJai0+ZGluZm8uZXJyPWpwZWdfc3RkX2Vycm9yKCZqLT5qZXJyLnB1Yik7CisJai0+amVyci5wdWIuZXJyb3JfZXhpdD1teV9lcnJvcl9leGl0OworCWotPmplcnIucHViLm91dHB1dF9tZXNzYWdlPW15X291dHB1dF9tZXNzYWdlOworCisJaWYoc2V0am1wKGotPmplcnIuamIpKQorCXsgLy8gdGhpcyB3aWxsIGV4ZWN1dGUgaWYgTElCSlBFRyBoYXMgYW4gZXJyb3IKKwkJZnJlZShqKTsgIHJldHVybiBOVUxMOworCX0KKworCWpwZWdfY3JlYXRlX2RlY29tcHJlc3MoJmotPmRpbmZvKTsKKwlqLT5kaW5mby5zcmM9JmotPmpzbXM7CisJai0+anNtcy5pbml0X3NvdXJjZT1zb3VyY2Vfbm9vcDsKKwlqLT5qc21zLmZpbGxfaW5wdXRfYnVmZmVyID0gZmlsbF9pbnB1dF9idWZmZXI7CisJai0+anNtcy5za2lwX2lucHV0X2RhdGEgPSBza2lwX2lucHV0X2RhdGE7CisJai0+anNtcy5yZXN5bmNfdG9fcmVzdGFydCA9IGpwZWdfcmVzeW5jX3RvX3Jlc3RhcnQ7CisJai0+anNtcy50ZXJtX3NvdXJjZSA9IHNvdXJjZV9ub29wOworCisJai0+aW5pdGQ9MTsKKwlyZXR1cm4gKHRqaGFuZGxlKWo7Cit9CisKKworRExMRVhQT1JUIGludCBETExDQUxMIHRqRGVjb21wcmVzc0hlYWRlcjIodGpoYW5kbGUgaCwKKwl1bnNpZ25lZCBjaGFyICpzcmNidWYsIHVuc2lnbmVkIGxvbmcgc2l6ZSwKKwlpbnQgKndpZHRoLCBpbnQgKmhlaWdodCwgaW50ICpqcGVnc3ViKQoreworCWludCBpLCBrLCByZXR2YWw9MDsKKworCWNoZWNraGFuZGxlKGgpOworCisJaWYoc3JjYnVmPT1OVUxMIHx8IHNpemU8PTAgfHwgd2lkdGg9PU5VTEwgfHwgaGVpZ2h0PT1OVUxMIHx8IGpwZWdzdWI9PU5VTEwpCisJCV90aHJvdygiSW52YWxpZCBhcmd1bWVudCBpbiB0akRlY29tcHJlc3NIZWFkZXIyKCkiKTsKKwlpZighai0+aW5pdGQpIF90aHJvdygiSW5zdGFuY2UgaGFzIG5vdCBiZWVuIGluaXRpYWxpemVkIGZvciBkZWNvbXByZXNzaW9uIik7CisKKwlpZihzZXRqbXAoai0+amVyci5qYikpCisJeyAgLy8gdGhpcyB3aWxsIGV4ZWN1dGUgaWYgTElCSlBFRyBoYXMgYW4gZXJyb3IKKwkJcmV0dXJuIC0xOworCX0KKworCWotPmpzbXMuYnl0ZXNfaW5fYnVmZmVyID0gc2l6ZTsKKwlqLT5qc21zLm5leHRfaW5wdXRfYnl0ZSA9IHNyY2J1ZjsKKworCWpwZWdfcmVhZF9oZWFkZXIoJmotPmRpbmZvLCBUUlVFKTsKKworCSp3aWR0aD1qLT5kaW5mby5pbWFnZV93aWR0aDsgICpoZWlnaHQ9ai0+ZGluZm8uaW1hZ2VfaGVpZ2h0OworCSpqcGVnc3ViPS0xOworCWZvcihpPTA7IGk8TlVNU1VCT1BUOyBpKyspCisJeworCQlpZihqLT5kaW5mby5udW1fY29tcG9uZW50cz09cGl4ZWxzaXplW2ldKQorCQl7CisJCQlpZihqLT5kaW5mby5jb21wX2luZm9bMF0uaF9zYW1wX2ZhY3Rvcj09aHNhbXBmYWN0b3JbaV0KKwkJCQkmJiBqLT5kaW5mby5jb21wX2luZm9bMF0udl9zYW1wX2ZhY3Rvcj09dnNhbXBmYWN0b3JbaV0pCisJCQl7CisJCQkJaW50IG1hdGNoPTA7CisJCQkJZm9yKGs9MTsgazxqLT5kaW5mby5udW1fY29tcG9uZW50czsgaysrKQorCQkJCXsKKwkJCQkJaWYoai0+ZGluZm8uY29tcF9pbmZvW2tdLmhfc2FtcF9mYWN0b3I9PTEKKwkJCQkJCSYmIGotPmRpbmZvLmNvbXBfaW5mb1trXS52X3NhbXBfZmFjdG9yPT0xKQorCQkJCQkJbWF0Y2grKzsKKwkJCQl9CisJCQkJaWYobWF0Y2g9PWotPmRpbmZvLm51bV9jb21wb25lbnRzLTEpCisJCQkJeworCQkJCQkqanBlZ3N1Yj1pOyAgYnJlYWs7CisJCQkJfQorCQkJfQorCQl9CisJfQorCisJanBlZ19hYm9ydF9kZWNvbXByZXNzKCZqLT5kaW5mbyk7CisKKwlpZigqanBlZ3N1YjwwKSBfdGhyb3coIkNvdWxkIG5vdCBkZXRlcm1pbmUgc3Vic2FtcGxpbmcgdHlwZSBmb3IgSlBFRyBpbWFnZSIpOworCWlmKCp3aWR0aDwxIHx8ICpoZWlnaHQ8MSkgX3Rocm93KCJJbnZhbGlkIGRhdGEgcmV0dXJuZWQgaW4gaGVhZGVyIik7CisKKwliYWlsb3V0OgorCXJldHVybiByZXR2YWw7Cit9CisKKworRExMRVhQT1JUIGludCBETExDQUxMIHRqRGVjb21wcmVzc0hlYWRlcih0amhhbmRsZSBoLAorCXVuc2lnbmVkIGNoYXIgKnNyY2J1ZiwgdW5zaWduZWQgbG9uZyBzaXplLAorCWludCAqd2lkdGgsIGludCAqaGVpZ2h0KQoreworCWludCBqcGVnc3ViOworCXJldHVybiB0akRlY29tcHJlc3NIZWFkZXIyKGgsIHNyY2J1Ziwgc2l6ZSwgd2lkdGgsIGhlaWdodCwgJmpwZWdzdWIpOworfQorCisKK0RMTEVYUE9SVCBpbnQgRExMQ0FMTCB0akRlY29tcHJlc3ModGpoYW5kbGUgaCwKKwl1bnNpZ25lZCBjaGFyICpzcmNidWYsIHVuc2lnbmVkIGxvbmcgc2l6ZSwKKwl1bnNpZ25lZCBjaGFyICpkc3RidWYsIGludCB3aWR0aCwgaW50IHBpdGNoLCBpbnQgaGVpZ2h0LCBpbnQgcHMsCisJaW50IGZsYWdzKQoreworCWludCBpLCByb3csIHJldHZhbD0wOyAgSlNBTVBST1cgKnJvd19wb2ludGVyPU5VTEwsICpvdXRidWZbTUFYX0NPTVBPTkVOVFNdOworCWludCBjd1tNQVhfQ09NUE9ORU5UU10sIGNoW01BWF9DT01QT05FTlRTXSwgaXdbTUFYX0NPTVBPTkVOVFNdLAorCQl0bXBidWZzaXplPTAsIHVzZXRtcGJ1Zj0wLCB0aFtNQVhfQ09NUE9ORU5UU107CisJSlNBTVBMRSAqX3RtcGJ1Zj1OVUxMOyAgSlNBTVBST1cgKnRtcGJ1ZltNQVhfQ09NUE9ORU5UU107CisKKwljaGVja2hhbmRsZShoKTsKKworCWZvcihpPTA7IGk8TUFYX0NPTVBPTkVOVFM7IGkrKykKKwl7CisJCXRtcGJ1ZltpXT1OVUxMOyAgb3V0YnVmW2ldPU5VTEw7CisJfQorCisJaWYoc3JjYnVmPT1OVUxMIHx8IHNpemU8PTAKKwkJfHwgZHN0YnVmPT1OVUxMIHx8IHdpZHRoPD0wIHx8IHBpdGNoPDAgfHwgaGVpZ2h0PD0wKQorCQlfdGhyb3coIkludmFsaWQgYXJndW1lbnQgaW4gdGpEZWNvbXByZXNzKCkiKTsKKwlpZihwcyE9MyAmJiBwcyE9NCAmJiBwcyE9MSkKKwkJX3Rocm93KCJUaGlzIGRlY29tcHJlc3NvciBjYW4gb25seSBoYW5kbGUgMjQtYml0IGFuZCAzMi1iaXQgUkdCIG9yIDgtYml0IGdyYXlzY2FsZSBvdXRwdXQiKTsKKwlpZighai0+aW5pdGQpIF90aHJvdygiSW5zdGFuY2UgaGFzIG5vdCBiZWVuIGluaXRpYWxpemVkIGZvciBkZWNvbXByZXNzaW9uIik7CisKKwlpZihwaXRjaD09MCkgcGl0Y2g9d2lkdGgqcHM7CisKKwlpZihmbGFncyZUSl9GT1JDRU1NWCkgcHV0ZW52KCJKU0lNRF9GT1JDRU1NWD0xIik7CisJZWxzZSBpZihmbGFncyZUSl9GT1JDRVNTRSkgcHV0ZW52KCJKU0lNRF9GT1JDRVNTRT0xIik7CisJZWxzZSBpZihmbGFncyZUSl9GT1JDRVNTRTIpIHB1dGVudigiSlNJTURfRk9SQ0VTU0UyPTEiKTsKKworCWlmKHNldGptcChqLT5qZXJyLmpiKSkKKwl7ICAvLyB0aGlzIHdpbGwgZXhlY3V0ZSBpZiBMSUJKUEVHIGhhcyBhbiBlcnJvcgorCQlyZXR2YWw9LTE7CisJCWdvdG8gYmFpbG91dDsKKwl9CisKKwlqLT5qc21zLmJ5dGVzX2luX2J1ZmZlciA9IHNpemU7CisJai0+anNtcy5uZXh0X2lucHV0X2J5dGUgPSBzcmNidWY7CisKKwlqcGVnX3JlYWRfaGVhZGVyKCZqLT5kaW5mbywgVFJVRSk7CisKKwlpZihmbGFncyZUSl9ZVVYpCisJeworCQlqX2RlY29tcHJlc3NfcHRyIGRpbmZvPSZqLT5kaW5mbzsKKwkJSlNBTVBMRSAqcHRyPWRzdGJ1ZjsKKworCQlmb3IoaT0wOyBpPGRpbmZvLT5udW1fY29tcG9uZW50czsgaSsrKQorCQl7CisJCQlqcGVnX2NvbXBvbmVudF9pbmZvICpjb21wcHRyPSZkaW5mby0+Y29tcF9pbmZvW2ldOworCQkJaW50IGloOworCQkJaXdbaV09Y29tcHB0ci0+d2lkdGhfaW5fYmxvY2tzKkRDVFNJWkU7CisJCQlpaD1jb21wcHRyLT5oZWlnaHRfaW5fYmxvY2tzKkRDVFNJWkU7CisJCQljd1tpXT1QQUQoZGluZm8tPmltYWdlX3dpZHRoLCBkaW5mby0+bWF4X2hfc2FtcF9mYWN0b3IpCisJCQkJKmNvbXBwdHItPmhfc2FtcF9mYWN0b3IvZGluZm8tPm1heF9oX3NhbXBfZmFjdG9yOworCQkJY2hbaV09UEFEKGRpbmZvLT5pbWFnZV9oZWlnaHQsIGRpbmZvLT5tYXhfdl9zYW1wX2ZhY3RvcikKKwkJCQkqY29tcHB0ci0+dl9zYW1wX2ZhY3Rvci9kaW5mby0+bWF4X3Zfc2FtcF9mYWN0b3I7CisJCQlpZihpd1tpXSE9Y3dbaV0gfHwgaWghPWNoW2ldKSB1c2V0bXBidWY9MTsKKwkJCXRoW2ldPWNvbXBwdHItPnZfc2FtcF9mYWN0b3IqRENUU0laRTsKKwkJCXRtcGJ1ZnNpemUrPWl3W2ldKnRoW2ldOworCQkJaWYoKG91dGJ1ZltpXT0oSlNBTVBST1cgKiltYWxsb2Moc2l6ZW9mKEpTQU1QUk9XKSpjaFtpXSkpPT1OVUxMKQorCQkJCV90aHJvdygiTWVtb3J5IGFsbG9jYXRpb24gZmFpbGVkIGluIHRqRGVjb21wcmVzcygpIik7CisJCQlmb3Iocm93PTA7IHJvdzxjaFtpXTsgcm93KyspCisJCQl7CisJCQkJb3V0YnVmW2ldW3Jvd109cHRyOworCQkJCXB0cis9UEFEKGN3W2ldLCA0KTsKKwkJCX0KKwkJfQorCQlpZih1c2V0bXBidWYpCisJCXsKKwkJCWlmKChfdG1wYnVmPShKU0FNUExFICopbWFsbG9jKHNpemVvZihKU0FNUExFKSp0bXBidWZzaXplKSk9PU5VTEwpCisJCQkJX3Rocm93KCJNZW1vcnkgYWxsb2NhdGlvbiBmYWlsZWQgaW4gdGpEZWNvbXByZXNzKCkiKTsKKwkJCXB0cj1fdG1wYnVmOworCQkJZm9yKGk9MDsgaTxkaW5mby0+bnVtX2NvbXBvbmVudHM7IGkrKykKKwkJCXsKKwkJCQlpZigodG1wYnVmW2ldPShKU0FNUFJPVyAqKW1hbGxvYyhzaXplb2YoSlNBTVBST1cpKnRoW2ldKSk9PU5VTEwpCisJCQkJCV90aHJvdygiTWVtb3J5IGFsbG9jYXRpb24gZmFpbGVkIGluIHRqRGVjb21wcmVzcygpIik7CisJCQkJZm9yKHJvdz0wOyByb3c8dGhbaV07IHJvdysrKQorCQkJCXsKKwkJCQkJdG1wYnVmW2ldW3Jvd109cHRyOworCQkJCQlwdHIrPWl3W2ldOworCQkJCX0KKwkJCX0KKwkJfQorCX0KKwllbHNlCisJeworCQlpZigocm93X3BvaW50ZXI9KEpTQU1QUk9XICopbWFsbG9jKHNpemVvZihKU0FNUFJPVykqaGVpZ2h0KSk9PU5VTEwpCisJCQlfdGhyb3coIk1lbW9yeSBhbGxvY2F0aW9uIGZhaWxlZCBpbiB0akRlY29tcHJlc3MoKSIpOworCQlmb3IoaT0wOyBpPGhlaWdodDsgaSsrKQorCQl7CisJCQlpZihmbGFncyZUSl9CT1RUT01VUCkgcm93X3BvaW50ZXJbaV09ICZkc3RidWZbKGhlaWdodC1pLTEpKnBpdGNoXTsKKwkJCWVsc2Ugcm93X3BvaW50ZXJbaV09ICZkc3RidWZbaSpwaXRjaF07CisJCX0KKwl9CisKKwlpZihwcz09MSkgai0+ZGluZm8ub3V0X2NvbG9yX3NwYWNlID0gSkNTX0dSQVlTQ0FMRTsKKwkjaWYgSkNTX0VYVEVOU0lPTlM9PTEKKwllbHNlIGotPmRpbmZvLm91dF9jb2xvcl9zcGFjZSA9IEpDU19FWFRfUkdCOworCWlmKHBzPT0zICYmIChmbGFncyZUSl9CR1IpKQorCQlqLT5kaW5mby5vdXRfY29sb3Jfc3BhY2UgPSBKQ1NfRVhUX0JHUjsKKwllbHNlIGlmKHBzPT00ICYmICEoZmxhZ3MmVEpfQkdSKSAmJiAhKGZsYWdzJlRKX0FMUEhBRklSU1QpKQorCQlqLT5kaW5mby5vdXRfY29sb3Jfc3BhY2UgPSBKQ1NfRVhUX1JHQlg7CisJZWxzZSBpZihwcz09NCAmJiAoZmxhZ3MmVEpfQkdSKSAmJiAhKGZsYWdzJlRKX0FMUEhBRklSU1QpKQorCQlqLT5kaW5mby5vdXRfY29sb3Jfc3BhY2UgPSBKQ1NfRVhUX0JHUlg7CisJZWxzZSBpZihwcz09NCAmJiAoZmxhZ3MmVEpfQkdSKSAmJiAoZmxhZ3MmVEpfQUxQSEFGSVJTVCkpCisJCWotPmRpbmZvLm91dF9jb2xvcl9zcGFjZSA9IEpDU19FWFRfWEJHUjsKKwllbHNlIGlmKHBzPT00ICYmICEoZmxhZ3MmVEpfQkdSKSAmJiAoZmxhZ3MmVEpfQUxQSEFGSVJTVCkpCisJCWotPmRpbmZvLm91dF9jb2xvcl9zcGFjZSA9IEpDU19FWFRfWFJHQjsKKwkjZWxzZQorCSNlcnJvciAiVHVyYm9KUEVHIHJlcXVpcmVzIEpQRUcgY29sb3JzcGFjZSBleHRlbnNpb25zIgorCSNlbmRpZgorCisJaWYoZmxhZ3MmVEpfRkFTVFVQU0FNUExFKSBqLT5kaW5mby5kb19mYW5jeV91cHNhbXBsaW5nPUZBTFNFOworCWlmKGZsYWdzJlRKX1lVVikgai0+ZGluZm8ucmF3X2RhdGFfb3V0PVRSVUU7CisKKwlqcGVnX3N0YXJ0X2RlY29tcHJlc3MoJmotPmRpbmZvKTsKKwlpZihmbGFncyZUSl9ZVVYpCisJeworCQlqX2RlY29tcHJlc3NfcHRyIGRpbmZvPSZqLT5kaW5mbzsKKwkJZm9yKHJvdz0wOyByb3c8ZGluZm8tPm91dHB1dF9oZWlnaHQ7CisJCQlyb3crPWRpbmZvLT5tYXhfdl9zYW1wX2ZhY3RvcipEQ1RTSVpFKQorCQl7CisJCQlKU0FNUEFSUkFZIHl1dnB0cltNQVhfQ09NUE9ORU5UU107CisJCQlpbnQgY3Jvd1tNQVhfQ09NUE9ORU5UU107CisJCQlmb3IoaT0wOyBpPGRpbmZvLT5udW1fY29tcG9uZW50czsgaSsrKQorCQkJeworCQkJCWpwZWdfY29tcG9uZW50X2luZm8gKmNvbXBwdHI9JmRpbmZvLT5jb21wX2luZm9baV07CisJCQkJY3Jvd1tpXT1yb3cqY29tcHB0ci0+dl9zYW1wX2ZhY3Rvci9kaW5mby0+bWF4X3Zfc2FtcF9mYWN0b3I7CisJCQkJaWYodXNldG1wYnVmKSB5dXZwdHJbaV09dG1wYnVmW2ldOworCQkJCWVsc2UgeXV2cHRyW2ldPSZvdXRidWZbaV1bY3Jvd1tpXV07CisJCQl9CisJCQlqcGVnX3JlYWRfcmF3X2RhdGEoZGluZm8sIHl1dnB0ciwgZGluZm8tPm1heF92X3NhbXBfZmFjdG9yKkRDVFNJWkUpOworCQkJaWYodXNldG1wYnVmKQorCQkJeworCQkJCWludCBqOworCQkJCWZvcihpPTA7IGk8ZGluZm8tPm51bV9jb21wb25lbnRzOyBpKyspCisJCQkJeworCQkJCQlmb3Ioaj0wOyBqPG1pbih0aFtpXSwgY2hbaV0tY3Jvd1tpXSk7IGorKykKKwkJCQkJeworCQkJCQkJbWVtY3B5KG91dGJ1ZltpXVtjcm93W2ldK2pdLCB0bXBidWZbaV1bal0sIGN3W2ldKTsKKwkJCQkJfQorCQkJCX0KKwkJCX0KKwkJfQorCX0KKwllbHNlCisJeworCQl3aGlsZShqLT5kaW5mby5vdXRwdXRfc2NhbmxpbmU8ai0+ZGluZm8ub3V0cHV0X2hlaWdodCkKKwkJeworCQkJanBlZ19yZWFkX3NjYW5saW5lcygmai0+ZGluZm8sICZyb3dfcG9pbnRlcltqLT5kaW5mby5vdXRwdXRfc2NhbmxpbmVdLAorCQkJCWotPmRpbmZvLm91dHB1dF9oZWlnaHQtai0+ZGluZm8ub3V0cHV0X3NjYW5saW5lKTsKKwkJfQorCX0KKwlqcGVnX2ZpbmlzaF9kZWNvbXByZXNzKCZqLT5kaW5mbyk7CisKKwliYWlsb3V0OgorCWlmKGotPmRpbmZvLmdsb2JhbF9zdGF0ZT5EU1RBVEVfU1RBUlQpIGpwZWdfYWJvcnRfZGVjb21wcmVzcygmai0+ZGluZm8pOworCWZvcihpPTA7IGk8TUFYX0NPTVBPTkVOVFM7IGkrKykKKwl7CisJCWlmKHRtcGJ1ZltpXSkgZnJlZSh0bXBidWZbaV0pOworCQlpZihvdXRidWZbaV0pIGZyZWUob3V0YnVmW2ldKTsKKwl9CisJaWYoX3RtcGJ1ZikgZnJlZShfdG1wYnVmKTsKKwlpZihyb3dfcG9pbnRlcikgZnJlZShyb3dfcG9pbnRlcik7CisJcmV0dXJuIHJldHZhbDsKK30KKworCitETExFWFBPUlQgaW50IERMTENBTEwgdGpEZWNvbXByZXNzVG9ZVVYodGpoYW5kbGUgaCwKKwl1bnNpZ25lZCBjaGFyICpzcmNidWYsIHVuc2lnbmVkIGxvbmcgc2l6ZSwKKwl1bnNpZ25lZCBjaGFyICpkc3RidWYsIGludCBmbGFncykKK3sKKwlyZXR1cm4gdGpEZWNvbXByZXNzKGgsIHNyY2J1Ziwgc2l6ZSwgZHN0YnVmLCAxLCAwLCAxLCAzLCBmbGFnc3xUSl9ZVVYpOworfQorCisKKy8vIEdlbmVyYWwKKworRExMRVhQT1JUIGNoYXIqIERMTENBTEwgdGpHZXRFcnJvclN0cih2b2lkKQoreworCXJldHVybiBsYXN0ZXJyb3I7Cit9CisKK0RMTEVYUE9SVCBpbnQgRExMQ0FMTCB0akRlc3Ryb3kodGpoYW5kbGUgaCkKK3sKKwljaGVja2hhbmRsZShoKTsKKwlpZihzZXRqbXAoai0+amVyci5qYikpIHJldHVybiAtMTsKKwlpZihqLT5pbml0YykganBlZ19kZXN0cm95X2NvbXByZXNzKCZqLT5jaW5mbyk7CisJaWYoai0+aW5pdGQpIGpwZWdfZGVzdHJveV9kZWNvbXByZXNzKCZqLT5kaW5mbyk7CisJZnJlZShqKTsKKwlyZXR1cm4gMDsKK30KZGlmZiAtLWdpdCBhL3VzYWdlLnR4dCBiL3VzYWdlLnR4dAppbmRleCBlYWU1ODQyLi43YWY3NWE4IDEwMDY0NAotLS0gYS91c2FnZS50eHQKKysrIGIvdXNhZ2UudHh0CkBAIC04NiwxMSArODYsNiBAQAogCiAJLXByb2dyZXNzaXZlCUNyZWF0ZSBwcm9ncmVzc2l2ZSBKUEVHIGZpbGUgKHNlZSBiZWxvdykuCiAKLQktc2NhbGUgTS9OCVNjYWxlIHRoZSBvdXRwdXQgaW1hZ2UgYnkgYSBmYWN0b3IgTS9OLiAgQ3VycmVudGx5Ci0JCQlzdXBwb3J0ZWQgc2NhbGUgZmFjdG9ycyBhcmUgTS9OIHdpdGggYWxsIE4gZnJvbSAxIHRvCi0JCQkxNiwgd2hlcmUgTSBpcyB0aGUgZGVzdGluYXRpb24gRENUIHNpemUsIHdoaWNoIGlzIDggYnkKLQkJCWRlZmF1bHQgKHNlZSAtYmxvY2sgTiBzd2l0Y2ggYmVsb3cpLgotCiAJLXRhcmdhCQlJbnB1dCBmaWxlIGlzIFRhcmdhIGZvcm1hdC4gIFRhcmdhIGZpbGVzIHRoYXQgY29udGFpbgogCQkJYW4gImlkZW50aWZpY2F0aW9uIiBmaWVsZCB3aWxsIG5vdCBiZSBhdXRvbWF0aWNhbGx5CiAJCQlyZWNvZ25pemVkIGJ5IGNqcGVnOyBmb3Igc3VjaCBmaWxlcyB5b3UgbXVzdCBzcGVjaWZ5CkBAIC0xMjMsMjMgKzExOCwzNCBAQAogb3RoZXIgSlBFRyBwcm9ncmFtcyBtYXkgYmUgdW5hYmxlIHRvIGRlY29kZSB0aGUgcmVzdWx0aW5nIGZpbGUuICBVc2UgLWJhc2VsaW5lCiBpZiB5b3UgbmVlZCB0byBlbnN1cmUgY29tcGF0aWJpbGl0eSBhdCBsb3cgcXVhbGl0eSB2YWx1ZXMuKQogCi1UaGUgLXF1YWxpdHkgb3B0aW9uIGhhcyBiZWVuIGV4dGVuZGVkIGluIElKRyB2ZXJzaW9uIDcgZm9yIHN1cHBvcnQgb2Ygc2VwYXJhdGUKLXF1YWxpdHkgc2V0dGluZ3MgZm9yIGx1bWluYW5jZSBhbmQgY2hyb21pbmFuY2UgKG9yIGluIGdlbmVyYWwsIGZvciBldmVyeQotcHJvdmlkZWQgcXVhbnRpemF0aW9uIHRhYmxlIHNsb3QpLiAgVGhpcyBmZWF0dXJlIGlzIHVzZWZ1bCBmb3IgaGlnaC1xdWFsaXR5Ci1hcHBsaWNhdGlvbnMgd2hpY2ggY2Fubm90IGFjY2VwdCB0aGUgZGFtYWdlIG9mIGNvbG9yIGRhdGEgYnkgY29hcnNlCi1zdWJzYW1wbGluZyBzZXR0aW5ncy4gIFlvdSBjYW4gbm93IGVhc2lseSByZWR1Y2UgdGhlIGNvbG9yIGRhdGEgYW1vdW50IG1vcmUKLXNtb290aGx5IHdpdGggZmluZXIgY29udHJvbCB3aXRob3V0IHNlcGFyYXRlIHN1YnNhbXBsaW5nLiAgVGhlIHJlc3VsdGluZyBmaWxlCi1pcyBmdWxseSBjb21wbGlhbnQgd2l0aCBzdGFuZGFyZCBKUEVHIGRlY29kZXJzLgotTm90ZSB0aGF0IHRoZSAtcXVhbGl0eSByYXRpbmdzIHJlZmVyIHRvIHRoZSBxdWFudGl6YXRpb24gdGFibGUgc2xvdHMsIGFuZCB0aGF0Ci10aGUgbGFzdCB2YWx1ZSBpcyByZXBsaWNhdGVkIGlmIHRoZXJlIGFyZSBtb3JlIHEtdGFibGUgc2xvdHMgdGhhbiBwYXJhbWV0ZXJzLgotVGhlIGRlZmF1bHQgcS10YWJsZSBzbG90cyBhcmUgMCBmb3IgbHVtaW5hbmNlIGFuZCAxIGZvciBjaHJvbWluYW5jZSB3aXRoCi1kZWZhdWx0IHRhYmxlcyBhcyBnaXZlbiBpbiB0aGUgSlBFRyBzdGFuZGFyZC4gIFRoaXMgaXMgY29tcGF0aWJsZSB3aXRoIHRoZSBvbGQKLWJlaGF2aW91ciBpbiBjYXNlIHRoYXQgb25seSBvbmUgcGFyYW1ldGVyIGlzIGdpdmVuLCB3aGljaCBpcyB0aGVuIHVzZWQgZm9yCi1ib3RoIGx1bWluYW5jZSBhbmQgY2hyb21pbmFuY2UgKHNsb3RzIDAgYW5kIDEpLiAgTW9yZSBvciBjdXN0b20gcXVhbnRpemF0aW9uCi10YWJsZXMgY2FuIGJlIHNldCB3aXRoIC1xdGFibGVzIGFuZCBhc3NpZ25lZCB0byBjb21wb25lbnRzIHdpdGggLXFzbG90cwotcGFyYW1ldGVyIChzZWUgdGhlICJ3aXphcmQiIHN3aXRjaGVzIGJlbG93KS4KLUNBVVRJT046IFlvdSBtdXN0IGV4cGxpY2l0bHkgYWRkIC1zYW1wbGUgMXgxIGZvciBlZmZpY2llbnQgc2VwYXJhdGUgY29sb3IKLXF1YWxpdHkgc2VsZWN0aW9uLCBzaW5jZSB0aGUgZGVmYXVsdCB2YWx1ZSB1c2VkIGJ5IGxpYnJhcnkgaXMgMngyIQorVGhlIC1xdWFsaXR5IG9wdGlvbiBoYXMgYmVlbiBleHRlbmRlZCBpbiB0aGlzIHZlcnNpb24gb2YgY2pwZWcgdG8gc3VwcG9ydAorc2VwYXJhdGUgcXVhbGl0eSBzZXR0aW5ncyBmb3IgbHVtaW5hbmNlIGFuZCBjaHJvbWluYW5jZSAob3IsIGluIGdlbmVyYWwsCitzZXBhcmF0ZSBzZXR0aW5ncyBmb3IgZXZlcnkgcXVhbnRpemF0aW9uIHRhYmxlIHNsb3QuKSAgVGhlIHByaW5jaXBsZSBpcyB0aGUKK3NhbWUgYXMgY2hyb21pbmFuY2Ugc3Vic2FtcGxpbmc6ICBzaW5jZSB0aGUgaHVtYW4gZXllIGlzIG1vcmUgc2Vuc2l0aXZlIHRvCitzcGF0aWFsIGNoYW5nZXMgaW4gYnJpZ2h0bmVzcyB0aGFuIHNwYXRpYWwgY2hhbmdlcyBpbiBjb2xvciwgdGhlIGNocm9taW5hbmNlCitjb21wb25lbnRzIGNhbiBiZSBxdWFudGl6ZWQgbW9yZSB0aGFuIHRoZSBsdW1pbmFuY2UgY29tcG9uZW50cyB3aXRob3V0CitpbmN1cnJpbmcgYW55IHZpc2libGUgaW1hZ2UgcXVhbGl0eSBsb3NzLiAgSG93ZXZlciwgdW5saWtlIHN1YnNhbXBsaW5nLCB0aGlzCitmZWF0dXJlIHJlZHVjZXMgZGF0YSBpbiB0aGUgZnJlcXVlbmN5IGRvbWFpbiBpbnN0ZWFkIG9mIHRoZSBzcGF0aWFsIGRvbWFpbiwKK3doaWNoIGFsbG93cyBmb3IgbW9yZSBmaW5lLWdyYWluZWQgY29udHJvbC4gIFRoaXMgb3B0aW9uIGlzIHVzZWZ1bCBpbgorcXVhbGl0eS1zZW5zaXRpdmUgYXBwbGljYXRpb25zLCBmb3Igd2hpY2ggdGhlIGFydGlmYWN0cyBnZW5lcmF0ZWQgYnkKK3N1YnNhbXBsaW5nIG1heSBiZSB1bmFjY2VwdGFibGUuCisKK1RoZSAtcXVhbGl0eSBvcHRpb24gYWNjZXB0cyBhIGNvbW1hLXNlcGFyYXRlZCBsaXN0IG9mIHBhcmFtZXRlcnMsIHdoaWNoCityZXNwZWN0aXZlbHkgcmVmZXIgdG8gdGhlIHF1YWxpdHkgbGV2ZWxzIHdoaWNoIHNob3VsZCBiZSBhc3NpZ25lZCB0byB0aGUKK3F1YW50aXphdGlvbiB0YWJsZSBzbG90cy4gIElmIHRoZXJlIGFyZSBtb3JlIHEtdGFibGUgc2xvdHMgdGhhbiBwYXJhbWV0ZXJzLAordGhlbiB0aGUgbGFzdCBwYXJhbWV0ZXIgaXMgcmVwbGljYXRlZC4gIFRodXMsIGlmIG9ubHkgb25lIHF1YWxpdHkgcGFyYW1ldGVyIGlzCitnaXZlbiwgdGhpcyBpcyB1c2VkIGZvciBib3RoIGx1bWluYW5jZSBhbmQgY2hyb21pbmFuY2UgKHNsb3RzIDAgYW5kIDEsCityZXNwZWN0aXZlbHkpLCBwcmVzZXJ2aW5nIHRoZSBsZWdhY3kgYmVoYXZpb3Igb2YgY2pwZWcgdjZiIGFuZCBwcmlvci4gIE1vcmUgKG9yCitjdXN0b21pemVkKSBxdWFudGl6YXRpb24gdGFibGVzIGNhbiBiZSBzZXQgd2l0aCB0aGUgLXF0YWJsZXMgb3B0aW9uIGFuZAorYXNzaWduZWQgdG8gY29tcG9uZW50cyB3aXRoIHRoZSAtcXNsb3RzIG9wdGlvbiAoc2VlIHRoZSAid2l6YXJkIiBzd2l0Y2hlcworYmVsb3cuKQorCitKUEVHICBmaWxlcyAgZ2VuZXJhdGVkICB3aXRoIHNlcGFyYXRlIGx1bWluYW5jZSBhbmQgY2hyb21pbmFuY2UgcXVhbGl0eSBhcmUKK2Z1bGx5IGNvbXBsaWFudCB3aXRoIHN0YW5kYXJkIEpQRUcgZGVjb2RlcnMuCisKK0NBVVRJT046IEZvciB0aGlzIHNldHRpbmcgdG8gYmUgdXNlZnVsLCBiZSBzdXJlIHRvIHBhc3MgYW4gYXJndW1lbnQgb2YKKy1zYW1wbGUgMXgxIHRvIGNqcGVnIHRvIGRpc2FibGUgY2hyb21pbmFuY2Ugc3Vic2FtcGxpbmcuICBPdGhlcndpc2UsIHRoZQorZGVmYXVsdCBzdWJzYW1wbGluZyBsZXZlbCAoMngyLCBBS0EgIjQ6MjowIikgd2lsbCBiZSB1c2VkLgogCiBUaGUgLXByb2dyZXNzaXZlIHN3aXRjaCBjcmVhdGVzIGEgInByb2dyZXNzaXZlIEpQRUciIGZpbGUuICBJbiB0aGlzIHR5cGUgb2YKIEpQRUcgZmlsZSwgdGhlIGRhdGEgaXMgc3RvcmVkIGluIG11bHRpcGxlIHNjYW5zIG9mIGluY3JlYXNpbmcgcXVhbGl0eS4gIElmIHRoZQpAQCAtMTUxLDE5ICsxNTcsNiBAQAogCiBTd2l0Y2hlcyBmb3IgYWR2YW5jZWQgdXNlcnM6CiAKLQktYmxvY2sgTglTZXQgRENUIGJsb2NrIHNpemUuICBBbGwgTiBmcm9tIDEgdG8gMTYgYXJlIHBvc3NpYmxlLgotCQkJRGVmYXVsdCBpcyA4IChiYXNlbGluZSBmb3JtYXQpLgotCQkJTGFyZ2VyIHZhbHVlcyBwcm9kdWNlIGhpZ2hlciBjb21wcmVzc2lvbiwKLQkJCXNtYWxsZXIgdmFsdWVzIHByb2R1Y2UgaGlnaGVyIHF1YWxpdHkKLQkJCShleGFjdCBEQ1Qgc3RhZ2UgcG9zc2libGUgd2l0aCAxIG9yIDI7IHdpdGggdGhlCi0JCQlkZWZhdWx0IHF1YWxpdHkgb2YgNzUgYW5kIGRlZmF1bHQgTHVtaW5hbmNlIHF0YWJsZQotCQkJdGhlIERDVCtRdWFudGl6YXRpb24gc3RhZ2UgaXMgbG9zc2xlc3MgZm9yIE49MSkuCi0JCQlDQVVUSU9OOiBBbiBpbXBsZW1lbnRhdGlvbiBvZiB0aGUgSlBFRyBTbWFydFNjYWxlCi0JCQlleHRlbnNpb24gaXMgcmVxdWlyZWQgZm9yIHRoaXMgZmVhdHVyZS4gIFNtYXJ0U2NhbGUKLQkJCWVuYWJsZWQgSlBFRyBpcyBub3QgeWV0IHdpZGVseSBpbXBsZW1lbnRlZCwgc28gbWFueQotCQkJZGVjb2RlcnMgd2lsbCBiZSB1bmFibGUgdG8gdmlldyBhIFNtYXJ0U2NhbGUgZXh0ZW5kZWQKLQkJCUpQRUcgZmlsZSBhdCBhbGwuCi0KIAktZGN0IGludAlVc2UgaW50ZWdlciBEQ1QgbWV0aG9kIChkZWZhdWx0KS4KIAktZGN0IGZhc3QJVXNlIGZhc3QgaW50ZWdlciBEQ1QgKGxlc3MgYWNjdXJhdGUpLgogCS1kY3QgZmxvYXQJVXNlIGZsb2F0aW5nLXBvaW50IERDVCBtZXRob2QuCkBAIC0xNzUsOCArMTY4LDYgQEAKIAkJCXRoZSBzYW1lIHJlc3VsdHMgZXZlcnl3aGVyZS4gIFRoZSBmYXN0IGludGVnZXIgbWV0aG9kCiAJCQlpcyBtdWNoIGxlc3MgYWNjdXJhdGUgdGhhbiB0aGUgb3RoZXIgdHdvLgogCi0JLW5vc21vb3RoCURvbid0IHVzZSBoaWdoLXF1YWxpdHkgZG93bnNhbXBsaW5nLgotCiAJLXJlc3RhcnQgTglFbWl0IGEgSlBFRyByZXN0YXJ0IG1hcmtlciBldmVyeSBOIE1DVSByb3dzLCBvciBldmVyeQogCQkJTiBNQ1UgYmxvY2tzIGlmICJCIiBpcyBhdHRhY2hlZCB0byB0aGUgbnVtYmVyLgogCQkJLXJlc3RhcnQgMCAodGhlIGRlZmF1bHQpIG1lYW5zIG5vIHJlc3RhcnQgbWFya2Vycy4KQEAgLTI1OSwxNSArMjUwLDEwIEBACiAJCQlkanBlZyBydW5zIG5vdGljZWFibHkgZmFzdGVyIGluIHRoaXMgbW9kZS4KIAogCS1zY2FsZSBNL04JU2NhbGUgdGhlIG91dHB1dCBpbWFnZSBieSBhIGZhY3RvciBNL04uICBDdXJyZW50bHkKLQkJCXN1cHBvcnRlZCBzY2FsZSBmYWN0b3JzIGFyZSBNL04gd2l0aCBhbGwgTSBmcm9tIDEgdG8KLQkJCTE2LCB3aGVyZSBOIGlzIHRoZSBzb3VyY2UgRENUIHNpemUsIHdoaWNoIGlzIDggZm9yCi0JCQliYXNlbGluZSBKUEVHLiAgSWYgdGhlIC9OIHBhcnQgaXMgb21pdHRlZCwgdGhlbiBNCi0JCQlzcGVjaWZpZXMgdGhlIERDVCBzY2FsZWQgc2l6ZSB0byBiZSBhcHBsaWVkIG9uIHRoZQotCQkJZ2l2ZW4gaW5wdXQuICBGb3IgYmFzZWxpbmUgSlBFRyB0aGlzIGlzIGVxdWl2YWxlbnQgdG8KLQkJCU0vOCBzY2FsaW5nLCBzaW5jZSB0aGUgc291cmNlIERDVCBzaXplIGZvciBiYXNlbGluZQotCQkJSlBFRyBpcyA4LiAgU2NhbGluZyBpcyBoYW5keSBpZiB0aGUgaW1hZ2UgaXMgbGFyZ2VyCi0JCQl0aGFuIHlvdXIgc2NyZWVuOyBhbHNvLCBkanBlZyBydW5zIG11Y2ggZmFzdGVyIHdoZW4KLQkJCXNjYWxpbmcgZG93biB0aGUgb3V0cHV0LgorCQkJdGhlIHNjYWxlIGZhY3RvciBtdXN0IGJlIDEvMSwgMS8yLCAxLzQsIG9yIDEvOC4KKwkJCVNjYWxpbmcgaXMgaGFuZHkgaWYgdGhlIGltYWdlIGlzIGxhcmdlciB0aGFuIHlvdXIKKwkJCXNjcmVlbjsgYWxzbywgZGpwZWcgcnVucyBtdWNoIGZhc3RlciB3aGVuIHNjYWxpbmcKKwkJCWRvd24gdGhlIG91dHB1dC4KIAogCS1ibXAJCVNlbGVjdCBCTVAgb3V0cHV0IGZvcm1hdCAoV2luZG93cyBmbGF2b3IpLiAgOC1iaXQKIAkJCWNvbG9ybWFwcGVkIGZvcm1hdCBpcyBlbWl0dGVkIGlmIC1jb2xvcnMgb3IgLWdyYXlzY2FsZQpAQCAtMzI4LDcgKzMxNCw3IEBACiAJCQlvciBQUE0gZmlsZS4gIFRoaXMgb3B0aW9uIG92ZXJyaWRlcyAtY29sb3JzIGFuZAogCQkJLW9uZXBhc3MuCiAKLQktbm9zbW9vdGgJRG9uJ3QgdXNlIGhpZ2gtcXVhbGl0eSB1cHNhbXBsaW5nLgorCS1ub3Ntb290aAlVc2UgYSBmYXN0ZXIsIGxvd2VyLXF1YWxpdHkgdXBzYW1wbGluZyByb3V0aW5lLgogCiAJLW9uZXBhc3MJVXNlIG9uZS1wYXNzIGluc3RlYWQgb2YgdHdvLXBhc3MgY29sb3IgcXVhbnRpemF0aW9uLgogCQkJVGhlIG9uZS1wYXNzIG1ldGhvZCBpcyBmYXN0ZXIgYW5kIG5lZWRzIGxlc3MgbWVtb3J5LApAQCAtMzY4LDggKzM1NCwxMCBAQAogaXMgb2Z0ZW4gYSBsb3QgbW9yZSB0aGFuIGl0IGlzIG9uIGxhcmdlciBmaWxlcy4gIChBdCBwcmVzZW50LCAtb3B0aW1pemUKIG1vZGUgaXMgYWx3YXlzIHNlbGVjdGVkIHdoZW4gZ2VuZXJhdGluZyBwcm9ncmVzc2l2ZSBKUEVHIGZpbGVzLikKIAotR0lGIGlucHV0IGZpbGVzIGFyZSBubyBsb25nZXIgc3VwcG9ydGVkLCB0byBhdm9pZCB0aGUgVW5pc3lzIExaVyBwYXRlbnQuCi0oQ29udmVyc2lvbiBvZiBHSUYgZmlsZXMgdG8gSlBFRyBpcyB1c3VhbGx5IGEgYmFkIGlkZWEgYW55d2F5LikKK1N1cHBvcnQgZm9yIEdJRiBpbnB1dCBmaWxlcyB3YXMgcmVtb3ZlZCBpbiBjanBlZyB2NmIgZHVlIHRvIGNvbmNlcm5zIG92ZXIKK3RoZSBVbmlzeXMgTFpXIHBhdGVudC4gIEFsdGhvdWdoIHRoaXMgcGF0ZW50IGV4cGlyZWQgaW4gMjAwNiwgY2pwZWcgc3RpbGwKK2xhY2tzIEdJRiBzdXBwb3J0LCBmb3IgdGhlc2UgaGlzdG9yaWNhbCByZWFzb25zLiAgKENvbnZlcnNpb24gb2YgR0lGIGZpbGVzIHRvCitKUEVHIGlzIHVzdWFsbHkgYSBiYWQgaWRlYSBhbnl3YXkuKQogCiAKIEhJTlRTIEZPUiBESlBFRwpAQCAtNTAyLDI0ICs0OTAsMjIgQEAKICItcm90IDI3MCAtdHJpbSIgdHJpbXMgb25seSB0aGUgYm90dG9tIGVkZ2UsIGJ1dCAiLXJvdCA5MCAtdHJpbSIgZm9sbG93ZWQgYnkKICItcm90IDE4MCAtdHJpbSIgdHJpbXMgYm90aCBlZGdlcy4KIAotSWYgeW91IGFyZSBvbmx5IGludGVyZXN0ZWQgaW4gcGVyZmVjdCB0cmFuc2Zvcm1hdGlvbiwgYWRkIHRoZSAtcGVyZmVjdCBzd2l0Y2g6Ci0JLXBlcmZlY3QJRmFpbHMgd2l0aCBhbiBlcnJvciBpZiB0aGUgdHJhbnNmb3JtYXRpb24gaXMgbm90CitJZiB5b3UgYXJlIG9ubHkgaW50ZXJlc3RlZCBpbiBwZXJmZWN0IHRyYW5zZm9ybWF0aW9ucywgYWRkIHRoZSAtcGVyZmVjdCBzd2l0Y2g6CisJLXBlcmZlY3QJRmFpbCB3aXRoIGFuIGVycm9yIGlmIHRoZSB0cmFuc2Zvcm1hdGlvbiBpcyBub3QKIAkJCXBlcmZlY3QuCi1Gb3IgZXhhbXBsZSB5b3UgbWF5IHdhbnQgdG8gZG8KK0ZvciBleGFtcGxlLCB5b3UgbWF5IHdhbnQgdG8gZG8KICAganBlZ3RyYW4gLXJvdCA5MCAtcGVyZmVjdCBmb28uanBnIHx8IGRqcGVnIGZvby5qcGcgfCBwbm1mbGlwIC1yOTAgfCBjanBlZwotdG8gZG8gYSBwZXJmZWN0IHJvdGF0aW9uIGlmIGF2YWlsYWJsZSBvciBhbiBhcHByb3hpbWF0ZWQgb25lIGlmIG5vdC4KK3RvIGRvIGEgcGVyZmVjdCByb3RhdGlvbiwgaWYgYXZhaWxhYmxlLCBvciBhbiBhcHByb3hpbWF0ZWQgb25lIGlmIG5vdC4KIAotV2UgYWxzbyBvZmZlciBhIGxvc3NsZXNzLWNyb3Agb3B0aW9uLCB3aGljaCBkaXNjYXJkcyBkYXRhIG91dHNpZGUgYSBnaXZlbgotaW1hZ2UgcmVnaW9uIGJ1dCBsb3NzbGVzc2x5IHByZXNlcnZlcyB3aGF0IGlzIGluc2lkZS4gIExpa2UgdGhlIHJvdGF0ZSBhbmQKLWZsaXAgdHJhbnNmb3JtcywgbG9zc2xlc3MgY3JvcCBpcyByZXN0cmljdGVkIGJ5IHRoZSBjdXJyZW50IEpQRUcgZm9ybWF0OiB0aGUKLXVwcGVyIGxlZnQgY29ybmVyIG9mIHRoZSBzZWxlY3RlZCByZWdpb24gbXVzdCBmYWxsIG9uIGFuIGlNQ1UgYm91bmRhcnkuICBJZgotdGhpcyBkb2VzIG5vdCBob2xkIGZvciB0aGUgZ2l2ZW4gY3JvcCBwYXJhbWV0ZXJzLCB3ZSBzaWxlbnRseSBtb3ZlIHRoZSB1cHBlcgotbGVmdCBjb3JuZXIgdXAgYW5kL29yIGxlZnQgdG8gbWFrZSBpdCBzbywgc2ltdWx0YW5lb3VzbHkgaW5jcmVhc2luZyB0aGUgcmVnaW9uCi1kaW1lbnNpb25zIHRvIGtlZXAgdGhlIGxvd2VyIHJpZ2h0IGNyb3AgY29ybmVyIHVuY2hhbmdlZC4gIChUaHVzLCB0aGUgb3V0cHV0Ci1pbWFnZSBjb3ZlcnMgYXQgbGVhc3QgdGhlIHJlcXVlc3RlZCByZWdpb24sIGJ1dCBtYXkgY292ZXIgbW9yZS4pCitUaGlzIHZlcnNpb24gb2YganBlZ3RyYW4gYWxzbyBvZmZlcnMgYSBsb3NzbGVzcyBjcm9wIG9wdGlvbiwgd2hpY2ggZGlzY2FyZHMKK2RhdGEgb3V0c2lkZSBvZiBhIGdpdmVuIGltYWdlIHJlZ2lvbiBidXQgbG9zc2xlc3NseSBwcmVzZXJ2ZXMgd2hhdCBpcyBpbnNpZGUuCitMaWtlIHRoZSByb3RhdGUgYW5kIGZsaXAgdHJhbnNmb3JtcywgbG9zc2xlc3MgY3JvcCBpcyByZXN0cmljdGVkIGJ5IHRoZSBjdXJyZW50CitKUEVHIGZvcm1hdDsgdGhlIHVwcGVyIGxlZnQgY29ybmVyIG9mIHRoZSBzZWxlY3RlZCByZWdpb24gbXVzdCBmYWxsIG9uIGFuIGlNQ1UKK2JvdW5kYXJ5LiAgSWYgaXQgZG9lc24ndCwgdGhlbiBpdCBpcyBzaWxlbnRseSBtb3ZlZCB1cCBhbmQvb3IgbGVmdCB0byB0aGUKK25lYXJlc3QgaU1DVSBib3VuZGFyeSAodGhlIGxvd2VyIHJpZ2h0IGNvcm5lciBpcyB1bmNoYW5nZWQuKQogCiBUaGUgaW1hZ2UgY2FuIGJlIGxvc3NsZXNzbHkgY3JvcHBlZCBieSBnaXZpbmcgdGhlIHN3aXRjaDoKLQktY3JvcCBXeEgrWCtZCUNyb3AgdG8gYSByZWN0YW5ndWxhciBzdWJhcmVhIG9mIHdpZHRoIFcsIGhlaWdodCBICisJLWNyb3AgV3hIK1grWQlDcm9wIHRvIGEgcmVjdGFuZ3VsYXIgcmVnaW9uIG9mIHdpZHRoIFcgYW5kIGhlaWdodCBILAogCQkJc3RhcnRpbmcgYXQgcG9pbnQgWCxZLgogCiBPdGhlciBub3Qtc3RyaWN0bHktbG9zc2xlc3MgdHJhbnNmb3JtYXRpb24gc3dpdGNoZXMgYXJlOgpAQCAtNTM0LDI4ICs1MjAsMTggQEAKIG9mIHRoZSBuZWFyLWVtcHR5IGNocm9tYSBjaGFubmVscyB3b24ndCBiZSBsYXJnZTsgYnV0IHRoZSBkZWNvZGluZyB0aW1lIGZvcgogYSBncmF5c2NhbGUgSlBFRyBpcyBzdWJzdGFudGlhbGx5IGxlc3MgdGhhbiB0aGF0IGZvciBhIGNvbG9yIEpQRUcuKQogCi0JLXNjYWxlIE0vTglTY2FsZSB0aGUgb3V0cHV0IGltYWdlIGJ5IGEgZmFjdG9yIE0vTi4KLUN1cnJlbnRseSBzdXBwb3J0ZWQgc2NhbGUgZmFjdG9ycyBhcmUgTS9OIHdpdGggYWxsIE0gZnJvbSAxIHRvIDE2LCB3aGVyZSBOIGlzCi10aGUgc291cmNlIERDVCBzaXplLCB3aGljaCBpcyA4IGZvciBiYXNlbGluZSBKUEVHLiAgSWYgdGhlIC9OIHBhcnQgaXMgb21pdHRlZCwKLXRoZW4gTSBzcGVjaWZpZXMgdGhlIERDVCBzY2FsZWQgc2l6ZSB0byBiZSBhcHBsaWVkIG9uIHRoZSBnaXZlbiBpbnB1dC4gIEZvcgotYmFzZWxpbmUgSlBFRyB0aGlzIGlzIGVxdWl2YWxlbnQgdG8gTS84IHNjYWxpbmcsIHNpbmNlIHRoZSBzb3VyY2UgRENUIHNpemUKLWZvciBiYXNlbGluZSBKUEVHIGlzIDguICBDQVVUSU9OOiBBbiBpbXBsZW1lbnRhdGlvbiBvZiB0aGUgSlBFRyBTbWFydFNjYWxlCi1leHRlbnNpb24gaXMgcmVxdWlyZWQgZm9yIHRoaXMgZmVhdHVyZS4gIFNtYXJ0U2NhbGUgZW5hYmxlZCBKUEVHIGlzIG5vdCB5ZXQKLXdpZGVseSBpbXBsZW1lbnRlZCwgc28gbWFueSBkZWNvZGVycyB3aWxsIGJlIHVuYWJsZSB0byB2aWV3IGEgU21hcnRTY2FsZQotZXh0ZW5kZWQgSlBFRyBmaWxlIGF0IGFsbC4KLQoganBlZ3RyYW4gYWxzbyByZWNvZ25pemVzIHRoZXNlIHN3aXRjaGVzIHRoYXQgY29udHJvbCB3aGF0IHRvIGRvIHdpdGggImV4dHJhIgogbWFya2Vycywgc3VjaCBhcyBjb21tZW50IGJsb2NrczoKIAktY29weSBub25lCUNvcHkgbm8gZXh0cmEgbWFya2VycyBmcm9tIHNvdXJjZSBmaWxlLiAgVGhpcyBzZXR0aW5nCiAJCQlzdXBwcmVzc2VzIGFsbCBjb21tZW50cyBhbmQgb3RoZXIgZXhjZXNzIGJhZ2dhZ2UKIAkJCXByZXNlbnQgaW4gdGhlIHNvdXJjZSBmaWxlLgogCS1jb3B5IGNvbW1lbnRzCUNvcHkgb25seSBjb21tZW50IG1hcmtlcnMuICBUaGlzIHNldHRpbmcgY29waWVzCi0JCQljb21tZW50cyBmcm9tIHRoZSBzb3VyY2UgZmlsZSwgYnV0IGRpc2NhcmRzCi0JCQlhbnkgb3RoZXIgaW5lc3NlbnRpYWwgKGZvciBpbWFnZSBkaXNwbGF5KSBkYXRhLgorCQkJY29tbWVudHMgZnJvbSB0aGUgc291cmNlIGZpbGUgYnV0IGRpc2NhcmRzCisJCQlhbnkgb3RoZXIgZGF0YSB3aGljaCBpcyBpbmVzc2VudGlhbCBmb3IgaW1hZ2UgZGlzcGxheS4KIAktY29weSBhbGwJQ29weSBhbGwgZXh0cmEgbWFya2Vycy4gIFRoaXMgc2V0dGluZyBwcmVzZXJ2ZXMKIAkJCW1pc2NlbGxhbmVvdXMgbWFya2VycyBmb3VuZCBpbiB0aGUgc291cmNlIGZpbGUsIHN1Y2gKIAkJCWFzIEpGSUYgdGh1bWJuYWlscywgRXhpZiBkYXRhLCBhbmQgUGhvdG9zaG9wIHNldHRpbmdzLgotCQkJSW4gc29tZSBmaWxlcyB0aGVzZSBleHRyYSBtYXJrZXJzIGNhbiBiZSBzaXphYmxlLgorCQkJSW4gc29tZSBmaWxlcywgdGhlc2UgZXh0cmEgbWFya2VycyBjYW4gYmUgc2l6YWJsZS4KIFRoZSBkZWZhdWx0IGJlaGF2aW9yIGlzIC1jb3B5IGNvbW1lbnRzLiAgKE5vdGU6IGluIElKRyByZWxlYXNlcyB2NiBhbmQgdjZhLAoganBlZ3RyYW4gYWx3YXlzIGRpZCB0aGUgZXF1aXZhbGVudCBvZiAtY29weSBub25lLikKIApAQCAtNTgzLDggKzU1OSw5IEBACiByZGpwZ2NvbSBzZWFyY2hlcyBhIEpQRUcgZmlsZSBhbmQgcHJpbnRzIHRoZSBjb250ZW50cyBvZiBhbnkgQ09NIGJsb2NrcyBvbgogc3RhbmRhcmQgb3V0cHV0LiAgVGhlIGNvbW1hbmQgbGluZSBzeW50YXggaXMKIAlyZGpwZ2NvbSBbLXJhd10gWy12ZXJib3NlXSBbaW5wdXRmaWxlbmFtZV0KLVRoZSBzd2l0Y2ggIi1yYXciIChvciBqdXN0ICItciIpIGNhdXNlcyByZGpwZ2NvbSB0byBhbHNvIG91dHB1dCBub24tcHJpbnRhYmxlCi1jaGFyYWN0ZXJzIGluIGNvbW1lbnRzLCB3aGljaCBhcmUgbm9ybWFsbHkgZXNjYXBlZCBmb3Igc2VjdXJpdHkgcmVhc29ucy4KK1RoZSBzd2l0Y2ggIi1yYXciIChvciBqdXN0ICItciIpIGNhdXNlcyByZGpwZ2NvbSB0byBvdXRwdXQgbm9uLXByaW50YWJsZQorY2hhcmFjdGVycyBpbiBKUEVHIGNvbW1lbnRzLiAgVGhlc2UgY2hhcmFjdGVycyBhcmUgbm9ybWFsbHkgZXNjYXBlZCBmb3IKK3NlY3VyaXR5IHJlYXNvbnMuCiBUaGUgc3dpdGNoICItdmVyYm9zZSIgKG9yIGp1c3QgIi12IikgY2F1c2VzIHJkanBnY29tIHRvIGFsc28gZGlzcGxheSB0aGUgSlBFRwogaW1hZ2UgZGltZW5zaW9ucy4gIElmIHlvdSBvbWl0IHRoZSBpbnB1dCBmaWxlIG5hbWUgZnJvbSB0aGUgY29tbWFuZCBsaW5lLAogdGhlIEpQRUcgZmlsZSBpcyByZWFkIGZyb20gc3RhbmRhcmQgaW5wdXQuICAoVGhpcyBtYXkgbm90IHdvcmsgb24gc29tZQpkaWZmIC0tZ2l0IGEvd2luL2NvbmZpZy5oLmluIGIvd2luL2NvbmZpZy5oLmluCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjExMGFmM2MKLS0tIC9kZXYvbnVsbAorKysgYi93aW4vY29uZmlnLmguaW4KQEAgLTAsMCArMSwzIEBACisjZGVmaW5lIFZFUlNJT04gIkBWRVJTSU9OQCINCisjZGVmaW5lIEJVSUxEICJAQlVJTERAIg0KKyNkZWZpbmUgUEFDS0FHRV9OQU1FICJAQ01BS0VfUFJPSkVDVF9OQU1FQCINCmRpZmYgLS1naXQgYS9qY29uZmlnLnZjIGIvd2luL2pjb25maWcuaC5pbgpzaW1pbGFyaXR5IGluZGV4IDYwJQpyZW5hbWUgZnJvbSBqY29uZmlnLnZjCnJlbmFtZSB0byB3aW4vamNvbmZpZy5oLmluCmluZGV4IDY3OTQwNGQuLjY0MTNmMDggMTAwNjQ0Ci0tLSBhL2pjb25maWcudmMKKysrIGIvd2luL2pjb25maWcuaC5pbgpAQCAtMSw2ICsxLDEwIEBACiAvKiBqY29uZmlnLnZjIC0tLSBqY29uZmlnLmggZm9yIE1pY3Jvc29mdCBWaXN1YWwgQysrIG9uIFdpbmRvd3MgOTUgb3IgTlQuICovCiAvKiBzZWUgamNvbmZpZy50eHQgZm9yIGV4cGxhbmF0aW9ucyAqLwogCisjZGVmaW5lIEpQRUdfTElCX1ZFUlNJT04gQEpQRUdfTElCX1ZFUlNJT05ACisjY21ha2VkZWZpbmUgQ19BUklUSF9DT0RJTkdfU1VQUE9SVEVECisjY21ha2VkZWZpbmUgRF9BUklUSF9DT0RJTkdfU1VQUE9SVEVECisKICNkZWZpbmUgSEFWRV9QUk9UT1RZUEVTCiAjZGVmaW5lIEhBVkVfVU5TSUdORURfQ0hBUgogI2RlZmluZSBIQVZFX1VOU0lHTkVEX1NIT1JUCkBAIC0yMSwyNSArMjUsMTAgQEAKICNlbmRpZgogI2RlZmluZSBIQVZFX0JPT0xFQU4JCS8qIHByZXZlbnQgam1vcmVjZmcuaCBmcm9tIHJlZGVmaW5pbmcgaXQgKi8KIAorI2RlZmluZSBpbmxpbmUgX19pbmxpbmUKIAogI2lmZGVmIEpQRUdfSU5URVJOQUxTCiAKICN1bmRlZiBSSUdIVF9TSElGVF9JU19VTlNJR05FRAogCiAjZW5kaWYgLyogSlBFR19JTlRFUk5BTFMgKi8KLQotI2lmZGVmIEpQRUdfQ0pQRUdfREpQRUcKLQotI2RlZmluZSBCTVBfU1VQUE9SVEVECQkvKiBCTVAgaW1hZ2UgZmlsZSBmb3JtYXQgKi8KLSNkZWZpbmUgR0lGX1NVUFBPUlRFRAkJLyogR0lGIGltYWdlIGZpbGUgZm9ybWF0ICovCi0jZGVmaW5lIFBQTV9TVVBQT1JURUQJCS8qIFBCTVBMVVMgUFBNL1BHTSBpbWFnZSBmaWxlIGZvcm1hdCAqLwotI3VuZGVmIFJMRV9TVVBQT1JURUQJCS8qIFV0YWggUkxFIGltYWdlIGZpbGUgZm9ybWF0ICovCi0jZGVmaW5lIFRBUkdBX1NVUFBPUlRFRAkJLyogVGFyZ2EgaW1hZ2UgZmlsZSBmb3JtYXQgKi8KLQotI2RlZmluZSBUV09fRklMRV9DT01NQU5ETElORQkvKiBvcHRpb25hbCAqLwotI2RlZmluZSBVU0VfU0VUTU9ERQkJLyogTWljcm9zb2Z0IGhhcyBzZXRtb2RlKCkgKi8KLSN1bmRlZiBORUVEX1NJR05BTF9DQVRDSEVSCi0jdW5kZWYgRE9OVF9VU0VfQl9NT0RFCi0jdW5kZWYgUFJPR1JFU1NfUkVQT1JUCQkvKiBvcHRpb25hbCAqLwotCi0jZW5kaWYgLyogSlBFR19DSlBFR19ESlBFRyAqLwpkaWZmIC0tZ2l0IGEvd2luL2pwZWc2Mi5kZWYgYi93aW4vanBlZzYyLmRlZgpuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi4zYzMzZmJmCi0tLSAvZGV2L251bGwKKysrIGIvd2luL2pwZWc2Mi5kZWYKQEAgLTAsMCArMSwxMDIgQEAKK0VYUE9SVFMKKwlqY29weV9ibG9ja19yb3cgQCAxIDsgCisJamNvcHlfc2FtcGxlX3Jvd3MgQCAyIDsgCisJamRpdl9yb3VuZF91cCBAIDMgOyAKKwlqaW5pdF8xcGFzc19xdWFudGl6ZXIgQCA0IDsgCisJamluaXRfMnBhc3NfcXVhbnRpemVyIEAgNSA7IAorCWppbml0X2NfY29lZl9jb250cm9sbGVyIEAgNiA7IAorCWppbml0X2NfbWFpbl9jb250cm9sbGVyIEAgNyA7IAorCWppbml0X2NfbWFzdGVyX2NvbnRyb2wgQCA4IDsgCisJamluaXRfY19wcmVwX2NvbnRyb2xsZXIgQCA5IDsgCisJamluaXRfY29sb3JfY29udmVydGVyIEAgMTAgOyAKKwlqaW5pdF9jb2xvcl9kZWNvbnZlcnRlciBAIDExIDsgCisJamluaXRfY29tcHJlc3NfbWFzdGVyIEAgMTIgOyAKKwlqaW5pdF9kX2NvZWZfY29udHJvbGxlciBAIDEzIDsgCisJamluaXRfZF9tYWluX2NvbnRyb2xsZXIgQCAxNCA7IAorCWppbml0X2RfcG9zdF9jb250cm9sbGVyIEAgMTUgOyAKKwlqaW5pdF9kb3duc2FtcGxlciBAIDE2IDsgCisJamluaXRfZm9yd2FyZF9kY3QgQCAxNyA7IAorCWppbml0X2h1ZmZfZGVjb2RlciBAIDE4IDsgCisJamluaXRfaHVmZl9lbmNvZGVyIEAgMTkgOyAKKwlqaW5pdF9pbnB1dF9jb250cm9sbGVyIEAgMjAgOyAKKwlqaW5pdF9pbnZlcnNlX2RjdCBAIDIxIDsgCisJamluaXRfbWFya2VyX3JlYWRlciBAIDIyIDsgCisJamluaXRfbWFya2VyX3dyaXRlciBAIDIzIDsgCisJamluaXRfbWFzdGVyX2RlY29tcHJlc3MgQCAyNCA7IAorCWppbml0X21lbW9yeV9tZ3IgQCAyNSA7IAorCWppbml0X21lcmdlZF91cHNhbXBsZXIgQCAyNiA7IAorCWppbml0X3BodWZmX2RlY29kZXIgQCAyNyA7IAorCWppbml0X3BodWZmX2VuY29kZXIgQCAyOCA7IAorCWppbml0X3Vwc2FtcGxlciBAIDI5IDsgCisJanBlZ19DcmVhdGVDb21wcmVzcyBAIDMwIDsgCisJanBlZ19DcmVhdGVEZWNvbXByZXNzIEAgMzEgOyAKKwlqcGVnX2Fib3J0IEAgMzIgOyAKKwlqcGVnX2Fib3J0X2NvbXByZXNzIEAgMzMgOyAKKwlqcGVnX2Fib3J0X2RlY29tcHJlc3MgQCAzNCA7IAorCWpwZWdfYWRkX3F1YW50X3RhYmxlIEAgMzUgOyAKKwlqcGVnX2FsbG9jX2h1ZmZfdGFibGUgQCAzNiA7IAorCWpwZWdfYWxsb2NfcXVhbnRfdGFibGUgQCAzNyA7IAorCWpwZWdfY2FsY19vdXRwdXRfZGltZW5zaW9ucyBAIDM4IDsgCisJanBlZ19jb25zdW1lX2lucHV0IEAgMzkgOyAKKwlqcGVnX2NvcHlfY3JpdGljYWxfcGFyYW1ldGVycyBAIDQwIDsgCisJanBlZ19kZWZhdWx0X2NvbG9yc3BhY2UgQCA0MSA7IAorCWpwZWdfZGVzdHJveSBAIDQyIDsgCisJanBlZ19kZXN0cm95X2NvbXByZXNzIEAgNDMgOyAKKwlqcGVnX2Rlc3Ryb3lfZGVjb21wcmVzcyBAIDQ0IDsgCisJanBlZ19mZGN0X2Zsb2F0IEAgNDUgOyAKKwlqcGVnX2ZkY3RfaWZhc3QgQCA0NiA7IAorCWpwZWdfZmRjdF9pc2xvdyBAIDQ3IDsgCisJanBlZ19maWxsX2JpdF9idWZmZXIgQCA0OCA7IAorCWpwZWdfZmluaXNoX2NvbXByZXNzIEAgNDkgOyAKKwlqcGVnX2ZpbmlzaF9kZWNvbXByZXNzIEAgNTAgOyAKKwlqcGVnX2ZpbmlzaF9vdXRwdXQgQCA1MSA7IAorCWpwZWdfZnJlZV9sYXJnZSBAIDUyIDsgCisJanBlZ19mcmVlX3NtYWxsIEAgNTMgOyAKKwlqcGVnX2dlbl9vcHRpbWFsX3RhYmxlIEAgNTQgOyAKKwlqcGVnX2dldF9sYXJnZSBAIDU1IDsgCisJanBlZ19nZXRfc21hbGwgQCA1NiA7IAorCWpwZWdfaGFzX211bHRpcGxlX3NjYW5zIEAgNTcgOyAKKwlqcGVnX2h1ZmZfZGVjb2RlIEAgNTggOyAKKwlqcGVnX2lkY3RfMXgxIEAgNTkgOyAKKwlqcGVnX2lkY3RfMngyIEAgNjAgOyAKKwlqcGVnX2lkY3RfNHg0IEAgNjEgOyAKKwlqcGVnX2lkY3RfZmxvYXQgQCA2MiA7IAorCWpwZWdfaWRjdF9pZmFzdCBAIDYzIDsgCisJanBlZ19pZGN0X2lzbG93IEAgNjQgOyAKKwlqcGVnX2lucHV0X2NvbXBsZXRlIEAgNjUgOyAKKwlqcGVnX21ha2VfY19kZXJpdmVkX3RibCBAIDY2IDsgCisJanBlZ19tYWtlX2RfZGVyaXZlZF90YmwgQCA2NyA7IAorCWpwZWdfbWVtX2F2YWlsYWJsZSBAIDY4IDsgCisJanBlZ19tZW1faW5pdCBAIDY5IDsgCisJanBlZ19tZW1fdGVybSBAIDcwIDsgCisJanBlZ19uZXdfY29sb3JtYXAgQCA3MSA7IAorCWpwZWdfb3Blbl9iYWNraW5nX3N0b3JlIEAgNzIgOyAKKwlqcGVnX3F1YWxpdHlfc2NhbGluZyBAIDczIDsgCisJanBlZ19yZWFkX2NvZWZmaWNpZW50cyBAIDc0IDsgCisJanBlZ19yZWFkX2hlYWRlciBAIDc1IDsgCisJanBlZ19yZWFkX3Jhd19kYXRhIEAgNzYgOyAKKwlqcGVnX3JlYWRfc2NhbmxpbmVzIEAgNzcgOyAKKwlqcGVnX3Jlc3luY190b19yZXN0YXJ0IEAgNzggOyAKKwlqcGVnX3NhdmVfbWFya2VycyBAIDc5IDsgCisJanBlZ19zZXRfY29sb3JzcGFjZSBAIDgwIDsgCisJanBlZ19zZXRfZGVmYXVsdHMgQCA4MSA7IAorCWpwZWdfc2V0X2xpbmVhcl9xdWFsaXR5IEAgODIgOyAKKwlqcGVnX3NldF9tYXJrZXJfcHJvY2Vzc29yIEAgODMgOyAKKwlqcGVnX3NldF9xdWFsaXR5IEAgODQgOyAKKwlqcGVnX3NpbXBsZV9wcm9ncmVzc2lvbiBAIDg1IDsgCisJanBlZ19zdGFydF9jb21wcmVzcyBAIDg2IDsgCisJanBlZ19zdGFydF9kZWNvbXByZXNzIEAgODcgOyAKKwlqcGVnX3N0YXJ0X291dHB1dCBAIDg4IDsgCisJanBlZ19zdGRfZXJyb3IgQCA4OSA7IAorCWpwZWdfc3RkaW9fZGVzdCBAIDkwIDsgCisJanBlZ19zdGRpb19zcmMgQCA5MSA7IAorCWpwZWdfc3VwcHJlc3NfdGFibGVzIEAgOTIgOyAKKwlqcGVnX3dyaXRlX2NvZWZmaWNpZW50cyBAIDkzIDsgCisJanBlZ193cml0ZV9tX2J5dGUgQCA5NCA7IAorCWpwZWdfd3JpdGVfbV9oZWFkZXIgQCA5NSA7IAorCWpwZWdfd3JpdGVfbWFya2VyIEAgOTYgOyAKKwlqcGVnX3dyaXRlX3Jhd19kYXRhIEAgOTcgOyAKKwlqcGVnX3dyaXRlX3NjYW5saW5lcyBAIDk4IDsgCisJanBlZ193cml0ZV90YWJsZXMgQCA5OSA7IAorCWpyb3VuZF91cCBAIDEwMCA7IAorCWp6ZXJvX2ZhciBAIDEwMSA7IApkaWZmIC0tZ2l0IGEvd2luL2pwZWc3LmRlZiBiL3dpbi9qcGVnNy5kZWYKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNWNhMjI3YgotLS0gL2Rldi9udWxsCisrKyBiL3dpbi9qcGVnNy5kZWYKQEAgLTAsMCArMSwxMDQgQEAKK0VYUE9SVFMKKwlqY29weV9ibG9ja19yb3cgQCAxIDsgCisJamNvcHlfc2FtcGxlX3Jvd3MgQCAyIDsgCisJamRpdl9yb3VuZF91cCBAIDMgOyAKKwlqaW5pdF8xcGFzc19xdWFudGl6ZXIgQCA0IDsgCisJamluaXRfMnBhc3NfcXVhbnRpemVyIEAgNSA7IAorCWppbml0X2NfY29lZl9jb250cm9sbGVyIEAgNiA7IAorCWppbml0X2NfbWFpbl9jb250cm9sbGVyIEAgNyA7IAorCWppbml0X2NfbWFzdGVyX2NvbnRyb2wgQCA4IDsgCisJamluaXRfY19wcmVwX2NvbnRyb2xsZXIgQCA5IDsgCisJamluaXRfY29sb3JfY29udmVydGVyIEAgMTAgOyAKKwlqaW5pdF9jb2xvcl9kZWNvbnZlcnRlciBAIDExIDsgCisJamluaXRfY29tcHJlc3NfbWFzdGVyIEAgMTIgOyAKKwlqaW5pdF9kX2NvZWZfY29udHJvbGxlciBAIDEzIDsgCisJamluaXRfZF9tYWluX2NvbnRyb2xsZXIgQCAxNCA7IAorCWppbml0X2RfcG9zdF9jb250cm9sbGVyIEAgMTUgOyAKKwlqaW5pdF9kb3duc2FtcGxlciBAIDE2IDsgCisJamluaXRfZm9yd2FyZF9kY3QgQCAxNyA7IAorCWppbml0X2h1ZmZfZGVjb2RlciBAIDE4IDsgCisJamluaXRfaHVmZl9lbmNvZGVyIEAgMTkgOyAKKwlqaW5pdF9pbnB1dF9jb250cm9sbGVyIEAgMjAgOyAKKwlqaW5pdF9pbnZlcnNlX2RjdCBAIDIxIDsgCisJamluaXRfbWFya2VyX3JlYWRlciBAIDIyIDsgCisJamluaXRfbWFya2VyX3dyaXRlciBAIDIzIDsgCisJamluaXRfbWFzdGVyX2RlY29tcHJlc3MgQCAyNCA7IAorCWppbml0X21lbW9yeV9tZ3IgQCAyNSA7IAorCWppbml0X21lcmdlZF91cHNhbXBsZXIgQCAyNiA7IAorCWppbml0X3BodWZmX2RlY29kZXIgQCAyNyA7IAorCWppbml0X3BodWZmX2VuY29kZXIgQCAyOCA7IAorCWppbml0X3Vwc2FtcGxlciBAIDI5IDsgCisJanBlZ19DcmVhdGVDb21wcmVzcyBAIDMwIDsgCisJanBlZ19DcmVhdGVEZWNvbXByZXNzIEAgMzEgOyAKKwlqcGVnX2Fib3J0IEAgMzIgOyAKKwlqcGVnX2Fib3J0X2NvbXByZXNzIEAgMzMgOyAKKwlqcGVnX2Fib3J0X2RlY29tcHJlc3MgQCAzNCA7IAorCWpwZWdfYWRkX3F1YW50X3RhYmxlIEAgMzUgOyAKKwlqcGVnX2FsbG9jX2h1ZmZfdGFibGUgQCAzNiA7IAorCWpwZWdfYWxsb2NfcXVhbnRfdGFibGUgQCAzNyA7IAorCWpwZWdfY2FsY19qcGVnX2RpbWVuc2lvbnMgQCAzOCA7IAorCWpwZWdfY2FsY19vdXRwdXRfZGltZW5zaW9ucyBAIDM5IDsgCisJanBlZ19jb25zdW1lX2lucHV0IEAgNDAgOyAKKwlqcGVnX2NvcHlfY3JpdGljYWxfcGFyYW1ldGVycyBAIDQxIDsgCisJanBlZ19kZWZhdWx0X2NvbG9yc3BhY2UgQCA0MiA7IAorCWpwZWdfZGVmYXVsdF9xdGFibGVzIEAgNDMgOworCWpwZWdfZGVzdHJveSBAIDQ0IDsgCisJanBlZ19kZXN0cm95X2NvbXByZXNzIEAgNDUgOyAKKwlqcGVnX2Rlc3Ryb3lfZGVjb21wcmVzcyBAIDQ2IDsgCisJanBlZ19mZGN0X2Zsb2F0IEAgNDcgOyAKKwlqcGVnX2ZkY3RfaWZhc3QgQCA0OCA7IAorCWpwZWdfZmRjdF9pc2xvdyBAIDQ5IDsgCisJanBlZ19maWxsX2JpdF9idWZmZXIgQCA1MCA7IAorCWpwZWdfZmluaXNoX2NvbXByZXNzIEAgNTEgOyAKKwlqcGVnX2ZpbmlzaF9kZWNvbXByZXNzIEAgNTIgOyAKKwlqcGVnX2ZpbmlzaF9vdXRwdXQgQCA1MyA7IAorCWpwZWdfZnJlZV9sYXJnZSBAIDU0IDsgCisJanBlZ19mcmVlX3NtYWxsIEAgNTUgOyAKKwlqcGVnX2dlbl9vcHRpbWFsX3RhYmxlIEAgNTYgOyAKKwlqcGVnX2dldF9sYXJnZSBAIDU3IDsgCisJanBlZ19nZXRfc21hbGwgQCA1OCA7IAorCWpwZWdfaGFzX211bHRpcGxlX3NjYW5zIEAgNTkgOyAKKwlqcGVnX2h1ZmZfZGVjb2RlIEAgNjAgOyAKKwlqcGVnX2lkY3RfMXgxIEAgNjEgOyAKKwlqcGVnX2lkY3RfMngyIEAgNjIgOyAKKwlqcGVnX2lkY3RfNHg0IEAgNjMgOyAKKwlqcGVnX2lkY3RfZmxvYXQgQCA2NCA7IAorCWpwZWdfaWRjdF9pZmFzdCBAIDY1IDsgCisJanBlZ19pZGN0X2lzbG93IEAgNjYgOyAKKwlqcGVnX2lucHV0X2NvbXBsZXRlIEAgNjcgOyAKKwlqcGVnX21ha2VfY19kZXJpdmVkX3RibCBAIDY4IDsgCisJanBlZ19tYWtlX2RfZGVyaXZlZF90YmwgQCA2OSA7IAorCWpwZWdfbWVtX2F2YWlsYWJsZSBAIDcwIDsgCisJanBlZ19tZW1faW5pdCBAIDcxIDsgCisJanBlZ19tZW1fdGVybSBAIDcyIDsgCisJanBlZ19uZXdfY29sb3JtYXAgQCA3MyA7IAorCWpwZWdfb3Blbl9iYWNraW5nX3N0b3JlIEAgNzQgOyAKKwlqcGVnX3F1YWxpdHlfc2NhbGluZyBAIDc1IDsgCisJanBlZ19yZWFkX2NvZWZmaWNpZW50cyBAIDc2IDsgCisJanBlZ19yZWFkX2hlYWRlciBAIDc3IDsgCisJanBlZ19yZWFkX3Jhd19kYXRhIEAgNzggOyAKKwlqcGVnX3JlYWRfc2NhbmxpbmVzIEAgNzkgOyAKKwlqcGVnX3Jlc3luY190b19yZXN0YXJ0IEAgODAgOyAKKwlqcGVnX3NhdmVfbWFya2VycyBAIDgxIDsgCisJanBlZ19zZXRfY29sb3JzcGFjZSBAIDgyIDsgCisJanBlZ19zZXRfZGVmYXVsdHMgQCA4MyA7IAorCWpwZWdfc2V0X2xpbmVhcl9xdWFsaXR5IEAgODQgOyAKKwlqcGVnX3NldF9tYXJrZXJfcHJvY2Vzc29yIEAgODUgOyAKKwlqcGVnX3NldF9xdWFsaXR5IEAgODYgOyAKKwlqcGVnX3NpbXBsZV9wcm9ncmVzc2lvbiBAIDg3IDsgCisJanBlZ19zdGFydF9jb21wcmVzcyBAIDg4IDsgCisJanBlZ19zdGFydF9kZWNvbXByZXNzIEAgODkgOyAKKwlqcGVnX3N0YXJ0X291dHB1dCBAIDkwIDsgCisJanBlZ19zdGRfZXJyb3IgQCA5MSA7IAorCWpwZWdfc3RkaW9fZGVzdCBAIDkyIDsgCisJanBlZ19zdGRpb19zcmMgQCA5MyA7IAorCWpwZWdfc3VwcHJlc3NfdGFibGVzIEAgOTQgOyAKKwlqcGVnX3dyaXRlX2NvZWZmaWNpZW50cyBAIDk1IDsgCisJanBlZ193cml0ZV9tX2J5dGUgQCA5NiA7IAorCWpwZWdfd3JpdGVfbV9oZWFkZXIgQCA5NyA7IAorCWpwZWdfd3JpdGVfbWFya2VyIEAgOTggOyAKKwlqcGVnX3dyaXRlX3Jhd19kYXRhIEAgOTkgOyAKKwlqcGVnX3dyaXRlX3NjYW5saW5lcyBAIDEwMCA7IAorCWpwZWdfd3JpdGVfdGFibGVzIEAgMTAxIDsgCisJanJvdW5kX3VwIEAgMTAyIDsgCisJanplcm9fZmFyIEAgMTAzIDsgCmRpZmYgLS1naXQgYS93aW4vanBlZzguZGVmIGIvd2luL2pwZWc4LmRlZgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zZmE2MTExCi0tLSAvZGV2L251bGwKKysrIGIvd2luL2pwZWc4LmRlZgpAQCAtMCwwICsxLDEwNyBAQAorRVhQT1JUUworCWpjb3B5X2Jsb2NrX3JvdyBAIDEgOyAKKwlqY29weV9zYW1wbGVfcm93cyBAIDIgOyAKKwlqZGl2X3JvdW5kX3VwIEAgMyA7IAorCWppbml0XzFwYXNzX3F1YW50aXplciBAIDQgOyAKKwlqaW5pdF8ycGFzc19xdWFudGl6ZXIgQCA1IDsgCisJamluaXRfY19jb2VmX2NvbnRyb2xsZXIgQCA2IDsgCisJamluaXRfY19tYWluX2NvbnRyb2xsZXIgQCA3IDsgCisJamluaXRfY19tYXN0ZXJfY29udHJvbCBAIDggOyAKKwlqaW5pdF9jX3ByZXBfY29udHJvbGxlciBAIDkgOyAKKwlqaW5pdF9jb2xvcl9jb252ZXJ0ZXIgQCAxMCA7IAorCWppbml0X2NvbG9yX2RlY29udmVydGVyIEAgMTEgOyAKKwlqaW5pdF9jb21wcmVzc19tYXN0ZXIgQCAxMiA7IAorCWppbml0X2RfY29lZl9jb250cm9sbGVyIEAgMTMgOyAKKwlqaW5pdF9kX21haW5fY29udHJvbGxlciBAIDE0IDsgCisJamluaXRfZF9wb3N0X2NvbnRyb2xsZXIgQCAxNSA7IAorCWppbml0X2Rvd25zYW1wbGVyIEAgMTYgOyAKKwlqaW5pdF9mb3J3YXJkX2RjdCBAIDE3IDsgCisJamluaXRfaHVmZl9kZWNvZGVyIEAgMTggOyAKKwlqaW5pdF9odWZmX2VuY29kZXIgQCAxOSA7IAorCWppbml0X2lucHV0X2NvbnRyb2xsZXIgQCAyMCA7IAorCWppbml0X2ludmVyc2VfZGN0IEAgMjEgOyAKKwlqaW5pdF9tYXJrZXJfcmVhZGVyIEAgMjIgOyAKKwlqaW5pdF9tYXJrZXJfd3JpdGVyIEAgMjMgOyAKKwlqaW5pdF9tYXN0ZXJfZGVjb21wcmVzcyBAIDI0IDsgCisJamluaXRfbWVtb3J5X21nciBAIDI1IDsgCisJamluaXRfbWVyZ2VkX3Vwc2FtcGxlciBAIDI2IDsgCisJamluaXRfcGh1ZmZfZGVjb2RlciBAIDI3IDsgCisJamluaXRfcGh1ZmZfZW5jb2RlciBAIDI4IDsgCisJamluaXRfdXBzYW1wbGVyIEAgMjkgOyAKKwlqcGVnX0NyZWF0ZUNvbXByZXNzIEAgMzAgOyAKKwlqcGVnX0NyZWF0ZURlY29tcHJlc3MgQCAzMSA7IAorCWpwZWdfYWJvcnQgQCAzMiA7IAorCWpwZWdfYWJvcnRfY29tcHJlc3MgQCAzMyA7IAorCWpwZWdfYWJvcnRfZGVjb21wcmVzcyBAIDM0IDsgCisJanBlZ19hZGRfcXVhbnRfdGFibGUgQCAzNSA7IAorCWpwZWdfYWxsb2NfaHVmZl90YWJsZSBAIDM2IDsgCisJanBlZ19hbGxvY19xdWFudF90YWJsZSBAIDM3IDsgCisJanBlZ19jYWxjX2pwZWdfZGltZW5zaW9ucyBAIDM4IDsgCisJanBlZ19jYWxjX291dHB1dF9kaW1lbnNpb25zIEAgMzkgOyAKKwlqcGVnX2NvbnN1bWVfaW5wdXQgQCA0MCA7IAorCWpwZWdfY29weV9jcml0aWNhbF9wYXJhbWV0ZXJzIEAgNDEgOyAKKwlqcGVnX2NvcmVfb3V0cHV0X2RpbWVuc2lvbnMgQCA0MiA7IAorCWpwZWdfZGVmYXVsdF9jb2xvcnNwYWNlIEAgNDMgOyAKKwlqcGVnX2RlZmF1bHRfcXRhYmxlcyBAIDQ0IDsKKwlqcGVnX2Rlc3Ryb3kgQCA0NSA7IAorCWpwZWdfZGVzdHJveV9jb21wcmVzcyBAIDQ2IDsgCisJanBlZ19kZXN0cm95X2RlY29tcHJlc3MgQCA0NyA7IAorCWpwZWdfZmRjdF9mbG9hdCBAIDQ4IDsgCisJanBlZ19mZGN0X2lmYXN0IEAgNDkgOyAKKwlqcGVnX2ZkY3RfaXNsb3cgQCA1MCA7IAorCWpwZWdfZmlsbF9iaXRfYnVmZmVyIEAgNTEgOyAKKwlqcGVnX2ZpbmlzaF9jb21wcmVzcyBAIDUyIDsgCisJanBlZ19maW5pc2hfZGVjb21wcmVzcyBAIDUzIDsgCisJanBlZ19maW5pc2hfb3V0cHV0IEAgNTQgOyAKKwlqcGVnX2ZyZWVfbGFyZ2UgQCA1NSA7IAorCWpwZWdfZnJlZV9zbWFsbCBAIDU2IDsgCisJanBlZ19nZW5fb3B0aW1hbF90YWJsZSBAIDU3IDsgCisJanBlZ19nZXRfbGFyZ2UgQCA1OCA7IAorCWpwZWdfZ2V0X3NtYWxsIEAgNTkgOyAKKwlqcGVnX2hhc19tdWx0aXBsZV9zY2FucyBAIDYwIDsgCisJanBlZ19odWZmX2RlY29kZSBAIDYxIDsgCisJanBlZ19pZGN0XzF4MSBAIDYyIDsgCisJanBlZ19pZGN0XzJ4MiBAIDYzIDsgCisJanBlZ19pZGN0XzR4NCBAIDY0IDsgCisJanBlZ19pZGN0X2Zsb2F0IEAgNjUgOyAKKwlqcGVnX2lkY3RfaWZhc3QgQCA2NiA7IAorCWpwZWdfaWRjdF9pc2xvdyBAIDY3IDsgCisJanBlZ19pbnB1dF9jb21wbGV0ZSBAIDY4IDsgCisJanBlZ19tYWtlX2NfZGVyaXZlZF90YmwgQCA2OSA7IAorCWpwZWdfbWFrZV9kX2Rlcml2ZWRfdGJsIEAgNzAgOyAKKwlqcGVnX21lbV9hdmFpbGFibGUgQCA3MSA7IAorCWpwZWdfbWVtX2Rlc3QgQCA3MiA7CisJanBlZ19tZW1faW5pdCBAIDczIDsgCisJanBlZ19tZW1fc3JjIEAgNzQgOworCWpwZWdfbWVtX3Rlcm0gQCA3NSA7IAorCWpwZWdfbmV3X2NvbG9ybWFwIEAgNzYgOyAKKwlqcGVnX29wZW5fYmFja2luZ19zdG9yZSBAIDc3IDsgCisJanBlZ19xdWFsaXR5X3NjYWxpbmcgQCA3OCA7IAorCWpwZWdfcmVhZF9jb2VmZmljaWVudHMgQCA3OSA7IAorCWpwZWdfcmVhZF9oZWFkZXIgQCA4MCA7IAorCWpwZWdfcmVhZF9yYXdfZGF0YSBAIDgxIDsgCisJanBlZ19yZWFkX3NjYW5saW5lcyBAIDgyIDsgCisJanBlZ19yZXN5bmNfdG9fcmVzdGFydCBAIDgzIDsgCisJanBlZ19zYXZlX21hcmtlcnMgQCA4NCA7IAorCWpwZWdfc2V0X2NvbG9yc3BhY2UgQCA4NSA7IAorCWpwZWdfc2V0X2RlZmF1bHRzIEAgODYgOyAKKwlqcGVnX3NldF9saW5lYXJfcXVhbGl0eSBAIDg3IDsgCisJanBlZ19zZXRfbWFya2VyX3Byb2Nlc3NvciBAIDg4IDsgCisJanBlZ19zZXRfcXVhbGl0eSBAIDg5IDsgCisJanBlZ19zaW1wbGVfcHJvZ3Jlc3Npb24gQCA5MCA7IAorCWpwZWdfc3RhcnRfY29tcHJlc3MgQCA5MSA7IAorCWpwZWdfc3RhcnRfZGVjb21wcmVzcyBAIDkyIDsgCisJanBlZ19zdGFydF9vdXRwdXQgQCA5MyA7IAorCWpwZWdfc3RkX2Vycm9yIEAgOTQgOyAKKwlqcGVnX3N0ZGlvX2Rlc3QgQCA5NSA7IAorCWpwZWdfc3RkaW9fc3JjIEAgOTYgOyAKKwlqcGVnX3N1cHByZXNzX3RhYmxlcyBAIDk3IDsgCisJanBlZ193cml0ZV9jb2VmZmljaWVudHMgQCA5OCA7IAorCWpwZWdfd3JpdGVfbV9ieXRlIEAgOTkgOyAKKwlqcGVnX3dyaXRlX21faGVhZGVyIEAgMTAwIDsgCisJanBlZ193cml0ZV9tYXJrZXIgQCAxMDEgOyAKKwlqcGVnX3dyaXRlX3Jhd19kYXRhIEAgMTAyIDsgCisJanBlZ193cml0ZV9zY2FubGluZXMgQCAxMDMgOyAKKwlqcGVnX3dyaXRlX3RhYmxlcyBAIDEwNCA7IAorCWpyb3VuZF91cCBAIDEwNSA7IAorCWp6ZXJvX2ZhciBAIDEwNiA7IApkaWZmIC0tZ2l0IGEvd2luL2pzaW1kY2ZnLmluYyBiL3dpbi9qc2ltZGNmZy5pbmMKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uNjhlMjJlOAotLS0gL2Rldi9udWxsCisrKyBiL3dpbi9qc2ltZGNmZy5pbmMKQEAgLTAsMCArMSw2OSBAQAorOworOyBBdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBpbmNsdWRlIGZpbGUgZnJvbSBqc2ltZGNmZy5pbmMuaAorOworOworOyAtLSBqcGVnbGliLmgKKzsKKyVkZWZpbmUgRENUU0laRSA4CislZGVmaW5lIERDVFNJWkUyIDY0Cis7Cis7IC0tIGptb3JlY2ZnLmgKKzsKKyVkZWZpbmUgUkdCX1JFRCAwCislZGVmaW5lIFJHQl9HUkVFTiAxCislZGVmaW5lIFJHQl9CTFVFIDIKKyVkZWZpbmUgUkdCX1BJWEVMU0laRSAzCis7IFJlcHJlc2VudGF0aW9uIG9mIGEgc2luZ2xlIHNhbXBsZSAocGl4ZWwgZWxlbWVudCB2YWx1ZSkuCis7IE9uIHRoaXMgU0lNRCBpbXBsZW1lbnRhdGlvbiwgdGhpcyBtdXN0IGJlICd1bnNpZ25lZCBjaGFyJy4KKzsKKyVkZWZpbmUgSlNBTVBMRSBieXRlIDsgdW5zaWduZWQgY2hhcgorJWRlZmluZSBTSVpFT0ZfSlNBTVBMRSBTSVpFT0ZfQllURSA7IHNpemVvZihKU0FNUExFKQorJWRlZmluZSBDRU5URVJKU0FNUExFIDEyOAorOyBSZXByZXNlbnRhdGlvbiBvZiBhIERDVCBmcmVxdWVuY3kgY29lZmZpY2llbnQuCis7IE9uIHRoaXMgU0lNRCBpbXBsZW1lbnRhdGlvbiwgdGhpcyBtdXN0IGJlICdzaG9ydCcuCis7CislZGVmaW5lIEpDT0VGIHdvcmQgOyBzaG9ydAorJWRlZmluZSBTSVpFT0ZfSkNPRUYgU0laRU9GX1dPUkQgOyBzaXplb2YoSkNPRUYpCis7IERhdGF0eXBlIHVzZWQgZm9yIGltYWdlIGRpbWVuc2lvbnMuCis7IE9uIHRoaXMgU0lNRCBpbXBsZW1lbnRhdGlvbiwgdGhpcyBtdXN0IGJlICd1bnNpZ25lZCBpbnQnLgorOworJWRlZmluZSBKRElNRU5TSU9OIGR3b3JkIDsgdW5zaWduZWQgaW50CislZGVmaW5lIFNJWkVPRl9KRElNRU5TSU9OIFNJWkVPRl9EV09SRCA7IHNpemVvZihKRElNRU5TSU9OKQorJWRlZmluZSBKU0FNUFJPVyBQT0lOVEVSIDsgSlNBTVBMRSAqIChqcGVnbGliLmgpCislZGVmaW5lIEpTQU1QQVJSQVkgUE9JTlRFUiA7IEpTQU1QUk9XICogKGpwZWdsaWIuaCkKKyVkZWZpbmUgSlNBTVBJTUFHRSBQT0lOVEVSIDsgSlNBTVBBUlJBWSAqIChqcGVnbGliLmgpCislZGVmaW5lIEpDT0VGUFRSIFBPSU5URVIgOyBKQ09FRiAqIChqcGVnbGliLmgpCislZGVmaW5lIFNJWkVPRl9KU0FNUFJPVyBTSVpFT0ZfUE9JTlRFUiA7IHNpemVvZihKU0FNUFJPVykKKyVkZWZpbmUgU0laRU9GX0pTQU1QQVJSQVkgU0laRU9GX1BPSU5URVIgOyBzaXplb2YoSlNBTVBBUlJBWSkKKyVkZWZpbmUgU0laRU9GX0pTQU1QSU1BR0UgU0laRU9GX1BPSU5URVIgOyBzaXplb2YoSlNBTVBJTUFHRSkKKyVkZWZpbmUgU0laRU9GX0pDT0VGUFRSIFNJWkVPRl9QT0lOVEVSIDsgc2l6ZW9mKEpDT0VGUFRSKQorOworOyAtLSBqZGN0LmgKKzsKKzsgQSBmb3J3YXJkIERDVCByb3V0aW5lIGlzIGdpdmVuIGEgcG9pbnRlciB0byBhIHdvcmsgYXJlYSBvZiB0eXBlIERDVEVMRU1bXTsKKzsgdGhlIERDVCBpcyB0byBiZSBwZXJmb3JtZWQgaW4tcGxhY2UgaW4gdGhhdCBidWZmZXIuCis7IFRvIG1heGltaXplIHBhcmFsbGVsaXNtLCBUeXBlIERDVEVMRU0gaXMgY2hhbmdlZCB0byBzaG9ydCAob3JpZ2luYWxseSwgaW50KS4KKzsKKyVkZWZpbmUgRENURUxFTSB3b3JkIDsgc2hvcnQKKyVkZWZpbmUgU0laRU9GX0RDVEVMRU0gU0laRU9GX1dPUkQgOyBzaXplb2YoRENURUxFTSkKKyVkZWZpbmUgZmxvYXQgRlAzMiA7IGZsb2F0CislZGVmaW5lIFNJWkVPRl9GQVNUX0ZMT0FUIFNJWkVPRl9GUDMyIDsgc2l6ZW9mKGZsb2F0KQorOyBUbyBtYXhpbWl6ZSBwYXJhbGxlbGlzbSwgVHlwZSBzaG9ydCBpcyBjaGFuZ2VkIHRvIHNob3J0LgorOworJWRlZmluZSBJU0xPV19NVUxUX1RZUEUgd29yZCA7IG11c3QgYmUgc2hvcnQKKyVkZWZpbmUgU0laRU9GX0lTTE9XX01VTFRfVFlQRSBTSVpFT0ZfV09SRCA7IHNpemVvZihJU0xPV19NVUxUX1RZUEUpCislZGVmaW5lIElGQVNUX01VTFRfVFlQRSB3b3JkIDsgbXVzdCBiZSBzaG9ydAorJWRlZmluZSBTSVpFT0ZfSUZBU1RfTVVMVF9UWVBFIFNJWkVPRl9XT1JEIDsgc2l6ZW9mKElGQVNUX01VTFRfVFlQRSkKKyVkZWZpbmUgSUZBU1RfU0NBTEVfQklUUyAyIDsgZnJhY3Rpb25hbCBiaXRzIGluIHNjYWxlIGZhY3RvcnMKKyVkZWZpbmUgRkxPQVRfTVVMVF9UWVBFIEZQMzIgOyBtdXN0IGJlIGZsb2F0CislZGVmaW5lIFNJWkVPRl9GTE9BVF9NVUxUX1RZUEUgU0laRU9GX0ZQMzIgOyBzaXplb2YoRkxPQVRfTVVMVF9UWVBFKQorOworOyAtLSBqc2ltZC5oCis7CislZGVmaW5lIEpTSU1EX05PTkUgMHgwMAorJWRlZmluZSBKU0lNRF9NTVggMHgwMQorJWRlZmluZSBKU0lNRF8zRE5PVyAweDAyCislZGVmaW5lIEpTSU1EX1NTRSAweDA0CislZGVmaW5lIEpTSU1EX1NTRTIgMHgwOAorOyBTaG9ydCBmb3JtcyBvZiBleHRlcm5hbCBuYW1lcyBmb3Igc3lzdGVtcyB3aXRoIGJyYWluLWRhbWFnZWQgbGlua2Vycy4KKzsK